Cuda编程学习(一)
生活随笔
收集整理的這篇文章主要介紹了
Cuda编程学习(一)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用Cuda進(jìn)行GPU編程 ——GPU高性能編程Cuda實(shí)戰(zhàn)? ? 第四章C并行編程總結(jié) 開(kāi)始學(xué)習(xí)Cuda和GPU編程的相關(guān)知識(shí)啦。 感覺(jué)GPU編程會(huì)越來(lái)越重視,尤其是在移動(dòng)端的計(jì)算復(fù)雜度優(yōu)化方面。掌握GPU編程,以后實(shí)習(xí)找工作也會(huì)方便很多。 最近一有時(shí)間就會(huì)學(xué)習(xí)GPU高性能編程Cuda實(shí)戰(zhàn)這本書(shū),也會(huì)寫(xiě)一些總結(jié)發(fā)表到博客里。 期望是:摸熟GPU這一領(lǐng)域,這是以前從來(lái)沒(méi)接觸過(guò)得地方;通過(guò)使用Cuda進(jìn)行優(yōu)化三維重建的項(xiàng)目,為簡(jiǎn)歷填上一筆硬通貨。 Cuda的思想是: 按照類似于CPU的方法,對(duì)GPU提供通用計(jì)算的編程界面。 CPU的計(jì)算體系是: 在程序中運(yùn)行的指令和臨時(shí)變量,一般是保存在內(nèi)存中的。CPU把數(shù)據(jù)從內(nèi)存中取出來(lái)計(jì)算,再存入到內(nèi)存中。 簡(jiǎn)要來(lái)說(shuō)兩個(gè)部分:數(shù)據(jù)的存儲(chǔ)和計(jì)算。 GPU類似于CPU,只不過(guò)有更多的算術(shù)邏輯處理單元,更適合采用并行處理的算法來(lái)解決問(wèn)題。 在考慮時(shí),把GPU與CPU類似考慮,區(qū)別在于: 1.? ? 內(nèi)存位置的不同。 2.? ? 計(jì)算方式的不同。 ?
1.? ? 內(nèi)存位置的不同:
變量存儲(chǔ)在內(nèi)存中,其物理地址,有的對(duì)應(yīng)的是CPU的內(nèi)存,有的是對(duì)應(yīng)GPU的內(nèi)存。(方便起見(jiàn),暫時(shí)不考慮CPU的高速緩存機(jī)制) 放在CPU內(nèi)存中的數(shù)據(jù),只能被CPU讀寫(xiě);放在GPU內(nèi)存中的數(shù)據(jù),只能被GPU讀寫(xiě)。 當(dāng)然可以通過(guò)CudaMemcpy的方式,把CPU內(nèi)存中的數(shù)據(jù)與GPU內(nèi)存總的數(shù)據(jù)做交換。 考慮CPU和GPU的區(qū)別時(shí),把CPU和CPU對(duì)應(yīng)的內(nèi)存當(dāng)做主機(jī),而GPU和GPU對(duì)應(yīng)的內(nèi)存當(dāng)做設(shè)備device 在CPU中聲明一個(gè)指針的方法是: int *a = new int[10]; 這樣a就對(duì)應(yīng)著CPU內(nèi)存中一個(gè)長(zhǎng)度為10的int數(shù)組的首地址 在GPU中分配內(nèi)存則是: int *dev_a; cudaMalloc( (void **) &dev_a, 10 * sizeof(int) ); dev_a是一個(gè)指針,指向一段int型數(shù)組的首地址; &dev_a 是 指向dev_a的指針,通過(guò)cudaMalloc的函數(shù),可以改變dev_a指向的位置。 分配完空間之后,dev_a指向的也就是GPU內(nèi)存中一段int型數(shù)組的首地址。2.? ? 計(jì)算方式的不同
在GPU中執(zhí)行的函數(shù)被稱為核函數(shù), 使用如下:kernel<<<1,1>>>>(params); 舉例來(lái)說(shuō): 聲明GPU的函數(shù),需要用如下的方式: __global __ void add(int *a, int *b){???? } 使用時(shí),add<<<N,1>>>(dev_a, dev_b); 聲明為global函數(shù)之后,才可以在主機(jī)上調(diào)用。 第一個(gè)參數(shù)表示,設(shè)備在執(zhí)行核函數(shù)時(shí)使用的并行線程塊的數(shù)量。在函數(shù)中,可以通過(guò)blockIdx.x獲得當(dāng)前線程塊的id (備注:cuda可以支持二維索引,通過(guò)grid實(shí)現(xiàn)) 簡(jiǎn)單的并行處理就可以通過(guò)調(diào)用add函數(shù)來(lái)完成了。 不過(guò)真正的并行處理,還需要考慮到不同線程之間的通信、同步情況,這些內(nèi)容留著學(xué)習(xí)下一章的時(shí)候再做介紹吧。轉(zhuǎn)載于:https://www.cnblogs.com/leohan2013/p/3285143.html
總結(jié)
以上是生活随笔為你收集整理的Cuda编程学习(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 统计_statistics_不同的人_大
- 下一篇: Ts 的类