Количество тактов процессора при выполнении инструкций

Тема в разделе "WASM.BEGINNERS", создана пользователем naTpuoT, 19 ноя 2008.

  1. naTpuoT

    naTpuoT New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    20
    Адрес:
    Russia
    Народ, помогите! Поиск "на вскидку" ничего не дал :dntknw:
    Товарищ просил помочь - нужна информация о количестве тактов (от скольки и до скольки) для P4 при выполнении следующих операций:
    -сложение;
    -умножение;
    -деление;
    -вычитание;
    -сравнение.
    Нужно просто для примера (т.е. не все возможные варианты данных операций, а хотя бы основные).
    Из всего, что находил - наиболее подошли пару статей на этом сайте про оптимизацию , но они для PIII :dntknw:
    Если что упустил - ткните пальцем, буду признателен.
    Заранее спасибо!
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Количество тактов на операцию во всех более-менее современных процессорах -- вещь очень относительная, потому что процессоры совмещают разные этапы выполнения (выборка, декодирование, загрузка исходных операндов, собственно операция, запись результата) нескольких команд довольно сложным образом. В зависимости от местоположения команды и её данных (только в памяти или в кэше, а если в кэше, то в каком) время выполнения команд типа сложения, вычитания, сравнения, пересылки может составлять от одного "виртуального" такта до нескольких десятков, а то и сотен ("виртуального" из-за того, что совмещается выполнение разных этапов разных команд).

    В общем, никакого однозначного ответа при такой постановке вопроса быть не может -- в том числе и для пня-3.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    naTpuoT
    Это ж как надо было вскинуть, чтобы не заглянуть на официальный сайт.
    http://www.intel.com/products/processor/manuals/
    В частности Intel® 64 and IA-32 Architectures Optimization Reference Manual. В частности Appendix C. В частности Table C-12.
     
  4. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    SII
    Это да, разве что самому не измерить воспользововшись rdtsc. В моей практике по тесту производимого кода (в основном HLL компилей) я использую простейший тест
    Код (Text):
    1. {$apptype console}
    2. program xtest;
    3.  
    4. function Div100(xz:integer):integer;
    5. begin
    6.     result := xz div 100;
    7. end;    
    8.  
    9. function AsmDiv100 (xz:integer):integer;
    10. asm mov ecx, eax
    11.     mov  eax, 51EB851Fh
    12.     imul ecx
    13.     sar  edx, 5
    14.     sar  ecx, 1Fh
    15.     sub  edx, ecx
    16.     mov  eax, edx
    17. end;
    18.  
    19.  
    20. function rdtsc: int64; asm RDTSC end;
    21.  
    22. var takt:int64; cc:integer;
    23.  
    24. begin
    25.     takt:=rdtsc;   // калибровка rdtsc
    26.     cc:=rdtsc-takt;
    27.  
    28.  
    29.     takt:=rdtsc;
    30.      AsmDiv100 (100000);
    31.     takt:=rdtsc-takt;
    32.  
    33.     writeln (takt-cc);
    34.  
    35.     takt:=rdtsc;
    36.      Div100 (100000);
    37.     takt:=rdtsc-takt;
    38.  
    39.     writeln (takt-cc);
    40. end.
    /off
    SII представляете, а разница-то исполнения различных вариантов DIV оказываеться копеешная! :-P
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    bugaga
    Я пишу на дельфи либу с оптимизацией. Так вот замена деление на умножение в разных местах дала выигрышь от 15% до 100%(в 2 раза). Если учесть что у меня цикл на милион кругов, то выигрыш существенный.
     
  6. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Pavia
    Ну если компилятор у него не умеет оптимизировать код, то div по сравнению с call покажется ерундой :)
     
  7. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Pavia
    Уфф.. Не верю. Чтоб ты этот конченый компилятор юзал..
     
  8. naTpuoT

    naTpuoT New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    20
    Адрес:
    Russia
    Зря смеешься, скачал 7 мануалов с того сайта, но не угадал :) Именно на этот внимания не обратил :dntknw:. Времени просто очень мало было вникать...

    Всем ответившим большое человеческое спасибо, особенно l_inc!
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    naTpuoT
    Загляни к Агнеру Фогу. Там и instruction_tables.pdf с латентностями практически всех инструкций (а не выборочно, как у Intel) для всех современных процев и еще масса всего интересного

    CrystalIC
    Как ни странно, но я тоже его юзаю :lol:
    Там где компилер не тянет, там встроенный асм рулит
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    CrystalIC
    а какой компилятор хороший? msvc2008? он мне недавно скомпилил "lea esp,[esp]". я долго медитировал над этой инструкцией, но ее сакральный смысл остался мне непонятен. возможно это был nop, только нахрена он мне?

    все же оптимальность кода в первую очередь определяется программистом, а не компилятором.
     
  11. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    :lol: DD
     
  12. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Вполне вероятно, что для выравнивания.
     
  13. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Velheart
    Ты прав. К примеру масм генерирует при выравнивании, когда требуетсо добавить 3 байта инструкцию lea ecx,d[ecx].