TWI724066B - 分散縮減指令 - Google Patents
分散縮減指令 Download PDFInfo
- Publication number
- TWI724066B TWI724066B TW105138472A TW105138472A TWI724066B TW I724066 B TWI724066 B TW I724066B TW 105138472 A TW105138472 A TW 105138472A TW 105138472 A TW105138472 A TW 105138472A TW I724066 B TWI724066 B TW I724066B
- Authority
- TW
- Taiwan
- Prior art keywords
- value
- variables
- register
- register array
- processor
- Prior art date
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
揭示單指令多資料(SIMD)技術。處理裝置包含處理器核心及記憶體。處理器核心從軟體應用接收請求以對包含第一輸入值及暫存器值的第一組變數執行作業以及對包含第二輸入值及第一暫存器值的第二組變數執行作業。處理器核心向量化對第一組變數及第二組變數的作業。處理器核心平行地執行對第一組變數及第二組變數的作業以取得第一作業值及第二作業值。處理器核心對第一作業值及第二作業值執行水平加法作業以及將結果寫至記憶體。
Description
本發明是關於單指令多資料(SIMD)之並列性的技術,尤其是關於分散縮減指令。
單指令多資料(SIMD)架構可以在微處理器系統中實施以使一指令能夠對數個運算元平行地作業。SIMD架構係利用緊縮多個資料元件於一暫存器或連續的記憶體區內。藉由平行的硬體執行,可以由一指令對於分別的資料元件執行多個作業以增加微處理器系統的性能。
100‧‧‧記憶體裝置
102‧‧‧處理器
300‧‧‧管線
390‧‧‧核心
400‧‧‧處理器
500‧‧‧多處理器系統
600‧‧‧第三系統
700‧‧‧系統單晶片
800‧‧‧系統單晶片
900‧‧‧計算系統
從本發明的各式各樣實施例之附圖及下述詳細說明,將可以更完整地瞭解本發明的各式各樣的實施例。
圖1A顯示根據一實施例之執行單指令多資料(SIMD)作業之耦合至處理器的記憶體裝置圖。
圖1B顯示根據一實施例之對值陣列執行水平加法運算的方法。
圖1C顯示根據一實施例之對值陣列執行水平加法作業的方法。
圖2顯示根據一實施例之實施修改的水平加法作業之單指令多資料(SIMD)指令。
圖3A是方塊圖,顯示根據一實施例之有序管線及暫存器重命名級、亂序核發/執行管線。
圖3B是方塊圖,顯示根據一實施例之用於實施安全記憶體再分割的處理器之微架構。
圖4是方塊圖,顯示根據一實施例之用於包含邏輯電路以執行安全記憶體再分割的處理器之微架構。
圖5是根據一實施之電腦系統的方塊圖。
圖6是根據另一實施之電腦系統的方塊圖。
圖7是根據一實施之系統單晶片的方塊圖。
圖8顯示根據一實施之用於電腦系統的方塊圖之另一實施。
圖9顯示根據一實施之用於電腦系統的方塊圖之另一實施。
很多處理器使用向量指令集或單指令多資料(SIMD)指令集以平行地執行多個作業。處理器可以平行地執行多個作業,對相同件的資料或同時多件資料同時地施加作業。向量化是將一次僅對一對運算元作業之純量程式轉換成能夠從單指令執行多作業的向量程式之作業。
舉例而言,向量化是重寫迴路作業以執行SIMD指令之處理,其中,取代N次處理陣列的單一元件,其同時處理陣列的M個元件N/M次。
向量化包含用以執行集中作業、修改作業、及分散作業之指令(例如稀疏更新指令)。集中作業及分散作業可以直接地存取記憶體中的暫存器。舉例而言,集中作業使用索引化讀取,分散作業使用索引化寫入。在一實例中,資料元件可以在非連續的記憶體位置。集中作業從記憶體位置讀取資料元件集合以及將資料元件聚集於單一暫存器或快取線中。修改作業修改資料元件集合中的一或更多資料元件。分散作業將緊縮資料結構中的資料元件寫至非連續的或隨機的記憶體位置的集合。
傳統上,由於應用具有不規則的記憶體存取樣式,所以,使用SIMD指令集的處理器具有有限的性能增進。舉例而言,要求經常及隨機更新資料元件之儲存資料表的應用不會被儲存在連續的記憶體位置且要求資料重配置以完全地利用SIMD指令集。資料的重配置會造成實質開銷及限制使用SIMD指令集的效率。
此外,向量化典型上會假設執行集中作業、修改作業、及分散作業之單指令將不會存取各記憶體位置多於一次。在一實例中,在影像搜尋應用中由聯集及排序演繹法使用的記憶體存取樣式(對於16個連續i值)可如下所述地向量化:集中16 Array[a[i]];執行SIMD計算,例如Array[a[i]]+=b[i];以及,將新值分散回去。當a[i]的二
值相同時,則在集中作業及修改作業之後,用於a[i]的第一及第二值的分散作業會與a[i]的第一值衝突。在a[i]的第一及第二值之間的衝突會造成資料相依性冒險。資料相依性冒險是指令參考尚未被完成的先前指令之結果。在一實例中,SIMD指令具有資料相依性冒險,其中,第一作業是將A及B相加以決定C,以及,第二作業是將C及D相乘以決定E。在本實例中,SIMD指令執行同時被執行的第一及第二作業,以及,依賴第一作業的結果之第二作業會造成資料相依性冒險。資料相依性冒險會造成對SIMD指令集而言無法預測的結果。在另一實例中,當二連續的值被寫至相同的記憶體位置(例如記憶體位置a[i])時,用於第二值的分散作業會與用於第一值的分散作業相衝突。多個值同時寫至相同的記憶體位置會造成無法預測的答案,例如道衝突。
此處所述的實施例,藉由使用水平加法(VHADDCONFLICT)作業以消除用於SIMD指令集的資料相依性冒險而克服上述說明的缺點。VHADDCONFLICT作業消除為了分散作業而使用偏移向量之相同記憶體位置中資料暫存器的衝突使用。VHADDCONFLICT作業降低為了分散作業而使用偏移向量之相同記憶體位置之衝突的道或胞或陣列之(總合)值。舉例而言,VHADDCONFLICT作業可為SIMD指令,以在修改作業期間同時或平行地計算順序的計算模型(例如,yiyi-1+xi或是yiyi-1+xi)以計算用於分散作業的單一輸出值。如同前述中更詳細說明般,在
使用原始的偏移向量(總合)縮減之後,使用遮罩作業(VPCONFLICTMSK),產生寫入遮罩。遮罩用以辨識要由分散作業寫入的值,這些值是在道衝突的情形中縮減值的最後發生或是用於無衝突的道的值。舉例而言,對例如Array[a[i]]+=b[i]等指令執行VHADDCONFLICT作業。習知地,用於Array[a[i]]+=b[i]的水平加法具有寫入相依性資料冒險。採用VHADDCONFLICT作業的SIMD指令可以避免造成寫入相依性資料冒險之衝突道。
圖1A顯示根據一實施例之記憶體裝置100耦合處理器102,用以執行單指令多資料(SIMD)作業。處理器102包含記憶體介面106、暫存器檔案103、及快取記憶體105。記憶體介面106耦合至暫存器103及快取記憶體105。
記憶體介面106可以在暫存器檔案103或快取記憶體105(用於暫時儲存)與記憶體裝置100(用於長期儲存)之間移動資料。在一實例中,處理器使用暫存器檔案103以儲存處理器102執行的指令處理期間所使用的資料。處理器使用記憶體介面106以將例如指令或處理的結果等資料寫至記憶體裝置100以用於未來的存取。在另一實例中,暫存器檔案103包含SIMD暫存器104。SIMD暫存器104儲存SIMD作業期間使用的資料。舉例而言,如同先前說明中更詳細說明般,在集中-修改-分散作業期間,處理器102經由記憶體介面106而從記憶體裝置100取得資料及將資料儲存於SIMD暫存器104中以在
SIMD作業期間使用(集中作業)。在例如加法或乘法作業等SIMD作業(修改作業)期間,處理器102使用儲存在SIMD暫存器104的資料。當SIMD作業完成時,處理器102使用記憶體介面106以將SIMD作業的結果寫回至記憶體裝置100(分散作業)。在另一實例中,記憶體介面106將SIMD作業的結果儲存在快取記憶體105中,用於處理器102的其它作業。
圖1B顯示根據一實例之執行值陣列的水平加法作業之方法108。方法100至少部份地由包含硬體(例如電路、專用邏輯、可編程邏輯、微碼、等等)、軟體(例如由處理裝置執行的指令)、韌體或其組合之處理器100(圖1A)或處理邏輯執行。
參考圖1B,方法108始於從應用軟體接收請求以對眾多輸入值及暫存器值執行一或更多作業(110)。在一實施例中,多個暫存器值儲存在記憶體中不同的位置。指令包含下述之一或更多:來自應用軟體之輸入值的輸入陣列;眾多暫存器值的記憶體中的位置清單;以及,作業清單。在另一實施例中,各作業指定輸入陣列的輸入值以及暫存器值的位置以用於作業。舉例而言,作業可為輸入值及暫存器值的加法作業。在本實例中,作業指定陣列中的輸入值以及記憶體中的暫存器值的位置以用於加法作業。在一實例中,不同的作業使用獨特成對的暫存器值和輸入值。在另一實例中,不同的作業使用具有不同的輸入值之相同的暫存器值。
方法包含產生記憶體胞陣列,其中,各胞儲存位元串(112)。各位元串包含暫存器值及與暫存器值相關連的記憶體位置。方法包含向量化作業清單(114)。向量化作業清單使得處理器能夠平行地執行作業清單。方法包含平行地執行作業清單(116)。舉例而言,處理器將輸入陣列中的第一輸入值與記憶體陣列中的第一暫存器值相加、將輸入陣列中的第二輸入值與記憶體陣列中的第二暫存器值相加、以及將輸入陣列中的第三輸入值與記憶體陣列中的第三暫存器值相加、等等。方法包含產生作業清單中各作業的結果(118)。結果包含來自作業的結果值以及用於作業的暫存器值之記憶體中的位置。方法包含將作業的結果儲存於結果陣列的胞中(120)。舉例而言,第一結果可儲存於結果陣列的第一胞中,第二結果可儲存於結果陣列的第二胞中、等等。
方法包含決定具有衝突的記憶體位置之結果陣列中的胞(122)。衝突記憶體位置是記憶體中的位置,其中,結果陣列中的多個胞均參考的與暫存器值相關連的相同記憶體位置。方法包含對具有相同的衝突記憶體位置之胞集合執行水平加法作業(124)。當有多個具有衝突記憶體位置之胞集合時,處理器會對各集合執行水平加法作業。方法包含儲存用於各水平加法作業的結果於用於胞集合的結果陣列之最後胞中(126)。舉例而言,結果陣列包含2集合之具有衝突的記憶體位置的胞,其中,第一組胞包含3個胞,第二組胞包含2個胞。處理器對第一組具有衝
突記憶體位置的3個胞執行水平加法作業。處理器將水平加法作業的結果儲存於胞組中的第三胞(例如最後的胞)。處理器也對第二組具有衝突記憶體位置的2個胞執行水平加法作業。處理器將水平加法作業的結果儲存於胞組中的第二胞(例如最後的胞)。
方法包含產生用於結果胞中的一或更多胞之遮罩(128)。遮罩包含寫入遮罩及無寫入遮罩。寫入遮罩標示將值寫至記憶體,無寫入遮罩標示不將值寫至記憶體。在一實施例中,處理器指派寫入遮罩給具有衝突記憶體位置之結果陣列組中的各個最後胞。在另一實施例中,處理器指派寫入遮罩給未具有衝突記憶體位置之結果陣列組中的各個最後胞。在另一實施例中,處理器指派無寫入遮罩給具有衝突記憶體位置之結果陣列組中不是最後胞的胞。舉例而言,對於具有衝突記憶體位置的3個胞的組,組中的第一及第二胞可以被分派無寫入遮罩及第三胞被分派寫入遮罩。方法包含將用於具有寫入遮罩之結果陣列中的胞之值寫至記憶體位置(130)。
圖1C顯示根據一實施例之對值陣列執行水平加法作業的方法140。方法100至少部份地由包含硬體(例如電路、專用邏輯、可編程邏輯、微碼、等等)、軟體(例如由處理裝置執行的指令)、韌體或其組合之處理器100(圖1A)或處理邏輯執行。
參考圖1C,方法140始於從應用軟體接收請求以執行作業(142)。在一實例中,請求包含對第一組變數執
行作業,其中,第一組變數包含第一輸入值以及第一暫存器值,第一暫存器值儲存在第一記憶體位置。在另一實例中,請求包含對第二組變數執行作業,其中,第二組變數包含第二輸入值以及第一暫存器值,第一暫存器值儲存在第二記憶體位置。在另一實例中,請求包含對第三組變數執行作業,其中,第三組變數包含第三輸入值以及第二暫存器值,第二暫存器值儲存在第三記憶體位置。方法包含對第一組變數執行作業以取得第一作業值(144)。方法包含對第二組變數執行作業以取得第二作業值(146)。方法包含對第三組變數執行作業以取得第三作業值(148)。
在一實施例中,方法包含產生記憶胞的記憶體陣列以儲存於快取記憶體中及儲存:第一暫存器值及第一記憶體位置於記憶體陣列中的第一記憶胞中;第一暫存器值及第一記憶體位置於記憶體陣列中的第二記憶胞中;以及,第二暫存器值及第二記憶體位置於記憶體陣列中的第三記憶胞中。方法也包含:使用第一記憶胞中的第一暫存器值以對第一組變數執行作業、使用第二記憶胞中的第一暫存器值以對第二組變數執行作業、以及使用第三記憶胞中的第二暫存器值以對第三組變數執行作業。在另一實施例中,平行地執行對第一、第二、及第三組變數之作業。為了平行地執行對第一、第二、及第三組變數之作業,方法包含:藉由處理邏輯而向量化對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業以對第一、第二、
及第三組變數平行地執行作業。
方法包含使第一作業值與第一記憶體位置相關連(150)。方法包含使第二作業值與第二記憶體位置相關連(152)。方法包含使第三作業值與第三記憶體位置相關連(154)。方法包含決定第一記憶體位置及第二記憶體位置是用於記憶體中的相同位置(156)。方法包含對第一作業值及第二作業值執行水平加法作業以取得結果值(158)。在一實例中,方法包含產生作業胞的作業陣列以儲存在快取記憶體中及儲存:第一作業值及第一記憶體位置於作業陣列的第一作業胞中;第二作業值及第二記憶體位置於作業陣列的第二作業胞中;第三作業值及第三記憶體位置於作業陣列的第三作業胞中。在本實例中,方法也包含決定用於第一作業胞的第一記憶體位置及用於第二作業胞的第二記憶體位置是相同的記憶體位置及對第一作業值和第二作業值執行水平加法作業以回應用於第一作業胞的第一記憶體位置及第二作業胞的第二記憶體位置是相同的記憶體位置。
方法包含將結果值寫至第一記憶體位置(160)。方法包含將第三作業值寫至第三記憶體位置(162)。在一實例中,方法包含將水平加法作業的結果儲存在作業陣列的第二作業胞中,以及,產生用於第二作業胞的第一寫入遮罩及用於第三作業胞的第二寫入遮罩。在本實例中,在具有寫入遮罩的作業胞中的值寫至與作業胞相關連的記憶體位置。
圖2顯示根據一實施例之實施修改的水平加法作業之SIMD指令。SIMD指令是圖1A或1B中所述的方法實施之實例。在一實例中,SIMD指令可以對具有8記憶體位置的記憶體暫存器操作。SIMD指令包含位元圖產生作業以產生位元圖,其中,位元圖包含標示哪些胞具有衝突的記憶體位置之位元向量。
列210是儲存值的胞211-218之陣列,這些值係標示記憶體中的位置(例如記憶體位置)。胞211中的值代表記憶體中的位置0,胞212中的值代表記憶體中的位置1,胞213中的值代表記憶體中的位置1,胞214中的值代表記憶體中的位置0,胞215中的值代表記憶體中的位置3,胞216中的值代表記憶體中的位置3,胞217中的值代表記憶體中的位置4,以及,胞218中的值代表記憶體中的位置3。具有相同的記憶體位置標示之胞會彼此衝突。舉例而言,胞211會與胞214衝突,胞212會與胞213衝突。胞215、胞216、及胞218彼此衝突。胞217不會與列210中的任何其它胞衝突。
列220是胞221-228的陣列,胞221-228儲存來自應用軟體的輸入值,用於在對應的記憶體位置211-218之值的作業。列230是胞231-238的陣列,胞231-238儲存胞211-218與對應的胞221-228之間的作業的結果。舉例而言,作業是儲存在與胞211-218及胞221-228相關連的記憶體位置之值的加法。在本實例中,胞231儲存10的值,10的值是與胞211相關連的值及儲存在221的值相
加。胞232儲存11的值,11的值是與胞212相關連的值及儲存在222的值相加。胞233儲存14的值,14的值是與胞213相關連的值及儲存在223的值相加。胞234儲存9的值,9的值是與胞214相關連的值及儲存在224的值相加。胞235儲存31的值,31的值是與胞215相關連的值及儲存在225的值相加。胞236儲存34的值,34的值是與胞216相關連的值及儲存在226的值相加。胞237儲存7的值,7的值是與胞217相關連的值及儲存在227的值相加。胞238儲存12的值,12的值是與胞218相關連的值及儲存在228的值相加。在一實施例中,當對於對應於胞211-218的不同記憶體位置沒有衝突道時,儲存在胞231-238中的各值可以寫回至對應於胞211-218的記憶體位置。
在另一實施例中,當對於對應於胞211-218的不同記憶體位置有衝突道時,執行VHADDCONFLICT作業以求解應該寫回至用於各衝突道的記憶體位置之值。VHADDCONFLICT作業可以取得一或更多值作為源值及將各衝突記憶體位置的相加結果寫至目的地胞中。舉例而言,VHADDCONFLICT指令會消除要分散回至記憶體中的相同位置之多個值之間的衝突。舉例而言,如同胞212和213分別標示般,胞232及233中的值都與記憶體位置1相關連。為了解決衝突道,執行VHADDCONFLICT作業以將用於記憶體位置1的各值相加以及將結果值儲存在對應於衝突道的列240之最後胞處。舉例而言,其中,在
11(用於胞232)及14(用於胞233)中的值均對應於記憶體位置1,值11和14一起相加而造成25的值,儲存在胞243(用於記憶體位置1之最後胞)。
在另一實例中,分別如胞211和214所示般,在胞231及234中的值都與記憶體位置0相關連。為了解決衝突道,執行VHADDCONFLICT作業以將用於記憶體位置0的各值一起相加以及將結果值儲存在對應於衝突道的列240之最後胞。舉例而言,其中,在10(用於胞231)及9(用於胞234)中的值均對應於記憶體位置0,值10和9一起相加而造成19的值,儲存在胞244(用於記憶體位置1之最後胞)。
在另一實例中,分別如胞215、216和218所示般,在胞235、236及238中的值都與記憶體位置3相關連。為了解決衝突道,執行VHADDCONFLICT作業以將用於記憶體位置3的各值一起相加以及將結果值儲存在對應於衝突道的列240的最後胞。舉例而言,在31(用於胞235)、34(用於胞236)、及12(用於胞238)中的值均對應於記憶體位置3,值31、34、及12可以一起相加而造成77的值,儲存在胞248(用於記憶體位置3的最後胞)。在另一實例中,在胞237中的值是與記憶體位置4相關連的唯一值,以致於在胞237的值可以寫至胞247。
下述假碼顯示舉例說明的VHADDCONFLICT指令
當已執行VHADDCONFLICT作業時,可以執行VPCONFLICT作業以計算位元串值,所述位元串值係標示與目前胞之前的胞相關連的一或更多記憶體位置何時與目前胞相關連的記憶體位置衝突。當目前胞的記憶體位置與先前胞的記憶體位置相同時,記憶體位置衝突。藉由比較與目前胞相關連的記憶體位置以及與先前胞相關連的記憶
體位置,處理器可以決定目前胞的記憶體位置是否與先前胞的記憶體位置衝突。
當目前胞相關連的記憶體位置的對應比較顯示先前胞相關連的記憶體位置衝突時,設定串中的各位元。舉例而言,在列250的胞251-258中的值是位元值的串。在一實施例中,串中的各位元值標示與目前胞之前的胞相關連的一或更多記憶體位置何時與目前胞相關連的記憶體位置衝突。在一實施例中,位元值等於1係標示儲存與目前胞相關連的記憶體位置衝突之記憶體位置的胞。在另一實施例中,0標示儲存與目前胞相關連的記憶體位置不衝突之記憶體位置的胞。在另一實施例中,在胞的位元值的串中的各位元值之位置標示陣列210中的衝突胞的位置。
舉例而言,胞251關聯至胞211以及標示在胞211之前的任何胞是否與胞211衝突。在胞211是陣列210中的第一胞之情形中,沒有胞在胞211之前,以致於沒有衝突胞會在胞211之前。在一實施例中,在胞251中的位元串值是0。在另一實施例中,在胞251中的位元串值是空白的。
胞252關聯至胞212以及標示在胞212之前的任何胞是否與胞212衝突。胞211標示記憶體中的位置0,以及,胞212標示記憶體中的位置1。在前的胞211未與目前胞212衝突(例如,0的位元值)。因此,在胞252中的位元串值是0。
胞253關聯至胞213以及標示在胞213之前的任何胞
是否與胞213衝突。胞211標示記憶體中的位置0,胞212標示記憶體中的位置1,以及,胞213標示記憶體中的位置1。在前的胞212與目前胞213衝突(例如,1的位元值),以及,在前的胞211未與目前胞213衝突(例如,0的位元值)。因此,在胞253中的位元串值是0。
胞254關聯至胞214以及標示在胞214之前的任何胞是否與胞214衝突。胞211標示記憶體中的位置0,胞212標示記憶體中的位置1,胞213標示記憶體中的位置1,以及胞214標示記憶體中的位置0。在前的胞213未與目前胞214衝突(例如,0的位元值),胞212與目前胞214未衝突(例如,0的位元值),以及,胞211與目前胞214衝突(例如,1的位元值)。因此,在胞254中的位元串值是001。
胞255關聯至胞215以及標示在胞215之前的任何胞是否與胞215衝突。胞211標示記憶體中的位置0,胞212標示記憶體中的位置1,胞213標示記憶體中的位置1,胞214標示記憶體中的位置0,以及,胞215標示記憶體中的位置3。在前的胞214未與目前胞215衝突(例如,0的位元值),胞213與目前胞215未衝突(例如,0的位元值),胞212與目前胞215未衝突(例如,0的位元值),以及,胞211與目前胞215未衝突(例如,0的位元值)。因此,在胞255中的位元串值是0000。
胞256關聯至胞216以及標示在胞216之前的任何胞是否與胞216衝突。胞211標示記憶體中的位置0,胞
212標示記憶體中的位置1,胞213標示記憶體中的位置1,胞214標示記憶體中的位置0,胞215標示記憶體中的位置3,以及,胞216標示記憶體中的位置3。在前的胞215與目前胞216衝突(例如,1的位元值),胞214與目前胞216未衝突(例如,0的位元值),胞213與目前胞216未衝突(例如,0的位元值),胞212與目前胞216未衝突(例如,0的位元值),以及,胞211與目前胞216未衝突。因此,在胞256中的位元串值是10000。
胞257關聯至胞217以及標示在胞217之前的任何胞是否與胞217衝突。胞211標示記憶體中的位置0,胞212標示記憶體中的位置1,胞213標示記憶體中的位置1,胞214標示記憶體中的位置0,胞215標示記憶體中的位置3,胞216標示記憶體中的位置3,以及,胞217標示記憶體中的位置4。在前的胞216與目前胞217未衝突(例如,1的位元值),胞215與目前胞217未衝突(例如,0的位元值),胞214與目前胞217未衝突(例如,0的位元值),胞213與目前胞217未衝突(例如,0的位元值),胞212與目前胞217未衝突,以及,胞211與目前胞217未衝突。因此,在胞257中的位元串值是00000。
胞258關聯至胞218以及標示在胞218之前的任何胞是否與胞218衝突。胞211標示記憶體中的位置0,胞212標示記憶體中的位置1,胞213標示記憶體中的位置1,胞214標示記憶體中的位置0,胞215標示記憶體中
的位置3,胞216標示記憶體中的位置3,胞217標示記憶體中的位置4,以及,胞218標示記憶體中的位置3。在前的胞217與目前胞218未衝突(例如,0的位元值),胞216與目前胞218衝突(例如,1的位元值),胞215與目前胞218衝突(例如,0的位元值),胞214與目前胞218未衝突(例如,0的位元值),胞213與目前胞218未衝突(例如,0的位元值),胞212與目前胞218未衝突(例如,0的位元值),以及,胞211與目前胞218未衝突(例如,0的位元值)。因此,在胞258中的位元串值是0110000。
當已為各胞251-258產生位元串時,執行VPCONFLICT作業,以產生遮罩來標示儲存要在分散作業中寫至記憶體中的值之胞。在一實施例中,1的位元值表示儲存在對應的胞241-248中的值是要被寫至記憶體,以及,0的位元值表示儲存在對應的胞241-248中的值不是要被寫至記憶體。
在一實例中,在列250的胞251-258中的值儲存位元值串。在一實施例中,在胞中的各位元值標示列240的胞241-248含有用於與列210的胞211-218相關連的記憶體位置之最後值。僅有不衝突的胞及用於衝突的記憶體位置之最後胞會具有從它們設定的遮罩位元。在一實施例中,0位元表示胞未儲存用於記憶體位置的最後值,且1位元表示胞儲存用於記憶體位置的最後值。舉例而言,胞261包含0的位元值,標示胞241未儲存用於記憶體位置0之
最後的順序值。胞262包含0的位元值,標示胞242未儲存用於記憶體位置1之最後的順序值。胞263包含1的位元值,標示胞243儲存用於記憶體位置1之最後的順序值,例如用於記憶體位置1的胞211-218之記憶體位置的最後值。胞264包含1的位元值,標示胞264儲存用於記憶體位置0之最後的順序值,例如用於記憶體位置0的胞211-218之記憶體位置的最後值。胞265包含0的位元值,標示胞245未儲存用於記憶體位置3之最後值。胞266包含0的位元值,標示胞246未儲存用於記憶體位置3之最後值。胞267包含1的位元值,標示胞247儲存用於記憶體位置4之最後順序值,例如用於記憶體位置4的胞211-218之記憶體位置的最後值。胞268包含1的位元值,標示胞244儲存用於記憶體位置3之最後順序值,例如用於記憶體位置3的胞211-218之記憶體位置的最後值。
處理裝置可以執行分散作業以將與儲存具有1的值之遮罩位元的胞261-268相關連的胞241-248中的值寫至記憶體。舉例而言,胞261具有帶有0值的遮罩位元,以致於儲存在胞241的10的值不會被寫至記憶體位置0。胞262具有帶有0值的遮罩位元,以致於儲存在胞242的11的值不會被寫至記憶體位置1。胞263具有帶有1值的遮罩位元,以致於儲存在胞243的25的值會被寫至記憶體位置1。胞264具有帶有1值的遮罩位元,以致於儲存在胞244的19的值會被寫至記憶體位置0。胞265具有帶
有0值的遮罩位元,以致於儲存在胞245的31的值不會被寫至記憶體位置3。胞266具有帶有0值的遮罩位元,以致於儲存在胞246的34的值不會被寫至記憶體位置3。胞267具有帶有1值的遮罩位元,以致於儲存在胞246的7的值會被寫至記憶體位置4。胞268具有帶有1值的遮罩位元,以致於儲存在胞247的77的值會被寫至記憶體位置3。
圖3A是方塊圖,顯示根據揭示的某些實施例之由處理器300實施的有序管線及暫存器重命名級、亂序核發/執行管線。圖3A中的實線框顯示有序管線,而虛線框顯示暫存器重命名、亂序核發/執行管線。具體而言,根據揭示的至少一實施例,處理器300顯示有序架構核心及暫存器重命名邏輯、亂序核發/執行邏輯包含於處理器中。
在圖3A中,管線包含提取級302、長度解碼級304、解碼級306、分配級308、重命名級310、排程(也稱為派遣或核發)級312、暫存器讀取/記憶體讀取級314、執行級316、寫回/記憶體寫入級318、例外處理級322、及提交級324。在某些實施例中,級302-324的次序可以不同於所示且不侷限於圖3A中所示的特定次序。
圖3B是方塊圖,顯示根據一實施例之處理器300的微架構,其實施SNC之間的動態快取散列變化。處理器300包含耦合至執行引擎單元350之前端單元330,引擎單元350及前端單元330都耦合至記憶體單元370。處理器300包含為精簡指令集計算(RISC)核心、複雜指令集
計算(CISC)核心、很長指令字(VLIW)核心、或是混合或替代的核心型式。關於又另一選項,處理器300包含特別用途的核心,舉例而言,例如網路或通訊核心、壓縮引擎、圖形核心、等等。在一實施例中,處理器300可為多核心處理器或是多處理器系統的一部份。頁添加及內容拷貝的實施例可實施於處理器300中。
前端單元330包含分支預測單元332,分支預測單元332耦合至指令快取單元334,指令快取單元334耦合至指令轉譯旁看緩衝器(TLB)336,指令轉譯旁看緩衝器(TLB)336耦合至指令提取單元338,指令提取單元338耦合至解碼單元340。解碼單元340(也稱為解碼器)將指令解碼,以及產生一或更多微作業、微碼進入點、微指令、其它指令、或是從原始指令解碼、或是以其它方式反應、或是導出的其它控制訊號,以作為輸出。使用各種不同的機構,以實施解碼器340。適當的機構實例包含但不限於查詢表、硬體實施、可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM)、等等。指令快取單元334又耦合至記憶體單元370。解碼單元340耦合至執行引擎單元350中的重命名/分配器單元352。
執行引擎單元350包含重命名/分配器單元352,重命名/分配器單元352耦合至退出單元354及一或更多排程器單元356的集合。排程器單元356代表任何數目的不同排程器,包含保留站(RS)、中央指令窗、等等。排程器單元356耦合至實體暫存器檔案單元358。各實體暫存器
檔案單元358代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標,指令指標是要被執行的下一指令的位址)、等等一或更多不同的資料型式。實體暫存器檔案358由退出單元454重疊,以顯示實施暫存器重命名及亂序執行的各種方式(例如,使用重排序緩衝器及退出暫存器檔案,使用未來檔案、歷史緩衝器、及退出暫存器檔案;使用暫存器映射及暫存器庫;等等)。
一般而言,從處理器外部或是從程式設計人員的觀點,可看到架構暫存器。暫存器不限於任何習知的特定型式的電路。只要能夠如此處所述般儲存及提供資料,則各種不同型式的暫存器都是適合的。適合的暫存器實例包含但不限於專用實體暫存器、使用暫存器重命名的動態分配實體暫存器、專用及動態分配實體暫存器的組合、等等。退出單元354及實體暫存器檔案358耦合至執行叢集360。執行叢集360包含一或更多執行單元362的集合以及一或更多記憶體存取單元364的集合。執行單元362執行不同的作業(例如,偏移、加法、減法、乘法)以及對不同型式的資料操作(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。
雖然某些實施例包含專用於特定功能或功能集的一些執行單元,但是,其它實施例可以僅包含一執行單元或是多個都執行所有功能的執行單元。由於某些實施例產生用
於某些型式的資料/作業之分別的管線(例如,均具有它們自己的排程器單元、實體暫存器檔案單元、及/或執行叢集的純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線及/或記憶體存取管線,以及,在分別的記憶體存取管線的情形中,實施某些實施例,其中,僅有此管線的執行叢集具有記憶體存取單元364),所以,排程器單元356、實體暫存器檔案單元358、及執行叢集360顯示為可能是複數的。也應瞭解,在使用分別的管線時,這些管線中之一或更多可以是亂序核發/執行,而其它的是有序的。
記憶體存取單元364的集合耦合至記憶體單元370,記憶體單元370包含資料預提取器380、TLB單元372,資料快取單元(DCU)374、及階層2(L2)快取單元376,但所述這些僅是一些實例。在某些實施例中,DCU 374也稱為第一階資料快取記憶體(L1快取記憶體)。DCU 374可以處理多個顯著的快取未中並繼續服務進來的儲存及載入。其也支援維持快取同調性。資料TLB單元372是用以藉由對映虛擬及實體位址空間而增進虛擬位址轉譯速度之快取記憶體。在一舉例說明的實施例中,記憶體存取單元364包含載入單元、儲存位址單元、及儲存資料單元,各單元均耦合至記憶體單元370中的資料TLB單元372。L2快取單元376可以耦合至一或更多其它階層的快取記憶體及最後耦合至主記憶體。
在一實施例中,藉由自動地預測什麼資料是程式要消
耗的,資料預提取器380可以推論地載入/預提取資料至DCU 374。預提取意指在資料由處理器真正地要求之前,將儲存於記憶體階層(例如較低階快取或記憶體)的一記憶體位置中的資料(例如位置)轉移至較接近(例如造成較低的存取潛候期)處理器的更高階記憶體位置。更具體而言,預提取意指在處理器發出要求被歸還的特定資料之前,從較低階的快取記憶體/記憶體中之一早期取回資料至資料快取記憶體及/或預提取緩衝器。
處理器300支援一或更多指令集(例如,x86指令集(加上增加較新版本的某些擴充);加州太陽谷的MIPS Technologies的MIPS指令集;加州太陽谷的ARM Holdings的ARM指令集(加上選加的例如NEON等增加擴充))。
應瞭解,核心支援多緒(執行二或更多平行的作業或緒組),以及,以各種方式如此執行,這些方式包含時間切割多緒、同時多緒(其中,單一實體核心提供邏輯核心,用於實體核心同時正多緒化的多個緒中的各緒)、或是其組合(例如,時間切割提取及解碼以及其後的同時多緒,例如Intel® Hyperthreading technology中所示)。
雖然在亂序執行的環境中說明暫存器命名,但是,應瞭解,暫存器重命名可用於有序架構中。雖然所示的處理器的實施例也包含分別的指令及資料快取單元以及共用的L2快取單元,但是,替代實施例可以具有用於指令及資料之單一內部快取記憶體,例如階層1(L1)內部快取記
憶體、或是多階層的內部快取記憶體。在某些實施例中,系統包含內部快取記憶體及外部快取記憶體的組合,外部快取記憶體是核心及/或處理器的外部。替代地,所有的快取記憶體可以在核心及/或處理器的外部。
圖4顯示根據本發明的一實施例之用於處理器400的微架構的方塊圖,其包含執行SNC之間動態快取散列變化的邏輯電路。在某些實施例中,根據一實施例的指令被實施以對具有位元組、字、雙倍字、四倍字等尺寸、以及例如單一及雙倍精準整數及浮點資料型式等資料型式之資料型式操作。在一實施例中,有序前端401是處理器400的一部份,其提取要執行的指令及準備它們以稍後用於處理器管線中。頁添加及內容拷貝的實施例可以實施於處理器400中。
前端401包含數個單元。在一實施例中,指令預提取器416從記憶體提取指令以及將它們饋送至指令解碼器418,指令解碼器418接著將它們解碼或解譯。舉例而言,在一實施例中,解碼器將收到的指令解碼成機器能執行之稱為「微指令」或「微作業」(也稱為微op或uops)的一或更多作業。在其它實施例中,解碼器將指令剖析成為作業碼及對應的資料以及控制欄位,以由微架構使用來執行根據一實施例的作業。在一實施例中,追蹤快取430取得已解碼的微作業並將它們組合成用於執行之微作業佇列234中的程式依序序列或是軌跡。當追蹤快取430遇到複雜指令時,微碼ROM 432提供完成作業所需的
微作業。
某些指令被轉換成單一微作業,而其它的指令需要數個微作業以完成整個作業。在一實施例中,假使需要多於四個微作業以完成指令時,解碼器418會存取微碼ROM 232以執行指令。對於一實施例,指令被解碼成少數的微作業以用於在指令解碼器418處理。在另一實施例中,假使需要一些微作業以完成作業時,則指令儲存在微碼ROM 432之內。追蹤快取430參考登入點可編程邏輯陣列(PLA)以決定正確的微指令指標,用於從微碼ROM 432讀取微碼序列以完成根據一實施例的一或更多指令。在微碼ROM 432完成用於指令的序列微作業之後,機器的前端401恢復從追蹤快取230提取微作業。
亂序執行引擎403是指令被製備以用於執行之處。亂序執行邏輯具有一些緩衝器,以便當指令沿管線下行及被排程用於執行時,使指令的流動平順及重新排序,以將性能最佳化。分配器邏輯分配各微作業為了執行而需要的機器緩衝器及資源。暫存器重命名邏輯將邏輯暫存器重命名成暫存器檔案中的登錄。在指令排程器之前,分配器邏輯也分配用於二微作業佇列之一中各微作業之登錄,二微作業佇列中之一用於記憶體作業,而另一佇列用於非記憶體作業,所述指令排程器可為:記憶體排程器、快速排程器402、緩慢/一般浮點排程器404、及簡單浮點排程器406。微作業排程器402、404、406根據它們的相依輸入暫存器運算元來源的準備度及微作業完成它們的作業所需
的執行資源的可利用性,而決定微作業何時已準備好執行。一實施例的快速排程器402在主時脈循環的各半部上排程,而其它排程器僅每一主處理時脈循環排程一次。排程器仲裁派遣埠以將微作業排程用於執行。
暫存器檔案408、410位於排程器402、404、406與執行區411中的執行單元412、414、416、418、420、422、424之間。有分別的暫存器檔案408、410以分別用於整數及浮點運算。一實施例的各暫存器檔案408、410也包含旁通網路,以將尚未被寫入暫存器檔案的剛完成的結果旁通或遞送至新的相依微作業。整數暫存器檔案408及浮點暫存器檔案410也能夠與其它方傳輸資料。對於一實施例,整數暫存器檔案408分開成二個分別的暫存器檔案,其一為用於資料的低序32位元之暫存器檔案,另一為用於資料的高序32位元之第二暫存器檔案。由於浮點指令典型上具有寬度為64至128位元的運算元,所以,一實施例的浮點暫存器檔案410具有128位元寬的登錄。
執行區411含有執行單元412、414、416、418、420、422、424,在這些單元中,指令被真正地執行。此區包含暫存器檔案408、410,暫存器檔案408、410儲存微指令執行所需的整數及浮點資料運算元值。一實施例的處理器400包括一些執行單元:位址產生單元(AGU)412、AGU 414、快速ALU 416、快速ALU 418、緩慢ALU 420、浮點ALU 422、浮點移動單元424。對於一實施例,浮點執行區412、414執行浮點MMX、SIMD、及
SSE、或其它作業。一實施例的浮點ALU 412包含64位元乘64位元的浮點除法器,以執行除法、平方根、及餘數微作業。對於本揭示的實施例,涉及浮點值的指令可以由浮點硬體處理。
在一實施例中,ALU作業進行至高速ALU執行單元416、418。一實施例的快速ALU 416、418以時脈循環的一半之有效潛時,執行快速作業。對於一實施例,當緩慢ALU 410包含例如乘法器、偏移器、旗標邏輯、及分支處理等用於長潛時型作業的整數執行硬體時,大部份的複雜整數作業前往緩慢ALU 410。記憶體載入/儲存作業由AGU 412、414執行。對於一實施例,在對64位元資料運算元執行整數作業的環境中,說明整數ALU 416、418、420。在替代實施例中,ALU 416、418、420實施成支援各種資料位元,包含16、32、128、256、等等。類似地,浮點單元412、414實施成支援具有各種寬度的位元之運算元範圍。對於一實施例,浮點單元412、414可以配合SIMD及多媒體指令而對128位元寬的緊縮資料運算元操作。
在一實施例中,微作業排程器402、404、406在母負載完成執行之前派送相依作業。當微作業在處理器400中被推測地排程及執行時,處理器400也包含邏輯以操作記憶體遺失。假使資料負載在資料快取中遺失時,會有相依操作在管線中飛行,所述相依操作留下暫時不正確的資料給排程器。重進行機構會追蹤及再執行使用不正確資料的
指令。僅有相依作業需要重新進行,而獨立的作業被允許完成。處理器的一實施例之排程器及重新進行機構也設計成捕捉各指令序列以用於文字串比較作業。
根據一實施例,處理器400也包含邏輯以實施SNC之間的動態快取散列變化。在一實施例中,處理器400的執行區411包含微控制器(MCU)以執行根據此處說明的SNC之間的動態快取散列變化。
「暫存器」一詞意指作為辨識運算元的指令的一部份之板上處理器儲存位置。換言之,暫存器是可從處理器的外部使用的(從程式設計人員的觀點而言)。但是,實施例的暫存器不應侷限於意指特定型式的電路。相反地,實施例的暫存器能夠儲存及提供資料,以及執行此處所述的功能。此處所述的暫存器能由使用任何數目的不同技術之處理器內的電路實施,例如專用實體暫存器、使用暫存器重命名之動態分配實體暫存器、專用及動態分配實體暫存器的組合、等等。在一實施例中,整數暫存器儲存三十二位元的整數資料。一實施例的暫存器檔案也含有用於緊縮資料之八個多媒體SIMD暫存器。
對於此處之說明,暫存器被視為設計成固持緊縮資料的資料暫存器,例如以來自加州聖克拉拉(Santa Clara)之英特爾公司的MMX技術賦能之微處理器中64位元寬的MMXTM暫存器(在某些情形中也稱為「mm」暫存器)。能以整數及浮點形式取得的這些MMX暫存器以伴隨SIMD及SSE指令的緊縮資料元操作。類似地,與
SSE2、SSE3、SSE4、或是之外(一般稱為「SSEx」)的技術有關的128位元寬的XMM暫存器也用以固持這些緊縮資料運算元。在一實施例中,在儲存緊縮資料及整數資料時,暫存器不需要區分二資料型式。在一實施例中,整數及浮點被含在相同暫存器檔案或不同的暫存器檔案中。此外,在一實施例中,浮點及整數資料可以儲存在不同的暫存器或相同的暫存器中。
實施例可以以很多不同的系統型式實施。現在參考圖5,其顯示根據實施例之多處理器系統500的方塊圖。如圖5所示,多處理器系統500是點對點互連系統,以及包含經由點對點互連550而耦合的第一處理器570和第二處理器580。如圖5所示,各處理器570和580可為多核心處理器,包含第一及第二處理器核心(亦即,處理器核心574a和574b以及處理器核心584a和584b)然而,更多個核心可能呈現在處理器之中。根據本發明的實施例,這些處理器均包含混合寫入模式邏輯。頁添加及內容拷貝的實施例可以實施於處理器570、處理器580、或二者中。
雖然僅顯示二處理器570、580,但是,須瞭解本揭示的範圍不侷限於此。在其它實施例中,一或更多增加的處理器可以存在於給定的處理器中。
處理器570及580顯示為分別包含整合的記憶體控制器單元572和582。處理器570也包含點對點(P-P)介面576和578作為其匯流排控制器單元;類似地,第二處理器580包含P-P介面586和588。處理器570、580使
用P-P介面電路578、588而經由點對點(P-P)介面550來交換資訊。如圖5中所示,IMC 572及582將處理器耦合至各別記憶體,亦即記憶體532和記憶體534,它們可為本地地附著至各別處理器之主記憶體的部份。
使用點對點介面電路576、594、586、598,處理器570、580經由個別的P-P介面552、554而各別地與晶片組590交換資訊。晶片組590經由高性能圖形介面539,也與高性能圖形電路538交換資訊。
共用的快取記憶體(未顯示)可以包含在二處理器外部或任一處理器中,又經由P-P互連而與處理器連接,以致於假使處理器被置於低功率模式中時,任一或二處理器的本地快取記憶體資訊可以儲存在共用快取記憶體中。
晶片組590經由介面596而耦合至第一匯流排516。在一實施例中,第一匯流排516可為週邊組件互連(PCI)匯流排、或是例如快速PCI匯流排等匯流排或是其它第三代的I/O互連匯流排,但是,本揭示的範圍不受限於此。
如圖5所示,各式I/O裝置514可以與匯流排橋接器518耦合至第一匯流排516,匯流排橋接器518將第一匯流排516耦合至第二匯流排520。在一實施例中,第二匯流排520是低腳數(LPC)匯流排。各式裝置可以耦合至第二匯流排520,舉例而言,各式裝置包含鍵盤及/或滑鼠522、通訊裝置527及例如包含指令/碼及資料530的其它大量儲存裝置及硬碟機等儲存單元528。此外,音頻I/O
524耦合至第二匯流排520。注意,其它架構是可能的。舉例而言,取代圖5的點對點架構,系統可以實施多接點匯流排或是其它此類架構。
現在參考圖6,其顯示根據本發明的實施例之第三系統600的方塊圖。圖5和圖6中的類似元件帶有類似代號,圖5的某些態樣在圖6中省略,以免模糊圖6的其它態樣。
圖6顯示處理器670、680分別包含整合的記憶體及I/O控制邏輯(CL)672和682。對於至少一實施例,CL 672、682包含整合的記憶體控制器單元,例如此處所述般。此外,CL 672、682也包含I/O控制邏輯。圖6顯示記憶體632、634耦合至CL 672、682,輸入/輸出(I/O)裝置614也耦合至控制邏輯672、682。舊有輸入/輸出(I/O)裝置615耦合至晶片組690。頁添加及內容拷貝的實施例可實施於處理器670、處理器680、或二者中。
圖7是舉例說明的系統單晶片(SoC)700,其包含一或更多核心702。在膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、電動遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持裝置、及各式各樣的其它電子裝置之此領域中熟知的其它系統設計及配置也是適合的。一般而言,能夠併有此處所揭示的處理器及/或其它執行邏輯的眾多種類的系統或電子裝置通常是適
合的。
圖7是根據本揭示的實施例之系統單晶片(SoC)700的方塊圖。虛線框關於更多先進的SoC的特點。在圖7中,互連單元702耦合至:應用處理器717,包含一或更多核心702A-N的集合及共用快取單元706;系統代理器單元710;匯流排控制器單元716;整合記憶體控制器單元714;一組或一或更多副處理器720,包含集成的圖形邏輯708、用於提供靜態及/或攝影相機功能的影像處理器724、用於提供硬體音頻加速的音頻處理器726、以及用於提供視頻編碼/解碼加速的視頻處理器728;靜態隨機存取記憶體(SRAM)單元730;直接記憶體存取(DMA)單元732;以及,用於耦合至一或更多外部顯示器的顯示單元740。頁添加及內容拷貝的實施例可實施於SoC 700中。
接著轉至圖8,說明根據揭示的實施例之系統單晶片(SoC)的實施例。關於說明的實例,SoC 800包含於使用者設備(UE)中。在一實施例中,UE意指由終端使用者用以通訊之裝置,例如手持電話、智慧型手機、平板電腦、超薄筆電、具有寬頻適配器的筆記型電腦、或任何其它類似的通訊裝置。UE可以連接至基地台或節點,基地台或節點在本質上相當於GSM網路中的行動台(MS)。頁添加及內容拷貝的實施例可實施於SoC 800中。
此處,SoC 800包含2核心-806和807。類似於上述說明,核心806和807符合指令集架構,例如具有Intel®架構
核心TM的處理器、超微裝置公司(AMD)處理器、MIPS式處理器、ARM式處理器設計、或是其客戶、以及它們的被授權人或採用者。核心806和807耦合至與匯流排介面單元809及L2快取記憶體810相關連的快取控制808,以與系統800其它部份通訊。互連811包含可以實施所述揭示的一或更多態樣之晶片上互連,例如IOSF、AMBA、或是上述說明的其它互連。
互連811提供通訊通道給其它組件,其它組件可為例如與用戶識別模組(SIM)卡介接之用戶識別模組(SIM)830、用以保持由核心806和807執行以初始化及開機SoC 800之開機碼的開機ROM 835、與外部記憶體(例如DRAM 860)介接的SDRAM控制器840、與非依電性記憶體(例如快閃記憶體865)介接的快閃控制器845、與週邊交介之週邊控制850(例如串列週邊介面)、顯示及接收輸入(例如觸控賦能輸入)之視頻編解碼器820及視頻介面825、執行圖形相關計算之GPU 815、等等。任何這些介面可以合併此處所述的實施例之態樣。
此外,系統顯示用於通訊的週邊,例如藍芽模組870、3G數據機875、GPS 880、及WiFi 885。注意,如上所述,UE包含用於通訊的無線電。結果,這些週邊通訊模組不用都被包含。但是,在UE中應包含用於外部通訊之某形式的無線電。
圖9顯示計算系統900的舉例說明的形式之機器表示
圖,在其中,執行用於促使機器執行此處所述的任一或更多方法之指令集。在替代實施例中,機器可以連接至(例如網路化)LAN、內部網路、外部網路、網際網路、或中的其它機器。機器可以以主從網路環境中的伺服器或客戶端裝置的容量操作,或是操作成同級間(或分散式)網路環境中的同級機器。機器可以是個人電腦(PC)、平板PC、機上盒(STB)、個人數位助理(PDA)、蜂巢式電話、網路設備、伺服器、網路路由器、交換機或橋接器、或任何能夠執行指明要由機器採取的動作之指令集(順序的或其它方式)的機器。此外,雖然僅顯示單一機器,但是,「機器」一詞也應被視為包含個別地或聯合地執行指令集(或多個集)以執行一或更多此處所述的方法之機器的任何集合。頁添加及內容拷貝的實施例可實施於計算系統900中。
計算系統900包含處理裝置902、主記憶體904(例如唯讀記憶體(ROM)、快閃記憶體、動態隨機存取記憶體(DRAM)(例如同步DRAM(SDRAM)或DRAM(RDRAM)、靜態記憶體906(例如快閃記憶體、靜態隨機存取記憶體(SRAM)、等等)、以及資料儲存裝置918,這些裝置可以經由匯流排930而彼此通訊。
處理裝置902代表例如微處理器、中央處理單元等一或更多通用處理裝置。更特別地,處理裝置可以是複雜指令集計算(CISC)微處理器、精簡指令集計算(RISC)微處理器、很長指令字(VLIW)微處理器、或是實施其
它指令集的處理器、或是實施複數指令集的組合之處理器。處理裝置902也可以是一或更多特別用途的處理裝置,例如特定應用積體電路(ASIC)、現場可編程閘陣列(FPGA)、數位訊號處理器(DSP)、網路處理器、等等。在一實施例中,處理裝置902包含一或更多處理器核心。處理裝置902配置成執行處理邏輯926,用於執行此處所述的作業。在一實施例中,處理裝置902可為計算系統的一部份。替代地,計算系統900包含如此處所述的其它組件。應瞭解,核心可以支援多緒化(執行二或更多平行的作業或緒集),以及,以包含時間切割多緒化、同時多緒化(其中,單一實體核心提供邏輯核心以用於實體核心同時地正多緒化之各緒)、或是其組合(例如,Intel® Hyperthreading technology(超緒技術)中之後的時間切割多緒化及解碼及同時多緒化)等各種方式,來如此執行。
計算系統900又包含通訊地耦合至網路920的網路介面裝置908。計算系統900也包含視訊顯示單元910(例如液晶顯示器(LCD)或陰極射線管(CRT))、文數字輸入裝置910(例如鍵盤)、游標控制裝置914(例如滑鼠)、訊號產生裝置916(例如揚音器)、或其它週邊裝置。此外,計算系統900包含圖形處理單元922、視訊處理單元928、及音訊處理單元932。在另一實施例中,計算系統900包含意指積體電路群組之晶片組(未顯示)或晶片,晶片組或晶片被設計成與處理裝置902一起工作以
及控制處理裝置902與外部裝置之間的通訊。舉例而言,晶片組可為鏈接處理裝置902至例如主記憶體904及圖形控制器等很高速裝置、以及鏈接處理裝置902至例如USB、PCI或ISA匯流排等較低速之週邊裝置的週邊匯流排之主機板上的晶片集合。
資料儲存裝置918包含電腦可讀取的儲存媒體924,在電腦可讀取的儲存媒體924上儲存有具體實施一或更多此處所述的功能的方法之軟體926。軟體926在其由計算系統900執行期間也完全地或至少部份地駐於主記憶體904內作為指令926及/或駐於處理裝置902內作為處理邏輯926;主記憶體904及處理裝置902也構成電腦可讀取的儲存媒體。
電腦可讀取的儲存媒體924也用以儲存例如參考圖1所述般使用處理裝置902之指令926、及/或含有呼叫上述應用的方法之軟體庫。雖然電腦可讀取的儲存媒體924在舉例說明的實施例中顯示為單一媒體,但是,「電腦可讀取的儲存媒體」一詞應被視為包含儲存一或更多指令集之單一媒體或多媒體(例如集中化或分散式資料庫、及/或相關連的快取記憶體及伺服器)。「電腦可讀取的儲存媒體」一詞也被視為包含任何能夠儲存、編碼或載送由機器執行及促使機器執行本實施例的任一或更多的方法之指令集的媒體。「電腦可讀取的儲存媒體」一詞因而被視為包含但不限於固態記憶體、及光學和磁性媒體。
下述實例關於另外的實施例。
實例1是處理器,包含:1)第一暫存器陣列,其中,第一組變數、第二組變數、及第三組變數儲存於第一暫存器陣列中;2)解碼器,用以:a)接收來自應用的請求以執行單指令多資料(SIMD)作業;及b)將請求解碼;以及,3)執行單元,用以執行下述以回應請求:a)對第一組變數執行作業,其中,第一組變數包括第一輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在暫存器陣列中的第一陣列位置;b)對第二組變數執行作業,其中,第二組變數包括第二輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在暫存器陣列中的第一陣列位置;c)向量化對第一組變數及第二組變數的作業;d)平行地對第一組變數執行作業及對第二組變數執行作業,以取得用於第一組變數的第一作業值及用於第二組變數的第二作業值;e)對第一作業值及第二作業值執行水平加法作業,以取得第一結果值;以及f)將第一結果值寫至暫存器陣列中的第一位置。
在實例2中,實例1的處理器,其中,執行單元又:a)對第三組變數執行作業,其中,第三組變數包括第三輸入值及第二暫存器值,以及,其中,第二暫存器值儲存在暫存器陣列中的第二陣列位置;b)對第四組變數執行作業,其中,第四組變數包括第四輸入值及第二暫存器值,以及,其中,第二暫存器值儲存在暫存器陣列中的第二陣列位置;c)向量化對第一組變數的作業、對第二組變數的作業、對第三組變數的作業、及對第四組變數的作
業;d)平行地執行對第一組變數的作業、對第二組變數的作業、對第三組變數的作業、及對第四組變數的作業,以取得:i)用於第一組變數的第一作業值,ii)用於第二組變數的第二作業值;iii)用於第三組變數的第三作業值;及iv)用於第四組變數的第四作業值;e)對第三作業值及第四作業值執行水平加法作業,以取得第二結果值;以及f)將第二結果值寫至暫存器陣列位置中的第二暫存器陣列位置。
在實例3中,實例2的處理器,其中,執行單元又:a)對第五組變數執行作業,其中,第五組變數包括第五輸入值及第三暫存器值,以及,其中,第三暫存器值儲存在暫存器陣列中的第三陣列位置;b)向量化對第一組變數的作業、對第二組變數的作業、對第三組變數的作業、對第四組變數的作業、及對第五組變數的作業;c)平行地執行對第一組變數的作業、對第二組變數的作業、對第三組變數的作業、對第四組變數的作業、及對第五組變數的作業,以取得:i)用於第一組變數的第一作業值,ii)用於第二組變數的第二作業值;iii)用於第三組變數的第三作業值;iv)用於第四組變數的第四作業值;及v)對第五組變數的第五作業值;d))將第五作業值寫至暫存器陣列中的第三暫存器位置。
在實例4中,實例1的處理器,其中,執行單元又:a)從軟體應用接收請求以對第三組變數執行作業,其中,第三組變數包括第三輸入值及第二暫存器值,以及,
其中,暫存器值儲存在暫存器陣列中的第二暫存器位置;b)平行地向量化對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業;c)平行地執行對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業,以取得:i)用於第一組變數的第一作業值,ii)用於第二組變數的第二作業值及iii)用於第三組變數的第三作業值;以及d)將第三作業值寫至暫存器陣列中的第二暫存器位置。
不同的實施例可以具有上述說明之結構特點的不同組合。舉例而言,上述處理器及方法的所有選加特點也可以與此處所述的系統相關地實施,以及,實例中的具體細節可以用於一或更多實施例中的任意處。
實例5是處理器,包含:1)第一暫存器陣列,其中,第一組變數、第二組變數、及第三組變數儲存於第一暫存器陣列中;2)解碼器,用以:a)接收來自應用的請求以執行單指令多資料(SIMD)作業;及b)將請求解碼;以及,3)處理器核心執行下述以回應請求:a)對第一組變數執行作業,其中,第一組變數包括第一輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在第一暫存器陣列的第一暫存器陣列位置;b)對第二組變數執行作業,其中,第二組變數包括第二輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在第一暫存器陣列中的第二暫存器陣列位置;以及,c)對第三組變數執行作業,其中,第三組變數包括第三輸入值及第二暫存器值,
以及,其中,第二暫存器值儲存在第一暫存器陣列的第三暫存器陣列位置;d)對第一組變數執行作業,以取得第一作業值;e)對第二組變數執行作業,以取得第二作業值;f)對第三組變數執行作業,以取得第三作業值,其中,平行地執行對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業;g)使第一作業值與第一暫存器陣列位置相關連;h)使第二作業值與第二暫存器陣列位置相關連;i)使第三作業值與第三暫存器陣列位置相關連;j)決定第一暫存器陣列位置及第二暫存器陣列位置是用於相同的暫存器陣列位置;k)對第一作業值及第二作業值執行水平加法作業,以取得結果值;l)將結果值寫至第一暫存器陣列位置;以及m)將第三作業值寫至第三暫存器陣列位置。
在實例6中,實例5的處理器,其中,處理器核心又向量化對第一組變數的作業、對第二組變數的作業、對第三組變數的作業,以對第一、第二、及第三組變數平行地執行作業。
在實例7中,實例5的處理器,其中,處理器核心又:a)將第一暫存器值及第一暫存器陣列位置儲存於第一暫存器陣列位置中;b)將第一暫存器值及第一暫存器陣列位置儲存於第二暫存器陣列位置中;以及,c)將第二暫存器值及第二暫存器陣列位置儲存於第三暫存器陣列位置中;在實例8中,實例7的處理器,其中,處理器核心
又:a)使用第一暫存器陣列位置中的第一暫存器值,對第一組變數執行作業,b)使用第二暫存器陣列位置中的第一暫存器值,對第二組變數執行作業,c)使用第三暫存器陣列位置中的第二暫存器值,對第三組變數執行作業。
在實例9中,實例5的處理器,又包括作業暫存器陣列,其中,處理器核心又:1)將第一作業值及第一暫存器陣列位置儲存於作業暫存器陣列的第一暫存器陣列中;2)將第二作業值及第二暫存器陣列位置儲存於作業暫存器陣列的第二暫存器陣列位置中;以及,3)將第三作業值及第三暫存器陣列位置儲存於作業暫存器陣列的第三暫存器陣列位置中;及4)決定用於第一暫存器陣列位置及第二暫存器陣列位置之第一暫存器陣列位置是相同的暫存器陣列位置。
在實例10中,實例9的處理器,其中,處理器核心又對第一作業值及第二作業值執行水平加法作業以回應用於第一暫存器陣列位置的第一暫存器陣列位置及用於第二暫存器陣列位置的第二暫存器陣列位置是相同的暫存器陣列位置。
在實例11中,實例10的處理器,其中,處理器核心又:a)將水平加法作業的結果儲存於作業暫存器陣列之第二暫存器陣列位置中;b)產生用於第二暫存器陣列位置的第一寫入遮罩;c)產生用於第三暫存器陣列位置的第二寫入遮罩;及d)將具有寫入遮罩的第三暫存器陣列
位置及第二暫存器陣列位置中的值寫至與第二暫存器陣列位置及第三暫存器陣列位置相關連的記憶體裝置的記憶體位置。
在實例12中,實例11的處理器,其中,第一寫入遮罩包括位元串,所述位元串標示用於第一作業暫存器陣列位置的第一記憶體位置及用於第二作業暫存器陣列位置的第二記憶體位置是相同的記憶體位置。
在實例13中,實例12的處理器,其中,第一記憶體位置及第二記憶體位置是在記憶體裝置中非連續的位置。
在實例14中,實例5的處理器,其中,作業是加法作業。
不同的實施例可以具有上述說明之結構特點的不同組合。舉例而言,上述處理器及方法的所有選加特點也可以與此處所述的系統有關地實施,以及,實例中的具體細節可以用於一或更多實施例中的任意處。
實例15是方法,包含:1)由處理器對第一組變數執行作業以取得第一作業值;2)由處理器對第二組變數執行作業以取得第二作業值;3)由處理器對第三組變數執行作業以取得第三作業值,其中,平行地執行對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業;4)由處理器使第一作業值與在暫存器陣列中的第一暫存器陣列位置相關連;5)由處理器使第二作業值與在暫存器陣列中的第二暫存器陣列位置相關連;6)由處理器使第三作業值與在暫存器陣列中的第三暫存器陣列位置
相關連;7)由處理器決定第一暫存器陣列位置及第二暫存器陣列位置是用於在暫存器陣列的相同暫存器陣列位置;8)由處理器對第一作業值及第二作業值執行水平加法作業以取得結果值;以及,9)由處理器將結果值及第三作業值寫至第一暫存器陣列位置。
在實例16中,實例15的方法,又包含從軟體應用接收請求以:a)由處理器對第一組變數執行作業,其中,第一組變數包括第一輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在第一暫存器陣列位置;b)由處理器對第二組變數執行作業,其中,第二組變數包括第二輸入值及第一暫存器值,以及,其中,第一暫存器值儲存在第二暫存器位置;c)由處理器對第三組變數執行作業,其中,第三組變數包括第三輸入值及第二暫存器值,以及,其中,第二暫存器值儲存在第三暫存器陣列位置。
在實例17中,實例15的方法,又包含由處理器平行地向量化對第一組變數的作業、對第二組變數的作業、及對第三組變數的作業。
在實例18中,實例15的方法,又包含:1)由處理器產生作業胞的作業暫存器陣列;2)由處理器將第一作業值及第一暫存器陣列位置儲存於作業暫存器陣列的第一作業胞中;3)由處理器將第二作業值及第二暫存器陣列位置儲存於作業暫存器陣列的第二作業胞中;4)由處理器將第三作業值及第三暫存器陣列位置儲存於作業暫存器陣列的第三作業胞中;5)由處理器決定用於第一作業胞
的第一暫存器陣列位置及用於第二作業胞的第二暫存器陣列位置是相同的暫存器陣列位置;以及,6)由處理器對第一作業值及第二作業值執行水平加法作業以回應用於第一作業胞的第一暫存器陣列位置及用於第二作業胞的第二暫存器陣列位置是相同的暫存器陣列位置。
在實例19中,實例18的方法,又包含:1)由處理器將用於水平加法作業的結果儲存於作業暫存器陣列的第二作業胞中;2)由處理器產生用於第二作業胞的第一寫入遮罩;3)由處理器產生用於第三作業胞的第二寫入遮罩;4)由處理器將具有第一寫入遮罩的第二作業胞及具有第二寫入遮罩的第三作業胞中的值寫至分別與第二作業胞及第三作業胞相關連的暫存器陣列位置。
在實例20中,實例19的方法,其中,第一寫入遮罩包括位元串,所述位元串標示用於第一作業胞的第一暫存器陣列位置與用於第二作業胞的第二暫存器陣列位置是相同的暫存器陣列位置。
雖然參考有限數目的實施例而說明本發明,但是,習於此技藝者可從其中瞭解眾多修改及變異。後附的申請專利範圍是要涵蓋落在本發明的精神及範圍內的所有這些修改及變異。
在此處的說明中,揭示眾多特定細節,例如特定型式的處理器及系統配置、特定硬體結構、特定暫存器配置、特定指令型式、特定系統組件、特定測量/高度、特定處理器管線級及作業等等實例,以助於完整瞭解本發明。但
是,習於此技藝者瞭解不使用這些特定細節仍可實施本發明。在其它情形中,未詳細說明例如特定及替代的處理器架構、用於說明的演繹法之特定的邏輯電路/碼、特定韌體碼、特定互連作業、特定邏輯配置、特定製造技術及材料、特定編譯器實施、演繹法的特定碼表示、特定的斷電及閘控技術/邏輯及電腦系統之其它特定的操作細節等等熟知的組件或方法,以免不必要地模糊本發明。
參考例如計算平台或微處理器中等特定積體電路中的SNC之間的動態快取散列變化而說明實施例。實施例也可應用至其它型式的積體電路及可編程邏輯裝置。舉例而言,揭示的實施例不侷限於桌上型電腦系統或可攜式電腦,例如Intel® UltrabookTM電腦。而且也可用於其它裝置中,例如手持裝置、平板電腦、其它薄的筆電、系統單晶片(SoC)裝置、及嵌入應用。手持裝置的某些實例包含蜂巢式電話、網際網路協定裝置、數位相機、個人數位助理(PDA)、及手持PC。嵌入式應用典型上包含微控制器、數位訊號處理器(DSP)、系統單晶片、網路電腦(NetPC)、機上盒、網路集線器、廣域網路(WAN)交換機、或是能夠執行下述所述的功能及作業之任何其它系統。說明系統可以是任何種類的電腦或嵌入式系統。揭示的實施例可以特別用於低端裝置,例如穿戴式裝置(例如手錶)、電子植入、及感覺與控制基礎設施裝置、控制器、監控及資料擷取(SCADA)系統、等等。此外,此處所述的設備、方法、及系統不侷限於實體計算裝置,也可
以關於節約能源及效率之軟體最佳化。如同從下述說明中將容易清楚般,此處所述之方法、設備、及系統的實施例(不管是關於硬體、韌體、軟體、或其結合)對於與性能考量相平衡之「綠技術」未來是重要的。
雖然參考處理器而於此說明實施例,但是,其它實施例可以應用至其它型式的積體電路及邏輯裝置。本發明的實施例之類似技術及揭示可以應用至能從更高的管線通量及增進的性能獲利之其它型式的電路或半導體裝置。本發明的實施例的揭示可應用至執行資料操作的任何處理器或機器。但是,本發明不限於執行512位元、256位元、128位元、64位元、32位元、或16位元資料作業的處理器或機器,且能應用至執行資料操作或管理的任何處理器及機器。此外,下述說明提供實例,且附圖顯示用於說明的各種實例。但是,這些實例不應被解釋為限定之意,它們僅是要提供本發明的實施例的實例,而不是提供本發明的實施例的所有可能的實施之竭盡性清單。
雖然下述實例以執行單元及邏輯電路的環境說明指令操作及分佈,但是,本發明的其它實施例可由儲存在機器可讀取的、實體的媒體上的資料或指令實施,這些資料或指令當由機器執行時會促使機器執行符合本發明的至少一實施例之功能。在一實施例中,與本發明的實施例相關連的功能以機器可執行的指令具體實施。指令被用以促使以指令程式化的一般用途或特定用途的處理器執行本發明的步驟。本發明的實施例可為電腦程式產品或是軟體,包含
具有指令儲存於上的機器或電腦可讀取的媒體,所述指令用以將電腦(或其它電子裝置)程式化以執行根據本發明的實施例之一或更多作業。替代地,本發明的實施例的步驟可由含有用於執行作業的固定功能邏輯的特定硬體組件、或是由程式化的電腦組件及固定功能的硬體組件的任何組合執行。
用以將邏輯程式化以執行本發明的實施例之指令可儲存在例如動態隨機存取記憶體(DRAM)、快取記憶體、快閃記憶體、或其它儲存器等系統中的記憶體內。此外,可經由網路或是藉由其它電腦可讀取的媒體,以散佈指令。因此,機器可讀取的媒體包含以機器(例如電腦)可讀取的形式來儲存或傳送資訊的任何機構,但不限於軟碟、光碟、小巧碟片、唯讀記憶體(CD-ROM)、及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹拭可編程唯讀記憶體(EPROM)、電可抹拭可編程唯讀記憶體(EEPROM)、磁性或光學卡、快閃記憶體、或是經由電方式、光學方式、聲學方式或其它形式的傳播訊號(例如,載波、紅外線訊號、數位訊號、等等)而於網際網路上傳送資訊時使用的實體的、機器可讀取的儲存器。因此,電腦可讀取的媒體包含任何型式的實體的機器可讀取的媒體,適用於以可由機器(例如電腦)讀取的形式儲存或傳送電子指令或資訊。
設計會經過不同的階段,從創造到模擬到製造。代表設計的資料可以以多種方式代表設計。首先,如同模擬中
使用的一般,使用硬體說明語言或是另一功能說明語言,代表硬體。此外,可以在設計過程中的某些階段,產生設有邏輯及/或電晶體閘的電路級模型。此外,大部份的設計在某階段達到代表硬體模型中的不同裝置的實體配置之資料層級。在使用傳統的半導體製造技術之情形中,代表硬體模型的資料可為指明用以產生積體電路的掩罩之不同掩罩層上是否存有不同的特徵之資料。在設計的任何表示中,資料可以儲存在任何形式的機器可讀取的媒體中。例如碟片等磁性或光學儲存器或記憶體可以是機器可讀取的媒體,儲存經由調變或其它方式產生以傳送資訊的光波或電波傳送來的資訊。當表示或載送碼或設計的電載波被傳送至執行電訊號的複製、緩衝、或再傳送的程度時,產生新的複製。因此,通訊提供者或網路提供者可以將具體實施本發明的實施例之例如編碼成載波的資訊等物件至少暫時地儲存在實體的、機器可讀取的媒體上。
此處所使用的模組意指硬體、軟體、及/或韌體的任何組合。舉例而言,模組包含例如微控制器等硬體,與非暫時媒體相關連以儲存適用於由微控制器執行的碼。因此,一實施例中述及模組係意指特別配置成辨認及/或執行要被保持於非暫時媒體上的碼之硬體。此外,在另一實施例中,模組的使用係指包含碼的非暫時媒體,所述碼係特別適用於由微控制器執行以執行預定的作業。而且,如同推論般,在又另一實施例中,模組一詞(在本實例中)意指微控制器及非暫時媒體的結合。通常,被顯示為分開
的模組邊界會共同地變化及潛在地變化。舉例而言,第一及第二模組可以共用硬體、軟體、韌體、或其結合,並潛在地保有某些獨立的硬體、軟體、或韌體。在一實施例中,邏輯一詞的使用包含電晶體、暫存器等硬體、或例如可編程邏輯裝置等其它硬體。
在一實施例中使用「配置成(configured to)」之文句係意指安排、一起設置、製造、供應銷售、進口及/或設計設備、硬體、邏輯、或元件以執行指定的或決定的工作。在本實例中,假使非一直操作之設備或其元件被設計、耦合、及/或互連以執行指定的工作時,則其仍然「配置成」執行該指定的工作。關於僅為說明的實例,在作業期間,邏輯閘可以提供0或1。但是,「配置成」提供賦能訊號給時計之邏輯閘未包含可以提供1或0之非常可能的邏輯閘。替代地,邏輯閘是以操作期間1或0輸出是要使時計賦能之某方式耦合的邏輯閘。再度說明,「配置成」一詞之使用並未要求作業,但替代地著重於設備、硬體、及/或元件的潛時狀態,其中,在潛時狀態中,設備、硬體、及/或元件設計成當設備、硬體、及/或元件正操作時會執行特定工作。
此外,在一實施例中,「以(to)」、「能夠(capable of/to)」及/或「可操作以(operable to)」等文句的使用係意指某些設備、邏輯、硬體、及/或元件依設計成能夠以特定方式使用設備、邏輯、硬體、及/或元件。如上所述般,在一實施例中,「以(to)」、「能夠
(capable of/to)」及/或「可操作以(operable to)」等文句意指設備、邏輯、硬體、及/或元件的潛時狀態,其中,設備、邏輯、硬體、及/或元件並非一直操作而是設計成能夠以特定方式使用設備。
此處使用的值包含任何已知的數字、狀態、邏輯狀態、二進位邏輯狀態的表示。通常,邏輯位準、或邏輯值的使用也被稱為1及0,簡單地表示二進位邏輯狀態。舉例而言,1意指高邏輯位準,0意指低邏輯位準。在一實施例中,例如電晶體或快閃胞等儲存胞能夠固持單一邏輯值或是多個邏輯值。但是,有使用電腦系統中其它的值表示。舉例而言,十進位數字也表示成1010的二進位值及十六進位字母A。因此,值包含能夠被固持於電腦系統中的資訊之任何表示。
此外,狀態可以由值或值的部份表示。舉例而言,例如邏輯1等第一值可以代表內定或初始狀態,而例如邏輯零等第二值可以代表非內定狀態。此外,在一實施例中,重設及設定等詞分別意指內定及更新值或狀態。舉例而言,內定值可能包含高邏輯值,亦即重設,而更新值可能包含低邏輯值,亦即設定。注意,任何值的組合可以用以代表任可數目的狀態。
上述揭示之方法、硬體、軟體、韌體或碼的實施例可以經由儲存在機器可存取、機器可讀取、電腦可存取、或電腦可讀取的媒體上可由處理元件執行的指令或碼而實施。非暫時機器可存取的/可讀取的媒體包含提供(亦即
儲存及/或傳送)機器可讀取的形式之資訊的任何機構,例如電腦或電子系統。舉例而言,非暫時的機器可存取的媒體包含例如靜態RAM(SRAM)或動態RAM(DRAM)等隨機存取記憶體(RAM);ROM;磁性或光學儲存媒體;快閃記憶體裝置;電儲存裝置;光學儲存裝置;聲學儲存裝置;用於固持從暫時(傳播的)訊號(例如載波、紅外線訊號、數位訊號)接收的資訊之其它形式的儲存裝置;與可自其接收資訊之非暫時媒體有區別之裝置等等。
用以將邏輯程式化以執行本發明的實施例之指令可儲存在例如動態隨機存取記憶體(DRAM)、快取記憶體、快閃記憶體、或其它儲存器等系統中的記憶體內。此外,可經由網路或是藉由其它電腦可讀取的媒體,以散佈指令。因此,機器可讀取的媒體包含以機器(例如電腦)可讀取的形式來儲存或傳送資訊的任何機構,但不限於軟碟、光碟、小巧碟片、唯讀記憶體(CD-ROM)、及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹拭可編程唯讀記憶體(EPROM)、電可抹拭可編程唯讀記憶體(EEPROM)、磁性或光學卡、快閃記憶體、或是經由電方式、光學方式、聲學方式或其它形式的傳播訊號(例如,載波、紅外線訊號、數位訊號、等等)而於網際網路上傳送資訊時使用的實體的、機器可讀取的儲存器。因此,電腦可讀取的媒體包含任何型式的實體的機器可讀取的媒體,適用於以可由機器(例如電腦)讀取的形式儲存或傳送電子指令或資訊。
在本說明書中述及「一實施例」或「實施例」係意指配合實施例而說明的特定的特點、結構、或特徵係包含於本發明的至少一實施例中。因此,在本說明書中各處出現「在一實施例中」或「在實施例中」之文句不一定都意指相同的實施例。此外,在一或更多實施例中,特定的特點、結構、或特徵可以以任何適當的方式相結合。
在上述說明書中,已參考具體舉例說明的實施例,作出詳細說明。但是,在不悖離後附的申請專利範圍中揭示的本發明的較廣精神及範圍之下,顯然可以作各式各樣的修改及改變。因此,說明書及圖式係被視為說明而非限定之義。此外,實施例及其它舉例說明的語文之前述使用不一定意指相同的實施例或相同的實例,而是可以意指不同的及區別的實施例、以及可能相同的實施例。
詳細說明的某些部份係以電腦記憶體內對資料位元的作業之符號表示及演繹法的觀點呈現。這些演繹法說明及表示是由習於資料處理技藝者用以最有效地傳遞它們的工作給其它習於此技藝者之手段。演繹法於此且一般被視為導致所需結果之有條理的作業系列。作業係要求物理數量的實體操作。通常,但非必須,這些數量係採取能夠被儲存、傳送、合併、比較及以其它方式操縱的電或磁訊號的形式。原則上基於一般用途,有時為了方便而將這些訊號稱為位元、值、元件、符號、文字、術語、數字等等。此方所示的方塊可為硬體、軟體、韌體或其組合。
但是,應謹記在心,所有這些及類似的術語是要與適
當的物理量相關連的,且僅是應用至這些量的便利標籤。除非從上述說明中清楚可知另外指明,否則應瞭解在整個說明中,例如「界定(defining)」、「接收(receiving)」、「決定(determining)」、「核發(issuing)」、「鏈結(linking)」、「使關連(associating)」、「取得(obtaining)」、「驗證(authenticating)」、「禁止(prohibiting)」、「執行(executing)」、「請求(requesting)」、通訊(communicating)」等等文詞的使用,係意指計算系統、或類似的電子計算裝置的動作及處理,計算系統、或類似的電子計算裝置係將計算系統的暫存器及記憶體內表示成物理(例如電子)量之資料操縱及轉換成為計算系統記憶體或暫存器及記憶體或其它此類資訊儲存器、傳輸或顯示裝置內類似地表示成物理量之其它資料。
於此使用「實例」或「舉例說明」等文字以意指作為實例、例子或說明。此處說明成「實例」或「舉例說明」之任何態樣或設計不必被解釋成比其它態樣或設計較佳的或是有利的。確切而言,「實例」或「舉例說明」等文字的使用是要以具體方式表現概念。如同本申請案中所使用般,「或(or)」一詞係要意指包括的「或(or)」而不是排他的「或(or)」。亦即,除非另外指明,或從文中清楚可知,否則,「X包含A或B」係意指任何自然包括排列。亦即,假使X包含A;X包含B;或X包含A及B,則在任何上述情形中都滿足「X包含A或B」。此
外,除非另外指明或從內文中清楚可知,在本申請案及申請專利範圍中使用的冠詞「一(a及an)」一般應解釋成意指「一或更多」,除非另外指明或從內文中清楚可知被導向單數形式。此外,除非指外,否則「實施例」、「一實施例」或「實施」或「一實施」等文詞之使用並非意指相同的實施例或實施。而且,此處「第一」、「第二」、「第三」、「第四」、等等之使用係意指區別不同的元件之標示,不一定具有根據它們的數字表示之次序意義。
330‧‧‧前端單元
332‧‧‧分支預測單元
334‧‧‧指令快取單元
336‧‧‧指令轉譯旁看緩衝器(TLB)
338‧‧‧指令提取單元
340‧‧‧解碼單元
350‧‧‧執行引擎單元
352‧‧‧重命名/分配器單元
354‧‧‧退出單元
356‧‧‧排程器單元
358‧‧‧實體暫存器檔案單元
360‧‧‧執行叢集
362‧‧‧執行單元
364‧‧‧記憶體存取單元
370‧‧‧記憶體單元
372‧‧‧資料TLB單元
374‧‧‧資料快取單元(DCU)
376‧‧‧階層2(L2)快取單元
390‧‧‧核心
Claims (17)
- 一種處理器,包括:第一暫存器陣列,其中,第一組變數、第二組變數、及第三組變數儲存於第一暫存器陣列中;解碼器,用以:接收來自應用的請求以執行單指令多資料(SIMD)作業;及將該請求解碼;以及,執行單元,用以執行下述以回應該請求:對第一組變數執行作業,其中,該第一組變數包括第一輸入值及第一暫存器值,以及,其中,該第一暫存器值儲存在該暫存器陣列中的第一陣列位置;對第二組變數執行該作業,其中,該第二組變數包括第二輸入值及該第一暫存器值,以及,其中,該第一暫存器值儲存在該暫存器陣列中的該第一陣列位置;向量化對第一組變數及第二組變數的該作業;平行執行對該第一組變數的該作業及對該第二組變數的該作業,以取得用於該第一組變數的第一作業值及用於該第二組變數的第二作業值;對該第一作業值及該第二作業值執行水平加法作業,以取得第一結果值;以及,將該第一結果值寫至該暫存器陣列中的該第一位置,其中,該執行單元又: 從軟體應用接收請求以對該第三組變數執行該作業,其中,該第三組變數包括第三輸入值及第二暫存器值,以及,其中,該暫存器值儲存在該暫存器陣列中的第二暫存器位置;平行地向量化對該第一組變數的該作業、對該第二組變數的該作業、及對該第三組變數的該作業;平行地執行對該第一組變數的該作業、對該第二組變數的該作業、及對該第三組變數的該作業,以取得:用於該第一組變數的該第一作業值,用於該第二組變數的該第二作業值;以及用於該第三組變數的該第三作業值;以及將該第三作業值寫至該暫存器陣列中的該第二暫存器位置。
- 如申請專利範圍第1項的處理器,其中,該執行單元又:對第三組變數執行該作業,其中,該第三組變數包括第三輸入值及第二暫存器值,以及,其中,該第二暫存器值儲存在該暫存器陣列中的第二陣列位置;對第四組變數執行該作業,其中,該第四組變數包括第四輸入值及該第二暫存器值,以及,其中,該第二暫存器值儲存在該暫存器陣列中的該第二陣列位置;向量化對該第一組變數的該作業、對該第二組變數的該作業、對該第三組變數的該作業、及對該第四組變數的該作業; 平行地執行對該第一組變數的該作業、對該第二組變數的該作業、對該第三組變數的該作業、及對該第四組變數的該作業,以取得:用於該第一組變數的該第一作業值,用於該第二組變數的該第二作業值;用於該第三組變數的第三作業值;及用於該第四組變數的第四作業值;對該第三作業值及該第四作業值執行水平加法作業,以取得第二結果值;以及將該第二結果值寫至該第二暫存器陣列位置中的該第二暫存器陣列位置。
- 如申請專利範圍第2項的處理器,其中,該執行單元又:對第五組變數執行該作業,其中,該第五組變數包括第五輸入值及第三暫存器值,以及,其中,該第三暫存器值儲存在該暫存器陣列中的第三陣列位置;向量化對該第一組變數的該作業、對該第二組變數的該作業、對該第三組變數的該作業、對該第四組變數的該作業、及對該第五組變數的該作業;平行地執行對該第一組變數的該作業、對該第二組變數的該作業、對該第三組變數的該作業、對該第四組變數的該作業、及對該第五組變數的該作業,以取得:用於該第一組變數的該第一作業值,用於該第二組變數的該第二作業值; 用於該第三組變數的該第三作業值;用於該第四組變數的該第四作業值;及用於該第五組變數的第五作業值;以及,將該第五作業值寫至該暫存器陣列中的該第三暫存器位置。
- 一種處理器,包括:第一暫存器陣列,其中,第一組變數、第二組變數、及第三組變數儲存於第一暫存器陣列中;解碼器,用以:接收來自應用的請求以執行單指令多資料(SIMD)作業;及將該請求解碼;以及,處理器核心,執行下述以回應該請求:對第一組變數執行作業,其中,該第一組變數包括第一輸入值及第一暫存器值,以及,其中,該第一暫存器值儲存在該第一暫存器陣列的第一暫存器陣列位置;對第二組變數執行該作業,其中,該第二組變數包括第二輸入值及該第一暫存器值,以及,其中,該第一暫存器值儲存在該第一暫存器陣列的第二暫存器陣列位置;以及,對第三組變數執行該作業,其中,該第三組變數包括第三輸入值及第二暫存器值,以及,其中,該第二暫存器值儲存在該第一暫存器陣列的第三暫存器陣列位置;對該第一組變數執行該作業,以取得第一作業 值;對該第二組變數執行該作業,以取得第二作業值;對該第三組變數執行作業,以取得第三作業值,其中,平行地執行對該第一、該第二、及該第三組變數的該作業;使該第一作業值與該第一暫存器陣列位置相關連;使該第二作業值與該第二暫存器陣列位置相關連;使該第三作業值與該第三暫存器陣列位置相關連;決定該第一暫存器陣列位置及該第二暫存器陣列位置是用於相同的暫存器陣列位置;對該第一作業值及該第二作業值執行水平加法作業,以取得結果值;將該結果值寫至該第一暫存器陣列位置;以及,將該第三作業值寫至該第三暫存器陣列位置,其中,該處理器核心又:將該第一暫存器值及該第一暫存器陣列位置儲存於該第一暫存器陣列位置;將該第一暫存器值及該第一暫存器陣列位置儲存於該第二暫存器陣列位置;以及,將該第二暫存器值及該第二暫存器陣列位置儲存於第 三暫存器陣列位置。
- 如申請專利範圍第4項的處理器,其中,該處理器核心又向量化對該第一組變數的該作業、對該第二組變數的該作業、及對該第三組變數的該作業,以平行地執行對該第一、第二、及第三組變數的該作業。
- 如申請專利範圍第4項的處理器,其中,該處理器核心又:使用該第一暫存器陣列位置中的該第一暫存器值,對該第一組變數執行該作業,使用該第二暫存器陣列位置中的該第一暫存器值,對該第二組變數執行該作業,以及,使用該第三暫存器陣列位置中的該第二暫存器值,對該第三組變數執行該作業。
- 如申請專利範圍第4項的處理器,又包括作業暫存器陣列,其中,該處理器核心又:將該第一作業值及該第一暫存器陣列位置儲存於該作業暫存器陣列的第一暫存器陣列中;將該第二作業值及該第二暫存器陣列位置儲存於該作業暫存器陣列的第二暫存器陣列位置中;以及,將該第三作業值及該第三暫存器陣列位置儲存於該作業暫存器陣列的第三暫存器陣列位置中;及決定用於該第一暫存器陣列位置及該第二暫存器陣列位置之該第一暫存器陣列位置是相同的暫存器陣列位置。
- 如申請專利範圍第7項的處理器,其中,該處理器 核心又對該第一作業值及該第二作業值執行該水平加法作業以回應用於該第一暫存器陣列位置的該第一暫存器陣列位置及用於該第二暫存器陣列位置的第二暫存器陣列位置是相同的暫存器陣列位置。
- 如申請專利範圍第8項的處理器,其中,該處理器核心又:將該水平加法作業的結果儲存於該作業暫存器陣列之該第二暫存器陣列位置中;產生用於第二暫存器陣列位置的第一寫入遮罩;產生用於第三暫存器陣列位置的第二寫入遮罩;及將具有寫入遮罩的該第三暫存器陣列位置及該第二暫存器陣列位置中的值寫至與該第二暫存器陣列位置及該第三暫存器陣列位置相關連的記憶體裝置的記憶體位置。
- 如申請專利範圍第9項的處理器,其中,該第一寫入遮罩包括位元串,該位元串標示用於該第一作業暫存器陣列位置的第一記憶體位置及用於該第二作業暫存器陣列位置的第二記憶體位置是相同的記憶體位置。
- 如申請專利範圍第10項的處理器,其中,該第一記憶體位置及該第二記憶體位置是在該記憶體裝置中非連續的位置。
- 如申請專利範圍第4項的處理器,其中,該作業是加法作業。
- 一種對值陣列執行水平加法作業的方法,該方法包括: 由處理器對第一組變數執行作業以取得第一作業值;由該處理器對第二組變數執行該作業以取得第二作業值;由該處理器對第三組變數執行該作業以取得第三作業值,其中,平行地執行對該第一組變數的該作業、對該第二組變數的該作業、及對該第三組變數的該作業;由該處理器使該第一作業值與在暫存器陣列中的第一暫存器陣列位置相關連;由該處理器使該第二作業值與在該暫存器陣列中的第二暫存器陣列位置相關連;由該處理器使該第三作業值與在該暫存器陣列中的第三暫存器陣列位置相關連;由該處理器決定該第一暫存器陣列位置及該第二暫存器陣列位置是用於在該暫存器陣列的相同暫存器陣列位置;由該處理器對該第一作業值及該第二作業值執行水平加法作業以取得結果值;由該處理器將該結果值及該第三作業值寫至該第一暫存器陣列位置;以及從軟體應用接收請求以:由該處理器對該第一組變數執行該作業,其中,該第一組變數包括第一輸入值及第一暫存器值,以及,其中,該第一暫存器值儲存在該第一暫存器陣列位置;由該處理器對該第二組變數執行該作業,其中, 該第二組變數包括第二輸入值及該第一暫存器值,以及,其中,該第一暫存器值儲存在該第二暫存器位置;以及,由該處理器對該第三組變數執行該作業,其中,該第三組變數包括第三輸入值及第二暫存器值,以及,其中,該第二暫存器值儲存在該第三暫存器陣列位置。
- 如申請專利範圍第13項的方法,又包括由該處理器平行地向量化對該第一組變數的該作業、對該第二組變數的該作業、及對該第三組變數的該作業。
- 如申請專利範圍第13項的方法,又包括:由該處理器產生作業胞的作業暫存器陣列;由該處理器將該第一作業值及該第一暫存器陣列位置儲存於該作業暫存器陣列的第一作業胞中;由該處理器將該第二作業值及該第二暫存器陣列位置儲存於該作業暫存器陣列的第二作業胞中;由該處理器將該第三作業值及該第三暫存器陣列位置儲存於該作業暫存器陣列的第三作業胞中;由該處理器決定用於該第一作業胞的該第一暫存器陣列位置及用於該第二作業胞的該第二暫存器陣列位置是相同的暫存器陣列位置;以及,由該處理器對該第一作業值及該第二作業值執行該水平加法作業以回應用於該第一作業胞的該第一暫存器陣列位置及用於該第二作業胞的該第二暫存器陣列位置是相同的暫存器陣列位置。
- 如申請專利範圍第15項的方法,又包括: 由該處理器將用於該水平加法作業的該結果儲存於該作業暫存器陣列的第二作業胞中;由該處理器產生用於該第二作業胞的第一寫入遮罩;由該處理器產生用於該第三作業胞的第二寫入遮罩;以及由該處理器將具有該第一寫入遮罩的該第二作業胞及具有該第二寫入遮罩的該第三作業胞中的值寫至分別與該第二作業胞及該第三作業胞相關連的該暫存器陣列位置。
- 如申請專利範圍第16項的方法,其中,該第一寫入遮罩包括位元串,該位元串標示用於該第一作業胞的該第一暫存器陣列位置與用於該第二作業胞的該第二暫存器陣列位置是相同的暫存器陣列位置。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
WOPCT/CN2015/098654 | 2015-12-24 | ||
PCT/CN2015/098654 WO2017107124A1 (en) | 2015-12-24 | 2015-12-24 | Scatter reduction instruction |
US201615301206A | 2016-09-30 | 2016-09-30 | |
US15/301,206 | 2016-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201732563A TW201732563A (zh) | 2017-09-16 |
TWI724066B true TWI724066B (zh) | 2021-04-11 |
Family
ID=60479815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW105138472A TWI724066B (zh) | 2015-12-24 | 2016-11-23 | 分散縮減指令 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI724066B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030050941A1 (en) * | 1998-03-31 | 2003-03-13 | Patrice Roussel | Apparatus and method for performing intra-add operation |
US20060095739A1 (en) * | 2004-09-13 | 2006-05-04 | Ati Technologies Inc. | SIMD processor executing min/max instructions |
US20140013075A1 (en) * | 2011-12-23 | 2014-01-09 | Mostafa Hagog | Systems, apparatuses, and methods for performing a horizontal add or subtract in response to a single instruction |
US20140025717A1 (en) * | 2011-03-30 | 2014-01-23 | Sergey Lyalin | Simd integer addition including mathematical operation on masks |
US20140189321A1 (en) * | 2012-12-31 | 2014-07-03 | Tal Uliel | Instructions and logic to vectorize conditional loops |
US20140189308A1 (en) * | 2012-12-29 | 2014-07-03 | Christopher J. Hughes | Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality |
US20140281372A1 (en) * | 2013-03-15 | 2014-09-18 | Qualcomm Incorporated | Vector indirect element vertical addressing mode with horizontal permute |
-
2016
- 2016-11-23 TW TW105138472A patent/TWI724066B/zh not_active IP Right Cessation
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030050941A1 (en) * | 1998-03-31 | 2003-03-13 | Patrice Roussel | Apparatus and method for performing intra-add operation |
US20060095739A1 (en) * | 2004-09-13 | 2006-05-04 | Ati Technologies Inc. | SIMD processor executing min/max instructions |
US20140025717A1 (en) * | 2011-03-30 | 2014-01-23 | Sergey Lyalin | Simd integer addition including mathematical operation on masks |
US20140013075A1 (en) * | 2011-12-23 | 2014-01-09 | Mostafa Hagog | Systems, apparatuses, and methods for performing a horizontal add or subtract in response to a single instruction |
US20140189308A1 (en) * | 2012-12-29 | 2014-07-03 | Christopher J. Hughes | Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality |
US20140189321A1 (en) * | 2012-12-31 | 2014-07-03 | Tal Uliel | Instructions and logic to vectorize conditional loops |
US20140281372A1 (en) * | 2013-03-15 | 2014-09-18 | Qualcomm Incorporated | Vector indirect element vertical addressing mode with horizontal permute |
Also Published As
Publication number | Publication date |
---|---|
TW201732563A (zh) | 2017-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10572376B2 (en) | Memory ordering in acceleration hardware | |
TWI731892B (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
TWI730016B (zh) | 用於跨步分散運算的指令與邏輯的處理器、方法及系統 | |
US10635447B2 (en) | Scatter reduction instruction | |
TWI738682B (zh) | 用於載入索引和散佈元件的處理器、方法及系統 | |
TWI743064B (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
CN108475199B (zh) | 用于执行密钥值查找指令的处理设备 | |
US10216516B2 (en) | Fused adjacent memory stores | |
CN108431771B (zh) | 融合乘加(fma)低功能单元 | |
US20180285267A1 (en) | Reducing conflicts in direct mapped caches | |
US20170177543A1 (en) | Aggregate scatter instructions | |
TWI723075B (zh) | 用於向量置換的方法和處理器以及向量置換單元 | |
TW201723815A (zh) | 用於偶數與奇數向量取得操作之指令及邏輯 | |
US10691454B2 (en) | Conflict mask generation | |
US10261904B2 (en) | Memory sequencing with coherent and non-coherent sub-systems | |
US20170185413A1 (en) | Processing devices to perform a conjugate permute instruction | |
TWI724066B (zh) | 分散縮減指令 | |
CN108292219B (zh) | 浮点(fp)加法低指令功能单元 | |
TWI773654B (zh) | 處理器、運算系統及用於執行以向量為基礎的位元操控之方法 | |
TWI751990B (zh) | 衝突罩生成 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |