Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 08:19   #21
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Статья по оптимизации такого плана без демонстрации ассемблерного кода, т.е. того кода, который и будет исполняться компилятором, яйца выеденного не стоит.
В общем, куча текста ни о чём. Оптимизируем непонятно что (в одном месте выигрываем такты за счет большего расхода памяти, в другом - наоборот), непонятно под какой компилятор, непонятно под какой процессор...
pu4koff вне форума Ответить с цитированием
Старый 08.06.2011, 11:05   #22
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

а давайте ещё вместо int , bool использовать)) это ведь сэкономит аж 3 байта..неплохая оптимизация))
revaldo666 вне форума Ответить с цитированием
Старый 08.06.2011, 11:14   #23
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Но почему бы не писать оптимизированно просто для души или на всякий случай?)
Потому что эти бесполезные действия:
1. Тратят время разработчика впустую, следовательно искусственно увеличивается стоимость проекта.
2. Ухудшают читабельность кода, который, возможно, будут смотреть\редактировать другие разработчики, следовательно трата времени других разработчиков впустую, снова потеря денег.
3. Противоречат правилам хорошего программирования, главным принципом которых является простота. Код усложняется, следовательно возрастает вероятность допущения ошибки (того, кто это пишет, и того, кто это потом будет редактировать).
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 08.06.2011, 11:14   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
это ведь сэкономит аж 3 байта..неплохая оптимизация))
тут корректнее сказать уж char тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2011, 11:23   #25
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

А еще корректнее - unsigned val : 1;
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 08.06.2011, 11:56   #26
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Фигня какая-то. Всю эту так называемую "оптимизацию" нормальный компилятор выполнит самостоятельно.
Относительно пунта 8 - то процессору мягко говоря пофиг, он заполняет строку кеша (которая шириной 64 байта), а дальше влияние на перфоманс оказывает только выравние данных относительно начала строки, ну и порядок запроса данных.
Пункт 13 - откуда такие цифры? самое страшное, что может случиться - отсутствие данных в кеше, при этом процессор тратит порядка 100 тактов на поиск по всем уровням кеша и подрузгу из памяти если необходимо.
16, 17 - чо за нах. Основная задача х86 процессора анализ кода и "предвидиние" действия. И тут надо понимать, что проц не только пытается угадать, он еще ведет статистику переходов. Так что основная рекоммендация тут - избегать создания равновероятных переходов.
21 - если кто-то действительно пишет так, то наверное стоит вообще не писать

И нет ничего про SSE. А это действительно оптимизация.



Но, в целом, конечно, все эти твики нужны только в каком-нибудь узко-специализированном, скорее всего, вычислительном софте. Для всех остальных задач подобная оптимизация будет пустой тратой времени.

Последний раз редактировалось f.hump; 08.06.2011 в 12:05.
f.hump вне форума Ответить с цитированием
Старый 08.06.2011, 13:13   #27
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Blade, я не думаю, что замена i++ на ++i так уж сильно затуманит код. А про оптимизацию, которая делает код нечитабельным даже для себя я и не говорю, только про приятные мелочи)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 08.06.2011, 15:15   #28
FiloXSee
Пользователь
 
Регистрация: 07.06.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от revaldo666 Посмотреть сообщение
а давайте ещё вместо int , bool использовать)) это ведь сэкономит аж 3 байта..неплохая оптимизация))
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
тут корректнее сказать уж char тогда.
Если у вас используется выравнивание, то не сэкономит. А если использовать char то еще и медленнее работать будет.
int i;
char c;
int arr[ 1000 ];

arr[ i ] - это на архитектуре х86 будет намного быстрее чем
arr[ с ]

Цитата:
Сообщение от pproger Посмотреть сообщение
А еще корректнее - unsigned val : 1;
Это тоже память не сэкономит и работать будет долго, но иногда кэшмисы страшнее и приходится так упаковывать.

Цитата:
Сообщение от f.hump Посмотреть сообщение
Относительно пунта 8 - то процессору мягко говоря пофиг, он заполняет строку кеша (которая шириной 64 байта), а дальше влияние на перфоманс оказывает только выравние данных относительно начала строки, ну и порядок запроса данных.
Так в пункте и говорится, что выравнивать нужно. Если сделать размер структуры 12 байт, то проходить по массиву таких структур будет значительно дольше, чем если эта структура будет 16 байт. Добавление фиктивной переменной ускорит работу.

Цитата:
Сообщение от f.hump Посмотреть сообщение
16, 17 - чо за нах. Основная задача х86 процессора анализ кода и "предвидиние" действия. И тут надо понимать, что проц не только пытается угадать, он еще ведет статистику переходов. Так что основная рекоммендация тут - избегать создания равновероятных переходов.
По пункту 16: если в switch перечислены подряд идущие кейсы, то он выберет подходящий за одно действие. а конструкция
if ( )
else if ( )
else if ( )
Будет вычислять все выражения.

По пункту 17 - конструкция if и переход будет значительно дольше чем просто вернуть значение в массиве. Это не ломает конвеер процессора.

Цитата:
Сообщение от f.hump Посмотреть сообщение
21 - если кто-то действительно пишет так, то наверное стоит вообще не писать
Не подходи так прямолинейно. Смысл пункта в том, что если у тебя большие числа во флоат переменной, то работа с ней и с маленькими значениями даст большую погрешность. Почитай:
http://itw66.ru/blog/c_plus_plus/481.html
Портал "It Works" (http://itw66.ru), на котором веду множество блогов по программированию и философии (FiloXSee).
FiloXSee вне форума Ответить с цитированием
Старый 08.06.2011, 15:20   #29
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Добавление фиктивной переменной ускорит работу.
а умение пользоваться компилятором избавит от этого.
Цитата:
Если у вас используется выравнивание, то не сэкономит. А если использовать char то еще и медленнее работать будет.
я знаю, речь то про память была.
Цитата:
Это тоже память не сэкономит и работать будет долго, но иногда кэшмисы страшнее и приходится так упаковывать.
ну тут да, не сэкономит, так как меньше байта мы не адресуем.
насчет долго, не, не будет.
там элементарные команды проца, по смене битов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2011, 17:21   #30
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Blade, я не думаю, что замена i++ на ++i так уж сильно затуманит код.
Как сказали выше - если нет разницы какую форму инкремента использовать, лучше использовать префиксную. А если используется постфиксная, то на это должна быть причина. И тот кто читает код, не должен гадать, почему же в 100 случаях до этого написано ++i, а теперь вдруг i++
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 08.06.2011 в 17:23.
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы оптимизации Lazio Фриланс 3 11.12.2010 12:05
методы оптимизации первого порядка Olenka555 Помощь студентам 0 21.05.2010 16:43
Методы оптимизации в Excel Raikhman Microsoft Office Excel 2 10.02.2009 11:17
задачи оптимизации kirasir Microsoft Office Excel 2 08.08.2007 00:40