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

正文內(nèi)容

并行程序設(shè)計(jì)hppt課件-資料下載頁

2025-01-14 16:27本頁面
  

【正文】 MPI_Datatype desttype, //欲接收數(shù)據(jù)類型 int root, //根進(jìn)程編號 MPI_Comm m //通信子 )。 進(jìn) 程 0 進(jìn) 程 1 進(jìn) 程 21 0 0進(jìn) 程 31 0 0 2 0 0 3 0 0 4 0 02 0 03 0 04 0 0接 收緩 沖 區(qū)發(fā) 送緩 沖 區(qū)int sendbuf[4]。 if ( rank == 2 ) { for ( i = 0。 i 4。 i++ ) /* 進(jìn)程 2負(fù)責(zé)數(shù)據(jù)初始化 (或數(shù)據(jù)讀取 ) */ scanf( “%d”, amp。sendbuf[i] )。 } /* 進(jìn)程 2作為根進(jìn)程將數(shù)據(jù)分發(fā)給各個(gè)進(jìn)程 */ MPI_Scatter( sendbuf, 1, MPI_INT, amp。value, 1, MPI_INT, 2, MPI_COMM_WORLD )。 /* 各進(jìn)程使用 value作為參數(shù),進(jìn)行計(jì)算 */ … … 在“統(tǒng)計(jì) 3的個(gè)數(shù)”例子中,可以用 MPI_Scatter()分發(fā)數(shù)據(jù) 六、數(shù)據(jù)收集 ? MPI_Gather()是 MPI_Scatter()的逆操作 ? 根進(jìn)程從組內(nèi)所有進(jìn)程收集數(shù)據(jù),依次放入自己的接收緩沖區(qū) MPI_Gather():從通信子中所有進(jìn)程收集數(shù)據(jù),放置到根進(jìn)程中 int MPI_Gather( void *sendbuffer, //欲發(fā)送數(shù)據(jù)的地址 int sendcount, //欲發(fā)送數(shù)據(jù)個(gè)數(shù) MPI_Datatype sendtype, //欲發(fā)送數(shù)據(jù)類型 void *recvbuffer, //欲接收數(shù)據(jù)的地址 int recvcount, //欲接收數(shù)據(jù)個(gè)數(shù) MPI_Datatype recvtype, //欲接收數(shù)據(jù)類型 int root, //根進(jìn)程編號 MPI_Comm m //通信子 )。 進(jìn) 程 0 進(jìn) 程 1 進(jìn) 程 21 0 0進(jìn) 程 31 0 0 2 0 0 3 0 0 4 0 02 0 03 0 04 0 0發(fā) 送緩 沖 區(qū)接 收緩 沖 區(qū)int recvbuf[4]。 /* 各進(jìn)程將計(jì)算結(jié)果放入 result */ result = … /* 進(jìn)程 2作為根進(jìn)程從各進(jìn)程收集 result放入 recvbuf */ MPI_Gather( amp。result, 1, MPI_INT, recvbuf, 1, MPI_INT, 2, MPI_COMM_WORLD )。 集合通信 七、進(jìn)程間同步 ? MPI_Barrier()將阻塞進(jìn)程,直到組內(nèi)進(jìn)程都到達(dá)該點(diǎn) MPI_Barrier():組內(nèi)進(jìn)程同步 int MPI_Barrier( MPI_Comm m //通信子 )。 組和通信子 組和通信子 一、簡介 ? 如果要在 MPI基礎(chǔ)上開發(fā)通用算法庫,為避免與應(yīng)用程序的進(jìn)程相互影響,通常需要在算法庫內(nèi)使用組和通信子的管理機(jī)制 ? 組 (group):一組有序的進(jìn)程集合,組內(nèi)每個(gè)進(jìn)程以進(jìn)程號 (rank)標(biāo)識 ? 通信子 (municator ):定義了封裝 MPI通信的基本模型 – 組內(nèi)通信子 (intramunicator) ? 同屬一個(gè)組的進(jìn)程之間通信的實(shí)體 – 組間通信子 (intermunicator) ? 分屬不同組的進(jìn)程之間通信的實(shí)體 組和通信子 二、組管理 函數(shù)名稱 功 能 組的構(gòu)建與取消 MPI_Comm_group() 返回與通信子 m相關(guān)的組 MPI_Group_free() 釋放組對象 MPI_Group_union() 合并兩個(gè)組,形成一個(gè)新組 MPI_Group_intersection() 求兩個(gè)組的交集 MPI_Group_difference() 求存在于一個(gè)組而不存在于另一個(gè)組的進(jìn)程,形成新組 MPI_Group_incl() 將進(jìn)程組中前 n個(gè)進(jìn)程組成一個(gè)新組 MPI_Group_excl() 將進(jìn)程組中前 n個(gè)進(jìn)程刪除后組成一個(gè)新組 訪問組的相關(guān)信息 MPI_Group_size() 返回指定進(jìn)程組中的進(jìn)程個(gè)數(shù) MPI_Group_rank() 返回調(diào)用進(jìn)程在進(jìn)程組中的編號 MPI_Group_translate_ranks() 返回一個(gè)進(jìn)程組中的 n個(gè)進(jìn)程在另一個(gè)組中的編號 MPI_Group_pare() 比較兩個(gè)進(jìn)程組中的進(jìn)程及編號并返回結(jié)果 組和通信子 三、通信子管理 MPI_Comm_create():利用進(jìn)程組創(chuàng)建新的通信子 int MPI_Comm_create( MPI_Comm m, //現(xiàn)有通信子 MPI_Group grp, //進(jìn)程組 MPI_Comm *newComm //新建的通信子 )。 函數(shù)名稱 功 能 通信子的創(chuàng)建與取消 MPI_Comm_create() 利用進(jìn)程組創(chuàng)建新的通信子 MPI_Comm_dup() 復(fù)制通信子 MPI_Comm_split() 將通信子關(guān)聯(lián)的進(jìn)程組分為兩個(gè)子組 MPI_Comm_free() 將通信子標(biāo)記為無效 訪問信息 MPI_Comm_size() 返回通信子關(guān)聯(lián)的進(jìn)程組中進(jìn)程個(gè)數(shù) MPI_Comm_rank() 返回調(diào)用進(jìn)程在進(jìn)程組中編號 MPI_Comm_pare() 比較兩個(gè)通信子并返回結(jié)果 組和通信子 三、通信子管理 創(chuàng)建新組和通信子代碼示例 int ranks[4][4] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } }。 MPI_Group globalGroup, newGroup。 MPI_Comm rowComm[numCols]。 /* 獲取當(dāng)前組 */ MPI_Comm_group( MPI_COMM_WORLD, amp。globalGroup )。 /* 將當(dāng)前組中前 P/numCols個(gè)進(jìn)程形成新組 */ MPI_Group_incl( globalGroup, P / numCols, ranks[rowNumber], amp。newGroup )。 /* 為新組創(chuàng)建通信子 */ MPI_Comm_create( MPI_COMM_WORLD, newGroup, amp。newComm )。 random = rand()。 /* 在新通信子范圍內(nèi)廣播隨機(jī)數(shù) */ MPI_Bcast( amp。random, 1, MPI_INT, rowNumber*numCols, newComm )。 組和通信子 ? 組和通信子都可在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建和刪除 ? 一個(gè)進(jìn)程可以同時(shí)屬于多個(gè)組 /通信子,其在各自的組 /通信子內(nèi)擁有唯一的 rank 0 1234567891011M PI _ COM M _ WORLD0 1234567891011group 2group 10 ( 0 )1 ( 1 )2 ( 2 ) 3 ( 3 )4 ( 4 )5 ( 5 )Co mm 16 ( 0 )7 ( 1 )9 ( 3 )8 ( 2 )11 ( 5 )10 ( 4 )Co mm 2分組通信示例 注意:一個(gè)進(jìn)程在不同組 /通信子內(nèi)的 rank不相等 MPI與多線程 MPI與多線程 ? MPI進(jìn)程中可以執(zhí)行多個(gè)線程,同一個(gè)進(jìn)程的多個(gè)線程具有均等的機(jī)會(huì)參與該進(jìn)程的 MPI通信 ? 應(yīng)用程序自身負(fù)責(zé)維護(hù)多線程安全 – 例如:為避免線程的 MPI通信相互干擾,可以讓不同的線程使用不同的通信子 ? MPI并不提供多線程編程接口 – 可以與 pthread或 OpenMP配合編程 ? MPI要求 MPI_Init()和 MPI_Finalize()必須在相同線程內(nèi)配對執(zhí)行,執(zhí)行這兩個(gè)操作的線程稱為主線程 (main thread) – 必須在所有線程的 MPI調(diào)用結(jié)束后,主線程才可以執(zhí)行MPI_Finalize() ? 同一進(jìn)程內(nèi),不允許兩個(gè)線程同時(shí)等待一個(gè) MPI調(diào)用完成 – 需由程序的線程間同步 /互斥機(jī)制保證 MPI與多線程 MPI+OpenMP混合編程簡單示例 include include include int main(int argc,char **argv) { int numProcs, myid。 MPI_Init( amp。argc, amp。argv )。 MPI_Comm_size( MPI_COMM_WORLD, amp。numProcs)。 MPI_Comm_rank( MPI_COMM_WORLD, amp。myid )。 pragma omp parallel num_threads(2) { printf(thread %d in process %d\n, omp_get_thread_num(), myid )。 } MPI_Finalize()。 return 0。 } 運(yùn)行結(jié)果 (啟動(dòng) 5個(gè) MPI進(jìn)程 ): thread 0 in process 1 thread 1 in process 1 thread 0 in process 3 thread 1 in process 3 thread 0 in process 4 thread 1 in process 4 thread 0 in process 0 thread 0 in process 2 thread 1 in process0 thread 1 in process 2 編譯時(shí)增加 –mp選項(xiàng): mpicc –o xxx mp
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1