面向多核并行程序的确定性懒惰释放一致性实现方法

文档序号:9597156阅读:667来源:国知局
面向多核并行程序的确定性懒惰释放一致性实现方法
【技术领域】
[0001]本发明涉及多核体系结构的确定性并行技术,具体涉及一种面向多核并行程序的确定性懒惰释放一致性实现方法。
【背景技术】
[0002]确定性懒惰释放一致性即DLRC(Deterministic Lazy-Release Consistency)内存一致性。多线程程序符合DLRC内存一致性是指:任何线程T1对于内存的修改可以被其他线程T2看到当且仅当这个内存修改依据happens-before时序关系发生在T2当前执行的指令之前。其中,Happens-before时序关系是并行程序中的一种事件时序关系,A — B表示事件A发生在事件B之前。在并行程序执行中,任何两条指令A和B如果要有A — B,必须满足以下三个条件中的任何一个:(1)A和B是发生在同一个线程中,且A在B之前执行。
(2)A和B是两个不同线程中的同步语句(例如unlock和lock),它们执行了关于同一个共享对象的同步操作,且B的开始必须发生在A的结束之后。(3)存在一个指令序列C1,C2…Cn,使得A — Cl, C1C2,…,Cn — B。Happens-before关系是数学上的一种偏序关系(partialorder)。集合论中,如果一个集合中的任意两个元素a和b都能比较大小,那么这个集合中的元素就具有全序关系(Totally ordered),否则,集合中的元素就具有偏序关系(partialorder),也称半序关系。对于具有偏序关系的集合A,如果集合中的元素a和b,有a>b,则a是b的上界(Upper bound);如果a是b的上界,且对于任意b的上界x都有a〈 = x,则a是b的上确界(Least upper bound);如果a〈b,贝丨J a是b的下界(Lower bound);如果a是b的下界,且对于任意b的下界x都有a> = x,则a是b的下确界(Greatest lower bound);a是集合A中的元素,集合A中不存在其他元素b,有a〈b,则a是集合A的极大元(Maximalelement) ;a是集合A中的元素,若集合A中不存在其他元素b,有b〈a,则a是集合A的极小元(Minimal element)。
[0003]卢凯等人的《EfficientDeterministic Multithreading Without GlobalBarriers)) (PPoPP 2014)公开的RFDet方法在软件层面上实现了 DLRC内存一致性模型,该方法首先使用页面保护技术隔离线程的内存空间,通过copy-onirite技术记录线程对于本地内存的修改,当发生线程之间的同步时,利用内存修改传播技术使本地内存修改严重线程同步所形成的happens-before关系边从一个线程传递到另一个线程,从而实现内存修改可见性的延迟程度符合DLRC内存一致性模型的定义。DLRC内存一致性模型的时空开销主要来自于内存修改传播算法,即在线程同步引起happens-before时序关系时执行内存修改传播,使一个线程的内存修改沿着happens-before边传播到另一个线程。这个算法需要为共享变量在每个线程中创建副本,需要专门的缓冲区来存放未传播的内存修改,并且导致了大量的内存读写,造成较大的内存空间开销和一定的性能开销。理论上讲,DLRC内存一致性模型的内存空间开销为S*N+M。其中S为程序的共享内存大小,N为线程数量,而Μ为运行时系统用于存放未内存修改所占用的空间。而且,该方法的内存页面版本管理采用的是整数,修改一次版本号就增加1,版本之间是全序关系。在并行程序中,事件之间的关系并不是全序关系而是半序关系,这是因为完全并行的事件之间是不存在时序关系的,因此全序关系的版本号在反映并行程序中事件的半序关系时会出现偏颇,导致内存修改传播技术的访存数量增加。

【发明内容】

