OpenGL计算着色器映射到nVidia warp

Dan*_*nol 1 opengl compute-shader gpu-warp

假设我有一个带有local_size = 8*8*8的OpenGL计算着色器.调用如何映射到nVidia GPU warp?同样的调用是否gl_LocalInvocationID.x会在同一个warp中?还是?还是z?我并不是指所有的调用,我只是指一般的聚合.

我问这个是因为在一个时刻进行了优化,并非所有的调用都有工作要做,所以我希望它们处于相同的变形中.

Nic*_*las 5

计算着色器执行模型允许调用次数(大大)超过warp/wavefront中各个执行单元的数量.例如,硬件warp/wavefront大小往往介于16和64之间,而GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONSOpenGL中的工作组()中的调用数量不小于1024.

barriershared当工作组跨越多个warp/wavefron时,调用和使用可变数据的工作方式主要是停止所有warp/wavefron的进度,直到它们各自通过该特定点.然后执行各种内存刷新,以便它们可以访问彼此的变量(当然,基于内存屏障使用).如果工作组中的所有调用都适合单个warp,那么就可以避免这样的事情.

基本上,您无法控制CS调用如何分组为warp.您可以假设实现不是试图缓慢(也就是说,它通常将来自同一工作组的调用分组到同一个warp中),但是您不能假设同一工作组中的所有调用都将处于相同的warp中.

您也不应该假设每个warp只执行来自同一工作组的调用.