TW201741867A - 記憶體複製指令、處理器、方法及系統 - Google Patents
記憶體複製指令、處理器、方法及系統 Download PDFInfo
- Publication number
- TW201741867A TW201741867A TW106105474A TW106105474A TW201741867A TW 201741867 A TW201741867 A TW 201741867A TW 106105474 A TW106105474 A TW 106105474A TW 106105474 A TW106105474 A TW 106105474A TW 201741867 A TW201741867 A TW 201741867A
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- copy
- data
- source
- operand
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 558
- 238000000034 method Methods 0.000 title claims description 87
- 230000004044 response Effects 0.000 claims abstract description 37
- 238000003860 storage Methods 0.000 claims description 41
- 230000008859 change Effects 0.000 claims description 17
- 230000010076 replication Effects 0.000 claims description 7
- 230000008878 coupling Effects 0.000 claims description 6
- 238000010168 coupling process Methods 0.000 claims description 6
- 238000005859 coupling reaction Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 39
- 230000006870 function Effects 0.000 description 35
- 238000012545 processing Methods 0.000 description 22
- 239000000463 material Substances 0.000 description 16
- 239000000872 buffer Substances 0.000 description 11
- 238000007667 floating Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 10
- 239000008186 active pharmaceutical agent Substances 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000000717 retained effect Effects 0.000 description 7
- 235000012431 wafers Nutrition 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000036961 partial effect Effects 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 241000283080 Proboscidea <mammal> Species 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 235000019580 granularity Nutrition 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000004907 flux Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000011232 storage material Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Human Computer Interaction (AREA)
Abstract
處理器包括解碼單元,用以將記憶體複製指令解碼,該記憶體複製指令指出來源記憶體運算元的起始、目的記憶體運算元的起始、以及將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量。執行單元回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元。當該等來源和目的記憶體運算元重疊時使用向下複製方向。回應於該中斷,當使用該向下複製方向時,該執行單元是用以儲存將被複製的剩餘資料量,但不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始。
Description
此處所述之實施例大致是與處理器有關。特別是,此處所述之實施例大致是關於用以執行指令以從記憶體中的一個位置將資料複製到記憶體中的另一個位置的處理器。
各種不同類型的資料處理系統包括處理器和記憶體。該記憶體可被用來儲存軟體和資料。該軟體的範例可能包括:文書處理應用程式、試算表應用程式、網際網路瀏覽器應用程式、圖形應用程式、及聲頻應用程式等等。不同類型的資料之範例,僅舉一些例子來說,包括:文字資料、數值資料、圖形資料、及聲頻資料等等。
該處理器可執行該軟體之指令來運作於及/或處理該資料。這些指令可包括機器級指令或處理器之指令集的其他指令。該項技藝中已知有各種不同類型的指令來處理資料,諸如,舉例來說:從記憶體將資料載入至處理器的指令、用以處理資料的算術及/或邏輯指令、以及用以從處
理器將資料儲存至記憶體的指令等等。
530‧‧‧處理器
532‧‧‧解碼單元
533‧‧‧執行單元
534‧‧‧通用暫存器
540‧‧‧記憶體位址暫存器
542‧‧‧狀態暫存器
545‧‧‧記憶體
634‧‧‧32位元通用暫存器組
734‧‧‧64位元通用暫存器組
963‧‧‧翻譯器模組
1000‧‧‧處理器管線
1002‧‧‧提取級
1004‧‧‧長度解碼級
1006‧‧‧解碼級
1008‧‧‧分配級
1010‧‧‧重新命名級
1012‧‧‧排程級
1014‧‧‧暫存器讀取/記憶體讀取級
1016‧‧‧執行級
1018‧‧‧寫回/記憶體寫入級
1022‧‧‧異常處置級
1024‧‧‧提交級
1030‧‧‧前端單元
1032‧‧‧分支預測單元
1034‧‧‧指令快取單元
1036‧‧‧指令TLB單元
1038‧‧‧指令提取單元
1040‧‧‧解碼單元
1050‧‧‧執行引擎單元
1052‧‧‧重新命名/分配器單元
1054‧‧‧止用單元
1056‧‧‧排程器單元
1058‧‧‧實體暫存器檔案單元
1060‧‧‧執行叢集
1062‧‧‧執行單元
1064‧‧‧記憶體存取單元
1070‧‧‧記憶體單元
1072‧‧‧資料TLB單元
1074‧‧‧資料快取單元
1076‧‧‧L2快取單元
1090‧‧‧處理器核心
1100‧‧‧指令解碼器
1102‧‧‧互連網路
1104‧‧‧L2快取
1106‧‧‧L1快取
1106A‧‧‧L1資料快取
1108‧‧‧純量單元
1110‧‧‧向量單元
1112‧‧‧純量暫存器
1114‧‧‧向量暫存器
1120‧‧‧拌和單元
1122A、1122B‧‧‧數值轉換單元
1124‧‧‧複製單元
1126‧‧‧寫入遮罩暫存器
1128‧‧‧16位元寬ALU
1200‧‧‧處理器
1202A~1202N‧‧‧核心
1204A~1204N‧‧‧快取單元
1206‧‧‧共享快取單元
1208‧‧‧專用邏輯
1210‧‧‧系統代理單元
1212‧‧‧環狀基礎之互連單元
1214‧‧‧積體記憶體控制器單元
1216‧‧‧匯流排控制器單元
1300‧‧‧系統
1310、1315‧‧‧處理器
1320‧‧‧控制器集線器
1340‧‧‧記憶體
1345‧‧‧共處理器
1350‧‧‧輸入/輸出集線器(IOH)
1360‧‧‧輸入/輸出(I/O)裝置
1390‧‧‧圖形記憶體控制器集線器(GMCH)
1400、1500‧‧‧系統
1414、1514‧‧‧I/O裝置
1415‧‧‧處理器
1416‧‧‧第一匯流排
1418‧‧‧匯流排橋接器
1420‧‧‧第二匯流排
1422‧‧‧鍵盤及/或滑鼠
1424‧‧‧聲頻I/O
1427‧‧‧通訊裝置
1428‧‧‧儲存器單元
1432、1434‧‧‧記憶體
1438‧‧‧共處理器
1439‧‧‧高效能介面
1450‧‧‧點對點互連
1470、1480‧‧‧處理器
1472、1482‧‧‧積體記憶體控制器(IMC)單元
1478、1488‧‧‧P-P介面電路
1490‧‧‧晶片組
1492、1496‧‧‧介面
1515‧‧‧舊有I/O裝置
1600‧‧‧系統單晶片(SoC)
1602‧‧‧互連單元
1610‧‧‧應用處理器
1620‧‧‧共處理器
1630‧‧‧靜態隨機存取記憶體(SRAM)單元
1632‧‧‧直接記憶體存取(DMA)單元
1640‧‧‧顯示單元
1704‧‧‧x86編譯器
1708‧‧‧替代性指令集編譯器
1712‧‧‧指令轉換器
1714‧‧‧無x86指令集核心的處理器
1716‧‧‧具有至少一個x86指令集核心的處理器
可藉由參照以下說明及用來解說實施例的附圖而最清楚地理解本發明。在圖式中:第1圖是執行記憶體複製指令之實施例的方法之實施例的方塊流程圖。
第2圖是在向上複製方向上無運算元重疊之複製作業的方塊圖。
第3圖是在向上複製方向上具有運算元重疊之複製作業的方塊圖,且其解說在重疊區域中的初始來源資料可由該複製作業所覆寫。
第4圖是在向下複製方向上具有運算元重疊之複製作業的方塊圖。
第5圖是運作來執行記憶體複製指令之實施例的處理器之實施例的方塊圖。
第6圖是合適之32位元的通用暫存器組之範例實施例的方塊圖。
第7圖是合適之64位元的通用暫存器組之範例實施例的方塊圖。
第8圖是在重疊記憶體運算元上以向下複製方向執行記憶體複製指令之實施例的方法之實施例的方塊流程圖,該方法允許該記憶體複製指令被中斷。
第9圖是翻譯器模組之實施例的方塊圖。
第10A圖是解說有序管線之實施例以及暫存器重新命名的無序派發/執行管線之實施例的方塊圖。
第10B圖是包括耦合至執行引擎單元之前端單元且兩者皆耦合至記憶單元的處理器核心之實施例的方塊圖。
第11A圖是單一處理器核心之實施例的方塊圖,連同其至晶粒上互連網路的連接方式,還有其第二階(L2)快取的局部子集。
第11B圖是第11A圖之部份處理器核心的放大圖之實施例的方塊圖。
第12圖是可具有多於一個核心、可具有整合記憶體控制器、且可具有整合圖形的處理器之實施例的方塊圖。
第13圖是電腦架構之第一實施例的方塊圖。
第14圖是電腦架構之第二實施例的方塊圖。
第15圖是電腦架構之第三實施例的方塊圖。
第16圖是電腦架構之第四實施例的方塊圖。
第17圖是根據本發明之實施例使用軟體指令轉換器以將來源指令集中之二進制指令轉換成目標指令集中之二進制指令的方塊圖。
在此所揭示的是記憶體複製指令、用以處理或執行該等記憶體複製指令的處理器、由該等處理器所執行以處理或執行該等記憶體複製指令的方法、包含一個以上之處理器以處理或執行該等記憶體複製指令的系統、以及用以儲
存或以其他方式提供該等記憶體複製指令的機器可讀取媒體。在某些實施例中,該等處理器可具有邏輯以處理或執行該等記憶體複製指令。在某些實施例中,該邏輯可包括:解碼單元,用以將該等記憶體複製指令解碼;以及執行單元,用以執行該等記憶體複製指令。在以下說明中陳述許多具體細節(例如:具體指令作業、暫存器、指出運算元的方式、資料格式、處理器組態、微架構細節、作業順序等等)。但可不需這些特定細節來實行實施例。在其他情況中,未詳細顯示已知電路、結構和技術,以避免模糊對本說明的理解。
第1圖是處理或執行記憶體複製指令之實施例的方法100之實施例的方塊流程圖。在各種實施例中,可由處理器、指令處理設備、數位邏輯裝置、積體電路、系統單晶片(SoC)或類似物來執行該方法。
該方法包括在方塊101接收該記憶體複製指令。在各種態樣中,可於處理器、SoC、積體電路、或類似物、或其一部份(例如:指令提取單元、解碼單元、匯流排介面單元等等)接收該指令。在各種態樣中,可從處理器外及/或晶粒外來源(例如:從晶粒外記憶體或匯流排或其他互連),或是從處理器上及/或晶粒上來源(例如:從指令快取、指令佇列、或晶粒上記憶體)接收該指令。該記憶體複製指令可代表巨集指令、機器碼指令、或是處理器之指令集的其他指令或控制信號。
在某些實施例中,該記憶體複製指令可明確地指明
(例如:透過一個以上的欄位或一組位元),或以其他方式指出(例如:含蓄地指出),記憶體中之來源運算元的起始、記憶體中之目的運算元的起始、以及將從該來源運算元複製到該目的運算元的資料量之每一者。在各種實施例中,來源和目的運算元可各自代表字串(例如:文數字符串)、一序列之資料元素(例如:文數字符)、包括相連資料元素的資料結構、或類似物。亦可單純將該等來源和目的運算元視為並稱作該指令的來源和目的。如此處所使用的,用語「運算元」並未暗示任何算數、邏輯、或數學運算須被執行於該等運算元上。個別資料或資料元素可具有8位元(例如:位元組)、16位元(例如:字)、32位元(例如:雙字)、或64位元(例如:四字)的粒度。該等來源和目的運算元的起始點可代表位址、位址資訊、指標、偏移、或是該等來源和目的運算元之起始或最低定址部份的其他表示。在不同實施例中可以不同方式來表達所要複製的資料量。作為範例,在各種實施例中,可將資料量表示為位元、位元組、字、雙字、四字、或將被複製的資料元素之數目,或是以位元、位元組、字、雙字、四字、或資料元素為單位之來源運算元的長度,或是將被複製之字串的大小,或是位址、指標、偏移、或該來源或目的運算元之末端或最高位址部份的其他表示。
該等來源和目的運算元的起始點以及將被複製的資料量可代表輸入或輸入參數。在不同實施例中可以不同方式由指令來指出這些輸入或輸入參數。作為一範例,該指令
可具有來源及/或目的運算元規格欄位,以指明用來儲存該來源運算元之起始、該目的運算元之起始、以及將被複製的資料量之暫存器、記憶體位置、或其他儲存器位置。作為另一範例,這些暫存器或其他儲存器位置的一者以上可選擇性地對該指令為隱含的(例如:對該指令之運算碼為隱含的)。作為又一範例,該來源運算元的起始、該目的運算元的起始、及/或將被複製的資料量之一者以上可選擇性地由該指令本身的欄位或其他部份加以指明或是以其他方式加以指出,而非在暫存器或其他儲存器位置中加以指明或以其他方式加以指出。作為一範例,該指令的欄位可具有用以指出將被複製的資料量(例如:位元組的數目)之值。可選擇性地使用這些不同方式的各種組合。
為了進一步解說,在某些實施例中,該等來源和目的運算元的起始點、以及將被複製的資料量可透過執行該指令之處理器、積體電路、或其他裝置的架構暫存器來加以指明或以其他方式加以指出。在某些實施例中,這些暫存器可為通用暫存器(例如:它們可被部份用於位址產生以及一般算術及/或邏輯計算)。舉例來說,第一暫存器(例如:第一通用暫存器)可被用來儲存位址、位址資訊、指標、偏移、或是該來源運算元之起始或最低位址部份的其他表示。同樣地,可使用第二暫存器(例如:第二通用暫存器)來儲存位址、位址資訊、指標、偏移、或是該目的運算元之起始或最低位址部份的其他表示。可使用第三暫存器(例如:第三通用暫存器)來儲存位元、位元組、字、
雙字、四字、資料元素的數目,該來源或目的運算元之末端的表示,或是將被複製之資料量的另一表示。為了解說可能的Intel® 64及/或IA-32架構實作之更進一步的一個具體範例,可選擇性地使用通用暫存器ESI(使用32位元模式或是使用64位元模式的暫存器RSI)來儲存對該來源運算元的起始之指標,可選擇性地使用通用暫存器EDI(使用32位元模式或是使用64位元模式的暫存器RDI)來儲存對該目的運算元的起始之指標,並可選擇性地使用通用暫存器ECX(32位元模式或是使用64位元模式的暫存器RCX)來儲存將被複製的位元組之數目,但本發明的範圍不限於此。以下將進一步加以探討的第6圖~第7圖提供了對Intel® 64及/或IA-32架構中之前述通用暫存器的進一步論述。
在方塊102,可回應於該記憶體複製指令而做出判斷該等來源和目的運算元是否重疊,諸如,舉例來說,根據單純減法、根據預測、根據試探法、或是類似物。如以下將進一步加以說明的,該等來源和目的運算元在記憶體中是否重疊可改變執行該指令的特定方式,以便確保達成正確及/或預期結果(見例如對第2圖~第4圖的論述)。該等來源和目的運算元是否重疊一般取決於由該指令所指出的特定輸入參數(例如:所指出之該等來源和目的運算元的起始點、以及所指出之將被複製的資料量)。在某些情況中,該等輸入參數可使得該等來源和目的運算元重疊,而在其他情況中,該等輸入參數可使得該等來源和目的運算
元不重疊。作為範例,若該目的運算元的起始離該來源運算元的起始比將被複製的資料量更遠,則可判斷(例如:回應於所執行的指令)該等來源和目的運算元不重疊。抑或,若該目的運算元的起始比將被複製的資料量更接近該來源運算元的起始,則可判斷(例如:回應於所執行的指令)該等來源和目的運算元重疊。
為了進一步解說,根據上述Intel® 64及/或IA-32架構實作的具體範例(例如:其中ESI具有對該來源運算元的起始之指標,EDI具有對該目的運算元的起始之指標,而ECX具有將被複製的位元組之數目),則可藉由評估儲存在EDI中的指標或值減去儲存在ESI中的指標或值之間的差是否大於儲存在ECX中的值或將被複製的位元組之數目(例如:若(EDI-ESI)>ECX)來做出此種判斷。或是,在64位元模式中,可藉由評估儲存在RDI中的指標或值減去儲存在RSI中的指標或值之間的差是否大於儲存在RCX中的值或將被複製的位元組之數目(例如:若(RDI-RSI)>RCX)來做出此種判斷。這些特定暫存器當然並非必要。在一態樣中,可使用無符號比較法來執行大於的比較。此種單純減法或差分是用以判斷適當複製方向的相對簡單及直接之方式,但若想要的話,可選擇性地使用更為詳盡之方法。舉例來說,考慮到用以判斷將被用於該複製作業之複製方向的替代方法可根據試探法、過去歷史、及/或預測。作為範例,若兩個複製方向都將達成正確結果(例如:在無重疊的情況中),該處理器可根據額外的因
素,諸如,舉例來說,總體機器狀態、對該指令的運算元、先前對該指令所做的決定(例如:使用歷史來預測)、或類似物而在向上或向下複製方向之間做選擇。此外,熟習該項技藝且得益於本說明者將可理解,有至少部份根據由該記憶體複製指令所指出之特定輸入參數來做出此種判斷的各種其他方式。
再次參照第1圖,若該等來源和目的運算元不重疊(亦即,在方塊102的判斷為「否」),則可判斷以向上複製來執行該記憶體複製指令及/或其記憶體複製、移動、或其他儲存作業。該方法可前進至方塊103,其中該處理器或其他積體電路可開始執行向上或正向複製、移動、或其他儲存,以從該來源運算元將資料複製或儲存至該目的運算元。該等向上或正向複製可代表在從該等運算元之起始朝向該等運算元之末端(例如:從頭至尾)及/或從較低位址之資料至較高位址之資料的方向上複製。在此使用用語「較高」和「較低」來作為相對用詞(亦即,彼此相對)而非絕對用詞。另外,經常將此處所述之作業稱為「複製」,但它們亦可被實行為從一記憶體位置至另一者的「移動」或其他儲存。
為了進一步解說,根據上述Intel® 64及/或IA-32架構實作的具體範例(例如:其中ESI具有對該來源運算元的起始之指標,EDI具有對該目的運算元的起始之指標,而ECX具有將被複製為一串或其他相連序列之位元組的位元組之數目),該等向上或正向複製可被執行如以下虛
擬碼所示:While (ECX>0) { [EDI] ← [ESI] //從頭開始從來源運算元複製到目的運算元ESI++, EDI++ //自以向上順序執行複製起遞增起始點ECX-- //遞減剩餘將被複製的位元組之數目}
在此虛擬碼中,符號「←」表示複製或以其他方式儲存(例如:從ESI複製到EDI)。符號「++」表示遞增先前通用暫存器中的值。符號「--」表示遞減先前通用暫存器中的值。符號「//」表示註解在後。亦考慮到使用三個不同32位元或64位元通用暫存器(例如:EDI可由暫存器R1所代替,ECX可由暫存器R2所代替,而ECX可由暫存器R3所代替)的同等類型之複製作業,且其中該等輸入參數是以各種不同方式加以表示(例如:複製四位元組的雙字,但以位元組來表示將被複製的資料量,所以對於各個被複製的資料元素是遞減四等等)。
再次參照第1圖。抑或,若該等來源和目的運算元不重疊(亦即,在方塊102的判斷為「是」),則可判斷以向下複製來執行該記憶體複製指令及/或其記憶體複製作業。該方法可前進至方塊104,其中該處理器或其他積體電路可開始執行向下或反向複製,以從該來源運算元將資料複製到該目的運算元。該等向下或反向複製可代表在從該等運算元之末端朝向該等運算元的每一者之起始(例如:從尾至頭)及/或從較高位址之資料至較低位址之資料
的方向上複製。
為了進一步解說,根據上述Intel® 64及/或IA-32架構實作的具體範例(例如:其中ESI具有對該來源運算元的起始之指標、EDI具有對該目的運算元的起始之指標,而ECX具有將被複製的位元組之數目),該等向上或正向複製可被執行如以下虛擬碼所示:While (ECX>0) { [EDI+(ECX-1)] ← [ESI+(ECX-1)] //從末端開始從來源複製到目的ECX-- //遞減剩餘將被複製的位元組之數目}
在此虛擬碼中,符號「←」表示在該箭頭的方向上複製或以其他方式儲存。符號「--」表示遞減先前通用暫存器中的值。符號「//」表示註解在後。亦考慮到使用三個不同32位元或64位元通用暫存器(例如:R1、R2、和R3)的同等類型之複製作業,且其中該等輸入參數是以各種不同方式加以表示(例如:該等暫存器R1、R2、R3的一者以上是以和其他一者以上不同的粒度來加以表示)。
如方塊102~104所示,可以向上或向下複製來執行該記憶體複製指令。此外,回應於該記憶體複製指令(例如:回應於被解碼的指令、回應於將該指令解碼所致之控制信號等等),該處理器或其他積體電路可判斷將使用向上複製和向下複製的哪一者(例如:根據是否有重疊)。在某些實施例中,回應於該記憶體複製指令,該處理器或其他積體電路可運作來判斷此種複製方向,主要或完全根據
由該記憶體複製指令所指出的輸入參數(例如:上述輸入參數的任一者)。在某些實施例中,可不使用或至少向軟體及/或以其他方式向該記憶體複製指令的執行範圍之外請求複製方向暗示來判斷該複製方向。
另一個可能的方法是由軟體提供該複製方向的暗示或指示,並由該指令使用、依賴、或是在某些情況中被控制而根據來自該軟體的該複製方向之此暗示或指示來選擇複製方向。作為範例,該軟體可藉由設定方向旗標、旗標暫存器中的位元、狀態暫存器中的位元、或類似物來提供該暗示或指示,且該指令的實行可檢查此方向旗標、旗標暫存器中的位元、狀態暫存器中的位元、或類似物,並使用所指出的複製方向,而非透過其本身的執行/實行來自主地判斷該複製方向。但來自該軟體的該複製方向之此種暗示或指示一般在該記憶體複製指令的執行範圍之外須由該軟體加以執行(例如:在執行該記憶體複製指令來檢查該暗示或指示之前)。此外,來自該軟體的該複製方向之此種暗示或指示一般包括執行一個以上的額外指令(例如:視是否有重疊、改變該位元之值等等)。據此,使用來自該軟體的該複製方向之此種暗示或指示可能會有的缺點是,其可能包括執行額外的指令及/或花費額外的時間及/或增加該軟體所需做的工作量(例如:為程式設計師製造更多工作等等)。
然而,在某些實施例中,此等來自軟體的暗示或指示可能不會被用來判斷該複製方向,或至少是非必須。更確
切來說,如上所論述的,該記憶體複製指令在被執行時可運作來根據對該指令的輸入參數而判斷該複製方向(例如:藉由使用來源運算元的起始、目的運算元的起始、以及要複製的資料量來評估是否有重疊)。在某些實施例中,當判斷要使用的複製方向時,該記憶體複製指令在被執行時可選擇性地不檢查且可不使用此種軟體提供的複製方向之暗示或指示。在某些實施例中,可能沒有此種來自軟體的複製方向之暗示或指示。在某些實施例中,該記憶體複製指令在被執行時可運作來完全根據該記憶體複製指令的輸入運算元或來源運算元而自主地判斷該複製方向(例如:不需來自軟體的幫助)。
再次參照第1圖,回應於及/或由於該記憶體複製指令,在方塊105,該處理器或其他積體電路可從記憶體中之來源運算元將該資料量(例如:如由該記憶體複製指令所指出的)複製、移動、或以其他方式儲存至記憶體中之目的運算元。在某些實施例中,可分開或以彼此分離的部份來複製、移動、或以其他方式儲存該資料的不同部份。舉例來說,可將複製、移動、或儲存作業重複數次,直到複製了全數資料為止。為了進一步解說,根據上述Intel® 64及/或IA-32架構實作的具體範例,在各種實施例中,該指令在被執行時可運作來執行以下任一者:
(1)將(E)CX位元組從位址DS:[(E)SI]儲存至位址ES:[(E)DI]
(2)將RCX位元組從位址[RSI]儲存至位址[RDI]
(3)將(E)CX字從位址DS:[(E)SI]儲存至位址ES:[(E)DI]
(4)將(E)CX雙字從位址DS:[(E)SI]儲存至位址ES:[(E)DI]
(5)將RCX四字從位址[RSI]儲存至位址[RDI]
在上面的表示式中,DS代表資料區段暫存器,而ES代表用以進一步指明該等記憶體位址的額外區段暫存器。暫存器周圍的括號(例如:[RSI])表示該暫存器中的值指出記憶體位址的記憶體引用。在此情況中,於64位元模式中,該等區段暫存器ES和DS是平的(flat)(例如:區段基底為零),所以該記憶體引用單純為該暫存器中的值而無區段暫存器。該(E)表示選擇性/替代性定址形式。舉例來說,在64位元模式中,該64位元通用暫存器(例如:RDI)具有64位元的指標,而在32位元模式中,可以不同的定址形式來引用記憶體,也就是在32位元通用暫存器(例如:EDI)中使用32位元的指標,或是在16位元通用暫存器(例如:DI)中使用16位元的指標。
以相當基本的形式顯示及說明了方法100,但可選擇性地對該方法添加及/或移除作業。舉例來說,可選擇性地添加與處置中斷相關的作業,如以下進一步針對第8圖所論述的(例如:方塊857)。另外,雖然該流程圖根據實施例而顯示特定作業順序,但該順序僅為示範性。替代性實施例可以不同順序來執行該等作業、結合某些作業、重疊某些作業等等。
所解說之方法包括架構性作業(例如:可由軟體觀點所見者)。在其他實施例中,該方法可選擇性地包括一個以上的微架構性作業。作為範例,可將該指令提取、解碼、無序排程,可存取來源運算元,可產生記憶體位址,執行單元可執行微架構性作業來實行該指令等等。在某些實施例中,用以實行該指令的該等微架構性作業可選擇性地包括使用該指令的輸入參數來判斷該等來源和目的運算元是否重疊。
第2圖是解說在向上複製方向213上無運算元重疊217之複製作業208的圖式。該複製是從來源記憶體運算元209執行至目的記憶體運算元214。如本範例中所示,在來源和目的記憶體運算元之間無重疊217。舉例來說,本範例的來源記憶體運算元佔用記憶體位址212[0100]~[0104],而目的記憶體運算元佔用記憶體位址[0105]~[0109]。在所解說的範例中,該來源記憶體運算元儲存拼出字組「HORSE」的值或字符。該複製是在向上複製方向213上所執行。在此向上複製方向上,最初先從該來源記憶體運算元的起始210將資料複製到該目的記憶體運算元的起始215,並繼續從該來源記憶體運算元的末端211將資料複製到該目的記憶體運算元的末端216。使用個別箭頭來顯示該等資料元素的每一者被從哪個來源運算元位置或記憶體位址複製到哪個目的運算元位置或記憶體位址。如所示,該來源運算元中拼出字組「HORSE」的值或字符被複製以在該目的運算元中拼出字組「HORSE」。在此情
況中,當無重疊時,該等來源運算元起始字符皆不會因為該複製而被覆寫。在這種無重疊的情況中,在所示的向上方向上或向下方向上複製皆適合。經常在此種情況中使用該向上方向,因其可能常會具有較佳效能。
第3圖是解說在向上複製方向313上具有運算元重疊321之複製作業320,並解說在重疊區域中的初始來源資料可由該複製作業所覆寫的圖式。該複製是從來源記憶體運算元309執行至目的記憶體運算元314。如本範例中所示,在來源和目的記憶體運算元之間有運算元重疊321。舉例來說,本範例的來源記憶體運算元佔用記憶體位址312[0100]~[0108],而目的記憶體運算元佔用記憶體位址[0104]~[010C]。位置或記憶體位址[0104]~[0108]在來源和目的運算元之間形成運算元重疊的區域321。在所解說的範例中,該來源記憶體運算元儲存拼出字組「ELEPHANTS」的值或字符。該複製是在向上複製方向313上所執行。在此向上複製方向上,最初先從該來源記憶體運算元的起始310將資料複製到該目的記憶體運算元的起始315,並繼續從該來源記憶體運算元的末端311將資料複製到該目的記憶體運算元的末端316。使用個別箭頭來顯示一些該等資料元素被從哪個來源運算元位置或記憶體位址複製到哪個目的運算元位置或記憶體位址。如所示,可將該來源運算元之位址[0100]-0103]中拼出字組「ELEP」的值或字符複製到該來源運算元的位址[0104]-0107]。這些資料元素在運算元重疊的區域321前面。但
注意到,當在運算元重疊的區域中於向上方向上複製時會產生不同情況。具體來說,注意到,當從來源運算元的位址[0104]執行複製到目的運算元的對應位址[0108]時,字母「E」而非字母「H」會被複製到目的運算元。這是因為來自來源運算元之位址[0100]的字母「E」先前已在該複製作業中覆寫了記憶體中的位址[0104](例如:如由圖中最左邊的箭頭所示)。換言之,來源運算元中的某個開始或初始資料在其可被複製到目的運算元之前會由該複製作業所覆寫並遺失。運算元重疊之區域中的其他資料元素存在類似情況。因此,該複製作業從來源將字組「ELEPHANTS」複製到目的運算元中的「ELEPELEPE」。在這種重疊的情況中,在向上方向上複製可導致資料遺失和錯誤結果。如以下將進一步加以論述的,若將標準記憶體複製功能memcpy(例如:可在glibc、Visual Studio 6.0等中找到)用於重疊記憶體中的運算元,可能會遭遇此種資料遺失,因其無法保留重疊區域中的來源資料。反之,當有運算元重疊時可使用標準記憶體複製功能memmove,但其易具有較慢的效能。
第4圖是解說在向下複製方向426上具有運算元重疊421之複製作業425的圖式。該複製是從來源記憶體運算元409執行至目的記憶體運算元414。如本範例中所示,在來源和目的記憶體運算元之間有運算元重疊421。舉例來說,本範例的來源記憶體運算元佔用記憶體位址412[0100]~[0108],而目的記憶體運算元佔用記憶體位址
[0104]~[010C]。位置或記憶體位址[0104]~[0108]在來源和目的運算元之間形成運算元重疊的區域421。在所解說的範例中,該來源記憶體運算元儲存拼出字組「ELEPHANTS」的值或字符。該複製是在向下複製方向426上所執行。在此向下複製方向上,最初先從該來源記憶體運算元的末端411將資料複製到該目的記憶體運算元的末端416,並繼續從該來源記憶體運算元的起始410將資料複製到該目的記憶體運算元的起始415。舉例來說,首先複製字母「S」,然後複製字母「T」,然後複製字母「N」,諸如此類。使用個別箭頭來顯示一些該等資料元素被從哪個來源運算元位置或記憶體位址複製到哪個目的運算元位置或記憶體位址。如所示,該來源運算元中拼出字組「ELEPHANTS」的值或字符可被如實地複製,以在該目的運算元中拼出字組「ELEPHANTS」。即使在運算元重疊的區域中,當於向下方向上複製時,該來源運算元的資料也不會因該複製而被覆寫並遺失。據此,在運算元重疊的情況中,可使用在向下方向上的複製來避免在複製作業期間覆寫並遺失某些初始或起始來源運算元資料。
第5圖是運作來執行記憶體複製指令531之實施例的處理器530之實施例的方塊圖。在該圖中,記憶體545與該處理器耦合,但其他實施例是單獨關於該處理器而無該記憶體(例如:在被部署於具有該記憶體的系統之前的處理器)。在某些實施例中,處理器530可運作來執行第1圖的方法100。此處針對方法100所述的特徵和特定任意
細節亦選擇性地適用於處理器530,其可選擇性地執行該方法。抑或,可藉由及/或在類似或不同處理器或設備內執行方法100。此外,處理器530可執行與方法100類似或不同的方法。
在某些實施例中,處理器530可為通用處理器(例如:用於桌上型電腦、膝上型電腦、或其他電腦之類型的通用微處理器或中央處理單元(CPU),舉例來說,位於半導體晶粒或積體電路上)。抑或,該處理器可為特殊用途處理器。合適之特殊用途處理器的範例包括但不限於:網路處理器、通訊處理器、密碼處理器、圖形處理器、共處理器、嵌入式處理器、數位信號處理器(DSP)、及控制器(例如:微控器)。該處理器可具有各種複雜指令集計算(CISC)架構、精簡指令集計算(RISC)架構、極長指令字(VLIW)架構、混合架構、其他類型之架構的任一者,或是具有不同架構的組合(例如:不同核心可具有不同架構)。
在作業期間,處理器530可接收記憶體複製指令531。在各種態樣中,可從處理器外及/或晶粒外來源(例如:從晶粒外記憶體或匯流排或其他互連),或是從處理器上及/或晶粒上來源(例如:從指令快取、指令佇列、或晶粒上記憶體)接收該指令。該記憶體複製指令可代表微指令、機器碼指令、或是該處理器之指令集的其他指令或控制信號。
在某些實施例中,該記憶體複製指令可明確地指明
(例如:透過一個以上的欄位或一組位元),或以其他方式指出(例如:含蓄地指出),記憶體545中之來源記憶體運算元546的起始535、該記憶體中之目的記憶體運算元547的起始536、以及將從來源記憶體運算元546複製到目的記憶體運算元547的資料量537之每一者。可使用上面針對第1圖所述之各種不同方法的任一者而由該指令指明或以其他方式指出這些輸入或輸入參數。此外,可由上面針對第1圖所述的各種不同類型之資訊的任一者來表示這些輸入或輸入參數。
如所示,在某些實施例中,該來源記憶體運算元的起始535、該目的記憶體運算元的起始536、以及將被複製的資料量537可各自選擇性地被儲存在該處理器的一組通用暫存器534之不同暫存器中,但本發明的範圍不限於此。該等通用暫存器的每一者可代表運作來儲存資料的晶粒上儲存器位置。該等通用暫存器可代表架構性可見或軟體及/或程式設計師可見的架構性暫存器,及/或是由該處理器的指令集之指令所指出的暫存器以識別運算元。該等通用暫存器可在不同微架構中以不同方式加以實行,且不限於任何特定類型的設計。合適類型之暫存器的範例包括,但不限於:專屬實體暫存器、使用暫存器重新命名的動態分配實體暫存器、及其組合。在某些實施例中,這些通用暫存器可選擇性地為針對第6圖~第7圖所示及所述之通用暫存器的任一者,但本發明的範圍不限於此。在其他實施例中,可選擇性地使用記憶體位址或其他儲存器位
址來儲存記憶體複製指令的輸入及/或輸入參數的一者以上。
再次參照第1圖,該處理器包括解碼單元或解碼器532。該解碼單元可接收並解碼該記憶體複製指令。該解碼單元可輸出一個以上的相對較低階指令或控制信號(例如:一個以上的微指令、微作業、微碼登錄點、解碼之指令或控制信號等),它們反映、代表、及/或源自相對較高階記憶體複製指令。在某些實施例中,該解碼單元可包括:一個以上的輸入結構,(例如:埠、互連、介面),用以接收該記憶體複製指令;與其耦合的指令辨識及解碼邏輯,以辨識及解碼該記憶體複製指令;以及與其耦合的一個以上之輸出結構(例如:埠、互連、介面),以輸出該(等)低階指令或控制信號。可使用各種不同機制來實行該解碼單元,該等機制包括,但不限於:微碼唯讀記憶體(ROM)、查找表、硬體實作、可程式化邏輯陣列(PLA)、以及適合實行解碼單元的其他機制。
在某些實施例中,可選擇性地使用指令仿真器、翻譯器、修改器(morpher)、解譯器、或其他指令轉換模組,而不是直接將該記憶體複製指令提供至解碼單元532。可以軟體、硬體、韌體、或其組合來實行各種類型的指令轉換模組。在某些實施例中,指令轉換模組可位於處理器之外,諸如,舉例來說,在分離之晶粒上及/或在記憶體中(例如:作為靜態、動態、或運行時仿真模組)。作為範例,該指令轉換模組可接收可屬於第一指令集的該記憶體
複製指令,並可將該記憶體複製指令仿真、翻譯、修改、解譯、或以其他方式轉換成可屬於第二不同指令集的一個以上之對應中間指令或控制信號。可將該第二指令集的一個以上之中間指令或控制信號提供至解碼單元(例如:解碼單元532),其可將它們解碼成可由該處理器的本體硬體(例如:一個以上的執行單元)所執行的一個以上之較低階指令或控制信號。
在某些實施例中,該處理器亦可包括一個以上的記憶體位址暫存器,該等記憶體位址暫存器是運作來儲存將配合該等來源和目的運算元之每一者的起始所使用的記憶體位址資訊,以將該等來源和目的記憶體運算元定址。合適之記憶體位址暫存器的範例包括,但不限於:資料區段選擇器暫存器、延伸區段選擇器暫存器、及類似物,或是該技藝中已知用於不同架構的其他此等記憶體位址暫存器。作為範例,該處理器可使用將該記憶體組織並存取為一序列之位元組的位元組定址。可在代表可被定址之記憶體範圍的位址空間內使用位元組位址來定址及存取記憶體中的一個以上之位元組。藉由分段定址,程式可具有被稱為區段的多個獨立位址空間。可將位元組位址具體指明為來自區段暫存器之位址資訊和來自通用暫存器之進一步位址資訊(例如:位元組位址)的組合(例如:區段暫存器:位元組位址)。舉例來說,可使用位址DS:FF79H來將DS區段暫存器所指之區段中的位址FF79H上的位元組定址。
再次參照第5圖,執行單元533是與解碼單元532耦
合,與該等來源或輸入參數(例如:該來源記憶體運算元的起始535、該目的記憶體運算元的起始536、和資料量537)耦合,與記憶體545耦合,以及與通用暫存器534耦合。該執行單元可接收代表及/或源自該記憶體複製指令的一個以上之解碼或以其他方式轉換之指令或控制信號。該執行單元亦可接收由該指令所指出的來源或輸入參數。在某些實施例中,該執行單元可回應於及/或由於該記憶體複製指令(例如:回應於自該指令所解碼的一個以上之指令或控制信號及/或回應於被解碼的指令及/或回應於被提供至解碼器的指令)而運作來判斷至少將執行該第一複製作業(例如:還有在故障、岔斷、或異常所致之任何可能的中斷或懸置之前的其他作業)的複製方向。
在某些實施例中,該執行單元可運作來至少部份根據在該等來源和目的記憶體運算元之間是否有重疊而做出此種複製方向的判斷。如所示,在某些實施例中,執行單元可包括複製方向判斷邏輯538,該複製方向判斷邏輯538包括來源和目的記憶體運算元重疊判斷邏輯539。可以硬體(例如:積體電路、電晶體或其他電路元件等)、韌體(例如:ROM、EPROM、快閃記憶體、或是其他持續性或非易失性記憶體和微碼、微指令、或其他被儲存於其中的較低階指令)、軟體(例如:被儲存於記憶體中的較高階指令)、或其組合(例如:可能與韌體及/或軟體其中一者以上組合的硬體)來實行這些邏輯。該來源和目的記憶體運算元重疊判斷邏輯可運作來判斷該等來源和目的記憶體運算
元是否重疊。該邏輯可運作來使用先前上面針對第1圖所述之方法的任一者而做出此判斷。舉例來說,此可包括若該目的運算元的起始(例如:以位元組為單位)離該來源運算元的起始比將被複製的資料量(例如:以位元組為單位)更遠,則判斷沒有重疊,或是若該目的運算元的起始比將被複製的資料量更接近該來源運算元的起始,則判斷有重疊。
在某些實施例中,該邏輯可運作來使用由該記憶體複製指令所指出的輸入參數及/或可由此導出的一個以上之參數而做出此判斷。在某些實施例中,至少部份根據此種是否有重疊的判斷,該執行單元可運作來判斷在可能的中斷之前的至少該第一或初始複製作業的複製方向。在某些實施例中,至少在有重疊時,執行單元可判斷向下複製方向。若沒有重疊,則可使用向上或向下複製方向,但在某些實施例中可使用該向上複製方向,因其可能會更有效率。在某些實施例中,該執行單元可運作來自主地判斷該複製方向,主要或在某些情況中完全根據由該記憶體複製指令所指出的輸入參數及/或可由此導出的參數,而不需請求且通常不需使用由軟體所提供之該使用什麼複製方向的複製方向暗示或指示。如所示,該執行並非必須且可能不會存取或檢查由軟體所提供的複製方向暗示543(例如:在狀態暫存器542中),而且實際上此種複製方向暗示543甚至沒有需要或必要存在。抑或,此種複製方向暗示或指示(例如:用以提供該暗示或指示的旗標或狀態位
元)可選擇性/潛在地存在於該處理器中,舉例來說,若其將由無法自主地判斷該複製方向的不同指令所使用的話。
再次參照第5圖,該執行單元可運作來回應於及/或由於該記憶體複製指令而從來源記憶體運算元546的循序/相連資料儲存器位置載入、讀取、或以其他方式接收循序離散之資料部份,以及分開或循序地將這些資料部份複製、移動、寫入、或以其他方式儲存至位於該記憶體中不同位置的目的記憶體運算元547之循序/相連資料儲存器位置。如所提到的,這些部份可從該等運算元每一者的起始以向上順序進行或是從該等運算元的末端以向下順序進行。典型上來說,可將資料回存而不做修改,但此指令可能有且包含對該資料的修改。該等部份在不同實施例中可具有不同的資料大小粒度,諸如,舉例來說,位元組、字、雙字、或四字的大小。可將這些個別的循序複製作業重複數次直到傳輸了所有的資料量(例如:如由將被複製的資料量537所指出的)為止。在一態樣中,該指令可選擇性地具有重複前置,但本發明的範圍不限於此。上面搭配第1圖所述針對特定Intel® 64及/或IA-32架構通用暫存器之以向上或向下順序複製的具體範例代表可如何執行這個的一個合適範例實施例。亦考慮到使用三個不同通用暫存器(例如:R1、R2、及R3)的同等類型之複製作業,且其中該等輸入參數是以各種不同方式加以表示(例如:暫存器R1、R2、R3的其中一者以上是以和其他一者以上不同的粒度來加以表示)。
該執行單元及/或該處理器可包括運作來執行該記憶體複製指令的特定或特殊邏輯(例如:電晶體、積體電路、或其他可能與韌體(例如:被儲存在非易失性記憶體中的指令)及/或軟體結合的硬體)。如此處所使用的,用語「執行單元」並未暗示且不限於單一離散單元執行所有上述可能的作業。更確切來說,可能可藉由分散遍及記憶體子系統內的兩個以上之單元或組件(例如:一記憶體單元一記憶體存取單元)的分離或分散式邏輯來執行此等作業。作為一範例,該執行單元可包括用以從來源載入資料並將其儲存至目的之組合式載入/儲存執行單元。作為另一範例,該執行單元可包括:用以從來源載入資料的載入單元、和用以將該資料儲存至目的之分離式儲存單元,以及可能還有其他組件/單元。為了簡明,且為了符合用語執行單元是指實際執行或實行指令之組件的慣用法,在此將此種邏輯稱為執行單元。在此亦可能陳述該處理器的記憶體子系統及/或記憶體單元及/或記憶體存取單元及/或記憶體存取邏輯及/或該處理器的記憶體介面單元或邏輯可運作來執行如此處所揭示的該記憶體複製指令。
為了避免模糊本說明而顯示並敘述了相對簡單的處理器530。但該處理器可選擇性地包括其他處理器組件。舉例來說,各種不同的實施例可包括針對第10A/B圖、第11A/B圖、第12圖任一者所示及所述之組件的各種不同組合及組態。可將處理器的所有組件耦合在一起,以使它們如所預期地運作。
如先前所述,在一個以上的實施例中,該記憶體複製指令可指一個以上的通用暫存器中之一個以上的輸入參數或運算元。為了進一步解說某些概念,將論述各種Intel® 64及/或IA-32架構處理器中可得之合適通用暫存器的範例實施例,但這些特定暫存器當然並非必要。
第6圖解說合適之32位元通用暫存器組634的一特定範例實施例。該32位元暫存器組包括八個32位元或雙字通用暫存器。這些暫存器被稱為EAX、EBX、ECX、EDX、ESI、EDI、EBP、和ESP。這些32位元暫存器亦可以16位元和8位元模式加以定址。EAX、EBX、ECX、和EDX暫存器的較低16個位元分別被稱為AX、BX、CX、和DX。作為範例,可分別將具有16個位元的字無符號整數儲存在暫存器BX、CX、和DX中。
第7圖解說合適之64位元通用暫存器組734的另一特定範例實施例。該64位元暫存器組包括十六個64位元或四字通用暫存器。這些暫存器被稱為RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、和R15。這些暫存器可在32位元模式中於32位元運算元上運作,並可在64位元模式中於64位元運算元上運作。RAX、RBX、RCX、RDX、RSI、RDI、RBP、和RSP暫存器的較低32位元分別對應於EAX、EBX、ECX、EDX、ESI、EDI、EBP、和ESP暫存器。暫存器R8-R15的較低32位元亦可以32位元模式加以定址並被稱為R8D-R15D。雖然在上面的詳細範例中敘
述了某些暫存器對參數之映射,可另外選擇性地使用不同的暫存器對參數之映射。此外,前述Intel® 64及/或IA-32架構處理器的每一者可更普遍地由一般被表示為R1、R2、和R3的另一暫存器所代替,其可各自代表一組通用暫存器中的任一暫存器。
第8圖是在重疊來源和目的記憶體運算元上以向下複製方向處理或執行記憶體複製指令之實施例的方法850之實施例的方塊流程圖,該方法允許該記憶體複製指令被中斷。在某些實施例中,可將方法850執行為第1圖之方法100的一部份或是,或是可被選擇性添加至第1圖之方法100的額外中斷相關作業組。先前所述之方法100的特定選擇性特性及細節,還有在方法100期間所執行之記憶體複製指令的特性及細節,亦選擇性地適用於第8圖的方法850。為了避免模糊說明,主要將敘述第8圖之方法850的不同及/或額外特性,以及在該方法期間所執行的記憶體複製指令,而不重複可能選擇性相同或類似的特性及細節。在其他實施例中,可選擇性地將第8圖的方法850執行為與第1圖之方法100類似或不同之方法的一部份,但其可使用具有先前所述之特定選擇性特性及細節的任一者之記憶體複製指令。
方法850包括在方塊851接收記憶體複製指令。在某些實施例中,該記憶體複製指令可明確地指明,或以其他方式指出,記憶體中之來源記憶體運算元的起始、記憶體中之目的記憶體運算元的起始、以及將從該來源記憶體運
算元複製到該目的記憶體運算元的資料量之每一者。對於此方法,假設來源和目的記憶體運算元重疊。可選擇性地將先前針對第1圖所述的相同選項和變動用於這些輸入參數和它們可由該指令所指出的方式。
在方塊852,可從該來源記憶體運算元的現行末端將一部份資料(例如:位元組、字、雙字、或四字)複製到該目的記憶體運算元的現行末端。在此實施例中,由於該等來源和目的記憶體運算元重疊,故使用從該等運算元的末端開始並在朝向該等運算元的起始點之方向上(例如:在減小記憶體位址的方向上)進行循序地複製資料元素的向下複製方向。
在方塊853,將被複製之資料量的現時指示可被遞減、減少、或以其他方式減去已被實際複製的資料量。作為範例,若一次一個地複製單一8位元的位元組,且將複製的資料量是以位元組的數目加以表示,則將被複製的資料量可被遞減一,而若一次一個地複製16位元的字(亦即,各具有兩個位元組),則將被複製的資料量可被遞減二,諸如此類。或是,若將被複製的資料量是以位元加以表示,則對於被複製的每個8位元之位元組,其可被減去八,諸如此類。注意到,該現時指示並非本來由該指令所指出的實際資料量(例如:如儲存在架構性可見之儲存器位置),而是可代表該處理器內隨著額外資料被複製而更新的暫時或現時變數。舉例來說,該處理器可具有暫時暫存器或其他儲存器,以在最初將由原始指令所指出的資料
量儲存於其中(例如:將來自通用暫存器之值複製到此暫時暫存器或儲存器位置),以及減法、遞減、或其他邏輯,以隨著額外資料被複製而減少在此暫時暫存器或儲存器位置中的值。
在某些實施例中,可能會想要能夠在整個複製作業完成之前於進度的中間點或階段中斷或懸置該記憶體複製指令(例如:以處置需要注意的事件),然後於該進度的中間點或階段開始回復執行該記憶體複製指令(例如:在處置了該事件之後),而非從頭重新開始。舉例來說,這可能會是將要複製相對較大資料量(例如:如在長或極長字串指令的情況中)及/或執行相對較長歷時複製作業的情況,因它們可能相對較容易受到中斷。此外,亦可在短記憶體複製作業的情況中發生中斷。舉例來說,這可能是該等來源及/或目的記憶體運算元位於頁界,且後續頁被指為不存在的情況(例如:在那裡尋頁錯失可被遞送至作業系統)。允許此種從進度的中間點或階段重新開始,而非從頭重新開始,可幫助使用已經完成的工作及/或幫助取得正向進展。若反之該作業總是從頭開始,則可能無法保證該作業將在任何合理的時間量之內完成。
再次參照第8圖,在方塊854,可做出判斷是否要中斷該記憶體複製指令及/或其作業之執行。在某些實施例中,若發生需要注意的故障(例如:尋頁錯失)、岔斷、異常、或某些其他此等類型之事件,可判斷中斷該記憶體複製指令及/或其作業之實行。反則,可判斷不中斷該指令
及/或作業。
若判斷不中斷該記憶體複製指令及/或作業(例如:在方塊854的判斷為「否」),該方法可前進至方塊855。在方塊855,可做出判斷是否有要複製的額外資料。若有要複製的額外資料(例如:在方塊855的判斷為「是」),該方法可再訪可複製更多資料的方塊852。否則,若沒有要複製的額外資料(例如:在方塊855的判斷為「否」),該方法可在方塊856結束(例如:可止用或以其他方式提交該記憶體複製指令)。
抑或,若判斷中斷該記憶體複製指令及/或作業(例如:在方塊854的判斷為「是」),該方法可前進至方塊857。當要中斷或懸置該指令及/或作業時,保留或儲存關於已經被執行之現行複製量的資訊(例如:以指出已取得之進度的現時階段)可為重要的。當接著從該中間點重新開始該指令及/或作業而非從頭重新開始(亦即,不使用已經完成的任何工作)時,可使用此種資訊。在某些實施例中,被儲存或保留的資訊類型可視是否使用向上複製方向或向下複製方向而有所不同。
如於方塊857所示,在以向下複製方向執行複製的情況中,於某些實施例中,可保留或儲存仍要複製的現時/更新之資料量(例如:如最新近在方塊853所更新/減少的)。在某些實施例中,可將仍要複製的現時/更新之資料量儲存在架構性可見之儲存器位置(例如:通用暫存器)。舉例來說,可將仍要複製的現時/更新之資料量儲存至被
用以儲存如最初由該記憶體複製指令所指出的將被複製之原始/初始資料量的相同暫存器。為了進一步解說,再次參照使用32位元模式的ECX暫存器(或64位元模式的RCX暫存器)來儲存要複製之資料量的可能Intel® 64及/或IA-32架構實作之具體範例,此可包括將代表尚未被複製之資料量的不同減少/更新之值寫入至32位元模式的ECX暫存器(或64位元模式的RCX暫存器)。當有此種中斷時,此可回應於該記憶體複製指令而由該處理器或積體電路加以執行。
如進一步於方塊857所示,在以向下複製方向執行複製的情況中,於某些實施例中,可能不儲存與由最初收到之記憶體複製指令所指出者不同的該等來源和目的運算元之每一者的起始之指示。換言之,在向下複製方向的情況中,可能不會改變該等來源和目的運算元的起始點。在一態樣中,若想要的話,可選擇性地將該等來源和目的運算元的相同起始點復原至該暫存器而覆蓋它們的相同原始值。在另一態樣中,若想要的話,該等來源和目的運算元的起始點之原始值可不被更動,並可在它們的原始儲存器位置保持不變。
該方法亦包括儲存或保留指向該記憶體複製指令的指令指標值。在某些實施例中,當該記憶體複製指令的作業被中斷時(例如:由於異常或外部岔斷),若將要複製的剩餘資料量尚未為零,該處理器可能有責任不更新該指令指標。然後可將控制傳至處置器(例如:尋頁錯失處置器、
異常處置器、岔斷處置器)、作業系統、監督系統軟體、或類似物。
在處置了需要注意的事件之後,可將控制轉回至該記憶體複製指令。舉例來說,可執行轉回指令,以將控制流程轉回至該記憶體複製指令的儲存或保留之指令指標值。然後可重新開始該記憶體複製指令,並可擷取及使用所儲存或保留的仍要複製之現時/更新之資料量(例如:如於方塊857所儲存的)來在進度的中間點或階段回復該複製作業。然後可複製所欲複製的剩餘資料量並可完成該指令。
為了進一步解說,再次參照可能的Intel® 64及/或IA-32架構實作之具體範例,將敘述在中斷時更新ECX暫存器的具體詳細範例。最初,指令可指出以下起始參數或輸入:ESI = 100 //來源記憶體運算元起始於100
EDI = 164 //目的記憶體運算元起始於164
ECX = 256 //256個位元組為將被複製的資料量
這些值表示來源記憶體運算元位元組[355:100]將被複製到目的記憶體運算元位元組[419:164]。注意到,該等來源和目的記憶體運算元重疊,所以最先可執行向下複製作業。假定在整個向下複製作業結束之前發生故障、異常、岔斷、或其他中斷。舉例來說,假設這發生在僅從該來源記憶體運算元的位元組[355:164]複製了256個位元組其中的192個至該目的記憶體運算元的位元組[419:228]之後。注意到,由於是執行向下複製作業,故該複製是從該等運
算元的末端或尾部執行到起始或開頭。
在某些實施例中,回應於該指令,且由於此為向下複製作業,該處理器可僅減少或改變將在ECX暫存器中所複製的資料量,但可不改變該來源和目的記憶體運算元的起始點(例如:可不改變ESI和EDI暫存器中的原始值)。作為範例,若將被複製的資料量是由儲存在隱含之通用暫存器ECX中的要複製之位元組數目所表示,則可將暫存器ECX中的值遞減在中斷之時已被複製的位元組數目。對於此範例而言,可將原本在此暫存器中的要複製之256個起始位元組數目減去已被複製的192個位元組,使得更新之值64(亦即,64=256-192)可被儲存在暫存器ECX中,以指出當該指令被回復時,仍有64個位元組將被複製。
當該記憶體複製指令被回復時,對該回復之記憶體複製指令的輸入參數可為如下:ESI = 100 //來源記憶體運算元起始於100
EDI = 164 //目的記憶體運算元起始於164
ECX = 64 //64個位元組是將被複製的資料之剩餘量
這些輸入參數可表示將被複製的位元組之剩餘範圍。具體來說,它們可表示來源記憶體運算元位元組[163:100]將被複製到目的記憶體運算元位元組[227:164]。注意到,現在在該等來源和目的記憶體運算元之間無重疊。據此,若想要的話,在某些實施例中可執行向上複製作業,而無先前所述之在已將來源運算元資料傳輸至該目的運算元之
前於重疊區域中覆寫某些該來源運算元資料的風險。舉例來說,若執行第1圖的方法100,則方塊102可判斷對於這些修改之運算元不再有重疊,並可選擇在方塊103開始執行向上複製。一旦複製了這64個剩餘位元組,在中斷之前所複製的位元組(例如:192個位元組)結合在中斷之後所複製的位元組(例如:64個位元組)可集體代表最初由原始記憶體複製指令所指出將被複製的所有位元組(例如:256個)。在該記憶體複製指令完成時,被儲存在ESI和EDI暫存器中的最終值為何並不特別重要。在某些情況中,可能不會修改這些暫存器中的值,如上所論述的,除非對部份該作業使用向上複製方向。大體上,在該記憶體複製指令完成時,ECX中將被複製的資料量應為零。有可能ESI和EDI暫存器在該記憶體複製指令完成時可不被完全更新或可具有不在意之值。
以相當基本的形式顯示及說明了方法850,但可選擇性地對該方法添加及/或移除作業。舉例來說,可選擇性地添加作業來判斷該等運算元是否重疊(例如:類似於方塊102)。此外,其他實施例顯示該等作業的子集(例如:僅方塊854和857等等)。另外,雖然該流程圖顯示根據實施例之特定作業順序,但該順序僅為示範性。替代性實施例可以不同順序來執行該等作業、結合某些作業、重疊某些作業等等。
亦考慮到與第8圖之方法類似的方法,但是針對非重疊運算元,以及針對向上複製方向。在此種方法中,是從
該等運算元的開頭或起始點開始複製資料,並以向上順序朝末端繼續進行,而非從該等運算元的末端複製資料之部份。另外,雖然該複製繼續進行,但仍可維持該等來源和目的運算元之起始點的暫時或現時更新之值。在某些實施例中,回應於對此種向上複製方向的岔斷,可儲存或以其他方式保留更新/現行之該來源運算元的起始、更新/現行之該目的運算元的起始、以及更新/現行之要複製的資料量之全數三者。舉例來說,當產生該中斷時,可更新或改變暫存器ESI、EDI、和ECX的全數三者,以反映當時之進度的現行階段。
為了進一步解說,再次考慮來自上面的具體詳細範例,重點在於複製是以向上複製方向重新開始來複製剩餘的64個位元組。假設執行向上複製來複製額外的5個位元組,然後產生第二次中斷。在某些實施例中,回應於對此種向上複製方向的第二次中斷,可在產生該第二次中斷時更新或改變暫存器ESI、EDI、和ECX的全體三者以反映進度的現行階段,如下:ESI = 105 //來源記憶體運算元起始於105
EDI = 169 //目的記憶體運算元起始於169
ECX = 59 //59個位元組是將被複製的資料之剩餘量
這些值表示來源記憶體運算元位元組[164:105]將被複製到目的記憶體運算元位元組[228:169]。當被回復時,該等來源和目的記憶體運算元再次不重疊,所以可執行向上複製作業來完成該複製作業,以從來源記憶體運算元位元
組[164:105]將剩餘的59個位元組複製到目的記憶體運算元位元組[228:169]。
兩個常見的標準記憶體複製功能為memcpy()和memmove()。舉例來說,可在glibc、Visual Studio 6.0等中找到這些記憶體複製功能。該memcpy功能將記憶體中的來源緩衝器之位元組計數數目複製到記憶體中的目的緩衝器。若該等來源和目的緩衝器重疊,則此功能不能確保重疊區域中的原始來源位元組在被覆寫之前被複製。相反的,該memmove功能可執行正確的複製作業而不遺失來源資料,不管該等區域是否重疊。該memmove功能將記憶體中的來源緩衝器之位元組計數數目複製到記憶體中的目的緩衝器。若一部份的該等來源和目的緩衝器重疊,該memmove功能會確保重疊部份中的原始來源位元組在被覆寫之前被複製或保留,所以它們不會遺失。舉例來說,該memmove功能可如此複製:先從該來源緩衝器將重疊部份中的來源位元組複製到不與該目的重疊的暫時陣列,然後再從該暫時陣列將該等位元組複製到該目的緩衝器。
傳統上,當編譯具有記憶體複製作業(例如:memmove、memcpy等等)的軟體時,對標準功能的引用,舉例來說,如GNUC程式庫glibc中的功能,可藉由對該程式庫的標準呼叫機制,或是藉由在該代碼本身內嵌入該功能來加以處置。然而,當隨著新處理器及/或新處理器世代被引進而對用以實行memmove和memcpy功能的機器階層指令之架構性及/或微架構性實作做出改變時,更
新、調整、或以其他方式改變使用memmove和memcpy功能的軟體可能易為昂貴及/或耗時的。此外,已針對一架構性及/或微架構性實作在編譯時加以最佳化的軟體實作可能無法最佳地作用於具有不同架構及/或微架構的其他處理器。
在某些實施例中,可使用如在此所揭示的記憶體複製指令來代替軟體中的memmove功能及/或memcpy功能。在某些實施例中,該記憶體複製指令可代替memmove功能。某些實施例的方法包括將memmove及/或memcpy功能編譯或以其他方式翻譯或轉換成此處所揭示之記憶體複製指令的對應單一實例。可反而在編譯、翻譯、或類似物期間,藉由單一記憶體複製指令,一個對一個選擇性/潛在地取代各個memmove及/或memcpy功能(或至少它們的其中某些),而非將memmove及/或memcpy功能嵌入。
第9圖是編譯器或其他翻譯器模組963之實施例的方塊圖。可將較高階碼960,諸如,舉例來說,來源碼輸入至該翻譯器模組。該較高階碼可包括memmove功能961,以及選擇性包括memcpy功能962。該翻譯器模組可運作來將該較高階碼編譯或以其他方式翻譯成較低階碼966,諸如,舉例來說,機器碼、組合碼、或類似物。在某些實施例中,該翻譯器模組可包括邏輯964來以該較低階碼的一個以上之對應記憶體複製指令931A取代該較高階碼之memmove功能961的其中一者以上。在某些實施例中,該翻譯器模組可選擇性地包括邏輯965來以該較低
階碼的一個以上之對應記憶體複製指令931B取代該較高階碼之memcpy功能962的其中一者以上,但此並非必須。抑或,可選擇性地將其他指令用於該等memcpy功能,諸如,舉例來說,Intel® 64和IA-32架構中的REP MOVSB指令。然而,目前在該等來源和目的記憶體運算元重疊的情況中,或甚至在編譯器或其他翻譯器不能知道或確定該等來源和目的記憶體運算元是否重疊的情況中,無法使用REP MOVSB指令來取代memmove功能。可各自以硬體、韌體、軟體、或其各種組合來實行包括邏輯964和邏輯965的翻譯器模組。
有利地來說,甚至在引進新處理器和新處理器世代時,當對用以執行memmove及/或memcpy功能的指令之實作有架構性及/或微架構性改變時,如此處所述以該等記憶體複製指令取代此等memmove及/或memcpy指令可幫助減少需對軟體所做的改變之數目。舉例來說,若該處理器被擴充來使用較廣的暫存器,該處理器之指令集的記憶體複製指令及它們的實作可自然地考慮到這點,而非需要改變memmove及/或memcpy功能。
在其他實施例中,此處所揭示之在memmove指令及/或memcpy指令和該等記憶體複製指令之間轉換的類似互換方法反而可選擇性地以其他類型的翻譯器模組,諸如,舉例來說,解譯器、解編譯器、組譯器、及解組譯器來加以實行,舉幾個例子來說。
處理器核心可以不同方式、針對不同目的、以及在不同處理器中加以實行。例如,此等核心的實作可包括:1)用於通用計算的通用有序核心;2)用於通用計算的高效能通用無序核心;3)主要用於圖形及/或科學(通量)計算的專用核心。不同處理器的實作可包括:1)包括一個以上用於通用計算之通用有序核心及/或一個以上用於通用計算之通用無序核心的CPU;以及2)包括一個以上主要用於圖形及/或科學(通量)計算之專用核心的共處理器。此等不同的處理器導致不同的電腦系統架構,它們可包括:1)在與該CPU分離之晶片上的共處理器;2)在和CPU相同封裝中的分離之晶粒上的共處理器;3)和CPU相同之晶粒上的共處理器(在該情況中,此種共處理器有時被稱為專用邏輯,諸如積體圖形及/或科學(通量)邏輯,或是被稱為專用核心);以及4)可在相同晶粒上包括所述CPU(有時被稱為應用核心或應用處理器)、上述共處理器、和額外功能性的系統單晶片。接著說明示範性核心架構,隨後是示範性處理器和電腦架構的說明。
第10A圖是解說根據本發明實施例之示範性有序管線以及示範性暫存器重新命名之無序派發/執行管線兩者的方塊圖。第10B圖是解說根據本發明實施例之將被包括在
處理器中的有序架構核心之示範性實施例以及示範性暫存器重新命名之無序派發/執行架構核心兩者的方塊圖。第10A圖~第10B圖中的實線方框解說該有序管線和有序核心,而選擇性添加的虛線方框解說該暫存器重新命名之無序派發/執行管線和核心。已知該有序態樣為該無序態樣的子集,將說明該無序態樣。
在第10A圖中,處理器管線1000包括:提取級1002、長度解碼級1004、解碼級1006、分配級1008、重新命名級1010、排程(亦已知為配送或派發)級1012、暫存器讀取/記憶體讀取級1014、執行級1016、寫回/記憶體寫入級1018、異常處置級1022、以及提交級1024。
第10B圖顯示處理器核心1090,其包括耦合至執行引擎單元1050的前端單元1030,且兩者皆耦合至記憶體單元1070。核心1090可為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令字(VLIW)核心、或是混合或替代核心類型。作為又一選項,核心1090可為專用核心,諸如,舉例來說,網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心、或類似物。
前端單元1030包括耦合至指令快取單元1034的分支預測單元1032,指令快取單元1034是耦合至指令翻譯旁看緩衝器(TLB)1036,指令TLB 1036是耦合至指令提取單元1038,指令提取單元1038是耦合至解碼單元1040。解碼單元1040(或解碼器)可將指令解碼,並產生解碼
自、或以其他方式反映、或源自原始指令的一個以上之微作業、微碼登錄點、微指令、其他指令、或其他控制信號來作為輸出。解碼單元1040可使用各種不同的機制來加以實行。合適機制的範例包括,但不限於:查找表、硬體實作、可程式化邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等等。在一實施例中,核心1090包括微碼ROM或儲存用於某些巨集指令之微碼的其他媒體(例如:在解碼單元1040中或以其他方式在前端單元1030內)。解碼單元1040是耦合至執行引擎單元1050中的重新命名/分配器單元1052。
執行引擎單元1050包括耦合至止用單元(retirement unit)1054和一組一個以上之排程器單元1056的重新命名/分配器單元1052。排程器單元1056代表任何數目的不同排程器,包括保留站、中央指令視窗等等。排程器單元1056是耦合至實體暫存器檔案單元1058。實體暫存器檔案單元1058的每一者代表一個以上的實體暫存器檔案,不同的實體暫存器檔案儲存一個以上的不同資料類型,諸如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如:是將被執行的下一個指令之位址的指令指標)等等。在一實施例中,實體暫存器檔案單元1058包含向量暫存器單元、寫入遮罩暫存器單元、以及純量暫存器單元。這些暫存器單元可提供架構性向量暫存器、向量遮罩暫存器、以及通用暫存器。實體暫存器檔案單元1058是被止用單元1054所重疊,以解說可用以
實行暫存器重新命名和無序執行的各種方式(例如:使用重新排序緩衝器和止用暫存器檔案;使用未來檔案、歷史緩衝器、和止用暫存器檔案;使用暫存器映像和暫存器之集用場等等)。止用單元1054和實體暫存器檔案單元1058是耦合至執行叢集1060。執行叢集1060包括一組一個以上的執行單元1062和一組一個以上的記憶體存取單元1064。執行單元1062可執行各種作業(例如:移位、加法、減法、乘法)且於各種類型的資料上(例如:純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然某些實施例可包括特定功能或功能集專用的數個執行單元,但其他實施例可包括僅一個執行單元或皆執行所有功能的多個執行單元。排程器單元1056、實體暫存器檔案單元1058、和執行叢集1060被顯示為可為複數,因某些實施例會對某些類型的資料/作業建立個別的管線(例如:純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,它們各自具有其本身的排程器單元、實體暫存器檔案單元、及/或執行叢集-且在個別之記憶體存取管線的情況中,實行其中僅此管線的執行叢集具有記憶體存取單元1064的某些實施例)。亦應了解到,在使用個別的管線之處,這些管線的其中一者以上可為無序派發/執行而其他為有序。
該組記憶體存取單元1064是耦合至記憶體單元1070,其包括耦合至資料快取單元1074的資料TLB單元1072,且資料快取單元1074是耦合至第二階(L2)快取單
元1076。在一示範性實施例中,記憶體存取單元1064可包括載入單元、儲存位址單元、和儲存資料單元,它們每一者是耦合至記憶體單元1070中的資料TLB單元1072。指令快取單元1034是進一步耦合至記憶體單元1070中的第二階(L2)快取單元1076。L2快取單元1076是耦合至一個以上的其他階之快取,最終並耦合至主記憶體。
作為範例,該示範性暫存器重新命名的無序派發/執行核心架構可將管線1000實行如下:1)指令提取1038執行提取和長度解碼級1002和1004;2)解碼單元1040執行解碼級1006;3)重新命名/分配器單元1052執行分配級1008和重新命名級1010;4)排程器單元1056執行排程級1012;5)實體暫存器檔案單元1058和記憶體單元1070執行暫存器讀取/記憶體讀取級1014;執行叢集1060實行執行級1016;6)記憶體單元1070和實體暫存器檔案單元1058執行寫回/記憶體寫入級1018;7)各種單元可被包含於異常處置級1022;以及8)止用單元1054和實體暫存器檔案單元1058執行提交級1024。
核心1090可支援一個以上的指令集(例如:x86指令集(具有已被加上較新版本的某些擴充);加州Sunnyvale之MIPS科技的MIPS指令集;加州Sunnyvale之ARM控股的ARM指令集(具有選擇性的額外擴充,諸如NEON)),包括此處所述之指令。在一實施例中,核心1090包括用以支援緊縮資料指令集擴充(例如:AVX1、AVX2)的邏輯,藉此允許使用緊縮資料來執行由許多多媒
體應用所使用的作業。
應了解到,該核心可支援多執行緒作業(執行兩個以上並行的作業或執行緒組),並可以各種方式來執行此作業,包括時間切片多執行緒作業、同時多執行緒作業(其中單一實體核心對實體核心同時多執行緒作業的該等執行緒之每一者提供邏輯核心)、或其組合(例如:時間切片提取和解碼以及之後同時多執行緒作業,諸如於Intel®超執行緒技術)。
雖然是在無序執行的情境中說明暫存器重新命名,應了解到可在有序架構中使用暫存器重新命名。雖然所解說的該處理器之實施例亦包括個別的指令和資料快取單元1034/1074以及共享L2快取單元1076,但替代性實施例可具有用於指令和資料兩者的單一內部快取,諸如,舉例來說,第一階(L1)內部快取、或多階之內部快取。在某些實施例中,該系統可包括內部快取和在該核心及/或該處理器外的外部快取之組合。抑或,所有的快取皆可在該核心及/或該處理器外。
第11A圖~第11B圖解說更具體之示範性有序核心架構的方塊圖,該核心可為晶片中之數個邏輯方塊(包括相同類型及/或不同類型的其他核心)的其中一者。該等邏輯方塊透過高頻寬互連網路(例如:環狀網路)與某些固定功能邏輯、記憶體I/O介面、以及其他必要的I/O邏輯通
訊,視該應用而定。
第11A圖是根據本發明實施例之單一處理器核心的方塊圖,連同其至晶粒上互連網路1102的連接方式,還有其第二階(L2)快取的局部子集1104。在一實施例中,指令解碼器1100支援具有緊縮資料指令集擴充的x86指令集。L1快取1106允許低潛時存取快取記憶體至純量和向量單元。雖然在一實施例中(為了簡化設計),純量單元1108和向量單元1110使用個別之暫存器組(分別為純量暫存器11112和向量暫存器1114)且在它們之間傳輸的資料是被寫入至記憶體然後再從第一階(L1)快取1106讀回,本發明的替代性實施例可使用不同方法(例如:使用單一暫存器組或包括允許資料被傳輸於該兩個暫存器檔案之間而不被寫入及讀回的通訊路徑)。
L2快取的局部子集1104是總體L2快取的一部份,該總體L2快取被分為個別之局部子集,每個處理器核心一個。各處理器核心具有直接存取路徑至其本身L2快取的局部子集1104。由處理器核心所讀取的資料被儲存在其L2快取子集1104中並可快速被存取,與其他處理器核心存取它們本身的局部L2快取子集並行。由處理器核心所寫入的資料被儲存在其本身的L2快取子集1104中且是由其他子集所清除,若有需要的話。環狀網路確保共享資料的一致性。環狀網路為雙向的,以允許諸如處理器核心、L2快取和其他邏輯方塊的代理在晶片內互相通訊。各環狀資料路徑在每個方向上為1012位元寬。
第11B圖是根據本發明實施例的第11A圖中之部份處理器核心的放大圖。第11B圖包括為L1快取1106之部分的L1資料快取1106A、以及關於向量單元1110和向量暫存器1114的更多細節。具體來說,向量單元1110是16位元寬的向量處理單元(VPU)(見16位元寬的ALU 1128),其執行整數、單精度浮動、和雙倍精度浮動指令的其中一者以上。該VPU支援以拌和單元1120拌和暫存器輸入、以數值轉換單元1122A~1122B進行數值轉換、以及以複製單元1124在記憶體輸入上複製。寫入遮罩暫存器1126允許斷定合成向量寫入。
第12圖是根據本發明實施例之處理器1200的方塊圖,處理器1200可具有多於一個的核心、可具有積體記憶體控制器、以及可具有積體圖形。第12圖中的實線方框解說具有單一核心1202A、系統代理1210、一組一個以上之匯流排控制器單元1216的處理器1200,而選擇性添加的虛線方框解說具有多個核心1202A~N、系統代理單元1210中的一組一個以上之積體記憶體控制器單元1214、以及專用邏輯1208的替代性處理器1200。
因此,處理器1200的不同實作可包括:1)具有為積體圖形及/或科學(通量)邏輯之專用邏輯1208(其可包括一個以上的核心)、以及為一個以上的通用核心(例如:通用有序核心、通用無序核心、該兩者的組合)之核心1202A
~N的CPU;2)具有為主要用於圖形及/或科學(通量)的大量專用核心之核心1202A~N的共處理器;以及3)具有為大量通用有序核心之核心1202A~N的共處理器。因此,處理器1200可為通用處理器、共處理器或專用處理器,諸如,舉例來說,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多積體核心(MIC)共處理器(包括30個以上的核心)、嵌入式處理器、或類似物。該處理器可被實行於一個以上的晶片上。處理器1200可為一部份及/或可被實行於一個以上的基板,其使用數個處理技術的任一者,諸如,舉例來說,BiCMOS、CMOS、或NMOS。
該記憶體階層包括該等核心內的一階以上之快取、一組或一個以上的共享快取單元1206、以及耦合至該組積體記憶體控制器單元1214的外部記憶體(未顯示)。該組共享快取單元1206可包括一個以上的中階快取,諸如第二階(L2)、第三階(L3)、第四階(L4)、或其他階之快取、末階快取(LLC)、及/或其組合。雖然在一實施例中,環狀基礎之互連單元1212將積體圖形邏輯1208、該組共享快取單元1206、和系統代理單元1210/積體記憶體控制器單元1214互連,替代性實施例可使用任何數目的已知技術來將此等單元互連。在一實施例中,於一個以上的快取單元1206和核心1202A~N之間維持一致性。
在某些實施例中,核心1202A~N的一者以上可進行多執行緒作業。系統代理1210包括協調和操作核心
1202A~N的該等組件。系統代理單元1210可包括,舉例來說,電力控制單元(PCU)和顯示單元。該PCU可為或包括調節核心1202A~N和積體圖形邏輯1208之電力狀態所需的邏輯和組件。該顯示單元是用於驅動一個以上的外部連接之顯示器。
就架構指令集而言,核心1202A~N可為同質或異質的;也就是說,核心1202A~N的兩者以上可能能夠執行相同的指令集,而其他的可能僅能夠執行該指令集的一子集或不同的指令集。
第13圖~第21圖是示範性電腦架構的方塊圖。用於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、切換器、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、電動遊戲裝置、機上盒、微控器、行動電話、可攜式媒體播放器、手持式裝置、和各種其他電子裝置之技藝中已知的其他系統設計和組態亦適合。一般來說,能夠納入如此處所揭示之處理器及/或其他執行邏輯的多種系統或電子裝置通常皆適合。
現在參照第13圖,所顯示的是根據本發明一實施例之系統1300的方塊圖。系統1300可包括一個以上的處理器1310、1315,它們是耦合至控制器集線器1320。在一實施例中,控制器集線器1320包括圖形記憶體控制器集
線器(GMCH)1390和輸入/輸出集線器(IOH)1350(它們可在個別之晶片上);GMCH 1390包括被記憶體1340和共處理器1345所耦合的記憶體和圖形控制器;IOH 1350將輸入/輸出(I/O)裝置1360耦合至GMCH 1390。抑或,該等記憶體和圖形控制器的其中一者或兩者被整合於該處理器內(如此處所述),記憶體1340和共處理器1345是直接耦合至處理器1310,以及控制器集線器1320與IOH 1350在單晶片中。
額外之處理器1315的選擇性性質是於第13圖中以虛線加以表示。各處理器1310、1315可包括此處所述之處理核心的其中一者以上,且可為某版本的處理器1200。
記憶體1340可為,舉例來說,動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或該兩者的組合。對於至少一實施例,控制器集線器1320經由諸如前側匯流排(FSB)的多點(multi-drop)匯流排、諸如快速通道互連(QPI)的點對點介面、或類似連接方式1395與處理器1310、1315通訊。
在一實施例中,共處理器1345為專用處理器,諸如,舉例來說,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、或類似物。在一實施例中,控制器集線器1320可包括積體圖形加速器。
在包括架構、微架構、熱、功率消耗特性等優值譜相方面,實體資源1310、1315之間可有各種差異。
在一實施例中,處理器1310執行控制一般類型之資料處理作業的指令。嵌入該等指令內的可為共處理器指令。處理器1310將這些共處理器指令視為屬於應由附加共處理器1345所執行的類型。據此,處理器1310在共處理器匯流排或其他互連上將這些共處理器指令(或代表共處理器指令的控制信號)派發至共處理器1345。共處理器1345接受並執行所接收到的共處理器指令。
現在參照第14圖,所顯示的是根據本發明實施例的第一個更具體之示範性系統1400的方塊圖。如第14圖所示,多處理器系統1400為點對點互連系統,並包括經由點對點互連1450所耦合的第一處理器1470和第二處理器1480。處理器1470和1480的每一者可為某版本的處理器1200。在本發明一實施例中,處理器1470和1480分別為處理器1310和1315,而共處理器1438為共處理器1345。在另一實施例中,處理器1470和1480分別為處理器1310和共處理器1345。
處理器1470和1480被顯示為分別包括積體記憶體控制器(IMC)單元1472和1482。處理器1470亦包括點對點(P-P)介面1476和1478來作為其匯流排控制器單元的一部份;同樣地,第二處理器1480包括P-P介面1486和1488。處理器1470、1480可經由點對點(P-P)介面1450而使用P-P介面電路1478、1488來交換資訊。如第14圖所示,IMC 1472和1482將該等處理器耦合至各別記憶體,亦即記憶體1432和記憶體1434,它們可為局部附加
於各別處理器之主記憶體的部份。
處理器1470、1480可各自經由個別的P-P介面1452、1454而使用點對點介面電路1476、1494、1486、1498來與晶片組1490交換資訊。晶片組1490可選擇性地經由高效能介面1439來與共處理器1438交換資訊。在一實施例中,共處理器1438為專用處理器,諸如,舉例來說,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、或類似物。
共享快取(未顯示)可被包括在任一處理器中或是兩個處理器之外,但經由P-P互連與該等處理器連接,如此若處理器被置於低電力模式,則可將任一或兩個處理器的局部快取資訊儲存在該共享快取中。
可經由介面1496將晶片組1490耦合至第一匯流排1416。在一實施例中,第一匯流排1416可為週邊組件互連(PCI)匯流排、或是諸如PCI快速匯流排或另一第三代I/O互連匯流排的匯流排,但本發明的範圍不限於此。
如第14圖所示,可將各種I/O裝置1414耦合至第一匯流排1416,連同將第一匯流排1416耦合至第二匯流排1420的匯流排橋接器1418。在一實施例中,一個以上的額外處理器1415,諸如共處理器、高通量MIC處理器、GPGPU的加速器(諸如,例如:圖形加速器或數位信號處理(DSP)單元)、場可程式化閘極陣列、或任何其他的處理器,是耦合至第一匯流排1416。在一實施例中,第二匯流排1420可為低接腳計數(LPC)匯流排。在一實施例中,
可將各種裝置耦合至第二匯流排1420,包括,舉例來說,鍵盤及/或滑鼠1422、通訊裝置1427和儲存器單元1428,諸如可包括指令/代碼和資料1430的磁碟驅動器或其他大量儲存裝置。另外,可將聲頻I/O1424耦合至第二匯流排1420。注意到,可能有其他架構。舉例來說,系統可實行多點匯流排或其他此種架構,而非第14圖的點對點架構。
現在參照第15圖,所顯示的是根據本發明實施例的第二個更具體之示範性系統1500的方塊圖。第14圖和第15圖中的類似元件帶有類似的元件符號,且自第15圖省略了第14圖的某些態樣以避免模糊第15圖的其他態樣。
第15圖解說處理器1470、1480可分別包括積體記憶體和I/O控制邏輯(「CL」)1472和1482。因此,CL 1472、1482包括積體記憶體控制器單元並包括I/O控制邏輯。第15圖解說不僅將記憶體1432、1434耦合至CL 1472、1482,亦將I/O裝置1514耦合至控制邏輯1472、1482。舊有I/O裝置1515是耦合至晶片組1490。
現在參照第16圖,所顯示的是根據本發明實施例之SoC 1600的方塊圖。第12圖中的類似元件帶有相似的元件符號。此外,虛線方框為更先進之SoC上的選擇性特徵。在第16圖中,互連單元1602是耦合至:包括一組一個以上之核心152A~N和共享快取單元1206的應用處理器1610;系統代理單元1210;匯流排控制器單元1216;積體記憶體控制器單元1214;可包括積體圖形邏輯、影
像處理器、聲頻處理器、和視頻處理器的一組或一個以上之共處理器1620;靜態隨機存取記憶體(SRAM)單元1630;直接記憶體存取(DMA)單元1632;以及用於耦合至一個以上之外部顯示器的顯示單元1640。在一實施例中,共處理器1620包括專用處理器,諸如,舉例來說,網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器、或類似物。
可將此處所揭示之機制的實施例實行於硬體、軟體、韌體、或此等實行方法的組合。可將本發明的實施例實行為在可程式化系統上執行的電腦程式或程式碼,該可程式化系統包含至少一個處理器、儲存系統(包括易失性和非易失性記憶體及/或儲存元件)、至少一個輸入裝置、以及至少一個輸出裝置。
可將程式碼,諸如第14圖中所解說的代碼1430,應用於輸入指令來執行此處所述的功能並產生輸出資訊。可以已知方式將該輸出資訊應用於一個以上的輸出裝置。為了此應用的目的,處理系統包括具有處理器的任何系統,該處理器是諸如,舉例來說:數位信號處理器(DSP)、微控器、特定應用積體電路(ASIC)、或微處理器。
可以高階程序性或物件導向程式語言來實行該程式碼,以和處理系統通訊。若想要的話,亦可以組合或機器語言來實行該程式碼。事實上,此處所述之機制的範圍並不限於任何特定程式語言。在任何情況中,該語言可為編
譯或解譯之語言。
至少一實施例的一個以上之態樣可由代表該處理器內的各種邏輯之儲存在機器可讀取媒體上的代表性指令來加以實行,當由機器讀取該等指令時,會使該機器產生邏輯來執行此處所述的技術。此等表現方式,被稱為「IP核心」,可被儲存在有形的機器可讀取媒體上並供應給各種客戶或製造設施,以載入至實際做成該邏輯或處理器的生產機器。
此種機器可讀取儲存媒體可包括,不限於,由機器或裝置所製造或形成之物品的非暫態有形配置,包括儲存媒體,諸如硬碟、任何其他類型的碟片,包括軟式磁碟、光碟、光碟唯讀記憶體(CD-ROM)、可再寫光碟(CD-RW)、以及磁光碟、諸如唯讀記憶體(ROM)的半導體裝置、諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)的隨機存取記憶體(RAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電性可抹除可程式化唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁性或光學卡、或適用於儲存電子指令的任何其他類型媒體。
據此,本發明的實施例亦包括非暫態有形機器可讀取媒體,其含有指令或含有設計資料,諸如定義此處所述之結構、電路、設備、處理器及/或系統特徵的硬體描述語言(HDL)。此等實施例亦可被稱為程式產品。
在某些情況中,可使用指令轉換器將指令從來源指令集轉換至目標指令集。舉例來說,該指令轉換器可將指令翻譯(例如:使用靜態二進制翻譯、包括動態編譯的動態二進制翻譯)、修改、仿真、或以其他方式轉換成將由該核心所處理的一個以上之其他指令。該指令轉換器可被實行於軟體、硬體、韌體、或其組合。該指令轉換器可在處理器上、處理器外、或是部份在處理器上且部份在處理器外。
第17圖是對照根據本發明之實施例使用軟體指令轉換器以將來源指令集中之二進制指令轉換成目標指令集中之二進制指令的方塊圖。在所解說的實施例中,該指令轉換器為軟體指令轉換器,但抑或可將該指令轉換器實行於軟體、韌體、硬體、或其各種組合。第17圖顯示可使用x86編譯器1704來編譯高階語言1702的程式,以產生可自然地由具有至少一個x86指令集核心的處理器1716所執行的x86二進制碼1706。具有至少一個x86指令集核心的處理器1716代表可和具有至少一個x86指令集核心的Intel處理器執行實質相同之功能的任何處理器,其是藉由相容地執行或以其他方式處理(1)Intel x86指令集核心之指令集的實質部份或(2)目的是運行於具有至少一個x86指令集核心的Intel處理器上之應用程式或其他軟體的物件碼版本,以和具有至少一個x86指令集核心的Intel處理器達成實質相同的結果。x86編譯器1704代表可運作來產生x86二進制碼1706(例如:物件碼)的編譯
器,不管有沒有額外的鏈接處理,x86二進制碼1706可被執行於具有至少一個x86指令集核心的處理器1716。同樣地,第17圖顯示可使用替代性指令集編譯器1708來編譯高階語言1702的程式,以產生可自然地由無至少一個x86指令集核心的處理器1714(例如:具有執行加州Sunnyvale之MIPS科技的MIPS指令集及/或執行加州Sunnyvale之ARM控股的ARM指令集之核心的處理器)所執行的替代性指令集二進制碼1710。指令轉換器1712被用來將x86二進制碼1706轉換成可自然地由無x86指令集核心的處理器1714所執行的代碼。此轉換後代碼不太可能和替代性指令集二進制碼1710相同,因為難以做出能夠如此的指令轉換器;但該轉換後代碼將完成一般作業並由來自該替代性指令集的指令所組成。因此,指令轉換器1712代表透過仿真、模擬或任何其他程序,允許不具有x86指令集處理器或核心的處理器或其他電子裝置執行x86二進制碼1706的軟體、韌體、硬體、或其組合。
亦可選擇性地將針對該等設備之任一者所述的組件、特徵、及細節應用於該等方法的任一者,其在實施例中可由及/或藉由此等設備來加以執行。此處所述之處理器的任一者可被包括於此處所揭示之電腦系統的任一者(例如:第13圖~第16圖)。可藉由具有此處所示之微架構的任一者之此處所示之處理器的任一者,將此處所揭示的指令執行於此處所示之系統的任一者。
在說明和申請專利範圍中,可能使用了用語「耦合」
及/或「連接」,還有它們的衍生詞。這些用語並非用來作為彼此的同義詞。更確切來說,在實施例中,「連接」可被用來表示兩個以上的元件彼此直接實體及/或電性接觸。「耦合」可意指兩個以上的元件彼此直接實體及/或電性接觸。但「耦合」亦可意指兩個以上的元件並未彼此直接接觸,但仍彼此合作或互動。舉例來說,可透過一個以上的中介組件將執行單元與暫存器及/或解碼單元耦合。在圖式中,使用箭頭來顯示連接和耦合。
在說明及/或申請專利範圍中,可能使用了用語「邏輯」、「單元」、「模組」、或「組件」。這些用語的每一者可被用來指硬體、韌體、軟體、或其各種組合。在範例實施例中,這些用語的每一者可指積體電路、特定應用積體電路、類比電路、數位電路、程式化邏輯裝置、包括指令的記憶體裝置等等、以及其各種組合。在某些實施例中,這些可包括至少某些硬體(例如:電晶體、閘、其他電路組件等等)。
可能使用了用語「及/或」。如此處所使用的,用語「及/或」表示一者或另一者或兩者(例如:A及/或B表示A或B或A和B兩者)。
在上面的說明中,敘述了具體細節以供徹底了解該等實施例。但可不需這些具體細節的某一些來施行其他實施例。本發明的範圍不應由上面提供的特定範例所決定,而僅由下面的申請專利範圍來決定。在其他情況中,以方塊圖形式及/或無細節地顯示了已知電路、結構、裝置、和
作業,以避免模糊對本說明的理解。在圖式中認為適當之處重複了元件符號、或元件符號的終端部份,以指出對應或同等的元件,該等元件可選擇性地具有類似或相同特性,除非有另行指明或顯而易見。
某些作業可由硬體組件加以執行,或是可被體現於機器可執行或電路可執行指令,它們可被用來造成及/或導致由執行該等作業之指令所程式化的機器、電路、或硬體組件(例如:處理器、部份處理器、電路等等)。亦可選擇性地藉由硬體和軟體的組合來執行該等作業。處理器、機器、電路、或硬體可包括運作來執行及/或處理該指令並回應於該指令而儲存結果的特定或特殊電路或其他邏輯(例如:可能與韌體及/或軟體結合的硬體)。
某些實施例包括製品(例如:電腦程式產品),其包括機器可讀取媒體。該媒體可包括提供,舉例來說,以可由該機器所讀取之形式儲存資訊的機制。該機器可讀取媒體可提供,或具有儲存於其上的指令或指令之序列,若及/或當由機器執行時,該等指令會運作來使該機器執行及/或導致該機器執行此處所揭示的一個以上之作業、方法、或技術。
在某些實施例中,該機器可讀取媒體可包括非暫態機器可讀取儲存媒體。舉例來說,該非暫態機器可讀取儲存媒體可包括軟式磁片、光學儲存媒體、光碟、光學資料儲存裝置、CD-ROM、磁碟、磁光碟、唯讀記憶體(ROM)、可程式化ROM(PROM)、可抹除可程式化ROM
(EPROM)、電性可抹除可程式化ROM(EEPROM)、隨機存取記憶體(RAM)、靜態RAM(SRAM)、動態RAM(DRAM)、快閃記憶體、相變記憶體、相變資料儲存材料、非易失性記憶體、非易失性資料儲存裝置、非暫態記憶體、非暫態資料儲存裝置、或類似物。該非暫態機器可讀取儲存媒體並非由暫態傳播之信號所構成。在某些實施例中,該儲存媒體可包括有形媒體,其包括固態物。
合適的機器之範例包括,但不限於:通用處理器、專用處理器、數位邏輯電路、積體電路、或類似物。合適的機器之其他範例包括電腦系統或包括處理器、數位邏輯電路、或積體電路的其他電子裝置。此等電腦系統或電子裝置的範例包括,但不限於:桌上型電腦、膝上型電腦、筆記型電腦、平板電腦、輕省筆電、智慧型手機、行動電話、伺服器、網路裝置(例如:路由器和切換器)、行動上網裝置(MID)、媒體播放器、智慧型電視、桌上型易網機(nettop)、機上盒、以及電動遊戲控制器。
本說明書中各處所提及的「一實施例」、「實施例」、「一個以上的實施例」、「某些實施例」,舉例來說,表示在本發明的施行中可包括特定特徵,但並非一定必要。同樣地,為了使本揭示流暢並幫助了解各種發明態樣,在說明中,有時會將各種特徵一起聚集在單一實施例、圖式、或其說明中。但不應將此揭示之方法解讀為反映本發明需要多於各項申請專利範圍中所明確舉出之特徵的意圖。更確切來說,如下面申請專利範圍所反映的,發
明態樣在於少於單一揭示之實施例的所有特徵。因此,茲將詳細說明之後的申請專利範圍明確併入本詳細說明,且各項申請專利範圍本身獨立作為本發明的個別實施例。
範例實施例
以下範例是關於進一步之實施例。該等範例中的具體細節可被用於一個以上之實施例中的任何地方。
範例1是包括用以將記憶體複製指令解碼之解碼單元的處理器。該指令是用以指出來源記憶體運算元的起始、用以指出目的記憶體運算元的起始、以及用以指出架構性可見之儲存器位置,該架構性可見之儲存器位置是用以儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量。該處理器亦包括與該解碼單元耦合的執行單元。該執行單元是回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元。將以向下複製方向複製該第一部份的資料。回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,在該架構性可見之儲存器位置儲存將被複製的剩餘資料量,但不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始。該剩餘資料量是用以代表該初始資料量減去該第一部份的資料。
範例2包括範例1的處理器,更包括與該執行單元耦合的複數個暫存器。此外,選擇性地,其中該架構性可見儲存器位置包括該複數個暫存器的第一暫存器。
範例3包括範例2的處理器,其中該第一暫存器包括通用暫存器ECX和通用暫存器RCX的其中一者。
範例4包括範例2~3其中任一者的處理器,其中該解碼單元是用以將該記憶體複製指令解碼,該記憶體複製指令是用以指出該複數個暫存器的第二暫存器,以及用以指出該複數個暫存器的第三暫存器,該第二暫存器是用以儲存該來源記憶體運算元的起始,該第三暫存器是用以儲存該目的記憶體運算元的起始。此外,選擇性地,其中回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,該執行單元是用以改變該第一暫存器中的值,但不改變該等第二和第三暫存器中的值。
範例5包括範例1~4其中任一者的處理器,其中該執行單元回應於該記憶體複製指令而根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的初始資料量來判斷該等來源和目的記憶體運算元是否重疊,並至少在該等來源和目的記憶體運算元重疊時,以該向下複製方向複製該第一部份的資料。
範例6包括範例1~4其中任一者的處理器,其中該執行單元回應於該記憶體複製指令而判斷將用以從該來源記憶體運算元將該第一部份的資料複製到該目的記憶體運算元的複製方向,而不使用在執行該記憶體複製指令之外所產生的複製方向之指示。
範例7包括範例6的處理器,其中該執行單元回應於該記憶體複製指令而:(1)當該等來源和目的記憶體運算
元不重疊時,判斷該複製方向為向上複製方向;或(2)當該等來源和目的記憶體運算元重疊時,判斷該複製方向為向下複製方向。
範例8包括範例1~7其中任一者的處理器,其中將被複製的初始資料量包括將被複製的初始數目之多位元部份的資料,該多位元部份的資料為8位元、16位元、32位元、和64位元部份的資料之其中一者。
範例9是包括用以將記憶體複製指令解碼之解碼單元的處理器。該指令是用以指出來源記憶體運算元、用以指出目的記憶體運算元、以及用以指出將從該來源記憶體運算元複製到該目的記憶體運算元的資料量。該處理器亦包括與該解碼單元耦合的執行單元。該執行單元回應於該記憶體複製指令而判斷將用以開始從該來源記憶體運算元將資料複製到該目的記憶體運算元的複製方向,而不使用在執行該記憶體複製指令之外所產生的複製方向之指示。
範例10包括範例9的處理器,其中該執行單元回應於該記憶體複製指令而:(1)判斷該等來源和目的記憶體運算元是否重疊;以及(2)至少部份根據該等來源和目的記憶體運算元是否重疊的判斷來判斷該複製方向。
範例11包括範例10的處理器,其中該執行單元回應於該記憶體複製指令而根據選擇自該指令所指出之該來源記憶體運算元的起始、該指令所指出之該目的記憶體運算元的起始、所指出之將被複製的資料量、以及可由此導出的參數之資訊的組合來判斷該等來源和目的記憶體運算元
是否重疊。
範例12包括範例10~11其中任一者的處理器,其中該執行單元回應於該記憶體複製指令而:(1)當該等來源和目的記憶體運算元不重疊時,判斷該複製方向為向上複製方向;或(2)當該等來源和目的記憶體運算元重疊時,判斷該複製方向為向下複製方向。
範例13包括範例9~12其中任一者的處理器,其中該執行單元回應於該記憶體複製指令而在該等來源和目的記憶體運算元重疊時判斷該複製方向為向下複製方向。該執行單元亦用以在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元。該執行單元亦用以,回應於該中斷,且當已判斷該向下複製方向為該複製方向時,在架構性可見之儲存器位置儲存將被複製的剩餘資料量,但不指出與最初由該記憶體複製指令所指出者不同之該來源記憶體運算元的起始,且不指出與最初由該記憶體複製指令所指出者不同之該目的記憶體運算元的起始。
範例14包括範例13的處理器,其中該執行單元回應於該記憶體複製指令而在最初由該記憶體複製指令所指出以儲存將被複製的資料量之暫存器中儲存將被複製的剩餘資料量,但不改變最初由該記憶體複製指令所指出以儲存該來源記憶體運算元的起始和該目的記憶體運算元的起始之暫存器中的值。
範例15包括範例9~12其中任一者的處理器,更包
括一組暫存器。此外,其中該解碼單元是用以將該記憶體複製指令解碼,該記憶體複製指令是用以指出用以儲存該來源記憶體運算元的起始之複數個暫存器的第一暫存器、用以指出用以儲存該目的記憶體運算元的起始之複數個暫存器的第二暫存器、以及用以指出用以儲存將被複製之資料量的複數個暫存器的第三暫存器。
範例16包括範例9~15其中任一者的處理器,其中將被複製的資料量包括數個多位元部份的資料,該多位元部份的資料為8位元、16位元、32位元、和64位元部份的資料之其中一者。
範例17是由處理器所執行的方法,包括在該處理器接收記憶體複製指令。該記憶體複製指令指出來源記憶體運算元的起始、指出目的記憶體運算元的起始、以及指出架構性可見之儲存器位置,該架構性可見之儲存器位置儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量。該方法亦包括回應於該記憶體複製指令而判斷該等來源和目的記憶體運算元重疊。該方法亦包括回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元以向下複製方向將第一部份的資料複製到該目的記憶體運算元。該方法亦包括,回應於該中斷,且由於是以該向下複製方向複製該第一部份的資料,故在該架構性可見之儲存器位置儲存將被複製的剩餘資料量,其代表該初始資料量減去該第一部份的資料,而不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始。
範例18包括範例17的方法,其中儲存是包括在第一通用暫存器中儲存將被複製的剩餘資料量。
範例19包括範例18的方法,其中接收是包括接收該記憶體複製指令,該記憶體複製指令指出儲存該來源記憶體運算元的起始之第二通用暫存器、指出儲存該目的記憶體運算元的起始之第三通用暫存器。此外,其中,回應於該中斷,且由於是以該向下複製方向複製該第一部份的資料,故改變被儲存在該第一通用暫存器中的值,但不改變被儲存在該等第二和第三通用暫存器中的值。
範例20包括範例17~19其中任一者的方法,其中判斷是包括根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的初始資料量來判斷該等來源和目的記憶體運算元重疊。
範例21包括範例17~19其中任一者的方法,更包括判斷以該向下複製方向複製該第一部份的資料,而不使用在執行該記憶體複製指令之外所產生的複製方向之指示。
範例22包括範例17~19其中任一者的方法,更包括根據該等來源和目的記憶體運算元重疊的判斷來判斷以該向下複製方向複製該第一部份的資料。
範例23包括範例17~19其中任一者的方法,更包括僅根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的初始資料量來判斷以該向下複製方向複製該第一部份的資料,但不使用由軟體所提供的複製方向之指示。
範例24為電腦系統,包括互連和與該互連耦合的處理器。該處理器是用以接收記憶體複製指令,該記憶體複製指令是用以指出來源記憶體運算元的起始、用以指出目的記憶體運算元的起始、以及用以指出架構性可見之儲存器位置,該架構性可見之儲存器位置是用以儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量。該處理器回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元。將以向下複製方向複製該第一部份的資料。回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,該處理器是用以在該架構性可見之儲存器位置儲存將被複製的剩餘資料量,但不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始。該電腦系統亦包括與該互連耦合的動態隨機存取記憶體(DRAM)。
範例25包括範例24的電腦系統,其中該處理器回應於該記憶體複製指令而根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的初始資料量來判斷該等來源和目的記憶體運算元是否重疊。該處理器亦選擇性地用以根據該等來源和目的記憶體運算元是否重疊來判斷將使用向上複製方向或該向下複製方向,而不使用在該記憶體複製指令之外所產生的複製方向之指示。
範例26包括範例1~16其中任一者的處理器,更包括用以預測分支的選擇性分支預測單元、以及與該分支預
測單元耦合的選擇性指令預取單元,該指令預取單元是用以預取包括該記憶體複製指令的指令。該處理器亦可選擇性地包括:選擇性第一階(L1)指令快取,與該指令預取單元耦合,該L1指令快取是用以儲存指令;選擇性L1資料快取,用以儲存資料;以及選擇性第二階(L2)快取,用以儲存資料和指令。該處理器亦可選擇性地包括指令提取單元,該指令提取單元是與該解碼單元、該L1指令快取、以及該L2快取耦合,以在某些情況中從該L1指令快取和該L2快取的其中一者提取該記憶體複製指令,並將該記憶體複製指令提供至該解碼單元。該處理器亦可選擇性地包括:暫存器重新命名單元,用以將暫存器重新命名;選擇性排程器,用以將已自該記憶體複製指令所解碼之用於執行的一個以上之作業排程;以及選擇性提交單元,用以提交該記憶體複製指令的執行結果。
範例27包括系統單晶片,其包括至少一個互連、與該至少一個互連耦合的範例1~16其中任一者的處理器、與該至少一個互連耦合的選擇性圖形處理單元(GPU)、與該至少一個互連耦合的選擇性數位信號處理器(DSP)、與該至少一個互連耦合的選擇性顯示器控制器、與該至少一個互連耦合的選擇性記憶體控制器、與該至少一個互連耦合的選擇性無線數據機、與該至少一個互連耦合的選擇性影像信號控制器、與該至少一個互連耦合的選擇性通用序列匯流排(USB)3.0相容控制器、與該至少一個互連耦合的選擇性藍牙4.1相容控制器、以及與該至少一個互連耦
合的選擇性無線收發機控制器。
範例28是運作來執行範例17~23其中任一者之方法的處理器或其他設備。
範例29是包括用於執行範例17~23其中任一者之方法之機構的處理器或其他設備。
範例30是包括運作來執行範例17~23其中任一者之方法的模組及/或單元及/或邏輯及/或電路及/或機構之任何組合的處理器或其他設備。
範例31是選擇性非暫態及/或有形機器可讀取媒體,其選擇性地儲存或以其他方式提供包括第一指令的指令,若及/或當由處理器、電腦系統、電子裝置、或其他機器所執行時,該第一指令是運作來使該機器執行範例17~23其中任一者的方法。
範例32是實質如此處所述的處理器或其他設備。
範例33是運作來執行實質如此處所述之任何方法的處理器或其他設備。
範例34是運作來執行實質如此處所述之任何記憶體複製指令的處理器或其他設備。
Claims (25)
- 一種處理器,包含:解碼單元,用以將記憶體複製指令解碼,該記憶體複製指令是用以指出來源記憶體運算元的起始、用以指出目的記憶體運算元的起始、以及用以指出架構性可見之儲存器位置,該架構性可見之儲存器位置是用以儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量;以及執行單元,與該解碼單元耦合,該執行單元回應於該記憶體複製指令而:在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元,其中將以向下複製方向複製該第一部份的資料;以及回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,在該架構性可見之儲存器位置儲存將被複製的剩餘資料量,但不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始,其中該剩餘資料量是用以代表該初始資料量減去該第一部份的資料。
- 如申請專利範圍第1項的處理器,更包含與該執行單元耦合的複數個暫存器,且其中該架構性可見之儲存器位置包含該複數個暫存器的第一暫存器。
- 如申請專利範圍第2項的處理器,其中,該第一暫存器包含通用暫存器ECX和通用暫存器RCX的其中一者。
- 如申請專利範圍第2項的處理器,其中,該解碼單元是用以將該記憶體複製指令解碼,該記憶體複製指令是用以指出用以儲存該來源記憶體運算元的起始之該複數個暫存器的第二暫存器、以及用以指出用以儲存該目的記憶體運算元的起始之該複數個暫存器的第三暫存器,且其中回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,該執行單元是用以改變該第一暫存器中的值,但不改變該等第二和第三暫存器中的值。
- 如申請專利範圍第1項的處理器,其中,該執行單元回應於該記憶體複製指令而根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的該初始資料量來判斷該等來源和目的記憶體運算元是否重疊,並至少在該等來源和目的記憶體運算元重疊時,以該向下複製方向複製該第一部份的資料。
- 如申請專利範圍第1項的處理器,其中,該執行單元回應於該記憶體複製指令而判斷將用以從該來源記憶體運算元將該第一部份的資料複製到該目的記憶體運算元的複製方向,而不使用在執行該記憶體複製指令之外所產生的 複製方向之指示。
- 如申請專利範圍第6項的處理器,其中,該執行單元是回應於該記憶體複製指令而:當該等來源和目的記憶體運算元不重疊時,判斷該複製方向為向上複製方向;或當該等來源和目的記憶體運算元重疊時,判斷該複製方向為向下複製方向。
- 如申請專利範圍第1項的處理器,其中,將被複製的該初始資料量包含將被複製的初始數目之多位元部份的資料,該多位元部份的資料為8位元、16位元、32位元、和64位元部份的資料之其中一者。
- 一種處理器,包含:解碼單元,用以將記憶體複製指令解碼,該記憶體複製指令是用以指出來源記憶體運算元、用以指出目的記憶體運算元、以及用以指出將從該來源記憶體運算元複製到該目的記憶體運算元的資料量;以及執行單元,與該解碼單元耦合,該執行單元回應於該記憶體複製指令而:判斷將用以開始從該來源記憶體運算元將資料複製到該目的記憶體運算元的複製方向,而不使用在執行該記憶體複製指令之外所產生的複製方向之指示。
- 如申請專利範圍第9項的處理器,其中,該執行單元是回應於該記憶體複製指令而:判斷該等來源和目的記憶體運算元是否重疊;以及至少部份根據該等來源和目的記憶體運算元是否重疊的判斷來判斷該複製方向。
- 如申請專利範圍第10項的處理器,其中,該執行單元回應於該記憶體複製指令而根據選擇自該指令所指出之該來源記憶體運算元的起始、該指令所指出之該目的記憶體運算元的起始、所指出之將被複製的該資料量、以及可由此導出的參數之資訊的組合來判斷該等來源和目的記憶體運算元是否重疊。
- 如申請專利範圍第10項的處理器,其中,該執行單元是回應於該記憶體複製指令而:當該等來源和目的記憶體運算元不重疊時,判斷該複製方向為向上複製方向;或當該等來源和目的記憶體運算元重疊時,判斷該複製方向為向下複製方向。
- 如申請專利範圍第9項的處理器,其中,該執行單元是回應於該記憶體複製指令而:當該等來源和目的記憶體運算元重疊時,判斷該複製 方向為向下複製方向;在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元;以及回應於該中斷,且當已判斷該向下複製方向為該複製方向時,在架構性可見之儲存器位置儲存將被複製的剩餘資料量,但不指出與最初由該記憶體複製指令所指出者不同之該來源記憶體運算元的起始,且不指出與最初由該記憶體複製指令所指出者不同之該目的記憶體運算元的起始。
- 如申請專利範圍第13項的處理器,其中,該執行單元回應於該記憶體複製指令而在最初由該記憶體複製指令所指出以儲存將被複製的資料量之暫存器中儲存將被複製的該剩餘資料量,但不改變最初由該記憶體複製指令所指出以儲存該來源記憶體運算元的起始和該目的記憶體運算元的起始之暫存器中的值。
- 如申請專利範圍第9項的處理器,更包含一組暫存器,且其中該解碼單元是用以將該記憶體複製指令解碼,該記憶體複製指令是用以指出用以儲存該來源記憶體運算元的起始之複數個暫存器的第一暫存器、用以指出用以儲存該目的記憶體運算元的起始之複數個暫存器的第二暫存器、以及用以指出用以儲存將被複製之該資料量的複數個暫存器的第三暫存器。
- 如申請專利範圍第9項的處理器,其中,將被複製的該資料量包含數個多位元部份的資料,該多位元部份的資料為8位元、16位元、32位元、和64位元部份的資料之其中一者。
- 一種由處理器執行的方法,包含:在該處理器接收記憶體複製指令,該記憶體複製指令指出來源記憶體運算元的起始、指出目的記憶體運算元的起始、以及指出架構性可見之儲存器位置,該架構性可見之儲存器位置儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量;回應於該記憶體複製指令,判斷該等來源和目的記憶體運算元重疊;回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元以向下複製方向將第一部份的資料複製到該目的記憶體運算元;以及回應於該中斷,且由於是以該向下複製方向複製該第一部份的資料,故在該架構性可見之儲存器位置儲存將被複製的剩餘資料量,其代表該初始資料量減去該第一部份的資料,而不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始。
- 如申請專利範圍第17項的方法,其中,儲存是包含 在第一通用暫存器中儲存將被複製的該剩餘資料量。
- 如申請專利範圍第18項的方法,其中,接收是包含接收該記憶體複製指令,該記憶體複製指令指出儲存該來源記憶體運算元的起始之第二通用暫存器、指出儲存該目的記憶體運算元的起始之第三通用暫存器,且其中,回應於該中斷,且由於是以該向下複製方向複製該第一部份的資料,故改變被儲存在該第一通用暫存器中的值,但不改變被儲存在該等第二和第三通用暫存器中的值。
- 如申請專利範圍第17項的方法,其中,判斷是包含根據該來源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的該初始資料量來判斷該等來源和目的記憶體運算元重疊。
- 如申請專利範圍第17項的方法,更包含判斷以該向下複製方向複製該第一部份的資料,而不使用在執行該記憶體複製指令之外所產生的複製方向之指示。
- 如申請專利範圍第17項的方法,更包含根據該等來源和目的記憶體運算元重疊的判斷來判斷以該向下複製方向複製該第一部份的資料。
- 如申請專利範圍第17項的方法,更包含僅根據該來 源記憶體運算元的起始、該目的記憶體運算元的起始、以及將被複製的該初始資料量來判斷以該向下複製方向複製該第一部份的資料,但不使用由軟體所提供的複製方向之指示。
- 一種電腦系統,包含:互連;處理器,與該互連耦合,該處理器用以接收記憶體複製指令,該記憶體複製指令是用以指出來源記憶體運算元的起始、用以指出目的記憶體運算元的起始、以及用以指出架構性可見之儲存器位置,該架構性可見之儲存器位置是用以儲存將從該來源記憶體運算元複製到該目的記憶體運算元的初始資料量,該處理器回應於該記憶體複製指令而在中斷之前從該來源記憶體運算元將第一部份的資料複製到該目的記憶體運算元,其中將以向下複製方向複製該第一部份的資料,以及回應於該中斷,且當將以該向下複製方向複製該第一部份的資料時,在該架構性可見之儲存器位置中儲存將被複製的剩餘資料量,但不指出該來源記憶體運算元的不同起始,且不指出該目的記憶體運算元的不同起始;以及動態隨機存取記憶體(DRAM),與該互連耦合。
- 如申請專利範圍第24項的電腦系統,其中,該處理器回應於該記憶體複製指令而根據該來源記憶體運算元的 起始、該目的記憶體運算元的起始、以及將被複製的該初始資料量來判斷該等來源和目的記憶體運算元是否重疊,並根據該等來源和目的記憶體運算元是否重疊來判斷將使用向上複製方向或該向下複製方向,而不使用在該記憶體複製指令之外所產生的複製方向之指示。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/086,686 US10261790B2 (en) | 2016-03-31 | 2016-03-31 | Memory copy instructions, processors, methods, and systems |
US15/086,686 | 2016-03-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201741867A true TW201741867A (zh) | 2017-12-01 |
TWI733760B TWI733760B (zh) | 2021-07-21 |
Family
ID=59958756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106105474A TWI733760B (zh) | 2016-03-31 | 2017-02-18 | 記憶體複製指令、處理器、方法及系統 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10261790B2 (zh) |
CN (2) | CN116339828A (zh) |
DE (1) | DE112017001716T5 (zh) |
TW (1) | TWI733760B (zh) |
WO (1) | WO2017172259A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI718563B (zh) * | 2018-11-06 | 2021-02-11 | 美商萬國商業機器公司 | 用於在多次執行指令之間保存及恢復機器狀態之電腦程式產品、電腦系統及電腦實施方法 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10261790B2 (en) | 2016-03-31 | 2019-04-16 | Intel Corporation | Memory copy instructions, processors, methods, and systems |
US10296416B2 (en) | 2016-07-02 | 2019-05-21 | Intel Corporation | Read from memory instructions, processors, methods, and systems, that do not take exception on defective data |
CN107766079B (zh) * | 2016-08-19 | 2022-03-11 | 北京百度网讯科技有限公司 | 处理器以及用于在处理器上执行指令的方法 |
US10831502B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Migration of partially completed instructions |
US10831478B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Sort and merge instruction for a general-purpose processor |
US10831479B2 (en) * | 2019-02-20 | 2020-11-10 | International Business Machines Corporation | Instruction to move data in a right-to-left direction |
CN112506591A (zh) * | 2021-02-05 | 2021-03-16 | 北京鼎石纵横科技有限公司 | 一种字符串的复制方法、装置及可读存储介质及计算设备 |
US20240028241A1 (en) * | 2022-07-22 | 2024-01-25 | Arm Limited | Memcpy micro-operation reduction |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
BR8406089A (pt) * | 1983-11-30 | 1985-09-24 | Fujitsu Ltd | Processo para controlar memoria intermediaria em aparelho de processamento de dados |
US5537620A (en) * | 1994-09-16 | 1996-07-16 | International Business Machines Corporation | Redundant load elimination on optimizing compilers |
US5819304A (en) * | 1996-01-29 | 1998-10-06 | Iowa State University Research Foundation, Inc. | Random access memory assembly |
US5835972A (en) * | 1996-05-28 | 1998-11-10 | Advanced Micro Devices, Inc. | Method and apparatus for optimization of data writes |
US6205520B1 (en) * | 1998-03-31 | 2001-03-20 | Intel Corporation | Method and apparatus for implementing non-temporal stores |
US6223258B1 (en) * | 1998-03-31 | 2001-04-24 | Intel Corporation | Method and apparatus for implementing non-temporal loads |
US6539471B2 (en) * | 1998-12-23 | 2003-03-25 | Intel Corporation | Method and apparatus for pre-processing instructions for a processor |
US6467027B1 (en) * | 1999-12-30 | 2002-10-15 | Intel Corporation | Method and system for an INUSE field resource management scheme |
US6880071B2 (en) | 2001-04-09 | 2005-04-12 | Sun Microsystems, Inc. | Selective signalling of later reserve location memory fault in compound compare and swap |
JP3763518B2 (ja) | 2001-05-29 | 2006-04-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、そのコンパイル方法およびプログラム |
US7024542B2 (en) * | 2002-01-02 | 2006-04-04 | Intel Corporation | System and method of reducing the number of copies from alias registers to real registers in the commitment of instructions |
US6895486B2 (en) | 2002-08-29 | 2005-05-17 | Micron Technology, Inc. | Linear object management for a range of flash memory |
WO2007053980A1 (en) * | 2005-11-12 | 2007-05-18 | Intel Corporation | Method and apparatus to support virtualization with code patches |
FR2927438B1 (fr) * | 2008-02-08 | 2010-03-05 | Commissariat Energie Atomique | Methode de prechargement dans une hierarchie de memoires des configurations d'un systeme heterogene reconfigurable de traitement de l'information |
US7802078B2 (en) | 2008-09-09 | 2010-09-21 | Via Technologies, Inc. | REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat |
US8543796B2 (en) * | 2008-11-05 | 2013-09-24 | Intel Corporation | Optimizing performance of instructions based on sequence detection or information associated with the instructions |
US8527737B2 (en) * | 2010-06-23 | 2013-09-03 | Apple Inc. | Using addresses to detect overlapping memory regions |
CN103988173B (zh) * | 2011-11-25 | 2017-04-05 | 英特尔公司 | 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑 |
US9311250B2 (en) * | 2011-12-19 | 2016-04-12 | Intel Corporation | Techniques for memory de-duplication in a virtual system |
CN104011670B (zh) * | 2011-12-22 | 2016-12-28 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
WO2013095668A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Systems, apparatuses, and methods for performing vector packed compression and repeat |
WO2013097163A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Selective hardware acceleration in video playback systems |
US9164690B2 (en) | 2012-07-27 | 2015-10-20 | Nvidia Corporation | System, method, and computer program product for copying data between memory locations |
US9563425B2 (en) | 2012-11-28 | 2017-02-07 | Intel Corporation | Instruction and logic to provide pushing buffer copy and store functionality |
US9411593B2 (en) * | 2013-03-15 | 2016-08-09 | Intel Corporation | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
US9256433B2 (en) * | 2013-03-15 | 2016-02-09 | Intel Corporation | Systems and methods for move elimination with bypass multiple instantiation table |
US9292288B2 (en) * | 2013-04-11 | 2016-03-22 | Intel Corporation | Systems and methods for flag tracking in move elimination operations |
DE102013212842A1 (de) * | 2013-07-02 | 2015-01-08 | Robert Bosch Gmbh | Verfahren zum Betreiben eines Steuergeräts sowie Steuergerät mit einer Modellberechnungseinheit |
US9396056B2 (en) * | 2014-03-15 | 2016-07-19 | Intel Corporation | Conditional memory fault assist suppression |
US10394556B2 (en) * | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US9996361B2 (en) * | 2015-12-23 | 2018-06-12 | Intel Corporation | Byte and nibble sort instructions that produce sorted destination register and destination index mapping |
US10261790B2 (en) | 2016-03-31 | 2019-04-16 | Intel Corporation | Memory copy instructions, processors, methods, and systems |
-
2016
- 2016-03-31 US US15/086,686 patent/US10261790B2/en active Active
-
2017
- 2017-02-18 TW TW106105474A patent/TWI733760B/zh active
- 2017-03-03 CN CN202310099536.2A patent/CN116339828A/zh active Pending
- 2017-03-03 CN CN201780021154.0A patent/CN108885551B/zh active Active
- 2017-03-03 DE DE112017001716.5T patent/DE112017001716T5/de active Pending
- 2017-03-03 WO PCT/US2017/020625 patent/WO2017172259A1/en active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI718563B (zh) * | 2018-11-06 | 2021-02-11 | 美商萬國商業機器公司 | 用於在多次執行指令之間保存及恢復機器狀態之電腦程式產品、電腦系統及電腦實施方法 |
Also Published As
Publication number | Publication date |
---|---|
US20170285959A1 (en) | 2017-10-05 |
TWI733760B (zh) | 2021-07-21 |
DE112017001716T5 (de) | 2018-12-13 |
WO2017172259A1 (en) | 2017-10-05 |
CN108885551B (zh) | 2023-06-06 |
US10261790B2 (en) | 2019-04-16 |
CN108885551A (zh) | 2018-11-23 |
CN116339828A (zh) | 2023-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6124463B2 (ja) | 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール | |
EP3274816B1 (en) | User-level fork and join processors, methods, systems, and instructions | |
TWI733760B (zh) | 記憶體複製指令、處理器、方法及系統 | |
JP6240964B2 (ja) | 装置、方法、およびシステム | |
JP6849274B2 (ja) | 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック | |
JP6143872B2 (ja) | 装置、方法、およびシステム | |
CN108885586B (zh) | 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令 | |
US9250901B2 (en) | Execution context swap between heterogeneous functional hardware units | |
KR20160075669A (ko) | 하이브리드 프로세서 코어를 포함하는 시스템-온-칩(soc) | |
TW201741872A (zh) | 根據指令類型來配置負載及儲存緩衝器的處理器、方法及系統 | |
JP5985526B2 (ja) | システムコールのためのロバスト且つ高性能な命令 | |
JP2017538213A (ja) | アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置 | |
EP3014424B1 (en) | Instruction order enforcement pairs of instructions, processors, methods, and systems | |
CN118349314A (zh) | 孔径访问处理器、方法、系统和指令 | |
US10761979B2 (en) | Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value | |
US10579378B2 (en) | Instructions for manipulating a multi-bit predicate register for predicating instruction sequences | |
US9424042B2 (en) | System, apparatus and method for translating vector instructions | |
CN109416635B (zh) | 针对使用多个架构寄存器的指令的架构寄存器替换 | |
EP4202664B1 (en) | System, apparatus and method for throttling fusion of micro-operations in a processor |