MysticCoder писал(а):да, оно и есть.
Но нюанс в том что если не использовать отдельную функцию, результат другой... И не понятно почему...
Модератор: Модераторы
MysticCoder писал(а):да, оно и есть.
pro_berserk писал(а):Цель понять почему у меня из-за добавления в алгоритм, операции вычитания двух дат, меняется скорость выполнения циклов вдвое, при чем в лучшую сторону. 560мс против 260мс. Вот что не понятно...
pro_berserk писал(а):Но нюанс в том что если не использовать отдельную функцию, результат другой... И не понятно почему...
Лекс Айрин писал(а):Судя по всему, это заслуга оптимизатора, который во втором случае понимает для чего нужна переменная/ные и просто использует другую, более быструю оптимизацию. Неявные преобразования типов могут как улучшить код, так и сильно просадить время. Тем более, что используется тип cardinal,
MysticCoder писал(а): я же объяснил почему. потому что при использовании этой твоей отдельной функции перед замером времени выполняется левая функция fpc_get_output которая тоже идет в зачет времени. для проверки влияния этой функции на общий результат предложил тебе использовать вместо Writeln функцию MyWriteln, которая не добавляет эту левую функцию перед вызовом замера времени и предложил провести замеры в этом варианте.
pro_berserk писал(а):Так эта левая функция fpc_get_output вызывается и без функции Milliseconds в последнем скрине я её отметил
pro_berserk писал(а):Этот результат с выключенной оптимизацией, если включить оптимизацию -03 результат уменьшается еще на 50мс.
write('miliseconds: ', SomeFuncWhoReturnMiliseconds(now));
write('miliseconds: ');
write(SomeFuncWhoReturnMiliseconds(now));
MyCurrentTime:=SomeFuncWhoReturnMiliseconds(now);
write('miliseconds: ', MyCurrentTime);
SSerge писал(а):ваш код дал 639..642 на той же машине и компиляторе
pro_berserk писал(а):это заслуга оптимизации x64 FPC
SSerge писал(а):Ну так, может быть дело в том, что "быстрый" вариант программы использует CPU на его максимальной частоте, а на остальных частота так и остается на среднерабочей?
serbod писал(а):GetTickCount64() считает не миллисекунды, а тики, которые могут отличаться от миллисекунд на разных системах.
pro_berserk писал(а):Часть из них "современными" уже не назовешь...
{$mode objfpc}
Uses sysutils;
var i,j,n:integer;
s:double;
tm,tm2:TTimeStamp;
function Milliseconds:LongInt;
begin
result:=DateTimeToTimeStamp(now).time-tm.time;
end;
begin
tm:=DateTimeToTimeStamp(now);
n := 10000;
s := 0.0;
for i:=1 to n do
for j:=1 to n do
s += 1.0/(i*j);
writeln(Milliseconds);
end.
bash-4.2$ time ./project1
real 0m0.565s
user 0m0.564s
sys 0m0.001s
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10