Оптимизация кода
Ребят подскажите какуе-нить литру по оптимизации кода на visual c++, желательно с ссылками где скачать, если есть конечно...Заранее спасибо
Всмысле, что ты хочешь оптимитизировать?
Для каждой задачи разная оптимитизация.
Чтобы код летал юзай Ассемблер.
меня интересуют общие случаи
Общих случаев оптимизации НЕ БЫВАЕТ.
Оптимизация проходит по какому либо из конкретных критериев.
меня интересуют общие случаи, ну там где лучше сделать цикл, а где и просто подряд несколько операций записать(взамен цикла)..и т.д.
Почти в каждой книге по программированию игр (особенно в старых) есть раздел по оптимизации кода. Если используешь тригонометрические функции - попробуй использовать таблицы поиска. Для вычислений с плавающей точкой можно использовать вычисления с фиксированной запятой (сейчас уже не так актуально). Выноси за пределы циклов все, что только можно. Если в цикле каждый раз вычисляется новый адрес для доступа к памяти, иногда бывает полезно вычислить шаг - приращение к адресу. Избегай деления и умножения. Но умножение все же лучше деления - по этому лучше умножать на обратную величину чем делить на прямую. Избегай лишних преобразований типов float <==> int. Подобные операции отнимают не мало процессорного времени. Тут много способов. Все зависит от конкретной задачи. Большую часть работы по оптимизации компилятор делает за тебя, но если применять неподходящий алгоритм, компилятор тут уже ничем не поможет.
http://www.geocities.com/SiliconValley/2151/opts.html
Избегай деления и умножения. Но умножение все же лучше деления - по этому лучше умножать на обратную величину чем делить на прямую.
http://www.geocities.com/SiliconValley/2151/opts.html
Помоему это чушь.
Сейчас открыл свой любимый справочник
Умножение шестнадцатибитного числа - 11 тактов.
Деление шестанадцатибитного числа 30 тактов.
Допустим 5 * 1/5
Сначало процессору приходиться умножать 5 на 1.
А потом все равно делить на 5.
И того 41 такт.
Помоему это чушь.
Сейчас открыл свой любимый справочник
Умножение шестнадцатибитного числа - 11 тактов.
Деление шестанадцатибитного числа 30 тактов.
Допустим 5 * 1/5
Сначало процессору приходиться умножать 5 на 1.
А потом все равно делить на 5.
И того 41 такт.
Вместо "5 * 1/5" всегда можно выполнить "5.0 * 0.2"
И никаких делений при этом не происходит, а арифметический результат - тот же. Если вы делите на константу, то вы так же можете и умножать на константу.
а что за справочник ты используешь?, не кинешь на мыло..glagola@yandex.ru
У меня книжка.
скинь на почту плиз...glagola@yandex.ru
Тут уж тебе надо указывать почтовый индекс, город, и улицу с домом):D Но высылать не буду, самому такое добро нужно)
У мя вся докуменатция в бумажных книгах)
Попробуй написать код таким образом, чтоб процессор загружал необходимые данные в кеш, чуть раньше чем они ему реально понадобятся.
Можно попробовать развернуть циклы, если тело цикла не очень велико и не содержит вызовов процедур. Разворот циклов лучше делать четырехкратный. На Пнях даст прирост производительность в 2 раза.
При развертке циклов следует помнить, что развернутый цикл должен уместиться в кеш.
Заменить вызов процедур, далающих небольшое количество элементарные дествия, своим кодом без вызова процедур.
Можно попытатья убрать часть условных операторов, заменяя их арифметическими действиями.
Избегать операции целочисленого деления.
В принципе есть еще куча действий, но в большинстве случаев они специфичны для каждой архитектуры.
Неплохая книга по оптимизации, это книга Касперского по эффективному использованию памяти.