欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

編譯方法以及編譯器的制作方法

文檔序號:6570840閱讀:355來源:國知局
專利名稱:編譯方法以及編譯器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及編譯方法以及編譯器,特別是涉及在嵌入式設(shè)備中自動生 成軟件的執(zhí)行代碼的編譯方法以及編譯器。
背景技術(shù)
圖1是示出在嵌入式設(shè)備中生成軟件的執(zhí)行代碼的現(xiàn)有編譯器的結(jié)構(gòu) 的圖。圖1所示的編譯器為了將嵌入式設(shè)備的軟件作為單一的應(yīng)用程序有
效地執(zhí)行而進行代碼的優(yōu)化。圖1所示的編譯器包括翻譯裝置(front end,前端)2、優(yōu)化裝置(middle path,中間路徑)4、以及代碼生成裝置
(back end,后端)5。前端2從源代碼1生成中間語言3-1,中間路徑4 從中間語言3-1生成中間語言3-2。后端5從中間語言3-2生成優(yōu)化后的執(zhí) 行代碼6。在由編譯器進行翻譯作業(yè)的過程中,中間路徑4執(zhí)行簡單的重 構(gòu),例如刪除不需要的變量、封裝命令、或者對調(diào)用函數(shù)進行內(nèi)聯(lián)展開
(inline expansion )。
在上述用于優(yōu)化執(zhí)行代碼的重構(gòu)中,只進行命令代碼的刪除或簡單的 替換,而不進行諸如改變源代碼1中所描述的處理序列的結(jié)構(gòu)本身的重 構(gòu)。
已有在開始執(zhí)行運動圖像處理或通信處理等處理之后與CPU的處理能 力無關(guān)地在預(yù)定的時刻周期地輸出中間計算結(jié)果的時序列處理的軟件。在 使用圖1所示的編譯器對上述的按時間序列描述的軟件進行編譯來生成執(zhí) 行代碼的情況下,即使在從處理的開始到結(jié)束為止的總計算量與CPU的處 理能力匹配的情況下,有時也會如圖2的例子所示,根據(jù)開始進行處理 P3、 P4的順序的不同而出現(xiàn)處理跟不上而延遲的情況。圖2是用于說明時 序處理的延遲的圖。在圖2中,P1 P4表示處理,tl表示開始條件判斷時 刻,t2表示處理P3的實際結(jié)束時刻,t3表示處理P4的期待的結(jié)束時刻,
6t4表示處理P4的實際結(jié)束時刻、t5表示處理P3的期待的結(jié)束時刻。此 時,處理P4的實際結(jié)束時刻t4落后于處理P4的期待結(jié)束時刻t3,發(fā)生了 延遲D1。
通常,即使如上所述CPU的平均處理能力足夠,從局部處理的觀點來 說也可以想到會發(fā)生CPU的處理能力不足的狀態(tài),此時軟件如圖3所示那 樣通過在設(shè)計階段定義緩沖器8來避免處理延遲的問題。圖3是用于說明 避免時序處理的延遲的圖。在圖3中,對于與2相同的部分標注相同的符 號,并省略對其的說明。在圖3中,P3y、 P4y表示第y個執(zhí)行的處理 P3、 P4, P4z表示第z個執(zhí)行的處理P4, t2y表示處理P3y的實際結(jié)束時 亥l」,t3y表示處理P4y的期待的結(jié)束時刻,t5y表示處理P3y的期待的結(jié)束 時刻。
圖4是示出現(xiàn)有動態(tài)調(diào)度器的映象(image)的圖。在該圖中,11是 任務(wù)或者線程,12是從任務(wù)或者線程11報告的執(zhí)行信息表,13是基于信 息表來執(zhí)行調(diào)度的動態(tài)調(diào)度器,14表示操作系統(tǒng)(OS) 16內(nèi)的上下文切 換和處理管理功能,15表示根據(jù)動態(tài)調(diào)度器13的指示的切換。當現(xiàn)有的 嵌入式設(shè)備中高效地并行(同時)執(zhí)行多個任務(wù)或線程11時,圖4所示 的動態(tài)調(diào)度器13使應(yīng)用程序具有動態(tài)收集概括(dynamic profiling)功 能,從而隨時向OS報告存儲器和CPU的使用量。動態(tài)調(diào)度器13參照實 時收集的信息的信息表12來動態(tài)定義任務(wù)或線程11的優(yōu)先級,并通過 OS 16的上下文切換處理管理功能14進行任務(wù)或線程11的切換15。
如上所述,用于高效地執(zhí)行多個任務(wù)或線程11的動態(tài)調(diào)度器13是與 和OS 16聯(lián)動的應(yīng)用程序分開動作的軟件,即為外部(或者外設(shè))調(diào)度 器。因此,從作為對象的軟件所需要的CPU計算量的觀點來看,這種動態(tài) 調(diào)度器13被看作是純粹的開銷。
因此,為了避免由參照信息表12定義優(yōu)先級的動態(tài)調(diào)度器13產(chǎn)生開 銷,通常采用使用開銷小的調(diào)度器的方法,這種調(diào)度器基于輪詢或者按照 事先設(shè)定好的固定的優(yōu)先級非主動地動作,但這種方法無法高效地執(zhí)行所 有的軟件。
為了生成使處理時間最短的執(zhí)行代碼、并且避免由動態(tài)調(diào)度器13產(chǎn)生的開銷,有時采用在執(zhí)行代碼中嵌入用于定義執(zhí)行開始的靜態(tài)調(diào)度器機 構(gòu)。
靜態(tài)調(diào)度器作為對存儲器和CPU使用量不進行動態(tài)報告的替代手段, 編譯時關(guān)注分支命令,基于期望的信息表來決定編譯時的調(diào)度,其中,所 述信息表是對從分支命令跳入的從屬處理的存儲器或CPU的使用量乘以分 支預(yù)測的系數(shù)而獲得的。
相對于動態(tài)執(zhí)行最優(yōu)處理的動態(tài)調(diào)度器,靜態(tài)調(diào)度器雖然執(zhí)行時調(diào)度 時的開銷小,但特別是對于具有每次執(zhí)行時運算量或處理數(shù)據(jù)量發(fā)生變化 的結(jié)構(gòu)的軟件來說,調(diào)度精度下降,處理時間不一定最短。因此,靜態(tài)調(diào) 度器通常被用于預(yù)先知道要在CPU上處理的運算量的軟件。
現(xiàn)有的編譯器在進行代碼級的優(yōu)化或進行按時間序列描述的源代碼的 編譯時,分析數(shù)據(jù)的依賴性或控制的依賴性,分割可并行執(zhí)行的處理,生 成對于并行配置的CPU的執(zhí)行代碼。由此,從按時間序列描述的源代碼提 取更多的可并行執(zhí)行的處理,生成從執(zhí)行開始到結(jié)束的處理時間最短的執(zhí) 行代碼。
例如,在專利文件1或?qū)@募?中提出了動態(tài)調(diào)度器。另外,例 如,在專利文件2中提出了多級調(diào)度器。
專利文件l:日本特開平6-110688號公報; 專利文件2:日本特開2003-84989號公報; 專利文件3:日本特開平8-212070號公報。

