TBB 并发容器性能
tbb concurrent containers performance
我有一个使用矢量unordered_map的程序,现在当我构建它们时,我正在从串行文件中读取,因此实际上我无法并行化构建过程,但是当我在我的程序中进一步使用它们时,我可以并行读取它们"注意:我不修改这些容器上的任何值"
因此,我将在阅读时使用英特尔 tbb 提供的并发容器时并行化该程序,因为我在没有它们的情况下串行计时我的算法,需要 1.4 秒才能完成,但是当我在没有任何并行性的情况下集成它们时,程序的性能是 4 秒!
谁能解释为什么会退化,我应该使用它们,因为它们在某种程度上是线程安全的?
如果不更改容器和值,则可以通过使用串行版本来避免额外的"并发"开销。小心地图,不要使用operator[]
因为如果您要查找的值不在地图中,这可能会更改容器。
请注意,您的时序差异可能来自不同的来源,例如线程过度旋转、锁定开销、错误的测量......
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 控制允许动态运行c++的并发操作数
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 节俭并发:未解决的外部问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 用于在并发环境中访问 MMIO 的软件模式
- 并发::并行端口开销和性能命中率(经验法则)
- TBB 并发容器性能