基于多線程并行的完整性度量散列算法優(yōu)化方法
【專利說明】
(-)、技術(shù)領(lǐng)域:
[0001]本發(fā)明涉及一種完整性度量散列算法優(yōu)化方法,特別是涉及一種基于多線程并行的完整性度量散列算法優(yōu)化方法。
(二)、【背景技術(shù)】:
[0002]目前,可信計算技術(shù)不斷發(fā)展,完整性度量技術(shù)逐漸走向?qū)嵱茫F(xiàn)有軟件可信度量在效率、開銷上還存在問題,度量工具的推廣與應用仍受到其自身性能瓶頸的制約。對現(xiàn)有度量方法分析可知,影響度量性能的關(guān)鍵是度量算法的實現(xiàn),在度量過程中多采用散列算法作為度量算法。
[0003]并行計算(Parallel Computting)是計算機科學中的重要研究內(nèi)容,它是在串行計算(Sequential Computing)的基礎(chǔ)上演變而來的。并行計算為解決單處理機性能瓶頸提供了一種較好的方法。
[0004]利用并行計算求解計算問題,通?;谝韵驴紤]:將計算任務分解成多個子任務,有助于同時解決;在同一時間,由不同的執(zhí)行部件同時執(zhí)行多個子任務;多計算資源下解決問題的耗時要少于單個計算資源下的耗時。隨著多核技術(shù)的發(fā)展,多核結(jié)構(gòu)產(chǎn)品逐漸成為市場主流,在同一處理器中集成兩個或多個完整的計算內(nèi)核稱為多核處理器,多核處理器的多個計算內(nèi)核可以并行的執(zhí)行指令,提高了并行計算的能力。利用多核技術(shù),實現(xiàn)了線程級并行(thread level parallelism, TLP)、存儲級并行(memory levelparallelism, MLP)及數(shù)據(jù)級并行(data level parallelism, DLP) 0
[0005]I)線程級并行
[0006]線程(thread)是在操作系統(tǒng)調(diào)度過程中比進程(process)更小的可調(diào)度執(zhí)行單元。傳統(tǒng)的進程只包含一個執(zhí)行序列,從頭到尾都是一個順序執(zhí)行的邏輯路徑,所以,也可以稱為是單線程的。線程可以理解為一種輕量級進程,是程序執(zhí)行流的最小單元。在應用程序中使用多線程技術(shù),每個線程都執(zhí)行一個獨立的邏輯路徑,可以將冗長的或非常耗時的任務分解開來。
[0007]線程間是相互獨立又相互依賴的。使用多線程編程模型編程就是把進程的任務劃分為執(zhí)行的線程,每個線程為一個順序執(zhí)行的單控制流,而所有線程都是并發(fā)、并行且是異步執(zhí)行的。
[0008]多線程具有以下優(yōu)點:
[0009](I)線程創(chuàng)建代價?。?br>[0010](2)同一進程的不同線程共享同一地址空間;
[0011](3)多線程可以充分利用多核處理器;
[0012](4)線程之間的切換比進程之間的切換代價小;
[0013](5)響應速度快。
[0014]但是多線程在帶來方便的同時也存在一定的弊端:
[0015](I)線程間的同步所導致的計算負荷以及調(diào)度開銷;
[0016](2)多線程編程規(guī)則復雜,需避免死鎖、競爭和優(yōu)先級倒置;
[0017](3)多線程程序難于調(diào)試。
[0018]在單處理器系統(tǒng)上,在一個時間段內(nèi)多線程都處于啟動運行到運行完畢之間的狀態(tài),且各線程都在同一個處理機上運行,但在任一時間點只有一條線程在處理機上運行即并發(fā)。
[0019]在多核處理器系統(tǒng)上,在同一時間點多線程分別在不同處理核心上執(zhí)行,真正意義上實現(xiàn)了并行即線程級并行。
[0020]線程級并行是多核處理器上最重要的并行方式,是提升并行算法性能的關(guān)鍵。線程級并行可以分為任務劃分和數(shù)據(jù)劃分兩種方式。其中,任務劃分指的是每個核心處理一個子任務;數(shù)據(jù)劃分指的是每個線程負責處理一個分塊數(shù)據(jù)。
[0021]2)存儲級并行
[0022]存儲器訪問能力與處理部件計算能力不平衡,造成處理器處于“饑餓”狀態(tài)。如圖1所示,處理器速度每年提高近60 %,而存儲器訪問速度每年僅提高9 %,兩者的性能差距每年增長50 %,致使處理器性能和數(shù)據(jù)訪問帶寬及延遲之間的差距越來越大,這就是存儲墻(Memory Wall)問題。
[0023]針對存儲墻問題,應采取合適的手段提高系統(tǒng)存儲的效率。對于程序執(zhí)行而言可將其分為兩個階段,即計算階段和訪存階段,使計算和訪存可以在一個CPU周期內(nèi)同時執(zhí)行而不必互相等待。數(shù)據(jù)預取(data pre-fetching)利用計算階段的時鐘周期,在真正的內(nèi)存訪問之前,把數(shù)據(jù)從內(nèi)存加載到cache中,使訪存階段和之后的計算階段同時執(zhí)行。數(shù)據(jù)預取的優(yōu)化方法又稱為存儲級并行,利用這種方法有效的降低了內(nèi)存訪問延遲,間接提高系統(tǒng)存儲的效率,為解決存儲墻問題提供了一種重要的手段。
(三)、
【發(fā)明內(nèi)容】
:
[0024]本發(fā)明要解決的技術(shù)問題是:提供一種基于多線程并行的完整性度量散列算法優(yōu)化方法,該方法降低了度量時間,提高了度量效率。
[0025]本發(fā)明的技術(shù)方案:一種基于多線程并行的完整性度量散列算法優(yōu)化方法,含有如下步驟:
[0026]步驟1:將完整性度量散列算法劃分為兩個線程并行執(zhí)行,分別為Read線程和Update線程,Read線程執(zhí)行算法訪存階段,Update線程執(zhí)行算法計算階段;根據(jù)同一進程多線程共享同一地址空間的特點設置固定大小的緩沖區(qū)數(shù)組作為兩線程的共享空間,同時初始化計數(shù)信號用于線程間的同步;
[0027]步驟2:創(chuàng)建Read線程和Update線程,Read線程以數(shù)據(jù)預取(datapre-fetching)的方式將均勻分塊的待度量數(shù)據(jù)存入緩沖區(qū)數(shù)組,Update線程則是對寫入緩沖區(qū)數(shù)組的數(shù)據(jù)進行順序運算處理;
[0028]步驟3:在Read線程向緩沖區(qū)寫入數(shù)據(jù)時,之前設置的計數(shù)信號不斷累加,當緩沖區(qū)滿時停止寫入并等待Read線程操作;同時,Update線程對寫入緩沖區(qū)的數(shù)據(jù)順序處理,當緩沖區(qū)空時停止,等待Read線程,Read線程和Update線程根據(jù)計數(shù)信號之間的關(guān)系實現(xiàn)同步。
[0029]完整性度量散列算法分為兩個過程:預處理過程和散列值計算過程;預處理過程又由三部分組成:消息填充、分割已填充消息(將填充后的消息等分為512位處理塊)、為散列值計算設置初始值;
[0030]消息填充具體為:假設原始消息長度為L位,首先在消息最后加一位“I ”,接著在這位“ I ”后面補k個“0”,使得L+1+k (即補位后的消息長度)滿足對512取模余數(shù)為448之后將原始的L位消息長度以二進制數(shù)據(jù)的方式寫入最后的64位;經(jīng)消息填充后,再將數(shù)據(jù)均勻分塊;然后設置正確的初始化散列值,該初始化散列值因算法不同而存在一定差異;
[0031]散列值計算過程是完整性度量散列算法的核心,散列值計算過程生成目標消息的散列值;
[0032]完整性度量散列算法簡化如下:
[0033]假設輸入的待度量數(shù)據(jù)為Archive,算法輸出為度量數(shù)據(jù)散列值Hash ;算法首先通過數(shù)據(jù)分塊將經(jīng)過消息填充后的待度量數(shù)據(jù)Archive均勻切塊,每塊大小為m字節(jié);然后算法將等分塊的數(shù)據(jù)依次讀入大小為m字節(jié)的緩沖區(qū)byte [m],以初始化散列值Init_hash為計算基對緩沖區(qū)中的數(shù)據(jù)運算處理生成該數(shù)據(jù)塊的散列值;之后,該數(shù)據(jù)塊的散列值作為下次循環(huán)運算的初始化散列值,直到對整個填充后的待度量數(shù)據(jù)處理完畢,最后一次循環(huán)得到的Init_hash即是待度量數(shù)據(jù)的散列值Hash。
[0034]流水并行是指將不同的任務分配給不同的線程,線程間流水執(zhí)行來獲得并行性,任務間的依賴通過某種方式的同步得到維持。同一線程兩次同步間的計算工作量大小稱為流水計算粒度,即流水粒度;流水粒度的大小與同步開銷在執(zhí)行總開銷中所占的比例有直接關(guān)系,影響著流水并行的性能。根據(jù)流水粒度的大小,流水并行可分為細粒度流水和粗粒度流水。細粒度流水時,線程兩次同步之間的計算量較小,下一線程能夠較快獲得所需數(shù)據(jù)進行計算,能有效減少線程的空閑等待時間。但因為粒度較小,會引起較多次同步,導致較高的同步開銷和較低的流水并行性能。粗粒度流水增大了同步之間的計算量和同步數(shù)據(jù)量,因此減少了同步次數(shù),同步代價相對較小,但后續(xù)的計算結(jié)點在開始計算之前需要等待更長的時間,降低了并行性。
[0035]流水并行要獲得良好的性能,既需要保持并行線程之間的負載平衡,又需要控制同步開銷在執(zhí)行總開銷中所占的比例,這要求其在流水并行時選擇恰當?shù)挠嬎銊澐址绞胶途€程同步方式,以及合適的分塊大小。
[0036]為平衡并行性和同步開銷兩者之間的關(guān)系,使得流水并行獲得趨近于最優(yōu)的并行性能,選擇合適的流水粒度及合理的同步方式。
[0037]通過引入線程級并行及存儲級并行技術(shù)對完整性度量散列算法進行并行處理。首先根據(jù)算法的特點可以使用線程級并行對完整性度量散列算法進行任務劃分,再針對度量數(shù)據(jù)均勻分塊實現(xiàn)流水執(zhí)行,并通過存儲級并行實現(xiàn)訪存隱藏。
[0038]本發(fā)明的有益效果:
[0039]本發(fā)明通過對現(xiàn)有度量散列算法的實現(xiàn)過程進行分析,引入線程級并行技術(shù)及存儲級并行技術(shù)來實現(xiàn)度量散列算法的并行優(yōu)化,降低了度量時間,提高了度量效率。
(四)、【附圖說明】:
[0040]圖1為處理器與存儲器之間的性能差示意圖;
[0041]圖2為完整性度量散列算法描述圖;
[0042]圖3為基于多線程并行的完整性度量散列算法優(yōu)化方法流程圖;
[0043]圖4為并行算法描述圖;
[0044]圖5為算法串行比較圖。
(五)、【具體實施方式】:
[0045]基于多線程并行的完整性度量散列算法優(yōu)化方法含有如下步驟(見圖3):
[0046]步驟1:將