gpt4 book ai didi

c++ - 并发 std::vector 写入的效率

转载 作者:行者123 更新时间:2023-11-30 03:34:52 26 4
gpt4 key购买 nike

根据 http://en.cppreference.com/w/cpp/container#Thread_safety , 写入一个 std::vector 的不同元素是安全的, 来自不同的线程。

但是如果value_type小于 CPU 的字长(或 hardware destructive interference size ),如 ( std::vector<char> ),这是否意味着访问元素的效率低于没有线程安全要求时的效率?

例如,读/写访问是否意味着内存栅栏/原子指令?

最佳答案

是的,它是安全的,标准要求它是安全的。但是,由于所谓的“虚假共享”,它可能效率低下。

当单个线程更新属于同一缓存行的相邻内存时,就会发生错误共享。如果这些线程恰好在两个不同的内核上执行,它们最终会使两个 CPU 上的缓存行无效并触发昂贵的缓存更新。

代码编写者应该做出合理的努力,通过尝试将接近的索引分配给同一线程来降低错误共享的可能性。

并回答我刚刚在原始帖子中看到的问题 - 不,此类写入不会有编译器生成的栅栏。

关于c++ - 并发 std::vector 写入的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com