Ответ 1
Разрешить компилятору переупорядочить оценку операндов, добавляет больше места для оптимизации.
Здесь приведен полный пример для иллюстрации.
Предположим, что процессор может:
- Выпуск 1 инструкции за каждый цикл.
- Выполнение добавления в 1 цикл.
- Выполните умножение в 3 цикла.
- Может выполнять дополнения и умножения одновременно.
Теперь предположим, что у вас есть вызов функции следующим образом:
foo(a += 1, b += 2, c += 3, d *= 10);
Если вы должны были выполнить это слева направо на процессоре без OOE:
Cycle - Operation
0 - a += 1
1 - b += 2
2 - c += 3
3 - d *= 10
4 - d *= 10
5 - d *= 10
Теперь, если вы разрешите компилятору переупорядочить их: (и сначала начать умножение)
Cycle - Operation
0 - d *= 10
1 - a += 1, d *= 10
2 - b += 2, d *= 10
3 - c += 3
Итак, 6 циклов против 4 циклов.
Снова это полностью надуманно. Современные процессоры намного сложнее. Но у вас есть идея.