• 本章从GPU的系统层面到功能单元对CUDA平台描述。
  • 前三:多种构建CUDA系统的方法;
  • 四:地址空间及CUDA的内存模型是如何在软硬件上实现的;
  • 五:CPU/GPU交互,指令如何提交到GPU及CPU/GPU是同步的;
  • 最后,针对复制引擎和流处理器簇等功能单元进行宏观描述,
    • 给出了支持CUDA的三代硬件上流处理器簇的框图。

2.1 CPU配置

本节及随后两:各种 CPU/GPU架构,

  • 对CUDA开发者 如何编程 给建议。
  • 研究了CPU配置、集成GPU和多GPU配置。
  • 从图2-1谈起。

2硬件架构

2-1省略连接 CPU与外界的“芯片组”(“核心逻辑”)。

  • 系统每比特的入与出:磁盘、网络控制器、键、鼠、USB设备及GPU的输入输出,都要过芯片组。
  • 谁一分为二:
    • 连接大多外设和系统的
    • 含图形总线(加速图形端口,后被PCle接口取代)和
      • 内存控制器(通过前端总线与内存相连)的

每个Pcle (peripheral communications interconnect express) 2.0的lane

  • 理论500MB/s带宽。
  • 一给定外设,通道数1、4、8或16
  • GPU需平台上所有外设的最大带宽,所以它们一般被插由16通道的PCe插槽。
    • 考虑到数据包的附加消耗,8G/s带宽实际上能达6G/s

2.1.1 前端总线

  • 2-2将北桥和内存控制器添加到2-1后的简化。
  • 2-2还显示GPU的集内
    • 是在与CPU内存控制器完全不同的约束集下设计的。
  • G须调解所谓的同步客户端,如视频显示,其带宽要求是固定的。
  • G内在设计时还考虑了GPU对延迟的容忍度
    • 及大量内存带宽方面的内在需求。
  • 写书时高端G提供的本地显存带宽>>超过100G/s。
  • G内总和G集成
    • so本章其余的图省略了它
      2硬件架构

2.1.2对称处理器簇

  • 2-3:传统北桥配置上的多CPU系统。

  • 多核前,用多线程以利用多CPU

  • 即使每个CPU和北桥本身都有缓存,

    • 北桥也须确保每个CPU看到相同的、一致的内存视图。
  • SMP共享通往内存的路径,不同CPU的内存访问性能一致。
    2硬件架构

  • PCI3.0带宽PCle2.0两倍。

  • 供图2-3,不只是因为该配置是支持CUDA的计算机,

    • 更是作为历史资料参照。

2.1.3 NUMA

  • AMD的Opteron到Intel的Nehalem(酷睿i7)谈起,
    • 北桥的内集成到CPU,如2-4。
    • 这提高了CPU的内存性能。

2硬件架构

对开发人员,2-4中和讨论过的略有不同。

  • 对包含多个CPU的系统,如图2-5,就很不一样。

2硬件架构

对配有多个CPU的机器,此架构意味,每个CPU都有自己的内存带宽池。

  • 这样的系统中,CPU称“节点”或“CPU插槽”。
  • 同时,由于多线程OS和程序依赖于前文中CPU和北桥配置下缓存的一致性,Opteron和Nehalem架构推出HT和QPI

HT和QPI是CPU间、CPU与I/O集线器的点对点连接。

  • HT/QPI的系统中
  • 每个CPU都可访问任何内存存储单元。
  • 但对内存的物理地址直接附属于CPU的本地内存单元的访问会更快。
  • “非本地访问”的执行有赖于HT/QPI检查其他CPU的缓存,清除所
    请求数据的缓存副本,然后传递数据到发出请求的CPU。
  • 这些CPU的大型片上缓存降低非本地内存访问的成本。
  • 且,发出请求的CPU可在自身缓存层次上保留该数据,直到另一个CPU向内存提出申请为止。

为帮助解决这些性能陷阱,

  • Windows和Linux引入API。
  • 这样应用程序能够用特定CPU以及设置“线程亲和的”( thread affinity)CPU。
  • 因此,当OS把线程调度到CPU时,可保证大部分甚至是全部的内存都是本地访问的。

爱钻研的人可用这些API来设计代码以暴露NUMA的性能缺陷。

  • 更常见(和隐性)的问题是,由于运行在不同CPU上的两个线程的“伪共享”,导致过多的HT/QPI事务在同一缓存行上访问内存存储单元。
  • so NUMA API须慎用。
  • 它们虽然提供了提高性能的工具,但也容易因误用而带来性能问题。

减轻访问非本地内存对性能影响的方法之一,是以缓存行边界为准,在CPU间均匀划分物理内存,也就是所谓的内存重叠。

  • 对CUDA而言,此法在图2-5所示的系统中很有效(其为一个NUMA模式配置,多CPU和GPU通过一个共享的I/O集线器连接)。
  • 由于PCle带宽往往是整体应用性能的瓶颈,许多系统将使用独立的I/O集线器去服务更多的PCIe总线,如图2-6

