Форум программистов, компьютерный форум CyberForum.ru

Оптимизация циклов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
28.07.2009, 22:15     Оптимизация циклов #1
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Вы о чем спорите? Оптимизация конечно хорошая штука....
я был очень удивлён, когда путём простой перемены мест внешнего цикла с внутренним проиводительность метода увеличилась на 20%

было:
C++
1
2
3
for (int idx = 0; idx != 1000000; ++idx)
  for (int shift = 0; shift != 5; ++shift)
    sum += arr[idx][shift];
стало:
C++
1
2
3
for (int shift = 0; shift != 5; ++shift)
  for (int idx = 0; idx != 1000000; ++idx)
    sum += arr[idx][shift];
потом в книге Макконнелла "Совершенный код" вычитал об этом же случае. Производительность увеличивается за счёт того, что внешний цикл отрабатывает всего-лишь 5 раз, и во внутреннем цикле счётчик создаётся/инициализируется тоже 5 раз, а не миллион, как в первом случае.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 22:15     Оптимизация циклов
Посмотрите здесь:

Разница циклов for и while C++
выход из 2-ух циклов C++
Использование циклов C++
C++ Программирование циклов.
Прерывание циклов C++
Вложение циклов C++
Объединение циклов C++
Счетчик циклов C++
Распараллеливание циклов C++
C++ Организация циклов в С
C++ Различие циклов
C++ Оптимизация 2х вложенных циклов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.07.2009, 22:25     Оптимизация циклов #2
Хорошое у Макконнелла наблюдение. Но такому варианту все равно в каком порядке циклы
C++
1
2
3
4
int shift, idx;
for (shift = 0; shift != 5; ++shift)
  for (idx = 0; idx != 1000000; ++idx)
    sum += arr[idx][shift];

Не по теме:

если не сложно, можеш в лс кинуть линк на книгу?

odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
28.07.2009, 23:25     Оптимизация циклов #3
Если хочется быстрее, то надо делать так:
C++
1
2
3
4
register int idx;
for ( idx = 0; idx<1000000; idx++ ) {
    sum+= arr[idx][0]+arr[idx][1]+arr[idx][2]+arr[idx][3]+arr[idx][4];
}
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
28.07.2009, 23:49     Оптимизация циклов #4
odip, где-то читал, что компилятор сам оптимизирует код: если есть необходимость, делает перменную register (а вот где читал? или это мне приснилось? )
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
29.07.2009, 00:10     Оптимизация циклов #5
Конечно компилятор старается использовать регистры, а не ячейки памяти.
А еще компилятор может цикл раскрыть как это я сделал.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.07.2009, 00:14     Оптимизация циклов #6
odip, ну да... а еще может конструкцию которая дает один и тот же результат заменить статическим выражением.
Yandex
Объявления
29.07.2009, 00:14     Оптимизация циклов
Ответ Создать тему
Опции темы

Текущее время: 08:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru