• 沒有找到結果。

研究方法與設計

4.2 圖形處理器的限制

程式在執行時, 受限於軟體設計與硬體架構,通常難以發揮最大運算效能 ,而圖形 處理器在執行上也有此問題 。 以下分兩部分討論圖形處理器對最大計算量的限制 ,分別 為計算效率限制以及記憶體間傳輸時間與記憶體空間限制 。 由於各個圖形處理器的限制 不同,以本研究所使用的圖形處理器 Teala C1060如表4.1為例說明 。

4.2.1 計算效率限制

在表4.1,對計算效率最有影響的是一個 warp32thread 組成 。其原因為設 計者只能在程式中宣告 threadblock 的使用個數 ,但硬體執行卻是以 warp 為單位, 並分成兩次執行,每次執行half-warp 個數的運算 。 因此,呼叫 thread計算資料的個數 最好為 32或 16的倍數,以免在硬體執行上造成運算資源浪費 。

程式於硬體中執行時會發生延遲,其中以存取記憶體的延遲最為嚴重,因此圖形處 理器以文本切換的方式隱藏延遲以增進計算效率 。 在表4.1,與隱藏延遲有關的參數為 一個多核心處理器內最多可有 32warp 或者 8block 。 每個 block 皆由數個 warp 組成,一個 block 最多只能擁有 16個 warp , block 內的 warp 數過少將無法有效隱藏 延遲 。 然而, block 內的 warp 數不是 32的倍數時 ,將無法塞滿整個多核心處理器可以 切換的文本個數,因此 ,在程式設計上盡量讓一個多核心處理器放入最大數量的 warp達 到隱藏延遲的效果, 避免硬體將時間花在等待上 。

程式撰寫上以 thread為單位,但是執行上以 warp 為單位 ,為了有效隱藏延遲 ,必 須注意一個多核心處理器內所放入的blockwarp 個數,因此一個多核心處理器中的 計算效率將受到以下三點的數量限制:

• 每個warpthread 的數量是否恰為 1632的倍數,或者接近32的倍數

• 一個多核心處理器放入的 block 數量

• 一個多核心處理器放入的 warp 數量

4.2.2 記憶體間傳輸時間與記憶體空間限制

在各種記憶體的傳輸上,由於圖形處理器的運算為多核心處理器內的處理器負責, 因此以處理器的角度來討論各種記憶體溝通的時間 。 在存取上的延遲與各記憶體頻寬為:

• 全域記憶體:延遲400600clock ,頻寬為100GB/s

• 共享記憶體:延遲4到6clock ,頻寬為200GB/s

• 暫存器: 即時

• 本地記憶體 :延遲400600clock ,頻寬為100GB/s

由於全域記憶體和本地記憶體的延遲都非常高,因此 ,經常存取的資料可以先放到共享 記憶體或者暫存器中,以減少不必要的時間花費 。

當中央處理器呼叫圖形處理器執行運算時 , 會先把需要的資料放入圖形處理器內的 全域記憶體,因此 ,全域記憶體的大小限制了一次圖形處理器所能運算的最大量 。 運算 時,為了減少記憶體傳輸的延遲時間,各個多核心處理器會將資料從全域記憶體搬至共 享記憶體,但是共享記憶體的空間又比全域記憶體少,再次限制多核心處理器一次可計 算的量 。 而多核心處理器內的處理器擁有自己的暫存器,即時存取但空間更少,又限制 了處理器一次可以計算的量 。 當依附於各種處理器上的快取空間不夠時, 只能減少一次 可行的運算資料量或者將資料放入空間更大但延遲時間更長的記憶體中 。 因此圖形處理 器的最大計算量受限於以下三種記憶體空間限制:

• 全域記憶體大小

• 共享記憶體大小

• 單一處理暫存器大小

以表4.1的記憶體空間數值舉例說明,若以一顆多核心處理器可以使用的全部thread1024個來計算,單一 thread 可以使用的暫存器為16個 、 共享記憶體空間 16bytes、 全域記憶體空間約 137KBytes ,但在程式執行時,程式碼文本會放在共享記憶體中,此 一設計將減少共享記憶體的空間 。 而程式內使用到的變數會放置於暫存器內 ,但暫存器 數量有限,勢必存到共享記憶體內,因此更進一步地減少共享記憶體可使用的空間 。 過 小的記憶體空間意味著難以使用全部的 thread 進行計算 ,但是過少的 thread 代表計算 效能的低落 。 如何讓thread個數和記憶體存取之間取得平衡, 將是得到最大運算效能的 關鍵 。

相關文件