Оптимизация программ на ассемблере

Тема в разделе "WASM.X64", создана пользователем Melon, 5 мар 2009.

  1. Melon

    Melon New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    3
    Здраствуйте . На последнем семинаре по информатике в моём ВУЗе , наш семинарист сказал , что сейчас СИ намного быстрее ассемблера . Якобы ассемблер линеен , а если компилировать программу на с оптимизацией , то эта программа на си делает даже самую изящную прогу на asm . Действительно ли это так ? И если не так что дайте пожалуйста мне контр пример , лично я в это не верю . Ведь если есть такие возможности оптимизации на си , то и в ассемблере их уже наверное сделали . Спасибо за внимание .
    P.S. Извиняюсь заранее за новую созданную тему , просто не знаю кого можно ещё спросить . Просто я этого не понимаю , ассебмлер - это считай почти машинный код только словами . Программа на си в последствии тоже переводится в машинный код , как один код может работать быстрее другого , тем более один код считай ты сам делаешь , то есть в некоторых моментах ты можешь получить даже раз 10 более изящный код чем на СИ !
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    В ассемблере оптимизация делается вручную.

    Все именно так. Ваш семинарист дилетант.

    "Если руки-крюки и волосата грудь - то не будь профессором, грузчиком ты будь..." - это про него :)
     
  3. Melon

    Melon New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    3
    основной его довыд был в том , что асма за один шаг делает одну команду ну допустим mov eax,ebx . То есть работает только с eax и ebx , в то время как си (с оптимизирующей компиляцией ) анализируя твой код при компиляции паралельно работает со всеми остальными устройствами и т.д. Он говорил именно только появилось на новых процессорах . Такое вообще возможно ? И как это реализовать на асме ? Посоветуйте что можно почитать(можно на англ.) про новые процессоры и их архитектуру и про программирование на fasm на них .
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Melon
    такое возможно, только одновременным исполнением занимается не си, а процессор. Видимо, си просто расставляет инструкции ассемблера так, чтобы процессор мог выполнять их одновременно. Конечно, на асме ты руками тоже можешь такое делать, но это аналогично написанию программы сразу в машинных кодах - замучаешься просто. Компилятор си автоматом все оптимизирует, а тебе руками придется + надо помнить все правила выполнения комманд процессором.
    лучше забей на это дело - это сложно, неудобно (вряд ли код на асме будет более читабелен) и нафиг не надо даже на старых компах
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Melon, и человек и компилер могут выдать код который использует все регистры (minimizes spill into ram) и перемешивает инстр-ции работы с ram и регистрами (что бы держать full pipeline) и уменьшает кол-во переходов и их логику (для улучшения branch prediciton) и т.д. Это только несколько примеров оптимизации.

    Всё зависит от качества компилера и опыта человека :) Раньше компилеры были примитивными, и такие оптимизации далались только руками. В современном компилере (в оптимизаторе) много всего реализовано, и большенству задач (и людей) просто не надо париться с асмом. В то же время, есть задачи где ручная оптимизация нужна, и знающий человек сделает её под конкретный силикон лучше чем компилер, но потеряет portability.

    Итог, нельзя сказать что ручной асм всегда быстрее или медленнее того что выплюнет компилер.
     
  6. Melon

    Melon New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    3
    s0larian
    А можно писать такие проги на каком-нибудь fasm ? Или это только если на машинном коде ? И где можно почитать литературу про это?
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Это опять какая-то провокация...
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Melon
    Компилятор оптимизирует быстрее чем человек.
    Написание программы на Си быстрее чем на ассемблере.
    Но качество оптимизации компилятора и человека различается.
    Человек выполняет оптимизацию гораздо лучше чем машина.Пример возьмем любую математическую библиотеку.

    Человек может оптимизировать как код на Си так и на Ассемблере. В целях переносимости и удобства восприятия пишут на Си.

    Для примера простая реализация БПФ уступает ручной оптимизации от интел или FFTW в 25 раз!!!
    Тоже самое относиться ко всем другим алгоритмам только скорость может отличаться. На ассемблере тоже можно криво написать.

    Он говорил про паролельность. Вопервых тут два основных аспекта. Это многоядерность и много поточная командная обработки.

    Что касается много поточная командной обработки. То тут ваш семинарист ошибается. Компилятор Си сам такую оптимизацию практически не делает нужно ручками написать.
    Примерно это выгляди так.
    Эти команды должны пойти в разные порты.

    В некоторых случаях компилятор может сделать так, но уж больно в редких и самых простых.

    Теперь что касается SIMD инструкций. Может вставить но не использует их по полной. Все математическии библиотеки исользуют либы ассемблерные вставки. Либы в коде на Си вставленны intrinsic. Но тут идет ручная оптимизация.

    Теперь что касается паралельности кода на многоядерных машинах. Вроде есть возможность дозволить компилятору самому решать как сделать распаролеливание. Хотя почему то использую OpenMP с прямым указанием в коде как делать.

    В основном вся оптимизация компилятора сводиться к распределению регистров и выравнивание кода и комманд. А вот вынос статического кода из цикла работает с переменным успехом. А это было сделанно давно. Остальная оптимизация не дает такого заметного эффекта. Потому что либы приносят незначительный прирос скорости либы приносит значительный, но в редких случаях.

    Можно ли обогнать компилятор? Да можно. Насколько это сложно? Зависит от компилятора. Но парочка простых приемов дает результат привосходящей компилятор в скоросте хотябы незначительно.

    Это все мое мнение.
     
  9. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    всё можно и всё реально. FASM поддерживает почти все команды процессора.
    Если нужна реальная оптимизация, то без ассемблера не обойтись!
    просто основная проблема в том что большинство преподов в институтах знают только 16 битный ассемблер под DOS, а в реальном режиме большинство возможностей процессора недоступны. Вот спросишь у них что такое что такое регистр CR3 и механизм трансляции адресов, он ответит что не знает.
     
  10. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    Как бы некоторые виды изящного кода не дали HEUR.Crypted =)