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

embedded/2024/9/19 0:50:15/ 标签: CUDA, C++

前言

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.ppmy.cn/embedded/111062.html

相关文章

Leetcode Hot 100刷题记录 -Day14(矩阵置0)

矩阵置0 问题描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:…

chattr:修改文件的特殊属性

​chattr ​命令用于改变文件的特殊属性,也称为"chattr 属性"。这些属性可以提供额外的安全性和控制,如设置文件为不可修改、只允许在文件末尾添加数据等。 ‍ 一、Linux 文件属性 文件属性是指与文件相关联的元数据,这些属性决…

SAM 2:分割图像和视频中的任何内容

文章目录 摘要1 引言2 相关工作3 任务:可提示视觉分割4 模型5 数据5.1 数据引擎5.2 SA-V数据集6 零样本实验6.1 视频任务6.1.1 提示视频分割6.1.2 半监督视频对象分割6.1.3 公平性评估6.2 图像任务7 与半监督VOS的最新技术的比较8 数据和模型消融8.1 数据消融8.2 模型架构消融…

计算机网络(Hub 集线器、交换机、路由器)

计算机网络 匹配符Hub 集线器实现多台电脑之间的通信:交换机实现两个局域网之间的通信:路由器 OSI参考模型TCP/IP协议族家庭宽带中: 无线路由器IP地址NAT 网络地址转换:解决IP地址不足 VPN 匹配符 Hub 集线器 群发 半双工 实现…

基于Boost库的搜索引擎开发实践

目录 1.项目相关背景2.宏观原理3.相关技术栈和环境4.正排、倒排索引原理5.去标签和数据清洗模块parser5.1.认识标签5.2.准备数据源5.3.编写数据清洗代码parser5.3.1.编写读取文件Readfile5.3.2.编写分析文件Anafile5.3.2.编写保存清洗后数据SaveHtml5.3.2.测试parser 6.编写索引…

TDengine 首席架构师肖波演讲整理:探索新型电力系统的五大关键场景与挑战

在 7 月 26 日的 TDengine 用户大会上,涛思数据(TDengine)首席架构师肖波进行了题为《TDengine 助力新型电力系统高质量发展》的主题演讲。他不仅分享了 TDengine 在新型电力系统中的应用案例,还深入探讨了如何利用 TDengine 的高…

力扣(LeetCode)每日一题 2576. 求出最多标记下标

题目链接https://leetcode.cn/problems/find-the-maximum-number-of-marked-indices/description/?envTypedaily-question&envId2024-09-12 思路: 先排序,然后定义双指针 left,right,贪心遍历,左指针在中间&…

PowerShell 脚本自动化 Windows 工作开发流程

在 Windows 环境中,PowerShell 是一个强大且灵活的脚本语言,它不仅能与 Windows 系统深度集成,还能够进行任务自动化处理。对于开发者和系统管理员而言,编写 PowerShell 脚本来自动化常见的工作流程,能显著提升生产效率…

[机器学习]逻辑回归

1 前置知识 逻辑回归解决二分类问题。sigmoid函数:非线性,值域(0,1)概率值 2 逻辑回归原理 3 癌症分类案例 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import Standa…

第十章 【后端】环境准备(10.5)——Docker

10.5 Docker Docker 官网 Docker 安装文档:https://docs.docker.com/install/linux/docker-ce/centos/ 若之前已安装 Docker,先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrot…

5分钟配置Nginx?(二)

前言: 此文章分为两个部分。 5分钟搞懂什么是Nginx?(一)-CSDN博客文章浏览阅读82次。2.、那么此时入口的安全性则格外重要,同时因为加强了入口的安全性,后端的web server的安全则可以不用做额外安全工作。因为入口如果破防,后端web server一定破防,如果不…

关于SpringBoot项目yml配置数据库、redis、mq等中间件的用户密码敏感信息加密问题的解决方案

一、问题描述 一般情况下,yml里边的配置信息 都是在项目部署时动态管理的,一般不存在泄密或者不安全的情况,但是,不凡有一些脑袋有泡的客户,要对你项目源码进行安全性检测。故提供如下解决方案: 二、关于中间件Redis、MQ等对用户名或密码进行加密。 一般可在其对应的配…

【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例

Blockchain Workshop v2.0(以下简称 BCW v2.0)是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养,用于区块链专业技术学习和智能合约编程学习,平台基于 FISCO BC…

SQL进阶技巧:如何获取数组中前N个元素?

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 表数据如下: id arr 1 [a,b,c,d,e,f] 2 [e,d,s,d,g,w,s] 3 [a] 4 [] 5 NULL 目的是按顺序选择每行“arr”中的前 3 个元素并将其作为数组返回,输出如下: id output_…

深圳建站公司-如何做网站

深圳建站公司:如何制作一个成功的网站 在信息化快速发展的今天,企业和个人越来越重视网络形象,网站成为了展示品牌、推广产品和服务的重要平台。深圳作为科技创新和经济发展的前沿城市,涌现出许多专业的建站公司,能够为…

移动应用门户实现的技术方案

移动应用门户是专为移动设备(如智能手机和平板电脑)设计的应用程序,比如:小程序、APP等,用户可以通过应用商店下载并安装。这些应用程序提供了更好的用户体验,通常具有更高的性能和交互性,可以直…

两个方法,设置Word打开密码!

想要保护word文件中的内容,我们可以给文件设置一个打开密码,这样只有知道密码的人才能够打开查看文件,今天分享两个word文件设置打开密码的方法。 方法一: 打开word文档后,点击【文件】-【信息】-【保护文档】这里有…

Codeforces practice /C++ 2024/9/11 - 2024/9/12

D. Mathematical Problem Codeforces Round 954 (Div. 3) 原题链接:https://codeforces.com/contest/1986/problem/D 题目标签分类:brute force,dp,greedy,implementation,math,two pointers…

iphone13 不升级IOS使用广电卡

iPhone13的信号📶,15系统刷高版本iPCC,本帖以后不再更新!!! 自从知道可以通过刷iPCC的方式改善信号(不更新iOS大版本的情况下),尝试了各种版本。 我自己用下来总结 - 移动联通48、49、50 &…

【hot100】力扣hot100部分题解

1.和为k的子数组 题目链接 注意:题目是连续的子数组。 因为数据有负数,用滑动窗口不太好做。 所以用数组前缀和。 数组前缀和就是从第1位到当前位的子数组的和。 每次遍历更新到当前位之前的前缀和,以对象的形式存储(key为前缀和&…