c - 设置 MPI_Info : value is too long 时出错

标签 c mpi

我正在使用将生成进程的主机(MPI_Comm Spawn)配置我的 MPI_Info

问题是当我使用大量进程时,设置没有正确执行,抛出这个错误:

Fatal error in MPI_Info_set: Invalid MPI_Info value , error stack:
MPI_Info_set(117): MPI_Info_set(info=0x9c000000, key=hosts, value=cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda00,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda01,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda02,cuda03,cuda03,cuda03,cuda03,cuda04,cuda0
MPI_Info_set(97).: Value is too long 

“值”字段是主机列表,这个主机列表被分配给 MPI_Info 结构:

MPI_Info_set(info, "hosts", mpihosts);

其中“mpihosts”是一个char*

我可以更改MPI_Info的容量吗?

最佳答案

确实,在 MPI_INFO 中描述值的字符串有一个硬编码的最大长度。它在 mpi.h 中定义,并且它被命名为 MPI_MAX_INFO_VAL。根据MPI standards , 在第 9 章 (p397) 的开头:

values have an implementation-defined maximum length of MPI_MAX_INFO_VAL... ... If either key or value are larger than the allowed maximums, the errors MPI_ERR_INFO_KEY or MPI_ERR_INFO_VALUE are raised, respectively.

让我们打印这个值:通过尝试 printf("MPI_MAX_INFO_VAL is %d\n",MPI_MAX_INFO_VAL);,我的 openmpi 值为 256...有一行 #define MPI_MAX_INFO_VAL MPICH2的文件mpich3-2/src/include/mpi.h.in中的1024。因此,主机名列表可能太长而无法作为键值存储在 MPI_INFO 结构中。

作为替代方案,主机列表可以存储在文件中,文件名可以作为键 的值提供给 MPI_Comm_spawn() MPI_INFO 结构的 hostfile,详见 documentation of OpenMPI

关于c - 设置 MPI_Info : value is too long 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717628/

相关文章:

c - 使用宏提取 typeof 运算符给我们的信息(C 语言)

cygwin - 将日志写入标准输出 (MPI)

c - MPI_Scatter 段错误(信号 11)

c - 在 MPI 中发送和接收动态数组

linux - 安装 mpich2 总是安装我 mpich

c++ - 在 Linux/C++ 中,发送到线程/进程的信号是否使其变为事件状态?

c - 在 C 中以更高的精度存储数字

C 写入字符串(询问具体功能)

c - neko_vm_custom() 和 neko_vm_set_custom() 有什么用?

c - MPI 通信中出现奇怪的 double 值 - 内存问题?