Mpi 为什么此代码只在有限数量的处理器上运行?
我编写这段代码是为了测量MPI_Bcast()的时间墙,但这段代码只在特定数量的处理器上运行—8、16、24、32。我需要它能够运行任何数量的处理器和任何大小的阵列。分段有一个错误,它不允许在数组大小为2^13或更大的情况下运行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_
#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)
非常感谢!我将进行修改并返回结果。是的,问题已解决!非常感谢。