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

Solve the enclosing parallel error when using OpenMP in R

我尝试在我的 R 包中调用 OpenMP 代码。 src 目录下的 fun.c 文件中的 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;

我认为在 private 子句中包含 R_NaNR_NegInf 是不可能的,那么我该如何解决呢?我是否应该将所有操作部分包装到一个函数中并在 OpenMP 区域中调用该函数?

嗯,在firstprivate 子句中添加R_NaN 之类的问题就解决了。这样做的原因是 R_NaNR_NegInf 是通过包含的头文件 R.h.

中的 external 声明调用的全局变量