nVidia CUDA 文章也寫了不少了,一些比較基本的,應該也都寫的差不多了?對於一般入門來說,這樣應該已經夠了吧?再下來,應該是比較進階的東西了…而 Heresy 在這邊,也大概來提一下目前 Heresy 感覺上,CUDA 的一些缺點吧∼
- 太新
其實簡單來說,CUDA 在目前最大的缺點,就是他太年輕了。CUDA 由 2007 年初開始 Beta,到了 2007 年中正式推出 1.0 版;以正式版來說,由 1.0 到現在的 1.1 版,也不到一歲。也因此,各類的資源、文章也都還是相當得少!而由於會去研究 CUDA 的人,大多也都是比較專業的,也導致中文的部分,資源更為缺乏。
而也由於發展時間還不夠長,CUDA 整個開發環境,不管是文件或是工具,也還稱不上成熟、完整。以 CUDA 裡的 texture 來當例子,在《CUDA Programming Guide 1.1》中,Heresy 沒有找到他在使用上必須「在 file scope 做宣告」的限制,而是在別人的文章中得知的;而在編譯器 nvcc 的部分,針對這樣的寫法,編譯器也沒有給出是當的錯誤訊息,而是直接送出編譯器內部錯誤的訊息…讓人有點沒辦法去找到問題所在。
- 綁顯示卡
目前 CUDA 仍屬於 nVidia 的獨家技術,只能用於 GeForce 8 以後的顯示卡(CUDA 1.1 支援的裝置);而由於這種東西主要是根據 GPU 的架構來設計的,所以其他家的顯示晶片會支援 CUDA 的機率應該是極低。相較於傳統根據 OpenGL 或 Direct3D 所寫的 GPGPU 來說,使用 nVidia 的 CUDA 就沒有辦法跨廠牌的顯示卡運作了∼
只能用在 nVidia 顯示卡上這點,在某些程度上,也影響了 CUDA 的擴展;雖然 Heresy 個人討厭 ATi,但是還是不少人在用啊∼更晃論不少人還是使用 Intel IGP 的。
- 不支援 double 計算
CUDA 在做為高速計算裝置時,有一項最被人詬病的一點,就是她的精確度。礙於傳統 GPU 的設計,CUDA 在 1.0/1.1 的現在,仍然只能支援 float 的計算,而不支援 double 的運算;這點在許多講究精確度的計算方面,算是滿慘的一點,更使的 CUDA 在應用上更為受限。當然,nVidia 也是知道這一點的,在將來的 CUDA,勢必一定會加入 double 的支援,但畢竟不是現在。
- 某種程度上,危險
首先,先來看一張 Acrobat Reader 8 的截圖
可以看到文件區內,都有一些怪怪的點吧?這是某次 Heresy 把 CUDA 程式寫爛後,用 Acrobat Reader 看文件時的情形;而之後 Heresy 開啟 3D 遊戲時,畫面也有類似這樣的雜點。
原因呢?Heresy 認為是因為 CUDA 的程式沒寫好,所以改到不該改的記憶體吧?而之後,其他會使用到 GPU 的功能,也連帶受到影響(Acrobat Reader 8 有使用 GPU 來加速的功能);這種錯誤的影響,等到 Heresy 重開機後才消除。
現在一般寫 Windows 的程式,應該都是在保護模式下執行了,所以不容易一個程式爛掉了,會影響到其他程式(當然,不是不可能);但是相對的,感覺上 CUDA 在顯示卡中是以真實模式在運作,似乎有可能在某些情形下,影響到其他使用顯示卡資源的程式。相較之下,CUDA 程式的安全性似乎就比較低了?(不知道以後會不會有 GPU 病毒? :p)不過這點仍屬於 Heresy 個人得臆測就是了。
另外,CUDA 程式也有可能會造成螢幕顯示的畫面沒有回應的情形,在這種情形下,除了重開機,似乎是沒有辦法去中斷的…而一般使用 CPU 的程式可以透過工作管理員來監控他的資源使用,但是 CUDA 這類的 GPGPU 程式,目前也還沒有類似的管理程式,也使得這類的程式,沒辦法取得在執行期間取得相關細節。