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 ループ」に保持する方法はありますか?