Глобальная переменная OpenCL имеет другое значение в потоках, OpenCL KERNEL

Итак, я имею дело со следующей ситуацией. Я хочу, чтобы все мои потоки выполняли цикл до тех пор, пока ни один из них не достигнет определенного «если», поэтому я использую глобальную переменную, в которой хранится 0, и когда достигается оператор if, эта переменная становится 1.

Проблема в том, что в конце цикла я создаю барьер для синхронизации всех потоков (в моем случае у меня всего 4), и только это достигло, если значение глобальной переменной равно 1, у других - 0.

Как это может быть? Как может глобальная переменная иметь разные значения в разных потоках?


person user1656770    schedule 08.09.2012    source источник


Ответы (1)


Я думаю, что глобальная переменная установлена ​​как некоторый буфер и кеши, один из ваших потоков записывает эту переменную в 1, но не записывает в физическую память, а в строку кеша. В таких случаях другие потоки не получали обновленное значение.

person wbao    schedule 08.09.2012