c++ - openmp读取数据时会出现虚假共享吗?

标签 c++ openmp false-sharing

如果我有一个带有 OpenMP 并行化的 C++ 程序,其中不同的线程不断使用一些小的共享数组只是为了从中读取数据,在这种情况下是否会发生虚假共享?换句话说,错误共享仅与内存写入操作有关,还是也可能与内存读取操作有关。

最佳答案

通常使用的缓存一致性协议(protocol),例如MESI (已修改、独占、共享、无效),具有称为“共享”的缓存行的特定状态。如果缓存行被多个处理器读取,则缓存行处于此状态。然后每个处理器都有一个缓存行的拷贝,并且可以安全地从中读取而不会出现错误共享。在写入时,通知所有处理器使缓存行无效,这是错误共享的主要原因

关于c++ - openmp读取数据时会出现虚假共享吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44944839/

相关文章:

c - 使用数组避免 OpenMP 中的错误共享

c++ - 如何优化 N 个滤波器组 vector ?

c - 在MKL中调用cblas_sgemm时如何避免fork-join?

gcc - 具有新 ecores/pcores 的 OpenMP

multithreading - 您使用哪些并行编程 API?

c - Hogwild 中的虚假分享!算法

c# - 并行框架和避免虚假共享

c++ - 注意事项 "protected versus private"

c++ - 按键多次扫描

c++ - 如果我使用 fanotify 控制对文件的访问的正在运行的守护进程重新启动或关闭,系统会卡住