Форум программистов, компьютерный форум CyberForum.ru

Методы оптимизации памяти - C++

Восстановить пароль Регистрация
 
FiloXSee
18 / 9 / 0
Регистрация: 01.07.2011
Сообщений: 25
08.07.2011, 08:11     Методы оптимизации памяти #1
Написал статью по оптимизации памяти в программах на С++. Ее можно почитать тут:
http://itw66.ru/blog/c_plus_plus/491.html

А какие методы вы можете предложить по повышению эффективности программы, при помощи организации данных в памяти определенным образом?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.07.2011, 11:56     Методы оптимизации памяти #2
можно какие либо аргументы по 4-му пункту
FiloXSee
18 / 9 / 0
Регистрация: 01.07.2011
Сообщений: 25
08.07.2011, 13:31  [ТС]     Методы оптимизации памяти #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
можно какие либо аргументы по 4-му пункту
Когда идет постоянная работа с объектами и их иерархиями, например в бизнесс логике, то 4-й пункт будет практически не применим. Он применим тогда, когда проектируется некая система с большим количеством данных.

Пример: вы собираетесь делать систему частиц. Понятно что внешнему коду не нужно работать с конкретной частицей в отдельности (никогда не нужно). Из вне придет команда - обновить/отрисовать систему частиц. Этот процесс будет значительно ускорен, если частицы будут идти в памяти подряд (будет меньше обращений к памяти).

Как выглядит обновление частиц:
1. нужно для всех частиц изменить позицию
2. нужно для всех частиц изменить вращение
... цвет и прочие параметры.

Если данные будут представлены в виде последовательности частиц то: размер частицы 64 байта. Из памяти берется за раз 64 байта. Это значит что при обновление на каждую частицу будет по запросу к памяти (который 600 тактов, в то время как вычисления будут 12-15 тактов, т.е. будет тормозить доступ к памяти, а не математика).

Если же организовать все как в пункте 4-е, т.е. раcположить сначала все позиции в памяти, затем все повороты и т.д., то за раз будет получено 64/16=4 позиции для 4-х партиклов (тут 16 байт это размер структуры float x,y,z,w). т.е. для расчета всех партиклов будет в 4-е раза меньше запросов к памяти, скорость выполнения увеличится более чем в 3-и раза.

4-й метод актуален когда расчеты часто проводятся по какому то параметру структуры. Например найти объект по индексу. Это будет значительно быстрее если индексы будут в отдельном массиве.
olympian
2 / 2 / 0
Регистрация: 18.10.2008
Сообщений: 33
08.07.2011, 14:48     Методы оптимизации памяти #4
3 пункт
Пишешь, что не нужна проверка - зато передача матрицы по значению, а не ссылке или указателю - нас не волнует. Если это матрица преобразования, то ее размер какой? 4 * 4 * sizeof(double) (правда нехило так?) - и копирование займет гораздо больше, чем "ненужная" проверка
FiloXSee
18 / 9 / 0
Регистрация: 01.07.2011
Сообщений: 25
08.07.2011, 15:42  [ТС]     Методы оптимизации памяти #5
Цитата Сообщение от olympian Посмотреть сообщение
3 пункт
Пишешь, что не нужна проверка - зато передача матрицы по значению, а не ссылке или указателю - нас не волнует. Если это матрица преобразования, то ее размер какой? 4 * 4 * sizeof(double) (правда нехило так?) - и копирование займет гораздо больше, чем "ненужная" проверка
Резонное замечание. Конечно там передается по ссылке (можно по указателю - без разницы). Исправил..

Размер матрицы 4 * 4 * sizeof(float). double - это достаточно редко применяемый в компьютерной графике формат. Разве что в каких математических приложениях.
olympian
2 / 2 / 0
Регистрация: 18.10.2008
Сообщений: 33
08.07.2011, 16:46     Методы оптимизации памяти #6
Цитата Сообщение от FiloXSee Посмотреть сообщение
Размер матрицы 4 * 4 * sizeof(float). double - это достаточно редко применяемый в компьютерной графике формат. Разве что в каких математических приложениях.
В каком плане редко применимый? А каким образом хранится матрица N x N, чтобы ее размер был меньше N * N * sizeof()?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
08.07.2011, 16:52     Методы оптимизации памяти #7
Цитата Сообщение от olympian Посмотреть сообщение
В каком плане редко применимый
в плане компьютерной графики, написано же
FiloXSee
18 / 9 / 0
Регистрация: 01.07.2011
Сообщений: 25
08.07.2011, 17:00  [ТС]     Методы оптимизации памяти #8
Цитата Сообщение от olympian Посмотреть сообщение
В каком плане редко применимый? А каким образом хранится матрица N x N, чтобы ее размер был меньше N * N * sizeof()?
Если очень хочется то могу на вскидку выдать способ, при котором матрица N x N будет меньше N * N * sizeof(type). Допустим ты хранишь разряженную матрицу большого размера, т.е. N - большой, но известно, что только 5% ячеек будут не нулевыми. Тогда можно хранить в виде массива структур <x,y,value>.

Но я конечно имел в виду компьютерную графику и матрицу 4 * 4 * sizeof(float).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2011, 17:03     Методы оптимизации памяти
Еще ссылки по теме:

C++ MinGW и странности оптимизации
Методы оптимизации C++
C++ Влияние оптимизации? Или UB?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
olympian
2 / 2 / 0
Регистрация: 18.10.2008
Сообщений: 33
08.07.2011, 17:03     Методы оптимизации памяти #9
Всё, понял
Удивился - как можно хранить х байт в меньшем числе, не подумал о специфичном виде
Yandex
Объявления
08.07.2011, 17:03     Методы оптимизации памяти
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru