opengl计算着色器中barrier()的语义
假设我有一个用GLSL编写的opengl计算着色器,在NVidia Geforce 970上执行 在着色器开始时,单个调用会写入“着色器存储缓冲区对象”(SSBO) 然后,我发布一个合适的屏障,如GLSL中的memoryBarrier() 然后,在每次调用中,我从第一步中写入的内存中读取数据 第一次写入对当前计算操作中的所有调用都可见吗 至少,科罗诺斯说: “如果使用barrier等机制在调用之间进行同步,请使用一致且适当的memoryBarrier*或groupMemoryBarrier调用。” 我敢肯定,在一个工作组中,以这种方式进行同步是可能的。但是在整个计算操作中,它是否适用于每个工作组中的所有调用 我不确定整个工作组是如何安排的。我希望它们可能按顺序运行,使我所问的那种同步不可能实现 但是在整个计算操作中,它是否适用于每个工作组中的所有调用 不,是的。而且,您无法看到尚未确保已发生的操作。工作组相对于其他工作组的执行顺序尚未定义,因此您不知道是否有一个工作组已经执行 你想要的其实是不可能的。相反,您需要更改着色器的工作方式,以便工作组不相互依赖。在这种情况下,您可以让每个工作组执行此计算。并将结果存储在opengl计算着色器中barrier()的语义,opengl,synchronization,gpgpu,compute-shader,Opengl,Synchronization,Gpgpu,Compute Shader,假设我有一个用GLSL编写的opengl计算着色器,在NVidia Geforce 970上执行 在着色器开始时,单个调用会写入“着色器存储缓冲区对象”(SSBO) 然后,我发布一个合适的屏障,如GLSL中的memoryBarrier() 然后,在每次调用中,我从第一步中写入的内存中读取数据 第一次写入对当前计算操作中的所有调用都可见吗 至少,科罗诺斯说: “如果使用barrier等机制在调用之间进行同步,请使用一致且适当的memoryBarrier*或groupMemoryBarrier调用。
共享的
变量中,而不是通过SSBO存储在全局内存中
是的,您将在每组中计算相同的值。但这将产生比让所有这些工作组等待一个工作组更好的性能。尤其是因为这不是你真正能做的