Очереди предварительной выборки, кэши, конвейеры, суперскалярные конструкции - PullRequest
0 голосов
/ 10 декабря 2018

Я прочитал, что очередь предварительной выборки ЦП может повлиять на выполнение программы и может привести к нежелательным отклонениям от ожидаемого поведения (ошибочные результаты).

Существует ли какой-либо метод, позволяющий избежать вышеуказанного, кромерасставляя свои команды, которые влияют друг на друга и молятся о лучшем?Если нет, какой интервал требуется для заполнения?

Существуют ли какие-либо другие функции семейства x86 (такие как кеширование, конвейеры, проектирование суперскаляров), которые могут негативно повлиять на программу?Я имею в виду не время (как в случае с опасностями конвейера), а неверные результаты.

Редактировать: Вы все отвечаете, что оптимизация ЦП не влияет на корректность, только на скорость.Я обеспокоен сейчас.Например, в Википедии утверждается, что этот код не будет выполняться, как запланировано.Кроме того, существуют анти-отладочные приемы , а также методы для расчета длины очереди , которые вполне могут быть использованы для определения модели процессора.

1 Ответ

0 голосов
/ 10 декабря 2018

Нет, центральный процессор соблюдает порядок упорядочения памяти и другие правила, описанные в руководстве.

Ранняя предварительная выборка для нагрузок (ранее, чем позволяет модель памяти) выполняется спекулятивно, с неправильным предположением порядка памятисброс конвейера, если ядро ​​обнаруживает, что оно использовало неправильное значение для нагрузки.

Таким образом, современные процессоры x86 во многом агрессивно вышли из строя, но со всем необходимым отслеживанием, чтобы сохранить иллюзиюинструкции одного потока работают в порядке.(А для многопоточности ничего, что нарушает модель памяти, на самом деле не видно другим потокам, просто сделано в тех случаях, когда это безопасно.)


Или процессор может иметь более сильное / безопасное поведение, чем руководство: например, Предварительная выборка команд на самом деле не может привести к устареванию выполнения команд на современных процессорах Intel : они отслеживают хранилища по кодовым адресам, находящимся в процессе разработки. Наблюдение за извлечением устаревших инструкций на x86 с самоизменяющимся кодом

Так что предпосылка вашего вопроса не соответствует действительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...