Mik*_*kin 1 cuda shared-memory
我如何知道GPU上可用的共享内存量?我对我可以在共享内存中存储的大数组感兴趣.我的GPU是Nvidia GeForce 650 Ti.我使用VS2013和CUDA工具包进行编码.
我真的很感激,如果有人会解释,我怎么能自己解决,不仅仅给出一个原始数字.
两种方式:
阅读文档(编程指南).你的GeForce 650 Ti是cc3.0 GPU.(如果你想学习如何发现它,有文档或阅读项目2).
对于cc3.0 GPU,每个线程块最多48KB.
以编程方式,通过运行cudaGetDeviceProperties(文档).在CUDA示例应用程序DEVICEQUERY说明了这一点.
编辑:回答以下问题.
从内核代码的角度来看,每个线程块的48KB限制是一个逻辑限制.至少有两个其他数字:
每个SM的共享内存总量(这也在文档中列出(与上面相同)并可通过cudaGetDeviceProperties(与上面相同)获得.)对于cc3.0 GPU,这又是48KB.这将是入住率的一个限制; 此特定限制是每个SM的可用总数除以线程块使用的数量.如果您的threadblock使用40KB的共享内存,则每个SM最多可以在cc3.0 GPU上驻留1个threadblock.如果您的threadblock使用20KB的共享内存,则每个SM可能有2个线程块,忽略其他占用限制.
每台设备/ GPU的总金额.我认为这是一个不太相关/有用的数字.它等于GPU上SM的总数乘以每个SM的总量.这个数字并不是特别有意义,也就是说,除了GPU上SM数量的知识之外,它不会传递新信息.我现在无法想到这个号码的用途.
上面使用的SM表示这里标识的"流多处理器" .它也被称为"多处理器",例如在上面链接的表12中.