共享内存中的 tbb concurent_hash_map

Posted

技术标签:

【中文标题】共享内存中的 tbb concurent_hash_map【英文标题】:tbb concurent_hash_map in shared memory 【发布时间】:2014-03-19 12:41:16 【问题描述】:

我正在使用共享内存在进程之间传递数据。 它们使用精确的内存映射,因此它们可以使用相同的虚拟地址。

我想通过共享内存在进程之间使用 tbb 并发哈希映射 我认为我需要使用可扩展的分配器并使其使用共享内存,如何购买? 我将只使用简单类型(int、float、固定数组大小)而不使用指针。

我在 linux 上工作,在 c++ 中,如果需要,我可以使用 boost。

【问题讨论】:

【参考方案1】:

通常,C++ 容器可以通过分配器类型进行专门化,该分配器类型将覆盖用于分配元素和内部结构的默认分配器。 要在 IPC shmem 区域中使用容器,它必须完全分配在该给定区域内。 不幸的是,当前 tbb::concurrent_hash_map 的实现直接分配了一些内部结构,绕过了用户指定的分配器。

因此,目前无法在 shmem 区域内使用 tbb::concurrent_hash_map(不过,只需对其代码进行少量修改即可)。

对于可扩展分配器,它可以使用“Scalable Memory Pools”社区预览功能在给定区域分配内存,但不能以这种方式替代标准分配器。

【讨论】:

感谢@Anton,请准确说明您在哪里看到“tbb::concurrent_hash_map 的当前实现直接分配一些内部结构,绕过用户指定的分配器” @davidbobo,请搜索'cache_aligned_allocator',它用于方法enable_segment()和clear()

以上是关于共享内存中的 tbb concurent_hash_map的主要内容,如果未能解决你的问题,请参考以下文章

TBB 线程池意外增加

编译并运行 OpenMPI 程序

与 tbb::task_arena 和 tbb::task_scheduler_observer 链接时出错

tbb简介与使用

tbb::parallel_for 实例

TBB的学习