当线程只写入同一个缓存块时,是否也会发生错误共享?

时间:2015-01-28 18:10:40

标签: multithreading parallel-processing multiprocessing false-sharing

如果我们有两个内核可以读取和写入同一缓存块中的不同内存位置,则会强制两个内核一次又一次地重新加载该缓存块,尽管逻辑上不需要。这就是我们所谓的虚假分享。

但是,如果内核从不从该缓存块中读取,而只是写入,该怎么办?想象一下,两个内核只是在同一个高速缓存块中设置了一些位,但它们不必从块中读取,因为它们设置的位信息仅在程序的后续阶段需要。

只有当核心在同一个块上进行读写时才会发生错误共享,或者如果两者都只写入它就会发生错误共享?

1 个答案:

答案 0 :(得分:3)

是的,它也会发生。为了写入高速缓存行中的字节子集,必须首先读取该行,然后进行修改,然后写回。逻辑写通常是物理读写。

CPU 可以以不同方式执行此操作,但我不知道有任何CPU执行此操作。