const TMyClass &Item = Array ;
Item.Action();
вложение циклов for{}
Есть 4 вложенных цикла. как можно увеличить быстродействие? может есть какие-либо специальные приемы? Могут ли помочь всякие динамические структуры данных (очереди, деревья...)? если да, то как и где про них можно прочитать...
Цитата: Gazzy
Есть 4 вложенных цикла. как можно увеличить быстродействие? может есть какие-либо специальные приемы?
Есть. Один из них - развёртка циклов.
Цитата: Gazzy
Могут ли помочь всякие динамические структуры данных (очереди, деревья...)?
Это структуры данных, а ты говоришь про итерации цикла. Все зависит от задачи. Опимизация возможна всегда.
Цитата: Gazzy
если да, то как и где про них можно прочитать...
http://forum.codenet.ru/showthread.php?t=22178 - полно всего.
А вообще все от задачи зависит.
Цитата: Lerkin
Есть. Один из них - развёртка циклов.
Это как? :confused:
Цитата: Gazzy
Это как? :confused:
Можно взять какой-нить мощный оптимизирующий компилятор, например Intel C++ Compiler, и посмотреть генерируемый им код. А для выяснения причины тормозов, т.е. для выявления "горячих точек" программы, очень желательно пользоваться профилировщиками, например Intel VTune Performance Analyzer. Можно применять различные технологии, например OpenMP, векторизацию и т.д.
Короче, вот, по этой теме:
http://www.codenet.ru/progr/optimize/kk/index.php
Очень рекомендую ознакомиться.
1. Чаще использовать ссылки либо указатели на элемент массива цикла высшего порядка. Для простых типов лучше копировать их значения
Код:
Отсутствуют расходы на вычисление индексации массива в каждой строке внутри цикла - определяется один раз.
2. Если кол-во элементов не меняется, то определить конечное значение один раз в начале цикла
Код:
for (int i = 0, Size = Array.Get_Size(); i < Size; i++)
Отсутствуют расходы на вычисление границы цикла при каждой проверке условия цикла.
3. Частный случай 2, если направление цикла не имеет значения, и одной из границ является ноль, то декремент переменной предпочтительнее
Код:
for (int i = Array.Get_Size()-1; i >= 0; i--)
Сравнивать значение переменной цикла с нулём быстрее, чем с другим значением.
Это означает сложность четвертой степени!
Это необычный случай. Точнее, обычно (в большинстве случаев) в таком не бывает необходимости. Не думаю, что твоя задача исключение.
Поэтому наипервейшие "методы оптимизации" - это подумать и отказаться от некоторых циклов вовсе и/или кешировать результаты работы на итерациях.
Приведи условие задачи. Уверен, что её можно будет значительно упростить с т.з. сложности алгоритма.