首页 > 其他分享 >MPI实现非阻塞型点对点通信

MPI实现非阻塞型点对点通信

时间:2023-10-15 19:35:12浏览次数:19  
标签:int 点对点 request 阻塞 MPI flag WORLD message

#include <mpi.h>
#include<stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
MPI_Init( &argc, &argv );

int rank;
int size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank); // 获取当前进程的rank
MPI_Comm_size(MPI_COMM_WORLD, &size); // 获取总进程数
if (rank == 0) {
int message = 123;
for (int i = 1; i < size; ++i) {
MPI_Request request;
// 非阻塞发送消息
MPI_Isend(&message, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &request);

// 等待接收消息
while (1) {
int flag;
MPI_Test(&request, &flag, MPI_STATUS_IGNORE);
if (flag) {
int message_recv;
MPI_Recv(&message_recv, 1, MPI_INT, i, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf( "Process 0 received message:%d\n " , message_recv );
break;
}
usleep(1000); // 等待1秒
}
}
}
else {
int message = 456;
for (int i = 0; i < size - 1; ++i) {
MPI_Request request;
// 非阻塞接收消息
MPI_Irecv(&message, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);
int message_1=345;
MPI_Isend(&message_1, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);

// 等待发送消息
while (1) {
int flag;
MPI_Test(&request, &flag, MPI_STATUS_IGNORE);
if (flag) {
printf( "Process %d received message:%d \n",i+1 , message);;
break;
}
usleep(1000); // 等待1秒
}
}
}

MPI_Finalize();
return 0;
}

标签:int,点对点,request,阻塞,MPI,flag,WORLD,message
From: https://www.cnblogs.com/hahaah/p/17766007.html

相关文章

  • MPI广播聚合通信模式代码
    #include<mpi.h>#include<stdio.h>#include<unistd.h>intmain(intargc,char**argv){MPI_Init(&argc,&argv);intrank;intsize;MPI_Comm_rank(MPI_COMM_WORLD,&rank);//获取当前进程的rankMPI_Comm_size(MPI_......
  • Java NIO 中的 Buffer、Channel 和 Selector:高效的非阻塞 IO
    在Java中,标准的IO操作使用阻塞模式,这意味着每个IO操作都会阻塞当前线程直到操作完成。而JavaNIO(NewIO)提供了一种基于事件驱动的非阻塞IO模型,通过三大组件——Buffer(缓冲区)、Channel(通道)和Selector(选择器),可以实现更高效的IO操作。本文将详细介绍和说明这三大组件的......
  • Argument for '--moduleResolution' option must be: 'node', Unknown compiler opt
    node_modules/@vue/tsconfig/tsconfig.json(12,25):errorTS6046:Argumentfor'--moduleResolution'optionmustbe:'node','classic','node16','nodenext'.node_modules/@vue/tsconfig/tsconfig.json(33,5):erro......
  • UE4 compiling shader 0%(卡死)
    问题在笔者使用的UE4.27版本中,系统对于light和reflectioncapture的shadercompile总是停在0%,且看起来像是整个系统已经卡死的样子解决去Google看了下,发现需要更改引擎的配置文件,方式如下:找到位于你的UE引擎安装目录下的"UE_4.27\Engine\Config\ConsoleVariables.ini"文件,并......
  • android studio配置 compileOnly、implementation、api使用
    implementation:作用是编译同时打包,且当前mudule打包的aar或jar,不能被引用当前module的模块引用。api:作用是编译同时打包,且当前mudule打包的aar或jar,能被引用当前module的模块引用。compileOnly:作用是只编译不打包。比如项目中要引用aarA,如果项目中其他模块已经引用打包过了......
  • Codeforces Round 707 (Div. 2, based on Moscow Open Olympiad in Informatics) B. N
    按以下\(n\)次操作制作蛋糕。叠上第\(i\)块面包,然后浇上\(a_i\)单位的奶油。可以使当前往下\(a_i\)块面包沾上奶油。输出空格隔开的\(n\)个数,第\(i\)个的\(0/1\)代表第\(i\)块面包是否沾有奶油。比较显然的思路可以进行差分修改。view1#include<bits/std......
  • 阻塞队列
    什么是阻塞队列阻塞队列是一种特殊的队列,它支持线程安全并发操作的同时提供了阻塞操作功能。在阻塞队列中,当队列为空时,从队列中取元素的操作将被阻塞,而当队列已满时,往队列中放元素的操作也会被阻塞。阻塞队列的应用场景阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加......
  • IEDA 中Maven 编译错误 Compilation failure的解决方法
    IEDA中Maven提示编译错误Compilationfailure 检查发现项目虽然已经配置了JDK11,但是却引用的是JRE1.5解决方法:1、修改maven的setting.xml文件中添加下面的配置: <profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk>......
  • Could not resolve all dependencies for configuration ':testCompileClasspath'. Us
    Gradleinit.gradle文件参数错误导致的Gradle加载失败 1allprojects{2repositories{3mavenLocal()4maven{name"Alibaba";url"https://maven.aliyun.com/repository/public"}//将http改为https5maven{name&......
  • 重新编译kyuubi-1.6.1版本使其提交flink sql流式任务时不阻塞
    kyuubi-1.6.1版本对于flinksql的支持不是很好,在提交流式任务时会阻塞进程,为了修复这个缺陷,需要修改源代码并重新编译待编译的kyuubi版本:kyuubi-1.6.1-incubating适配的flink版本:flink-1.14.41、下载kyuubi-1.6.1-incubating版本的源代码,并导入IDEA中gitclone-bv1.6.1-incu......