Memory manager
От: _sv_  
Дата: 01.11.21 19:25
Оценка:
Доброй ночи всем.

Проблема такова: В проекте обрабатывается видеопоток. Библиотека кодирования и наш код активно использует new/delete + malloc/free операции. Это дело жрёт очень много ресурсов. Всё, что могли — всё оптимизировали, но всё равно проблема стоит серьёзно. Из этого возникло желание попробовать сторонние менеджеры памяти.

Собственно вопрос: какие есть библиотеки С/С++? Можно рассмотреть и коммерческие решения. Изобретать велосипед не хочется.

P.S. Всё это крутится на встроенном Линуксе. Есть часть коммерческих библиотек без исходников. С ними самая большая проблема.

P.P.S. Перенёс тему в "Прикладные вопросы".

Спасибо.
Re: Memory manager
От: Videoman Россия https://hts.tv/
Дата: 01.11.21 20:20
Оценка: 1 (1)
Здравствуйте, _sv_, Вы писали:

__> Всё, что могли — всё оптимизировали, но всё равно проблема стоит серьёзно. Из этого возникло желание попробовать сторонние менеджеры памяти.


Я очень сомневаюсь что с "Java" подходом какой-нибудь С++ менеджер это вывезет. Зачем кодеку или видео-процессору аллокация памяти ? Profile и Level ведь специально для этого введены, что бы код обрабатывающий поток точно знал сколько ресурсов максимально может быть задействовано. Количество точек ограниченно, количество векторов перемещения тоже. Стандартный подход такой: по заголовкам определяете контекст, выделяете сразу нужное количество ресурсов и держите их всё время работы, освобождаете только в конце работы.
Re: Memory manager
От: AndrewJD США  
Дата: 01.11.21 20:28
Оценка:
Здравствуйте, _sv_, Вы писали:

__>Проблема такова: В проекте обрабатывается видеопоток. Библиотека кодирования и наш код активно использует new/delete + malloc/free операции. Это дело жрёт очень много ресурсов. Всё, что могли — всё оптимизировали, но всё равно проблема стоит серьёзно. Из этого возникло желание попробовать сторонние менеджеры памяти.


Как вариант: rpmalloc, mimalloc
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: Memory manager
От: watchmaker  
Дата: 01.11.21 20:30
Оценка:
Здравствуйте, _sv_, Вы писали:

__>Собственно вопрос: какие есть библиотеки С/С++? Можно рассмотреть и коммерческие решения. Изобретать велосипед не хочется.


Стоит попробовать
Re[2]: Memory manager
От: _sv_  
Дата: 01.11.21 23:15
Оценка:
Здравствуйте, watchmaker, Вы писали:
>Стоит попробовать mimalloc tcmalloc

Здравствуйте, AndrewJD, Вы писали:
>Как вариант: rpmalloc mimalloc]mimalloc

Спасибо за наводки. Проверим будет ли лучше.

>Здравствуйте, Videoman, Вы писали:

Из видео берётся аналитика. На выходе — вероятные траектории движения объектов с учётом деталей. Как-то оценочных масс, вращений, вероятных столкновений и т.д. Модели движений не статичны и зависят от обстоятельств. Движкам приходится отслеживать то 3 объекта, то 300. Вот и вся недолга.

Вот есть люди, которые информативно и точно ответили на вопрос. Им — большое спасибо.
Отредактировано 01.11.2021 23:17 _sv_ . Предыдущая версия . Еще …
Отредактировано 01.11.2021 23:16 _sv_ . Предыдущая версия .
Re: Memory manager
От: SkyDance Земля  
Дата: 02.11.21 05:25
Оценка:
__>Проблема такова: В проекте обрабатывается видеопоток. Библиотека кодирования и наш код активно использует new/delete + malloc/free операции. Это дело жрёт очень много ресурсов. Всё, что могли — всё оптимизировали, но всё равно проблема стоит серьёзно. Из этого возникло желание попробовать сторонние менеджеры памяти.

jemalloc еще можно добавить, но в целом, это как раз хорошее применение для рукописного менеджера памяти с требуемыми свойствами. Скажем, BEAM (Erlang VM), где в силу immutability всего и вся, эта проблема стоит особенно остро, сделаны свои аллокаторы, причем разные для разных типов данных.
Re: Memory manager
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 03.11.21 23:22
Оценка:
Здравствуйте, _sv_, Вы писали:

__>Из этого возникло желание попробовать сторонние менеджеры памяти.

Можно написать свой, для начала просто предвыделяйте память под входной буфер и выходные фреймы и вместо new/delete выбирайте незанятый кусок памяти из своего пула, при освобождении — просто помечайте его как использованный. Этот наивный подход приводит к фрагментации и операциям поиска. В сетях используют такой приём, выделают достаточно большой буфер который циклически заполняется данными по мере прихода этих, собственно, данных их сети, к моменту прохода по всему буферу старые данные в нём просто устареют и их можно затирать. Этот подход простой и без извращений, но надо не допускать переключения потока на другое ядро процессора чтобы кэш был валидным. В линуксе можно прибить конкретный поток к конкретному ядру каким-то системколом, вроде.
__>Собственно вопрос: какие есть библиотеки С/С++? Можно рассмотреть и коммерческие решения. Изобретать велосипед не хочется.
Я слышал про такое https://github.com/emeryberger/Hoard, не использовал, но использовал версию собранную на подходе выше.
Ах да, гуглить custom memory allocators.
Sic luceat lux!
Re[3]: Memory manager
От: AndrewJD США  
Дата: 04.11.21 00:28
Оценка:
Здравствуйте, _sv_, Вы писали:

__>Здравствуйте, AndrewJD, Вы писали:

>>Как вариант: rpmalloc mimalloc]mimalloc
__>Спасибо за наводки. Проверим будет ли лучше.

Я бы попробовал начать с mimalloc, поскольку его можно использовать в не интрузивном режиме. Если производительность улучшится — копать дальше в этом направлении.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.