【发布时间】:2015-02-16 09:51:20
【问题描述】:
如何知道我的 GPU 上可用的共享内存量? 我对可以在共享内存中存储多大的数组感兴趣。我的 GPU 是 Nvidia GeForce 650 Ti。我正在使用 VS2013 和 CUDA 工具包进行编码。
如果有人能解释一下,我真的很感激,我怎么能自己弄清楚,而不仅仅是给出一个原始数字。
【问题讨论】:
标签: cuda shared-memory
如何知道我的 GPU 上可用的共享内存量? 我对可以在共享内存中存储多大的数组感兴趣。我的 GPU 是 Nvidia GeForce 650 Ti。我正在使用 VS2013 和 CUDA 工具包进行编码。
如果有人能解释一下,我真的很感激,我怎么能自己弄清楚,而不仅仅是给出一个原始数字。
【问题讨论】:
标签: cuda shared-memory
两种方式:
阅读文档(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 可用的总数除以线程块使用的数量。如果您的线程块使用 40KB 的共享内存,那么每个 SM 一次最多可以在 cc3.0 GPU 上驻留 1 个线程块。如果您的线程块使用 20KB 的共享内存,您可能会在每个 SM 中驻留 2 个线程块,而忽略其他占用限制。
每台设备/GPU 的总量。我认为这是一个不太相关/有用的数字。它等于 GPU 上的 SM 总数乘以每个 SM 的总量。这个数字并不是特别有意义,即它不会传达超出您 GPU 上 SM 数量知识的新信息。目前我真的想不出这个数字有什么用。
上面使用的 SM 表示“流式多处理器”,标识为 here。它也被称为“多处理器”,例如在the table 12 I linked above。
各种较新的 GPU 能够超过每个线程块 48KB 的限制。例如,请参阅here。
【讨论】:
如果您安装了 PGI 编译器,只需执行“pgiaccelinfo”, 那么您不必阅读文档
【讨论】: