2017-03-16 7 views
0

RパッケージにOpenMPコードを呼び出そうとしています。 srcディレクトリの下fun.cファイル内のOpenMP地域は次のようである:OpenMPを使用してRを囲む並列エラーを解決する

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_NaNR_NegInfを含めることはできないと思いますので、どうすればいいですか?それとも?すべての操作部分を関数にラップし、この関数をOpenMP領域で呼び出す必要がありますか?

+0

OpenMPをC言語で使用する前に、まずOpenMPを使用する方法を学ぶ必要があります。完全なコード例(例:イテレータiを定義する場所)も提供する必要があります。 Rからこの関数をどのように呼び出すかを示すべきであることを示すべきだと思います。また、静的にしたので、Rが 'mp_func'について知る方法は見当たりません。あなたの質問を改善し、私はそれをupvoteします。 –

答えて

0

この問題は、firstprivate節にR_NaNなどを追加することで解決します。その理由は、R_NaNR_NegInfは、含まれているヘッダファイルR.hからのexternal宣言を介して呼び出されるグローバル変数です。

関連する問題