12

编译 CUDA 代码时,您必须选择要为哪种架构生成代码。nvcc提供了两个参数来指定这个架构,基本上:

  • arch指定虚拟架构,可以是compute_10compute_11等。
  • code指定真实的架构,可以是sm_10,sm_11等。

所以像这样的命令:

nvcc x.cu -arch=compute_13 -code=sm_13

将为具有 1.3 计算能力的设备生成“立方体”代码。如果我错了,请纠正我。我想知道这两个参数的默认值是什么?当没有为or指定值时,nvcc 使用的默认架构是什么? arch code

4

2 回答 2

10

好的,我终于设法发现了默认值。我的错是没有从头到尾阅读 NVCC 文档中关于 GPU 编译的整章。所以,

nvcc x.cu

相当于

nvcc x.cu –arch=compute_10 -code=sm_10,compute_10

这些是默认值。编译默认为虚拟架构compute_10a.out编译结果将包括sm_10真实架构的 CUBIN 代码和架构的 PTX 汇编代码,compute_10这些代码将由 CUDA 驱动程序“及时”重新编译如果您的架构大于sm_10.

于 2011-01-13T12:33:30.440 回答
2

我相信默认值为compute_10,因为除非您明确指定这是您想要的,否则您不能使用任何 compute_13 功能。(大概是CUDA工具包附带的NVCC文档指定的,但我在网上找不到链接)。

于 2011-01-13T07:48:00.560 回答