投票和洗牌以優(yōu)化原子操作
原文
幾年前,我開始研究我的第一個CUDA實現(xiàn)的多粒子碰撞動力學(xué)(MPC)算法,一個粒子在 cell 內(nèi)的代碼,用來模擬溶劑和溶質(zhì)之間的流體動力學(xué)相互作用。作為該算法的一部分,需要對若干粒子參數(shù)進行求和,計算出一定的 cell 參數(shù)。這是在 Tesla GPU 架構(gòu)(比如 GT200 GPU,計算能力1.x)的時代,它的原子操作性能很差。我開發(fā)的一種鏈表方法在 Tesla 和 Fermi 上運行良好,作為原子加法的替代品,但在 Kepler GPU 上表現(xiàn)不佳。然而,在 Kepler 和 Maxwell 體系結(jié)構(gòu)上,原子操作要快得多,所以使用原子加法是有意義的。
這些類型的求和不僅限于 MPC 或 cell 內(nèi)的粒子代碼,在某種程度上,只要按鍵聚合數(shù)據(jù)元素,就會發(fā)生這種求和。對于具有大量可能值的按鍵排序和組合的數(shù)據(jù)元素,在 warp 級別預(yù)先組合具有相同鍵的元素可以顯著加快速度。在這篇文章中,我將描述一些算法,這些算法可以加速您對大量鍵的求和(或類似的聚合),其中線程索引和鍵之間存在合理的相關(guān)性。這通常是適用于至少部分有序的元素的情況。不幸的是,這個參數(shù)在兩個方向上都適用:如果鍵的數(shù)量很少或者鍵的分布是隨機的,那么這些算法就不適合您。澄清一下:我說的“大量”鍵是指如果所有的 bin 都放在共享內(nèi)存中,那么就無法處理這么多鍵。
GPU加速云服務(wù)器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。