在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

一些對OpenMP進行優化的方法

openEuler ? 來源:畢昇編譯 ? 作者:謝依暉 ? 2022-10-18 09:44 ? 次閱讀

作者介紹

謝依暉

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

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

Abstract

本文調研了一些對OpenMP進行優化的方法:

H. Ma, R. Zhao, X. Gao and Y. Zhang針對OpenMP程序中的barrier提出幾種新功能的支持和性能的優化[1];

在SC20的Booth Talks上,Johannes Doerfert分享了在LLVM上對OpenMP做的一些優化[2]。

Barrier Optimization for OpenMP Program[1]

刪除冗余的barrier

通過并行數據流分析,兩個循環之間無數據依賴,所以S1的barrier是冗余的;parallel結束的時候有一個隱式的barrier,所以S2的barrier也是冗余的。

!$ompparallel
!$ompdo
doi=1,100
a(i)=d(i)
enddo!barrierS1
!$ompenddo
!$ompdo
doi=1,100
b(i)=c(i)
enddo!barrierS2
!$ompenddo
!$ompendparallel

優化時,可以在該語句塊加上顯式的nowait(!$omp end do nowait)。

實現DOACROSS并行

當并行化循環的時候,如果循環依賴距離是一個常數,如下代碼:

doi=2,100
doj=2,100
a(i,j)=a(i-1,j)+a(i,j-1)
enddo
enddo

對外層循環i進行數據依賴檢查,可以得到a[i][j]和a[i-1][j]之間的依賴距離為1。因此循環可以以DOACROSS并行的方式運行。OpenMP只實現了DOALL并行,沒有與DOACROSS對應的語句。

實現時,定義共享數組“_mylocks [ threadid ]”來存儲每個線程的事件,定義私有變量_counter0指示當前線程正在等待的事件。數組“_mylocks”中的元素總數是線程數,每個元素表示相應線程的當前狀態。實現的代碼如下:

