2013-10-28 49 views
1

我目前正在研究嵌入Vivante GC2100 GPU的i.MX6.Q平臺。在Vivante提供的(非常簡短的)技術規範中,它說我有4個着色器核心,如果我是矢量化的,我會得到16個(http://www.vivantecorp.com/index.php/en/technology/gpgpu.html)。OpenCL計算單元信息

當我直接恢復我的GPU,它說我有4個計算單元和優選的載體寬度爲4

這是否意味着,如果我向量化或GPU會自動檢測不OpenCL的相關信息? 它會始終正確地使用他所能夠使用的所有內核(在我的程序的當前版本中我沒有開發矢量化),並且有辦法確定它嗎?

如果我不使用對齊的數據,我是否還需要矢量化才能使GPU功能受益,還是我可以繼續使用我的GPU而不進行矢量化?我目前正在修改OpenCL的i.MX6.Q,所以我將矢量化我自己能夠看到的所有內容,但是如果你們知道一些關於它的理論,我會接受它!

巴蒂斯特

回答

2

這取決於你的內核是否爲你使用特定的OpenCL編譯向量化。如果你保持你的數據解壓縮(所有單浮點數),那麼你的編譯器可能能夠執行work-item vectorization。實際上,由於這個原因,CUDA並不像OpenCL那樣實現矢量類型或操作。我建議不要手動打包,因爲它會讓編譯器自動向量化變得更加複雜。

GPU不檢測或「使用」矢量化 - 編譯器會根據您的邏輯生成正確的使用矢量化指令的目標代碼。至於發現你的內核是否是矢量化的,你必須參考你的實現的文檔/工具。至於使用所有核心,這取決於全球工作。如果GPU上的所有SM都沒有提交足夠的工作,那麼它將會被利用不足。

另外,請注意,大多數OpenCL實現將優先(並分配)對齊的數據,除非您專門阻止它的打包屬性。

+0

好的。我懂了。事情是我的程序由多個操作組成,可以看作是兩個FIR模式(檢測像素周圍區域的最小/最大值並保存),IIR模式(線程需要先前的計算才能開始執行)以及經典的gpu操作(數據對齊)。所以我看到我可以使用矢量化的地方,但我認爲我有內核,我無法做到這一點。我會手動編程它我認爲我不認爲我的編譯器能夠看到它並進行矢量化(特別是對於FIR/IIR操作)。 – baptiste

+0

難道你不能將它們作爲三個獨立的內核而不是一個來實現嗎? – Ani

+0

這就是我所做的:) – baptiste