2012-09-08 2 views
0

그래서 다음 상황을 처리하고 있습니다. 아무 스레드도 "if"에 도달 할 때까지 모든 스레드가 루프를 수행하기를 원하므로 0을 저장하는 전역 변수를 사용하고 if 문이 1이되면 변수가 1이됩니다.OpenCL 전역 변수는 스레드에서 다른 값을가집니다. OpenCL KERNEL

문제는 루프의 끝 나는 모든 스레드를 동기화 할 수있는 장벽을 만든다. (내 경우에는 4가된다.) 전역 변수 1의 값을 가진 경우에만 도달하고 나머지는 0이다.

그럴 수 있니? 전역 변수는 어떻게 다른 스레드에서 다른 값을 가질 수 있습니까?

답변

0

전역 변수가 일부 버퍼와 캐시로 설정되어 있다고 생각하지만, 스레드 중 하나는이 변수를 1로 쓰지만 실제 메모리에는 쓰지 않지만 캐시 라인에는 쓰지 않습니다. 이 경우 다른 스레드는 업데이트 된 값을 얻지 못했습니다.