小编Mat*_*aud的帖子

如何使用SIMD指令使预乘alpha功能更快?

我正在寻找一些SSE / AVX建议,以优化将RGB通道与其alpha通道预乘的例程:RGB * alpha / 255(+我们保留原始的alpha通道)。

    for (int i = 0, max = width * height * 4; i < max; i+=4) {
        data[i] = static_cast<uint16_t>(data[i] * data[i+3]) / 255;
        data[i+1] = static_cast<uint16_t>(data[i+1] * data[i+3]) / 255;
        data[i+2] = static_cast<uint16_t>(data[i+2] * data[i+3]) / 255;
    }
Run Code Online (Sandbox Code Playgroud)

您会在我当前的实现下面找到它,但是我认为它可能会更快,而且我正在浪费宝贵的CPU周期。我在quick-bench.com上进行了测试,结果显示出令人鼓舞的效果,但是我应该做些什么改变才能使其快速发展呢?

谢谢

--------更新09/06/2019 --------

根据@chtz和@Peter Cordes的评论,我建立了一个存储库来评估不同的解决方案,这里是结果。您认为会更好吗?

Run on (8 X 3100 MHz CPU s)
CPU Caches:
  L1 Data 32K (x4)
  L1 Instruction 32K (x4)
  L2 Unified 262K (x4)
  L3 Unified 8388K (x1) …
Run Code Online (Sandbox Code Playgroud)

c++ x86 sse simd avx

7
推荐指数
1
解决办法
278
查看次数

标签 统计

avx ×1

c++ ×1

simd ×1

sse ×1

x86 ×1