《電子技術(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)載。
欧美激情办公室aⅴ_国产欧美综合一区二区三区_欧美午夜精品久久久久免费视_福利视频欧美一区二区三区

          亚洲永久网站| 欧美激情第8页| 欧美fxxxxxx另类| 国产一区视频观看| 日韩视频在线播放| 免费日韩av片| 亚洲天堂激情| 香蕉av777xxx色综合一区| 欧美一区影院| 国产日韩欧美一区在线 | 红桃视频欧美| 国产精品毛片一区二区三区| 国产精品豆花视频| 亚欧成人精品| 亚洲国产欧美不卡在线观看| 亚洲一区二区在线免费观看| 国产在线不卡| 久久精品91| 国产日韩久久| 亚洲国产精品第一区二区| 欧美在线免费| 久久三级视频| 亚欧成人精品| 亚洲一区二区三区四区五区午夜| 在线成人h网| 欧美91大片| 午夜一区不卡| 亚洲一卡久久| 中文精品视频| 在线亚洲美日韩| 亚洲黄色大片| 亚洲高清视频一区二区| 欧美不卡一区| 欧美一区二区三区在线播放 | 亚洲高清视频一区| 欧美三级免费| 欧美视频一区| 欧美另类综合| 国产精品啊啊啊| 欧美激情成人在线| 欧美日韩专区| 伊人婷婷久久| 亚洲精品一级| 亚洲综合三区| 欧美暴力喷水在线| 国产在线视频欧美一区二区三区| 欧美全黄视频| 亚洲一级高清| 亚洲少妇在线| 久久国产精品亚洲77777| 久久久久久国产精品mv| 你懂的成人av| 影音先锋久久资源网| 亚洲精品国产系列| 亚洲免费综合| 午夜精品免费| 亚洲国产精品www| 国产精品久久亚洲7777| 久久精品国产第一区二区三区最新章节| 久久国产精品高清| 欧美日一区二区三区在线观看国产免| 黄色在线成人| 欧美亚洲一区| 精品999日本| 翔田千里一区二区| 国内精品**久久毛片app| 最新成人av网站| 蜜桃av一区| 一区二区在线不卡| 午夜在线播放视频欧美| 午夜视频久久久| 日韩一级大片| 欧美 日韩 国产一区二区在线视频| 欧美午夜精品理论片a级大开眼界| 激情久久一区| 老鸭窝毛片一区二区三区| 欧美精品亚洲| 国产精品日韩| 一区二区亚洲| 久久精品系列| 一本久久综合| 好吊视频一区二区三区四区 | 黑人中文字幕一区二区三区| 亚洲乱亚洲高清| 久久久久欧美| 一区二区毛片| 黑人一区二区| 久久综合九色综合网站| 亚洲国产精品久久久久久女王| 新67194成人永久网站| 精品9999| 午夜久久一区| 美女亚洲精品| 国产三区精品| 亚洲国产婷婷香蕉久久久久久99| 欧美99在线视频观看| 国产亚洲欧洲| 亚洲高清av| 欧美日韩亚洲一区| 麻豆精品91| 国产日韩欧美二区| 激情视频一区| 国内自拍视频一区二区三区 | 噜噜噜在线观看免费视频日韩| 精品不卡视频| 激情久久一区| 国模精品娜娜一二三区| 午夜久久久久| 欧美激情在线| 欧美日一区二区三区在线观看国产免| 久久综合久久综合这里只有精品| 美女91精品| 午夜亚洲伦理| 久久性色av| 久久综合九色综合网站| 可以免费看不卡的av网站| 国产精品夜夜夜| 国产精品女主播一区二区三区| 在线播放日韩| 99精品视频免费观看| 夜夜爽av福利精品导航| 在线视频亚洲| 裸体素人女欧美日韩| 欧美在线网站| 黄色成人精品网站| 亚洲精品在线视频观看| 国产日韩欧美在线播放不卡| 亚洲一区精品视频| 久久综合一区| 激情91久久| 在线综合欧美| 快she精品国产999| 国产精品分类| 国产欧美不卡| 久久亚洲国产精品日日av夜夜| 欧美成人亚洲| 好吊色欧美一区二区三区视频| 一区二区自拍| 国产亚洲二区| 欧美视频网站| 一区二区三区国产在线| 麻豆久久久9性大片| 欧美另类综合| 正在播放亚洲| 欧美日韩成人| 国产一区二区三区高清| 欧美 亚欧 日韩视频在线| 国产一区观看| 亚洲综合丁香| 好吊视频一区二区三区四区| 国产精品久久777777毛茸茸| 欧美激情一区二区三区在线视频| 亚洲调教视频在线观看| 夜夜爽www精品| 亚洲欧美一级二级三级| 亚洲国产精品综合| 久久综合伊人| 国产一区二区三区成人欧美日韩在线观看| 久久国产精品高清| 99热在线精品观看| 欧美在线国产| 亚洲自啪免费| 亚洲欧洲日韩综合二区| 欧美 日韩 国产在线| 一区二区三区成人精品| 欧美精品一区二区视频| 国产亚洲精品久久久久婷婷瑜伽| 欧美精品一级| 久久一综合视频| 亚洲一区二区三区午夜| 亚洲欧洲精品一区| 国产一区自拍视频| 欧美freesex交免费视频| 国产精品久久久久久久久久妞妞 | 亚洲精选久久| 国内一区二区三区| 欧美阿v一级看视频| 99视频日韩| 亚洲高清不卡| 在线精品在线| 在线国产欧美| 亚洲高清不卡一区| 在线 亚洲欧美在线综合一区| 欧美1区2区| 欧美精品二区| 欧美久久一级| 国产精品v欧美精品v日韩精品| 你懂的国产精品永久在线| 免费久久99精品国产自| 亚洲一区亚洲| 麻豆av福利av久久av| 母乳一区在线观看| 免费在线成人av| 久久精品成人一区二区三区蜜臀| 新67194成人永久网站| 性久久久久久| 免费精品视频| 午夜精品婷婷| 黑丝一区二区| 亚洲精品美女| 国产精品久久亚洲7777| 亚洲自啪免费| 欧美高清视频一区二区三区在线观看| 可以看av的网站久久看| 欧美久久一区| 亚洲第一精品影视| 中日韩视频在线观看| 香蕉av777xxx色综合一区| 久久久精品动漫| 欧美日韩影院| 亚洲伦理一区| 久久精品亚洲一区二区| 国产精品成人一区二区网站软件| 亚洲第一精品影视| 亚欧成人精品| 黄色成人av网站| 制服诱惑一区二区| 欧美一区激情| 亚洲国产精品第一区二区| 国产日韩欧美在线播放不卡| 久久精品伊人| 在线播放精品| 销魂美女一区二区三区视频在线| 欧美日韩国产综合网| 亚洲激情综合| 久久香蕉精品| 99爱精品视频| 欧美成人免费在线| 一区二区黄色| 亚洲天堂久久| 久久综合给合久久狠狠色| 亚洲激情二区| 久热这里只精品99re8久| 亚洲激情二区| 欧美福利精品| 亚洲在线国产日韩欧美| 亚洲一级一区| 欧美成人蜜桃| 免费在线国产精品| 亚洲日本激情| 国产一区二区中文| 久久久久久婷| 亚洲一区自拍| 日韩亚洲国产精品| 国产精品sm| 欧美+亚洲+精品+三区| 亚洲综合电影一区二区三区| 亚洲三级影院| 在线电影一区| 精品69视频一区二区三区Q| 久久一本综合频道| 亚洲欧美日韩精品在线| 国产日韩一区| 国产欧美一区二区视频| 在线欧美三区| 激情亚洲网站| 亚洲一二三区精品| 国产精品porn| 欧美日韩一区二区高清| 欧美在线日韩| 欧美a级片网站| 久久人人精品| 看欧美日韩国产| 久久一区亚洲| 欧美激情性爽国产精品17p| 久久亚洲一区| 欧美精品一线| 国产一区欧美| 在线视频观看日韩| 99热在线精品观看| 国产一区二区三区成人欧美日韩在线观看| 亚洲精品影院在线观看| 国产日韩欧美综合精品| 亚洲一区二区在线看| 亚洲欧美日本视频在线观看| 亚久久调教视频| 欧美91福利在线观看| 欧美日韩视频在线一区二区观看视频| 欧美日韩一区综合| 亚洲区第一页| 嫩草成人www欧美| 欧美精品亚洲| 亚洲三级毛片| 免费亚洲一区| 欧美日韩一区综合| 亚洲欧洲日韩综合二区| 国产精品一区二区在线观看| 久久久久国产精品一区二区| 午夜国产精品视频| 1024日韩| 噜噜噜91成人网| 国模吧视频一区| 91久久国产综合久久蜜月精品| 在线综合亚洲| 欧美极品一区| 一区二区三区四区五区精品| 米奇777在线欧美播放| 国内精品久久久久久久影视麻豆| 一区二区三区福利| 欧美激情综合| 国产精品一二| 欧美视频观看一区| 亚洲一区二区毛片| 精品99视频| 久久综合精品一区| 亚洲伦理精品| 欧美激情五月| 国产精品一级| 国产精品二区二区三区| 欧美一区=区| 日韩午夜精品| 午夜精品视频| 亚洲欧美成人综合| 一区在线电影| 欧美激情1区| 欧美亚洲一区二区三区| 亚洲欧洲日本mm| 欧美视频福利| 欧美福利一区| 久久久久国内| 亚洲尤物影院| 国产日韩欧美在线播放不卡| 亚洲成色精品| 欧美日韩亚洲一区| 老牛嫩草一区二区三区日本 | 久久免费黄色| 国产精品毛片在线看| 精品成人一区| 狠狠久久婷婷| 欧美日韩视频| 欧美日韩第一区| 午夜精品偷拍| 欧美在线三级| 亚洲欧美一级二级三级| 欧美中文日韩| 久久99伊人| 亚洲一区日韩| 国产精品亚洲不卡a| 国产视频久久| 国产精品婷婷| 亚洲一区二区三区欧美| 国产一级久久| 亚洲欧美日韩精品在线| 午夜亚洲视频| 欧美中文日韩| 久久综合狠狠综合久久综青草| 免费一区视频| 欧美在线亚洲| 欧美涩涩视频| 亚洲国产精品一区二区第一页| 亚洲国产精品综合| 国产欧美一级| 香蕉成人久久| 欧美成人一区二区在线| 国产一区二区三区四区老人| 精品动漫3d一区二区三区免费| 亚洲国产黄色| 亚洲欧美日本国产专区一区| 久久久久久穴| 亚洲香蕉网站| 国产精品毛片一区二区三区 | 欧美综合国产| 欧美激情麻豆| 亚洲福利精品| 亚洲在线成人| 欧美日韩在线观看一区二区三区| 影音先锋亚洲一区| 亚洲一区二区三区精品在线观看 | 日韩天堂av| 久久xxxx| 很黄很黄激情成人| 亚洲精品一区二区三| 久久国产精品久久久久久电车| 欧美日韩亚洲一区三区| 中文亚洲免费| 午夜精品亚洲一区二区三区嫩草| 激情婷婷欧美| 裸体素人女欧美日韩| 亚洲国产精品第一区二区三区| 久久激情久久| 日韩亚洲在线| 午夜久久资源| 国产一区91| 精品动漫3d一区二区三区免费| 噜噜噜噜噜久久久久久91| 亚洲福利免费| 欧美日韩国产在线一区| 国产日韩欧美一区| 激情欧美一区| 欧美精品首页| 久久九九99| 国产欧美一区二区三区另类精品| 欧美性久久久| 欧美 日韩 国产 一区| 亚洲一区bb| 99精品国产在热久久| 亚洲图片在线观看| 午夜日韩视频| 老司机精品导航| 免费亚洲网站|