2015-10-22 27 views
0

我有一個在內核中編碼的迭代過程。該過程涉及更新全局緩衝區的不同位置。跨工作組讀取迭代內核的好方法是什麼?

因爲我不能在不同的工作組之間同步,所以我能想到的唯一策略是爲每次迭代排隊內核調用,並檢查主機的結束條件(隊列迭代,隊列緩衝區讀取以檢查條件,隊列迭代,如果需要,等等......)

有沒有更好的策略可以遵循?

+0

這是獲得設備範圍同步的常用策略,而據我所知,這是唯一正確的同步策略。無論如何,內核調用非常便宜。但是請張貼你的代碼(或者至少是僞代碼)來使你的問題更加明確。 –

回答

2

一個非常好的策略(已經證明自己)是使用額外的內存,一種雙緩衝方法。它速度快,易於實施。

您從給定位置(buffer1)讀取每個迭代,並寫入另一個(buffer2)。 內核迭代完成後,交換buffer1和buffer2。如果你需要它,「清理」將要接收數據的緩衝區(這次是buffer1)。並繼續。

爲了檢查來自CPU的結果,可以對async readBuffer進行排隊。所以你正在讀取buffer1的內容,而內核運行在相同的數據上。確保GPU始終處於繁忙狀態。

相關問題