2016-02-24 73 views
0

我是OpenCl中的新成員。我想知道你能否回答我下面的問題。異步數據處理

我有一個數據包的隊列,其行爲像路由器隊列。數據包到達,存儲在隊列中,然後由路由器處理。最後,它們被插入到出隊隊列中。 我正在嘗試使用OpenCl同時處理數據包。例如,我知道我們可以使用緩衝區在主機和OpenCl設備之間傳輸數據。我們用輸入/輸出數據加載緩衝區。然後,我們使用這些輸入/輸出緩衝區來設置內核參數。當內核運行完成後,我們從OpenCl設備讀取數據。

我的問題是,如何獨立於其他數據包寫入/讀取每個單獨數據包的緩衝區?換句話說,假設一個數據包到達,路由器需要在計算設備上處理它(例如,GPU上的核心#1)。然後另一個數據包到達。路由器需要在不同的計算設備上處理第二個分組(例如,GPU上的核心#2)。這兩個數據包的處理實際上是同時發生的,但是是異步的。這可以在OpenCl中實現嗎?

感謝您的提前回復。 Regards, Alireza。

回答

0

我建議使用OpenCL緩衝區的環形緩衝區來保存傳入的數據,並且在您填充內核時將它們排入內核以處理它們。如果內核具有並行數據,你只能獲得良好的性能。甚至可以在同一時間在多個內核上工作的GPU數量很少(例如2)。真正的力量是內核中的並行計算,否則你的硬件將空閒。

要使內核並行運行,需要使用單獨的命令隊列,因爲使用單個命令隊列意味着串行執行(除非它是亂序命令隊列,但這些命令隊列並不廣泛支持)。

+0

謝謝Dithermaster。 –