【问题标题】:Available amount of shared memory on GPUGPU 上的可用共享内存量
【发布时间】:2015-02-16 09:51:20
【问题描述】:

如何知道我的 GPU 上可用的共享内存量? 我对可以在共享内存中存储多大的数组感兴趣。我的 GPU 是 Nvidia GeForce 650 Ti。我正在使用 VS2013 和 CUDA 工具包进行编码。

如果有人能解释一下,我真的很感激,我怎么能自己弄清楚,而不仅仅是给出一个原始数字。

【问题讨论】:

    标签: cuda shared-memory


    【解决方案1】:

    两种方式:

    1. 阅读文档(programming guide)。您的 GeForce 650 Ti 是 cc3.0 GPU。 (如果你想了解如何发现,有documentation或阅读第2条)。

      对于 cc3.0 GPU,每个线程块最大为 48KB。

    2. 以编程方式,通过运行cudaGetDeviceProperties (documentation)。 cuda sample app deviceQuery 证明了这一点。

    编辑:回答以下问题。

    从内核代码的角度来看,每个线程块 48KB 的限制是一个逻辑限制。至少还有两个其他数字:

    1. 每个 SM 的共享内存总量(这也在文档中列出(与上面相同)并可通过cudaGetDeviceProperties 获得(与上面相同)。对于 cc3.0 GPU,这也是 48KB。这将是占用的一个限制;这个特定的限制是每个 SM 可用的总数除以线程块使用的数量。如果您的线程块使用 40KB 的共享内存,那么每个 SM 一次最多可以在 cc3.0 GPU 上驻留 1 个线程块。如果您的线程块使用 20KB 的共享内存,您可能会在每个 SM 中驻留 2 个线程块,而忽略其他占用限制。

    2. 每台设备/GPU 的总量。我认为这是一个不太相关/有用的数字。它等于 GPU 上的 SM 总数乘以每个 SM 的总量。这个数字并不是特别有意义,即它不会传达超出您 GPU 上 SM 数量知识的新信息。目前我真的想不出这个数字有什么用。

    上面使用的 SM 表示“流式多处理器”,标识为 here。它也被称为“多处理器”,例如在the table 12 I linked above

    各种较新的 GPU 能够超过每个线程块 48KB 的限制。例如,请参阅here

    【讨论】:

    • 每个线程块 48KB。但是可用的总内存是多少?这很重要,因为这个值决定了有多少块并行运行。如果没有足够的总共享内存,一些块的执行将不得不等到其他块完成作业并释放内存
    • 这个问题的答案包含在我已经指出的相同文档链接和相同的编程方法中。但我已经编辑了我的答案。
    • 什么是SM?请扩展此缩写
    • 流式多处理器。这个概念在 CUDA 编程指南中有解释。
    【解决方案2】:

    如果您安装了 PGI 编译器,只需执行“pgiaccelinfo”, 那么您不必阅读文档

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 2012-06-24
      • 1970-01-01
      • 2018-07-07
      • 2011-05-22
      • 2018-05-31
      • 2020-05-21
      • 2020-04-06
      相关资源
      最近更新 更多