0

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

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

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

4

1 回答 1

1

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

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

于 2012-04-15T12:38:53.740 回答