解决在 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_NaN
和 R_NegInf
是不可能的,那么我该如何解决呢?我是否应该将所有操作部分包装到一个函数中并在 OpenMP 区域中调用该函数?
嗯,在firstprivate
子句中添加R_NaN
之类的问题就解决了。这样做的原因是 R_NaN
和 R_NegInf
是通过包含的头文件 R.h
.
中的 external
声明调用的全局变量
我尝试在我的 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_NaN
和 R_NegInf
是不可能的,那么我该如何解决呢?我是否应该将所有操作部分包装到一个函数中并在 OpenMP 区域中调用该函数?
嗯,在firstprivate
子句中添加R_NaN
之类的问题就解决了。这样做的原因是 R_NaN
和 R_NegInf
是通过包含的头文件 R.h
.
external
声明调用的全局变量