第三篇:GPU 並行編程的運算架構


前言

      GPU 是如何實現並行的?它實現的方式較之 CPU 的多線程又有什么分別?

      本文將做一個較為細致的分析。

GPU 並行計算架構

      GPU 並行編程的核心在於線程,一個線程就是程序中的一個單一指令流,一個個線程組合在一起就構成了並行計算網格,成為了並行的程序,下圖展示了多核 CPU 與 GPU 的計算網格:

  

      二者的區別將在后面探討。

      下圖展示了一個更為細致的 GPU 並行計算架構:

      該圖表示,計算網格由多個流處理器構成,每個流處理器又包含 n 多塊。

      下面進一步對 GPU 計算網格中的一些概念做細致分析。

      1. 線程

      線程是 GPU 運算中的最小執行單元,線程能夠完成一個最小的邏輯意義操作。

      2. 線程束

      線程束是 GPU 中的基本執行單元。GPU 是一組 SIMD 處理器的集合,因此每個線程束中的線程是同時執行的。這個概念是為了隱藏對顯存進行讀寫帶來的延遲所引入的。

      目前英偉達公司的顯卡此值為 32,不可改動,也不應該對其進行改動。

      3. 線程塊

      一個線程塊包含多個線程束,在一個線程塊內的所有線程,都可以使用共享內存來進行通信、同步。但一個線程塊能擁有的最大線程/線程束,和顯卡型號有關。

      4. 流多處理器

      流多處理器就相當於 CPU 中的核,負責線程束的執行。同一時刻只能有一個線程束執行。

      5. 流處理器

      流處理器只負責執行線程,結構相對簡單。

GPU 和 CPU 在並行計算方面的不同

      1. 任務數量

      CPU 適合比較少量的任務,而 GPU 則適合做大量的任務。

      2. 任務復雜度

      CPU 適合邏輯比較復雜的任務,而 GPU 則適合處理邏輯上相對簡單的任務 (可用比較少的語句描述)。

      3. 線程支持方式

      由於 CPU 中線程的寄存器組是公用的,因此CPU 在切換線程的時候,會將線程的寄存器內容保存在 RAM 中,當線程再次啟動的時候則會從 RAM 中恢復數據到寄存器。

      而 GPU 中的各個線程則各自擁有其自身的寄存器組,因此其切換速度會快上不少。

      當然,對於單個的線程處理能力來說,CPU 更強。

      4. 處理器分配原則

      CPU 一般是基於時間片輪轉調度原則,每個線程固定地執行單個時間片;而 GPU 的策略則是在線程阻塞的時候迅速換入換出。

      5. 數據吞吐量

      GPU 中的每個流處理器就相當於一個 CPU 核,一個 GPU 一般具有 16 個流處理器,而且每個流處理器一次能計算 32 個數。

總結

1. 了解 CUDA 的線程模型是 GPU 並行編程的基礎。

2. 根據待處理數據類型來組織線程結構是非常非常重要的,而這並不輕松,尤其是當出現了需要共享的數據時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM