2013-06-07 2 views
2

이 코드의 일부 테스트하고있다 : 몇 가지 이유를 들어루프 오류에 대한 OpenMP 감소?

float a = 0; 
    float b = 0; 
    int c = 0; 
    int d = 0; 
    #pragma omp parallel for schedule (dynamic, 1) reduction(+ : a, b, c, d) 
    for(i=0; i<100; i++) { 
     a +=1; 
     b +=1; 
     c +=1; 
     d +=1; 
    } 

    printf("a: %d, b: %d, c: %d, d: %d\n", a, b, c, d); 

을 내 결과는 항상 :

a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 
a: 100, b: 100, c: 0, d: 202 

는 이유, B, C 아닌, 100 D 모두 동일?

답변

1

%d 형식을 사용하여 부동 소수점 수를 인쇄합니다. 이로 인해 정의되지 않은 동작이 발생합니다. 사용 :

printf("a: %f, b: %f, c: %d, d: %d\n", a, b, c, d); 

그러면 올바른 대답을 얻게 될 것입니다.

+0

와우, 너무 간단, thx – Derek

+0

아무런 문제없이 도와 드리겠습니다. –