gpt4 book ai didi

cuda - 在同一 . .cu 文件

转载 作者:行者123 更新时间:2023-12-02 20:22:10 25 4
gpt4 key购买 nike

我希望编译后的 CUDA 代码能够在任何 Nvidia GPU 上运行,因此我使用以下选项编译每个 .cu 文件:

-gencode arch=compute_20,code=sm_20
-gencode arch=compute_30,code=sm_30
-gencode arch=compute_32,code=sm_32
-gencode arch=compute_35,code=sm_35
-gencode arch=compute_50,code=sm_50
-gencode arch=compute_52,code=sm_52
-gencode arch=compute_53,code=sm_53
-gencode arch=compute_60,code=sm_60
-gencode arch=compute_61,code=sm_61
-gencode arch=compute_61,code=compute_61

(这是使用 CUDA 8.0,所以我还没有列出较新的架构。)

问题是 nvcc 同步编译每个目标,这可能需要相当长的时间。有没有办法将其拆分到多个 CPU 核心上?我正在使用 Make 构建系统。

我可以使用每个架构的不同 Make 目标轻松地在不同的异步 nvcc 调用中手动为每个架构创建 .ptx 或 .cubin 文件。但是,如何将它们组合成最终的 .o 文件以与我的主机代码链接在一起?

这个: https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#cuda-compilation-trajectory似乎暗示我应该采用多个 .cubin 文件并将它们组合成一个 .fatbin 文件。但是,当我尝试这样做时,出现错误:

nvcc fatal   : A single input file is required for a non-link phase when an outputfile is specified

这可能吗?我缺少什么?谢谢!

编辑1:以下是塔隆米斯的回复。我尝试过这样做:

F:/SDKs/CUDASDK/9.2/bin/WIN64/bin/nvcc  -ccbin=C:/MVS14/VC/bin --machine=64 --ptxas-options=-v -D_DEBUG -D_CONSOLE -Xcompiler /EHsc,/MDd,-Od,-Z7,/W2,/RTCs,/RTCu,/we4390,/wd4251,/we4150,/we4715,/we4047,/we4028,/we4311,/we4552,/we4553,/we4804,/we4806,/we4172,/we4553,/we4700,/we4805,/we4743,/we4717,/we4551,/we4533,/we6281,/we4129,/we4309,/we4146,/we4133,/we4083,/we4477,/we4473,/FS,/J,/EHsc -I"F:/SDKs/CUDASDK/9.2/include"  -DWIN32 --device-c -cubin -gencode arch=compute_30,code=sm_30 -o ms_30.cubin ms.cu
F:/SDKs/CUDASDK/9.2/bin/WIN64/bin/nvcc -ccbin=C:/MVS14/VC/bin --machine=64 --ptxas-options=-v -D_DEBUG -D_CONSOLE -Xcompiler /EHsc,/MDd,-Od,-Z7,/W2,/RTCs,/RTCu,/we4390,/wd4251,/we4150,/we4715,/we4047,/we4028,/we4311,/we4552,/we4553,/we4804,/we4806,/we4172,/we4553,/we4700,/we4805,/we4743,/we4717,/we4551,/we4533,/we6281,/we4129,/we4309,/we4146,/we4133,/we4083,/we4477,/we4473,/FS,/J,/EHsc -I"F:/SDKs/CUDASDK/9.2/include" -DWIN32 --device-c -cubin -gencode arch=compute_35,code=sm_35 -o ms_35.cubin ms.cu

然后链接:

F:/SDKs/CUDASDK/9.2/bin/WIN64/bin/nvcc -o out.o -dlink ms_35.cubin ms_30.cubin -I"F:/SDKs/CUDASDK/9.2/include"

但是我收到错误:

fatbinary fatal   : fatbinary elf mismatch: elf arch '35' does not match '30'

所有使用设备链接的示例始终只使用一个拱门。是否可以通过这种方式组合架构?

最佳答案

nvcc 只是一个向许多其他工具发出命令的前端。如果您将 --dryrun 标志添加到 nvcc 调用中,它将打印您需要运行的确切命令,以替换您对 nvcc 的使用.

从那里应该很容易将此命令列表转换为脚本或 makefile。

更新:CUDA 11.3 中的 nvcc 最终通过 -t flag 支持开箱即用。 .

关于cuda - 在同一 . .cu 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com