2013-07-08 59 views
1

我在GPU設備上創建了2個隊列,並且想要並行執行內核。這不需要在不同隊列中的內核之間設置事件,但是必須按順序執行同一隊列中的內核。另外,I創建了2個CPU線程,每個CPU線程控制1個隊列,並且CPU線程並行執行。現在似乎不同隊列之間的內核並不是並行執行的。所以有人可以給我一些建議嗎?opencl:同一設備上的不同隊列可以並行執行內核嗎?

感謝您的回答。以下是關於我的平臺的一些信息。 enter image description here

有關Driver enter image description here

鋨:Centos的5.X

回答

2

大多數的GPU不能夠在同一時間運行多個內核。這只是硬件限制,而不是軟件問題。您可以並行執行多個內核,但可以在多個GPU(即多個OpenCL設備)上執行。

無論如何,在您的場景中,無論如何,許多GPU都能夠重疊內存傳輸(CPU < => GPU)和內核執行。這取決於OpenCL驅動程序,但我看到AMD驅動程序重疊來自一個隊列的內存傳輸和另一個隊列的內核執行。

1

設備上可能只有一個計算單元,會一次執行一個內核。如果是這樣,內核可能必須由主機應用程序分區並交替排隊以允許其「並行」執行。對於CL_DEVICE_MAX_COMPUTE_UNITS參數,計算單元的數量由clGetDeviceInfo返回。

如果存在多個計算單元,則設備可以支持分區,如果設備參數CL_DEVICE_PARTITION_MAX_SUB_DEVICES的值大於1.在這種情況下,設備可以「拆分」爲多個子設備(例如兩個)使用clCreateSubDevices與單獨的命令隊列。每個子設備將獨立於(並且與其他子設備並行)地執行內核。

請注意,如果需要更優化的負載,則可能需要主機應用程序解決子設備的不平衡負載。

相關問題