第一个MPI程序

第一个MPI程序

C语言中

#define _CRT_SECURE_NO_WARNINGS

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

//const int MAX_STRLEN = 100;

int main(int argc, char *argv[]) {
	int my_rank;	/* rank of process */
	int p;			/* number of processes */
	int source;		/* rank of sender */
	int tag = 0;		/* tag for message */
	//char message[MAX_STRLEN ];	/* storage for message */
	char message[100];	/* storage for message */
	MPI_Status status;/* receive */

	/* Start up MPI */
	MPI_Init(&argc, &argv);

	/* Find out process rank */
	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

	/* Find out number of process */
	MPI_Comm_size(MPI_COMM_WORLD, &p);

	if (my_rank != 0) {
		/* create message */
		sprintf(message, "Greetings from process %d", my_rank);
		/* Use strlen+1 so that '\0' gets translatted */

		MPI_Send(message, strlen(message) + 1, MPI_CHAR, 0, tag, MPI_COMM_WORLD);
	}
	else {
		/* my_rank == 0 */
		printf("Greetings from process %d\n", my_rank);
		for (source = 1; source < p; source++) {
			MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status);
			printf("%s\n", message);
		}
	}

	/* Shut down MPI */
	MPI_Finalize();
	return 0;
}/* main */

运行结果
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS的作用

  1. 我们在编写c语言程序时有时会用到sprintf,strcpy,scanf,gets等函数,会产生警告和错误,这是由于这些c函数太旧而导致的不安全,系统会提示让在函数后面添加"_s"来解决错误。
  2. 此时我们有两种解决方案:
    a.在指定的源文件的开头定义:#define _CRT_SECURE_NO_WARNINGS (只限于该文件起作用)
    b.在项目属性里设置,这会在整个项目里生效,依次选择:属性->配置属性->C/C++ ->预处理器->预处理器定义->编辑
    最下面加上一行:_CRT_SECURE_NO_WARNINGS (注意不需要#define)

使用const要注意的地方

const的使用有局部变量和全局变量两种,而且在c和c++中用法有区别。

//global variable
const int a = 3;
int arr[a];

现在讨论全局变量情况,c中的const并不是真正的定义常量,如果是c,上边的程序会出错,而在c++中就不会,原因在于gcc认为a只是一个普通的全局变量,而变量是不能用来指定数组的长度的。当然,这是针对全局数组而言,如果是局部的数组的话,就算是int a = 3; int arr[a];这种都是可以的,因为c里面还有一种叫变长数组的东西。

具体的关于const的用法:https://www.cnblogs.com/ylan2009/p/4151744.html

MPI环境的配置

每个项目需要配置一次MPI,配置过程:https://blog.csdn.net/qq_36974075/article/details/81144807
注意,vs中一个项目可以有多个.c文件,但必须保证只能有一个main函数,否则会报错。

猜你喜欢

转载自blog.csdn.net/Albert_Ejiestein/article/details/84657838