国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高性能計算實驗——矩陣乘法基于MPI的并行實現(xiàn)及優(yōu)化

這篇具有很好參考價值的文章主要介紹了高性能計算實驗——矩陣乘法基于MPI的并行實現(xiàn)及優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.實驗?zāi)康?/h2>

1.1.通過MPI實現(xiàn)通用矩陣乘法

熟練掌握MPI編程方法,并將通用矩陣乘法轉(zhuǎn)為MPI并行實現(xiàn),進(jìn)一步加深MPI的使用與理解。

1.2.基于MPI的通用矩陣乘法優(yōu)化

進(jìn)一步熟悉MPI矩陣乘法的實現(xiàn),學(xué)習(xí)MPI點對點通信與集合通信的異同點和各自的優(yōu)缺點,學(xué)會比較二者的性能以及各自使用的情形。

1.3.改造實驗1成矩陣乘法庫函數(shù)

學(xué)習(xí)如何將自己編寫的代碼改造為標(biāo)準(zhǔn)庫函數(shù),供其他程序調(diào)用。
理解動態(tài)鏈接的過程。

2.實驗過程和核心代碼

2.1.通過MPI實現(xiàn)通用矩陣乘法

2.1.1.問題描述
通過 MPI 實現(xiàn)通用矩陣乘法(實驗1)的并行版本,MPI并行進(jìn)程(rank size)從 1 增加至 8,矩陣規(guī)模從 512 增加至 2048.

問題描述:隨機生成 MN 和NK 的兩個矩陣 A,B,對這兩個矩陣做乘法得到矩陣 C.
輸入:M , N, K 三個整數(shù)(512 ~2048)
輸出:A,B,C 三個矩陣以及矩陣計算的時間

2.1.2.實現(xiàn)過程
這里可以選擇點對點通信或者集合通信的方式實現(xiàn),這里選擇點對點方式,使用MPI_Send、MPI_Recv函數(shù)進(jìn)行進(jìn)程通信。
思想:

最簡單的實現(xiàn),按行并行:
主進(jìn)程不參與計算,只負(fù)責(zé)分發(fā)和收集數(shù)據(jù)。在主進(jìn)程中,A根據(jù)處理器數(shù)按行劃分為大致相等的N部分,然后將部分的A和全部的B傳遞給子進(jìn)程。子進(jìn)程計算部分乘法并返回結(jié)果,主進(jìn)程收集并整合報告結(jié)果。使用最簡單的Send和Recv進(jìn)行通信。

2.1.3.核心代碼
①矩陣生成

void Gen_Matrix(int m,int n,int k){
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            A[i][j] = rand()%5;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<k;j++){
            B[i][j] = rand()%5;
        }
    }
}

②MPI初始化
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

③獲得進(jìn)程數(shù)(通過bash)
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

④獲得時間
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

⑤主處理器
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
這里主處理器通過Send傳遞給每一個處理器n/pnum行A、與整個的B,接著接受所有子處理器返回的結(jié)果進(jìn)行拼接。

⑥子處理器
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
這里子處理器需要相應(yīng)的接受Recv主處理器Send的過來的A部分行與整個的B,接著進(jìn)行計算,即matMulti函數(shù),最后Send回結(jié)果。

⑦矩陣乘法
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

這里就是簡單的使用樸素計算方法,為了方便,直接將結(jié)果存在了部分結(jié)果矩陣返回。

2.2.通用矩陣乘法優(yōu)化

2.2.1.問題描述
分別采用 MPI 點對點通信和 MPI 集合通信實現(xiàn)矩陣乘法中的進(jìn)程之間通信,并比較兩種實現(xiàn)方式的性能。
上面已經(jīng)采用點對點通信的方式進(jìn)行了實現(xiàn),接下來針對集合通信來進(jìn)行實驗。

2.2.2.實現(xiàn)過程
這里分發(fā)A時,是將A平均的分配給了各個進(jìn)程,使用Scatter分發(fā)比較何時,而B要完整的分發(fā)給所有處理器,所以使用Broadcast通信更為方便,收集計算結(jié)果使用Gather。
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