[0004]本发明要解决的技术问题:针对现有技术的上述问题,提供一种能够解决采用内存修改传播算法在空间上和时间上的开销问题,缩小内存空间使用,减少内存读写次数的面向多核并行程序的确定性懒惰释放一致性实现方法。
[0005]为了解决上述技术问题,本发明采用的技术方案为:
[0006]—种面向多核并行程序的确定性懒惰释放一致性实现方法,步骤包括:
[0007]1)在多核并行程序初始化时为多核并行程序的各个线程分配独立的地址空间以隔离线程的地址空间,将多核并行程序进程的虚地址空间划分成页面统一管理,每一个页面都具有一个初始版本,且将多核并行程序进程的每个线程通过页表项映射至指定页面的一个版本,使得每个线程在任一时刻只能看到指定页面的一个版本;同时,为多核并行程序的每个线程设置初始向量版本号并维护一个向量时钟,利用多核并行程序的同步语句将多核并行程序的执行流划分为执行切片,使得每一个执行切片都具有唯一的向量时钟值;
[0008]2)在多核并行程序运行后,如果在执行切片中线程第一次修改页面或者线程同步时导致版本合并时,针对线程访问的页面生成新的向量版本;在执行切片开始时,为线程选择符合DLRC内存一致性的页面向量版本。
[0009]优选地,所述步骤2)中针对线程访问的页面生成新的向量版本的详细步骤包括:
[0010]S1)首先判断触发针对线程访问的页面生成新版本的条件,如果条件为在执行切片中线程第一次修改页面,则通过copy-on-write技术针对线程访问的页面生成新版本,基于该执行切片的向量时钟生成新版本的向量版本号,并修改页表将该页面对应的虚地址指向新版本的向量版本号,退出;如果条件为在线程同步时导致版本合并,则跳转执行步骤S2);
[0011]S2)首先找到需要同步的各个线程访问页面当前版本的共同前驱版本,分别计算各个线程访问页面当前版本和共同前驱版本之间的差别,将这些差别分别合并到共同前驱版本生成新版本,基于该执行切片的向量时钟生成新版本的向量版本号,并修改页表将该页面对应的虚地址指向新版本的向量版本号。
[0012]优选地,所述步骤2)中为线程选择符合DLRC内存一致性的页面向量版本时,针对当前执行切片S,从访问的页面P的所有版本PV1?PVn中选择S当前向量时钟的下确界版本PVk,所述下确界版本PVk满足以下条件:(1)执行切片S的向量时钟大于或等于PVk的版本号;(2)不存在向量时钟大于下确界版本PVk的向量时钟的版本PVx。
[0013]优选地,所述步骤1)中的向量时钟的值用形如<xl, x2, x3,…,xn>的向量形式描述,所述向量时钟中向量元素的个数为多核并行程序的线程数量,且所述向量时钟中第η个线程Τη对应于向量时钟的第η个元素χη。
[0014]本发明面向多核并行程序的确定性懒惰释放一致性实现方法具有下述优点:本发明为每个线程分配独立的地址空间,隔离线程的地址空间,为每个线程维护一个向量时钟,利用同步语句将程序的执行流执行切片,每个执行切片拥有唯一的一个向量时钟值,而且与现有技术相比,本发明在多核并行程序初始化时为多核并行程序的各个线程分配独立的地址空间以隔离线程的地址空间,将多核并行程序进程的虚地址空间划分成页面统一管理,每一个页面都具有一个初始版本,在多核并行程序运行后,如果在执行切片中线程第一次修改页面或者线程同步时导致版本合并时,针对线程访问的页面生成新的向量版本;在执行切片开始时,为线程选择符合DLRC内存一致性的页面向量版本,在页面统一管理的基础上,实现了向量版本技术在线程同步时对于内存修改的处理,由于本发明采用页面的向量版本技术来替代内存修改传播算法,能够解决采用内存修改传播算法在空间上和时间上的开销问题,缩小内存空间使用,减少内存读写次数。
【附图说明】
[0015]图1为本发明实施例方法的基本流程示意图。
[0016]图2为本发明实施例中的内存空间布局示意图。
[0017]图3为本发明实施例中的执行切片示意图。
[0018]图4为现有技术普通的版本的全序关系示意图。
[0019]图5为本发明实施例中向量版本的偏序关系示意图。
【具体实施方式】
[0020]如图1所示,本实施例面向多核并行程序的确定性懒惰释放一致性实现方法的步骤包括:
[0021]1)在多核并行程序初始化时为多核并行程序的各个线程分配独立的地址空间以隔离线程的地址空间,将多核并行程序进程的虚地址空间划分成页面统一管理,每一个页面都具有一个初始版本,且将多核并行程序进程的每个线程通过页表项映射至指定页面的一个版本,使得每个线程在任一时刻只能看到指定页面的一个版本;同时,为多核并行程序的每个线程设置初始向量版本号并维护一个向量时钟,利用多核并行程序的同步语句将多核并行程序的执行流划分为执行切片,使得每一个执行切片都具有唯一的向量时钟值;
[0022]2)在多核并行程序运行后,如果在执行切片中线程第一次修改页面或者线程同步时导致版本合并时,针对线程访问的页面生成新的向量版本;在执行切片开始时,为线程选择符合DLRC内存一致性的页面向量版本。
[0023]本实施例中,将多核并行程序进程的虚地址空间划分成页面统一管理。如图2所示,每个页面P维护多个版本{PV1,PV2...PVn},同一个页面的不同版本之间具有偏序关系(Partial order),采用向量版本描述其时序关系。所有页面的版本由运行时系统统一管理,每个线程在任一时刻只能看到一个页面的一个版本。本实施例通过硬件的页面映射机制为每个线程选择可以看到的页面版本,从而确保其所看到的内存修改延迟符合DLRC内存一致性。例如,如果在某一时刻,线程T1根据DLRC内存一致性模型只能看到页面P2的一个版本P2V〈1,0>,那么本实施例中就修改线程T1的页表项,使其与页面P1对应的虚地址映射到P2V〈1,0>所对应的物理内存上。对于页面P的多个版本{PV1,PV2...PVn}来说,线程T能看到哪个版本由当前线程T的向量时钟和这些版本的向量时钟所决定。要符合DLRC内存一致性模型,必须保证页面版本PVk的向量时钟是线程T当前向量时钟的下确界(Greatest Lower bound)。
[0024]本实施例中
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1