色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenMP優化相關知識

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-12-06 10:25 ? 次閱讀

作者介紹

謝依暉

湖南大學碩士研究生在讀,

本科畢業于湖南大學計算機科學與技術專業

本文調研了4篇與OpenMP優化相關的文獻,對優化點分析如下:

面向Open64的OpenMP程序優化[1]

跨越過程邊界的并行區重構

Open64有著過程間分析優化部件,因此可以知道哪些函數使用了被調函數,從而可以通過在使用被調函數處放置合適的編譯指導語句來完成并行區重構。

這樣做的好處是:

進一步擴大并行塊的大小;

將并行塊提升到調用函數中,便于進一步對調用函數中的并行塊合并。

以下給出例子:

programmain
callsub_procedure
end

subroutinesub_procedure
!$ompparallel
P
!$ompendparallel
end

優化后:

programmain
!$ompparallel
callsub_procedure
!$ompendparallel
end

subroutinesub_procedure
P
end

OpenMP并行編程模型與性能優化方法的研究及應用[2]

Cache命中率優化

數組合并:定義兩個數組val[N]和key[N],在順序訪問val[i]和key[i]時可能會導致Cache沖突失效,若改為struct merge{key, val}就可以通過提高空間局部性減少Cache失效次數。

循環交換:C按行存儲而Fortran按列存儲,應根據存儲的順序來訪問。

提取關鍵數據:提取關鍵數據可以減少重復存取的數據,例如在排序中用關鍵字和指針代替整個記錄排序,這樣就能讓Cache無需存放無關數據而提高命中率。

分塊:對于極大大小的數組,要在Cache中一次容納整個數組是有困難的,但可以將數組分為多塊,可有效降低Cache失效率。

循環調度優化

在OpenMP中可對并行循環指定調度方案,以將每個迭代分配給多個工作線程執行。其一般形式如下:

