在R中使用OpenMP时解决封闭的并行错误

时间:2017-03-16 03:27:05

标签: c r openmp r-package

我尝试在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_NegInfprivate是可能的,那么我该如何解决呢?我应该将所有操作部分包装到一个函数中并在OpenMP区域中调用此函数吗?

1 个答案:

答案 0 :(得分:0)

嗯,问题是通过在R_NaN子句中添加firstprivate等来解决的。这样做的原因是R_NaNR_NegInf是通过包含的头文件external中的R.h声明调用的全局变量。