TW201327385A - 經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路的方法 - Google Patents

經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路的方法 Download PDF

Info

Publication number
TW201327385A
TW201327385A TW101142379A TW101142379A TW201327385A TW 201327385 A TW201327385 A TW 201327385A TW 101142379 A TW101142379 A TW 101142379A TW 101142379 A TW101142379 A TW 101142379A TW 201327385 A TW201327385 A TW 201327385A
Authority
TW
Taiwan
Prior art keywords
array
mask
instruction
elements
vector
Prior art date
Application number
TW101142379A
Other languages
English (en)
Other versions
TWI478058B (zh
Inventor
Tal Uliel
Elmoustapha Ould-Ahmed-Vall
Bret L Toll
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of TW201327385A publication Critical patent/TW201327385A/zh
Application granted granted Critical
Publication of TWI478058B publication Critical patent/TWI478058B/zh

Links

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/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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

依據一個實施例,一碼最佳化器係經組配來接收具有以純量指令體現的一程式迴路的第一代碼以基於一第三陣列值而儲存一第一陣列值至一第二陣列。該碼最佳化器係經組配來產生第二碼,表示具有向量指令包括一混洗指令及一儲存指令的該程式迴路;該儲存指令係以一向量方式基於該第二陣列而使用一混洗表來混洗該第一陣列元素;該儲存指令係以一向量方式而使用一遮罩儲存表來儲存已混洗元素於該第三陣列。

Description

經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路的方法 發明領域
本發明之實施例大致上係有關於一程式迴路之最佳化。更明確言之,本發明之實施例係有關於經由使用混洗表及遮罩儲存表之向量指令來最佳化程式迴路。
發明背景
幾乎全部資料處理應用皆係涉及須對資料集合迭代重複地執行的運算。此等程式迴路可包括任何數目的指令,且可迭代重複如由該電腦程式所確立的次數。常見基於第三陣列的條件而分派第一陣列值給第二陣列。典型地,為了體現此種操作,運用一程式迴路以取決於第三陣列的相對應元素而分派第一陣列的元素給第二陣列的元素,以純量方式一次分派一個元素,如圖3所示。
如如圖3所示之實例中,基於陣列b[ ]的相對應於元素之值或條件,陣列a[ ]之元素分派給陣列dest[ ],於該程式迴路中一次一個元素。但此種體現無效率,原因在於處理器須執行大量迭代重複及指令。
依據本發明之一實施例,係特地提出一種電腦體現之方法包含接收具有使用純量指令體現之一程式迴路的第一碼以基於一第三陣列的值而儲存一第一陣列的值至一第二陣列;及產生使用向量指令表示該程式迴路之第二碼,該第二碼係包括一混洗指令以用一向量方式使用一混洗表基於該第三陣列而混洗該第一陣列之元素,及一儲存指令以用一向量方式使用一遮罩儲存表而儲存該第一陣列之該等已混洗元素於該第二陣列。
100‧‧‧系統
101‧‧‧第一代碼
102‧‧‧代碼最佳化器
103‧‧‧第二代碼
104‧‧‧具向量能力的處理器
105、501、751‧‧‧混洗表
106、502、752‧‧‧遮罩儲存表
107‧‧‧摻混表
200、600、800‧‧‧方法
201-203、601-607、801-807‧‧‧方塊
300、400、700‧‧‧虛擬碼
301-303‧‧‧陣列
304-306、401-410、701-715‧‧‧行
402、702‧‧‧程式迴路、行
900‧‧‧系統
902‧‧‧晶片組
903、904‧‧‧裝置
905‧‧‧記憶體
906、907‧‧‧匯流排
908‧‧‧快取記憶體
909‧‧‧處理器核心
910‧‧‧記憶體控制器中樞器(MCH)
911‧‧‧輸入輸出控制器中樞器(ICH)
912‧‧‧圖形加速器、圖形裝置
913‧‧‧代碼
914‧‧‧資料
本發明之實施例係於附圖之各幅圖中經舉例說明但非限制性,附圖中相似的元件符號指示相似的元件。
圖1為方塊圖例示說明依據一個實施例之一碼最佳化器。
圖2為流程圖例示說明依據一個實施例一種最佳化程式碼之方法。
圖3為表示一典型程式迴路的虛擬碼。
圖4為虛擬碼表示依據一個實施例具有進階向量指令之一程式迴路。
圖5為一略圖例示說明依據一個實施例儲存一混洗表及一遮罩儲存表的一資料結構。
圖6為流程圖例示說明依據一個實施例一種最佳化程式迴路之方法。
圖7為虛擬碼表示依據另一個實施例具有進階向量指 令之一程式迴路。
圖8為一略圖例示說明依據一個實施例儲存一混洗表及一摻混表的一資料結構。
圖9為流程圖例示說明依據另一個實施例一種最佳化程式迴路之方法。
圖10為方塊圖例示說明依據一個實施例一資料處理系統之一實例。
圖11為方塊圖例示說明依據另一個實施例一資料處理系統之一實例。
較佳實施例之詳細說明
本發明之各個實施例及面向將參照後文細節作說明,附圖將例示說明各個實施例。後文詳細說明部分及圖式係供舉例說明本發明而絕非解譯為限制本發明。描述無數特定細節以供徹底瞭解本發明之各個實施例。但於某些情況下,眾所周知的或習知的細節不加描述以便提供本發明之實施例的精簡討論。
說明書中述及「一個實施例」或「一實施例」表示連結該實施例描述的一特定特徵、結構、或特性可含括於至少一個本發明之實施例。「於一個實施例中」出現於說明書中各處並非必要皆係指同一個實施例。
依據有些實施例,利用一碼(code)最佳化器(或編譯器)以使用向量指令而最佳化一程式迴路的純量指令以便以一向量方式執行該程式迴路的迭代重複。該程式迴路 的迭代重複係藉一具向量能力的處理器諸如單一指令多重資料(SIMD)處理器執行該向量或緊縮指令進行。藉使用向量或緊縮指令,基於緊縮在一SIMD指令內部的該等向量指令或多個指令之一向量長度,程式迴路的迭代重複次數可減少或縮短。典型程式迴路的某些迭代重複可一具向量能力的處理器使用向量指令而並列地執行。結果,能夠大為改善該程式迴路的執行效率。
依據一個實施例,第一碼具有一程式迴路用以基於由一碼最佳化器所接收的一第三陣列(例如條件陣列)之元素的值或條件而分派一第一陣列(例如來源陣列)之元素給一第二陣列(例如目的地陣列)之元素。應答之,該碼最佳化器係經組配來產生具有向量指令的第二碼以執行該程式迴路的相同操作。於一個實施例中,於該程式迴路的各次迭代重複中,一VECTOR_SHUFLE指令以基於該第三陣列之相對應元素的值或條件而使用一混洗表而混洗該第一陣列之元素,及一VECTOR_MASKSTORE指令來以一向量方式儲存該已混洗的該第一陣列之元素於該第二陣列。
於另一個實施例中,該第二碼包括,於該程式迴路的各次迭代重複中,一VECTOR_SHUFLE指令以基於該第三陣列之相對應元素的值或條件而使用一混洗表而混洗該第一陣列之元素,及一VECTOR_BLEND指令來以一向量方式摻混該已混洗的該第一陣列之元素。取決於該向量長度,一旦該第一陣列之元素已經透過摻混操作而累進,則已摻混的該第一陣列之元素儲存於該第二陣列。
圖1為方塊圖例示說明依據一個實施例之一碼最佳化器。系統100包括一碼最佳化器102以接收具有純量指令的一程式迴路之第一碼101,諸如圖3所示者。於第一碼101的該程式迴路包括純量指令以個別地基於該第三陣列之元素的值或條件而分派一第一陣列之元素給一第二陣列之元素。應答於第一碼101,碼最佳化器102係經組配來將第一碼101的純量指令轉換成第二碼103,其具有至少一個向量指令以置換第一碼101的有些純量指令。於一個實施例中,碼最佳化器係經組配來將多個純量迭代重複的多個資料緊縮成一單一SIMD指令。第二碼103的該至少一個向量指令許可一具向量能力的處理器104(例如具SIMD能力的處理器)例如於單一指令週期期間,在該程式迴路中並列地執行該至少一個向量指令以從事某些步驟。
於一個實施例中,於各次迭代重複期間,第二碼103包括一混洗指令,此處稱作為VECTOR_SHUFFLE指令,以基於該第三陣列之相對應元素的值或條件所產生的一遮罩而使用混洗表105以混洗該第一陣列之元素。第二碼103又更包括一儲存指令,此處稱作為VECTOR_MASKSTORE指令來以基於該遮罩而儲存該已混洗的該第一陣列之元素於該第二陣列。於另一個實施例中,於各次迭代重複期間,第二碼103包括一VECTOR_SHUFFLE指令,以基於該第三陣列之相對應元素的值或條件所產生的一遮罩而使用混洗表105以混洗該第一陣列之元素。第二碼103又更包括一摻混指令,此處稱作 為VECTOR_BLEND指令來摻混該已混洗的第一陣列之元素與先前已混洗的元素。當該第一陣列之全部元素已經混洗及摻混時,然後儲存該已混洗的該第一陣列之元素於該第二陣列。注意碼最佳化器102可於硬體、軟體或其組合體現。
於一個實施例中,碼最佳化器102可為編譯器的一部分,及處理器104可為得自美國加州聖塔卡拉的英特爾公司(Intel Corporation)的進階向量擴延(AVX)可相容處理器。於一個實施例中,VECTOR_SHUFFLE指令可為串流化SIMD擴延(SSE)的及/或AVX可相容指令的PSHUFB、PSHUFD、PSHUFHW、及PSHUFLW中之一者。VECTOR_MASKSTORE指令可為SSE/AVX可相容指令的MASKMOVDQU、VMASKMOV、及MASKMOVQ中之一者。VECTOR_BLEND指令可為SSE/AVX可相容指令的BLENDPD、BLENDPS、BLENDVPD、及BLENDVPS中之一者。
圖2為流程圖例示說明依據一個實施例一種最佳化程式碼之方法。舉例言之,方法200可藉圖1之碼最佳化器102執行。參考圖2,於方塊201,處理邏輯接收第一碼具有含純量指令之一程式迴路以基於一第三陣列的值或條件而儲存一第一陣列之值於一第二陣列。於方塊202,處理邏輯產生具有至少一個向量指令,諸如VECOTR_SHUFFLE、VECTOR_MASKSTORE及VECTOR_BLEND指令的第二碼來以向量方式執行該程式迴路的若干迭代重複。該等向量 指令與AVX為基的向量指令可為可相容。於方塊203,第二碼係儲存於欲藉一具向量能力的處理器執行的一記憶體。
圖3為表示具有純量指令的一典型程式迴路的虛擬碼。參考圖3,於本實例中,虛擬碼300包括一程式迴路(例如for-迴路)以基於第三陣列303之相對應元素的值或條件而分別地分派第一陣列301之元素值給第二陣列302之元素值。於本實例中,陣列301-303的該等元素各自係經迭代重複地處理,各個迭代重複中每次一個元素。如圖3所示,於各次迭代重複期間,陣列303之一元素係在行304評估,若滿足該條件,則於行305,陣列301之元素係分派給陣列302之相對應元素。其後,指數於行306針對下個元素遞增,將於下次迭代重複執行。於此種組態中,處理器須執行的迭代重複次數係等於陣列301中的元素數目。若陣列301具有大量元素,則將有大量迭代重複,可能顯著地無效率且耗用資源。
圖4為虛擬碼表示依據本發明之一個實施例具有向量為基的或緊縮指令為基的一程式迴路。於本實例中,虛擬碼400可由圖1之碼最佳化器102基於圖3之虛擬碼300產生。參考圖4,多數資料被緊縮入一向量暫存器,及一向量或緊縮指令(例如SIMD指令)被利用作為緊縮指令以在同一次迭代重複內並列地執行多重操作,該等多重操作於習知純量程式迴路的迭代重複係一次執行一項。
於行401,以廣播將條件值(例如topVal)載入一向量暫存器VMM0內部。取決於VMM0暫存器的大小,多套 條件值可使用載入附有廣播指令而被載入VMM0內。VMM0可為128-位元、256-位元、512-位元、或其它大小的暫存器。載入附有廣播指令可為SSE/AVX可相容指令之VBROADCASTSS、VBROADCASTSD、及VBROADCASTF中之一者。當執行時,載入附有廣播指令係從一來源運算元(例如topVal)載入值,且廣播給該目的地運算元(例如VMM0)的全部元素。
於本實例中,假設:topVal=0;array a[4]={0,1,2,3};array b[4]={-2,-2,1,-2}.
於行401的指令將全部零載入VMM0暫存器。然後程式迴路402係對一向量長度(VL)的增量進行,原因在於各次迭代重複執行等於向量長度的分派次數。取決於暫存器的大小,向量長度針對128-位元、256-位元、或512-位元暫存器個別地可為4、8、或16。
於行403,指令載入得自陣列b[ ]的4值,且與儲存於VMM0的topVal向量(於本實例皆為0)作比較。儲存於VMM2暫存器的結果將為{-1,-1,0,-1},原因在於此等乃於陣列b[ ]中比VMM0中的topVal更小的值。再度於本案全文中,任何暫存器諸如此處描述的VMM0、VMM1、及VMM2可為128-位元、256-位元、512-位元或其它尺寸的暫存器。於本實例中,利用一經緊縮的比較更大指令,其可以向量方式比較在單一指令週期內部的多個值。於一個實施例 中,取決於資料寬度及/或暫存器寬度,經緊縮的比較更大指令可為SSE/AVX可相容指令之PCMPGTB、PCMPGTW、PCMPGTD或PCMPGTQ中之一者。
於行404,於VMM2中各個元素的符號值經摘取且儲存於一暫存器或記憶體「遮罩」,於本實例為0xD。於一個實施例中,利用經緊縮的摘取符號位元指令,可為SSE/AVX可相容指令之MOVMSKPD及MOVMSKPS中之一者,該指令從來源運算元中的經緊縮的浮點值摘取符號位元,格式化成一遮罩,且儲存該遮罩於該目的地運算元。
於行405,混洗控制係依據儲存於「遮罩」的遮罩值而從一混洗表載入。混洗表之一實例係於圖5顯示為混洗表501,可體現為圖1之混洗表105的一部分。於本實例中,由一遮罩表示的混洗控制為{0x00,0x01,0x02,0x03,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x80,0x80,0x80,0x80},其係基於摘取自儲存於VMM1暫存器的比較結果之符號位元(例如-1,-1,0,-1)而載入暫存器「遮罩」。
於行406,四個元素從陣列A{0,1,2,3}載入且依據先前載入於VMM1的混洗控制而予混洗。結果將為{0,2,3,0}且儲存於VMM2暫存器。於一個實施例中,利用經緊縮的混洗指令,可為SSE/AVX可相容指令之PSHUFB、PSHUFD、PSHUFHW及PSHUFLW中之一者。經緊縮的混洗指令係將依據在來源運算元的混洗控制遮罩而執行於目的地運算元中各個大小的現場混洗。該指令置換於目的地運算元中的資料,留下混洗遮罩不受影響。若混洗控制遮 罩各自的最高有效位元係經設定,則常數零寫入結果中。於該混洗控制遮罩中的各個元素形成一指數,以置換於目的地運算元中的相對應位元組。各個指數值為混洗控制位元組的最低有效4位元(128-位元操作)或3位元(64-位元操作)。
於行407,儲存於「遮罩」的具有預定邏輯值(例如邏輯值1)的位元數目係經計數且儲存於「num」。於一個實施例中,利用與AVX指令可相容的POPCNT,於該處POPCNT回送具有邏輯值1的位元數目。於行408,遮罩控制係依據得自遮罩儲存表的位元數目而載入VMM1。遮罩儲存表之一實例係顯示於圖5為表502,可體現為圖1的遮罩儲存表106的一部分。於本實例中,VMM1將含有得自遮罩儲存表502的{-1,-1,-1,0}。
於行409,執行遮罩儲存操作,其係將基於儲存於VMM1之一遮罩所選的VMM2值儲存入該目的地陣列。於本實例中,將只儲存VMM2的前三個元素(例如基於遮罩{-1,-1,-1,0})。於一個實施例中,此處利用經緊縮的遮罩儲存指令,可為AVX可相容指令之MASKMOVDQU、VMASKMOV、及MASKMOVQ中之一者。於行410,目的地陣列之一指數或指標器係藉於遮罩儲存操作期間儲存的元素數目遞增。結果,程式迴路402的各次迭代重複可取決於相聯結的向量長度而以向量方式執行多次操作。注意如圖3-5顯示的虛擬碼及資料結構係僅供舉例說明之用,也可利用其它碼或程式語言以及某些緊縮指令或向量指令。
圖6為流程圖例示說明依據一個實施例一種最佳化程式迴路之方法。舉例言之,方法600可藉圖1之碼最佳化器102執行。參考圖6,於方塊601,接收具有以純量指令體現的一程式迴路之一第一碼。該第一碼係基於第三陣列之值而儲存第一陣列值於第二陣列。於方塊602,碼最佳化器係基於第一碼而產生第二碼以載入第三陣列值,且係使用一向量比較指令以比較第二碼與一預定臨界值。於方塊603,第二碼係基於以比較結果的符號值為基礎所決定之一遮罩而載入一混洗表。於方塊604,第二碼係將使用一向量混洗指令而使用該混洗表而混洗第一陣列之元素。於方塊605,基於遮罩(例如遮罩中的非零位元數目)而載入遮罩儲存表。於方塊606,已混洗的元素然後使用一向量遮罩儲存指令而基於該遮罩儲存表儲存於第二陣列。前述操作係於各次迭代重複進行,於該處各次迭代重複使用向量指令而並列地執行多項操作(例如高達向量長度)。然後於方塊607,第二碼係儲存於記憶體。
於另一個實施例中,替代使用一VECTOR_MASKSTORE指令,於該程式迴路的各次迭代重複中,第二碼包括一VECTOR_SHUFLE指令以基於該第三陣列之相對應元素的值或條件,使用一混洗表以混洗第一陣列之元素,及一VECOTR_BLEND指令以以向量方式摻混已混洗的第一陣列之元素。取決於向量長度,一旦已經透過摻混操作而累進第一陣列之元素,然後已摻混的第一陣列之元素係儲存於第二陣列。
圖7為虛擬碼表示依據本發明之另一個實施例具有向量為基的或緊縮指令為基的一程式迴路。於本實例中,虛擬碼700可由圖1之碼最佳化器102基於圖3之虛擬碼300產生。參考圖7,多數資料被緊縮入一向量暫存器,及一向量或緊縮指令(例如SIMD指令)被利用作為緊縮指令以在同一次迭代重複內並列地執行多重操作,該等多重操作於習知純量程式迴路的迭代重複係一次執行一項。於本實施例中,該處理將累進結果直到已經處理的元素數目等於向量長度為止。替代如前述使用遮罩儲存指令,利用具有一摻混表的一摻混指令。
參考圖7,於行701,執行程式迴路的某些初始化。於本實例中,以廣播將條件值(例如topVal)載入一向量暫存器VMM0內部。取決於VMM0暫存器的大小,多套條件值可使用載入附有廣播指令而被載入VMM0內。VMM0可為128-位元、256-位元、512-位元、或其它大小的暫存器。載入附有廣播指令可為AVX可相容指令之VBROADCASTSS、VBROADCASTSD、及VBROADCASTF中之一者。當執行時,載入附有廣播指令係從一來源運算元(例如topVal)載入值,且廣播給該目的地運算元(例如VMM0)的全部元素。
此外,累進計數器numOfElem表示已經處理的但尚未儲存於目的地陣列的元素數目。於本實例中,假設: topVal=0;a[8]={0,1,2,3,4,5,6,7};b[8]={-2,-2,1,-2,-2,1,1,-2}.
於行701的指令將全零載入VMM0暫存器內。然後於向量長度(VL)的遞增執行程式迴路702,原因在於各次迭代重複執行等於向量長度的分派操作次數。取決於暫存器的大小,向量長度針對128-位元、256-位元、或512-位元暫存器個別地可為4、8、或16。
於行703,指令載入得自陣列b[ ]的4值,且與儲存於VMM0的topVal向量(於本實例皆為0)作比較。儲存於VMM2暫存器的結果將為{-1,-1,0,-1},原因在於此等乃於陣列b[ ]中比VMM0中的topVal更小的值。再度於本案全文中,任何暫存器諸如此處描述的VMM0、VMM1、及VMM2可為128-位元、256-位元、512-位元或其它尺寸的暫存器。於本實例中,利用一經緊縮的比較更大指令,其可以向量方式比較在單一指令週期內部的多個值。於一個實施例中,取決於資料寬度及/或暫存器寬度,經緊縮的比較更大指令可為AVX可相容指令之PCMPGTB、PCMPGTW、PCMPGTD或PCMPGTQ中之一者。
於行704,於VMM3中各個元素的符號值經摘取且儲存於一暫存器或記憶體「遮罩」,於本實例為0xD。於一個實施例中,利用經緊縮的摘取符號位元指令,可為AVX可相容指令之MOVMSKPD及MOVMSKPS中之一者,該指令從來源運算元中的經緊縮的浮點值摘取符號位元,格式 化成一遮罩,且儲存該遮罩於該目的地運算元。
於行705,混洗控制係依據儲存於「遮罩」的遮罩值及目前累進元素之數目「numOfElem」而從一混洗表載入VMM1暫存器。混洗表之一實例係於圖8顯示為混洗表751,可體現為圖1之混洗表105的一部分。於本實例中,於VMM1的混洗控制為{0x00,0x01,0x02,0x03,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x80,0x80,0x80,0x80}。
於行706,四個元素從陣列A{0,1,2,3}載入且依據先前載入於VMM1的混洗控制而予混洗。結果將為{0,1,3,0}且儲存於VMM3暫存器。於一個實施例中,利用經緊縮的混洗指令,可為AVX可相容指令之PSHUFB、PSHUFD、PSHUFHW及PSHUFLW中之一者。經緊縮的混洗指令係將依據在來源運算元的混洗控制遮罩而執行於目的地運算元中各個大小的現場混洗。該指令置換於目的地運算元中的資料,留下混洗遮罩不受影響。若混洗控制遮罩各自的最高有效位元係經設定,則常數零寫入結果中。於該混洗控制遮罩中的各個元素形成一指數,以置換於目的地運算元中的相對應位元組。各個指數值為混洗控制位元組的最低有效4位元(128-位元操作)或3位元(64-位元操作)。
於行707,儲存於「遮罩」的具有預定邏輯值(例如邏輯值1)的位元數目係經計數且儲存於一暫存器或記憶體「num」。於本實例中,「num」為3。於一個實施例中, 利用與AVX指令可相容的POPCNT,於該處POPCNT回送具有邏輯值1的位元數目。於行708,遮罩控制係依據係乃累進「num」的元素數目而載入VMM1。遮罩儲存表之一實例係顯示於圖8為表752,可體現為圖1的摻混表107的一部分。於本實例中,VMM1將含有得自摻混表752的{0,0,0,0}。
於行709,使用先前載入於VMM1的摻混控制,儲存於VMM2的累進元素摻混儲存於VMM3的混洗元素。結果將為{0,1,3,0}且儲存於VMM2。於一個實施例中,使用VECTOR_BLEND指令以向量方式執行多個元素的摻混操作,可為AXN可相容指令之BLENDPD、BLENDPS、BLENDVPD、及BLENDVPS中之一者。取決於在遮罩暫存器運算元(例如VMM3)界定的遮罩位元,VECTOR_BLEND將條件式拷貝得自第二來源運算元(例如VMM2)及第一來源運算元(例如VMM1)的各個資料元素。遮罩位元乃該遮罩暫存器的各個元素中之最高有效位元。
其後,於行710,元素之累進數目numOfElem係藉儲存於「num」的值遞增更新,後述該值係相對應於摻混元素數目。於行711,若於numOfElem處理的元素之累進數目係大於向量長度VL,則儲存於VMM2之已摻混元素係儲存於目的地陣列,且針對元素的下個向量長度迭代重複。於本實例中,「num」等於3而小於向量長度4。結果,累進摻混元素將不儲存於目的地陣列。反而係執行下個迭代重複。
返回行703,載入得自陣列b[ ]的4值,且與topVal向量(於本實例皆為0)作比較。結果將為{-1,0,0,-1}。於行704,摘取各個元素之符號值且儲存於64位元暫存器遮罩(於本實例中,該值將為0x9)。於行705,依據遮罩值及累進的目前元素數目(例如3),混洗控制係從混洗表載入。於本實例中,混洗控制將為{0x0c,0x0d,0x0e,0x0f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x01,0x02,0x03}。於行706,從陣列a[ ]載入四個元素(例如{4,5,6,7})且依據先前載入的控制混洗。結果將為{7,0,0,4}。於行707,計數於遮罩內具有值1的位元數(於本實例中結果為2)。於行708,摻混控制係依據已累進的元素數目而載入。於本實例中,摻混控制將為{0,0,0,1}。
於行709,累進元素使用先前載入的摻混控制而與混洗元素摻混。結果將為{0,1,3,4}。於行710,累進元素數目於本次迭代重複相加(於本實例中新值將為3+2=5)。於行711,累進數目與向量長度VL為4作比較。於此種情況下,條件符合。於行712,儲存累進暫存器。於行713,累進元素數目遞減4(例如向量長度)結果獲得1。於行714,混洗元素指定作為新的累進向量暫存器。載入值的旋轉將最新累進元素置於向量的開端,匹配剩餘累進元素數目。結果將為{7,DC,DC,DC}(DC=Don’t Care)。於行715,目的地指標器遞增4(例如向量長度)元素。
圖9為流程圖例示說明依據另一實施例之一種最佳化一程式迴路的方法。方法800可藉圖1之碼最佳化器102 執行。參考圖8,於方塊801,接收具有以純量指令體現的一程式迴路之一第一碼。該第一碼係基於第三陣列之值而儲存第一陣列值於第二陣列。於方塊802,碼最佳化器係基於第一碼而產生第二碼以載入第三陣列值,且係使用一向量比較指令而比較第二碼與一預定臨界值。於方塊803,第二碼係基於以比較結果的符號值為基礎所決定之一遮罩而載入一混洗表。於方塊804,第二碼係將使用一向量混洗指令而使用該混洗表而混洗第一陣列之元素。於方塊805,基於第一陣列的累進元素而載入一摻混表。於方塊806,已混洗的元素然後使用一向量摻混指令而與第一陣列的累進元素摻混。若累進元素之數目係小於該向量長度,則迭代重複地執行方塊802-806之操作。否則於方塊807,第一陣列的累進元素係儲存於第二陣列。然後針對第一陣列的全部元素迭代重複地執行前述操作。
圖10為方塊圖例示說明依據本發明之一個實施例的資料處理系統之實例。例如,系統900可表示如前述圖1的系統100中之任一者。處理器901可表示如前述圖1的處理器104。系統900可表示前述系統中之任一者。舉例言之,系統900可表示桌上型電腦、膝上型電腦、平板電腦、伺服器、行動電話(例如智慧型電話)、媒體播放器、個人數位助理器(PDA)、個人通訊裝置、遊戲裝置、網路路由器或中樞器、無線存取點或轉發器、機上盒、或其組合。注意雖然圖10例示說明資料處理系統的各個組件,但非意圖表示互連該等組件的任何特定架構或方式;原因在於此等細節非 關本發明之實施例。也須瞭解具有更少組件或者或許更多組件的網路電腦、掌上型電腦、行動電話、及其它資料處理系統也可用於本發明之實施例。
參考圖10,於一個實施例中,系統900包括處理器901及晶片組902,以透過一匯流排或一互連體而耦接包括記憶體905及裝置903-904的各個組件至處理器901。處理器901可表示單一處理器或多個處理器有單一處理器核心或多個處理器核心909含括於其中。處理器901可表示一或多個通用處理器,諸如微處理器、中央處理單元(CPU)等。更明確言之,處理器901可為複雜指令集運算(CISC)微處理器、精簡指令集運算(RISC)微處理器、極長指令字組(VLIW)微處理器、或體現其它指令集的處理器、或體現其它指令集之組合的處理器。處理器901也可為一或多個特用處理器,諸如特定應用積體電路(ASIC)、可現場程式規劃閘陣列(FPGA)、數位信號處理器(DSP)、網路處理器、圖形處理器、網路處理器、通訊處理器、密碼處理器、共處理器、嵌入式處理器、或能處理指令的任何其它型別的邏輯。舉例言之,處理器901可為奔騰(Pentium®)4、奔騰雙核心、核心(CoreTM)2雙重及四重、席翁(Xeon)、伊塔尼(Itanium)、愛克斯階(XScale)、核心i7、核心i5、西洛龍(Celeron)、或強臂(StrongARM)微處理器,得自美國加州聖塔卡拉的英特爾公司。處理器901係經組配來執行用以進行此處討論的操作及步驟之指令。
處理器901可包括一指令解碼器,其可接收且解 碼多個指令。解碼器可產生與輸出反映或衍生自原始輸入指令的一或多個微運算、微碼進入點、微指令、其它指令或其它控制信號。解碼器可使用各種不同機制體現。適當機制之實例包括但非僅限於微碼唯讀記憶體(ROM)、詢查表、硬體體現、可規劃邏輯陣列(PLA)等。
解碼器可能並非為處理器901的必要組件。於一或多個其它實施例中,取而代之,處理器901可具有指令模擬器、指令轉譯器、指令變形器、指令解譯器、或其它指令轉換邏輯。多種不同型別的指令模擬器、指令變形器、指令轉譯器等為技藝界所已知。指令轉換邏輯可接收位元範圍隔離指令,模擬、轉譯、變形、解譯或以其它方式轉換該位元範圍隔離指令,及輸出與該原始位元範圍隔離指令相對應的一或多個指令或控制信號。指令轉換邏輯可體現在軟體、硬體、韌體、或其組合。有些情況下,部分或全部指令轉換邏輯可非位在晶粒上,而指令處理裝置的其餘部分諸如在分開晶粒或在系統記憶體。有些情況下,指令處理裝置可具有解碼器及指令轉換邏輯二者。
處理器901及/或核心909可進一步包括耦接至或以其它方式與解碼器之輸出通訊的一或多個執行單元。「耦接」一詞可表示二或多個元件彼此直接電氣接觸或電氣連接。但「耦接」一詞也可表示二或多個元件並非彼此直接連結,但仍然彼此協作或互動或通訊(例如透過中介組件)。舉個實例,解碼器及執行單元可經由一中介選擇性緩衝器或技藝界已知的可能耦接在解碼器與執行單元間的其它組 件而彼此耦接。處理器901及/或核心909可進一步包括多個不同型別的執行單元,諸如算術單元、算術邏輯單元(ALU)、整數單元等。
處理器901可進一步包括一或多個暫存器檔案,包括但非僅限於整數暫存器、浮點暫存器、向量或擴延暫存器、狀態暫存器、及指令指標器暫存器等。「暫存器」一詞用於此處係指係指用作為巨集指令之一部分以識別運算元的板上處理器儲存位置。換言之,此處所指暫存器乃從該處理器外部(從程式設計師的觀點)可見的該等暫存器。但暫存器不應囿限於特定型別的電路。反而暫存器只須能儲存與提供資料且執行此處描述之功能。此處描述之暫存器可使用任何數目的不同技術而由處理器內部的電路體現,諸如專用實體暫存器、運用暫存器重新命名的動態配置實體暫存器、專用與動態配置實體暫存器的組合等。於一個實施例中,整數暫存器儲存32-位元或64-位元整數資料。暫存器檔案可含有用於緊縮資料的擴延多媒體SIMD暫存器(例如XMM)。此等暫存器可包括保有此等緊縮資料運算元的有關SSE2、SSE3、SSE4、GSSE及以上(通稱作「SSEx」)技術的128位元寬XMM暫存器及256位元寬暫存器(可合併XMM暫存器於其低階位元)。
處理器901及/或核心909也可選擇性地包括一或多個其它眾所周知的組件。例如,處理器901可選擇性地包括指令提取邏輯、預解碼邏輯、排程邏輯、重新排序緩衝器、分支預測邏輯、報廢邏輯、暫存器重新命名邏輯等、 或其若干組合。此等組件可以習知方式體現,或基於本文揭示如熟諳技藝人士顯然易知地略作調整。無需此等組件的進一步描述以瞭解此等實施例,但若有所需,進一步描述可於公開參考文獻方便易得。此等組件在文字上有無數技藝界已知的不同的組合及組態。其範圍並不限於任何已知之此等組合或組態。實施例可有或無此等額外組件而予體現。
晶片組902可包括記憶體控制器中樞器(MCH)910及輸入輸出控制器中樞器(ICH)911。MCH 910可包括與記憶體905通訊的記憶體控制器(圖中未顯示)。MCH 910也可包括與圖形裝置912通訊的圖形介面。於本發明之一個實施例中,圖形介面可透過加速圖形埠(AGP)、周邊組件互連體(PCI)快速匯流排、或其它型別的互連裝置而與圖形裝置912通訊。ICH 911可提供與I/O裝置諸如裝置903-904的介面。裝置903-904中之任一者可為儲存裝置(例如硬碟機、快閃記憶體裝置)、通用串列匯流排(USB)埠、鍵盤、滑鼠、並聯埠、串聯埠、列印機、網路介面(有線或無線)、無線收發器(例如WiFi、藍牙或小區式收發器)、媒體裝置(例如音訊/視訊編解碼器或控制器)、匯流排橋接器(例如PCI-PCI橋接器)或其組合。
MCH 910有時稱作為北橋,而ICH 911有時稱作為南橋,但有些人會在其間做技術區分。如此處使用,MCH、ICH、北橋、及南橋等詞係意圖廣義地解譯為涵蓋晶片的功能包括發送中斷信號給處理器的各個晶片。於若 干實施例中,MCH 910可與處理器901整合。於此種組態中,如圖11所示,晶片組902操作為介面晶片執行MCH 910及ICH 911的若干功能。此外,圖形加速器912可整合於MCH 910或處理器901內部。
記憶體905可儲存資料,包括由處理器901或任何其它裝置所執行的指令序列。舉例言之,多個不同作業系統、裝置驅動程式、韌體(例如基本輸出入系統或BIOS)及/或應用程式的可執行代碼913及/或資料914可載入記憶體905及由處理器901執行。作業系統可為任一型作業系統,例如,得自微軟(Microsoft®)的視窗(Windows®)、得自蘋果(Apple)的Mac OS®/iOS®、得自谷歌(Google®)的安卓(Android®)、Linux®、Unix®或其它實時作業系統。於一個實施例中,記憶體905可包括一或多個依電性儲存(或記憶體)裝置諸如,隨機存取記憶體(RAM)、動態RAM(DRAM)、同步DRAM(SDRAM)、靜態RAM(SRAM)、或其它型別的儲存裝置。也可利用非依電性記憶體,諸如硬碟機或快閃儲存裝置。前端匯流排(FSB)906可為多插互連體或點對點互連體。前端匯流排(FSB)一詞意圖涵蓋各種型別的連結至處理器901的互連體。晶片組902可透過點對點介面而與其它裝置諸如裝置903-904通訊。匯流排906可體現為多種匯流排或互連體,諸如快速路徑互連體(QPI)、超傳送互連體、或進階微控制器匯流排架構(AMBA)可相容性匯流排,諸如AMBA高效能匯流排(AHB)。
快取記憶體908可為任一種處理器快取記憶體, 諸如層級-1(L1)快取記憶體、L2快取記憶體、L3快取記憶體、L4快取記憶體、最末層級快取記憶體(LLC)或其組合。快取記憶體908可與處理器901的處理器核心909共享。快取記憶體908可嵌入於處理器901內部及/或位在處理器901外部。快取記憶體908可在核心909間共享。另外,核心909中之至少一者進一步包括嵌入於其中的本身本地快取記憶體。核心909中之至少一者可利用本地快取記憶體及與核心909中之另一者共享的快取記憶體。處理器901可進一步包括一直接快取記憶體存取(DCA)邏輯以使得其它裝置諸如裝置903-904直接地存取快取記憶體908。處理器901及/或晶片組902可進一步包括一中斷控制器,諸如高階可規劃中斷控制器(APIC)以處置中斷,諸如訊息發訊中斷。
前文詳細說明部分的某些部分已經以就對一電腦記憶體內部的資料位元的演算法及運算之符碼表示型態呈現。此等演算法之描述及表示型態乃資料處理技藝界的熟諳技藝人士以最有效地傳遞其工作本質給技藝界的其它熟諳技藝人士所使用之方式。演算法於此處大致上須瞭解為結果可獲得期望結果之一自我一致的運算序列。運算為物理量的實體操弄所需。
但須牢記全部此等類似術語係與適當實體量相聯結且僅為施加至此等量的方便標示。除非有與前文討論顯然易知的除外特別陳述,否則須瞭解於全文說明中,利用術語諸如如下申請專利範圍陳述的術語討論述及一電腦系統或類似電子運算裝置的動作及處理,係將在電腦系統 的暫存器及記憶體內部以物理(電子)量表示的資料操弄且變換成為其它資料,該等資料同樣地在電腦系統的記憶體或暫存器或其它此等資訊儲存、傳輸或顯示裝置內部以物理量表示。
附圖顯示之技術可使用儲存在且於一或多個電子裝置上執行的碼及資料體現。此等電子裝置使用電腦可讀取媒體諸如非過渡電腦可讀取儲存媒體(例如磁碟;光碟;隨機存取記憶體;唯讀記憶體;快閃記憶體裝置;相變記憶體)及過渡電腦可讀取儲存媒體(例如電氣、光學、聲學或其它形式的傳播信號,諸如載波、紅外線信號、數位信號)儲存與通訊(內部及/或透過網路與其它電子裝置)代碼及資料。
先前各圖中闡釋的處理或方法可藉處理邏輯執行,包含硬體(例如電路、專用邏輯等)、韌體、軟體(例如在非過渡電腦可讀取媒體上具體實施)或其組合。雖然前文中處理或方法係就若干循序操作描述,但須瞭解可以不同順序執行若干所述操作。此外,若干操作可並列地而非串列地實施。
前文說明書中已經參考其特定具體實施例描述本發明之實施例。顯然可不悖離如下申請專利範圍列舉的本發明的廣義精髓及範圍而對其做出多項修改。因此說明書及附圖圖式須視為例示說明意義而非限制性意義。
100‧‧‧系統
101‧‧‧第一代碼
102‧‧‧代碼最佳化器
103‧‧‧第二代碼
104‧‧‧具向量能力的處理器
105‧‧‧混洗表
106‧‧‧遮罩儲存表
107‧‧‧摻混表

Claims (20)

  1. 一種電腦體現之方法,其係包含:接收具有使用純量指令體現之一程式迴路的第一碼(code)以基於一第三陣列的值而儲存一第一陣列的值至一第二陣列;及產生使用向量指令表示該程式迴路之第二碼,該第二碼係包括一混洗指令以用一向量方式使用一混洗表基於該第三陣列而混洗該第一陣列之元素,及一儲存指令以用一向量方式使用一遮罩儲存表而儲存該第一陣列之該等已混洗元素於該第二陣列。
  2. 如申請專利範圍第1項之方法,其中該第二碼係進一步包含指令以比較該第三陣列之元素與一預定臨界值,產生一比較結果,及基於該比較結果產生一遮罩,該第一陣列之該等元素將基於該遮罩而被混洗。
  3. 如申請專利範圍第2項之方法,其中該第二碼係進一步包含一指令以載入基於該遮罩而被選擇的該混洗表之元素,該第一陣列之該等元素將基於該混洗表之該等被選擇元素透過該混洗指令而被混洗。
  4. 如申請專利範圍第2項之方法,其中該第二碼係進一步 包含一指令以載入基於該遮罩而被選擇的該遮罩儲存表之元素,該第一陣列之該等已混洗元素將基於該遮罩儲存表之該等被選擇元素透過該遮罩儲存指令而被儲存。
  5. 如申請專利範圍第4項之方法,其中該遮罩儲存表的該等被選擇元素係基於具有一預定邏輯值的該遮罩之位元的數目而被決定。
  6. 如申請專利範圍第2項之方法,其中該第二碼係進一步包含一指令以儲存該預定臨界值於一向量暫存器,該第一陣列之該等元素將使用一向量比較指令而與儲存在該向量暫存器的值作比較。
  7. 如申請專利範圍第2項之方法,其中該遮罩係基於儲存於一向量暫存器的該比較結果的符號位元而被產生。
  8. 一種具有指令儲存於其中的電腦可讀取儲存媒體,該等指令當由一電腦執行時使得該電腦執行一方法,該方法係包含:接收具有使用純量指令體現之一程式迴路的第一碼以基於一第三陣列的值而儲存一第一陣列的值至一第二陣列;及產生使用向量指令表示該程式迴路之第二碼,該第二碼係包括一混洗指令以用一向量方式使用一混洗表基於該第三陣列而混洗該第一陣列之元素,及一儲存指令以用一向量方式使用一遮罩儲存 表而儲存該第一陣列之該等已混洗元素於該第二陣列。
  9. 如申請專利範圍第8項之電腦可讀取儲存媒體,其中該第二碼係進一步包含指令以比較該第三陣列之元素與一預定臨界值,產生一比較結果,及基於該比較結果產生一遮罩,該第一陣列之該等元素將基於該遮罩而被混洗。
  10. 如申請專利範圍第9項之電腦可讀取儲存媒體,其中該第二碼係進一步包含一指令以載入基於該遮罩而被選擇的該混洗表之元素,該第一陣列之該等元素將基於該混洗表之該等被選擇元素透過該混洗指令而被混洗。
  11. 如申請專利範圍第9項之電腦可讀取儲存媒體,其中該第二碼係進一步包含一指令以載入基於該遮罩而被選擇的該遮罩儲存表之元素,該第一陣列之該等已混洗元素將基於該遮罩儲存表之該等被選擇元素透過該遮罩儲存指令而被儲存。
  12. 如申請專利範圍第11項之電腦可讀取儲存媒體,其中該遮罩儲存表的該等被選擇元素係基於具有一預定邏輯值的該遮罩之位元的數目而被決定。
  13. 如申請專利範圍第9項之電腦可讀取儲存媒體,其中該第二碼係進一步包含一指令以儲存該預定臨界值於一向量暫存器,該第一陣列之該等元素將使用一向量比較指令而與儲存在該向量暫存器的值作比較。
  14. 如申請專利範圍第9項之電腦可讀取儲存媒體,其中該遮罩係基於儲存於一向量暫存器的該比較結果的符號位元而被產生。
  15. 一種裝置,其係包含:一記憶體,以儲存一混洗表及一遮罩儲存表;及一碼最佳化器,以接收具有使用純量指令體現之一程式迴路的第一碼以基於一第三陣列的值而儲存一第一陣列的值至一第二陣列,及產生使用向量指令表示該程式迴路之第二碼,該第二碼係包括一混洗指令以用一向量方式使用該混洗表基於該第三陣列而混洗該第一陣列之元素,及一儲存指令以用一向量方式使用該遮罩儲存表而儲存該第一陣列之該等已混洗元素於該第二陣列。
  16. 如申請專利範圍第15項之裝置,其中該第二碼係進一步包含指令以比較該第三陣列之元素與一預定臨界值,產生一比較結果,及基於該比較結果產生一遮罩,該第一陣列之該等元素將基於該遮罩而混洗。
  17. 如申請專利範圍第16項之裝置,其中該第二碼係進一步包含一指令以載入基於該遮罩而被選擇的該混洗表之元素,該第一陣列之該等元素將基於該混洗表之該等被選擇元素透過該混洗指令而被混洗。
  18. 如申請專利範圍第16項之裝置,其中該第二碼係進一步包含一指令以載入基於該遮罩而被選擇的該遮罩儲存表之元素,該第一陣列之該等已混洗元素將基於該遮罩儲存表之該等被選擇元素透過該遮罩儲存指令而被儲存。
  19. 如申請專利範圍第18項之裝置,其中該遮罩儲存表的該等被選擇元素係基於具有一預定邏輯值的該遮罩之位元的數目而被決定。
  20. 如申請專利範圍第16項之裝置,其中該第二碼係進一步包含一指令以儲存該預定臨界值於一向量暫存器,該第一陣列之該等元素將使用一向量比較指令而與儲存在該向量暫存器的值作比較。
TW101142379A 2011-12-15 2012-11-14 電腦實施方法、電腦可讀取儲存媒體以及用於最佳化程式碼的裝置 TWI478058B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/065213 WO2013089749A1 (en) 2011-12-15 2011-12-15 Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table

Publications (2)

Publication Number Publication Date
TW201327385A true TW201327385A (zh) 2013-07-01
TWI478058B TWI478058B (zh) 2015-03-21

Family

ID=48613028

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101142379A TWI478058B (zh) 2011-12-15 2012-11-14 電腦實施方法、電腦可讀取儲存媒體以及用於最佳化程式碼的裝置

Country Status (4)

Country Link
US (1) US9436469B2 (zh)
CN (1) CN103959240B (zh)
TW (1) TWI478058B (zh)
WO (1) WO2013089749A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI506552B (zh) * 2014-09-29 2015-11-01 Via Alliance Semiconductor Co Ltd 迴圈預測器指導的迴圈緩衝器

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN107391086B (zh) 2011-12-23 2020-12-08 英特尔公司 改进置换指令的装置和方法
CN111831334B (zh) 2011-12-23 2024-05-24 英特尔公司 经改进的插入指令的装置和方法
WO2013095630A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method of improved extract instructions background
US9632980B2 (en) 2011-12-23 2017-04-25 Intel Corporation Apparatus and method of mask permute instructions
US8683296B2 (en) 2011-12-30 2014-03-25 Streamscale, Inc. Accelerated erasure coding system and method
US8914706B2 (en) 2011-12-30 2014-12-16 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US9038042B2 (en) * 2012-06-29 2015-05-19 Analog Devices, Inc. Staged loop instructions
US10592468B2 (en) * 2016-07-13 2020-03-17 Qualcomm Incorporated Shuffler circuit for lane shuffle in SIMD architecture
US10795682B2 (en) 2016-12-28 2020-10-06 Intel Corporation Generating vector based selection control statements
JP2018124877A (ja) * 2017-02-02 2018-08-09 富士通株式会社 コード生成装置、コード生成方法、およびコード生成プログラム

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5123095A (en) * 1989-01-17 1992-06-16 Ergo Computing, Inc. Integrated scalar and vector processors with vector addressing by the scalar processor
US5551039A (en) * 1992-02-03 1996-08-27 Thinking Machines Corporation Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements
JPH0756892A (ja) * 1993-08-10 1995-03-03 Fujitsu Ltd マスク付きベクトル演算器を持つ計算機
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US6016395A (en) 1996-10-18 2000-01-18 Samsung Electronics Co., Ltd. Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6269435B1 (en) * 1998-09-14 2001-07-31 The Board Of Trustees Of The Leland Stanford Junior University System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
JP2000138897A (ja) 1998-10-30 2000-05-16 Sony Corp データ処理装置およびデータ記録装置
US7631025B2 (en) * 2001-10-29 2009-12-08 Intel Corporation Method and apparatus for rearranging data between multiple registers
EP1512100A2 (en) * 2002-05-24 2005-03-09 Koninklijke Philips Electronics N.V. A scalar/vector processor
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
US7475392B2 (en) * 2004-06-07 2009-01-06 International Business Machines Corporation SIMD code generation for loops with mixed data lengths
US7367026B2 (en) * 2004-06-07 2008-04-29 International Business Machines Corporation Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization
CN101120508B (zh) 2005-02-14 2012-10-10 皇家飞利浦电子股份有限公司 用于进行交织或去交织的方法和设备
US20070011441A1 (en) * 2005-07-08 2007-01-11 International Business Machines Corporation Method and system for data-driven runtime alignment operation
US8156310B2 (en) * 2006-09-11 2012-04-10 International Business Machines Corporation Method and apparatus for data stream alignment support
US8505002B2 (en) * 2006-09-29 2013-08-06 Arm Limited Translation of SIMD instructions in a data processing system
US20080151670A1 (en) 2006-12-22 2008-06-26 Tomohiro Kawakubo Memory device, memory controller and memory system
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US7900025B2 (en) * 2008-10-14 2011-03-01 International Business Machines Corporation Floating point only SIMD instruction set architecture including compare, select, Boolean, and alignment operations
US8418155B2 (en) * 2009-02-10 2013-04-09 International Business Machines Corporation Generating parallel SIMD code for an arbitrary target architecture
US8458685B2 (en) * 2009-06-12 2013-06-04 Cray Inc. Vector atomic memory operation vector update system and method
CN101986262B (zh) * 2010-11-25 2013-01-16 中国人民解放军国防科学技术大学 基于模式偏移的混洗开关矩阵压缩方法
CN102053816B (zh) * 2010-11-25 2014-02-12 中国人民解放军国防科学技术大学 具有开关矩阵存储器的数据混洗单元及其混洗方法
US8635431B2 (en) * 2010-12-08 2014-01-21 International Business Machines Corporation Vector gather buffer for multiple address vector loads
US8640112B2 (en) * 2011-03-30 2014-01-28 National Instruments Corporation Vectorizing combinations of program operations
WO2012134322A1 (en) * 2011-04-01 2012-10-04 Intel Corporation Vectorization of scalar functions including vectorization annotations and vectorized function signatures matching
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
CN103959238B (zh) * 2011-11-30 2017-06-09 英特尔公司 使用gpu/cpu体系结构的rsa的高效实现
CN104115113B (zh) * 2011-12-14 2018-06-05 英特尔公司 用于循环剩余掩码指令的系统、装置和方法
US10083032B2 (en) * 2011-12-14 2018-09-25 Intel Corporation System, apparatus and method for generating a loop alignment count or a loop alignment mask

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI506552B (zh) * 2014-09-29 2015-11-01 Via Alliance Semiconductor Co Ltd 迴圈預測器指導的迴圈緩衝器

Also Published As

Publication number Publication date
CN103959240B (zh) 2017-05-17
WO2013089749A1 (en) 2013-06-20
US9436469B2 (en) 2016-09-06
US20130339682A1 (en) 2013-12-19
TWI478058B (zh) 2015-03-21
CN103959240A (zh) 2014-07-30

Similar Documents

Publication Publication Date Title
TWI478058B (zh) 電腦實施方法、電腦可讀取儲存媒體以及用於最佳化程式碼的裝置
JP6699845B2 (ja) 方法及びプロセッサ
TWI502506B (zh) 經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
US9798541B2 (en) Apparatus and method for propagating conditionally evaluated values in SIMD/vector execution using an input mask register
CN107741861B (zh) 用于混洗浮点或整数值的装置和方法
TWI552071B (zh) 用以處理keccak安全雜湊演算法的方法及裝置(二)
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
JP2017076395A (ja) 装置および方法
TWI517037B (zh) 用於使用前綴之指令集架構指令的條件式執行支援技術
TWI610228B (zh) 用於執行向量位元反轉和交叉的方法和設備
JP2016527650A (ja) ベクトルポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
TW201337738A (zh) 用以提供向量水平式多數決投票功能之指令與邏輯
JP2016529617A (ja) ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
CN105612509A (zh) 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑
TWI595413B (zh) 用以提供在遮罩暫存器與通用暫存器或記憶體間的轉換之指令及邏輯(二)
TWI553553B (zh) 用於產生迴圈對齊計數或迴圈對齊遮罩的系統、設備與方法
TW201823974A (zh) 執行置換運算的處理器及具有該處理器的電腦系統
TW201510862A (zh) 用以反轉與置換在一遮罩暫存器內的位元之設備及方法
GB2513467A (en) Systems, apparatuses and methods for determining a trailing least significant masking bit of a writemask register
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
JP5753603B2 (ja) データ要素内のビットをゼロ化するためのシステム、装置、および方法