專利名稱:程序優(yōu)化方法
技術領域:
本發(fā)明涉及縮短程序的執(zhí)行時間的編譯方法,更具體地,涉及基于抑制因高速緩 存未命中而引起的性能下降的編譯器的程序優(yōu)化方法。
背景技術:
本申請在此將2008年7月22日申請的日本專利申請2008-188386號的包括說明 書、附圖、權利要求書在內(nèi)的全部內(nèi)容作為參考,并納入到本說明書中。近年來,CPU的處理能力有所提高,因此,為了縮短程序的執(zhí)行時間,縮短存儲器訪 問所需的時間就變得重要。作為縮短存儲器訪問所需時間的方法之一,目前廣泛已知一種使用高速緩沖存儲 器的方法。在訪問處理中程序具有局部性,這就是通過使用高速緩沖存儲器能夠縮短存儲 器訪問所需時間的原因。訪問處理中的局部性包括·時間局部性(在不久的將來訪問相同的數(shù)據(jù)的可能性高)、以及·空間局部性(在不久的將來訪問附近的數(shù)據(jù)的可能性高)。由于程序具有這種訪問處理中的局部性,因此存儲在高速緩沖存儲器中的數(shù)據(jù)可 被視為在不久的將來被訪問的可能性高。因此,如果將能夠比主存儲器更高速被訪問的存 儲器使用于高速緩沖存儲器,則能夠明顯縮短存儲器訪問所需的時間。在具有高速緩沖存儲器的計算機系統(tǒng)中,如果在程序執(zhí)行過程中發(fā)生高速緩存未 命中(〉^L S 7 ),則程序的執(zhí)行時間延長。因此,在按照地址順序執(zhí)行一系列的命 令代碼時,或者重復執(zhí)行納入高速緩沖存儲器范圍的命令代碼時,存儲命令代碼的高速緩 沖存儲器的功效會變大。但是,在現(xiàn)實的程序中,基于處理性能、程序的開發(fā)效率、存儲器大 小的限制、程序的可讀性等原因,會使用分支、循環(huán)、子程序等結(jié)構(gòu)。因此,在執(zhí)行現(xiàn)實的程 序時,無法完全地抑制高速緩存未命中的發(fā)生。作為抑制因高速緩存未命中而引起的性能下降的方法之一,已知一種在正在執(zhí)行 的程序中預先將不久的將來被執(zhí)行的可能性高的數(shù)據(jù)預取(U7工y f)到高速緩沖存 儲器中的方法。為了提高預取的效果,該方法會在執(zhí)行程序之前,對程序中的分支和循環(huán)的 重復次數(shù)等進行解析,執(zhí)行對高速緩存未命中進行預測的處理。但是,由于分支目的地和循 環(huán)的重復次數(shù)等是在程序執(zhí)行過程中動態(tài)確定的,因此,在多數(shù)情況下,在程序執(zhí)行前的靜 態(tài)解析中無法正確地進行預測。如此,在基于程序的靜態(tài)解析結(jié)果進行預取的方法中,存在 對高速緩存未命中的預測易于產(chǎn)生錯誤的問題。另外,作為更有效地抑制因高速緩存未命中而引起的性能下降的方法,提出了一 種在執(zhí)行基于編譯器的程序優(yōu)化時,使用程序的動態(tài)解析結(jié)果(以下稱為輪廓(口 7 7· ^ ^ )信息)的方法。例如,在專利文獻1中,公開了一種虛擬執(zhí)行程序的一次編譯結(jié)果來 計算出輪廓信息,根據(jù)計算出的輪廓信息進行二次編譯的方法。據(jù)此,在專利文獻1中,能 夠取得在合適的位置插入有預取命令的目標文件。
專利文獻2中公開了一種基于輪廓信息,使帶條件的分支命令中的分支方向具有 側(cè)重性的方法。另外,專利文獻3中公開了一種提高利用了空間局部性的高速緩存效率的 方法。專利文獻1 日本特開平7-306790號專利文獻2 日本特開平11-149381號專利文獻3 日本特開2006-309430號但是,在各專利文獻所公開的現(xiàn)有方法中,需要取得程序的動態(tài)解析結(jié)果即輪廓 信息。為了取得上述信息,剖析(/口7^"」〉,)的算法和編譯器需要特殊的方法,為 此,需要高度的技術和累積了經(jīng)驗的分析技術。另外,在利用了空間局部性的現(xiàn)有方法中,在系統(tǒng)運行時的運行和多個任務的運 行中,未運行的處理部分的源代碼有時會被配置在高速緩沖存儲器中。但如果這樣,配置在 高速緩沖存儲器中的源代碼會阻礙在高速緩沖存儲器中配置必要的處理。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種能夠廉價且容易地抑制因高速緩存未命中而引起的 性能下降的基于編譯器的程序優(yōu)化方法。本發(fā)明的基于編譯器的程序優(yōu)化方法,由在將高級語言程序轉(zhuǎn)換為機器語言程序 時進行程序轉(zhuǎn)換的編譯器執(zhí)行,所述程序優(yōu)化方法包括范圍確定步驟,根據(jù)包含在所述高級語言程序中的描述,確定所述機器語言程序 的一個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置,所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的 描述,所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相 關關系的所述處理塊的程序部分確定為所述處理范圍,所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊, 確定位于所述處理范圍內(nèi)的命令代碼的配置位置。本發(fā)明中,用于使計算機執(zhí)行上述優(yōu)化方法的編譯器,以及記錄有該編譯器的計 算機可讀取記錄介質(zhì)、經(jīng)由網(wǎng)絡傳輸該編譯器的信息傳輸介質(zhì)也包含在該范圍內(nèi)。根據(jù)本發(fā)明,程序開發(fā)者在編寫高級語言程序時,指定處理塊的相關關系(交叉 (輻輳)關系),編譯器將相當于指定了相關關系的處理塊的命令代碼配置在合適的位置 上。據(jù)此,能夠廉價且容易地防止高速緩存未命中的發(fā)生,從而防止因高速緩存未命中而引 起的性能下降。
圖IA是示出在高速緩沖存儲器的行上配置命令代碼的情況的第一配置圖;圖IB是示出在高速緩沖存儲器的行上配置命令代碼的情況的第二配置圖;圖2A是表示作為優(yōu)化處理對象的處理任務A的流程圖;圖2B是表示作為優(yōu)化處理對象的處理任務B的流程5
圖3A是示出作為編程的一個執(zhí)行例的高級語言程序的流程圖;圖;3B是示出作為由編譯器執(zhí)行圖3A的高級語言程序的一個例子的機器語言程序 的流程圖;圖4A是示出本發(fā)明的第一實施方式所涉及的基于編譯器的優(yōu)化處理的執(zhí)行例的 第一圖;圖4B是示出本發(fā)明的第一實施方式所涉及的基于編譯器的優(yōu)化處理的執(zhí)行例的 第二圖;圖5是示出本發(fā)明的第一實施方式所涉及的編譯器的整體結(jié)構(gòu)的圖;圖6是示出本發(fā)明的第二實施方式所涉及的編譯器的連接部的詳細內(nèi)容的圖;圖7是示出本發(fā)明的第二實施方式所涉及的高速緩沖存儲器的例子的圖;圖8是示出本發(fā)明的第二實施方式所涉及的主存儲器地址與高速緩沖存儲器地 址的對應關系的圖。
具體實施例方式下面,對將由某高級語言描述的程序(以下稱為高級語言程序)轉(zhuǎn)換為由某機器 語言描述的程序(以下稱為機器語言程序)的編譯器,以及由該編譯器執(zhí)行的程序優(yōu)化處 理進行說明。此外,在本發(fā)明中,處理塊表示用高級語言書寫的具有某功能的一個函數(shù)或在 高速緩沖存儲器上用一個以上的命令代碼書寫的命令代碼的集合,與表示由編譯器生成的 機器語言程序的命令代碼為不同的概念。機器語言程序由具有高速緩沖存儲器的計算機執(zhí)行。如果機器語言程序不包含分 支和/或子程序調(diào)用等,并被連續(xù)地配置在地址空間內(nèi)的一個區(qū)域中,則較少發(fā)生高速緩 存未命中,因高速緩存未命中而引起的性能下降也不會造成很大問題。但是,現(xiàn)實的機器語 言程序包含分支和/或子程序調(diào)用等,并被分割配置在地址空間內(nèi)的多個區(qū)域中。因此,當 執(zhí)行機器語言程序時,因高速緩存未命中而引起的性能下降就會造成問題。在以下所示的各實施方式中,本發(fā)明被實施于編譯器中,所述編譯器在將包含多 個處理任務和/或多個運行模式的高級語言程序轉(zhuǎn)換為機器語言程序的同時,執(zhí)行程序優(yōu) 化處理,所述程序優(yōu)化處理用于確定包含在機器語言程序中的命令代碼的配置位置。在各 實施方式中,對在包含多個處理任務和/或多個運行模式的高級語言程序的優(yōu)化處理中實 施本發(fā)明的方式進行說明。此外,在以下的說明中,使用C語言作為高級語言的例子,但高 級語言以及機器語言的種類可以是任意種類。(第一實施方式)參考圖IA 圖5,對本發(fā)明的第一實施方式所涉及的基于編譯器的程序優(yōu)化方法 的執(zhí)行例進行說明。圖1A、圖IB是示出在高速緩沖存儲器的行上配置包含在機器語言程 序中的命令代碼的情況的圖。圖1A、圖IB所示的命令代碼相當于由圖2所示的流程圖表 示的處理。圖2所示的處理中示出多個處理任務(或多個運行模式)各自的處理塊。如圖 IA等所示,相當于該處理的命令代碼包含相當于各處理塊的命令代碼。圖1A、圖IB中分別記載了在高速緩沖存儲器的兩路(々- ^ )上配置命令代碼的 情況。圖IA中包括分別配置了多個處理塊的兩路。配置在各路上的多個處理塊在不相同 (不同)的處理任務(或多個運行模式)下進行處理。以下將這種處理塊的配置稱為第一配置。第一配置通過現(xiàn)有的編譯器獲得。圖IB中雖然包括分別配置了多個處理塊的多路,但是配置在各路上的多個處理 塊在相同的處理任務(或相同的運行模式)下進行處理。以下將這種處理塊的配置稱為第 二配置。第二配置通過本實施方式所涉及的編譯器獲得。第二配置與第一配置不同,多個 處理任務(或多個運行模式)的處理塊被覆蓋配置在高速緩存的路上。下面,假設計算機執(zhí)行機器語言程序時執(zhí)行以行為單位的預取,來對本實施方式 進行說明。換言之,視為在讀出某命令代碼時發(fā)生了高速緩存未命中的情況下,包含該命令 代碼的一行部分的命令代碼從主存儲器被傳送到高速緩沖存儲器,來進行本實施方式的說 明。在上述條件下,對發(fā)生的高速緩存未命中進行說明。在第一配置(圖1A)下依次執(zhí) 行處理時,在高速緩沖存儲器中預取有相當于處理任務A(或運行模式A)中的處理A-I的 處理塊的命令。但是,接著在執(zhí)行相當于處理任務A (或運行模式A)中的處理A-2的處理 塊的命令時,相當于處理A-2的處理塊的命令未被存儲在高速緩沖存儲器內(nèi)。因此,在該時 刻有可能發(fā)生高速緩存未命中。如此,當發(fā)生高速緩存未命中時,處理A-2和處理A-3從主 存儲器被傳送到高速緩沖存儲器。這樣在第一配置下,由于未被處理(沒有相關關系)的 處理任務B (或運行模式B)涉及的處理塊,導致處理任務A (或運行模式A)涉及的一系列 處理發(fā)生高速緩存未命中。另一方面,在第二配置(圖1B)下,在執(zhí)行處理任務A(或運行模式A)涉及的處理 時,高速緩沖存儲器中預取有處理A-1、處理A-2以及處理A-3,在處理A-I之后執(zhí)行處理 A-2時,處理A-2已存儲在高速緩沖存儲器內(nèi)。因此,處理任務A (或運行模式A)涉及的一 系列處理不會發(fā)生高速緩存未命中。如此,在第二配置下不發(fā)生高速緩存未命中。如果程序開發(fā)者根據(jù)圖2A、圖2B的流程圖進行如現(xiàn)有那樣的編程,則能夠獲得圖 3A所示的高級語言程序。如果由現(xiàn)有的編譯器處理該高級語言程序,則能夠獲得圖;3B所示 的機器語言程序。在該機器語言程序中,處理任務A (或運行模式A)的處理塊與處理任務 B(或運行模式B)的處理塊被混雜在一起配置。如此,在如現(xiàn)有那樣的編程中,如果在高級 語言程序內(nèi)的處理的記載中,存在有對機器語言程序來說不合適的部分,則在生成的機器 語言程序的命令代碼(這相當于高級語言程序內(nèi)的上述處理)的配置中,相當于處理任務 A、B等涉及的處理(具體而言相當于該處理的命令代碼)的命令代碼在高速緩沖存儲器內(nèi) 被混雜在一起存儲的可能性增高。在這種狀態(tài)下,易于發(fā)生高速緩存未命中。在本實施方式中,當編寫包含多個處理任務(或多個運行模式)的高級語言程序 時,程序開發(fā)者將相互具有下述關系的處理塊組指定為沒有相關關系(沒有交叉運行關 系)的處理塊組(以下稱為第一處理塊組)。上述關系是指由是否在一系列的處理序列內(nèi) 被執(zhí)行所確定出的關系,未在一系列的處理序列內(nèi)被執(zhí)行的處理塊組被看做是沒有相關關 系并包含在上述的第一處理塊組中。相反,在一系列的處理序列內(nèi)被執(zhí)行的處理塊組被看 做是具有相關關系并包含在上述的第一處理塊組以外的處理塊組(以下稱為第二處理塊 組)中。此外,作為一系列的處理序列,包含有相同的任務、或不同時處理的運行模式等。下面進行具體說明。如圖4A所示,程序開發(fā)者使用Spragma預處理指令(” 'J 口七:ν寸π l·夕〒^義)來指定第一處理塊組。該ftpragma預處理指令具有調(diào)用ftpragma 預處理器的功能。在這里,第一處理塊組為具有下述條件的處理塊組。艮口,
·參數(shù)為_UncOrrelated_0N(沒有相關關系的指定為“開”)的ftpragma預處理指 令與·參數(shù)為_unCOrrelated_0FF (沒有相關關系的指定為“關”)的ftpragma預處理 指令之間所夾的處理塊被判定為包含在第一處理塊組中。具有這種配置關系的 #pragma預處理指令相當于用于指定包含在高級語言程序中的處理塊的相關關系(交叉關 系)的描述。如果用本實施方式所涉及的編譯器來處理如圖4A所示的高級語言程序,則能夠 獲得圖4B所示的機器語言程序。由該機器語言程序執(zhí)行處理任務A (或運行模式A)涉及 的處理時,位于處理A-I之后的命令代碼(這里為處理A-2)在高速緩沖存儲器中被配置在 緊接處理A-I之后。其結(jié)果是機器語言程序中的處理A-I A-3被配置在與高級語言程序 中的描述配置不同的位置上。在本實施方式中,緊接在如此抽出的第一處理塊組中所包含 的任意命令代碼之后,不配置包含在第一處理塊組(相互沒有相關關系)中的其他命令代 碼,而在這里配置包含在第二處理塊組(相互具有相關關系)中的命令代碼。包含在第一 處理塊組中的其他命令代碼被配置在其他程序位置上。據(jù)此,相當于處理任務A(或運行模 式A)涉及的一系列處理的命令代碼同時被存儲在高速緩沖存儲器上。由此,能夠抑制高速 緩存未命中的發(fā)生。下面參考圖5,對本實施方式所涉及的編譯器的結(jié)構(gòu)進行說明。圖5是示出本實施 方式所涉及的編譯器的整體結(jié)構(gòu)的圖。如圖5所示,本實施方式所涉及的編譯器包括翻譯 部10和連接部20。翻譯部10根據(jù)輸入的源文件1生成目標文件2。連接部20根據(jù)生成 的目標文件2生成可執(zhí)行文件3。源文件1中記錄有高級語言程序,目標文件2和可執(zhí)行文 件3中記錄有機器語言程序。翻譯部10執(zhí)行預處理指令解析步驟S11、分支結(jié)構(gòu)處理步驟S12以及命令代碼生 成步驟S13。在預處理指令解析步驟Sll中,從記錄在源文件中的高級語言程序中抽出用于 指定處理塊的相關關系(交叉關系)Wftpragma預處理指令。在分支結(jié)構(gòu)處理步驟S12中, 基于處理塊的相關關系(交叉關系)的指定(第一處理塊組的指定)生成分支命令。在命 令代碼生成步驟S13中,在生成除了由分支結(jié)構(gòu)處理步驟S12生成的分支命令之外的命令 代碼之后,配置命令代碼以使具有相關關系(具有交叉關系)的命令代碼連續(xù)。生成的命 令代碼作為鏈接前的機器語言程序被記錄在目標文件中。此外,分支結(jié)構(gòu)處理步驟S12與命令代碼生成步驟S13相當于范圍確定步驟與配 置確定步驟,所述范圍確定步驟根據(jù)包含在高級語言程序中的描述,確定機器語言程序的 一個程序部分為實施優(yōu)化的處理范圍,所述配置確定步驟確定位于處理范圍內(nèi)的命令代碼 的配置位置。此外,為使具有相關關系的處理塊(包含在第二處理塊組中的處理塊)連續(xù), 根據(jù)分支命令進行排序,并進行最終的配置確定的處理(確定更加效率化的位置的處理) 將在后述的第二實施方式的圖6的步驟S34中執(zhí)行。連接部20執(zhí)行連接步驟S21。在連接步驟S21中,對記錄在目標文件2中的鏈接 前的機器語言程序?qū)嵤╂溄犹幚怼f溄雍蟮臋C器語言程序被記錄在可執(zhí)行文件3中。如上所示,在本實施方式所涉及的編譯器中,如果輸入的高級語言程序中包含有 用于指定上述的第一處理塊組的描述,則緊接在該第一處理塊組中所包含的任意處理塊之后,并不配置包含在該第一處理塊組中的其他處理塊。充分理解高級語言程序的運行的程序開發(fā)者了解正在開發(fā)的程序中包含在第一 處理塊組中的處理塊。因此,在多數(shù)情況下,程序開發(fā)者能夠正確指定作為第一處理塊組的 處理塊。程序開發(fā)者在編寫高級語言程序時,例如如下所示指定第一處理塊組。即,假設使 再生系處理與記錄系處理在相互獨立的運行模式下運行的情況。在這種情況下,當編寫的 程序中包含有再生系處理所需的處理塊與記錄系處理所需的處理塊時,程序開發(fā)者將再生 系所需的處理塊與記錄系所需的處理塊指定為第一處理塊組。本實施方式所涉及的編譯器在包含在第一處理塊組中的任意處理塊(命令代碼) 之后配置分支命令,然后,在緊接在分支命令之后或附近的位置上并不配置包含在第一處 理塊組中的其他處理塊(命令代碼)。換言之,在包含在第一處理塊組中的任意處理塊(命 令代碼)之后配置分支命令,然后,在緊接在分支命令之后或附近的位置上配置包含在第 二處理塊組中的處理塊(命令代碼)。據(jù)此,能夠抑制執(zhí)行一系列的處理塊組時易于發(fā)生的 高速緩存未命中,從而能夠抑制因高速緩存未命中而引起的性能下降。(第二實施方式)參考圖6 圖8,對本發(fā)明的第二實施方式所涉及的基于編譯器的程序優(yōu)化方法 的執(zhí)行例進行說明。此外,關于用于指定包含在高級語言程序中的處理塊的相關關系(交 叉關系)的描述,與圖4A所示的相同。在第一實施方式中,緊接在第一處理塊組中所包含的任意命令代碼(處理塊)之 后,并不配置包含在第一處理塊組中的其他命令代碼(處理塊),而在這里配置包含在第二 處理塊組中的命令代碼(處理塊)。與此相對,在第二實施方式中,在主存儲器上對這些包含在第一處理塊組中的處 理塊進行地址配置,以使包含在第一處理塊組中的處理塊被分別配置在高速緩沖存儲器上 的同一地址。據(jù)此,因高速緩存未命中而引起的性能下降得到進一步抑制。為了計算出這種命令代碼的配置位置,本實施方式所涉及的編譯器基于包含在高 級語言程序中的描述,執(zhí)行將機器語言程序的一部分確定為處理范圍的處理,以及對位于 處理范圍內(nèi)的命令代碼的配置位置進行確定的處理。下面參考圖6,對本實施方式所涉及的編譯器的結(jié)構(gòu)進行說明。本實施方式所涉及 的編譯器的整體結(jié)構(gòu)與第一實施方式所涉及的編譯器相同(參考圖5)。但是,本實施方式 所涉及的編譯器包括圖6所示的連接部30以代替圖5所示的連接部20。連接部30執(zhí)行一 次連接步驟S31、范圍確定步驟S32、地址重復檢測步驟S33、配置確定步驟S34以及配置步 驟S35。另外,連接部30包括記錄一次連接步驟S31的輸出數(shù)據(jù)的一次可執(zhí)行文件4和地 址匹配信息文件5。在一次連接步驟S31中,對記錄在目標文件2中的機器語言程序執(zhí)行鏈接處理。據(jù) 此,生成可執(zhí)行的機器語言程序(鏈接后的機器語言程序)以及子程序和/或標簽的地址 信息。可執(zhí)行的機器語言程序被記錄在一次可執(zhí)行文件4中,地址信息被記錄在地址匹配 信息文件5中。一次可執(zhí)行文件4中還記錄有在高級語言程序中對被指定為高優(yōu)先級處理 的處理進行確定的信息。在范圍確定步驟S32中,基于記錄在一次可執(zhí)行文件4中的內(nèi)容,對處理塊的相關 關系(交叉關系)進行解析。其結(jié)果是選擇出相當于相互沒有相關關系(沒有交叉運行關系)的包含在第一處理塊組中的處理塊的命令代碼,來作為處理對象。在地址重復檢測步驟S33中,基于記錄在地址匹配信息文件5中的內(nèi)容,計算出包 含在第一處理塊組中的多個命令代碼在主存儲器上的地址。而且,基于計算出的地址組以 及與高速緩沖存儲器的結(jié)構(gòu)相關的信息,從相當于包含在第一處理塊組中的各個處理塊的 命令代碼組之中,檢測出其在高速緩沖存儲器內(nèi)的存儲位置互不重復的多個命令代碼。存在高速緩沖存儲器內(nèi)的存儲位置不重復的多個命令代碼時,在配置確定步驟 S34中,確定命令代碼的配置位置,以使上述多個命令代碼被重復配置。在配置步驟S35中, 相當于第一處理塊組的命令代碼組被配置在由配置確定步驟S34確定出的位置上。參考圖7和圖8,對主存儲器地址與高速緩沖存儲器地址的對應關系(由地址重 復檢測步驟S33使用)進行說明。在這里,作為例子,對利用兩路組關聯(lián)O々- 4 ·七^ 卜· 7 y〉工4 y 4 y )方式,行大小為32字節(jié),總?cè)萘繛?K字節(jié)的高速緩沖存儲器(參 考圖7)進行說明。如果設主存儲器的地址寬度為32比特,則其中低位13比特與高速緩沖存儲器的 地址相對應(參考圖8)。高速緩沖存儲器的地址被分為標簽、“、地址的最低位比特 (1比特)、索引(7比特)以及偏移量(5比特)。標簽地址的最低位比特用于指定兩路中的 任意一個,索引用于指定行,偏移量用于指定行上的字節(jié)。相當于兩個處理的命令代碼的主存儲器的地址之中,當標簽地址的最低位比特加 上索引一共8比特都一致時,這兩個命令代碼在高速緩沖存儲器內(nèi)被重復配置。如此,在地 址重復檢測步驟S33中,根據(jù)對主存儲器地址的一部分是否一致的判斷,能夠判斷出命令 代碼的高速緩沖存儲器內(nèi)的存儲位置是否重復。因此,根據(jù)本實施方式所涉及的編譯器,通過在高速緩沖存儲器內(nèi)將相當于第一 處理塊組的命令代碼組配置為其地址的存儲位置重復,能夠抑制因高速緩存未命中而引起 的性能下降。此外,在本發(fā)明的第一、第二實施方式中,將在高級語言程序內(nèi)參數(shù)為“開”的 #pragma預處理指令與參數(shù)為“關”的Spragma預處理指令之間所夾的部分指定為第一處理 塊組(相互沒有相關關系(沒有交叉運行關系)的處理塊的組)。這個步驟相當于用于指 定包含在高級語言程序中的第一范圍的描述,即用于在機器語言程序之中選擇第一范圍的 程序部分作為處理范圍的描述。此外,作為第一處理塊組的指定方法也可以使用除此之外 的方法。以下,作為其他指定方法,對第一、第二其他指定方法進行說明。(第一其他指定方法)在各種高級語言程序之中,具有包括以下所示的第一描述的程序。即,第一描述為 用于從第一處理塊組的范圍之中,將雖然在第一處理塊組的范圍內(nèi),但是如果著眼于對構(gòu) 成第一處理塊組的多個處理塊進一步微細地進行劃分后的處理部分組,則被看做是具有相 關關系(具有交叉運行關系)的處理部分組抽出并指定的#pragma預處理指令。如果使用第一描述作為識別基準,則能夠指定位于包含在高級語言程序中的第一 范圍內(nèi)的第二范圍作為處理范圍。換言之,能夠?qū)⒃跈C器語言程序中相當于從第一范圍中 去除了第二范圍的范圍的程序部分指定為處理范圍。(第二其他指定方法)另外,在各種高級語言程序之中,具有包括以下所示的第二、第三描述的程序。艮口,第二描述為用于指定第二處理塊組(具有相關關系(具有交叉運行關系)的處理塊組)的 Spragma預處理指令。第三描述為用于從第二處理塊組的范圍之中,將雖然在第二處理塊組 的范圍內(nèi),但是如果著眼于對構(gòu)成第二處理塊組的多個處理塊進一步微細地進行劃分后的 處理部分組,則被看做是沒有相關關系(沒有交叉運行關系)的處理部分組抽出并指定的 #pragma預處理指令。如果將上述第二、第三描述用于處理范圍的識別基準,則能夠?qū)Αぴ跈C器語言程序中相當于第一范圍之外的范圍的程序部分或者·在高級語言程序中位于第一范圍內(nèi)的第二范圍進行指定。S卩,如果將上述第二、第三描述用于識別基準,則能夠指定將去除了第二范圍的第 一范圍的部分設為范圍之外的機器語言程序的程序部分為處理范圍。上述本發(fā)明的編譯器為用于使計算機執(zhí)行第一、第二實施方式的優(yōu)化方法的編譯 器,本發(fā)明的記錄介質(zhì)為記錄有用于使計算機執(zhí)行第一、第二實施方式的優(yōu)化方法的編譯 器的計算機可讀取記錄介質(zhì),本發(fā)明的信息傳輸介質(zhì)為用于經(jīng)由因特網(wǎng)等傳輸用于使計算 機執(zhí)行第一、第二實施方式的優(yōu)化方法的編譯器的信息傳輸介質(zhì)。本發(fā)明的基于編譯器的優(yōu)化方法,由于能夠廉價且容易地抑制因高速緩存未命中 而引起的性能下降,因此能夠利用于將高級語言程序轉(zhuǎn)換為機器語言程序的各種編譯器。符號說明
1源文件
2目標文件
3可執(zhí)行文件
4一次可執(zhí)行文件
5地址匹配信息文件
10翻譯部
20,30連接部
Sll預處理指令解析步驟
S12分支結(jié)構(gòu)處理步驟
S13命令代碼生成步驟
S21連接步驟
S31一次連接步驟
S32范圍確定步驟
S33地址重復解析步驟
S34配置確定步驟
S35配置步驟
1權利要求
1.一種程序優(yōu)化方法,由在將高級語言程序轉(zhuǎn)換為機器語言程序時進行程序轉(zhuǎn)換的編 譯器執(zhí)行,所述程序優(yōu)化方法包括范圍確定步驟,根據(jù)包含在所述高級語言程序中的描述,確定所述機器語言程序的任 意一個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置, 所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的描述, 所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相關關 系的所述處理塊的程序部分確定為所述處理范圍,所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊,確定 位于所述處理范圍內(nèi)的命令代碼的配置位置。
2.根據(jù)權利要求1所述的程序優(yōu)化方法,所述配置確定步驟確定位于所述處理范圍內(nèi) 的命令代碼的配置位置,以使所述描述中的描述順序與所述機器語言程序中的所述命令代 碼的配置順序不同。
3.根據(jù)權利要求1所述的程序優(yōu)化方法,所述描述進一步具有用于指定包含在所述高級語言程序中的第一范圍的描述部分, 所述范圍確定步驟將相當于所述第一范圍的所述機器語言程序的程序部分確定為所 述處理范圍。
4.根據(jù)權利要求3所述的程序優(yōu)化方法,其特征在于,所述描述進一步具有用于指定位于所述第一范圍內(nèi)的第二范圍的描述部分, 所述范圍確定步驟將相當于從所述第一范圍中去除了所述第二范圍的范圍區(qū)域的所 述機器語言程序的程序部分確定為所述處理范圍。
5.根據(jù)權利要求1所述的程序優(yōu)化方法,所述描述進一步具有用于指定包含在所述高級語言程序中的第一范圍的描述部分, 所述范圍確定步驟將相當于所述第一范圍之外的范圍的所述機器語言程序的程序部 分確定為所述處理范圍。
6.根據(jù)權利要求5所述的基于編譯器的優(yōu)化方法,所述描述進一步具有用于指定位于所述第一范圍內(nèi)的第二范圍的描述部分, 所述范圍確定步驟將相當于從所述第一范圍中去除了所述第二范圍的范圍區(qū)域之外 的范圍的所述機器語言程序的程序部分確定為所述處理范圍。
7.一種編譯器,用于使計算機執(zhí)行將高級語言程序轉(zhuǎn)換為機器語言程序的處理以及程 序優(yōu)化處理,所述程序優(yōu)化處理包括范圍確定步驟,根據(jù)包含在所述高級語言程序中的描述,確定所述機器語言程序的一 個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置, 所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的描述, 所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相關關 系的所述處理塊的程序部分確定為所述處理范圍,所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊,確定位于所述處理范圍內(nèi)的命令代碼的配置位置。
8.一種計算機可讀取記錄介質(zhì),記錄有用于使計算機執(zhí)行將高級語言程序轉(zhuǎn)換為機器 語言程序的處理以及程序優(yōu)化處理的編譯器,所述程序優(yōu)化處理包括范圍確定步驟,根據(jù)包含在所述高級語言程序中的描述,確定所述機器語言程序的一 個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置, 所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的描述, 所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相關關 系的所述處理塊的程序部分確定為所述處理范圍,所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊,確定 位于所述處理范圍內(nèi)的命令代碼的配置位置。
9.一種信息傳輸介質(zhì),傳輸用于使計算機執(zhí)行將高級語言程序轉(zhuǎn)換為機器語言程序的 處理以及程序優(yōu)化處理的編譯器,所述程序優(yōu)化處理包括范圍確定步驟,根據(jù)包含在所述高級語言程序中的描述,確定所述機器語言程序的一 個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置, 所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的描述, 所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相關關 系的所述處理塊的程序部分確定為所述處理范圍,所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊,確定 位于所述處理范圍內(nèi)的命令代碼的配置位置。
全文摘要
一種程序優(yōu)化方法,包括范圍確定步驟,根據(jù)包含在高級語言程序中的描述,確定所述機器語言程序的一個程序部分為實施程序優(yōu)化的處理范圍;以及配置確定步驟,確定位于所述處理范圍內(nèi)的命令代碼的配置位置。所述描述為用于指定所述高級語言程序所具有的多個處理塊之間的相關關系的描述。所述范圍確定步驟在所述機器語言程序之中將相當于由所述描述指定了所述相關關系的所述處理塊的程序部分確定為所述處理范圍。所述配置確定步驟根據(jù)由所述描述指定的所述相關關系,針對每個所述處理塊,確定位于所述處理范圍內(nèi)的命令代碼的配置位置。
文檔編號G06F12/08GK102099786SQ20098012854
公開日2011年6月15日 申請日期2009年7月17日 優(yōu)先權日2008年7月22日
發(fā)明者米津武紀 申請人:松下電器產(chǎn)業(yè)株式會社