2012-04-15 68 views
0

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

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

任何人都可以解释为什么这种退化,我应该使用它们,因为它们有点线程安全吗?

回答

1

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

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

+0

不使用iterator和.find(散)改变无序地图 – aTm 2012-04-15 12:44:41

+0

@atm没有,如果该值没有找到“on-past-the-end”'.end'迭代器被返回。真的非常感谢 – inf 2012-04-15 12:46:37

+0

ahaa – aTm 2012-04-15 12:47:37