编译时错误:函数模板“cudaOccupancyMaxPotentialBlockSize”的实例与参数列表不匹配

问题描述 投票:0回答:0

我正在尝试使用 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://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html?highlight=cudaOccupancyMaxPotentialBlockSize#occupancy-calculator

https://developer.nvidia.com/blog/cuda-pro-tip-occupancy-api-simplifies-launch-configuration/

下面的链接提出了一些稍微不同的东西:

cudaOccupancyMaxPotentialBlockSize API 模板使用

我试过这样:

    cudaOccupancyMaxPotentialBlockSize<void(*)(int*, int*)>(&gridSize, &blockSize, KernelAccumulateArray, 0, 0);

但是这个错误仍然存在。我知道我一定是犯了一些简单的错误,但我似乎无法消除这个错误。请帮忙:'(

c++ templates cuda function-pointers
© www.soinside.com 2019 - 2024. All rights reserved.