Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran `MPI_error_TRUNCATE:消息截断`错误_Fortran_Mpi_Fortran90_Gfortran_Openmpi - Fatal编程技术网

Fortran `MPI_error_TRUNCATE:消息截断`错误

Fortran `MPI_error_TRUNCATE:消息截断`错误,fortran,mpi,fortran90,gfortran,openmpi,Fortran,Mpi,Fortran90,Gfortran,Openmpi,我遇到了一个与前面讨论的问题类似的问题,我有一个MPI代码,它对一个向量的行进行求和,这个向量有特定的行数。我附上 当我尝试在线编译一个核心mpirun-n1./program时,我得到: please enter the number of numbers to sum: 500000 [federico-C660:9540] *** An error occurred in MPI_Recv [federico-C660:9540] *** on communicator MPI_COMM_

我遇到了一个与前面讨论的问题类似的问题,我有一个MPI代码,它对一个向量的行进行求和,这个向量有特定的行数。我附上

当我尝试在线编译一个核心
mpirun-n1./program
时,我得到:

please enter the number of numbers to sum:
500000
[federico-C660:9540] *** An error occurred in MPI_Recv
[federico-C660:9540] *** on communicator MPI_COMM_WORLD
[federico-C660:9540] *** MPI_ERR_TRUNCATE: message truncated
[federico-C660:9540] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
 sum    7812562500.0000000       calculated by root process.
--------------------------------------------------------------------------
mpirun has exited due to process rank 1 with PID 9539 on
node XXXXX1 exiting without calling "finalize".
500000总计125000250000.00000,由根进程计算。
总计为:125000250000.00000
因为我只有一个计算和的核,看起来还可以。但当我尝试使用多核
mpirun-n4./program
时,我得到:

please enter the number of numbers to sum:
500000
[federico-C660:9540] *** An error occurred in MPI_Recv
[federico-C660:9540] *** on communicator MPI_COMM_WORLD
[federico-C660:9540] *** MPI_ERR_TRUNCATE: message truncated
[federico-C660:9540] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
 sum    7812562500.0000000       calculated by root process.
--------------------------------------------------------------------------
mpirun has exited due to process rank 1 with PID 9539 on
node XXXXX1 exiting without calling "finalize".
我也为C程序解决了类似的问题。与2和3处理器相同


有人能帮我找出问题所在吗?我猜我在与“发件人”相关的MPI_RECV调用中犯了一个错误

  • 最明显的问题是接收变量num_rows_to_receive的语法错误。您已收到根进程在num_rows_to_received中计算的行,但使用变量num_rows_to_receive实际接收向量。
    
    调用mpi_recv(num_rows_to_receive,1,mpi_integer,
    根进程、mpi任意标记、mpi通信世界、,
    地位(ierr)
    调用mpi_recv(vector2、num_rows_to_receive、mpi_real8、root_进程、,
    mpi_任意标签、mpi_通信世界、状态、ierr)
    
  • 这应该可以解决错误

  • 第二个问题(至少在我的系统上可以看到)是MPI_REAL数据类型默认为MPI_REAL4,并且向量的大小被截断。所以我们无法得到所有元素的实际总和。将mpi_real更改为mpi_REAL8将解决求和问题,并且您可以获得所有任意数量列的精确求和值。
    
    ~/temp$mpirun-n 8./a.out
    请输入要求和的数字数:
    500000
    根进程计算的和1953156250.0000000。
    从进程1返回的部分和5859406250.0000000
    从进程2返回的部分和97656250.0000000
    从进程4返回的部分和17578156250.000000
    从进程5返回的部分和21484406250.000000
    从进程3返回的部分和13671906250.000000
    从进程6返回的部分和25390656250.000000
    从进程7返回的部分和29296906250.000000
    总计为:125000250000.00000

  • 请在这里内联您的代码。如果是MCVE,它应该很容易安装。给我答案。非常感谢。我很感激。我可以说这个问题可以结束了,因为我得到了答案。非常感谢大家。