2017-03-16 28 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的全局變量。

相關問題