我们知道CUDA设备的共享内存容量非常有限,仅为几十千字节。而且我们也知道内核不会启动(通常是?)?如果你要求太多的共享内存。我们还知道您使用的代码中的静态分配和动态分配的共享内存都使用了可用的共享内存。
现在,cudaGetDeviceProperties()
为我们提供了整体空间。但是,给定一个函数符号,是否可以确定它将使用多少静态分配的共享内存,以便我可以在启动时“填充”共享内存到满容量?如果没有,是否有可能让CUDA以某种方式为我照顾这个?
答案 0 :(得分:2)
运行时API有一个函数cudaFuncGetAttributes ,它允许您检索当前上下文中任何内核的attributes,包括内核将使用的每个块的静态共享内存量。你可以用这些信息自己做数学。
答案 1 :(得分:-1)
您还可以使用nvcc编译信息来获取共享内存的静态分配