如何在 OpenMP 并行块中使用 gtest?
how to using gtest in OpenMP parallel block?
我想在 openmp 中使用 gtest。
我想在并行块中计算一些东西,并检查线程私有变量的结果,并做更多的计算。
这是一个例子。
#include "gmock.h"
#include <iostream>
using namespace testing;
TEST(SimpleGtest, OpenMP)
{
#pragma omp parallel
{
// some thread private variable
int thread_index = omp_get_thread_num();
int z;
// some calculation
// ...
// check result of thread private variable
ASSERT_THAT(z, Eq(13));
// other calculation
// ...
}
}
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
但是当我编译代码时,编译器抱怨说:
error: "return" branches to or from an OpenMP structured block are illegal
ASSERT_THAT(z, Eq(13));
^
上面的代码只是一个简单的例子。
我知道我们不能使用 "thread private variable" 但使用 "thread shared variable" 这样我们就可以在并行块中进行断言。
但是有什么解决方案可以使用gtest来检查线程私有变量在OpenMP并行块中的结果吗?
提前致谢!
不要在并行块中使用 ASSERT_THAT
。 EXPECT_EQ
可以提供帮助。
我想在 openmp 中使用 gtest。
我想在并行块中计算一些东西,并检查线程私有变量的结果,并做更多的计算。
这是一个例子。
#include "gmock.h"
#include <iostream>
using namespace testing;
TEST(SimpleGtest, OpenMP)
{
#pragma omp parallel
{
// some thread private variable
int thread_index = omp_get_thread_num();
int z;
// some calculation
// ...
// check result of thread private variable
ASSERT_THAT(z, Eq(13));
// other calculation
// ...
}
}
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
但是当我编译代码时,编译器抱怨说:
error: "return" branches to or from an OpenMP structured block are illegal
ASSERT_THAT(z, Eq(13));
^
上面的代码只是一个简单的例子。
我知道我们不能使用 "thread private variable" 但使用 "thread shared variable" 这样我们就可以在并行块中进行断言。
但是有什么解决方案可以使用gtest来检查线程私有变量在OpenMP并行块中的结果吗?
提前致谢!
不要在并行块中使用 ASSERT_THAT
。 EXPECT_EQ
可以提供帮助。