作者mself (mself)
看板VideoCard
標題Re: [請益] 請問 CUDA 每個 block 可使用多少 shar …
時間Thu Jun 3 08:47:02 2010
※ 引述《HsiaoCC (Learning To Live)》之銘言:
: ※ 引述《jk21234 ( 1569 11 /47)》之銘言:
: : 所以,SM和Block在"某個時段內,獨佔的1:1執行"
: : 如果你覺得不容易理解,它還蠻接近一顆cpu執行多工的方式.
: : 切換也應該是context switch.有同樣的缺點就是切換再怎麼頻繁,
: : 對幾百MHZ的晶片來說,都是巨大的效能損失.....
: : (如果我沒記錯,cuda文件有描述context switch部分...)
: : 所以也不用擔心你在程式中使用不到16KB的shared memory.
: 來閒扯一下他背後的運作,就 GT200 系列來說
: 每個 SM 在 resource 允許的情況下,最多能同時保持 1,024 個 computing threads
: 且每次 SM 最多只允許抓取 8 個 blocks,且不能超過 resource limitation
恕刪~
: 回到正題,shared memory 如果需求的量超過,是沒辦法被執行的,只能等到在 SM 中
: 的工作都做完,resource release 了才行~~~
我把我瞭解到的說一下,請各位看看對不對
GT200系列 每個 SM 有 16K 個 register 與 16KB shared memory
SM 能同時能保持 8 個 block,總計 1024 個 computing threads
這四者都是 resource limitation
假如今天我寫一個 kernel 用了 16KB shared memory
總共產生有 1024 block,每個 block 128 thread
那麼 SM 就只能抓取 1 個 block 來執行 (因為 shared memory 到達上限)
(雖然 thread 總數...等還沒有到達上限)
而這個 CUDA 程式很可能使 SM 有很多 stall
因為 128 thread 可能不足以 hide latency
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.54.16
1F:推 HsiaoCC:google了一下每個block的上限就是總共16K,超過應該不能跑 06/03 10:11
2F:→ HsiaoCC:我沒寫過CUDA,但OpenCL的情況是會直接return error 06/03 10:13
3F:→ HsiaoCC:若你指的是所有threads總共用16K,那情況會跟你寫的一樣~ 06/03 10:15
4F:→ HsiaoCC:眼殘,應該是若每個block裡的threads共用了16K~~~ 06/03 10:17
5F:推 Qddd:share mem是給每個block用的, 你假如的那句就有問題 06/05 12:42