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

正文內(nèi)容

并行程序設(shè)計(jì)hppt課件(完整版)

  

【正文】 I并行環(huán)境簡(jiǎn)介 三、 MPI的幾個(gè)基本概念 ? 緩沖區(qū): MPI定義了 3種緩沖區(qū) – 應(yīng)用緩沖區(qū):保存將要發(fā)送或接收的數(shù)據(jù)的地址空間 – 系統(tǒng)緩沖區(qū): MPI環(huán)境為通信所準(zhǔn)備的存儲(chǔ)空間 – 用戶(hù)向系統(tǒng)注冊(cè)的緩沖區(qū):用戶(hù)使用某些 API時(shí),在程序中顯式申請(qǐng)的存儲(chǔ)空間,然后注冊(cè)到 MPI環(huán)境中供通信所用 ? 節(jié)點(diǎn)間傳送消息時(shí),可能需要消息在緩沖區(qū)之間拷貝 ? 為減少消息傳輸延遲 – 更高速的互連網(wǎng)絡(luò) – 更簡(jiǎn)單的協(xié)議棧 – 避免消息多次拷貝 – 非阻塞式發(fā)送 – … MPI并行環(huán)境簡(jiǎn)介 三、 MPI的幾個(gè)基本概念 ? 通信子 (municator) – 是 MPI環(huán)境管理進(jìn)程及通信的基本設(shè)施 – 定義一個(gè)可以相互間通信的進(jìn)程集合,進(jìn)程間的消息傳遞需放在通信子中進(jìn)行 – MPI支持通信子內(nèi) (Intramunicator)通信和通信子間 (Intermunicator)通信 – 不同空間中的消息互不干擾 – MPI啟動(dòng)后,自動(dòng)創(chuàng)建 2個(gè)組內(nèi)通信子 ? MPI_COMM_WORLD:?jiǎn)?dòng)時(shí)的所有進(jìn)程 ? MPI_COMM_SELF:僅包含進(jìn)程自身 ? 進(jìn)程號(hào)與進(jìn)程組 – 進(jìn)程號(hào) (rank)需放在某個(gè)通信子范圍內(nèi)才有效 ? 在一個(gè)通信子中,進(jìn)程號(hào)從 0開(kāi)始編號(hào),為一連續(xù)整數(shù)序列 – 通信中必須使用進(jìn)程號(hào)標(biāo)識(shí)消息的源和目的 – 定義一個(gè)通信子時(shí),也就指定了一組共享該空間的進(jìn)程組 (group) ? 訪問(wèn)文件需要使用句柄 ? 訪問(wèn)網(wǎng)絡(luò)需要使用套接字 ? MPI中傳送消息需要用通信子 MPI并行環(huán)境簡(jiǎn)介 四、 MPI基本調(diào)用 MPI初始化與結(jié)束 MPI_Init():初始化 MPI MPI_Finalize():結(jié)束 MPI int MPI_Init( int *argc, //命令行參量數(shù) char **argv //命令行參量 )。 int main( int argc, char **argv ) { int i。 for ( i = 0。 MPI_Send( sbuf, BUF_SIZE, MPI_INT, 0, 1, MPI_COMM_WORLD )。 ? 標(biāo)準(zhǔn)模式下的緩沖區(qū)使用 – 由 MPI環(huán)境決定是否對(duì)要發(fā)送的消息進(jìn)行緩沖 – 如果緩沖了待發(fā)送的數(shù)據(jù),則與緩沖通信模式一樣,即使接收端尚未啟動(dòng)接收操作,發(fā)送函數(shù)也可立即返回 – 出于性能和資源優(yōu)化考慮, MPI會(huì)提供一定數(shù)量的緩沖區(qū),超過(guò)緩沖區(qū)容量時(shí),發(fā)送方需要阻塞直到接收操作收取數(shù)據(jù)后才可返回 ? 阻塞式通信中,發(fā)送端完成與否不僅取決于本地進(jìn)程的狀態(tài),還與遠(yuǎn)端接收進(jìn)程的狀態(tài)有關(guān) 點(diǎn)到點(diǎn)通信 二 、 標(biāo)準(zhǔn)發(fā)送和接收 ? 阻塞式通信時(shí)發(fā)送 /接收進(jìn)程的幾種狀態(tài) ① 雙方啟動(dòng)發(fā)送和接收操作 – proc0會(huì)立即啟動(dòng)數(shù)據(jù)傳輸操作 ② 發(fā)送動(dòng)作早于接收動(dòng)作啟動(dòng) – 如消息長(zhǎng)度 緩沖區(qū), proc0需等待直到proc1啟動(dòng)接收; – 如消息長(zhǎng)度 ≤緩沖區(qū),消息存入緩沖區(qū),發(fā)送函數(shù)立即返回,但實(shí)際的消息傳輸需等到接收啟動(dòng)后才開(kāi)始。 ?該操作將立即返回 MPI_Ssend( buf2, count, MPI_REAL, 1, tag2, MPI_COMM_WORLD )。 MPI_Comm_rank( MPI_COMM_WORLD, amp。status )。 MPI_Send( sbuf, BUFSIZE, MPI_INT, 0, tag, MPI_COMM_WORLD )。 MPI_Init( amp。 myArray = (int *)malloc( length_per_process*sizeof(int))。 i length_per_process。 }/*main()*/ 集合通信 三、掃描 (scan) ? 相當(dāng)于逐級(jí)規(guī)約 – 進(jìn)程 i對(duì)進(jìn)程 0, 1, …, i 執(zhí)行規(guī)約 MPI_Scan():掃描操作 int MPI_Scan( void *sendbuffer, //欲發(fā)送數(shù)據(jù)的地址 void *recvbuffer, //欲接收數(shù)據(jù)的地址 int count, //欲接收數(shù)據(jù)個(gè)數(shù) MPI_Datatype datatype, //數(shù)據(jù)類(lèi)型 MPI_OP op, //MPI操作符 MPI_Comm m //通信子 )。 } MPI_Bcast( amp。 char processor_name[MPI_MAX_PROCESSOR_NAME]。 MPI_Get_processor_name(processor_name,amp。 h = / (double) n。mypi, amp。 } 注: MPI_Wtime()用于 獲取當(dāng)前 MPI墻鐘時(shí)間 (wall clock time),常用于統(tǒng)計(jì)程序執(zhí)行時(shí)間 五、數(shù)據(jù)分發(fā) ? MPI_Scatter()從根進(jìn)程分發(fā)數(shù)據(jù)到組內(nèi)所有進(jìn)程 MPI_Scatter():從根進(jìn)程分發(fā)數(shù)據(jù)到通信子中所有進(jìn)程,包括根進(jìn)程自身 int MPI_Scatter( void *sendbuffer, //欲發(fā)送數(shù)據(jù)的地址 int sendcount, //欲發(fā)送數(shù)據(jù)個(gè)數(shù) MPI_Datatype sendtype, //欲發(fā)送數(shù)據(jù)類(lèi)型 void *destbuffer, //欲接收數(shù)據(jù)的地址 int destcount, //欲接收數(shù)據(jù)個(gè)數(shù) MPI_Datatype desttype, //欲接收數(shù)據(jù)類(lèi)型 int root, //根進(jìn)程編號(hào) MPI_Comm m //通信子 )。 /* 各進(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ù)類(lèi)型 void *recvbuffer, //欲接收數(shù)據(jù)的地址 int recvcount, //欲接收數(shù)據(jù)個(gè)數(shù) MPI_Datatype recvtype, //欲接收數(shù)據(jù)類(lèi)型 int root, //根進(jìn)程編號(hào) MPI_Comm m //通信子 )。 MPI_Comm rowComm[numCols]。 /* 在新通信子范圍內(nèi)廣播隨機(jī)數(shù) */ MPI_Bcast( amp。 MPI_Comm_rank( MPI_COMM_WORLD, amp。 pragma omp parallel num_threads(2) { printf(thread %d in process %d\n, omp_get_thread_num(), myid )。 組和通信子 ? 組和通信子都可在運(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與多線(xiàn)程 MPI與多線(xiàn)程 ? MPI進(jìn)程中可以執(zhí)行多個(gè)線(xiàn)程,同一個(gè)進(jìn)程的多個(gè)線(xiàn)程具有均等的機(jī)會(huì)參與該進(jìn)程的 MPI通信 ? 應(yīng)用程序自身負(fù)責(zé)維護(hù)多線(xiàn)程安全 – 例如:為避免線(xiàn)程的 MPI通信相互干擾,可以讓不同的線(xiàn)程使用不同的通信子 ? MPI并不提供多線(xiàn)程編程接口 – 可以與 pthread或 OpenMP配合編程 ? MPI要求 MPI_Init()和 MPI_Finalize()必須在相同線(xiàn)程內(nèi)配對(duì)執(zhí)行,執(zhí)行這兩個(gè)操作的線(xiàn)程稱(chēng)為主線(xiàn)程 (main thread) – 必須在所有線(xiàn)程的 MPI調(diào)用結(jié)束后,主線(xiàn)程才可以執(zhí)行MPI_Finalize() ? 同一進(jìn)程內(nèi),不允許兩個(gè)線(xiàn)程同時(shí)等待一個(gè) MPI調(diào)用完成 – 需由程序的線(xiàn)程間同步 /互斥機(jī)制保證 MPI與多線(xiàn)程 MPI+OpenMP混合編程簡(jiǎn)單示例 include include include int main(int argc,char **argv) { int numProcs, myid。globalGroup )。 /* 各進(jìn)程將計(jì)算結(jié)果放入 result */ result = … /* 進(jìn)程 2作為根進(jìn)程從各進(jìn)程收集 result放入 recvbuf */ MPI_Gather( amp。 if ( rank == 2 ) { for ( i = 0。 if (myid == 0) { endwtime = MPI_Wtime()。 for (i = myid + 1。 fprintf(st
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1