【发布时间】:2021-06-16 06:00:54
【问题描述】:
我无法使用超过 48K 的共享内存(在 V100、Cuda 10.2 上)
我打电话
cudaFuncSetAttribute(my_kernel,
cudaFuncAttributePreferredSharedMemoryCarveout,
cudaSharedmemCarveoutMaxShared);
在第一次启动my_kernel 之前。
我使用启动边界
和my_kernel内部的动态共享内存:
__global__
void __launch_bounds__(768, 1)
my_kernel(...)
{
extern __shared__ float2 sh[];
...
}
内核是这样调用的:
dim3 blk(32, 24); // 768 threads as in launch_bounds.
my_kernel<<<grd, blk, 64 * 1024, my_stream>>>( ... );
cudaGetLastError() 内核调用后返回cudaErrorInvalidValue。
如果我使用 my_kernel<<<grd, blk, 48 * 1024, my_stream>>>),它可以工作。
编译标志是:
nvcc -std=c++14 -gencode arch=compute_70,code=sm_70 -Xptxas -v,-dlcm=cg
我错过了什么?
【问题讨论】:
标签: cuda