我尝试调用OpenMP
我的R
中的代码包裹。 fun.c
中的 OpenMP 区域src
下的文件目录如下:
static void mp_func(double *x, double *a, double *b,
double *den, int *P) {
#pragma omp parallel for num_threads(P[0]) default(none) \
firstprivate(length, q, a, b, isLog, lowTail, cdf, R_NaN) private(i) \
reduction(||:naflag)
for (i = 0; i < length; i++){
...
if(some condition) den[i] = R_NaN;
...
if(some condition) den[i] = R_NegInf;
}
}
但是,当我运行 R CMD CHECK
时,`它给出的错误消息是:
enclosing parallel;
和
R_NaN not specified in enclosing parallel;
我不认为包括R_NaN
和R_NegInf
在 private
条款是可能的,那么我该如何解决呢?我是否应该将所有操作部分包装到一个函数中并在 OpenMP 区域中调用该函数?
最佳答案
好吧,这个问题可以通过在firstprivate
子句中添加R_NaN
等来解决。这样做的原因是 R_NaN
和 R_NegInf
是通过包含的头文件 R.h
中的 external
声明调用的全局变量>.
关于c - 解决在R中使用OpenMP时的封闭并行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42824760/