는 그냥 작은 OMP 테스트를 작성하고 정확하게 모든 시간을 작동하지 않습니다소형의 OpenMP programm에 동결 때때로 (GCC, C, 리눅스는)
이#include <omp.h>
int main() {
int i,j=0;
#pragma omp parallel
for(i=0;i<1000;i++)
{
#pragma omp barrier
j+= j^i;
}
return j;
}
모든 스레드에서 쓰기에 대한 j
의 사용이 잘못 이 예에서,하지만
내가 동결을
J
의 결정적 값이 있어야합니다.
gcc-4.3.1 -fopenmp a.c -o gcc -static
실행과 컴파일 : $ ./gcc
및 동결있어 (때로는, 4-5 빠른 실행을위한 1 정지와 같은).
strace를 :
[pid 13118] futex(0x80d3014, FUTEX_WAKE, 1) = 1
[pid 13119] <... futex resumed>) = 0
[pid 13118] futex(0x80d3020, FUTEX_WAIT, 251, NULL <unfinished ...>
[pid 13119] futex(0x80d3014, FUTEX_WAKE, 1) = 0
[pid 13119] futex(0x80d3020, FUTEX_WAIT, 251, NULL
<freeze>
가 왜 동결 (교착 상태)이 있습니까?
흠 ... 고마워! 나는 그것을 테스트 할 것이다 – osgx
-1 : 나는 개인적이다. OpenMP 표준은 각 스레드가 반복의 자신의 몫을 통제하도록 이것을 명령한다. –
-1 : 루프 색인 변수는 private입니다. –