Opencl全局变量在线程、Opencl内核中具有不同的值

Opencl全局变量在线程、Opencl内核中具有不同的值,c,global-variables,opencl,C,Global Variables,Opencl,因此,我正在处理以下情况。我希望所有线程都执行一个循环,直到没有一个线程达到某个“if”,因此我使用一个全局变量存储0,当到达if语句时,该变量变为1 问题是,在循环结束时,我设置了一个屏障来同步所有线程(在我的例子中,我只有4个线程),并且只有达到if的线程才具有全局变量1的值,其他线程才具有0的值 这怎么可能?一个全局变量如何在不同的线程中具有不同的值?我认为全局变量被设置为一些缓冲区和缓存,您中的一个线程将此变量写入1,但不写入物理内存,而是写入缓存线。在这种情况下,其他线程没有得到更新的

因此,我正在处理以下情况。我希望所有线程都执行一个循环,直到没有一个线程达到某个“if”,因此我使用一个全局变量存储0,当到达if语句时,该变量变为1

问题是,在循环结束时,我设置了一个屏障来同步所有线程(在我的例子中,我只有4个线程),并且只有达到if的线程才具有全局变量1的值,其他线程才具有0的值


这怎么可能?一个全局变量如何在不同的线程中具有不同的值?

我认为全局变量被设置为一些缓冲区和缓存,您中的一个线程将此变量写入1,但不写入物理内存,而是写入缓存线。在这种情况下,其他线程没有得到更新的值