本公開內(nèi)容涉及處理邏輯、微處理器和相關(guān)聯(lián)的指令集架構(gòu)的領(lǐng)域,其在由處理器或其它處理邏輯執(zhí)行時,執(zhí)行邏輯、數(shù)學(xué)或其它功能操作。具體而言,本公開內(nèi)容涉及用于提供simdsm3密碼散列函數(shù)的指令和邏輯。
背景技術(shù):
密碼散列函數(shù)是散列函數(shù),即采用任意數(shù)據(jù)塊并返回固定大小的位串——(加密的)散列值的算法,使得對數(shù)據(jù)的(意外的或有意的)改變將(以非常高的概率)改變散列值。要編碼的數(shù)據(jù)通常被稱為“消息”,并且散列值有時被稱為消息摘要或“摘要”。
密碼散列函數(shù)具有許多信息安全應(yīng)用,尤其是在數(shù)字簽名、消息認證代碼(mac)和其它形式的認證中。它們還可以用作普通散列函數(shù)以在散列表中索引數(shù)據(jù),用于采指紋以檢測重復(fù)數(shù)據(jù)或唯一地識別文件,以及用作校驗和以檢測意外數(shù)據(jù)損壞。在信息安全上下文中,密碼散列值有時被稱為(數(shù)字)指紋、校驗和、或僅僅散列值,盡管所有這些術(shù)語代表具有截然不同的特性和目的的功能。
密碼散列函數(shù)設(shè)計中的兩個主要權(quán)衡,對于程序員是可見的:(1)計算的復(fù)雜性--太簡單并且散列容易破碎,太復(fù)雜并且散列花費太長時間來計算;以及(2)輸出的大小——太小以及暴力攻擊太容易,太大以及存儲和發(fā)送散列值的成本太大。最著名的密碼散列函數(shù)中的一個是由ronaldrivest開發(fā)的md5(消息摘要算法5)算法。其它常見算法是作為美國聯(lián)邦信息處理標準(fips)的由國家標準和技術(shù)研究所(nist)發(fā)布的sha-1(安全散列算法1)以及變體sha-2和sha-3。另一種感興趣的密碼散列算法是由xiaoyunwang等人發(fā)明的,是由中國商用密碼管理辦公室發(fā)布的sm3密碼散列函數(shù),并作為互聯(lián)網(wǎng)草案提交給互聯(lián)網(wǎng)工程任務(wù)組(ietf)以用于電子認證服務(wù)系統(tǒng)的使用。
通常,不需要散列算法的硬件加速,因為它們不被設(shè)計為對計算要求特別高。但是一個專用的動態(tài)口令加密芯片是由中國深圳同方電子設(shè)備有限公司生產(chǎn)的,其在硬件中實現(xiàn)了sm3密碼散列算法。
使用查找存儲器、真值表、二進制決策圖或現(xiàn)場可編程門陣列(fpga)的典型直接的硬件實現(xiàn)在電路面積方面是昂貴的。使用與gf(256)同構(gòu)的有限域的替代方案在面積上可能是有效的,但也可以比直接的硬件實現(xiàn)更慢。
完整的硬件方案的一個缺點是,它不容易裝入現(xiàn)代微處理器的標準執(zhí)行流水線中,而不特別考慮諸如特別處理中斷或其他指令的并發(fā)超標量執(zhí)行等事情。與標準執(zhí)行流水線的另一不匹配是執(zhí)行整個散列算法所需的延遲。
現(xiàn)代處理器通常包括提供計算密集的操作而提供高水平的數(shù)據(jù)并行性的指令,其可以通過使用各種數(shù)據(jù)存儲設(shè)備(諸如,舉例來說,單指令多數(shù)據(jù)(simd)向量寄存器)的有效實現(xiàn)來利用。中央處理單元(cpu)然后可以提供并行硬件以支持處理向量。向量是保存多個連續(xù)數(shù)據(jù)元素的數(shù)據(jù)結(jié)構(gòu)。大小為m的向量寄存器可以包含大小為o的n個向量元素,其中n=m/o。例如,64字節(jié)的向量寄存器可以被劃分為(a)64個向量元素,每個元素保存占用1個字節(jié)的數(shù)據(jù)項,(b)32個向量元素,每個元素用于保存占用2字節(jié)(或一個“字”)的數(shù)據(jù)項,(c)16個向量元素,每個元素用于保存占用4字節(jié)(或一個”雙字”)的數(shù)據(jù)項,或(d)8個向量元素,每個元素用于保存占用8字節(jié)(或一個“四倍字”)的數(shù)據(jù)項。simd向量寄存器中的并行性的性質(zhì)可以非常適合于處理安全散列算法。
到目前為止,還沒有充分探索這些復(fù)雜性、不匹配、性能限制問題和其它瓶頸的潛在解決方案。
附圖說明
在附圖的圖形中通過示例而非限制的方式例示了本發(fā)明。
圖1a是執(zhí)行用于提供simdsm3密碼散列函數(shù)的指令的系統(tǒng)的一個實施例的框圖。
圖1b是執(zhí)行用于提供功能的指令的系統(tǒng)的另一實施例的框圖。
圖1c是執(zhí)行用于提供simdsm3密碼散列函數(shù)的指令的系統(tǒng)的另一實施例的框圖。
圖2是執(zhí)行用于提供simdsm3密碼散列函數(shù)的指令的處理器的一個實施例的框圖。
圖3a例示了根據(jù)一個實施例的打包數(shù)據(jù)類型。
圖3b例示了根據(jù)一個實施例的打包數(shù)據(jù)類型。
圖3c例示了根據(jù)一個實施例的打包數(shù)據(jù)類型。
圖3d例示了根據(jù)一個實施例的用于提供simdsm3密碼散列函數(shù)的指令編碼。
圖3e例示了根據(jù)另一實施例的用于提供simdsm3密碼散列函數(shù)的指令編碼。
圖3f例示了根據(jù)另一實施例的用于提供simdsm3密碼散列函數(shù)的指令編碼。
圖3g例示了根據(jù)另一實施例的用于提供simdsm3密碼散列函數(shù)的指令編碼。
圖3h例示了根據(jù)另一實施例的用于提供simdsm3密碼散列函數(shù)的指令編碼。
圖4a例示了執(zhí)行提供simdsm3密碼散列函數(shù)的指令的處理器微架構(gòu)的一個實施例的元件。
圖4b例示了執(zhí)行提供simdsm3密碼散列函數(shù)的指令的處理器微架構(gòu)的另一實施例的元件。
圖5是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的處理器的一個實施例的框圖。
圖6是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的計算機系統(tǒng)的一個實施例的框圖。
圖7是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的計算機系統(tǒng)的另一實施例的框圖。
圖8是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的計算機系統(tǒng)的另一實施例的框圖。
圖9是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的芯片上系統(tǒng)的一個實施例的框圖。
圖10是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的處理器的實施例的框圖。
圖11是提供simdsm3密碼散列函數(shù)的ip核開發(fā)系統(tǒng)的一個實施例的框圖。
圖12例示了提供simdsm3密碼散列函數(shù)的架構(gòu)仿真系統(tǒng)的一個實施例。
圖13例示了用于轉(zhuǎn)換提供simdsm3密碼散列函數(shù)的指令的系統(tǒng)的一個實施例。
圖14a例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置的一個實施例的圖。
圖14b例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置的替代實施例的圖。
圖15例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置的另一替代實施例的圖。
圖16例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置的另一替代實施例的圖。
圖17a例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的另一指令的裝置的一個實施例的圖。
圖17b例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的另一指令的裝置的替代實施例的圖。
圖18a例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的另一指令的裝置的另一替換實施例的圖。
圖18b例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的另一指令的裝置的又一替代實施例的圖。
圖19例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的過程的實施例的流程圖。
圖20例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的過程的另一實施例的流程圖。
圖21例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的替代指令的過程的實施例的流程圖。
具體實施方式
下文描述公開了用于在處理器、計算機系統(tǒng)或其它處理裝置內(nèi)或與其相關(guān)聯(lián)地提供simdsm3密碼散列函數(shù)的指令和處理邏輯。一些實施例包括處理器,其包括解碼器以解碼用于simdsm3消息擴展的指令,該指令指定第一和第二源數(shù)據(jù)操作數(shù)集合以及擴展范圍。響應(yīng)于該指令,處理器執(zhí)行單元根據(jù)由指定的擴展范圍確定的第一和第二源數(shù)據(jù)操作數(shù)集合,執(zhí)行多個sm3消息擴展,并將結(jié)果存儲到simd目的寄存器中。一些實施例還根據(jù)中間散列值輸入、源數(shù)據(jù)集和圈常數(shù)(roundconstant)集合執(zhí)行散列算法的simdsm3散列圈片(round-slice)部分的指令。處理器執(zhí)行單元對源數(shù)據(jù)集執(zhí)行一組sm3散列圈迭代(hashingrounditeration),應(yīng)用中間散列值輸入和圈常數(shù)集合,并將新的散列值結(jié)果存儲在simd目的寄存器中。sm3密碼散列算法的細節(jié)可以在“sm3hashfunction”,ietfinternet-draft,chineseacademyofscience,2014年2月14日,版本01中找到,可以在萬維網(wǎng)上的tools.ietf.org/pdf/draft-shen-sm3-hash-01.pdf處獲得。
應(yīng)當(dāng)理解,simdsm3密碼散列指令可以用于在諸如密碼協(xié)議和互聯(lián)網(wǎng)通信的應(yīng)用中提供simdsm3密碼散列函數(shù),以確保數(shù)據(jù)完整性、數(shù)字簽名、身份驗證、用于金融交易、電子商務(wù)、電子郵件、軟件分發(fā)、數(shù)據(jù)存儲、隨機數(shù)生成等的消息內(nèi)容認證和消息起源認證。
對于提供sm3密碼散列函數(shù)的simd指令和處理邏輯的一些實施例,sm3消息擴展和sm3密碼散列圈可以在現(xiàn)代微處理器的標準執(zhí)行流水線中并發(fā)地和/或并行地在迭代片中執(zhí)行。將理解,可以方便地選擇每個片的迭代次數(shù),以便通過與執(zhí)行sm3消息擴展的片和/或sm3密碼散列圈的片相關(guān)聯(lián)的延遲來為其它并發(fā)飛行指令提供充分的覆蓋。因此,還將理解,提供用于simdsm3密碼散列算法圈片的指令的執(zhí)行,該圈片具有多次迭代(例如每個片兩次、四次或八次迭代),但小于散列算法的圈迭代的總次數(shù),允許在超標量執(zhí)行流水線中和/或在無序處理器流水線中并發(fā)執(zhí)行這樣的其它所需指令(例如,sm3消息擴展指令),從而顯著地提高大量應(yīng)用的處理吞吐量,以及利用與通用處理器相關(guān)聯(lián)的制造工藝改進的頻率縮放。
在下文的描述中,闡述了許多具體細節(jié)(諸如處理邏輯、處理器類型、微架構(gòu)條件、事件、啟用機制等),以便提供對本發(fā)明的實施例的更透徹的理解。然而,本領(lǐng)域技術(shù)人員將理解,可以在沒有這些具體細節(jié)的情況下實踐本發(fā)明。另外,一些公知的結(jié)構(gòu)、電路等沒有詳細示出以避免不必要地模糊本發(fā)明的實施例。
盡管參考處理器描述了以下的實施例,但是其它實施例適用于其它類型的集成電路和邏輯設(shè)備。本發(fā)明的實施例的類似技術(shù)和教導(dǎo)可以應(yīng)用于可以受益于更高的流水線吞吐量和改進性能的其它類型的電路或半導(dǎo)體設(shè)備。本發(fā)明的實施例的教導(dǎo)適用于執(zhí)行數(shù)據(jù)操縱的任何處理器或機器。然而,本發(fā)明不限于執(zhí)行512位、256位、128位、64位、32位或16位數(shù)據(jù)操作的處理器或機器,并且可以應(yīng)用于執(zhí)行數(shù)據(jù)的操縱或管理的任何處理器和機器。此外,下文描述提供示例,并且附圖出于說明的目的示出了各種示例。然而,這些示例不應(yīng)被解釋為限制意義,因為它們僅旨在提供本發(fā)明的實施例的示例,而不是提供本發(fā)明的實施例的所有可能實現(xiàn)方式的窮盡列表。
盡管以下示例描述了在執(zhí)行單元和邏輯電路的上下文中的指令處理和分配,但是本發(fā)明的其它實施例可以通過存儲在機器可讀的有形介質(zhì)上的數(shù)據(jù)和/或指令來實現(xiàn),當(dāng)其由機器執(zhí)行時,使得機器執(zhí)行與本發(fā)明的至少一個實施例一致的功能。在一個實施例中,與本發(fā)明的實施例相關(guān)聯(lián)的功能體現(xiàn)在機器可執(zhí)行指令中。指令可以用于使得用指令編程的通用或?qū)S锰幚砥鲌?zhí)行本發(fā)明的步驟。本發(fā)明的實施例可以被提供為計算機程序產(chǎn)品或軟件,其可以包括其上存儲有指令的機器或計算機可讀介質(zhì),該指令可以用于對計算機(或其它電子設(shè)備)進行編程以執(zhí)行根據(jù)本發(fā)明的實施例的一個或多個操作??商娲?,本發(fā)明的實施例的步驟可以由包含用于執(zhí)行步驟的固定功能邏輯的特定硬件部件執(zhí)行,或者由編程的計算機部件和固定功能硬件部件的任何組合來執(zhí)行。
用于編程邏輯以執(zhí)行本發(fā)明的實施例的指令可以存儲在系統(tǒng)中的存儲器(諸如dram、高速緩存、閃存或其它存儲設(shè)備)內(nèi)。此外,指令可以經(jīng)由網(wǎng)絡(luò)或通過其它計算機可讀介質(zhì)來分發(fā)。因此,機器可讀介質(zhì)可以包括用于以機器(例如,計算機)可讀形式存儲或傳輸信息的任何機制,但不限于,軟盤、光盤、壓縮盤只讀存儲器(cd-rom)以及磁光盤、只讀存儲器、隨機存取存儲器(ram)、可擦除可編程只讀存儲器(eprom)、電可擦除可編程只讀存儲器(eeprom)、磁卡或光卡、閃存或用于經(jīng)由電、光、聲或其它形式的傳播信號(例如,載波、紅外信號、數(shù)字信號等)在互聯(lián)網(wǎng)上傳輸信息的有形的機器可讀存儲設(shè)備。因此,計算機可讀介質(zhì)包括適于以機器(例如,計算機)可讀的形式存儲或傳輸電子指令或信息的任何類型的有形機器可讀介質(zhì)。
設(shè)計可以經(jīng)歷從創(chuàng)建到模擬到制造的各個階段。表示設(shè)計的數(shù)據(jù)可以以多種方式表示設(shè)計。首先,如在模擬中有用的,可以使用硬件描述語言或另一功能描述語言來表示硬件。另外,可以在設(shè)計過程的某些階段產(chǎn)生具有邏輯和/或晶體管門的電路級模型。此外,大多數(shù)設(shè)計在某個階段達到表示硬件模型中的各種設(shè)備的物理布置的數(shù)據(jù)級別。在使用常規(guī)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是指定在用于產(chǎn)生集成電路的掩模的不同掩模層上存在或不存在各種特征的數(shù)據(jù)。在設(shè)計的任何表示中,數(shù)據(jù)可以以任何形式的機器可讀介質(zhì)存儲。諸如盤的存儲器或磁或光存儲設(shè)備可以是用于存儲經(jīng)由光或電波傳輸?shù)男畔⒌臋C器可讀介質(zhì),光波或電波經(jīng)調(diào)制或以其它方式生成以傳輸這種信息。當(dāng)發(fā)送指示或攜帶代碼或設(shè)計的電載波時,在執(zhí)行電信號的復(fù)制、緩沖或重傳的范圍內(nèi),進行新的復(fù)制。因此,通信提供商或網(wǎng)絡(luò)提供商可以在有形的機器可讀介質(zhì)上至少臨時地存儲體現(xiàn)本發(fā)明的實施例的技術(shù)的諸如編碼到載波中的信息的物品。
在現(xiàn)代處理器中,許多不同的執(zhí)行單元用于處理和執(zhí)行各種代碼和指令。并非所有指令都創(chuàng)建相等,因為有些指令更快完成,而其它指令可能需要多個時鐘周期才能完成。指令的吞吐量越快,處理器的整體性能越好。因此,盡可能快地執(zhí)行盡可能多的指令將是有利的。然而,存在具有更大復(fù)雜性并且在執(zhí)行時間和處理器資源方面需要更多的某些指令。例如,有浮點指令、加載/存儲操作、數(shù)據(jù)移動等。
隨著更多的計算機系統(tǒng)用于互聯(lián)網(wǎng)、文本和多媒體應(yīng)用,隨著時間的推移已經(jīng)引入了附加的處理器支持。在一個實施例中,指令集可以與一個或多個計算機架構(gòu)(包括數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處理以及外部輸入和輸出(i/o))相關(guān)聯(lián)。
在一個實施例中,指令集架構(gòu)(isa)可以由一個或多個微架構(gòu)實現(xiàn),其包括用于實現(xiàn)一個或多個指令集的處理器邏輯和電路。因此,具有不同微架構(gòu)的處理器可以共享公共指令集的至少一部分。例如,
在一個實施例中,指令可以包括一個或多個指令格式。在一個實施例中,指令格式可以指示各種字段(位數(shù)、位的位置等)以指定要執(zhí)行的操作和對其執(zhí)行該操作的操作數(shù),等。一些指令格式可以進一步被指令模板(或子格式)分解定義。例如,給定指令格式的指令模板可以被定義為具有指令格式字段的不同子集和/或被定義為具有不同解釋的給定字段。在一個實施例中,使用指令格式(并且如果被定義,則在該指令格式的指令模板中的給定指令模板中)來表達指令,并且指定或指示操作和將在其上操作該操作的操作數(shù)。
科學(xué)、金融、自動向量化通用目的、rms(識別、挖掘和合成)以及視覺和多媒體應(yīng)用(例如,2d/3d圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻操縱)可能需要對大量數(shù)據(jù)項執(zhí)行相同的操作。在一個實施例中,單指令多數(shù)據(jù)(simd)指的是使處理器對多個數(shù)據(jù)元素執(zhí)行操作的一種類型的指令。simd技術(shù)可以用在可以邏輯地將寄存器中的位劃分成多個固定大小或可變大小的數(shù)據(jù)元素的處理器中,每個數(shù)據(jù)元素表示單獨的值。例如,在一個實施例中,64位寄存器中的位可以被組織為包含四個單獨的16位數(shù)據(jù)元素的源操作數(shù),每個數(shù)據(jù)元素表示單獨的16位值。這種類型的數(shù)據(jù)可以被稱為“打包”數(shù)據(jù)類型或“向量”數(shù)據(jù)類型,并且該數(shù)據(jù)類型的操作數(shù)被稱為打包數(shù)據(jù)操作數(shù)或向量操作數(shù)。在一個實施例中,打包數(shù)據(jù)項或向量可以是存儲在單個寄存器內(nèi)的打包數(shù)據(jù)元素的序列,打包數(shù)據(jù)操作數(shù)或向量操作數(shù)可以是simd指令的源或目的操作數(shù)(或“打包數(shù)據(jù)指令”或“向量指令”)。在一個實施例中,simd指令指定要對兩個源向量操作數(shù)執(zhí)行的單個向量操作,以利用相同或不同數(shù)目的數(shù)據(jù)元素,并且以相同或不同的數(shù)據(jù)元素順序生成相同或不同大小的目的向量操作數(shù)(也稱為結(jié)果向量操作數(shù))。
simd技術(shù)(諸如具有包括x86、mmxtm、流式simd擴展(sse)、sse2、sse3、sse4.1和sse4.2指令的指令集的
在一個實施例中,目的和源寄存器/數(shù)據(jù)是表示相應(yīng)數(shù)據(jù)或操作的源和目的的通用術(shù)語。在一些實施例中,它們可以通過寄存器、存儲器或具有與所描繪的名稱或功能不同的名稱或功能的其它存儲區(qū)域來實現(xiàn)。例如,在一個實施例中,“dest1”可以是臨時存儲寄存器或其它存儲區(qū)域,而“src1”和“src2”可以是第一和第二源存儲寄存器或其它存儲區(qū)域等等。在其它實施例中,src和dest存儲區(qū)域中的兩個或更多個可以對應(yīng)于相同存儲區(qū)域(例如,simd寄存器)內(nèi)的不同數(shù)據(jù)存儲元件。在一個實施例中,源寄存器中的一個還可以通過例如將對第一和第二源數(shù)據(jù)執(zhí)行的操作的結(jié)果回寫到作為目的寄存器的兩個源寄存器中的一個來充當(dāng)目的寄存器。
圖1a是形成有處理器的示例性計算機系統(tǒng)的框圖,處理器包括執(zhí)行單元以執(zhí)行根據(jù)本發(fā)明的一個實施例的指令。根據(jù)本發(fā)明(例如在本文所描述的實施例中),系統(tǒng)100包括諸如處理器102的部件,以采用包括邏輯來執(zhí)行用于過程數(shù)據(jù)的算法的執(zhí)行單元。系統(tǒng)100代表基于可從intelcorporationofsantaclara,california獲得的
實施例不限于計算機系統(tǒng)。本發(fā)明的替代實施例可以用于其它設(shè)備、例如手持設(shè)備和嵌入式應(yīng)用程序。手持設(shè)備的一些示例包括蜂窩電話、互聯(lián)網(wǎng)協(xié)議設(shè)備、數(shù)字相機、個人數(shù)字助理(pda)和手持pc。嵌入式應(yīng)用程序可以包括微控制器、數(shù)字信號處理器(dsp)、芯片上系統(tǒng)、網(wǎng)絡(luò)計算機(netpc)、機頂盒、網(wǎng)絡(luò)集線器、廣域網(wǎng)(wan)交換機或可以執(zhí)行根據(jù)至少一個實施例的一個或多個指令的任何其它系統(tǒng)。
圖1a是形成有處理器102的計算機系統(tǒng)100的框圖,處理器102包括一個或多個執(zhí)行單元108以執(zhí)行算法來執(zhí)行根據(jù)本發(fā)明的一個實施例的至少一個指令。一個實施例可以在單處理器桌面或服務(wù)器系統(tǒng)的上下文中描述,但是替代實施例可以包括在多處理器系統(tǒng)中。系統(tǒng)100是“中心”系統(tǒng)架構(gòu)的示例。計算機系統(tǒng)100包括處理數(shù)據(jù)信號的處理器102。處理器102可以是復(fù)雜指令集計算機(cisc)微處理器、精簡指令集計算(risc)微處理器、超長指令字(vliw)微處理器、實現(xiàn)指令集組合的處理器或任何其它處理器設(shè)備(例如,諸如數(shù)字信號處理器)。處理器102耦合到處理器總線110,處理器總線110可以在處理器102與系統(tǒng)100中的其它部件之間傳輸數(shù)據(jù)信號。系統(tǒng)100的元件執(zhí)行其為熟悉本領(lǐng)域的技術(shù)人員所熟知的常規(guī)功能。
在一個實施例中,處理器102包括1級(l1)內(nèi)部高速緩存存儲器104。根據(jù)架構(gòu),處理器102可以具有單個內(nèi)部高速緩存或多級內(nèi)部高速緩存??商娲?,在另一實施例中,高速緩存存儲器可以駐留在處理器102外部。其它實施例還可以根據(jù)特定的實現(xiàn)方式和需要包括內(nèi)部和外部高速緩存的組合。寄存器文件106可以存儲不同類型的各種寄存器(包括整數(shù)寄存器、浮點寄存器、狀態(tài)寄存器和指令指針寄存器)的數(shù)據(jù)。
包括用于執(zhí)行整數(shù)和浮點運算的邏輯的執(zhí)行單元108也駐留在處理器102中。處理器102還包括存儲某些宏指令的微碼的微碼(ucode)rom。對于一個實施例,執(zhí)行單元108包括用于處理打包指令集109的邏輯。通過將打包指令集109包括在通用處理器102的指令集中以及用于執(zhí)行指令的相關(guān)電路中,可以使用通用處理器102中的打包數(shù)據(jù)來執(zhí)行許多多媒體應(yīng)用程序所使用的操作。因此,通過使用用于對打包數(shù)據(jù)執(zhí)行操作的處理器的數(shù)據(jù)總線的全寬度,可以更有效地加速和執(zhí)行許多多媒體應(yīng)用程序。這可以消除跨處理器的數(shù)據(jù)總線傳送較小單位的數(shù)據(jù)以對數(shù)據(jù)元素一次執(zhí)行一個或多個操作的需要。
執(zhí)行單元108的替代實施例也可以用在微控制器、嵌入式處理器、圖形設(shè)備、dsp和其它類型的邏輯電路中。系統(tǒng)100包括存儲器120。存儲器120可以是動態(tài)隨機存取存儲器(dram)設(shè)備、靜態(tài)隨機存取存儲器(sram)設(shè)備、閃存設(shè)備或其它存儲器設(shè)備。存儲器120可以存儲由可以由處理器102執(zhí)行的數(shù)據(jù)信號表示的指令和/或數(shù)據(jù)。
系統(tǒng)邏輯芯片116耦合到處理器總線110和存儲器120。在例示的實施例中的系統(tǒng)邏輯芯片116是存儲器控制器中心(mch)。處理器102可以經(jīng)由處理器總線110與mch116通信。mch116向存儲器120提供高帶寬存儲器路徑118,用于指令和數(shù)據(jù)存儲以及用于存儲圖形命令、數(shù)據(jù)和紋理。mch116用于在處理器102、存儲器120和系統(tǒng)100中的其它部件之間引導(dǎo)數(shù)據(jù)信號,并橋接處理器總線110、存儲器120和系統(tǒng)i/o122之間的數(shù)據(jù)信號。在一些實施例中,系統(tǒng)邏輯芯片116可以提供用于耦合到圖形控制器112的圖形端口。mch116通過存儲器接口118耦合到存儲器120。圖形卡112通過加速圖形端口(agp)互連114耦合到mch116。
系統(tǒng)100使用專有的中心接口總線122來將mch116耦合到i/o控制器中心(ich)130。ich130經(jīng)由本地i/o總線向一些i/o設(shè)備提供直接連接。本地i/o總線是用于將外圍設(shè)備連接到存儲器120、芯片組和處理器102的高速i/o總線。一些示例是音頻控制器、固件中心(閃速bios)128、無線收發(fā)機126、數(shù)據(jù)存儲設(shè)備124、包含用戶輸入和鍵盤接口的舊有i/o控制器、諸如通用串行總線(usb)的串行擴展端口以及網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲設(shè)備124可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、cd-rom設(shè)備、閃存設(shè)備或其它大容量存儲設(shè)備。
對于系統(tǒng)的另一實施例,根據(jù)一個實施例的指令可以與芯片上系統(tǒng)一起使用。芯片上系統(tǒng)的一個實施例包括處理器和存儲器。一個這樣的系統(tǒng)的存儲器是閃存。閃存可以位于與處理器和其它系統(tǒng)部件相同的管芯上。另外,諸如存儲器控制器或圖形控制器的其它邏輯塊也可以位于芯片上的系統(tǒng)上。
圖1b例示了實現(xiàn)本發(fā)明的一個實施例的原理的數(shù)據(jù)處理系統(tǒng)140。本領(lǐng)域技術(shù)人員將容易理解,本文描述的實施例可以在不脫離本發(fā)明的實施例的范圍的情況下與替代處理系統(tǒng)一起使用。
計算機系統(tǒng)140包括能夠執(zhí)行根據(jù)一個實施例的至少一個指令的處理核159。對于一個實施例,處理核159表示任何類型架構(gòu)(包括但不限于cisc、risc或vliw類型架構(gòu))的處理單元。處理核159還可以適于以一種或多種工藝技術(shù)制造,并且通過以足夠詳細的方式表示在機器可讀介質(zhì)上,可以適于促進該制造。
處理核159包括執(zhí)行單元142、一組寄存器文件145和解碼器144。處理核159還包括對于理解本發(fā)明的實施例不是必需的附加的電路(未示出)。執(zhí)行單元142用于執(zhí)行由處理核159接收的指令。除了執(zhí)行典型的處理器指令之外,執(zhí)行單元142可以執(zhí)行打包指令集143中的指令,以用于對打包數(shù)據(jù)格式執(zhí)行操作。打包指令集143包括用于執(zhí)行本發(fā)明的實施例的指令和其它打包指令。執(zhí)行單元142通過內(nèi)部總線耦合到寄存器文件145。寄存器文件145表示用于存儲包括數(shù)據(jù)的信息的處理核159上的存儲區(qū)域。如先前所描述,應(yīng)當(dāng)理解,用于存儲打包數(shù)據(jù)的存儲區(qū)域不是關(guān)鍵的。執(zhí)行單元142耦合到解碼器144。解碼器144用于將由處理核159接收的指令解碼為控制信號和/或微碼入口點。響應(yīng)于這些控制信號和/或微碼入口點,執(zhí)行單元142執(zhí)行適當(dāng)?shù)牟僮?。在一個實施例中,解碼器用于解釋指令的操作碼,其將指示應(yīng)當(dāng)對在指令內(nèi)指示的相應(yīng)數(shù)據(jù)執(zhí)行什么操作。
處理核159與總線141耦合,用于與各種其它系統(tǒng)設(shè)備通信,其可以包括但不限于例如同步動態(tài)隨機存取存儲器(sdram)控制器146、靜態(tài)隨機存取存儲器(sram)控制器147、突發(fā)閃存接口148、個人計算機存儲卡國際協(xié)會(pcmcia)/緊湊型閃存(cf)卡控制器149、液晶顯示器(lcd)控制器150、直接存儲器訪問(dma)控制器151和替代總線主接口152。在一個實施例中,數(shù)據(jù)處理系統(tǒng)140還可以包括用于經(jīng)由i/o總線153與各種i/o設(shè)備通信的i/o橋154。這樣的i/o設(shè)備可以包括但不限于例如通用異步接收機/發(fā)射機(uart)155、通用串行總線(usb)156、藍牙無線uart157和i/o擴展接口158。
數(shù)據(jù)處理系統(tǒng)140的一個實施例提供移動、網(wǎng)絡(luò)和/或無線通信以及能夠執(zhí)行包括文本串比較操作的simd操作的處理核159。處理核159可以用各種音頻、視頻、成像和通信算法編程,該算法包括諸如沃爾什-哈達瑪變換、快速傅里葉變換(fft)、離散余弦變換(dct)等離散變換及其相應(yīng)的逆變換;諸如顏色空間變換、視頻編碼運動估計或視頻解碼運動補償?shù)膲嚎s/解壓縮技術(shù);以及諸如脈沖編碼調(diào)制(pcm)的調(diào)制/解調(diào)(modem)功能。
圖1c例示了能夠執(zhí)行指令以提供simdsm3密碼散列函數(shù)的數(shù)據(jù)處理系統(tǒng)的另一替代實施例。根據(jù)一個替代實施例,數(shù)據(jù)處理系統(tǒng)160可以包括主處理器166、simd協(xié)處理器161、高速緩存存儲器167和輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可以可選擇地耦合到無線接口169。simd協(xié)處理器161能夠執(zhí)行包括根據(jù)一個實施例的指令的操作。處理核170可以適合于以一種或多種處理技術(shù)制造,并且通過以足夠詳細的方式表示在機器可讀介質(zhì)上,可以適合于促進包括處理核170的數(shù)據(jù)處理系統(tǒng)160的全部或一部分的制造。
對于一個實施例,simd協(xié)處理器161包括執(zhí)行單元162和一組寄存器文件164。主處理器166的一個實施例包括解碼器165以識別指令集163的指令,指令集163包括根據(jù)一個實施例的指令,該指令用于由執(zhí)行單元162執(zhí)行。對于替代實施例,simd協(xié)處理器161還包括解碼器165b的至少一部分以解碼指令集163的指令。處理核170還包括附加的電路(未示出),其對于理解本發(fā)明的實施例不是必要的。
在操作中,主處理器166執(zhí)行控制包括與高速緩存存儲器167和輸入/輸出系統(tǒng)168的交互的一般類型的數(shù)據(jù)處理操作的數(shù)據(jù)處理指令流。嵌入在數(shù)據(jù)處理指令流內(nèi)的是simd協(xié)處理器指令。主處理器166的解碼器165將這些simd協(xié)處理器指令識別為應(yīng)該由附接的simd協(xié)處理器161執(zhí)行的類型。因此,主處理器166在協(xié)處理器總線171上發(fā)出這些simd協(xié)處理器指令(或表示simd協(xié)處理器指令的控制信號),其中由任何附接的simd協(xié)處理器接收這些simd協(xié)處理器指令。在這種情況下,simd協(xié)處理器161將接受并執(zhí)行任何接收到的用于它的simd協(xié)處理器指令。
可以經(jīng)由無線接口169接收數(shù)據(jù),以便由simd協(xié)處理器指令進行處理。例如,可以以數(shù)字信號的形式接收語音通信,其可以由simd協(xié)處理器指令處理以重新生成表示語音通信的數(shù)字音頻樣本。對于另一個示例,可以以數(shù)字位流的形式接收壓縮的音頻和/或視頻,其可以由simd協(xié)處理器指令處理以重新生成數(shù)字音頻樣本和/或運動視頻幀。對于處理核170的一個實施例,主處理器166和simd協(xié)處理器161被集成到單個處理核170中,單個處理核170包括執(zhí)行單元162、一組寄存器文件164和解碼器165,以識別包括根據(jù)一個實施例的指令的指令集163的指令。
圖2是根據(jù)本發(fā)明的一個實施例的包括用于執(zhí)行指令的邏輯電路的處理器200的微架構(gòu)的框圖。在一些實施例中,根據(jù)一個實施例的指令可以被實現(xiàn)為對具有字節(jié)、字、雙字、四字等的大小的數(shù)據(jù)元素以及諸如單精度和雙精度整數(shù)和浮點數(shù)據(jù)類型的數(shù)據(jù)類型進行操作。在一個實施例中,有序前端201是處理器200的一部分,其獲取要執(zhí)行的指令并且準備它們以稍后在處理器流水線中使用。前端201可以包括幾個單元。在一個實施例中,指令預(yù)取器226從存儲器提取指令并將該指令饋送到指令解碼器228,指令解碼器228進而解碼或解釋該指令。例如,在一個實施例中,解碼器將接收到的指令解碼為機器可以執(zhí)行的稱為“微指令”或“微操作”(也稱為op或uop)的一個或多個操作。在其它實施例中,解碼器將指令解析為操作碼以及由微架構(gòu)使用以執(zhí)行根據(jù)一個實施例的操作的對應(yīng)的數(shù)據(jù)和控制字段。在一個實施例中,跟蹤高速緩存230獲取解碼的uop并將它們匯集成uop隊列234中的程序有序序列或跟蹤(trace)以供執(zhí)行。當(dāng)跟蹤高速緩存230遇到復(fù)雜指令時,微碼rom232提供完成操作所需的uop。
一些指令被轉(zhuǎn)換為單個微操作,而其它指令需要幾個微操作來完成完整的操作。在一個實施例中,如果需要多于四個的微操作來完成指令,則解碼器228訪問微碼rom232以執(zhí)行指令。對于一個實施例,指令可以被解碼為小數(shù)目的微操作,用于在指令解碼器228處進行處理。在另一個實施例中,如果需要多個微操作來完成操作,則可以將指令存儲在微碼rom232內(nèi)。跟蹤高速緩存230參考入口點可編程邏輯陣列(pla)來確定用于從微碼rom232讀取微碼序列以完成根據(jù)一個實施例的一個或多個指令的正確微指令指針。在微碼rom232完成用于指令的微操作的排序后,機器的前端201繼續(xù)從跟蹤緩存230提取微操作。
無序執(zhí)行引擎203是準備指令用于執(zhí)行的地方。無序執(zhí)行邏輯具有多個緩沖區(qū)以平滑和重新排序指令流,以便在指令流沿著流水線下行并且被調(diào)度用于執(zhí)行時優(yōu)化性能。分配器邏輯分配每個uop需要的機器緩沖區(qū)和資源以便執(zhí)行。寄存器重命名邏輯將邏輯寄存器重命名為寄存器文件中的條目。分配器還在指令調(diào)度器:存儲器調(diào)度器、快速調(diào)度器202、慢/通用浮點調(diào)度器204以及簡單浮點調(diào)度器206之前,為兩個uop隊列中的一個分配用于每個uop的條目,一個用于存儲器操作,一個用于非存儲器操作。uop調(diào)度器202、204、206基于其從屬的輸入寄存器操作數(shù)源的準備狀態(tài)和uop需要以完成其操作的執(zhí)行資源的可用性來確定uop何時準備好執(zhí)行。一個實施例的快速調(diào)度器202可以在主時鐘周期的每一半上調(diào)度,而其它調(diào)度器只能在每個主處理器時鐘周期調(diào)度一次。調(diào)度器對分派端口進行仲裁以調(diào)度uop用于執(zhí)行。
寄存器文件208、210位于調(diào)度器202、204、206和執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。存在單獨的寄存器文件208、210,分別用于整數(shù)和浮點運算。一個實施例的每個寄存器文件208、210還包括旁路網(wǎng)絡(luò),其可以將尚未寫入寄存器文件中的剛完成的結(jié)果繞過或轉(zhuǎn)發(fā)到新的從屬uop。整數(shù)寄存器文件208和浮點寄存器文件210也能夠與另一個進行數(shù)據(jù)通信。對于一個實施例,整數(shù)寄存器文件208被分成兩個單獨的寄存器文件,用于低階32位數(shù)據(jù)的一個寄存器文件和用于高階32位數(shù)據(jù)的第二寄存器文件。一個實施例的浮點寄存器文件210具有128位寬的條目,因為浮點指令通常具有寬度從64位到128位的操作數(shù)。
執(zhí)行塊211包含執(zhí)行單元212、214、216、218、220、222、224,其中實際執(zhí)行指令。該部分包括寄存器文件208、210,其存儲微指令需要執(zhí)行的整數(shù)和浮點數(shù)據(jù)操作數(shù)值。一個實施例的處理器200包括多個執(zhí)行單元:地址生成單元(agu)212、agu214、快速alu216、快速alu218、慢速alu220、浮點alu222、浮點移動單元224。對于一個實施例,浮點執(zhí)行塊222、224執(zhí)行浮點、mmx、simd和sse或其它操作。一個實施例的浮點alu222包括64位乘64位浮點除法器,以執(zhí)行除法、平方根和剩余微操作。對于本發(fā)明的實施例,涉及浮點值的指令可以用浮點硬件處理。在一個實施例中,alu操作轉(zhuǎn)到高速alu執(zhí)行單元216、218。一個實施例的快速alu216、218可以以半個時鐘周期的有效延遲執(zhí)行快速操作。對于一個實施例,最復(fù)雜的整數(shù)操作進入慢速alu220,因為慢速alu220包括用于長延遲類型的操作(諸如乘法器、移位、標志邏輯和分支處理)的整數(shù)執(zhí)行硬件。存儲器加載/存儲操作由agu212、214執(zhí)行。對于一個實施例,在對64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作的上下文中描述整數(shù)alu216、218、220。在替代實施例中,alu216、218、220可以被實現(xiàn)為支持包括16、32、128、256等的各種數(shù)據(jù)位。類似地,浮點單元222、224可以被實現(xiàn)為支持具有各種寬度的位的操作數(shù)的范圍。對于一個實施例,浮點單元222、224可以結(jié)合simd和多媒體指令對128位寬的打包數(shù)據(jù)操作數(shù)進行操作。
在一個實施例中,uop調(diào)度器202、204、206在父負載已經(jīng)完成執(zhí)行之前分派從屬操作。由于uop被推測性地調(diào)度并在處理器200中執(zhí)行,因此處理器200還包括處理存儲器丟失的邏輯。如果在數(shù)據(jù)高速緩存中數(shù)據(jù)加載丟失,則在流水線中可能存在飛行中的從屬操作,其已經(jīng)使調(diào)度器具有暫時不正確的數(shù)據(jù)。重放機制跟蹤并重新執(zhí)行使用不正確數(shù)據(jù)的指令。只有從屬操作需要被重放,并且獨立操作被允許完成。處理器的一個實施例的調(diào)度器和重放機制還被設(shè)計為捕獲提供simdsm3密碼散列函數(shù)的指令。
術(shù)語“寄存器”可以指用作識別操作數(shù)的指令的一部分的板載處理器存儲位置。換而言之,寄存器可以是從處理器的外部可用的(從程序員的角度)的那些寄存器。然而,實施例的寄存器的含義不應(yīng)限于特定類型的電路。相反,實施例的寄存器能夠存儲和提供數(shù)據(jù),并且執(zhí)行本文所描述的功能。本文描述的寄存器可以由處理器內(nèi)的電路使用任何數(shù)量的不同技術(shù)(諸如專用物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、專用和動態(tài)分配的物理寄存器的組合等)來實現(xiàn)。在一個實施例中,整數(shù)寄存器存儲三十二位整數(shù)數(shù)據(jù)。一個實施例的寄存器文件還包含用于打包數(shù)據(jù)的八個多媒體simd寄存器。對于下文的討論,寄存器被理解為被設(shè)計為在使用來自intelcorporationofsantaclara,california的mmx技術(shù)實現(xiàn)的微處理器中保存打包數(shù)據(jù)的數(shù)據(jù)寄存器(諸如64位寬的mmxtm寄存器(在某些情況下也稱為“mm”寄存器))。這些mmx寄存器以整數(shù)和浮點形式都可用,可以與伴隨simd和sse指令的打包數(shù)據(jù)元素一起操作。類似地,與sse2、sse3、sse4或更高(通常被稱為“ssex”)的技術(shù)相關(guān)的128位寬的xmm寄存器也可以用于保存這樣的打包數(shù)據(jù)操作數(shù)。在一個實施例中,在存儲打包數(shù)據(jù)和整數(shù)數(shù)據(jù)時,寄存器不需要在兩種數(shù)據(jù)類型之間進行區(qū)分。在一個實施例中,整數(shù)和浮點要么被包含在相同的寄存器文件中要么被包含在不同的寄存器文件中。此外,在一個實施例中,浮點和整數(shù)數(shù)據(jù)可以存儲在不同的寄存器或相同的寄存器中。
在以下附圖的示例中,描述了多個數(shù)據(jù)操作數(shù)。圖3a例示了根據(jù)本發(fā)明的一個實施例的多媒體寄存器中的各種打包數(shù)據(jù)類型表示。圖3a例示了用于128位寬操作數(shù)的打包字節(jié)310、打包字320和打包雙字(dword)330的數(shù)據(jù)類型。該示例的打包字節(jié)格式310為128位長并且包含十六個打包字節(jié)數(shù)據(jù)元素。一個字節(jié)在這里定義為8位數(shù)據(jù)。每個字節(jié)數(shù)據(jù)元素的信息存儲在字節(jié)0的位7到位0、字節(jié)1的位15到位8、字節(jié)2的位23到位16以及最后字節(jié)15的位120到位127。因此,在寄存器中使用所有可用位。這種存儲布置提高了處理器的存儲效率。同樣地,在訪問的十六個數(shù)據(jù)元素的情況下,現(xiàn)在可以并行地對十六個數(shù)據(jù)元素執(zhí)行一個操作。
通常,數(shù)據(jù)元素是存儲在單個寄存器或存儲器位置中的具有相同長度的其它數(shù)據(jù)元素的單獨條的數(shù)據(jù)。在與ssex技術(shù)有關(guān)的打包數(shù)據(jù)序列中,存儲在xmm寄存器中的數(shù)據(jù)元素的數(shù)量是128位除以單個數(shù)據(jù)元素的位長度。類似地,在與mmx和sse技術(shù)有關(guān)的打包數(shù)據(jù)序列中,存儲在mmx寄存器中的數(shù)據(jù)元素的數(shù)量是64位除以單個數(shù)據(jù)元素的位長度。雖然圖3a中例示的數(shù)據(jù)類型是128位長,本發(fā)明的實施例也可以用64位寬、256位寬、512位寬或其它大小的操作數(shù)來操作。該示例的打包字格式320為128位長并且包含八個打包字數(shù)據(jù)元素。每個打包字包含16位信息。圖3a的打包雙字格式330為128位長,并且包含四個打包雙字數(shù)據(jù)元素。每個打包雙字數(shù)據(jù)元素包含32位信息。打包的四字為128位長并且包含兩個打包的四字數(shù)據(jù)元素。
圖3b例示了替代的寄存器內(nèi)數(shù)據(jù)存儲格式。每個打包數(shù)據(jù)可以包括多于一個的獨立數(shù)據(jù)元素。例示了三種打包數(shù)據(jù)格式:打包半體341、打包單體342和打包雙體343。打包半體341、打包單體342和打包雙體343的一個實施例包含定點數(shù)據(jù)元素。對于替代實施例,打包半體341、打包單體342和打包雙體343中的一個或多個可以包含浮點數(shù)據(jù)元素。打包半體341的一個替代實施例為128位長,其包含8個16位數(shù)據(jù)元素。打包單體342的一個實施例為128位長,并包含4個32位數(shù)據(jù)元素。打包雙體343的一個實施例是128位長,并且包含2個64位數(shù)據(jù)元素。將理解,這樣的打包數(shù)據(jù)格式可以進一步擴展到其它寄存器長度(例如96位、160位、192位、224位、256位、512位或更多)。
圖3c例示了根據(jù)本發(fā)明的一個實施例的多媒體寄存器中的各種有符號和無符號打包數(shù)據(jù)類型表示。無符號打包字節(jié)表示344例示了在simd寄存器中存儲無符號打包字節(jié)。每個字節(jié)數(shù)據(jù)元素的信息存儲在字節(jié)零的位7到位0、字節(jié)1的位15到位8、字節(jié)2的位23到位16,等等,最后是字節(jié)15的位120到位127。因此,在寄存器中使用所有可用的位。這種存儲布置可以提高處理器的存儲效率。同樣地,在訪問16個數(shù)據(jù)元素的情況下,現(xiàn)在可以以并行方式對16個數(shù)據(jù)元素執(zhí)行一個操作。帶符號的打包字節(jié)表示345例示了帶符號的打包字節(jié)的存儲。注意,每個字節(jié)數(shù)據(jù)元素的第8位是符號指示符。無符號打包字表示346例示了字7到字0如何存儲在simd寄存器中。有符號的打包字表示347類似于無符號打包字寄存器內(nèi)表示346。注意,每個字數(shù)據(jù)元素的第16位是符號指示符。無符號打包雙字表示348示出如何存儲雙字數(shù)據(jù)元素。帶符號的打包雙字表示349類似于無符號打包雙字寄存器內(nèi)表示348。注意,必要的符號位是每個雙字數(shù)據(jù)元素的第32位。
圖3d是操作編碼(操作碼)格式360的一個實施例的描繪,其具有32位或更多位,以及對應(yīng)于在“
圖3e是具有40或更多位的另一替代操作編碼(操作碼)格式370的描繪。操作碼格式370對應(yīng)于操作碼格式360,并且包括可選的前綴字節(jié)378。根據(jù)一個實施例的指令可以由字段378、371和372中的一個或多個編碼。每個指令至多有兩個操作數(shù)位置可以由源操作數(shù)標識符374和375以及前綴字節(jié)378識別。對于一個實施例,前綴字節(jié)378可以用于標識32位或64位源和目的操作數(shù)。對于一個實施例,目的操作數(shù)標識符376與源操作數(shù)標識符374相同,而在其它實施例中,它們不同。對于替代實施例,目的操作數(shù)標識符376與源操作數(shù)標識符375相同,而在其它實施例中,它們不同。在一個實施例中,指令對由操作數(shù)標識符374和375標識的操作數(shù)中的一個或多個操作數(shù)進行操作,并且由操作數(shù)標識符374和375標識的一個或多個操作數(shù)被指令的結(jié)果覆寫,而在其它實施例中,由標識符374和375標識的操作數(shù)被寫入另一個寄存器中的另一個數(shù)據(jù)元素。操作碼格式360和370允許寄存器至寄存器,存儲器至寄存器,由存儲器對寄存器,由寄存器對寄存器,立即寄存器,寄存器至存儲器尋址,部分由mod字段363和373指定以及由可選的縮放索引基和位移字節(jié)指定。
接下來轉(zhuǎn)到圖3f,在一些替代實施例中,可以通過協(xié)處理器數(shù)據(jù)處理(cdp)指令執(zhí)行64位(或128位,或256位,或512位或更多)單指令多數(shù)據(jù)(simd)算術(shù)運算。操作編碼(操作碼)格式380描繪了具有cdp操作碼字段382和389的一個這樣的cdp指令。對于替代實施例,cdp指令的類型,操作可以由字段383、384、387和388中的一個或多個字段編碼。至多每個指令三個操作數(shù)位置(包括至多兩個源操作數(shù)標識符385和390以及一個目的操作數(shù)標識符386)可以被標識。協(xié)處理器的一個實施例可以對8、16、32和64位值進行操作。對于一個實施例,對整數(shù)數(shù)據(jù)元素執(zhí)行指令。在一些實施例中,可以使用條件字段381有條件地執(zhí)行指令。對于一些實施例,可以由字段383編碼源數(shù)據(jù)大小。在一些實施例中,可以在simd字段上進行零(z)、負(n)、進位(c)和溢出(v)檢測。對于一些指令,飽和的類型可以由字段384編碼。
接下來轉(zhuǎn)到圖3g,是對應(yīng)于在“
原始x86指令集提供1字節(jié)操作碼,其具有各種格式的地址音節(jié)和立即操作數(shù),其包含在從第一“操作碼”字節(jié)知道其存在的附加字節(jié)中。此外,還有一些字節(jié)值被保留為操作碼的修飾符(稱為前綴,因為它們必須放在指令之前)。當(dāng)256個操作碼字節(jié)(包括這些特殊前綴值)的原始調(diào)色板被耗盡時,單個字節(jié)被專用作為一組新的256個操作碼的轉(zhuǎn)義(escape)。隨著向量指令(例如,simd)被添加,生成對更多操作碼的需要,并且即使當(dāng)通過使用前綴擴展時,“兩字節(jié)”操作碼映射也是不足的。為此,在附加的映射中添加了新指令,其使用2字節(jié)加上可選前綴作為標識符。
此外,為了便于64位模式中的附加的寄存器,可以在前綴與操作碼(以及確定操作碼所需的任何轉(zhuǎn)義字節(jié))之間使用附加的前綴(稱為“rex”)。在一個實施例中,rex可以具有4個“有效載荷”位以指示在64位模式中使用附加的寄存器。在其它實施例中,它可以具有更少或多于4位。至少一個指令集(其通常對應(yīng)于格式360和/或格式370)的一般格式通常由以下式子示出:
[prefixes][rex]escape[escape2]opcodemodrm(etc.)
操作碼格式397對應(yīng)于操作碼格式370,并且包括可選的vex前綴字節(jié)391(在一個實施例中從十六進制c4開始)以替換大多數(shù)其它常用的傳統(tǒng)指令前綴字節(jié)和轉(zhuǎn)義碼。例如,下面例示了使用兩個字段來編碼指令的實施例,其可以在原始指令中存在第二轉(zhuǎn)義代碼時使用,或者當(dāng)需要使用rex字段中的附加位(例如,xb和w字段)時使用。在下文例示的實施例中,舊有的轉(zhuǎn)義由新的轉(zhuǎn)義值表示,舊有的前綴被完全壓縮為“有效載荷”字節(jié)的一部分,舊有的前綴被回收并且可供將來擴展使用,第二轉(zhuǎn)義代碼在“映射”字段中被壓縮,其中將來映射或特征空間可用,并且添加新特征(例如,增加的向量長度和附加的源寄存器指定符)。
根據(jù)一個實施例的指令可以由字段391和392中的一個或多個字段編碼。每個指令多達四個操作數(shù)位置可以由字段391結(jié)合源操作數(shù)標識符374和375并結(jié)合可選的縮放索引基(sib)標識符393、可選的位移標識符394以及可選的立即字節(jié)395來標識。對于一個實施例,vex前綴字節(jié)391可以用于標識32位或64位源和目的操作數(shù)和/128位或256位simd寄存器或存儲器操作數(shù)。對于一個實施例,由操作碼格式397提供的功能可以與操作碼格式370冗余,而在其它實施例中,它們是不同的。操作碼格式370和397允許寄存器至寄存器,存儲器至寄存器,由存儲器對寄存器,由寄存器對寄存器,立即寄存器,寄存器至存儲器尋址,部分由mod字段373指定并且由可選(sib)標識符393,可選的位移標識符394和可選的立即字節(jié)395指定。
接下來轉(zhuǎn)到圖3h,描繪了根據(jù)另一實施例的另一替代操作編碼(操作碼)格式398,以提供simdsm3密碼散列函數(shù)。操作碼格式398對應(yīng)于操作碼格式370和397,并且包括可選的evex前綴字節(jié)396(在一個實施例中從十六進制62開始),以替換大多數(shù)其它常用的舊有的指令前綴字節(jié)和轉(zhuǎn)義碼并提供附加功能。根據(jù)一個實施例的指令可以由字段396和392中的一個或多個字段編碼。每個指令多達四個操作數(shù)位置和掩碼可以由字段396結(jié)合源操作數(shù)標識符374和375標識,并結(jié)合可選縮放索引基(sib)標識符393、可選位移標識符394和可選立即字節(jié)395標識。對于一個實施例,evex前綴字節(jié)396可以用于標識32位或64位源和目的操作數(shù)和/或128位、256位或512位simd寄存器或存儲器操作數(shù)。對于一個實施例,由操作碼格式398提供的功能可以與操作碼格式370或397冗余,而在其它實施例中,它們是不同的。操作碼格式398允許寄存器至寄存器,存儲器至寄存器,由存儲器對寄存器,由寄存器對寄存器,立即寄存器,寄存器至存儲器尋址,帶有掩碼,部分由mod字段373指定并且由可選(sib)標識符393,可選的位移標識符394和可選的立即字節(jié)395指定。至少一個指令集(其通常對應(yīng)于格式360和/或格式370)的一般格式通常由以下式子示出:
evex1rxbmmmmmwvvvlppevex4opcodemodrm[sib][disp][imm]
對于一個實施例,根據(jù)evex格式398編碼的指令可以具有附加的“有效負載”位,其可以用于提供具有附加新特征(諸如,舉例來說用戶可配置的掩碼寄存器,或附加操作數(shù)或者從128位、256位或512位向量寄存器或從中選擇的更多寄存器等的選擇)的simdsm3密碼散列函數(shù)。
例如,在vex格式397可以用于利用隱式掩碼提供simdsm3密碼散列函數(shù)的情況下,evex格式398可以用于利用明確的用戶可配置閥掩碼來提供simdsm3密碼散列函數(shù)。另外,在vex格式397可以用于在128位或256位向量寄存器上提供simdsm3密碼散列函數(shù)的情況下,evex格式398可以用于在128位、256位、512位或更大(或更小)的向量寄存器上提供simdsm3密碼散列函數(shù)。
通過以下示例來說明提供simdsm3密碼散列函數(shù)的示例指令:
將理解,如上文的示例中的simdsm3密碼散列指令可以用于在諸如密碼協(xié)議和互聯(lián)網(wǎng)通信的應(yīng)用中提供simdsm3密碼散列函數(shù),以確保用于金融交易,電子商務(wù),電子郵件,軟件分發(fā),數(shù)據(jù)存儲,隨機數(shù)生成等的數(shù)據(jù)完整性,數(shù)字簽名,身份驗證,消息內(nèi)容認證和消息起源認證。
還將理解,提供執(zhí)行散列圈的預(yù)指定數(shù)量的迭代的simdsm3密碼散列指令可以與其它simd處理和標量處理并行地在處理器流水線中實現(xiàn)散列算法(例如根據(jù)特定散列算法實現(xiàn)的消息“組塊”的預(yù)處理和準備預(yù)旋轉(zhuǎn)的圈常數(shù)(例如,tj<<<j))的simd執(zhí)行。也就是說,在散列圈的單次迭代可能具有三個周期(例如,每個圈3個周期)的流水線延遲的情況下,通過將結(jié)果繞回到流水線,兩次迭代可以具有僅四個周期的延遲(例如,每個圈2個周期),四次迭代可具有僅六個周期的延遲(例如每個圈1.5個周期)。在具有四個或六個周期的那些流水線延遲期間,可以與散列的圈片并行或并發(fā)地執(zhí)行其它有用的處理。因此,為simd安全散列算法圈片提供指令,其具有多次迭代(例如每片兩次、四次或八次迭代)但小于散列算法的圈迭代的總數(shù),允許在超標量執(zhí)行流水線和/或無序處理器流水線中并發(fā)執(zhí)行其它指令,從而顯著提高處理吞吐量,以及利用與通用處理器相關(guān)聯(lián)的制造工藝改進的頻率縮放。
一些實施例包括處理器,其包括解碼器以解碼用于simdsm3消息擴展的指令,指定第一和第二源數(shù)據(jù)操作數(shù)集合以及擴展范圍。響應(yīng)于該指令,處理器執(zhí)行單元根據(jù)由指定的擴展范圍確定的第一和第二源數(shù)據(jù)操作數(shù)集合執(zhí)行多個sm3消息擴展,并將結(jié)果存儲到simd目的寄存器中。一些實施例還根據(jù)中間散列值輸入、源數(shù)據(jù)集和圈常數(shù)集(例如,具有一個或多個預(yù)先旋轉(zhuǎn)的常數(shù)tj<<<j)執(zhí)行散列算法的simdsm3散列圈片部分的指令。處理器執(zhí)行單元對源數(shù)據(jù)集執(zhí)行一組sm3散列圈迭代,應(yīng)用中間散列值輸入和圈常數(shù)集合,并將新的散列值結(jié)果存儲在simd目的寄存器中。
對于提供sm3密碼散列函數(shù)的simd指令和處理邏輯的一些實施例,sm3消息擴展和sm3密碼散列圈可以在現(xiàn)代微處理器的標準執(zhí)行流水線中并發(fā)和/或并行地在迭代片中執(zhí)行。將理解,可以方便地選擇每片的迭代次數(shù),以便通過與執(zhí)行sm3消息擴展的片和/或sm3密碼散列圈的片相關(guān)聯(lián)的延遲來為其它并發(fā)飛行指令提供充分的覆蓋。因此,還將理解,提供用于simdsm3密碼散列算法圈片的指令的執(zhí)行,其具有多次迭代(例如每片兩次、四次或八次迭代),但小于散列算法的圈迭代總數(shù),允許在超標量執(zhí)行流水線中和/或在無序處理器流水線中并發(fā)執(zhí)行這樣的其它所需指令(例如,sm3消息擴展指令),從而顯著地提高大量應(yīng)用的處理吞吐量,以及利用與通用處理器相關(guān)聯(lián)的制造工藝改進的頻率的縮放。
圖4a是例示根據(jù)本發(fā)明的至少一個實施例的有序流水線和寄存器重命名級、無序發(fā)布/執(zhí)行流水線的框圖。圖4b是例示根據(jù)本發(fā)明的至少一個實施例的包括在處理器中的有序架構(gòu)核和寄存器重命名邏輯、無序發(fā)布/執(zhí)行邏輯的框圖。圖4a中的實線框例示了有序流水線、而虛線框例示了寄存器重命名、無序發(fā)布/執(zhí)行流水線。類似地,圖4b中的實線框例示了有序架構(gòu)邏輯,而虛線框例示了寄存器重命名邏輯和無序發(fā)布/執(zhí)行邏輯。
在圖4a中,處理器流水線400包括提取級402、長度解碼級404、解碼級406、分配級408、重命名級410、調(diào)度(也稱為分派或發(fā)布)級412、寄存器讀取/存儲器讀取級414、執(zhí)行級416、寫回/存儲器寫入級418、異常處理級422和提交級424。
在圖4b中,箭頭表示兩個或更多個單元之間的耦合,并且箭頭的方向表示這些單元之間的數(shù)據(jù)流的方向。圖4b示出了處理器核490,其包括耦合到執(zhí)行引擎單元450的前端單元430,并且前端單元430和執(zhí)行引擎單元450都耦合到存儲器單元470。
核490可以是精簡指令集計算(risc)核、復(fù)雜指令集計算(cisc)核、超長指令字(vliw)核或混合或替代核類型。作為又一選擇,核490可以是專用核(諸如,舉例來說,網(wǎng)絡(luò)或通信核、壓縮引擎、圖形核等)。
前端單元430包括耦合到指令高速緩存單元434的分支預(yù)測單元432,指令高速緩存單元434耦合到指令轉(zhuǎn)譯后備緩沖器(tlb)436,指令轉(zhuǎn)譯后備緩沖器436耦合到指令提取單元438,指令提取單元438耦合到解碼單元440。解碼單元或解碼器可以對指令進行解碼,并且生成從原始指令解碼或以其它方式反應(yīng)原始指令或從原始指令導(dǎo)出的一個或多個微操作、微碼入口點、微指令、其它指令或其它控制信號作為輸出??梢允褂酶鞣N不同的機制來實現(xiàn)解碼器。適當(dāng)機制的示例包括但不限于查找表、硬件實現(xiàn)、可編程邏輯陣列(pla)、微碼只讀存儲器(rom)等。指令高速緩存單元434還耦合到存儲器單元470中的2級(l2)高速緩存單元476。解碼單元440耦合到執(zhí)行引擎單元450中的重命名/分配器單元452。
執(zhí)行引擎單元450包括耦合到引退單元454的重命名/分配器單元452和一組一個或多個調(diào)度器單元456。調(diào)度器單元456表示任意數(shù)量的不同調(diào)度器(包括保留站、中央指令窗口等)。調(diào)度器單元456耦合到物理寄存器文件單元458。每個物理寄存器文件單元458表示一個或多個物理寄存器文件,其中不同的物理寄存器文件存儲一個或多個不同的數(shù)據(jù)類型(諸如標量整數(shù)、標量浮點、打包整數(shù)、打包浮點、向量整數(shù)、向量浮點等)、狀態(tài)(例如,作為待執(zhí)行的下一指令的地址的指令指針)等。物理寄存器文件單元458被引退單元454重疊,以例示可以實施寄存器重命名和無序執(zhí)行的各種方式(例如,使用重排序緩沖器和引退寄存器文件;使用將來文件、歷史緩沖器和引退寄存器文件;使用寄存器映射和寄存器池等等)。通常,架構(gòu)寄存器從處理器的外部或從程序員的角度來看是可見的。寄存器不限于任何已知的特定類型的電路。各種不同類型的寄存器是適當(dāng)?shù)?,只要它們能夠存儲和提供如本文所描述的?shù)據(jù)。適當(dāng)?shù)募拇嫫鞯氖纠ǖ幌抻趯S梦锢砑拇嫫?、使用寄存器重命名的動態(tài)分配的物理寄存器、專用和動態(tài)分配的物理寄存器的組合等。引退單元454和物理寄存器文件單元458耦合到執(zhí)行群集460。執(zhí)行群集460包括一個或多個執(zhí)行單元462的集合和一個或多個存儲器訪問單元464的集合。執(zhí)行單元462可以執(zhí)行各種操作(例如,移位、加法、減法、乘法)和對各種類型的數(shù)據(jù)(例如,標量浮點、打包整數(shù)、打包浮點、向量整數(shù)、向量浮點)執(zhí)行。盡管一些實施例可以包括專用于特定功能或功能組的多個執(zhí)行單元,但是其它實施例可以僅包括一個執(zhí)行單元或全部執(zhí)行所有功能的多個執(zhí)行單元。調(diào)度器單元456、物理寄存器文件單元458和執(zhí)行群集460被示為可能是多個,因為某些實施例為某些類型的數(shù)據(jù)/操作創(chuàng)建獨立的流水線(例如,標量整數(shù)流水線、標量浮點/打包整數(shù)/打包浮點/向量整數(shù)/向量浮點流水線和/或存儲器訪問流水線,其每個具有其自己的調(diào)度器單元、物理寄存器文件單元和/或執(zhí)行群集,并且在單獨的存儲器訪問流水線的情況下,實現(xiàn)某些實施例,其中只有該流水線的執(zhí)行群集具有存儲器訪問單元464)。還應(yīng)當(dāng)理解,在使用單獨的流水線的情況下,這些流水線中的一個或多個可以是無序的發(fā)布/執(zhí)行,其余的是有序的。
存儲器存取單元464的集合耦合到存儲器單元470,存儲器單元470包括數(shù)據(jù)tlb單元472,數(shù)據(jù)tlb單元472耦合到數(shù)據(jù)高速緩存單元474,數(shù)據(jù)高速緩存單元474耦合到2級(l2)高速緩存單元476。在一個示范性實施例中,存儲器存取單元464可以包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,它們中的每一個耦合到存儲器單元470中的數(shù)據(jù)tlb單元472。l2高速緩存單元476耦合到一個或多個其它級別的高速緩存并最終耦合到主存儲器。
作為示例,示例性寄存器重命名、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線400:1)指令提取438執(zhí)行提取和長度解碼級402和404;2)解碼單元440執(zhí)行解碼級406;3)重命名/分配器單元452執(zhí)行分配級408和重命名級410;4)調(diào)度器單元456執(zhí)行調(diào)度級412;5)物理寄存器文件單元458和存儲器單元470執(zhí)行寄存器讀取/存儲器讀取級414;執(zhí)行群集460執(zhí)行執(zhí)行級416;6)存儲器單元470和物理寄存器文件單元458執(zhí)行寫回/存儲器寫入級418;7)在異常處理級422中可以涉及各種單元;以及8)引退單元454和物理寄存器文件單元458執(zhí)行提交級424。
核490可以支持一個或多個指令集(例如,x86指令集(具有已經(jīng)用較新版本添加的一些擴展);mipstechnologiesofsunnyvale,ca的mips指令集;armholdingsofsunnyvale,ca的arm指令集(具有可選的諸如neon的附加擴展))。
應(yīng)當(dāng)理解,核可以支持多線程(執(zhí)行兩個或更多個并行的操作或線程集合),并且可以以各種方式這樣做,包括時間分片多線程、同步多線程(其中單個物理核提供物理核同步多線程的每個線程的邏輯核)或其組合(例如,時間分片提取和解碼以及此后的同步多線程(例如在
盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但是應(yīng)當(dāng)理解,可以在有序架構(gòu)中使用寄存器重命名。盡管處理器的例示實施例還包括單獨的指令和數(shù)據(jù)高速緩存單元434/474以及共享l2高速緩存單元476,但是替代實施例可以具有用于指令和數(shù)據(jù)的單個內(nèi)部高速緩存(諸如,舉例來說1級(l1)內(nèi)部高速緩存或多級內(nèi)部高速緩存)。在一些實施例中,系統(tǒng)可以包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合??商娲?,所有高速緩存可以在核和/或處理器外部。
圖5是根據(jù)本發(fā)明的實施例的具有集成存儲器控制器和圖形的單核處理器和多核處理器500的框圖。圖5中的實線框例示了處理器500,其具有單個核502a、系統(tǒng)代理510、一個或多個總線控制器單元516的集合,而虛線框的可選添加例示了替代處理器500,其具有多個核502a-n、系統(tǒng)代理單元510中的一個或多個集成存儲器控制器單元514的集合以及集成圖形邏輯508。
存儲器層級包括核內(nèi)的一個或多個級別的高速緩存、一組或一個或多個共享高速緩存單元506以及耦合到該組集成存儲器控制器單元514的外部存儲器(未示出)。該組共享高速緩存單元506可以包括一個或多個中級高速緩存(諸如2級(l2)、3級(l3)、4級(l4)或其它級別的高速緩存、最后級高速緩存(llc)和/或其組合)。雖然在一個實施例中,基于環(huán)的互連單元512互連集成圖形邏輯508、共享高速緩存單元506的集合和系統(tǒng)代理單元510,但是替代實施例可以使用任意數(shù)量的公知技術(shù)來互連這些單元。
在一些實施例中,一個或多個核502a-n能夠多線程。系統(tǒng)代理510包括協(xié)調(diào)和操作核502a-n的那些部件。系統(tǒng)代理單元510可以包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括用于調(diào)節(jié)核502a-n和集成圖形邏輯508的功率狀態(tài)所需的邏輯和部件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
核502a-n在架構(gòu)和/或指令集方面可以是同構(gòu)的或異構(gòu)的。例如,核502a-n中的一些可以是有序的,而其它是無序的。作為另一示例,核502a-n中的兩個或更多個能夠執(zhí)行相同的指令集,而其它僅能夠執(zhí)行該指令集的子集或不同的指令集。
處理器可以是通用處理器(諸如可從intelcorporation,ofsantaclara,calif.獲得的coretmi3、i5、i7、2duo和quad、xeontm、itaniumtm、xscaletm或strongarmtm處理器,或者,處理器可以來自諸如armholdings,ltd,mips等的另一公司)。處理器可以是專用處理器(諸如,舉例來說,網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、協(xié)處理器、嵌入式處理器等)。處理器可以在一個或多個芯片上實現(xiàn)。處理器500可以是使用多種處理技術(shù)(諸如,舉例來說,bicmos、cmos或nmos)中的任何技術(shù)的一個或多個襯底的一部分和/或可以在一個或多個襯底上實現(xiàn)。
圖6-8是適于包括處理器500的示例性系統(tǒng),而圖9是可以包括一個或多個核502的示例性芯片上系統(tǒng)(soc)。本領(lǐng)域已知的其它系統(tǒng)設(shè)計和配置對于膝上型計算機、臺式計算機、手持pc、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù)字信號處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持式設(shè)備和各種其他電子設(shè)備也是適當(dāng)?shù)摹R话銇碚f,能夠并入如本文所公開的處理器和/或其它執(zhí)行邏輯的各種各樣的系統(tǒng)或電子設(shè)備通常是適當(dāng)?shù)摹?/p>
現(xiàn)在參考圖6,示出了根據(jù)本發(fā)明的一個實施例的系統(tǒng)600的框圖。系統(tǒng)600可以包括耦合到圖形存儲器控制器中心(gmch)620的一個或多個處理器610、615。附加處理器615的可選性質(zhì)在圖6中用虛線表示。
每個處理器610、615可以是處理器500的某一版本。然而,應(yīng)當(dāng)注意,集成圖形邏輯和集成存儲器控制單元不可能存在于處理器610、615中。圖6例示了gmch620可以耦合到存儲器640,其可以是例如動態(tài)隨機存取存儲器(dram)。對于至少一個實施例,dram可以與非易失性高速緩存相關(guān)聯(lián)。
gmch620可以是芯片組或芯片組的一部分。gmch620可以與處理器610、615通信并且控制處理器610、615與存儲器640之間的交互。gmch620還可以作為處理器610、615與系統(tǒng)600的其它元件之間的加速總線接口。對于至少一個實施例,gmch620經(jīng)由多分支總線(例如前端總線(fsb)695)與處理器610、615通信。
此外,gmch620耦合到顯示器645(例如平板顯示器)。gmch620可以包括集成圖形加速器。gmch620還耦合到輸入/輸出(i/o)控制器中心(ich)650,其可用于將各種外圍設(shè)備耦合到系統(tǒng)600。例如在圖6的實施例中示出的是外部圖形設(shè)備660,其可以是與另一外圍設(shè)備670一起耦合到ich650的離散圖形設(shè)備。
可替代地,附加或不同的處理器也可以存在于系統(tǒng)600中。例如,附加處理器615可以包括與處理器610相同的附加處理器、與處理器610異構(gòu)或不對稱的附加處理器、加速器(諸如圖形加速器或數(shù)字信號處理(dsp)單元)、現(xiàn)場可編程門陣列或任何其它處理器。在包括架構(gòu)、微架構(gòu)、熱、功率消耗特性等的優(yōu)點的度量譜方面,在物理資源610、615之間可以存在各種差異。這些差異可以有效地表現(xiàn)為處理器610、615之間的不對稱和異質(zhì)性。對于至少一個實施例,各種處理器610、615可以駐留在相同的管芯封裝中。
現(xiàn)在參考圖7,示出了根據(jù)本發(fā)明的實施例的第二系統(tǒng)700的框圖。如圖7所示,多處理器系統(tǒng)700是點對點互連系統(tǒng),并且包括經(jīng)由點對點互連750耦合的第一處理器770和第二處理器780。處理器770和處理器780中的每一個處理器可以是處理器500的一些版本,作為處理器610、615中的一個或多個。
雖然僅示出了兩個處理器770、780,但是應(yīng)當(dāng)理解,本發(fā)明的范圍不限于此。在其它的實施例中,一個或多個附加的處理器可以存在于給定的處理器中。
處理器770和780被示為分別包括集成存儲器控制器單元772和782。處理器770還包括作為其總線控制器單元的一部分的點對點(p-p)接口776和778;類似地,第二處理器780包括p-p接口786和788。處理器770、780可以使用p-p接口電路778、788經(jīng)由點對點(p-p)接口750交換信息。如圖7所示,imc772和782將處理器耦合到相應(yīng)的存儲器,即存儲器732和存儲器734,其可以是本地附接到相應(yīng)處理器的主存儲器的部分。
處理器770、780可以各自使用點對點接口電路776、794、786、798經(jīng)由獨自的p-p接口752、754與芯片組790交換信息。芯片組790還可以經(jīng)由高性能圖形接口739與高性能圖形電路738交換信息。
共享高速緩存(未示出)可以被包括在處理器中或者在兩個處理器的外部,但是仍然經(jīng)由p-p互連與處理器連接,使得如果處理器被置于低功率模式,則一個或兩個處理器的本地高速緩存信息被存儲在該共享高速緩存中。
芯片組790可以經(jīng)由接口796耦合到第一總線716。在一個實施例中,第一總線716可以是外圍部件互連(pci)總線或諸如pciexpress總線或另一第三代i/o互連總線的總線,盡管本發(fā)明的范圍不限于此。
如圖7所示,各種i/o設(shè)備714可以與總線橋718一起耦合到第一總線716,總線橋718將第一總線716耦合到第二總線720。在一個實施例中,第二總線720可以是低引腳數(shù)(lpc)總線。在一個實施例中,各種設(shè)備可以耦合到第二總線720,該各種設(shè)備包括例如鍵盤和/或鼠標722、通信設(shè)備727和諸如磁盤驅(qū)動器或其他大容量存儲設(shè)備的存儲單元728,存儲單元728可以包括指令/代碼和數(shù)據(jù)730。此外,音頻i/o724可以耦合到第二總線720。注意,其它架構(gòu)是可能的。例如,代替圖7的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多分支總線或其它這樣的架構(gòu)。
現(xiàn)在參考圖8,示出了根據(jù)本發(fā)明的實施例的第三系統(tǒng)800的框圖。圖7和圖8中的相似元件具有相似的附圖標記,并且圖7的某些方面已從圖8中省略,以避免模糊圖8的其它方面。
圖8例示了處理器870、880可以分別包括集成存儲器和i/o控制邏輯(“cl”)872和882。對于至少一個實施例,cl872、882可以包括諸如上文結(jié)合圖5和圖7所描述的集成存儲器控制器單元。此外,cl872、882還可以包括i/o控制邏輯。圖8例示了不僅存儲器832、834耦合到cl872、882,而且i/o設(shè)備814也耦合到控制邏輯872、882。舊有i/o設(shè)備815耦合到芯片組890。
現(xiàn)在參考圖9,示出了根據(jù)本發(fā)明的實施例的soc900的框圖。圖5中的類似元件具有相似的附圖標記。此外,虛線框是更先進的soc上的可選特征。在圖9中,互連單元902耦合到:應(yīng)用處理器910,其包括一個或多個核502a-n的集合和共享高速緩存單元506;系統(tǒng)代理單元510;總線控制器單元516;集成存儲器控制器單元514;一個或多個媒體處理器920的集合,其可以包括集成圖形邏輯508、用于提供靜止和/或視頻攝像機功能的圖像處理器924、用于提供硬件音頻加速的音頻處理器926以及用于提供視頻編碼/解碼加速的視頻處理器928;靜態(tài)隨機存取存儲器(sram)單元930;直接存儲器存取(dma)單元932;以及用于耦合到一個或多個外部顯示器的顯示單元940。
圖10例示了根據(jù)一個實施例的包含中央處理單元(cpu)和圖形處理單元(gpu)的處理器,其可以執(zhí)行至少一個指令。在一個實施例中,根據(jù)至少一個實施例的執(zhí)行操作的指令可以由cpu執(zhí)行。在另一個實施例中,指令可以由gpu執(zhí)行。在又一個實施例中,可以通過由gpu和cpu執(zhí)行的操作的組合來執(zhí)行指令。例如,在一個實施例中,可以接收和解碼根據(jù)一個實施例的指令以在gpu上執(zhí)行。然而,經(jīng)解碼的指令內(nèi)的一個或多個操作可以由cpu執(zhí)行,并且結(jié)果返回到gpu以用于指令的最后引退。相反,在一些實施例中,cpu可以作為主處理器,并且gpu可以作為協(xié)處理器。
在一些實施例中,受益于高度并行的吞吐量處理器的指令可以由gpu執(zhí)行,而受益于處理器(其受益于深度流水線架構(gòu))的性能的指令可以由cpu執(zhí)行。例如,圖形、科學(xué)應(yīng)用、金融應(yīng)用和其它并行工作負載可以受益于gpu的性能并且相應(yīng)地執(zhí)行,而諸如操作系統(tǒng)內(nèi)核或應(yīng)用代碼的更多順序應(yīng)用程序可以更好地適合于cpu。
在圖10中,處理器1000包括cpu1005、gpu1010、圖像處理器1015、視頻處理器1020、usb控制器1025、uart控制器1030、spi/sdio控制器1035、顯示設(shè)備1040、高清晰度多媒體接口(hdmi)控制器1045、mipi控制器1050、閃存控制器1055、雙數(shù)據(jù)速率(ddr)控制器1060、安全引擎1065和i2s/i2c(集成芯片間聲音/集成電路間)接口1070。其它邏輯和電路可以包括在圖10的處理器中,該處理器包括更多的cpu或gpu和其它外圍接口控制器。
至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質(zhì)上的代表性數(shù)據(jù)來實現(xiàn),該代表性數(shù)據(jù)表示處理器內(nèi)的各種邏輯,當(dāng)由機器讀取時,該代表性數(shù)據(jù)使機器制造邏輯以執(zhí)行本文所描述的技術(shù)。稱為“ip核”的這種表示可以存儲在有形的機器可讀介質(zhì)(“磁帶”)上,并提供給各種客戶或制造設(shè)施以加載到實際制作邏輯或處理器的制造機器中。例如,諸如由armholdings,ltd開發(fā)的cortextm系列處理器和由中國科學(xué)院計算技術(shù)研究所(ict)開發(fā)的loongsonip核等ip核可以被許可或出售給各種客戶或被許可商(諸如德州儀器、高通、蘋果或三星),并在這些客戶或被許可商生產(chǎn)的處理器中實現(xiàn)。
圖11示出了根據(jù)一個實施例的ip核的開發(fā)的框圖。存儲設(shè)備1130包括仿真軟件1120和/或硬件或軟件模型1110。在一個實施例中,表示ip核設(shè)計的數(shù)據(jù)可以經(jīng)由存儲器1140(例如硬盤)、有線連接(例如,互聯(lián)網(wǎng))1150或無線連接1160提供給存儲設(shè)備1130。隨后,由仿真工具和模型生成的ip核信息可以被傳送到制造設(shè)施,在那里ip核可以由第三方制造以執(zhí)行根據(jù)至少一個實施例的至少一個指令。
在一些實施例中,一個或多個指令可以對應(yīng)于第一類型或架構(gòu)(例如,x86),并且可以在不同類型或架構(gòu)(例如,arm)的處理器上被轉(zhuǎn)換或仿真。因此,根據(jù)一個實施例,可以在任何處理器或處理器類型(包括arm、x86、mips、gpu或其它處理器類型或架構(gòu))上執(zhí)行指令。
圖12例示了根據(jù)一個實施例如何由不同類型的處理器仿真第一類型的指令。在圖12中,程序1205包含可以執(zhí)行與根據(jù)一個實施例的指令相同或基本上相同的功能的一些指令。然而,程序1205的指令可以是與處理器1215不同或不兼容的類型和/或格式,意味著程序1205中的類型的指令不能由處理器1215原生地執(zhí)行。然而,在仿真邏輯1210的幫助下,程序1205的指令被轉(zhuǎn)換為能夠由處理器1215原生地執(zhí)行的指令。在一個實施例中,仿真邏輯體現(xiàn)在硬件中。在另一個實施例中,仿真邏輯體現(xiàn)在包含軟件的有形機器可讀介質(zhì)中,以將程序1205中的類型的指令轉(zhuǎn)換成可由處理器1215原生地執(zhí)行的類型。在其它實施例中,仿真邏輯是固定功能或可編程硬件以及存儲在有形的機器可讀介質(zhì)上的程序的組合。在一個實施例中,處理器包含仿真邏輯,而在其它實施例中,仿真邏輯存在于處理器之外并且由第三方提供。在一個實施例中,處理器能夠通過執(zhí)行包含在處理器中或與處理器相關(guān)聯(lián)的微碼或固件來加載體現(xiàn)在包含軟件的有形的機器可讀介質(zhì)中的仿真邏輯。
圖13是根據(jù)本發(fā)明的實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換為目標指令集中的二進制指令的框圖。在例示的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,盡管指令轉(zhuǎn)換器替代地可以以軟件、固件、硬件或其各種組合來實現(xiàn)。圖13示出了高級語言1302中的程序可以使用x86編譯器1304編譯以生成x86二進制代碼1306,其可以由具有至少一個x86指令集核1316的處理器原生地執(zhí)行。具有至少一個x86指令集核1316的處理器表示可以通過兼容地執(zhí)行或以其它方式處理(1)intelx86指令集核的指令集的實質(zhì)部分或(2)目標代碼版本的應(yīng)用程序或目標為在具有至少一個x86指令集核的intel處理器上運行的其它軟件,來執(zhí)行與具有至少一個x86指令集核的intel處理器基本上相同的功能的任何處理器,以便實現(xiàn)與具有至少一個x86指令集核的intel處理器基本相同的結(jié)果。x86編譯器1304表示編譯器,其適用于產(chǎn)生可以在具有或不具有附加鏈接處理的情況下在具有至少一個x86指令集核1316的處理器上執(zhí)行的x86二進制代碼1306(例如,目標代碼)。類似地,圖13示出了高級語言1302中的程序可以使用替代指令集編譯器1308來編譯,以生成替代指令集二進制代碼1310,其可以由沒有至少一個x86指令集核1314的處理器原生地執(zhí)行(例如,具有執(zhí)行mipstechnologiesofsunnyvale,ca的mips指令集和/或執(zhí)行armholdingsofsunnyvale,ca的arm指令集的核的處理器)。指令轉(zhuǎn)換器1312用于將x86二進制代碼1306轉(zhuǎn)換為可以由沒有x86指令集核1314的處理器原生地執(zhí)行的代碼。該轉(zhuǎn)換的代碼不太可能與替代指令集二進制代碼1310相同,因為難以制作能夠進行這種操作的指令轉(zhuǎn)換器;然而,轉(zhuǎn)換的代碼將完成一般操作并且由來自替代指令集的指令組成。因此,指令轉(zhuǎn)換器1312表示通過仿真、模擬或任何其它過程,允許處理器或其它電子設(shè)備(其不具有x86指令集處理器或核)執(zhí)行x86二進制代碼1306的軟件、固件、硬件或其組合。
圖14a例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置1401的一個實施例的圖。裝置1401的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如執(zhí)行級416)或者核490的一部分(例如執(zhí)行單元462)。裝置1401的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法圈片的指令,該圈片具有的迭代次數(shù)小于散列算法的圈迭代的總數(shù)(例如,兩次或四次迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定中間散列值輸入操作數(shù)1410、源數(shù)據(jù)操作數(shù)1415集合和散列算法的圈片部分(例如作為初始圈j,和/或迭代次數(shù)i,在可選的立即操作數(shù)1418中,或在指令助記符和/或操作代碼中)。指令的實施例還可以指定圈常數(shù)操作數(shù)集合(例如,用于初始圈j和可選的立即操作數(shù)1418中的迭代次數(shù)i的tj…tj+i-1)。響應(yīng)于經(jīng)解碼的指令的一個或多個執(zhí)行單元(例如,執(zhí)行裝置1405)應(yīng)用中間散列值輸入操作數(shù)1410和圈常數(shù)操作數(shù)集合對源數(shù)據(jù)操作數(shù)集合1415執(zhí)行圈迭代的sm3散列圈片集合,并將第一指令的結(jié)果1480存儲在simd目的寄存器中。
將理解,提供執(zhí)行散列圈的預(yù)定次數(shù)的迭代的simdsm3密碼散列指令,可以與其它simd處理和標量處理(諸如根據(jù)特定散列算法實現(xiàn)的消息“組塊”的預(yù)處理和準備預(yù)旋轉(zhuǎn)的圈常數(shù)(例如,tj<<<j))并行地在處理器流水線中實現(xiàn)散列算法的simd執(zhí)行。也就是說,在散列圈的單次迭代可能具有三個周期(例如,每個圈3個周期)的流水線延遲的情況下,通過執(zhí)行指定數(shù)量的迭代和/或繞過結(jié)果返回通過流水線,兩次迭代可以具有僅四個周期的延遲(例如每圈2個周期),四次迭代可以具有僅六個周期的延遲(例如每圈1.5個周期)。在具有四個或六個周期的那些流水線延遲期間,可以與散列圈片并行或并發(fā)地執(zhí)行其它有用的處理。因此,為simdsm3密碼散列算法圈片提供指令,該圈片具有多次迭代(例如每個片兩次、四次或八次迭代等)但小于散列算法的圈迭代的總數(shù),允許超標量執(zhí)行流水線和/或無序處理器流水線中的其它指令的并發(fā)執(zhí)行,從而顯著地提高處理吞吐量,并且利用與具有向量寄存器的通用處理器相關(guān)聯(lián)的制造過程改進的頻率縮放。
例如,裝置1401的實施例可以與包括可變m多個可變大小數(shù)據(jù)字段的向量寄存器(例如物理寄存器文件單元458)耦合,以存儲可變m多個可變大小數(shù)據(jù)元素的值。提供simdsm3密碼散列算法圈片的指令的實施例指定中間散列值輸入狀態(tài)操作數(shù)1410,其指定向量寄存器、立即操作數(shù)1418和源數(shù)據(jù)操作數(shù)1415集合中的一個。裝置1401的實施例可以包括與寄存器文件(例如,物理寄存器文件單元458)耦合的執(zhí)行單元1405,并且響應(yīng)于經(jīng)解碼的指令來提供simdsm3密碼散列算法圈片功能,以接收中間散列值輸入狀態(tài)操作數(shù)1410和消息源數(shù)據(jù)操作數(shù)1415集合,并且為多個迭代的每次迭代生成輸出狀態(tài)1480。隨后,可以將經(jīng)解碼的指令的結(jié)果1480存儲在simd目的寄存器中(例如,在物理寄存器文件單元458中)。
圖14b例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置1402的替代實施例的圖。裝置1402的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1402的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法圈片的指令,該圈片具有的迭代次數(shù)小于散列算法的圈迭代的總數(shù)(例如,兩次或四次迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定中間散列值輸入操作數(shù)1410、源數(shù)據(jù)操作數(shù)1415集合、圈常數(shù)操作數(shù)1412集合(例如,用于初始圈的單個預(yù)旋轉(zhuǎn)tj,或可選地一組四個預(yù)旋轉(zhuǎn)tj…tj+3)和散列算法的圈片部分(例如,作為初始圈j,和/或立即操作數(shù)1418中的迭代次數(shù)i)。響應(yīng)于解碼的指令的一個或多個執(zhí)行單元(例如執(zhí)行裝置1405)應(yīng)用中間散列值輸入操作數(shù)1410和圈常數(shù)操作數(shù)1412集合對源數(shù)據(jù)操作數(shù)1415集合執(zhí)行圈迭代的sm3散列圈片集合,并且將第一指令的結(jié)果1480存儲在simd目的寄存器(例如,在一些實施例中,用于中間散列值輸入操作數(shù)1410的相同simd寄存器)中。
圖15例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置1501的另一替代實施例的圖。裝置1501的實施例可以與解碼級(例如解碼406)或解碼器(例如解碼單元440)耦合,以解碼用于具有多次迭代(例如兩次或四次迭代,盡管僅例示了一次迭代)的simdsm3密碼散列算法圈片的指令,其可以允許在超標量執(zhí)行流水線中并發(fā)地執(zhí)行其它指令,該指令指定中間散列值輸入操作數(shù)1510,源數(shù)據(jù)操作數(shù)集合(例如,包括消息字wj和wj+4)、圈常數(shù)操作數(shù)集合(例如,包括預(yù)先旋轉(zhuǎn)的tj)和散列算法的圈片部分(例如,包括初始圈j的指示符和/或迭代次數(shù)i,可選地在立即數(shù)操作數(shù)中)。響應(yīng)于經(jīng)解碼的指令的一個或多個執(zhí)行單元(例如,包括執(zhí)行裝置1501)應(yīng)用中間散列值輸入操作數(shù)1510和一個或多個圈常數(shù)1512操作數(shù)集合對源數(shù)據(jù)操作數(shù)集合(例如,包括1514和1516)執(zhí)行圈迭代的sm3散列圈片集合,并且將經(jīng)解碼的指令的結(jié)果1580存儲在simd目的寄存器(例如,在一些實施例中,用于中間散列值輸入操作數(shù)1510的相同simd寄存器)中。
如執(zhí)行裝置1501中所例示,可以根據(jù)散列算法的指定的圈片部分(例如,包括初始圈j的指示符)來選擇布爾函數(shù)ffj1522和ggj1524,用于分別處理中間散列值32位數(shù)據(jù)字段輸入a、b、c和e、f、g。根據(jù)一個實施例,當(dāng)j小于16時,則布爾函數(shù)ffj和ggj可以分別選擇為a⊕b⊕c和e⊕f⊕g,或者當(dāng)j大于15時,則分別選擇為(a∧b)∨(a∧c)∨(b∧c)以及
最后,在sm3散列圈切片的每次迭代中,初步輸出狀態(tài)1570被存儲為新的輸出狀態(tài)1580,vj+1。在一些實施例中,輸出狀態(tài)鎖存器存儲作為迭代的結(jié)果而產(chǎn)生的輸出狀態(tài)1580(例如,新的vj+1個值)。在一些實施例中,可以通過來自輸出狀態(tài)1580鎖存器的旁路(例如,旁路網(wǎng)絡(luò)208或210)來執(zhí)行繞過散列值輸出狀態(tài)1580到中間散列值輸入狀態(tài),以針對sm3散列圈片的多個迭代中的每個下一迭代繞過輸出狀態(tài)1580到輸入狀態(tài)1520。布爾函數(shù)、置換、圈常數(shù)參數(shù)和消息擴展等的進一步細節(jié)可以在“sm3hashfunction”,ietfinternet-draft,中國科學(xué)院,2014年2月14日,版本01中找到,可以在萬維網(wǎng)上的tools.ietf.org/pdf/draft-shen-sm3-hash-01.pdf處獲得。
圖16例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的裝置1601的另一替代實施例的圖。裝置1601的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1601的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法圈片的指令,該圈片具有小于散列算法的圈迭代的總數(shù)的迭代數(shù)(例如,四個迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定中間散列值輸入操作數(shù)1610、源數(shù)據(jù)操作數(shù)1615集合、可選的圈常數(shù)操作數(shù)1612集合(例如包括單個初始預(yù)旋轉(zhuǎn)的tj或可選地一組四個預(yù)旋轉(zhuǎn)的tj…tj+3)和散列算法的圈片部分(例如,可選地作為初始圈j,和/或在立即操作數(shù)1418中的迭代次數(shù)i)。用于simdsm3密碼散列算法圈片的指令的一些實施例可以指定單個初始預(yù)旋轉(zhuǎn)常數(shù)tj,并且在該片的每一圈中內(nèi)部旋轉(zhuǎn)該單個初始常數(shù)一比特。用于simdsm3密碼散列算法圈片的指令的其它替代實施例可以僅指定j的值(例如在立即操作數(shù)1618中),并在內(nèi)部查找或生成每個旋轉(zhuǎn)常數(shù)tj<<<j。用于simdsm3密碼散列算法圈片的指令的其它替代實施例可以將多個預(yù)先旋轉(zhuǎn)的常數(shù)指定為一組(例如四個預(yù)旋轉(zhuǎn)的tj…tj+3)。一個或多個執(zhí)行單元(例如執(zhí)行裝置1601)響應(yīng)于經(jīng)解碼的指令,應(yīng)用立即散列值輸入操作數(shù)1610以及sm3roundj1605中的一個或多個圈常數(shù)操作數(shù)1612集合(例如tj)對源數(shù)據(jù)操作數(shù)1615集合(例如相應(yīng)的數(shù)據(jù)字段wj和wj+4)執(zhí)行圈迭代的sm3散列圈片集合,以產(chǎn)生初步輸出狀態(tài)1681,vj+1。進一步響應(yīng)于經(jīng)解碼的指令,應(yīng)用第二中間散列值輸入1681,vj+1和sm3roundj+11606中的一個或多個圈常數(shù)操作數(shù)1612集合(例如tj+1)對源數(shù)據(jù)操作數(shù)1615集合(例如,相應(yīng)的數(shù)據(jù)字段wj+1和wj+5)執(zhí)行第二sm3散列圈迭代,以產(chǎn)生初步輸出狀態(tài)1682,vj+2;…并且應(yīng)用第四中間散列值輸入vj+3(未示出)和sm3roundj+31608中的一個或多個圈常數(shù)操作數(shù)1612集合(例如tj+3)對源數(shù)據(jù)操作數(shù)1615集合(例如,各個數(shù)據(jù)字段wj+3和wj+7),執(zhí)行第四sm3散列圈迭代,以產(chǎn)生作為指令的結(jié)果的新輸出狀態(tài)1684,vj+4,并將指令的結(jié)果1684存儲在simd目的地寄存器(例如,在一些實施例中,用于中間散列值輸入操作數(shù)1610的相同simd寄存器)中。
一些實施例還可以包括處理器,其包括解碼器以解碼用于simdsm3消息擴展的指令,該指令指定第一和第二源數(shù)據(jù)操作數(shù)集合以及擴展范圍。響應(yīng)于該指令,處理器執(zhí)行單元從由指定的擴展范圍確定的第一和第二源數(shù)據(jù)操作數(shù)集合中執(zhí)行多個sm3消息擴展,并將結(jié)果存儲到simd目的寄存器中。對于提供sm3密碼散列函數(shù)的simd指令和處理邏輯的一些實施例,sm3消息擴展和sm3密碼散列圈可以在現(xiàn)代微處理器的標準執(zhí)行流水線中的迭代片中并發(fā)地和/或并行地執(zhí)行。將理解,可以方便地選擇每個片的迭代次數(shù),以便通過與執(zhí)行sm3消息擴展的片和/或sm3密碼散列圈的片相關(guān)聯(lián)的延遲來為其他并發(fā)飛行指令提供足夠的覆蓋。
圖17a例示了用于執(zhí)行另一指令以提供simdsm3密碼散列函數(shù)的裝置1701的一個實施例的圖。裝置1701的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如,執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1701的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法消息擴展的指令,該指令具有小于散列算法的消息擴展迭代(例如,少于五十二個消息擴展迭代)的總數(shù)的迭代數(shù)(例如,兩次或四次迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定第一源數(shù)據(jù)操作數(shù)1719集合(例如,wj-16,wj-15,...wj-9)和第二源數(shù)據(jù)操作數(shù)1711集合(例如,wj-8,wj-7,...wj-1),以及擴展范圍(例如,可選地在立即操作數(shù)1718中或在指令助記符和/或操作代碼中作為擴展范圍的迭代數(shù)目e)。響應(yīng)于經(jīng)解碼的指令的一個或多個執(zhí)行單元(例如執(zhí)行裝置1704),在第一源數(shù)據(jù)操作數(shù)1719集合和第二源數(shù)據(jù)操作數(shù)1711集合上執(zhí)行消息擴展迭代的sm3散列算法片集合,sm3消息擴展的數(shù)量由指定的擴展范圍確定,并且將指令的結(jié)果1790(例如,wj-4,…wj-1,wj,…wj+3)存儲在simd目的寄存器中。
圖17b例示了用于執(zhí)行另一指令以提供simdsm3密碼散列函數(shù)的裝置1702的替代實施例的圖。裝置1702的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400一部分(例如執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1702的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法消息擴展的指令,該擴展具有小于散列算法的消息擴展迭代的總數(shù)(例如,少于五十二個消息擴展迭代)的迭代數(shù)(例如,兩次或四次迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定第一源數(shù)據(jù)操作數(shù)1719集合(例如,wj-16,wj-15,...wj-9)和第二數(shù)據(jù)源數(shù)據(jù)操作數(shù)1711集合(例如,wj-8,wj-7,...wj-1)以及擴展范圍(例如,可選地作為在立即操作數(shù)1718中,或在指令助記符和/或操作代碼中的擴展范圍的迭代的數(shù)目e+1)。響應(yīng)于解碼的指令的一個或多個執(zhí)行單元(例如執(zhí)行裝置1703),對第一源數(shù)據(jù)操作數(shù)1719集合和第二源數(shù)據(jù)操作數(shù)1711集合執(zhí)行消息擴展迭代的sm3散列算法片集合,sm3消息擴展的數(shù)目由指定的擴展范圍確定,并且將指令的結(jié)果1792(例如,wj+e-7,…wj-1,wj,…wj+e)存儲在simd目的寄存器(例如,在一些實施例中,用于第一源數(shù)據(jù)操作數(shù)1719或用于第二源數(shù)據(jù)操作數(shù)1711的相同simd寄存器)中。
圖18a例示了用于執(zhí)行另一指令以提供simdsm3密碼散列函數(shù)的裝置1801的另一替代實施例的圖。裝置1801的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1801的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法消息擴展的指令,該擴展具有小于散列算法的消息擴展迭代的總數(shù)(例如少于五十二個消息擴展迭代)的迭代數(shù)(例如,兩個或四個迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定第一源數(shù)據(jù)操作數(shù)1819集合(例如,w0,w1,…w7)和第二源數(shù)據(jù)操作數(shù)1811集合(例如w8,w9,…w15)以及擴展范圍(例如,可選地作為在未示出的立即操作數(shù)中,或在指令助記符和/或操作代碼中的擴展范圍的迭代的數(shù)或迭代減1,e)。響應(yīng)于經(jīng)解碼的指令的一個或多個執(zhí)行單元(例如,執(zhí)行裝置1808),對第一源數(shù)據(jù)操作數(shù)1819集合和第二源數(shù)據(jù)操作數(shù)1811集合執(zhí)行消息擴展迭代的sm3散列算法片集合,sm3消息擴展的數(shù)目由指定的擴展范圍確定。例如,在一個實施例中,在1804處,作為指令的結(jié)果1890的元素,產(chǎn)生新擴展(或延伸)消息字w16,如下:w16=p1(w0⊕w7⊕(w13<<<15))⊕(w3<<<7)⊕w10,其中置換1803,p1被定義為p1(x)=x⊕(x<<<15)⊕(x<<<23)。在1805處,作為指令的結(jié)果1890的元素,產(chǎn)生新擴展(或延伸)消息字w17,如下:w17=p1(w1⊕w8⊕(w14<<<15))⊕(w4<<<7)⊕w11。在1806處,作為指令的結(jié)果1890的元素,產(chǎn)生新擴展(或延伸)消息字w18:w18=p1(w2⊕w9⊕(w15<<<15))⊕(w5<<<7)⊕w12。四個新的32位字中的一個字的消息擴展w19除了第一(即1819)和第二(即1811)源數(shù)據(jù)操作數(shù)集合的32位字數(shù)據(jù)元素之外還需要四個新的32位字(即w16)中的另一個元素。因此,在一個實施例中,可以如處理塊1802中所示產(chǎn)生置換p1(w3⊕w10⊕(w16<<<15)),作為p1(w3)⊕p1(w10)⊕p1(w16<<<15),并與(w6<<<7)進行異或以及與w13進行異或,以在1807處產(chǎn)生新擴展(或延伸)的消息字w19作為指令的結(jié)果1890的元素。然后可以將指令的結(jié)果1890(例如w12,…w15,w16,…w19)存儲在simd目的寄存器中。在一些實施例中,輸出鎖存器存儲作為迭代的中間結(jié)果而生成的結(jié)果1890。在一些實施例中,可以通過旁路(例如,旁路網(wǎng)絡(luò)208或210)來執(zhí)行繞過中間結(jié)果1890到另一個微指令(或微操作或者uop)的一個或者多個輸入源數(shù)據(jù)操作數(shù)。
圖18b例示了用于執(zhí)行另一指令以提供simdsm3密碼散列函數(shù)的裝置1810的又一替代實施例的圖。裝置1810的實施例可以是用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的流水線400的一部分(例如執(zhí)行級416)或核490的一部分(例如執(zhí)行單元462)。裝置1810的實施例可以與解碼級(例如,解碼406)或解碼器(例如,解碼單元440)耦合,以解碼用于simdsm3密碼散列算法消息擴展的指令,該擴展具有小于散列算法的消息擴展迭代(例如,小于五十二個消息擴展迭代)的總數(shù)的迭代數(shù)目(例如,八個迭代,其可以允許在超標量執(zhí)行流水線中并發(fā)執(zhí)行其它指令),該指令指定第一源數(shù)據(jù)操作數(shù)1819集合(例如,w0,w1,…w7)和第二源數(shù)據(jù)操作數(shù)1811集合(例如w8,w9,…w15)以及擴展范圍(例如,可選地作為在立即操作數(shù)1818,或者在指令助記符和/或操作代碼中擴展范圍的迭代的數(shù)目或迭代減1,e)。響應(yīng)于解碼的指令的一個或多個執(zhí)行單元(例如執(zhí)行裝置1809),對第一源數(shù)據(jù)操作數(shù)1819集合和第二源數(shù)據(jù)操作數(shù)1811集合執(zhí)行消息擴展迭代的sm3散列算法片集合,sm3消息擴展的數(shù)目由指定的擴展范圍確定。在一個實施例中,中間結(jié)果1821(例如w12,…w15,w16,…w19)可以由響應(yīng)于經(jīng)解碼的指令的一個或多個執(zhí)行單元(例如執(zhí)行裝置1808)產(chǎn)生(例如,作為微指令、微操作或uop)。然后,中間結(jié)果1821可以與第一源數(shù)據(jù)操作數(shù)1819集合(例如w4,w5,…w7)的元素和第二源數(shù)據(jù)操作數(shù)1811集合(例如,w8,w9,…w11)的元素一起被提供給隨后的邏輯層(例如執(zhí)行裝置1808),以產(chǎn)生響應(yīng)于經(jīng)解碼的指令(例如,作為第二微指令、微操作或uop)的擴展(或延伸)消息結(jié)果1890(例如w16,…w19,w20,…w23)。然后,可以將指令的結(jié)果1890(例如,w16,…w19,w20,…w23)存儲在simd目的寄存器(例如,在一些實施例中,用于第一源數(shù)據(jù)操作數(shù)1719的相同simd寄存器)中。
圖19例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的過程1901的實施例的流程圖。過程1901和本文公開的其它過程由處理塊執(zhí)行,處理塊可以包括能夠由通用機器或由專用機器或由兩者的組合執(zhí)行的專用硬件或軟件或固件操作代碼。
在過程1901的處理塊1910中,將sm3散列算法的中間散列值輸入狀態(tài)源操作數(shù)存儲在第一simd向量寄存器中(例如,在多個m個數(shù)據(jù)字段的第一部分中)。在處理塊1920中,源數(shù)據(jù)操作數(shù)集合(例如,在多個m個數(shù)據(jù)字段的第二部分中)存儲在第二simd向量寄存器中。在處理塊1925中,接收用于sm3散列算法的simdsm3散列圈片部分的指令。在處理塊1950中,作為simdsm3散列圈片的迭代的結(jié)果,生成散列值輸出狀態(tài)。在處理塊1960中,確定散列圈片的所有迭代是否已完成。如果否,則輸出狀態(tài)結(jié)果可選地在處理塊1970中被繞過,到用于散列圈片的下一次迭代的輸入狀態(tài),并且處理在處理塊1950開始重復(fù)。否則,處理前進到處理塊1980,其中散列值輸出狀態(tài)結(jié)果被存儲到第一simd寄存器中的目的操作數(shù)。
將理解,雖然過程1901的處理塊和本文公開的其它過程被例示為以迭代方式執(zhí)行,但是在可能的時候可以優(yōu)選地進行,以可替代的順序,或并發(fā)地或并行地執(zhí)行。
圖20例示了用于執(zhí)行提供simdsm3密碼散列函數(shù)的指令的過程2001的另一實施例的流程圖。在處理2001的處理塊2010中,將sm3散列算法的中間散列值輸入狀態(tài)源操作數(shù)存儲在第一simd向量寄存器中(例如,在多個m個數(shù)據(jù)字段的第一部分中)。在處理塊2015中,消息塊被擴展用于圈片源數(shù)據(jù)操作數(shù)集合。在處理塊2020中,源數(shù)據(jù)操作數(shù)集合(例如,在多個m個數(shù)據(jù)字段的第二部分中)存儲在第二simd向量寄存器中或存儲器中。在處理塊2025中,針對sm3散列算法的simdsm3散列圈片部分解碼指令,該指令在立即操作數(shù)中指定該圈片部分。在處理塊2030中,從第二simd寄存器或從用于當(dāng)前迭代的存儲器中選擇一對圈片源數(shù)據(jù)(例如,wj和wj+4)。在處理塊2035中,為當(dāng)前圈片部分迭代選擇圈常數(shù)(例如tj)。在處理塊2040中,為當(dāng)前迭代選擇一對布爾函數(shù)(例如,ffj和ggj)。在處理塊2045中,對所選擇的源數(shù)據(jù)和中間散列值輸入狀態(tài)執(zhí)行sm3散列圈。在處理塊2050中,作為simdsm3散列圈片的迭代的結(jié)果,生成散列值輸出狀態(tài)。在處理塊2060中,確定散列圈片的所有迭代是否已完成。如果否,則輸出狀態(tài)結(jié)果在處理塊2070中可選地繞過用于散列圈片的下一次迭代的輸入狀態(tài),并且處理重復(fù),在處理塊2030中開始。否則,處理前進到處理塊2080,其中散列值輸出狀態(tài)結(jié)果被存儲到第一simd寄存器中的目的操作數(shù)。在一些替代實施例中,散列值輸出狀態(tài)結(jié)果可以存儲到除第一simd寄存器之外的simd寄存器中的目的操作數(shù)或存儲器中。
圖21例示了用于執(zhí)行替代指令以提供simdsm3密碼散列函數(shù)的過程2101的實施例的流程圖。在處理2101的處理塊2110中,將sm3散列算法的第一源數(shù)據(jù)操作數(shù)集存儲在第一simd向量寄存器中(例如,在多個m個數(shù)據(jù)字段的第一部分中)。在處理塊2120中,將第二源數(shù)據(jù)操作數(shù)集合(例如,在多個m個數(shù)據(jù)字段的第二部分中)存儲在第二simd向量寄存器中。在處理塊2130中,接收用于sm3散列算法的simdsm3消息擴展(或延伸)片的指令。在處理塊2140中,作為simdsm3消息擴展片的迭代的結(jié)果,生成新的消息字。在處理塊2150中,確定消息擴展片的所有迭代是否已經(jīng)完成。如果否,則在處理塊2160中可選地繞過擴展消息塊結(jié)果到用于消息擴展片的下一次迭代的輸入狀態(tài),并且處理重復(fù),在處理塊2140中開始。否則,處理前進到處理塊2170,其中擴展消息塊結(jié)果被存儲到第一simd寄存器中的目的操作數(shù)。在一些替代實施例中,擴展消息塊結(jié)果可以存儲到除第一simd寄存器之外的simd寄存器中的目的操作數(shù)或存儲器中。
將理解,如本文所公開的simdsm3密碼散列指令可以用于在諸如密碼協(xié)議和互聯(lián)網(wǎng)通信的應(yīng)用中提供simdsm3密碼散列函數(shù),以確保數(shù)據(jù)完整性、數(shù)字簽名、身份驗證、消息內(nèi)容認證和消息源認證,用于金融交易、電子商務(wù)、電子郵件、軟件分發(fā)、數(shù)據(jù)存儲、隨機數(shù)生成等。
對于提供sm3密碼散列函數(shù)的simd指令和處理邏輯的一些實施例,sm3消息擴展和sm3密碼散列圈可以在現(xiàn)代微處理器的標準執(zhí)行流水線中的迭代片中并發(fā)地和/或并行地執(zhí)行。將理解,可以方便地選擇每個片的迭代次數(shù),以便通過與執(zhí)行sm3消息擴展的片和/或sm3密碼散列圈的片相關(guān)聯(lián)的延遲來為其它并發(fā)飛行指令提供足夠的覆蓋。
因此,還將理解,提供用于simdsm3密碼散列算法圈片的指令的執(zhí)行,其具有多次迭代(例如每片兩次、四次或八次迭代),但小于散列算法的圈迭代的總的數(shù)目,允許在超標量執(zhí)行流水線和/或無序處理器流水線中并發(fā)執(zhí)行其它指令(例如,sm3消息擴展指令),從而顯著提高大量應(yīng)用的處理吞吐量,并利用與通用處理器相關(guān)聯(lián)的制造工藝改進的頻率縮放。
本文公開的機制的實施例可以在硬件、軟件、固件或這些實現(xiàn)方法的組合中實現(xiàn)。本發(fā)明的實施例可以被實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備和至少一個輸出設(shè)備。
程序代碼可以應(yīng)用于輸入指令以執(zhí)行本文所描述的功能并生成輸出信息??梢砸砸阎姆绞綄⑤敵鲂畔?yīng)用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如,舉例來說數(shù)字信號處理器(dsp)、微控制器、專用集成電路(asic)或微處理器的處理器的任何系統(tǒng)。
程序代碼可以以高級程序上的或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以與處理系統(tǒng)通信。如果需要,程序代碼還可以用匯編語言或機器語言來實現(xiàn)。實際上,本文描述的機制在范圍上不限于任何特定的編程語言。在任何情況下,語言可以是編譯或解釋語言。
至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質(zhì)上的代表性指令來實現(xiàn),該代表性指令表示處理器內(nèi)的各種邏輯,當(dāng)由機器讀取時,使機器制造邏輯以執(zhí)行本文所描述的技術(shù)。稱為“ip核”的這樣的表示可以存儲在有形的機器可讀介質(zhì)上,并且提供給各種客戶或制造設(shè)施以加載到實際制作邏輯或處理器的制造機器中。
這種機器可讀存儲介質(zhì)可以包括但不限于由機器或設(shè)備制造或形成的物品的非暫時性、有形布置,包括存儲介質(zhì),諸如硬盤、任何其它類型的的盤,包括軟盤、光盤、壓縮盤只讀存儲器(cd-rom)、可重寫壓縮盤(cd-rw)和磁光盤、諸如只讀存儲器(rom)的半導(dǎo)體器件、隨機存取存儲器(ram),諸如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram)、可擦除可編程只讀存儲器(eprom)、閃存、電可擦除可編程只讀存儲器(eeprom)、磁卡或光卡或任何其它類型的適合于存儲電子指令的介質(zhì)。
因此,本發(fā)明的實施例還包括非暫時性有形機器可讀介質(zhì),其包含指令或包含諸如硬件描述語言(hdl)的設(shè)計數(shù)據(jù),設(shè)計數(shù)據(jù)定義了本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這樣的實施例也可以被稱為程序產(chǎn)品。
在一些情況下,指令轉(zhuǎn)換器可用于將指令從源指令集轉(zhuǎn)換為目標指令集。例如,指令轉(zhuǎn)換器可以轉(zhuǎn)換(例如,使用靜態(tài)二進制轉(zhuǎn)換、包括動態(tài)編譯的動態(tài)二進制轉(zhuǎn)換)、變形、模擬或以其它方式將指令轉(zhuǎn)換為將由核處理的一個或多個其它指令。指令轉(zhuǎn)換器可以在軟件、硬件、固件或其組合中實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、處理器外,或部分在處理器上和部分在處理器外。
因此,公開了用于執(zhí)行根據(jù)至少一個實施例的一個或多個指令的技術(shù)。雖然已經(jīng)在附圖中描述和示出了某些示例性實施例,但是應(yīng)當(dāng)理解,這些實施例僅僅是對寬泛發(fā)明的說明而不是限制,并且本發(fā)明不限于所示和所描述的具體結(jié)構(gòu)和布置,因為本領(lǐng)域普通技術(shù)人員在研究本公開內(nèi)容時可以進行各種其它修改。在諸如此類的技術(shù)領(lǐng)域中,其中發(fā)展快并且不容易預(yù)見進一步的進展,在不脫離本公開內(nèi)容的原理或所附權(quán)利要求的范圍情況下,由實現(xiàn)技術(shù)進步促進容易地對所公開的實施例在布置和細節(jié)上進行修改。