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

提交評論