Войти
ПрограммированиеФорумОбщее

Мультипоточное управление памятью

Страницы: 1 2 Следующая »
#0
16:41, 1 дек. 2019

Есть аллокатор, которому подконтролен некий кусок памяти. Объем этой памяти соизмерим с размером L3 кеша. Функции alloc(size, alignment) и dealloc(ptr) вызываются из разных потоков, в том числе и так, что alloc() может быть вызвана в одном потоке, а dealloc() в другом. size может быть как большим - 99% от всей памяти аллокатора, так и маленьким - несколько байт. Аллокации происходят очень часто. Существует ли реализация, при которой работа аллокатора будет быстрее, чем просто вызовы malloc()/free() ?


#1
16:47, 1 дек. 2019

не надо в разных потоках alloc/dealloc

#2
16:54, 1 дек. 2019

BingoBongo
Что за бред? Если есть аллокатор с ограниченным объемом памяти, для чего вызываются malloc/free?

#3
17:14, 1 дек. 2019

Для маленьких размеров давно придумана техника быстрой и без фрагментации аллокации. У каждого потока есть куски памяти (назовем их регионы) для разных размеров аллокаций (пусть будут блоки), благодаря чему не требуется синхронизация потоков. У региона есть хедер с разной информацией, в том числе какой поток сейчас владеет этим регионом. При освобождении блока, если регион не принадлежит текущему потоку, то он помещается в хедер в список удаленно освобожденных блоков (на атомиках легко делается). Вроде этой технике придумали какое-то название, не помню. Для больших аллокаций можно использовать malloc/free.

https://github.com/SergeyMakeev/smmalloc

#4
17:21, 1 дек. 2019

innuendo
> не надо в разных потоках alloc/dealloc
Это не обсуждается )

maks242
> для чего вызываются malloc/free?
Для выделения и удаления памяти

#5
17:22, 1 дек. 2019

BingoBongo
> Это не обсуждается )

можно узнать для чего сие нужно ?

#6
17:24, 1 дек. 2019

njo
> на атомиках легко делается
Я боюсь, при частых аллокациях атомики напрочь убью производительность. Это не так?

#7
17:26, 1 дек. 2019

BingoBongo
> Я боюсь, при частых аллокациях атомики напрочь убью производительность. Это не
> так?
Там только для деаллокации при условии что делаешь это из другого потока.

#8
17:28, 1 дек. 2019

BingoBongo
> Для выделения и удаления памяти
Зачем?

#9
17:48, 1 дек. 2019

BingoBongo
> Я боюсь, при частых аллокациях атомики напрочь убью производительность.
Смотря как их испоьлховать, если делать спинлоки, то это ни чем не лучше мютексов, а локфри алгоритмы намного быстрее.
Ну и просто чтение атомика очень быстрое, я когда-то давно замерял на ПК и андроиде 100к чтений в сек никак не влияли на производительность программы.

#10
17:50, 1 дек. 2019

innuendo
> можно узнать для чего сие нужно ?
Если бы существовал мультипоточный аллокатор, более быстрый чем malloc/free или еще лучше: не сильно уступающий однопоточному аллокатору, то можно было бы писать более простой код для некоторых задач, выполняемых в тредпуле.

njo
> Там только для деаллокации при условии что делаешь это из другого потока.
Это уже дает надежду

maks242
> > Для выделения и удаления памяти
> Зачем?
Вопрос философский

#11
18:08, 1 дек. 2019

BingoBongo
> Если бы существовал мультипоточный аллока

это всё понятно - что за задача конкретно ?

#12
(Правка: 18:15) 18:14, 1 дек. 2019

innuendo
> что за задача конкретно ?
Препроцессинг и парсинг glsl и скорее всего загрузка и кеширование ресурсов

#13
18:20, 1 дек. 2019

BingoBongo
> Препроцессинг и парсинг glsl и скорее всего загрузка и кеширование ресурсов

просто нету слов

#14
18:28, 1 дек. 2019

innuendo
> просто нету слов
неужели дождались? :)

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее