1. 程式人生 > >MPI:非阻塞實現節點間的迴圈訊息傳遞

MPI:非阻塞實現節點間的迴圈訊息傳遞

非阻塞實現節點間的迴圈訊息傳遞

一、題目要求

MPI非阻塞方式實現節點間的迴圈訊息傳遞

二、思路

使用MPI_Isend、MPI_Irecv和MPI_Wait等函式;

三、我的程式碼

#include <stdio.h>
#include <string.h>
#include "mpi.h"

int main(int argc, char *argv[])
{
    char sendmsg[100] = "asdfasdf";
    char recvmsg[100] = "";

    int myid, numprocs;

    MPI_Init(&argc, &argv);

    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

    int
dest = myid+1; int source = myid-1; if(myid == 0) source = numprocs-1; if(myid == numprocs-1) dest = 0; //傳送 MPI_Request request1; MPI_Status status1; MPI_Isend(sendmsg, strlen(sendmsg), MPI_CHAR, dest, 99, MPI_COMM_WORLD, &request1); //接收 MPI_Request request2; MPI_Status status2; MPI_Irecv(recvmsg, 100
, MPI_CHAR, source, 99, MPI_COMM_WORLD, &request2); MPI_Wait(&request2, &status2); //列印 // printf("has send from %d to %d\n", myid, dest); // printf("has recv from %d to %d\n", source, myid); // printf("%s", recvmsg); return 0; }

相關推薦

MPI阻塞實現節點迴圈訊息傳遞

非阻塞實現節點間的迴圈訊息傳遞 一、題目要求 MPI非阻塞方式實現節點間的迴圈訊息傳遞 二、思路 使用MPI_Isend、MPI_Irecv和MPI_Wait等函式; 三、我的程式碼 #

MPI學習4】MPI並行程式設計模式阻塞通訊MPI程式設計

這一章講了MPI非阻塞通訊的原理和一些函式介面,最後再用非阻塞通訊方式實現Jacobi迭代,記錄學習中的一些知識。 (1)阻塞通訊與非阻塞通訊 阻塞通訊呼叫時,整個程式只能執行通訊相關的內容,而無法執行計算相關的內容; 非阻塞呼叫的初衷是儘量讓通訊和計算重疊進行,提高程式整體執行效率。 整體對比見下圖:

Windows網路程式設計(八)阻塞模式(非同步模式)

前面幾篇文章介紹的無論是TCP通訊還是UDP通訊都是阻塞式的,它們在執行recv或recvfrom時會線上程中等待,直到接收到資訊為止,所以在應用的時候一般都需要開闢子執行緒,在子執行緒裡專門做這類事情,不然它會影響主執行緒的執行。  系統提供三種網路模型

系統技術業餘研究 » 節點通訊的通道微調

erlang節點間通訊是可以配置的,預設的是inet_tcp 。當2個節點要溝通的時候,net_kernel模組會負責建立必要的連線。 inet_tcp會呼叫底層的gen_tcp進行資料傳送接受。 rpc或者節點間的訊息互動都是通過這個port出去的。 在分佈節點間,有時候會有大量的訊息流動,那麼

JavaNIO阻塞NIO通訊及相關物件講解

1.ServerSocketChannel ServerSocketChannel是一個基於通道的socket監聽器。它同我們所熟悉的java.net.ServerSocket執行相同的基本任務,不過它增加了通道語義,因此能夠在非阻塞模式下執行。它可用靜態的open( )

FIFO 阻塞寫+阻塞讀+延時迴圈讀的一種方法

用mkfifo在當前目錄下建立一個myfifo的有名管道 只執行非阻塞寫的程式 open引數為O_WRONLY | O_NONBLOCK write失敗,這是man手冊裡面說明了的情況 如果open引數為O_RDWR | O_NONBLOCK 寫程式則可以立即返回 但是當執

java多執行緒設定 執行緒超時 阻塞實現

執行緒是屬於非同步計算模型,所以你不可能直接從別的執行緒中得到函式返回值。 這時候,Future就出場了。Futrue可以監視目標執行緒呼叫call的情況,當你呼叫Future的get()方法以獲得結果時,當前執行緒就開始阻塞,直接call方法結束返回結果。

java 服務端多線線程阻塞實現05

