TW201508635A - 多核心微處理器動態重新配置 - Google Patents

多核心微處理器動態重新配置 Download PDF

Info

Publication number
TW201508635A
TW201508635A TW103129489A TW103129489A TW201508635A TW 201508635 A TW201508635 A TW 201508635A TW 103129489 A TW103129489 A TW 103129489A TW 103129489 A TW103129489 A TW 103129489A TW 201508635 A TW201508635 A TW 201508635A
Authority
TW
Taiwan
Prior art keywords
core
block
cores
microprocessor
processing cores
Prior art date
Application number
TW103129489A
Other languages
English (en)
Other versions
TWI637316B (zh
Inventor
G Glenn Henry
Terry Parks
Darius D Gaskins
Original Assignee
Via Tech Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Via Tech Inc filed Critical Via Tech Inc
Publication of TW201508635A publication Critical patent/TW201508635A/zh
Application granted granted Critical
Publication of TWI637316B publication Critical patent/TWI637316B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4418Suspend and resume; Hibernate and awake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3237Power saving characterised by the action undertaken by disabling clock generation or distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/324Power saving characterised by the action undertaken by lowering clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3296Power saving characterised by the action undertaken by lowering the supply or operating voltage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/362Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
    • G06F13/364Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control using independent requests or grants, e.g. using separated request and grant lines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Microcomputers (AREA)
  • Power Sources (AREA)

Abstract

一微處理器包括複數處理核心及一配置用以指示每一處理核心是否可啟用或停用的配置暫存器。上述複數處理核心中每一可啟用的處理核心配置用以讀取在一第一實例中之配置暫存器以決定上述複數處理核心中何者可啟用或停用,以及基於在第一實例中配置暫存器之讀取產生一各自的配置相關值。配置暫存器被更新以指示複數處理核心中一先前可啟用的處理核心係被停用。上述複數處理核心中每一可啟用的處理核心配置用以讀取在一第二實例中之配置暫存器以決定複數處理核心中何者可啟用或停用以及基於配置暫存器在第二實例中之讀取產生各自的配置相關值。

Description

多核心微處理器動態重新配置
本發明係有關於一微處理器,且特別係有關於一在核心間同步運作的多核心微處理器及方法。
多核心微處理器的增加,主要是因為其提供在性能上的優勢。已可能主要係由半導體裝置幾何維度大小迅速的減少,從而增加了電晶體密度。在一微處理器中多核心的存在已被建立與其他核心通訊的必要性,以完成各種功能,例如電源管理、高速緩衝記憶體管理、除錯及與更多核心相關的配置。
傳統上,運行在多核心處理器上架構的程式(例如,操作系統或應用程式)已使用位在由所有核心架構上可尋址之一系統記憶體中的信號量通訊。這可能足夠用於許多目的,但可能無法提供其他所需的速度、準確度及/或系統層級透明度。
本發明提供一種微處理器。上述微處理器包括複數處理核心及一配置用以指示每一上述複數處理核心是否可啟用或停用的配置暫存器。上述複數處理核心中每一可啟用的 處理核心配置用以讀取在一第一實例(instance)中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用,以及基於在上述第一實例中上述配置暫存器之讀取產生一各自的配置相關值。上述配置暫存器被更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用。上述複數處理核心中每一可啟用的處理核心配置用以讀取在一第二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用以及基於上述配置暫存器在上述第二實例中之讀取產生上述各自的配置相關值。
本發明提供一種重新配置一具有複數處理核心之多核心微處理器的方法。上述方法包括由上述複數處理核心中每一可啟用的處理核心讀取一第一實例(instance)中之一配置暫存器以決定上述複數處理核心中何者可啟用或停用。上述方法也包括由上述複數處理核心中每一可啟用的處理核心產生基於在上述第一實例中上述配置暫存器之讀取一各自的配置相關值。上述方法還包括由上述配置暫存器更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用。上述方法更包括由上述複數處理核心中每一可啟用的處理核心讀取在一第二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用。上述方法還包括由上述複數處理核心中每一可啟用的處理核心基於在上述第二實例中上述配置暫存器之讀取產生上述各自的配置相關值。
本發明提供一種在用於一計算機裝置中至少一非暫態電腦可用介質所編碼的電腦程式產品,上述電腦程式產品 包括指示一微處理器之電腦可用程式碼。上述電腦可用程式碼包括指示複數處理核心的第一程式碼。上述電腦可用程式碼還包括指示一配置暫存器的第二程式碼,,配置用以指示每一上述複數處理核心是否可啟用或停用。上述複數處理核心中每一可啟用的處理核心配置用以讀取在一第一實例(instance)中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用以及基於在上述第一實例中上述配置暫存器之讀取產生一各自的配置相關值。上述配置暫存器被更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用。上述複數處理核心中每一可啟用的處理核心配置用以讀取在一第二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;以及基於上述配置暫存器在上述第二實例中之讀取產生上述各自的配置相關值。
下文為介紹本發明之最佳實施例。各實施例用以說明本發明之原理,但非用以限制本發明。本發明之範圍當以後附之權利要求項為準。
100‧‧‧多核心微處理器
102A、102B、102N‧‧‧核心A、核心B、核心N
103‧‧‧非核心
104‧‧‧控制單元
106‧‧‧狀態暫存器
108A、108B、108C、108D、108N‧‧‧同步暫存器
108E、108F、108G、108H‧‧‧影子同步暫存器
114‧‧‧熔斷器
116‧‧‧專用隨機存取記憶體
118‧‧‧硬體信號量
119‧‧‧共享高速緩衝記憶體
122A、122B、122N‧‧‧時脈信號
124A、124B、124N‧‧‧中斷信號
126A、126B、126N‧‧‧數據信號
128A、128B、128N‧‧‧電能控制信號
202‧‧‧控制字
204‧‧‧喚醒事件
206‧‧‧同步控制
208‧‧‧電源閘
212‧‧‧睡眠
214‧‧‧選擇性喚醒
222‧‧‧S
224‧‧‧C
226‧‧‧同步狀態或C-狀態
228‧‧‧核心集合
232‧‧‧強迫同步
234‧‧‧選擇性同步中止
236‧‧‧停用核心
242‧‧‧狀態字
244‧‧‧喚醒事件
246‧‧‧最低常用C-狀態
248‧‧‧錯誤碼
252‧‧‧配置字
254-0~254-7‧‧‧致能
256‧‧‧本地核心數量
258‧‧‧晶體數量
302、304、305、306、312、314、316、318、322、326、328、332、334、336‧‧‧步驟
402A、402B‧‧‧晶體間匯流排單元A、晶體間匯流排單元B
404‧‧‧晶體間匯流排
406A、406B‧‧‧晶體A、晶體B
502、504、505、508、514、516、518、524、526、528、532‧‧‧步驟
702、704、706、708、714、716、717、718、724、726、727、728、744、746、747、748、749、752‧‧‧步驟
902、904、906、907、908、909、914、916、919、921、924‧‧‧步驟
1102、1104、1106、1108、1109、1121、1124、1132、1134、1136、1137‧‧‧步驟
1402、1404、1406、1408、1412、1414、1416、1417、1418、1422、1424、1426‧‧‧步驟
1502、1504、1506、1508、1517、1518、1522、1524、1526、1532‧‧‧步驟
1702‧‧‧擁有位元
1704‧‧‧所有者位元
1706‧‧‧狀態機器
1802、1804、1806、1808‧‧‧步驟
1902、1904、1906、1908、1912、1914、1916、1918‧‧‧步驟
2002、2004、2006、2008‧‧‧步驟
2202、2203、2204、2205、2206、2208、2212、2214、2216、2218、2222、2224‧‧‧步驟
2302、2304、2305、2306、2312、2315、2318、2324‧‧‧步驟
2404‧‧‧核心微碼唯讀記憶體
2408‧‧‧非核心微碼修補隨機存取記憶體
2423‧‧‧服務處理單元
2425‧‧‧非核心微碼唯讀記憶體
2439‧‧‧修補可定址內容記憶體
2497‧‧‧服務處理單元起始位址暫存器
2499‧‧‧核心隨機存取記憶體
2500‧‧‧微碼修補
2502‧‧‧標頭
2504‧‧‧即時修補
2506‧‧‧校對和
2508‧‧‧CAM數據
2512‧‧‧核心PRAM修補
2514‧‧‧校對和
2516‧‧‧RAM修補
2518‧‧‧非核心PRAM修補
2522‧‧‧校對和
2602、2604、2606、2608、2611、2612、2614、2616、2618、2621、 2622、2624、2626、2628、2631、2632、2634、2652‧‧‧步驟
2808‧‧‧核心修補RAM
2912、2916、2922、2932‧‧‧步驟
3002、3004、3006‧‧‧步驟
3102‧‧‧記憶體類型範圍暫存器
3202、3204、3206、3208、3211、3212、3214、3216、3218、3252‧‧‧步驟
第1圖係顯示一多核心微處理器之方塊圖。
第2圖係顯示一控制字、一狀態字及一配置字之方塊圖。
第3圖係顯示一控制單元操作的流程圖。
第4圖係顯示另一實施例之微處理器的一方塊圖。
第5圖係顯示一微處理器操作以轉儲調試資訊的流程圖。
第6圖係顯示一根據第5圖流程圖中微處理器的操作示例時 序圖。
第7A~7B圖係顯示一微處理器執行跨核心高速緩衝控制操作的流程圖。
第8圖係顯示根據第7A~7B圖流程圖之微處理器操作例子的時序圖。
第9圖係顯示微處理器進入一低功率封裝C-狀態的操作流程圖。
第10圖係顯示根據第9圖流程圖一微處理器操作例子之時序圖。
第11圖係根據本發明另一實施例之微處理器進入一低功率封裝C-狀態之操作流程圖。
第12圖係顯示根據第11圖流程圖之微處理器操作一例子的時序圖。
第13圖係顯示根據第11圖流程圖之微處理器操作另一例子的時序圖。
第14圖係顯示微處理器之動態重新配置的流程圖。
第15圖係顯示根據另一實施例中微處理器動態重新配置的流程圖。
第16圖係顯示根據第15圖流程圖之微處理器操作一例子的時序圖。
第17圖係顯示在第1圖中硬體信號量118之一方塊圖。
第18圖係顯示當一核心102讀取硬體信號量118的操作流程圖。
第19圖係顯示當一核心寫入硬體信號量的操作流程圖。
第20圖係顯示當微處理器使用硬體信號量以執行需一資源獨占所有權的操作流程圖。
第21圖係顯示根據第3圖流程圖之核心發出非睡眠同步請求操作一例子的時序圖。
第22圖係顯示配置微處理器之一程序流程圖。
第23圖係顯示根據另一實施例中配置微處理器之一程序流程圖。
第24圖係顯示根據另一實施例之一多核心微處理器的方塊圖。
第25圖係顯示一微碼修補架構的方塊圖。
第26A~26B圖係顯示第24圖中該微處理器以傳播第25圖的一微碼修補至該微處理器之多核心的一操作流程圖。
第27圖係顯示根據第26A~26B圖流程圖之一微處理器操作之一例子的時序圖。
第28圖係顯示根據另一實施例之一多核心微處理器的方塊圖。
第29A~29B圖係顯示根據另一實施例之第28圖中該微處理器用以傳播一微碼修補至該微處理器之多個核心的一操作流程圖。
第30圖係顯示第24圖之微處理器用以修補一服務處理器程式碼之流程圖。
第31圖係顯示根據另一實施例之一多核心微處理器的方塊圖。
第32圖係顯示第31圖中該微處理器用以傳播一MTRR更新 至該微處理器之多個核心的之一操作流程圖。
請參照第1圖,其係顯示一多核心微處理器100之方塊圖。微處理器100包括複數處理核心,標示為102A、102B至102N,其統稱為複數處理核心102,或簡稱複數核心102,且被單獨稱為處理核心102、或簡稱核心102。更佳地說,每一核心102包括一或多個功能單元的管線(圖未示出),其包括一指令高速緩衝記憶體(instruction cache)、一指令轉換單元或指令解碼器,其更佳地包括一微碼(microcode)單元、暫存換名單元、保留站(Reservation station)、高速緩衝記憶體、執行單元、記憶體子系統及包括一排序緩衝器的引退單元(retire unit)。更佳地說,複數核心102包括一超純量(Superscalar)、非順序執行(out-of-order execution)微體架構。在一實施例中,微處理器100係一x86架構微處理器,但在其他實施例中,微處理器100符合其它指令集的架構。
微處理器100也包括一耦接至上述複數核心102的不同於上述複數核心102的非核心部分103。非核心部分103包括一控制單元104、熔斷器114、一專用隨機存取記憶體116(Private Random Access Memory,PRAM),以及一共享高速緩衝記憶體119(Shared Cache Memory),舉例來說,一第二級(level-2,L2)和/或第三級(level-3,L3)高速緩衝記憶體、其由複數核心102所共享。每一核心102配置用以藉由一各自的位址/數據匯流排126從非核心103讀取數據/寫入數據至非核心103,其核心102提供一非架構位址空間(也視為專用或微架 構位址空間)至非核心103的共享資源。專用隨機存取記憶體116為專用、或非架構的,也就是說其未在微處理器100的架構使用者程序位址空間中。在一實施例中,非核心103包括仲裁邏輯(Arbitration Logic),其藉由複數核心102仲裁請求存取非核心103的資源。
每一熔斷器114係一電子裝置,其可被燒斷或不被燒斷;當熔斷器114不被燒斷時,熔斷器114具有低阻抗且易傳導電流;當熔斷器114被燒斷時,熔斷器114具有高阻抗且不容易傳導電流。一檢測電路係與每一熔斷器114相關聯,以評估該熔斷器114,例如,檢測該熔斷器114是否傳導一高電流或低電壓(不燒斷,例如,邏輯為零、或清除(clear))或一低電流或高電壓(燒斷,例如,邏輯為一、或設置(set))。該熔斷器114可在微處理器100的製造期間內被燒斷,且在一些實施例中,一未燒斷的熔斷器114可在微處理器100製造後被燒斷。更佳地說,一燒斷的熔斷器114是不可逆的。一熔斷器114的例子為一多晶矽熔絲,其可在裝置間施加一足夠高的電壓而燒斷。一熔斷器114的另一例子為鎳-鉻熔絲,其可使用一雷射而燒斷。更佳地說,感測電路電力開啟感測熔斷器114,並提供其評估至微處理器100的保存暫存器(Holding Register)中的一相應位元。當微處理器100被重置解除時,複數核心102(例如,微碼)讀取保存暫存器以決定所感測熔斷器114的值。在一實施例中,在微處理器100被重置解除前,已更新的值可經由一邊界掃描輸入掃描至保存暫存器,舉例來說,像是一測試行動聯合組織(Joint Test Action Group,JTAG)輸入,以實質更新熔斷器114 的值。此用於測試和/或偵錯目的,如在下方描述與第22圖和第23圖相關的實施例中特別有用。
另外,在一實施例中,微處理器100包括與每一核心102相關不同的本地高級可編程中斷控制器(Advanced Programmable Interrupt Controller,APIC)(圖未示出)。在一實施例中,本地高級可編程中斷控制器架構地遵守加利福尼亞州(California)聖塔克拉拉(Santa Clara)的Intel公司在2012年五月Intel 64及IA-32架構軟體開發人員手冊3A中一本地高級可編程中斷控制器的說明,特別是在第10.4節中。尤其是本地高級可編程中斷控制器包括一高級可編程中斷控制器ID及一包括導引處理器(Bootstrap Processor,BSP)旗標的高級可編程中斷控制器基址暫存器,其產生及用途將更詳細地描述的如下,尤其是與第14圖至第16圖有關的實施例。
控制單元104包括硬體、軟體、或硬體和軟體的組合。控制單元104包括一硬體信號量(Hardware Semaphore)118(詳細地描述如下第17圖至第20圖)、一狀態暫存器106、一配置暫存器112、和每一核心102各自對應的一同步暫存器108。更佳地說,每一非核心103的實體在非架構位址空間內不同位址中可由每一核心102所尋址,其該非架構位址空間能使微碼讀取及寫入核心102。
每一同步暫存器108可由各自對應的核心102寫入。狀態暫存器106是由每一核心102讀取。配置暫存器112可由每一核心102讀取及間接寫入(經由第2圖停用核心位元236,如下所述)。控制單元104更可包括中斷邏輯(圖未示出),其生 成至每一核心102一對應的中斷信號(interrupt signal,INTR)124,其由控制單元104產生以中斷對應的核心102。中斷來源為回應該控制單元104,產生一中斷信號124至一核心102,中斷來源可包括外部中斷來源,像是x86架構INTR、SMI、NMI中斷來源;或匯流排事件,像是x86架構式的匯流排信號STPCLK確立(Assertion)或解除確立(De-assertion)。此外,每一核心102可藉由寫入控制單元104傳送一核心間中斷信號124至其他每一核心102。更佳地說,除非另有說明,否則本文中所描述的核心間中斷信號為一核心102的微碼經由一微指令(microinrstuction)請求非架構核心間中斷信號,其不同於由系統軟體經由一架構指令所請求之傳統架構核心間中斷信號。最後,當一同步情況(Synchronization Condition)、或同步情況(Sync Condition)已經發生時,如下文所述(例如,請參閱第21圖及第3圖中的方塊334),控制單元104可產生一中斷信號124至核心102(一同步中斷信號)。控制單元104也產生一對應的時脈信號(CLOCK)122至每一核心102,其中控制單元104可以選擇性地關閉及有效地使對應的核心102進入睡眠及開啟以喚醒核心102來備份。控制單元104還產生一對應核心的電能控制信號(PWR)128至每一核心102,其選擇性地控制對應的核心102是否接收電能。因此,控制單元104可選擇性地經由對應的電能控制信號128使一核心102進入一更深的睡眠狀態以關閉至該核心的電能並重新開啟電能至該核心102以喚醒該核心102。
一核心102可寫入其對應具有同步位元集合(請參 閱第2圖之S位元222)的同步暫存器108中,其被視為一同步請求(Synchronization Request),或一同步請求(sync request)。更詳細的說明描述如下,在一實施例中,該同步請求請求控制單元104使核心102進入睡眠狀態並當一同步情況發生時和/或當一特定的喚醒事件發生時喚醒該核心102。一同步情況發生在當微處理器100中所有可啟用(請參閱第2圖中之致能位元254)之核心102-或可啟用核心102的一特定子集合(請參閱第2圖中之核心集合欄位228)-以寫入相同同步情況(詳細說明於第2圖中C位元224、同步情況或C-狀態欄位226之一組合及核心集合欄位228,關於S位元222其更詳細地描述如下)至其對應的同步暫存器108時。為了回應一同步情況的發生,控制單元104同時喚醒正等待該同步情況的所有核心102,即,已請求同步情況。在另一描述如下的實施例中,核心102可以僅請求最後寫入該同步請求之一核心102被喚醒(請參閱第2圖的選擇性喚醒位元214)。在另一實施例中,同步請求不請求核心102進入睡眠狀態;相反地,同步請求請求控制單元104當同步情況發生時中斷核心102,更詳細地描述如下,特別是第3圖和第21圖。
更佳地說,當控制單元104偵測一同步情況已發生時(由於最後寫入同步請求至同步暫存器108中之最後核心102),控制單元104使最後核心102進入睡眠狀態,例如,關閉傳送至最後寫入核心102的時脈信號122,接著同時喚醒所有核心102,例如,開啟傳送至所有核心102的時脈信號122。在此方法中,所有核心102皆精確地在相同的時間週期中被喚醒, 例如,使其時脈信號122被開啟。對於某些操作,例如,除錯(debugging),是特別有益的(請參閱第5圖中的實施例),其對於精確地在同一時間週期喚醒核心102係為有益。在一實施例中,非核心103包括一單一鎖相迴路(Phase-locked Loop,PLL),其產生提供給核心102的時脈信號122。在其他實施例中,微處理器100包括多個鎖相迴路,其產生提供至核心102的時脈信號122。
控制、狀態及配置字
請參照第2圖,其顯示一控制字202、狀態字242、及一配置字252之一方塊圖。一核心102寫入控制字202的一值至第1圖的控制單元104的同步暫存器108,以產生一原子請求(atomic request)請求進入睡眠狀態和/或與微處理器100中所有其他核心102,或一特定子集合同步化(同步)。一核心102讀取該控制單元104中狀態暫存器106所傳送之該狀態字242的一值,以決定本文所描述的狀態資訊。一核心102讀取該控制單元104中配置暫存器112所傳送之該配置字252的一值,並使用該值,描述如下。
控制字202包括一喚醒事件欄位204、一同步控制欄位206,以及一電源閘(Power Gate,PG)位元208。該同步控制欄位206包括各種位元或子欄位,其控制核心102的睡眠和/或核心102與其他核心102的同步。同步控制欄位206包括一睡眠位元212、一選擇性喚醒(SEL WAKE)位元214、一S位元222、一C位元224、一同步狀態或C-狀態欄位226、一核心集合欄位228、一強迫同步位元232、一選擇性同步中止(kill)位元234, 以及核心停用核心位元236。狀態字242包括一喚醒事件欄位244、一最低常用C-狀態欄位246,及一錯誤碼欄位248。該配置字252包括微處理器100的每一核心102之一致能位元254、一本地核心數量欄位256及一晶體數量欄位258。
該控制字202的喚醒事件欄位204包括複數個對應於不同事件的位元。如果核心102設置一位元在喚醒事件欄位204中,當事件發生對應該位元時,控制單元104將喚醒(例如,開啟時脈訊號122至)該核心102。當該核心102已與在核心集合欄位228中所指定的所有其他核心同步時,則發生一喚醒事件。在一實施例中,核心集合欄位228可指定微處理器100中所有核心102;所有核心102與即時(instant)核心102共享一高速緩衝記憶體(例如,一第二級(L2)高速緩衝及/或第三級(L3)高速緩衝);在相同半導體晶體中所有核心102為即時核心102(參閱第4圖中描述一多晶體、多核心微處理器100之實施例的一例子);或在其他半導體晶體中的所有核心102為即時核心102。一共享高速緩衝記憶體之核心集合102可視為一晶片(Slice)。其他喚醒事件的其它例子包括,但不侷限於,一x86 INTR、SMI、NMI、STPCLK的確立(Assertion)或解除確立(De-assertion),及一核心間中斷(inter-core interrupt)。當一核心102被喚醒時,其可讀取在狀態字242中的喚醒事件欄位244以決定該正活動喚醒事件。
如果核心102設置該PG位元208時,該控制單元104使核心102進入睡眠狀態後關閉至核心102的電能(例如,經由該電能控制信號128)。當控制單元104隨後恢復供電至核心102 時,控制單元104清除PG位元208。PG位元208的使用在如下第11圖至第13圖將有更詳細地描述。
如果該核心102設定睡眠位元212或選擇性喚醒位元214時,控制單元104在核心102寫入使用指定在喚醒事件欄位204喚醒事件的同步暫存器108後,使核心102進入睡眠狀態。該睡眠位元212和選擇性喚醒位元214互斥。當一同步情況發生時,它們之間的差別與控制單元104所採取的行動有關。若核心102設置睡眠位元212,當一同步情況發生時,則控制單元104將喚醒所有核心102。反之,若一核心102設置選擇性喚醒位元214,當一同步情況發生時,控制單元104將僅喚醒最後寫入同步情況至其同步暫存器的核心102。
如果核心102並未置睡眠位元212,也未設置選擇性喚醒位元214時,雖然控制單元104不會使核心102進入睡眠狀態,但當一同步情況發生時,控制單元104將不會喚醒核心102。控制單元104仍將設置在指示一同步情況為正活動之喚醒事件欄位242的位元,因此核心102可以偵測該同步情況已經發生。許多可指定於該喚醒事件欄位204中之喚醒事件也可中斷由該控制單元104所產生一中斷信號至核心102之來源。然而,若有要求,則核心102的微碼可遮蔽中斷來源。若是,當核心102被喚醒時,該微碼可讀取狀態暫存器106決定一同步情況或一喚醒事件或兩者是否發生。
如果核心102設置S位元222時,其請求控制單元104在一同步情況中同步。該同步情況係在C位元224、同步情況或C-狀態欄位226的一些組合中及核心集合欄位228中被指 定。若C位元224被設置時,C-狀態欄位226指定一C-狀態值;若C位元224係清除的,同步情況欄位226指定了一非C-狀態同步情況。更佳地說,同步狀態或C-狀態欄位226的值包括一非負整數的有界集合。在一實施例中,該同步情況或C-狀態欄位226為4位元。當C位元224為清除(clear)時,一同步情況發生在一特定的核心集合欄位228中所有核心102已經寫入S位元222集合及同步情況欄位226相同值於同步暫存器108中。在一實施例中,同步情況欄位226的值對應一唯一的同步情況下,例如,在下方所描述示範的實施例中各種的同步情況。當C位元224被設置時,同步情況發生在在一特定的核心集合欄位228中所有核心102不論是否已寫入該C-狀態欄位226中相同的值,皆寫入各自S位元222集合至同步暫存器108中。在此情況下,控制單元104分發(post)該C-狀態欄位226中最低寫入值至該狀態暫存器106中之最低常用C-狀態欄位246,其可由一核心102(例如,藉由在方塊908中的主要核心102或藉由方塊1108中最後寫入/選擇性地被喚醒核心102)所讀取。在一實施例中,若核心102在同步情況欄位226中指定一預設值(例如,所有位元集合),此指示控制單元104以匹配即時核心102與其他核心102所指定的任一同步情況欄位226值。
若核心102設定強迫同步位元232時,控制單元104將強迫所有正進行的同步請求被立即匹配。
一般來說,若任一核心102因在喚醒事件欄位204中所指定的一喚醒事件所喚醒時,控制單元104中止(kill)所有正進行的同步請求(透過清除在同步暫存器108中S位元222)。 然而,若核心102設定該選擇性同步中止位元234時,控制單元104將中止的只有因(非同步情況發生)喚醒事件所喚醒核心102所正進行的同步請求。
若兩或多個核心102在不同的同步情況下請求同步時,控制單元104認為這為一停頓(deadlock)情況。若兩或多個核心102將值為設置(set)的S位元222、一值為清除(clear)的C位元224及同步情況欄位226中的不同值寫入各自的同步暫存器108中時,兩或多個核心102則在不同的同步情況下請求同步。舉例來說,若一核心102將一值為設置(set)於S位元222,一值為清除(clear)的C位元224及一同步情況226值7寫入至同步暫存器108中,且另一核心102將一值為設置(set)於S位元222,一值為清除(clear)的C位元224及一同步情況226值寫入至同步暫存器108中時,控制單元104則認為此為一停頓情況。此外,若一核心102將一值為清除的C位元224寫入至其同步暫存器108中,而另一核心102將一值為設置(set)的C位元224寫入至其同步暫存器108中,則控制單元104認為此為一停頓情況。為了回應一停頓情況,控制單元104中止所有正進行的同步請求,並喚醒所有在睡眠狀態中之核心102。控制單元104也分發(post)在狀態暫存器106的錯誤碼欄位248中的值,其狀態暫存器106係為可由核心102讀取以決定該停頓原因並採取適當行動的狀態暫存器。在一實施例中,錯誤碼248表示每一核心102所寫入的同步情況,其使每一核心以決定是否繼續執行其動作的預定路線或延遲至另一核心102。舉例來說,若一核心102寫入一同步情況以執行一電源管理操作(例如,執行一x86 MWAIT指令) 以及另一核心102寫入一同步情況以執行一高速緩衝管理操作(例如,86 WBINVD指令),則計畫執行該MWAIT指令的核心102因MWAIT是一可選擇的操作,而WBINVD是一強制性的操作而取消MWAIT指令,以延遲至另一正執行WBINVD指令的核心102。在舉另一例子,若一核心102寫入一同步情況以執行一除錯操作(例如,轉儲除錯狀態(Dump debug state))以及另一核心102寫入一同步情況以執行一高速緩衝管理操作(例如,WBINVD指令)時,則計畫進行WBINVD的核心102藉由儲存WBINVD狀態、等待轉儲除錯發生及恢復WBINVD狀態並執行WBINVD指令,以延遲至執行轉儲除錯的核心102。
在一單一晶體的實施例中晶體號碼欄位258為零。在一多個晶體的實施例(例如,第4圖中),晶體號碼欄位258指示哪一晶體由讀取配置暫存器112的該核心102所駐留。舉例來說,在一二晶體的實施例中,該晶體被指定為0和1以及該晶體值258具有0或1的值。在一實施例中,舉例來說,熔斷器114選擇性地被燒斷以指定一晶體為0或1。
本地核心數量欄位256係指示本地到正讀取配置暫存器112之核心102的晶體中,核心的數量。更佳地說,雖然具有一由所有核心102所共享的單一配置暫存器112,然而控制單元104知道哪個核心102正讀取配置暫存器112,並根據一讀取器在本地核心數量欄位256中提供正確的值。這使得核心102的微碼知道位於同一晶體中其他核心102間的本地核心數量。在一實施例中,在微處理器100的非核心103部分的一多路復用器選擇適當的值,其可取決讀取配置暫存器112的核心102在配 置字252的本地核心數量欄位256中恢復。在一實施例中,選擇性地燒斷熔斷器114操作與多路復用器一起恢復本地核心數量欄位256的值。更佳地說,本地核心數量欄位256的值是固定獨立的,其在晶體中的核心102為可使用的,如以下所描述之致能位元254所指示。也就是說,即使在該晶體的一或多個核心102被停用時,本地核心數量欄位256的值維持固定。另外,核心102的微碼計算核心102的整體核心數量,其為一與配置相關的值,其用途詳細描述如下。整體核心數量指示微處理器100整體核心102的核心數量。核心102藉由使用晶體數量欄位258的值計算其整體核心數量。例如,在一實施例中,微處理器100包括8個核心102,平均分至兩個具有晶體值0及1的晶體中,在每一晶體中,本地核心數量欄位256恢復一0、1、2或3的值;在晶體值為1的核心加上4即恢復本地核心數量欄位256的值以計算其整體核心數量。
微處理器100的每一核心102具有一配置字252對應致能位元254,其配置字252係指示該核心102是否被啟用或停用。在第2圖中,致能位元254分別以致能位元EN 254-x表示,其中x是該對應核心102的整體核心數量。第2圖中的例子係假設微處理器100中具有八個核心102,在第2圖及第4圖的例子中,致能位元254-0指示具有整體核心數量0的核心102(例如,核心A)是否被啟用,致能位元254-1指示具有整體核心數量1的核心102(例如,核心B)是否被啟用,致能位元254-2指示具有整體核心數量2的核心102(例如,核心C)是否被啟用等等。因此,藉由了解其整體核心數量,一核心102的微碼可由配置 字252中決定微處理器100的哪一核心102被停用以及哪一核心102被啟用。更佳地說,若該核心102被啟用時,則一致能位元254被設定,若核心102被停用時,則致能位元254被清除。當該微處理器100被重新設定時,硬體自動地填入(populate)該致能位元254。更佳地說,當微處理器100被製造指示一已給定的核心102是否為啟用,若是停用時,該硬體基於熔斷器114選擇性地被燒斷而填入致能位元254。舉例來說,如果一已給定的核心102被測試並發現其為故障時,一熔斷器114可被燒斷以清除該核心102的致能位元254。在一實施例中,一被燒斷的熔斷器114係指示一核心102係為停用以防止來自提供給停用之核心102的時脈信號。每一核心102可寫入該停用核心位元236在其同步暫存器108中,以清除其致能位元254,更多與第14圖至第16圖相關之細節將詳細描述如下。更佳地說,清除致能位元254不會阻止該核心102執行指令,但會更新該配置暫存器112,以及該核心102必須設定一不同的位元(圖未示出),以防止該核心本身執行指令,例如,使其電源被移除和/或關閉其時脈信號。對於一多晶體配置微處理器100(例如,第4圖),該配置暫存器112包括該微處理器100中所有核心102的一致能位元254,例如,所有核心102不僅可是該本地晶體的核心102,而且也可為該遠端晶體鐵心的核心102。更佳地說,在一多晶體配置的微處理器100中,當一核心102寫入至其同步暫存器108時,同步暫存器108的值被傳遞至對應另一晶體中之影子同步暫存器108的核心102(請參閱第4圖),其中,若該停用核心位元236被設定時,造成一更新傳送至遠端晶體配置暫存器112, 使得本地和遠端晶體配置暫存器112皆具有相同的值。
在一實施例中,配置暫存器112無法直接由一核心102寫入;然而,由一核心102寫入至該配置暫存器112將造成本地致能位元254的值被傳播到在一多晶體微處理器100中其它晶體的配置暫存器112中,例如,如第14圖中方塊1406中之描述。
控制單元
請參考第3圖,係顯示一描述該控制單元104的流程圖。流程開始於方塊302。在方塊302中,一核心102寫入一同步請求,例如,寫入一控制字202至其同步暫存器108,其中該同步請求由控制單元104接收。在一多晶體配置微處理器100的情況下(例如,請參見第4圖),當一控制單元104的影子暫存器108接收由其他晶體406所傳送之已傳播同步暫存器108的值,該控制單元104根據第3圖有效地操作,例如,當該控制單元104從其本地核心102中其中之一接收一同步請求(方塊302),除了該控制單元104僅使核心102僅入睡眠狀態(例如,方塊314)或喚醒(在方塊306或328或336)或中斷(在方塊334)或阻止核心102在其本地核心406的喚醒事件,以及填入其本地狀態暫存器106(方塊318)。流程進行到方塊304。
在方塊304中,該控制單元104檢查在方塊302中的該同步情況,以決定一停頓(deadlock)情況是否已發生,如上第2圖所描述。若是,則流程行進至方塊306;否則,流程進行到判斷方塊312。
在方塊305中,該控制單元104偵測在同步暫存器 108其中之一的喚醒事件欄位204之一喚醒事件的發生(除了在方塊316中被偵測之一同步情況的發生之外)。如下方方塊326中所描述,控制單元104可自動地阻止喚醒事件。控制單元104可以偵測該喚醒事件發生為一事件不同步(Event Asynchronous)時在方塊302中寫入一同步請求。流程也由方塊305進行至方塊306。
在方塊306中,該控制單元104填入狀態暫存器106,中止正進行的同步請求,並且喚醒任一睡眠的核心102。如上所述,喚醒睡眠核心102可包括恢復其功率。該核心102接著可讀取該狀態暫存器106,特別是錯誤碼248,以決定停頓的原因,並根據該衝突同步請求對應的優先順序處理它,如上所描述。此外,該控制單元104中止所有正進行的同步請求(例如,清除在每一核心102的同步暫存器105中的S位元222),除非方塊306是由方塊305後達成且該選擇性同步中止位元234被設定時,在此種情況下,該控制單元104會中止僅由該喚醒事件所喚醒之核心102正進行的同步請求。若方塊306是由方塊305後達成,則該核心102可讀取喚醒事件244欄位以決定所發生的喚醒事件。此外,若該喚醒事件係一未遮蔽(unmasked)的中斷來源,則控制單元104將透過該中斷信號124產生一中斷請求至該核心102。流程在方塊306中結束。
在判斷方塊312中,該控制單元104決定睡眠信號212或選擇性喚醒位元214是否被設定。若有,則流程進行至方塊314;否則,流程進行至判斷方塊316。
在方塊314中,控制單元104使該核心102進入睡眠 狀態。如上所述,使一核心102進入睡眠狀態可包括移除其電源。在一實施例中,作為一最佳化的例子,即使該PG位元208被設定,若此為最後寫入的核心102(例如,將造成同步情況的發生),在方塊314中,該控制單元104不移除該核心102的電源,並且因該控制單元104將在方塊328中即時喚醒最後寫入的核心102備份,因此該選擇性喚醒位元214被設定。在一實施例中,該控制單元104包括同步邏輯及睡眠邏輯,其互相分開,但互相通訊;此外,該每一同步邏輯和睡眠邏輯包括該同步暫存器108的一部分。有利的是,寫入至該同步暫存器108的同步邏輯部分和寫入到該同步暫存器108的睡眠邏輯部分係為原子的(Atomic)。也就是說,如果一部份寫入發生時,其同步邏輯部分及睡眠邏輯部分皆保證會發生。更佳地說,該核心102的管線阻塞,不允許任何更多的寫入發生,直到其被保證寫入至該同步暫存器108中的兩個部分皆已發生為止。寫入一同步請求並立即進入睡眠狀態的優點是其不需要該核心102(例如,微碼)連續地運轉以決定該同步情況是否已經發生。因其可以節省電力且不消耗其他資源,例如匯流排及/或記憶體頻寬,因此非常有益。值得注意的是,為了進入睡眠狀態但無需請求與其他核心102同步(例如,方塊924和1124),該核心102可以寫入S位元222為清除(Clear)及睡眠位元212為設定(Set),在本文中稱為一睡眠請求,至該同步暫存器108中;若在喚醒事件欄位204中所指定一未遮蔽的喚醒事件發生時(例如,方塊305),但未尋找此核心102一同步情況的發生(例如,方塊316)時,在此種情況下,該控制單元104喚醒該核心102(例如,方塊306)。 流程進行到判斷方塊316。
在判斷方塊316中,該控制單元104決定一同步情況是否發生。若是,流程進行至方塊318。如上所述,一同步情況可僅在S位元222被設定時發生。在一實施例中,該控制單元104使用第2圖中該致能位元254,其指示該微處理器100中哪些核心102被啟用,以及哪些核心102被停用。該控制單元104僅尋找被啟用的核心102,以決定一同步情況是否發生。一核心102可因其被測試且發現在生產時間中有缺陷而被停用;因此,一熔斷器被燒斷以使該核心102無法操作並指示該核心102被停用。一核心102可因該核心102所請求之軟體而被停用(例如,請參閱第15圖)。舉例來說,在一使用者請求時,BIOS寫入一特殊模組暫存器(Model Specific Register,MSR)以請求該核心102被停用,以回應該核心102停止使用其本身(例如,透過該停用核心位元236),並通知其他核心102讀取其他核心102決定停用該核心102的配置暫存器112。一核心102還可經由一微碼修補(patch)(例如,請參閱第14圖),其可藉由燒斷熔斷器114和/或從系統記憶體載入,像是一FLASH記憶體。除了決定一同步情況是否發生之外,該控制單元104檢查該強迫同步位元232。若為設置(set),流程則進行至方塊318。若該強迫同步位元232係為清除(clear)且一同步情況尚未發生,則流程結束於方塊316中。
在方塊318中,該控制單元104填入該狀態暫存器106。明確的說,如果發生同步情況為所有核心102請求一C-狀態的同步時,如上所述,該控制單元104填入最低常用C-狀 態欄位246。流程進行至判斷方塊322。
在判斷方塊322中,該控制單元104檢查選擇性喚醒(SEL WAKE)位元214。如果該位元為設置(set)時,流程進行至方塊326;否則,流程進行至判斷方塊322。
在方塊326中,該控制單元104阻止除了即時核心(instant core)外所有其他核心102的所有喚醒事件,其中該即時核心為在方塊302中最後寫入同步請求至其同步暫存器108的核心102,因此使該同步情況發生。在一實施例中,如果欲阻止喚醒事件及其他方面為真(True)時,該控制單元104的邏輯簡單地布林(Boolean)AND運算具有一為假(False)信號的喚醒情況。阻止所有核心的所有喚醒事件的用途被更詳細地描述如下,特別是第11圖至第13圖。流程進行至方塊328。
在方塊328中,該控制單元104僅喚醒該即時核心102,但不喚醒請求該同步的其它核心。此外,該控制單元104藉由清除該S位元222中止該即時核心102正進行的同步請求,但不中止其他核心102正進行的同步請求,例如,離開其他核心102的S位元222設置。因此有利的是,如果當即時核心102在其被喚醒後寫入另一同步請求時,其將會再次造成同步情況的發生(假設其他核心102的同步請求尚未被中止),一例子將將在下方第12圖及第13圖中描述。流程結束於方塊328。
在判斷方塊332中,該控制單元104檢查該睡眠位元212。如果該位元為設置(set)時,則流程前進到方塊336;否則,流程前進到方塊334。
在方塊334中,該控制單元104傳送一中斷信號(同 步中斷)至所有核心102。第21圖的時序圖係說明一非睡眠同步請求的例子。每一核心102可讀取該喚醒事件欄位244並偵測一同步情況的發生是中斷的原因。流程已進行到方塊334,在此情況下,當核心102寫入其同步請求時,核心102選擇不進入睡眠狀態。雖然此種情況並未使核心102獲得與進入睡眠狀態時同樣的益處(例如,同時喚醒),但其具有使核心102在等待最後寫入其同步要求的核心102在無需同時喚醒的情況下,繼續處理指令的潛在優勢。流程結束於方塊334。
在方塊336中,該控制單元104同時被所有核心102喚醒。在一實施例中,該控制單元104在同一時間週期準確地開啟至所有核心102的該時脈訊號122。在另一實施例中,該控制單元104以一交錯方式開啟該時脈訊號122至所有核心102。也就是說,該控制單元104在開啟時脈訊號122至每一核心間引入一時間週期的預定數量(例如,時間順序為十或一百)。然而,時脈訊號122交錯(staggering)開啟被同時考慮於本發明中。時脈訊號122交錯開啟可能為有益的,當所有核心102被喚醒時,以減少一電力耗損尖峰的可能性。在又另一實施例中,為了降低電力耗損尖峰的可能性時,該控制單元104在同一時間週期開啟至所有核心102的時脈信號122,但藉由初始在一已減少的頻率中提供時脈信號122並提高頻率至目標頻率下,在一斷斷續續(stuttering)、或壓制(throttled)方式中執行。在一實施例中,該同步請求由於該核心微碼指令的執行結果被發出,並且該微碼被設計用於至少一些同步情況值,在指定該同步情況值的該微碼位置係為唯一的。舉例來說,在微碼中僅一地方包括一同 步x請求,在微碼中僅一地方包括一同步y請求,依此類推。在這些情況下,因所有核心102在完全相同的地方被喚醒,其可使得微碼設計人員設計出更有效率且無缺陷的程式碼,因此同時喚醒是有益的。此外,當嘗試重新建立和修復因多核心相互作用而出現錯誤,但當單一核心運行時則不出現錯誤時,以除錯為目的同時喚醒可能是特別有益的。第5圖及第6圖係顯示此一例子。此外,該控制單元104中止所有正進行的同步請求(例如,清除在每一核心102的同步暫存器108中的S位元222)。流程結束於方塊336。
本文所描述實施例的一優點為其可顯著減少在一微處理器中微碼的數量,因比起循環(looping)或執行其他檢查以同步多核心間的操作,在每一核心中的微碼可簡單地寫入同步請求,進入睡眠狀態,並且知道何時在微碼中同一地方喚醒所有核心。該同步請求機制的微碼用途將描述於下方。
多晶體微處理器
請參照第4圖,係顯示另一實施例微處理器100的一方塊圖。第4圖中的微處理器100在許多方面類似於第1圖的微處理器100,其中一多核心處理器及核心102均相似。然而,第4圖的實施例係一多晶體配置。也就是說,該微處理器100包括安裝在一共同封裝(package)內並經由一晶體內匯流排404與另一晶體通訊的多半導體晶體406。第4圖的實施例包括兩個晶體406,標記為晶體A 406A和藉由晶體間匯流排404所耦接的晶體B 406B。此外,每一晶體406包括一晶體間匯流排單元402其聯繫各自的晶體406至該晶體間匯流排404。更進一步地,每 一晶體406包括耦接至各自核心102及晶體間匯流排單元402的非核心103中之控制單元104。在第4圖的實施例中,晶體A 406A包括四個核心102-核心A 102A、核心B 102B、核心C 102C和核心D 102D,其中上述四個核心102耦接至一耦接於一晶體間匯流排單元A 402A的控制單元A 104A;同樣地,晶體B 406B包括四個核心102-核心E 102E、核心F 102F、核心G 102G和核心H 102H,其中上述四個核心102耦接至一耦接於一晶體間匯流排單元B 402B的控制單元B 104B。最後,每一控制單元104不僅包括在包括本身之該晶體406中每一核心的一同步暫存器108,也包括另一晶體406中每一核心的一同步暫存器108,其中為上述晶體406中每一核心係為第4圖中所示之影子暫存器(Shadow register)。因此,第4圖所示實施例中的每一控制單元包括八個同步暫存器108,表示為108A、108B、108C、108D、108E、108F、108G和108H。在控制單元A 104A,同步暫存器108E、108F、108G和108H係為影子暫存器,而在控制單元B 104B中,同步暫存器108A、108B、108C、108D係為影子暫存器。
當一核心102將一值寫入到其同步暫存器108時,在核心102的晶體406中的控制單元104,經由晶體間匯流排單元402及晶體間匯流排404,寫入該值至另一晶體406中對應的影子暫存器108。此外,如果停用核心位元236被設定於傳播至影子同步暫存器108的該值中時,該控制單元104還更新在配置暫存器112中對應的致能位元254。在此種方式下,即使是在微處理器100核心配置是動態變化的情形下(例如,第14圖至第 16圖),一同步情況的發生-包括一跨晶體(trans-die)同步情況的發生-可以被偵測。在一實施例中,晶體間匯流排404係一相對低速的匯流排,且該傳播可採用為一預定數量100核心的時間週期順序,並且每一控制單元104包括一狀態機制,其取用一預定數量的時間以偵測該同步情況的發生,並開啟該時脈訊號至各自晶體406中的所有核心102。更佳地說,在控制單元104開始寫入值至另一晶體406後(例如,被授予的晶體間匯流排404),在本地晶體406中的控制單元104(例如,包括寫入核心102的晶體406)被配置以延遲更新該本地同步暫存器直到一預定數量的時間為止(例如,傳播時間數量與狀態機制同步情況發生偵測時間數量的總和)。在此種方式中,在兩個晶體中的控制單元104同時偵測一同步情況的發生,並且同時在兩個晶體406中開啟至所有核心102的時脈訊號。當嘗試重新建立及修復僅因多核心相互作用而出現,但不在一單一核心正運行時出現的錯誤時,以除錯為目的而言可能特別地有益。第5圖和第6圖描述了可能利用此功能優勢的實施例。
調試操作
微處理器100的核心102被配置用以執行單獨的調整操作,像是指令執行及數據存取的斷點(Breakpoint)。此外,微處理器100被配置用以執行為跨核心(trans-core)的調試操作,例如,與該微處理器100一個以上的核心102相關。
請參閱第5圖,其係顯示微處理器100操作以轉儲(dump)調試(debug)資訊的流程圖。該操作係從一單一核心的角度所描述,但微處理器100中每一核心102根據其描述操作共同 轉儲微處理器100的狀態。更具體地說,第5圖描述了一核心接收請求以轉儲調試資訊的操作,其流程開始於方塊502,且其他核心102的操作流程開始於方塊532。
在方塊502中,核心其中之一102接收一請求以轉儲調試資訊。更佳地說,上述調整資訊包括該核心102或其一子集的狀態。更佳地說,調整資訊被轉儲至系統記憶體或一可藉由調整設備監控的外部匯流排,像是一邏輯分析器。回應該請求,核心102傳送一調試轉儲訊息至其他核心102並傳送其他核心102一核心間中斷信號。更佳地說,在此時間中斷被停用的期間內(例如,該微碼不允許本身被中斷),核心102阻止微碼以回應該請求以轉儲調試資訊(在方塊502中),或回應上述中斷信號(在方塊532),並保持在微碼中,直到方塊528為止。在一實施例中,核心102只需當其處於睡眠狀態且位於架構指令邊界時中斷。在一實施例中,本文所描述的各種核心間訊息(像是在方塊502及其他像是在方塊702、1502、2606和3206中的訊息)經由同步暫存器108控制字的該同步情況或C-狀態欄位226被傳送及接收。在其他實施例中,核心間訊息經由非核心專用隨機存取記憶體116被傳送及接收。流程從方塊502前進到方塊504。
在方塊532中,其他核心102之其中之一(例如,在方塊502中接收該調試轉儲請求核心102之外的一核心102)由於在方塊502中傳送的核心間中斷信號及訊息被中斷並接收該調試轉儲訊息。如上所述,雖然在方塊532中的流程係由單一核心102的角度所描述,但每一其他核心102(例如,不在方 塊502中之核心102)在方塊532被中斷並接收該訊息,且執行方塊504至528的步驟。流程由方塊532前進到方塊504。
在方塊504中,核心102寫入一同步情況1(在第5圖中標示為SYNC 1)的同步請求至其同步暫存器108中。因此,該控制單元104使核心102進入睡眠狀態。流程進行到方塊506。
在方塊506中,當所有核心已寫入SYNC 1時,核心102由控制單元104所喚醒。流程進行到方塊508。
在方塊508中,核心102轉儲其狀態至記憶體中。流程進行到方塊514。
在方塊514中,核心102寫入一SYNC 2,其造成控制單元104使核心102進入睡眠狀態。流程進行到方塊516。
在方塊516中,當所有核心已寫入SYNC 2時,核心102由控制單元104所喚醒。流程進行到方塊518。
在方塊518中,核心102轉儲在方塊508中調試資訊的該記憶體位址設定一旗標(flag),藉由一重置(Reset)訊號維持,接著重置其本身。核心102重置微碼係偵測該旗標,並由所儲存的記憶體位址重新載入其狀態。流程進行到方塊524。
在方塊524中,核心102寫入一SYNC 3,其造成控制單元104使核心102進入睡眠狀態。流程進行到方塊526。
在方塊526中,當所有核心已寫入SYNC 3時,核心102由控制單元104所喚醒。流程進行到方塊528。
在方塊528中,該核心102基於該在方塊518中被重新載入之狀態移除重置,並開始提取架構(例如,x86)指令。 流程結束於方塊528。
請參照第6圖,其係顯示一根據第5圖流程圖中微處理器100的操作示例時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1及核心2,如圖所示;然而,應可理解的是,在其它實施例中,微處理器100可包括不同數量的核心102。在此時序圖中,事件時序的過程如下所述。
核心0接收一調試轉儲請求,並傳送一調試轉儲訊息和中斷訊息至核心1及核心2(每一方塊502)以作為回應。該核心0接著寫入一SYNC 1,並進入睡眠狀態(每一方塊504)。
每一核心1和核心2最後由其目前任務中被中斷並讀取其訊息(每一方塊532)。作為回應,每一核心1和核心2寫入一SYNC 1並進入睡眠狀態(每一方塊504)。如圖所示,每一核心寫入SYNC 1的時間可能不同,例如,由於該指令當該中斷被確立時正在執行。
當所有核心已寫入SYNC 1時,控制單元104同時喚醒所有核心(每一方塊506)。每一核心接著轉儲其狀態至記憶體(每一方塊508),寫入一SYNC 2並進入睡眠狀態(每一方塊514)。需轉儲該狀態的時間量可能不同;因此,在每一核心寫入SYNC 2的時間可能不同,如圖所示。
當所有核心已寫入SYNC 2時,控制單元104同時喚醒所有核心(每一方塊506)。每一核心接著重置其本身並由記憶體中重新載入其狀態(每一方塊518),寫入SYNC 3並進入睡眠狀態(每一方塊524)。如圖所示,需重置並重新載入狀態 的時間量可能會有所不同;因此,在每一核心寫入SYNC 3的時間可能不同。
當所有核心已寫入SYNC 3時,控制單元104同時喚醒所有核心(每一方塊526)。每一核心接著開始在被中斷的時間點提取架構指令(每一方塊528)。
傳統在多處理器之間同步操作的解決方法係使用軟體信號量(semaphore)。然而,傳統的解決方法缺點是其無法提供時間等級同步(Clock-level Synchronization)。本文所描述實施例的優點是控制單元104可同時開啟時脈訊號122至所有的核心102。
在如上所述的方法中,一調整微處理器100的工程師可配置核心102其中之一以週期性地產生檢查時間點,其用以產生調試轉儲請求,舉例來說,在一預定數量的指令已經執行後。當微處理器100在運行時,工程師取得在一記錄檔中微處理器100外部匯流排上的所有活動。接近匯流排被察覺已發生時間的記錄檔部分可提供至一軟體模擬器,其模擬該微處理器100以幫助工程師調試。該模擬器模擬執行由每一核心102所指示的指令,並模擬外部微處理器100匯流排使用紀錄資訊的執行。在一實施例中,所有核心102的模擬器從同時由一重置點啟動。因此,該微處理器100的所有核心102實際上在同一時間停止重置(例如,在SYNC 2之後)是具有較高的效果。此外,藉由在所有其他核心102已經停止其當前的任務(例如,在SYNC 1之後)之前,等待轉儲其狀態時,由一核心102轉儲其狀態不會與其他核心執行調試(例如,共享記憶體匯流排或 高速緩衝相互影響)的程式碼及/或硬體互相干擾,其可增加重新產生錯誤並判斷其原因的可能性。同樣地,直到所有核心102已經完成重新載入其狀態之前(例如,在SYNC 3之後),等待以開始提取架構指令,藉由一核心102重新載入狀態不會與其他核心執行調試的程式碼及/或硬體互相干擾,其可增加重新產生錯誤並判斷其原因的可能性。
這些好處係提供比現有方法更多的優點,其現有方法如美國專利號碼US 8,370,684,其從所有目的整體上作為參考被引用於此,其無法享有能夠取得該同步請求核心的好處。
高速緩衝控制操作
微處理器100的核心102被配置用以執行獨立的高速緩衝控制操作,像是在本地高速緩衝記憶體,例如,不由兩個或更多核心102所共享的高速緩衝器。此外,微處理器100被配置用以執行為跨核心(Trans-core)的高速緩衝控制操作,例如,與微處理器100一個以上的核心102相關,以及例如,因其與一共享高速緩衝記憶體119相關。
請參閱第7A~7B圖,其係顯示微處理器100用以執行跨核心高速緩衝控制操作的流程圖。第7A~7B圖的實施例描述微處理器100如何執行一x86架構寫回無效緩衝(Write Back and Invalidate Cache,WBINVD)指令。一WBINVD指令係指示執行指令的核心102寫回在微處理器100高速緩存記憶體中所有的修改行至系統記憶體並使高速緩存記憶體失效,或清空(Flush)。該WBINVD指令更指示該核心102發佈特別的匯流排 週期以將任意高速緩存記憶體外部直接指入微處理器100中,以寫回其已修改的數據,並使上述數據失效。上述操作係以一單一核心的角度所描述,但微處理器100的每一核心102係根據本說明書操作共同寫回已修改高速緩衝線(Modified cache line)並使微處理器100的高速緩衝記憶體無效。更具體地說明,第7A~7B圖係描述一核心遇到WBINVD指令的操作,其流程開始於方塊702,並且其他核心102的流程開始於方塊752。
在方塊702中,核心102其中之一遇到一WBINVD指令。作為回應,核心102傳送一WBINVD指令訊息至其他核心102並且傳送一核心間中斷信號至上述其他核心102。更佳地說,直到流程進行至方塊748/749之前,核心102在時間中斷信號被停用期間內(例如,該微碼不允許其本身被中斷),阻止微碼以作為WBINVD指令的回應(在方塊702中),或以作為該中斷信號(在方塊752中)的回應,並維持在微碼中。流程從方塊702進行到方塊704。
在方塊752中,其他核心102其中之一(例如,除了在方塊702中所遇到該WBINVD指令核心102之外的一核心)由於在方塊702中被傳送的該核心間中斷信號而被中斷並接收該WBINVD指令訊息。如上所述,雖然流程在方塊752是由單一核心102的角度所描述,但每一其他核心102(例如,不為在方塊702中的核心102)在方塊752中被中斷並接收該訊息,且執行方塊704至方塊749的步驟。流程由方塊752進行到方塊704。
在方塊704中,該核心102寫入一同步情況4的同步 請求(在第7A~7B圖中標示為SYNC 4)至其同步暫存器108中。因此,控制單元104使核心102進入睡眠狀態。流程進行到方塊706。
在方塊706中,當所有核心102已寫入SYNC 4時,該核心102由控制單元104所喚醒。流程進行到方塊708。
在方塊708中,核心102寫回並使得本地高速緩衝記憶體失效,例如,不由核心102與其他核心102共享的第1級(Level-1,L1)高速緩衝記憶體。流程進行到框714。
在方塊714中,核心102寫入一SYNC 5,其造成控制單元104使核心102進入睡眠狀態。流程進行到方塊716。
在方塊716中,當所有核心102已寫入SYNC 5時,核心102由控制單元104所喚醒。流程進行到判斷方塊717。
在判斷方塊717中,核心102判斷其是否為在方塊702中所遇到該WBINVD指令的核心102(與在方塊752中所接收該WBINVD指令訊息的核心102相對照)。若是,則流程進行到方塊718;否則,流程前進到方塊724。
在方塊718中,核心102寫回並使共享高速暫存器119失效。在一實施例中,微處理器100包括多個晶片在多個核心但並非全部核心中,微處理器100的核心102共享一高速緩衝記憶體,如上所述。在此一實施例中,類似於方塊717至方塊726中的中間操作(圖未示出)被執行,其係為由在晶片中核心102其中之一執行寫回及使共享緩衝記憶體失效,而該晶片的其他(複數)核心回到類似於方塊724中的睡眠狀態以等待直到該高速緩衝記憶體失效為止。流程進行到方塊724。
在方塊724中,核心102寫入一SYNC 6,其造成控制單元104使核心102進入睡眠狀態。流程進行到方塊726。
在方塊726中,當所有核心102已寫入SYNC 6時,核心102由控制單元104所喚醒。流程進行到判斷方塊727。
在判斷方塊727中,核心102判斷其是否為在方塊702中遇到WBINVD指令的核心102(與在方塊752中所接收該WBINVD指令訊息的核心102相對照)。若是,則流程進行到方塊728;否則,流程前進到方塊744。
在方塊728中,核心102發佈特定的匯流排週期以造成外部高速緩衝器被寫回並使外部高速緩衝器失效。流程進行到方塊744。
在方塊744中,寫入一SYNC 13,其造成控制單元104使核心102進入睡眠狀態。流程進行到方塊746。
在方塊746中,當所有核心102已寫入SYNC 13時,核心102由控制單元104所喚醒。流程進行到判斷方塊747。
在判斷方塊747中,核心102判斷其是否為在方塊702中遇到WBINVD指令的核心102(與在方塊752中所接收該WBINVD指令訊息的核心102相對照)。若是,則流程進行到方塊748;否則,流程前進到方塊749。
在方塊748中,核心102完成WBINVD指令,其包括退役(retire)的WBINVD指令,且可包括放棄一硬體信號量的所有權(見第20圖)。流程結束於方塊748。
在方塊749,在核心102在方塊752中被中斷之前,核心102在方塊749恢復繼續其正執行的任務102。流程結束於 方塊749。
參閱第8圖,其係顯示根據第7A~7B圖流程圖之微處理器100的操作時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1及核心2,如圖所示;然而,應可理解的是,在其它實施例中,微處理器100可包括不同數量的核心102。
核心0遇到一WBINVD指令並回應傳送一WBINVD指令訊息,且中斷核心1及核心2(每一方塊702)。核心0接著寫一SYNC 4並進入睡眠狀態(每一方塊704)。
每一核心1及核心2最後從其當前任務中被中斷並讀取該訊息(每一方塊752)。作為回應,每一核心1及核心2寫入一SYNC 4並進入睡眠狀態(每一方塊704)。如圖所示,每一核心寫入SYNC 4的時間可能不同。
當所有核心已經寫入SYNC 4時,控制單元104同時喚醒所有核心(每一方塊706)。每一核心接著寫回並使其特定的高速緩衝記憶體失效(每一方塊708),寫入SYNC 5並進入睡眠狀態(每一方塊714)。需寫回及使高速緩衝記憶體失效的時間量可能不同;因此,在每一核心寫入SYNC 5的時間可能不同,如圖所示。
當所有核心已寫入SYNC 5時,控制單元104同時喚醒所有核心(每一方塊716)。僅遇到WBINVD指令的核心寫回並使共享高速緩衝記憶體119失效(每一方塊718),以及所有核心寫入SYNC 6並進入睡眠狀態(每一方塊724)。由於僅一核心寫回並使共享高速緩衝記憶體119失效,因此每一核心寫 入SYNC 6的時間可能不同。
當所有核心已寫入SYNC 6時,控制單元104同時喚醒所有核心(每一方塊726)。僅遇到WBINVD指令的核心完成WBINVD指令(每一方塊748),以及所有其他核心恢復中斷前的處理。
應可理解的是,雖然高速緩衝控制指令為一x86 WBINVD指令的實施例已被描述,但其他實施例可以假設同步請求被用以執行其他高速緩衝指令。例如,微處理器100可執行類似的動作,以使無需寫回高速緩衝數據(在方塊708和718)而執行一x86 INVD指令並簡單地使高速緩衝器失效。再舉另一例子來說,高速緩衝控制指令可由比x86架構更不相同的指令集架構得到。
電源管理操作
在微處理器100的核心102被配置用以執行各個功率減少的操作,例如,但不侷限於,停止執行指令、請求控制單元104停止傳送時脈信號至核心102、請求控制單元104由移除核心102的電源,寫回並使核心102的本地(例如,非共享)高速緩衝記憶體失效及儲存核心102的狀態至一外部記憶體,如專用隨機存取記憶體116。當一核心102已執行一或多個核心指定的功率減少操作時,其已進入一「核心」C-狀態(也被稱為一核心閒置狀態或核心睡眠狀態)。在一實施例中,C-狀態值可大致對應到已知高級配置和電源接口(Advanced Configuration and Power Interface,ACPI)規格處理器狀態,但也可包括更精細的粒度(Granularity)。一般而言,一核心102 將進入一核心C-狀態以回應來自上述操作系統的請求。舉例來說,x86架構監視等待(MWAIT)指令係一電源管理指令,其提供一提示,即一目標C-狀態,至執行指令的核心102以允許微處理器100進入一最佳化狀態,像是一較低功率耗損狀態。在一MWAIT指令的情況下,目標C-狀態是專屬的(proprietary)而非ACPI C-狀態。核心C-狀態0(C0)對應於核心102的運行狀態並且C-狀態逐漸增加的值對應逐漸減少的活動或回應狀態(如C1、C2、C3等狀態)。一逐漸減少的回應或活動狀態係指相對於一更多活動或回應狀態,一節省更多功率的配置或操作狀態,或由於某種原因而相對減少回應(例如,具有一較長的喚醒延遲、較少完全啟用)。一核心102可能節省功率操作的例子為停止指令的執行、停止傳送時脈信號、降低電壓、和/或從移除核心中部份(例如,功能單元和/或本地高速緩衝器)或整個核心的電源。
此外,微處理器100被配置用以執行跨核心的功率減少操作。跨核心功率減少操作牽連或影響微處理器100的多個核心102。舉例來說,共享高速緩衝記憶體119可以是大的且相對消耗大量的功率。因此,顯著的功率節省可藉由移除傳送至共享高速緩衝記憶體119的時脈信號和/或電源來達成。然而,為了移除至共享高速緩衝記憶體119的時脈信號和/或電源,所有共享高速緩衝記憶體的核心102必須同意以使數據的一致性得到維持。實施例考慮該微處理器100包括其他共享電源相關的資源,像是共享時脈和電源。在一實施例中,微處理器100被耦接至包括一記憶體控制器、外圍控制器和/或電源 管理控制器的系統晶片組。在其它實施例中,一或多個控制器被整合至微處理器100中。系統省電可由微處理器100通知控制器使控制器採取省電的動作來達成。舉例來說,微處理器100可以通知控制器使微處理器的高速緩衝記憶體失效並關閉,以使其無須被偵查。
除了一核心C-狀態的概念外,微處理器100一般來說具有一「封裝」的C-狀態(也被稱為一封裝閒置狀態或封裝睡眠狀態)。封裝C-狀態對應核心102的最低(例如,最高功率消耗)共同核心C-狀態(例如,請參閱,第2圖欄位246及第3圖的方塊318)。然而,除了核心特定的功率減少操作外,封裝C-狀態涉及到執行一或多個跨核心功率減少操作的微處理器100。與封裝C-狀態相關的跨核心省電操作例子包括關閉一產生時脈信號的鎖相迴路(Phase-locked-loop,PLL),並清空該共享高速緩衝記憶體119,且停止其時脈和/或電源,其使記憶體/外部控制器避免偵查微處理器100的本地共享高速緩衝記憶體。其他例子為改變電壓、頻率和/或匯流排時脈比、減少高速緩衝記憶體的大小,如共享高速緩衝記憶體119;並以一半的速度運行共享高速緩衝記憶體119。
在許多情況下,操作系統被有效地用以執行在單獨核心102中的指令,因此可令單獨核心進入睡眠狀態(例如,至一核心C-狀態),但不具有直接令微處理器100進入睡眠狀態(例如,至封裝C-狀態)的方式。有益地,在實施例中描述微處理器100的核心102在控制單元104的幫助下互相合作地工作,以偵測當所有核心102已進入核心C-狀態並準備使跨核心的省 電操作發生。
請參閱第9圖,其係顯示微處理器100進入一低功率封裝C-狀態的操作流程圖。第9圖的實施例描述微處理器100耦接至一晶片組並使用MWAIT指令執行的例子。然而,應可理解的是,在其他實施例中,操作系統採用其它電源管理指令以及主要核心102與整合至微處理器100內的控制器互相通訊,並使用一不同的握手(Handshake)協定來描述。
此操作是以一單一核心的角度來描述,但該微處理器100的每一核心102可能會遇到MWAIT指令並根據本說明書操作共同使微處理器100進入最佳狀態。流程開始於方塊902。
在方塊902中,一核心102遇到一用於指定目標C-狀態的MWAIT指令,在第9圖中標示為Cx,其中x是一非負整數值。流程進行到方塊904。
在方塊904中,核心102寫入一C位元224集合及一C-狀態欄位226值為x(在第9圖中標示為SYNC Cx)的同步請求至其同步暫存器108。此外,同步請求在其喚醒事件欄位204中指定核心102在所有喚醒事件中被喚醒。因此,控制單元104令核心102進入睡眠狀態。更佳地說,核心102在寫入SYNC Cx之前,核心102先寫回並使其寫入的本地高速緩衝記憶體失效。流程進行到方塊906。
在方塊906中,當所有核心102已寫入一SYNC Cx信號時,核心102被控制單元104喚醒。如上所述,由其他核心102寫入的x值可能不同,並且控制單元104發出最低常用C-狀 態值至狀態暫存器106狀態字242的最低常用C-狀態欄位246中(每一方塊318)。在方塊906之前,而核心102處於睡眠狀態時,其可由一喚醒事件所喚醒,像是一中斷信號(例如,方塊305和306)。更具體地說,但不保證該操作系統將執行所有核心102的MWAIT指令,其可允許在一喚醒事件發生(例如,中斷)指示核心102其中之一有效地取消MWAIT指令之前,微處理器100執行與封裝C-狀態相關的省電操作。然而,在方塊906中,一旦核心102被喚醒,在時脈中斷停用的期間內(例如,微碼不允許其本身被中斷),核心102(事實上,所有的核心102)由於(在方塊902中)的MWAIT指令仍執行微碼,並維持在微碼中,直到方塊924為止。換句話說,雖然所有核心102中少部份已接收MWAIT指令以進入睡眠狀態,單獨的核心102可處於睡眠狀態中,但作為一封裝的微處理器100不會指示該晶片集其已準備進入一封裝睡眠狀態;然而,一旦所有核心102已同意進入一封裝睡眠狀態,其係由在方塊906中同步情況的發生有效地指示,主要核心102被允許與晶片組完成一封裝睡眠狀態握手協定(例如,方塊908、909和以下921),且未被中斷及未有任何其他核心102被中斷。流程進行到判斷方塊907。
在判斷方塊907中,核心102判斷其是否為微處理器100的主要核心102。更佳地說,若判斷在重設時間其為BSP時,一核心102係為主要核心102。若該核心為主要核心時,流程前進到方塊908;否則,流程前進到方塊914。
在方塊908中,主要核心102寫回並使共享高速緩衝記憶體119失效,接著與可以採取適當行動以減少功率消耗 的該晶片集通訊。舉例來說,由於當微處理器100處於封裝C-狀態時,記憶體控制器和/或外部控制器皆維持失效,因此記憶體控制器和/或外部控制器可避免偵測微處理器100的本地和共享高速緩衝記憶體。舉另一例子說明,該晶片組可傳輸信號至微處理器100使微處理器100採取省電操作(例如,如下所述的確立x86-style STPCLK、SLP、DPSLP、NAP、VRDSLP信號)。更佳地說,核心102基於最低常用的C-狀態欄位246值進行功率管理資訊的通訊。在一實施例中,核心102發佈一I/O讀取匯流排週期至一提供晶片組相關的電源管理資訊,例如,封裝C-狀態值的I/O地址。流程進行到方塊909。
在方塊909中,主要核心102等待晶片組確立(assert)STPCLK信號。更佳地說,若STPCLK信號在一預定數亮的時脈週期後未被確立時,控制單元104在中止其正進行的同步請求後,偵測此情況,喚醒所有核心102並在錯誤碼欄位248中指示該錯誤。流程前進到方塊914。
在方塊914中,該核心102寫入一SYNC 14。在一實施例中,該同步請求在其喚醒事件欄位204中指定該核心102未在任何喚醒事件中被喚醒。因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊916。
在方塊916中,當所有核心102已寫了一SYNC 14時,核心102由控制單元104所喚醒。流程進行到判斷方塊919。
在判斷方塊919中,核心102判斷其是否為微處理器100的主要核心102。若是,則流程前進到方塊921;否則,流程前進到方塊924。
在方塊921中,主要核心102在微處理器100匯流排中發出一停止允許(grant)週期以通知該晶片組其可能採取跨核心、例如,封裝週邊、與微處理器100整體相關之省電操作,像是避免微處理器100高速緩衝記憶體的偵查、移除匯流排時脈(例如,86-型BCLK)至微處理器100,並確立其他在匯流排中的信號(例如,86-型SLP、DPSLP、NAP、VRDSLP),以使微處理器100移除時脈和/或電源至微處理器100的各個部分。雖然描述於本文中的實施例涉及到微處理器100及一與I/O讀取相關之晶片集間的一握手協定(在方塊908中),STPCLK的確立(在方塊909中),並停止允許週期的發佈(在方塊921中),其與x86基礎架構系統有歷史相關,應可理解的是,其他實施例假設與其他具有不同協定指令集基礎架構系統相關,但也可節省電能、提高性能和/或降低複雜度。流程進行到方塊924。
在方塊924中,核心102寫入一睡眠請求,例如,具有睡眠位元212為設置(set)及S位元222為清除(clear),至同步暫存器108。此外,同步請求在其喚醒事件欄位204指示核心102僅在STPCLK非確立喚醒事件中被喚醒。因此,控制單元104令核心102進入睡眠狀態。流程結束於方塊924。
請參閱第10圖,其係顯示根據第9圖流程圖微處理器100操作實施例之時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1及核心2,如圖所示;然而,應可理解的是,在其它實施例中,微處理器100可包括不同數量的核心102。
核心0遇到一指定C-狀態4的MWAIT指令(MWAIT C4)(每一方塊902)。核心0接著寫一SYNC C4並進入睡眠狀態(每一方塊904)。核心1遇到一指定C-狀態3的MWAIT指令(MWAIT C3)(每一方塊902)。核心1接著寫一SYNC C3並進入睡眠狀態(每一方塊904)。核心2遇到一指定C-狀態2的MWAIT指令(MWAIT C2)(每一方塊902)。核心2接著寫一SYNC C2並進入睡眠狀態(每一方塊904)。如圖所示,在每一核心寫入SYNC Cx的時間可能不同。事實上,在一些其他事件發生之前,像是一中斷,一或多個核心可能不會遇到一MWAIT指令。
當所有核心已經寫入SYNC Cx時,控制單元104同時喚醒所有核心(每一方塊906)。主要核心接著發出I/O讀取匯流排週期(每一方塊908),並等待STPCLK的確立(每方塊909)。所有的核心寫入一SYNC 14,並進入睡眠狀態(每一方塊914)。由於只有主要核心清空(Flush)共享高速緩衝記憶體119,發出I/O讀取匯流排週期並等待STPCLK確立,因此每一核心寫入SYNC 14的時間可能不同,如圖所示。事實上,主要核心在其他核心後可以幾百微秒的順序寫入SYNC 14。
當所有核心寫入SYNC 14時,控制單元104同時喚醒所有核心(每一方塊916)。僅一主要核心發出停止允許週期(Stop grant cycle)(每一方塊921)。所有核心寫入在STPCLK非確立信號中等待的一睡眠請求並進入睡眠狀態(每一方塊924)。由於僅主要核心發出停止允許週期,因此每一核心寫入睡眠請求的時間可能不同,如圖所示。
當STPCLK信號被確立時,控制單元104喚醒所有 核心。
由第10圖可觀察到,當核心0執行握手協定時,核心1和核心2有益地可休眠一段有效的時間。然而,應當注意的是,需將微處理器100從封裝睡眠狀態中喚醒所需的時間通常與休眠時間長度成正比(例如,在睡眠狀態時節省多大的功率)。因此,在封裝睡眠狀態相對較久的情況下(或者甚至其中一單獨的核心102睡眠狀態時間是較長的),希望能進一步減少喚醒的發生及/或與握手協定相關所需喚醒的時間。第11圖描述單一核心102處理的握手協定,而另一核心102繼續處於睡眠狀態的一實施例。此外,根據第11圖的實施例中,節省功率進一步可藉由降低回應一喚醒事件而被喚醒之核心102數量而取得。
請參閱第11圖,其係根據本發明另一實施例之微處理器100進入一低功率封裝C-狀態之操作流程圖。第11圖的實施例係使用微處理器100耦接至晶片組中MWAIT指令執行的例子進行說明。然而,應可理解的是,在其他實施例中,操作系統採用其它電源管理指令,並且最後同步的核心102與整合至微處理器100中,且採用與描述不同握手協定的控制器通訊。
第11圖的實施例在一些方面與第9圖的實施例相似。然而,在現存操作系統請求微處理器100進入非常低的功率狀態並容忍與其相關延遲的環境中,第11圖的實施例被設計以便於節省潛在更大的功率。更具體地,第11圖的實施例有利於控制至核心的功率並在必要時,如處理中斷時,喚醒核心中僅一核心。實施例考慮在該微處理器100支援在第9圖及第11圖 中兩個模式的操作。此外,模式係可配置,無論是在製造(例如,藉由熔斷器114)和/或經由軟體控制或由微處理器100依據由MWAIT指令所指定的特定C-狀態而自動決定。流程開始於方塊1102。
在方塊1102中,核心102遇到用於指定目標C-狀態的MWAIT指令(MWAIT Cx),其在第11圖中表示為Cx,流程進行到方塊1104。
在方塊1104中,核心102寫入一C位元224為set及一C-狀態欄位226值為x(其在第11圖中標示為SYNC Cx)的同步請求至其同步暫存器108中。同步請求也設置了選擇性喚醒(SEL WAKE)位元214及PG位元208。此外,同步請求在其喚醒事件欄位204中指示核心102在所有喚醒事件中被喚醒,除了STPCLK確立和STPCLK非確立之外(~STPCLK)。(更佳地說,有其他喚醒事件,如AP啟動時,該同步請求指定核心102不被喚醒)。因此,控制單元104令核心102進入睡眠狀態,其包括因PG位元208被設置而阻止提供功率至核心102。此外,核心102寫回及使本地高速緩衝記憶體無效,並在寫入同步請求之前儲存(最好為專用隨機存取記憶體116)其核心102之狀態。當隨後核心102被喚醒時(例如,在方塊1137,1132或1106),核心102將(例如,從PRAM116)恢復其狀態。如上所述,特別是相對於第3圖,當最後核心102寫入一具有選擇性喚醒位元214設置的同步請求時,除了最後寫入核心102外,該控制單元104會自動阻止所有核心102的所有喚醒事件(每一方塊326)。流程進行到方塊1106。
在方塊1106中,當所有核心102已經寫入一SYNC Cx時,控制單元104喚醒最後寫入的核心102。如上所述,控制單元104維持其他核心102的S位元222設置,即使控制單元104喚醒最後寫入的核心102並清除S位元。在方塊1106之前,當核心102處於睡眠狀態時,其可由一喚醒事件被喚醒,如一中斷。然而,一旦核心102在方塊1106中被喚醒時,核心102因MWAIT指令(方塊1102)仍執行微碼,並在中斷被停用的期間內(例如,該微碼不允許其本身被中斷)保持在微碼中,直到方塊1124為止。換句話說,雖然不超過所有核心102已收到一MWAIT指令以進入睡眠狀態,僅單獨的核心102會休眠,但作為封裝的微處理器100不指示該晶片組其已準備好進入一封裝睡眠狀態;然而,一旦所有核心102已同意進入一封裝睡眠狀態時,其藉由在方塊1106的同步狀態發生所指示,在方塊906中被喚醒的核心102(最後寫入的核心102,其造成同步情況發生)被允許與晶片組完成封裝睡眠狀態握手協定(例如,如下所示的方塊1108、1109和1121)而不會被中斷,且沒有任何其他的核心102被中斷。流程進行到方塊1108。
在方塊1108中,核心102寫回並使共享高速緩衝記憶體119失效,接著與晶片組通訊,其可能會採取適當的行動,以減少功率消耗。流程進行到方塊1109。
在方塊1109中,核心102等待晶片組以確立STPCLK信號。更佳地說,如果STPCLK信號在一時脈週期預定數量後未確立時,控制單元104偵測此情況,並在終止其正進行的同步請求後喚醒所有核心102,且在錯誤碼欄位248中指示 該錯誤。流程進行到方塊1121。
在方塊1121中,核心102發出一停止允許週期至匯流排上的晶片組。流程進行到方塊1124。
在方塊1124中,核心102寫入一睡眠請求,例如,具有睡眠位元212為設置(set)及S位元222為清除(clear)及PG位元208為設置(set),至同步暫存器108中。此外,同步請求在其喚醒事件欄位204中指定該核心102僅在STPCLK非確立的喚醒事件中被喚醒。因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊1132。
在方塊1132中,控制單元104偵測STPCLK非確立並喚醒核心102。應注意的是,先前控制單元104喚醒核心102,控制單元104也未限制電源至核心102。有益的是,在核心102是唯一正運作核心102的此要點中,其提供核心102機會以執行任何必須被執行的動作,而並無其他核心102正在運作。流程進行到方塊1134。
在方塊1134中,核心102寫入至控制單元104的一暫存器(圖未示出)中以解開在其對應同步暫存器108的喚醒事件欄位204中所指定每一其他核心102的喚醒事件。流程進行到方塊1136。
在方塊1136中,核心102處理任何正進行指定該核心102的喚醒事件。舉例來說,在一實施例中,包括微處理器100的系統允許有向(both directed)的中斷(例如,指向微處理器100一特定核心的中斷)和非向(non-directed)的中斷(例如,當微處理器100選擇時,可由微處理器100的任一核心102所處 理的中斷)。一非向中斷的例子通常被稱為一「低優先級中斷」。在一實施例中,微處理器100最好指向非向中斷至在方塊1132中STPCLK非確立中被喚醒單一核心102,由於它已被喚醒,並能處理該中斷以期望其它核心102不具有任何正進行的喚醒事件,因此可以繼續睡眠並限制電源。流程返回到方塊1104。
當喚醒事件在方塊1134中被解除時,除了在方塊1132中已被喚醒的核心102之外,如果核心102沒有指定的喚醒事件正在進行,則有利於核心102繼續處於睡眠狀態,並在每一方塊1104中限制電源。然而,當喚醒事件在方塊1134中被解除時,如果一指定的喚醒事件正由核心102處理中,則核心將不限制電源(un-power-gated),並由控制單元104喚醒。在此情況下,不同的流程開始於第11圖中的方塊1137。
在方塊1137中,在喚醒事件在方塊1134中被解除後,另一核心102(例如,除了在方塊1134中解除喚醒事件核心102之外的核心102)被喚醒。其他核心102處理任何正進行並指向其他核心102的喚醒事件,例如,處理一中斷。流程從方塊1137進行到方塊1104。
請參閱第12圖,其係顯示根據第11圖流程圖之微處理器100操作一例子的時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1和核心2,如圖所示;然而,應可理解的是,在其它實施例中,微處理器100可包括不同數量的核心102。
核心0遇到一指定C-狀態7的MWAIT指令(MWAIT C7)(每一方塊1102)。在此例子中,C-狀態7允許限制電源。 核心0接著寫入一選擇性喚醒位元214為設置(set)(如第12圖中所示之「SW」)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態及限制電源(每一方塊1104)。核心1遇到一指定C-狀態為7的MWAIT指令(每一方塊1102)。核心1接著寫入選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態及限制電源(每一方塊1104)。核心2遇到一指定C-狀態為7的MWAIT指令(每一方塊1102)。核心2接著寫入具有選擇性喚醒位元位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態及限制電源(每一方塊1104)。(然而,在描述於方塊314一最佳的實施例中,最後寫入的核心無法限制電源)。如圖所示,每一核心的寫入同SYNC C7的時間可能不同。
當最後寫入的核心寫入具有選擇性喚醒位元214為設置(set)的SYNC C7時,該控制單元104阻擋(block off)所有最後寫入核心的喚醒事件(每一方塊326),在第12圖的例子為核心2。此外,控制單元104僅喚醒最後寫入的核心(每一方塊1106),因其他核心持續睡眠且限制電源,而核心2與晶片組執行握手協定,因此可節省功率。核心2接著發出I/O讀取匯流排週期(每一方塊1108),並等待STPCLK的確立(每一方塊1109)。為了回應STPCLK,核心2發出停止允許週期(每一方塊1121),並寫入一具有在STPCLK非確立中等待PG位元208為設置(set)的睡眠請求並進入睡眠狀態及限制功率(每一方塊1124)。上述核心可以休眠並限制功率一段相對長的時間。
當STPCLK無法確立時,控制單元104僅喚醒核心2 (每一方塊1132)。在第12圖的例子中,該晶片組無法確立STPCLK以回應一非向中斷的接收,其轉發至微處理器100。微處理器100指示非向中斷至核心2,其因其他核心繼續處於睡眠狀態及限制電源而節省功率。核心解除其他核心(每一方塊1134)的喚醒事件並服務非向中斷(每一方塊1136)。核心2接著重新寫入一具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態且限制電源(每一方塊1104)。
當核心2寫入具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7時,由於其他核心的同步請求仍正在進行,例如,其他核心的S位元222並非由核心2喚醒所清除,因此該控制單元104阻擋(block off)除了核心2之外所有核心的喚醒事件,例如,最後寫入核心(每一方塊326)。此外,控制單元104僅喚醒核心102(每一方塊1106)。核心2接著發出I/O讀取匯流排週期(每一方塊1108),並等待STPCLK的確立(每一方塊1109)。為了回應STPCLK,核心2發出停止允許週期(每一方塊1121),並寫入一具有在STPCLK無法確立中等候之PG位元208為設置(set)的睡眠請求,並進入睡眠狀態且限制功率(每一方塊1124)。
當STPCLK無法確立時,控制單元104僅喚醒核心2(每一方塊1132)。在第12圖的例子中,STPCLK因其他非向中斷而被解除確立;因此,微處理器100指示該中斷至核心2,這可節省功率。核心2再解除其他核心的喚醒事件(每一方塊1134)並服務該非向中斷(每一方塊1136)。核心2接著再寫入一具有 選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態且限制功率(每一方塊1104)。
此週期可持續相當長的時間,即僅非向中斷被產生。第13圖係顯示一指示一除了最後寫入核心之外不同核心中斷處理的例子。
可藉由比較第10圖和第12圖知道,在第12圖中的實施例較為有利,一旦核心102開始進入睡眠狀態(在第12圖的例子中寫入SYNC C7之後),僅一核心102被再次喚醒以與晶片組執行握手協定,且其他核心102保持睡眠,若核心102處在一相當長的睡眠狀態下,則可為一顯著的優點。功率節省可能非常顯著,特別是在操作系統識別在系統中對於單一核心102處理工作負載非常小的情況下。
此外,有利的是,只要沒有喚醒事件被指示到其它核心102,則僅一核心102被喚醒(以提供服務非向事件,像是一低優先級中斷)。再來,若核心102係處於一相當長的睡眠狀態,則可能具有顯著的優勢。除了相對不頻繁的非向中斷,如USB中斷,尤其是在系統中不具有有效負載的情況下,功率節省可以是顯著的。更進一步地,即使一喚醒事件發生被指示到另一核心102時(例如,中斷操作系統指示至一單一核心102,像是操作系統定時器中斷),實施例可有利地動態切換單一核心102,其執行封裝睡眠狀態協定及服務非向喚醒事件,如第13圖所示,以便享有喚醒僅一單一核心102的好處。
請參閱第13圖,其係顯示根據第11圖流程圖之微處理器100操作一例子的時序圖。第13圖的例子在許多方面與 第12圖的例子相似;然而,在第一實例中STPCLK無法被確立的重點中,該中斷係一指向中斷至核心1(而不是第12圖例子中之一非向中斷)。因此,控制單元104喚醒核心2(每一方塊1132),並接著在喚醒事件由核心2解除(每一方塊1134)後喚醒核心1。核心2接著再寫入一具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態且限制功率(每一方塊1104)。
核心1服務定向中斷(每一區塊1137)。核心1接著再次寫入具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態且限制功率(每一方塊1104)在此例子中,核心2在核心1寫入SYNC C7前寫入其SYNC C7。因此,雖然核心0在其寫入初始SYNC C7時仍具有其S位元222set,但核心1當其被喚醒時S位元222仍被清除。因此,當核心2在解除喚醒事件後寫入SYNC C7時,並非最後核心寫入同步C7請求;相反地,核心1成為最後的核心寫同步C7請求。
當核心1寫入一具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7時,因核心0的同步請求仍正在進行,例如,其非由核心1及核心2的喚醒所清除,而核心2(在此例中)已寫入SYNC 14請求,所以該控制單元104阻擋除了核心1之外所有核心的喚醒事件,例如,最後寫入核心(每一方塊326)。此外,控制單元104僅喚醒核心1(每一方塊1106)。核心1接著發出I/O讀取匯流排週期(每一方塊1108),並等待STPCLK確立(每一方塊1109)。為了回應STPCLK,核心1發出停止允許週期(每一方塊1121),並寫入具有等待在 STPCLK無法確立中PG位元208為設置(set)的睡眠請求,並進入睡眠狀態且限制功率(每一方塊1124)。
當STPCLK被解除確立時,控制單元104僅喚醒核心1(每一方塊1132)。在第12圖的例子中,STPCLK由於一非向中斷而解除確立;因此,微處理器100指示非向中斷至核心1,其可節省功率。由核心1處理非向中斷的週期可持續相當長的時間,即,僅非向中斷被產生。在此種方式中,微處理器100可有利地藉由指示非向中斷至核心102使最近的中斷被指示以節省功率,其示於與切換至一不同核心相關第13圖的例子中。核心1再次解除其他核心的喚醒事件(每一方塊1134)並服務非向中斷(每一方塊1136)。核心1接著再次寫入一具有選擇性喚醒位元214為設置(set)及PG位元208為設置(set)的SYNC C7,並進入睡眠狀態且限制功率(每一方塊1104)。
應可理解的是,雖然電源管理指令為一x86 MWAIT指令的實施例已被描述,但其他同步請求被使用以執行電源管理指令的實施例可以被考慮。舉例來說,微處理器100可執行類似操作以回應由一組具有不同C-狀態相關的預設I/O埠口地址之讀取。在舉另一例子,功率管理指令可由與x86架構不同的指令集架構得到。
多核處理器的動態重新配置
微處理器100的每一核心102基於微處理器100每一核心102的配置產生配置相關的值。更佳地說,每一核心102的微碼產生、儲存並使用配置相關的值。實施例描述配置相關值的產生可以是動態且有益的,其描述如下。配置相關值的例 子包括,但不侷限於以下內容。
每一核心102產生一與上述第2圖相關的整體核心數量。與僅在核心102中駐留晶體406的核心102相關之核心102的本地核心數量256相比,整體核心數量係指與微處理器100所有核心102相關之整體核心102的核心數量。在一實施例中,核心102產生整體核心數量,其整體核心數量為核心102晶體數量258與每一晶體的核心102數量的乘積及其本地核心數量256的總和,如下所示:整體核心數量=(晶體數*每一晶體的核心數量)+本地核心數量。
每一核心102還產生一虛擬核心數量。該虛擬核心數量為整體核心數量減去具有一低於即時核心102的整體核心數量之整體核心數量的停用核心102數量。因此,在該微處理器100的所有核心102可用的情況下,整體核心數量與虛擬核心數量是相同的。然而,若一或多個核心102停用、有缺陷時,一核心102的虛擬核心數量可能不同於其整體核心數量。在一實施例中,每一核心102填入其虛擬核心數量至其對應的APIC ID暫存器的APIC ID欄位。然而,根據另一實施例(例如,第22圖和第23圖),則不屬於此種情況。此外,在一實施例中,操作系統可更新在APIC ID暫存器中的APIC ID。
每個核心102還產生一BSP旗標,其指示該核心102是否為BSP。在一實施例中,一般來說(例如,當在第23圖中「所有核心BSP」的功能停用時)一核心102指定本身為引導序列處理器(Bootstrap Processor,BSP)且每一其他核心102指定 其本身為一應用處理器(Application Processor,AP)。在重設之後,AP核心102進行初始化,接著進入睡眠狀態等待BSP通知開始讀取並執行指令。相反地,在AP核心102初始化之後,BSP核心102立即開始讀取並執行系統韌體的指令,例如,BIOS啟動碼,其用以初始化系統(例如,驗證系統記憶體及周邊設備是否正常工作並初始化和/或配置它們)並引導操作系統,例如,載入操作系統(例如,從磁碟中載入),並將控制轉移至操作系統。在引導操作系統之前,BSP決定系統配置(例如,核心102或邏輯處理器在系統中的數量),並將其儲存在記憶體中,以使操作系統可在系統配置啟動後讀取。在操作系統在被引導後,指示AP核心102開始讀取並執行操作系統指令。在一實施例中,一般來說(例如,當第22圖和第23圖中「修改BSP」和「所有核心的BSP」的功能,分別停用時),一核心102若其虛擬核心數量為0時,則指定本身為BSP,而所有其他核心102指定本身為一AP核心102。最佳地,一核心102填入其BSP旗標相關配置值至對應其APIC的APIC基底位址暫存器中的BSP旗標位元。根據一實施例中,如上所述,BSP為方塊907及919中的主要核心102,其執行第9圖的封裝睡眠狀態握手協定。
每一核心102更產生用於填入APIC基底暫存器的一APIC基值。APIC基底位址基於核心102的APIC ID而產生。在一實施例中,操作系統可更新在APIC基底位址暫存器中的APIC基底位址。
每一核心102還產生一晶體主要指示,其指示該核心102是否為包括該核心102之晶體406的主要核心102。
每一核心102還產生一晶片主要指示,其指示該核心102是否為包括即時核心102晶片的主要核心,其中假設該微處理器100被配置有晶片,其詳細描述如上。
每一核心102計算配置相關值並操作使用該配置相關值,使得包括微處理器100的系統正常運作。舉例來說,系統基於其相關的APIC ID指示中斷請求至核心102。APIC ID決定核心102應回應哪個中斷請求。更具體地說明,每一中斷請求包括一目地識別符,並且一核心102僅當目地識別符與核心102的APIC ID匹配時回應一中斷請求(或若該中斷請求識別符為一用以指示其為一請求所有核心102之特殊值)。在舉另一例子,每一核心102必須知道其是否為BSP,以使其執行初始BIOS碼並引導操作系統,且在一實施例中執行如第9圖所描述的封裝睡眠狀態握手協定。實施例描述如下(參閱第22和23圖),其中BSP旗標和APIC ID可因特定目的而由其正常的值中作修改,像是用於測試和/或調試。
請參閱第14圖,其係顯示微處理器100動態重新配置的流程圖。在第14圖的說明中,係以第4圖的多晶體微處理器100作為參考,其包括兩個晶體406和八個核心102。然而,應可理解的是,所描述的動態重新配置可使用具有不同配置的微處理器100,即具有多於兩個晶體或單個晶體,且多或少於八個核心102但至少兩個核心102。此操作係從一單一核心的角度所描述,但微處理器100的每一核心102根據該描述以整體動態地操作並重新配置該微處理器100。流程開始於方塊1402。
在方塊1402中,微處理器100被重置,且微處理器 100的硬體基於可用核心102的數量及駐留於核心104的晶體數量填入合適的值至每一核心102的配置暫存器112中。在一實施例中,本地核心數量256及晶體數量258被硬連線(hardwired)。如上所述,硬體可決定是否由熔斷器114燒斷或未燒斷的狀態啟用或停用一核心102。流程進行到方塊1404。
在方塊1404中,核心102由配置暫存器112中讀取配置字252。核心102接著基於在方塊1402中所讀取的配置字252值產生其相關值。在多晶體微處理器100配置的情況下,在方塊1404中所產生的配置相關值將不考慮其他晶體406的核心102;然而,在方塊1414及1424中(以及第15圖中方塊1524)所產生的配置相關值將考慮其他晶體406的核心102,如下所述。流程進行到方塊1406。
在方塊1406中,核心102使在本地配置暫存器112中之本地核心102的致能位元254值被傳播至遠端晶體406配置暫存器112對應的致能位元254。舉例來說,請參考第4圖的配置,一在晶體A 406A中的核心102使與在晶體A 406A(本地晶體)之配置暫存器112中核心A、B、C及D(本地核心)相關的致能位元254被傳播至與在晶體B 406B(遠端晶體)之配置暫存器112中核心A、B、C及D相關的致能位元254;相反地,一在晶體B 406B中的核心102使與在晶體B 406B(本地晶體)之配置暫存器112中核心E、F、G及H(本地核心)相關的致能位元254被傳播至與在晶體A 406A(遠端晶體)之配置暫存器112中核心E、F、G及H相關的致能位元254。在一實施例中,核心102藉由寫入本地配置暫存器112傳播至其他晶體406。更佳地 說,藉由核心102寫入至本地配置暫存器112使本地配置暫存器沒有發生改變,但會造成本地控制單元104傳播本地致能位元254值至遠端晶體406中。流程進行至方塊1408。
在方塊1408中,核心102寫入一同步情況8(在第8圖中標示為SYNC 8)的同步請求至其同步暫存器108中。因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊1412。
在方塊1412中,當在由核心集合欄位228指定的核心集合中所有可用核心102已寫入一SYNC 8時,控制單元104喚醒核心102。值得注意的是,在一多晶體406微處理器100配置的情況下,同步情況發生可為一多晶體同步情況發生。也就是說,控制單元104將等待以喚醒(或在核心102未設置睡眠位元212從而決定不睡眠的情況下中斷)核心102,直到在核心集合欄位228(其可以包括在晶體406中的核心102)寫入其同步請求為止。流程進行到方塊1414。
在方塊1414中,核心102再次讀取配置暫存器112並基於包括由遠端晶體所傳送致能位元254之正確值的配置字252新值產生其配置相關值,流程前進到判斷方塊1416。
在判斷方塊1416中,核心102決定其是否應停用其本身。在一實施例中,熔斷器114因該微碼在其重置處理中讀取(判斷方塊1416之前),以指示核心102應停用其本身而被燒斷,故核心102決定其需停用其本身。熔斷器114可在微處理器100的製造期間或之後被燒斷。在另一實施例中,更新的熔斷器114值可被掃描至保持暫存器中,如上所述,並且被掃描的值指示該核心102應被停用。第15圖係描述核心102由不同的方 式判斷其應被停止使用的另一實施例。若核心102決定其應被停用時,流程進行到方塊1417;否則,流程進行到方塊1418。
在方塊1417中,核心102寫入停用核心位元236以使其本身由可用核心102的列表中移除,例如,清除在配置暫存器112的配置字252中其對應的致能位元254。此後,核心102可防止其本身執行任何更多的指令,更佳地藉由設置一或多個位元來以關閉其時脈信號,並移除其電源。流程在方塊1417中結束。
在方塊1418中,核心102寫入一同步情況9(在第14圖中標示為SYNC 9)的同步請求至同步暫存器108中。因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊1422。
在方塊1422中,當所有啟用的核心102已寫入一SYNC 9時,核心102由控制單元104所喚醒。此外,在一多晶體406微處理器100配置的情況下,同步情況發生基於在配置暫存器112中的已更新值可能為一晶體同步情況發生。再者,當控制單元104決定一同步情況是否發生時,控制單元104將排除考慮在方塊1417中停用其本身的核心102。更詳細地說明,在一情況中,在未停用其本身的核心102在方塊1417中寫入同步暫存器108之前,所有其它核心102(除了停用其本身的核心102之外)寫入一SYNC 9,接著當未停用其本身的核心102在方塊1417中之停用核心位元設置寫入同步暫存器108時,控制單元104將偵測同步情況的發生(在方塊316中)。當控制單元104因停用核心102的致能位元254為清除的(clear)而決定同步情況已經發生時,控制單元104不再考慮停用核心102。也就是說, 由於所有啟用核心102,但不包括停用核心102,已經寫入SYNC 9,無論停用核心102是否已經寫入SYNC 9,因此控制單元104判斷同步情況已經發生。流程進行到方塊1424。
在方塊1424中,如果一核心102由另一核心102在方塊1417中的操作而被停用時,核心102再次讀取配置暫存器112,並且配置字252的新值反映了一停用核心102。核心102則根據配置字252的新值再次產生其配置相關值,其類似於在方塊1414中的方式。一停用核心的存在102可能會造成一些配置相關值不同於在方塊1414中所產生的新值。例如,如上所述,虛擬核心數量、APIC ID、BSP旗標、BSP基址、主要晶體主要晶片可因停用核心102的存在而改變。下一實施例中,在產生配置相關值後,核心102其中之一(例如,BSP)將微處理器100所有核心102整體的一些配置相關值寫入非核心專用隨機存取記憶體116,使其可隨後被所有核心102讀取。舉例來說,在一實施例中,整體的配置相關值由核心102讀取以執行一架構指令(例如,x86 CPUID指令),其指令請求微處理器100有關的整體資訊,像是微處理器100的核心102數量。流程進行到判斷方塊1426。
在方塊1426中,核心102移除重置並開始提取架構指令。流程結束於方塊1426。
請參閱第15圖,其係顯示根據另一實施例中微處理器100動態重新配置的流程圖。在第15圖的說明中,係以第4圖的多晶體微處理器100作為參考,其包括兩個晶體406和八個核心102。然而,應可理解的是,所描述的動態重新配置可使 用具有不同配置的微處理器100,即具有多於兩個晶體或單個晶體,且多或少於八個核心102但至少兩個核心102。此操作係從一單一核心的角度所描述,但微處理器100的每一核心102根據該描述以整體動態地操作並重新配置該微處理器100。更具體地說明,第15圖描述了一核心102遇到核心停用指令的操作,其流程開始於方塊1502,而另一核心102操作,其操作流程開始於方塊1532。
在方塊1502中,核心102其中之一遇到一用以指示核心102停用其本身的指令。在一實施例中,該指令為一x86 WRMSR指令。作為回應,核心102傳送一重新配置訊息至其他核心102並傳送其一核心間中斷信號。更佳地說,在時間中斷被停用的期間內(例如,該微碼不允許其自身被中斷),核心102阻止微碼以回應該指令以停用其本身(在方塊1502中),或回應該中斷(在方塊1532中),並維持在微碼中,直到方塊1526為止。流程由方塊1502進行到方塊1504。
在方塊1532中,其他核心102其中之一(例如,除了在方塊1502中遇到停用指令的核心102之外的核心)由於在方塊1502中所傳送的核心間中斷而被中斷並接收重新配置訊息。如上所述,雖然在方塊1532中的流程係由一單一核心102的角度所描述,但每一其他核心102(例如,並非在方塊1502中的核心102)在方塊1532中被中斷並接收該訊息且執行方塊1504至1526中的步驟。流程由方塊1532進行到方塊1504。
在方塊1504中,核心102寫入一同步請況10(在第15圖中標示為SYNC 10)的同步請求至其同步暫存器108中。 因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊1506。
在方塊1506中,當所有可用核心102已寫入一SYNC 10時,核心102由控制單元102所喚醒。值得注意的是,在一多晶體406微處理器100配置的情況下,同步情況發生可為一多晶體同步情況發生。也就是說,控制單元104將等待以喚醒(或在核心102尚未決定進入睡眠狀態的情況下中斷)核心102,直到在核心集合欄位228(其可以包括在晶體406中的核心102)所指定且可啟用(其係由致能位元所指示)的核心102寫入其同步請求為止。流程進行到判斷方塊1508。
在判斷方塊1508中,核心102判斷其是否為一在方塊1502中被指示以停用其本身的核心102。若是,流程進行到方塊1517;否則,流程進行到方塊1518。
在方塊1517中,核心102寫入停用核心位元236以使其本身由可用核心102的列表中移除,例如,清除在配置暫存器112的配置字252中其對應的致能位元254。此後,核心102可防止其本身執行任何更多的指令,更佳地藉由設置一或多個位元來以關閉其時脈信號,並移除其電源。流程在方塊1517中結束。
在方塊1518中,核心102寫入一同步情況11(在第15圖中標示為SYNC 11)的同步請求至同步暫存器108中。因此,控制單元104令核心102進入睡眠狀態。流程進行到方塊1522。
在方塊1522中,當所有啟用的核心102已寫入一 SYNC 11時,核心102由控制單元104所喚醒。此外,在一多晶體406微處理器100配置的情況下,同步情況發生基於在配置暫存器112中的已更新值可能為一多晶體同步情況發生。再者,當控制單元104決定一同步情況是否發生時,控制單元104將排除考慮在方塊1517中停用其本身的核心102。更詳細地說明,在一情況中,在未停用其本身的核心102在方塊1517中寫入同步暫存器108之前,所有其它核心102(除了停用其本身的核心102之外)寫入一SYNC 11,接著當因停用核心102的致能位元254為清除的(clear)而決定同步情況是否已經發生時,因控制單元104不再考慮停用核心102,因此當未停用其本身的核心102在方塊1517中寫入同步暫存器108時,控制單元104將偵測同步情況的發生(在方塊316中)(請參閱第16圖)。也就是說,由於所有啟用核心102已寫入一SYNC 11,無論停用核心102是否已寫入SYNC 11,控制單元104則判斷同步情況已經發生。流程進行到方塊1524。
在方塊1524中,核心102讀取配置暫存器112,其配置字252將反映在方塊1517中被停用的停用核心102。該核心102根據配置字252的新值接著產生其配置相關的值。更佳地說,在方塊1502中停用指令係由系統韌體(例如,BIOS設置)所執行,以及在核心102停用後,系統韌體執行系統的重新啟動,例如,在方塊1526中之後。在重新啟動期間內,微處理器100可以進行不同於在方塊1524中先前配置相關值產生的操作。舉例來說,在重新啟動期間內BSP可為一不同於產生配置相關值前之核心102。再舉另一例子說明,在引導操作系統之前由BSP 所決定與儲存至記憶體以使操作系統能讀取的該系統配置資訊(例如,在系統中核心102及邏輯處理器的數量)可不相同。舉另一例子說明,仍使用的核心102的APIC ID不同於產生配置相關值前的APIC ID,在此情況下,操作系統將指示中斷請求且核心102將回應不同於先前配置相關值產生的中斷請求。再舉另一例子說明,在方塊907及919中執行第9圖封裝睡眠狀態握手協定的主要核心102可為一不同於先前配置相關值產生的核心102。流程進行到判斷方塊1526。
在方塊1526中,核心102在方塊1526中被中斷之前恢復其執行的任務。流程結束於方塊1526。
在本文中所描述動態地重新配置微處理器100可用於在各種應用中。舉例來說,動態重新配置可在微處理器100的開發過程用於測試和/或模擬,和/或用於現場測試中。另外,一使用者可能想知道僅使用一核心102子集運行一特定的應用程序時系統的性能和/或功率消耗的總量。在一實施例中,在一核心102被停用時,其可使其時脈停止及/或移除電源,以使其基本上沒有消耗電源。此外,在高可靠性的系統中,每一核心102可週期性地檢查其它核心102及核心102所選擇的特定核心102是否發生故障,未故障的核心可停用故障的核心102並使剩餘的核心102執行如上描述的動態重新配置。在此一實施例中,控制字202可包括一附加欄位,其使寫入核心102指定該核心102被停用並且修改在第15圖中所描述的操作使得一核心在方塊1517中可停用一不同於核心102本身之核心102。
請參閱第16圖,其係顯示根據第15圖流程圖之微 處理器100操作一例子的時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1和核心2,如圖所示;然而,應可理解的是,在其它實施例中,微處理器100可包括不同數量的核心102且可為單一晶體或多晶體微處理器100。在此時序圖中,事件的時序向下前進。
核心1遇到一停用其本身的指令並作為回應傳送一重新配置訊息且中斷核心0和核心2(每一方塊1502)。核心1接著寫入SYNC 10並進入睡眠狀態(每一方塊1504)。
每一核心0和核心2最終從其目前的任務中被中斷並閱讀該訊息(每一方塊1532)。作為回應,每一核心0和核心2的寫入SYNC 10並進入睡眠狀態(每一方塊1504)。如圖所示,每一核心的寫入同SYNC 10的時間可能不同。舉例來說,由於該指令的延遲,因此該指令當中斷被確立時而執行。
當所有核心102寫入SYNC 10時,控制單元104同時喚醒所有核心(每一方塊1506)。核心0及核心2接著決定其不會停用其本身(每一判斷方塊1508),並寫入一SYNC 11並進入睡眠狀態(每一方塊1518)。然而,因核心1決定其停用其本身,所以其寫入其停用核心位元236(每一方塊1517)。在此例子中,核心1在核心1及核心2寫入各自的SYNC 11後寫入其停用核心位元236,如圖所示。然而,由於控制單元104決定S位元222對於每一致能位元254被設置的核心102而設置,因此控制單元104偵測該同步情況發生。也就是說,即使核心1的S位元222未設置,其致能位元254在方塊1517核心1的同步暫存器108寫入時被清除。
當所有可用核心已寫入SYNC 11時,控制單元104同時喚醒所有核心(每一方塊1522)。如上所述,在一個多晶體微處理器100的情況下,當核心1寫入其停用核心位236,並且本地控制單元104分別清除核心1的本地致能位元254,本地控制單元104也傳播本地致能位元254至遠端晶體406。因此,遠端控制單元104也偵測同步狀態的發生且同時喚醒其晶體406所有可用的核心。核心0和核心2基於已更新配置暫存器112的值接著產生其配置相關值(每一方塊1524),並恢復其中斷前的活動(每一方塊1526)。
硬體信號量(SEMAPHORE)
請參考第17圖,其係顯示在第1圖中硬體信號量118之一方塊圖。硬體信號量118包括一擁有位元(owned bit)1702、所有者位元(owner bit)1704及一狀態機器1706,其狀態機器1706用以更新擁有位元1702及所有者位元1704以回應由核心102讀取及寫入的硬體信號量118。更佳地說,為了辨識核心目前擁有的硬體信號量118,所有者位元1704的數量為log以2為底微處理器100配置的核心102數量。在另一實施例中,所有者位元1704包括微處理器100每一核心102一對應的位元。值得注意的是,儘管一組擁有位元1702、所有者位元1704及狀態機器1706被描述以一硬體信號量118實現,但微處理器100可包括複數硬體信號量118,其中每一硬體信號量118都包括上述的一套硬體。更佳地說,為了執行需要獨占讀取共享資源的操作,在每一核心102中運行的微碼讀取並寫入該硬體信號量118以取得一由核心102所共享資源的所有權,其詳細描述於下方 例子中。該微碼可將每一多個硬體信號量118與微處理器100不同的共享資源所有權聯繫在一起。更佳地說,硬體信號量118係藉由核心102在核心102的一非架構位址空間內一預設位址中所讀取及寫入。該非架構位址空間僅可由一核心102的微碼所讀取,但無法直接由使用者程式碼讀取(例如,x86架構的程序指令)。用以更新硬體信號量118的擁有位元1702及所有者位元1704的狀態機器1706操作被描述如第18及19圖中,並且硬體信號量118的使用也在之後描述。
請參閱第18圖,其係顯示當一核心102讀取硬體信號量118的操作流程圖。流程開始於方塊1802。
在方塊1802中,一核心102,標示為核心x,讀取硬體信號量118。如上所述,更佳地說,核心102的微碼讀取該硬體信號量118所駐留在非架構位址空間內的預定位址。流程進行到判斷方塊1804。
在判斷方塊1804中,狀態機器1706檢查該所有者位元1704,以決定核心102是否為硬體信號量118的所有者。若是,則流程進行到方塊1808;否則,流程進行到方塊1806。
在方塊1806中,該硬體信號量118返回並讀取核心102中之一零值以指示該核心102不擁有硬體信號量118,流程在方塊1806中結束。
在方塊1808,該硬體信號量118返回並讀取核心102中之一值,以指示該核心102擁有硬體信號量118,流程在方塊1808中結束。
如上所述,微處理器100可包括複數個硬體信號量 118。在一實施例中,微處理器100包括16個硬體信號量118,並且當一核心102讀取預定地址時,其接收一16位元數據值,其每一位元對應16個硬體信號量118其中之一不同的硬體信號量118,並指示該讀取預定位址的核心102是否擁有對應的硬體信號量118。
請參閱第19圖,其係顯示當一核心102寫入硬體信號量118的操作流程圖。流程開始於方塊1902。
在方塊1902中,一核心102,標示為核心x,寫入硬體信號量118,例如,如上所述之在非架構的預設位址。流程進行到判斷方塊1804。
在判斷方塊1904中,狀態機器1706檢查該擁有位元1702,以決定硬體信號量118是否為任一核心102所擁有或未被佔有(free)。若已被擁有,則流程進行到判斷方塊1914;否則,流程進行到判斷方塊1906。
在判斷方塊1906中,狀態機器1706檢查寫入的值。若該值為1,其表示核心102欲獲取硬體信號量118的所有權,則流程前進到方塊1908;然而,若該值為0,其表示核心102欲放棄硬體信號量118的所有權,則流程進行到方塊1912。
在方塊1908中,狀態機器1706更新擁有位元1702至1一核心,並設置所有者位元1704指示核心x現在擁有的硬體信號量118。流程在方塊1908中結束。
在方塊1912中,該狀態機器1706未執行擁有位元1702的更新,也未執行所有者位元1704的更新,流程結束於方塊1912中。
在判斷方塊1914中,狀態機器1706檢查該所有者位元1704,以決定核心x是否為硬體信號量118的所有者。若是,則流程進行到判斷方塊1916;否則,流程進行到方塊1912。
在判斷方塊1916中,狀態機器1706檢查所寫入的值。如果該值為1,其表示該核心102欲獲取硬體信號量118的所有權,則流程前進到方塊1912(其中因此核心102已擁有硬體信號量118,所以未有更新發生,如判斷方塊1914中所判斷);然而,若該值為0,其表示該核心102欲放棄硬體信號量118的所有權,則流程進行到方塊1918。
在方塊1918中,該狀態機器1706更新擁有位元1702為零,以表示現在未有核心102擁有硬體信號量118,流程結束於方塊1918。
如上所述,在一實施例中,微處理器100包括16個硬體信號量118。當一核心102寫入該預定地址時,其寫入一16位元數據值,其每一位元對應16個硬體信號量118其中之一不同的硬體信號量118,並指示該寫入預定位址的核心102是否請求擁有(值為1)或放棄對應硬體信號量118的所有權(值為零)。
在一實施例中,伸裁邏輯仲裁由核心102所請求存取該硬體信號量118,以使核心102由硬體信號量118序列化(Serialize)讀取/寫入硬體信號量118。在一實施例中,仲裁邏輯在核心102間使用一循環控制公平演算法(Round-Robin Fairness Algorithm)以存取硬體信號量118。
請參閱第20圖,其係顯示當微處理器100使用硬體 信號量118以執行需一資源獨占所有權的操作流程圖。更具體地說明,硬體信號量118係用以在兩或多個核心102已分別遇到一寫回且使共享高速緩衝記憶器119失效指令的情況下確保在某一時間僅一核心102執行一寫回,並使共享高速緩衝記憶器119失效。該操作係以一單一核心的角度所描述,但微處理器100的每一核心102根據本發明以整體確保一核心102執行寫回且使其他核心102的操作無效。也就是說,第20圖的操作確保WBINVD指令過程被序列化(Serialize)。在一實施例中,第20圖的操作可在一微處理器100中執行,其根據第7A~7B圖中的實施例執行一WBINVD指令。流程開始於方塊2002。
在方塊2002中,一核心102遇到一高速緩衝控制指令,像是一WBINVD指令。流程進行到方塊2004。
在方塊2004中,核心102寫入1至WBINVD硬體信號量118中。在一實施例中,該微碼已分配硬體信號量118其中之一至WBINVD操作中。該核心102接著讀取WBINVD硬體信號量118以決定其是否獲得所有權。流程進行到判斷方塊2006。
在判斷方塊2006中,若核心102決定其取得WBINVD硬體信號量118的所有權時,則流程進行到方塊2008;否則,流程返回至方塊2004以再次嘗試獲取所有權。應注意的是當即時核心102的微碼經由方塊2004至2006間循環,其最終會由擁有WBINVD硬體信號量118的核心102所中斷,因為該核心102正於第7A~7B圖中方塊702中執行WBINVD指令並且傳送一中斷至即時核心102。更佳地說,經由每次循環,即時核心102的微碼檢查中斷狀態暫存器,以觀察其他核心102其中之一 (例如,擁有該WBINVD硬體信號量118的核心102)是否發送一中斷至即時核心102。該即時核心102接著將執行第7A~7B圖的操作,並在方塊749中根據第20圖恢復操作以試圖獲得硬體信號量118的所有權,以執行其WBINVD指令。
在方塊2008中,核心102已獲得所有權且流程進行到第7A~7B圖中的方塊702以執行WBINVD指令。由於部分的WBINVD指令操作,在第7A~7B圖方塊748中,該核心102寫入零至WBINVD硬體信號量118中以放棄其所有權。流程結束於方塊2008。
一類似於第20圖所描述的操作可由該微碼執行,以獲得的其他共享資源獨占的所有權。一核心102可獲得藉由使用一硬體信號量118所使用之獨占所有權的其它資源為非核心103的暫存器,其係由核心102所共享。在一實施例中,非核心103暫存器包括一控制暫存器,其包括每一核心102各自的欄位。該欄位控制各個核心102的操作方面。由於欄位位於相同的暫存器中,當一核心102欲更新其各自的欄位但無法更新其他核心102的欄位時,該核心102必須讀取該控制暫存器、修改所讀取的值,接著寫回已修改的值至控制暫存器。舉例來說,微處理器100可以包括一非核心103性能控制暫存器(Performance Control Register,PCR),其用於控制核心102的匯流排時脈比。為了更新其匯流排時脈比,一特定的核心102必須讀取、修改並寫回PCR。因此,在一實施例中,微碼被配置以當核心102擁有與PCR相關的硬體信號量118時,執行一PCR的有效原子讀取/修改/寫回。匯流排時脈比經由一外部 匯流排決定單一核心102時脈頻率為該支援微處理器100的時脈頻率的倍數。
另一資源係一可信賴平台模組(Trusted Platform Module,TPM)。在一實施例中,微處理器100執行運作在核心102中微碼的一可信賴平台模組。在一給定的即時時間中,運行在一核心102及核心102其中之一的微碼係實施TPM;然而,實施TPM的核心102可能隨時間而改變。藉由使用與TPM相關聯的硬體信號量118,核心102的微碼可確保僅一核心102在一時間實施TPM。更具體地說明,目前正執行TPM的核心102在放棄實施該TPM之前寫入TPM狀態至專用隨機存取記憶體116,並且該接管實施TPM的核心102從專用隨機存取記憶體116中讀取TPM的狀態。在每一核心102的微碼被配置以使當核心102欲成為執行TPM的核心102時,核心102在由專用隨機存取記憶體116中讀取TPM狀態之前首先取得TPM硬體信號量118的所有權,並開始執行TPM。在一實施例中,TPM大致符合由可信賴運算組織(Trusted Computing Group)所發佈的TPM規範,像是ISO/IEC 11889規範。
如上所述,傳統對多個處理器之間資源競爭的解決方法係採用在系統記憶體中的軟體信號量(software semaphore)。本文所描述的硬體信號量118的潛在優點係其可避免在額外記憶體匯流排上額外傳輸量的產生,並且其存取速度快於存取系統的記憶體。
中斷、非睡眠同步請求
請參閱第21圖,其係顯示根據第3圖流程圖之核心 102發出非睡眠同步請求操作一例子的時序圖。在此例子中,微處理器100配置具有三個核心102,標示為核心0、核心1和核心2,如圖所示;然而,應可理解的是,在其它實施例中,該微處理器100可包括不同數量的核心102。
核心0寫入一SYNC 14,其不被設置於睡眠位元212中,也非設置於選擇性喚醒位元214(例如,一非睡眠同步請求)中。因此,控制單元104允許核心0保持運行(每一判斷方塊312的分支「否」)。
核心1最終也寫入一非睡眠SYNC 14且控制單元104允許核心1保持運行。最後,核心2寫入一非睡眠SYNC 14。如圖所示,每一核心寫入SYNC 14的時間可能不同。
當所有核心已寫入非睡眠同步14時,控制單元104同時發送一同步中斷至每一核心0、核心1及核心2。每一核心接著接收同步中斷並服務同步中斷(除非該同步中斷被遮蔽,在這種情況下,該微碼一般會輪詢(poll)該同步中斷)。
導引處理器的指定
在一實施例中,如上所述,通常(例如,當第23圖「所有核心BSP」的功能被停用時)一核心102指定本身為引導處理器(BSP)並執行指定的任務,像是引導工作系統。在一實施例中,通常(例如,當第22及23圖「修改BSP」及「所有核心BSP」的功能分別被停用時)虛擬核心的數量由核心102BSP預設為0。
然而,本發明人已經觀察到BSP以一不同的方式被指定有可能是有利的,實施例將在下面進行描述。例如,部分 微處理器100的許多測試,特別是在製造測試中,係由引導操作系統和運行程序碼來執行,以確保該部分微處理器100正常進行工作。因BSP核心102執行系統初始化並啟動該操作系統,因此BSP核心102可以AP核心無法運行的方式運行。此外,由觀察可知,即使是在多執行緒(Multithreaded)的操作環境中,BSP通常較AP負擔該處理負荷較大的部份;因此,AP核心102無法與BSP核心102一樣作全面的測試。最後,可能有某些動作其僅需由該BSP核心102代表微處理器100作為一整體來執行,像是如第9圖描述之封裝睡眠狀態握手協定。
因此,實施例描述任一核心102可被指定為BSP。在一實施例中,在微處理器100的測試期間內,運行測試N次,其中N為微處理器100核心102的數量,並在測試的每一個運行中微處理器100被重新配置以使BSP為不同的核心102。這在製造過程中可以有利地提供更好的測試覆蓋率,並且也有利地在微處理器100的設計過程中揭露在微處理器100中的錯誤。另一優點是在不同的運行中每一核心102可具有一不同的APIC ID,從而回應不同的中斷請求,其可提供更廣泛的測試覆蓋率。
請參閱第22圖,其係顯示配置微處理器100之一程序流程圖。在第22圖之描述係參考第4圖中之多晶體微處理器100,其包括兩個晶體406和八個核心102。然而,應可理解的是,描述於此的動態重新配置可使用具有不同配置的一微處理器100,即具有多於兩個晶體或單個晶體,且多或少於八個核心102但至少兩個核心102。此操作係從一單一核心的角度所描述,但微處理器100的每一核心102根據該描述以整體動態地操 作並重新配置該微處理器100。流程開始於方塊2202。
在方塊2202中,微處理器100被重置,並執行其初始化的初始部分,更佳地一方式其類似於上面第14圖所描述的方式。然而,配置相關值的產生,像是第14圖中的方塊1424,尤其是該APIC ID和BSP旗標,以方塊2203至2204中所描述的方式執行。流程進行到方塊2203。
在方塊2203中,核心102產生其虛擬核心數量,更佳地描述於第14圖中。流程進行到判斷方塊2204。
在判斷方塊2204中,核心102取樣一指示以決定一功能是否可啟用。該功能在本文中稱為「修改BSP」功能。在一實施例中,燒斷一熔斷器114可修改BSP的功能。更佳地說,在測試過程中,並非燒斷修改BSP功能的熔斷器114,而是一真值(True)被掃描至與修改BSP功能熔斷器114相關的保存暫存器位元中,如上述第1圖中所示,以使該修改BSP功能可啟用。在此方式中,該修改BSP功能在部份微處理器100中並非永久可啟用,但卻在供電(power-up)後停用。更佳地說,在方塊2203至2214中的操作由核心102的微碼所執行。若該修改BSP功能被啟用時,流程進行到方塊2205。否則,流程進行到方塊2206。
在方塊2205中,核心102修改在方塊2203中所產生的虛擬核心數量。在一實施例中,核心102修改虛擬核心數量以產生在方塊2203中所產生虛擬核心數量之一循環函數(Rotate function)的結果及一循環量,如下所示:虛擬核心數量=循環(循環量,虛擬核心數量)。循環函數,在一個實施例中,藉由循環數在核心102之間循環 虛擬核心數。循環量為燒斷熔斷器114的一值,或更佳地說,其在測試過程中被掃描至保持暫存器中。表格1係顯示每一核心102的虛擬核心數,其序對(晶體數量258、本地核心數量256)係顯示在一示範配置的左側行中,而每一循環量係顯示在頂行中,其晶體數量406為二且每一晶體406的核心102數量為4,以及所有核心102可被啟用。在此種方式中,測試器被授權使核心102產生其虛擬核心數、及像任何有效值的APIC ID。雖然用於修改虛擬核心數描述於的一實施例中,但其他實施例也可被預期。例如,循環方向可以相反表示於表格1中。流程進行到方塊2206。
在方塊2206中,核心102將在方塊2203中產生的預設虛擬核心數量或在方塊2203中產生的已修改的值填入本地APIC ID暫存器中。在一實施例中,APIC ID暫存器可由該核心102在記憶體位址0x0FEE00020中從其本身中讀取(例如,藉由 通過BIOS和/或操作系統);然而,在另一實施例中,APIC ID暫存器可藉由核心102在MSR位址0x802讀取。流程進行到判斷方塊2208。
在判斷方塊2208中,核心102決定其在方塊2208所填入之APIC ID是否為零。若是,則流程進行到方塊2212;否則,流程進行到方塊2214。
在方塊2212中,核心102將其BSP旗標設置為真(true),以表示核心102為BSP。在一實施例中,BSP旗標為該核心102之x86 APIC基址暫存器(IA32_APIC_BASE MSR)的一位元。流程進行到判斷方塊2216。
在方塊2214中,核心102將BSP旗標設置為假(false),以表示核心102不為BSP,例如,在一AP中。流程進行到判斷方塊2216。
在判斷方塊2216中,核心102判斷其是否為BSP,例如,是否指定本身為在方塊2212中的BSP核心102,而非指定本身為在方塊2214中的AP核心102。若是,則流程進行到方塊2218;否則,流程進行到方塊2222。
在方塊2218中,核心102開始提取並執行系統初始化韌體(例如,BSP BIOS引導程式碼)。這可包括與BSP旗標和APIC ID相關的指令,例如,讀取APIC ID暫存器或APIC基址暫存器的指令,在此情況下,核心102恢復在方塊2206及2212/2214寫入的值。其還可包括作為微處理器100唯一核心102代表微處理器100作為一整體以執行操作,像是第9圖描述的封裝睡眠狀態握手協定。更佳地說,BSP核心102在一已定義 架構重置向量中開始獲取並執行系統初始化韌體。例如,在x86架構中,重置向量係指向0xFFFFFFF0。更佳地說,執行系統初始化韌體係包括引導該操作系統,例如,載入該操作系統並轉變為控制操作系統。流程進行到方塊2224。
在方塊2222中,核心102中止其本身並等待來自BSP的啟動序列以開始提取並執行指令。在一實施例中,從BSP所接收的啟動序列包括到AP系統初始化韌體的一中斷向量(例如,AP BIOS程式碼)。這可包括與BSP旗標及APIC ID相關的指令,在此種情況下,核心102恢復在方塊2206及2212/2214中所寫入的值。流程進行到方塊2224。
在方塊2224中,當核心102執行指令時,該核心102基於在方塊2206中寫在其APIC ID暫存器的APIC ID接收中斷請求並回應該等中斷請求。流程結束於方塊2224。
如上所述,根據一實施例中,虛擬核心數為零的核心102預設為BSP。然而,發明人已經觀察到,可能具有對所有核心102被指定為BSP有利的情況,實施例將描述於下方。舉例來說,微處理器100開發人員已投入顯著大量的時間和成本來研發一設計用以在單一執行緒之一單核心中運行的龐大測試主體,並且開發人員想使用單核心測試以測試多核心微處理器100。例如,該測試可能在x86實際模式老舊且知名的DOS操作系統中運行。
在每一核心102運行這些測試可以在一使用第22圖中所描述的該修改BSP功能以連續的方式中完成及/或藉由燒斷熔斷器或掃描至保持暫存器修改熔斷器值以停用所有核 心102,但一核心102用來進行測試。然而,發明人已經理解這將比在所有核心102中同時運行測試需要更多的時間(例如,在一4核心微處理器100的情況下大約為4倍),此外,所需測試每一單獨微處理器100部分的時間是寶貴的,尤其是當製造數十萬或更多的微處理器100部分,特別是當許多測試在非常昂貴的測試設備中被測試。
此外,其它可能為當在同一時間運行一個以上的核心102(或所有核心102)時,由於其會產生更多的熱能及/或吸引更多的能量,在微處理器100邏輯中之一速度路徑將被施加更多壓力的情況。在此連續的方式中運行的測試可能不會產生額外的壓力並揭露該速度路徑。
因此,實施例描述所有核心102可被動態指定該BSP核心102以使所有核心102可同時執行一測試。
請參閱第23圖,其係顯示根據另一實施例中配置微處理器100之一程序流程圖。在第23圖之描述係參考第4圖中之多晶體微處理器100,其包括兩個晶體406和八個核心102。然而,應可理解的是,描述於此的動態重新配置可使用具有不同配置的一微處理器100,即具有多於兩個晶體或單個晶體,且多或少於八個核心102但至少兩個核心102。此操作係從一單一核心的角度所描述,但微處理器100的每一核心102根據該描述以整體動態地操作並重新配置該微處理器100。流程開始於方塊2302。
在方塊2302中,微處理器100被重置,並執行其初始化的初始部分,更佳地一方式其類似於上面第14圖所描述的 方式。然而,配置相關值的產生,像是第14圖中的方塊1424,尤其是該APIC ID和BSP旗標,以方塊2304至2312中所描述的方式執行。流程進行到判斷方塊2304。
在判斷方塊2304中,核心102偵測一功能可被啟用。該功能在本文中稱為「所有核心BSP」功能。更佳地說,燒斷熔斷器114能使所有核心BSP功能被啟用。更佳地說,在測試過程中,並非燒斷所有核心BSP功能的熔斷器114,而是一真值(True)被掃描至與所有核心BSP功能熔斷器114相關的保存暫存器位元中,如上述第1圖中所示,以使該所有核心BSP功能可啟用。在此方式中,該所有核心BSP功能在部份微處理器100中並非永久可啟用,但卻在供電(power-up)後停用。更佳地說,在方塊2304至2312中的操作由核心102的微碼所執行。若該所有核心BSP功能被啟用時,流程進行到方塊2305。否則,流程進行到第22圖中方塊2203。
在方塊2305中,無論本地核心數量256及核心102的晶體258數量為何,核心102設定其虛擬核心數量為零。流程進行到方塊2306。
在方塊2306中,核心102將在方塊2305中所設置值為零的虛擬核心數量填入本地APIC ID暫存器。流程進行到方塊2312。
在方塊2312中,無論本地核心數量256及核心102的晶體258數量為何,核心102設置其BSP旗標為真(True)以表示該核心102為BSP。流程進行至方塊2315。
在方塊2315中,每當一核心102執行一記憶體存取 請求時,微處理器100分別修改每一核心102記憶體存取請求位址較高位址位元,使得每一核心102存取其單獨的記憶體空間。也就是說,根據產生記憶體存取請求的核心102,微處理器100修改較高位址位元,以使較高位址位元具有每一核心102一獨特的值。在一實施例中,微處理器100修改由燒斷熔斷器114之值所指示的較高位址位元。在另一實施例中,微處理器100基於本地核心數量256及核心102的晶體數量258修改較高位址位元。舉例來說,在一微處理器100中核心數量為4的實施例中,微處理器100修改該記憶體位址較高的兩個位元,並在每一核心102較高的兩個位元中產生一獨特的值。實際上,可由微處理器100尋址的記憶體空間被分成N個子空間,其中N是核心102的數量。測試程式的開發使得其限制自己本身以指定在N個子空間中最低子空間的位址。例如,假設微處理器100能找尋記憶體64GB的位址以及微處理器100包括四個核心102。該測試被研發僅存取記憶體最低的8GB。當核心0執行存取記憶體位址A(在記憶體中較低的8GB)的指令時,微處理器100在記憶體匯流排A(未修改)中產生一位址;當核心1執行存取相同記憶體位址A的指令時,該微處理器100在記憶體匯流排A+8GB中產生一地址;當核心2執行存取相同記憶體位址A的指令時,該微處理器100在記憶體匯流排A+16GB中產生一位址;以及當核心3執行存取相同記憶體位址A的指令時,該微處理器100在記憶體匯流排A+32GB中產生一位址。在此種方式中,有利地,核心102將不會在其存取記憶體中相衝突,其可使測試正確地執行。更佳地說,單一執行緒測試被執行於一獨立測試 機器中,其能夠單獨測試該微處理器100。該微處理器100開發人員開發測試數據並由測試機器提供給該微處理器100;相反地,該微處理器100開發人員研發結果數據,其為由測試機器在一記憶體寫入存取期間內比較該微處理器100所寫入的數據結果,以確保該微處理器100寫入正確的數據。在一實施例中,共享高速緩衝記憶體119(例如,最高級高速緩衝記憶體,其產生用於外部匯流排處理中的位址)為微處理器100的一部分,其配置用以當所有核心BSP功能啟用時修改較高位址位元。流程進行到方塊2318。
在方塊2318中,核心102開始提取並執行系統初始化韌體(例如,BSP BIOS引導程式碼)。這可包括與該BSP旗標和APIC ID相關的指令,例如,讀取該APIC ID暫存器或APIC基址暫存器的指令,在此情況下,該核心102恢復在方塊2306中所寫入的零值。更佳地說,該BSP核心102在一架構定義的重置向量(Architecturally-defined reset vector)中開始讀取並執行系統初始化韌體。例如,在x86架構中,重置向量係指向0xFFFFFFF0位址。更佳地說,執行該系統初始化韌體包括引導操作系統,例如,載入該操作系統並且變更為控制該操作系統。流程進行到方塊2324。
在方塊2324中,當核心102執行指令時,該核心102基於在方塊2306中寫在其APIC ID暫存器值為零的APIC ID值接收中斷請求並回應該等中斷請求。流程結束於方塊2324。
雖然一所有核心102被指定為該BSP的實施例中已被描述於第23圖中,但其他實施例可以考慮多個但少於所有核 心102被指定為該BSP。
雖然實施例係以一x86型系統內容被描述,其系統中每一核心102使用一本地APIC且具有在本地APIC ID及BSP指定之間的一關聯性,應可理解的是,該引導處理器的指定並不侷限於x86的實施例,但可在具有不同系統架構的系統中使用。
用於多核心的微碼修補(PATCH)傳播
如先前所觀察,有可能主要由微處理器的微碼執行的許多重要的功能,且特別地,其需在執行於該微處理器多核心中的該微碼實例間正確的通訊及協調。由於微碼的複雜性,因此一顯著的機率顯示錯誤將存在於需修正的微碼中。這可經由使用新微碼指令取代造成該錯誤的舊微碼指令的微碼修補來完成。也就是說,該微處理器包括益於微碼修補的特定硬體。在一般情況下,理想是將該微修改應用到該微處理器的所有核心。傳統上,其已藉由在每一核心中單獨執行一架構指令以執行修補。然而,傳統的方法可能會有問題。
首先,該修補與使用微碼例子(例如,核心同步、硬體信號量使用)的核心間通訊相關或與需微碼核心間通訊的功能(例如,跨核心調整請求、高速緩衝控制操作或電源管理,或動態多核心微處理器配置)相關。分別在每一核心上架構修補應用程序的執行可能會產生一時間視窗,其微碼修補係應用到一些核心中但並非用應用到其他核心中(或一先前修補應用在一些核心以及新的修補應用到其他核心)。這可能會造成核心間一通訊失敗及該微處理器不正確的操作。如果該微處理器 的所有核心使用相同的微碼修補,其他可預期及不可預期的問題也可能產生。
其次,該微處理器的架構指定許多功能,其在某些實例(instance)中可由該微處理器所支援,且不被其他微處理器支援。在操作期間中,微處理器能夠與支援該特定功能的系統軟體進行通訊。例如,在一x86體系架構微處理器的情況下,x86 CPUID指令可由系統軟體執行以決定所支援的功能設置。然而,決定功能設置的指令(例如,CPUID)分別在該微處理器的每一核心中執行。在一些情況下,一功能可因一存在於該時間中的錯誤而被停用,並解除該微處理器。然而,隨後一修復此錯誤的微碼修補可被開發出,以使此功能可在修補應用後被啟用。然而,如果修補係以傳統的常規實施(例如,透過在每一核心中應用修補指令的個別指令,分別實施於每一核心),不同的核心可取決於該修補是否已經應用在核心中,在一給定的時間點指示不同的功能配置。這可能是有問題的,尤其是當該系統軟體(如操作系統,例如,幫助核心間執行緒遷移),期望該微處理器的所有核心具有相同的功能設置。尤其是,已觀察到一些系統軟體僅獲得一核心的功能配置,並假設其它核心芯具有相同的功能配置。
第三,每一核心控制和/或與核心所共享的非核心資源(例如,同步相關的硬體、硬體信號量、共享PRAM、共享高速緩衝器或服務處理單元)通訊的微碼實例。因此,由於在核心中其中之一具有使用微碼修補而其它核心並無使用(或兩個核心具有不同的微碼修補),一般來說,兩種不同核 心的微碼同時以兩種不同的方式進行控制或與非核心資源進行通訊可能是有問題的。
最後,在該微處理器的該微碼修補硬體也可以使用傳統方式的修補,但其可能造成其他核心修補應用及由一核心修補操作的干擾,例如,若修補硬體的部分在核心間共享。
更佳地說,在架構指令級以一原子(atomic)方式應用微碼修補至一多核微處理器的實施例以解決描述於本文中的問題。首先,將修補應用在整體微處理器100中以回應在單一核心102中一架構指令的執行。即,實施例無須要求系統軟體在每一核心102中執行一應用微碼修補指令(如下所描述)。更具體地說,遇到該應用微碼修補指令的單一核心102將傳送訊息並中斷其它核心102以引起其微碼用於修補部分的實例,及所有微碼實例與另一微碼合作使得該微碼修補應用至每一核心102的微碼修補軟體中,並當在所有核心102中停用中斷時,共享該微處理器100的修補硬體。其次,在所有核心102中運行並實現該原子修補應用機制的微碼實例與另一微碼相合作,以使其避免執行任一的架構指令(除了一應用微碼修補指令外)在該微處理器100的所有核心102已同意應用此修補後,直到所有核心102完成為止。也就是說,當任一核心102使用該微碼修補時,沒有核心102執行一架構指令。此外,在一更佳的實施例中,所有核心102到達該微碼相同的地方以執行具有停用中斷的修補應用,並在之後核心102僅執行用於修補的該微碼指令直到該微處理器100的所有核心確認該修補已被使用為止。也就是說,當該微處理器100的任一核心102正使用該修補時, 核心102除了使用微碼修補的微碼指令外,沒有核心102執行微碼指令。
請參照第24圖,其係顯示根據另一實施例之一多核心微處理器100的方塊圖。該微處理器100在許多方面相似於第1圖的微處理器100。然而,第24圖的微處理器100還包括在其非核心103中的服務處理單元(Service Processing Unit,SPU)2423、服務處理單元(SPU)起始位址暫存器2497、一非核心微碼唯讀記憶體(Read Only Memory,ROM)2425及一非核心微碼修補隨機存取記憶體(Random Access Memory,RAM)2408。此外,每一核心102包括一核心PRAM 2499、一修補可定址內容記憶體(Content Addressable Memory,CAM)2439及一核心微碼ROM 2404。
微碼包括微碼指令。該微碼指令為儲存在該微處理器100一或多個記憶體中的非架構指令(例如,非核心微碼ROM 2425、非核心微碼修補RAM 2408及/或核心微碼ROM 2404),其中該微碼指令係由一核心102基於儲存在該非架構微程式計數器(Micro-program Counter,Micro-PC)中一提取(fetch)位址所提取,並且由該核心102使用以實現該微處理器100指令集結構的指令。更佳地說,該微碼指令由一微轉譯器(Microtranslator)轉譯成微指令,其微指令由該核心102的執行單元所執行,或在另一實施例中,該微碼指令係直接由執行單元(在此情況下,微碼指令為微指令)所執行。該微碼指令為非架構指令意指其並非該微處理器100的指令集架構(Instruction Set Architecture,ISA)的指示,但其根據一不同於 該架構指令集的指令集而被編碼。該非架構微程式計數器不由該微處理器100的指令集架構所定義,並且不同於該核心102的架構定義(Architecturally-defined)程式計數器。該微碼用以實現如下該微處理器的ISA指令集的一些或所有指令。為了回應解碼一微碼執行ISA指令,該核心102轉變為控制一與該ISA相關的一微碼例行程序(Routine)。該微碼例行程序包括微碼指令。該執行單元執行該微碼指令,或根據較佳的實施例,該微碼指令進一步被轉譯為由該執行單元所執行的微指令。該微碼指令(或由該微碼指令所轉譯的微指令)由該執行單元所執行的執行結果為由該ISA指令所定義的結果。因此,與該ISA指令相關的微碼(或從該微碼例行程序指令轉譯的微指令)例行程序的共同執行係由該執行單元「實施(Implement)」該ISA指令;也就是說,藉由執行微碼指令(或從該微碼指令轉譯的微指令)的執行單元所執行的共同執行完成由在該ISA指令所指定的輸入中之該ISA指令所指定的操作,以產生一由該ISA指令所定義的結果。此外,當該微處理器為了配置該微處理器而重置時,該微碼指令可以被執行(或轉譯為被執行的微指令)。
該核心微碼ROM 2404擁有由包括該核心微碼ROM 2404的特定核心102所執行的微碼。該非核心微碼ROM 2425也擁有由該核心102所執行的微碼;然而,與核心微碼ROM 2404相比,該非核心ROM 2425係由核心102所共享。更佳地說,由於該非核心ROM 2425的存取時間大於該核心ROM 2404,因此該非核心ROM 2425擁有需較少性能及/或較不頻繁地執行的微碼例行程序。此外,該非核心ROM 2425擁有由該SPU 2423 所提取並執行的程式碼。
該非核心微碼修補RAM 2408也由核心102所共享。該非核心微碼修補RAM 2408擁有由核心102所執行的微碼指令。當該提取位址與該修補CAM 2439中項目(entry)其中之一的內容相匹配時,則該修補CAM 2439擁有為回應一微碼提取位址而由該修補CAM 2439所輸出至一微序列器(Microsequencer)的修補位址。在此情況下,該微序列器輸出該修補位址為該微碼提取位址,而非下一順序的提取指位址(或在分支型指令情況下的目標位址),以作為該非核心修補RAM 2408輸出一修補微碼指令的回覆。例如,因為修補微碼指令和/或在其之後的微碼指令為一錯誤來源,因此一修補微碼指令係由在非核心修補RAM 2408中提取實行,而非從該非核心ROM 2425或該核心ROM 2404中提取的一微碼指令。因此,該修補微碼指令有效地替換、或修補在該原始微碼提取位址中駐留在該核心ROM 2404或該非核心微碼ROM 2425非預期的微碼指令。更佳地說,該修補CAM 2439及修補RAM 2408被載入以回應包含在系統軟體中的架構指令,像是BIOS或在該微處理器100中運行的操作系統。
在其他事件中,該非核心PRAM 116被該微碼用以儲存該微碼所使用的值。這些值的一部分有效函數為常數。
除可能經由一修補或為回應一明確修改該值之指令,像是一WRMSR指令,的執行之外,當該微處理器100被重置且在該微處理器100的操作期間內不被修改時,由於其為儲存於該核心微碼ROM 2404或該非核心微碼ROM 2425的立即值 (immediate value)或在該微處理器100被製造或由該微碼寫入至該非核心PRAM 116的時間點燒斷該熔斷器114。有利的是,這些值可經由本文中所描述的修補機制而修改,無需改變成本可能非常昂貴的該核心微碼ROM 2404或該非核微碼ROM 2425,且也無需一或多個未燒斷的熔斷器114。
此外,該非核心PRAM 116係用以保存由該SPU 2423所提取並執行的修補碼,如本文所述。
該核心PRAM 2499,其類似於該非核心PRAM 116,為專用(private)的,或非架構的,其意指該核心PRAM 2499並不位於該微處理器100架構使用者程式位址空間中。然而,不像該非核心PRAM116,每一PRAM 2499僅由其各自的核心102所讀取且不由其他核心102所共享。像該非核心PRAM 116一樣,該核心PRAM 2499也由該微碼使用以儲存由該微碼所使用的值。有利的是,這些值可經由本文中所描述的修補機制而修改,並無需改變該核心微碼ROM 2404或非核微碼ROM 2425。
該SPU2423包括一已儲存程式處理器,其為一附屬且不同於每一核心102的附屬物(adjunct)。雖然該等核心102結構上可執行該等核心102之該ISA的指令(例如,x86的ISA指令),但該SPU 2423在結構上無法這樣做。因此,舉例來說,該操作系統無法在該SPU 2423中運行,也無法使該等核心102的ISA操作系統調度程式(例如,x86的ISA指令)在該SPU 2423中運行。換言之,該SPU 2423不為由該操作系統所管理的一系統資源。更確切地說,該SPU 2423執行用於調整該微處理器100的操作。此外,該SPU 2423可幫助測量該等核心102的性能及其 它功能。更佳地說,該SPU 2423比該等核心102較小、較不複雜並且更少的功率消耗(例如,在一實施例中,該SPU 2423包括內建的時脈門控(Clock Gating))。在一實施例中,SPU 2423包括一FORTH CPU核心。
可與由該等核心102所執行的除錯指令一起發生的非同步事件可能無法處理得很好。然而,有利的是,該SPU 2423可以由一核心102命令以偵測該事件,並執行操作,像是建立一紀錄檔(log)或修改該核心102各方面的行為和/或該微處理器100外部匯流排介面,以作為偵測此事件的回應。該SPU 2423可提供該紀錄檔資訊到該使用者,並且其也可以與追蹤器互動以請求該追蹤器提供該紀錄檔資訊或或請求胎追蹤器執行其它動作。在一實施例中,該SPU 2423具有存取以控制該記憶體子系統的暫存器及每一核心102的可編程中斷控制器,以及該共享高速緩衝暫存器119的控制暫存器。
該SPU 2423可偵測事件的例子包括如下:(1)一核心102正運作,例如,該核心102在一數量的時間週期中尚未退役(retire)可編程的任何指令;(2)一核心102載入由記憶體中一未高速緩衝區域內的數據;(3)在該微處理器100中溫度發生改變;(4)該操作系統請求在該微處理器100匯流排時脈比的一變化及/或請求在該微處理器100電壓水平的一變化;(5)符合本身的該微處理器100改變電壓水平和/或匯流排時脈比,例如,以達成省電及改善性能;(6)一核心102的一內部計時器逾時;(7)一高速緩衝窺探(snoop),其碰撞到一修改後的高速暫存行(Cache line),而導致該高速暫存行被寫回至記憶體中;(8)該 微處理器100的溫度、電壓、匯流排時脈比超出一各自的範圍;(9)一外部觸發信號在該微處理器100的一外部管腳(pin)中由一使用者所確立。
有利的是,因該SPU 2423獨立運行該等核心102的程式碼132,其不具有像是在該核心102中執行追蹤器微碼(tracer code)相同的限制。因此,該SPU 2423可偵測或被通知獨立於該核心102指令執行邊界的事件並且不中斷該核心102的狀態。
該SPU 2423具有其執行本身的程式碼。該SPU 2423可以從非核心微碼ROM 2425或從非該核心PRAM 116中提取其程式碼。即,更佳地說,該SPU 2423與該非核心ROM 2425和該非核心PRAM 116共享運行於該核心102中的微碼。該SPU 2423使用該非核心PRAM 116以儲存其數據,包括該紀錄檔。在一實施例中,該SPU 2423還包括其本身的序列埠口介面,其可傳送該紀錄檔至一外部裝置。有利的是,該SPU 2423也可指示在一核心102中運行的追蹤器以將該紀錄檔資訊由非核心PRAM 116儲存至系統記憶體中。
該SPU 2423藉由狀態及控制暫存器與該等核心102通訊。該SPU狀態暫存器包括對應描述於上方且該SPU 2423可偵測每一事件的一位元。為了通知該SPU 2423一事件,該核心102在對應該事件的SPU狀態暫存器中設置一位元。一些事件位元係由該微處理器100的硬體所設置以及一些由該等核心102的微碼所設置。該SPU 2423讀取該狀態暫存器以決定已發生的事件的列表。一控制暫存器包括對應每一操作的位元,其 每一操作為該SPU 2423應回應偵測在狀態暫存器中指定事件其中之一的一操作。也就是說,對於在該狀態暫存器每個可能的事件,一組操作位元存在於該控制暫存器中。在一實施例中,每一事件有16個動作位元。在一實施例中,當該狀態暫存器被寫入以指示一事件時,其會造成該SPU 2423中斷,以作為該SPU 2423讀取該狀態暫存器的回應,以決定哪些事件已經發生。有利的是,如此可藉由減少該SPU 2423輪詢該狀態暫存器的需求以節省電源。該狀態暫存器及控制暫存器也可由執行指令,像是RDMSR和WRMSR指令,的使用者程式讀取和寫入。
該SPU 2423可執行作為偵測一事件回應的該組操作包括以下各項。(1)將該紀錄檔資訊寫入該非核心PRAM 116。對於每一寫入紀錄檔的操作,多個的操作位元存在以使程式設計人員指定該僅特定紀錄檔資訊的子集應被寫入。(2)由該非核心PRAM 116中寫入該紀錄檔資訊至該序列埠口介面。(3)寫入控制暫存器其中之一以設定追蹤器的一事件。也就是說,該SPU 2423可中斷一核心102並導致該追蹤器微碼需執行一組與該事件相關的操作。該操作可藉由先前的使用者所指定。在一實施例中,當該SPU 2423寫入該控制暫存器以設置該事件時,這會造成該核心102一機器檢查異常,並且該機器檢查異常處理機檢查以查看追蹤器是否被啟動。若是,則機器檢查異常處理機轉換控制至該追蹤器。該追蹤器讀取該控制暫存器並且若設置在該控制暫存器中的事件為使用者已啟用該追蹤器的事件時,該追蹤器藉由與事件相關的使用者執行先前所描述的操作。例如,該SPU 2423可設置一事件以造成該追蹤器將儲存在非核心 PRAM 116中的紀錄檔資訊寫入系統記憶體中。(4)寫入一控制暫存器,以造成該微碼分支到由該SPU 2423所指定的一微碼位址。這是特別有助於如果該微碼係在一無限循環中,使得該追蹤器不能執行任何有意義的操作,但該核心102仍執行並退回(retire)該指令,其意指該處理器正執行的事件將不會發生。(5)寫入一控制暫存器以使一核心102重置。如上面所提到,該SPU 2423可偵測一正進行的核心102(例如,對一些時間可編程量而言,尚未退回(retire)任何指令)並重置該核心。該重置微碼會檢查以查看該重置是否由該SPU2423所發起,若是,在初始化該核心102的過程中,有助於在清除該紀錄賞資訊前寫出該紀錄檔資訊至系統記憶體中。(6)連續記錄檔事件。在此種模式下,並非等待一事件被中斷,而是該SPU 2423在一檢查該狀態暫存器的循環(loop)中旋轉(spin),並連續地記錄資訊至表示於此與事件相關的該非核心PRAM 116,且可選擇額外將該紀錄檔資訊寫入該序列埠口介面。(7)寫入一控制暫存器,以停止一核心102發出請求到該共享高速緩衝記憶體119,及/或停止該共享高速緩衝記憶體119確認請求至核心102。這在移除記憶體子系統相關的設計錯誤特別有用,像是頁面轉換表(tablewalk)硬體錯誤,甚至可在該微處理器100操作期間內修改該錯誤,像是透過一修補修改該SPU 2423程式碼,如下所述。(8)寫入到該微處理器100一外部匯流排介面控制器的控制暫存器,以執行在外部系統匯流排中的處理,像是特定的週期或記憶體讀取/寫入週期。(9)寫入至一核心102可編程中斷控制器的一控制暫存器,例如,產生一中斷到另一核心102或模擬一I/O裝置 到核心102或固定修復在該中斷控制器中的一錯誤。(10)寫入一該共享高速緩衝記憶體119的一控制暫存器以控制其大小,例如,以不同方式停用或啟用相關的共享高速緩衝記憶體119。(11)寫入核心102各種功能單元的控制暫存器以配置不同的性能特徵,像是分支預測(branch prediction)和數據預提取(prefetch)演算法。如下所述,該SPU 2423程式碼可有助於被修補,即使在完成該微處理器100的設計且已製造出該微處理器100之後,使該SPU 2423執行如本文所述的動作修補設計的缺陷或執行其它功能。
該SPU起始位址暫存器2497保持當該SPU 2423移除重置時,開始提取指令的該位址。該SPU起始位址暫存器由核心102寫入。該位址可位於非核心PRAM 116或非核心微碼ROM 2425中。
請參閱第25圖,其係顯示根據本發明一實施例一微碼修補2500的架構方塊圖。在第25圖的實施例中,該微碼修補2500包括下列部分:一標頭2502;一即時修補2504;該即時修補2504的校對和(Checksum)2506;一CAM數據2508;一核心PRAM修補2512;該CAM數據2508及核心PRAM修補2512的一校對和;一RAM修補2516、一非核心PRAM修補2518;及該核心PRAM修補2512及RAM修補2516的一校對和2522。校對和2506/2514/2522在被載入至該微處理器100之後,使該微處理器100核對修補各個部分的完整性。更佳地說,該微碼修補2500由系統記憶體和/或一非揮發性(Non-volatile)系統所讀取,舉例來說,像是從具有一系統BIOS或可擴展韌體的ROM或 FLASH記憶體中。標頭2502描述該修補2500的各部分,像是其大小、在其載入修補部份各自修補相關記憶體中之位置、及一指示該部分是否包含一應用於該微處理器100有效修補的一有效旗標。
該即時修補2504包括程式碼(例如,指令、較佳的微碼指令)以被載入至第24圖的非核心微碼修補RAM 2408(例如,在第26A~26B圖的方塊2612),接著由每一核心102所執行(例如,在第26A~26B圖的方塊2616)。該修補2500還指定該即時修補2504被載入至該修補RAM2408中的位址。更佳地說,該即時修補2504碼修改由該重置微碼所寫入的預設值,像是被寫入影響該微處理器100配置之配置暫存器的值。在即時修補2504由在該修補RAM2408外的每一核心所執行後,並不會再次被執行。此外,後續該RAM修補2516載入至該修補RAM 2408的過程(例如,在第26A~26B圖中的方塊2632)可能會覆蓋在該修補RAM 2408的即時修補2504。
該RAM修補2516包括用以取代在核心ROM 2404或需修補的非核心ROM 2425中的修補微碼指令。該RAM修補2516還包括在當該修補2500被使用時,該修補微碼指令被寫入至該修補RAM 2408中該位置的位址(例如,在第26A~26B圖的方塊2632)。該CAM數據2508被載入至每一核心102的該修補CAM 2439(例如,在第26A~26B圖的方塊2626)。以上係以該修補CAM 2439的操作角度所描述,該CAM數據2508包括一或多個項目,每一項目包括一對微碼提取位址。該第一位址係被提取的微碼指令以及由該提取位址匹配的內容。該第二位址 係指向在該修補RAM 2408中的位址,其該修補RAM 2408具有取代被修補微碼指令而被執行的該修補微碼指令。
不同於該即時修補2504,該RAM修補2516維持在該修補RAM 2408中,並(與根據修補CAM數據2508的該修補CAM 2439操作一起)繼續運作以修補該核心微碼ROM 2404和/或該非核心微碼ROM 2425,直到由另一修補2500或該微處理器100重置為止。
該核心PRAM修補2512包括被寫入至每一核心102之該核心PRAM 2499的數據及在該數據每一項目被寫入該核心PRAM 2499內的位址(例如,在第26A~26B圖的方塊2626)。該非核心PRAM修補2518包括被寫入至該非核心PRAM 116的數據及在該數據每一項目被寫入該非核心PRAM 116內的位址(例如,在第26A~26B圖的方塊2632)。
請參閱第26A~26B圖,其係顯示第24圖中該微處理器100之一操作以傳播第25圖的一微碼修補2500至該微處理器100之多個核心102的一流程圖。該操作係以一單一和新的角度所描述,但該微處理器100每一核心102根據本發明操作以共同傳播該微碼修補至該微處理器100的所有核心102。第26A~26B圖係描述一遇到該指令的核心使用一修改至該微碼的操作,其流程開始於方塊2602,而其他核心102的操作,其流程開始於方塊2652。應可理解的是,多個修補2500可在該微處理器100操作期間內的不同時間中應用至該微處理器100。例如一第一修補2500當包括該微處理器100的該系統被引導時,像是在BIOS初始化期間內,根據描述於本文中原子的實施例而被使用, 以及一第二修補2500在該操作系統運行後而被使用,其對以清除該處理器100錯誤的目的而言特別有用。
在方塊2602中,核心102其中之一遇到一指示其應用該微碼修補在該微處理器100中的指令。更佳地說,該微碼修補類似於上面所述的微碼修補。在一實施例中,該應用微碼修補指令係一x86 WRMSR指令。以回應該應用微碼修補指令,該核心102停用中斷並阻止執行該應用微碼修補指令的微碼。應可理解的是,包括該應用微碼修補指令的該系統軟體可包括一多指令序列,以作為該微碼修補應用的準備;然而,更佳地說,其作為該序列單一架構指令的回應,而該微碼修補在該架構指令級中以一原子方式被傳播至所有核心。也就是說,一旦中斷在該第一核心102中被停用(例如,在方塊2602中,該核心102遇到該應用微碼修補指令),當執行的微碼傳播該微碼修補且應用至該微處理器100所有核心102時(例如,直到在方塊2652後為止),中斷仍維持停用;再者,一旦在其他核心102中被停用(例如,在方塊2652),其仍被停用直到該微碼修補已被應用到該微處理器100所有核心102中為止(例如,直到方塊2634後為止)。因此,有利的是,該微碼修補在該架構指令級以一原子方式被傳播並應用於該微處理器100的所有核心102中。流程進行到方塊2604。
在方塊2604中,該核心102獲得第1圖中該硬體信號量118的所有權。更佳地說,該微處理器100包括一與修補微碼相關的硬體信號量118。更佳地說,該核心102以一方式獲得硬體信號量118的所有權,其方式類似上方第20圖所描述,更 具體地說為方塊2004和2006。該硬體信號量118被使用由於有可能核心102其中之一使用一修補2500以作為遇到一應用微碼修補指令的回應,而一第二核心102遇到一應用微碼修補指令,以作為該第二核心將開始使用該第二修補2500,其可能會造成不正確的執行,舉例來說,由於該第一修補2500的誤用。流程進行到方塊2606。
在方塊2606中,該核心102傳送一修補訊息至其他核心102並且傳送其他核心102一核心間中斷。更佳地說,該核心102在時間中斷被停用的期間內(例如,該微碼不允許其本身被中斷)阻止該微碼以回應該應用微碼修補指令(方塊2602),或回應該中斷(方塊2652),並保持該微碼中,直到方塊2634為止。流程由方塊2606進行到方塊2608。
在方塊2652中,其他核心102之一(例如,在方塊2602中除了遇到該應用微碼修補指令的該核心102之外的一核心)被中斷並且因在方塊2606中所傳送的該核心間中斷而接收該修補訊息。在一實施例中,該核心102在下一架構指令邊界中(例如,在下一x86指令邊界中)取得該中斷。為了回應該中斷,該核心102停用中斷且阻止處理該修補訊息的微碼。如上所述,雖然在方塊2652中的流程係以一單一核心102的角度所描述,但每一其他核心102(例如,沒在方塊2602中的核心102)在方塊2652中被中斷並接收該訊息,且執行在方塊2608至方塊2634的步驟。流程由方塊2652進行到方塊2608。
在方塊2608中,該核心102寫入一同步情況21的同步請求(在第26A~26B圖中標示為SYNC 21)至其同步暫存器 108中,並由該控制單元104令該核心102進入睡眠狀態,並隨後當所有核心102已寫入SYNC 21時,由該控制單元104喚醒。流程進行到判斷方塊2611。
在判斷方塊2611中,該核心102判斷其是否為遇見在方塊2602中該微碼修補的核心102(與在方塊2652中接收該修補訊息的一核心102相比較)。若是,則流程進行到方塊2612;否則,流程進行到方塊2614。
在方塊2612中,該核心102將該微碼修補2500即時修補2504的一部分載入至該非核心修補RAM 2408。此外,該核心102產生該載入即時修補2504之一檢查和並驗證其與該檢查和2506相匹配。更佳地說,該核心102也傳送資訊至其它核心102,其指示該即時修補2504的長度及該即時修補2504被載入在非核心修補RAM 2408內的位置。有利的是,因所有核心102已知執行實行該微碼修補應用的相同微碼,因此當一先前RAM修補2516存在於該非核心修補RAM 2408時,則由於在這段期間內(假設實行於該微碼修補應用的微碼並不被修補)在該修補CAM 2439中將不具有碰撞(hit),故使用該新修補覆蓋該非核心修補RAM 2408是安全的。在另一實施例中,該核心102將該即時修補2504載入到該非核心PRAM 116,並在方塊2616中的該即時修補2504執行之前,核心102將該立即修補2504從該非核心PRAM 116複製到該非核心修補RAM 2408。更佳地說,該核心102將該立即修補載入至被保留用於此目的的該非核心PRAM 116的一部分,例如,不被用於其它目的之該非核心PRAM 116的一部分,像是持有由該微碼所使用的值(例 如,如上所述之核心102狀態、TPM狀態、或有效微碼常數),並且該非核心PRAM 116的一部分可以被修補(例如,在方塊2632),以使任一先前非核心PRAM修補2518不被破壞(clobber)。在一實施例中,載入該非核心PRAM 116或由該非核心PRAM 116所複製之動作在多個階段中執行,以減少該已保留部份所需的大小。流程進行到方塊2614。
在方塊2614中,該核心102寫入一同步情況22(在第26A~26B圖中標示為SYNC 22)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 22時,由控制單元104所喚醒。流程進行到方塊2616。
在方塊2616中,該核心102執行該非核心修補RAM 2408中該即時修補2504。如上所述,在一實施例中,在該核心102執行該即時修補2504之前,該核心102將該即時修補2504由該非核心修補RAM 116複製至該非核心修補RAM 2408。流程進行至方塊2618。
在方塊2618中,該核心102寫入一同步情況23(在第26A~26B圖中標示為SYNC 23)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 23時,由控制單元104所喚醒。流程進行到判斷方塊2621。
在判斷方塊2621中,該核心102決定該核心102是否為遇到在方塊2602中的該應用微碼修補指令的核心102(與在方塊2652中接收該修補訊息的一核心102相比較)。若是,則 流程進行到方塊2622;否則,流程進行到方塊2624。
在方塊2622中,該核心102將該CAM數據2508及核心PRAM修補2512載入至該非核心PRAM 116。此外,該核心102產生該載入CAM數據2508及核心PRAM修補2512之一檢查和並驗證其與該檢查和2514相匹配。更佳地說,該核心102也傳送資訊至其它核心102,其指示該CAM數據2508及核心PRAM修補2512的長度,以及該CAM數據2508及核心PRAM修補2512被載入在非核心PRAM 116內的位置。更佳地說,該核心102將該CAM數據2508及核心PRAM修補2512載入至該非核心PRAM 116的一已保留部份,以使任一先前非核心PRAM修補2518不被破壞(clobber),其類似於方塊2612中所描述的方式。流程前進至方塊2624。
在方塊2624中,該核心102寫入一同步情況24(在第26A~26B圖中標示為SYNC 24)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 24時,由控制單元104所喚醒。流程進行到方塊2626。
在方塊2626中,該核心102將該CAM數據2508由該非核心PRAM 116載入至其修補CAM 2439。此外,該核心102將該核心PRAM修補2512由該非核心PRAM 116載入至其核心PRAM 2499。有利的是,由於所有核心已知正執行實行於該微碼修補應用中相同的微碼,即使該對應RAM修補2516尚未被寫入該非核心修補RAM 2408(其將在方塊2632中發生),由於在這段期間內(假設實行於該微碼修補應用的微碼並不被修補) 在該修補CAM 2439中將不具有碰撞(hit),故使用該CAM數據2508載入該修補CAM 2439是安全的。此外,由於所有核心102已知正執行實行於該微碼修補應用中相同的微碼,並且中斷將不在任一核心102中使用直到該修補2500被傳播至所有核心102為止,因此由該核心PRAM修補2512所執行至該核心PRAM 2499的任一更新,其包括用以改變可能影響該核心102操作之值的更新(例如,功能設置),保證不會在架構中看見,直到該修補2500已被傳播到所有核心102為止。流程進行到方塊2628。
在方塊2628中,該核心102寫入一同步情況25(在第26A~26B圖中標示為SYNC 25)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 25時,由控制單元104所喚醒。流程進行到判斷方塊2631。
在判斷方塊2631中,該核心102決定該核心102是否為遇到在方塊2602中的該應用微碼修補指令的核心102(與在方塊2652中接收該修補訊息的一核心102相比較)。若是,則流程進行到方塊2632;否則,流程進行到方塊2634。
在方塊2622中,該核心102載入該RAM修補2516至該非核心修補RAM 2408。此外,該核心102載入該非核心PRAM修補2518至該非核心PRAM 116。在一實施例中,該非核心PRAM修補2518包括由該SPU2423所執行的程式碼。在一實施例中,該非核心PRAM修補2518包括該微碼所使用值的更新,如上所述。在一實施例中,該非核心PRAM修補2518包括該SPU 2423程式碼以及該微碼所使用值的更新。有利的是,由於所有核心102已知正執行實行於該微碼修補應用中相同的微碼,更具體地說,所有核心102的該修補CAM 2439已被載入該新CAM數據2508(例如,在方塊2626中),以及在這段期間內(假設實行於該微碼修補應用的微碼並不被修補)在該修補CAM 2439中將不具有碰撞(hit)。此外,由於所有核心102已知正執行實行於該微碼修補應用中相同的微碼,並且中斷將不在任一核心102中使用直到該修補2500被傳播至所有核心102為止,由該非核心PRAM修補2518所執行至該非核心PRAM 116的任一更新,包括用以改變可能影響該核心102操作之值的更新(例如,功能設置),保證不會在架構中看見,直到該修補2500已被傳播到所有核心102為止。流程進行到方塊2634。
在方塊2634中,該核心102寫入一同步情況26(在第26A~26B圖中標示為SYNC 26)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 26時,由控制單元104所喚醒。流程結束於方塊2634。
在方塊2634之後,如果程式碼被載入至用於該SPU 2423的該非核心PRAM 116時,該修補核心102也接著開始執行該程式碼,如第30圖所述。此外,在方塊2634後,該修補核心102釋放在方塊2634中所取得的硬體信號量118。更進一步地說,在方塊2634之後,該核心102重新啟動上述中斷。
請參閱第27圖,其係顯示根據第26A~26B圖流程圖之一微處理器操作之一例子的時序圖。在此例子中,一微處理 器100配置具有三個核心102,標示為核心0、核心1和核心2,如圖所示;然而,應可理解的是,在其它實施例中,該微處理器100可包括不同數量的核心102。在此時序圖中,事件進行的時序如下方所述。
核心0接收到一請求修補微碼的請求(每一方塊2602)並以回應取得該硬體信號量118(每一方塊2604)。核心0接著傳送一微碼修補訊息及中斷至核心1及核心2(每一方塊2606)。核心0接著寫入一SYNC 21並進入睡眠狀態(每一方塊2608)。
每一核心1及核心2最終由其目前的任務中被中斷並讀取該訊息(每一方塊2652)。對此,每一核心1及核心2寫入一SYNC 21並並進入睡眠狀態(每一方塊2608)。如圖所示,例如,由於當該中斷被確立時,正執行該指令延遲的因素,每一核心寫入SYNC 21的時間可能不同。
當所有核心已寫入SYNC 21時,該控制單元104同時將所有核心喚醒(每一方塊2608)。核心0接著將該即時修補2504載入至該非核心PRAM 116(每一方塊2612),並寫入一SYNC 22,並進入睡眠狀態(每一方塊2614)。每一核心1及核心2寫入一SYNC 22,並進入睡眠狀態(每一方塊2614)。
當所有核心已寫入該SYNC 22時,該控制單元104同時將所有核心喚醒(每一方塊2614)。每一核心執行該即時修補2504(每一方塊2616)並寫入一SYNC 23,且進入睡眠狀態(每一方塊2618)。
當所有核心已寫入該SYNC 23時,該控制單元104 同時將所有核心喚醒(每一方塊2618)。核心0接著將該CAM數據2508及核心PRAM修補2512載入至非核心PRAM 116(每一方塊2622),並寫入一SYNC 24,且進入睡眠狀態(每一方塊2624)。
當所有核心已寫入該SYNC 24時,該控制單元104同時將所有核心喚醒(每一方塊2624)。每一核心接著使用該CAM數據2508載入其修補CAM 2439,並使用該核心PRAM修補2512(每一方塊2626)載入其核心PRAM 2499,且寫入一SYNC 25,並進入睡眠狀態(每一方塊2628)。
當所有核心已寫入該SYNC 25時,該控制單元104同時將所有核心喚醒(每一方塊2628)。核心0接著將該RAM修補2516載入至該非核心修補RAM 2408,並將該非核心PRAM修補2518載入至該非核心PRAM 116,以及寫入一SYNC 26,並進入睡眠狀態(每一方塊2634)。
當所有核心已寫入該SYNC 26時,該控制單元104同時將所有核心喚醒(每一方塊2634)。如上所述,若程式碼已被載入至用於該SPU 2423中的該非核心PRAM 116以方塊2632之步驟時,該核心102也接著開始執行該程式碼,如以下第30圖所描述。
請參照第28圖,其係顯示根據另一實施例之一多核心微處理器100的方塊圖。該微處理器100在許多方面相似於第24圖的微處理器100。然而,第28圖的微處理器100未包括一非核心修補RAM,但包括一核心修補RAM 2808在每一核心102中,其提供與第24圖該非核心修補RAM 2408類似的功能;然 而,在每一核心102中的核心修補RAM 2808由其各自核心102所專用並且不與其他核心102所共享。
請參閱第29A~29B圖,其係顯示根據另一實施例之第28圖中該微處理器100用以傳播一微碼修補至該微處理器100之多個核心102的一操作流程圖。在第28圖及第29A~29B圖的另一實施例中,第25圖的修補2500可以被修改,使得該校對和2514係採用該RAM修補2516,而非採用該核心PRAM修補2512,並在該CAM數據2508的完整性、該核心PRAM修補2512及該RAM修補2516載入該微處理器100(例如,在第29A~29B圖中之方塊2922)後,啟用該微處理器100來驗證該CAM數據2508的完整性、該核心PRAM修補2512及該RAM修補2516。第29A~29B圖的流程圖在許多方面類似於第26A~26B圖的流程圖,且同樣編號之方塊也相似。然而,方塊2912替換方塊2612、方塊2916替換方塊2616、以及方塊2922替換方塊2622、方塊2926替換方塊2626、以及方塊2932替換方塊2632。在方塊2912中,該核心102將該即時修補2504載入至該非核心PRAM 116(而非載入至一非核心修補RAM)。在方塊2916中,該核心102在執行該即時修補2504之前,將該即時修補2504從非核心PRAM 116複製到該核心修補RAM 2808。在方塊2922中,除了該CAM數據2508及該核心PRAM修補2512之外,該核心102將該RAM修補2516載入至該非核心PRAM 116。在方塊2926中,該核心102除了將該CAM數據2508由該非核心PRAM 116載入至其修補CAM 2439及將該核心PRAM修補2512由該非核心PRAM 116載入至其核心PRAM2499之外,該核心102更將該RAM修補2516從該非 核心PRAM 116載入至其修補RAM 2808。在方塊2932中,不同於第26A~26B圖的方塊2632,該核心,該核心102不將該RAM修補2516載入至一非核心修補RAM。
可由上述實施例中觀察,益於傳播至該微處理器100核心102每一相關記憶體2439/2499/2808及至相關非核心記憶體2408/116的該微碼修補2500的原子傳播係以一方式進行以確保該修補2500的完整性及有效性,即使存在多個同時執行的核心102,其核心102能共享資源,否則當應用於傳統方式時,核心102可能會破壞(clobber)另一核心修補的各部份。
修補服務處理器程式碼
請參閱第30圖,其係顯示第24圖之微處理器100用以修補一服務處理器程式碼之流程圖。流程開始於方塊3002。
在方塊3002中,該核心102將由該SPU 2423執行的程式碼載入至在一修補所指定一修補位址中的該非核心PRAM 116,如上面第26A~26B圖方塊2632中所述。流程進入該方塊3004。
在方塊3004中,該核心102控制該SPU 2423以執行在修補位址的程式碼,例如,該SPU 2423程式碼在方塊3002中被寫入於非核心PRAM 116中的位址。在一實施例中,該SPU 2423配置用以從起始位址暫存器2497提取其重置向量(例如,該SPU 2423移除重置後開始提取指令的地址),以及該核心102將該修補位址寫入該起始位址暫存器2497,接著寫入至一使該SPU 2423被重置的控制暫存器中。流程進行到方塊3006。
在方塊3006中,該SPU 2423開始在該修補位址提 取程式碼(例如,提取其第一指令),例如,在方塊3002中寫入該SPU 2423程式碼至非核心PRAM 116中的位址。一般來說,駐留在該非核心PRAM 116中的SPU 2423修補程式碼將執行一跳轉(jump)至駐留在該非核心ROM 2425中的SPU 2423程式碼。流程結束於方塊3006。
修補該SPU 2423程式碼的功能可能特別有用。例如,該SPU 2423可被用於本質上短暫的性能測試,舉例來說,其可能不欲使該性能測試SPU 2423程式碼成為該微處理器100永久的一部分,而僅成為發展部分的一部分,例如,對於製造部份而言,僅成為發展部分的一部分。在另一例子中,該SPU 2423可用以找尋和/或修復錯誤。在另一例子中,該SPU 2423可用以配置該微處理器100。
更新為每一核心即時架構可視儲存資源的原子傳播
請參照第31圖,其係顯示根據另一實施例之一多核心微處理器100的方塊圖。該微處理器100在許多方面相似於第24圖的微處理器100。然而,第31圖的微處理器100每一核心102還包括架構上可見的記憶體類型範圍暫存器(Memory Type Range Registers,MTRRs)3102。也就是說,每一核心102實例化架構上可見的MTRR 3102,即使系統軟體要求MTRR 3102在所有核心102中是一致的(更詳細的描述如下)。MTRR 3102為每一核心實例化架構上可見的儲存資源之例子,以及其他每一核心實例化架構上可見的儲存資源實施例描述如下。(雖然圖並未示出,但每一核心102還包括第24圖中之該核心PRAM 2499、核心微碼ROM 2404、修補CAM 2439,以及在一實施例中,第28圖的核心微碼修補RAM 2808)。
MTRR 3102提供一種系統軟體,以使一記憶體類型與在該微處理器100系統記憶體位址空間中多個不同的實體位址範圍相關。不同記憶體類型的例子包括強不可緩衝的(strong uncacheable)、不可緩衝的(uncacheable)、寫入結合(write-combining)、寫入通過(write through)、寫回(write back)及寫入保護(write protected)。每一MTRR 3102(明確地或隱含地)指定一記憶體範圍及其記憶體類型。各MTRR 3102的共同值定義一記憶體映射,其指定不同的記憶體範圍的記憶體類型。在一實施例中,MTRR 3102類似於在Intel 64以及IA-32架構軟體開發人員手冊,第3冊:系統編程指南,2013年9月,特別是在第11.11節之描述,其在本文中被引用並構成本說明書之一部分。
希望由MTRR 3102所定義的記憶體映射在用於該微處理器100所有核心中為相同的,以使在該微處理器100中運作的該軟體具有一記憶體一致性。然而,在傳統的處理器中,並無硬體支援以維持在一多核心處理器核心間MTRRs的一致性。如先前提到Intel手冊第3冊第11-20頁底部註解描述,「P6及更多最近的處理器家族提供並無提供用以維持[MTRRs值的一致性]的硬體支援」。因此,系統軟體則負責維持跨核心MTRR的一致性。上方引用Intel手冊第11.11.8節描述系統軟體的一演算法,其用以維持與更新與其MTRRs多核心處理器每一核心相關的一致性,例如,所有核心執行更新其各自MTRRs的指令。
相反地,該系統軟體可在該核心102其中之一中更新該MTRR 3102各自請求(instance),以及在一原子方式中利於該核心102傳播該更新至該微處理器100所有核心102中MTRR 3102之各自請求的實施例描述於本文中(類似於描述在上方第24圖至第30圖中實施例所執行的一微碼修補的方式)。其提供一種用以維持在不同核心102之MTRR 3102間架構指令級一致性的方法。
請參閱第32圖,其係顯示第31圖中該微處理器100用以傳播一MTRR 3102更新至該微處理器100之多個核心102的之一操作流程圖。該操作係從一單一核心的角度所描述,但該微處理器100的每一核心102根據共同傳播該MTRR 3102更新至該微處理器100所有核心102的描述來進行操作。更具體的說,第32圖描述遇到更新該MTRR 3102指令之核心的操作,其流程開始於方塊3202,而其他核心102的操作,其流程開始於方塊3252。
在方塊3202中,核心102其中之一遇到一指示該核心更新其MTRR 3102的指令。也就是說,該MTRR更新指令包括一MTRR 3102識別符及一被寫入至該MTRR 3102的更新值。在一實施例中,該MTRR更新指令係一x86 WRMSR指令,其用以指定在EAX:EDX暫存器中的該更新值及在該ECX暫存器的該MTRR 3102識別符,其為在該核心102之MSR位址空間內的一MSR位址。為了回應該MTRR更新指令,該核心102停用中斷並阻止執行該MTRR更新指令的微碼。應可理解的是,包括該MTRR更新指令的該系統軟體可包括一多指令序列,以作為該 MTRR 3102更新的準備;然而,更佳地說,其作為該序列單一架構指令的回應,所有核心102的MTRR 3102在該架構指令級中以一原子方式被更新。也就是說,一旦中斷在該第一核心102中被停用(例如,在方塊3202中,該核心102遇到該MTRR更新指令),當執行的微碼傳播新MTRR 3102值至該微處理器100所有核心102時(例如,直到在方塊3218後為止),中斷仍維持停用;再者,一旦在其他核心102中被停用(例如,在方塊3252),其仍被停用直到該微處理器100所有核心102的該MTRR 3102已更新為止(例如,直到方塊2634後為止)。因此,有利的是,該新MTRR 3102值在該架構指令級中以一原子方式被傳播至該微處理器100的所有核心102中。流程進行到方塊3204。
在方塊3204中,該核心102獲得第1圖中該硬體信號量118的所有權。更佳地說,該微處理器100包括與一MTRR 3102相關的一硬體信號量118。更佳地說,該核心102以一方式獲得硬體信號量118的所有權,其方式類似上方第20圖所描述,更具體地說為方塊2004和2006。該硬體信號量118被使用由於有可能核心102其中之一執行一MTRR 3102更新以作為遇到一MTRR更新指令的回應,而一第二核心102遇到一MTRR更新指令,以作為該第二核心將開始更新該MTRR 3102,其可能會造成不正確的執行。流程進行到方塊3206。
在方塊3206中,一核心102傳送一MTRR更新訊息至其他核心102並傳送其他核心102一核心間中斷。更佳地說,在時間中斷被停用的期間內(例如,該微碼不允許其本身被中斷),該核心102阻止該微碼以回應該MTRR更新指令(在方塊 3202中)或回應該中斷(在該方塊3252中),並維持於該微碼中,直到方塊3218為止。流程進行到方塊3208。
在方塊3252中,其他核心102之一(例如,在方塊3202中除了遇到該MTRR更新指令的該核心102之外的一核心)被中斷並且因在方塊3206中所傳送的該核心間中斷而接收該MTRR更新訊息。在一實施例中,該核心102在下一架構指令邊界中(例如,在下一x86指令邊界中)取得該中斷。為了回應該中斷,該核心102停用中斷且阻止處理該MTRR更新訊息的微碼。如上所述,雖然在方塊3252中的流程係以一單一核心102的角度所描述,但每一其他核心102(例如,沒在方塊3202中的核心102)在方塊3252中被中斷並接收該訊息,且執行在方塊3208至方塊3234的步驟。流程由方塊3252進行到方塊3208。
在方塊3208中,該核心102寫入一同步情況31的同步請求(在第32圖中標示為SYNC 31)至其同步暫存器108中,並由該控制單元104令該核心102進入睡眠狀態,並隨後當所有核心102已寫入SYNC 31時,由該控制單元104喚醒。流程進行到判斷方塊3211。
在判斷方塊3211中,該核心102判斷其是否為遇見在方塊3202中該MTRR更新指令的核心102(與在方塊3252中接收該MTRR更新訊息的一核心102相比較)。若是,則流程進行到方塊3212;否則,流程進行到方塊3214。
在方塊3212中,該核心102將由該MTRR更新指令所指定的該MTRR識別符及該MTRR被更新使得所有其他核心102可看見的一MTRR更新值載入至該非核心PRAM 116。在一 x86實施例的情況下,MTRR 3102包括:(1)已修復範圍MTRR,其包括一經由單一WRMSR指令更新之單一64位元MSR以及(2)不同範圍MTRR,其包括兩個64位元MSR,每一MSR藉由一不同WRMSR指令被寫入,例如,這兩個WRMSR指令指定不同MSR位址。對於不同範圍MTRRs,該MSR其中之一(該PHYSBASE暫存器)包括該記憶體範圍的一基址及一用以指定該記憶體類型的一類型欄位,以及其他的MSR(該PHYSMASK暫存器)包括一有效位元及一設置該範圍遮蔽(mask)的遮蔽欄位。更佳地說,該核心102載入至該非核PRAM 116的該MTRR更新值如下。
1、若該MSR確定為該PHYSMASK暫存器時,則該核心102載入該非核心PRAM 116一128位元更新值,該更新值包括由該WRMSR指令所指定的新64位元值(其包括該有效位元及遮蔽值)以及該PHYSBASE暫存器的當前值(其包括基值及類型值)。
2、若該MSR確定為該PHYSBASE暫存器時:
a、若在該PHYSMASK暫存器中有效位元正被設置,則該核心102載入至該非核PRAM 116一128位元的更新值,該更新值包括由該WRMSR指令所指定該新的64位元值(其包括該基值及類型值)以及該PHYSMASK暫存器的當前值(其包括該有效位元及遮蔽值)。
b.若在該PHYSMASK暫存器中有效位元正被清除,則該核心102載入至該非核心PRAM 116一64位元的更新值,該更新值包括由該WRMSR指令所指定該新的64位元值(其包括 該基值及類型值)。
此外,若該寫入的更新值係一128位元的值,該核心102在該非核心PRAM 116中設置一旗標,並且若該更新值係一64位元的值時,則該核心102清除該旗標。流程由方塊3212進行到方塊3214。
在方塊3214中,該核心102寫入一同步情況32(在第32圖中標示為SYNC 32)的同步請求到其同步暫存器108,並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 32時,由控制單元104所喚醒。流程進行到方塊3216。
在方塊3216中,該核心102從該非核心PRAM 116讀取在方塊3212中寫入的該MTRR 3102識別符及該MTRR更新值。有利的是,該MTRR更新值傳播以一原子方式執行,使得任何可能會影響各自核心102操作之MTRR 3102的更新保證在架構上不可見,直到該更新值已被傳播至所有核心102的MTRR 3102為止,由於所有核心已知正執行實行於該MTRR更新指令中相同的微碼,並且中斷將不在任一核心102中使用,直到該更新值被傳播至所有核心102各自的MTRR 3102為止。如以上本實施例中方塊3212所述,若該旗標在方塊3212中被設置時,則該核心102也更新(除了已確定的MSR之外)該PHYSMASK或PHYSBASE暫存器;否則,若該旗標為清除(clear)時,則該核心102僅更新已確定的MSR。流程進行到方塊3218。
在方塊3218中,該核心102寫入一同步情況33(在第32圖中標示為SYNC 33)的同步請求到其同步暫存器108, 並由該控制單元104使該核心102進入睡眠狀態,隨後當所有核心102寫入一SYNC 33時,由控制單元104所喚醒。流程結束於方塊3218。
在方塊3218之後,該MTRR核心102釋放在方塊3204中所獲得的該硬體信號量118。更進一步地,在方塊3218之後,該核心102重新啟動中斷。
從第31圖和第32圖觀察可知,運行在第31圖微處理器100中之系統軟體可利於執行在該微處理器100單一核心102中執行一MTRR更新指令以完成更新該微處理器100所有核心102的指定MTRR 3102,而非單獨在每一核心102中執行一MTRR更新指令,其可以提供系統的完整性。
一實例化在每一核心102中特定MTRR 3102係一系統管理範圍暫存器(System Management Range Register,SMRR)3102。由於該SMRR 3102擁有程式碼及與系統管理模式(System Management Mode,SMM)相關的數據的操作,如一系統管理中斷(System Management Interrupt,SMI)處理器,因此由該SMRR 3102所指定的該記憶體範圍被稱為SMRAM區域。當在一核心102中運行的程式碼嘗試存取該SMRAM區域時,若該核心102運行於SMM中,則該核心102僅允許此存取;否則,該核心102忽略寫入該SMRAM區域之一寫入,並恢復由該SMRAM區域中所讀取每一位元的一固定值。此外,如果一運行在該SMM中之一核心102嘗試在該SMRAM區域外執行程式碼,則該核心102將確立一機器檢查異常。此外,當該核心102運行在SMM中時,該核心102僅允許程式碼寫入該SMRR3102 中。這有利於在該SMRAM區域中SMM程式碼和數據的保護。在一實施例中,該SMRR 3102類似於在Intel 64和IA-32架構軟體開發人員手冊第3冊:系統編程指南,2013年9月,特別是在第11.11.2.4和34.4.2.1節之描述,其在本文中被引用並構成本說明書之一部分。
一般來說,每一核心102具有其自身在記憶體中SMM程式碼和數據的例子。期望的是每一核心102的SMM程式碼和數據受到保護以避免不僅來自於在本身中運行的程式碼,而且還來自另一核心102中運行的程式碼。為了使用SMRRs 3102來完成,系統軟體通常將多個SMM程式碼和數據實例放置於記憶體中相鄰的區塊。即,該SMRAM區域係一單一包括所有SMM程式碼和數據實例的鄰近記憶體區域。如果該微處理器100所有核心102的該SMRR 3102具有指定包括所有SMM代程式碼和數據實例之該單一鄰近記憶體區域全體的值時,這可以阻止在非SMM中一核心運行的程式碼更新另一核心102的SMM程式碼及數據實例。當一時間窗口存在於核心102中SMRR 3102值不相同時,例如,該微處理器100不同核心102中SMRRs 3102具有不同的值,其任一值明確小於包括所有SMM程式碼和數據實例的單一鄰近記憶體區域的整體,則系統可能易受到一安全攻擊,對於給定SMM的性質而言,其可能是嚴重的。因此,描述原子傳播更新至SMRRs 3102的實施例可以是特別有利的。
此外,其他實施例可預期該微處理器100其它每一核心實例化架構上可見儲存資源的更新以類似上述方法的一 原子方式被傳播。例如,在一實施例中,每一核心102實例化該x86 IA32_MISC_ENABLE MSR的某些位元欄位,並且在一核心102中所執行的一WRMSR係以類似如上所述的一方式被傳播至該微處理器100中之所有核心102。此外,實施例也可預期在一WRMSR的一核心102中之執行至在該微處理器100所有核心102中被實例化的其他MSR,其皆為架構上及專用的及/或當前和未來的,以類似如上所述的一方式被傳播至該微處理器100中之所有核心102。
此外,儘管實施例係描述該每一核心實例化架構上可見的儲存資源為MTRRs,其他實施例預期為該每一核心實例化資源為不同於x86 ISA指令集架構的資源,及其他除了MTRRs之外的資源。舉例來說,其他除了MTRRs之外的資源包括CPUID值及回報功能的MSR,像是向量多媒體擴展(Vectored Multimedia eXtensions,VMX)功能。
雖然本發明已以較佳實施例揭露如上,然其並非用以限定本發明,本領域技術人員在不脫離本發明的精神和範疇內,當可做些許更動與潤飾,因此本發明的保護範圍當視申請專利範圍所界定者為准。例如,軟體可致能、例如,功能、製造、模型化、類比、描述及/或測試本發明所述的裝置以及方法。上述可通過使用一般程式語言(例如:C、C++)、硬體描述語言(Hardware Description Languages,HDL)包括Verilog HDL、VHDL等等來實現。此類軟體可以以程式碼的型態包含於實體介質中,例如任何其他機器可讀取(如電腦可讀取)儲存介質如半導體、磁碟、硬碟或光碟片(例如:CD-ROM、 DVD-ROM等等),其中,當程式碼被機器,如電腦載入且執行時,此機器變成用以實施本發明的裝置。本發明的方法與裝置也可以以程式碼型態透過一些傳送介質,如電線或電纜、光纖、或是任何傳輸型態進行傳送,其中,當程式碼被機器,如電腦接收、載入且執行時,此機器變成用以實施本發明的裝置。當在一般用途處理器實作時,程式碼結合處理器提供一操作類似於應用特定邏輯電路的獨特裝置。本發明所述的裝置以及方法可包含於一半導體智慧財產權核心例如一微處理器核心(嵌入於HDL),並轉換成積體電路的硬體產品。此外,本發明所述的裝置以及方法可包含具有硬體以及軟體的組合實體實施例。因此本發明的保護範圍當視申請專利範圍所界定者為準。最後,本領域技術人員可基於本發明所揭露的概念以及特定實施例,在不脫離本發明的精神和範圍內可做些許更動與潤飾以達到本發明的相同目的。
100‧‧‧多核心微處理器
102A、102B、102N‧‧‧核心A、核心B、核心N
103‧‧‧非核心
104‧‧‧控制單元
106‧‧‧狀態暫存器
108A、108B、108N‧‧‧同步暫存器
114‧‧‧熔斷器
116‧‧‧專用隨機存取記憶體
118‧‧‧硬體信號量
119‧‧‧共享高速緩衝記憶體
122A、122B、122N‧‧‧時脈信號
124A、124B、124N‧‧‧中斷信號
126A、126B、126N‧‧‧數據信號
128A、128B、128N‧‧‧電能控制信號

Claims (30)

  1. 一微處理器,包括:複數處理核心;以及一配置暫存器,配置用以指示每一上述複數處理核心是否可啟用或停用;其中上述複數處理核心中每一可啟用的處理核心配置用以;讀取在一第一實例(instance)中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;以及基於在上述第一實例中上述配置暫存器之讀取產生一各自的配置相關值;其中上述配置暫存器被更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用;其中上述複數處理核心中每一可啟用的處理核心配置用以;讀取在一第二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;以及基於上述配置暫存器在上述第二實例中之讀取產生上述各自的配置相關值。
  2. 如申請專利範圍第1項所述之微處理器,其中上述各自的配置相關值包括一指示上述處理核心係為上述微處理器之一導引處理器的指示。
  3. 如申請專利範圍第1項所述之微處理器,其中上述各自的配置相關值包括與上述處理核心相關之一外部中斷控制器識 別符。
  4. 如申請專利範圍第1項所述之微處理器,更包括:一控制單元,配置用以同時喚醒由上述配置暫存器所指示的每一上述複數處理核心可產生一各自的同步請求並回應地進入睡眠狀態,以作為決定由上述配置暫存器所指示每一可啟用處理核心的回應。
  5. 如申請專利範圍第4項所述之微處理器,其中在上述配置暫存器被更新以指示上述複數處理核心之上述先前可啟用的處理核心被停用,上述控制單元決定當每一上述複數處理核心產生一各自的同步請求並回應地進入睡眠狀態時,同時喚醒由上述配置暫存器所指示的每一上述複數處理核心。
  6. 如申請專利範圍第1項所述之微處理器,其中上述微處理器包括複數半導體晶體;其中上述複數處理核心之一相異子集合位於每一上述複數半導體晶體中;其中上述微處理器包括在每一上述複數半導體晶體中上述配置暫存器的一實例;以及其中位於每一上述複數半導體晶體中上述複數處理核心之相異子集合每一可啟用之處理核心被配置用以讀取在上述半導體晶體中上述配置暫存器的上述實例。
  7. 如申請專利範圍第6項所述之微處理器,其中上述配置暫存器的每一實例被更新以指示上述複數處理核心之上述先前可啟用的處理核心被停用。
  8. 如申請專利範圍第7項所述之微處理器,其中上述微處理器在每一上述複數半導體晶體中包括一控制單元的一實例;其中上述控制單元的每一實例被配置用以決定由上述配置暫存器所指示的每一上述複數處理核心可產生一各自的同步請求並回應地進入睡眠狀態;其中對於上述複數半導體晶體的每一半導體晶體而言,上述控制單元的上述實例用以配置同時喚醒位於由上述配置暫存器所指示可啟用之上述半導體晶體中上述複數處理核心之每一可啟用的相異子集合,以作為每一上述複數處理核心產生一各自的同步請求並回應地進入睡眠狀態時,決定由上述配置暫存器所指示的每一上述複數處理核心之回應。
  9. 如申請專利範圍第1項所述之微處理器,其中上述配置暫存器被更新以指示上述複數處理核心之上述先前可啟用的處理核心被停用,以回應寫入至一控制暫存器之上述先前可啟用的處理核心。
  10. 如申請專利範圍第9項所述之微處理器,其中上述先前可啟用的處理核心寫入至上述控制暫存器以回應執行一指示上述先前可啟用的處理核心停用其本身之架構指令。
  11. 如申請專利範圍第1項所述之微處理器,其中上述配置暫存器被更新指示上述複數處理核心之上述先前可啟用的處理核心被停用,以回應除了寫入至一控制暫存器之上述先前可啟用的處理核心之外的上述複數處理核心其中之一。
  12. 如申請專利範圍第11項所述之微處理器,其中除了上述先前可啟用的處理核心之外的上述複數處理核心其中之一寫入至上述控制暫存器以回應除了決定上述先前可啟用的處理核心為有缺陷的上述先前可啟用的處理核心之外的上述複數處理核心其中之一。
  13. 如申請專利範圍第1項所述之微處理器,其中上述複數處理核心之每一可啟用的處理核心讀取在上述第一實例中的上述配置暫存器以回應上述微處理器的一重置。
  14. 如申請專利範圍第1項所述之微處理器,其中在上述配置暫存器更新之前,上述複數處理核心之每一可啟用的處理核心讀取在上述第二實例中之上述配置暫存器,以回應傳送一中斷請求至上述複數處理核心之每一可啟用的處理核心的上述先前可啟用的處理核心。
  15. 一種重新配置一具有複數處理核心之多核心微處理器的方法,上述方法包括:由上述複數處理核心中每一可啟用的處理核心讀取一第一實例(instance)中之一配置暫存器以決定上述複數處理核心中何者可啟用或停用;由上述複數處理核心中每一可啟用的處理核心產生基於在上述第一實例中上述配置暫存器之讀取一各自的配置相關值;由上述配置暫存器更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用;由上述複數處理核心中每一可啟用的處理核心讀取在一第 二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;由上述複數處理核心中每一可啟用的處理核心基於在上述第二實例中上述配置暫存器之讀取產生上述各自的配置相關值。
  16. 如申請專利範圍第15項所述之方法,其中上述各自的配置相關值包括一指示上述處理核心係為上述微處理器之一導引處理器的指示。
  17. 如申請專利範圍第15項所述之方法,其中如上述各自的配置相關值包括與上述處理核心相關之一外部中斷控制器識別符。
  18. 如申請專利範圍第15項所述之方法,更包括:由上述微處理器之一控制單元決定由上述配置暫存器所指示的每一上述複數處理核心可產生一各自的同步請求並回應地進入睡眠狀態;以及由上述控制單元同時喚醒由上述配置暫存器所指示可啟用的每一上述複數處理核心,以回應上述決定之步驟。
  19. 如申請專利範圍第18項所述之方法,其中在更新上述配置暫存器以指示上述複數處理核心之上述先前可啟用的處理核心被停用後,由上述控制單元執行上述決定之步驟。
  20. 如申請專利範圍第15項所述之方法,其中上述微處理器包括複數半導體晶體;其中上述複數處理核心之一相異子集合位於每一上述複數半導體晶體中; 其中上述微處理器包括在每一上述複數半導體晶體中上述配置暫存器的一實例;以及其中由每一可啟用之處理核心所執行之上述讀取步驟,上述配置暫存器包括由位於每一上述複數半導體晶體中上述複數處理核心之相異子集合每一可啟用之處理核心讀取在上述半導體晶體中上述配置暫存器的上述實例。
  21. 如申請專利範圍第20項所述之方法,其中上述配置暫存器更新以指示上述複數處理核心之上述先前可啟用的處理核心被停用之步驟包括更新上述配置暫存器的每一實例。
  22. 如申請專利範圍第21項所述之方法,其中上述微處理器在每一上述複數半導體晶體中包括一控制單元的一實例,上述方法更包括:上述控制單元的每一實例決定由上述配置暫存器所指示的每一上述複數處理核心可產生一各自的同步請求並回應地進入睡眠狀態;由在上述複數半導體晶體的每一半導體晶體中上述控制單元的上述實例同時喚醒位於由上述配置暫存器所指示可啟用之上述半導體晶體中上述複數處理核心之每一可啟用的相異子集合,以回應上述決定之步驟。
  23. 如申請專利範圍第15項所述之方法,其中更新上述配置暫存器之步驟係指示上述複數處理核心之上述先前可啟用的處理核心被停用,以回應寫入至一控制暫存器之上述先前可啟用的處理核心。
  24. 如申請專利範圍第23項所述之方法,其中由上述先前可啟 用的處理核心寫入至上述控制暫存器係由上述先前可啟用的處理核心所執行以回應執行一指示上述先前可啟用的處理核心停用其本身之架構指令。
  25. 如申請專利範圍第15項所述之方法,其中更新上述配置暫存器之步驟係指示上述複數處理核心之上述先前可啟用的處理核心被停用,以回應除了寫入至一控制暫存器之上述先前可啟用的處理核心之外的上述複數處理核心其中之一。
  26. 如申請專利範圍第25項所述之方法,其中除了上述先前可啟用的處理核心之外的上述複數處理核心其中之一被執行寫入至上述控制暫存器之步驟以回應除了決定上述先前可啟用的處理核心為有缺陷的上述先前可啟用的處理核心之外的上述複數處理核心其中之一。
  27. 如申請專利範圍第15項所述之方法,其中上述讀取在上述第一實例中的上述配置暫存器之步驟被執行以回應上述微處理器的一重置。
  28. 如申請專利範圍第15項所述之方法,其中上述在上述配置暫存器更新之前,上述複數處理核心之每一可啟用的處理核心讀取在上述第二實例中之上述配置暫存器之步驟係回應傳送一中斷請求至上述複數處理核心之每一可啟用的處理核心的上述先前可啟用的處理核心。
  29. 一種在用於一計算機裝置中至少一非暫態電腦可用介質所編碼的電腦程式產品,上述電腦程式產品包括:包括在上述介質中之電腦可用程式碼,以指示一微處理器, 上述電腦可用程式碼包括:指示複數處理核心的第一程式碼;以及指示一配置暫存器的第二程式碼,配置用以指示每一上述複數處理核心是否可啟用或停用;其中上述複數處理核心中每一可啟用的處理核心配置用以:讀取在一第一實例(instance)中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;以及基於在上述第一實例中上述配置暫存器之讀取產生一各自的配置相關值;其中上述配置暫存器被更新以指示上述複數處理核心中一先前可啟用的處理核心係被停用;其中上述複數處理核心中每一可啟用的處理核心配置用以;讀取在一第二實例中之上述配置暫存器以決定上述複數處理核心中何者可啟用或停用;以及基於上述配置暫存器在上述第二實例中之讀取產生上述各自的配置相關值。
  30. 如申請專利範圍第29項所述之電腦程式產品,其中上述至少一非暫態電腦可用介質從一磁碟、磁帶、或其他磁性、光學、或電子可儲存介質組合中選擇。
TW103129489A 2013-08-28 2014-08-27 多核心微處理器動態重新配置 TWI637316B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361871206P 2013-08-28 2013-08-28
US61/871,206 2013-08-28
US201361916338P 2013-12-16 2013-12-16
US61/916,338 2013-12-16
US14/281,657 2014-05-19
US14/281,657 US10198269B2 (en) 2013-08-28 2014-05-19 Dynamic reconfiguration of multi-core processor

Publications (2)

Publication Number Publication Date
TW201508635A true TW201508635A (zh) 2015-03-01
TWI637316B TWI637316B (zh) 2018-10-01

Family

ID=52584875

Family Applications (1)

Application Number Title Priority Date Filing Date
TW103129489A TWI637316B (zh) 2013-08-28 2014-08-27 多核心微處理器動態重新配置

Country Status (2)

Country Link
US (14) US9891927B2 (zh)
TW (1) TWI637316B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI562061B (en) * 2016-06-20 2016-12-11 Inventec Corp Power consumption control system of computing system and method thereof
CN109976935A (zh) * 2019-03-14 2019-07-05 北京三快在线科技有限公司 微服务架构、微服务节点及其熔断恢复方法、装置
US11416281B2 (en) 2016-12-31 2022-08-16 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2004283067A1 (en) 2003-10-10 2005-05-06 Oryxe Transdermal high and low molecular weight compounds
HUE026644T2 (en) 2004-05-28 2016-07-28 Oryxe Mixture for transdermal administration of low and high molecular weight compounds
US10157060B2 (en) 2011-12-29 2018-12-18 Intel Corporation Method, device and system for control signaling in a data path module of a data stream processing engine
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US9792112B2 (en) * 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9891927B2 (en) 2013-08-28 2018-02-13 Via Technologies, Inc. Inter-core communication via uncore RAM
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
US9252131B2 (en) * 2013-10-10 2016-02-02 Globalfoundries Inc. Chip stack cache extension with coherency
EP2887207B1 (en) * 2013-12-19 2019-10-16 Teknologian tutkimuskeskus VTT Oy Architecture for long latency operations in emulated shared memory architectures
FR3021433B1 (fr) * 2014-05-21 2016-06-24 Kalray Systeme de synchronisation inter-processeurs
US9712606B2 (en) 2014-05-21 2017-07-18 Nasdaq Technology Ab Efficient and reliable host distribution of totally ordered global state
US9875148B2 (en) 2014-06-27 2018-01-23 International Business Machines Corporation Detecting deadlocks involving inter-processor interrupts
US9760511B2 (en) * 2014-10-08 2017-09-12 International Business Machines Corporation Efficient interruption routing for a multithreaded processor
KR102301639B1 (ko) * 2015-01-23 2021-09-14 삼성전자주식회사 SoC(System-on Chip), 그의 전력 관리 방법 및 전자 장치
US9710054B2 (en) * 2015-02-28 2017-07-18 Intel Corporation Programmable power management agent
GB2539037B (en) 2015-06-05 2020-11-04 Advanced Risc Mach Ltd Apparatus having processing pipeline with first and second execution circuitry, and method
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US20170052799A1 (en) * 2015-08-21 2017-02-23 Microchip Technology Incorporated Integrated Circuit Device With Selectable Processor Core
US10127088B2 (en) 2015-09-10 2018-11-13 Oracle Inrternational Corporation Adaptive techniques for improving performance of hardware transactions on multi-socket machines
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US9886357B2 (en) 2015-10-11 2018-02-06 International Business Machines Corporation Selecting master time of day for maximum redundancy
US20170123798A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches
US20170185128A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Method and apparatus to control number of cores to transition operational states
US9898351B2 (en) * 2015-12-24 2018-02-20 Intel Corporation Method and apparatus for user-level thread synchronization with a monitor and MWAIT architecture
CN105718320B (zh) * 2016-01-18 2020-11-06 华为技术有限公司 一种时钟任务处理方法、装置及设备
GB2547912B (en) * 2016-03-02 2019-01-30 Advanced Risc Mach Ltd Register access control
CN107329810B (zh) 2016-04-28 2023-09-08 恩智浦美国有限公司 用于多核处理器的信号机
CN106201902A (zh) * 2016-06-24 2016-12-07 中电海康集团有限公司 一种sram位元与非易失性存储位元组成的复合阵列模块及其读写控制方法
US20180024610A1 (en) * 2016-07-22 2018-01-25 Futurewei Technologies, Inc. Apparatus and method for setting a clock speed/voltage of cache memory based on memory request information
JP6772007B2 (ja) * 2016-09-12 2020-10-21 キヤノン株式会社 情報処理装置及びその制御方法、コンピュータプログラム
US10503509B2 (en) * 2016-09-30 2019-12-10 Intel Corporation System and method for communication using a register management array circuit
US10795853B2 (en) 2016-10-10 2020-10-06 Intel Corporation Multiple dies hardware processors and methods
US10061722B2 (en) * 2016-10-17 2018-08-28 Qualcomm Incorporated Method to handle concurrent fatal events in a multicore execution environment
US10740167B2 (en) * 2016-12-07 2020-08-11 Electronics And Telecommunications Research Institute Multi-core processor and cache management method thereof
US10437310B2 (en) * 2016-12-21 2019-10-08 Intel Corporation Technologies for secure hybrid standby power management
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10481202B2 (en) * 2017-02-13 2019-11-19 Qualcomm Incorporated In-field self-test controller for safety critical automotive use cases
US10599442B2 (en) * 2017-03-02 2020-03-24 Qualcomm Incorporated Selectable boot CPU
US10429919B2 (en) * 2017-06-28 2019-10-01 Intel Corporation System, apparatus and method for loose lock-step redundancy power management
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US11397560B2 (en) 2017-09-19 2022-07-26 Bae Systems Controls Inc. System and method for managing multi-core accesses to shared ports
US11288010B2 (en) * 2017-09-25 2022-03-29 Intel Corporation Efficiently storing computer processor data structures in computer memory
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US11169834B2 (en) * 2017-09-28 2021-11-09 Intel Corporation Dynamic platform feature tuning based on virtual machine runtime requirements
US10915330B2 (en) 2017-12-19 2021-02-09 Advanced Micro Devices, Inc. Pseudo-random logical to physical core assignment at boot for age averaging
US11556162B2 (en) * 2018-03-16 2023-01-17 Advanced Micro Devices, Inc. Per-instruction energy debugging using instruction sampling hardware
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US11398258B2 (en) 2018-04-30 2022-07-26 Invensas Llc Multi-die module with low power operation
KR102589373B1 (ko) * 2018-05-15 2023-10-19 현대자동차주식회사 차량 네트워크에서 통신 노드의 웨이크업 방법 및 장치
US10805106B2 (en) * 2018-06-05 2020-10-13 K4Connect Inc. Home automation system including sleep to awake mode device switching and related methods
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US10930593B2 (en) * 2019-03-13 2021-02-23 Samsung Electronics Co., Ltd. Package on package and package connection system comprising the same
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US11157431B2 (en) * 2019-06-20 2021-10-26 Intel Corporation System, apparatus and method for multi-die distributed memory mapped input/output support
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11766975B2 (en) * 2019-07-17 2023-09-26 Marvell Asia Pte, Ltd. Managing power in an integrated circuit for high-speed activation
CN112241197A (zh) * 2019-07-17 2021-01-19 马维尔亚洲私人有限公司 针对高速激活管理集成电路中的功率
KR20210024763A (ko) 2019-08-26 2021-03-08 에스케이하이닉스 주식회사 메모리 시스템의 동작 중 펌웨어 오류를 처리하는 방법 및 장치
US11068038B2 (en) 2019-09-20 2021-07-20 Dell Products L.P. System and method for using current slew-rate telemetry in an information handling system
US11281275B2 (en) 2019-10-10 2022-03-22 Dell Products L.P. System and method for using input power line telemetry in an information handling system
TWI816032B (zh) * 2020-04-10 2023-09-21 新唐科技股份有限公司 多核心處理器電路
GB2597082B (en) * 2020-07-14 2022-10-12 Graphcore Ltd Hardware autoloader
US12086080B2 (en) 2020-09-26 2024-09-10 Intel Corporation Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
CN112765091B (zh) * 2021-02-04 2024-05-03 南方电网科学研究院有限责任公司 一种SoC核间通信方法和装置
JP7413300B2 (ja) * 2021-03-15 2024-01-15 株式会社東芝 記憶装置
CN115827355B (zh) * 2023-01-10 2023-04-28 深流微智能科技(深圳)有限公司 图形处理器中异常核的检测方法、检测装置和电子设备

Family Cites Families (116)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4484303A (en) 1979-06-19 1984-11-20 Gould Inc. Programmable controller
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5546532A (en) 1993-02-01 1996-08-13 3Dlabs Limited Data-array processing system
US5724527A (en) 1995-12-28 1998-03-03 Intel Corporation Fault-tolerant boot strap mechanism for a multiprocessor system
US6049672A (en) 1996-03-08 2000-04-11 Texas Instruments Incorporated Microprocessor with circuits, systems, and methods for operating with patch micro-operation codes and patch microinstruction codes stored in multi-purpose memory structure
US5796972A (en) 1997-01-14 1998-08-18 Unisys Corporation Method and apparatus for performing microcode paging during instruction execution in an instruction processor
US5904733A (en) 1997-07-31 1999-05-18 Intel Corporation Bootstrap processor selection architecture in SMP systems
US6279066B1 (en) 1997-11-14 2001-08-21 Agere Systems Guardian Corp. System for negotiating access to a shared resource by arbitration logic in a shared resource negotiator
US6205509B1 (en) 1999-07-15 2001-03-20 3Com Corporation Method for improving interrupt response time
US6594756B1 (en) 1999-09-08 2003-07-15 Intel Corporation Multi-processor system for selecting a processor which has successfully written it's ID into write-once register after system reset as the boot-strap processor
US6738882B1 (en) 1999-11-30 2004-05-18 Hewlett-Packard Development Company, L.P. Concurrent multi-processor memory testing beyond 32-bit addresses
US6530076B1 (en) 1999-12-23 2003-03-04 Bull Hn Information Systems Inc. Data processing system processor dynamic selection of internal signal tracing
US6611911B1 (en) 1999-12-30 2003-08-26 Intel Corporation Bootstrap processor election mechanism on multiple cluster bus system
US7389368B1 (en) 2000-01-24 2008-06-17 Agere Systems Inc. Inter-DSP signaling in a multiple DSP environment
US20010052053A1 (en) 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US6665802B1 (en) 2000-02-29 2003-12-16 Infineon Technologies North America Corp. Power management and control for a microcontroller
US6760838B2 (en) 2001-01-31 2004-07-06 Advanced Micro Devices, Inc. System and method of initializing and determining a bootstrap processor [BSP] in a fabric of a distributed multiprocessor computing system
US6763517B2 (en) 2001-02-12 2004-07-13 Sun Microsystems, Inc. Automated analysis of kernel and user core files including searching, ranking, and recommending patch files
US6925556B2 (en) 2001-02-14 2005-08-02 Intel Corporation Method and system to determine the bootstrap processor from a plurality of operable processors
US6922787B2 (en) 2001-08-14 2005-07-26 International Business Machines Corporation Method and system for providing a flexible temperature design for a computer system
US6792551B2 (en) 2001-11-26 2004-09-14 Intel Corporation Method and apparatus for enabling a self suspend mode for a processor
FI20020210A (fi) 2002-02-04 2003-08-05 Nokia Corp Moniprosessoriympäristöön tarkoitettu laitteistopohjainen opastin
US7124273B2 (en) * 2002-02-25 2006-10-17 Intel Corporation Method and apparatus for translating guest physical addresses in a virtual machine environment
US20030196096A1 (en) 2002-04-12 2003-10-16 Sutton James A. Microcode patch authentication
US7290081B2 (en) 2002-05-14 2007-10-30 Stmicroelectronics, Inc. Apparatus and method for implementing a ROM patch using a lockable cache
US7237262B2 (en) * 2002-07-09 2007-06-26 Itt Manufacturing Enterprises, Inc. System and method for anti-replay processing of a data packet
US6895460B2 (en) * 2002-07-19 2005-05-17 Hewlett-Packard Development Company, L.P. Synchronization of asynchronous emulated interrupts
US7814350B2 (en) 2002-10-03 2010-10-12 Via Technologies, Inc. Microprocessor with improved thermal monitoring and protection mechanism
US7493417B2 (en) 2002-12-12 2009-02-17 International Business Machines Corporation Method and data processing system for microprocessor communication using a processor interconnect in a multi-processor system
US7191349B2 (en) 2002-12-26 2007-03-13 Intel Corporation Mechanism for processor power state aware distribution of lowest priority interrupt
US7269707B2 (en) 2003-01-10 2007-09-11 Texas Instruments Incorporated Multiple patches to on-chip ROM in a processor with a multilevel memory system without affecting performance
US7100034B2 (en) * 2003-05-23 2006-08-29 Hewlett-Packard Development Company, L.P. System for selecting another processor to be the boot strap processor when the default boot strap processor does not have local memory
US7194660B2 (en) 2003-06-23 2007-03-20 Newisys, Inc. Multi-processing in a BIOS environment
US20050050310A1 (en) 2003-07-15 2005-03-03 Bailey Daniel W. Method, system, and apparatus for improving multi-core processor performance
US20050086667A1 (en) * 2003-09-30 2005-04-21 Feng Jin Symmetric Scheduling for parallel execution
US7519799B2 (en) 2003-11-18 2009-04-14 Intel Corporation Apparatus having a micro-instruction queue, a micro-instruction pointer programmable logic array and a micro-operation read only memory and method for use thereof
GB2409303B (en) 2003-12-18 2006-10-18 Advanced Risc Mach Ltd Inter-processor communication mechanism
US7583985B2 (en) 2004-03-26 2009-09-01 Broadcom Corporation MAC controlled sleep mode/wake-up mode with staged wake-up for power management
US7216223B2 (en) 2004-04-30 2007-05-08 Hewlett-Packard Development Company, L.P. Configuring multi-thread status
US7451333B2 (en) 2004-09-03 2008-11-11 Intel Corporation Coordinating idle state transitions in multi-core processors
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
US7257679B2 (en) 2004-10-01 2007-08-14 Advanced Micro Devices, Inc. Sharing monitored cache lines across multiple cores
US7353375B2 (en) 2004-10-07 2008-04-01 Hewlett-Packard Development Company, L.P. Method and apparatus for managing processor availability using a microcode patch
TWI256553B (en) 2004-12-17 2006-06-11 Ind Tech Res Inst Apparatus and method for hardware semaphore
US8028154B2 (en) 2005-07-29 2011-09-27 Broadcom Corporation Method and system for reducing instruction storage space for a processor integrated in a network adapter chip
US7694055B2 (en) 2005-10-15 2010-04-06 International Business Machines Corporation Directing interrupts to currently idle processors
US20070088939A1 (en) 2005-10-17 2007-04-19 Dan Baumberger Automatic and dynamic loading of instruction set architecture extensions
US8180923B2 (en) 2005-11-29 2012-05-15 Intel Corporation Network access control for many-core systems
US7516342B2 (en) 2005-12-30 2009-04-07 Intel Corporation Method, apparatus and system to dynamically choose an optimum power state
JP3976065B2 (ja) 2006-01-16 2007-09-12 セイコーエプソン株式会社 マルチプロセッサシステム及びマルチプロセッサシステムの割込み制御方法をコンピュータに実行させるためのプログラム
US7509481B2 (en) 2006-03-03 2009-03-24 Sun Microsystems, Inc. Patchable and/or programmable pre-decode
US7610481B2 (en) 2006-04-19 2009-10-27 Intel Corporation Method and apparatus to support independent systems in partitions of a processing system
US20070288738A1 (en) 2006-06-09 2007-12-13 Dale Jason N System and method for selecting a random processor to boot on a multiprocessor system
US7992151B2 (en) 2006-11-30 2011-08-02 Intel Corporation Methods and apparatuses for core allocations
US7779244B2 (en) 2006-12-28 2010-08-17 Intel Corporation Multi-socket boot
US8041920B2 (en) 2006-12-29 2011-10-18 Intel Corporation Partitioning memory mapped device configuration space
US20090007104A1 (en) 2007-06-29 2009-01-01 Zimmer Vincent J Partitioned scheme for trusted platform module support
US20090031121A1 (en) 2007-07-24 2009-01-29 Via Technologies Apparatus and method for real-time microcode patch
US20090031090A1 (en) 2007-07-24 2009-01-29 Via Technologies Apparatus and method for fast one-to-many microcode patch
US8131941B2 (en) 2007-09-21 2012-03-06 Mips Technologies, Inc. Support for multiple coherence domains
US7882333B2 (en) 2007-11-05 2011-02-01 Dell Products L.P. Architectural enhancements to CPU microcode load mechanism using inter processor interrupt messages
US7987352B2 (en) 2007-11-30 2011-07-26 Intel Corporation Booting with sub socket partitioning
US7996663B2 (en) 2007-12-27 2011-08-09 Intel Corporation Saving and restoring architectural state for processor cores
US8028185B2 (en) 2008-03-11 2011-09-27 Globalfoundries Inc. Protocol for transitioning in and out of zero-power state
US8112648B2 (en) 2008-03-11 2012-02-07 Globalfoundries Inc. Enhanced control of CPU parking and thread rescheduling for maximizing the benefits of low-power state
CN101546276B (zh) 2008-03-26 2012-12-19 国际商业机器公司 多核环境下实现中断调度的方法及多核处理器
US8078862B2 (en) * 2008-04-25 2011-12-13 Intel Corporation Method for assigning physical data address range in multiprocessor system
US8112647B2 (en) 2008-08-27 2012-02-07 Globalfoundries Inc. Protocol for power state determination and demotion
US8296528B2 (en) 2008-11-03 2012-10-23 Intel Corporation Methods and systems for microcode patching
US20100180104A1 (en) 2009-01-15 2010-07-15 Via Technologies, Inc. Apparatus and method for patching microcode in a microprocessor using private ram of the microprocessor
FR2941799B1 (fr) 2009-01-30 2011-03-04 St Nxp Wireless France Procede et systeme de gestion du fonctionnement d'un dispositif de traitement de donnees multicoeurs
US7853817B2 (en) 2009-02-26 2010-12-14 Apple Inc. Power management independent of CPU hardware support
US8151027B2 (en) 2009-04-08 2012-04-03 Intel Corporation System management mode inter-processor interrupt redirection
CN101561764B (zh) 2009-05-18 2012-05-23 华为技术有限公司 一种多核环境下的补丁方法与补丁装置
US20100332877A1 (en) 2009-06-30 2010-12-30 Yarch Mark A Method and apparatus for reducing power consumption
US8443209B2 (en) 2009-07-24 2013-05-14 Advanced Micro Devices, Inc. Throttling computational units according to performance sensitivity
US8307198B2 (en) 2009-11-24 2012-11-06 Advanced Micro Devices, Inc. Distributed multi-core memory initialization
US8464035B2 (en) * 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
US20130290758A1 (en) 2010-01-11 2013-10-31 Qualcomm Incorporated Sleep mode latency scaling and dynamic run time adjustment
JP5432749B2 (ja) 2010-02-01 2014-03-05 トヨタ自動車株式会社 マルチコアプロセッサを備える車載電子制御装置
KR101664108B1 (ko) 2010-04-13 2016-10-11 삼성전자주식회사 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법
WO2011140233A2 (en) 2010-05-05 2011-11-10 Teradyne, Inc. System for concurrent test of semiconductor devices
US20120047580A1 (en) 2010-08-18 2012-02-23 Smith Ned M Method and apparatus for enforcing a mandatory security policy on an operating system (os) independent anti-virus (av) scanner
US8924646B2 (en) 2010-10-07 2014-12-30 Lsi Corporation Methods for managing data movement and destaging data in a multi-level cache system utilizing threshold values and metadata
US8607040B2 (en) 2010-11-16 2013-12-10 Intel Corporation Method of provisioning firmware in an operating system (OS) absent services environment
US9037911B2 (en) 2010-12-09 2015-05-19 Advanced Micro Devices, Inc. Debug state machines and methods of their operation
WO2012083486A1 (en) 2010-12-21 2012-06-28 Intel Corporation System and method for power management
US8972707B2 (en) 2010-12-22 2015-03-03 Via Technologies, Inc. Multi-core processor with core selectively disabled by kill instruction of system software and resettable only via external pin
US8782451B2 (en) 2010-12-22 2014-07-15 Via Technologies, Inc. Power state synchronization in a multi-core processor
US20120179896A1 (en) 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US8966305B2 (en) 2011-06-30 2015-02-24 Advanced Micro Devices, Inc. Managing processor-state transitions
EP2742429A4 (en) * 2011-08-09 2015-03-25 Lsi Corp I / O DEVICE AND INTERACTION WITH DATA PROCESSING HOST
US8862917B2 (en) 2011-09-19 2014-10-14 Qualcomm Incorporated Dynamic sleep for multicore computing devices
JP5674613B2 (ja) 2011-09-22 2015-02-25 株式会社東芝 制御システム、制御方法およびプログラム
US8799697B2 (en) 2011-09-26 2014-08-05 Qualcomm Incorporated Operating system synchronization in loosely coupled multiprocessor system and chips
FR2982959B1 (fr) 2011-11-22 2014-06-27 Schneider Electric Usa Inc Synchronisation de donnees dans un systeme de commande reparti cooperatif
US8578129B2 (en) 2011-12-14 2013-11-05 Advanced Micro Devices, Inc. Infrastructure support for accelerated processing device memory paging without operating system integration
US8892946B2 (en) 2011-12-15 2014-11-18 International Business Machines Corporation Verifying speculative multithreading in an application
WO2013101086A1 (en) 2011-12-29 2013-07-04 Intel Corporation Boot strap processor assignment for a multi-core processing unit
JP5842206B2 (ja) 2012-01-27 2016-01-13 株式会社トプスシステムズ プロセッサ・コア、およびマルチコア・プロセッサ・システム
US8799710B2 (en) * 2012-06-28 2014-08-05 International Business Machines Corporation 3-D stacked multiprocessor structures and methods to enable reliable operation of processors at speeds above specified limits
KR102060431B1 (ko) 2012-08-24 2020-02-11 삼성전자주식회사 멀티 코어 시스템의 전력 관리 장치 및 방법
US20140095896A1 (en) 2012-09-28 2014-04-03 Nicholas P. Carter Exposing control of power and clock gating for software
US8930932B2 (en) 2012-10-09 2015-01-06 Futurewei Technologies, Inc. In-service software patch
US9081625B2 (en) 2012-10-16 2015-07-14 Dell Products, L.P. Method for reducing execution jitter in multi-core processors within an information handling system
US9383801B2 (en) 2012-12-21 2016-07-05 Advanced Micro Devices, Inc. Methods and apparatus related to processor sleep states
CN104781803B (zh) 2012-12-26 2018-06-15 英特尔公司 用于架构不同核的线程迁移支持
CN104969183B (zh) * 2013-03-14 2018-10-19 英特尔公司 用于多个并行处理线程间的任务的软件模块的并行操作的系统、方法和设备
US9727345B2 (en) 2013-03-15 2017-08-08 Intel Corporation Method for booting a heterogeneous system and presenting a symmetric core view
US20150058609A1 (en) 2013-08-21 2015-02-26 Via Technologies, Inc. Apparatus and method for storage and decompression of configuration data
US9891927B2 (en) 2013-08-28 2018-02-13 Via Technologies, Inc. Inter-core communication via uncore RAM
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US9372696B2 (en) 2013-10-18 2016-06-21 Via Technologies, Inc. Microprocessor with compressed and uncompressed microcode memories
US9563585B2 (en) 2014-02-19 2017-02-07 Futurewei Technologies, Inc. System and method for isolating I/O execution via compiler and OS support

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI562061B (en) * 2016-06-20 2016-12-11 Inventec Corp Power consumption control system of computing system and method thereof
US11416281B2 (en) 2016-12-31 2022-08-16 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US11693691B2 (en) 2016-12-31 2023-07-04 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
TWI810166B (zh) * 2016-12-31 2023-08-01 美商英特爾股份有限公司 用於異質計算之系統,方法,及設備
CN109976935A (zh) * 2019-03-14 2019-07-05 北京三快在线科技有限公司 微服务架构、微服务节点及其熔断恢复方法、装置
CN109976935B (zh) * 2019-03-14 2020-09-04 北京三快在线科技有限公司 微服务架构、微服务节点及其熔断恢复方法、装置

Also Published As

Publication number Publication date
US10198269B2 (en) 2019-02-05
US9971605B2 (en) 2018-05-15
US9811344B2 (en) 2017-11-07
US20150067310A1 (en) 2015-03-05
US9575541B2 (en) 2017-02-21
US9898303B2 (en) 2018-02-20
US9507404B2 (en) 2016-11-29
US9513687B2 (en) 2016-12-06
US10635453B2 (en) 2020-04-28
US9588572B2 (en) 2017-03-07
US20150067214A1 (en) 2015-03-05
US9891928B2 (en) 2018-02-13
US20150067215A1 (en) 2015-03-05
US10108431B2 (en) 2018-10-23
US20150067307A1 (en) 2015-03-05
US20170068546A1 (en) 2017-03-09
US20190095216A1 (en) 2019-03-28
US20150067368A1 (en) 2015-03-05
TWI637316B (zh) 2018-10-01
US9471133B2 (en) 2016-10-18
US20150067318A1 (en) 2015-03-05
US9535488B2 (en) 2017-01-03
US20150067219A1 (en) 2015-03-05
US20170003707A1 (en) 2017-01-05
US9891927B2 (en) 2018-02-13
US20150067250A1 (en) 2015-03-05
US20150067263A1 (en) 2015-03-05
US20160349824A1 (en) 2016-12-01
US20150067306A1 (en) 2015-03-05

Similar Documents

Publication Publication Date Title
TWI613588B (zh) 在核心間同步運作的方法、微處理器及電腦程式產品
US10635453B2 (en) Dynamic reconfiguration of multi-core processor
TWI613593B (zh) 在微處理器中至多核心的微碼傳播
CN108984464B (zh) 微处理器及在微处理器的处理核间同步的方法
CN107729055B (zh) 微处理器及其执行方法
CN109240481B (zh) 多核微处理器及使用其省电的方法
CN109165189B (zh) 微处理器及其配置方法、以及计算机可读存储介质
CN110046126B (zh) 多核微处理器及其重新配置方法、计算机可读存储介质
CN104216861B (zh) 微处理器及在微处理器中同步处理核的方法