用于具有通用cpu核心和緊密耦合的加速器的處理核心的上下文切換機制的制作方法
【專利摘要】本發(fā)明描述具有多個核心的裝置,每一核心具有:a)加速器;以及b)耦合到加速器的通用CPU。該通用CPU具有功能單元邏輯電路,用于執(zhí)行返回用于存儲加速器的上下文信息的存儲空間量的指令。
【專利說明】用于具有通用CPU核心和緊密耦合的加速器的處理核心的上下文切換機制發(fā)明領(lǐng)域
[0001]本發(fā)明的領(lǐng)域通常涉及計算系統(tǒng)設(shè)計,且尤其涉及用于具有通用CPU核心和緊密耦合的加速器的處理核心的上下文切換機制。
[0002]背景
[0003]協(xié)處理器的常規(guī)集成
[0004]隨著半導(dǎo)體制造工藝達到接近每個管芯I萬億個晶體管的時代,設(shè)計工程師面臨著如何最有效地利用使用所有可用晶體管的問題。一種設(shè)計方法在管芯上用專用硬件“加速”以及一個或多個通用CPU核心實現(xiàn)特定計算密集功能。
[0005]借助于被設(shè)計為執(zhí)行特定計算密集功能的專用邏輯塊,實現(xiàn)了加速。把密集計算遷移到這樣的專用邏輯塊使得(各)CPU核心免于執(zhí)行大量的指令,由此增加了 CPU核心的效能和效率。
[0006]盡管本領(lǐng)域中已知以協(xié)處理器(例如圖形協(xié)處理器))的形式的“加速”,但這樣的傳統(tǒng)協(xié)處理器被OS看作是外置于OS在其上運行的(各)CPU核心的獨立“設(shè)備”(在較大的計算系統(tǒng)內(nèi))。因此通過專用的設(shè)備驅(qū)動程序軟件訪問這些協(xié)處理器,且這些協(xié)處理器不在與CPU核心相同的存儲器空間外操作。因而,傳統(tǒng)的協(xié)處理器不共享或期待在CPU核心上實現(xiàn)的虛擬地址-物理地址轉(zhuǎn)換方案。
[0007]此外,在由OS把任務(wù)卸載到傳統(tǒng)的協(xié)處理器時,遭遇大的等待時間。具體地,當CPU核心和傳統(tǒng)的協(xié)處理器本質(zhì)上對應(yīng)于分離的、隔離的子系統(tǒng)時,在把GPP核心上的主OS中的定義的任務(wù)傳送給協(xié)處理器的“內(nèi)核”軟件時,耗費大量的通信資源。這樣的大等待時間有利于這樣的系統(tǒng)設(shè)計:從主OS在協(xié)處理器上調(diào)用相對少見的任務(wù),但每個任務(wù)具有大的關(guān)聯(lián)數(shù)據(jù)塊。實際上,主要以粗粒度方式而非細粒度方式使用傳統(tǒng)的協(xié)處理器。
[0008]隨著當前的系統(tǒng)設(shè)計者對以細粒度的使用方式把更多加速引入到計算系統(tǒng)感興趣,用于在計算系統(tǒng)中集成加速的新范式是必要的。
[0009]CPUID/XSAVE/XRSTORE 指令和 XCRO 寄存器
[0010]當前由英特爾公司提供的指令集架構(gòu)(ISA)支持允許、外部保存和再次存儲對ISA的傳統(tǒng)指令集的特定硬件支持的“擴展”的狀態(tài)的機制。具體地,根據(jù)一種實現(xiàn),帶有3種操作數(shù)指令格式(AVX)的ISA的浮點數(shù)指令(x87)、128位向量指令(SSE)和256位向量指令均被看作是對ISA的傳統(tǒng)指令集(x86)的獨立“擴展”。
[0011]可以由軟件寫入內(nèi)置于處理器的控制寄存器XCR0,以便啟用這些擴展中的任何一種或多種。具體地,XCRO寄存器為三種擴展中的每一種維護一個比特(即,x87位、SSE位和AVX位)。軟件(例如,操作系統(tǒng)(OS))準許軟件根據(jù)其自己的意圖個別地設(shè)置各種比特以便個別地啟用X87/SSE/AVX擴展。XCRO寄存器被認為是具有附加的、當前未定義的比特位置,以使得將來可以添加附加的擴展并相應(yīng)地啟用/禁用。
[0012]已經(jīng)在ISA中實現(xiàn)了 CPWD指令,軟件可以使用CPWD指令來判斷外部存儲已啟用的擴展的狀態(tài)信息需要多少存儲器空間。例如,帶有各種輸入操作數(shù)值,CPWD指令可以由軟件執(zhí)行以判斷:i)存儲所有已啟用的擴展的所有狀態(tài)信息所需要的存儲器空間的總量;ii)存儲已啟用的擴展中的任何具體一個的所有狀態(tài)信息所需要的存儲器空間的總量。因而,例如,如果啟用了 x87和SSE擴展,則CPWD指令可以用來確定:i)存儲x87和SSE擴展的所有狀態(tài)信息所需要的存儲器空間的總量;ii)僅存儲x87擴展的所有狀態(tài)信息所需要的存儲器空間的總量;以及,iii)僅存儲SSE擴展的所有狀態(tài)信息所需要的存儲器空間的總量。
[0013]在這里,由于擴展的狀態(tài)信息主要對應(yīng)于該擴展的關(guān)聯(lián)數(shù)據(jù)寄存器(即,x87擴展的浮點寄存器、SSE擴展的128位寄存器、AVX擴展的256位寄存器)中所存儲的信息,CPU硬件知道“多大”寄存器空間用于其擴展中的每一種且可以容易地作為CPUID指令的結(jié)果提供/返回這樣的信息。
[0014]因而,在典型的情況中,軟件將執(zhí)行CPWD指令以便理解需要為它已經(jīng)啟用的各種擴展的狀態(tài)信息分配多少存儲器空間,然后,進行到分配這樣的存儲器空間。
[0015]由軟件調(diào)用XSTORE指令,以便外部地保存任何/所有啟用的擴展的狀態(tài)信息。在這里,把其中保存狀態(tài)信息的存儲器地址作為輸入值提供給指令,且處理器核心引起把(各)擴展的狀態(tài)信息寫入到該地址處的系統(tǒng)存儲器。在XSTORE指令的任何具體執(zhí)行中,不是所有已啟用的擴展都可以保存它們的狀態(tài)信息。執(zhí)行XSTORE指令所利用的、其比特位置基本上對應(yīng)于XCRO寄存器中的那些位置的掩碼寄存器,被用來有選擇地指定通過XSTORE指令把哪些經(jīng)啟用擴展的狀態(tài)信息存儲起來。外部存儲的信息也包括對應(yīng)于掩碼寄存器信息的XSTATE_BV向量字段。即是說,XSTATE_BV向量字段指示哪些擴展已經(jīng)把它們的狀態(tài)信息外部存儲在存儲器中。
[0016]XRSTOR指令對應(yīng)于XSTORE指令的邏輯逆。在XRSTOR指令的情況下,指令的輸入值指定把(各)擴展的狀態(tài)信息存儲在系統(tǒng)存儲器中的何處。該指令的執(zhí)行引起處理器核在該地址處從存儲器讀取狀態(tài)信息,并把該狀態(tài)信息加載到適當?shù)臄U展寄存器空間中。作為加載過程的一部分,處理器首先讀取存儲器中所存儲的XSTATE_BV向量字段的內(nèi)容,以便理解哪些擴展已經(jīng)把它們的狀態(tài)信息存儲在存儲器中。然后,處理器從存儲器把如XSTATE_BV向量字段中所指示的已經(jīng)把它們的狀態(tài)信息外部存儲在存儲器中的那些擴展的狀態(tài)信息加載到其本身。理想的情況是,向XRSTOR指令提供由掩碼向量,該掩碼向量匹配從存儲器讀取的XSTATE_BV向量的內(nèi)容,且其已設(shè)定的比特對應(yīng)于XCRO寄存器中已啟用的擴展。
[0017]附圖簡述
[0018]在附圖中作為示例而非限制闡述本發(fā)明,附圖中,相似的標號指示類似的元素,且附圖中:
[0019]圖1示出一種計算系統(tǒng),其處理核心均包括一個通用處理核心和緊密耦合到該通用處理核心的加速器;
[0020]圖2示出用于對使用緊密耦合到GPP核心的加速器的線程進行上下文切換的過程;
[0021]圖3示出圖2的過程的實施例。
[0022]圖4示出第一計算系統(tǒng)實施例;
[0023]圖5示出第二計算系統(tǒng)實施例;
[0024]圖6示出第三計算系統(tǒng)實施例;
[0025]圖7示出第四計算系統(tǒng)實施例;
[0026]圖8示出軟件指令轉(zhuǎn)換器。
[0027]詳細描述
[0028]圖1示出新的處理核心100_1架構(gòu),其中加速器101_1到101_N被設(shè)計為類似于耦合到核心的傳統(tǒng)通用CPU 102的大規(guī)模功能單元。如圖1中可見,多個這樣的核心100_1到100_Q可以被放置在單個處理器120上,而處理器120被放置在半導(dǎo)體芯片上。
[0029]在這里,從存儲器讀取標準指令,且在CPU核心102中由該核心的傳統(tǒng)功能單元執(zhí)行標準指令。然而,處理核心100_1所接收到的其他類型的指令將觸發(fā)加速器動作。在特定實現(xiàn)中,底層硬件支持軟件以代碼調(diào)用特定加速器的能力。即是說,可以由軟件編程器(或由編譯器)把特定命令實現(xiàn)到代碼中,其中,該特定命令調(diào)用并定義特定加速器單元的(多個)輸入操作數(shù)。
[0030]最終以某種形式的目標代碼表示該命令。在運行時期間,底層硬件“執(zhí)行”目標代碼,且在這樣做時,借助于關(guān)聯(lián)的輸入數(shù)據(jù)調(diào)用特定的加速器。
[0031]在被調(diào)用時,加速器在與CPU核心102相同的存儲器空間外操作。因而,可以借助于虛擬地址向加速器標識數(shù)據(jù)操作數(shù),這些虛擬地址到物理地址空間的相應(yīng)轉(zhuǎn)換與CPU核心102所使用的那些相同。此外,一般地,加速器單元執(zhí)行命令的執(zhí)行時間比傳統(tǒng)/標準指令更長(由于正在執(zhí)行的任務(wù)的復(fù)雜本質(zhì))。(多個)輸入操作數(shù)和/或結(jié)果也可以大于在CPU 102內(nèi)的(多個)指令執(zhí)行管線的標準寄存器尺寸。
[0032]因此,加速器通常可以被看作是具有比傳統(tǒng)功能單元和CPU 102的指令更粗的粒度(具有較大的執(zhí)行時間和/或在較大的數(shù)據(jù)塊上操作)。同時,加速器通常也可以被看作是細粒度的,或者至少比傳統(tǒng)的協(xié)處理器更緊密耦合到CPU核心102。
[0033]具體地,相比于傳統(tǒng)的協(xié)處理器,避免為了調(diào)用加速器而進行的時間昂貴的“驅(qū)動程序調(diào)用”和/或加速器和通用CPU 102共享相同的存儲器空間對應(yīng)于在通用CPU 102和加速器之間的更緊密的耦合。此外,調(diào)用加速器來執(zhí)行的特定的個體任務(wù)也可以比傳統(tǒng)上由協(xié)處理器執(zhí)行的較大的、大規(guī)模的任務(wù)具有更細的粒度。適用于借助于加速器實現(xiàn)為單個“可調(diào)用”操作的特定的個體任務(wù)包括紋理采樣、運動搜索或運動補償、與安全相關(guān)的計算(例如,密碼學(xué)、加密等等)、特定財務(wù)計算和/或特定科學(xué)計算。
[0034]通用CPU核心102可以具有一個或多個指令執(zhí)行管線?,F(xiàn)代的CPU核心通常能夠并發(fā)地執(zhí)行多個線程。借助于多個管線并發(fā)執(zhí)行多個線程是直觀概念。然而,單個管線也可以被設(shè)計為支持并發(fā)執(zhí)行多個線程。
[0035]另外,現(xiàn)代的CPU核心和/或OS通常能夠維護/理解可以比同時活動的線程更多的線程。例如,CPU核心可以認為8個線程當前是活動的,然而,允許存在附加的8個更多的線程存在(它們只是當前不活動)。作為一種可能性,隨著時間的推移,CPU核心102在活動線程和不活動線程之間來回切換所有16個線程。因而,理論上,CPU核心102可以在一段時間跨度內(nèi)把一些資源投入到所有16個線程。
[0036]在活動線程和不活動線程之間的差別在于,活動線程將其上下文信息本地存儲在CPU核心102的寄存器中,而不活動線程將其上下文信息存儲在這樣的寄存器外,例如存儲在系統(tǒng)存儲器104中。線程的“上下文”包括線程的操作信息,例如線程的程序代碼正在操作的特定變量的值。
[0037]因而,作為在活動狀態(tài)和不活動狀態(tài)之間來回切換線程的活動的一部分,通用CPU核心102的活動包括:i)對于從活動切換到不活動的線程,把來自CPU 102寄存器103的上下文信息外部保存到系統(tǒng)存儲器104 ;ii)對于從不活動切換到活動的線程,把來自系統(tǒng)存儲器104的上下文信息內(nèi)部加載到CPU 102寄存器。
[0038]取決于實現(xiàn),判斷哪些線程活動、哪些線程不活動,并且控制關(guān)聯(lián)的切換,可以以軟件(例如,在OS中)、通用CPU核心102或其他關(guān)聯(lián)硬件或兩者的某種組合來實現(xiàn)。在一種實施例中,CPU核心的寄存器103保存由線程的程序代碼調(diào)用的管線的功能單元所執(zhí)行的整數(shù)指令、浮點指令和向量指令中的一種或多種的數(shù)據(jù)操作數(shù)和/或結(jié)果。CPU寄存器也可以保存線程專用的控制信息,例如頁面表和目錄的位置等等。
[0039]問題在于,迄今為止,加速器單元通常還沒有與通用CPU核心緊密耦合。因而,在圖1的新方法中,線程的上下文信息容易不僅具有執(zhí)行單元和CPU核心102的管線的操作數(shù)和/或其他信息(例如,寄存器103中的整數(shù)、浮點和向量功能單元的上下文),而且還具有一個或多個加速器的操作數(shù)和/或其他信息(例如,在加速器寄存器105中)。因而,圖1的新方法的操作的一部分包括在處理核心100和系統(tǒng)存儲器104之間交換加速器相關(guān)的上下文信息,這與在CPU核心寄存器103和系統(tǒng)存儲器104之間交換傳統(tǒng)的上下文信息相稱。換句話說,可以把在CPU核心和加速器寄存器103、105兩者內(nèi)的上下文信息切換到/切換出系統(tǒng)存儲器104,以便支持單個線程的激活/失活。
[0040]在繼續(xù)之前,值得一提的是,許多如今的計算系統(tǒng)實現(xiàn)“虛擬化”。在典型的實現(xiàn)中,在操作系統(tǒng)107軟件和CPU硬件120之間施加了軟件層106。這種軟件層106通常包括在虛擬機監(jiān)視器(VMM) 109上“運行”的一個或多個虛擬機(VM) 108_1 - 108_Z。盡管不是嚴格要求,但圖1示出一種普通配置,其中均給不同的軟件應(yīng)用實例110_1 - 110_Z提供了在相應(yīng)的專用虛擬機108_1 - 108_N上運行的其自己的操作系統(tǒng)實例107_1 - 107_N。
[0041]VM向在其上運行的軟件呈現(xiàn)CPU的存在。結(jié)果,至少作為第一種近似,在虛擬機上運行的軟件可以“認為”它本身擁有整個計算機系統(tǒng)的資源。VMM 109負責(zé)在底層多處理器CPU 120上支持多個VM。因而,VMM 109協(xié)調(diào)多個VM在多處理器CPU 120上的并發(fā)請求/需求。這包括使得底層計算系統(tǒng)的實際資源(例如,CPU線程、系統(tǒng)存儲器空間、盤驅(qū)動器存儲空間等等)與在VM上運行的軟件所引用的“虛擬”計算系統(tǒng)資源的分配相互關(guān)聯(lián)。線程激活/失活和關(guān)聯(lián)的上下文切換控制可以至少部分由OS實例、VMM或兩者的某種組合執(zhí)行。因而,簡單起見,術(shù)語“OS”將被用來指代操作系統(tǒng)實例、虛擬化層或兩者的某種組合。
[0042]圖2示出活動/不活動線程切換過程,其包括標準通用CPU核心線程上下文信息以及加速器相關(guān)的上下文信息兩者在內(nèi)部寄存器和系統(tǒng)存儲器之間的交換。
[0043]如圖2中的過程可見,在運行時之前期間(即,在通用CPU核心實際執(zhí)行線程的程序代碼之前),例如在程序器正在編寫代碼時和/或作為把線程的源代碼編譯成目標代碼的一部分,定義線程201。線程的定義的一部分包括關(guān)于線程是否使用任何加速器以及在進一步的實施例中如果是這樣則使用哪些加速器的指示。在這里,如在圖1的新核心100方法中可見,多個加速器101_1到101_N “掛上(hang off) ”通用CPU核心102。取決于線程的目的/角色,線程可以不使用、使用一些或全部這樣的加速器。
[0044]在這里,作為典型的情況,線程被定義為在操作系統(tǒng)上“運行”的應(yīng)用軟件程序的一部分(例如,在OS實例107_1上運行的應(yīng)用110_1,0S實例107_1在VMM 109上運行)。在運行時期間,OS負責(zé)把線程分派給具體的CPU核心。作為分派過程的一部分,在線程包含使用加速器的程序代碼的情況中,OS把指示使用一個或多個加速器201的信息寫入到CPU核心。
[0045]隨后,處理器向OS告知為了外部保存一個或多個加速器202的狀態(tài)信息而需要在系統(tǒng)存儲器中分配的空間量。作為響應(yīng),OS進行到分配存儲器空間203。
[0046]當線程在通用CPU核心上實際激活和執(zhí)行時,該線程使用一個或多個加速器。一個或多個加速器的實際操作引起生成與一個或多個加速器相關(guān)聯(lián)的狀態(tài)信息204。一旦做出線程應(yīng)去往不活動狀態(tài)的隨后決定205,作為線程從活動到不活動狀態(tài)的改變的一部分,把一個或多個加速器的上下文信息存儲206在先前在過程203中分配了的存儲器空間中。
[0047]盡管圖2中未敘述,但可以把線程的其他狀態(tài)信息(例如通用CPU核心寄存器的狀態(tài)信息(例如,整數(shù)寄存器、浮點寄存器、向量寄存器等等))外部保存到系統(tǒng)存儲器,這與保存加速器的狀態(tài)信息相稱。
[0048]一旦以后決定恢復(fù)線程并將其從不活動轉(zhuǎn)換到活動狀態(tài)207,就從系統(tǒng)存儲器恢復(fù)過程206中所保存的與線程的一個或多個加速器相關(guān)聯(lián)的狀態(tài)信息,并將其加載到一個或多個加速器的關(guān)聯(lián)的寄存器空間208。
[0049]取決于實現(xiàn),在活動到不活動線程狀態(tài)過渡期間,例如因變于線程是否實際上已經(jīng)使用了特定的加速器,可以個別地保存或不保存特定加速器的狀態(tài)信息。例如,OS可以允許三個加速器用于具體的線程,然而,在線程的最初執(zhí)行到其首次活動至不活動過渡之后,該線程實際上只是用了一個加速器。在這種情況中,僅需要把實際使用的線程的狀態(tài)信息外部保存到存儲器。
[0050]因而,在一種實施例中,線程跟蹤它實際上使用了哪些加速器,并在做出把線程從活動切換到不活動狀態(tài)的決定時采取措施僅保存已被經(jīng)使用的加速器的狀態(tài)信息。根據(jù)一種方法,每當線程進入到活動狀態(tài)時(例如,在首次創(chuàng)建線程時以及每當線程從不活動切換到活動狀態(tài)時),“清除”對已經(jīng)使用的那些加速器的跟蹤。
[0051]在一種實施例中,線程維護具有用于核心中的每一加速器的比特位置的向量。在線程進入活動狀態(tài)時,所有加速器比特被設(shè)置為0,且自線程進入到活動狀態(tài)以來每當隨后首次使用加速器時,該加速器的比特位置被設(shè)置為I。在做出使得線程進入不活動狀態(tài)的決定時,使用該向量來確定實際上需要把哪些加速器的狀態(tài)從內(nèi)部寄存器保存到外部系統(tǒng)存儲器。
[0052]可以(但不必定)借助于英特爾ISA指令執(zhí)行以上所描述的處理。圖3示出借助于基于英特爾的技術(shù)執(zhí)行的圖2的過程的實施例,其中,改進當前現(xiàn)有英特爾指令以便包含一個或多個加速器的上下文切換。本質(zhì)上,每一加速器被看作是x87、SSE和AVX之外的擴展。如圖3可見,作為把線程分派給核心的一部分,且在線程包括使用加速器的程序代碼時,OS把啟用一個或多個加速器的信息寫入到通用CPU的XCRO寄存器301。通過在XCRO寄存器中設(shè)置其他擴展的特定比特,也可以啟用其他擴展(例如,可以啟用x87、SSE和AVX擴展中的任何/所有)。
[0053]然后,通過具有執(zhí)行指令的功能單元邏輯電路的通用CPU,OS執(zhí)行CPWD指令302。所返回的信息向OS告知為了外部保存一個或多個所啟用的加速器的狀態(tài)信息而需要分配的系統(tǒng)存儲器的空間量。作為響應(yīng),OS進行到分配存儲器空間303。
[0054]當線程在通用CPU上實際激活且執(zhí)行時,線程使用已啟用的加速器中的一個或多個,這引起生成與加速器相關(guān)聯(lián)的狀態(tài)信息304。一旦后續(xù)做出線程應(yīng)去往不活動狀態(tài)的決定305,在通用CPU上執(zhí)行XSAVE指令306,該指令把加速器的狀態(tài)信息存儲到為該狀態(tài)信息而分配的存儲器空間。輸入操作數(shù)對應(yīng)于OS在過程303中分配存儲器空間時有效標識的存儲器位置。
[0055]作為XSAVE指令的一部分,存儲XSTATE_BV向量,帶有狀態(tài)信息,用于指示哪些加速器的狀態(tài)信息已經(jīng)存儲在存儲器中。在一種實施例中,在執(zhí)行XSAVE指令時,XSTATE_BV中的信息被用作指示要外部保存哪些特定加速器的各自的狀態(tài)信息的掩碼。此外,在進一步的實施例中,XSTATE_BV向量連同加速器狀態(tài)信息一起外部保存在系統(tǒng)存儲器中。XSTATE_BV向量也可以指示使用其他擴展,例如使用x87、SSE和/或AVX擴展。
[0056]與XSAVE指令的執(zhí)行相稱,在GPP核心管線內(nèi),線程所使用的其他“擴展”的狀態(tài)信息,例如浮點數(shù)和/或向量寄存器狀態(tài)(包括不同大小的向量狀態(tài),例如128位向量(SSE)和256位向量(AVX)),也可以被外部存儲到系統(tǒng)存儲器中。在一種實施例中,相同的XSAVE指令被用來保存所有這樣的狀態(tài)信息(加速器、浮點和向量(兩種尺寸))。此外,與XSAVE指令的執(zhí)行相稱,除與擴展相關(guān)聯(lián)的狀態(tài)信息外,線程的狀態(tài)信息(例如,整數(shù)寄存器狀態(tài)、GPP核心管線狀態(tài)等等)也可以被外部存儲到系統(tǒng)存儲器。
[0057]一旦以后決定把線程從不活動恢復(fù)到活動狀態(tài)307,就執(zhí)行XRSTOR指令308,以便從系統(tǒng)存儲器恢復(fù)加速器狀態(tài),并將其加載到其關(guān)聯(lián)的一個或多個加速器。在這里,首先從系統(tǒng)存儲器讀取XSTATE_BV向量309,并檢查,以便理解要通過前述XSAVE指令把哪些擴展的狀態(tài)寫入到存儲器。在檢查XSTATE_BV向量時,處理器理解已經(jīng)外部存儲其狀態(tài)的那些擴展的狀態(tài),并從系統(tǒng)存儲器把它們調(diào)用到自身。各擴展可以包括一個或多個加速器。因而,可以把一個或多個加速器的狀態(tài)信息調(diào)用到處理器中(例如,連同諸如x87、SSE和AVX等的其他擴展一起)。
[0058]再次,也可以把該線程的其他狀態(tài)信息調(diào)用到通用CPU核心中,以便完整地還原線程。
[0059]示例性計算機架構(gòu)
[0060]圖4-圖7是示例性計算機架構(gòu)的框圖。本領(lǐng)域中已知用于膝上型計算機、臺式機、手持式PC、個人數(shù)字助理、工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù)字信號處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩式電話、便攜式媒體播放器、手持式設(shè)備和各種其他電子設(shè)備的其他系統(tǒng)設(shè)計和配置也合適的。通常,能夠合并在此公開的處理器和/或其他執(zhí)行邏輯的多種多樣的系統(tǒng)或電子設(shè)備通常是合適的。
[0061]現(xiàn)在參見圖4,所示出的是根據(jù)本發(fā)明的一種實施例的系統(tǒng)400的框圖。系統(tǒng)400可以包括耦合控制器中樞420的一個或多個處理器410、415。在一種實施例中,控制器中樞420包括圖形存儲器控制器中樞(GMCH) 490和輸入/輸出中樞(1H) 450 (它們可以是在單獨的芯片上);GMCH 490包括耦合到存儲器440和協(xié)處理器445的存儲器和圖形控制器;1H 450把輸入/輸出(I/O)設(shè)備460耦合到GMCH490。替代地,存儲器和圖形控制器中的一種或兩者集成在處理器內(nèi)(如在此描述的),存儲器440和協(xié)處理器445直接耦合到處理器410,且控制器中樞420處于與1H 450相同的單個芯片中。
[0062]圖4中用虛線指示了附加的處理器415的可選性質(zhì)。每一處理器410、415可以包括在此描述的處理核心中的一個或多個,且可以是某種版本的處理器1100。
[0063]存儲器440可以是例如動態(tài)隨機存取存儲器(DRAM)、相變存儲器(PCM)或兩者的組合。對于至少一種實施例,控制器中樞420經(jīng)由多點式總線與(多個)處理器410、415通信,多點式總線例如前端總線(FSB)、點對點接口,例如快速通道互連(QPI)或類似的連接 495。
[0064]在一種實施例中,協(xié)處理器445是專用處理器,諸如例如高吞吐量話筒處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器等等。在一種實施例中,控制器中樞420可以包括集成圖形加速器。
[0065]在包括架構(gòu)、微架構(gòu)、熱特性、功耗特性等等的指標譜方面,在物理資源410、415之間可以存在各種差異。
[0066]在一種實施例中,處理器410執(zhí)行控制一般類型的操作的數(shù)據(jù)處理的指令。嵌入在指令內(nèi)的可以是協(xié)處理器指令。處理器410把這些協(xié)處理器指令識別為屬于應(yīng)由附加協(xié)處理器445執(zhí)行的類型。相應(yīng)地,處理器410在協(xié)處理器總線或其他互連上把這些協(xié)處理器指令(或表示協(xié)處理器指令的控制信號)發(fā)送給協(xié)處理器445。(各)協(xié)處理器445接受和執(zhí)行所接收的協(xié)處理器指令。
[0067]現(xiàn)在參見圖5,所示出的是根據(jù)本發(fā)明的一種實施例的第一更具體的示例性系統(tǒng)500的框圖。如圖5中所示出,多處理器系統(tǒng)500是點對點互連系統(tǒng),且包括經(jīng)由點對點互連550耦合的第一處理器570和第二處理器580。處理器570和580中的每一個可以是某種版本的處理器1100。在本發(fā)明的一種實施例中,處理器570和580分別是處理器410和415,而協(xié)處理器538是協(xié)處理器445。在另一實施例中,處理器570和580分別是處理器410和協(xié)處理器445。
[0068]處理器570和580被示出為分別包括集成存儲器控制器(MC)單元572和582。處理器570也包括作為其總線控制器單元的一部分的點對點(P-P)接口 576和578 ;類似地,第二處理器580包括P-P接口 586和588。處理器570、580可以經(jīng)由點對點(P-P)接口550使用P-P接口電路578、588來交換信息。如圖5中所示出,MC 572和582把處理器耦合到各自的存儲器,即存儲器532和存儲器534,它們可以是本地附加到個各自的處理器的主存儲器的各部分。
[0069]處理器570、580均可以經(jīng)由各個P-P接口 552、554使用點對點接口電路576、594、586,598與芯片組590交換信息。芯片組590可以可選地經(jīng)由高性能接口 539與協(xié)處理器538交換信息。在一種實施例中,協(xié)處理器538是專用處理器,諸如例如高吞吐量話筒處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器等等。
[0070]共享高速緩存(未示出)可以被包括在任一種處理器中或者在兩種處理器外,然而經(jīng)由P-P互連與處理器連接,以使得如果處理器被置于低功率模式則可以把處理器中的任一種或者兩種的本地高速緩存信息存儲在共享高速緩存中。
[0071]芯片組590可以經(jīng)由接口 596耦合到第一總線516。在一種實施例中,第一總線516可以是外圍組件互連(PCI)總線,或諸如PCI EXPRESS總線或另一第三代I/O互連總線等的總線,但本發(fā)明的范圍不限于此。
[0072]如圖中所不出5,各種I/O設(shè)備514連同總線橋518 —起可以I禹合到第一總線516,總線橋518把第一總線516稱合到第二總線520。在一種實施例中,諸如協(xié)處理器、高吞吐量話筒處理器、GPGPU、加速器(諸如例如圖形加速器或數(shù)字信號處理(DSP)單元)、現(xiàn)場可編程門陣列或任何其他處理器等的一個或多個附加的處理器515被耦合到第一總線516。在一種實施例中,第二總線520可以是低針數(shù)(LPC)總線。各種設(shè)備可以被耦合到第二總線520,這些設(shè)備包括例如鍵盤和/或鼠標522、通信設(shè)備527和諸如在一種實施例中可以包括指令/代碼和數(shù)據(jù)530的盤驅(qū)動器或其他大容量存儲設(shè)備等的存儲單元528。進一步,音頻I/O 524可以耦合到第二總線520。注意,其他架構(gòu)是可能的。例如,代替圖5中的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多點式總線或其他這樣的架構(gòu)。
[0073]現(xiàn)在參見圖6,所示出的是根據(jù)本發(fā)明的一種實施例的第二更具體的示例性系統(tǒng)600的框圖。圖5和6中的類似的元素帶有類似的標號,且已經(jīng)從圖6忽略了圖5的某些方面,以便避免模糊圖6的其他方面。
[0074]圖6闡釋,處理器570、580分別可以包括集成存儲器和I/O控制邏輯(“CL”) 572和582。因而,CL 572、582包括集成存儲器控制器單元且包括I/O控制邏輯。圖6闡釋,不僅是存儲器532,534耦合到CL 572,582, I/O設(shè)備614也耦合到控制邏輯572、582。陳舊I/O設(shè)備615耦合到芯片組590。
[0075]現(xiàn)在參見圖7,所示出的是根據(jù)本發(fā)明的一種實施例的SoC 700的框圖。虛線框是更高級的SoC的可選特征。在圖7中,(多個)互連單元702耦合到:應(yīng)用處理器710,其包括一組一個或多個核心702A-N和(多個)共享高速緩存單元706 ;系統(tǒng)代理單元710 ;(多個)總線控制器單元716 ;(多個)集成存儲器控制器單元714 ;—組或一個或多個協(xié)處理器720,其可以包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(SRAM)單元730 ;直接存儲器訪問(DMA)單元732 ;以及顯示單元740,其用于耦合到一個或多個外置顯示器。在一種實施例中,(多個)協(xié)處理器720包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量話筒處理器、嵌入式處理器等等。
[0076]在此公開的機制的實施例可以以硬件、軟件、固件或這樣的實現(xiàn)方法的組合實現(xiàn)。本發(fā)明的各實施例可以被實現(xiàn)為在可編程系統(tǒng)上執(zhí)行計算機程序或程序代碼,可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備和至少一個輸出設(shè)備。
[0077]可以把程序代碼例如圖5中所闡釋的代碼530應(yīng)用到輸入指令,以便執(zhí)行此描述的功能并生成輸出信息。可以以已知方式把輸出信息應(yīng)用到一個或多個輸出設(shè)備。對于本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)、或微處理器等的處理器的任何系統(tǒng)。
[0078]可以以高級過程編程語言或?qū)ο竺嫦蚓幊陶Z言實現(xiàn)程序代碼以便與處理系統(tǒng)通信。如果期望的話,也可以以匯編語言或機器語言實現(xiàn)程序代碼。事實上,在此描述的機制不限于任何具體的編程語言的范圍。在任何情況下,該語言可以是編譯語言或解釋語言。
[0079]至少一種實施例的一個或多個方面可以通過存儲在一種機器可讀介質(zhì)上的表不性指令來實現(xiàn),該機器可讀介質(zhì)表示在處理器內(nèi)的各種邏輯,在由機器讀取時,表示性指令引起機器制造執(zhí)行在此描述的技術(shù)的邏輯。這樣的表示被稱為“IP核”,可以被存儲在有形機器可讀介質(zhì)上并被提供給各種消費者或制造設(shè)施,以便加載到實際上制成邏輯或處理器的制造機器。
[0080]這樣的機器可讀存儲介質(zhì)可以包括但不限于由機器或設(shè)備制造或形成的制品的非暫態(tài)有形配置,包括存儲介質(zhì),例如硬盤、任何其他盤、半導(dǎo)體設(shè)備或適用于存儲電子指令的任何其他介質(zhì),任何其他盤包括軟盤、光盤、緊致盤只讀存儲器(CD-ROM)、可重寫緊致盤(CD-RW)和磁光盤,半導(dǎo)體設(shè)備例如只讀存儲器(ROM)、諸如動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)等的隨機存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、閃速存儲器、電可擦除可編程只讀存儲器(EEPROM)、相變存儲器(PCM)、磁卡或光卡。
[0081]相應(yīng)地,本發(fā)明的各實施例也包括包含諸如硬件描述語言(HDL)等的指令或包含設(shè)計數(shù)據(jù)的非暫態(tài)有形機器可讀介質(zhì),硬件描述語言(HDL)定義在此描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這樣的實施例也可以被稱為程序產(chǎn)品。
[0082]仿真(包括二進制翻譯、代碼擬態(tài)等等)
[0083]在一些情況中,可以使用指令轉(zhuǎn)換器用來把指令從源指令集轉(zhuǎn)換成目標指令集。例如,指令轉(zhuǎn)換器可以把指令翻譯(例如,使用靜態(tài)二進制翻譯、包括動態(tài)編譯的動態(tài)二進制翻譯)、擬態(tài)、仿真或以另外方式轉(zhuǎn)換成要由核心處理的一個或多個其他指令。指令轉(zhuǎn)換器可以以軟件、硬件、固件或其組合實現(xiàn)。指令轉(zhuǎn)換器可以是在處理器上、在處理器外或部分在處理器上且部分在處理器外。
[0084]圖8是對比根據(jù)本發(fā)明的各實施例使用軟件指令轉(zhuǎn)換器來把以源指令集的二進制指令轉(zhuǎn)換成以目標指令集的二進制指令的框圖。在所闡釋的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但替代地指令轉(zhuǎn)換器可以以軟件、固件、硬件或其各種組合實現(xiàn)。圖8示出使用x86編譯器804來編譯以高級語言802的程序,以便生成可以由帶有至少一個x86指令集核心的處理器816本機執(zhí)行的x86 二進制代碼806。帶有至少一個x86指令集核心的處理器816表示可以執(zhí)行與帶有至少一個x86指令集核心的英特爾處理器基本相同的功能的任何處理器,該處理器兼容地執(zhí)行或以另外方式處理(I)英特爾x86指令集核心的指令集的主要部分或(2)應(yīng)用或其他軟件的目標代碼版本,其目標為在帶有至少一個x86指令集核心的英特爾處理器上運行,以便取得帶有至少一個x86指令集核心的英特爾處理器基本相同的結(jié)果。x86編譯器804表示編譯器,該編譯器可操作為生成可以借助于或無需附加的聯(lián)動裝置處理帶有至少一個x86指令集核心的處理器816上執(zhí)行的x86 二進制代碼806 (例如,目標代碼)。類似地,圖8示出可以使用替代指令集編譯器808編譯以高級語言802的程序,以便生成可以由不帶有至少一個x86指令集核心的處理器814(例如,帶有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)的MIPS指令集和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股的ARM指令集的核心的處理器)本機執(zhí)行的替代指令集二進制代碼810。指令轉(zhuǎn)換器812用來把x86 二進制代碼806轉(zhuǎn)換成可以由不帶有x86指令集核心的處理器814的本機執(zhí)行的代碼。這種經(jīng)轉(zhuǎn)換的代碼不可能與替代指令集二進制代碼810相同,這是因為難以制制造允許這一單的指令轉(zhuǎn)換器;然而,經(jīng)轉(zhuǎn)換的代碼將完成一般的操作,且由來自替代指令集的指令構(gòu)成。因而,指令轉(zhuǎn)換器812表示通過允許不具有x86指令集處理器或核心的處理器或其他電子設(shè)備執(zhí)行x86 二進制代碼806的軟件、固件、硬件或其組合的仿真、模擬或任何其他過程。
【權(quán)利要求】
1.一種方法,包括: 創(chuàng)建線程并標識所述線程利用加速器; 從具有所述加速器的處理器接收用于存儲所述加速器的上下文的存儲空間量; 通過分配所述存儲空間量,創(chuàng)建所分配的存儲空間; 在所述處理器上執(zhí)行所述線程,并利用所述加速器,以便創(chuàng)建用于所述線程的所述加速器的上下文信息; 響應(yīng)于把所述線程置于不活動狀態(tài)的決定,把所述上下文信息存儲在所述已分配的存儲空間中。
2.如權(quán)利要求1所述的方法,其特征在于,所述加速器使用與帶有執(zhí)行所述線程的任務(wù)的所述處理器的CPU核心相同的虛擬-物理地址轉(zhuǎn)換。
3.如權(quán)利要求2所述的方法,其特征在于,與所述線程的所述加速器的上下文信息的所述存儲相稱,所述線程的所述CPU核心的上下文也被存儲在第二存儲空間中。
4.如權(quán)利要求1所述的方法,進一步包括作為所述標識的一部分啟用所述加速器。
5.如權(quán)利要求1所述的方法,進一步包括與所述上下文信息的所述存儲相稱,存儲向量,所述向量標識所述加速器。
6.如權(quán)利要求5所述的方法,進一步包括,響應(yīng)于再次激活所述線程的決定,讀取所述向量,以便理解所述加速器已經(jīng)保存了上下文信息,并且從所述已分配的存儲空間讀取用于所述線程的所述加速器的所述上下文信息,并且把所述上下文信息重新合并到所述加速器。
7.一種機器可讀介質(zhì),其包含程序指令,在由處理器處理時,所述指令引起執(zhí)行一種方法,所述方法包括: 創(chuàng)建線程并標識所述線程利用加速器; 從具有所述加速器的處理器接收用于存儲所述加速器的上下文的存儲空間量; 通過分配所述存儲空間量,創(chuàng)建所分配的存儲空間; 在所述處理器上執(zhí)行所述線程,并利用所述加速器,以便創(chuàng)建用于所述線程的所述加速器的上下文信息; 響應(yīng)于把所述線程置于不活動狀態(tài)的決定,把所述上下文信息存儲在所述已分配的存儲空間中。
8.如權(quán)利要求7所述的機器可讀介質(zhì),其特征在于,所述加速器使用與帶有執(zhí)行所述線程的任務(wù)的所述處理器的CPU核心相同的虛擬-物理地址轉(zhuǎn)換。
9.如權(quán)利要求8所述的機器可讀介質(zhì),其特征在于,與所述線程的所述加速器的上下文信息的所述存儲相稱,所述線程的所述CPU核心的上下文也被存儲在第二存儲空間中。
10.如權(quán)利要求7所述的機器可讀介質(zhì),其特征在于,所述方法進一步包括作為所述標識的一部分啟用所述加速器。
11.如權(quán)利要求7所述的機器可讀介質(zhì),其特征在于,所述方法進一步包括與所述上下文信息的所述存儲相稱,存儲向量,所述向量標識所述加速器。
12.如權(quán)利要求11所述的機器可讀介質(zhì),其特征在于,所述方法進一步包括,響應(yīng)于再次激活所述線程的決定,讀取所述向量,以便理解所述加速器已經(jīng)保存了上下文信息,并且從所述已分配的存儲空間讀取用于所述線程的所述加速器的所述上下文信息,并且把所述上下文信息重新合并到所述加速器。
13.一種裝置,包括: 多個核心,每一核心具有: a)加速器; b)耦合到所述加速器的通用CPU,所述通用CPU具有功能單元邏輯電路,用于執(zhí)行返回用于存儲所述加速器的上下文信息的存儲空間量的指令。
14.如權(quán)利要求13所述的裝置,其特征在于,所述通用CPU進一步包括執(zhí)行第二指令的第二功能單元邏輯電路,所述第二指令把所述加速器的所述上下文信息保存到為所述加速器的所述上下文信息分配的所述存儲空間量。
15.如權(quán)利要求14所述的裝置,其特征在于,所述第二指令也保存用所述加速器的所述上下文信息標識所述加速器的向量。
16.如權(quán)利要求15所述的裝置,其特征在于,所述通用CPU進一步包括執(zhí)行第三指令的功能單元邏輯電路,所述第三指令讀取所述向量以便理解為所述加速器保存了上下文信息,讀取所述已保存上下文信息并把它重新存儲到所述加速器。
17.如權(quán)利要求13所述的裝置,其特征在于,每一核心具有耦合到所述通用的多個加速器。
18.如權(quán)利要求17所述的裝置,其特征在于,所述通用CPU具有寄存器,所述寄存器具有個別地啟用所述加速器中的某些的字段。
【文檔編號】G06F12/10GK104205042SQ201280072154
【公開日】2014年12月10日 申請日期:2012年3月30日 優(yōu)先權(quán)日:2012年3月30日
【發(fā)明者】R·羅恩, E·威斯曼, K·K·凡塞納坦, E·科恩, B·靳茲伯格 申請人:英特爾公司