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

Вниз

Скорость функций   Найти похожие ветки 

 
Juster~   (2003-03-05 18:51) [0]

Недавно, решил протестировать ф-ции на скорость и вот результаты: (Числа получены по формуле (Elapsed_Time/Iterations)*1000, причем из всех результатов которые я получал по одной функции я выбирал самый большой)
Пустой цикл - 0.086
i+i - 0.086
i*i - 0.086
i/i - 0.086
sqrt(i) - 1.513
sin, cos - 2.638
random - 0.562
random(10) - 0.259
strToInt("1234567") - 2.076
strToFloat("12345.12345") - 7.050
setLength - 7.350
getMem + freeMem - 7.350

Что скажете насчет умножения, деления?


 
Darthman   (2003-03-05 18:53) [1]

Ты бы лучше в тиках мерил :)


 
Kobik ©   (2003-03-05 20:10) [2]

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


 
Asteroid ©   (2003-03-05 23:30) [3]

Если ты делал операции отдельными функциями, придется учесть затраты на вызов/выход из функций. Если они слишком большие - умножение вполне может сравняться со сложением.
Кстати, проверь еще, пожалуйста, div и mod


 
A_n_t   (2003-03-06 03:53) [4]

Что-то я не совсем понял как производились расчеты, но у меня результаты немного отличаются.

Я считал так: в таймере поставил цикл на 1 000 000 и в нем производил действия.
Так вот: умножение дольше сложения на 10%
деление дольше сложения на 85%

Так что вывод: нужно деление спользовать по реже, а cos и sin тем более :)

P.S. У тебя одинаковые результаты по пусто-сложение-умножение-деление скорей всего из-за слишком маленького измерения - погрешность сказывается :)


 
JibSkeart ©   (2003-03-06 13:22) [5]

to A_n_t
Не новость деление нужно избегать :)


 
Ketmar ©   (2003-03-06 14:26) [6]

>Juster~ (05.03.03 18:51)
скажу, что оптимизацию полезно выключать.

Satanas Nobiscum! 06-Mar-XXXVIII A.S.


 
stream   (2003-03-06 15:11) [7]

Это еще не то! В Turbo Pascal"е у меня холостой цикл выполнялся медленнее чем тот, в котором я выполнял некоторые действия!! (число итераций было постоянным, время считал через GetTime())


 
MVova ©   (2003-03-06 15:41) [8]


> Juster~ (05.03.03 18:51)

А код писат так

R := 123 + 123;

R := 123 * 123;

R := 321 /123;
?

Если да то + - * / будут одинаково быстры.


 
Anatoly Podgoretsky ©   (2003-03-06 15:46) [9]

Juster~ (05.03.03 18:51)
Без приведения кода теста и методики, сообщение ничего не стоит. Часто меряют не операцию, а вызов или среднею температу по больнице


 
Juster~   (2003-03-08 12:11) [10]

Кода, к сожалению, уже нету.
Я делал так:

"start := getTickCount;
const Iterations = 50000;
for i := 1 to Iterations do f := 12345+12345; // f : Integer

elapsed := getTickCount - start;
time := elapsed / Iterations; // time - это время функции"

-> MVova: обьясни почему



 
Anatoly Podgoretsky ©   (2003-03-08 12:24) [11]

Juster~ (08.03.03 12:11)

Данная конструкция будет превращена в
for i := 1 to Iterations do f := 24690;

А конструкция for i := 1 to Iterations do f := 12345/12345; в
for i := 1 to Iterations do f := 1;


 
Anatoly Podgoretsky ©   (2003-03-08 12:31) [12]

Если хочешь по тестировать то перепиши хотя бы так


const
Iterations = 1000000;
var
A: Integer;
B: Integer;
C: Integer;
begin
A := 123;
B := 123;
Start := GetTickCount;
for I := 1 to Iterations do C := A + B;
Label1.Caption := "SUM=" + IntToStr((GetTickCount - Start) * 1000);

Start := GetTickCount;
for I := 1 to Iterations do C := A * B;
Label2.Caption := "MULT=" + IntToStr((GetTickCount - Start) * 1000);

Start := GetTickCount;
for I := 1 to Iterations do C := A div B;
Label3.Caption := "DIV=" + IntToStr((GetTickCount - Start) * 1000);
end;



 
Anatoly Podgoretsky ©   (2003-03-08 12:34) [13]

LabelN.Caption := "DIV=" + FloatToStr((GetTickCount - Start) / 1000);
или просто в MS
LabelЬ.Caption := "DIV=" + IntToStr(GetTickCount - Start);



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
14-76616
AlexSerp
2003-03-07 08:40
2003.03.24
ДАМЫ! С Наступающим! Любви! Здоровья! Счастья! ВСЕГО!(-)


1-76424
Adolf
2003-03-11 18:12
2003.03.24
ДАТА


14-76592
mixvictor
2003-03-07 07:11
2003.03.24
Тест BIOS


3-76324
denis24
2003-03-05 15:20
2003.03.24
TFields.onGetText


3-76276
Sergey_
2003-03-04 13:25
2003.03.24
Подскажите как данные из Query разместить по Edit