Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизМетоды компиляции и оптимизации машинных команд Найти похожие ветки
← →
DevilDevil © (2012-09-18 13:09) [0]Какой день (а может и неделю) одержим идеей сверх-супер-пупер оптимизированной компиляции кода. Идея мне эта чертовски мешает, и если грамотно расставлять приоритеты - абсолютно мне сейчас не нужно разрабатывать такой компилятор.
Но! Раз голова горяча - есть прекрасная возможность пополнить свой багаж знаний областью, которой не владею абсолютно. А именно компиляция, и именно высокопроизводительная оптимизация.
Я прекрасно понимаю, что на форуме тонна сверх профессионалов, лично разработавших оптимизацию компилятора icc. (такие специалисты обычно знают url гугла и названия бородатых книжечек). Но тем не менее, наверное кто-то из здесь присутствующих имеет представление о разработке компилятора и знает практические подходы к разработке оптимизатора. Я достаточно часто пишу ресурсоёмкий код на ассемблере и понятия не имею, как схожей производительности добиваются С++ оптимизаторы.
Я слышал, что используют теорию графов каким-то образом. Одну и ту же последовательность ЯВУ-"команд" можно выполнить огромным числом способов, учитывая латентность и "throghput", распределение по регистрам и попадание в кэш. FPU по сравнению с Delphi-овской выполняется крайне эффективно. Раз всё это делается, значит существуют соответствующие алгоритмы и подходы.
Хотелось бы чтобы каждый этап компиляции и оптимизации был проиллюстрирован псевдокодом. Я понимаю, что врядли здесь находятся разработчики icc и gcc, а так же Intel Fortran. Но тем не менее интересно будет выслушать мысли умных людей. (только действительно умных, а не тех кто ими хочет казаться ;)
← →
DevilDevil © (2012-09-18 13:10) [1]p.s. пролистал Н. Вирта - ничего интересного не увидел
← →
Rouse_ © (2012-09-18 13:14) [2]Это тебе с oxffff нужно связаться, Серега как раз в этом направлении работает.
← →
Rouse_ © (2012-09-18 13:16) [3]зы: а, ну и конечно http://rouse.drkb.ru/books.php#compilers
это именно по разработке компиляторов и оптимизации
← →
no_way (2012-09-18 13:17) [4]начать с этого
http://ru.wikipedia.org/wiki/Книга_дракона_(компиляторы)
(в смысле с книги)
← →
DevilDevil © (2012-09-18 13:57) [5]> Rouse_ © (18.09.12 13:14) [2]
> no_way (18.09.12 13:17) [4]
ну ништяк чё )
начинаю читать )
спасибо
кастую oxffff в ветку
← →
QAZ2 (2012-09-18 13:57) [6]все книги бессмыслены, ибо парни их пишущие не делают процессоры
а парни которые делают процессоры (Intel) уже давно выпускают свои супер-пупер оптимизированные компиляторы под С++ и Фортран
← →
DevilDevil © (2012-09-18 14:10) [7]> QAZ2 (18.09.12 13:57) [6]
предлагаешь начать с производства процессоров ?
← →
QAZ2 (2012-09-18 14:13) [8]
> DevilDevil © (18.09.12 14:10) [7]
предлагаю забить на велосипед и пользоваться готовым
заодно можеш изучить курсы (бесплатные) по оптимизации и многопоточности от ихже
← →
DevilDevil © (2012-09-18 14:25) [9]> QAZ2 (18.09.12 14:13) [8]
ты что, хочешь убить во мне творца ?
не родилось ещё на Земле человека, способного сделать это со мной )
← →
QAZ2 (2012-09-18 14:31) [10]ну сделаеш очередной I386 компилятор по мотивам сказок старых бородачей, и что?
← →
DevilDevil © (2012-09-18 14:41) [11]> QAZ2 (18.09.12 14:31) [10]
в общем, как я уже сказал, инфа нужна в первую очередь для образовательных целей. Как пишется в той же самой "Книге дракона" - описанные алгоритмы применимы и в других областях. Отчасти мне обидно за уродско медленную компиляцию Delphi (в смысле не самой Delphi, а компилируемого кода). Есть ещё пару областей, в которых качественная оптимизация не помешает. Разработчики gcc к примеру не производят процессоров, а тем не менее разрабатывают оптимизаторы сравнимые с Intel-овскими. И помни, программист не может считаться программистом, пока не разработал собственный компилятор ;)) шутка конечно
← →
MBo © (2012-09-18 15:00) [12]По кодогенерации есть большая глава в книге:
Касьянов, Евстигнеев Графы в программировании: обработка, визуализация и применение
На codeproject.com хлопец чем-то интересным занимается:
http://www.codeproject.com/Articles/192825/Bird-a-New-Optimal-Language
← →
DevilDevil © (2012-09-18 15:18) [13]ok
спасибо
← →
Pavia © (2012-09-18 15:25) [14]
> Книга_дракона_(компиляторы)
Берём 3 издание и там черным по белому написанно, что авторы незнают как создавать оптимизатор для современных систем.
Лучше почитать по современный движок LLVM. На русском советую не читать , так как даётся искажённая, я бы даже сказал неправильная информация.
← →
Pavia © (2012-09-18 15:27) [15]
> Delphi (в смысле не самой Delphi, а компилируемого кода).
Зато у такого кода нет проблем с паралельностью. И скорость компиляции выши.
← →
DevilDevil © (2012-09-18 15:34) [16]> Лучше почитать по современный движок LLVM
линк в студию )
на обоих языках )
← →
Pavia © (2012-09-18 15:36) [17]На само деле код в Delphi медленный только из-за того, что хранит локальные переменные в стеки. Поэтому те компиляторы которые хранят переменные в регистрах работают быстрее раза в 2. А интеловский компилятор за счёт того что может использовать раскрутку циклов и SIMD дает ещё 2-4 кратное превосходство, к примеру над темже gcc.
Остальные трюки такого существующего выигрыша не дают.
Скорее всего дело медленности выходного кода Delphi заключается в архитектуре Delphi, которая основнна на однопроходном процессе.
← →
DevilDevil © (2012-09-18 15:45) [18]> Pavia © (18.09.12 15:36) [17]
ты сам часто писал высокопроизводительный код на ассемблере, Delphi, С++ ? Дизассемблировал код ?
хотя это уже оффтоп
← →
no_way (2012-09-18 16:05) [19]
> Берём 3 издание и там черным по белому написанно, что авторы
> незнают как создавать оптимизатор для современных систем.
>
я же специально написал "начать"
← →
Студент (2012-09-18 16:27) [20]Pavia © (18.09.12 15:25) [14]
>> Книга_дракона_(компиляторы)
>Берём 3 издание и там черным по белому написанно, что авторы незнают как
>создавать оптимизатор для современных систем.
>Лучше почитать по современный движок LLVM. На русском советую не читать ,
>так как даётся искажённая, я бы даже сказал неправильная информация.
Как проектировать самолеты? Вот возьми учебник 1954 года почитай. Эээ, нет там про моторные самолеты и какие то бипланы, вот лучше качни схему F-16 и Су-25 почитай и все сразу станет понятно.
← →
Студент (2012-09-18 16:32) [21]subj
Может просто заведи девушку, на глупости время не останется, а вынос мозга тебе любая девушка в любое время суток готова устроить.
← →
Pavia © (2012-09-18 16:37) [22]
> ты сам часто писал высокопроизводительный код на ассемблере,
> Delphi, С++ ? Дизассемблировал код ?
Часто.
Пришел к вывод что хочу специфичный компилятор с оптимизацией. Но пока руки не дошли, до оптимизации ещё далеко.
← →
DevilDevil © (2012-09-18 18:13) [23]> Может просто заведи девушку, на глупости время не останется,
> а вынос мозга тебе любая девушка в любое время суток готова
> устроить.
Дело в том, что девушек в своей жизни я уже оптимизировал )
они мне мозг не выносят )
← →
Dimka Maslov © (2012-09-18 22:17) [24]Для начала советую написать просто компилятор. Не прибегая к посторонней литературе. Чтобы он хоть как-то компилировал. Это займёт достаточно много времени. После чего можно будет ознакомиться с литературой (она ВНЕЗАПНО станет намного понятней). Затем плавно перейти к непосредственно оптимизации. Я сам делал именно так. Правда потом ограничился интерпретатором и без оптимизации. Скорость меня устраивает.
← →
Rouse_ © (2012-09-18 22:54) [25]
> Dimka Maslov © (18.09.12 22:17) [24]
> Для начала советую написать просто компилятор. Не прибегая
> к посторонней литературе. Чтобы он хоть как-то компилировал.
> Это займёт достаточно много времени.
Смотря какой - компилятор асма в простейшем приближении ленясь на коленке пишется ну... ну за 2 недели, и то если ну очень сильно лениться :)
← →
DevilDevil © (2012-09-18 23:01) [26]> Для начала советую написать просто компилятор. Не прибегая
> к посторонней литературе.
У меня правило. "Если делать, то делать хорошо".
как-то так. просто интерпретатор у меня и так есть. Не мой правда
← →
Inovet © (2012-09-18 23:11) [27]> [26] DevilDevil © (18.09.12 23:01)
> У меня правило. "Если делать, то делать хорошо".
Простой не значит плохой, потом можно добавлять фичи, совершенствовать. Вообще-то так и делается всё. Или ты про хороший фундамент?
← →
oxffff © (2012-09-19 00:11) [28]
> DevilDevil © (18.09.12 13:09)
Мои пять копеек.
Собственно есть книга Дракона.
Правда чем она свежее, тем меньше информации в ней.
У меня она с красным драконом на обложке. В ней действительно все достаточно подробно и хорошо расписано. НО в ней в общем виде.
То есть, да после этого твоя программа будет работать быстрее.
Есть множество нюансов. НО они очень!!! очень!!! трудоемкие поскольку вопросами оптимизации занимаются дяди до которых во всяком случае мне очень очень далеко в определенных вопросах. И таких дядей не 2 и 10, а больше.
Да я написал транслятор в MSIL с промежуточного представления своего языка. Но вопросами оптимизации не занимался. Поскольку понимаю бесперспективность этого занятия. Бо процессоров и архитектур много. Да и не нужно это. Поскольку
есть такой проект LLVM, есть даже примеры как использовать.
Собственно все достаточно не сложно как в него транслировать.
А уж он то оптимизировать умеет.
http://habrahabr.ru/post/47878/
http://habrahabr.ru/post/120424/
http://wiki.linuxformat.ru/index.php/LXF128:LLVM
← →
oxffff © (2012-09-19 00:32) [29]Собственно, что касаемо компилятора Delphi.
Сейчас я бы не стал утверждать, что он сугубо однопроходной, поскольку иногда он начинает выдавать ошибки, которые всплывают как то нелогично по последовательности обнаружения. Да возможно это просто некие отложенные проверки. Он стал работать по другому после введения generics. Как они их реализовали, им только известно.
По его(dcc) эффективности все очень просто.
Они его просто банально боятся переписывать. Поскольку переписывать его надо было уже лет 10 назад. А сейчас уже поздно. Может много чего накрыться. Поскольку есть программы с ошибками, которые работают исключительно потому, что эти ошибки нивелируются ошибками в кодогенерации.
Выход у них только один(IMHO) - создать новый с новой раздельной архитектурой и сказать сообществу, вот пожалуйста используйте его для новых проектов. Поддержку старых им мы не гарантируем. И в качестве backend как докладывают наши разведчики - стоит LLVM.
IMHO.
← →
oxffff © (2012-09-19 00:38) [30]Из http://wiki.linuxformat.ru/index.php/LXF128:LLVM
Возвращаясь к началу, повторим: система LLVM не может сделать за вас компилятор или интерпретатор, но она может помочь в той точке, где многие проекты компиляторов входят в мучительный тупик – в генерации исполняемого кода промышленного качества.
← →
Павиа (2012-09-19 08:36) [31]
> Сейчас я бы не стал утверждать, что он сугубо однопроходной,
Про новые я и не утверждаю.
> после введения generics
Сам понимаешь для вставки их в компилятор требуется переработать значительную часть компилятора я бы оценил в 20% (40% фронтенда). Вполне резонно что где-то накосячели.
> Собственно есть книга Дракона.
Читал, раз 5-6 перечитывал. Пришел к выводу что написанию компилятора она не помогает. Да информации в книге достаточно, но вот изложение неудачное.
← →
DevilDevil © (2012-09-19 09:43) [32]> Есть множество нюансов. НО они очень!!! очень!!! трудоемкие
> поскольку вопросами оптимизации занимаются дяди до которых
> во всяком случае мне очень очень далеко в определенных вопросах.
> И таких дядей не 2 и 10, а больше.
вот меня такие вот умозаключения дядей и интересуют!
> есть такой проект LLVM, есть даже примеры как использовать.
> Собственно все достаточно не сложно как в него транслировать.
> А уж он то оптимизировать умеет.
это ж сколько времени на перегонку в текстовый формат и в LLVM... Кстати сколько весит его JIT если таскать с собой ?
← →
oxffff © (2012-09-19 12:10) [33]
> это ж сколько времени на перегонку в текстовый формат и
> в LLVM... Кстати сколько весит его JIT если таскать с собой
> ?
http://llvm.org/docs/
← →
oxffff © (2012-09-19 12:12) [34]
> это ж сколько времени на перегонку в текстовый формат и
> в LLVM
http://llvm.org/docs/tutorial/LangImpl4.html
← →
oxffff © (2012-09-19 15:42) [35]
> Павиа (19.09.12 08:36) [31]
>
> Читал, раз 5-6 перечитывал. Пришел к выводу что написанию
> компилятора она не помогает. Да информации в книге достаточно,
> но вот изложение неудачное.
Более того я одну страницу этой книги перечитывал раз 10. Оказалось просто было выбрано не совсем удачное слово. Помогло обращение к первоисточникам этой книги 1976года и google.
Тем не менее именно по этой книге я построил лексический и синтаксический анализаторы( SLR(1), LR(1), LALR(1)).
Про системы типов написано мало. Но для повышения знаний я использовал множество другой литературы.
Вообщем наверно было бы желание.
← →
oxffff © (2012-09-19 15:43) [36]
> 1976года
1986.
← →
jack128_ (2012-09-19 16:42) [37]
> как схожей производительности добиваются С++ оптимизаторы.
Ну для начала сам язык С++ и в особенности его стандартная библиотека - гораздо более "оптимизабельны" по сравнению с дельфёй ибо активно используют компил тайм полиморфизм на шаблонах.
В отличии от дельфи, которая активно использует рантайм полиморфизм.
А статические вызовы можно заинлайнить. А а заинлайненый код - уже можно оптимизировать как хочешь.
Так что как ты изворачивайся, но тот же дельфийский List/ObjectList/Dictionary<TKey/TValue> никогда не сможет сравниться по производительности c std:vector<>/std:hash_map<,>.
А для реальной программы её производительность очень сильно зависит от стандартной библиотеки языка.
← →
Jeer © (2012-09-19 16:48) [38]
> Вообщем наверно было бы желание.
Это всегда и во всем - ключевое слово.
+ настойчивость == успех
← →
DevilDevil © (2012-09-19 17:05) [39]all,
а есть в этой ветке тот, кто реализовывал оптимизатор ?
← →
Jeer © (2012-09-19 17:12) [40]Тебе точно не сюда и шо ты здесь суетишься ? :)
← →
DevilDevil © (2012-09-19 17:16) [41]> Jeer © (19.09.12 17:12) [40]
ну если ты не видел - компиляторы здесь пишут
почему бы нет
← →
Jeer © (2012-09-19 17:19) [42]Ладно, не надо туфту гнать - тут пробуют писать.
А об оптимизации компиляции сказано чуть выше - входи в круг бородатых дядек, но только их здесь точно нет.
← →
Rouse_ © (2012-09-19 17:32) [43]Я реализовывал мутатор, тот-же оптимизатор только наоборот :)
По поводу оптимизатора - думаю Jeer прав, тут ты таких наверное не найдешь, да я собственно даже форумов таких не знаю, на которых можно найти спеца в этой области...
← →
DevilDevil © (2012-09-19 17:40) [44]> Ладно, не надо туфту гнать - тут пробуют писать.
если конкретно тебе написание компиляторов не под силу - это не значит, что на форуме не присутствует тех, кому под силу.
> А об оптимизации компиляции сказано чуть выше - входи в
> круг бородатых дядек, но только их здесь точно нет.
к счастью бородатые дядечки здесь есть
← →
DevilDevil © (2012-09-19 17:42) [45]> тут ты таких наверное не найдешь
мож каким-то образом можно найти разработчиков, участвующих в оптимизации GCC и FreePascal? Проекты открытые, мож кто русский из них есть.
> Я реализовывал мутатор, тот-же оптимизатор только наоборот
> :)
это как ?
← →
Павиа (2012-09-19 18:01) [46]Не чуть не бародатые и ничуть не старые. Руские разработчики оптимизаторов существуют. Вот только работают над другими проектами. Названия непомню. Можете поискать по дипломам.
Компилятор писать легко, только долго. Да и главное правильно архитектуру создать. А вот её без опыта и знаний создать тяжело.
Что касается оптимизации это классическое динамическое программирования. Если по простому то тут достаточно уметь раскладывать задачу по полочкам.
← →
DevilDevil © (2012-09-19 18:06) [47]> Что касается оптимизации это классическое динамическое программирования.
> Если по простому то тут достаточно уметь раскладывать задачу
> по полочкам.
ну ка ?
инфо в студию
← →
Jeer © (2012-09-19 18:07) [48]Удалено модератором
← →
DevilDevil © (2012-09-19 18:12) [49]Удалено модератором
← →
Jeer © (2012-09-19 18:15) [50]Удалено модератором
← →
Rouse_ © (2012-09-19 19:31) [51]
> DevilDevil © (19.09.12 17:42) [45]
> это как ?
Пишется дизассемблирующий и ассемблирующий движки, пишется движок микрокода (грубо пикод, но идея в принципе была подсмотрена у Ильфака http://www.datarescue.com/laboratory/vd.htm ) на него наворчивается простейший мутационный движок делающий из одной инструкции кучу многих, а далее по шагам: вырезаем интересующий кусок из тела приложения, вместо него пишем мусор, этот кусок дизасмим - загоняем в машинку с микрокодом, мутируем в несколько проходов сам микрокод, морфируя таким образом результат с предыдущей итерации, результат отправляем на ассемблирующий движок, пишем выходной бинарник в тело приложения, в начало изьятого куска пишем инструкцию перехода на морфированный код.
← →
oxffff © (2012-09-19 20:14) [52]
> DevilDevil © (19.09.12 17:42) [45]
Ты уже реализовал устранение общих подвыражений в своем анализаторе?
← →
DevilDevil © (2012-09-19 21:25) [53]> Rouse_ © (19.09.12 19:31) [51]
идея на мой взгляд крутая.
удалось ли сильно оптимизировать Delphi код ?
> Ты уже реализовал устранение общих подвыражений в своем
> анализаторе?
к чему вопрос ?
не понял
← →
Rouse_ © (2012-09-19 21:42) [54]
> DevilDevil © (19.09.12 21:25) [53]
> > Rouse_ © (19.09.12 19:31) [51]
>
> идея на мой взгляд крутая.
> удалось ли сильно оптимизировать Delphi код ?
Ты не понял - я не оптимизировал, а наоборот разоптимизировывал код, генерируя практически не читаемую в отладчике портянку кода, затрудняя таким образом анализ изначальных инструкций, сгенерированных компилятором :)
← →
Jeer © (2012-09-19 21:58) [55]
> Rouse_ © (19.09.12 21:42) [54]
Кто бы спорил - разные задачи.
← →
oxffff © (2012-09-19 22:08) [56]
> DevilDevil © (19.09.12 21:25) [53]
> > Rouse_ © (19.09.12 19:31) [51]
>
> идея на мой взгляд крутая.
> удалось ли сильно оптимизировать Delphi код ?
>
> > Ты уже реализовал устранение общих подвыражений в своем
>
> > анализаторе?
>
> к чему вопрос ?
> не понял
Ты пишешь, что хотел бы общаться с бородатыми дядьками и читать маны по типу(я их частично читал, но для других целей):
стр.43
Software Optimization Guide for AMD Family 15h Processors
http://support.amd.com/us/Processor_TechDocs/
47414_15h_sw_opt_guide.pdf
стр.13.
Software Optimization Guide for AMD Family 10h and 12h Processors
http://support.amd.com/us/Processor_TechDocs/40546.pdf
и так далее для каждой архитектуры.
Я тебя спросил про устранение общих подвыражений.
Это оптимизация такая. Еще до чтения вышеупомянутых манов.
Ты я так понял не понял о чем я тебя спросил.
← →
oxffff © (2012-09-19 22:19) [57]Ты уверен, что хочешь пойти дальше и потратить свое время
например на
Manually extract common subexpressions from floating-point expressions, where C compilers may
be unable to extract them due to the rules against reordering of floating-point expressions in the ANSI
standard.
Examples
1.
Avoid
double a, b, c, d, e, f;
e = b * c / d;
f = b / d * a;
Preferred
double a, b, c, d, e, f, t;
t = b / d;
e = c * t;
f = a * t;
2.
Avoid
double a, b, c, e, f;
e = a / c;
f = b / c;
Preferred
double a, b, c, e, f, t;
t = 1 / c;
e = a * t
f = b * t;
← →
Rouse_ © (2012-09-19 22:29) [58]
> 1.
> Avoid
> double a, b, c, d, e, f;
> e = b * c / d;
> f = b / d * a;
>
> Preferred
> double a, b, c, d, e, f, t;
> t = b / d;
> e = c * t;
> f = a * t;
Мдя... тот еще геморой.
← →
oxffff © (2012-09-19 22:32) [59]
> Мдя... тот еще геморой.
Да по моему это вообще элементарно и очень очевидно.
;))
← →
oxffff © (2012-09-19 22:34) [60]
> и очень очевидно
как впрочем и
Avoid
double a, b, c, e, f;
e = a / c;
f = b / c;
Preferred
double a, b, c, e, f, t;
t = 1 / c;
e = a * t
f = b * t;
← →
Rouse_ © (2012-09-19 22:39) [61]
> oxffff © (19.09.12 22:32) [59]
>
> > Мдя... тот еще геморой.
>
>
> Да по моему это вообще элементарно и очень очевидно.
Очевидно - да.
Элементарно? Спорно - ну с учетом что мы не будем рассматривать оптимизацию именно приведенной последовательности, а возьмем что-то посложнее.
В рамках фришной разработки я бы не взялся - слишком много усилий.
← →
DevilDevil © (2012-09-19 23:03) [62]> oxffff © (19.09.12 22:19) [57]
очевидно, у меня не компилятора, ни оптимизатора нет
очевидно, подвыражения не устранены
Но. Хотя бы псевдокод хранения таких данных и сами алгоритмы хотелось бы увидеть. И свёртывание констант и распределение регистров и эффективное спаривание команд (с учётом FPU в том числе). Компиляторы и оптимизаторы существуют не первый день. Наверняка вырисовались общие подходы, не только в теории, но и хотя бы псевдокодом. Как быстрая сортировка например. Вот такие вещи хотелось бы изучить
← →
oxffff © (2012-09-19 23:06) [63]
> Но. Хотя бы псевдокод хранения таких данных и сами алгоритмы
> хотелось бы увидеть
Тогда начни с Дракона. Далее google в помощь.
← →
DevilDevil © (2012-09-19 23:19) [64]> oxffff © (19.09.12 23:06) [63]
я прочитал её.
там общие принципы.
сейчас хочу увидеть хотя бы псевдокод. А лучше эффективные решения на ЯВУ. + комментарии
p.s. ну мало ли. вдруг получится найти
← →
Rouse_ © (2012-09-19 23:22) [65]
> сейчас хочу увидеть хотя бы псевдокод. А лучше эффективные
> решения на ЯВУ. + комментарии
>
> p.s. ну мало ли. вдруг получится найти
Еще вначале ветки вроде сказали куда смотреть.
http://sourceforge.net/directory/os:windows/freshness:recently-updated/?q=compiler
тут цельна подборка на ЯВУ с каментами и оптимизация - все как ты хочешь :)
← →
Rouse_ © (2012-09-19 23:23) [66]
> DevilDevil © (19.09.12 23:19) [64]
> я прочитал её.
За день что-ли? :))))
← →
DevilDevil © (2012-09-19 23:35) [67]> Еще вначале ветки вроде сказали куда смотреть.
ну там ведь не псевдокод ;)
и искать не понятно где
> За день что-ли? :))))
ну да. пролистал интересующие меня страницы
бегло почитывая.
← →
Rouse_ © (2012-09-19 23:42) [68]
> DevilDevil © (19.09.12 23:35) [67]
> > Еще вначале ветки вроде сказали куда смотреть.
>
> ну там ведь не псевдокод ;)
Псевдокод как раз был в книге которую ты полистывал.
Вообще Дим, извини, но с таким подходом лучше даже не браться.
Я читал эту книгу шесть раз и то даже сейчас не скажу что прочитал ее.
← →
Rouse_ © (2012-09-19 23:44) [69]зЫ:
> ну там ведь не псевдокод ;)
и ты определись что ты хочешь, я тебе дал ссылку удовлетворяющую вот этот запрос:
> А лучше эффективные решения на ЯВУ. + комментарии
← →
Rouse_ © (2012-09-19 23:49) [70]А то у тебя получается:
- хочу построить самолет, сколько сделать крыльев и куда прикрепить винт?
- давай начнем с аэродинамики
- нафига аэродинамика, когда я самолет хочу?
← →
_oxffff (2012-09-20 00:04) [71]:)
Саша ну мы с тобой уже все по телефону обсудили.
← →
Rouse_ © (2012-09-20 00:06) [72]
> _oxffff (20.09.12 00:04) [71]
Не пали контору, гад :)
← →
Inovet © (2012-09-20 00:08) [73]> [67] DevilDevil © (19.09.12 23:35)
> ну там ведь не псевдокод ;)
Не эстетично, да.
← →
_oxffff (2012-09-20 00:11) [74]Я с планшета поэтому очень краток.
← →
DevilDevil © (2012-09-20 00:23) [75]> Rouse_ ©
есть такая поговорка, которую я повторяю в последнее время часто.
"Не надо делать сложно там где нужно делать просто".
Что есть компиляция:
- анализ текста
- дерево разбора
- сверка типов, ошибки, подсказки, ворнинги
Что есть оптимизация:
- удаление мёртвого кода
- свёртывание констант
- вынесение подвыражений
- инлайн
- оптимизация математики
- циклы
- распределение регистров
- заточка под архитектуру: спаривания, предсказания прыжков, кэш-френдли, ...
Сейчас я собираю максимум информации
1) книги - это уже хорошо
2) сорсы gcc и freepascal тоже прекрасно
3) я надеюсь, что возможно существуют статьи с эффективным псевдокодом реализации этих оптимизирующих алгоритмов
4) очень интересны личные комментарии людей (и опять таки псевдокод), лично участвовавших в разработке компиляторов и оптимизаторов. Интересен практический опыт
Я не говорю, что тут все поголовно разрабатывают Intel C++. Но интересны мнения, опыт, мозговой штурм. Идеально - чтобы главный архитектор Intel C++ провёл долгую лекцию с перечислением практических подходов в оптимизации на русском языке. ;))
← →
Rouse_ © (2012-09-20 00:32) [76]Ну собственно я и Сергей тебе ответили с точки зрения практики и привели материалы. На освоение данной информации с учетом приведенных ссылок потребуется примерно полгода. Дерзай...
← →
DevilDevil © (2012-09-20 00:45) [77]> Rouse_ © (20.09.12 00:32) [76]
не, я кстати вам благодарен.
всего пару дней прошло, а я уже столько узнал. Не догадывался о LLVM к примеру
но у меня есть надежда, что кто-то ещё из Отцов может заглянуть в эту ветку
← →
Джобер (2012-09-20 00:51) [78]
> сорсы gcc
Не учись плохому, возьми clang.
← →
DevilDevil © (2012-09-20 00:54) [79]> Не учись плохому, возьми clang.
если я правильно понял, они LLVM юзают
а это уже не то ;))
надо сорсы LLVM смотреть
← →
_oxffff (2012-09-20 07:52) [80]На все, что автор перчислил требуются годы.
Каждой оптимизации требуется определенная информация,, и понимание того, что какие то части компилятора придется переписывать для этих целей несколько раз. Поскольку уж очень много неизвестных на пути. Собственно вверху по ссылке сказано, что llvm юзают очень известные конторы. Поэтому не трать время, пиши сам язык. Поскольку и на удобный синтаксис и правильную семантику тоже уйдут годы, поскольку это путь проб и ошибок.
← →
DevilDevil © (2012-09-20 09:26) [81]> _oxffff (20.09.12 07:52) [80]
мне нужен компактный размер к тому же )
скорее всего LLVM объёмный )
честно - не могу понять, почему на это должны уйти годы
ну и потом не надо забывать, что кто-то с такими задачами справляется и достаточно хорошо, перенять опыт можно. Вот возьмём к примеру "сортировку". В теории понятно, что надо упорядочить. Но существует к примеру очень эффективный алгоритм быстрой сортировки, описанный и в псевдокоде, и в реализациях на разных языках. И здесь так же. Уж не сделать уровень оптимизации Delphi - мне кажется нужно быть хромым и одноруким
← →
jack128_ (2012-09-20 10:59) [82]
> скорее всего LLVM объёмный )
на основании чего такой вывод?
← →
DevilDevil © (2012-09-20 11:00) [83]> jack128_ (20.09.12 10:59) [82]
предположение
какими цифрами ты располагаешь ?
← →
jack128_ (2012-09-20 11:03) [84]
> предположение
на основании чего сделаны эти предположения?
> какими цифрами ты располагаешь ?
никакими.
← →
jack128_ (2012-09-20 11:07) [85]
> скорее всего LLVM объёмный )
кста,я правильно понял, ты имеешь в виду, что exe"шники у него будут объемные или что??
← →
DevilDevil © (2012-09-20 11:14) [86]> jack128_ (20.09.12 11:07) [85]
не, сам компилятор
мне бы желательно в 100кб уложиться )
← →
jack128_ (2012-09-20 11:41) [87]
> не, сам компилятор
размер какого компилятора?? Компилятора _в_ LLVM ? Или компилятора из LLVM в маш. коды?? первое - для несложного языка вполне возможно. Размер самого LLVM-компилятора естественно больше.
Только я не понял, какая разница сколько компилятор места занимает.
← →
oxffff © (2012-09-20 11:46) [88]
>DevilDevil © (20.09.12 09:26) [81]
> Уж не сделать уровень оптимизации Delphi - мне кажется нужно
> быть хромым и одноруким
Код в студию.
← →
DevilDevil © (2012-09-20 13:04) [89]
function StrDataSize(const S: string): integer;
begin
Result := Length(S)*sizeof(Char);
end;
← →
Inovet © (2012-09-20 14:30) [90]> [81] DevilDevil © (20.09.12 09:26)
> Уж не сделать уровень оптимизации Delphi - мне кажется нужно
> быть хромым и одноруким
Такое впечатление, что ты только что освоил ассемблер и теперь поплёвываешь с мнимой высоты на головы червям.
← →
DevilDevil © (2012-09-20 14:34) [91]Удалено модератором
← →
Jeer © (2012-09-20 15:25) [92]
> DevilDevil © (20.09.12 13:04) [89]
Не вижу asm-а, а потому - незачет и даже неуд.
← →
DevilDevil © (2012-09-20 15:27) [93]> oxffff © (20.09.12 11:46) [88]
ну или вот неплохой пример:type
TTwoRects = record
R1: TRect;
R2: TRect;
end;
procedure FillRects(var T: TTwoRects);
begin
T.R1.Left := 0;
T.R2.Left := T.R1.Left + 1;
T.R1.Top := T.R2.Left + 5;
T.R2.Top := T.R1.Left + 1 - T.R2.Left;
end;
← →
DevilDevil © (2012-09-20 15:27) [94]Удалено модератором
← →
DevilDevil © (2012-09-20 15:38) [95]Удалено модератором
Примечание: Обсуждение модерирования
← →
DevilDevil © (2012-09-20 15:56) [96]Удалено модератором
Примечание: При повторение ветка будет удалена.
← →
KSergey © (2012-09-20 17:25) [97]> DevilDevil © (20.09.12 15:27) [93]
А к компиляции это все имеет какое отношение?
← →
DevilDevil © (2012-09-20 17:28) [98]> KSergey © (20.09.12 17:25) [97]
да, разумеется
мы же оптимизации обсуждаем
я говорю, что у Delphi слишком слабый оптимизатор по современным взглядам
← →
DevilDevil © (2012-09-20 20:38) [99]Удалено модератором
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.73 MB
Время: 0.073 c