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