无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

自編教材分享:第九章—避免偽共享

2023-12-07 09:18 作者:先進(jìn)編譯實驗室  | 我要投稿


分析偽共享

OpenMP在多核處理器間進(jìn)行同步時常常需要共享一些變量,如用多線程同時對一個數(shù)組初始化時,多個線程對同一個數(shù)組進(jìn)行修改,即使線程間從算法上并不需要共享變量,但是在實際執(zhí)行時,若不同線程所需要賦值的地址處于同一個緩存行中,就會引起緩存沖突,嚴(yán)重降低程序性能,這就是偽共享。

下面通過分析偽共享產(chǎn)生的過程來討論避免偽共享的方法,例如有4個單核處理器,每個都支持超線程技術(shù)即可以在一個核心中提供多個邏輯線程,每個線程對一個獨(dú)立的存儲單元進(jìn)行修改操作,且一個數(shù)組中內(nèi)存地址相鄰的元素會優(yōu)先放入同一個緩存行,此時若各線程操作的存儲單元位于相同緩存行,可能會引起沖突導(dǎo)致性能較差,反之若線程操作的存儲單元在不同緩存行中,則可以避免沖突。

數(shù)據(jù)填充避免偽共享

對數(shù)值計算求π程序并行執(zhí)行時,每個線程計算積分的一部分,之后對計算結(jié)果進(jìn)行匯總,將雙精度浮點變量result更改為線程數(shù)大小的數(shù)組來為每個線程提供空間存儲計算結(jié)果,并在并行區(qū)結(jié)束后使用for循環(huán)相加匯總所有線程的部分結(jié)果

對數(shù)值計算求π程序并行執(zhí)行時,每個線程計算積分的一部分,之后對計算結(jié)果進(jìn)行匯總,將雙精度浮點變量result更改為線程數(shù)大小的數(shù)組來為每個線程提供空間存儲計算結(jié)果,并在并行區(qū)結(jié)束后使用for循環(huán)相加匯總所有線程的部分結(jié)果。

歸約操作是指反復(fù)地將運(yùn)算符作用在一個變量或一個值上,并把結(jié)果保存在原變量中。歸約子句reduction就是對前后有依賴的循環(huán)進(jìn)行歸約操作的并行化,即對一個或多個變量指定一個操作符,每個線程將創(chuàng)建變量列表中變量的一個私有副本,并將各線程變量的私有副本進(jìn)行初始化。

在并行過程中,各線程通過指定的運(yùn)算符進(jìn)行歸約計算,不斷更新各子線程的私有變量副本。在區(qū)域結(jié)束處,各線程私有變量副本通過指定的運(yùn)行符運(yùn)算后,更新原始變量,最后由主線程將歸約子句變量列表中的變量值傳出并行區(qū)。

使用歸約子句reduction避免偽共享問題,不同于數(shù)據(jù)填充進(jìn)行邊界對齊的方式,代碼中不再將result聲明為數(shù)組而是聲明為普通變量,使用reduction子句會使得每個線程都有一個變量result的副本,各個線程在對變量result進(jìn)行寫入時不會產(chǎn)生數(shù)據(jù)沖突,因為result不是共享變量,在各個線程完成寫入操作后,使用reduction子句將所有變量result副本進(jìn)行求和到一個最終的result變量中,該值就是π數(shù)值求解的最終結(jié)果,避免了數(shù)據(jù)在緩存行中相互競爭而產(chǎn)生的偽共享問題。


自編教材分享:第九章—避免偽共享的評論 (共 條)

分享到微博請遵守國家法律
襄汾县| 醴陵市| 漳平市| 蒙山县| 砀山县| 汨罗市| 色达县| 漳州市| 平度市| 罗平县| 太仆寺旗| 固安县| 塔河县| 岳池县| 三门峡市| 尼勒克县| 崇仁县| 卓尼县| 平邑县| 福州市| 无锡市| 南涧| 小金县| 亳州市| 基隆市| 綦江县| 舞阳县| 手游| 罗定市| 洮南市| 安多县| 舟山市| 班玛县| 珲春市| 娱乐| 平远县| 新乐市| 济源市| 雷州市| 白河县| 榆社县|