2016-09-14 38 views
4

我相當肯定,一個warp只在CUDA中定義。但也許我錯了。什麼是OpenCL的變形?什麼是OpenCL環境下的變形?

它與工作組不一樣,是嗎? 高度讚賞任何相關反饋。謝謝!

+0

未使用太多OpenCL,但我從來沒有聽說過這個術語。 – nbro

+0

nvidia中的warp與amd中的wavefront類似。例如,一個新的amd gpu的每個計算單元都有64個內核,但是當您給它256個寬度的worgroup時,則需要4個波形來完成該256線程工作組。如果一個內核使用很少的內存,它可以讓一個AMD計算單元發出40個波前。計算單位需要4個時鐘才能發出4個波前。但完成可能需要更長的時間。 –

+1

OpenCL沒有定義「warp」。然而,在OpenCL 2.x中,引入了*子組*,其目的*等同於NVIDIA稱之爲「warp」的目的。 –

回答

6

它沒有在OpenCL標準中定義。一個warp是由硬件執行的一個線程(CUDA線程並不是真正的線程,並且映射到一個warp上作爲單獨的SIMD元素,並帶有一些聰明的硬件/軟件映射)。它是工作項目的集合,在工作組中可以有多個經紗。

OpenCL子組被設計爲與硬件線程兼容,因此能夠表示OpenCL內核中的變形,但完全取決於NVIDIA決定是否實施子組以及當然是OpenCL子組不能暴露NVIDIA可以爲其扭曲的每一個功能,因爲它是一種標準,而NVIDIA可以在自己的設備上做任何他們喜歡的事情。

+0

也許我應該閱讀硬件線程?我只熟悉操作系統中的軟件線程。 CUDA線程(上下文:每個塊的多個線程)是指硬件線程,軟件線程還是其自己的線程想法? –

+0

所以一個warp是一個硬件線程。 CUDA線程不是硬件線程。一個warp是一個工作項目的集合。一個工作組可以被定義爲(1)一組工作項目,或(2)一組經紗。它是否正確?如果是這樣,可以肯定地說有一個工作項目層次結構:工作組是一個經線集合是工作項目的集合。它是否正確?或者至少這是考慮它的一個好方法嗎? –

+0

或者只是考慮一下就好:工作組是工作項目的集合。而一個扭曲恰好也是一個工作項目的集合。但是,經編和工作組有不同的用途。這是一個更好的方式來思考它嗎? (我希望我能很好地表達我目前的理解/困惑) –