0

是否有可能根据例如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_enumincuda.h但我无法确定 nvcc 是否定义了任何等于枚举值之一的标志。

我的意图是我不知道我的设备是否支持双精度浮点数。这意味着我必须将我的数据从 转换doublefloat并因此运行不同的内核(是的,我更愿意尽可能以双精度而不是单精度运行内核)。

只要能奏效,我也会欣赏一种完全不同的方法。

4

1 回答 1

1
  1. 在设备代码中检查CUDA_ARCH宏值
  2. 在主机代码中 - 检查设备属性majorminor字段。
于 2012-08-02T15:44:44.943 回答