【问题标题】:How to find the origin of MPI message truncated errors?如何找到 MPI 消息截断错误的来源?
【发布时间】:2014-09-02 01:01:19
【问题描述】:

我目前在使用 MPI 应用程序时遇到问题。

我偶尔会收到以下形式的 MPI 错误:

Fatal error in MPI_Allreduce: Message truncated, error stack:
MPI_Allreduce(1339)...............: MPI_Allreduce(sbuf=0x7ffa87ffcb98, rbuf=0x7ffa87ffcba8, count=2, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD) failed
MPIR_Allreduce_impl(1180).........: 
MPIR_Allreduce_intra(755).........: 
MPIDI_CH3U_Receive_data_found(129): Message from rank 0 and tag 14 truncated; 384 bytes  received but buffer size is 16
rank 1 in job 1  l1442_42561   caused collective abort of all ranks
exit status of rank 1: killed by signal 9 

但是我不知道在哪里看。我知道错误发生在 Allreduce 函数调用中,但是有多个。

我如何知道哪个函数调用产生了错误?简单的 printf 调试无济于事,因为在第一次发生错误之前,该函数可能会被调用一百万次。

它也可能根本不发生或在程序启动后立即发生。

【问题讨论】:

    标签: c++ c multithreading runtime-error mpi


    【解决方案1】:

    我已经能够通过调用来追踪错误的根源

    MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN)
    

    然后检查每个 Allreduce 函数的返回值是否不等于 MPI_SUCCESS。这是发生错误的位置

    【讨论】:

    • 很明显,错误就在那里。更大的问题是你当时做错了什么。你能弄明白吗?
    • 我能够通过添加一个错误睡眠并使用 gdb 附加到不同的进程然后回溯调用来解决这个问题。这一切都源于假设另一个遵循相同路径的不同代码路径。
    猜你喜欢
    • 2012-01-23
    • 2019-04-25
    • 1970-01-01
    • 2018-10-27
    • 2012-09-12
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多