1

TL;DR 我相信我使用 MPI_Send 错误地传输了一个字符串。发送字符串的最佳方式是什么?


我正在尝试将字符串从主进程发送到从进程,但我相信它没有发送整个字符串或没有在从端正确重建它。

主 MPI_Send 代码:

MPI_Send(&parent, sizeof(char) * selection::target_length(), MPI_BYTE, i, MSEND, MPI_COMM_WORLD);

从 MPI_Recv 代码:

char parentChars [selection::target_length()];

MPI_Recv(&parentChars, sizeof(char) * selection::target_length(), MPI_BYTE, 0, MSEND, MPI_COMM_WORLD, &status);

parent = parentChars;

断言assert(target.length() == candidate.length());失败并给出以下结果:

weasel: weaselparallel.cpp:34: static int selection::fitness(std::string): Assertion `target.length() == candidate.length()' failed.

↑ 这是每个从属进程的输出

然后是我认为由于错误传输的字符串而发生的分段错误:

mpiexec noticed that process rank 2 with PID 23531 on node node02.emperor exited on signal 11 (Segmentation fault).

6 total processes killed (some possibly by mpiexec during cleanup)
4

1 回答 1

0
  • 检查 MPI_Send 和 MPI_Recv 的定义,我认为你的第一个参数有问题。
  • 尝试省略 parent 和/或 parentChars 的 & 符号( & )取决于您的定义
  • 还检查从 MPI_Recv 返回的状态(特别是 MPI_ERROR )以获取有关正在发生的事情的更多信息
于 2013-04-30T06:43:03.387 回答