用于加載保留和存儲條件序列的解碼時間指令優(yōu)化的制作方法
【專利摘要】提供了一種用于更換原子序列的技術。處理電路接收該原子序列。該處理電路檢測原子序列。該處理電路產(chǎn)生內容原子操作以更換原子序列。
【專利說明】用于加載保留和存儲條件序列的解碼時間指令優(yōu)化
【技術領域】
[0001]本發(fā)明總體上涉及解碼時間指令優(yōu)化,并且更具體地涉及用于加載保留(loadreserve)和存儲條件序列(condit1nal sequence)的優(yōu)化。
【背景技術】
[0002]在Power ISA⑩中,通過負載字(Load Word)和保留索引化(Reserve Indexed)(Iwarx)來實現(xiàn)加載保留功能,并且通過存儲雙字條件索引化(stwcx)來實現(xiàn)存儲條件功能。stwcx和Iwarx指令是用于執(zhí)行對存儲器的讀取-修改-寫入操作的原語(primitive)或簡單指令。如果響應于存儲條件而執(zhí)行存儲,則stwcx和Iwarx指令的使用保證了沒有其他的處理器或機構已經(jīng)在執(zhí)行Iwarx指令的時間和stwcx指令完成的時間之間修改了目標存儲器位置。
[0003]可以在來自IBM#于2010年7月23日公布的“Power ISA?Vers1n
2.06Revis1n B (Power ISA?版本2.06修訂版B) ”中找到另外的信息。在Power ISA?
的一些實現(xiàn)方式中,可選地對于其他數(shù)據(jù)寬度提供了另外的加載保留和存儲條件指令。
[0004]可以在來自IBM 的“64-bit PowerPC ELF Applicat1n Binary InterfaceSupplement 1.9”(2004)中找到另外的信息。
[0005]而且,可以在“PowerArchitecture? 32-bit Applicat1n Binary InterfaceSupplement 1.0 Linux? ” (2011 年 4 月 19 日)and “Power Architecture? 32-bitApplicat1n Binary Interface Supplement 1.0_Embedded”(2011 年 4 月 19 日)中找到信息。IBM、AIX、PowerPC、Power ISA、z/Architecture 和 Power Architecture 是在世界上許多行政轄區(qū)中注冊的國際商業(yè)機器公司的商標。
[0006]Linux是Linus Torvalds在美國、其他國家或兩者中的注冊商標。
[0007]—些架構使用基于加載保留和存儲條件的序列以在多個處理器之間同步。這樣的架構的一個示例是Power Architecture--
[0008]對于下述部分的示例代碼
[0009]atomic Increment;
[0010]
retry:1warx r4, 0, r3 // Read integer from RAM into r4, placing reservat1n,
addi r4, r4, I // Add I to r4.stwcx,, r4,0? r3 // Atiempl to store incremented value back to RAM.bne- retry // Iftiie store failed (unlikely), retry,
atomic decrement;
retry:1warx r4, 0, r3 // Read integer from RAM into r4,placing reservat1n.addi r4, r4, -1 // Subtract I from r4,
stwcx.r4,0? r3 // Attempt to store incremented value back to RAM.bne- retry // If the store failed (unlikely), retry,
atomic increment;
retry:1warx r4, O? r3 // Read inieger lrom RAM into r4, placing reservai1n,
add r4, r4,r8 // Add r8 to r4.stwcx.r4,0, r3 // Attempt to store incremented value back to RAM,
bne- retry // if ihc store failed (unlikely), rctiy.atomic decrement;
retry:1warx r4, 0, r3 // Read inieger from RAM into r4, placing
reservat1n.sub r4, r4, r8 // Subtract r8 from i*4.stwcx, 1*4,0, r3 // Attempt to store incremented value back to RAM,
bne- relry // Iflhe store failed (unlikely), retry.atomic evchange;
retry:1warx r4, 0, r3 // Read integer from RAM into r4, placing
[0011]
reservat1n.stwcx.r5, 0, r3 // Attempt to store r5 value back to RAM.bne- retry // If the store failed (unlikely), retry.
[0012]這個代碼可能受到下述多個缺點的影響:
[0013]I)可能需要到相干點(coherent point)的“往返行程(roundtrip) ”,即,分別對于stwcx和Iwarx指令花費多個周期,以首先加載并且有條件地更新在相干點處的值。作為比較,其中要執(zhí)行的操作被發(fā)送到存儲器巢(nest)的存儲器巢原子(atomic)操作可能僅需要一個往返行程——以發(fā)送具有任何參數(shù)的請求,并且接收結果。
[0014]2)當存儲器位置被嚴重競爭時,需要另外的復雜邏輯來防止活鎖(Iivelock)和饑餓(starvat1n),其中,沒有競爭核心(competing core)能夠成功地完成該同步代碼。
[0015]優(yōu)選的是,當可以在高性能存儲器子系統(tǒng)中實現(xiàn)原子操作時,提供這些原子操作,諸如交換、原子遞增(atomic increment)等。不幸的是,對于傳統(tǒng)處理器,這樣的新的設施需要多年來變得被軟件開發(fā)接受,因為它們的使用將使得代碼在更老的系統(tǒng)上不可執(zhí)行。
[0016]因此,在本領域中需要處理上述問題。
【發(fā)明內容】
[0017]實施例包括用于更換原子序列的方法、系統(tǒng)和計算機程序產(chǎn)品。處理電路接收原子序列。處理電路檢測原子序列。處理電路產(chǎn)生內部原子操作以更換原子序列。
[0018]通過本發(fā)明的技術來實現(xiàn)另外的特征和優(yōu)點。本發(fā)明的其他實施例和方面在此被詳細說明,并且被看作所要求保護的發(fā)明的一部分。為了更好的理解具有優(yōu)點和特征的本發(fā)明內,參見說明書和附圖。
[0019]從第一方面看,本發(fā)明提供了一種用于更換原子序列的計算機實現(xiàn)的方法,所述方法包括:處理電路接收所述原子序列;所述處理電路檢測所述原子序列;并且,所述處理電路產(chǎn)生內部原子操作以更換所述原子序列。
[0020]從另一個方面看,本發(fā)明提供了一種用于更換原子序列的計算機系統(tǒng),所述系統(tǒng)包括:處理電路、可操作地連接所述檢測電路的存儲器;用于通過所述處理電路接收所述原子序列的接收部件;用于通過所述處理電路來檢測所述原子序列的檢測部件;以及,產(chǎn)生部件,用于通過所述處理電路來產(chǎn)生內部原子操作以更換所述原子序列。
[0021]從另一個方面看,本發(fā)明提供了一種計算機程序產(chǎn)品,用于更換原子序列,所述計算機程序產(chǎn)品包括計算機可讀存儲介質,其能夠被處理電路讀取,并且存儲指令,所述指令由所述處理電路執(zhí)行來用于執(zhí)行一種用于執(zhí)行本發(fā)明的步驟的方法。
[0022]從另一個方面看,本發(fā)明提供了一種計算機程序,所述計算機程序被存儲在計算機可讀介質上,并且能夠被加載到數(shù)字計算機的內部存儲器內,所述計算機程序包括軟件代碼部分,所述軟件代碼部分當所述程序在計算機上運行時用于執(zhí)行本發(fā)明的步驟。
[0023]從另一個方面看,本發(fā)明提供了一種計算機程序產(chǎn)品,用于更換原子序列,所述計算機程序產(chǎn)品包括:有形存儲介質,其能夠被處理電路讀取,并且存儲由所述處理電路執(zhí)行來用于執(zhí)行一種方法的指令,所述方法包括:所述處理電路接收所述原子序列;所述處理電路檢測所述原子序列;并且,所述處理電路產(chǎn)生內部原子操作以更換所述原子序列。
[0024]從另一個方面看,本發(fā)明提供了一種用于更換原子序列的計算機系統(tǒng),所述系統(tǒng)包括:處理電路和可操作地連接到所述處理電路的存儲器,所述系統(tǒng)被配置為執(zhí)行一種方法,所述方法包括:所述處理電路接收所述原子序列;所述處理電路檢測所述原子序列;并且,所述處理電路產(chǎn)生內部原子操作以更換所述原子序列。
【專利附圖】
【附圖說明】
[0025]現(xiàn)在參考在下面的附圖中圖示的優(yōu)選實施例僅通過示例來描述本發(fā)明:
[0026]圖1A和IB是根據(jù)現(xiàn)有技術的一般示出的處理器核心的框圖,在該處理器核心中,可以實現(xiàn)本發(fā)明的優(yōu)選實施例;
[0027]圖2是圖示根據(jù)本發(fā)明的優(yōu)選實施例的、接收指令、檢測在指令中的原子序列并且產(chǎn)生內部原子操作以更換所檢測的原子序列的框圖;
[0028]圖3是圖示根據(jù)本發(fā)明的優(yōu)選實施例的示例的檢測的原子序列的表格;
[0029]圖4是圖示根據(jù)本發(fā)明的優(yōu)選實施例的示例的檢測的原子序列的表格;
[0030]圖5是圖示根據(jù)本發(fā)明的優(yōu)選實施例的、用于檢測原子序列并且產(chǎn)生內部原子操作以更換所檢測的原子序列的偽代碼的框圖;
[0031]圖6是示出根據(jù)本發(fā)明的優(yōu)選實施例的、被轉譯為對應的內部原子操作的原子序列的框圖;
[0032]圖7是也示出根據(jù)本發(fā)明的優(yōu)選實施例的、被轉譯為對應的內部原子操作的原子序列的框圖。
[0033]圖8是根據(jù)本發(fā)明的優(yōu)選實施例的、用于檢測原子序列、產(chǎn)生內部原子操作以更換原子序列并且執(zhí)行內部原子操作的方法的流程圖;
[0034]圖9是根據(jù)本發(fā)明的優(yōu)選實施例的、用于檢測原子序列、產(chǎn)生內部原子操作以更換原子序列并且執(zhí)行內部原子操作的另一種方法的流程圖;
[0035]圖10是根據(jù)本發(fā)明的優(yōu)選實施例的、可操作地連接到存儲器子系統(tǒng)的處理器的框圖;
[0036]圖11是根據(jù)本發(fā)明的優(yōu)選實施例的、可操作地連接到存儲器子系統(tǒng)的處理器的框圖;
[0037]圖12是根據(jù)本發(fā)明的優(yōu)選實施例的、用于將原子序列更換為所產(chǎn)生的內部原子操作的方法的流程圖;
[0038]圖13圖示了根據(jù)現(xiàn)有技術的具有能力的計算機的示例,在該計算機中,可以實現(xiàn)本發(fā)明的優(yōu)選實施例;并且
[0039]圖14圖示了根據(jù)現(xiàn)有技術的計算機程序產(chǎn)品,在該計算機程序產(chǎn)品中,可以實現(xiàn)本發(fā)明的優(yōu)選實施例。
【具體實施方式】
[0040]示例性實施例提供了在處理電路/核心中的解碼時間指令優(yōu)化(DT1),用于將原子序列替換為(單個)內部原子操作。該技術檢測在原子序列中的加載保留和存儲條件指令,并生成內部原子操作來更換該原子序列。
[0041]在2011年 10月 3 日提交的題目為“Linking Code For An Enhanced Applicat1nBinary Interface (ABI) With Decode Time Instruct1n Optimizat1n (用于具有角軍石馬時間指令優(yōu)化的增強應用二進制接口(ABI)的鏈接代碼)”的美國專利申請N0.13/251,793中描述了解碼時間指令優(yōu)化。美國專利申請N0.13/251,793描述了本發(fā)明的一個實施例涉及最小化內容的表格(TOC)溢出對于在計算系統(tǒng)中的性能和吞吐量的影響。一個實施例包括編譯器,該編譯器被定制來產(chǎn)生對象代碼以包括指定的指令序列(例如,已經(jīng)被插入到代碼內以便補償TOC溢出的序列)。指令序列被適配來被硬件識別,使得微處理器可以優(yōu)化該序列以用于內部執(zhí)行。在定位了指定的指令序列之一時,微處理器或者將在序列中的指令更換為更高效地執(zhí)行的內部指令,或者將在序列中的指令更換為單個內部指令。被微處理器執(zhí)行的該進程在此被稱為解碼時間指令優(yōu)化(DT1)。DT1進程是硬件進程。在此描述的編譯器和鏈接器通過硬件來準備代碼序列用于優(yōu)化。這些代碼序列被編譯器和/或鏈接器以要被DT1使能硬件檢測的方式來編碼,諸如:彼此相鄰的特定指令,其當限制移位(displacement)范圍時具有適當?shù)囊莆环秶?,當處理器對破?destructive)代碼形式有要求以使能DT1時具有諸如破壞的適當屬性,并且當處理器對指令對齊有要求以使能DT1時被適當?shù)貙R,以及DT1使能硬件可能要求的任何其他這樣的屬性。在2011年10月 3 日提交的題目為 “Scalable Decode-time Instruct1n Sequence Optimizat1n ofDependent Instruct1ns (相關指令的可升級解碼時間指令序列優(yōu)化)”的美國專利申請N0.13/251,409中進一步描述了 DT1使能的硬件。
[0042]在使用解碼時間指令優(yōu)化的現(xiàn)有技術的處理器中,現(xiàn)有技術的處理器需要每次獲取指令時重復優(yōu)化。這是在能量、復雜度和可能的延遲上的開銷,并且也限制了可以進行以避免增加的延遲的優(yōu)化。
[0043]示例性實施例提供了可以在處理器的解碼階段(和/或預解碼階段)中對于加載保留和存儲條件指令所增加的優(yōu)化能力,該加載保留和存儲條件指令用于構造看起來對于對齊的存儲位置執(zhí)行原子更新操作的指令的序列。圖1A和IB圖示了根據(jù)一個實施例的具有用于解碼時間指令建立的邏輯(例如,被配置為實現(xiàn)邏輯的硬件電路)的處理器核心(電路)100。注意,提供處理器的一般說明來示出如何可以實現(xiàn)解碼時間指令優(yōu)化的示例。處理器核心100除了別的之外包括預測硬件、寄存器、高速緩存、解碼器、指令排序單元(ISU) 150和指令執(zhí)行單元。具體地說,該預測硬件包括本地分支歷史表格(BHT) 110a、全局分支歷史表格(BHT) IlOb和全局選擇器110c。通過具有用于下一個指令獲取的地址的指令獲取地址寄存器(IFAR) 120來訪問該預測硬件。在一個實施例中,指令高速緩存125獲取被稱為“獲取組”的多個指令。
[0044]使用相同的地址在大體相同的時間來訪問該高速緩存和預測硬件。如果預測硬件具有可用于在獲取組中的指令的預測信息,則那個預測被轉發(fā)到ISU 150,該ISU 150繼而向用于執(zhí)行的單元發(fā)出指令。該預測可以用于與分支目標計算和分支目標預測硬件(諸如鏈接寄存器預測堆棧(stack)和計數(shù)寄存器高速緩存)相結合地更新IFAR 120。如果不可獲得預測信息,但是指令解碼器找到在獲取組中的分支指令,則對于那個獲取組建立預測,且將其存儲在預測硬件中并且被轉發(fā)到ISU 150。
[0045]分支執(zhí)行單元(BRU) 140響應于被ISU 150向其發(fā)出的指令來運行。BRU 140讀取訪問該條件寄存器文件160。分支執(zhí)行單元140進一步訪問在分支信息隊列142中的由分支掃描邏輯存儲的信息以確定分支預測的成功,并且可操作地耦合到與由微處理器支持的一個或多個線程對應的指令獲取地址寄存器(IFAR) 120。當BRU 140發(fā)現(xiàn)分支誤預測時,BRU 140進一步可操作地耦合以引起預測器更新。
[0046]當執(zhí)行指令時,BRU 140檢測該預測是否錯誤。如果如此,則需要更新該預測。為了這個目的,在圖1A中的處理器也包括預測器更新邏輯130a。預測器更新邏輯130a響應于來自分支執(zhí)行單元140的更新指示,并且被配置以更新在本地BHT 110a、全局BHT IlOb和全局選擇器IlOc的一個或多個中的陣列條目。預測器硬件110a、I1b和IlOc可以具有與由指令獲取和預測操作使用的讀取端口不同的寫入端口,或者,可以共享單個讀取/寫入端口。預測器更新邏輯130a可以進一步可操作地稱合到鏈棧(link stack) 115a和計數(shù)器寄存器堆棧115B。
[0047]現(xiàn)在參見條件寄存器文件(CRF) 160,CRF 160可被BRU 140讀取訪問,并且可以由包括但是不限于定點單元(FXU) 165a、浮點單元(FPU) 175和向量多媒體擴展單元(VMXU) 180的執(zhí)行單元寫入。條件寄存器邏輯執(zhí)行單元(CRL執(zhí)行)155 (也被稱為CRU)和SPR處理邏輯讀取和寫入訪問條件寄存器文件(CRF) 160(為了簡化說明,從未示出的SPR處理邏輯訪問CRF 160)。CRF 155對于在CRF文件160中存儲的條件寄存器執(zhí)行邏輯操作。FXU 165a能夠執(zhí)行向CRF 160的寫入更新。
[0048]處理器核心100包括根據(jù)一個實施例的指令解碼器10。在解碼時間,在位于指令高速緩存單元125后的指令解碼器10中執(zhí)行優(yōu)化。指令解碼器10可以檢測原子序列(具有多個指令),并且將所檢測的原子序列改變(轉譯)為單個內部原子操作。在一個實施例中,一個或多個原子功能單元(Atomic Funct1n Unit, AFU) 20可以執(zhí)行由指令解碼器10提供/確定的優(yōu)化(即,單個內部原子操作)。在另一個實施例中,在圖10和11中所示的巢原子單元(Nest Atomic Unit, NAU) 1010可以執(zhí)行單個內部原子操作。補充(和/或替代)檢測原子指令序列和產(chǎn)生新的單個內部原子操作的指令解碼器10,預解碼優(yōu)化器5可以包括用于預解碼時間指令優(yōu)化的預解碼邏輯。預解碼優(yōu)化器5被配置為在由指令高速緩存125例如檢測原子指令序列,并且在高速緩存重加載期間的高速緩存之前產(chǎn)生新的單個內部原子操作。因此,可以通過AFU20和/或NAU 1010來執(zhí)行(被預解碼優(yōu)化器5)檢測和確定的單個內部原子操作。注意,用于檢測原子指令序列并且產(chǎn)生新的單個內部原子操作以更換原子指令序列的指令解碼器10的功能的任何討論類似地適用于預解碼優(yōu)化器5。另外,LSU 170 (加載存儲單元)可以被配置具有AFU 20的功能(而不要求獨立的AFU引擎),并且LSU 170可以執(zhí)行單個內部原子操作。而且,可以增加循環(huán)緩沖區(qū)15來捕獲已經(jīng)被指令解碼器10產(chǎn)生的解碼的單個內部原子操作的每一個。內部原子操作可以從解碼器10輸出作為(內部原子操作)1p 0a、1p lb、1p 2c和/或1p 3d,如圖2中所示。
[0049]可以以任何方式來組合和實現(xiàn)在此所述的實施例,并且,描述示例情況和實現(xiàn)方式的本公開不意味著被限制。
[0050]事實上,實施例提供了一種機構(例如,解碼器10和/或預解碼優(yōu)化器5),用于識別一起實現(xiàn)原子操作的指令的序列,并且內部地將那些指令序列轉譯為表示作為內部原子操作的原子操作的內部操作。因此,今天,在用于實現(xiàn)諸如加載保留和存儲條件的RISC原語的Power ISA?上,通過使用加載保留來獲取數(shù)據(jù)項目來原子地更新在存儲器中的值,并且,如果對于所保留的數(shù)據(jù)項目未記錄干擾,則出現(xiàn)(經(jīng)由存儲條件的)更新。從IBM?在2010年7月23日公布的“Power ISA?版本2.06修訂版B”教導了示例的精簡指令集計算機(RISC)指令集架構(ISA)。在此使用Power ISA?,以便演示示例實施例。然而,本公開不限于Power ISA?或RISC架構。本領域內的技術人員容易明白在此公開的技術在多種架構中的使用。來自IBM? 的“z/Architecture Principles of Operat1n(z/架構操作原理)” SA22-7832-08第九版本(2010年8月)教導了示例的CISC (復雜指令集計算機)指令集架構。
[0051]因為使用多個指令/指令序列來執(zhí)行原子操作,并且在公共的微架構中,可以僅對于最多一個指令保存數(shù)據(jù);原子指令序列不能保存數(shù)據(jù)項目以避免來自在計算機系統(tǒng)中的其他訪問的干擾,導致了低效實現(xiàn)。而且,由于指令的序列,所以多次引發(fā)對于相干點的延遲,這與內部原子操作相反,其中。對于整個內部原子操作僅執(zhí)行一次該傳送。
[0052]現(xiàn)在轉向圖2,框圖200圖示了根據(jù)一個實施例的指令解碼器10的進一步的細節(jié)。指令解碼器10可以包括解碼器A、B、C和D以及優(yōu)化分析引擎205a、205b和205c連同原子優(yōu)化分析引擎220。在一種實現(xiàn)方式中,可以在優(yōu)化分析引擎205a、205b和205c中包括原子優(yōu)化分析引擎220的功能,并且,可以省略原子優(yōu)化分析引擎220 (如果期望的話)。如此一來,對原子優(yōu)化分析引擎220的任何討論適用于優(yōu)化分析引擎205a、205b和205c。
[0053]在指令解碼器10中,優(yōu)化分析弓I擎(OAE) 205a可操作地連接到解碼器A和B,并且優(yōu)化分析引擎205b可操作地連接到解碼器B和C,并且優(yōu)化分析引擎205c可操作地連接到解碼器C和D。
[0054]解碼器A從指令高速緩存125接收指令0,解碼器B從指令高速緩存125接收指令1,解碼器C從指令高速緩存125接收指令2,并且解碼器D從指令高速緩存125接收指令3。指令解碼邏輯210a-210d分別對于剛剛接收的相應指令O、1、2和3執(zhí)行初始解碼。
[0055]指令解碼邏輯210a向原子優(yōu)化分析引擎220、向OAE 205a、向復用器“a” (MUX)(例如,以當未進行優(yōu)化時被選擇)和向優(yōu)化邏輯215a和215b提供其解碼指令(表示指令0)連同操作數(shù)資源屬性、操作數(shù)說明符、解碼的指令類型和解碼的指令屬性。
[0056]指令解碼邏輯210b向原子優(yōu)化分析引擎220、向復用器(MUX) “b”(例如,以當未進行優(yōu)化時被選擇)、向OAE 205a、向OAE 205b、向優(yōu)化邏輯215b、向優(yōu)化邏輯215b和向優(yōu)化邏輯215c提供其解碼指令(表示指令I)連同操作數(shù)資源屬性、操作數(shù)說明符、解碼的指令類型和解碼的指令屬性。
[0057]指令解碼邏輯210c向原子優(yōu)化分析引擎220、向復用器(MUX) “c”(例如,以當未進行優(yōu)化時被選擇)、向OAE 205a、向OAE 205c、向優(yōu)化邏輯215b、向優(yōu)化邏輯215c和向優(yōu)化邏輯215d提供其解碼指令(表示指令2)連同操作數(shù)資源屬性、操作數(shù)說明符、解碼的指令類型和解碼的指令屬性。
[0058]指令解碼邏輯210d向原子優(yōu)化分析引擎220、向復用器(MUX) “d”(例如,以當未進行優(yōu)化時被選擇)、向OAE 205c、向優(yōu)化邏輯215c和向優(yōu)化邏輯215d提供其解碼指令(表示指令3)連同操作數(shù)資源屬性、操作數(shù)說明符、解碼的指令類型和解碼的指令屬性。
[0059]OAE 205a、OAE 205b和OAE 205c被配置為將分別從示例解碼器A、B、C和D接收的解碼指令(包括解碼特性)作比較以確定它們是否對應于作為優(yōu)化的候選者的各種原子指令序列之一(其具有加載保留和存儲條件序列)。另外,原子優(yōu)化分析引擎220被配置為將分別從示例解碼器A、B、C和D接收的解碼指令(包括解碼特性)作比較以確定它們是否對應于作為優(yōu)化的候選者的各種原子指令序列之一(其具有加載保留和存儲條件序列)。
[0060]對于任何原子指令序列(其具有加載保留和存儲條件序列),0AE205a-205c和/或原子優(yōu)化分析引擎220被配置來產(chǎn)生用于每一個特定解碼指令(對應于每一個相應的指令0、1、2和3)的單個內部原子操作。原子優(yōu)化分析引擎220從四個連續(xù)的解碼器A、B、C和D拉出輸入。
[0061]當至少一個OAE 205a_205c檢測到具有加載保留和存儲條件的原子序列時,來自OAE 205a的輸出(即,由OAE 205a產(chǎn)生的相應的單個內部原子操作)被發(fā)送到優(yōu)化邏輯215a和215b和復用器a和b(作為操縱邏輯),來自OAE 205b的輸出(B卩,由OAE 205b產(chǎn)生的相應的單個內部原子操作)被發(fā)送到優(yōu)化邏輯215b和215c和復用器b和c (作為操縱邏輯),并且來自0AE205C的輸出(S卩,由OAE 205c產(chǎn)生的相應的單個內部原子操作)被發(fā)送到優(yōu)化邏輯215c和215d和復用器c和d(作為操縱邏輯)。
[0062]而且,當原子優(yōu)化分析引擎220檢測到具有加載保留和存儲條件的原子序列時,來自原子優(yōu)化分析引擎220的輸出(S卩,由原子優(yōu)化分析引擎220產(chǎn)生的相應的單個內部原子操作)被發(fā)送到優(yōu)化邏輯215a、215b、215c和215d和復用器a、b、c和d (作為操縱邏輯)。
[0063]而且,OAE 205a-205c和/或原子優(yōu)化分析引擎220向相應的復用器a、b、c和d提供操縱邏輯,以選擇由初始解碼操作產(chǎn)生的未優(yōu)化的1p或與在已經(jīng)被優(yōu)化邏輯在OAE/原子優(yōu)化分析引擎控制信號的控制下產(chǎn)生的優(yōu)化DT1序列中的1p對應的1p之一。因此,相應的復用器a、b、c和d將選擇當存在時的單個內部原子操作以分別向指令獲取地址寄存器120輸出1p Oa.1op lb.1op 2c和/或1p 3d。由原子優(yōu)化分析引擎220產(chǎn)生的任何內部原子操作(1p)可以被復用器a、b、c和d選擇為相應的輸出1p 0a、1p lb、1p2c和/或1p 3d以取代與在指令0、1、2和3中分別檢測到的原子序列對應的指令。
[0064]而且,在至少一個實施例中,OAE 205a、205b和205c進行通信以防止相互排他(exclusive)的行為。另外,在解碼器B中的指令可以與在解碼器A中的指令相結合地被組合為優(yōu)化序列,以形成與原始指令O和I對應的DTI優(yōu)化的序列,或者可以與在解碼器C中的指令相結合地被組合為另一優(yōu)化序列,以形成與原始指令I和2對應的DTI優(yōu)化的序列,但是不能同時被DTI優(yōu)化為與在解碼器A和C中的指令相結合地出現(xiàn)的優(yōu)化的一部分。作為簡單示例,序列“addi r2, r2, I ;addi r2, r2, I ;addi r2, r2, I”可以通過組合指令0和I 被 DTI 優(yōu)化(DT1-optimized)為 “addi r2, r2, 2 ;addi r2, r2, I ”,或者可以通過組合指令I和2被DTI優(yōu)化為“addi r2, r2, I ;addi r2, r2, 2”,但是串聯(lián)式(in tandem)執(zhí)行的兩個優(yōu)化將獲得不正確的序列;而且,該序列可以通過組合指令O和I被DTI優(yōu)化為“addir2, r2, 2 ;addi r2, r2, 2”。
[0065]圖3和4示出作為可以被預解碼優(yōu)化器5和/或指令解碼器10 (例如,經(jīng)由OAE205和/或原子優(yōu)化分析引擎220)檢測到的、具有加載保留和存儲條件的示例性被檢測原子序列的表格300和400。這些被檢測的原子序列是來自Power ISA?代碼的示例,其包括原子遞增、原子遞減、原子加法、原子減法和原子交換(exchange)的示例,并且,每一個原子序列被預解碼優(yōu)化器5和/或指令解碼器10轉譯為內部原子操作。存在被所產(chǎn)生的內部原子操作(op)檢測和更換的多個原子序列,并且示例性實施例不意味著被限制。例如,原子比較和互換(swap)序列可以是被內部原子操作檢測和更換的原子序列。原子比較和交互(CAS)是在多線程中使用來實現(xiàn)同步的原子CPU指令,并且,原子比較和互換序列將存儲器位置的內容與給定值作比較,并且只有在它們相同的情況下,才將那個存儲器位置的內容修改為給定的新值。原子性(atomicity)保證了基于最新信息來計算該新值;如果該值已經(jīng)同時被另一個線程更新,則寫入將失敗。操作的結果必須指示它是否執(zhí)行了該替代。
[0066]圖5圖不了根據(jù)一個實施例的表格500,其具有用于OAE 205a_205c、原子優(yōu)化分析引擎220和/或預解碼優(yōu)化器5的示例偽代碼。該偽代碼可以用于檢測和更換示例的(模式)原子序列505,并且類似的偽代碼可以用于檢測和更換在圖3和4中的原子序列。偽代碼的塊510被設計來檢測具有加載保留指令Iwarx并且具有存儲條件指令stwcx的原子序列505。一旦偽代碼檢測/識別了原子序列505,則偽代碼的塊515被設計來將原子序列改變/更換為單個原子序列(即,沒有加載保留和存儲條件序列的一個指令)。具體地說,塊510測試來自解碼器A至D的解碼輸出(與分別有前綴decode0_至decode3_的信號名稱相關聯(lián)),以保證在4元素解碼序列中的每一個位置對應于在序列505中的相應指令。塊515分配操縱變量(steering variable)以指示已經(jīng)檢測到原子操作(decoderO_atomic),并且使得MUX a(例如,在解碼器A中)選擇所產(chǎn)生的內部原子操作以傳送到處理器核心(例如,處理器核心100)的其余部分。在一個示例性實施例中,內部操作代碼“atomic_add”被分配為op,該op要被解碼器A輸出,并且被分配到decoder0_op并且對應于執(zhí)行原子立即操作(immediate operat1n)的原子內部操作。要被內部原子操作使用的立即值被從與解碼器B對應的信號decodel_immediate提取,并且被分配到要被解碼器A與被產(chǎn)生的內部原子操作相結合地使用的信號decoderO_immediate。另外,decoderO_suppress被設置為FALSE (假)以指不存在操作,并且 decoder l_suppress 和 decoder2_suppress 和 decoder3_suppress被設置為TRUE(真),以指示不存在操作,并且解碼器B、C和D將不發(fā)射內部操作。在表格500中的偽代碼被設計來檢測原子序列505,并且可以明白,另外的偽代碼將檢測到其他原子序列。
[0067]例如,圖6和7分別是框圖600和700,其圖示了已經(jīng)分別被0AE205a_205c、原子優(yōu)化分析引擎220和/或預解碼優(yōu)化器5檢測和改變?yōu)閱蝹€內部原子操作的示例原子序列。為了精確,可以針對原子優(yōu)化分析引擎220討論各種操作和功能,但是這些也適用于OAE 205a-205c和預解碼優(yōu)化器5。
[0068]在圖6中,原子優(yōu)化分析引擎220被配置為檢測原子序列605,并且將整個原子序列605轉譯(并且更換)為作為在這個示例中的Atomic_add r4、0、r3、l的單個內部原子操作615 (它是單個命令/指令)。內部原子操作615是原子加上I (atomic add of I)。在一種實現(xiàn)方式中,原子優(yōu)化分析引擎220被配置為將原子序列605轉譯為作為Atomic_increment r4、0、r3的內部原子操作620。內部原子操作620是預定義量(諸如I)的增量。
[0069]類似地,原子優(yōu)化分析引擎220被配置為檢測原子序列610,并且將整個原子序列610轉譯(和更換)為作為Atomic_add r4、0、r3、n的單個內部原子操作625。內部原子操作625加上量η (其表示預定義的數(shù))。
[0070]在圖6中,原子序列605和610都經(jīng)由重試指令而具有循環(huán)(looping),其將繼續(xù)循環(huán)直到被成功地完成。在產(chǎn)生內部原子操作615、620和625時,原子優(yōu)化分析引擎220被配置使得內部原子操作615、620和625分別包含原子序列605和610的循環(huán)(即,重試)。然而,在內部原子操作615、620和625中不包括循環(huán),因為原子優(yōu)化分析引擎220包含內部原子操作615、620和625總是完成(而不要求循環(huán))。
[0071]原子命令(作為在此所述的單個內部原子操作而產(chǎn)生)是用于安全地更新在并行區(qū)域內的特定存儲器位置的指示(directive)。當使用該原子指示時,這保證一次僅一個線程寫入到該存儲器位置,避免了可能從向同一存儲器位置的同時寫入而引起的錯誤。
[0072]根據(jù)原子序列605的實現(xiàn)方式,Iwarx指令將32比特整數(shù)從存儲器(例如,在圖10和11中的存儲器1030)讀取到寄存器r4內,布置(placing)保留。當對于設置了保留的存儲器位置出現(xiàn)另一個訪問時“丟失”保留。addi指令將值I加到從存儲器返回并且存儲在寄存器r4中的值。如果并且只有還沒有丟失通過Iwarx設置的保留,存儲條件指令才將更新的值從r4存儲回到通過Iwarx設置了保留的存儲器位置。如果成功地執(zhí)行了該存儲,則還沒有丟失保留,指示了自從布置了保留起還沒有執(zhí)行更新,并且存儲指令更新條件寄存器crO以指示EQUAL(相等)的值。如果未成功地執(zhí)行該存儲,則已經(jīng)丟失了保留,指示自從布置了保留起已經(jīng)執(zhí)行了更新,并且因此原子更新是不可能的,并且存儲指令更新條件寄存器crO以指示NOT EQUAL (不等)的值。bne指令查看條件寄存器crO的值,并且如果狀態(tài)指示NOT EQUAL,則分支到由示例性標簽“重試”指示的序列的開始,以重新嘗試序列的執(zhí)行。
[0073]根據(jù)“&如11^(^(1(1”615的執(zhí)行的示例性特征,與諸如MES1、MOESI或本領域中已知的其他協(xié)議的處理器相干協(xié)議相結合地實現(xiàn)原子加法,執(zhí)行單元獲得在用于排他訪問的指定地址(例如,具有O移位的寄存器r3)處的數(shù)據(jù)項目。相干協(xié)議被更新以當還沒有結合原子操作獲得相干協(xié)議時不響應于對于數(shù)據(jù)項目的相干請求,直到已經(jīng)完成了原子操作的執(zhí)行。訪問與數(shù)據(jù)項目相關聯(lián)的數(shù)據(jù)值。遞增該數(shù)據(jù)值。將更新的值存儲回已經(jīng)獲得了排他訪問的數(shù)據(jù)項目。該指令根據(jù)指令完成和相干規(guī)則而完成(用于該示例實現(xiàn)方式)。僅當該指令完成時,才從排他訪問狀態(tài)釋放該地址。
[0074]本領域內的技術人員還將明白,如果與諸如寄存器r4或條件寄存器crO的原始原子序列對應的值可以被其他指令讀取,則必須例如通過下述方式來執(zhí)行向這些寄存器寫入更新以反映原始指令序列的語義:在寄存器r4中存儲原子地遞增的值,并且通過將條件寄存器crO設置為指示“EQUAL”的條件來指示成功更新。
[0075]在圖7 (作為一種實現(xiàn)方式)中,原子優(yōu)化分析引擎220不產(chǎn)生用于單個內部原子操作715和720的循環(huán),但是原子優(yōu)化分析引擎220被配置為如果內部原子操作失敗則分別重復內部原子操作715和720。所產(chǎn)生的內部原子操作(715和/或720)可能失敗,并且指示重復,因為該分支不能被(產(chǎn)生內部原子操作的原子優(yōu)化分析引擎220)包含(subsumed)并且/或者因為設計者(出于偏好)更偏好建立不失敗的內部原子操作。
[0076]根據(jù)“atomic_add” 715的執(zhí)行的示例性特征,與諸如MES1、MOESI或在本領域中已知的其他協(xié)議的處理器相干協(xié)議相結合地實現(xiàn)原子加法,執(zhí)行單元獲得在用于排他訪問的指定地址(例如,具有O移位的寄存器r3)處的數(shù)據(jù)項目。相干協(xié)議被更新以當結合原子操作獲得相干協(xié)議時不響應于對于數(shù)據(jù)項目的相干請求,直到已經(jīng)完成了原子操作的執(zhí)行。訪問與該數(shù)據(jù)項目相關聯(lián)的數(shù)據(jù)值。遞增該數(shù)據(jù)值。如果可能則將更新的值存儲回已經(jīng)獲得排他訪問的數(shù)據(jù)項目。根據(jù)一種實現(xiàn)方式,該指令根據(jù)指令完成和相干規(guī)則(而完成。通過將條件寄存器crO設置為“EQUAL(相等)”來指示成功,并且當指令完成時,才從排他訪問狀態(tài)釋放地址。在原子加法715的執(zhí)行的至少一個方面中,不執(zhí)行原子更新,例如,因為一種實現(xiàn)方式可以給較高優(yōu)先級請求者(諸如,但是不限于I/O請求或較高優(yōu)先級處理,或者為了容易實現(xiàn))所獲得的數(shù)據(jù)項目。通過將條件寄存器crO設置為“NOT EQUAL(不等)”來指示atomic_add更新的失敗,并且指令完成,并且從排他訪問狀態(tài)釋放地址。條件分支測試該操作的成功,并且在失敗的情況下重啟原子操作的執(zhí)行。
[0077]在圖7中,原子優(yōu)化分析引擎220被配置為檢測原子序列705并且將整個原子序列705轉譯(并且更換)為作為Retry:Atomic_add.r4, 0,r3, I bne-retry的單個內部原子操作715(它是單個命令/指令)。內部原子操作715是I的原子加法,其如果未成功則重試。原子優(yōu)化分析引擎220被配置為檢測原子序列710,并且將整個原子序列710轉譯(并且更換)為作為Retry: Atomic_add.r4, O, r3, n bne-retry的單個內部原子操作720 (它是單個命令/指令)。內部原子操作720是η量的原子加法,其如果未成功則重試。
[0078]圖8是根據(jù)一個實施例的下述方法的流程圖800,該方法識別原子序列(具有加載保留(S卩,lwarx)命令和存儲條件(即,stwcx)命令),并且產(chǎn)生單個內部原子操作以更換原子序列。
[0079]原子優(yōu)化分析引擎220被配置為在塊805處識別/檢測需要被內部原子操作更換的原子序列(它是來自指令高速緩存125的指令)。原子優(yōu)化分析引擎220被配置為在塊810處產(chǎn)生原子內部操作以更換所檢測的原子序列。ISU150(響應于從指令解碼器10接收到所產(chǎn)生的原子內部操作)被配置為在塊815處向AFU 20發(fā)出單個原子內部操作(取代原子序列)。AFU 20被配置為在塊820處執(zhí)行單個原子內部操作(取代原子序列)。
[0080]圖9是根據(jù)一個實施例的下述方法的流程圖900,該方法識別原子序列(具有加載保留(S卩,lwarx)命令和存儲條件(即,stwcx)命令),并且產(chǎn)生單個內部原子操作以更換原子序列。在圖9中,巢原子單元1010(在圖10中)用于取代AFU 20而執(zhí)行單個內部原子操作。
[0081]原子優(yōu)化分析引擎220被配置為在塊805處識別/檢測需要被內部原子操作更換的原子序列(它是來自指令高速緩存125的指令)。原子優(yōu)化分析引擎220被配置為在塊810處產(chǎn)生原子內部操作以更換所檢測的原子序列。ISU150(響應于從指令解碼器10接收到所產(chǎn)生的原子內部操作)被配置為在塊815處向AFU 20發(fā)出單個原子內部操作(取代原子序列)。AFU 20被配置為在塊905處向巢原子單元(NAU) 1010發(fā)出原子內部操作。NAU1010被配置為在塊915處執(zhí)行單個原子內部操作(取代原子序列),并且在塊915處將結果(例如,計算的結果)返回到處理器核心100。
[0082]圖10是示出根據(jù)一個實施例的、可操作地連接到在存儲器1030中的存儲器子系統(tǒng)1020的處理器1005的兩個處理器核心100 (左和右)的框圖1000。作為示例,處理器核心100的每一個包括其本身(相同)的AFU 20。存儲器子系統(tǒng)1020是具有兩個(相同)的巢原子單元1010的巢。如上在圖9中所述,一個AFU 20向一個NAU 1010發(fā)送單個原子內部操作,并且另一個AFU20向另一個NAU 1010發(fā)送其單個原子內部操作。存儲器子系統(tǒng)1020經(jīng)由NAU 1010可以執(zhí)行內部原子操作的更新,因為NAU 1010被配置為執(zhí)行簡單操作。如此一來,每一個NAU 1010執(zhí)行相應的單個原子內部操作,并且將結果返回到其各自的處理器核心100。
[0083]處理器1005也示出寄存器1015,其是寄存器rl至rn(其中,η是最后一個寄存器)。本領域內的技術人員可以明白,除了在AFU 20和NAU 1010之間的通信之外,在處理器核心100和存儲器子系統(tǒng)1020之間傳送加載和存儲指令。
[0084]圖11是框圖1100,其包含所有的元件并且與圖10的框圖1000相同地操作,除了存儲器子系統(tǒng)1020(僅)包括單個NAU 1010以外。在該情況下,在兩個處理器核心100中的AFU 20向NAU 1010發(fā)送其各自的單個內部原子操作。NAU 1010被配置為獨立地執(zhí)行每一個內部原子操作,并且向每一個相應的處理器核心100發(fā)回結果。
[0085]在一個實施例中,單個內部原子操作的原子建立總是出現(xiàn)。
[0086]在另一個實施例中,例如,當原子序列的所有指令不在一個組中并且因此(該指令)獨立地執(zhí)行時,DT1不能出現(xiàn)。在該情況下,在至少一個實施例中,指令解碼器10需要拒絕諸如Iwarx和/或stwcx的復雜操作的一個或多個,以強制“破解(cracking) ”或微碼(microcode)執(zhí)行。而且,解碼器10可以執(zhí)行未在同一組中的獨立指令(Iwarx和stwcx)的指令高速緩存標記,以將加載保留和存儲條件強制到同一組內(即,到同一原子序列內,使得該原子序列可以被更換,如在此所述)??梢猿跏蓟蛘咴诘谝淮伪粰z測后標記加載保留和存儲條件(指令)。如果獨立的加載保留和存儲條件指令的組形成未重復地成功,則解碼器10可以解除指令高速緩存(Icache 125)中的加載保留和存儲條件(指令)的標記;然后,解碼器10可以標記獨立的加載保留和存儲條件指令以強制微碼/破解,而不要求拒絕。在至少一個實施例中,當DT1未出現(xiàn)以將原子序列轉譯為用于任何給定的原子序列的原子操作時,根據(jù)現(xiàn)有技術的執(zhí)行原子序列來執(zhí)行該原子序列。
[0087]圖12是根據(jù)一個實施例的、用于檢測原子序列和將原子序列更換為(在運行時間和/或預解碼時間處)所產(chǎn)生的內部操作的方法1200的流程圖。
[0088]處理器核心100(它是本領域內的技術人員可以明白的處理電路)在塊1205處經(jīng)由指令解碼器10被配置(這也適用于在此討論的預解碼優(yōu)化器5)以接收原子序列(其可以在來自指令高速緩存125的指令0、1、2和/或3之一中)。處理器核心100在塊1210處經(jīng)由解碼器10被配置以檢測原子序列(例如,經(jīng)由OAE 205a-205c和/或原子優(yōu)化分析引擎220之一 )ο
[0089]雖然已經(jīng)為了說明的目的而說明了四個指令(例如,指令0、1、2和3)和4個解碼器(例如,解碼器A、B、C和D),但是示例性實施例不意味著被如此限制??梢钥紤],可以有
5、6、7或任何期望數(shù)量的解碼器,并且由原子內部操作更換的原子序列可以由要被特定內部原子操作更換的2、3、4、5、6或任何期望數(shù)量的指令構成。
[0090]經(jīng)由解碼器10配置處理器核心100,以在塊1215處(根據(jù)在所檢測的原子序列中的計算/運算)產(chǎn)生內部原子操作以更換原子序列。
[0091]而且,在處理器核心100中的AFU 20和/或在(巢)存儲器子系統(tǒng)1020中的NAU1010被配置以取代原子序列來執(zhí)行內部原子操作。該原子序列包括加載保留指令和存儲條件指令。處理器核心100的解碼器10被配置為識別加載保留指令和存儲條件指令,以檢測需要更換的原子序列。
[0092]內部原子操作是單個指令,而原子序列是包括加載保留指令和存儲條件指令的多個指令?;谠有蛄械莫毩⒅噶畈皇峭唤M和基于獨立指令(例如,加載保留指令和存儲條件指令)被定位得獨立執(zhí)行,指令解碼器10被配置為執(zhí)行未在同一組中的獨立指令的指令高速緩存標記,以將加載保留指令和存儲條件指令強制到同一組內。如此一來,指令解碼器10被配置為基于在獨立指令中首先檢測到加載保留指令來初始地標記加載保留指令,或者基于在獨立指令中首先檢測到存儲條件指令來初始地標記存儲條件指令。而且,指令解碼器10被配置為通過基于在獨立指令中最后檢測到加載保留指令而標記加載保留指令或通過基于在獨立指令中最后檢測到存儲條件指令而標記存儲條件指令,來完成同一組的形成。而且,指令解碼器10被配置為將已經(jīng)被分組到用于原子序列的同一組內的獨立指令轉譯為單個內部原子操作。
[0093]在一個實施例中,當在指令組中未捕獲原子序列時,根據(jù)現(xiàn)有技術獨立地執(zhí)行每一個指令。在至少一個實施例中,諸如存儲條件指令的至少一個指令當在除了第一解碼器A(在圖2)之外的解碼器中被發(fā)現(xiàn)時被拒絕,除非可以使用DT1將其組合為單個原子內部操作。
[0094]圖13圖示了可以在示例性實施例中包括的、具有能力的計算機1300的示例。在此所述的各種方法、過程、模塊、流程圖、工具、應用、電路、元件和技術也可以包含和/或利用計算機1300的能力。而且,計算機1300的能力可以用于實現(xiàn)在此所述的示例性實施例的特征。計算機1300的能力的一個或多個可以用于實現(xiàn)、連接到和/或支持在此在圖1-12和14中所述的(本領域技術人員理解的)任何元素。例如,可以在處理器1310中并入處理器核心100。
[0095]通常,在硬件架構上,計算機1300可以包括經(jīng)由本地接口(未示出)可通信地耦合的一個或多個處理器1310、計算機可讀存儲存儲器1320和一個或多個輸入和/或輸出(I/O)裝置1370。本地接口可以例如但是不限于本領域中已知的一條或多條總線或其他有線或無線連接。本地接口可以具有另外的元件,諸如控制器、緩沖器(高速緩存)、驅動器、中繼器和接收器,用于使能通信。而且,本地接口可以包括地址、控制和/或數(shù)據(jù)連接,用于使能在上述組件之間的適當?shù)耐ㄐ拧?br>
[0096]處理器1310是用于執(zhí)行可以在存儲器1320中存儲的軟件的硬件裝置。處理器1310可以實際上是在與計算機1300相關聯(lián)的幾個處理器中的任何定制或市售的處理器、中央處理單元(CPU)、數(shù)據(jù)信號處理器(DSP)或輔助處理器,并且處理器1310可以是基于半導體的微處理器(以微芯片的形式)或宏處理器。
[0097]計算機可讀存儲器1320可以包括易失性存儲器元件(例如,隨機存取存儲器(RAM),諸如動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)等)和非易失性存儲器元件(例如,ROM、可擦除可編程只讀存儲器(EPROM)、電子可擦除可編程只讀存儲器(EEPROM)、可編程只讀存儲器(PROM)、磁帶、致密盤只讀存儲器(CD-ROM)、光盤只讀存儲器(⑶-R0M),磁盤、軟盤、盒式磁帶和磁帶盒等)的任何一個或組合。而且,存儲器1320可以包含電子的、磁的、光學的和/或其他類型的存儲介質。注意,存儲器1320可以具有分布式架構,其中,各種組件彼此遠離,但是可以被處理器1310訪問。
[0098]在計算機可讀存儲器1320中的軟件可以包括一個或多個獨立程序,其中,每一個程序包括用于實現(xiàn)邏輯函數(shù)的可執(zhí)行指令的有序列表。在存儲器1320中的軟件包括示例性實施例的適當?shù)牟僮飨到y(tǒng)(0/S) 1350、編譯器1340、源代碼1330和一個或多個應用1360。如所示,應用1360包括用于實現(xiàn)示例性實施例的特征、處理、方法、功能和操作的多種功能組件。計算機1300的應用1360可以表示多個應用、代理、軟件組件、模塊、接口、控制器等,如在此所述,但是應用1360不意味著是限制。
[0099]操作系統(tǒng)1350可以控制其他計算機程序的執(zhí)行,并且提供調度、輸入輸出控制、文件和數(shù)據(jù)管理、存儲器管理和通信控制和相關的服務。
[0100]應用到1360可以使用面向服務的架構,其可以是與每一個進行通信的服務的集合。而且,面向服務的架構允許兩個或更多的服務以協(xié)作和/或執(zhí)行行為(例如,代表彼此)。在服務之間的每一個交互可以被自包含和松耦合,使得每一個交互獨立于任何其他交互。
[0101]而且,應用1360可以是源程序、可執(zhí)行程序(對象碼)、腳本或包括要執(zhí)行的一組指令的任何其他實體。當源程序時,則通常經(jīng)由可以或可以不被包括在存儲器1320內的編譯器(諸如編譯器1340)、匯編器或解釋器等轉譯該程序,以便與操作系統(tǒng)(0/S) 1350相結合地正確地運行。而且,應用1360可以被寫入為(a)面向對象的編程語言,其具有數(shù)據(jù)的類和方法,或者(b)過程編程語言,其具有例程、子例程和/或函數(shù)。
[0102]I/O裝置1370可以包括輸入裝置(或外圍裝置),諸如例如但是不限于鼠標、鍵盤、掃描器、麥克風、相機等。而且,I/o裝置1370也可以包括輸出裝置(或外圍裝置),例如但是不限于,打印機、顯示器等。最后,I/O裝置1370可以進一步包括傳送輸入和輸出兩者的裝置,例如但是不限于NIC或調制器/解調器(用于訪問遠程裝置、其他文件、裝置、系統(tǒng)或網(wǎng)絡)、射頻(RF)或其他收發(fā)器、電話接口、電橋(bridge)、路由器等。I/O裝置1370也包括用于通過諸如因特網(wǎng)或內聯(lián)網(wǎng)的各種網(wǎng)絡來進行通信的組件。I/O裝置1370可以利用藍牙連接和電纜(經(jīng)由例如,通用串行總線(USB)端口、串行端口、并行端口、FireWire (火線)、HDMI (高清晰度多媒體接口)等)來連接到處理器1310和/或與處理器1310進行通?目。
[0103]當計算機1300在運行時,處理器1310被配置為執(zhí)行在存儲器1320中存儲的軟件,以向存儲器1320發(fā)送數(shù)據(jù)和從存儲器1320接收數(shù)據(jù),并且總體上根據(jù)軟件來控制計算機1300的操作。應用1360和操作系統(tǒng)1350被處理器1310整體或部分地讀取,可能被緩沖在處理器1310內,并且然后被執(zhí)行。
[0104]當以軟件實現(xiàn)應用1360時,應當注意,應用1360可以被存儲在實際上任何計算機可讀存儲介質上以由任何計算機相關系統(tǒng)或方法使用或與其相結合地使用。在該文件的上下文中,計算機可讀存儲介質可以是電子的、磁的、光學的或其他物理的裝置或部件,其可以包含或存儲計算機程序,以由計算機相關系統(tǒng)和方法使用或與其相結合地使用。
[0105]應用1360可以被包含在任何計算機可讀介質1320中以由指令執(zhí)行系統(tǒng)、設備、月艮務器或裝置使用或與其相結合地使用,該指令執(zhí)行系統(tǒng)、設備、服務器或裝置例如是基于計算機的系統(tǒng)、包含處理器的系統(tǒng)或可以從指令執(zhí)行系統(tǒng)、設備或裝置獲取指令并且執(zhí)行該指令的其他系統(tǒng)。在本文的上下文中,“計算機可讀存儲介質”可以是可以存儲、讀取、寫入、傳輸或傳送程序以由指令執(zhí)行系統(tǒng)、設備或裝置使用或與其相結合地使用的任何部件。該計算機可讀介質可以例如但是不限于電子的、磁的、光學的或半導體的系統(tǒng)、設備或裝置。
[0106]計算機可讀介質1320的更具體示例(非窮盡性列表)包括下述部分:具有一條或多條導線的電氣連接(電子)、便攜計算機盤(磁或光)、隨機存取存儲器(RAM)(電子)、只讀存儲器(ROM)(電子)、可擦除可編程只讀存儲器(EPROM、EEPROM或快閃存儲器)(電子)、光纖(光學)和便攜致密盤存儲器(CDR0M、CD R/W)(光學)。
[0107]在其中以硬件來實現(xiàn)應用1360的示例性實施例中,可以使用下面的技術的任何一個或組合來實現(xiàn)應用1360,其中每一個在本領域中公知:具有用于在數(shù)據(jù)信號上實現(xiàn)邏輯函數(shù)的邏輯門的離散(discrete)邏輯電路、具有適當?shù)慕M合邏輯門的專用集成電路(ASIC)、可編程門陣列(PGA)、現(xiàn)場可編程門陣列(FPGA)等。
[0108]可以明白,計算機1300包括可以在在此所述的各個裝置、服務器和系統(tǒng)中包括的軟件和硬件組件的非限定性示例,并且可以明白,可以在示例性實施例中描述的各個裝置和系統(tǒng)中包括另外的軟件和硬件組件。
[0109]如上所述,可以以計算機實現(xiàn)的處理和用于實施那些處理的設備的形式來體現(xiàn)實施例。實施例可以包括在計算機可讀/可用介質1402上的如圖14中描述的計算機程序產(chǎn)品1400,計算機可讀/可用介質1402具有計算機程序代碼邏輯1404,計算機程序代碼邏輯1404包含在作為制造品的有形介質中包含的指令。用于計算機可讀/可用介質1402的示例性制造品可以包括軟盤、⑶-ROM、硬盤驅動器、通用串行總線(USB)快閃驅動器或任何其他計算機可讀存儲介質,其中,當計算機程序代碼邏輯1404被加載到計算機內并且被其執(zhí)行時,該計算機變?yōu)橛糜趯嵤┍景l(fā)明的設備。實施例包括計算機程序代碼邏輯1404,例如,無論是否被存儲在存儲介質中,加載到計算機內和/或被其執(zhí)行,或者通過某種傳輸介質被傳輸,諸如通過電線或線纜、通過光纖或經(jīng)由電磁輻射,其中,當該計算機程序代碼邏輯1404被加載到計算機內并且被其執(zhí)行時,該計算機變?yōu)橛糜趯嵤┍景l(fā)明的設備。當在通用微處理器上被實現(xiàn)時,該計算機程序代碼邏輯1404分段配置該微處理器以建立特定邏輯電路。
[0110]技術效果和益處包括減少處理時間。在在此所述的示例性的被檢測原子序列中的代碼(例如,諸如在圖3和4中的代碼)可能受到延遲問題的影響。在代碼中的這些延遲問題是可能需要對于相關點的兩個“往返行程”,即,分別對于stwcx和Iwarx指令花費多個處理器周期,以首先加載并且有條件地更新在相干點處的值。作為比較,其中要執(zhí)行的操作被發(fā)送到存儲器巢(即,存儲器子系統(tǒng)1020)的存儲器巢(內部)原子操作(由解碼器10產(chǎn)生)可能僅需要一個往返行程來發(fā)送(通過AFU 20)具有任何參數(shù)的請求并且接收結果(在處理器核心100處接收回)。
[0111]在現(xiàn)有技術中,當存儲器位置(在存儲器1030或寄存器1015中)被嚴重競爭時,需要另外的復雜邏輯來防止活鎖和饑餓,其中,沒有競爭核心可以成功地完成原子序列與Iwarx和stwcx指令的同步代碼。然而,為了避免這一點,當可以在高性能存儲器子系統(tǒng)1020(例如,用于傳統(tǒng)處理器)中實現(xiàn)諸如原子交換、原子遞增等的內部原子操作時,實施例提供這種內部原子操作。因此,將用于描述使用加載保留和存儲條件的存儲器同步操作的指令的序列轉譯為使用解碼時間指令優(yōu)化的內部存儲器子系統(tǒng)操作(即,內部原子操作)。
[0112]在此使用的術語僅用于描述特定實施例的目的,并且不意欲限制本發(fā)明。如在此使用,單數(shù)形式“一個”和“該”意欲也包括復數(shù)形式,除非上下文清楚地另外指示。可以進一步明白,術語“包括”當在本說明書中使用時指定所述特征、整數(shù)、步驟、操作、元素和/或組件的存在,但是不排除一個或多個其他特征、整數(shù)、步驟、操作、元素、組件和/或其組的存在或增加。
[0113]在所附的權利要求中的所有部件或步驟加功能元素的對應的結構、材料、行為和等同物意欲包括用于與具體要求保護的其他所要求保護元素相組合地執(zhí)行功能的任何結構、材料或行為。本發(fā)明的說明已經(jīng)為了例示和說明而被提供,并且不意欲是窮盡性的或限于所公開的形式的發(fā)明。在不偏離本發(fā)明的范圍的情況下,許多修改和變化對于本領域內的普通技術人員顯然。實施例被選擇和描述以便最佳地解釋本發(fā)明的原理和實際應用,并且使得其他本領域內的普通技術人員能夠明白本發(fā)明的、具有適合于所考慮的特定用途的各種修改的各個實施例。
[0114]所屬【技術領域】的技術人員知道,本發(fā)明的各個方面可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明的各個方面可以具體實現(xiàn)為以下形式,即:完全的硬件實施方式、完全的軟件實施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結合的實施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明的各個方面還可以實現(xiàn)為在一個或多個計算機可讀介質中的計算機程序產(chǎn)品的形式,該計算機可讀介質中包含計算機可讀的程序代碼。
[0115]可以采用一個或多個計算機可讀介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用。
[0116]計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用的程序。
[0117]計算機可讀介質上包含的程序代碼可以用任何適當?shù)慕橘|傳輸,包括一但不限于一無線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0118]可以以一種或多種程序設計語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設計語言包括面向對象的程序設計語言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設計語言一諸如“C”語言或類似的程序設計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務提供商來通過因特網(wǎng)連接)。Java以及所有基于Java的商標及標識都是Oracle公司和/或其關聯(lián)公司的商標或注冊商標。
[0119]下面將參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些計算機程序指令在通過計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。
[0120]也可以把這些計算機程序指令存儲在計算機可讀介質中,這些指令使得計算機、其它可編程數(shù)據(jù)處理裝置、或其他設備以特定方式工作,從而,存儲在計算機可讀介質中的指令就產(chǎn)生出包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的指令的制造品(article of manufacture)。
[0121]計算機程序指令也可以被加載到計算機、其他可編程數(shù)據(jù)處理設備或其他裝置上,以使得在該計算機、其他可編程設備或其他裝置上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,使得在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖和/或框圖的一個或多個方框中執(zhí)行的功能/行為的處理。
[0122]如上所述,可以以用于實施那些處理的計算機實現(xiàn)的處理和設備的形式來體現(xiàn)實施例。在實施例中,在由一個或多個網(wǎng)絡部件執(zhí)行的計算機程序代碼中包含本發(fā)明。實施例包括在計算機可用介質上的計算機程序產(chǎn)品,該計算機可用介質具有計算機程序代碼邏輯,該計算機程序代碼邏輯包含在作為制造品的有形介質中包含的指令。用于計算機可用介質的示例性制造品可以包括軟盤、CD-ROM、硬盤驅動器、通用串行總線(USB)快閃驅動器或任何其他計算機可讀存儲介質,其中,當計算機程序代碼邏輯被加載到計算機內并且被其執(zhí)行時,該計算機變?yōu)橛糜趯嵤┍景l(fā)明的設備。實施例包括計算機程序代碼邏輯,例如,無論被存儲在存儲介質中,加載到計算機內和/或被其執(zhí)行,或者通過某種傳輸介質被傳輸,諸如通過電線或線纜、通過光纖或經(jīng)由電磁輻射,其中,當該計算機程序代碼邏輯被加載到計算機內并且被其執(zhí)行時,該計算機變?yōu)橛糜趯嵤┍景l(fā)明的設備。當在通用微處理器上被實現(xiàn)時,該計算機程序代碼邏輯分段配置該微處理器以建立特定邏輯電路。
[0123]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
【權利要求】
1.一種用于更換原子序列的計算機實現(xiàn)的方法,所述方法包括: 處理電路接收所述原子序列; 所述處理電路檢測所述原子序列;并且, 所述處理電路產(chǎn)生內部原子操作以更換所述原子序列。
2.根據(jù)權利要求1所述的計算機實現(xiàn)的方法,進一步包括:取代所述原子序列而執(zhí)行所述內部原子操作。
3.根據(jù)在前的權利要求的任何一項所述的計算機實現(xiàn)的方法,其中,所述原子序列包括加載保留指令和存儲條件指令。
4.根據(jù)權利要求3所述的計算機實現(xiàn)的方法,其中,檢測所述原子序列包括:識別所述加載保留指令和所述存儲條件指令,以檢測需要更換的所述原子序列。
5.根據(jù)在前的權利要求的任何一項所述的計算機實現(xiàn)的方法,進一步包括: 基于所述原子序列的獨立指令不是同一組和基于所述獨立指令被定位得獨立地執(zhí)行,配置指令解碼器以執(zhí)行不在同一組中的所述獨立指令的指令高速緩存標記,以將加載保留指令和存儲條件指令強制到同一組內; 配置所述指令解碼器,以基于在所述獨立指令中首先檢測到所述加載保留指令來初始地標記所述加載保留指令,或者基于在所述獨立指令中首先檢測到所述存儲條件指令來初始地標記所述存儲條件指令; 配置所述指令解碼器,以通過基于在所述獨立指令中最后檢測到所述加載保留指令而標記所述加載保留指令或通過基于在所述獨立指令中最后檢測到所述存儲條件指令而標記所述存儲條件指令,來完成同一組的形成;以及 配置所述指令解碼,以將已經(jīng)被分組到用于所述原子序列的同一組內的所述獨立指令轉譯為所述內部原子操作。
6.根據(jù)在前的權利要求的任何一項所述的計算機實現(xiàn)的方法,其中,預解碼優(yōu)化器被配置為檢測所述原子序列并且在通過指令高速緩存來高速緩存之前產(chǎn)生所述內部原子操作。
7.根據(jù)在前的權利要求的任何一項所述的計算機實現(xiàn)的方法,其中,在存儲器子系統(tǒng)和原子功能單元的至少一個中執(zhí)行所述內部原子操作。
8.根據(jù)在前的權利要求的任何一項所述的計算機實現(xiàn)的方法,包括步驟:存儲器子系統(tǒng)執(zhí)行所述內部原子操作;并且向所述處理電路發(fā)送結果。
9.一種用于更換原子序列的計算機系統(tǒng),所述系統(tǒng)包括: 處理電路, 可操作地連接所述處理電路的存儲器; 接收部件,用于通過所述處理電路接收所述原子序列; 檢測部件,用于通過所述處理電路來檢測所述原子序列;以及, 產(chǎn)生部件,用于通過所述處理電路來產(chǎn)生內部原子操作以更換所述原子序列。
10.根據(jù)權利要求9所述的計算機系統(tǒng),其中,所述系統(tǒng)進一步包括執(zhí)行部件,用于取代所述原子序列而執(zhí)行所述內部原子操作。
11.根據(jù)權利要求9或10的任何一項所述的計算機系統(tǒng),其中,所述檢測部件包括識別部件,用于識別用于檢測需要被更換的所述原子序列的加載保留指令和存儲條件指令。
12.根據(jù)權利要求9至11的任何一項所述的計算機系統(tǒng),進一步包括: 響應于所述原子序列的獨立指令不是同一組并且基于所述獨立指令被定位得獨立執(zhí)行,配置用于配置指令解碼器以執(zhí)行未在同一組中的所述獨立指令的指令高速緩存標記、以將加載保留指令和存儲條件指令強制到同一組內的部件; 配置用于配置所述指令解碼器以基于在所述獨立指令中首先檢測到所述加載保留指令來初始地標記所述加載保留指令、或者基于在所述獨立指令中首先檢測到所述存儲條件指令來初始地標記所述存儲條件指令的部件; 配置用于配置所述指令解碼器、以通過基于在所述獨立指令中最后檢測到所述加載保留指令而標記所述加載保留指令或通過基于在所述獨立指令中最后檢測到所述存儲條件指令而標記所述存儲條件指令來完成同一組的形成的部件;以及 配置用于配置所述指令解碼、以將已經(jīng)被分組到用于所述原子序列的同一組內的所述獨立指令轉譯為所述內部原子操作的部件。
13.根據(jù)權利要求9至12的任何一項所述的計算機系統(tǒng),其中,預解碼優(yōu)化器可操作用于檢測所述原子序列,并且用于在通過指令高速緩存來高速緩存之前產(chǎn)生所述內部原子操作。
14.一種用于更換原子序列的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括: 計算機可讀存儲介質,其能夠被處理電路讀取,并且存儲由所述處理電路執(zhí)行來用于執(zhí)行根據(jù)權利要求1至8的任何一項所述的方法的指令。
15.一種在計算機可讀介質上存儲并且能夠加載到數(shù)字計算機的內部存儲器內的計算機程序,包括軟件代碼部分,所述軟件代碼部分當所述程序在計算機上運行時用于執(zhí)行權利要求I至8的任何一項所述的方法。
【文檔編號】H04N13/00GK104205820SQ201380017409
【公開日】2014年12月10日 申請日期:2013年2月15日 優(yōu)先權日:2012年3月28日
【發(fā)明者】M.K.格施溫德 申請人:國際商業(yè)機器公司