本發(fā)明涉及電路的自動綜合方法,包括把軟件程序編譯為借助管道互連的規(guī)則進程網(wǎng)絡(luò),根據(jù)該網(wǎng)絡(luò),每個管道是可尋址的物理存儲器,所述進程中的每個進程,在與該進程相關(guān)聯(lián)的迭代域的每次迭代過程中,從一個管道中施加數(shù)據(jù)的至少一次讀取和/或在一個管道中施加數(shù)據(jù)的寫入,并且調(diào)度函數(shù)針對每個進程的每個迭代值提供在執(zhí)行位置暫時調(diào)度集合中選擇的進程的執(zhí)行位置。
背景技術(shù):
這樣的電路綜合方法,或HLS(high-level synthesis)被用于根據(jù)要由電路執(zhí)行的計算的算術(shù)描述(高級,諸如C或Matlab、Alpha語言)來自動生成(或編譯)電路塊(參見工具,諸如SpecC、HardwareC、HandelC、BashC、TransmogrifierC、CyberC、CatapultC)。所涉及的算法是各種各樣的。例如信號處理算法。
電路必須盡可能有效同時最好地使用可用資源。所生成的電路塊的性能因此尤其是通過在輸入端提供的數(shù)據(jù)處理速度、能量消耗、占用硅的表面積、FPGA上的LUT單元、存儲器讀取等測量的。
性能的提高是通過把要執(zhí)行的處理劃分為并行實現(xiàn)的任務(wù)來獲得的。大部分時間,任務(wù)不完全獨立,并且必須彼此之間交流(寫/讀)中間結(jié)果,這尤其提出任務(wù)之間的同步的問題。
分為并行任務(wù)并且產(chǎn)生同步需要精細粒度計算的調(diào)度,也就是說算法操作的執(zhí)行順序和安排。為了準確,調(diào)度應(yīng)該遵守操作之間的數(shù)據(jù)依賴性,以便確保例如數(shù)據(jù)在被讀取之前產(chǎn)生。
現(xiàn)有大多數(shù)方法基于CFDG(控制/數(shù)據(jù)流圖形)類型的圖示,其表示句法結(jié)構(gòu)之間的依賴性,也就是說在操作包之間的依賴性,這導(dǎo)致依賴性的過分粗略近似使得不能發(fā)現(xiàn)所關(guān)注的調(diào)度。
進程網(wǎng)絡(luò)是自然表示計算的并行性的執(zhí)行模型。為此,模型并用于表示并行系統(tǒng),并且把并行系統(tǒng)到進程網(wǎng)絡(luò)的轉(zhuǎn)換允許研究、分析并測量與并行性(調(diào)度、負載平衡、分配、檢查點、消耗等)相關(guān)的有問題的區(qū)別。
進程網(wǎng)絡(luò)還構(gòu)成用于電路自動綜合設(shè)備的自然中間圖示,其中“Front-End”塊提取并行性并且產(chǎn)生進程網(wǎng)絡(luò),“后端”塊朝向目標架構(gòu)編譯進程網(wǎng)絡(luò)。
盡管對于前端方面(管道構(gòu)建,布置/布線)實現(xiàn)了性能方面的眾多進步,后端方面仍然是很初級的。
因此希望還改進自動生成的電路塊的性能。
技術(shù)實現(xiàn)要素:
為此,根據(jù)第一方面,本發(fā)明提出前述類型的電路自動綜合方法,其特征在于,該方法包括以下步驟:
準許稱作生產(chǎn)者進程的唯一進程寫數(shù)據(jù)到管道中,并且準許稱作消費者進程的唯一進程讀取所述管道中的數(shù)據(jù);以及同步單元與所述管道相關(guān)聯(lián),并且使得在管道的生產(chǎn)者進程進行的每次新迭代的發(fā)起之前預(yù)先收集生產(chǎn)者進程的所述新迭代的值,并且在管道的消費者進程進行的每次新迭代的發(fā)起之前預(yù)先收集消費者進程的迭代的值;在分別收集到生產(chǎn)者進程和消費者進程的新迭代的值之后,所述同步單元根據(jù)對按照生產(chǎn)者進程和消費者進程各自的被收集的新迭代的值而確定的執(zhí)行位置以及按照生產(chǎn)者進程和消費者進程各自的被收集的上一次迭代值而確定的執(zhí)行位置進行的比較,來準許或中止所述生產(chǎn)者進程和消費者進程各自的所述新迭代的實施。
這樣的方法允許快速并自動生成電路,該電路在計算速度和電路占用體積方面提供較高性能。
在實施方式中,根據(jù)本發(fā)明的該電路自動綜合方法還包括一個或多個以下特征:
-所述同步單元使得通過在收集所述生產(chǎn)者進程的新迭代的值之后實施以下步驟來操控所述管道的生產(chǎn)者進程的運行:
-同步單元比較所收集值的新執(zhí)行位置與收集的消費者進程的上一個迭代值的執(zhí)行位置;以及
-如果該新迭代的執(zhí)行位置在消費者進程的被收集的上一個迭代值的執(zhí)行位置之后,則所述同步單元中止由生產(chǎn)者進程實施該新迭代,該中止被同步單元保持直到對消費者進程的未來迭代值的收集使得:該未來迭代值的執(zhí)行位置在消費者進程的新迭代的所述執(zhí)行位置之后。
-所述同步單元使得通過在收集所述消費者進程的新迭代的值之后實施以下步驟來操控所述管道的消費者進程的運行:
-同步單元從生產(chǎn)者進程的迭代值的執(zhí)行位置確定執(zhí)行位置,該執(zhí)行位置導(dǎo)致應(yīng)當(dāng)在該新迭代時被消費者進程讀取的數(shù)據(jù)被寫入所述管道(c)中;以及
-如果所確定的執(zhí)行位置在生產(chǎn)者進程的被收集的上一個迭代值的執(zhí)行位置之后或相等,則所述同步單元中止由消費者進程實施該新迭代,該中止被同步單元保持直到對生產(chǎn)者進程的未來迭代值的收集使得:該未來迭代值的執(zhí)行位置嚴格領(lǐng)先所確定的執(zhí)行位置。
-每個管道的消費者進程或生產(chǎn)者進程,在所述進程的前次迭代結(jié)束之后并且在繼前次迭代之后的新迭代的啟動之前,向管道的同步單元給出進程的新迭代的迭代值,并且根據(jù)指示中止或準許的監(jiān)視單元的操縱命令來實施進程的該新迭代;
-管道的消費者進程,在所述進程的前次迭代結(jié)束之后并且在繼前次迭代之后的新迭代的啟動之前,還向管道的同步單元給出生產(chǎn)者進程的導(dǎo)致應(yīng)當(dāng)在該新迭代時被消費者進程讀取的數(shù)據(jù)被寫入所述管道中的所述迭代值。
根據(jù)第二方面,本發(fā)明提出一種電路自動綜合設(shè)備,能夠通過生成借助于管道而互連的規(guī)則進程的網(wǎng)絡(luò)來對軟件程序進行編譯,其中每個管道是能被尋址的物理存儲器,所述進程中的每個進程能夠在與該進程相關(guān)聯(lián)的迭代域的每次迭代時應(yīng)用在管道中的數(shù)據(jù)的至少一次讀取和/或數(shù)據(jù)到管道中的寫入,并且針對每個進程的每個迭代值,調(diào)度函數(shù)能夠提供在執(zhí)行位置時間調(diào)度集中選擇的進程的執(zhí)行位置;所述電路綜合設(shè)備的特征在于:能夠在所述編譯過程中,生成以下內(nèi)容并且將其與所述管道中的每個管道相關(guān)聯(lián):
稱作生產(chǎn)者進程的唯一進程,其被準許寫數(shù)據(jù)到管道中,以及稱作消費者進程的唯一進程,其被準許讀取所述管道中的數(shù)據(jù);以及同步單元,與所述管道相關(guān)聯(lián),并且能夠在管道的生產(chǎn)者進程進行的每次新迭代的發(fā)起之前預(yù)先收集生產(chǎn)者進程的所述新迭代的值,并且在管道的消費者進程進行的每次新迭代的發(fā)起之前預(yù)先收集消費者進程的迭代的值;在分別收集到生產(chǎn)者進程和消費者進程的新迭代的值之后,所述同步單元能夠根據(jù)對按照生產(chǎn)者進程和消費者進程各自的被收集的新迭代的值而確定的執(zhí)行位置以及按照生產(chǎn)者進程和消費者進程各自的被收集的上一次迭代值而確定的執(zhí)行位置進行的比較,來準許或中止所述生產(chǎn)者進程和消費者進程各自的所述新迭代的實施。
根據(jù)第三方面,本發(fā)明提出一種綜合電路,例如在實施根據(jù)本發(fā)明的第一方面的電路自動綜合方法之后獲得的綜合電路,包括借助于管道而互連的規(guī)則進程的網(wǎng)絡(luò),其中每個管道是能被尋址的物理存儲器,所述進程中的每個進程能夠在與該進程相關(guān)聯(lián)的迭代域的每次迭代時應(yīng)用在管道中的數(shù)據(jù)的至少一次讀取和/或數(shù)據(jù)到管道中的寫入,并且針對每個進程的每個迭代值,調(diào)度函數(shù)能夠提供在執(zhí)行位置時間調(diào)度集中選擇的進程的執(zhí)行位置;
所述電路的特征在于包括:
稱作生產(chǎn)者進程的唯一進程,與每個管道相關(guān)聯(lián)并且被準許寫數(shù)據(jù)到管道中,以及稱作消費者進程的唯一進程,與每個管道相關(guān)聯(lián)并且被準許讀取所述管道中的數(shù)據(jù);以及
同步單元,與所述管道相關(guān)聯(lián),并且能夠在管道的生產(chǎn)者進程進行的每次新迭代的發(fā)起之前預(yù)先收集生產(chǎn)者進程的所述新迭代的值,并且在管道的消費者進程進行的每次新迭代的發(fā)起之前預(yù)先收集消費者進程的迭代的值;在分別收集到生產(chǎn)者進程和消費者進程的新迭代的值之后,所述同步單元能夠根據(jù)對按照生產(chǎn)者進程和消費者進程各自的被收集的新迭代的值而確定的執(zhí)行位置以及按照生產(chǎn)者進程和消費者進程各自的被收集的上一次迭代值而確定的執(zhí)行位置進行的比較,來準許或中止所述生產(chǎn)者進程和消費者進程各自的所述新迭代的實施。
附圖說明
參照附圖,通過閱讀僅以示例方式提供的以下描述,本發(fā)明的這些特征和優(yōu)點變得清楚,在附圖中:
-圖1示出本發(fā)明的實施方式的電路自動綜合設(shè)備;
-圖2示出命名為Prog的程序的迭代和依賴性的域;
-圖3示出Prog程序的執(zhí)行順序;
-圖4是在執(zhí)行prog程序的電路塊的自動生成中實施的處理器、輸入復(fù)用器、輸出復(fù)用器、管道的示圖;
-圖5是示出Prog程序的兩個處理器、這兩個處理器之間的管道、和與管道相關(guān)聯(lián)的同步單元的圖。
具體實施方式
圖1是本發(fā)明的實施方式中的高級電路自動綜合設(shè)備1的圖。該設(shè)備1包括稱為“前端”的塊2和稱為“后端”的塊3。
“前端”塊2分析在設(shè)備1的輸入端提供的程序的算法描述以便從中提取并行性并且產(chǎn)生進程網(wǎng)絡(luò)作為對應(yīng)電路的中間圖示。
“后端”塊3把由“前端”塊2產(chǎn)生的電路的中間圖示轉(zhuǎn)換為物理電路。
下面現(xiàn)回顧在根據(jù)本發(fā)明的高級電路自動綜合設(shè)備并且在“前端”塊2中使用的概念和處理。
概念和處理
多面體模型
多面體模型是要靜態(tài)控制的計算機程序的分析和優(yōu)化工具。要靜態(tài)控制的程序僅操縱靜態(tài)表和簡單類型的變量(不是指針),并且因此控制被限制為“if”和“for”循環(huán)。主要特征是表索引函數(shù),“if”測試和循環(huán)的邊界是包含性的“for”循環(huán)的計數(shù)器的仿射函數(shù)。
賦值S的迭代矢量是由包括賦值S的循環(huán)的計數(shù)器形成。執(zhí)行請求被稱為運算。運算是多面體分析的基礎(chǔ)單元。賦值的迭代域是在執(zhí)行期間所有迭代值的集合。在這些約束(“for”循環(huán),“if”,仿射約束)下,賦值的迭代域確切地是凸多面體,其形狀不依賴于分配輸入。然后可以靜態(tài)計算,并且應(yīng)用各種多面體運算(幾何運算、線性優(yōu)化、計算等)以便構(gòu)建程序的靜態(tài)分析和轉(zhuǎn)換。
下面,在每次運算W=f(R1,...,Rn)中區(qū)分讀取(R1,……,Rn)和寫入(W)。對于要靜態(tài)控制的程序P,把Ω(P)標注為如此得到的基本運算的集合。pseq是關(guān)于的順序執(zhí)行的階。約定:運算的讀取在寫入之前執(zhí)行:最后,把M(P)標注為由每個基本運算XEΩ(P)存取的存儲器位置的集合。把μ(X)標注為由X,μ:Ω(P)->M(P)存取(讀或?qū)?的位置。
為便于描述,下文中,稱基本運算為運算。
依賴性,調(diào)度
當(dāng)X在Y之前執(zhí)行時并且當(dāng)X和Y存取相同的存儲器位置(μ(X)=μ(Y))時,在這兩個運算X,Y∈Ω(P)之間存在依賴性X->Y。根據(jù)X和Y的性質(zhì)(讀或?qū)?,說說流依賴性(W然后R)、反依賴性(R然后W)、或輸出依賴性(W然后W)。反依賴性和輸出依賴性僅表示對存儲器的存取沖突并且可以通過修改存儲器的使用來消除。事實上,僅考慮流依賴性,其表示由程序?qū)嵤┑挠嬎恪8_切地,我們關(guān)注流依賴性W->R,其中W是在R之前的μ(R)的最后一次寫入,換句話說,W定義由R讀取的值。該W是唯一的,被稱作R的源。我們把它標識為s(R)。
操作符∧表示“和”。
調(diào)度是應(yīng)用θ,其把執(zhí)行時間與程序的每次運算相關(guān)聯(lián),其屬于總體安排的集合,θ:Ω(P)->(T,<<)。
大多數(shù)程序變換(優(yōu)化等)可以與調(diào)度函數(shù)寫在一起。多面體模型提供用于計算仿射調(diào)度的技術(shù),其中<<表示詞典式的順序。如果調(diào)度遵守依賴性因果關(guān)系,則它是正確的,因果關(guān)系即如果在兩個運算X、Y之間存在X->Y依賴性即X的執(zhí)行順序先于Y的執(zhí)行順序。由θ引起的執(zhí)行順序標注為通過在必要時在與上述的s(R)相關(guān)的關(guān)系中用替換定義Sθ。
作為示例,考慮由高級語言表示的以下Prog程序:
該Prog程序是執(zhí)行迭代二項式松弛計算的要靜態(tài)控制的Jacobi1D程序。表的邊界被初始化(分配I1和I2),然后,迭代計算三個格子(分配S和T)的每個窗口上的平均值。最后,收集結(jié)果(R分配)。
分配的迭代域在圖2給出。分配域I1、I2和R縮減為一點。分配域S和T是矩形,它們在此重疊以便于表示。黑點表示S的迭代,并且叉號表示T的迭代。
該程序包括所有類型的依賴性,圖中的箭頭示出若干示例。
-流依賴性:(I1,)->(S,t,),(I2,)->(S,t,N-2),(S,t,i)->(T,t,i),
(T,t,i)->(S,t+1,i-1),(T,t,i)->(S,t+1,i),(T,t,i)->(S,t+1,i+1),(T,K-1,1)->>(R,)。
-反依賴性(虛線):
(S,t,i)->(T,t,i-1),(S,t,i)->(T,t,i),(S,t,i)->(T,t,i+1),(T,t,i)->(S,t+1,i)
-輸出依賴性:(S,t,i)->(S,t+1,i)(T,T-1,1)->(R,),所有依賴性被包括在流依賴性中,因此不被示出。
有效調(diào)度是θ(|1,)=θ(|2,)=(0),θ(S,t,i)=(1,2t+i,t,0),θ(T,t,i)=(1,2t+i+1,t,1),θ(R,)=(2)。
對應(yīng)的執(zhí)行順序如下。首先在相同時間執(zhí)行I1和I2。然后,間隔地執(zhí)行示例S和T,如圖所示。最后,執(zhí)行R。
在滿足所有依賴性的意義上,該調(diào)度是有效的。例如,遵守第一反依賴性,因為θ(S,t,i)=(1,2t+i,t,0)<<θ(T,t,i-1)=(1,2t+i-1+1,t,1)=(1,2t+i,t,1)。
存儲器分配,唯一指定
存儲器分配是應(yīng)用σ,應(yīng)用σ把存儲器位置的新集合M’中的交替位置σ(m)與由P尋址的每個存儲器位置m∈M(P)相關(guān)聯(lián),σ:M(P)->M’。在確定調(diào)度θ的情況下,如果存在W1、W2、R1、R2∈M(P),其中μ(W1)=μ(R1)=m,μ(W2)=μ(R2)=m’,θ(W1)<<(R2),以及θ(W2)<<θ(R1),則兩個存儲器位置m和m’∈M(P)θ互相干擾。然后注意m><θm′。存儲器分配σ是θ正確的,如果的話。
變換的程序完全由以下數(shù)據(jù)描述:程序P的運算Ω(P),有效調(diào)度θ,以及θ正確分配σ:(Ω(P),θ,σ)。初始程序可以寫為(Ω(P),θseq,Id),并且獲得計算的等價物:(Ω(P),θsep,Id)=(Ω(P),θ,σ),ID是數(shù)據(jù)的初始分配。
如果每個寫入操作寫不同的存儲器位置,換句話說對于W1,W2εΩ(P),σ(W1)=σ(W2)=>W(wǎng)1=W2,則程序處于唯一指定。為了把程序過渡為唯一指定,我們使用源函數(shù)s來讀取好位置。形成M’={W,W∈Ω(P)},并且對于Ω(P)的每次寫入W我們定義σ(W)=W和對于每次讀取我們定義σ(R)=s(R)。經(jīng)變換的程序(Ω(P),θ,σ)因此是唯一指定。
作為示例,為了使程序Prog過渡為唯一指定,開始計算源函數(shù)s(.)。
-s((I1,):a[0])=a[0],運算(I1,)的讀取a[0]的源在程序中不存在,因此保存a[0]的值作為輸入。
-出于相同原因:s((I2,):a[N-1])=a[N-1]。
-對于(S,t,i)的讀取,我們獲得以下源函數(shù):
在邊界(i=1或i=N-2)上,源是通過初始化分配(I1或I2)給出的。當(dāng)t=0時,源是表的初始值(如第一項)。此外,值是通過T的示例T((T,t-1,i-1)或(T,t-1,i)或(T,t-1,i+1))產(chǎn)生的。
通過向Prog程序應(yīng)用唯一分配,就獲得以唯一分配對Prog程序的讀取值,其中讀取值被完全擴展:
如此(在向S應(yīng)用了分配(t,i)→(t%1,i%1)之前),程序不再包括流依賴性,并因此可被調(diào)度為θ(S,t,i)=(1,t+i,t,0),θ(T),t,i)=(1,t+i,t,1)。I1、I2和R的調(diào)度是不變的。
圖3示出描述執(zhí)行順序。
各個格子的壽命的間隔S[t][i]是分開的,因此可以向S應(yīng)用分配σ(S[t][i]=S′[t%1][i%1]。下面描述在不按照階數(shù)θ的情況下在存儲器分配之后程序Prog的變換階段:
僅T維度是活躍的。分配函數(shù)(因此所用的存儲器空間)依賴于所選的調(diào)度。
規(guī)則進程網(wǎng)絡(luò)
規(guī)則進程網(wǎng)絡(luò)R是以下元素的數(shù)據(jù):
-P,進程集合。
-Cens={C1,...Cn},稱作管道的物理存儲器的集合,每個管道Cj是可尋址的緩存存儲器,j=1到n。管道被分為段,被叫作格子。
-連接P×M×P的集合。
-對于每個管道C∈Cens,寫入的歷史w(C)=W1C,...,WpC和讀取的歷史R(C)=R1C,...,RpC是不變的。該約束意味著每個進程的執(zhí)行軌跡是固定的。特別地,進程可以被但不僅被要靜態(tài)控制的程序描述。
-寫入和讀取之間的優(yōu)先順序被擴展以表示對于每個管道的寫入(wjc如果i<j)和讀取如果i<j)的順次順序。下文中,把Ω(R)標記為由網(wǎng)絡(luò)R執(zhí)行的運算的集合Ω(R)=∪C∈Cens R(C)∪W(C)。
R運算的調(diào)度θobs是可觀察的,如果其描述R運算的可能執(zhí)行的話,換句話說,如果對于的話。
要靜態(tài)控制的程序P的到規(guī)則進程網(wǎng)絡(luò)的編譯是以下元素的數(shù)據(jù)。
-放置
-分配管道
-同步集合,這確保對于每個進程或者的優(yōu)先順序以及遵守流依賴性
程序P的每次分配產(chǎn)生進程。
如果網(wǎng)絡(luò)的所有結(jié)束的執(zhí)行產(chǎn)生與P相同的計算,也就是如果完全在Ω(R)上定義的在R中的可觀察的調(diào)度是P的正確調(diào)度,則網(wǎng)絡(luò)就部分地等效于P。此外,如果網(wǎng)絡(luò)被確保無互鎖,可稱作網(wǎng)絡(luò)等效于P并且編譯是正確的。
根據(jù)本發(fā)明的DNP進程網(wǎng)絡(luò)和編譯
根據(jù)本發(fā)明的電路自動綜合方法和設(shè)備在由“前端”塊2實施的處理中使用稱為DPN(數(shù)據(jù)喚醒進程網(wǎng)絡(luò))的特定進程網(wǎng)絡(luò)。
“前端”塊2事實上在DPN進程網(wǎng)絡(luò)中對在輸入端提供的要靜態(tài)控制的程序執(zhí)行編譯。
DPN是滿足以下條件的規(guī)則進程網(wǎng)絡(luò):
-每個管道接納一個唯一源進程(即,被準許在管道中寫入的唯一進程)和一個唯一目的地進程(即,被準許在管道中讀取的唯一進程,在實施方式中,甚至存在唯一目的地進程的單個輸入端)。
-管道是讀寫阻塞存儲器;即,這是隨機讀寫存取存儲器使得如果其中存在的內(nèi)容未被讀出則進程不能寫入,并且相反地,如果要讀取的內(nèi)容未被寫入則不能讀出。
要靜態(tài)控制的程序P向DPN的編譯方案應(yīng)該滿足以下條件:
-對于管道的每次讀取,在同一管道寫入源:如果(P1,C,P2)是經(jīng)由管道C從P1向P2的連接,則
-選擇在Ω(R)上引起的順序全面的正確調(diào)度θ,并且選擇θ正確的分配σ。
-在每個進程上優(yōu)先順序是全面的,并且不在別處定義,
-對于每個寫入W,最后一個寫入釋放由W寫入的格子σ(W)。格子σ(W)然后應(yīng)該重新寫入以便能夠被讀取。
這樣的編譯是正確的:所得的DPN是與原程序P部分等效的并且從不產(chǎn)生互鎖。。
簡單的DPN包括三類進程:
-LD進程,讀取進入中央存儲器的數(shù)據(jù)。
-ST進程,把最終計算結(jié)果寫入中央存儲器中。
-正確地說,負責(zé)計算的Cal進程。
我們考慮要通過“前端”塊2翻譯為DPN的程序P和有效的調(diào)度θ。
為了容易構(gòu)建LD和ST進程,“前端”塊2,針對在遠程主存儲器的輸入上讀取到的每個數(shù)據(jù)表a,在程序P上增加以下操作系列:。
其中是Ω是表a的索引集合。
對于每個所寫的表b,“前端”塊2在程序上添加以下操作系列,其中d是任意矢量變量:
其中Ω是表b的索引的集合。
約定操作LDa在P的開始執(zhí)行,操作STb在P的結(jié)束執(zhí)行。因此,對于P的每個原始操作該屬性可被多維調(diào)度指定。
“前端”塊2通過在不同的進程上放置每個分配P={S1,...,Sn}來創(chuàng)建DPN網(wǎng)絡(luò),并且其中W、R1、…、Rn是通過分配實現(xiàn)的操作S:W=f(R1,...,Rn)。特別地,通過讀取的表a創(chuàng)建進程LDa,通過讀取的表b創(chuàng)建進程STb。這些進程到計算進程的連接被使用源功能s自然獲得。
“前端”塊2使每個進程具有以下部件:
-輸入端口,由進程實施的分配讀取基準。輸入端口是復(fù)用器,負責(zé)收集好的管道中的基準的值。
-輸出端口,發(fā)出由進程計算的值。輸出端口是解復(fù)用器,其把由進程計算的值寫入好的管道中。
為了構(gòu)建DPN,“前端”塊2計算這些部件并且分配每個管道(函數(shù)σ)就夠了。
復(fù)用,解復(fù)用
當(dāng)編譯程序P時,“前端”塊2針對每次讀取計算源函數(shù)。
對于一個操作(T的迭代域):W=f(R1,...,Rn),從中讀取R的源表現(xiàn)為以下形式:
其中Dk是閉合的凸多面體,uk是仿射函數(shù),并且Tk是程序的分配。
對于使得S寫入由基準R和T讀取的表的每對分配(S,T),“前端”塊2創(chuàng)建一個管道CS,T,R。如果D是S的迭代域,則CS,T,R是與D的維度dim D相等的維度的表。
這些管道然后被“前端”塊2經(jīng)由輸入端口和輸出端口通過如下方式進行連接到進程。
對于每次分配T∈{T1,...,Tn},對于T的每次讀取R,對于每個子句源s((T,i)的(Sk,uk(i)):R),“前端”塊2執(zhí)行以下操作:
-在與R相對應(yīng)的輸入端添加到管道CSk,T,R的連接,并且添加復(fù)用子句其在當(dāng)前迭代滿足時控制管道CSk,T,R的格子的讀??;
-在輸出端添加向管道CSk,T,R的連接,并且添加復(fù)用子句其在當(dāng)前迭代滿足時控制計算出的值到管道CSk,T,R的在格子的寫入。
根據(jù)構(gòu)造,每個管道CSk,T,R具有唯一源(Sk)以及唯一目的地(T)的單個端口。
用于分配T的每個輸入端口的復(fù)用器被調(diào)整以確定與分配的當(dāng)前迭代矢量相對應(yīng)并且提供恰當(dāng)管道及其用于該迭代值的格子的復(fù)用子句,并且以讀取該管道的該格子。
用于分配S的每個輸出端口的解復(fù)用器被調(diào)整以確定與分配的當(dāng)前迭代矢量相對應(yīng)并且提供恰當(dāng)管道及其用于該迭代值的格子的解復(fù)用子句,并且以將結(jié)果寫入該管道的該格子。
隨后,進程LD和ST被連接到DPN。實際上,當(dāng)Tk是進程LDa時,涉及進程的輸入值,并且由前端塊2進行的編譯自然的創(chuàng)建復(fù)用以便把好的值收集到由LDa寫入的管道中。
此外,輸出進程STb的復(fù)用器在其管道中收集用于b的每個格子的最終值。
舉例而言,圖4示出由前端塊2進行的Prog程序的編譯的結(jié)果。進程被具有黑線輪廓而無內(nèi)部圖案的盒體表示,進程LDa和ST(LOAD和STORE)由具有黑線輪廓并有內(nèi)部圖案的盒體表示。管道被具有細線輪廓并具有內(nèi)部圖案點的盒體表示,復(fù)用器和解復(fù)用器被細線輪廓表示而無內(nèi)部圖案。
每個計算進程具有一個或更多個輸入端口。每個輸入端口設(shè)置在其所專屬的復(fù)用器(在圖4上根據(jù)進程稱作“MUX”、“MUX1”、“MUX2”、“MUX3”)和進程之間。
復(fù)用器確定哪個是用于當(dāng)前迭代的恰當(dāng)?shù)墓艿酪约肮艿赖母褡?,并且讀取恰當(dāng)管道的該格子中的數(shù)據(jù)。
類似地,每個進程具有一個輸出端口,其向解復(fù)用器傳送當(dāng)前的計算結(jié)果,在圖4上稱作“DEMUX”。解復(fù)用器確定哪個是用于當(dāng)前迭代的恰當(dāng)?shù)墓艿酪约肮艿赖母褡硬⑶野呀Y(jié)果寫入一個或多個管道。
例如,在Prog程序中,計算與b[i]=a[i-1]+a[i]+a[i+1]對應(yīng)的分配S的進程具有三個輸入端口,其值分別為a[i-1]、a[i]、a[i+1]。對于a[i-1]的讀取,復(fù)用器MUX 1借助于源函數(shù)s((S,t,i):a[i-1])來確定當(dāng)i≥2∧t=0時,源是(LDa,i-1),其中選擇來自LOAD(a)的管道。與進程LOAD(a)對應(yīng)的解復(fù)用器被由[(t,i)→i-1](i≥2Λt=0)=i≥1給出。
DPN已經(jīng)被獲得并且針對每次賦值的每次讀取的每個源類似地操作。
在下文中,執(zhí)行賦值S的進程被稱為“進程S”并且執(zhí)行賦值T的進程被稱為“進程T”。
管道的分配
“前端”塊2還被調(diào)整以便在針對程序P編譯DPN網(wǎng)絡(luò)時創(chuàng)建用于每個管道的分配函數(shù)σ。
σ被用作管道尋址函數(shù)。向管道的任何請求都實際上通向管道
分配表現(xiàn)為模塊化仿射函數(shù)的坐標對應(yīng)于管道CTk,S,Rk的不同尺度的尺寸,這現(xiàn)在可以被前端塊2有效地構(gòu)建。
作為示例,與DPN網(wǎng)絡(luò)的構(gòu)建有關(guān),對于Prog程序,為了在S和T之間分配管道C,其中θ(S,t,i)=(t+i,t,0),θ(T,t,i)=(t+i,t,1)。前端塊2計算分配函數(shù)σ(t,i)=(t mod 1,i mod 1),例如如在以下文獻中描述的那樣:“Lattice-Based Arrary Contraction:From Theory to Practice”,Christophe Alias,Fabrice Baray,Alain Darte,Research Report RR2007-44,平行信息實驗室,ENS-里昂,2007年11月。換句話說,CS,T,b[i]是尺寸為1×1的二維管道,其以后被用σ訪問。
其可以通過簡單的寄存器實現(xiàn)。
管道的同步
在根據(jù)本發(fā)明的DPN網(wǎng)絡(luò)中,管道的讀寫阻塞:管道的格子在被(其源)寫入之前不可讀取并且格子在其當(dāng)前存儲的值在上一次未被讀取之前不能被寫入。
根據(jù)本發(fā)明,管道中的讀寫是同步的,以便強行獲得該屬性。
“前端”塊2因此被調(diào)整以針對每個管道c構(gòu)建同步單元Sc,管道c連接生產(chǎn)者進程P的輸出端口到消費者進程C的輸入端口Rk。
在管道c中的生產(chǎn)者的每次迭代W(寫入)和消費者的每次迭代R(讀取),在其執(zhí)行之前,導(dǎo)致向同步單元Sc提供執(zhí)行請求,同步單元Sc決定是否授權(quán)其執(zhí)行。
為了強制流依賴性,在本發(fā)明的實施方式中,同步單元決定如果想讀取的數(shù)據(jù)還未產(chǎn)生則停止消費者的執(zhí)行。為了強制反依賴性,在本發(fā)明的實施方式中,同步單元決定如果想刪除在上次還未讀取的數(shù)據(jù)則停止生產(chǎn)者的執(zhí)行。注意不必強制輸出依賴性,因為所有寫入都以調(diào)度順次順序被生產(chǎn)者執(zhí)行。
這兩個事件在以下方式中例如表現(xiàn)為同步單元使用同步單元的以下函數(shù)Sc,其中表示(即,θ(X)是先于或等于θ(Y))并且s()是源函數(shù),以便確定對消費者進程C的請求的響應(yīng)是用于進程C的Freeze(C)信號,或確定對生產(chǎn)者進程P的請求的響應(yīng)是用于進程P的Freeze(P)信號:
Freeze(C)信號中止消費者進程C的執(zhí)行,并且Freeze(P)中止消費者進程P的執(zhí)行。
在實施方式中,F(xiàn)reeze信號存在的時間與其條件為真的時間一樣長。當(dāng)其條件變?yōu)榧?,則其停止被發(fā)射,并且進程恢復(fù)執(zhí)行。
在另一實施方式中,在被測試的條件為真時,響應(yīng)于進程的請求,F(xiàn)reeze信號被發(fā)射一次。當(dāng)條件為假或從其為假時起,向進程發(fā)射準許信號。
在上文的Sc的公式中的第一條件意味著消費者的執(zhí)行在要讀取的數(shù)據(jù)還未被寫入時中斷,換句話說,當(dāng)生產(chǎn)者P執(zhí)行在由R讀取的數(shù)據(jù)的寫入s(R)之前的寫入W。
第二條件意味著生產(chǎn)者P的執(zhí)行在未完成讀取的數(shù)據(jù)的刪除點時中止。
換句話說,在生產(chǎn)者P試圖寫入還應(yīng)該被R’稍后讀取的格子σc(W)時。
源函數(shù)s(R)已經(jīng)被讀取管道c的進程C的復(fù)用器計算出來。
Freeze(P)條件可以以保守的方式被簡化為(實際上,如果Freeze(P)是真的,則必有)。
驗算:如果Freeze(P)是真,則存在R”,其中可通過的傳遞性獲得結(jié)果。
該定理意味著每當(dāng)應(yīng)該阻塞生產(chǎn)者時,變真。。相反,可在要寫入的格子已被無用地阻塞生產(chǎn)者的消費者釋放之后的多次迭代繼續(xù)為真。特別地,當(dāng)時,生產(chǎn)者應(yīng)該預(yù)料R在執(zhí)行。最后,生產(chǎn)者嚴格遵守由用戶指定的調(diào)度θ,而不過分執(zhí)行。因此,提供盡可能并行的調(diào)度是用戶的責(zé)任。
同步單元Sc遵守數(shù)據(jù)依賴性并且不產(chǎn)生互鎖。
作為示例,參照圖5,重新考慮在進程S(生產(chǎn)者)和T(消費者)之間的管道c=CS,T,b[i]。
在啟動每個新的迭代(tc,ic)之前,消費者進程T向管道c(該管道c中其復(fù)用器已確定應(yīng)該讀取基準)的同步單元傳送新的迭代的執(zhí)行準許請求,新的迭代的標識符(tc,ic),以及生產(chǎn)者進程S的預(yù)期對應(yīng)迭代(ts,is)的標識符,即其導(dǎo)致該基準在管道c中的寫入。(ts,is)是通過源函數(shù)s獲得的,“s”從中而來。消費者進程只要未被同步單元準許就不開始該新迭代。
類似地,生產(chǎn)者進程S,在開始每個新迭代(tp,ip)之前,向管道c(在該管道c中其解復(fù)用器已經(jīng)確定應(yīng)該寫入結(jié)果)的同步單元傳送新迭代的執(zhí)行準許請求和新迭代的標識符(tp,ip)。只要同步單元不準許生產(chǎn)者進程就不開始該新迭代。
考慮同步單元剛接收到消費者進程T的新迭代(tc,ic)的執(zhí)行準許請求,其新迭代(tc,ic)的標識符,以及生產(chǎn)者進程S的預(yù)期對應(yīng)迭代(ts,is)的標識符。
如果θ(S,tS,iS)<<θ(S,tP,iP)((tP,iP)是由S傳送到同步單元的生產(chǎn)者進程S的上一個迭代標識符)并且θ是調(diào)度函數(shù),則同步單元準許消費者T的新迭代(tc,ic)。對應(yīng)命令SmdT因此被同步單元作為響應(yīng)傳送到消費者進程T(如前所述,該命令因此是準許信號或者缺少根據(jù)前述實施方式的Freeze(C)類型的信號)。
如果相反并且該表達式保持為真((tp,ip)是由S傳送到同步單元的生產(chǎn)者進程S的上一個迭代標識符),則同步單元不準許消費者T的新迭代(tc,ic)。對應(yīng)命令SmdT因此被同步單元作為響應(yīng)傳送到消費者進程T(如前所述,該命令因此是根據(jù)前述實施方式的連續(xù)或點狀的Freeze(C)類型的信號)。
現(xiàn)在考慮同步單元剛接收生產(chǎn)者進程S的新迭代的執(zhí)行準許請求和新迭代的標識符(tp,ip)。
如果(tc,ic)是由T傳送到同步單元的消費者進程T的上一個迭代標識符),則同步單元準許生產(chǎn)者S的新迭代(tp,ip)。對應(yīng)命令Smds因此被同步單元作為響應(yīng)傳送到生產(chǎn)者進程S(如前所述,該命令因此是準許信號或者缺少根據(jù)前述實施方式的Freeze(P)類型的信號)。
如果相反θ(T,tC,iC)<<θ(S,tP,iP),并且該表達式保持為真,則同步單元不準許生產(chǎn)者進程S的新迭代(tp,ip)。對應(yīng)命令Smds因此被同步單元作為響應(yīng)傳送到消費者進程T(如前所述,該命令因此是根據(jù)前述實施方式的連續(xù)或點狀的Freeze(P)信號)。
通過把在前面示例中指出的與用于Prog程序的DPN網(wǎng)路的構(gòu)建有關(guān)的函數(shù)作為調(diào)度函數(shù),S是生產(chǎn)者進程并且T是消費者進程,則前面指出的與Freeze(C)和Freeze(P)有關(guān)的表達式變?yōu)椋?/p>
Freeze(C),如果并且只要即
如果并且只要(tP+iP<ts+iS)∨(tP+iP=tS+iS∧tP<tS)∨(tP+iP=tS+iS∧tP=tS);
∨表示“或者”。
Freeze(P),如果并且只要(tC+iC,tC,1)<<(tP+iP,tP,0),即,
如果并且只要tC+iC<tP+iP)∨(tC+iC=tP+iP∧tC<tP)。
本質(zhì)上,詞典式的順序(<<)產(chǎn)生極其多余的表達式,這允許產(chǎn)生極其簡單的測試電路。
注意在其他實施方式中,其他同步規(guī)則被同步單元實施以便在與同一管道相關(guān)聯(lián)的生產(chǎn)者進程和消費者進程之間進行同步。
在“前端”塊2基于Prog程序的算術(shù)表達轉(zhuǎn)換為如此實現(xiàn)的DPN中間表達之后,該中間表達被提供給“后端”塊3。
已知,后端”塊3實際上基于該DPN中間表達構(gòu)成電路塊??墒褂美绗F(xiàn)有的綜合工具,如C2H,如在以下文獻中描述的那樣:Christophe Alias,Alain Darte,和Alexandru Plesco.Optimizing DDR-SDRAM Communications at C-Level for Automatically-Generated Hardware Accelerators.An Experience with the Altera C2H HLS Tool.In 21st IEEE International Conference on Application-specific Systems,Architectures and Processors(ASAP'10),雷恩,法國,329-332頁,July 2010.IEEE Computer Society。每個進程、管道、復(fù)用器被描述作為C2H函數(shù)。每個函數(shù)被C2H在具體模塊中表示。模塊之間的連接是在C2H通過使用連接編譯指示指定的。每個連接被C2H在標準具體總線中表現(xiàn)。
根據(jù)本發(fā)明的電路自動綜合設(shè)備允許自動生成電子電路,所述電子電路快速并且通過要求有限的占用物理體積來實施高級語言編寫的程序P的計算。
存在以進程網(wǎng)絡(luò)(KPN、SDF等)形式的多種并行執(zhí)行模型。本發(fā)明提出根據(jù)適于電路綜合具體約束的并行執(zhí)行模型(其中數(shù)據(jù)與遠程存儲器的轉(zhuǎn)移是顯式的)來編譯為DPN進程網(wǎng)絡(luò)(數(shù)據(jù)感知處理網(wǎng)絡(luò))。到DPN的這種編譯是可靠的,這是因為其把順序程序轉(zhuǎn)換為等效、有保障而無互鎖的DPN進程網(wǎng)絡(luò)。輸入/輸出(即,數(shù)據(jù)與遠程存儲器的轉(zhuǎn)移)是顯式的并且通信管道是比FIFO更少約束的等同性能的緩存存儲器,由同步單元控制。