Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Скорость выполнения операций   Найти похожие ветки 

 
мух   (2006-01-14 11:25) [0]

Почему скорость операций над целыми числами меньше скорости над числами с плавающей точкой?
Выполняю циклы вида

for i:=1 to n do ;  
for i:=1 to n do a:=5*10;  // a:integer
for i:=1 to n do b:=5.5*10.5;  // b:extended

Быстрее всех выполняется цикл с плавающей точкой (!), затем пустой и потом - цикл над целыми (!).
Тестировал на разных машинах (но только с процессорами celeron). Если кто знает в чем тут фокус - поделитесь знаниями :)


 
KSergey ©   (2006-01-14 11:36) [1]

Приведите использованную методику тестирования, плиз


 
begin...end ©   (2006-01-14 11:37) [2]

Умножения в цикле здесь не происходит -- константы 5*10 и 5.5*10.5 вычисляются ещё на этапе компиляции, поэтому о тестировании скорости умножения здесь говорить не приходится.

Если значения переменных a и b используются где-нибудь после циклов, то в самих циклах будет только помещение нужных заранее вычисленных значений в переменные. Чтобы поместить некоторое значение в переменную Extended, требуется больше операций, чем для Integer, поэтому в результаты тестирования верится слабо. Если же a и b после циклов не используются, то при включённой оптимизации все три цикла будут совершенно одинаковыми.

Приведите код, который использовался для оценки времени выполнения.


 
мух   (2006-01-14 11:49) [3]

Прошу прощение за неточность, тела циклов выглядили в оригинале так:

begin
   aE:=5.5;
   bE:=10.5;
   cE:=aE*bE;
   cE:=aE*bE;
   cE:=aE*bE;
   cE:=aE*bE;
   cE:=aE*bE;
end;

тут aE, bE, cE - имеют тип extended
для других типов использовал аналогичные вырожения.

Количество итераций - 3 раза по 2 млрд. - брал среднее время выполнения цикла (2 млрд итераций), получал то, что описал выше.
Текст программы с собой не имеется :|


 
begin...end ©   (2006-01-14 12:10) [4]

> мух   (14.01.06 11:49) [3]

Да, если код выглядел так, то умножение (и целочисленное, и вещественное) производилось. Но в результаты тогда тем более не верится. Хотя бы по причине, указанной в [2] -- на заполнение переменных aE и bE потребуется гораздо больше времени, чем на aI и bI.

Вот код, дающий грубую оценку скорости:

procedure TForm1.Button1Click(Sender: TObject);
const
 N = 100000000; // 100 млн
var
 I: Integer;
 aI, bI, cI: Integer;
 aE, bE, cE: Extended;
 T1, T2, T3: Cardinal;
begin

 T1 := GetTickCount;
 for I := 1 to N do;
 T1 := GetTickCount - T1;

 T2 := GetTickCount;
 for I := 1 to N do
 begin
   aI := 5;
   bI := 10;
   cI := aI * bI;
 end;
 T2 := GetTickCount - T2;

 T3 := GetTickCount;
 for I := 1 to N do
 begin
   aE := 5.5;
   bE := 10.5;
   cE := aE * bE;
 end;
 T3 := GetTickCount - T3;

 ShowMessage(Format("Пустой: %d Integer: %d Extended: %d", [T1, T2, T3]));
 Caption := FloatToStr(cI + cE)

end


У меня (на Pentium 3) результаты таковы:

Пустой: 430 Integer: 741 Extended: 7371

> cE:=aE*bE;
> cE:=aE*bE;
> cE:=aE*bE;
> cE:=aE*bE;
> cE:=aE*bE;

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

> Текст программы с собой не имеется

Тогда и обсуждать, в общем-то, нечего.


 
мух   (2006-01-14 12:17) [5]

текст программы такой-же как тот, что указан Вами за тем лишь исключением, что время брал не функцией GetTickCount, а Time.
Ради интереса попробую Вашу функцию...


 
мух   (2006-01-14 12:55) [6]

Да, такой вариант показывает более правдоподобные цифры. Хотя в чем юмор так и не понятно.


 
Anatoly Podgoretsky ©   (2006-01-14 16:50) [7]

Юмор определяется просмотром CPU кода


 
мух   (2006-01-16 08:10) [8]

Юмор обнаружен в работе этого самого ОПТИМИЗАТОРА. Теперьче всё прояснилось :)



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

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
3-1134472163
Andron.Ru
2005-12-13 14:09
2006.02.12
Как проверить работает ли сервер Oracle в сети


2-1138184886
_serg
2006-01-25 13:28
2006.02.12
Как подружить БД и сеть


15-1137408292
Историкк
2006-01-16 13:44
2006.02.12
История объявления "Требуется программист с опытом работы"


2-1137498839
Goast
2006-01-17 14:53
2006.02.12
Информация о ходе копирования файлов


2-1138119940
555
2006-01-24 19:25
2006.02.12
Помогите Word к delhi прикрутить