簡體   English   中英

CUDA 內核可以絕對並行運行,還是需要上下文切換?

[英]Can CUDA cores run things absolutely parallel or do they need context switching?

CUDA INT32 核心可以完全並行處理兩個不同的 integer 指令,而無需上下文切換嗎? 我知道這在 CPU 上是不可能的,但在 NVIDIA GPU 上是不可能的? 我知道 SM 可以運行扭曲,如果核心必須等待一些信息,那么它會從調度單元獲取另一個線程。

我知道這在 CPU 上是不可能的,但在 NVIDIA GPU 上是不可能的?

這種斷言在現代主流 CPU 上是錯誤的(例如,從 Intel Skylake 或 AMD Zen 2 開始,幾乎所有 x86-64 處理器至少十年以來)。 實際上,現代 x86-64 Intel/AMD 處理器通常可以並行計算 2 個(256 AVX)SIMD 向量,因為通常有 2 個 SIMD 單元。 像英特爾 Skylake 這樣的處理器也有 4 個 ALU 單元,能夠在每個周期並行計算 4 種基本算術運算(例如,加法、減法和異或)。 像除法這樣的一些指令要昂貴得多,並且盡管流水線很好,但不能在這種架構上並行運行。 指令可以來自相同邏輯核心上的相同線程,或者可能來自調度在 2 個邏輯核心上的 2 個線程(可能有 2 個不同的進程),而無需任何上下文切換。 請注意,最近的高端 ARM 處理器也可以做到這一點(甚至一些移動處理器)。

CUDA INT32 核心可以完全並行處理兩個不同的 integer 指令,而無需上下文切換嗎?

NVIDIA GPU 以SIMT (單指令多線程)方式執行稱為 warp 的線程組。 因此,1 條指令並行操作 32 個項目(盡管從理論上講,硬件可以自由地不完全並行地執行此操作)。 一個 kernel 執行基本上包含許多塊並且塊被調度到 SM。 一個 SM 可以同時對許多塊進行操作,因此有大量可用的並行性。

特定的 GPU 是否可以並行執行兩個 INT32 扭曲取決於目標架構,而不是 CUDA 本身。 在現代 Nvidia GPU 上,每個 SM 可以分成多個分區,每個分區可以獨立於其他分區執行塊上的指令。 例如,AFAIK,在 Pascal GP104 上,有 20 個 SM,每個 SM 有 4 個分區,能夠運行 SIMD 指令,同時在 1 個 warp(32 個項目)上運行。 在實踐中,在較新的架構上事情可能會更復雜一些。 您可以在此處獲得更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM