最近在看cub代碼须误,記錄對于其scan和reduce的算法理解。
線程束洗牌
線程束洗牌是線程束內(nèi)的一系列操作,使用的是寄存器操作梆暮,比共享內(nèi)存更快,這是它的一大優(yōu)勢。它的操作有__shfl,__shfl_up,_shfl_down,__shfl_xor等等大莫。可以利用它來實現(xiàn)scan和reduce操作官份。
warp_scan_shfl
使用了線程束洗牌的命令形式:
warp-scan
上面是自己畫的原理圖葵硕,根據(jù)自己對于算法的理解眉抬。
warp_reduce_shfl
和上面一樣,同樣使用了線程束洗牌的形式懈凹,不過cub源碼中使用的是shuffle_down的形式蜀变,我這里以shuffle_up為例,其原理是一樣的:
warp-reduce