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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 15:09   #11
FiloXSee
Пользователь
 
Регистрация: 07.06.2011
Сообщений: 28
По умолчанию

Если вы пишите бизнес логику, то оптимизация алгоритмов намного важнее оптимизации кода. Но если вы пишите низкоуровневую систему, или например математическую библиотеку, то подобные знания просто необходимы.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
это вам не команды FPU, а команды линейные...
Даже если в асме вы получаете линейную последовательность команд, то это не значит, что процессор их не будет выполнять параллельно.
Портал "It Works" (http://itw66.ru), на котором веду множество блогов по программированию и философии (FiloXSee).
FiloXSee вне форума Ответить с цитированием
Старый 07.06.2011, 15:17   #12
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от FiloXSee Посмотреть сообщение
Но если вы пишите низкоуровневую систему, или например математическую библиотеку, то подобные знания просто необходимы.
На сколько низкоуровневую?
В математических библиотеках основную роль играет оптимизация математических алгоритмов, а не всевозможные извращения, которые у вас описаны. Еще раз - все это компилятор может сделать сам.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 07.06.2011, 15:49   #13
FiloXSee
Пользователь
 
Регистрация: 07.06.2011
Сообщений: 28
По умолчанию

Не все. Посмотри пример 17. Это часто встречающаяся ситуация. Да и вообще можно очень навредить производительности используя ветвления. Компилятор нечего тут не сделает. Допустим есть функция которая валидирует содержимое некой структуры и вызывается в каждом кадре. Допустим в ней умножается матрица трансформации предка на свое смещение, чтобы получить свою позицию.

А в ее начале идет проверка, которая проверяет, что раз матрица не менялась, то и вычисления не требуются:
if( !needValidate )
return;

Умножение вектора на матрицу - это 9 произведений и 6 сумм - 15 тактов. Операция if - минимум 40 тактов. Таким образом эта "оптимизация" увеличивает время выполнение функции в три раза. Дешевле просто вычислять все всегда, не проверяя флаг необходимости валидации. Если мы проходим по коллекции таких объектов и эта функция вызывается в каждом кадре, то эта тупая проверка может сильно снизить скорость работы кода.

Понятно, что в простых примерах, которые я описывал компилятор может справится. В остальных же все будет на совести программиста.
Портал "It Works" (http://itw66.ru), на котором веду множество блогов по программированию и философии (FiloXSee).
FiloXSee вне форума Ответить с цитированием
Старый 07.06.2011, 16:21   #14
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Но если вы пишите низкоуровневую систему...
Попробуйте поупражнятся в оптимизации с компиляторами для низкоуровневых систем.
p51x вне форума Ответить с цитированием
Старый 07.06.2011, 16:48   #15
FiloXSee
Пользователь
 
Регистрация: 07.06.2011
Сообщений: 28
По умолчанию

Я занимаюсь разработкой игр под разные платформы (PC, PS3, XBox360, MacOsX). Там тоже очень важна оптимизация.
Портал "It Works" (http://itw66.ru), на котором веду множество блогов по программированию и философии (FiloXSee).
FiloXSee вне форума Ответить с цитированием
Старый 07.06.2011, 21:22   #16
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

1. Хорошо. Как вы считаете есть ли принципиальные различия в подходах по оптимизации для PC и PS3?
2. Что вы понимаете под низкоуровневыми системами?
p51x вне форума Ответить с цитированием
Старый 07.06.2011, 23:57   #17
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вообще-то да, p51x прав, не в том разделе тема, ну да ладно.
Статья интересная, много интересных и порой неожиданных подходов, но с некоторыми вещами очень несогласен.

А про оптимизацию компилятором вопрос спорный. Единственное, что он должен делать, это обрабатывать написанный код так, чтобы он работал как написано. А что он там будет или не будет оптимизировать можно узнать, лишь прочитав код самого компилятора. Хотя в целом согласен, многие вещи он сам может сделать. Но почему бы не писать оптимизированно просто для души или на всякий случай?)

Согласен с Blade, обычно правильный алгоритм будет быстрее такой оптимизации, хотя, естественно, лучше и то и другое. Был случай на олимпиаде по программированию. До конца оставалось 5-10 минут, в массиве нужно было найти 3 максимальных положительных и 2 минимальных отрицательных элемента. Все, что пришло в голову в тот момент - отсортировать. Сделал бы, например, пузырьком - пролетел бы во времени. НО я сделал вставками и работало, видимо, достаточно быстро)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 08.06.2011, 00:09   #18
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Granus
да никто не спорит, что алгоритм важнее такой оптимизации. но даже говорить об оптимизации на таком низком уровне, используя высокоуровневый/среднеуровневый (как с++) язык (вкупе с какой нить либой, Qt к примеру), просто смешно. а ну и пофиг, что данные в модели хранятся в QVariant, туда-сюда конвертятся, а вот тут контейнер я передаю по значению, зато 2 такта сэкономил на условиях
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, 00:15   #19
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Сообщение от pproger
но даже говорить об оптимизации на таком низком уровне, используя высокоуровневый/среднеуровневый (как с++) язык (вкупе с какой нить либой, Qt к примеру), просто смешно.
Да я тоже ни о чем не спорю)
И я искренне надеюсь, что автор имеет ввиду обычные типы без библиотек и прочих подобных вещей, иначе оптимизация, действительно, выглядит смешно)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 08.06.2011, 07:36   #20
FiloXSee
Пользователь
 
Регистрация: 07.06.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
1. Хорошо. Как вы считаете есть ли принципиальные различия в подходах по оптимизации для PC и PS3?
2. Что вы понимаете под низкоуровневыми системами?
1. Сравнивать PC и PS3 не очень корректно. У них совершенно разные процессоры. Основные приросты в производительности дает распараллеливание задач. Но на PC сейчас 4-8 равных ядер для который можно создавать обычные потоки, а на PS3 по сути два ядра. И еще 7 SPU, дополнительных модулей процессора для который код пишется и компилируется отдельно, как в CUDA.

Но сходство в том, что всегда нужно минимизировать объемы данных, чтобы кэшмисов при работе было меньше, часто паковать все в биты и работать с ними напрямую. Это я и называл низким уровнем.

Конечно if почти никакого вреда не нанесет если речь идет про логику игры или бизнес логику обычных приложений. Но если вы делаете Particle System и при обновлении каждого партикла вы будете делать что то вроде:
if( needChangePosition )
position += velocity * dt;
То у вас все ляжет на 10000 партиклов. И различий в PC и PS3 тут не будет. Разве что PC намного мощнее.

2. Примерно это и понимаю. Когда задача написать систему эффектов, не вылезая за 1 мегабайт памяти и 1 милисекунду апдейта и рендера.
Портал "It Works" (http://itw66.ru), на котором веду множество блогов по программированию и философии (FiloXSee).
FiloXSee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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