2014-10-07 214 views
0

我有幾個關於cuda的問題。以下是一本關於並行編程的書籍。它顯示線程是如何在裝置分配用於兩個向量的乘積中的每個0 threadblock長度8192如何在單個塊內執行cuda線程?

enter image description here

1)的有15個SIMD線程。這15個線程在特定時間並行執行還是隻執行一個線程?

2)本例中每個塊包含512個元素。這個數字取決於硬件還是程序員的決定?

回答

0

從你的例證,似乎:

  • 網格由16個線程塊,編號從0到15
  • 每塊由16個「SIMD線程」組成,編號從0到15
  • 每個「SIMD線程」計算32個向量元素的乘積。

它不一定是顯而易見的插圖是否 「SIMD線程」 是指,在CUDA(OpenCL的)的說法:的

  • 經線波前)32 線程工作項目

或:

  • 螺紋工作項)上32個元件

我將假定前(「SIMD線程」 =經紗/波前)的工作,因爲它是一個更合理的假設性能 - 明智的,但後者在技術上不是不正確的,它只是次優設計(至少在目前的硬件上)。在threadblock 0


1)有15個SIMD線程。這15個線程在特定時間並行執行還是隻執行一個線程?

如上所述,有16經紗(編號從0到15,這使得16)在螺紋塊0,它們中的每製成32個線程。這些線程同時並行地以鎖步執行。根據底層硬件的功能,這些扭曲是相互獨立執行的,順序或並行執行。例如,硬件可能能夠安排多個經紗同時執行。

2)在這個例子中,每個塊包含512個元素。這個數字取決於硬件還是程序員的決定?

在這種情況下,這只是程序員的決定,但在某些情況下,硬件限制也可能迫使程序員改變設計。例如,塊可以處理的最大線程數,並且網格可以處理的最大塊數。

2

1) 在這個特定的例子中,每個線程似乎被分配到向量中的32個元素。由單個線程執行的代碼按順序執行。

2) 線程塊的大小取決於程序員。但是,考慮到執行代碼的硬件,線程塊的數量和大小會受到限制。有關更多信息,請參閱本精心製作的答案: Understanding CUDA grid dimensions, block dimensions and threads organization (simple explanation)

+0

我不明白第一個問題的答案 – DesirePRG 2014-10-07 09:52:44

+0

今天晚些時候我可以給你一個代碼示例,在手機上編寫代碼是很乏味的。 :) – Jesse 2014-10-07 10:20:27

+0

檢查Cicada的答案,它比這個更好。 – Jesse 2014-10-07 20:48:13