我如何知道GPU上可用的共享内存量? 我对可以存储在共享内存中的大数组感兴趣。我的GPU是Nvidia GeForce 650 Ti。我正在使用带有CUDA工具包的VS2013进行编码。
如果有人解释,我真的很感激,我怎么能自己解决,不仅仅是给出一个原始数字。
答案 0 :(得分:7)
两种方式:
阅读文档(programming guide)。你的GeForce 650 Ti是cc3.0 GPU。 (如果您想学习如何发现它,可以documentation或阅读第2项。)
对于cc3.0 GPU,每个线程块最多48KB。
以编程方式运行cudaGetDeviceProperties
(documentation)。 cuda sample app deviceQuery证明了这一点。
编辑:回答以下问题。
从内核代码的角度来看,每个线程块的48KB限制是一个逻辑限制。至少有两个其他数字:
每个SM的共享内存总量(这也在文档中列出(与上面相同)并可通过cudaGetDeviceProperties
获得(与上面相同)。)对于cc3.0 GPU,这又是48KB。这将是占用的一个限制;此特定限制是每个SM的可用总数除以线程块使用的数量。如果您的threadblock使用40KB的共享内存,那么每个SM上最多只能有1个threadblock驻留在cc3.0 GPU上。如果您的threadblock使用20KB的共享内存,则每个SM可能有2个线程块,忽略其他占用限制。
每台设备/ GPU的总金额。我认为这是一个不太相关/有用的数字。它等于GPU上SM的总数乘以每个SM的总量。这个数字并不是特别有意义,即除了GPU上SM数量的知识之外,它不会传递新信息。我现在无法想到这个号码的用途。
SM表示标识为here的“流多处理器”。它也被称为“多处理器”,例如在the table 12 I linked above中。
答案 1 :(得分:0)
如果您有PGI编译器isntalled,只是做 “pgiaccelinfo” 那么您不必阅读文档