今天我和我的教授在并行编程课上对什么是“虚假共享”有了不同的理解。我的教授说的没有道理,所以我立即指出。她认为“虚假分享”会导致节目结果出现错误。
我说过,当不同的内存地址分配给同一个缓存行时,会发生“错误共享”,将数据写入其中一个会导致另一个被踢出缓存。如果处理器在两个虚假共享地址之间来回写入,它们都不能留在缓存中,因此所有操作都会导致对DRAM的访问。
到目前为止,这是我的看法。事实上,我也不确定我所说的......如果我有误解,请指出。
所以有一些问题。缓存假定为 64 字节对齐,4 路组关联。
- 两个超过 64 字节的地址是否有可能是“虚假共享”?
- 单线程程序是否可能遇到“错误共享”问题?
- 重现“虚假共享”的最佳代码示例是什么?
- 一般来说,避免程序员“虚假分享”应该注意什么?