Форум: "Потрепаться";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
ВнизСкорость функций Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c