我是Open MPI的新手,我尝试使用它来运行使用字典攻击的强力密码破解程序(我实际上并没有破解密码,它只是一个练习)。我使用的字典是vector<char>
,其中的单词由空终止符分隔。
使用MPI_Barriers
,我确定错误发生在第二个MPI_Bcast
(广播MPI_Bcast
的{{1}})中。我已经验证了缓冲区的内容(向量的大小)是否已成功广播。
我得到的错误是分段错误(11),代码&#34;地址未映射&#34;。
出于某种原因,当使用&gt;运行时,这总是发生在等级2过程中2个过程。如果我只运行2个进程,它将发生在1级进程中。 我不知道它是否总是因为时间安排而被排在第2级过程中,因为时间安排,或者它实际上只是排名2过程中的一个问题(我认为最不可能鉴于它也发生在2个过程中。
在其他类似的问题中,问题在于如何传递缓冲区。正常的问题是用户手动在c程序中分配内存,将指针的地址传递给数组而不是指针本身。这不是问题所在(我甚至在绝望中尝试过,但它会被编译错误)。
我现在不知道问题可能是什么。它可能与传递缓冲区或其他完全相关。如果需要更多代码,请告诉我。
相关代码:
dictionary
答案 0 :(得分:1)
您的问题是您的MPI_Datatype
不匹配。您使用的是MPI_INT
,而dictionary
和passwords
的{{1}}类型为std::vector
。请改用char
。
此外,正如PaulMcKenzie指出的那样,如果向量的大小为MPI_CHAR
,&dictionary[0]
仍然会失败。对于干净的代码,您应该检查这个条件或断言它。
以下代码适合您:
0