cudaoccupancymaxyblocksizeVariablesMem一级函数

cudaOccupancyMaxPotentialBlockSizeVariableSMem Unary Function

本文关键字:一级 函数 cudaoccupancymaxyblocksizeVariablesMem      更新时间:2023-10-16

我正在尝试在我的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 我该如何解决此问题?

解决!在功能呼叫中删除括号内的括号有助于。cudaoccupancymaxpotential blocksizevariablesMem(&amp; mingridsize,''blocksize,cudaexclvolrepulsionEnergy,ufn(),0),0);