针对不同体系结构的不同内核

时间:2014-02-18 20:29:23

标签: cuda

我想知道是否有一些简单的方法可以为不同的架构提供不同版本的内核。他们是一个简单的方法吗?或唯一的可能性是在独立文件中定义独立内核并要求nvcc编译为每个文件的不同架构?

2 个答案:

答案 0 :(得分:8)

您可以通过编译器指令来实现。像

这样的东西
__global__ void kernel(...) {

# if __CUDA_ARCH__ >= 350

    do something

# else

    do something else

# endif

}    

答案 1 :(得分:0)

再多一点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设备来调用内核
cudaGetDeviceProperties(&props, devId);
unsigned int cc = props.major * 10 + props.minor;

switch(cc)
{
case 35:
    kernel<35><<<1, 1>>>(/* args */);
    break;
...
}