最近、GCC コミュニティでは、コンパイラで OpenACC をサポートするためのいくつかの取り組みが行われています。だから、私はそれを試してみたかった。
GCC Web サイトのメイン ドキュメントに近いこの段階的なチュートリアル (チュートリアル) を使用して、OpenACC をサポートするGCC 6.1をコンパイルおよびビルドすることができました。
次に、次のコマンドを使用してプログラムをコンパイルしました。
gcc pi.c -fopenacc -foffload=nvptx-none -foffload="-O3" -O3
そして、すべてがエラーなしで進みます。
実行はエラーなしですが、正解はありません。
私のCコードと実行中のプログラムの出力は次のとおりです。
#include <stdio.h>
#include <openacc.h>
#define N 20000
#define vl 1024
int main(void) {
double pi = 0.0f;
long long i;
int change = 0;
printf("Number of devices: %d\n", acc_get_num_devices(acc_device_nvidia));
#pragma acc parallel
{
change = 1;
#pragma acc loop reduction(+:pi) private(i)
for (i=0; i<N; i++) {
double t= (double)((i+0.5)/N);
pi +=4.0/(1.0+t*t);
}
}
printf("Change: %d\n", change);
printf("pi=%11.10f\n",pi/N);
pi = 0.0;
for (i=0; i<N; i++) {
double t= (double)((i+0.5)/N);
pi +=4.0/(1.0+t*t);
}
printf("pi=%11.10f\n",pi/N);
return 0;
}
そして、これは実行後の出力a.out
です:
Number of devices: 1
Change: 0
pi=0.0000000000
pi=3.1415926538
何か案は?