当前位置: 首页 > 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  

http://www.xdnf.cn/news/327691.html

相关文章:

  • 001 环境搭建
  • 对京东开展外卖业务的一些思考
  • 80、删除有序数组中的重复项Ⅱ
  • keil5 sprintf接口无法使用
  • 51单片机快速成长路径
  • SpringBoot记录用户操作日志
  • 紫光同创FPGA实现HSSTHP光口视频传输+图像缩放,基于Aurora 8b/10b编解码架构,提供3套PDS工程源码和技术支持
  • windows使用bat脚本激活conda环境
  • TI Code Composer Studio编译时SDK报错问题解决
  • 鸿蒙NEXT开发动画案例3
  • 写程序,统计两会政府工作报告热词频率,并生成词云
  • 2025-05-07 Unity 网络基础7——TCP异步通信
  • 卷积神经网络基础(六)
  • Python 运维脚本
  • AI系列:智能音箱技术简析
  • void*在c语言中什么意思(非常详细)
  • scanpy处理:使用自定义 python 函数读取百迈客空间转录组数据(百创智造S1000)
  • 深度学习:智能车牌识别系统(python)
  • htop筛选进程时,出现重复进程
  • 德州仪器技术干货 | 48V 集成式热插拔电子保险丝:为现代 AI 数据中心高效供电
  • Python案例实战《水果识别模型训练及调用》
  • Linux 内核学习(7) --- 字符设备驱动
  • eFish-SBC-RK3576工控板CAN接口测试操作指南
  • leetcode 3341. 到达最后一个房间的最少时间 I 中等
  • Unity_JK框架【3】 事件系统的简单使用示例
  • 169.多数元素
  • openstack虚拟机状态异常处理
  • java集合菜鸟教程
  • 从 CodeBuddy Craft 到 edgeone-pages-mcp 上线算命网站的一次完整体验分享
  • 多语言网站的 UX 陷阱与国际化实践陷阱清单