2硬件架构

为很好地运行在这样一个“亲和”系统上,CUDA程序注意 NUMA API 的使用,以便为连接到给定GPU的PCIe总线执行本地的内存分配和线程亲和的调度。

  • 否则,GPU发起的内存复制将是非本地的,内存事务将在HT/QPI互连结构中需要额外的“跳跃”。
  • 由于GPU要巨大的带宽,这些DMA操作会降低HT/QPI为其主要对象服务的能力。
  • 和伪共享相比,对于CUDA程序而言,GPU的非本地内存复制操作对性能的影响有更要命。

2.1.4 集成的PCle

  • 2-7将I/O集线器集成到CPU,沙桥是迈向全面的系统集成的又一步。
  • 单沙桥的PCIe接口有40通道(一个GPU最多用16,so支持两个GPU)。

2硬件架构

对CUDA开发者,集成的PCIe有利有弊。

  • 弊:PCIe通路始终是亲和的。
  • 设计师不能建立单一I/O集线器服务于多个CPU(即2-5所示)
    • 所有的多CPU系统都类似于图2-6。
      导致不同CPU上的GPU之间无法执行点对点操作。
  • 优:CPU缓存可直接参与PCle总线通信:DMA读请求可直接读取缓存,且GPU写入的数据会放入缓存

2.2集成GPU

“集成”的意思是“集成到芯片组”。

  • 如2-8,只属于CPU的内存池可被集成到芯片组的CG共享。
  • 如,英伟达芯片组中支持CUDA的GPU,MCP79(适用于笔记本电脑和上网本)和MCP89等。
  • MCP89将是最新最好的支持CUDA的x86芯片组,
    • 集成了三级缓存,
    • 有3倍于MCP7x芯片组的流处理器簇。

2硬件架构

CUDA中用于映射锁页内存( mapped pinned memory)的API,在集成GPU上有特殊意义。

  • 这些API把分配的主机内存映射到CUDA内核的地址空间,使它们能直接被访问。
    • 也称“零复制”,因为内存是共享的,复制不需过总线。
  • 在传输受限型工作量上,集成的GPU可超过一个大的独立G

“写结合”( write- combined,WC)内存的分配在集成GPU上也有大意义。

  • CPU的缓存侦测行为在访问这种内存时是被禁止的,这样可以提高访问内存过程中GPU的性能。
  • 当然,若CPU从“写结合”内存中读数据,通常的WC内存应用的性能会有损失。

集成与独立不排斥的。

  • MCP7x和MCP89芯片组提供了PCIe连接接口(图2-9)。
  • 在这样的系统中,CUDA更倾向于在独立GPU上运行,因为大多数的CUDA
    应用程序将在独立GPU上部署。
  • 如,在单个GPU上运行时,一个CUDA应用程序会自动选择在独立GPU上运行。

2硬件架构

CUDA程序通过cudadeviceprop.integrated的值或

  • 通过传递CU_DEVICE_ATTRIBUTE_INTEGRATED到cuDeviceGetAttribute()査询一个GPU是集成GPU?。

集成GPU不稀奇,计算机在主板上集成了支持CUDA的GPU。

  • 几年内会落伍,因为英伟达已退出x86芯片组市场。
  • 传言已宣布出货重点放在
    • 集成了支持CUDA的GPU与 ARM CPU的
    • 片上系统( systems on a chip,SOC)上。
  • 可判定,零复制优化将在那些系统上工作得很好。

2.3多GPU

  • 把多GPU安装在一个系统的不同方法及其对CUDA开发者的影响。
  • 会从下图略去GPU内存。
  • 图中,每个GPU默认连接到相应专用内存。

约2004年,英伟达推出了“速力”( Scalable Link Interface,SL)技术,

  • 可让多GPU并行工作,以提供更高的图形性能。
  • 使用可容纳多个GPU的主板,用户可通过在他们的系统上安装两个GPU来提升近一倍的图形性能(图2-10)。
  • 默认情况下,英伟达驱动程序配置了这些GPU卡,使它们表现得好像是单个速度更快的卡,用以加速如 Direct3D和OPENGL GPU的图形API。
  • 打算用CUDA的用户,必须明确在 Windows的显示控制面板上启用它。

2硬件架构

here!!!

相关文章:

  • 2021-04-27
  • 2021-09-17
  • 2021-05-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-25
  • 2021-07-23
猜你喜欢
  • 2021-10-14
  • 2021-09-14
  • 2021-07-09
  • 2021-07-29
  • 2021-12-15
  • 2022-01-13
  • 2022-01-06
相关资源
相似解决方案