Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как быстрее?  (Прочитано 8589 раз)
0 Пользователей и 1 Гость смотрят эту тему.
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« : 26-11-2009 13:04 » 

Есть ли существенная разница между этим вариантом
Код:
for(int i=0; i<N; i++)
{
    func1();
}

for(int i=0; i<N; i++)
{
    func2();
}

и этим:
Код:
for(int i=0; i<N; i++)
{
    func1();
    func2();
}

Думаю, что второй вариант быстрее, но все равно на всякий случай уточню:)

Правка: суть проблемы в том, что удобнее бы было делать как в первом варианте - но только если это не будет значительно медленнее.
« Последнее редактирование: 26-11-2009 13:06 от The Nameless One » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-11-2009 13:17 » 

Быстрее будет вторым способом. Если посмотриш код на уровне ассемблера, то увидиш одну лишнюю команду mov i,0 и в цикле
inc i
mov ax, N
cmp ax, i
jz m1
Которые, хоть и незначительно, но будут накладывать свою работу. Значит и процессорное время будет тратится.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-11-2009 13:23 » 

Спасибо)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 26-11-2009 13:38 » 

The Nameless One, быстрее, понятно, второй способ.
Но с точки зрения алгоритма, возможно, понятно - первый способ.
Почему?
 а вдруг понадобятся, какие либо вычисления для второй функции? или для первой?

Есть такое понятие, как структурное программирование.
в первом варианте оно просматривается, во втором - увы.  А выигрыш в быстродействии минимален.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 26-11-2009 13:38 » 

Как минимум, на некоторых архитектурах первый вариант на самом деле может работать быстрее. Это связано с кэшированием инструкций. Я с таким сталкивался: одна функция (включая вложенные вызовы) помещается в специальном кэше инструкций, а для двух места в кэше уже не хватает, и память дёргается туда-сюда. В результате, экономия в первом варианте получается серьёзная Улыбаюсь

С другой стороны, если функции небольшие, и работают с общими данными, то второй вариант может быть лучше, потому что выполняет поблочную обработку данных. А первый может приводить к передёргиванию кэша данных и более медленной работе с данными в целом.

В общем, универсального ответа быть не может.
« Последнее редактирование: 26-11-2009 13:41 от Вад » Записан
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 26-11-2009 13:59 » 

Т.е. лучше всего надо сделать и посмотреть оба - какой будет быстрее.
Спасибо:)
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 26-11-2009 14:09 » 

The Nameless One, ты невнимательно прочитал!
Учитывая кэширование и зная "вложение" функций можно предположить об одинаковом времени исполнения.

С точки зрения написания и ловли "блох" вторя предпочтительней, как по мне.

При сегодняшних мощностях.

Но! Если это касается МК, с параллельным выполнением команд, то ВТОРАЯ быстрей!   
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 26-11-2009 14:33 » 

Нет, микроконтроллеров не касается:)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 27-11-2009 04:53 » 

А по моему, эти две формы капитально разные: второй случай будет единственным вариантом при зависимости второй функции по данным от первой - когда нужны все результаты работы, а не только от текущей и прошлых итераций. Т.ч. варианты не идентичны!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines