Mpi 为什么此代码只在有限数量的处理器上运行?

Mpi 为什么此代码只在有限数量的处理器上运行?,mpi,Mpi,我编写这段代码是为了测量MPI_Bcast()的时间墙,但这段代码只在特定数量的处理器上运行—8、16、24、32。我需要它能够运行任何数量的处理器和任何大小的阵列。分段有一个错误,它不允许在数组大小为2^13或更大的情况下运行 #include<mpi.h> #include<stdio.h> #include<stdlib.h> #include<math.h> int main(int argc, char *argv[]){ MPI_

我编写这段代码是为了测量MPI_Bcast()的时间墙,但这段代码只在特定数量的处理器上运行—8、16、24、32。我需要它能够运行任何数量的处理器和任何大小的阵列。分段有一个错误,它不允许在数组大小为2^13或更大的情况下运行

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

int main(int argc, char *argv[]){
  MPI_Init(&argc, &argv);
  int rank, size;
  long int N = pow(2,12);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);

  long double start, end;
  float* buffer = (float*)malloc(sizeof(float*) * N + 1);

  if(rank == 0){
    /*Creating data array of N random floating numbers*/
    for(int i =0; i < N; i++){
      buffer[i] = rand();
      buffer[i]= buffer[i]/rand();
      }

    start = MPI_Wtime();
    printf("Start Time:%Lf\nRoot processor-Rank %d- started broadcasting data buffer of %li floating numbers...\n", start, rank, N);
    MPI_Bcast(buffer, N, MPI_FLOAT, 0,MPI_COMM_WORLD);
    end = MPI_Wtime();
    printf("Total time elapsed: %Lf\n", end - start);
  }

  if(rank != 0){
    printf("Processor %d of %d processors, received the broadcast.\n", rank, size);
  }
  /*if(rank == 0){
    end = MPI_Wtime();
    printf("Total time elapsed: %Lf\n", end - start);}*/

  MPI_Finalize();

}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
MPI_Init(&argc,&argv);
int等级、大小;
长整数N=功率(2,12);
MPI通信等级(MPI通信世界和等级);
MPI_通信大小(MPI_通信世界和大小);
长双起点,终点;
float*buffer=(float*)malloc(sizeof(float*))*N+1;
如果(秩==0){
/*创建N个随机浮点数的数据数组*/
对于(int i=0;i
MPI\u Bcast()
是一个集体操作,因此可以由所有列组调用。注意您的
malloc()
是错误的,应该是
malloc(sizeof(float)*N)
非常感谢!我将进行修改并返回结果。是的,问题已解决!非常感谢。