廣播是最簡單但也是最有用的集體操作之一。
改用Scatter分配數(shù)據(jù)后,每個進(jìn)程分配的部分矩陣具有完全相等的規(guī)模。因此。記comm_sz為進(jìn)程數(shù),矩陣的維度需要是comm_sz的倍數(shù)。我們將矩陣的維度擴展到comm_sz的倍數(shù),多余的部分用0填充,保證正確性。
改用Scatter分配數(shù)據(jù)后,計算任務(wù)平均地分配給每一個進(jìn)程,所以主進(jìn)程不僅要分發(fā)收集結(jié)果,也要參與計算。如果分發(fā)的行數(shù)不夠,就不能保證結(jié)果正確;如果分發(fā)的行數(shù)超出,就會出現(xiàn)很多不同類型的內(nèi)存錯誤(大多都源于free時內(nèi)存泄漏等原因)。

2.2.3.核心代碼
①給A、B矩陣賦初值
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
這里必須要平均分配給各個處理器,因此有必要在不夠分配時擴大矩陣,就需要在無數(shù)據(jù)的位置補零。

②獲取矩陣大小,這里需要假設(shè)矩陣大小相同(通過bash)
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
后續(xù)處理,將真實矩陣大小擴展到處理器個數(shù)的倍數(shù)。

③MPI初始化
同上第一部分;

④主線程
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
主線程額外進(jìn)行初始化矩陣以及計算并輸出時間的工作
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
使用Scatter平均分發(fā)A的行,Bcast分發(fā)B。
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
使用Gather收集結(jié)果。

⑤所有處理器計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

MatMulti函數(shù)與上面實驗相同。

2.3.改造實驗1成矩陣乘法庫函數(shù)

2.3.1.問題描述
將Lab1 的矩陣乘法改造為一個標(biāo)準(zhǔn)的庫函數(shù) matrix_multiply(函數(shù)實現(xiàn)文件和函數(shù)頭文件),輸入?yún)?shù)為三個完整定義矩陣(A,B,C),定義方式?jīng)]有具體要求,可以是二維矩陣,也可以是 struct 等。在 Linux 系統(tǒng)中將此函數(shù)編譯為.so 文件,由其他程序調(diào)用。

2.3.2.實驗過程
通常情況下,對函數(shù)庫的鏈接是放在編譯時期(compile)完成的。所有相關(guān)的對象文件(object file)與牽涉到的函數(shù)庫(library)被鏈接合成一個可執(zhí)行文件(executable file)。程序在運行時,與函數(shù)庫再無關(guān)系,因為所有需要的函數(shù)已拷貝到自己門下。所以這些函數(shù)庫被稱為靜態(tài)庫(static libaray),通常文件名為“l(fā)ibxxx.a”的形式。
由于動態(tài)鏈接庫函數(shù)的共享特性,它們不會被拷貝到可執(zhí)行文件中。在編譯的時候,編譯器只會做一些函數(shù)名之類的檢查。在程序運行的時候,被調(diào)用的動態(tài)鏈接庫函數(shù)被安置在內(nèi)存的某個地方,所有調(diào)用它的程序?qū)⒅赶蜻@個代碼段。因此,這些代碼必須使用相對地址,而不是絕對地址。在編譯的時候,我們需要告訴編譯器,這些對象文件是用來做動態(tài)鏈接庫的,所以要用地址無關(guān)代碼(Position Independent Code (PIC))。
對gcc編譯器,只需添加上 -fPIC 標(biāo)簽,如:=

gcc -fPIC -c file1.c
gcc -fPIC -c file2.c
gcc -shared libxxx.so file1.o file2.o

注意到最后一行,-shared 標(biāo)簽告訴編譯器這是要建立動態(tài)鏈接庫。這與靜態(tài)鏈接庫的建立很不一樣,后者用的是 ar 命令。也注意到,動態(tài)鏈接庫的名字形式為 “l(fā)ibxxx.so” 后綴名為 “.so”

2.3.3.核心代碼
①Mat_mul.h頭文件
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

這里自定義矩陣,包括行、列、矩陣體,同時聲明需要的函數(shù)。

②Mat_mul.c頭文件
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

Malloc_matrix函數(shù)用于根據(jù)矩陣rows\cols分配矩陣并進(jìn)行初始化。
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

Free_matrix函數(shù)用于釋放相應(yīng)空間。
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

Mul_matrix函數(shù)是核心計算函數(shù),會首先檢查是否滿足乘法條件。

3.實驗結(jié)果

3.1.通過MPI實現(xiàn)通用矩陣乘法

mpi矩陣乘法,高性能計算實驗,MPI,并行計算

編譯得到相應(yīng)的MPI程序;
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

執(zhí)行得到2048大小的矩陣使用2個處理器時間消耗為186s
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

執(zhí)行得到2048大小的矩陣使用4個處理器時間消耗為75s
結(jié)果可以看出在處理器足夠的情況下,增加處理器數(shù)目可以大大提高運算速度,符合預(yù)期。

3.2.基于MPI的通用矩陣乘法優(yōu)化

編譯程序:
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

執(zhí)行得到2048大小的矩陣使用4個處理器時間消耗為87s,2048大小的矩陣使用2個處理器時間消耗為140s。
結(jié)果可以看出在處理器足夠的情況下,增加處理器數(shù)目可以大大提高運算速度,符合預(yù)期。

3.3.改造實驗1成矩陣乘法庫函數(shù)

mpi矩陣乘法,高性能計算實驗,MPI,并行計算

編譯為.so文件
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

改變當(dāng)前動態(tài)庫路徑為當(dāng)前目錄
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

編寫的測試文件;
測試結(jié)果:
mpi矩陣乘法,高性能計算實驗,MPI,并行計算

查看鏈接:
mpi矩陣乘法,高性能計算實驗,MPI,并行計算
自己的.so文件成功鏈接。

4.實驗感想

本次實驗是高性能實驗的核心,主要是使用MPI進(jìn)行矩陣乘法的實現(xiàn)與優(yōu)化,總體來說并不是很難,需要掌握點對點與集群通信兩種方式的MPI。
其中還有很多可以優(yōu)化的點,比如傳遞給處理器的整個的B是沒有必要的,我們可以簡單的對B矩陣進(jìn)行轉(zhuǎn)置,接著把與傳遞A相同的幾行傳遞給處理器即可,可以大大減少通信量。文章來源地址http://www.zghlxwxcb.cn/news/detail-779705.html

