《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > Dijkstra算法的并行實(shí)現(xiàn)
Dijkstra算法的并行實(shí)現(xiàn)
2017年微型機(jī)與應(yīng)用第9期
逄淑玲,王曉升
山東女子學(xué)院 信息技術(shù)學(xué)院,山東 濟(jì)南 250300
摘要: 文章研究了一種多核架構(gòu)下基于OpenMP的Dijkstra并行算法,以Dijkstra算法為基礎(chǔ)設(shè)計并行程序。對傳統(tǒng)Dijkstra算法進(jìn)行分析,明確優(yōu)化方向,再利用OpenMP開發(fā)工具對并行程序進(jìn)行優(yōu)化調(diào)試。結(jié)果表明,文中算法易于操作,并充分利用了多核處理器并行計算的優(yōu)勢,提高了算法的運(yùn)行效率,驗(yàn)證了算法的優(yōu)越性。
Abstract:
Key words :

  逄淑玲,王曉升

  (山東女子學(xué)院 信息技術(shù)學(xué)院,山東 濟(jì)南 250300)

  摘要:文章研究了一種多核架構(gòu)下基于OpenMP的Dijkstra并行算法,以Dijkstra算法為基礎(chǔ)設(shè)計并行程序。對傳統(tǒng)Dijkstra算法進(jìn)行分析,明確優(yōu)化方向,再利用OpenMP開發(fā)工具對并行程序進(jìn)行優(yōu)化調(diào)試。結(jié)果表明,文中算法易于操作,并充分利用了多核處理器并行計算的優(yōu)勢,提高了算法的運(yùn)行效率,驗(yàn)證了算法的優(yōu)越性。

  關(guān)鍵詞:多核;Dijkstra算法;OpenMP;并行算法

  中圖分類號:TP312文獻(xiàn)標(biāo)識碼:ADOI: 10.19358/j.issn.1674-7720.2017.09.008

  引用格式:逄淑玲,王曉升.Dijkstra算法的并行實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2017,36(9):25-27.

0引言

  隨著多核的發(fā)展,串行執(zhí)行程序的缺點(diǎn)暴露無遺,傳統(tǒng)的Dijkstra算法是串行算法,搜索過程易懂,程序設(shè)計簡單,但大量內(nèi)存空間與計算時間的耗費(fèi)成為此算法的瓶頸,而有效解決的途徑之一就是并行計算。為將計算能力最大化,需將一個應(yīng)用程序劃分為多個相對獨(dú)立的任務(wù)并交由多個計算核執(zhí)行。為從語言成分上直接支持并行,完全擺脫串行語言的束縛,設(shè)計了一種全新的程序設(shè)計模型,該并行算法與以往傳統(tǒng)算法相比能夠更有效地提高運(yùn)行效率,充分發(fā)揮高性能多核處理器的功效。

1OpenMP

  OpenMP是一種支持跨平臺共享內(nèi)存方式的多線程并發(fā)編程模型,開發(fā)過程中無需考慮數(shù)據(jù)分布,具有良好的可移植性、可擴(kuò)展性,同時支持C、C++和FORTRAN語言。OpenMP提供一系列體系結(jié)構(gòu)和編程平臺,建立簡潔高效的編程指導(dǎo)命令和并行編程方式,并提供各類串行程序并行化的可行方案[1]。OpenMP不是獨(dú)立的并行語言,通過在適當(dāng)位置加入編譯指令和運(yùn)行庫函數(shù)來并行化串行程序。OpenMP從主線程開始執(zhí)行,一直串行地執(zhí)行該線程,當(dāng)線程某些點(diǎn)需要并行執(zhí)行時,程序則派生出額外的線程,組成一個線程組,這些線程在并行域的代碼區(qū)中并行執(zhí)行,線程到達(dá)整個并行區(qū)域的末尾時等待,直到整個線程組都到達(dá),最終相連接,這時只有主線程繼續(xù)執(zhí)行直到下一個并行區(qū)域或程序結(jié)束[2]。舉例說明[3]:

  int main(int argc,char*argv[]){

  #pragma omp parallel for

  for(int i=0;i<10;i++)

  {

  printf(“i=%d/n”,i);

  }

  printf(“finished.\\n”);

  return 0;

  }

  這段程序就是使用OpenMP編譯指導(dǎo)語句“#pragma omp parallel for”將for循環(huán)里的內(nèi)容并行執(zhí)行,從而提高效率。

