В каких случаях неправильное выполнение приводит к более эффективному коду - PullRequest
4 голосов
/ 17 октября 2010

Я пытаюсь понять, как работает Барьер памяти , почему он используется и в каких случаях его следует использовать.Однако я не совсем уверен, в каких случаях было бы более эффективно организовать порядок инструкций, кто-нибудь может дать мне пример этого?

1 Ответ

5 голосов
/ 17 октября 2010

Одним из случаев, когда он полезен, являются вычисления с плавающей запятой - обычно они занимают намного больше времени, чем «нормальные» инструкции, поэтому ЦПУ полезно выполнять их в одну сторону по нескольким инструкциям, в то время как выполняются другие обычные инструкции программыв главном ALU.

Это также может помочь сохранить все конвейеры активными - некоторые процессоры имеют несколько конвейеров инструкций (скажем, один специализированный для ветвей, пара специализированных для арифметических операторов и пара для плавающей запятой иSIMD инструкция).Изменение порядка инструкций позволяет центральному процессору сохранять все конвейеры заполненными, а не иметь один пустой для нескольких инструкций, что ускоряет выполнение программы.

Даже для одного конвейера, переупорядочивание инструкций может помочь сохранить конвейерполный путем удаления последовательных зависимых инструкций - см. http://en.wikipedia.org/wiki/Instruction_pipeline

...