其實書上並沒有第0章啦,這篇東西是我自己寫的,談談cuda到底是什麼,以及cuda的基本使用和c之間的同異。
平行計算,是一種和序列計算有著本質區別的運算。根據傳統的計算機計算的理論,計算機處理的資料分為兩種,指令流和資料流,因此就有幾種不同的計算方式:
1.sisd,單指令單資料,也就是乙個指令對應乙個資料。
2.simd,單指令多資料,也就是乙個指令對應多個資料。
3.misd,多指令單資料,也就是多個指令對應乙個資料。
4.mimd,多指令多資料,也就是多個指令對應多個資料。
我們的平行計算,通常對應的就是simd,也就是乙個平行計算函式可以同時處理多個資料。
那這種是乙個規則下的平行計算。如果說我要同時對多個資料執行多條指令,那就是mimd。mimd需要處理指令的先後順序,確定可以並行處理的指令。是比simd要複雜得多的。
那麼在實際生活中,存在著很多平行計算,序列計算,並行和序列計算的例子。
序列計算:乙個學生在考試的時候依次做多道題目。
平行計算:多個學生同時在考試。
序列和並行混合計算:多個學生同時在考試,每個學生依次在做多道題目。
cuda,全稱compute unified device architecture,是英偉達公司推出的一款在gpu上進行平行計算的一組sdk。其主要的實現語言是c語言,但是在c語言的基礎上,新增了cuda特有的cuda c語法用於平行計算。根據cuda c的理論,平行計算是以simd方法進行的,其中的si(single instruction)被稱為核函式(kernel function)。而在cpu上執行的**,被稱為host code。gpu上執行的**,被稱為device code。
cuda是採用視訊記憶體的dram來進行平行計算的。視訊記憶體的dram我們稱之為全域性記憶體(global memory)。它將全域性記憶體分割成網格(grid),而網格裡面又有塊(block),塊裡面又有程序(thread),程序是處理資料的最小單元,也就是呼叫核函式的最基本的單元。
首先,cuda作為平行計算的框架,最重要的就是優化顯示卡的影象處理方面。一般來說,顯示卡處理輸出影象時(比如遊戲的實時畫面)都需要非常大的計算量。如果這些計算僅僅交給cpu和集顯來完成,運算能力是遠遠不夠的(cpu和集顯基本上都是序列,cpu的多核運算可以在一定程度上提公升效能)。gpu的多處理器的數量是cpu的處理器的數量的成千上萬倍,在大規模併發資料的計算能力也是cpu所不能比擬的。
並且cuda本身降低了程式設計人員使用平行計算的難度,特別是為追求高效能計算,並且擁有強大算力的gpu的使用者提供了可以發揮一技之長的能力。
再比如說,影象卷積。這個過程本身就可以使用gpu的對每個矩陣元素的卷積的大規模平行計算來極大地提公升速度。如果使用cpu,cpu要執行的計算量是非常大的。gpu本身的優勢不在於單個處理器的算力,事實上它的單個處理器的算力是非常弱的。但是gpu的優勢是在於它有很多這樣的小個子,湊起來就可以比cpu有著更加優越的效能。
1.時代前沿科技。
2.好玩。
3.降低了平行計算的難度,可以給我們節省寶貴的時間。
4.用平行計算寫**,可以提公升**的效率。
1.你們經常掛在嘴邊的深度學習,tensorflow已經使用cuda來使用gpu協助進行深度學習了,使用gpu的深度學習,所用的時間會比以前單純使用cpu學習短很多。目前的卷積神經網路計算量巨大,沒有一塊好的gpu,單純用cpu跑到天荒地老都跑不成。所以這也是目前深度學習火起來的原因(時間花銷比較短,商用成為可能)。
2.影象的處理,opencv已經開始使用gpu來加速各種影象處理的函式了。最有名的莫過於cufft庫,它提供了fft演算法的並行處理方法,使得對影象進行頻域上的操作更為簡單。(不會再出現一張2048*2048的lena要跑一晚上的事情發生了)
3.等待你自己去發現。
CUDA學習資源
之前沒有接觸過cuda,由於深度學習跟cuda的關係,本篇收集一些相關資料,有個認識,後面一點點學習吧 cuda,全名 compute unified device architecture,是nvidia公司基於圖形處理器gpus graphics processing units 開發的平行計算...
CUDA學習(六十)
排序和併發 裝置執行時的核心啟動順序遵循cuda stream排序語義。在乙個執行緒塊內,所有核心啟動到同乙個流中都會按順序執行。由於同一執行緒塊中的多個執行緒啟動到同乙個流中,流內的排序取決於該塊內的執行緒排程,這可以通過同步原語來控制,例如 syncthreads 請注意,因為流由執行緒塊內的所...
CUDA學習(五十)
格式說明符 至於標準printf 格式說明符的格式為 flags width precision size type 支援以下字段 有關所有行為的完整說明,請參閱廣泛可用的文件 請注意,cuda的printf 將接受標誌,寬度,精度,大小和型別的任意組合,不管它們是否總體上形成有效的格式說明符。換句...