C++开发基础之理解 CUDA 编译配置:`compute_XX` 和 `sm_XX` 的作用

前言

在 CUDA 编程中,确保代码能够在不同的 NVIDIA GPU 上高效运行是非常重要的。为了实现这一点,CUDA 编译器 (nvcc) 提供了多种配置选项,其中 compute_XXsm_XX 是两个关键的编译选项。本文将深入探讨这两个选项的作用及其配置顺序,帮助更好地理解和使用这些设置。
在这里插入图片描述

什么是 compute_XXsm_XX

compute_XX

compute_XX 选项用于指定你希望生成的代码支持的 CUDA 计算能力版本。CUDA 计算能力(compute capability)是用来描述 GPU 硬件特性的指标。例如,compute_61 表示计算能力为 6.1 的 GPU。计算能力决定了 GPU 支持哪些特性和指令集。

生成的代码在编译时会被转化为 PTX(Parallel Thread Execution)代码。PTX 是一种中间代码,可以在不同的 GPU 上执行。指定 compute_XX 选项是为了确保生成的 PTX 代码能被所有支持该计算能力及更高计算能力的 GPU 设备执行。

sm_XX

sm_XX 选项用于指定你希望生成的代码是针对特定 GPU 架构的机器代码。这里的 sm 代表“流式多处理器”(Streaming Multiprocessor),sm_XX 表示特定 GPU 架构。例如,sm_61 表示针对计算能力 6.1 的 GPU 架构优化的机器代码。

生成的机器代码是针对特定 GPU 架构进行优化的,能更有效地利用该架构的特性,从而提升执行性能。如果你希望代码在特定的 GPU 上运行得更快,应该使用 sm_XX 来生成针对该架构的优化代码。

如何配置 compute_XXsm_XX

在使用 nvcc 编译 CUDA 程序时,可以通过 -gencode 标志来同时指定多个 compute_XXsm_XX 配置。例如,假设想支持rtx3080 或者 P600的显卡,找到对应的计算配置
Your GPU Compute Capability ,
在这里插入图片描述
生成支持计算能力 6.1 和 8.6 的代码,可以使用如下命令:
在这里插入图片描述

nvcc -gencode arch=compute_61,code=sm_61 -gencode arch=compute_86,code=sm_86 my_program.cu

在这个命令中,nvcc 会生成两个版本的代码:

  • 针对计算能力 6.1 的 PTX 代码,以及对应的 sm_61 架构优化的机器代码。
  • 针对计算能力 8.6 的 PTX 代码,以及对应的 sm_86 架构优化的机器代码。

配置的优先级和顺序

nvcc 命令中,compute_XXsm_XX 的顺序并不影响编译过程的实际效果。nvcc 会生成所有指定配置的代码。为了确保代码能够在较旧的或不明确指定的 GPU 上运行,通常建议按从较旧到较新的顺序排列这些配置。

为什么这些配置重要?

正确配置 compute_XXsm_XX 对于充分利用 GPU 硬件性能至关重要。通过为不同 GPU 架构生成优化的机器代码,可以确保代码在各种设备上都有良好的执行性能。同时,生成 PTX 代码可以保证代码在较旧的设备上也能运行,从而提高程序的兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大一新生以此篇开启你的算法之路

各位大一计算机萌新们,你们好,本篇博客会带领大家进行算法入门,给各位大一萌新答疑解惑。博客文章略长,可根据自己的需要观看,在博客中会有给大一萌新问题的解答,请不要错过。 入门简介: 算法…

可信的人类与人工智能协作:基于人类反馈和物理知识的安全自主驾驶强化学习

可信的人类与人工智能协作:基于人类反馈和物理知识的安全自主驾驶强化学习 Abstract 在自动驾驶领域,开发安全且可信赖的自动驾驶策略仍然是一项重大挑战。近年来,结合人类反馈的强化学习(RLHF)因其提升训练安全性和…

中国银河资产笔试25届考什么?如何通过考试|附真题库面试攻略

嘿,各位小伙伴们!我是职小豚,今天就带大家一起探秘中国银河资产 25 届秋招,为大家揭开这场金融之旅的神秘面纱。 一、中国银河资产介绍 中国银河资产,那可是金融领域的璀璨巨星!它就像一座闪耀着智慧光芒…

unity安装配置和vs2022联动教程

目录 1.选择vs2022配置 2.安装unity 2.1安装unity hub 2.2注册个人账号 2.3安装编辑器 2.4修改为简体中文 2.5添加许可证 2.6安装位置修改 3.项目的创建 3.1如何创建 3.2如何选择 3.3配置语言 3.4去哪里找语言包 4.unity编辑器窗口的介绍 4.1游戏的运行和停止 4…

11、Hive+Spark数仓环境准备

1、 Hive安装部署 1)把hive-3.1.3.tar.gz上传到linux的/opt/software目录下 2)解压hive-3.1.3.tar.gz到/opt/module/目录下面 [shuidihadoop102 module]$ tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/ 3)修改hive-3.1.3-b…

