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

Вниз

Есть идея! Оптимизатор скорости работы программы!   Найти похожие ветки 

 
Igorek   (2003-12-14 11:15) [0]

//соседняя ветка натолкнула на мысль
Предлагаю на рассмотрение такое:
Пусть у нас есть код программы, который мы хотим оптимизировать по скорости.
Оптимизатор - это программа, которая содержит в виде плагинов разные приемы оптимизации. Кроме того программа имеет или встроенный профайлер или пользуется внешним и потом читает его логи.
Напр. простейший прием оптимизации - inline подстановка функции, где мы экономим на расходах по вызову функции. Скажем выдал профайлер, что некая функция вызывается кучу раз. Тогда он берет и вставляет код функции везде в местах вызова.
Другой пример. В каком-то месте использована пузырьковая сортировка. Меняем на быструю.
И т.д.

Приемы оптимизации можно писать самому, а потом обмениваться ими по Интернету через сервер какой-то. Ессно должна быть проверка корректности данного приема и какая-то сертификация.

Я понимаю, что программно проанализировать логику программы и заменить ее на более быструю - очень нетривиальная задача. Но все же давайте смотреть в будущее и постараемся обсудить грабли в этом вопросе.

Как вы думаете, не слишком ли фантастично? ;-)

Возможен также оптимизатор по обьему кода - ищет повторяющиеся фрагменты и выносит их в процедуры.


 
JibSkeart   (2003-12-14 11:25) [1]

фантастично :))

вопервых компилятор сам оптимизирует (как сможет , если не путаю ничего)

а во вторых лутьше чем сам программер программа тебе не оптимизирует :)


 
Fenik   (2003-12-14 11:27) [2]

Да. Давайте объединимся и напишем полезную для всех вещь!


 
Fenik   (2003-12-14 11:29) [3]

> JibSkeart © (14.12.03 11:25) [1]
> а во вторых лучше чем сам программер программа тебе не оптимизирует :)

Так это для тупых программеров :-)


 
JibSkeart   (2003-12-14 11:30) [4]

ну что же дерзайте ,
а я посмотрю на сие творение :)


 
REA   (2003-12-14 12:46) [5]

Так вроде есть оптимизаторы на уровне асма. Только не всегда оптимизация под один процессор приводит к тому же результату на другом.


 
VEG   (2003-12-14 22:53) [6]

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


 
Sergey_Masloff   (2003-12-14 23:05) [7]

Igorek © (14.12.03 11:15)
>Напр. простейший прием оптимизации - inline подстановка >функции, где мы экономим на расходах по вызову функции.
Оптимизировать на уровне алгоритма надо. А не на уровне реализации - это тупиковый путь.


 
MOA   (2003-12-14 23:26) [8]

2 Sergey_Masloff
>на уровне реализации - это тупиковый путь- безусловно См. Майерс "Надёжность программного обеспечения". так он (Майерс т.е.) вообще требует не предоставлять ассемблер к процессорам, дабы программист не занимался "микрооптимизацией".
Кстати, как я понял, в Intel Itanium часть битов инструкции отвечает за "микрооптимизацию" - например, вместо блока предсказания перехода бит в инструкции отвечает за предпочтительное направление ветвления. Выигрыш понятен, однако, любопытно, как это выразить на языке высокого уровня? М.б. кто-нибудь из уважаемых коллег знает какую-нибудь реализацию языка от Intel, поддерживающую такую фичу - как это они делают?


 
MBo   (2003-12-15 06:46) [9]

>MOA
Intel C++ и Фортран - генерируют процессорозависимый код.
Есть мат. библиотеки от Интел - Signal Processing, Math Kernel и т.п., использующие MMX-SSE2.


 
PVOzerski   (2003-12-15 10:28) [10]

Оптимизатор - вообще не всегда полезная и даже безобидная вещь. Не случайно есть возможность написать {$O-}. Всё-таки суть решаемой задачи пишущий программу представляет лучше, чем тот, кто писал оптимизатор для средства разработки, на котором эта программа делается (по крайней мере, в нормальной ситуации). Потому время от времени возникают казусы. Тот же случай с inline-подстановками. IMHO, это программист, а не компилятор должен решать, что ему важнее в программе, скорость или размер. А потому это сам программер должен иметь возможность написать ключевое слово inline после заголовка функции (что и есть во FreePascal, например). А уж если за меня будут решать, какой алгоритм расчета какой-нибудь математической функции мне нужнее... Например, можно приращивать синус на константу, пользуясь тригонометрическими закономерностями sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b) и sqr(sin(a))+sqr(cos(a))=1, не вызывая каждый раз функции sin и cos (хватит 2 раза вызвать sin). При этом проигрываем в точности, но существенно выигрываем в скорости. И что за меня выберет оптимизатор?


 
Igorek   (2003-12-15 11:43) [11]


> VEG © (14.12.03 22:53) [6]
> Интересная идея, но я считаю, что программист должен сам
> заботиться об скорости своего кода.

Несомненно. Но есть же оптимизаторы на уровне комманд процессора. А это будет высокоуровневый оптимизатор.

> Sergey_Masloff (14.12.03 23:05) [7]
> Оптимизировать на уровне алгоритма надо. А не на уровне
> реализации - это тупиковый путь.

Так было сказано что оптимизировать можно и сами алгоритмы (напр. сортировка). Другое дело, что это намного сложнее.

> PVOzerski © (15.12.03 10:28) [10]
При этом проигрываем в точности, но существенно выигрываем
> в скорости. И что за меня выберет оптимизатор?

Такая оптимизация или некорректна или должна выполнятся человеком - он знает какая точность приемлемая.

