Fermi 白皮書中文翻譯 v01版本.pdf_第1頁
Fermi 白皮書中文翻譯 v01版本.pdf_第2頁
Fermi 白皮書中文翻譯 v01版本.pdf_第3頁
Fermi 白皮書中文翻譯 v01版本.pdf_第4頁
Fermi 白皮書中文翻譯 v01版本.pdf_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Fermi 白皮書中文翻譯 v0 1版本 翻譯 NVIDIA Fermi Architecture Whitepaper pdf 網(wǎng) 站 enhero p hkbu edu hk kyzhao NVIDIA s Next Generation CUDA Compute and Graphics Architecture Code Named Fermi Fermi 架構(gòu)在即 G80 架構(gòu)之后的又一重要的 GPU 架構(gòu) G80 架構(gòu)在時 nvidia 公司最初的通 用計算 GPU 架構(gòu) 既可以做圖形計算 也可以用來做并行計算 GT200 架構(gòu)擴展了 G80 架構(gòu)的特點和功能 對于 Fermi 而言 是 Nvidia 公司總結(jié) G80 和 GT200 架構(gòu)以后 幾乎是 重新設(shè)計的專門針對于通用計算的 GPU 架構(gòu) Fermi 的設(shè)計采納了用戶在使用 G80 和 GT200 架構(gòu)時候給出的建議 Fermi 的主要設(shè)計針對于以下幾點 單精度的計算大概是桌面 CPU 的 10 倍的時間左右 并且一些應(yīng)用需要 GPU 提供更 強的雙精度運算 ECC 的添加 使得內(nèi)存有容錯的能力 有些并行計算并不一定能使用到 shared memory 所以更多的需求是在內(nèi)存訪問中 加上緩存 有些 CUDA 程序需要超過 16KB 的 SM shared memory 來加速他們的運算 用戶需要更快的應(yīng)用程序和圖形顯示之間的資源切換 用戶需要更快的原子讀寫操作來加速并行程序運算 根據(jù)以上的需求 Fermi 的設(shè)計團隊通過新的架構(gòu)設(shè)計增加了它的計算能力 并且支持更 好的可編程能力和計算效果 Fermi 的主要的架構(gòu)更新如下 第三代的 Streaming Multiprocessor o 每個 SM 包含 32 個 CUDA 計算 core 是 GT200 的 4 倍 o 8 倍于 GT200 的雙精度浮點計算 o Dual Warp 調(diào)度策略 可以使得在一個時鐘周期內(nèi)同時啟動兩個 warp 進(jìn)行 計算 o 64KB 的 RAM 支持可配置的 shared memory 和 L1 緩存 第二代的線程并行計算 ISA 架構(gòu) o 統(tǒng)一的地址空間 完整的支持 C 特性 o 針對 OpenCL 和 DirectCompute 做了優(yōu)化設(shè)計 o 完整支持 IEEE 754 2008 32bit 和 64bit 精度 o 通過分支預(yù)測來增強計算能力 增強的內(nèi)存操作子系統(tǒng) o Nvidia 的并行數(shù)據(jù)緩存 支持 L1 和 L2 的可配置能力 o 第一個支持 GPU 內(nèi)存的 ECC o 增強了內(nèi)存原子操作能力 Nvidia 千兆線程引擎 o 10 倍的上下文切換能力 o 并發(fā)的 kernel 執(zhí)行 o 支持 block 亂序執(zhí)行 o 雙重疊的內(nèi)存訪問引擎 A Quick Refresher on CUDA Fermi 支持每一個 block 里面啟動 1536 個線程 An Overview of the Fermi Architecture 第一塊 Fermi GPU 只用了 30 億個晶體管 包含 512 個有 CUDA 計算能力的 core 每一個 CUDA core 可以在一個時鐘周期里面執(zhí)行一次浮點數(shù)運算或者一次整數(shù)運算 512 個 core 分別分布在 16 個 SM 里面 每一個 SM 里面包含 32 個 core 包含 6 個 64 位的內(nèi)存 partition 有 384bit 的內(nèi)存帶寬 支持最多 6GB 的 GDDR5 DRAM 通過 PCIE 和 CPU 進(jìn)行 鏈接 千兆線程管理器會自動管理線程調(diào)度到不同的 SM 上進(jìn)行運行 Third Generation Streaming Multiprocessor 第三代的 SM 架構(gòu)不只是增強 了 SM 的計算能力 同時使得 可編程性和效率得到提高 512個高性能的CUDA 計算core 每一個 SM 都包含 32 個 CUDA 計算 core 是以前架構(gòu)的 4 每一個 core 都有完整的整數(shù) 倍 計算單元和浮點數(shù)計算單元 以前的 GPUs 都是用 IEEE 754 1985 的單精度浮點標(biāo)準(zhǔn) Fermi 采用的是 IEEE 754 2008 的單精度浮點標(biāo)準(zhǔn) 單精度和雙精度都同時支持 FMA 功能 FMA 是通過 MAD 來完成乘法和加法操作 同時保證沒有精度的損失 FMA 的精確計算能 力超過了通過指令分解來完成的同樣的工作 GT200 支持了雙精度的 FMA 中 ALU 幾乎采用完新的設(shè)計 支持 64bit 和擴展的精確的指令運算 同時支持計算 移位 布爾值 比較 轉(zhuǎn)化和更多的指令操作 16 Load Store Units 每一個 SM 包含 16 個內(nèi)存存 取單元 可以保證源和目標(biāo)地址可以在一個周期內(nèi)同時由 16 個線程來進(jìn)行操作 支持緩存和 DRAM 的任何位置的讀取 Four Special Function Units 特性函數(shù)處理單元處理超越函數(shù) 包括 sin cosine 求倒數(shù) 平方根 每一個 SFU 在一個 周期內(nèi)每一個線程可以執(zhí)行一個指令操作 每一個 warp 執(zhí)行需要 8 個周期 指令分發(fā)器 可以按照當(dāng)前 SFU 的運行情況來分發(fā)指令 當(dāng)一個 SFU 在進(jìn)行運算的時候 可以將指令分 發(fā)到其他的 SFU 處理單元 Designed for Double Precision 雙精度的浮點計算在高性能計算中有著核心的重要位置 在求解線性代數(shù)中 數(shù)值計算 量子化學(xué)中都會需要雙精度浮點運算 Fermi 架構(gòu)為支持雙精度浮點運算進(jìn)行了特別設(shè)計 每一個 SM 在一個時鐘周期內(nèi)可以完成 16 個雙精度浮點數(shù)的 FMA 操作 是在 GT200 架構(gòu) 以后又一激動人心的設(shè)計 Dual Warp Scheduler Fermi 的每一個 SM 都有兩個指令發(fā)送單元 可以同時讓兩個 warp 相互獨立的并發(fā)運行 Fermi 的 Dual warp 調(diào)度機制可以同時并發(fā)調(diào)度兩個 warp 的一條指令分別在 16 個一組的 CUDA cores 上進(jìn)行計算 或者在 16 個存 取單元運行 或者 4 個 SFU 上運行 Fermi 的調(diào) 度器并不需要在指令流之間進(jìn)行附屬檢查 利用如此優(yōu)美的雙發(fā)射調(diào)度機制 使得 Fermi 可以讓硬件的計算能力達(dá)到極致 非常多的指令可以進(jìn)行雙發(fā)射 例如兩條整數(shù)運算指令 兩條浮點數(shù)運行指令 或者混合 的整數(shù) 浮點 存取 和 SFU 特殊處理指令都可以被并發(fā)執(zhí)行 單精度和雙精度的指令一 樣可以并發(fā)執(zhí)行 64 KB Configurable Shared Memory and L1 Cache 在片上的共享內(nèi)存對可編程性和運行效率都是強有力的支持 共享內(nèi)存可以讓同在一個 block 的線程之間進(jìn)行協(xié)作 并且可以重復(fù)利用在片上的內(nèi)存 來減少片外內(nèi)存訪問的開 銷 共享內(nèi)存在很多高性能 CUDA 應(yīng)用程序中都起到了關(guān)鍵的作用 G80 和 GT200 的每一個 SM 都有 16 KB 的共享內(nèi)存 在 Fermi 的架構(gòu)中 每一個 SM 都有 64 KB 的共享內(nèi)存 這些內(nèi)存可以被配置成 48 KB 的共享內(nèi)存和 16 KB 的 L1 緩存 或者配 置成為 16 KB 的共享內(nèi)存和 48 KB 的 L1 緩存 對于已經(jīng)使用共享內(nèi)存的程序來說 可以提供 3 倍的共享內(nèi)存的支持 尤其是那些由于帶 寬引起的問題 對一些已經(jīng)使用了 shared memory 作為緩存的應(yīng)用程序來說 代碼可以簡 化為直接使用系統(tǒng)硬件提供的緩存 同時還可以使用 16KB 的 shared memory 來使線程進(jìn) 行交互 最好的情況就是一些原本就沒有使用 shared memory 的程序 直接利用 L1 緩存 可以使得 CUDA 程序運行需要更少的時間 得到更高的性能 Summary Table Second General Parallel Thread Execution ISA Fermi 是第一個支持并行線程處理 PTX 2 0 指令集的體系架構(gòu) PTX 是一個底層的虛擬 機和 ISA 架構(gòu) 來支持并行運算 在程序安裝的時候 PTX 指令就會被 GPU 的驅(qū)動程序翻 譯為機器碼 PTX 最主要的目標(biāo) 提供跨多卡 GPU 的穩(wěn)定的 ISA 指令 在編譯的時候使得程序達(dá)到 GPU 最高的性能 提供系統(tǒng)無關(guān)的 ISA 指令 可供 C C Fortran 或者其他語言使用 提供代碼分布式的 ISA 架構(gòu)給應(yīng)用程序和中間件開發(fā)者 提供通用的 ISA 架構(gòu) 來支持不同平臺上的代碼的優(yōu)化和轉(zhuǎn)譯 使得開發(fā) lib 和高性能的 kernel 函數(shù)更加的簡便 提供 scalable 的編程模式 可以使得程序支持不同數(shù)目 cores 的 GPU PTX 2 0 有一些很多新的特性 使得 GPU 在有更高的可編程性 更精確 和提供更高的性 能 這些包括 完整支持 IEEE 32bit 的單精度浮點數(shù) 統(tǒng)一的尋址支持變量和指針 新的 指令來支持 OpenCL 和 DirectCompute 最終剛要的是 PTX 2 0 對完整支持 C 做了特殊的 設(shè)計 Unified Address Space enables Full C Support 統(tǒng)一尋址完整支持統(tǒng)一尋址完整支持 C Fermi 和 PTX2 0ISA 實現(xiàn)了統(tǒng)一尋址空間 可以統(tǒng)一尋址 3 種不同的內(nèi)存地址 線程私有變 量 block 的共享內(nèi)存和全局內(nèi)存 來進(jìn)行存 取操作 在 PTX1 0 中 存 取指令需要指定 在這三種地址中那一個進(jìn)行尋址 程序可以在編譯的時候就知道在特定的那個地址進(jìn)行尋 址 這樣就很難完全滿足 C 和 C 的指針在編譯的時候指向不確定地址 而只有在運行的 時候才知道確切地址的情況 通過 PTX2 0 的統(tǒng)一尋址空間 讓三種地址空間通過唯一的連繼續(xù)的地址空間進(jìn)行尋址 單一的尋址空間進(jìn)行統(tǒng)一的存 取指令操作在這樣的地址空間上 代替了在三種空間上都 要進(jìn)行不同存 取的方法 40bit 位寬的可以支持 TB 的尋址空間 ISA 架構(gòu)可以提供 64bit 的位寬尋址空間 為將來的擴展提供支持 統(tǒng)一地址空間的實現(xiàn) 可以讓 Fermi 真正完全的支持 C 編程 在 C 中 所有的變量和 函數(shù)都在一個 object 中 通過指針進(jìn)行訪問 PTX2 0 就可以通過統(tǒng)一指針管理方式找到任 何內(nèi)存上的 object Fermi 提供的硬件尋址方式可以自動的把指針映射到正確的物理地址 Fermi 和 PTX2 0ISA 同樣提供 C 虛函數(shù)的支持 函數(shù)指針的支持 new 和 delete 的操作的 Optimized for OpenCL and Direct Compute OpenCL 和 DirectCompute 和 CUDA 的編程模型很相近 幾乎使用相同的線程 線程 block IEEE 32 bit Floating Point Precision 動態(tài)分配 object 和回收資源 C 的異常操作 try 和 catch 同樣被支持 block 組織的 grid 同步 同一個 block 里面共享內(nèi)存 全局內(nèi)存 還有院子操作 Fermi 第三代支持 CUDA 的架構(gòu) 很自然很好的優(yōu)化支持了這些 API 更特別的 Fermi 利用標(biāo)準(zhǔn) 的轉(zhuǎn)換方式 從硬件上支持 OpenCL 和 DirectCompute 的接口指令 可以讓圖形計算和通 用計算很簡單的操作在相同的數(shù)據(jù)上 PTX 2 0 ISA 同樣增加了對 DirectCompute 的指令 population count append 和 bit reverse 單精度的浮點數(shù)由硬件默認(rèn)的支持 包括四個 IEEE 754 2008 支持的標(biāo)準(zhǔn) 竟似 零 最 小值 最大值 在浮點數(shù)系統(tǒng)中 Subnormal 是處于最小值和最大值之間的數(shù) 在較早 像線性代數(shù) 一些科學(xué)計算的程序 都是兩個數(shù)相乘 然后加上第三個數(shù) 例如 D A x B C 以前的 GPU 架構(gòu)通常情況下都是利用乘加指令來完 Improved conditional performance through predication 快更容易執(zhí)行可以運行的部分 在 執(zhí)行 if else 的時候 SM 會計算每一條分支都會需要執(zhí)行的條件 增加一個可以滿足的條 的 GPU 架構(gòu)中 通常情況下把這一范圍的浮點數(shù)歸于 0 這樣一般都會損失精度或者讓程 序發(fā)生一些意想不到的錯誤 CPU 通常情況下都要通過額外的軟件方式來處理 一般需要 上千個的周期 Fermi 是通過硬件來處理 subnormal 浮點數(shù) 可以精確的計算小于 0 的浮 點數(shù)而沒有精度損失 通常情況下在 GPU 上完成的計算 成 MAD 可以讓兩個操作在一個指令周期內(nèi)完成 MAD 指令使用了分?jǐn)嗟某朔?然 后使用了取整的加法 Fermi 使用了更高精度的 FMA 指令 不但可以支持 32bit 的單精度 的操作 也滿足 64bit 雙精度的需求 GT200 只支持雙精度的 FMA 在這樣的精度保證 下面 更多的算法都可以受益 像渲染算法 一些迭代的數(shù)學(xué)算法 更快的除法和求平方 根的算法 在 PTX 2 0 ISA 中所有指令都增加了預(yù)處理 這樣可以更 件 硬件都會執(zhí)行那個分支 有了分支預(yù)測以后就可以更多的分支一起運行 比一條分支 一條的執(zhí)行會更有效果 Fermi 的架構(gòu)增加的條件判斷隱藏了分支運算中的 overhead Memory Subsystem Innovations NVIDIA Parallel DataCacheTM with Configurable L1 and Unified L2 Cache 決一部分程序的問 題 但是不能解決所有的問題 一些應(yīng)用程序天然的就需要 shared memory 有些應(yīng)用程 在 Fermi 的架構(gòu)中 每一個 SM 都包含 64KB 的高速的片上的 RAM 可以配置為 48KB 享內(nèi)存也 16KB 的 L1 緩存 也可以配置為 16KB 的共享內(nèi)存和 48KB 的 L1 緩存 當(dāng)使用 通過了解不同的成千上萬的應(yīng)用程序 我們發(fā)現(xiàn) shared memory 可以解 序需要 cache 有的既需要 shared memory 也需要 cache 優(yōu)化的內(nèi)存設(shè)計可以既提供 shared memory 也提供 cache 可以讓程序員根據(jù)自己的需求來做選擇 Fermi 的架構(gòu)可以 支持兩種需求 的共 48KB 的共享內(nèi)存的時候 程序可以動態(tài)的分配內(nèi)存 像 electrodynamic 的模擬 可以讓 程序有三倍性能的提升 有的程序訪問的地址不是預(yù)先分配的 48KB 的 L1 緩存就可以更 好的支持直接訪問 DRAM 的程序 兩種情況的配置 L1 緩存 都可以增加臨時寄存器的 使用 以避免溢出 以前 理操作 L2 緩存 和所有的 SM 都相通 L2 First GPU with ECC Memory Support Fermi 是第一款支持內(nèi)存錯誤檢查和修復(fù) ECC 的 GPU 架構(gòu) 在使用 GPU 做大數(shù)據(jù)量的 理和高性能的計算的時候 ECC 是有大量的需求 在醫(yī)療圖像處理和大型集群中 ECC 是 的 GPU 架構(gòu)都是直接把寄 存器分配到對應(yīng)的 DRAM 增加了訪問的延遲 通過 L1 緩存 更好的支持了臨 時寄存器的使用 Fermi 有 768KB 的統(tǒng)一的 L2 緩存 可以支持所有的 存取和紋 提供有效和高速的數(shù)據(jù)支 持 有些算法不能在運行 前就確定下來 像一些物 理問題 光線跟蹤 稀疏 矩陣乘法 尤其需要緩存 的支持 過濾器和轉(zhuǎn)換器 需要所有的 SM 都去讀取 相同數(shù)據(jù)的時候 緩存一 樣會有很大的幫助 處 特別有需要的特性 正常情況下的內(nèi)存位的存儲錯誤 都會引起軟件的錯誤 ECC 就是在上述錯誤沒有多系統(tǒng) 造成影響的情況下 用來檢查和糾正這樣的錯誤 由于這樣的錯誤會根據(jù)系統(tǒng)的增大線性 的增加 ECC 就成為大型集群中必不可少的需求 Fast Atomic Memory Operations 中做正確的讀寫操作 原 子操作包括 add min 比較和交換 讀 修改和寫操作都不用打斷其他的線程的運行 縮減 和并行的建立數(shù)據(jù)結(jié)構(gòu)中而不需要鎖定線程的執(zhí) 行 在 Fermi 中的大量的原子操作單元和 L2 緩存的使用 大大增強了 GPU 架構(gòu)中的原子操作 能力 在相同位置的原子操作 Fermi 的速度比 GT200 快 20 倍 連續(xù)的內(nèi)存段操作是 GT200 的 7 5 倍 上的特性 就是它兩層的分布式的線程調(diào)度機制 在片上的層面 全局 的分布式線程調(diào)度引擎分發(fā) block 到每一個 SM 上面 在 SM 層面 每一個 warp 分布式調(diào) Fermi 的寄存器 共享內(nèi)存 L1 緩存 L2 緩存和 DRAM 內(nèi)存都受到 ECC 保護 這樣的設(shè)計 部只是為了高性能的 GPU 應(yīng)用 也是為了增加系統(tǒng)的可靠性 原子操作在并行計算非常重要 它可以讓線程對共享的內(nèi)存結(jié)構(gòu) 原子操作大量的使用在并行存儲 GigaThreadTM Thread Scheduler 在 Fermi一個重要 度引擎按照 32 個線程為一個 warp 來讓線程執(zhí)行 第一個 GigaThread 線程調(diào)度引擎 在 G80 架構(gòu)中實現(xiàn)了 12288 個線程的實時的調(diào)度管理 Fermi 架構(gòu)不只是增強了原有的機制 式利用處理器的計算資源 Fermi 的 pipeline 經(jīng)過優(yōu)化設(shè)計 把 context 的切換時 間減少到了 10 20 毫秒 極大的優(yōu)化了上一代的 GPU 架構(gòu) 不只是性能的提高 這個設(shè)計 l 的應(yīng)用程序 例如讓程序在圖形和 PhysX 的應(yīng)用 序 流體和固體 如果是串行執(zhí)行 只能利用一半的線程處理器 Fermi 的架構(gòu)可以 讓同一個 CUDA context 的 kernel 都同時運行在同一個 GP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論