я вычитал "Общей праактикой установки значений регистров в ноль является использование операций типа xor eax, eax или sub eax, eax. Эти инструкции не рапсознаются как независимые от предыдущего значения регистра, что приводит к замедлению началаих исполнения. Чтобы избавиться от зависимости от предшествующих инструкций, следует использовать mov eax, 0." Однако мой друг говрит "xor eax, eax рекомендована intelом" Кто прав ? Всегда до этого писал xor eax, eax щас засомневался.
gnym А на год издания внимание обратил ? Эти инструкции стали независимыми, начиная с AMD K7 Athlon, а у Intel с Pentium 4. См. раздельчик Break dependency chains в optimizing_assembly.pdf by Agner Fog
Просто автор протупил на счёт: Это может быть только в реалмоде при огромном числе итераций и отключенной перифирии, такой как жёсткие диски, тоесть на практике нигде не юзается и никакой разницы в задержках нет.
Clerk Да нет, речь о "банальной" зависимости\независимости от пред.значения eax. Например: Код (Text): mul edx mov edx,eax xor eax,eax На PIII xor может пойти на исполнение только после завершения mul, а на P4 одновременно или даже раньше mul
leo После умножения железо может сгенерить прерывание, которое займёт время, в течении которого можно выполнить тысячи ваших ксоров. зы: реалмод и нах никому не нужен вот.
Clerk Ага, а еще после mul может произойти отключение электропитания, пожар, землетрясение и т.д. и т.п. и тогда xor не выполнится вообще
leo Производительность не измеряют на микросекундах. Должно быть достаточным время(секунды). Вот обычно за это время сотни раз у потока отбираются кванты и тысячи он прерывается(да хотябы сейчас этот тред печатающий текст).
Clerk В среднем поток выполняет без прерываний несколько миллионов инструкций - более чем достаточный простор для оптимизации.
Если я правильно понимаю вопрос, он звучит примерно так: "При прочих равных, имеет ли xor reg, reg преимущество перед mov reg, 0 (в смысле более короткого опкода), и когда?" С моей точки зрения, тов. leo верно подметил специальное понимание xor (и sub) современными процессорами. При чём здесь RM — загадка.
baldr При этом. Когда например автор использует эту инструкцию весьма редко, а не миллионы раз в секунду, то при разрешённых прерываниях нет никакой оптимизации для этих ксоров. Попробуйте замерить(это кстате тоже делается не tsc+ миллион итераций).
Clerk И что из этого ? Значит если у нас не круглосуточное 3-сменное производство, а односменное 8 часов из 24, то можно и о производительности труда не беспокоиться ?! Все как раз наоборот - именно за счет повышения производительности можно отказаться от "реалмодной" трехсменки и ту же работу выполнять за 8 часов, "прерываясь" на "законный" 16-часовой отдых А вопрос с xor-ом придуман не каким-то "протупившим автором", а толковыми ребятами из AMD и Intel, которые зная\понимая, что обнуление регистров через xor более популярно, чем mov r,0 (из-за меньшего размера команды), позаботились о том, чтобы сделать ее незавимой от предыдущего значения регистра. Ну сделали и сделали - добавили еще одну каплю в море вопросов повышения производительности И автор цитаты тут ни причем, т.к. практически то же самое написано в "древних" интеловских мануалах по оптимизации PII\PIII, в которых эта фича не поддерживалась. А уж насколько критична зависимость\незавимость xor в конкретном коде - решать разработчику программы. Тут ты прав - если обнуление регистров происходит "не миллионы раз в секунду", а например на входе функции или цикла, то и голову ломать незачем. А посему критиковать нужно не автора цитаты, а автора топика, который "Всегда до этого писал xor eax, eax щас засомневался"
leo ПУсть разделяют вопросы, дабы не было подобных споров. Пишите - врежиме мультизадачности, либо в сферическом вакууме, типо реалмода. Для них абсолютно разные выводы.
Собственно не понял наезд на реалмод. Псевдомногозадачность в нем может подерживаться так же как и в протмоде. Защиты нет, ну и хрен с ней
Да и многозадачность ни при чём, если вспомнить про таймер, клавиатуру и прочие прелести. Как наяву вижу злобного юзера, ловящего момент и ломающего xor весь смысл его независимости, и шепчущего при этом: "У меня не забалуешь! mov forever!"