[go: up one dir, main page]

TWI490783B - 包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術 - Google Patents

包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術 Download PDF

Info

Publication number
TWI490783B
TWI490783B TW101111469A TW101111469A TWI490783B TW I490783 B TWI490783 B TW I490783B TW 101111469 A TW101111469 A TW 101111469A TW 101111469 A TW101111469 A TW 101111469A TW I490783 B TWI490783 B TW I490783B
Authority
TW
Taiwan
Prior art keywords
function
scalar
vectorized
called party
version
Prior art date
Application number
TW101111469A
Other languages
English (en)
Other versions
TW201303730A (zh
Inventor
Xinmin Tian
Hideki Saito
Sergey Stanislavovich Kozhukhov
Milind Baburao Girkar
Serge Victorovich Preis
Aleksei Gurievich Cherkasov
Robert Yehuda Geva
Nikolay Vladimirovich Panchenko
Konstantin Anatolyevich Pjvoy
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 TW201303730A publication Critical patent/TW201303730A/zh
Application granted granted Critical
Publication of TWI490783B publication Critical patent/TWI490783B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術 發明領域
本文揭示之實施例係有關於資料處理領域,更明確言之,係有關於與純量函式之向量化相聯結的方法、設備及物品,包括向量化註釋及向量化函式記號的產生及匹配。實施例也可包括程序間分析。
發明背景
除非於此處另行指示,否則於發明背景章節描述的內容並非本案所請求專利之先前技術且非藉含括於背景章節而承認其乃先前技術。
隨著電子、積體電路、計算及網路技術的進步,應用用途諸如但非限於多媒體應用或科學計算已經變得更加計算密集。向量計算或單一指令多重資料(SIMD)計算通常提供優於純量計算的改良執行效能。因此,計算密集應用之純量函式的向量化許可藉此等計算密集應用增加探索由向量計算或SIMD計算所提供的並行性。
依據本發明之一實施例,係特地提出一種方法包含在一計算裝置上,接收一要求而以一純量被呼叫方函式及向量化註釋來編譯一第一程式;及在該計算裝置上,回應於該要求而編譯該第一程式;其中編譯該第一程式係包括至少部分基於該等向量化註釋而產生該純量被呼叫方函式的 一或多個向量化版本,及產生分別地與該純量被呼叫方函式的一或多個向量化版本相聯結的一或多個向量化函式記號;及其中該等一或多個向量化函式記號係經組配來使得針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,允許該純量被呼叫方函式的一或多個向量化版本中之一合宜者待被匹配且被調用。
圖式簡單說明
本文揭示之實施例將藉具體實施例呈示但非限制性,該等實施例係於附圖中例示說明,其中類似的元件符號表示相似的元件,及附圖中:第1圖顯示依據本文揭示之各個實施例純量函式之向量化之綜論;第2圖顯示依據本文揭示之各個實施例經組配來實施純量函式之向量化的第1圖之編譯器;第3圖顯示依據本文揭示之各個實施例向量化純量函式之方法;第4圖顯示依據本文揭示之各個實施例之一經向量化之函式記號;第5圖顯示依據本文揭示之各個實施例適用以實施純量函式之向量化之電腦系統實例;及第6圖顯示依據本文揭示之各個實施例經組配來使得一設備實施純量函式之向量化的具有程式規劃指令之一製造物品。
詳細說明
此處揭示與純量函式之向量化相聯結的方法及設備。於各個實施例中,在一計算裝置上編譯第一程式可包括在該計算裝置上,至少部分基於該第一程式之向量化註釋而產生該第一程式之純量被呼叫方函式的一或多個向量化版本。此外,編譯可包括在該計算裝置上,產生分別地與該純量被呼叫方函式的一或多個向量化版本相聯結的一或多個向量化函式記號。該等一或多個向量化函式記號可使得針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,允許該純量被呼叫方函式的一或多個向量化版本中之一合宜者待被匹配且被調用。
於各個實施例中,編譯該被呼叫方函式可進一步包括:在該計算裝置上,產生該等第一及第二程式之一呼叫圖形或一執行輪廓;至少部分基於該呼叫圖形或該執行輪廓而執行該等第一及第二程式之程序間分析;及至少部分基於該程序間分析之一結果,將該等向量化註釋中之一或多者插入該第一程式內。此外,執行程序間分析可包括分析該呼叫方函式與該被呼叫方函式間之條件呼叫或遞歸呼叫,及該純量被呼叫方函式之結構及多維記憶體存取。
於各個實施例中,向量化註釋可包括下列註釋中之一或多者:一處理器註釋其指示待靶定的該經編譯之純量被呼叫方函式之一處理器型別或架構、一向量長度註釋其指示針對該純量被呼叫方函式的一向量化版本之一向量長度、一元件大小註釋其指示針對該純量被呼叫方函式的一 向量化版本用以界定一向量長度之一元件大小、一線性參數註釋其指示針對該純量被呼叫方函式的一向量化版本之串列調用的一階級大小、一純量參數註釋其指示待對該純量被呼叫方函式的一向量化版本的全部執行迭代重複廣播之一純量參數之一值、一遮罩或無遮罩註釋其指示該純量被呼叫方函式的一向量化版本是否待被遮罩或不被遮罩、或一純量函式註釋其指示一使用者界定的函式係為該純量被呼叫方函式之一特定向量情況。
於各個實施例中,產生該純量被呼叫方函式的一或多個向量化版本可包括回應於該純量被呼叫方函式之條件呼叫或遞歸呼叫的決定而產生該純量被呼叫方函式的一經遮罩之向量化版本,及/或將一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換。又,產生該純量被呼叫方函式的一經遮罩之向量化版本可包括產生環繞該純量被呼叫方函式之一函式主體的一條件執行構造來提供給該函式主體之條件執行。此外,將一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換可包括將與該純量被呼叫方函式相聯結的結構之陣列的記憶體存取變換成陣列之結構的記憶體存取;將與該純量被呼叫方函式相聯結的陣列之結構的記憶體存取變換成結構之陣列的記憶體存取;修正一陣列之一形狀或重新配置與該純量被呼叫方函式相聯結的陣列記憶體存取;採用跨幅負載或儲存操作來處置非單位跨幅或不規則記憶體存取;採用聚集或分散硬體支援來處置與該純量被呼叫方函 式相聯結的非單位跨幅或不規則記憶體存取;及/或擴延與該純量被呼叫方函式相聯結的一結構。
於各個實施例中,產生一向量化函式記號可包括產生一向量化函式記號,該記號係包括該純量被呼叫方函式的該相對應向量化版本之一靶定處理器識別符、一經遮罩的或無遮罩的指標、一向量長度、或一線性階級大小、一向量化函式記號其係包括該純量被呼叫方函式之一原先名稱或一單一指令多重資料(SIMD)前綴符。該靶定處理器識別符可識別該純量被呼叫方函式的該相對應向量化版本之一標靶處理器型別或架構。該經遮罩的或無遮罩的指標可指示該純量被呼叫方函式的該相對應向量化版本是否經遮罩的或無遮罩。該向量長度指示該純量被呼叫方函式的該相對應向量化版本之一向量之一長度。該線性階級大小可指示針對該純量被呼叫方函式的該相對應向量化版本之串列調用之一階級大小。
於各個實施例中,一種方法可進一步包括在一計算裝置上,與該第一程式之編碼獨立無關地,回應於編譯該第二程式之一要求而編譯該第二程式。此外,編譯該第二程式可包括以對該純量被呼叫方函式的一向量化版本之一泛型呼叫置換計呼叫方函式呼叫該純量被呼叫方函式之一呼叫。
現在將使用熟諳技藝人士常見採用的術語進一步描述具體實施例之多個構面來傳遞其研究工作內容給技藝界其它人士。但對熟諳技藝人士而言顯然易知可只使用所述構 面之部分而實施其它實施例。為了用於解釋目的,陳述特定數目、材料、及組態以供徹底瞭解該等具體實施例。但對熟諳技藝人士而言顯然易知可無此等特定細節而實施其它實施例。於其它情況下,刪除或簡化眾所周知之特徵以免遮掩該等具體實施例。
又復,各項操作將依序以最有助於瞭解該等具體實施例之方式描述為多項分開操作;但描述的順序不應解譯為暗示此等操作必然為順序相依性。更明確言之,此等操作無需以所呈示的順序執行。以括弧插入格式描述的特徵表示該特徵為選擇性特徵,例如「應用程式服務(之區劃)之情況」表示該應用程式服務可以經或可未經「區劃」。
「於一個實施例中」一詞在此處係重複使用。該詞通常並非指同一個實施例;但也可以是同一個實施例。除非上下文另行指示,否則「包含」、「具有」及「包括」等術語為同義詞。「A/B」一詞表示「A或B」。「A及/或B」一詞表示「(A)、(B)、或(A及B)」。「A、B及C中之至少一者」一詞表示「(A)、(B)、(C)、(A及B)、(A及C)、(B及C)或(A、B及C)」。「(A)B」一詞表示「(B)、或(AB)」,換言之,A為選擇性。
第1圖例示說明依據本文揭示之各個實施例純量函式之向量化之綜論。如圖所示,結合本文揭示之向量化教示的編譯器102可包括向量化註釋之支援103、向量化函式記號之支援104、及程序間分析之支援105。容後詳述,編譯器102可採用在一計算裝置(圖中未顯示)上編碼程式A 112 及程式B 132。如圖所示,程式B 132可包括一或多個純量被呼叫方函式142,而程式A 112可包括具有對純量被呼叫方函式142的呼叫之一或多個呼叫方函式122。程式A 112及程式B 132可進一步包括向量化註釋124及144來於編譯期間指導編譯器102向量化來自呼叫方函式122對純量被呼叫方函式142的呼叫。向量化註釋124及144可藉程式A 112及程式B 132之程式規劃師或藉編譯器102而插入程式A 112及程式B 132內。
於各個實施例中,編譯器102可回應於編碼程式A 112及程式B 132之一要求或個別要求而編譯程式A 112及程式B 132。換言之,於實施例中,程式A 112及程式B 132可一起或分開地編譯。於各個實施例中,程式B 132之編譯可包括在該計算裝置上,至少部分基於向量化註釋144而產生該純量被呼叫方函式142的一或多個向量化版本146。又,程式B 132之編譯可包括在該計算裝置上,產生分別地與該純量被呼叫方函式142的一或多個向量化版本146相聯結的一或多個向量化函式記號148。該等一或多個向量化函式記號148可使得針對從一呼叫方函式126對該純量被呼叫方函式142的一向量化版本146的一泛型呼叫,允許該純量被呼叫方函式142的一個合宜向量化版本146待被匹配且被調用。
於各個實施例中,程式B 132之編譯可進一步包括在該計算裝置上,產生程式A及B 112及132的呼叫圖形152或執行輪廓154,至少部分基於呼叫圖形152及執行輪廓154而執行程式A及B 112及132的程序間分析,及至少部分基於程序 間分析結果而將向量化註釋124及144中之一或多者插入程式A及B 112及132內。程序間分析可包括分析該呼叫方與該被呼叫方函式122及142間之條件呼叫或遞歸呼叫,及識別該純量被呼叫方函式142之結構及多維記憶體存取。
於各個實施例中,產生純量被呼叫方函式142之一或多個向量化版本146可包括於該程序間分析期間,回應於純量被呼叫方函式142之條件呼叫或遞歸呼叫的決定而產生一純量被呼叫方函式142之一經遮罩的向量化版本146。又,產生純量被呼叫方函式142之一或多個向量化版本146可包括於程序間最佳化期間,將純量被呼叫方函式142之一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換。
於各個實施例中,呼叫圖形152、執行輪廓154、純量被呼叫方函式142之向量化版本146、及該向量化版本146之向量化函式記號148可儲存在儲存裝置150上,可定位在採用來操作編譯器102之計算裝置上或遠端設置。
編譯器102之此等及其它構面及程式A及B 112及132之編譯包括該呼叫方與該被呼叫方函式122及142之編譯係將容後詳述。
第2圖例示說明依據本文揭示之各個實施例經組配來實施純量函式之向量化的第1圖之編譯器102。如圖所示,針對該等實施例,編譯器102可包括一剖析器/符記化器區段202、一分析器區段204、一代碼產生器區段206、及一最佳化器區段208。又,編譯器102可經組配來支援標稱/非最 佳化或最佳化編譯。標稱/非最佳化編譯可採用來建立正在編譯的程式A及B 112及132之一呼叫圖形152及/或一執行輪廓154。此種呼叫圖形152及/或執行輪廓154可採用於例如程式A及B 112及132之程序間分析。
剖析器/符記化器區段202可經組配以邏輯212來剖析及/或符記化程式A及B 112及132的來源代碼,包括呼叫方與被呼叫方函式122及142。更明確言之,剖析器/符記化器區段202可經組配以邏輯214來剖析及/或符記化程式A及B 112及132的向量化註釋124及144。分析器204可經組配以邏輯216來分析程式A及B 112及132,包括正在被編譯的呼叫方與被呼叫方函式122及142。更明確言之,分析器204可經組配以邏輯218來支援標稱/非最佳化編譯,及驅動正在被編譯的程式A及B 112及132之呼叫圖形152及/或執行輪廓154的產生。又,分析器204可經組配以邏輯220來支援正在被編譯的程式A及B 112及132之程序間分析。更明確言之,邏輯220可包括邏輯222來決定呼叫方與被呼叫方函式122及142間之條件呼叫及/或遞歸呼叫,及/或邏輯224來識別藉純量被呼叫方函式142的結構及多維陣列存取。
代碼產生器206可經組配以邏輯226,邏輯226係經組配來基於藉分析器204執行分析的結果而針對一或多個目標執行環境產生程式A及B 112及132之可執行代碼。最佳化器208可經組配以邏輯228來最佳化由代碼產生器206所產生的可執行代碼。更明確言之,邏輯228可包括邏輯230來向量化純量被呼叫方函式142,產生向量化版本146及其個別 記號148,如先前所述,及邏輯234來執行程序間最佳化。於實施例中,邏輯230可包括邏輯232來產生純量被呼叫方函式142之向量化版本146的經遮罩版本。邏輯234可包括邏輯236來將純量被呼叫方函式142之結構及多維陣列記憶體存取變換成單位跨幅記憶體存取。
第3圖例示說明依據本文揭示之各個實施例向量化純量函式之方法。如圖所示,該方法可始於方塊302,於該處程式B 132可使用編譯器102在例如標稱/非最佳化選項下編譯,及若適用時執行分析來產生程式B 132之呼叫圖形152及/或執行輪廓154。更明確言之,純量被呼叫方函式142可經分析,及有關其向量化註釋144的資訊可經收集,包括若屬適宜,藉編譯器102將向量化註釋144插入正在被編譯的程式B 132。如前文描述,分析可包括結合程式A 112的程序間分析。如前文描述,呼叫圖形152、執行輪廓154及向量化註釋144可儲存於儲存裝置150。
從方塊302方法可前進至方塊304。於方塊304,編譯器102可產生純量被呼叫方函式142之一或多個向量化版本146,及其個別向量化函式記號148。如前文描述,純量被呼叫方函式142之一或多個向量化版本146的產生至少部分可植基於向量化註釋144及程序間分析之結果。又,純量被呼叫方函式142之一或多個向量化版本146的產生可包括程序間最佳化。
其後,從方塊304方法可前進至方塊306及然後至方塊308,於該處可執行習知迴圈最佳化及/或迴圈向量化/並行 化方塊306以及純量最佳化308。
回頭參考方塊302,於各個實施例中,向量化註釋124及144可包括下列註釋中之一或多者:處理器註釋processor(cpuid),其指示待靶定該已編譯被呼叫方函式142之一處理器型別或架構;向量長度註釋vectorlength(num),其指示針對該純量被呼叫方函式的一向量化版本之一向量長度;元件大小註釋elementsizeof(type),其指示針對該純量被呼叫方函式的一向量化版本用以界定一向量長度之一元件大小;線性參數註釋linear(param1\step1,param2\step2,...,paramN\stepN),其指示針對該純量被呼叫方函式的一向量化版本的串列調用之階級大小;純量參數註釋scalar(param1,param2,...,paramN),其指示待廣播給該純量被呼叫方函式的一向量化版本的全部執行迭代重複之一純量參數值;遮罩或無遮罩註釋mask or nomask,其指示該純量被呼叫方函式的一向量化版本是否待經遮罩的或無遮罩;或純量函式註釋scalar_function(scalar_function_declarator),其指示經使用者界定之函式為該純量被呼叫方函式之特定向量情況。
更明確言之,於各個實施例中,processor(cpuid)可指導編譯器102針對由cpuid所識別的處理器型別或架構而產生純量被呼叫方函式142之向量化版本146。又,內設處理器可於編譯器102之指令行而從暗示或明確特定處理器或特定架構旗標執掌。於各個實施例中,vectorlength(num)可指導編譯器102使用等於num的向量長度(VL)。此外,內 設向量長度可從目標處理器的向量暫存器及回送值大小(或第一向量參數,若回送型別為空位)計算。舉例言之,若目標處理器以XMM暫存器(由英特爾公司(Intel Corporation)開發)支援串流化SIMD擴延(SSE),及純量被呼叫方函式142之回送型別為int,則內設向量長度可以是4。至於又一實例,若目標處理器支援進階向量擴延(AVX)(也由英特爾公司開發),若純量被呼叫方函式142之回送型別為int或double,則內設向量長度可以是4;若純量被呼叫方函式142之回送型別為float,則內設向量長度可以是8。於各個實施例中,向量長度可以是文字串「big」,其指導編譯器102產生純量被呼叫方函式142的「long-vector」版本。純量被呼叫方函式142的「big」版本可具有自變數,該等自變數為緊密參數值陣列及緊密回送值陣列的指標,而非具有傳送/回送在暫存器的向量值。又,呼叫方參數及回送值儲存裝置並非緊密,則取而代之可呼叫純量被呼叫方函式142的向量、純量或短向量版本。
於各個實施例中,elementsizeof(type)可指示編譯器102使用特定型別來界定向量長度。針對此等實施例,向量長度可定義為SIMD向量暫存器之大小(暗示地載明於處理器條款或於指令行)除以載明於條款的資料型別大小的結果。elementsizeof(type)註釋可以作為vectorlength(num)註釋的替代方案。使用elementsizeof(type)註釋可允許針對具有不同大小SIMD暫存器的處理器,或針對具有相似命名資料型別(例如Windows-64及Linux-64上的long)之不同大小的 不同應用程式二進制介面(ABI)具有可攜式代碼。
於各個實施例中,linear(param1\step1,param2\step2,...,paramN\stepN)可告知編譯器102以分別地藉step1,step2,...,stepN遞增的param1,param2,...,paramN之值,在串列執行中連續調用純量被呼叫方函式142。又,若向量長度係作為「big」,則線性註釋的使用為不容許或變成空位。於各個實施例中,scalar(param1,param2,...,paramN)可告知編譯器102載明參數值可廣播給全部迭代重複作為效能最佳化。
於各個實施例中,mask可指示編譯器102只產生純量被呼叫方函式142的經遮罩向量化版本146。當確定純量被呼叫方函式142係經常性地條件呼叫時,可使用向量化註釋於代碼大小最佳化。於各個實施例中,nomask可指示編譯器102只產生該函式的無遮罩向量版本。當確定純量被呼叫方函式142係經常性地無條件呼叫時,可使用向量化註釋於代碼大小最佳化。
於各個實施例中,scalar_function(scalar_function_declarator)可告知編譯器102特化的經使用者界定之函式乃純量被呼叫方函式142的特定向量化情況146。當向量化版本146係自發產生時,次常式名稱可改變來符合次常式名稱規範。此種向量化註釋可允許程式設計師寫他/她本人的特化向量版本。
仍然參考方塊302,於各個實施例中,基於向量化註釋之程序間分析的主要目的係為了分析呼叫圖形152及識別在向量脈絡下可執行的純量被呼叫方函式142,然後分析純 量被呼叫方函式142來證實純量被呼叫方函式142確實為合法於向量脈絡中執行。舉個實例,考慮下述程式實例
於本實例中,函式「fib」在主函式內部之一迴圈被呼叫,因「fib」乃遞歸函式,因此即便當發生函式串列擴延時,函式「fib」仍然係存在於呼叫方。因此較佳地編譯器102可識別是否:●函式「fib」乃在向量脈絡下需要被向量化與執行的函式,亦即針對本實例主函式中之該迴圈,●函式「fib」乃在向量脈絡下需要被合法呼叫之一函式,亦即fib在呼叫方位置並未導入任何辭彙回溯相依性,及●函式「fib」可被呼叫與否。
因具有呼叫方函式及被呼叫方函式142的程式可在不同檔案(或編譯單元),因此於各個實施例中,編譯器102可經組配來執行程序間分析來分析呼叫圖形152及程式而決定藉前述實例所例示說明之問題。於各個實施例中,可採用熱切函式向量化辦法,例如每當編譯器102編譯一純量被 呼叫方函式142,編譯器102可經組配來產生「向量」註釋,只要為合法可被向量化即可。於其它實施例中,可採用懶散函式向量化辦法,例如每當編譯器102因迴圈內部的函式呼叫而未能向量化一迴圈時,編譯器102可經組配來觸發函式註釋階段。各個辦法有其利弊得失。於各個實施例中,可採用混成辦法,例如若純量被呼叫方函式為小型純量被呼叫方函式,則採用「熱切」辦法;但若純量被呼叫方函式為相對大型純量被呼叫方函式,則採用「懶散」辦法。因此,若屬期望可達成就編譯時間與代碼大小間的合理折衷。
現在參考方塊304,產生純量被呼叫方函式142之經遮罩的向量化版本146可包括產生環繞純量被呼叫方函式142之函式主體的一條件執行構造來提供函式主體的條件執行。於各個實施例中,條件執行構造可包括導入布林變數mask用於執行條件測試。考慮下述實例,於該處顯示於欄[A]的原先函式可以如欄[C]所示遮罩及經遮罩本體向量化。中間經遮罩本體係顯示於欄[B]。
於前述實例中,於以英特爾(R)SSE 128-位元指令向量化之情況下,於得自欄(C)之具有遮罩的向量化函式本體可類似欄(D)所示假代碼。又,若具有呼叫方函式之程式具有串列迴圈,其於迴圈情況下包括函式呼叫如欄(E)所示,則向量化可以針對陣列c產生vector_mask之方式執行,呼叫函式foo之向量版本,及masked_vector_store給陣列vector_a,其實際上為a[i:i+vector_length]如欄(F)所示。
仍然參考方塊304,將一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換可包括不同方法之混合策略,將與該純量被呼叫方函式相聯結的結構之陣列的記憶體存取變換成陣列之結構的記憶體存取;將與該純量被呼叫方函式相聯結的陣列之結構的記憶體存取變換成結構之陣列的記憶體存取;修正一陣列之一形狀或重新配置與該純量被呼叫方函式相聯結的陣列記憶體存取;採用跨幅負載或儲存操作來處置非單位跨幅或不規則記憶體存取;採用聚集或分散硬體支援來處置與該純量被呼叫方函式相聯結的非單位跨幅或不規則記憶體存取;及/或擴延與該純量被呼叫方函式相聯結的一結構。各種方法涵蓋某些代碼及資料結構,及該等方法於SIMD硬體支援上有不同的編譯時間成本及要求。於各個實施例中,編譯器102可經組配來體現統一方案,如下欄(G)所示而處置不同情況。
一般而言,由於方法A(情況AOS)要求通用程式分析來將資料結構從AOS轉成SOA,及於稱作為原先「結構」的全部位置以有意義方式程式規劃結構(例如g[i]→m至g→m[i]),方法A可具有有限的應用性及使用範圍及較高的編譯時間成本。因此,於各個實施例中,編譯器102可經組配來基於通用程式分析及變換來執行程序間分析而潛在地達成更高最佳化位準。於各個實施例中,針對較低最佳化位準,編譯器102可經組配來只施加本地分析來判定AOS對SOA變換之合法性,及若合法性的決定不合格,則可調用 方法C。如下於欄(H)及(I)所示實例例示說明藉方法C及方法D所產生的代碼。方法D(情況SOS)可經調用來擴延「p」其為結構之純量(SOS)成為AOS「vector_p[VL]」(或可擴延成為SOA,亦即「p」之欄位可被擴延成為vector_x[VL]、vector_y[VL]),於該處VL表示向量長度。「vector_gather」及「vector_scatter」可以硬體strided_load/strided_store指令或硬體vgather/vscatter指令而在具有AVX架構之處理器上體現。
現在也參考第4圖,於各個實施例中,於方塊304產生向量化函式記號148可包括產生向量化函式記號146其包括一靶定處理器識別符406、一經遮罩的或無遮罩的指標410、一向量長度408、純量被呼叫方函式142之相對應向量化版本146之一線性階級大小412、純量被呼叫方函式142之一原先名稱402、及/或一單一指令多重資料(SIMD)前綴符404。靶定處理器識別符406可識別純量被呼叫方函式142之相對應向量化版本146之一目標處理器型別或架構。經遮罩的或無遮罩的指標410可指示純量被呼叫方函式142之相對 應向量化版本146是否為經遮罩或未經遮罩。向量長度408指示純量被呼叫方函式142之相對應向量化版本146之一向量之長度。線性階級大小412可指示純量被呼叫方函式142之相對應向量化版本146的串列調用之階級大小。
以針對純量函式「set_b」之兩個向量化註釋(declspec)考慮下述實例。於各個實施例中,編譯器102可經組配來產生基於純量函式「set_b」的兩個向量化版本,一者為處理器「Atom」之純量函式的向量化版本,及另一者為處理器目標「Core_i7_sse4_2」之純量函式的另一向量化版本。
如所述,除了產生純量被呼叫方函式之不同版本外,編譯器102可經組配來也產生以所述向量化函式記號148編碼的相對應函式名稱。針對本實例,向量化函式記號148可以為如下所述:_set_b._simdsimd_B4m_ll_sl針對Atom處理器註釋
_set_b._simdsimd_H4n_ll_sl針對Core_i7_sse4_2處理器註釋
於該處「set_b」為原先名稱,「simdsimd」為純量函式之向量化版本之前綴符,「B」指示Atom處理器目標,「H」指示Core-i7處理器目標,「4」指示向量長度,「m」指示經 遮罩版本之向量化版本,「n」指示該向量化版本為未經遮罩版本,「ll」指示線性(k:l),及「sl」指示純量(x)。
如前文描述,向量化函式記號許可編譯器102藉使用函式原型或標頭檔案來通訊函式註釋資訊,於不同檔案或編譯單元分開地編譯程式A及B 112及132。編譯器102可電子簽章匹配同時在呼叫方位置產生向量化代碼。除了在編譯期間針對純量被呼叫方函式142之各個向量化版本146產生一向量化函式記號148,編譯器102也可經組配來基於向量化函式記號148產生各個純量被呼叫方函式142之函式本體具有獨一無二切碎函式名稱。函式參數及回送結果可經變換來配合目標架構,函式參數之向量寬度可從參數的純量型別及其向量性質線性及純量(不變量)參數包括記憶體位址推衍出,可要求多個向量暫存器來表示一個參數傳送為在呼叫方端組成的向量值,或傳送為純量值。
因此,於各個實施例中,一種方法可進一步包括在一計算裝置上,回應於要求編碼程式A 112,與程式B 132之編譯獨立無關地編譯程式A 112。此外,編譯程式A 112可包括以對純量被呼叫方函式142之向量化版本146之一泛型呼叫126來置換來自程式A 112之一呼叫方函式呼叫純量被呼叫方函式142之一呼叫122。
第5圖例示說明依據本文揭示之各個實施例適用於實施純量函式之向量化的電腦系統實例。如圖所示,計算系統500包括多個處理器或處理器核心502及系統記憶體504。用於本案包括申請專利範圍之目的,除非上下文明確 地另行要求否則「處理器」及「處理器核心」等詞可視為同義詞。於實施例中,處理器502可以是具有SIMD暫存器之SIMD處理器。此外,計算系統500包括大容量儲存裝置506(諸如軟碟、硬碟、光碟-唯讀記憶體(CD-ROM)等)、輸出入裝置508(諸如顯示器、鍵盤、游標控制器等)及通訊介面510(諸如網路介面卡、數據機等)。該等元件係透過表示一或多個匯流排的系統匯流排512而彼此耦接。於多個匯流排之情況下,匯流排係藉一或多個匯流排橋接器(圖中未顯示)而橋接。
此等元件各自執行技藝界已知之習知功能。更明確言之,系統記憶體504及大容量儲存裝置506可採用來儲存體現編譯器102及相關常式,此處集合標示為522之該等程式規劃指令的工作拷貝及持久拷貝。編譯器及相關常式522之各個組件可藉由處理器502或可編譯成此等指令的高階語言諸如C語言所支援之組譯器指令而予體現。
程式規劃指令之持久拷貝可在工廠或在現場透過例如分配媒體(圖中未顯示),諸如光碟(CD)、或透過通訊介面510(來自分配伺服器(圖中未顯示))而安置於持久性儲存裝置506。換言之,具有代理器程式體現的一或多個分配媒體可經採用來分配該代理器,及程式規劃各個計算裝置。大容量儲存裝置506也可用作為第1圖之儲存裝置150。
此等元件502-512之組成為已知,因而不再進一步描述。
第6圖例示說明依據本文揭示之各個實施例經組配來 使得一設備實施純量函式之向量化的具有程式規劃指令之一製造物品。如圖所示,製造物品600可包括電腦可讀取非過渡儲存媒體602。儲存媒體602可包括經組配來體現第1圖之編譯器102的程式規劃指令604。
儲存媒體602表示技藝界已知之一寬廣範圍的持久性儲存媒體,包含但非限於快閃記憶體、光碟或磁碟。更明確言之,程式規劃指令604可使得一設備回應於藉該設備之執行而執行多項操作包括:接收一要求而以一純量被呼叫方函式及向量化註釋來編譯一第一程式,及回應於該要求而編譯該第一程式,其中編譯該第一程式係包括至少部分基於該等向量化註釋而產生該純量被呼叫方函式的一或多個向量化版本,及產生分別地與該純量被呼叫方函式的一或多個向量化版本相聯結的一或多個向量化函式記號,及其中該等一或多個向量化函式記號係經組配來使得針對一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,允許該純量被呼叫方函式的一或多個向量化版本中之一合宜者待被匹配且被調用。
雖然此處已經例示說明及描述特定實施例,但熟諳技藝人士顯然易知寬廣多種替代及/或相當實施例可取代所示及所述的特定實施例,而未背離本發明之實施例之範圍。本案意圖涵蓋如此處討論之實施例之任一種適應或變 化。因此,毫無疑義地意圖本發明之實施例只受申請專利範圍及其相當範圍所限。
102‧‧‧編譯器
103、104、105‧‧‧支援
112‧‧‧程式A
114‧‧‧已編譯之程式A
122、126‧‧‧呼叫方函式
124、144‧‧‧向量化註釋
132‧‧‧程式B
134‧‧‧已經譯之程式B
142‧‧‧純量被呼叫方函式
146‧‧‧向量化版本
148‧‧‧向量化函式記號
150‧‧‧儲存裝置
152‧‧‧呼叫圖形
154‧‧‧執行輪廓
202‧‧‧剖析器/符記化器
204‧‧‧分析器
206‧‧‧代碼產生器
208‧‧‧最佳化器
212-236‧‧‧邏輯
300‧‧‧方法
302-308‧‧‧方塊
402‧‧‧原先名稱
404‧‧‧SIMD前綴符
406‧‧‧靶定處理器識別符
408‧‧‧向量長度
410‧‧‧經遮罩的或無遮罩的指標
412‧‧‧線性階級大小
500‧‧‧計算系統
502‧‧‧處理器
504‧‧‧記憶體
506‧‧‧大容量儲存裝置
508‧‧‧I/O裝置
510‧‧‧通訊介面
512‧‧‧系統匯流排
522‧‧‧編譯器等相關常式
600‧‧‧製造物品
602‧‧‧儲存媒體
604‧‧‧程式規劃指令
第1圖顯示依據本文揭示之各個實施例純量函式之向量化之綜論;第2圖顯示依據本文揭示之各個實施例經組配來實施純量函式之向量化的第1圖之編譯器;第3圖顯示依據本文揭示之各個實施例向量化純量函式之方法;第4圖顯示依據本文揭示之各個實施例之一經向量化之函式記號;第5圖顯示依據本文揭示之各個實施例適用以實施純量函式之向量化之電腦系統實例;及第6圖顯示依據本文揭示之各個實施例經組配來使得一設備實施純量函式之向量化的具有程式規劃指令之一製造物品。
102‧‧‧編譯器
103、104、105‧‧‧支援
112‧‧‧程式A
114‧‧‧已編譯之程式A
122、126‧‧‧呼叫方函式
124、144‧‧‧向量化註釋
132‧‧‧程式B
134‧‧‧已編譯之程式B
142‧‧‧純量被呼叫方函式
146‧‧‧向量化版本
148‧‧‧向量化函式記號
150‧‧‧儲存裝置
152‧‧‧呼叫圖形
154‧‧‧執行輪廓

Claims (17)

  1. 一種方法,其包含:在一計算裝置上,接收要編譯具一純量被呼叫方函式及向量化註釋的一第一程式之一要求;及在該計算裝置上,回應於該要求而編譯該第一程式;其中編譯該第一程式包括至少部分基於該等向量化註釋而產生該純量被呼叫方函式的一或多個向量化版本,及產生分別地與該純量被呼叫方函式的該等一或多個向量化版本相聯結的一或多個向量化函式記號;及其中該等一或多個向量化函式記號係經組配來針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,使得該純量被呼叫方函式的該等一或多個向量化版本可以被匹配且被選擇性地調用。
  2. 如申請專利範圍第1項之方法,其進一步包含在該計算裝置上,產生該等第一及第二程式之一呼叫圖形或一執行輪廓;在該計算裝置上,至少部分基於該呼叫圖形及該執行輪廓而執行該等第一及第二程式之程序間分析;及在該計算裝置上,至少部分基於該程序間分析之一結果,而將該等向量化註釋中之一或多者插入該第一程式內。
  3. 如申請專利範圍第2項之方法,其中執行程序間分析包 含分析該呼叫方函式與該被呼叫方函式間之條件呼叫或遞歸呼叫,或該純量被呼叫方函式之結構及多維記憶體存取。
  4. 如申請專利範圍第1項之方法,其中該等向量化註釋包含下列註釋中之一或多者:一處理器註釋,其指示待靶定的該經編譯之純量被呼叫方函式之一處理器型別或架構、一向量長度註釋,其指示針對該純量被呼叫方函式的一向量化版本之一向量長度、一元件大小註釋其指示用以界定針對該純量被呼叫方函式的一向量化版本的一向量長度之一元件大小、一線性參數註釋,其指示針對該純量被呼叫方函式的一向量化版本之串列調用的一階級大小、一純量參數註釋,其指示待被廣播至該純量被呼叫方函式的一向量化版本的全部執行迭代之一純量參數的一值、一遮罩或無遮罩註釋,其指示該純量被呼叫方函式的一向量化版本是否將被遮罩或不被遮罩、或一純量函式註釋,其指示一使用者界定的函式係為該純量被呼叫方函式之一特定向量情況。
  5. 如申請專利範圍第1項之方法,其中產生該純量被呼叫方函式的一或多個向量化版本包含回應於該純量被呼叫方函式之條件呼叫或遞歸呼叫的決定,而產生該純量被呼叫方函式的一經遮罩之向量化版本。
  6. 如申請專利範圍第5項之方法,其中產生該純量被呼叫方函式的一經遮罩之向量化版本包含產生環繞該純量被呼叫方函式之一函式主體的一條件執行構造來提供 給該函式主體之條件執行。
  7. 如申請專利範圍第1項之方法,其中產生該純量被呼叫方函式的一向量化版本包含將一或多個結構或多維陣列記憶體存取變換成一或多個單位跨幅記憶體存取。
  8. 如申請專利範圍第7項之方法,其中將一或多個結構或多維陣列記憶體存取變換成一或多個單位跨幅記憶體存取包含將與該純量被呼叫方函式相聯結的結構之陣列的記憶體存取變換成陣列之結構的記憶體存取;將與該純量被呼叫方函式相聯結的陣列之結構的記憶體存取變換成結構之陣列之記憶體存取;修正一陣列之一形狀或重新配置與該純量被呼叫方函式相聯結的陣列記憶體存取;採用跨幅負載或儲存操作來處置非單位跨幅或不規則記憶體存取;採用聚集或分散的硬體支援來處置與該純量被呼叫方函式相聯結的非單位跨幅或不規則記憶體存取;或擴延與該純量被呼叫方函式相聯結的一結構。
  9. 如申請專利範圍第1項之方法,其中產生一向量化函式記號包含產生包括該純量被呼叫方函式的該相對應向量化版本之一靶定處理器識別符、一經遮罩的或無遮罩的指標、一向量長度、或一線性階級大小之一向量化函式記號;其中該靶定處理器識別符識別該純量被呼叫方函 式的該相對應向量化版本之一標靶處理器型別或架構,該經遮罩的或無遮罩的指標指示該純量被呼叫方函式的該相對應向量化版本是否係經遮罩的或無遮罩,該向量長度指示該純量被呼叫方函式的該相對應向量化版本之一向量的一長度,及該線性階級大小指示針對該純量被呼叫方函式的該相對應向量化版本之串列調用之一階級大小。
  10. 如申請專利範圍第9項之方法,其中產生一向量化函式記號進一步包含產生一向量化函式記號,其包括該純量被呼叫方函式之一原先名稱或一單一指令多重資料(SIMD)前綴符。
  11. 如申請專利範圍第1項之方法,其進一步包含回應於編譯該第二程式之一要求,獨立於該第一程式之編譯,在一計算裝置上編譯該第二程式。
  12. 如申請專利範圍第11項之方法,其中編譯該第二程式包括以對該純量被呼叫方函式的一向量化版本之一泛型呼叫,來置換來自該第二程式之一呼叫方函式的呼叫,其呼叫該第一程式之該純量被呼叫方函式。
  13. 一種設備,其包含:一或多個處理器;耦接至該等一或多個處理器之一儲存媒體,其包括一編譯器,該編譯器經組配來由該等一或多個處理器執 行以進行以下動作:接收要編譯具一純量被呼叫方函式及向量化註釋的一第一程式之一要求,及回應於該要求而編譯該第一程式;其中該第一程式之編譯包括至少部分基於該等向量化註釋之該純量被呼叫方函式的一或多個向量化版本之產生,及分別地與該純量被呼叫方函式的該等一或多個向量化版本相聯結的一或多個向量化函式記號之產生;及其中該等一或多個向量化函式記號係經組配來使得針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,該純量被呼叫方函式的該等一或多個向量化版本可以被匹配且被選擇性地調用。
  14. 如申請專利範圍第13項之設備,其中該純量被呼叫方函式的該等一或多個向量化版本之產生包含:回應於該純量被呼叫方函式之條件呼叫或遞歸呼叫的決定之該純量被呼叫方函式的一經遮罩之向量化版本之產生,或一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換。
  15. 如申請專利範圍第14項之設備,其中該純量被呼叫方函式的一經遮罩之向量化版本之產生包含:環繞該純量被呼叫方函式之一函式主體之一條件執行構造的產生,以提供給該函式主體之條件執行。
  16. 如申請專利範圍第14項之設備,其中一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換包含與該純量被呼叫方函式相聯結的結構之陣列的記憶體存取至陣列之結構的記憶體存取之變換;與該純量被呼叫方函式相聯結的陣列之結構的記憶體存取至結構之陣列的記憶體存取之變換;一陣列之一形狀的修正或與該純量被呼叫方函式相聯結的陣列記憶體存取之重新配置;跨幅負載或儲存操作之採用以處置非單位跨幅或不規則記憶體存取;聚集或分散的硬體支援之採用以處置與該純量被呼叫方函式相聯結的非單位跨幅或不規則記憶體存取;或與該純量被呼叫方函式相聯結的一結構之擴延。
  17. 如申請專利範圍第13項之設備,其中一向量化函式記號之產生包含包括該純量被呼叫方函式的該相對應向量化版本之一靶定處理器識別符、一經遮罩的或無遮罩的指標、一向量長度、或一線性階級大小之一向量化函式記號之產生;其中該靶定處理器識別符識別該純量被呼叫方函式的該相對應向量化版本之一標靶處理器型別或架構,該經遮罩的或無遮罩的指標指示該純量被呼叫方函式的該相對應向量化版本是否經遮罩的或 無遮罩,該向量長度指示該純量被呼叫方函式的該相對應向量化版本之一向量的一長度,及該線性階級大小係指示針對該純量被呼叫方函式的該相對應向量化版本之串列調用之一階級大小。
TW101111469A 2011-04-01 2012-03-30 包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術 TWI490783B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU2011/000212 WO2012134322A1 (en) 2011-04-01 2011-04-01 Vectorization of scalar functions including vectorization annotations and vectorized function signatures matching

Publications (2)

Publication Number Publication Date
TW201303730A TW201303730A (zh) 2013-01-16
TWI490783B true TWI490783B (zh) 2015-07-01

Family

ID=44883362

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101111469A TWI490783B (zh) 2011-04-01 2012-03-30 包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術

Country Status (3)

Country Link
US (1) US9015688B2 (zh)
TW (1) TWI490783B (zh)
WO (1) WO2012134322A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103959240B (zh) * 2011-12-15 2017-05-17 英特尔公司 使用混洗表和掩码存储表经由矢量指令优化程序循环的方法
WO2013089750A1 (en) * 2011-12-15 2013-06-20 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
US11003464B2 (en) * 2012-04-19 2021-05-11 Microsoft Technology Licensing, Llc Control flow integrity enforcement at scale
US9753727B2 (en) 2012-10-25 2017-09-05 Intel Corporation Partial vectorization compilation system
US9158511B2 (en) * 2013-05-20 2015-10-13 Advanced Micro Devices, Inc. Scalable partial vectorization
US9081560B2 (en) * 2013-09-30 2015-07-14 Sungard Systems International Inc. Code tracing processor selection
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
US11243958B2 (en) 2015-12-31 2022-02-08 Teradata Us, Inc. Implementing contract-based polymorphic and parallelizable SQL user-defined scalar and aggregate functions
US20180121202A1 (en) * 2016-11-02 2018-05-03 Intel Corporation Simd channel utilization under divergent control flow
US10795682B2 (en) 2016-12-28 2020-10-06 Intel Corporation Generating vector based selection control statements
US10853043B2 (en) 2018-09-11 2020-12-01 Intel Corporation Methods and apparatus to improve optimizing loops with predictable recurring memory reads
US11635967B2 (en) * 2020-09-25 2023-04-25 Advanced Micro Devices, Inc. Vertical and horizontal broadcast of shared operands
CN117234514B (zh) * 2023-11-08 2024-02-23 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、系统及相关设备
CN118656033B (zh) * 2024-08-19 2024-10-29 浙江大华技术股份有限公司 数据的处理方法和装置、存储介质及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080034357A1 (en) * 2006-08-04 2008-02-07 Ibm Corporation Method and Apparatus for Generating Data Parallel Select Operations in a Pervasively Data Parallel System
US20080141012A1 (en) * 2006-09-29 2008-06-12 Arm Limited Translation of SIMD instructions in a data processing system
TW201042544A (en) * 2009-05-21 2010-12-01 Via Tech Inc Method and apparatus for detecting load-store collision

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5713037A (en) * 1990-11-13 1998-01-27 International Business Machines Corporation Slide bus communication functions for SIMD/MIMD array processor
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US5768596A (en) * 1996-04-23 1998-06-16 Silicon Graphics, Inc. System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
US6088511A (en) * 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
US7376941B2 (en) * 2004-04-16 2008-05-20 Agility Design Solutions Inc. Inferring function calls in an ambiguous language computer program
US7681187B2 (en) * 2005-03-31 2010-03-16 Nvidia Corporation Method and apparatus for register allocation in presence of hardware constraints
US7840954B2 (en) * 2005-11-29 2010-11-23 International Business Machines Corporation Compilation for a SIMD RISC processor
US8010953B2 (en) * 2006-04-04 2011-08-30 International Business Machines Corporation Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US8677338B2 (en) * 2008-06-04 2014-03-18 Intel Corporation Data dependence testing for loop fusion with code replication, array contraction, and loop interchange
US8327344B2 (en) * 2008-10-14 2012-12-04 International Business Machines Corporation Array reference safety analysis in the presence of loops with conditional control flow
US8621448B2 (en) * 2010-09-23 2013-12-31 Apple Inc. Systems and methods for compiler-based vectorization of non-leaf code

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080034357A1 (en) * 2006-08-04 2008-02-07 Ibm Corporation Method and Apparatus for Generating Data Parallel Select Operations in a Pervasively Data Parallel System
US20080141012A1 (en) * 2006-09-29 2008-06-12 Arm Limited Translation of SIMD instructions in a data processing system
TW201042544A (en) * 2009-05-21 2010-12-01 Via Tech Inc Method and apparatus for detecting load-store collision

Also Published As

Publication number Publication date
WO2012134322A1 (en) 2012-10-04
US20130318511A1 (en) 2013-11-28
US9015688B2 (en) 2015-04-21
TW201303730A (zh) 2013-01-16

Similar Documents

Publication Publication Date Title
TWI490783B (zh) 包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術
Kong et al. When polyhedral transformations meet SIMD code generation
CN101268444B (zh) 用于多处理器上流媒体应用的数据转换
Tian et al. Compiling C/C++ SIMD extensions for function and loop vectorizaion on multicore-SIMD processors
Khalate et al. An LLVM-based C++ compiler toolchain for variational hybrid quantum-classical algorithms and quantum accelerators
Li et al. Verified compilation of quantum oracles
JP2013101638A (ja) ハードウェアエンドループ情報の命令へのコード化
Rul et al. A profile-based tool for finding pipeline parallelism in sequential programs
US9594668B1 (en) Debugger display of vector register contents after compiler optimizations for vector instructions
US9038045B2 (en) Unified parallel C work-sharing loop construct transformation
Fisher et al. The Scc Compiler: SWARing at MMX and 3D Now!
LaMielle et al. Enabling code generation within the sparse polyhedral framework
Brandner et al. Automatic generation of compiler backends
Su et al. Processor Tagged Descriptors: A Data Structure for Compiling for Distributed-Memory Multicomputers.
US9158511B2 (en) Scalable partial vectorization
CN100559344C (zh) 一种支持用规则记录变量访问专用寄存器组的处理方法
Varadarajan Polyhedral optimizations of RNA-RNA interaction computations
Custers Algorithmic species: Classifying program code for parallel computing
US20260044342A1 (en) Proactive register promotion of aggregates amid control flow for gpu workloads
Latifis et al. A Retargetable MATLAB-to-C Compiler Exploiting Custom Instructions and Data Parallelism
van de Wall et al. Fully compiled execution of conjunctive graph queries
Kasyanov et al. Sisal 3.2 language structure decomposition
Mewes et al. Towards Optimizing Compilers for Systems with Racetrack Memories
Kavvadias et al. NAC: A lightweight intermediate representation for ASIP compilers
Dittmann On instruction-set generation for specialized processors

Legal Events

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