我正在学习一些 MPI,并决定通过编写一个调用对象的程序来进行测试,例如 main.c
-> 主程序,function.c
-> 任何函数
function.c 仅使用 MPI。编译I如下:
gcc-c main.c
创建main.o
,mpicc-c
创建function.c
function.o
,当然我也创建了文件function.h
。
我用mpicc-o
程序编译main.o
function.o
这是main.c
#include <stdio.h>
#include "function.h"
void main(int argc, char *argv[])
{
printf("Hello\n");
function();
printf("Bye\n");
}
只是函数具有 MPI 代码,但是当我运行程序 mpiexe -np 2
我得到
Hello
Hello
----- function job here -----
Bye
Bye
但我想要它是
Hello
------ function job -----
Bye
我能做什么?
最佳答案
您的整个程序在您使用 -np 2
设置的两个处理器上运行。防止重复打印输出、最终结果等的一种常见方法是让一个线程通过首先检查线程 ID 来执行这些操作。喜欢:
int id;
MPI_Comm_rank(MPI_COMM_WORLD, &id);
if (id == 0) {
printf("only process %d does this one\n", id);
}
printf("hello from process %d\n", id); // all processes do this one
当开始使用 MPI 时,我发现打印这些 ID 号以及每个线程正在处理的部分结果或数据很有帮助。帮助我更好地理解正在发生的事情。
关于c - MPI 2x 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201330/