是否有可能根据例如nvcc -arch=sm_11
或nvcc -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
incuda.h
但我无法确定 nvcc 是否定义了任何等于枚举值之一的标志。
我的意图是我不知道我的设备是否支持双精度浮点数。这意味着我必须将我的数据从 转换double
为float
并因此运行不同的内核(是的,我更愿意尽可能以双精度而不是单精度运行内核)。
只要能奏效,我也会欣赏一种完全不同的方法。