【问题标题】:How can I launch a kernel with "as much dynamic shared mem as is possible"?如何启动具有“尽可能多的动态共享内存”的内核?
【发布时间】:2016-05-05 03:03:26
【问题描述】:

我们知道 CUDA 设备的共享内存容量非常有限,只有几十千字节。而且我们也知道如果您要求太多共享内存,内核将不会启动(通常?曾经?)。而且我们知道,可用的共享内存既用于您使用的代码中的静态分配,也用于动态分配的共享内存。

现在,cudaGetDeviceProperties() 为我们提供了我们拥有的整体空间。但是,给定一个函数符号,是否可以确定它将使用多少静态分配的共享内存,以便我可以在启动时将共享内存“填满”到最大容量?如果没有,是否有可能让 CUDA 以某种方式为我处理这个问题?

【问题讨论】:

  • 我之前已经说过了,我会再说一遍,通过从头到尾阅读 API 文档至少一次,你真的会帮自己一个大忙……

标签: cuda gpu-shared-memory


【解决方案1】:

运行时 API 有一个函数 cudaFuncGetAttributes ,它允许您检索当前上下文中任何内核的 attributes,包括内核将消耗的每个块的静态共享内存量。您可以根据这些信息自行计算。

【讨论】:

  • 哦,太有用了!
【解决方案2】:

您也可以使用 nvcc 编译信息来获取共享内存的静态分配

【讨论】:

  • ... 在运行时? :-(
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2013-01-11
  • 2014-09-16
  • 2021-08-04
  • 2021-11-29
  • 2017-02-22
相关资源
最近更新 更多