Pull to refresh

Comments 5

Предположение по 3 xor как реализацию инструкции xchg меня так выбесило, что я почти написал возмущенный коммент. Очевидно, что через mov с временным регистром быстрее (временные скрытые регистры дёшевы). Но тогда почему второй и третий uops не паралелятся? Стоп, почему вообще не выполнить операцию только на уровне переименования регистров?


В общем, если кого заинтересовал ответ, то он тут:


https://stackoverflow.com/questions/45766444/why-is-xchg-reg-reg-a-3-micro-op-instruction-on-modern-intel-architectures


Спойлер: это неважно и никогда не пригодится вам в жизни.
Спойлер: никаких 3 xor!

На то оно и предположение было. Спасибо за уточнение, надо будет поправить в статье.

По содержанию статьи. А давайте посмотрим, как выглядит погретый бенчмарк обращения к List в цикле. Интересно, потеряет ли JIT компилятор вторую проверку.

Скорее всего останется 2 проверки:


  • Сравнение со свойством Count у листа
  • Сравнение со свойством Length у массива.

Эти 2 значения редко совпадают.

Что будет со второй проверки надо проверять. Имеет место оптимизация, при которой в простейших циклах эта проверка убирается, если из цикла видно, что мы не выйдем за границы.
А вот будет ли понятно это для jit, это уже вопрос. Надо будет проверить на досуге.

Sign up to leave a comment.

Articles