c - MPI 2x 打印

标签 c parallel-processing printf mpi

我正在学习一些 MPI,并决定通过编写一个调用对象的程序来进行测试,例如 main.c -> 主程序,function.c -> 任何函数

function.c 仅使用 MPI。编译I如下:

gcc-c main.c

创建main.ompicc-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/

相关文章:

c - 在两个 XS Perl 模块之间共享 C 函数

c# - 如何将 c 合并到 c# 中(特别是 lex)

parallel-processing - Nifi- 使用 ExecuteStreamCommand 并行和并发执行

c - Keil C 编译器中的 strcpy 和 strcat

c - 在 C 循环中为变量和 fprintf 赋值

c - 在 C 中动态调整数组大小

python - 如何在 IPython.parallel 中使用交互式定义的类?

Bash:子进程访问变量

java - 如何使我的 println 以我想要的方式在这个 for 循环中打印多行打印轮廓/制表符?

c - 如何获取内核空间中特定元素的大小