GPU Flynn概念

Johnny Chang
Jul 26, 2023

都不是SISD/SIMD/MISD/MIMD,GPU是SIMT?

先複習SIMD/MIMD/SISD/MISD

  1. SIMD(Single Instruction, Multiple Data):SIMD 是一種並行計算模型,其中一個指令同時應用於多個數據元素。換句話說,多個處理器(或處理器中的多個單元)同時執行相同的指令,但操作的是不同的數據。這種模型對於數組和向量運算非常有效,例如在圖像處理、數字信號處理等領域。
  2. MIMD(Multiple Instruction, Multiple Data):MIMD 是一種並行計算模型,其中多個處理器(或處理器中的多個單元)可以同時執行不同的指令,操作不同的數據。這種模型通常應用於需要獨立執行多個任務或處理多個不相關數據的場景。每個處理器可以獨立地執行不同的指令流程,並進行不同的計算。
  3. SISD(Single Instruction, Single Data):SISD 是傳統的、串行計算模型,其中每個處理器執行單個指令,處理單個數據。這是傳統的計算機架構,其中一個處理器按照順序執行一個指令流程,逐步處理數據。這種模型在單個任務或處理序列數據時適用。
  4. MISD(Multiple Instruction, Single Data):MISD 是一種並行計算模型,其中多個處理器(或處理器中的多個單元)同時執行不同的指令,但操作的是相同的數據。這種模型相對不常見,因為它對於同時執行不同指令的處理器而言在實際應用中比較困難。MISD 模型可能在某些冗餘或錯誤檢測應用中使用,其中多個獨立的處理器應用不同的算法來處理相同的數據以進行檢測。

現實中的各個架構

  1. SIMD: 現在ARM Cortex A中的Neon就是可以做vector運算的SIMD。
  2. MIMD: 多核心的ARM Cortex A中的Neon。
  3. SISD: ARM 的一般指令集。
  4. MISD: 未見於現實架構中。

那現今GPU到底是什麼架構: SIMT

SIMT 代表的是 Single Instruction, Multiple Threads(單指令,多線程)。

SIMT 是一種計算模型,通常應用於圖形處理器(GPU)和一些特定的加速器架構,例如 NVIDIA 的 CUDA。在 SIMT 模型中,多個執行緒同時執行相同的指令,但操作不同的數據。這種模型類似於 SIMD(Single Instruction, Multiple Data),但有一些重要的區別。

在 SIMT 中,多個執行緒被組織成一個執行緒組(thread group),每個執行緒都可以獨立地操作不同的數據。這些執行緒通常同時執行相同的指令,但使用不同的數據來進行計算。這種設計可以實現更高效的並行計算,尤其是對於需要進行大量數據並行處理的應用,如圖形渲染、深度學習和科學計算。

SIMT遇到Branching

在 SIMT 模型中,分支預測是用於猜測分支指令的結果,以便在多個執行緒中同時執行預測的結果。分支預測的目的是最大程度地保持執行緒的並行性,以提高整體效能。

當分支預測失敗時,SIMT 處理器會將執行緒組中的所有執行緒回溯到分支錯誤發生的位置,並根據正確的分支結果重新執行指令。這樣可以確保所有執行緒最終都執行正確的指令路徑。

需要注意的是,分支錯誤恢復操作會引入一些開銷,因為它需要撤消部分已經執行的指令並重新執行。因此,減少分支預測失敗的次數對於提高 SIMT 的效能非常重要。較高的分支預測準確性可以減少分支錯誤恢復的次數,從而提高整體的執行效率。

總結來說,SIMT 使用分支預測技術來猜測分支的結果,並同時執行多個可能的結果。當分支預測失敗時,SIMT 處理器需要進行分支錯誤恢復,撤消錯誤的指令並重新執行正確的指令路徑。這樣可以確保所有執行緒最終都執行正確的結果。

SIMT 缺點

基本上跟multi-thread的缺點類似

  1. 資源競爭:在SIMT架構中,多個線程同時執行相同的指令,但處理不同的數據。這可能導致資源競爭,特別是當多個線程訪問相同的記憶體位置時。如果未妥善處理這種競爭,可能會導致效能下降或不正確的結果。
  2. 分支效率:SIMT架構中的所有線程都執行相同的指令,即使它們的分支條件不同。當某個線程需要進行條件分支時,其他線程也會執行相同的分支,但並不需要該分支的計算。這種情況稱為”分支效率”問題,會浪費一些計算資源。
  3. 記憶體存取:GPU的記憶體系統通常是其性能瓶頸之一。在SIMT架構中,多個線程同時訪問記憶體,可能導致記憶體存取的壓力增加。儘管GPU提供了高帶寬的記憶體,但當多個線程同時需要大量數據時,仍可能出現效能瓶頸。
  4. 同步和通訊:在某些情況下,不同線程之間需要同步或通訊,以確保計算的正確性。在SIMT架構中,進行同步和通訊可能需要額外的指令和處理,這可能會影響性能。

--

--