@param 緩沖區溢出 nbsp oca span temp class 二層 字符串 /** * 非阻塞IO多線線程服務端 * 當一個任務進入多線程,這個任務線程需要處理接收信息、發送信息、因而發生I/O阻塞問題 * 利用selector可以實現異

vue 子父元件的資料傳遞

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>vue 非子父元件間的資料傳遞</title> <script src='vue.js'>

利用介面實現service與Activity訊息傳遞

背景 最近在仿Android版QQ,在實現訊息傳遞的時候遇到一個問題:當service接收到一條聊天訊息後,需要將該聊天訊息傳遞給聊天介面,但怎麼能是訊息無延時的在service和Activity中傳遞呢? 一般的做法是使用廣播,如在音樂播放器中播放進度的顯

程序通訊——訊息傳遞(訊號量同步PV操作)

【申明:本文僅限於自我歸納總結和相互交流,有紕漏還望各位指出。 聯絡郵箱:[email protected]】 在多工作業系統環境下,多程序/多執行緒間同時執行,並且這些程序之間存在一定的關聯,多個程序/執行緒可能為了完成同一個任務相互協作,這就是程序之間的同步,

QtQt實現Winsock網路程式設計—阻塞模式下的簡單遠端控制的開發(WSAAsyncSelect)

Qt實現Winsock網路程式設計—非阻塞模式下的簡單遠端控制的開發(WSAAsyncSelect) 前言 這邊部落格應該是 Qt實現Winsock網路程式設計—TCP服務端和客戶端通訊(多執行緒) 的姐妹篇,上篇部落格中的socket通訊中所用的Windows api函式 都是

moduo網路庫的reactor模式(下)實現阻塞TCP網路

1、在reactor框架下加入tcp Unix下的tcp連線也是經由socket檔案描述符(sockfd)實現的。此節只是封裝了listening sockefd進行監聽(accept(2)),得到的新連線(普通sockfd)直接提供給使用者讓使用者自行處理。下一節才進一步

利用Python中SocketServer 實現客戶端與伺服器阻塞通訊

利用SocketServer模組來實現網路客戶端與伺服器併發連線非阻塞通訊。 首先,先了解下SocketServer模組中可供使用的類: BaseServer:包含伺服器的核心功能與混合(mix-in)類掛鉤;這個類只用於派生,所以不會生成這個類的例項;可以考慮使用TCPS

異步阻塞socket的實現

print except 事件循環 port int 性能 run utf8 try 在學習使用scrapy爬蟲框架之前,需要了解一些基礎原理   我們知道HTTP請求是基於socket模塊進行發送和接受的,但是socket套接字的在使用的中存在著阻塞,不利用爬蟲的高性能運

爬蟲提高性能串行、線程進程、異步阻塞

過程 p s eight [] open 接收 text future io模型 閱讀目錄 一 背景知識 二 同步、異步、回調機制 三 高性能 一 背景知識 爬蟲的本質就是一個socket客戶端與服務端的通信過程,如果我們有多個url待爬取,只用一個線程

聊聊同步、異步、阻塞阻塞

AI strong 什麽 商業 同步與異步 好的 等待 不難 兩個 轉載:https://www.jianshu.com/p/aed6067eeac9 近來遇到了一些常見的概念,尤其是網絡編程方面的概念,如:阻塞、非阻塞、異步I/O等等,對於這些概念自己也沒有太清晰的認

Node.js創建應用+回調函數(阻塞/阻塞

我們 異步化 沒有 就會 幾分鐘 能說 image console cti 一、創建應用   如果我們使用PHP來編寫後端的代碼時,需要Apache 或者 Nginx 的HTTP 服務器,並配上 mod_php5 模塊和php-cgi。從這個角度看,整個"接收 HTTP 請

RTL基本知識阻塞賦值與阻塞賦值

ini 規則 rac init 基本知識 monitor 當前 並且 ima 0 醜話說在前邊 RHS:運算符(= or <=)右側的表達式 LHS:運算符(= or <=)左側的表達式 競爭(Race Condition):在同一仿真時間槽(time-slot

阻塞套接字實現並發處理

pre ror enc con put 服務 生成 import data 服務端 import socket server = socket.socket() server.setblocking(False) server.bind((‘0.0.0.0‘,8080)