#pragmaompforschedule(schedule_name,chunk_size)
for(i=0;i

OpenMP編譯與優化技術研究[3]

論文中給出了一種使用啟發式規則來估計各種額外開銷和調度參數的關系,得到一個線性不等式組,可以通過求解該不等式組得到較優的調度參數。

變量屬性的優化

在OpenMP語句中每一次對變量的聲明都對應一次新的地址分配。給出以下例子:

#pragmaompparallel
{
#pragmaompforprivate(a)
{...}
#pragmaompforprivate(a)
{...}
}

在如上代碼中,編譯器會為每個循環分配一個單獨的私有變量,而優化后的代碼如下所示:

#pragmaompparallelprivate(a)
{
#pragmaompfor
{...}
#pragmaompfor
{...}
}

How to Get Good Performance by Using OpenMP[4]

去除依賴

對于某些循環語句,存在依賴而導致無法使用OpenMP優化,但是這其中的某些依賴可以通過修改代碼去除依賴而使用OpenMP運行代碼。

下列循環存在反依賴:

for(inti=0;i

除去循環之間的依賴后:

#pragmaompparallelforshared(a,a_copy)
for(inti=0;i

下列循環存在流依賴:

for(inti=1;i

在loop skewing之后:

b[1]=b[1]+a[0]
#pragmaompparallelforshared(a,b,c)
for(inti=1;i

負載不均衡

下段代碼使用流水線形式處理,以塊的形式讀取數據,然后處理每個塊并在下一個塊之前將結果寫入磁盤,造成極差的負載均衡。

for(i=0;i

接下來這段代碼使用動態調度來重疊I/O和處理數據,將上述流水線代碼并行化。

#pragmaompparallel
{
/*preloaddatatobeusedinfirstiterationofthei-loop*/
#pragmaompsingle
{ReadFromFile(O,...);}
for(i=0;i

解決偽共享問題

inta[Nthreads][cache_line_size];
#pragmaompparallelforshared(Nthreads,a)schedule(static,1)
for(inti=0;i

一般情況下,int型變量占四個字節,A[0]和A[1]的地址只差四個字節,小于一個Cache行,它們有著極大的可能在同一Cache行內,從而導致同時更新不同處理器的相同Cache行中的單個元素會導致整個Cache行無效。

對于False sharing問題,一般可以通過填充數組來優化。

inta[Nthreads][cache_line_size];
#pragmaompparallelforshared(Nthreads,a)schedule(static,1)
for(inti=0;i

我們還對文獻中的部分優化使用LLVM Flang編譯器和classic-flang編譯器進行了測試,測試結果請參考https://gitee.com/src-openeuler/flang/pulls/22/files。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 優化
    +關注

    關注

    0

    文章

    220

    瀏覽量

    23942
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62874
  • OpenMP
    +關注

    關注

    0

    文章

    12

    瀏覽量

    5642

原文標題:OpenMP優化調研系列文章(3)

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于一些對OpenMP優化的方式

    本文調研了一些對OpenMP優化的方式。
    發表于 11-22 09:36 ?1140次閱讀

    openMP的helloword的demo出錯

    按照官方資料http://processors.wiki.ti.com/index.php/OpenMP_on_C6000#Installation,搭建了第一個案例,自己選擇的目標配置
    發表于 06-21 00:52

    關于6678 openmp的幾個問題

    大家好, 最近在學習6678上的omp庫,遇到幾個疑問,如下 1. 我注意到,帶openmp的程序代碼段都是放在msmc里的,當多個核都進入到并行域時,都是在msmc的同一個地址執行代碼的,我想問1
    發表于 06-21 11:21

    C6678 openMP 例程 連接出錯

    用的芯片是c6678,開發板是TMDSEVM6678L,開發環境ccs5.2。mcsdk2.1.2.5。openMP1.1.3.02 跑的是biosMulticore sdk 中的openMP例程
    發表于 06-21 00:52

    linux下的openmp編程基礎知識介紹

    OpenMP是專門針對共享地址空間的平行計算機提供的并行計算庫,在Intel C++和Visual C++ 8.0里通過#pragma支持。用OpenMP,可以不必去寫諸如CreateThread
    發表于 07-22 06:45

    openmp相關資料下載

    嵌入式算法移植優化學習筆記1——openmp參考:1、https://www.oschina.net/p/openmp?hmsr=aladdin1e11、openmp簡介
    發表于 12-14 09:03

    請問JPEG編碼如何并行優化

    使用QT對Jpeg編碼與解碼功能進行優化,可以使用openmp,neon等各種方法
    發表于 05-16 21:25

    OpenMP優化調研系列文章(1)

    Abstract本文調研了一些對OpenMP進行優化的方法:H. Ma, R. Zhao, X. Gao and Y. Zhang針對OpenMP程序中的barrier提出幾種新功能的支持和性能
    發表于 10-28 10:18

    OpenMP優化調研系列文章(3)

    本文調研了4篇與OpenMP優化相關的文獻,對優化點分析如下:面向Open64的OpenMP程序優化
    發表于 12-23 16:05

    基于OPENMP多線程技術的運控運算優化

    聯邦成員的運算效率直接影響整體仿真效率。因此,本文通過設計樂觀約束判別算法以及基于openMP多線程技術優化該成員的運控運算方式,提高運行效率。實驗表明,改進后的運控聯邦成員大幅提高了光學設施仿真任務執行效率,仿真聯
    發表于 11-07 16:33 ?7次下載
    基于<b class='flag-5'>OPENMP</b>多線程技術的運控運算<b class='flag-5'>優化</b>

    基于OpenMP的多線程速成課程

    The session introduces multi-threading using OpenMP and explaining the differences between vectorization and multi-threading
    的頭像 發表于 10-22 06:51 ?1889次閱讀

    基于OF/MPI/OpenMP編程的標準計算

    with standards-based OpenFabrics Interfaces* (OFI), message passing interface (MPI), and OpenMP* programming methods on Intel? Xeon Phi? processors.
    的頭像 發表于 09-10 08:22 ?3046次閱讀

    如何在OpenMP中使用嵌套

    此網絡研討會討論了使用熱門團隊在OpenMP中使用嵌套的成功示例,并解釋了利用嵌套并行機會的最佳實踐。
    的頭像 發表于 11-07 06:52 ?2609次閱讀

    OpenMP如何支持現代CPU工作

    OpenMP *是共享內存系統上并行編程的標準。了解它如何支持現代CPU。
    的頭像 發表于 11-05 07:11 ?3553次閱讀

    一些對OpenMP進行優化的方法

    本文調研了一些對OpenMP進行優化的方法。
    的頭像 發表于 10-18 09:44 ?1777次閱讀
    主站蜘蛛池模板: 午夜一级毛片看看 | 中文字幕在线观看亚洲日韩 | 蜜芽一区二区国产精品 | 国产亚洲精品久久播放 | qvod在线观看 | 国产色精品久久人妻无码看片 | 中国xxxxxz| 好湿好滑好硬好爽好深视频 | 九色终合九色综合88 | 亚洲色欲国产AV精品综合 | 在线观看日韩一区 | 天龙八部慕容属性加点 | 双性大乳浪受噗呲噗呲h总 双性被疯狂灌满精NP | 亚洲熟女丰满多毛XXXXX | 美国一级黄色 | 久久热在线视频精品 | 羞羞在线观看 | 扒开女人下面使劲桶视频 | 久久这里有精品 | 成人免费在线观看 | 亚州性夜夜射在线观看 | 欧美日韩高清一区 | 超碰日韩人妻高清视频 | 久久一er精这里有精品 | 国产精品一久久香蕉国产线看 | 国产高清超清在线播放 | 狠狠躁日日躁人人爽 | 熟妇少妇任你躁在线无码 | 欧美三级aaa | 国产精品69人妻无码久久 | 古代荡女丫鬟高H辣文纯肉 姑娘视频日本在线播放 | 国产精品99久久久久久动态图 | 三级网址在线观看 | 青青草国产偷拍在线av | 吃春药后的女教师 | 蜜臀亚洲AV永久无码精品老司机 | 杨幂视频1分11未删减在线观看 | 亚洲va精品中文字幕 | 入禽太深免费观看 | 无码任你躁久久久久久老妇双奶 | 性色AV一区二区三区V视界影院 |