Другие языки программирования и технологии

Можно ли доверять Оптимизаторам кода??? Visual Studio 2013

Насколько эффективно работают Оптимизаторы кода? например Visual Studio 2013 ???
Стоит ли заморачиваться с заменой деления/умножения на 2, заменяя их на сдвиг на 1 бит влево/вправо??
Может есть некоторые приёмы которые нужно делать??
например при умножении всех элементов массива byte[10000] скажем на 8. можно создать массив byte[256] в котором номер индекса это значение переменной которую нужно умножить а значение массива по этому индексу это результат умножения. В итоге операцию умножения можно поменять на более быстрое сложение . Или оптимизаторы могут тут оптимизировать код???
Замена деления умножением. Да стоит заморачиваться. Если бы вы знали как произходило деление вначале, а с того момента не многое изменилось, то поняли бы что стоит. Первоначально деление происходило тупо отниманием от делимого, делитель и прибавлением единицы к частному до тех пор пока делитель не станет меньше делителя.
while(делимое>делителя)
{
частное++;
делимое-=делитель;
}
Это для целочисленных операций, но я думаю что с fpu похожая схема. Конечно сейчас алгоритмы более продуктивные, но все же основываются на отнимании.
OK
Oleg Korovin
15 382
Лучший ответ
Oleg Korovin Опять же для оптимизации главное найти участки кода которые "тормозят". В циклах надо избавляться от лишнего ну и так далее.
Oleg Korovin Когда то давно читал статейку, как человек начал заниматься оптимизацией т. к. скорость программы была маленькой. Он уже вроде бы все под чистую вылизал, а скорость увеличил лишь на доли секунды, пока не обнаружил что скорость вывода символов на экран и тормозит приложение. Переписав по другому он достиг приемлемых результатов. Могу в чем то ошибаться, но суть осталась. Суть в том что бы найти участок (ки) кода "тормозящие" приложение, а не тупо все оптимизировать. Ну а потом, если будет желание, то оптимизировать и остальное.
если у и тебя эти "деления на 2" происходят в циклах по несколько миллионов раз, и ждать вечно нет желания, то есть смысл задуматься об оптимизации

но если ты так оптимизируешь, что уже спустя 5 минут после написания коде не в состоянии понять написанное тобой, то на кой хрен оно нужно? у тебя оптимизация кода сожрала оптимизацию твоего труда.
Идите в такой последовательности:
1) Оптимизируйте алгоритм, возможно, что исключите такие вычисления, или минимизируете, это главное средство. Если вычисления математические, то часто можно преобразовать формулы, классический пример: быстрое преобразование Фурье.
2) Если пишете на C#, или Oxygen, то вынесите массивные вычисления в DLL, а их пишите на C++, или Delphi, как выше посоветовали, на крайняк в ассемблере.
3) Если пишете на C или C++, то сделайте ассемблерный модуль, с вычислительными функциями.
Тупая замена: деления/умножения на сдвиги мало что даст. А оптимизация в VS, для С++ ,ИМХО нормальная, лучше чем в Delphi например.
"Преждевременная оптимизация - корень всех зол. " (Дональд Кнут)

Чтобы проверить, получилось ли оптимизировать код по быстродействию, есть System.Diagnostics.Stopwatch
Берете и считаете, сколько мсек требовалось на исполнение кода до оптимизации и сколько - после.
Насчет оптимизации по ОЗУ - тупо диспетчером задач. Пара сотен КБ некритично, а серьезные изменения заметите.

Если в данном приложении так критична производительность, то пишите его не на C#, а на C++, Delphi, PureBasic. Одним этим вы сэкономите буквально миллионы байт ОЗУ.
Алексей Базуев
Алексей Базуев
15 749
Бахтияр М >>"Преждевременная оптимизация - корень всех зол. " (Дональд Кнут) >>

Вот она! Стилистическая фишка, создающая новый образ, не похожий на ВЗ!
Цитаты из классиков! :)
Кеслер Коля > так критична производительность, то пишите его ...PureBasic.
Производительность важна для вычислительных задач. На вычислительных задачах PureBasic сливает даже C#.
http://benchmarksgame.alioth.debian.org/u32/program.php?test=spectralnorm&lang=csharp -- при N = 5500 на моем ноуте считает около 10.5 секунд
Этот же код, тупо без изменений переписанный на PB
http://pastebin.com/QJ1fia4a -- при N = 5500 время > 24 секунд
http://benchmarksgame.alioth.debian.org/u32/program.php?test=spectralnorm&lang=cint -- сишка 8.5 секунд.
Кеслер Коля Как в анекдоте про дворника с бородой: ну станет он вставлять цитаты классиков, но незнание матчасти, стремление написать херню не имеющую отношения к вопросу, попытки выдать собственные идиотские измышления за истину в последней инстанции куда денутся?

Типа он Кнута читал? Он же постоянно пишет, что читать вредно, а тут цитаты классиков!