面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多核體系結(jié)構(gòu)的確定性并行技術(shù),具體涉及一種面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法。
【背景技術(shù)】
[0002]確定性懶惰釋放一致性即DLRC(Deterministic Lazy-Release Consistency)內(nèi)存一致性。多線程程序符合DLRC內(nèi)存一致性是指:任何線程T1對于內(nèi)存的修改可以被其他線程T2看到當(dāng)且僅當(dāng)這個內(nèi)存修改依據(jù)happens-before時序關(guān)系發(fā)生在T2當(dāng)前執(zhí)行的指令之前。其中,Happens-before時序關(guān)系是并行程序中的一種事件時序關(guān)系,A — B表示事件A發(fā)生在事件B之前。在并行程序執(zhí)行中,任何兩條指令A(yù)和B如果要有A — B,必須滿足以下三個條件中的任何一個:(1)A和B是發(fā)生在同一個線程中,且A在B之前執(zhí)行。
(2)A和B是兩個不同線程中的同步語句(例如unlock和lock),它們執(zhí)行了關(guān)于同一個共享對象的同步操作,且B的開始必須發(fā)生在A的結(jié)束之后。(3)存在一個指令序列C1,C2…Cn,使得A — Cl, C1C2,…,Cn — B。Happens-before關(guān)系是數(shù)學(xué)上的一種偏序關(guān)系(partialorder)。集合論中,如果一個集合中的任意兩個元素a和b都能比較大小,那么這個集合中的元素就具有全序關(guān)系(Totally ordered),否則,集合中的元素就具有偏序關(guān)系(partialorder),也稱半序關(guān)系。對于具有偏序關(guān)系的集合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方法在軟件層面上實現(xiàn)了 DLRC內(nèi)存一致性模型,該方法首先使用頁面保護技術(shù)隔離線程的內(nèi)存空間,通過copy-onirite技術(shù)記錄線程對于本地內(nèi)存的修改,當(dāng)發(fā)生線程之間的同步時,利用內(nèi)存修改傳播技術(shù)使本地內(nèi)存修改嚴重線程同步所形成的happens-before關(guān)系邊從一個線程傳遞到另一個線程,從而實現(xiàn)內(nèi)存修改可見性的延遲程度符合DLRC內(nèi)存一致性模型的定義。DLRC內(nèi)存一致性模型的時空開銷主要來自于內(nèi)存修改傳播算法,即在線程同步引起happens-before時序關(guān)系時執(zhí)行內(nèi)存修改傳播,使一個線程的內(nèi)存修改沿著happens-before邊傳播到另一個線程。這個算法需要為共享變量在每個線程中創(chuàng)建副本,需要專門的緩沖區(qū)來存放未傳播的內(nèi)存修改,并且導(dǎo)致了大量的內(nèi)存讀寫,造成較大的內(nèi)存空間開銷和一定的性能開銷。理論上講,DLRC內(nèi)存一致性模型的內(nèi)存空間開銷為S*N+M。其中S為程序的共享內(nèi)存大小,N為線程數(shù)量,而Μ為運行時系統(tǒng)用于存放未內(nèi)存修改所占用的空間。而且,該方法的內(nèi)存頁面版本管理采用的是整數(shù),修改一次版本號就增加1,版本之間是全序關(guān)系。在并行程序中,事件之間的關(guān)系并不是全序關(guān)系而是半序關(guān)系,這是因為完全并行的事件之間是不存在時序關(guān)系的,因此全序關(guān)系的版本號在反映并行程序中事件的半序關(guān)系時會出現(xiàn)偏頗,導(dǎo)致內(nèi)存修改傳播技術(shù)的訪存數(shù)量增加。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種能夠解決采用內(nèi)存修改傳播算法在空間上和時間上的開銷問題,縮小內(nèi)存空間使用,減少內(nèi)存讀寫次數(shù)的面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法。
[0005]為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
[0006]—種面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法,步驟包括:
[0007]1)在多核并行程序初始化時為多核并行程序的各個線程分配獨立的地址空間以隔離線程的地址空間,將多核并行程序進程的虛地址空間劃分成頁面統(tǒng)一管理,每一個頁面都具有一個初始版本,且將多核并行程序進程的每個線程通過頁表項映射至指定頁面的一個版本,使得每個線程在任一時刻只能看到指定頁面的一個版本;同時,為多核并行程序的每個線程設(shè)置初始向量版本號并維護一個向量時鐘,利用多核并行程序的同步語句將多核并行程序的執(zhí)行流劃分為執(zhí)行切片,使得每一個執(zhí)行切片都具有唯一的向量時鐘值;
[0008]2)在多核并行程序運行后,如果在執(zhí)行切片中線程第一次修改頁面或者線程同步時導(dǎo)致版本合并時,針對線程訪問的頁面生成新的向量版本;在執(zhí)行切片開始時,為線程選擇符合DLRC內(nèi)存一致性的頁面向量版本。
[0009]優(yōu)選地,所述步驟2)中針對線程訪問的頁面生成新的向量版本的詳細步驟包括:
[0010]S1)首先判斷觸發(fā)針對線程訪問的頁面生成新版本的條件,如果條件為在執(zhí)行切片中線程第一次修改頁面,則通過copy-on-write技術(shù)針對線程訪問的頁面生成新版本,基于該執(zhí)行切片的向量時鐘生成新版本的向量版本號,并修改頁表將該頁面對應(yīng)的虛地址指向新版本的向量版本號,退出;如果條件為在線程同步時導(dǎo)致版本合并,則跳轉(zhuǎn)執(zhí)行步驟S2);
[0011]S2)首先找到需要同步的各個線程訪問頁面當(dāng)前版本的共同前驅(qū)版本,分別計算各個線程訪問頁面當(dāng)前版本和共同前驅(qū)版本之間的差別,將這些差別分別合并到共同前驅(qū)版本生成新版本,基于該執(zhí)行切片的向量時鐘生成新版本的向量版本號,并修改頁表將該頁面對應(yīng)的虛地址指向新版本的向量版本號。
[0012]優(yōu)選地,所述步驟2)中為線程選擇符合DLRC內(nèi)存一致性的頁面向量版本時,針對當(dāng)前執(zhí)行切片S,從訪問的頁面P的所有版本PV1?PVn中選擇S當(dāng)前向量時鐘的下確界版本PVk,所述下確界版本PVk滿足以下條件:(1)執(zhí)行切片S的向量時鐘大于或等于PVk的版本號;(2)不存在向量時鐘大于下確界版本PVk的向量時鐘的版本PVx。
[0013]優(yōu)選地,所述步驟1)中的向量時鐘的值用形如<xl, x2, x3,…,xn>的向量形式描述,所述向量時鐘中向量元素的個數(shù)為多核并行程序的線程數(shù)量,且所述向量時鐘中第η個線程Τη對應(yīng)于向量時鐘的第η個元素χη。
[0014]本發(fā)明面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法具有下述優(yōu)點:本發(fā)明為每個線程分配獨立的地址空間,隔離線程的地址空間,為每個線程維護一個向量時鐘,利用同步語句將程序的執(zhí)行流執(zhí)行切片,每個執(zhí)行切片擁有唯一的一個向量時鐘值,而且與現(xiàn)有技術(shù)相比,本發(fā)明在多核并行程序初始化時為多核并行程序的各個線程分配獨立的地址空間以隔離線程的地址空間,將多核并行程序進程的虛地址空間劃分成頁面統(tǒng)一管理,每一個頁面都具有一個初始版本,在多核并行程序運行后,如果在執(zhí)行切片中線程第一次修改頁面或者線程同步時導(dǎo)致版本合并時,針對線程訪問的頁面生成新的向量版本;在執(zhí)行切片開始時,為線程選擇符合DLRC內(nèi)存一致性的頁面向量版本,在頁面統(tǒng)一管理的基礎(chǔ)上,實現(xiàn)了向量版本技術(shù)在線程同步時對于內(nèi)存修改的處理,由于本發(fā)明采用頁面的向量版本技術(shù)來替代內(nèi)存修改傳播算法,能夠解決采用內(nèi)存修改傳播算法在空間上和時間上的開銷問題,縮小內(nèi)存空間使用,減少內(nèi)存讀寫次數(shù)。
【附圖說明】
[0015]圖1為本發(fā)明實施例方法的基本流程示意圖。
[0016]圖2為本發(fā)明實施例中的內(nèi)存空間布局示意圖。
[0017]圖3為本發(fā)明實施例中的執(zhí)行切片示意圖。
[0018]圖4為現(xiàn)有技術(shù)普通的版本的全序關(guān)系示意圖。
[0019]圖5為本發(fā)明實施例中向量版本的偏序關(guān)系示意圖。
【具體實施方式】
[0020]如圖1所示,本實施例面向多核并行程序的確定性懶惰釋放一致性實現(xiàn)方法的步驟包括:
[0021]1)在多核并行程序初始化時為多核并行程序的各個線程分配獨立的地址空間以隔離線程的地址空間,將多核并行程序進程的虛地址空間劃分成頁面統(tǒng)一管理,每一個頁面都具有一個初始版本,且將多核并行程序進程的每個線程通過頁表項映射至指定頁面的一個版本,使得每個線程在任一時刻只能看到指定頁面的一個版本;同時,為多核并行程序的每個線程設(shè)置初始向量版本號并維護一個向量時鐘,利用多核并行程序的同步語句將多核并行程序的執(zhí)行流劃分為執(zhí)行切片,使得每一個執(zhí)行切片都具有唯一的向量時鐘值;
[0022]2)在多核并行程序運行后,如果在執(zhí)行切片中線程第一次修改頁面或者線程同步時導(dǎo)致版本合并時,針對線程訪問的頁面生成新的向量版本;在執(zhí)行切片開始時,為線程選擇符合DLRC內(nèi)存一致性的頁面向量版本。
[0023]本實施例中,將多核并行程序進程的虛地址空間劃分成頁面統(tǒng)一管理。如圖2所示,每個頁面P維護多個版本{PV1,PV2...PVn},同一個頁面的不同版本之間具有偏序關(guān)系(Partial order),采用向量版本描述其時序關(guān)系。所有頁面的版本由運行時系統(tǒng)統(tǒng)一管理,每個線程在任一時刻只能看到一個頁面的一個版本。本實施例通過硬件的頁面映射機制為每個線程選擇可以看到的頁面版本,從而確保其所看到的內(nèi)存修改延遲符合DLRC內(nèi)存一致性。例如,如果在某一時刻,線程T1根據(jù)DLRC內(nèi)存一致性模型只能看到頁面P2的一個版本P2V〈1,0>,那么本實施例中就修改線程T1的頁表項,使其與頁面P1對應(yīng)的虛地址映射到P2V〈1,0>所對應(yīng)的物理內(nèi)存上。對于頁面P的多個版本{PV1,PV2...PVn}來說,線程T能看到哪個版本由當(dāng)前線程T的向量時鐘和這些版本的向量時鐘所決定。要符合DLRC內(nèi)存一致性模型,必須保證頁面版本PVk的向量時鐘是線程T當(dāng)前向量時鐘的下確界(Greatest Lower bound)。
[0024]本實施例中