2012-08-22 71 views
1

我遇到了OpenCL內核的一個奇怪的錯誤。基本上它是雙向排序升級到N!= pow of 2.我所做的是,如果順序正確地命令,我檢查主機,並且讓我在這裏得到的答案不是。OpenCL主機同步要求

現在這個bug很難追蹤,因爲它是隨機發生的。我對每次以相同方式生成的許多不同序列進行排序,只發生一個序列沒有排序,然後是另一個序列。然而,高百分比的輸出是正確的,並且我的主機在for循環中的實現正確地排序相同的輸入。最有趣的是,當我繼續輸入並在設備上運行一次時,它突然排序正確。

我想出了這個可能是競爭條件的想法,因爲它的行爲就像那樣。然而,我沒有這樣的東西在設備代碼的地方,所以只有可能性是主機。我有順序隊列,我的讀寫操作被阻塞,所以應該沒有問題,但是在執行內核後我沒有同步點。

需要這樣的同步嗎? OpenCL爲有序隊列保證什麼?內核在同一塊內存上完成其所有操作之前,我可能會讀取嗎?

這個隨機發生的唯一的另一個想法是設備中的內存錯誤,但這是我接受的最後一個選項,所以我也歡迎一些其他的想法,比如什麼時候用OpenCL獲得隨機結果/錯誤。

回答

1

根據規範,如果你有一個有序隊列,你的內核和內存讀/寫將按照它們排隊的順序完成:請參閱clCreateCommandQueue here http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/

如果您想100%確定是這種情況,您可以在讀取內存之前排隊。