TWI742964B - 用於異質計算之系統,方法,及設備 - Google Patents

用於異質計算之系統,方法,及設備 Download PDF

Info

Publication number
TWI742964B
TWI742964B TW109144238A TW109144238A TWI742964B TW I742964 B TWI742964 B TW I742964B TW 109144238 A TW109144238 A TW 109144238A TW 109144238 A TW109144238 A TW 109144238A TW I742964 B TWI742964 B TW I742964B
Authority
TW
Taiwan
Prior art keywords
memory
descriptor
accelerator
code
address
Prior art date
Application number
TW109144238A
Other languages
English (en)
Other versions
TW202121169A (zh
Inventor
肯特 葛羅索普
艾瑞科 努維塔希
愛德華 葛羅秋斯基
耕一 山田
羅柏 瓦倫泰
吉伯 尼格
湯瑪斯 弗雷契
馬克 查尼
理查 格瑞克
吉瑟斯 柯柏
羅傑 桑卡安
丹尼斯 布瑞福
尼爾 麥唐納
納拉雅 雷岡納森
保羅 卡波瑞歐里
約瑟夫 紐茲曼
尼可拉斯 卡特
阿席特 密許拉
黛博拉 馬爾
威特 曼利
賈尼許 凡卡堤
傑佛瑞 庫克
強納森 皮爾斯
拉克普文 摩蘇
麥可 歐漢隆
史帝芬 范多倫
蓋瑞特 德萊斯多
大衛 謝菲爾
Original Assignee
美商英特爾股份有限公司
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 美商英特爾股份有限公司 filed Critical 美商英特爾股份有限公司
Publication of TW202121169A publication Critical patent/TW202121169A/zh
Application granted granted Critical
Publication of TWI742964B publication Critical patent/TWI742964B/zh

Links

Images

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/4411Configuring for operating with peripheral devices; Loading of device drivers
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Steroid Compounds (AREA)
  • Treatment Of Liquids With Adsorbents In General (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)

Abstract

描述用於異質計算之系統、方法、及設備的實施例。於某些實施例中,硬體異質排程器係調度指令以供執行於複數異質處理元件之一或更多者上,該些指令係相應於碼片段以供由該些複數異質處理元件之該些一或更多者所處理,其中該些指令針對該些複數異質處理元件之該些一或更多者的至少一者為本機指令。

Description

用於異質計算之系統,方法,及設備
本發明一般係有關於計算裝置之領域,而更特別地,係有關於異質計算方法、裝置及系統。
於今日的電腦中,CPU履行通用計算工作,諸如運行應用程式軟體及作業系統。特殊化計算工作(諸如圖形和影像處理)係由圖形處理器、影像處理器、數位信號處理器、及固定功能加速器所處置。於今日的異質機器中,各類型的處理器係以不同的方式來編程。
相較於今日的通用處理器,大數據處理的時代要求以更低能量的更高性能。加速器(無論是定製的固定功能單元或定做的可編程單位,舉例而言)係協助滿足這些要求。隨著此領域正經歷快速的演化於演算法及工作量兩者上,該組可用的加速器係難以先驗地預測且極可能偏離一產品世代內之庫存單元而與產品世代一起發展。
於以下詳細描述中,參考其形成其一部分的後附圖形,其中類似的數字係指定遍及全文之類似部件,且其中係藉由可被實行之說明性實施例來顯示。應理解其他實施例可被利用,且結構或邏輯改變可被實行而不背離本發明之範圍。因此,下列詳細描述並非被取其限制性意義,且實施例之範圍係由後附申請專利範圍及其同等物來界定。
各個操作可被描述為多重離散的依序動作或操作,以一種最有助於瞭解所請求標的之方式。然而,描述之順序不應被當作暗示這些操作一定是跟順序相關的。特別地,這些操作可不以所提呈之順序來執行。所述之操作可被執行以與所述實施例不同的順序。各種額外操作可被執行及/或所述的操作可被省略於額外的實施例中。
為了本發明之目的,用語「A及/或B」表示(A)、(B)、或(A及B)。為了本發明之目的,用語「A、B及/或C」表示(A)、(B)、(C)、(A及B)、(A及C)、(B及C)、或(A、B及C)。
描述可使用用語「於一實施例中」、或「於實施例中」,其可指稱一或更多相同或者不同的實施例。再者,術語「包含」、「包括」、「具有」等等(如針對本發明之實施例所使用者)為同義的。
如先前技術中所討論,對於部署加速器解決方案及管理可攜式利用加速器之複雜度可能是有挑戰性的,因為有實施加速器的不同混合之寬廣範圍的庫存單元及平台。再者,給定多數作業系統(及版本、修補,等等),則經由裝置驅動程式模型以部署加速器具有包括以下之限制:針對由於開發者努力所致之採用的障礙、無可攜性、及大數據處理之嚴格性能需求。加速器通常為硬體裝置(電路),其比通用處理器上所運行的軟體更有效率地履行功能。例如,硬體加速器可被用以增進特定演算法/工作(諸如視頻編碼或解碼、特定雜湊功能,等等)或多類別演算法/工作(諸如機器學習、稀疏資料調處、密碼、圖形、物理、正規表式、封包處理、人工智慧、數位信號處理,等等)之執行。加速器之範例包括(但不限定於)圖形處理單元(「GPU」)、固定功能場可編程閘極陣列(「FPGA」)加速器、及固定功能特定應用積體電路(「ASIC」)。注意:加速器(於某些實施方式中)可為通用中央處理單元(「CPU」),假如該CPU比系統中之其他處理器更有效率的話。
既定系統(例如,系統單晶片(「SOC」)、處理器庫存單元、架,等等)之功率預算可由處理元件消耗於可用矽區域之一小部分上。如此使其有利的以建立多種特殊化硬體區塊,其係減少特定操作之能量消耗,即使並非所有硬體區塊均可同時地為現用的。
用以選擇處理元件(例如,核心或加速器)來處理執行緒、與處理元件互介面、及/或管理異質多處理器環境內之功率消耗的系統、方法、及設備之實施例被詳述。例如,於各個實施例中,異質多處理器被組態成(例如,藉由設計或藉由軟體):根據執行緒及/或處理元件之相應工作量的特性以動態地遷移執行緒於該些異質多處理器之不同類型的處理元件之間、提供程式介面給該些處理元件之一或更多者、轉譯碼以供執行於特定處理元件上、根據選定處理元件之工作量的特性以選擇供與選定處理元件使用之通訊協定、或其組合。
於第一形態中,工作量調度介面(亦即,異質排程器)提出同質多處理器編程模型給系統程式設計師。特別地,此形態可致能程式設計師開發針對特定架構(或同等抽象化)之軟體,並同時促成對於基礎硬體之持續改良而無須對於已開發軟體之相應改變。
於第二形態中,多協定鏈結容許第一單體(諸如異質排程器)使用與通訊相關的協定來與多數裝置通訊。此係取代應具有針對裝置通訊之分離鏈結的需求。特別地,此鏈結具有於其上動態地多工的三或更多協定。例如,共同鏈結支援包括以下之協定:1)生產者/消費者、發現、組態、中斷(PDCI)協定,用以致能裝置發現、裝置組態、錯誤報告、中斷、DMA式樣資料轉移及如可被指明於一或更多專屬或工業標準(諸如,例如,PCI Express規格或同等替代物)中之各種服務;2)快取代理同調(CAC)協定,用以致能裝置發送對於處理元件之同調讀取和寫入請求;及3)記憶體存取(MA)協定,用以致能處理元件存取另一處理元件之本地記憶體。
於第三形態中,執行緒(或其部分)之排程、遷移、或仿真係根據該執行緒之階段而被執行。例如,執行緒之資料平行階段通常被排程或遷移至SIMD核心;執行緒之執行緒平行階段通常被排程或遷移至一或更多純量核心;串列階段通常被排程或遷移至失序核心。該些核心類型之各者將能量或潛時最小化,其兩者被列入考量以供執行緒之排程、遷移、或仿真。假如排程或遷移不是可能的或有利的時,則仿真可被使用。
於第四形態中,執行緒(或其部分)被機率性地卸載至加速器。特別地,執行緒(或其部分)之加速器開始(ABEGIN)指令及加速器結束(AEND)指令係含括其可被執行於加速器上之指令。假如加速器非為可用,則介於ABEGIN與AEND之間的指令被執行如常。然而,當加速器為可用時,且想要使用該加速器(使用較少功率,舉例而言),則介於ABEGIN與AEND指令之間的指令被轉譯以執行於該加速器上且被排程以供執行於該加速器上。如此一來,加速器之使用是機率性的。
於第五形態中,執行緒(或其部分)被分析以供(機率性)卸載至加速器而不使用ABEGIN或AEND。軟體(或硬體)型態匹配係針對該執行緒(或其部分)而被運行,以用於其可被執行於加速器上之碼。假如加速器非為可用;或者執行緒(或其部分)不出借其本身給加速器執行,則該執行緒之指令被執行如常。然而,當加速器為可用時,且想要使用該加速器(使用較少功率,舉例而言),則該些指令被轉譯以執行於該加速器上且被排程以供執行於該加速器上。如此一來,加速器之使用是機率性的。
於第六形態中,履行碼片段(執行緒之部分)的轉譯以較佳地適應選定的目的地處理元件。例如,碼片段被:1)轉譯以利用不同的指令集,2)形成更為平行,3)形成更不平行(串列化),4)形成資料平行(例如,向量化),及/或5)形成更不資料平行(例如,非向量化)。
於第七形態中,工作佇列(無論是共用的或是專屬的)接收描述符,其係定義將由裝置所執行之工作的範圍。專屬工作佇列係儲存單一應用程式之描述符而共用工作佇列係儲存由多數應用程式所提呈之描述符。硬體介面/仲裁器係依據指明的仲裁策略(例如,根據各應用程式之處理需求及QoS/公平性策略)以從工作佇列調度描述符至加速器處理引擎。
於第八形態中,針對緊密矩陣乘法之改良係容許具有單指令之執行的二維矩陣乘法。複數緊縮資料(SIMD、向量)來源被相乘與單一緊縮資料來源。於某些例子中,二元樹被用於乘法。
圖1為異質多處理執行環境之表示。於此範例中,第一類型的碼片段(例如,與軟體執行緒相關的一或更多指令)係由異質排程器101所接收。碼片段可為任何數目的來源碼表示之形式,包括(例如)機器碼、中間表示、位元組碼、文字為基的碼(例如,組合碼、諸如C++等高階語言的來源碼),等等。異質排程器101提出同質多處理器編程模型(例如)以致所有執行緒針對使用者及/或作業系統係呈現為其正執行於純量核心上並判定已接收碼片段之工作量類型(程式階段);選擇處理元件之類型(純量、失序(OOO)、單指令多資料(SIMD)、或加速器),其係相應於用以處理該工作量之已判定的工作量類型(例如,純量用於執行緒平行碼、OOO用於串列碼、SIMD用於資料平行、及加速器用於資料平行);及排程碼片段以供由相應的處理元件所處理。於圖1中所示之特定實施方式中,處理元件類型包括純量核心103(諸如依序核心);單指令多資料(SIMD)核心105,其係操作於緊縮資料運算元上,其中暫存器具有連續儲存的多數資料元件;低潛時、失序核心107;及加速器109。於某些實施例中,純量核心103;單指令多資料(SIMD)核心105;低潛時、失序核心107位於異質處理器中,而加速器109位於此異質處理器外部。然而,應注意:處理元件之各種不同的配置可被利用。於某些實施方式中,異質排程器101將已接收的碼片段或其部分轉譯或解讀為一相應於選定類型的處理元件之格式。
處理元件103-109可支援不同的指令集架構(ISA)。例如,失序核心可支援第一ISA而依序核心可支援第二ISA。此第二ISA可為第一ISA之一集合(子或超)、或者為不同的。此外,處理元件可具有不同的微架構。例如,第一失序核心支援第一微架構而依序核心支援不同的、第二微架構。注意:即使於特定類型的處理元件內,ISA及微架構可以是不同的。例如,第一失序核心可支援第一微架構而第二失序核心可支援不同的微架構。指令針對特定ISA為「本機的」,由於其為該ISA之一部分。本機指令係執行於特定微架構上而無須外部改變(例如,轉譯)。
於某些實施方式中,處理元件之一或更多者被集成於單一晶粒上,例如,成為系統單晶片(SoC)。此類實施方式可受益(例如)自增進的通訊潛時、製造/成本、減少的管腳數、平台小型化,等等。於其他實施方式中,處理元件被封裝在一起,藉此達成上述之SoC的一或更多利益而非於單一晶粒上。這些實施方式可進一步受益(例如)自針對處理元件類型而最佳化的不同製程技術、較小的晶粒大小以供增加的產量、專屬智慧財產權區塊之整合,等等。於某些傳統的多封裝限制中,可能有挑戰性的是與不同裝置(隨著其被附加上)通訊。文中所討論的多協定鏈結係最小化(或減輕)此挑戰,藉由將不同類型的裝置之共同介面提出給使用者、作業系統(「OS」)等等。
於某些實施方式中,異質排程器101被實施以電腦可讀取媒體(例如,記憶體)中所儲存的軟體,以供執行於處理器核心(諸如OOO核心107)上。於這些實施方式中,異質排程器101被稱為軟體異質排程器。此軟體可實施二元轉譯器、及時(「JIT」)編譯器、OS 117(用以排程包括碼片段之執行緒的執行)、型態匹配器、其中的模組組件、或其組合。
於某些實施方式中,異質排程器101被實施以硬體,成為電路及/或由電路所執行的有限狀態機器。於這些實施方式中,異質排程器101被稱為硬體異質排程器。
從編程(例如,OS 117、仿真層、超管理器、安全監視器,等等)的觀點,各類型的處理元件103-109係利用一共用記憶體位址空間115。於某些實施方式中,共用記憶體位址空間115選擇性地包含兩類型的記憶體,記憶體211及記憶體213,如圖2中所示者。於此類實施方式中,記憶體之類型可被以多種方式分辨,包括(但不限定於):記憶體位置之差異(例如,位於不同的插口上,等等)、相應介面標準之差異(例如,DDR4、DDR5,等等)、功率需求之差異、及/或所使用的基礎記憶體技術之差異(例如,高頻寬記憶體(HBM)、同步DRAM,等等)。
共用記憶體位址空間115可由各類型的處理元件所存取。然而,於某些實施例中,不同類型的記憶體可被優先地配置給不同的處理元件,例如,根據工作量需求。例如,於某些實施方式中,平台韌體介面(例如,BIOS或UEFI)或記憶體儲存包括一欄位,用以指示該平台中可用之記憶體資源的類型及/或針對某些位址範圍或記憶體類型之處理元件偏好。
異質排程器101利用此資訊(當分析執行緒時)以判定在既定時點該執行緒應被執行於何處。通常,執行緒管理機制搜尋其可用的所有資訊以做出有關如何管理現存執行緒之通知決定。此可用多種方式證實其本身。例如,執行於特定處理元件(其具有針對實體上較接近該處理元件之位址範圍的偏好)上之執行緒可被提供優先處置,相較於一在正常環境下將被執行於該處理元件上之執行緒。
另一範例在於其一將受益自特定記憶體類型(例如,DRAM之較快版本)之執行緒可使其資料實體上移動至該記憶體類型及記憶體參考(以其被調整至指向共用位址空間之該部分的碼)。例如,雖然SIMD核心205上之執行緒可利用第二記憶體類型213,但是當加速器209為現用且需要該記憶體類型213(或至少需要其配置給SIMD核心205之執行緒)時則其可被移開自此使用。
範例情境是當記憶體為實體上相較於其他者更接近一處理元件時。常見情況是一加速器被直接地連接至與該些核心不同的記憶體類型。
於這些範例中,通常為OS起始資料移動。然而,沒有任何事物防止較低階(諸如異質排程器)履行此功能於其本身上或者利用來自另一組件(例如,OS)之協助。先前處理元件之資料是否被清除以及頁表項目是否被無效化係取決於用以執行此資料移動之實施方式及懲罰。假如資料不太可能被立即使用,則得以更可能僅從儲存複製而非從一記憶體類型移動資料至另一記憶體類型。
圖117(A)-(B)闡明共用記憶體中之執行緒的移動之範例。於此範例中,兩類型的記憶體係共用一位址空間,各具有該空間內之其本身的位址範圍。於117(A)中,共用記憶體11715包括第一類型的記憶體11701及第二類型的記憶體11707。第一類型的記憶體11701具有第一位址範圍11703,且於該範圍內為專屬於執行緒1 11705之位址。第二類型的記憶體11707具有第二位址範圍11709。
於執行緒1 11705之執行期間的某時點,異質排程器做出決定以移動執行緒1 11705,以致其第二執行緒11711係使用先前指派給執行緒1 11705之第一類型的記憶體11701中的位址。此被顯示於圖117(B)中。於此範例中,執行緒1 11705被再指派入第二類型的記憶體11707並提供新的一組位址以供使用;然而,此無須為必要。注意:介於記憶體類型之間的差異可為實體的或空間的(例如,根據與PE之距離)。
圖118闡明執行緒移動之範例方法,其可由異質排程器所履行。於11801,第一執行緒被指引以執行於諸如核心或加速器之第一處理元件(「PE」)上,使用共用記憶體空間中之第一類型的記憶體。例如,於圖117(A)中,此為執行緒1。
於稍後之某時點,對於執行第二執行緒之請求被接收於11803。例如,應用程式、OS等等請求硬體執行緒被執行。
於11805,做出其第二執行緒應使用共用位址空間中之第一類型的記憶體而執行於第二PE上之判定。例如,第二執行緒係用以運行於一直接耦合至第一類型的記憶體之加速器上,且該執行(包括釋放該第一執行緒正在使用之記憶體)是比讓該第二執行緒使用第二類型的記憶體更有效率的。
於某些實施例中,第一執行緒之資料係從第一類型的記憶體被移動至第二類型的記憶體,於11807。假如更有效率的是僅停止該第一執行緒之執行並於其位置開始另一執行緒,則此不一定會發生。
與該第一執行緒相關的變換後備緩衝(TLB)項目被無效化於11809。此外,於大部分實施例中,資料之清除被履行。
於11811,第二執行緒被指引至第二PE且被指派該第一類型的記憶體中之位址範圍,該位址範圍係先前被指派給第一執行緒的。
圖3闡明異質排程器301之範例實施方式。於某些例子中,排程器301為運行時間系統之部分。如圖所示,程式階段檢測器313係接收碼片段,並識別該碼片段之一或更多特性以判定執行之相應程式階段被最佳地特徵化為串列、資料平行、或執行緒平行。此如何被判定之範例被詳述於下。如針對圖1所詳述,碼片段可為任何數目的來源碼表示之形式。
針對循環碼片段,型態匹配器311係識別此「熱」碼;且(於某些例子中)亦識別相應的特性,其係指示與該碼片段相關的工作量可能更適於處理於不同的處理元件上。相關於型態匹配器311及其操作之進一步細節被提出於圖20之背景如下,舉例而言。
選擇器309係選擇一目標處理元件以執行已接收的碼片段之本機表示,至少部分地根據該處理元件之特性以及由電源管理器307所提供之熱及/或功率資訊。目標處理元件之選擇可為簡單地選擇最適於該碼片段者(亦即,介於工作量特性與處理元件能力之間的匹配),但亦可考量系統之目前功率消耗位準(例如,如可由電源管理器307所提供者)、處理元件之可用性、欲從一類型的記憶體移動至另一者之資料量(及用以執行此操作之相關懲罰),等等。於某些實施例中,選擇器309為一種實施於硬體中(或由硬體所執行)的有限狀態機器。
於某些實施例中,選擇器309亦選擇相應的鏈結協定以與該目標處理元件通訊。例如,於某些實施方式中,處理元件係利用相應的共同鏈結介面,其能夠動態地多工或囊封一系統組織或點對點互連上之複數協定。例如,於某些實施方式中,已支援的協定包括:1)生產者/消費者、發現、組態、中斷(PDCI)協定,用以致能裝置發現、裝置組態、錯誤報告、中斷、DMA式樣資料轉移及如可被指明於一或更多專屬或工業標準(諸如,例如,PCI Express規格或同等替代物)中之各種服務;2)快取代理同調(CAC)協定,用以致能裝置發送對於處理元件之同調讀取和寫入請求;及3)記憶體存取(MA)協定,用以致能處理元件存取另一處理元件之本地記憶體。選擇器309根據其將被傳遞至處理元件之請求的類型以做出這些協定之間的選擇。例如,生產者/消費者、發現、組態、或中斷請求係使用PDCI協定;快取同調性請求係使用CAC協定;而本地記憶體存取請求係使用MA協定。
於某些實施方式中,執行緒包括用以指示階段類型之標記,而如此一來階段檢測器則不被使用。於某些實施方式中,執行緒包括針對處理元件類型、鏈結協定及/或記憶體類型之暗示或明確請求。於這些實施方式中,選擇器309係利用此資訊於其選擇程序。例如,選擇器309之選擇可被執行緒及/或使用者所撤銷。
根據實施方式,異質排程器可包括一或更多轉換器,用以處理已接收的碼片段並產生針對目標處理元件之相應的本機編碼。例如,異質排程器可包括轉譯器,用以將第一類型的機器碼轉換為第二類型的機器碼;及/或及時編譯器,用以將中間表示轉換為針對目標處理元件為本機的格式。替代地(或除此之外),異質排程器可包括型態匹配器,用以識別循環碼片段(亦即,「熱」碼)並快取該碼片段之一或更多本機編碼或相應的微操作。這些選擇性組件之各者被顯示於圖3中。特別地,異質排程器301包括轉譯器303和及時編譯器305。當異質排程器301操作於目的碼或中間表示上時,則及時編譯器305被調用以將該已接收的碼片段轉換為針對目標處理元件103、105、107、109之一或更多者為本機的格式。當異質排程器301操作於機器碼(二元)上時,則二元轉譯器303將該已接收的碼片段轉換為針對該些目標處理元件之一或更多者為本機的機器碼(諸如(例如)當從一指令集轉譯至另一指令集時)。於替代實施例中,異質排程器301可省略這些組件之一或更多者。
例如,於某些實施例中,沒有包括二元轉譯器。此可能導致編程複雜度,因為程式將必須考量潛在地可用的加速器、核心等等,而非讓排程器負責此工作。例如,程式可能必須包括用於不同格式之常式的碼。然而,於某些實施例中,當沒有二元轉譯器時,則有JIT編譯器(其係於較高位準接受碼),且該JIT編譯器係履行必要的轉譯。當型態匹配器存在時,熱碼仍可被檢測以找出其應被運行於特定處理元件上之碼。
例如,於某些實施例中,沒有包括JIT編譯器。此亦可能導致增加的編程複雜度,因為程式將必須首先被編譯為針對特定ISA之機器碼,而非讓排程器負責此工作。然而,於某些實施例中,當有二元轉譯器而無JIT編譯器時,則排程器可於ISA之間轉譯,如以下所詳述者。當型態匹配器存在時,熱碼仍可被檢測以找出其應被運行於特定處理元件上之碼。
例如,於某些實施例中,沒有包括型態匹配器。此亦可能導致減少的效率,因為其可能已被移動的碼更有可能停留在用於運行中之特定工作的較無效率的核心上。
於某些實施例中,沒有二元轉譯器、JIT編譯器、或型態匹配器。於這些實施例中,僅有階段檢測或針對移動執行緒之明確請求被用於執行緒/處理元件指派/遷移。
再次參考圖1-3,異質排程器101可被實施以硬體(例如,電路)、軟體(例如,可執行程式碼)、或其任何組合。圖114闡明硬體異質排程器電路及其與記憶體之互動的範例。異質排程器可被形成以許多不同的方式,包括(但不限定於)成為場可編程閘極陣列(FPGA)為基的或特定應用積體電路(ASIC)為基的狀態機器、成為嵌入式微控制器,其係耦合至一其中儲存有軟體之記憶體以提供文中所詳述的功能、包含其他子組件(例如,資料危險檢測電路)之邏輯電路、及/或成為由失序核心所執行之軟體(例如,狀態機器)、成為由純量核心所執行之軟體(例如,狀態機器)、成為由SIMD核心所執行之軟體(例如,狀態機器)、或者其組合。於所示之範例中,異質排程器為電路11401,其包括用以履行各種功能之一或更多組件。於某些實施例中,此電路11401為處理器核心11419之一部分,然而,其可為晶片組之一部分。
執行緒/處理元件(PE)追蹤器11403係保持該系統中所執行之各執行緒以及各PE的狀態(例如,PE之可用性、其目前功率消耗,等等)。例如,追蹤器11403保持現用、閒置、或不活動之狀態於資料結構(諸如表)中。
於某些實施例中,型態匹配器11405識別「熱」碼、加速器碼、及/或其請求PE配置之碼。有關此匹配之更多細節被提供於後。
PE資訊11409係儲存有關哪些PE(及其類型)位於該系統中且可由OS所排程等等資訊。
雖然以上被詳述為異質排程器電路11401內之分離的組件,但該些組件可被結合及/或移動於異質排程器電路11401之外部。
耦合至異質排程器電路11401之記憶體11413可包括其提供額外功能之軟體以供執行(由核心及/或異質排程器電路11401)。例如,軟體型態匹配器11417可被使用,其係識別「熱」碼、加速器碼、及/或其請求PE配置之碼。例如,軟體型態匹配器11417比較該碼序列與記憶體中所儲存之預定組的型態。記憶體亦可儲存轉譯器,用以將碼從一指令集轉譯至另一指令集(諸如從一指令集至加速器為基的指令或基元)。
這些組件饋送選擇器11411,其做出以下選擇:用以執行執行緒之PE、欲使用哪種鏈結協定、哪種遷移應發生(假如有執行緒已執行於該PE上的話),等等。於某些實施例中,選擇器11411為實施於硬體電路中(或由硬體電路所執行)的有限狀態機器。
記憶體11413亦可包括(例如,於某些實施方式中)一或更多轉譯器11415(例如,二元、JIT編譯器,等等)被儲存於記憶體中以將執行緒碼轉譯為針對選定PE之不同格式。
圖115闡明軟體異質排程器之範例。軟體異質排程器可被形成以許多不同的方式,包括(但不限定於)成為場可編程閘極陣列(FPGA)為基的或特定應用積體電路(ASIC)為基的狀態機器、成為嵌入式微控制器,其係耦合至一其中儲存有軟體之記憶體以提供文中所詳述的功能、包含其他子組件(例如,資料危險檢測電路,等等)之邏輯電路、及/或成為由失序核心所執行之軟體(例如,狀態機器)、成為由純量核心所執行之軟體(例如,狀態機器)、成為由SIMD核心所執行之軟體(例如,狀態機器)、或者其組合。於所示之範例中,軟體異質排程器被儲存於記憶體11413中。如此一來,耦合至處理器核心11419之記憶體11413包括用以執行(由核心)來排程執行緒之軟體。於某些實施例中,軟體異質排程器為OS之部分。
根據實施方式,一核心中之執行緒/處理元件(PE)追蹤器11403係保持該系統中所執行之各執行緒以及各PE的狀態(例如,PE之可用性、其目前功率消耗,等等),或者此係使用執行緒/PE追蹤器11521而被履行於軟體中。例如,追蹤器保持現用、閒置、或不活動之狀態於資料結構(諸如表)中。
於某些實施例中,型態匹配器11405識別「熱」碼、及/或其請求PE配置之碼。有關此匹配之更多細節被提供於後。
PE資訊11409及/或11509係儲存有關哪些PE位於該系統中且可由OS所排程等等資訊。
軟體型態匹配器11417可被使用,其係識別「熱」碼、加速器碼、及/或其請求PE配置之碼。
執行緒/PE追蹤器、處理元件資訊、及/或型態匹配被饋送至選擇器11411,其做出以下選擇:用以執行執行緒之PE、欲使用哪種鏈結協定、哪種遷移應發生(假如有執行緒已執行於該PE上的話),等等。於某些實施例中,選擇器11411為由處理器核心11419所實施執行的有限狀態機器。
記憶體11413亦可包括(例如,於某些實施方式中)一或更多轉譯器11415(例如,二元、JIT編譯器,等等)被儲存於記憶體中以將執行緒碼轉譯為針對選定PE之不同格式。
於操作時,OS係利用異質排程器(諸如,例如,異質排程器101、301)來排程並致使執行緒被處理,其係提出執行環境之抽象化。
下表係概述潛在抽象化特徵(亦即,程式看見什麼)、潛在設計自由度及架構最佳化(亦即,什麼被隱藏自程式設計師)、及提供特定特徵於抽象化中之潛在優點或原因。
程式看見 藉由轉譯而隱藏自程式設計師 原因
對稱多處理器 異質多處理器 異質性隨著時間而改變
於純量核心上之所有執行緒 於SIMD及潛時核心上之較少執行緒。 執行緒遷移。 程式設計師產生執行緒,但該些執行緒被執行於何處之細節被隱藏。
完整指令集 未以硬體實施之完整ISA   
緊密算術指令 無法被實施以所有核心中之硬體 需要程式設計師、編譯器、或程式庫以明確地使用這些指令
具有記憶體排序之共用記憶體    記憶體排序不是依序核心之問題。
於某些範例實施方式中,異質排程器(結合其他硬體和軟體資源)提出完整編程模型,其係運行每件事並支援所有編程技術(例如,編譯器、本質、組合、程式庫、JIT、卸載、裝置)。其他範例實施方式係提出替代執行環境,其係符合由其他處理器開發公司(諸如ARM Holdings, Ltd.、MIPS、IBM、或其被授權者或採用者)所提供的那些。
圖119為一組態成提出如上所詳述之摘要執行環境的處理器之方塊圖。於此範例中,處理器11901包括數個不同的核心類型,諸如圖1中所詳述的那些。各(寬)SIMD核心11903包括熔凝乘累積/加(FMA)電路(其支援緊密算術基元)、其本身的快取(例如,L1和L2)、特殊用途執行電路、及用於執行緒狀態之儲存。
各潛時最佳化(OOO)核心11913包括熔凝乘累積/加(FMA)電路、其本身的快取(例如,L1和L2)、及失序執行電路。
各純量核心11905包括熔凝乘累積/加(FMA)電路、其本身的快取(例如,L1和L2)、特殊用途執行電路、及儲存執行緒狀態。通常,純量核心11905支援足夠的執行緒以承擔記憶體潛時。於某些實施方式中,SIMD核心11903及潛時最佳化核心11913之數目與純量核心11905之數目相較之下算是小的。
於某些實施例中,包括一或更多加速器11905。這些加速器11905可以是固定功能的或者FPGA為基的。替代地(或除了這些加速器11905之外),於某些實施例中,加速器11905位於處理器外部。
處理器11901亦包括由該些核心所共用的最後階快取(LLC)11907以及位於該處理器中之潛在地任何加速器。於某些實施例中,LLC 11907包括用於快速原子學之電路。
一或更多互連11915將該些核心及加速器耦合至彼此以及外部介面。例如,於某些實施例中,網目互連係耦合各個核心。
記憶體控制器11909將該些核心及/或加速器耦合至記憶體。
複數輸入/輸出介面(例如,以下所詳述之PCIe、共同鏈結)11911係連接處理器11901至外部裝置(諸如其他處理器及加速器)。
圖4闡明電腦系統之系統開機及裝置發現的實施例。包括(例如)哪些核心為可用的、有多少記憶體為可用的、相對於該些核心之記憶體位置等等系統的知識係由異質排程器所利用。於某些實施例中,此知識係使用先進組態及電力介面(ACPI)來建立。
於401,電腦系統被開機。
於403,做出對於組態設定之查詢。例如,於某些BIOS為基的系統中,當開機時,BIOS係測試該系統並準備該電腦以供操作,藉由對其本身的記憶體庫查詢驅動及其他組態設定。
於405,做出針對插入式組件之搜尋。例如,BIOS搜尋電腦中之任何插入式組件並設定記憶體中之指針(中斷向量)以存取那些常式。BIOS接受來自裝置驅動程式以及應用程式之請求以與硬體及其他周邊裝置互動。
於407,系統組件(例如,核心、記憶體,等等)之資料結構被產生。例如,BIOS通常係產生硬體裝置及周邊裝置組態資訊,OS係從該組態資訊以與附加裝置介接。再者,ACPI係定義一種用於系統電路板之彈性且可延伸硬體介面,並致能電腦將其周邊開啟和關閉以利增進的功率管理,特別在諸如筆記型電腦等可攜式裝置中。ACPI規格包括硬體介面、軟體介面(API)、及資料結構,其(當實施時)係支援OS導向的組態和功率管理。軟體設計師可使用ACPI以集成涵蓋電腦系統之功率管理特徵,該電腦系統包括硬體、作業系統、及應用程式軟體。此集成係致能OS判定哪些裝置為現用,並處置用於電腦子系統及周邊的所有功率管理資源。
於409,作業系統(OS)被載入並獲得控制。例如,一旦BIOS已完成其啟動常式,其便將控制傳遞至OS。當ACPI BIOS傳遞電腦之控制至OS時,BIOS便將一含有ACPI名稱空間之資料結構輸出至OS,該資料結構可被圖形地表示為樹狀。名稱空間係作用為連接至該電腦之ACPI裝置的目錄,並包括其進一步定義或提供狀態資訊給各ACPI裝置之物件。該樹中之各節點係與裝置相關聯,而該些節點、子節點、及葉係代表物件,其(當由OS所評估時)將控制該裝置或回覆指定資訊至OS,如由ACPI規格所定義者。OS(或由OS所存取之驅動程式)可包括一組函數,用以編號並評估名稱空間物件。當OS呼叫函數以回覆ACPI名稱空間中之物件的值時,則OS被稱為評估該物件。
於某些例子中,可用裝置改變。例如,加速器、記憶體等等被加入。用於系統開機後裝置發現之方法的實施例被闡明於圖116。例如,此方法之實施例可被用以發現一已被加至開機後之系統的加速器。已連接裝置被啟動或重設之指示被接收於11601。例如,端點裝置被插入至PCIe插槽,或(例如)由OS所重設。
於11603,鏈結訓練被履行以該連接裝置且該已連接裝置被初始化。例如,PCIe鏈結訓練被履行以建立鏈結組態參數,諸如鏈結寬度、巷道極性、及/或最大支援資料速率。於某些實施例中,已連接裝置之能力被儲存(例如,於ACPI表中)。
當已連接裝置完成初始化時,則備妥訊息係從已連接裝置被傳送至系統,於11605。
於11607,已連接裝置備妥狀態位元被設定以指示該裝置已備妥以供組態。
已初始化、已連接裝置被組態於11609。於某些實施例中,該裝置及OS商定一針對該裝置之位址(例如,記憶體映射的I/O (MMIO)位址)。該裝置提供裝置描述符,其包括以下之一或更多者:供應商識別號(ID)、裝置ID、模型號、序號、特性、資源需求,等等。OS可根據描述符資料和系統資源以判定該裝置之額外操作及組態參數。OS可產生組態查詢。該裝置可回應以裝置描述符。OS接著產生組態資料並傳送此資料至該裝置(例如,透過PCI硬體)。此可包括基礎位址暫存器之設定,用以定義與該裝置相關的位址空間。
在系統之知識被建立以後,OS便利用異質排程器(諸如,例如,異質排程器101、301)以排程並致使執行緒被處理。異質排程器接著將各執行緒之碼片段動態地且透明地(例如,對於使用者及/或OS而言)映射至最適當類型的處理元件,藉此潛在地避免應建立針對傳統架構特徵之硬體的需求、及潛在地避免應暴露微架構之細節給系統程式設計師或OS的需求。
於某些範例中,最適當類型的處理元件係根據處理元件之能力以及碼片段之執行特性來判定。通常,程式及相關的執行緒可根據在既定時點所被處理之工作量而具有不同的執行特性。範例執行特性(或執行之階段)包括(例如)資料平行階段、執行緒平行階段、及串列階段。下表係識別這些階段並概述其特性。該表亦包括範例工作量/操作、可用於處理各階段類型之範例硬體、及所使用之階段和硬體的典型目標。
階段 特性 範例 硬體 目標
資料平行 許多資料元件可使用相同的控制流而被同時地處理。 -影像處理 -矩陣乘法 -卷積 -神經網路 -寬SIMD -緊密算術基元 最小化能量
執行緒平行 資料相依分支係使用獨特的控制流 -圖形遍歷 -搜尋 -小純量核心之陣列 最小化能量
串列 沒有很多工作待執行 -介於平行階段之間的串列階段 -關鍵區段 -小資料集合 -深臆測 -失序 最小化潛時
於某些實施方式中,異質排程器被組態成於執行緒遷移與仿真之間選擇。於其中各類型的處理元件可處理任何類型的工作量(有時需要仿真來如此做)之組態中,最適當處理元件係根據一或更多準則而針對各程式階段來選擇,該些準則包括(例如)工作量之潛時需求、與仿真相關之增加的執行潛時、處理元件之功率和熱特性以及限制,等等。如稍後將被詳述,適當處理元件之選擇(於某些實施方式中)係藉由考量運行中之執行緒數目並檢測碼片段中之SIMD指令或可向量化碼的存在來完成。
於處理元件之間移動執行緒並非無懲罰的。例如,資料可能需從共用快取被移入較低階快取,且原始處理元件和接收者處理元件兩者將使其管線被清除以適應該移動。因此,於某些實施方式中,異質排程器係實施滯後以避免太頻繁的遷移(例如,藉由設定上述一或更多準則、或其子集之臨限值)。於某些實施例中,滯後係藉由限制執行緒遷移不超過預定速率(例如,每毫秒一遷移)來實施。如此一來,遷移之速率被限制以避免由於碼產生、同步化、及資料遷移所致之過量超載。
於某些實施例中,例如當遷移未被異質排程器選定為針對特定執行緒之較佳方式時,則異質排程器便仿真該執行緒之遺失功能於配置的處理元件中。例如,於一其中可用於作業系統之執行緒總數保持恆定的實施例中,異質排程器可仿真多線程在當可用的硬體執行緒數(例如,於寬同時多線程核心中)被超額預約時。於純量或潛時核心上,執行緒之一或更多SIMD指令被轉換為純量指令;或者於SIMD核心上,更多執行緒被大量生產及/或指令被轉換以利用緊縮資料。
圖5闡明根據程式階段至三種類型處理元件之映射的執行緒遷移之範例。如圖所示,三種類型的處理元件包括潛時最佳化(例如,失序核心、加速器,等等)、純量(每指令一次處理一資料項目)、及SIMD(每指令處理複數資料元件)。通常,此映射係由異質排程器所履行以一種對於程式設計師及作業系統而言是透明的方式,以每執行緒或碼片段為基的。
一種實施方式係使用異質排程器來映射工作量之各階段至最適當類型的處理元件。理想地,如此係減輕應建立傳統特徵之硬體的需求並避免暴露微架構之細節,因為該異質排程器係提出一種完整編程模型,其支援:諸如編譯碼(機器碼)等多數碼類型、本質(其直接映射至處理器或加速器指令之程式語言建構)、組合碼、程式庫、中間(JIT為基的)、卸載(從一機器類型移動至另一者)、及裝置特定的。
於某些組態中,目標處理元件之預設選擇是潛時最佳化處理元件。
再次參考圖5,針對一工作量之執行的串列階段501一開始被處理於一或更多潛時最佳化處理元件上。於檢測到階段轉移時(例如,以一種隨著該碼變得更為資料平行的動態方式;或者在執行之前,如由(例如)在執行前(或期間)於該碼中所發現之該類型的指令所見者),工作量被遷移至一或更多SIMD處理元件以完成執行之資料平行階段503。此外,執行排程及/或變換通常被快取。之後,工作量被遷移回至一或更多潛時最佳化處理元件、或者至第二組一或更多潛時最佳化處理元件,以完成執行之下一串列階段505。接下來,工作量被遷移至一或更多純量核心以處理執行之執行緒平行階段507。接著,工作量被遷移回至一或更多潛時最佳化處理元件以便完成執行之下一串列階段509。
雖然此說明性範例係顯示返回至潛時最佳化核心,但異質排程器亦可繼續任何後續階段之執行於一或更多相應類型的處理元件上直到該執行緒被終止。於某些實施方式中,處理元件係利用工作佇列以儲存其應被完成之工作。如此一來,工作可不用立即開始,而是隨著該佇列中之其任務到來而被執行。
圖6為由異質排程器(諸如異質排程器101,舉例而言)所履行之範例實施方式流程。此流程描繪處理元件(例如,核心)之選擇。如圖所示,碼片段係由異質排程器所接收。於某些實施例中,已發生一事件,包括(但不限定於):執行緒喚醒命令;寫入至頁目錄基礎暫存器;睡眠命令;執行緒中之階段改變;及指示所欲再配置之一或更多指令。
於601,異質排程器判定是否有平行性於碼片段中(例如,為串列階段或平行階段中之碼片段),例如,根據測得的資料相依性、指令類型、及/或控制流指令。例如,充滿SIMD碼之執行緒將被視為平行。假如碼片段不符合平行處理,則異質排程器便選擇一或更多潛時敏感處理元件(例如,OOO核心)以處理碼片段於執行之串列階段603中。通常,OOO核心具有(深)臆測及動態排程且經常具有每瓦特之較低的性能(相較於更簡單的替代物)。
於某些實施例中,沒有潛時敏感處理元件可用,因為其通常比純量核心消耗更多的功率及和晶粒空間。於這些實施例中,僅有純量、SIMD、及加速器核心可用。
針對平行碼片段、可平行碼片段、及/或可向量化碼片段,異質排程器係判定碼之平行的類型,於605。針對執行緒平行碼片段,異質排程器係選擇執行緒平行處理元件(例如,多處理器純量核心),於607。執行緒平行碼片段包括獨立的指令序列,其可被同時地執行於分離的純量核心上。
資料平行碼係發生在當各處理元件執行相同工作於不同件的資料上時。資料平行碼可進入以不同的資料佈局:緊縮及隨機。資料佈局被判定於609。隨機資料可被指派給SIMD處理元件,但是需要利用:收集指令613(用以從不同記憶體位置拉出資料)、空間計算陣列615(空間地映射計算至小型編程處理元件之陣列(例如,FPGA之陣列)上)、或純量處理元件617之陣列。緊縮資料被指派給SIMD處理元件或其使用緊密算術基元之處理元件,於611。
於某些實施例中,履行碼片段的轉譯以較佳地適應選定的目的地處理元件。例如,碼片段被:1)轉譯以利用不同的指令集,2)形成更為平行,3)形成更不平行(串列化),4)形成資料平行(例如,向量化),及/或5)形成更不資料平行(例如,非向量化)。
在處理元件被選擇之後,碼片段被傳輸至已判定的處理元件之一以供執行。
圖7闡明藉由異質排程器之執行緒目的地選擇的方法之範例。於某些實施例中,此方法係由二元轉譯器所履行。於701,待評估的執行緒(或其碼片段)被接收。於某些實施例中,已發生一事件,包括(但不限定於):執行緒喚醒命令;寫入至頁目錄基礎暫存器;睡眠命令;執行緒中之階段改變;及指示所欲再配置之一或更多指令。
碼片段是否等應被卸載至加速器之判定被執行於703。例如,碼片段是否應被傳送至加速器。當該碼包括其識別期望使用加速器之碼時,則異質排程器可知道此為正確的動作。此期望可為:識別符,其係指示碼之一區可被執行於加速器上或者被本機地執行(例如,文中所述之ABEGIN/AEND)、或者使用特定加速器之明確命令。
於某些實施例中,履行碼片段的轉譯以較佳地適應選定的目的地處理元件於705。例如,碼片段被:1)轉譯以利用不同的指令集,2)形成更為平行,3)形成更不平行(串列化),4)形成資料平行(例如,向量化),及/或5)形成更不資料平行(例如,非向量化)。
通常,已轉譯執行緒被快取於707以供稍後使用。於某些實施例中,二元轉譯器係本地地快取已轉譯執行緒以致其可用於未來之二元轉譯器的使用。例如,假如該碼變為「熱」(重複地執行),則快取係提供一種機制以供未來使用而無轉譯懲罰(雖然可能有傳輸成本)。
該(已轉譯)執行緒被傳輸(例如,卸載)至目的地處理元件於709,以供處理。於某些實施例中,已轉譯執行緒係由接收者所快取以致其為本地地可供未來使用。再次,假如接收者或二元轉譯器判定其該碼為「熱」,則此快取將致能較快的執行而使用較少的能量。
於711,異質排程器判定是否有平行性於碼片段中(例如,為串列階段或平行階段中之碼片段),例如,根據測得的資料相依性、指令類型、及/或控制流指令。例如,充滿SIMD碼之執行緒將被視為平行。假如碼片段不符合平行處理,則異質排程器便選擇一或更多潛時敏感處理元件(例如,OOO核心)以處理碼片段於執行之串列階段713中。通常,OOO核心具有(深)臆測及動態排程而因此可具有每瓦特之較佳的性能(相較於純量替代物)。
於某些實施例中,沒有潛時敏感處理元件可用,因為其通常比純量核心消耗更多的功率及和晶粒空間。於這些實施例中,僅有純量、SIMD、及加速器核心可用。
針對平行碼片段、可平行碼片段、及/或可向量化碼片段,異質排程器係判定碼之平行的類型,於715。針對執行緒平行碼片段,異質排程器係選擇執行緒平行處理元件(例如,多處理器純量核心),於717。執行緒平行碼片段包括獨立的指令序列,其可被同時地執行於分離的純量核心上。
資料平行碼係發生在當各處理元件執行相同工作於不同件的資料上時。資料平行碼可進入以不同的資料佈局:緊縮及隨機。資料佈局被判定於719。隨機資料可被指派給SIMD處理元件,但需要利用:收集指令723、空間計算陣列725、或純量處理元件727之陣列。緊縮資料被指派給SIMD處理元件或其使用緊密算術基元之處理元件,於721。
於某些實施例中,履行非卸載碼片段的轉譯以較佳地適應判定的目的地處理元件。例如,碼片段被:1)轉譯以利用不同的指令集,2)形成更為平行,3)形成更不平行(串列化),4)形成資料平行(例如,向量化),及/或5)形成更不資料平行(例如,非向量化)。
在處理元件被選擇之後,碼片段被傳輸至已判定的處理元件之一以供執行。
OS看見其為潛在地可用的執行緒之總數,無論何種核心及加速器為可用的。於以下描述中,各執行緒係由稱為邏輯ID之執行緒識別符(ID)所評估。於某些實施方式中,作業系統及/或異質排程器係利用邏輯ID以將執行緒映射至特定的處理元件類型(例如,核心類型)、處理元件ID、及該處理元件上之執行緒ID(例如,核心類型、核心ID、執行緒ID之元組)。例如,純量核心具有核心ID及一或更多執行緒ID;SIMD核心具有核心ID及一或更多執行緒ID;OOO核心具有核心ID及一或更多執行緒ID;及/或加速器具有核心ID及一或更多執行緒ID。
圖8闡明使用條狀映射於邏輯ID之概念。條狀映射可由異質排程器所使用。於此範例中,有8個邏輯ID及三種核心類型,其各具有一或更多執行緒。通常,從邏輯ID至(核心ID、執行緒ID)之映射係經由除法及模數運算來計算且可被固定以保存軟體執行緒偏好。從邏輯ID至(核心類型)之映射係由異質排程器所彈性地履行以適應其可存取OS之未來新的核心類型。
圖9闡明使用條狀映射於邏輯ID之範例。於範例中,邏輯ID 1、4、及5被映射至第一核心類型而所有其他邏輯ID被映射至第二核心類型。第三核心類型未被利用。
於某些實施方式中,核心類型之群組被形成。例如,「核心群組」元組可包括:一OOO元組以及所有純量、SIMD、和加速器核心元組(其邏輯ID係映射至該相同的OOO元組)。圖10闡明核心群組之範例。通常,串列階段檢測及執行緒遷移被履行於相同的核心群組內。
圖11闡明於一種利用二元轉譯器切換機制之系統中的執行緒執行之方法的範例。於1101,執行緒正執行於核心上。該核心可為包括加速器之文中所詳述的任何類型。
於該執行緒之執行期間的某時點,潛在的核心再配置事件發生於1103。範例核心再配置事件包括(但不限定於):執行緒喚醒命令;寫入至頁目錄基礎暫存器;睡眠命令;執行緒中之階段改變;及指示所欲再配置至不同核心之一或更多指令。
於1105,該事件被處置且有關該核心配置中是否將有改變的判定被做出。以下係詳述有關一特定核心配置之處置的範例方法。
於某些實施例中,核心(再)配置容易遭受一或更多限制因素,諸如遷移速率限制及功率消耗限制。遷移速率限制係經由核心類型、核心ID、及執行緒ID而被追蹤。一旦執行緒已被指派給目標(核心類型、核心ID、執行緒ID),則計時器由二元轉譯器所開始並維持。無其他執行緒將被遷移至相同的目標直到該計時器已截止。如此一來,雖然執行緒可在計時器截止之前遷移離開其目前核心,但反之則非為真。
如上所述,隨著更多核心類型(包括加速器)被加至計算系統(無論是晶粒上或晶粒外),功率消耗限制很可能具有漸增的聚焦。於某些實施例中,計算出由所有核心上之所有運行執行緒所消耗的瞬時功率。當計算出的功率消耗超過臨限值時,則新的執行緒被僅配置至較低功率核心(諸如SIMD、純量、及專屬加速器核心),而一或更多執行緒被強力地從OOO核心遷移至該些較低功率核心。注意:於某些實施方式中,功率消耗限制具有高於遷移速率限制之優先權。
圖12闡明針對加速器之熱碼的核心配置的範例方法。於1203,判定其該碼為「熱」。碼之熱部分可指稱其根據諸如以下考量為比其他部分更適於執行於一核心上的碼之一部分:功率、性能、熱、其他已知的處理器度量、或其組合。此判定可使用任何數目的技術來做出。例如,動態二元最佳化器可被用以監督執行緒之執行。熱碼可根據其記錄程式執行期間之靜態碼的動態執行頻率(等等)之計數器值而被檢測。於其中一核心為OOO核心而另一核心為依序核心之實施例中,則碼之熱部分可指稱其較適於被執行於串列核心上之程式碼的熱點,其潛在地具有更多的可用資源以供高度再現區段之執行。經常具有高再現型態之碼的區段可被最佳化以被更有效率地執行於依序核心上。基本上,於此範例中,冷碼(低再現)被分佈至本機的、OOO核心;而熱碼(高再現)被分佈至軟體管理的、依序核心。碼之熱部分可被靜態地、動態、或其組合地識別。於第一情況下,編譯器或使用者可判定程式碼之一區段為熱碼。於一實施例中,一核心中之解碼邏輯適以解碼來自該程式碼之熱碼識別符指令,其係用以識別該程式碼之該熱部分。此一指令之提取或解碼可觸發核心上之碼的熱區段之轉譯及/或執行。於另一範例中,碼執行被剖析執行,且根據其輪廓之特性 - 與執行相關的功率及/或性能度量 - 該程式碼之一區可被識別為熱碼。類似於硬體之操作,監督碼可被執行於一核心上以履行其正被執行於其他核心上之程式碼的監督/剖析。注意:此監督碼可為保持於該些碼內之儲存結構中或者保持於包括處理器之系統中的碼。例如,監督碼可為保持於核心之儲存結構中的微碼、或其他碼。當作又另一範例,熱碼之靜態識別被形成為暗示。但該程式碼執行之動態剖析能夠忽略碼之一區的靜態識別為熱;此類型的靜態識別常被稱為其動態剖析可列入考量以判定哪個核心適於碼分佈的編譯器或使用者暗示。再者,由於為動態剖析之本質,碼之一區的識別為熱不會將碼之該區段限制成永遠被識別為熱。在轉譯及/或最佳化之後,碼區段之已轉譯版本被執行。
適當的加速器被選擇於1203。二元轉譯器、虛擬機器監視器、或作業系統係根據可用的加速器及所欲的性能以進行此選擇。於許多例子中,加速器比更大、更一般的核心更適於以每瓦特之較佳性能來執行熱碼。
熱碼被傳輸至選定的加速器,於1205。此傳輸係利用如文中所詳述之適當連接類型。
最後,熱碼係由選定的加速器所接收並執行,於1207。當執行時,熱碼可針對配置至不同核心而被評估。
圖13闡明針對喚醒或寫入至頁目錄基礎暫存器事件之潛在核心配置的範例方法。例如,此闡明判定碼片段之階段。於1301,喚醒事件或頁目錄基礎暫存器(例如,工作切換)事件被檢測。例如,喚醒事件係針對由停止執行緒接收到中斷或者等待狀態離開而發生。寫入至頁目錄基礎暫存器可指示串列階段之開始或停止。通常,此檢測係發生於執行二元轉譯器之核心上。
於1303,計算其將相同頁表基礎指針共用為喚醒、或經歷工作切換之執行緒的核心之數目。於某些實施方式中,表被用以將邏輯ID映射至特定異質核心。該表係由邏輯ID來索引。該表之各項目含有:一旗標(其指示邏輯ID是否目前正在運行或者停止)、一旗標(其指示是否偏好SIMD或純量核心)、頁表基礎位址(例如,CR3)、一值(其指示該邏輯ID目前正被映射至之核心的類型)、及計數器(用以限制遷移速率)。
屬於相同程序之執行緒係共用相同的位址空間、頁表、及頁目錄基礎暫存器值。
於1305,做出有關被計數之核心的數目是否大於1的判定。此計數係判定該執行緒是否為串列或平行階段。當計數為1,則經歷該事件之該執行緒係處於串列階段1311。如此一來,串列階段執行緒為一種於相同核心群組中的所有執行緒之間具有獨特頁目錄基礎暫存器值之執行緒  圖14闡明串列階段執行緒之範例。如圖所示,一程序具有一或更多執行緒且各程序具有其本身的配置位址。
當經歷該事件之該執行緒未被指派給OOO核心時,則其被遷移至OOO核心,而該OOO核心上之現存執行緒被遷移至SIMD或純量核心,於1313或1315。當經歷該事件之該執行緒被指派給OOO核心時,則其於大部分情況下停留在該處。
當該計數大於1時,則經歷該事件之該執行緒係處於平行階段並做出平行階段之類型的判定於1309。當經歷該事件之該執行緒處於資料平行階段時,假如該執行緒未被指派給SIMD核心則其被指派給SIMD核心,否則其保持於該SIMD核心上(假如其已於該處),於1313。
當經歷該事件之該執行緒處於資料平行階段時,假如該執行緒未被指派給SIMD核心則其被指派給SIMD核心,否則其保持於該SIMD核心上(假如其已於該處),於1313。
當經歷該事件之該執行緒處於執行緒平行階段時,假如該執行緒未被指派給純量核心則其被指派給一純量核心,否則其保持於該純量核心上(假如其已於該處),於1315。
此外,於某些實施方式中,一旗標(其指示該執行緒正運行中)被設定給該執行緒之邏輯ID。
圖15闡明針對回應於睡眠命令事件之執行緒的潛在核心配置之範例方法。例如,此闡明判定碼片段之階段。於1501,檢測到影響該執行緒之睡眠事件。例如,停止、等待進入及逾時、或暫停命令已發生。通常,此檢測係發生於執行二元轉譯器之核心上。
於某些實施例中,一旗標(其指示該執行緒正運行中)被清除針對該執行緒之邏輯ID,於1503。
於1505,計算其將相同頁表基礎指針共用為睡眠執行緒的核心之執行緒的數目。於某些實施方式中,表被用以將邏輯ID映射至特定異質核心。該表係由邏輯ID來索引。該表之各項目含有:一旗標(其指示邏輯ID是否目前正在運行或者停止)、一旗標(其指示是否偏好SIMD或純量核心)、頁表基礎位址(例如,CR3)、一值(其指示該邏輯ID目前正被映射至之核心的類型)、及計數器(用以限制遷移速率)。來自該群組之第一運行執行緒(具有任何頁表基礎指針)被標記。
做出有關該系統中之OOO核心是否為閒置的判定,於1507。閒置OOO核心不具有正積極地執行之OS執行緒。
當頁表基礎指針係由該核心群組中之剛好一執行緒所共用時,則該共用執行緒係從SIMD或純量核心被移動至OOO核心,於1509。當頁表基礎指針係由多於一執行緒所共用時,則該群組之第一運行執行緒(其先前被標記)為從SIMD或純量核心遷移至OOO核心之執行緒(於1511)以保留空間給醒來的執行緒(其係執行以取代該第一運行執行緒)。
圖16闡明針對回應於階段改變事件之執行緒的潛在核心配置之範例方法。例如,此闡明判定碼片段之階段。於1601,檢測到潛在階段改變事件。通常,此檢測係發生於執行二元轉譯器之核心上。
做出有關該執行緒之邏輯ID是否運行於純量核心上且SIMD指令是否存在的判定,於1603。假如沒有此等SIMD指令,則該執行緒繼續執行如常。然而,當有SIMD指令存在於其運行於純量核心上之該執行緒中時,則該執行緒被遷移至SIMD核心,於1605。
做出有關該執行緒之邏輯ID是否運行於SIMD核心上且SIMD指令是否存在的判定,於1607。假如有SIMD指令,則該執行緒繼續執行如常。然而,當沒有SIMD指令存在於其運行於SIMD核心上之該執行緒中時,則該執行緒被遷移至純量核心,於1609。
如遍及本說明書所述,可存取自二元轉譯器之加速器可提供更有效率的執行(包括更有能量效率的執行)。然而,能夠針對可用的各潛在加速器而編程可能是一件困難的(假如不是不可能的)工作。
文中所詳述者為使用描繪指令以明確地標示執行緒之一部分的潛在加速器為基的執行之開始和結束的實施例。當沒有可用加速器時,則介於描繪指令之間的碼被執行如未使用加速器。於某些實施方式中,介於這些指令之間的碼可放寬其運行於上之核心的某些語意。
圖17闡明一描繪加速區之碼的範例。此區之第一指令為加速開始(ABEGIN)指令1701。於某些實施例中,ABEGIN指令提供許可以進入相對於非加速器核心之執行的放寬(子)模式。例如,於某些實施方式中之ABEGIN指令係容許程式設計師或編譯器於該指令之欄位中指示該子模式之哪些特徵係不同於標準模式。範例特徵包括(但不限定於)以下之一或更多者:忽略自行修改碼(SMC)、弱化記憶體一致性模型限制(例如,放寬儲存排序需求)、更改浮點語意、改變性能監督(perfmon)、更改架構旗標使用,等等。於某些實施方式中,SMC是碼段中之寫入至記憶體位置,其目前被快取於該處理器中而造成相關快取線(或線)被無效化。假如該寫入係影響預提取指令,則預提取佇列被無效化。此後者檢查係根據該指令之線性位址。於碼段中之指令的寫入或監聽(其中該目標指令已被解碼且駐存在軌線快取中)係無效化整個軌線快取。SMC可藉由關閉變換後備緩衝中之SMC檢測電路而被忽略。例如,記憶體一致性模型限制可藉由改變一或更多暫存器或表(諸如記憶體類型範圍暫存器或頁屬性表)而被更改。例如,當改變浮點語意時,浮點執行電路如何履行浮點計算係透過使用一或更多其控制這些電路之行為的控制暫存器(例如,設定浮點單元(FPU)控制字元暫存器)而被更改。其可改變之浮點語意包括(但不限定於)捨入模式、例外遮罩和狀態旗標如何被處理、清除至零、設定非正常、及精確度(例如,單、雙、及延伸)控制。此外,於某些實施例中,ABEGIN指令容許明確的加速器類型偏好以致其假如有偏好類型的加速器可用則其將被選擇。
非加速器碼1703係接續於該ABEGIN指令1701。此碼對於該系統之處理器核心為本機的。最差地,假如沒有加速器可用、或者ABEGIN不被支援,則此碼被執行於該核心上如現狀。然而,於某些實施方式中,該子模式被用於該執行。
藉由具有加速結束(AEND)指令1705,則執行被閘控於處理器核心上直到該加速器似乎已完成其執行。有效地,ABEGIN及AEND係容許程式設計師選擇/退出使用加速器及/或執行之放寬模式。
圖18闡明一種使用硬體處理器核心中之ABEGIN的執行之方法的實施例。於1801,執行緒之ABEGIN指令被提取。如先前所述,ABEGIN指令通常包括用以定義執行之不同(子)模式的一或更多欄位。
提取的ABEGIN指令係使用解碼電路而被解碼於1803。於某些實施例中,ABEGIN指令被解碼為微操作。
已解碼ABEGIN指令係由執行電路所執行以使該執行緒進入不同模式(其可由ABEGIN指令之一或更多欄位所明確地定義),其係接續於ABEGIN指令,但是在AEND指令之前,於1805。執行之此不同模式可於加速器上、或者於現存核心上,根據加速器可用性及選擇。於某些實施例中,加速器選擇係由異質排程器所履行。
後續(非AEND)指令被執行於執行的不同模式,於1807。該些指令可首先藉由二元轉譯器而被轉譯入不同的指令集,當加速器被用於執行時。
圖19闡明一種使用硬體處理器核心中之AEND的執行之方法的實施例。於1901,AEND指令被提取。
提取的AEND指令係使用解碼電路而被解碼於1903。於某些實施例中,AEND指令被解碼為微操作。
已解碼AEND指令係由執行電路所執行以恢復自其先前由ABEGIN指令所設定的執行之不同模式,於1905。執行之此不同模式可於加速器上、或者於現存核心上,根據加速器可用性及選擇。
後續(非AEND)指令被執行於執行的原始模式,於1807。該些指令可首先藉由二元轉譯器而被轉譯入不同的指令集,當加速器被用於執行時。
圖124闡明當不支援ABEGIN/AEND時之執行的範例。於12401,ABEGIN指令被提取。於12403做出其ABEGIN不被支援之判定。例如,CPUID指示其沒有支援。
當沒有支援時,通常無操作(nop)被執行於12405,其不會改變與該執行緒相關的背景。因為於執行模式下沒有改變,所以其接續於不支援的ABEGIN之指令係執行如常,於12407。
於某些實施例中,ABEGIN/AEND之等效使用係使用至少型態匹配而被完成。此型態匹配可根據硬體、軟體、及/或兩者。圖20闡明一種提供使用型態匹配之ABEGIN/AEND等效的系統。所示的系統包括排程器2015(例如,如上所述之異質排程器),其包括記憶體2005中所儲存之轉譯器2001(例如,二元轉譯器、JIT,等等)。核心電路2007係執行該排程器2015。排程器2015接收執行緒2019,其可或可不具有明確ABEGIN/AEND指令。
排程器2015係管理軟體為基的型態匹配器2003、履行陷阱和背景切換於卸載期間、管理使用者空間保存區域(稍後詳述)、及產生或轉譯至加速器碼2011。型態匹配器2003辨識記憶體中所儲存之(預定義)碼序列,其被發現於已接收執行緒2019中,其可受益自加速器使用及/或放寬執行狀態,但其並未使用ABEGIN/AEND而被描繪。通常,該些型態本身被儲存於轉譯器2001中,但(最少)可存取型態匹配器2003。選擇器2019作用如先前所述。
排程器2015亦可提供性能監督特徵。例如,假如碼不具有完美型態匹配,則排程器2015辨識其該碼可能仍需要需求之放寬以成為更有效率,並因此調整與該執行緒相關的操作模式。操作模式之關聯已被詳述於上。
排程器2015亦履行以下之一或更多者:循環一核心於ABEGIN/AEND區中、循環一加速器成為現用或拖延、計數ABEGIN調用、延遲加速器之排列(同步化處置)、及記憶體/快取統計之監督。於某些實施例中,二元轉譯器2001包括加速器特定碼,用以解讀其可用於識別瓶頸之加速器碼。加速器執行此已轉譯碼。
於某些實施例中,核心電路2007包括硬體型態匹配器2009,用以辨識其使用已儲存型態2017之已接收執行緒2019中的(預定義)碼序列。通常,此型態匹配器2009是輕量的(相較於軟體型態匹配器2003)且看起來簡單以表達區(諸如rep movs)。已辨識碼序列可被轉譯以供由排程器2015使用於加速器中及/或可導致該執行緒之操作模式的放寬。
耦合至該系統者為一或更多加速器2013,其係接收加速器碼2011以供執行。
圖21闡明一種暴露至型態辨識之非加速描繪執行緒的執行之方法的實施例。此方法係由一種包括至少一類型的型態匹配器之系統來履行。
於某些實施例中,執行緒被執行於2101。通常,此執行緒被執行於非加速器核心上。執行執行緒之指令被饋送入型態匹配器。然而,該執行緒之指令可在任何執行之前被饋送入型態匹配器。
於2103,該執行緒內之型態被辨識(檢測)。例如,軟體為基的型態匹配器(或硬體型態匹配器電路)找到一通常與可用加速器相關的型態。
已辨識型態被轉譯以用於可用加速器,於2105。例如,二元轉譯器係轉譯該型態為加速器碼。
已轉譯碼被轉移至可用加速器(於2107)以供執行。
圖22闡明一種暴露至型態辨識之非加速描繪執行緒的執行之方法的實施例。此方法係由一種包括至少一類型的型態匹配器之系統(如於圖20之系統中)來履行。
於某些實施例中,執行緒被執行於2201。通常,此執行緒被執行於非加速器核心上。執行執行緒之指令被饋送入型態匹配器。然而,該執行緒之指令可在任何執行之前被饋送入型態匹配器。
於2203,該執行緒內之型態被辨識(檢測)。例如,軟體為基的型態匹配器(或硬體型態匹配器電路)找到一通常與可用加速器相關的型態。
二元轉譯器係根據已辨識型態以調整與該執行緒相關的操作模式來使用放寬的需求,於2205。例如,二元轉譯器係利用與該已辨識型態相關的設定。
如上所述,於某些實施例中,碼之平行區係由ABEGIN及AEND指令所限定。於ABEGIN/AEND區塊內,有某些記憶體載入及儲存操作之獨立性的保證。其他的載入及儲存係容許潛在地相依性。如此致能平行化一針對記憶體相依性具有極少或毫無檢查之區塊的實施方式。於所有情況下,該區塊之串列執行被允許,因為串列情況被包括於用以執行該區塊之所有可能方式中。二元轉譯器係履行靜態相依性分析以產生平行執行之實例,並將這些實例映射至硬體。靜態相依性分析可平行化一外、中、或內迴路之疊代。截割是實施方式相依的。ABEGIN/AEND之實施方式係提取最適於實施方式之大小的平行性。
ABEGIN/AEND區塊可含有多位準的巢套迴路。實施方式可自由選擇有支援的平行執行之量、或者後降於串列執行上。ABEGIN/AEND係提供平行性於比SIMD指令更大得多的區上。針對某些類型的碼,ABEGIN/AEND係容許比多線程更有效率的硬體實施方式。
透過ABEGIN/AEND之使用,程式設計師及/或編譯器可後降於藉由CPU之傳統串列執行上,假如針對平行化之準則未被滿足的話。當執行於傳統失序CPU核心上時,ABEGIN/AEND係減少記憶體排序緩衝器(MOB)之區域及功率需求,由於放寬的記憶體排序。
於ABEGIN/AEND區塊內,程式設計師係指明記憶體相依性。圖23闡明不同類型的記憶體相依性2301、其語意2303、排序需求2305、及使用情況2307。此外,某些語意係根據實施方式而適用於ABEGIN/AEND區塊內之指令。例如,於某些實施例中,暫存器相依性被容許,但對於暫存器之修改不持續超過AEND。此外,於某些實施例中,ABEGIN/AEND區塊需被進入於ABEGIN並離開於AEND(或根據型態辨識而進入類似的狀態)而無進入/離開該ABEGIN/AEND區塊之分支。最後,通常,指令串無法被修改。
於某些實施方式中,ABEGIN指令包括來源運算元,其包括對於記憶體資料區塊之指針。資料記憶體區塊包括由運行時間和核心電路所利用之資訊的許多片段,用以處理ABEGIN/AEND區塊內之碼。
圖24闡明由ABEGIN指令所指向之記憶體資料區塊的範例。如圖所示,根據該實施方式,記憶體資料區塊包括針對以下之欄位:序號2401、區塊類別2403、實施方式識別符2405、保存狀態區域大小2407、及本地儲存區域大小2409。
序號2401係指示透過(平行)計算在中斷之前該處理器已走了多遠。軟體初始化序號2401至零,在ABEGIN之執行以前。ABEGIN之執行將寫入非零值至序號2401以追蹤執行之進度。於完成時,AEND之執行將寫入零以再初始化序號2401以利其下次使用。
預定義區塊類別識別符2403(亦即,GUID)係指明預定義的ABEGIN/AEND區塊類別。例如,DMULADD及DGEMM可被預定義為區塊類別。利用預定義類別,二元轉譯器無須分析該二元以履行針對異質硬體之映射分析。取而代之,轉譯器(例如,二元轉譯器)係藉由僅採取輸入值以執行針對此ABEGIN/AEND類別之預產生的轉譯。以ABEGIN/AEND所圍住的碼僅作用為用於執行此類別於非特殊化核心上的碼。
實施方式ID欄位2405係指示被使用之執行硬體的類型。ABEGIN之執行將更新此欄位2405以指示其被使用之異質硬體的類型。如此協助實施方式將ABEGIN/AEND碼遷移至一機器,其具有不同的加速硬體類型或完全不具有加速器。此欄位係致能已儲存背景之可能轉換以匹配目標實施方式。或者,仿真器被用以執行該碼直到其在遷移後離開AEND,當ABEGIN/AEND碼被中斷並遷移至一不具有相同加速器類型之機器時。此欄位2405亦可容許系統動態地再指派ABEGIN/AEND區塊給相同機器內之不同異質硬體,即使當其在ABEGIN/AEND區塊執行之中途被中斷時。
狀態保存區域欄位2407係指示其為實施方式特定的狀態保存區域之大小及格式。實施方式將保證其狀態保存區域之實施方式特定的部分將不超過CPUID中所指明的某最大值。通常,ABEGIN指令之執行係致使寫入至通用和緊縮資料暫存器之狀態保存區域,其將被修改於ABEGIN/AEND區塊、相關旗標、及額外實施方式特定狀態內。為了促成平行執行,暫存器之多數實例可被寫入。
本地儲存區域2409被配置為本地儲存區域。用以保留之儲存量通常被指明為針對ABEGIN之即刻運算元。於ABEGIN指令之執行時,寫入至特定暫存器(例如,R9)被執行以本地儲存2409之位址。假如有錯誤,則此暫存器被形成以指向該序號。
平行執行之各實例係接收獨特的本地儲存區域2409。該位址將針對平行執行之各實例而不同。於串列執行時,一儲存區域被配置。本地儲存區域2409係提供超越架構通用和緊縮資料暫存器之暫時儲存。本地儲存區域2409不應被存取於ABEGIN/AEND區塊之外。
圖25闡明其被組態成使用ABEGIN/AEND語意之記憶體2503的範例。未顯示者為硬體(諸如文中所述之各種處理元件),其係支援ABEGIN/AEND並利用此記憶體2503。如上所述,記憶體2503包括保存狀態區域2507,其包括待使用暫存器2501、旗標2505、及實施方式特定資訊2511之指示。此外,每平行執行實例之本地儲存2509被儲存於記憶體2503中。
圖26闡明一種使用ABEGIN/AEND而操作於不同執行模式下的方法之範例。通常,此方法係由諸如轉譯器及執行電路等單體之組合來履行。於某些實施例中,該執行緒被轉譯在進入此模式之前。
於2601,執行之不同模式被進入,諸如(例如)執行之放寬模式(使用加速器與否)。此模式通常被從ABEGIN指令之執行進入;然而,如上所述,此模式亦可由於型態匹配而被進入。進入此模式包括序號之重設。
寫入至保存狀態區域被執行於2603。例如,通用和緊縮資料暫存器(其將被修改)、相關旗標、及額外實施方式特定資訊被寫入。此區域容許執行之再開始、或轉返,假如於該區塊中某事出錯時(例如,中斷)。
每平行執行實例之本地儲存區域被保留於2605。此區域之大小係由上述的狀態保存區域所主宰。
於區塊之執行期間,區塊之進度被追蹤於2607。例如,當指令成功地執行且被撤回時,該區塊之序號被更新。
做出有關AEND指令是否已被達到之判定於2609(例如,以判定該區塊是否已完成)。假如為否,則本地儲存區域被更新以中間結果於2613。假如可能的話,執行係從這些結果獲得;然而於某些例子中,轉返至ABEGIN/AEND之前發生於2615。例如,假如例外或中斷發生於ABEGIN/AEND區塊之執行期間,則指令指標將指向ABEGIN指令,而R9暫存器將指向記憶體資料區塊(其被更新以中間結果)。於重新開始時,記憶體資料區塊中所保存的狀態將被使用以重新開始於正確的點。此外,頁錯失被提出,假如記憶體資料區塊之初始部分(直至並包括狀態保存區域)不存在或不可存取的話。為了載入並儲存至本地儲存區域,頁錯失被報告以一般方式,亦即,於第一存取至不存在或不可存取頁時。於某些例子中,非加速器處理元件將被使用於再開始時。
假如該區塊被成功地完成,則其被放置一旁的暫存器被復原連同該些旗標,於2611。僅記憶體狀態將在該區塊之後為不同。
圖27闡明一種使用ABEGIN/AEND而操作於不同執行模式下的方法之範例。通常,此方法係由諸如二元轉譯器及執行電路等單體之組合來履行。
於2701,執行之不同模式被進入,諸如(例如)執行之放寬模式(使用加速器與否)。此模式通常被從ABEGIN指令之執行進入;然而,如上所述,此模式亦可由於型態匹配而被進入。進入此模式包括序號之重設。
寫入至保存狀態區域被執行於2703。例如,通用和緊縮資料暫存器(其將被修改)、相關旗標、及額外實施方式特定資訊被寫入。此區域容許執行之再開始、或轉返,假如於該區塊中某事出錯時(例如,中斷)。
每平行執行實例之本地儲存區域被保留於2705。此區域之大小係由上述的狀態保存區域所主宰。
於2706,該區塊內之碼被轉譯以供執行。
於已轉譯區塊之執行期間,區塊之進度被追蹤於2707。例如,當指令成功地執行且被撤回時,該區塊之序號被更新。
做出有關AEND指令是否已被達到之判定於2709(例如,以判定該區塊是否已完成)。假如為否,則本地儲存區域被更新以中間結果於2713。假如可能的話,執行係從這些結果獲得;然而,於某些例子中,轉返至ABEGIN/AEND之前發生於2715。例如,假如例外或中斷發生於ABEGIN/AEND區塊之執行期間,則指令指標將指向ABEGIN指令,而R9暫存器將指向記憶體資料區塊(其被更新以中間結果)。於重新開始時,記憶體資料區塊中所保存的狀態將被使用以重新開始於正確的點。此外,頁錯失被提出,假如記憶體資料區塊之初始部分(直至並包括狀態保存區域)不存在或不可存取的話。為了載入並儲存至本地儲存區域,頁錯失被報告以一般方式,亦即,於第一存取至不存在或不可存取頁時。於某些例子中,非加速器處理元件將被使用於再開始時。
假如該區塊被成功地完成,則其被放置一旁的暫存器被復原連同該些旗標,於2711。僅記憶體狀態將在該區塊之後為不同。
如上所述,於某些實施方式中,共同鏈結(稱為多協定共同鏈結 (MCL))被用以延伸到裝置(諸如圖1及2中所述之處理元件)。於某些實施例中,這些裝置被視為PCI Express(PCIe)裝置。此鏈結具有於其上動態地多工的三或更多協定。例如,共同鏈結支援包括以下之協定:1)生產者/消費者、發現、組態、中斷(PDCI)協定,用以致能裝置發現、裝置組態、錯誤報告、中斷、DMA式樣資料轉移及如可被指明於一或更多專屬或工業標準(諸如,例如,PCI Express規格或同等替代物)中之各種服務;2)快取代理同調(CAC)協定,用以致能裝置發送對於處理元件之同調讀取和寫入請求;及3)記憶體存取(MA)協定,用以致能處理元件存取另一處理元件之本地記憶體。雖然這些協定之特定範例被提供於下(例如,Intel晶片上系統組織(IOSF)、晶粒中互連(IDI)、可擴縮記憶體互連3+ (SMI3+)),但本發明之主要原理不限於任何特定組的協定。
圖120為簡化的方塊圖12000,其闡明範例多晶片組態12005,其包括使用範例多晶片鏈結(MCL)12020而被通訊地連接的二或更多晶片、或晶粒(例如,12010、12015)。雖然圖120係闡明其使用範例MCL 12020而互連的二(或更多)晶粒,但應理解:文中所述有關MCL之實施方式的原理及特徵可適用於其連接晶粒(例如,12010)與其他組件之任何互連或鏈結,包括連接二或更多晶粒(例如,12010、12015)、連接晶粒(或晶片)至另一晶粒外組件、連接晶粒至另一裝置或封裝外晶粒(例如,12005)、連接晶粒至BGA封裝、插入器上修補(POINT)之實施方式,除了潛在地其他範例之外。
於某些例子中,較大的組件(例如,晶粒12010、12015)可本身為IC系統,諸如系統單晶片(SoC)、多處理器晶片、或者其包括諸如裝置上之核心、加速器等等(12025-12030及12040-12045)多數組件之其他組件,例如,於單晶粒(例如,12010、12015)上。MCL 12020係提供彈性以供從潛在地多數離散組件及系統建立複雜且變化的系統。例如,晶粒12010、12015之各者可由兩不同單體所製造或者提供。再者,晶粒及其他組件可本身包括互連或其他通訊組織(例如,12035、12050),其提供設施以供介於裝置(例如,12010、12015個別地)內組件(例如,12025-12030及12040-12045)之間的通訊。各個組件及互連(例如,12035、12050)支援或使用多數不同協定。再者,介於晶粒(例如,12010、12015)之間的通訊可潛在地包括介於晶粒上的各個組件之間的異動,透過多數不同協定。
多晶片鏈結(MCL)之實施例係支援多數封裝選擇、多數I/O協定、以及可靠度、可用性、和可服務性(RAS)特徵。再者,實體層(PHY)可包括實體電氣層及邏輯層,並可支援較長的通道長度,包括高達(以及於某些情況下超過)約45mm之通道長度。於某些實施方式中,範例MCL可操作於高資料速率,包括超過8-10Gb/s之資料速率。
於MCL之一範例實施方式中,PHY電氣層係增進傳統多通道互連解決方案(例如,多通道DRAM I/O),(例如)藉由數個特徵以延伸資料速率和通道組態,包括(例如)調節的中軌終止、低功率主動串音消除、電路容餘、每位元工作循環校正和抗扭斜、線編碼、及傳輸器等化,除了潛在地其他範例之外。
於MCL之一範例實施方式中,PHY邏輯層被實施以致其進一步協助(例如,電氣層特徵)延伸資料速率及通道組態,同時亦致能該互連發送多數協定跨越該電氣層。此等實施方式提供並定義模組式共同實體層,其為協定中立的且被建構以配合潛在地任何現存或未來互連協定而工作。
轉到圖121,其顯示簡化方塊圖12100,表示一包括多晶片鏈結(MCL)之範例實施方式的系統之至少一部分。MCL可被實施,使用實體電連接(例如,實施為巷道之佈線),其係連接第一裝置12105(例如,包括一或更多子組件之第一晶粒)與第二裝置12110(例如,包括一或更多其他子組件之第二晶粒)。於圖12100之高階表示中所示的特定範例中,所有信號(於通道12115、12120中)可為單向的,且巷道可被提供給該些資料信號以具有上游和下游資料轉移兩者。雖然於圖121之方塊圖12100中,第一組件12105被稱為上游組件而第二組件12110被稱為下游組件;以及用於傳送資料之MCL的實體巷道被稱為下游通道12115而用於接收資料(自組件12110)之巷道被稱為上游通道12120,但應理解:介於裝置12105、12110之間的MCL可由各裝置所使用以傳送及接收介於該些裝置之間的資料。
於一範例實施方式中,MCL可提供包括電氣MCL PHY 12125a,b(或集合地12125)之實體層(PHY),以及實施MCL邏輯PHY 12130a,b(或集合地12130)之可執行邏輯。電氣(或實體)PHY 12125係提供實體連接,以供資料透過該連接而被傳遞於裝置12105、12110之間。信號調節組件和邏輯可被實施而與實體PHY 12125連接,以建立高資料速率及該鏈結之通道組態能力,其(於某些應用中)涉及緊密聚集的實體連接於約45mm或更多的長度。邏輯PHY 12130包括電路,用以促進計時、鏈結狀態管理(例如,針對鏈結層12135a、12135b)、及介於其用於透過MCL之通訊的潛在地多數不同協定之間的協定多工。
於一範例實施方式中,實體PHY 12125包括(針對各通道(例如,12115、12120))一組資料巷道,頻帶中資料係透過該些資料巷道而被傳送。於此特定範例中,50個資料巷道被提供於上游和下游通道12115、12120之各者中,雖然任何其他數目的巷道均可被使用,如由佈局和功率限制、所欲的應用、裝置限制(等等)所允許者。各通道可進一步包括:用於該通道之閃控(或時脈)信號的一或更多專屬巷道、用於該通道之有效信號的一或更多專屬巷道、用於串流信號的一或更多專屬巷道、及用於鏈結狀態機器管理或旁帶信號的一或更多專屬巷道。實體PHY可進一步包括旁帶鏈結12140,其(於某些範例中)可為雙向較低頻控制信號鏈結,用以協調MCL連接裝置12105、12110之狀態變遷及其他屬性,除了其他範例之外。
如上所述,多協定係使用MCL之實施方式而被支援。確實地,多數、獨立異動層12150a、12150b可被提供於各裝置12105、12110上。例如,各裝置12105、12110可支援並利用二或更多協定,諸如PCI、PCIe、CAC,除了其他者之外。CAC為一種晶粒上使用的同調協定,用以通訊於核心、最後階快取(LLC)、記憶體、圖形、及I/O控制器之間。亦可支援其他協定,包括乙太網路協定、無限頻帶協定、及其他PCIe組織為基的協定。邏輯PHY與實體PHY之組合亦可被使用為晶粒至晶粒互連,用以將一晶粒上之SerDes PHY(PCIe、乙太網路、無限頻帶或其他高速SerDes)連接至其上層(其被實施於其他晶粒上),除了其他範例之外。
邏輯PHY 12130支援介於MCL上的這些多協定之間的多工。例如,專屬串流巷道可被用以確立已編碼串流信號,其係識別哪個協定將應用於該通道之資料巷道上實質上同時地傳送的資料。再者,邏輯PHY 12130係協商其各個協定可支援或請求之各個類型的鏈結狀態變遷。於某些例子中,透過該通道之專屬LSM_SB巷道所傳送的LSM_SB信號可被使用,連同旁帶鏈結12140以傳遞並協商介於裝置12105、12110之間的鏈結狀態變遷。再者,鏈結訓練、錯誤檢測、扭斜檢測、抗扭斜、及傳統互連之其他功能可被取代或管理,部分地使用邏輯PHY 12130。例如,於各通道中透過一或更多專屬有效信號巷道而傳送的有效信號可被用以通知鏈結活動、檢測扭斜、鏈結錯誤、及實現其他特徵,除了其他範例之外。於圖121之特定範例中,多數有效巷道被提供於每通道。例如,一通道內之資料巷道可被捆紮或聚集(實體地及/或邏輯地)且一有效巷道可被提供給各叢集。再者,多數閃控巷道可被提供(於某些情況下)以提供專屬的閃控信號給一通道中之複數資料巷道叢集中的各叢集,除了其他範例之外。
如上所述,邏輯PHY 12130係協商並管理其被傳送於MCL所連接的裝置之間的鏈結控制信號。於某些實施方式中,邏輯PHY 12130包括鏈結層封包(LLP)產生電路12160,用以透過MCL(亦即,頻帶中)來傳送鏈結層控制訊息。此等訊息可透過該通道之資料巷道而被傳送,以該串流巷道識別其該資料為鏈結層至鏈結層傳訊,諸如鏈結層控制資料,除了其他範例之外。使用LLP模組式12160所致能的鏈結層訊息係協助介於裝置12105、12110(個別地)的鏈結層12135a、12135b之間的鏈結層狀態變遷、功率管理、回送、除能、再集中、拌碼(除了其他鏈結層特徵之外)之協商及性能。
轉到圖122,顯示簡化的方塊圖12200,其闡明範例MCL之範例邏輯PHY。實體PHY 12205可連接至一晶粒,其包括邏輯PHY 12210及支援MCL之鏈結層的額外邏輯。該晶粒(於此範例中)可進一步包括邏輯,用以支援MCL上多數不同協定。例如,於圖122之範例中,提供PCIe邏輯12215以及CAC邏輯12220,以致其該些晶粒可使用透過連接兩晶粒之相同MCL的任一PCIe或CAC來通訊,除了潛在地許多其他範例之外,包括其中多於兩協定或除了PCIe和CAC以外的協定係透過MCL而被支援的範例。支援於該些晶粒之間的各個協定可提供變化等級的服務及特徵。
邏輯PHY 12210可包括鏈結狀態機器管理邏輯12225,用以配合晶粒之上層邏輯的請求(例如,透過PCIe或CAC所接收)而協商鏈結狀態變遷。邏輯PHY 12210可進一步包括鏈結測試及除錯邏輯(例如,12230)於某些實施方式中。如上所述,範例MCL可支援控制信號,其係透過MCL而被傳送於晶粒之間以促進MCL之協定中立、高性能、及功率效率特徵(除了其他範例特徵之外)。例如,邏輯PHY 12210可支援有效信號、串流信號、及LSM旁帶信號之產生和傳送、以及接收和處理,配合透過專屬資料巷道之資料的傳送和接收,諸如以上之範例中所述者。
於某些實施方式中,多工(例如,12235)及解多工(例如,12240)邏輯可被包括於(或者為可存取)邏輯PHY 12210中。例如,多工邏輯(例如,12235)可被用以識別資料(例如,實施為封包、訊息,等等),其將被傳送出至MCL上。多工邏輯12235可識別其管理該資料之該協定並產生其被編碼以識別該協定之串流信號。例如,於一範例實施方式中,該串流信號可被編碼為兩個十六進位符號之位元組(例如,CAC: FFh; PCIe: F0h; LLP: AAh;旁帶: 55h;等等),且可被傳送於由已識別協定所管理之資料的相同窗(例如,位元組時間週期窗)期間。類似地,解多工邏輯12240可被利用以解讀進來的串流信號以解碼該串流信號,並識別其將應用於資料(其係與該些資料巷道上之串流信號同時地被接收)之協定。解多工邏輯12240可接著應用(或確保)協定特定鏈結層處置,並致使該資料由相應的協定邏輯(例如,PCIe邏輯12215或CAC邏輯12220)所處置。
邏輯PHY 12210可進一步包括鏈結層封包邏輯12250,其可被用以處置各個鏈結控制功能,包括功率管理工作、回送、除能、再集中、拌碼,等等。LLP邏輯12250可促進透過MCLP之鏈結層至鏈結層訊息,除了其他功能之外。相應於LLP發信之資料亦可由一傳送於專屬串流信號巷道上之串流信號所識別,該專屬串流信號巷道被編碼以識別其該資料巷道LLP資料。多工及解多工邏輯(例如,12235、12240)亦可被用以產生並解讀相應於LLP流量之串流信號,以及致使此流量由適當的晶粒邏輯(例如,LLP邏輯12250)所處置。同樣地,MCLP之某些實施方式可包括專屬旁帶(例如,旁帶12255及支援邏輯),諸如異步及/或較低頻旁帶通道,除了其他範例之外。
邏輯PHY邏輯12210可進一步包括鏈結狀態機器管理邏輯,其可透過專屬LSM旁帶巷道以產生並接收(及使用)鏈結狀態管理傳訊。例如,LSM旁帶巷道可被用以履行交握來推進鏈結訓練狀態、離開功率管理狀態(例如,L1狀態),除了其他潛在範例之外。LSM旁帶信號可為異步信號,由於其未對準與資料、有效、及該鏈結之串流信號,但反而相應於發信狀態變遷並將鏈結狀態機器對齊於由該鏈結所連接的兩晶粒或晶片之間,除了其他範例之外。提供專屬LSM旁帶巷道可(於某些範例中)容許傳統的靜噪以及類比前端(AFE)之已接收檢測電路被消除,除了其他範例利益之外。
轉到圖123,顯示簡化方塊圖12300,其闡明用以實施MCL之邏輯的另一表示。例如,邏輯PHY 12210被提供以已定義邏輯PHY介面(LPIF)12305,複數不同協定(例如,PCIe, CAC, PDCI, MA,等等)12315、12320、12325及發信模式(例如,旁帶)之任一者可透過該介面而與範例MCL之實體層互動。於某些實施方式中,多工及仲裁邏輯12330亦可被提供為分離自邏輯PHY 12210之層。於一範例中,LPIF 12305可被提供為此MuxArb層1230之任一側上的介面。邏輯PHY 12210可透過另一介面而與實體PHY(例如,MCL PHY之類比前端(AFE)12205)互動。
LPIF可從上層(例如,12315、12320、12325)摘取PHY(邏輯及電氣/類比),以致一完全不同的PHY可被實施於針對該些上層為透明的LPIF下。此可協助提升設計上的模組化及再使用,因為當主要發信技術PHY被更新時該些上層可保持不變,除了其他範例之外。再者,LPIF可定義數個信號以致能多工/解多工、LSM管理、錯誤檢測和處置、及邏輯PHY之其他功能。例如,下表係概述其可針對一範例LPIF而定義的信號之至少一部分:
信號名稱 描述
Rst 重設
Lclk 鏈結時脈 - PHY時脈之8UI
Pl_trdy 實體層準備好接受資料,當Pl_trdy及Lp_valid均被確立時則資料係由實體層所接受。
Pl_data[N-1:0][7:0] 實體層至鏈結層資料,其中N等於巷道之數目。
Pl_valid 實體層至鏈結層信號指示資料有效
Pl_Stream[7:0] 實體層至鏈結層信號指示具有已接收資料之接收的串流ID
Pl_error 實體層檢測到錯誤(例如,成框或訓練)
Pl_AlignReq 對於鏈結層之實體層請求以對準LPIF寬度邊界上之封包
Pl_in_L0 指示其鏈結狀態機器(LSM)係於L0中
Pl_in_retrain 指示其LSM係於再訓練/復原中
Pl_rejectL1 指示其PHY層已拒絕進入L1。
Pl_in_L12 指示其LSM係於L1或L2中。
Pl_LSM (3:0) 目前LSM狀態資訊
Lp_data[N-1:0][7:0] 鏈結層至實體層資料,其中N等於巷道之數目。
Lp_Stream[7:0] 鏈結層至實體層信號指示應使用資料之串流ID
Lp_AlignAck 鏈結層至實體層指示其該些封包為對準的LPIF寬度邊界
Lp_valid 鏈結層至實體層信號指示資料有效
Lp_enterL1 對於實體層之鏈結層請求以進入L1
Lp_enterL2 對於實體層之鏈結層請求以進入L2
Lp_Retrain 對於實體層之鏈結層請求以再訓練PHY
Lp_exitL12 對於實體層之鏈結層請求以離開L1, L2
Lp_Disable 對於實體層之鏈結層請求以除能PHY
如表中所述,於某些實施方式中,對準機制可透過AlignReq/AlignAck交握而被提供。例如,當實體層進如復原時,某些協定可失去封包成框。封包之對準可被校正(例如)以由該鏈結層確保正確的成框識別。實體層可確立StallReq信號(當其進入復原時),以致當新的已對準封包準備好被轉移時鏈結層係確立拖延(Stall)信號。實體層邏輯可取樣拖延及有效兩者以判定該封包是否被對準。例如,實體層可持續驅動trdy以汲取鏈結層封包直到拖延及有效被取樣確立,除了其他潛在實施方式之外,包括使用有效以協助封包對準之其他替代實施方式。
各種錯失容許度可被定義給MCL上之信號。例如,錯失容許度可被定義給有效、串流、LSM旁帶、低頻旁帶、鏈結層封包、及其他類型的信號。透過MCL之專屬資料巷道而傳送之針對封包、訊息、及其他資料的錯失容許度可根據其管理該資料之特定協定。於某些實施方式中,可提供錯誤檢測及處置機制,諸如循環冗餘檢查(CRC)、再嘗試緩衝器,除了其他潛在範例之外。當作範例,針對透過MCL而傳送的PCIe封包,32位元CRC可被用於PCIe異動層封包(TLPs)(具有確定的傳遞(例如,透過重新播放機制))而16位元CRC可被用於PCIe鏈結層封包(其可被建構為有損(例如,其中重新播放未被應用))。再者,針對PCIe成框符記,特定漢明距離(例如,四(4)之漢明距離)可被定義給符記識別符;同位及4位元CRC亦可被利用,除了其他範例之外。另一方面,針對CAC封包,16位元CRC可被利用。
於某些實施方式中,錯失容許度被定義給鏈結層封包(LLP),其係利用有效信號以從低變遷至高(亦即,0至1)(例如,用以協助確認位元及符號鎖定)。再者,於一範例中,特定數目的連續、相同LLP可被定義以供傳送,而針對各請求之回應可被預期,以請求者再嘗試於回應逾時之後,除了其可被使用為判定MCL上之LLP資料中的錯失之其他已定義特性之外。於進一步範例中,錯失容許度可被提供給有效信號,例如,透過延伸該有效信號跨越者個時間週期窗、或符號(例如,藉由保持該有效信號為高,於八個UI)。此外,串流信號中之錯誤或錯失可藉由針對該串流信號之編碼值維持漢明距離而被防止,除了其他範例之外。
邏輯PHY之實施方式包括錯誤檢測、錯誤報告、及錯誤處置邏輯。於某些實施方式中,範例MCL之邏輯PHY可包括邏輯,用以檢測PHY層去框錯誤(例如,於有效及串流巷道上)、旁帶錯誤(例如,有關於LSM狀態變遷)、LLP中之錯誤(例如,其對於LSM狀態變遷是關鍵的),除了其他範例之外。某些錯誤檢測/解析可被委託給上層邏輯,諸如適以檢測PCIe特定錯誤之PCIe邏輯,除了其他範例之外。
於去框錯誤之情況下,於某些實施方式中,一或更多機制可透過錯誤處置邏輯而被提供。去框錯誤可根據所涉及的協定而被處置。例如,於某些實施方式中,鏈結層可被告知該錯誤以觸發再嘗試。去框亦可致使邏輯PHY去框之再對準。再者,邏輯PHY之再集中可被履行且符號/窗鎖定可被再獲取,除了其他技術之外。集中(於某些範例中)可包括PHY移動接收器時脈相位至最佳點以檢測進來的資料。「最佳」(於此背景中)可指稱其具有針對容限及時脈跳動之最多容限處。再集中可包括簡化的集中功能,例如,當PHY從低功率狀態醒來時所履行者,除了其他範例之外。
其他類型的錯誤可涉及其他的錯誤處置技術。例如,於旁帶中所測得的錯誤可透過(例如,LSM的)相應狀態之逾時機制而被取得。該錯誤可被記錄而鏈結狀態機器可接著被變遷至重設。LSM可保持於重設直到重新開始被接收自軟體。於另一範例中,LLP錯誤(諸如鏈結控制封包錯誤)可被處置以逾時機制,其可重新開始LLP序列(假如未接收到針對該LLP序列之確認的話)。
於某些實施例中,上述協定之各者為PCIe之變異。PCIe裝置係使用一與匯流排相關的共同位址空間來通訊。此位址空間為匯流排位址空間或PCIe位址空間。於某些實施例中,PCIe裝置係使用內部位址空間(其可能不同於PCIe位址空間)中之位址。
PCIe規格定義一種機制,PCIe裝置可藉由該機制以將其本地記憶體(或其部分)暴露至該匯流排,而因此致能其裝附至該匯流排之CPU或其他裝置直接地存取其記憶體。通常,各PCIe裝置被指派給PCIe位址空間中之專屬區,其被稱為PCI基礎位址暫存器(BAR)。此外,該裝置所暴露之位址被映射至PCI BAR中之個別位址。
於某些實施例中,PCIe 裝置(例如,HCA)係轉譯於其內部位址與 PCIe 匯流排位址之間,使用輸入/輸出記憶體映射單元(IOMMU)。於其他實施例中,該 PCIe 裝置可履行位址轉譯及解析,使用PCI位址轉譯服務(ATS)。於某些實施例中,諸如程序位址空間ID(PASID)標籤等標籤被用於將該些位址指明為屬於特定程序之虛擬位址空間。
圖28闡明針對一實施方式之額外細節。如於上述實施方式中,此實施方式包括具有加速器記憶體2850之加速器2801,其係透過多協定鏈結2800而耦合至一具有主機記憶體2860之主機處理器2802。如上所述,加速器記憶體2850可利用與主機記憶體2860不同的記憶體技術(例如,加速器記憶體可為HBM或堆疊DRAM而主機記憶體可為SDRAM)。
多工器2811及2812被顯示為強調以下事實:多協定鏈結2800為動態多工匯流排,其支援PCDI、CAC、及MA協定(例如,SMI3+)流量,其各者可被發送至加速器2801及主機處理器2802內之不同功能組件。舉例而言(而非限制),這些協定包括IOSF、IDI、及SMI3+。於一實施方式中,加速器2801之PCIe邏輯2820包括本地TLB 2822,用以快取虛擬至實體位址轉譯以供由一或更多加速器核心2830所使用,當執行命令時。如上所述,虛擬記憶體空間被分佈於加速器記憶體2850與主機記憶體2860之間。類似地,主機處理器2802上之PCIe邏輯包括I/O記憶體管理單元(IOMMU)2810,用以管理PCIe I/O裝置2806之記憶體存取、及(於一實施方式中)加速器2801。如圖所示,加速器上之PCIe邏輯2820及主機處理器上之PCIe邏輯2808係使用PCDI協定來通訊以履行功能,諸如裝置發現、暫存器存取、裝置組態和初始化、中斷處理、DMA操作、及位址轉譯服務(ATS)。如上所述,主機處理器2802上之IOMMU 2810可操作為針對這些功能之控制及協調的中心點。
於一實施方式中,加速器核心2830包括處理引擎(元件),其係履行由加速器所要求的功能。此外,加速器核心2830可包括主機記憶體快取2834(用以本地地快取主機記憶體2860中所儲存之頁)及加速器記憶體快取2832(用以快取加速器記憶體2850中所儲存之頁)。於一實施方式中,加速器核心2830係經由CAC協定以與主機處理器2802之同調和快取邏輯2807通訊,以確保其於加速器2801與主機處理器2802之間所共用的快取線係保持同調。
加速器2801之偏移/同調邏輯2840係實施文中所述之各種裝置/主機偏移技術(例如,以頁等級粒度)以確保資料同調而同時減少透過多協定鏈結2800之不需要的通訊。如圖所示,偏移/同調邏輯2840係使用MA記憶體異動(例如,SMI3+)而與主機處理器2802之同調和快取邏輯2807通訊。同調和快取邏輯2807係負責維持其LLC2809、主機記憶體2860、加速器記憶體2850和快取2832、2834、以及該些核心2805之個別快取的各者中所儲存之資料的同調。
概言之,加速器2801之一實施方式係呈現為針對主機處理器2802上所執行之軟體的PCIe裝置,由PDCI協定所存取(其為有效地,PCIe協定係針對多工匯流排而被再格式化)。加速器2801可參與共用虛擬記憶體,使用加速器裝置TLB及標準PCIe位址轉譯服務(ATS)。加速器亦可被視為同調/記憶體代理。某些能力(例如,以下所述之ENQCMD、MOVDIR)係可用於PDCI上(例如,用於工作提呈)而同時加速器可使用CAC以快取加速器上以及某些偏移變遷流程中之主機資料。對於來自主機之加速器記憶體的存取(或來自加速器之主機偏移存取)可使用MA協定如所述。
如圖29中所示,於一實施方式中,加速器包括PCI組態暫存器2902及MMIO暫存器2906,其可被編程以提供存取至裝置後端資源2905。於一實施方式中,MMIO暫存器2906之基礎位址係由PCI組態空間中之一組基礎位址暫存器(BAR)2901所指明。不同於先前實施方式,文中所述之資料串流加速器(DSA)的一實施方式並未實施多通道或PCI功能,因此僅有各暫存器之一實例於一裝置中。然而,可能有多於一DSA裝置於單一平台中。
一種實施方式可提供額外性能或除錯暫存器(其並未描述於文中)。任何此類暫存器應被視為實施方式特定的。
PCI組態空間存取被履行為對準的1、2、或4位元組存取。參考PCI Express基本規格有關PCI組態空間中之存取未實施暫存器及保留位元的規則。
對於BAR0區之MMIO空間存取(能力、組態、及狀態暫存器)被履行為對準的1、2、4或8位元組存取。8位元組存取應僅被用於8位元組暫存器。軟體不應讀取或寫入未實施暫存器。對於BAR 2及BAR 4區之MMIO空間存取應被履行為64位元組存取,使用ENQCMD、ENQCMDS、或MOVDIR64B指令(詳細地描述於下)。ENQCMD或ENQCMDS應被用以存取一被組態成共用(SWQ)之工作佇列,而MOVDIR64B需被用以存取一被組態成專屬(DWQ)之工作佇列。
DSA PCI組態空間之一實施方式係實施三個64位元BAR 2901。裝置控制暫存器(BAR0)為64位元BAR,其含有裝置控制暫存器之實體基礎位址。這些暫存器係提供有關裝置能力、用以組態並致能該裝置之控制、及裝置狀態等資訊。BAR0區之大小係根據中斷訊息儲存2904之大小。該大小為32KB加上中斷訊息儲存項目2904之數目乘以16,向上捨入至2之下一冪次。例如,假如該裝置支援1024中斷訊息儲存項目2904,則中斷訊息儲存為16KB,而BAR0之大小為64KB。
BAR2為64位元BAR,其含有特權及無特權入口之實體基礎位址。各入口之大小為64位元組且被置於分離的4KB頁上。如此容許該些入口使用CPU頁表而被獨立地映射入不同的位址空間。該些入口被用以提呈描述符至該裝置。特權入口係由內核模式軟體所使用,而無特權入口係由使用者模式軟體所使用。無特權入口之數目係相同於所支援的工作佇列之數目。特權入口之數目為工作佇列(WQ)之數目 x(MSI-X-表-大小-1)。用以提呈描述符之入口的位址係容許裝置判定:應將該描述符置於哪個WQ中,無論該入口為特權或無特權;以及哪個MSI-X項目可被用於完成中斷。例如,假如該裝置支援8 WQ,則針對既定描述符之WQ為(入口-位址 >> 12)& 0x7。假如入口-位址 >> 15為0,則該入口為無特權;否則其為特權的且用於完成中斷之MSI-X 2903表指標為入口-位址 >> 15。位元5:0需為0。位元11:6被忽略;因此該頁上之任何64位元組對準的位址可被使用以相同的效應。
使用無特權入口之描述符提呈係受制於WQ之佔有率臨限值,如使用工作佇列組態(WQCFG)暫存器所組態者。使用特權入口之描述符提呈不受制於該臨限值。描述符提呈至SWQ需使用ENQCMD或ENQCMDS而被提呈。對SWQ入口之任何其他寫入操作被忽略。描述符提呈至DWQ需使用64位元組寫入操作而被提呈。軟體係使用MOVDIR64B,以確保無斷續的64位元組寫入。對於除能或專屬WQ入口之ENQCMD或ENQCMDS係回覆再嘗試。對DWQ入口之任何其他寫入操作被忽略。對於BAR2位址空間之任何讀取操作係回覆全部1。內核模式描述符應使用特權入口而被提呈以接收完成中斷。假如內核模式描述符係使用無特權入口而被提呈,則無完成中斷可被請求。使用者模式描述符可使用特權或無特權入口之任一者而被提呈。
BAR2區中之入口的數目為該裝置所支援之WQ的數目乘以MSI-X 2903表大小。MSI-X表大小通常為WQ之數目加1。因此,例如,假如該裝置支援8 WQ,則BAR2之可用大小將為8 × 9 × 4KB = 288KB。BAR2之總大小將被向上捨入至2之下個冪次,或512KB。
BAR4為64位元BAR,其含有訪客入口之實體基礎位址。各訪客入口為64位元組且被置於分離的4KB頁上。如此容許該些入口使用CPU延伸頁表(EPT)而被獨立地映射入不同的位址空間。假如GENCAP中之中斷訊息儲存支援欄位為0,則此BAR不被實施。
訪客入口可由訪客內核模式軟體所使用以提呈描述符至該裝置。訪客入口之數目為中斷訊息儲存中之項目的數目乘以所支援之WQ的數目。用以提呈描述符之訪客入口的位址係容許該裝置判定該描述符之該WQ以及用來產生描述符完成之完成中斷的中斷訊息儲存項目(假如其為內核模式描述符,且假如請求完成中斷旗標被設定於該描述符中)。例如,假如該裝置支援8 WQ,則既定描述符之WQ為(訪客-入口-位址 >> 12)& 0x7,且用於完成中斷之中斷表項目指標為訪客-入口-位址 >> 15。
於一實施方式中,MSI-X是DSA所提供之唯一的PCIe中斷能力,且DSA不會實施傳統PCI中斷或MSI。此暫存器結構之細節係於PCI Express規格中。
於一實施方式中,PCI Express能力係控制位址轉譯。針對這些能力之值的僅某些組合可被支援,如表A中所示。該些值被檢查於一般控制暫存器(GENCTRL)中之致能位元被設為1的時刻。
PASID ATS PRS 操作
1 1 1 虛擬或實體位址可被使用,根據IOMMU組態。位址系使用該描述符中之PASID而被轉譯。此為推薦的模式。此模式需被用以容許對於該裝置之使用者模式存取或者容許虛擬化系統中之多數訪客間的共用。
0 1 0 僅實體位址可被使用。位址係使用該裝置之BDF而被轉譯且可為GPA或HPA,根據IOMMU組態。該描述符中之PASID被忽略。此模式可被使用在當位址轉譯被致能於該IOMMU中時,但該裝置僅由該內核或由虛擬化平台中之單一訪客內核所使用。
0 0 0 所有記憶體存取均為未轉譯的存取。僅實體位址可被使用。此模式應僅被使用於假如IOMMU位址轉譯被除能時。
0 0 1 不容許。假如軟體嘗試以這些組態之一來致能該裝置,則錯誤被報告且該裝置不被致能。
0 1 1
1 0 0
1 0 1
1 1 0
A
假如這些能力之任一者係由軟體所改變而同時該裝置被致能時,則該裝置可停止且錯誤被報告於軟體錯誤暫存器中。
於一實施方式中,軟體係組態PASID能力以控制該裝置是否使用PASID來履行位址轉譯。假如PASID被除能,則僅實體位址可被使用。假如PASID被致能,則虛擬或實體位址可被使用,根據IOMMU組態。假如PASID被致能,則位址轉譯服務(ATS)及頁請求服務(PRS)兩者均應被致能。
於一實施方式中,軟體係組態ATS能力以控制該裝置是否應在履行記憶體存取之前轉譯位址。假如位址轉譯被致能於IOMMU 2810,則ATS需被致能於該裝置中以獲得可接受的系統性能。假如位址轉譯未被致能於IOMMU 2810中,則ATS需被除能。假如ATS被除能,則僅實體位址可被使用且所有記憶體存取係使用未轉譯存取來被履行。假如PASID被致能則ATS需被致能。
於一實施方式中,軟體係組態PRS能力以控制該裝置是否可請求頁(當位址轉譯失敗時)。假如PASID被致能則PRS需被致能,而假如PASID被除能則其需被除能。
某些實施方式係利用虛擬記憶體空間,其被無縫地共用於一或更多處理器核心、加速器裝置、及/或其他類型的處理裝置(例如,I/O裝置)之間。特別地,一實施方式係利用共用虛擬記憶體(SVM)架構,其中相同的虛擬記憶體空間被共用於核心、加速器裝置、及/或其他處理裝置之間。此外,某些實施方式包括實體系統記憶體之異質形式,其係使用共同虛擬記憶體空間而被定址。實體系統記憶體之異質形式可使用不同的實體介面,用以與DSA架構連接。例如,加速器裝置可被直接地耦合至本地加速器記憶體,諸如高頻寬記憶體(HBM);而各核心可被直接地耦合至主機實體記憶體,諸如動態隨機存取記憶體(DRAM)。於此範例中,共用虛擬記憶體(SVM)被映射至HBM與DRAM之結合的實體記憶體,以致該加速器、處理器核心、及/或其他處理裝置可使用一恆定組的虛擬記憶體位址以存取HBM及DRAM。
這些及其他特徵加速器被詳細地描述於下。藉由短暫概述,不同的實施方式可包括以下設施特徵之一或更多者:
共用虛擬記憶體(SVM):某些實施方式支援SVM,其容許使用者等級應用程式提呈命令至DSA,直接地以描述符中之虛擬位址。DSA可支援轉譯虛擬位址至實體位址,使用包括處置頁錯失之輸入/輸出記憶體管理單元(IOMMU)。由描述符所參考之虛擬位址範圍可涵蓋其擴展橫跨多數異質記憶體類型之多數頁。此外,一實施方式亦支援實體位址之使用,只要資料緩衝器於實體記憶體中為相連的。
部分描述符完成:利用SVM支援,操作有可能於位址轉譯期間遭遇頁錯失。於某些情況下,該裝置可終止相應描述符之處理(於其中該錯失被遭遇之點)並提供完成記錄給軟體,其指示部分完成及錯失資訊以容許軟體採取補救動作並在解決該錯失之後再嘗試該操作。
批次處理:某些實施方式係支援提呈描述符於一「批次」中。批次描述符係指向一組虛擬相連工作描述符(亦即,含有實際資料操作之描述符)。當處理批次描述符時,DSA係從該指明的記憶體提取該些工作描述符並處理它們。
無狀態裝置:一實施方式中之描述符被設計以致用於處理該描述符所需的所有資訊係進來描述符酬載本身。如此容許該裝置儲存很少客戶特定狀態,其增進其可擴縮性。有一例外是完成中斷訊息,其(當被使用時)係由可信賴軟體所組態。
快取配置控制:此容許應用程式指明是否寫入至快取或忽略該快取而直接地寫入至記憶體。於一實施方式中,完成記錄總是被寫入至快取。
共用工作佇列(SWQ)支援:如以下詳細地描述,某些實施方式支援透過共用工作佇列(SWQ)之可擴縮工作提呈,使用進入佇列命令(ENQCMD)及進入佇列命令(ENQCMDS)指令。於此實施方式中,SWQ係由多數應用程式所共用。
專屬工作佇列(DWQ)支援:於某些實施方式中,有支援透過使用MOVDIR64B指令之專屬工作佇列(DWQ)的高通量工作提呈。於此實施方式中,DWQ係專屬於一特定應用程式。
QoS支援:某些實施方式容許服務品質(QoS)位準被指明給各工作佇列(例如,藉由內核驅動程式)。其可接著指派不同的工作佇列給不同的應用程式,容許來自不同應用程式之工作被調度自具有不同優先權之工作佇列。該工作佇列可被編程以使用針對組織QoS之特定通道。
偏移快取同調性機制
一實施方式係增進具有直接裝附記憶體(諸如堆疊DRAM或HBM)之加速器的性能,並簡化針對其利用具有直接裝附記憶體之加速器的應用程式開發。此實施方式容許加速器裝附的記憶體被映射為系統記憶體之部分,並使用共用虛擬記憶體(SVM)技術來存取(諸如其用於當前IOMMU實施方式中者),但不會遭受與全系統快取同調性相關的典型性能缺點。
存取加速器裝附的記憶體為系統記憶體之部分而無繁重的快取同調性負擔之能力係提供針對加速器卸載之有利操作環境。存取記憶體為系統位址映圖之部分的能力係容許主機軟體來設定運算元,並存取計算結果,而無傳統I/O DMA資料複製之負擔。此等傳統複製涉及驅動程式呼叫、中斷及記憶體映射的I/O(MMIO)存取,其相對於簡單記憶體存取均為無效率的。同時,存取加速器裝附的記憶體而無快取同調性負擔之能力可能對於卸載計算之執行時間是關鍵的。於具有實質上串流寫入記憶體流量之情況下,例如,快取同調性負擔可能會將由加速器所見之有效寫入頻寬切為一半。運算元設定之效率、結果存取之效率及加速器計算之效率均參與判定加速器卸載將工作得多好。假如卸載工作(例如,設定運算元;獲得結果)之成本太高,則卸載可能完全無法獲得回報,或者可能限制加速器於僅極大的工作。加速器執行一計算時的效率可能具有相同的效應。
一種實施方式係應用不同的記憶體存取及同調技術,根據起始該記憶體存取之單體(例如,加速器、核心,等等)及被存取之記憶體(例如,主機記憶體或加速器記憶體)。這些技術被稱為「同調偏移」機制,其係提供兩組快取同調性流程給加速器裝附的記憶體,一組係針對有效率的加速器存取至其裝附記憶體來最佳化,而第二組係針對主機存取至加速器裝附的記憶體及共用加速器/主機存取至加速器裝附的記憶體來最佳化。再者,其包括兩種技術以切換於這些流程之間,一種係由應用程式軟體所驅動,而另一種係由自律硬體暗示所驅動。於兩組同調流程中,硬體係維持完全快取同調性。
如一般於圖30中所示,一種實施方式係應用於電腦系統,其包括加速器3001及具有處理器核心和I/O電路3003之一或更多電腦處理器晶片,其中加速器3001係透過多協定鏈結2800而被耦合至該處理器。於一實施方式中,多協定鏈結3010為一種支援複數不同協定(包括,但不限定於,上述那些)之動態多工鏈結。然而,應注意:本發明之主要原理不限於任何特定組的協定。此外,注意:加速器3001及核心I/O 3003可被集成於相同的半導體晶片或不同的半導體晶片上,根據其實施方式。
於所示之實施方式中,加速器記憶體匯流排3012將加速器3001耦合至加速器記憶體3005,而分離的主機記憶體匯流排3011將核心I/O 3003耦合至主機記憶體3007。如上所述,加速器記憶體3005可包含高頻寬記憶體(HBM)或堆疊DRAM(其某些範例被描述於文中)而主機記憶體3007可包含DRAM,諸如雙資料速率同步動態隨機存取記憶體(例如,DDR3 SDRAM, DDR4 SDRAM,等等)。然而,本發明之主要原理不限於任何特定類型的記憶體或記憶體協定。
於一實施方式中,加速器3001及運行於處理器晶片3003內之處理核心上的「主機」軟體兩者係使用兩不同組的協定流程以存取加速器記憶體3005,稱為「主機偏移」流程及「裝置偏移」流程。如以下所述,一種實施方式係支援用以調變及/或選擇針對特定記憶體存取之協定流程的多數選項。
同調偏移流程被實施(部分地)於加速器3001與處理器晶片3003之一間的多協定鏈結2800上的兩協定層上:CAC協定層及MA協定層。於一實施方式中,同調偏移流程係藉由以下而被致能:(a)以新的方式使用CAC協定中之現存的運算碼,(b)加入新的運算碼至現存的MA標準,及(c)加入針對MA協定之支援至多協定鏈結3001(先前鏈結僅包括CAC及PCDI)。注意:多協定鏈結不限於僅支援CAC及MA;於一實施方式中,其僅需支援至少那些協定。
如文中所使用,「主機偏移」流程(圖30中所示者)為一組流程,其係透過處理器晶片3003(加速器3001係裝附至此晶片)中之標準同調控制器3009以將所有請求注入至加速器記憶體3005,包括來自加速器本身的請求。如此致使加速器3001採取迂迴路徑以存取其本身的記憶體,但容許來自加速器3001及處理器核心I/O 3003兩者之存取被保持為同調,使用處理器之標準同調控制器3009。於一實施方式中,該些流程係使用CAC運算碼以透過多協定鏈結而發送請求至處理器之同調控制器3009,以相同或類似於處理器核心3009發送請求至同調控制器3009的方式。例如,處理器晶片之同調控制器3009可將得自加速器3001之請求的UPI及CAC同調訊息(例如,監聽)發送至所有同儕處理器核心晶片(例如,3003)及內部處理器代理(代表該加速器),正如其將針對來自處理器核心3003之請求所執行者。以此方式,同調被維持於由加速器3001與處理器核心I/O 3003所存取的資料之間。
於一實施方式中,同調控制器3009亦條件式地透過多協定鏈結2800以發送記憶體存取訊息至加速器之記憶體控制器3006。這些訊息係類似於其同調控制器3009所傳送至記憶體控制器(其針對它們的處理器晶粒而言是本地的)之訊息,並包括其容許資料被直接地返回至加速器3001內部之代理的新運算碼,以取代迫使資料被返回至多協定鏈結2800之處理器的同調控制器3009,並接著透過多協定鏈結2800而返回至加速器3001以成為CAC回應。
於圖30中所示之「主機偏移」模式的一種實施方式中,其指向加速器裝附的記憶體3005之來自處理器核心3003的所有請求被直接地傳送至處理器同調控制器3009,正如其指向一般主機記憶體3007之方式。同調控制器3009可應用其標準快取同調性演算法並傳送其標準快取同調性訊息,正如其針對存取自加速器3001所執行者,及正如其針對存取至一般主機記憶體3007所執行者。同調控制器3009亦針對此類請求透過多協定鏈結2800以條件式地傳送MA命令,雖然於此情況下,MA流程係跨越多協定鏈結2800以返回資料。
「裝置偏移」流程(顯示於圖31中)為流程,其容許加速器3001存取其本地裝附的記憶體3005而不諮詢主機處理器之快取同調控制器3007。更明確地,這些流程係容許加速器3001經由記憶體控制器3006以存取其本地裝附的記憶體而不透過多協定鏈結2800來傳送請求。
於「裝置偏移」模式中,來自處理器核心I/O 3003之請求被發送如針對以上「主機偏移」之描述,但被不同地完成於其流程之MA部分中。當於「裝置偏移」中時,對於加速器裝附的記憶體3005之處理器請求被完成如其被發送為「未快取」請求。此「未快取」約定被使用以致其受制於裝置偏移流程之資料永遠無法被快取於處理器之快取階層中。此事實係容許加速器3001存取其記憶體3005中之裝置偏移的資料而無須諮詢處理器上之快取同調控制器3009。
於一實施方式中,對於「未快取」處理器核心3003存取流程之支援被實施以整體觀察的,使用處理器之CAC匯流排上的一次(「GO-UO」)回應。此回應係將資料之一片段返回至處理器核心3003,並指示該處理器使用該資料之值僅一次。如此防止該資料之快取並滿足該「未快取」流程之需求。於具有不支援GO-UO回應之核心的系統中,「未快取」流程可使用多協定鏈結2800之MA層上以及處理器核心3003之CAC匯流排上的多訊息回應序列來實施。
明確地,當處理器核心被發現指向加速器3001上之「裝置偏移」頁時,則加速器便設定某狀態以阻擋來自加速器之對於目標快取線的未來請求,並傳送特殊「裝置偏移命中」回應於多協定鏈結2800之MA層上。回應於此MA訊息,處理器之快取同調控制器3009將資料返回至請求的處理器核心3003並立即以監聽無效化訊息接續該資料返回。當處理器核心3003確認監聽無效化完成時,則快取同調控制器3009便於多協定鏈結2800之MA層上傳送另一特殊MA「裝置偏移阻擋完成」訊息回至加速器3001。此完成訊息致使加速器3001清除前述的阻擋狀態。
圖107闡明使用偏移之實施例。於一實施方式中,裝置與主機偏移流程之間的選擇係由一種偏移追蹤器資料結構所驅動,該資料結構可被保持為加速器記憶體3005中之偏移表10707。偏移表10707可為頁粒度的結構(亦即,以記憶體頁之粒度來控制),其包括1或2位元於每加速器裝附的記憶體頁。偏移表10707可被實施於加速器裝附的記憶體3005之竊取的記憶體範圍中,有或沒有偏移快取10703於該加速器中(例如,用以快取偏移表10707之頻繁/最近使用的項目)。替代地,整個偏移表10707可被保持於加速器3001內。
於一實施方式中,與加速器裝附的記憶體3005之各存取相關的偏移表項目係在對於該加速器記憶體之實際存取前被存取,造成以下操作: ˙ 於裝置偏移中發現其頁之來自加速器3001的本地請求被直接地傳遞至加速器記憶體3005。 ˙ 於主機偏移中發現其頁之來自加速器3001的本地請求係透過多協定鏈結2800上之CAC請求而被傳遞至處理器3003。 ˙ 於裝置偏移中發現其頁之來自處理器3003的MA請求係使用上述「未快取」流程以完成該請求。 ˙ 於主機偏移中發現其頁之來自處理器3003的MA請求係完成該請求如一般的記憶體讀取。
頁之偏移狀態係藉由以下之任一者而被改變:軟體為基的機制、硬體協助之軟體為基的機制、或(針對有限組的情況)全然硬體為基的機制。
一種用於改變偏移狀態之機制係利用API呼叫(例如,OpenCL),其(接著)呼叫加速器之裝置驅動程式,其(接著)傳送(或將一命令描述符放入佇列)至加速器3001以指引其改變偏移狀態並(針對某些變遷)履行快取清除操作於該主機中。快取清除操作是針對從主機偏移至裝置偏移之變遷所必要的,但並非針對相反變遷所必要的。
於某些情況下,軟體太難以判定何時做出偏移變遷API呼叫以及識別其需要偏移變遷之頁。於此等情況下,加速器可實施偏移變遷「暗示」機制,其中其係檢測針對偏移變遷之需求並傳送訊息至其驅動程式以指示此需求。暗示機制可簡單地為一種回應於偏移表查找之機制,其係觸發對於主機偏移頁之加速器存取或對於裝置偏移頁之主機存取,且其將該事件經由中斷而通知給加速器之驅動程式。
注意:某些實施方式可能需要第二偏移狀態位元以致能偏移變遷狀態值。如此容許系統繼續存取記憶體頁,當那些頁係處於偏移改變之程序中時(亦即,當快取被部分地清除,且由於後續請求之遞增快取污染需被抑制時)。
依據一實施方式之範例程序被闡明於圖32中。該程序可被實施於文中所述之系統及處理器架構上,但不限定於任何特定的系統或處理器架構。
於3201,一特定組的頁被置於裝置偏移中。如上所述,此可藉由更新偏移表中之這些頁的項目以指示其該些頁係於裝置偏移中(例如,藉由設定與各頁相關的位元)來完成。於一實施方式中,一旦設定為裝置偏移,則該些頁被確保不會被快取於主機快取記憶體中。於3202,該些頁被配置自裝置記憶體(例如,軟體藉由起始驅動程式/API呼叫以配置該些頁)。
於3203,運算元係從處理器核心被推送至該些配置的頁。於一實施方式中,此係藉由軟體使用API呼叫以將運算元頁翻至主機偏移(例如,經由OpenCL API呼叫)來完成。不需要任何資料副本或快取清除,且運算元資料可在此階段成為位於主機快取階層中之某任意位置上。
於3204,加速器裝置係使用該些運算元以產生結果。例如,其可執行命令並處理直接地來自其本地記憶體之資料(例如,以上所討論之3005)。於一實施方式中,軟體係使用OpenCL API以將運算元頁翻回至裝置偏移(例如,更新偏移表)。由於該API呼叫,工作描述符被提呈給裝置(例如,經由在專屬工作佇列上共用,如以下所描述者)。工作描述符可指示裝置從主機快取清除運算元頁,造成快取清除(例如,使用CAC協定上之CLFLUSH而被執行)。於一實施方式中,加速器係執行以無主機相關的同調負擔並將資料丟棄至結果頁。
於3205,結果被拉出自該些已配置的頁。例如,於一實施方式中,軟體係執行一或更多API呼叫(例如,經由OpenCL API)以將該些結果頁翻至主機偏移。此動作可能造成某偏移狀態被改變但不會造成任何同調或快取清除動作。主機處理器核心可接著存取、快取及共用該些結果資料如所需。最後,於3206,該些已配置的頁被釋出(例如,經由軟體)。
一其中運算元被釋出自一或更多I/O裝置的類似程序被闡明於圖33。於3301,一特定組的頁被置於裝置偏移中。如上所述,此可藉由更新偏移表中之這些頁的項目以指示其該些頁係於裝置偏移中(例如,藉由設定與各頁相關的位元)來完成。於一實施方式中,一旦設定為裝置偏移,則該些頁被確保不會被快取於主機快取記憶體中。於3302,該些頁被配置自裝置記憶體(例如,軟體藉由起始驅動程式/API呼叫以配置該些頁)。
於3303,運算元係從I/O代理被推送至該些已配置的頁。於一實施方式中,此係藉由軟體對I/O代理提出DMA請求且該I/O代理使用無配置儲存以寫入資料來完成。於一實施方式中,資料永不配置入主機快取階層且該些目標頁保持於裝置偏移中。
於3304,加速器裝置係使用該些運算元以產生結果。例如,軟體可提呈工作給加速器裝置;無須頁變遷(亦即,頁保持於裝置偏移中)。於一實施方式中,加速器係執行以無主機相關的同調負擔且加速器將資料丟棄至結果頁。
於3305,I/O代理從該些已配置的頁拉出結果(例如,於來自軟體之方向下)。例如,軟體可對I/O代理提出DMA請求。無須頁變遷,因為來源頁係保持於裝置偏移中。於一實施方式中,I/O橋係使用RdCurr(讀取電流)請求以從結果頁抓取資料之不可快取副本。
於某些實施方式中,工作佇列(WQ)係保留:由軟體所提呈之「描述符」、用以實施服務品質(QoS)和公平性策略之仲裁器、用以處理該些描述符之處理引擎、位址轉譯和快取介面、及記憶體讀取/寫入介面。描述符係定義待執行之工作的範圍。如圖34中所示,於一實施方式中,有兩種不同類型的工作佇列:專屬工作佇列3400及共用工作佇列3401。專屬工作佇列3400係儲存單一應用程式3413之描述符而共用工作佇列3401係儲存由多數應用程式3410-3412所提呈之描述符。硬體介面/仲裁器3402係依據指明的仲裁策略(例如,根據各應用程式3410-3413之處理需求及QoS/公平性策略)以從工作佇列3400-3401調度描述符至加速器處理引擎3405。
圖108A-B闡明記憶體映射I/O(MMIO)空間暫存器,其係使用以工作佇列為基的實施方式。版本暫存器10807係報告由該裝置所支援之此架構規格的版本。
一般能力暫存器(GENCAP)10808係指明裝置之一般能力,諸如最大轉移大小、最大批次大小,等等。表B係列出其可被指明於GENCAP暫存器中之各種參數和值。
GENCAP 基礎:BAR0       偏置:0x10          大小:8位元組(64位元)
位元 屬性 大小 建議值 描述
63:48 RO 16位元 1024 中斷訊息儲存大小 中斷訊息儲存中之項目數。假如中斷訊息儲存支援能力為0,則此欄位為0。
47:36 RO 12位元    未使用
35:32 RO 4位元 5 最大轉移大小 其可被指明於描述符中之最大轉移大小為2(N+16),其中N為此欄位中之值。
31:16 RO 16位元 64 最大批次大小 其可由批次描述符所參考之描述符的最大數目。
15:10 RO 6位元    未使用
9 RO 1位元 1 耐久寫入支援 0: 耐久寫入旗標不被支援。1: 耐久寫入旗標被支援。
8 RO 1位元 1 目的地讀回支援 0: 目的地讀回旗標不被支援。1: 目的地讀回旗標被支援。
7 RO 1位元    未使用
6 RO 1位元 1 中斷訊息儲存支援 0: 中斷訊息儲存及訪客入口不被支援。 1: 中斷訊息儲存及訪客入口被支援。
5:3 RO 3位元    未使用
2 RO 1位元 1 目的地無監聽支援 0: 無監聽不被支援於記憶體寫入。描述符中之目的地無監聽旗標被忽略。 1: 無監聽被支援於記憶體寫入並可由各描述符中之目的地無監聽旗標所控制。
1 RO 1位元 1 目的地快取填充支援 0: 針對寫入存取之快取填充不被支援。描述符中之目的地快取填充位元被忽略。 1: 針對寫入存取之快取填充被支援。軟體可使用描述符中之目的地快取填充旗標以控制由各描述符之快取的使用。
0 RO 1位元 0 阻擋錯失支援 0: 阻擋錯失不被支援。阻擋錯失係致能WQCFG暫存器中之位元且描述符中之阻擋錯失旗標被保存。假如頁錯失發生於來源或目的地記憶體存取上,則該操作便停止且該頁錯失被報告給軟體。 1: 阻擋錯失被支援。頁錯失上之行為係取決於各WQCFG暫存器中之阻擋錯失致能位元的值以及各描述符中之阻擋錯失旗標。 參考段落3.2.15有關頁錯失處置之更多資訊。
B
於一實施方式中,工作佇列能力暫存器(WQCAP)10810係指明工作佇列之能力,諸如針對操作之專屬及/或共用模式的支援、引擎之數目、工作佇列之數目。以下的表C係列出其可被組態之各種參數和值。
WQCAP 基礎:BAR0       偏置:0x20          大小:8位元組(64位元)
位元 屬性 大小 描述
63:51 RO 13位元    未使用
50 RO 1位元 1 工作佇列組態支援 0: 引擎組態、群組組態、及工作佇列組態暫存器是唯讀的且反應該裝置之固定組態,除了其WQCFG之WQ PASID及WQ U/S欄位是可寫入的(假如WQ模式為1的話)。1: 引擎組態、群組組態、及工作佇列組態暫存器是讀寫的且可由軟體所使用以設定所欲的組態。
49 RO 1位元 1 專屬模式支援 0: 專屬模式不被支援。所有WQ需被組態以共用模式。 1: 專屬模式被支援。
48 RO 1位元 1 共用模式支援 0: 共用模式不被支援。所有WQ需被組態以專屬模式。 1: 共用模式被支援。
47:32 RO 16位元    未使用
31:24 RO 8位元 4 引擎之數目
23:16 RO 8位元 8 WQ之數目
15:0 RO 16位元 64 總WQ大小 此大小可被劃分為使用WQCFG暫存器之多數WQ,用以支援多數QoS等級及/或多數專屬工作佇列。
C
於一實施方式中,操作能力暫存器(OPCAP) 10811為用以指明該裝置所支援之操作類型的位元遮罩。各位元係相應於具有如位元位置之相同碼的操作類型。例如,此暫存器之位元係相應於No-op操作(碼0)。假如該操作被支援的話則該位元被設定,而假如該操作不被支援的話則該位元被清除。
OPCAP 基礎:BAR0    偏置:0x30 大小:32位元組(4 x 64位元)
位元 屬性 大小 描述
255:0 RO 256位元 各位元係相應於一操作碼,並指示該操作類型是否被支援。參見段落5.1.2有關該些操作碼之值。假如該位元為1,則相應的操作類型被支援;假如該位元為0,則相應的操作類型不被支援。相應於未定義操作碼之位元為未使用且被讀取為0。
D
於一實施方式中,一般組態暫存器(GENCFG)10812係指明虛擬通道(VC)引導標籤。參見以下的表E。
GENCFG 基礎: BAR0       偏置:0x50 大小:8位元組(64位元)
位元 屬性 大小 描述
63:16 RW 48位元 保留
15:8 RW 8位元 VC1引導標籤 此值被使用以記憶體寫入至VC1。
7:0 RW 8位元 VC0引導標籤 此值被使用以記憶體寫入至VC0。
E
於一實施方式中,一般控制暫存器(GENCTRL) 10813係指示中斷是否產生給硬體或軟體錯誤。參見以下的表F。
GENCTRL 基礎:BAR0    偏置:0x58 大小:4位元組(32位元)
位元 屬性 大小 描述
31:2 RW 30位元 保留
1 RW 1位元 軟體錯誤中斷致能 0: 無中斷針對錯誤而被產生。 1: 於MSI-X表中之指標0上的中斷被產生在當SWERROR之位元0從0改變至1時。中斷之位元1造成暫存器被設定。
0 RW 1位元 硬體錯誤中斷致能 0: 無中斷針對錯誤而被產生。 1: 於MSI-X表中之指標0上的中斷被產生在當HWERROR之位元0從0改變至1時。中斷之位元0造成暫存器被設定。
F
於一實施方式中,裝置致能暫存器(ENABLE)係儲存:錯誤碼有關裝置是否被致能之指示符、及裝置重設值。參見以下的表G有關更多細節。
致能 基礎:BAR0 偏置:0x60 大小:4位元組(32位元)
位元 屬性 大小 描述
32:16 RO 16位元 保留
15:8 RO 8位元 錯誤碼 此欄位被用以報告其在該致能欄位被設定之時刻所測得的錯誤。假如此欄位被設為非零值,則致能將為0,而反之亦然。0: 無錯誤 1: 當致能裝置時組態中之未指明錯誤 2: 匯流排主致能為0。 3: PASID、ATS、及PRS之組合為無效。4: WQCFG大小欄位之總和係超出範圍。 5: 無效群組組態: -   群組組態暫存器具有一零欄位及一非零欄位; -   WQ是在多於一群組中; -   現用WQ不在群組中; -   不活動WQ是在群組中; -   引擎是在多於一群組中; 6: 當致能或已致能為1時重設欄位設為1。
7:3 RO 6位元 未使用
2 WO 1位元 重設 清除所有MMIO暫存器至預設值。重設可僅被設定在當已致能為0時。 重設及已致能可同時地均被寫入為1。重設總是讀為0。
1 RO 1位元 已致能 0: 裝置不被致能。無工作被履行。所有ENQ操作返回再嘗試。 1: 裝置被致能。描述符可被提呈至工作佇列。
0 RW 1位元 致能 軟體寫入1至此位元以致能該裝置。該裝置檢查組態並準備接收描述符至工作佇列。軟體需等待直到已致能位元讀回為1,在使用該裝置之前。 軟體寫入0至此位元以除能該裝置。該裝置停止接受描述符並等待所有進入佇列的描述符完成。軟體需等待直到已致能位元讀回為0,在改變該裝置組態之前。 假如軟體寫入1在當該裝置被致能或者軟體寫入0在當該裝置被除能時,則沒有效果。
G
於一實施方式中,中斷原因暫存器(INTCAUSE)係儲存其指示中斷之原因的值。參見以下的表H。
INTCAUSE 基礎:BAR0                       偏置:0x68          大小:4位元組(32位元)
位元 屬性 大小 描述
31:4 RO 28位元 保留
3 RW1C 1位元 WQ佔有率低於限制
2 RW1C 1位元 異常中止/汲取命令完成
1 RW1C 1位元 軟體錯誤
0 RW1C 1位元 硬體錯誤
H
於一實施方式中,命令暫存器(CMD)10814被用以提呈汲取WQ、汲取PASID、和汲取所有命令。異常中止欄位係指示所請求的操作為汲取或異常中止。在寫入至此暫存器之前,軟體可確保其先前經由此暫存器所提呈之任何命令已完成。在寫入至此暫存器之前,軟體可組態該命令組態暫存器以及命令完成記錄位址暫存器(假如完成記錄被請求的話)。
汲取所有命令係汲取或異常中止所有WQ及所有引擎中之所有未處理描述符。汲取PASID命令係汲取或異常中止其使用所有WQ及所有引擎中所指明之PASID的描述符。汲取WQ係汲取或異常中止指定WQ中之所有描述符。根據實施方式,任何汲取命令可等待其他描述符之完成,除了其必須等待的描述符之外。
假如異常中止欄位為1,則軟體便請求其受影響的描述符被放棄。然而,硬體仍可完成其部分或全部。假如一描述符被放棄,則無完成記錄被寫入且無完成中斷被產生給該描述符。其他記憶體存取之部分或全部可發生。
命令之完成係藉由產生完成中斷(假如被請求的話)、及藉由清除此暫存器之狀態欄位來指示。在該完成被通知之時刻,所有受影響的描述符被完成或者放棄,且無進一步的位址轉譯、記憶體讀取、記憶體寫入、或中斷將由於任何受影響的描述符而被產生。參見以下的表I。
CMD 基礎:BAR0    偏置:0x70 大小:4位元組(32位元)
位元 屬性 大小 描述
31 RO 1位元 狀態  0: 命令完成了(或者無命令已被提呈)。1: 命令正進行中。 此欄位被忽略在當暫存器被寫入時。
30:29 RV 2位元 保留
28 RW 1位元 異常中止 0: 硬體需等待匹配描述符之完成。1: 硬體可丟棄任何或所有匹配描述符。
27:24 RW 4位元 命令0:未使用。 1: 汲取所有 2:  汲取PASID 3: 汲取WQ 4-15: 保留
23:21 RV 2位元 保留
20 RW 1位元 請求完成中斷 中斷係使用MSI-X表中之項目0而被產生。
19:0 RW 20位元 運算元 假如命令為汲取PASID,則此欄位含有用以汲取或異常中止之PASID。 假如命令為汲取WQ,則此欄位含有用以汲取或異常中止之WQ的指標。 假如該命令為汲取全部則此欄位是未使用。
I
於一實施方式中,軟體錯誤狀態暫存器(SWERROR)10815係儲存多數不同類型的錯誤,諸如:提呈描述符時之錯誤;錯誤轉譯描述符中之完成記錄位址;錯誤確認描述符,假如該描述符中之完成記錄位址有效旗標是0的話;以及當處理描述符時之錯誤(諸如,頁錯失),假如該描述符中之完成記錄位址有效旗標是0的話。參見以下的表J。
SWERROR 基礎:BAR0 偏置:0x80 大小:16位元組(2 x 64位元)  
位元 屬性 大小 描述  
127:64 RO 64位元 位址 假如該錯誤為頁錯失,則此為錯失位址。否則此欄位為未使用。  
63 RO 1位元 U/S 造成該錯誤之該描述符的U/S欄位。  
62:60 RO 3位元 未使用。  
59:40 RO 20位元 PASID 造成該錯誤之該描述符的PASID欄位。  
39:32 RO 8位元 操作 造成該錯誤之該描述符的操作欄位。  
31:24 RO 8位元 指標 假如該描述符被提呈以批次,則此欄位含有該描述符的該指標於該批次內。否則,此欄位為未使用。  
23:16 RO 8位元 WQ指標 指示該描述符被提呈至哪個WQ。  
15:8 RO 8位元 錯誤碼  
   0x00 未使用   
0x01 未使用   
0x02- 0x7f 這些值相應於描述符完成狀態值d。假如當處理其中完成記錄位址有效旗標為0之描述符時有錯誤發生,則這些值被使用。   
0x80 未使用   
0x81 用以提呈描述符之入口係相應於其未被致能之WQ。   
0x82 描述符被提呈以MOVDIR64B至共用WQ。   
0x83 描述符被提呈以ENQCMD或ENQCMDS至專屬WQ。   
0x84 描述符被提呈以MOVDIR64B至專屬WQ,其不具有空間以接受該描述符。   
0x85 頁錯失發生在當轉譯完成記錄位址時。   
0x86 PCI組態暫存器被改變在當該裝置被致能時(包括BME、ATS、PASID、PRS)。此錯誤造成該裝置停止。此錯誤覆寫先前記錄於此暫存器中之任何錯誤。   
            0x87 完成記錄位址並非32位元組對準的。   
0x88- 0xff TBD   
0x88- 0xff TBD   
7 RO 1位元 未使用。
6:5 RO 2位元 錯失碼。 假如該錯誤為頁錯失,則此為錯失碼。 否則,此欄位為未使用。
4 RO 1位元 批次 0: 該描述符被直接地提呈。1: 該描述符被批次地提呈。
3 RO 1位元 WQ指標有效 0: 該描述符所被提呈至之WQ是未知的。WQ指標欄位是未使用的。 1: WQ指標欄位係指示該描述符被提呈至哪個WQ。
2 RO 1位元 描述符有效 0: 造成該錯誤之描述符是未知的。批次、操作、指標、U/S、及PASID欄位是未使用的。 1: 批次、操作、指標、U/S、及PASID欄位是有效的。
1 RW1C 1位元 溢流 0: 此暫存器中所記錄的最後錯誤是最近錯誤。 1: 一或更多額外錯誤係發生在此暫存器中所記錄的最後錯誤之後。
0 RW1C 1位元   
J
於一實施方式中,硬體錯誤狀態暫存器(HWERROR)10816係以一種如軟體錯誤狀態暫存器之類似方式(參見上述)。
於一實施方式中,群組組態暫存器(GRPCFG) 10817係儲存各工作佇列/引擎群組之組態資料(參見圖36-37)。特別地,該群組組態表為BARO中之暫存器的陣列,其控制工作佇列之映射至引擎。雖然有如引擎之相同數目的群組,但軟體可組態其所需的群組之數目。各現用群組含有一或更多工作佇列及一或更多引擎。任何未使用群組需使得WQ欄位及引擎欄位兩者均等於0。提呈至群組中之任何WQ的描述符可由該群組中之任何引擎所處理。各現用工作佇列需位於單一群組中。現用工作佇列是其相應WQCFG暫存器之WQ大小欄位為非零的工作佇列。其不在群組中之任何引擎是不活動的。
各GRPCFG暫存器10817可被劃分為三個子暫存器,而各子暫存器為一或更多32位元字元(參見表K-M)。這些暫存器可為唯讀的,當該裝置被致能時。假如WQCAP之工作佇列組態支援欄位為0,則其亦為唯讀的。
BAR0中之子暫存器的偏置(針對各群組G,0 ≤ G <引擎之數目)於一實施方式中為如下:
子暫存器 偏置 32位元字元之數目  
GRPWQCFG 0x1000 +G × 0x40 8  
GRPENGCFG 0x1000 +G × 0x40 + 0x20 2  
GRPFLAGS 0x1000 +G × 0x40 + 0x28 1  
             
GRPWQCFG 基礎:BAR0    偏置:0x1xx0 大小:256位元(8 x 32位元)
位元 屬性 大小 描述
255:0 RW 8 × 32位元 WQs 各位元係相應於WQ,並指示其相應WQ係位於該群組中。超過可用WQ之數目的位元被保留。各現用WQ需位於剛好一群組中。不活動WQ(於WQCFG中之WQ大小為0的那些)不得於任何群組中。
K
GRPENGCFG 基礎:BAR0    偏置:0x1xy0 大小:64位元(2 x 32位元)
位元 屬性 大小 描述
63:0 RW 2 × 32位元 引擎 各位元係相應於一引擎,並指示其相應引擎係位於該群組中。超過可用引擎之數目的位元被保留。
L
GRPFLAGS 基礎:BAR0    偏置:0x1xy8 大小:32位元
位元 屬性 大小 描述
31:1 RV 31位元 保留
0 RW 1位元 VC 指示該VC將由該群組中之引擎所使用。假如該位元為0,則VC0被使用。假如該位元為1,則VC1被使用。VC1應由其被用以存取相變記憶體之引擎所使用。VC0應由其不存取相變記憶體之引擎所使用。
M
於一實施方式中,工作佇列組態暫存器(WQCFG)10818係儲存其指明各工作佇列之操作的資料。WQ組態表為BAR0中之16位元組暫存器的陣列。WQ組態暫存器之數目係匹配WQCAP中的WQ欄位之數目。
各16位元組WQCFG暫存器被劃分為四個32位元子暫存器,其亦可使用對準的64位元讀取或寫入操作而被讀取或寫入。
各WQCFG-A子暫存器是唯讀的,當該裝置被致能時或假如WQCAP之工作佇列組態支援欄位為0的話。
各WQCFG-B在任何時刻是可寫入的,除非WQCAP之工作佇列組態支援欄位為0。假如WQ臨限值欄位含有大於WQ大小之值(在WQ被致能之時刻),則該WQ不被致能且WQ錯誤碼被設為4。假如WQ臨限值欄位被寫入以大於WQ大小之值(當WQ被致能時),則該WQ被除能且WQ錯誤碼被設為4。
各WQCFG-C子暫存器是唯讀的,當該WQ被致能時。其可被寫入在設定WQ致能為1之前或同時。假如WQCAP之工作佇列組態支援欄位為0,則以下欄位在所有時刻是唯讀的:WQ模式、WQ阻擋錯失致能、及WQ優先權。WQCFG-C之以下欄位是可寫入的,當該WQ不被致能時,即使WQCAP之工作佇列組態支援欄位為0:WQ PASID   及WQ U/S.
各WQCFG-D子暫存器在任何時刻是可寫入的。然而,當該裝置不被致能時設定WQ致能為1是錯誤。
當WQ致能被設為1時,WQ致能及WQ錯誤碼欄位被清除。接著,WQ致能或WQ錯誤碼將被設為非零值,其係指示該WQ是否被成功地致能。
所有WQCFG暫存器之WQ大小欄位的總和不得大於GENCAP中之總WQ大小欄位。此限制在該裝置被致能之時刻被檢查。WQ大小欄位為0之WQ無法被致能,而此類WQCFG暫存器之所有其他欄位被忽略。該WQ大小欄位是唯讀的,當該裝置被致能時。參見表N有關子暫存器之各者的資料。
WQCFG-A 基礎:BAR0 偏置:0x2xx0 大小:4位元組(32位元)
位元 屬性 大小 描述
31:16 RV 16位元 保留
15:0 RW 16位元 WQ大小 配置至此WQ之WQ儲存中的項目之數目。
WQCFG-B 基礎:BAR0    偏置:0x2xx4 大小:4位元組(32位元)
位元 屬性 大小 描述
31:16 RV 16位元 保留
15:0 RW 16位元 WQ臨限值 其可經由無特權及訪客入口而被寫入之此WQ中的項目之數目。此欄位需小於或等於WQ大小。
WQCFG-C 基礎:BAR0    偏置:0x2xx8 大小:4位元組(32位元)
位元 屬性 大小 描述
31 RW 1位元 WQ U/S 將被用於提呈至此WQ之描述符的U/S旗標(當其處於專屬模式時)。假如該WQ係處於共用模式,則此欄位被忽略。
30:28 RV 3位元 保留
27:8 RW 20位元 WQ PASID 將被用於提呈至此WQ之描述符的PASID(當其處於專屬模式時)。假如該WQ係處於共用模式,則此欄位被忽略。
7:4 RW 4位元 WQ優先權 工作佇列之相對優先權。較高的值為較高的優先權。此優先權係相對於相同群組中之其他WQ。其係控制從此WQ調度描述符進入該群組之引擎。
3:2 RV 2位元 保留
1 RW 1位元 WQ阻擋錯失致能 0: 阻擋錯失不被容許。被提呈至此WQ之描述符中的阻擋錯失旗標被保留。假如頁錯失發生於來源或目的地記憶體存取上,則該操作便停止且該頁錯失被報告給軟體。 1: 阻擋錯失被容許。頁錯失上之行為係根據各描述符中之阻擋錯失旗標的值。 假如GENCAP之阻擋錯失支援欄位為0,則此欄位被保留。
0 RW 1位元 WQ模式 0: WQ處於共用模式。 1: WQ處於專屬模式。
WQCFG-D 基礎:BAR0    偏置:0x2xxC 大小4位元組(32位元)
位元 屬性 大小 描述
31:16 RV 16位元 保留
15:8 RO 8位元 WQ錯誤碼0:無錯誤 1: 致能設定在當裝置不被致能時。2: 致能設定在當WQ大小為0時。 3: 保留欄位不等於0。 4: 大於WQ大小之WQ臨限值 注意:超出範圍之WQ大小被診斷在當該裝置被致能時。
7:2 RV 6位元 保留
1 RO 1位元 WQ已致能 0: WQ不被致能。對於此WQ之ENQ操作返回再嘗試。1: WQ被致能。
0 RW 1位元 WQ致能 軟體寫入1至此欄位以致能該工作佇列。該裝置需被致能在寫入1至此欄位之前。WQ大小需為非零。軟體需等待直到此WQCFG暫存器中之已致能欄位為1,在提呈工作至此WQ之前。 軟體寫入0至此欄位以除能該工作佇列。該WQ停止接受描述符並等待先前提呈至此WQ之所有描述符完成,在該時刻該已致能欄位將讀回為 0。軟體需等待直到該已致能欄位為0,在改變此暫存器中之任何其他欄位之前。 假如軟體寫入1在當該WQ被致能或者軟體寫入0在當該WQ不被致能時,則沒有效果。
N
於一實施方式中,工作佇列佔有率中斷控制暫存器10819(每工作佇列(WQ)一個)容許軟體請求一中斷,在當工作佇列佔有率下降至指明的臨限值時。當針對WQ之WQ佔有率中斷致能為1且目前WQ佔有率是在或小於WQ佔有率限制時,以下動作可被履行: 1. WQ佔有率中斷致能欄位被清除。 2. 中斷原因暫存器之位元3被設為1。 3. 假如中斷原因暫存器之位元3為0(在步驟2之前),則中斷係使用MSI-X表項目0而被產生。 4. 假如該暫存器被寫入以致能=1並限制 ≥ 目前WQ佔有率,則該中斷被立刻地產生。結果,假如該暫存器被寫入以致能=1並限制 ≥ WQ大小,則該中斷總是被立刻地產生。
WQINTR 基礎:BAR0    偏置:0x3000 + 4 × WQ ID 大小:32位元 x WQ之數目
位元 屬性 大小 描述
31 RW 1位元 WQ佔有率中斷致能 設定此欄位為1造成該裝置產生一中斷,當該WQ佔有率是在或小於WQ佔有率限制時。該裝置清除此欄位在當該中斷被產生時。
30:16 RV 15位元 保留
15:0 RO 16位元 WQ佔有率限制 當WQ佔有率降至或低於此欄位中之值時,中斷被產生,假如WQ佔有率中斷致能為1的話。
O
於一實施方式中,工作佇列狀態暫存器(每WQ一個)10820係指明目前於各WQ中之項目的數目。此數目可改變在每當描述符被提呈至或調度自該佇列時,因此其無法被依賴以判定是否有空間於該WQ中。
於一實施方式中,MSI-X項目10821係儲存MSI-X表資料。項目之偏置及數目係於MSI-X能力中。項目之建議數目為WQ之數目加2。
於一實施方式中,MSI-X擱置位元陣列10822係儲存項目之偏置及數目於MSI-X能力中。
於一實施方式中,中斷訊息儲存項目10823係儲存中斷訊息於表結構中。此表之格式係類似於PCIe定義的MSI-X表之格式,但其大小不限於2048項目。然而,此表之大小可改變於不同的DSA實施方式之間,並可小於2048項目於某些實施方式中。於一實施方式中,項目之數目係於一般能力暫存器之中斷訊息儲存大小欄位中。假如中斷訊息儲存支援能力為0,則此欄位不存在。為了DSA支援大量虛擬機器或容器,所支援的表大小需為重大的。
於一實施方式中,IMS中之各項目的格式被設定於如以下之表P中:
DWORD3 DWORD2 DWORD1 DWORD0
保留 訊息資料      訊息位址      00000000FEExxxxx
P
圖35闡明資料串流加速器(DSA)裝置之一實施方式,該裝置包含其接收透過I/O組織介面3501(例如,諸如上述多協定鏈結2800)所提呈之描述符的多數工作佇列3511-3512。DSA係使用I/O組織介面3501以接收來自客戶(諸如處理器核心、同儕輸入/輸出(IO)代理(諸如網路介面控制器(NIC))、及/或軟體鏈結的卸載請求)之下游工作請求,及用於上游讀取、寫入、和位址轉譯操作。所示之實施方式包括仲裁器3513,其係於該些工作佇列之間仲裁並調度工作描述符至複數引擎3550之一。仲裁器3513及工作佇列3511-1012之操作可透過工作佇列組態暫存器3500而被組態。例如,仲裁器3513可組態成實施各種QoS及/或公平性策略,用以從工作佇列3511-1012之各者調度描述符至引擎3550之各者。
於一實施方式中,排列於工作佇列3511-3512中之某些描述符為批次描述符3515,其係含有/識別工作描述符之批次。仲裁器3513傳遞批次描述符至批次處理單元3516,其係藉由讀取來自記憶體之描述符3518的陣列來處理批次描述符,使用透過轉譯快取3520而轉譯的位址(於處理器上之潛在地其他位址轉譯服務)。一旦實體位址已被識別,則資料讀取/寫入電路3540便從記憶體讀取該批次的描述符。
第二仲裁器3519係仲裁於由批次處理單元3516所提供之工作描述符3518的批次以及擷取自工作佇列3511-3512的個別工作描述符3514之間,並輸出該些工作描述符至工作描述符處理單元3530。於一實施方式中,工作描述符處理單元3530具有多階段以:讀取記憶體(經由資料R/W單元3540)、履行請求的操作於該資料上、產生輸出資料、及寫入輸出資料(經由資料R/W單元3540)、完成記錄、和中斷訊息。
於一實施方式中,工作佇列組態係容許軟體組態各WQ(經由WQ組態暫存器3500),無論是當作其接收使用無宣告ENQCMD/S指令之描述符的共用工作佇列(SWQ)或者是當作其接收使用已宣告MOVDIR64B指令之描述符的專屬工作佇列(DWQ)。如以上針對圖34所提及,DWQ可處理從單一應用程式所提呈的工作描述符及批次描述符,而SWQ可被共用於多數應用程式之間。WQ組態暫存器3500亦容許軟體控制哪些WQ 3511-3512饋送入哪些加速器引擎3550以及饋送各引擎之WQ 3511-3512的相對優先權。例如,有順序組的優先權可被指明(例如,高、中、低;1、2、3,等等)且描述符通常可被調度自較高優先權的工作佇列,比來自較低優先權工作佇列之調度更為前面或更為頻繁。例如,利用兩個工作佇列(識別為高優先權及低優先權)於每10個待調度描述符,則10個描述符中的8個可被調度自高優先權工作佇列而10個描述符中的2個被調度自低優先權工作佇列。各種其他技術可被用以達成介於工作佇列3511-3512之間的不同優先權等級。
於一實施方式中,資料串流加速器(DSA)與PCI Express組態機制是軟體相容的,並實施PCI標頭和延伸空間於其組態映射的暫存器組中。組態暫存器可透過來自根複合體(Root Complex)之CFC/CF8或MMCFG而被編程。所有內部暫存器可為可存取透過JTAG或SMBus介面。
於一實施方式中,DSA裝置係使用記憶體映射的暫存器以控制其操作。能力、組態、及工作提呈暫存器(入口)為可存取透過由BAR0、BAR2、及BAR4暫存器所定義的MMIO區(描述於下)。各入口可於分離的4K頁上以致其可使用處理器頁表而被獨立地映射入不同的位址空間(客戶)。
如前所述,軟體係透過描述符以指針對DSA之工作。描述符係指明:供DSA履行之操作的類型、資料和狀態緩衝器之位址、即刻運算元、完成屬性,等等(針對描述符格式之額外細節被提出於下)。完成屬性係指明欲寫入該完成記錄至之位址、及用以產生選擇性完成中斷所需之資訊。
於一實施方式中,DSA避免維持客戶特定的狀態於該裝置上。用以處理描述符之所有資訊係進入該描述符本身。如此增進使用者模式應用程式之間以及虛擬化系統中的不同虛擬機器之間的可共用性。
描述符可含有一操作及相關的參數(稱為工作描述符),或者其可含有工作描述符之陣列(稱為批次描述符)的位址。軟體係準備該描述符於記憶體並提呈該描述符至該裝置之工作佇列(WQ)3511-3512。該描述符係使用MOVDIR64B、ENQCMD、或ENQCMDS指令而被提呈至該裝置,根據WQ之模式及客戶之特權等級。
各WQ 3511-3512具有固定數目的插槽而因此可於沈重負載下變為滿的。於一實施方式中,該裝置提供所需的回饋以協助軟體實施流程控制。該裝置係從工作佇列3511-3512調度描述符並將其提呈至該些引擎以供進一步處理。當引擎3550完成描述符或遭遇某些導致異常中止之錯失或錯誤時,其係藉由寫入至主機記憶體中之完成記錄、發送中斷、或兩者以告知主機軟體。
於一實施方式中,各工作佇列可存取經由多數暫存器,各於裝置MMIO空間中之分離的4KB頁中。各WQ之一工作提呈暫存器被稱為「無特權入口」且被映射入使用者空間以供由使用者模式客戶所使用。另一工作提呈暫存器被稱為「特權入口」且係由內核模式驅動程式所使用。剩餘的是訪客入口,且係由虛擬機器中之內核模式客戶所使用。
如上所述,各工作佇列3511-3512可被組態成運行於兩模式之一,專屬或共用。DSA係暴露工作佇列能力暫存器中之能力位元以指示針對專屬及共用模式之支援。其亦暴露工作佇列組態暫存器3500中之控制以將各WQ組態成操作於該些模式之一。WQ之模式可僅被改變於當WQ被除能(亦即,(WQCFG.Enabled = 0))時。WQ能力暫存器及WQ組態暫存器之額外細節被提出於下。
於一實施方式中,於共用模式下,DSA客戶係使用ENQCMD或ENQCMDS指令以提呈描述符至工作佇列。ENQCMD及ENQCMDS係使用64位元組無宣告寫入並等待來自該裝置之回應(在完成之前)。DSA返回「成功」(例如,至請求的客戶/應用程式),假如該工作佇列中有空間時;或「再嘗試」,假如該工作佇列是滿的時。ENQCMD及ENQCMDS指令可返回命令提呈之狀態於零旗標中(0指示成功,而1指示再嘗試)。使用ENQCMD及ENQCMDS指令,多數客戶可直接地且同時地提呈描述符至相同的工作佇列。因為該裝置係提供此回饋,所以該些客戶可分辨其描述符是否被接受。
於共用模式下,DSA可保留某SWQ容量以用於經由內核模式客戶之特權入口的提呈。經由無特權入口之工作提呈被接受直到SWQ中之描述符的數目到達針對該SWQ而組態的臨限值。經由特權入口之工作提呈被接受直到SWQ是滿的。經由訪客入口之工作提呈係由該臨限值所限制,以其如無特權入口之相同方式。
假如ENQCMD或ENQCMDS指令返回「成功」,則該描述符已被該裝置所接受並被排列以供處理。假如該指令返回「再嘗試」,則軟體可嘗試再提呈該描述符至該SWQ;或假如其為使用無特權入口之使用者模式客戶,則其可請求該內核模式驅動程式以其名義使用該特權入口來提呈該描述符。如此協助避免服務之拒絕並提供向前進度保證。替代地,軟體可使用其他方法(例如,使用CPU以履行該工作),假如該SWQ是滿的時。
客戶/應用程式係由該裝置使用一種稱為程序位址空間ID(PASID)之20位元ID來識別。PASID係由該裝置所使用以查找裝置TLB 1722中之位址並傳送位址轉譯或頁請求至IOMMU 1710(例如,透過多協定鏈結2800)。於共用模式下,將配合各描述符使用之PASID被含入該描述符之PASID欄位中。於一實施方式中,ENQCMD將來自特定暫存器(例如,PASID MSR)之目前執行緒的PASID複製入該描述符,而同時ENQCMDS容許管理模式軟體將PASID複製入該描述符。
於「專屬」模式下,DSA客戶可使用MOVDIR64B指令以提呈描述符至裝置工作佇列。MOVDIR64B係使用64位元組已宣告寫入,且該指令係由於寫入操作之已宣告本質而較快地完成。針對專屬工作佇列,DSA可暴露插槽之總數於該工作佇列中並根據軟體以提供流程控制。軟體係負責追蹤已提呈且完成之描述符的數目,以檢測工作佇列充滿狀況。假如軟體錯誤地提呈描述符至專屬WQ(當該工作佇列中沒有空間時),則該描述符被丟棄且該錯誤可被記錄(例如,於軟體錯誤暫存器中)。
因為MOVDIR64B指令不會填入PASID(當ENQCMD或ENQCMDS指令填入時),所以該描述符中之PASID欄位無法被使用於專屬模式。DSA可忽略其提呈至專屬工作佇列之描述符中的PASID欄位,並使用WQ組態暫存器3500之WQ PASID欄位以替代地執行位址轉譯。於一實施方式中,WQ PASID欄位係由DSA驅動程式所設定,當其組態該工作佇列於專屬模式下時。
雖然專屬模式不會由多數客戶/應用程式來共用單一DWQ,但DSA裝置可被組態成具有多數DWQ且該些DWQ之各者可被獨立地指派給客戶。此外,DWQ可被組態成具有相同的或不同的QoS等級以針對不同的客戶/應用程式提供不同的性能等級。
於一實施方式中,資料串流加速器(DSA)含有二或更多引擎3550,其係處理提呈至工作佇列3511-1012之描述符。DSA架構之一實施方式包括4個引擎,編號0至3。引擎0和1各能夠利用高達該裝置之全頻寬(例如,30 GB/s於讀取及30 GB/s於寫入)。當然所有引擎之組合頻寬亦被限制至該裝置可用的最大頻寬。
於一實施方式中,軟體係使用群組組態暫存器以將WQ 3511-3512及引擎3550組態成群組。各群組含有一或更多WQ及一或更多引擎。DSA可使用一群組中之任何引擎以處理一宣告至該群組中之任何WQ的描述符,而各WQ及各引擎可位於僅一群組中。群組之數目可相同於引擎之數目,因此各引擎可位於分離的群組中,但並非所有群組需被使用(假如任何群組含有多於一個引擎的話)。
雖然DSA架構容許很大的彈性以組態工作佇列、群組、及引擎,但硬體可能被狹隘地設計以用於特定的組態。引擎0和1可被組態成兩種不同方式之一,根據軟體需求。一種推薦的組態是將兩引擎0和1置於相同的群組中。硬體係使用任一引擎以處理來自該群組中之任何工作佇列的描述符。於此組態中,假如一引擎由於高潛時記憶體位址轉譯或頁錯失而具有拖延,則另一引擎可繼續操作並將整體裝置之通量最大化。
圖36顯示兩個工作佇列3621-3622及3623-3624,個別地於各群組3611及3612中,但可以有高達已支援的WQ之最大數目的任何數目。一群組中之WQ可為具有不同優先權的共用WQ;或者一共用WQ而其他為專屬WQ;或者具有相同或不同優先權的多數專屬WQ。於所示之範例中,群組3611係由引擎0和1 3601所服務,而群組3612係由引擎2和3 3602所服務。
如圖37中所示,使用引擎0 3700和1 3701之另一組態係將其個別地置於分離的群組3710和3711中。類似地,群組2 3712被指派給引擎2 3702而群組3被指派給引擎3 3703。此外,群組0 3710係由兩個工作佇列3721及3722所組成;群組1 3711係由工作佇列3723所組成;群組2 3712係由工作佇列3724所組成;及群組3 3713係由工作佇列3725所組成。
軟體可選擇此組態,當其想要減少其潛時敏感操作被阻擋在其他操作之後的可能性。以此組態,軟體提呈潛時敏感操作至其連接至引擎1 3702之工作佇列3723,且提呈其他操作至其連接至引擎0 3700之工作佇列3721-3722。
引擎2 3702及引擎3 3703可被使用(例如)以寫入至高頻寬非揮發性記憶體,諸如相變記憶體。這些引擎之頻寬能力可被縮放以匹配此類型的記憶體之預期的寫入頻寬。針對此使用,引擎組態暫存器之位元2及3應被設為1,指示其虛擬通道1(VC1)應被用於來自這些引擎之流量。
於沒有高頻寬之平台中,非揮發性記憶體(例如,相變記憶體)或者當DSA裝置不被用以寫入至此類型的記憶體時,則引擎2及3可為未使用的。然而,軟體有可能將其使用為額外的低潛時路徑,假設其所提呈的操作能耐受有限的頻寬。
當各描述符到達工作佇列之頭部時,其可由排程器/仲裁器3513所移除並傳遞至該群組中的該些引擎之一。針對批次描述符3515,其係指稱記憶體中之工作描述符3518,該引擎係從記憶體提取工作描述符之陣列(亦即,使用批次處理單元3516)。
於一實施方式中,針對各工作描述符3514,引擎3550預提取針對完成記錄位址之轉譯,並將操作傳遞至工作描述符處理單元3530。工作描述符處理單元3530使用裝置TLB 1722及IOMMU 1710於來源及目的地位址轉譯、讀取來源資料、履行指明的操作、及將目的地資料寫回至記憶體。當該操作完成時,該引擎將完成記錄寫入至預轉譯的完成位址並產生中斷,假如由該工作描述符所請求的話。
於一實施方式中,DSA之多數工作佇列可被用以提供服務品質(QoS)之多數等級。各WQ之優先權可被指明於WQ組態暫存器3500中。WQ之優先權係相對於該相同群組中之其他WQ(例如,對於其位於一群組中之WQ本身的優先權等級是沒有意義的)。一群組中之工作佇列具有相同或不同的優先權。然而,以相同優先權組態多數共用WQ於相同群組中是沒有意義的,因為單一SWQ將作用相同的目的。排程器/仲裁器3513係從工作佇列3511-3512調度工作描述符至引擎3550,依據其優先權。
圖38闡明描述符1300之實施方式,其包括:操作欄位3801,用以指明待履行之操作、複數旗標3802、程序位址空間識別符(PASID)欄位3803、完成記錄位址欄位3804、來源位址欄位3805、目的地位址欄位3806、完成中斷欄位3807、轉移大小欄位3808、及(潛在地)一或更多操作特定欄位3809。於一實施方式中,有三個旗標:完成記錄位址有效、請求完成記錄、及請求完成中斷。
共同欄位包括可信賴欄位及不可信賴欄位兩者。可信賴欄位永遠被DSA裝置所信賴,因為其係由CPU或者由主機上之特權(環0或VMM)軟體所佔據。不可信賴欄位係直接地由DSA客戶所供應。
於一實施方式中,可信賴欄位包括PASID欄位3803、保留欄位3811、及U/S(使用者/管理者)欄位3810(亦即,開始於0之偏置的4位元組)。當描述符被提呈以ENQCMD指令時,來源描述符中之這些欄位可被忽略。MSR(例如,PASID MSR)中所含有的值可被置於這些欄位中,在該描述符被傳送至該裝置之前。
於一實施方式中,當描述符被提呈以ENQCMDS指令時,來源描述符中之這些欄位被軟體所初始化。假如PCI Express PASID能力未被致能,則U/S 欄位3810被設為1而PASID欄位3803被設為0。
當描述符被提呈以MOVDIR64B指令時,描述符中之這些欄位可被忽略。該裝置替代地使用WQ組態暫存器3500之WQ U/S及WQ PASID欄位。
這些欄位可被忽略於一批次中之任何描述符。批次描述符3515之相應欄位被用於該批次中之每一描述符3518。表Q係提供針對這些可信賴欄位之各者的描述及位元位置。
   描述
31 U/S(使用者/管理者) 0: 該描述符為由使用者模式客戶所直接地提呈的或者由該內核以使用者模式客戶之名義所提呈的使用者模式描述符。 1: 該描述符為由內核模式軟體所提呈的內核模式描述符。 針對使用ENQCMD指令而從使用者模式所提呈的描述符,此欄位為0。針對使用ENQCMDS指令而從內核模式所提呈的描述符,軟體係佔據此欄位。
30:20 保留
19:0 PASID 此欄位含有請求程序之程序位址空間ID。針對使用ENQCMD指令而從使用者模式所提呈的描述符,此欄位被佔據自PASID MSR暫存器。針對使用ENQCMDS指令之內核模式提呈,軟體係佔據此欄位。
Q( 描述符可信賴欄位 )
以下表R係列出依據描述符之操作欄位3801之一實施方式中所履行者。
   運算元
0x00 No-op
0x01 批次
0x02 汲取
0x03 記憶體移動
0x04 填充
0x05 比較
0x06 比較即刻
0x07 產生差量記錄
0x08 應用差量記錄
0x09 利用雙投之記憶體複製
0x10 CRC產生
0x11 利用CRC產生之複製
0x12 DIF插入
0x13 DIF去除
0x14 DIF更新
0x20 快取清除
R( 操作類型 )
以下的表S係列出該描述符之一實施方式中所使用的旗標。
位元 描述
0 籬    0: 此描述符可被與其他描述符平行地執行。    1: 該裝置等待相同批次中之先前描述符完成,在開始此描述符上之工作前。假如任何先前描述符被完成以不等於成功之狀態,則此描述符及該批次中之所有後續描述符均被放棄。 此欄位可僅被設定於其位於一批次中之描述符中。其被保留於直接地提呈至工作佇列之描述符中。
1 阻擋錯失 0:  頁錯失造成該描述符之部分完成。 1:  該裝置等待頁錯失被解決而接著繼續該操作。 假如WQCFG中之阻擋錯失致能欄位為0,則此欄位被保留。
2 完成記錄位址有效 0:  該完成記錄位址不是有效。1:   該完成記錄位址是有效。 針對批次描述符之此旗標需為1,假如該完成佇列致能旗標被設定的話。 針對批次中之描述符的此旗標需為0,假如該批次描述符中之該完成佇列致能旗標為1的話。 否則,針對產生結果之任何操作(諸如比較)的此旗標需為1,且其針對任何使用虛擬位址之操作應為1,由於頁錯失之可能性,其需經由完成記錄而被報告。為了最佳結果,此旗標於所有描述符(除了使用完成佇列之那些以外)中應為1,因為其容許該裝置報告錯誤至其提呈該描述符之軟體。假如此旗標為0且一非預期錯誤發生,則該錯誤被報告至SWERROR暫存器,且其提呈該請求之軟體無法被告知有關該錯誤。 儘管有上述警告,假如該描述符使用實體位址或使用其軟體保證存在(固定)之虛擬位址,且軟體無須接收任何其他類型的錯誤之通知,則此旗標可為0。
3 請求完成記錄 0:  完成記錄僅被寫入在假如有頁錯失或錯誤的話。 1:  完成記錄總是被寫入在該操作之完成時。 針對任何產生結果之操作(諸如比較)的此旗標需為1。 假如完成記錄位址有效為0則此旗標需為0,除非該描述符係於一批次中且該批次描述符中之該完成佇列致能旗標為1。
4 請求完成中斷 0: 無中斷被產生在當該操作完成時。1:   中斷被產生在當該操作完成時。 假如完成記錄及完成中斷兩者均被產生,則該中斷總是被產生在該完成記錄被寫入之後。 此欄位被保留於以下條件之任一者下: ˙U/S位元為0(指示使用者模式描述符);或 ˙U/S位元為1(指示內核模式描述符)其該描述符係經由無特權入口而被提呈。
5 使用中斷訊息儲存 0:  完成中斷係使用MSI-X表項目而被產生 1:  完成中斷處置為中斷訊息儲存內之指標。 此欄位被保留於以下條件之任一者下: ˙請求完成中斷旗標為0; ˙U/S位元為0; ˙中斷訊息儲存支援能力為0;或 ˙該描述符經由訪客入口而被提呈。
6 完成佇列致能 0:  該批次中之各描述符含有其本身的完成記錄位址,假如需要的話。 1:  此批次描述符中之完成記錄位址將被使用為完成佇列之基礎位址,以被用於該批次中之所有描述符的完成記錄以及用於該批次描述符本身。 此欄位被保留,除非該操作欄位為批次。 假如GENCAP中之完成佇列支援欄位為0,則此欄位被保留。假如完成記錄位址有效旗標為0,則此欄位需為0。
7 檢查結果 0:  操作之結果不會影響該完成記錄之狀態欄位。 1:  假如該操作是成功的,則操作之結果會影響該完成記錄之狀態欄位。狀態被設為成功或具有假述詞之成功,根據該操作之結果。參見針對可能結果之各操作以及其如何影響該狀態的描述。 此欄位被用於比較、比較即刻、產生差量記錄、DIF去除、及DIF更新。其被保留給所有其他操作類型。
8 目的地快取填充 0:  寫入至該目的地位址之資料被傳送至記憶體。 1:  寫入至該目的地位址之資料被配置至CPU快取。 假如GENCAP中之目的地快取填充支援欄位為0,則此欄位被忽略。 此暗示不會影響對於該完成記錄之存取,其總是被寫入至快取。
9 目的地無監聽 0:  目的地位址存取監聽CPU快取。 1:  目的地位址存取不監聽CPU快取。 假如GENCAP中之目的地無監聽支援欄位為0,則此欄位被忽略。(所有記憶體存取被監聽。)
12:10 保留需為0。
13 嚴格排序 0:  預設行為:寫入至該目的地可變為失序地整體可觀察的。完成記錄寫入具有嚴格排序,因此其總是在所有寫入至該目的地為整體可觀察的以後完成。 1:  迫使所有記憶體之嚴格排序,因此其以由該裝置所發出的確實順序變為整體可觀察的。
14 目的地讀回 0:  無讀回被履行。 1:  在所有寫入至該目的地已由該裝置所發送之後,最後目的地位址之讀取被履行在該操作被完成之前。 假如GENCAP中之目的地讀回支援欄位為0,則此欄位被保留。
23:15 保留:需為0。
S( 旗標 )
於一實施方式中,完成記錄位址3804係指明該完成記錄之位址。該完成記錄可為32位元組且該完成記錄位址被對準於32位元組邊界上。假如完成記錄位址有效旗標為0,則此欄位被保留。假如該請求完成記錄旗標為1,則完成記錄被寫入至此位址於該操作之完成時。假如該請求完成記錄為0,則完成記錄僅在假如有頁錯失或錯誤時被寫入至此位址。
針對其產生結果之任何操作(諸如比較),完成記錄位址有效及請求完成記錄旗標兩者應為1,且完成記錄位址應為有效。
針對其使用虛擬位址之任何操作,完成記錄位址應為有效,無論請求完成記錄旗標是否被設定,以致其假設有頁錯失或錯誤則完成記錄可被寫入。
為了最佳結果,此欄位於所有描述符中應為有效,因為其容許該裝置報告錯誤至其提呈該描述符之軟體。假如此旗標為0且一非預期錯誤發生,則該錯誤被報告至SWERROR暫存器,且其提呈該請求之軟體無法被告知有關該錯誤。
假如完成佇列致能旗標被設定於該批次描述符中,則完成記錄位址欄位3804係針對一批次中之描述符被忽略;該批次描述符中之完成佇列位址被替代地使用。
於一實施方式中,針對其從記憶體讀取資料之操作,來源位址欄位3805係指明該來源資料之位址。針對該來源位址沒有對準需求。針對其寫入資料至記憶體之操作,目的地位址欄位3806係指明該目的地緩衝器之位址。針對該目的地位址沒有對準需求。針對某些操作類型,此欄位被使用為第二來源緩衝器之位址。
於一實施方式中,轉移大小欄位3808係指示將被讀取自該來源位址以履行該操作之位元組的數目。此欄位之最大值可為232-1,但最大容許轉移大小可以較少,且需被判定自一般能力暫存器之最大轉移大小欄位。轉移大小不應為0。針對大部分操作類型,針對轉移大小沒有對準需求。例外被標注於操作描述中。
於一實施方式中,假如使用中斷訊息儲存旗標為1,則完成中斷處置欄位3807係指明中斷訊息儲存項目以用於產生完成中斷。此欄位之值應小於GENCAP中的中斷訊息儲存大小欄位之值。於一實施方式中,完成中斷處置欄位3807被保留於以下條件之任一者下:使用中斷訊息儲存旗標為0;請求完成中斷旗標為0;U/S位元為0; 一般能力暫存器之中斷訊息儲存支援欄位為0;或描述符係經由訪客入口而被提呈。
如圖39中所示,完成記錄3900之一實施方式為其DSA所寫入(當該操作已完成或遭遇錯誤時)之記憶體中的32位元組結構。完成記錄位址應為32位元組對準的。
此區段係描述其為大部分操作類型所常見的完成記錄之欄位。各操作類型之描述包括完成記錄圖,假如該格式不同於此一者時。額外的操作特定欄位被進一步描述於下。完成記錄3900可永遠為32位元組,即使並非所有欄位均需要。完成記錄3900含有足夠的資訊以繼續該操作,假如其由於頁錯失而被部分地完成的話。
該完成記錄可被實施為記憶體中之32位元組對準的結構(由描述符3800之完成記錄位址3804所識別)。完成記錄3900含有完成狀態欄位3904,用以指示該操作是否已完成。假如該操作成功地完成,則完成記錄可含有該操作之結果(假如有的話),根據操作之類型。假如該操作並未成功地完成,則完成記錄含有錯失或錯誤資訊。
於一實施方式中,狀態欄位3904係報告該描述符之完成狀態。軟體應將此欄位初始化為0,因此其可檢測該完成記錄何時已被寫入。
0x00 未使用。指示其完成記錄尚未被該裝置所寫入。
0x01 成功
0x02 具有假述詞之成功
0x03 由於頁錯失之部分完成。
0x04 由於最大目的地大小或最大差量記錄大小超過所致之部分完成。
0x05 該批次中之一或更多操作完成以其狀態不等於成功。此值僅被用於批次描述符之完成記錄。
0x06 由於頁錯失所致之批次的部分完成係讀取描述符陣列。此值僅被用於批次描述符之完成記錄。
0x10 不支援操作碼
0x11 不支援旗標
0x12 非零保留欄位
0x13 超出範圍之轉移大小
0x14 超出範圍之描述符計數
0x15 超出範圍之最大目的地大小或最大差異記錄大小
0x16 利用雙投之記憶體複製、利用CRC產生之複製、DIF插入,DIF去除,或DIF更新描述符中之重疊的來源和目的地緩衝器
0x17 兩目的地緩衝器之位元11:0差別在利用雙投之記憶體複製
0x18 失準描述符列表位址
T( 完成記錄狀態碼 )
以上表T係提供針對一實施方式之各種狀態碼及相關的描述。
以下的表U係闡明可用於一實施方式中之錯失碼3903,包括用以指示錯失位址是否為讀取或寫入之第一位元及用以指示錯失存取是否為使用者模式或管理者模式存取之第二位元。
位元 描述
0 R/W(未使用,除非狀態係指示頁錯失)0:錯失存取為讀取。 1:錯失存取為寫入。
1 U/S(未使用,除非狀態係指示頁錯失)0:錯失存取為使用者模式存取。 1:錯失存取為管理者模式存取。
U( 完成記錄錯失碼 )
於一實施方式中,假如此完成記錄3900係用於一被提呈為批次之部分的描述符,則該指標欄位3902含有其產生此完成記錄之描述符的批次中之指標。針對批次描述符,此欄位可為0xff。針對其並非批次之部分的任何其他描述符,此欄位可被保留。
於一實施方式中,假如該操作係由於頁錯失而被部分地完成,則位元組已完成欄位3901含有其在錯失發生前所處理之來源位元組的數目。由此計數所表示之所有來源位元組被完全地處理且結果被寫入至目的地位址,如依據操作類型所需者。針對某些操作類型,此欄位亦可被使用在當該操作係為了錯失以外的某原因而在完成之前停止時。假如該操作欄位完全地完成了,則此欄位可被設為0。
針對其中輸出大小不是輕易地可判定自此值之操作類型,該完成記錄亦含有其被寫入至目的地位址之位元組的數目。
假如該操作係由於頁錯失而被部分地完成,則此欄位含有其造成該錯失之位址。當作一般性規則,所有描述符應具有有效完成記錄位址3804,且完成記錄位址有效旗標應為1。對於此規則之一些例外被描述於下。
於一實施方式中,該完成記錄之第一位元組是狀態位元組。由該裝置所寫入之狀態值均為非零。軟體應將該完成記錄之狀態欄位初始化為0,在提呈該描述符之前,以便能夠分辨該裝置何時已寫入至該完成記錄。初始化該完成記錄亦確保其被映射,因此該裝置將不會遭遇頁錯失(當存取時)。
請求完成記錄旗標係對該裝置指示其應寫入該完成記錄,即使該操作已成功地完成。假如此旗標不被設定,則該裝置僅在有錯誤時寫入該完成記錄。
描述符完成可由軟體所檢測,使用以下方法之任一者:
1.  輪詢該完成記錄,等待狀態欄位變為非零。
2.  使用UMONITOR/UMWAIT指令(如文中所述)於完成記錄位址上,以阻擋直到其被寫入或直到逾時。軟體應接著檢查該狀態欄位是否為非零以判定該操作是否已完成。
3.  針對內核模式描述符,當該操作完成時則請求中斷。
4.  假如該描述符係於批次中,則設定籬旗標於相同批次中之後續描述符中。具有該籬之描述符或相同批次中之任何後續描述符的完成係指示其位於該籬之前的所有描述符之完成。
5.  假如該描述符係於批次中,則起始該批次之批次描述符的完成係指示該批次中之所有描述符的完成。
6.  發送汲取描述符或汲取命令並等待其完成。
假如完成狀態指示由於頁錯失之部分完成,則該完成記錄係指示在遭遇該錯失之前有多少處理被完成(假如有的話)、以及其中遭遇到該錯失之虛擬位址。軟體可選擇改正該錯失(藉由接觸來自該處理器之錯失位址)並再提呈剩餘的工作於新的描述符中或者以軟體來完成剩餘的工作。描述符列表上以及完成記錄位址上的錯失被不同地處置且被更詳細地描述於下。
DSA之一實施方式僅支援訊息通知的中斷。DSA提供兩種類型的中斷訊息儲存:(a)MSI-X表,列舉遍及MSI-X能力,其係儲存由主機驅動程式所使用的中斷訊息;及(b)裝置特定的中斷訊息儲存(IMS)表,其係儲存由訪客驅動程式所使用的中斷訊息。
於一實施方式中,中斷可被產生於三種類型的事件:(1)內核模式描述符之完成;(2)汲取或異常中止命令之完成;及(3)宣告於軟體或硬體錯誤暫存器中之錯誤。針對各類型的事件,有分離的中斷致能。由於錯誤及異常中止/汲取命令之完成所致的中斷係使用MSI-X表中項目0而被產生。中斷原因暫存器可由軟體所讀取以判定該中斷之原因。
針對內核模式描述符(例如,其中U/S欄位為1之描述符)之完成,所使用之中斷訊息係根據該描述符如何被提呈以及該描述符中之使用中斷訊息儲存旗標。
針對經由特權入口所提呈之內核模式描述符的完成中斷訊息一般為MSI-X表中之項目,由入口位址所判定。然而,假如GENCAP中之中斷訊息儲存支援欄位為1,則經由特權入口所提呈之描述符可撤銷此行為,藉由設定該描述符中之使用中斷訊息儲存旗標。於此情況下,該描述符中之完成中斷處置欄位被使用為進入中斷訊息儲存之指標。
針對經由訪客入口所提呈之內核模式描述符的完成中斷訊息為中斷訊息儲存中之項目,由入口位址所判定。
由DSA所產生之中斷係透過中斷再映射及宣告硬體(如由VMM軟體之內核所組態)而被處理。
事件 提呈暫存器 中斷訊息儲存支援能力 使用中斷訊息儲存旗標 所使用的中斷訊息
錯誤宣告於SWERROR或 HWERROR暫存器中          MSI-X表項目0
事件 提呈暫存器 中斷訊息儲存支援能力 使用中斷訊息儲存旗標 所使用的中斷訊息  
異常中止及 汲取指令之完成 命令暫存器          MSI-X表項目0  
WQ佔有率低於限制          MSI-X表項目0  
內核模式描述符之完成 特權入口 0    基於入口位址之MSI-X表項目  
      1 0 基於入口位址之MSI-X表項目  
1 由描述符中之完成中斷處置欄位所指明的中斷訊息儲存項目  
訪客入口 1    基於入口位址之中斷訊息儲存項目  
V
如上所述,DSA係支援立即提呈多數描述符。批次描述符含有主機記憶體中之工作描述符的陣列之位址以及該陣列中之元件的數目。工作描述符之陣列被稱為「批次」。批次描述符之使用容許DSA客戶使用單一ENQCMD、ENQCMDS、或MOVDIR64B指令以提呈多數工作描述符並可潛在地增進整體通量。DSA將限制加諸於一批次中之工作描述符的數目上。該限制被指示於一般能力暫存器中之最大批次大小欄位中。
批次描述符係以如其他工作描述符之方式被提呈至工作佇列中。當批次描述符被該裝置所處理時,該裝置從記憶體讀取工作描述符之陣列並接著處理該些工作描述符之各者。該些工作描述符不一定被依序地處理。
批次描述符之PASID 3803及U/S旗標被用於該批次中之所有描述符。該批次中之該些描述符中的PASID及U/S 欄位3810被忽略。該批次中之各工作描述符可指明完成記錄位址3804,正如以直接提呈的工作描述符。替代地,批次描述符可指明「完成佇列」位址,其中來自該批次之所有工作描述符的完成記錄被該裝置所寫入。於此情況下,該批次中之該些描述符中的完成記錄位址欄位3804被忽略。完成佇列應為大於該描述符計數之一項目,因此完成記錄有空間給該批次中之每一描述符加上該批次描述符之一。完成記錄被產生以其中該些描述符完成的順序,其可不同於其中該些描述符出現在描述符陣列中的順序。各完成記錄包括其產生該完成記錄之該批次中的該描述符之指標。指標0xff被用於該批次描述符本身。0之指標被用於除了批次描述符以外之直接提呈的描述符。該批次中之某些描述符可能不產生完成記錄,假如其不請求完成記錄且其成功地完成的話。於此情況下,寫入至該完成佇列之完成記錄的數目可少於該批次中之描述符的數目。針對該批次描述符之完成記錄(假如有請求的話)被寫入至該完成佇列,在該批次中之所有描述符的完成記錄之後。
假如該批次描述符不指明完成佇列,則針對該批次描述符之完成記錄(假如有請求的話)被寫入至其本身的完成記錄位址,在該批次中之所有描述符被完成之後。針對該批次描述符之完成記錄含有該批次中之任何描述符是否完成以不等於成功的狀態之指示。如此容許軟體僅觀看針對該批次描述符之完成記錄,於其中該批次中之所有描述符成功地完成之一般情況下。
完成中斷亦可由該批次中之一或更多工作描述符所請求,如所需。針對該批次描述符之完成記錄(假如有請求的話)被寫入,在該批次中之所有描述符的完成記錄及完成中斷之後。針對該批次描述符之完成中斷(假如有請求的話)被產生在針對該批次描述符之完成記錄以後,正如以任何其他描述符。
批次描述符可能不被包括於批次中。巢套或鏈結描述符陣列不被支援。
預設地,DSA不確保任何排序(當執行工作描述符時)。描述符可被調度並完成以該裝置視為適合將通量最大化的任何順序。因此,假如排序是需要的,則軟體須明確地排序;例如,軟體可提呈描述符、等待來自該描述符之完成記錄或中斷以確認完成、及接著提呈下一描述符。
軟體亦可指明由批次描述符所指明之批次中的描述符之排序。各工作描述符具有一籬旗標。當被設定時,籬確保其該描述符之處理將不會開始直到相同批次中之先前描述符被完成。如此容許具有籬之描述符消耗由相同批次中先前描述符所產生的資料。
描述符被完成在由該操作所產生的所有寫入為整體地可觀察之後;在目的地讀回(假如有請求的話)之後;在該寫入至完成記錄為整體地可觀察(假如需要的話)之後;以及在完成中斷(假如有請求的話)的產生之後。
假如批次中之任何描述符完成以其不等於成功之狀態(例如,假如其由於頁錯失而被部分地完成),則具有籬旗標之後續描述符以及該批次中之任何接續描述符被放棄。針對其已被用以提呈該批次之批次描述符的完成記錄係指示有多少描述符被完成。其被部分地完成並產生完成記錄之任何描述符被視為已完成。僅有放棄的描述符被視為未完成。
籬亦確保完成記錄及中斷之排序。例如,設定了籬及請求完成中斷之No-op描述符將造成該中斷被產生在該批次中之所有前描述符已完成(以及其完成記錄已被寫入,假如需要的話)以後。完成記錄寫入永遠被排序在由相同工作描述符所產生的資料寫入以後,而完成中斷(假如有請求的話)永遠被排序在針對相同工作描述符之完成記錄寫入以後。
汲取係一描述符,其容許客戶等待所有屬於其本身PASID之描述符完成。其可被使用為針對整個PASID之籬操作。汲取操作係完成在當具有該PASID之先前描述符已完成時。汲取描述符可由軟體所使用以針對所有其描述符之完成來請求單一完成記錄或中斷。汲取為其被提呈至一般工作佇列之一般描述符。汲取描述符可能不被包括於批次中。(籬旗標可被用於批次中以等待該批次中之先前描述符完成。)
軟體需確保不會有具指明PASID之描述符被提呈至該裝置,在汲取描述符被提呈之後以及在其完成之前。假如額外描述符被提呈,則不指明該汲取操作是否亦等待該些額外描述符完成。如此可能造成該汲取操作花費長的時間。即使該裝置不等待該些額外描述符完成,某些額外描述符仍可在該汲取操作完成之前完成。以此方式,汲取係不同於籬,因為籬係確保沒有後續操作開始直到所有先前操作已完成。
於一實施方式中,異常中止/汲取指令係藉由特權軟體(OS內核或VMM)寫入至異常中止/汲取暫存器而被提呈。於接收這些命令之一時,DSA係等待某些描述符之完成(描述於下)。當該命令完成時,軟體可確定沒有更多描述符於該裝置中待決的指明種類中。
有三種類型的汲取命令於一實施方式中:汲取全部、汲取PASID、和汲取WQ。各命令具有異常中止旗標,其係告知該裝置其可丟棄任何未處理的描述符而非將其處理至完成。
汲取所有命令係等待其被提呈在該汲取所有命令之前的所有描述符之完成。在該汲取所有命令之後所提呈的描述符可在該汲取所有命令完成之時刻進行中。該裝置可開始新描述符上之工作,當汲取所有命令正等待先前描述符完成時。
汲取PASID命令等待其與該指定PASID相關的所有描述符。當汲取PASID命令完成時,則沒有針對該PASID之更多描述符於該裝置中。軟體可確保不會有具指定PASID之描述符被提呈至該裝置,在汲取PASID命令被提呈之後以及在其完成之前;否則該行為是未定義的。
汲取WQ命令等待其提呈至指定工作佇列的所有描述符。軟體可確保無描述符被提呈至該WQ,在汲取WQ命令被提呈之後以及在其完成之前。
當其正在使用DSA之應用程式或VM被暫止時,其可具有提呈至該DSA之未處理描述符。此工作需被完成,因此該客戶係處於其可在稍後被重新開始的同調狀態。汲取PASID和汲取所有命令係由OS或VMM所使用以等待任何未處理描述符。汲取PASID命令被用於其正在使用單一PASID之應用程式或VM。汲取所有命令被用於其使用多數PASID之VM。
當正在使用DSA之應用程式離開或者由作業系統(OS)所終止時,則該OS需確保其沒有未處理描述符,在其可釋放或再使用位址空間、已配置記憶體、及PASID之前。為了清除任何未處理描述符,OS使用汲取PASID命令,以其客戶之PASID被終止,且異常中止旗標被設為1。於接收此命令時,DSA係丟棄屬於指定PASID之所有描述符而不進一步處理。
DSA之一實施方式係提供一種機制,用以指明針對從多數WQ調度工作之服務品質。DSA容許軟體將總WQ空間劃分為多數WQ。各WQ可被指派針對調度工作之不同優先權。於一實施方式中,DSA排程器/仲裁器3513係從WQ調度工作,以致其較高優先權WQ比較低優先權WQ被服務得更多。然而,DSA係確保其較高優先權WQ不會使較低優先權WQ匱乏。如上所述,各種優先化方案可根據實施方式需求而被利用。
於一實施方式中,WQ組態暫存器表被用以組態WQ。軟體可組態現用WQ之數目以匹配所欲的QoS等級之數目。軟體係藉由編程WQ大小及該WQ組態暫存器表中之某些額外參數以組態各WQ。如此有效地將整個WQ空間劃分為所欲數目的WQ。未使用的WQ具有0之大小。
錯誤可被廣泛地劃分為兩種類;1)附屬的錯誤,其係發生於特定PASID之處理中描述符上;及2)獨立的錯誤,其在本質上為整體的且非PASID特定的。DSA嘗試盡可能避免來自一PASID之錯誤破壞或影響其他PASID。PASID特定的錯誤被報告於個別描述符之完成記錄中,除了當該錯誤是在完成記錄本身上(例如,完成記錄位址上之頁錯失)時。
於描述符提呈時或者於描述符之完成記錄上的錯誤可透過軟體錯誤暫存器(SWERROR)而被報告至主機驅動程式。硬體錯誤可透過硬體錯誤暫存器(HWERROR)而被報告。
DSA之一實施方式在該裝置致能暫存器中之致能位元被設為1的時刻履行以下檢查: ˙ 匯流排主致能為1。 ˙ PASID、ATS、及PRS能力之組合為有效。(參見段落6.1.3.中之表6-3) ˙ 所有WQCFG暫存器之WQ大小欄位的總和不得大於總WQ大小。 ˙ 針對各GRPCFG暫存器,WQ及引擎欄位是兩者皆0或者兩者皆非零。 ˙ 於WQCFG暫存器中其大小欄位是非零的各WQ係位於一群組中。 ˙ 於WQCFG暫存器中其大小欄位是零的各WQ不位於任何群組中。 ˙ 各引擎是在不多於一群組中。
假如這些檢查之任一者失敗,則該裝置不被致能且錯誤碼被記錄於裝置致能暫存器之錯誤碼欄位中。這些檢查可被履行以任何順序。因此一種類型的錯誤之指示並不暗示其沒有其他錯誤。相同的組態錯誤可能導致在不同的時刻或者該裝置的不同版本之不同錯誤碼。假如無任何檢查失敗,則該裝置被致能且該致能欄位被設為1。
該裝置在WQCFG暫存器中之WQ致能位元被設為1的時刻履行以下檢查: ˙ 該裝置被致能(亦即,該裝置致能暫存器中之已致能欄位為1)。 ˙ WQ大小欄位為非零。 ˙ WQ臨限值不大於WQ大小欄位。 ˙ WQ模式欄位選擇支援模式。亦即,假如WQCAP中之共用模式支援欄位為0,則WQ模式為1;或假如WQCAP中之專屬模式支援欄位為0,則WQ模式為0。假如共用模式與專屬模式支援欄位兩者均為1,則WQ模式之任一值被容許。 ˙ 假如GENCAP中之阻擋錯失支援位元為0,則WQ阻擋錯失致能欄位為0。
假如這些檢查之任一者失敗,則該WQ不被致能且錯誤碼被記錄於WQ組態暫存器3500之WQ錯誤碼欄位中。這些檢查可被履行以任何順序。因此一種類型的錯誤之指示並不暗示其沒有其他錯誤。相同的組態錯誤可能導致在不同的時刻或者該裝置的不同版本之不同錯誤碼。假如無任何檢查失敗,則該裝置被致能且該WQ致能欄位被設為1。
於一實施方式中,當接收到描述符時DSA履行以下檢查: ˙ 由用以提呈該描述符之暫存器位址所識別的WQ為現用WQ(WQCFG暫存器中之大小欄位為非零)。假如此檢查失敗,則該錯誤被記錄於軟體錯誤暫存器(SWERROR)中, ˙ 假如該描述符被提呈至共用WQ, ˙ 則其被提呈以ENQCMD或ENQCMDS。假如此檢查失敗,則該錯誤被記錄於SWERROR中。 ˙ 假如該描述符係經由無特權或訪客入口而被提呈,則目前佇列佔有率不大於WQ臨限值。假如此檢查失敗,則再嘗試回應被返回。 ˙ 假如該描述符係經由特權入口而被提呈,則目前佇列佔有率小於WQ大小。假如此檢查失敗,則再嘗試回應被返回。 ˙ 假如該描述符被提呈至專屬WQ, ˙ 其被提呈以MOVDIR64B。 ˙ 佇列佔有率小於WQ大小。
假如這些檢查之任一者失敗,則該錯誤被記錄於SWERROR中。
於一實施方式中,該裝置履行以下檢查於各描述符上(當其被處理時): ˙ 操作碼欄位中之值係相應於支援操作。此包括檢查其該操作於該背景(其中其被提呈)中為有效。例如,一批次內部之批次描述符將被視為無效操作碼。 ˙ 無保留旗標被設定。此包括其在GENCAP暫存器中之相應能力位元為0的旗標。 ˙ 無不支援旗標被設定。此包括其被保留給具有某些操作之使用的旗標。例如,籬位元被保留於其被直接地排入佇列而非成為批次之部分的描述符中。其亦包括於該組態中被除能的旗標,諸如阻擋錯失旗標,其被保留在當WQCFG暫存器中之阻擋錯失致能欄位為0時。 ˙ 需要旗標被設定。例如,請求完成記錄旗標需為1在一用於比較操作之描述符中。 ˙ 保留欄位為0。此包括其不具有針對指定操作之已界定意義的任何欄位。某些實施方式可能不檢查所有保留欄位,但軟體應小心清除所有未使用欄位以供最大相容性。於批次描述符中,描述符計數欄位不大於GENCAP暫存器中之最大批次大小欄位。 ˙ 轉移大小、來源大小、最大差量記錄大小、差量記錄大小、及最大目的地大小(如可應用於描述符類型)不大於GENCAP暫存器中之最大轉移大小欄位。 ˙ 於利用雙投描述符之記憶體複製中,兩個目的地位址之位元11:0是相同的。 ˙ 假如使用中斷訊息儲存旗標被設定,則完成中斷處置小於中斷訊息儲存大小。
於一實施方式中,假如完成記錄位址3804無法被轉譯,則描述符3800被丟棄且錯誤被記錄於軟體錯誤暫存器中。否則,假如這些檢查之任一者失敗,則完成記錄被寫入以狀態欄位(其係指示失敗之檢查的類型)且位元組已完成被設為0。完成中斷被產生,假如有請求的話。
這些檢查可被履行以任何順序。因此於完成記錄中之一種類型的錯誤之指示並不暗示其也沒有其他錯誤。相同的無效描述符可在不同的時刻或者以該裝置的不同版本報告不同的錯誤碼。
描述符中之保留欄位3811可落入三個種類:其被永遠保留之欄位;其被保留於某些條件(例如,根據能力、組態欄位、該描述符如何被提呈、或該描述符本身中之其他欄位的值)下之欄位;及其根據操作類型而被保留之欄位。下表列出條件,欄位係於該些條件下被保留。
保留欄位 ( ) 於哪些條件下欄位 ( ) 被保留
請求完成中斷 U/S = 0;或 描述符被提呈至無特權入口。
完成中斷處置 請求完成中斷 =0; GENCAP中斷支援能力 ≠ 2或 描述符被提呈至訪客入口。
使用中斷訊息儲存 請求完成中斷 =0; U/S位元是0 GENCAP中斷訊息儲存支援能力=0;或 描述符被提呈至訪客入口。
描述符直接地提呈至WQ(非於批次中)。
阻擋錯失 WQCFG阻擋錯失致能=0。
目的地讀回 GENCAP目的地讀回支援=0。
耐久寫入 GENCAP耐久寫入支援=0。
完成記錄位址有效 針對批次中之描述符,當完成佇列致能=1。
完成記錄位址 完成記錄位址有效=0。
請求完成記錄 完成記錄位址有效=0。
保留欄位 ( ) 於哪些條件下欄位 ( ) 被保留
完成佇列致能 GENCAP完成佇列支援=0; 操作並非批次;或 完成記錄位址有效=0。
W( 條件式保留欄位檢查 )
操作 容許旗標 保留旗標 1 保留欄位
所有 完成記錄位址有效 請求完成記錄 請求完成中斷 位元7 位元23:16 位元30:20
No-op 汲取 阻擋錯失 檢查結果 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 位元組16-35 位元組38-63
記憶體移動 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-63
填充 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-63
比較 比較即刻 籬 阻擋錯失 檢查結果 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 位元組38-63
產生差量記錄 所有3    位元組38-39 位元組52-63
應用差量記錄 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-39 位元組44-63
雙投 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-39 位元組48-63
CRC產生 籬 阻擋錯失    檢查結果 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 位元組24-31 位元組38-39 位元組44-63
利用CRC產生之複製 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-39 位元組44-63
DIF插入 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 檢查結果 位元組38-39 位元組40 位元組43-55
DIF去除 所有    位元組38-39 位元組41 位元組43-47 位元組56-63
DIF更新 所有    位元組38-39 位元組43-47
快取清除 籬 阻擋錯失    檢查結果 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 位元組16-23 位元組38-63
批次 完成佇列致能    檢查結果 籬 阻擋錯失 目的地快取填充 目的地無監聽 嚴格排序 目的地讀回 耐久寫入 位元組24-31 位元組38-63
X( 操作特定保留欄位檢查 )
如上所述,DSA支援實體或虛擬位址之任一者的使用。其與運行於處理器核心上之程序共用的虛擬位址之使用被稱為共用虛擬記憶體(SVM)。為了支援SVM,該裝置係提供PASID在當履行位址轉譯時,且其處置當無轉譯存在於一位址時所發生的頁錯失。然而,該裝置本身不會分辨於虛擬與實體位址之間;此分辨係由IOMMU 1710之編程所控制。
於一實施方式中,DSA支援位址轉譯服務(ATS)及頁請求服務(PRS)PCI Express能力,如由圖28中所指示,圖28係顯示PCIe邏輯2820使用PCDI以與PCIe邏輯2808通訊來利用ATS。ATS係描述位址轉譯期間之裝置行為。當描述符進入描述符處理單元時,裝置2801可請求針對該描述符中之位址的轉譯。假如於裝置TLB 2822中有命中時,則該裝置使用相應的主機實體位址(HPA)。假如有未中或允許錯失,則DSA 2801之一實施方式係傳送位址轉譯請求至IOMMU 2810以利轉譯(亦即,跨越多協定鏈結2800)。IOMMU 2810可接著藉由搜尋個別頁表以找出轉譯並返回一位址轉譯回應,其含有已轉譯位址及有效許可。裝置2801接著儲存該轉譯於裝置TLB 2822中並使用針對該操作之相應HPA。假如IOMMU 2810無法於頁表中找出該轉譯,則其可返回一指示無轉譯可用之位址轉譯回應。當IOMMU 2810回應指示無轉譯或指示有效許可(其不包括該操作所需要的許可)時,其被視為頁錯失。
DSA裝置2801可能遭遇頁錯失於以下之一者上:1)完成記錄位址3804;2)批次描述符中之描述符列位址;或3)來源緩衝器或目的地緩衝器位址。DSA裝置2801可阻擋直到該頁錯失被解決或者過早地完成該描述符並返回部分完成至該客戶。於一實施方式中,DSA裝置2801總是阻擋完成記錄位址3804及描述符列位址上之頁錯失。
當DSA阻擋頁錯失時,其將該錯失報告為對該IOMMU 2810之頁請求服務(PRS)請求,以便由OS頁錯失處置器所服務。IOMMU 2810可透過中斷以通知OS。OS確認該位址且於成功的檢查時產生映射於頁表中,並透過IOMMU 2810以返回PRS回應。
於一實施方式中,各描述符3800具有阻擋錯失旗標,其係指示DSA 2801是否應返回部分完成或阻擋,當頁錯失發生於來源或目的地緩衝器位址上時。當阻擋錯失旗標為1、且遭遇到錯失時,則遭遇該錯失之該描述符被阻擋直到PRS回應被接收。在具有該錯失之該描述符後的其他操作亦可被阻擋。
當阻擋錯失為0且遭遇到頁錯失於來源或目的地緩衝器位址上時,則該裝置便停止操作並將部分完成狀態(連同錯失位址及進度資訊)寫入完成記錄。當客戶軟體接收到一指示部分完成之完成記錄時,則其具有選擇性以於該處理器上修正該錯失(藉由接觸該頁,舉例而言)並提呈具有剩餘工作之新的工作描述符。
替代地,軟體可於該處理器上完成剩餘工作。一般能力暫存器(GENCAP)中之阻擋錯失支援欄位可指示針對此特徵之裝置支援,而工作佇列組態暫存器中之阻擋錯失致能欄位係容許VMM或內核驅動程式控制應用程式是否被容許使用該特徵。
裝置頁錯失可能是相當昂貴的。事實上,服務裝置頁錯失之成本可能高於服務處理器頁錯失之成本。即使裝置履行部分工作完成以取代對於錯失之阻擋錯失,其仍會招致負擔,因為其需要軟體介入以服務該頁錯失並再提呈該工作。因此,為了最佳性能,希望軟體將裝置頁錯失減至最少而不招致釘選(pinning)及未釘選之負擔。
批次描述符列及來源資料緩衝器通常係由軟體所產生,就在將其提呈至該裝置以前。因此,這些位址由於暫時局部性而不太可能招致錯失。然而,完成描述符及目的地資料緩衝器則較可能招致錯失,假如其在提呈至該裝置前未被軟體所接觸的話。此等錯失可被減至最少,藉由在提呈前軟體明確地「寫入接觸」這些頁。
於裝置TLB無效化請求期間,假如被無效化之位址正被使用於描述符處理單元中時,則該裝置便等待引擎被執行以該位址,在完成該無效化請求之前。
額外描述符類型
某些實施方式可利用以下額外描述符類型之一或更多者:
No-op
圖40闡明範例no-op(無操作)描述符4000及no-op(無操作)完成記錄4001。No-op操作4005不履行DMA操作。其可請求完成記錄及/或完成中斷。假如其位於批次中,則其可指明籬旗標以確保No-op描述符之完成係發生在該批次中之所有先前描述符的完成以後。
批次
圖41闡明範例批次描述符4100及no-op(無操作)完成記錄4101。批次操作4108係一次地排列多數描述符。描述符列位址4102為待處理工作描述符之相連陣列的位址。於一實施方式中,該陣列中之各描述符為64位元組。描述符列位址4102為64位元組對準的。描述符計數4103為該陣列中之描述符的數目。該陣列中之該組描述符被稱為「批次」。一批次中所容許之描述符的最大數目被提供於GENCAP中之最大批次大小欄位中。
批次描述符中之PASID 4104及U/S旗標4105被用於該批次中之所有描述符。該批次中之該些描述符中的PASID 4104及U/S 旗標欄位4105被忽略。假如批次描述符4100中之完成佇列致能旗標被設定,則完成記錄位址有效旗標需為1且完成佇列位址欄位4106含有其被用於該批次中之所有描述符的完成佇列之位址。於此情況下,該批次中之該些描述符中的完成記錄位址欄位4106被忽略。假如一般能力暫存器中之完成佇列支援欄位為0,則完成佇列致能旗標被保留。
假如批次描述符中之完成佇列致能旗標為0,則該批次中之各描述符的完成記錄被寫入至各描述符中之完成記錄位址4106。於此情況下,假如請求完成記錄旗標於該批次描述符中為1,則完成佇列位址欄位被使用為僅用於該批次描述符之完成記錄位址4106。
批次完成記錄4101之狀態欄位4110係指示成功,假如該批次中之所有描述符成功地完成;否則其係指示其一或更多描述符以不等於成功之狀態完成。完成記錄之描述符已完成欄位4111含有其被處理之該批次中的描述符之總數,無論其是否成功。描述符完成4111可少於描述符計數4103,假如有籬於該批次中或假如頁錯失發生於讀取該批次時。
汲取
圖42闡明範例汲取描述符4200和汲取完成記錄4201。汲取操作4208等待其汲取描述符4200所被提呈至之工作佇列中的所有未處理描述符(其係與PASID 4202相關)之完成。此描述符可被使用於藉由一曾使用該裝置之程序來關機期間。為了等待與PASID 4202相關的所有描述符,軟體應提呈分離的汲取操作至其PASID 4202所使用之每一工作佇列。軟體應確保不會有具指定PASID4202之描述符被提呈至該工作佇列,在汲取描述符4201被提呈之後以及在其完成之前。
汲取描述符4201可不被包括於一批次中;其被視為不支援的操作類型。汲取應指明請求完成記錄或請求完成中斷。完成通知被執行在其他描述符已完成之後。
記憶體移動
圖43闡明範例記憶體移動描述符4300及記憶體移動完成記錄4301。記憶體移動操作4308將記憶體從來源位址4302複製至目的地位址4303。被複製之位元組的數目係由轉移大小4304所給定。針對記憶體位址或轉移大小並沒有對準需求。假如來源與目的地區重疊,則記憶體複製被執行如同整個來源緩衝器被複製至暫時空間並接著複製至目的地緩衝器。此可藉由反轉該複製之方向來實施,當目的地緩衝器之開始與來源緩衝器之結束重疊時。
假如該操作係由於頁錯失而被部分地完成,則完成記錄之方向欄位4310為0(假如該複製被履行在來源和目的地緩衝器之開始處),而該方向欄位為1(假如該複製之方向被反轉)。
為了在部分完成之後重新開始該操作,假如方向為0,則連續描述符中之來源和目的地位址欄位4302-4303應被位元組已完成所增加,而轉移大小應被位元組已完成4311所減少。假如方向為1,則轉移大小4304應被位元組已完成4311所減少,但來源與目的地位址欄位4302-4303應為相同如於原始描述符中。注意:假如後續的部分完成發生,則方向欄位4310可不相同如其針對第一部分完成者。
填充
圖44闡明範例填充描述符4400。記憶體填充操作4408係以型態欄位4405中之值填充記憶體於目的地位址4406上。型態大小可為8位元組。為了使用較小的型態,軟體需複製該描述符中之型態。被寫入之位元組的數目係由轉移大小4407所給定。轉移大小無須為型態大小之倍數。針對目的地位址或轉移大小並沒有對準需求。假如該操作係由於頁錯失而被部分地完成,則完成記錄之位元組已完成欄位含有其在錯失發生前寫入至該目的地之位元組的數目。
比較
圖45闡明範例比較描述符4500和比較完成記錄4501。比較操作4508係比較來源1位址4504上之記憶體與來源2位址4505上之記憶體。被比較之位元組的數目係由轉移大小4506所給定。針對記憶體位址或轉移大小4506並沒有對準需求。完成記錄位址有效及請求完成記錄旗標需為1而完成記錄位址需為有效。該比較之結果被寫入至完成記錄4501之結果欄位4510:0之值指示其兩個記憶體區匹配,而1之值指示其不匹配。假如結果4510為1,則完成記錄之位元組已完成欄位4511指示第一差異之位元組偏置。假如該操作係由於頁錯失而被部分地完成,則結果為0。假如差異已被檢測,則該差異將被報告以取代該頁錯失。
假如該操作是成功的且檢查結果旗標為1,則完成記錄之狀態欄位4512係依據結果及預期結果而被設定,如下表中所示。此容許具有籬旗標之相同批次中的後續描述符根據該比較之結果以繼續或停止該批次之執行。
檢查結果旗標 預期結果位元0 結果 狀態
0 X X 成功
1 0 0 成功
1 0 1 具有假述詞之成功
1 1 0 具有假述詞之成功
1 1 1 成功
Y
比較即刻
圖46闡明範例比較即刻描述符4600。比較即刻操作4608係比較來源位址4601上之記憶體與型態欄位4602中之值。型態大小為8位元組。為了使用較小的型態,軟體需複製該描述符中之型態。被比較之位元組的數目係由轉移大小4603所給定。轉移大小無須為型態大小之倍數。完成記錄位址有效及請求完成記錄旗標需為1而完成記錄位址4604需為有效。該比較之結果被寫入至完成記錄之結果欄位:0之值指示其記憶體區匹配該型態,而1之值指示其不匹配。假如結果為1,則完成記錄之位元組已完成欄位指示第一差異之位置。其可能不是確實的位置,但其被確保為不大於該第一差異。假如該操作係由於頁錯失而被部分地完成,則結果為0。假如差異已被檢測,則該差異將被報告以取代該頁錯失。於一實施方式中,比較即刻之完成記錄格式以及檢查結果和預期結果之行為係相同於比較。
產生差量記錄
圖47闡明範例產生資料記錄描述符4700及產生差量記錄完成記錄4701。產生差量記錄操作4708係比較來源1位址4705上之記憶體與來源2位址4702上之記憶體並產生差量記錄,其含有用以更新來源1來匹配來源2所需的資訊。被比較之位元組的數目係由轉移大小4703所給定。轉移大小係由其可被儲存於差量記錄中之最大偏置所限制,如以下所述。針對記憶體位址或轉移大小並沒有對準需求。完成記錄位址有效及請求完成記錄旗標需為1而完成記錄位址4704需為有效。
差量記錄之最大大小係由最大差量記錄大小4709所給定。最大差量記錄大小4709應為差量大小(10位元組)之倍數且需不大於GENCAP中之最大轉移大小。差量記錄之實際大小係取決於來源1與來源2之間所測得的差異之數目;其被寫入至完成記錄之差量記錄大小欄位4710。假如差量記錄中所需的空間超過該描述符中所指明的最大差量記錄大小4709,則該操作係完成以部分差量記錄。
比較之結果被寫入至完成記錄4701之結果欄位4711。假如兩區完全地匹配,則結果為0,差量記錄大小為0,且位元組已完成為0。假如兩區不匹配、且一完全組的差量被寫入至差量記錄,則結果為1,差量記錄大小含有已發現之所有差異的總大小,而位元組已完成為0。假如兩區不匹配、且用以記錄所有差量所需的空間超過最大差量記錄大小,則結果為2,差量記錄大小4710含有其被寫入至該差量記錄之該組差量的大小(通常等於或幾乎等於該描述符中所指明的差量記錄大小),且位元組已完成4712含有被比較的位元組之數目(在該差量記錄中之空間被超過以前)。
假如該操作係由於頁錯失而被部分地完成,則結果4711為0或1,如先前段落中所述,位元組已完成4712含有被比較的位元組之數目(在頁錯失發生以前)、以及該差量記錄中所使用的空間(在頁錯失發生以前)。
該差量記錄之格式被顯示於圖48中。差量記錄含有差量之陣列。各差量含有2位元組偏置4801及來自來源2之資料4802的8位元組區塊,其係不同於來源1中之相應的8位元組。差量記錄之總大小為10之倍數。因為偏置4801為代表8位元組之倍數的16位元欄位、其可被表達之最大偏置為0x7FFF8,所以最大轉移大小為0x80000位元組(512 KB)。
假如該操作是成功的且檢查結果旗標為1,則完成記錄之狀態欄位係依據結果及預期結果而被設定,如下表中所示。此容許具有籬旗標之相同批次中的後續描述符根據該差量記錄產生之結果以繼續或停止該批次之執行。預期結果之位元7:2被忽略。
檢查結果旗標 預期結果位元1:0 結果 狀態
0 X X 成功
1 0 0 成功
1 具有假述詞之成功
2 具有假述詞之成功
1 0 具有假述詞之成功
1 成功
2 具有假述詞之成功
2 0 成功
1 成功
2 具有假述詞之成功
3 0 具有假述詞之成功
1 成功
2
Z
應用差量記錄
圖49闡明範例應用差量記錄描述符4901。應用差量記錄操作4902係將差量記錄應用於目的地位址4903上之記憶體的內容。差量記錄位址4904為其由產生差量記錄操作4902(其係以等於1之記錄來完成)所產生之差量記錄的位址。差量記錄大小4905為差量記錄之大小,如產生差量記錄操作4902之完成記錄中所報告者。目的地位址4903為一含有如來源1位址上之記憶體的相同內容之緩衝器的位址,當該差量記錄被產生時。轉移大小4906係相同於當該差量記錄被產生時所使用的轉移大小。在應用差量記錄操作4902完成時,目的地位址4903上之記憶體將匹配其位於來源2位址上之記憶體中的內容,當該差量記錄被產生時。針對記憶體位址或轉移大小並沒有對準需求。
假如於應用差量記錄操作4902期間遭遇到頁錯失,則完成記錄之位元組已完成欄位含有其被成功地應用至該目的地之該差量記錄的位元組之數目。假如軟體選擇提呈另一描述符以重新開始該操作,則繼續描述符應含有如原本的相同目的地位址4903。差量記錄位址4904應被位元組已完成所增加(因此其指向第一未應用差量),而差量記錄大小4905應被位元組已完成所減少。
圖50顯示產生差量記錄及應用差量記錄操作之使用的一實施方式。首先,產生差量記錄操作5001被履行。其讀取兩個來源緩衝器 - 來源1及2 - 並寫入差量記錄5010,記錄實際的差量記錄大小5004於其完成記錄5003中。應用差量記錄操作5005取用由產生差量記錄操作5001所寫入之差量記錄的內容(連同其大小以及來源1資料之副本),並更新目的地緩衝器5015以成為原始來源2緩衝器之副本。產生差量記錄操作包括最大差量記錄大小5002。
利用雙投之記憶體複製
圖51闡明利用雙投描述符之範例記憶體複製5100及利用雙投完成記錄之記憶體複製5102。利用雙投之記憶體複製操作5104係從來源位址5105複製記憶體至目的地1位址5106及目的地2位址5107。被複製之位元組的數目係由轉移大小5108所給定。針對來源位址或轉移大小並沒有對準需求。兩目的地位址5106-5107之位元11:0應為相同的。
假如來源區與該些目的地區之任一者重疊,則記憶體複製被執行如同整個來源緩衝器被複製至暫時空間並接著複製至目的地緩衝器。此可藉由反轉該複製之方向來實施,當目的地緩衝器之開始與來源緩衝器之結束重疊時。假如該源極區與該些目的地區之兩者重疊或假如該兩目的地區重疊,則其為錯誤。假如該操作係由於頁錯失而被部分地完成,則該複製操作在已將相同數目的位元組寫入至兩目的地區後停止且完成記錄之方向欄位5110為0(假如該複製被履行在來源和目的地緩衝器之開始處),而該方向欄位為1(假如該複製之方向被反轉)。
為了在部分完成之後重新開始該操作,假如方向5110為0,則連續描述符中之來源5105及兩目的地位址欄位5106-5107應被位元組已完成5111所增加,而轉移大小5108應被位元組已完成5111所減少。假如方向為1,則轉移大小5108應被位元組已完成5111所減少,但來源5105與目的地5106-5107位址欄位應為相同如於原始描述符中。注意:假如後續的部分完成發生,則方向欄位5110可不相同如其針對第一部分完成者。
循環冗餘檢查 (CRC) 產生
圖52闡明範例CRC產生描述符5200及CRC產生完成記錄5201。CRC產生操作5204係計算記憶體上之CRC於該來源位址上。被用於CRC計算之位元組的數目係由轉移大小5205所給定。針對記憶體位址或轉移大小5205並沒有對準需求。完成記錄位址有效及請求完成記錄旗標需為1而完成記錄位址5206需為有效。計算出的CRC值被寫入至該完成記錄。
假如該操作係由於頁錯失而被部分地完成,則部分CRC結果被寫入至該完成記錄,連同頁錯失資訊。假如軟體校正該錯失並重新開始該操作,則其需將此部分結果複製入繼續描述符之CRC種子欄位。否則,CRC種子欄位應為0。
利用 CRC 產生之複製
圖53闡明利用CRC產生描述符之範例複製5300。利用CRC產生之複製操作5305係從來源位址5302複製記憶體至目的地位址5303並計算該已複製資料上之CRC。被複製之位元組的數目係由轉移大小5304所給定。針對記憶體位址或轉移大小並沒有對準需求。假如來源與目的地區重疊,則其為錯誤。完成記錄位址有效及請求完成記錄旗標需為1而完成記錄位址需為有效。計算出的CRC值被寫入至該完成記錄。
假如該操作係由於頁錯失而被部分地完成,則部分CRC結果被寫入至該完成記錄,連同頁錯失資訊。假如軟體校正該錯失並重新開始該操作,則其需將此部分結果複製入繼續描述符之CRC種子欄位。否則,CRC種子欄位應為0。於一實施方式中,利用CRC產生之複製的完成記錄格式係相同於CRC產生之格式。
資料完整性欄位 (DIF) 插入
圖54闡明範例DIF插入描述符5400及DIF插入完成記錄5401。DIF插入操作5405係從來源位址5402複製記憶體至目的地位址5403、計算來源資料上之資料完整性欄位(DIF)及將該DIF插入輸出資料。被複製之來源位元組的數目係由轉移大小5406所給定。DIF計算被履行於來源資料之各區塊,其為(例如)512、520、4096、或4104位元組。轉移大小應為來源區塊大小之倍數。寫入至目的地之位元組的數目為轉移大小加上各來源區塊之8位元組。針對該記憶體位址沒有對準需求。假如來源與目的地區重疊,則其為錯誤。假如該操作係由於頁錯失而被部分地完成,則參考標籤及應用程式標籤之已更新值被寫入至該完成記錄,連同頁錯失資訊。假如軟體校正該錯失並重新開始該操作,則其需將這些欄位複製入繼續描述符。
DIF 去除
圖55闡明範例DIF去除描述符5500及DIF去除完成記錄5501。DIF去除操作5505係從來源位址5502複製記憶體至目的地位址5503、計算來源資料上之資料完整性欄位(DIF)及比較該計算出的DIF與該資料中所含有的該DIF。被讀取之來源位元組的數目係由轉移大小5506所給定。DIF計算被履行於來源資料之各區塊,其可為512、520、4096、或4104位元組。轉移大小應為來源區塊大小之倍數加上各來源區塊之8位元組。寫入至目的地之位元組的數目為轉移大小減去各來源區塊之8位元組。針對該記憶體位址沒有對準需求。假如來源與目的地區重疊,則其為錯誤。假如該操作係由於頁錯失而被部分地完成,則參考標籤及應用程式標籤之已更新值被寫入至該完成記錄,連同頁錯失資訊。假如軟體校正該錯失並重新開始該操作,則其需將這些欄位複製入繼續描述符。
DIF 更新
圖56闡明範例DIF更新描述符5600及DIF更新完成記錄5601。利用DIF更新操作5605之記憶體移動係從來源位址5602複製記憶體至目的地位址5603、計算來源資料上之資料完整性欄位(DIF)及比較該計算出的DIF與該資料中所含有的該DIF。其同時地使用該描述符中之目的地DIF欄位以計算該來源資料上之DIF並將該計算出的DIF插入該輸出資料。被讀取之來源位元組的數目係由轉移大小5606所給定。DIF計算被履行於來源資料之各區塊,其可為512、520、4096、或4104位元組。轉移大小5606應為來源區塊大小之倍數加上各來源區塊之8位元組。寫入至該目的地之位元組的數目係相同於轉移大小5606。針對該記憶體位址沒有對準需求。假如來源與目的地區重疊,則其為錯誤。假如該操作係由於頁錯失而被部分地完成,則來源和目的地參考標籤及應用程式標籤之已更新值被寫入至該完成記錄,連同頁錯失資訊。假如軟體校正該錯失並重新開始該操作,則其需將這些欄位複製入繼續描述符。
以下之表AA闡明用於一實施方式中之DIF旗標。表BB闡明用於一實施方式中之來源DIF旗標,而表CC闡明一實施方式中之目的地DIF旗標。
位元 描述
7:2 保留
1:0 DIF區塊大小 00b: 512位元組 01b: 520位元組 10b: 4096位元組 11b: 4104位元組
AA(DIF 旗標 )
來源 DIF 旗標
位元 描述
7 來源參考標籤類型 此欄位指示將履行於來源DIF參考標籤上之操作的類型。0: 遞增 1: 固定
6 參考標籤檢查除能 0: 致能參考標籤欄位檢查1:除能參考標籤欄位檢查
5 防護檢查除能 0: 致能防護欄位檢查1:除能防護欄位檢查
4 來源應用程式標籤類型 此欄位指示將履行於來源DIF應用程式標籤上之操作的類型。0: 固定 1: 遞增 注意:應用程式標籤類型之意義相較於參考標籤類型是被反轉的。通常用於儲存系統中之預設值是讓應用程式標籤為固定的而參考標籤為遞增的。
3 應用程式及參考標籤F檢測 0: 針對應用程式標籤及參考標籤欄位之除能F檢測 1: 針對應用程式標籤及參考標籤欄位之致能F檢測當應用程式標籤及參考標籤欄位兩者之所有位元等於1時,則應用程式標籤及參考標籤不被執行且防護欄位被忽略。
2 應用程式標籤F檢測 0: 針對應用程式標籤欄位之除能F檢測 1: 針對應用程式標籤欄位之致能F檢測當來源資料完整性欄位之應用程式標籤欄位的所有位元等於1時,則應用程式標籤檢查不被執行且防護欄位及參考標籤欄位被忽略。
1 所有F檢測 0: 除能所有F檢測 1: 致能所有F檢測當應用程式標籤、參考標籤、及防護欄位之所有位元等於1時,則無檢查被履行於這些欄位上。(所有F檢測狀態被報告,假如致能的話。)
0 致能所有F檢測錯誤 0: 除能所有F檢測錯誤。 1: 致能所有F檢測錯誤。當應用程式標籤、參考標籤、及防護欄位之所有位元等於1時,則所有F檢測錯誤被報告於該完成記錄之DIF結果欄位中。 假如所有F檢測旗標為0,則此旗標被忽略。
BB( 來源 DIF 旗標 )
目的地 DIF 旗標
位元 描述
7 目的地參考標籤類型 此欄位指示將履行於目的地DIF參考標籤上之操作的類型。0: 遞增 1: 固定
6 參考標籤通過 0: 寫入至該目的地之參考標籤欄位係根據該描述符之目的地參考標籤種子及目的地參考標籤類型欄位而被判定。 1: 來自該來源之參考標籤欄位被複製至該目的地。該描述符之目的地參考標籤種子及目的地參考標籤類型欄位被忽略。 此欄位被忽略於DIF插入及DIF去除操作。
5 防護欄位通過 0: 寫入至該目的地之防護欄位被計算自該來源資料。1: 來自該來源之防護欄位被複製至該目的地。 此欄位被忽略於DIF插入及DIF去除操作。
4 目的地應用程式標籤類型 此欄位指示將履行於目的地DIF應用程式標籤上之操作的類型。0: 固定 1: 遞增 注意:應用程式標籤類型之意義相較於參考標籤類型是被反轉的。通常用於儲存系統中之預設值是讓應用程式標籤為固定的而參考標籤為遞增的。
3 應用程式標籤通過 0: 寫入至該目的地之應用程式標籤欄位係根據該描述符之目的地應用程式標籤種子、目的地應用程式標籤遮罩、及目的地應用程式標籤類型欄位而被判定。 1: 來自該來源之應用程式標籤欄位被複製至該目的地。該描述符之目的地應用程式標籤種子、目的地應用程式標籤遮罩、及目的地應用程式標籤類型欄位被忽略。 此欄位被忽略於DIF插入及DIF去除操作。
2:0 保留
CC( 目的地 DIF 旗標 )
於一實施方式中,DIF結果欄位係報告DIF操作之狀態。此欄位可被定義僅於DIF去除和DIF更新操作,且僅當完成記錄之狀態欄位為成功或具有假述詞之成功時。以下的表DD係闡明範例DIF結果欄位碼。
0x00 未使用
0x01 無錯誤
0x02 防護失配。此值於以下條件下被報告: - 防護檢查除能為0; - F檢測條件未被檢測到;及 - 從該來源資料所計算出的防護值不匹配該來源資料完整性欄位中之防護欄位。
0x03 應用程式標籤失配此值於以下條件下被報告: - 來源應用程式標籤遮罩不等於0xFFFF; - F檢測條件未被檢測到;及 - 計算出的應用程式標籤值不匹配該來源資料完整性欄位中之應用程式標籤欄位。
0x04 參考標籤失配此值於以下條件下被報告: - 參考標籤檢查除能為0。 - F檢測條件未被檢測到;及 - 計算出的應用程式標籤值不匹配該來源資料完整性欄位中之應用程式標籤欄位。
0x05 所有F檢測錯誤。此值於以下條件下被報告: - 所有F檢測為1; - 致能所有F檢測錯誤為1; - 來源資料完整性欄位之應用程式標籤、參考標籤、及防護欄位的所有位元等於1
DD(DIF 結果欄位碼 )
F檢測條件被檢測到在當表EE中所示的以下之一為真時:
所有F檢測=1 來源資料完整性欄位之應用程式標籤、參考標籤、及防護欄位之所有位元等於1
應用程式標籤F檢測=1 來源資料完整性欄位之應用程式標籤欄位的所有位元等於1
應用程式及參考標籤F檢測=1 來源資料完整性欄位之應用程式標籤及參考標籤欄位兩者的所有位元等於1
EE
假如該操作是成功的且檢查結果旗標為1,則完成記錄之狀態欄位係依據DIF結果而被設定,如下表FF中所示。此容許具有籬旗標之相同批次中的後續描述符根據該操作之結果以繼續或停止該批次之執行。
檢查結果旗標 DIF結果 狀態
0 X 成功
1 = 0x01 成功
1 ≠ 0x01 具有假述詞之成功
FF
快取清除
圖57闡明範例快取清除描述符5700。快取清除操作5705係清除目的地位址上之處理器快取。被清除之位元組的數目係由轉移大小5702所給定。轉移大小無須為快取線大小之倍數。針對目的地位址或轉移大小並沒有對準需求。其由目的地區所部分地覆蓋之任何快取線被清除。
假如目的地快取填充旗標為0,則受影響的快取線可被無效化自快取階層之每一層。假如快取線含有修改過的資料於該快取階層之任一層,則該資料被寫回至記憶體。此係類似於某些處理器中所實施的CLFLUSH指令之行為。
假如目的地快取填充旗標為1,則修改過的快取線被寫入至主記憶體,但不被逐出自該些快取。此係類似於某些處理器中所實施的CLWB指令之行為。
術語加速器有時候於文中被用以指稱鬆散耦合的代理,其可由運行於主機處理器上之軟體所使用以卸載或履行任何種類的計算或I/O工作。根據加速器之類型及使用模型,這些可為履行資料移動至記憶體或儲存、計算、通訊、或這些之任何組合的工作。
「鬆散耦合」指的是這些加速器如何被暴露及被主機軟體所存取。明確地,這些不被暴露為處理器ISA延伸,而是被暴露為平台上之PCI Express可枚舉的端點裝置。鬆散耦合係容許這些代理接受來自主機軟體之工作請求並對於主機處理器異步地操作。
「加速器」可為可編程代理(諸如GPU/ GPGPU)、固定功能代理(諸如壓縮或密碼引擎)、或可再組態代理,諸如場可編程閘極陣列(FPGA)。這些之部分可被用於計算卸載,而其他者(諸如RDMA或主機組織介面)可被用於封包處理、通訊、儲存、或訊息傳遞操作。
加速器裝置可被實體地集成於不同層上,包括晶粒上(亦即,如處理器之相同晶粒)、封裝上、晶片組上、主機板上;或者可為離散PCIe裝附的裝置。針對集成加速器,即使列舉為PCI Express端點裝置,這些加速器之部分仍可被同調地裝附(至晶粒上同調組織或至外部同調介面),而其他者可被裝附至內部非同調介面、或外部PCI Express介面。
在概念層,「加速器」與高性能I/O裝置控制器是類似的。其差別為諸如以下之能力:統一/共用虛擬記憶體、用以操作於可分頁記憶體上之能力、使用者模式工作提呈、工作排程/先佔、及對於低潛時同步化之支援。如此一來,加速器可被視為高性能I/O裝置之新且改良的種類。
卸載處理模型
加速器卸載處理模型可被廣泛地分為三個使用種類:
1. 串流:於串流卸載模型中,小單位的工作以高速率被串流至該加速器。此使用之典型範例為以高速率履行各類型的封包處理之網路資料平面。
2. 低潛時:針對某些卸載使用,卸載操作之潛時(工作之調度至加速器及作用於其上之加速器兩者)是關鍵的。此使用之範例為低潛時訊息傳遞建構,包括透過主機組織之遠端獲取、放置及原子操作。
3. 可擴縮:可擴縮卸載係指稱使用,其中計算加速器之服務為直接地(例如,從階層保護領域中之最高環,諸如環3)可存取至大(無邊界的)量的客戶應用程式(於虛擬機器內或跨越虛擬機器),而沒有由加速器裝置所加諸的限制,諸如工作佇列之數目或該裝置上所支援的門鈴之數目。文中所述之數個加速器裝置及處理器互連係落入此種類中。此可擴縮性適用於計算卸載裝置,其支援諸如GPU、GPGPU、FPGA或壓縮加速器等之工作的時間共用/排程;或訊息傳遞使用,諸如用於具有大可擴縮性需求以供較少鎖定操作之企業資料庫。
跨越卸載模型之工作調度
以上卸載處理模型之各者係加諸其本身的工作調度挑戰,如以下所述。
1. 針對串流卸載使用之工作調度
針對串流使用,典型的工作調度模型係用以使用記憶體駐存的工作佇列。明確地,該裝置係組態記憶體中之工作佇列的位置及大小。硬體係實施門鈴(尾指針)暫存器,其係由軟體所更新在當加入新的工作元件至該工作佇列時。硬體報告目前頭指針給軟體以執行生產者-消費者流程控制於工作佇列元件上。針對串流使用,典型的模型是讓軟體檢查該工作佇列中是否有空間,藉由諮詢軟體中所快取之頭指針(常被硬體所維持於主機記憶體中以避免由軟體所致之UC MMIO讀取的負擔)及尾指針,並將新的工作元件加至記憶體駐存的工作佇列且更新尾指針(使用門鈴暫存器寫入至該裝置)。
門鈴寫入通常為4位元組或8位元組之不可快取的(UC)寫入至MMIO。於某些處理器上,UC寫入是一種串列化操作,其確保較舊的儲存在發送該UC寫入前被整體地觀察(針對生產者-消費者使用所需者),但是亦阻擋處理器管線中所有較新的儲存不被發送直到該UC寫入由平台所宣告。於Xeon伺服器處理器上之UC寫入操作的典型潛時是於80-100奈秒之等級,於該期間所有較新的儲存操作係由該核心所阻擋,其限制了串流卸載性能。
雖然一種用以將較新儲存之串列化定址接續於UC門鈴寫入後的方式是使用寫入結合(WC)儲存操作於門鈴寫入(由於WC弱排序),但使用WC儲存於門鈴寫入會加諸一些挑戰:門鈴寫入大小(通常DWORD或QWORD)係小於快取線大小。這些部分寫入招致額外潛時,由於處理器將該些寫入保持於其寫入結合緩衝器(WCB)中以利潛在的寫入結合機會,招致其針對將被發送自該處理器之門鈴寫入的潛時。軟體可迫使其被發送通過明確的儲存籬,招致如利用UC門鈴之針對較新儲存的相同串列化。
利用WC映射MMIO之另一問題是錯誤預測的及臆測的讀取(利用MOVNTDQA)之暴露至WC映射MMIO(利用其可具有讀取副效應之暫存器)。處理此問題對於裝置而言是繁複的,因為其將需要該些裝置主持分離頁中之WC映射門鈴暫存器,而非剩餘的UC映射MMIO暫存器。此亦加諸挑戰於虛擬化使用,其中VMM軟體可不再忽略客戶記憶體類型並迫使針對任何裝置MMIO之UC映射暴露至該客戶(使用EPT頁表)。
文中所述之MOVDIRI指令係處理上述限制,利用UC或WC儲存於具有這些串流卸載使用之門鈴寫入。
2. 針對低潛時卸載使用之工作調度
某些類型的加速器裝置被高度地最佳化以利於最小潛時完成該請求操作。不像串流加速器(其係針對通量而被最佳化),這些加速器常實施裝置主控的工作佇列(透過裝置MMIO而被暴露)以避免用以從記憶體主控的工作佇列抓取工作元件(以及於某些情況下甚至是資料緩衝器)之DMA讀取潛時。取代地,主機軟體係藉由將工作描述符(以及於某些情況下還有資料)直接地寫入至其透過裝置MMIO而暴露之裝置主控的工作佇列來提呈工作。此類裝置之範例包括主機組織控制器、遠端DMA(RDMA)裝置、及新的儲存控制器,諸如非揮發性記憶體(NVM)-Express。裝置主控的工作佇列使用係招致現存ISA之一些挑戰。
為了避免UC寫入之串列化負擔,裝置主控的工作佇列之MMIO位址通常被映射為WC。此係暴露如利用WC映射的門鈴於串流加速器之相同挑戰。
此外,使用WC儲存至裝置主控的工作佇列係需要裝置防護某些處理器之寫入原子性行為。例如,某些處理器僅確保寫入操作原子性高達快取線邊界內之8位元組大小的寫入(以及針對LOCK操作)而不定義任何確保的寫入完成原子性。寫入操作原子性是處理器儲存操作被其他代理所觀察到的粒度,且為處理器指令集架構及同調協定之性質。寫入完成原子性是被接收器(於記憶體之情況下的記憶體控制器、或者於MMIO之情況下的裝置)所觀察到的非可快取儲存操作之粒度。寫入完成原子性比寫入操作完整性更強,且不僅為處理器指令集架構之功能、同時亦為平台之功能。若無寫入完成原子性,則履行N位元組之非可快取儲存操作的處理器指令可由該裝置主控的工作佇列所接收為多數(撕裂的)寫入異動。目前裝置硬體需藉由追蹤其寫入至該裝置主控的工作佇列之工作描述符或資料的各字元來防護此撕裂的寫入。
文中所述之MOVDIR64B指令係藉由支援具有確保的64位元組寫入完成原子性之64位元組寫入來處理上述限制。MOVDIR64B亦可用於其他使用,諸如寫入至持續記憶體(裝附至記憶體控制器之NVM)以及透過非透明橋(NTB)之跨越系統的資料複製。
3. 針對可擴縮卸載使用之工作調度
用以從應用程式提呈工作至I/O裝置之傳統方式涉及發出系統呼叫至內核I/O堆疊,其係透過內核裝置驅動程式以發送請求至I/O控制器裝置。雖然此方式為可擴縮的(任何數目的應用程式可共用該裝置之服務),但其招致串列化內核I/O堆疊之潛時及負擔,其經常為高性能裝置及加速器之性能瓶頸。
為了支援低負擔工作調度,某些高性能裝置支援直接環3存取以容許直接工作調度至該裝置並檢查工作完成。於此模型中,該裝置之某些資源(門鈴、工作佇列、完成佇列,等等)被配置並映射至應用程式虛擬位址空間。一旦被映射,則環3軟體(例如,使用者模式驅動程式或程式庫)可直接地調度工作至加速器。針對支援共用虛擬記憶體(SVM)能力之裝置,門鈴及工作佇列係由內核模式驅動程式所設定以識別該門鈴及工作佇列所被映射至之應用程式程序的程序位址空間識別符(PASID)。當處理一透過特定工作佇列而調度的工作項目時,該裝置係使用針對該工作佇列而組態之個別PASID,以供透過I/O記憶體管理單元(IOMMU)之虛擬至實體位址轉譯。
利用直接環3工作提呈的挑戰之一是可擴縮性的問題。其可直接地提呈工作至加速器裝置之應用程式客戶的數目係取決於由該加速器裝置所支援之佇列/門鈴(或裝置主控的工作佇列)的數目。此係因為門鈴或裝置主控的工作佇列被靜態地配置/映射至應用程式客戶,而且有由加速器裝置設計所支援之固定數目的這些資源。某些加速器裝置嘗試藉由過度確認其所具有的門鈴資源(藉由依應用程式需求而動態拆卸及再裝附門鈴)以「繞過」此可擴縮性挑戰,但經常是繁瑣且難以擴縮的。利用其支援I/O虛擬化(諸如單根I/O虛擬化(SR-IOV))之裝置,則有限的門鈴/工作佇列資源被進一步限制,因為這些需被分割跨越其指派給不同虛擬機器之不同的虛擬功能(VF)。
擴縮問題針對以下裝置是最關鍵的:由企業應用程式(諸如用於無鎖定操作之資料庫)所使用之高性能訊息傳遞加速器(具有支援64K至1M佇列對之某些RDMA裝置)、及支援其跨越從大量客戶所提呈之工作的加速器資源之共用的計算加速器。
文中所述之ENQCMD/S指令係處理上述擴縮限制以致能無邊界數目的客戶訂閱並共用加速器上之工作佇列資源。
一實施方式包括藉由處理器核心之新類型的儲存操作,包括直接儲存及進入佇列儲存。
於一實施方式中,直接儲存係由文中所述之MOVDIRI及MOVDIR64B指令所產生。
可快取性:類似於UC及WC儲存,直接儲存為非可快取的。假如直接儲存被發送至其被快取之位址,則該線被寫回(假如被修改的話)並無效化自該快取,在該直接儲存以前。
記憶體排序:類似於WC儲存,直接儲存為弱排序的。明確地,其並未被排序違反較舊的WB/WC/NT儲存、CLFLUSHOPT及CLWB至不同位址。較新的WB/WC/NT儲存、CLFLUSHOPT、或CLWB至不同位址可越過較舊的直接儲存。直接儲存至相同位址總是被排序與較舊的儲存(包括直接儲存)至相同位址。直接儲存被防衛以任何執行儲存防衛之操作(例如,SFENCE、MFENCE、UC/WP/WT儲存、LOCK、IN/OUT指令,等等)。
寫入結合:直接儲存具有與一般WC儲存不同的寫入結合行為。明確地,直接儲存可用於即刻逐出自寫入結合緩衝器,而因此不與較新的儲存(包括直接儲存)至相同位址結合。保持在寫入結合緩衝器中之較舊的WC/NT儲存可與較新的直接儲存至相同位址結合,而其需避免此類結合之使用必須明確地儲存籬WC/NT儲存,在執行直接儲存至相同位址以前。
原子性:直接儲存係支援針對其發送直接儲存之指令的寫入大小之寫入完成原子性。於MOVDIRI之情況下,當目的地為4位元組對準的(8位元組對準的)時,則寫入完成原子性為4位元組(8位元組)。針對MOVDIR64B,目的地被強制為64位元組對準的且寫入完成原子性為64位元組。寫入完成原子性確保其直接儲存不被撕裂為多數寫入異動(如由記憶體控制器或根複合體所處理者)。於支援直接儲存之處理器上的根複合體實施方式係確保其直接儲存被傳遞於外部PCI-Express組織上(以及其遵循PCI-Express排序之SoC內的內部I/O組織),如單一未撕裂的已宣告寫入異動。從任何代理(處理器或非處理器代理)至記憶體位置之讀取操作將看見由一發送直接儲存操作之指令所寫入的資料之全部或全無。
忽略目的地記憶體類型:直接儲存係忽略目的地位址記憶體類型(包括UC/WP類型)並總是遵循弱排序。如此致能軟體將裝置MMIO映射為UC,並使用直接儲存指令(MOVDIRI或MOVDIR64B)以存取特定暫存器(諸如門鈴或裝置主控的工作佇列暫存器),而同時繼續使用一般MOV操作(其遵循針對已映射UC記憶體類型之UC排序)以存取其可能具有嚴格串列化要求的其他暫存器。如此亦致能直接儲存指令自客戶軟體內操作,而虛擬機器監視器(VMM)軟體(其不具有裝置特定的知識)將客戶暴露的MMIO映射為處理器延伸頁表(EPT)中之UC,忽略客戶記憶體類型。
支援直接儲存之SoC需確保針對直接儲存之寫入完成原子性如下:
直接儲存至主記憶體:針對直接儲存至主記憶體,同調組織及系統代理應確保其直接儲存中之所有資料位元組被發送至本地代理或其他整體可觀察性(GO)點,以供針對記憶體之請求為單一(非撕裂)寫入異動。針對支援持續記憶體之平台,本地代理、記憶體控制器、記憶體側快取、線內記憶體加密引擎、裝附持續記憶體之記憶體匯流排(諸如DDR-T)、及持續記憶體控制器本身必須支援用於直接儲存之寫入完成原子性的相同或更高粒度。因此,軟體可使用MOVDIR64B以履行64位元組之直接儲存至記憶體(揮發性或持續),且被確保其所有64位元組的寫入將由所有代理來原子地處理。如同利用一般的寫入至持續記憶體,假如軟體需明確地確認為持續,則軟體係遵循具有籬/確認/籬序列之直接儲存。
直接儲存至記憶體映射I/O:針對直接儲存至記憶體映射I/O(MMIO),同調組織及系統代理必須確保其直接儲存中之所有資料位元組被發送至根複合體(針對MMIO之請求的整體可觀察性點),而成為單一(非撕裂)寫入異動。根複合體實施方式必須確保其各直接儲存被處理並傳遞為單一(非撕裂)已宣告寫入異動,於其裝附PCI-Express根複合體集成端點(RCIEP)及根埠(RP)之內部I/O組織上。PCI-Express根埠及切換埠必須將各直接儲存傳遞為單一已宣告寫入異動。寫入完成原子性並未被定義或確保針對直接儲存對準裝置,在次要橋(諸如就有PCI、PCI-X橋)或次要匯流排(諸如USB、LPC,等等)之上或之後。
注意:某些SoC實施方式已確保針對WC寫入請求之寫入完成原子性。明確地,部分線WC寫入(WCiL)及全線WC寫入(WCiLF)已藉由系統代理、記憶體控制器、根複合體、及I/O組織而被處理以寫入完成原子性。針對此類實施方式,不需要處理器分辨直接寫入與WC寫入,且介於直接儲存與WC儲存之間的行為差異為處理器核心內部的。因此對於直接寫入之內部或外部組織規格並無改變被提議。
由PCI-Express端點或RCIEP所接收的直接寫入之處置為裝置實施方式特定的。根據裝置之編程介面,裝置及其驅動程式可能需要某些其暫存器(例如,門鈴暫存器或裝置主控的工作佇列暫存器)總是使用直接儲存指令(諸如MOVDIR64B)而被寫入並於該裝置內原子地處理之。寫入至裝置上之其他暫存器可由裝置所處理而無任何原子性考量或預期。針對RCIEP,假如具有寫入原子性需求之暫存器被實施於透過旁帶或私人佈線介面之存取,則此類實施方式必須確保透過實施方式特定機構之寫入原子性性質。
一實施方式中之進入佇列儲存係由文中所述之ENQCMD及ENQCMDS指令所產生。進入佇列儲存之所欲目標是加速器裝置上之共用工作佇列(SWQ)。於一實施方式中,進入佇列儲存具有以下性質。
無宣告:進入佇列儲存產生64位元組的無宣告寫入異動給目標位址,並接收一指示成功或再嘗試狀態之完成回應。於該完成回應中所返回之成功/再嘗試可藉由ENQCMD/S指令而被返回至軟體(例如,於零旗標中)
可快取性:於一實施方式中,進入佇列儲存不是可快取的。支援進入佇列儲存之平台係強制其進入佇列無宣告寫入僅被發送至其被明確地致能以接受這些儲存之位址(MMIO)範圍。
記憶體排序:進入佇列儲存可更新架構狀態(例如,零旗標)以無宣告寫入完成狀態。因此最多有一進入佇列儲存可為未被既定邏輯處理器所處理的。於該情況下,來自邏輯處理器之進入佇列儲存無法跳過從相同邏輯處理器所發送的另一進入佇列儲存。進入佇列儲存並未被排序違反較舊的WB/WC/NT儲存、CLFLUSHOPT及CLWB至不同位址。需強制此排序之軟體可使用明確的儲存防衛,在此等儲存之後以及在該進入佇列儲存之前。進入佇列儲存總是被排序以較舊的儲存至相同位址。
對準:ENQCMD/S指令強制其進入佇列儲存目的地位址為64位元組對準的。
原子性:由ENQCMD/S指令所產生之進入佇列儲存支援64位元組寫入完成原子性。寫入完成原子性確保其進入佇列儲存不被撕裂為多數異動(如由根複合體所處理者)。於支援進入佇列儲存之處理器上的根複合體實施方式確保其各進入佇列儲存被傳遞為單一(未撕裂)64位元組無宣告寫入異動至端點裝置。
忽略目的地記憶體類型:類似於直接儲存,進入佇列儲存係忽略目的地位址記憶體類型(包括UC/WP類型)並總是遵循如上所述之排序。如此致能軟體繼續將裝置MMIO映射為UC,並使用ENQCMD/S指令以存取共用工作佇列(SWQ)暫存器,而同時繼續使用一般MOV指令或透過直接儲存(MOVDIRI或MOVDIR64B)指令以存取其他暫存器。如此亦致能進入佇列儲存指令自客戶軟體內操作,而VMM軟體(其不具有裝置特定的知識)將客戶暴露的MMIO映射為處理器延伸頁表(EPT)中之UC,忽略客戶記憶體類型。
針對進入佇列儲存之平台考量
針對某些實施方式,一特定組的平台集成裝置係支援共用工作佇列(SWQ)能力。這些裝置可透過內部I/O組織而被裝附至根複合體。這些裝置可被暴露至主機軟體而成為PCI Express根複合體集成端點(RCIEP)或成為虛擬根埠(VRP)後方之PCI Express端點裝置。
支援具有SWQ之集成裝置的平台應應將內部I/O組織上之進入佇列無宣告寫入請求限制至此等裝置。此係為了確保新的異動類型(進入佇列無宣告寫入)不被進入佇列未知端點裝置所處理為變形的異動層封包(TLP)。
進入佇列儲存至所有其他位址(包括主記憶體位址範圍及所有其他記憶體映射位址範圍)係由該平台所終止且一般(非錯誤)回應係以再嘗試完成狀態被返回至發送處理器。無平台錯誤被產生於此等進入佇列儲存終止上,因為非特權軟體(環3軟體、或環0軟體,於VMX非根模式下)可藉由執行ENQCMD/S指令來產生進入佇列無宣告寫入異動。
根複合體實施方式應確保其進入佇列儲存被處理並傳遞為內部I/O組織上之單一(未撕裂)無宣告寫入異動而至其支援SWQ之集成裝置。
平台性能考量
此段落係描述於藉由系統代理及多數系統代理以處理進入佇列儲存時之某些性能考量。
針對進入佇列儲存之系統代理追蹤器(TOR)進入配置的放寬排序:
為了維持記憶體一致性,系統代理實施方式通常對於同調記憶體及MMIO之快取線位址(當配置TOR項目時)的請求執行嚴格排序。雖然此為支援同調記憶體存取之總排序所必要的,但針對進入佇列儲存之此嚴格排序係產生性能問題。此係因為進入佇列儲存是瞄準裝置上之共用工作佇列(SWQ)而因此將為常見的是具有從多數邏輯處理器(具有相同的目的地SWQ位址)所發送的進入佇列儲存請求。同時,不同於其被宣告給系統代理之一般儲存,進入佇列儲存是無宣告的且招致類似於讀取之潛時。為了避免容許共用工作佇列所未處理的僅一個進入佇列儲存之情況,系統代理實施方式被要求放寬針對相同位址之進入佇列儲存請求的嚴格排序,並取而代之容許多數處理中進入佇列儲存之TOR配置至相同位址。因為邏輯處理器一次僅可發送最多一個進入佇列儲存,所以系統代理/平台可獨立地處理各進入佇列儲存而無排序顧慮。
支援I/O橋代理中之多數未處理進入佇列無宣告寫入:
I/O橋實施方式通常將下游路徑中所支援之無宣告(讀取)請求的數目限制至少數(常至單一請求)。此係因為從處理器至MMIO之讀取(其大部分為UC讀取)對於大部分使用並非性能關鍵的,且支援針對讀取之大佇列深度需要針對該資料之緩衝器被返回,增加其硬體成本。因為進入佇列儲存被預期正常地用於工作調度至加速器裝置,所以將此有限佇列應用於進入佇列無宣告寫入可對於性能是決定性的。I/O實施方式被建議為支援增加的佇列深度(邏輯處理器之數目的某實際比率,因為邏輯處理器可一次具有僅一未處理進入佇列儲存請求)以利增進的進入佇列無宣告寫入頻寬。不同於讀取請求,進入佇列儲存不會招致資料緩衝器之硬體成本,因為進入佇列無宣告寫入完成僅返回完成狀態(成功相對於再嘗試)而無資料。
針對進入佇列無宣告寫入之虛擬通道支援
不同於其具有生產者-消費者排序需求(諸如由PCI-Express異動排序所指明者)之I/O匯流排上的典型記憶體讀取及寫入請求,進入佇列無宣告寫入不具有該I/O匯流排上之任何排序需求。此致能用以發送進入佇列無宣告寫入並返回個別完成之非VC0虛擬通道的使用。使用非VC0通道之優點在於其進入佇列無宣告寫入完成可具有較佳的潛時(延誤核心之較少的循環),藉由避免被排序在從裝置至主機之VC0上的上游已宣告寫入後。實施方式被推薦為小心地考量集成裝置使用並將進入佇列無宣告完成潛時最小化。
進入佇列無宣告寫入之中間終止
為了處置對於高潛時情況之特定流程控制(諸如用以喚醒內部鏈結之功率管理,或於鎖定流程上),中間代理(系統代理、I/O橋,等等)被容許丟下合法的進入佇列儲存請求並將具有再嘗試回應之完成返回至發送核心。發送該進入佇列儲存之軟體沒有直接可見性(假如該再嘗試回應係來自中間代理或目標的話),且將正常地再嘗試(潛在地具有某後移)於軟體中。
履行此中間終止之實施方式必須採取極度謹慎以確認此行為無法暴露任何阻斷服務攻擊,橫跨其共用SWQ之軟體客戶。
對於端點裝置之共用工作佇列支援
圖34闡明共用工作佇列(SWQ)之概念,其容許多數非合作軟體代理(應用程式3410-3412)透過共用工作佇列3410以提呈工作,利用文中所述之ENQCMD/S指令。
以下考量可應用於其實施共用工作佇列(SWQ)之端點裝置。
SWQ及其列舉:裝置實體功能(PF)可支援一或更多SWQ。各SWQ可透過64位元組對準的及縮放的暫存器(於此稱為SWQ_REG)而可存取進入佇列無宣告寫入,於裝置MMIO位址範圍中。裝置上之各此類SWQ_REG被推薦以被置於獨特的系統頁大小(4KB)區上。該裝置之裝置驅動程式係負責報告/列舉SWQ能力、有支援的SWQ之數目及透過適當軟體介面而通至軟體之相應SWQ_REG位址。驅動程式亦可選擇性地報告為了軟體調諧或資訊目的而支援的SWQ之深度(雖然此並非針對功能正確性所必要的)。針對支援多數實體功能之裝置,其被推薦以支援各實體功能之獨立SWQ。
對於單一根I/O虛擬化(SR-IOV)裝置之SWQ支援:支援SR-IOV之裝置可支援各虛擬功能(VF)之獨立SWQ,其係透過個別VF基礎位址暫存器(BAR)中之SWQ_REG而被暴露。此設計點係容許針對跨越VF之工作提呈的最大性能隔離,並可適於小至中等數目的VF。針對支援大量VF之裝置(其中每VF之獨立SWQ不是實際的),單一SWQ可被共用跨越數個VF。即使於此情況下,各VF具有其本身的私人SWQ_REG於其VF BAR中,除了其係由一跨越共用該SWQ之該些VF的共同SWQ所支持。針對此類裝置設計,哪些VF共用一SWQ可由硬體設計所靜態地決定,或者介於既定VF的SWQ_REG至SWQ實例之間的映射可透過實體功能及其驅動程式而被動態設定/破壞。跨越VF而共用SWQ之裝置設計需要特別注意QoS以及針對阻斷服務攻擊之保護,如稍後於此段落中所述者。當跨越VF而共用SWQ時,在裝置設計上必須小心識別哪個VF接收其SWQ所接受的進入佇列請求。當從SWQ調度工作請求時,該裝置應確認上游請求被適當地標示以個別VF(除了其被傳遞於進入佇列請求酬載中之PASID以外)之請求者ID(匯流排/裝置/功能#)。
進入佇列無宣告寫入位址:支援SWQ之端點裝置必須接受進入佇列無宣告寫入至任何透過其PF或VF記憶體BAR所發送的位址。針對由端點裝置所接收之對於一位址(其並非SWQ_REG位址)的任何進入佇列無宣告寫入請求,該裝置可能必須不將此處理為錯誤(例如,變形的TLP,等等)並取而代之返回具有再嘗試之完成狀態(MRS)的完成。此可被執行以確保其用以錯誤地或惡意地發送進入佇列儲存至可執行SWQ裝置上之無SWQ_REG位址的ENQCMD/S指令之非特權(環3或環0 VMX客戶)軟體使用無法導致其報告有平台特定的錯誤處置後果之非致命或致命錯誤。
對於SWQ_REG之非進入佇列請求處置:支援SWQ之端點裝置可安靜地將非進入佇列請求(正常記憶體寫入及讀取)丟至SWQ_REG位址而不將其處理為致命或非致命錯誤。對於SWQ_REG位址之讀取請求可返回具有針對該些請求的資料位元組均為1之值的成功完成回應(相對於UR或CA)。對於SWQ_REG位址之正常記憶體(已宣告)寫入請求僅被丟下而無藉由端點裝置之任何動作。此可被執行以確保非特權軟體無法產生對於SWQ_REG位址之正常讀取及寫入請求而錯誤地或惡意地造成其報告有平台特定的錯誤處置後果之非致命或致命錯誤。
SWQ佇列深度及儲存:SWQ佇列深度及儲存是裝置實施方式特定的。裝置設計應確保足夠的佇列深度被支援於該SWQ以獲得該裝置之最大利用。該SWQ之儲存可被實施於該裝置上。SoC上之集成裝置可利用竊取的主記憶體(保留給裝置使用之非OS可見的私人記憶體)以當作該SWQ之溢出緩衝器,容許其比利用裝置上儲存所可能者更大的SWQ佇列深度。針對此類設計,溢出緩衝器之使用對於軟體是透明的,利用裝置硬體以決定何時溢出(相對於丟下進入佇列請求並傳送再嘗試完成狀態)、從該溢出緩衝器提取以供命令執行、及維持任何命令特定的排序需求。為了所有目的,此溢出緩衝器使用係等同於使用本地裝置裝附的DRAM於SWQ儲存之離散裝置。利用溢出緩衝器於竊取記憶體中之裝置設計必須採取極度謹慎以確保其此竊取記憶體被保護不受溢出緩衝器讀取及寫入(藉由其所被配置之裝置)之外的任何存取。
無阻擋SWQ行為:為了性能理由,裝置實施方式應快速地以成功或再嘗試完成狀態來回應進入佇列無宣告寫入請求,而不阻擋針對SWQ能力之進入佇列完成被釋放來接受該請求。接受或拒絕對於SWQ之進入佇列請求的決定可基於能力、QoS/佔有率或任何其他策略。某些範例QoS考量被描述於下。
SWQ QoS考量:針對指向SWQ_REG位址之進入佇列無宣告寫入,端點裝置可應用許可控制以決定接受對於個別SWQ之請求(並傳送成功完成狀態)或丟下它(並傳送再嘗試完成狀態)。許可控制可為裝置及使用特定的,其由硬體所支援/執行的特定策略可透過實體功能(PF)驅動程式介面而被暴露至軟體。因為SWQ為具有多數生產者客戶之共用資源,所以裝置實施方式必須確保針對橫跨生產者之阻斷服務攻擊的足夠保護。SWQ之QoS僅指稱對於該SWQ之工作請求的接受(透過進入佇列請求),且係正交於由裝置硬體所供應之任何QoS(有關QoS如何被供應以共用該裝置之執行資源),當處理由不同生產者所提呈之工作請求時。某些範例方式係描述於下以組態端點裝置來執行用以接受對於SWQ之進入佇列請求的許可策略。這些被記載以僅供闡明之目的,而確實的實施方式選擇將是裝置特定的。
於一實施方式中,MOVDIRI指令係使用直接儲存操作以將來源運算元(第二運算元)中之雙字元整數移動至目的地運算元(第一運算元)。來源運算元可為通用暫存器。目的地運算元可為32位元記憶體位置。於64位元模式中,該指令之預設操作大小為32位元。MOVDIRI係定義其將為雙字元或四字元對準的目的地。
直接儲存可藉由使用供寫入資料之寫入結合(WC)記憶體類型協定而被實施。使用此協定,則處理器不會將資料寫入快取階層,也不會從記憶體將相應的快取線提取入快取階層。假如目的地位址被快取,則該線被寫回(假如被修改的話)並無效化自該快取,在該直接儲存以前。不同於具有非暫時暗示之儲存(其容許針對該目的地之未快取(UC)及寫入保護(WP)記憶體類型撤銷該非暫時暗示),直接儲存總是遵循WC記憶體類型協定而不管其目的地位址記憶體類型(包括UC及WP類型)。
不同於WC儲存及具有非暫時暗示之儲存,直接儲存可用於即刻逐出自寫入結合緩衝器,而因此不與較新的儲存(包括直接儲存)至相同位址結合。保持在寫入結合緩衝器中之較舊的WC及非暫時儲存可與較新的直接儲存至相同位址結合。
因為由直接儲存所使用之WC協定係遵循弱排序的記憶體一致性模型,所以防衛操作應遵循MOVDIRI指令以執行排序(當需要時)。
由MOVDIRI所發送之直接儲存至目的地係對準至4位元組邊界,並確保4位元組寫入完成原子性。此表示其資料係到達該目的地於單一未撕裂的4位元組(或8位元組)寫入異動中。假如該目的地不針對該寫入大小而被對準,則由MOVDIRI所發送的直接儲存被分裂並以兩個部分到達該目的地。此分裂直接儲存之各部分將不會與較新的儲存合併,但可以任何順序到達該目的地。
圖59闡明由用以處理MOVDIRI指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於5901,指令被提取。例如,MOVDIRI指令被提取。MOVDIRI指令包括一運算碼(及於某些實施例一前綴)、一代表目的地運算元之目的地欄位、及一代表來源暫存器運算元之來源欄位。
提取的指令被解碼於5903。例如,MOVDIRI指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於5905。此外,於某些實施例中,該指令被排程。
於5907,已解碼指令係由執行電路(硬體)所執行,諸如文中所詳述者,以將雙字元大小的資料從來源暫存器運算元移動至目的地暫存器運算元而不快取該資料。
於某些實施例中,該指令被確定或撤回於5909。
移動64位元組為具有64位元組寫入原子性之直接儲存,從來源記憶體位址至目的地記憶體位址。來源運算元為一般記憶體運算元。目的地運算元為通用暫存器中所指明的記憶體位置。暫存器內容被解讀為偏置入ES分段而無任何分段撤銷。於64位元模式中,暫存器運算元寬度為64位元(或32位元)。於64位元模式之外,暫存器寬度為32位元或16位元。MOVDIR64B需要目的地位址為64位元組對準的。無對準限制被執行於該來源運算元。
MOVDIR64B係從來源記憶體位址讀取64位元組並履行64位元組直接儲存操作至目的地位址。載入操作係遵循其根據來源位址記憶體類型之正常讀取排序。直接儲存係藉由使用供寫入資料之寫入結合(WC)記憶體類型協定而被實施。使用此協定,則處理器可不將資料寫入快取階層,且可也不從記憶體將相應的快取線提取入快取階層。假如目的地位址被快取,則該線被寫回(假如被修改的話)並無效化自該快取,在該直接儲存以前。
不同於具有非暫時暗示之儲存(其容許針對目的地之UC/WP記憶體類型撤銷該非暫時暗示),直接儲存可遵循WC記憶體類型協定而不管其目的地位址記憶體類型(包括UC/WP類型)。
不同於WC儲存及具有非暫時暗示之儲存,直接儲存可用於即刻逐出自寫入結合緩衝器,而因此不與較新的儲存(包括直接儲存)至相同位址結合。保持在寫入結合緩衝器中之較舊的WC及非暫時儲存可與較新的直接儲存至相同位址結合。
因為由直接儲存所使用之WC協定係遵循弱排序的記憶體一致性模型,所以防衛操作應遵循MOVDIR64B指令以執行排序(當需要時)。
沒有來自來源位址之針對64位元組載入操作所提供的原子性保證,且處理器實施方式可使用多數載入操作以讀取該些64位元組。由MOVDIR64B所發送的64位元組直接儲存係確保64位元組寫入完成原子性。此表示其資料係到達該目的地於單一未撕裂的64位元組寫入異動中。
圖60闡明由用以處理MOVDIRI64B指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6001,指令被提取。例如,MOVDIRI64B被提取。MOVDIRI64B指令包括一運算碼(及於某些實施例一前綴)、一代表目的地運算元之目的地欄位、及一代表來源暫存器運算元之來源欄位。
提取的指令被解碼於6003。例如,MOVDIRI64B指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6005。此外,於某些實施例中,該指令被排程。
於6007,已解碼指令係由執行電路(硬體)所執行,諸如文中所詳述者,以將64位元組資料從來源暫存器運算元移動至目的地暫存器運算元而不快取該資料。
於某些實施例中,該指令被確定或撤回於6009。
於一實施方式中,ENQCMD命令係使用具有64位元組寫入原子性之無宣告寫入以進入佇列一64位元組命令,從來源記憶體位址(第二運算元)至該目的地運算元中之裝置共用工作佇列(SWQ)記憶體位址。來源運算元為一般記憶體運算元。目的地運算元為通用暫存器中所指明的記憶體位址。暫存器內容被解讀為偏置入ES分段而無任何分段撤銷。於64位元模式中,暫存器運算元寬度為64位元或32位元。於64位元模式之外,暫存器寬度為32位元或16位元。ENQCMD需要目的地位址為64位元組對準的。無對準限制被執行於該來源運算元。
於一實施方式中,ENQCMD讀取來自該來源記憶體位址之64位元組命令、格式化64位元組進入佇列儲存資料、及履行該儲存資料至目的地位址之64位元組進入佇列儲存操作。載入操作係遵循其根據來源位址記憶體類型之正常讀取排序。一般保護錯誤可被提出,假如從來源記憶體位址所讀取之64位元組命令資料的下4位元組具有非零值的話;或者假如PASID有效欄位位元為0的話。否則,64位元組進入佇列儲存資料被格式化如下: 進入佇列儲存資料[511:32] = 命令資料[511:32] 進入佇列儲存資料[31] = 0 進入佇列儲存資料[30:20] = 0 進入佇列儲存資料[19:0] = PASID MSR [19:0]
於一實施方式中,由ENQCMD所產生的64位元組進入佇列儲存資料具有由圖58所示之格式。該命令描述符之上60位元組係指明目標裝置特定命令5801。PRIV欄位5802(位元31)可被強制為0以運送由ENQCMD指令所產生之進入佇列儲存的使用者特權。PASID欄位(位元19:0)5804係運送由系統軟體所指派之程序位址空間識別(如PASID MSR中所編程者)以供軟體執行緒執行ENQCMD1。
進入佇列儲存操作係使用無宣告寫入協定以供寫入64位元組的資料。無宣告寫入協定可不將資料寫入快取階層,且可不將相應的快取線提取入快取階層。進入佇列儲存總是遵循無宣告寫入協定而不管目的地位址記憶體類型(包括UC/WP類型)。
無宣告寫入協定可返回完成回應以指示該無宣告寫入之成功或再嘗試狀態。ENQCMD指令可返回此完成狀態於零旗標中(0指示成功,而1指示再嘗試)。成功狀態係指示其無宣告寫入資料(64位元組)係由目標共用工作佇列所接受(但不一定行動於上)。再嘗試狀態係指示該無宣告寫入不被該目的地位址所接受,由於容量或其他暫時原因(或者由於該目的地位址不是有效的共用工作佇列位址)。
於一實施方式中,至少有一進入佇列儲存可為未被既定邏輯處理器所處理的。在該意義上,進入佇列儲存無法通過另一進入佇列儲存。進入佇列儲存並未被排序違反較舊的WB儲存、WC及非暫時儲存、CLFLUSHOPT及CLWB至不同位址。需強制此排序之軟體必須使用明確的儲存防衛,在此等儲存之後以及在該進入佇列儲存之前。ENQCMD僅影響共用工作佇列(SWQ)位元,其不被其他儲存所影響。
沒有來自來源位址之針對64位元組載入操作所提供的原子性保證,且處理器實施方式可使用多數載入操作以讀取該些64位元組。由ENQCMD所發送的64位元組進入佇列儲存係確保64位元組寫入完成原子性。該資料可到達該目的地為單一未撕裂64位元組無宣告寫入異動。
於某些實施例中,PASID架構MSR係由ENQCMD指令所使用。
位元偏置 描述
62:62 保留 ‧RDMSR針對此欄位返回0。WRMSR其嘗試設定此將#GP。
31 PASID 有效 (RW) ‧假如設定,則此MSR之位元19:0含有有效PASID值。 ‧假如清除,則MSR不被編程以PASID值。
30:20 保留 ‧RDMSR針對此欄位返回0。WRMSR其嘗試設定此將#GP。
19:0 PASID 有效 (RW) ‧指明針對目前運行執行緒背景之程序位址空間識別符(PASID)值。
圖61闡明由用以處理ENCQMD指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6101,指令被提取。例如,ENCQMD指令被提取。ENCQMD指令包括一運算碼(及於某些實施例一前綴)、一代表目的地記憶體位址運算元之目的地欄位、及一代表來源記憶體運算元之來源欄位。
提取的指令被解碼於6103。例如,ENCQMD指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6105。此外,於某些實施例中,該指令被排程。
於6107,已解碼指令係由執行電路(硬體)所執行,諸如文中所詳述者,以將命令(已擷取資料)寫入至目的地記憶體位址。於某些實施例中,目的地記憶體位址為共用工作佇列位址。
於某些實施例中,該指令被確定或撤回於6109。
於一實施方式中,ENQCMDS命令係使用具有64位元組寫入原子性之無宣告寫入以進入佇列該64位元組命令,從來源記憶體位址(第二運算元)至該目的地運算元中之裝置共用工作佇列(SWQ)記憶體位址。來源運算元為一般記憶體運算元。目的地運算元為通用暫存器中所指明的記憶體位址。暫存器內容可被解讀為偏置入ES分段而無任何分段撤銷。於64位元模式中,暫存器運算元寬度為64位元或32位元。於64位元模式之外,暫存器寬度為32位元或16位元。ENQCMD需要目的地位址為64位元組對準的。無對準限制被執行於該來源運算元。
不同於ENQCMD(其可被執行自任何特權階層),ENQCMDS為特權指令。當該處理器運行於保護模式下時,CPL必須為0以執行此指令。ENQCMDS係從來源記憶體位址讀取64位元組命令,並使用此資料以履行64位元組進入佇列儲存操作至目的地位址。載入操作係遵循其根據來源位址記憶體類型之正常讀取排序。64位元組進入佇列儲存資料被格式化如下: 進入佇列儲存資料[511:32] = 命令資料[511:32] 進入佇列儲存資料[31] = 命令資料[31] 進入佇列儲存資料[30:20] = 0 進入佇列儲存資料[19:0] = 命令資料[19:0]
由ENQCMDS所產生之64位元組進入佇列儲存資料可具有如ENQCMD之相同格式。於一實施方式中,ENQCMDS具有圖62中所示之格式。
該命令描述符之上60位元組係指明目標裝置特定命令6201。PRIV欄位(位元31)6202係由來源運算元位址上之命令資料中的位元31所指明以運送針對由ENQCMDS指令所產生之進入佇列儲存的使用者(0)或管理者(1)特權。PASID欄位(位元19:0)6204運送程序位址空間識別,如於來源運算元位址1上之命令資料中的位元19:0所指明者。
於一實施方式中,進入佇列儲存操作係使用無宣告寫入協定以供寫入64位元組的資料。無宣告寫入協定不將資料寫入快取階層,且不將相應的快取線提取入快取階層。進入佇列儲存總是遵循無宣告寫入協定而不管目的地位址記憶體類型(包括UC/WP類型)。
無宣告寫入協定係返回完成回應以指示該無宣告寫入之成功或再嘗試狀態。ENQCMD指令係返回此完成狀態於零旗標中(0指示成功,而1指示再嘗試)。成功狀態係指示其無宣告寫入資料(64位元組)係由目標共用工作佇列所接受(但不一定行動於上)。再嘗試狀態係指示該無宣告寫入不被該目的地位址所接受,由於容量或其他暫時原因(或者由於該目的地位址不是有效的共用工作佇列位址)。
最多有一進入佇列儲存(ENQCMD或ENQCMDS)可為未被既定邏輯處理器所處理的。在該意義上,進入佇列儲存無法通過另一進入佇列儲存。進入佇列儲存可不被排序違反較舊的WB儲存、WC及非暫時儲存、CLFLUSHOPT或CLWB至不同位址。需強制此排序之軟體可使用明確的儲存防衛,在此等儲存之後以及在該進入佇列儲存之前。
ENQCMDS僅影響共用工作佇列(SWQ)位元,其不被其他儲存所影響。
沒有來自來源位址之針對64位元組載入操作所提供的原子性保證,且處理器實施方式可使用多數載入操作以讀取該些64位元組。由ENQCMDS所發送的64位元組進入佇列儲存確保64位元組寫入完成原子性(亦即,到達該目的地為單一未撕裂64位元組無宣告寫入異動)。
圖63闡明由用以處理ENCQMDs指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6301,指令被提取。例如,ENCQMDs被提取。ENCQMDs指令包括一運算碼(及於某些實施例一前綴)、一代表目的地記憶體位址運算元之目的地欄位、及一代表來源記憶體運算元之來源欄位。
提取的指令被解碼於6303。例如,ENCQMDs指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6305。此外,於某些實施例中,該指令被排程。
於6307,已解碼指令係由執行電路(硬體)所執行(於特權模式中),諸如文中所詳述者,以將命令(已擷取資料)寫入至目的地記憶體位址。於某些實施例中,目的地記憶體位址為共用工作佇列位址。
於某些實施例中,該指令被確定或撤回於6309。
一種實施方式利用兩指令以確保介於加速器與主機處理器之間的有效率同步化:UMONITOR及UMWAIT。簡單地,UMONITOR指令係使用來源暫存器中所指明之位址以武裝位址監督硬體,而UMWAIT指令指示該處理器進入實施方式相依的最佳化狀態而同時監督某一範圍的位址。
UMONITOR指令係使用r32/r64來源暫存器中所指明之位址以武裝位址監督硬體(其針對儲存操作之監督硬體檢查可藉由使用CPUID監督葉功能來判定的位址範圍)。儲存至指定位址範圍內之位址係觸發該監督硬體。監督硬體之狀態係由UMWAIT所使用。
以下運算元編碼被用於UMONITOR指令之一實施方式:
Figure 02_image001
r32/r64來源暫存器之內容為有效位址(於64位元模式中,r64被使用)。依預設,DS分段被用以產生其被監督之線性位址。分段撤銷可被使用。位址範圍必須使用寫回類型的記憶體。唯寫回記憶體被確保正確地觸發該監督硬體。
UMONITOR指令被排序為相關於其他記憶體異動之載入操作。該指令接受許可檢查以及與位元組載入相關的錯失。如同載入,UMONITOR設定A位元而非D位元,於頁表中。
UMONITOR及UMWAIT可被執行於任何特權階層。該指令之操作在非64位元模式中以及在64位元模式中是相同的。
UMONITOR不與傳統MWAIT指令互操作。假如UMONITOR被執行在執行MWAIT之前並接續於傳統MONITOR指令的最近執行之後,則MWAIT可不進入最佳化狀態。執行將重新開始在接續於該MWAIT後之指令上。
UMONITOR指令造成異動異常中止,當被使用於異動區內部時。
UMONITOR係使用來源暫存器之內容為有效位址以設定該監督硬體之位址範圍並將該監督硬體置於武裝狀態。儲存至指定位址範圍將觸發該監督硬體。
圖64闡明由用以處理UMONITOR指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6401,指令被提取。例如,UMONITOR指令被提取。UMONITOR指令包括一運算碼(及於某些實施例一前綴)以及一明確來源暫存器運算元。
提取的指令被解碼於6403。例如,UMONITOR指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6405。此外,於某些實施例中,該指令被排程。
於6407,已解碼指令係由執行電路(硬體)(諸如文中所詳述者)所執行以武裝監督硬體,以用於儲存至一由已擷取來源暫存器資料所定義的位址。
於某些實施例中,該指令被確定或撤回於6409。
UMWAIT指示該處理器進入實施方式相依的最佳化狀態而同時監督某一範圍的位址。該最佳化狀態可為輕量功率/性能最佳化狀態或增進的功率/性能最佳化狀態。兩狀態之間的選擇係由明確輸入暫存器位元[0]來源運算元所負責。
Figure 02_image003
UMWAIT可被執行於任何特權階層。此指令之操作在非64位元模式中以及在64位元模式中是相同的。
輸入暫存器可含有諸如該處理器所應進入之較佳最佳化狀態等資訊,如下表中所述者。除了位元0之外的位元被保留且將導致#GP(假如非零的話)。
位元值 狀態名稱 醒來時間 功率節省 其他優點
位元[0]=0 C0.2 更慢 更大 增進相同核心上之其他SMT執行緒之性能。
位元[0]=1 C0.1 更快 更小   
位元[31:1]          保留(MBZ) 非64b模式
位元[63:1]          保留(MBZ) 64b模式
MM
該指令係醒來在當時戳計數器達到或超過隱含的64位元輸入值時(假如該監督硬體未事先觸發的話)。
在執行UMWAIT指令之前,作業系統可指明其容許該處理器擱置其操作的最大延遲,該操作中可包括兩功率/性能最佳化狀態之任一者。其可藉由將TSC量子值寫入至以下32位元MSR來進行: UMWAIT_CONTROL[31:2] -判定其該處理器可駐存在C0.1或C0.2之任一者中的TSC量子中之最大時間。零值係指示OS未對該處理器加諸任何限制。最大時間值為32b值,其中上30b來自此欄位而下二位元被假設為零。 UMWAIT_CONTROL[1] -保留。 UMWAIT_CONTROL[0] -C0.2不被OS所容許。1之值表示所有C0.2請求轉變為C0.1。
於一實施方式中,假如其執行UMWAIT指令之處理器由於作業系統時間限制之截止而醒來,則該指令便設定一攜載旗標;否則,該旗標被清除。
UMWAIT指令造成異動異常中止,當被使用於異動區內部時。 於一實施方式中,UMWAIT指令係配合UMONITOR指令而操作。兩指令容許定義一位址以供在該位址上等待(UMONITOR)及實施方式相依的最佳化操作於等待位址上開始(UMWAIT)。UMWAIT之執行為針對該處理器之暗示,其可進入實施方式相依的最佳化狀態而同時等待一事件或一儲存操作至由UMONITOR所武裝的位址範圍。
以下可造成該處理器離開該實施方式相依的最佳化狀態:儲存至由UMONITOR指令所武裝的位址範圍、非可遮蔽中斷(NMI)或系統管理中斷(SMI)、除錯例外、機器檢查例外、BINIT#信號、INIT#信號、及RESET#信號。其他實施方式相依的事件亦可造成該處理器離開實施方式相依的最佳化狀態。
此外,外部中斷可造成該處理器離開實施方式相依的最佳化狀態而不論可遮蔽中斷是否被禁止。
在從實施方式相依的最佳化狀態離開之後,控制係傳遞至接續於UMWAIT指令後之指令。未被遮蔽之待決中斷(包括NMI或SMI)可在該指令之執行前被遞送。
不同於HLT指令,UMWAIT指令不支援在接續於SMI之處置後的UMWAIT指令上之重新開始。假如先前UMONITOR指令並未成功地武裝位址範圍或假如UMONITOR並未在執行UMWAIT之前以及接續在傳統MONITOR指令的最近執行之後被執行(UMWAIT不與MONITOR互操作),則該處理器將不進入最佳化狀態。執行將重新開始在接續於該UMWAIT後之指令上。
注意:UMWAIT被用以進入C0子狀態(其係數字上低於C1),因此儲存至由UMONITOR指令所武裝的位址範圍將造成該處理器離開UMWAIT,假如該儲存由其他處理器代理所起始或者該儲存由非處理器代理所起始的話。
圖65闡明由用以處理UMWAIT指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6501,指令被提取。例如,UMWAIT指令被提取。UMWAIT指令包括一運算碼(及於某些實施例一前綴)以及一明確來源暫存器運算元。
提取的指令被解碼於6503。例如,UMWAIT指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6505。此外,於某些實施例中,該指令被排程。
於6507,已解碼指令係由執行電路(硬體)(諸如文中所詳述者)所執行以使該處理器(或核心)進入實施方式相依的狀態(由明確來源暫存器運算元之資料所定義),而同時監督某一範圍的位址。
於某些實施例中,該指令被確定或撤回於6509。
TPAUSE指示該處理器進入實施方式相依的最佳化狀態。有選自以下之兩種此類最佳化狀態:輕量功率/性能最佳化狀態、及增進的功率/性能最佳化狀態。兩者之間的選擇係由明確輸入暫存器位元[0]來源運算元所負責。
Figure 02_image005
TPAUSE可被執行於任何特權階層。此指令之操作在非64位元模式中以及在64位元模式中是相同的。
不同於PAUSE,TPAUSE指令將不會造成異常中止在當使用於內部異動區時。輸入暫存器含有諸如該處理器所應進入之較佳最佳化狀態等資訊,如下表中所述者。除了位元0之外的位元被保留且將導致#GP(假如非零的話)。
位元值 狀態名稱 醒來時間 功率節省 其他優點
位元[0]=0 C0.2 更慢 更大 增進其他SMT執行緒之性能。
位元[0]=1 C0.1 更快 更小   
位元[31:1]          保留(MBZ) 非64b模式
位元[63:1]          保留(MBZ) 64b模式
PP
該指令係醒來在當時戳計數器達到或超過隱含的64位元輸入值時(假如該監督硬體未事先觸發的話)。在執行TPAUSE指令之前,作業系統可指明其容許該處理器擱置其操作的最大延遲,在兩功率/性能最佳化狀態之任一者中。其可藉由將TSC量子值寫入至以下32位元MSR來進行: UMWAIT_CONTROL[31:2] -判定其該處理器可駐存在C0.1或C0.2之任一者中的TSC量子中之最大時間。零值係指示OS未對該處理器加諸任何限制。最大時間值為32b值,其中上30b來自此欄位而下二位元被假設為零。 UMWAIT_CONTROL[1] -保留。 UMWAIT_CONTROL[0] -C0.2不被OS所容許。1之值表示所有C0.2請求轉變為C0.1
由於OS時間限制之截止所致的醒來原因可藉由設定攜載旗標而被指示。
假如其執行TPAUSE指令之處理器由於作業系統時間限制之截止而醒來,則該指令便設定一攜載旗標;否則,該旗標被清除。
為了監督多數位址範圍,TPAUSE指令可被置於異動區內,該異動區係由一組用以監督的位址及後續TPAUSE指令所組成。該異動區容許定義一組位址以供在該組位址上等待及實施方式相依的最佳化操作於TPAUSE指令之執行時開始。於一實施方式中,TPAUSE之執行指引該處理器進入實施方式相依的最佳化狀態,而同時等待一事件或一儲存操作至由讀取組所定義的範圍中之位址。
異動式記憶體內之TPAUSE的使用可被限制至C0.1(輕量功率/性能最佳化狀態)。即使軟體設定位元[0] = 0以指示其對於C0.2之偏好(增進的功率/性能最佳化狀態),該處理器仍可進入C0.1。
以下可造成該處理器離開該實施方式相依的最佳化狀態:儲存至異動區內之讀取組範圍、NMI或SMI、除錯例外、機器檢查例外、BINIT#信號、INIT#信號、及RESET#信號。所有這些事件亦將異常中止該異動。
其他實施方式相依的事件可造成該處理器離開實施方式相依的最佳化狀態,並可導致非異常中止異動區,前進至接續於TPAUSE後之指令。此外,外部中斷造成該處理器離開實施方式相依的最佳化狀態而不論可遮蔽中斷是否被禁止,於某些實施例中。應注意:假設可遮蔽中斷被禁止,則執行將進行至接續於TPAUSE後之指令,而於中斷已致能旗標被設定之情況下,異動區將被異常中止。
圖66闡明由用以處理TPAUSE指令之處理器所履行的方法之實施例。例如,使用文中所詳述的硬體。
於6601,指令被提取。例如,TPAUSE被提取。TPAUSE指令包括一運算碼(及於某些實施例一前綴)以及一明確來源暫存器運算元。
提取的指令被解碼於6603。例如,TPAUSE指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於6605。此外,於某些實施例中,該指令被排程。
於6607,已解碼指令係由執行電路(硬體)(諸如文中所詳述者)所執行以使該處理器(或核心)進入實施方式特定的狀態(由明確來源暫存器運算元之資料所定義)。
於某些實施例中,該指令被確定或撤回於6609。
圖67闡明使用UMWAIT及UMONITOR指令之執行的範例。
於6701,UMWAIT指令被執行以設定欲監督之某一範圍的位址。
於6703,UMONITOR指令被執行以使其執行該指令之核心進入實施方式相依的狀態(由該指令之明確來源暫存器運算元的資料所定義),針對被監督之該範圍的位址。
實施方式相依的狀態於以下之一者離開:儲存至被監督位址、NMI、SMI、除錯例外、機器檢查例外、初始信號、或重設信號,於6705。
圖68闡明使用TPAUSE及UMONITOR指令之執行的範例。
於6801,TPAUSE指令被執行以設定欲監督之某一範圍的位址。
於6803,UMONITOR指令被執行以使其執行該指令之核心進入實施方式相依的狀態(由該指令之明確來源暫存器運算元的資料所定義),針對被監督之該範圍的位址。
實施方式相依的狀態於以下之一者離開:儲存至被監督位址、NMI、SMI、除錯例外、機器檢查例外、初始信號、或重設信號,於6805。
與該執行緒相關的異動被異常中止在其於6807離開之實施方式相依的狀態。
於某些實施方式中,加速器被耦合至處理器核心或其他處理元件以加速某些類型的操作,諸如圖形操作、機器學習操作、型態分析操作、及(如以下所詳述者)稀疏矩陣乘法操作,僅舉出一些。加速器可透過匯流排或其他互連(例如,點對點互連)而被通訊地耦合至處理器/核心,或者可被集成於如該處理器之相同晶片上並透過內部處理器匯流排/互連而通訊地耦合至該些核心。不管其中該加速器所被連接之方式,該些處理器核心可配置某些處理工作至該加速器(例如,以指令或微操作之序列的形式),其包括用以有效率地處理這些工作之專屬電路/邏輯。
圖69闡明一範例實施方式,其中加速器6900係透過快取同調性介面6930而被通訊地耦合至複數核心6910-6911。核心6910-6911之各者包括用以儲存虛擬至實體位址轉譯之變換後備緩衝6912-6913及用以快取資料和指令之一或更多快取6914-6915(例如,L1快取、L2快取,等等)。記憶體管理單元6920管理藉由核心6910-6911之存取至系統記憶體6950,其可為動態隨機存取記憶體DRAM。共用快取6926(諸如L3快取)可被共用於處理器核心6910-6911之間並經由快取同調性介面6930而與加速器6900共用。於一實施方式中,核心6910-1011、MMU 6920及同調性介面6930被集成於單一處理器晶片上。
所示之加速器6900包括具有快取6907及排程器6906之資料管理單元6905,該排程器6906係用以排程操作至複數處理元件6901-6902,N。於所示之實施方式生,各處理元件具有其本身的本地記憶體6903-6904,N。如以下所詳述,各本地記憶體6903-6904,N可被實施為堆疊DRAM。
於一實施方式中,快取同調性介面6930提供介於核心6910-6911與加速器6900之間的快取同調連接性,效果上將該加速器視為核心6910-6911之同儕。例如,快取同調性介面6930可實施快取同調性協定以確保其由加速器6900所存取/修改並儲存於加速器快取6907及/或局部記憶體6903-6904,N中的資料係與儲存於核心快取6910-6911、共用快取6926及系統記憶體6950中的資料同調。例如,快取同調性介面6930可參與由核心6910-6911及MMU 6920所使用的監聽機制以檢測共用快取6926及本地快取6914-6915內之快取線的狀態,並可作用為代理,其提供監聽更新以回應於藉由處理元件6901-6902,N之對於快取線的存取及嘗試修改。此外,當快取線係由處理元件6901-6902所修改時,快取同調性介面6930可更新快取線之狀態(假如其被儲存於共用快取6926或本地快取6914-6915內的話)。
於一實施方式中,資料管理單元1005包括記憶體管理電路(其係提供加速器6900存取至系統記憶體6950)及共用快取6926。此外,資料管理單元6905可提供更新至快取同調性介面6930並接收來自快取同調性介面6930之更新如所需(例如,用以判定對於快取線之狀態改變)。於所示之實施方式中,資料管理單元6905包括排程器6906,用以排程將由處理元件6901-6902所執行的指令/操作。為了履行其排程操作,排程器6906可評估指令/操作之間的相依性以確保其指令/操作被執行以同調順序(例如,用以確保其第一指令執行在第二指令之前,該第二指令係取決於來自該第一指令之結果)。其並非互相依之指令/操作可被平行地執行於處理元件6901-6902上。
圖70闡明加速器6900之另一視圖,以及先前所述之其他組件,包括資料管理單元6905、複數處理元件6901-N、及快速晶片上儲存7000(例如,使用堆疊本地DRAM而被實施於一實施方式中)。於一實施方式中,加速器6900為硬體加速器架構,而處理元件6901-N包括用以履行矩陣*向量及向量*向量操作(包括用於稀疏/緊密矩陣之操作)之電路。特別地,處理元件6901-N可包括針對行及列取向的矩陣處理之硬體支援,並可包括針對「擴縮和更新」操作(諸如其用於機器學習(ML)演算法中者)之微架構支援。
所述的實施方式係履行矩陣/向量操作,其係藉由以下方式而被最佳化:保持頻繁使用的、隨機存取的、潛在地稀疏的(例如,收集/散佈)向量資料於快速晶片上儲存7000中並維持大的、不常使用的矩陣資料於晶片外記憶體(例如,系統記憶體6950)中;以串流方式來存取(每當可能時);及暴露內/間矩陣區塊平行性以供放大。
處理元件6901-N之實施方式係處理稀疏矩陣、緊密矩陣、稀疏向量、及緊密向量之不同組合。如文中所使用,「稀疏」矩陣或向量是一種其中大部分元件為零的矩陣或向量。相反地,「緊密」矩陣或向量是一種其中大部分元件為非零的矩陣或向量。矩陣/向量之「稀疏性」可根據零值的元件之數目除以元件之總數(例如,針對m × n矩陣m × n)來定義。於一實施方式中,矩陣/向量被視為「稀疏」假如其稀疏性高於指定臨限值的話。
由處理元件6901-N所履行之範例組的操作被顯示於圖71之表中。特別地,操作類型包括使用稀疏矩陣之第一乘法7100、使用緊密矩陣之第二乘法7101、擴縮和更新操作7102及內積操作7103。行被提供給第一輸入運算元7110及第二輸入運算元7111(其各可包括稀疏或緊密矩陣/向量);輸出格式7112(例如,緊密向量或純量);矩陣資料格式(例如,壓縮稀疏列、壓縮稀疏行、列取向,等等)7113;及操作識別符7114。
於某些目前工作量中所發現之運行時間主宰的計算型態包括相對於向量之矩陣乘法的變化(以列取向及行取向方式)。其係工作於眾所周知的矩陣格式上:壓縮稀疏列(CSR)及壓縮稀疏行(CSC)。圖72A描繪介於稀疏矩陣A與向量x之間的相乘以產生向量y的範例。圖72B闡明矩陣A之CSR表示,其中各值被儲存為一(值、列指標)對。例如,列0之(3,2)係指示其3之值被儲存於列0之元件位置2中。圖72C闡明其使用一(值、列指標)對的矩陣A之CSC表示。
圖73A、73B、及73C闡明各計算型態之虛擬碼,其被詳細地描述於下。特別地,圖73A闡明列取向稀疏矩陣緊密向量乘法(spMdV_csr);圖73B闡明行取向稀疏矩陣稀疏向量乘法(spMspC_csc);及圖73C闡明擴縮和更新操作(scale_update)。
A. 列取向稀疏矩陣緊密向量乘法(spMdV_csr)
此為眾所周知的計算型態,其在許多應用領域(諸如高性能計算)中是重要的。於此,針對矩陣A之各列,該列相對於向量x之內積被履行,且其結果被儲存於由列指標所指向之y向量元件中。此計算被用於機器學習(ML)演算法,其係履行涵蓋一組樣本(亦即,矩陣之列)的分析。其可被用於諸如「迷你批次」等技術。亦有如下情況:其中ML演算法僅履行稀疏向量相對於緊密向量之內積(亦即,spMdV_csr迴路之疊代),諸如於學習演算法之隨機變體中。
其可能影響對於此計算之性能的已知因素是需要隨機地存取內積計算中之稀疏x向量元件。針對傳統的伺服器系統,當x向量很大時,則此將導致不規律的存取(收集)至記憶體或最後階快取。
為了解決此問題,處理元件之一實施方式將矩陣A劃分為行區塊以及將x向量劃分為多數子集(各相應於一矩陣行區塊)。區塊大小可被選擇以致其x向量子集可配適於晶片上。因此,對於其之隨機存取可被本地化於晶片上。
B. 行取向稀疏矩陣稀疏向量乘法(spMspV_csc)
將稀疏矩陣乘以稀疏向量之此型態不是如spMdV_csr一般眾所周知的。然而,其在某些ML演算法中是重要的。其被使用在當演算法工作於一組特徵上時,該些特徵被表示為資料集之中的矩陣行(因此,針對行取向矩陣存取之需求)。
於此計算型態中,矩陣A之各行被讀取並乘以x向量之相應的非零元件。該結果被用以更新其被保持在y向量上之部分內積。在與非零x向量元件相關的所有行已被處理之後,y向量將含有最後內積。
雖然針對矩陣A之存取是規律的(亦即,A之行中的串流),但針對用以更新部分內積的y向量之存取是不規律的。用以存取之y元件係取決於被處理之A向量元件的列指標。為了處理此問題,矩陣A可被劃分為列區塊。因此,y向量可被劃分為相應於這些區塊之子集。如此一來,當處理矩陣列區塊時,其僅需不規律地存取(收集/散佈)其y向量子集。藉由適當地選擇區塊大小,y向量子集可被保持於晶片上。
C. 擴縮和更新(scale_update)
此型態通常係由ML演算法所使用以將擴縮因子應用至該矩陣中之各樣本並將其減少入一組加權,各相應於一特徵(亦即,A中之一行)。於此,x向量含有擴縮因子。針對矩陣A之各列(以CSR格式),該列之擴縮因子被讀取自x向量,並接著被應用至該列中之A的各元件。其結果被用以更新y向量之元件。在所有列已被處理之後,y向量含有減少的加權。
類似於先前的計算型態,針對y向量之不規律存取可能影響性能(當y很大時)。將矩陣A劃分為行區塊及將y向量劃分為相應於這些區塊之多數子集可協助將該些不規律存取本地化於各y子集內。
一實施方式包括硬體加速器,其可有效地履行以上所討論的計算型態。該加速器為硬體IP區塊,其可被集成與通用處理器。於一實施方式中,加速器6900係透過一與該些處理器共用的互連以獨立地存取記憶體6950,來履行計算型態。其支援駐存在晶片外記憶體中之任意大的矩陣資料集。
圖74闡明針對資料管理單元6905及處理元件6901-6902之一實施方式的處理流程。於此實施方式中,資料管理單元6905包括處理元件排程器7401、讀取緩衝器7402、寫入緩衝器7403及減少單元7404。各PE 6901-6902包括輸入緩衝器7405-7406、乘法器7407-7408、加法器7409-7410、本地RAM7421-7422、總和暫存器7411-7412、及輸出緩衝器7413-7414。
加速器支援以上所討論的矩陣阻擋方案(亦即,列及行阻擋)以支援任何任意大的矩陣資料。加速器被設計以處理矩陣資料之區塊。各區塊被進一步劃分為子區塊,其係由Pes 6901-6902所平行地處理。
於操作時,資料管理單元6905將來自記憶體子系統之矩陣列或行讀取入其讀取緩衝器7402,其被接著由PE 排程器7401所動態分佈橫跨PE 6901-6902以供處理。其亦將結果從其寫入緩衝器7403寫入至記憶體。
各PE 6901-6902係負責處理一矩陣子區塊。PE含有晶片上RAM 7421-7422,用以儲存其需被隨機地存取之向量(亦即,x或y向量之子集,如上所述者)。其亦含有浮點乘累積(FMA)單元,包括乘法器74047-7408和加法器7409-7410和輸入緩衝器7405-7406內之解封裝邏輯,用以從輸入資料提取矩陣元件;及總和暫存器7411-7412,用以保存累積的FMA結果。
加速器之一實施方式達成了極佳的效率,因為(1)其將不規律存取的(收集/散佈)資料置於晶片上PE RAM 7421-7422中,(2)其利用硬體PE 排程器7401以確保PE被良好地利用,及(3)不同於通用處理器,該加速器僅由其針對稀疏矩陣操作之為基本的硬體資源所組成。總之,加速器有效率地將其所被提供的可用記憶體頻寬轉換為性能。
性能之擴縮可藉由以下方式來進行:利用一加速器區塊中之更多的PE以平行地處理多數矩陣子區塊、及/或利用更多的加速器區塊(各具有一組PE)以平行地處理多數矩陣區塊。這些選擇之組合被考量於下。PE及/或加速器區塊之數目應被調整以匹配記憶體頻寬。
加速器6900之一實施方式可透過軟體庫而被編程。此庫係準備記憶體中之矩陣資料、以有關計算之資訊(例如,計算類型、針對矩陣資料之記憶體指針)來設定加速器6900中之控制暫存器、及開始加速器。接著,加速器獨立地存取記憶體中之矩陣資料、履行該計算、及將結果寫回至記憶體以供軟體使用。
加速器藉由將其PE設至適當的資料路徑組態以處置不同的計算型態,如圖75A-B中所示。特別地,圖75a係強調針對spMspV_csc及scale_update操作之路徑(使用虛線)而圖75b顯示針對spMdV_csr操作之路徑。用以履行各計算型態之加速器被詳述於下。
針對spMspV_csc,初始y向量子集被DMU 6905所載入至PE的RAM 7421。其接著從記憶體讀取x向量元件。針對各x元件,DMU 6905係串流來自記憶體之相應矩陣行的元件並將其供應至PE 6901。各矩陣元件含有一值(A.val)及一指標(A.idx),其係指向y元件以讀取自PE的RAM 7421。DMU 6905亦提供x向量元件(x.val),其係藉由乘累積(FMA)單元而被乘以A.val。其結果被用以更新其由A.idx所指向之PE的RAM中之y元件。注意:即使未由我們的工作量所使用,加速器亦支援相對於緊密x向量之行方向乘法(spMdV_csc),藉由處理所有矩陣行而非僅一子集(因為x是緊密的)。
擴散更新操作係類似於spMspV_csc,除了其DMU 6905讀取以CSR格式(取代CSC格式)所表示之A矩陣的列。針對spMdV_csr,x向量子集被載入至PE的RAM 7421。DMU 6905從記憶體串流入矩陣列元件(亦即,{A.val,A.idx}對)。A.idx被用以從RAM 7421讀取適當的x向量元件,其係藉由FMA而被乘以A.val。結果被累積入總和暫存器7412。總和暫存器被寫入至輸出緩衝器於每次PE看見一指示列之末端的標記時,該標記係由DMU 6905所供應。以此方式,各PE針對其所負責之列子區塊產生總和。為了產生該列之最後總和,由所有PE所產生的子區塊總和係藉由DMU中之減少單元7404而被加在一起(參見圖74)。最後總和被寫入至輸出緩衝器7413-7414,其接著被DMU 6905寫入至記憶體。
圖形資料處理
於一實施方式中,文中所述之加速器架構被組態成處理圖形資料。圖形分析係仰賴圖形演算法以提取有關資料(其被表示為圖形)間之關係的知識。圖形資料(來自諸如社交媒體等來源)之增長已導致針對圖形分析之寬廣使用的強烈要求。如此一來,能夠盡可能有效率地進行圖形分析是極為重要的。
為了處理此需求,一實施方式自動地將使用者定義的圖形演算法映射至硬體加速器架構「模板」,其被客製化為既定的輸入圖形演算法。加速器可包含上述架構並可被實施為FPGA/ASIC,其可極具效率地執行。縱言之,一實施方式包括:
(1)硬體加速器架構模板,其係根據一般化稀疏矩陣向量乘法(GSPMV)加速器。其支援任意的圖形演算法,因為已顯示其圖形演算法可被公式化為矩陣操作。
(2)自動方式,用以將廣泛使用的「頂點中心」圖形編程抽象化映射並調整至架構模板。
有現存的稀疏矩陣乘法硬體加速器,但其並不支援可客製化性以容許圖形演算法之映射。
設計框架之一實施方式係操作如下。
(1)使用者指明一圖形演算法為「頂點程式」,其係遵循頂點中心圖形編程抽象化。此抽象化係由於其受歡迎性而於此被選擇為範例。頂點程式不會暴露硬體細節,因此沒有硬體專頁之使用者(例如,資料科學家)可產生它。
(2)連同(1)中之圖形演算法,框架之一實施方式係接受以下輸入:
a. 將被產生之目標硬體加速器的參數(例如,晶片上RAM之最大量)。這些參數可由使用者所提供,或者從已知參數之現存庫所獲得,當針對現存的系統(例如,特別的FPGA電路板)時。
b. 設計最佳化目標(例如,最大性能,最小面積)
c. 目標圖形資料之性質(例如,圖形之類型)或圖形資料本身。此為選擇性的,且被用以協助自動調整。
(3)給定以上輸入,框架之一實施方式係履行自動調整以判定該組客製化以供應用至硬體模板來最佳化該輸入圖形演算法;將這些參數映射至架構模板上以產生加速器實例於可合成RTL中;及執行該產生的RTL之功能和性能驗證,相對於從輸入圖形演算法規格所取得之功能和性能軟體模型。
於一實施方式中,上述加速器架構被延伸以支援頂點程式之執行,藉由:(1)使其成為可客製化硬體模板及(2)支援頂點程式所需的功能。根據此模板,設計框架被描述為將使用者供應的頂點程式映射至硬體模板以產生針對該頂點程式而最佳化的可合成RTL(例如,Verilog)實施方式實例。框架亦履行自動驗證及調整以確保所產生的RTL是正確的且最佳化的。針對此框架有多種使用情況。例如,所產生的可合成RTL可被部署於FPGA平台(例如,Xeon-FPGA)中以有效率地執行既定的頂點程式。或者,其可被進一步改良以產生ASIC實施方式。
圖形可被表示為相鄰矩陣,且圖形處理可被公式化為稀疏矩陣操作。圖76a-b顯示將一圖形表示為相鄰矩陣之範例。矩陣中之各非零代表該圖形中的兩節點之間的邊緣。例如,列0行2中之1代表從節點A至C的邊緣。
用以描述對於圖形資料之計算的最受歡迎模型是頂點編程模型。一實施方式支援來自Graphmat軟體框架之頂點編程模型變體,其將頂點程式公式化為一般化的稀疏矩陣向量乘法(GSPMV)。如圖76c中所示,頂點程式係由以下所組成:與圖形中之邊緣/頂點相關的資料類型(edata/vdata)、被傳送橫跨圖形中之頂點的訊息(mdata)、及暫時資料(tdata)(顯示於程式碼之上部分);以及無狀態之使用者定義的計算函數,使用其讀取和更新該圖形資料之預定義的API(如顯示於程式碼之下部分)。
圖76d闡明用以執行頂點程式之範例程式碼。邊緣資料被表示為相鄰矩陣A(如於圖76b中)、頂點資料為y向量、而訊息為稀疏向量x。圖76e顯示GSPMV公式化,其中在SPMV中之乘法()及加法()操作係藉由使用者定義的PROCESS_MSG()及REDUCE()而被一般化。
於此之一觀察是其用以執行頂點程式所需的GSPMV變體係履行稀疏矩陣A(亦即,相鄰矩陣)相對於稀疏向量x(亦即,訊息)之行取向的相乘以產生輸出向量y(亦即,頂點資料)。此操作被稱為col_spMspV(先前針對上述加速器所述者)。
設計框架。框架之一實施方式被顯示於圖77,其包括模板映射組件7711、驗證組件7712及自動調整組件7713。其輸入為使用者指明的頂點程式7701、設計最佳化目標7703(例如,最大性能、最小面積)、及目標硬體設計限制7702(例如,晶片上RAM之最大量、記憶體介面寬度)。當作用以協助自動調整之選擇性輸入,框架亦接受圖形資料性質7704(例如,類型=自然圖形)或樣本圖形資料。
給定這些輸入,框架之模板映射組件7711將輸入頂點程式映射至硬體加速器架構模板,並產生針對執行頂點程式7701而最佳化的加速器實例之RTL實施方式7705。自動調整組件7713係履行自動調整7713以最佳化針對既定設計目標之產生的RTL,而同時滿足硬體設計限制。再者,驗證組件7712自動地驗證所產生的RTL相對於從該些輸入所取得的功能性能模型。驗證測試台7706及調整報告7707係連同該RTL而被產生。
一般化的稀疏矩陣向量乘法(GSPMV)硬體架構模板
GSPMV之架構模板的一實施方式被顯示於圖77,其係根據上述的加速器架構(參見,例如,圖74及相關描述)。圖77中所示之許多組件是可客製化的。於一實施方式中,用以支援頂點程式之執行的架構已被延伸如下。
如圖78中所示,可客製化邏輯區塊被提供於PE內部以支援頂點程式所需的PROCESS_MSG() 1910、REDUCE() 7811、APPLY 7812、及SEND_MSG() 7813。此外,一實施方式提供可客製化晶片上儲存結構及封裝/解封裝邏輯7805,用以支援使用者定義的圖形資料(亦即,vdata, edata, mdata, tdata)。所示之資料管理單元6905包括PE 排程器7401(用以排程PE,如上所述)、輔助緩衝器7801(用以儲存現用行、x資料)、讀取緩衝器7402、記憶體控制器7803(用以控制器存取至系統記憶體)、及寫入緩衝器7403。此外,於圖78所示之實施方式中,舊的和新的vdata及tdata被儲存於本地PE記憶體7421內。各種控制狀態機器可被修改以支援執行頂點程式,遵守由圖76d及76e中之演算法所指明的功能。
各加速器磚片之操作被概述於圖79中。於7901,y向量(vdata)被載入至PE RAM 7421。於7902,x向量及行指針被載入至輔助緩衝器7801。於7903,針對各x向量元件,A行被串流入(edata)且PE執行PROC_MSG() 7810及REDUCE() 7811。於7904,PE執行APPLY() 7812。於7905,PE執行SEND_MSG() 7813,產生訊息,而資料管理單元6905將其寫入為記憶體中之x向量。於7906,資料管理單元6905將PE RAM 7421中所儲存之已更新的y向量(vdata)寫回至記憶體。以上技術係符合圖76d及76e中所示之頂點程式執行演算法。為了相應增加性能,該架構寫入增加一磚片中之PE的數目及/或該設計中之磚片的數目。如此一來,該架構可利用該圖形中之多階的平行性(亦即,涵蓋子圖形(涵蓋相鄰矩陣之區塊)或於各子圖形內)。圖80a中之表概述模板之一實施方式的可客製化參數。亦可能指派涵蓋磚片之非對稱參數以供最佳化(例如,一磚片具有比另一磚片更多的PE)。
自動映射,驗證,及調整
調整。根據輸入,框架之一實施方式係履行自動調整以判定最佳設計參數,以用來將該硬體架構模板客製化以使其針對輸入頂點程式及(選擇性地)圖形資料最佳化。有許多調整考量,其被概述於圖80b之表中。如圖所示,這些包括:資料之局部性、圖形資料大小、圖形計算函數、圖形資料結構、圖形資料存取屬性、圖形資料類型、及圖形資料型態。
模板映射。於此階段,框架係採取由調整階段所判定的模板參數,並藉由「填」入該模板之可客製化部分以產生加速器實例。使用者定義的計算函數(例如,圖76c)可從輸入規格被映射至適當的PE計算區塊,使用現存的高階合成(HLS)工具。這些儲存結構(例如,RAM、緩衝器、快取)及記憶體介面係使用其相應的設計參數而被例示。封裝/解封裝邏輯可自動地被產生自資料類型規格(例如,圖76a)。控制有限狀態機器(FSM)之部分亦根據所提供的設計參數(例如,PE排程方案)而被產生。
驗證。於一實施方式中,由模板映射所產生的加速器架構實例(可合成RTL)被接著自動地驗證。為了執行此操作,框架之一實施方式係取得頂點程式之一功能性模型以被使用為「黃金」參考。測試台被產生以比較此黃金參考之執行與架構實例的RTL實施方式之模擬。框架亦藉由比較RTL模擬相對於分析性能模型及循環準確軟體模擬器來履行性能驗證。其報告運行時間崩潰並確定其影響性能之設計的瓶頸。
對於稀疏資料集之計算 - 其大部分之值為零的向量或矩陣 - 對於漸增數量之商業上重要的應用是很關鍵的,但通常僅達到峰值性能的僅數個百分比(當運行於今日的CPU時)。於科學計算領域中,稀疏矩陣計算曾為數十年來線性解答器之關鍵內核。更近以來,機器學習及圖形分析之爆炸性成長已將稀疏計算移入主流。稀疏矩陣計算為許多機器學習應用之中心並且形成許多圖形演算法之核心。
稀疏矩陣計算傾向於成為記憶體頻寬受限的而非計算受限的,使得難以利用CPU改變來增進其性能。其執行針對矩陣資料元件之少數操作,並經常於再使用任何資料之前疊代於整個矩陣上,使得快取成為無效的。此外,許多稀疏矩陣演算法含有顯著數目之資料相依的收集和散佈,諸如稀疏矩陣向量乘法中所發現的結果[列] += 矩陣[列][i].值 * 向量[矩陣[列][i].指標]操作,其係難以預測及減少預提取器之有效性。
為了實現比傳統微處理器更佳的稀疏矩陣性能,系統必須提供比目前CPU顯著地更高的記憶體頻寬和極為能量效率高的計算架構。增加記憶體頻寬使其得以增進性能,但DRAM存取之高能量/位元成本限制了可用於處理該頻寬之功率的量。若無能量效率高的計算架構,則系統可能發現其本身處於無法處理來自高頻寬記憶體系統之資料而不超過其功率預算的位置中。
一種實施方式包含用於稀疏矩陣計算之加速器,其係使用堆疊DRAM以提供其稀疏矩陣演算法所需要的頻寬,再結合客製化計算架構以用能量效率高的方式來處理該頻寬。
稀疏矩陣概述
許多應用程式產生資料集,其中大部分的值為零。有限元件方法將物件模擬為點之網目,其中各點之狀態為該網目中與其接近的複數點之狀態的函數。數學上,此變為一種被表示為矩陣之方程式的系統,其中各列係描述一點的狀態而該列中之值針對所有不直接影響該列所描述之該點的狀態之所有點均為零。圖形可被表示為相鄰矩陣,其中該矩陣中之各元件{i,j}係提供該圖形中介於頂點i與j之間的邊緣之加權。因為大部分頂點連接至該圖形中之其他頂點的僅一小部分,所以該相鄰矩陣中之大部分元件為零。於機器學習中,模型通常係使用其由許多樣本所組成之資料集而被訓練,該些樣本之各者含有一組特徵(系統或物件之狀態的觀察)及針對該組特徵之該模型的所欲輸出。針對大部分樣本極為常見的是僅含有可能特徵之一小子集,例如當該些特徵代表其可能存在於一文件中的不同字元時,再次地產生其中大部分值為零的資料集。
其中大部分值為零的資料集被描述為「稀疏」,而針對稀疏資料集極為常見的是極端稀疏,具有少於其元件之1%的非零值。這些資料集常被表示為矩陣,使用其僅指明該矩陣中之非零元件的值之資料結構。雖然如此增加了用以表示各非零元件所需的空間量,但因為其必須指明元件之位置及其值兩者,所以假如該矩陣夠稀疏的話則整體空間(記憶體)節省可為顯著的。例如,稀疏矩陣的最直接表示之一為座標列(COO)表示,其中各非零係由一{列指標、行指標、值}元組所指明。雖然如此會將各非零值所需的儲存量三倍化,但假如一矩陣中僅有其元件的1%具有非零值,則COO表示將佔據其緊密表示(一種表示該矩陣中之各元件的值之方式)所將佔據的空間之僅3%。
圖81闡明最常見的稀疏矩陣格式之一,壓縮列儲存(CRS,有時簡稱為CSR)格式。於CRS格式中,矩陣8100係由三個陣列所描述:值陣列8101,其含有非零元件之值;指標陣列8102,其指明該矩陣之其列內的各非零元件之位置;及列開始陣列8103,其指明該矩陣之各列於指標和值之列表中的何處開始。因此,範例矩陣之第二列的第一非零元件可被發現於該些指標和值陣列中之位置2上,且由元組{0, 7}所描述,指示其該元件發生於該列內之位置0且具有值7。其他常用的稀疏矩陣格式包括壓縮稀疏行(CSC)(其為CRS之行為主的雙生格式)、及ELLPACK,其係表示該矩陣之各列為非零值及其指標之固定寬度列表,填入以明確的零(當一列具有比該矩陣中之最長列更少的非零元件時)。
對於稀疏矩陣之計算具有如其緊密矩陣對應物之相同結構,但稀疏資料之本質傾向於使其比其緊密矩陣對應物更為頻寬密集的。例如,矩陣-矩陣乘法之稀疏和緊密變體兩者係藉由計算Ci,j = Ai, ・ B,j(針對所有i, j)以求出C = A ・ B。於緊密矩陣-矩陣計算中,此導致大量的資料再使用,因為A之各元件係參與N乘-加操作(假設N x N矩陣),B之各元件亦如此。只要矩陣-矩陣乘法被阻擋其快取局部性,此再使用造成該計算具有低的位元組/操作比且為計算受限的。然而,於稀疏變體中,A之各元件僅參與如B之相應列中有的零值一般多的乘-加操作,而B之各元件僅參與如A之相應行中有的零值一般多的乘-加操作。隨著矩陣之稀疏度增加,其位元組/操作比亦增加,使得許多稀疏矩陣-矩陣計算之性能由記憶體頻寬所限制,儘管其緊密矩陣-矩陣乘法為正準計算邊界的計算之一的事實。
四個操作組成今日的應用程式中所見之稀疏矩陣計算的大部分:稀疏矩陣-緊密向量乘法(SpMV)、稀疏矩陣-稀疏向量乘法、稀疏矩陣-稀疏矩陣乘法、及放寬/緩和操作,諸如高性能共軛梯度基準之實施方式中所使用的高斯-賽代爾(Gauss-Seidel)緩和。這些操作共用其使得稀疏矩陣加速器成為實際可行的兩個特性。第一個,其係由向量內積所控制,其使得有可能實施可實施所有四個重要計算的簡單硬體。例如,矩陣-向量乘法係藉由取得該矩陣中之各列與該向量的內積來履行,而矩陣-矩陣乘法係取得一矩陣之各列與另一矩陣之各行的內積。第二個,應用程式通常履行多數計算於相同矩陣上,諸如相同矩陣的數千次乘以不同向量,其一支援向量機器演算法係利用訓練模型來履行。相同重複之重複使用使其得以轉移矩陣至/自加速器(於程式執行期間)、及/或再格式化該矩陣以一種簡化該硬體之工作的方式,因為資料轉移/轉變之成本可被減緩,涵蓋各矩陣上之許多操作。
稀疏矩陣計算通常達成其所運行之系統的峰值性能之僅少許百分比。為了展示為何此情況發生,圖82顯示一種使用CRS資料格式之稀疏矩陣-緊密向量乘法的實施方式中所涉及的步驟8201-8204。首先,於8201,代表矩陣之列的資料結構被讀出記憶體,其通常涉及一組序列讀取(其為易於預測及預提取的)。其次,於8202,矩陣列中之非零元件的指數被用以收集該向量之相應元件,其需要數個資料相依的、難以預測的記憶體存取(收集操作)。此外,這些記憶體存取經常僅接觸各參考快取線中之一或二字元,導致顯著的浪費頻寬(當該向量不配適於該快取中時)。
第三,於8203,處理器係計算該矩陣列之非零元件與該向量之相應元件的內積。最後,於8204,內積之結果被寫入結果向量,其亦被依序地存取,而程式前進至該矩陣之下一列。注意:此為該計算之觀念/演算法視圖,而該程式所執行之操作的確實序列將取決於處理器之ISA及向量寬度。
此範例闡明稀疏矩陣計算之數個重要特性。假設32位元的資料類型且該矩陣與該向量均不配適於該快取中,則該輸出列之第一元件的計算需要從DRAM讀取36位元組,但僅有五個計算指令(三個乘及兩個加),針對7.2:1之位元組/操作比。
然而,記憶體頻寬並不是針對高性能稀疏矩陣計算之唯一挑戰。如圖82顯示,針對SpMV中之向量的存取為資料相依的且難以預測的,暴露出針對該應用之向量存取的潛時。假如向量不配適於該快取中,則SpMV性能變為對於DRAM潛時以及頻寬敏感的,除非該處理器提供足夠的平行性以充滿DRAM頻寬(即使當許多執行緒被拖延以等待資料)。
因此,用於稀疏矩陣計算之架構必須提供數件事以成為有效的。其必須提供高記憶體頻寬以滿足稀疏計算之位元組/操作需求。其亦必須支援來自其可能不配適於該快取中之大向量的高頻寬收集。最後,雖然履行足夠的算術操作/秒以跟上DRAM頻寬並不是其本身的挑戰,但該架構必須以一種能量有效率的方式來履行那些操作以及其所需要的所有記憶體存取,以維持於系統功率預算之內。
一種實施方式包含加速器,其被設計以提供針對高稀疏矩陣性能之三個特徵:高記憶體頻寬、來自大向量之高頻寬收集、及能量有效率的計算。如圖83所示,加速器之一實施方式包括加速器邏輯晶粒8305及DRAM晶粒的更多堆疊8301-8304之一。堆疊的DRAM(其被更詳細地描述於下)提供高記憶體頻寬於低能量/位元。例如,堆疊的DRAM被預期提供256-512 GB/秒於2.5 pJ/位元,而LPDDR4 DIMMs僅被預期提供68 Gb/秒且將具有12 pJ/位元之能量成本。
於加速器堆疊之底部的加速器邏輯晶片8305係針對稀疏矩陣計算而被客製化,且能夠消耗由DRAM堆疊8301-8304所提供的頻寬而同時僅延伸2-4瓦特的功率,具有正比於該堆疊之頻寬的能量消耗。保守地,假設273 GB/秒之堆疊頻寬(WIO3堆疊之預期頻寬)於本申請案之剩餘部分。基於較高頻寬堆疊之設計將結合更多平行性以消耗記憶體頻寬。
圖84闡明加速器邏輯晶片之一實施方式,其係定向自一通過DRAM晶粒8301-8304之堆疊的頂部觀點。朝向圖形之中心的堆疊DRAM通道區塊8405代表穿越矽通孔(其將邏輯晶片8305連接至DRAM 8301-8304),而記憶體控制器區塊7410含有其產生用於DRAM通道之控制信號的邏輯。雖然八個DRAM通道8405倍顯示於圖形中,但實施於加速器晶片上之通道的實際數目將根據所使用的堆疊DRAM而改變。已開發的大部分堆疊DRAM技術係提供四個或八個通道。
內積引擎(DPE)8420為該架構之計算元件。於圖84A-B所示之特定實施方式中,八個DPE之各組係與向量快取8415相關。圖85提供DPE之高階概圖,其含有兩個緩衝器8505-8506、兩個64位元乘-加ALU 8510、及控制邏輯8500。於計算期間,晶片控制單元8500將處理中的大塊資料串流入緩衝器記憶體8505-8506。一旦各緩衝器滿了,則DPE之控制邏輯係排序通過該些緩衝器,計算其所含有之向量的內積並將其結果寫出至DPE之結果鎖存器8512,其係以菊鍊而連接與其他DPE之結果鎖存器來將計算之結果寫回至堆疊DRAM 8301-8304。
於一實施方式中,加速器邏輯晶片係操作於約1GHz及0.65V以將功率消耗減至最小(雖然特定的操作頻率及電壓可針對不同應用而被修改)。基於14nm設計研究之分析顯示其32-64 KB的緩衝器滿足該電壓下之此頻率規格,雖然可能需要強烈的ECC以防止軟錯誤。乘-加單元可被操作於基本時脈速率的一半,以滿足具有0.65V供應電壓及淺管線之時序。具有兩個ALU係提供每DPE之一雙精確度乘-加/循環的通量。
於273 GB/秒及1.066 MHz之時脈速率,DRAM堆疊8301-8304係提供每邏輯晶片時脈循環之資料的256位元組。假設其陣列指數及值為至少32位元量,則此轉譯為每循環32稀疏矩陣元件(指標的4位元組+值的4位元組=8位元組/元件),需要其晶片履行每循環32乘-加以保持。(此係針對矩陣-向量乘法並假設高命中率於向量快取中,以致堆疊DRAM頻寬之100%被用以提取該矩陣。)  圖84中所示之64 DPE係提供2-4x所需的計算通量,容許該晶片以峰值堆疊DRAM頻寬來處理資料,即使ALU 8510不被使用於100%的時間。
於一實施方式中,向量快取8415係快取矩陣-向量乘法中之向量的元件。如此顯著地增加以下所描述之矩陣阻擋方案的效率。於一實施方式中,各向量快取區塊含有32-64KB的快取,針對八通道架構中之256-512KB的總容量。
晶片控制單元8401係管理計算之流程並處理與加速器中之其他堆疊以及與系統中之其他插口的通訊。為了減少複雜度及功率消耗,內積引擎永不請求來自記憶體之資料。取而代之,晶片控制單元8401管理記憶體系統,起始其將資料之適當區塊推至DPE之各者的轉移。
於一實施方式中,多堆疊加速器中之堆疊係經由KTI鏈結8430之網路以彼此通訊,KTI鏈結8430係使用圖中所示之相鄰連接8431而被實施。該晶片亦提供三個額外KTI鏈結,其被用以與多插口系統中之其他插口通訊。於多堆疊加速器中,該堆疊的封裝外KTI鏈結8430之僅一者將為現用的。其瞄準其他堆疊上之記憶體的KTI異動將透過封裝上KTI網路而被發送至適當的堆疊。
用以實施稀疏矩陣-緊密向量及稀疏矩陣-稀疏向量乘法於該加速器之一實施方式上的技術和硬體被描述於文中。此亦可被延伸以支援矩陣-矩陣乘法、放寬操作、及其他功能以產生一支援稀疏矩陣操作之加速器。
雖然稀疏-稀疏及稀疏-緊密矩陣-向量乘法係執行相同的基本演算法(取得該矩陣中之各列與該向量的內積),但是有關此演算法如何被實施(當該向量為稀疏的時相較於當其為緊密的時)則有顯著的差異,其被概述於下表中。
稀疏 - 稀疏 SpMV 稀疏 - 緊密 SpMV
向量之大小 通常為小 經常為大(矩陣大小之5-10%)
向量元件之位置 不可預測 由指標所判定
每矩陣元件之操作的數目 不可預測 固定
於稀疏矩陣-緊密向量乘法中,向量之大小被固定並等於該矩陣中之行的數目。因為科學計算中所發現之許多矩陣平均約每列10個非零元件,所以針對稀疏矩陣-緊密向量乘法中之向量佔據如矩陣本身一般多的空間之5-10%並非不常見的。另一方面,稀疏向量經常是很短的,含有與該矩陣之該些列類似數目的非零值,其使得該些稀疏向量更易於快取於晶片上記憶體中。
於稀疏矩陣-緊密向量乘法中,該向量中之各元件的位置係由其指標所判定,使其可以收集其相應於該矩陣之一區中的非零值之向量元件,並可以預先計算其需被收集以用於其該矩陣所將被乘以之任何緊密向量的該組向量元件。然而,稀疏向量中之各元件的位置是無法預測的且係取決於該向量中之非零元件的分佈。此使其必須檢查該稀疏向量之非零元件以及該矩陣之非零元件以判定該矩陣中之哪些非零係相應於該向量中之非零值。
有幫助的是比較該矩陣與該向量中之非零元件的指標,因為用以計算稀疏矩陣-稀疏向量內積所需的指令/操作之數目是無法預測的且係取決於該矩陣及向量之結構。例如,考量取得一具有單一非零元件之矩陣列與一具有許多非零元件之向量的內積。假如該列之非零具有比該向量中任何非零更低的指數,則內積僅需要一指數比較。假如該列之非零具有比該向量中之任何非零更高的指數,則計算該內積需要比較該列之非零的指數與該向量中的每一指數。此係假設涵蓋該向量之線性搜尋,其為常見的慣例。其他搜尋(諸如二元搜尋)於最差的情況下將是較快的,但於常見的情況下(其中該列與該向量中之非零係重疊)將加入顯著的負擔。反之,用以履行稀疏矩陣-緊密向量乘法所需之操作的數目是固定的且係由該矩陣中之非零值的數目所判定,使其易於預測該計算所需之時間量。
由於這些差異,加速器之一實施方式係使用相同的高階演算法以實施稀疏矩陣-緊密向量及稀疏矩陣-稀疏向量乘法,其差異在於該向量如何被分佈跨越內積引擎以及該內積如何被計算。因為該加速器想要大的稀疏矩陣計算,所以無法被假設其該矩陣或該向量之任一者將配適於晶片上記憶體中。取而代之,一實施方式係使用圖86中所描繪之阻擋方案。
特別地,於此實施方式中,加速器將把矩陣劃分為固定大小區塊的資料8601-8602,其被形成以配適於該晶片上記憶體中,且將該區塊中之列乘以該向量以產生輸出向量之一大塊,在前進至下一區塊之前。此方式產生兩個挑戰。第一,稀疏矩陣之各列中的非零之數目係寬廣地變化於資料集之間,從低如一至高如46,000(於所研究的資料集中)。如此使得欲指派一列或甚至固定數目的列給各內積引擎成為不實際的。因此,一實施方式係指派固定大小塊的矩陣資料給各內積引擎並處理其中某一塊含有多數矩陣列的情況以及其中單一列被分裂跨越多數塊的情況。
第二個挑戰在於其從該矩陣之各區塊的堆疊DRAM提取完整向量係具有浪費大量頻寬的潛在可能(亦即,提取其沒有相應非零於該區塊中之向量元件)。此針對稀疏矩陣-緊密向量乘法是特別有問題的,其中該向量可為該稀疏矩陣之大小的顯著部分。為了處理此問題,一實施方式係建構針對該矩陣中之各區塊8601-8602的提取列表8611-8612,其係列出相應於該區塊中之非零值的該組向量8610元件,並僅在當處理該區塊時提取那些值。雖然該提取列表亦須被提取自堆疊DRAM,但已判定其針對大部分區塊之該提取列表將是該區塊之大小的小部分。諸如運行長度編碼等技術亦可被用以減少該提取列表之大小。
因此,加速器上之矩陣-向量乘法將涉及以下序列的操作:
1.  提取來自DRAM堆疊的矩陣資料之一區塊並將其分佈涵蓋內積引擎;
2.  根據該矩陣資料中之非零元件以產生提取列表;
3.  提取來自堆疊DRAM之該提取列表中的各向量元件並將其分佈至內積引擎
4.  計算該區塊中之列與該向量的內積並將結果寫出至堆疊DRAM;及
5.  與該計算平行地,提取矩陣資料之下一區塊並重複直到整個矩陣已被處理。
當加速器含有多數堆疊時,該矩陣之「分區」可被靜態地指派給不同的堆疊且接著阻擋演算法可被平行地執行於各分區上。此阻擋及廣播方案具有如下優點:所有記憶體參考係起始自中央控制單元,其大大地簡化晶片上網路之設計,因為該網路無須發送無法預測的請求並於內積引擎與記憶體控制器之間回覆。其亦藉由僅發送針對其既定區塊所需之各向量元件的一記憶體請求來節省能量,相較於讓個別內積引擎發送針對其用以履行該計算之其部分所需的向量元件之記憶體請求。最後,提取來自一有組織列表的指標之向量元件使其易於排程其那些提取所需之記憶體請求,以一種將堆疊DRAM中之頁命中(及因而頻寬使用)最大化的方式。
實施稀疏矩陣-緊密向量乘法於文中所述之加速器實施方式上的一項挑戰是將其被串流自記憶體之向量元件匹配至各內積引擎之緩衝器中的矩陣元件之指標。於一實施方式中,向量之256位元組(32-64元件)係到達該內積引擎於每循環,且各向量元件可相應於該內積引擎之矩陣緩衝器中的任何非零,因為矩陣資料之固定大小區塊被提取入各內積引擎之矩陣緩衝器。
於各循環履行如此多比較將在面積和功率上是過度地昂貴的。取而代之,一種實施方式係利用以下事實:許多稀疏矩陣應用係重複地將相同矩陣乘以相同或不同向量並預計算其各內積引擎欲處理該矩陣之其相當大部分所將需要的提取列表之元件,使用圖87中所示之格式。於基線CRS格式中,矩陣係由以下所描述:指標之陣列8702,其係定義於其列內之各非零值的位置、一含有各非零之值的陣列8703、及一指示於該些指標及值陣列中各列於何處開始的陣列8701。此外,一實施方式係加入區塊描述符之陣列8705,其係識別向量資料之哪些叢發為各內積引擎所需擷取以履行整體計算之其部分。
如圖87中所示,各區塊描述符係由八個16位元值及叢發描述符之列表所組成。第一個16位元值係告知硬體有關許多叢發描述符如何位於該區塊描述符中,而剩餘的七個係識別其針對除了第一個以外之所有堆疊DRAM資料通道的叢發描述符列表內之開始點。這些值之數目將根據該堆疊DRAM所提供的資料通道之數目而改變。各叢發描述符含有:24位元叢發計數,其係告知該硬體有關資料之哪個叢發為其所需注意的、及「所需字元」位元向量,其係識別其含有該內積引擎所需之值的叢發內之字元。
一實施方式中所包括之其他資料結構為矩陣緩衝器指標(MBI)之陣列8704,每非零一MBI於該矩陣中。各MBI係提供位置,相應於該非零之緊密向量元件將在該位置上被儲存於相關內積引擎之向量值緩衝器中(參見,例如,圖89)。當履行稀疏矩陣-緊密向量乘法時,矩陣緩衝器指標(而非原始矩陣指標)被載入內積引擎之矩陣指標緩衝器8704,並作用為用以查找相應向量值之位址(當計算內積時)。
圖88闡明此如何針對其配適於單一內積引擎之緩衝器內的二列矩陣而工作,於一具有僅一堆疊DRAM資料通道及四字元資料叢發之系統上。包括列開始值8801、矩陣指標8802及矩陣值8803之原始CRS表示被顯示於圖形之左邊上。因為該兩列具有非零元件於行{2, 5, 6}及{2, 4, 5}中,所以該向量之元件2、4、5、及6是用以計算內積所需要的。區塊描述符係反應此情況,指示其第一四字元叢發之字元2(該向量之元件2)及第二四字元叢發之字元0、1、和2(該向量之元件4-6)是需要的。因為該向量之元件2為該內積引擎所需的向量之第一字元,所以其將進入該向量值緩衝器中之位置0。該向量之元件4將進入位置1,依此類推。
矩陣緩衝器指標陣列資料8804將該位置保持於向量值緩衝器內,其中硬體將找出其相應於該矩陣中之非零的值。因為矩陣指標陣列中之第一項目具有值「2」,所以矩陣緩衝器指標陣列得到值「0」,相應於其中該向量之元件2所將被儲存於該向量值緩衝器中的位置。類似地,每當「4」出現於矩陣指標陣列中,則「1」將出現於矩陣緩衝器指標中,矩陣指標陣列中之各「5」將具有相應的「2」於矩陣緩衝器指標中,以及矩陣指標陣列中之各「6」將相應於矩陣緩衝器指標中之「3」。
本發明之一實施方式係履行欲支援快速收集自緊密向量(當矩陣被載入至加速器上時)所需的預計算,利用以下事實:多堆疊加速器之總頻寬甚大於其用以從CPU轉移資料至加速器的KTI鏈結之頻寬。此預計算資訊增加其用以保持矩陣高達75%所需的記憶體之量,根據相同矩陣指標之多數副本有多常發生於其被映射至內積引擎上之該矩陣的相當大部分內。然而,因為16位元矩陣緩衝器指標陣列被提取而非矩陣指標陣列(當矩陣-向量乘法被履行時),所以其被提取出堆疊DRAM之資料量將經常少於原始CRS表示中,特別針對其使用64位元指標之矩陣。
圖89闡明一種使用此格式之內積引擎中的硬體之一實施方式。為了履行矩陣-向量乘法,其組成區塊之該矩陣的相當大部分被複製入矩陣指標緩衝器8903及矩陣值緩衝器8905(複製矩陣緩衝器指標而非原始矩陣指標),且相關的區塊描述符被複製入區塊描述符緩衝器8902。接著,提取列表被用以從緊密向量載入所需的元件並將其廣播至內積引擎。各內積引擎係計算其經過於各資料通道上之向量資料的叢發之數目。當既定資料通道上之計數匹配叢發描述符中所指定的值時,則匹配邏輯8920便擷取該些指定字元並將該些字元儲存於其向量值緩衝器8904中。
圖90闡明其進行此擷取之匹配邏輯8920單元的內容。鎖存器9005係擷取資料通道之佈線上的值,當計數器匹配叢發描述符中之值時。移位器9006提取來自叢發9001之所需字元9002並將其發送至線緩衝器9007中之正確位置,線緩衝器9007之大小係匹配向量值緩衝器中之列。載入信號被產生在當叢發計數9001等於內部計數器9004時。當線緩衝器填滿時,其被儲存於向量值緩衝器9004中(透過多工器9008)。以此方式將來自多數叢發之字元組合為線係減少了其向量值緩衝器所需支援的寫入/循環之數目,減小其大小。
一旦該向量之所有所需元件已被擷取於向量值緩衝器中,該內積引擎便使用ALU 8910以計算所需的內積。控制邏輯8901依序地經歷矩陣指標緩衝器8903及矩陣值緩衝器8904,每循環一元件。矩陣指標緩衝器8903之輸出被使用為下一循環上之向量值緩衝器8904的讀取位址,而矩陣值緩衝器8904之輸出被鎖存以致其在如來自向量值緩衝器8904之相應值的相同時刻到達ALU 8910。例如,使用來自圖88之矩陣,於內積計算之第一循環上,硬體將讀取來自矩陣指標緩衝器8903之矩陣緩衝器指標「0」連同來自矩陣值緩衝器8905之值「13」。於第二循環上,來自矩陣指標緩衝器8903之值「0」係作用為向量值緩衝器8904之位址,提取向量元件「2」之值,其接著於循環3上被乘以「13」。
於列開始位元向量8901中之值係告知硬體何時該矩陣之列結束及一新的列開始。當硬體到達該列之末端時,其係將針對該列之累積的內積置於輸出鎖存器8911中並開始累積針對下一列之內積。各內積引擎之內積鎖存器被連接以一菊鍊,其係組合輸出向量以供寫回。
於稀疏矩陣-稀疏向量乘法中,該向量傾向於佔據比於稀疏矩陣-緊密向量乘法中更少的記憶體,但是因為其為稀疏的,所以不可能直接地提取相應於既定指標之向量元件。取而代之,該向量必須被搜尋,使得欲僅發送其各內積引擎所需的元件至內積引擎是不實際的,並使得欲計算其指派給各內積引擎之矩陣資料的內積所需之時間量為無法預測的。由於此原因,用於稀疏矩陣-稀疏向量乘法之提取列表僅指明該矩陣區塊中之最低和最高非零元件的指標,而介於那些點之間的向量之所有非零元件必須被廣播至內積引擎。
圖91顯示支援稀疏矩陣-稀疏向量乘法之內積引擎設計的細節。為了處理矩陣資料之區塊,該矩陣之內積引擎的相當大部分之指標(用於稀疏-緊密乘法之矩陣緩衝器指標)及值被寫入矩陣指標及值緩衝器,如其用以處理該區塊所需之該向量的區之指標及值。內積引擎控制邏輯9140接著排序指標暫存器9102-9103,其係輸出四個指標之區塊至4x4比較器9120。4x4比較器9120係比較來自向量9102之指標的各者與來自矩陣9103之指標的各者,並輸出任何匹配之緩衝器位址入匹配的指標佇列9130。匹配的指標佇列9130之輸出係驅動矩陣值緩衝器9105及向量值緩衝器9104之讀取位址輸入,其係輸出相應於該些匹配之值入乘-加ALU 9110。此硬體容許內積引擎消耗每循環至少四個以及多如八個指標(只要匹配的指標佇列9130具有空間),減少了當指標匹配稀少時用以處理資料之區塊所需的時間量。
如同稀疏矩陣-緊密向量內積引擎,列開始之位元向量9101係識別其開始該矩陣之新列的矩陣緩衝器9102-9103中之項目。當遭遇此一項目時,控制邏輯9140便重設至向量指標緩衝器9102之開端並開始檢查來自其最低值之向量指標、將其與矩陣指標緩衝器9103之輸出進行比較。類似地,假如該向量之末端到達,則控制邏輯9140前進至矩陣指標緩衝器9103中之新列的開端並重設至向量指標緩衝器9102之開端。「完成」輸出係通知晶片控制單元有關內積引擎何時已完成處理資料之區塊或該向量之區並準備好繼續下一個。為了簡化加速器之一實施方式,控制邏輯9140將不繼續至下一區塊/區直到所有內積引擎已完成處理。
於許多情況下,向量緩衝器將夠大以保持其用以處理該區塊所需的所有稀疏向量。於一實施方式中,針對1,024或2,048向量元件之緩衝器空間被提供,根據32或是64位元值被使用。
當該向量之所需元件不配適於向量暫存器中時,多通方式可被使用。控制邏輯9140將廣播該向量之全緩衝器入各內積引擎,其將開始疊代遍及其矩陣緩衝器中之列。當內積引擎到達向量暫存器之末端(在到達該列之末端前)時,其將設定一位元於目前列位置位元向量9111中以指示其應於何處重新開始處理該列(當該向量之下一區到達時);將儲存其已累積的部分內積在相應於該列之開始的矩陣值緩衝器9105之位置中(除非該列之開始具有比其到目前為止已被處理之任何向量指標更高的指標值);以及將前進至下一列。在該矩陣緩衝器中之所有列已被處理後,內積引擎將確立其完成信號以請求該向量之下一區,且將重複該程序直到整個向量已被讀取。
圖92闡明使用特定值之範例。於該計算之開始時,該矩陣之四元件相當大部分已被寫入矩陣緩衝器9103、9105,而該向量之四元件區已被寫入向量緩衝器9102、9104。列開始9101及目前列位置位元向量9106兩者具有值「1010」,指示其該矩陣之內積引擎的相當大部分含有兩列,其一者開始於該矩陣緩衝器中之第一元件上,而其一者開始於第三元件上。
當第一區被處理時,該相當大部分中之第一列看見指標匹配於指標3上、計算該矩陣與向量緩衝器之相應元件的乘積(4 × 1 = 4)及將該值寫入其相應於該列之開始的矩陣值緩衝器9105之位置。第二列看見一指標匹配於指標1上、計算該向量與矩陣之相應元件的乘積、及將該結果(6)寫入矩陣值緩衝器9105在相應於其開始之位置上。目前列位置位元向量之狀態改變至「0101」,指示其各列之第一元件已被處理且其計算應以第二元件重新開始。內積引擎接著確立其完成線以告知其準備好用於該向量之另一區。
當內積引擎處理該向量之第二區時,其看見列1具有指標匹配於指標4上、計算該矩陣與向量之相應值的乘積(5 × 2 = 10)、將該值加至其被儲存之部分內積(在該第一向量區被處理之後)、及輸出該結果(14)。第二列找到匹配於指標7,並輸出該結果38,如圖中所示。以此方式儲存該計算之部分內積及狀態係避免了其不可能匹配該向量之後續區中的指標之矩陣的冗餘工作處理元件(因為該向量係以下降順序之指標被分類),而無須針對部分乘積之顯著的額外儲存量。
圖93顯示上述稀疏-緊密及稀疏-稀疏內積引擎如何被結合以產生一種可處置兩類型的計算之內積引擎。給定兩種設計之間的類似性,唯一需要的改變是例示稀疏-緊密內積引擎之匹配邏輯9311和稀疏-稀疏內積引擎之比較器9320兩者以及匹配的指標佇列9330、連同一組多工器9350(其係判定哪些模組驅動該讀取位址並寫入緩衝器9104-9105之資料輸入)以及多工器9351(其係選擇是矩陣值緩衝器之輸出或者是矩陣值緩衝器之鎖存輸出被傳送至乘-加ALU 9110)。於一實施方式中,這些多工器係由控制單元9140中之組態位元所控制,該組態位元被設定於矩陣-向量乘法之開始時且在該操作全程保持於該相同組態。
單一加速器堆疊將產生相當於伺服器CPU之性能於稀疏矩陣操作上,使其成為一種用於智慧型手機、輸入板、及其他行動裝置之吸引人的加速器。例如,有數種提議針對機器學習應用,其係訓練一或更多伺服器上之模型並接著將這些模型部署於行動裝置上以處理進來的資料串。因為模型傾向於甚小於其用來訓練它們的資料集,所以單一加速器堆疊之有限容量比較不會是這些應用中之限制,而加速器之性能及功率效率將容許行動裝置處理比將在其主CPU上可實行者更為複雜得多的模型。用於非行動裝置系統之加速器將結合多數堆疊以產生極高的頻寬及性能。
多數堆疊實施方式之兩個實施方式被顯示於圖94a及94b。這兩個實施方式均將數個加速器堆疊集成於一與當代伺服器CPU管腳相容的封裝上。圖94a闡明具有12個加速器堆疊9401-9412之插口替換實施方式而圖94b闡明具有處理器/核心集9430(例如,低核心數Xeon)及8個堆疊9421-9424之多晶片封裝(MCP)實施方式。圖94a中之12個加速器堆疊被置於一陣列中,該陣列係配適於目前封裝中所使用之39mm × 39mm散熱器底下;而圖94b中之實施方式係將八個堆疊及處理器/核心集結合於相同覆蓋區內。於一實施方式中,用於該些堆疊之實體尺寸為8GB WIO3堆疊之尺寸。其他DRAM技術可具有不同的尺寸,其可改變配適於封裝上之堆疊的數目。
這兩個實施方式均提供介於CPU與加速器之間的低潛時記憶體為基的通訊(經由KTI鏈結)。針對Xeon實施方式之插口替換設計係替換多插口系統中之一或更多CPU,並提供96 GB之容量及3.2 TB/s的堆疊DRAM頻寬。預期的功率消耗為90W,確實落入Xeon插口之功率預算內。MCP方式係提供64GB的容量及2.2 TB/s的頻寬而同時消耗加速器中之60W的功率。如此留下90W給CPU,假設每插口功率預算為150W,其足以支援中程Xeon CPU。假如詳細的封裝設計容許更多空間給該封裝中之邏輯,則可使用額外的堆疊或更強力的CPU,雖然此將需要機制,諸如針對Xeon + FPGA併合部分而研究的核心暫止技術,用以保持總功率消耗於插口的功率預算內。
這兩種設計均可被實施而無須矽插入器或其他複雜的集成技術。用於目前封裝之有機基底容許晶粒周界之每cm約300個信號,足以支援堆疊間KTI網路及封裝外KTI鏈結。堆疊DRAM設計通常可支援其消耗˜10W的功率(在冷卻變成問題之前)之邏輯晶片,其係明顯超過針對一堆疊(其提供256GB/秒的頻寬)之邏輯晶粒功率的2W之估計。最後,多晶片封裝需要介於晶片(用於佈線)間之1-2mm的空間,其係符合目前的設計。
實施方式亦可被實施於PCIe卡上及/或使用DDR4-T為基的加速器。假設針對PCIe卡之300W功率限制係容許該卡支援針對320GB之總容量及11 TB/秒之頻寬的40個加速器堆疊。然而,PCIe通道之長潛時及有限的頻寬將PCIe為基的加速器限制於其僅需要與CPU之不頻繁互動的大問題。
另外,加速器堆疊可被用以實施DDR-T DIMM為基的加速器9501-9516,如圖95中所示。DDR-T為一種設計成與DDR4插口及主機板相容的記憶體介面。使用如DDR4之相容的管腳輸出及連接器格式,DDR-T係提供異動為基的介面9500,其容許具有不同時序特性之記憶體裝置的使用。於此實施方式中,加速器堆疊9501-9516係作用為簡單記憶體,當未被用以履行計算時。
DDR-T DIMM提供足夠的空間給16個加速器堆疊、或32個(假如該卡之兩側均使用的話),假設126-256GB之記憶體容量及4-8TB/秒之總頻寬。然而,此一系統將消耗120-240瓦特的功率,甚高於由DDR4-DIMM所消耗的˜10W。此將需要主動冷卻,其將難以配適入其針對主機板上之各DIMM所配置的有限空間內。再者,DDR-T為基的加速器可能對於具有如下特徵的應用是有吸引力的:使用者不願意為了加速而放棄任何CPU性能且願意付出客製化主機板設計(其包括介於加速器DIMM之間的足夠空間以用於風扇或其他冷卻系統)之成本。
於一實施方式中,多堆疊加速器中之堆疊將是分離的、不同的KTI節點,且將由系統軟體當作分離裝置來管理。系統韌體將根據所存在的加速器堆疊之數目而在開機時刻靜態地判定多堆疊加速器內之選路表。
於一實施方式中,對於加速器之低階介面將使用加速器抽象化層(AAL)軟體而被實施,由於其針對插口為基的加速器之適當性。加速器可實施快取代理,如由核心快取介面規格(CCI)所述者,其係將堆疊DRAM視為用於其不得由主機系統所存取的加速器之私人(非同調)記憶體(亦即,快取代理+私人快取記憶體組態,諸如CA+PCM)。CCI規格係委託一分離的組態/狀態暫存器(CSR)位址空間(針對其由驅動程式所使用之各加速器)以控制該加速器。依據該規格,各加速器將經由裝置狀態記憶體(DSM)、固定記憶體區以將其狀態傳遞至該主機,該固定記憶體區被映射至其被用以指示加速器之狀態的主機記憶體。因此,於12堆疊系統中,將有12個不同的DSM區,其係由單一統一的驅動程式代理所管理。這些機制可被用以產生針對各堆疊之命令緩衝器。命令緩衝器為一映射至系統記憶體之固定記憶體,其被實施為由AAL驅動程式所管理的循環佇列。驅動程式將命令寫入各堆疊的命令緩衝器,而各堆疊係消耗來自其專屬命令緩衝器之項目。命令產生及消耗將因此被解耦於此實施方式中。
當作一範例,考量一種由一連接至主機CPU之單一加速器堆疊所組成的系統。使用者寫入碼以履行下列計算:wn+1 = wn - αAwn,其中A為矩陣而wx為向量。軟體框架及AAL驅動程式將此碼分解為命令之以下序列:
TRANSMIT(傳輸) - 將分割(wn+1, wn, α, A)之序列載入私人快取記憶體
MULTIPLY(相乘) - 乘以分割之序列(tmp = wn ∗ α ∗ A)
SUBTRACT(相減) - 減去分割之序列(wn+1 = wn - tmp)
RECEIVE(接收) - 儲存分割之序列至其含有結果(wn+1)之主機記憶體
這些命令係操作於「分割」上,其為位於主機或私人快取記憶體中之資料的粗粒(約16MB-512MB)單元。分割係為了輕易地映射至資料之區塊,其為MapReduce or Spark分散式計算系統所使用以促進分散式計算之加速(使用加速器)。AAL驅動程式係負責產生分割至主機記憶體區或加速器堆疊之靜態一對一映射。加速器堆疊各單獨地將其被指派的分割映射至其私人快取記憶體(PCM)位址空間。分割係由分割指標(其為獨特識別符)所描述,加上(針對位於主機記憶體中之分割)相應的記憶體區及資料格式。位於PCM中之分割係由中央控制單元所管理,其係判定針對該分割之PCM位址。
於一實施方式中,為了初始化加速器之PCM,主機係指引加速器從主機記憶體載入資料。傳輸操作致使加速器讀取主機記憶體並將讀取的資料儲存入加速器的PCM。待傳輸資料係由{分割指標,主機記憶體區,資料格式}元組之序列所描述。為了避免藉由主機驅動程式之資料排列的負擔,加速器可實施系統協定2(SPL2)共用虛擬記憶體(SVM)。
各元組中之資料格式係描述記憶體中之分割的佈局。加速器所將支援之格式的範例包括壓縮稀疏列(CSR)及多維緊密陣列。針對以上之範例,A可為CSR格式而wn可為陣列格式。命令規格包括必要資訊及主機記憶體位址,用以指引加速器將所有由傳輸操作所提及的分割均載入PCM。
各操作可參考具有分割之序列的形式之少數運算元。例如,相乘操作致使加速器讀取堆疊DRAM並履行矩陣-向量乘法。其因此具有四個運算元於此範例中:目的地向量tmp、乘數A、被乘數wn、及純量α。目的地向量tmp被累積入其由驅動程式所指定之分割的序列,成為含有該操作之命令的部分。該命令將指引加速器初始化分割之該序列(假如需要的話)。
接收操作致使加速器讀取PCM並寫入主機記憶體。此操作可被實施為所有其他操作上之選擇性欄位,潛在地熔合用以履行一操作(諸如相乘)之命令與用以儲存結果至主機記憶體之指令。接收操作之目的地運算元被累積於晶片上並接著串流入主機記憶體中之分割,其必須在命令之調度前由驅動程式所固定(除非加速器實施SPL2 SVM)。
命令調度流程
於一實施方式中,在將命令插入針對一堆疊之命令緩衝器後,驅動程式將產生CSR寫入以告知該堆疊有關待消耗之新命令。藉由驅動程式之CSR寫入係由加速器堆疊之中央控制單元所消耗,其致使控制單元產生一系列讀取至命令緩衝器,以讀取由驅動程式所調度之命令至該堆疊。當加速器堆疊完成該命令時,其係寫入狀態位元至其DSM。AAL驅動程式係輪詢或監督這些狀態位元以判定該命令之完成。傳輸或相乘操作之輸出至DSM為一指示完成之狀態位元。針對接收操作,輸出至DSM為一狀態位元及一寫入主機記憶體之分割的序列。驅動程式係負責識別將由該加速器所寫入之記憶體的區。該堆疊上之控制單元係負責產生讀取操作之序列至堆疊DRAM及相應的寫入至目的地分割(於主機記憶體中)。
軟體致能
於一實施方式中,使用者係藉由呼叫常式之庫來與加速器互動以將資料移至加速器上、履行稀疏矩陣計算,等等。針對此庫之API可盡可能類似於現存的稀疏矩陣庫,以減少欲修改現存應用程式所需的努力量來利用加速器。庫為基的介面之另一優點在於其隱藏加速器及其資料格式的細節,容許程式藉由在運行時間動態鏈結該庫之正確版本以利用不同的實施方式。庫亦可被實施以呼叫來自分散式計算環境(如Spark)之加速器。
加速器堆疊之面積和功率消耗可藉由以下方式而被估計:將該設計劃分為模組式(記憶體、ALU,等等)並從類似結構的14nm設計收集資料。為了擴縮至10nm製程,可假設面積之50%減少連同Cdyn之25%減少、以及洩漏功率之20%減少。面積估計包括所有晶片上記憶體及ALU。假設其佈線係位於邏輯/記憶體上方。功率估計包括針對ALU及記憶體之主動能量、針對記憶體之洩漏功率、及我們的主要網路上之佈線功率。假設1GHz之基礎時脈率及0.65V之供應電壓於14nm和10nm製程兩者。如上所述,ALU可運行以基礎時脈率之一半,而此被列入功率規劃之考量。KTI鏈結及堆疊間網路被預期為閒置的或幾乎閒置的,當加速器正履行計算時,因此不被包括於功率估計中。一實施方式係追蹤這些網路上之活動並將其包括於功率估計中。
該些估計係預測其如文中所述之加速器將佔據17mm2的晶片面積於14nm製程中以及8.5mm2的晶片面積於10nm製程中,以其大部分的晶片面積由記憶體所佔據。圖96顯示一加速器之潛在地佈局,該加速器意欲座落於WIO3 DRAM堆疊底下,該WIO3 DRAM堆疊包括64個內積引擎8420、8個向量快取8415及一集成記憶體控制器8410。所示之DRAM堆疊I/O凸塊9601、9602的大小及布局係由WIO3標準所指明,而加速器邏輯係配適於介於其間的空間中。然而,為了組合之簡化,DRAM堆疊底下之邏輯晶粒應至少如DRAM晶粒一般大。因此,實際的加速器晶片將為約8mm-10mm,雖然大部分區域將是未使用的。於一實施方式中,此未使用區域可被用於不同類型的頻寬有限應用。
堆疊DRAM為一種記憶體技術,其(如其名稱所暗示)係垂直地堆疊多數DRAM晶粒以產生較高的頻寬、與計算晶粒之較緊密的物理集成、以及比傳統DRAM模組(諸如DDR4 DIMM)更低的能量/位元。圖97中之表係比較七種DRAM技術:無堆疊DDR4和LPDDR4、Pico模組、JEDEC標準的高頻寬(HBM2 )和寬I/O(WIO3 )堆疊、堆疊DRAM、及非集成RAM(DiRAM)。
堆疊DRAM有兩種變化:晶粒上及晶粒旁。晶粒上堆疊8301-8304(如圖98a中所示)係使用穿越矽通孔而直接地連接至邏輯晶粒或SoC 8305。反之,晶粒旁堆疊8301-8304(圖98b中所示)被置於矽插入器或橋9802上之邏輯/SoC晶粒8305旁邊,具有通過插入器9802及介面層9801而介於DRAM與邏輯晶粒之間的連接。晶粒上DRAM堆疊具有以下優點:其容許比晶粒旁堆疊更小的封裝;但具有以下缺點:難以將多於一個堆疊裝附至邏輯晶粒,限制了其可於每晶粒上所提供之記憶體的量。反之,矽插入器9802之使用係容許邏輯晶粒與多數晶粒旁堆疊通連,雖然有面積上之些許成本。
DRAM之兩個重要特性是每堆疊之頻寬及每位元之能量,因為該些特性定義了其將配適於封裝上的頻寬及用以消耗該頻寬所需的功率。這些特性使得WIO3、ITRI、及DiRAM成為用於如文中所述之加速器的最有希望的技術,因為Pico模組並未提供足夠的頻寬且HBM2 之能量/位元將顯著地增加功率消耗。
在那三個技術中,DiRAM具有最高的頻寬和容量以及最低的潛時,使其成為極吸引人的。WIO3 為另一有希望的選項,假設其變為JEDEC標準,並提供良好的頻寬和容量。ITRI記憶體具有三者中之最低的能量/位元,容許更多的頻寬配適於既定的功率預算下。其亦具有低潛時,且其SRAM狀介面將減少加速器之記憶體控制器的複雜度。然而,ITRI RAM具有三者中之最低的容量,因為其設計係為了性能而犧牲了容量。
文中所述之加速器被設計以阻攔其建立於核心稀疏矩陣向量乘法(SpMV)基元上之資料分析及機器學習。雖然SpMV經常主宰了這些演算法之運行時間,但其他的操作亦需要實施它們。
當作一範例,考量圖99中所示之寬度優先搜尋(BFS)列表。於此範例中,工作之相當大部分係由行4上之SpMV所履行;然而,亦有向量-向量減法(行8)、內積操作(行9)、及資料平行映射操作(行6)。向量減法及內積是相當直接的操作,其常被支援於ISA中且需要很少的解釋。
反之,資料平行映射操作是更為有趣的,因為其將可編程性引入概念上元件式的操作。BFS範例展示由一實施方式之映射函數所提供的可編程性。特別地,BFS中之λ函數(參見圖99中之行6)被用以追蹤頂點何時被首次拜訪。此被完成於一實施方式中,藉由將兩個陣列及一純量傳入λ函數。被傳遞入λ函數之第一陣列為SpMV操作並反映哪些頂點為目前可到達的。第二陣列具有針對各頂點之項目(其值為該頂點所將被首先看見於其上的疊代數),或者0(假如該頂點尚未被到達的話)。被傳遞入λ函數之純量僅為迴路疊代計數。於一實施方式中,λ函數被編譯為一序列的純量操作,其被履行於輸入向量之各元件上以產生輸出向量。
針對BFS之該序列的操作之中間表示(IR)被顯示於圖99。BFS λ IR係展現數個有趣的特性。所產生的λ碼被確保僅具有單一基本區塊。一實施方式係防止λ函數中之疊代建構並履行假如轉換以避免控制流。此限制顯著地減少了用以執行λ之計算結構的複雜度,因為其無須支援一般控制流。
所有記憶體操作被履行於基本區塊之開始時(圖99之行2至4)。當被變換以組合記憶體時,操作被結合為codelet之前文(行2至5)。
統計之評估被履行於其以加速器所實施之基準,該加速器係利用λ函數。指令之數目被記錄,暫存器之總數、及載入之總數,用以量化各種相關λ函數之「複雜度」。此外,關鍵路徑長度係反映各λ函數中之相依指令的最長鏈。當指令之數目顯著地比關鍵路徑更長時,則指令級平行技術為用以增加性能之一可應用的解決方式。某些載入針對映射或減少呼叫之既定調用的不變量(λ函數之所有執行將載入相同值)。此情況被稱為「λ不變量載入」且分析被履行來檢測它。
根據分析的結果,需要相對小的指令儲存及暫存器檔以支援λ函數之執行。用以增加並行性之技術(交錯多數λ函數之執行)係增加暫存器檔之大小及複雜度;然而,基線設計可具有如16個項目般少。此外,2R1W暫存器檔應足夠用於所有操作,假如單一位元述詞暫存器檔亦被提供以配合比較和條件式移動操作來使用的話。
如以下所述,λ不變量載入將被執行於收集引擎中,以致其於λ函數之每調用被僅履行一次。由這些載入所返回之值將被傳遞至處理元件以致其可被讀入λ資料路徑的本地暫存器檔(如所需)。
於一實施方式中,λ函數之執行被劃分於收集引擎與處理器元件(PE)(例如,如上所述之內積引擎)之間,以利用各單元之不同能力。λ函數具有三種類型的引數:常數、純量及向量。常數為引數,其值可被判定於編譯時刻。純量引數係相應於上述的λ不變量載入,且為其值於λ函數的調用之間變化的引數,但保持恆定涵蓋其既定λ函數所操作於上之所有元件。向量引數為λ函數所處理之資料的陣列,將該函數中之指令應用至該些向量引數中之各元件。
於一實施方式中,λ函數係由一描述符資料結構所指明,該描述符資料結構含有:實施該函數之碼、該函數所參考之任何常數、及指向其輸入和輸出變數之指針。為了執行λ函數,頂部位準控制器係傳送命令至一或更多收集引擎,其係指明λ函數之描述符以及該收集引擎和其相關PE所將處理之該函數的向量引數之部分的開始和結束指標。
當收集引擎接收命令以執行λ函數時,其係從記憶體提取該函數的描述符並將該描述符傳遞至其相關的PE直到其到達該描述符之最後區段,其含有該函數之純量引數的位址。其接著從記憶體提取該函數之純量引數的各者,以其值替換該描述符中之各引數的位址,及傳遞經修改的描述符至該PE。
當PE從其收集引擎接收該函數描述符之開端時,其將該函數之向量輸入的位址複製入控制暫存器,且該PE之提取硬體開始將該些向量輸入之頁載入該PE之本地緩衝器。其接著解碼其實施λ函數之指令的各者並將結果儲存於小的已解碼指令緩衝器中。PE接著等待該函數之純量引數的值從其收集引擎到來,並等待該函數之向量引數的各者之第一頁從記憶體到來。一旦該函數之引數已到來,該PE便開始將λ函數應用至輸入向量之其範圍中的各元件,取決於該PE之提取及寫回硬體(用以提取輸入資料之頁並寫回輸出值之頁如所需)。當該PE到達資料之其指定範圍的末端時,其便通知頂部位準控制器其已完成並準備好開始另一操作。
圖100顯示用以指明λ函數之描述符的格式,依據一實施方式。特別地,圖100係顯示記憶體中之λ描述符格式10001及被傳遞至PE之λ描述符格式10002。除了該些指令以外之該描述符中的所有欄位均為64位元值。指令為32位元值,緊縮的二至64位元字元。該描述符被組織以致純量引數最後出現,容許收集引擎傳遞除了純量引數之外的每一者至該PE,在其從記憶體提取純量引數之前。如此使得該PE得以解碼該函數的指令並開始提取其向量引數而同時等待該收集引擎提取純量引數。λ函數之描述符及純量引數係透過快取而被提取,以消除冗餘的DRAM存取(當λ函數被分佈涵蓋多數收集引擎/PE對時)。如圖所示,記憶體中之λ描述符格式10001可包括指向純量引數之指針10003,而該收集引擎係提取純量引數之值10004(以如被傳遞至PE之λ描述符格式10002)。
於一實施方式中,各描述符之第一字元為標頭,其係指明該描述符中之各字元的意義。如圖101中所示,標頭字元之下六位元組指明:針對λ函數之向量引數的數目10101、恆定引數的數目10102、向量和純量輸出的數目10103-10104、該函數中之指令的數目10105、及該函數中之純量引數的數目10106(被排序以匹配各類型的資料所出現於該描述符中之處)。標頭字元之第七位元組係指明於該函數之碼內的迴路開始指令10107之位置(亦即,在該第一後該硬體應於何處開始各疊代的指令)。該字元中之高階位元組是未使用的10108。剩餘字元含有函數指令、常數、及輸入和輸出位址,以圖中所示之順序。
不需要針對收集引擎資料路徑之任何改變以支援λ函數,因為所有必要的操作可藉由修改控制邏輯而被支援。當收集引擎從記憶體提取λ描述符時,其將把該描述符之各行複製入向量元件行緩衝器及行描述符緩衝器兩者。不含純量引數之位址的描述符行將被傳遞至未修改的PE,而那些含有該些位址的描述符行將餘留在線緩衝器中直到該些純量引數之值已被提取自記憶體並插入線緩衝器(以取代其位址)。現存的收集和擱置回應緩衝器硬體可支援此操作而無改變。
針對用以支援 λ 函數之處理元件的改變
於一實施方式中,為了支援λ函數,分離的資料路徑被加至PE(如圖102中所示),圖102係顯示矩陣值緩衝器9105、矩陣指標緩衝器9103及向量值緩衝器9104(如上所述者)。雖然PE之緩衝器保持相同,其名稱已被改變為輸入緩衝器1、輸入緩衝器2、及輸入緩衝器3以反映於目前實施方式中之其更一般性使用。SpMV資料路徑9110亦保持不改變自基本架構。雖然將有可能實施SpMV為λ函數,但建立專屬硬體10201針對SpMV係減少了功率並增進了性能。來自SpMV資料路徑9110之結果以及λ資料路徑10201被傳送至輸出緩衝器10202並最終至系統記憶體。
圖103闡明λ資料路徑之一實施方式的細節,其包括述詞暫存器檔10301、暫存器檔10302、解碼邏輯10303、已解碼指令緩衝器10305,且其係以依序執行管線10304(其實施載入-儲存ISA)為中心。假如單一問題執行管線無法提供足夠的性能,則可利用λ操作中固有的資料平行性並將該執行管線向量化以平行地處理多數向量元件,其應為比利用ILP(於個別λ函數中)更有能量效率的方式(用以增進平行性)。執行管線讀取其輸入自及寫回結果至16-32項目的暫存器檔10302,每暫存器具有64位元。該硬體並未分辨於整數與浮點暫存器之間,且任何暫存器均可保持任何類型的資料。述詞暫存器檔10301係保持比較操作之輸出,其被用以斷定指令執行。於一實施方式中,λ資料路徑10304不支援分支指令,因此任何條件式執行必須透過已斷定指令來完成。
在各λ函數之開始時,收集引擎將該函數之指令置於輸入緩衝器3 9104(向量值緩衝器)中。解碼邏輯10303接著依序地解碼各指令,將其結果置於32項目的已解碼指令緩衝器10305中。如此係節省於迴路1之每次疊代上重複地解碼各指令的能量成本。
λ資料路徑含有四個特殊控制暫存器10306。指標計數暫存器係保存其該λ資料路徑目前正在處理之向量元件的指標,且在該λ之各疊代的結束時被自動地遞增。最後指標暫存器係保存其該PE所預期要處理之最後向量元件的指標。迴路開始暫存器係保存該λ函數之重複部分中的第一指令之已解碼指令緩衝器中的位置,而迴路結束暫存器係保存該λ函數中之最後指令的位置。
λ函數之執行係開始以已解碼指令緩衝器中之第一指令,並繼續直到該管線到達由該迴路結束暫存器所指至之指令。於該時點,管線係比較指標計數暫存器之值與最後指標緩衝器之值,並執行暗示分支回至由該迴路開始暫存器所指至之指令(假如指標計數小於最後指標的話)。因為指標計數暫存器僅被遞增在各疊代之結束時,所以此檢查可被事先執行以避免該管線中之泡影。
此方案使其易於包括「前文」指令,其僅需被執行於λ函數之第一疊代上。例如,具有兩個純量及一個常數輸入之λ函數可開始以三個載入指令來將那些輸入提取入暫存器檔,並設定該迴路開始暫存器以指向已解碼指令緩衝器中之第四指令以致該些輸入僅被讀取一次而非於該函數之各疊代上。
於一實施方式中,λ資料路徑係執行類似於許多RISC處理器之載入-儲存ISA。λ資料路徑載入及儲存指令係參考PE之SRAM緩衝器中的位置。介於SRAM緩衝器與DRAM之間的資料之轉移係由PE之提取和寫回硬體所管理。λ資料路徑係支援兩種類型的載入指令:純量及元件。純量載入係提取該些SRAM緩衝器之一中的指定位置之內容並將其置於暫存器中。預期其λ函數中之大部分純量載入指令將發生於該函數之前文中,雖然暫存器壓力可能偶爾地需要純量載入被置入迴路本體中。
元件載入係提取λ函數之輸入向量的元件。PE將保持針對各緩衝器之計算指標,其係指向其被映射入該緩衝器之第一輸入向量的目前元件。元件載入係指定緩衝器及與該計算指標之偏置。當元件指令被執行時,該硬體將該指定的偏置加至該計算指標模除(modulo)適當緩衝器之大小的值,並將來自該位置之資料載入暫存器。元件儲存指令是類似的,但是將資料寫入PE輸出緩衝器10202中之適當位址。
此方式容許多數輸入及輸出向量被支援以PE之現存的提取硬體。輸入向量係交替於輸入緩衝器1 9105與2 9103之間(以由該λ函數之描述符所指定的順序),而該提取硬體將各向量之完整頁一次地讀取入該些緩衝器。
當作一範例,考量其具有三個輸入向量A、B、及C之函數。輸入向量A將被映射至該PE之輸入緩衝器1 9105上,以0之偏置。輸入B將被映射至輸入緩衝器2 9103上,再次以0之偏置。輸入C將被映射至輸入緩衝器1 9105上,以256之偏置(假設Tezzaron式樣的256位元組頁)。PE之提取硬體將把輸入A及C之頁交錯入輸入緩衝器1 9105,而輸入緩衝器2 9103將被填入以輸入B之頁。該λ函數之各疊代將藉由執行元件載入自緩衝器1 9105(以0之偏置)以提取輸入A之適當元件;將利用元件載入自緩衝器2 9103(以0之偏置)以提取輸入B之適當元件;及將利用元件載入自緩衝器1 9105(以256之偏置)以提取輸入C之其元件。於各疊代之末端,該硬體將遞增該計算指標以推進至各輸入向量之下一元件。當該計算指標到達一頁之末端時,該硬體將遞增它以(頁大小*(映射至該頁之向量輸入的數目-1))位元組,來將它推進至該緩衝器之第一輸入向量的下一頁之第一元件。類似方案將被用以處置其產生多數輸出向量之λ函數。
如圖104中所示,於一實施方式中,8位元係專屬於運算碼10401。剩餘的24位元被劃分於單一目的地10402及3個輸入運算元10403-10405之間,其導致6位元的暫存器指明符。控制流指令未被使用於一實施方式中而常數係源自輔助暫存器檔,不需要位元配置技巧來將大的即刻配適於指令字元中。於一實施方式中,所有指令係配適入圖104所提出之指令編碼中。針對一特定組指令之編碼被顯示於圖105中。
於一實施方式中,比較指令係使用比較述詞。範例比較述詞之編碼被列出在圖106之表中。
如以上所詳述,於某些例子中,有利的是使用加速器於既定工作。然而,可能有些例子,其中加速器不是可行的及/或有利的。例如,加速器無法取得、資料之移動至加速器導致太大的懲罰、加速器之速度小於處理器核心,等等。如此一來,於某些實施方式中,額外的指令可提供針對某些工作之性能及/或能量效率。
矩陣乘法之一範例被闡明於圖109中。矩陣乘法為C[列A,行B] += A[列A,comm] * B[comm,行B]。如文中針對MADD(乘加指令)所使用者,矩陣*向量乘法指令係藉由設定行B=1而被定義。此指令係取用矩陣輸入A、向量輸入B,並產生向量輸出C。於512位元向量之背景中,針對雙精確度其列A=8而針對單精確度為16。
大部分CPU履行緊密矩陣乘法,經由其操作於一維向量上之SIMD指令。文中所詳述者為一指令(及主要硬體),其係延伸SIMD方式以包括大小8*4、8*8、及更大的二維矩陣(磚片)。透過此指令之使用,小矩陣可被乘以向量且結果被加至目的地向量。所有操作均被履行於一指令中,減緩其透過大量乘-加以提取指令及資料之能量成本。此外,某些實施方式係利用二元樹以履行加總(減)及/或包括一被嵌入乘法器陣列之暫存器檔以將輸入矩陣保存為暫存器之集合。
針對矩陣乘法,MADD指令之實施例的執行係計算:
Figure 02_image007
通常,「A」運算元被儲存於八個緊縮資料暫存器中。「B」運算元可被儲存於一個緊縮資料暫存器中或讀取自記憶體。「C」運算元被儲存於一個緊縮資料暫存器中。
貫穿此指令之剩餘討論,「octoMADD」版本被討論。此版本將8個緊縮資料元件來源(例如,8個緊縮資料暫存器)乘以一緊縮資料元件來源(例如,單一暫存器)。延伸內迴路係提供如下執行以供依序的實施方式(針對octoMADD指令):
Figure 02_image009
如圖所示,來自「A」和「B」運算元之相應緊縮資料元件位置的緊縮資料元件之各乘法係接續以一加法。依序加法係分解為具有最小暫時儲存之多數、較簡單的操作。
於某些實施方式中,二元樹方式被使用。二元樹係藉由平行地加總兩個子樹並接著將結果加在一起以將潛時最小化。此被遞迴地應用至整個二元樹。最終結果被加至「C」目的地運算元。
延伸內迴路係提供如下執行以供二元實施方式(針對octoMADD指令):
Figure 02_image011
圖110闡明具有二元樹減少網路之octoMADD指令。此圖形顯示該操作之一向量巷道。利用512位元向量,雙精確度octoMADD具有八個巷道,而單精確度octoMADD具有16個巷道。
如圖所示,複數乘法電路11001-11015,其係個別地履行A[i,0]*B[0]、A[i,1]*B[1]、A[i,2]*B[2]、A[i,3]*B[3]、A[i,4]*B[4]、A[i,5]*B[5]、A[i,6]*B[6]、及A[i,7]*B[7]之乘法。於此範例中,i為暫存器。通常,乘法被平行地履行。
耦合至乘法電路11001-11015者為加總電路11017-11023,其係將乘法電路11001-11015之結果相加。例如,加總電路係履行A[i,0]*B[0] + A[i,1]*B[1]、A[i,2]*B[2] + A[i,3]*B[3]、A[i,4]*B[4] + A[i,5]*B[5]、及A[i,6]*B[6] + A[i,7]*B[7]。通常,加總被平行地履行。
初始加總之結果係使用加總電路11025而被加總並相加在一起。此相加之結果係藉由加總電路11027被加至原始(舊)值11031(來自目的地)來產生新的值11033以供被儲存於目的地中。
於大部分實施方式中,指令無法指定八個獨立的來源暫存器、加上針對其他來源之暫存器或記憶體運算元以及暫存器目的地。因此,於某些例子中,octoMADD指令係指定針對該矩陣運算元之有限範圍的八個暫存器。例如,octoMADD矩陣運算元可為暫存器0-7。於某些實施例中,第一暫存器被指定而該第一暫存器後之連續暫存器為額外(例如,7)暫存器。
圖111闡明由用以處理乘加指令之處理器所履行的方法之實施例。
於11101,指令被提取。例如,乘加指令被提取。乘加指令包括:運算碼、針對第一緊縮資料運算元(記憶體或暫存器)之欄位、針對第二至N緊縮資料來源運算元之一或更多欄位、及緊縮資料目的地運算元。於某些實施例中,乘加指令包括寫入遮蔽運算元。於某些實施例中,該指令被提取自指令快取。
提取的指令被解碼於11103。例如,提取的乘加指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於11105。為了避免重複地從主暫存器檔讀取這些值之需求(當執行乘加指令之序列時),這些暫存器之副本被建立於乘法器-加法器陣列本身內(如以下所詳述)。該副本被維持為該主暫存器檔之快取。
於11107,已解碼指令係由諸如文中所詳述之執行電路(硬體)所執行,以(針對第二至N緊縮資料來源運算元之各緊縮資料元件位置):1)將該來源運算元之該緊縮資料元件位置的資料元件乘以該第一來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該目的地之相應緊縮資料元件位置的資料元件,進入該緊縮資料目的地運算元之相應緊縮資料元件位置。N通常係由運算碼或前綴所指示。例如,針對octoMADD,N為9(以致針對A有8個暫存器)。乘法可被平行地履行。
於某些實施例中,該指令被確定或撤回於11109。
圖112闡明由用以處理乘加指令之處理器所履行的方法之實施例。
於11201,指令被提取。例如,乘加指令被提取。熔凝乘加指令包括:運算碼、針對第一緊縮資料運算元(記憶體或暫存器)之欄位、針對第二至N緊縮資料來源運算元之一或更多欄位、及緊縮資料目的地運算元。於某些實施例中,熔凝乘加指令包括寫入遮蔽運算元。於某些實施例中,該指令被提取自指令快取。
提取的指令被解碼於11203。例如,提取的乘加指令係由解碼電路(諸如文中所詳述者)所解碼。
與已解碼指令之來源運算元關聯的資料值被擷取於11205。為了避免重複地從主暫存器檔讀取這些值之需求(當執行乘加指令之序列時),這些暫存器之副本被建立於乘法器-加法器陣列本身內(如以下所詳述)。該副本被維持為該主暫存器檔之快取。
於11207,已解碼指令係由諸如文中所詳述之執行電路(硬體)所執行,以(針對第二至N緊縮資料來源運算元之各緊縮資料元件位置):1)將該來源運算元之該緊縮資料元件位置的資料元件乘以該第一來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)成對地加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該目的地之相應緊縮資料元件位置的資料元件,進入該緊縮資料目的地運算元之相應緊縮資料元件位置。N通常係由運算碼或前綴所指示。例如,針對octoMADD,N為9(以致針對A有8個暫存器)。乘法可被平行地履行。
於某些實施例中,該指令被確定或撤回於11209。
於某些實施方式中,當MADD指令被首先遭遇時,重新命名器便將已快取副本與主暫存器檔同步化,藉由注入微操作以將主暫存器複製入該快取。後續的MADD指令繼續使用該些已快取副本,只要其保持未改變。某些實施方式預期有限範圍的暫存器之使用,藉由octomadd指令及廣播寫入至該主暫存器檔及該已快取副本兩者,在該些暫存器值被產生的時刻。
圖113A-C闡明用以履行MADD指令之範例硬體。圖113A顯示用以執行MADD指令之組件。圖113B顯示這些組件之子集。特別地,複數乘法電路11323被用以將來源暫存器之緊縮資料元件乘以各乘法電路11323(其被耦合至加總電路11327)。各加總電路以以鏈結方式饋送加總電路11327。選擇器11321被用以選擇於外部輸入或加總電路的回饋之間。暫存器檔被嵌入乘法器-加法器陣列內而成為暫存器檔及讀取多工器11325之一部分。特定暫存器被硬接線至乘法器-加法器之各行。
圖113B顯示暫存器檔及讀取多工器11325。暫存器檔11327為複數暫存器,用以將A儲存為快取(例如,4或8個暫存器)。正確的暫存器係使用讀取多工器11329而被選擇。
octomadd指令之預期使用係如下:
Figure 02_image013
內迴路含有24個octomadd指令。各讀取一「B」運算元自記憶體並加總至24個「C」累積器之一。中迴路係載入具有新磚片之8個「A」暫存器。外迴路載入並儲存24個「C」累積器。內迴路可被展開且預提取加入,以獲得octomadd硬體之高利用率(>90%)。
以下圖形係詳述用以實施以上實施例之範例架構及系統。特別地,以上所討論之核心類型(諸如失序、純量、SIMD)的形態(例如,暫存器、管線,等等)被描述。此外,系統及晶片實施方式上之系統被顯示,其包括共處理器(例如,加速器、核心)。於某些實施例中,上述的一或更多硬體組件及/或指令被仿真如以下所詳述,或者被實施為軟體模組。範例暫存器架構
圖125為一暫存器架構12500之方塊圖,依據本發明之一實施例。於所示之實施例中,有32個向量暫存器12510,其為512位元寬;這些暫存器被稱為zmm0至zmm31。較低的16個zmm暫存器之較低階256位元被重疊於暫存器ymm0-16上。較低的16個zmm暫存器之較低階128位元(ymm暫存器之較低階128位元)被重疊於暫存器xmm0-15上。特定向量友善指令格式QAC00係操作於這些重疊的暫存器檔上,如以下表中所闡明。
可調整向量長度 類別 操作 暫存器
不包括向量長度欄位QAB59B之指令模板 A(圖QABA;U=0) QAB10, QAB15, QAB25, QAB30 zmm暫存器(向量長度為64位元組)
B(圖QABB;U=1) QAB12 zmm暫存器(向量長度為64位元組)
包括向量長度欄位QAB59B之指令模板 B(圖QABB;U=1) QAB17, QAB27 zmm、ymm、或xmm暫存器(向量長度為64位元組、32位元組、或16位元組)根據向量長度欄位QAB59B
換言之,向量長度欄位QAB59B於最大長度與一或更多其他較短長度之間選擇,其中每一此較短長度為前一長度之長度的一半;而無向量長度欄位QAB59B之指令模板係操作於最大長度上。此外,於一實施例中,特定向量友善指令格式QAC00之類別B指令模板係操作於緊縮或純量單/雙精確度浮點資料及緊縮或純量整數資料上。純量操作為履行於zmm/ymm/xmm暫存器中之最低階資料元件上的操作;較高階資料元件位置係根據實施例而被保留如其在該指令前之相同者或者被歸零。
寫入遮蔽暫存器12515 - 於所示之實施例中,有8個寫入遮蔽暫存器(k0至k7),大小各為64位元。於替代實施例中,寫入遮蔽暫存器12515之大小為16位元。如先前所述,於本發明之一實施例中,向量遮蔽暫存器k0無法被使用為寫入遮蔽;當其通常將指示k0之編碼被用於寫入遮蔽時,其係選擇0xFFFF之固線寫入遮蔽,有效地除能該指令之寫入遮蔽。
通用暫存器12525 - 於所示之實施例中,有十六個64位元通用暫存器,其係連同現存的x86定址模式來用以定址記憶體運算元。這些暫存器被參照以RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔(x87堆疊)12545,MMX緊縮整數平坦暫存器檔12550係別名於其上 - 於所示之實施例中,x87堆疊為用以使用x87指令集延伸而在32/64/80位元浮點資料上履行純量浮點操作之八元件堆疊;而MMX暫存器被用以履行操作在64位元緊縮整數資料上、及用以保持運算元以供介於MMX與XMM暫存器間所履行的某些操作。
本發明之替代實施例可使用較寬或較窄的暫存器。此外,本發明之替代實施例可使用更多、更少、或不同的暫存器檔及暫存器。範例核心架構,處理器,及電腦架構
處理器核心可被實施以不同方式、用於不同目的、以及於不同處理器中。例如,此類核心之實施方式可包括:1)用於通用計算之通用依序核心;2)用於通用計算之高性能通用失序核心;3)主要用於圖形及/或科學(通量)計算之特殊用途核心。不同處理器之實施方式可包括:1)CPU,其包括用於通用計算之一或更多通用依序核心及/或用於通用計算之一或更多通用失序核心;及2)核心處理器,其包括主要用於圖形及/或科學(通量)之一或更多特殊用途核心。此等不同處理器導致不同的電腦系統架構,其可包括:1)在來自該CPU之分離晶片上的共處理器;2)在與CPU相同的封裝中之分離晶粒上的共處理器;3)在與CPU相同的晶粒上的共處理器(於該情況下,此一處理器有時被稱為特殊用途邏輯,諸如集成圖形及/或科學(通量)邏輯、或稱為特殊用途核心);及4)在一可包括於相同晶粒上之所述CPU(有時稱為應用程式核心或應用程式處理器)、上述共處理器、及額外功能的晶片上之系統。範例核心架構被描述於下,接續著範例處理器及電腦架構之描述。範例核心架構 依序或失序核心方塊圖
圖126A為闡明範例依序管線及範例暫存器重新命名、失序問題/執行管線兩者之方塊圖,依據本發明之實施例。圖126B為一方塊圖,其闡明將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序問題/執行架構核心兩者。圖126A-B中之實線方盒係闡明依序管線及依序核心,而虛線方盒之選擇性加入係闡明暫存器重新命名、失序問題/執行管線及核心。假設其依序形態為失序形態之子集,將描述失序形態。
於圖126A中,處理器管線12600包括提取級12602、長度解碼級12604、解碼級12606、配置級12608、重新命名級12610、排程(亦已知為分派或發送)級12612、暫存器讀取/記憶體讀取級12614、執行級12616、寫入回/記憶體/寫入級12618、例外處置級12622、及確定級12624。
圖126B顯示處理器核心12690,其包括一耦合至執行單元引擎單元12650之前端單元12630,且兩者均耦合至記憶體單元12670。核心12690可為減少指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令字元(VLIW)核心、或者併合或替代核心類型。當作又另一種選擇,核心12690可為特殊用途核心,諸如(例如)網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心,等等。
前端單元12630包括一分支預測單元12632,其係耦合至指令快取單元12634,其係耦合至指令變換後備緩衝(TLB)12636,其係耦合至指令提取單元12638,其係耦合至解碼單元12640。解碼單元12640(或解碼器)可解碼指令;並可將以下產生為輸出:一或更多微操作、微碼進入點、微指令、其他指令、或其他控制信號,其被解碼自(或者反應)、或被衍生自原始指令。解碼單元12640可使用各種不同的機制來實施。適當機制之範例包括(但不限定於)查找表、硬體實施方式、可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM),等等。於一實施例中,核心12690包括微碼ROM或者儲存用於某些巨指令之微碼的其他媒體(例如,於解碼單元12640中或者於前端單元12630內)。解碼單元12640被耦合至執行引擎單元12650中之重新命名/配置器單元12652。
執行引擎單元12650包括重新命名/配置器單元12652,其係耦合至撤回單元12654及一組一或更多排程器單元12656。排程器單元12656代表任何數目的不同排程器,包括保留站、中央指令窗,等等。排程器單元12656被耦合至實體暫存器檔單元12658。實體暫存器檔單元12658之各者代表一或更多實體暫存器檔,其不同者係儲存一或更多不同的資料類型,諸如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,其為下一待執行指令之位址的指令指標),等等。於一實施例中,實體暫存器檔單元12658包含向量暫存器單元、寫入遮蔽暫存器單元、及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮蔽暫存器、及通用暫存器。實體暫存器檔單元12658係由撤回單元12654所重疊以闡明其中暫存器重新命名及失序執行可被實施之各種方式(例如,使用記錄器緩衝器和撤回暫存器檔;使用未來檔、歷史緩衝器、和撤回暫存器檔;使用暫存器映圖和暫存器池,等等)。撤回單元12654及實體暫存器檔單元12658被耦合至執行叢集12660。執行叢集12660包括一組一或更多執行單元12662及一組一或更多記憶體存取單元12664。執行單元12662可履行各種操作(例如,偏移、相加、相減、相乘)以及於各種類型的資料上(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然某些實施例可包括數個專屬於特定功能或功能集之執行單元,但其他實施例可包括僅一個執行單元或者全部履行所有功能之多數執行單元。排程器單元12656、實體暫存器檔單元12658、及執行叢集12660被顯示為可能複數的,因為某些實施例係針對某些類型的資料/操作產生分離的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各具有本身的排程器單元、實體暫存器檔單元、及/或執行叢集 – 且於分離記憶體存取管線之情況下,某些實施例被實施於其中僅有此管線之執行叢集具有記憶體存取單元12664)。亦應理解:當使用分離管線時,這些管線之一或更多者可為失序發送/執行而其他者為依序。
該組記憶體存取單元12664被耦合至記憶體單元12670,其包括資料TLB單元12672,其耦合至資料快取單元12674,其耦合至第二階(L2)快取單元12676。於一範例實施例中,記憶體存取單元12664可包括載入單元、儲存位址單元、及儲存資料單元,其各者係耦合至記憶體單元12670中之資料TLB單元12672。指令快取單元12634被進一步耦合至記憶體單元12670中之第二階(L2)快取單元12676。L2快取單元12676被耦合至一或更多其他階的快取且最終至主記憶體。
舉例而言,範例暫存器重新命名、失序發送/執行核心架構可實施管線12600如下:1)指令提取12638履行提取和長度解碼級12602和12604;2)解碼單元12640履行解碼級12606;3)重新命名/配置器單元12652履行配置級12608和重新命名級12610;4)排程器單元12656履行排程級12612;5)實體暫存器檔單元12658和記憶體單元12670履行暫存器讀取/記憶體讀取級12614;執行叢集12660履行執行級12616;6)記憶體單元12670和實體暫存器檔單元12658履行寫入回/記憶體寫入級12618;7)各個單元可參與例外處置級12622;及8)撤回單元12654和實體暫存器檔單元12658履行確定級12624。
核心12690可支援一或更多指令集(例如,x86指令集,具有其已被加入以較新版本之某些延伸);MIPS Technologies of Sunnyvale, CA之MIPS指令集;ARM Holdings of Sunnyvale, CA之ARM指令集(具有諸如NEON之選擇性額外延伸),包括文中所述之指令。於一實施例中,核心12690包括支援緊縮資料指令集延伸(例如,AVX1、AVX2)之邏輯,藉此容許由許多多媒體應用程式所使用的操作使用緊縮資料來履行。
應理解:核心可支援多線程(執行二或更多平行組的操作或線緒),並可以多種方式執行,包括時間切割多線程、同時多線程(其中單一實體核心提供邏輯核心給其實體核心正同時地多線程之每一線緒)、或者其組合(例如,時間切割提取和解碼以及之後的同時多線程,諸如Intel® Hyperthreading科技)。
雖然暫存器重新命名被描述於失序執行之背景,但應理解其暫存器重新命名可被使用於依序架構。雖然處理器之所述的實施例亦包括分離的指令和資料快取單元12634/12674以及共用L2快取單元12676,但替代實施例可具有針對指令和資料兩者之單一內部快取,諸如(例如)第一階(L1)內部快取、或多階內部快取。於某些實施例中,該系統可包括內部快取與外部快取之組合,該外部快取是位於核心及/或處理器之外部。替代地,所有快取可於核心及/或處理器之外部。特定範例依序核心架構
圖127A-B闡明更特定的範例依序核心架構之方塊圖,該核心將為晶片中之數個邏輯區塊之一(包括相同類型及/或不同類型之其他核心)。邏輯區塊係透過高頻寬互連網路(例如,環狀網路)來通訊,利用某些固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯,根據其應用而定。
圖127A為單處理器核心之方塊圖,連同與晶粒上互連網路12702之其連接、以及第二階(L2)快取12704之其本地子集,依據本發明之實施例。於一實施例中,指令解碼器12700支援具有緊縮資料指令集延伸之x86指令集。L1快取12706容許針對快取記憶體之低潛時存取入純量及向量單元。雖然於一實施例中(為了簡化設計),純量單元12708及向量單元12710使用分離的暫存器組(個別地,純量暫存器12712及向量暫存器12714),且於其間轉移的資料被寫入至記憶體並接著從第一階(L1)快取12706被讀取回;但本發明之替代實施例可使用不同的方式(例如,使用單一暫存器組或者包括一通訊路徑,其容許資料被轉移於兩暫存器檔之間而不被寫入及讀取回)。
L2快取12704之本地子集為其被劃分為分離本地子集(每一處理器核心有一個)之總體L2快取的部分。各處理器核心具有一直接存取路徑通至L2快取12704之其本身的本地子集。由處理器核心所讀取的資料被儲存於其L2快取子集12704中且可被快速地存取,平行於存取其本身本地L2快取子集之其他處理器核心。由處理器核心所寫入之資料被儲存於其本身的L2快取子集12704中且被清除自其他子集,假如需要的話。環狀網路確保共用資料之一致性。環狀網路為雙向的,以容許諸如處理器核心、L2快取及其他邏輯區塊等代理於晶片內部彼此通訊。各環狀資料路徑於每方向為1012位元寬。
圖127B為圖127A中之處理器核心的部分之延伸視圖,依據本發明之實施例。圖127B包括L1快取12704之L1資料快取12706A部分、以及有關向量單元12710和向量暫存器12714之更多細節。明確地,向量單元12710為16寬的向量處理單元(VPU)(參見16寬的ALU 12728),其係執行整數、單精確度浮點、及雙精確度浮點指令之一或更多者。VPU支援以拌合單元12720拌合暫存器輸入、以數字轉換單元12722A-B之數字轉換、及於記憶體輸入上以複製單元12724之複製。寫入遮蔽暫存器12726容許斷定結果向量寫入。
圖128為一種處理器12800之方塊圖,該處理器可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例。圖128中之實線方塊闡明處理器12800,其具有單核心12802A、系統代理12810、一組一或更多匯流排控制器單元12816;而虛線方塊之選擇性加入闡明一替代處理器12800,其具有多核心12802A-N、系統代理單元12810中之一組一或更多集成記憶體控制器單元12814、及特殊用途邏輯12808。
因此,處理器12800之不同實施方式可包括:1)CPU,具有其為集成圖形及/或科學(通量)邏輯(其可包括一或更多核心)之特殊用途邏輯12808、及其為一或更多通用核心(例如,通用依序核心、通用失序核心、兩者之組合)之核心12802A-N;2)共處理器,具有其為主要用於圖形及/或科學(通量)之大量特殊用途核心的核心12802A-N;及3)共處理器,具有其為大量通用依序核心的核心12802A-N。因此,處理器12800可為通用處理器、共處理器或特殊用途處理器,諸如(例如)網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多數集成核心(MIC)共處理器(包括30或更多核心)、嵌入式處理器,等等。該處理器可被實施於一或更多晶片上。處理器12800可為一或更多基底之部分及/或可被實施於其上,使用數個製程技術之任一者,諸如(例如)BiCMOS、CMOS、或NMOS。
記憶體階層包括該些核心內之一或更多階快取、一組或者一或更多共用快取單元12806、及耦合至該組集成記憶體控制器單元12814之額外記憶體(未顯示)。該組共用快取單元12806可包括一或更多中階快取,諸如第二階(L2)、第三階(L3)、第四階(L4)、或其他階快取、最後階快取(LLC)、及/或其組合。雖然於一實施例中環狀為基的互連單元12812將以下裝置互連:集成圖形邏輯12808(集成圖形邏輯12808為一範例且文中亦被稱為特殊用途邏輯)、該組共用快取單元12806、及系統代理單元12810/集成記憶體單元12814,但替代實施例可使用任何數目之眾所周知的技術以互連此等單元。於一實施例中,一致性被維持於一或更多快取單元12806與核心12802-A-N之間。
於某些實施例中,一或更多核心12802A-N能夠進行多線程。系統代理12810包括協調並操作核心12802A-N之那些組件。系統代理單元12810可包括(例如)電力控制單元(PCU)及顯示單元。PCU可為或者包括用以調節核心12802A-N及集成圖形邏輯12808之電力狀態所需的邏輯和組件。顯示單元係用以驅動一或更多外部連接的顯示。
核心12802A-N可針對架構指令集為同質的或異質的;亦即,二或更多核心12802A-N可執行相同的指令集,而其他者可執行該指令集或不同指令集之僅一子集。範例電腦架構
圖129-132為範例電腦架構之方塊圖。用於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視頻遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持式裝置、及各種其他電子裝置之技術中已知的其他系統設計和組態亦為適當的。通常,能夠結合處理器及/或其他執行邏輯(如文中所揭露者)之多種系統或電子裝置為一般性適當的。
現在參考圖129,其顯示依據本發明之一實施例的系統12900之方塊圖。系統12900可包括一或更多處理器12910、12915,其被耦合至控制器集線器12920。於一實施例中,控制器集線器12920包括圖形記憶體控制器集線器(GMCH)12990及輸入/輸出集線器(IOH)12950(其可於分離的晶片上);GMCH 12990包括記憶體及圖形控制器(耦合至記憶體12940及共處理器12945);IOH 12950(耦合輸入/輸出(I/O)裝置12960至GMCH 12990。另一方面,記憶體與圖形控制器之一或兩者被集成於處理器內(如文中所述者),記憶體12940及共處理器12945被直接地耦合至處理器12910、及具有IOH 12950之單一晶片中的控制器集線器12920。
額外處理器12915之選擇性本質於圖129中被標示以斷線。各處理器12910、12915可包括文中所述的處理核心之一或更多者並可為處理器12800之某版本。
記憶體12940可為(例如)動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或兩者之組合。針對至少一實施例,控制器集線器12920經由諸如前側匯流排(FSB)等多點分支匯流排、諸如QuickPath互連(QPI)等點對點介面、或類似連接12995而與處理器12910、12915通訊。
於一實施例中,共處理器12945為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。於一實施例中,控制器集線器12920可包括集成圖形加速器。
於實體資源12910、12915間可有多樣差異,針對價值矩陣之譜,包括架構、微架構、熱、功率消耗特性,等等。
於一實施例中,處理器12910執行其控制一般類型之資料處理操作的指令。指令內所嵌入者可為共處理器指令。處理器12910辨識這些共處理器指令為其應由裝附之共處理器12945所執行的類型。因此,處理器12910將共處理器匯流排或其他互連上之這些共處理器指令(或代表共處理器指令之控制信號)發送至共處理器12945。共處理器12945接受並執行該些接收的共處理器指令。
現在參考圖130,其顯示依據本發明之實施例的第一更特定範例系統13000之方塊圖。如圖130中所示,多處理器系統13000為點對點互連系統,並包括經由點對點互連13050而耦合之第一處理器13070及第二處理器13080。處理器13070及13080之每一者可為處理器12800之某版本。於本發明之一實施例中,處理器13070及13080個別為處理器12910及12915,而共處理器13038為共處理器12945。於另一實施例中,處理器13070及13080個別為處理器12910及共處理器12945。
處理器13070及13080被顯示為個別地包括集成記憶體控制器(IMC)單元13072及13082。處理器13070亦包括其匯流排控制器單元點對點(P-P)介面13076及13078之部分;類似地,第二處理器13080包括P-P介面13086及13088。處理器13070、13080可使用P-P介面電路13078、13088而經由點對點(P-P)介面13050來交換資訊。如圖130中所示,IMC 13072及13082將處理器耦合至個別記憶體,亦即記憶體13032及記憶體13034,其可為本地地裝附至個別處理器之主記憶體的部分。
處理器13070、13080可各經由個別的P-P介面13052、13054而與晶片組13090交換資訊,使用點對點介面電路13076、13094、13086、13098。晶片組13090可經由高性能介面13092而選擇性地與共處理器13038交換資訊。於一實施例中,共處理器13038為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。
共用快取(未顯示)可被包括於任一處理器中或者於兩處理器外部,而經由P-P互連與處理器連接,以致處理器之任一者或兩者的本地快取資訊可被儲存於共用快取中,假如處理器被置於低功率模式時。
晶片組13090可經由一介面13096而被耦合至第一匯流排13016。於一實施例中,第一匯流排13016可為周邊組件互連(PCI)匯流排、或者諸如PCI快速匯流排或其他第三代I/O互連匯流排等匯流排,雖然本發明之範圍未如此限制。
如圖130中所示,各種I/O裝置13014可被耦合至第一匯流排13016,連同匯流排橋13018,其係將第一匯流排13016耦合至第二匯流排13020。於一實施例中,一或更多額外處理器13015(諸如共處理器、高通量MIC處理器、GPGPU加速器(諸如,例如,圖形加速器或數位信號處理(DSP)單元)、場可編程閘極陣列、或任何其他處理器)被耦合至第一匯流排13016。於一實施例中,第二匯流排13020可為低管腳數(LPC)匯流排。各個裝置可被耦合至第二匯流排13020,其包括(例如)鍵盤/滑鼠13022、通訊裝置13027、及資料儲存單元13028,諸如磁碟機或其他大量儲存裝置(其可包括指令/碼及資料13030),於一實施例中。此外,音頻I/O 13024可被耦合至第二匯流排13020。注意:其他架構是可能的。例如,取代圖130之點對點架構,系統可實施多點分支匯流排其他此類架構。
現在參考圖131,其顯示依據本發明之實施例的第二更特定範例系統13100之方塊圖。圖130與131中之類似元件具有類似的參考數字,且圖130之某些形態已從圖131省略以免混淆圖131之其他形態。
圖131闡明其處理器13070、13080可包括集成記憶體及I/O控制邏輯(「CL」)13072和13082,個別地。因此,CL 13072、13082包括集成記憶體控制器單元並包括I/O控制邏輯。圖131闡明其不僅記憶體13032、13034被耦合至CL 13072、13082,同時其I/O裝置13114亦被耦合至控制邏輯13072、13082。舊有I/O裝置13115被耦合至晶片組13090。
現在參考圖132,其顯示依據本發明之一實施例的SoC 13200之方塊圖。圖128中之類似元件具有類似的參考數字。同時,虛線方塊為更多先進SoC上之選擇性特徵。於圖132中,互連單元13202被耦合至:應用程式處理器13210,其包括一組一或更多核心12802A-N(其包括快取單元12804A-N)、及共用快取單元12806;系統代理單元12810;匯流排控制器單元12816;集成記憶體控制器單元12814;一組一或更多共處理器13220,其可包括集成圖形邏輯、影像處理器、音頻處理器、及視頻處理器;靜態隨機存取記憶體(SRAM)單元13230;直接記憶體存取(DMA)單元13232;及顯示單元13240,用以耦合至一或更多外部顯示。於一實施例中,共處理器13220包括特殊用途處理器,諸如(例如)網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器,等等。
文中所揭露之機制的實施例可被實施以硬體、軟體、韌體、或此等實施方式之組合。本發明之實施例可被實施為電腦程式或程式碼,其被執行於可編程系統上,該可編程系統包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
程式碼(諸如圖130中所示之碼13030)可被應用於輸入指令以履行文中所述之功能並產生輸出資訊。輸出資訊可被應用於一或更多輸出裝置,以已知的方式。為了本申請案之目的,處理系統包括任何系統,其具有處理器,諸如(例如)數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器。
程式碼可被實施以高階程序或目標導向的編程語言來與處理系統通訊。程式碼亦可被實施以組合或機器語言,假如想要的話。事實上,文中所述之機制在範圍上不限於任何特定編程語言。於任何情況下,該語言可為編譯或解讀語言。
至少一實施例之一或更多形態可由其儲存在機器可讀取媒體上之代表性指令所實施,該機器可讀取媒體代表處理器內之各個邏輯,當由機器讀取時造成該機器製造邏輯以履行文中所述之技術。此等表示(已知為「IP核心」)可被儲存在有形的、機器可讀取媒體上,且被供應至各個消費者或製造設施以載入其實際上製造該邏輯或處理器之製造機器。
此類機器可讀取儲存媒體可包括(無限制)由機器或裝置所製造或形成之物件的非暫態、有形配置,包括:儲存媒體,諸如硬碟、包括軟碟、光碟、微型碟唯讀記憶體(CD-ROM)、微型碟可再寫入(CD-RW)、及磁光碟等任何其他類型的碟片;半導體裝置,諸如唯讀記憶體(ROM)、諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可編程唯讀記憶體(EPROM)等隨機存取記憶體(RAM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或者適於儲存電子指令之任何其他類型的媒體。
因此,本發明之實施例亦包括含有指令或含有諸如硬體描述語言(HDL)等設計資料之非暫態、有形的機器可讀取媒體,該硬體描述語言(HDL)係定義文中所述之結構、電路、設備、處理器及/或系統特徵。此類實施例亦可被稱為程式產品。仿真 ( 包括二元翻譯、碼變形,等等 )
於某些情況下,指令轉換器可被用以將來自來源指令集之指令轉換至目標指令集。例如,指令轉換器可將指令翻譯(例如,使用靜態二元翻譯、動態二元翻譯,包括動態編譯)、變形、仿真、或者轉換至一或更多其他指令以供由核心所處理。指令轉換器可被實施以軟體、硬體、韌體、或其組合。指令轉換器可位於處理器上、處理器外、或者部分於處理器上而部分於處理器外。
圖133為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。於所述之實施例中,指令轉換器為一種軟體指令轉換器,雖然替代地該指令轉換器亦可被實施以軟體、韌體、硬體、或其各種組合。圖133顯示一種高階語言13302之程式可使用x86編譯器13304而被編譯以產生x86二元碼13306,其可由具有至少一x86指令集核心之處理器13316來本機地執行。具有至少一x86指令集核心之處理器13316代表任何處理器,其可藉由可相容地執行或者處理以下事項來履行實質上如一種具有至少一x86指令集核心之Intel處理器的相同功能:(1)Intel x86指令集核心之指令集的實質部分或者(2)針對運作於具有至少一x86指令集核心之Intel處理器上的應用程式或其他軟體之物件碼版本,以獲得如具有至少一x86指令集核心之Intel處理器的相同結果。x86編譯器13304代表一種編譯器,其可操作以產生x86二元碼13306(例如,物件碼),其可(具有或沒有額外鏈結處理)被執行於具有至少一x86指令集核心之處理器13316上。類似地,圖133顯示高階語言13302之程式可使用替代的指令集編譯器13308而被編譯以產生替代的指令集二元碼13310,其可由沒有至少一x86指令集核心之處理器13314來本機地執行(例如,具有其執行MIPS Technologies of Sunnyvale, CA之MIPS指令集及/或其執行ARM Holdings of Sunnyvale, CA之ARM指令集的核心之處理器)。指令轉換器13312被用以將x86二元碼13306轉換為其可由沒有至少一x86指令集核心之處理器13314來本機地執行的碼。已轉換碼不太可能相同於替代的指令集二元碼13310,因為能夠執行此功能之指令很難製造;然而,已轉換碼將完成一般性操作並由來自替代指令集之指令所組成。因此,指令轉換器13312代表軟體、韌體、硬體、或其組合,其(透過仿真、模擬或任何其他程序)容許處理器或其他不具有x86指令集處理器或核心的電子裝置來執行x86二元碼13306。
範例實施方式、實施例、及特徵和形態之特定組合被詳述於下。這些範例為指示性,而非限制性。
範例1.一種系統包括:複數異質處理元件;硬體異質排程器,用以調度指令以供執行於該些複數異質處理元件之一或更多者上,該些指令係相應於碼片段以供由該些複數異質處理元件之該些一或更多者所處理,以致其該些指令針對該些複數異質處理元件之該些一或更多者的至少一者為本機指令。
範例2:範例1之系統,以致其該些複數異質處理元件包含依序處理器核心、失序處理器核心、及緊縮資料處理器核心。
範例3:範例2之系統,以致其該些複數異質處理元件進一步包含加速器。
範例4:範例1-3的任一者之系統,以致其該硬體異質排程器進一步包括:程式階段檢測器,用以檢測碼片段之程式階段;以致其該些複數異質處理元件包括具有第一微架構之第一處理元件及具有不同於該第一微架構的第二微架構之第二處理元件;以致其該程式階段為複數程式階段之一,包括第一階段及第二階段且指令之該調度係部分地根據該已檢測程式階段;及以致其藉由該第一處理元件之該碼片段的處理係用以產生每瓦特特性之增進的性能,相較於藉由該第二處理元件之該碼片段的處理。
範例5:範例1-4的任一者之系統,以致其該硬體異質排程器進一步包含:選擇器,用以選擇該些複數處理元件之處理元件的類型來執行該已接收碼片段並經由調度以排程該選定類型的處理元件之處理元件上的該碼片段。
範例6:範例1之系統,以致其該碼片段為與軟體執行緒相關的一或更多指令。
範例7:範例5-6的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例8:範例5-7的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為用以支援緊密算術基元之電路。
範例9:範例5-7的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為加速器。
範例10:範例5-9的任一者之系統,以致其資料平行程式階段包含其係使用相同控制流而被同時地處理之資料元件。
範例11:範例5-10的任一者之系統,以致其針對執行緒平行程式階段,該選定類型的處理元件為純量處理核心。
範例12:範例5-11的任一者之系統,以致其執行緒平行程式階段包含資料相依分支,其係使用獨特的控制流。
範例13:範例2-12的任一者之系統,以致其針對串列程式階段,該選定類型的處理元件為失序核心。
範例14:範例2-13的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例15:範例1-14的任一者之系統,以致其該硬體異質排程器係用以支援多數碼類型,包括編譯、本質、組合、庫、中間、卸載、及裝置。
範例16:範例5-15的任一者之系統,以致其該硬體異質排程器係用以仿真功能,當該選定類型的處理元件無法本機地處置該碼片段時。
範例17:範例1-15的任一者之系統,以致其該硬體異質排程器係用以仿真功能,當可用的數個硬體執行緒被超額預約時。
範例18:範例5-15的任一者之系統,以致其該硬體異質排程器係用以仿真功能,當該選定類型的處理元件無法本機地處置該碼片段時。
範例19:範例5-18的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之該選擇對於使用者是透明的。
範例20:範例5-19的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之該選擇對於作業系統是透明的。
範例21:範例1-20的任一者之系統,以致其該硬體異質排程器係用以提出同質多處理器編程模型,用以使各執行緒對於程式設計師呈現為如同其正執行於純量核心上。
範例22:範例21之系統,以致其該提出的同質多處理器編程模型係用以提出針對全指令集之支援的表象。
範例23:範例1-22的任一者之系統,以致其該些複數異質處理元件係用以共用記憶體位址空間。
範例24:範例1-23的任一者之系統,以致其該硬體異質排程器包括二元轉譯器,其係用以被執行於該些異質處理元件之一上。
範例25:範例5-24的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之預設選擇為潛時最佳化核心。
範例26:範例1-25的任一者之系統,以致其該異質硬體排程器係用以選擇一用於該些已調度指令之多協定介面上的協定。
範例27:範例26的任一者之系統,以致其由該多協定匯流排介面所支援之第一協定包含記憶體介面協定,以供被用來存取系統記憶體位址空間。
範例28:範例26-27的任一者之系統,以致其由該多協定匯流排介面所支援之第二協定包含快取同調性協定,用以維持同調性於該加速器之本地記憶體與主機處理器(包括主機快取階層和系統記憶體)之記憶體子系統中所儲存的資料之間。
範例29:範例26-28的任一者之系統,以致其由該多協定匯流排介面所支援之第三協定包含支援以下之串列鏈結協定:裝置發現、暫存器存取、組態、初始化、中斷、直接記憶體存取、及位址轉譯服務。
範例30:範例29之系統,以致其該第三協定包含周邊組件介面快速(PCIe)協定。
範例31:一種系統包括:複數異質處理元件,於一包括加速器之異質處理器中;記憶體,用以儲存其為由異質處理器中之複數異質處理元件的至少一者可執行的程式碼,該程式碼包括:硬體異質排程器,用以調度指令以供執行於該些複數異質處理元件之一或更多者上,該些指令係相應於碼片段以供由該些複數異質處理元件之該些一或更多者所處理,以致其該些指令針對該些複數異質處理元件之該些一或更多者的至少一者為本機指令。
範例32:範例31之系統,以致其該些複數異質處理元件包含依序處理器核心、失序處理器核心、及緊縮資料處理器核心。
範例33:範例32之系統,以致其該些複數異質處理元件進一步包含加速器。
範例34:範例31-33的任一者之系統,以致其該異質排程器進一步包括:程式階段檢測器,用以檢測該碼片段之程式階段;以致其該些複數異質處理元件包括具有第一微架構之第一處理元件及具有不同於該第一微架構的第二微架構之第二處理元件;以致其該程式階段為複數程式階段之一,包括第一階段及第二階段且指令之該調度係部分地根據該已檢測程式階段;及以致其藉由該第一處理元件之該碼片段的處理係用以產生每瓦特特性之增進的性能,相較於藉由該第二處理元件之該碼片段的處理。
範例35:範例31-34的任一者之系統,以致其該異質排程器進一步包含:選擇器,用以選擇該些複數處理元件之處理元件的類型來執行該已接收碼片段並經由調度以排程該選定類型的處理元件之處理元件上的該碼片段。
範例36:範例31-35的任一者之系統,以致其該碼片段為與軟體執行緒相關的一或更多指令。
範例37:範例34-36的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例38:範例34-37的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為用以支援緊密算術基元之電路。
範例39:範例34-38的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為加速器。
範例40:範例34-39的任一者之系統,以致其資料平行程式階段包含其係使用相同控制流而被同時地處理之資料元件。
範例41:範例30-35的任一者之系統,以致其針對執行緒平行程式階段,該選定類型的處理元件為純量處理核心。
範例42:範例30-36的任一者之系統,以致其執行緒平行程式階段包含資料相依分支,其係使用獨特的控制流。
範例43:範例30-37的任一者之系統,以致其針對串列程式階段,該選定類型的處理元件為失序核心。
範例44:範例30-38的任一者之系統,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例45:範例31-44的任一者之系統,以致其該異質排程器係支援多數碼類型,包括編譯、本質、組合、庫、中間、卸載、及裝置。
範例46:範例31-45的任一者之系統,以致其該異質排程器係用以仿真功能,當該選定類型的處理元件無法本機地處置該碼片段時。
範例47:範例31-46的任一者之系統,以致其該異質排程器係用以仿真功能,當可用的數個硬體執行緒被超額預約時。
範例48:範例31-47的任一者之系統,以致其該異質排程器係用以仿真功能,當該選定類型的處理元件無法本機地處置該碼片段時。
範例50:範例31-49的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之該選擇對於使用者是透明的。
範例51:範例31-50的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之該選擇對於作業系統是透明的。
範例52:範例31-51的任一者之系統,以致其該異質排程器係用以提出同質多處理器編程模型,用以使各執行緒對於程式設計師呈現為如同其正執行於純量核心上。
範例53:範例52的任一者之系統,以致其該提出的同質多處理器編程模型係用以提出針對全指令集之支援的表象。
範例54a:範例31-53的任一者之系統,以致其該些複數異質處理元件係用以共用記憶體位址空間。
範例54b:範例31-53的任一者之系統,以致其該異質排程器包括二元轉譯器,其係用以被執行於該些異質處理元件之一上。
範例55:範例31-54的任一者之系統,以致其該些複數異質處理元件之處理元件的類型之預設選擇為潛時最佳化核心。
範例56:範例31-55的任一者之系統,以致其該異質軟體排程器係用以選擇一用於該些已調度指令之多協定介面上的協定。
範例57:範例56的任一者之系統,以致其由該多協定匯流排介面所支援之第一協定包含記憶體介面協定,以供被用來存取系統記憶體位址空間。
範例58:範例56-57的任一者之系統,以致其由該多協定匯流排介面所支援之第二協定包含快取同調性協定,用以維持同調性於該加速器之本地記憶體與主機處理器(包括主機快取階層和系統記憶體)之記憶體子系統中所儲存的資料之間。
範例59:範例56-58的任一者之系統,以致其由該多協定匯流排介面所支援之第三協定包含支援以下之串列鏈結協定:裝置發現、暫存器存取、組態、初始化、中斷、直接記憶體存取、及位址轉譯服務。
範例60:範例59之系統,以致其該第三協定包含周邊組件介面快速(PCIe)協定。
範例61:一種方法包括:接收複數指令;調度該些已接收的複數指令以供執行於複數異質處理元件之一或更多者上,該些已接收的複數指令係相應於碼片段以供由該些複數異質處理元件之該些一或更多者所處理,以致其該些複數指令針對該些複數異質處理元件之該些一或更多者的至少一者為本機指令。
範例62:範例61之方法,以致其該些複數異質處理元件包含依序處理器核心、失序處理器核心、及緊縮資料處理器核心。
範例63:範例62之方法,以致其該些複數異質處理元件進一步包含加速器。
範例64:範例61-63的任一者之方法,進一步包括:檢測該碼片段之程式階段;以致其該些複數異質處理元件包括具有第一微架構之第一處理元件及具有不同於該第一微架構的第二微架構之第二處理元件;以致其該程式階段為複數程式階段之一,包括第一階段及第二階段;及以致其藉由該第一處理元件之該碼片段的處理係用以產生每瓦特特性之增進的性能,相較於藉由該第二處理元件之該碼片段的處理。
範例65:範例61-64的任一者之方法,進一步包括:選擇該些複數處理元件之處理元件的類型來執行該已接收碼片段並排程該選定類型的處理元件之處理元件上的該碼片段。
範例66:範例61-63的任一者之方法,以致其碼片段為與軟體執行緒相關的一或更多指令。
範例67:範例64-66的任一者之方法,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例68:範例64-66的任一者之方法,以致其針對資料平行程式階段,該選定類型的處理元件為用以支援緊密算術基元之電路。
範例69:範例64-68的任一者之方法,以致其針對資料平行程式階段,該選定類型的處理元件為加速器。
範例70:範例64-69的任一者之方法,以致其資料平行程式階段之特徵在於其使用相同控制流而被同時地處理之資料元件。
範例71:範例64-70的任一者之方法,以致其針對執行緒平行程式階段,該選定類型的處理元件為純量處理核心。
範例72:範例64-71的任一者之方法,以致其執行緒平行程式階段之特徵在於其使用獨特的控制流之資料相依分支。
範例73:範例64-72的任一者之方法,以致其針對串列程式階段,該選定類型的處理元件為失序核心。
範例74:範例64-73的任一者之方法,以致其針對資料平行程式階段,該選定類型的處理元件為一用以執行單指令、多資料(SIMD)指令之處理核心。
範例75:範例61-74的任一者之方法,進一步包括:仿真功能,當該選定類型的處理元件無法本機地處置該碼片段時。
範例76:範例61-74的任一者之方法,進一步包括:仿真功能,當可用的數個硬體執行緒被超額預約時。
範例77:範例61-76的任一者之方法,以致其該些複數異質處理元件之處理元件的類型之該選擇對於使用者是透明的。
範例78:範例61-77的任一者之方法,以致其該些複數異質處理元件之處理元件的類型之該選擇對於作業系統是透明的。
範例79:範例61-74的任一者之方法,進一步包括:提出同質多處理器編程模型,用以使各執行緒呈現為如同其正執行於純量核心上。
範例80:範例79之方法,以致其該提出的同質多處理器編程模型係用以提出針對全指令集之支援的表象。
範例81:範例61-79的任一者之方法,以致其該些複數異質處理元件係用以共用記憶體位址空間。
範例82:範例61-81的任一者之方法,進一步包括:二元轉譯該碼片段以被執行於該些異質處理元件之一上。
範例83:範例61-82的任一者之方法,以致其該些複數異質處理元件之處理元件的類型之預設選擇為潛時最佳化核心。
範例84:一種儲存指令之非暫態機器可讀取媒體,當被硬體處理器執行時該些指令係履行範例51-83之一的方法。
範例85:一種方法包括:接收異質排程器中之碼片段;判定該碼片段是否於平行階段;當該碼片段非於平行階段時,選擇潛時敏感處理元件以執行該碼片段;當該碼片段係於平行階段時,判定平行性之類型,並針對執行緒平行碼片段,選擇純量處理元件以執行該碼片段,及針對資料平行碼片段,判定該資料平行碼片段之資料佈局:針對緊縮資料佈局選擇單指令、多資料(SIMD)處理元件與算術基元處理元件之一,及針對隨機資料佈局選擇其使用收集指令的SIMD處理元件、空間計算陣列、或來自純量核心之陣列的純量核心之一;及傳輸該碼片段至處理元件以供執行。
範例86:範例85之方法,進一步包括:在判定該碼片段是否於平行階段之前判定該碼片段何時接受卸載至加速器;當該碼片段接受卸載時傳輸該碼片段至該加速器。
範例87:範例85-86的任一者之方法,以致其該判定該碼片段是否於平行階段係根據測得的資料相依性、指令類型、及控制流指令之一或更多者。
範例88:範例87之方法,以致其單指令、多資料指令之類型的指令係指示平行階段。
範例89:範例85-88的任一者之方法,以致其由該異質排程器所處置之各作業系統執行緒被指派一邏輯執行緒識別符。
範例90:範例89之方法,以致其該異質排程器係利用邏輯執行緒識別符之條狀映射以致其各邏輯執行緒識別符被映射至處理元件類型、處理元件識別符、及執行緒識別符之元組。
範例91:範例90之方法,以致其從邏輯執行緒識別符至處理元件識別符和執行緒識別符之映射係經由除法及模除而被計算。
範例92:範例91之方法,以致其從邏輯執行緒識別符至處理元件識別符和執行緒識別符之映射被固定以保存執行緒偏好。
範例93:範例90之方法,以致其從邏輯執行緒識別符至處理元件類型之映射係由該異質排程器所履行。
範例94:範例93之方法,以致其從邏輯執行緒識別符至處理元件類型之映射是有彈性的以適應未來的處理元件類型。
範例95:範例91之方法,以致其該異質排程器係用以利用核心群組以致其該些核心群組之至少一者包含至少一失序元組及純量和SIMD元組,其邏輯執行緒識別符係映射至該相同的失序元組。
範例96:範例95之方法,以致其非平行階段係由一執行緒所判定該執行緒具有其屬於該些核心群組之一的執行緒中之一獨特頁目錄基礎暫存器值。
範例97:範例96之方法,以致其屬於一程序之執行緒係共用相同的位址空間、頁表、及頁目錄基礎暫存器值。
範例98:範例85-97的任一者之方法,進一步包括檢測事件,以致其該事件為以下各者之一:執行緒喚醒命令;寫入至頁目錄基礎暫存器;睡眠命令;該執行緒中之階段改變;及指示所欲再配置至不同核心之一或更多指令。
範例99:範例98之方法,進一步包括:當該事件為執行緒喚醒命令時,判定該碼片段係於平行階段,計算其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之數目;判定計算出的處理元件之該數目是否大於一;當其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之該數目的該計數為一時,則該執行緒係於串列階段;而當其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之該數目的該計數不為一時,則該執行緒係於平行階段。
範例100:範例98之方法,進一步包括:當該事件為執行緒睡眠命令時:清除與該執行緒相關的運行旗標、計算其共用該相同頁表基礎指針為該受影響執行緒的處理元件之執行緒的數目、判定失序處理元件是否為閒置;當該頁表基礎指針由該核心群組中之剛好一執行緒所共用時,則該共用執行緒被移動自失序處理元件,當該頁表基礎指針由多於一執行緒所共用時,則該核心群組之第一運行執行緒被遷移至該失序處理元件。
範例101:範例100之方法,以致其該執行緒睡眠命令為停止、等待進入及逾時、或暫停命令之一。
範例102:範例98之方法,進一步包括:當該事件為階段改變時:當執行緒之邏輯執行緒識別符指示其正運行於純量處理元件上且有SIMD指令時,則將該執行緒遷移至SIMD處理元件;當執行緒之邏輯執行緒識別符指示其正運行於SIMD處理元件上且沒有SIMD指令時,則將該執行緒遷移至純量處理元件。
範例103:範例85-102的任一者之方法,進一步包括:在傳輸該碼片段之前將該碼片段轉譯為較佳地配適該選定的處理元件。
範例104:範例103之方法,以致其該異質排程器包括用以履行該轉譯之二元轉譯器。
範例105:範例103之方法,以致其該異質排程器包括用以履行該轉譯之及時編譯器。
範例106:範例85-105的任一者之方法,以致其該方法進一步包含範例61-83之方法範例的任一者之方法的步驟。
範例107:一種系統包括:複數異質處理元件;異質排程器,用以判定碼片段之階段並將該碼片段傳輸至該些複數異質處理元件之一以供至少部分地根據該已判定階段之執行。
範例108:範例107之系統,以致其該異質排程器係用以:判定該碼片段是否於平行階段;當該碼片段非於平行階段時,選擇潛時敏感處理元件以執行該碼片段;當該碼片段係於平行階段時,判定平行性之類型,並針對執行緒平行碼片段,選擇純量處理元件以執行該碼片段,及針對資料平行碼片段,判定該資料平行碼片段之資料佈局:針對緊縮資料佈局選擇單指令、多資料(SIMD)處理元件與算術基元處理元件之一,及針對隨機資料佈局選擇其使用收集指令的SIMD處理元件、空間計算陣列、或來自純量核心之陣列的純量核心之一。
範例109:範例108之系統,以致其該異質排程器係用以進一步:在判定該碼片段是否於平行階段之前判定該碼片段何時接受卸載至加速器;當該碼片段接受卸載時傳輸該碼片段至該加速器。
範例110:範例108-109的任一者之系統,以致其該異質排程器係用以進一步:判定該碼片段是否於平行階段係根據測得的資料相依性、指令類型、及控制流指令之一或更多者。
範例111:範例110之系統,以致其單指令、多資料指令之類型的指令係指示平行階段。
範例112:範例108-111的任一者之系統,以致其由該異質排程器所處置之各作業系統執行緒被指派一邏輯執行緒識別符。
範例113:範例112之系統,以致其該異質排程器係利用邏輯執行緒識別符之條狀映射以致其各邏輯執行緒識別符被映射至處理元件類型、處理元件識別符、及執行緒識別符之元組。
範例114:範例112之系統,以致其從邏輯執行緒識別符至處理元件識別符和執行緒識別符之映射係經由除法及模除而被計算。
範例115:範例114之系統,以致其從邏輯執行緒識別符至處理元件識別符和執行緒識別符之映射被固定以保存執行緒偏好。
範例116:範例115之系統,以致其從邏輯執行緒識別符至處理元件類型之映射係由該異質排程器所履行。
範例117:範例116之系統,以致其從邏輯執行緒識別符至處理元件類型之映射是有彈性的以適應未來的處理元件類型。
範例118:範例108-117之系統,以致其該異質排程器係用以利用核心群組以致其一核心群組包含至少一失序元組及純量和SIMD元組,其邏輯執行緒識別符係映射至該相同的失序元組。
範例119:範例118之系統,以致其非平行階段係由一執行緒所判定該執行緒具有其屬於該些核心群組之一的執行緒中之一獨特頁目錄基礎暫存器值。
範例120:範例119之系統,以致其屬於一程序之執行緒係共用相同的位址空間、頁表、及頁目錄基礎暫存器值。
範例121:範例108-120的任一者之系統,以致其該異質排程器係用以:檢測事件,以致其該事件為以下各者之一:執行緒喚醒命令;寫入至頁目錄基礎暫存器;睡眠命令;該執行緒中之階段改變;及指示所欲再配置之一或更多指令。
範例122:範例121之系統,以致其該異質排程器係用以:當該事件為執行緒喚醒命令時:判定該碼片段係於平行階段,計算其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之數目;判定計算出的處理元件之該數目是否大於一;當其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之該數目的該計數為一時,則該執行緒係於串列階段;而當其共用相同頁表基礎指針為其醒來之該執行緒的處理元件之該數目的該計數不為一時,則該執行緒係於平行階段。
範例123:範例121之系統,以致其該異質排程器係用以:當該事件為執行緒睡眠命令時:清除與該執行緒相關的運行旗標、計算其共用該相同頁表基礎指針為該受影響執行緒的處理元件之執行緒的數目、判定失序處理元件是否為閒置;當該頁表基礎指針由該核心群組中之剛好一執行緒所共用時,則該共用執行緒被移動自失序處理元件,當該頁表基礎指針由多於一執行緒所共用時,則該核心群組之第一運行執行緒被遷移至該失序處理元件。
範例124:範例123之系統,以致其該執行緒睡眠命令為停止、等待進入及逾時、或暫停命令之一。
範例125:範例121之系統,以致其該異質排程器係用以:當該事件為階段改變時:當執行緒之邏輯執行緒識別符指示其正運行於純量處理元件上且有SIMD指令時,則將該執行緒遷移至SIMD處理元件;當執行緒之邏輯執行緒識別符指示其正運行於SIMD處理元件上且沒有SIMD指令時,則將該執行緒遷移至純量處理元件。
範例126:範例108-125的任一者之系統,以致其該異質排程器係用以:在傳輸該碼片段之前將該碼片段轉譯為較佳地配適該選定的處理元件。
範例127:範例126之系統,以致其該異質排程器包括儲存於非暫態機器可讀取媒體中之二元轉譯器,用以於執行時履行該轉譯。
範例128:範例126之系統,以致其該異質排程器包括儲存於非暫態機器可讀取媒體中之及時編譯器305,用以於執行時履行該轉譯。
範例129:範例108-128的任一者之系統,進一步包括:用以儲存程式碼之記憶體,該程式碼可由異質處理器中之複數異質處理元件的至少一者所執行以提供該異質排程器。
範例130:範例108-128的任一者之系統,以致其該異質排程器包含電路。
範例131:一種處理器,包括:處理器核心,該處理器核心包括:解碼器,用以解碼對於該處理器核心為本機的至少一指令;一或更多執行單元,用以執行至少一已解碼指令,該至少一已解碼指令係相應於加速開始指令,該加速開始指令係用以指示將被卸載至加速器之碼的區之開始。
範例132:範例131之處理器,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以處理碼之該區時,碼之該區將由該處理核心所處理。
範例133:範例131之處理器,以致其回應於執行相應於該加速開始指令之該至少一已解碼指令,該處理器核心係用以從執行之第一模式變遷至執行之第二模式。
範例134:範例133之處理器,以致其:於執行之該第一模式下,該處理器核心係用以檢查自行修改碼;及於執行之該第二模式下,該處理器核心係用以除能檢查自行修改碼。
範例135:範例134之處理器,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例136:範例133-135的任一者之處理器,以致其:於執行之該第一模式下,記憶體一致性模型限制係藉由放寬記憶體排序需求而被弱化。
範例137:範例133-136的任一者之處理器,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例138:一種方法,包括:解碼對於處理器核心為本機的指令;執行相應於加速開始指令之已解碼指令,該加速開始指令係用以指示將被卸載至加速器之碼的區之開始。
範例139:範例138之方法,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以處理碼之該區時,碼之該區將由該處理核心所處理。
範例140:範例138之方法,以致其回應於執行相應於該加速開始指令之該已解碼指令,該處理器核心係用以從執行之第一模式變遷至執行之第二模式。
範例141:範例140之方法,以致其:於執行之該第一模式下,該處理器核心係用以檢查自行修改碼;及於執行之該第二模式下,該處理器核心係用以除能檢查自行修改碼。
範例142:範例141之方法,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例143:範例140-142的任一者之方法,以致其:於執行之該第一模式下,記憶體一致性模型限制係藉由放寬記憶體排序需求而被弱化。
範例144:範例140-143的任一者之方法,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例145:一種非暫態機器可讀取媒體,其係儲存當由處理器所執行時致使該處理器履行方法之指令,該方法包括:解碼對於處理器核心為本機的指令;執行相應於加速開始指令之已解碼指令,該加速開始指令係用以指示將被卸載至加速器之碼的區之開始。
範例146:範例145之方法,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以處理碼之該區時,碼之該區將由該處理核心所處理。
範例147:範例145之方法,以致其回應於執行相應於該加速開始指令之該已解碼指令,該處理器核心係用以從執行之第一模式變遷至執行之第二模式。
範例148:範例147之方法,以致其:於執行之該第一模式下,該處理器核心係用以檢查自行修改碼;及於執行之該第二模式下,該處理器核心係用以除能檢查自行修改碼。
範例149:範例148之方法,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例150:範例148-149的任一者之方法,以致其:於執行之該第一模式下,記憶體一致性模型限制係藉由放寬記憶體排序需求而被弱化。
範例151:範例148-150的任一者之方法,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例152:一種系統,包括:處理器核心,該處理器核心包括:解碼器,用以解碼對於該處理器核心為本機的至少一指令;一或更多執行單元,用以執行至少一已解碼指令,該至少一已解碼指令係相應於加速開始指令,該加速開始指令係用以指示將被卸載至加速器之碼的區之開始。
範例153:範例152之系統,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以處理碼之該區時,碼之該區將由該處理核心所處理。
範例154:範例152之系統,以致其回應於執行相應於該加速開始指令之該至少一已解碼指令,該處理器核心係用以從執行之第一模式變遷至執行之第二模式。
範例155:範例154之系統,以致其:於執行之該第一模式下,該處理器核心係用以檢查自行修改碼;及於執行之該第二模式下,該處理器核心係用以除能檢查自行修改碼。
範例156:範例155之系統,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例157:範例152-156的任一者之處理器,以致其:於執行之該第一模式下,記憶體一致性模型限制係藉由放寬記憶體排序需求而被弱化。
範例158:範例152-157的任一者之處理器,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例159:一種處理器,包括:處理器核心,該處理器核心包括:解碼器,用以解碼對於該處理器核心為本機的指令;一或更多執行單元,用以執行相應於加速結束指令之已解碼指令,該加速結束指令係用以指示將被卸載至加速器之碼的區之結束。
範例160:範例159之處理器,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以接收並處理碼之該區時,碼之該區將由該處理核心所處理。
範例161:範例159之處理器,以致其碼之該區係藉由執行相應於加速開始指令之已解碼指令而被描繪,該加速開始指令係用以將該處理器核心從執行之第一模式變遷至執行之第二模式。
範例162:範例161之處理器,以致其:於執行之該第一模式下,該處理器係用以檢查自行修改碼;及於執行之該第二模式下,該處理器係用以除能檢查自行修改碼。
範例163:範例162之處理器,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例164:範例161-163的任一者之處理器,以致其:於執行之該第一模式下,記憶體一致性模型限制被弱化。
範例165:範例161-164的任一者之處理器,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例166:範例159-165的任一者之處理器,以致其:該加速開始指令之該執行係選通該處理器核心上之碼的該區之執行直到該加速結束指令被執行為止。
範例167:一種方法,包括:解碼對於該處理器核心為本機的指令;執行相應於加速結束指令之已解碼指令,該加速結束指令係用以指示將被卸載至加速器之碼的區之結束。
範例168:範例167之方法,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以接收並處理碼之該區時,碼之該區將由該處理核心所處理。
範例169:範例167之方法,以致其碼之該區係藉由執行相應於加速開始指令之已解碼指令而被描繪,該加速開始指令係用以將該處理器核心從執行之第一模式變遷至執行之第二模式。
範例170:範例169之方法,以致其:於執行之該第一模式下,該處理器係用以檢查自行修改碼;及於執行之該第二模式下,該處理器係用以除能檢查自行修改碼。
範例171:範例170之方法,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例172:範例169-171的任一者之方法,以致其:於執行之該第一模式下,記憶體一致性模型限制被弱化。
範例173:範例169-172的任一者之方法,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例174:範例167-173的任一者之方法,以致其:該加速開始指令之該執行係選通該處理器核心上之碼的該區之執行直到該加速結束指令被執行為止。
範例175:一種非暫態機器可讀取媒體,其係儲存當由處理器所執行時致使該處理器履行方法之指令,該方法包括:解碼對於處理器核心為本機的指令;執行相應於加速結束指令之已解碼指令,該加速結束指令係用以指示將被卸載至加速器之碼的區之結束。
範例176:範例175之非暫態機器可讀取媒體,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以接收並處理碼之該區時,碼之該區將由該處理核心所處理。
範例177:範例175之非暫態機器可讀取媒體,以致其碼之該區係藉由執行相應於加速開始指令之已解碼指令而被描繪,該加速開始指令係用以將該處理器核心從執行之第一模式變遷至執行之第二模式。
範例178:範例177之非暫態機器可讀取媒體,以致其:於執行之該第一模式下,該處理器係用以檢查自行修改碼;及於執行之該第二模式下,該處理器係用以除能檢查自行修改碼。
範例179:範例178之非暫態機器可讀取媒體,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例180:範例177-179的任一者之非暫態機器可讀取媒體,以致其:於執行之該第一模式下,記憶體一致性模型限制被弱化。
範例181:範例177-180的任一者之非暫態機器可讀取媒體,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例182:範例175-181的任一者之非暫態機器可讀取媒體,以致其:該加速開始指令之該執行係選通該處理器核心上之碼的該區之執行直到該加速結束指令被執行為止。
範例183:一種系統,包括:處理器核心,該處理器核心包括:解碼器,用以解碼對於該處理器核心為本機的指令;一或更多執行單元,用以執行相應於加速結束指令之已解碼指令,該加速結束指令係用以指示將被卸載至加速器之碼的區之結束;加速器,用以執行該已卸載指令。
範例184:範例183之系統,以致其碼之該區將根據目標加速器是否被耦合至該處理器核心並可用以處理碼之該區而被卸載,以致其當該目標加速器未被耦合至該處理器核心以接收並處理碼之該區時,碼之該區將由該處理核心所處理。
範例185:範例184之系統,以致其碼之該區係藉由執行相應於加速開始指令之已解碼指令而被描繪,該加速開始指令係用以將該處理器核心從執行之第一模式變遷至執行之第二模式。
範例186:範例185之系統,以致其:於執行之該第一模式下,該處理器係用以檢查自行修改碼;及於執行之該第二模式下,該處理器係用以除能檢查自行修改碼。
範例187:範例186之系統,以致其:為了除能自行修改碼檢查,自行修改碼檢測電路被除能。
範例188:範例185-187的任一者之系統,以致其:於執行之該第一模式下,記憶體一致性模型限制被弱化。
範例189:範例185-188的任一者之系統,以致其:於執行之該第一模式下,浮點語意係藉由設定浮點控制字元暫存器而被更改。
範例190:範例183-190的任一者之系統,以致其:該加速開始指令之該執行係選通該處理器核心上之碼的該區之執行直到該加速結束指令被執行為止。
範例191:一種系統,包括:加速器,用以執行執行緒;
處理器核心;及記憶體,其中儲存有用以實施異質排程器之軟體,以致其當由該處理器核心所執行時該異質排程器係用以:檢測一適於該加速器上之潛在執行的執行緒中之碼序列、選擇該加速器以執行該測得的碼序列、傳輸該測得的碼序列至該選定的加速器。
範例192:範例191之系統,進一步包括:複數異質處理元件,用以執行不適於藉由該加速器之執行的該執行緒之程式階段。
範例193:範例191-192的任一者之系統,以致其該異質排程器進一步包含:型態匹配器:用以藉由比較該碼序列與預定組的型態來辨識該碼序列。
範例194:範例193之系統,以致其該預定組的型態被儲存於該記憶體中。
範例195:範例191-194的任一者之系統,以致其該異質排程器係用以使用性能監督來辨識其不具有型態匹配之碼,並藉由將該處理器核心組態成進行以下之一或更多者來調整與該執行緒相關的操作模式:忽略自行修改碼、弱化記憶體一致性模型限制、更改浮點語意、改變性能監督、及更改架構旗標使用。
範例196:範例191-195的任一者之系統,以致其該異質排程器進一步包含轉譯模組,用以將該已辨識碼轉譯為加速器碼以供該加速器執行。
範例197:範例191-196的任一者之系統,以致其該處理器核心包含:型態匹配電路,用以使用儲存的型態來檢測該執行緒中之碼序列。
範例198:範例191-197的任一者之系統,以致其該處理器核心係用以維持該系統中所執行之各執行緒的運行狀態。
範例199:範例191-197的任一者之系統,以致其該異質排程器係用以維持該系統中所執行之各執行緒的狀態。
範例200:範例191-199的任一者之系統,以致其該異質排程器係用以根據處理器元件資訊、被追蹤的執行緒、及測得的碼序列之一或更多者來選擇該加速器。
範例201:一種系統,包括:複數異質處理元件;異質排程器電路,耦合至該些複數處理元件,該異質排程器電路包括:執行緒和處理元件追蹤器,其能夠維持各執行中執行緒及各處理元件之運行狀態;選擇器,用以選擇該些複數異質處理元件之處理元件的類型,用來處理碼片段並排程該些複數異質處理元件之一上的該碼片段以供根據來自該執行緒和處理元件追蹤器之狀態及處理元件資訊的執行。
範例202:範例201之系統,進一步包括:記憶體,用以儲存可由處理器核心所執行的軟體,該軟體係用以檢測執行緒中之碼序列以供一加速器上之潛在執行,該加速器為耦合至該異質排程器電路的該些複數異質處理元件之一。
範例203:範例202之系統,以致其該軟體型態匹配器係用以從已儲存型態辨識該碼序列。
範例204:範例201-203的任一者之系統,以致其該異質排程器係用以將該已辨識碼轉譯為加速器碼。
範例205:範例201-204的任一者之系統,以致其該選擇器為由該異質排程器電路所執行的有限狀態機器。
範例206:一種方法,包括:執行一執行緒;檢測該執行中執行緒之一型態;將該已辨識型態轉譯為加速器碼;及將該已轉譯型態轉移至可用加速器以供執行。
範例207:範例206之方法,以致其該型態使用軟體型態匹配器來辨識。
範例208:範例206之方法,以致其該型態使用硬體型態匹配器電路來辨識。
範例209:一種方法,包括:執行一執行緒;檢測該執行中執行緒之一型態;根據該型態以調整與該執行緒相關的操作模式來使用放寬的需求。
範例210:範例209之方法,以致其該型態使用軟體型態匹配器來辨識。
範例211:範例209之方法,以致其該型態使用硬體型態匹配器電路來辨識。
範例212:範例209之方法,以致其於已調整的操作模式中以下之一或更多者被應用:自行修改碼被忽略、記憶體一致性模型限制被弱化、浮點語意被更改、性能監督被改變、及架構旗標使用被更改。
範例213:一種系統,包括:解碼器,用以解碼對於處理器核心為本機的指令;一或更多執行單元,用以執行該已解碼指令,該些已解碼指令之一或更多者係相應於加速開始指令,該加速開始指令係用以致使進入其在相同執行緒中接續於該加速開始指令後之指令的不同執行模式。
範例214:範例213之系統,以致其該加速開始指令包括一用以指明針對記憶體資料區塊之指針的欄位,以致其該記憶體資料區塊之格式包括序號欄位,用以指示中斷前之進度。
範例215:範例213-214的任一者之系統,以致其該加速開始指令包括區塊類別識別符欄位,用以指明記憶體中所儲存之碼的預定義轉譯。
範例216:範例213-215的任一者之系統,以致其該加速開始指令包括實施方式識別符欄位,用以指示用於執行之硬體的類型。
範例217:範例213-216的任一者之系統,以致其該加速開始指令包括保存狀態區域大小欄位,用以指示狀態保存區域之大小及格式,該狀態保存區域係用以儲存其將在該加速開始指令執行後被修改的暫存器。
範例218:範例213-217的任一者之系統,以致其該加速開始指令包括用於本地儲存區域大小之欄位,以致其該本地儲存區域係用以提供超過暫存器之儲存。
範例219:範例218之系統,以致其該本地儲存區域大小係由該加速開始指令之即刻運算元所定義。
範例220:範例218之系統,以致其該本地儲存區域將不在其接續於該加速開始指令後之指令以外被存取。
範例221:範例213-220的任一者之系統,以致其針對不同執行模式內之指令,記憶體相依性類型是可定義的。
範例222:範例221之系統,以致其該可定義的記憶體相依性類型包含以下之一:獨立類型,其中儲存-載入和儲存-儲存相依性被確保不存在;潛在地相依存取至該本地儲存區域類型,其中載入和儲存至該本地儲存區域可為彼此相依的,但是獨立自其他的載入和儲存;潛在地相依類型,其中硬體將動態地檢查並強制介於指令之間的相依性;及原子類型,其中載入和儲存係於其本身之間相依且記憶體被原子地更新。
範例223:範例213-222的任一者之系統,進一步包括:記憶體,用以儲存:保存狀態,其包括待使用暫存器、待更新旗標、及實施方式指明資訊;以及本地儲存,以供被使用於超過暫存器之執行期間。
範例224:範例223之系統,以致其平行執行之各實例獲得其本身的本地儲存。
範例225:一種方法,包括:進入針對執行緒的執行之不同的、放寬的模式;在執行之該不同的、放寬的模式期間將暫存器寫入至保存狀態區域,該些暫存器將被使用於該執行緒之執行期間;在執行之該不同的、放寬的模式期間保留每平行執行之待使用的本地儲存;於執行之該不同的、放寬的模式內執行該執行緒之區塊及追蹤指令;根據加速器結束指令之執行以判定是否已到達執行之該不同的模式之結束;當已到達執行之該不同的模式之該結束時,則從該保存狀態區域復原暫存器和旗標;及當尚未到達執行之該不同的模式之該結束時,則以即刻結果更新該本地儲存。
範例226:範例225之方法,以致其於執行之該不同的、放寬的模式期間發生以下之一或更多者:自行修改碼被忽略、記憶體一致性模型限制被弱化、浮點語意被更改、性能監督被改變、及架構旗標使用被更改。
範例227:範例225或226之方法,以致其執行之該不同的模式係根據加速器開始指令之執行而進入。
範例228:範例225之方法,以致其執行之該不同的模式係根據判定型態而進入。
範例229:範例225-228的任一者之方法,以致其該狀態保存區域之大小和格式被定義於由加速器開始指令所指向之記憶體區塊中,該狀態保存區域係用以儲存其將在該加速器開始指令後被修改之暫存器。
範例230:範例225-229的任一者之系統,進一步包括:在執行之前轉譯該執行緒或其部分。
範例231:範例230之方法,以致其該執行緒或其部分被轉譯為加速器碼。
範例232:範例230或231之方法,以致其該已轉譯執行緒或該執行緒之該已轉譯部分係由加速器所執行。
範例233:範例213-232的任一者之方法,以致其該區塊之指令係藉由更新一與該執行緒之該區塊相關的記憶體區塊中之序號而被追蹤。
範例234:範例223-233的任一者之方法,以致其該執行緒之該區塊的序號被更新,隨著指令被成功地執行且被撤回。
範例235:範例223-234的任一者之方法,以致其執行之該不同的模式之結束已被到達在當加速器結束指令執行並撤回時。
範例236:範例223-235的任一者之方法,以致其當如由加速器結束指令執行所判定尚未到達執行之該不同的模式之該結束時,嘗試使用中間結果以試著執行該區塊之部分。
範例237:範例236之方法,以致其非加速器處理元件被用來執行以該中間結果,在例外或中斷之後。
範例238:範例223-237的任一者之方法,以致其當尚未到達執行之該不同的模式之結束時,轉返執行至當加速器使用開始之時點。
範例239:一種系統,包括:用以解碼指令之解碼器,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;執行電路,用以針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件,進入該緊縮資料目的地運算元之該相應緊縮資料元件位置。
範例240:範例239之系統,以致其N係由該運算碼所指示。
範例241:範例239-240的任一者之系統,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例242:範例239-241的任一者之系統,以致其該執行電路包括二元樹減少網路。
範例243:範例242之系統,以致其該執行電路為加速器之一部分。
範例244:範例242之系統,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例245:範例244之系統,以致其各乘法被平行地處理。
範例246:範例239-245的任一者之系統,以致其該些緊縮資料元件係相應於一或更多矩陣之元件。
範例247:一種方法,包括:解碼指令,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件,進入該緊縮資料目的地運算元之該相應緊縮資料元件位置。
範例248:範例247之方法,以致其N係由該運算碼所指示。
範例249:範例247-248的任一者之方法,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例250:範例247-249的任一者之方法,以致其該執行電路包括二元樹減少網路。
範例251:範例247之方法,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例252:範例251之方法,以致其各緊縮資料運算元具有八個緊縮資料元件。
範例253:範例251之方法,以致其各乘法被平行地處理。
範例254:範例247-253的任一者之方法,以致其該些緊縮資料元件係相應於一或更多矩陣之元件。
範例255:一種非暫態機器可讀取媒體,其係儲存當由處理器所執行時致使該處理器履行方法之指令,該方法包括:解碼指令,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件,進入該緊縮資料目的地運算元之該相應緊縮資料元件位置。
範例256:範例255之非暫態機器可讀取媒體,以致其N係由運算碼所指示。
範例257:範例255-256的任一者之非暫態機器可讀取媒體,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例258:範例255-257的任一者之非暫態機器可讀取媒體,以致其該執行電路包括二元樹減少網路。
範例259:範例258之非暫態機器可讀取媒體,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例260:範例259之非暫態機器可讀取媒體,以致其各緊縮資料運算元具有八個緊縮資料元件。
範例261:範例259之非暫態機器可讀取媒體,以致其各乘法被平行地處理。
範例262:範例255-261的任一者之非暫態機器可讀取媒體,以致其該些緊縮資料元件係相應於一或更多矩陣之元件。
範例263:一種方法,包括:解碼指令,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源暫存器運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)成對地加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件。
範例264:範例263之方法,以致其N係由該運算碼所指示。
範例265:範例263-264的任一者之方法,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例266:範例265之方法,以致其該執行電路為二元樹減少網路。
範例267:範例266之方法,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例268:範例263-267的任一者之方法,以致其各緊縮資料運算元具有八個緊縮資料元件。
範例269:範例263-268的任一者之方法,以致其各乘法被平行地處理。
範例270:一種非暫態機器可讀取媒體,其係儲存當由處理器所執行時致使該處理器履行方法之指令,該方法包括:解碼指令,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源暫存器運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)成對地加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件。
範例271:範例270之非暫態機器可讀取媒體,以致其N係由運算碼所指示。
範例272:範例270-271的任一者之非暫態機器可讀取媒體,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例273:範例272之非暫態機器可讀取媒體,以致其該執行電路為二元樹減少網路。
範例274:範例272之非暫態機器可讀取媒體,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例275:範例270-274的任一者之非暫態機器可讀取媒體,以致其各緊縮資料運算元具有八個緊縮資料元件。
範例276:範例270-275的任一者之非暫態機器可讀取媒體,以致其各乘法被平行地處理。
範例277:一種系統,包括:解碼器,用以解碼指令,該指令具有運算碼、針對第一緊縮資料來源運算元之欄位、針對第二至N緊縮資料來源暫存器運算元之一或更多欄位、及針對緊縮資料目的地運算元之欄位;執行電路,用以針對該些第二至N緊縮資料來源運算元之各緊縮資料元件位置執行該已解碼指令來:1)將該緊縮資料來源運算元之該緊縮資料元件位置的資料元件乘以該第一緊縮資料來源運算元之相應緊縮資料元件位置的資料元件來產生暫時結果;2)成對地加總該些暫時結果;3)將該些暫時結果之總和加至該緊縮資料目的地運算元之相應緊縮資料元件位置的資料元件;及4)將該些暫時結果之該總和儲存至該緊縮資料目的地運算元之該相應緊縮資料元件位置的資料元件。
範例278:範例277之系統,以致其N係由該運算碼所指示。
範例279:範例277-278的任一者之系統,以致其該些來源運算元之值被複製入乘-加陣列之暫存器。
範例280:範例279之系統,以致其該執行電路為二元樹減少網路。
範例281:範例279之系統,以致其該二元樹減少網路包含複數耦合至成對的第一組加總電路之乘法電路,以致其該第一組加總電路被耦合至第二組加總電路,該第二組加總電路被耦合至第三組加總電路,該第三組加總電路亦被耦合至該緊縮資料目的地運算元之相應緊縮資料元件位置的該資料元件。
範例282:範例277-281的任一者之系統,以致其各緊縮資料運算元具有八個緊縮資料元件。
範例283:範例277-282的任一者之系統,以致其各乘法被平行地處理。
範例284:一種系統,包括:加速器,其包括用以將該加速器耦合至主機處理器之多協定匯流排介面,該加速器包括用以處理命令之一或更多處理元件;共用工作佇列,其包括用以儲存由複數客戶所提呈之工作描述符的複數項目,工作描述符係包括:識別碼,用以識別其提呈該工作描述符之客戶、至少一命令,以供由該些一或更多處理元件所執行、及位址資訊;仲裁器,用以依據指明的仲裁策略而從該共用工作佇列調度工作描述符至該些一或更多處理元件,以致其該些一或更多處理元件之各者係:接收從該仲裁器所調度的工作描述符、履行來源和目的地位址轉譯、讀取由該來源位址轉譯所識別的來源資料、執行該至少一命令以產生目的地資料、使用該目的地位址轉譯以將該目的地資料寫入至記憶體。
範例285:範例284之系統,以致其該些複數客戶包含:一或更多使用者模式應用程式,其係提呈直接使用者模式輸入/輸出(IO)請求至該加速器;內核模式驅動程式,其係運行於共用該加速器之虛擬機器中;及/或軟體代理,其係運行於多數容器中。
範例286:範例285之系統,以致其該些複數客戶之至少一客戶包含一執行於VM內之使用者模式應用程式或容器。
範例287:範例284-286的任一者之系統,以致其該些客戶包含同儕輸入/輸出(IO)代理及/或軟體鏈結的卸載請求之一或更多者。
範例288:範例287之系統,以致其該些同儕IO代理之至少一者包含網路介面控制器(NIC)。
範例289:範例284-288的任一者之系統,進一步包括:位址轉譯快取,用以儲存可由該些一或更多處理元件所使用的虛擬至實體位址轉譯。
範例290:範例284-289的任一者之系統,以致其該指明的仲裁策略包含先進先出策略。
範例291:範例284-290的任一者之系統,以致其該指明的仲裁策略包含服務品質(QoS)策略,其中第一客戶之工作描述符被提供先於第二客戶之工作描述符的優先權。
範例292:範例291之系統,以致其該第一客戶之工作描述符將在該第二客戶之工作描述符前被調度至該些一或更多處理元件,即使該第二客戶之該工作描述符在該第一客戶之該工作描述符前被接收於該共用工作佇列中。
範例293:範例284-292的任一者之系統,以致其該識別碼包含程序位址空間識別符(PASID),用以識別其被配置給該客戶之系統記憶體中的位址空間。
範例294:範例284-293的任一者之系統,進一步包括:一或更多專屬工作佇列,各專屬工作佇列包括用以儲存工作描述符之複數項目,該些工作描述符係由與該專屬工作佇列相關的單一客戶所提呈。
範例295:範例294之系統,進一步包括:群組組態暫存器,用以被編程來將該些專屬工作佇列及/或共用工作佇列之二或更多者結合為一群組,該群組將與該些處理元件之一或更多者相關。
範例296:範例295之系統,以致其該些一或更多處理元件係用以處理來自該群組中之該些專屬工作佇列及/或共用工作佇列的工作描述符。
範例297:範例284-296的任一者之系統,以致其由該多協定匯流排介面所支援之第一協定包含記憶體介面協定,以供被用來存取系統記憶體位址空間。
範例298:範例284-297的任一者之系統,以致其由該多協定匯流排介面所支援之第二協定包含快取同調性協定,用以維持同調性於該加速器之本地記憶體與主機處理器(包括主機快取階層和系統記憶體)之記憶體子系統中所儲存的資料之間。
範例299:範例284-298的任一者之系統,以致其由該多協定匯流排介面所支援之第三協定包含支援以下之串列鏈結協定:裝置發現、暫存器存取、組態、初始化、中斷、直接記憶體存取、及位址轉譯服務。
範例300:範例299之系統,以致其該第三協定包含周邊組件介面快速(PCIe)協定。
範例301:範例284-300的任一者之系統,進一步包括:加速器記憶體,用以儲存將由該些處理元件所處理之來源資料並用以儲存從藉由該些一或更多處理元件的處理所得之目的地資料。
範例302:範例301之系統,以致其該加速器記憶體包含高頻寬記憶體(HBM)。
範例303:範例301之系統,以致其該加速器記憶體被指派由該主機處理器所使用之系統記憶體位址空間的第一部分。
範例304:範例303之系統,進一步包括:主機記憶體,其被指派該系統記憶體位址空間之第二部分。
範例305:範例304之系統,進一步包括:偏移電路及/或邏輯,用以針對該系統記憶體位址空間中所儲存之資料的各區塊指示該區塊內所含有之資料是否被偏移朝向該加速器。
範例306:範例305之系統,以致其資料之各區塊包含記憶體頁。
範例307:範例305之系統,以致其該主機係用以避免處理其朝向該加速器所偏移之資料而不首先傳輸對於該加速器之請求。
範例308:範例307之系統,以致其該偏移電路及/或邏輯包括偏移表,其包括將被設定於資料之每固定大小區塊的一位元,用以指示朝向該加速器之偏移。
範例309:範例301-308的任一者之系統,以致其該加速器包含:記憶體控制器,用以與該主機處理器之同調控制器通訊來履行一或更多資料同調性異動,其係與該加速器記憶體中所儲存的資料相關。
範例310:範例309之系統,以致其該記憶體控制器係用以操作於裝置偏移模式,用以存取其被設定至朝向該加速器之偏移的該加速器記憶體中所儲存之資料的區塊,以致其當於該裝置偏移模式下時,該記憶體控制器係用以存取該加速器記憶體而不諮詢該主機處理器之快取同調控制器。
範例311:範例309之系統,以致其該記憶體控制器係用以操作於主機偏移模式,用以存取其被設定至朝向該主機處理器的偏移之資料的區塊,以致其當於該主機偏移模式下時,該記憶體控制器係用以透過該主機處理器中之快取同調控制器而傳送對於加速器記憶體的所有請求。
範例312:範例284-311的任一者之系統,以致其該共用工作佇列係用以儲存至少一批次描述符,其係識別工作描述符之批次。
範例313:範例312之系統,進一步包括:批次處理電路,用以藉由從記憶體讀取工作描述符之該批次來處理該些批次描述符。
範例314:範例292之系統,以致其工作描述符係用以被加入至該專屬工作佇列,回應於該主機處理器執行第一類型的指令;及以致其該工作描述符係用以被加入至該共用工作佇列,回應於該主機處理器執行第二類型的指令。
範例315:一種方法,包括:放置第一組記憶體頁於裝置偏移中;從一耦合至主機處理器之加速器裝置的本地記憶體配置該第一組記憶體頁;從該主機處理器或輸入/輸出代理之核心轉移運算元資料至該些配置的頁;藉由使用該本地記憶體之該加速器裝置以處理該些運算元來產生結果;及從該裝置偏移轉換該第一組記憶體頁至主機偏移。
範例316:範例315之方法,以致其放置該第一組記憶體頁於裝置偏移中包含更新該第一組記憶體頁於偏移表中,用以指示其該些頁係處於加速器裝置偏移。
範例317:範例315-316的任一者之方法,以致其更新項目包含設定與該第一組記憶體頁中之各頁相關的位元。
範例318:範例315-317的任一者之方法,以致其一旦設定至裝置偏移,則該第一組記憶體頁被確保不被快取於主機快取記憶體中。
範例319:範例315-318的任一者之方法,以致其配置該第一組記憶體頁包含起始驅動程式或應用程式編程介面(API)呼叫。
範例320:範例315-319的任一者之方法,以致其為了處理該些運算元,該加速器裝置係直接地從其本地記憶體執行命令並處理資料。
範例321:範例315-320的任一者之方法,以致其轉移運算元資料至該些配置的頁包含提呈一或更多工作描述符至該加速器裝置,該些工作描述符係識別或包括該些運算元。
範例322:範例321之方法,以致其該些一或更多工作描述符可致使配置的頁被清除自主機處理器快取,於一命令時。
範例323:範例315-323的任一者之方法,以致其該主機處理器被允許存取、快取並共用該些結果,當該第一組記憶體頁被設定至該主機偏移時。
101:異質排程器 103:純量核心 105:單指令多資料(SIMD)核心 107:失序核心 109:加速器 115:共用記憶體位址空間 117:OS(作業系統) 211,212:記憶體 301:異質排程器 303:轉譯器 305:及時編譯器 307:電源管理器 309:選擇器 311:型態匹配器 313:程式階段檢測器 501:串列階段 503:資料平行階段 505:串列階段 507:執行緒平行階段 509:串列階段 2001:轉譯器 2003:型態匹配器 2005:記憶體 2007:核心電路 2009:硬體型態匹配器 2011:加速器碼 2013:加速器 2015:排程器 2017:型態 2019:執行緒 2301:記憶體相依性 2303:語意 2305:排序需求 2307:使用情況 2401:序號 2403:區塊類別 2405:實施方式識別符 2407:保存狀態區域大小 2409:本地儲存區域大小 2501:待使用暫存器 2503:記憶體 2505:旗標 2507:保存狀態區域 2509:本地儲存 2511:實施方式特定資訊 2800:多協定鏈結 2801:加速器 2802:主機處理器 2805:核心 2806:PCIe I/O裝置 2807:同調和快取邏輯 2808:PCIe邏輯 2809:LLC 2810:I/O記憶體管理單元(IOMMU) 2811,2812:多工器 2820:PCIe邏輯 2822:本地TLB 2830:加速器核心 2832:加速器記憶體快取 2834:主機記憶體快取 2840:偏移/同調邏輯 2850:加速器記憶體 2860:主機記憶體 2901:基礎位址暫存器(BAR) 2902:PCI組態暫存器 2903:MSI-X 2904:中斷訊息儲存 2905:裝置後端資源 3001:加速器 3003:處理器核心和I/O電路 3005:加速器記憶體 3006:記憶體控制器 3007:主機記憶體 3009:同調控制器 3010:多協定鏈結 3011:主機記憶體匯流排 3012:加速器記憶體匯流排 3400:專屬工作佇列 3401:共用工作佇列 3402:硬體介面/仲裁器 3405:加速器處理引擎 3410-3413:應用程式 3500:工作佇列組態暫存器 3501:I/O組織介面 3511-3512:工作佇列 3513:仲裁器 3514:工作描述符 3515:批次描述符 3516:批次處理單元 3518:描述符 3519:第二仲裁器 3520:轉譯快取 3530:工作描述符處理單元 3540:資料讀取/寫入電路 3550:引擎 3601:引擎0和1 3602:引擎2和3 3611,3612:群組 3621-3622,3623-3624:工作佇列 3700:引擎0 3701:引擎1 3702:引擎2 3703:引擎3 3710:群組0 3711:群組1 3712:群組2 3713:群組3 3721-3725:工作佇列 3801:操作欄位 3802:旗標 3803:程序位址空間識別符(PASID)欄位 3804:完成記錄位址欄位 3805:來源位址欄位 3806:目的地位址欄位 3807:完成中斷欄位 3808:轉移大小欄位 3809:操作特定欄位 3810:U/S(使用者/管理者)欄位 3811:保留欄位 3900:完成記錄 3901:位元組已完成欄位 3902:指標欄位 3903:錯失碼 3904:完成狀態欄位 4000:no-op(無操作)描述符 4001:no-op(無操作)完成記錄 4005:No-op操作 4100:批次描述符 4101:no-op(無操作)完成記錄 4102:描述符列位址 4103:描述符計數 4104:PASID 4105:U/S旗標 4106:完成佇列位址欄位 4108:批次操作 4110:狀態欄位 4111:描述符已完成欄位 4200:汲取描述符 4201:汲取完成記錄 4202:PASID 4208:汲取操作 4300:記憶體移動描述符 4301:記憶體移動完成記錄 4302:來源位址 4303:目的地位址 4304:轉移大小 4308:記憶體移動操作 4310:方向欄位 4311:位元組已完成 4400:填充描述符 4405:型態欄位 4406:目的地位址 4407:轉移大小 4408:記憶體填充操作 4500:比較描述符 4501:比較完成記錄 4504:來源1位址 4505:來源2位址 4506:轉移大小 4508:比較操作 4510:結果欄位 4511:位元組已完成欄位 4512:狀態欄位 4600:比較即刻描述符 4601:來源位址 4602:型態欄位 4603:轉移大小 4604:完成記錄位址 4608:比較即刻操作 4700:產生資料記錄描述符 4701:產生差量記錄完成記錄 4702:來源2位址 4703:轉移大小 4704:完成記錄位址 4705:來源1位址 4708:產生差量記錄操作 4709:最大差量記錄大小 4710:差量記錄大小欄位 4801:偏置 4802:資料 4901:應用差量記錄描述符 4902:應用差量記錄操作 4903:目的地位址 4904:差量記錄位址 4905:差量記錄大小 4906:轉移大小 5001:產生差量記錄操作 5002:最大差量記錄大小 5003:完成記錄 5004:差量記錄大小 5005:應用差量記錄操作 5010:差量記錄 5015:目的地緩衝器 5100:利用雙投描述符之範例記憶體複製 5102:利用雙投完成記錄之記憶體複製 5104:利用雙投之記憶體複製操作 5105:來源位址 5106:目的地1位址 5107:目的地2位址 5108:轉移大小 5110:方向欄位 5111:位元組已完成 5200:CRC產生描述符 5201:CRC產生完成記錄 5204:CRC產生操作 5205:轉移大小 5206:完成記錄位址 5300:利用CRC產生描述符之範例複製 5302:來源位址 5303:目的地位址 5304:轉移大小 5305:利用CRC產生之複製操作 5400:DIF插入描述符 5401:DIF插入完成記錄 5402:來源位址 5403:目的地位址 5405:DIF插入操作 5406:轉移大小 5500:DIF去除描述符 5501:DIF去除完成記錄 5502:來源位址 5503:目的地位址 5505:DIF去除操作 5506:轉移大小 5600:DIF更新描述符 5601:DIF更新完成記錄 5602:來源位址 5603:目的地位址 5605:DIF更新操作 5606:轉移大小 5700:快取清除描述符 5702:轉移大小 5705:快取清除操作 5801:目標裝置特定命令 5802:PRIV欄位 5804:PASID欄位 6201:目標裝置特定命令 6202:PRIV欄位 6204:PASID欄位 6900:加速器 6901:處理元件 6902:處理元件 6903:本地記憶體 6904:本地記憶體 6905:資料管理單元 6906:排程器 6907:快取 6910,6911:核心 6912,6913:變換後備緩衝 6914,6915:快取 6920:記憶體管理單元 6926:共用快取 6930:快取同調性介面 6950:系統記憶體 7000:快速晶片上儲存 7100:第一乘法 7101:第二乘法 7102:擴縮和更新操作 7103:內積操作 7110:第一輸入運算元 7111:第二輸入運算元 7112:輸出格式 7113:矩陣資料格式 7114:操作識別符 7401:處理元件排程器 7402:讀取緩衝器 7403:寫入緩衝器 7404:減少單元 7405:輸入緩衝器 7406:輸入緩衝器 7407:乘法器 7408:乘法器 7409:加法器 7410:加法器 7411:總和暫存器 7412:總和暫存器 7413:輸出緩衝器 7414:輸出緩衝器 7421:本地RAM 7422:本地RAM 7701:使用者指明的頂點程式 7702:目標硬體設計限制 7703:設計最佳化目標 7704:圖形資料性質 7705:RTL實施方式 7706:驗證測試台 7707:調整報告 7711:模板映射組件 7712:驗證組件 7713:自動調整組件 7801:輔助緩衝器 7803:記憶體控制器 7805:封裝/解封裝邏輯 8100:矩陣 8101:值陣列 8102:指標陣列 8103:列開始陣列 8301-8304:堆疊 8305:加速器邏輯晶片 8405:堆疊DRAM通道區塊 8410:集成記憶體控制器 8415:向量快取 8420:內積引擎 8430:KTI鏈結 8431:相鄰連接 8500:控制邏輯 8505,8506:緩衝器 8510:64位元乘-加ALU 8512:結果鎖存器 8601,8602:固定大小區塊的資料 8610:向量 8611,8612:提取列表 8701:陣列 8702:指標之陣列 8703:含有各非零之值的陣列 8704:矩陣緩衝器指標(MBI)之陣列 8705:區塊描述符之陣列 8801:列開始值 8802:矩陣指標 8803:矩陣值 8901:控制邏輯 8902:區塊描述符緩衝器 8903:矩陣指標緩衝器 8904:向量值緩衝器 8905:矩陣值緩衝器 8910:ALU 8911:輸出鎖存器 8920:匹配邏輯 9001:叢發 9002:所需字元 9004:內部計數器 9005:鎖存器 9006:移位器 9007:線緩衝器 9101:列開始之位元向量 9102:向量指標緩衝器 9103:矩陣指標緩衝器 9104:向量值緩衝器 9105:矩陣值緩衝器 9110:乘-加ALU 9111:目前列位置位元向量 9120:4x4比較器 9130:匹配的指標佇列 9140:控制邏輯 9311:匹配邏輯 9320:比較器 9330:匹配的指標佇列 9350:多工器 9401-9412:加速器堆疊 9421-9424:堆疊 9430:處理器/核心集 9500:異動為基的介面 9501-9516:加速器堆疊 9601:DRAM堆疊I/O凸塊 9602:DRAM堆疊I/O凸塊 9801:介面層 9802:矽插入器或橋 10001:記憶體中之λ描述符格式 10002:傳遞至PE之λ描述符格式 10003:指向純量引數之指針 10004:純量引數之值 10101:向量引數的數目 10102:恆定引數的數目 10103:向量輸出的數目 10104:純量輸出的數目 10105:指令的數目 10106:純量引數的數目 10107:迴路開始指令 10108:未使用的 10201:專屬硬體 10202:輸出緩衝器 10301:述詞暫存器檔 10302:暫存器檔 10303:解碼邏輯 10304:依序執行管線 10305:已解碼指令緩衝器 10306:特殊控制暫存器 10401:運算碼 10402:單一目的地 10403-10405:輸入運算元 10703:偏移快取 10707:偏移表 10807:版本暫存器 10808:一般能力暫存器(GENCAP) 10810:工作佇列能力暫存器(WQCAP) 10811:操作能力暫存器(OPCAP) 10812:一般組態暫存器(GENCFG) 10813:一般控制暫存器(GENCTRL) 10814:命令暫存器(CMD) 10815:軟體錯誤狀態暫存器(SWERROR) 10816:硬體錯誤狀態暫存器(HWERROR) 10817:群組組態暫存器(GRPCFG) 10818:工作佇列組態暫存器(WQCFG) 10819:工作佇列佔有率中斷控制暫存器 10820:工作佇列狀態暫存器 10821:MSI-X項目 10822:MSI-X擱置位元陣列 10823:中斷訊息儲存項目 11001-11015:乘法電路 11017-11023:加總電路 11025:加總電路 11027:加總電路 11031:原始(舊)值 11033:新的值 11321:選擇器 11323:乘法電路 11325:暫存器檔及讀取多工器 11327:加總電路 11329:讀取多工器 11401:電路 11403:執行緒/處理元件(PE)追蹤器 11405:型態匹配器 11409:PE資訊 11411:選擇器 11413:記憶體 11415:轉譯器 11417:軟體型態匹配器 11419:處理器核心 11701:第一類型的記憶體 11703:第一位址範圍 11705:執行緒1 11707:第二類型的記憶體 11709:第二位址範圍 11715:共用記憶體 11901:處理器 11903:SIMD核心 11905:純量核心 11907:最後階快取(LLC) 11909:記憶體控制器 11911:輸入/輸出介面 11913:各潛時最佳化(OOO)核心 11915:互連 12000:簡化的方塊圖 12005:多晶片組態 12010,12015:晶粒 12020:多晶片鏈結(MCL) 12025-12030:組件 12035,12050:通訊組織 12040-12045:組件 12100:簡化方塊圖 12105:第一裝置 12110:第二裝置 12115:下游通道 12120:上游通道 12125a,b:電氣MCL PHY 12130a,b:MCL邏輯PHY 12135a,12135b:鏈結層 12140:旁帶鏈結 12150a,12150b:異動層 12200:簡化的方塊圖 12205:實體PHY 12210:邏輯PHY 12215:PCIe邏輯 12220:CAC邏輯 12225:鏈結狀態機器管理邏輯 12230:鏈結測試及除錯邏輯 12235:多工 12240:解多工 12250:鏈結層封包邏輯 12255:旁帶 12300:簡化方塊圖 12305:邏輯PHY介面(LPIF) 12315,12320,12325:協定 12330:多工及仲裁邏輯 12500:暫存器架構 12510:向量暫存器 12515:寫入遮蔽暫存器 12525:通用暫存器 12545:純量浮點堆疊暫存器檔 12550:MMX緊縮整數平坦暫存器檔 12600:處理器管線 12602:提取級 12604:長度解碼級 12606:解碼級 12608:配置級 12610:重新命名級 12612:排程級 12614:暫存器讀取/記憶體讀取級 12616:執行級 12618:寫入回/記憶體寫入級 12622:例外處置級 12624:確定級 12630:前端單元 12632:分支預測單元 12634:指令快取單元 12636:指令變換後備緩衝(TLB) 12638:指令提取單元 12640:解碼單元 12650:執行引擎單元 12652:重新命名/配置器單元 12654:撤回單元 12656:排程器單元 12658:實體暫存器檔單元 12660:執行叢集 12662:執行單元 12664:記憶體存取單元 12670:記憶體單元 12672:資料TLB單元 12674:資料快取單元 12676:第二階(L2)快取單元 12690:處理器核心 12700:指令解碼器 12702:晶粒上互連網路 12704:第二階(L2)快取 12706:L1快取 12706A:L1資料快取 12708:純量單元 12710:向量單元 12712:純量暫存器 12714:向量暫存器 12720:拌合單元 12722A-B:數字轉換單元 12724:複製單元 12726:寫入遮蔽暫存器 12728:16寬的ALU 12800:處理器 12802A-N:核心 12806:共用快取單元 12808:特殊用途邏輯 12810:系統代理 12812:環狀為基的互連單元 12814:集成記憶體控制器單元 12816:匯流排控制器單元 12900:系統 12910,12915:處理器 12920:控制器集線器 12940:記憶體 12945:共處理器 12950:輸入/輸出集線器(IOH) 12960:輸入/輸出(I/O)裝置 12990:圖形記憶體控制器集線器(GMCH) 12995:連接 13000:多處理器系統 13014:I/O裝置 13015:額外處理器 13016:第一匯流排 13018:匯流排橋 13020:第二匯流排 13022:鍵盤及/或滑鼠 13024:音頻I/O 13027:通訊裝置 13028:儲存單元 13030:指令/碼及資料 13032:記憶體 13034:記憶體 13038:共處理器 13039:高性能介面 13050:點對點互連 13052,13054:P-P介面 13070:第一處理器 13072,13082:集成記憶體控制器(IMC)單元 13076,13078:點對點(P-P)介面 13080:第二處理器 13086,13088:P-P介面 13090:晶片組 13094,13098:點對點介面電路 13096:介面 13100:系統 13114:I/O裝置 13115:舊有I/O裝置 13200:SoC 13202:互連單元 13210:應用程式處理器 13220:共處理器 13230:靜態隨機存取記憶體(SRAM)單元 13232:直接記憶體存取(DMA)單元 13240:顯示單元 13302:高階語言 13304:x86編譯器 13306:x86二元碼 13308:指令集編譯器 13310:指令集二元碼 13312:指令轉換器 13314:沒有至少一x86指令集核心之處理器 13316:具有至少一x86指令集核心之處理器
實施例將藉由以下配合後附圖形之詳細描述而被輕易地瞭解。為了協助此描述,類似的參考數字係指定類似的結構元件。實施例係以範例方式(而非以限制方式)被闡明於後附圖示之圖中。
[圖1]為異質多處理執行環境之表示;
[圖2]為異質多處理執行環境之表示;
[圖3]闡明異質排程器之範例實施方式;
[圖4]闡明電腦系統之系統開機及裝置發現的實施例;
[圖5]闡明根據程式階段至三種類型處理元件之映射的執行緒遷移之範例;
[圖6]為由異質排程器所履行之範例實施方式流程;
[圖7]闡明藉由異質排程器之執行緒目的地選擇的方法之範例;
[圖8]闡明使用條狀映射於邏輯ID之概念;
[圖9]闡明使用條狀映射於邏輯ID之範例;
[圖10]闡明核心群組之範例;
[圖11]闡明於一種利用二元轉譯器切換機制之系統中的執行緒執行之方法的範例;
[圖12]闡明針對加速器之熱碼的核心配置的範例方法;
[圖13]闡明針對喚醒或寫入至頁目錄基礎暫存器事件之潛在核心配置的範例方法;
[圖14]闡明串列階段執行緒之範例;
[圖15]闡明針對回應於睡眠命令事件之執行緒的潛在核心配置之範例方法;
[圖16]闡明針對回應於階段改變事件之執行緒的潛在核心配置之範例方法;
[圖17]闡明一描繪加速區之碼的範例;
[圖18]闡明一種使用硬體處理器核心中之ABEGIN的執行之方法的實施例;
[圖19]闡明一種使用硬體處理器核心中之AEND的執行之方法的實施例;
[圖20]闡明一種提供使用型態匹配之ABEGIN/AEND等效的系統;
[圖21]闡明一種暴露至型態辨識之非加速描繪執行緒的執行之方法的實施例;
[圖22]闡明一種暴露至型態辨識之非加速描繪執行緒的執行之方法的實施例;
[圖23]闡明不同類型的記憶體相依性、其語意、排序需求、及使用情況;
[圖24]闡明由ABEGIN指令所指向之記憶體資料區塊的範例;
[圖25]闡明其被組態成使用ABEGIN/AEND語意之記憶體2503的範例;
[圖26]闡明一種使用ABEGIN/AEND而操作於不同執行模式下的方法之範例;
[圖27]闡明一種使用ABEGIN/AEND而操作於不同執行模式下的方法之範例;
[圖28]闡明針對一實施方式之額外細節;
[圖29]闡明一加速器之實施例;
[圖30]闡明電腦系統,其包括加速器及一或更多電腦處理器晶片,其係透過多協定鏈結而耦合至處理器;
[圖31]闡明依據實施例之裝置偏移流程;
[圖32]闡明依據一實施方式之範例程序;
[圖33]闡明一程序,其中運算元被釋出自一或更多I/O裝置;
[圖34]闡明使用兩種不同類型的工作佇列之實施方式;
[圖35]闡明資料串流加速器(DSA)裝置之實施方式,該裝置包含其接收透過I/O組織介面所提呈之描述符的多數工作佇列;
[圖36]闡明兩個工作佇列;
[圖37]闡明使用引擎及群組之另一組態;
[圖38]闡明一描述符之實施方式;
[圖39]闡明完成記錄之實施方式;
[圖40]闡明範例no-op(無操作)描述符及無操作完成記錄;
[圖41]闡明範例批次描述符及no-op(無操作)完成記錄;
[圖42]闡明範例汲取描述符及汲取完成記錄;
[圖43]闡明範例記憶體移動描述符及記憶體移動完成記錄;
[圖44]闡明範例填充描述符;
[圖45]闡明範例比較描述符及比較完成記錄;
[圖46]闡明範例比較即刻描述符;
[圖47]闡明範例產生資料記錄描述符及產生差量記錄完成記錄;
[圖48]闡明差量記錄之格式;
[圖49]闡明範例應用差量記錄描述符;
[圖50]顯示產生差量記錄及應用差量記錄操作之使用的一實施方式;
[圖51]闡明利用雙投描述符之範例記憶體複製及利用雙投完成記錄之記憶體複製;
[圖52]闡明範例CRC產生描述符及CRC產生完成記錄;
[圖53]闡明利用CRC產生描述符之範例複製;
[圖54]闡明範例DIF插入描述符及DIF插入完成記錄;
[圖55]闡明範例DIF剝除描述符及DIF剝除完成記錄;
[圖56]闡明範例DIF更新描述符及DIF更新完成記錄;
[圖57]闡明範例快取清除描述符;
[圖58]闡明由ENQCMD所產生的64位元組進入佇列儲存資料;
[圖59]闡明由用以處理MOVDIRI指令之處理器所履行的方法之實施例;
[圖60]闡明由用以處理MOVDIRI64B指令之處理器所履行的方法之實施例;
[圖61]闡明由用以處理ENCQMD指令之處理器所履行的方法之實施例;
[圖62]闡明ENQCMDS指令之格式;
[圖63]闡明由用以處理ENCQMDs指令之處理器所履行的方法之實施例;
[圖64]闡明由用以處理UMONITOR指令之處理器所履行的方法之實施例;
[圖65]闡明由用以處理UMWAIT指令之處理器所履行的方法之實施例;
[圖66]闡明由用以處理TPAUSE指令之處理器所履行的方法之實施例;
[圖67]闡明使用UMWAIT及UMONITOR指令之執行的範例;
[圖68]闡明使用TPAUSE及UMONITOR指令之執行的範例;
[圖69]闡明一範例實施方式,其中加速器係透過快取同調性介面而被通訊地耦合至複數核心;
[圖70]闡明加速器之另一視圖,以及先前所述之其他組件,包括資料管理單元、複數處理元件、及快速晶片上儲存;
[圖71]闡明由處理元件所履行之一範例組操作;
[圖72A]描繪介於稀疏矩陣A與向量x之間的相乘以產生向量y的範例;
[圖72B]闡明矩陣A之CSR表示,其中各值被儲存為一(值、列指標)對;
[圖72C]闡明其使用一(值、列指標)對的矩陣A之CSR表示;
[圖73A、73B、及73C]闡明各計算型態之虛擬碼;
[圖74]闡明針對資料管理單元及處理元件之一實施方式的處理流程;
[圖75a]強調針對spMspV_csc及scale_update操作之路徑(使用虛線);
[圖75b]闡明針對spMdV_csr操作之路徑;
[圖76a-b]顯示將一圖形表示為相鄰矩陣之範例;
[圖76c]闡明頂點程式;
[圖76d]闡明用以執行頂點程式之範例程式碼;
[圖76e]顯示GSPMV公式化;
[圖77]闡明框架;
[圖78]闡明可客製化邏輯區塊被提供於各PE內部;
[圖79]闡明各加速器磚片之操作;
[圖80a]概述模板之一實施方式的可客製化參數;
[圖80b]闡明調諧考量;
[圖81]闡明最常見的稀疏矩陣格式之一;
[圖82]顯示一種使用CRS資料格式之稀疏矩陣-緊密向量乘法的實施方式中所涉及的步驟;
[圖83]闡明加速器之實施方式,其包括加速器邏輯晶粒及DRAM的更多堆疊之一;
[圖84A-B]闡明加速器邏輯晶片之一實施方式,其係定向自一通過DRAM晶粒之堆疊的頂部觀點;
[圖85]提供DPE之高階概述;
[圖86]闡明一阻擋方案之實施方式;
[圖87]顯示阻擋描述符;
[圖88]闡明兩列矩陣,其係配適入單一內積引擎之緩衝器內;
[圖89]闡明一種使用此格式之內積引擎中的硬體之一實施方式;
[圖90]闡明其進行擷取之匹配邏輯單元的內容;
[圖91]闡明依據一實施方式以支援稀疏矩陣-稀疏向量乘法之內積引擎設計的細節;
[圖92]闡明使用特定值之範例;
[圖93]闡明稀疏-緊密及稀疏-稀疏內積引擎如何被結合以產生一種可處置兩類型的計算之內積引擎;
[圖94a]闡明具有12個加速器堆疊之插口替換實施方式;
[圖94b]闡明具有處理器/一組核心及8個堆疊之多晶片封裝(MCP)實施方式;
[圖95]闡明加速器堆疊;
[圖96]顯示一加速器之潛在地佈局,該加速器意欲座落於WIO3 DRAM堆疊底下,該WIO3 DRAM堆疊包括64個內積引擎、8個向量快取及一集成記憶體控制器;
[圖97]係比較七種DRAM技術;
[圖98a-b]係闡明堆疊的DRAM;
[圖99]闡明寬度優先搜尋(BFS)列表;
[圖100]顯示用以指明λ函數之描述符的格式,依據一實施方式;
[圖101]闡明於一實施例中之標頭字元的下六位元組;
[圖102]闡明矩陣值緩衝器、矩陣指標緩衝器、及向量值緩衝器;
[圖103]闡明λ資料路徑之一實施方式的細節;
[圖104]闡明指令編碼之實施方式;
[圖105]闡明針對一特定組指令之編碼;
[圖106]闡明範例比較述詞之編碼;
[圖107]闡明使用偏移之實施例;
[圖108A-B]闡明記憶體映射I/O(MMIO)空間暫存器,其係使用以工作佇列為基的實施方式;
[圖109]闡明矩陣乘法之範例;
[圖110]闡明具有二元樹減少網路之octoMADD指令;
[圖111]闡明由用以處理乘加指令之處理器所履行的方法之實施例;
[圖112]闡明由用以處理乘加指令之處理器所履行的方法之實施例;
[圖113A-C]闡明用以履行MADD指令之範例硬體;
[圖114]闡明硬體異質排程器電路及其與記憶體之互動的範例;
[圖115]闡明軟體異質排程器之範例;
[圖116]闡明用於系統開機後裝置發現之方法的實施例;
[圖117(A)-(B)]闡明共用記憶體中之執行緒的移動之範例;
[圖118]闡明執行緒移動之範例方法,其可由異質排程器所履行;
[圖119]為一組態成提出如上所詳述之摘要執行環境的處理器之方塊圖;
[圖120]為一闡明範例多晶片組態之簡化方塊圖;
[圖121]闡明方塊圖,其表示一包括多晶片鏈結(MCL)之範例實施方式的系統之至少一部分;
[圖122]闡明範例MCL之範例邏輯PHY的方塊圖;
[圖123]闡明簡化方塊圖,其係顯示用以實施MCL之邏輯的另一表示;
[圖124]闡明當不支援ABEGIN/AEND時之執行的範例;
[圖125]為一暫存器架構之方塊圖,依據本發明之一實施例;
[圖126A]為闡明範例依序管線及範例暫存器重新命名、失序發送/執行管線兩者之方塊圖,依據本發明之實施例;
[圖126B]為一方塊圖,其闡明將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序發送/執行架構核心兩者;
[圖127A-B]闡明更特定的範例依序核心架構之方塊圖,該核心將為晶片中之數個邏輯區塊之一(包括相同類型及/或不同類型之其他核心);
[圖128]為一種處理器之方塊圖,該處理器可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例;
[圖129]顯示一系統之方塊圖,依據本發明之一實施例;
[圖130]顯示第一更特定範例系統之方塊圖,依據本發明之實施例;
[圖131]顯示第二更特定範例系統之方塊圖,依據本發明之實施例;
[圖132]為SoC之方塊圖,依據本發明之實施例;及
[圖133]為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。
101:異質排程器
103:純量核心
105:單指令多資料(SIMD)核心
107:失序核心
109:加速器
115:共用記憶體位址空間
117:OS(作業系統)

Claims (16)

  1. 一種計算設備,包含:矽插入器;通訊組織;加速器晶粒,其包含複數計算元件,用以對複數矩陣資料元件同時地履行操作;複數內積引擎,該等複數內積引擎用以對該等矩陣資料元件計算複數內積來產生複數結果矩陣資料元件;緩衝器或快取,用以儲存複數矩陣資料元件;記憶體控制器,其係耦合至該通訊組織;及堆疊DRAM,其係將複數DRAM晶粒垂直地堆疊在耦合至該加速器晶粒之該矽插入器上,其中內積操作包括該等矩陣資料元件被乘以向量之資料元件。
  2. 如請求項1之設備,其中該等矩陣資料元件包含浮點資料元件。
  3. 如請求項1之設備,其中該等矩陣資料元件為稀疏矩陣之資料元件,及其中該等複數內積包含列取向稀疏矩陣緊密向量(spMdV)乘法操作。
  4. 如請求項1之設備,其中該等矩陣資料元件為稀疏矩陣之資料元件,及其中該等複數內積係用以實施擴縮和更新操作。
  5. 如請求項1至4的任一項之設備,其支援I/O虛擬化以分割複數資料平行處理電路跨越其指派給不 同虛擬機器之不同的虛擬功能。
  6. 如請求項5之設備,其中該I/O虛擬化支援各虛擬功能之獨立共用工作佇列(SWQ),各虛擬功能具有其本身的SWQ暫存器。
  7. 如請求項1之設備,進一步包含:多協定鏈結,用以耦合該加速器晶粒至主機處理器。
  8. 如請求項7之設備,進一步包含:I/O記憶體管理單元(IOMMU),用以映射共用虛擬記憶體(SVM)空間至結合的實體及主機記憶體,該SVM空間將由該主機處理器與該加速器晶粒所共用。
  9. 一種計算系統,包含:系統記憶體;設備,其係耦合至該系統記憶體,該設備包含:矽插入器;通訊組織;加速器晶粒,其包含複數計算元件,用以對複數矩陣資料元件同時地履行操作;複數內積引擎,該等複數內積引擎用以對該等矩陣資料元件計算複數內積來產生複數結果矩陣資料元件;緩衝器或快取,用以儲存複數矩陣資料元件;記憶體控制器,其係耦合至該通訊組織;及堆疊DRAM,其係將複數DRAM晶粒垂直地堆疊在耦合至該加速器晶粒之該矽插入器上,其中內積操作包括該等矩陣資料元件被乘以向量之資 料元件。
  10. 如請求項9之系統,其中該等矩陣資料元件包含浮點資料元件。
  11. 如請求項9之系統,其中該等矩陣資料元件為稀疏矩陣之資料元件,及其中該等複數內積包含列取向稀疏矩陣緊密向量(spMdV)乘法操作。
  12. 如請求項9之系統,其中該等矩陣資料元件為稀疏矩陣之資料元件,及其中該等複數內積係用以實施擴縮和更新操作。
  13. 如請求項9至12的任一項之系統,其支援I/O虛擬化以分割複數資料平行處理電路跨越其指派給不同虛擬機器之不同的虛擬功能。
  14. 如請求項13之系統,其中該I/O虛擬化支援各虛擬功能之獨立共用工作佇列(SWQ),各虛擬功能具有其本身的SWQ暫存器。
  15. 如請求項9之系統,進一步包含:多協定鏈結,用以耦合該加速器晶粒至主機處理器。
  16. 如請求項15之系統,進一步包含:I/O記憶體管理單元(IOMMU),用以映射共用虛擬記憶體(SVM)空間至結合的實體及主機記憶體,該SVM空間將由該主機處理器與該加速器晶粒所共用。
TW109144238A 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備 TWI742964B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
WOPCT/US16/69640 2016-12-31
PCT/US2016/069640 WO2018125250A1 (en) 2016-12-31 2016-12-31 Systems, methods, and apparatuses for heterogeneous computing

Publications (2)

Publication Number Publication Date
TW202121169A TW202121169A (zh) 2021-06-01
TWI742964B true TWI742964B (zh) 2021-10-11

Family

ID=62709975

Family Applications (4)

Application Number Title Priority Date Filing Date
TW106140258A TWI810166B (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備
TW109144238A TWI742964B (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備
TW112129758A TW202347124A (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備
TW111122993A TWI832298B (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備

Family Applications Before (1)

Application Number Title Priority Date Filing Date
TW106140258A TWI810166B (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備

Family Applications After (2)

Application Number Title Priority Date Filing Date
TW112129758A TW202347124A (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備
TW111122993A TWI832298B (zh) 2016-12-31 2017-11-21 用於異質計算之系統,方法,及設備

Country Status (13)

Country Link
US (4) US11416281B2 (zh)
EP (4) EP4120070B1 (zh)
JP (1) JP6988040B2 (zh)
KR (4) KR20220090588A (zh)
CN (4) CN110121698A (zh)
BR (1) BR112019010679A2 (zh)
DE (1) DE112016007566T5 (zh)
DK (1) DK3812900T3 (zh)
ES (1) ES2933675T3 (zh)
FI (1) FI3812900T3 (zh)
PL (2) PL3812900T3 (zh)
TW (4) TWI810166B (zh)
WO (1) WO2018125250A1 (zh)

Families Citing this family (240)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2538754B (en) * 2015-05-27 2018-08-29 Displaylink Uk Ltd Single-chip multi-processor communication
US10720195B2 (en) 2015-09-25 2020-07-21 Intel Corporation Efficient memory activation at runtime
US11455190B2 (en) 2016-02-05 2022-09-27 Sas Institute Inc. Implicit status in many task computing
US10942711B2 (en) * 2016-02-12 2021-03-09 Sony Corporation Information processing method and information processing apparatus
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
FR3060792B1 (fr) * 2016-12-19 2018-12-07 Safran Electronics & Defense Dispositif de chargement de donnees dans des unites informatiques de traitement depuis une source de donnees
US10884970B2 (en) * 2016-12-28 2021-01-05 Intel Corporation Techniques for coalescing doorbells in a request message
US11182315B2 (en) * 2017-02-10 2021-11-23 Intel Corporation Apparatuses, methods, and systems for hardware control of processor performance levels
US11099880B2 (en) 2017-02-22 2021-08-24 Intel Corporation Virtualization of process address space identifiers for scalable virtualization of input/output devices
EP4053695A1 (en) 2017-03-20 2022-09-07 INTEL Corporation Systems, methods, and apparatuses for dot production operations
WO2018176360A1 (en) 2017-03-31 2018-10-04 Intel Corporation Scalable interrupt virtualization for input/output devices
US20180329855A1 (en) * 2017-05-12 2018-11-15 Intel Corporation Alternate protocol negotiation in a high performance interconnect
DK3568756T3 (da) * 2017-05-17 2022-09-19 Google Llc Specialformålstræningschip til neuralt netværk
US11210133B1 (en) * 2017-06-12 2021-12-28 Pure Storage, Inc. Workload mobility between disparate execution environments
US11989429B1 (en) 2017-06-12 2024-05-21 Pure Storage, Inc. Recommending changes to a storage system
US11080131B2 (en) * 2017-06-19 2021-08-03 Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. High performance method and system for performing fault tolerant matrix multiplication
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
CN109213962B (zh) * 2017-07-07 2020-10-09 华为技术有限公司 运算加速器
US10489195B2 (en) * 2017-07-20 2019-11-26 Cisco Technology, Inc. FPGA acceleration for serverless computing
US11005771B2 (en) 2017-10-16 2021-05-11 Mellanox Technologies, Ltd. Computational accelerator for packet payload operations
US11502948B2 (en) 2017-10-16 2022-11-15 Mellanox Technologies, Ltd. Computational accelerator for storage operations
CN107807843B (zh) * 2017-10-26 2019-05-24 北京百度网讯科技有限公司 虚拟机中的i/o请求处理方法、设备及计算机可读介质
US10698472B2 (en) * 2017-10-27 2020-06-30 Advanced Micro Devices, Inc. Instruction subset implementation for low power operation
US10708240B2 (en) 2017-12-14 2020-07-07 Mellanox Technologies, Ltd. Offloading communication security operations to a network interface controller
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11698866B2 (en) * 2017-12-29 2023-07-11 Intel Corporation Unified address translation for virtualization of input/output devices
US10599596B2 (en) * 2018-01-08 2020-03-24 Intel Corporation Management of processor performance based on user interrupts
KR102228586B1 (ko) * 2018-01-19 2021-03-16 한국전자통신연구원 Gpu 기반의 적응적 blas 연산 가속화 장치 및 방법
US11231927B2 (en) * 2018-03-08 2022-01-25 Intel Corporation System, apparatus and method for providing a fabric for an accelerator
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11429725B1 (en) * 2018-04-26 2022-08-30 Citicorp Credit Services, Inc. (Usa) Automated security risk assessment systems and methods
US10877766B2 (en) * 2018-05-24 2020-12-29 Xilinx, Inc. Embedded scheduling of hardware resources for hardware acceleration
US11144357B2 (en) * 2018-05-25 2021-10-12 International Business Machines Corporation Selecting hardware accelerators based on score
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
US11222138B2 (en) * 2018-05-29 2022-01-11 Visa International Service Association Privacy-preserving machine learning in the three-server model
CN112352234B (zh) * 2018-06-15 2024-03-08 华为云计算技术有限公司 用于处理并发属性图查询的系统
US11036645B2 (en) * 2018-06-26 2021-06-15 Red Hat, Inc. Secure userspace networking for guests
US11093605B2 (en) * 2018-06-28 2021-08-17 Cisco Technology, Inc. Monitoring real-time processor instruction stream execution
US11360809B2 (en) * 2018-06-29 2022-06-14 Intel Corporation Multithreaded processor core with hardware-assisted task scheduling
CN110825485A (zh) * 2018-08-07 2020-02-21 华为技术有限公司 数据处理的方法、设备和服务器
US10423558B1 (en) 2018-08-08 2019-09-24 Apple Inc. Systems and methods for controlling data on a bus using latency
US10970055B2 (en) * 2018-08-21 2021-04-06 International Business Machines Corporation Identifying software and hardware bottlenecks
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10782918B2 (en) * 2018-09-06 2020-09-22 Advanced Micro Devices, Inc. Near-memory data-dependent gather and packing
US10977198B2 (en) * 2018-09-12 2021-04-13 Micron Technology, Inc. Hybrid memory system interface
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10949207B2 (en) 2018-09-29 2021-03-16 Intel Corporation Processor core supporting a heterogeneous system instruction set architecture
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10705993B2 (en) 2018-11-19 2020-07-07 Xilinx, Inc. Programming and controlling compute units in an integrated circuit
US10892944B2 (en) 2018-11-29 2021-01-12 International Business Machines Corporation Selecting and using a cloud-based hardware accelerator
CN109542832B (zh) * 2018-11-30 2020-09-01 青岛方寸微电子科技有限公司 一种无锁机制的异构多核cpu间通信系统及方法
US11340877B2 (en) * 2018-12-19 2022-05-24 Network Native, Inc. System and method for holistic application development and deployment in a distributed heterogeneous computing environment
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
TWI704460B (zh) * 2019-01-19 2020-09-11 神雲科技股份有限公司 叢集式系統中維持記憶體共享方法
US11385918B2 (en) * 2019-01-23 2022-07-12 Vmware, Inc. Dynamic discovery of internal kernel functions and global data
US11537504B2 (en) * 2019-01-28 2022-12-27 Xepic Corporation Limited Realization of functional verification debug station via cross-platform record-mapping-replay technology
JP7379491B2 (ja) 2019-01-31 2023-11-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
TWI767175B (zh) * 2019-01-31 2022-06-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
JP7324282B2 (ja) 2019-01-31 2023-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
TWI773959B (zh) 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
US11061728B2 (en) * 2019-02-12 2021-07-13 Western Digital Technologies, Inc. Systems and methods for heterogeneous address space allocation
US20220121421A1 (en) 2019-03-15 2022-04-21 Intel Corporation Multi-tile memory management
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
DE112020001249T5 (de) 2019-03-15 2021-12-23 Intel Corporation Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
US10942738B2 (en) * 2019-03-29 2021-03-09 Intel Corporation Accelerator systems and methods for matrix operations
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11762695B2 (en) * 2019-03-29 2023-09-19 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Transparent memory management for over-subscribed accelerators
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11184439B2 (en) * 2019-04-01 2021-11-23 Mellanox Technologies, Ltd. Communication with accelerator via RDMA-based network adapter
CN111782133A (zh) * 2019-04-04 2020-10-16 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN111831337B (zh) 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
US11036649B2 (en) * 2019-04-04 2021-06-15 Cisco Technology, Inc. Network interface card resource partitioning
EP3825842B1 (en) * 2019-04-04 2023-09-06 Cambricon Technologies Corporation Limited Data processing method and apparatus, and related product
US10963362B2 (en) * 2019-04-11 2021-03-30 Dell Products L.P. Method and system for identifying latency-sensitive computing workloads of information handling systems
CN111832736B (zh) * 2019-04-19 2024-04-12 伊姆西Ip控股有限责任公司 用于处理机器学习模型的方法、设备和计算机可读存储介质
US10970238B2 (en) 2019-04-19 2021-04-06 Intel Corporation Non-posted write transactions for a computer bus
EP3963444A4 (en) * 2019-04-30 2022-11-23 Hewlett-Packard Development Company, L.P. STARTING PROCESSORS
US11086672B2 (en) * 2019-05-07 2021-08-10 International Business Machines Corporation Low latency management of processor core wait state
CN110175164B (zh) * 2019-05-27 2023-04-07 浪潮软件股份有限公司 一种SparkSQL thriftserver查询及操作Hive的权限控制的方法
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US10983796B2 (en) 2019-06-29 2021-04-20 Intel Corporation Core-to-core end “offload” instruction(s)
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11016766B2 (en) 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US11030000B2 (en) 2019-06-29 2021-06-08 Intel Corporation Core advertisement of availability
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US10929129B2 (en) * 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11249786B2 (en) * 2019-07-03 2022-02-15 Vmware, Inc. Virtualizing hardware components that implement AI applications
US11061681B2 (en) * 2019-07-25 2021-07-13 International Business Machines Corporation Instruction streaming using copy select vector
US11301254B2 (en) * 2019-07-25 2022-04-12 International Business Machines Corporation Instruction streaming using state migration
US11169737B2 (en) 2019-08-13 2021-11-09 Micron Technology, Inc. Speculation in memory
US20220326988A1 (en) * 2019-08-16 2022-10-13 Google Llc Explicit scheduling of on-chip operations
US11294715B2 (en) 2019-08-28 2022-04-05 Marvell Asia Pte, Ltd. System and method for queuing work within a virtualized scheduler based on in-unit accounting of in-unit entries
US11221962B2 (en) 2019-09-04 2022-01-11 Apple Inc. Unified address translation
CN110750265B (zh) * 2019-09-06 2021-06-11 华中科技大学 一种面向图计算的高层次综合方法及系统
US11915041B1 (en) * 2019-09-12 2024-02-27 Neureality Ltd. Method and system for sequencing artificial intelligence (AI) jobs for execution at AI accelerators
US11144290B2 (en) * 2019-09-13 2021-10-12 Huawei Technologies Co., Ltd. Method and apparatus for enabling autonomous acceleration of dataflow AI applications
US11748174B2 (en) * 2019-10-02 2023-09-05 Intel Corporation Method for arbitration and access to hardware request ring structures in a concurrent environment
CN110865814B (zh) * 2019-10-30 2021-11-16 上海天数智芯半导体有限公司 一种支持异构计算核架构的编译器实现方法和系统
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
CN112835510B (zh) * 2019-11-25 2022-08-26 北京灵汐科技有限公司 一种片上存储资源存储格式的控制方法及装置
US11086804B2 (en) * 2019-12-09 2021-08-10 Western Digital Technologies, Inc. Storage system and method for reducing read-retry duration
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
US20230012487A1 (en) * 2019-12-20 2023-01-19 Hewlett-Packard Development Company, L.P. Machine learning workload orchestration in heterogeneous clusters
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN111258923B (zh) * 2020-01-16 2023-03-14 重庆邮电大学 一种基于异构混合内存系统的页面分配方法
CN111262800B (zh) * 2020-01-19 2022-04-29 天津芯海创科技有限公司 一种以太网交换机的业务数据通信方法及系统
US11226816B2 (en) * 2020-02-12 2022-01-18 Samsung Electronics Co., Ltd. Systems and methods for data placement for in-memory-compute
US20210256092A1 (en) * 2020-02-19 2021-08-19 Nvidia Corporation Application programming interface to accelerate matrix operations
US11416581B2 (en) * 2020-03-09 2022-08-16 International Business Machines Corporation Multiplication of a matrix with an input vector
US11340942B2 (en) 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US20210295145A1 (en) 2020-03-23 2021-09-23 Mentium Technologies Inc. Digital-analog hybrid system architecture for neural network acceleration
US11080059B1 (en) * 2020-03-30 2021-08-03 Sandisk Technologies Llc Reducing firmware size and increasing firmware performance
US11188471B2 (en) 2020-04-03 2021-11-30 Alibaba Group Holding Limited Cache coherency for host-device systems
US11693795B2 (en) * 2020-04-17 2023-07-04 Texas Instruments Incorporated Methods and apparatus to extend local buffer of a hardware accelerator
US11775298B2 (en) * 2020-04-24 2023-10-03 Intel Corporation Frequency scaling for per-core accelerator assignments
US20200266995A1 (en) * 2020-05-04 2020-08-20 Vinodh Gopal Managing state in accelerators
CN111737176B (zh) * 2020-05-11 2022-07-15 瑞芯微电子股份有限公司 一种基于pcie数据的同步装置及驱动方法
US11789770B2 (en) 2020-05-19 2023-10-17 General Electric Company Systems and methods for creating surrogate models
JP2021189462A (ja) * 2020-05-25 2021-12-13 株式会社日立製作所 ストレージ装置
KR102418794B1 (ko) * 2020-06-02 2022-07-08 오픈엣지테크놀로지 주식회사 하드웨어 가속기를 위한 파라미터를 메모리로부터 액세스하는 방법 및 이를 이용한 장치
US11657007B2 (en) * 2020-06-15 2023-05-23 Rambus Inc. Remote memory selection
US11461099B2 (en) * 2020-06-25 2022-10-04 Intel Corporation System, apparatus and method for fine-grain address space selection in a processor
US11907744B2 (en) 2020-06-25 2024-02-20 Intel Corporation System, apparatus and method for enabling fine-grain quality of service or rate control for work submissions
US11669473B2 (en) * 2020-06-26 2023-06-06 Advanced Micro Devices, Inc. Allreduce enhanced direct memory access functionality
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
CN111784489A (zh) * 2020-06-28 2020-10-16 广东金宇恒软件科技有限公司 一种基于大数据的财政核算管理系统
CN111752960B (zh) * 2020-06-28 2023-07-28 北京百度网讯科技有限公司 数据处理方法和装置
CN113867798A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 集成计算装置、集成电路芯片、板卡和计算方法
CN115878824B (zh) * 2020-07-07 2023-10-20 华为技术有限公司 图像检索系统、方法和装置
IL276538B2 (en) 2020-08-05 2023-08-01 Mellanox Technologies Ltd A cryptographic device for data communication
CN114095153A (zh) 2020-08-05 2022-02-25 迈络思科技有限公司 密码数据通信装置
US11321238B2 (en) * 2020-08-11 2022-05-03 Micron Technology, Inc. User process identifier based address translation
US11947928B2 (en) 2020-09-10 2024-04-02 Hewlett Packard Enterprise Development Lp Multi-die dot-product engine to provision large scale machine learning inference applications
US11593356B2 (en) * 2020-09-11 2023-02-28 ForgeRock, Inc. Never stale caching of effective properties
US20210004338A1 (en) * 2020-09-21 2021-01-07 Pratik Marolia Pasid based routing extension for scalable iov systems
US11409685B1 (en) * 2020-09-24 2022-08-09 Amazon Technologies, Inc. Data synchronization operation at distributed computing system
US11467992B1 (en) 2020-09-24 2022-10-11 Amazon Technologies, Inc. Memory access operation in distributed computing system
US11714559B2 (en) * 2020-09-25 2023-08-01 Advanced Micro Devices, Inc. Efficient memory-semantic networking using scoped memory models
US20220101179A1 (en) * 2020-09-25 2022-03-31 Advanced Micro Devices, Inc. Direct-connected machine learning accelerator
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11354258B1 (en) 2020-09-30 2022-06-07 Amazon Technologies, Inc. Control plane operation at distributed computing system
US20220101108A1 (en) * 2020-09-30 2022-03-31 International Business Machines Corporation Memory-mapped neural network accelerator for deployable inference systems
CN114326452B (zh) * 2020-10-10 2023-11-21 中国科学院沈阳自动化研究所 一种用于精密运动控制的异构计算加速方法
CN111966387B (zh) * 2020-10-22 2021-03-12 苏州浪潮智能科技有限公司 一种ntb卡的固件升级方法、装置、设备及存储介质
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization
US11386034B2 (en) 2020-10-30 2022-07-12 Xilinx, Inc. High throughput circuit architecture for hardware acceleration
US20210240655A1 (en) * 2020-11-16 2021-08-05 Intel Corporation Source ordering in device interconnects
CN112506701B (zh) * 2020-12-02 2022-01-21 广东电网有限责任公司佛山供电局 一种基于三模lockstep的多处理器芯片错误恢复方法
US20220188606A1 (en) * 2020-12-14 2022-06-16 Micron Technology, Inc. Memory Configuration to Support Deep Learning Accelerator in an Integrated Circuit Device
US11836518B2 (en) * 2020-12-17 2023-12-05 Wave Computing, Inc. Processor graph execution using interrupt conservation
TWI792773B (zh) * 2020-12-18 2023-02-11 美商聖巴諾瓦系統公司 用於可重配置處理器即服務(RPaaS)的節點內基於緩衝器的串流
US20220197816A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Compressed cache memory with parallel decompress on fault
TWI779444B (zh) * 2020-12-28 2022-10-01 瑞昱半導體股份有限公司 用於同步動態隨機存取記憶體之控制模組及其控制方法
US11960420B2 (en) * 2021-02-16 2024-04-16 Red Hat, Inc. Direct memory control operations on memory data structures
US11442858B1 (en) * 2021-03-10 2022-09-13 Micron Technology, Inc. Bias control for a memory device
CN113114733B (zh) * 2021-03-24 2022-07-08 重庆邮电大学 基于能量收集的分布式任务卸载和计算资源的管理方法
US11934658B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Enhanced storage protocol emulation in a peripheral device
US11934333B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Storage protocol emulation in a peripheral device
US11481343B1 (en) 2021-04-02 2022-10-25 Micron Technology, Inc. Transporting request types with different latencies
CN113191046A (zh) * 2021-04-20 2021-07-30 河海大学 一种基于ras对等式交互的有限元程序并行化方法
CN113076519A (zh) * 2021-04-21 2021-07-06 湖北九同方微电子有限公司 基于arm架构的大型矩阵求解方法
US11693779B2 (en) 2021-04-30 2023-07-04 International Business Machines Corporation Prefetch of random data using application tags
US11782865B1 (en) * 2021-06-02 2023-10-10 Amazon Technologies, Inc. Flexible data handling
CN113238853B (zh) * 2021-06-15 2021-11-12 上海交通大学 基于函数中间表达的无服务器计算调度系统及方法
US11675592B2 (en) 2021-06-17 2023-06-13 International Business Machines Corporation Instruction to query for model-dependent information
US11899589B2 (en) * 2021-06-22 2024-02-13 Samsung Electronics Co., Ltd. Systems, methods, and devices for bias mode management in memory systems
US11853231B2 (en) 2021-06-24 2023-12-26 Ati Technologies Ulc Transmission of address translation type packets
US11848838B2 (en) * 2021-06-24 2023-12-19 Hewlett Packard Enterprise Development Lp Communicating node events in network configuration
KR102593034B1 (ko) * 2021-07-02 2023-10-23 고려대학교 산학협력단 다차원 데이터베이스를 위한 스토리지내 데이터 재구성 가속기
US20230040226A1 (en) * 2021-07-27 2023-02-09 Intel Corporation Method and apparatus for dynamically adjusting pipeline depth to improve execution latency
US20230042934A1 (en) * 2021-07-27 2023-02-09 Intel Corporation Method and apparatus for high-performance page-fault handling for multi-tenant scalable accelerators
US11537313B1 (en) * 2021-08-11 2022-12-27 EMC IP Holding Company LLC Dual cast mirroring from host devices
US11829627B2 (en) * 2021-08-16 2023-11-28 Micron Technology, Inc. Data migration schedule prediction using machine learning
CN113901492A (zh) * 2021-09-06 2022-01-07 苏州国芯科技股份有限公司 数据传输的加解密方法、装置、系统及设备
CN113742267B (zh) * 2021-09-07 2023-10-27 中国科学院计算技术研究所 一种用于rdma通信设备的dma通信系统及方法
CN113780553B (zh) * 2021-09-09 2023-11-07 中山大学 一种基于高层次综合工具的深度学习模型优化方法及系统
CN113553191B (zh) * 2021-09-17 2022-01-04 深圳致星科技有限公司 用于联邦学习和隐私计算的异构处理系统
CN114048066A (zh) * 2021-10-21 2022-02-15 北京航天晨信科技有限责任公司 一种基于guid识别的板卡深度信息智能管理方法
CN114095958B (zh) * 2021-11-16 2023-09-12 新华三大数据技术有限公司 小区覆盖区域确定方法、装置、设备及存储介质
US20230161725A1 (en) * 2021-11-23 2023-05-25 Meta Platforms, Inc. Smart scalable design for a crossbar
TWI811862B (zh) * 2021-11-24 2023-08-11 宏碁股份有限公司 虛擬環境建立方法與電子裝置
WO2023092415A1 (zh) * 2021-11-25 2023-06-01 华为技术有限公司 一种消息处理方法及装置
WO2023112086A1 (ja) * 2021-12-13 2023-06-22 三菱電機株式会社 情報処理装置、プログラム及び情報処理方法
CN114237712B (zh) * 2021-12-15 2022-12-27 北京百度网讯科技有限公司 指令执行方法、装置、电子设备及计算机存储介质
CN113987589B (zh) * 2021-12-27 2022-03-18 飞天诚信科技股份有限公司 一种处理数据的方法、装置、计算机可读存储介质及装置
CN113992687B (zh) * 2021-12-28 2022-04-08 浙江宇视科技有限公司 智能业务集群调度方法、装置、电子设备及存储介质
US11934310B2 (en) * 2022-01-21 2024-03-19 Centaur Technology, Inc. Zero bits in L3 tags
CN116701292A (zh) 2022-02-24 2023-09-05 平头哥(上海)半导体技术有限公司 用于芯片间通信的处理系统和通信方法
CN114580628A (zh) * 2022-03-14 2022-06-03 北京宏景智驾科技有限公司 一种神经网络卷积层的高效量化加速方法及硬件电路
US11635988B1 (en) 2022-03-15 2023-04-25 Sas Institute Inc. Optimal number of threads determination system
CN114328592B (zh) * 2022-03-16 2022-05-06 北京奥星贝斯科技有限公司 聚合计算方法和装置
US20230305846A1 (en) * 2022-03-24 2023-09-28 Intel Corporation Processor hardware and instructions for vectorized fused and-xor
CN114827048B (zh) * 2022-03-26 2023-10-20 西安电子科技大学 一种动态可配高性能队列调度方法、系统、处理器及协议
US20230376870A1 (en) * 2022-05-17 2023-11-23 Schlumberger Technology Corporation Integrated customer delivery system
CN116264009B (zh) * 2022-06-21 2023-10-27 中兴通讯股份有限公司 光伏系统的数据处理方法、数据处理终端及存储介质
CN117348930A (zh) * 2022-06-29 2024-01-05 中科寒武纪科技股份有限公司 指令处理装置、指令执行方法、片上系统和板卡
CN117349223A (zh) * 2022-06-29 2024-01-05 中科寒武纪科技股份有限公司 片上系统、指令系统、编译系统及相关产品
US11930611B2 (en) * 2022-07-29 2024-03-12 Dell Products, L.P. Configurable chassis supporting replaceable hardware accelerator baseboards
CN115017095B (zh) * 2022-08-05 2022-11-08 微传智能科技(常州)有限公司 电流输出型ak协议轮速芯片通信系统及方法
GB2622581A (en) * 2022-09-14 2024-03-27 Advanced Risc Mach Ltd Multiple-outer-product instruction
CN115248701B (zh) * 2022-09-21 2022-12-20 进迭时空(杭州)科技有限公司 一种处理器寄存器堆之间的零拷贝数据传输装置及方法
US20240127107A1 (en) * 2022-10-14 2024-04-18 Microsoft Technology Licensing, Llc Program accelerators with multidimensional nested command structures
CN117910523A (zh) * 2022-10-19 2024-04-19 联发科技股份有限公司 将暂存存储器分配给异构设备的方法和系统
CN116257320B (zh) * 2022-12-23 2024-03-08 中科驭数(北京)科技有限公司 一种基于dpu虚拟化配置管理方法、装置、设备及介质
TWI826216B (zh) * 2022-12-29 2023-12-11 瑞昱半導體股份有限公司 記憶體控制系統與記憶體控制方法
CN115951841B (zh) * 2023-02-27 2023-06-20 浪潮电子信息产业股份有限公司 存储系统及创建方法、数据处理方法、装置、设备和介质
CN115952385B (zh) * 2023-03-10 2023-05-05 山东省计算中心(国家超级计算济南中心) 用于大规模稀疏方程组求解的并行超节点排序方法及系统
CN115982091B (zh) * 2023-03-21 2023-06-23 深圳云豹智能有限公司 基于rdma引擎的数据处理方法与系统、介质、设备
CN116149759B (zh) * 2023-04-20 2023-07-14 深圳市吉方工控有限公司 Uefi驱动卸载方法、装置、电子设备及可读存储介质
CN116821174A (zh) * 2023-07-17 2023-09-29 深圳计算科学研究院 一种基于逻辑数据块的数据查询方法及其装置
CN116627893B (zh) * 2023-07-18 2023-11-03 苏州浪潮智能科技有限公司 加速引擎配置方法、装置、并行数估计系统、设备及介质
CN117112596A (zh) * 2023-07-28 2023-11-24 中科驭数(北京)科技有限公司 数据处理方法、装置、设备及计算机可读存储介质
CN116700631B (zh) * 2023-08-03 2023-09-29 摩尔线程智能科技(北京)有限责任公司 任务管理装置、方法、图形处理器及电子设备
CN117331720B (zh) * 2023-11-08 2024-02-23 瀚博半导体(上海)有限公司 用于多核间通信的方法、寄存器组、芯片及计算机设备
CN117749718A (zh) * 2023-12-07 2024-03-22 无锡众星微系统技术有限公司 基于ack和nop机制的dma传输保序处理方法和装置
CN117389625B (zh) * 2023-12-11 2024-03-12 沐曦集成电路(南京)有限公司 基于主动中断指令的进程同步方法、系统、设备及介质
CN117389693B (zh) * 2023-12-12 2024-04-05 麒麟软件有限公司 一种硬件虚拟化系统io层安全检测方法
CN117521061B (zh) * 2024-01-05 2024-03-15 南京南自华盾数字技术有限公司 一种基于二进制转换器的定时旁路攻击安全防护方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080301414A1 (en) * 1998-10-09 2008-12-04 Altera Corporation Efficient Complex Multiplication and Fast Fourier Transform (FFT) Implementation on the ManArray Architecture
US20140177626A1 (en) * 2012-12-23 2014-06-26 Advanced Micro Devices, Inc. Die-stacked device with partitioned multi-hop network
US20140244888A1 (en) * 2013-02-26 2014-08-28 Emulex Design And Manufacturing Corp. Using pci-e extended configuration space to send ioctls to a pci-e adapter
TW201437828A (zh) * 2010-09-25 2014-10-01 Intel Corp 用於最大預測的效能增益之異質多處理器運算平台中之應用程式排程
US20150109024A1 (en) * 2013-10-22 2015-04-23 Vaughn Timothy Betz Field Programmable Gate-Array with Embedded Network-on-Chip Hardware and Design Flow

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001016715A1 (en) 1999-09-01 2001-03-08 Intel Corporation Branch instructions in a multithreaded parallel processing system
ATE534074T1 (de) 1999-09-01 2011-12-15 Intel Corp Kontextwechselbefehl für multithread-prozessor
US6738831B2 (en) * 2001-12-12 2004-05-18 Intel Corporation Command ordering
US20030120878A1 (en) 2001-12-21 2003-06-26 Andreassen Jens Kloster Resource sharing using a locking mechanism in a multiprocessor environment
US6697076B1 (en) * 2001-12-31 2004-02-24 Apple Computer, Inc. Method and apparatus for address re-mapping
US7068072B2 (en) * 2003-06-30 2006-06-27 Xilinx, Inc. Integrated circuit with interface tile for coupling to a stacked-die second integrated circuit
US7754539B2 (en) * 2003-10-08 2010-07-13 Sige Semiconductor Inc. Module integration integrated circuits
US7765543B1 (en) * 2003-12-17 2010-07-27 Vmware, Inc. Selective descheduling of idling guests running on a host computer system
US7109734B2 (en) * 2003-12-18 2006-09-19 Xilinx, Inc. Characterizing circuit performance by separating device and interconnect impact on signal delay
US7450959B2 (en) * 2003-12-31 2008-11-11 Qualcomm Incorporated Wireless multiprocessor system-on-chip with unified memory and fault inhibitor
US7366865B2 (en) * 2004-09-08 2008-04-29 Intel Corporation Enqueueing entries in a packet queue referencing packets
CN100531394C (zh) * 2004-12-30 2009-08-19 美国博通公司 微处理器中视频运动处理的方法和系统
US7447873B1 (en) * 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
US20070271325A1 (en) 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US8860741B1 (en) * 2006-12-08 2014-10-14 Nvidia Corporation Graphics processor with memory management unit and cache coherent link
CN101308461A (zh) 2007-05-18 2008-11-19 国际商业机器公司 处理器及其中处理锁事务的方法
US7783822B2 (en) * 2007-07-25 2010-08-24 Hewlett-Packard Development Company, L.P. Systems and methods for improving performance of a routable fabric
US8347005B2 (en) * 2007-07-31 2013-01-01 Hewlett-Packard Development Company, L.P. Memory controller with multi-protocol interface
US7921272B2 (en) 2007-10-05 2011-04-05 International Business Machines Corporation Monitoring patterns of processes accessing addresses in a storage device to determine access parameters to apply
US8055856B2 (en) 2008-03-24 2011-11-08 Nvidia Corporation Lock mechanism to enable atomic updates to shared memory
US7827336B2 (en) 2008-11-10 2010-11-02 Freescale Semiconductor, Inc. Technique for interconnecting integrated circuits
US8115511B2 (en) * 2009-04-14 2012-02-14 Monolithic 3D Inc. Method for fabrication of a semiconductor device and structure
US8843682B2 (en) 2010-05-18 2014-09-23 Lsi Corporation Hybrid address mutex mechanism for memory accesses in a network processor
WO2011068091A1 (ja) 2009-12-04 2011-06-09 日本電気株式会社 サーバ及びフロー制御プログラム
JP2012073741A (ja) 2010-09-28 2012-04-12 Fuji Electric Co Ltd バス転送システム
US9019791B2 (en) * 2010-11-03 2015-04-28 Shine C. Chung Low-pin-count non-volatile memory interface for 3D IC
US8683243B2 (en) * 2011-03-11 2014-03-25 Intel Corporation Dynamic core selection for heterogeneous multi-core systems
US9330430B2 (en) * 2011-03-21 2016-05-03 Apple Inc. Fast queries in a multithreaded queue of a graphics system
CN103547993B (zh) * 2011-03-25 2018-06-26 英特尔公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
US8935683B2 (en) * 2011-04-20 2015-01-13 Qualcomm Incorporated Inline function linking
US9846673B2 (en) * 2011-11-04 2017-12-19 Waseda University Processor, accelerator, and direct memory access controller within a processor core that each reads/writes a local synchronization flag area for parallel execution
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US9436512B2 (en) * 2011-12-22 2016-09-06 Board Of Supervisors Of Louisana State University And Agricultural And Mechanical College Energy efficient job scheduling in heterogeneous chip multiprocessors based on dynamic program behavior using prim model
US9136021B2 (en) 2011-12-23 2015-09-15 Intel Corporation Self-repair logic for stacked memory architecture
WO2013101139A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Providing an asymmetric multicore processor system transparently to an operating system
EP2842031A4 (en) * 2012-04-25 2015-12-30 Intel Corp METHOD AND SYSTEM FOR SAVING THE RELEASE CONSISTENCY IN A COMMON MEMORY PROGRAMMING
US9280395B2 (en) * 2012-05-30 2016-03-08 Intel Corporation Runtime dispatching among a heterogeneous group of processors
US8931108B2 (en) 2013-02-18 2015-01-06 Qualcomm Incorporated Hardware enforced content protection for graphics processing units
KR101400577B1 (ko) * 2013-03-11 2014-06-19 한양대학교 산학협력단 Gpu를 이용한 희소행렬 곱셈 방법
US9679615B2 (en) * 2013-03-15 2017-06-13 Micron Technology, Inc. Flexible memory system with a controller and a stack of memory
US9525586B2 (en) * 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
JP2014186618A (ja) 2013-03-25 2014-10-02 Toshiba Corp ロックトランザクションコントローラを備えた共有メモリ制御ユニット
US9170854B2 (en) * 2013-06-04 2015-10-27 Advanced Micro Devices, Inc. Thread assignment for power and performance efficiency using multiple power states
US20150007196A1 (en) * 2013-06-28 2015-01-01 Intel Corporation Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores
US9571363B2 (en) * 2013-07-15 2017-02-14 Centurylink Intellectual Property Llc Control groups for network testing
US9471133B2 (en) 2013-08-28 2016-10-18 Via Technologies, Inc. Service processor patch mechanism
US10073808B2 (en) 2013-12-26 2018-09-11 Intel Corporation Multichip package link
US9519324B2 (en) * 2014-03-26 2016-12-13 Intel Corporation Local power gate (LPG) interfaces for power-aware operations
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
EP3126971B1 (en) * 2014-03-30 2020-04-29 Universiteit Gent Program execution on heterogeneous platform
US20160111406A1 (en) * 2014-10-17 2016-04-21 Globalfoundries Inc. Top-side interconnection substrate for die-to-die interconnection
WO2016068999A1 (en) 2014-10-31 2016-05-06 Hewlett Packard Enterprise Development Lp Integrated heterogeneous processing units
US9921768B2 (en) 2014-12-18 2018-03-20 Intel Corporation Low power entry in a shared memory link
US20160191420A1 (en) * 2014-12-27 2016-06-30 Intel Corporation Mitigating traffic steering inefficiencies in distributed uncore fabric
US10229468B2 (en) * 2015-06-03 2019-03-12 Intel Corporation Automated conversion of GPGPU workloads to 3D pipeline workloads
US9870339B2 (en) 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing
US10042673B1 (en) * 2016-05-02 2018-08-07 EMC IP Holdings Company LLC Enhanced application request based scheduling on heterogeneous elements of information technology infrastructure
US9761564B1 (en) 2016-06-30 2017-09-12 Micron Technology, Inc. Layout of transmission vias for memory device

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080301414A1 (en) * 1998-10-09 2008-12-04 Altera Corporation Efficient Complex Multiplication and Fast Fourier Transform (FFT) Implementation on the ManArray Architecture
TW201437828A (zh) * 2010-09-25 2014-10-01 Intel Corp 用於最大預測的效能增益之異質多處理器運算平台中之應用程式排程
TWI550413B (zh) * 2010-09-25 2016-09-21 英特爾股份有限公司 用於最大預測的效能增益之異質多處理器運算平台中之應用程式排程
US20140177626A1 (en) * 2012-12-23 2014-06-26 Advanced Micro Devices, Inc. Die-stacked device with partitioned multi-hop network
US20140244888A1 (en) * 2013-02-26 2014-08-28 Emulex Design And Manufacturing Corp. Using pci-e extended configuration space to send ioctls to a pci-e adapter
US20150109024A1 (en) * 2013-10-22 2015-04-23 Vaughn Timothy Betz Field Programmable Gate-Array with Embedded Network-on-Chip Hardware and Design Flow

Also Published As

Publication number Publication date
ES2933675T3 (es) 2023-02-13
CN115454586A (zh) 2022-12-09
EP4089531A1 (en) 2022-11-16
US11693691B2 (en) 2023-07-04
CN116755778A (zh) 2023-09-15
DK3812900T3 (da) 2024-02-12
PL3812900T3 (pl) 2024-04-08
KR102520017B1 (ko) 2023-04-11
EP3563235B1 (en) 2022-10-05
KR20190093568A (ko) 2019-08-09
KR20200140395A (ko) 2020-12-15
US20190347125A1 (en) 2019-11-14
TWI832298B (zh) 2024-02-11
WO2018125250A1 (en) 2018-07-05
EP4120070A1 (en) 2023-01-18
US20200401440A1 (en) 2020-12-24
TW202240387A (zh) 2022-10-16
TW201826122A (zh) 2018-07-16
TW202347124A (zh) 2023-12-01
TW202121169A (zh) 2021-06-01
PL3563235T3 (pl) 2023-03-13
CN112506568A (zh) 2021-03-16
FI3812900T3 (fi) 2024-02-09
EP3563235A1 (en) 2019-11-06
CN110121698A (zh) 2019-08-13
EP3563235A4 (en) 2020-08-26
EP4120070B1 (en) 2024-05-01
DE112016007566T5 (de) 2019-09-26
EP3812900A1 (en) 2021-04-28
US11416281B2 (en) 2022-08-16
KR20220090588A (ko) 2022-06-29
US20220164218A1 (en) 2022-05-26
EP3812900B1 (en) 2023-11-29
US11093277B2 (en) 2021-08-17
US20230418655A1 (en) 2023-12-28
JP2020503593A (ja) 2020-01-30
JP6988040B2 (ja) 2022-01-05
BR112019010679A2 (pt) 2019-09-17
KR20230106746A (ko) 2023-07-13
TWI810166B (zh) 2023-08-01

Similar Documents

Publication Publication Date Title
TWI742964B (zh) 用於異質計算之系統,方法,及設備
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
JP7164267B2 (ja) ヘテロジニアスコンピューティングのためのシステム、方法及び装置
TW201725509A (zh) 用於安全指令執行管線之指令及邏輯
CN109643293B (zh) 检测总线上锁条件并且避免总线锁
US11074204B2 (en) Arbiter based serialization of processor system management interrupt events
BR112019009566A2 (pt) aparelhos e métodos para uma arquitetura de processador
US10223149B2 (en) Implementing device models for virtual machines with reconfigurable hardware
CN111355574A (zh) 信任域中的安全加密密钥管理
CN110968394A (zh) 虚拟机与其监视器之间的页面属性的分割控制方法和系统
Santos et al. Solving datapath issues on near-data accelerators
US20240160570A1 (en) Mechanism to identify key sections of io packets and its use for efficient io caching