美文网首页
读 A Primer on Memory Consistency

读 A Primer on Memory Consistency

作者: uta | 来源:发表于2018-08-23 01:45 被阅读0次

    最近学习体系结构,对共享内存 (shared memory) 的系统的理解不佳,感觉需要专门补一补。于是找到了这本小册子:A Primer on Memory Consistency and Cache Coherence,看起来似乎很不错。陆放翁说得好:“纸上得来终觉浅,绝知此事要躬行。”虽然我是没法把这些东西实现出来了,但读书笔记还是应该做一做的。

    这本书主要介绍在共享内存的系统中的两个概念:memory consistency 和 cache coherence。这两者似乎分别被翻译为“内存一致性”和“缓存一致性”,不过这里的“一致性”却对应着两个不同的词,因此我在下文中还是老老实实写英文吧。

    Consistency

    Memory consistency 是用来定义正确性的。然而这个“正确性”本身就很难下定义。在一个单线程的任务中,我们很容易说明什么是正确的,因为指令之间是有逻辑上的顺序的;即使有 out-of-order execution,那处理器也必须保证它看起来像是顺序执行的。但是对于多线程的任务,这就很麻烦了:由于多条指令可能是并发执行的,我们在没有进一步的约束条件下是很难说只有唯一一种正确结果的,有可能很多种结果都可以被认为是对的。

    文中举了一个现实生活中的例子,我觉得用 CS 的语言讲出来大概是:有两个线程分别访问共享内存中的同一个位置,前者更新一条数据,后者要获取这个更新的数据。本来应该先写再读的,这样才能保证后者读来的是正确的;但是不知怎么的,在物理上却是后者先读了,那么它自然就读到了无效的数据,这就是一个 consistency 的问题。一个 consistency model 需要定义这种行为是不是正确的。

    Coherence

    Cache coherence 是对程序不可见的,是让 shared memory 系统上的各个 caches 合在一起看起来就像一个单核的机器上的 cache 一样的。我觉得这句话说得比较关键:

    Correct coherence ensures that a programmer cannot determine whether and where a system has caches by analyzing the results of loads and stores. This is because correct coherence ensures that the caches never enable new or different functional behavior.

    但说实话这个理由我没看懂,先放着。

    文中的现实生活的例子大概是这个意思:有一个核心,它自己的 cache 里记录了内存中某个地方的数据,然后这个数据被其他人改了,因此它自己的 cache 里的数据就无效 (stale) 了,这就需要 coherence 来进行约束。

    结语

    我觉得我对 consistency 和 coherence 的异同的理解还不是很到位,甚至有可能是错误的。慢慢往下读吧。

    相关文章

      网友评论

          本文标题:读 A Primer on Memory Consistency

          本文链接:https://www.haomeiwen.com/subject/eowuiftx.html