MPI_bcast中是否存在变量大小限制?

时间:2014-05-27 11:32:26

标签: mpi mpich

我在四核双CPU(Intel Xeon)机器上使用intel fort编译器编译了最新的MPICH2(3.0.4)。

我遇到一个MPI_bcast问题,我无法广播数组

gpsi(1:201,1:381,1:38,1:20,1:7)

使它成为一个大小为407410920的数组。当我尝试广播这个数组时,我有以下错误

Fatal error in PMPI_Bcast: Other MPI error, error stack:
PMPI_Bcast(1525)......: MPI_Bcast(buf=0x7f506d811010, count=407410920,
MPI_DOUBLE_PRECISION, root=0, MPI_COMM_WORLD) failed
MPIR_Bcast_impl(1369).: 
MPIR_Bcast_intra(1160): 
MPIR_SMP_Bcast(1077)..: Failure during collective
rank 1 in job 31  Grace_52261   caused collective abort of all ranks
  exit status of rank 1: killed by signal 9 
MPI launch string is: mpiexec -n 2    %B/tvdbootstrap 
Testing MPI configuration with 'mpich2version'
Exit value was 127 (expected 0), status: execute_command_t::exited
Launching MPI job with command: mpiexec -n 2    %B/tvdbootstrap 
Server args: -callback 127.0.0.1:4142 -set_pw 65f76672:41f20a5c 

所以问题是,MPI_bcast中的变量大小是否存在限制,或者我的数组的大小是否超出它的处理范围?

2 个答案:

答案 0 :(得分:4)

正如John所说,你的数组太大了,因为int变量无法再描述它。在这种情况下,您有几个选择。

  1. 使用多个MPI调用来发送数据。对于此选项,您只需将数据划分为小于2 ^ 31的块并单独发送,直到您收到所有内容。

  2. 使用MPI数据类型。使用此选项,您需要创建数据类型来描述数据的某些部分,然后发送该数据类型的倍数。例如,如果您只是发送一个包含100个整数的数组,则可以使用MPI_TYPE_VECTOR创建10个整数的数据类型,然后发送10个新数据类型。当您第一次看到它们时,数据类型可能会有点混乱,但它们对于发送大数据或非连续数据非常有用。

答案 1 :(得分:2)

是的,有一个限制。它通常是2 ^ 31,所以大约有20亿个元素。你说你的阵列有4.07亿个元素,所以它看起来应该可行。但是,如果限制是20亿字节,那么你将超过它约30%。尝试将数组大小减半,看看是否有效。

请参阅:Maximum amount of data that can be sent using MPI::Send