错误的共享会导致错误的结果吗?
Can false sharing lead to wrong results?
据我所知,当两个CPU内核访问单个内存块的不同部分时,就会发生错误共享。在这种情况下,每个内核中的 L1 缓存包含不同的值。
虚假分享有什么影响?商用 CPU 是否总是检测到错误共享?它会导致争用条件(在内存中保留不同的缓存版本)吗?
当一个内核修改某些数据,而另一个内核读取恰好位于同一缓存行中的一些不相关数据时,就会发生错误共享。修改强制第二个内核重新加载整个缓存行,即使它使用的数据保持不变。
这不会导致任何不正确的行为,除非缓存严重损坏。但它可能会对性能产生很大的影响,因为缓存的数据是不必要地从更高级别的缓存中获取的。
相关文章:
- 如何修复循环中的错误产生的错误结果?
- 添加可变参数函数的错误结果
- 使用特征 3 线性系统求解器的错误结果
- 按位包含 OR 的错误结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- 视觉工作室的错误结果
- 将C#struct传递给C 不受管理的DLL返回错误结果
- 最长的常见子字错误结果
- 华氏度到摄氏度的错误结果
- UE4中简单坐标变换的错误结果
- 记忆错误结果的说明[编译器行为]
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 在模板函数中调用std::for_each时出现错误结果
- 使用copy和back_inserter将矢量附加到其自身时出现错误结果
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 来自 c++ 代码的错误结果
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?