1

В соответствии с таблицами команд А. Фога, Ivy Bridge имеет 3 цикла задержки для команды MOV.

Поэтому для перемещения RAX по адресу в RCX потребуется 3 цикла:

  mov               [rcx], rax

Мой вопрос: означает ли это, что RAX, который читается, не может быть изменен в течение следующих 2 часов? В частности, может ли следующее вызвать задержку выполнения:

  mov               [rcx], rax
  inc               rax

1 ответ1

1

Короче да. Это приведет к остановке процессора в ожидании завершения этой инструкции и доступности данных, прежде чем можно будет выполнить следующую инструкцию. Нет никакого способа легко предсказать, какие данные поступят, и поэтому инструкция inc просто не может выполняться, пока не завершится mov .

Это, возможно, не является большой проблемой, поскольку процессор вполне может планировать команды, которые не зависят от результата этой команды mov , чтобы поддерживать работу ядра.

Это называется выполнением вне очереди, и это может помочь снизить стоимость остановок процессора при ожидании длинных инструкций, подобных этим.


Дальнейшее уточнение ...

Я должен был прочитать ваш пример лучше, я не верю, что инструкция mov [rcx], rax вызовет остановку команды inc rax , но вызовет зависание всего, что зависит от rcx .

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

Таким образом, я бы предположил, что регистр RAX либо переименовывается, так как инструкция отправляется на выполнение, либо кодируется в u-ops для инструкции. Следующая инструкция может работать с этим регистром, если она не зависит от результатов предыдущей операции, сохраненной в этом регистре.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .