如何测试使用MPI调用的C/C++代码:是否有一组模拟函数可供使用?

5
#include <mpi.h>
double f() {
    double timer = MPI_Wtime();
    return timer;
}

我正在寻找一些模拟MPI函数的集合,以便我可以使用#include <mpi_mocks.h>而不是mpi.h,并且在编译时不链接MPI库。这也可以是类似#define MOCK的触发器,在mpi.h中触发此行为。
1个回答

1
据我所见,似乎没有可以直接 #include 并完成的模拟。然而,自己编写所需函数并为您选择使用的任何模拟框架是不成问题的。只需从空头文件开始,查看编译器抱怨的函数即可。

你说的"#include就行了"是什么意思?然后我必须将其与一个包含MPI_Wtime实现的库链接起来,而这正是我试图避免的(如问题中所述)。我有什么遗漏吗? - Anton Daneyko
“#include and be done” 意味着目前没有一个仅包含头文件的 MPI 模拟库 mpi_mocks.h。至少我怀疑没有这样的库,因为通常你希望这些模拟库与你使用的模拟框架风格相同,并且它们具有不同的 API(例如 Google Mocks、Turtle Mocks 等)。如果要自己实现这样的事情,我可以想象首先 #include 一个空的 mpi_mocks.h,运行编译器,收集所有关于未知 MPI_something 函数的投诉,并使用一些脚本语言生成所需的 mpi_mocks.h。 - Arne Mertz
1
我认为如果没有提供mpi.lib,也不会有mpi_mock.lib。但是,如果mpi.h只包含函数原型,您当然可以使用它来生成所有函数体和任何所需的模拟功能。将其编译成一些mpi_mock.lib并在测试项目中链接它,而不是真正的MPI库。这样,您甚至不必在应用程序源中使用条件包含,并且这是一次性的努力,因为您可以模拟任何可能想到的MPI函数调用。 - Arne Mertz
1
我几年前在这里开始了这样一件事情(http://www.cita.utoronto.ca/~ljdursi/code/mpinull.tgz),当时在笔记本电脑上运行MPI很麻烦;虽然它是针对Fortran的,但只有我当时需要的例程(结果没有Wtime),但可能是一个不错的起点。当我意识到即使是单处理器运行,链接MPI库也要容易得多时,我放弃了这个努力。 - Jonathan Dursi
感谢Jonathan和Arne提供的想法和关注。我发起这个帖子是因为我不知道如何在单元测试框架(gtest)的上下文中使用MPI函数。虽然在这里与你们讨论时,我感觉意识到了我的问题的本质,并且可能有完全不同的方法来解决它(搜索mpi gtest确实给了我一些结果)。 - Anton Daneyko
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接