大資料平行計算利器之MPI OpenMP

2022-07-03 12:00:17 字數 2335 閱讀 2183

影象連通域標記演算法是從一幅柵格影象(通常為二值影象)中,將互相鄰接(4鄰接或8鄰接)的具有非背景值的畫素集合提取出來,為不同的連通域填入數字標記,並且統計連通域的數目。通過對柵格影象中進行連通域標記,可用於靜態地分析各連通域斑塊的分布,或動態地分析這些斑塊隨時間的集聚或離散,是影象處理非常基礎的演算法。目前常用的連通域標記演算法有1)掃瞄法(二次掃瞄法、單向反覆掃瞄法等)、2)線標記法、3)區域增長法。二次掃瞄法由於簡單通用而被廣泛使用!

圖1 連通域標記示意圖

隨著所要處理的資料量越來越大,使用傳統的序列計算技術的連通域標記演算法執行時間過長,難以滿足實際應用的效率需求。隨著平行計算技術的發展,利用不同的程式設計模型,許多資料密集型的計算任務可以被同時分配給單機多核或多機多處理器進行並行處理,從而有可能大幅度縮減計算時間。目前在集群計算領域廣泛使用mpi來進行並行化,在單機領域廣泛使用openmp進行化,本文針對基於等價對的二值影象連通域標記演算法的進行了並行化設計,利用不同的並行程式設計模型分別實現了不同的並行演算法,並通過實驗對利用不同並行程式設計模型所實現的連通域標記演算法進行了效能對比分析。

顧名思義,二次掃瞄序列演算法步驟包含兩部分。

a)標記

b)等價關係建立

利用並查集鍊錶進行標記更新。

二次掃瞄的序列演算法中,非直接相鄰的各像元資料之間是無關的,將影象分割為資料塊後,對於各個資料塊之間的主體運算也是獨立無關的,可並行性較高,因此可通過對影象進行分塊來加快計算時間、提高計算效率。

a)各個程序分別使用序列演算法計算 

b)各個程序將各塊的標記值唯一化

c)生成等價對陣列

d)主程序生成全域性並查集鍊錶

將1到n-1程序中比較獲得的等價對陣列統一傳送給0程序,0程序生成並查集鍊錶。

e)廣播全域性並查集鍊錶,各程序更改標記值

主程序廣播全域性並查集鍊錶,各程序接收後更新標記值。

並行演算法詳細流程圖。

mpi版本和openmp版本的並行演算法。

a)正確性

b)效率:測試不同連通域數目的資料、不同機器環境(單機和集群)、不同並行程式設計模型(mpi和openmp)對二次掃瞄並行演算法效率的影響。

a)單節點

cpu:兩顆intel(r) quad core e5645 xeon(r) cpu,共12核;

記憶體:80gb ;作業系統:linux centos 64位。

b)高效能集群(4個計算節點,1個儲存節點)

cpu:兩顆intel(r) quad core e5645 xeon(r) cpu,共12核;

記憶體:32gb;作業系統:linux centos 64位;

節點間檔案系統:network file system (nfs)。

c)測試資料

兩個相同資料量( 18640×22260 )的二值柵格影象,乙個連通域為3個(簡單圖),乙個連通域為10433個(複雜圖)

原因:並查集鍊錶的影響。

連通域標記演算法很多時間用於對並查集鍊錶進行大量查詢和插入操作。

連通域標記演算法的並行化研究,馬益杭、佔利軍、謝傳節、秦承志,《地理與地理資訊科學》

CUDA(5)之平行計算(向量和)

摘要 1.平行計算經典 include cuda runtime.h include device launch parameters.h include include define n 100 global void add int a,int b,int c int tid blockidx....

每週一庫 Rayon 資料平行計算庫

rayon 是乙個rust的資料平行計算庫。它非常輕巧,可以輕鬆地將順序計算轉換為平行計算。同時保證不會有資料爭用情況出現。使用rayon,可以輕鬆地將順序迭代器轉換為並行迭代器 通常,只需將您的foo.iter 呼叫更改為foo.par iter 其餘則由rayon完成 use rayon pre...

雲計算大資料技術之RDD簡介

rdd 彈性分布式資料集 resilient distributed dataset,簡稱 rdd rdd 其實就是分布式的元素集合。spark最根本的資料抽象。在 spark 中,對資料的所有操作不外乎建立 rdd 轉化已有 rdd?以及呼叫 rdd 操作進行求值。而在這一切背後,spark 會自...