为什么未实现OpenGL灰度纹理性能增益?

时间:2018-05-03 14:03:05

标签: opengl opengl-es metal

我使用OpenGL计算着色器来处理图像,着色器只将源纹理复制到目标纹理。

在第一次测试中,源和目标纹理都是 BGR8 ,在第二次测试中,它们都是 R8

灰度纹理内存大小比颜色纹理小约4倍,因此我希望在第二次测试中获得 4x速度。但是,我只能获得 1.5倍的速度增益

有人可以告诉我是否有问题吗?

附上代码,第一次使用.bgra8Unorm,第二次使用.r8Unorm,

kernel void
copyKernel(texture2d<half, access::read>  inTexture  [[texture(0)]],
           texture2d<half, access::write> outTexture [[texture(1)]],
           uint2 gid [[thread_position_in_grid]]) {
    half4 inColor  = inTexture.read(gid);
    outTexture.write(inColor, gid);
}

1 个答案:

答案 0 :(得分:3)

注意:以下假定您正确分析了您的效果(使用timer queries等)。

每个流程都有与之相关的成本。实际工作的成本包括内存访问等。但是,执行任何的成本也是:执行该过程的开销。

虽然完成工作的成本往往取决于需要做多少工作,但管理费用通常是固定的。这意味着您所做的工作越少,更多的开销成本相对于该工作

因此,当您减轻工作压力时,流程的性能将更加依赖于调用操作的固定开销。在您的情况下,原始的3组件纹理副本可能不是很多工作开始。因此,在提高性能的同时减少工作,并没有对调用该工作的开销做任何事情。