2017-03-16 54 views
0

我尝试在我的R程序包中调用OpenMP代码。在src目录下的fun.c文件的OpenMP的区域是这样的:解决在R中使用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_NaNR_NegInfprivate条款是可能的,所以我怎么能好吗?我是否应该将所有操作部分包装到一个函数中并在OpenMP区域中调用此函数?

+0

您应该先学习如何在C语言中使用OpenMP,然后再尝试使用它。您还应该提供完整的代码示例(例如,您在何处定义迭代器“i”)。我认为你也应该展示你想如何从R中调用这个函数。另外,我没有看到R因为你将它设为静态而知道'mp_func'。改善你的问题,我会upvote它。 –

回答

0

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

相关问题