Questions tagged «compute-shader»

3
什么时候计算着色器比像素着色器更有效地进行图像过滤?
图像过滤操作(例如模糊,SSAO,Bloom等)通常使用像素着色器和“聚集”操作完成,其中每个像素着色器调用都会发出许多纹理提取操作以访问相邻像素值,并计算单个像素的值结果。这种方法在理论上效率低下,因为完成了许多冗余提取:附近的着色器调用将重新提取许多相同的纹理像素。 另一种方法是使用计算着色器。这些具有的潜在优势是能够在一组着色器调用之间共享少量内存。例如,您可以让每个调用获取一个纹理元素并将其存储在共享内存中,然后从那里计算结果。这可能会或可能不会更快。 问题是在什么情况下(如果有的话)compute-shader方法实际上比pixel-shader方法更快?它是否取决于内核的大小,它是什么类型的过滤操作等?显然,答案从一个GPU型号到另一个GPU都不同,但是我很想听听是否存在任何普遍趋势。

1
为什么在GPU编程中需要工作效率?
我一直在阅读以下有关如何在CUDA中进行并行扫描的文章: https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch39.html 在这篇文章中,重点是使扫描“高效工作”。换句话说,GPU算法执行的加法运算应不超过CPU算法O(n)。作者提出了两种算法,一种是“天真的”算法,可以进行O(nlogn)加法运算,另一种则认为“工作效率高”。但是,高效工作的算法执行的循环迭代次数是原来的两倍。 据我了解,GPU只是巨型SIMD处理器,应该同步运行。在“高效工作”算法中执行两倍的循环似乎意味着从长远来看,许多线程将处于空闲状态并降低性能。我想念什么?

1
同步连续的OpenGL Compute Shader调用
我有几个需要按一定顺序执行的计算着色器,它们的输出取决于以前的输入。理想情况下,我永远不需要在客户端复制缓冲区并在GPU上完成所有工作。 考虑一下,我有两个计算着色器已编译并链接为program_one和program_two。假设我还有一个GL_SHADER_STORAGE_BUFFER包含由写入program_one和读取的数据的program_two。我可以简单地执行以下操作: glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); 是否可以保证第一个计算着色器的所有调用将在第二个计算着色器的任何调用之前完成(以避免读写之间的数据争用buffer)?如果没有,如何同步它们?

1
在GPU上创建共享的顶点法线
我已经成功地将Marching Cubes的实现从CPU移植到了OpenGL计算着色器中,但是我还没有解决法线问题,并且想知道最好的解决方法。 我的实现专门处理二进制值字段(我正在尝试为尚没有距离估计器的3D分形函数建模),因此渐变和前向差分方法将不起作用。我有共享的顶点在工作,并且我的CPU实现使用此处描述的Quilez方法将面法线累积到每个相邻顶点上。 我可以将该实现移植到另一个着色器上,但是我看到的问题是需要大量的原子。由于我们只能在标量整数类型上使用原子,并且我无法想到一种以可加方式将3个有符号的int打包为1的方法,这意味着每个着色器调用3个轴* 3个顶点= 9个原子加法。它们当然会散布在整个内存中,所以这不像是击中单个原子计数器9次,但它看起来仍然像是个地狱。 另一种选择是针对每个多边形运行一个着色器调用,并构建人脸法线列表(我可能会以此方式打包到x10y10z10),然后每个顶点的着色器来累积所有相邻人脸的法线。但是,这将是一个巨大的内存消耗,面部索引的存储空间每个顶点需要12 int才能处理最坏的情况。还有一个问题,如何在不再次使用原子的情况下写入该存储,以计算出已将多少张面写入特定顶点。 任何人对此有更好的主意吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.