Разрешаването на компилатора да пренареди оценката на операндите добавя повече място за оптимизация.
Ето един напълно измислен пример за илюстрация.
Да предположим, че процесорът може:
- Издайте 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 цикъла.
Отново това е напълно измислено. Съвременните процесори са много по-сложни от това. Но разбирате идеята.
person
Mysticial
schedule
22.09.2012