我尝试在OpenMP
包中调用R
个代码。 fun.c
目录下的src
文件中的OpenMP区域如下:
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区域中调用此函数吗?
答案 0 :(得分:0)
嗯,问题是通过在R_NaN
子句中添加firstprivate
等来解决的。这样做的原因是R_NaN
和R_NegInf
是通过包含的头文件external
中的R.h
声明调用的全局变量。