Ant*_*n.P 5 multithreading caching operating-system
我遇到了一个关于线程不要访问相同缓存行的建议,我真的不明白为什么,也在对该主题进行搜索时,我遇到了这个问题: 多线程和 CPU 缓存 ,其中一个答案建议:
您只想避免两个线程同时尝试访问位于同一缓存行上的数据
在我看来,缓存存储内存页面以便从进程快速访问,正如它在这里所说:http : //en.wikipedia.org/wiki/Thread_%28computing%29#How_threads_differ_from_processes
线程共享它们的地址空间
两个线程访问相同的缓存行应该不成问题,因为如果页面在缓存中并且尝试访问内存的线程将获得缓存命中,而不管其他线程如何。
我听说过关于避免线程在几个不同的场合访问相同的缓存行的争论,所以这不是一个神话。我在这里缺少什么?
在大多数(可能所有但我没有详尽的硬件知识)多核 CPU 中,当一个内核尝试写入相应的内存时,缓存将锁定当前访问的行。因此,尝试访问相同缓存行的其他内核将处于等待状态。
你可以在线程之间共享相同的数据,只要它是只读的(或不经常更新),但是如果你继续写入它,隐藏访问序列化将产生相当于在同一个核心上运行所有线程的性能(实际上有点糟糕,因为缓存锁定延迟)。
Why not推荐谈论读写器问题的速度优化在多核 CPU 上运行时
\n在这种情况下,如果可以更快地避免cache lock(LOCK# signal)并抑制cache line bouncing需要维持cache coherence通过在不同的高速缓存行上运行读取器/写入器来维护。
你是对的,这不是一个必须避免的问题,因为有些东西会失败。这只是一项建议的速度优化。
\n考虑内部处理器缓存是一种极低级的速度优化案例。对于大多数典型的编程任务,速度瓶颈位于硬件电路之外并遵循英特尔多线程应用程序开发指南就足够了
\n也可以看看
\n“缓存行”的一些插图可在Intel\xc2\xae 64 和 IA-32 架构软件开发人员\xe2\x80\x99s 手册
\n\n\n\n
\n
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |