Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Методы компиляции и оптимизации машинных команд   Найти похожие ветки 

 
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 юзают очень известные конторы. Поэтому не трать время, пиши сам язык. Поскольку и на удобный синтаксис и правильную семантику тоже уйдут годы, поскольку это путь проб и ошибок.



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.066 c
2-1335432052
Pcrepair
2012-04-26 13:20
2013.03.22
Многопользовательский режим работы проги


3-1281098029
Patrick
2010-08-06 16:33
2013.03.22
Связанные сервера Oracle


2-1333447731
Цукор5
2012-04-03 14:08
2013.03.22
Объединение мелких файлов в один большой


15-1343545365
megavoid (other pc)
2012-07-29 11:02
2013.03.22
Синхронизация и гонки потоков


2-1337677823
leklerk
2012-05-22 13:10
2013.03.22
функция NetMessageBufferSend





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский