2016-08-05 21 views
1

최근 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 

어떤 아이디어?

+0

GCC 7.1.0이 nvptx-offloading으로 컴파일 된 Fedora 26 상자에서 코드를 실행했으며 올바르게 작동합니다. 내가 얻을 출력은 다음과 같습니다 장치의 수 : 1 변경 : 0 파이 = 3.1415926538 파이 = 3.1415926538 하드웨어가 무엇입니까? CUDA 버전? – Calleniah

+0

@ Calleniah : 1 년이 지났습니다. 질문에 대한 답을 100 % 확신하지 못하면 나와 함께 감내하십시오. CUDA 버전은 7.5이고 내 하드웨어는 Maxwell Geforce GTX 970입니다. – Millad

+0

"printf ("pi = % 11.10f \ n ", pi);를 추가하여 GPU 루프의 pi 값의 증분 변경 내용을 인쇄해볼 수 있습니까? " "pi + = 4.0/(1.0 + t * t);"밑에. 당신은 어떤 결과물을 얻습니까? 이 오류를 다시 만드는 데 사용한 설정에 더 이상 액세스 할 수 없다면 일 년이 된 것처럼 사과드립니다. – Calleniah

답변

0

"parallel"을 블록 대신 루프로 이동해보십시오.

// #pragma acc parallel 
    { 
    change = 1; 
    #pragma acc parallel loop reduction(+:pi) 
    for (i=0; i<N; i++) { 
     double t= (double)((i+0.5)/N); 
     pi +=4.0/(1.0+t*t); 
    } 
    } 

나는 gcc 6.1로 이것을 시험해 보았고 올바르게 동작했다. 스칼라는 기본적으로 비공개이므로 "i"를 사유화 할 필요가 없습니다.

+0

Thanks Mat. 나는 그것을했다. 그러나 나의 문제는 아직도 존재한다! 나는 그것이 그것에 관한 것이라고 생각하지 않는다. 나는 OpenACC가 가능한 GCC의 설치 과정에서 뭔가 잘못했다고 생각합니다. 그러나 튜토리얼의 단계는 간단했지만 왜 작동하지 않는지 알 수 없습니다. – Millad

+0

그것이 나를 위해 일한 이후로 나도 잘 모르겠다. GNU OpenACC를하는 사람들에게 편지를 보내 도움을 줄 수 있는지 알아 보겠습니다. –

+0

FYI, 부재 중 답장을 받았으므로이 문제가 발생하기까지 며칠이 걸릴 수 있습니다. –