mov eax, 0 или xor eax, eax

Тема в разделе "WASM.A&O", создана пользователем gnym, 26 июн 2010.

  1. gnym

    gnym New Member

    Публикаций:
    0
    Регистрация:
    26 июн 2010
    Сообщения:
    1
    я вычитал "Общей праактикой установки значений регистров в ноль является использование операций типа xor eax, eax или sub eax, eax. Эти инструкции не рапсознаются как независимые от предыдущего значения регистра, что приводит к замедлению началаих исполнения. Чтобы избавиться от зависимости от предшествующих инструкций, следует использовать mov eax, 0."
    Однако мой друг говрит "xor eax, eax рекомендована intelом"
    Кто прав ? Всегда до этого писал xor eax, eax щас засомневался.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    xor eax,eax
    (разумеется если флажки сохранять не нужно).
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    gnym
    Интел прав. Он распознает xor eax,eax и sub eax,eax как независимые инструкции.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    gnym
    А да тема обсуждалось поищи.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    gnym
    А на год издания внимание обратил ? Эти инструкции стали независимыми, начиная с AMD K7 Athlon, а у Intel с Pentium 4.
    См. раздельчик Break dependency chains в optimizing_assembly.pdf by Agner Fog
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Просто автор протупил на счёт:
    Это может быть только в реалмоде при огромном числе итераций и отключенной перифирии, такой как жёсткие диски, тоесть на практике нигде не юзается и никакой разницы в задержках нет.
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Clerk
    Да нет, речь о "банальной" зависимости\независимости от пред.значения eax. Например:
    Код (Text):
    1. mul edx
    2. mov edx,eax
    3. xor eax,eax
    На PIII xor может пойти на исполнение только после завершения mul, а на P4 одновременно или даже раньше mul
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    leo
    После умножения железо может сгенерить прерывание, которое займёт время, в течении которого можно выполнить тысячи ваших ксоров.
    зы: реалмод и нах никому не нужен вот.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Clerk
    Ага, а еще после mul может произойти отключение электропитания, пожар, землетрясение и т.д. и т.п. и тогда xor не выполнится вообще :lol:
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    leo
    Производительность не измеряют на микросекундах. Должно быть достаточным время(секунды). Вот обычно за это время сотни раз у потока отбираются кванты и тысячи он прерывается(да хотябы сейчас этот тред печатающий текст).
     
  11. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Clerk
    В среднем поток выполняет без прерываний несколько миллионов инструкций - более чем достаточный простор для оптимизации. :derisive:
     
  12. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Если я правильно понимаю вопрос, он звучит примерно так: "При прочих равных, имеет ли xor reg, reg преимущество перед mov reg, 0 (в смысле более короткого опкода), и когда?"

    С моей точки зрения, тов. leo верно подметил специальное понимание xorsub) современными процессорами.

    При чём здесь RM — загадка. :derisive:
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    baldr
    При этом. Когда например автор использует эту инструкцию весьма редко, а не миллионы раз в секунду, то при разрешённых прерываниях нет никакой оптимизации для этих ксоров. Попробуйте замерить(это кстате тоже делается не tsc+ миллион итераций).
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    rtos негодует :)
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Clerk
    И что из этого ? Значит если у нас не круглосуточное 3-сменное производство, а односменное 8 часов из 24, то можно и о производительности труда не беспокоиться ?! Все как раз наоборот - именно за счет повышения производительности можно отказаться от "реалмодной" трехсменки и ту же работу выполнять за 8 часов, "прерываясь" на "законный" 16-часовой отдых ;)

    А вопрос с xor-ом придуман не каким-то "протупившим автором", а толковыми ребятами из AMD и Intel, которые зная\понимая, что обнуление регистров через xor более популярно, чем mov r,0 (из-за меньшего размера команды), позаботились о том, чтобы сделать ее незавимой от предыдущего значения регистра. Ну сделали и сделали - добавили еще одну каплю в море вопросов повышения производительности ;) И автор цитаты тут ни причем, т.к. практически то же самое написано в "древних" интеловских мануалах по оптимизации PII\PIII, в которых эта фича не поддерживалась.
    А уж насколько критична зависимость\незавимость xor в конкретном коде - решать разработчику программы. Тут ты прав - если обнуление регистров происходит "не миллионы раз в секунду", а например на входе функции или цикла, то и голову ломать незачем. А посему критиковать нужно не автора цитаты, а автора топика, который "Всегда до этого писал xor eax, eax щас засомневался" :)
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    leo
    ПУсть разделяют вопросы, дабы не было подобных споров. Пишите - врежиме мультизадачности, либо в сферическом вакууме, типо реалмода. Для них абсолютно разные выводы.
     
  17. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Собственно не понял наезд на реалмод. Псевдомногозадачность в нем может подерживаться так же как и в протмоде. Защиты нет, ну и хрен с ней
     
  18. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Да и многозадачность ни при чём, если вспомнить про таймер, клавиатуру и прочие прелести. Как наяву вижу злобного юзера, ловящего момент и ломающего xor весь смысл его независимости, и шепчущего при этом: "У меня не забалуешь! mov forever!" :derisive: