专利摘要:
此處揭示與純量被呼叫方函式之向量化相聯結的方法及設備。於多個實施例中,編譯一第一程式可包括至少部分基於該第一程式之向量化註釋而產生該第一程式之一純量被呼叫方函式的一或多個向量化版本。此外,編譯可包括產生分別地與該純量被呼叫方函式的一或多個向量化版本相聯結的一或多個向量化函式記號。該等一或多個向量化函式記號可使得針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,允許該純量被呼叫方函式的一適當向量化版本欲被匹配且被調用。
公开号:TW201303730A
申请号:TW101111469
申请日:2012-03-30
公开日:2013-01-16
发明作者: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
申请人:Intel Corp;
IPC主号:G06F8-00
专利说明:
包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術 發明領域
本文揭示之實施例係有關於資料處理領域,更明確言之,係有關於與純量函式之向量化相聯結的方法、設備及物品,包括向量化註釋及向量化函式記號的產生及匹配。實施例也可包括程序間分析。 發明背景
除非於此處另行指示,否則於發明背景章節描述的內容並非本案所請求專利之先前技術且非藉含括於背景章節而承認其乃先前技術。
隨著電子、積體電路、計算及網路技術的進步,應用用途諸如但非限於多媒體應用或科學計算已經變得更加計算密集。向量計算或單一指令多重資料(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)、或(A B)」,換言之,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(param1step1,param2step2,...,paramNstepN),其指示針對該純量被呼叫方函式的一向量化版本的串列調用之階級大小;純量參數註釋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(param1step1,param2step2,...,paramNstepN)可告知編譯器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 (20)
[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] 如申請專利範圍第13項之設備,其中該等向量化註釋係包含下列註釋中之一或多者:一處理器註釋其指示欲靶定的該經編譯之被呼叫方函式之一處理器型別或架構、一向量長度註釋其指示針對該純量被呼叫方函式的一向量化版本之一向量長度、一元件大小註釋其指示針對該純量被呼叫方函式的一向量化版本用以界定一向量長度之一元件大小、一線性參數註釋其指示針對該純量被呼叫方函式的一向量化版本之串列調用的一階級大小、一純量參數註釋其指示欲對該純量被呼叫方函式的一向量化版本的全部執行迭代重複廣播之一純量參數之一值、一遮罩或無遮罩註釋其指示該純量被呼叫方函式的一向量化版本是否欲被遮罩或不被遮罩、或一純量被呼叫方函式註釋其指示一使用者界定的函式係為該純量被呼叫方函式之一特定向量情況。
[16] 一種設備,其係包含:一或多個處理器;耦接至該等一或多個處理器之一儲存媒體,其係包括一編譯器係經組配來由該等一或多個處理器執行來:接收一要求而以一純量被呼叫方函式及向量化註釋來編譯一第一程式,及回應於該要求而編譯該第一程式;其中該第一程式之編譯係包括至少部分基於該等向量化註釋之該純量被呼叫方函式的一或多個向量化版本之產生,及分別地與該純量被呼叫方函式的該等一或多個向量化版本相聯結的一或多個向量化函式記號之產生;及其中該等一或多個向量化函式記號係經組配來使得針對從一第二程式之一呼叫方函式對該純量被呼叫方函式的一向量化版本的一泛型呼叫,允許該純量被呼叫方函式的該等一或多個向量化版本中之一合宜者欲被匹配且被調用。
[17] 如申請專利範圍第16項之設備,其中該純量被呼叫方函式的該等一或多個向量化版本之產生係包含:回應於該純量被呼叫方函式之條件呼叫或遞歸呼叫的決定之該純量被呼叫方函式的一經遮罩之向量化版本之產生,或一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換。
[18] 如申請專利範圍第17項之設備,其中該純量被呼叫方函式的一經遮罩之向量化版本之產生係包含:環繞該純量被呼叫方函式之一函式主體之一條件執行組合體之產生,來提供給該函式主體之條件執行。
[19] 如申請專利範圍第17項之設備,其中一或多個結構或多維陣列記憶體存取至一或多個單位跨幅記憶體存取之變換係包含與該純量被呼叫方函式相聯結的結構陣列之記憶體存取至陣列結構之記憶體存取之變換;與該純量被呼叫方函式相聯結的陣列結構之記憶體存取至結構陣列之記憶體存取之變換;一陣列之一形狀的修正或與該純量被呼叫方函式相聯結的陣列記憶體存取之重新配置;跨幅負載或儲存操作之採用來處置非單位跨幅或不規則記憶體存取;聚集的或散在的硬體支援之採用來處置與該純量被呼叫方函式相聯結的非單位跨幅或不規則記憶體存取;或與該純量被呼叫方函式相聯結的一結構之擴延。
[20] 如申請專利範圍第16項之設備,其中一向量化函式記號之產生係包含一向量化函式記號產生,該記號係包括該純量被呼叫方函式的該相對應向量化版本之一靶定處理器識別符、一經遮罩的或無遮罩的指標、一向量長度、或一線性階級大小;其中該靶定處理器識別符係識別該純量被呼叫方函式的該相對應向量化版本之一標靶處理器型別或架構,該經遮罩的或無遮罩的指標係指示該純量被呼叫方函式的該相對應向量化版本是否經遮罩的或無遮罩,該向量長度係指示該純量被呼叫方函式的該相對應向量化版本之一向量之一長度,及該線性階級大小係指示針對該純量被呼叫方函式的該相對應向量化版本之串列調用之一階級大小。
类似技术:
公开号 | 公开日 | 专利标题
TWI490783B|2015-07-01|包含向量化註釋及經向量化之函式記號匹配之純量函式向量化技術
Wang et al.2013|AUGEM: automatically generate high performance dense linear algebra kernels on x86 CPUs
Kong et al.2013|When polyhedral transformations meet SIMD code generation
Das et al.1993|Slicing analysis and indirect accesses to distributed arrays
Rul et al.2010|A profile-based tool for finding pipeline parallelism in sequential programs
US20080052693A1|2008-02-28|Method of simd-ization through data reshaping, padding, and alignment
Kirner et al.2010|Transforming flow information during code optimization for timing analysis
LaMielle et al.2010|Enabling code generation within the sparse polyhedral framework
Luszczek et al.2016|Search space generation and pruning system for autotuners
Johnson et al.1996|Exploitation of symbolic information in interprocedural dependence analysis
Verdoolaege2015|PENCIL support in pet and PPCG
Raghesh2011|A framework for automatic OpenMP code generation
Su et al.1994|Processor Tagged Descriptors: A Data Structure for Compiling for Distributed-Memory Multicomputers.
US9038045B2|2015-05-19|Unified parallel C work-sharing loop construct transformation
Fisher et al.1999|The Scc Compiler: SWARing at MMX and 3D Now!
Hoefler et al.2014|Automatic complexity analysis of explicitly parallel programs
Custers2012|Algorithmic species: Classifying program code for parallel computing
Reynolds2010|Investigation of different methods of fast polynomial evaluation
US20140344555A1|2014-11-20|Scalable Partial Vectorization
Trilla et al.2015|Improving implicit parallelism
Hong et al.2002|Rapid prototyping of DSP algorithms on VLIW TMS320C6701 DSP
Kavvadias et al.2011|NAC: A lightweight intermediate representation for ASIP compilers
Marker2014|Design by transformation: from domain knowledge to optimized program generation
Ingole et al.2019|Instruction set design for elementary set in tensilica xtensa
Latifis et al.2020|A Retargetable MATLAB-to-C Compiler Exploiting Custom Instructions and Data Parallelism
同族专利:
公开号 | 公开日
TWI490783B|2015-07-01|
WO2012134322A1|2012-10-04|
US20130318511A1|2013-11-28|
US9015688B2|2015-04-21|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
US5713037A|1990-11-13|1998-01-27|International Business Machines Corporation|Slide bus communication functions for SIMD/MIMD array processor|
US5590345A|1990-11-13|1996-12-31|International Business Machines Corporation|Advanced parallel array processor|
US5768596A|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|1998-05-13|2000-07-11|Microsoft Corporation|Nested parallel 2D Delaunay triangulation method|
US7376941B2|2004-04-16|2008-05-20|Agility Design Solutions Inc.|Inferring function calls in an ambiguous language computer program|
US7681187B2|2005-03-31|2010-03-16|Nvidia Corporation|Method and apparatus for register allocation in presence of hardware constraints|
US7840954B2|2005-11-29|2010-11-23|International Business Machines Corporation|Compilation for a SIMD RISC processor|
US8010953B2|2006-04-04|2011-08-30|International Business Machines Corporation|Method for compiling scalar code for a single instruction multiple data execution engine|
US8381202B2|2006-06-20|2013-02-19|Google Inc.|Runtime system for executing an application in a parallel-processing computer system|
US8201159B2|2006-08-04|2012-06-12|International Business Machines Corporation|Method and apparatus for generating data parallel select operations in a pervasively data parallel system|
US8505002B2|2006-09-29|2013-08-06|Arm Limited|Translation of SIMD instructions in a data processing system|
GB2443277B|2006-10-24|2011-05-18|Advanced Risc Mach Ltd|Performing diagnostics operations upon an asymmetric multiprocessor apparatus|
US8677338B2|2008-06-04|2014-03-18|Intel Corporation|Data dependence testing for loop fusion with code replication, array contraction, and loop interchange|
US8327344B2|2008-10-14|2012-12-04|International Business Machines Corporation|Array reference safety analysis in the presence of loops with conditional control flow|
US8392666B2|2009-05-21|2013-03-05|Via Technologies, Inc.|Low power high speed load-store collision detector|
US8621448B2|2010-09-23|2013-12-31|Apple Inc.|Systems and methods for compiler-based vectorization of non-leaf code|CN103999045B|2011-12-15|2017-05-17|英特尔公司|使用混洗表和混合表经由矢量指令优化程序循环的方法|
CN103959240B|2011-12-15|2017-05-17|英特尔公司|使用混洗表和掩码存储表经由矢量指令优化程序循环的方法|
EP2912548B1|2012-10-25|2018-04-11|Intel Corporation|Partial vectorization compilation system|
US9158511B2|2013-05-20|2015-10-13|Advanced Micro Devices, Inc.|Scalable partial vectorization|
US9081560B2|2013-09-30|2015-07-14|Sungard Systems International Inc.|Code tracing processor selection|
US10180829B2|2015-12-15|2019-01-15|Nxp Usa, Inc.|System and method for modulo addressing vectorization with invariant code motion|
US11243958B2|2015-12-31|2022-02-08|Teradata Us, Inc.|Implementing contract-based polymorphic and parallelizable SQL user-defined scalar and aggregate functions|
US20180121202A1|2016-11-02|2018-05-03|Intel Corporation|Simd channel utilization under divergent control flow|
US10795682B2|2016-12-28|2020-10-06|Intel Corporation|Generating vector based selection control statements|
US10853043B2|2018-09-11|2020-12-01|Intel Corporation|Methods and apparatus to improve optimizing loops with predictable recurring memory reads|
法律状态:
2020-04-01| MM4A| Annulment or lapse of patent due to non-payment of fees|
优先权:
申请号 | 申请日 | 专利标题
PCT/RU2011/000212|WO2012134322A1|2011-04-01|2011-04-01|Vectorization of scalar functions including vectorization annotations and vectorized function signatures matching|
[返回顶部]