2Dijkstra最短路徑算法

  2.1算法思想

  Dijkstra算法是典型的單源最短路徑,以起始點(diǎn)為中心向外層層擴(kuò)展,直到拓展到終點(diǎn)為止。假設(shè)Len(v)表示一個頂點(diǎn)到給定頂點(diǎn)U的最短距離,w(u,v)表示兩個頂點(diǎn)間的距離。給出兩個頂點(diǎn)V1、V2,求兩頂點(diǎn)之間最短距離。算法描述如下[4]:

  (1)給定頂點(diǎn)V1,標(biāo)記這個頂點(diǎn)并初始化所有的頂點(diǎn),將頂點(diǎn)V1放入集合S。

  (2)對于集合S中的所有頂點(diǎn)Vi,計算Vi相鄰的所有頂點(diǎn)Uj的md(ui,vi)=w(ui,vj)+Len(vj)值并找出最小的md(u,v)值的頂點(diǎn)U,將頂點(diǎn)U放入集合S中。

  (3)重復(fù)上述步驟,直到將目標(biāo)頂點(diǎn)V2放入集合S中,即可求出頂點(diǎn)V1到V2間的最短距離,得到最短路徑[5]。

  Dijkstra最短路徑算法流程圖如圖1所示[4]。

001.jpg

  2.2算法分析

  通過對該算法的分析得出該算法的不足之處,在每次迭代中,未標(biāo)記節(jié)點(diǎn)以無序的形式存放在一個數(shù)組或一個鏈表內(nèi),每次選擇最短路徑節(jié)點(diǎn)都必須把所有未標(biāo)記節(jié)點(diǎn)掃描一遍,當(dāng)節(jié)點(diǎn)數(shù)目較大時,這將成為制約計算速度的關(guān)鍵因素。

3基于OpenMP的并行Dijkstra算法

  3.1算法的并行化思想

  在編程時,代碼并行執(zhí)行不僅限于某個函數(shù)的并行化,而是函數(shù)內(nèi)部也需創(chuàng)建線程使關(guān)鍵計算并行執(zhí)行。頻繁創(chuàng)建線程會使工作開銷額外增加[6],借助OpenMP在有效的并行化程序的同時也可解決多核編程時線程創(chuàng)建問題。

  (1)Dijkstra并行算法設(shè)計思想

  從Dijkstra最短路徑算法可看出,集合S每次循環(huán)迭代之后定點(diǎn)個數(shù)都會加1,每次迭代都依賴于上次迭代的結(jié)果,循環(huán)之間存在依賴關(guān)系,所以外層循環(huán)不能直接并行化[7],因此提出對內(nèi)層循環(huán)并行化。每個線程計算一個頂點(diǎn)的所有邊,從中取得最小邊并保存在一個數(shù)組的不同位置,然后從數(shù)組中找出最小的值,得到最近距離的一個頂點(diǎn)[8]。繼續(xù)執(zhí)行外層循環(huán),直到找到最近距離頂點(diǎn)和目標(biāo)節(jié)點(diǎn)為止。

  (2)并行算法的程序設(shè)計流程圖[4]如圖2所示。

 

