五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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)生的偽共享問題。


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

分享到微博請遵守國家法律
高青县| 河源市| 万盛区| 海城市| 淳安县| 西昌市| 柯坪县| 定南县| 兴宁市| 余江县| 上思县| 湘潭市| 东乌珠穆沁旗| 姚安县| 同德县| 龙里县| 丹凤县| 永宁县| 宁津县| 黄骅市| 自贡市| 高州市| 铁岭市| 美姑县| 那曲县| 黔江区| 巴青县| 日土县| 海口市| 元江| 鄄城县| 米脂县| 佛山市| 天祝| 蓬莱市| 临汾市| 新密市| 五峰| 西乌珠穆沁旗| 广宁县| 桓台县|