TBB 并发容器性能

tbb concurrent containers performance

本文关键字:性能 并发 TBB      更新时间:2023-10-16

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

因此,我将在阅读时使用英特尔 tbb 提供的并发容器时并行化该程序,因为我在没有它们的情况下串行计时我的算法,需要 1.4 秒才能完成,但是当我在没有任何并行性的情况下集成它们时,程序的性能是 4 秒!

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

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

请注意,您的时序差异可能来自不同的来源,例如线程过度旋转、锁定开销、错误的测量......