CUDA C++ 编程指南

目录

  • 1. Introduction
    • 1.1. The Benefits of Using GPUs
    • 1.2. CUDA®: A General-Purpose Parallel Computing
    • 1.3. A Scalable Programming Model

CUDA C++ Programming Guide

1. Introduction

1.1. The Benefits of Using GPUs

在相似的价格和功耗范围内,图形处理单元 (GPU)1 提供比 CPU 高得多的指令吞吐量和内存带宽。许多应用程序利用这些更高的功能在 GPU 上运行得比在 CPU 上运行得更快(请参阅 GPU 应用程序)。其他计算设备(例如 FPGA)也非常节能,但其编程灵活性比 GPU 低得多。
GPU 和 CPU 之间存在这种功能差异,因为它们在设计时考虑了不同的目标。虽然 CPU 被设计为擅长以尽可能快的速度执行一系列称为线程的操作,并且可以并行执行几十个这样的线程,但 GPU 被设计为擅长并行执行数千个线程(摊销较慢的单线程性能以获得更大的吞吐量)。
GPU 专门用于高度并行计算,因此经过设计,更多晶体管专用于数据处理,而不是数据缓存和流量控制。图 1 的原理图显示了 CPU 与 GPU 的芯片资源分布示例。
在这里插入图片描述图 1 GPU 将更多晶体管用于数据处理

将更多晶体管用于数据处理,例如浮点计算,有利于高度并行计算; GPU可以通过计算来隐藏内存访问延迟,而不是依靠大数据缓存和复杂的流程控制来避免较长的内存访问延迟,而这两者对于晶体管而言都是昂贵的。
一般来说,应用程序混合有并行部分和顺序部分,因此系统设计时混合使用 GPU 和 CPU,以最大限度地提高整体性能。具有高度并行性的应用程序可以利用 GPU 的大规模并行特性来实现比 CPU 更高的性能。

1.2. CUDA®: A General-Purpose Parallel Computing

Platform and Programming Model2006 年 11 月,NVIDIA® 推出了 CUDA®,这是一种通用并行计算平台和编程模型,它利用 NVIDIA GPU 中的并行计算引擎以比 CPU 更高效的方式解决许多复杂的计算问题。
CUDA 附带一个软件环境,允许开发人员使用 C++ 作为高级编程语言。如图 2 所示,支持其他语言、应用程序编程接口或基于指令的方法,例如 FORTRANDirectComputeOpenACC
在这里插入图片描述
图 2 GPU 计算应用程序。 CUDA 旨在支持各种语言和应用程序编程接口。

1.3. A Scalable Programming Model

多核CPU和众核GPU的出现意味着主流处理器芯片现在都是并行系统。面临的挑战是开发能够透明地扩展其并行性的应用程序软件,以利用数量不断增加的处理器核心,就像 3D 图形应用程序透明地扩展其并行性到具有广泛不同数量的核心的多核 GPU 一样。
CUDA 并行编程模型旨在克服这一挑战,同时为熟悉 C 等标准编程语言的程序员保持较低的学习曲线。
其核心是三个关键的抽象——线程组的层次结构、共享内存和屏障同步——它们作为一组最小的语言扩展简单地暴露给程序员。
这些抽象提供了细粒度数据并行性和线程并行性,嵌套在粗粒度数据并行性和任务并行性中。它们引导程序员将问题划分为可以由线程块独立并行解决的粗略子问题,并将每个子问题划分为可以由块内的所有线程并行协作解决的更精细的部分。
这种分解通过允许线程在解决每个子问题时进行合作来保留语言表达能力,同时实现自动可扩展性。事实上,每个线程块都可以以任何顺序(同时或顺序)调度到 GPU 内的任何可用多处理器上,以便编译后的 CUDA 程序可以在任意数量的多处理器上执行,如图 3 所示,并且仅运行时系统需要知道物理多处理器数量。
这种可扩展的编程模型允许 GPU 架构通过简单地扩展多处理器和内存分区的数量来跨越广泛的市场范围:从高性能发烧友 GeForce GPU 和专业的 QuadroTesla 计算产品到各种廉价的主流 GeForce GPU(有关所有支持 CUDA 的 GPU 的列表,请参阅支持 CUDA 的 GPU)。
在这里插入图片描述图 3 自动可扩展性
Note
GPU 围绕流式多处理器 (SM) 阵列构建(有关更多详细信息,请参阅硬件实现)。多线程程序被划分为彼此独立执行的线程块,因此具有更多多处理器的 GPU 会比具有更少多处理器的 GPU 在更短的时间内自动执行程序。

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

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

相关文章

9个最受欢迎的开源自动化测试框架盘点!

自动化测试框架可以帮助测试人员评估多个Web和移动应用程序的功能,安全性,可用性和可访问性。尽管团队可以自己构建复杂的自动化测试框架,但是当他们可以使用现有的开源工具,库和测试框架获得相同甚至更好的结果时,通常…

Github开源贡献者的狂欢——教你如何免费领取价值$200的Starknet空投

前言: 2024 又迎来了四年一度的 BTC 减半时刻,币圈仿佛一下又热闹了起来,这几天有一个新的基于 ETH 的项目诞生了:StarkNet,代号 STRK,凡是在前 5000 个开源项目贡献过至少 3 个 commit 的程序猿都会被空投…

dhtml图片白色区域透明