int_mylocks[256];//thread'ssynchronizedarray
#pragmaompparallel
{
int_counter0=l;
int_my_id=omp_get_thread_num();
int_my_nprocs=omp_get_num_threads();
_mylocks[my_id]= 0;
for (j_tile=0;j_tile0){
do{
#pragmaompflush(_mylock)
}while(_mylock[myid-l]

Region Barrier

當線程遇到region barrier時會繼續執行。但是直到其他所有線程都進入這個區域之后,它才能運行出該區域。這樣的好處是允許線程繼續運行而不空轉,可以實現CPU的負載均衡。

region barrier的實現代碼如下:

unsigned_counter=0;
#pragmaompparallel
{
{firstparallelregion}
#pragmaompatomic
_counter++;
{barrierregion}
#pragmaompflush(counter)
while(counter%omp_get_num_threads())
{
#pragmaompflush(counter)
}
#pragmaompflush
{thirdparallelregion}
}

當使用region barrier時,需要保證并行域R1和R3與并行域R2無依賴關系。

OpenMP SC20 Booth Talk Series : OpenMP compiler optimizations in LLVM [2]

OpenMP運行時調用重復數據的消除

double*A=malloc(size*omp_get_thread_limit());
double*B=malloc(size*omp_get_thread_limit());
#pragmaompparallel
do_work(&A[omp_get_thread_num()*size]);
#pragmaompparallel
do_work(&B[omp_get_thread_num()*size]);

示例代碼中重復調用了omp_get_thread_limit()和omp_get_thread_num()函數,可以將重復調用合并至一次調用。該功能已在LLVM實現,可通過如下編譯選項進行優化:

$clangdeduplicate.c-g-O2-fopenmp-Rpass=openmp-opt

Tracking OpenMP Internal Control Variables

voidfoo(){
#pragmaompparallel
bar();
}
voidbar(){
if(omp_in_parallel()){
...
}else{
...
}
}

以上代碼,如果omp_in_parallel()的返回值可以判斷為真,那么這個if結構就可以被刪除。

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

    關注

    0

    文章

    220

    瀏覽量

    23906
  • OpenMP
    +關注

    關注

    0

    文章

    12

    瀏覽量

    5621
  • abstract
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1684

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

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

收藏 人收藏

    評論

    相關推薦

    關于一些OpenMP優化的方式

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

    求分享一些關于優化示波器測量的提示與技巧

    求分享一些關于優化示波器測量的提示與技巧
    發表于 05-12 06:26

    關于java性能優化一些細節

    代碼優化個很重要的課題。可能有些人覺得沒用,一些細小的地方有什么好修改的,改與不改對于代碼的運行效率有什么影響呢?這個問題我是這么考慮的,就像大海里面的鯨魚樣,它吃
    發表于 10-11 09:23

    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針對
    發表于 10-28 10:18

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

    極大大小的數組,要在Cache中次容納整個數組是有困難的,但可以將數組分為多塊,可有效降低Cache失效率。循環調度優化OpenMP中可對并行循環指定調度方案,以將每個迭代分配給多個工作線程執行
    發表于 12-23 16:05

    一些在文本數據量不夠大的時候可用的一些實用方法

    在這篇文章中,我將展示一些由我自己開發或是我在文章、博客、論壇、Kaggle和其他一些地方發現的方法,看看它們是如何在沒有大數據的情況下讓深度學習更好地完成我的任務的。其中許多方法都基
    的頭像 發表于 11-19 17:39 ?6766次閱讀
    <b class='flag-5'>一些</b>在文本數據量不夠大的時候可用的<b class='flag-5'>一些</b>實用<b class='flag-5'>方法</b>

    5G網絡優化一些案例資料下載

    電子發燒友網為你提供5G網絡優化一些案例資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-28 08:45 ?14次下載
    5G網絡<b class='flag-5'>優化</b>的<b class='flag-5'>一些</b>案例資料下載

    Zigbee 3.0網絡優化一些方法和建議

    本則實操演示視頻中,Silicon Labs(亦稱“芯科科技”)高級硬件應用工程師Jason Hou介紹了Zigbee 3.0網絡優化一些方法和建議來幫助開發人員快速搭建穩定的Zigbee3.0
    的頭像 發表于 06-18 18:17 ?2893次閱讀

    嵌入式linux系統快速啟動優化一些方法

    嵌入式linux快速啟動的一些優化方法,主要是要掌握嵌入式linux系統的啟動流程,以便能夠在優化時有所指引。下面是一些總結:嵌入式lin
    發表于 11-01 17:06 ?8次下載
    嵌入式linux系統快速啟動<b class='flag-5'>優化</b>的<b class='flag-5'>一些</b><b class='flag-5'>方法</b>

    NEON編程中的一些常見優化技巧

      讀過上篇文章“ARM NEON快速上手指南”之后,相信你已經對ARM NEON編程有了基本的認識。但在真正利用ARM NEON優化程序性能時,還有很多編程技巧和注意事項。本文將結合本人的一些開發經歷,介紹NEON編程中的
    的頭像 發表于 12-12 09:11 ?2006次閱讀

    分享一些Python代碼加速工具

    這篇文章會提供一些優化代碼的工具。會讓代碼變得更簡潔,或者更迅速。
    發表于 07-07 11:18 ?392次閱讀

    介紹得物App在資源優化上做的一些實踐

    包體積優化中,資源優化般都是首要且容易有成效的優化方向。資源優化是通過優化APK中的資源項來
    的頭像 發表于 07-24 09:00 ?780次閱讀
    介紹得物App在資源<b class='flag-5'>優化</b>上做的<b class='flag-5'>一些</b>實踐

    單片機“低耦合”的一些方法

    單片機“低耦合”的一些方法
    的頭像 發表于 10-17 18:30 ?497次閱讀
    主站蜘蛛池模板: 国产精品久久1024| 午夜精品久久久久久久久| 丁香花在线观看免费观看| 永久观看| 福利体验区| 精品一区二区三区三区| 77成人| 久久久久亚洲香蕉网| ggg成人| 天堂bt资源在线官网| 人与禽一级一级毛片| aaa大片| 欧美69xx性欧美| 午夜在线观看完整高清免费| 美国一级毛片片aa久久综合| 亚洲va中文va欧美va爽爽| 8050网| 人人草人人| 国产毛片毛片精品天天看| 天天操综合网| 久久sp| 福利在线观看| 亚洲产国偷v产偷v自拍色戒| 国产一区二卡三区四区| 国产精品久久久久久久久久免费| 狠狠色噜狠狠狠狠| 精品欧美一区二区三区| 国产午夜小视频| 色午夜在线| 台湾av| 网女色| 四虎884tt紧急大通知| 97人人揉人人捏人人添| 国产精品高清一区二区三区不卡 | 手机看片1024欧美| 曰韩毛片| 午夜在线免费观看视频| 玖玖在线国产精品| 夜夜夜夜爽| 亚洲入口无毒网址你懂的| 午夜精品久久久久久久久|