TBB tbb :: memory_pool & lt; tbb :: scalable_allocator & lt; char & gt; & gt; Как правильно его использовать?

У меня есть сомнения.

Для tbb :: memory_pool< tbb :: scalable_allocator> shared_memory_pool_;

если это создается в главном потоке. И затем я вызвал shared_memory_pool_.malloc (sizeof (my_class)) в рабочем потоке. Будет ли tbb выделять этот размер памяти из основной кучи, или он будет выделять ее из потока «домен», чтобы избежать конфликтов блокировки, вызванных нормальной функцией malloc ()?

2

Решение

tbb::memory_pool основан на тех же внутренних органах, что и tbb::scalable_allocator, Итак, как только пул памяти захватывает память изначально (в вашем случае, как вы указали, из tbb::scalable_allocator также), он будет использовать те же механизмы для распределения и повторного использования в потоках. То есть он масштабируемый и максимально избегает глобальной блокировки. Хотя, поскольку память все еще является общим ресурсом, некоторая синхронизация потоков в любом случае неизбежна. В частности, я бы ожидал большего количества конфликтов для начальных запросов памяти, так как кэши для каждого потока еще не прогрелись; а также scalable_allocator пытается сохранить баланс между масштабируемостью и потреблением памяти, таким образом, он не сойдет с ума от кэшей для каждого потока, перераспределяющих память между потоками, что также является своего рода синхронизацией потоков (хотя и более масштабируемой, чем блокировка).

Что касается [очень] начального выделения памяти с помощью scalable_allocator, оно проходит через mmap или же VirtualAlloc для достаточно больших кусков памяти, а не через malloc.

2

Другие решения

Вот Вот несколько полезных описаний о том, как правильно реализовать пул памяти. Обратите внимание, что в соответствии с этим:

В нашей реализации мы постарались предоставить более общую функциональность
потокобезопасным и масштабируемым способом. Для этой цели реализация
пулов памяти основан на масштабируемом распределителе памяти TBB и т.д.
имеет аналогичные свойства скорости и потребления памяти.

Надеюсь это поможет.

0

По вопросам рекламы [email protected]