gpt4 book ai didi

cuda - 用于生成最佳代码的 NVCC 编译选项(使用 JIT)

转载 作者:行者123 更新时间:2023-12-03 23:49:07 25 4
gpt4 key购买 nike

我想了解 nvcc 编译阶段,但我有点困惑。因为我不知道运行我的软件的机器的确切硬件配置,所以我想使用 JIT 编译功能来为它生成尽可能好的代码。在 NVCC 文档中我发现了这个:

“例如,当应用程序在 sm_10、sm_13 甚至更高版本的架构上启动时,下面的命令允许生成完全匹配的 GPU 二进制代码:”

nvcc x.cu -arch=compute_10 -code=compute_10

所以我的理解是,上述选项将为当前 GPU 生成最佳/最快/最佳代码。那是对的吗?我还读到默认的 nvcc 选项是:

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

如果上述确实正确,为什么我不能在我的应用程序中使用任何 compute_20 功能?

最佳答案

当您指定目标架构时,您将自己限制在该架构中可用的功能。那是因为 PTX 代码是虚拟汇编代码,所以你需要知道 PTX 生成过程中可用的功能。 PTX 将被 JIT 编译为 GPU 二进制代码 (SASS),适用于您运行的任何 GPU,但它无法针对较新的架构功能。

我建议您选择一个最小架构(例如,如果您想要 double ,则为 1.3;如果您想要 Fermi 或更高版本的功能,则为 2.0),然后为该架构和更新的基础架构创建 PTX。您可以在一个命令中执行此操作(尽管它需要更长的时间,因为它需要多次通过代码)并将所有内容捆绑到一个单一的胖二进制文件中。

一个示例命令行可能是:

nvcc <general options> <filename.cu> \
-gencode arch=compute_13,code=compute_13 \
-gencode arch=compute_20,code=compute_20 \
-gencode arch=compute_30,code=compute_30 \
-gencode arch=compute_35,code=compute_35

这将在二进制文件中创建四个 PTX 版本。您还可以同时编译到选定的 GPU,这具有为您的用户避免 JIT 编译时间的优势,但也会增加二进制文件的大小。

查看 NVCC manual有关这方面的更多信息。

关于cuda - 用于生成最佳代码的 NVCC 编译选项(使用 JIT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23949928/

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