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

标签 c r openmp r-package

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

最佳答案

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

关于c - 解决在R中使用OpenMP时的封闭并行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42824760/

相关文章:

c - mongo_client() 失败并出现错误 MONGO_CONN_ADDR_FAIL

c++ - 无法创建DLL : Getting DLL "is not a valid Win32 application"

c - 具有依赖关系的数组中的并行操作

parallel-processing - 使用 OpenMP 减少 : linear merging or log(number of threads) merging

c++ - openMP 关键部分

c - C 函数中静态变量有什么用?

c++ - 如何在 C/C++ 中 Hook Windows 函数?

r - 计算每秒事务数

r - 用纺织品而不是 R 中的颜色填充条形图中的条

通过 Rstudio 在远程服务器上运行 R 代码,而不是通过浏览器