2011-3-15 关于透明色别人已经讲的很好了,这里记录了一个测试例子。 gif只支持索引色透明,比如规定#FFFFFF为透明,那么图片中所有白色区域都完全透明。 而png支持alpha透明,任何颜色都可以透明,而且有透明度这样一个…

Linux系统网络服务部分拓展练习

1)网关服务器:ens36:12.0.0.254/24,ens33:192.168.241.254/24;Server1:192.168.241.0/24;PC1和server2:自动获取IP;交换机无需配置。要求能够使用Xshell等远程…

MySQL - 事务日志

目录 1. redo日志 1.1 为什么需要REDO日志 1.2 REDO日志的好处、特点 1. 好处 2. 特点 1.3 redo的组成 1.4 redo的整体流程 1.5 redo log的刷盘策略 1.6 不同刷盘策略演示 1. 流程图 ​编辑2. 举例 1.7 写入redo log buffer 过程 1.8 redo log file 1. 相关参数…

matlab倒立摆小车LQR控制动画

1、内容简介 略 54-可以交流、咨询、答疑 2、内容说明 略 摆杆长度为 L,质量为 m 的单级倒立摆(摆杆的质心在杆的中心处),小车的质量为 M。在水平方向施加控制力 u,相对参考系产生位移为 y。为了简化问题并且保其实质不变,忽…

【SelectIO】bitslice原语学习记录

基本概念 在Ultrascale (plus)系列上的FPGA中,Xilinx引入了bitslice硬核,它取代了7系列上的IDELAYCTRL/IODELAY/IOSERDES/IODDR系列硬核,用于为HP(High Performance)类型Bank上的IO接口提供串并转化、信号延时、三态控…

【k8s资源调度-HPA(自动扩缩容)】

1、HPA可以做什么? 通过观察pod的cpu、内存使用率或自定义metrics指标进行自动的扩容或缩容pod的数量。通常用于Deployment,不适用于无法扩/缩容的对象,如DaemonSet。控制管理器每隔30s(可以通过-horizontal-pod-autoscaler–sync-period修改…

特征选择|一种提升预测模型性能的方法(原理及其优化实现,Matlab)

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进 如今,生成的数据集呈指数级增长,这将产生具有大量特征和样本的数据集,而显然,某些特征是不相关/冗余的,它们…

springBoot整合Redis(一、Jedis操作Redis)

在springboot环境下连接redis的方法有很多,首先最简单的就是直接通过jedis类来连接,jedis类就相当于是redis的客户端表示。 但是因为现在比较常用的是:StringRedisTemplate和RedisTemplate,所以jedis只做简单的介绍。 一、Jedis…

powershell中安装git

以管理员权限打开 PowerShell。 在 PowerShell 中,你可以使用 winget 这个 Windows 的包管理器来安装 Git。下列命令会安装 Git: winget install --id Git.Git -e --source winget另一种方式是直接从 Git 官方网站下载安装程序,并运行它完…

Langchain-Chatchat部署总结

项目地址: https://github.com/chatchat-space/Langchain-Chatchat 整体安装比较方便,在阿里云购买云主机,购买的国外站点机器, 该项目运行最佳坏境为 Linux Ubuntu 22.04.5Python 版本 3.11.7CUDA 版本: 12.1torch2.1.2 使…

Spring的优点

1.方便解耦,简化开发 Spring就是一个容器,可以将所有对象创建和关系维护交给Spring管理。 2.AOP编程支持 面向切面编程,方便实现程序进行权限拦截,运行监控等功能。 3.声明式事务的支持 通过配置完成事务的管理,…

Vue全局事件防止重复点击(等待请求)【进阶版】

继《Vue全局指令防止重复点击(等待请求)》之后,感觉指令方式还是不太友好,而且嵌套闭包比较麻烦,于是想到了Vue的全局混入,利用混入,给组件绑定click事件。 一、实现原理 与指令方式大致一样&…

针对小型企业网络防护的免费防火墙软件

针对小型企业网络防护,以下是一些适合的防火墙软件/解决方案: pfSense:pfSense 是一款基于 FreeBSD 的开源防火墙和路由器软件,提供丰富的功能和灵活的配置选项,适合用于小型企业网络防护。它支持多种功能,…

代码随想录算法训练营第五十五天| 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目链接:. - 力扣(LeetCode) 解题思路:今天若买入,应当是前天积攒的利润减去当前股票 java: class Solution {public int maxProfit(int[] prices) {if (prices null |…

Linux 网络命令指南

目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录,进行远程管理和协作 CentOS / Red Hat(使用 firewalld) 关闭防火墙 开启防火墙 配置TCP端口(假设使用3306端口&#xff…

最短路径算法总结(Dijkstra、Bellman-ford、SPFA和Floyd)

在最短路径算法中,常用的有Dijkstra、Bellman-ford、spfa、Floyd这四大算法 Dijkstra:迪克斯特拉算法Bellman-ford:贝尔曼-福特算法SPFA:Shortest Path Faster Algorithm算法Floyd:弗洛伊德算法 四大算法介绍 简介 …

一键获取电商平台商品信息,快速提高电商业务效率

阿里巴巴店铺所有商品API接口技术全解析 一、引言 在阿里巴巴这个全球领先的电商平台上,店铺所有商品API接口(item_search_shop)为开发者提供了一个便捷的途径,能够获取店铺的所有商品信息。通过这一接口,无论是数据…

Web UI自动化测试原理

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…