Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.043 c
8-1174744468
VitAngel
2007-03-24 16:54
2008.03.02
Снимок с Вебкамеры


2-1202323170
ЗфдЗфднср
2008-02-06 21:39
2008.03.02
проблемка с Union All


2-1201952182
karablik
2008-02-02 14:36
2008.03.02
WMA getMarker


15-1201611389
ZeroDivide
2008-01-29 15:56
2008.03.02
Киньте в меня формой 2-НДФЛ в формате fr3, кому не жалко


15-1201495745
vajo
2008-01-28 07:49
2008.03.02
Как настроить обновления Win Vista Busines?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский