1

Intel MIC (Xeon Phi) カードでオフロード呼び出しを行った後、C/OpenMP コードの「for ループ」を並列化しようとしています。「#pragma omp parallel for」を使用していますが、整数変数を「ループ制御変数」として使用するとコンパイルがうまくいきます。私のコードでは、フロート配列を「ループ制御変数」として使用していますが、「並列ループ条件はループ制御変数をテストしません」というエラーが表示されます。

エラーのないコード:

#define MAX_DIMENSIONS  10

unsigned long long  i,y=0;

#pragma offload target(mic) in(i,y)
{
    #pragma omp parallel for
    for(i=0;i<10;i++)
        /* code here */  
}

エラーのあるコード:

#define MAX_DIMENSIONS  10

float   x[MAX_DIMENSIONS];
unsigned long long  i,y=0;

#pragma offload target(mic) in(x[MAX_DIMENSIONS],i,y)
{
    #pragma omp parallel for
    for(x[0]=0.000000; x[0]<10.000000; x[0]+=1.000000)
        /* code here */
}

OpenMP を使用して並列化を成功させるために、その float 配列表記を「for ループ」に保持する方法はありますか?

4

2 に答える 2