tbb 并发容器性能

Posted

技术标签:

【中文标题】tbb 并发容器性能【英文标题】:tbb concurrent containers performance 【发布时间】:2012-04-15 12:27:59 【问题描述】:

我现在有这个程序正在使用向量和 unordered_map,当我构建它们时,我正在从串行文件中读取,所以实际上我无法并行化构建过程,但是当我在程序中进一步使用它们时,我可以从它们中读取并行“注意:我不会修改这些容器上的任何值”

所以我打算在阅读使用 intel tbb 提供的并发容器是否有用时并行化这个程序。因为我已经在没有它们的情况下对我的算法进行串行计时,并且需要 1.4 秒才能完成,但是当我在没有任何并行性的情况下集成它们时,程序的性能是 4 秒!

谁能解释为什么会出现这种退化,我应该使用它们吗,因为它们在某种程度上是线程安全的?

【问题讨论】:

【参考方案1】:

如果您不更改容器和值,则可以通过使用串行版本来避免额外的“并发”开销。请注意地图,不要使用operator[],因为如果您要查找的值不在地图中,这可能会更改容器。

请注意,您的时间差异可能来自不同的来源,例如过多的线程生成、锁定开销、错误的测量...

【讨论】:

使用迭代器和 .find(hash) 改变无序映射 @atm no,如果未找到该值,则返回“on-past-the-end”.end 迭代器。

以上是关于tbb 并发容器性能的主要内容,如果未能解决你的问题,请参考以下文章

Java并发编程:并发容器之ConcurrentHashMap

并发容器之ConcurrentHashMap

Day839.并发容器-Java 并发编程实战

Day839.并发容器-Java 并发编程实战

Day792.并发容器的使用 -Java 性能调优实战

Day298.并发容器&并发队列 -Juc