Вообще речь идет о "макрооптимизации". Мне кажется такого оптимизатора еще нету в природе.


 
MOA   (2003-12-15 12:18) [12]

Всё же по поводу Itanium. Понятно, что есть библиотеки и компиляторы от Интел.
Но, насколько я понял, одно из важных свойств IA-64 - "перенос" оптимизации и распараллеливания на компилятор. Как это выразить, например, на Оккаме - представить можно. А как на императивных языках (на Паскале, например) выразить "предпочтительное направление перехода" в IF? Или тот факт, что данные группы инструкций могут исполняться параллельно? (впрочем, это-то как раз компилятор может сообразить). Intel ввела спец. расширения в языки?

По поводу "макрооптимизации". IMHO, для императивных языков подобная оптимизация бессмысленна, поскольку суть таких языков "машина, я приказываю тебе сделать то-то", а не "машина, посчитай-ка мне вот это" - т.е. компилятор не может догадаться о намерениях программиста, кроме того, что программист не намеревается вручную распределать регистры, выделять память и заботиться об организации циклов и подпрограмм. Для "крупноблочных" же операций (сортировки, операций с матрицами и т.д.) могут, действительно, помочь библиотеки. Хотя и тут, например, "универсальную программу сортировки" представить сложно. Тем более что не факт, что в данном конкретном случае сортировка пузырьком будет быстрее "быстрой" (см. Кнут т.3).


 
KSergey   (2003-12-15 15:32) [13]

> [12] MOA © (15.12.03 12:18)
> А как на императивных
> языках (на Паскале, например) выразить "предпочтительное
> направление перехода" в IF?

Ну, например, классическое требование "красивости" кода: в then помещаем наиболее вероятную ситуацию, в else - наименее вероятную
Вот только что тогда делать с конструкцией вида

if then
else if then
else if then
else

к которым иногда приходится прибегать и где, очевидно, вариант else будет более вероятным? Не заню...

> Или тот факт, что данные группы
> инструкций могут исполняться параллельно?


Если верно понимаю полит. ситуацию - для этого существуют спец. языки программизма. Правда, скажу честно, какие - не знаю. Но должны же быть ;)


 
Gero   (2003-12-15 15:45) [14]

По крайней мере, реально организовать помещение часто повторяющихся кусков кода в процедуры. Когда в программе тысячи строк, вручную это сделать очень сложно. А так запустил прогу, и через две секунды всё готово.


 
KSergey   (2003-12-15 15:58) [15]

> [14] Gero © (15.12.03 15:45)

Вот те здрасьте...
А я может хочу, чтобы код повторялся? Например, экономлю на вызовах. И циклы не использую ;)
Надо хотя бы определиться для начала: по объему или по скорости оптимизируем? А то что-то сразу по всем направлениям пытаемся. А так не бывае, однако ;)


 
Gero   (2003-12-15 16:01) [16]

> KSergey © (15.12.03 15:58) [15]

У проги должны быть настройки, где это всё можно будет указать. То бишь настроить под себя.


 
MOA   (2003-12-15 16:05) [17]

2KSergey ©
Для распараллеливания, например, Оккам, или параллельный Пролог - на Прологе, действительно, компилятор может здорово соптимизировать программу, и именно на "макроуровне". Но это не императивные языки (хотя Оккам-то похож немного).


 
MOA   (2003-12-15 16:20) [18]

>По крайней мере, реально организовать помещение часто повторяющихся кусков кода в процедуры. Когда в программе тысячи строк, вручную это сделать очень сложно.
Тревожное мнение. Это как раз то, что упомянутый Майерс называл "прочность блока по совпадению". Если это делается на уровне исходного текста - это есть самая плохая из всех возможных практик программирования. Именно для исключения подобной практики и родилось "структурное программирование", а затем и "объектно-ориентированное". На уровне машинного кода - IMHO, в толково написанной программе таких участков будет немного.


 
Dmitriy O.   (2003-12-15 16:44) [19]

А давайт е пойдем еще дальше. И напишем прогу которая сама будет
писать код по Т.З !


 
Verg   (2003-12-15 16:51) [20]

И такую, которая это Т.З. придумывает.... Вот тогда точно нам ничего больше надо не будет.... И будем лопать бананы лежа под пальмой... Мечта !!! .... идиота.....

P.S. Голубая мечта босоного (ногого) детства. Т.е. чтобы вообще ничего не надо было...


 
Gero   (2003-12-15 18:18) [21]

> чтобы вообще ничего не надо было...

Вобщем-то это есть оптимизация в идеале :)


 
Igorek   (2003-12-15 22:17) [22]


> Dmitriy O. © (15.12.03 16:44) [19]
> А давайт е пойдем еще дальше. И напишем прогу которая сама
> будет
> писать код по Т.З !

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

А вообще для решения такой задачи надо целый ИИ громоздить. Что-бы система имела много common знаний. Тогда и имена функций будут осмысленные и логику она сможет обьяснить.



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

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

Наверх





Память: 0.51 MB
Время: 0.012 c
14-12159
sad
2003-12-05 10:07
2004.01.05
Иероглиф светлой печали


1-11894
snake1977
2003-12-18 12:56
2004.01.05
MDIChild в DLL


1-11888
deltoro
2003-12-10 02:44
2004.01.05
Нужна помощь в написании программы, часть учебного проекта


3-11836
Felix
2003-12-08 00:45
2004.01.05
FIBPlus


14-12130
SPeller
2003-12-13 14:43
2004.01.05
Тем, у кого браузер НЕ IE, или IE меньше 6-й версии





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский