2012-04-15 65 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