計算平臺的異質處理器之間的共享虛擬存儲器中的虛函數共享的制作方法【專利說明】【
背景技術:
】[0001]計算平臺可包含異質處理器,諸如中央處理單元(CPU)和圖形處理單元(GPU)、對稱和不對稱處理器。類實例(或對象)可駐留在與CPU-GPU平臺的第一側(例如CPU)相關聯的第一存儲器中。不可能使第二側(GI3U側)調用駐留在與CPU-GPU平臺的第一側(CPU偵D相關聯的第一存儲器中的對象和相關聯的成員函數。也不可能使第一側能夠調用駐留在第二側(GPU)側上第二存儲器中的對象和相關聯的成員函數。當類實例或對象被存儲在不同地址空間時,現有通信機制可能僅允許異質處理器(CPU與GPU)之間的單向通信來調用類實例和相關聯的虛函數。[0002]這種單向通信方法防止了異質處理器之間的類實例的自然功能性劃分。對象可包括面向吞吐量的成員函數和一些標量成員函數。例如,游戲應用中的場景類可具有可適合于GPU的渲染函數,并且還可包括可適合于在CPU上執行的物理學和人工智能(Al)函數。用當前的單向通信機制,通常存在兩個不同的場景類,分別包括CPU(上例中的物理學和Al)成員函數和GPU(適合GPU的渲染函數)成員函數。使兩個不同的場景類一個用于CPU而另一個用于GPU可能需要在兩個場景類之間來回拷貝數據。【附圖說明】[0003]在附圖中作為示例而非作為限制說明了本文描述的本發明。為了說明的簡化和清晰,圖中示出的單元不一定按比例繪制。例如,為了清楚起見,一些單元的尺寸可能相對于其它單元放大了。另外,在認為適當的情況下,附圖標記已經在各圖之間重復使用來指示對應或類似的單元。[0004]圖1示出了根據一個實施例支持在計算機平臺中提供的異質處理器之間的共享虛擬存儲器中存儲的虛函數共享的平臺100;圖2是示出了根據一個實施例由平臺100執行的支持在計算機平臺中提供的異質處理器之間的共享虛擬存儲器中存儲的虛函數共享的操作的流程圖;圖3示出了根據一個實施例用于從共享對象加載虛函數指針的CPU側和GPU側代碼;圖4是示出了根據第一實施例由平臺100執行的生成表以支持在計算機平臺中提供的異質處理器之間的共享虛擬存儲器中存儲的虛函數共享的操作的流程圖;圖5示出了根據一個實施例由平臺100用于支持通過異質處理器可共享的對象的成員函數進行CPU110與GPU180之間雙向通信的流程圖;圖6示出了根據第一實施例實際地描繪由CPU側進行的GPU虛函數和GPU函數調用的處理的流程圖;圖7是示出了根據實施例由平臺100執行的使用虛擬共享非相干區域支持異質處理器之間的虛函數共享的操作的流程圖;圖8是示出了根據實施例使用虛擬共享非相干區域支持異質處理器之間的虛函數共孚的關系圖;圖9示出了根據一個實施例可提供對在計算機平臺中提供的異質處理器之間的共享虛擬存儲器中存儲的虛函數共享的支持的計算機系統。【具體實施方式】[0005]以下描述描述了在計算平臺的異質處理器之間的共享虛擬存儲器中存儲的虛函數共享的技術。在以下描述中,闡述了許多特定細節,諸如邏輯實現、資源劃分或共享或系統組件的副本實現、類型和相互關系以及邏輯劃分或綜合選擇,以便提供本發明的更透徹理解。然而,本領域技術人員將認識到,沒有此類特定細節也可實施本發明。在其它實例中,未詳細示出控制結構、門級電路和完整軟件指令序列,以免使本發明模糊。本領域技術人員用所包含的描述將能夠實現適當的功能性,無需過多實驗。[0006]在說明書中提到“一個實施例”、“實施例”、“示例實施例”指示所描述的實施例可包含具體特征、結構或特性,但每個實施例可能不一定都包含該具體特征、結構或特性。此夕卜,這種短語不一定是指同一實施例。另外,當結合一個實施例描述具體特征、結構或特性時,認為它在本領域技術人員的知識范圍內,以結合其它實施例影響這種特征、結構或特性,不管是否明確描述了。[0007]可用硬件、固件、軟件或它們的任何組合來實現本發明的實施例。本發明的實施例還可實現為存儲在機器可讀介質上的指令,它們可由一個或多個處理器讀取和執行。機器可讀存儲介質可包含用于存儲或傳輸采用機器(例如計算裝置)可讀形式的信息的任何機構。[0008]例如,機器可讀存儲介質可包含只讀存儲器(ROM);隨機存取存儲器(RAM);磁盤存儲介質;光存儲介質;閃存裝置;電、光形式的信號。另外,固件、軟件、例程和指令在本文可描述為執行某些動作。然而,應該認識到,這種描述只是出于方便,并且這種動作實際上源于計算裝置、處理器、控制器和執行固件、軟件、例程和指令的其它裝置。[0009]在一個實施例中,計算平臺可支持一種或多種技術以允許通過細粒度劃分共享對象來通過諸如共享對象的虛函數的成員函數進行異質處理器(例如CPU與GPU)之間的雙向通信(函數調用)。在一個實施例中,計算平臺可允許使用稱為“基于表”的技術的第一技術進行CPU與GPU之間的雙向通信。在其它實施例中,計算平臺可允許使用稱為“非相干區域”技術的第二技術進行CPU與GPU之間的雙向通信,在該技術中,可在虛擬共享存儲器中創建虛擬共享非相干區域。[0010]在一個實施例中,當使用基于表的技術時,可用于訪問來自CPU或GPU側的共享對象的共享對象的CPU側虛函數表(Vtable)指針可用于確定GPU虛函數表,如果存在GPU側表的話。在一個實施例中,GPU側虛函數表可包含〈〃類名〃、CPU虛函數表地址、GPU虛函數表地址〉。在一個實施例中,下面將更詳細地描述獲得GPU側虛函數表地址和生成GPU側表的技術。[0011]在其它實施例中,當使用“非相干區域”技術時,在共享虛擬存儲器內創建共享非相干區域。在一個實施例中,共享非相干區域可以不保持數據一致性。在一個實施例中,共享非相干區域內的CPU側數據和GPU側數據可具有與從CPU側和GPU側看到的相同的地址。然而,CPU側數據的內容可不同于GPU側數據的內容,因為共享虛擬存儲器在運行時期間可以不保持一致性。在一個實施例中,共享非相干區域可用于存儲每個共享類的虛擬方法表的新拷貝。在一個實施例中,這種方法可將虛擬表保持在同一地址。[0012]圖1中示出了提供可在異質處理器、諸如CPU與GPU之間共享的虛擬共享存儲器中的虛函數的計算平臺100的實施例。在一個實施例中,平臺100可包括中央處理單元(CPU)110、與CPU110相關聯的操作系統(OS)112,CPU私有空間115、CPU編譯器118、共享虛擬存儲器(或多版本共享存儲器)130、圖形處理單元(GPU)180、與GPU180相關聯的操作系統(OS)182、GPU私有空間185和GPU編譯器188。在一個實施例中,OS112和OS182可分別管理CPU110和CPU私有空間115,以及GPU180和GPU私有空間185的資源。在一個實施例中,為了支持共享虛擬存儲器130,CPU私有空間115和GPU私有空間185可包括多版本數據的拷貝。在一個實施例中,為了保持存儲器一致性,諸如對象131的元數據可用于同步存儲在CPU私有空間115和GPU私有空間185中的拷貝。在其它實施例中,多版本數據可存儲在物理共享存儲器諸如共享存儲器950(圖9的,下面描述)中。在一個實施例中,共享虛擬存儲器可由物理私有存儲器空間(諸如異質處理器CPU110和GPU180的CPU私有空間115和GPU私有空間185)或物理共享存儲器(諸如由異質處理器共享的共享存儲器950)支持。[0013]在一個實施例中,CPU編譯器118和GPU編譯器188可分別耦合到CPU110和GPU180,或者也可遠程提供在其它平臺或計算機系統上。與CPU110相關聯的編譯器(一個或多個)118可生成用于CPU110的編譯代碼,并且與GPU180相關聯的編譯器188可生成用于GPU180的編譯代碼。在一個實施例中,CPU編譯器118和GPU編譯器188可通過編譯用戶用高級語言諸如面向對象的語言提供的對象的一個或多個成員函數來生成編譯代碼。在一個實施例中,編譯器118和188可使對象存儲在共享存儲器130中,并且共享對象131可包括分配給CPU側110或GPU側180的成員函數。在一個實施例中,存儲在共享存儲器130中的共享對象131可包括成員函數諸如虛函數VF133-A到133-K和非虛函數NVF136-A到136-L。在一個實施例中,成員函數諸如共享對象131的VF133和NVF136可提供CPU110與GPU180之間的雙向通信。[0014]在一個實施例中,為了實現動態綁定目的,CPU110或GPU180之一可通當前第1頁1 2 3 4