Иногда цикл, в котором процессор проводит большую часть времени, очень часто пропускает предсказание ветвления (неверное предсказание) (около .5 вероятности). Я видел несколько методов для очень изолированных потоков, но никогда не список. Те, которые, как я знаю, уже исправляют ситуации, когда условие можно переключить на bool и что 0/1 используется каким-то образом для изменения. Есть ли другие условные ветки, которых можно избежать?
например. (Псевдокод)
loop () {
if (in[i] < C )
out[o++] = in[i++]
...
}
Можно переписать, возможно, потерять некоторую удобочитаемость, с чем-то вроде этого:
loop() {
out[o] = in[i] // copy anyway, just don't increment
inc = in[i] < C // increment counters? (0 or 1)
o += inc
i += inc
}
Также я видел методы в дикой смене &&
- &
в условном в определенных контекстах, которые сейчас исчезают. Я новичок на этом уровне оптимизации, но он уверен, что там должно быть больше.