Re: [請益] 請問 CUDA 每個 block 可使用多少 shar …

看板VideoCard (顯卡板)作者 (mself)時間15年前 (2010/06/03 08:47), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串4/4 (看更多)
※ 引述《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

06/03 10:11, , 1F
google了一下每個block的上限就是總共16K,超過應該不能跑
06/03 10:11, 1F

06/03 10:13, , 2F
我沒寫過CUDA,但OpenCL的情況是會直接return error
06/03 10:13, 2F

06/03 10:15, , 3F
若你指的是所有threads總共用16K,那情況會跟你寫的一樣~
06/03 10:15, 3F

06/03 10:17, , 4F
眼殘,應該是若每個block裡的threads共用了16K~~~
06/03 10:17, 4F

06/05 12:42, , 5F
share mem是給每個block用的, 你假如的那句就有問題
06/05 12:42, 5F
文章代碼(AID): #1C1lk9rv (VideoCard)
文章代碼(AID): #1C1lk9rv (VideoCard)