GPU上可用的共享内存量

时间:2014-12-17 18:40:29

标签: cuda shared-memory

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

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

2 个答案:

答案 0 :(得分:7)

两种方式:

  1. 阅读文档(programming guide)。你的GeForce 650 Ti是cc3.0 GPU。 (如果您想学习如何发现它,可以documentation或阅读第2项。)

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

  2. 以编程方式运行cudaGetDevicePropertiesdocumentation)。 cuda sample app deviceQuery证明了这一点。

  3. 编辑:回答以下问题。

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

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

    2. 每台设备/ GPU的总金额。我认为这是一个不太相关/有用的数字。它等于GPU上SM的总数乘以每个SM的总量。这个数字并不是特别有意义,即除了GPU上SM数量的知识之外,它不会传递新信息。我现在无法想到这个号码的用途。

    3. 上面使用的

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

答案 1 :(得分:0)

如果您有PGI编译器isntalled,只是做 “pgiaccelinfo” 那么您不必阅读文档