Страница 1 из 2
Оптимизатор
Добавлено: 16.10.2007 10:14:02
alexs
Вот ещё мысль.
Хрошо было бы научить оптимизатор разворачивать элементарные функции (не зависящие от других не элементарных функций) в константы - т.е. вычислят результат вызова функции на этапе компиляции и подставлять уже готовый результат.
например
вместо этого можно дать готовый результат
а вот тут уже обычный вызов
я понимаю что скорость компиляции замедлится, что фактически в компилятор добавляется и интерпретатор - но выйгрыш на готовой программе будет значимым.
Добавлено: 16.10.2007 11:00:05
Slavikk
А смысл? Мы же программируем, а не составляем из кусков программу. А синус 0,5 давно подсчитывается калькулятором и подставляется готовое значение. Если у тебя число постоянно меняется и ты не знаешь его значения, при работе программы, тогда вставляешь кусок кода на асме вычисляющий значения - для оптимизации.
Добавлено: 16.10.2007 11:33:51
ev
a:=sin(0.5);
зависит от того, много ли таких конструкций в реальности
А синус 0,5 давно подсчитывается калькулятором и подставляется готовое значение.
ни разу так не делал
пусть лучше машина поработает на 1мсек больше, чем я в калькуляторе еще формулы считать буду
хотя конечно все зависит от задачи... если важо скорость обработки близкая к реальному времени - то и посчитать не грех

Добавлено: 16.10.2007 12:59:50
alexs
вот я и предлагаю чтобы компилятор разворачивал эти выражения автоматом.
Добавлено: 19.10.2007 15:05:25
e-moe
alexs писал(а):вот я и предлагаю чтобы компилятор разворачивал эти выражения автоматом.
а вы думаете этого не происходит?
Добавлено: 19.10.2007 19:31:38
alexs
именно подстановка готового значения вместо вызова функции - нет
Добавлено: 20.10.2007 10:54:44
Bonart
alexs
alexs писал(а):именно подстановка готового значения вместо вызова функции - нет
Intel C Compiler, насколько мне известно - да.
Добавлено: 20.10.2007 11:17:36
alexs
Ну мне хочется чтобы это было в FPC

Добавлено: 20.10.2007 14:32:10
e-moe
fpc 2.2.0
Код: Выделить всё
PASCALMAIN:
PUBLIC _main
_main:
push ebp
mov ebp,esp
call FPC_INITIALIZEUNITS
mov eax,dword ptr [dword ptr _$PROGRAM$_Ld1]
mov dword ptr [dword ptr U_P$PROGRAM_A],eax
mov eax,dword ptr [dword ptr _$PROGRAM$_Ld1+4]
mov dword ptr [dword ptr U_P$PROGRAM_A+4],eax
call FPC_DO_EXIT
leave
ret
; End asmlist al_procedures
...
_DATA SEGMENT PARA PUBLIC USE32 'DATA'
ALIGN 8
_$PROGRAM$_Ld1 DQ 4.794255386042030e-001
Добавлено: 20.10.2007 14:32:53
e-moe
еще вопросы будут?
Добавлено: 21.10.2007 21:02:43
alexs
Синус я привёл в качестве примера
а более сложнй вариат:
Код: Выделить всё
function aaa(a:integer):double;
begin
Result:=a*2/(a+1) + a;
end;
var
i:integer;
begin
writeln(aaa(12)); {1}
for i:=1 to 10 do
writeln(aaa(i)); {2}
end.
хочется чтобы при вызове {1} было подставлено готовое значение
а при вызове {2} был расчёт
Добавлено: 22.10.2007 13:27:01
e-moe
>хочется чтобы при вызове {1} было подставлено готовое значение
ого, а еще компилятор должен говорить что при ваших данных, к примеру, возникает деление на 0?
Долго ждать тогда прийдется при компиляции. Скорости теперешнего Паскаля точно не будет

Добавлено: 22.10.2007 16:12:31
alexs
а для чего ключ релиза вводится?
для отладки - работаем по старой методике
сборка релиза - углубленная оптимизация
Добавлено: 22.10.2007 22:02:00
e-moe
забавно конечно... хотя, а почему бы и нет?

Добавлено: 23.10.2007 08:57:09
Slavikk
Мужики вы либо рейтинг себе хотите накрутить, либо вам ещё учится и учится... Всякое обучение программированию начинается с основ алгоритмизации и оптимизации алгоритмов. Так вот - если вы вели подсчёт в функцию "aaa" - то из этого следует, что переменные в функции на начальном этапе программирования неизвестны и при работе программе они будут изменятся (в зависимости от параметров - например от температуры воздуха на Магадане). Из этого следует, что при компиляции нельзя однозначно дать ответ - какой результат вернёт переменная (+20 или +30), поэтому нельзя сразу это превратить в готовый ответ в машинном коде. Если у вас переменные в функции "aaa" можно узнать и подсчитать и они не будут изменятся в процессе существования программы, то - вам ещё теорию учить и учить (конкретно алгоритмизацию и оптимизацию алгоритмов)...
А то, что вы хотите - называется windows "Vista" или же волшебная кнопочка для денег - на неё нажимаешь и деньги сыплются с неба....
Машина неможет телепатически угадать, чего вы хотите - если вы сами этого даже незнаете

!!!
Сам такие вопросы задавал... правда давно это было...