002.jpg

  3.2并行算法設(shè)計與實(shí)現(xiàn)

  Dijkstra算法的并行化通過兩部分實(shí)現(xiàn):Parallel_GetShortestPath()函數(shù)實(shí)現(xiàn)主算法流程,SearchNextVertex()函數(shù)實(shí)現(xiàn)并行計算第M個最近頂點(diǎn)的算法流程[9]。并行算法的實(shí)現(xiàn)代碼如下[4]:

  #pragma omp parallel for

  num_thread(pgraph>nnodecount,MIN_ITERATOR_NUM))

  for(i=0; i<pGraph>nNodeCount; i++)

  {

  pGraph>ppNodeArray[i]->nMagic=-1;/*初始化為-1,表示未計算過最短路徑的總距離*/

  pGraph>ppNodeArray[i]->pMagic=NULL;/*指針為空*/

  }

  ppSNode[0]=pSrcNode;

  ppSNode[0]->nMagic=0; /*初始化為0*/

  ppSNode[0]->pMagic=NULL;

  for(x=1; x<pGraph>nNodeCount; x++)/*x從1開始循環(huán)執(zhí)行*/

  {

  DISTANCE nTotalDis;

  GRAPHNODE *pTNode;

  pTNode=NULL;

  NTotalDisGRAPH_MAX_DISTANCE;

  SearchNextVertex(pGraph,ppSNode,x,ppNode,pnDis);

  INT index=-1;

  for(i=0;i<x;i++)

  {

  if(nTotalDis>pnDis[i])

  {

  nTotalDis=pnDis[i];

  index=i;

  }

  }

  if(index !=-1)

  {

  pTNode=ppNode[index*2];

  pTNode>nMagic=nTotalDis;

  pTNode>pMagic=ppNode[index *2+1];

  if(pTNode==pTagNode)

  {

  nTagDis=nTotalDis;/*計算出源節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的最短路徑*/

  Break;

  }

  }

  else{ /*最短路徑總是存在的,此處應(yīng)該不會被執(zhí)行*/

  break;

  }

  ppSNode[x]=pTNode;

  }

  free(ppNode);

  free(pnDis);

  free(ppSNode);

  return nTagDis; /*返回目標(biāo)節(jié)點(diǎn)到源節(jié)點(diǎn)的最短路徑*/

  }

4實(shí)驗(yàn)與結(jié)果分析

  為驗(yàn)證并行化后Dijkstra算法的性能,設(shè)計實(shí)驗(yàn)進(jìn)行驗(yàn)證,分別采用傳統(tǒng)的Dijkstra算法與并行化的Dijkstra算法進(jìn)行實(shí)驗(yàn),測試了不同節(jié)點(diǎn)數(shù)和弧段數(shù)下運(yùn)行時間分析對比,評估出并行化后的性能[10],結(jié)果如表1所示。

003.jpg

  從表1中可看出,在執(zhí)行相同節(jié)點(diǎn)數(shù)與弧段數(shù)的情況下,并行Dijkstra算法比串行Dijkstra算法更加省時,大幅度提高了運(yùn)行速度。