《深度学习》深度学习 框架、流程解析、动态展示及推导

目录 一、深度学习 1、什么是深度学习 2、特点 3、神经网络构造 1)单层神经元 • 推导 • 示例 2)多层神经网络 3)小结 4、感知器 神经网络的本质 5、多层感知器 6、动态图像示例 1)一个神经元 相当于下列状态&…

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器&#xf…

通过nginx代理转发实现共用80和443端口

目录 项目场景: 问题:怎么实现端口共用? 一、域名解析到nginx服务器 二、创建vhost解析到实际的服务器 三、防火墙的配置 项目场景: 公司自建服务器,有一条专线带有公网IP,如何满足不同的域名解析共用…

go-map系统学习

map底层结构 Goland的map的底层结构使用hash实现,一个hash表里有多个hash表节点,即bucket,每个bucket保存了map中的一个或者一组键值对。 map结构定义: runtime/map.go:hmap type hmap struct {// Note: the format of the hma…

win10 安装多个版本的python

1,安装python3.9 和python3.10 2, 安装完之后分别打开两个版本的Python的安装目录(第一层目录),把pythonw.exe分别重命名为pythonw_39.exe和pythonw_310.exe,把python.exe复制一份,并分别重命名为python_…

【C++】_stack和_queue容器适配器、_deque

当别人都在关注你飞的有多高的时候,只有父母在关心你飞的累不累。💓💓💓 目录 ✨说在前面 🍋知识点一:stack •🌰1.stack介绍 •🌰2.stack的基本操作 🍋知识点二&…

怎么利用XML发送物流快递通知短信

现如今短信平台越来越普遍了,而短信通知也分很多种,例如服务通知、订单通知、交易短信通知、会议通知等。而短信平台在物流行业通知这一块作用也很大。在家时:我们平时快递到了,如果电话联系不到本人,就会放到代收点,然…

力扣之1777.每家商店的产品价格

文章目录 1. 1777.每家商店的产品价格1.1 题干1.2 建表1.3 题解1.4 结果截图 1. 1777.每家商店的产品价格 1.1 题干 表:Products -------------------- | Column Name | Type | -------------------- | product_id | int | | store | enum | | price | int | ---…

分布式调度方案:Elastic-Job

文章目录 一、什么是分布式调度二、Elastic-Job 介绍三、Elastic-Job 实战3.1 环境搭建3.1.1 本地部署3.1.2 服务器部署3.1.3 Zookeeper 管控台界面 3.2 入门案例3.3 SpringBoot 集成 Elastic-Job3.4 任务分片(★)3.5 Dataflow 类型调度任务 一、什么是分…

提升LLM能力表现的四种AI代理策略

欢迎来到AI产品经理从0到1研习之旅。 “AI Agent”系列的第二篇,它来了!我说过,AI Agent才是我最看好的(大模型落地应用)未来,嘿嘿,目测有很多大佬与我有相似的看法。 本文从吴恩达&#xff0…

Python | Leetcode Python题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; class Solution:def readBinaryWatch(self, turnedOn: int) -> List[str]:ans list()for i in range(1024):h, m i >> 6, i & 0x3f # 用位运算取出高 4 位和低 6 位if h < 12 and m < 60 and bin(i).count("1&…

浙大数据结构:03-树2 List Leaves

这道题我借用了一点上一题的代码思路&#xff0c;这题考察的主要是层序遍历&#xff0c;即用队列来实现&#xff0c;当然此处我依然采用数组模拟队列来实现。 机翻 1、条件准备 map的键存下标&#xff0c;后面值分别存左右子树的下标&#xff0c;没有子树就存-1. head数组只…

产业园服务体系建设,是否已全面覆盖企业成长的每一个阶段?

在当今竞争激烈的商业环境中&#xff0c;产业园作为企业发展的重要载体&#xff0c;其服务体系的完善程度至关重要。那么&#xff0c;产业园服务体系建设&#xff0c;是否已全面覆盖企业成长的每一个阶段呢&#xff1f; 从企业的初创期来看&#xff0c;产业园可以提供办公场地的…

数据结构与算法学习day21-二叉树

一、从中序与后序遍历序列构造二叉树 1.题目 106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 2.思路 以后序&#xff08;左右中&#xff09;数组的最后一个元素为切割点&#xff08;根节点&#xff09;&#xff0c;切割的节点切中序&#xf…

初学者指南:MyBatis 入门教程

主要介绍了Mybatis的基本使用、JDBC、数据库连接池、lombok注解&#xff01; 文章目录 前言 什么是Mybatis? 快速入门 使用Mybatis查询所有的用户信息 配置SQL提示 JDBC介绍 Mybatis 数据库连接池 lombok 总结 前言 主要介绍了Mybatis的基本使用、JDBC、数据库连接…