我有这个程序正在使用vector和unordered_map现在我正在构建它们我正在读取一个串行文件所以实际上我不能并行化构建过程但是当我在我的程序中进一步使用它时我可以从它们读取并行“注意:我不修改这些容器上的任何值”
因此,当读取使用intel tbb提供的并发容器时,我将并行化该程序。因为我已经将我的算法在没有它们的情况下连续计时,并且需要1.4秒才能完成,但是当我在没有任何并行性的情况下集成它们时,程序的性能是4秒!
任何人都可以解释为什么会出现这种退化,我应该使用它们,因为它们有点线程安全吗?
答案 0 :(得分:1)
如果您不更改容器和值,则可以通过使用串行版本来避免额外的“并发”开销。小心地图,不要使用operator[]
,因为如果您正在查找的值不在地图中,则可以更改容器。
请注意,您的时序差异可能来自不同的来源,例如过度的线程吞吐,锁定开销,错误的测量...