發(fā)明內(nèi)容
嵌入式設(shè)備的軟件運行環(huán)境隨著高級化的OS和編譯環(huán)境而變化,并 且曾在個人計算機(PC)、工作站等動作的通用軟件也已能夠在嵌入式設(shè) 備中動作。另一方面,在嵌入式設(shè)備中,希望利用CPU和存儲器等有限的 資源高效地運行作為對象的軟件。
在現(xiàn)有的嵌入式設(shè)備中,啟動不伴有重構(gòu)的代碼優(yōu)化級別的編譯器, 或者在啟動多個任務(wù)或線程的軟件結(jié)構(gòu)的情況下啟動調(diào)度器。
另一方面,為了更加有效地運行軟件,需要由軟件的安裝者進行適合于作為對象的嵌入式設(shè)備手動的移植操作。
如上所述,在嵌入式設(shè)備有限的軟件運行環(huán)境中,當運行軟件時,特 別是當運行以按時間序列描述的源代碼在預(yù)定的時刻周期地輸出中間計算 結(jié)果的時序處理的應(yīng)用程序時,被要求通過編譯器自動生成低開銷、高調(diào) 度精度、且可高效利用CPU和存儲器等資源的執(zhí)行代碼。
因此,本發(fā)明的目的在于,實現(xiàn)一種即使在有限的軟件運行環(huán)境中也 能夠高效地生成執(zhí)行代碼的編譯方法以及編譯器。
上述的問題能夠通過以下的編譯方法解決,該編譯方法是一種通過計 算機編譯軟件的編譯方法,所述軟件被時序地處理并以事先規(guī)定的定時輸 出中間結(jié)果,所述編譯方法的特征在于,包括提取步驟,由所述計算機 從包含在所述軟件的源代碼中的處理序列提取與并列處理和條件分支相關(guān) 的處理模塊;以及生成步驟,由所述計算機對所提取的處理模塊進行重 構(gòu),生成執(zhí)行代碼。
上述的問題能夠通過以下的編譯器解決,所述編譯器通過計算機進行 軟件的編譯,所述軟件被時序地處理并以事先規(guī)定的定時輸出中間結(jié)果, 所述編譯器的特征在于,包括前端,所述前端通過所述計算機將所述軟 件的源代碼翻譯成第一中間語言并將所述第一中間語言保存在存儲部中; 中間路徑,所述中間路徑通過所述計算機基于保存在所述存儲部中的所述 第一中間語言,從包含在所述軟件的源代碼中的處理序列提取與并列處理 和條件分支相關(guān)的處理模塊,對所提取的處理模塊進行重構(gòu),生成第二中 間語言并將所述第二中間語言保存在存儲部中;以及后端,所述后端通過 所述計算機基于保存在所述存儲部中的所述第二中間語言自動生成執(zhí)行代 碼。
發(fā)明效果
根據(jù)本發(fā)明,能夠?qū)崿F(xiàn)即使在有限的軟件運行環(huán)境中也能夠高效地生 成執(zhí)行代碼的編譯方法以及編譯器。


