x86 Optimization Manuals

Тема в разделе "WASM.A&O", создана пользователем cppasm, 29 дек 2008.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    +FNOP =) /не претендую на достоверность/
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Чего за FNOP такой?
    На картинках в мануале AMD нет такого, там только три исполнительных устройства.
    Есть у меня подозрение что это из-за того что там конвейер четырёхуровневый:
    - FPU Stack Map/Rename
    - FPU Scheduler
    - FPU Register File
    - Execution Units

    [​IMG]
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    cppasm
    Это где же ты такое в "ихних мануалах" увидел ?! Может с SSE путаешь - 4 float параллельно ?

    Ничего "переводить" не нужно. Юзай "симуляцию пайплайна" - или в CodeAnalyst попробуй запихнуть или можно ручками расписать, если не лень - пример есть в мануале по оптимизации Athlon XP, и я как-то примерчики ручной симуляции приводил (например, тут или тут)

    Простые операции типа сложения\умножения - полностью конвееризованы, т.е. несмотря на латентность в 4 такта независимые умножения могут запускаться в каждом такте, т.е. выполняться с перекрытием
     
  4. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    leo
    У меня че-то не получается зарегистрироваться - процесс просто зависает. А без регистрации не скачать.

    Атлон выполняет до 3 инструкций за такт и 3 инструкции может декодировать. Но вот, что интересно: Vector Path инструкции декодируются по одной за такт, а могут ли такие инструкции спариваться с другими при выполнении?
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    murder
    После декодирования VectorPath инструкции превращаются в последовательность микроопераций. Поэтому, во-первых, правильнее говорить не "по одной", а "не более одной", т.к. в любом сл. за такт может выдаваться не более 3-х мопов и если их больше, то декодирование может растянуться на несколько или много тактов. Во-вторых, эти мопы поступают в ROB и далее в планировщик(и) наравне с DirectPath-мопами, т.е. также могут спариваться и между собой и с другими. Другое дело, что если число мопов очень велико (как например в rep movs), то они стопорят декодер и забивают собой весь конвеер, не пропуская последующие инструкции
     
  6. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Та нет.
    AMD64 Optimization Manual, ст. 228
    В описании примера оптимизации:

    [​IMG]
    Ну если за 15 тактов может быть выполнено 60 fpu команд, то я подумал что 4 команды за такт.

    CodeAnalyst у меня к сожалению ребутит машину, интересовал именно ручной вариант.
    Может он на Intel-процессоре не работает (я на работе пробовал, а тут Intel P4)?
    Сейчас почитаю те темы на которые ты ссылки дал.
    А в CodeAnalyst есть симуляция пайпа?

    Для тех кто не может зарегистрироваться на AMD: CodeAnalyst_Public_2.84.512.0356.rar на FileShare.in.ua
     
  7. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    cppasm
    Так это же 3DNow!
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Я знаю, и что?

    Блин :/
    Заработал CodeAnalyst.
    Только я что-то с ним разобраться не могу.
    Он что без отладочной информации файлы не обрабатывает?
    Говорит:
    Unable to get source files for target module from the symbolic information.
    Please make shure the symbolic information contains source information and try again.

    А если я на ассемблере писал, где я ему отладочную информацию возьму?
    Поставил даже галку в опциях - Bypass source (disassembly only), не помогает.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    cppasm
    Ха-ха. И где же ты тут видишь 6 "операций" ?. Как я и предполагал, речь идет не об инструкциях или микрооперациях, а о высокоуровневых умножениях\сложениях (в данном случае [x0r*y0i+x0i*y0r,x0r*y0r-x0i*y0i] -> 6 штук), которые за счет векторизации на MMX могут выполняться по 2 за одну инструкцию (SIMD). Вот и получается: 1 mmx-сложение + 1 mmx-умножение за такт, итого 4 "singleprecision floating-point operations" :lol:

    Да, только на родимых АМД

    Есть. Только не очень удобная - нужен экзешник, исходники и отладочная инфа в формате pdb. Поэтому нужно компилить в msvc или масме (радасме) в дебаге с ключом /Zi
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Честно сказать я не допёр :)
    Смотрю инструкций 5, пишут про шесть, вроди все DirectPath, так что в микрооперациях тоже не сходится - думал опечатка.
    Ясно теперь всё.

    Ясно. Спасибо за помощ, буду разбираться.
     
  11. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Вопрос уже не совсем по оптимизации...
    Копаюсь тут в CodeAnalyst.
    Зметил у себя в коде в паре мест следующую картину: Stall due to reservation station full.
    Вопрос - кто виноват и что делать.
    Я так понимаю переполнена очередь команд, т.е. загруженные ранее команды не успели выполниться.
    Но не понимаю почему.
    Перед командой на которой происходит Stall идут только DirectPath команды, судя по CodeAnalyst выполняются в основном по 2 за такт (одна на FADD, вторая на FMUL).
    Не пойму как этот Stall убрать.
     
  12. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    cppasm
    Наверное декодируются по 3 за такт
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Ну да, декодируются по 3.
    Но чтобы выполнялось по три за такт это практически не реально.
    FADD и FMUL обрабатывают кучу операций за счёт наличия ALU, а FSTORE обрабатывает практически только запись в память плюс VectorPath команды которых у меня нет.
    А поскольку в начале обработки я из памяти только читаю - ничего не пишу, для FSTORE работы нету...
     
  14. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    И ещё вопрос что такое FPU Scheduler Ineligible.
    В справке нигде описания нету :dntknw:

    [​IMG]
     
  15. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    cppasm femms навеял вопрос: если не секрет, зачем использовать 3dnow в век sse*?)
     
  16. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    asmfan
    Там есть неплохие инструкции вроде PAVGW, PFNACC и PSADBW. К тому же на Атлонах 3D-Now! видимо будет работать быстрее SSE (т.к. SSE - VectorPath).
     
  17. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    2убийство
    PAVGW, PSADBW есть везде.
    PFNACC
    [AMD64 Architecture Programmer’s Manual, Volume 5, 64-Bit Media and x87 Floating-Point Instructions] 26569.pdf
    хоть и sse3
    +размеры регистров данных учтите.
    +там же
     
  18. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    SSE вроде не работает в реальном режиме)))
     
  19. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    exst
    Когда в топик по manuals пишете, можно и посмотреть в эти самые мануалы. Real-Address Mode Exceptions секция даст ответ вроде.
     
  20. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Затем что SSE не у всех есть.
    У меня например на Duron нету, зато есть 3DNow!, 3DNow! Ext, MMX, MMX Ext.
    Поэтому код пишется в нескольких вариантах, вплоть до реализации на командах i386.
    И SSE кстати не быстрее.
    Там у меня 3DNow! кода много, просто на скрине не видно.
    На Атлонах 3DNow! работать будет. Тут можно поставить точку.
    Потому что SSE на них нет вообще, есть только начиная с Athlon XP.
    Всё там работает, если правильно всё делать (CR0 и CR4 настроить надо).