当前位置: 首页 > news >正文

cuda程序兼容性问题

nvcc hello.cu -arch=compute_60 -code=sm_60

1、指定虚拟架构计算能力

        1、c/c++源码编译为PTX时,可以指定虚拟架构的计算能力,用来确定代码中能够使用的CUDA功能

        2、c/c++源码转换为PTX这一步骤与GPU硬件无关

        3、编译指令:

-arch=compute_XY  //XY:第一个数字X代表计算能力的主版本号,第二个数字Y代表计算能力的次版本号

        4、PTX的指令只能在更高的计算能力的GPU使用

//下面指令编译出的可执行文件helloword可以在计算能力>=6.1的gpu上面执行,在计算能力校友6.1的gpu则不能执行。
ncvv helloworld.cu -o helloworld -arch=compute_61

2、制定真实架构计算能力

        1、PTX指令转化为二进制cubin代码与具体的gpu架构有关

        2、编译指令

-code=xm_XY  //XY:第一个数字代表计算能力的主版本号,第二个数字Y代表计算能力的次版本号

        注意:

                1、二进制cubin代码,大版本之间不兼容

                2、指定真实架构计算能力的时候必须指定虚拟架构计算能力

                3、指定的真实架构能力必须大于或等于虚拟架构能力

        3、真实架构可以实现低小版本到高小版本的兼容 

3、指定多个gpu版本编译

        1、使得编译出来的可执行文件可以在多gpu中执行

        2、同时指定多组计算能力:

编译选项:-gencode arch=compute_XY -code=sm_XY
nvcc ex1.cu -o ex1_fat -gencode arch=compute_35,code=sm_35   //开普勒架构-gencode arch=compute_50,code=sm_50  //麦克斯韦架构-gencode arch=compute_60,code=sm_60  //帕斯卡架构-gencode arch=compute_70,code=sm_70  //伏特架构

        3、编译出的可执行文件包含4个二进制版本,生成的可执行文件称为胖二进制文件

        4、注意:

                1、执行上述指令必须CUDA版本支持7.0计算能力,否则会报错

                2、过多指定计算能力,会增加编译时间和可执行文件的大小

4、nvcc即时编译

        1、在运行可执行文件时,从保留的PTX代码临时编译出cubin文件,可以实现在高版本的gpu运行在低版本的程序

        2、在可执行文件中保留PTX代码,nvcc编译指令指定所保留的PTX代码虚拟架构:

-gencode arch=compute_XY,code=compute_XY

                注意:       

                        1、两个计算能力都是虚拟架构计算能力

                        2、两个虚拟架构计算能力必须一致        

        3、例:

nvcc ex1.cu -o ex1_fat -gencode arch=compute_35,code=sm_35   -gencode arch=compute_50,code=sm_50  -gencode arch=compute_61,code=sm_61  -gencode arch=compute_61,code=compute_61  

5、nvcc编译默认计算能力

        1、不同版本CUDA编译器在编译CUDA代码时,都有一个默认计算能力

        2、 cuda6.0及更早版本:        默认计算能力1.0

              cuda6.5~~cuda8.0:          默认计算能力2.0

               cuda9.0~~cuda10.0:        默认计算能力3.0

               cuda11.6:                         默认计算能力5.2  

相关文章:

  • 虚拟环境直接使用模块 笔记
  • 多边形生成立面点云
  • eFish-SBC-RK3576工控板音频接口测试操作指南
  • AI——认知建模工具:ACT-R
  • Python cv2边缘检测与轮廓查找:从理论到实战
  • 「动态规划」线性DP:股票问题合集 / LeetCode 121|122|123|188 (C++)
  • ubuntu中解决matplotlib无法显示中文问题
  • 使用非常便捷,可以批量操作的小软件
  • windows10系统:如何使用电脑控制手机上多个应用程序(app)?
  • Spring Boot 多数据源事务管理
  • 获取嵌入(Embeddings)的方法与实践
  • CSRF 攻击:深入解析“借刀杀人“的请求伪造与防御之道
  • penEuler操作系统结合豆包测试github仓库8086-Emulator项目
  • 数据结构、刷leetcode返航版--二分5/7
  • C++ 的未来趋势与挑战:探索新边界
  • 【hot100】bug指南记录1
  • 在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
  • Spring AI(1)—— 基本使用
  • MVCC机制
  • base64与图片的转换和预览
  • 重庆一高校75万采购市价299元产品?工作人员:正在处理
  • 著名文物鉴赏家吴荣光逝世,享年78岁
  • 重温经典|开播20周年,仙剑的那些幕后你知道吗?
  • 印度32座机场暂停民用航班运营,印称在边境多处发现无人机
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成