由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法
【專利摘要】本發(fā)明公開了一種由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,包括:S1、傳輸列表的邏輯分解并將傳輸列表按對象歸屬地劃分;S2、非線性部分優(yōu)化,利用非線性部分不等式的表格化來繼續(xù)縮小范圍,用組內(nèi)涉及的變量的范圍來驗證非線性部分不等式;S3、“代理”代碼定制,對于只包含線性表達式的組,可以用“代理”代碼;S4、消息結構化編碼解碼,所述消息是指為把傳輸列表發(fā)送給數(shù)據(jù)擁有者而所用的消息;S5、列表驅(qū)動的數(shù)據(jù)打包拆包,所述列表是指傳輸列表。本發(fā)明使用了表達式分析程序來自動化傳輸列表的壓縮方案的定制,然后根據(jù)表達式分析程序的分析結果來生成能實現(xiàn)這些壓縮方案的程序代碼,具有操作容易、通信效率高的優(yōu)點。
【專利說明】由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法
【技術領域】
[0001]本發(fā)明涉及并行計算機程序的數(shù)據(jù)通信研宄領域,特別涉及一種由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法。
【背景技術】
[0002]以往解決并行計算的傳輸列表壓縮問題的時候,有三種方案。這些方案不包括用傳統(tǒng)的文件壓縮算法壓縮傳輸列表,原因是那些壓縮算法的實時性達不到要求。
[0003]第一種方案適用于某些特定的并行計算流程,這些流程已經(jīng)有專用的軟件封裝數(shù)據(jù)通信過程了,例如Hypre、PESTc、ScaLAPACK等。封裝的功能一般包括了傳輸列表的壓縮,因此應用程序自身代碼不用管傳輸列表。由于并行計算流程的特殊性,這些專用軟件往往能為傳輸列表找到很簡短的表示方式。這是因為在較窄應用范圍內(nèi),傳輸列表往往是很有規(guī)律的,明確了規(guī)律之后就容易找到其最佳的表示方式。還有更幸運的情況,傳輸列表甚至不需要包含在數(shù)據(jù)通信消息中,這是因為在某些非常特殊的并行計算流程里,專用軟件的程序可以在數(shù)據(jù)擁有者節(jié)點安排一段代碼扮演“代理”的角色。這類“代理”可以在擁有者處通過計算生成一份一模一樣的傳輸列表,替請求者遞交給數(shù)據(jù)擁有者。
[0004]第二種方案適用于某些簡化的并行計算流程。這些流程非常簡單,簡單到可以配套“通用”軟件框架來封裝數(shù)據(jù)通信。典型的例子是Map-Reduce。這里“通用”打引號是因為那只是計算部分的通用,通信部分的流程則要按照簡化的固定的模式來走。通信部分的簡化使傳輸列表很結構化,有固定形式、甚至能預先確定,因此軟件框架不需要知道數(shù)據(jù)的具體專業(yè)領域的信息,也不需要應用程序代碼的幫助,就能做好傳輸列表的壓縮甚至“代理”。
[0005]第三種方案適用于通用的并行計算流程。這些流程通常使用通用的數(shù)據(jù)通信支持庫來實現(xiàn)(例如MP1、PVM等),但需要程序自主管理數(shù)據(jù)傳輸過程。這種方法的數(shù)據(jù)傳輸,可以使用雙邊通信功能,也可以用單邊通信功能。其中,雙邊是指數(shù)據(jù)請求者和數(shù)據(jù)擁有者兩邊,單邊則特指數(shù)據(jù)請求者這一邊。雙邊通信需要兩邊都知道傳輸列表。數(shù)據(jù)請求者當然是知道傳輸列表的,問題在于怎樣讓數(shù)據(jù)擁有者得到傳輸列表,和前面說的一樣,可以把傳輸列表先發(fā)送給數(shù)據(jù)擁有者,也可以在擁有者處定制一份“代理”代碼來計算出一份一模一樣的傳輸列表。不管是發(fā)送還是計算,一旦應用程序的自身代碼讓兩邊都有了傳輸列表,雙邊通信就能很默契地高效完成了。單邊通信實際上是由單邊激發(fā)通信,真正的通信過程仍然要兩邊都參與。單邊通信與雙邊通信的區(qū)別在于單邊通信自動化了把傳輸列表發(fā)給數(shù)據(jù)擁有者的過程,因此單邊通信不可能使用“代理”代碼,并且對傳輸列表只能采取機械化的表示方式。
[0006]上述第一種方案的缺點是專業(yè)領域上的適用面窄,其缺點的原因是需要針對非常特殊的并行計算流程,利用數(shù)據(jù)的專業(yè)領域信息,來定制傳輸列表的表示方式和“代理”代碼。換到另外一種應用,專業(yè)領域上的差別可以是非常大的。
[0007]上述第二種方案的缺點是計算流程上的適用面窄。其缺點的原因是并行計算流程過度簡化,不能適應很多應用的計算需求。
[0008]上述第三種方案的缺點是程序優(yōu)化難度大,程序開發(fā)成本高。對于雙邊通信,應用程序要在自身代碼中自主定制傳輸列表的表示方式和“代理”代碼,過程繁瑣。對于單邊通信,由于傳輸列表已經(jīng)被機械化地自動處理了,所以程序優(yōu)化空間小,無法為傳輸列表選擇較好的表示方式,也無法用“代理”代碼來減少傳輸列表的發(fā)送。單邊通信的優(yōu)化,最直接的做法往往是換成合理的雙邊通信。
【發(fā)明內(nèi)容】
[0009]本發(fā)明的主要目的在于克服現(xiàn)有技術的缺點與不足,提供一種由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,用于實現(xiàn)并行計算傳輸列表的表示方式和“代理”代碼的定制和實現(xiàn)。
[0010]為了達到上述目的,本發(fā)明采用以下技術方案:
[0011]由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,包括下述步驟:
[0012]S1、傳輸列表的邏輯分解并將傳輸列表按對象歸屬地劃分,由于邏輯命題“對象在某地”在數(shù)學中可以用“對象的位置在某地范圍內(nèi)”這種不等式所表示,所以所述劃分是通過求解由多維的不等式組得到的,而不等式組的求解可以先根據(jù)不等式之間的依賴關系拆分為相互獨立的小不等式組,以降低求解的復雜度,這就是所述的邏輯分解;
[0013]S2、非線性部分優(yōu)化,利用非線性部分不等式的表格化來繼續(xù)縮小范圍,用組內(nèi)涉及的變量的范圍來驗證非線性部分不等式;
[0014]S3、“代理”代碼定制,對于只包含線性表達式的組,只要該組表達式中的“常量”是在數(shù)據(jù)擁有者節(jié)點上可知的,那么該組就可以用“代理”代碼;
[0015]S4、消息結構化編碼解碼,所述消息是指為把傳輸列表發(fā)送給數(shù)據(jù)擁有者而所用的消息;
[0016]S5、列表驅(qū)動的數(shù)據(jù)打包拆包,所述列表是指傳輸列表,所述數(shù)據(jù)打包是按照列表所指定的順序,把發(fā)往某節(jié)點的數(shù)據(jù)集中放入一個消息中,以便用該消息把數(shù)據(jù)成批地發(fā)送給那個節(jié)點;數(shù)據(jù)拆包就是該消息的接收者把數(shù)據(jù)從消息中取出來;
[0017]上述步驟S1-S5都和傳輸列表中的對象的邏輯位置有關,這些對象都存儲在并行計算中邏輯概念上的共享數(shù)組時里,都被傳輸列表按照某種邏輯順序來排列,假設傳輸列表的順序是k維的,所請求的對象的數(shù)組是m維的,那么這段傳輸列表的序列的通項表達式就是關于k個變量的m維表達式,并且這k個變量變化的范圍都由傳輸請求指定。
[0018]優(yōu)選的,步驟SI中,邏輯分解首先是按照上述k個變量在這m維表達式中的分布,把這m維分成若干組,使得不同組的表達式包含不同的變量,然后把每一組的有線性表達式的維找出來;按對象歸屬地劃分是按照數(shù)組在不同節(jié)點上的分區(qū),把傳輸列表分成若干個子表,每個子表中的對象都是一個節(jié)點的,不同子表的對象是不同節(jié)點的。
[0019]優(yōu)選的,當指定某個節(jié)點時,這m維的表達式,為了讓其值落在該節(jié)點的區(qū)域內(nèi),每一維都能對應兩個不等式,一個是該維表達式的值不小于該節(jié)點區(qū)域在這一維的下界,另一個是該維表達式的值不大于該節(jié)點區(qū)域在這一維的上界;所述邏輯分解,首先將這2m個不等式分成相互獨立的若干組,每一組不等式的解都不會影響其它組的解;其次將容易求解的線性不等式找出來;求解這些不等式,可以把那k個變量在這個節(jié)點上指定有效對象的范圍算出來,這個范圍可以比變量的全局范圍小很多;求解不等式的過程用的是幾何方法,只處理線性表達式得到的不等式:每一個這樣的線性不等式都對應一個超平面;所述超平面在多維空間中的性質(zhì)和平面在三維空間中的性質(zhì)類似,平面是超平面的特例,每一個這樣的超平面都有可能把數(shù)據(jù)請求所用的變量的全局范圍切掉一部分,所述全局范圍即為一個超立方;這些超平面都切完之后,就剩下一個相對較小的有界凸集了。
[0020]優(yōu)選的,步驟S2中,用組內(nèi)涉及的變量的范圍來驗證非線性部分不等式的方法是:遍歷所涉及的變量的取值范圍,逐點檢查非線性不等式是否成立;當成立的點數(shù)所占比例低于事先確定的一個閾值時,就把非線性表達式轉(zhuǎn)變?yōu)楸砀瘢渲兄话蔷€性不等式成立的那些點,且表格的維數(shù)由非線性不等式所涉及的變量數(shù)決定。
[0021]優(yōu)選的,步驟S3中,所述“常量”需要在每個節(jié)點上都維護一個常量表,這個常量表的內(nèi)容是各個節(jié)點上的“常量”在表格所在節(jié)點的副本;所述的“常量”是指表達式中除了請求給定范圍的那些變量之外的量,這些量可以是存儲在應用程序的變量中的,這些變量不是表達式中的那些變量;所述“常量”,是相對的常量,不是程序中絕對的常量。
[0022]優(yōu)選的,所述“常量”的維護,難點在于“常量”的同步更新,其同步更新的方法為:
[0023]在原節(jié)點上更新了 “常量”之后,在常量表所在節(jié)點上也做相應地更新,保持副本與原本的一致性,常量表允許應用程序做以下三方面的選擇:要保存哪些“常量”;哪些“常量”可以不需要通信,用給定的計算子程序可以異地更新;哪些“常量”需要通信來保持數(shù)據(jù)同步;在常量表的幫助下,“代理”代碼可以沒有阻礙地對該組線性表達式進行求值,從而避免了通過通信把組內(nèi)表達式信息發(fā)送給數(shù)據(jù)擁有者;“代理”代碼的模板是:先從常量表中取出所需的“常量”,再用超平面切割超立方體計算縮小的變量范圍,然后就可以在縮小的變量范圍內(nèi)遍歷各點,即遍歷在組所涉及的維上的投影,得到序列元素在這些維上的位置信息。
[0024]優(yōu)選的,步驟S4中,消息結構化編碼解碼的具體方法為:
[0025]首先,對于步驟S3中確定可以用“代理”代碼的表達式組,該表達式組不需要放到消息中;
[0026]然后,所有要入到消息中的表達式,都按照下面格式來編碼:用一個整數(shù)來記錄表達式組的維數(shù);用前述維數(shù)那么多個整數(shù)來記錄維號列表;用一個整數(shù)來記錄表達式邏輯樹的節(jié)點數(shù);用節(jié)點數(shù)那么多個節(jié)點結構來記錄節(jié)點內(nèi)容;用一個整數(shù)來記錄常量表長度;用常量表長度那么多個常量表結構來記錄常量值;用一個整數(shù)來記錄該組表達式所涉及的變量數(shù);用前述變量數(shù)那么多個整數(shù)來記錄變量在數(shù)據(jù)請求中的編號;用一個整數(shù)來記錄限定變量范圍的超平面數(shù);對每個超平面,用前述變量數(shù)加一那么多個整數(shù)來記錄超平面的位置;按照上述格式來存表達式,就可以把數(shù)據(jù)請求編碼到消息中;解碼過程是按編碼過程反過來做的,即按上述格式把表達式組從消息中取出來。
[0027]優(yōu)選的,所述節(jié)點內(nèi)容包括節(jié)點編號、父節(jié)點編號、作為子節(jié)點里的序號、操作符編號、左操作元類型和編號以及右操作元類型和編號;
[0028]所述結構內(nèi)容包括常量編號、常量類型編號、常量維數(shù)、常量各維大小以及常量數(shù)據(jù)。
[0029]優(yōu)選的,步驟S5中,列表的順序混合使用了兩種方式來指定,分別是“代理”代碼和列表的結構化消息,這兩種方式結合起來,可以還原傳輸列表,對于可以用“代理”代碼的表達式組,組內(nèi)的順序用“代理”代碼來計算得到;對于不能用“代理”代碼的表達式組,則需要通信得到從步驟S4所生成的傳輸列表消息,并從消息中,取出表達式的信息,從而通過遍歷表達式涉及的變量的范圍,來得到組內(nèi)的順序。
[0030]優(yōu)選的,步驟S4和步驟S5的動作都是要按具體情況來完成的,因此需要用代碼生成程序來生成對應的代碼,這些代碼所需要的分析結果,是由表達式分析程序來產(chǎn)生的。
[0031]本發(fā)明與現(xiàn)有技術相比,具有如下優(yōu)點和有益效果:
[0032]1、本發(fā)明與上述第一、二種現(xiàn)有技術相比較,本發(fā)明使用了表達式分析程序來自動化傳輸列表的壓縮方案的定制,具有應用領域方面的適用面廣、并行算法方面的通用性好的優(yōu)點。事實上,前述現(xiàn)有技術的第一種情況(只為特定應用領域特殊地定制壓縮方案)和第二種情況(只為特定并行計算流程特殊地定制壓縮方案)都是在支持軟件的底層代碼(即專用軟件代碼、軟件框架代碼)中根據(jù)具體情況手工定制壓縮方案的,而本發(fā)明的方案則是通過程序?qū)Ρ磉_式的分析來自動定制壓縮方案,因此有這個優(yōu)點。
[0033]2、本發(fā)明用代碼生成程序生成能實現(xiàn)這些方案的程序代碼,把生成的這些代碼和應用程序的其他代碼一起編譯,就能得到通信效率較高的并行計算程序。本發(fā)明與前述第三種現(xiàn)有技術的方案的區(qū)別在于,前述第三種現(xiàn)有技術方案為了適應多種多樣的應用和算法,需要大量地手工編寫傳輸列表的壓縮代碼,而本發(fā)明方案的這些代碼是通過代碼生成程序自動生成的,因此有這個優(yōu)點。
【專利附圖】
【附圖說明】
[0034]圖1是本發(fā)明方法的流程圖。
【具體實施方式】
[0035]下面結合實施例及附圖對本發(fā)明作進一步詳細的描述,但本發(fā)明的實施方式不限于此。
[0036]實施例
[0037]傳輸列表是并行計算程序的數(shù)據(jù)通信消息的重要組成部分,本發(fā)明要解決這種傳輸列表的自動實時壓縮問題,并行計算把每個大規(guī)模任務分解成多個小規(guī)模任務,把每組大規(guī)模數(shù)據(jù)分成多組小規(guī)模數(shù)據(jù),把分解后的任務和數(shù)據(jù)分配到不同的計算機節(jié)點上,進行計算和處理,并且不時地進行節(jié)點間的數(shù)據(jù)通信,以實現(xiàn)任務之間的協(xié)調(diào),解決數(shù)據(jù)之間的依賴。數(shù)據(jù)通信通常由通信請求驅(qū)動,這就像電子商務的物流由商品訂單驅(qū)動一樣,和這些訂單一致的是,通信請求也要包含一份傳輸列表。這列表實際上是一個序列,其元素通項是要傳輸?shù)臄?shù)據(jù)所對應的對象的邏輯位置。對于讀數(shù)據(jù)的請求,請求者節(jié)點把這些對象的位置發(fā)給數(shù)據(jù)擁有者節(jié)點之后,數(shù)據(jù)擁有者就可以按照這些位置找到要數(shù)據(jù)對應的對象,然后就可以把對象的數(shù)據(jù)取出來打包發(fā)給請求者。對于寫數(shù)據(jù)的請求,請求者把位置序列連同數(shù)據(jù)一起發(fā)給數(shù)據(jù)擁有者,然后擁有者按位置把得到的數(shù)據(jù)更新到對應的對象中。本發(fā)明就是要解決壓縮這類傳輸列表的問題,其中的壓縮是廣義的壓縮,不但選擇更簡短的表示方式,而且通過一種叫“代理”代碼的計算機程序代碼,來盡可能地減少傳輸列表的發(fā)送。使用“代理代碼”可以減少傳輸列表的發(fā)送量,讓傳輸列表中必須發(fā)送的部分有更簡短的表不方式,在保證傳輸實時性的前提下減少由傳輸列表產(chǎn)生的通信負荷。
[0038]如圖1所示,本實施例的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其中主要技術包含五個部分的功能中,分別是傳輸列表的(一)邏輯分解和按對象歸屬地劃分、(二)非線性部分優(yōu)化、(三)“代理”代碼定制、(四)消息結構化編碼解碼和(五)列表驅(qū)動的數(shù)據(jù)打包拆包。其中,第一、二部分都是表示方式的優(yōu)化,第三部分是定制好“代理”代碼,以便減少傳輸列表的發(fā)送量,第四部分是對必須發(fā)送的傳輸列表的消息進行編碼和解碼,而第五部分則是用這種新型結構的傳輸列表指揮的數(shù)據(jù)打包和拆包機制。由于前三部分都是可以預先處理的,最后這兩部分的效率是保證實時性的關鍵。
[0039]上述五部分和前述兩套電腦程序的對應關系是:前三部分由表達式分析程序負責,后兩部分是代碼生成程序負責。
[0040]在具體介紹這五部分功能之前,先說一下傳輸列表中對象的邏輯位置。這些對象是都是可以按照數(shù)組組織的,包括很復雜的數(shù)據(jù)結構,都可以放到數(shù)組中。這里的數(shù)組是邏輯概念上的數(shù)組,是并行計算中的全局共享數(shù)組,在物理分布上允許數(shù)組跨節(jié)點存儲,每個節(jié)點都可以擁有這個數(shù)組中連續(xù)的一個區(qū)域。數(shù)組可以是一維的,也可以是多維的,不同的數(shù)組可以有不同的維數(shù)。傳輸列表首先是按照數(shù)據(jù)請求分段的,每段中的對象都是同一個數(shù)組的,而且對象在數(shù)組中的位置有通項表達式表示。由于數(shù)組可以是多維的,所以這里的通項表達式也對應地可以是多維的。此外,這里的通項排列是按照對象在數(shù)據(jù)請求中的邏輯順序來排的。這里允許數(shù)據(jù)請求的邏輯順序是多維的,這個請求的維數(shù)不要求和數(shù)組的維數(shù)一樣,請求的維數(shù)由請求中使用了多少個變量來決定,并且要求變量的范圍(稱為變量的全局范圍)要在請求中明確地給出。因此,假設一個數(shù)據(jù)請求是k維的,所請求的對象的數(shù)組是m維的,那么這段傳輸列表的序列的通項表達式就是m維的,這些表達式都是關于數(shù)據(jù)請求給定的k個變量的(但不要求每個表達式都包含所有k個變量),并且這里k個變量變化的范圍都由請求指定。
[0041]第一部分功能是傳輸列表的邏輯分解和按對象歸屬地劃分,在圖1中是Al部分。邏輯分解首先是按照上述k個變量在這m維表達式中的分布,把這m維分成若干組,使得不同組的表達式包含不同的變量,然后把每一組的有線性表達式的維找出來。按對象歸屬地劃分是按照數(shù)組在不同節(jié)點上的分區(qū),把傳輸列表分成若干個子表,每個子表中的對象都是一個節(jié)點的,不同子表的對象是不同節(jié)點的。這里的分解和分劃是有關聯(lián)的,當指定某個節(jié)點時,這m維的表達式,為了讓其值落在該節(jié)點的區(qū)域內(nèi),每一維都能對應兩個不等式,一個是該維表達式的值不小于該節(jié)點區(qū)域在這一維的下界,另一個是該維表達式的值不大于該節(jié)點區(qū)域在這一維的上界。因此,這部分功能中的分解,首先是為了把這2m個不等式分成相互獨立的若干組,每一組不等式的解都不會影響其它組的解,更重要的是在組內(nèi)求解不等式更容易;其次是為了把容易求解的線性不等式找出來。求解這些不等式,可以把那k個變量在這個節(jié)點上指定有效對象的范圍算出來,這個范圍可以比變量的全局范圍小很多。求解不等式的過程用的是幾何方法,只處理線性表達式得到的不等式:每一個這樣的線性不等式都對應一個超平面(超平面是在多維空間中的性質(zhì)和平面在三維空間中的性質(zhì)類似,平面是超平面的特例)ο每一個這樣的超平面都有可能把數(shù)據(jù)請求所用的變量的全局范圍(一個超立方體)切掉一部分。這些超平面都切完之后,就剩下一個相對較小的有界凸集了。
[0042]第二部分功能是非線性部分的優(yōu)化,在圖1中是A2部分。上一部分利用線性部分的不等式縮小了描述請求的變量在指定節(jié)點上的范圍,這一部分嘗試用非線性部分不等式的表格化來繼續(xù)縮小范圍,得益于第一部分的不等式分組,這里可以只用組內(nèi)涉及的變量的范圍來驗證非線性不等式,其方法是遍歷所涉及的變量的取值范圍,逐點檢查非線性不等式是否成立;當成立的點數(shù)所占比例低于事先確定的一個閾值時,就把非線性表達式轉(zhuǎn)變?yōu)楸砀瘢渲兄话蔷€性不等式成立的那些點,且表格的維數(shù)由非線性不等式所涉及的變量數(shù)決定。這樣做,可以使請求的接收者(也就是數(shù)據(jù)擁有者)避免在非線性不等式不成立的點上求表達式的值,降低了接收者處理請求時的計算復雜度,但代價是使表達式的常量變多(表格中的值是增多的常量),從而增大了發(fā)送請求的傳輸量。因此,非線性表達式的優(yōu)化必須用前述的閾值來控制,以便在傳輸量和計算量之間取得平衡。
[0043]第三部分功能是“代理”代碼的定制,在圖1中是A3部分,上面第一部分把表達式分組后,有一些組內(nèi)是只包含線性表達式的,另外有一些組包含了非線性表達式(有可能也包含線性表達式)。對于只包含線性表達式的組,有可能可以用“代理”代碼,只要該組表達式中的“常量”是在數(shù)據(jù)擁有者節(jié)點上可知的,那么該組就可以用“代理”代碼。為了讓“代理”代碼能夠處理好這些“常量”,需要在每個節(jié)點上都維護一個常量表,這個常量表的內(nèi)容是各個節(jié)點上的“常量”在表格所在節(jié)點的副本。應當明確的是,這里的“常量”是指表達式中除了請求給定范圍的那些變量之外的量,這些量可以是存儲在應用程序的變量中的,只不過這些變量不是表達式中的那些變量。因此,這里的所謂“常量”,是相對的常量,不是程序中絕對的常量。這些“常量”的維護,難點在于“常量”的同步更新。在原節(jié)點上更新了 “常量”之后,在常量表所在節(jié)點上也要相應地更新,來保持副本與原本的一致性。這些更新要盡可能地避免通信,因此,常量表允許應用程序做以下三方面的選擇:要保存哪些“常量”;哪些“常量”可以不需要通信,用給定的計算子程序可以異地更新;哪些“常量”需要通信來保持數(shù)據(jù)同步。在常量表的幫助下,“代理”代碼可以沒有阻礙地對該組線性表達式進行求值,從而避免了通過通信把組內(nèi)表達式信息發(fā)送給數(shù)據(jù)擁有者?!按怼贝a的模板是:先從常量表中取出所需的“常量”,再用第一部分所提及的幾何方法(用超平面切割超立方體)計算縮小的變量范圍,然后就可以在縮小的變量范圍內(nèi)遍歷各點(在組所涉及的維上的投影),得到序列元素在這些維上的位置信息。該模板被用于圖中的G2部分(生成代理)。
[0044]第四部分是消息結構化編碼解碼,在圖1中是Gl部分,這里的消息是指為把傳輸列表發(fā)送給數(shù)據(jù)擁有者而所用的消息。簡單來說,這些消息要存放數(shù)據(jù)請求的表達式的信息。首先,每三部分的功能已經(jīng)確定了那些表達式組可以用“代理”代碼,從而那些表達式組不需要放到消息中;然后,所有要入到消息中的表達式,都按照下面格式來編碼:用一個整數(shù)來記錄表達式組的維數(shù);用前述維數(shù)那么多個整數(shù)來記錄維號列表;用一個整數(shù)來記錄表達式邏輯樹的節(jié)點數(shù);用節(jié)點數(shù)那么多個節(jié)點結構來記錄節(jié)點內(nèi)容,節(jié)點內(nèi)容包括節(jié)點編號(一個整數(shù)),父節(jié)點編號(一個整數(shù)),作為子節(jié)點里的序號(一個整數(shù)),操作符編號(一個整數(shù)),左操作元類型和編號(兩個整數(shù),類型包括子樹、常量和變量),右操作元類型和編號(兩個整數(shù),類型種類如前所述);用一個整數(shù)來記錄常量表長度;用常量表長度那么多個常量表結構來記錄常量值,結構內(nèi)容包括常量編號(一個整數(shù)),常量類型編號(一個整數(shù)),常量維數(shù)(一個整數(shù)),常量各維大小(每維一個整數(shù)),常量數(shù)據(jù)(總共各維大小之乘積那么多個數(shù)據(jù),每個數(shù)據(jù)項都用常量類型編號所對應的類型來表示);用一個整數(shù)來記錄該組表達式所涉及的變量數(shù);用前述變量數(shù)那么多個整數(shù)來記錄變量在數(shù)據(jù)請求中的編號;用一個整數(shù)來記錄限定變量范圍的超平面數(shù);對每個超平面,用前述變量數(shù)加一那么多個整數(shù)來記錄超平面的位置。按照上述格式來存表達式,就可以把數(shù)據(jù)請求編碼到消息中。解碼過程是按編碼過程反過來做的,換句話說,就是按上述格式把表達式組從消息中取出來。我們可以看到,由于傳輸列表的這種消息是用表達式來表示的,其長度會明顯地小于傳統(tǒng)的枚舉方式所需要的消息長度。因此,這一部分功能能夠很大程度地優(yōu)化應用程序的通信效率。
[0045]第五部分是列表驅(qū)動的數(shù)據(jù)打包拆包,在圖1中是G3部分,這里的列表是指傳輸列表,簡單來說,數(shù)據(jù)打包就是按照列表所指定的順序,把發(fā)往某節(jié)點的數(shù)據(jù)集中放入一個消息中,以便用該消息把數(shù)據(jù)成批地發(fā)送給那個節(jié)點;反過來,數(shù)據(jù)拆包就是該消息的接收者把數(shù)據(jù)從消息中取出來,其中,因為數(shù)據(jù)接收者是知道傳輸列表的,所以接收者會知道各項數(shù)據(jù)對應哪個對象。更具體地,列表的順序混合使用了兩種方式來指定,分別是“代理”代碼和列表的結構化消息,這兩種方式結合起來,可以還原傳輸列表。對于可以用“代理”代碼的表達式組,組內(nèi)的順序用“代理”代碼來計算得到;對于不能用“代理”代碼的表達式組,則需要通信得到從第四部分功能所生成的傳輸列表消息,并從消息中,取出表達式的信息,從而通過遍歷表達式涉及的變量的范圍,來得到組內(nèi)的順序,有了這些順序,打包和拆包都是機械的動作。
[0046]本實施例中,由于第四和第五部分功能的動作都是要按具體情況來做的,因此需要用代碼生成程序來生成對應的代碼。這些代碼所需要的前三部分功能的分析結果,是由表達式分析程序來產(chǎn)生的。
[0047]上述實施例為本發(fā)明較佳的實施方式,但本發(fā)明的實施方式并不受上述實施例的限制,其他的任何未背離本發(fā)明的精神實質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應為等效的置換方式,都包含在本發(fā)明的保護范圍之內(nèi)。
【權利要求】
1.由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,包括下述步驟: 51、傳輸列表的邏輯分解并將傳輸列表按對象歸屬地劃分,由于邏輯命題“對象在某地”在數(shù)學中可以用“對象的位置在某地范圍內(nèi)”這種不等式所表示,所以所述劃分是通過求解由多維的不等式組得到的,而不等式組的求解可以先根據(jù)不等式之間的依賴關系拆分為相互獨立的小不等式組,以降低求解的復雜度,這就是所述的邏輯分解; 52、非線性部分優(yōu)化,利用非線性部分不等式的表格化來繼續(xù)縮小范圍,用組內(nèi)涉及的變量的范圍來驗證非線性部分不等式; 53、“代理”代碼定制,對于只包含線性表達式的組,只要該組表達式中的“常量”是在數(shù)據(jù)擁有者節(jié)點上可知的,那么該組就可以用“代理”代碼; 54、消息結構化編碼解碼,所述消息是指為把傳輸列表發(fā)送給數(shù)據(jù)擁有者而所用的消息; 55、列表驅(qū)動的數(shù)據(jù)打包拆包,所述列表是指傳輸列表,所述數(shù)據(jù)打包是按照列表所指定的順序,把發(fā)往某節(jié)點的數(shù)據(jù)集中放入一個消息中,以便用該消息把數(shù)據(jù)成批地發(fā)送給那個節(jié)點;數(shù)據(jù)拆包就是該消息的接收者把數(shù)據(jù)從消息中取出來; 上述步驟S1-S5都和傳輸列表中的對象的邏輯位置有關,這些對象都存儲在并行計算中邏輯概念上的共享數(shù)組時里,都被傳輸列表按照某種邏輯順序來排列,假設傳輸列表的順序是k維的,所請求的對象的數(shù)組是m維的,那么這段傳輸列表的序列的通項表達式就是關于k個變量的m維表達式,并且這k個變量變化的范圍都由傳輸請求指定。
2.根據(jù)權利要求1所述由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟SI中,邏輯分解首先是按照上述k個變量在這m維表達式中的分布,把這m維分成若干組,使得不同組的表達式包含不同的變量,然后把每一組的有線性表達式的維找出來;按對象歸屬地劃分是按照數(shù)組在不同節(jié)點上的分區(qū),把傳輸列表分成若干個子表,每個子表中的對象都是一個節(jié)點的,不同子表的對象是不同節(jié)點的。
3.根據(jù)權利要求2所述由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,當指定某個節(jié)點時,這m維的表達式,為了讓其值落在該節(jié)點的區(qū)域內(nèi),每一維都能對應兩個不等式,一個是該維表達式的值不小于該節(jié)點區(qū)域在這一維的下界,另一個是該維表達式的值不大于該節(jié)點區(qū)域在這一維的上界;所述邏輯分解,首先將這2m個不等式分成相互獨立的若干組,每一組不等式的解都不會影響其它組的解;其次將容易求解的線性不等式找出來;求解這些不等式,可以把那k個變量在這個節(jié)點上指定有效對象的范圍算出來,這個范圍可以比變量的全局范圍小很多;求解不等式的過程用的是幾何方法,只處理線性表達式得到的不等式:每一個這樣的線性不等式都對應一個超平面;所述超平面在多維空間中的性質(zhì)和平面在三維空間中的性質(zhì)類似,平面是超平面的特例,每一個這樣的超平面都有可能把數(shù)據(jù)請求所用的變量的全局范圍切掉一部分,所述全局范圍即為一個超立方;這些超平面都切完之后,就剩下一個相對較小的有界凸集了。
4.根據(jù)權利要求1所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟S2中,用組內(nèi)涉及的變量的范圍來驗證非線性部分不等式的方法是:遍歷所涉及的變量的取值范圍,逐點檢查非線性不等式是否成立;當成立的點數(shù)所占比例低于事先確定的一個閾值時,就把非線性表達式轉(zhuǎn)變?yōu)楸砀?,其中只包含非線性不等式成立的那些點,且表格的維數(shù)由非線性不等式所涉及的變量數(shù)決定。
5.根據(jù)權利要求1所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟S3中,所述“常量”需要在每個節(jié)點上都維護一個常量表,這個常量表的內(nèi)容是各個節(jié)點上的“常量”在表格所在節(jié)點的副本;所述的“常量”是指表達式中除了請求給定范圍的那些變量之外的量,這些量可以是存儲在應用程序的變量中的,這些變量不是表達式中的那些變量;所述“常量”,是相對的常量,不是程序中絕對的常量。
6.根據(jù)權利要求5所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,所述“常量”的維護,難點在于“常量”的同步更新,其同步更新的方法為: 在原節(jié)點上更新了 “常量”之后,在常量表所在節(jié)點上也做相應地更新,保持副本與原本的一致性,常量表允許應用程序做以下三方面的選擇:要保存哪些“常量”;哪些“常量”可以不需要通信,用給定的計算子程序可以異地更新;哪些“常量”需要通信來保持數(shù)據(jù)同步;在常量表的幫助下,“代理”代碼可以沒有阻礙地對該組線性表達式進行求值,從而避免了通過通信把組內(nèi)表達式信息發(fā)送給數(shù)據(jù)擁有者;“代理”代碼的模板是:先從常量表中取出所需的“常量”,再用超平面切割超立方體計算縮小的變量范圍,然后就可以在縮小的變量范圍內(nèi)遍歷各點,即遍歷在組所涉及的維上的投影,得到序列元素在這些維上的位置信息。
7.根據(jù)權利要求1所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟S4中,消息結構化編碼解碼的具體方法為: 首先,對于步驟S3中確定可以用“代理”代碼的表達式組,該表達式組不需要放到消息中; 然后,所有要入到消息中的表達式,都按照下面格式來編碼:用一個整數(shù)來記錄表達式組的維數(shù);用前述維數(shù)那么多個整數(shù)來記錄維號列表;用一個整數(shù)來記錄表達式邏輯樹的節(jié)點數(shù);用節(jié)點數(shù)那么多個節(jié)點結構來記錄節(jié)點內(nèi)容;用一個整數(shù)來記錄常量表長度;用常量表長度那么多個常量表結構來記錄常量值;用一個整數(shù)來記錄該組表達式所涉及的變量數(shù);用前述變量數(shù)那么多個整數(shù)來記錄變量在數(shù)據(jù)請求中的編號;用一個整數(shù)來記錄限定變量范圍的超平面數(shù);對每個超平面,用前述變量數(shù)加一那么多個整數(shù)來記錄超平面的位置;按照上述格式來存表達式,就可以把數(shù)據(jù)請求編碼到消息中;解碼過程是按編碼過程反過來做的,即按上述格式把表達式組從消息中取出來。
8.根據(jù)權利要求7所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,所述節(jié)點內(nèi)容包括節(jié)點編號、父節(jié)點編號、作為子節(jié)點里的序號、操作符編號、左操作元類型和編號以及右操作元類型和編號; 所述結構內(nèi)容包括常量編號、常量類型編號、常量維數(shù)、常量各維大小以及常量數(shù)據(jù)。
9.根據(jù)權利要求1所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟S5中,列表的順序混合使用了兩種方式來指定,分別是“代理”代碼和列表的結構化消息,這兩種方式結合起來,可以還原傳輸列表,對于可以用“代理”代碼的表達式組,組內(nèi)的順序用“代理”代碼來計算得到;對于不能用“代理”代碼的表達式組,則需要通信得到從步驟S4所生成的傳輸列表消息,并從消息中,取出表達式的信息,從而通過遍歷表達式涉及的變量的范圍,來得到組內(nèi)的順序。
10.根據(jù)權利要求1所述的由序列通項表達式驅(qū)動的并行計算傳輸列表實時壓縮方法,其特征在于,步驟S4和步驟S5的動作都是要按具體情況來完成的,因此需要用代碼生成程序來生成對應的代碼,這些代碼所需要的分析結果,是由表達式分析程序來產(chǎn)生的。
【文檔編號】H03M7/30GK104485967SQ201510010178
【公開日】2015年4月1日 申請日期:2015年1月8日 優(yōu)先權日:2015年1月8日
【發(fā)明者】吳峻峰, 許躍生, 張勇瑞, 林英展, 王健珊, 關文超, 何鴻愷, 李達超, 葉緯材, 張永東, 江穎 申請人:中山大學