MPI_Bcast中的分段错误

时间:2015-03-29 01:06:04

标签: c++ mpi

我是Open MPI的新手,我尝试使用它来运行使用字典攻击的强力密码破解程序(我实际上并没有破解密码,它只是一个练习)。我使用的字典是vector<char>,其中的单词由空终止符分隔。

使用MPI_Barriers,我确定错误发生在第二个MPI_Bcast(广播MPI_Bcast的{​​{1}})中。我已经验证了缓冲区的内容(向量的大小)是否已成功广播。

我得到的错误是分段错误(11),代码&#34;地址未映射&#34;。

出于某种原因,当使用&gt;运行时,这总是发生在等级2过程中2个过程。如果我只运行2个进程,它将发生在1级进程中。 我不知道它是否总是因为时间安排而被排在第2级过程中,因为时间安排,或者它实际上只是排名2过程中的一个问题(我认为最不可能鉴于它也发生在2个过程中。

在其他类似的问题中,问题在于如何传递缓冲区。正常的问题是用户手动在c程序中分配内存,将指针的地址传递给数组而不是指针本身。这不是问题所在(我甚至在绝望中尝试过,但它会被编译错误)。

我现在不知道问题可能是什么。它可能与传递缓冲区或其他完全相关。如果需要更多代码,请告诉我。

相关代码:

dictionary

1 个答案:

答案 0 :(得分:1)

您的问题是您的MPI_Datatype不匹配。您使用的是MPI_INT,而dictionarypasswords的{​​{1}}类型为std::vector。请改用char

此外,正如PaulMcKenzie指出的那样,如果向量的大小为MPI_CHAR&dictionary[0]仍然会失败。对于干净的代码,您应该检查这个条件或断言它。

以下代码适合您:

0