Оптимизатор

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Оптимизатор

Сообщение alexs » 16.10.2007 10:14:02

Вот ещё мысль.
Хрошо было бы научить оптимизатор разворачивать элементарные функции (не зависящие от других не элементарных функций) в константы - т.е. вычислят результат вызова функции на этапе компиляции и подставлять уже готовый результат.
например

Код: Выделить всё
a:=sin(0.5);

вместо этого можно дать готовый результат

Код: Выделить всё
b:=sin(j)

а вот тут уже обычный вызов

я понимаю что скорость компиляции замедлится, что фактически в компилятор добавляется и интерпретатор - но выйгрыш на готовой программе будет значимым.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Slavikk » 16.10.2007 11:00:05

А смысл? Мы же программируем, а не составляем из кусков программу. А синус 0,5 давно подсчитывается калькулятором и подставляется готовое значение. Если у тебя число постоянно меняется и ты не знаешь его значения, при работе программы, тогда вставляешь кусок кода на асме вычисляющий значения - для оптимизации.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение ev » 16.10.2007 11:33:51

a:=sin(0.5);

зависит от того, много ли таких конструкций в реальности

А синус 0,5 давно подсчитывается калькулятором и подставляется готовое значение.

ни разу так не делал :)
пусть лучше машина поработает на 1мсек больше, чем я в калькуляторе еще формулы считать буду
хотя конечно все зависит от задачи... если важо скорость обработки близкая к реальному времени - то и посчитать не грех ;)
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение alexs » 16.10.2007 12:59:50

вот я и предлагаю чтобы компилятор разворачивал эти выражения автоматом.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение e-moe » 19.10.2007 15:05:25

alexs писал(а):вот я и предлагаю чтобы компилятор разворачивал эти выражения автоматом.
а вы думаете этого не происходит?
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение alexs » 19.10.2007 19:31:38

именно подстановка готового значения вместо вызова функции - нет
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Bonart » 20.10.2007 10:54:44

alexs
alexs писал(а):именно подстановка готового значения вместо вызова функции - нет

Intel C Compiler, насколько мне известно - да.
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение alexs » 20.10.2007 11:17:36

Ну мне хочется чтобы это было в FPC :)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение e-moe » 20.10.2007 14:32:10

fpc 2.2.0

Код: Выделить всё
var
  a : real;
begin
  a := sin(0.5);
end.

Код: Выделить всё
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


e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение e-moe » 20.10.2007 14:32:53

еще вопросы будут?
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение alexs » 21.10.2007 21:02:43

Синус я привёл в качестве примера
а более сложнй вариат:
Код: Выделить всё
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} был расчёт
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение e-moe » 22.10.2007 13:27:01

>хочется чтобы при вызове {1} было подставлено готовое значение
ого, а еще компилятор должен говорить что при ваших данных, к примеру, возникает деление на 0? :)
Долго ждать тогда прийдется при компиляции. Скорости теперешнего Паскаля точно не будет :(
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение alexs » 22.10.2007 16:12:31

а для чего ключ релиза вводится?
для отладки - работаем по старой методике
сборка релиза - углубленная оптимизация
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение e-moe » 22.10.2007 22:02:00

забавно конечно... хотя, а почему бы и нет? :)
e-moe
новенький
 
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение Slavikk » 23.10.2007 08:57:09

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

А то, что вы хотите - называется windows "Vista" или же волшебная кнопочка для денег - на неё нажимаешь и деньги сыплются с неба.... :D

Машина неможет телепатически угадать, чего вы хотите - если вы сами этого даже незнаете :D !!!

Сам такие вопросы задавал... правда давно это было... :D
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru