使用GPU的好处

在类似的价格和功率范围内,图形处理单元(GPU)提供的指令吞吐量和内存带宽比CPU高得多。许多应用程序利用这些更高的功能在GPU上比在CPU上运行得更快(请参阅GPU应用程序)。其他计算设备(如FPGA)也非常节能,但是编程灵活性比GPU小得多。由于GPU和CPU的设计目标不同,因此存在这种能力差异。尽管CPU被设计为擅长以最快的速度执行一系列操作,称为线程,并且可以并行执行数十个这些线程,但GPU被设计为擅长并行执行数千个线程(摊销降低单线程性能以实现更高的吞吐量)。GPU专用于高度并行计算,因此设计为使更多的晶体管专用于数据处理,而不是数据缓存和流控制。示意图1显示了CPU和GPU的芯片资源分配示例。
图1. GPU投入更多晶体管进行数据处理

将更多的晶体管投入到数据处理中,例如浮点计算,对于高度并行计算是有益的; GPU可以通过计算隐藏内存访问等待时间,而不是依靠大型数据缓存和复杂的流控制来避免长的内存访问等待时间,这两者在晶体管方面都是昂贵的。通常,应用程序包含并行部分和顺序部分的混合,因此系统设计时会混合使用GPU和CPU,以使整体性能最大化。 具有高度并行性的应用程序可以利用GPU的这种大规模并行性来获得比CPU更高的性能。

CUDA: A General-Purpose Parallel Computing Platform and Programming Model

NVIDIA®在2006年11月推出了通用并行计算平台和编程模型CUDA®,该模型利用NVIDIA GPU中的并行计算引擎以比在CPU上更有效的方式解决许多复杂的计算问题。CUDA带有一个软件环境,允许开发人员使用C ++作为高级编程语言。 如图2所示,支持其他语言,应用程序编程接口或基于指令的方法,例如FORTRAN,DirectCompute,OpenACC。
图2. GPU计算应用程序。 CUDA旨在支持各种语言和应用程序编程接口。

A Scalable Programming Model

多核CPU和多核GPU的出现意味着主流处理器芯片现在是并行系统。挑战在于开发可透明地扩展其并行性以利用不断增加的处理器内核的应用程序软件,就像3D图形应用程序可透明地将其并行性扩展到具有大量内核数量的许多核GPU一样。CUDA并行编程模型旨在克服这一挑战,同时为熟悉标准编程语言(例如C)的程序员保持较低的学习曲线。
At its core are three key abstractions - a hierarchy of thread groups, shared memories, and barrier synchronization - that are simply exposed to the programmer as a minimal set of language extensions.它的核心是三个关键抽象-线程组,共享内存和屏障同步的层次结构-只是作为最少的语言扩展集向程序员公开。
这些抽象提供了细粒度的数据并行性和线程并行性,嵌套在粗粒度的数据并行性和任务并行性中。它们指导程序员将问题划分为可以由线程块并行独立解决的粗略子问题,并将每个子问题分解为可以由模块内的所有线程并行并行解决的细小问题。
这种分解通过允许线程在解决每个子问题时进行协作来保留语言的表现力,并同时实现自动可伸缩性。实际上,可以在GPU内的任何可用多处理器上以任何顺序,并发地或顺序地调度每个线程块,以便已编译的CUDA程序可以在任意数量的多处理器上执行,如图3所示,并且只有运行时才能执行系统需要知道物理多处理器的数量。
这种可扩展的编程模型可通过简单地扩展多处理器和内存分区的数量来使GPU体系结构覆盖广泛的市场范围:从高性能发烧友GeForce GPU,专业的Quadro和Tesla计算产品到各种廉价的主流GeForce GPU(有关所有启用CUDA的GPU的列表,请参阅支持CUDA的GPU)。

GPU是围绕流多处理器(SM)阵列构建的(有关更多详细信息,请参见硬件实现)。 多线程程序被划分为彼此独立执行的线程块,因此具有多处理器的GPU将比具有较少多处理器的GPU在更少的时间内自动执行程序。

翻译文档来源于:https://docs.nvidia.com/cuda/cuda-c-programming-guide/

CUDA C++ Programming Guide——简介相关推荐

  1. CUDA C++ Programming Guide( v11.2.0)部分翻译+笔记

    笔记对有些较为简单的部分做了省略,有些原文中表达比较拗口的地方,重新组织了话叙,由于部分内容并不是完全翻译,所以不建议作为主要学习资料,建议作为学习对比参考使用,如有不明白的地方或觉得有问题的地方,欢 ...

  2. CUDA TOOlkit Programming Guide K. Unified Memory Programming

    在CUDA 6.0第一次被引入统一寻址 "single-pointer-to-data" model zero-copy memory K.1.1. System Requirem ...

  3. CUDA TOOlkit Programming Guide 2. Programming Model

    本章的样例来源:vectorAdd CUDA sample 2.1 Kernels __global__来声明kernel函数 // Kernel definition __global__ void ...

  4. CUDA C++ Programming Guide——编程模型

    本章通过概述CUDA编程模型在C ++中的使用方式,介绍了其主要概念. 编程接口中给出了CUDA C ++的广泛描述.本章和下章使用的向量加法示例的完整代码可以在vectorAdd CUDA示例中找到 ...

  5. CUDA TOOlkit Programming Guide 3. Programming Interface

    3.1. Compilation with NVCC nvcc是简化的C++编译器(解释了为啥在编译C动态库时会丢失函数指针) 3.2. CUDA Runtime 3.2.1. Initializat ...

  6. CUDA TOOlkit Programming Guide 1.Introduction

    1.1 图1,CPU和GPU的每秒钟的浮点计算对比(GFLOP/s) 图2,CPU和GPU的带宽(GB/s) 之所以有这么大差别是因为GPU就是为了并行计算设计的(parallel computati ...

  7. SPDK: Block Device Layer Programming Guide 块设备层编程指南

    文章目录 前言 Target Audience 目标受众 Introduction 简介 Basic Primitives 基本原语 Initializing The Library Library初 ...

  8. 苹果官方《Sprite Kit Programming Guide》翻译

    http://www.cocoachina.com/newbie/basic/2013/0822/6845.html 本文翻译自Apple官方的<Sprite Kit Programming G ...

  9. 再读苹果《Threading Programming Guide》笔记(二):线程配置与Run Loop

    本文为再读苹果<Threading Programming Guide>笔记第二篇,作者付宇轩表示:如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读 ...

最新文章

  1. WP7-网络-读取网页源码
  2. VTK:可视化之CollisionDetection
  3. 阿里云黄海宇:窄带高清2.0——让直播更惊艳的魔术
  4. windows c++版faster-rcnn
  5. C# VS如何整个项目中查找字符串
  6. Android播放c4d工程文件方法,安卓播放网络视频怎么实现?
  7. MATLAB模糊控制算法,驾驶员制动意图识别
  8. .gen地图文件的投影编程实现(以墨卡托投影和兰伯特投影为例)
  9. 获取棋盘格与标准模板在扫描仪上不同位置图片
  10. 函数Str、 Cstr 、 Val 、 Format联系与区别
  11. 如何在simlink仿真示波器中的波形上取几个点?
  12. 知物由学 | 一文读懂Android资源文件保护
  13. Docker commit 联系
  14. android的word默认字体大小设置,更改Microsoft Word文档的默认字体大小和样式 | MOS86...
  15. 数据库二级复习笔记(1)选择题
  16. iOS精品资源汇总(持续更新)
  17. 计算机音乐作曲排名2019,2019全球歌曲排行榜_数据 2019全球古典音乐排行榜
  18. SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor - 第428篇
  19. 图像处理之Gamma校正
  20. 置信度和置信度区间理解

热门文章

  1. 微信小程序获取准确的腾讯定位地址解决小程序发布以后不能获取地址逆解析问题
  2. 羽球的游戏之路(一)
  3. 时代亿信安全保密邮件签约中国兵器工业集团两大下属单位
  4. 微信小程序接入NFC,使用HCE模拟主机卡完成NFC刷卡发送消息
  5. JXCZT网络管理系统建设方案
  6. WPF运行报错 在MS.Internal.FontCache.FontFaceLayoutInfo+IntMap.TryGetValue(Int32, UInt16 ByRef)
  7. python 石头剪刀布小游戏(适合入门)
  8. 我是如何从一个小哈喽进阶为高级iOS的?
  9. 五、基于conflux 插件钱包的应用
  10. 使用pygame开发游戏:合金弹头(3)