2011-01-12 238 views
10

编译CUDA代码时,必须选择代码生成的架构。 nvcc提供两个参数来指定该架构中,基本上是:使用nvcc时,arch和code选项的默认值是多少?

  • arch指定虚拟arquictecture,其可以是compute_10compute_11
  • code指定真实结构,其可以是sm_10sm_11

所以像这样的命令:

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

将为具有1.3计算能力的设备生成“cubin”代码。如果我错了,请纠正我。我想知道哪些是这两个参数的默认值? nvcc使用的默认体系结构当没有值时archcode是否被指定?

+2

如果使用verbose标志编译代码,您将看到使用的默认虚拟体系结构。 – 2015-05-07 00:34:49

回答

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体系结构的PTX汇编代码,该代码将“及时”重新编译,如果您的架构大于sm_10,则由CUDA驱动程序提供。

2

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

+0

我想你是对的。当我查看NVCC文档时,我无法找到这些信息。无论如何,我会再看看。 – Auron 2011-01-13 09:16:23

+0

嗯,`-code`的默认值似乎是`-arch`中的指定值,但我找不到'-arch`的默认值。 – Auron 2011-01-13 10:07:06