2011-07-20 32 views
4

我在我的Ubuntu 10.10 64位系統上調試基於CUDA 4.0/Thrust的圖像重構代碼,並一直試圖弄清楚如何調試此運行時錯誤我有我的輸出圖像出現一些隨機「噪音」。我的代碼中沒有隨機數生成器輸出,所以我期望輸出在運行之間保持一致,即使它是錯誤的。然而,它不是...非確定性輸出的CUDA調試程序

我只是想知道是否有任何人有一個調試CUDA運行時錯誤,如這些一般程序。我在我的cuda內核中沒有使用任何共享內存。我努力避免任何涉及全球記憶的競賽狀況,但我可能錯過了一些東西。

我試過使用gpu ocelot,但它在識別我的一些CUDA和CUSPARSE函數調用時遇到問題。

此外,我的代碼一般工作。只是當我改變這一個設置時,我得到了這些非確定性結果。我已經檢查了與該設置相關的所有代碼,但我無法弄清楚我做錯了什麼。如果我可以將它提煉成我可以在這裏發佈的東西,我可能會這樣做,但是在這裏發佈這裏太複雜了。

+0

完全脫離主題,你有沒有設法讓豹貓與Thrust合作,如果是的話,怎麼樣? :-) –

+0

還沒有,但我會告訴你,如果我這樣做。 – Fares

+0

太好了,謝謝,我也會這麼做! –

回答

2

你確定所有的內核都有正確的塊大小/餘數處理嗎?當我們在數組末尾沒有處理數據元素時,發生了一個我們已經看到非確定性結果的地方。

我們的內核最初是用於已知爲256個元素的整數倍的數據。所以我們使用256的塊大小,並做了簡單的劃分以獲得塊的數量。當數據被更改爲任何長度時,剩餘的255個或更少的元素從未得到處理。輸出中的那些點隨機數據。

+0

感謝您的反饋!事實證明,它確實與我的塊大小有關,正如你所建議的那樣。我已經爲我想要處理的數據分配了足夠多的塊,只要您檢查並確保只處理適合數據的索引範圍內的線程即可。原來我使用的是錯誤的界限。修復它解決了這個問題:) – Fares

+0

@Fares - 是的,通常有兩種方式來處理這種情況下的「剩餘」數據。很多例子都展示了你的方式。我們發現第二次運行內核的時間通常稍微快一點,只剩下一個線程的剩餘數量。 –