TW201729080A - 用於排列序列之指令及邏輯 - Google Patents

用於排列序列之指令及邏輯 Download PDF

Info

Publication number
TW201729080A
TW201729080A TW105137400A TW105137400A TW201729080A TW 201729080 A TW201729080 A TW 201729080A TW 105137400 A TW105137400 A TW 105137400A TW 105137400 A TW105137400 A TW 105137400A TW 201729080 A TW201729080 A TW 201729080A
Authority
TW
Taiwan
Prior art keywords
instruction
data
instructions
vector
processor
Prior art date
Application number
TW105137400A
Other languages
English (en)
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 TW201729080A publication Critical patent/TW201729080A/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一種處理器包括用以執行一指令之一核心,以及用以判定該指令將需要自記憶體中之源資料轉換之跨步資料的邏輯。該跨步資料用以包括來自該源資料中之結構的對應帶索引元素以載入至一最終暫存器中以用以執行該指令。該核心亦包括用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行的邏輯。該核心包括用以將排列指令應用於該等初步向量暫存器之內容以致使來自該等結構之對應帶索引元素載入至各別源向量暫存器中的邏輯。

Description

用於排列序列之指令及邏輯
發明領域 本發明係關於處理邏輯、微處理器及關聯指令集架構之領域,關聯指令集架構在由處理器或其他處理邏輯執行時執行邏輯、數學或其他功能操作。
發明背景 多處理器系統正變得愈來愈常見。多處理器系統之應用包括自始至終進行動態域分割直至桌上型計算。為了利用多處理器系統,可將待執行之程式碼分成多個執行緒以供各種處理實體執行。每一執行緒可彼此並行地執行。指令在其接收於一處理器上時可解碼成原生或更加原生之項或指令字,以供在該處理器上執行。處理器可實施於系統單晶片中。以三個至五個元素之元組而組織的資料結構可在媒體應用程式、高效能計算應用程式及分子動力學應用程式中使用。
依據本發明之一實施例,係特地提出一種處理器,其包含:用以接收一指令之一前端;用以解碼該指令之一解碼器;用以執行該指令之一核心,其包括:一第一邏輯,用以判定該指令將需要自記憶體中之源資料轉換之跨步資料,該跨步資料用以包括來自該源資料中之多個結構要被載入至一最終暫存器中來被用以執行該指令的對應帶索引元素;一第二邏輯,用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行;以及一第三邏輯,用以將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素要被載入至各別源向量暫存器中;以及用以淘汰該指令之一淘汰單元。
較佳實施例之詳細說明 以下實施方式描述用於在處理設備上執行操作之排列序列之指令及處理邏輯的實施例。排列序列可為跨步操作之部分,諸如Stride-5。此處理設備可包括無序處理器。在以下實施方式中,闡述諸如處理邏輯、處理器類型、微架構條件、事件、啟用機制及類似者之眾多特定細節,以便提供對本發明之實施例之更透徹的理解。然而,熟習此項技術者應瞭解,可在無此等特定細節的情況下實踐實施例。另外,尚未詳細地展示一些熟知結構、電路及類似者以避免不必要地混淆本發明之實施例。
儘管以下實施例係參考處理器予以描述,但其他實施例適用於其他類型之積體電路及邏輯裝置。本發明之實施例之相似技術及教示可應用於可受益於較高管線輸送量及經改良效能的其他類型之電路或半導體裝置。本發明之實施例之教示適用於執行資料操縱之任一處理器或機器。然而,該等實施例並不限於執行512位元、256位元、128位元、64位元、32位元或16位元資料操作之處理器或機器,且可應用於可執行資料之操縱或管理之任一處理器及機器。此外,以下實施方式提供實例,且隨附圖式出於說明之目的而展示各種實例。然而,不應在限制性意義上解釋此等實例,此係因為該等實例僅僅意欲提供本發明之實施例之實例,而非提供本發明之實施例的所有可能實施方案之詳盡清單。
儘管以下實例在執行單元及邏輯電路之上下文中描述指令處置及散佈,但本發明之其他實施例可藉由儲存於機器可讀有形媒體上之資料或指令而實現,該資料或該等指令在由機器執行時致使機器執行與本發明之至少一個實施例一致的功能。在一個實施例中,與本發明之實施例相關聯的功能係以機器可執行指令予以體現。該等指令可用以致使可運用該等指令而規劃之一般用途或特殊用途處理器執行本發明之步驟。本發明之實施例可被提供為電腦程式產品或軟體,其可包括機器或電腦可讀媒體,該媒體具有儲存於其上之指令,該等指令可用以規劃電腦(或其他電子裝置)以執行根據本發明之實施例的一或多個操作。此外,本發明之實施例的步驟可由含有用於執行該等步驟之固定功能邏輯的特定硬體組件執行,或由經規劃電腦組件與固定功能硬體組件之任何組合執行。
用以規劃邏輯以執行本發明之實施例的指令可儲存於系統中之記憶體內,諸如DRAM、快取記憶體、快閃記憶體或其他儲存體。此外,該等指令可經由網路或藉由其他電腦可讀媒體而散佈。因此,機器可讀媒體可包括用於以可由機器(例如,電腦)讀取之形式儲存或傳輸資訊的任何機構,但不限於軟碟、光碟、緊密光碟唯讀記憶體(CD-ROM)及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹除可規劃唯讀記憶體(EPROM)、電可抹除可規劃唯讀記憶體(EEPROM)、磁卡或光卡、快閃記憶體,或用於在網際網路上經由電、光學、聲學或其他形式之傳播信號(例如,載波、紅外線信號、數位信號等等)來傳輸資訊的有形機器可讀儲存體。因此,電腦可讀媒體可包括適合於以可由機器(例如,電腦)讀取之形式儲存或傳輸電子指令或資訊的任何類型之有形機器可讀媒體。
一設計可經歷各種階段:自建立至模擬至製造。表示設計之資料可以數種方式表示設計。首先,可使用硬體描述語言或另一功能描述語言來表示硬體,此在模擬中可為有用的。另外,可在設計程序之一些階段產生具有邏輯及/或電晶體閘極之電路層級模型。此外,在某一階段,設計可達到表示各種裝置在硬體模型中之實體置放的資料層級。在使用一些半導體製造技術之狀況下,表示硬體模型之資料可為指定各種特徵在用於用以生產積體電路之遮罩之不同遮罩層上之存在或不存在的資料。在設計之任何表示中,可以機器可讀媒體之任一形式儲存資料。記憶體或磁性或光學儲存體(諸如光碟)可為用以儲存資訊之機器可讀媒體,該資訊係經由經調變或以其他方式產生以傳輸此資訊之光波或電波而傳輸。當傳輸指示或攜載程式碼或設計之電載波時,在執行電信號之複製、緩衝或重新傳輸的程度上,可產生新複本。因此,通訊提供者或網路提供者可至少臨時地在有形機器可讀媒體上儲存體現本發明之實施例之技術的物品,諸如被編碼成載波之資訊。
在現代處理器中,數個不同執行單元可用以處理及執行多種程式碼及指令。一些指令之完成可較快,而其他指令之完成可花費數個時脈循環。指令之輸送量愈快,則處理器之總體效能愈好。因此,將有利的是使一樣多的指令儘可能快地執行。然而,可存在具有較大複雜性且在執行時間及處理器資源方面需要更多之某些指令,諸如浮點指令、載入/儲存操作、資料移動等等。
隨著較多電腦系統用於網際網路、文字及多媒體應用程式中,已隨著時間推移而引入額外處理器支援。在一個實施例中,一指令集可與一或多個電腦架構相關聯,該一或多個電腦架構包括資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及例外狀況處置,以及外部輸入及輸出(I/O)。
在一個實施例中,指令集架構(ISA)可由可包括用以實施一或多個指令集之處理器邏輯及電路的一或多個微架構實施。因此,具有不同微架構之處理器可共用共同指令集之至少一部分。舉例而言,Intel® Pentium 4處理器、Intel® Core™處理器及來自Sunnyvale CA之Advanced Micro Devices公司之處理器實施x86指令集之幾乎相同的版本(其中已運用較新版本而添加一些延伸),但具有不同的內部設計。相似地,由其他處理器開發公司(諸如ARM Holdings有限公司、MIPS,或其使用人或採用者)設計之處理器可共用共同指令集之至少一部分,但可包括不同的處理器設計。舉例而言,可在使用新技術或熟知技術之不同微架構中以不同方式實施ISA之相同暫存器架構,包括專用實體暫存器、使用暫存器重新命名機制(例如,使用暫存器別名表格(RAT)之一或多個動態分配實體暫存器、重新排序緩衝器(ROB)及淘汰暫存器檔案。在一個實施例中,暫存器可包括一或多個暫存器、暫存器架構、暫存器檔案,或可為或可不為軟體規劃師可定址之其他暫存器集。
一指令可包括一或多個指令格式。在一個實施例中,指令格式可指示用以尤其指定待執行之運算及彼運算將被執行之運算元的各種欄位(位元之數目、位元之位置等等)。在一另外實施例中,一些指令格式可進一步由指令範本(或子格式)界定。舉例而言,給定指令格式之指令範本可被界定為具有指令格式之欄位的不同子集,及/或被界定為具有經不同解譯之給定欄位。在一個實施例中,指令可使用指令格式(且在被界定的情況下,以彼指令格式之指令範本中之給定者)予以表達,且指定或指示運算及運算元,該運算將對該等運算元進行運算。
科學、金融、自動向量化一般用途、RMS (辨識、採擷及合成)以及視覺及多媒體應用程式(例如,2D/3D圖形、影像處理、視訊壓縮/解壓縮、語音辨識演算法及音訊操縱)可需要對大量資料項目執行相同操作。在一個實施例中,單指令多資料(SIMD)指代致使處理器對多個資料元素執行操作的一類型之指令。SIMD技術可用於可邏輯上將暫存器中之位元劃分成數個固定大小或可變大小之資料元素的處理器中,該等資料元素中之每一者表示一單獨值。舉例而言,在一個實施例中,64位元暫存器中之位元可被組織為含有四個單獨16位元資料元素之源運算元,該等資料元素中之每一者表示一單獨16位元值。此類型之資料可被稱作「封裝」資料類型或「向量」資料類型,且此資料類型之運算元可被稱作封裝資料運算元或向量運算元。在一個實施例中,封裝資料項目或向量可為儲存於單一暫存器內之一連串封裝資料元素,且封裝資料運算元或向量運算元可為SIMD指令(或「封裝資料指令」或「向量指令」)之源或目的地運算元。在一個實施例中,SIMD指令指定待對兩個源向量運算元執行以產生具有相同或不同大小、具有相同或不同數目個資料元素且呈相同或不同資料元素次序之目的地向量運算元(亦被稱作結果向量運算元)的單一向量運算。
諸如由以下處理器使用之技術的SIMD技術已實現應用效能之顯著改良:Intel® Core™處理器,其具有包括x86、MMX™、串流SIMD延伸(SSE)、SSE2、SSE3、SSE4.1及SSE4.2指令之指令集;ARM處理器,諸如ARM Cortex®處理器家族,其具有包括向量浮點(VFP)及/或NEON指令之指令集;及MIPS處理器,諸如由中國科學院計算技術研究所開發之Loongson處理器家族(Core™及MMX™為Santa Clara, Calif.之Intel Corporation的註冊商標或商標)。
在一個實施例中,目的地及源暫存器/資料可為表示對應資料或操作之源及目的地之一般術語。在一些實施例中,其可由暫存器、記憶體或具有與所描繪之名稱或功能不同之名稱或功能的其他儲存區域實施。舉例而言,在一個實施例中,「DEST1」可為臨時儲存暫存器或其他儲存區域,而「SRC1」及「SRC2」可為第一及第二源儲存暫存器或其他儲存區域等等。在其他實施例中,SRC及DEST儲存區域中之兩者或多於兩者可對應於同一儲存區域(例如,SIMD暫存器)內之不同資料儲存元件。在一個實施例中,源暫存器中之一者亦可藉由(例如)將對第一及第二源資料執行之運算之結果寫回至充當目的地暫存器之兩個源暫存器中之一者來充當目的地暫存器。
圖1A為根據本發明之實施例的例示性電腦系統之方塊圖,該電腦系統被形成有可包括用以執行指令之執行單元的處理器。根據本發明,諸如在本文中所描述之實施例中,系統100可包括諸如用以使用執行單元之處理器102的組件,該等執行單元包括用以執行用於程序資料之演算法的邏輯。系統100可表示基於可購自Santa Clara, California之Intel Corporation的PENTIUMÒ III、PENTIUMÒ 4、XeonTM 、ItaniumÒ 、XScaleTM 及/或StrongARMTM 微處理器之處理系統,但亦可使用其他系統(包括具有其他微處理器、工程設計工作站、機上盒及類似者之PC)。在一個實施例中,樣本系統100可執行可購自Redmond, Washington之Microsoft Corporation的WINDOWSTM 作業系統之版本,但亦可使用其他作業系統(例如,UNIX及Linux)、嵌入式軟體及/或圖形使用者介面。因此,本發明之實施例並不限於硬體電路系統與軟體之任何特定組合。
實施例並不限於電腦系統。本發明之實施例可用於諸如手持型裝置及嵌入式應用之其他裝置中。手持型裝置之一些實例包括蜂巢式電話、網際網路協定裝置、數位攝影機、個人數位助理(PDA)及手持型PC。嵌入式應用可包括微控制器、數位信號處理器(DSP)、系統單晶片、網路電腦(NetPC)、機上盒、網路集線器、廣域網路(WAN)交換器,或可執行根據至少一個實施例之一或多個指令之任何其他系統。
電腦系統100可包括處理器102,處理器102可包括一或多個執行單元108以執行演算法以執行根據本發明之一個實施例的至少一個指令。可在單一處理器桌上型電腦或伺服器系統之上下文中描述一個實施例,但其他實施例可包括於多處理器系統中。系統100可為「集線器」系統架構之實例。系統100可包括用於處理資料信號之處理器102。處理器102可包括複雜指令集電腦(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實施指令集之組合的處理器,或任何其他處理器裝置,諸如數位信號處理器。在一個實施例中,處理器102可耦接至可在處理器102與系統100中之其他組件之間傳輸資料信號的處理器匯流排110。系統100之元件可執行熟習此項技術者所熟知之習知功能。
在一個實施例中,處理器102可包括層級1 (L1)內部快取記憶體104。取決於架構,處理器102可具有單一內部快取記憶體或多個層級之內部快取記憶體。在另一實施例中,快取記憶體可駐留於處理器102外部。取決於特定實施方案及需要,其他實施例亦可包括內部快取記憶體與外部快取記憶體之組合。暫存器檔案106可將不同類型之資料儲存於包括整數暫存器、浮點暫存器、狀態暫存器及指令指標暫存器之各種暫存器中。
執行單元108 (包括用以執行整數及浮點運算的邏輯)亦駐留於處理器102中。處理器102亦可包括儲存用於某些巨集指令之微碼的微碼(ucode) ROM。在一個實施例中,執行單元108可包括用以處置封裝指令集109的邏輯。藉由在一般用途處理器102之指令集中包括封裝指令集109,連同用以執行指令之關聯電路系統,可使用一般用途處理器102中之封裝資料來執行由許多多媒體應用程式使用之操作。因此,可藉由使用處理器之資料匯流排的全寬以用於對封裝資料執行操作來更高效地加速及執行許多多媒體應用程式。此可消除對橫越處理器之資料匯流排傳送較小資料單元以每次對一個資料元素執行一或多個操作的需要。
亦可在微控制器、嵌入式處理器、圖形裝置、DSP及其他類型之邏輯電路中使用執行單元108之實施例。系統100可包括記憶體120。記憶體120可被實施為動態隨機存取記憶體(DRAM)裝置、靜態隨機存取記憶體(SRAM)裝置、快閃記憶體裝置或其他記憶體裝置。記憶體120可儲存由可由處理器102執行之資料信號表示的指令119及/或資料121。
系統邏輯晶片116可耦接至處理器匯流排110及記憶體120。系統邏輯晶片116可包括記憶體控制器集線器(MCH)。處理器102可經由處理器匯流排110而與MCH 116通訊。MCH 116可提供至記憶體120之高頻寬記憶體路徑118以用於指令119及資料121之儲存及用於圖形命令、資料及紋理之儲存。MCH 116可在處理器102、記憶體120與系統100中之其他組件之間引導資料信號,且在處理器匯流排110、記憶體120與系統I/O 122之間橋接資料信號。在一些實施例中,系統邏輯晶片116可提供用於耦接至圖形控制器112之圖形埠。MCH 116可透過記憶體介面118而耦接至記憶體120。圖形卡112可透過加速圖形埠(AGP)互連件114而耦接至MCH 116。
系統100可使用專屬集線器介面匯流排122以將MCH 116耦接至I/O控制器集線器(ICH) 130。在一個實施例中,ICH 130可經由本機I/O總線而提供至一些I/O裝置之直接連接。本機I/O匯流排可包括用於將周邊設備連接至記憶體120、晶片組及處理器102之高速I/O匯流排。實例可包括音訊控制器129、韌體集線器(快閃BIOS) 128、無線收發器126、資料儲存體124、含有使用者輸入介面125 (其可包括鍵盤介面)之舊版I/O控制器123、諸如通用串列匯流排(USB)之串列擴展埠127,及網路控制器134。資料儲存裝置124可包含硬碟機、軟碟機、CD-ROM裝置、快閃記憶體裝置,或其他大容量儲存裝置。
對於系統之另一實施例,根據一個實施例之指令可與系統單晶片一起使用。系統單晶片之一個實施例包含處理器及記憶體。用於一個此類系統之記憶體可包括快閃記憶體。快閃記憶體可與處理器及其他系統組件位於同一晶粒上。另外,諸如記憶體控制器或圖形控制器之其他邏輯區塊亦可位於系統單晶片上。
圖1B說明實施本發明之實施例之原理的資料處理系統140。熟習此項技術者應容易瞭解,在不脫離本發明之實施例之範疇的情況下,本文中所描述之實施例可與替代性處理系統一起操作。
電腦系統140包含用於執行根據一個實施例之至少一個指令之處理核心159。在一個實施例中,處理核心159表示任一類型之架構的處理單元,該架構包括但不限於CISC、RISC或VLIW類型架構。處理核心159亦可適合於以一或多種程序技術之製造,且藉由足夠詳細地在機器可讀媒體上予以表示而可適合於促進該製造。
處理核心159包含執行單元142、一組暫存器檔案145,及解碼器144。處理核心159亦包括對於理解本發明之實施例可為不必要的額外電路系統(未圖示)。執行單元142可執行由處理核心159接收之指令。除了執行典型處理器指令以外,執行單元142亦可執行封裝指令集143中之指令以用於對封裝資料格式執行操作。封裝指令集143可包括用於執行本發明之實施例之指令以及其他封裝指令。執行單元142可由內部匯流排耦接至暫存器檔案145。暫存器檔案145可表示處理核心159上的用於儲存資訊(包括資料)之儲存區域。如先前所提到,應理解,儲存區域可儲存可能並非關鍵之封裝資料。執行單元142可耦接至解碼器144。解碼器144可將由處理核心159接收之指令解碼成控制信號及/或微碼入口點。回應於此等控制信號及/或微碼入口點,執行單元142執行適當操作。在一個實施例中,解碼器可解譯指令之作業碼,其將指示應對指令內所指示之對應資料執行何操作。
處理核心159可與匯流排141耦接以用於與各種其他系統裝置通訊,該等其他系統裝置可包括但不限於(例如)同步動態隨機存取記憶體(SDRAM)控制146、靜態隨機存取記憶體(SRAM)控制147、叢發快閃記憶體介面148、個人電腦記憶體卡國際協會(PCMCIA)/緊密快閃(CF)卡控制149、液晶顯示器(LCD)控制150、直接記憶體存取(DMA)控制器151,及替代性匯流排主控器介面152。在一個實施例中,資料處理系統140亦可包含I/O橋接器154以用於經由I/O匯流排153而與各種I/O裝置通訊。此等I/O裝置可包括但不限於(例如)通用非同步接收器/傳輸器(UART) 155、通用串列匯流排(USB) 156、藍芽無線UART 157,及I/O擴展介面158。
資料處理系統140之一個實施例提供行動、網路及/或無線通訊,及可執行包括文字字串比較操作之SIMD操作之處理核心159。處理核心159可運用以下各者予以規劃:各種音訊、視訊、成像及通訊演算法,包括離散變換,諸如沃爾什-哈達瑪(Walsh-Hadamard)變換、快速傅立葉變換(FFT)、離散餘弦變換(DCT)及其各別反變換;壓縮/解壓縮技術,諸如色彩空間變換、視訊編碼運動估計或視訊解碼運動補償;及調變/解調變(數據機)功能,諸如脈碼調變(PCM)。
圖1C說明執行SIMD文字字串比較操作之資料處理系統之其他實施例。在一個實施例中,資料處理系統160可包括主處理器166、SIMD共處理器161、快取記憶體167,及輸入/輸出系統168。輸入/輸出系統168可視情況耦接至無線介面169。SIMD共處理器161可執行包括根據一個實施例之指令之操作。在一個實施例中,處理核心170可適合於以一或多種程序技術之製造,且藉由足夠詳細地在機器可讀媒體上予以表示而可適合於促進包括處理核心170之資料處理系統160之全部或部分的製造。
在一個實施例中,SIMD共處理器161包含執行單元162,及一組暫存器檔案164。主處理器166之一個實施例包含解碼器165以辨識包括用於由執行單元162執行之根據一個實施例之指令的指令集163之指令。在其他實施例中,SIMD共處理器161亦包含解碼器165 (被展示為165B)之至少部分以解碼指令集163之指令。處理核心170亦可包括對於理解本發明之實施例可為不必要的額外電路系統(未圖示)。
在操作中,主處理器166執行控制一般類型之資料處理操作(包括與快取記憶體167及輸入/輸出系統168之互動)的資料處理指令串流。嵌入於資料處理指令串流內的可為SIMD共處理器指令。主處理器166之解碼器165將此等SIMD共處理器指令辨識為屬於應由附接式SIMD共處理器161執行之類型。因此,主處理器166在共處理器匯流排166上發行此等SIMD共處理器指令(或表示SIMD共處理器指令之控制信號)。自共處理器匯流排171,此等指令可由任何附接式SIMD共處理器接收。在此狀況下,SIMD共處理器161可接受及執行意欲用於SIMD共處理器161的任何經接收SIMD共處理器指令。
可經由無線介面169接收資料以供SIMD共處理器指令處理。對於一個實例,可以數位信號之形式接收語音通訊,該數位信號可由SIMD共處理器指令處理以再生表示語音通訊之數位音訊樣本。對於另一實例,可以數位位元串流之形式接收經壓縮音訊及/或視訊,該數位位元串流可由SIMD共處理器指令處理以再生數位音訊樣本及/或運動視訊圖框。在處理核心170之一個實施例中,主處理器166及SIMD共處理器161可整合至單一處理核心170中,單一處理核心170包含執行單元162、一組暫存器檔案164,及用以辨識包括根據一個實施例之指令的指令集163之指令的解碼器165。
圖2為根據本發明之實施例的用於處理器200之微架構之方塊圖,處理器200可包括用以執行指令之邏輯電路。在一些實施例中,可實施根據一個實施例之指令以對具有位元組、字、雙字、四倍字等等之大小以及諸如單精確度及雙精確度整數及浮點資料類型之資料類型的資料元素進行操作。在一個實施例中,有序前端201可實施處理器200之部分,其可提取待執行之指令且準備使該等指令稍後在處理器管線中使用。前端201可包括若干單元。在一個實施例中,指令預提取器226自記憶體提取指令且將該等指令饋送至又解碼或解譯該等指令之指令解碼器228。舉例而言,在一個實施例中,解碼器將經接收指令解碼成機器可執行之一或多個操作,其被稱為「微指令」或「微操作(micro-operation)」(亦被稱為微op或uop)。在其他實施例中,解碼器將指令剖析成可由微架構使用以執行根據一個實施例之操作的作業碼以及對應資料及控制欄位。在一個實施例中,追蹤快取記憶體230可將經解碼uop組譯成uop佇列234中之程式有序序列或追蹤以供執行。當追蹤快取記憶體230遇到複雜指令時,微碼ROM 232提供完成操作所需要之uop。
一些指令可被轉換成單一微op,而其他指令需要若干微op來完成全部操作。在一個實施例中,若完成一指令需要多於四個微op,則解碼器228可存取微碼ROM 232以執行該指令。在一個實施例中,可將指令解碼成少量微op以供在指令解碼器228處處理。在另一實施例中,若需要數個微op來實現操作,則指令可儲存於微碼ROM 232內。追蹤快取記憶體230指代入口點可規劃邏輯陣列(PLA)以判定用於自微碼ROM 232讀取微碼序列以完成根據一個實施例之一或多個指令的正確微指令指標。在微碼ROM 232完成針對一指令之定序微op之後,機器之前端201可繼續自追蹤快取記憶體230提取微op。
無序執行引擎203可準備指令以供執行。無序執行邏輯具有數個緩衝器以隨著指令通過管線且經排程以供執行而使指令之流動平穩且將指令之流動重新排序以使效能最佳化。分配器/暫存器重新命名器215中之分配器邏輯分配每一uop所需要以便執行之機器緩衝器及資源。分配器/暫存器重新命名器215中之暫存器重新命名邏輯將邏輯暫存器重新命名至暫存器檔案中之輸入項目上。分配器215亦在指令排程器之前方分配用於兩個uop佇列中之一者中的每一uop之入口,一個用於記憶體操作(記憶體uop佇列207)且一個用於非記憶體操作(整數/浮點uop佇列205):記憶體排程器209、快速排程器202、慢速/一般浮點排程器204,及簡單浮點排程器206。uop排程器202、204、206基於其相依輸入暫存器運算元源之就緒及uop完成其操作所需要之執行資源之可用性來判定uop何時就緒以執行。一個實施例之快速排程器202可按每半個主時脈循環而排程,而其他排程器可在每主處理器時脈循環僅排程一次。該等排程器對分派埠仲裁以排程uop以供執行。
暫存器檔案208、210可配置於排程器202、204、206與執行區塊211中之執行單元212、214、216、218、220、222、224之間。暫存器檔案208、210中之每一者分別執行整數及浮點運算。每一暫存器檔案208、210可包括旁路網路,其可繞過尚未寫入至暫存器檔案中的剛剛完成之結果或將該等結果轉遞至新相依uop。整數暫存器檔案208及浮點暫存器檔案210可與其他者傳達資料。在一個實施例中,可將整數暫存器檔案208分裂成兩個單獨暫存器檔案,一個暫存器檔案用於資料之低階三十二位元且第二暫存器檔案用於資料之高階三十二位元。浮點暫存器檔案210可包括128位元寬之輸入項目,此係因為浮點指令通常具有寬度為64位元至128位元之運算元。
執行區塊211可含有執行單元212、214、216、218、220、222、224。執行單元212、214、216、218、220、222、224可執行指令。執行區塊211可包括儲存微指令需要執行之整數及浮點資料運算元值的暫存器檔案208、210。在一個實施例中,處理器200可包含數個執行單元:位址產生單元(AGU) 212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮點ALU 222、浮點移動單元224。在另一實施例中,浮點執行區塊222、224可執行浮點、MMX、SIMD及SSE或其他操作。在又一實施例中,浮點ALU 222可包括64位元乘64位元之浮點除法器以執行除法、平方根及餘數微op。在各種實施例中,可運用浮點硬體來處置涉及浮點值之指令。在一個實施例中,可將ALU運算傳遞至高速ALU執行單元216、218。高速ALU 216、218可運用一半之時脈循環之有效潛時來執行快速運算。在一個實施例中,最複雜的整數運算轉至慢速ALU 220,此係因為慢速ALU 220可包括用於長潛時類型之運算的整數執行硬體,諸如乘法器、移位、旗標邏輯及分支處理。記憶體載入/儲存操作可由AGU 212、214執行。在一個實施例中,整數ALU 216、218、220可對64位元資料運算元執行整數運算。在其他實施例中,可實施ALU 216、218、220以支援多種資料位元大小,包括十六、三十二、128、256等等。相似地,可實施浮點單元222、224以支援具有各種寬度之位元的一系列運算元。在一個實施例中,浮點單元222、224可結合SIMD及多媒體指令而對128位元寬之封裝資料運算元進行運算。
在一個實施例中,uop排程器202、204、206在親代載入已完成執行之前分派相依操作。因為可在處理器200中推測性地排程及執行uop時,所以處理器200亦可包括用以處置記憶體遺漏的邏輯。若資料載入在資料快取記憶體中遺漏,則管線中可存在使排程器具有臨時不正確資料的運作中之相依操作。重新執行機構追蹤及再執行使用不正確資料之指令。可僅需要重新執行相依操作且可允許獨立操作完成。處理器之一個實施例的排程器及重新執行機構亦可經設計以捕捉指令序列以用於文字字串比較操作。
術語「暫存器」可指代可用作用以識別運算元之指令之部分的機載處理器儲存位置。換言之,暫存器可為可自處理器外部(根據規劃師之觀點)使用的暫存器。然而,在一些實施例中,暫存器可不限於特定類型之電路。實情為,暫存器可儲存資料,提供資料,且執行本文中所描述之功能。本文中所描述之暫存器可由使用任何數目個不同技術之處理器內之電路系統(諸如專用實體暫存器、使用暫存器重新命名之動態分配實體暫存器、專用與動態分配實體暫存器之組合等等)實施。在一個實施例中,整數暫存器儲存32位元整數資料。一個實施例之暫存器檔案亦含有用於封裝資料之八個多媒體SIMD暫存器。對於以下論述,可將暫存器理解為經設計以保持封裝資料之資料暫存器,諸如運用來自Santa Clara, California之Intel Corporation之MMX技術而啟用的微處理器中之64位元寬MMXTM 暫存器(在一些情況下亦被稱作「mm」暫存器)。以整數及浮點形式兩者可用之此等MMX暫存器可運用伴隨SIMD及SSE指令之封裝資料元素而操作。相似地,與SSE2、SSE3、SSE4或更高(一般被稱作「SSEx」)技術相關之128位元寬XMM暫存器可保持此等封裝資料運算元。在一個實施例中,在儲存封裝資料及整數資料時,暫存器並不需要區分兩個資料類型。在一個實施例中,整數及浮點資料可含於同一暫存器檔案或不同暫存器檔案中。此外,在一個實施例中,浮點及整數資料可儲存於不同暫存器或相同暫存器中。
在以下諸圖之實例中,描述數個資料運算元。圖3A說明根據本發明之實施例的多媒體暫存器中之各種封裝資料類型表示。圖3A說明用於128位元寬運算元之封裝位元組310、封裝字320及封裝雙字(dword) 330之資料類型。此實例之封裝位元組格式310可為128個位元長且含有十六個封裝位元組資料元素。舉例而言,可將位元組界定為八個資料位元。用於每一位元組資料元素之資訊可儲存於用於位元組0之位元7至位元0、用於位元組1之位元15至位元8、用於位元組2之位元23至位元16及最後用於位元組15之位元120至位元127中。因此,所有可用位元可用於暫存器中。此儲存配置增加處理器之儲存效率。同樣,在存取十六個資料元素的情況下,現在可並行地對十六個資料元素執行一個操作。
通常,資料元素可包括與具有相同長度之其他資料元素一起儲存於單一暫存器或記憶體位置中的個別資料片段。在與SSEx技術相關之封裝資料序列中,儲存於XMM暫存器中之資料元素的數目可為128個位元除以個別資料元素之位元長度。相似地,在與MMX及SSE技術相關之封裝資料序列中,儲存於MMX暫存器中之資料元素的數目可為64位元除以個別資料元素之位元長度。儘管圖3A所說明之資料類型可為128個位元長,但本發明之實施例亦可運用64位元寬或其他大小之運算元而操作。此實例之封裝字格式320可為128個位元長且含有八個封裝字資料元素。每一封裝字含有十六個資訊位元。圖3A之封裝雙字格式330可為128位元個長且含有四個封裝雙字資料元素。每一封裝雙字資料元素含有三十二個資訊位元。封裝四倍字可為128個位元長且含有兩個封裝四倍字資料元素。
圖3B說明根據本發明之實施例的可能暫存器內資料儲存格式。每一封裝資料可包括多於一個獨立資料元素。說明三個封裝資料格式:封裝半341、封裝單342及封裝雙343。封裝半341、封裝單342及封裝雙343之一個實施例含有定點資料元素。對於另一實施例,封裝半341、封裝單342及封裝雙343中之一或多者可含有浮點資料元素。封裝半341之一個實施例可為128個位元長,含有八個16位元資料元素。封裝單342之一個實施例可為128個位元長且含有四個32位元資料元素。封裝雙343之一個實施例可為128個位元長且含有兩個64位元資料元素。應瞭解,此等封裝資料格式可進一步延伸至其他暫存器長度,例如,延伸至96位元、160位元、192位元、224位元、256位元或更多。
圖3C說明根據本發明之實施例的多媒體暫存器中之各種有正負號及無正負號封裝資料類型表示。無正負號封裝位元組表示344說明無正負號封裝位元組在SIMD暫存器中之儲存。用於每一位元組資料元素之資訊可儲存於用於位元組0之位元7至位元0、用於位元組1之位元15至位元8、用於位元組2之位元23至位元16及最後用於位元組15之位元120至位元127中。因此,所有可用位元可用於暫存器中。此儲存配置可增加處理器之儲存效率。同樣,在存取十六個資料元素的情況下,現在可以並行方式對十六個資料元素執行一個操作。有正負號封裝位元組表示345說明有正負號封裝位元組之儲存。應注意,每一位元組資料元素之第八個位元可為正負號指示符。無正負號封裝字表示346說明字七至字零可如何儲存於SIMD暫存器中。有正負號封裝字表示347可相似於無正負號封裝字暫存器內表示346。應注意,每一字資料元素之第十六個位元可為正負號指示符。無正負號封裝雙字表示348展示如何儲存雙字資料元素。有正負號封裝雙字表示349可相似於無正負號封裝雙字暫存器內表示348。應注意,必要的正負號位元可為每一雙字資料元素之第三十二位元。
圖3D說明操作編碼(作業碼)之實施例。此外,格式360可包括暫存器/記憶體運算元定址模式,其與「IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」中所描述的一類型之作業碼格式對應,其可在全球資訊網(www)上在intel.com/design/litcentr自Intel Corporation (Santa Clara, CA)獲得。在一個實施例中,指令可由欄位361及362中之一或多者編碼。可每指令識別高達兩個運算元位置,包括高達兩個源運算元識別符364及365。在一個實施例中,目的地運算元識別符366可與源運算元識別符364相同,而在其他實施例中,其可不同。在另一實施例中,目的地運算元識別符366可與源運算元識別符365相同,而在其他實施例中,其可不同。在一個實施例中,由源運算元識別符364及365識別的源運算元中之一者可被文字字串比較操作之結果覆寫,而在其他實施例中,識別符364對應於源暫存器元素且識別符365對應於目的地暫存器元素。在一個實施例中,運算元識別符364及365可識別32位元或64位元之源運算元及目的地運算元。
圖3E說明根據本發明之實施例的具有四十或更多位元之另一可能操作編碼(作業碼)格式370。作業碼格式370與作業碼格式360對應且包含可選首碼位元組378。根據一個實施例之指令可由欄位378、371及372中之一或多者編碼。每指令高達兩個運算元位置可由源運算元識別符374及375且由首碼位元組378識別。在一個實施例中,首碼位元組378可用以識別32位元或64位元源運算元及目的地運算元。在一個實施例中,目的地運算元識別符376可與源運算元識別符374相同,而在其他實施例中,其可不同。對於另一實施例,目的地運算元識別符376可與源運算元識別符375相同,而在其他實施例中,其可不同。在一個實施例中,指令對由運算元識別符374及375識別之運算元中之一或多者操作,且由運算元識別符374及375識別之一或多個運算元可被指令結果覆寫,而在其他實施例中,由識別符374及375識別之運算元可被寫入至另一暫存器中之另一資料元素。作業碼格式360及370允許由MOD欄位363及373及由可選比例-索引-基址及位移位元組部分地指定之暫存器至暫存器定址、記憶體至暫存器定址、按記憶體之暫存器定址、逐暫存器定址、即刻暫存器定址、暫存器至記憶體定址。
圖3F說明根據本發明之實施例的又一可能操作編碼(作業碼)格式。64位元單指令多資料(SIMD)算術運算可透過共處理器資料處理(CDP)指令而執行。操作編碼(作業碼)格式380描繪具有CDP作業碼欄位382及389之一個此類CDP指令。對於另一實施例,CDP指令之類型,操作可由欄位383、384、387及388中之一或多者編碼。可每指令識別高達三個運算元位置,包括高達兩個源運算元識別符385及390以及一個目的地運算元識別符386。共處理器之一個實施例可對八、十六、三十二及64位元值操作。在一個實施例中,可對整數資料元素執行指令。在一些實施例中,可使用條件欄位381有條件地執行指令。對於一些實施例,源資料大小可由欄位383編碼。在一些實施例中,可對SIMD欄位進行零(Z)、負數(N)、進位(C)及溢位(V)偵測。對於一些指令,飽和之類型可由欄位384編碼。
圖4A為根據本發明之實施例的說明有序管線及暫存器重新命名級、無序發行/執行管線之方塊圖。圖4B為根據本發明之實施例的說明待包括於處理器中之有序架構核心及暫存器重新命名邏輯、無序發行/執行邏輯之方塊圖。圖4A中之實線方框說明有序管線,而虛線方框說明暫存器重新命名、無序發行/執行管線。相似地,圖4B中之實線方框說明有序架構邏輯,而虛線方框說明暫存器重新命名邏輯及無序發行/執行邏輯。
在圖4A中,處理器管線400可包括提取級402、長度解碼級404、解碼級406、分配級408、重新命名級410、排程(亦被稱為分派或發行)級412、暫存器讀取/記憶體讀取級414、執行級416、寫回/記憶體寫入級418、例外狀況處置級422,及認可級424。
在圖4B中,箭頭表示兩個或更多單元之間的耦接,且箭頭之方向指示彼等單元之間的資料流動方向。圖4B展示處理器核心490,其包括耦接至執行引擎單元450之前端單元430,且該兩者可耦接至記憶體單元470。
核心490可為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字(VLIW)核心,或混合式或替代性核心類型。在一個實施例中,核心490可為特殊用途核心,諸如網路或通訊核心、壓縮引擎、圖形核心或類似者。
前端單元430可包括耦接至指令快取記憶體單元434之分支預測單元432。指令快取記憶體單元434可耦接至指令轉譯後援緩衝器(TLB) 436。TLB 436可耦接至指令提取單元438,指令提取單元438耦接至解碼單元440。解碼單元440可解碼指令,且產生作為輸出的一或多個微操作、微碼入口點、微指令、其他指令或其他控制信號,前述各者可自原始指令解碼,或以其他方式反映原始指令,或可自原始指令導出。可使用各種不同機制來實施解碼器。合適機制之實例包括但不限於查找表、硬體實施方案、可規劃邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等等。在一個實施例中,指令快取記憶體單元434可進一步耦接至記憶體單元470中之層級2 (L2)快取記憶體單元476。解碼單元440可耦接至執行引擎單元450中之重新命名/分配器單元452。
執行引擎單元450可包括耦接至淘汰單元454及一組一或多個排程器單元456之重新命名/分配器單元452。排程器單元456表示任何數目個不同排程器,包括保留站、中央指令窗等等。排程器單元456可耦接至實體暫存器檔案單元458。實體暫存器檔案單元458中之每一者表示一或多個實體暫存器檔案,其中之不同者儲存一或多個不同資料類型,諸如純量整數、純量浮點、封裝整數、封裝浮點、向量整數、向量浮點等等、狀態(例如,為待執行之下一指令之位址之指令指標)等等。實體暫存器檔案單元458可由淘汰單元454重疊以說明可實施暫存器重新命名及無序執行之各種方式(例如,使用一或多個重新排序緩衝器及一或多個淘汰暫存器檔案;使用一或多個未來檔案、一或多個歷史緩衝器及一或多個淘汰暫存器檔案;使用暫存器映像及暫存器集區;等等)。通常,架構暫存器可自處理器外部或根據規劃師之觀點可見。暫存器可不限於任何已知特定類型之電路。各種不同類型之暫存器可為合適的,只要該等暫存器如本文中所描述而儲存及提供資料即可。合適暫存器之實例包括但可不限於專用實體暫存器、使用暫存器重新命名之動態分配實體暫存器、專用與動態分配實體暫存器之組合等等。淘汰單元454及實體暫存器檔案單元458可耦接至執行叢集460。執行叢集460可包括一組一或多個執行單元462及一組一或多個記憶體存取單元464。執行單元462可執行各種運算(例如,移位、加法、減法、乘法)且對各種類型之資料(例如,純量浮點、封裝整數、封裝浮點、向量整數、向量浮點)執行各種運算。雖然一些實施例可包括專用於特定功能或功能集合之數個執行單元,但其他實施例可包括僅一個執行單元或皆執行所有功能之多個執行單元。排程器單元456、實體暫存器檔案單元458及執行叢集460被展示為可能多個,此係因為某些實施例建立用於某些類型之資料/操作之單獨管線(例如,各自具有其自身排程器單元、實體暫存器檔案單元及/或執行叢集的純量整數管線、純量浮點/封裝整數/封裝浮點/向量整數/向量浮點管線及/或記憶體存取管線—且在單獨記憶體存取管線之狀況下,可實施僅此管線之執行叢集具有記憶體存取單元464之某些實施例)。亦應理解,在使用單獨管線的情況下,此等管線中之一或多者可為無序發行/執行且其餘部分為有序的。
該組記憶體存取單元464可耦接至記憶體單元470,記憶體單元470可包括耦接至資料快取記憶體單元474之資料TLB單元472,資料快取記憶體單元474耦接至層級2 (L2)快取記憶體單元476。在一個例示性實施例中,記憶體存取單元464可包括載入單元、儲存位址單元及儲存資料單元,其中之每一者可耦接至記憶體單元470中之資料TLB單元472。L2快取記憶體單元476可耦接至快取記憶體之一或多個其他層級且最終耦接至主記憶體。
作為實例,例示性暫存器重新命名、無序發行/執行核心架構可如下實施管線400:1)指令提取438可執行提取級402及長度解碼級404;2)解碼單元440可執行解碼級406;3)重新命名/分配器單元452可執行分配級408及重新命名級410;4)排程器單元456可執行排程級412;5)實體暫存器檔案單元458及記憶體單元470可執行暫存器讀取/記憶體讀取級414;執行叢集460可執行執行級416;6)記憶體單元470及實體暫存器檔案單元458可執行寫回/記憶體寫入級418;7)各種單元可參與執行例外狀況處置級422;以及8)淘汰單元454及實體暫存器檔案單元458可執行認可級424。
核心490可支援一或多個指令集(例如,x86指令集(其中已運用較新版本而添加一些延伸);MIPS Technologies (Sunnyvale, CA)之MIPS指令集;ARM Holdings (Sunnyvale, CA)之ARM指令集(具有可選額外延伸,諸如NEON))。
應理解,核心可以多種方式支援多執行緒處理(執行操作或執行緒之兩個或更多平行集合)。多執行緒處理支援可藉由(例如)包括時間分片多執行緒處理、同時多執行緒處理(其中單一實體核心為實體核心同時進行多執行緒處理的執行緒中之每一者提供邏輯核心)或其組合而執行。此組合可包括(例如)時間分片提取及解碼,及此後的同時多執行緒處理,諸如在Intel®超執行緒處理技術中。
雖然可在無序執行之上下文中描述暫存器重新命名,但應理解,暫存器重新命名可用於有序架構中。雖然處理器之所說明實施例亦可包括單獨指令快取記憶體單元434及資料快取記憶體單元474以及共用L2快取記憶體單元476,但其他實施例可具有用於指令及資料兩者之單一內部快取記憶體,諸如層級1 (L1)內部快取記憶體或多個層級之內部快取記憶體。在一些實施例中,系統可包括內部快取記憶體與可在核心及/或處理器外部的外部快取記憶體之組合。在其他實施例中,所有快取記憶體可在核心及/或處理器外部。
圖5A為根據本發明之實施例的處理器500之方塊圖。在一個實施例中,處理器500可包括多核心處理器。處理器500可包括以通訊方式耦接至一或多個核心502之系統代理510。此外,核心502及系統代理510可以通訊方式耦接至一或多個快取記憶體506。核心502、系統代理510及快取記憶體506可經由一或多個記憶體控制單元552而以通訊方式耦接。此外,核心502、系統代理510及快取記憶體506可經由記憶體控制單元552而以通訊方式耦接至圖形模組560。
處理器500可包括用於互連核心502、系統代理510及快取記憶體506與圖形模組560之任何合適機構。在一個實施例中,處理器500可包括基於環之互連單元508,以將核心502、系統代理510及快取記憶體506與圖形模組560互連。在其他實施例中,處理器500可包括用於互連此等單元之任何數目個熟知技術。基於環之互連單元508可利用記憶體控制單元552來促進互連。
處理器500可包括一記憶體階層,其包含核心內之一或多個快取記憶體層級、一或多個共用快取記憶體單元(諸如快取記憶體506),或耦接至該組整合式記憶體控制器單元552之外部記憶體(未圖示)。快取記憶體506可包括任何合適快取記憶體。在一個實施例中,快取記憶體506可包括一或多個中間層級快取記憶體,諸如層級2 (L2)、層級3 (L3)、層級4 (L4)或其他層級之快取記憶體、最後層級快取記憶體(LLC),及/或其組合。
在各種實施例中,核心502中之一或多者可執行多執行緒處理。系統代理510可包括用於協調及操作核心502之組件。系統代理單元510可包括(例如)電力控制單元(PCU)。PCU可為或可包括調節核心502之電力狀態所需要的邏輯及組件。系統代理510可包括用於驅動一或多個外部連接顯示器或圖形模組560之顯示引擎512。系統代理510可包括介面514以用於針對圖形之通訊匯流排。在一個實施例中,介面514可由快速PCI (PCIe)實施。在一另外實施例中,介面514可由快速圖形PCI (PEG)實施。系統代理510可包括直接媒體介面(DMI) 516。DMI 516可提供電腦系統之主機板或其他部分上之不同橋接器之間的連結。系統代理510可包括用於提供至計算系統之其他元件之PCIe連結之PCIe橋接器518。PCIe橋接器518可使用記憶體控制器520及同調邏輯522予以實施。
核心502可以任何合適方式予以實施。在架構及/或指令集方面,核心502可為均質的或異質的。在一個實施例中,核心502中之一些可為有序的,而其他可為無序的。在另一實施例中,核心502中之兩個或更多核心可執行同一指令集,而其他核心可僅執行彼指令集中之子集或不同指令集。
處理器500可包括一般用途處理器,諸如可購自Santa Clara, Calif.之Intel Corporation的Core™ i3、i5、i7、2 Duo及Quad、Xeon™、Itanium™、XScale™或StrongARM™處理器。處理器500可提供自另一公司,諸如ARM Holdings有限公司、MIPS等等。處理器500可為特殊用途處理器,諸如網路或通訊處理器、壓縮引擎、圖形處理器、共處理器、嵌入式處理器或類似者。處理器500可實施於一或多個晶片上。處理器500可為一或多個基板之部分及/或可使用數種程序技術中之任一者(諸如BiCMOS、CMOS或NMOS)而實施於該一或多個基板上。
在一個實施例中,快取記憶體506中之給定者可由核心502中之多個核心共用。在另一實施例中,快取記憶體506中之給定者可專用於核心502中之一者。快取記憶體506至核心502之指派可由快取記憶體控制器或其他合適機構處置。藉由實施給定快取記憶體506之時間配量,快取記憶體506中之給定者可由兩個或更多核心502共用。
圖形模組560可實施整合式圖形處理子系統。在一個實施例中,圖形模組560可包括圖形處理器。此外,圖形模組560可包括媒體引擎565。媒體引擎565可提供媒體編碼及視訊解碼。
圖5B為根據本發明之實施例的核心502之實例實施方案之方塊圖。核心502可包括以通訊方式耦接至無序引擎580之前端570。核心502可透過快取記憶體階層503而以通訊方式耦接至處理器500之其他部分。
前端570可以任何合適方式予以實施,諸如完全地或部分地由如上文所描述之前端201實施。在一個實施例中,前端570可透過快取記憶體階層503而與處理器500之其他部分通訊。在一另外實施例中,前端570可自處理器500之部分提取指令且準備使該等指令稍後隨著該等指令被傳遞至無序執行引擎580而在處理器管線中使用。
無序執行引擎580可以任何合適方式予以實施,諸如完全地或部分地由如上文所描述之無序執行引擎203實施。無序執行引擎580可準備自前端570接收之指令以供執行。無序執行引擎580可包括分配模組582。在一個實施例中,分配模組582可分配處理器500之資源或其他資源(諸如暫存器或緩衝器)以執行給定指令。分配模組582可在排程器(諸如記憶體排程器、快速排程器或浮點排程器)中進行分配。此等排程器在圖5B中可由資源排程器584表示。分配模組582可由結合圖2所描述之分配邏輯完全地或部分地實施。資源排程器584可基於給定資源之源之就緒及執行指令所需要之執行資源之可用性來判定指令何時就緒以執行。資源排程器584可由(例如)如上文所論述之排程器202、204、206實施。資源排程器584可在一或多個資源上排程指令之執行。在一個實施例中,此等資源可在核心502內部,且可被說明為(例如)資源586。在另一實施例中,此等資源可在核心502外部且可為可由(例如)快取記憶體階層503存取。舉例而言,資源可包括記憶體、快取記憶體、暫存器檔案或暫存器。在核心502內部之資源可由圖5B中之資源586表示。必要時,可透過(例如)快取記憶體階層503來協調寫入至資源586或自其讀取之值與處理器500之其他部分。當指令被指派資源時,該等指令可置放於重新排序緩衝器588中。重新排序緩衝器588可在指令被執行時追蹤該等指令,且基於處理器500之任何合適準則來選擇性地重新排序其執行。在一個實施例中,重新排序緩衝器588可識別可獨立地執行的指令或一系列指令。此等指令或一系列指令可與其他此等指令並行地執行。核心502中之並行執行可由任何合適數目個單獨執行區塊或虛擬處理器執行。在一個實施例中,共用資源(諸如記憶體、暫存器及快取記憶體)可為給定核心502內之多個虛擬處理器存取。在其他實施例中,共用資源可為處理器500內之多個處理實體存取。
快取記憶體階層503可以任何合適方式予以實施。舉例而言,快取記憶體階層503可包括一或多個較低或中間層級快取記憶體,諸如快取記憶體572、574。在一個實施例中,快取記憶體階層503可包括以通訊方式耦接至快取記憶體572、574之LLC 595。在另一實施例中,LLC 595可實施於可為處理器500之所有處理實體存取之模組590中。在一另外實施例中,模組590可實施於來自Intel, Inc.之處理器之非核心模組中。模組590可包括核心502之執行所必要的處理器500之部分或子系統,但可不實施於核心502內。除了LLC 595以外,模組590亦可包括(例如)硬體介面、記憶體同調性協調器、處理器間互連件、指令管線,或記憶體控制器。對可用於處理器500之RAM 599之存取可透過模組590 (且更具體言之,LLC 595)而進行。此外,核心502之其他執行個體可相似地存取模組590。核心502之執行個體之協調可部分地透過模組590而促進。
圖6至圖8可說明適合於包括處理器500之例示性系統,而圖9可說明可包括核心502中之一或多者的例示性系統單晶片(SoC)。此項技術中所知的用於以下各者之其他系統設計及實施方案亦可為合適的:膝上型電腦、桌上型電腦、手持型PC、個人數位助理、工程設計工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、蜂巢式電話、攜帶型媒體播放器、手持型裝置,及各種其他電子裝置。一般而言,併有如本文中所揭示之處理器及/或其他執行邏輯之很多種系統或電子裝置可為大體上合適的。
圖6說明根據本發明之實施例的系統600之方塊圖。系統600可包括可耦接至圖形記憶體控制器集線器(GMCH) 620之一或多個處理器610、615。在圖6中運用虛線來表示額外處理器615之可選本質。
每一處理器610、615可為處理器500之某一版本。然而,應注意,整合式圖形邏輯及整合式記憶體控制單元可不存在於處理器610、615中。圖6說明GMCH 620可耦接至可為(例如)動態隨機存取記憶體(DRAM)之記憶體640。對於至少一個實施例,DRAM可與非依電性快取記憶體相關聯。
GMCH 620可為晶片組或晶片組之部分。GMCH 620可與處理器610、615通訊且控制處理器610、615與記憶體640之間的互動。GMCH 620亦可充當處理器610、615與系統600之其他元件之間的加速匯流排介面。在一個實施例中,GMCH 620經由多點匯流排(諸如前側匯流排(FSB) 695)而與處理器610、615通訊。
此外,GMCH 620可耦接至顯示器645 (諸如平板顯示器)。在一個實施例中,GMCH 620可包括整合式圖形加速器。GMCH 620可進一步耦接至可用以將各種周邊裝置耦接至系統600之輸入/輸出(I/O)控制器集線器(ICH) 650。外部圖形裝置660可包括連同另一周邊裝置670耦接至ICH 650之離散圖形裝置。
在其他實施例中,額外或不同處理器亦可存在於系統600中。舉例而言,額外處理器610、615可包括可與處理器610相同之額外處理器、可與處理器610異質或不對稱之額外處理器、加速器(諸如圖形加速器或數位信號處理(DSP)單元)、場可規劃閘陣列,或任何其他處理器。在包括架構、微架構、熱、功率消耗特性及類似者之一系列優點度量方面,實體資源610、615之間可存在多種差異。此等差異可有效地將其自身顯現為處理器610、615之間的不對稱性及異質性。對於至少一個實施例,各種處理器610、615可駐留於同一晶粒封裝體中。
圖7說明根據本發明之實施例的第二系統700之方塊圖。如圖7所展示,多處理器系統700可包括點對點互連系統,且可包括經由點對點互連件750而耦接之第一處理器770及第二處理器780。處理器770及780中之每一者可為處理器500之某一版本,如處理器610、615中之一或多者。
雖然圖7可說明兩個處理器770、780,但應理解,本發明之範疇並不受到如此限制。在其他實施例中,一或多個額外處理器可存在於給定處理器中。
處理器770及780被展示為分別包括整合式記憶體控制器單元772及782。處理器770亦可包括作為其匯流排控制器單元之部分的點對點(P-P)介面776及778;相似地,第二處理器780可包括P-P介面786及788。處理器770、780可使用P-P介面電路778、788經由點對點(P-P)介面750而交換資訊。如圖7所展示,IMC 772及782可將該等處理器耦接至各別記憶體(即,記憶體732及記憶體734),該等記憶體在一個實施例中可為在本機附接至各別處理器的主記憶體之部分。
處理器770、780可各自使用點對點介面電路776、794、786、798經由個別P-P介面752、754而與晶片組790交換資訊。在一個實施例中,晶片組790亦可經由高效能圖形介面739而與高效能圖形電路738交換資訊。
共用快取記憶體(未圖示)可包括於兩個處理器中之任一處理器中或在兩個處理器外部,但經由P-P互連件而與該等處理器連接,使得可將任一處理器或兩個處理器之本機快取記憶體資訊儲存於共用快取記憶體中(若處理器被置於低電力模式)。
晶片組790可經由介面796而耦接至第一匯流排716。在一個實施例中,第一匯流排716可為周邊組件互連(PCI)匯流排,或諸如PCI高速匯流排或另一第三代I/O互連件匯流排之匯流排,但本發明之範疇並不受到如此限制。
如圖7所展示,各種I/O裝置714可連同匯流排橋接器718耦接至第一匯流排716,匯流排橋接器718將第一匯流排716耦接至第二匯流排720。在一個實施例中,第二匯流排720可為低接腳計數(LPC)匯流排。在一個實施例中,各種裝置可耦接至第二匯流排720,包括(例如)鍵盤及/或滑鼠722、通訊裝置727及儲存單元728 (諸如可包括指令/程式碼及資料730之磁碟機或其他大容量儲存裝置)。另外,音訊I/O 724可耦接至第二匯流排720。應注意,其他架構可為可能的。舉例而言,代替圖7之點對點架構,系統可實施多點匯流排或其他此類架構。
圖8說明根據本發明之實施例的第三系統800之方塊圖。圖7及圖8中之類似元件具有類似參考數字,且已自圖8省略圖7之某些態樣,以便避免混淆圖8之其他態樣。
圖8說明處理器770、780可分別包括整合式記憶體及I/O控制邏輯(「CL」) 872及882。對於至少一個實施例,CL 872、882可包括整合式記憶體控制器單元,諸如上文關於圖5及圖7所描述之整合式記憶體控制器單元。此外,CL 872、882亦可包括I/O控制邏輯。圖8說明不僅記憶體732、734可耦接至CL 872、882,而且I/O裝置814亦可耦接至控制邏輯872、882。舊版I/O裝置815可耦接至晶片組790。
圖9說明根據本發明之實施例的SoC 900之方塊圖。圖5中之相似元件具有類似參考數字。又,虛線方框可表示較進階的SoC上之可選特徵。互連單元902可耦接至:應用程式處理器910,其可包括一組一或多個核心502A至502N及共用快取記憶體單元506;系統代理單元510;匯流排控制器單元916;整合式記憶體控制器單元914;一組或一或多個媒體處理器920,其可包括整合式圖形邏輯908、用於提供靜態及/或視訊攝影機功能性之影像處理器924、用於提供硬體音訊加速之音訊處理器926,及用於提供視訊編碼/解碼加速之視訊處理器928;靜態隨機存取記憶體(SRAM)單元930;直接記憶體存取(DMA)單元932;及用於耦接至一或多個外部顯示器之顯示單元940。
圖10說明根據本發明之實施例的含有中央處理單元(CPU)及圖形處理單元(GPU)之處理器,其可執行至少一個指令。在一個實施例中,用以執行根據至少一個實施例之操作的指令可由CPU執行。在另一實施例中,該指令可由GPU執行。在又一實施例中,該指令可透過由GPU及CPU執行之操作的組合而執行。舉例而言,在一個實施例中,可接收及解碼根據一個實施例之指令以供在GPU上執行。經解碼指令內之一或多個操作可由CPU執行且結果被傳回至GPU以用於該指令之最終淘汰。相反地,在一些實施例中,CPU可充當主要處理器且GPU可充當共處理器。
在一些實施例中,受益於高度並行輸送量處理器之指令可由GPU執行,而受益於處理器之效能(受益於深度管線化架構)之指令可由CPU執行。舉例而言,圖形、科學應用程式、金融應用程式及其他平行工作負載可受益於GPU之效能且被相應地執行,而較多依序應用程式(諸如作業系統核心程式或應用程式碼)可較好地適合於CPU。
在圖10中,處理器1000包括CPU 1005、GPU 1010、影像處理器1015、視訊處理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、顯示裝置1040、記憶體介面控制器1045、MIPI控制器1050、快閃記憶體控制器1055、雙資料速率(DDR)控制器1060、安全引擎1065,及I2 S/I2 C控制器1070。圖10之處理器中可包括其他邏輯及電路,包括較多CPU或GPU以及其他周邊介面控制器。
至少一個實施例之一或多個態樣可由儲存於機器可讀媒體上之代表性資料實施,該資料表示處理器內之各種邏輯,其在由機器讀取時致使機器製造用以執行本文中所描述之技術的邏輯。被稱為「IP核心」之此等表示可儲存於有形機器可讀媒體(「磁帶」)上,且供應至各種消費者或製造設施以載入至實際上製造該邏輯或處理器之製造機器中。舉例而言,IP核心(諸如由ARM Holdings有限公司開發之Cortex™處理器家族及由中國科學院計算技術研究所(ICT)開發之Loongson IP核心)可有使用權或出售給各種消費者或使用人(諸如Texas Instruments、Qualcomm、Apple或Samsung)且實施於由此等消費者或使用人生產之處理器中。
圖11為說明根據本發明之實施例的IP核心之開發之方塊圖。儲存體1100可包括模擬軟體1120及/或硬體或軟體模型1110。在一個實施例中,可經由記憶體1140 (例如,硬碟)、有線連接(例如,網際網路) 1150或無線連接1160將表示IP核心設計之資料提供至儲存體1100。可接著將由模擬工具及模型產生之IP核心資訊傳輸至製造設施1165,其中可由第3方製造IP核心資訊以執行根據至少一個實施例之至少一個指令。
在一些實施例中,一或多個指令可對應於第一類型或架構(例如,x86)且在不同類型或架構(例如,ARM)之處理器上予以轉譯或模仿。根據一個實施例之指令因此可在包括ARM、x86、MIPS、GPU或其他處理器類型或架構之任一處理器或處理器類型上執行。
圖12說明根據本發明之實施例的第一類型之指令可如何由不同類型之處理器模仿。在圖12中,程式1205含有可執行與根據一個實施例之指令相同或實質上相同之功能的一些指令。然而,程式1205之指令可屬於與處理器1215不同或不相容之類型及/或格式,此意謂程式1205中之類型的指令可不能夠由處理器1215原生地執行。然而,藉助於模仿邏輯1210,程式1205之指令可轉譯成原生地可由處理器1215執行之指令。在一個實施例中,可以硬體體現模仿邏輯。在另一實施例中,可以有形機器可讀媒體體現模仿邏輯,有形機器可讀媒體含有用以將程式1205中之類型之指令轉譯成原生地可由處理器1215執行之類型的軟體。在其他實施例中,模仿邏輯可為固定功能或可規劃硬體與儲存於有形機器可讀媒體上之程式的組合。在一個實施例中,處理器含有模仿邏輯,而在其他實施例中,模仿邏輯存在於處理器外部且可由第三方提供。在一個實施例中,處理器可藉由執行含於處理器中或與處理器相關聯之微碼或韌體來載入體現於含有軟體之有形機器可讀媒體中的模仿邏輯。
圖13說明根據本發明之實施例的對比軟體指令轉換器之使用之方塊圖,該軟體指令轉換器用以將源指令集中之二進位指令轉換至目標指令集中之二進位指令。在所說明實施例中,指令轉換器可為軟體指令轉換器,但指令轉換器可以軟體、韌體、硬體或其各種組合予以實施。圖13展示可使用x86編譯器1304來編譯呈高階語言1302之程式以產生x86二進位碼1306,x86二進位碼1306可原生地由具有至少一個x86指令集核心之處理器1316執行。具有至少一個x86指令集核心之處理器1316表示可藉由相容地執行或以其他方式處理以下各者以便達成與具有至少一個x86指令集核心之Intel處理器實質上相同的結果而執行與具有至少一個x86指令集核心之Intel處理器實質上相同的功能的任一處理器:(1) Intel x86指令集核心之指令集的實質部分,或(2)目標為在具有至少一個x86指令集核心之Intel處理器上執行的應用程式或其他軟體之物件碼版本。x86編譯器1304表示可操作以產生x86二進位碼1306 (例如,物件碼)之編譯器,x86二進位碼1306可在具有或不具有額外連結處理的情況下在具有至少一個x86指令集核心之處理器1316上執行。相似地,圖13展示可使用替代性指令集編譯器1308來編譯呈高階語言1302之程式以產生替代性指令集二進位碼1310,替代性指令集二進位碼1310可原生地由不具有至少一個x86指令集核心之處理器1314 (例如,具有執行MIPS Technologies (Sunnyvale, CA)之MIPS指令集及/或執行ARM Holdings (Sunnyvale, CA)之ARM指令集的核心之處理器)執行。指令轉換器1312可用以將x86二進位碼1306轉換成可原生地由不具有x86指令集核心之處理器1314執行的程式碼。此經轉換程式碼可不與替代性指令集二進位碼1310相同;然而,該經轉換程式碼將實現一般操作且由來自替代性指令集之指令構成。因此,指令轉換器1312表示透過模仿、模擬或任何其他程序而允許不具有x86指令集處理器或核心之處理器或其他電子裝置執行x86二進位碼1306的軟體、韌體、硬體或其組合。
圖14為根據本發明之實施例的處理器之指令集架構1400之方塊圖。指令集架構1400可包括任何合適數目或種類之組件。
舉例而言,指令集架構1400可包括處理實體,諸如一或多個核心1406、1407及圖形處理單元1415。核心1406、1407可透過任何合適機構(諸如透過匯流排或快取記憶體)而以通訊方式耦接至指令集架構1400之其餘部分。在一個實施例中,核心1406、1407可透過L2快取記憶體控制1408 (其可包括匯流排介面單元1409及L2快取記憶體1411)而以通訊方式耦接。核心1406、1407及圖形處理單元1415可透過互連件1410而以通訊方式耦接至彼此及至指令集架構1400之剩餘部分。在一個實施例中,圖形處理單元1415可使用界定將編碼及解碼特定視訊信號以供輸出之方式的視訊程式碼1420。
指令集架構1400亦可包括用於與電子裝置或系統之其他部分介接或通訊的任何數目或種類之介面、控制器或其他機構。此等機構可促進與(例如)周邊設備、通訊裝置、其他處理器或記憶體之互動。在圖14之實例中,指令集架構1400可包括液晶顯示器(LCD)視訊介面1425、用戶介面模組(SIM)介面1430、開機ROM介面1435、同步動態隨機存取記憶體(SDRAM)控制器1440、快閃控制器1445,及串列周邊介面(SPI)主控器單元1450。LCD視訊介面1425可將視訊信號之輸出自(例如) GPU 1415且透過(例如)行動產業處理器介面(MIPI) 1490或高清晰度多媒體介面(HDMI) 1495而提供至顯示器。舉例而言,此顯示器可包括LCD。SIM介面1430可提供至或自SIM卡或裝置之存取。SDRAM控制器1440可提供至或自記憶體(諸如SDRAM晶片或模組1460)之存取。快閃控制器1445可提供至或自記憶體(諸如快閃記憶體1465或RAM之其他執行個體)之存取。SPI主控器單元1450可提供至或自通訊模組(諸如實施諸如802.11之通訊標準的藍芽模組1470、高速3G數據機1475、全球定位系統模組1480或無線模組1485)之存取。
圖15為根據本發明之實施例的處理器之指令集架構1500之更詳細方塊圖。指令架構1500可實施指令集架構1400之一或多個態樣。此外,指令集架構1500可說明用於在處理器內執行指令之模組及機構。
指令架構1500可包括以通訊方式耦接至一或多個執行實體1565之記憶體系統1540。此外,指令架構1500可包括以通訊方式耦接至執行實體1565及記憶體系統1540之快取及匯流排介面單元,諸如單元1510。在一個實施例中,指令至執行實體1565中之載入可由一或多個執行級執行。舉例而言,此等級可包括指令預提取級1530、雙指令解碼級1550、暫存器重新命名級1555、發行級1560,及寫回級1570。
在一個實施例中,記憶體系統1540可包括經執行指令指標1580。經執行指令指標1580可儲存識別一批指令內最舊的未分派指令之值。最舊指令可對應於最低程式次序(PO)值。PO可包括指令之唯一編號。此指令可為由多個股線表示之執行緒內的單一指令。PO可用於排序指令中以確保程式碼之正確的執行語義。可藉由諸如評估至在指令中編碼之PO之增量而非絕對值的機制來重新建構PO。此經重新建構PO可被稱為「RPO」。雖然本文中可參考PO,但可將此PO與RPO互換地使用。股線可包括彼此資料相依之一連串指令。股線可由二進位轉譯器在編譯時間配置。執行股線之硬體可按根據各種指令之PO的次序執行給定股線之指令。執行緒可包括多個股線,使得不同股線之指令可彼此相依。給定股線之PO可為股線中尚未自發行級分派至執行的最舊指令之PO。因此,在給出多個股線之執行緒的情況下,每一股線包括按PO排序之指令,經執行指令指標1580可將最舊(由最低編號所說明) PO儲存於執行緒中。
在另一實施例中,記憶體系統1540可包括淘汰指標1582。淘汰指標1582可儲存識別最後經淘汰指令之PO的值。淘汰指標1582可由(例如)淘汰單元454設定。若尚未淘汰指令,則淘汰指標1582可包括空值。
執行實體1565可包括可供處理器執行指令的任何合適數目及種類之機制。在圖15之實例中,執行實體1565可包括ALU/乘法單元(MUL) 1566、ALU 1567,及浮點單元(FPU) 1568。在一個實施例中,此等實體可使用含於給定位址1569內之資訊。執行實體1565與級1530、1550、1555、1560、1570之組合可共同地形成執行單元。
單元1510可以任何合適方式予以實施。在一個實施例中,單元1510可執行快取記憶體控制。在此實施例中,單元1510可因此包括快取記憶體1525。在一另外實施例中,快取記憶體1525可被實施為具有任何合適大小之L2統一快取記憶體,諸如零、128k、256k、512k、1M或2M位元組之記憶體。在另一另外實施例中,快取記憶體1525可實施於錯誤校正碼記憶體中。在另一實施例中,單元1510可執行至處理器或電子裝置之其他部分的匯流排介接。在此實施例中,單元1510可因此包括用於在互連件、處理器內匯流排、處理器間匯流排或其他通訊匯流排、埠或線路上通訊之匯流排介面單元1520。匯流排介面單元1520可提供介接以便執行(例如)記憶體及輸入/輸出位址之產生以用於在執行實體1565與系統的在指令架構1500外部之部分之間傳送資料。
為了進一步促進匯流排介面單元1520之功能,匯流排介面單元1520可包括用於產生中斷及至處理器或電子裝置之其他部分之其他通訊的中斷控制及散佈單元1511。在一個實施例中,匯流排介面單元1520可包括處置快取記憶體存取及多個處理核心之同調性的窺探控制單元1512。在一另外實施例中,為了提供此功能性,窺探控制單元1512可包括處置不同快取記憶體之間的資訊交換之快取記憶體至快取記憶體傳送單元。在另一另外實施例中,窺探控制單元1512可包括一或多個窺探篩選器1514,窺探篩選器1514監測其他快取記憶體(未圖示)之同調性,使得快取記憶體控制器(諸如單元1510)不必直接執行此監測。單元1510可包括用於使指令架構1500之動作同步的任何合適數目個計時器1515。單元1510亦可包括AC埠1516。
記憶體系統1540可包括用於儲存用於指令架構1500之處理需要之資訊的任何合適數目及種類之機構。在一個實施例中,記憶體系統1540可包括用於儲存資訊之載入儲存單元1546,諸如寫入至記憶體或暫存器或自記憶體或暫存器讀取之緩衝器。在另一實施例中,記憶體系統1540可包括轉譯後援緩衝器(TLB) 1545,其提供位址值在實體位址與虛擬位址之間的查找。在又一實施例中,記憶體系統1540可包括用於促進對虛擬記憶體之存取的記憶體管理單元(MMU) 1544。在再一實施例中,記憶體系統1540可包括預提取器1543以用於在指令實際上需要執行之前向記憶體請求此等指令,以便縮減潛時。
用以執行指令之指令架構1500之操作可透過不同級而執行。舉例而言,在使用單元1510的情況下,指令預提取級1530可透過預提取器1543來存取指令。可將所擷取之指令儲存於指令快取記憶體1532中。預提取級1530可啟用用於快速迴路模式之選項1531,其中執行形成足夠小以擬合於給定快取記憶體內之迴路之一系列指令。在一個實施例中,可執行此執行而無需自(例如)指令快取記憶體1532存取額外指令。對預提取何指令之判定可由(例如)分支預測單元1535進行,分支預測單元1535可存取全域歷史1536中之執行之指示、目標位址1537之指示,或傳回堆疊1538之內容,以判定接下來將執行程式碼之分支1557中的哪一者。結果,可能可預提取此等分支。分支1557可透過如下文所描述之其他操作級而產生。指令預提取級1530可將指令以及關於未來指令之任何預測提供至雙指令解碼級1550。
雙指令解碼級1550可將經接收指令轉譯成可執行的基於微碼之指令。雙指令解碼級1550可在每時脈循環同時解碼兩個指令。此外,雙指令解碼級1550可將其結果傳遞至暫存器重新命名級1555。此外,雙指令解碼級1550可自其解碼及微碼之最後執行來判定任何所得分支。此等結果可輸入至分支1557中。
暫存器重新命名級1555可將對虛擬暫存器或其他資源之參考轉譯成對實體暫存器或資源之參考。暫存器重新命名級1555可包括暫存器集區1556中的此映像之指示。暫存器重新命名級1555可在接收到指令時更改該等指令且將結果發送至發行級1560。
發行級1560可將命令發行或分派至執行實體1565。此發行可以無序方式執行。在一個實施例中,可在執行多個指令之前將該等指令保持於發行級1560。發行級1560可包括用於保持此等多個命令之指令佇列1561。基於任何可接受準則(諸如用於給定指令之執行的資源之可用性或適用性),指令可由發行級1560發行至特定處理實體1565。在一個實施例中,發行級1560可對指令佇列1561內之資料重新排序,使得所接收之第一指令可不為被執行之第一指令。基於指令佇列1561之排序,可將額外分支資訊提供至分支1557。發行級1560可將指令傳遞至執行實體1565以供執行。
在執行後,寫回級1570就可將資料寫入至暫存器、佇列或指令集架構1500之其他結構中,以傳達給定命令之完成。取決於配置於發行級1560中之指令之次序,寫回級1570之操作可使額外指令能夠被執行。指令集架構1500之執行可由追蹤單元1575監測或除錯。
圖16為根據本發明之實施例的用於處理器之指令集架構之執行管線1600之方塊圖。執行管線1600可說明(例如)圖15之指令架構1500之操作。
執行管線1600可包括步驟或操作之任何合適組合。在1605中,可進行接下來將執行之分支之預測。在一個實施例中,此等預測可基於指令之先前執行及其結果。在1610中,可將對應於經預測執行分支之指令載入至指令快取記憶體中。在1615中,可提取指令快取記憶體中之一或多個此等指令以供執行。在1620中,可將已提取之指令解碼成微碼或更特定的機器語言。在一個實施例中,可同時解碼多個指令。在1625中,可重新指派經解碼指令內對暫存器或其他資源之參考。舉例而言,可運用對對應實體暫存器之參考來替換對虛擬暫存器之參考。在1630中,可將指令分派至佇列以供執行。在1640中,可執行指令。可以任何合適方式執行此執行。在1650中,可將指令發行至合適執行實體。執行指令之方式可取決於執行指令之特定實體。舉例而言,在1655處,ALU可執行算術功能。ALU可將單一時脈循環用於其操作,以及利用兩個移位器。在一個實施例中,可使用兩個ALU,且因此,在1655處可執行兩個指令。在1660處,可進行所得分支之判定。程式計數器可用以指定分支將到達之目的地。1660可在單一時脈循環內執行。在1665處,可由一或多個FPU執行浮點算術。浮點運算可需要執行多個時脈循環,諸如兩個至十個循環。在1670處,可執行乘法及除法運算。此等運算可在四個時脈循環中執行。在1675處,可執行至管線1600之暫存器或其他部分之載入及儲存操作。該等操作可包括載入及儲存位址。此等操作可在四個時脈循環中執行。在1680處,可如由1655至1675之所得操作所需要而執行寫回操作。
圖17為根據本發明之實施例的用於利用處理器1710之電子裝置1700之方塊圖。舉例而言,電子裝置1700可包括筆記型電腦、超級本、電腦、塔式伺服器、架式伺服器、刀鋒伺服器、膝上型電腦、桌上型電腦、平板電腦、行動裝置、電話、嵌入式電腦,或任何其他合適電子裝置。
電子裝置1700可包括以通訊方式耦接至任何合適數目或種類之組件、周邊設備、模組或裝置的處理器1710。此耦接可由諸如以下各者的任何合適種類之匯流排或介面實現:I2 C匯流排、系統管理匯流排(SMBus)、低接腳計數(LPC)匯流排、SPI、高清晰度音訊(HDA)匯流排、串列進階附接技術(SATA)匯流排、USB匯流排(版本1、2、3),或通用非同步接收器/傳輸器(UART)匯流排。
舉例而言,此等組件可包括顯示器1724、觸控螢幕1725、觸控板1730、近場通訊(NFC)單元1745、感測器集線器1740、熱感測器1746、快速晶片組(EC) 1735、受信任平台模組(TPM) 1738、BIOS/韌體/快閃記憶體1722、數位信號處理器1760、磁碟機1720 (諸如固態磁碟(SSD)或硬碟機(HDD))、無線區域網路(WLAN)單元1750、藍芽單元1752、無線廣域網路(WWAN)單元1756、全球定位系統(GPS)1775、攝影機1754 (諸如USB 3.0攝影機),或以(例如) LPDDR3標準而實施之低電力雙資料速率(LPDDR)記憶體單元1715。此等組件可各自以任何合適方式予以實施。
此外,在各種實施例中,其他組件可透過上文所論述之組件而以通訊方式耦接至處理器1710。舉例而言,加速度計1741、環境光感測器(ALS) 1742、羅盤1743及迴轉儀1744可以通訊方式耦接至感測器集線器1740。熱感測器1739、風扇1737、鍵盤1736及觸控板1730可以通訊方式耦接至EC 1735。揚聲器1763、頭戴式耳機1764及麥克風1765可以通訊方式耦接至音訊單元1762,音訊單元1762又可以通訊方式耦接至DSP 1760。音訊單元1762可包括(例如)音訊編解碼器及D類放大器。SIM卡1757可以通訊方式耦接至WWAN單元1756。諸如WLAN單元1750及藍芽單元1752之組件以及WWAN單元1756可以下一代外觀尺寸(next generation form factor;NGFF)予以實施。
圖18為根據本發明之實施例的用於指令或操作之排列序列之指令及邏輯之實例系統1800的說明。本發明之實施例涉及用於執行排列操作之指令及處理邏輯。在一個實施例中,可使用無序載入來縮減或最小化某些資料轉換所需要的排列操作之數目。在又一實施例中,可藉由使用可部分地或完全地(透過遮蔽)再使用索引向量作為目的地向量從而允許其本質上充當三源排列指令之排列操作來縮減某些資料轉換所需要的排列操作之數目。
導致藉由排列而執行之資料轉換的操作可實施指令跨步,其中將多個操作同時應用於結構之不同元素。舉例而言,操作可部分地實施Stride-5操作,但本發明之原理可適用於對不同數目個元素之跨步操作。在一個實施例中,可對相同類型之五個元素進行操作。陣列內之每一不同結構可由不同陰影或色彩表示,且給定結構內之每一元素可由其編號(0…4)展示。
更具體言之,可在將結構陣列(AOS)資料格式轉換成陣列結構(SOA)資料格式時出現對實施跨步操作之需要。圖21中簡要地展示此等操作。在給出記憶體或快取記憶體中之陣列2102的情況下,用於五個單獨結構之資料可相連地(無論實體地抑或虛擬地)配置於記憶體中。在一個實施例中,每一結構(結構1…結構8)可具有彼此相同之格式。八個結構可各自為(例如)五元素結構,其中每一元素為(例如)雙。在其他實例中,結構之每一元素可為浮動、單或其他資料類型。每一元素可屬於相同資料類型。陣列2102可由其記憶體中之基底位置r 參考。
可執行將AOS轉換至SOA之程序。系統1800可以高效方式執行此轉換。
結果,可產生陣列結構2104。每一陣列(陣列1…陣列4)可載入至不同目的地中,諸如暫存器或記憶體或快取記憶體位置。每一陣列可包括(例如)來自結構之所有第一元素、來自結構之所有第二元素、來自結構之所有第三元素、來自結構之所有第四元素,或來自結構之所有第五元素。
藉由將陣列結構2104配置至不同暫存器中(每一暫存器具有來自結構陣列2102之所有結構的所有特定帶索引元素),可以增加之效率對每一暫存器執行額外操作。舉例而言,在執行程式碼之迴圈中,可將每一結構之第一元素添加至每一結構之第二元素,或可分析每一結構之第三元素。藉由將所有此等元素隔離至單一暫存器或其他位置中,可執行向量運算。使用SIMD技術之此等向量運算可在時脈循環中在單一時間對陣列之所有元素執行加法、分析或其他執行。AOS至SOA格式之變換可允許諸如此等運算之向量化運算。
返回至圖18,系統1800可執行圖21所展示之AOS-SOA轉換。在一個實施例中,系統1800可按序列利用排列操作以便執行AOS-SOA轉換。在一另外實施例中,與藉由使用可選擇性地再使用索引向量之部分或全部作為目的地向量之排列功能的特定組合而使用排列序列之其他系統相比較,系統1800可利用經最佳化或經改良之排列序列。在又一另外實施例中,系統1800可利用無序(OOO)載入以縮減或最小化執行AOS-SOA轉換所需要的排列之數目。
可對任何合適觸發器進行AOS-SOA轉換。在一個實施例中,系統1800可對將被執行AOS-SOA轉換的指令串流1802中之特定指令執行此轉換。在另一實施例中,系統1800可基於來自指令串流1802之另一指令之所提議執行而推斷應執行AOS-SOA轉換。舉例而言,在判定將執行跨步操作、向量運算或對跨步資料之操作後,系統1800就可辨識此執行將運用經轉換至跨步資料之資料予以更高效地執行,且執行AOS-SOA轉換。系統1800之任何合適部分可判定將執行AOS-SOA轉換,諸如前端、解碼器、動態轉譯器或其他合適部分,諸如適時解譯器或編譯器。
在一些系統中,AOS-SOA轉換可由搜集指令執行。在其他系統中,AOS-SOA轉換可由載入、合成及排列指令執行。然而,系統1800可使用縮減所需要的排列指令之總數目的排列指令來高效地執行轉換。
系統1800可包括處理器、SoC、積體電路或其他機構。舉例而言,系統1800可包括處理器1804。儘管在圖18中將處理器1804展示及描述為實例,但可使用任何合適機構。處理器1804可包括用於執行目標為向量暫存器之向量運算的任何合適機構,該等向量運算包括對儲存於含有多個元素之向量暫存器中之結構進行操作的彼等運算。在一個實施例中,此等機構可以硬體予以實施。處理器1804可由圖1至圖17所描述之元件完全地或部分地實施。
將在處理器1804上執行之指令可包括於指令串流1802中。指令串流1802可由(例如)編譯器、適時解譯器或其他合適機構(其可或可不包括於系統1800中)產生,或可由產生指令串流1802之程式碼之描圖器指定。舉例而言,編譯器可採取應用程式碼,且產生呈指令串流1802之形式的可執行程式碼。指令可由處理器1804自指令串流1802接收。指令串流1802可按任何合適方式載入至處理器1804。舉例而言,待由處理器1804執行之指令可自儲存體、自其他機器或自其他記憶體(諸如記憶體系統1830)載入。指令可到達且可用於諸如RAM之駐留記憶體,其中自儲存體提取指令以供處理器1804執行。指令可例如藉由自駐留記憶體提取。在一個實施例中,指令串流1802可包括將觸發AOS-SOA轉換之指令1822。
處理器1804可包括前端1806,前端1806可包括指令提取管線級及解碼管線級。前端1806可運用提取單元1808來接收指令,且使用解碼單元1810來解碼來自指令串流1802之指令。經解碼指令可經分派、分配及排程以用於由管線之分配級(諸如分配器1814)執行,且經分配至特定執行單元1816以供執行。待由處理器1804執行之一或多個特定指令可包括於經界定以用於由處理器1804執行之程式庫中。在另一實施例中,特定指令可為處理器1804之特定部分之目標。舉例而言,處理器1804可辨識指令串流1802中的用以在軟體中執行向量運算之嘗試,且可將指令發行至執行單元1816中之特定者。
在執行期間,可透過記憶體子系統1820而對資料或額外指令(包括駐留於記憶體系統1830中之資料或指令)進行存取。此外,來自執行之結果可儲存於記憶體子系統1820中,且隨後可清空至記憶體之其他部分。記憶體子系統1820可包括(例如)記憶體、RAM或快取記憶體階層,該快取記憶體階層可包括一或多個層級1 (L1)快取記憶體或層級2 (L2)快取記憶體,該等快取記憶體中之一些可由多個核心1812或處理器1804共用。在由執行單元1816執行之後,指令可由淘汰單元1818中之寫回級或淘汰級淘汰。此執行管線化之各種部分可由一或多個核心1812執行。
執行向量指令之執行單元1816可以任何合適方式實施。在一個實施例中,執行單元1816可包括或可以通訊方式耦接至記憶體元件以儲存對於執行一或多個向量運算所必要之資訊。在一個實施例中,執行單元1816可包括用以對stride5或其他資料執行跨步操作的電路系統。舉例而言,執行單元1816可包括用以在給定時脈循環內同時對多個資料元素實施指令的電路系統。
在本發明之實施例中,處理器1804之指令集架構可實施被定義為Intel®進階向量延伸512 (Intel® AVX-512)指令之一或多個延伸向量指令。處理器1804可辨識(隱含地或透過特定指令之解碼及執行)將執行此等延伸向量運算中之一者。在此等狀況下,可將延伸向量運算引導至執行單元1816中之特定者以用於執行指令。在一個實施例中,指令集架構可包括針對512位元SIMD操作之支援。舉例而言,由執行單元1816實施之指令集架構可包括各自為512位元寬的32個向量暫存器,及針對高達512位元寬之向量的支援。由執行單元1816實施之指令集架構可包括用於有條件地執行且高效地合併目的地運算元之八個專用遮罩暫存器。至少一些延伸向量指令可包括針對廣播的支援。至少一些延伸向量指令可包括針對嵌入式遮蔽之支援以實現預測。
至少一些延伸向量指令可同時將相同操作應用於儲存於向量暫存器中之向量之每一元素。其他延伸向量指令可將相同操作應用於多個源向量暫存器中之對應元素。舉例而言,可將相同操作應用於由延伸向量指令儲存於向量暫存器中之封裝資料項目的個別資料元素中之每一者。在另一實例中,延伸向量指令可指定待對兩個源向量運算元之各別資料元素執行以產生目的地向量運算元之單一向量運算。
在本發明之實施例中,至少一些延伸向量指令可由處理器核心內之SIMD共處理器執行。舉例而言,核心1812內之執行單元1816中之一或多者可實施SIMD共處理器之功能性。SIMD共處理器可由圖1至圖17所描述之元件完全地或部分地實施。在一個實施例中,指令串流1802內由處理器1804接收之延伸向量指令可被引導至實施SIMD共處理器之功能性的執行單元1816。
在執行期間,回應於可受益於跨步資料之操作,系統1800可執行導致AOS-SOA轉換1830之指令。以下諸圖中可展示此轉換之實例操作。
AOS-SOA轉換之一些態樣可利用排列指令。排列指令可選擇性地識別待儲存於目的地向量中的兩個或多於兩個源向量之元素之任何組合。此外,元素之組合可以任何所要次序儲存。為了執行此操作,可指定索引向量,其中索引向量之每一元素針對目的地向量之元素指定組合源當中之哪一元素將儲存於目的地向量中。
可使用若干形式之排列指令。舉例而言,諸如VPERMT2D之二源排列指令可包括一遮罩及三個其他運算子或參數。VPERMT2D可使用(例如) VPERMT2D {遮罩}源1、索引、源2予以調用,但參數之次序可呈任何合適配置。源1、索引及源2可全部為相同大小之向量。遮罩可用以選擇性寫入至目的地。因此,若遮罩為全1,則將寫入所有結果,但可設定二進位遮罩以便選擇性地寫入排列之子集。排列操作將自源1及源2之組合選擇值以寫入至目的地。源或索引亦可充當排列之目的地。舉例而言,源1可用作目的地。在其他實例中,VPERMT2可覆寫源暫存器上之結果,而VPERMI2可覆寫索引暫存器上之結果。索引之元素可指定源1及源2之哪些元素待寫入至目的地。給定位置處的索引之給定元素可指定源1及源2中之哪些在給定位置處的目的地中之位置處待寫入至目的地。索引之元素可指定將寫入至目的地的源1及源2之組合內之偏移。
舉例而言,考慮調用VPERMT2D {遮罩 = 01111111} {源1 = zmm0 = {a b c d e f g h} {索引 = zmm31 = {-1 11 6 1 15 10 5 0} {源2 = zmm1 = i j k l m n o p}。將根據遮罩來寫入源1 (zmm0)的前七個元素。此外,索引可指定將寫入至目的地的源1及源2之組合內之偏移(自右至左)。組合可包括源2至源1之級聯,或{i j k l m n o p a b c d e f g h}。因此,索引可指定目的地之第零元素將運用源2及源1之組合之第零元素或「h」予以寫入。索引可指定目的地之第一元素將運用源2及源1之組合之第五元素或「c」予以寫入。索引可指定(基於零之編號)目的地之第二元素將運用源2及源1之組合之第十元素或「n」予以寫入。索引可指定(基於零之編號)目的地之第三元素將運用源2及源1之組合之第十五元素或「i」予以寫入。索引可指定(基於零之編號)目的地之第四元素將運用源2及源1之組合之第一元素或「g」予以寫入。索引可指定(基於零之編號)目的地之第五元素將運用源2及源1之組合之第六元素或「b」予以寫入。索引可指定(基於零之編號)目的地之第六元素將運用源2及源1之組合之第十一元素或「m」予以寫入。索引可指定(基於零之編號)將不寫入目的地之第七元素,此係因為其係運用「-1」予以指定。因此,結果,排列將得到儲存於源1 (zmm0暫存器)中之{_ m b g i n c h}。
不同排列操作提供顯著的靈活性。舉例而言,圖22所展示之不同排列操作可用以自不同暫存器選擇相同元素(「x」元素),其中此元素橫越源之位置係已知的。
在本發明中,可展示實例偽碼、指令及參數。然而,可在適當時取代為及使用其他偽碼、指令及參數。指令可包括用於實例目的之Intel®指令。
圖19說明根據本發明之實施例的執行SIMD操作之資料處理系統之實例處理器核心1900。處理器1900可由圖1至圖18所描述之元件完全地或部分地實施。在一個實施例中,處理器核心1900可包括主處理器1920及SIMD共處理器1910。SIMD共處理器1910可由圖1至圖17所描述之元件完全地或部分地實施。在一個實施例中,SIMD共處理器1910可實施圖18所說明之執行單元1816中之一者之至少一部分。在一個實施例中,SIMD共處理器1910可包括SIMD執行單元1912及延伸向量暫存器檔案1914。SIMD共處理器1910可執行延伸SIMD指令集1916之操作。延伸SIMD指令集1916可包括一或多個延伸向量指令。此等延伸向量指令可控制包括與駐留於延伸向量暫存器檔案1914中之資料之互動的資料處理操作。
在一個實施例中,主處理器1920可包括解碼器1922,以辨識延伸SIMD指令集1916之指令以供SIMD共處理器1910執行。在其他實施例中,SIMD共處理器1910可包括解碼器(未圖示)之至少部分以解碼延伸SIMD指令集1916之指令。處理器核心1900亦可包括對於理解本發明之實施例可為不必要的額外電路系統(未圖示)。
在本發明之實施例中,主處理器1920可執行控制一般類型之資料處理操作(包括與快取記憶體1924及/或暫存器檔案1926之互動)的資料處理指令串流。嵌入於資料處理指令串流內的可為延伸SIMD指令集1916之SIMD共處理器指令。主處理器1920之解碼器1922可將此等SIMD共處理器指令辨識為屬於應由附接式SIMD共處理器1910執行之類型。因此,主處理器1920可在共處理器匯流排1915上發行此等SIMD共處理器指令(或表示SIMD共處理器指令之控制信號)。自共處理器匯流排1915,此等指令可由任何附接式SIMD共處理器接收。在圖19所說明之實例實施例中,SIMD共處理器1910可接受及執行意欲用於在SIMD共處理器1910上執行之任何經接收共處理器指令。
在一個實施例中,主處理器1920及SIMD共處理器1920可整合至單一處理器核心1900中,單一處理器核心1900包括一執行單元、一組暫存器檔案及一解碼器以辨識延伸SIMD指令集1916之指令。
圖18及圖19所描繪之實例實施方案僅僅為說明性的且並不意謂對本文中所描述之用於執行延伸向量運算之機制之實施方案的限制性。
圖20為說明根據本發明之實施例的實例延伸向量暫存器檔案1914之方塊圖。延伸向量暫存器檔案1914可包括32個SIMD暫存器(ZMM0至ZMM31),該等SIMD暫存器中之每一者為512位元寬。ZMM暫存器中之每一者的下部256個位元混疊至各別256位元YMM暫存器。YMM暫存器中之每一者的下部128個位元混疊至各別128位元XMM暫存器。舉例而言,暫存器ZMM0 (被展示為2001)之位元255至0混疊至暫存器YMM0,且暫存器ZMM0之位元127至0混疊至暫存器XMM0。相似地,暫存器ZMM1 (被展示為2002)之位元255至0混疊至暫存器YMM1,暫存器ZMM1之位元127至0混疊至暫存器XMM1,暫存器ZMM2 (被展示為2003)之位元255至0混疊至暫存器YMM2,暫存器ZMM2之位元127至0混疊至暫存器XMM2,等等。
在一個實施例中,延伸SIMD指令集1916中之延伸向量指令可對延伸向量暫存器檔案1914中之暫存器中之任一者進行操作,該等暫存器包括暫存器ZMM0至ZMM31、暫存器YMM0至YMM15及暫存器XMM0至XMM7。在另一實施例中,在開發行Intel® AVX-512指令集架構之前所實施的舊版SIMD指令可對延伸向量暫存器檔案1914中之YMM或XMM暫存器之子集進行操作。舉例而言,在一些實施例中,藉由一些舊版SIMD指令之存取可限於暫存器YMM0至YMM15或暫存器XMM0至XMM7。
在本發明之實施例中,指令集架構可支援存取高達四個指令運算元之延伸向量指令。舉例而言,在至少一些實施例中,延伸向量指令可存取圖20所展示之32個延伸向量暫存器ZMM0至ZMM31中之任一者作為源或目的地運算元。在一些實施例中,延伸向量指令可存取八個專用遮罩暫存器中之任一者。在一些實施例中,延伸向量指令可存取十六個一般用途暫存器中之任一者作為源或目的地運算元。
在本發明之實施例中,延伸向量指令之編碼可包括指定待執行之特定向量運算的作業碼。延伸向量指令之編碼可包括識別八個專用遮罩暫存器k0至k7中之任一者的編碼。經識別遮罩暫存器之每一位元可控管向量運算在其被應用於各別源向量元素或目的地向量元素時的行為。舉例而言,在一個實施例中,此等遮罩暫存器中的七個(k1至k7)可用以有條件地控管延伸向量指令之每資料元素計算運算。在此實例中,若未設定對應遮罩位元,則對於給定向量元素不執行運算。在另一實施例中,遮罩暫存器k1至k7可用以有條件地控管對延伸向量指令之目的地運算元之每元素更新。在此實例中,若未設定對應遮罩位元,則不運用操作之結果來更新給定目的地元素。
在一個實施例中,延伸向量指令之編碼可包括指定待應用於延伸向量指令之目的地(結果)向量之遮蔽之類型的編碼。舉例而言,此編碼可指定將合併遮蔽抑或零遮蔽應用於向量運算之執行。若此編碼指定合併遮蔽,則遮罩暫存器中之對應位元未經設定的任何目的地向量元素之值可保留於目的地向量中。若此編碼指定零遮蔽,則遮罩暫存器中之對應位元未經設定的任何目的地向量元素之值可在目的地向量中運用零值予以替換。在一個實例實施例中,不使用遮罩暫存器k0作為向量運算之預測運算元。在此實例中,在其他狀況下選擇遮罩k0之編碼值可代替地選擇全部為1之隱含遮罩值,藉此實際上停用遮蔽。在此實例中,可將遮罩暫存器k0用於採取一或多個遮罩暫存器作為源或目的地運算元之任何指令。
下文展示延伸向量指令之使用及語法之一個實例: VADDPS zmm1, zmm2, zmm3
在一個實施例中,上文所展示之指令可將向量加法運算應用於源向量暫存器zmm2及zmm3之所有元素。在一個實施例中,上文所展示之指令可將結果向量儲存於目的地向量暫存器zmm1中。 替代地,下文展示用以有條件地應用向量運算之指令: VADDPS zmm1 {k1}{z}, zmm2, zmm3
在此實例中,指令可將向量加法運算應用於遮罩暫存器k1中之對應位元經設定的源向量暫存器zmm2及zmm3之元素。在此實例中,若設定{z}修飾符,則儲存於目的地向量暫存器zmm1中之對應於遮罩暫存器k1中未經設定之位元的結果向量之元素之值可運用零值予以替換。否則,若未設定{z}修飾符,或若未指定{z}修飾符,則可保留儲存於目的地向量暫存器zmm1中之對應於遮罩暫存器k1中未經設定之位元的結果向量之元素之值。
在一個實施例中,一些延伸向量指令之編碼可包括用以指定嵌入式廣播之使用的編碼。若針對載入來自記憶體之資料且執行某一計算或資料移動操作之指令包括指定嵌入式廣播之使用的編碼,則來自記憶體之單一源元素可橫越有效源運算元之所有元素而廣播。舉例而言,當相同純量運算元將用於應用於源向量之所有元素的計算中時,可針對向量指令指定嵌入式廣播。在一個實施例中,延伸向量指令之編碼可包括指定封裝至源向量暫存器中或待封裝至目的地向量暫存器中之資料元素之大小的編碼。舉例而言,編碼可指定每一資料元素為位元組、字、雙字或四倍字等等。在另一實施例中,延伸向量指令之編碼可包括指定封裝至源向量暫存器中或待封裝至目的地向量暫存器中之資料元素之資料類型的編碼。舉例而言,編碼可指定資料表示單精確度或雙精確度整數,或多個支援之浮點資料類型中之任一者。
在一個實施例中,延伸向量指令之編碼可包括指定用來存取源或目的地運算元之記憶體位址或記憶體定址模式的編碼。在另一實施例中,延伸向量指令之編碼可包括指定為指令之運算元之純量整數或純量浮點數的編碼。雖然本文中描述若干特定延伸向量指令及其編碼,但此等指令及編碼僅僅為可實施於本發明之實施例中的延伸向量指令之實例。在其他實施例中,更多、更少或不同延伸向量指令可實施於指令集架構中,且該等指令之編碼可包括更多、更少或不同資訊以控制其執行。
可在各種應用程式中使用以可個別地存取之三個至五個元素之元組而組織的資料結構。舉例而言,RGB (紅-綠-藍)為用於媒體應用程式中之許多編碼方案中的常見格式。儲存此類型之資訊的資料結構可由三個資料元素(R分量、G分量及B分量)組成,該三個資料元素被相連地儲存且為相同的大小(例如,其可皆為32位元整數)。對於在高效能計算應用程式中編碼資料為常見之格式包括共同地表示多維空間內之位置的兩個或多於兩個座標值。舉例而言,資料結構可儲存表示2D空間內之位置的X及Y座標,或可儲存表示3D空間內之位置的X、Y及Z座標。具有較高數目個元素之其他常見資料結構可出現在此等及其他類型之應用程式中。
在一些狀況下,此等類型之資料結構可被組織為陣列。在本發明之實施例中,此等資料結構中之多個資料結構可儲存於單一向量暫存器中,諸如上文所描述之XMM、YMM或ZMM向量暫存器中之一者。在一個實施例中,此等資料結構內之個別資料元素可被重新組織成可接著用於SIMD迴圈中之類似元素之向量,此係因為此等元素在資料結構自身中可能並不彼此緊鄰地儲存。應用程式可包括用以以相同方式對一個類型之所有資料元素進行操作之指令,及用以以不同方式對不同類型之所有資料元素進行操作之指令。在一個實例中,對於各自包括RGB色彩空間中之R分量、G分量及B分量之資料結構之陣列,可將與應用於該陣列之列中之每一者(每一資料結構)中的G分量或B分量之計算運算不同的計算運算應用於該陣列之列中之每一者中的R分量。
在又一實例中,許多分子動力學應用程式對由XYZW資料結構之陣列組成之相鄰者清單進行操作。在此實例中,該等資料結構中之每一者可包括X分量、Y分量、Z分量及W分量。在本發明之實施例中,為了對此等類型之分量中之個別者進行操作,可使用一或多個偶數或奇數向量GET指令以將X值、Y值、Z值及W值自XYZW資料結構之陣列抽取至含有相同類型之元素的單獨向量中。結果,該等向量中之一者可包括所有X值,一者可包括所有Y值,一者可包括所有Z值,且一者可包括所有W值。在一些狀況下,在對此等單獨向量內的資料元素中之至少一些進行操作之後,應用程式可包括整體地對XYZW資料結構進行操作之指令。舉例而言,在更新單獨向量中的X、Y、Z或W值中之至少一些之後,應用程式可包括存取資料結構中之一者以整體地擷取XYZW資料結構或對其進行操作之指令。在此狀況下,可調用一或多個其他指令以便將XYZW值返回儲存為其原始格式。
在本發明之實施例中,可導致AOS至SOA轉換之指令可由處理器核心(諸如系統1800中之核心1812)或由SIMD共處理器(諸如SIMD共處理器1910)實施,可包括用以執行偶數向量GET操作或奇數向量GET操作之指令。該等指令可將經抽取資料元素儲存至含有記憶體中之資料結構之不同資料元素的各別向量中。在一個實施例中,此等指令可用以自資料元素一起儲存於一或多個源向量暫存器內之相連位置中的資料結構抽取資料元素。在一個實施例中,多重元素資料結構中之每一者可表示陣列之列。
在本發明之實施例中,向量暫存器內之不同「通道(lane)」可用以保持不同類型之資料元素。在一個實施例中,每一通道可保持單一類型之多個資料元素。在另一實施例中,保持於單一通道中之資料元素可不屬於相同類型,但其可由應用程式以相同方式操作。舉例而言,一個通道可保持X值,一個通道可保持Y值,等等。在此上下文中,術語「通道」可指代向量暫存器之保持待以相同方式處理之多個資料元素的部分,而非向量暫存器之保持單一資料元素的部分。在另一實施例中,向量暫存器內之不同「通道」可用以保持不同資料結構之資料元素。在此上下文中,術語「通道」可指代向量暫存器之保持單一資料結構之多個資料元素的部分。在此實例中,儲存於每一通道中之資料元素可屬於兩個或多於兩個不同類型。在向量暫存器為512位元寬之一個實施例中,可存在四個128位元通道。舉例而言,512位元向量暫存器內之最低階的128個位元可被稱作第一通道,接下來的128個位元可被稱作第二通道,等等。在此實例中,128位元通道中之每一者可儲存兩個64位元資料元素、四個32位元資料元素、八個16位元資料元素或四個8位元資料元素。在向量暫存器為512位元寬之另一實施例中,可存在兩個256位元通道,其中之每一者儲存各別資料結構之資料元素。在此實例中,256位元通道中之每一者可儲存各自高達128個位元之多個資料元素。
圖21為根據本發明之實施例的AOS-SOA轉換1830之結果的說明。如上文所描述,在給出記憶體中或快取記憶體中之陣列2102的情況下,用於五個單獨結構之資料可相連地(無論實體地抑或虛擬地)配置於記憶體中。在一個實施例中,每一結構(結構1…結構8)可具有彼此相同之格式。八個結構可各自為(例如)五元素結構,其中每一元素為(例如)雙。在其他實例中,結構之每一元素可為浮動、單或其他資料類型。每一元素可屬於相同資料類型。陣列2102可由其記憶體中之基底位置r 參考。
可執行將AOS轉換至SOA之程序。系統1800可以高效方式執行此轉換。
結果,可產生陣列結構2104。每一陣列(陣列1…陣列4)可載入至不同目的地中,諸如暫存器或記憶體或快取記憶體位置。每一陣列可包括(例如)來自結構之所有第一元素、來自結構之所有第二元素、來自結構之所有第三元素、來自結構之所有第四元素,或來自結構之所有第五元素。
藉由將陣列結構2104配置至不同暫存器中(每一暫存器具有來自結構陣列2102之所有結構的所有特定帶索引元素),可以增加之效率對每一暫存器執行額外操作。舉例而言,在執行程式碼之迴圈中,可將每一結構之第一元素添加至每一結構之第二元素,或可分析每一結構之第三元素。藉由將所有此等元素隔離至單一暫存器或其他位置中,可執行向量運算。使用SIMD技術之此等向量運算可在時脈循環中在單一時間對陣列之所有元素執行加法、分析或其他執行。AOS至SOA格式之變換可允許諸如此等運算之向量化運算。
圖22為根據本發明之實施例的合成與排列指令之操作的說明。合成與排列指令可用以執行AOS至SOA轉換之各種態樣。
舉例而言,在給出源zmm1及zmm0的情況下(每一源具有被識別為x、y、z及w座標元素之暫存器元素),排列指令可用以將x座標及y座標元素排列至目的地暫存器中。目的地暫存器可包括源zmm0。由於僅七個x座標及y座標元素存在於源中,因此可遮蔽至目的地之最後元素的寫入(遮罩 = 0x7F)。索引(儲存於zmm31中)可定義來自zmm1及zmm0之組合之元素中的哪些元素待儲存於zmm0中以及按何種次序。舉例而言,索引向量可包括針對待儲存於目的地暫存器之最低有效位置中之x座標元素及待儲存於目的地暫存器之接下來有效部分中之y座標元素的對應位置。結果,可調用VPERMT2D {0x7F} zmm0, zmm31 zmm1,從而引起zmm0儲存如圖22所展示之結果。
在另一實例中,在給出源zmm1及zmm0的情況下(每一源具有被識別為x、y、z及w座標元素之暫存器元素),排列指令可用以將元素排列至目的地暫存器中。然而,元素之次序可並非任意地可選擇的。對於源中之每一相對位置,必須選擇來自源之元素以寫入至目的地。對於源中之給定相對位置,遮罩可定義哪一源將被寫入至目的地。結果,可調用VBLENDMPD {0x9c} zmm2, zmm0, zmm1,從而引起zmm2儲存如圖22所展示之結果。
可使用排列操作以執行AOS-SOA轉換之部分或全部。後續諸圖中更全面詳細地描述此等操作。圖22以較小規模說明此操作。
假設目標係獲得儲存於暫存器zmm0、zmm1、zmm2及zmm3中之x座標。每一暫存器可包括自記憶體載入之內容且可含有多於一個x座標,此係因為每一暫存器包括來自多於一個結構之內容。每一暫存器之內容可包括每一暫存器中之相同相對位置中之x座標(即使x座標來自各種結構)。此等位置可為(例如)給定索引中之第零及第五位置。因此,在給出不同排列功能之靈活性的情況下,單一索引向量(儲存於zmm4中)可用以執行各種排列操作。索引向量可定義:對於源中之任兩者之組合,x值位於相同位置中(索引0、5、8、13)。索引向量可重複此等值且依賴於排列操作之選擇性使用(透過遮蔽)以獲得目的地向量之正確組成物。
舉例而言,可調用VPERMT2D以使用索引zmm4而將zmm2及zmm3排列至zmm2中。此外,由於此等兩個源暫存器為源之左半部,因此其結果可儲存於最後目的地之左半部中。因此,排列操作可運用{0xF0}予以遮蔽,使得zmm2之左半部填充有來自zmm2及zmm3之x座標。可調用VPERMI2D以使用索引zmm4而將zmm0及zmm1排列至zmm4中。由於此等兩個源暫存器為源之右半部,因此其結果可儲存於最後目的地之右半部中。因此,排列操作可運用{0x0F}予以遮蔽,使得zmm4之右半部填充有來自zmm0及zmm1之x座標。值得注意的是,zmm2及zmm4中之結果中之每一者按次序包括來自其各別源之x座標。可合成zmm2及zmm4中之兩個結果。可調用諸如VLENDMPD之合成操作以將zmm4及zmm2合成至zmm5中。合成可使用遮罩{0xF0}來指示:對於右半部,應使用zmm4值,且對於左半部,應使用zmm2值。結果可為來自源的在zmm5中排序之x座標之集合。
圖23為根據本發明之實施例的排列指令之操作的說明。排列指令可用以執行AOS至SOA轉換之各種態樣。排列指令之操作可改良圖22所展示之合成與排列指令之操作,使得可使用兩個排列指令(而非兩個排列指令及一合成指令)來完成相同任務。
在一個實施例中,用以執行AOS至SOA轉換之態樣的排列指令之操作可依賴於用以再使用索引向量來儲存結果的排列指令之特徵。藉由將結果僅選擇性地儲存於索引向量之部分中且保留索引向量之剩餘部分,可節省操作。如上文所論述,由於可橫越多個源而存在給定座標(諸如x座標)之相同相對位置(反映待轉換之AOS之部分),因此索引向量可重複自身之部分(諸如{13 8 5 0 13 8 5 0}),且可遮蔽(諸如運用0x0F或0xF0)排列操作以到達具有所有x座標之目的地向量。在此等狀況下,可消除索引向量的重複之部分,且可使用針對剩餘部分所遮蔽之排列操作。相反地,不需要的資料元素可使用遮罩而運用索引值予以覆寫。相同寫入遮罩可與排列指令一起使用,排列指令覆寫索引暫存器作為目的地,從而保留一些資料值且運用來自其他源暫存器之資料組合來覆寫不需要的索引值。因此,由VPERMI指令中之「i」表示的排列指令之特定變體可允許與索引控制值混合之資料值之儲放之寫入的合併,從而將二源指令有效地轉換成三源排列指令。
舉例而言,在給出圖22之相同源向量zmm0至zmm3及相似索引向量{13 8 5 0 13 8 5 0}的情況下,可以zmm0及zmm1作為源且以zmm4作為索引來調用VPERM2I。此排列指令可將排列之結果寫入至作為目的地之索引向量。排列操作可經遮蔽(運用0x0F)以僅寫入至索引向量zmm4之四個最低有效元素,從而保留現有值。由於zmm4包括其索引之重複,從而指示源之任何組合之第零、第五、第八及第十三位置將包括x座標,因此索引向量zmm4之半部對於後續排列操作將為足夠的。因此,zmm4可在知道其半部將為可用的情況下被再次使用。排列操作因此可將zmm0及zmm1之組合之第零、第五、第八及第十三元素(具體言之,來自此等源暫存器之x座標)複製至zmm4 (索引向量)之最低有效四個位置中。zmm4之最高四個有效位置將被保留,此係因為該等位置在排列操作中已被遮蔽。
所得zmm4暫存器將充當用於對VPERM2I之另一調用的索引向量源。zmm4暫存器亦將為排列操作之目的地。可根據zmm4之左半部之值來排列其他源zmm2及zmm3,此係因為排列操作係運用0xF0予以遮蔽。因此,將保留zmm4中之最低有效四個位置,該等位置儲存來自zmm0及zmm4之x座標。在zmm4中之最高有效四個位置中之索引值被覆寫時,將儲存來自zmm2及zmm3之額外元素(x座標)。結果,zmm4將按次序包括來自所有四個源之x座標。此結果可與圖22中之結果相同,但運用兩個排列操作而非兩個排列及一合成操作而進行。
此操作之原理可應用於下文進一步論述之操作中。
如圖23所展示,可轉換結構陣列中之不同元素之元組,使得所得暫存器包括所有相同類型之元素。此等元素在圖23中被參考為x、y、z、w及v元素或座標。此等元素可由字母參考以避免與索引向量中所指定之偏移數字的混淆。
圖24為針對八個結構之陣列使用多個搜集之AOS至SOA轉換之操作的說明,其中在使用搜集操作的情況下,每一結構包括五個元素(諸如雙)。
圖24所展示之轉換可展示用以運用搜集指令來執行轉換之傳統序列。如同圖21一樣,頂列可展示記憶體中之結構之佈局,其中0…4之列舉可識別每一向量之等效元素。不同色彩或陰影可指示記憶體中連續地佈局之不同結構。每一結構元素可為五個雙,從而得到四十個位元組。對於總共320位元組之資料,可考慮八個此等元素。最終結果將具有第一暫存器中之所有第0元素、第二暫存器中之所有第1分量等等。
AOS可透過使用五個搜集指令而載入至暫存器中。五個KNORB操作可用以設定遮罩。
首先,可產生搜集索引。可運用偽碼來產生該等搜集索引: __declspec (align(32)) const __int32 gather0_index[8] = {0, 5, 10, 15, 20, 25, 30, 35}; __declspec (align(32)) const __int32 gather1_index[8] = {1, 6, 11, 16, 21, 26, 31, 36}; __declspec (align(32)) const __int32 gather2_index[8] = {2, 7, 12, 17, 22, 27, 32, 37}; __declspec (align(32)) const __int32 gather3_index[8] = {3, 8, 13, 18, 23, 28, 33, 38}; __declspec (align(32)) const __int32 gather4 _index[8] = {4, 9, 14, 19, 24, 29, 34, 39};
用於gather0之索引可在AOS中識別每一「0」元素之相對位置。用於gather1之索引可在AOS中識別每一「1」元素之相對位置。用於gather2之索引可在AOS中識別每一「2」元素之相對位置。用於gather3之索引可在AOS中識別每一「3」元素之相對位置。用於gather5之索引可在AOS中識別每一「4」元素之相對位置。
在給出此等索引的情況下,可調用KNORW以產生遮罩,接著對VGATHERDPD進行五次調用。對VGATHERDPD之每一調用可基於供應至每一調用之索引來搜集封裝值(在此狀況下為雙)。所提供之索引(r8+ [ymm5->ymm9]*8)可用以根據該等值在何處被搜集且載入至各別暫存器中來識別記憶體中之特定位置(自基底位址r8 ,被縮放雙之大小)。可用以下偽碼來表達該等調用: kxnorw k1, k0, k0 kxnorw k2, k0, k0 kxnorw k3, k0, k0 kxnorw k4, k0, k0 kxnorw k5, k0, k0 vgatherdpd zmm4{k1}, zmmword ptr [r8+ymm9*8] vgatherdpd zmm3{k2}, zmmword ptr [r8+ymm8*8] vgatherdpd zmm2{k3}, zmmword ptr [r8+ymm7*8] vgatherdpd zmm1{k4}, zmmword ptr [r8+ymm6*8] vgatherdpd zmm0{k5}, zmmword ptr [r8+ymm5*8]
圖25為針對八個結構之陣列的AOS至SOA轉換之操作的說明,其中在使用搜集操作的情況下,每一結構包括五個元素(諸如雙)。圖25所展示之轉換可被稱作運用搜集操作之未處理實施方案,此係因為此轉換可能不如稍後諸圖所展示之其他轉換一樣高效。圖25中之操作可實施圖24所展示之轉換。
在給出記憶體中之八個雙之AOS的情況下,可進行五次載入操作以將資料載入至暫存器中。雖然每一結構可包括五個元素,但載入操作可以八之倍數而進行。因此,並非將八個結構載入至五個暫存器中(其中每一暫存器包括未使用空間),而是八個結構可被載入至五個暫存器中。一些結構可橫越多個暫存器而分解。AOS至SOA轉換接著可嘗試將此等八個暫存器之內容分類,使得該等結構之所有(八個)第一元素處於共同暫存器中,該等結構之所有(八個)第二元素處於共同暫存器中,等等。在其他實例中,在具有另一數目個元素(諸如四個)之結構將被處理的情況下,可能需要四個暫存器以儲存結果。
可執行五次額外載入以將來自記憶體之資料載入至暫存器中。然而,可運用遮罩來執行此等載入,使得僅將給定記憶體部分之內容之一些載入至各別暫存器中。特定遮罩可根據將來自給定區段之正確元素(諸如第一、第二、第三、第四或第五)至暫存器中所需要的遮罩予以選擇。由於給定暫存器將僅含有相同的帶索引元素(亦即,所有第一元素、所有第二元素等等),因此選擇遮罩以僅將彼元素篩選至對應暫存器中。在一些狀況下,諸如在本圖中,可在所有此等載入操作中使用同一遮罩。舉例而言,可觀測到,對於此等特定結構,遮罩{01000010}可唯一地識別用於不同記憶體區段之不同的帶索引元素(第一元素、第二元素等等)。因此,將此同一遮罩應用於自記憶體載入之原始記憶體區段將會得到帶索引元素之應用。接著,將遮罩應用於適當暫存器可複製所需元素(亦即,第一、第二或其他元素)。
可針對不同遮罩及源組合重複相同程序,直至暫存器各自填充有各別元素(第一元素或第二元素等等)。可以運用第二遮罩之五次載入、運用第三遮罩之五次載入及運用第四遮罩之五次載入來重複該程序,以實現正確載入組合。結果可為:每一暫存器僅填充有原始結構陣列之第一元素、第二元素、第三元素、第四元素或第五元素中之各別元素。然而,給定暫存器內之元素可能並非以該等元素在原始陣列中之排序的相同方式排序。
因此,可執行數個排列操作以重新排序暫存器之內容以匹配於結構陣列之原始次序。舉例而言,可執行五個排列操作。可視需要而使用臨時暫存器。針對每一排列可能需要一單獨索引向量以提供原始陣列之次序。結果,每一暫存器之內容可根據原始陣列之次序而重新排序。結果可為經轉換AOS產生SOA。可在每一各別暫存器中表示該等陣列。該結構可為該等陣列之組合。
總之,圖25之操作可包括二十五個移動或載入操作,以及五個排列。下文展示用於圖25之實例偽碼。 vmovups zmm11, zmmword ptr [r8+0x40] vmovups zmm7, zmmword ptr [r8+0x80] vmovups zmm13, zmmword ptr [r8+0xc0] vmovups zmm9, zmmword ptr [r8+0x100] vmovapd zmm5{k4}, zmmword ptr [r8+0xc0] vmovapd zmm11{k4}, zmmword ptr [r8+0x100] vmovapd zmm7{k4}, zmmword ptr [r8] vmovapd zmm13{k4}, zmmword ptr [r8+0x40] vmovapd zmm9{k4}, zmmword ptr [r8+0x80] vmovapd zmm5{k3}, zmmword ptr [r8+0x40] vmovapd zmm11{k3}, zmmword ptr [r8+0x80] vmovapd zmm7{k3}, zmmword ptr [r8+0xc0] vmovapd zmm13{k3}, zmmword ptr [r8+0x100] vmovapd zmm9{k3}, zmmword ptr [r8] vmovapd zmm5{k2}, zmmword ptr [r8+0x100] vmovapd zmm11{k2}, zmmword ptr [r8] vmovapd zmm7{k2}, zmmword ptr [r8+0x40] vmovapd zmm13{k2}, zmmword ptr [r8+0x80] vmovapd zmm9{k2}, zmmword ptr [r8+0xc0] vmovapd zmm5{k1} , zmmword ptr [r8+0x80] vmovapd zmm11{k1}, zmmword ptr [r8+0xc0] vmovapd zmm7{k1}, zmmword ptr [r8+0x100] vmovapd zmm13{k1}, zmmword ptr [r8] vmovapd zmm9{k1}, zmmword ptr [r8+0x40] vpermpd zmm6, zmm4, zmm5 vpermpd zmm8, zmm3, zmm7 vpermpd zmm10, zmm2, zmm9 vpermpd zmm12, zmm1, zmm11 vpermpd zmm14, zmm0, zmm13
圖26為根據本發明之實施例的用以使用排列操作來執行轉換之系統1800之操作的說明。可使用同一AOS源。圖26中的運用排列指令之操作可比圖25所展示之許多移動操作更高效。
首先,可將陣列之八個結構未對準地載入至如先前所展示之五個暫存器中。暫存器可包括mm0…mm4。此程序可採取五次載入操作。可將待排列之資料中之一些載入至另一暫存器中。接著運用一索引向量來部分地覆寫彼暫存器。該索引向量可使用可用空間之半部。將運用遮罩來執行引起之排列操作,使得具有原始資料元素之半部不被覆寫,而是被保留。此可運用VPERMI指令予以執行,且可使用其索引向量參數作為目的地向量。接著,使用與寫入遮罩相同之遮罩以將索引載入至索引向量暫存器,使得僅覆寫索引向量暫存器中之索引值。
在對運用五次載入而自記憶體載入至每一暫存器中之資料使用此技術的情況下,且在橫越暫存器保留原始次序的情況下,可能需要總共十四次排列操作來執行AOS-SOA轉換。為了執行此等十四次排列操作,可能需要總共十三個不同索引向量及三個不同遮罩。
圖27為根據本發明之實施例的如圖26所描畫的用以使用排列操作來執行轉換之系統1800之操作的更詳細視圖。圖27亦說明一些索引向量之產生,其中索引向量含有待用作用於排列之參數的一些偏移以及待保留之一些資料。如圖27所展示,可轉換結構陣列中之不同元素之元組,使得所得暫存器包括所有相同類型之元素。此等元素在圖27中被參考為x、y、z、w及v元素或座標。此等元素可由字母參考以避免與索引向量中所指定之偏移數字的混淆。先前圖26中之轉換等效於此等轉換,但圖26中之「0」元素已被指定為「x」元素,「1」元素被指定至「y」元素,等等。
圖27中之系統1800之操作可基於一些排列指令選擇性地覆寫索引向量參數之分量的能力。藉由選擇性地覆寫索引向量之部分,索引向量可繼續充當索引向量且包括作為基線之額外源資訊。可在下一排列中使用用以遮蔽索引向量之寫入的同一遮罩以遮蔽排列之操作。可再次使用該索引。圖23中展示此排列指令之操作。圖27中之系統1800之操作可比圖26所展示之操作更高效。
索引向量可被初始化為: mm0 {0,2,4,6,8,9,14,12} mm1 {9,11,13,15,3,2,7,5} mm3 {0,2,4,5,8,10,12,14} mm4 {9,11,13,15,1,3,5,7} mm5 {3,4,8,9,13,14,-,-} mm6 {2,3,7,8,12,13,-,-} mm7 {2,3,7,8,12,13,-,-} mm8 {0,1,5,6,8,9,10,11} mm9 {2,3,4,5,9,10,14,15} mm10 {0,2,4,6,8,10,12,14} mm11 {1,3,5,7,9,11,13,15} mm12 {0,2,4,6,8,9,12,14} mm13 {1,3,5,7,10,11,13,15} mm14 {2-,12,7,8,3,-,13} mm15 {4,-,-,5,11,12,-,-} mm16 {0,3,2,1,6,5,4,7}
舉例而言,可使用mm7索引向量而將mm7產生為mm3至mm2中之排列。結果,mm7可合併來自此等暫存器之「w」及「v」元素。
暫存器mm2可使用向量索引mm6而運用mm1予以排列,從而將結果儲存至mm6中。結果,mm6可合併來自此等暫存器之「x」及「y」元素。
由於暫存器mm2已使其「x」、「y」、「w」及「v」元素排列至其他位置中,因此僅需要保持其「z」元素。因此,暫存器mm2可既充當「z」元素之源且被載入有其他索引值,又充當用於後續排列之索引向量。詳言之,其可充當用於排列操作之索引向量,其中「z」元素將被合併。可得到效率,其中暫存器mm2無需充當排列中之典型源,但可作為用於另一排列操作之實際第三源而被加上,以合併來自另外兩個向量之「z」元素。舉例而言,mm2可被載入有識別mm3及mm4中之「z」元素位置之偏移值。暫存器mm2可在其於其他狀況下係不保持「z」元素之位置中被載入有索引元素。隨後,可使用mm2作為索引向量以排列來自mm3及mm4之「z」元素。該排列可具有匹配於儲存於mm2中之索引向量元素之寫入遮罩,諸如{0xB0}。接著,可將來自mm4及mm3之「z」元素儲存至mm2中,從而覆寫索引元素,但保留已經在mm2內之「z」元素。
暫存器mm0及mm1可運用mm5中之索引向量予以排列以將其中之「v」及「w」元素合併至mm5中。所得暫存器mm5自身可運用mm7予以排列,該暫存器含有來自mm2及mm3之「v」及「w」之合併。此排列可運用新索引向量mm13予以執行。然而,mm13可能不足以保持來自所有四個原始源暫存器之所有「v」及「w」元素。因此,橋接原始mm2-mm3之「v」及「w」集合可被丟棄,但在其他排列操作中被合併。結果可運用將結果儲存回至mm5中之排列指令予以執行。
暫存器mm7及mm4可運用mm9中之新索引向量予以排列以將其中之「v」及「w」元素合併至mm9中。具有「v」及「w」元素之此暫存器mm9可包括橋接自mm5遺漏之原始mm2-mm3的「v」及「w」元素組合。此外,mm9及mm5可各自包括自另一暫存器遺漏之「v」及「w」元素。因此,此等暫存器可根據不同索引向量而排列兩次,以傳回具有所有「v」元素或所有「w」元素之暫存器。舉例而言,mm9及mm5可藉由索引向量mm11予以排列,從而將所有「v」元素儲存於mm11中。在另一實例中,mm9及mm5可藉由索引向量mm10予以排列,從而將所有「w」元素儲存至mm10中。此等元素可在轉換完成後就在需要時複製回至mm0…mm4中之原始暫存器。
暫存器mm3及mm4可經排列以獲得「z」元素。此等暫存器可根據mm2之內容予以排列,如上文所展示,該等內容自身可能已經排列以保留「z」元素。此外,mm2可能已在不含「z」元素之索引中被填入有索引值以參考來自mm3及mm4之「z」元素。因此,mm3及mm4可運用mm2作為其索引予以排列且將結果儲存回至mm2中。此外,排列可運用遮罩予以執行,其中遮罩(0xB0)保護mm2中已經存在的「z」元素。此外,該遮罩亦可保護mm2中未使用之索引元素以自mm3或mm4獲得「z」元素。事實上,此等索引元素(如此,在排列結束時為mm2)可包括自原始mm2、mm3及mm4合併之「z」元素。此外,mm2可仍保持兩個索引元素以指示運用mm1及mm0的後續排列中之位置以獲得其「z」元素。
所得mm2可包括自對原始mm2、mm3及mm4之排列操作合併的「z」元素。此外,mm2可包括用於識別mm1及mm0中之「z」元素之位置的索引。因此,mm2可用作用於mm1及mm0之排列之向量索引,以合併來自此等額外暫存器之「z」元素。排列可基於「z」元素之位置及mm2內之索引來應用遮罩(0xBD)。遮罩之結果可為:現有「z」元素被保留,而指示mm1及mm0中之「z」元素位置之索引係運用此等「z」元素被覆寫。結果可為mm2,其填充有來自原始陣列之「z」元素。然而,「z」元素之次序可不匹配於如原始陣列中所呈現之次序。可對具有向量索引之mm2調用排列操作,以重新排序其中之「z」元素。所得mm2可為「z」陣列。此等元素可在轉換完成後就在需要時複製回至mm0…mm4中之原始暫存器。
如上文所論述,mm6可包括自mm1及原始mm2排列之「x」及「y」元素。此外,「x」及「y」元素可使用mm8中之新向量索引而自mm0及mm6排列。結果可儲存於mm8中。該等結果可省略來自原始mm2之第二半部的「x」及「y」元素,此係因為mm8不具有用以儲存來自原始mm1、mm2及mm0之「x」及「y」元素之空間。然而,此等元素可在如下文所描述之單獨排列功能中自mm6復原。
暫存器mm3可轉換至索引向量以搭配mm4及mm6 「x」及「y」元素排列操作而使用。然而,在使用用於索引向量值之其他位置的情況下,mm3仍可保持其自身的「x」及「y」元素。可遮蔽(0x39)載入或移動功能以僅編輯mm3中之非「x」及非「y」元素。可以其他方式自新索引向量mm15載入索引向量值。結果仍可被參考為mm3。
所得mm3可用作用於mm4及mm6相對於「x」及「y」元素之排列的索引向量及源。同一遮罩(0x39)可用以執行將排列寫回至mm3中,使得來自mm4及mm6之「x」及「y」元素可在先前充當索引值之位置處合併至mm3中。此版本之mm3可包括來自原始mm4、原始mm3以及mm2之原始第二半部的「x」及「y」元素。
同時,mm8可包括來自其他原始暫存器內容之「x」及「y」元素。因此,mm3及mm8可運用各自具有自身的索引之兩個不同排列操作予以排列,以得到「x」元素之陣列及「y」元素之陣列。暫存器內容可在需要時複製回至mm0…mm4中之原始暫存器。
因此,AOS-SOA轉換可完成。
用以執行此轉換之偽碼可被指定為: vmovups zmm10, zmmword ptr [r8+0x40] vmovups zmm13, zmmword ptr [r8+0x80] vmovups zmm17, zmmword ptr [r8] vmovups zmm16, zmmword ptr [r8+0xc0] vmovups zmm20, zmmword ptr [r8+0x100] vmovaps zmm11, zmm10 vpermt2pd zmm11, zmm8, zmm13 vmovaps zmm19, zmm13 vmovapd zmm13{k3}, zmmword ptr [rip+0x76f2] vpermt2pd zmm19, zmm8, zmm16 vpermi2pd zmm13{k3}, zmm17, zmm10 vmovapd zmm13{k2}, zmmword ptr [rip+0x775c] vpermi2pd zmm13{k2}, zmm16, zmm20 vmovapd zmm16{k1}, zmmword ptr [rip+0x77cc] vpermpd zmm14, zmm4, zmm13 vpermi2pd zmm16{k1}, zmm11, zmm20 vpermt2pd zmm20, zmm6, zmm19 vmovaps zmm12, zmm17 vpermt2pd zmm12, zmm9, zmm10 vpermt2pd zmm17, zmm7, zmm11 vpermt2pd zmm19, zmm5, zmm12 vmovaps zmm15, zmm16 vmovaps zmm18, zmm19 vpermt2pd zmm15, zmm3, zmm17 vpermt2pd zmm17, zmm2, zmm16 vpermt2pd zmm18, zmm1, zmm20 vpermt2pd zmm20, zmm0, zmm19
圖28為根據本發明之實施例的用以使用無序載入及較少排列操作來執行轉換之系統1800之另外操作的說明。圖28中之系統1800之操作可擴增圖27所展示之操作。
圖28中之系統1800之操作可基於以無序方式將資料自陣列載入至暫存器中。此載入可不同於圖27所展示以及其他轉換實例及實施例中所展示之載入。載入可為無序,此在於:一旦第一暫存器被載入有來自陣列之內容,下一暫存器就可被載入有與先前載入之內容不相連的內容。在一個實施例中,可載入用於暫存器之內容,其中該內容在結構之第一各別元素處開始。
舉例而言,結構陣列可包括八個結構,每一結構具有在圖28中被表示為「4 3 2 1 0」之五個元素。載入操作可載入八個元素。因此,給定載入操作可載入整個結構及另一結構之部分。在轉換之先前實例中,後續載入操作自先前載入操作之停止點載入內容。然而,在一個實施例中,可自每一結構中之同一相對元素載入內容以用於前四次載入。結果,間隙可存在於經載入內容中。具體言之,元素「3」及「4」每隔一個結構停止。停止之此等元素可代替地被共同地載入至單一暫存器中。
結果,mm0至mm3可具有相同的相對索引。可取決於結構及陣列之特定大小而使用其他載入方案。然而,在每一載入經設計使得多個暫存器在載入之後包括同一相同的相對索引的情況下,可根據圖28之教示來執行該等載入。因為多個暫存器包括同一相同的相對索引,所以可縮減排列操作之數目。圖26可使用十個排列操作來實現相同轉換,而圖27係使用十四個排列操作予以執行。然而,可需要增加載入操作之數目以實現圖28所展示之原始載入。每一結構之經跳過的「4」及「5」元素可能需要此等額外載入操作。舉例而言,可能需要總共八次載入。
圖29為根據本發明之實施例的如圖28所描畫的用以使用排列操作來執行轉換之系統1800之操作的更詳細視圖。元素可在圖29中被參考為x、y、z、w及v元素或座標。此等元素可由字母參考以避免與索引向量中所指定之偏移數字的混淆。先前圖28中之轉換等效於此等轉換,但圖28中之「0」元素已被指定為「x」元素,「1」元素被指定至「y」元素,等等。
為了執行載入,可執行無遮蔽之四次載入。可使用載入操作而將陣列的前八個元素載入至mm0。因此,mm0可包括不同結構之元素,包括「z y x v w z y x」。可調用未對準載入以載入陣列之第三結構的前五個元素及第四結構的前三個元素。可調用另一載入以載入陣列之第五結構的前五個元素及第六陣列的前三個元素。可調用又一載入以載入陣列之第七結構的前五個元素及第八結構的前三個元素。此等mm0…mm3中之每一者可包括不同結構之元素,包括「z y x v w z y x」。
載入亦可包括載入在上文所描述之OOO載入中跳過的元素。此等元素包括陣列中之每一偶數結構之元素「w」及「v」。可運用四次載入操作來載入此等元素,其中每一載入操作使用一遮罩以識別陣列區段之包括遺漏「w」及「v」元素之部分。可對mm4進行載入操作。
可簡化排列之數目,此係因為mm0、mm1、mm2及mm3各自具有在其中配置於相同相對位置處之相同元素。因此,索引向量(諸如被定義為「12 8 5 0 12 8 5 0」之mm9)可定義mm0、mm1、mm2及mm3之任何對內的「x」元素之各別位置。此外,可在排列期間選擇性地覆寫此索引向量以允許其作為用於後續排列之源。
舉例而言,可排列mm0及mm1以便將其中之「x」元素合併至mm9之右半部中。可透過使用諸如(0x0F)之遮罩來進行選擇性寫入。mm9之左半部可維持用於「x」元素之向量索引值,其可用於mm0、mm1、mm2及mm3之任何組合中。因此,所得mm9可再次用作用於排列之向量索引及實際源以將來自mm2及mm3之「x」元素合併回至mm9中。排列可使用遮罩(0xF0)來選擇性地寫入至mm9之左半部,因此保留來自先前排列操作的先前寫入之「x」元素。結果可為,mm9包括完全為「x」元素之陣列。此係運用兩個排列操作、一向量索引及兩個遮罩而實現。
針對「x」元素而對mm0、mm1、mm2及mm3執行之程序可針對「y」元素及「z」元素而對mm0、mm1、mm2及mm3重複,從而得到完全為「y」元素及「z」元素之陣列。每一此程序可需要兩個排列操作及一向量索引。用於每一程序之向量索引可為唯一的,其中每一向量索引識別暫存器內之「y」及「z」元素之各別位置。儘管每一此程序亦可需要兩個遮罩,但用於「x」排列操作之相同遮罩可再用於「y」及「z」排列操作。
可重複針對「x」、「y」及「z」元素而對mm0、mm1、mm2及mm3執行之程序,但用以將「v」及「w」值合併至暫存器中。用於排列功能之向量索引可識別「v」及「w」之位置(分別為4及5)。結果,mm4可包括來自四個結構之「v」及「w」分量,而對mm0…mm3執行之排列功能之結果(例如,mm5)可包括來自此等暫存器內之結構之「v」及「w」分量。因此,可運用兩個單獨VPERM指令及兩個索引來排列mm4及mm5,每一索引識別暫存器之組合內的「v」及「w」之位置。一個此排列可得到「v」元素之陣列,且另一排列可得到「w」元素之陣列。
資料轉換因此可完成。
用以執行此轉換之偽碼可被指定為: vmovups zmm10, zmmword ptr [r8+0x40] vmovups zmm6, zmmword ptr [r8+0x50] vmovups zmm7, zmmword ptr [r8+0xa0] vmovups zmm8, zmmword ptr [r8] vmovups zmm9, zmmword ptr [r8+0xf0] vmovapd zmm10{k7}, zmmword ptr [r8+0x80] vmovapd zmm10{k6}, zmmword ptr [r8+0xc0] vmovaps zmm15, zmm2 vpermi2pd zmm15{k3}, zmm6, zmm7 vmovapd zmm10{k5}, zmmword ptr [r8+0x100] vpermi2pd zmm15{k1}, zmm8, zmm9 vmovaps zmm11, zmm5 vmovaps zmm12, zmm4 vmovaps zmm13, zmm3 vpermi2pd zmm11{k4}, zmm8, zmm6 vpermi2pd zmm12{k4}, zmm8, zmm6 vpermi2pd zmm13{k4}, zmm8, zmm6 vpermi2pd zmm11{k2}, zmm7, zmm9 vpermi2pd zmm12{k2}, zmm7, zmm9 vpermi2pd zmm13{k2}, zmm7, zmm9 vmovaps zmm14, zmm15 vpermt2pd zmm14, zmm1, zmm10 vpermt2pd zmm15, zmm0, zmm10
圖30為根據本發明之實施例的用以使用甚至更少的排列操作來執行資料轉換之系統1800之實例操作的說明。藉由在排列之前以特定方式配置資料來縮減排列操作之所需數目而使圖28至圖29所展示之操作更高效;相似地,可藉由在排列之前以又一方式配置資料來縮減載入及排列操作之所需數目而使圖30所展示之操作更高效。在一個實施例中,可載入資料以藉由在向量暫存器中載入具有間隙之資料來縮減總的載入及資料排列操作。儘管圖30中展示間隙之特定實例數目及種類,但可使用其他數目及種類。
在一個實施例中,最初可將資料載入至暫存器中以用於資料轉換,其中間隙與其最終位置中之特定元素之向量位置對準。此可使用六個移動或載入操作(VMOVUPS,來自記憶體或快取記憶體,未計數暫存器之間的移動,此係因為此等移動具有顯著較少之潛時)予以執行。此等操作可使用遮罩以實現間隙及偏移。此可少於圖28至圖29中所需要之載入操作。
如圖30所展示,可將資料自陣列載入至六個暫存器中。可留下mm0及mm1之末端處的間隙。因此,可需要額外暫存器mm5來處置最後兩個元素之溢位。此外,該等間隙可致使mm2中之「2」元素在載入之後對準,此對應於該元素在資料轉換之後的最終位置。由於此元素已經載入於其最終位置中,因此不需要排列來抽取此元素以用於將在資料轉換之後保持「2」元素之陣列。可仍應用排列操作以合併來自mm3及mm4之「2」元素,以及來自mm1及mm0之彼等元素。
在運用其他暫存器來排列mm2以將其中之「0」、「1」、「3」及「4」元素合併至其他暫存器之後,mm2可用於充當用於排列操作之向量索引及實際源兩者以合併來自mm0、mm1、mm3及mm4之「2」元素。暫存器mm2可被載入有識別此等其他暫存器中之「2」元素之位置的向量索引值。可透過遮蔽來保留mm2中之已經設定的「2」元素,而在合併期間,可運用來自其他暫存器之經寫入的「2」元素來回收向量索引元素。
如圖30所展示,mm5包括在初始載入之後的「4」及「3」元素之單一執行個體。mm5中之剩餘空間可用以填入mm0…mm4之組合中之「4」及「3」之相對位置的索引。因此,mm5可充當用於此等其他暫存器之排列之向量索引及實際源。結果可儲存於mm5自身內,經選擇性地寫入以在覆寫已使用之索引值時保留「4」及「3」元素。
可應用先前諸圖所展示之向量排列操作以合併個別暫存器內之各別經識別元素,從而產生陣列。
用以執行此轉換之偽碼可被指定為: vmovups zmm9, zmmword ptr [r8+0x130] //將最後「3」及「4」載入至mm9中 vmovups zmm10, zmmword ptr [r8]        //將最下部8個元素載入至mm10 vmovups zmm13, zmmword ptr [r8+0x38]        //將自第二「1」開始之8個元素載入至mm13 vmovups zmm7, zmmword ptr [r8+0x70]        //將自第三「4」開始之8個元素載入至mm7 vmovups zmm5, zmmword ptr [r8+0xb0]        //將自第五「2」開始之8個元素載入至mm5 vmovapd zmm9{k4}, zmmword ptr [rip+0x79a8]        //向mm9載入索引,保存現有「3」及「4」 vmovups zmm6, zmmword ptr [r8+0xf0]        //將自第七「0」開始之8個元素載入至mm6 vpermi2pd zmm9{k4}, zmm13, zmm7        //根據mm9中之索引來排列來自mm7及mm13之「3」及「4」,        //保留mm9中之「3」及「4」 vmovaps zmm12, zmm10        //將mm10保存至mm12 vpermt2pd zmm12, zmm4, zmm7        //根據mm4中之索引來排列mm7及mm12中之值 vmovapd zmm7{k3}, zmmword ptr [rip+0x79fb]        //自mm7產生索引向量,保存未排列值 vpermi2pd zmm7{k3}, zmm10, zmm13        //根據mm7而將來自mm13及mm10之值排列至mm7中,        //保留mm7中之現有元素 vmovapd zmm10{k2}, zmmword ptr [rip+0x7a2b]        //自mm10產生索引向量,保存未排列值 vmovapd zmm13{k2}, zmmword ptr [rip+0x7a61]        //自mm13產生索引向量,保存未排列值 vmovapd zmm7{k1}, zmmword ptr [rip+0x7a97]        //自mm7產生索引向量,保存未排列值 vpermi2pd zmm10{k2}, zmm5, zmm6        //根據mm10中之索引而將mm5及mm6排列至mm10中,        //保留mm10中之現有元素 vpermi2pd zmm13{k2}, zmm5, zmm6        //根據mm13中之索引而將mm5及mm6排列至mm13中,        //保留mm13中之現有元素 vpermi2pd zmm7{k1}, zmm5, zmm6        //根據mm7中之索引而將mm5及mm6排列至mm7中,        //保留mm7中之現有元素 vmovaps zmm8, zmm10        //將mm10保存至mm8 vmovaps zmm11, zmm12      //將mm12保存至mm11 vpermt2pd zmm8, zmm3, zmm9        //根據識別需要排列之元素之位置的新向量來排列mm8及mm9 vpermt2pd zmm10, zmm2, zmm9        //根據識別需要排列之元素之位置的新向量來排列mm8及mm9 vpermt2pd zmm11, zmm1, zmm13        // 根據識別需要排列之元素之位置的新向量來排列mm11及mm13 vpermt2pd zmm13, zmm0, zmm12        //根據識別需要排列之元素之位置的新向量來排列mm13及mm12
圖31說明根據本發明之實施例的用於執行排列操作以實現AOS至SOA轉換之實例方法3100。方法3100可由圖1至圖30所展示之任何合適元件實施。方法3100可由任何合適準則起始且可在任何合適點起始操作。在一個實施例中,方法3100可在3105處起始操作。方法3100可包括比所說明之彼等步驟更多或更少的步驟。此外,方法3100可按與下文所說明之次序不同的次序執行其步驟。方法3100可在任何合適步驟處終止。此外,方法3100可在任何合適步驟處重複操作。方法3100可與方法3100之其他步驟並行地或與其他方法之步驟並行地執行其步驟中之任一者。此外,方法3100可執行多次以執行需要為轉換所需要之跨步資料的多個操作。
在3105處,在一個實施例中,可載入指令,且在3110處,可解碼指令。
在3115處,可判定指令需要資料之AOS-SOA轉換。此資料可包括跨步資料。在一個實施例中,跨步資料可包括Stride5資料。指令可被判定為需要此資料,此係因為將執行對該資料之向量運算。資料轉換可引起資料呈適當格式,使得可在一時脈循環中將向量化運算同時應用於一組資料之每一元素。該指令可特定地識別將執行AOS-SOA轉換,或可自對執行指令之期望推斷需要AOS-SOA。
在3120處,可將待轉換之陣列載入至暫存器中。在一個實施例中,可將該陣列中之結構載入至暫存器中,使得儘可能多的暫存器具有相同元素佈局。舉例而言,「1」元素全部在相同相對位置中,「2」元素全部在相同相對位置中,等等。可運用遮罩來執行載入操作。該等載入操作可自已被其他方式載入之每隔一個暫存器截止某些元素。此等元素可被參考為多餘元素。該等多餘元素對於每隔一個暫存器可相同。
在3125處,可使用遮罩載入操作而將多餘元素載入至共同暫存器中。因此,可執行較大數目個載入操作。此共同暫存器可具有不同於具有共同元素佈局之暫存器的元素佈局。
在3130處,可針對共同元素佈局產生索引向量。可產生針對給定元素識別共同元素佈局中之相對位置的索引向量。該索引向量可用作用於用以合併給定元素之排列功能的索引向量及部分源。在3135處,可使用此等索引向量而對具有共同佈局之暫存器執行排列。3135可在必要時重複以產生共同佈局內的除多餘元素當中之元素以外的元素之陣列。此等經產生陣列可表示資料轉換之部分輸出。
在3140處,可產生用於多餘元素當中之元素及共同暫存器之索引向量。該等索引向量亦可充當實際源。在3145處,可對共同暫存器與來自3135之各種適當結果之組合執行排列。多餘元素當中之元素可合併至陣列。此等經產生陣列可表示資料轉換之剩餘輸出。
在3150處,可執行對不同暫存器之執行。由於給定暫存器將與向量指令一起使用以供執行,因此可並行地執行每一元素。可在必要時儲存結果。在3155處,可判定是否將對相同經轉換資料執行後續向量執行。若執行,則方法3100可返回至3150。否則,方法3100可繼續進行至3160。
在3160處,可判定針對其他stride5資料是否需要額外執行。若需要,則方法3100可繼續進行至3120。否則,在3165處,可淘汰指令。方法3100可視情況而重複或終止。
圖32說明根據本發明之實施例的用於執行排列操作以實現AOS至SOA轉換之另一實例方法3200。方法3200可由圖1至圖30所展示之任何合適元件實施。方法3200可由任何合適準則起始且可在任何合適點起始操作。在一個實施例中,方法3200可在3205處起始操作。方法3200可包括比所說明之彼等步驟更多或更少的步驟。此外,方法3200可按與下文所說明之次序不同的次序執行其步驟。方法3200可在任何合適步驟處終止。此外,方法3200可在任何合適步驟處重複操作。方法3200可與方法3200之其他步驟並行地或與其他方法之步驟並行地執行其步驟中之任一者。此外,方法3200可執行多次以執行需要為轉換所需要之跨步資料的多個操作。
在3205處,在一個實施例中,可載入指令,且在3210處,可解碼指令。
在3215處,可判定指令需要資料之AOS-SOA轉換。此資料可包括跨步資料。在一個實施例中,跨步資料可包括Stride5資料。指令可被判定為需要此資料,此係因為將執行對該資料之向量運算。資料轉換可引起資料呈適當格式,使得可在一時脈循環中將向量化運算同時應用於一組資料之每一元素。該指令可特定地識別將執行AOS-SOA轉換,或可自對執行指令之期望推斷需要AOS-SOA。
在3220處,可準備將待轉換之陣列載入至暫存器中。可鑒於最終資料轉換來評估該陣列至該等暫存器之映射。可識別一或多個元素,該一或多個元素最初可在匹配於將含有在資料轉換之後的元素之相同位置及向量暫存器的給定位置處載入至給定向量暫存器中。在3225處,可執行載入操作以將陣列載入至暫存器中,使得經識別元素載入至指定暫存器及位置。此等載入操作可需要資料之移位或在各種暫存器中留下間隙,使得發生對準。在3230處,可執行排列操作以將來自該等暫存器中之每一者之給定元素合併至單一暫存器中。可產生元素之此等陣列且將該等陣列用於向量執行。然而,已對準元素可不需要排列操作。
在3250處,可執行對不同暫存器之執行。由於給定暫存器將與向量指令一起使用以供執行,因此可並行地執行每一元素。可在必要時儲存結果。在3255處,可判定是否將對相同經轉換資料執行後續向量執行。若執行,則方法3200可返回至3250。否則,方法3200可繼續進行至3260。
在3260處,可判定針對其他stride5資料是否需要額外執行。若需要,則方法3200可繼續進行至3220。否則,在3265處,可淘汰指令。方法3200可視情況而重複或終止。
本文中所揭示之機制之實施例可以硬體、軟體、韌體或此等實施方法之組合予以實施。本發明之實施例可被實施為執行於可規劃系統上之電腦程式或程式碼,該可規劃系統包含至少一個處理器、一儲存系統(包括依電性及非依電性記憶體及/或儲存元件)、至少一個輸入裝置,及至少一個輸出裝置。
可將程式碼應用於輸入指令以執行本文中所描述之功能且產生輸出資訊。可以已知方式將輸出資訊應用於一或多個輸出裝置。出於此應用之目的,處理系統可包括具有諸如數位信號處理器(DSP)、微控制器、特殊應用積體電路(ASIC)或微處理器之處理器的任何系統。
可以高階程序性或物件導向式規劃語言實施程式碼以與處理系統通訊。視需要,亦可以組譯語言或機器語言實施程式碼。事實上,本文中所描述之機制之範疇並不限於任一特定規劃語言。在任何狀況下,該語言可為編譯或解譯語言。
可由儲存於機器可讀媒體上的表示處理器內之各種邏輯的代表性指令實施至少一實施例之一或多個態樣,該等代表性指令在由機器讀取時致使該機器製造用以執行本文中所描述之技術的邏輯。被稱為「IP核心」之此等表示可儲存於有形機器可讀媒體上,且供應至各種消費者或製造設施以載入至實際上製造該邏輯或處理器之製造機器中。
此等機器可讀儲存媒體可包括但不限於由機器或裝置製造或形成之物品的非暫時性有形配置,包括儲存媒體,諸如硬碟、包括軟碟的任何其他類型之光碟、光學光碟、緊密光碟唯讀記憶體(CD-ROM)、可重寫緊密光碟(CD-RW)及磁光碟、諸如唯讀記憶體(ROM)之半導體裝置、諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)之隨機存取記憶體(RAM)、可抹除可規劃唯讀記憶體(EPROM)、快閃記憶體、電可抹除可規劃唯讀記憶體(EEPROM)、磁卡或光卡,或適合於儲存電子指令的任何其他類型之媒體。
因此,本發明之實施例亦可包括含有指令或含有界定本文中所描述之結構、電路、設備、處理器及/或系統特徵之設計資料(諸如硬體描述語言(HDL))的非暫時性有形機器可讀媒體。此等實施例亦可被稱作程式產品。
在一些狀況下,指令轉換器可用以將指令自源指令集轉換至目標指令集。舉例而言,指令轉換器可將指令轉譯(例如,使用靜態二進位轉譯、包括動態編譯之動態二進位轉譯)、轉化、模仿或以其他方式轉換至待由核心處理之一或多個其他指令。指令轉換器可以軟體、硬體、韌體或其組合予以實施。指令轉換器可在處理器上、在處理器外,或部分地在處理器上且部分地在處理器外。
因此,揭示用於執行根據至少一個實施例之一或多個指令之技術。雖然已描述且在隨附圖式中展示某些例示性實施例,但應理解,此等實施例僅僅說明而不限定其他實施例,且此等實施例並不限於所展示及描述之特定構造及配置,此係因為一般熟習此項技術者在研究本發明後就可想到各種其他修改。在諸如此技術之技術領域(其中增長快速且另外進步不易於預見)中,在不脫離本發明之原理或隨附申請專利範圍之範疇的情況下,可如藉由實現技術進步所促進而易於對所揭示實施例之配置及細節進行修改。
本發明之一些實施例包括一種處理器。該處理器可包括:用以接收一指令之一前端;用以解碼該指令之一解碼器;用以執行該指令之一核心;以及用以淘汰該指令之一淘汰單元。結合以上實施例中之任一者,該核心包括用以判定該指令將需要自記憶體中之源資料轉換之跨步資料的邏輯。該跨步資料用以包括來自該源資料中之多個結構的對應帶索引元素以載入至一最終暫存器中以用以執行該指令。結合以上實施例中之任一者,該核心包括用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行的邏輯。結合以上實施例中之任一者,該核心包括用以將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素載入至各別源向量暫存器中的邏輯。結合以上實施例中之任一者,該核心包括用以在源資料至跨步資料之轉換完成後就對一或多個源向量暫存器執行該指令的邏輯。結合以上實施例中之任一者,該核心包括用以省略針對該經界定元素之排列指令執行的邏輯。結合以上實施例中之任一者,該核心包括用以將源資料載入至該多個初步向量暫存器中的邏輯,其中多個間隙用以將該經界定元素對準至該所需位置。結合以上實施例中之任一者,該核心包括用以將源資料載入至一數目大於該等結構之一數目之初步向量暫存器中的邏輯。結合以上實施例中之任一者,該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素。結合以上實施例中之任一者,十個排列操作待應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。結合以上實施例中之任一者,該核心進一步包括用以產生十個索引向量以與排列指令一起使用以得到該等源向量暫存器之內容的邏輯。
本發明之一些實施例包括一種系統。該系統可包括:用以接收一指令之一前端;用以解碼該指令之一解碼器;用以執行該指令之一核心;以及用以淘汰該指令之一淘汰單元。結合以上實施例中之任一者,該核心包括用以判定該指令將需要自記憶體中之源資料轉換之跨步資料的邏輯。該跨步資料用以包括來自該源資料中之多個結構的對應帶索引元素以載入至一最終暫存器中以用以執行該指令。結合以上實施例中之任一者,該核心包括用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行的邏輯。結合以上實施例中之任一者,該核心包括用以將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素載入至各別源向量暫存器中的邏輯。結合以上實施例中之任一者,該核心包括用以在源資料至跨步資料之轉換完成後就對一或多個源向量暫存器執行該指令的邏輯。結合以上實施例中之任一者,該核心包括用以省略針對該經界定元素之排列指令執行的邏輯。結合以上實施例中之任一者,該核心包括用以將源資料載入至該多個初步向量暫存器中的邏輯,其中多個間隙用以將該經界定元素對準至該所需位置。結合以上實施例中之任一者,該核心包括用以將源資料載入至一數目大於該等結構之一數目之初步向量暫存器中的邏輯。結合以上實施例中之任一者,該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素。結合以上實施例中之任一者,十個排列操作待應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。結合以上實施例中之任一者,該核心進一步包括用以產生十個索引向量以與排列指令一起使用以得到該等源向量暫存器之內容的邏輯。
本發明之實施例可包括一種設備。該設備可包括用於接收一指令、解碼該指令、執行該指令以及淘汰該指令的構件。結合以上實施例中之任一者,該設備可包括用於判定該指令將需要自記憶體中之源資料轉換之跨步資料的構件。該跨步資料係至用於來自該源資料中之多個結構的對應帶索引元素的構件以載入至一最終暫存器中以用以執行該指令。結合以上實施例中之任一者,該設備可包括用於將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行的構件。結合以上實施例中之任一者,該設備可包括用於將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素載入至各別源向量暫存器中的構件。結合以上實施例中之任一者,該設備可包括用於在源資料至跨步資料之轉換完成後就對一或多個源向量暫存器執行該指令的構件。結合以上實施例中之任一者,該設備可包括用於省略針對該經界定元素之排列指令執行的構件。結合以上實施例中之任一者,該設備可包括用於將源資料載入至該多個初步向量暫存器中的構件,其中多個間隙用以將該經界定元素對準至該所需位置。結合以上實施例中之任一者,該設備可包括用於將源資料載入至一數目大於該等結構之一數目之初步向量暫存器中的構件。結合以上實施例中之任一者,該跨步資料係至用於向量之八個暫存器的構件,每一向量係至用於與該等其他向量對應之五個元素的構件。結合以上實施例中之任一者,十個排列操作待應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。結合以上實施例中之任一者,該設備可包括用於產生十個索引向量以與排列指令一起使用以得到該等源向量暫存器之內容的構件。
本發明之實施例可包括一種方法。該方法可包括:接收一指令;解碼該指令;執行該指令;以及淘汰該指令。結合以上實施例中之任一者,該方法可包括判定該指令將需要自記憶體中之源資料轉換之跨步資料。該跨步資料用以包括來自該源資料中之多個結構的對應帶索引元素以載入至一最終暫存器中以用以執行該指令。結合以上實施例中之任一者,該方法可包括將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行。結合以上實施例中之任一者,該方法可包括將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素載入至各別源向量暫存器中。結合以上實施例中之任一者,該方法可包括在源資料至跨步資料之轉換完成後就對一或多個源向量暫存器執行該指令。結合以上實施例中之任一者,該方法可包括省略針對該經界定元素之排列指令執行。結合以上實施例中之任一者,該方法可包括將源資料載入至該多個初步向量暫存器中,其中多個間隙用以將該經界定元素對準至該所需位置。結合以上實施例中之任一者,該方法可包括將源資料載入至一數目大於該等結構之一數目之初步向量暫存器中。結合以上實施例中之任一者,該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素。結合以上實施例中之任一者,十個排列操作待應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。結合以上實施例中之任一者,該方法可包括產生十個索引向量以與排列指令一起使用以得到該等源向量暫存器之內容。
100‧‧‧電腦系統
102、200、500、610、615、1000、1215、1710、1804‧‧‧處理器
104‧‧‧層級1(L1)內部快取記憶體
106、145、164、208、210、1926‧‧‧暫存器檔案
108、142、162、462‧‧‧執行單元
109、143‧‧‧封裝指令集
110‧‧‧處理器匯流排
112‧‧‧圖形控制器/圖形卡
114‧‧‧加速圖形埠(AGP)互連件
116‧‧‧記憶體控制器集線器(MCH)
118‧‧‧記憶體介面
119、1822‧‧‧指令
120、640、732、734、1140‧‧‧記憶體
121‧‧‧資料
122‧‧‧專屬集線器介面匯流排
123‧‧‧舊版I/O控制器
124‧‧‧資料儲存體
125‧‧‧使用者輸入介面
126‧‧‧無線收發器
127‧‧‧串列擴展埠
128‧‧‧韌體集線器(快閃BIOS)
129‧‧‧音訊控制器
130‧‧‧I/O控制器集線器(ICH)
134‧‧‧網路控制器
140‧‧‧資料處理系統/電腦系統
141‧‧‧匯流排
144、165、165B、1922‧‧‧解碼器
146‧‧‧同步動態隨機存取記憶體(SDRAM)控制
147‧‧‧靜態隨機存取記憶體(SRAM)控制
148‧‧‧叢發快閃記憶體介面
149‧‧‧個人電腦記憶體卡國際協會(PCMCIA)/緊密快閃(CF)卡控制
150‧‧‧液晶顯示器(LCD)控制
151‧‧‧直接記憶體存取(DMA)控制器
152‧‧‧替代性匯流排主控器介面
153‧‧‧I/O匯流排
154‧‧‧I/O橋接器
155‧‧‧通用非同步接收器/傳輸器(UART)
156‧‧‧通用串列匯流排(USB)
157‧‧‧藍芽無線UART
158‧‧‧I/O擴展介面
159、170‧‧‧處理核心
160‧‧‧資料處理系統
161、1910‧‧‧SIMD共處理器
163‧‧‧指令集
166、1920‧‧‧主處理器
167、506、572、574、1525、1532、1924‧‧‧快取記憶體
168‧‧‧輸入/輸出系統
169‧‧‧無線介面
171、1915‧‧‧共處理器匯流排
201‧‧‧有序前端
202‧‧‧快速排程器/uop排程器
203‧‧‧無序執行引擎
204‧‧‧慢速/一般浮點排程器/uop排程器
205‧‧‧整數/浮點uop佇列
206‧‧‧簡單浮點排程器/uop排程器
207、234‧‧‧uop佇列
209‧‧‧記憶體排程器
211‧‧‧執行區塊
212、214‧‧‧位址產生單元(AGU)/執行單元
215‧‧‧分配器/暫存器重新命名器
216、218‧‧‧快速ALU/執行單元
220‧‧‧慢速ALU/執行單元
222‧‧‧浮點ALU/執行單元
224‧‧‧浮點移動單元/執行單元
226‧‧‧指令預提取器
228‧‧‧指令解碼器
230‧‧‧追蹤快取記憶體
232‧‧‧微碼ROM
310‧‧‧封裝位元組
320‧‧‧封裝字
330‧‧‧封裝雙字(dword)
341‧‧‧封裝半
342‧‧‧封裝單
343‧‧‧封裝雙
344‧‧‧無正負號封裝位元組表示
345‧‧‧有正負號封裝位元組表示
346‧‧‧無正負號封裝字表示
347‧‧‧有正負號封裝字表示
348‧‧‧無正負號封裝雙字表示
349‧‧‧有正負號封裝雙字表示
360‧‧‧格式
361、362、383、384、387、388、371、372‧‧‧欄位
363、373‧‧‧MOD欄位
364、365、374、375、385、390‧‧‧源運算元識別符
366、376、386‧‧‧目的地運算元識別符
370、380‧‧‧操作編碼(作業碼)格式
378‧‧‧首碼位元組
381‧‧‧條件欄位
382、389‧‧‧CDP作業碼欄位
400‧‧‧處理器管線
402‧‧‧提取級
404‧‧‧長度解碼級
406‧‧‧解碼級
408‧‧‧分配級
410‧‧‧重新命名級
412‧‧‧排程級
414‧‧‧暫存器讀取/記憶體讀取級
416‧‧‧執行級
418‧‧‧寫回/記憶體寫入級
422‧‧‧例外狀況處置級
424‧‧‧認可級
430‧‧‧前端單元
432、1535‧‧‧分支預測單元
434‧‧‧指令快取記憶體單元
436‧‧‧指令轉譯後援緩衝器(TLB)
438、1808‧‧‧指令提取單元
440、1810‧‧‧解碼單元
450‧‧‧執行引擎單元
452‧‧‧重新命名/分配器單元
454、1818‧‧‧淘汰單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔案單元
460‧‧‧執行叢集
464‧‧‧記憶體存取單元
470‧‧‧記憶體單元
472‧‧‧資料TLB單元
474‧‧‧資料快取記憶體單元
476‧‧‧層級2(L2)快取記憶體單元
490、502、502A、502N、1406、1407、1812‧‧‧核心
503‧‧‧快取記憶體階層
508‧‧‧基於環之互連單元
510‧‧‧系統代理
512‧‧‧顯示引擎
514、796‧‧‧介面
516‧‧‧直接媒體介面(DMI)
518‧‧‧PCIe橋接器
520‧‧‧記憶體控制器
522‧‧‧同調邏輯
552‧‧‧記憶體控制單元
560‧‧‧圖形模組
565‧‧‧媒體引擎
570、1806‧‧‧前端
580‧‧‧無序引擎
582‧‧‧分配模組
584‧‧‧資源排程器
586‧‧‧資源
588‧‧‧重新排序緩衝器
590‧‧‧模組
595‧‧‧最後層級快取記憶體(LLC)
599‧‧‧隨機存取記憶體(RAM)
600、1800‧‧‧系統
620‧‧‧圖形記憶體控制器集線器(GMCH)
645、1724‧‧‧顯示器
650‧‧‧輸入/輸出(I/O)控制器集線器(ICH)
660‧‧‧外部圖形裝置
670‧‧‧另一周邊裝置
695‧‧‧前側匯流排(FSB)
700‧‧‧多處理器系統
714、814‧‧‧I/O裝置
716‧‧‧第一匯流排
718‧‧‧匯流排橋接器
720‧‧‧第二匯流排
722‧‧‧鍵盤及/或滑鼠
724‧‧‧音訊I/O
727‧‧‧通訊裝置
728‧‧‧儲存單元
730‧‧‧指令/程式碼及資料
738‧‧‧高效能圖形電路
739‧‧‧高效能圖形介面
750‧‧‧點對點互連件
752、754‧‧‧P-P介面
770‧‧‧第一處理器
772、782‧‧‧記憶體控制器單元(IMC)
776、778、786、788‧‧‧點對點(P-P)介面/點對點介面電路
780‧‧‧第二處理器
790‧‧‧晶片組
794、798‧‧‧點對點介面電路
800‧‧‧第三系統
815‧‧‧舊版I/O裝置
872、882‧‧‧整合式記憶體及I/O控制邏輯(「CL」)
900‧‧‧SoC裝置
902‧‧‧互連單元
908‧‧‧整合式圖形邏輯
910‧‧‧應用程式處理器
914‧‧‧整合式記憶體控制器單元
916‧‧‧匯流排控制器單元
920‧‧‧媒體處理器
924、1015‧‧‧影像處理器
926‧‧‧音訊處理器
928、1020‧‧‧視訊處理器
930‧‧‧靜態隨機存取記憶體(SRAM)單元
932‧‧‧直接記憶體存取(DMA)單元
940‧‧‧顯示單元
1005‧‧‧中央處理單元(CPU)
1010、1415‧‧‧圖形處理單元(GPU)
1025‧‧‧USB控制器
1030‧‧‧UART控制器
1035‧‧‧SPI/SDIO控制器
1040‧‧‧顯示裝置
1045‧‧‧記憶體介面控制器
1050‧‧‧MIPI控制器
1055‧‧‧快閃記憶體控制器
1060‧‧‧雙資料速率(DDR)控制器
1065‧‧‧安全引擎
1070‧‧‧I2S/I2C控制器
1100‧‧‧儲存體
1110‧‧‧硬體或軟體模型
1120‧‧‧模擬軟體
1150‧‧‧有線連接
1160‧‧‧無線連接
1165‧‧‧製造設施
1205‧‧‧程式
1210‧‧‧模仿邏輯
1302‧‧‧高階語言
1304‧‧‧x86編譯器
1306‧‧‧x86二進位碼
1308‧‧‧替代性指令集編譯器
1310‧‧‧替代性指令集二進位碼
1312‧‧‧指令轉換器
1314‧‧‧不具有x86指令集核心之處理器
1316‧‧‧具有至少一個x86指令集核心之處理器
1400‧‧‧指令集架構
1408‧‧‧L2快取記憶體控制
1409、1520‧‧‧匯流排介面單元
1410‧‧‧互連件
1411‧‧‧層級2(L2)快取記憶體
1420‧‧‧視訊程式碼
1425‧‧‧液晶顯示器(LCD)視訊介面
1430‧‧‧用戶介面模組(SIM)介面
1435‧‧‧開機ROM介面
1440‧‧‧同步動態隨機存取記憶體(SDRAM)控制器
1445‧‧‧快閃控制器
1450‧‧‧串列周邊介面(SPI)主控器單元
1460‧‧‧SDRAM晶片或模組
1465‧‧‧快閃記憶體
1470‧‧‧藍芽模組
1475‧‧‧高速3G數據機
1480‧‧‧全球定位系統模組
1485‧‧‧無線模組
1490‧‧‧行動產業處理器介面(MIPI)
1495‧‧‧高清晰度多媒體介面(HDMI)
1500‧‧‧指令架構
1510‧‧‧單元
1511‧‧‧中斷控制及散佈單元
1512‧‧‧窺探控制單元
1514‧‧‧窺探篩選器
1515‧‧‧計時器
1516‧‧‧AC埠
1530‧‧‧預提取級
1531‧‧‧選項
1536‧‧‧全域歷史
1537‧‧‧目標位址
1538‧‧‧傳回堆疊
1540‧‧‧記憶體系統
1543‧‧‧預提取器
1544‧‧‧記憶體管理單元(MMU)
1545‧‧‧轉譯後援緩衝器(TLB)
1546‧‧‧載入儲存單元
1550‧‧‧雙指令解碼級
1555‧‧‧暫存器重新命名級
1556‧‧‧暫存器集區
1557‧‧‧分支
1560‧‧‧發行級
1561‧‧‧指令佇列
1565‧‧‧執行實體
1566‧‧‧ALU/乘法單元(MUL)
1567‧‧‧ALU
1568‧‧‧浮點單元(FPU)
1569‧‧‧給定位址
1570‧‧‧寫回級
1575‧‧‧追蹤單元
1580‧‧‧經執行指令指標
1582‧‧‧淘汰指標
1600‧‧‧執行管線
1700‧‧‧電子裝置
1715‧‧‧低電力雙資料速率(LPDDR)記憶體單元
1720‧‧‧磁碟機
1722‧‧‧BIOS/韌體/快閃記憶體
1725‧‧‧觸控螢幕
1730‧‧‧觸控板
1735‧‧‧快速晶片組(EC)
1736‧‧‧鍵盤
1737‧‧‧風扇
1738‧‧‧受信任平台模組(TPM)
1739、1746‧‧‧熱感測器
1740‧‧‧感測器集線器
1741‧‧‧加速度計
1742‧‧‧環境光感測器(ALS)
1743‧‧‧羅盤
1744‧‧‧迴轉儀
1745‧‧‧近場通訊(NFC)單元
1750‧‧‧無線區域網路(WLAN)單元
1752‧‧‧藍芽單元
1754‧‧‧攝影機
1756‧‧‧無線廣域網路(WWAN)單元
1757‧‧‧SIM卡
1760‧‧‧數位信號處理器
1762‧‧‧音訊單元
1763‧‧‧揚聲器
1764‧‧‧頭戴式耳機
1765‧‧‧麥克風
1802‧‧‧指令串流
1814‧‧‧分配器
1816‧‧‧特定執行單元
1820‧‧‧記憶體子系統
1830‧‧‧AOS-SOA轉換
1900‧‧‧處理器核心/處理器
1912‧‧‧SIMD執行單元
1914‧‧‧延伸向量暫存器檔案
1916‧‧‧延伸SIMD指令集
2001‧‧‧暫存器ZMM0
2002‧‧‧暫存器ZMM1
2003‧‧‧暫存器ZMM2
2102‧‧‧結構陣列
2104‧‧‧陣列結構
3100、3200‧‧‧方法
在隨附圖式之各圖中作為實例而非限制來說明實施例: 圖1A為根據本發明之實施例的例示性電腦系統之方塊圖,該電腦系統被形成有可包括用以執行指令之執行單元的處理器; 圖1B說明根據本發明之實施例的資料處理系統; 圖1C說明用於執行文字字串比較操作之資料處理系統之其他實施例; 圖2為根據本發明之實施例的用於處理器之微架構之方塊圖,該處理器可包括用以執行指令之邏輯電路; 圖3A說明根據本發明之實施例的多媒體暫存器中之各種封裝資料類型表示; 圖3B說明根據本發明之實施例的可能暫存器內資料儲存格式; 圖3C說明根據本發明之實施例的多媒體暫存器中之各種有正負號及無正負號封裝資料類型表示; 圖3D說明操作編碼格式之實施例; 圖3E說明根據本發明之實施例的具有四十或更多位元之另一可能操作編碼格式; 圖3F說明根據本發明之實施例的又一可能操作編碼格式; 圖4A為根據本發明之實施例的說明有序管線及暫存器重新命名級、無序發行/執行管線之方塊圖; 圖4B為根據本發明之實施例的說明待包括於處理器中之有序架構核心及暫存器重新命名邏輯、無序發行/執行邏輯之方塊圖; 圖5A為根據本發明之實施例的處理器之方塊圖; 圖5B為根據本發明之實施例的核心之實例實施方案之方塊圖; 圖6為根據本發明之實施例的系統之方塊圖; 圖7為根據本發明之實施例的第二系統之方塊圖; 圖8為根據本發明之實施例的第三系統之方塊圖; 圖9為根據本發明之實施例的系統單晶片之方塊圖; 圖10說明根據本發明之實施例的可執行至少一個指令之含有中央處理單元及圖形處理單元之處理器; 圖11為說明根據本發明之實施例的IP核心之開發之方塊圖; 圖12說明根據本發明之實施例的第一類型之指令可如何由不同類型之處理器模仿; 圖13說明根據本發明之實施例的對比軟體指令轉換器之使用之方塊圖,該軟體指令轉換器用以將源指令集中之二進位指令轉換至目標指令集中之二進位指令; 圖14為根據本發明之實施例的處理器之指令集架構之方塊圖; 圖15為根據本發明之實施例的處理器之指令集架構之更詳細方塊圖; 圖16為根據本發明之實施例的用於處理器之指令集架構之執行管線之方塊圖; 圖17為根據本發明之實施例的用於利用處理器之電子裝置之方塊圖; 圖18為根據本發明之實施例的用於指令或操作之排列序列之指令及邏輯之實例系統的說明; 圖19說明根據本發明之實施例的執行向量運算之資料處理系統之實例處理器核心; 圖20為說明根據本發明之實施例的實例延伸向量暫存器檔案之方塊圖; 圖21為根據本發明之實施例的資料轉換之結果之說明; 圖22為根據本發明之實施例的合成與排列指令之操作的說明; 圖23為根據本發明之實施例的排列指令之操作的說明; 圖24為根據本發明之實施例的針對八個結構之陣列使用多個搜集的資料轉換之操作的說明; 圖25為根據本發明之實施例的用於八個結構之陣列的資料轉換之未處理操作的說明; 圖26為根據本發明之實施例的用以使用排列操作來執行資料轉換之系統之操作的說明; 圖27為根據本發明之實施例的如所描畫的用以使用排列操作來執行資料轉換之系統之操作的更詳細視圖; 圖28為根據本發明之實施例的用以使用無序載入及較少排列操作來執行資料轉換之系統之另外操作的說明; 圖29為根據本發明之實施例的用以使用排列操作來執行資料轉換之系統之操作的更詳細視圖; 圖30為根據本發明之實施例的用以使用甚至更少的排列操作來執行資料轉換之系統之實例操作的說明; 圖31說明根據本發明之實施例的用於執行排列操作以實現資料轉換之實例方法;以及 圖32說明根據本發明之實施例的用於執行排列操作以實現資料轉換之另一實例方法。
200‧‧‧處理器
201‧‧‧有序前端
202‧‧‧快速排程器/uop排程器
203‧‧‧無序執行引擎
204‧‧‧慢速/一般浮點排程器/uop排程器
205‧‧‧整數/浮點uop佇列
206‧‧‧簡單浮點排程器/uop排程器
207、234‧‧‧uop佇列
208、210‧‧‧暫存器檔案
209‧‧‧記憶體排程器
211‧‧‧執行區塊
212、214‧‧‧位址產生單元(AGU)/執行單元
215‧‧‧分配器/暫存器重新命名器
216、218‧‧‧快速ALU/執行單元
220‧‧‧慢速ALU/執行單元
222‧‧‧浮點ALU/執行單元
224‧‧‧浮點移動單元/執行單元
226‧‧‧指令預提取器
228‧‧‧指令解碼器
230‧‧‧追蹤快取記憶體
232‧‧‧微碼ROM

Claims (20)

  1. 一種處理器,其包含: 用以接收一指令之一前端; 用以解碼該指令之一解碼器; 用以執行該指令之一核心,其包括: 一第一邏輯,用以判定該指令將需要從記憶體中之源資料所轉換之跨步資料,該跨步資料用以包括來自該源資料中之多個結構要被載入至一最終暫存器中來被用以執行該指令的對應帶索引元素; 一第二邏輯,用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行;以及 一第三邏輯,用以將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素要被載入至各別源向量暫存器中;以及 用以淘汰該指令之一淘汰單元。
  2. 如請求項1之處理器,其中該核心進一步包括用以在源資料至跨步資料之轉換完成後即對一或多個源向量暫存器執行該指令的一第四邏輯。
  3. 如請求項1之處理器,其中該核心進一步包括用以省略針對該經界定元素之排列指令執行的一第四邏輯。
  4. 如請求項1之處理器,其中該核心進一步包括用以將源資料載入至該多個初步向量暫存器中的一第四邏輯,其以多個間隙用以將該經界定元素對準至該所需位置。
  5. 如請求項1之處理器,其中該核心進一步包括用以將源資料載入至數目大於該等結構的數目之初步向量暫存器中的一第四邏輯。
  6. 如請求項1之處理器,其中: 該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素;且 十個排列操作係要應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。
  7. 如請求項1之處理器,其中: 該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素;且 該核心進一步包括用以產生十個索引向量以與排列指令被使用而得到該等源向量暫存器之內容的一第四邏輯。
  8. 一種系統,其包含: 用以接收一指令之一前端; 用以解碼該指令之一解碼器; 用以執行該指令之一核心,其包括: 一第一邏輯,用以判定該指令將需要從記憶體中之源資料所轉換之跨步資料,該跨步資料用以包括來自該源資料中之多個結構要被載入至一最終暫存器中來被用以執行該指令的對應帶索引元素; 一第二邏輯,用以將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行;以及 一第三邏輯,用以將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素要被載入至各別源向量暫存器中;以及 用以淘汰該指令之一淘汰單元。
  9. 如請求項8之系統,其中該核心進一步包括用以在源資料至跨步資料之轉換完成後即對一或多個源向量暫存器執行該指令的一第四邏輯。
  10. 如請求項8之系統,其中該核心進一步包括用以省略針對該經界定元素之排列指令執行的一第四邏輯。
  11. 如請求項8之系統,其中該核心進一步包括用以將源資料載入至該多個初步向量暫存器中的一第四邏輯,其以多個間隙用以將該經界定元素對準至該所需位置。
  12. 如請求項8之系統,其中該核心進一步包括用以將源資料載入至數目大於該等結構的數目之初步向量暫存器中的一第四邏輯。
  13. 如請求項8之系統,其中: 該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素;且 十個排列操作係要應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。
  14. 如請求項8之系統,其中: 該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素;且 該核心進一步包括用以產生十個索引向量以與排列指令被使用而得到該等源向量暫存器之內容的一第四邏輯。
  15. 一種方法,其包含在一處理器內: 接收一指令; 解碼該指令; 執行該指令,包括: 判定該指令將需要從記憶體中之源資料所轉換之跨步資料,該跨步資料用以包括來自該源資料中之多個結構要被載入至一最終暫存器中來被用以執行該指令的對應帶索引元素; 將源資料載入至多個初步向量暫存器中以在對應於該最終暫存器中之一所需位置之一位置中對準該等初步向量暫存器中之一者之一經界定元素以供執行;以及 將多個排列指令應用於該等初步向量暫存器之內容以致使來自該多個結構之對應帶索引元素要被載入至各別源向量暫存器中;以及 淘汰該指令。
  16. 如請求項15之方法,其進一步包含在源資料至跨步資料之轉換完成後即對一或多個源向量暫存器執行該指令。
  17. 如請求項15之方法,其進一步包含省略針對該經界定元素之排列指令執行。
  18. 如請求項15之方法,其進一步包含將源資料載入至該多個初步向量暫存器中,其以多個間隙用以將該經界定元素對準至該所需位置。
  19. 如請求項15之方法,其進一步包含將源資料載入至數目大於該等結構的數目之初步向量暫存器中。
  20. 如請求項15之方法,其中: 該跨步資料用以包括向量之八個暫存器,每一向量用以包括與該等其他向量對應之五個元素;且 十個排列操作係要應用於該等初步向量暫存器之內容以得到該等各別源向量暫存器之內容。
TW105137400A 2015-12-18 2016-11-16 用於排列序列之指令及邏輯 TW201729080A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/975,380 US20170177355A1 (en) 2015-12-18 2015-12-18 Instruction and Logic for Permute Sequence

Publications (1)

Publication Number Publication Date
TW201729080A true TW201729080A (zh) 2017-08-16

Family

ID=59057278

Family Applications (1)

Application Number Title Priority Date Filing Date
TW105137400A TW201729080A (zh) 2015-12-18 2016-11-16 用於排列序列之指令及邏輯

Country Status (5)

Country Link
US (1) US20170177355A1 (zh)
EP (1) EP3391194A4 (zh)
CN (1) CN108369512A (zh)
TW (1) TW201729080A (zh)
WO (1) WO2017105712A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI685749B (zh) * 2017-07-25 2020-02-21 美商高通公司 用於通信波形的短位址模式

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US11455169B2 (en) 2019-05-27 2022-09-27 Texas Instruments Incorporated Look-up table read

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6446198B1 (en) * 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US7725678B2 (en) * 2005-02-17 2010-05-25 Texas Instruments Incorporated Method and apparatus for producing an index vector for use in performing a vector permute operation
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7783860B2 (en) * 2007-07-31 2010-08-24 International Business Machines Corporation Load misaligned vector with permute and mask insert
GB2456775B (en) * 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US20130339649A1 (en) * 2012-06-15 2013-12-19 Intel Corporation Single instruction multiple data (simd) reconfigurable vector register file and permutation unit
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US8959275B2 (en) * 2012-10-08 2015-02-17 International Business Machines Corporation Byte selection and steering logic for combined byte shift and byte permute vector unit
US9632781B2 (en) * 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI685749B (zh) * 2017-07-25 2020-02-21 美商高通公司 用於通信波形的短位址模式

Also Published As

Publication number Publication date
EP3391194A4 (en) 2019-08-14
US20170177355A1 (en) 2017-06-22
WO2017105712A1 (en) 2017-06-22
CN108369512A (zh) 2018-08-03
EP3391194A1 (en) 2018-10-24

Similar Documents

Publication Publication Date Title
CN108369511B (zh) 用于基于通道的跨步存储操作的指令和逻辑
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
TWI733710B (zh) 用於重複發生相鄰聚集的處理器、方法和單元
TWI743064B (zh) 用於取得多重向量元素操作之指令及邏輯
JP6306729B2 (ja) ストアをソート及びリタイアする命令及びロジック
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
TW201725509A (zh) 用於安全指令執行管線之指令及邏輯
TWI715681B (zh) 用於位元欄位位址和插入之指令及邏輯
JP2014526758A (ja) ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック
TWI738679B (zh) 處理器、運算系統及用以執行運算操作之方法
TWI590079B (zh) 用於處理計算的向量格式的指令及邏輯
TW201723815A (zh) 用於偶數與奇數向量取得操作之指令及邏輯
TW201723812A (zh) 用於以亂序載入來排列之指令及邏輯
CN108292271B (zh) 用于向量置换的指令和逻辑
TW201729080A (zh) 用於排列序列之指令及邏輯
CN107408035B (zh) 用于缕程间通信的装置和方法
TW201729081A (zh) 用於以向量為基礎的位元操控之指令及邏輯