c++ 为什么清除tbb::concurrent_unordered_map比清除std::unordered_map慢得多?

izkcnapc  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(363)

我有一个tbb::concurrent_unordered_map<size_t, std::vector<size_t>>-或者,一个std::unordered_map<size_t, std::vector<size_t>>
在TBB的情况下,通过调用.clear()或在析构函数运行时清除Map需要更长的时间(根据我的测量,至少是5倍)。我看不出任何并发性问题是导致这种速度下降的原因,因为.clear()在TBB文档中被特别称为“并发使用不安全”。
为什么TBB的清算速度如此之慢?(我能做些什么吗?)

vdgimpew

vdgimpew1#

std::unordered_map默认不是线程安全的。您遇到的速度降低可能是由于维护并发访问所需的数据的开销。
您可以尝试使用parallel_for_each算法来迭代Map并并行清除每个元素。在最后,你可以使用.clear()来清除Map。这种方法可能比直接在concurrent_unordered_map上调用.clear()更快。请参阅Pro TBB教科书了解更多信息。
您是否已查看最新的英特尔oneTBB 2021.9?你也可以使用tbb::concurrent_hash_map容器,它支持并发插入、查找和擦除。

相关问题