日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CUDA系列学习(三)GPU设计与结构QA coding练习

發(fā)布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA系列学习(三)GPU设计与结构QA coding练习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

啥?你把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

圖1. Period - transistors(晶體管) size
途徑:將晶體管做得更快更小,功耗更少,那么每塊芯片上就可以放更多transistor
宏觀上看,一個處理器上能同時處理的數(shù)據(jù)就越多。






Q:參考圖2,為加速3大常見方法之一,提高clock frequency,?可見到后面clock speed就做不上去了。這是為什么呢?

圖2. Period - Clock frequency

A:是晶體管不能做得更快更小了么?錯!

?- 關(guān)鍵問題在散熱!即便晶體管越做越小也難以散熱。所以,現(xiàn)在我們應(yīng)該著眼于build更多小而低功耗(power-efficient)的processor來提速。





Q:CPU和GPU在設(shè)計(jì)上的區(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è)計(jì)更多power-efficient的處理器就是GPU的中心思想CPU更重視優(yōu)化 (minimize) latency而GPU更重視優(yōu)化 (maximize) throughput



Q:什么是latency,什么是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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。