完成评论中提到的更改后,没有获得任何输出。
我是MPI的新手。如果我使用两个以上的进程运行它,我在控制台上会得到另外两行:
1-更多进程已发送帮助消息help-mpi-errors.txt / mpi_errors_are_fatal
2-设置MCA参数" orte_base_help_aggregate"为0以查看所有帮助/错误消息。
我做错了什么? 这是我终端上的完整输出:
*** MPI_Bcast中发生错误
***报告过程[4248174593,1]
***关于传播者MPI_COMM_WORLD
*** MPI_ERR_TYPE:数据类型无效
*** MPI_ERRORS_ARE_FATAL(此通讯器中的进程现在将中止,
***并且可能是你的MPI工作)
另外1个进程发送了帮助消息help-mpi-errors.txt / mpi_errors_are_fatal设置MCA参数" orte_base_help_aggregate"到0 查看所有帮助/错误消息
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char** argv)
{
const int server = 0;
const int source = server;
float* array = (float*)NULL;
int length;
int num_procs, my_rank, mpi_error_code;
int index;
mpi_error_code = MPI_Init(&argc, &argv);
mpi_error_code = MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
mpi_error_code = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
/*input, allocate, initialize on server only*/
if(my_rank == server){
scanf("%d", &length);
array = (float*) malloc(sizeof(float) * length);
for(index = 0; index < length; index++){
array[index] = 0.0;
}
}
/*broadcast, output on all processes*/
if(num_procs > 1){
mpi_error_code = MPI_Bcast(&length, 1, MPI_INT, source, MPI_COMM_WORLD);
if(my_rank != server){
array = (float*) malloc(sizeof(float) * length);
}
mpi_error_code = MPI_Bcast(array, length, MPI_INT, source, MPI_COMM_WORLD);
printf("%d: broadcast length = %d\n", my_rank, length);
}
mpi_error_code = MPI_Finalize();
}