TW202333049A - 執行複數的熔合乘-加指令的系統與方法 - Google Patents

執行複數的熔合乘-加指令的系統與方法 Download PDF

Info

Publication number
TW202333049A
TW202333049A TW112116228A TW112116228A TW202333049A TW 202333049 A TW202333049 A TW 202333049A TW 112116228 A TW112116228 A TW 112116228A TW 112116228 A TW112116228 A TW 112116228A TW 202333049 A TW202333049 A TW 202333049A
Authority
TW
Taiwan
Prior art keywords
vector
instruction
value
scalar
packed
Prior art date
Application number
TW112116228A
Other languages
English (en)
Other versions
TWI818885B (zh
Inventor
密林德 吉卡
羅柏 瓦倫泰
吉瑟斯 柯柏
艾蒙斯特阿法 歐德亞麥德維爾
羅曼 杜茲索夫
Original Assignee
美商英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商英特爾股份有限公司 filed Critical 美商英特爾股份有限公司
Publication of TW202333049A publication Critical patent/TW202333049A/zh
Application granted granted Critical
Publication of TWI818885B publication Critical patent/TWI818885B/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions

Abstract

所揭示實施例有關於執行向量-複數熔合乘-加指令。在一例子中,一方法包含:擷取指令、該指令的格式包含運算碼、第一源運算元識別符、第二源運算元識別符、及目的運算元識別符,其中各個所述識別符用以識別儲存包含至少一複數的緊縮資料的位置;解碼該指令;檢索有關於第一與第二源運算元識別符的資料;及執行所解碼指令,以對於所識別的第一與第二源運算元的各個緊縮資料元件位置,交叉相乘實部與虛部分量,以產生四個積:一實部分量積、一虛部分量積、及兩混合積,以依據該指令藉由總和該四個積,而產生複數結果;及將結果儲存至所識別目的運算元的對應位置。

Description

執行複數的熔合乘-加指令的系統與方法
於此所述實施例大致關於指令集架構。更明確地說,所述實施例大致關於用以對複數執行熔合乘-加指令的系統與方法。
在計算中,特別是高效計算中,執行複數乘法與累加的指令為共通的。處理器的指令集架構經常包含指令,用以執行複數算術。因為此等指令為共通,所以對效能與功率消耗的改良,包含降低暫存器檔案壓力、降低記憶體壓力及減少數量的所需指令可能對於整體效能都是有益的。
在以下說明中,各種特定細節係被說明。然而,應了解的是,本案的實施例也可以在沒有這些特定細節下加以實施。在其他實例中,已知電路、結構及技術並未被詳細顯示,以免模糊了對本說明的了解。
在說明書中之”一實施例”、”實施例”、”例示實施例”等表示所述的實施例可以包含一特定特性、結構、或特徵,但並不是每一實施例都需要包含該特定特性、結構或特徵。再者,此等用語並不必然表示相同實施例。再者,當一特定特性、結構或特徵配合一實施例加以描述時,認為其在熟習於本技藝者的了解之內,以影響此特性、結構或特徵結合詳述或未詳述的其他實施例。
處理器的指令集架構經常包含用以執行複數算術的指令。執行複數乘法及累加的指令為共通的,特別是在高效計算(HPC)。一些處理器的指令集架構(ISA),例如,AVX512或早先x86 SIMD ISAs支援用於複數乘法的指令順序,但經常需要很多指令。使用很多指令來執行共通乘-積運算得到低效能及相對高功率消耗,因為指令順序施加暫存器檔案壓力、記憶體壓力。
於此所揭露實施例揭露指令,使用較少機器資源及較少的暫存器檔案壓力與記憶體壓力,以執行熔合複數乘法與加法。在一實施例中,指令執行兩個複數向量的乘法及結果累加在目的向量中。在另一實施例中,一指令取在輸入向量之一的數字共軛(複數的共軛為其虛部改變符號)。
在所揭露熔合乘加指令的一些實施例中,指令引數可以為暫存器或記憶體。複數被以自然數形式呈對(實部、虛部)儲存。所述指令允許雙、單或半倍精度實施法。
所揭露指令優於其他指令集架構,例如AVX512或早先x86 SIMD ISAs的優點包含由於降低的暫存器檔案壓力、降低的記憶體壓力及降低的對於共通算術運算所需指令數量,而造成之較高效能與較低功耗。
圖1為一方塊圖,例示用以執行一指令的處理元件,用以依據一實施例將兩緊縮或純量複數相乘並累加該結果。明確地說,方塊圖100包含指令儲存器102、擷取電路103、解碼電路104、執行電路106、暫存器108、記憶體110及引退或確定電路112。指令為擷取電路103所由指令儲存器102擷取,該指令儲存器102包含快取記憶體、晶片上記憶體、與處理器相同晶粒的記憶體、指令暫存器、通用暫存器、或系統記憶體,而沒有限制。解碼電路104解碼該指令。在一實施例中,該指令包含以下參考有關圖2A-2B加以進一步討論的欄位。解碼指令為執行電路106所執行。執行電路106被組態以自暫存器108與記憶體110讀取資料或將資料寫至暫存器108與記憶體110。暫存器108包含資料暫存器、指令暫存器、通用暫存器、及晶片上記憶體之任一或多者。記憶體110包含晶片上記憶體、與處理器相同晶粒的記憶體、與處理器相同封裝的記憶體、快取記憶體、及系統記憶體之任一或多。執行電路106的幾個例示實施例係被描述並參考圖3至圖8加以例示。引退或確定電路112確保執行結果被寫至或已經被寫至其目的地,並釋放或放開資源,作後續使用。
圖2A例示包含在一指令中的欄位,用以依據一實施例,將兩緊縮或純量複數相乘並累加該結果。明確地說,指令200包含運算碼202、第一源運算元識別符204、第二源運算元識別符206、及目的運算元識別符208。運算碼202識別該指令及/或予以執行的運算,及運算元類型(例如,如圖10D所示,指令用以相乘與累加儲存在暫存器檔案中的第一源運算元)。第一源運算元識別符204包含第一源運算元(緊縮複數、或緊縮向量資料)或識別檢索到該第一源運算元的暫存器或記憶體位置。在一些實施例中,第一源運算元包含多數向量資料元件,其各個包含一對數字:複數的實部與虛部分量。在第一源運算元中的各個元件在第二源運算元中具有為第二源運算元識別符206所指明的對應元件及在目的運算元中為目的運算元識別符208所指明的對應元件。因為第二源運算元與目的運算元對應於第一源運算元,所以,其最小尺寸取決於第一源運算元的尺寸。例如,如果第一源運算元包含8個元件,則目的運算元將包含最少8個元件,及第二源運算元將包含至少8個元件,各個元件包含代表複數的實部與虛部分量的一對數字。在另一例子中,如果第一源運算元包含64個元件,則目的運算元將包含最少64個元件,及第二源運算元將包含至少64個元件,其各個元件包含代表複數的實部與虛部分量的一對數字。
為204、206及208所識別的第一與第二源運算元及目的運算元被儲存在暫存器組之暫存器或記憶體中。暫存器組為暫存器檔案的一部份,並可能具有其他暫存器,例如狀態暫存器、旗標暫存器、專用遮罩暫存器、向量暫存器等。暫存器檔案的一實施例顯示於圖10D。這些暫存器可以由處理器外部看或由程式員的觀察看到。在一實施例中,指令指明儲存暫存器中之運算元。各種不同類型的暫存器都可適用,只要它們能儲存及提供於此所述之資料即可。或者,一或更多源與目的運算元被儲存在暫存器以外的一儲存位置,例如,好比在系統記憶體中的一位置。
圖2B例示包含在指令中之欄位,該指令用以依據一實施例使用寫入遮罩將兩緊縮或純量複數相乘並將該結果累加。明確地說,指令250包含運算碼252、第一源運算元識別符254、第二源運算元識別符256、目的運算元識別符258、及寫入遮罩260。運算碼252識別予以執行之指令及/或運算、及運算元類型(例如,指令用以相乘及累加儲存在暫存器檔案中的第一源運算元,如圖10D所示)。該第一源運算元識別符254包含第一源運算元(緊縮複數、或緊縮向量資料)或識別一暫存器或由該處檢索出該第一源運算元的記憶體位置。在一些實施例中,第一源運算元包含多數向量資料元件,其各個包含一對數字:複數的實部與虛部分量。在該第一源運算元中的各個元件具有在第二源運算元中為該第二源運算元識別符256所指明的對應元件,及在目的運算元中為目的運算元識別符258所指明的對應元件。因為第二源運算元與目的運算元對應於第一源運算元,所以,其最小尺寸取決於該第一源運算元的尺寸。例如,如果第一源運算元包含8個元件,則目的運算元將包含最少8個元件,及第二源運算元將包含至少8個元件,各個元件包含一對數字,代表複數的實部與虛部分量。另一例子中,如果第一源運算元包含64個元件,則目的運算元將包含最少64個元件,及第二源運算元將包含至少64個元件,各個包含一對數字,代表複數的實部與虛部分量。
為欄位254、256及258所識別的第一與第二源運算元與目的運算元被儲存在暫存器組中的暫存器中或記憶體中。此實施例包含寫入遮罩260,其被用以控制予以被寫入的目的運算元的向量元件。在一些實施例中,在寫入遮罩中的0位元造成對應目的元件保有其在指令以前的值。在其他實施例中,0位元使得目的的對應向量元件被設定為0。如於此所使用,在目的向量中的第N個位置中的目的元件對應於在該寫入遮罩中的第N個位置中的位元。暫存器組為暫存器檔案的一部份,並可能有其他暫存器,例如,狀態暫存器、旗標暫存器、專用遮罩暫存器、向量暫存器等等。暫存器檔案的一實施例係被顯示於圖10D中。暫存器可以由處理器的外側看到,或由程式員的觀察看到。在一實施例中,指令指明儲存在暫存器中的運算元。各種不同類型的暫存器均適用,只要它們能儲存及提供於此所述之資料即可。或者,一或更多源與目的運算元係被儲存在暫存器以外的儲存位置中,例如,比如在系統記憶體中之位置。
圖3例示執行電路300,用以實行向量-複數熔合乘加(VCFMADD)指令,以依據一實施例,將兩緊縮複數相乘並累加該結果。執行電路300為執行電路106(圖1)的一實施例。如所示,第一源運算元302與第二源運算元304為512位元向量暫存器,各個被緊縮有8個64位元複數,各個包含有32位元實部分量與32位元虛部分量。在其他實施例中,第一與第二源運算元具有不同尺寸,例如32位元、128位元或256位元。在其他實施例中,第一與第二源運算元被緊縮有不同數量的元件,例如,4個、16個或32個元件。在一些實施例中,VCFMADD指令包含指明記憶體位置的源運算元識別符。在一些實施例中,當源運算元識別符識別記憶體位置時,全向量由記憶體檢索並儲存於向量暫存器中,以供執行電路300使用。在其他實施例中,當源運算元識別符識別記憶體位置時,單一元件係由記憶體檢索並廣播至向量暫存器的全向量長度,以供執行電路300所使用。在一些實施例中,源運算元識別符識別一暫存器,其內容被廣播給向量暫存器的全向量長度,以供執行電路300所使用。
執行電路300為執行電路106(圖1)的例示實施法。如所示,執行電路300包含乘法器310、312、314及316,其與加法器318及320、及符號反相器322,一起運算為i0所識別的第一源運算元302之第一元件(為複數元件位置之第一緊縮向量元件位置),及也為i0所識別的第二源運算元304的第一元件,以產生也為i0所識別的目的運算元306的第一元件。更明確地說,目的運算元306的對應元件由依據VCFMADD計算法使用式1與式2加以設定的兩個數字構成。
雖然圖3只顯示執行電路300,用以產生目的運算元306的元件i0,但應了解的是,乘法器、加法器及減法器在一些實施例中被複製,以並列計算目的運算元306的至少兩個元件。一個實施例複製乘法器、加法器及減法器,到達並列計算目的運算元的每個元件所需的程度。並列計算與產生的目的運算元元件的數目可以改變,例如,一次兩個、或一次四個或一次任意數量的元件。
另一方面,VCFMADD的串列實施法的實施例包含電路,用以一次計算目的運算元的一元件。在串列實施法中,目的運算元306的元件被串列地計算與設定,一次計算與設定目的運算元306的一元件,這具有需要較少執行電路的優點。
一些實施例包含並列硬體電路,用以允許執行電路300在一時鐘週期內計算與設定在目的運算元306的元件。其他實施例包含並列硬體電路,用以允許執行電路300在幾時鐘週期內計算與設定目的運算元306的元件。相較於用純量運算以執行VCFMADD指令的功能,例示於圖3的這些實施例被更快速執行。
圖4例示用以依據一實施例,實施向量-複數熔合共軛乘加(VCFCMADD)指令的執行電路400,以將兩緊縮複數相乘並累加結果。執行電路400為執行電路106(圖1)的一實施例。如所示,第一源運算元402及第二源運算元404為512位元向量暫存器,各個被緊縮有8個64位元複數,各個複數由32位元實部分量與32位元虛部分量構成。在其他實施例中,第一與第二源運算元具有不同尺寸,例如,32位元、128位元或256位元。在其他實施例中,第一與第二源運算元被緊縮有不同數量的元件,例如,4、16或32個元件。在一些實施例中,VCFCMADD指令包含源運算元識別符,其識別記憶體位置,其中向量運算元為首先自記憶體檢索出來。在一些實施例中,當源運算元識別符識別一記憶體位置時,全向量係由記憶體檢索出並被儲存在向量暫存器中,以供執行電路400所使用。在其他實施例中,當源運算元識別符識別記憶體位置時,單一元件被由記憶體檢索出並廣播至向量暫存器的全向量長度,以供執行電路400所使用。在一些實施例中,源運算元識別符識別一暫存器,其內容被廣播至向量暫存器的全向量長度,以供執行電路400所使用。
執行電路400為執行電路106(圖1)的例示實施法。如所示,執行電路400包含乘法器410、412、414及416,其與加法器418及420及符號反相器422一起操作於第一源運算元402之為i0所識別的第一元件(緊縮資料的第一位置並包含實部分量與虛部分量)與第二源運算元404的同時為l所識別的第一元件上,以產生目的運算元406的也為i0所識別的對應第一元件。更明確地說,目的運算元406的第一元件由兩數字構成,其係依據VCFCMADD計算使用式3與式4加以設定。
實施VCFCMADD指令的式3與4係類似於實施VCFMADD指令的式1與2,但不同在於用於計算DST[l+0]與DST[l+1]中的符號。
雖然圖4只顯示執行電路,用以產生目的運算元406的元件i0,但應了解的是,乘法器、加法器及減法器在一些實施例中被複製,以並列計算目的運算元406的至少兩元件。一實施例複製乘法器、加法器與減法器至並列計算目的運算元的每個元件所需的程度。並列計算與產生的目的運算元元件的數目可以加以改變,例如,一次2個、或一次4個或一次任意數量的元件。
另一方面,VCFCMADD的串列實施法的一實施例包含電路,用以一次計算目的運算元的一元件。在串列實施例中,目的運算元406的元件係藉由一次計算與設定目的運算元406的一元件而加以串列地計算與設定,這具有需要較少執行電路的優點。
一些實施例包含並列硬體電路,用以允許執行電路400在一時鐘週期內計算並設定目的運算元406的元件。其他實施例包含並列硬體電路,用以允許執行電路在幾時鐘週期內計算與設定目的運算元406的元件。相較於使用純量運算以執行VCFMADD指令的功能,示於圖4的實施例能更快速執行。
圖5A例示處理器(例如,核心、CPU、GPU、APU等)的方法實施例,以執行指令,以將兩複數源運算元相乘並累積該結果。在一些實施例中,源運算元為純量值。指令在502被擷取、在504被解碼、相關於第一與第二源運算元識別符的資料在506被檢索、及被解碼的指令在508執行。
圖5A例示依據實施例之執行508。在510,對於所識別的第一與第二源運算元的各個緊縮資料元件位置,實部與虛部分量被交叉相乘,以產生四個積:實部分量的積、虛部分量的積、及兩個混合的積。在512,依據該指令,複數結果藉由總和四個積而產生。在514,複數結果被儲存在識別的目的運算元的對應位置。
如於此所用,產生虛部分量的積表示將例如在第一與第二源運算元中所緊縮的至少兩複數的虛部分量相乘。如在此所用,產生實部分量的積表示將例如在第一與第二源運算元中緊縮的至少兩複數的實部分量相乘。如於此所用,產生混合積表示將一複數值的虛部分量與另一複數的實部分量相乘。
在一些實施例中,第一與第二源運算元可以為純量值而不是向量,在514後,執行結束。在一些實施例中,第一與第二源運算元為予以被並列執行的緊縮資料向量,其中,在508,執行將對緊縮向量的至少兩元件位置並列發生。在一些實施例中,第一與第二源運算元為予以串列執行之緊縮資料向量,其中執行508至514將於緊縮向量的至少兩元件位置串列發生。
在向量複數熔合乘加(VCFMADD)指令時,執行508將用以藉由將實部分量的積減去虛部分量的積,而產生複數結果的實部分量(見上式1)、藉由將兩混合積相加而產生複數結果的虛部分量(見上式2)、及將複數結果寫入至目的運算元的對應緊縮資料元件位置。
在向量-複數熔合共軛乘加(VCFCMADD)指令時,執行508藉由將虛部分量的積與實部分量的積相加,以產生複數結果的實部分量(見上式3)、藉由將兩混合積之一減去兩混合積的另一個,而產生複數結果的虛部分量(見上式4)、並將複數結果儲存至目的運算元的對應緊縮資料元件位置。
圖5B例示處理器(例如,核心、CPU、GPU、APU等)的方法實施例,用以執行指令,以將兩複數源運算元相乘並累加該結果。在一些實施例中,源運算元為純量值。在其他實施例中,源運算元包含緊縮資料向量及圖5B的方法針對各個緊縮資料元件位置作串列或並列運算。圖5B例示向量與純量實施法,與並列與串列實施法。指令在5102被擷取、在5104被解碼、在5106有關於解碼指令的第一與第二源運算元識別符的資料被檢索、及被解碼的指令在5108被執行。
在5102擷取的指令具有一格式,其具有第一源運算元識別符、第二源運算元識別符、及目的運算元識別符。在5104擷取一指令係藉由自指令儲存器,例如指令儲存器102(圖1)擷取一指令加以執行,指令儲存器包含快取記憶體、指令暫存器、通用暫存器或系統記憶體。包含在處理器核心內的指令擷取單元的實施例參考圖12A及12B加以討論如下。
在5104解碼該指令包含解碼例如圖2所示的該指令的各種欄位,包含運算碼202、第一源運算元識別符204、第二源運算元識別符206及目的運算元識別符208。在5104解碼該指令也包含決定從何處檢索該等運算元與將結果寫至何處。
在5106檢索有關於第一與第二源運算元識別符的資料包含載入儲存在暫存器組的暫存器中或記憶體中的運算元。暫存器組為暫存器檔案的一部份,可能具有其他暫存器,例如狀態暫存器、旗標暫存器、專用遮罩暫存器、向量暫存器等等。暫存器檔案的一實施例係如下參考圖11加以描述。在一實施例中,暫存器可以由處理器的外部或由程式員的觀察看到。例如,指令指明儲存在暫存器中之運算元。各種不同類型的暫存器都適用,只要其能儲存並提供如於此所述資料即可。或者,一或更多源及目的運算元被儲存在暫存器以外的儲存位置中,例如,在系統記憶體中的一個位置。
在5108執行指令包含在5110決定第一與第二源運算元為純量值,或者,如果它們為緊縮有複數資料元件的向量。當第一與第二源運算元為純量不是向量資料時,其中所識別第一與第二源運算元為純量值及各個包含單一複數。如果源運算元為純量值,則在5114,例如依據VCFMADD指令的式1與式2或VCFCMADD指令的式3與式4,產生複數結果的兩部份。在結束前,結果然後被寫入至為目的運算元識別符所識別的對應元件。
另一方面,如果在5110決定第一與第二源運算元識別緊縮有資料元件的向量,則在5112決定是否串列或並列執行該指令。在一實施例中,額外字元被包含在運算碼202中,其指定是否該執行應為串列或並列。在另一實施例中,在暫存器組中之暫存器被組態以儲存控制VCFMADD與VCFCMADD應串列或並列運算向量元件的控制值。
如果在5112決定執行電路用以串列計算與設定目的運算元的元件,則在5116,串列針對該向量的每一元件:複數的兩個部份例如依據VCFMADD指令的式1與式2,或者依據VCFCMADD指令的式3與式4加以計算。在5116,該結果被回寫至為目的運算元識別於所識別的位置。
在5112,如果決定執行電路用以並列計算與設定目運算元元件,則在5118向量的至少兩元件被例如依據VCFMADD指令的式1及式2,或依據VCFCMADD指令的式3與式4加以計算。在一些實施例中,目的運算元的各個元件被並列執行。所述結果然後被寫至目的。在一些實施例中,目的運算元的所有元件被並列計算與寫入。
執行5108被進一步參考圖6、圖7及圖8所例示的虛擬碼加以描述。
在一些實施例中,執行電路在單一時鐘週期內實行執行法5108。在其他實施例中,執行電路在幾個時鐘週期內實行執行法5108。在兩情況下,依據於此揭露之實施例的VCFMADD與MCFCMADD指令的執行較快於使用一順序純量指令來實行這些功能。
圖5C例示處理器(例如核心,CPU、GPU、APU等)的方法實施例,以執行一指令,以將兩複數源運算元相乘並累加該結果。例示於圖5B的方法執行類似於執行電路508(圖5A)的功能。在550,第一源運算元與第二源運算元的實部與虛部分量係在暫存器中。例示於圖5B之實施例為處理器所執行的方法的例子,其在第一與第二源運算元已經由暫存器或由記憶體檢索後並儲存於暫存器之後的一點開始,例如,在506完成後(圖5A)。
在552,四個積藉由將第一與第二源運算元的實部與虛部分量交叉相乘加以產生,得到S1R*S2R、S1I*S2I、S1R*R2I與S2R*S1I。在緊縮資料實施例中,在552的乘法係對第一與第二源運算元的複數元件之一進行。在將要利用並列處理的緊縮資料實施例中,在552-P1、552-P2、…及552-PN中,第一與第二源運算元的N個額外複數元件被並列處理,產生四個積並對這些額外元件執行該方法的剩餘部份。為簡單起見,超出551-P1至551-PN的方法的剩餘部份並未顯示這些額外元件。在一些實施例中,N為1。在其他實施例中,N為足夠大,使得第一與第二源運算元的所有剩餘元件被並列處理。
在554,決定該指令為VCFMADD或VCFCMADD。
圖6為例示執行電路的操作的虛擬碼,以實行依據一實施例之VCFMADD指令。如所示,虛擬碼例示執行電路106(圖1)被設立有VLEN(向量長度)變數,該VLEN變數被用以設定在其上迴圈的元件數量。如果其為VCFMADD,則在556,四個積被累加至在目的運算元的對應元件的複數的實部與虛部分量:
另一方面,如果指令為VCFCMADD,則在558,該四個積被累加至在目的運算元的對應元件的複數的實部與虛部分量: 在560,決定該指令為向量或純量指令。如果純量,則該方法結束。如果指令為操作緊縮資料元件的向量指令,則在562,決定對於第一與第二源運算元的剩餘元件進行的執行為並列或串列。如果予以進行之執行為並列,則在564,跟隨著552-P1、552-P2、552-PN的並列計算係允許完成,然後該方法結束。如果執行予以串列進行,則在566,該方法對目的向量的各個剩餘元件,串列執行552至558。然後,該方法結束。
VCFMADD指令的運算碼202係用以設立該功能。有關VLEN,在一些實施例中,運算碼202(圖2)包含用以設定VLEN的數字,例如8、16、32或64。在一些實施例中,運算碼202(圖2)包含表示資料元件的大小的數字或字母,例如,Q、D或W。
如於圖6所示,VCFMADD功能接收512位元第一源運算元SRC1及第二源運算元SRC2作為輸入,並用以儲存結果至目的運算元DST中。第一源運算元與第二源運算元被檢索的位置及目的運算元所寫入的位置可以在暫存器中或在記憶體中,例如如同第一源運算元識別符204、第二源運算元識別符206及目的運算元識別符208(圖2)所指明的暫存器108及記憶體110(圖1)。如圖6的虛擬碼所例示的執行電路106(圖1)迴圈於SRC1及SRC2的16個32位元元件上,以計算與儲存DST的16個32位元元件。在各個迴圈遞迴時,運算碼決定如果VCFMADD,則用式1及式2加以計算DST,或者,如果VCFCMADD,則使用式3及式4加以計算DST。
執行電路106(圖1)可以串列地一次處理元件一個,或者,可以同時並列地,處理多個元件,或所有元件。
圖7為虛擬碼,用以例示執行電路的操作,以實施依據一實施例之VCFMADD指令。如所示,虛擬碼例示執行電路106(圖1)被設立有VLEN變數,其被用以設定在其上迴圈的元件的數目,及表示目的運算元中的哪些元件應被設定的遮罩位元變數。
VCFMADD指令的運算碼202被用以設定該功能。至於VLEN,在一些實施例中,VCFMADD指令的運算碼202(圖2)包含用以設定VLEN的數目,例如,8、16或32。在一些實施例中,VCFMADD指令的運算碼202(圖2)包含表示資料元件大小的數字或字母,例如,”Q”用以表示8位元組四倍字,”D”用以指明4位元組雙倍字,”W”用以指明2位元組字元,及”B”用以指明8位元的位元組。至於遮罩位元,在一些實施例中,當VCFMADD指令被呼叫時,暫存器檔案的通用暫存器或遮罩暫存器可以被規劃有一值,以予以被用於遮罩位元。在一些實施例中,VCFMADD的運算碼202為全運算碼欄974,其如以下參考圖9A所討論包含資料元件寬度欄位964及寫入遮罩欄位970。
如於圖7所示,VCFMADD功能接收512位元第一源運算元SRC1及第二源運算元SRC2作為輸入,並用以儲存結果於目的運算元DST。第一源運算元與第二源運算元所檢索出的位置與目的寫入的位置可以是在暫存器中或在記憶體中,例如,如同第一源運算元識別符204、第二源運算元識別符206及目的運算元識別符208(圖2)所指明的暫存器108及記憶體110(圖1)中。如圖7的虛擬碼所例示的執行電路106(圖1)迴圈於SRC1及SRC2的16個32位元元件上,以計算與儲存DST的16個32位元元件。在各個迴圈遞迴時,如上述使用式1及式2加以計算DST的兩個分量的值。另一方面,如果有一寫入遮罩,對於具有對應遮罩位元等於零(0)的各個資料元件,該流程決定”合併遮罩”是否為真,並且,如果為真,則DST保持不變,如果不為真,則DST元件被重設為零(0)。
執行電路106(圖1)可以串列地一次處理該等元件一個,或者,可以同時並列處理多個元件或所有元件。
圖8為虛擬碼,用以例示執行電路操作以依據一實施例實行VCFCMADD指令。如所示,虛擬碼例示執行電路106(圖1)被以VLEN變數及遮罩位元變數設立,該VLEN變數被用以設定元件予以在其上迴圈的數目,及該遮罩位元變數表示目的運算元中的哪些位元應被設定。
VCFCMADD指令的運算碼202被用以設立該功能。至於VLEN,在一些實施例中,VCFCMADD指令的運算碼202(圖2)包含用以設定VLEN的數目,例如8、16或32。在一些實施例中,VCFCMADD指令的運算碼202(圖2)包含表示資料元件的大小的數目或字母,例如,Q、D、或W。至於遮罩位元,在一些實施例中,暫存器檔案的通用暫存器或遮罩暫存器可以以當VCFCMADD指令被呼叫時,予以被用於遮罩位元的值加以規劃。在一些實施例中,VCFCMADD的運算碼202為全運算碼欄位974,包含資料元件寬度欄位964及寫入遮罩欄位970,並將如下參考圖9A加以討論。
如圖8所示,VCFCMADD功能接收512位元第一源運算元SRC1及第二源運算元SRC2作為輸入,並被用以儲存結果於目的運算元DST。第一源運算元與第二源運算元所檢索的位置及目的予以被寫入的位置可以在暫存器或記憶體內,例如由第一源運算識別符204、第二源運算元識別符206、及目的運算元識別符208(圖2)所指明之暫存器108及記憶體11(圖1)。如圖8的虛擬碼所例示的執行電路106(圖1)迴圈於SRC1及SRC2的16個32位元元件上,以計算並儲存出DST的16個32位元元件。在各個迴圈遞迴時,DST的兩個分量的值被使用以上的式3及式4加以計算。另一方面,如果對於具有對應遮罩位元等於零(0)的各個資料元件有一寫入遮罩,則該流程決定”合併遮罩”為是否真,並且,如果為真,則DST保持不變,並且,如果為否,則DST重設為零(0)。 指令集
指令集可以包含一或更多指令格式。給定指令格式可以定義各種欄位(例如,位元的數目、位元位置),以指明予以執行的運算(例如,運算碼)及該運算所予以執行於其上的運算元及/或其他資料欄位(例如,遮罩)等等。一些指令格式更透過指令樣板(或子格式)的定義被分解。例如,給定指令格式的指令樣板可以被定義以具有不同子集的指令格式欄位(包含欄位典型為相同順序,但至少部份具有不同位元位置,因為它們包含有較少欄位)及/或被定義為具有被不同解譯的給定欄位。因此,ISA的各個指令被使用給定指令格式(並且,如果定義的話,則以該指令格式的指令樣板之給定一個)加以表現,並包含用以指明該運算及該等運算元的欄位。例如,例示ADD指令具有特定運算碼與指令格式,其包含運算碼欄位,用以指明該運算碼及運算元欄位,用以選擇運算元(源1/目的及源2),及在指令流中的此ADD指令的發生將在選擇特定運算元的運算元欄位中有特定內容。一組稱為先進向量擴充(AVX)(AVX1及AVX2)並使用向量擴充(VEX)編碼設計的SIMD擴充已經被釋出及/或公開(例如,見2014年九月的英特爾®64及IA-32架構軟體開發者手冊,及見於2014年十月1的英特爾®先進向量擴充規劃參考手冊)。 例示指令格式
於此所述之指令的實施例可以以不同格式加以實施。另外,例示系統、架構及管線被詳述如下。指令的實施例可以執行在此等系統、架構及管線上,但並不限於所詳述者。 同屬向量友善指令格式
向量友善指令格式為一指令格式,其適用於向量指令(例如,某些欄位特定於向量運算)。雖然所述實施例中,向量與純量運算兩者係透過向量友善指令格式加以支持,但其他實施例只使用向量友善指令格式支持向量運算。
圖9A-9B為方塊圖,其例示依據本發明實施例之同屬向量友善指令格式與其指令樣板。圖9A為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式與其類型A指令樣板;而圖9B為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式及其類型B指令樣板。明確地說,同屬向量友善指令格式900定義有類型A及類型B指令樣板,其兩者包含無記憶體存取905指令樣板及記憶體存取920指令樣板。在向量友善指令格式文中的用語”同屬”係表示該指令格式並未被綁至任何特定指令集。
雖然本發明的實施例將被描述為其中向量友善指令格式支援如下:64位元組向量運算元長度(或大小)具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)(並且,因此,64位元組向量由16雙字-大小元件或者8四倍字大小元件);64位元組向量運算元長度(或大小)具有16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小);32位元組向量運算元長度(或大小)具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小);及16位元組向量運算元長度(或大小)具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小),但其他實施例也可以支援更多或更少及/或不同向量運算元大小(例如,256位元組向量運算元)具有更多、更少或不同資料元件寬度(例如,128位元(16位元組)資料元件寬度)。
在圖9A中的類型A指令樣板包含:1)在無記憶體存取905指令樣板中,顯示有:無記憶體存取全捨入控制類型運算910指令樣板;及無記憶體存取資料轉換類型運算915指令樣板;及2)在記憶體存取920指令樣板中,顯示有:記憶體存取,時序925指令樣板;及記憶體存取,非時序930指令樣板。於圖9B中之類型B指令樣板包含:1)在無記憶體存取905指令樣板內,其中顯示無記憶體存取、寫入遮罩控制、部份捨入控制類型運算912指令樣板,及無記憶體存取、寫入遮罩控制、vsize類型運算917指令樣板;及2)在記憶體存取920指令樣板內,顯示有記憶體存取、寫入遮罩控制927指令樣板。
同屬向量友善指令格式900包含以圖9A-9B所示之順序如下列出的以下欄位:
格式欄位940-在此欄位中之特定值(指令格式識別符值)特有地識別向量友善指令格式,因此,以及在指令串流中的向量友善指令格式中的指令的發生。因此,當此欄位只有當為同屬向量友善指令格式的指令集所不需要時,此欄位為選用的。
基礎運算欄位942-其內容區分不同基礎運算。
暫存器索引欄位944-其內容直接或透過位址產生,指明源與目的運算元的位置,它們是在暫存器中或在記憶體中。這些包含足夠數量的位元,以由PxQ(例如,32×512、16×128、32×1024、64×1024)暫存器檔案中選擇N個暫存器。雖然在一實施例中,N可以多達三個源及一目的暫存器,但其他實施例也可以支援更多或更少源及目的暫存器(例如,可以支援多達兩個源,其中這些源之一也可以作為目的,可以支撐多達三個源,其中這些源之一也可以作為目的,可以支援多達兩個源及一目的)。
修改符欄位946-其內容區分在同屬向量指令格式中的指令的發生,其指明有記憶體存取與未發生者;即,在無記憶體存取905指令樣板與記憶體存取920指令樣板之間。記憶體存取運算讀取及/或寫入至記憶體階層(在一些情況下,使用暫存器中之值,指明在源及/或目的位址),而非記憶體存取運算,則否(例如,源及目的為暫存器)。雖然在一實施例中,此欄位也以三個方式中作選擇,以執行記憶體位址計算,但其他實施例中,可以支援更多、更少或不同方式,以執行記憶體位址計算。
擴增運算欄位950-其內容區分除了基礎運算外,各種不同運算中之哪一個將被執行。此欄位為上下文特定。在本發明之一實施例中,此欄位被分割為類型欄位968、阿爾發欄位952及貝它欄位954。擴增運算欄位950允許共同群的運算在單一指令,而不是2、3、或4指令中執行。
標度欄位960-其內容允許用於記憶體位址產生的索引欄位的內容的定標(例如,用於使用2 標度*索引+基礎的位址產生)。
位移欄位962A-其內容被使用作為記憶體位址產生的一部份(例如,用於使用2 標度*索引+基礎+位移的位址產生)。
位移因數欄位962B(注意位移欄位962A直接在位移因素欄位962B上的並列表示一個或另一個被使用)-其內容被使用作為位址產生的一部份;其指明將為記憶體存取的大小(N)所定標的位移因素-其中N為在記憶體存取中的位元組的數目(例如,用於位址產生,其使用2 標度*索引+基礎+定標位移)。冗餘低效位元被忽略,因此,位移因數欄位的內容被乘以記憶體運算元總大小(N),以產生計算有效位址所用的最終位移。N的值係在運行時間中根據全運算碼欄位974(如以下所述)及資料調處欄位954C為處理器硬體所決定。當位移欄位962A與位移因數欄位962B指令樣板未被使用作為無記憶體存取905指令樣板及/或不同實施例也可以實施兩者之一或都沒有時,其為選用的。
資料元件寬度欄位964-其內容區分若干資料元件寬度中之哪一個將被使用(在一些實施例中,用於所有指令;在其他實施例,只有用於部份的指令)。此欄位為選用,如果只有支援一資料元件寬度及/或使用部份態樣的運算碼支援資料元件寬度,則此欄位為不需要。
寫入遮罩欄位970-其內容以每資料元件位置為基礎地控制在目的向量運算元中的資料元件位置是否反映基礎運算及擴增運算的結果。類型A指令樣板支援合併寫入遮罩,而類型B指令樣板支援合併及歸零寫入遮罩兩者。當合併時,向量遮罩允許在目的中之任何組元件在(為基礎運算及擴增運算所指明的)任意運算的執行期間受保護不被更新;在另一實施例中,其中當目的中的對應遮罩位元具有0時,保留目的的各個元件的舊值。相對地,當歸零向量遮罩時,允許在(基礎運算及擴增運算所指明的)任何運算執行期間,目的中的任何組元件被歸零;在一實施例中,當對應遮罩位元具有0值時,目的的元件被設定為0。此功能的次組為控制被執行的運算的向量長度的能力(即,由第一個到最後一個的元件的間隔被修改),然而,並不需要這些被修改的元件為連續。因此,寫入遮罩欄位970允許部份向量運算,包含加載、儲存、算術、邏輯等等。雖然本發明的實施例被描述為其中寫入遮罩欄位970的內容選擇包含予以被使用的寫入遮罩的若干寫入遮罩暫存器之一(以及,因此,寫入遮罩欄位970的內容間接指明予以執行的遮罩),但其他實施例則可以替代或額外地允許遮罩寫入欄位970的內容直接指明予以執行的遮罩。
立即值欄位972-其內容允許立即值的指明。此欄位當其並未出現在不支援立即值的同屬向量友善格式的實施法中並且其並未出現在不使用立即值的指令時,此欄位為選用的。
類型欄位968-其內容區分不同類型之指令。參考圖9A-B,此欄位的內容在類型A與類型B指令間作選擇。在圖9A-B中,圓角方塊係被用以指明出現在此欄位中之一特定值(例如,在圖9A-B中,用於類型欄位968的類型A 968A及類型B 968B)。 類型A的指令樣板
在類型A的非記憶體存取905指令樣板中,阿爾發欄位952被解譯為RS欄位952A,其內容區分不同擴增運算類型中之哪一個將被執行(例如,捨入952A.1及資料轉換952A.2分別被指明用於無記憶體存取捨入類型運算910及無記憶體存取資料轉換類型運算915指令樣板),而貝它欄位954區分所指定類型的哪一運算將被執行。在無記憶體存取905指令樣板中,標度欄位960、位移欄位962A、及位移標度欄位962B並未出現。 無記憶體存取指令樣板-全捨入控制類型運算
在無記憶體存取全捨入控制類型運算910指令樣板中,貝它欄位954被解譯為捨入控制欄位954A,其內容提供靜態捨入。雖然在本發明之所述實施例中,捨入控制欄位954A包含抑制全浮點異常(SAE)欄位956及捨入運算控制欄位958,但其他實施例也支援可以編碼這兩概念入相同欄位中,或者,只有這些概念/欄位之一或另一(例如,可以只具有捨入運算控制欄位958)。
SAE欄位956-其內容區分是否要去能異常事件報告;當SAE的欄位956內容表示抑制被致能,則給定指令不報告任何類型的浮點異常旗標並且不啟動任何浮點異常處置器。
捨入運算控制欄位958-其內容區分一群捨入運算(例如,捨進、捨去、捨向零、及捨至最近值)中之哪一個執行。因此,捨入運算控制欄位958允許每一指令為主地改變捨入模式。在本發明之一實施例中,處理器包含控制暫存器,用以指明捨入模式,該捨入運算控制欄位950的內容置換(override)該暫存器值。 無記憶體存取指令樣板-資料轉換類型運算
在無記憶體存取資料轉換類型運算915指令樣板中,貝它欄位954被解譯為資料轉換欄位954B,其內容區分若干資料轉換中之哪一個將被執行(例如,無資料轉換、拌和、廣播)。
在類型A的記憶體存取920指令樣板中,阿爾發欄位952被解譯為驅逐提示欄位952B,其內容區分驅逐提示的哪一個將被使用(在圖9A中,時序952B.1及非時序952B.2分別被指明用於記憶體存取,時序925指令樣板及記憶體存取,非時序930指令樣板),貝它欄位954係被解譯為資料調處欄位954C,其內容區分若干資料調處運算(也稱為基元)中之哪一個將被執行(例如,無調處、廣播、源的上轉換、及目的的下轉換)。記憶體存取920指令樣板包含標度欄位960,及選用地位移欄位962A或位移標度欄位962B。
向量記憶體指令執行具有轉換支援的來自記憶體的向量載入及將向量儲存至記憶體。如同一般向量指令,向量記憶體指令以資料元件為單位的方式傳送資料進出記憶體,實際被傳送的元件係為被選擇作為寫入遮罩的向量遮罩內容所支配。 記憶體存取指令樣板-時序
時序資料係為似乎將被足夠快速地重新使用,以由快取得到利益的資料。然而,這是提示並且不同處理器可以以不同方式實施它,包含整個忽略該提示。 記憶體存取指令樣板-非時序
非時序資料為似乎不夠快重新使用以在第1階快取的快取中得利並應給優先權驅逐的資料。然而,這是提示並且不同處理器可以以不同方式實施它,包含整個忽略該提示。 類型B的指令樣板
在類型B的指令樣板中,阿爾發欄位952被解譯為寫入遮罩控制(Z)欄位952C,其內容區分為寫入遮罩欄位970所控制的寫入遮罩是否應為合併或歸零。
在類型B的非記憶體存取905指令樣板情況中,貝它欄位954的部份被解譯為RL欄位957A,其內容區分不同擴增運算類型之哪一個將被執行(例如,捨入957A.1及向量長度(VSIZE)957A.2係分別指明用於無記憶體存取寫入遮罩控制部份捨入控制類型運算912指令樣板及無記憶體存取寫入遮罩控制VSIZE類型運算917指令樣板),而貝它欄位954的其他則區分所指明類型的哪一運算將被執行。在無記憶體存取905指令樣板中,標度欄位960、位移欄位962A、及位移標度欄位962B並未出現。
在無記憶體存取,寫入遮罩控制部份捨入控制類型運算910指令樣板中,貝它欄位954的其他部份被解譯為捨入運算欄位959A及異常事件報告被去能(給定指令並未報告任何類型浮點異常旗標並且不會啟動任何浮點異常處置器)。
捨入運算控制欄位959A-如同捨入運算控制欄位958,其內容區分一群捨入運算(例如,捨進、捨去、捨向零、及捨至最近值)的哪一被執行。因此,捨入運算控制欄位959A允許以每指令為主地作捨入模式的改變。在本發明處理器包含用以指明捨入模式的控制暫存器之一實施例中,捨入運算控制欄位950的內容置換該暫存器值。
在無記憶體存取寫入遮罩控制VSIZE類型運算917指令樣板中,貝它欄位954的剩餘部份被解譯為向量長度欄位959B,其內容區分若干資料向量長度之哪一將被執行(例如,128、256或512位元組)。
在類型B的記憶體存取920指令樣板中,貝它欄位954的一部份被解譯為廣播欄位957B,其內容區分廣播類型資料調處運算是否被執行,而貝它欄位954的剩餘部份被解譯為向量長度欄位959B。記憶體存取920指令樣板包含標度欄位960,及選用地位移欄位962A或位移標度欄位962B。
有關於同屬向量友善指令格式900,全運算碼欄位974係被顯示包含格式欄位940、基礎運算欄位942、及資料元件寬度欄位964。雖然在一實施例中顯示全運算碼欄位974包含所有這些欄位,但在不支援它們全部的實施例中,全運算碼欄位974不包含所有這些欄位。全運算碼欄位974提供運算碼(opcode)。
擴增運算欄位950,資料元件寬度欄位964、及寫入遮罩欄位970允許這些特性在同屬向量友善指令格式中,以每指令為基礎地被指明。
寫入遮罩欄位與資料元件寬度欄位的組合建立類型指令,在於它們允許遮罩根據不同資料元件寬度被應用。
在類型A及類型B中所找到的各種指令樣板係有利於不同情況。在本發明的一些實施例中,不同處理器或處理器內的不同核心可以只支援類型A、類型B或兩種類型。例如,用於通用計算的高效通用亂序核心可以只支援類型B,主要用於圖型及/或科學(通量)計算的核心可以只支援類型A,及用於兩者的核心可以支援兩者(當然,具有來自兩類型的樣板與指令的一些混合,但不是來自兩類型的所有樣板與指令的核心也是在本發明的範圍內)。同時,單一處理器可以包含多重核心,其所有核心均支援相同類型或其中不同核心支援不同類型。例如,在具有分開圖形與通用核心的處理器中,主要作圖形及/或科學計算的圖形核心之一可以只支援類型A,而一或更多通用核心可以為高效通用核心,具有只支援類型B的通用計算的亂序執行及暫存器重命名。並不具有分開圖形核心的另一處理器可以包含一或更多通用循序或亂序核心,其支援類型A及類型B。當然,來自一類型的特性也可以於本發明不同實施例中實施於其他類型中。以高階語言寫入的程式也可以被置入(例如,即時編譯或靜態編譯)至各種不同可執行形式中,包含:1)只具有為目標處理器所支援的類型的指令的形式供執行;或2)一種形式,具有使用所有類型的指令的不同組合所寫的替代常式及具有根據現正執行該碼的處理器所支援的指令,來選擇予以執行的常式的控制流程碼。 例示特定向量友善指令格式
圖10A為依據本發明實施例之例示特定向量友善指令格式的方塊圖。圖10A顯示特定向量友善指令格式1000,其特定在於其指明位置、大小、解譯、及欄位的順序,以及用於部份這些欄位的值。該特定向量友善指令格式1000可以被用以擴充x86指令集,及因此,一些欄位係與現存x86指令集及其擴充(例如,AVX)所用者類似或相同。此格式保持與具有擴充的現存x86指令集的前置編碼欄位、真運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位及立即值欄位相符。來自圖10A的欄位映射至來自圖9的欄位係被顯示。
應了解,雖然本發明的實施例係以同屬向量友善指令格式900的上下文參考特定向量友善指令格式1000描述作例示目的,但除非特別主張,否則本發明並不限於特定向量友善指令格式1000。例如,雖然特定向量友善指令格式1000係被顯示具有特定大小的欄位,但同屬向量友善指令格式900考量各種可能大小用於各種欄位。作為特定例子,雖然資料元件寬度欄位964係被例示為在特定向量友善指令格式1000中的一位元欄位,但本發明並不限於此(即,同屬向量友善指令格式900考量其他大小的資料元件寬度欄位964)。
同屬向量友善指令格式900包含下列的在圖10A所示的順序的以下欄位。
EVEX Prefix(位元組0-3)1002-係被編碼為四位元組形式。
格式欄位940(EVEX 位元組0,位元[7:0])-第一位元組(EVEX位元組0)係為格式欄位940及其包含0x62(用以區分在本發明一實施例中的向量友善指令格式的特有值)。
第二-第四位元組(EVEX位元組1-3)包含提供特定能力的若干位元欄位。
REX欄位1005(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及957BEX位元組1,位元(5)-B)所構成。EVEX.R、EVEX.X及EVEX.B位元欄位提供與對應VEX位元欄位相同的功能,並使用1的補數形式加以編碼,即ZMM0被編碼為1111B、ZMM15被編碼為0000B。如同本技藝所知,指令的其他欄位編碼暫存器索引的較低3位元(rrr、xxx、及bbb),使得Rrrr、Xxxx、及Bbbb可以藉由加入EVEX.R、EVEX.X及EVEX.B加以形成。
REX’欄位910-此為REX’欄位910的第一部份並為EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’),其係用以編碼擴充32個暫存器組的上16個或下16個暫存器。在本發明之一實施例中,此位元與如下所指的其他位元係被以位元反相格式儲存,以區分(以已知x86的32-位元模式)開BOUND指令,其真運算碼位元組為62,但並不接受於MOD R/M欄位(如下述),在MOD欄位中的11的值;本發明之其他實施例並不儲存此與另一則以反相格式指示以下位元。1的值係用以編碼下16個暫存器。換句話說,R’Rrrr係由組合EVEX.R’、EVEX.R及來自其他欄位的其他RRR所形成。
運算碼映射欄位1015(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼暗示的前導運算碼位元組(0F、0F 38、或0F 3)。
資料元件寬度欄位964(EVEX位元組2,位元[7]-W)-為標示EVEX.W所代表。EVEX.W被用以界定資料類型的粒度(大小)(32位元資料元件或64位元資料元件)。
EVEX.vvvv1020(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的角色可以包含如下:1)EVEX.vvvv編碼以反相(1的補數)形式指明的第一源暫存器運算元並係對具有2或更多源運算元的指令有效;2)對於某些向量位移,EVEX.vvvv編碼以1的補數形式所指明的目的暫存器運算元;或3)EVEX.vvvv並未編碼任何運算元,此欄位係被保留並應包含1111b。因此,EVEX.vvvv欄位1020編碼以反相(1的補數)形式儲存的第一源暫存器指明碼的4個較低階位元。取決於該指令,額外不同EVEX位元欄位係用以擴充指明碼大小至32個暫存器。
EVEX.U968類型欄位(EVEX位元組2,位元[2]-U)-如果EVEX.U=0,則它表示類型A或EVEX.U0;如果EVEX.U=1,則它表示類型B或EVEX.U1。
前置編碼欄位1025(EVEX位元組2,位元[1:0]-pp)-提供額外位元給基礎運算欄位。除了提供以EVEX前置格式的傳統SSE指令支援外,這也具有緊縮SIMD前置的優點(而不需要一位元組,來表達SIMD前置,EVEX前置只需2位元)。在一實施例中,為了支援使用以傳統格式及以EVEX前置格式表示的SIMD前置(66H、F2H、F3H)的傳統SSE指令,這些傳統SIMD前置係被編碼為SIMD前置編碼欄位;及在運行時間中在被提供給解碼器的PLA前被擴充入傳統SIMD前置(使得PLA可以執行這些傳統指令的傳統及EVEX格式,而不必修改)。雖然較新指令可以使用EVEX前置編碼欄位的內容直接作為運算碼擴充,但某些實施例中以類似方式擴充,用以符合但允許不同意義可以為這些傳統SIMD前置所指明。另一實施例也可以重新設計PLA,以支援2位元SIMD前置編碼,因此,並不需要擴充。
阿爾發欄位952(EVEX位元組3,位元[7]-EH;也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也被以α例示)-如先前所述,此欄位為特定上下文。
貝它欄位954(EVEX位元組3,位元[6:4]-SSS,也稱為EVEX.s­ 2-0、EVEX.r 2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也被以βββ例示)-如先前所述,此欄位為特定上下文。
REX’欄位910-此為REX’欄位的剩餘部份並為EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’)其係被用以編碼擴充32暫存器組的較高16個或較低16個暫存器。此位元被以位元反相格式儲存。1的值用以編碼較低16個暫存器。換句話說,V’VVVV係藉由組合EVEX.V’與EVEX.vvvv形成。
寫入遮罩欄位970(EVEX位元組3,位元[2:0]-kkk)-如前所述,其內容指明在寫入遮罩暫存器中的暫存器的索引。在本發明之一實施例中,特定值EVEX.kkk=000具有暗示無寫入遮罩被使用於該特定指令的特殊行為(這可以以各種方式加以實行,包括使用寫入遮罩全硬接線為1或者使用旁路開遮罩硬體的硬體)。
真實運算碼欄位1030(位元組4)也稱為運算碼位元組。運算碼的一部份被指明在此欄位中。
MOD R/M欄位1040(位元組5)包含MOD欄位1042、Reg欄位1044、及R/M欄位1046。如前所述,MOD欄位1042的內容區分記憶體存取與非記憶體存取運算。Reg欄位1044的角色可以被總結為兩狀況:編碼目的暫存器運算元或源暫存器運算元,或被視為運算碼延伸並且不被用來編碼任何指令運算元。R/M欄位1046的角色可以包含如下:編碼參考記憶體位址的指令運算元,或編碼目的暫存器運算元或源暫存器運算元。
標度,索引,基礎(SIB)位元組(位元組6)-如前所述,標度欄位950的內容係用以記憶體位址產生。SIB.xxx 1054與SIB.bbb 1056-這些欄位的內容已經先前被參考有關於暫存器索引Xxxx及Bbbb。
位移欄位962A(位元組7-10)-當MOD欄位1042包含10,位元組7-10係為位移欄位962A,及其如同傳統32位元位移(disp32)相同地動作並以位元組粒度動作。
位移因數欄位962B(位元組7)-當MOD欄位1042包含01,位元組7為位移因數欄位962B。此欄位的位置係與傳統x86指令集8位元位移(disp8)的位置相同,並以位元組粒度動作。因為disp8為帶符號延伸,所以其可以只定址於-128至137偏移之間;以64位元組快取線表示,disp8使用8位元,其可以只設定四個真實有用值,即-128、-64、0及64;因為經常需要較大範圍,所以使用disp32;然而,disp32需要4個位元組。相對於disp8及disp32,位移因數欄位962B係為disp8的再解譯;當使用位移因數欄位962B時,實際位移為位移因數欄位的內容乘以記憶體運算元存取的大小(N)所決定。此類型的位移稱為disp8*N。此減少平均指令長度(單一位元組被使用於位移,但具有較寬大的範圍)。此壓縮位移係根據假設該有效位移為記憶體存取的粒度的倍數,因此,位址偏移的冗餘較低階位元並不需要被編碼。換句話說,位移因數欄位962B取代傳統x86指令集8-位元位移。因此,位移因數欄位962B被以與x86指令集8-位元位移相同的方式編碼(因此,在ModRM/SIB編碼規則中並沒有改變),只有一個異常,disp8被超載至disp8*N。換句話說,在編碼規則或編碼長度上並沒有改變,只在以硬體解譯位移值時有改變(其需要以該記憶體運算元的大小來定標該位移,以取得位元組為單位的位址偏移)。立即值欄位972如先前所述操作。 全運算碼欄位
圖10B為例示特定向量友善指令格式1000的欄位的方塊圖,其依據本發明之一實施例作成全運算碼欄位974。明確地說,全運算碼欄位974包含格式欄位940、基礎運算欄位942、及資料元件寬度(W)欄位964。基礎運算欄位942包含前置編碼欄位1025、運算碼映射欄位1015及真實運算碼欄位1030。 暫存器索引欄位
圖10C為例示特定向量友善指令格式1000的欄位的方塊圖,其依據本發明之一實施例作成暫存器索引欄位944。明確地說,暫存器索引欄位944包含REX欄位1005、REX’欄位1010、MOD R/M.reg欄位1044、MOD R/M.r/m欄位1046、VVVV欄位1020、xxx欄位1054、及bbb欄位1056。 擴增運算欄位
圖10D為例示特定向量友善指令格式1000的欄位的方塊圖,其作成依據本發明之一實施例的擴增運算欄位950。當類型(U)欄位968包含0時,其表示EVEX.U0(類型A 968A);當其包含1時,其表示EVEX.U1(類型B 968B)。當U=0及MOD欄位1042包含11(表示無記憶體存取運算)時,則阿爾發欄位952(EVEX位元組3,位元[7]-EH)被解譯為rs欄位952A。當rs欄位952A包含1(捨入952A.1)時,貝它欄位954(EVEX位元組3,位元[6:4]-SSS)被解譯為捨入控制欄位954A。捨入控制欄位954A包含一位元SAE欄位956及兩位元捨入運算欄位958。當rs欄位952A包含0(資料轉換952A.2)時,貝它欄位954(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料轉換欄位954B。當U=0及MOD欄位1042包含00、01或10時(代表記憶體存取運算),則阿爾發欄位952(EVEX位元組3,位元[7]-EH)被解譯為驅逐提示(EH)欄位952B及貝它欄位954(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料調處欄位954C。
當U=1時,阿爾發欄位952(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位952C。當U=1及MOD欄位1042包含11(表示無記憶體存取運算),則貝它欄位954的一部份(EVEX位元組3,位元[4]-S 0)被解譯為RL欄位957A;當其包含1(捨入957A.1)時,貝它欄位954的剩餘部份(EVEX位元組3,位元[6-5]-S 2-1)被解譯為捨入運算欄位959A,而當RL欄位957A包含0(VSIZE 957.A2)時,貝它欄位954的剩餘部份(EVEX位元組3,位元[6-5]-S 2-1)被解譯為向量長度欄位959B(EVEX位元組3,位元[6-5]-L 1-0)。當U=1及MOD欄位1042包含00、01或10時(表示記憶體存取運算),貝它欄位954(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位959B(EVEX位元組3,位元[6-5]-L 1-0)及廣播欄位957B(EVEX位元組3,位元[4]-B)。 例示暫存器架構
圖11為依據本發明之一實施例的暫存器架構1100的方塊圖。在所示實施例中,其中有32個向量暫存器1110,其係512位元寬;這些暫存器被稱為zmm0到zmm31。較低16個zmm暫存器的較低階256位元被重疊於暫存器ymm0-16之上。較低16個zmm暫存器的較低階128位元(ymm暫存器的較低階128位元)係重疊於暫存器xmm0-15之上。如下表所例示,特定向量友善指令格式1000運算於這些重疊暫存器檔案。
可調向量長度 類型 運算 暫存器
不包含向量長度欄位959B的指令樣板 A(圖9A;U=0) 910,915,925,930 zmm暫存器(向量長度為64位元組)
B(圖9B;U=1) 912 zmm暫存器(向量長度為64位元組)
包含向量長度欄位959B的指令樣板 B(圖9B;U=1) 917,927 zmm,ymm或xmm暫存器,取決向量長度欄位959B(向量長度為64位元組,32位元組或16位元組)
換句話說,向量長度欄位959B於最大長度與一或更多其他較短長度間作選擇,其中各個此等較短長度為前一長度的長度之一半;及沒有向量長度欄位959B的指令樣板運算以最大向量長度運算。再者,在一實施例中,特定向量友善指令格式1000的類型B指令樣板運算緊縮或純量單/雙倍精度浮點資料及緊縮或純量整數資料。純量運算係為在zmm/ymm/xmm暫存器中的最低階資料元件位置上執行的運算;愈高階資料元件位置係被保持為與指令前相同或取決於該實施例被歸零。
寫入遮罩暫存器1115-在例示實施例中,有8個寫入遮罩暫存器(k0至k7),各個大小具有64位元。在另一實施例中,寫入遮罩暫存器1115的大小為16位元。如前所述,在本發明之一實施例中,向量遮罩暫存器k0不能被使用作為寫入遮罩;當通常表示k0的編碼被使用作為寫入遮罩時,其選擇硬接線寫入遮罩為0xFFFF,作用上為去能用於該指令的寫入遮罩。
通用暫存器1125-在例示實施例中,有十六個64位元通用暫存器,其被與現行x86定址模式一起使用,以定址記憶體運算元。這些暫存器以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及R8至R15表示。
純量浮點堆疊暫存器檔案(x87堆疊)1145,其上混淆MMX緊縮整數平坦暫存器檔案1150-在所示實施例中,x87堆疊為八個元件堆疊,用以使用x87指令集擴充對32/64/80位元浮點資料執行純量浮點運算;而MMX暫存器係用以對64位元緊縮整數資料執行運算,及用以保有執行於MMX及XMM暫存器間的一些運算的運算元。
本發明之其他實施例也使用較寬或較窄暫存器。另外,本發明的其他實施例也可以使用更多、更少或不同暫存器檔案或暫存器。 例示核心架構、處理器、及電腦架構
處理器核心為了不同目的可以以不同方式實施,並實施在不同處理器內。例如,此等核心的實施法可以包含:1)想用於通用計算的通用循序核心;2)想用於通用計算的高效通用亂序核心;3)主要想用於圖形及/或科學(通量)計算的特殊目的核心。不同處理器的實施法可以包含:1)CPU包含想用於通用計算的一或更多通用循序核心及/或想用於通用計算的一或更多通用亂序核心;及2)共處理器,包含主要用於圖形及/或科學(通量)的一或更多特殊目的核心。此等不同處理器造成不同電腦系統架構,其可以包含:1)與該CPU分開的晶片上的共處理器;2)在與CPU相同封裝的分開晶粒上的共處理器;3)在與CPU相同晶粒上的共處理器(在此時,此共處理器有時被稱為特殊目的邏輯,例如積體圖形及/或科學(通量)邏輯,或特殊目的核心);及4)系統晶片,其在相同晶粒上可以包含所述CPU(有時稱應用核心或應用處理器)、上述共處理器、及其他功能。例示核心架構將再加以說明如下,其後有例示處理器與電腦架構的說明。 例示核心架構 循序與亂序核心方塊圖
圖12A為依據本發明實施例之顯現有例示循序管線及例示暫存器重命名、亂序發出/執行管線的方塊圖。圖12B為予以包括在依據本發明實施例的處理器中的循序架構核心及例示暫存器重命名、亂序發出/執行架構核心的例示實施例的方塊圖。在圖12A-B中的實線方塊例示循序管線及循序核心,而選用增加的虛線方塊例示暫存器重命名、亂序發出/執行管線及核心。假定循序態樣為亂序態樣的一次組,並將描述該亂序態樣。
在圖12A中,處理器管線1200包含擷取級1202、長度解碼級1204、解碼級1206、配置級1208、重命名級1210、排程(也稱為分派或發出)級1212、暫存器讀取/記憶體讀取級1214、執行級1216、寫回/記憶體寫入級1218、異常處置級1222、及確定級1224。
圖12B顯示處理器核心1290,包括耦接至執行引擎單元1250的前端單元1230,及兩者均耦接至記憶體單元1270。核心1290可以為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、很長指令字(VLIW)核心或混合或替代核心類型。在另一選擇中,核心1290可以為特殊目的核心,例如,比如網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心、或類似物。
前端單元1230包括耦接至指令快取單元1234的分支預測單元1232,該指令快取單元係耦接至指令轉譯旁看緩衝器(TLB)1236,該TLB 1236係耦接至指令擷取單元1238,該指令擷取單元1238係耦接至解碼單元1240。解碼單元1240(或解碼器)可以解碼指令並產生一或更多微運算、微碼登錄點、微指令、其他指令或由原始指令所解碼或所反映或所推導出的其他控制信號作為輸出。解碼單元1240也可以使用各種不同機制加以實施。適當機制的例子包含但並不限於查找表、硬體實施法、可程式邏輯陣列(PLA)、微碼唯讀記憶體(ROM)、等等。在一實施例中,核心1290包含微碼ROM或用以儲存某些巨集指令的微碼之其他媒體(例如,在解碼單元1240或以其他方式在其他前端單元1230內)。解碼單元1240係被耦接至執行引擎單元1250中的重命名/配置器單元1252。
執行引擎單元1250包含耦接至引退單元1254及一組一或更多排程器單元1256的重命名/配置器單元1252。排程器單元1256代表任意數量的不同排程器,包含保留站、中央指令窗等等。排程器單元1256係耦接至實體暫存器檔案單元1258。各個實體暫存器檔案單元1258代表一或更多實體暫存器檔案,不同實體暫存器檔案儲存一或更多不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標為下個予以執行的指令的位址)等等。在一實施例中,實體暫存器檔案單元1258包含向量暫存器單元、寫入遮罩暫存器單元、及純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器、及通用暫存器。實體暫存器檔案單元1258係為引退單元1254所重疊,以例示暫存器重命名及亂序執行可以被執行的各種方式(例如,使用重排序緩衝及引退暫存器檔案;使用未來檔案、歷史緩衝器、及引退暫存器檔案;使用暫存器映射及暫存器池;等等)。引退單元1254及實體暫存器檔案單元1258係耦接至執行叢集1260。執行叢集1260包含一組一或更多執行單元1262及一組一或更多記憶體存取單元1264。執行單元1262可以執行各種運算(例如,移位、加法、減法、乘法)並針對各種類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然一些實施例可以包含若干專用於特定函數或函數組的執行單元,但其他實施例可以包含只有一執行單元或多重執行單元,其所有都執行所有函數。排程器單元1256、實體暫存器檔案單元1258、及執行叢集1260被顯示為可能是複數個,因為某些實施例建立分開管線,用於某些類型的資料/運算(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各個具有其本身排程器單元、實體暫存器檔案單元、及/或執行叢集-及在分開記憶體存取管線情況中,某些實施例係被實施為只有此管線中之執行叢集具有記憶體存取單元1264)。應了解的是,當使用分開的管線時,這些管線之一或多者可以為亂序發出/執行及剩餘則為循序。
該組記憶體存取單元1264係耦接至記憶體單元1270,其包含資料TLB單元1272耦接至資料快取單元1274,及資料快取單元1274耦接至第2階(L2)快取單元1276。在一例示實施例中,記憶體存取單元1264可以包含負載單元、儲存位址單元、及儲存資料單元,其各個係耦接至記憶體單元1270中的資料TLB單元1272。指令快取單元1234更耦接至記憶體單元1270中的第2階(L2)快取單元1276。L2快取單元1276係耦接至一或更多其他階的快取並最後耦接至主記憶體。
例如,例示暫存器重命名、亂序發出/執行核心架構可以實施管線1200,如下:1)指令擷取1238執行擷取及長度解碼級1202及1204;2)解碼單元1240執行解碼級1206;3)重命名/配置器單元1252執行配置級1208及重命名級1210;4)排程器單元1256執行排程級1212;5)實體暫存器檔案單元1258及記憶體單元1270執行暫存器讀取/記憶體讀取級1214,該執行叢集1260實行執行級1216;6)記憶體單元1270及實體暫存器檔案單元1258執行寫回/記憶體寫入級1218;7)各種單元可以涉及於異常處置級1222中;及8)引退單元1254及實體暫存器檔案單元1258執行確定級1224。
核心1290可以支援一或更多指令集(例如,x86指令集(具有一些擴充,其已經在新版中被加入);美國加州Sunnyvale的MIPS科技的MIPS指令集;美國加州Sunnyvale的ARM控股的ARM指令集(具有例如NEON的選用額外擴充),其包含於此所述之指令。在一實施例中,核心1290包含邏輯,以支援緊縮資料指令集擴充(例如,AVX1、AVX2),藉以允許為很多多媒體應用所使用的運算予以使用緊縮資料加以執行。
應了解的是,核心可以支援多線程(執行兩或更多並列組運算或線程),並可以以各種方式完成,包含分時多線程、同時多線程(其中單一實體核心提供邏輯核心,用於各個線程,其中實體核心係被同時多線程),或其組合(例如,分時擷取及解碼及其後同時多線程,例如,在Intel®超線程技術)。
雖然暫存器重命名係以亂序執行加以描述,但應了解的是,暫存器重命名也可以使用於循序架構中。雖然處理器的例示實施例也包含分開指令與資料快取單元1234/1274及共享L2快取單元1276,但其他實施例也可以具有單一內部快取,來用於指令與資料,例如,第一階(L1)內部快取,或多階內部快取。在一些實施例中,該系統可以包含內部快取與核心及/或處理器外部的外部快取的組合。或者,所有這些快取可以在核心及/或處理器的外部。 特定例示循序核心架構
圖13A-B例示更特定例示循序核心架構的方塊圖,其中核心將為在晶片中之幾個邏輯方塊(包含相同類型及/或不同類型的其他核心)之一。取決於應用,該等邏輯方塊透過高頻寬互連網路(例如環狀網路)與其他固定功能邏輯、記憶體I/O介面及其他必要I/O邏輯相通訊。
圖13A為依據本發明實施例之單一處理器核心的方塊圖,其具有與晶粒上互連網路1302及第二階(L2)快取1304的本地次組的連接。在一實施例中,指令解碼器1300支援具有緊縮資料指令集擴充的x86指令集。L1快取1306允許低潛候存取快取記憶體進入純量與向量單元。雖然在一實施例中(為了簡化設計),純量單元1308及向量單元1310使用分開暫存器組(分別純量暫存器1312及向量暫存器1314)及轉換於其間之資料係被寫入記憶體,然後由第一階(L1)快取1306讀回,但本發明的其他實施例可以使用不同方式(例如,使用單一暫存器組或包含一通訊路徑,其允許資料能被傳送於兩暫存器檔案之間,而不被寫回及讀回)。
L2快取1304的本地次組為被細分為分開本地次組的全面L2快取的一部份,每一處理器核心有一本地次組。各個處理器核心具有對L2快取1304的本身本地次組的直接存取路徑。為處理器核心所讀取的資料係被儲存在其L2快取次組1304並可以並聯其他處理器核心存取其本身本地L2快取次組地快速存取。為處理器核心所寫入的資料係被儲存於本身L2快取次組1304並如果有必要並從其他次組排擠。環狀網路確保共享資料的共聚性。環狀網路係為雙向以允許例如處理器核心、L2快取及其他邏輯方塊的代理器在該晶片內彼此通訊。各個環狀資料路徑為每方向1012位元寬。
圖13B為依據本發明之實施例之在圖13A中的處理器核心的部份的擴充圖。圖13B包含L1快取1304的L1資料快取1306A部份,及有關於向量單元1310及向量暫存器1314的更詳細細節。明確地說,向量單元1310為16-寬向量處理單元(VPU)(見16-寬ALU 1328),其執行整數、單精度浮點、及雙精度浮點指令之一或更多者。VPU支援以拌和單元1320拌和暫存器輸入、以數值轉換單元1322A-B的數值轉換、及在記憶體輸入上的以複製單元1324的複製。寫入遮罩暫存器1326允許預測所得向量寫入。
圖14為依據本發明實施例之處理器1400的方塊圖,其可以具有一個以上核心、可以具有整合記憶體控制器,並可以具有整合圖形。在圖14中之實線方塊例示處理器1400,其具有一單一核心1402A、系統代理器1410、一組一或更多匯流排控制器單元1416、而選用部份的虛線方塊例示另一處理器1400,具有多個核心1402A-N、一組一或更多整合記憶體控制器單元1414在系統代理單元1410中、及特殊目的邏輯1408。
因此,處理器1400的不同實施法可以包含:1)具有為整合圖形及/或科學(通量)邏輯(其可以包含一或更多核心)的特殊目的邏輯1408,及核心1402A-N為一或更多通用核心(例如通用循序核心、通用亂序核心、及兩者的組合)的CPU;2)具有主要用於圖形及/或科學(通量)的大量特殊目的核心的核心1402A-N的共處理器;及3)具有大量通用循序核心的核心1402A-N的共處理器。因此,處理器1400可以為通用處理器、共處理器或特殊目的處理器,例如,比如網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量很多積集核心(MIC)共處理器(包含30或更多核心)、嵌式處理器或類似物。處理器可以實施於一或更多晶片上。使用若干製程技術,例如,BiCMOS、CMOS或NMOS之任一,處理器1400可以為一或更多基板的一部份及/或被實施在一或更多基板上。
記憶體階層包含在核心內之一或更多階快取、一組或一或更多共享快取單元1406、及耦接至該組整合記憶體控制器單元1414的外部記憶體(未示出)。該組共享快取單元1406可以包含一或更多中階快取,例如第2階(L2)、第3階(L3)、第4階(L4)、或其他階的快取、最後階快取(LLC)、及/或其組合。雖然在一實施例中,環為主互連單元1412互連整合圖形邏輯1408(整合圖形邏輯1408為特殊目的邏輯之一例子並也在此稱為特殊目的邏輯)、該組共享快取單元1406、及系統代理單元1410/整合記憶體控制器單元1414,但替代實施例也可以使用任意數量的已知技術,用以互連這些單元。在一實施例中,共聚性係被維持在一或更多快取單元1406與核心1402A-N之間。
在一些實施例中,一或更多核心1402A-N能多線程。系統代理器1410包含這些元件協調與操作核心1402A-N。該系統代理器單元1410可以包含例如電源控制單元(PCU)及顯示單元。PCU可以是或包含調節核心1402A-N與整合圖形邏輯1408的電力狀態所需的邏輯及元件。顯示單元係用以驅動一或更多外部連接顯示器。
核心1402A-N以架構指令集看來,可以為同質或異質,即兩或更多核心1402A-N可能可以執行相同指令集,而其他也可能只可以執行該指令集的次組或不同指令集。 例示電腦架構
圖15-18為例示電腦架構的方塊圖。用於在膝上型、桌上型、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、手機、攜帶式媒體播放器、手持裝置、及各種其他電子裝置的技藝中已知的其他系統設計及架構也可以適用。通常,能夠加入在此所揭示的處理器及/或其他執行邏輯的大量各種系統或電子裝置通常合適的。
現參考圖15,顯示依據本發明一實施例之系統1500的方塊圖。系統1500可以包含一或更多處理器1510、1515,其被耦接至控制器集線器1520。在一實施例中,控制器集線器1520包含圖形記憶體控制器集線器(GMCH)1590及輸入/輸出集線器(IOH)1550(其可以是在分開晶片上);GMCH 1590包含耦接至記憶體1540及共處理器1545的記憶體及圖形控制器;IOH 1550係將輸入/輸出(I/O)裝置1560耦接至GMCH 1590。或者,記憶體及圖形控制器之一或兩者係整合在處理器(如此所述)內,記憶體1540及共處理器1545係直接耦接至處理器1510,及控制器集線器1520係在具有IOH 1550的單一晶片內。
額外處理器1515的選用本質係以斷線表示於圖15中。各個處理器1510、1515可以包含於此所述之一或更多處理核心,並可以具有一些版本的處理器1400。
記憶體1540可以例如為動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或兩者的組合。對於至少一實施例,控制器集線器1520與處理器1510、1515透過例如前側匯流排(FSB)之多投匯流排、例如QuickPath互連(QPI)之點對點介面、或類似連接1595通訊。
在一實施例中,共處理器1545為特殊目的處理器,例如,比如高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌式處理器或類似物。在一實施例中,控制器集線器1520可以包含一整合圖形加速器。
以頻譜度量表示在實體資源1510、1515間有各種差異,包含架構、微架構、熱、電力消耗特性及類似物。
在一實施例中,處理器1510執行控制一般類型的資料處理運算的指令。內藏在該等指令內的可以為共處理器指令。處理器1510認出這些共處理器指令為應為附著共處理器1545所執行的類型。因此,處理器1510發出這些共處理器指令(或代表共處理器指令的控制信號)在共處理器匯流排器或其他互連上,給共處理器1545。共處理器1545接受及執行所接收的共處理器指令。
現參考圖16,顯示依據本發明實施例之第一更特定例示系統1600的方塊圖。如圖16所示,多處理器系統1600為點對點互連系統,並包含第一處理器1670及第二處理器1680,經由點對點互連1650耦接。各個處理器1670及1680可以為處理器1400的一些版本。在本發明之一實施例中,處理器1670及1680係分別為處理器1510及1515,而共處理器1638為共處理器1545。在另一實施例中,處理器1670及1680分別為處理器1510及共處理器1545。
處理器1670及1680係被顯示分別包含整合記憶體控制器(IMC)單元1672及1682。處理器1670也包含其匯流排控制器單元點對點(P-P)介面1676及1678的一部份;類似地,第二處理器1680包含P-P介面1686及1688。處理器1670、1680可經由點對點(P-P)介面1650使用P-P介面電路1678、1688交換資訊。如圖16所示,IMC 1672及1682將這些處理器耦接至個別記憶體,即記憶體1632及記憶體1634,其可以為本地附著至個別處理器的主記憶體的部份。
處理器1670、1680可以各個經由個別P-P介面1652、1654使用點對點介面電路1676、1694、1686、1698與晶片組1690交換資訊。晶片組1690可以選用地與共處理器1638經由高效介面1692交換資訊。在一實施例中,共處理器1638為特殊目的處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌式處理器或類似物。
共享快取(未示出)可以包含在任一處理器內或在兩處理器之外,同時,經由P-P互連與處理器連接,使得如果處理器置於低功率模式時,任一或兩處理器的本地快取資訊可以被儲存在共享快取中。
晶片組1690可以經由介面1696耦接至第一匯流排1616。在一實施例中,第一匯流排1616可以為週邊元件互連(PCI)匯流排,或例如PCI加速匯流排或另一第三代I/O互連匯流排的匯流排,但本發明的範圍並不限於此。
如於圖16所示,各種I/O裝置1614可以耦接至第一匯流排1616,並具有匯流排橋接器1618,其將第一匯流排1616耦接至第二匯流排1620。在一實施例中,一或更多額外處理器1615,例如,共處理器、高通量MIC處理器、GPGPU的加速器(例如,圖形加速器或數位信號處理器(DSP)單元)、場可程式閘陣列、或任何其他處理器,其係耦接至第一匯流排1616。在一實施例中,第二匯流排1620可以為低接腳計數(LPC)匯流排。在一實施例中,各種裝置可以耦接至第二匯流排1620,包含例如鍵盤及/或滑鼠1622、通訊裝置1627及儲存單元1628,例如磁碟機或其他大量儲存裝置,其可以包含指令/碼與資料1630。再者,音訊I/O 1624可以耦接至第二匯流排1620。注意,其他架構也有可能。例如,不同於圖16的點對點架構,系統也可以實施多投匯流排或其他此等架構。
現參考圖17,顯示依據本發明實施例之第二更特定例示系統1700的方塊圖。在圖16及17中之類似元件係有類似元件符號,及圖16的某些態樣已經由圖17中省略,以避免模糊圖17的其他態樣。
圖17例示處理器1670、1680可以分別包含整合記憶體及I/O控制邏輯(CL)1672及1682。因此,CL 1672、1682包含整合記憶體控制器單元及包含I/O控制邏輯。圖17例示不只是記憶體1632、1634耦接至CL 1672、1682,同時,I/O裝置1714也耦接至控制邏輯1672、1682。傳統I/O裝置1715係耦接至晶片組1690。
現參考圖18,顯示依據本發明實施例之SoC 1800的方塊圖。在圖14的類似元件具有類似元件符號。同時,虛線方塊為在更先進SoC上的選用特性。在圖18中,互連單元1802係耦接至:應用處理器1810,其包含一組一或更多核心1402A-N,其包含快取單元1404A-N,及共享快取單元1406;系統代理單元1410;匯流排控制器單元1416;一整合記憶體控制器單元1414;一組或一或更多共處理器1820,其可以包含整合圖形邏輯、影像處理器、音訊處理器、及視訊處理器;靜態隨機存取記憶體(SRAM)單元1830;直接記憶體存取(DMA)單元1832;及顯示單元1840,用以耦接至一或更多外部顯示器。在一實施例中,共處理器1820包含特殊目的處理器,例如,比如網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌式處理器、或類似物。
於此所揭露之機制的實施例可以實施為硬體、軟體、韌體或此等實施方式的組合。本發明之實施例可以實施為電腦程式或執行於可程式系統上的程式碼,可程式系統包含至少一處理器、儲存系統(包含揮發及非揮發記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
例如示於圖16的碼1630的程式碼可以應用至輸入指令,以執行於此所述之功能並產生輸出資訊。輸出資訊可以用已知方式應用至一或更多輸出裝置。為了本案的目的,處理系統包含任何系統,其具有處理器,例如,比如數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器。
程式碼可以以高階程序或物件導向程式語言實施,以與處理系統通訊。如果想要的話,程式碼也可以實施為組合或機器語言。事實上,於此所述之機制並不限於任何特定程式語言的範圍。在任何情況下,語言可以為編譯或解譯語言。
至少一實施例的一或更多態樣可以以儲存於機器可讀取媒體中的代表指令加以實施,其代表在處理器內的各種邏輯,其當為機器所讀取時使得機器製造邏輯以執行於此所述之技術。稱為”IP核心”的此等代表可以儲存於有形機器可讀取媒體並被供給至各客戶或製造設施,以載入製造機器,其實際作成該邏輯或處理器。
此機器可讀取儲存媒體可以包含但並不限於非暫態有形配置的製造物體或為機器或裝置所製成形成的物體,包含儲存媒體,例如硬碟,任何其他類型的碟片,包含軟碟、光碟、光碟唯讀記憶體(CD-ROM)、光碟可寫(CD-RW)、及磁光碟、例如唯讀記憶體(ROM)、隨機存取記憶體(RAM)的半導體裝置,RAM係例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式唯讀記憶體(EPROM)、快閃記憶體、電氣可抹除可程式唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或任何其他類型的媒體,其適用以儲存電子指令者。
因此,本發明實施例也包含非暫態有形機器可讀取媒體,包含指令或包含有設計資料,例如,硬體描述語言(HDL),其界定於此所述之結構、電路、設備、處理器及/或系統特性。此等實施例也可以稱為程式產品。 仿真(包含二進制轉譯、碼漸變等)
在一些情況下,指令轉換器可以被用以將來自源指令集的指令轉換為目標指令集。例如,指令轉換器可以轉譯(例如,使用靜態二進制轉譯、動態二進制轉譯,包含動態編譯)、漸變、仿真或以其他方式轉換指令為一或更多其他予以為該核心所處理的指令。指令轉換器可以實施為軟體、硬體、韌體或其組合。指令轉換器可以在處理器上、在處理器外、或部份在處理器內部份在處理器外。
圖19為依據本發明實施例之對比使用軟體指令轉換器以將源指令集中的二進制指令轉換為目標指令集中的二進制指令的方塊圖。在例示實施例中,指令轉換器為軟體指令轉換器,但或者指令轉換器可以被實施為軟體、硬體、韌體、或其各種組合。圖19顯示以高階語言1902表示的程式,其可以使用x86編譯器1904編譯,以產生x86二進制碼1906,其可以為具有至少一x86指令集核心1916的處理器所本機執行。具有至少一x86指令集核心1916的處理器代表任何處理器,其可執行與具有至少一x86指令集核心的英特爾處理器實質相同的功能,藉由相容執行或以其他方式處理(1)英特爾x86指令集核心的指令集的相當大部份或(2)應用程式或其他針對執行於具有至少一x86指令集核心的英特爾處理器的其他軟體的目標碼版本,以完成與具有至少一x86指令集核心的英特爾處理器實質相同結果。x86編譯器1904代表編譯器,其可操作以產生x86二進制碼1906(例如目標碼),其可以在有或沒有額外鏈結處理下被執行於具有至少一x86指令集核心的處理器1916上。類似地,圖19顯示以高階語言1902表示的程式可以使用替代指令集編譯器1908編譯,以產生替代指令集二進制碼1910,其可以為處理器在沒有至少一x86指令集核心的處理器1914 (例如,具有執行美國加州Sunnyvale的MIPS科技的MIPS指令集及/或美國加州Sunnyvale的ARM控股的ARM指令集的核心的處理器)所本機執行。指令轉換器1912係被用以將x86二進制碼1906轉換為沒有x86指令集核心的處理器1914所本機執行的碼。此轉換碼似乎不與另一指令集二進制碼1910相同,因為指令轉換器可以很困難製作;然而,所轉換碼將完成一般運算並可以由其他指令集作成指令。因此,指令轉換器1912代表軟體、韌體、硬體或其組合,透過仿真、模擬、或任何其他處理以允許處理器或其他電子裝置,在沒有x86指令集處理器或核心下,執行x86二進制碼1906。 例子
例子1提供一種處理器,包含:擷取電路,用以自指令儲存器擷取指令,該指令的格式包括運算碼(opcode)、第一源運算元識別符、第二源運算元識別符、及目的運算元識別符,其中各個識別符用以識別儲存有包含至少一複數元件的緊縮資料的位置,其中各個複數元件位置包含實部分量與虛部分量,解碼電路,用以解碼該指令,資料檢索電路,用以檢索有關於該第一源運算元識別符與該第二源運算元識別符的資料,及執行電路,用以:對於所述已識別第一與第二源運算元的各個緊縮資料元件位置,交叉相乘所述實部分量與虛部分量以產生四個積:實部分量的積、虛部分量的積、及兩個混合積,用以:依據該指令藉由總和所述四個積而產生複數結果,及用以儲存該複數結果至該已識別目的運算元的對應位置。
例子2包含例子1的物件,其中該指令包含向量-複數熔合乘加,及其中該執行電路,用以:藉由將該實部分量的積減去該虛部分量的積,產生該複數結果的該實部分量,藉由將所述兩個混合積相加,產生該複數結果的該虛部分量,及將該複數結果寫入至該目的運算元的對應緊縮資料元件位置。
例子3包含例子1的物件,其中該指令包含向量-複數熔合共軛乘加,及其中該執行電路用以:藉由將該虛部分量的該積與該實部分量的積相加,產生該複數結果的該實部分量,藉由將該兩混合積的一混合積減去該兩混合積的另一混合積,產生該複數結果的該虛部分量,及將該複數結果寫入至該目的運算元的對應緊縮資料元件位置。
例子4包含例子1至3中之任一的物件,其中該指令的該格式更包括寫入遮罩,該寫入遮罩的各個位元對應於在所述已識別目的運算元內的元件位置,其中當該位元被設定為第一值時,所產生的實部與虛部分量係被寫入至該目的運算元的所述元件位置,及當該位元被設定為第二值時,該目的運算元的該對應緊縮資料元件位置保持不變。
例子5包含例子1至4中之一的物件,其中所述已識別第一與第二源運算元用以包含至少兩複數,及其中該執行電路,用以一次一個複數元件地,串列地產生該已識別目的運算元的各個對應緊縮資料元件位置。
例子6包含例子1至5中之一的物件,其中所述已識別第一與第二源運算元係用以包含至少兩複數,及其中該執行電路,用以並列產生該已識別目的運算元的每一對應緊縮資料元件位置。
例子7包含例子6的物件,其中該執行電路用以在單一時鐘週期內對該至少兩元件執行所述被解碼指令。
例子8包含例子2的物件,其中所述已識別第一與第二源運算元為純量值,及各個包含單一複數。
例子9包含例子1的物件,其中所述已識別第一與第二運算元與所述已識別目的運算元的所述元件的寬度係為該運算碼的前置碼所決定。
例子10包含例子1至9中之一的物件,其中所述已識別第一與第二源運算元與所述已識別目的運算元的元件數目係為該運算碼所決定。
例子11提供一種方法,其包含:自指令儲存器擷取指令,該指令的格式包括運算碼、第一源運算元識別符、第二源運算元識別符、及目的運算元識別符,其中各個識別符係用以識別儲存有包含至少一複數的緊縮資料的位置,該複數包含對應實部分量與虛部分量的一對值,解碼該指令,檢索有關於該第一源運算元識別符與該第二源運算元識別符的資料,及執行該已解碼指令,用以對於所述已識別第一與第二源運算元的各個緊縮資料元件位置,交叉相乘所述實部分量與虛部分量以產生四個積:實部分量的積、虛部分量的積、及兩個混合積,用以依據該指令藉由總和所述四個積而產生複數結果,及用以儲存該複數結果至所述已識別目的運算元的對應位置。
例子12包含例子11之方法,其中該指令包含向量-複數熔合乘加,及執行該已解碼指令用以:藉由將該實部分量的該積減去該虛部分量的該積,產生該複數結果的該實部分量,藉由將所述兩個混合積相加,而產生該複數結果的該虛部分量,及將該複數結果寫入至該目的運算元的對應緊縮資料元件位置。
例子13包含例子11的方法,其中該指令包含向量-複數熔合乘加,及其中執行該已解碼指令用以:藉由將該虛部分量的該積與該實部分量的該積相加,產生該複數結果的該實部分量,藉由將該兩混合積的一混合積減去該兩混合積的另一混合積,產生該複數結果的該虛部分量,及將該複數結果寫入至該目的運算元的對應緊縮資料元件位置。
例子14包含例子11之方法,其中各個所述識別符係用以識別儲存有包含至少兩複數的緊縮資料的位置,及其中該執行電路,用以產生所述四個積及並列所述至少兩複數累加所述四個積至該目的運算元的所述至少兩複數元件的所述實部分量與虛部分量。
例子15包含例子14之方法,更包含在單一時鐘週期內對所述至少兩複數並列執行所述已解碼指令。
例子16包含例子11之方法,其中該指令的該格式更包含寫入遮罩,該寫入遮罩的各個位元對應於在該已識別目的運算元內的一元件位置,其中當該位元被設定為第一值時,所產生的實部分量與虛部分量予以被寫入至該目的運算元的所述元件位置,及當該位元被設定為第二值時,該目的運算元的對應緊縮資料元件位置予以保持不變。
例子17提供一種非暫態電腦可讀取儲存媒體,儲存有指令,當所述指令可為處理器所執行時,用以執行一方法,該方法包含:自指令儲存器擷取指令,該指令的格式包括運算碼、第一源運算元識別符、第二源運算元識別符、及目的運算元識別符,其中各個識別符係用以識別儲存有包含至少一複數的緊縮資料的位置,該複數包含對應實部分量與虛部分量的一對值,解碼該指令,檢索有關於該第一源運算元識別符與該第二源運算元識別符的資料,及執行該已解碼指令,用以對於所述已識別第一與第二源運算元的各個緊縮資料元件位置,交叉相乘所述實部分量與虛部分量以產生四個積:實部分量的積、虛部分量的積、及兩個混合積,用以依據該指令藉由總和所述四個積而產生複數結果,及用以儲存該複數結果至所述已識別目的運算元的對應位置。
例子18包含例子17的物件,其中各個所述識別符係予以用以識別儲存有包含至少一複數緊縮資料元件的位置,及其中該處理器用以產生四個積及並列所述至少兩複數,累加所述四個積至該目的運算元的所述至少兩複數元件的所述實部分量與虛部分量。
例子19包含例子18之物件,更包含在單一時鐘週期內對所述至少一元件執行該已解碼指令。
例子20包含例子18之物件,更包含對所述已識別第一與第二源運算元的每一元件,並列執行該已解碼指令。雖然於此所揭露之一些實施例涉及以硬體執行電路為背景作資料處置,但其他實施例也可以以儲存在非暫態機器可讀取有形媒體的資料或指令加以完成,當資料或指令為機器所執行時,使得機器執行配合至少一實施例的功能。在一實施例中,有關於本案實施例之功能係被實施在機器可執行指令中。所述指令可以被用以使得被規劃有指令的通用或特殊目的處理器執行至少一實施例的步驟。於此所揭露之實施例可以提供作為電腦程式產品或軟體,其可以包含具有指令儲存於其上的機器或電腦可讀取媒體,並被用以規劃電腦(或其他電子裝置),用以執行依據至少一實施例之一或更多運算。或者,實施例的步驟也可以為特殊硬體元件,或規劃電腦元件與固定功能硬體元件的任意組合所執行,該等硬體元件包含用以執行這些步驟的固定功能邏輯。
用以規劃邏輯以執行至少一實施例的指令可以被儲存在系統內的記憶體中,例如,DRAM、快取、快閃記憶體、或其他儲存器中。再者,該等指令可以透過網路或經由其他電腦可讀取媒體加以分配。因此,機器可讀取媒體可以包含任意機制,用以儲存或傳送以機器(例如,電腦)可讀取形式表示之資訊,但並不限於軟碟、光碟、微型碟、唯讀記憶體(CD-ROM)、及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹除可程式唯讀記憶體(EPROM)、電氣可抹除可程式唯讀記憶體(EEPROM)、磁或光學卡、快閃記憶體、或有形機器可讀取儲存器,用以透過網際網路經由電、光、音響或其他形式之傳遞信號(例如,載波、紅外線信號、數位信號等等)的資訊傳輸。因此,非暫態電腦可讀取媒體包含任意類型的有形機器可讀取媒體,其適用於以可為機器(例如,電腦)所讀取形式的儲存或傳送電子指令或資訊。
100:處理器 102:指令儲存器 103:擷取電路 104:解碼電路 106:執行電路 108:暫存器 110:記憶體 112:引退或確定電路 200:指令 202:運算碼 204:第一源運算元識別符 206:第二源運算元識別符 208:目的運算元識別符 250:指令 252:運算碼 254:第一源運算元識別符 256:第二源運算元識別符 258:目的運算元識別符 260:寫入遮罩 300:執行電路 302:第一源運算元 304:第二源運算元 306:目的運算元 310:乘法器 312:乘法器 314:乘法器 316:乘法器 318:加法器 320:加法器 322:符號反相器 400:執行電路 402:第一源運算元 404:第二源運算元 406:目的運算元 410:乘法器 412:乘法器 414:乘法器 416:乘法器 418:加法器 420:加法器 422:符號反相器 900:同屬向量友善指令格式 905:無記憶體存取 910:無記憶體存取全捨入控制類型運算 915:無記憶體存取資料轉換類型運算 920:記憶體存取 925:記憶體存取時序 930:記憶體存取非時序 912:無記憶體存取寫入遮罩控制部份捨入控制類型運算 917:無記憶體存取寫入遮罩控制vsize類型運算 927:記憶體存取寫入遮罩控制 940:格式欄位 942:基礎運算欄位 944:暫存器索引欄位 946:修改符欄位 946A:無記憶體存取 946B:記憶體存取 950:擴增運算欄位 952:阿爾發欄位 952A:RS欄位 952A.1:捨入 952A.2:資料轉換 952B.1:時序 952B.2:非時序 954:貝它欄位 954A:捨入控制欄位 954B:資料轉換欄位 954C:資料調處欄位 956:SAE欄位 958:捨入運算欄位 960:標度欄位 962A:位移欄位 962B:位移因數欄位 964:資料元件寬度欄位 968:類型欄位 968A:類型A 970:寫入遮罩欄位 972:立即值欄位 957A:RL欄位 952b:驅逐提示欄位 968B:類型B 952C:寫入遮罩控制欄位 957A.1:捨入 959A:捨入運算欄位 957A.2:Vsize 959B:向量長度欄位 957B:廣播欄位 1000:特殊向量友善指令格式 1002:EVEX前置 1005:REX欄位 1010:REX’欄位 1015:運算碼映射欄位 1020:EVEX.vvvv 1025:前置編碼欄位 1030:真運算碼欄位 1040:MOD R/M欄位 1042:MOD欄位 1044:Reg欄位 1046:R/M欄位 1050:SIB 1054:SIB.xxx 1056:SIB.bbb 1100:暫存器架構 1110:向量暫存器 1115:寫入遮罩整數平坦暫存器檔案 1125:通用暫存器 1145:純量堆疊暫存器檔案 1150:MMX緊縮整數平坦暫存器檔案 1200:處理器管線 1202:擷取級 1204:長度解碼級 1206:解碼級 1208:配置級 1210:重命名級 1212:排程級 1214:暫存器讀取/記憶體讀取級 1216:執行級 1218:寫回/記憶體寫入級 1222:異常處置級 1224:確定級 1230:前端單元 1232:分支預測單元 1234:指令快取單元 1236:指令轉譯旁看緩衝器 1238:指令擷取單元 1240:解碼單元 1250:執行引擎單元 1252:重命名/配置器單元 1254:引退單元 1256:排程單元 1258:實體暫存器單元 1260:執行叢集 1262:執行單元 1264:記憶體存取單元 1270:記憶體單元 1272:資料TLB單元 1274:資料快取單元 1276:第二階快取單元 1300:指令解碼器 1302:晶粒上互連網路 1304:第二階快取 1306:L1快取 1308:純量單元 1310:向量單元 1312:純量暫存器 1314:向量暫存器 1306A:L1資料快取 1314:向量暫存器 1320:拌和單元 1322A:數值轉換單元 1322B:數值轉換單元 1324:複製單元 1326:寫入遮罩暫存器 1328:ALU 1400:處理器 1402A-N:核心 1404A-N:快取單元 1406:共享快取單元 1408:特殊目的邏輯 1410:系統代理單元 1412:互連單元 1414:整合記憶體控制器單元 1416:匯流排控制器單元 1500:系統 1510:處理器 1515:處理器 1520:控制器集線器 1540:記憶體 1545:共處理器 1550:IOH 1560:輸入/輸出裝置 1590:GMCH 1600:糸統 1614:I/O裝置 1615:處理器 1616:第一匯流排 1618:匯流排橋接器 1620:第二匯流排 1627:通訊裝置 1628:儲存單元 1630:碼及資料 1632:記憶體 1634:記憶體 1638:共處理器 1639:高效介面 1650:點對點互連 1652:點對點互連 1670:第一處理器 1672:整合記憶體控制器單元 1676:點對點介面 1678:點對點介面 1680:第二處理器 1682:整合記憶體控制器單元 1686:P-P介面 1688:P-P介面 1690:晶片組 1692:介面 1694:點對點介面電路 1696:介面 1654:點對點介面 1698:點對點介面電路 1700:系統 1714:I/O裝置 1715:I/O裝置 1800:系統晶片 1802:互連單元 1810:應用處理器 1820:共處理器 1830:SRAM單元 1832:DMA單元 1840:顯示單元 1902:高階語言 1904:x86編譯器 1906:X86二進制碼 1908:指令集編譯器 1910:指令集二進制碼 1912:指令轉換器 1914:無x86指令集核心的處理器 1916:具至少一x86指令集核心的處理器
於此所揭露之實施例的各種優點將於熟習於本技藝者配合附圖讀取以下說明書與隨附申請專利範圍後而明顯了解,附圖中:
[圖1]為一方塊圖,例示用以依據一實施例執行將兩緊縮或純量複數相乘並累加該結果的指令的處理元件,
[圖2A-2B]例示包含在一指令中的欄位,該指令用以依據一些實施例將兩緊縮或純量複數相乘並累加該結果,
[圖2A]例示包含在一指令中之欄位,該指令用以依據一實施例將兩緊縮或純量複數相乘並累加該結果,
[圖2B]例示包含在一指令中之欄位,該指令用以依據一實施例使用寫入遮罩將兩緊縮或純量複數相乘並累加該結果,
[圖3]為執行電路,用以實施VCFMADD指令,用以依據一實施例將兩緊縮複數相乘並累加該結果,
[圖4]為執行電路,用以實施VCFCMADD指令,用以依據一實施例將兩緊縮複數相乘並累加該結果,
[圖5A]為一方塊流程圖,例示依據一實施例以執行一指令,以將兩緊縮複數相乘並累加該結果,
[圖5B]為一方塊流程圖,例示依據一實施例以執行一指令,以將兩緊縮複數相乘並累加該結果,
[圖5C]為一方塊流程圖,例示依據一實施例以執行一指令,以將兩緊縮複數相乘並累加該結果,
[圖6]為虛擬碼,用以例示執行電路的操作,以依據一實施例執行VCFMADD指令,
[圖7]為虛擬碼,用以例示執行電路的操作,以依據一實施例執行VCFMADD指令,
[圖8]為虛擬碼,用以例示執行電路的操作,以依據一實施例執行VCFCMADD指令,
[圖9A-9B]為方塊圖,例示依據本發明實施例之同屬向量友善指令格式與其指令樣板,
[圖9A]為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式與其類型A指令樣板,
[圖9B]為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式與其類型B指令樣板,
[圖10A]為一方塊圖,例示依據本發明實施例之例示特殊向量友善指令格式,
[圖10B]為一方塊圖,例示依據本發明一實施例之作成全運算碼欄位974的特殊向量友善指令格式的欄位,
[圖10C]為一方塊圖,例示依據本發明一實施例之作成暫存器索引欄位944的特殊向量友善指令格式的欄位,
[圖10D]為一方塊圖,例示依據本發明一實施例之作成擴增運算欄位950的特殊向量友善指令格式的欄位,
[圖11]為依據本發明一實施例之暫存器架構的方塊圖,
[圖12A]為一方塊圖,例示依據本發明實施例的例示循序管線及例示暫存器重命名、亂序發出/執行管線兩者,
[圖12B]為一方塊圖,例示依據本發明實施例的予以包含在一處理器中的循序架構核心的例示實施例及例示重命名亂序發出/執行架構核心兩者,
[圖13A-B]例示更特定例示循序核心架構的一方塊圖,其核心將會是在晶片中的幾個邏輯方塊(包含相同類型及/或不同類型的其他核心)之一,
[圖13A]為依據本發明實施例之單一處理器核心的方塊圖,與其連接至晶粒上互連網路1302及其第二階(L2)快取1304的本地次組,
[圖13B]為依據本發明實施例之在圖13A中的處理器核心的部份的擴充圖,
[圖14]為處理器1400的方塊圖,其依據本發明實施例可以具有一個以上核心,並可以具有整合記憶體控制器,並可以具有整合圖形,
[圖15-18]為例示電腦架構的方塊圖,
[圖15]為依據本發明一實施例之系統的方塊圖,
[圖16]為依據本發明實施例之第一更特殊例示系統的方塊圖,
[圖17]為依據本發明實施例之第二更特殊例示系統的方塊圖,
[圖18]為依據本發明實施例之SoC的方塊圖,及
[圖19]為一方塊圖,對比使用軟體指令轉換器,以依據本發明實施例將源指令集中之二進制指令轉換為目標指令集中的二進制指令。
300:執行電路
302:第一源運算元
304:第二源運算元
306:目的運算元
310:乘法器
312:乘法器
314:乘法器
316:乘法器
318:加法器
320:加法器
322:符號反相器

Claims (9)

  1. 一種處理器,包含: 一或更多核心,用以處理第一指令集架構的指令;及 耦接至該一或更多核心的特殊目的邏輯,以執行純量複數乘法運算與向量複數乘法運算,該特殊目的邏輯包含: 純量暫存器集,用以儲存:包含第一實部值與第一虛部值的第一純量複數以及包含第二實部值與第二虛部值的第二純量複數; 純量單元,用以執行該純量複數乘法運算,該純量單元:用以將第一與第二實部值相乘,以產生第一實部積;用以將該第一與第二虛部值相乘,以產生第二實部積;用以將該第一虛部值與該第一實部值相乘,以產生第一虛部積;及用以將該第二虛部值與該第二實部值相乘,以產生第二虛部積,該純量單元:用以使用該第一與第二實部積,以產生實部純量結果值;以及用以使用該第一與第二虛部積,以產生虛部純量結果值; 向量暫存器集,包含:第一源向量暫存器,用以儲存第一多數緊縮向量複數值;以及,第二源向量暫存器,用以儲存第二多數緊縮向量複數值,該第一與第二多數緊縮向量複數值的各個緊縮向量複數包含實部值與虛部值; 向量單元,用以執行該向量複數乘法運算,該向量單元用以交叉相乘該第一多數緊縮向量複數的各個緊縮向量複數的該實部值與該虛部值與該第二多數緊縮向量複數的對應緊縮向量複數的該實部值與該虛部值,以產生第一與第二實部積及第一與第二虛部積,該向量單元用以產生對應緊縮向量複數結果,該對應緊縮向量複數結果包含:使用該第一與第二實部積,所產生的對應實部結果值以及使用該第一與第二虛部積,所產生的對應虛部結果值;及 耦接至該純量單元與該向量單元的記憶體互連。
  2. 如請求項1之處理器,其中該對應實部結果值包含對應緊縮累加實部值的總和以及該第一實部積與該第二實部積間之差,及該對應虛部結果值包含對應緊縮累加虛部值、該第一虛部積及該第二虛部積的總和。
  3. 如請求項1之處理器,其中該對應實部結果值包含對應緊縮累加實部值、該第一實部積、及該第二實部積的總和,及該對應虛部結果值包含該緊縮累加虛部值的總和與該第一虛部積及該第二虛部積間之差。
  4. 如請求項1之處理器,其中各個該第一多數緊縮源複數、該第二多數緊縮源複數、及該多數緊縮累加複數為單精度浮點值。
  5. 如請求項1之處理器,其中該第一多數緊縮源複數與該第二多數緊縮源複數的複數包含32位元數及該緊縮累加複數大於32位元。
  6. 如請求項1之處理器,其中該特殊目的邏輯包含一或更多特殊目的核心,其中該一或更多特殊目的核心及該一或更多核心在單一晶粒上。
  7. 如請求項1之處理器,更包含: 整合記憶體控制器,用以將該處理器耦接至系統記憶體;及 排程器單元,用以排程向量複數乘法指令,以使得該向量單元用以執行該向量複數乘法運算。
  8. 如請求項7之處理器,更包含: 數值轉換單元,用以執行在該向量暫存器集中的值的數值轉換。
  9. 一種處理器設備,包含: 異質處理器,包含不同類型的資料處理資源,該資料處理資源包含: 指令處理電路,包含解碼器,用以解碼指令; 純量資料處理資源,耦接至該指令處理電路,以執行純量複數乘法運算,該純量資料處理資源包含: 純量暫存器集,用以儲存包含第一實部值與第一虛部值的第一純量複數及包含第二實部值與第二虛部值的第二純量複數; 純量單元,用以執行該純量複數乘法運算,該純量單元用以將該第一純量複數與該第二純量複數相乘,以產生包含實部純量結果與虛部純量結果的複數純量結果,該純量單元:用以將第一實部值與該第二實部值相乘,以產生第一實部積;用以將該第一虛部值與該二虛部值相乘,以產生第二實部積;用以將該第一虛部值與該第一實部值相乘,以產生第一虛部積;及用以將第二虛部值與該第二實部值相乘,以產生第二虛部積,該純量單元:用以使用該第一與第二實部積,產生實部純量結果值及用以使用該第一與第二虛部積,產生虛部純量結果值; 向量資料處理資源,耦接至該指令處理電路,以執行向量複數乘法運算,該向量資料處理資源包含: 向量暫存器集,包含:用以儲存第一多數緊縮向量複數的第一源向量暫存器及用以儲存第二多數緊縮向量複數的第二源向量暫存器,該第一與第二多數緊縮向量複數的各個緊縮向量複數包含實部值與虛部值; 向量單元,用以執行該向量複數乘法運算,該向量單元用以交叉相乘該第一多數緊縮向量複數的各個緊縮向量複數的該實部值與該虛部值與該第二多數緊縮向量複數的對應緊縮向量複數的該實部值與該虛部值,以產生第一與第二實部積及第一與第二虛部積,該向量單元用以產生對應緊縮向量複數結果,該對應緊縮向量複數結果包含:使用該第一與第二實部積,所產生的對應實部結果值以及使用該第一與第二虛部積,所產生的對應虛部結果值;及 耦接至該純量單元與該向量單元的記憶體互連。
TW112116228A 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法 TWI818885B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/283,384 US11023231B2 (en) 2016-10-01 2016-10-01 Systems and methods for executing a fused multiply-add instruction for complex numbers
US15/283,384 2016-10-01

Publications (2)

Publication Number Publication Date
TW202333049A true TW202333049A (zh) 2023-08-16
TWI818885B TWI818885B (zh) 2023-10-11

Family

ID=61758710

Family Applications (3)

Application Number Title Priority Date Filing Date
TW106126949A TWI756251B (zh) 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法
TW111105976A TWI804200B (zh) 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法
TW112116228A TWI818885B (zh) 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法

Family Applications Before (2)

Application Number Title Priority Date Filing Date
TW106126949A TWI756251B (zh) 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法
TW111105976A TWI804200B (zh) 2016-10-01 2017-08-09 執行複數的熔合乘-加指令的系統與方法

Country Status (5)

Country Link
US (3) US11023231B2 (zh)
EP (1) EP3519943A1 (zh)
CN (2) CN109791488B (zh)
TW (3) TWI756251B (zh)
WO (1) WO2018063513A1 (zh)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115480730A (zh) 2016-10-20 2022-12-16 英特尔公司 用于经融合的乘加的系统、装置和方法
WO2019005085A1 (en) * 2017-06-30 2019-01-03 Intel Corporation SYSTEMS, APPARATUSES, AND METHODS FOR COSMETIC AND / OR CONDENSED VINE CONTROLLED OPINATIONS
GB2564696B (en) * 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
US20190102198A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Systems, apparatuses, and methods for multiplication and accumulation of vector packed signed values
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US20190102186A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Systems, apparatuses, and methods for multiplication and accumulation of vector packed unsigned values
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
CN108920478B (zh) * 2018-04-16 2022-01-28 宁波三星医疗电气股份有限公司 基于小系统的批量数据分段采集方法
WO2020066375A1 (ja) * 2018-09-25 2020-04-02 日本電気株式会社 情報処理装置、情報処理方法、プログラム
US11474825B2 (en) 2019-03-27 2022-10-18 Intel Corporation Apparatus and method for controlling complex multiply-accumulate circuitry
CN110780842A (zh) * 2019-10-25 2020-02-11 无锡恒鼎超级计算中心有限公司 基于神威架构的船舶三维声弹性模拟计算的并行优化方法
CN112214242A (zh) * 2020-09-23 2021-01-12 上海赛昉科技有限公司 一种risc-v指令压缩方法、系统及计算机可读介质
CN112199119B (zh) * 2020-10-21 2022-02-01 上海壁仞智能科技有限公司 向量运算装置
US20220197975A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Apparatus and method for conjugate transpose and multiply
US20220197654A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Apparatus and method for complex matrix conjugate transpose
US20230004390A1 (en) * 2021-06-26 2023-01-05 Intel Corporation Apparatus and method for vector packed dual complex-by-complex and dual complex-by-complex conjugate multiplication
WO2023211494A2 (en) * 2021-11-03 2023-11-02 Analog Computation Enterprise Inc. Semiconductor devices for real number computation using computer integrated circuits implementing matter amplification by stimulated emission computation(s) (masec)
CN117289991A (zh) * 2022-06-14 2023-12-26 北京有竹居网络技术有限公司 处理器以及用于数据处理的方法、设备和存储介质
US20240111654A1 (en) * 2022-09-29 2024-04-04 Intel Corporation Hybrid performance monitoring unit (pmu) enumeration
CN117170750B (zh) * 2023-09-04 2024-04-30 上海合芯数字科技有限公司 多源操作数指令的调度方法、装置、处理器、设备及介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69519449T2 (de) * 1994-05-05 2001-06-21 Conexant Systems Inc Raumzeigersdatenpfad
US6272512B1 (en) 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US7392368B2 (en) 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US7546330B2 (en) * 2003-09-30 2009-06-09 Broadcom Corporation Systems for performing multiply-accumulate operations on operands representing complex numbers
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
JP2009048532A (ja) 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
GB2454201A (en) * 2007-10-30 2009-05-06 Advanced Risc Mach Ltd Combined Magnitude Detection and Arithmetic Operation
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9104510B1 (en) * 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit
US20120166511A1 (en) 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
ES2943248T3 (es) * 2011-04-01 2023-06-12 Intel Corp Formato de instrucción compatible con vectores y ejecución del mismo
WO2013095614A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Super multiply add (super madd) instruction
US9489197B2 (en) 2013-07-09 2016-11-08 Texas Instruments Incorporated Highly efficient different precision complex multiply accumulate to enhance chip rate functionality in DSSS cellular systems
DE102015006670A1 (de) * 2014-06-26 2015-12-31 Intel Corporation Befehle und logik zum bereitstellen von kryptographischer allzweck-gf(256)-simd- arithmetikfunktionalität

Also Published As

Publication number Publication date
EP3519943A1 (en) 2019-08-07
TW202223631A (zh) 2022-06-16
TWI804200B (zh) 2023-06-01
TW201820125A (zh) 2018-06-01
US11023231B2 (en) 2021-06-01
US20180095758A1 (en) 2018-04-05
TWI756251B (zh) 2022-03-01
TWI818885B (zh) 2023-10-11
CN109791488A (zh) 2019-05-21
WO2018063513A1 (en) 2018-04-05
CN109791488B (zh) 2024-02-06
US20240126546A1 (en) 2024-04-18
US20210357217A1 (en) 2021-11-18
CN117407058A (zh) 2024-01-16

Similar Documents

Publication Publication Date Title
TWI818885B (zh) 執行複數的熔合乘-加指令的系統與方法
US10089076B2 (en) Floating point scaling processors, methods, systems, and instructions
US10514912B2 (en) Vector multiplication with accumulation in large register space
US10671392B2 (en) Systems, apparatuses, and methods for performing delta decoding on packed data elements
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
KR20170097018A (ko) 벡터 브로드캐스트 및 xorand 로직 명령어를 위한 장치 및 방법
US9965276B2 (en) Vector operations with operand base system conversion and re-conversion
US9436435B2 (en) Apparatus and method for vector instructions for large integer arithmetic
US20140052968A1 (en) Super multiply add (super madd) instruction
JP6760935B2 (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
CN112988230A (zh) 用于将大约为一的浮点值相乘的指令的装置、方法和系统
TWI841041B (zh) 用於融合乘加運算的系統、裝置及方法
TW202143029A (zh) 用於將零值相乘之指令的設備、方法和系統