cudaOccupancyMaxPotentialBlockSizeVariableSMem一元函数

时间:2017-12-04 19:13:33

标签: c++ cuda

我正在尝试在我的Cuda代码中自动选择网格和块大小。在我的例子中,所需的共享内存量取决于线程数。该函数具有以下语法。

__host__ ​cudaError_t cudaOccupancyMaxPotentialBlockSizeVariableSMem ( int* minGridSize, int* blockSize, T func, UnaryFunction blockSizeToDynamicSMemSize, int  blockSizeLimit = 0 ) 

我尝试将一元函数定义如下。

struct unaryfn: std::unary_function<int, int> {
    int operator()(int i) const { return 12* i; }

};

然后,我将CUDA API函数调用如下。

  int blockSize;   // The launch configurator returned block size
    int minGridSize; // The minimum grid size needed to achieve the
    // maximum occupancy for a full device launch
    int gridSize;    // The actual grid size needed, based on input size
    unaryfn::argument_type blk;
    unaryfn::result_type result;
    unaryfn ufn;
    cudaOccupancyMaxPotentialBlockSizeVariableSMem(&minGridSize, &blockSize,
                                                   CUDAExclVolRepulsionenergy, ufn(), 0);
    std::cout<<(nint +blockSize -1) / blockSize<<" "<<blockSize<<endl;

编译时,我收到错误

  

错误:无法使用给定的参数列表调用函数“unaryfn :: operator()”               对象类型是:unaryfn   我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

解决!删除函数调用中的一元函数的括号有帮助。 cudaOccupancyMaxPotentialBlockSizeVariableSMem(&amp; minGridSize,&amp; blockSize,CUDAExclVolRepulsionenergy,ufn(),0);