我正在尝试使用 API
cudaOccupancyMaxPotentialBlockSize
,它在 cuda_runtime.h
中实例化如下:
template<class T>
static __inline__ __host__ CUDART_DEVICE cudaError_t cudaOccupancyMaxPotentialBlockSize(
int *minGridSize,
int *blockSize,
T func,
size_t dynamicSMemSize = 0,
int blockSizeLimit = 0)
{
return cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(minGridSize, blockSize, func, __cudaOccupancyB2DHelper(dynamicSMemSize), blockSizeLimit, cudaOccupancyDefault);
}
我有一个简单的内核定义如下:
__global__ void KernelAccumulateArray(int *b, int *a)
{
...
}
我调用上述函数如下:
uint32_t gridSize, blockSize;
cudaOccupancyMaxPotentialBlockSize(&gridSize, &blockSize, KernelAccumulateArray, 0, 0);
这就是我遇到的大多数参考资料和示例中的调用方式。
https://developer.nvidia.com/blog/cuda-pro-tip-occupancy-api-simplifies-launch-configuration/
下面的链接提出了一些稍微不同的东西:
cudaOccupancyMaxPotentialBlockSize API 模板使用
我试过这样:
cudaOccupancyMaxPotentialBlockSize<void(*)(int*, int*)>(&gridSize, &blockSize, KernelAccumulateArray, 0, 0);
但是这个错误仍然存在。我知道我一定是犯了一些简单的错误,但我似乎无法消除这个错误。请帮忙:'(