如果我有一个带有 OpenMP 并行化的 C++ 程序,其中不同的线程不断使用一些小的共享数组只是为了从中读取数据,在这种情况下是否会发生虚假共享?换句话说,错误共享仅与内存写入操作有关,还是也可能与内存读取操作有关。
最佳答案
通常使用的缓存一致性协议(protocol),例如MESI (已修改、独占、共享、无效),具有称为“共享”的缓存行的特定状态。如果缓存行被多个处理器读取,则缓存行处于此状态。然后每个处理器都有一个缓存行的拷贝,并且可以安全地从中读取而不会出现错误共享。在写入时,通知所有处理器使缓存行无效,这是错误共享的主要原因
关于c++ - openmp读取数据时会出现虚假共享吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44944839/