我想知道是否有一些简单的方法可以为不同的架构提供不同版本的内核。他们是一条简单的路吗?或者唯一的可能是在独立文件中定义独立的内核,并要求nvcc在每个文件中编译不同的体系结构?
发布于 2014-02-18 20:55:41
您可以通过编译器指令来实现这一点。有点像
__global__ void kernel(...) {
# if __CUDA_ARCH__ >= 350
do something
# else
do something else
# endif
} 发布于 2014-02-19 06:29:22
稍微修改一下C++ JackOLanterns的答案:
template <unsigned int ARCH>
__global__ void kernel(...)
{
switch(ARCH)
{
case 35:
do something
break;
case 30:
do something else
break;
case 20:
so something else
break;
default:
do something for all other ARCH
break;
}
}编辑:删除错误@sgar91指出:
您可以通过查询CUDA设备调用带有porperties的内核
cudaGetDeviceProperties(&props, devId);
unsigned int cc = props.major * 10 + props.minor;
switch(cc)
{
case 35:
kernel<35><<<1, 1>>>(/* args */);
break;
...
}https://stackoverflow.com/questions/21864602
复制相似问题