眾所周知的現行的pc作業系統平台中負責主要運算處理的核心元件 是cpu,
也就是所謂的泛用型處理器,其處理器架構乃是因應沿革迄今的x86指令集而設計,
為仍能兼容於之前所開發的x86指令集,也等同限制了處理器的運算單元的硬體發展
尤其x86指令集乃是屬於cisc的架構,處理器的運算管線配置也更形複雜
其結果便是限制了處理器大量平行運算的效能..例如多媒體檔案的播放或轉檔..
而隨著高效能顯示晶片的發展,現代的顯示晶片已具有高度的可程式化能力,而顯示晶片通常具有相當高的記憶體頻寬,以及大量的執行單元,所以就有利用顯示晶片來幫助進行某些計算工作的想法,即 GPGPU。 NVIDIA 的 GPGPU 模型便是CUDA技術平台。它使用 C 語言為基礎,可以直接以大多數人熟悉的 C 語言,寫出在顯示晶片上執行的程式,而不需要去學習特定的指令或是特殊的結構。
Phsyx原為AGEIA公司所開發的物理運算引擎,特點是可以運用獨立的浮點处理器(包括獨立的物理加速卡和GPU)進行複雜的運算效果,呈現更真實的遊戲體驗,也同時減輕cpu的運算負擔。在nv買下該公司後,通過cuda而將之轉變為重要的cuda的應用推廣,結合遊戲開發商支持該物理運算技術,也就是讓gpu能夠加速物理運算, 達到更佳的遊戲體驗.而geforce 8系列之後的顯示晶片都支援該技術,'並直接透過驅動程式安裝,所以開啟或關閉也可於驅動程式控制台內設定.
目前 GPGPU 的程式模型,由於顯示晶片大量平行計算的特性。主要的特點包括:
1.記憶體存取 latency 的問題:CPU 通常使用 cache 來減少存取主記憶體的次數,以避免記憶體 latency 影響 執行效率。顯示晶片則多半沒有 cache的設計(或很小),而利用平行化執行的方式來隱藏記憶體的 latency。
2.分支指令的問題:CPU 通常會利用分支預測等方式來減少分支指令造成的 pipeline bubble。顯示晶片則多半使用類似處理記憶體 latency 的方式。不過,通常顯示晶片在處理分支的效率會比較差。
因此最適合利用 CUDA 處理的是可以大量平行化的運算,才能有效隱藏記憶體的 latency,並利用顯示晶片上的大量執行單元而提高作業效率,如果不能大量平行化的問題,使用 CUDA 就沒辦法達到最好的效率了,甚至造成錯誤的運算結果。




























































































