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

Вниз

Отличия циклов   Найти похожие ветки 

 
{RASkov} ©   (2008-01-26 16:39) [0]

А отличается ли
for K:=0 to 100 do...
от
for K:=100 downto 0 do...
скоростью прохождения?


 
sniknik ©   (2008-01-26 16:44) [1]

второй быстрее... если только оптимизатор не привел первый к виду второго (если возможно он это делает), тогда будут одинаковы.


 
Palladin ©   (2008-01-26 16:49) [2]

а приведет он первый к виду второго в случае использования значения переменной цикла в теле цикла :)


 
Германн ©   (2008-01-26 17:03) [3]


> Palladin ©   (26.01.08 16:49) [2]

"Не" забыл.


 
Kerk ©   (2008-01-26 17:03) [4]


> Palladin ©   (26.01.08 16:49) [2]

Я вот этого факта никогда не понимал. А как быть, если порядок важен? Можно конечно проверить в отладчике, но влом :)


 
Псалтырь   (2008-01-26 17:24) [5]


> Kerk ©   (26.01.08 17:03) [4]


> А как быть, если порядок важен?

Тогда не приведет. См. Palladin ©   (26.01.08 16:49) [2]


 
{RASkov} ©   (2008-01-26 17:24) [6]

const NCount = 20000;
var N, I, K: Integer;
   Ar: array [0..NCount] of Char;
   Tm: Cardinal;
begin
{$O-}

 for N:= 0 to NCount do Ar[N]:=CHR(32+Random(256-32));
 I:=0;

 Tm:=GetTickCount;
 for K:=0 to NCount do
  for N:=0 to NCount do if Ar[N]="s" then I:=N+K;
 ListBox1.Items.Add("to: "+IntToStr(GetTickCount-Tm)+" msek  "+ IntToStr(I));

 I:=0;

 Tm:=GetTickCount;
 for K:=NCount downto 0 do
  for N:=NCount downto 0 do if Ar[N]="s" then I:=N+K;
 ListBox1.Items.Add("downto: "+IntToStr(GetTickCount-Tm)+" msek  "+ IntToStr(I));

{$O+}
end;

Совсем не то что-то :(

А можно какой-нибудь пример, где это
> второй быстрее...
будет продемонстрировано?


 
Псалтырь   (2008-01-26 17:30) [7]


> {RASkov} ©   (26.01.08 17:24) [6]


> А можно какой-нибудь пример, где это
> > второй быстрее...
> будет продемонстрировано?
>

Цикл увеличь. В разы, если не в десятки раз.


 
@!!ex ©   (2008-01-26 17:36) [8]

> [1] sniknik ©   (26.01.08 16:44)

почему?


 
@!!ex ©   (2008-01-26 17:36) [9]

потому что сравнение с 0?


 
{RASkov} ©   (2008-01-26 17:40) [10]

> [9] @!!ex ©   (26.01.08 17:36)

Да) С нулем сравнить быстрее чем не с нулем


 
Сергей М. ©   (2008-01-26 17:52) [11]


> С нулем сравнить быстрее чем не с нулем


С т.з. ЦП - фиолетово.


 
palva ©   (2008-01-26 17:57) [12]


> Да) С нулем сравнить быстрее чем не с нулем

А еще быстрее вообще не сравнивать. В процессоре есть команда, которая уменьшает регистр на единицу и осуществляет после этого goto, если получился нуль. В ассемблере она называется LOOPZ
Если же цикл идет в сторону увеличения, то нужно не только нарастить счетчик, но еще сравнить его с верхним пределом и осуществить условный переход. Лишние команды получаются.


 
DrPass ©   (2008-01-26 18:17) [13]


> В процессоре есть команда, которая уменьшает регистр на
> единицу и осуществляет после этого goto, если получился
> нуль. В ассемблере она называется LOOPZ

Не знаю, как в современных процессорах, но во времена моей юности один loopz выполнялся не быстрее, чем dec + jz.


 
Kerk ©   (2008-01-26 18:21) [14]


> DrPass ©   (26.01.08 18:17) [13]

В том и суть ветки, что dec+jz быстрее, чем inc+cmp+jz


 
Сергей М. ©   (2008-01-26 18:32) [15]


> во времена моей юности


Тогда и ни кэширования ни логики предсказания ветвлений не было .. Конвейеров не было .. Много чего не было ..

Мож и луп сегодня выполняется не менее эффективней, чем экв. инструкции при тех же условиях- это надо курить, прежде чем вкусить или выплюнуть)


 
Palladin ©   (2008-01-26 19:53) [16]


> Германн © (26.01.08 17:03) [3]

о блин... точно...


 
ketmar ©   (2008-01-26 21:03) [17]

>[15] Сергей М. ©(26.01.08 18:32)
таки loop медленней, емнип. до сих пор.



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

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

Наверх




Память: 0.5 MB
Время: 0.021 c
15-1201507817
Dennis I. Komarov
2008-01-28 11:10
2008.03.02
Asus P750 vs GloFish x800


2-1202473768
Dmitry S
2008-02-08 15:29
2008.03.02
Сравнить даты


2-1202472962
Дилан
2008-02-08 15:16
2008.03.02
treeview


2-1202199414
SergeyG
2008-02-05 11:16
2008.03.02
Отсчеты с шагом 1 мс


2-1202227203
NiGGa
2008-02-05 19:00
2008.03.02
Ошибка Delphi при запуске своего приложения