1
Q
優化線程同步檢查
A
回答
2
// returns true if predicate is true for all threads in a block
__device__ bool unanimous(bool predicate) { ... }
__device__ bool all_the_same(unsigned char* bytes, unsigned char value, int n) {
return unanimous(bytes[threadIdx.x] == value);
}
unanimous()
的實現取決於硬件的計算能力。對於計算能力2.0或更高版本的設備,實在是小巫見大巫:
__device__ bool unanimous(bool predicate) { return __syncthreads_and(predicate); }
對於計算能力1.0和1.1的設備,你將需要實現和減少(讀者練習,因爲它是有據可查)。對於計算能力1.3的特殊情況,您可以使用CUDA頭文件中提供的內部函數,使用warp投票指令優化AND約簡。
編輯:
OK,因爲gamerx是問的意見。在sm_13硬件上,您可以執行此操作。
// returns true if predicate is true for all threads in a block
// note: supports maximum of 1024 threads in block as written
__device__ bool unanimous(bool predicate) {
__shared__ bool warp_votes[32];
if (threadIdx.x < warpSize) warp_votes[threadIdx.x] = true;
warp_votes[threadIdx.x/warpSize] = __all(pred);
__syncthreads();
if (threadIdx.x < warpSize) warp_votes[0] = __all(warp_votes[threadIdx.x];
__syncthreads();
return warp_votes[0];
}
+0
我已經知道了,但無論如何感謝。 – gamerx
相關問題
- 1. 僅優化球體線檢查?
- 2. SciPy的優化 - 查看步驟程序
- 3. 優化:繪畫同步
- 4. 優化Ajax同步調用
- 5. 優化MS同步框架
- 6. 優化SphereInFrustrum檢查
- 7. 線程同步和設置線程的優先級
- 8. 優先化線程。
- 9. Java線程優化
- 10. 線程同步
- 11. 線程同步
- 12. 線程同步
- 13. 線程同步
- 14. 線程/同步
- 15. 線程同步
- 16. 同步線程
- 17. 線程同步
- 18. 線程同步
- 19. 多線程,線程同步
- 20. 變化同步線程執行順序
- 21. 多線程Java的同步化
- 22. 線程同步VS進程同步
- 23. Python線程同步
- 24. 線程和同步
- 25. 線程和同步
- 26. .NET線程同步
- 27. 同步:ImageDownloader線程
- 28. 線程vs同步
- 29. Python線程同步
- 30. C#線程同步
CUDA具有變形投票功能,可用於在塊級*構造相當有效的「任意」/「全部」/「無」類型二進制減少*。您可能無法檢查運行內核中整個網格上的結果*全部*檢查,因爲它需要在整個網格中進行同步。第二次內核發佈或小型主機端減少對於在整個網格中獲得狀態是必要的。 – talonmies
@talonmies:這是一個很好的答案。爲什麼發表評論? –
謝謝,我會去查看投票功能。無論如何,我並不是試圖在一個街區內檢查網格。 – gamerx