Чего за FNOP такой? На картинках в мануале AMD нет такого, там только три исполнительных устройства. Есть у меня подозрение что это из-за того что там конвейер четырёхуровневый: - FPU Stack Map/Rename - FPU Scheduler - FPU Register File - Execution Units
cppasm Это где же ты такое в "ихних мануалах" увидел ?! Может с SSE путаешь - 4 float параллельно ? Ничего "переводить" не нужно. Юзай "симуляцию пайплайна" - или в CodeAnalyst попробуй запихнуть или можно ручками расписать, если не лень - пример есть в мануале по оптимизации Athlon XP, и я как-то примерчики ручной симуляции приводил (например, тут или тут) Простые операции типа сложения\умножения - полностью конвееризованы, т.е. несмотря на латентность в 4 такта независимые умножения могут запускаться в каждом такте, т.е. выполняться с перекрытием
leo У меня че-то не получается зарегистрироваться - процесс просто зависает. А без регистрации не скачать. Атлон выполняет до 3 инструкций за такт и 3 инструкции может декодировать. Но вот, что интересно: Vector Path инструкции декодируются по одной за такт, а могут ли такие инструкции спариваться с другими при выполнении?
murder После декодирования VectorPath инструкции превращаются в последовательность микроопераций. Поэтому, во-первых, правильнее говорить не "по одной", а "не более одной", т.к. в любом сл. за такт может выдаваться не более 3-х мопов и если их больше, то декодирование может растянуться на несколько или много тактов. Во-вторых, эти мопы поступают в ROB и далее в планировщик(и) наравне с DirectPath-мопами, т.е. также могут спариваться и между собой и с другими. Другое дело, что если число мопов очень велико (как например в rep movs), то они стопорят декодер и забивают собой весь конвеер, не пропуская последующие инструкции
Та нет. AMD64 Optimization Manual, ст. 228 В описании примера оптимизации: Ну если за 15 тактов может быть выполнено 60 fpu команд, то я подумал что 4 команды за такт. CodeAnalyst у меня к сожалению ребутит машину, интересовал именно ручной вариант. Может он на Intel-процессоре не работает (я на работе пробовал, а тут Intel P4)? Сейчас почитаю те темы на которые ты ссылки дал. А в CodeAnalyst есть симуляция пайпа? Для тех кто не может зарегистрироваться на AMD: CodeAnalyst_Public_2.84.512.0356.rar на FileShare.in.ua
Я знаю, и что? Блин :/ Заработал 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), не помогает.
cppasm Ха-ха. И где же ты тут видишь 6 "операций" ?. Как я и предполагал, речь идет не об инструкциях или микрооперациях, а о высокоуровневых умножениях\сложениях (в данном случае [x0r*y0i+x0i*y0r,x0r*y0r-x0i*y0i] -> 6 штук), которые за счет векторизации на MMX могут выполняться по 2 за одну инструкцию (SIMD). Вот и получается: 1 mmx-сложение + 1 mmx-умножение за такт, итого 4 "singleprecision floating-point operations" Да, только на родимых АМД Есть. Только не очень удобная - нужен экзешник, исходники и отладочная инфа в формате pdb. Поэтому нужно компилить в msvc или масме (радасме) в дебаге с ключом /Zi
Честно сказать я не допёр Смотрю инструкций 5, пишут про шесть, вроди все DirectPath, так что в микрооперациях тоже не сходится - думал опечатка. Ясно теперь всё. Ясно. Спасибо за помощ, буду разбираться.
Вопрос уже не совсем по оптимизации... Копаюсь тут в CodeAnalyst. Зметил у себя в коде в паре мест следующую картину: Stall due to reservation station full. Вопрос - кто виноват и что делать. Я так понимаю переполнена очередь команд, т.е. загруженные ранее команды не успели выполниться. Но не понимаю почему. Перед командой на которой происходит Stall идут только DirectPath команды, судя по CodeAnalyst выполняются в основном по 2 за такт (одна на FADD, вторая на FMUL). Не пойму как этот Stall убрать.
Ну да, декодируются по 3. Но чтобы выполнялось по три за такт это практически не реально. FADD и FMUL обрабатывают кучу операций за счёт наличия ALU, а FSTORE обрабатывает практически только запись в память плюс VectorPath команды которых у меня нет. А поскольку в начале обработки я из памяти только читаю - ничего не пишу, для FSTORE работы нету...
asmfan Там есть неплохие инструкции вроде PAVGW, PFNACC и PSADBW. К тому же на Атлонах 3D-Now! видимо будет работать быстрее SSE (т.к. SSE - VectorPath).
2убийство PAVGW, PSADBW есть везде. PFNACC [AMD64 Architecture Programmer’s Manual, Volume 5, 64-Bit Media and x87 Floating-Point Instructions] 26569.pdf хоть и sse3 +размеры регистров данных учтите. +там же
exst Когда в топик по manuals пишете, можно и посмотреть в эти самые мануалы. Real-Address Mode Exceptions секция даст ответ вроде.
Затем что SSE не у всех есть. У меня например на Duron нету, зато есть 3DNow!, 3DNow! Ext, MMX, MMX Ext. Поэтому код пишется в нескольких вариантах, вплоть до реализации на командах i386. И SSE кстати не быстрее. Там у меня 3DNow! кода много, просто на скрине не видно. На Атлонах 3DNow! работать будет. Тут можно поставить точку. Потому что SSE на них нет вообще, есть только начиная с Athlon XP. Всё там работает, если правильно всё делать (CR0 и CR4 настроить надо).