CUDA系列学习(三)GPU设计与结构QA coding练习
啥?你把CUDA系列學(xué)習(xí)(一),(二)都看完了還不知道為什麼要用GPU提速? 是啊。。經(jīng)微博上的反饋我默默感覺到提出這樣問題的小伙伴不在少數(shù),但是更多小伙伴應(yīng)該是看了(一)就感覺離自己太遠(yuǎn)所以趕緊撤粉跑掉了。。。都怪我沒有寫CUDA系列學(xué)習(xí)(零)。。。那么,這一章就補(bǔ)上這一塊,通過一堆Q&A進(jìn)行講解,并輔助coding練習(xí),希望大家感覺貼近CUDA是這么容易~~
請注意各個Q&A之間有順序關(guān)系,輕依次閱讀~ 否則不容易懂喔~
Q:現(xiàn)在硬件層面通常通過什么樣的方法加速?
A:
?- More processors
?- Speed up clock frequency
?- More memory
途徑:將晶體管做得更快更小,功耗更少,那么每塊芯片上就可以放更多transistor
宏觀上看,一個處理器上能同時處理的數(shù)據(jù)就越多。
圖2. Period - Clock frequency
A:是晶體管不能做得更快更小了么?錯!
?- 關(guān)鍵問題在散熱!即便晶體管越做越小也難以散熱。所以,現(xiàn)在我們應(yīng)該著眼于build更多小而低功耗(power-efficient)的processor來提速。
Q:CPU和GPU在設(shè)計上的區(qū)別?
A:
CPU: COMPLEX CONTROL HARDWARE
?- flexible in performance :)
?- expensive in terms of power :(
GPU: SIMPLE CONTROL HARDWARE
?- more hardware for computation :)
?- more power efficient :)
?- more restrictive programming model :(
所以剛才說到的,目前想要設(shè)計更多power-efficient的處理器就是GPU的中心思想;CPU更重視優(yōu)化 (minimize) latency而GPU更重視優(yōu)化 (maximize) throughput。
A:
比如,要駕車行駛5000km從A到B。
方法1:
? by taxi,200km/h,可承載2人:latency = 25h,throughput = 2/25 person/h
方法2:
? by bus, 50km/h, 可以承載10人:latency=100h,throughput = 10/100 person/h
所以CPU更喜歡taxi,因?yàn)橐淮芜^來速度快,GPU更喜歡bus,因?yàn)橥掏铝看蟆?br />
Q:CUDA是啥?CUDA programming軟件層面的結(jié)構(gòu)?
A:
Q:CUDA編程注意什么?
A: 注意GPU擅長什么!
?- efficiency launching lots of threads
?- running lots of threads in parallel
Q: kernel聲明時對參數(shù)有沒有限制?
A:?
我們在CUDA系列學(xué)習(xí)(一)An Introduction to GPU and CUDA?中講過kernel的聲明:kernel<<<grid of blocks, block of threads>>> ,其限制是:maximum number of threads per block: 1024 for new, 512 for old。比如說,我希望2048個線程并行,不能直接申請kernel<<<1,2048>>>,而應(yīng)該分開<<<a,b>>>,使a*b=2048 且a<=1024 && b<=1024.
Q: 具體講一下kernel的general聲明,參數(shù)意義與格式?
A: general表示:kernel<<<grid of blocks, block of threads, shmem>>>
shmem:shared memory per block in bytes
? ? ?用G表示grid of blocks
? ? ?用B表示block of threads
? ? ?事實(shí)上,dim(x,y,z)中每一維默認(rèn)都為1,所以:dim3(w,1,1)==dim3(w)==int w,即這三種表示是等效的
Q:CUDA程序中能夠調(diào)用的常用 built-in variables都有哪些?
A:threadIdx, blockDim, blockIdx, gridDim
Q: CUDA程序模板來一個?
A: 說是模板,只是一個簡單例子的大概套路,大家也可以參考CUDA系列學(xué)習(xí)(二)CUDA memory & variablesdifferent memory and variable types,如下:
1. 聲明host變量,申請分配空間,并初始化
2. 聲明device變量,申請分配空間
3. cudamemcpy將賦值了的host變量賦給device變量
4. 調(diào)用cuda kernel,并行跑線程
5. device返回結(jié)果傳給host
6. 釋放device變量memory
========================================
Exercise1:?
input: float array [0, 1, 2, ... 63]
output: float array [0^2, 1^2, 2^2, ... 63^2]
Exercise2:
輸入一張彩色圖,轉(zhuǎn)灰度圖。
提示:
in CUDA, each pixel is represented in struct uchar4:
unsigned char r,b,g,w;//w: alpha channel, represent the transparent information
灰度轉(zhuǎn)換公式:I = .299*r+.587*g+.114b(給rbg設(shè)置不同weight是人眼對不同通道的敏感度不同所致)
具體實(shí)現(xiàn)請參考?CUDA系列學(xué)習(xí)(二)CUDA memory & variablesdifferent memory and variable types,歡迎小伙伴們把exercise code和運(yùn)行時間貼上來回復(fù),最好和cpu版本有所比較~
參考資料:
udacity -?cs344
from:?http://blog.csdn.net/abcjennifer/article/details/42778711
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的CUDA系列学习(三)GPU设计与结构QA coding练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 循环神经网络教程3-BP算法和梯度消失问
- 下一篇: CUDA系列学习(四)Parallel