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;