我正在寻找一些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)