编译优化,cpu的指令预测优化也好,都有一个基本前提:就是可预测性。
就拿你的例子来说,如果if大部分判断结果是一致的,那么就有优化可能。
如果没有规律,mask就需要逐位判断,simd的性能可能变得会更差。
【 在 allegro 的大作中提到: 】
: 代码如下:
:
: void f(uint64_t flag, const uint8_t *src, uint8_t *dst) { int dstByteOff = 0; int srcByteOff = 0; for(int b = 0; b < 64; ++b){ if(flag & (UINT64_C(1) << b)){ dst[dstByteOff++] = 0; } else{ dst[dstByteOff++] = src[srcByteOff++]; } } }
: ...................
--来自微微水木3.5.12
--
FROM 39.144.44.*