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

C 解决在R中使用OpenMP时的封闭并行错误,c,r,openmp,r-package,C,R,Openmp,R Package,我尝试调用我的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) \ firs

我尝试调用我的
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;
                }
    }


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

好的,通过添加
R\u NaN
firstprivate
子句中的类似内容来解决问题。这样做的原因是
R\u NaN
R\u NegInf
是通过包含的头文件
R.h
中的
external
声明调用的全局变量。在尝试将OpenMP与R一起使用之前,您应该先学习如何将OpenMP与C一起使用。您还应该提供一个完整的代码示例(例如,在何处定义迭代器
i
)。我认为您还应该说明您希望如何从R调用此函数。此外,我不知道R将如何了解
mp_func
,因为您将其设置为静态。改进您的问题,我将对此进行投票。请提供一个示例
 enclosing parallel;
R_NaN not specified in enclosing parallel;