圖1是示出現(xiàn)有編譯器的結(jié)構(gòu)的圖;圖2是用于說明時序處理的延遲的圖3是用于說明避免時序處理的延遲的圖4是示出現(xiàn)有動態(tài)調(diào)度器的映象的圖5是示出本發(fā)明編譯器的一個實施例的結(jié)構(gòu)的圖6是用于說明構(gòu)成軟件的源代碼的分類的圖7是示出表現(xiàn)了語句的依賴關(guān)系的依賴圖的一個示例的圖8是示出以圖7的依賴圖為基礎(chǔ)進行處理順序的互換的示例的圖9是示出軟件的流程結(jié)構(gòu)例的圖IO是示出實施例的第一階段的處理的流程圖11是用于說明將無條件跳轉(zhuǎn)以及環(huán)處理的模塊作為運算代入處理 模塊進行重新定義的圖12是用于說明各運算代入處理模塊之間的重新定義的圖13是用于說明線程化處理模塊以及調(diào)度化處理模塊的重新定義的
圖14是用于說明線程化處理模塊以及調(diào)度化處理模塊的圖15是示出實施例的第二階段的處理的流程圖16是用于說明向線程化處理模塊中追加語句的方法的圖17是用于說明向調(diào)度化處理模塊中追加語句的方法的圖18是用于說明最外圍調(diào)度化處理模塊的定時器處理的圖19是用于說明實施例的第三階段的處理的流程圖20是示出實施例的動作時的時序圖的映象的圖21是將圖2的現(xiàn)有方法和本實施例的時序圖的映象進行比較圖; 圖22是示出實施例的調(diào)度化處理模塊的映象的圖23是示出對實際的程序進行編譯時對于現(xiàn)有方法和本實施例的資
源利用效率的測定結(jié)果的圖。
標號說明
31源代碼 32前端33-1、 33-2中間語言
34中間路徑
35后端
36執(zhí)行代碼
81任務(wù)或線程
83動態(tài)調(diào)度器
84上下文切換和處理管理功能 86 OS
88定時器功能
具體實施例方式
本發(fā)明的編譯方法以及編譯器通過進行重構(gòu)來生成能夠?qū)崿F(xiàn)小開銷并 可提高CPU等資源的利用效率的執(zhí)行代碼,在該重構(gòu)當中,通過編譯時的 中間語言的預(yù)處理將在嵌入式設(shè)備上動作的軟件中按時間序列描述的軟件 的源代碼轉(zhuǎn)換成任務(wù)或線程,并生成調(diào)度代碼。
艮口,在嵌入式設(shè)備上動作的應(yīng)用程序中,對于進行運動圖像處理或通 信處理等時序處理的環(huán)結(jié)構(gòu)的應(yīng)用程序進行重構(gòu),由此通過在執(zhí)行吋必要 的定時進行必要的運算,在不必要時釋放CPU的方法來提高包括CPU在 內(nèi)的資源的利用效率,在所述重構(gòu)中,從在于編譯的初始階段已完成結(jié)構(gòu) 分析的中間語言(中間代碼)之上按語句級別分類的處理模塊,構(gòu)建由條 件分支的處理模塊構(gòu)成的調(diào)度器,生成定時器處理器(timer handler),提 取在條件分支后被執(zhí)行的代入運算處理的處理模塊,轉(zhuǎn)換成線程,根據(jù)等 待來釋放CPU,插入對信號進行應(yīng)答的蘇醒(wake-up)機構(gòu),
如上所述,在本發(fā)明中,將作為執(zhí)行對象軟件的基礎(chǔ)的源代碼在編譯 過程的中間語言級別上進行分析、分類,提取處理模塊,并從這些處理模 塊中重新定義可并行(同時)處理的處理模塊以及與調(diào)度相關(guān)的處理模 塊,插入必要最低限度的語句。由此,刪除不需要的外部語句(代碼), 能夠通過重構(gòu)來實現(xiàn)作為對象的軟件的專用調(diào)度器。
實施例圖5是示出本發(fā)明的編譯器的一個實施例的結(jié)構(gòu)的圖。本編譯器的實 施例采用了本發(fā)明的編譯方法的一個實施例。在本實施例中,本發(fā)明適用 在了生成嵌入式設(shè)備上的軟件的執(zhí)行代碼的情況。嵌入式設(shè)備是包括CPU 等處理器和存儲器等存儲部、并由處理器執(zhí)行存儲在存儲部內(nèi)的程序的、 具有公知的硬件結(jié)構(gòu)的計算機(或者計算機系統(tǒng))。
圖5所示的編譯器對代碼進行優(yōu)化,以將嵌入式設(shè)備的軟件作為單一
的應(yīng)用程序來高效運行。圖5所示的編譯器包括翻譯裝置(front edge, 前端)32、優(yōu)化裝置(middle path,中間路徑)34以及代碼生成裝置 (back edge,后端)35。前端32從源代碼31生成中間語言33-1并將其保 存在存儲部中,中間路徑34從保存在存儲部的中間語言33-1生成中間語 言33-2并將其保存在存儲部中。后端35從保存在存儲部中的中間語言33-2生成優(yōu)化后的執(zhí)行代碼36,并根據(jù)需要將該執(zhí)行代碼36保存在存儲部 中。在由編譯器進行翻譯操作的過程中,中間路徑34進行不需要的變量 的刪除、命令的封裝、調(diào)用函數(shù)的內(nèi)聯(lián)展開等的單純的重構(gòu)。前端32和 后端35是單純的翻譯裝置,不能主動地優(yōu)化執(zhí)行代碼。當優(yōu)化代碼時, 由于由后端35直接譯解前端32所生成的中間語言33-1,并生成執(zhí)行代 碼,因此不使用中間路徑34。
通常,編譯處理將以源代碼表示的處理序列轉(zhuǎn)換成能夠被作為對象的 CPU等計算裝置(處理器)譯解的執(zhí)行代碼。另外,在中間路徑中,通過 刪除不傳播的變量以及數(shù)學(xué)式語句、或進行子程序的內(nèi)聯(lián)展開、將環(huán)以迭 代單位展開的展開處理等通用的優(yōu)化方法,來生成更高效的執(zhí)行代碼。
與此相對,本實施例的特點在于,生成將嵌入中間路徑34中的有效 的執(zhí)行代碼的方法。圖5所示的中間路徑34將中間語言33-1作為輸入并 通過以下所述的步驟進行重構(gòu),生成中間語言33-2。在中間語言33-l級別 上進行重構(gòu)。因此,前端32和后端35可以使用已有的,而不需要進行變 更,中間路徑34可以通用地嵌入已有的編譯器中。
圖6是用于說明構(gòu)成軟件的源代碼31的分類的圖。圖6示出了將構(gòu)成 軟件的源代碼31在語句級別進行分類的情況,所有的源代碼31在被翻譯 成中間語言33-1之后,能夠分為下述任一個處理類別pSl ps4。處理類別pSl表示進行運算并將運算結(jié)果代入存儲器或寄存器等存儲部中的運算 代入處理。處理分類ps2表示以包含后沿的跳轉(zhuǎn)命令表示的循環(huán)處理,即 表示是后沿跳轉(zhuǎn)(back edge jump)。處理類別ps3表示以條件分支或附帶 條件的跳轉(zhuǎn)命令表示的分支處理。處理類別ps4表示子程序以及函數(shù)調(diào)用 等,表示無條件跳轉(zhuǎn)命令。
在本實施例中,關(guān)注任意結(jié)構(gòu)的中間語言33進行重構(gòu),因此可以在 任何位置進行通用的優(yōu)化處理,但為了原樣使用環(huán)結(jié)構(gòu),在進行重構(gòu)之前 不應(yīng)用展開(unrolling)方法等循環(huán)優(yōu)化方法。
編譯器在生成中間語言33-2時肯定在其內(nèi)部具有變量表,中間語言 33-2的各語句采用升序編號,并且包括參考的變量(式的右邊)和定義的 變量(式的左邊)。當以Sx表示第x個語句時,以(式l)表示Sx的參 考變量的集合,用(式2)表示Sx的定義變量的集合。
Use(Sx) (式l)
Def(Sx) (式2) (式1)和(式2)還適用于集合化的語句組SG,對第y個語句組 SGy同樣地定義(式3)禾卩(式4)。
Use(SGy) (式3)
Def(SGy) (式4)
另外,當沒有定義以及參考的變量時,使用空集O來表示。
當語句Sx是條件分支語句時,由于只存在用于判斷條件的參考變 量,因此(式5)成立。
Def(Sx)=①、Use(Sx)共① (式5)
當語句Sx為由于調(diào)用子程序而引起的無條件跳轉(zhuǎn)語句時,(式6)成 Def(Sx) = Use(Sx戶① (式6)
語句間的依賴關(guān)系以相互定義和參考的變量集合是否包含同一個要素 來定義。就第m個和第n個語句來說,在從(式1)和(式2)導(dǎo)出的變 量的集合中,當以nKn的關(guān)系有(式7)成立時,存在正向依賴性。
Def(Sm) fUse(Sn) # O (式7)其中,作為表現(xiàn)Sm和Sn具有正向依賴性5的式子,定義(式8)。 Sm 5 Sn (式8)
當以m>n的關(guān)系有(式7)成立時,存在負向依賴性。作為表現(xiàn)Sm 和Sn具有負向依賴性5i的式子,定義(式9)。 Sm 5i Sn (式9) 另外,當(式IO)成立時,存在輸出依賴性。 <formula>formula see original document page 14</formula>作為表現(xiàn)Sm和Sn具有輸出依賴性5o的式子,定義(式ll)。<formula>formula see original document page 14</formula>就滿足(式11)的Sm和Sn來說,當對于滿足nKk〈n關(guān)系的任意的 k有(式12)成立時,用Sm定義的變量在任何位置都不被參考,能夠通 過用Sn覆蓋來削除Sm。<formula>formula see original document page 14</formula>
將(式8)、(式9)、(式11)通常稱作依賴性方程式,通過對所 有的語句導(dǎo)出(式1)和(式2),能夠制作表現(xiàn)各語句間的依賴關(guān)系的
圖7是示出用于表現(xiàn)語句的依賴關(guān)系的依賴圖的一個示例的圖。在該 圖中,Sa Sf表示語句。在圖7所示的例子中示出了語句Sd參考語句Sa 的定義結(jié)果,在語句Sf中定義語句Sd所參考的變量。另外,語句Sb定義 的變量在任何位置都不被使用而在語句Sf中被重新定義,因此認為(式 12)成立,從而語句Sb將從代碼中刪除。
原則上,滿足(式8)、(式9)以及(式11)的關(guān)系的語句是滿足 某些依賴關(guān)系的語句,不能互換處理順序。換句話說,(式8)、(式 9)以及(式ll)中任何關(guān)系都不成立的語句之間,能夠互換處理順序。
從上述的觀點出發(fā),在圖7中,當如(式13)所示將由語句Sa和語 句Sd構(gòu)成的組設(shè)為SGx、并將由語句Sc和語句Se構(gòu)成的組設(shè)為SGy 時,從(式14)可以看出,這些組SGx和Sgy之間不存在依賴關(guān)系,因 此能夠相互替換處理順序。在(式14)中,"-5"表示不存在依賴關(guān) 系。另外,如上所述由于可以刪除語句Sb,因此圖7所示的依賴圖與圖8所示的圖等效。圖8是示出在圖7的依賴圖的基礎(chǔ)上互換了語句的處理順 序即排序后的例子的圖。
SGx=(Sa, Sd) SGy=(Sc, Se) (式13)
即,
Def(SGx)= Def(Sa) U Def(Sd), Use (SGx)= Use (Sa) U Use (Sd) Def(SGy)= Def(Sc) U Def(Se), Use (SGy)= Use (Sc) U Use (Se)
并且,
(Def(Sa)或Def(Sd))H(Use(Sc)或Use(Se))二O (Def(Sa)或Def(Sd))P(Use(Sc)或Use(Se))二O (Def(Sa)或Def(Sd))H(Use(Sc)或Use(Se))二① 成立,因此能夠得到(式14)。 SGx"5SGy (式14)
圖9是示出軟件的流程結(jié)構(gòu)例的圖。圖9中的pSl ps4分別示出與圖 6所示的處理類別pSl ps4的處理對應(yīng)的處理模塊。如圖9所示,被展開 為中間語言的語句序列采用了在多個代入處理的處理模塊pSl之間插有條 件分支的處理模塊ps3或無條件跳轉(zhuǎn)的處理模塊ps4的方式。條件分支的 處理模塊ps3或無條件跳轉(zhuǎn)的處理模塊ps4不是示出數(shù)據(jù)的依賴性而是示 出控制結(jié)構(gòu)的模塊,并且處理流程被看作暫時被中斷,因此將在圖5所示 的中間路徑34的處理單位考慮為用條件分支的處理模塊ps3或無條件跳 轉(zhuǎn)的處理模塊ps4的語句劃分的運算代入處理的處理模塊pSl, g卩,代入 語句的集合。
在本實施例中,作為第一階段的處理,假定基于上述語句間的依賴方 程式對圖9所示的運算代入處理的處理模塊pSl進行重排。在圖10中, 輸入為中間語言33-l,輸出也為中間語言33-l。
圖10示出的第一階段對所有被控制語句劃分的運算代入語句的組進 行。首先,在步驟Stl中提取要定義和參考的變量,在步驟St2中定義依 賴圖。另外,在步驟St3中刪除不需要的語句,在步驟St4中基于依賴圖 進行語句的排序。
在第一階段的依賴性分析中,以前有時無法在編譯階段中明確地提取指針變量等的依賴關(guān)系。本實施例的第一階段由于是用于更加簡便地進行 第二階段以后的操作的預(yù)處理,因此并非一定要提取全部的依賴關(guān)系。
在本實施例的第二階段中,對于在上述的中間語言級別進行整理的語 句序列,按照后述的方式進行語句的組的結(jié)合以及重新定義。另外,在第 二階段雖進行結(jié)合以上述的處理類別分類的處理模塊的操作,但通常的軟 件包括嵌套結(jié)構(gòu)的循環(huán),具有嵌套結(jié)構(gòu)的條件分支、子程序之內(nèi)的循 環(huán)、條件分支等的層級結(jié)構(gòu)。因此,在本實施例的第二階段進行的操作是 從處于嵌套結(jié)構(gòu)的最內(nèi)層級的處理模塊起依次進行的。
處于嵌套結(jié)構(gòu)的最內(nèi)層級的處理模塊一定是運算代入處理的處理模 塊。當在第一階段中存在于最內(nèi)層級處理模塊中的語句通過依賴方程式的 求解而被刪除時,對應(yīng)的嵌套結(jié)構(gòu)也被刪除。
在嵌套結(jié)構(gòu)的最內(nèi)層級的處理模塊的處理中,當調(diào)用源的處理模塊為 無條件跳轉(zhuǎn)、即被調(diào)用的子程序的主體時,將其與前級處理類別的無條件 跳轉(zhuǎn)的處理模塊結(jié)合,重新分組,并重新定義為運算代入處理模塊。
在通常的代碼優(yōu)化中,如果語句已被內(nèi)聯(lián)展開,那么該代碼優(yōu)化操作 將在第一階段的處理中與通常的運算代入處理模塊的整理一起被執(zhí)行,但 在本實施例中,語句沒有必要內(nèi)聯(lián)展開,只進行語句的分組即可。
在嵌套結(jié)構(gòu)的最內(nèi)層級的處理模塊的處理中,當調(diào)用源的處理模塊為 循環(huán)處理(后沿跳轉(zhuǎn))的處理模塊、即在循環(huán)內(nèi)部不包括條件分支等控制 結(jié)構(gòu)的單純循環(huán)的主體時,將其重新分組并重新定義為運算代入處理模 塊。
圖11用于說明將無條件跳轉(zhuǎn)和循環(huán)處理(后沿跳轉(zhuǎn))的處理模塊作 為運算代入處理模塊重新定義的圖。如圖11所示,當調(diào)用源的處理模塊 為無條件跳轉(zhuǎn)時,將其與前級處理類別的無條件跳轉(zhuǎn)的處理模塊結(jié)合,重 新分組并重新定義為運算代入處理模塊。另外,如圖11所示,當調(diào)用源 的處理模塊為循環(huán)處理(后沿跳轉(zhuǎn))的處理模塊時,將其重新分組并重新 定義為運算代入處理模塊。
如上述進行運算代入處理模塊的重新定義的結(jié)果,有時會在嵌套的同 一層級中有運算代入處理模塊縱向排列。此時,縱向排列的運算代入處理模塊被結(jié)合,再一次被重新定義為運算代入處理模塊。
圖12是用于說明各運算代入處理模塊之間的重新定義的圖。在圖12 中的"代入運算"表示代入運算處理模塊,用虛線圍起來的處理模塊表示 結(jié)合后的處理模塊。
接下來,當調(diào)用源的處理模塊為條件分支處理的處理模塊時,即相當
于條件分支的真(true)和假(false)中任一個的從屬子句時,不需要特 別進行處理模塊間的結(jié)合處理,將其定義為線程化處理模塊。
圖13是用于說明線程化處理模塊和調(diào)度化處理模塊的新定義的圖。 根據(jù)嵌套結(jié)構(gòu)的層級分析,線程化處理模塊的構(gòu)成要素不一定局限于一個 處理模塊,另外,線程化處理模塊的構(gòu)成要素也不局限于運算代入處理模 塊。
另外,當某個處理模塊的后續(xù)的處理模塊為條件分支處理時,結(jié)合這 些處理模塊,重新定義為調(diào)度化處理模塊。
線程化處理模塊和調(diào)度化處理模塊之間具有密切的聯(lián)系,由于線程化 處理模塊是條件分支的從屬子句,因此必須與包含條件分支的調(diào)度化處理 模塊結(jié)合。
對于以上述的處理模塊化為對象的代碼,還考慮嵌套結(jié)構(gòu)來重新定義 線程化處理模塊和調(diào)度化處理模塊。圖14是用于說明線程化處理模塊和 調(diào)度化處理模塊的圖。在圖14所示的程序中,41表示在圖14中位于最上 層級的調(diào)度化處理模塊,42是從屬于調(diào)度化處理模塊41的線程化處理模 塊,43是包含在比調(diào)度化處理模塊41低一層級的層級中的調(diào)度化處理模 塊,44是從屬于調(diào)度化處理模塊43的線程化處理模塊,45是包含在比線 程化處理模塊42低一層級的層級中的調(diào)度化處理模塊,46是從屬于調(diào)度 化處理模塊45的線程化處理模塊。
圖15是示出本實施例的第二階段的流程圖。在圖15中,輸入為中間 語言33-l,輸出也為中間語言33-l。
圖15所示的第二階段是對在上述第一階段基于依賴圖對語句進行排 序的結(jié)果進行的。首先,在步驟Stll,對于將處理模塊化作為對象的程序 的代碼,從嵌套結(jié)構(gòu)的最內(nèi)層級的處理模塊開始依次進行處理。在步驟Stl2,判斷調(diào)用源的處理模塊是否為條件分支處理。當步驟Stl2的判斷結(jié) 果為"是"時,在步驟Stl3將條件分支的從屬子句重新定義為線程化處理
模塊,處理返回Stll,開始進行嵌套結(jié)構(gòu)中的最內(nèi)層級的下一層級的處理 模塊的處理。另一方面,當步驟Stl2的判斷結(jié)果為"否"時,在步驟Stl4 判斷后續(xù)的處理模塊是否是接在條件分支處理之后的處理模塊,當判斷結(jié) 果為"否"時,處理返回Stll,開始進行嵌套結(jié)構(gòu)中的最內(nèi)層級的下一層 級的處理模塊的處理。另外,當后續(xù)的處理模塊為條件分支處理從而歩驟 Stl4的判斷結(jié)果為"是"時,步驟Stl5將這些處理模塊和后續(xù)的處理模塊 進行結(jié)合,作為調(diào)度化處理模塊重新定義。在步驟Stl5之后,處理返回 Stll,開始進行嵌套結(jié)構(gòu)中的最內(nèi)層級的下一層級的處理模塊的處理。
在本實施例的第二階段,對于在上述的中間語言級被整理的語句序 列,按照后述的方式進行語句的組的結(jié)合以及重新定義。另外,在第二階 段雖進行結(jié)合以上述的處理類別分類的處理模塊的操作,但通常的軟件包 括嵌套結(jié)構(gòu)的循環(huán),具有嵌套結(jié)構(gòu)的條件分支、子程序之內(nèi)的循環(huán)、條 件分支等的階次結(jié)構(gòu)。因此,在本實施例的第二階段進行的操作是從處于 嵌套結(jié)構(gòu)最內(nèi)層級的處理模塊起依次進行的。
在本實施例的第三階段,向在第二階段分組后的調(diào)度化處理模塊和線 程化處理模塊附加控制語句,生成最終的中間語言(中間代碼)以作為線 程和調(diào)度器。
條件分支以及算出條件的運算和從屬于他們的處理模塊的調(diào)用的關(guān)系 等價于動態(tài)調(diào)度器和被調(diào)度的線程的關(guān)系。在本實施例中,為了構(gòu)成不使 用外部(或外設(shè))調(diào)度器的結(jié)構(gòu),在調(diào)度化處理模塊的結(jié)構(gòu)中設(shè)置與線程 的上下文切換功能起相同作用的機制。另外,在線程化處理模塊中設(shè)置只 在調(diào)度器請求時才動作的機制。
因此,在本實施例的第三階段,對調(diào)度化處理模塊以及從屬于該調(diào)度 化處理模塊的線程化處理模塊進行如下的操作。
圖16是用于說明對線程化處理模塊追加語句的方法的圖。首先,如 在圖16中用51所示的那樣,用循環(huán)包圍線程化處理模塊55,如52所 示,在循環(huán)的入口部分(前頭部分)插入像等待(wait)機構(gòu)這樣的OS服務(wù)調(diào)用,其中所述等待機構(gòu)等待接收信號并直到接收到信號為止釋放
CPU。另外,如53、 54所示,還考慮被線程化的處理模塊彼此并行動作的 情況,基于用(式8)、(式9)以及(式11)導(dǎo)出的依賴方程式來分析 并行執(zhí)行(同時執(zhí)行)的處理模塊,當存在依賴關(guān)系時,插入根據(jù)信號量 (semaphore)或互斥(Mutex)的排他控制代碼。即,如53所示的那樣加 上排他鎖,并且如54所示的那樣解除排他鎖。根據(jù)上述的操作,能夠在 程序主體中追加把改變了結(jié)構(gòu)的線程化處理模塊55定義為事件處理線程 59來啟動的代碼。
根據(jù)上述的操作,在也可以不進行處理動作的定時,事件處理線程59 釋放CPU,因此不占用不需要的CPU資源。
圖17用于說明向調(diào)度化處理模塊中追加語句的圖。調(diào)度化處理模塊 內(nèi)包含有條件分支處理,可以認為發(fā)生該條件分支的定時即為啟動上述事 件處理線程59的定時(進行調(diào)度)。因此,在條件分支后的從屬子句, 插入如圖17中的61所示那樣的發(fā)行從屬的事件處理線程59所期待的信號
(即,針對條件A或B成立時進行動作的事件的信號)的語句(代碼), 并將追加語句后的模塊定義為調(diào)度化處理模塊69。
當在作為基礎(chǔ)的源代碼31中調(diào)度化處理模塊位于嵌套結(jié)構(gòu)的內(nèi)部 時,啟動該調(diào)度化處理模塊65的是處于其父層級的調(diào)度化處理模塊。在 圖14所示的例子中,通過插入對信號進行應(yīng)答的蘇醒(wake-up)機構(gòu)那 樣的重構(gòu),用45表示的嵌套的內(nèi)側(cè)的調(diào)度化處理模塊以用41表示的上層 級調(diào)度化處理模塊的信號發(fā)送為契機而動態(tài)啟動。
在本實施例中,主要假設(shè)了時序處理、即以事先規(guī)定的定時輸出中間 計算結(jié)果這樣的以通用的編程語言描述的程序,這樣的程序通常在程序的 最上層級采用循環(huán)結(jié)構(gòu)。如果執(zhí)行本實施例的第二階段的處理,就必然會 存在被最外圍循環(huán)包圍的調(diào)度化處理模塊,即最外圍調(diào)度化處理模塊。
由于不存在啟動上述最外圍調(diào)度化處理模塊的動態(tài)信號發(fā)生裝置,因 此對于最外圍調(diào)度化處理模塊,如圖18所示那樣利用OS的定時器功能, 以嵌入諸如從OS周期地發(fā)送信號(定時器信號)以便自動啟動最外圍調(diào) 度化處理模塊的定時器處理器這樣的機制。圖18是用于說明最外圍調(diào)度化處理模塊的定時器處理的圖。在圖18中,對于與圖17相同的部分標注
相同的標號,并省略說明。在圖18中,64是從OS周期地發(fā)送的信號(定 時器信號),65A是最外圍調(diào)度化處理模塊,69A表示通過插入如61所示 那樣發(fā)行從屬的事件處理線程59所期待的信號(即,針對條件A或B成 立時動作的事件的信號)的語句(代碼)來定義的調(diào)度化處理模塊。
圖19是用于說明本實施例的第三階段的處理的流程圖。在圖19中, 輸入的是中間語言33-l,輸出的也是中間語言33-2。
圖19所示的第三階段是對在上述第二階段進行了分組的調(diào)度化處理 模塊和線程化處理模塊來進行的。首先,在歩驟St21,判斷作為處理對象 的處理模塊是線程化處理模塊還是調(diào)度化處理模塊。當作為處理對象的模 塊是線程化處理模塊時,進行步驟St22 St25的向線程化處理模塊中追加 語句的處理。另一方面,當作為處理對象的處理模塊為調(diào)度化處理模塊 時,進行步驟St26 St28的向調(diào)度化處理模塊中追加語句的處理。
在步驟St22,如圖16中的51所示,用循環(huán)包圍線程處理模塊55。在 步驟St23,如圖16中的52所示,在循環(huán)的入口部分插入像等待機構(gòu)這樣 的OS服務(wù)調(diào)用,其中所述等待機構(gòu)等待接收信號并直到接收到信號為止 釋放CPU。在步驟St24,還考慮被線程化的處理模塊彼此并行動作的情 況,如圖16中的53、 54所示的那樣,基于從(式8)、(式9)以及 (式11)導(dǎo)出的依賴性方程式,對并行執(zhí)行(同時執(zhí)行)的處理模塊進行 分析,判斷是否存在依賴關(guān)系。當步驟St24的判斷結(jié)果為"是"時,在步 驟25中,插入根據(jù)信號量(semaphore)或互斥(Mutex)的排他控制代 碼,并且結(jié)束處理。另一方面,當步驟St24的判斷結(jié)果為"否"時,結(jié)束 處理。
在步驟St26,在條件分支后的從屬子句上插入如圖17的61所示那樣 發(fā)行從屬的事件處理線程59所期待的信號(即,針對條件A或B成立時 動作的事件的信號)的發(fā)送機構(gòu)(語句),并將插入發(fā)送機構(gòu)后的模塊定 義為調(diào)度化處理模塊69。在步驟St27,判斷調(diào)度化處理模塊是否為最外圍 調(diào)度化理模塊。當步驟St27的判斷結(jié)果為"是"時,在步驟St28嵌入定 時器處理器,并且結(jié)束處理。另一方面,當在步驟St27的判斷結(jié)果為"否"時,結(jié)束處理。
通過進行上述第三階段的操作,能夠從包含在源代碼31中的處理序 列導(dǎo)出動態(tài)調(diào)度器功能,不會產(chǎn)生如使用外部調(diào)度器時那樣的開銷。另 外,由于不需要進行不必要的緩沖,提高了存儲器的利用效率。并且,各 處理模塊具有在必要時才使用CPU的機制,即同時具有在不需要進行處理 動作時釋放CPU的機制,因此也能夠有效地使用CPU資源。
圖20是示出本實施例動作時的時序表的映象的圖。圖20示出了利用 OS的定時器功能獲得的周期信號(定時器信號)、通過調(diào)度器處理模塊 實現(xiàn)的動態(tài)調(diào)度器、以及事件處理線程ET1、 ET2的時序。
如果具有嵌套結(jié)構(gòu)的部分代碼具有處于同一層級的調(diào)度器、并且從上 述(式14)導(dǎo)出的語句(或處理模塊)的順序能夠互換,那么調(diào)度化處理 模塊中的處理順序也能互換,以便在動態(tài)調(diào)度中引入優(yōu)先級分配控制概 念。通常,動態(tài)調(diào)度器的優(yōu)先級分配是按照啟發(fā)式(heuristic)算法確定 的,并且CPU的使用量(處理模塊的關(guān)鍵路徑)、存儲器的使用量(數(shù)據(jù) 使用量)等作為在算法的判斷中使用的參數(shù)(或系數(shù))。每當確定在優(yōu)先 級排序時成為關(guān)鍵的參數(shù)時,獲得最優(yōu)方案很大程度上依賴于作為對象的 軟件的屬性。
在本實施例中,為了將上述第一階段 第三階段的處理內(nèi)置于編譯器 的中間路徑34內(nèi),作為利用通常的編譯器的優(yōu)化方法,能夠?qū)?路徑 編譯的方法。在通常的2路徑編譯中器中,基于第一次編譯生成的執(zhí)行代 碼,實際運行嵌入式設(shè)備等,收集概況,并基于概況的收集結(jié)果進行第二 次的編譯。
當在使用概況收集的2路徑編譯被允許的編譯器中應(yīng)用本實施例時, 能夠基于該概況的收集結(jié)果,根據(jù)優(yōu)先級對調(diào)度表處理模塊進行排序。因 此,通過利用本方法,能夠得到精度更高的調(diào)度結(jié)果。
如此,中間路徑34生成圖5的后端35可譯解的中間語言33-2,編譯 器生成執(zhí)行代碼36。
圖21是對圖2的現(xiàn)有方法和本實施例的時序表的映象進行比較的 圖。在圖21中,對于與圖2和圖20相同的部分標注相同的標號,并省略說明。圖21的上部示出本實施例的動作時序,下部示出圖2的現(xiàn)有方法
的動作時序。在圖21中,0H1是在本實施例中使用多個線程而產(chǎn)生的開 銷,R1示出本實施例中的CPU釋放時間。根據(jù)本實施例,處理P3的實際 結(jié)束時間比現(xiàn)有方法中的結(jié)束時間t2晚一些,但能夠在期待結(jié)束時間t3 之前結(jié)束處理P4。因此,在本實施例中,在通過進行時序處理來定期地輸 出中間計算結(jié)果的軟件中,能夠避免在現(xiàn)有方法中由于所發(fā)生的分支定時 的偏離而導(dǎo)致的處理結(jié)束時間的延遲。另外,在本實施例中,不需要進行 如圖3所示的現(xiàn)有方法那樣的緩沖,因此提高了存儲器的利用效率。
圖22是示出本實施例的調(diào)度化處理模塊、即動態(tài)調(diào)度器的影像的 圖。在該圖中,81表示任務(wù)或線程,82表示CPU的空閑狀態(tài)(idle state) , 83表示具有上下文切換功能并進行調(diào)度的動態(tài)調(diào)度器、84表示 OS 86內(nèi)的處理管理功能、85表示根據(jù)動態(tài)調(diào)度器83的指示進行的切換、 88表示OS 86內(nèi)的定時器功能。當在嵌入式設(shè)備中高效地并行(同時)執(zhí) 行多個任務(wù)或線程81時,圖22所示的動態(tài)調(diào)度器83基于來自O(shè)S 86的定 時器功能88的信號來動態(tài)地定義任務(wù)或線程81的優(yōu)先級,并且根據(jù)其上 下文切換功能和OS 86的處理管理功能84進行任務(wù)或線程81的切換85。 根據(jù)本實施例,被分解成線程和定時器處理器的源代碼31能主動地釋放 CPU并將其置為空閑狀態(tài)82,因此不會占用不需要的CPU資源。另外, 構(gòu)成動態(tài)調(diào)度器83的調(diào)度化處理模塊由于是原本就存在于源代碼31中的 代碼,因此多個線程化所產(chǎn)生的開銷也極小。
圖23是示出對實際的程序進行編譯時對于上述現(xiàn)有方法和實施例的 資源利用效率的測定結(jié)果的圖。如圖23所示,程序PA是運動圖像播放器 軟件、程序PB是通信處理軟件。程序PA、 PB都是以時序處理為基礎(chǔ)、 以事先規(guī)定的定時輸出中間結(jié)果的軟件。程序PC是靜止圖像處理軟件、 程序PD是算術(shù)運算軟件。程序PC是進行XGA壓縮圖像的擴展的軟件。 程序PD是已由程序設(shè)計者在源代碼級進行了優(yōu)化的流體計算軟件。
從圖23也可知根據(jù)本實施例,對于全部程序PA PD,可以確認與 上述現(xiàn)有方法相比CPU的負荷減少。另外,根據(jù)本實施例,對于程序 PA、 PB、 PC,可以確認存儲器使用量比上述現(xiàn)有方法相比減少。并且,另外,根據(jù)本實施例,對于程序PA、 PB、 PC,可以確認CPU的功耗也比 高峰時的功耗減少。根據(jù)本實施例,對于程序PC,雖然線程化的效果很 少,但可以看到在第一階段進行語句調(diào)整的效果。
如上所述,雖然主要還是依賴時序處理型程序的完成程度,但根據(jù)本
實施例,可以確認減少CPU和存儲器的使用、即資源的使用量比使用現(xiàn)有 方法的情況相比減少了 30%左右。另外,作為輔助效果可獲得CPU的空 閑狀態(tài),因此還具有減少CPU功耗的效果。 產(chǎn)業(yè)上的實用性
本發(fā)明可以適用于具有CPU和存儲器等資源的各種電子設(shè)備,特別是 適用于資源有限的嵌入式設(shè)備。
以上,雖然根據(jù)實施例說明了本發(fā)明,但本發(fā)明不限于上述實施例, 不用說也可以在本發(fā)明范圍內(nèi)進行各種變形以及改進。
權(quán)利要求
1.一種編譯方法,所述編譯方法通過計算機進行軟件的編譯,所述軟件被時序地處理并以事先規(guī)定的定時輸出中間結(jié)果,所述編譯方法的特征在于,包括提取步驟,由所述計算機從包含在所述軟件的源代碼中的處理序列提取與并列處理和條件分支相關(guān)的處理模塊;以及生成步驟,由所述計算機對所提取的處理模塊進行重構(gòu),生成執(zhí)行代碼。
2. 如權(quán)利要求1所述的編譯方法,其特征在于,所述提取步驟包括第一階段和第二階段,所述第一階段對于進行計算并將計算結(jié)果代入所述計算機的存儲器和 寄存器中的運算代入處理的處理模塊,基于語句間的依賴性方程式進行重 新排列,求出在中間語言級別上被整理的語句序列,所述第二階段對所述整理的語句序列進行語句組的結(jié)合以及重新定義。
3. 如權(quán)利要求2所述的編譯方法,其特征在于,所述生成步驟包括第三階段,所述第三階段對于在所述第二階段進行 了分組的調(diào)度化處理模塊以及線程化處理模塊附加語句,并生成最終的中 間語言以作為線程和調(diào)度器,所述調(diào)度化處理模塊是在后續(xù)的處理模塊為條件分支處理時與后續(xù)的 處理模塊結(jié)合并被重新定義的調(diào)度化處理模塊,所述線程化處理模塊是在調(diào)用源的處理模塊為條件分支處理時將條件 分支的從屬子句重新定義而得的所述線程化處理模塊。
4. 如權(quán)利要求2或3所述的編譯方法,其特征在于,所述第一階段對所有的通過控制語句劃分的運算代入語句的組進行, 并且所述第一階段包括提取被定義和參照的變量、定義表現(xiàn)各語句的依 賴關(guān)系的依賴圖、刪除不需要的語句、以及基于所述依賴圖對語句進行排 序。
5. 如權(quán)利要求2至4中任一項所述的編譯方法,其特征在于,所述第二階段從處于嵌套結(jié)構(gòu)中的最內(nèi)層級的處理模塊起依次進行所 述語句組的結(jié)合以及重新定義。
6. 如權(quán)利要求5所述的編譯方法,其特征在于,所述第二階段是對所述第一階段的排序結(jié)果進行的,并且對于將處理 模塊化為對象的程序的代碼,當調(diào)用源的處理模塊為條件分支處理時,將 條件分支的從屬子句重新定義為線程化處理模塊,當不是條件分支并且后 續(xù)的處理模塊是接在條件分支處理之后的處理模塊時,結(jié)合所述處理模塊 和后續(xù)的處理模塊并重新定義為調(diào)度化處理模塊。
7. 如權(quán)利要求3至6中任一項所述的編譯方法,其特征在于, 所述第三階段是對所述第二階段進行分組后的調(diào)度化處理模塊和線程化處理模塊進行的,當作為處理對象的處理模塊為線程化處理模塊時,進行向線程化處理 模塊追加語句的處理,當作為處理對象的處理模塊為調(diào)度化處理模塊時,進行向調(diào)度化處理 模塊追加語句的處理。
8. 如權(quán)利要求3所述的編譯方法,其特征在于,所述調(diào)度化處理模塊具有線程的上下文切換功能,所述線程化處理模 塊具有只在調(diào)度器請求時動作的結(jié)構(gòu)。
9. 如權(quán)利要求3所述的編譯方法,其特征在于,所述第三階段對被最外圍的循環(huán)包圍的調(diào)度化處理模塊嵌入定時器處 理器的機制,所述定時器處理器的機制利用所述計算機的OS定時器功能 周期地發(fā)送信號并自動啟動所述被最外圍的循環(huán)包圍的調(diào)度化處理模塊。
10. 如權(quán)利要求3所述的編譯方法,其特征在于, 所述第三階段附加控制語句,所述控制語句具有在不需要運算處理的期間釋放所述計算機的機構(gòu)。
11. 一種編譯器,所述編譯器通過計算機進行軟件的編譯,所述軟件 被時序地處理并以事先規(guī)定的定時輸出中間結(jié)果,所述編譯器的特征在 于,包括前端,所述前端通過所述計算機將所述軟件的源代碼翻譯成第一中間 語言并將所述第一中間語言保存在存儲部中;中間路徑,所述中間路徑通過所述計算機基于保存在所述存儲部中的 所述第一中間語言,從包含在所述軟件的源代碼中的處理序列提取與并列 處理和條件分支相關(guān)的處理模塊,對所提取的處理模塊進行重構(gòu),生成第二中間語言并將所述第二中間語言保存在存儲部中;以及后端,所述后端通過所述計算機基于保存在所述存儲部中的所述第二 中間語言自動生成執(zhí)行代碼。
12. 如權(quán)利要求11所述的編譯器,其特征在于, 所述中間路徑包括第一階段和第二階段,所述第一階段對于進行計算并將計算結(jié)果代入所述存儲部中的運算代 入處理的處理模塊,基于語句間的依賴性方程式進行重新排列,求出在中 間語言級別上被整理的語句序列,所述第二階段對所述整理的語句序列進行語句組的結(jié)合以及重新定義。
13. 如權(quán)利要求12所述的編譯器,其特征在于,所述中間路徑包括第三階段,所述第三階段對于在所述第二階段進行 了分組的調(diào)度化處理模塊以及線程化處理模塊附加語句,并并生成最終的 中間語言以作為線程和調(diào)度器,所述調(diào)度化處理模塊是在后續(xù)的處理模塊為條件分支處理時與后續(xù)的 處理模塊結(jié)合并被重新定義的調(diào)度化處理模塊,所述線程化處理模塊是在調(diào)用源的處理模塊為條件分支處理時將條件 分支的從屬子句重新定義而得的線程化處理模塊。
14. 如權(quán)利要求12或13所述的編譯器,其特征在于, 所述第一階段是對所有的通過控制語句劃分的運算代入語句的組進行的,并且所述第一階段包括提取被定義和參照的變量、定義表現(xiàn)各語句 的依賴關(guān)系的依賴圖、刪除不需要的語句、以及基于所述依賴圖對語句進 行排序。
15. 如權(quán)利要求12至14中任一項所述的編譯器,其特征在于,所述第二階段從處于嵌套結(jié)構(gòu)中的最內(nèi)層級的處理模塊起依次進行所 述語句的組的結(jié)合以及重新定義。
16. 如權(quán)利要求15所述的編譯器,其特征在于,所述第二階段是對所述第一階段的排序結(jié)果進行的,并且對于將處理 模塊化為對象的程序的代碼,當調(diào)用源的處理模塊為條件分支處理時,將 條件分支的從屬子句重新定義為線程化處理模塊,當不是條件分支并且后 續(xù)的處理模塊是接在條件分支處理之后的處理模塊時,結(jié)合所述處理模塊 和后續(xù)的處理模塊并重新定義為調(diào)度化處理模塊。
17. 如權(quán)利要求13至16中任一項所述的編譯器,其特征在于, 所述第三階段是對所述第二階段進行分組后的調(diào)度化處理模塊和線程化處理模塊進行的,當作為處理對象的處理模塊為線程化處理模塊時,進行向線程化處理 模塊追加語句的處理,當作為處理對象的處理模塊為調(diào)度化處理模塊時,進行向調(diào)度化處理 模塊追加語句的處理。
18. 如權(quán)利要求13所述的編譯器,其特征在于,所述調(diào)度化處理模塊具有線程的上下文切換功能,所述線程化處理模 塊具有只在調(diào)度器請求時動作的結(jié)構(gòu)。
19. 如權(quán)利要求13所述的編譯器,其特征在于,所述第三階段對被最外圍的循環(huán)包圍的調(diào)度化處理模塊嵌入定時器處 理器的機制,所述定時器處理器的機制利用所述計算機的OS定時器功能 周期地發(fā)送信號并自動啟動所述被最外圍的循環(huán)包圍的調(diào)度化處理模塊。
20.如權(quán)利要求13所述的編譯器,其特征在于,所述第三階段附加控制語句,所述控制語句具有在不需要運算處理的 期間釋放所述計算機的機構(gòu)。
全文摘要
通過計算機對被時序地處理并以事先規(guī)定的定時輸出中間結(jié)果的軟件進行編譯的編譯方法包括提取步驟,從包含在所述軟件的源代碼中的處理序列提取與并列處理和條件分支相關(guān)的處理模塊;以及生成步驟,對所提取的處理模塊進行重構(gòu)并生成執(zhí)行代碼。
文檔編號G06F9/45GK101563673SQ20068005663
公開日2009年10月21日 申請日期2006年12月14日 優(yōu)先權(quán)日2006年12月14日
發(fā)明者山下浩一郎 申請人:富士通株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
丹巴县| 竹山县| 田东县| 鄂温| 邢台县| 庆阳市| 夏邑县| 常德市| 石渠县| 盈江县| 鄂伦春自治旗| 成都市| 罗平县| 凤山市| 齐河县| 兰考县| 日土县| 巩义市| 博客| 分宜县| 正蓝旗| 壶关县| 安阳县| 本溪市| 黄陵县| 德江县| 大邑县| 大安市| 晋州市| 平顺县| 平乐县| 布尔津县| 博白县| 潍坊市| 德兴市| 清远市| 博爱县| 泗洪县| 定陶县| 晋中市| 宜章县|