2012-03-11 56 views
0

是否有可能在多核CPU設備上實現與OpenCL中多個異構設備(如GPU和CPU)相同的並行性?OpenCL在1個CPU設備上的並行性

我有一個英特爾i5並希望優化我的代碼。當我查詢設備的平臺時,我只能得到一個返回的設備:CPU。我想知道如何使用它來優化我的代碼。

此外,如果我爲此設備使用單個命令隊列,應用程序是否會自動將內核分配給不同的計算設備,還是必須由編程人員手動完成?

回答

0

簡答:是的,它會並行運行,不需要手動執行。

龍答:

而且,如果我用一個單一的命令隊列此設備,將應用程序會自動分配給內核不同的計算設備[...]

要麼你需要修改你的OpenCL詞彙表,否則我不理解你的問題。你只有一個設備和核心!=設備!

一個CPU,不管它有多少個核心,都是一個設備。 GPU也是如此:一個擁有數百個內核的GPU只有一個設備。您通過隊列和設備的驅動程序將作業發送到設備。你的工作可以(也將會)分解成工作項目。然後,一些(多少取決於設備/驅動程序)工作項目並行執行。在GPU上以及在CPU上,一個工作項目由一個內核執行。 (這可能不完全正確,但它是一個非常有用的抽象。)

如果您在一個隊列中插入多個內核(不通過等待事件連接它們),驅動程序可能並行運行它們。

OpenCL的目標是允許您並行計算工作項,無論它是並行使用多個設備的內核還是僅使用一個設備內核。

如果這會把你搞糊塗,看這些真正的好(長)視頻:http://macresearch.org/opencl

0

你是如何確定OpenCL設備計數?我有一臺Intel I3筆記本電腦,可以給我2個OpenCL計算單元?它有2個核心。

根據英特爾規範,I5-2300有4個內核並支持4個線程。它不是超線程的。我期望OpenCL調用查詢#設備給你的計數4.

+0

閱讀上面的答案,CPU是一個設備,就像GPU是一個設備一樣,無論它們具有多少核心。 – eudoxos 2012-03-16 10:55:34

0

cpu設備能達到與gpu相同的並行性水平嗎?幾乎總是不。

一個GPU中的計算單元數量幾乎總是多於一個CPU。例如,50美元可以爲您帶來10臺計算單元的顯卡(Radeon 6450)。新蛋上最便宜​​的8核心cpus價格爲189美元(臺式機CPU)和269美元(服務器)。

由於時鐘速度,cpu的計算單元運行得更快,並且執行分支代碼比gpu好得多。如果你的工作負載有很多條件語句,你需要一個CPU。 一個gpu將對許多數據執行相同的指令。 6450 gpu每個計算單元有16個「流處理器」來實現這一點。當你必須多次執行相同的(小/中)任務時,Gpus非常棒。矩陣乘法,n-boy計算,簡化操作和一些排序算法在GPU /加速器硬件上運行得比在CPU上好得多。

幾個星期前,我回答了一個類似的問題,提供了更多細節。 (This one)

回到關於「相同級別的並行性」的問題 - cpu不具有與gpus相同的並行級別,除非gpu在執行實際內核時執行。

在你的i5系統上,只有一個cpu設備。這代表整個CPU。當您查詢計算單元的數量時,opencl將返回您擁有的核心數量。如果你想使用所有內核,你只需要在你的設備上運行內核,而opencl會爲你使用所有的計算單元(內核)。