我有幾個關於cuda的問題。以下是一本關於並行編程的書籍。它顯示線程是如何在裝置分配用於兩個向量的乘積中的每個0 threadblock長度8192如何在單個塊內執行cuda線程?
1)的有15個SIMD線程。這15個線程在特定時間並行執行還是隻執行一個線程?
2)本例中每個塊包含512個元素。這個數字取決於硬件還是程序員的決定?
我有幾個關於cuda的問題。以下是一本關於並行編程的書籍。它顯示線程是如何在裝置分配用於兩個向量的乘積中的每個0 threadblock長度8192如何在單個塊內執行cuda線程?
1)的有15個SIMD線程。這15個線程在特定時間並行執行還是隻執行一個線程?
2)本例中每個塊包含512個元素。這個數字取決於硬件還是程序員的決定?
從你的例證,似乎:
它不一定是顯而易見的插圖是否 「SIMD線程」 是指,在CUDA(OpenCL的)的說法:的
或:
我將假定前(「SIMD線程」 =經紗/波前)的工作,因爲它是一個更合理的假設性能 - 明智的,但後者在技術上不是不正確的,它只是次優設計(至少在目前的硬件上)。在threadblock 0
1)有15個SIMD線程。這15個線程在特定時間並行執行還是隻執行一個線程?
如上所述,有16經紗(編號從0到15,這使得16)在螺紋塊0,它們中的每製成32個線程。這些線程同時並行地以鎖步執行。根據底層硬件的功能,這些扭曲是相互獨立執行的,順序或並行執行。例如,硬件可能能夠安排多個經紗同時執行。
2)在這個例子中,每個塊包含512個元素。這個數字取決於硬件還是程序員的決定?
在這種情況下,這只是程序員的決定,但在某些情況下,硬件限制也可能迫使程序員改變設計。例如,塊可以處理的最大線程數,並且網格可以處理的最大塊數。
1) 在這個特定的例子中,每個線程似乎被分配到向量中的32個元素。由單個線程執行的代碼按順序執行。
2) 線程塊的大小取決於程序員。但是,考慮到執行代碼的硬件,線程塊的數量和大小會受到限制。有關更多信息,請參閱本精心製作的答案: Understanding CUDA grid dimensions, block dimensions and threads organization (simple explanation)
我不明白第一個問題的答案 – DesirePRG 2014-10-07 09:52:44
今天晚些時候我可以給你一個代碼示例,在手機上編寫代碼是很乏味的。 :) – Jesse 2014-10-07 10:20:27
檢查Cicada的答案,它比這個更好。 – Jesse 2014-10-07 20:48:13