【发布时间】:2021-04-25 02:05:03
【问题描述】:
在 CUDA 中使用重载的内核函数时遇到问题。
我可以理解 CUDA 可以通过参数启动重载函数。
但是,如果我想使用cudaOccupancyMaxPotentialBlockSize() 来计算最大占用率的块大小,请参阅doc。
__global__ void foo_cuda_kernel(int a)
{
/*implementation 1*/
}
//overloaded kernel function
__global__ void foo_cuda_kernel(int a, int b)
{
/*implementation 2*/
}
void foo_cuda()
{
int min_grid_size, grid_size, block_size;
cudaOccupancyMaxPotentialBlockSize
(
&min_grid_size, &block_size,
foo_cuda_kernel, //how does it distinguish overloaded functions?
0, thread_num
);
grid_size = (thread_num + block_size - 1) / block_size;
//I can understand compiler can distinguish the launched function by its arguments
foo_cuda_kernel<<<grid_size, block_size>>>((int)1);
cudaDeviceSynchronize();
}
如何让它发挥作用? cudaOccupancyMaxPotentialBlockSize() 如何区分重载函数?
【问题讨论】:
-
不确定它是否适用于 cuda。
标签: c++ memory cuda overloading