TW201229898A - Mechanism for conflict detection using SIMD - Google Patents

Mechanism for conflict detection using SIMD Download PDF

Info

Publication number
TW201229898A
TW201229898A TW100145974A TW100145974A TW201229898A TW 201229898 A TW201229898 A TW 201229898A TW 100145974 A TW100145974 A TW 100145974A TW 100145974 A TW100145974 A TW 100145974A TW 201229898 A TW201229898 A TW 201229898A
Authority
TW
Taiwan
Prior art keywords
index
data set
sequence
scalar
vector
Prior art date
Application number
TW100145974A
Other languages
English (en)
Other versions
TWI524273B (zh
Inventor
Mikhail Smelyanskiy
Yen-Kuang Chen
Dae-Hyun Kim
Christopher J Hughes
Victor W Lee
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 TW201229898A publication Critical patent/TW201229898A/zh
Application granted granted Critical
Publication of TWI524273B publication Critical patent/TWI524273B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

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)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Advance Control (AREA)

Description

201229898 六、發明說明: 【發明戶斤屬技術領域3 發明領域 本揭露内容係有關在單指令多資料(single-instruction multiple-data,SIMD )中檢測衝突之技術。 發明背景 許多應用程式具有大量的資料等級平行性,且應能夠 從單指令多資料(SIMD )支援中獲益。在SIMD執行中, 單一個指令係同時操作在複數個資料元素上。這典型上係 藉由延伸各種資源’例如暫存器和算術邏輯單元(arithmetic logic unit,ALU),的寬度來實施,使這些資源能夠分別保 持或是操作在複數個資料元素上。然而,大部分這樣的應 用程式一開始便已被設計成一次處理一個指令和一個資料 元素的純量處理程序,即,單指令單資料(single instructi〇n single-data,SISD)。
將純量處理程序轉換成幻河^^處理程序(即,「SIMD 化」)可提供操作性改良,例如縮短處理時間。然而,在這 樣的轉換當巾的-項考量’是得在必要時確保純量程式順 序有被保冑。[項考4 ’是得確财資料被分散到記憶 體中時’所導致的記憶體位址之向量僅包括獨特位址(亦 即,沒有任何重複的位址)。因此,衝突檢測可有助於這樣 的轉換。 【發明内容】 201229898 發明概要 依據本發明之一實施例,係特地提出一種用於衝突檢測 之方法,其包含下列步驟:載入一個資料集合,該資料集 合包含由索引組成之一第一序列,其中各個索引係對應於 一個位址,並且該第一序列係對應於一個純量處理程序的 執行順序;判定在該資料集合中的匹配索引;判定在該資 料集合中的獨特索引;從該等匹配索引中選擇一個索引, 其中若在該純量處理程序中的一個操作之結果取決於該執 行順序,則所選擇的該索引係在該第一序列中為較早者; 形成由索引組成的一個無衝突群集,該無衝突群集包括該 等獨特索引和所選擇的該索引;以及載入對應於該無衝突 群集之至少一部分的資料,並且並行地在該等資料上進行 該操作。 依據本發明之另一實施例,係特地提出一種系統,其包 含具有個別地或以組合形式儲存在其上之指令的一或多個 儲存媒體,該等指令在被一或多個處理器執行時會致使包 含下列之操作:載入一個資料集合,該資料集合包含由索 引組成之一第一序列,其中各個索引係對應於一個位址, 並且該第一序列係對應於一個純量處理程序的執行順序; 判定在該資料集合中的匹配索引;判定在該資料集合中的 獨特索引;從該等匹配索引中選擇一個索引,其中若在該 純量處理程序中的一個操作之結果取決於該執行順序,則 所選擇的該索引係在該第一序列中為較早者;形成由索引 組成的一個無衝突群集,該無衝突群集包括該等獨特索引 201229898 和所選擇的該索引;以及載入對應於該無衝突群集之至少 一部分的資料,並且並行地在該等資料上進行該操作。 依據本發明之又一實施例,係特地提出一種組配來檢測 衝突的設備,該設備包含:一個記憶體;以及一個處理器, 其包含一個純量處理單元和一個向量處理單元,該處理器 係組配來進行下列步驟:載入一個資料集合,該資料集合 包含由索引組成之一第一序列,其中各個索引係對應於該 記憶體中的一個位址,並且該第一序列係對應於在使用該 純量處理單元時的一個純量處理程序之執行順序;載入一 個資料集合,該資料集合包含由索引組成之一第一序列, 其中各個索引係對應於該記憶體中的一個位址,並且該第 一序列係對應於在使用該純量處理單元時的一個純量處理 程序之執行順序;判定在該資料集合中的匹配索引;判定 在該資料集合中的獨特索引;從該等匹配索引中選擇一個 索引,其中若在該純量處理程序中的一個操作之結果取決 於該執行順序,則所選擇的該索引係在該第一序列中為較 早者;形成由索引組成的一個無衝突群集,該無衝突群集 包括該等獨特索引和所選擇的該索引;及載入對應於該無 衝突群集之至少一部分的資料,並利用該向量處理單元並 行地在該等資料上進行該操作。 圖式簡單說明 隨著下面的詳細說明之推進,及透過對圖式之參考, 所請求之標的之實施例的特徵和優點將會變得明顯可見, 在這些圖式中,類似號碼係描述類似部件,並且其中: 201229898 第1圖例示出與本揭露内容一致的一個示範系統實施 第2圖例示出用於與本揭露内容一致的衝突檢測之示 範操作的流程圖; 第3圖例示出用於與本揭露内容一致的單一索引衝突 檢測之示範操作的流程圖; 第4圖例示出用於與本揭露内容一致的單一索引衝突 檢測之示範操作的流程圖;並且 第5圖例示出用於與本揭露内容一致的有序索引對衝 突檢測之示範操作的流程圖。 雖然下面的詳細說明將會參考數個例示性實施例而推 進,但對於热於此技者來說,對於這些實施例的許多替代 體、修改體和變異體會是明顯可見的。
【方包J 較佳貫施例之詳細說明 大體而5 ’本揭露内容係說明設計來在將純量處理程 序轉換至並行—料(「SIMD化」)時檢測衝突的系統和 方法’例如’ Μ開相在—些電腦架構中可用的向量處理器。 之受讓人處取得的6核Core i7 980處理 —個向量指令以處理資料之向量的至 將一個純量處理程序轉換成一個向量 致較短的並行操作序列。各個並行操 例如,可從本申請_ 器包括被設計來執行 少一個向量處理3|。 處理程序典型上會$ 作係對應於某個數量的純量操作,其中此數量可係對應於 進行這些㈣Μ統之向量長度。 201229898 係了針對個無序單一索引、一個有序單一索引、和/ 或數個有序索引對而檢測衝突。可進-步針對寫後讀關係 而檢測衝突。衝突檢測係設計來識別在一個迭代序列中之 不可並行完成的操作(即,迭代)β 當於本文中使用時,「索引」係對應於被包括在一個陣 列中的一個元素之位址。例如,除了別的以外,此陣列可 係由一個基底位址指明。此陣列中的一個元素可由索引指 向。因而,此元素之位址可係包括基底位址和索引(例如, 偏移)。 當SIMD化一個純量處理程序時,此處理器要在上頭進 行操作的資料可係儲存在一個陣列中,並且此純量處理程 序可係設計來操作於此陣列的一個元素上,—次一個元素 (SISD,單一個指令,單一個資料)。例如,此純量處理程 序可包括一個迴圈,此迴圈中之各遍(即,迭代)都會在 一個兀素上操作。視處理程序而定,係可在—個元素上操 作一次、複數次、或不在其上頭做操作。 例如,一個純量處理程序可包括一個f〇r迴圈,例如, f〇r(/=0; /<N; /++) A[Index[/']]++ ; 此迴圈係設計成在此迴圈中之各遍對陣列A中的一個元素 增量。於此範例中’ Index是對應於陣列八中之元素之位址 的一個索引陣列。ζ·對應於此f0r迴圈的一個迭代,並且是對 陣列Index的一個索引。因此,/對應於在陣列Index中的2個 το素之位址’並且Index[i]對應於在陣列a中的—個元素之位 7 201229898 址。易言之’於陣列Index中的元素是對A陣列的索引,對應 於陣歹J A中之元素之位址。在陣列㈣以中所含有的這些索引 可不為獨特的,這指出在陣列种的—個元素在此加迴圈中 係被取用複數次。依據於本文中所呈現之教示,衝突檢測是 設計來檢測在-個^素场錢數次和/或在祕量處理程 序之至J -部分中的排序關係這樣的情況。陣列A的被操作 複數次的-個元素在陣mndex中係對應於具有相同數值, 亦即’才曰向陣列A中之相同元素,的複數個元素(索引 與本揭露内容一致的一種方法係設計來檢測可能會透 過讀取和/或寫入至直到運行時間之前皆未知的記憶體位 置而出現的資料關係。這樣的關射藉由檢測—個資料集 合中的匹配㈣來檢測。例如,可對在資料關係中可能涉 入的所有㈣引較。在另—個範财,係可進行一 項操作,此項操作之結果係取決於在此資料集合中是否有 匹配索引在k第—個範财,操作的結果可接著被用來 識別此f料集合中的匹配索引。此種操作之範例包括但不 受限於向量混洗_及分散和/錢集操作。 是否有衝突和衝突之類型係可取決於操作和/或與此 (等)操仙_資料。衝突檢測大體上包括針軌醜 記憶體位址的-個向量而判定_個位址獨特子集,其中 VLEN是向量長度。衝突檢測可係以程式順序進行:或㈣ 無序進行。對於交換性的操作,例如加法,而言,衝突檢 測可為無序的’亦即,可叹也可料是崎•序進行。 易言之,進行這些操作_序並不會改變結果
S 201229898 突被檢測的順序並样純這_作在純讀理中被 的順序。對於非交換性的操作,例 J如除法,而言,衝突檢 測可係以程式轉進行4言之,進行這純作的順序可 能會改變結果。因此,衝突被__序係龍於操作在 純量處理中被進行的順序。 例如’直方圖操作典型上包括在一個資料陣列上之操 作。這可㈣施在-慨量纽”,料纽陣列中之 各個元素(或某個元素子集)上進行此處理的一個迴圈。 例如’下面的偽碼(範例1 ): for(i=0; i<N; i++) hist[Index[i]%HIST_SIZE]++ ; 係設計成在此f〇 r迴圈中之各遍對陣列h丨s t中的一個元素增 量達N遍。在陣列hist中的元素係由Index[i]%HIST—81沈指 出,其中%是模數運算子(亦即,Index[i]%HIST_SIZE對應 於Index[i]除以HIST_SIZE之餘數)。易言之,在hist中的元 素之位址對應於Index[i]%HIST_SIZE。將範例1映對到simd 係包括判定在索引向量Index[i]中的一個獨特元素(即,位 址)子集。對於範例1來說,此獨特元素子集可係以任意順 序判定,因為增量操作是交換性的,而且只有一個索引。 易言之,陣列hist陣列中之元素被增量的順序並不影響結 果。 在另一個範例(範例2 )中,下面的偽碼: for(i=0; i<N; i++) hist[Index[i]%HIST_SIZE] = 1/( hist[Index[i]%HIST—SIZE] + i); 201229898 係設計成在此f0r迴圈中之上至N遍的各遍中對陣列W对中 的一個元素作更新。在陣列hist中的元素係由 IndeX[i]%HIST_SIZE指出。此更新包括將丨除以此陣列中之 元素加上索引i。類似於範例1,將範例2映對到SIMD係包括 判定在索引向量1ndex[i]中的一個獨特元素(即,位址)子 集。對於範例2來說,此獨特元素子集不可係以任意順序判 疋,因為除法操作並不是交換性的。易言之,此陣列中之 元素被處理的順序可能會影響結果。 在另一個範例(範例3)中,下面的偽碼: for(i=〇; i<N; i+=VLEN) A[Ind_dst[i]]=A[Ind—src[i]]; 係設計成從陣列A中讀取由索弓丨Ind一src[i]所指的一個元 素’並於由Ind_dst[i]所指的位置將這個元素寫入到陣列a。 易言之’向量Ind_dst和Ind—src含有陣列A中之元素的位址。 將範例3映對到SIM D係包括判定可被並行處理而不違反資 料關係,包括寫後讀、讀後寫、和寫後寫關係,的一個元 素子集。此映對可包括檢測有出現在一個索引向量令但不 出現在另一個向量中的位址,和/或在這兩個索引向量中為 獨特的位址。當關係存在時,係將映對設計成確保這些操 作係以程式順序進行,以避免此映對改變結果。例如,一 個對A[c]之寫入和一個從八⑷之讀取不可被並行執行,其中 這個從A[c]的讀取係被設計成發生在此偽碼之純量(即,連 續的)版本的一個較晚迭代中。同樣地,若—個從A[c]之讀 取被設計成於連續程序順序中係發生在一個對八⑷之寫入 201229898 之前,則至SIMD之映對不應容許在執行此讀取之前執行這 個寫入。,若純量碼產生這個序列· A[2卜姻; 八[5]=_ ’· A[0]哪];綱哪]’則至幻婦之映對應該 要確保A[5卜綱賦值係在綱值之前或同時執行。 因此,與本揭露内容-致的—種方法和系統係設計來 檢測在純量㈣至向量操作的映對中之衝突。此方法可包 括判定-個元素向量的—個獨特元素子集。此方法可進一 步包括在操作之順序可能會影響結果時保留程式順序。 =如,此方法可包_用分散(π·)和/或收集 作來檢測衝突。物1MD架構_於分散 ratedcore)架構包括對於分散和/ ==的架構性支援。分散和/或收 ==器中,從在,例如,-個_,中的 位置收集資料到相連 或將貝⑽在,例如,—個暫存器 分散到在,例如,㈣ +的相連記憶體位置 位置。利騎集和/或分散=:::疏的記憶體 作有助於對於無序索引的㈣檢他常見可㈣動操 援。藉由兩個硬體延伸,如於本文、’而無須額外硬體支 方法延伸成進行以短式術皮认、戶斤說明❺,係可將此 架構上執行與本揭露内容-致的收集細作之支援的 行於包括有對於可_向方法。此方法可係執 支援的一個架構上。在 201229898 些實施例中’至少-些於本文中說明的這些操作係可藉 由進行硬體中之操作而被組合和加速。 向里收集和向里分散操作為針對向量的暫存器間接定 址的種形式’其中,jj欠集係涉及有索引(^心⑽)讀取, 而分散係涉及有索引寫人。例如,針對具有為v L E N之向量 長度(即’ VLEN寬的SIMD)的—個向量架構系統而言, 這些向量分散和收集操作可係定義為: vgather base, Addr, Dst, mask vscatter base, Addr, Src, mask 其中Addr、Dst和Src係對應於向量,而基底(base)和遮罩 (mask )為純量。Vgather係設計成從vlEN (不一定是相連 的)3己憶體位置收集上至VLEN個資料元素,這些記憶體位 置的位址可從和JcWr運算出來(例如, (base[Addr[0]],...,base[Addr[VLEN-l]])),並將這些資料元 素相連地儲存在(例如,Dst[0],...,Dst[VLEN-l])中。 Vscatter係設計成將相連地儲存在办c (例如, Src[0],…,Src[VLEN-1 ])中的上至VLEN個資料元素分散到 VLEN個記憶體位置,這些記憶體位置的位址可從和 運算出來,如針對vgather所說明的。 vgather和vscatter可將mas/:用作一個輸入運算元。从 可包括VLEN個位元,且miwA:的作動值可係對應於要被分散 和/或收集的元素。例如’等於一的一個遮罩位元可係對應 於要被收集或分散的一個元素’且等於零的一個遮罩位元 可係對應沒有要被收集或分散的一個元素。若在一個分散 S; 12 201229898 操作中有複數個值被分散到同一個記憶體位置,則只有一 個能夠成功。 系統架構 第1圖例示出與本揭露内容一致的一個示範系統1〇〇實 施例。系統100包括一個純量處理單元1〇2、一個向量處理 單元104和個5己憶體單元106。系統100可係針對管線化和 /或並行處理而組配,如熟於此技者會可瞭解的。系統1〇〇 可包括耦接至純量處理單元1〇2和記憶體單元1〇6的數個純 量暫存器112,以及耦接至向量處理單元1〇4和記憶體單元 106的數個向量暫存器114。系統1〇〇可進一步包括耦接至記 憶體單元1 〇6的一或多個快取記憶體i 22和一個記憶體控制 器124。έ己憶體控制器126可係搞接至一個記憶體126。 如於本文中所說明的,純量處理單元1〇2係組配來在純 量負料上進行純量處理。例如,在處理前和/或處理後,這 些純量資料可係儲存在一或多個這些純量暫存器112中。向 量處理單元104係組配來在向量資料上進行向量處理。例 如,在處理前和/或處理後,這些向量資料可係儲存在一或 多個這些向量暫存器114中。 記憶體單元106係組配來管理資料和/或位址在純量暫 存器112、向量暫存器114和/或(一或多個)快取122之間的 移動。記憶體控制器124係組配來管理資料和/或位址在(_ 或多個)快取122和記憶體126之間的移動。 向量處理單元104和記憶體單元1〇6可包括混洗邏輯 132和或分散/收集邏輯134。如於本文中所說明的,此分散 13 201229898 收集邏輯係組配來進行分散和/或 可為可規劃的。混洗邏輯132係組配來進洗邏㈣ 作…種向量混洗操作係設計來㈣—f先操 若在含有丨A R P 70素集合。例如, 有{A,B,C,D}的一個向量暫存 洗操作,可能會有{B,DC A}⑽果知—種向莖混 數個輸入集合(例如,二 —成更多個向里暫存器),並且可從 ”中任—個輸人中選擇值和/或從兩個輪人都選擇值 種可規劃混洗操料,此制並不由應_式或編譯器作 硬編碼°易言之,此操作可接收識別出要被輸出之元素的 另一個輸入(例如,從記憶體或從一個暫存器)。 因此’與本揭露内容一致的一種系統可係組配來進行 如於本文中所說明的任何方法。此系統可進一步被組配成 利用可用電路功能,例如分散/收集邏輯,來進行-或多個 巧些功能。有益地,利用現有的電路功能可在進行這(些) 功能上提供效率’且可因而在執行時間負擔上具有相對較 小的衝擊® 示範方法論 第2圖例示出用於衝突檢測之示範操作的一個流程圖 200。如於本文中所說明的,於此實施例中所例示的這些操 作可係由與包括有一個向量處理器的一個系統(例如系統 100)相關聯的電路和/或軟體模組進行。 流程可係從操作2〇5開始。操作205可包括載入包括有 一第一索引序列的一個資料集合,其中各個索引係對應於 一個位址,並且此第一序列係對應於一個純量處理程序的 201229898 執行順序。可在操作210中判定此資料集合中的匹配索引。 例如,可係藉由在這個資料集合上進行一個分散和一個收 集操作來判定匹配索引。可在操作215中判定此資料集合中 的獨特索引。係將匹配索引設計成指出一個衝突,且係將 獨特索引設計成指出無衝突。 操作220可包括從匹配索引中選擇一個索引。若於此純 量處理程序中的一個操作之結果係與執行順序有關(即, 有序的)’那麼所選擇的索引係設計成在此第一序列中為較 早者。可在操作225形成包括有這些獨特索引和所選擇之索 引的一個無衝突索引群集。操作230可包括載入對應於此無 衝突群集中之至少一部分的資料。操作23〇"5j*進一步包括並 行地在這些資料上進行操作。 操作205、210、215、220、225和230可被重複,直到 所有的索引都已經被消耗掉為止。以此方式,可能會干擾 從純量處理程序到向量處理程序之變換的衝突可被檢測和 處理,而有助於此項變換。 第3圖例示出與本揭露内容一致之用於單一索引衝突 檢測之示範操作的一個流程圖3〇〇。如於本文中所說明的, 於此實施例中所例示的這些操作可係由與包括有一個向量 處理器的一個系統(例如系統1〇〇 )相關聯的電路和/或軟 體模組進行。表1包括用於對應於第3圖之流程圖300的無序 單一索引衝突檢測之偽碼的一個範例。 15 201229898 表1 //初始化一些變數 conflictarray=(int*)malloc(MAX_SIZE);
Vmyid={0,l,2, ...VLEN-1}; for(i=0; i < N; i+=VLEN) {
Vind=vload &Index[i]; mainmask=cr// ones; do { //第1階段:檢測無衝突群集索引子集 vscatter conflictarray, Vind, Vmyid, mainmask; vgather conflictarray, Vind, Vwrittenid; successmask = Vwrittenid= =Vmyid ? mainmask : 0; //第2階段:從列表中移除此群集 mainmask = (mainmask & (〜successmask)); //第3階段:在Vind之無衝突元素上作直方圖 vgather hist, Vind, Vdest, successmask; vadd Vdest, Vdest, Vones, successmask; vscatter hist, Vind, Vdest, successmask; } while(mainmask); 流程可從操作305開始。操作305可包括初始化,例如, 宣告和/或初始化變數。例如,可以MAX_SIZE的大小來配 置一個陣列,「conflictarray」。操作305可進一步包括宣告和 初始化長度為VLEN的一個向量Vmyid。例如,VLEN可係
S 16 201229898 對應於一個處理器的一個向量大小。如於本文中所說明的 係可以獨特值(例如’單調地增加整數值的元素,即從 零到VLEN-1)來初始化向量Vmyid。 係可針對一個索引集合的各個索引子集來進行操作 310 ' 315、320和325。例如,此索引集合可係對應於與陣 列hist的元素之位址對應的索引,如於本文中針對範例丄所 說明的。此索引子集(即,索引「量塊(chunk)」)可係對 應於進行這些操作的這個系統的一個向量之長度(例如, VLEN)。因此’操作310可包括量塊初始化。例如,係可以 對應於一個特定索引量塊(子集)的索引Index[i]來載入— 個向量Vind,並且可將一個遮罩(mainmask)設為全為—, 而指出在這個量塊中之所有的VLEN個元素皆為有效的。這 個範例係假設N是VLEN的倍數,以使得對於所有的量塊而 言’所有的元素都是有效的。 更進一步地,係假設被組配來執行例示於表1中之示範 操作的處理器(例如,處理器1〇〇)支援向量遮罩。易言之, 當進行被設計成接收N個元素作為輸入的一個向量操作 時’係假設此操作亦被設計成接收具有N個位元的一個遮 若個遮罩位元被設定(例如,等於1 ),則此操作可 在N中之對應元素上被操作。賴的話(例如,此遮罩位元 為零)’在對應元素上,此操作可被跳過(即,不被進行)。 可於操作315檢測在這個索引子集中的一個無衝突群 、且例如’向之内容的至少一部分可在由向量Vind 斤才日的位置被分散到陣列conflictarray中。此部份係對應於 17 201229898 遮罩mainmask。易言之,向量Vmyid的對應於mainmask之 (一或多個)非零位元的(一或多個)值可被分散到 conflictarray中。conflictarray的在由向量Vind所指之位置的 值可接著被收集到目標向量Vwrittenid中。Vwrittenid可接著 被與Vmyid作比較,元素對元素地(即,vwrittenid[i]與 Vmyid[i]比較),並且若這些元素是相等的,則在遮罩 successmask中的一個對應位元可被設成mainmask的一個對 應位元之值,否則便設為零。易言之,若Vwrittenid[i]等於 Vmyid[i] ’那麼Vind[i]是無衝突的,且對應的第i個 successmask位元被設為一。否則的話,Vind [i]是與某個其他 元素Vind[j]有衝突的(即,為與Vind中之另一個元素相同的 值,且可能具有較低優先性)’並且successmask的第i個位元 被設為0。因此,successmask的非零位元係對應於此索引子 集的無衝突群組。 於操作320,可將這個無衝突群組從索引「列表」中移 除。例如,可將mainmask位元式地與非(not) successmask 作且(and)處理。因此,mainmask之對應於此無衝突群集 的位元可被設為零。當無衝突索引被檢測出來並接著在上 面被作操作時,連續數遍的操作315、320和325可因而導致 更多的mainmask位元被設為零。 操作325可包括在Vind之無衝突元素上的操作。操作 325可係並行地在Vind之元素上進行。例如,繼續於本文在 範例1中所說明的這個陣列hist,這個無衝突元素之群集可 被收集到向量Vdest中,向量Vones可被加到Vdest,並且其
S 18 201229898 結果可接著依據向量Vind而被分散回到記憶體中。遮罩 successmask係被設計成將這些操作限制於在操作3丨$中所 識別出的錢突群集。射在定是否已;肖耗此量 塊。若此量塊還沒有被消耗掉,則流程可回到操作315。 可重複操作315、32〇、奶和330,直到已消耗Vind。 若此量塊已被祕,則可在操作335判定此集合是否已被消 耗。若此集合還沒有被消耗掉,則流程可回到操作3ι〇,並 且Index_下-個向量可接著被載人到Vind中。若已消耗 此集合’則可結束操作340。可重複操作31〇、315、32〇 325、 330和335,直到Index[i]之所有的^^個元素都已被消 。 因此,無序單-索引衝突檢測係可包括有多個巢套迴圈。一 個外層迴_係設計成要;;肖㈣量Index[i]的數個量塊,其中 各個量塊係對應於此系統(例如,系統間的向量長度。 一個内層迴圈係設計成要在各錄塊场作,赌測或 識別此量塊之無触元鱗集。此_迴圈可接著在所識別 之(一或多個)群集上操作並將其移除。這可重複,直到已 消耗此量塊為止。 針對第3圖所說明的這些操作可能不是那麼有效率。首 先,這些操作是在c〇nfliCtarray已配置且係大到1以確定分 散是在陣列界限内這樣的一個假設上的述詞。確保分散在 陣列界線内,係假設儲存在Vind巾之資料的最大值為已知 的。在-些情況中,要知道Vind的最大值可能會是很困難 的,尤其是在資料可能正在動態地改變時。 第二,分散到大陣列和/或從大陣列作收集的效率並不 19 201229898 高。在一些架構上,收集/分散的效能是與收集/分散操作所 存取的快取行之數量成反比。因此,與較小陣列相較之下, 由於所存取之快取行以及快取未命中的較大數量,於此等 架構上從大陣列作收集/分散到大陣列中可能會導致顯著 的效能降格。在其他架構上,收集/分散的效能是與所存取 的快取行之數量無關。與較小陣列相較之下,由於快取未 命中增加,於此等架構上從大陣列作收集/分散到大陣列中 可能會導致效能降格。 將收集/分散操作限制於存取較小陣列可能會是值得 嚮往的。將分散/收集操作限制於較小陣列的一種示範技術 是將Vind的值雜湊到一個較小的,例如為 小的,陣列中。此較小陣列之大小可係選擇來對應於單_ 個快取行。在一個實施例中,一種雜湊技術可係利用來自 於各個索引值(Vind)的log2(HashTableSize)個最低有效位 元(least significant bits, LSB )。於此範例中,若 HashTableSize是,例如,八,那麼係可利用來自於各個索引 值(Vind)的logJC也就是3)個LSB來編索引到雜凑表(例 如,Vind一hashed)中。在另一個範例中,一種雜湊技術可 係使用模數操作。於此範例中,係可使用索引值(Vind)除 以HashTableSize的餘數(例如,Vind mod HashTableSize) 來編索引到雜凑表中。若HashTableSize等於VLEN ,則可係 使用一個一般可規劃向量混洗操作,而非收集/分散操作, 如果這樣的混洗比收集/分散更快的話。 第4圖例示出與本揭露内容一致之用於單一索弓丨衝突
S 20 201229898 檢測之示範操作的一個流程圖400。如於本文中所說明的, 於此實施例中所例示的這些操作可係由與包括有一個向量 處理器的一個系統(例如系統100)相關聯的電路和/或軟 體模組進行。表2包括用於對應於第4圖之流程圖400的無序 單一索引衝突檢測之偽碼的一個範例。 表2 //初始化一些變數 _declspec(align(VLEN)) int conflictarray[HashTableSize]; Vmyid={0,l,2,…VLEN-1}; for(i=0; i < N; i+=VLEN) {
Vind=vload &Index[i]; //將索引雜湊到一個較小資料結構中 Vind_hashed=Vind % HashTableSize; mainmask=a// ones; do { //第1階段:檢測無衝突群集索引子集 vscatter conflictarray, Vind_hashed, Vmyid, mainmask; vgather conflictarray, Vind_hashed, Vwrittenid; successmask = Vwrittenid= =Vmyid ? mainmask; //第2階段:從列表中移除此群集 mainmask = (mainmask & (-successmask)); //第3階段:在Vind之無衝突元素上進行直方圖 vgather hist, Vind, Vdest, successmask; 21 201229898 vadd Vdest,Vdest,Vones,successmask; vscatter hist5 Vind, Vdest, successmask; } while(mainmask); 描繪於表2和第4圖中的操作分別與描繪於表1和第3圖 中的操作類似,除了conflictarray可為HashTableSize大小, 以及索引可被雜凑到這個conflictarray中以外。因此,只說 明有所差異的那些操作。 流程可從操作405開始。操作405可包括初始化,例如, 宣告和/或初始化變數。例如,可將一個陣列, 「conflictarray」,宣告為具有 HashTableSize 的大小。 conflictarray可係對齊於一個向量處理器(例如,第1圖中的 向量處理器104)的一個向量長度(VLEN)。在一些實施例 中,conflictarray可係對齊於被組配來執行於流程圖4〇〇中所 描繪之操作的處理器(例如,處理器1〇〇)的一個快取行大 小。操作405可進一步包括宣告和初始化向量Vmyid,如於 本文中針對操作305所說明的。 係可針對一個索引集合中之索引的各個子集(「量塊」) 進行操作310、410、315、320、325和330。因此,操作31〇 可包括量塊初始化4列如,可以對應於一個特定索引量塊(子 集)的索引Index[i]來載入一個向量Vind。可接著在操作41〇 將向量Vind雜湊到向量vind_hashed中。例如,Vind可係藉 由進行 Vind模HashTableSize ( Vind modulo HashTableSize ) s 22 201229898 而雜凑,如於本文中所說明的。操作410可進一步包括將一 個遮罩(例如,mainmask )設為全為一。可接著利用 Vind_hashed (取代Vind)來進行操作315,如於本文中所說 明的。可接著進行細作320、325和330,如於本文中所說明 的。 可重複操作315、320、325和330,直到已消耗Vind為止。 Index[i]的下一個向量可接著被載入到Vind (操作31〇),並 且可重複操作315、320、325和330。可重複操作31〇、41〇、 315、320、325、330和335,直到Index[i]之所有元素都已被 消耗為止。流程可接著在操作340結束。 與流程圖3 00之操作相比,流程圖4 〇 〇的這些操作係可提 供效率增進。例如,conflictarray的大小可係對應於被組配 來執行流程圖400之操作的處理器之向量長度。 C〇nflictarray之大小可被設計成對應於此處理器的一個快 取行大小。以此方式,流程圖4〇〇之操作可被設計來開拓被 組配來進行這些操作的處理器之架構。 雜濟會導致錯誤肯定(false_positive)。 t言之’雜凑,例如模數操作,可能會對不同索引提供相同 結果。這樣的錯誤肯定可能會因而導致平行性降低。 ,在於本文中所說明的直方圖範例1中,係可以任意順序 ^檢測衝突°易言之’陣列hist之元素被增量的順序並不會 =響結果(增量操作是交換性的)。在於本文中所說明的範 1中’並不能以任意順序來制破,因為處理陣列中之 兀素的順序可能會轉結果(即,除崎作是較換性的)。 23 201229898 ㈣,在順序可能會影響結果時,對於單一索引的衝突檢測 (例如’範例2)係以程式順序進行。 可利用例示於第3圖和/或第4圖中的方法來進行有序單 一索引衝突檢測。麻,係可叫有不㈣㈣分散操作 「vscatterp」來使用例示於表1或表2中的偽碼。如於本文中 所說明的,若在-個分散操作(例如,vs_)中有複數 個值被分散到同-個記憶體位置,則只有—個會成功。在典 型的分散操作中,係假設元素沒有排序,或者是重疊的數個 寫入係可以程式順序進行。 在vscatterp中’當複數個值被分散到同一個記憶體位置 夺(即j具有相同的索引)’ vscatterp係設計成確保在程式 員序中最早的值會最晚被寫人。例如,咖⑽叫可被設計成 最後寫入在程式順序中最早的值。在另一個範例中, vscatterp可被設計成寫入在程式順序中最早的那個,並抑制 後續的值。係可以多種方式來實施vscatterp。例如,vscatterp 可為一個新的指令。在另一個範例中,vscatterp可係對應於 可達到vscatterp結果的一個指令序列。因此,可藉由將以 「vscatterp」取代「vscatter」來利用例示於表1和2中的偽 碼來進行有序單一索引衝突檢測。那麼,程式順序可被保 留。 在例示於第3和4圖中的操作以及表1和表2之示範偽碼 令’係可在一個索引集合的一個索引子集(即,「量塊」)上 進行衝突檢測操作,一次一個量塊。量塊的大小可係對應於 進行這些操作的處理器之向量大小(即,SIMD寬度(例如, 24 201229898 VLEN))。易言之…個量塊被處理,然後下—個量塊被處 理’並以此類推,直到已處理此索引集合為止(利用,例如, 雙巢套迴圈)。對索引對進行衝突檢測至少部份係相對地更 為複雜’因為可能會有複數個排序限制。 第5圖例示出與本揭露内容—致之用於有序索引對衝 突檢測之示範操作的-個流程圖咖。如於本文中所㈣ 的,於此實施例中所例示的這些操作可係由與包括有—個 向量處理器的一個系統(例如系統_)相關聯的電路和/ 妹體模組進行。表3包括對應於流程圖遍之偽碼的一個 ip,你1。 和表2之示範柄所說_,在錄賺和 400中,會處理各個索引子 -¾ U A ]- 、里鬼」),直到整個子集都 被扁耗為止,然後才前進到 3之範例中,可係處理-個有序^子^。在流程圖500和表 中在一個元不若料個迭代 係在從此子集之開端開始可個量塊被消耗為止,而 作’直到檢測出資料相 的,多越好的元素上操 ™’目前子集從叫開^=例如’若向量長度為 突,則元素j會在目前迭代"在7^十1檢測到一個衝 一個子集會是從元素j+ln^耗。在下—個迭代中,下 ™n。處理可接著㈣,=且將會包括元素 止,例如元素j+m,其中 另個衝突被檢測出來為 消耗元素j+Ι到j+mq,迷^大於—且小於或等於VLEN,可 重複此迭代處理程序 接下來的迭代會從j+m開始。可 1㈣個集合都被操作且消耗掉為 25 201229898 止。 以此方式做迭代可簡化對於有庆各 ’序索引對的衝突檢測。 處停止各個迭代可容許藉 由檢測寫後讀關係來檢測衝突。易古+ 勿D之’若在純量程式中, 迭代j寫入-個位置,且迭代j+1從同1置讀取,則在8細 版本中,迭代J+1應該要讀取在迭代j被寫入的值,並且因此 不能夠與迭代j並行執行。在沒有以此方式迭代的情況下, 衝突檢測可能會包括檢測讀後寫和/或寫後寫關係,並且因 而會相對地較為複雜。 表3中之範例示出在有序索引對上的衝突檢測,於所檢 測出來的第一個寫後讀關係處停止。例如,可係利用一個 衝突陣列「conflictarray」來檢測寫後讀相依性。一開始, 可對conflictarray的所有元素寫入—個已知常數值(例如 CONSTANT)。卩接著湘來自於在純量情況巾要被寫入的 資料陣列的索引(例如ind_dst[i]),而利用,例如,vscatterp 來將獨特數分散到C〇nflictarray中。可對這些索引, Ind_dst[i],做雜湊以使得能夠利用相對較小的衝突陣列, 如於本文中所說明的。可接著利用來自於在純量情況中要 被讀取的資料陣列之索引(例如,Ind_src[i])而從 conflictarray收集資料。可對這些索引,Ind_src[i],做雜湊, 如於本文中所說明的。 因此,若收集操作收集到不為CONSTANT的一個值, 則用於分散的索引集合和用於收集的索引集合有重疊。重 疊並不一定會導致衝突。例如,若在純量情況中,迭代j永 9 26 201229898 遠從索弓丨j讀取並寫入到索引j-i,那麼這些操作係可被並行 因此’若檢測到重疊,係可進行進一步的處理來判定 在刀政和收集操作中的此重疊是否會導致違反資料相依 性。這個進一步的處理可係在當收集索引對應於比分散索 引更晚的純量迭代時(即,這個值應該要在讀取之前先被 寫入)進行。 例如’被分散到conflictarray的獨特數可為單調增加 的。易言之,這些獨特數的順序係設計成與純量迭代順序 匹配。在進行收集操作之後,可藉由判定所收集的第j個元 素是否大於所分散的第j個元素,而判定出所元素j是否從較 晚的迭代收集了 一個值(即,可能會違反資料相依性)。 表3 V_hi = {CONSTANT, CONSTANT, ..., CONSTANT} V_upperbound = {N, N, ..., N}; while(i<N) //第i階段:檢測無衝突群集索引子集 mainmask = {i, i+1, ..., i+VLEN-1} < V upperbound;
Vind_src= vload &Ind_src[i] % VLEN;
Vind_dst= vload &Ind_dst[i] % VLEN; vstore conflictarray, V_hi vscatterp conflictarray, Vind dst, Vmyid, mainmask; vgather conflictarray, Vind_src, Vwrittenid, mainmask; 27 201229898 //第2階段:運算遮罩並截斷它 mainmask = Vwrittenid >= Vmyid ? mainmask; vmasktruncateZR(mainmask); //第2階段:在無衝突索引上進行實際操作 vgather A,Vind一src,Vsrc,mainmask; vscatter A,Vind dst,Vsrc,mainmask; i+= popcount(mainmask); 現在’請參考第5圖和表3 ’流程可從操作505開始。操 作505可包括初始化,例如,宣告和初始化變數。例如,一 個陣列,「conflictarray」,可被宣告成具有HashTableSize的 大小,如於本文中針對第4圖和表2所說明的(例如, HashTableSize可係對應於被組配來進行第5圖之操作的一個 處理器之向量長度VLEN)。可宣告一個向量,Vmyid,並可 以單調增加的獨特值,例如{〇, 1,2,...,VLEN-1},來將其初 始化。在表3中之偽碼中,係假設已進行初始化。 操作51 〇可包括檢測一個索引子集的一個無衝突群 組。雖然此子集可係對應於一個量塊,下一個量塊亦係可 與目前量塊重疊,如於本文中所說明的。例如,操作51〇可 包括依據針對一個量塊之迭代號碼的集合(即,i、i+l..... i+VLEN 1 )與被初始化成n的一個向量v—間之 比較來设定一個遮罩「mainmask」。此遮罩係設計來識別出 在目則迭代中要在上頭做操作的元素。若此索引子集含有 28 S] 201229898 比對應的向量長度更少的元素(例如,此子集靠近索引集 合的末端(即,N-KVLEN)),則此遮罩可不被設為全為一。 操作510可進一步包括從Ind—src[i]載入和雜湊一第一 索引集合到一個向量Vind_src中,以及從ind_dst[i]載入和雜 泰一第二索引集合到一個向量Vind_dst中。在純量情況中, Ind-src[i]係對應於被讀出的索引,且Ind_dst[i]係對應於被寫 入的索引。Vind_src和Vind_dst可具有為VLEN的長度。 Ind—src[i]和 ln(i_(ist[i]可分別藉由進行 lnd_src[i]模 VLEN和 Ind_dst[i]模VLEN,而分別被雜湊到Vind_src和Vind—dst中0 操作510可進一步包括將一個已知的相對較大值 (V_hi )集合儲存到conflictarray中。例如,V_hi可係對應 於VLEN。若收集到還沒有被分散到的一個元素,則所收集 到的這個元素之值可能是V_hi (例如,VLEN),對應於沒 有衝突的一個索引。易言之,V_hi可被選擇成使其值大於 Vmyid的任何獨特(例如,單調增加的)值。 操作510可進一步包括利用Vind_dst中之「目標」索引 而將Vmyid分散至conflictarray中。例如,可利用vscatterp來 分散Vmyid ’如於本文中所說明的。操作51〇可包括利用 Vind_src中之「來源」索引而將conf|ictarray之内容收集到一 個向量,writtenid,中。 由於操作510 ’故若在向量Vmyid中的一個值大於在向 量Vwrittenid中的對應值,那麼就可能存在有資料相依性衝 突。這係對應於在純量序列中之被讀出的索引和被寫入的索 引是相同的且讀取是發生在寫入之後的情況。 29 201229898 操作515可包括運算一個遮罩。例如,此遮罩可係藉由 將Vwritteni的第j個值與Vmyid的第j個值做比較來運算並 且若Vwritteni的第j個值大於或等sVmyid的第』個值那麼 (mainmask之)對應的遮罩位元便被維持。否則的話, mainmask之對應的遮罩位元便被清除。易言之,操作515係 a又3十來在存在有寫後讀關係的時候清除mainmask之對應位 元。 操作515可進一步包括截斷遮罩。例如,可利用 vmasktruncateZR(mainmask)來截斷遮罩(例如, mainmask )。VmasktruncateZR係設計來識別對應於一第一資 料相依性的一個遮罩位元’並且係設計來接著清除在所識別 之遮罩位元之後的(即’更具有效性的)所有的遮罩位元。 例如’若遮罩=ObllOl ’ 則 vmasktruncateZR(mask;)= ObOOOl。有多種方式可實施vmasktruncateZR。例如, vmasktruncateZR可為一個新的指令。在另一個範例中, vmasktruncateZR可係對應於被設計來達到vniasktruncateZR 結果的一個指令序列。 在mainmask上使用vmasktruncateZR係設計來保證讀後 寫關係受到尊重。讀後寫相依性只可在當被寫入到ind[j] (ind[i]==ind[j])的值之遮罩位元為1且j大於i時從ind[i]讀出 的遮罩位元時為零的時候被違反。藉由在i截斷遮罩,則對 於此迭代,接下來的寫入會被自動失效,也就是不會在讀取 之前發生。 易言之,在運算出遮罩之後,mainmask係代表可被容 30 201229898 許同時執行的,亦即’不會破壞寫後讀關係的,一個獨特元 素集合。然而’係可能存在有其他類型的衝突,例如,讀後 寫和/或寫後寫關係。對於並不會違反寫後讀關係的元素而 言,mainmask之位元可為一,但這些元素可能會違反讀後 寫和/或寫後寫關係。vmasktruncateZR係設計來避免可能會 違反,例如,讀後寫和/或寫後寫關係的操作,而不具體地 識別出此等關係。清除遮罩位元會導致對應於被清除之位元 的操作係在之後的迭代中被執行。 操作520可包括在無衝突元素上操作。例如,陣列A的 由Ind_src[i]所指的和對應於值為一之mainmask位元的元素 可被收集到向量Vsrc中。Vsrc的元素可接著被分散到陣列A 之由Ind—dst[i]所指的位置中。易言之,收集和分散操作可導 致陣列A之由Ind一src[i]所指的值被指派到陣列A之由 Ind_dst[i]所指的位置。 操作520可包括判定實際被處理的元素之數量。例如, 可藉由 p〇pCOUnt(mainmask)(即,在mainmask 中的人 口數, 或—的數量)來增量索引i,以在此操作中藉由所處理之元 素的數量推進索引i。可重複操作51〇、515和52()直到整個 索引集合(例如,N個元素)皆已被消耗為止。 因此,流程圖500之操作係設計來(利用,例如, vscatterp)將一個獨特(且以程式順序單調增加的)值集合 分散到一個衝突陣列中。這些獨特值可係於,例如,初: 化時,被儲存在一個向量暫存器,Vmyid,中。目標索引可 係儲存在另-個向量暫存器,vind_dst,中。衝突陣列中的 31 201229898 值可接著利用儲存在vind—src中的來源索引而被收集到另 一個向量暫存器,Vwrittenid,中。可接著將vwrittenid與
Vmyid做比較。若Vwrittenid[i]大於或等於vmyid[i],那麼對 於所對應的目標和來源索引對而言,可能要尊重這個寫後讀 關係。 例如’一個純量序列可能包括有某個數量的(例如, 四個)迭代: 迭代ID 迴圈指令 〇 A[2]=A[1] 1 A[3]=A[1] 2 A[0]=A[2] 3 A[1]=A[3] 可接著以獨特的單調增加值來初始化一個向量vmyid :
Vmyid = {0, 1,2, 3}。 在這個範例中,Vmyid係對應於迭代ID。用於分散操作 (vscatterp )的vind_dst係對應於在陣列A中的被寫入之索 引: ’、
Vind_dst = {2, 3, 0, 1}。 用於收集操作的Vind_src係對應於在陣列A中的被讀出之索 引: ’、
Vind_src = {1,1,2, 3}。 在這個範例中,各個索引都小於衝突陣列的大小(其如下 面所述地為4) VLEN,所以並沒有進行雜湊。 係可以一個常數來初始化conflictarray,例如,
S 32 201229898 conflictarray = {4, 4, 4, 4}。 假設在一個分散操作(vscatterp conflictarray, Vind_dst, Vmyid,mainmask)之後,mainmask全為一,則Vmyid之元 素可在Vind_dst所指之位置被寫入到conflictarray中: conflictarray = {2, 3, 0, 1}. 具體而言,在這個範例中的此分散操作產生 對於i=〇,l 3,conflictarray[Vind_dst[i]]=Vmyid[i]。 易言之,Vmyid的第一個元素(即,〇 )可被寫入到在 conflictarray中之由Vind_dst的第一個元素(即,2 )所指的 位置’ Vmyid的第二個元素(即’ 1 )可被寫入到在conflictarray 中之由Vind_dst的二個元素(即,3)所指的位置,以此類 推。 在一個收集操作(vgather conflictarray,Vind_src, Vwrittenid,mainmask)之後,可從Vind_src所指之位置讀 出conflictarray的元素並將其寫入到Vwrittenid中:
Vwrittenid = {3, 3, 0,1}。 具體而言,在這個範例中的此收集操作產生 對於卜0,1,...,3,\/^14«61^(1以]=(:〇11£^(^〇^[^1^_51^[1]]。 易言之,conflictarray的第二個元素(即,3,對應於Vind_src[0] —1)可被寫入到Vwrittenid的第一個元素,conflictarray的 第一個元素(即,3 ’對應於Vind_src[l]二1 )可被寫入到 Vwrittenid的第二個元素,以此類推。 可接著藉由運算Vwrittenid = {3, 3, 0,1}和Vmyid = {0, 1,2, 3}來運算一個遮罩,以產生: 33 201229898 mainmask = {1,1,0, 〇}。 若在向量Vmyid中的一個值大於在Vwrittenid中的對應值 (即,Vmyid[i] > Vwrittenid[i]),那麼便可能存在有一個寫 後讀資料相依性。在Vmyid中的值係對應於純量序列中之迭 代號碼(迭代ID )。在Vwrittenid中的值係對應於純量序列中 之迭代號碼,其中「被寫入」索引與對應的「被讀出」索引 是一樣的。例如,對於迭代0 (Vmyid[0]=0)而言,被讀出 索引為1 (lnd_src[0]=l),而對於迭代3 (Vwrittenid[0]=3) 而言,寫入索引為1 (Ind一dst[3]=l)。同樣地,對於迭代2 (Vmyid[2]=2)而言,被讀出索引為2 (Ind_src[2]=2),而 對於迭代〇而言,寫入索引為2 (Ind_dst[0]=2)。 因此,對應於Vwrittenid >= Vmyid的各個遮罩位元為 一’且對應於Vwrittenid < Vmyid的各個遮罩位元為零。例 如,對於Vwrittenid和Vmyid的最前面兩個位元而言,遮罩 位元是一,且對於Vwrittenid和Vmyid的最後面兩個位元而 言,遮罩位元是零。mainmask因而指出在最前面的兩個迴 圈迭代(即,迭代ID 〇和1)之間並沒有衝突,所以這兩個 迭代玎並行進行。mainmaslc進一步指出在最後面的兩個迴 圈迭代(即,迭代ID 2和3)與最前面的兩個迴圈迭代中之 成另一者或二者之間可能有衝突,因此不能與最前面的 兩個迴圈迭代並行執行。 藉由審視這個相當簡單的示範純量序列,可識出,在對 應於迭代ID 〇和1的操作中,陣列A的位置丨被讀取,且陣列 A的位置2和3被寫入。這可能會很明顯,即,對於這兩個迭 34 201229898 代ID而言’並沒有任何的讀後寫衝突、寫後讀衝突或寫後寫 衝突m應於迭似D咏丨的操作係可被並行進行 (即’可被「SIMD化」)。 繼續這個範例,對應於迭代ID 2和3的操作,除了其他 的以外,係包括有對於陣列A之位置2和3的讀取以及對陣列 A之位置1的寫入。因此,對於位置2的讀取不可與寫入到位 置2 (迭代IDG)並行執行,並且對於位置3的讀取不可與寫 入到位置3 (迭代ID D並行執行,亦即,在迭代ID 0與迭 代ID 2及迭代ID丨與迭代1〇 3之間存在有寫後讀關係。此 外’對位置1的寫入不可與從位置1之讀取並行進行,亦即, 在迭代ID 3與物D G和/或迭代m丨之間存在有讀後寫關 係。 φ 因此,利用與本揭露内容(例如,第5圖和,例如,表3) 的一種方法並產生—個為{丨,1,〇,〇}的mainmask,指出對應 於迭代〇和1之操作係可被並行進行,而對應於迭代ID 2 和3的操作不可與對應於迭代①咏1的操作並行進行。這 符^藉由審視這個相當簡單的範例所得到的結論。雖然這 個細例並不包括雜凑,但流程圖5⑼的操作和表3之範例係 可包括雜湊,如於本文中所說明的。 體而。,業已說明被組配來在將純量處理程序轉換成 並打處理程㈣檢顺突的純。#已綱被設計來在無序 單索引、有序單—索引和/或有序索引對中檢測衝突的方 法這(二)方法可包括被設計成確保在複數個值被分散到 同〆個位置時在程式順序中最早的值會最後被寫入的-個 35 201229898 分散操作之變體,即’ vscatterp。這(此、 ^ ^ 、二)方法可包括被設 计成在發現寫後讀關係時對-個迭代截斷衝突檢測以避免 在這個迭代中之其他讀取和/或寫人衝突的_個遮罩截斷操 作,即’ VmasktnmCateZR(mask)。在一些實施例中這(些) 方法係被設計成由包括有分散和㈣輕的—個系統執 行。此等分散和收集功能可接著被開祐來有效地檢測衝突, 而無須評估所有的可能索引組合。 於本文中已說明-種示範系統。可能會有修改體。例 如,記憶體126可包含-或多個下面的記憶體類型:半導體 韌體記憶體、可規劃記憶體、非依電性記憶體、唯讀記憶體、 可電氣式規劃記龍 '隨機存取記憶體、快取記憶體、磁碟 記憶體、和/或光碟記憶體。額外地,或,或者是,記憶體 126可包含其他和/或之後所研發的電腦可讀記紐類型。 於本文中所說明的這些方法之實施例可係實施在包括 有一❹__體的系統中’這—或多個儲存媒體個別地 或組合式地具有儲存如之指令,這些指令在由—或多個處 理器執行時會進行那些方法,此,處理器可包括,例如, 個..电量處理單元(例如,第i圖之純量處理單元嫩)、一 個向量處理單元(例如,第丨圖之向量處理單元刚)、和/ 或可規畫j電路gj此,係意欲要使依據於本文巾所說明的這 些方法的操作可被散佈衫㈣體裝置中m意欲要 使這些方法之操作係可被_地或以子組合的方式進行如 熟於此技者會可瞭解的。因此,並非在各㈣程 圖中的所有 私作都4要被執行’並且本揭露内容係明顯意欲要賦能
S 36 201229898 此等操作之所有的子組合,如熟於此技者會可瞭解的。 儲存媒體可包括任何類型的有形媒體,例如,任何類型 的碟片’包括軟碟、光碟、唯獨光碟記憶體(compact disk read-only memorie,cd-ROM)、可複寫光碟(compact disk fewiitable,CD-RW)和磁光碟,半導體裝置,例如唯讀記憶 體(read-only memory, R〇M)、隨機存取記憶體(random access memory,RAM)(例如動態和靜態RAM)、可拭除可 規劃唯項記憶體(erasable programmable read-only memory, EPROM )、可電氣式拭除可規劃唯讀記憶體(electricaUy erasable programmable read-only memory, EEPROM)、快閃 記憶體、磁卡或光學卡,或任何類型的適於儲存電子指令之 媒體。 於本文中之任何實施例中使用時,「電路」可包含,單 獨地或是以組合形式,例如,儲存由可規劃電路所執行之指 令的硬體電路、可規劃電路、狀態機電路、和/或韌體。 依據一個面向,係揭露有一種用於衝突檢測之方法。此 方法可包括下列步驟:載入一個資料集合,該資料集合包 含由索引組成之一第一序列,其中各個索引係對應於—個 位址,並且該第一序列係對應於一個純量處理程序的執行 順序;判定在該資料集合中的匹配索引;判定在該資料集 合中的獨特索引;從該等匹配索引中選擇一個索引,其中 若在該純量處理程序中的一個操作之結果與該執行順序有 關,則所選擇的該索引係在該第一序列中為較早者;形成 由索引組成的一個無衝突群集,該無衝突群集包括該等獨 37 201229898 特索砂所選擇的該索f載入對應於該無衝突群华 之至少-部分的資料,並且並行地在該等資料上進行該操 作。 依據另-個面向,係揭露有一種系統,其包含具有個 別地或以組合形式儲存在内之指令的一或多個儲存媒體, 該等指令在被-或多個處理器執行時會致使包含下列之操 作:載入-個資料集合,該資料集合包含由索引組成之一 第序列’其中各個索引係對應於一個位址,並且該第一 序列係對應於-個純量處理程序的執行順序;判定在該資 料集&中的匹8己索引,判定在該資料集合中的獨特索引; 從該等匹配索引中選擇一個素引,其中若在該純量處理程 序中的-個操作之結果與該執行順序有關,則所選擇的該 索引係在該第一序列中為較早者;形成由索引組成的-個 無衝突群集,該無衝突群集包括該等獨特索引和所選擇的 該索引;以及載入對應於該無衝突群集之至少一部分的資 料,並且並行地在該等資料上進行該操作。 依據又個面向,係揭露有一種組配來檢測衝突的設 備。該設備可包括-個記憶體;以及一個處理器,該處理 器包含-個純量處理單元和一個向量處理單元。該處理器 係”且配來進行下列步驟:載入_個資料集合,該資料集合 包3由索引組成之一第一序列,其中各個索引係對應於該 己隐體中的-個位址’並且該第一序列係對應於在使用該 純量處理單元時的一個純量處理程序之執行順序;判定在 該資料集合中的匹配索引;判定在該資料集合中的獨特索
S 38 201229898 引;從該等匹配索引中選擇一個索引,其中若在該純量處 理程序中的一個操作之結果與該執行順序有關,則所選擇 的該索引係在該第一序列中為較早者;形成由索引組成的 一個無衝突群集,該無衝突群集包括該等獨特索引和所選 擇的該索引;以及載入對應於該無衝突群集之至少一部分 的資料,並利用該向量處理單元並行地在該等資料上進行 該操作。 已於本文中所運用的詞語和表達係用作說明用語,而非 限制用語,並且並沒有意圖要藉由使用這樣的詞語和表達來 排除所示出和所說明的特徵(或其中之部分)之任何等效 體,並且應認同,係可能會有落在申請專利範圍之範疇内的 許多修改體。因此,本案申請專利範圍係意欲要涵蓋所有這 樣的等效體。 I:圖式簡單說明3 第1圖例示出與本揭露内容一致的一個示範系統實施 例; 第2圖例示出用於與本揭露内容一致的衝突檢測之示 範操作的流程圖; 第3圖例示出用於與本揭露内容一致的單一索引衝突 檢測之示範操作的流程圖; 第4圖例示出用於與本揭露内容一致的單一索引衝突 檢測之示範操作的流程圖;並且 第5圖例示出用於與本揭露内容一致的有序索引對衝 突檢測之示範操作的流程圖。 39 201229898 【主要元素符號說明】 100…系統/處理器 102.. .純量處理單元 104.. .向量處理單元/向量處理器 106.. .記憶體單元 112.. .純量暫存器 114…向量暫存器 122.. .快取記憶體 124.. .記憶體控制器 126.. .記憶體 132.. .混洗邏輯 134.. .分散/收集邏輯 200、300、400、500...流程圖 205〜230、305〜340、401 〜410、505〜520··.操作
S 40

Claims (1)

  1. 201229898 七、申請專利範圍: 1. 一種用於衝突檢測之方法,其包含下列步驟: 載入一個資料集合,該資料集合包含由索引組成之 一第一序列,其中各個索引係對應於一個位址,並且該 第一序列係對應於一個純量處理程序的執行順序; 判定在該資料集合中的匹配索引; 判定在該資料集合中的獨特索引; 從該等匹配索引中選擇一個索引,其中若在該純量 處理程序中的一個操作之結果取決於該執行順序,則所 選擇的該索引係在該第一序列中為較早者; 形成由索引組成的一個無衝突群集,該無衝突群集 包括該等獨特索引和所選擇的該索引;以及 載入對應於該無衝突群集之至少一部分的資料,並 且並行地在該等資料上進行該操作。 2. 如申請專利範圍第1項之方法,其中判定在該資料集合 中的匹配索引之步驟包含分散以及收集。 3. 如申請專利範圍第2項之方法,其中分散係設計成會確 保在該純量處理程序之該執行順序中為最早的一個索 引最後被寫入。 4. 如申請專利範圍第2項之方法,其進一步包含下列步驟: 載入具有數個獨特值的一個向量,其中該等獨特值 係設計成要被分散,並且其中該向量的長度係對應於被 組配來進行該操作的一個向量處理器之向量長度。 5. 如申請專利範圍第1項之方法,其中該資料集合包含由 41 201229898 索引組成之該第一序列的經雜湊值,雜湊之步驟係組配 成利用所具有之大小比一最大第一索引小的一個陣列 來有助於判定該等匹配索引。 6. 如申請專利範圍第1項之方法,其中判定在該資料集合 中的該等匹配索引之步驟係以該純量處理程序之該執 行順序進行。 7. 如申請專利範圍第1項之方法,其中該資料集合包含由 索引組成之一第二序列,並且該第二序列係對應於該純 量處理程序的該執行順序。 8. 如申請專利範圍第7項之方法,其進一步包含下列步驟: 檢測在由索引組成之該第一序列與該第二序列之 間的寫後讀關係(read-after-write dependencies) 0 9. 如申請專利範圍第8項之方法,其中該部分係至少部份 基於所檢測出的一個寫後讀關係而被判定。 10. —種系統,其包含具有個別地或以組合形式儲存在其上 之指令的一或多個儲存媒體,該等指令在被一或多個處 理器執行時會致使包含下列之操作: 載入一個資料集合,該資料集合包含由索引組成之 一第一序列,其中各個索引係對應於一個位址,並且該 第一序列係對應於一個純量處理程序的執行順序; 判定在該資料集合中的匹配索引; 判定在該資料集合中的獨特索引; 從該等匹配索引中選擇一個索引,其中若在該純量 處理程序中的一個操作之結果取決於該執行順序,則所 S 42 201229898 選擇的§玄索引係在該第一序列令為較早者; 形成由索?丨組成的-個無触群集,該無衝突群集 包括該等獨特索引和所選擇的該索引;以及 載入對應於該無衝突群集之至少—部分的資料,並 且並行地在該等資料上進行該操作。 11. 如申請專利範圍第1G項之系統,其中判定在該資料集合 中的匹配索引之操作包含分散以及收集。 12. 如申請專利範圍第_之系統,其中分散係設計成會確 保在該純量處理程序之該執行順序中為最早的一個索 引最後被寫入。 如申請專利範圍第10項之系統,其中該資料集合包含由 索引組成之一第二序列,並且該第二序列係對應於該純 量處理程序的該執行順序。 14. 如申請專利範圍第13項之系統,其中該等指令在被一或 多個該等處理器執行時會致使包含下列之操作: 檢測在由索引組成之該第一序列與該第二序列之 間的寫後讀關係。 15. —種組配來檢測衝突的設備’該設備包含: 一個記憶體;以及 一個處理器,其包含一個純量處理單元和一個向量 處理單元,該處理器係組配來進行下列步驟: 載入一個資料集合,該資料集合包含由索引組 成之一第一序列’其中各個索引係對應於該記憶體 中的一個位址’並且該第一序列係對應於在使用該 43 201229898 純量處理單元時的一個純量處理程序之執行順序; 判定在該資料集合中的匹配索引; 判定在該資料集合中的獨特索引; 從該等匹配索引中選擇一個索引,其中若在該 純量處理程序中的一個操作之結果取決於該執行 順序,則所選擇的該索引係在該第一序列中為較早 者; 形成由索引組成的一個無衝突群集,該無衝突 群集包括該等獨特索引和所選擇的該索引;及 載入對應於該無衝突群集之至少一部分的資 料,並利用該向量處理單元並行地在該等資料上進 行該操作。 16.如申請專利範圍第15項之設備,其中該處理器包含分散 和收集邏輯,並且判定匹配索引之步驟包含分散以及收 集。 Π.如申請專利範圍第16項之設備,其中分散係設計成會確 保在該純量處理程序之該執行順序中為最早的一個索 引最後被寫入。 18. 如申請專利範圍第15項之設備,其中該資料集合包含由 索引組成之該第一序列的經雜湊值,雜湊之步驟係組配 成利用所具有之大小比一最大第一索引小的一個陣列 來有助於判定該等匹配索引。 19. 如申請專利範圍第15項之設備,其中該資料集合包含由 索引組成之一第二序列,並且該第二序列係對應於該純 S 44 201229898 量處理程序的該執行順序。 20.如申請專利範圍第19項之設備,其中該處理器進一步係 組配來進行下列步驟: 檢測在由索引組成之該第一序列與該第二序列之 間的寫後讀關係。 45
TW100145974A 2010-12-21 2011-12-13 用於衝突檢測之方法和系統以及組配來檢測衝突的設備 TWI524273B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US12/974,157 US8688957B2 (en) 2010-12-21 2010-12-21 Mechanism for conflict detection using SIMD

Publications (2)

Publication Number Publication Date
TW201229898A true TW201229898A (en) 2012-07-16
TWI524273B TWI524273B (zh) 2016-03-01

Family

ID=46236003

Family Applications (1)

Application Number Title Priority Date Filing Date
TW100145974A TWI524273B (zh) 2010-12-21 2011-12-13 用於衝突檢測之方法和系統以及組配來檢測衝突的設備

Country Status (5)

Country Link
US (1) US8688957B2 (zh)
EP (1) EP2656229B1 (zh)
CN (1) CN103262058B (zh)
TW (1) TWI524273B (zh)
WO (1) WO2012087583A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI597620B (zh) * 2007-12-28 2017-09-01 英特爾股份有限公司 提供通用gf(256)simd密碼算術功能的指令與邏輯

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US8521705B2 (en) * 2011-07-11 2013-08-27 Dell Products L.P. Accelerated deduplication
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US9411592B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9411584B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US9659046B2 (en) 2013-07-31 2017-05-23 Oracle Inernational Corporation Probing a hash table using vectorized instructions
US9256631B2 (en) 2013-07-31 2016-02-09 Oracle International Corporation Building a hash table using vectorized instructions
CN105940381B (zh) * 2013-12-26 2019-11-15 英特尔公司 存储器控制器和由存储器控制器执行的方法
US9418041B2 (en) 2014-01-16 2016-08-16 Qualcomm Incorporated Sample process ordering for DFT operations
JP6245031B2 (ja) * 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US20160026607A1 (en) * 2014-07-25 2016-01-28 Qualcomm Incorporated Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
US9910650B2 (en) * 2014-09-25 2018-03-06 Intel Corporation Method and apparatus for approximating detection of overlaps between memory ranges
CN104536958B (zh) * 2014-09-26 2018-03-16 杭州华为数字技术有限公司 一种复合索引方法及装置
US9710279B2 (en) * 2014-09-26 2017-07-18 Intel Corporation Method and apparatus for speculative vectorization
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US9582422B2 (en) 2014-12-24 2017-02-28 Intel Corporation Hardware prefetcher for indirect access patterns
CN104536898B (zh) * 2015-01-19 2017-10-31 浙江大学 C程序并行区域的检测方法
US9875213B2 (en) * 2015-06-26 2018-01-23 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed histogram functionality
US10459723B2 (en) 2015-07-20 2019-10-29 Qualcomm Incorporated SIMD instructions for multi-stage cube networks
JP6493088B2 (ja) * 2015-08-24 2019-04-03 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10185562B2 (en) 2015-12-24 2019-01-22 Intel Corporation Conflict mask generation
US20170192791A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Counter to Monitor Address Conflicts
CN107315566B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行向量循环移位运算的装置和方法
WO2019005165A1 (en) 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
CN107748723B (zh) * 2017-09-28 2020-03-20 中国人民解放军国防科技大学 支持无冲突跨步按块访问的存储方法及访存装置
KR102811045B1 (ko) 2020-03-06 2025-05-21 삼성전자주식회사 데이터 버스, 그것의 데이터 처리 방법 및 데이터 처리 장치
WO2023086271A1 (en) 2021-11-15 2023-05-19 Google Llc Sparse simd cross-lane processing unit
US12353887B2 (en) * 2021-11-15 2025-07-08 Google Llc Programmable accelerator for data-dependent, irregular operations
EP4320514A1 (en) 2021-11-22 2024-02-14 Google LLC Cooperative instruction prefetch on multicore system
GB2619904B (en) * 2022-03-10 2024-07-03 Advanced Risc Mach Ltd Data processing apparatus, method and virtual machine
WO2023183015A1 (en) 2022-03-22 2023-09-28 Google Llc Streaming transfers and ordering model

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4953101A (en) 1987-11-24 1990-08-28 Digital Equipment Corporation Software configurable memory architecture for data processing system having graphics capability
EP0340453B1 (en) 1988-04-01 1997-06-11 Nec Corporation Instruction handling sequence control system
WO1994003860A1 (en) 1992-08-07 1994-02-17 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
WO2000062182A2 (en) * 1999-04-09 2000-10-19 Clearspeed Technology Limited Parallel data processing apparatus
US6591345B1 (en) 2000-11-28 2003-07-08 Hewlett-Packard Development Company, L.P. Method for ensuring maximum bandwidth on accesses to strided vectors in a bank-interleaved cache
JP2003196084A (ja) * 2001-12-25 2003-07-11 Toshiba Corp リードモディファイライトユニットを有するシステム
ATE372542T1 (de) 2002-05-24 2007-09-15 Nxp Bv Zugriff zum breiten speicher
CN100541425C (zh) * 2002-05-24 2009-09-16 Nxp股份有限公司 标量/矢量处理器
GB2417586B (en) * 2002-07-19 2007-03-28 Picochip Designs Ltd Processor array
US6944744B2 (en) 2002-08-27 2005-09-13 Advanced Micro Devices, Inc. Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor
AU2003900733A0 (en) 2003-02-19 2003-03-06 Canon Kabushiki Kaisha Dynamic Reordering of Memory Requests
US7421565B1 (en) 2003-08-18 2008-09-02 Cray Inc. Method and apparatus for indirectly addressed vector load-add -store across multi-processors
EP1794671A2 (en) 2004-09-21 2007-06-13 Koninklijke Philips Electronics N.V. Micro processor device and method for shuffle operations
US7627735B2 (en) * 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
JP2007334563A (ja) 2006-06-14 2007-12-27 Nec Corp マスク付きベクトル演算処理装置
DE602006006990D1 (de) 2006-06-28 2009-07-09 St Microelectronics Nv SIMD-Prozessorarchitektur mit gruppierten Verarbeitungseinheiten
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
JP4913685B2 (ja) * 2007-07-04 2012-04-11 株式会社リコー Simd型マイクロプロセッサおよびsimd型マイクロプロセッサの制御方法
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US9513905B2 (en) 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8583898B2 (en) * 2009-06-12 2013-11-12 Cray Inc. System and method for managing processor-in-memory (PIM) operations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI597620B (zh) * 2007-12-28 2017-09-01 英特爾股份有限公司 提供通用gf(256)simd密碼算術功能的指令與邏輯

Also Published As

Publication number Publication date
US20120159130A1 (en) 2012-06-21
TWI524273B (zh) 2016-03-01
EP2656229A2 (en) 2013-10-30
WO2012087583A2 (en) 2012-06-28
EP2656229B1 (en) 2019-06-19
US8688957B2 (en) 2014-04-01
CN103262058A (zh) 2013-08-21
EP2656229A4 (en) 2018-04-04
CN103262058B (zh) 2016-06-22
WO2012087583A3 (en) 2012-09-27

Similar Documents

Publication Publication Date Title
TW201229898A (en) Mechanism for conflict detection using SIMD
US10860326B2 (en) Multi-threaded instruction buffer design
CN111580864B (zh) 一种向量运算装置及运算方法
CN101978350B (zh) 用于实现高效同步和并行归约操作的向量指令
US8200949B1 (en) Policy based allocation of register file cache to threads in multi-threaded processor
US20100318764A1 (en) System and method for managing processor-in-memory (pim) operations
Khorasani et al. Stadium hashing: Scalable and flexible hashing on gpus
US20180275991A1 (en) Compiler-assisted inter-simd-group register sharing
KR20190029515A (ko) 비트폭이 다른 연산 데이터를 지원하는 연산 유닛, 연산 방법 및 연산 장치
US7640284B1 (en) Bit reversal methods for a parallel processor
CA2758366A1 (en) System, device, and method for on-the-fly permutations of vector memories for executing intra-vector operations
US20090328057A1 (en) System and method for reservation station load dependency matrix
US20190236752A1 (en) Wide key hash table for a graphics processing unit
US8484274B2 (en) Optimal padding for the two-dimensional fast fourier transform
CN107315568B (zh) 一种用于执行向量逻辑运算的装置
KR20210156860A (ko) True/false 벡터 인덱스 레지스터
US8826252B2 (en) Using vector atomic memory operation to handle data of different lengths
CN116507999B (zh) 一种处理器、处理方法及相关设备
CN102681820A (zh) 动态分簇的寄存器堆及使用该寄存器堆的可重构计算装置
US20080022072A1 (en) System, method and medium processing data according to merged multi-threading and out-of-order scheme
CN111158757B (zh) 并行存取装置和方法以及芯片
Misra et al. Parallel mutual information based construction of genome-scale networks on the Intel® Xeon Phi™ Coprocessor
US12014215B2 (en) Active scheduling method and computing apparatus
US20250199857A1 (en) Electronic device and method with tensor management and prefetching
TWI307478B (en) Method for scheduling instructions for clustered digital signal processors and method for allocating registers using the same

Legal Events

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