TWI502506B - 經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法 - Google Patents

經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法 Download PDF

Info

Publication number
TWI502506B
TWI502506B TW101142637A TW101142637A TWI502506B TW I502506 B TWI502506 B TW I502506B TW 101142637 A TW101142637 A TW 101142637A TW 101142637 A TW101142637 A TW 101142637A TW I502506 B TWI502506 B TW I502506B
Authority
TW
Taiwan
Prior art keywords
array
elements
instruction
vector
mask
Prior art date
Application number
TW101142637A
Other languages
English (en)
Other versions
TW201344575A (zh
Inventor
Tal Uliel
Elmoustapha Ould-Ahmed-Vall
Bret 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 TW201344575A publication Critical patent/TW201344575A/zh
Application granted granted Critical
Publication of TWI502506B publication Critical patent/TWI502506B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • 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/30018Bit or string instructions
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction

Landscapes

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

Description

經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法
本發明之實施例主要有關於程式迴路的最佳化。詳言之,本發明之實施例有關於經由使用混洗表及混合表之向量指令的程式迴路之最佳化。
幾乎所有的資料處理應用都牽涉到必須對資料集迭代履行之運算。這種程式迴路可包括任何數量的指令並可如電腦程式所建立般迭代任何次數。往往會基於第三陣列的條件來分配第一陣列的值到第二陣列。典型地,為了實現這種運算,利用程式迴路以依據第三陣列的相應元素迭代地分配第一陣列的元素到第二陣列的元素,如第3圖中所示般以純量方式一次一個元素。
於第3圖中所示的範例中,基於陣列b[]之相應元素的值或條件,陣列a[]的元素係分配到陣列dest[],於程式迴路中一次一個元素。然而,這種實作因為有待處理器執行之大量的迭代和指令而無效率。
將參照後面討論的細節說明本發明之各種實施例及態樣,且附圖將繪示各種實施例。隨後的說明及圖式為繪示本發明用且不應解釋為限制本發明。敘述諸多特定細節以提供本發明之各種實施例的詳盡理解。然而,在某些實例 中,並未敘述熟知或傳統的細節以提供本發明之實施例的精簡討論。
在說明書中對於「一實施例」或「實施例」的參照意指連同該實施例所述的特定特徵、結構、或特性可包括在本發明之至少一個實施例中。於說明書各處中片語「在一實施例中」的出現未必都指相同的實施例。
根據一些實施例,利用碼最佳化器(如編譯器)以最佳化使用向量指令來以向量方式履行程式迴路之迭代的程式迴路之純量指令。藉由以得以向量處理器(比如單指令多資料(SIMD)處理器)執行向量或緊縮指令履行程式迴路的迭代。藉由使用向量或緊縮指令,可基於向量指令的向量長度或打包在SIMD指令內之指令數量減少或縮短程式迴路之迭代數量。可藉由得以向量處理器使用向量指令來平行地履行典型程式迴路之某些迭代。結果,可大幅改善程式迴路之執行效率。
根據一實施例,由碼最佳化器接收具有用於基於第三陣列(如條件陣列)之元件的值或條件分配第一陣列(如來源陣列)的元素到第二陣列的元素(如目的地陣列)之程式迴路的第一碼。作為回應,碼最佳化器組態成產生具有向量指令的第二碼以履行程式迴路之相同運算。在一實施例中,第二碼包括,在程式迴路的每一迭代中,VECTOR_SHUFLE指令以基於第三陣列之相應元素的值或條件使用混洗表來混洗第一陣列的元素,及VECTOR_MASKSTORE指令以用向量方式將第一陣列之經 混洗的元素儲存於第二陣列中。
在另一個實施例中,第二碼包括,在程式迴路的每一迭代中,VECTOR_SHUFLE指令以基於第三陣列之相應元素的值或條件使用混洗表來混洗第一陣列的元素,及VECTOR_BLEND指令以用向量方式混合第一陣列之經混洗的元素。取決於向量長度,一旦已經由混合運算累積第一陣列的元素,接著儲存第一陣列之經混合的元素於第二陣列中。
第1圖為繪示根據一實施例的碼最佳化器之區塊圖。參考第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可為可從California,Santa Clara的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圖為繪示根據一實施例之最佳化程式碼的方法之 流程圖。例如,可由第1圖的碼最佳化器102履行方法200。參考第2圖,在區塊201,處理邏輯接收具有含有純量指令之程式迴路的第一碼以基於第三陣列之值或條件將第一陣列的值儲存至第二陣列。在區塊202,處理邏輯產生具有至少一個向量指令的第二碼,比如VECTOR_SHUFFLE、VECTOR_MASKSTORE、及VECTOR_BLEND指令,以用向量方式履行程式迴路的一些迭代。向量指令可與AVX為基之向量指令相容。在區塊203,將第二碼儲存在將由得以向量處理器所執行的記憶體中。
第3圖為代表具有純量指令之典型程式迴路的偽碼。參考第3圖,在此範例中,偽碼300包括程式迴路(例如,for迴路)以基於第三陣列303之相應元素的值或條件分別將第一陣列301之元素的值分配到第二陣列302之相應元素。在此範例中,迭代地處理陣列301至303的每一個元素,於每一個迭代中一次一個元素。如第3圖中所示,於每一個迭代中,在行304評估陣列303之一個元素且若滿足條件,則接著在行305分配陣列301之元素到陣列302之相應的元素。之後,在行306針對下一個元素增量索引,將在下一個迭代中履行該下一個元素。在這種組態中,處理器必須履行等於陣列301中之元素數量的若干迭代。如果陣列301有大量元素的話,會有大量的迭代,這明顯地無效率且浪費資源。
第4圖為代表根據本發明之一實施例使用向量為基或 緊縮指令之程式迴路的偽碼。在此範例中,可由第1圖之碼最佳化器102基於第3圖之偽碼300產生偽碼400。參考第4圖,將多個資料打包到一向量暫存器中並使用一個向量或緊縮指令(如SIMD指令)作為緊縮指令來在相同迭代內平行履行多個運算,而若在傳統純量程式迴路的一個迭代內則一次履行那些多個運算的一個。
在行401,以廣播載入條件值(如topVal)到向量暫存器VMM0中。取決於VMM0暫存器的大小,可使用以廣播載入的指令將條件值的多個副本載入到VMM0中。VMM0可為128位元、256位元、512位元、或其他大小的暫存器。以廣播載入(load-with-broadcast)的指令可為SSE/AVX相容之指令的VBROADCASTSS、VBROADCASTSD、及VBROADCASTF之一。以廣播載入的指令,當加以執行時,會從來源運算元(如topVal)載入值並廣播到目的地運算元(如VMM0)的所有元素。
在此範例中,假設:topVal=0;陣列a[4]=[0,1,2,3];陣列b[4]=[-2,-2,1,-2]。
在行401的指令會載入全部零到VMM0暫存器中。接著以向量長度(VL)的增量履行程式迴路402,因為每一個迭代履行等於VL之分配運算的數量。取決於暫存器的大小,針對128位元、256位元、或512位元暫存器,VL可分別為4、8、或16。
在行403,指令從陣列b[]載入4個值並與儲存在VMM0中的topVal之向量(在此範例中全部為0)相比。儲存在VMM2中的結果將為{-1,-1,0,-1},因為這些為少於VMM0中之topVal的陣列b[]中的值。同樣地在整份說明書中,任何暫存器,比如VMM0、VMM1、及VMM2,在此所述,可為128位元、256位元、512位元、或其他大小的暫存器。在此範例中,利用緊縮的比較大於(compare-greater-than)指令,其可在單一指令週期內以向量方式比較多個值。在一實施例中,取決於資料及/或暫存器寬度,緊縮的比較大於(compare-greater-than)指令可為SSE/AVX相容之指令的PCMPGTB、PCMPGTW、PCMPGTD、或PCMPGTQ之一。
在行404,抽取並儲存VMM2中之每一個元素的符號位元於暫存器或記憶體「遮罩」中,其在此範例中為0×D。在一實施例中,利用緊縮的抽取符號位元(extract-sign-bit)指令,其可為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之一。緊縮的混洗指令將根據來源運算元中的混洗控制遮罩履行目的地運算元中之各種大小的原位(in-place)混洗。該指令置換目的地運算元中的資料,使混洗遮罩不受影響。如果每一個混洗控制遮罩的最大有效位元為設立,則寫入常量零到結果中。混洗控制遮罩中的每一個元素形成一個索引以置換目的地運算元中的相應位元組。每一個索引的值為混洗控制位元組的最小有效4位元(128位元運算)或3位元(64位元運算)。
在行407,計數儲存在「遮罩」中具有預定邏輯值(如一的邏輯值)之位元數量並儲存在「num」中。在一實施例中,利用與AVX指令相容之POPCNT,POPCNT指令返還具有一的邏輯值之位元數量。在行408,根據來自遮罩儲存表的位元數量將遮罩控制載入到VMM1中。遮罩儲存表的一個範例係顯示為第5圖的表502,其可實現為第1圖之遮罩儲存表106的一部分。在此範例中,VMM1可含有來自遮罩儲存表502的{-1,-1,-1,0}。
在行409,履行遮罩儲存運算,其儲存基於儲存於VMM1中之遮罩所選擇的VMM2之值到目的地陣列中。在此範例中,僅會儲存VMM2之前3個元素(如基於{-1,-1,-1,0}之遮罩)。在一實施例中,在此利用緊縮的遮罩儲存指令,其可為AVX相容的指令之MASKMOVDQU、VMASKMOV、及MASKMOVQ之一。在行410,以遮罩儲存運算期間所儲存的元素數量增量目的地陣列之索引或指標。結果,程式迴路402的每一個迭代可根據關聯之向量長度以向量方式履行多個運算。注意到僅為了繪示而敘述第3至5圖中所示的偽碼及資料結構;也可利用其他碼或編碼語言,還有某些緊縮或向量指令。
第6圖為繪示根據一實施例的用於最佳化程式迴路之方法的流程圖。例如,可藉由第1圖之碼最佳化器102履行方法600。參考第6圖,在區塊601,接收具有以純量指令實現之程式迴路的第一碼。第一碼將會基於第三陣列的值儲存第一陣列的值到第二陣列。在區塊602,碼最佳化器將會基於第一碼產生第二碼以載入第三陣列的值並使用向量比較指令來比較它們與一預定臨限值。在區塊603,第二碼將會基於依據比較結果的符號位元所判定之遮罩載入混洗表。在區塊604,第二碼將會使用混洗表而使用向量混洗指令來混洗第一陣列的元素。在區塊605,基於遮罩(如遮罩中之非零位元的數量)載入遮罩儲存表。在區塊606,接著基於遮罩儲存表使用向量遮罩儲存指令來儲存經混洗的元素於第二陣列中。在每一個迭代中 履行上述的運算,其中每一個迭代使用向量指令平行履行多個運算(如多達向量長度)。在區塊607接著儲存第二碼於記憶體中。
在另一個實施例中,取代使用VECTOR_MASKSTORE指令,第二碼包括,在程式迴路的每一個迭代中,VECTOR_SHUFLE指令以基於第三陣列之相應元素的值或條件使用混洗表來混洗第一陣列的元素,及VECTOR_BLEND指令以用向量方式混合第一陣列之經混洗的元素。取決於向量長度,一旦經由混合運算累積了第一陣列的元素,接著將第一陣列之經混合的元素儲存於第二陣列中。
第7圖為代表根據本發明之另一實施例的使用向量為基或緊縮之指令的程式迴路之偽碼。在此範例中,可由第1圖之碼最佳化器102基於第3圖的偽碼300產生偽碼700。參考第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,因為每一個迭代履行等於VL之分配運算的數量。取決於暫存器的大小,針對128位元、256位元、或512位元暫存器,VL可分別為4、8、或16。
在行703,指令從陣列b[]載入4個值並與儲存在VMM0中的topVal之向量(在此範例中全部為0)相比。儲存在VMM3暫存器中的結果將為{-1,-1,0,-1},因為這些為少於VMM0中之topVal的陣列b[]中的值。同樣地在整份說明書中,任何暫存器,比如VMM0、VMM1、VMM2、及VMM3,在此所述,可為128位元、256位 元、512位元、或其他大小的暫存器。在此範例中,利用緊縮的比較大於(compare-greater-than)指令,其可在單一指令週期內以向量方式比較多個值。在一實施例中,取決於資料及/或暫存器寬度,緊縮的比較大於(compare-greater-than)指令可為SSE/AVX相容之指令的PCMPGTB、PCMPGTW、PCMPGTD、或PCMPGTQ之一。
在行704,抽取並儲存VMM3中之每一個元素的符號位元於暫存器或記憶體「遮罩」中,其在此範例中為0×D。在一實施例中,利用緊縮的抽取符號位元(extract-sign-bit)指令,其可為SSE/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暫存器中。在一實施例中,利用緊縮的混洗指令,其可為SSE/AVX相容之指令的 PSHUFB、PSHUFD、PSHUFHW、及PSHUFLW之一。緊縮的混洗指令將根據來源運算元中的混洗控制遮罩履行目的地運算元中之各種大小的原位混洗。該指令置換目的地運算元中的資料,使混洗遮罩不受影響。如果每一個混洗控制遮罩的最大有效位元為設立,則寫入常量零到結果中。混洗控制遮罩中的每一個元素形成一個索引以置換目的地運算元中的相應位元組。每一個索引的值為混洗控制位元組的最小有效4位元(128位元運算)或3位元(64位元運算)。
在行707,計數儲存在「遮罩」中具有預定邏輯值(如一的邏輯值)之位元數量並儲存在「num」中。在此範例中,「num」為3。在一實施例中,利用與AVX指令相容之POPCNT,POPCNT指令返還具有一的邏輯值之位元數量。在行708,根據累積的位元數量「num」從混合表載入混合控制到VMM1中。混合表的一個範例係顯示為第8圖的表752,其可實現為第1圖之混合表107的一部分。在此範例中,VMM1會含有來自混合表752的{0,0,0,0}。
在行709,使用先前載入到VMM1中之混合控制來混合儲存在VMM2中之經累積的元素與儲存在VMM3中的經混洗元素。結果將為{0,1,3,0}並儲存於VMM2中。在一實施例中,以向量方式使用VECTOR_BLEND指令來履行多個元素的混合運算,其可為SSE/AVX相容之指令的BLENDPD、BLENDPS、BLENDVPD、及BLENDVPS之 一。VECTOR_BLEND將會根據界定在遮罩暫存器運算元(如VMM3)中之遮罩位元從第二來源運算元(如VMM2)及第一來源運算元(如VMM1)條件式複製每一個資料元素值。遮罩位元為遮罩暫存器的每一個元素中之最大有效位元。
之後,在行710,以儲存在「num」中之值的增量更新累積的元素數量numOfElem,其相應於經混合的元素數量。在行711,如果在numOfElem中處理過的累積元素數量大於向量長度VL,則將儲存於VMM2中的經混合元素儲存於目的地陣列中,並且迭代針對元素之下一個VL重複。在此範例中,「num」等於3,其小於4的VL。結果,將不會儲存經累積混合的元素於目的地陣列中。取而代之,履行下一個迭代。
回到行703,從陣列b[]載入4個值並與topVal之向量(在此範例中全部為0)相比。結果將為{-1,0,0,-1}。在行704,抽取並儲存每一個元素的符號位元於64位元暫存器「遮罩」中(在此範例中,該值將為0×9)。在行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,比較經累積的數量與4的向量長度VL。在此情況中,條件符合。在行712,儲存經累積的暫存器。在行713,將經累積的元素數量減量4(如VL),其導致1。在行714,經混洗的元素被指定為新的經累積向量暫存器。已載入的值之旋轉將最新的累積元素置於向量的最前面,其匹配累積元素之其餘的數量。結果將為{7,DC,DC,DC}(DC=不在乎(Don’t Care))。在行715,目的地指標增量4(如VL)個元素。
第9圖為繪示根據另一個實施例的用於最佳化程式迴路之方法的流程圖。可藉由第1圖之碼最佳化器102履行方法800。參考第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以經由匯流排或互連耦合各種組件至處理器901,包括記憶體905及裝置903-904。處理器901可代表單一處理器或具有單一處理器核心或多個處理器核心909包括於其中之多個處理器。處理器901可代表一或更多個通用處理器,比如微處理器、中央處理單元 (CPU)、或類似者。詳言之,處理器901可為複雜指令集計算(CISC)微處理器、精簡指令集計算(RISC)微處理器、非常長指令字組(VLIW)微處理器、或實施其他指令集的處理器、或實施指令集組合的處理器。處理器901也可為一或更多個特殊目的處理器,比如特定應用積體電路(ASIC)、現場可編程閘陣列(FPGA)、數位信號處理器(DSP)、網路處理器、圖形處理器、網路處理器、通訊處理器、加密處理器、共處理器、嵌入式處理器、或能夠處理指令的任何其他類型的邏輯。例如,處理器901可為可從California,Santa Clara的Intel® Corporation獲得之Pentium® 4、Pentium® Dual-Core、CoreTM 2 Duo及Quad、XeonTM 、ItaniumTM 、XScaleTM 、CoreTM i7、CoreTM i5、Celeron® 、或StrongARMTM 微處理器。處理器901組態成執行用於履行本文中所述之運算及步驟的指令。
處理器901可包括指令解碼器,其可接收並解碼各種的指令。解碼器可產生並輸出一或更多微運算、微碼進入點、微指令、其他指令、或其他控制信號,其反映原始輸入指令,或自原始輸入指令導出。可使用各種不同的機制來實現解碼器。適合的機制之範例包括,但不限於,微碼唯讀記憶體(ROM)、查詢表、硬體實作、可編程邏輯陣列(PLA)等等。
解碼器可以並非為處理器901之必要組件。在一或更多其他實施例中,處理器901可取而代之具有指令仿真 器、指令轉譯器、指令變種器(morpher)、指令解譯器、或其他指令轉換邏輯。各種不同類型的指令仿真器、指令變種器、指令轉譯器等等為此技藝中已知。指令轉換邏輯可接收位元範圍隔離指令,仿真、轉譯、變種、解譯、或否則轉換位元範圍隔離指令,並輸出相應於原始位元範圍隔離指令之一或更多指令或控制信號。可在軟體、硬體、韌體、或上述組合中實現指令轉換邏輯。在一些情況中,指令轉換邏輯之一些或全部可與其餘的指令處理設備不同地位在晶粒外(off-die),比如不同的晶粒或在系統記憶體中。在一些情況中,指令處理設備可具有解碼器及指令轉換邏輯兩者。
處理器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可提供至比如裝置903及904之I/O裝置的介面。裝置903及904之任何者可為儲存裝置(如硬碟驅動機、快閃記憶體裝置)、通用序列匯流排(USB)埠、鍵盤、滑鼠、平行埠、序列埠、印表機、網路介面(有線或無線)、無線收發器(如WiFi、藍芽、或蜂巢式收發器)、媒體裝置(如音頻/視頻編解碼器或控制器)、匯流排橋接器(如PCI-PCI橋接器)、或上述之組合。
MCH 910有時稱為北橋且ICH 911有時稱為南橋,雖然有些人對這兩者間會做出技術區分。如在此所用,術語MCH、ICH、北橋、及南橋意在廣泛解釋為涵蓋各種晶片,其之功能包括朝處理器傳遞中斷信號。在一些實施例中,MCH 910可與處理器901整合在一起。在這一種組態中,晶片組902操作為履行MCH 910及ICH 911之某些功能的介面晶片,如第11圖中所示。此外,圖形加速器912可整合於MCH 910或處理器901內。
記憶體905可儲存包括由處理器901或任何其他裝置所執行之指令序列的資料。例如,可將各種操作系統、裝置驅動機、韌體(如輸入輸出基本系統或BIOS)、及/或應用之可執行碼913及/或資料914載入記憶體905中並由處理器901加以執行。操作系統可為任何種類的操作系統,比如,例如,來自Microsoft® 之Windows® 操作系統、來自Apple的Mac OS® /iOS® 、來自Google® 的Android® 、Linux® 、Unix® 、或其他即時操作系統。在一實施例中,記憶體905可包括一或更多個依電性貯存(或記憶體)裝置,比如隨機存取記憶體(RAM)、動態隨機存取記憶體(DRAM)、同步DRAM(SDRAM)、靜態RAM(SRAM)、或其他類型的儲存裝置。也可利用非依電性記憶體,比如硬碟或快閃儲存裝置。前側匯流排(FSB)906可為多點(multi-drop)或點對點互連。術語FSB意在涵蓋至處理器901之各種類型的互連。晶片組902可經由點對點介面與比如裝置903及904之其他裝置通訊。可將匯流排906實施為各種匯流排或互連,比如,例如,快速路徑互連(QPI)、超輸送互連、或與比如AMBA高性能匯流排(AHB)之先進微控制器匯流排架構(AMBA)相容的匯流排。
快取908可為任何種類的處理器快取,比如一階(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‧‧‧混合表
300‧‧‧偽碼
301‧‧‧第一陣列
302‧‧‧第二陣列
303‧‧‧第三陣列
501‧‧‧混洗表
700‧‧‧偽碼
751‧‧‧混洗表
752‧‧‧混合表
900‧‧‧系統
901‧‧‧處理器
902‧‧‧晶片組
903‧‧‧裝置
904‧‧‧裝置
905‧‧‧記憶體
906‧‧‧前側匯流排
908‧‧‧快取
909‧‧‧核心
910‧‧‧記憶體控制集線器
911‧‧‧輸入輸出控制集線器
912‧‧‧圖形裝置
913‧‧‧可執行碼
914‧‧‧資料
舉例而非限制地在附圖的圖式中繪示本發明之實施例,其中類似參考係指類似的元件。
第1圖為繪示根據一實施例之碼最佳化器的區塊圖。
第2圖為繪示根據一實施例之最佳化程式迴路的方法之流程圖。
第3圖為代表典型程式迴路之偽碼。
第4圖為代表根據一實施例的具有先進向量指令之程式迴路的偽碼。
第5圖為繪示根據一實施例之儲存混洗表及遮罩儲存表的資料結構之圖。
第6圖為繪示根據一實施例之用於最佳化程式迴路的方法之流程圖。
第7圖為代表根據另一個實施例的具有先進向量指令之程式迴路的偽碼。
第8圖為繪示根據一實施例之儲存混洗表及混合表的資料結構之圖。
第9圖為繪示根據另一個實施例之用於最佳化程式迴路的方法之流程圖。
第10圖為繪示根據一實施例之資料處理系統的一範例之區塊圖。
第11圖為繪示根據另一個實施例之資料處理系統的一範例之區塊圖。
100‧‧‧系統
101‧‧‧第一碼
102‧‧‧碼最佳化器
103‧‧‧第二碼
104‧‧‧處理器
105‧‧‧混洗表
106‧‧‧遮罩儲存表
107‧‧‧混合表

Claims (20)

  1. 一種電腦實施之方法,包含:接收具有以純量指令實施之程式迴路的第一碼,以基於第三陣列之相應值將第一陣列的值儲存到第二陣列;及使用至少一個向量指令來產生代表該程式迴路之第二碼,該第二碼包括混洗指令,以使用混洗表以向量方式基於該第三陣列之該些相應值混洗該第一陣列之元素,混合指令,以使用混合表以向量方式混合該第一陣列之經混洗的元素,及儲存指令,以儲存該第一陣列之經混合的元素於該第二陣列中。
  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項所述之設備,其中該第二碼進一步包含指令,以儲存該預定臨限值於向量暫存器中,將使用向量比較指令來比較該第一陣列的該些元素與該向量暫存器中所儲存的值。
TW101142637A 2011-12-15 2012-11-15 經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法 TWI502506B (zh)

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
TW201344575A TW201344575A (zh) 2013-11-01
TWI502506B true TWI502506B (zh) 2015-10-01

Family

ID=48613029

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101142637A TWI502506B (zh) 2011-12-15 2012-11-15 經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法

Country Status (4)

Country Link
US (2) US8984499B2 (zh)
CN (1) CN103999045B (zh)
TW (1) TWI502506B (zh)
WO (1) WO2013089750A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
WO2014142972A1 (en) 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US9594696B1 (en) * 2014-12-09 2017-03-14 Parallel Machines Ltd. Systems and methods for automatic generation of parallel data processing code
US10318297B2 (en) * 2015-01-30 2019-06-11 Huawei Technologies Co., Ltd. Method and apparatus for operating a self-timed parallelized multi-core processor
US10459723B2 (en) 2015-07-20 2019-10-29 Qualcomm Incorporated SIMD instructions for multi-stage cube networks
US10019264B2 (en) * 2016-02-24 2018-07-10 Intel Corporation System and method for contextual vectorization of instructions at runtime
US10162603B2 (en) * 2016-09-10 2018-12-25 Sap Se Loading data for iterative evaluation through SIMD registers
KR102659495B1 (ko) 2016-12-02 2024-04-22 삼성전자주식회사 벡터 프로세서 및 그 제어 방법
US10853043B2 (en) * 2018-09-11 2020-12-01 Intel Corporation Methods and apparatus to improve optimizing loops with predictable recurring memory reads
US11126430B2 (en) * 2019-05-11 2021-09-21 Intel Corporation Vector processor for heterogeneous data streams
CN113391813A (zh) * 2020-12-04 2021-09-14 腾讯科技(深圳)有限公司 程序编译方法和装置、存储介质及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604913A (en) * 1993-08-10 1997-02-18 Fujitsu Limited Vector processor having a mask register used for performing nested conditional instructions
US20040054878A1 (en) * 2001-10-29 2004-03-18 Debes Eric L. Method and apparatus for rearranging data between multiple registers
US20100205585A1 (en) * 2009-02-10 2010-08-12 International Business Machines Corporation Fast vector masking algorithm for conditional data selection in simd architectures
US20110029962A1 (en) * 2009-07-28 2011-02-03 International Business Machines Corporation Vectorization of program code
CN101986262A (zh) * 2010-11-25 2011-03-16 中国人民解放军国防科学技术大学 基于模式偏移的混洗开关矩阵压缩方法
CN102053816A (zh) * 2010-11-25 2011-05-11 中国人民解放军国防科学技术大学 具有开关矩阵存储器的数据混洗单元及其混洗方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10228382A (ja) * 1997-02-14 1998-08-25 Nec Corp コンパイル方式
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
JP4077252B2 (ja) * 2002-06-28 2008-04-16 富士通株式会社 コンパイラプログラムおよびコンパイル処理方法
US7532720B2 (en) * 2003-10-15 2009-05-12 Microsoft Corporation Utilizing SIMD instructions within montgomery multiplication
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7802076B2 (en) * 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
US8904155B2 (en) * 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US7856627B2 (en) * 2006-08-08 2010-12-21 International Business Machines Corporation Method of SIMD-ization through data reshaping, padding, and alignment
US8505002B2 (en) * 2006-09-29 2013-08-06 Arm Limited Translation of SIMD instructions in a data processing system
US8191056B2 (en) * 2006-10-13 2012-05-29 International Business Machines Corporation Sparse vectorization without hardware gather/scatter
JP4686435B2 (ja) * 2006-10-27 2011-05-25 株式会社東芝 演算装置
US20120185670A1 (en) * 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
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
CN103946795B (zh) * 2011-12-14 2018-05-15 英特尔公司 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法
US9244677B2 (en) * 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604913A (en) * 1993-08-10 1997-02-18 Fujitsu Limited Vector processor having a mask register used for performing nested conditional instructions
US20040054878A1 (en) * 2001-10-29 2004-03-18 Debes Eric L. Method and apparatus for rearranging data between multiple registers
US20100205585A1 (en) * 2009-02-10 2010-08-12 International Business Machines Corporation Fast vector masking algorithm for conditional data selection in simd architectures
US20110029962A1 (en) * 2009-07-28 2011-02-03 International Business Machines Corporation Vectorization of program code
CN101986262A (zh) * 2010-11-25 2011-03-16 中国人民解放军国防科学技术大学 基于模式偏移的混洗开关矩阵压缩方法
CN102053816A (zh) * 2010-11-25 2011-05-11 中国人民解放军国防科学技术大学 具有开关矩阵存储器的数据混洗单元及其混洗方法

Also Published As

Publication number Publication date
CN103999045B (zh) 2017-05-17
TW201344575A (zh) 2013-11-01
US9886242B2 (en) 2018-02-06
US8984499B2 (en) 2015-03-17
US20130290943A1 (en) 2013-10-31
CN103999045A (zh) 2014-08-20
WO2013089750A1 (en) 2013-06-20
US20150154008A1 (en) 2015-06-04

Similar Documents

Publication Publication Date Title
TWI502506B (zh) 經由使用混洗表及混合表之向量指令以最佳化程式迴路的方法
RU2637463C2 (ru) Команда и логика для обеспечения функциональных возможностей цикла защищенного хеширования с шифром
US9436469B2 (en) Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table
KR102449616B1 (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
JP5986688B2 (ja) Sha256アルゴリズムのメッセージスケジューリングのための命令セット
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
CN107924308B (zh) 数据元素比较处理器、方法、系统和指令
JP6051458B2 (ja) 複数のハッシュ動作を効率的に実行する方法および装置
JP2017097902A (ja) 複数の128ビットデータパスにおけるsha1ラウンド処理のための命令セット
TWI517037B (zh) 用於使用前綴之指令集架構指令的條件式執行支援技術
JP6419205B2 (ja) プロセッサ、方法、システム、コンピュータシステム、およびコンピュータ可読記憶媒体
JP2017529601A (ja) ビットシャッフルプロセッサ、方法、システム、および命令
WO2013095617A1 (en) Apparatus and method for propagating conditionally evaluated values in simd/vector execution
JP6074511B2 (ja) プロセッサ、方法、データプロセッシングシステム、および装置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
KR20170099873A (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
KR20170097628A (ko) 고속 벡터 동적 메모리 충돌 검출
RU2598594C2 (ru) Нечувствительный к задержке буфер транзакции для связи с квитированием
WO2018150218A1 (en) Vector instruction for accumulating and compressing values based on input mask
WO2013095605A1 (en) Apparatus and method for sliding window data gather
US9811338B2 (en) Flag non-modification extension for ISA instructions using prefixes
US20190138303A1 (en) Apparatus and method for vector horizontal logical instruction
KR20170098806A (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
KR20170099864A (ko) 마스크 값을 압축하기 위한 방법 및 장치

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees