在使用CUDA shared memory常會使用__syncthread()來避免資料不同步處理造成的破壞。問題是一般人無法判定何時會產生這個問題,所以會先加以做為保險。
可是加了之後確實會影響執行速度,Bee這邊測到的就差了四倍多。
所以要適當加入__syncthread()才是合理。
剛好之前bee使用CPU及GPU同時開發程式的方法,因為一邊為single-thread另一個為multi-thread,所以可以保證single-thread是正確的。剛好可以比對結果。
若是不加__syncthread()會使結果比對產生錯誤,那就要加。沒有錯誤就照CPU版本的直接移入GPU版本。
這種情況玩個幾次,基本上就可以知道何時要加,何時不要加。
要等下一代nvidia 顯示卡內建那個函數....
回覆刪除[版主回覆05/04/2010 09:22:04]這個函式在CUDA2.0就有了,不用等到下一代。
只是從單核轉換到多核時,感覺還沒有抓到前,提供一個可以驗證的方法。