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

正文內(nèi)容

mpi并行程序設(shè)計(jì)-(完整版)

  

【正文】 用 MPI_Comm_size 獲得進(jìn)程個(gè)數(shù) p int MPI_Comm_size(MPI_Comm m, int *size)。argv )。 MPI_Finalize()。argc, amp。 printf( Hello, world!\n )。 – 在這種并行編程中,每個(gè)并行進(jìn)程均有自己獨(dú)立的地址空間,相互之間訪問(wèn)不能直接進(jìn)行,必須通過(guò)顯式的消息傳遞來(lái)實(shí)現(xiàn)。 2020年 11月 MPI并行程序設(shè)計(jì) 10/217 講座內(nèi)容提示 ? 基本的 MPI – 基本概念 – 點(diǎn)到點(diǎn)通信 (Point to point) ? MPI中 API的主要內(nèi)容,為 MPI最基本,最重要的內(nèi)容 – MPI程序的編譯和運(yùn)行 ? 深入 MPI – 用戶自定義 (/派生 )數(shù)據(jù)類型 (Userdefined(Derived) data type) ? 事實(shí)上 MPI的所有數(shù)據(jù)類型均為 MPI自定義類型 – 支持異構(gòu)系統(tǒng) – 允許消息來(lái)自不連續(xù)的或類型不一致的存儲(chǔ)區(qū) (結(jié)構(gòu) ,數(shù)組散元 ) – 集合通信 (Collective) ? 數(shù)據(jù)移動(dòng) , 數(shù)據(jù)聚集,同步 ? 基于 point to point 構(gòu)建 – MPI環(huán)境管理函數(shù) ? 組 ,上下文和通信空間 /通信子的管理 ? 實(shí)例 2020年 11月 MPI并行程序設(shè)計(jì) 11/217 從簡(jiǎn)單入手 ! ? 下面我們首先分別以 C語(yǔ)言和 Fortran語(yǔ)言的形式給出一個(gè)最簡(jiǎn)單的 MPI并行程序 Hello (下頁(yè) ). ? 該程序在終端打印出 Hello World!字樣 . ? “Hello World”:一聲來(lái)自新生兒的問(wèn)候 . 2020年 11月 MPI并行程序設(shè)計(jì) 12/217 Hello world(C) include include “ main( int argc, char *argv[] ) { MPI_Init( amp。所有的 MPI程序的第一條可執(zhí)行語(yǔ)句都是這條語(yǔ)句。argc, amp。 MPI_Finalize()。argv )。argv )。, myid, ‘of39。myid)。status)。 1. MPI_Init(…)。 … MPI_Fainalize()。 /*消息 buffer,存儲(chǔ)也是分布的 */ /*初始化 MPI*/ MPI_Init(amp。 /* 發(fā)送長(zhǎng)度取 strlen(message)+1,使 \0也一同發(fā)送出去 */ MPI_Send(message,strlen(message)+1, MPI_CHAR, 0,99,MPI_COMM_WORLD)。 . . Recv()。b 1, MPI_INT, source, 99, MPI_COMM_WORLD, amp。 if(dest == 0) dest = MPI_PROC_NULL。它并不代表數(shù)據(jù)已被接收方接收。函數(shù)調(diào)用是非本地的 。status)。 MPI_Status status。 }else{ MPI_Irecv(amp。前者為阻塞方式 ,即只有探測(cè)到匹配的消息才返回 。i2。status)。status)。 MPI_Type_contiguous(1000,MPI_FLOAT,amp。column_mpi_t)。 … 2020年 11月 MPI并行程序設(shè)計(jì) 82/217 用 MPI_Type_indexed發(fā)送矩陣的上三角部分 ? 以 C語(yǔ)言表示的數(shù)組為例 ,數(shù)組按行連續(xù)存儲(chǔ) 2020年 11月 MPI并行程序設(shè)計(jì) 83/217 MPI_Type_indexed函數(shù)原型 include int MPI_Type_indexed ( int count, /*數(shù)據(jù)塊的個(gè)數(shù) , 數(shù)據(jù)塊間不連續(xù) */ int blocklens[], /*每一數(shù)據(jù)塊中元素的個(gè)數(shù) , 為一個(gè)非負(fù)整型數(shù)組 */ int indices[], /*每一塊數(shù)據(jù)在 原始數(shù)據(jù)類型 中的起始位置 ,整型數(shù)組 */ MPI_Datatype old_type, /*原始數(shù)據(jù)類型 (名柄 )*/ MPI_Datatype* newtype /*派生數(shù)據(jù)類型指針 */ ) 2020年 11月 MPI并行程序設(shè)計(jì) 84/217 MPI_Type_indexed應(yīng)用示意 (將 A矩陣的上三角部分送到另一個(gè)處理器中的 T矩陣的對(duì)應(yīng)位置 ) float A[n][n]。 displacements[i] = (n+1)*i。 2020年 11月 MPI并行程序設(shè)計(jì) 85/217 MPI_Type_struct ? 允許每個(gè)塊包含不同數(shù)據(jù)類型的拷貝 2020年 11月 MPI并行程序設(shè)計(jì) 86/217 ? MPI_Type_struct的例子 struct partstruct {char class。particletype)。 2020年 11月 MPI并行程序設(shè)計(jì) 89/217 MPI_Unpack() int MPI_Unpack ( void *inbuf, /* 輸入緩沖區(qū)起始地址 */ int incount, /* 輸入數(shù)據(jù)項(xiàng)大小 */ int *position, /* 緩沖區(qū)當(dāng)前位置 */ void *outbuf, /* 輸出緩沖區(qū)起始地址 */ int outcount, /* 輸出緩沖區(qū)大小 */ MPI_Datatype datatype, /* 輸出數(shù)據(jù)項(xiàng)的數(shù)據(jù)類型 */ MPI_Comm m /* 通信域 */ ) 例: pos=0。 MPI_SUM 求和 MPI_PROD 求積MPI_LAND 邏輯與 MPI_LOR 邏輯或 MPI_MAXLOC/MPI_MINLOC 最大 /小值求下相應(yīng)位置 … … 2020年 11月 MPI并行程序設(shè)計(jì) 96/217 int p, myrank。 /* 得進(jìn)程總數(shù) */ MPI_Comm_size(m, amp。 . Process 0 myrank = 0 Process 1 myrank = 1 Process p1 myrank = p1 int MPI_Bcast ( void *buffer,/*發(fā)送 /接收 buf*/ int count, /*元素個(gè)數(shù) */ MPI_Datatype datatype, int root, /*指定根進(jìn)程 */ MPI_Comm m) 根進(jìn)程既是發(fā)送緩沖區(qū)也是接收緩沖區(qū) 2020年 11月 MPI并行程序設(shè)計(jì) 97/217 Gather 數(shù)據(jù)收集 int p, myrank。my_rank)。 . Process 0 myrank = 0 Process 1 myrank = 1 Process p1 myrank = p1 根進(jìn)程接收其他進(jìn)程來(lái)的消息 (包括根進(jìn)程 ),按每在進(jìn)程 在通信組中的編號(hào) 依次聯(lián)接在一下 ,存放在根進(jìn)程的接收緩沖區(qū)中 . int MPI_Gather ( void *sendbuf, int sendt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm m ) buf 2020年 11月 MPI并行程序設(shè)計(jì) 98/217 Scatter 數(shù)據(jù)分散 int p, myrank。my_rank)。 . Process 0 myrank = 0
。p)。 float* buf。p)。/*分布變量 */ float* buf。 if(myrank==0) buf = 。 MPI_Comm m。pos,amp。 MPI_Pack(amp。 char b[7]}。index_mpi_t)。 /* Upper Triangle */ int displacements[n]。column_mpi_t)。 MPI_SEND(amp。 } } /*關(guān)閉 MPI,標(biāo)志并行代碼段的結(jié)束 */ MPI_Finalize()。 2020年 11月 MPI并行程序設(shè)計(jì) 65/217 MPI程序的編譯 ? 用 mpicc編譯時(shí),就像用一般的 C編譯器一樣。status)。 float y。request) while(!flag) MPI_Test(amp。 if(rank == 0){ MPI_Isend(amp。y,1,MPI_INT,0,99,m,amp。 MPI_Status status。 ? 接收的完成 :代表數(shù)據(jù)已經(jīng)寫入接收緩沖區(qū)。a, 1, MPI_INT, dest, 99, amp。 該函數(shù)被每一進(jìn)程執(zhí)行一次 . 2020年 11月 MPI并行程序設(shè)計(jì) 53/217 空進(jìn)程 ? rank = MPI_PROC_NULL的進(jìn)程稱為空進(jìn)程 – 使用空進(jìn)程的通信不做任何操作 . – 向 MPI_PROC_NULL發(fā)送的操作總是成功并立即返回 . – 從 MPI_PROC_NULL接收的操作總是成功并立即返回,且接收緩沖區(qū)內(nèi)容為隨機(jī)數(shù) . – status ? = MPI_PROC_NULL ? = MPI_ANY_TAG ? MPI_Get_count(amp。 . . . . . . Send() . . . 問(wèn)題 :進(jìn)程 1和 2誰(shuí)先向根進(jìn)程發(fā)送消息 ? ? % 2020年 11月 MPI并行程序設(shè)計(jì) 46/217 運(yùn)行 greetings ? [dairnode01 ~]$ mpicc –o greeting ? [dairnode01 ~]$ mpirun np 4 greeting Greetings from process 1! Greetings from process 2! Greetings from process 3! ? [dairnode01 ~]$ 計(jì)算機(jī)打印字符 我們輸入的命令 2020年 11月 MPI并行程序設(shè)計(jì) 47/217 現(xiàn)在您已經(jīng)能夠用 MPI進(jìn)行并行編程了 ! 2020年 11月 MPI并行程序設(shè)計(jì) 48/217 避免死鎖 deadlock ? 發(fā)送和接收是成對(duì)出現(xiàn)的,忽略這個(gè)原則 很可能會(huì)產(chǎn)生死鎖 總會(huì)死鎖的通信調(diào)用次序 2020年 11月 MPI并行程序設(shè)計(jì) 49/217 不安全的通信調(diào)用次序 2020年 11月 MPI并行程序設(shè)計(jì) 50/217 安全的通信調(diào)用次序 2020年 11月 MPI并行程序設(shè)計(jì) 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 2020年 11月 MPI并行程序設(shè)計(jì) 52/217 MPI_Sendrecv用法示意 … int a,b。 source numprocs。argv)。 2020年 11月 MPI并行程序設(shè)計(jì) 32/217 講座內(nèi)容提示 ? 基本的 MPI – 基本概念 – 點(diǎn)到點(diǎn)通信 (Point to point) ? MPI中 API的主要內(nèi)容,為 MPI最基本,最重要的內(nèi)容 – MPI程序的編譯和運(yùn)行 ? 深入 MPI – 用戶自定義 (/派生 )數(shù)據(jù)類型 (Userdefined(Derived) data type) ? 事實(shí)上 MPI的所有數(shù)據(jù)類型均為 MPI自定義類型 – 支持異構(gòu)系統(tǒng) – 允許消息來(lái)自不連續(xù)的或類型不一致的存儲(chǔ)區(qū) (結(jié)構(gòu) ,數(shù)組散元 ) – 集合通信 (Collective) ? 數(shù)據(jù)移動(dòng) , 數(shù)據(jù)聚集,同步 ? 基于 point to point 構(gòu)建 – MPI環(huán)境管理函數(shù) ? 組 ,上下文和通信空間 /通信子的管理 ? 實(shí)例 2020年 11月 MPI并行程序設(shè)計(jì) 33/217 Point to Point ? 單個(gè)進(jìn)程對(duì)單個(gè)進(jìn)程的通信 ,重要且復(fù)雜 ? 術(shù)語(yǔ) – Blocking(阻塞 ) :一個(gè)例程須等待操作完成才返回 ,返回后用戶可以重新使用調(diào)用中
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1