为什么我会收到"无效的数据类型"此示例mpi广播节目中出现错误?

时间:2016-05-13 15:24:46

标签: mpi openmpi

完成评论中提到的更改后,没有获得任何输出。

我是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();
}

0 个答案:

没有答案