无码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)生的偽共享問題。


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

分享到微博請遵守國家法律
镇坪县| 桦甸市| 丹凤县| 泊头市| 内丘县| 漳州市| 珲春市| 武乡县| 哈密市| 黑水县| 平塘县| 延寿县| 五家渠市| 蒲江县| 台中县| 定边县| 阿拉善右旗| 通城县| 平远县| 四川省| 浮山县| 海安县| 乡宁县| 郑州市| 侯马市| 全州县| 大宁县| 通化县| 固镇县| 仲巴县| 新化县| 沧州市| 拜泉县| 桦川县| 自贡市| 高邑县| 大冶市| 黄陵县| 井冈山市| 拉孜县| 黄浦区|