Cuda GPU上的可用共享内存量

Cuda GPU上的可用共享内存量,cuda,shared-memory,Cuda,Shared Memory,如何知道GPU上可用的共享内存量? 我感兴趣的是我能在共享内存中存储多大的阵列。我的GPU是Nvidia GeForce 650 Ti。我正在使用VS2013和CUDA工具包进行编码 如果有人能解释一下,我如何能自己解决问题,而不仅仅是给出一个原始数字,我将不胜感激。两种方法: 阅读文档。您的GeForce 650 Ti是cc3.0 GPU。(如果您想了解如何发现,请参阅或阅读第2项) 对于cc3.0 GPU,每个线程块的最大值为48KB 以编程方式,通过运行cudaGetDeviceProp

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

如果有人能解释一下,我如何能自己解决问题,而不仅仅是给出一个原始数字,我将不胜感激。

两种方法:

  • 阅读文档。您的GeForce 650 Ti是cc3.0 GPU。(如果您想了解如何发现,请参阅或阅读第2项)

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

  • 以编程方式,通过运行
    cudaGetDeviceProperties
    ()。这个例子说明了这一点

  • 编辑:回答以下问题

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

  • 对于cc3.0 GPU,每个SM的共享内存总量(也在文档中列出(如上所示)并可通过
    cudaGetDeviceProperties
    (如上所示)获得)同样为48KB。这将是对入住率的一个限制;此特定限制是每SM的可用总量除以threadblock使用的量。如果您的threadblock使用40KB的共享内存,则在cc3.0 GPU上,每个SM一次最多可以有一个threadblock驻留。如果您的threadblock使用20KB的共享内存,则每个SM可能有2个threadblock驻留,而忽略其他占用限制

  • 每个设备/GPU的总数量。我认为这是一个不太相关的有用的数字。它等于GPU上的短信总数乘以每个短信的总数。这个数字不是特别有意义,也就是说,除了你的GPU上短信的数量之外,它不会传递新的信息。目前,我真的想不出这个数字有什么用处

  • 如上所述,SM指的是“流式多处理器”,可识别。它也被称为“多处理器”,例如在两种方式中:

  • 阅读文档。您的GeForce 650 Ti是cc3.0 GPU。(如果您想了解如何发现,请参阅或阅读第2项)

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

  • 以编程方式,通过运行
    cudaGetDeviceProperties
    ()。这个例子说明了这一点

  • 编辑:回答以下问题

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

  • 对于cc3.0 GPU,每个SM的共享内存总量(也在文档中列出(如上所示)并可通过
    cudaGetDeviceProperties
    (如上所示)获得)同样为48KB。这将是对入住率的一个限制;此特定限制是每SM的可用总量除以threadblock使用的量。如果您的threadblock使用40KB的共享内存,则在cc3.0 GPU上,每个SM一次最多可以有一个threadblock驻留。如果您的threadblock使用20KB的共享内存,则每个SM可能有2个threadblock驻留,而忽略其他占用限制

  • 每个设备/GPU的总数量。我认为这是一个不太相关的有用的数字。它等于GPU上的短信总数乘以每个短信的总数。这个数字不是特别有意义,也就是说,除了你的GPU上短信的数量之外,它不会传递新的信息。目前,我真的想不出这个数字有什么用处


  • 如上所述,SM指的是“流式多处理器”,可识别。它也被称为“多处理器”,例如。

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

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

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