编译CUDA代码时,必须选择生成代码的架构。 nvcc
提供了两个参数来指定这种架构,基本上是:
arch
指定虚拟arquictecture,可以是compute_10
,compute_11
等。code
指定真实的架构,可以是sm_10
,sm_11
等。这样的命令:
nvcc x.cu -arch=compute_13 -code=sm_13
将为具有1.3计算能力的设备生成“cubin”代码。如果我错了,请纠正我。我想知道这两个参数的默认值是什么? 当没有指定 arch
或 code
的值时,nvcc使用的默认架构是什么?
答案 0 :(得分:8)
好的,我终于设法发现了默认值。我没有从NVCC文档开始到非常结束地阅读关于GPU编译的整章。所以,
nvcc x.cu
等同于
nvcc x.cu –arch=compute_10 -code=sm_10,compute_10
这些是默认值。编译默认执行到虚拟体系结构compute_10
,编译产生的a.out
将包含sm_10
实际体系结构的CUBIN代码,以及用于compute_10
架构,如果您的架构大于sm_10
,将由CUDA驱动程序“及时”重新编译。
答案 1 :(得分:2)
我认为默认值为compute_10
,因为您不能使用任何compute_13功能,除非您明确指定这是您想要的。 (可能是CUDA工具包附带的NVCC文档指定,但我无法在线找到链接。)