【发布时间】:2015-05-16 12:04:06
【问题描述】:
我想在一个大型数据集上运行 tbb::parallel_for 并生成一个唯一集。在 parallel_for 主体中包含一些额外的逻辑,用于确定原始数据集的每个子元素是否应包含在该集合中。结果集通常比原始数据集小得多,我宁愿不计算具有重复项的向量并在之后删除重复项,因为这会增加内存使用量。
我的第一个实现使用 tbb::concurrent_unordered_set,通过分析,我注意到 set.insert() 方法存在明显的性能瓶颈。
我尝试改进这一点是尝试使用线程本地存储来为每个线程生成一个集合,然后在最后组合这些集合以删除原子。
尽管阅读了大量文档,但我仍然不确定 tbb::combinable 或 tbb::enumerable_thread_specific 是否最适合。
这一定是一个相当常见的用例。有人可以提供示例实现或指向我可以查看的在线示例吗?
【问题讨论】:
标签: c++ multithreading unique tbb thread-local-storage