⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example.c

📁 这是我学习并行编程的第一个程序
💻 C
字号:
/*
进程0发送一个整数给进程1;进程1将该数加1,传递给进程2;进程2再将该数加1,再传递给进程3;依次类推,最后,进程P-1将该数传递给进程0,由进程0负责广播该数给所有进程,并打印输出。
*/

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

int main(argc, argv)
int argc;
char * * argv;
{
	MPI_Status status; 
	int my_rank;
	int p;
	int source;
	int dest;
	int tag;
	int data;

	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
	MPI_Comm_size(MPI_COMM_WORLD, &p);
	//printf("my_rank = %d, p = %d,\n",my_rank, p);

	/*******************************************/
	data = 0;
	tag = 5;

 	source = my_rank-1;
	if (source==-1)
		source = p - 1;
	printf("my %d source is %d\n",my_rank, source);
	dest = my_rank + 1;
	if (dest==p)
		dest = 0;
	printf("my %d destination is %d\n",my_rank, dest);
 	if (my_rank==0) 
	{
		MPI_Send(&data,1,MPI_INT,dest,tag,MPI_COMM_WORLD);
		MPI_Recv(&data,1,MPI_INT,source,tag,MPI_COMM_WORLD,&status);
	}
	else
	{
		MPI_Recv(&data,1,MPI_INT,source,tag,MPI_COMM_WORLD,&status);
		data=data + 1;
		MPI_Send(&data,1,MPI_INT,dest,tag,MPI_COMM_WORLD);
	}
	
	MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
 	if(my_rank==0) 
	{
		if(data==(p-1)) 
			printf("Successful, data=%d\n",data);
		else
			printf("Failure, data=%d\n",data);
	}

	MPI_Finalize();	
	return (-1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -