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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
#1

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

28.07.2009, 22:15. Просмотров 2757. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 22:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оптимизация циклов (C++):

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

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

Программирование циклов. - C++
Я получил объемное задание по С++ которое осилить мне практически невозможно, посему надеюсь на Вашу помощь, господа форумчане. Буду очень...

Программирование циклов while, for, do.while - C++
Всем доброго времени суток! Помогите пожалуйста с задачей условия таковы: Для каждого x, изменяющегося от a до b с шагом h, найти...

Объединение циклов - C++
Доброго времени суток! Есть объединенный цикл. Что выполняет данный цикл? И как сделать что бы был виден результат его работы? for(int...

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

5
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
28.07.2009, 23:49 #4
odip, где-то читал, что компилятор сам оптимизирует код: если есть необходимость, делает перменную register (а вот где читал? или это мне приснилось? )
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.07.2009, 00:10 #5
Конечно компилятор старается использовать регистры, а не ячейки памяти.
А еще компилятор может цикл раскрыть как это я сделал.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.07.2009, 00:14 #6
odip, ну да... а еще может конструкцию которая дает один и тот же результат заменить статическим выражением.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2009, 00:14
Привет! Вот еще темы с ответами:

Различие циклов - C++
Подскажите, пожалуйста. Приведенные циклы работают одинаково? for(int x : group.g_players) { player.groupID = 0; ...

Счетчик циклов - C++
помогите найти ошибку: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main(int argc, char**...

Распараллеливание циклов - C++
Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы...

Прерывание циклов - C++
Допустим есть цикл в цикле и если во внутреннем цикле выполняется некоторое условие, необходимо прервать оба цикла.Возможно ли это? Заранее...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
29.07.2009, 00:14
Ответ Создать тему
Опции темы

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