> Я написал программу(MSVC), не очень большую. > У меня есть и код этой программы и EXE-файл. > Задача стоит "optimize for speed".. > Слышал, что если ее "дезасемблировать" а потом в том же > MSVC собрать заново то она будет работать быстрее... > > Правда ли ЭТО? Нет, это чушь
> И как ЭТО сделать? Лучший способ получить ассемблерный листинг это включить его создание в самом MSVC
> А может существуют другие способы "optimize for speed" , > кроме Release with /O2?? Преждевременная оптимизация - корень всех бед. (с) не помню кто
Нужно оптимизировать не всю программу, а только "бутылочные горлышки", то бишь места, в которых программа проводит наибольшую часть времени при исполнении. Места эти находятся специальными программами - профайлерами (profiler), например TrueTime от Compuware
Еще на код можно натравить VTune от интеля - он показывает как и что можно улучшить в плане оптимизации под интеловский процессоры (правильно парование для U и V конвейеров, выравнивание по границе кеш-строки и пр.)
> Зараннее благодарен за любую информацию..
Я написал программу(MSVC), не очень большую.
У меня есть и код этой программы и EXE-файл.
Задача стоит "optimize for speed"..
Слышал, что если ее "дезасемблировать" а потом в том же MSVC собрать заново то она будет работать быстрее...
Правда ли ЭТО? И как ЭТО сделать?
А может существуют другие способы "optimize for speed" , кроме Release with /O2??
Зараннее благодарен за любую информацию..
Спасибо ВСЕМ, кто откликнулся..10.06.04 18:22 Автор: Vasili Статус: Незарегистрированный пользователь
О, Василий, Вы мне разбудили во мне воспоминания о годах,...10.06.04 10:38 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 10.06.04 10:41 Количество правок: 1
О, Василий, Вы мне разбудили во мне воспоминания о годах, канувших в небытие. Тогда "под рукой" был интерпритатор Бэйсика, Фортран, "никакенный" С и Ассемблер.
Бейсик был по всеобщему умозаключению самый тормозной, поскольку являлся интерпретатором, и каждую мнемонически записанную операцию он перед выполнением переводил в удобоваримый код. Быстрее работали оттранслированные в машинный код программы Фортрана. Ассемблеровский код вылизанный вручную работал быстрее всего, поскольку трансляторы не всё могли перевести идеально.
Вот тогда то кое у кого и возникла мысль "Если фортрановскую программу (екзешник) дизассемблировать, а потом пересобрать при помощи уже самого ассемблера, то она будет работать быстрее". Глубочайшее заблуждение новичков.
Однажды я был свидетелем, как скорость работы вычислительной программы постепенно возрастала в десятки тысяч раз по мере модификации/улучшения или применения нового алгоритма. Таких примеров я могу привести не один.
Несколько десятков лет назад ядерные и химические реакции, физические процессы успешно обсчитывались на БЭСМ-6, которая была тормознее современного настольного ПК в десятки-сотни тысяч раз. А сейчас на современных ПК элементарные задачи сортировки или поиска поиска в базах почему-то ужасно "тормозят". На скорость выполнения задачи влияют ТОЛЬКО две вещи: быстродействие компьютера и оптимальность АЛГОРИТМА. Причем оптимальность кода с точки зрения процессора относится к оптимальности алгоритма и составляет от него ничтожно малую часть.
Можно бухнуть приличную сумму на замену процессора на вдвое-втрое более быстрый, а можно покрапеть часок-другой над алгоритмом и скорость программы возрастет не в два-три раза, а на два-три десятичных порядка.
Чушь10.06.04 10:30 Автор: amirul <Serge> Статус: The Elderman
> Я написал программу(MSVC), не очень большую. > У меня есть и код этой программы и EXE-файл. > Задача стоит "optimize for speed".. > Слышал, что если ее "дезасемблировать" а потом в том же > MSVC собрать заново то она будет работать быстрее... > > Правда ли ЭТО? Нет, это чушь
> И как ЭТО сделать? Лучший способ получить ассемблерный листинг это включить его создание в самом MSVC
> А может существуют другие способы "optimize for speed" , > кроме Release with /O2?? Преждевременная оптимизация - корень всех бед. (с) не помню кто
Нужно оптимизировать не всю программу, а только "бутылочные горлышки", то бишь места, в которых программа проводит наибольшую часть времени при исполнении. Места эти находятся специальными программами - профайлерами (profiler), например TrueTime от Compuware
Еще на код можно натравить VTune от интеля - он показывает как и что можно улучшить в плане оптимизации под интеловский процессоры (правильно парование для U и V конвейеров, выравнивание по границе кеш-строки и пр.)
> Зараннее благодарен за любую информацию..
лучший способ оптимизировать программу - это улучшить...10.06.04 09:18 Автор: noonv <Vladimir> Статус: Member
лучший способ оптимизировать программу - это улучшить алгоритм работы;
посмотри какие функции вызывается часто - оптимизируй их(можно и на asm-е переписать)