2011-02-17 70 views
1

對於這個問題的模糊性,我很抱歉。OpenCL bank衝突 - 刪除內存/破壞數據?

背景:

我試圖寫在OpenCL的形態學圖像處理功能。我有一個__local緩衝區,用於存儲每個像素的數據(每個像素由一個工作項目表示,尚未展開循環)。另外,由於我在測試早期,我只使用一個工作組(8x8像素圖像,因此我可以手動驗證結果)。

問題:

有當數據從一個,兩個,三個或甚至四個像素必須加入到另一個的像素緩衝器的場合。由於這些是相同工作組中的相鄰像素,我相信我會導致本地內存銀行衝突。沒關係,速度不是我的首要任務(但!)。但是,這些銀行衝突似乎正在丟失數據甚至破壞數據。我一直非常小心,不要溢出或過度運行緩衝區。

所以,我的第一個問題是:實際上,銀行衝突是否可能導致數據損壞和丟失? Opencl規範似乎表明該操作應該序列化,減慢帶寬 - 但沒有提及數據丟失。

我的第二個問題是:幫助! - 我能做些什麼?

任何指導將不勝感激 - 謝謝!

+0

只是爲了讓你知道,我有一個NVIDIA顯卡同樣的問題...看來共享內存的實現在於時機的把握問題非常挑剔且編譯器不能工作他們周圍,顯然。我還必須在循環中刪除一個分支並展開循環才能正確計算事物。而且無論如何都沒有分支和一些額外的虛擬計算就會變得更快;) – 2011-11-25 04:48:57

回答

0

也許nvidia白皮書Prefix Sum (Scan) with CUDA可以帶給你正確的軌道。這是關於all-prefix-sums algorithm,這is a good example of a computation that seems inherently sequential, but for which there is an efficient parallel algorithm.

all-prefix-sums operation轉數[3,4,1,2]的名單到它們的和:[0,3,7,8]

我知道這篇論文是關於CUDA的,但是我發現產生的內核與 非常相似,兩種技術都使用類似的概念。

我希望這篇論文可以幫助你。

乾杯