五月天青色头像情侣网名,国产亚洲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)生的偽共享問題。


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

分享到微博請遵守國家法律
于都县| 德令哈市| 扬中市| 绥滨县| 永丰县| 鹤庆县| 丽江市| 广宁县| 焉耆| 年辖:市辖区| 抚顺县| 常宁市| 高安市| 东兰县| 江北区| 新晃| 化州市| 临沭县| 定远县| 获嘉县| 金门县| 屏南县| 滨州市| 香河县| 比如县| 福安市| 宁波市| 巴林左旗| 兰州市| 靖安县| 沾化县| 宣恩县| 怀安县| 洪江市| 朔州市| 宣威市| 溧阳市| 房山区| 全椒县| 连云港市| 康平县|