CUDA在运行时检查nvcc“-arch”-flag

时间:2012-08-02 14:49:41

标签: c++ cuda nvcc

是否有可能调用不同的内核,具体取决于是否已使用nvcc -arch=sm_11nvcc -arch=sm_20来编译代码?更明确一点:

if (FANCY_FLAG == CU_TARGET_COMPUTE_11)
    // Do some conversions here..
    krnl1<<<GRID_DIM1, BLOCK_DIM1>>>(converted_value1);
else if (FANCY_FLAG == CU_TARGET_COMPUTE_20)
    krnl2<<<GRID_DIM2, BLOCK_DIM2>>>(value1);

正如您所见,我在CUjit_target_enum中找到了cuda.h,但我无法确定nvcc是否定义了任何与其中一个枚举值相等的标志。< / p>

我的意图是我不知道我的设备是否支持双精度浮动。这意味着我必须将我的数据从double转换为float,因此,运行一个不同的内核(是的,我希望尽可能以单精度运行双精度内核) 。

我也很欣赏一种完全不同的方法,只要它有效。

1 个答案:

答案 0 :(得分:1)

  1. 在设备代码中检查 CUDA_ARCH 宏值
  2. 在主机代码中 - 检查设备属性的majorminor字段。