Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой самый быстрый цикл? Скорость операторов 
:(
    Опции темы
apd2004
Дата 20.4.2009, 22:46 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Хотелось бы узнать какие операторы цикла лучше выбрать для достижения максимальной скорости в Турбо Паскале 7.0 ???
Что лучше while/repeat/for ???

И ещё,какие операторы больше всего ''съедают" время????


Заранее спасибо!
PM MAIL   Вверх
mes
Дата 20.4.2009, 23:08 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(apd2004 @  20.4.2009,  21:46 Найти цитируемый пост)
Хотелось бы узнать какие операторы цикла лучше выбрать для достижения максимальной скорости в Турбо Паскале 

Не на том экономите, лучше проопимизируйте алгоритм работы программы, а циклы в машинах кодах при прочих равных будут выглядить одинаково.



--------------------
PM MAIL WWW   Вверх
volvo877
Дата 20.4.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(mes @  20.4.2009,  23:08 Найти цитируемый пост)
а циклы в машинах кодах при прочих равных будут выглядить одинаково.
При "прочих равных" - это как? Ничего, что на цикле Repeat/Until безо всяких "прочих равных" (скопированное тело цикла, абсолютно одни и те же вычисления, 2 раздельных запуска программы с интервалом в полчаса для тестирования разных циклов) по сравнению с For-ом имеем больше 10% выигрыша по времени (TP7.0 + WinXP)? Преимущество While - чуть меньше, но все же оно есть, он немного быстрее For-а.

Это сообщение отредактировал(а) volvo877 - 20.4.2009, 23:41
PM MAIL   Вверх
mes
Дата 21.4.2009, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(volvo877 @  20.4.2009,  22:40 Найти цитируемый пост)
имеем больше 10%

может еще раз потестим ?! код Вашего теста не сохранился ?!



--------------------
PM MAIL WWW   Вверх
SneG0K
Дата 21.4.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



На циклах экономить? Ну это вообще извращение! Может тогда вообще писать ничего не будем? Оставим пустой проект? - Ну как же? Вообще мгновенно выполнятся будет.
PM WWW Skype   Вверх
volvo877
Дата 21.4.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(SneG0K @  21.4.2009,  00:15 Найти цитируемый пост)
Может тогда вообще писать ничего не будем?
Угу, давайте все темы будем сводить к Мусорке, Флейму и Песочнице, да? Ибо комодератору этих разделов у себя скучно, и он решил залезть в тематику... 

Цитата(mes @  21.4.2009,  00:12 Найти цитируемый пост)
код Вашего теста не сохранился ?!
Нет, давно это было, года 3 назад, может и 4, но попробую что-нибудь сваять...

PM MAIL   Вверх
megabist
Дата 21.4.2009, 09:18 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Mart Slaaf
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 3.4.2006
Где: Мск

Репутация: нет
Всего: 31



SneG0K, mes, На циклах вполне имеет смысл экономить при огромном количестве, маленьких операций.

Тестов не проводил, но вроде от препода слышал, что самый быстрый for.


--------------------
Don't panic!

Жди, и Фатум тебя приведёт...
PM MAIL ICQ Skype GTalk   Вверх
SneG0K
Дата 21.4.2009, 13:40 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



volvo877, а логически рассудить комодеру другого раздела религия не позволяет?
Сами подумайте, каждый цикл предназначен для определенных целей. 

while будет работать пока соблюдается условие
for будет работать пока соблюдается условие, но со счетчиком

for медленней while. Но если мы начнем с while делать цикл со счетчиком то потеряем продуктивность и вернемся к for, но через while!
так разве есть смысл экономить на циклах? Все уже сэкономлено до нас!

Лучше лишние проверки и ненужные вызовы вынести за цикл. Тогда будет выгода, а так это коту под хвост.
PM WWW Skype   Вверх
RinOSpro
Дата 21.4.2009, 15:34 (ссылка)    |    (голосов: 3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











IMHO тут следует выбирать из удобства, и какой цикл подходит к данной ситуации. 

Вот что показывает отладчик:
Код

var
  i: Integer;
begin
  for i := 0 to MAXINT-1 do
  begin

  end;
end.

Код

0040339C   . B8 FFFFFF7F    MOV EAX,7FFFFFFF
004033A1   > 48             DEC EAX
004033A2   .^75 FD          JNZ SHORT Project1.004033A1

Код

var
  i: Integer;
begin
  while i < MAXINT-1 do
  begin
    Inc(i);
  end;
end.

Код

0040339C   . 3D FEFFFF7F    CMP EAX,7FFFFFFE
004033A1   . 7D 08          JGE SHORT Project2.004033AB
004033A3   > 40             INC EAX
004033A4   . 3D FEFFFF7F    CMP EAX,7FFFFFFE
004033A9   .^7C F8          JL SHORT Project1.004033A3

Код

var
  i: Integer;
begin
  repeat
    Inc(i);
  until i > MAXINT-1;
end.

Код

0040339C   > 40             INC EAX
0040339D   . 3D FEFFFF7F    CMP EAX,7FFFFFFE
004033A2   .^7E F8          JLE SHORT Project1.0040339C


Так что много не съэкономите, но если постараться smile то можно усложнить себе жизнь, гонясь за десятком тактов smile.

Это сообщение отредактировал(а) RinOSpro - 21.4.2009, 15:34
  Вверх
mes
Дата 21.4.2009, 17:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(megabist @  21.4.2009,  08:18 Найти цитируемый пост)
На циклах вполне имеет смысл экономить при огромном количестве, маленьких операций.

Под оптимизацией_цикла подразумевается оптимизация его алгоритма, а не  оптимизация путем замены ключевого слова.

Цитата(megabist @  21.4.2009,  08:18 Найти цитируемый пост)
Тестов не проводил, но вроде от препода слышал, что самый быстрый for. 

вроде или точно ?!
кстати,
Цитата("@чья-то")

если на клетке со слоном написано "жираф" - не верь глазам своим


Цитата(SneG0K @  21.4.2009,  12:40 Найти цитируемый пост)
for медленней while. Но если мы начнем с while делать цикл со счетчиком то потеряем продуктивность и вернемся к for, но через while!
так разве есть смысл экономить на циклах? 

хочу уточнить, что
1. время изменения счетчика ничтожно мало, и заметно только на фоне пустого цикла.
Сокращение одного умножения (в цикле) принесет в десятки раз больше прибыли.
2.  Речь идет о старых компиляторах, современные оптимизируют очень хорошо, в том числе полностью исключая пустые циклы и не использованные счетчики.


Это сообщение отредактировал(а) mes - 21.4.2009, 17:34


--------------------
PM MAIL WWW   Вверх
SneG0K
Дата 21.4.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Цитата(mes @  21.4.2009,  16:34 Найти цитируемый пост)
Сокращение одного умножения (в цикле) принесет в десятки раз больше прибыли.

А кто говорит про умножение?

Код

for i := 0 to 100 do


Идентичен 

Код

while i <= 100 do
begin
   inc(i);
end;


И смысл? Мы ничего не оптимизировали, но создается впечатление "жирафа"... И разве есть выгода в таком?


p.s. сорь, если где синтаксис неправильно объявил, давно уже с паскалем и дельфи не работаю
PM WWW Skype   Вверх
mes
Дата 21.4.2009, 20:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(SneG0K @  21.4.2009,  19:16 Найти цитируемый пост)
И смысл? Мы ничего не оптимизировали, но создается впечатление "жирафа"... И разве есть выгода в таком?

жираф это когда говорят что замена цикла for на while (как в вашем посту) принесет оптимизацию и добавит 
Цитата(volvo877 @  20.4.2009,  22:40 Найти цитируемый пост)
больше 10% выигрыша по времени

а слон это когда два цикла  при прочих равных (т.е while со счетчиком  и for) выполняются одинаково. 

и соответственно осуществлять выбор между этими двумя (и еще repeat) надо в рамках логики и  удобства,
а не писать все через while из за мнимой выгоды. 
 smile 


Это сообщение отредактировал(а) mes - 21.4.2009, 20:34


--------------------
PM MAIL WWW   Вверх
SneG0K
Дата 21.4.2009, 20:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



mes, полностью согласенsmile Оптимизировать надо не ключевое слово цикла, а его содержимоеsmile
PM WWW Skype   Вверх
Rodman
Дата 21.4.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



ну простом пробеге по циклу пустому не увидеть..

а вот мы экспериментировали с вычислениями, так что фор все быстрее
PM MAIL WWW Skype GTalk YIM MSN   Вверх
mes
Дата 21.4.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(Rodman @  21.4.2009,  19:39 Найти цитируемый пост)
а вот мы экспериментировали с вычислениями, так что фор все быстрее 


Цитата(volvo877 @  20.4.2009,  22:40 Найти цитируемый пост)
на цикле Repeat/Until ... по сравнению с For-ом имеем больше 10% выигрыша по времени (TP7.0 + WinXP)? Преимущество While - чуть меньше, но все же оно есть, он немного быстрее For-а.


кому верить  то ?!  smile  smile 

а может лучше логическому мышлению и здравому смыслу ?.. Если что взгляните на результаты в машиных кодах представленные выше.  smile 



Это сообщение отредактировал(а) mes - 21.4.2009, 21:10


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.