專利名稱:計算機系統(tǒng)、編譯器裝置以及操作系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及一種計算機系統(tǒng)、編譯器裝置以及操作系統(tǒng),特別是涉及一種具有高速緩沖存儲器的計算機系統(tǒng)以及用在所述計算機系統(tǒng)中的編譯器裝置和操作系統(tǒng)。
背景技術:
近年來在處理器的計算速度方面已經有了顯著的提高,但是與處理器相比對主存儲器的存取速度還沒有得到提高。由于讀/寫指令或數(shù)據(jù)所引起的存取主存儲器時的等待時間,處理器與主存儲器的處理速度之間擴大的差距對于處理器的性能改進有著不利的影響。
為了減少在存儲器存取時的等待時間,近來的處理器除了主處理器,還配備有低容量存儲器,稱為高速緩沖存儲器,對該存儲器可以進行相對高速的存取。在具有這種配置的計算機中,可以在高速緩沖存儲器上存儲某些存儲在主存儲器中的指令或數(shù)據(jù)。因此,當處理器訪問主存儲器時可以減少所發(fā)生的等待時間,從而避免處理器的性能受等待時間的影響。
當處理器存取主存儲器時如果在高速緩沖存儲器上存在著目標指令或數(shù)據(jù),則該處理器可以以比在存取主存儲器的情況下少的等待時間來讀/寫該目標指令或數(shù)據(jù)。另一方面,如果在高速緩沖存儲器上不存在目標指令或數(shù)據(jù),則該處理器在向高速緩沖存儲器傳送存儲在包括所述目標指令或數(shù)據(jù)的存儲器中的某些指令或數(shù)據(jù)之后,從高速緩沖存儲器中讀或向其寫該目標指令或數(shù)據(jù)。從主存儲器向高速緩沖存儲器傳送數(shù)據(jù)需要花費很多時間,但是在通常的程序序列中,極有可能是處理器在對主存儲器上的某一地址進行存取之后的某一時間周期訪問鄰近的地址。由于這一事實,與直接對主存儲器進行存取相比,如果處理器在向高速緩沖存儲器傳送指令或數(shù)據(jù)之后再對主存儲器進行存取,則有可能減少等待時間。
但是,當在高速緩沖存儲器上不存在目標指令/數(shù)據(jù)時,處理器的處理在從主存儲器向高速緩沖存儲器傳送指令/數(shù)據(jù)的同時需要被掛起,因此處理器的性能被降低。為了避免這種性能的降低,提出了各種回避高速緩存未命中的方法。
例如,公開了一種技術,其中在編譯源程序時插入預取指令到一部分源程序中,并且在執(zhí)行該指令之前將必要的指令或數(shù)據(jù)從主存儲器傳送至高速緩沖存儲器(例如,參見日本已公開專利申請No.11-212802(圖2)或日本已公開專利申請No.11-306028(圖1))。
然而,在上述方法中,當不考慮高速緩沖存儲器的狀態(tài)而執(zhí)行一個程序時,毫無例外地要執(zhí)行在編譯時插入的預取指令。這會導致一個問題,即在多任務執(zhí)行環(huán)境中,由具有較高優(yōu)先級的程序所使用的指令和數(shù)據(jù)會由于具有較低優(yōu)先級的程序所使用的指令和數(shù)據(jù)已被預取而被清洗,因此高速緩存命中率降低。
此外,即使是由具有較低優(yōu)先級的程序所使用的指令或數(shù)據(jù)被預取,在執(zhí)行具有較高優(yōu)先級的程序時,該由具有較低優(yōu)先級的程序所使用的程序或指令也被清洗,這導致另外一個問題就是執(zhí)行這種預取白費了。
發(fā)明內容
本發(fā)明為了解決上述問題而構想,并且本發(fā)明的一個目的是提供一種能夠改進高速緩存命中率的計算機系統(tǒng)、編譯器裝置、以及操作系統(tǒng)。
此外,本發(fā)明還有一個目的是提供一種可以防止高速緩沖存儲器執(zhí)行不必要的預取的計算機系統(tǒng)、編譯器裝置、以及操作系統(tǒng)。
根據(jù)本發(fā)明的計算機系統(tǒng)是一種包括以下部件的計算機系統(tǒng)高速緩沖存儲器,存儲有一個或多個存儲在主存儲器中的指令和數(shù)據(jù);以及高速緩存控制單元,用于控制高速緩沖存儲器,其中所述高速緩存控制單元測量高速緩沖存儲器的使用率,并根據(jù)所述測量的使用率來控制高速緩沖存儲器。
上述配置使得由處理器執(zhí)行的程序知道高速緩沖存儲器的使用率。因此,使得該程序可以在例如高速緩沖存儲器的使用率較高時執(zhí)行不進行預取的處理。這樣,可以回避由具有較高優(yōu)先級的程序所使用的指令或數(shù)據(jù)被從高速緩沖存儲器中清洗,從而可以增加高速緩沖存儲器的命中率。
優(yōu)選的是,所述高速緩存控制單元具有一個計數(shù)器,其測量高速緩沖存儲器中用于指定所述使用率的有效入口項(entry)的數(shù)量。
該配置使得可以在逐行或逐個入口項的基礎上管理高速緩沖存儲器的使用狀態(tài),并通過程序控制存儲器的存取。
根據(jù)本發(fā)明的另一個方面的計算機系統(tǒng),為一個包括以下部件的計算機系統(tǒng)多個高速緩沖存儲器,對應于多個處理器中的各個處理器并且存儲有存儲在主存儲器中的一個或多個指令和數(shù)據(jù);多個高速緩存控制單元,對應于多個高速緩沖存儲器中的各個高速緩沖存儲器;以及一個處理器間通信單元,用于使多個處理器互連,并且在從多個處理器中的第一處理器接收到操作一個對應于不同于第一處理器的第二處理器的高速緩沖存儲器的命令后,輸出一個操作所述高速緩沖存儲器的命令給對應于第二處理器的高速緩存控制單元,其中多個高速緩存控制單元根據(jù)來自處理器間通信單元的命令操作各個高速緩沖存儲器。優(yōu)選的是,該計算機系統(tǒng)進一步包括處理器識別單元,用于識別一個正執(zhí)行程序的處理器,其中在接收到用于識別第二處理器的信息后,第一處理器向所述處理器間通信單元發(fā)送基于該識別第二處理器的信息操作對應于第二處理器的高速緩沖存儲器的命令。
該處理器間通信單元允許一個處理器控制由其他處理器使用的高速緩沖存儲器。
優(yōu)選的是,處理器識別單元被實現(xiàn)作為機器語言指令,其返回分配給多個處理器中的各個處理器的唯一號。
該結構使得可以簡便的在程序上控制多個高速緩沖存儲器。
優(yōu)選的是,處理器間通信單元在接收到來自第一處理器的命令之后,發(fā)送預清除(prepurge)指令或預取指令給對應于第二處理器的高速緩沖存儲器。
即使是對具有多個處理器及對應的高速緩沖存儲器的結構來說,該結構也允許有效的利用高速緩沖存儲器,并因此避免了處理器性能的降低。
此外,根據(jù)本發(fā)明的再一個方面的編譯器裝置是一個將以高級語言編寫的源程序轉換成可執(zhí)行程序的編譯器裝置,包括預取目標提取單元,用于對源程序中的每個預定執(zhí)行組提取將從主存儲器向高速緩沖存儲器預取的指令或數(shù)據(jù),并產生一個列出所提取指令或數(shù)據(jù)的地址的地址列表;以及一個線程過程生成單元,用于(i)分析源程序中每個執(zhí)行組的控制結構,(ii)根據(jù)分析的結果從所述地址列表中選擇將被預取的指令或數(shù)據(jù)的地址,以及(iii)生成用于預取存儲在由所選擇的地址指定的位置中的指令或數(shù)據(jù)的預取線程。
利用上述結構,除了主任務外還生成預取線程。通過添加預取線程到源程序中,使得可以有效利用高速緩沖存儲器。
優(yōu)選的是,該線程過程生成單元檢查激活所述線程過程生成單元的任務的優(yōu)先級,并且當在任何一個處理器上都沒有執(zhí)行比所述優(yōu)先級更高優(yōu)先級的任務時生成用于執(zhí)行預取的預取線程。
根據(jù)上述結構,如果一個已激活預取線程的任務的優(yōu)先級是所有任務中最高的,則允許執(zhí)行預取。因此任何情況下都不會發(fā)生具有較高優(yōu)先級的任務的指令或數(shù)據(jù)被具有較低優(yōu)先級的任務清除的情況,這使得增加了高速緩沖存儲器的命中率。
更優(yōu)選的是,線程過程生成單元只在高速緩沖存儲器的使用率等于或低于一指定值的時候才生成用于執(zhí)行預取的預取線程。
通過僅在高速緩沖存儲器的使用率等于或低于一預定值時執(zhí)行預取,使得可以在高速緩沖存儲器的使用率較高時不執(zhí)行任何預取。因此,任何情況下都不會發(fā)生執(zhí)行不必要的預取的情況,這是由于具有較低優(yōu)先級的程序的指令或數(shù)據(jù)已被預取從而由具有較高優(yōu)先級的程序所使用的指令或數(shù)據(jù)被從高速緩沖存儲器中清除的緣故。
優(yōu)選的是,該編譯器裝置進一步包括預取計時確定單元,用于基于在執(zhí)行感興趣的組中的指令所需的執(zhí)行時間以及與下一個執(zhí)行組中的所述預取指令和數(shù)據(jù)有關的時間,確定應當在源程序上開始預取的預取開始時間,所述預取開始時間允許在下一執(zhí)行組開始執(zhí)行指令之前完成所述預取的執(zhí)行,其中所述線程激活插入單元在由預取計時確定單元確定的對源程序的預取開始時間插入一個激活用于預取下一執(zhí)行組中的指令或數(shù)據(jù)的預取線程的過程。
通過在該時間插入一個預取線程,該預取將在下一執(zhí)行組開始執(zhí)行之前已經完成。因此,可以增加高速緩沖存儲器的命中率,并且獲得高速的處理。
根據(jù)本發(fā)明再一個方面的操作系統(tǒng)是一個可以進行多任務處理的操作系統(tǒng),該操作系統(tǒng)使得一個計算機可以用作高速緩存使用率監(jiān)控單元,用于監(jiān)控高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)高速緩沖存儲器的使用率來控制由一個處理器所執(zhí)行的任務的執(zhí)行序列。
因此,可以改變由所述處理器執(zhí)行的任務的序列。這樣,通過以優(yōu)先的方式執(zhí)行具有較高優(yōu)先級的任務,當高速緩沖存儲器的使用率較高時,可以增加該高速緩沖存儲器的命中率并提高程序的執(zhí)行速度。
優(yōu)選的是,該操作系統(tǒng)進一步使得所述計算機用作優(yōu)先級檢查單元,用于檢查是否存在一個具有比正被處理器執(zhí)行的任務的優(yōu)先級高的任務,其中當高速緩沖存儲器的使用率大于一預定閾值時,任務控制單元增加執(zhí)行頻率,以便具有較高優(yōu)先級的任務的執(zhí)行頻率變得比高速緩沖存儲器的使用率等于或低于所述預定閾值的情況高。
因此,通過當高速緩沖存儲器的使用率較高時執(zhí)行具有較低優(yōu)先級的任務,可以避免具有較高優(yōu)先級的指令或數(shù)據(jù)被廢除。
根據(jù)本發(fā)明的另一個方面的操作系統(tǒng)是一種用于配有多個處理器的計算機系統(tǒng)的操作系統(tǒng),其中該計算機系統(tǒng)具有多個與所述多個處理器中的各個處理器對應的高速緩沖存儲器,并且該操作系統(tǒng)使得計算機用作高速緩存使用率監(jiān)控單元,用于監(jiān)控多個高速緩沖存儲器中的各個高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)多個高速緩沖存儲器中的各個高速緩沖存儲器的使用率來控制任務的執(zhí)行序列。優(yōu)選的是,任務控制單元優(yōu)先分配一個任務給對應于其使用率是所有高速緩沖存儲器中最低的高速緩沖存儲器的處理器。
該結構使得可以分配任務給其使用率較低的處理器,因此提高了整個計算機的性能。
優(yōu)選的是,該操作系統(tǒng)進一步使得計算機用作優(yōu)先級檢查單元,用于檢查是否存在一個具有比正被多個處理器中的每個處理器執(zhí)行的每個任務的優(yōu)先級高的任務,其中當多個高速緩沖存儲器中的各個高速緩沖存儲器的所有使用率都大于一預定閾值時,任務控制單元增加執(zhí)行頻率,以便具有較高優(yōu)先級的任務的執(zhí)行頻率變得高于高速緩沖存儲器的使用率等于或低于所述預定閾值的情況。
該結構甚至允許一個多處理器系統(tǒng)在逐個任務的基礎上考慮任務的優(yōu)先級來控制多個高速緩沖存儲器。
應當注意本發(fā)明不僅可以體現(xiàn)為如上所述的計算機系統(tǒng),編譯器裝置和操作系統(tǒng),還可以體現(xiàn)為編譯器和包括特征指令的程序。還應當注意,這種程序可以分配在諸如光盤只讀存儲器(CD-ROM)的記錄介質上或通過諸如互聯(lián)網的傳輸介質分配。
根據(jù)本發(fā)明,可以提高高速緩沖存儲器的命中率;防止高速緩沖存儲器執(zhí)行不必要的預??;從處理器上執(zhí)行的程序控制存儲器的存取;在多處理器計算機系統(tǒng)中允許一個處理器控制被其他處理器使用的高速緩沖存儲器;有效地利用高速緩沖存儲器并防止處理器的性能下降,即使是在具有多個處理器和對應的高速緩沖存儲器的情況下;防止具有較高優(yōu)先級的任務的指令或數(shù)據(jù)被從高速緩沖存儲器中清洗;通過使用上述編譯器裝置,可以使程序員在不需要知道存在高速緩沖存儲器的情況下開發(fā)用于執(zhí)行預取的程序,這有利于開發(fā)具有高執(zhí)行速度的程序;并且允許具有較高優(yōu)先級的任務有效地利用高速緩沖存儲器,因而有利于開發(fā)具有高執(zhí)行速度的程序。
2003年8月29日申請的日本專利申請No.2003-306437的公開內容,包括說明書、附圖和權利要求書,整體插入在此作為參考。
本發(fā)明的這些和其他目的、優(yōu)點及特征從以下結合附圖的描述中將變得更加明顯,附圖中說明了本發(fā)明的具體實施例。在所述附圖中附圖1是表示根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)的硬件結構圖;附圖2是說明高速緩沖存儲器中的存儲位置的圖;附圖3是說明構成圖2所示的高速緩沖存儲器的入口項的詳細情況圖;附圖4是表示一存儲器控制器的原理圖;附圖5是表示由存儲器控制器執(zhí)行的操作的流程圖;附圖6A是說明一預取指令的圖;附圖6B是說明一預清除指令的圖;附圖7是表示用在根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)中的操作系統(tǒng)的配置圖;附圖8是表示產生將由計算機系統(tǒng)中的CPU執(zhí)行的程序的編譯器裝置的結構圖;附圖9是表示將被編譯的源代碼的示例圖;附圖10是表示圖9所示的以基本塊劃分的源代碼的圖;附圖11是表示圖8中所示的預取目標提取裝置的操作流程圖;附圖12A~12D表示從圖10所示的各個基本塊生成的預取目標列表圖;附圖13是表示由圖8所示的線程激活插入裝置執(zhí)行的處理流程圖;附圖14和15是表示由圖8所示的線程過程生成裝置生成的預取線程中的處理流程圖;附圖16是表示在由一個過程激活的預取線程中執(zhí)行的處理流程圖,該過程用于激活將插入在圖10所示的基本塊中的預取線程;附圖17是表示在一個預清除線程中執(zhí)行的處理流程圖;附圖18是表示在執(zhí)行從圖9的源代碼生成的程序序列時的操作圖象圖;附圖19是表示根據(jù)本發(fā)明的第二實施例配有多個處理器的計算機系統(tǒng)的結構圖;
附圖20A是說明計劃用于另一個處理器的預取指令的圖;附圖20B是說明計劃用于另一個處理器的預清除指令的圖;附圖21A是表示圖20A中所示的預取指令的具體示例圖;附圖21B是表示圖20B中所示的預清除指令的具體示例圖;附圖22是說明處理器識別指令的圖。
具體實施例方式
(第一實施例)下面參照附圖給出根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)的詳細說明(1)硬件結構附圖1是表示根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)的硬件結構圖。如圖1所示,根據(jù)本發(fā)明的計算機系統(tǒng)600由CPU 601、存儲器控制器604、高速緩沖存儲器602和主存儲器603構成。
主存儲器603是用于存儲指令和數(shù)據(jù)的大容量存儲裝置,對其可以以低速進行存取。高速緩沖存儲器602是用于臨時存儲存儲在主存儲器603的某些位置中的指令和數(shù)據(jù)的小容量存儲裝置,對其可以進行高速存取。CPU601是一個運算單元,用于執(zhí)行存儲在主存儲器603或高速緩沖存儲器602中的指令,并向主存儲器603或高速緩沖存儲器602寫數(shù)據(jù)或從其讀數(shù)據(jù)。存儲器控制器604是控制主存儲器603與高速緩沖存儲器602之間的存取并控制CPU 601與高速緩沖存儲器602之間以及與主存儲器603之間的存取的控制裝置。
附圖2是說明高速緩沖存儲器中的存儲位置的圖。高速緩沖存儲器602以逐個入口項為基礎存儲數(shù)據(jù),其由入口項202、203、204和205構成。
附圖3是說明構成圖2所示的高速緩沖存儲器的入口項的詳細情況圖。入口項205(202、203和204)由指令/數(shù)據(jù)字段304,地址字段301,有效指示字段302和寫指示字段303組成。
存儲在指令/數(shù)據(jù)字段304中的是指令或數(shù)據(jù)。存儲在地址字段304中的是對應于存儲在指令/數(shù)據(jù)指令字段304中的指令或數(shù)據(jù)的主存儲器304中的地址。
存儲在有效指示字段302中的是指示存儲在該入口項中的指令或數(shù)據(jù)是否是有效的1位。有效指示字段302具有1位元素。如果該位的值為1則其指示有效指令或數(shù)據(jù)存儲在該入口項中,反之如果該位的值為0則指示有效的指令或數(shù)據(jù)沒有存儲在該入口項中。
存儲在寫指示字段303中的是指示是否已對該入口項執(zhí)行了寫的1位。寫指示字段303具有1位元素。如果該位的值為1則其指示已對該入口項執(zhí)行了寫,反之如果該位的值為0則指示還沒有對該入口項執(zhí)行寫。
圖1中的主存儲器603包括32位地址空間,例如其以16字節(jié)為基礎被分成“行”。在這種情況下,等同于一行的指令或數(shù)據(jù)存儲在高速緩沖存儲器602的一個入口項中。例如,當存儲在主存儲器603的地址0x80000008處的數(shù)據(jù)從主存儲器603傳送到高速緩沖存儲器602時,存儲器控制器604執(zhí)行控制以便存儲在主處理器中從地址0x80000000到0x8000000F的16字節(jié)的指令或數(shù)據(jù)立即被傳送至高速緩沖存儲器602。
附圖4是表示一存儲器控制器的原理圖。如圖4所示,存儲器控制器604具有高速緩存使用量寄存器501。存儲在該高速緩存使用量寄存器501中的是其在有效指示字段302中的位指示為有效的入口項的數(shù)量。換句話說,當高速緩沖存儲器602中某一入口項的有效指示字段302的1位從無效變?yōu)橛行r,存儲在高速緩存使用量寄存器501中的入口項的數(shù)量加1,反之當高速緩沖存儲器602中某一入口項的有效指示字段302的1位從有效變?yōu)闊o效時,存儲在高速緩存使用量寄存器501中的入口項的數(shù)量減1。由CPU 601執(zhí)行的軟件通過參考存儲在高速緩存使用量寄存器501中的該入口項數(shù)量可以了解到高速緩沖存儲器使用的次數(shù)。
附圖5是表示當CPU 601從或向高速緩沖存儲器602或主存儲器603讀或寫指令或數(shù)據(jù)時由存儲器控制器執(zhí)行的操作的流程圖。根據(jù)圖5所示的流程圖,存儲器控制器604根據(jù)一種完全相關方案控制高速緩沖存儲器602與主存儲器603之間的指令或數(shù)據(jù)的存取。
在接收到來自CPU 601的存儲器存取請求之后,存儲器控制器604檢查在對應于存儲器存取所請求的地址的高速緩沖存儲器602中是否存在任何指令或數(shù)據(jù)(S401)。說明另一種方式,存儲器控制器604檢查高速緩沖存儲器602中其有效指示字段302中的位指示為有效的入口項以外是否存在任何其地址字段301存儲有與存儲器存取所請求的地址相同的地址的入口項。當存在包括目標地址的入口項時(S401中的是),存儲器控制器604執(zhí)行控制以便從或向高速緩沖存儲器602中的上述入口項中讀或寫指令或數(shù)據(jù)(S402)。
當有效入口項中沒有一個入口項的地址字段301存儲有與目標地址匹配的地址時(S401中的否),存儲器控制器604檢查是否存在任何其有效指示字段302中的位指示為無效的入口項(S403)。當存在其有效指示字段302中的位為無效的入口項時(S403中的是),存儲器控制器604選擇一個這樣的入口項,并將存儲在包括主存儲器604的目標地址的行中的指令或數(shù)據(jù)傳送給該選擇的入口項。同時,存儲器控制器604將目標地址寫入已傳送指令或數(shù)據(jù)的入口項的地址字段(S404)。此外,存儲器控制器604設置該入口項的有效指示字段302的位為有效,并設置該入口項的寫指示字段303的位為無效。
當所有入口項的有效指示字段302的位都指示為有效時,存儲器控制器604通過使用最近最少使用(LRU)算法來選擇內容應當改變的入口項(以下稱為“目標入口項”),并檢查該目標入口項的寫指示字段303的位是有效還是無效(S405)。當寫指示字段303指示為有效時(S405中的是),存儲器控制器604將該目標入口項的指令/數(shù)據(jù)字段304的內容傳送到主存儲器603(S406)。之后,存儲器控制器604根據(jù)等同于上述改寫處理的過程將指令或數(shù)據(jù)寫入該目標入口項(S404)。
當目標入口項的寫指示字段303指示為無效時(S405中的否),存儲器控制器604根據(jù)等同于上述改寫處理的過程將指令或數(shù)據(jù)寫入該目標入口項(S404),而不執(zhí)行對主存儲器603的傳送處理(S406)。
附圖6A和6B是分別說明由CPU 601執(zhí)行的預取指令和預清除指令的圖。對于CPU 601來說可以通過除了普通的存儲器存取指令之外執(zhí)行預取指令1900或預清除指令1903來清楚地操作高速緩沖存儲器602。
如圖6A所示,由操作碼1901“預取”表示的預取指令1900是一個用于根據(jù)等同于在從CPU 601到主存儲器60 3進行存取之后的過程,將主存儲器603上包括由操作數(shù)1902“地址”表示的地址的行傳送給高速緩沖存儲器602的指令。
如圖6B所示,由操作碼1904“預清除”表示的預清除指令1903是一個用于如果地址字段301中該入口項的地址與由操作數(shù)1905“地址”指定的地址匹配,使高速緩沖存儲器602上其有效指示字段302中的位指示為有效的入口項之外的入口項的有效指示字段302無效的指令。但是,當寫指示字段303的位指示為有效時,有效指示字段302在從高速緩沖存儲器602向主存儲器603傳送數(shù)據(jù)之后被該指令無效。
(2)操作系統(tǒng)的配置附圖7是表示用在根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)600中的操作系統(tǒng)的配置圖。操作系統(tǒng)1800是一個能夠進行多任務處理的通用控制程序,其配置有高速緩存使用率監(jiān)控裝置1801,任務控制裝置1802,和優(yōu)先級通知裝置1803。這些裝置中的每個裝置都可以以CPU 601上執(zhí)行的程序來實現(xiàn)。
高速緩存使用率監(jiān)控裝置1801通過參考存儲器控制器604的高速緩存使用量寄存器501來監(jiān)控高速緩沖存儲器602的使用率。
任務控制裝置1802執(zhí)行控制以便以預定時間間隔切換多個任務中的一個任務到另一個任務。每個執(zhí)行的任務被給定一個優(yōu)先級。任務控制裝置1802切換任務以便提供較長的執(zhí)行時間給具有較高優(yōu)先級的任務。但是,當由高速緩存使用率監(jiān)控裝置1801監(jiān)控的高速緩沖存儲器602的使用率超過一指定值時,任務控制裝置1802減少具有較低優(yōu)先級的任務所執(zhí)行的頻率,并且轉而增加具有較高優(yōu)先級的任務所執(zhí)行的頻率。這里,上述的指定值是一個取決于所支持的應用程序類型以及程序序列的類型的值,因此最好是可以設置隨機數(shù)值作為該值。
優(yōu)先級通知裝置1803響應在執(zhí)行時該任務的詢問而提供表示是否存在具有比在執(zhí)行的任務的優(yōu)先級高的任務的通知。應當注意,優(yōu)先級通知裝置1803也可以是應用程序接口(API),如果存在比正調用任務的優(yōu)先級高的已進行上述詢問的任務時則返回一個真值,如果不存在具有更高優(yōu)先級的任務則返回一個假值。
(3)編譯器的配置附圖8是表示產生將由計算機系統(tǒng)600的CPU 601執(zhí)行的程序的編譯器裝置的結構圖。編譯器裝置100是一個用于將源程序轉換成可執(zhí)行形式的程序的程序,其由源代碼分析裝置101,優(yōu)化裝置102,預取目標提取裝置103,線程激活過程插入裝置104,線程過程生成裝置105,以及目標代碼生成裝置106構成。這些裝置以將在CPU 601上執(zhí)行的程序來實現(xiàn)并配置,以便它們以順序方式操作。
編譯器裝置100將源程序分成叫做“基本塊”的塊,并在基本塊的基礎上執(zhí)行編譯處理?;緣K是一組包括沒有任何分支并因此而一律順序操作的指令。如圖9所示的源代碼700,例如被分成如圖10所示的基本塊801、802、803、804和805,在基本塊的基礎上對其執(zhí)行編譯處理。
源代碼分析裝置101讀取由程序員編寫的源程序,對該源程序執(zhí)行語法分析和詞義分析,并生成中間代碼。
優(yōu)化裝置102對由源代碼分析裝置101生成的中間代碼進行優(yōu)化,以便在最后階段產生的可執(zhí)行代碼的大小和執(zhí)行時間變得小而短。
預取目標提取裝置103提取將被預取的變量。該預取目標提取裝置103的詳細說明將在后面給出。
線程激活過程插入裝置104插入用于激活預取線程和預清除線程的過程。該線程激活過程插入裝置104的詳細說明將在后面給出。
線程過程生成裝置105生成預取線程和預清除線程。由該線程過程生成裝置105生成的預取線程和預清除線程的詳細說明將在后面給出。
目標代碼生成裝置106從分別由源代碼分析裝置101和優(yōu)化裝置102產生和優(yōu)化的中間代碼生成可執(zhí)行代碼,并且通過預取目標提取裝置103、線程激活過程插入裝置104以及線程過程生成裝置105向其插入預取線程和預清除線程。
在這里沒有給出源代碼分析裝置101、優(yōu)化裝置102,以及目標代碼生成裝置106的詳細說明,因為它們不是本發(fā)明的主題并且它們的操作與現(xiàn)有的編譯器所執(zhí)行的操作相同。
附圖11是表示圖8中所示的預取目標提取裝置103的操作流程圖。預取目標提取裝置103根據(jù)圖11所示的流程圖生成對應于每個基本塊的預取目標列表。預取目標列表是一個其中存儲有一組將被預取的基本塊的地址和包含在該基本塊中的變量的地址的列表。
預取目標提取裝置103提取其中存儲有包含在基本塊中的指令的行的地址,并將其添加到預取目標列表中(S901)。在基本塊的指令不能存儲在一行中時,預取目標提取裝置103將多行的地址添加到預取目標列表中。
預取目標提取裝置103檢查基本塊中使用的變量的地址是否已經記錄在預取目標列表中(S903)。如果沒有(S901中的否),則預取目標提取裝置103將變量的地址記錄到預取目標列表中(S903)。預取目標提取裝置103從基本塊的開頭到結尾(S902~S904)重復記錄變量的地址到預取目標列表的處理(S903和S905),然后終止處理。但是,在編譯時,不可能確定變量和指令要放置的存儲器上的地址。因此,本發(fā)明被配置為使得臨時地址信息存儲在預取目標列表中,然后當確定實際地址時在鏈接目標文件時將其改寫為實際地址信息。
附圖12A~12D是表示根據(jù)圖11所示的過程,從圖10所示的各個基本塊801、802、803和805生成的預取目標列表的圖。預取目標列表1001、1002、1003和1004與圖10所示的各個基本塊801、802、803和805結合生成。但是,應當注意對應于基本塊804的預取目標列表當編譯函數(shù)func2時生成,因此當編譯函數(shù)func1時不能生成。
附圖13是表示當插入用于激活一個預取線程的過程時由圖8所示的線程激活過程插入裝置104執(zhí)行的處理流程圖。在基本塊的基礎上執(zhí)行圖13的處理。線程激活過程插入裝置104檢查正處理的基本塊的后續(xù)基本塊的數(shù)目是否是一塊(S1101)。如果后續(xù)基本塊的數(shù)目是1塊(S1101中的是),則線程激活過程插入裝置104將一個用于激活預取這種變量的線程的過程插入到一個允許在開始執(zhí)行該后續(xù)基本塊之前完成對記錄在該后續(xù)基本塊的預取目標列表中的變量的預取的位置中(S1102)。
當存在兩個或多個后續(xù)基本塊時(S1101中的否),這意味著在感興趣的基本塊中存在分支條件。為此,線程激活過程插入裝置104判斷在開始后續(xù)基本塊的處理之前是否完成預取,即使這種預取在確定決定哪個基本塊將被下一個執(zhí)行的分支條件之前開始(S1103)。當判斷該預取在后續(xù)基本塊開始處理之前完成(S1103中的是),線程激活過程插入裝置104依靠由分支條件確定的后續(xù)基本塊插入激活用于預取記錄在后續(xù)基本塊的預取目標列表中的預取變量的線程的過程(S1104)。應當注意線程激活過程在確定用于判斷分支條件的變量值之后立即被插入。因此,在開始后續(xù)基本塊的處理之前完成預取。例如,取出基本塊801,在執(zhí)行賦值語句“a=x+y;”和“b=x*y;”之后確定變量a和b的值。在該時間點,確定一個分支條件,用于決定將執(zhí)行基本塊802和803中的哪一個。因此,在執(zhí)行賦值語句“b=x*y;”之后立即插入一個用于激活預取線程的過程在該位置。
當判斷在開始后續(xù)基本塊的處理之前將不能完成預取時(S1103中的否),線程激活過程插入裝置104在確定分支條件之前,插入一個激活用于預取記錄在所有后續(xù)基本塊的預取目標列表中的變量的過程(S1105)。應當注意所述線程激活過程插入到一個允許在開始后續(xù)基本塊的處理之前完成預取的位置。
例如,在圖9所示的源代碼700以及圖10所示的基本塊801,802,803和805的情況下,根據(jù)基于變量a與變量b之間的大小關系確定的分支條件,在基本塊801之后可以執(zhí)行基本塊802或基本塊803。用在分支條件中的變量a和b的值在基本塊801中進行確定。因此,假定從確定b值到開始執(zhí)行基本塊802和803花費20個機器周期,花費10個機器周期進行預取,線程激活過程插入裝置104判斷在下一個基本塊激活之間完成預取,該下一個基本塊可以是基本塊802和803。因此,線程激活過程插入裝置104在執(zhí)行用于確定變量b的值的處理之前插入一個激活預取線程的過程。
另一方面,假定從確定變量b的值一直到開始執(zhí)行基本塊802或803為止要花費10個機器周期,并且花費20個機器周期進行預取,線程激活過程插入裝置104插入一個用于激活對應于各自的基本塊802和803的預取線程。此外,在一個基本塊的結尾插入一個用于預清除線程的過程,但是這部分的描述將在后面給出。
附圖14是表示由圖8所示的線程過程生成裝置105生成的預取線程中的處理流程圖。圖14所示的預取線程是一個根據(jù)分支條件不改變將被預取的基本塊的預取線程(在用于激活圖13所示的預取線程的過程中激活的線程(S1102和S1105))。
預取線程詢問操作系統(tǒng)1800是否正在執(zhí)行一個具有比已激活該預取線程的優(yōu)先級高的任務(S1201)。如果沒在執(zhí)行具有比上述詢問的調用任務高的優(yōu)先級的任務(S1201中的是),則該預取線程從主存儲器603中預取記錄在預取目標列表中的地址的指令和數(shù)據(jù)(S1203)。
如果正在執(zhí)行具有更高優(yōu)先級的任務(S1201中的否),則該預取線程檢查保存在高速緩存使用量寄存器501中的值以查看指示高速緩沖存儲器602的使用率的值是否等于或低于指定的值(S1202)。如果高速緩沖存儲器602的使用率等于或低于指定的值(S1202中的是),則預取線程從主存儲器603中預取記錄在預取目標列表中的地址的指令和數(shù)據(jù)(S1203中的是)。如果高速緩沖存儲器602的使用率超過所述指定值(S1202中的否),則預取線程終止處理。
應當注意,上述指定值是取決于所支持的應用程序類型以及程序序列的類型的值,因此最好可以設置隨機數(shù)值作為這一值。
如上所述,通過考慮高速緩沖存儲器的使用率來確定是否執(zhí)行預取,可以避免具有較高優(yōu)先級的任務所使用的指令和數(shù)據(jù)被從高速緩沖存儲器602中清洗。因此,變得可以提高高速緩沖存儲器602的命中率,并因此而有效地利用高速緩沖存儲器602。結果允許高速處理。
附圖15是表示在由圖8所示的線程過程生成裝置105產生的預取線程中執(zhí)行的處理的流程圖。圖15所示的預取線程是根據(jù)分支條件改變將要預取的基本塊的預取線程(在用于激活圖13所示的預取線程的處理中激活的線程(S1104))。
這里,假定存在“n”個后續(xù)基本塊,從基本塊B1到Bn(其中“n”為整數(shù)),并且用于執(zhí)行基本塊B1~Bn的條件分別為條件C1~Cn。
在該預取線程中,與圖14所示的預取線程的情況相同,當不存在任何具有比已激活該預取線程的任務的優(yōu)先級高的任務時(S1201中的是),以及當雖然存在具有更高優(yōu)先級的任務但是高速緩沖存儲器602的使用率等于或低于所述指定值時(S1201中的否以及S1202中的是),執(zhí)行以下處理。
該預取線程檢查是否滿足條件C1~Cn中的任何一個條件(S1301~S1305)。然后,該預取線程選擇一個對應于所滿足的條件Ci的基本塊Bi的預取目標列表,并且預取存儲在該預取目標列表中的地址的指令和數(shù)據(jù)(S1302,S1304,S1306以及S1307)。
例如,當條件C1為真時(S1301中的是),該預取線程預取記錄在與基本塊B1相關的預取目標列表中的地址的指令和數(shù)據(jù)(S1302)。當條件C2為真時(S1303中的是),該預取線程預取記錄在與基本塊B2相關的預取目標列表中的地址的指令和數(shù)據(jù)(S1304)。當條件C(n-1)為真時(S1305中的是),該預取線程預取記錄在與基本塊B(n-1)相關的預取目標列表中的地址的指令和數(shù)據(jù)(S1306)。當所有條件C1到C(n-1)都為假時,由于條件Cn為真(S1305中的否),因此該預取線程預取記錄在與基本塊Bn相關的預取目標列表中的地址的指令和數(shù)據(jù)(S1305)。
接著,將給出在線程激活過程中被激活的一個預取線程的描述。附圖16是表示在由一個處理器激活的預取線程中執(zhí)行的處理流程圖,用于激活將插入在圖10所示的基本塊中的預取線程。
該預取線程檢查是否正在執(zhí)行一個具有比已激活該預取線程的任務的優(yōu)先級高的任務(S1401)。如果正在執(zhí)行具有較高優(yōu)先級的任務(S1401中的否),則該預取線程檢查保存在高速緩存使用量寄存器501中的值以查看指示高速緩沖存儲器602的使用率的值是否等于或低于一個指定值(S1402)。如果存在一個具有較高優(yōu)先級的任務并且高速緩沖存儲器602的使用率超過所述指定值(S1401中的否以及S1402中的否),則該預取線程終止處理而不執(zhí)行預取處理。
如果不存在具有更高優(yōu)先級的預取線程(S1401中的是),或者高速緩沖存儲器602的使用率等于或低于所述指定值(S1402中的是),則該預取線程對一個用于分支到基本塊802或基本塊803的條件進行判斷(S1403)。敘述另一種方式為,所述預取線程比較變量a和變量b的大小。當變量a的值大于變量b的值時(S1403中的是),后續(xù)基本塊為基本塊802。因此,該預取線程根據(jù)記錄在對應于基本塊802的預取目標列表1002中的地址來預取指令和數(shù)據(jù)(S1404)。
當變量a的值等于或低于變量b的值時(S1403中的否),后續(xù)基本塊為基本塊803。因此,該預取線程根據(jù)記錄在對應于基本塊803的預取目標列表1003中的地址來預取指令和數(shù)據(jù)(S1405)。
線程過程生成裝置105除上述預取線程以外還生成預清除線程。附圖17是表示在一個預清除線程中執(zhí)行的處理流程圖。在第一次循環(huán)處理中(S1501~S1506),所述預清除線程順序選擇包含在對應于一個將被預清除的基本塊的預取目標列表中的地址。此外,在第二次循環(huán)處理中(S1502~S1504),該預清除線程順序選擇包含在將在要被預清除的基本塊之后下一個執(zhí)行的基本塊中的地址。在第一和第二次循環(huán)中,所述預清除線程比較包含在對應于將被預清除的基本塊的預取目標列表中的地址與包含在對應于下一基本塊的預取目標列表中的所有地址。如果對應于下一基本塊的預取目標列表不包括任何存在于與包含在將被預清除的基本塊的預取目標列表中的地址相同的行上的地址(S1503中的是),則該預清除線程預清除包含在對應于將被預清除的基本塊的預取目標列表中的地址的指令和數(shù)據(jù)(S1505)。如果對應于下一基本塊的預取目標列表包括存在于與包含在將被預清除的基本塊的預取目標列表中的地址相同的行上的地址(S1503中的否),則該預清除線程選擇包含在對應于將被預清除的基本塊的預取目標列表中的另一個地址(S1506),并且循環(huán)相同的處理(S1501~S1506)。
例如,使用圖9所示的源代碼和圖10所示的基本塊801,802,803,和805,假定由基本塊801所使用的位置被預清除的情況。在執(zhí)行基本塊801之后,下一個執(zhí)行基本塊802或基本塊803。因此,預清除線程比較預取目標列表1001與預取目標列表1002和1003。
首先,該預清除線程比較存儲在對應于基本塊801中的預取目標列表1001中的地址與存儲在預取目標列表1002和1003中的所有地址。如果預取目標列表1002和1003包括一個與基本塊801的地址在相同行上的地址,同時它們不包括任何與基本塊801的地址相同的地址,則預清除線程不預清除基本塊801的任何地址。另一方面,如果預取目標列表1002和1003在同一行上不包括任何地址,則該預清除線程執(zhí)行預清除。
由于變量a和變量b的地址存在于預取目標列表1002和1003中,預清除線程不執(zhí)行任何預清除。同時,當變量x的地址沒有存在于預取目標列表1002或1003中但是存在相同行上的地址,則預清除線程不預清除變量x的地址。類似的,如果存在相同行上的地址,預清除線程不預清除變量y的地址。線程過程生成裝置105生成一個執(zhí)行上述處理的預清除線程,并且插入一個用于激活該預清除線程的過程。
(4)在執(zhí)行時的圖象附圖18是表示在執(zhí)行從圖9的源代碼700生成的程序序列時的操作圖象圖。在圖18中,主線程801表示在源代碼中編寫的程序?;緣K801以間隔1604執(zhí)行,而基本塊802或基本塊803以間隔1605執(zhí)行。
由于通過編譯器裝置100的線程激活過程插入裝置104將線程激活過程插入在程序中,預取線程1602在執(zhí)行基本塊801的同時被激活。預取線程1602是一個由編譯器裝置100的線程過程生成裝置105生成的線程。當與主線程1601并行操作時,根據(jù)圖14、15和16中任何一個所示的流程圖,預取線程1602預取將由下一個將被執(zhí)行的基本塊802和803中的一個或兩個基本塊使用的指令和數(shù)據(jù)。在完成預取處理后,預取線程1602消失。
當完成基本塊801的處理時,編譯器裝置100的線程激活過程插入裝置104插入一個線程激活過程。為此,當基本塊801的執(zhí)行結束時激活預清除線程1603。預清除線程1603是一個由編譯器裝置100的線程過程生成裝置105生成的線程。當與主線程1601并行操作時,根據(jù)圖17所示的流程圖,預取線程1603預取將由下一個將被執(zhí)行的基本塊801使用的指令和數(shù)據(jù)。該預清除線程1603在完成預清除處理時消失。
在間隔1605中,執(zhí)行基本塊802或基本塊803的處理。通常,將被執(zhí)行的指令以及將由基本塊802和803使用的變量沒有存在于高速緩沖存儲器602中。這使得不能在從主存儲器603向高速緩沖存儲器602傳送指令和數(shù)據(jù)的同時執(zhí)行程序。但是,根據(jù)本發(fā)明在由編譯器裝置100編譯的程序中,預取線程1602在間隔1605傳送將被用在該間隔1605中的指令和數(shù)據(jù)。因此,CPU 601可以在執(zhí)行基本塊801的處理之后立即執(zhí)行下一基本塊802或803的處理。
此外,預清除線程1603從高速緩沖存儲器602預取將用在下一基本塊802或803中的指令和數(shù)據(jù)。因此,可以防止必要的指令和數(shù)據(jù)被從高速緩沖存儲器602中清洗。應當注意,預取線程和預清除線程是以上述方式重復生成和消失的。
如上所述,在根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)中,預取線程監(jiān)控高速緩沖存儲器的使用率,如果使用率很高則不執(zhí)行任何預取。因此,通過執(zhí)行預取,可以防止當前使用的指令和數(shù)據(jù)被預清除到主存儲器中。這使得可以減少高速緩存未命中的發(fā)生并因此而提高執(zhí)行程序的速度。此外,通過預取將由一個具有較低優(yōu)先級的程序使用的指令或數(shù)據(jù),不會發(fā)生由具有較高優(yōu)先級的程序使用的指令或數(shù)據(jù)被清除并且白白執(zhí)行預取的情況。
此外,在本實施例中,當存在兩個或多個基本塊時,在即使是確定分支條件之后將執(zhí)行后續(xù)基本塊之前完成預取的情況下,所述預取被設計成在確定該分支條件之后執(zhí)行。因此,對于不必要的基本塊的指令和數(shù)據(jù)來說將不可能被預取。
此外,還可以在當已激活一個預取線程的任務是一個具有最高優(yōu)先級的任務時允許執(zhí)行預取。因此,由具有較高優(yōu)先級的任務所使用的指令或數(shù)據(jù)不可能被具有較低優(yōu)先級的任務從高速緩沖存儲器中清洗,因而增加了高速緩沖存儲器的命中率。
(第二實施例)下面,將參照附圖給出根據(jù)本發(fā)明第二實施例的計算機系統(tǒng)的詳細說明。與第一實施例中的計算機系統(tǒng)不同,根據(jù)本發(fā)明的計算機系統(tǒng)配置有不止一個CPU,因此可以并行執(zhí)行過程。
附圖19是表示根據(jù)本發(fā)明的第二實施例配有多個處理器的計算機系統(tǒng)的結構圖。計算機系統(tǒng)1700由CPU 1701和1705、主存儲器1703、兩個高速緩沖存儲器1702和1707、兩個存儲器控制器1704和1706、以及處理器間通信裝置1708構成。
主存儲器1703具有與根據(jù)第一實施例的主存儲器603具有相同的結構。
高速緩沖存儲器1702和1707中每一個都具有與高速緩沖存儲器602相同的結構。
CPU 1702是一個運算單元,用于執(zhí)行存儲在主存儲器1703或高速緩沖存儲器1702中的指令,并在主存儲器1703或高速緩沖存儲器1702之間執(zhí)行數(shù)據(jù)讀或寫。CPU 1705是一個運算單元,用于執(zhí)行存儲在主存儲器1703或高速緩沖存儲器1707中的指令,并在主存儲器1703或高速緩沖存儲器1707之間執(zhí)行數(shù)據(jù)讀或寫。
存儲器控制器1704是控制主存儲器1703與高速緩沖存儲器1702之間的存取并控制CPU 1701與高速緩沖存儲器1702之間以及與主存儲器1703之間的存取的控制裝置。存儲器控制器1706是控制主存儲器1703與高速緩沖存儲器1707之間的存取并控制CPU 1705與高速緩沖存儲器1707之間以及與主存儲器1703之間的存取的控制裝置。
處理器間通信裝置1708是連接CPU 1701和CPU 1705以實現(xiàn)將在CPU之間執(zhí)行的通信的裝置。因此,對于運行于各個CPU上的程序來說可以通過處理器間通信裝置1708發(fā)送命令給其他CPU。更特別地是,CPU 1701與1705被分配有唯一的處理器ID,從而它們可以通過指定其處理器ID來發(fā)送命令給任意的CPU。
附圖20A是說明用于使其他CPU的高速緩沖存儲器執(zhí)行預取的指令的圖。附圖20B是說明用于使其他CPU的高速緩沖存儲器執(zhí)行預清除的指令的圖。如圖20A所示,預取指令2000是一個由操作碼2001“預取”表示的指令,與用在配置有如圖6A所示的單個CPU的計算機系統(tǒng)中的預取指令的情況相同。但是,與圖6A所示的指令不同,除了操作數(shù)2003“地址”,其還包括操作數(shù)2002“CPU id”,表示所述預取指令是針對哪個CPU。該指令使得具有由操作數(shù)2002“Cupid”指示的處理器ID的CPU預取存儲在由操作數(shù)2003“地址”所指示的地址所指定的位置上的指令或數(shù)據(jù)。
類似的,圖20B所示的預清除指令2004使得具有由操作數(shù)2006“Cupid”指示的處理器ID的CPU預清除存儲在由操作數(shù)2007“地址”所指示的地址所指定的位置上的指令或數(shù)據(jù)。
附圖21A是表示圖20A中所示的預取指令2000的具體示例圖。附圖21B是表示圖20B中所示的預清除指令2004的具體示例圖。這里,假定CPU 1701的處理器ID為“0”并且CPU 1705的處理器ID為“1”。
在此,假定預取線程運行于CPU 1701上,并且對應于已調用該預取線程的基本塊的程序運行于CPU 1705上。在這種情況下,運行于CPU 1701上的預取線程使得CPU 1705執(zhí)行預取??紤]這樣一個例子,其中運行于CPU1701上的預取線程使得CPU 1705預取存儲在主存儲器1703中地址0x80000008處的數(shù)據(jù)。在這種情況下,該預取線程執(zhí)行圖21A所示的預取指令。當執(zhí)行預取指令2100時,CPU 1701發(fā)送一個命令給處理器間通信裝置1708以使得CPU 1705預取存儲在主存儲器1703中地址0x80000008處的數(shù)據(jù)。在接收到該命令后,處理器間通信裝置1708發(fā)送一個命令給CPU 1705以預取存儲在主存儲器1703中在地址0x80000008處的數(shù)據(jù)。隨后,根據(jù)第一實施例相同的過程,存儲在主存儲器1703中的指令或數(shù)據(jù)被傳送至高速緩沖存儲器1707。
接著,假定預清除線程運行于CPU 1701上,并且對應于已調用該預清除線程的基本塊的程序運行于CPU 1705上。在這種情況下,運行于CPU 1701上的預清除線程使得CPU 1705執(zhí)行預清除。例如,當預清除對應于CPU 1705的高速緩沖存儲器1707的地址0x80000008處的數(shù)據(jù)時,運行于CPU 1701上的預清除線程執(zhí)行圖21B所示的預清除線程2101。在這種情況下,根據(jù)與用于預取的過程相同的過程發(fā)送一個預清除命令給CPU 1705。
附圖22是說明為一個識別CPU的處理器ID的程序而執(zhí)行的處理器識別指令的圖,在該CPU上正執(zhí)行所述程序。處理器識別指令2200是一個由操作碼2201“GetCPU id”表示的指令。當執(zhí)行該指令時,在其上正執(zhí)行程序的CPU的處理器ID被存儲到由操作數(shù)表示的寄存器2202“Reg”中。
如上所述,通過包括處理器識別指令作為配置的一部分,使得當激活該預取線程時,可以提前通知在其上正執(zhí)行主線程的CPU的處理器ID的預取線程。這使得對于其上正運行預取線程的CPU來說可以對在其上正運行主線程的另一個CPU請求預取,即使是在該預取線程和主線程運行于不同的CPU的時候。應當注意,當開始執(zhí)行主線程時,執(zhí)行處理器識別指令220,并且當激活預取線程時以自變量的形式傳送處理器ID。這里,還可以將處理器ID寫入主存儲器1703中,然后通過主存儲器1703將其傳送至預取線程。對于預清除指令來說,與預取線程的情況相同,也傳送其上運行有主線程的CPU的處理器ID。
在此不再給出對其他處理的詳細說明,因為它們與第一實施例中給出的相同。
應當注意,在根據(jù)本實施例的操作系統(tǒng)中,一個任務被優(yōu)先地分配給具有使用率為最低的高速緩沖存儲器1702(1707)的CPU 1701(1705)。但是,與配置有單個處理器的計算機系統(tǒng)600的情況相同,當所有高速緩沖存儲器1702和1707的使用率都超過一個指定值時,減少具有較低優(yōu)先級的任務被執(zhí)行的頻率,而增加具有較高優(yōu)先級的任務被執(zhí)行的頻率。
根據(jù)本實施例,除了第一實施例的計算機系統(tǒng)所提供的功能和效果,所述處理器間通信裝置還控制一個處理器與另一個處理器之間的存取。這有助于在一個程序中控制不止一個高速緩沖存儲器。
此外,通過優(yōu)先分配一個任務給使用率較低的處理器,可以提高計算機的整體性能。
而且,如果所有高速緩沖存儲器的使用率都超過一個指定值,則增加具有較高優(yōu)先級的任務的頻率。因此,變得可以在考慮任務優(yōu)先級的情況下逐個任務的控制多個高速緩沖存儲器。
應當注意,本實施例中提供的編譯器裝置體現(xiàn)為將在計算機上執(zhí)行的程序。因此,可以將這種程序存儲在包括軟盤、硬盤、CD-ROM、磁光盤(MO)、數(shù)字通用光盤-只讀存儲器(DVD-ROM)的記錄介質上。同時,可以以可執(zhí)行的形式存儲由編譯器裝置生成的代碼在這些記錄介質上。
雖然僅對根據(jù)本發(fā)明的硬件、操作系統(tǒng)以及編譯器的某些典型實施例進行了上述詳細說明,那些本領域技術人員將會很容易理解到在本質上不脫離本發(fā)明的新穎性教導和優(yōu)點的情況下可以在這些典型實施例中作出各種修改。因此,所有這些修改都將包含在本發(fā)明的范圍內。
例如,根據(jù)前述實施例的計算機系統(tǒng)由一個或兩個CPU構成,但是它們也可以配置有三個或更多的CPU。
此外,在上述實施例中,假定為對所有的基本塊都執(zhí)行預清除處理和預取處理,但是這種處理并不是必須要對所有的基本塊都執(zhí)行的,因此,預取處理和預清除處理可以對特定的基本塊執(zhí)行。例如,編譯器裝置可以基于一個循環(huán)條件和包含在程序中的類似條件選擇一個應當對其執(zhí)行預取和預清除處理的基本塊;基于簡表信息,僅對這種處理是有效的基本塊執(zhí)行預取處理和預清除處理;以及通過指定一個編譯選項或編譯指示來選擇一個應當對其執(zhí)行預取處理或預清除處理的基本塊。
此外,根據(jù)上述實施例的編譯器裝置在基本塊的基礎上生成預取線程和預清除線程,但是對于每個基本塊來說并不必須提供這些線程。例如,預取線程和預清除線程可以為處理的每個功能或一個任意單元提供,以便執(zhí)行預取處理和預清除處理。在這種情況下,最好是生成預取目標列表的單元由預取目標提取裝置103改變,并且插入線程激活過程的位置由線程激活過程插入裝置104改變。
此外,對前述實施例的高速緩沖存儲器的存取根據(jù)完全相關方案控制,但是如果根據(jù)組關聯(lián)方案和直接映射方案來執(zhí)行存取控制,也可以保持本發(fā)明的意義。
而且,圖17所示的預清除線程預清除不用在緊接下一基本塊中的變量,但是其也可以預清除不用于后兩個或更多的基本塊的變量。通過考慮后續(xù)基本塊來執(zhí)行預清除,可以防止預清除變量在之后不久被預取。
工業(yè)實用性本發(fā)明可應用于配置有高速緩沖存儲器的計算機系統(tǒng),也可以應用于用在這種計算機系統(tǒng)中的編譯器裝置和操作系統(tǒng)以及類似裝置中。
權利要求
1.一種計算機系統(tǒng),包括高速緩沖存儲器,存儲有一個或多個存儲在主存儲器中的指令和數(shù)據(jù);以及高速緩存控制單元,用于控制該高速緩沖存儲器,其中所述高速緩存控制單元測量該高速緩沖存儲器的使用率,并根據(jù)所述測量的使用率來控制高速緩沖存儲器。
2.根據(jù)權利要求1所述的計算機系統(tǒng),其中所述高速緩存控制單元具有一個計數(shù)器,其測量高速緩沖存儲器中用于指定所述使用率的有效入口項的數(shù)量。
3.一種計算機系統(tǒng),包括多個高速緩沖存儲器,對應于多個處理器中的各個處理器并且存儲有存儲在主存儲器中的一個或多個指令和數(shù)據(jù);多個高速緩存控制單元,對應于所述多個高速緩沖存儲器中的各個高速緩沖存儲器;以及處理器間通信單元,用于使多個處理器互連,并且在從多個處理器中的第一處理器接收到操作一個對應于不同于第一處理器的第二處理器的高速緩沖存儲器的命令后,輸出一個操作所述高速緩沖存儲器的命令給對應于第二處理器的高速緩存控制單元,其中多個高速緩存控制單元根據(jù)來自處理器間通信單元的命令操作各個高速緩沖存儲器。
4.根據(jù)權利要求3所述的計算機系統(tǒng),進一步包括一個處理器識別單元,用于識別正執(zhí)行一個程序的處理器,其中在接收到識別第二處理器的信息后,第一處理器基于該識別第二處理器的信息,向該處理器間通信單元發(fā)送操作對應于第二處理器的高速緩沖存儲器的命令。
5.根據(jù)權利要求4所述的計算機系統(tǒng),其中處理器識別單元被實現(xiàn)作為機器語言指令,其返回分配給各個處理器的唯一號。
6.如權利要求3所述的計算機系統(tǒng),其中處理器間通信單元在接收到來自第一處理器的命令之后,發(fā)送預清除指令或預取指令給對應于第二處理器的高速緩沖存儲器。
7.如權利要求3所述的計算機系統(tǒng),其中多個高速緩存控制單元中的每一個都測量對應于所述多個高速緩存控制單元中的每一個的高速緩沖存儲器的使用率。
8.如權利要求7所述的計算機系統(tǒng),其中所述高速緩存控制單元中的每一個都具有一個計數(shù)器,用于測量高速緩沖存儲器中指定使用率的有效入口項的數(shù)量。
9.一種編譯器裝置,用于將以高級語言編寫的源程序轉換成可執(zhí)行程序,包括預取目標提取單元,用于對源程序中的每個預定執(zhí)行組提取將從主存儲器預取到高速緩沖存儲器的指令或數(shù)據(jù),并產生一個列出所提取指令或數(shù)據(jù)的地址的地址列表;以及一個線程過程生成單元,用于(i)分析源程序中每個執(zhí)行組的控制結構,(ii)根據(jù)分析的結果從所述地址列表中選擇將被預取的指令或數(shù)據(jù)的地址,以及(iii)生成用于預取存儲在由所選擇的地址指定的位置的指令或數(shù)據(jù)的預取線程。
10.根據(jù)權利要求9所述的編譯器裝置,其中線程過程生成單元檢查激活所述線程過程生成單元的任務的優(yōu)先級,并當沒有在任何一個處理器上執(zhí)行具有高于所述優(yōu)先級的優(yōu)先級的任務時生成用于執(zhí)行預取的預取線程。
11.根據(jù)權利要求10所述的編譯器裝置,其中線程過程生成單元只在高速緩沖存儲器的使用率等于或低于一指定值時才生成用于執(zhí)行預取的預取線程。
12.根據(jù)權利要求9所述的編譯器裝置,進一步包括線程激活過程插入單元,用于將激活由線程過程生成單元產生的預取線程的過程插入到源程序中。
13.根據(jù)權利要求9所述的編譯器裝置,進一步包括一個預取計時確定單元,基于感興趣執(zhí)行組中的指令所需的執(zhí)行時間以及與下一個執(zhí)行組中的所述預取指令和數(shù)據(jù)有關的時間,確定應當在源程序上開始預取的預取開始時間,所述預取開始時間允許在下一執(zhí)行組開始執(zhí)行指令之前完成所述預取的執(zhí)行,其中所述線程激活插入單元在由預取計時確定單元確定的對源程序的預取開始時間時插入一個激活用于預取下一執(zhí)行組中的指令或數(shù)據(jù)的預取線程。
14.根據(jù)權利要求13所述的編譯器裝置,其中當在感興趣執(zhí)行組之后可能存在立即執(zhí)行的多個執(zhí)行組時,預取計時確定單元(i)在確定所述多個執(zhí)行組中的一個組作為將在感興趣的組執(zhí)行之后立即執(zhí)行的后續(xù)執(zhí)行組時,檢查是否預取所述多個執(zhí)行組中的一個組的指令或數(shù)據(jù),以及在開始所述后續(xù)執(zhí)行組的處理之前所述預取完成,以及(ii)當所述檢查結果表明所述預取在后續(xù)執(zhí)行組的處理開始之前完成時,將所述確定后續(xù)執(zhí)行組的時間看作所述后續(xù)執(zhí)行組的指令或數(shù)據(jù)的預取開始的時間,并且在存在有可能在執(zhí)行感興趣的組之后立即執(zhí)行的多個執(zhí)行組的情況下,當由預取計時確定單元執(zhí)行的檢查結果表明即使在確定后續(xù)執(zhí)行組時執(zhí)行所述預取,所述預取也可以在后續(xù)執(zhí)行組的處理開始之前完成時,所述線程過程插入單元根據(jù)所述確定結果選擇用于確定后續(xù)執(zhí)行組的處理以及后續(xù)執(zhí)行組,并且生成用于預取所選擇的執(zhí)行組的指令或數(shù)據(jù)的預取線程。
15.根據(jù)權利要求9所述的編譯器裝置,其中每個執(zhí)行組是一個基本塊。
16.一種可以進行多任務處理的操作系統(tǒng),該操作系統(tǒng)使得一個計算機可以用作高速緩存使用率監(jiān)控單元,用于監(jiān)控高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)高速緩沖存儲器的使用率來控制由一個處理器所執(zhí)行的任務的執(zhí)行序列。
17.根據(jù)權利要求16所述的操作系統(tǒng),進一步使得所述計算機用作優(yōu)先級檢查單元,用于檢查是否存在一個具有比正被處理器執(zhí)行的任務的優(yōu)先級高的優(yōu)先級的任務,其中當高速緩沖存儲器的使用率大于一預定閾值時,任務控制單元增加執(zhí)行頻率,以便具有較高優(yōu)先級的任務的執(zhí)行頻率變得高于高速緩沖存儲器的使用率等于或低于所述預定閾值的情況。
18.根據(jù)權利要求17所述的操作系統(tǒng),其中優(yōu)先級檢查單元是一個應用程序接口(API),當存在比正調用任務的優(yōu)先級高的任務時返回一個真值,當不存在具有更高優(yōu)先級的任務時返回一個假值。
19.一種用于配置有多個處理器的計算機系統(tǒng)的操作系統(tǒng),其中該計算機系統(tǒng)具有多個與所述多個處理器的每一個對應的高速緩沖存儲器,并且該操作系統(tǒng)使得計算機用作高速緩存使用率監(jiān)控單元,用于監(jiān)控各個高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)各個高速緩沖存儲器的使用率來控制多個任務的執(zhí)行序列。
20.根據(jù)權利要求19所述的操作系統(tǒng),其中任務控制單元優(yōu)先分配一個任務給對應于其使用率是所有高速緩沖存儲器中最低的高速緩沖存儲器的處理器。
21.根據(jù)權利要求20所述的操作系統(tǒng),進一步使得計算機用作優(yōu)先級檢查單元,用于檢查是否存在一個具有比正被處理器執(zhí)行的任務的優(yōu)先級高的優(yōu)先級的任務,其中當各個高速緩沖存儲器的使用率大于一預定閾值時,任務控制單元增加執(zhí)行頻率,以便具有較高優(yōu)先級的任務的執(zhí)行頻率變得高于至少一個所述使用率等于或低于所述預定閾值的情況。
22.一種編譯器,用于將以高級語言編寫的源程序轉換成可執(zhí)行程序,該編譯器使得計算機執(zhí)行以下步驟預取目標提取步驟,用于對源程序中的每個預定執(zhí)行組提取將從主存儲器預取到高速緩沖存儲器的指令或數(shù)據(jù),并產生一個列出所提取指令或數(shù)據(jù)的地址的地址列表;以及線程過程生成步驟,(i)分析源程序中每個執(zhí)行組的控制結構,(ii)根據(jù)分析的結果從所述地址列表中選擇要預取的指令或數(shù)據(jù)的地址,以及(iii)生成用于預取存儲在由所選擇的地址指定的位置的指令或數(shù)據(jù)的預取線程。
23.根據(jù)權利要求22所述的編譯器,進一步使得計算機執(zhí)行線程激活過程插入步驟,用于將激活由線程過程生成步驟產生的預取線程的過程插入到源程序中。
24.一種包括在處理器上操作的指令序列的程序,所述指令序列包括用于控制對應于一個處理器的高速緩沖存儲器的指令,該處理器不同于在其上執(zhí)行所述指令序列的處理器。
25.一種編譯方法,用于將以高級語言編寫的源程序轉換成可執(zhí)行程序,包括預取目標提取步驟,用于對源程序中的每個預定執(zhí)行組提取將從主存儲器預取到高速緩沖存儲器的指令或數(shù)據(jù),并產生一個列出所提取指令或數(shù)據(jù)的地址的地址列表;以及線程過程生成步驟,(i)分析源程序中每個執(zhí)行組的控制結構,(ii)根據(jù)分析的結果從所述地址列表中選擇要預取的指令或數(shù)據(jù)的地址,以及(iii)生成用于預取存儲在由所選擇的地址指定的位置的指令或數(shù)據(jù)的預取線程。
26.根據(jù)權利要求25所述的編譯方法,進一步包括線程激活過程插入步驟,用于將激活由線程過程生成單元產生的預取線程的過程插入到源程序中。
27.一種計算機可讀記錄介質,其中存儲有可進行多任務處理的操作系統(tǒng),其中所述操作系統(tǒng)使得計算機用作高速緩存使用率監(jiān)控單元,用于監(jiān)控高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)高速緩沖存儲器的使用率來控制由一個處理器所執(zhí)行的任務的執(zhí)行序列。
28.一種計算機可讀記錄介質,其中存儲有用于配置有多個處理器的計算機系統(tǒng)的操作系統(tǒng),其中所述操作系統(tǒng)具有多個分別對應于多個處理器的高速緩沖存儲器,并且所述操作系統(tǒng)使得計算機用作高速緩存使用率監(jiān)控單元,用于監(jiān)控高速緩沖存儲器的使用率;和任務控制單元,用于根據(jù)各個高速緩沖存儲器的使用率來控制由多個任務的執(zhí)行序列。
29.一種計算機可讀記錄介質,其中存儲有將以高級語言編寫的源程序轉換成可執(zhí)行程序的編譯器,其中所述編譯器使得計算機執(zhí)行以下步驟預取目標提取步驟,用于對源程序中的每個預定執(zhí)行組提取將從主存儲器預取到高速緩沖存儲器的指令或數(shù)據(jù),并產生一個列出所提取指令或數(shù)據(jù)的地址的地址列表;以及線程過程生成步驟,(i)分析源程序中每個執(zhí)行組的控制結構,(ii)根據(jù)分析的結果從所述地址列表中選擇要預取的指令或數(shù)據(jù)的地址,以及(iii)生成用于預取存儲在由所選擇的地址指定的位置的指令或數(shù)據(jù)的預取線程。
30.一種計算機可讀記錄介質,其中存儲有包括在處理器上運行的指令序列的程序,其中該程序包括含有用于控制對應于一個處理器的高速緩沖存儲器的指令的所述指令序列,該處理器不同于在其上執(zhí)行所述指令序列的處理器。
全文摘要
用于計算機系統(tǒng)的編譯器裝置,可以提高高速緩沖存儲器的命中率,該編譯器裝置由預取目標提取裝置、線程激活過程插入裝置、以及線程過程生成裝置構成,并且生成用于執(zhí)行預取和預清除的線程。由該編譯器裝置生成的預取和預清除線程通過考慮程序的優(yōu)先級以及高速緩沖存儲器的使用率,與主程序的操作并行地執(zhí)行預取和預清除。
文檔編號G06F12/08GK1591325SQ20041006858
公開日2005年3月9日 申請日期2004年8月27日 優(yōu)先權日2003年8月29日
發(fā)明者中島圣志, 瓶子岳人, 道本昌平 申請人:松下電器產業(yè)株式會社