作者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