2012-02-19 7 views
1
for (int i = 0; i < x_res; i++){ 
    #pragma omp parallel for 
    for (int j = 0; j < y_res; j++) { 
     Ray hit = s.kd_tree->intersect(rays[i][j]); 
    } 
} 

이 코드가 왜 병렬로 작동하지 않습니까? 나는 이유를 찾을 수 없다.이 코드는 왜 SIGABRT에 openMP를 제공합니까?

역 추적 출력이 : http://hpc.sourceforge.net/에서

#0 0x00007fff8ce03bf2 in __psynch_mutexwait() 
#1 0x00007fff8cd331a1 in pthread_mutex_lock() 
#2 0x00000001000027e4 in gomp_barrier_destroy() 
#3 0x000000010000247b in gomp_team_end() 
+0

답변은 표시되지 않는 코드의 어딘가에 있습니다. 작업자 스레드 중 하나가 오류로 인해 중단되고 있습니다. – talonmies

+0

병렬로 실행하지 않고 잘 작동합니다. intersect 함수에는 openMP 코드가 없습니다. – Luis

+1

그래서 광범위한 대답은 교차 함수가 스레드로부터 안전하지 않을 가능성이 높습니다. – talonmies

답변

1

받기 (지금 4.8) 마지막 GCC.

OpenMP의 버그는 여기에서 수정되었습니다.

관련 문제