Fermi 白皮书中文翻译 v01版本.pdf_第1页
Fermi 白皮书中文翻译 v01版本.pdf_第2页
Fermi 白皮书中文翻译 v01版本.pdf_第3页
Fermi 白皮书中文翻译 v01版本.pdf_第4页
Fermi 白皮书中文翻译 v01版本.pdf_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Fermi 白皮书中文翻译 v0 1版本 翻译 NVIDIA Fermi Architecture Whitepaper pdf 网 站 enhero p hkbu edu hk kyzhao NVIDIA s Next Generation CUDA Compute and Graphics Architecture Code Named Fermi Fermi 架构在即 G80 架构之后的又一重要的 GPU 架构 G80 架构在时 nvidia 公司最初的通 用计算 GPU 架构 既可以做图形计算 也可以用来做并行计算 GT200 架构扩展了 G80 架构的特点和功能 对于 Fermi 而言 是 Nvidia 公司总结 G80 和 GT200 架构以后 几乎是 重新设计的专门针对于通用计算的 GPU 架构 Fermi 的设计采纳了用户在使用 G80 和 GT200 架构时候给出的建议 Fermi 的主要设计针对于以下几点 单精度的计算大概是桌面 CPU 的 10 倍的时间左右 并且一些应用需要 GPU 提供更 强的双精度运算 ECC 的添加 使得内存有容错的能力 有些并行计算并不一定能使用到 shared memory 所以更多的需求是在内存访问中 加上缓存 有些 CUDA 程序需要超过 16KB 的 SM shared memory 来加速他们的运算 用户需要更快的应用程序和图形显示之间的资源切换 用户需要更快的原子读写操作来加速并行程序运算 根据以上的需求 Fermi 的设计团队通过新的架构设计增加了它的计算能力 并且支持更 好的可编程能力和计算效果 Fermi 的主要的架构更新如下 第三代的 Streaming Multiprocessor o 每个 SM 包含 32 个 CUDA 计算 core 是 GT200 的 4 倍 o 8 倍于 GT200 的双精度浮点计算 o Dual Warp 调度策略 可以使得在一个时钟周期内同时启动两个 warp 进行 计算 o 64KB 的 RAM 支持可配置的 shared memory 和 L1 缓存 第二代的线程并行计算 ISA 架构 o 统一的地址空间 完整的支持 C 特性 o 针对 OpenCL 和 DirectCompute 做了优化设计 o 完整支持 IEEE 754 2008 32bit 和 64bit 精度 o 通过分支预测来增强计算能力 增强的内存操作子系统 o Nvidia 的并行数据缓存 支持 L1 和 L2 的可配置能力 o 第一个支持 GPU 内存的 ECC o 增强了内存原子操作能力 Nvidia 千兆线程引擎 o 10 倍的上下文切换能力 o 并发的 kernel 执行 o 支持 block 乱序执行 o 双重叠的内存访问引擎 A Quick Refresher on CUDA Fermi 支持每一个 block 里面启动 1536 个线程 An Overview of the Fermi Architecture 第一块 Fermi GPU 只用了 30 亿个晶体管 包含 512 个有 CUDA 计算能力的 core 每一个 CUDA core 可以在一个时钟周期里面执行一次浮点数运算或者一次整数运算 512 个 core 分别分布在 16 个 SM 里面 每一个 SM 里面包含 32 个 core 包含 6 个 64 位的内存 partition 有 384bit 的内存带宽 支持最多 6GB 的 GDDR5 DRAM 通过 PCIE 和 CPU 进行 链接 千兆线程管理器会自动管理线程调度到不同的 SM 上进行运行 Third Generation Streaming Multiprocessor 第三代的 SM 架构不只是增强 了 SM 的计算能力 同时使得 可编程性和效率得到提高 512个高性能的CUDA 计算core 每一个 SM 都包含 32 个 CUDA 计算 core 是以前架构的 4 每一个 core 都有完整的整数 倍 计算单元和浮点数计算单元 以前的 GPUs 都是用 IEEE 754 1985 的单精度浮点标准 Fermi 采用的是 IEEE 754 2008 的单精度浮点标准 单精度和双精度都同时支持 FMA 功能 FMA 是通过 MAD 来完成乘法和加法操作 同时保证没有精度的损失 FMA 的精确计算能 力超过了通过指令分解来完成的同样的工作 GT200 支持了双精度的 FMA 中 ALU 几乎采用完新的设计 支持 64bit 和扩展的精确的指令运算 同时支持计算 移位 布尔值 比较 转化和更多的指令操作 16 Load Store Units 每一个 SM 包含 16 个内存存 取单元 可以保证源和目标地址可以在一个周期内同时由 16 个线程来进行操作 支持缓存和 DRAM 的任何位置的读取 Four Special Function Units 特性函数处理单元处理超越函数 包括 sin cosine 求倒数 平方根 每一个 SFU 在一个 周期内每一个线程可以执行一个指令操作 每一个 warp 执行需要 8 个周期 指令分发器 可以按照当前 SFU 的运行情况来分发指令 当一个 SFU 在进行运算的时候 可以将指令分 发到其他的 SFU 处理单元 Designed for Double Precision 双精度的浮点计算在高性能计算中有着核心的重要位置 在求解线性代数中 数值计算 量子化学中都会需要双精度浮点运算 Fermi 架构为支持双精度浮点运算进行了特别设计 每一个 SM 在一个时钟周期内可以完成 16 个双精度浮点数的 FMA 操作 是在 GT200 架构 以后又一激动人心的设计 Dual Warp Scheduler Fermi 的每一个 SM 都有两个指令发送单元 可以同时让两个 warp 相互独立的并发运行 Fermi 的 Dual warp 调度机制可以同时并发调度两个 warp 的一条指令分别在 16 个一组的 CUDA cores 上进行计算 或者在 16 个存 取单元运行 或者 4 个 SFU 上运行 Fermi 的调 度器并不需要在指令流之间进行附属检查 利用如此优美的双发射调度机制 使得 Fermi 可以让硬件的计算能力达到极致 非常多的指令可以进行双发射 例如两条整数运算指令 两条浮点数运行指令 或者混合 的整数 浮点 存取 和 SFU 特殊处理指令都可以被并发执行 单精度和双精度的指令一 样可以并发执行 64 KB Configurable Shared Memory and L1 Cache 在片上的共享内存对可编程性和运行效率都是强有力的支持 共享内存可以让同在一个 block 的线程之间进行协作 并且可以重复利用在片上的内存 来减少片外内存访问的开 销 共享内存在很多高性能 CUDA 应用程序中都起到了关键的作用 G80 和 GT200 的每一个 SM 都有 16 KB 的共享内存 在 Fermi 的架构中 每一个 SM 都有 64 KB 的共享内存 这些内存可以被配置成 48 KB 的共享内存和 16 KB 的 L1 缓存 或者配 置成为 16 KB 的共享内存和 48 KB 的 L1 缓存 对于已经使用共享内存的程序来说 可以提供 3 倍的共享内存的支持 尤其是那些由于带 宽引起的问题 对一些已经使用了 shared memory 作为缓存的应用程序来说 代码可以简 化为直接使用系统硬件提供的缓存 同时还可以使用 16KB 的 shared memory 来使线程进 行交互 最好的情况就是一些原本就没有使用 shared memory 的程序 直接利用 L1 缓存 可以使得 CUDA 程序运行需要更少的时间 得到更高的性能 Summary Table Second General Parallel Thread Execution ISA Fermi 是第一个支持并行线程处理 PTX 2 0 指令集的体系架构 PTX 是一个底层的虚拟 机和 ISA 架构 来支持并行运算 在程序安装的时候 PTX 指令就会被 GPU 的驱动程序翻 译为机器码 PTX 最主要的目标 提供跨多卡 GPU 的稳定的 ISA 指令 在编译的时候使得程序达到 GPU 最高的性能 提供系统无关的 ISA 指令 可供 C C Fortran 或者其他语言使用 提供代码分布式的 ISA 架构给应用程序和中间件开发者 提供通用的 ISA 架构 来支持不同平台上的代码的优化和转译 使得开发 lib 和高性能的 kernel 函数更加的简便 提供 scalable 的编程模式 可以使得程序支持不同数目 cores 的 GPU PTX 2 0 有一些很多新的特性 使得 GPU 在有更高的可编程性 更精确 和提供更高的性 能 这些包括 完整支持 IEEE 32bit 的单精度浮点数 统一的寻址支持变量和指针 新的 指令来支持 OpenCL 和 DirectCompute 最终刚要的是 PTX 2 0 对完整支持 C 做了特殊的 设计 Unified Address Space enables Full C Support 统一寻址完整支持统一寻址完整支持 C Fermi 和 PTX2 0ISA 实现了统一寻址空间 可以统一寻址 3 种不同的内存地址 线程私有变 量 block 的共享内存和全局内存 来进行存 取操作 在 PTX1 0 中 存 取指令需要指定 在这三种地址中那一个进行寻址 程序可以在编译的时候就知道在特定的那个地址进行寻 址 这样就很难完全满足 C 和 C 的指针在编译的时候指向不确定地址 而只有在运行的 时候才知道确切地址的情况 通过 PTX2 0 的统一寻址空间 让三种地址空间通过唯一的连继续的地址空间进行寻址 单一的寻址空间进行统一的存 取指令操作在这样的地址空间上 代替了在三种空间上都 要进行不同存 取的方法 40bit 位宽的可以支持 TB 的寻址空间 ISA 架构可以提供 64bit 的位宽寻址空间 为将来的扩展提供支持 统一地址空间的实现 可以让 Fermi 真正完全的支持 C 编程 在 C 中 所有的变量和 函数都在一个 object 中 通过指针进行访问 PTX2 0 就可以通过统一指针管理方式找到任 何内存上的 object Fermi 提供的硬件寻址方式可以自动的把指针映射到正确的物理地址 Fermi 和 PTX2 0ISA 同样提供 C 虚函数的支持 函数指针的支持 new 和 delete 的操作的 Optimized for OpenCL and Direct Compute OpenCL 和 DirectCompute 和 CUDA 的编程模型很相近 几乎使用相同的线程 线程 block IEEE 32 bit Floating Point Precision 动态分配 object 和回收资源 C 的异常操作 try 和 catch 同样被支持 block 组织的 grid 同步 同一个 block 里面共享内存 全局内存 还有院子操作 Fermi 第三代支持 CUDA 的架构 很自然很好的优化支持了这些 API 更特别的 Fermi 利用标准 的转换方式 从硬件上支持 OpenCL 和 DirectCompute 的接口指令 可以让图形计算和通 用计算很简单的操作在相同的数据上 PTX 2 0 ISA 同样增加了对 DirectCompute 的指令 population count append 和 bit reverse 单精度的浮点数由硬件默认的支持 包括四个 IEEE 754 2008 支持的标准 竟似 零 最 小值 最大值 在浮点数系统中 Subnormal 是处于最小值和最大值之间的数 在较早 像线性代数 一些科学计算的程序 都是两个数相乘 然后加上第三个数 例如 D A x B C 以前的 GPU 架构通常情况下都是利用乘加指令来完 Improved conditional performance through predication 快更容易执行可以运行的部分 在 执行 if else 的时候 SM 会计算每一条分支都会需要执行的条件 增加一个可以满足的条 的 GPU 架构中 通常情况下把这一范围的浮点数归于 0 这样一般都会损失精度或者让程 序发生一些意想不到的错误 CPU 通常情况下都要通过额外的软件方式来处理 一般需要 上千个的周期 Fermi 是通过硬件来处理 subnormal 浮点数 可以精确的计算小于 0 的浮 点数而没有精度损失 通常情况下在 GPU 上完成的计算 成 MAD 可以让两个操作在一个指令周期内完成 MAD 指令使用了分断的乘法 然 后使用了取整的加法 Fermi 使用了更高精度的 FMA 指令 不但可以支持 32bit 的单精度 的操作 也满足 64bit 双精度的需求 GT200 只支持双精度的 FMA 在这样的精度保证 下面 更多的算法都可以受益 像渲染算法 一些迭代的数学算法 更快的除法和求平方 根的算法 在 PTX 2 0 ISA 中所有指令都增加了预处理 这样可以更 件 硬件都会执行那个分支 有了分支预测以后就可以更多的分支一起运行 比一条分支 一条的执行会更有效果 Fermi 的架构增加的条件判断隐藏了分支运算中的 overhead Memory Subsystem Innovations NVIDIA Parallel DataCacheTM with Configurable L1 and Unified L2 Cache 决一部分程序的问 题 但是不能解决所有的问题 一些应用程序天然的就需要 shared memory 有些应用程 在 Fermi 的架构中 每一个 SM 都包含 64KB 的高速的片上的 RAM 可以配置为 48KB 享内存也 16KB 的 L1 缓存 也可以配置为 16KB 的共享内存和 48KB 的 L1 缓存 当使用 通过了解不同的成千上万的应用程序 我们发现 shared memory 可以解 序需要 cache 有的既需要 shared memory 也需要 cache 优化的内存设计可以既提供 shared memory 也提供 cache 可以让程序员根据自己的需求来做选择 Fermi 的架构可以 支持两种需求 的共 48KB 的共享内存的时候 程序可以动态的分配内存 像 electrodynamic 的模拟 可以让 程序有三倍性能的提升 有的程序访问的地址不是预先分配的 48KB 的 L1 缓存就可以更 好的支持直接访问 DRAM 的程序 两种情况的配置 L1 缓存 都可以增加临时寄存器的 使用 以避免溢出 以前 理操作 L2 缓存 和所有的 SM 都相通 L2 First GPU with ECC Memory Support Fermi 是第一款支持内存错误检查和修复 ECC 的 GPU 架构 在使用 GPU 做大数据量的 理和高性能的计算的时候 ECC 是有大量的需求 在医疗图像处理和大型集群中 ECC 是 的 GPU 架构都是直接把寄 存器分配到对应的 DRAM 增加了访问的延迟 通过 L1 缓存 更好的支持了临 时寄存器的使用 Fermi 有 768KB 的统一的 L2 缓存 可以支持所有的 存取和纹 提供有效和高速的数据支 持 有些算法不能在运行 前就确定下来 像一些物 理问题 光线跟踪 稀疏 矩阵乘法 尤其需要缓存 的支持 过滤器和转换器 需要所有的 SM 都去读取 相同数据的时候 缓存一 样会有很大的帮助 处 特别有需要的特性 正常情况下的内存位的存储错误 都会引起软件的错误 ECC 就是在上述错误没有多系统 造成影响的情况下 用来检查和纠正这样的错误 由于这样的错误会根据系统的增大线性 的增加 ECC 就成为大型集群中必不可少的需求 Fast Atomic Memory Operations 中做正确的读写操作 原 子操作包括 add min 比较和交换 读 修改和写操作都不用打断其他的线程的运行 缩减 和并行的建立数据结构中而不需要锁定线程的执 行 在 Fermi 中的大量的原子操作单元和 L2 缓存的使用 大大增强了 GPU 架构中的原子操作 能力 在相同位置的原子操作 Fermi 的速度比 GT200 快 20 倍 连续的内存段操作是 GT200 的 7 5 倍 上的特性 就是它两层的分布式的线程调度机制 在片上的层面 全局 的分布式线程调度引擎分发 block 到每一个 SM 上面 在 SM 层面 每一个 warp 分布式调 Fermi 的寄存器 共享内存 L1 缓存 L2 缓存和 DRAM 内存都受到 ECC 保护 这样的设计 部只是为了高性能的 GPU 应用 也是为了增加系统的可靠性 原子操作在并行计算非常重要 它可以让线程对共享的内存结构 原子操作大量的使用在并行存储 GigaThreadTM Thread Scheduler 在 Fermi一个重要 度引擎按照 32 个线程为一个 warp 来让线程执行 第一个 GigaThread 线程调度引擎 在 G80 架构中实现了 12288 个线程的实时的调度管理 Fermi 架构不只是增强了原有的机制 式利用处理器的计算资源 Fermi 的 pipeline 经过优化设计 把 context 的切换时 间减少到了 10 20 毫秒 极大的优化了上一代的 GPU 架构 不只是性能的提高 这个设计 l 的应用程序 例如让程序在图形和 PhysX 的应用 序 流体和固体 如果是串行执行 只能利用一半的线程处理器 Fermi 的架构可以 让同一个 CUDA context 的 kernel 都同时运行在同一个 GP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论