目前,大多数高端嵌入式SoC都属于异质芯片在单纯地提高时钟速度的方法退出主流之后,保持这种单线程的编程抽象,迫使通用的单处理器设计工程师采用双处理器或四处理器的一致性系统(coherent system)。具有丰富软件的高性能嵌入式系统也是如此,只是情况稍有不同。
这些SoC中的处理器通过非一致性(noncoherent)共享内存,以某种形式的消息传递进行通讯。在第三代蜂窝电话中,通过双端口SRAM和中断进行通讯的经典RISC/DSP组合,就是这些简单机制的一个很好例子。 未来的高性能SoC将是处理器的分层和异质系统,即在层次结构中嵌入由同质多处理器组成的一致性处理器集群。这种转变已经出现在一个特定的高性能嵌入式市场中,即以一致性网络多处理器实现的联网市场。
目前,对于未来嵌入式芯片多处理器(CMP)的准确特性仍存在争议。CMP是属于异质型,还是用同质处理器以分层方式实现的异质型还不明确。但对于许多CMP而言,使共享内存保持一致性至关重要。
定义和基本概念
对于一个带有缓存的多内核共享内存系统而言,如果由任何处理器发布的任何“载入” *** 作所返回的值总是在该内存位置最新“存储”的值,则认为该系统是缓存一致的。为了明确术语“最新存储 (latest Store) ”的定义,我们需要探讨一下内存模型。
借助于顺序一致性(SC)模型这个常用的内存模型进行阐述。在SC系统中,可以根据一个并行程序的任何一次执行的结果,对在一个位置完成的所有 *** 作(主要是“载入”和“存储”)建立全局串行顺序。因此,“一致性”意味着:(1)每个处理器发出的“载入”和“存储” *** 作顺序,以同样的方式出现在该系统的全局串行顺序中,该处理器按照全局串行顺序把这些 *** 作传给内存系统;(2)在该系统中,处理器每次所读取的 *** 作所返回的值,就是在全局串行顺序中上次写入到该位置的值。
因此,术语“全局串行顺序”是由系统实现的内存一致性模型(简称内存模型)的结果,在非正式场合中以“强”和“弱”来定义。内存模型与单处理器的指令集架构(ISA)有关,ISA定义了编译器和硬件之间的 *** 作约定。
ISA为多处理器系统(一般称为多线程系统)定义了程序员和内存系统之间的 *** 作约定。因此,Java等多线程语言也明确给出了内存模型。在本文,大多数的“多处理”都可以用“多线程”代替。
顺序一致性(SC)、总体存储顺序(TSO)和处理器一致性(PC)是一些常用的机器级内存模型(从强到弱)。模型更强,意味着在并行内存系统的实现器中加入了更多约束,从而简化了由并行中间件或系统库写入器执行的任务。
但从单处理器的角度来看,SC却是内存一致性最弱的方式,因为它只提供合理的内存系统所必需的约束,而不再对内存 *** 作进行限制。简言之,强的内存模型确保并行内存系统在“读出最新存储 *** 作返回的值”的约束基础上,还提供其它约束,从而更有利于程序员编程。这些附加的约束通常可用于在线程或处理器之间形成高效的同步机制。
为实现一致性,系统必须具备几个基本特点。首先,在系统中的某一点处,向某个特定的内存位置写入信息的 *** 作必须是串行化的。请注意,串行化是一个逻辑概念。对于一些探索性的高性能实现,串行化只是对于在提交(commit)阶段应如何返回事务给出了一个指导性方针,它类似于“无序”处理器,这种处理器保持一个临时状态和一个由提交点(commit point)分隔的“架构状态”。
一致性系统的另一个特点是“写入”传播,它表示“写入” *** 作需要最终传播到需要这个新值的所有代理程序(agent)。第三个重要特点是“写入”原子性,它是内存模型而不是一致性的结果,它表示在所有处理器被串行化后,需要将写入 *** 作全部传播至系统中的所有处理器。
这里将只讨论一致性协议的常见分类方法。这种分类方式基于系统中缓存的稳定状态,常见的状态被称为“MOESI”,即修改、自有、互斥且干净、共享且干净,以及无效。这些术语的意义是自我解释的,详细解释很容易在教科书中找到。
基于状态的协议分类主要区分协议是基于“更新”还是基于“无效(invalidate)”。在基于“无效”的一致性协议中,系统中的一条缓存线仅有一个所有者,而在基于更新的系统中,所有缓存线的副本都是根据“写入” *** 作来更新的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)