5結(jié)論

  本文對傳統(tǒng)Dijkstra算法進(jìn)行分析,為節(jié)省計算機(jī)存儲空間,提高運(yùn)行效率,在OpenMP模型下對Dijkstra算法的并行設(shè)計進(jìn)行了研究,通過數(shù)據(jù)的采集與分析驗(yàn)證并行化后Dijkstra算法的性能,結(jié)果表明:該并行算法與以往傳統(tǒng)算法相比能夠更有效地提高運(yùn)行效率,充分發(fā)揮高性能多核處理器的功效。

  參考文獻(xiàn)

  [1] 王樹西,吳政學(xué).改進(jìn)的Dijkstra最短路徑算法及其應(yīng)用研究[J].計算機(jī)科學(xué),2012,39(5):223-228.

  [2] 王智廣,王興會,李妍.一種基于Dijkstra最短路徑算法的改進(jìn)算法[J].內(nèi)蒙古師范大學(xué)學(xué)報(自然科學(xué)漢文版),2012,41(2):195-200.

  [3] 彭曦,顧炳根,李展?jié)?基于多核的OpenMP并行程序設(shè)計[J].硅谷,2010,(16):97-98.

  [4] 周偉明.多核計算與程序設(shè)計[M].武漢:華中科技大學(xué)出版社,2009.

  [5] 龔向堅,鄒臘梅,胡義香.基于OpenMP的多核系統(tǒng)并行程序設(shè)計方法研究[J].南華大學(xué)學(xué)報(自然科學(xué)版),2013,27(1):64-68.

  [6] 葉仕灝,王伊蕾.一種優(yōu)化Dijkstra算法的研究[J].計算機(jī)應(yīng)用與軟件,2011,28(9):272274.

  [7] 李健.基于Dijkstra最短路徑算法的優(yōu)化研究[J].渭南師范學(xué)院學(xué)報,2009,24(5):6164.

  [8] 計會鳳,徐愛功,隋達(dá)嵬.Dijkstra算法的設(shè)計與實(shí)現(xiàn)[J].遼寧工程技術(shù)大學(xué)學(xué)報(自然科學(xué)版),2008,27(S1):222-223.

  [9] 任小西,唐玲,張杰. 基于OpenMP多線程動態(tài)負(fù)載均衡技術(shù)研究[J]. 世界科技研究與發(fā)展,2008,30(3):281-285.

  [10] 董俊,黃傳河. 改進(jìn)Dijkstra算法在GIS導(dǎo)航應(yīng)用中最短路徑搜索研究[J]. 計算機(jī)科學(xué),2012,39(10):245-247,257.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
最新国产成人av网站网址麻豆| 亚洲伦伦在线| 欧美精品日韩| 免费一级欧美片在线观看| 久久国产视频网站| 午夜在线视频观看日韩17c| 国产精品99久久久久久白浆小说| 亚洲日本中文字幕区| 亚洲国产欧美久久| 亚洲国产精品成人久久综合一区| 欧美一级视频| 欧美一区不卡| 欧美在现视频| 久久精品国产亚洲高清剧情介绍| 久久成人这里只有精品| 久久精品国产久精国产思思| 久久精品日产第一区二区三区| 欧美在线亚洲| 久久国产精品免费一区| 欧美一区二区黄| 性一交一乱一区二区洋洋av| 性亚洲最疯狂xxxx高清| 欧美一区二区啪啪| 久久精品夜色噜噜亚洲a∨| 亚洲国产高清一区| 亚洲免费电影在线观看| 一区二区三区蜜桃网| 国产精品99久久久久久白浆小说 | 亚洲一区二区网站| 亚洲一区二区在线免费观看视频 | 一本久道久久综合狠狠爱| 中文精品视频一区二区在线观看| 亚洲视频视频在线| 性欧美8khd高清极品| 亚洲电影免费在线观看| 91久久精品美女高潮| av不卡在线看| 午夜精品美女久久久久av福利| 欧美影视一区| 欧美成人精品福利| 欧美午夜www高清视频| 国产欧美一区二区三区国产幕精品| 国产一区二区三区观看| 亚洲黄色成人| 亚洲综合电影一区二区三区| 久久精品国产综合| 9久草视频在线视频精品| 亚洲综合视频在线| 久久久国产视频91| 欧美日韩1080p| 国产欧美精品在线| 亚洲日本欧美天堂| 午夜精品久久久久久久白皮肤| 亚洲国产精品一区制服丝袜| 一区二区三区四区五区精品视频| 欧美专区中文字幕| 欧美激情一区三区| 国产麻豆成人精品| 亚洲大片一区二区三区| 亚洲特级毛片| 亚洲精品极品| 欧美在线精品免播放器视频| 欧美激情网友自拍| 国产麻豆日韩| 亚洲人永久免费| 欧美亚洲视频一区二区| 日韩一二三区视频| 久久久国产精品一区| 欧美视频日韩视频在线观看| 国外精品视频| 亚洲图片在区色| 亚洲精品一区在线观看| 久久gogo国模裸体人体| 欧美另类人妖| 黄色成人av在线| 亚洲小说春色综合另类电影| 亚洲精品偷拍| 久久久视频精品| 国产精品久久福利| 亚洲欧洲在线视频| 久久精品人人做人人爽电影蜜月| 亚洲永久视频| 欧美欧美在线| 1024国产精品| 欧美在线free| 欧美在线观看天堂一区二区三区| 欧美日韩一级片在线观看| 有码中文亚洲精品| 欧美一区二区三区成人| 亚洲欧美国产va在线影院| 欧美精品三级| 在线不卡亚洲| 久久精品国亚洲| 久久av一区二区三区| 欧美视频在线视频| 亚洲日本欧美天堂| 亚洲日本欧美天堂| 米奇777在线欧美播放| 国产婷婷色一区二区三区在线| 99国产精品久久| 日韩亚洲国产精品| 欧美电影免费观看网站| 黑丝一区二区| 欧美在线综合| 久久精品国产亚洲a| 国产精品美女久久福利网站| 99re6这里只有精品| 亚洲麻豆一区| 欧美激情一区二区三区不卡| 亚洲大片在线| 亚洲国语精品自产拍在线观看| 久久久久看片| 国内自拍一区| 久久精品av麻豆的观看方式 | 久久久噜噜噜| 韩国欧美国产1区| 久久av一区二区三区| 久久久精品视频成人| 韩国一区二区三区美女美女秀| 欧美一区二区久久久| 久久久久久电影| 激情亚洲网站| 最新亚洲视频| 欧美日韩www| 夜夜夜久久久| 欧美亚洲视频| 国产午夜精品视频| 久久国产精品久久久久久电车| 久久综合一区二区| 影音先锋久久精品| 亚洲日本免费电影| 欧美喷潮久久久xxxxx| 一区二区三区毛片| 午夜精品区一区二区三| 国产欧美午夜| 亚洲福利视频三区| 欧美成人精品在线| 日韩一级黄色大片| 亚洲欧美综合| 国产一区二区三区奇米久涩| 亚洲国产成人高清精品| 欧美国产一区二区三区激情无套| 亚洲美女精品久久| 午夜精品一区二区三区在线播放| 国产亚洲精品高潮| 亚洲欧洲在线一区| 欧美日韩免费观看中文| 亚洲在线成人| 久久综合九色九九| 亚洲精品日韩在线观看| 小嫩嫩精品导航| 狠狠色狠狠色综合日日tαg| 亚洲黄色大片| 欧美视频不卡中文| 欧美一区二区三区视频| 欧美福利一区| 亚洲视频www| 久久精品视频在线播放| 亚洲欧洲精品一区二区| 亚洲专区欧美专区| 国产一区二区三区四区hd| 亚洲精品一品区二品区三品区| 欧美亚男人的天堂| 欧美在线free| 欧美麻豆久久久久久中文| 亚洲综合99| 欧美高清在线播放| 亚洲欧美色一区| 欧美激情二区三区| 午夜精品一区二区三区电影天堂| 欧美a级片网| 亚洲小视频在线观看| 麻豆9191精品国产| 亚洲无毛电影| 欧美freesex8一10精品| 亚洲一区二区三区精品在线| 免费欧美在线视频| 亚洲一区国产| 欧美二区在线观看| 先锋a资源在线看亚洲| 欧美精选在线| 欧美一区二区三区四区视频| 欧美剧在线免费观看网站| 欧美一区二区三区在| 欧美日韩一区二区三区免费| 欧美在线二区| 国产精品国产三级国产普通话99 | 久久久久久**毛片大全| 亚洲美女视频网| 久久嫩草精品久久久久| 在线亚洲欧美| 欧美精品1区2区| 久久精品国产欧美亚洲人人爽| 国产精品vip| 亚洲美女在线视频| 伊人久久大香线| 久久激情婷婷| 亚洲影视在线| 欧美日韩午夜在线视频| 亚洲人成人一区二区在线观看|