从MPI的外部文件读取输入整数

从MPI的外部文件读取输入整数,mpi,Mpi,如何读取mpi的外部输入文件?我需要从外部文件(zadanie4_vstup.txt)中读取一个整数,以计算简单的阶乘。我试图用int变量(n)的地址替换MPI_Init()中的第二个参数,但看起来这是胡说八道。 多谢各位 #include <stdio.h> #include <mpi.h> int main(int argc, char ** argv) { FILE *fr, *fw; fr = fopen("zadanie4_vstup.txt

如何读取mpi的外部输入文件?我需要从外部文件(zadanie4_vstup.txt)中读取一个整数,以计算简单的阶乘。我试图用int变量(n)的地址替换MPI_Init()中的第二个参数,但看起来这是胡说八道。 多谢各位

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

int main(int argc, char ** argv)
{
    FILE *fr, *fw;

    fr = fopen("zadanie4_vstup.txt", "r");
    fw = fopen("zadanie4_vystup.txt", "w");


    int nproc, me;
    int fakt=1, i, buff, n;
    MPI_Status stat;

    fscanf(fr, "%d", &n);

    MPI_Init(&argc, &argv);

    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &me);

    #pragma omp parallel for private(i) reduction(*:fakt)
    for(i=me*n/nproc+1; i<=(me+1)*n/nproc; i++) {
      fakt *= i;
    }

    if(nproc > 1) {
      if(me == 0) {
        for(i=1; i<nproc; i++) {
          MPI_Recv(&buff, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &stat);
          fakt*=buff;
        }
      } else {
        MPI_Send(&fakt, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
      }
    }
    if(me == 0) {
      fprintf(fw, "%d! = %d\n", n, fakt);
    }

    fclose(fr);
    fclose(fw);

    MPI_Finalize();
#包括
#包括
int main(int argc,字符**argv)
{
文件*fr,*fw;
fr=fopen(“zadanie4_vstup.txt”,“r”);
fw=fopen(“zadanie4_vystup.txt”,“w”);
国际nproc,我;
int fakt=1,i,buff,n;
MPI_状态统计;
fscanf(fr、%d、&n);
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和nproc);
MPI通信等级(MPI通信世界和me);
#pragma omp并行专用(i)缩减(*:fakt)
对于(i=me*n/nproc+1;i 1){
如果(me==0){

对于(i=1;i,这里有一个在命令行上读取
n
的程序版本

注意:我使用
MPI\u Reduce()


这是一个在命令行上读取
n
的程序版本

注意:我使用
MPI\u Reduce()


首先,您应该只在秩0上读取输入文件
fopen()/fclose()
fw
。您可能还希望只读取秩0上的输入文件,然后将其读取到所有其他秩。首先,您应该只读取
fopen()/fclose()
fw
在秩0上。您可能还希望只读取秩0上的输入文件,然后
MPI\u Bcast()
将其发送给所有其他秩谢谢您,GillesMPI\u Reduce是个好主意。但我仍然没有决定从外部源获取阶乘变量。我如何才能将源代码放到秩0上呢?
如果(0==me){FILE*fr=fopen(“inputfile.txt”,“r”);fscanf(fr,“%d”,&n)}MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);
谢谢你,GillesMPI_Reduce是个好主意。但我仍然没有决定从外部源代码获取阶乘变量。请问如何将源代码放在rank0上?
如果(0==me){FILE*fr=fopen(“inputfile.txt”,“r”);fscanf(fr、%d、&n)}MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);
#include <stdio.h>
#include <stdlib.h>

#include <mpi.h>

int main(int argc, char *argv[]) {
    int nproc, me;
    int fakt=1, res, i, buff, n;
    MPI_Status stat;

    MPI_Init(&argc, &argv);

    n = atoi(argv[1]);

    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &me);

    #pragma omp parallel for private(i) reduction(*:fakt)
    for(i=me*n/nproc+1; i<=(me+1)*n/nproc; i++) {
      fakt *= i;
    }

    MPI_Reduce(&fakt, &res, 1, MPI_INT, MPI_PROD, 0, MPI_COMM_WORLD);
    if(me == 0) {
      printf("%d! = %d\n", n, res);
    }


    MPI_Finalize();
    return 0;
}
$ mpirun -np 4 ./fakt 6
6! = 720