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

正文內(nèi)容

mpi并行程序設(shè)計(jì)--資料下載頁(yè)

2025-10-17 16:47本頁(yè)面

【導(dǎo)讀】黃鎧,徐志偉著,陸鑫達(dá)等譯.可擴(kuò)展并行計(jì)算技術(shù),結(jié)構(gòu)與編程.北京:機(jī)。李曉梅,莫?jiǎng)t堯等著.可擴(kuò)展并行算法的設(shè)計(jì)與分析.北京:國(guó)防工業(yè)出。張寶琳,谷同祥等著.數(shù)值并行計(jì)算原理與方法.北京:國(guó)防工業(yè)出版。––OpenMP–可移植共享存儲(chǔ)并行編程標(biāo)準(zhǔn).消息傳遞并行程序設(shè)計(jì)?;ブg訪問(wèn)不能直接進(jìn)行,必須通過(guò)顯式的消息傳遞來(lái)實(shí)現(xiàn)。–一種新的庫(kù)描述,不是一種語(yǔ)言。共有上百個(gè)函數(shù)調(diào)。Unix工作站上和所有主流的并行機(jī)上得到實(shí)現(xiàn)。MPI中API的主要內(nèi)容,為MPI最基本,最重要的內(nèi)容。事實(shí)上MPI的所有數(shù)據(jù)類(lèi)型均為MPI自定義類(lèi)型。數(shù)據(jù)移動(dòng),數(shù)據(jù)聚集,同步。該程序在終端打印出HelloWorld!“HelloWorld”:一聲來(lái)自新生兒的問(wèn)候.–MPI函數(shù)返回出錯(cuò)代碼或MPI_SUCCESS成功標(biāo)志.–通過(guò)子函數(shù)形式調(diào)用MPI,函數(shù)最后一個(gè)參數(shù)為返回值.–MPI-前綴,且函數(shù)名全部為大寫(xiě).MPI函數(shù)的參數(shù)被標(biāo)志為以下三種類(lèi)型:

  

【正文】 中元素的個(gè)數(shù) , 為一個(gè)非負(fù)整型數(shù)組 */ int indices[], /*每一塊數(shù)據(jù)在 原始數(shù)據(jù)類(lèi)型 中的起始位置 ,整型數(shù)組 */ MPI_Datatype old_type, /*原始數(shù)據(jù)類(lèi)型 (名柄 )*/ MPI_Datatype* newtype /*派生數(shù)據(jù)類(lèi)型指針 */ ) 2020年 11月 MPI并行程序設(shè)計(jì) 84/217 MPI_Type_indexed應(yīng)用示意 (將 A矩陣的上三角部分送到另一個(gè)處理器中的 T矩陣的對(duì)應(yīng)位置 ) float A[n][n]。 /* Complete Matrix */ float T[n][n]。 /* Upper Triangle */ int displacements[n]。 int block_lengths[n]。 MPI_Datatype index_mpi_t。 for (i = 0。 i n。 i++) { block_lengths[i] = ni。 displacements[i] = (n+1)*i。 } MPI_Type_indexed(n, block_lengths, displacements,MPI_FLOAT, amp。index_mpi_t)。 MPI_Type_mit(amp。index_mpi_t)。 if (my_rank == 0) MPI_Send(A, 1, index_mpi_t, 1, 0, MPI_COMM_WORLD)。 else /* my_rank == 1 */ MPI_Recv(T, 1, index_mpi_t, 0, 0, MPI_COMM_WORLD, amp。status)。 2020年 11月 MPI并行程序設(shè)計(jì) 85/217 MPI_Type_struct ? 允許每個(gè)塊包含不同數(shù)據(jù)類(lèi)型的拷貝 2020年 11月 MPI并行程序設(shè)計(jì) 86/217 ? MPI_Type_struct的例子 struct partstruct {char class。 double d[6]。 char b[7]}。 struct partstruct particle[1000]。 int i,dest,rank。 MPI_Datatype particletype,type[3]={MPI_CHAR, MPI_DOUBLE,MPI_CHAR} int blocklen[3]={1,6,7}。 MPI_Aint disp[3]={0,sizeof(double),7*sizeof(double)}。 MPI_Type_struct(3,blocklen,disp,type,amp。particletype)。 2020年 11月 MPI并行程序設(shè)計(jì) 87/217 其它派生類(lèi)型 ? MPI_Hvector ? MPI_Hindexed ? MPI_Pack/MPI_Unpack:數(shù)據(jù)打包 /解包 –是其它數(shù)據(jù)派生數(shù)據(jù)類(lèi)型的基礎(chǔ), MPI不建議用戶進(jìn)行顯式的數(shù)據(jù)打包 –為了與早期其它并行庫(kù)兼容 2020年 11月 MPI并行程序設(shè)計(jì) 88/217 MPI_Pack () int MPI_Pack ( void *inbuf, /* 輸入緩沖區(qū)起始地址 */ int incount, /* 輸入數(shù)據(jù)項(xiàng)個(gè)數(shù) */ MPI_Datatype datatype, /* 輸入數(shù)據(jù)項(xiàng)的數(shù)據(jù)類(lèi)型 */ void *outbuf, /* 輸出緩沖區(qū)起始地址 */ int outcount, /* 輸出緩沖區(qū)大小 */ int *position, /* 輸出緩沖區(qū)當(dāng)前位置 */ MPI_Comm m /* 通信域 */ ) 例: packsize=0。 MPI_Pack(amp。a,1,MPI_INT,packbuf,100,amp。packsize,MPI_COMM_WORLD)。 MPI_Pack(amp。b,1,MPI_DOUBLE, packbuf,100,amp。packsize,MPI_COMM_WORLD)。 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ù)類(lèi)型 */ MPI_Comm m /* 通信域 */ ) 例: pos=0。 MPI_Unpack(packbuf,packsize,amp。pos,amp。a,1,MPI_INT,MPI_COMM_WROLD)。 MPI_Unpack(packbuf,packsize,amp。pos,amp。b,1,MPI_FLOAT,MPI_COMM_WROLD)。 2020年 11月 MPI并行程序設(shè)計(jì) 90/217 派生數(shù)據(jù)類(lèi)型的應(yīng)用 ? 提交 :int MPI_Type_mit(MPI Datatype *datatype) –將數(shù)據(jù)類(lèi)型映射進(jìn)行轉(zhuǎn)換或“編譯” –一種數(shù)據(jù)類(lèi)型變量可反復(fù)定義,連續(xù)提交 ? 釋放 :int MPI_Type free(MPI_Datatype *datatype) –將數(shù)據(jù)類(lèi)型設(shè)為 MPI_DATATYPE_NULL 2020年 11月 MPI并行程序設(shè)計(jì) 91/217 講座內(nèi)容提示 ? 基本的 MPI – 基本概念 – 點(diǎn)到點(diǎn)通信 (Point to point) ? MPI中 API的主要內(nèi)容,為 MPI最基本,最重要的內(nèi)容 – MPI程序的編譯和運(yùn)行 ? 深入 MPI – 用戶自定義 (/派生 )數(shù)據(jù)類(lèi)型 (Userdefined(Derived) data type) ? 事實(shí)上 MPI的所有數(shù)據(jù)類(lèi)型均為 MPI自定義類(lèi)型 – 支持異構(gòu)系統(tǒng) – 允許消息來(lái)自不連續(xù)的或類(lèi)型不一致的存儲(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ì) 92/217 集合通信 Collective Communication ? 特點(diǎn) –通信空間中的所有進(jìn)程都參與通信操作 –每一個(gè)進(jìn)程都需要調(diào)用該操作函數(shù) ? 一到多 ? 多到一 ? 同步 2020年 11月 MPI并行程序設(shè)計(jì) 93/217 類(lèi)型 函數(shù) 功能 數(shù)據(jù)移動(dòng) MPI_Bcast 一到多, 數(shù)據(jù)廣播 MPI_Gather 多到一, 數(shù)據(jù)匯合 MPI_Gatherv MPI_Gather的一般形式 MPI_Allgather MPI_Gather的一般形式 MPI_Allgatherv MPI_Allgather的一般形式 MPI_Scatter 一到多, 數(shù)據(jù)分散 MPI_Scatterv MPI_Scatter的一般形式 MPI_Alltoall 多到多, 置換數(shù)據(jù) (全互換 ) MPI_Alltoallv MPI_Alltoall的一般形式 數(shù)據(jù)聚集 MPI_Reduce 多到一, 數(shù)據(jù)歸約 MPI_Allreduce 上者的一般形式,結(jié)果在所有進(jìn)程 MPI_Reduce_scatter 結(jié)果 scatter到各個(gè)進(jìn)程 MPI_Scan 前綴操作 同步 MPI_Barrier 同步操作 MPI集合通信函數(shù) All:表示結(jié)果到 所有 進(jìn)程 . V:Variety,被操作的數(shù)據(jù)對(duì)象和操作更為靈活 . % 2020年 11月 MPI并行程序設(shè)計(jì) 94/217 數(shù)據(jù)移動(dòng) Broadcast Scatter Gather Allgather Alltoall 2020年 11月 MPI并行程序設(shè)計(jì) 95/217 數(shù)據(jù)聚集 ?Reduce ?Allreduce ?Reducescatter ?Scan MPI 預(yù)定義全局?jǐn)?shù)據(jù)運(yùn)算符 : MPI_MAX / MPI_MIN。 MPI_SUM 求和 MPI_PROD 求積MPI_LAND 邏輯與 MPI_LOR 邏輯或 MPI_MAXLOC/MPI_MINLOC 最大 /小值求下相應(yīng)位置 … … 2020年 11月 MPI并行程序設(shè)計(jì) 96/217 int p, myrank。 float buf。 MPI_Comm m。 MPI_Init(amp。argc, amp。argv)。 /*得進(jìn)程編號(hào) */ MPI_Comm_rank(m, amp。my_rank)。 /* 得進(jìn)程總數(shù) */ MPI_Comm_size(m, amp。p)。 if(myrank==0) buf = 。 MPI_Bcast(amp。buf,1,MPI_FLOAT,0, m)。 Broadcast 數(shù)據(jù)廣播 data buf . . MPI_Bcast()。 . data . . MPI_Bcast()。 . data . . MPI_Bcast()。 . 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。 float data[10]。/*分布變量 */ float* buf。 MPI_Comm m。 MPI_Init(amp。argc, amp。argv)。 /*得進(jìn)程編號(hào) */ MPI_Comm_rank(m,amp。my_rank)。 /* 得進(jìn)程總數(shù) */ MPI_Comm_size(m, amp。p)。 if(myrank==0) buf=(float*)malloc(p*10*sizeof(float)。/*開(kāi)辟接收緩沖區(qū) */ MPI_Gather(data,10,MPI_FLOAT, buf,10,MPI_FlOAT,0,m)。 data . MPI_Gather()。 . data . MPI_Gather()。 . data . MPI_Gather()。 . 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。 float data[10]。 float* buf。 MPI_Comm m。 MPI_Init(amp。argc, amp。argv)。 /*得進(jìn)程編號(hào) */ MPI_Comm_rank(m,amp。my_rank)。 /* 得進(jìn)程總數(shù) */ MPI_Comm_size(m, amp。p)。 if(myrank==0) buf = (float*)malloc(p*10*sizeof(float)。/*開(kāi)辟 發(fā)送 緩沖區(qū) */ MPI_Scatter(buf,10,MPI_FLOAT, data,10,MPI_FlOAT,0,m)。 data . MPI_Scatter()。 . data . MPI_ Scatter()。 . data . MPI_ Scatter()。 . Process 0 myrank = 0
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1