【问题标题】:Strange double values appearing from MPI communcation - memory issues?MPI 通信中出现奇怪的双值 - 内存问题?
【发布时间】:2011-08-02 06:22:42
【问题描述】:

这真的是this question 的后续,因为我认为我已经解决了最初问题提出的问题,但现在还有一些其他问题。

我有一些 MPI 代码正在执行矩阵转置。它通过使用 MPI_Isend 和 MPI_Irecv 的点对点非阻塞通信来执行此操作。我正在使用双打,我所有的 MPI 代码都使用 MPI_DOUBLE 作为类型。然而,我似乎遇到了一些奇怪的记忆问题——其中关键的一个是在我的输出中包含了“无意义”的数字。例如:

Test Process (2, 1): 68.000000 78.000000 
Test Process (2, 1): 387323398486945739062068424931898425134839058804189460794109462554519403357109477747039490936107027309191462010675537134594564349232145421118587860238537662203953149049188364045280831238661272720084252520359127715290869606638545797120.000000 881150864511763756676254370742733018389256944202962553716402946507192139671624750374865205489904045881646541419557063427368973644261533211221769931916194052019466643963904.000000 
Test Process (2, 1): 78.000000 88.000000 

我可以猜到不知何故存在内存问题 - 我正在读取一些内存作为双精度而不是,或者当它不是时作为双精度写入内存。知道如何进行调试吗?

代码在here 上可用,但我不希望对代码进行详细分析,更多关于如何使用 MPI 通信发生此类错误的提示,以及我可以做些什么来追踪错误。

只是为了确认我尝试过的几件事:数组的初始化没有问题。我已经尝试将数组初始化为一个已知值 (999),但它最后没有出现在数组中,所以显然所有新值(包括疯狂的值)都来自 MPI 通信。

有什么想法吗?

【问题讨论】:

    标签: c mpi parallel-processing hpc


    【解决方案1】:

    一个潜在的问题是array 的索引不一致。在第 223 行,看起来 i 和 j 可能是倒退的。 (我不确定在这个 iPod Touch 中查看它的行号是否匹配。它是带有注释“计算偏移量”的循环)与其他循环相比,j 和 i 被交换为列的行。看来您已经在 cmets 中调整了几种不同的方式……所以也许这是意料之中的。我不能很好地看到整个代码,因为我目前使用的是视野有限的 iPod touch。但那部分似乎不正确。

    最后的循环似乎也不正确。与其他循环相比,其中一个 j 和 i 也是相反的。

    【讨论】:

    • 完全正确。谢谢!有许多数组以错误的方式出现(我一直对使用哪种索引方式来确保它使用行优先顺序感到困惑)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多