Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
1

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

28.07.2009, 22:15. Просмотров 4562. Ответов 5
Метки нет (Все метки)

Цитата Сообщение от 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 раз, а не миллион, как в первом случае.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2009, 22:15
Ответы с готовыми решениями:

Оптимизация 2х вложенных циклов
Доброго дня! Есть программа, рисующая притягивающиеся друг к другу шарики. В программе 2 потока:...

Организация циклов в С
Составить программу в С: 1. Составить программу, проверяющую, является ли заданное натуральное...

Вложение циклов
Объясните вложение циклов и привидите примерчик какой-нить...

Распараллеливание циклов
Доброго времени суток. Возникла необходимость распараллелить один численный алгоритм средствами...

5
Эксперт JavaЭксперт С++
8358 / 3579 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
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];

Не по теме:

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

0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
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];
}
1
2806 / 1396 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
28.07.2009, 23:49 4
odip, где-то читал, что компилятор сам оптимизирует код: если есть необходимость, делает перменную register (а вот где читал? или это мне приснилось? )
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
29.07.2009, 00:10 5
Конечно компилятор старается использовать регистры, а не ячейки памяти.
А еще компилятор может цикл раскрыть как это я сделал.
0
2806 / 1396 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
29.07.2009, 00:14 6
odip, ну да... а еще может конструкцию которая дает один и тот же результат заменить статическим выражением.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2009, 00:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Распараллеливание циклов
Есть такой цикл std::list&lt;int&gt;::iterator iter; std::list&lt;int&gt;_paramsFFT; for(iter =...

Треугольник из Циклов
Приветствую, не выходит задача, первую показали , а потом всё новые и другие (не понимаешь и...

Особенность циклов в c++
Здравствуйте , я новичек в программировании, поэтому могу чего-то не знать. Сегодня я заметил...

Программирование циклов while, for, do.while
Всем доброго времени суток! Помогите пожалуйста с задачей условия таковы: Для каждого x,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.