在使用nvcc构建时,我仍然不确定如何正确指定代码生成的体系结构.我知道我的二进制文件中嵌入了机器代码和PTX代码,这可以通过控制器开关-code
和-arch
(或两者的结合使用-gencode
)来控制.
现在,根据本除了两种编译器标志也有指定架构方法有两种:sm_XX
和compute_XX
,其中compute_XX
指的是虚拟和sm_XX
一个真正的架构.该标志-arch
仅采用虚拟体系结构的标识符(例如compute_XX
),而-code
标志采用真实和虚拟体系结构的标识符.
该文档指出了-arch
指定为其编译输入文件的虚拟体系结构.但是,此PTX代码不会自动编译为机器代码,但这是一个"预处理步骤".
现在,-code
应该指定汇编和优化PTX代码的架构.
但是,不清楚哪个PTX或二进制代码将嵌入二进制文件中.例如-arch=compute_30 -code=sm_52
,如果我指定,这是否意味着我的代码将首先被编译为功能级别3.0 PTX,之后将创建功能级别5.2的机器代码?什么将被嵌入?
如果我只是说明-code=sm_52
会发生什么呢?只嵌入V5.2的机器代码是用V5.2 PTX代码创建的?那有什么区别-code=compute_52
?
我有一个 Dockerfile,它从源代码安装 PyTorch 库。
这是 Dockerfile 中的片段,它从 pytorch 源代码执行安装
RUN cd /tmp/ \
&& git clone https://github.com/pytorch/pytorch.git \
&& cd pytorch \
&& git submodule sync && git submodule update --init --recursive \
&& sudo TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0 7.5 8.0" python3 setup.py install
Run Code Online (Sandbox Code Playgroud)
我对这里发生的事情没有正确的理解,希望得到社区的一些意见:
TORCH_CUDA_ARCH_LIST
在这种情况下,它的作用是什么?