我试图理解为什么在我的软件包中使用valgrind测试openMP代码时总是出现错误。例如,上面的示例很小,但是f(4)
却有错误,但是f(0)
的行为正确。所以我的问题是:
data.table
的{{1}}代码重现此问题,但是此软件包在CRAN上似乎是正确的。openmp
这是我使用Rcpp::sourceCpp(code = '
#include <omp.h>
//[[Rcpp::plugins(openmp)]]
//[[Rcpp::export]]
void f(int ncpu)
{
#pragma omp parallel for num_threads(ncpu)
for (int i = 0 ; i < 100 ; i++) { }
return;
}')
f(4)
通过valgrind
获得的报告
R -d "valgrind --tool=memcheck --leak-check=full" --vanilla -f test-omp.r