Acovea реализует генетический алгоритм для нахождения "лучшие" варианты для компиляции программ с GCC и C ++ компиляторов C.
ACOVEA (анализ вариантов компилятора через эволюционный алгоритм) реализует генетический алгоритм, чтобы найти "лучшие" варианты для компиляции программ с GNU Compiler Collection (GCC) С и компиляторов C ++.
"Лучший", в данном контексте, определяется как тех вариантов, которые производят самый быстрый исполняемую программу из данного исходного кода. Acovea является С ++ структура, которая может быть расширена, чтобы проверить другие языки программирования и без GCC компиляторы.
Я представляю Acovea в качестве инструмента оптимизации, аналогичным по назначению к профилированию. Традиционный профилирование функции уровня определяет алгоритмы наиболее влиятельных в производительности приложений; Acovea затем применяется к тем алгоритмов, чтобы найти флаги компилятора и параметры, которые генерируют самый быстрый код.
Acovea также полезно для тестирования комбинаций флагов для пессимистических взаимодействия, и проверить надежность компилятора.
Современное программное обеспечение трудно понять и проверить с помощью традиционных средств. Миллионы строк кода приложения, содержащие производить сложные взаимодействия, вопреки простое описание или перебором расследование.
Управляемый, детерминированный подход к тестированию полагается на человека тестеры представить себе все возможные комбинации действий - нереальные предложения данную сложность программного обеспечения. Тем не менее, несмотря на это сложности, мы должны ответить на важные вопросы о современной, масштабной программного обеспечения.
Какие важные вопросы? Рассмотрим компиляторов GNU, Я пишу статьи, которые тест генерации кода, задача сопряжено с трудностями из-за многочисленных вариантов, предусмотренных различными компиляторами. Для мои тесты, чтобы иметь какой-либо смысл, мне нужно знать, какая комбинация вариантов производит быстрый код для данного приложения.
Поиск "лучший" набор опций звучит как простая задача, учитывая степень GCC документации и житейская мудрость из сообщества разработчиков GCC. Ах, если бы это было только так просто! Документация GCC, в то время как обширный, также честно неточным.
Я ценю этот стиль документации; в отличие от многих коммерческих поставщиков, которые делают абсолютные заявления о «качестве» их продукции, писателей документации GCC признают неопределенности в том, как различные варианты изменяют генерацию кода. Действительно, генерации кода, полностью зависит от типа применения скомпилированного и целевой платформы. Опцион, который производит быстрый исполняемый код для одного исходного кода может быть вредным для выполнения другой программы.
"Здравый смысл" прибыл в мой почтовый ящик, когда я публикую новую статью. Начиная от вежливым настойчивый к грубым, эти электронные письма содержат противоречивые предложения для получения быстрого кода.
В подавляющем большинстве случаев, такие анекдотические утверждения не имеют никакого формального доказательства их обоснованности, и, чаще, чем нет, предложил "улучшение" неэффективно или вредным. Это становится все более очевидным, что никто --myself включен - точно не знает, как все эти варианты GCC работать вместе в создании программного кода.
Я ищу Святой Грааль оптимизация - но именно то, что является оптимизация? Понимание проблемы является первым шагом в поиске решения.
Оптимизация пытается произвести "лучший" машинный код из исходного кода. "Лучший" означает разные вещи для разных приложений; а лопаты баз данных куски информации, в то время как научно приложения, связанные с быстрым и точным результатам; первой заботой для встраиваемых систем могут быть размер кода.
И это вполне возможно, что небольшой код быстро, или код быстрого точным. Оптимизация далеко не точная наука, учитывая разнообразие оборудования и программного обеспечения.
Алгоритм оптимизации может быть как простой, как удаление цикл инвариант, или же сложным, как изучение целую программу, чтобы устранить глобальные общие подвыражения. Многие оптимизации изменить то, что программист написал в более эффективной форме, производить тот же результат, а изменяя, лежащие в основе данные для повышения эффективности; другой "оптимизации" продукция код, который использует специфические характеристики используемого оборудования, такие как специальные наборы инструкций.
Архитектуры памяти, трубопроводы, включения и отключения чипа кэширует - все влияет на производительность кода способами, которые не очевидны для программистов, использующих язык высокого уровня. Оптимизация, что может показаться, чтобы произвести быстрый код может, на самом деле, создать большой код, который вызывает больше промахов, тем самым снижения производительности.
Даже самый лучший ручной настроены С-код содержит области интерпретации; нет абсолютной, один-на-однозначное соответствие между С заявлениями и машинных инструкций. Почти любая последовательность исходного кода могут быть скомпилированы в разные - но функционально эквивалентны - машинная потоков с различными размерами и характеристиками.
Встраивание функций является классическим примером этого явления: замена вызова функции с кодом самой функции могут производить более быстрый программу, но также может увеличить размер программы. Увеличение размера программы, могут, в свою очередь, предотвращает алгоритм прилеганию внутри высокоскоростной кэш-памяти, таким образом, замедляя программу из-за кэш-промахов.
Обратите внимание, мое использование ласки слово "может" - встраивание небольших функций иногда позволяет Другие алгоритмы оптимизации шанс для дальнейшего улучшения кода для местных условий, создавая быстрее и меньше кода.
Оптимизация не просто или очевидно, и комбинации алгоритмов может привести к неожиданным результатам. Это возвращает меня к вопросу: Для любого данного приложения, каковы наиболее эффективные варианты оптимизации?
Что нового в этой версии:
· Незначительные изменения в несвободной лицензией.
· Добавлена поддержка для последних версий libcoyotl и libevocosm.
Детали программы:
Версия: 1.0.1
Дата загрузки: 3 Jun 15
Тип распространения: Бесплатная
Популярность: 176
Комментарии не найдены