최근 GCC 커뮤니티에서 컴파일러에서 OpenACC를 지원하기위한 노력이있었습니다. 그래서, 나는 그것을 시험해보고 싶었다.gcc - openacc - 컴파일 된 프로그램이 제대로 작동하지 않습니다.
는 GCC 웹 사이트의 기본 문서에 가까웠다이 단계별 튜토리얼 (tutorial)를 사용하여, 나는 컴파일하고 GCC OpenACC 지원 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
어떤 아이디어?
GCC 7.1.0이 nvptx-offloading으로 컴파일 된 Fedora 26 상자에서 코드를 실행했으며 올바르게 작동합니다. 내가 얻을 출력은 다음과 같습니다 장치의 수 : 1 변경 : 0 파이 = 3.1415926538 파이 = 3.1415926538 하드웨어가 무엇입니까? CUDA 버전? – Calleniah
@ Calleniah : 1 년이 지났습니다. 질문에 대한 답을 100 % 확신하지 못하면 나와 함께 감내하십시오. CUDA 버전은 7.5이고 내 하드웨어는 Maxwell Geforce GTX 970입니다. – Millad
"printf ("pi = % 11.10f \ n ", pi);를 추가하여 GPU 루프의 pi 값의 증분 변경 내용을 인쇄해볼 수 있습니까? " "pi + = 4.0/(1.0 + t * t);"밑에. 당신은 어떤 결과물을 얻습니까? 이 오류를 다시 만드는 데 사용한 설정에 더 이상 액세스 할 수 없다면 일 년이 된 것처럼 사과드립니다. – Calleniah