freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mpi并行程序設(shè)計ppt課件-文庫吧資料

2025-05-04 22:07本頁面
  

【正文】 ing Greetings from process 1! Greetings from process 2! Greetings from process 3! ? [dairnode01 ~]$ 計算機打印字符 我們輸入的命令 2022年 5月 MPI并行程序設(shè)計 47/217 現(xiàn)在您已經(jīng)能夠用 MPI進行并行編程了 ! 2022年 5月 MPI并行程序設(shè)計 48/217 避免死鎖 deadlock ? 發(fā)送和接收是成對出現(xiàn)的,忽略這個原則 很可能會產(chǎn)生死鎖 總會死鎖的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計 49/217 不安全的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計 50/217 安全的通信調(diào)用次序 2022年 5月 MPI并行程序設(shè)計 51/217 MPI_Sendrecv函數(shù)原型 ? int MPI_Sendrecv( void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm m, MPI_Status *status) ? 數(shù)據(jù)輪換 p0 p1 p2 P(n1) pi 2022年 5月 MPI并行程序設(shè)計 52/217 MPI_Sendrecv用法示意 … int a,b。 . . Recv()。 } } /*關(guān)閉 MPI,標(biāo)志并行代碼段的結(jié)束 */ MPI_Finalize()。status)。 source numprocs。 /* 發(fā)送長度取 strlen(message)+1,使 \0也一同發(fā)送出去 */ MPI_Send(message,strlen(message)+1, MPI_CHAR, 0,99,MPI_COMM_WORLD)。numprocs)。myid)。argv)。 /*消息 buffer,存儲也是分布的 */ /*初始化 MPI*/ MPI_Init(amp。 /*我的進程 ID,存儲也是分布的 */ MPI_Status status。 OUT buf 接收 緩沖區(qū)的起始地址 IN count 要接收信息的 元素 個數(shù) IN datatype 接收信息的數(shù)據(jù)類型 IN source 源進程的 rank值 IN tag 消息標(biāo)簽 IN m 通信子 OUT status status對象 ,包含實際接收到的消息的有關(guān)信息 2022年 5月 MPI并行程序設(shè)計 36/217 MPI消息 ? MPI消息包括信封和數(shù)據(jù)兩個部分,信封指出了發(fā)送或接收消息的對象及相關(guān)信息,而數(shù)據(jù)是本消息將要傳遞的內(nèi)容 ? 數(shù)據(jù): 起始地址、數(shù)據(jù)個數(shù)、數(shù)據(jù)類型 ? 信封: 源 /目的、標(biāo)識、通信域 2022年 5月 MPI并行程序設(shè)計 37/217 消息數(shù)據(jù) ? 由 count個類型為 datatype的連續(xù)數(shù)據(jù)空間組成 , 起始地址為 buf ? 不是以字節(jié)數(shù) , 而是以元素的個數(shù)指定消息的長度 ? count可以是零 , 這種情況下消息的數(shù)據(jù)部分是空的 ? MPI基本數(shù)據(jù)類型相應(yīng)于宿主語言的基本數(shù)據(jù)類型 2022年 5月 MPI并行程序設(shè)計 38/217 什么是緩沖區(qū) ? 1. 應(yīng)用程序中說明的變量 ,在消息傳遞語句中又用作緩沖區(qū)的起始位置 . 2. 也可表示由系統(tǒng) (不同用戶 )創(chuàng)建和管理的某一存儲區(qū)域 ,在消息傳遞過程中用于暫存放消息 .也被稱為系統(tǒng)緩沖區(qū) . 3. 用戶可設(shè)置一定大小的存儲區(qū)域 ,用作中間緩沖區(qū)以保留可能出現(xiàn)在其應(yīng)用程序中的任意消息 . 進程 P A M 進程 Q B 進程 P A M S 進程 Q B 進程 P A M T 進程 Q B 系統(tǒng)緩沖區(qū) 用戶指定緩沖區(qū) 用戶緩沖區(qū) 2022年 5月 MPI并行程序設(shè)計 39/217 ? MPI標(biāo)識一條消息的信息包含四個域 : – Source: 發(fā)送進程隱式確定 ,由進程的 rank值唯一標(biāo)識 – Destination: Send函數(shù)參數(shù)確定 – Tag: Send函數(shù)參數(shù)確定 ,用于識別不同的消息 (0,UB),UB:MPI_TAG_UB=32767. – Communicator: 缺省 MPI_COMM_WORLD ? Group:有限 /N, 有序 /Rank [0,1,2,…N 1] ? Contex:Super_tag,用于標(biāo)識該通訊空間 . 消息信封 ?2022年 5月 MPI并行程序設(shè)計 40/217 2022年 5月 MPI并行程序設(shè)計 41/217 消息匹配 ? 接收 buffer必須至少可以容納 count個由 datatype參數(shù)指明類型的數(shù)據(jù) . 如果接收 buf太小 , 將導(dǎo)致溢出、出錯 . ? 消息匹配 – 參數(shù)匹配 dest,tag,m/ source,tag,m – Source == MPI_ANY_SOURCE: 接收任意處理器來的數(shù)據(jù) (任意消息來源 ). – Tag == MPI_ANY_TAG: 匹配任意 tag值的消息 (任意 tag消息 ). ? 在阻塞式消息傳送中不允許 Source==Dest,否則會導(dǎo)致deadlock. ? 消息傳送被限制在同一個 municator. ? 在 send函數(shù)中必須指定唯一的接收者 (Push/pull通訊機制 ). 2022年 5月 MPI并行程序設(shè)計 42/217 status參數(shù) ? 當(dāng)使用 MPI_ANY_SOURCE或 /和 MPI_ANY_TAG接收消息時如何確定消息的來源 source 和 tag值呢 ? – 在 C中 , . – 在 Fortran中 , source=status(MPI_SOURCE), tag=status(MPI_TAG). ? Status還可用于返回實際接收到消息的長度 – int MPI_Get_count(MPI_Status status, MPI_Datatype datatype,int* count) ? IN status 接收操作的返回值 . ? IN datatype 接收緩沖區(qū)中元素的數(shù)據(jù)類型 . ? OUT count 接收消息中的元素個數(shù) . 2022年 5月 MPI并行程序設(shè)計 43/217 分析 greetings include include “ main(int argc, char* argv[]) { int numprocs。 2022年 5月 MPI并行程序設(shè)計 32/217 講座內(nèi)容提示 ? 基本的 MPI – 基本概念 – 點到點通信 (Point to point) ? MPI中 API的主要內(nèi)容,為 MPI最基本,最重要的內(nèi)容 – MPI程序的編譯和運行 ? 深入 MPI – 用戶自定義 (/派生 )數(shù)據(jù)類型 (Userdefined(Derived) data type) ? 事實上 MPI的所有數(shù)據(jù)類型均為 MPI自定義類型 – 支持異構(gòu)系統(tǒng) – 允許消息來自不連續(xù)的或類型不一致的存儲區(qū) (結(jié)構(gòu) ,數(shù)組散元 ) – 集合通信 (Collective) ? 數(shù)據(jù)移動 , 數(shù)據(jù)聚集,同步 ? 基于 point to point 構(gòu)建 – MPI環(huán)境管理函數(shù) ? 組 ,上下文和通信空間 /通信子的管理 ? 實例 2022年 5月 MPI并行程序設(shè)計 33/217 Point to Point ? 單個進程對單個進程的通信 ,重要且復(fù)雜 ? 術(shù)語 – Blocking(阻塞 ) :一個例程須等待操作完成才返回 ,返回后用戶可以重新使用調(diào)用中所占用的資源 . – Nonblocking(非阻塞 ):一個例程不必等待操作完成便可返回 ,但這并不意味著所占用的資源可被重用 . – Local(本地 ):不依賴于其它進程 . – Nonlocal(非本地 ):依賴于其它進程 . 2022年 5月 MPI并行程序設(shè)計 34/217 Blocking Send int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm m)。 … MPI_Fainalize()。 MPI_Init(…)。 5. MPI_Recv(…)。 3. MPI_Comm_rank(…)。 1. MPI_Init(…)。 數(shù)據(jù)傳送 + 同步操作 ? 需要發(fā)送方與接收方合作完成 . Data Process 0 Process 1 發(fā)送請求 Yes Data Data Data Data Data Data Data Data Time 2022年 5月 MPI并行程序設(shè)計 31/217 最基本的 MPI MPI調(diào)用借口的總數(shù)雖然龐大,但根據(jù)實際編寫 MPI的經(jīng)驗,常用的 MPI調(diào)用的個數(shù) 確實 有限。 MPI_Recv(B, 20, MPI_DOBULE, 0, 99, MPI_COMM_WORLD, amp。 } } MPI_Finalize()。status)。 source numprocs。 MPI_Send(message,strlen(message)+1, MPI_CHAR, 0,99, MPI_COMM_WORLD)。numprocs)。myid)。argv)。 MPI_Init(amp。 MPI_Status status。, myid, ‘of39。 MPI_Finalize()。numprocs )。myid )。argv )。 MPI_Init( amp。 – 用 MPI_Comm_rank 獲得進程的一個叫 rank的值,該 rank值為 0到 p1間的整數(shù) ,相當(dāng)于進程的 ID int MPI_Comm_rank(MPI_Comm m, int *rank)。 MPI_Finalize()。argv )。 } Hello World! Hello World! Hello World! Hello World! include include main( int ar c, char *argv[] ) { MPI_Init( amp。 printf( Hello, world!\n )。argc, amp。 MPI_Finalize()。argv )。 } include include main( int ar c, char *argv[] ) { MPI_Init( amp。 printf( Hello, world!\n )。argc, amp。 MPI_Finalize()。argv )。 – 標(biāo)志并行代碼的結(jié)束 ,結(jié)束除主進程外其它進程 . – 之后串行代碼仍可在主進程 (rank = 0)上運行 (如果必須 ). 2022年 5月 MPI并行程序設(shè)計 17/217 MPI程序的的編譯與運行 ? mpif77 或 mpicc – 默認(rèn)生成 . ? mpif77 –o hello 或 ? mpicc –o hello – 生成 hello的可執(zhí)行代碼 . ? mpirun –np 4 ? mpirun –np 4 hello – 4 指定 np的實參 ,表示進程數(shù) ,由用戶指定 . – / hello 要運行的 MPI并行程序 . %小寫 o %np: The number of process. 2022年 5月 MPI并行程序設(shè)計 18/217 ? :運行我們的 MPI程序 ! ? [dairnode01 ~]$ mpicc o hello ? [dairnode01 ~]$ ./hello (?) [0] Aborting program ! Could not create p4 procgroup. Possible miss
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1