【问题标题】:How can one test C\C++ code which uses MPI calls: is there any set of mock functions, that I can use?如何测试使用 MPI 调用的 C\C++ 代码:是否有任何一组我可以使用的模拟函数?
【发布时间】:2013-01-24 11:59:33
【问题描述】:
#include <mpi.h>
double f() {
    double timer = MPI_Wtime();
    return timer;
}

我正在寻找的是一组模拟 MPI 函数,所以我可以 #include &lt;mpi_mocks.h&gt; 代替 mpi.h 并在不链接到 MPI 库的情况下编译它。也可能是 #define MOCK 之类的东西,它会在 mpi.h 中触发此行为。

【问题讨论】:

    标签: c++ c testing mocking mpi


    【解决方案1】:

    据我所知,没有任何模拟可以仅通过#include 完成。但是,自己编写所需的函数并为您选择使用的任何模拟框架编写应该没什么大不了的。只需从一个空头开始,看看你的编译器抱怨哪些函数。

    【讨论】:

    • “#inlcude 并完成”是什么意思?比我必须将它与一个库链接起来,该库具有 MPI_Wtime 的实现,这是我试图避免的事情(如问题中所述)。我错过了什么吗?
    • 我同意这至少对 MPI_Wtime 来说没什么大不了的,但是我可能需要别的东西,然后是别的东西,然后你又重新发明了一个轮子。
    • 使用“#include and be done”我的意思是没有mpi_mocks.h 是一个仅用于mpi 的标头模拟库。至少我怀疑是否存在其他事情,因为通常您希望以您使用的模拟框架的风格拥有这样的模拟,并且这些模拟具有不同的 API(例如,谷歌模拟、乌龟模拟等)。要自己做这样的事情,我可以想象首先#include 一个空的 mpi_mocks.h,运行编译器,收集它对未知 MPI_something 函数的所有抱怨,并使用一些脚本语言生成具有所有需要函数的 mpi_mocks.h。
    • 好吧,如果mpi.lib 没有提供,我认为也不会有mpi_mock.lib。但是,如果mpi.h 只包含函数原型,您当然可以使用它来生成 all 函数体和您想要的任何模拟功能。将其编译成一些 mpi_mock.lib 并链接它而不是测试项目中的真正 MPI 库。这样一来,您甚至不必在应用程序源代码中使用条件包含,而且这是一次性的工作,因为您可以模拟任何梦寐以求的 MPI 函数调用。
    • 几年前我开始了这样的事情here,当时在笔记本电脑上启动和运行 MPI 很乏味;不过,它是针对 Fortran 的,并且只有我当时需要的例程(事实证明,没有 Wtime),但可能是一个不错的起点。当我发现即使是单处理器运行也更容易链接到 MPI 库时,我放弃了这项工作。
    猜你喜欢
    • 2020-02-05
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2015-01-01
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多