到了這里,關(guān)于高性能計算實驗——矩陣乘法基于MPI的并行實現(xiàn)及優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于高性能計算環(huán)境的HPC算力編程模式

    摘要 【目的】 隨著云計算、大數(shù)據(jù)、人工智能等技術(shù)的興起和廣泛應(yīng)用,促進(jìn)了基于多元算力的融合計算發(fā)展。在國家“東數(shù)西算”戰(zhàn)略的指引下,充分發(fā)揮HPC算力優(yōu)勢,提供新型HPC算力編程模式,是新一代計算基礎(chǔ)設(shè)施可編程能力的重要變革。 【方法】 分析了高性能計算環(huán)境

    2024年02月02日
    瀏覽(19)
  • 企業(yè)如何構(gòu)建高性能計算云?

    企業(yè)如何構(gòu)建高性能計算云?

    HPC是推動科學(xué)和工程應(yīng)用發(fā)展的重要組成部分。除了將處理器向Exascale邁進(jìn)之外,工作負(fù)載的性質(zhì)也在不斷變化—從傳統(tǒng)的模擬和建模到混合工作負(fù)載,包括企業(yè)內(nèi)部和云應(yīng)用,還需要整合、吸收和分析來自無數(shù)物聯(lián)網(wǎng)傳感器的數(shù)據(jù)。同時,隨著HPC基礎(chǔ)設(shè)施上的人工智能工作

    2024年02月03日
    瀏覽(23)
  • 高性能計算與AI融合成為剛需|什么是高性能計算?應(yīng)用領(lǐng)域有哪些?與人工智能的關(guān)系梳理

    高性能計算與AI融合成為剛需|什么是高性能計算?應(yīng)用領(lǐng)域有哪些?與人工智能的關(guān)系梳理

    本文一部分轉(zhuǎn)載自楊凈 整理自 MEET2023量子位 算力的需求,遠(yuǎn)比以往來得更為猛烈。甚至有人直呼:得算力者得未來。 元宇宙、AIGC、AI for Science的涌現(xiàn),又給高性能計算(HPC)平添了好幾把火。 在諸多挑戰(zhàn)與機遇共存交織的當(dāng)下,這一領(lǐng)域泰斗中國工程院院士、清華大學(xué)計算

    2024年02月08日
    瀏覽(23)
  • 高性能計算HPC筆記(一):概論

    高性能計算HPC筆記(一):概論

    學(xué)習(xí)自: B站北京大學(xué)Linux俱樂部:https://space.bilibili.com/3461562830424779 學(xué)習(xí)視頻:北大未名超算隊 高性能計算入門講座(一):概論 這里PPT中有個問題:客戶端只上傳公鑰給服務(wù)器,私鑰是自己保留的。 概念 SISD:用一個線程去執(zhí)行一條指令。 SIMD:使用單個instruction來操作多條

    2024年01月19日
    瀏覽(32)
  • 從零開始學(xué)架構(gòu)-計算高性能

    從零開始學(xué)架構(gòu)-計算高性能

    ????????高性能是每個程序員的追求,無論做一個系統(tǒng)、還是寫一組代碼,都希望能夠達(dá)到高性能的效果。而高性能又是最復(fù)雜的一環(huán),磁盤、操作系統(tǒng)、CPU、內(nèi)存、緩存、網(wǎng)絡(luò)、編程語言、數(shù)據(jù)庫、架構(gòu)等,每個都可能影響系統(tǒng)的高性能,一行不恰當(dāng)?shù)?debug 日志,一個

    2023年04月24日
    瀏覽(33)
  • 【高性能計算】opencl安裝及相關(guān)概念

    異構(gòu)計算是一種利用多種不同類型的計算資源來協(xié)同解決計算問題的方法。它的核心思想是將不同特性和能力的計算設(shè)備(例如CPU、GPU、FPGA等)組合在一起,以充分發(fā)揮它們在不同類型的工作負(fù)載和任務(wù)中的優(yōu)勢。 傳統(tǒng)的計算模型通常依賴于單一類型的處理器,如中央處理

    2024年02月11日
    瀏覽(26)
  • Intel oneAPI——讓高性能計算觸手可及

    Intel oneAPI——讓高性能計算觸手可及

    在人工智能興起的今天,大規(guī)模、高性能計算已成為社會發(fā)展的剛需。動輒千萬節(jié)點規(guī)模的社交網(wǎng)絡(luò)、交通網(wǎng)絡(luò),語言聊天模型中的大規(guī)模神經(jīng)網(wǎng)絡(luò),以及航空航天等涉及大規(guī)模計算的場景,都少不了并行計算的支持。并行計算是一種一次可執(zhí)行多個指令的算法,目的是提高

    2024年02月01日
    瀏覽(88)
  • 高性能云計算構(gòu)架與實踐7-nova安裝配置

    高性能云計算構(gòu)架與實踐7-nova安裝配置

    1創(chuàng)建nova_api、nova、novacell0數(shù)據(jù)庫,創(chuàng)建nova_api、nova、novacell0用戶并授權(quán),密碼是123456.? ? ? 2重啟數(shù)據(jù)庫 Systemctl restart mariadb 3創(chuàng)建nova用戶,輸入密碼123456 添加admin角色到nova用戶 openstack role add --project admin --user nova admin 創(chuàng)建服務(wù)實體 openstack service create --name nova --description \\\"O

    2023年04月10日
    瀏覽(17)
  • 【高性能計算】opencl語法及相關(guān)概念(三)事件,內(nèi)存

    【高性能計算】opencl語法及相關(guān)概念(三)事件,內(nèi)存

    當(dāng)談到OpenCL中的事件時,它們代表了執(zhí)行的各個階段或操作的狀態(tài)信息。通過使用事件,您可以跟蹤和管理內(nèi)核執(zhí)行以及內(nèi)存操作的進(jìn)度和順序。以下是與OpenCL事件相關(guān)的關(guān)鍵概念: 創(chuàng)建事件:您可以使用 clCreateUserEvent 或 clCreateUserEventWithProperties 函數(shù)手動創(chuàng)建事件,或者使

    2024年02月10日
    瀏覽(26)
  • 高性能計算技術(shù)在虛擬現(xiàn)實中的應(yīng)用

    虛擬現(xiàn)實(VR,Virtual Reality)是一種使用計算機生成的3D環(huán)境來模擬現(xiàn)實世界的技術(shù)。它通過使用特殊的顯示設(shè)備、數(shù)據(jù)傳感器和軟件來創(chuàng)建一個與現(xiàn)實環(huán)境相互作用的感覺。虛擬現(xiàn)實技術(shù)已經(jīng)應(yīng)用于許多領(lǐng)域,包括游戲、教育、醫(yī)療、軍事等。 高性能計算(HPC,High Performance Co

    2024年04月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包