CN108027732A - 与断言的加载指令相关联的预取 - Google Patents

与断言的加载指令相关联的预取 Download PDF

Info

Publication number
CN108027732A
CN108027732A CN201680054441.7A CN201680054441A CN108027732A CN 108027732 A CN108027732 A CN 108027732A CN 201680054441 A CN201680054441 A CN 201680054441A CN 108027732 A CN108027732 A CN 108027732A
Authority
CN
China
Prior art keywords
instruction
block
asserted
loading
memory
Prior art date
Legal status (The legal status 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 status listed.)
Withdrawn
Application number
CN201680054441.7A
Other languages
English (en)
Inventor
D·C·伯格
A·L·史密斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN108027732A publication Critical patent/CN108027732A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3656Software debugging using additional hardware using a specific debug interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/268Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
    • 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
    • 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30043LOAD or STORE instructions; Clear instruction
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose 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/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • 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/3802Instruction 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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
    • 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/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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/466Transaction processing
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/602Details relating to cache prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/604Details relating to cache allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3557Indexed addressing using program counter as base address
    • 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)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

公开了与预取与基于块的处理器架构中的程序的断言的加载相关联的数据有关的技术。在所公开的技术的一个示例中,处理器包括基于块的处理器核,其用于执行包括多个指令的指令块。基于块的处理器核包括译码逻辑和预取逻辑。译码逻辑被配置为检测指令块的断言的加载指令。预取逻辑被配置为计算断言的加载指令的目标地址,并且针对所计算的目标地址处的数据向处理器的存储器层级发出预取请求。

Description

与断言的加载指令相关联的预取
背景技术
由于摩尔定律所预测的持续的晶体管扩展,微处理器已经从晶体管数的持续增加、集成电路成本、制造资本、时钟频率、以及能量效率中收益,而相关的处理器指令集架构(ISA)却很小变化。然而,从在过去40年里驱动半导体工业的光刻扩展实现的益处正在放缓或者甚至反转。精简指令集计算(RISC)架构已经成为处理器设计中的主导典范很多年。乱序超标量实现尚未在面积或性能方面展现出持续改进。因此,存在对于扩展性能改进的处理器ISA改进的足够机会。
发明内容
公开了用于预取与基于块的处理器指令集架构(BB-ISA)的断言的加载和存储指令相关联的数据的方法、装置和计算机可读存储设备。所描述的技术和工具能够潜在地改进处理器性能,并且可以彼此分离地被实现,或者彼此各种组合被实现。如下面将更充分地描述的,所描述的技术和工具可以被实现在以下各项中:数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,使用可重新配置逻辑被实现在现场可编程门阵列(FPGA)中的微处理器核)、可编程逻辑、或者其他适合的逻辑电路。如对于本领域的普通技术人员而言将容易地明显的,所公开的技术可以被实现在各种计算平台中,包括但不限于服务器、大型机、手机、智能电话、PDA、手持式设备、手持式计算机、触摸屏平板设备、平板计算机、可穿戴计算机、以及膝上型计算机。
在所公开的技术的一些示例中,处理器包括基于块的处理器核,其用于执行包括指令头部和多个指令的指令块。基于块的处理器核包括译码逻辑和预取逻辑。译码逻辑被配置为检测指令块的断言的加载指令。预取逻辑被配置为计算断言的加载指令的目标地址,并且针对所计算的目标地址处的数据向处理器的存储器层级发出预取请求。
提供本发明内容以引入以在具体实施方式中下面进一步描述的简化形式的概念的选择。本发明内容不旨在标识要求保护的主题的关键特征或基本特征,其也不旨在用于限制要求保护的主题的范围。所公开的主题的前述和其他目标、特征以及优点将从参考附图进行的以下具体实施方式变得更加明显。
附图说明
图1图示了如可以在所公开的技术的一些示例中使用的包括多个处理器核的基于块的处理器。
图2图示了如可以在所公开的技术的一些示例中使用的基于块的处理器核。
图3图示了根据所公开的技术的某些示例的多个指令块。
图4图示了源代码和相应的指令块的部分。
图5图示了如可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6是图示基于块的处理器中的处理器核的状态的进展的示例的流程图。
图7A示出了用于基于块的处理器的程序的示例源码片段。
图7B示出了来自图7A的示例源码片段的依赖关系图的示例。
图8示出了与来自图7A的源码片段相对应的示例指令块,指令块包括断言的加载指令和断言的存储指令。
图9是示出可以在所公开的技术的一些示例中执行的编译用于基于块的处理器的程序的示例方法的流程图。
图10示出了可以在所公开的技术的一些示例中使用的用于在基于块的处理器核上执行指令块的示例系统。
图11示出了可以在所公开的技术的一些示例中使用的包括具有多个基于块的处理器核和存储器层级的处理器的示例系统。
图12到图13是示出可以在所公开的技术的一些示例中执行的在基于块的处理器核上执行指令块的示例方法的流程图。
图14是图示用于实现所公开的技术的一些实施例的适合的计算环境的块图。
具体实施方式
I.总体考虑
在未旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开内容。
如在本申请中所使用的,除非上下文清楚地指明,否则单数形式“一”、“一种”和“该”包括复数形式。此外,术语“包括”意味着“包含”。而且,术语“耦合的”涵盖机械的、电的、磁性的、光学的以及将多个项耦合或链接在一起的其他实际方式,并且不排除耦合项之间的中间元件的存在。另外,如在此所使用的,术语“和/或”意味着短语中的任何一项或多项的组合。
在此所描述的系统、方法和装置不应当以任何方式被解释为限制性的。相反,本公开涉及彼此单独并且以各种组合和子组合的各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的系统、方法和装置既不限于任何特定方面或者特征或者其组合,所公开的内容和方法也不要求任何一个或多个特定优点存在或者问题被解决。此外,所公开的实施例的任何特征或者方面可以彼此以各种组合和子组合被使用。
虽然为了方便呈现而以特定顺序的次序描述所公开的方法中的一些方法的操作,但是应当理解,除非特定排序由下面阐述的特定语言所要求,否则说明书的这种方式涵盖重新布置。例如,顺序地描述的操作可以在一些情况下重新布置或者并行地执行。此外,出于简单的缘故,附图可能未示出所公开的内容和方法可以结合其他内容和方法使用的各种方式。此外,说明书有时使用类似“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是所执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实现而变化并且是由本领域的普通技术人员容易地可辨别的。
参考本公开的装置或者方法在此所呈现的操作理论、科学原理或者其他理论描述已经出于更好的理解的目的而被提供,并且不旨在范围方面是限制性的。所附的权利要求中的装置和方法不限于以由这样的操作理论所描述的方式实现的那些装置和方法。
所公开的方法中的任一方法可以被实现为被存储在一个或多个计算机可读介质(例如,计算机可读介质(诸如一个或多个光学介质光盘、易失性存储器部件(诸如DRAM或SRAM))或非易失性存储器部件(诸如硬盘驱动器))上并且被执行在计算机(例如,任何商业可获得的计算机,包括智能电话或者包括计算硬件的其他移动设备)上的计算机可执行指令。用于实现所公开的技术的计算机可执行指令中的任一指令以及在所公开的实施例的实现期间创建和使用的任何数据可以被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由网络浏览器或者其他软件应用(诸如远程计算应用)访问或者下载的软件应用的一部分。这样的软件可以例如在单个本地计算机(例如,利用在任何适合的商业可获得的计算机上执行的通用处理器和/或基于块的处理器)上被执行,或者在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)、或者其他这样的网络)中被执行。
为了清晰起见,描述了基于软件的实现的仅某些所选的方面。省略了在本领域中众所周知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或者程序。例如,所公开的技术可以通过以C、C++、JAVA或者任何其他适合的编程语言来实现。同样地,所公开的技术不限于任何特定计算机或者硬件类型。适合的计算机和硬件的某些细节是众所周知的并且不需要在本公开中被详细阐述。
此外,基于软件的实施例(包括例如用于使得计算机执行所公开的方法中的任一方法的计算机可执行指令)中的任一实施例可以通过适合的通信手段被上载、被下载或者被远程访问。这样的适合的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或者其他这样的通信手段。
II.所公开的技术的简介
超标量乱序微架构采用大量的电路资源来重命名寄存器,以数据流次序调度指令,在误推测之后清理,并且针对精确异常引退结果。这包括昂贵的能量消耗电路,诸如深的许多端口的寄存器文件、用于数据流指令调度唤醒的许多端口的内容可访问存储器(CAM)、以及许多宽总线复用器和旁路网络,所有的这些都是资源密集的。例如,多读取、多写入RAM的基于FPGA的实现通常要求复制、多循环操作、时钟加倍、组交错、实况值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令集并行性(ILP)、乱序(out-of-order,OoO)、超标量执行的技术来实现能量效率和/或性能增强,同时避免处理器硬件和相关联的软件二者中的大量的复杂性和开销。在所公开的技术的一些示例中,包括多个处理器核的基于块的处理器使用针对区域和能量有效的高ILP执行所设计的显式数据图形执行(EDGE)ISA。在一些示例中,EDGE架构和相关联的编译器的使用巧妙处理重命名CAM的寄存器的远离和复杂性。在一些示例中,基于块的处理器的相应核可以存储或者高速缓存可以被重复地执行的所取指且译码的指令,并且所取指且译码的指令可以被重新使用以潜在地实现减少的功率和/或增加的性能。
在所公开的技术的某些示例中,EDGE ISA可以消除对于一个或多个复杂架构特征的需要,包括寄存器重命名、数据流分析、误推测恢复以及按序引退,同时支持主流编程语言(诸如C和C++)。在所公开的技术的某些示例中,基于块的处理器执行多个(两个或两个以上)指令作为原子块。基于块的指令可以被用于以更显式的方式表达程序数据流和/或指令流的语义,这允许改进的编译器和处理器性能。在所公开的技术的某些示例中,显式数据图形执行指令集架构(EDGE ISA)包括关于可以用于改进对不适当的控制流指令的检测的程序控制流的信息,从而增加性能、节省存储器资源和/或以及节省能量。
在所公开的技术的一些示例中,在指令块内组织的指令原子地被取指、被执行并且被提交。由原子指令块中的指令产生的中间结果被本地缓冲,直到指令块被提交为止。当指令块被提交时,对由执行指令块的指令而导致的可见架构状态的更新对其他指令块可见。块内的指令以数据流次序被执行,其使用寄存器重命名减少或者消除并且提供功率有效的OoO执行。编译器可以被用于通过ISA显式地编码数据依存性,这减少或者消除负担的处理器核控制逻辑在运行时重新发现依存性。使用所断言的执行,块内分支可以被转换为数据流指令,并且除了存储器依存性之外的依存性可以限于直接数据依存性。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接地传递其操作数,这减少对功耗渴望的多端口物理寄存器文件的访问。
在指令块之间,指令可以使用诸如存储器和寄存器的可见架构状态来进行通信。因此,通过利用混合数据流执行模型,EDGE架构可以仍然支持命令式编程语言和顺序的存储器语义,但是期望地还享有具有近按序功率效率和复杂性的乱序执行的益处。
在所公开的技术的一些示例中,处理器包括基于块的处理器核,其用于执行包括指令头部和多个指令的指令块。基于块的处理器核包括译码逻辑和预取逻辑。译码逻辑可以被配置为检测指令块的断言的加载指令。预取逻辑可以被配置为计算断言的加载指令的目标地址并且针对所计算的目标地址处的数据向处理器的存储器层级发出预取请求。断言的加载指令的执行速度可以通过在加载指令被执行之前从存储器中预取数据来潜在地提高。
如本领域的普通技术人员将容易地理解到,所公开的技术的实现的范围在各种区域、性能和功率折中的情况下是可能的。
III.示例的基于块的处理器
图1是如可以被实现在所公开的技术的一些示例中的基于块的处理器100的块图10。处理器100被配置为根据指令集架构(ISA)来执行原子指令块,ISA描述了处理器操作的若干方面,包括寄存器模型、由基于块的指令执行的若干定义操作、存储器模型、中断以及其他架构特征。基于块的处理器包括多个处理器核110,其包括处理器核111。
如在图1中所示,处理器核经由核互连120而彼此连接。核互连120携带数据并且控制核110中的个体核、存储器接口140以及输入/输出(I/O)接口145之间的信号。核互连120可以使用电的、光学的、磁性的或者其他适合的通信技术来发送和接收信号,并且可以取决于特定期望的配置而提供根据若干不同的拓扑布置的通信连接。例如,核互连120可以具有交叉开关、总线、点对点总线、或者其他适合的拓扑。在一些示例中,核110中的任一核可以被连接到其他核中的任一核,而在其他示例中,一些核仅被连接到其他核的子集。例如,每个核可以仅被连接到最近的4、8或20个邻近核。核互连120可以用于将输入/输出数据传送至核以及从核传送输入/输出数据,以及将控制信号和其他信息信号传送至核以及从核传送控制信号和其他信息信号。例如,核110中的每个核110可以接收并且传送指示当前正由相应核中的每个核执行的指令的执行状态的信号量。在一些示例中,核互连120被实现为将核110和存储器系统连接的接线,而在其他示例中,核互连可以包括用于多路复用(一条或多条)互连接线上的数据信号的电路、开关和/或路由部件,包括活跃的信号驱动器和中继器或者其他适合的电路。在所公开的技术的一些示例中,在处理器100内和/或至/来自处理器100的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括差分信号、脉冲信号或者用于传送数据和控制信号的其他适合的信号。
在图1的示例中,处理器的存储器接口140包括被用于连接到附加存储器(例如,被定位在除了处理器100之外的另一集成电路上的存储器)的接口逻辑。如在图1中所示,外部存储器系统150包括L2高速缓存152和主存储器155。在一些示例中,L2高速缓存可以使用静态RAM(SRAM)被实现,并且主存储器155可以使用动态RAM(DRAM)被实现。在一些示例中,存储器系统150被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口140包括允许在不使用(一个或多个)寄存器文件和/或处理器100的情况下转移存储器中的数据块的直接存储器访问(DMA)控制器。在一些示例中,存储器接口140可以包括用于管理并且分配虚拟存储器、扩展可用的主存储器155的存储器管理单元(MMU)。
I/O接口145包括用于将输入信号和输出信号接收并且发送到其他部件的电路,诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或者其他协处理部件的信号)、时钟信号、信号量或者其他适合的I/O信号。I/O信号可以是同步的或者异步的。在一些示例中,I/O接口的全部或部分结合存储器接口140使用存储器映射的I/O技术被实现。
基于块的处理器100还可以包括控制单元160。控制单元可以经由核互连120或边带互连(未示出)与处理核110、I/O接口145和存储器接口140通信。控制单元160监督处理器100的操作。可以由控制单元160执行的操作可以包括对核的分配和去分配以用于执行指令处理;对任何核、寄存器文件、存储器接口140和/或I/O接口145中之间的输入数据和输出数据的控制;对执行流的修改;以及验证控制流中的分支指令、指令头部和其他改变的(一个或多个)目标位置。控制单元160还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的一些示例中,控制单元160至少部分地使用处理器核110中的一个或多个核被实现,而在其他示例中,控制单元160使用非基于块的处理器核(例如,耦合到存储器的通用RISC处理核)被实现。在一些示例中,控制单元160至少部分地使用以下各项中的一项或多项被实现:硬连线有限状态机、可编程微代码、可编程门阵列或者其他适合的控制电路。在备选示例中,可以由核110中的一个或多个核来执行控制单元功能。
控制单元160包括用于将指令块分配到处理器核110的调度器。如在此所使用的,调度器分配涉及用于引导指令块的操作的硬件,包括发起指令块映射、取指、译码、执行、提交、中止、空闲以及刷新指令块。在一些示例中,硬件接收使用计算机可执行指令所生成的信号,以引导指令调度器的操作。处理器核110在指令块映射期间被指派到指令块。指令操作的叙述阶段出于说明性目的,并且在所公开的技术的一些示例中,某些操作可以被组合、被省略、被分离为多个操作,或者被添加附加操作。
基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分布到处理器内的各种部件(例如,核110、互连120、存储器接口140和I/O接口145)。在所公开的技术的一些示例中,所有部件共享共同时钟,而在其他示例中,不同的部件使用不同的时钟(例如,具有不同的时钟频率的时钟信号)。在一些示例中,时钟的一部分被选通以在处理器部件中的一些部件未被使用时允许功率节省。在一些示例中,时钟信号使用锁相环(PLL)被生成以生成具有固定的恒定频率和占空比的信号。接收时钟信号的电路可以在单个边沿(例如,上升沿)上被触发,而在其他示例中,接收电路中的至少一些电路通过上升和下降时钟沿而被触发。在一些示例中,时钟信号可以光学地或无线地被传输。
IV.示例的基于块的处理器核
图2是如可以在所公开的技术的某些示例中使用的进一步详述用于基于块的处理器100并且特别是基于块的处理器核之一(处理核111)的实例的示例微架构的块图200。为了便于解释,示例性的基于块的处理器核111被图示有五个阶段:指令取指(IF)、译码(DC)、操作数取回、执行(EX)以及存储器/数据访问(LS)。然而,本领域的普通技术人员将容易地理解到,对所图示的微架构的修改(诸如添加/移除阶段、添加/移除执行操作的单元、以及其他实现细节)可以被修改为适合用于基于块的处理器的特定应用。
在所公开的技术的一些示例中,处理器核111可以用于执行和提交程序的指令块。指令块是包括指令块头部和多个指令的基于块的处理器指令的原子集合。如将在下面进一步讨论的,指令块头部可以包括描述指令块的执行模式的信息以及可以用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定ISA和处理器硬件,还可以在指令的执行期间使用指令块头部,以通过例如允许指令和/或数据的提前取回、改进的分支预测、推测性执行、改进的能量效率和改进的代码紧凑性来提高执行指令块的性能。
指令块的指令可以是显式地编码指令块的生产方-消费方指令之间的关系的数据流指令。特别地,指令可以通过仅为目标指令保留的操作数缓冲器直接将结果传送给目标指令。存储在操作数缓冲器中的中间结果通常对执行核外部的核不可见,因为块原子执行模型只传递指令块之间的最终结果。当指令块被提交时,来自执行原子指令块的指令的最终结果在执行核外部可见。因此,由每个指令块生成的可见架构状态可以作为单个事务出现在执行核外部,并且中间结果通常在执行核外部是不可观察的。
如在图2中所示,处理器核111包括控制单元205,其可以从其他核接收控制信号,并且生成控制信号来调节核操作并且使用指令调度器调度核内的指令流。控制单元205可以包括用于检查核状态和/或配置处理器核111的操作模式的状态访问逻辑207。控制单元205可以包括用于在处理器核111的一个或多个操作模式期间生成控制信号的执行控制逻辑208。可以由控制单元205和/或指令调度器206执行的操作可以包括对核的分配和去分配以用于执行指令处理;对任意核、寄存器文件、存储器接口140和/或I/O接口145之间的输入数据和输出数据的控制。控制单元205还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的其他示例中,控制单元205和/或指令调度器206使用非基于块的处理器核(例如,耦合到存储器的通用RISC处理核)被实现。在一些示例中,控制单元205、指令调度器206、状态访问逻辑207和/或执行控制逻辑208至少部分地使用以下各项中的一项或多项被实现:硬连线有限状态机、可编程微代码、可编程门阵列、或者其他适合的控制电路。
控制单元205可以译码指令块头部以获得关于指令块的信息。例如,指令块的执行模式可以通过各种执行标志在指令块头部中指定。经译码的执行模式可以存储在执行控制逻辑208的寄存器中。基于执行模式,执行控制逻辑208可以生成控制信号以调节核操作并且调度核111内的指令流,诸如通过使用指令调度器206。例如,在默认执行模式期间,执行控制逻辑208可以对在处理器核111的一个或多个指令窗口(例如,210、211)上执行的一个或多个指令块的指令进行排序。具体地,每个指令可以通过指令取指、译码、操作数取回、执行和存储器/数据访问阶段进行排序,使得指令块的指令可以流水线化并且并行执行。指令准备好在它们的操作数可用时执行,并且指令调度器206可以选择执行指令的顺序。作为另一示例,执行控制逻辑208可以包括用于在加载和存储指令被执行之前取回与加载和存储指令相关联的数据的预取逻辑。
状态访问逻辑207可以包括用于其他核和/或处理器级控制单元(诸如图1的控制单元160)与核111通信并且访问核111的状态的接口。例如,状态访问逻辑207可以连接到核互连(诸如图1的核互连120),并且其他核可以经由控制信号、消息、读取和写入寄存器等进行通信。
状态访问逻辑207可以包括用于修改和/或检查指令块的模式和/或状态和/或核状态的控制状态寄存器或者其他逻辑。作为示例,核状态可以指示指令块是否被映射到核111或者核111的指令窗口(例如,指令窗口210、211)、指令块是否驻留在核111上、指令块是否执行在核111上、指令块是否准备提交、指令块是否正执行提交、以及指令块是否空闲。作为另一示例,指令块的状态可以包括指示指令块是所执行的最旧的指令块的标记或者标志以及指示指令块正推测地执行的标志。
控制状态寄存器(CSR)可以被映射到被保留用于由基于块的处理器使用的唯一存储器位置。例如,控制单元160(图1)的CSR可以被指派到第一地址范围,存储器接口140(图1)的CSR可以被指派到第二地址范围,第一处理器核可以被指派到第三地址范围,第二处理器核可以被指派到第四地址范围,等等。在一个实施例中,CSR可以使用基于块的处理器的通用存储器读取和写入指令而被访问。附加地或者备选地,CSR可以使用用于CSR的特定读取和写入指令(例如,指令具有与存储器读取和写入指令不同的操作码)而被访问。因此,一个核可以通过从对应于不同核的CSR的地址进行读取来检查不同核的配置状态。类似地,一个核可以通过写入到对应于不同核的CSR的地址来修改不同核的配置状态。附加地或备选地,CSR可以通过将命令通过串行扫描链移位到状态访问逻辑207来访问。以这种方式,一个核可以检查不同核的状态访问逻辑207,并且一个核可以修改不同核的状态访问逻辑207或者模式。
指令窗口210和211中的每个指令窗口可以从输入端口220、221和222(其连接到互连总线)中的一个或多个输入端口以及指令高速缓存227(其进而连接到指令译码器228和229)接收指令和数据。附加的控制信号还可以在附加的输入端口225上被接收。指令译码器228和229中的每个指令译码器对用于指令块的指令进行译码,并且将所译码的指令存储在被定位在每个相应的指令窗口210和211中的存储器存储库215和216内。
处理器核111还包括耦合到L1(第一级)高速缓存235的寄存器文件230。寄存器文件230存储用于在基于块的处理器架构中定义的寄存器的数据,并且可以具有一个或多个读端口和一个或多个写端口。例如,寄存器文件可以包括用于将数据存储在寄存器文件中的两个或两个以上写端口,以及具有用于从寄存器文件内的个体寄存器读取数据的多个读端口。在一些示例中,单个指令窗口(例如,指令窗口210)可以一次访问寄存器文件的仅一个端口,而在其他示例中,指令窗口210可以访问一个读端口和一个写端口,或者可以同时访问两个或两个以上读端口和/或写端口。在一些示例中,寄存器文件230可以包括64个寄存器,寄存器中的每个寄存器保持32位的数据的字。(除非另外指定,否则本申请将把32位的数据称为字)。在一些示例中,寄存器文件230内的寄存器中的一些寄存器可以被分配为特殊目的。例如,寄存器中的一些寄存器可以被专用作系统寄存器示例,其包括存储常量值(例如,所有零字)、(一个或多个)程序计数器(PC)(其指示正被执行的程序线程的当前地址)、物理核数目、逻辑核数目、核分配拓扑、核控制标志、处理器拓扑或者其他适合的专用目的的寄存器。在一些示例中,存在多个程序计数器寄存器、一个或每个程序计数器,以允许跨一个或多个处理器核和/或处理器的多个执行线程的并发执行。在一些示例中,程序计数器被实现为指定存储器位置,而不是寄存器文件中的寄存器。在一些示例中,系统寄存器的使用可以由操作系统或者其他监督式计算机指令进行限制。在一些示例中,寄存器文件230被实现为触发器阵列,而在其他示例中,寄存器文件可以使用锁存器、SRAM或者其他形式的存储器存储装置被实现。针对给定处理器(例如,处理器100)的ISA规格指定寄存器文件230内的寄存器如何被定义并且被使用。
在一些示例中,处理器100包括由多个处理器核共享的全局寄存器文件。在一些示例中,与处理器核相关联的个体寄存器文件可以被组合以静态地或者动态地形成较大的文件,这取决于处理器ISA和配置。
如在图2中所示,指令窗口210的存储器存储库215包括若干译码的指令241、左操作数(LOP)缓冲器242、右操作数(ROP)缓冲器243以及指令记分板245。在所公开的技术的一些示例中,指令块中的每个指令被分解为一行译码的指令、左操作数和右操作数和记分板数据,如在图2中所示。译码的指令241可以包括被存储为位级控制信号的指令的部分或者完全译码的版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收到的寄存器值、从存储器接收到的数据、在指令内编码的中间操作数、由较早发出的指令计算的操作数、或者其他操作数值),直到其相应的译码的指令准备好执行。指令操作数从操作数缓冲器242和243被读取,而不是寄存器文件。
第二指令窗口211的存储器存储库216存储类似的指令信息(译码的指令、操作数和记分板)作为存储器存储库215,但是出于简单的原因在图2中未示出。指令块可以关于第一指令窗口由第二指令窗口211并发地或者顺序地执行,这受制于ISA约束并且如由控制单元205引导。
在所公开的技术的一些示例中,前端流水线阶段IF和DC可以从后端流水线阶段(IS、EX、LS)运行去耦合。在一个实施例中,控制单元可以每时钟周期将两个指令取指并且译码到指令窗口210和211中的每个指令窗口中。在备选实施例中,控制单元可以每时钟周期将一个、四个或者另一数目的指令取指并且译码到对应数目的指令窗口中。控制单元205使用记分板245来提供指令窗口数据流调度逻辑以监测每个译码的指令的输入(例如,每个相应指令的(一个或多个)断言和(一个或多个)操作数)的就绪状态。当针对特定译码的指令的所有输入就绪时,指令准备好发出。控制逻辑205然后每周期发起一个或多个下一指令(例如,最低编号的就绪指令)的执行,并且其译码指令和输入操作数被发送到功能单元260中的一个或多个功能单元以用于执行。译码的指令还可以对若干就绪事件进行编码。控制逻辑205中的调度器接受来自其他源的这些和/或事件,并且更新窗口中的其他指令的就绪状态。因此执行从处理器核的111个就绪零输入指令开始,继续以零输入指令为目标的指令等。
译码指令241不需要以其被布置在指令窗口210的存储器存储库215内的相同次序被执行。相反,指令记分板245用于追踪译码的指令的依存性,并且当依存性已经被满足时,相关联的个体译码指令被调度用于执行。例如,当依存性已经针对相应指令被满足时,对相应指令的参考可以被推送到就绪队列上,并且指令可以从就绪队列以先进先出(FIFO)次序被调度。被存储在记分板245中的信息可以包括但不限于相关联的指令的执行断言(诸如指令是否正等待要被计算的断言位,并且在断言位是真或者假的情况下指令是否执行)、操作数对于指令的可用性、或者在执行相关联的个体指令之前所要求的其他前提条件。
在一个实施例中,记分板245可以包括:译码就绪状态,其由指令译码器228初始化;以及活跃就绪状态,其在指令的执行期间由控制单元205初始化。例如,译码就绪状态可以编码相应指令是否已经被译码、等待断言和/或一些操作数(也许经由广播信道)、或者立即准备发出。活跃就绪状态可以编码相应指令是否等待断言和/或一些操作数、是准备发出还是已经发出。译码就绪状态可以在块重置或者块刷新时被清除。在分支到新指令块时,译码就绪状态和活跃就绪状态被清除(块或核被重置)。然而,当指令块在核上被重新执行时(诸如当其分支回到其自身(块刷新)),仅仅活跃就绪状态被清除。块刷新可以立即发生(当指令块分支到自身),或者在执行若干其他中间指令块之后发生。指令块的译码就绪状态可以因此被保留,使得其不需要重新取指并且译码块的指令。因此,块刷新可以用于节省循环和其他重复程序结构中的时间和能量。
被存储在每个指令窗口中的指令的数目通常对应于指令块内的指令的数目。在一些示例中,指令块内的指令的数目可以是32、64、128、1024或者另一数目的指令。在所公开的技术的一些示例中,跨处理器核内的多个指令窗口分配指令块。在一些示例中,指令窗口210、211可以被逻辑分区,使得多个指令块可以在单个处理器核上被执行。例如,可以在一个核上执行一个、两个、四个或者另一数目的指令块。相应的指令块可以彼此并发地或者顺序地被执行。
指令可以使用被定位在处理器核111内的控制单元205而被分配并且被调度。控制单元205安排来自存储器的对指令的取指、对执行的译码、在其已经被加载到相应的指令窗口时对指令的执行、进/出处理器核111的数据流,并且控制由处理器核输入和输出的信号。例如,控制单元205可以包括如上文所描述的就绪队列,以用于在调度指令中使用。可以原子地执行被存储在被定位在每个相应的指令窗口210和211中的存储器存储库215和216中的指令。因此,对由执行的指令影响的可见架构状态(诸如寄存器文件230和存储器)的更新可以本地缓存在核内直到指令被提交为止。控制单元205可以确定指令何时准备好被提交、对提交逻辑进行排序并且发出提交信号。例如,指令块的提交阶段可以在所有寄存器写入被缓冲、到存储器的所有写入被缓冲并且分支目标被计算时开始。指令块可以当对可见架构状态的更新被完成时被提交。例如,当寄存器写入被写入到寄存器文件、存储被发送到加载/存储单元或者存储器控制器并且提交信号被生成时,指令块可以被提交。控制单元205还至少部分地控制将功能单元260分配到相应的指令窗口中的每个指令窗口。
如在图2中所示,具有若干执行流水线寄存器255的第一路由器250用于将数据从指令窗口210和211中的任一指令窗口发送到功能单元260中的一个或多个功能单元,其可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU 267)、移位/旋转逻辑(例如,桶型移位器268)或者其他适合的执行单元,其可以包括图形功能、物理功能和其他数学操作。来自功能单元260的数据可以然后通过第二路由器270被路由到输出290、291和292,路由返回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243),或者被馈送回到另一功能单元,这取决于特定指令被执行的要求。第二路由器270可以包括:加载/存储队列275,其可以被用于发出存储器指令;数据高速缓存277,其存储正从核被输出到存储器的数据;以及加载/存储流水线寄存器278。
核还包括控制输出295,其用于指示例如指令窗口210或者211中的一个或多个指令窗口的所有指令的执行何时已经完成。当指令块的执行完成时,指令块被指定为“提交的”并且来自控制输出295的信号可以进而可以由基于块的处理器100内的其他核和/或由控制单元160用于发起其他指令块的调度、取指和执行。第一路由器250和第二路由器270二者可以将数据发送回到指令(例如,作为用于指令块内的其他指令的操作数)。
如本领域的普通技术人员将容易理解到,个体核内的部件不限于图2中所示的那些部件,而是可以根据特定应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以由两个或两个以上指令窗口共享,并且所使用的功能单元的数目和类型可以取决于用于基于块的处理器的特定目标应用而变化。在利用指令核选择并且分配资源时应用的其他考虑包括性能要求、能量使用要求、集成电路芯片、处理技术和/或成本。
对于本领域的普通技术人员而言将容易明显的,可以通过处理器核110的指令窗口(例如,指令窗口210)和控制逻辑205内的资源的设计和分配来在处理器性能中做出折中。面积、时钟周期、能力和限制实质上确定个体核110的实现性能和基于块的处理器核110的吞吐量。
指令调度器206可以具有不同的功能。在某些较高的性能示例中,指令调度器是高并发的。例如,每个周期(一个或多个)译码器将指令的译码就绪状态和译码指令写入到一个或多个指令窗口中,选择要发出的下一个指令,并且作为响应后端发送第二就绪事件——以特定指令的输入槽(断言、左操作数、右操作数等)为目标的任一目标就绪事件或者以所有指令为目标的广播就绪事件。每指令就绪状态位连同译码就绪状态可以用于确定指令准备好发出。
在一些示例中,指令调度器206使用存储装置(例如,先进先出(FIFO)队列、内容可寻址存储器(CAM))被实现,存储装置存储指示被用于根据所公开的技术调度指令块的执行的信息的数据。例如,关于指令依存性的数据、控制的转移、推测、分支预测和/或数据加载和存储被布置在存储装置中,以促进将指令块映射到处理器核中的确定。例如,指令块依存性可以与标签相关联,标签被存储在FIFO或者CAM中并且后续由用来将指令块映射到一个或多个处理器核的选择逻辑进行访问。在一些示例中,指令调度器206使用耦合到存储器的通用处理器被实现,存储器被配置为存储用于调度指令块的数据。在一些示例中,指令调度器206使用专用处理器或者使用耦合到存储器的基于块的处理器核被实现。在一些示例中,指令调度器206被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或者基于块的处理器核)上执行的操作系统生成优先级、断言和其他数据,其可以至少部分地用于利用指令调度器206来调度指令块。如本领域的普通技术人员将容易地理解到,在集成电路、可编程逻辑或者其他适合的逻辑中实现的其他电路结构可以用于实现用于指令调度器206的硬件。
在一些情况下,调度器206接受目标指令的事件,其尚未被译码并且还必须禁止已发出的就绪指令的重新发出。指令可以是非断言的、或者断言的(基于真或假条件)。断言的指令直到其由另一指令的断言结果作为目标时才变得就绪,并且该结果匹配断言条件。如果相邻的断言未匹配,则指令绝不发出。在一些示例中,断言指令可以推测地被发出并且被执行。在一些示例中,处理器可以随后检查推测地发出和执行的指令被正确地推测。在一些示例中,误推测的发出指令和消耗其输出的块中的指令的特定传递闭包可以被重新执行、或者被误推测取消的副作用。在一些示例中,对误推测的指令的发现导致整个指令块的完全回滚和重新执行。
V.示例的指令块流
现在转到图3的示图300,图示了基于块的指令流的一部分310,包括若干可变长度指令块311-315(A-E)。指令流可以用于实现用户应用、系统服务或者任何其他适合的用途。在图3中所示的示例中,每个指令块从指令头部开始,其跟随有不同的数目的指令。例如,指令块311包括头部320和二十条指令321。所图示的特定指令头部320包括部分地控制指令块内的指令的执行的若干数据字段,并且还允许改进的性能增强技术,包括例如分支预测、推测执行、惰性评估和/或其他技术。指令头部320还包括指示头部是指令头部而非指令的ID位。指令头部320还包括指令块大小的指示。指令块大小可以处于比一更大的指令的数据块中,例如,被包含在指令块内的4指令数据块的数目。换句话说,块的大小被移位4位以便压缩被分配到指定指令块大小的头部空间。因此,0的大小值指示最小大小的指令块,其是跟随有四条指令的块头部。在一些示例中,指令块大小被表达为字节数、字数、n字数据块数、地址、地址偏移或者使用用于描述指令块的大小的其他适合的表达。在一些示例中,指令块大小由指令块头部和/或脚部中的终止位模式来指示。
指令块头部320还可以包括执行标志,其指示特殊指令执行要求。例如,取决于特定应用,分支预测或者存储器依存性预测可以针对某些指令块被禁止。作为另一示例,执行标志可以被用以控制预取是否针对特定指令块的数据和/或指令而启用。
在所公开的技术的一些示例中,指令头部320包括指示编码数据是指令头部的一个或多个标识位。例如,在一些基于块的处理器ISA,最低有效位空间中的单个ID位总是被设定为二进制值1,以指示有效指令块的开始。在其他示例中,不同的位编码可以用于(一个或多个)标识位。在一些示例中,指令头部320包括指示相关联的指令块被编码所针对的ISA的特定版本的信息。
指令块头部还可以包括用于在例如分支预测、控制流确定和/或坏跳检测中使用的若干块退出类型。退出类型可以指示分支指令的类型是什么,例如:顺序分支指令,其指向存储器中的下一相连的指令块;偏移指令,其是相对于偏移而计算的存储器地址处的另一指令块的分支;子例程调用、或者子例程返回。通过编码指令头部中的分支退出类型,分支预测器可以至少部分地在相同指令块内的分支指令已经被取指和/或被译码之前开始操作。
指令块头部320还包括存储掩码,其标识被指派到存储操作的加载存储队列标识符。指令块头部还可以包括写入掩码,其标识相关联的指令块将写入的(一个或多个)全局寄存器。相关联的寄存器文件必须在指令块可以完成之前接收对每个条目的写入。在一些示例中,基于块的处理器架构可以包括不仅标量指令,而且单指令多数据(SIMD)指令,这允许具有单个指令内的较大数目的数据操作数的操作。
VI.示例块指令目标编码
图4是描绘C语言源代码的两个部分410和415及其相应的指令块420和425(以汇编语言)的示例的示图400,这图示了基于块的指令可以如何显式地编码其目标。高级C语言源代码可以通过其目标是基于块的处理器的编译器被转换为低级汇编语言和机器代码。高级语言可以提取出底层计算机架构的许多细节,使得程序员可以聚焦于程序的功能。相反,机器代码根据目标计算机的ISA来编码程序,使得其可以使用计算机的硬件资源在目标计算机上被执行。汇编语言是机器代码的人类可读形式。
在以下示例中,汇编语言指令使用以下术语:“I[<number>]指定指令块内的指令的编号,其中对于在指令头部之后的指令,编号从零开始并且对于每个后续指令,指令编号递增;指令的操作(诸如READ、ADDI、DIV等)遵循指令编号;可选值(诸如立即值1)或对寄存器的引用(诸如用于寄存器0的R0)遵循操作;并且用于接收指令的结果的可选目标遵循值和/或操作。每个目标可以是到另一指令、到其他指令的广播信道、或者可以是当指令块被提交时对另一指令块可见的寄存器。指令目标的示例是以指令1的右操作数为目标的T[1R]。寄存器目标的示例是W[R0],其中目标被写入寄存器0。
在图400中,指令块420的前两个READ指令430和431相应地以ADD指令432的右(T[2R])和左(T[2L])操作数为目标。在所图示的ISA中,读指令是从全局寄存器文件读取的唯一指令;然而,任何指令可以以全局寄存器文件为目标。当ADD指令432接收到这两个寄存器读取的结果时,其将变为就绪并且执行。
当TLEI(测试小于等于立即(test-less-than-equal-immediate))指令433从ADD接收其单个输入操作数时,其将变为就绪并且执行。测试然后产生在信道一(B[1P])上广播到在广播信道上监听的所有指令的断言操作数,其在该示例中是两个断言的分支指令(BRO434和BRO435)。在图400的汇编语言中,“P1f”指示指令基于在广播信道1(“1”)上传输假结果(“f”)而被断言(“P”),并且“P1t”指示指令基于在广播信道1上传输真结果而被断言。接收匹配断言的分支将激发。
指令块420的依存性图形440还被图示为指令节点阵列450和其对应的操作数目标455和456。这图示了块指令420、对应的指令窗口条目以及由指令所表示的底层数据流程图之间的对应性。此处,译码指令READ 430和READ 431准备好发出,因为其不具有输入依存性。当其发出并且执行时,从寄存器R6和R7读取的值被写入到ADD 432的右操作数缓冲器和左操作数缓冲器中,这使得ADD 432的左操作数和右操作数“就绪”。因此,ADD 432指令变为就绪、发出到ALU、执行,并且之和被写入到TLEI 433的左操作数。
作为比较,传统的乱序RISC或者CISC处理器将使用附加的硬件复杂性、功率、面积并且减少时钟频率和性能来在运行时建立依存性图形。然而,依存性图形在编译时是静态地已知的并且EDGE编译器可以通过ISA直接地编码指令之间的生产方-消费方关系,这使得微架构免于动态地重新发现他们。这可以潜在地实现更简单的微架构,减少面积、功率和升压频率和性能。
VII.示例的基于块的指令格式
图5是图示用于指令头部510、通用指令520、分支指令530、加载指令540和存储指令550的指令格式的一般化示例的示图。指令头部或者指令中的每一个根据位数而被标记。例如,指令头部510包括四个32位的字并且从其最低有效位(lsb)(位0)被标记直到其最高有效位(msb)(位127)。如所示出的,指令头部包括写入掩码字段、存储掩码字段、多个退出类型字段、多个执行标志字段(X个标志)、指令块大小字段和指令头部ID位(指令头部的最低有效位)。
执行标志字段可以指示特殊的指令执行模式。例如,当设置标志时,可以使用“禁止分支预测器”标志来禁止指令块的分支预测。作为另一示例,当设置标志时,可以使用“禁止存储器依赖关系预测”标志来禁止指令块的存储器依赖关系预测。作为另一示例,可以使用“在块之后中断”标志来暂停指令线程并且在提交指令块时产生中断。作为另一示例,可以使用“在块之前中断”标志来暂停指令线程,并且在指令块头部被译码时并且在指令块的指令被执行之前产生中断。作为另一示例,可以使用“数据预取禁用”标志来控制数据预取针对指令块被启用还是禁用。
退出类型字段包括可以用于指示被编码在指令块内的控制流和/或同步指令的类型的数据。例如,退出类型字段可以指示指令块包括以下各项中的一项或多项:顺序分支指令、偏移分支指令、间接分支指令、调用指令、返回指令、和/或中断指令。在一些示例中,分支指令可以是用于在指令块之间转移控制流的任何控制流指令,包括相对地址和/或绝对地址,并且使用有条件的断言或者无条件的断言。除了确定隐式控制流指令之外,退出类型字段可以用于分支预测和推测执行。在一些示例中,多达六种退出类型可以被编码在退出类型字段中,并且字段与对应的显式或者隐式控制流指令之间的对应性可以通过例如检查指令块中的控制流指令而被确定。
所图示的通用块指令520被存储为一个32位的字,并且包括操作码字段、断言字段、广播ID字段(BID)、第一目标字段(T1)、以及第二目标字段(T2)。对于具有比目标字段更大的消费方的指令而言,编译器可以使用移动指令来构建扇出树,或者其可以将高扇出指令指派到广播。广播支持通过轻量网络将操作数发送到核中的任何数目的消费方指令。广播标识符可以被编码在一般块指令520中。
虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域的技术人员将容易理解到,即使对于ISA的特定示例而言,指令字段中的一个或多个指令字段也可以偏离用于特定指令的通用格式。操作码字段指定指令520的长或宽以及由指令520执行的(一个或多个)操作,诸如存储器读取/写入、寄存器加载/存储、加法、减法、乘法、除法、移位、旋转、系统操作或者其他适合的指令。
断言字段指定指令在其下将执行的条件。例如,断言字段可以指定值“真”,并且指令将仅在对应的条件标志匹配指定的断言值的情况下执行。在一些示例中,断言字段至少部分地指定被用于比较断言的字段、操作数或者其他源,而在其他示例中,执行在由先前指令(例如,指令块中的先前指令)设定的标志上被断定。在一些示例中,断言字段可以指定指令将总是或者绝不被执行。因此,断言字段的使用可以通过减少分支指令的数目来允许更密集的目标代码、改进的能量效率以及改进的处理器性能。
目标字段T1和T2指定基于块的指令的结果被发送到的指令。例如,在指令槽5处的ADD指令可以指定其计算结果将被发送到槽3和10处的指令。取决于特定指令和ISA,所图示的目标字段之一或二者可以由其他信息替换,例如,第一目标字段T1可以由中间操作数、附加操作码、指定两个目标等来替换。
分支指令530包括操作码字段、断言字段、广播ID字段(BID)以及偏移字段。操作码和断言字段在如关于通用指令所描述的格式和功能方面是类似的。偏移可以以四个指令为单位被表达,因此扩展在其上可以执行分支的存储器地址范围。利用通用指令520和分支指令530示出的断言可以用于避免指令块内的附加分支。例如,特定指令的执行可以根据先前指令的结果(例如,两个操作数的比较)被断定。如果断言是假的,则指令将不提交由特定指令计算出的值。如果断言值未匹配所要求的断言,则指令不发出。例如,BRO_F(断言假)指令将发出其是否被发送假断言值。
应当容易理解到,如在此所使用的,术语“分支指令”不限于将程序执行改变到相对存储器位置,而且包括跳跃到绝对或者符号存储器位置、子例程调用和返回,以及可以修改执行流的其他指令。在一些示例中,通过改变系统寄存器(例如,程序计数器PC或者指令指针)的值来修改执行流,而在其他示例中,可以通过修改被存储在存储器中的指定位置处的值来改变执行流。在一些示例中,跳跃寄存器分支指令用于跳跃到被存储在寄存器中的存储器位置。在一些示例中,分别使用跳跃和链接以及跳跃寄存器指令来实现子例程调用和返回。
加载指令540用于将数据从存储器取回到处理器核中。数据的地址可以在运行时动态计算。例如,地址可以是加载指令540的操作数与加载指令540的立即字段之和。作为另一示例,地址可以是加载指令540的操作数与加载指令540的符号扩展和/或移位的立即字段之和。作为另一示例,数据的地址可以是加载指令540的两个操作数之和。加载指令540可以包括加载存储标识符字段(LSID)以在指令块内提供加载的相对顺序。例如,编译器可以在编译时为指令块的每个加载和存储指派LSID。数据的数量和类型可以以各种方式取回和/或格式化。例如,可以将数据格式化为有符号或无符号值,并且取回的数据的数量或大小可能会有所不同。可以使用不同的操作码来标识加载指令540的类型,诸如加载无符号字节、加载有符号字节、加载双字、加载无符号半字、加载有符号半字、加载无符号字和加载有符号字。加载指令540的输出可以被引导到如目标字段(T0)所指示的目标指令。
断言的加载指令是基于与指令相关联的结果是否与断言测试值相匹配而有条件地执行的加载指令。例如,可以将结果从另一指令传递到断言的加载指令的操作数,并且可以在断言的加载指令的字段中编码断言测试值。作为特定示例,当断言字段(PR)的一个或多个位非零时,加载指令540可以是断言的加载指令。例如,断言字段可以是两位宽,其中一位用于指示指令被断言的,一位用于指示断言测试值。具体地,编码“00”可以指示加载指令540未被断言;“10”可以指示加载指令540基于假条件(例如,断言测试值是“0”)被断的;“11”可以指示加载指令540基于真条件(例如,断言测试值是“0”)被断言;以及“10”可以保留。因此,可以使用两位断言字段将接收的结果与真或假条件相比较。可以使用较宽的断言字段将接收结果与较大数字相比较。
在一个示例中,要与断言测试值相比较的结果可以经由一个或多个广播操作数或信道传递给指令。断言的广播信道可以使用广播标识符字段(BID)在加载指令540内标识。例如,广播标识符字段可以是两位宽,以编码四个可能的广播信道,在这些信道上接收值以与断言测试值相比较。作为具体示例,如果在所标识的广播信道上接收的值与断言测试值相匹配,则执行加载指令540。然而,如果在所标识的广播信道上接收的值与断言测试值不匹配,则不执行加载指令540。
与其他指令相比,加载指令540可以相对较慢地执行,因为它用于从存储器取回数据,并且存储器访问可以相对较慢。例如,完全在处理器核内发生的操作可能相对较快,因为处理器核的逻辑电路与主存储器中的电路相比相对更靠近且更快。存储器可以由处理器的多个处理器核共享,因此存储器可能距离特定处理器核相对较远,并且存储器可能比处理器核大,从而使其相对较慢。
可以使用存储器层级来潜在地提高访问存储在存储器中的数据的速度。存储器层级包括具有不同速度和大小的多级存储器。处理器核中或更接近处理器核的级别通常比离处理器核较远的级别更快和更小。例如,存储器层级可以包括处理器核中的层1(L1)高速缓存、多个处理器核共享的处理器内的层2(L2)高速缓存、在处理器的片外或外部的主存储器、以及位于存储设备(诸如硬盘驱动器)上的后备存储。当数据将被或可能被处理器核使用时,可以将数据从层级的较慢级别复制到层级的较快级别。可以将数据复制到包含与一存储器地址的范围相对应的多个数据字的块或行中。例如,可以将存储器行从主存储器复制或取回到L2和/或L1高速缓存中,以提高访问存储器行内的存储器位置的指令的执行速度。本地性原理指示,程序倾向于使用接近程序使用的其他存储器位置的存储器位置(空间本地性),并且给定存储器位置很可能在短时间内被程序多次使用(时间本地性)。因此,将与一个指令的地址相关联的存储器行复制到高速的高速缓存中还可以提高访问高速缓存的存储器行内的其他位置的其他指令的执行速度。但是,与存储器层级的较慢级别相比,存储器层级的较快级别可能会降低存储容量。因此,将新的存储器行复制到高速缓存中通常会导致不同的存储器行被替换或驱逐。可以实施策略以平衡驱逐可能被指令块的指令复用的数据的风险与预取将由指令使用的数据的目标。
可以通过在加载指令540被执行之前从存储器中预取数据来潜在地提高加载指令540的执行速度。预取数据可以包括在加载指令540被执行之前将与加载地址相关联的数据从存储器层级的较慢级别复制到存储器层级的较快级别。因此,在加载指令540的执行期间,可以从存储器层级的较快级别潜在地访问数据,这可以加速加载指令540的执行。断言的加载指令可以比非断言的加载指令提供更多的预取数据的机会,因为当断言的加载指令准备好发出时,附加的断言计算可能会延迟。然而,如果断言条件未被满足并且任何预取的数据可以潜在地驱逐在指令块内使用的数据,由于断言的加载指令将不会执行,所以断言的加载指令还可能比非断言的加载指令提供更多的预取数据的风险。编译器可以潜在地检测预取数据超过风险门限的情况,并且可以经由用于启用预取数据的启用字段将这个信息传递给处理器核。例如,操作码字段可以包括用于控制在加载指令540执行之前是否可以预取加载数据的可选的启用字段(EN)。
作为32位加载指令540的具体示例,操作码字段可以编码在位[31:25]中;断言字段可以编码在位[24:23]中;广播标识符字段可以编码在位[22:21]中;LSID字段可以编码在位[20:16]中;立即字段可以编码在位[15:9]中;并且目标字段可以编码在位[8:0]中。
存储指令550用于将数据存储到存储器。数据的地址可以在运行时动态计算。例如,地址可以是存储指令550的第一操作数与存储指令550的立即字段之和。作为另一示例,地址可以是存储指令550的操作数与存储指令550的符号扩展和/或移位的立即字段之和。作为另一示例,数据的地址可以是存储指令550的两个操作数之和。存储指令550可以包括加载存储标识符字段(LSID)以在指令块内提供相对存储排序。例如,要存储的数据的数量可以基于存储指令550的操作码而变化,诸如存储字节、存储半字、存储字和存储双字。要存储在存储器位置处的数据可以从存储指令550的第二操作数输入。第二操作数可以由另一指令生成或编码为存储指令550的字段。
断言的存储指令是基于与指令相关联的结果是否与断言测试值相匹配而有条件地执行的存储指令。例如,可以将结果从另一指令传递到断言的存储指令的操作数,并且可以在断言的存储指令的字段中编码断言测试值。例如,当断言字段(PR)的一个或多个位非零时,存储指令550可以是断言的存储指令。要与断言测试值相比较的结果可以经由一个或多个广播操作数或信道传递给指令。断言的广播信道可以使用广播标识符字段(BID)在存储指令550内标识。作为具体示例,如果在所标识的广播信道上接收的值与断言测试值相匹配,则执行存储指令550。然而,如果在所标识的广播信道上接收的值与断言测试值不匹配,则不执行存储指令550。
类似于加载指令540,与执行其他指令相比,执行存储指令550可以相对较慢,因为它可以包括从存储器取回数据,并且存储器访问可以相对较慢。具体地,当存在高速缓存未命中并且高速缓存策略是回写写入分配策略时,存储指令550将取回与目标地址相关联的存储器行。在将数据写入或存储到存储器位置时,高速缓存可以实现不同的策略,诸如直写和回写策略。在使用直写式高速缓存策略写入数据时,数据将被写入高速缓存和后备存储。在使用回写式高速缓存策略写入数据时,数据仅被写入高速缓存而不被写入后备存储,直到持有数据的高速缓存行从高速缓存中被驱逐为止。当写入数据在高速缓存中丢失时,高速缓存可以实施不同的策略,诸如写入分配和写入不分配策略。当写入数据在使用写入分配高速缓存策略的高速缓存中丢失时,跨越写入数据的地址的行被带入高速缓存。当写入数据在使用写入不分配高速缓存策略的高速缓存中丢失时,跨越写入数据的地址的行不会被带入高速缓存。
可以通过在存储指令550被执行之前从存储器中预取数据来潜在地提高存储指令550的执行速度。例如,可以在执行存储指令550的断言值之前从存储器中预取数据。预取数据可以包括在存储指令550被执行之前将与加载地址相关联的数据从存储器层级的较慢级别复制到存储器层级的较快级别。操作码字段可以包括用于控制是否可以在存储指令550执行之前预取目标存储地址处的数据的可选的启用字段(EN)。例如,当使用直写高速缓存策略时,可以清除EN字段,以指示不预取。
作为32位存储指令550的具体示例,操作码字段可以编码在位[31:25]中;断言字段可以编码在位[24:23]中;广播标识符字段可以编码在位[22:21]中;LSID字段可以编码在位[20:16]中;立即字段可以编码在位[15:9]中;并且可选的启用字段可以编码在位[0]中。位[8:1]可以保留用于附加功能或将来使用。
VIII.处理器核的示例状态
图6是图示基于块的处理器的计算机核的状态600的进展的示例的流程图。基于块的处理器包括共同地用于运行或者执行软件程序的多个处理器核。程序可以以各种高级语言被编写,并且然后使用以基于块的处理器为目标的编译器针对基于块的处理器而被编译。编译器可以发射当在基于块的处理器上被运行或者被执行时将执行由高级程序指定的功能的代码。编译代码可以被存储在可以由基于块的处理器访问的计算机可读存储器中。编译代码可以包括被分组为一系列指令块的指令流。在执行期间,指令块中的一个或多个可以由基于块的处理器执行以执行程序的功能。通常,程序将包括比在任一时间可以在核上执行的指令块更多的指令块。因此,程序的块被映射到相应核,核执行由块指定的工作,并且然后相应核上的块利用不同块被替换直到程序完成。指令块中的一些指令块可以被执行超过一次(诸如在程序的循环或者子例程期间)。可以针对每次指令块将被执行时创建指令块的“实例”。因此,指令块的每个重复可以使用指令块的不同实例。当程序运行时,基于架构约束、可用硬件资源和程序的动态流动,相应的指令块可以被映射到处理器核并且在处理器核上执行。在程序的执行期间,相应的处理器核可以通过状态600的进展进行转变,使得一个核可以处于一个状态并且另一核可以处于不同的状态。
在状态605处,相应的处理器核的状态可以是未映射。未映射处理器核是当前未被指派以执行指令块的实例的核。例如,处理器核可以在程序开始基于块的计算机上的执行之前是未映射。作为另一示例,处理器核可以在程序开始执行但是并非所有核正被使用之后是未映射的。特别地,程序的指令块至少部分地根据程序的动态流动而被执行。程序的一些部分可以总体上串行地或者顺序地流动(诸如当后续的指令块取决于来自较早的指令块的结果时)。程序的其他部分可以具有更多平行流,诸如当在不使用并行执行的其他块的结果的情况下多个指令块可以同时执行时。较少的核可以用于在程序的更多顺序流期间执行程序,并且较多的核可以用于在程序的更多并行流期间执行程序。
在状态610处,相应的处理器核的状态可以是映射。映射的处理器核是当前被指派以执行指令块的实例的核。当指令块被映射到特定处理器核时,指令块在运行中。运行中的指令块是以基于块的处理器的特定核为目标的块,并且块将或正在推测地或者非推测地在特定处理器核上执行。特别地,运行中的指令块对应于被映射到状态610-650中的处理器核的指令块。在程序将使用由执行指令块提供的工作的块映射期间块是已知的时,块非推测地执行。在映射程序将使用或将不使用由执行指令块所提供的工作期间块是未知的时,块推测地执行。推测地执行块能够潜在地提高性能(诸如当比在已知块的工作将被使用之后或之时块将被开始的情况下更早地开始推测块时)。然而,推测地执行可以潜在地增加当执行程序时(诸如当推测工作未由程序使用时)使用的能量。
基于块的处理器包括有限数目的同构或者异构处理器核。典型的程序可以包括比可以适配到处理器核上更多的指令块。因此,程序的相应指令块将通常与程序的其他指令块共享处理器核。换句话说,给定核可以在程序的执行期间执行多个不同的指令块中的指令。具有有限数目的处理器核还意味着在所有处理器核忙于执行指令块并且没有新核可用于分派时,程序的执行可以停止或者被延迟。当处理器核变得可用时,指令块的实例可以被映射到处理器核。
指令块调度器可以指派哪个指令块将在哪个处理器核上执行并且指令块何时将被执行。映射可以基于各种因素,诸如将被用于执行的目标能量、处理器核的数目和配置、处理器核的当前和/或先前使用、程序的动态流、推测执行是否被启用、推测块将被执行的置信度水平以及其他因素。指令块的实例可以被映射到当前可用的处理器核(诸如当没有指令块当前正在其上执行时)。在一个实施例中,指令块的实例可以被映射到当前繁忙的处理器核(诸如当核正执行指令块的不同实例时),并且后续映射的实例可以在较早映射的实例完成时开始。
在状态620,相应处理器核的状态可以是取指。例如,处理器核的IF流水线阶段可以在取指状态期间是活跃效的。取指指令块可以包括将块的指令从存储器(诸如L1高速缓存、L2高速缓存或主存储器)转移到处理器核,并且从处理器核的本地缓冲器读取指令使得指令可以被译码。例如,指令块的指令可以被加载到处理器核的指令高速缓存、缓冲器或寄存器中。指令块的多个指令可以在相同的时钟周期内并行(例如,同时)取指。取指状态可以是多个周期长,并且可以在处理器核被流水线化时与译码(630)和执行(640)状态重叠。
当指令块中的指令被加载到处理器核上时,指令块驻留在处理器核上。指令块在指令块的一些但非所有指令被加载时部分驻留。指令块在指令块中的所有指令被加载时完全驻留。指令块将驻留在处理器核上,直到处理器核被重置或者不同的指令块被取指到处理器核上。特别地,当核处于状态620-670时,指令块驻留在处理器核中。
在状态630处,相应的处理器核的状态可以是译码。例如,处理器核的DC流水线阶段可以在取指状态期间是活跃的。在译码状态期间,指令块中的指令正在被译码,使得其可以被存储在处理器核的指令窗口的存储器存储库中。特别地,指令可以从相对地紧凑的机器代码被转换为可以用于控制处理器核的硬件资源的较不紧凑的表示。断言的加载指令和断言的存储指令可以在译码状态期间被标识。译码状态可以是多个周期长,并且可以与在处理器核被流水线化时的取指(620)和执行(630)状态重叠。在指令块的执行被译码之后,其可以在指令的所有依存性被满足时被执行。
在状态640处,相应处理器核的状态可以是执行。在执行状态期间,指令块中的指令正被执行。特别地,处理器核的EX和/或LS流水线阶段可以在执行状态期间是活跃的。与加载和/或存储指令相关联的数据可以在执行状态期间被取指和/或预取。指令块可以推测地或者非推测地执行。推测块可以执行到完成或者其可以在完成之前被终止(诸如当确定由推测块执行的工作将不被使用时)。当指令块被终止时,处理器可以转变为中止状态。当确定块的工作将被使用时(例如,所有寄存器写入被缓冲,对存储器的所有写入被缓冲,并且分支目标被计算),推测块可以完成。当例如所有寄存器写入被缓冲、对存储器的所有写入被缓冲并且分支目标被计算时,非推测块可以执行到完成。执行状态可以是多个周期长,并且可以与在处理器核被流水线化时的取指(620)和译码(630)状态重叠。当指令块完成时,处理器可以转变为提交状态。
在状态650处,相应的处理器核的状态可以是提交或者中止。在提交期间,指令块的指令的工作可以原子地被提交,使得其他块可以使用指令的工作。特别地,提交状态可以包括其中本地缓冲架构状态被写入到由其他处理器核可见或者可访问的架构状态的提交阶段。当可见架构状态被更新时,提交信号可以被发出并且处理器核可以被释放,使得另一指令块可以在处理器核上被执行。在中止状态期间,核的流水线可以被停止以减少动态功率耗散。在一些应用中,核可以功率选通来减少静态功率耗散。在提交/中止状态的结束处,处理器核可以接收在处理器核上待执行的新的指令块,核可以被刷新,核可以被空闲,或者核可以被重置。
在状态660处,可以确定驻留在处理器核上的指令块是否可以被刷新。如在此所使用的,指令块刷新或者处理器核刷新意味着使得处理器核能够重新执行驻留在处理器核上的一个或多个指令块。在一个实施例中,刷新核可以包括重置针对一个或多个指令块的活跃就绪状态。当指令块是循环或者重复的子例程的一部分时或者当推测块被终止并且将被重新执行时,在相同处理器核上重新执行指令块可以是期望的。刷新的决策可以由处理器核自身(连续的重新使用)或者由处理器外部(非连续的重新使用)做出。例如,刷新的决策可以来自另一处理器核或者执行指令块调度的控制核。当与在不同核上执行指令块相反在已经执行指令的核上刷新指令块时,可以存在潜在能量节省。能量被用于对指令块中的指令取指并且译码,但是刷新块可以通过旁路这些状态来节省取指和译码状态中使用的大部分能量。特别地,刷新块可以在执行状态(640)时重新开始,因为已经由核取指并且译码指令。当块被刷新时,译码指令和译码就绪状态可以被维持,同时活跃就绪状态被清除。刷新指令块的决策可以作为提交操作的一部分或在后续时间发生。如果指令块未被刷新,则处理器核可以是空闲的。
在状态670处,相应的处理器核的状态可以是空闲。基于在给定时间活跃的处理器核的数目,基于块的处理器的性能和功耗可以潜在地被调节或者被折中。例如,如果推测误预测速率很高,则在并行地运行的核上执行推测工作可以增加计算的速度而不是增加功率。作为另一示例,在提交或者中止较早执行的指令块之后立即向处理器地指派新指令块可以增加并行地执行的处理器的数目,但是可以减少重新使用驻留在处理器核上的指令块的机会。重新使用可以在空闲处理器核的高速缓存或者池被维持时增加。例如,当处理器核提交常用的指令块时,处理器核可以被放置在空闲池中,使得核可以在下次相同指令块将被执行时被刷新。如上文所描述的,刷新处理器核可以节省用来对驻留指令块取指和译码的时间和能量。在空闲高速缓存中放置的指令块/处理器核可以基于由编译器执行的静态分析或者由指令块调度器执行的动态分析而被确定。例如,指示指令块的潜在重新使用的编译器提示可以被放置在块的头部中,并且指令块调度器可以使用提示来确定块是将空闲还是在提交指令块之后被重新分配到不同的指令块。当空闲时,处理器核可以被放置在低功率状态中以减少例如动态功率消耗。
在状态680处,可以确定驻留在空闲处理器核上的指令块是否可以被刷新。如果核要被刷新,则块刷新信号可以被声明并且核可以转变为执行状态(640)。如果核不将被刷新,则块重置信号可以被声明并且核可以转变为未映射状态(605)。当核被重置时,核可以被放入具有未映射核的池中,使得指令块调度器可以将新指令块分配到核。
IX.基于块的编译器方法的示例
图7A是用于基于块的处理器的程序的示例源码片段700。图7B是示例源码片段700的依赖关系图710的示例。图8示出了与来自图7A的源码片段相对应的示例指令块,其中指令块包括断言的加载指令和断言的存储指令。图9是示出编译用于基于块的处理器的程序的示例方法的流程图。
在图7A中,包括源码语句702-708的源码700可以被编译或变换为可以在处理器的基于块的处理器核上原子执行的指令块。在这个示例中,变量z是指令块的本地变量,并且所以它的值可以通过指令块的一个指令来计算并且传递到指令块的其他指令,而不更新在指令块正在执行的基于块的处理器核外部可见的架构状态。变量x和y用于分别使用寄存器R0和R1传递不同指令块之间的值。变量a到e存储在存储器中。存储器位置的地址分别存储在寄存器R10到R14中。
编译源码可以包括通过分析源码700来生成依赖关系图710并且使用依赖关系图710发射指令块的指令。依赖关系图710可以是单个有向无环图(DAG)或DAG的森林。依赖关系图710的节点(例如,720、730、740、750和760)可以表示执行源码700的功能的操作。例如,节点可以直接对应于要由处理器核执行的操作。备选地,节点可以对应于要由处理器核执行的宏操作或微操作。连接节点的有向边(例如,711、712和713)表示节点之间的依赖关系。具体地,消费方或目标节点依赖于生成结果的生产方节点,并且因此生产方节点在消费方节点之前执行。有向边从生产方节点指向消费方节点。在块原子执行模型中,中间结果仅在处理器核内可见,并且当指令块被提交时,最终结果对于所有处理器核是可见的。节点720和730产生中间结果并且节点740、750和760可以产生最终结果。
作为具体示例,依赖关系图710可以从至少源码片段700生成。应当注意,在这个示例中,与依赖关系图710的节点相比,源码700存在更多的语句。然而,依赖关系图通常可能具有比用于生成依赖关系图的源码语句更少、相同或更多的节点。语句702生成依赖关系图710的节点720。节点720计算或产生由边711表示的由节点730消耗的变量z。语句703生成依赖关系图710的节点730,其中将变量z与断言测试值(例如,常数16)相比较以生成真或假断言值。如果断言值为真,则执行节点740(如边712所表示的),但是如果断言值为假,则执行节点750(如边713所表示的)。语句704和707生成节点740,并且语句705和708生成节点750。节点740和750每个包括断言的加载和断言的存储。例如,在节点740中,读取变量a并且存储a的递增值是基于变量z大于或等于16而断言的。作为另一示例,在节点750中,读取变量c并且存储c的递增值是基于变量z小于16而断言的。由节点740或750生成的b的值被由语句706生成的节点760消耗。b的值可以直接从生成指令传递到消费指令,或者b的值可以从生成指令间接地传递到消费指令,诸如经由加载存储队列。节点760包括非断言的加载和非断言的存储。具体地,变量e的值总是被加载,并且在指令块被执行时,总是存储变量d的值。
图8是与来自图7A的源码700的片段相对应的示例指令块800。指令块800可以通过执行依赖关系图710的遍历并且发射与依赖关系图710的每个节点相对应的指令来生成。因此,指令块800的指令可以基于如何遍历依赖关系图710来以特定顺序发射。可以对发射的指令执行优化,诸如删除冗余或死代码,消除常见的子表达式,并且重新排序指令以更有效地使用硬件资源。在传统的非基于块的处理器中,指令之间的依赖关系通过指令的排序来保持,使得依赖关系指令必须在它们所依赖的指令之后。相比之下,要在基于块的处理器上执行的指令块内的指令可以以任何顺序发射,因为依赖关系在指令本身内编码而不是按照指令的顺序编码。具体地,基于块的处理器的指令调度逻辑可以确保正确的执行顺序,因为调度逻辑将仅在指令的依赖关系满足时发出执行指令。因此,以基于块的处理器为目标的编译器可以具有更多的自由度,以便在指令块内对发射的指令进行排序。例如,可以基于各种标准对指令进行排序,诸如:当指令具有可变长度时的指令大小(使得尺寸相似的指令被分组在一起或使得指令在指令块内保持特定对准);机器码指令到源码语句的映射;指令的类型(使得类似的指令(例如,具有相同的操作码)被分组在一起,或某种类型的指令被排序在其他类型之前);指令的执行时间(使得可以在较快的指令或指令路径之前执行相对耗时的指令或指令路径);以及/或者依赖关系图710的遍历。
指令块800的指令的发出顺序通常遵循依赖关系图710的广度优先遍历,但是具有用于比使用纯粹的广度优先遍历更早地读取存储在存储器中的变量的地址的一些示例优化。如上所述,指令的顺序本身不确定执行原子指令块800的指令的顺序。然而,通过在指令块中将指令排序较早,指令可以较早地被译码,并且可以比指令在指令块中被排序较晚的情况下更早地可用于指令分派。
指令I[0]和I[1]用于从寄存器文件中读取变量x和y的值。指令I[2]用于读取变量b的地址,并且在广播信道1上传输变量b的地址。从两个断言路径移动对变量b的地址的读取是一种优化,其可以潜在地减小码的大小(通过用寄存器R11的单次读取代替寄存器R11的两个断言的读取)并且可以潜在地增加写入到与变量b相对应的存储器位置的速度。例如,一旦指令I[2]被执行并且变量b的地址已知,变量b的地址处的数据就可以被预取,以准备用于指令I[9]或I[14]中的变量b的断言的存储,诸如当高速缓存策略是写入分配时。例如,预取可以在指令I[4]处计算断言值之前并且在执行指令I[3]的潜在的多周期除法操作期间发起。
指令I[4]用于断言计算。具体地,将指令I[3]的结果与断言测试值16相比较,并且在广播信道2上传输断言结果。指令I[5]-I[9]仅在断言结果为真(例如,z>=16)时执行,并且指令I[10]-I[14]仅在断言结果为假(例如,z<16)时执行。在指令块800的汇编语言中,“P2f”指示指令是在广播信道2(“2”)上传输假结果(“f”)的基础上被断言的(“P”),并且“P2t”指示指令是在广播信道2上传输真结果的基础上被断言的。
指令I[7]是变量a的断言的加载。如果预取了位于a的存储器位置的数据,则可以增加断言的加载的执行速度。在变量a的地址被计算或从寄存器读取之后,可以预取数据。作为一个示例,变量a的存储器地址可以使用指令I[5]从寄存器中读取。因此,可以在使用指令I[6]递减变量x之前发起预取数据,并且使用指令I[7]执行断言的加载。编译器优化的示例可以是将确定变量a的存储器地址的指令移动到断言的执行路径中的较早点,使得数据可以比在指令没有移动的情况下更早地被预取。在这个示例中,变量a的地址被移动到断言的执行路径的第一指令。
替代优化(未示出)可以是将加载变量a和c的一个或多个指令“提升”至断言计算之前。具体地,可以将断言的加载指令转换为非断言的加载指令并且移至断言计算之前。但是,这种优化可能会使编译器复杂化,因为提升的指令会跨越基本块边界移动。此外,这种优化可能潜在地降低性能和/或能量效率,因为来自提升的指令的工作可能不被使用。具体地,变量a和c中只有一个用于指令块的给定运行。提升变量a和c的加载确保将不会使用来自其中一个加载的工作。提升变量a或c中仅一个的加载是有效的推测,因为可能会提升错误的变量。选择错误的指令也可以使用否则可能被非推测性指令使用的存储器带宽,这可能会延迟非推测性指令的执行。
指令I[9]是当来自指令I[4]的断言结果为真时,用于将来自指令I[8]的结果存储到变量b的存储器位置的断言的存储指令。变量b的地址由指令I[2]确定并且在广播信道1上发送。当在广播信道1上发送来自指令I[2]的结果时,处理器核可以存储指令I[9]的操作数。指令I[14]是另一断言的存储指令,当来自指令I[4]的断言结果是假时,其用于将来自指令I[13]的结果存储到变量b的存储器位置。因此,断言的存储指令I[9]或I[14]中的仅一个将在指令块800的给定运行期间执行,因为每个断言的存储指令I[9]和I[14]是在断言计算的相反结果的基础上被断言。如下面更详细描述的,断言的存储指令的输出被本地缓存在处理器核中,直到指令块800的提交阶段为止。当指令块800提交时,断言的存储指令的输出可以更新变量b的存储器位置和/或其在存储器层级内的相应条目。
指令I[12]是变量c的断言的加载。与变量a的断言的加载一样,如果预取位于c的存储器位置处的数据,则可以增加变量c的断言的加载的执行速度。在变量c的地址被计算或从寄存器读取之后,可以预取数据。作为一个示例,变量c的存储器地址可以使用指令I[10]从寄存器读取。因此,可以在使用指令I[11]递减变量y之前发起预取数据,并且使用指令I[12]执行断言的加载。
指令I[16]是变量e的非断言的加载,并且变量e的地址由指令I[15]生成。如果预取位于e的存储器位置的数据,则可以增加变量e的加载的执行速度。在这个示例中,变量e的地址是由变量e的非断言的加载之前的指令生成的,使得指令可以在附近发出。备选地,编译器可以将地址生成指令移动到指令块中的较早位置(诸如在断言计算之前),使得处理器核可以具有更多的机会来预取存储在变量e的地址处的数据。
指令I[17]是变量b的非断言的加载,它早先被一个断言的存储(指令I[9]或I[14])存储。指令块800是原子指令块,并且指令块800的指令一起提交。因此,直到指令块800的提交阶段,变量b和/或存储器层级中的其相应条目的存储器位置才被更新。因此,来自断言的存储(指令I[9]或I[14])的输出被本地地缓存在指令块内,直到指令块800的提交阶段为止。例如,来自断言的存储的输出可以存储在处理器核的加载存储队列中。具体地,执行的断言的存储的输出可以存储或缓冲在加载存储队列中,并且用断言的存储指令的加载存储标识符标记。断言的存储指令的缓冲的输出可以从加载存储队列转发到指令I[17]的操作数。
指令I[20]是用于将来自指令I[19]的结果存储到变量d的存储器位置的非断言的存储指令。变量d的地址由从寄存器文件中读取地址的指令I[18]确定。如果高速缓存策略是写入分配并且位于d的存储器位置的数据被预取,则可以增加存储的执行速度。在变量d的地址被计算或从寄存器读取之后,可以预取数据。例如,一旦指令I[19]被执行并且变量d的地址已知,变量d的地址处的数据就可以被预取,以准备用于指令I[20]中的变量d的非断言的存储。例如,预取可以在指令I[18]完成执行之前发起。存储指令的输出在本地被缓存,诸如在处理器核内的加载存储队列处,直到指令块800的提交阶段为止。当指令块800提交时,存储指令的输出可以更新变量d的存储器位置和/或其在存储器层级内的相应条目。
指令I[21]是到下一指令块的无条件分支。在所公开的技术的一些示例中,指令块将具有至程序的另一指令块的至少一个分支。指令I[22]和I[23]是无操作指令。除了将指令块800填充到四个指令字的倍数之外,这些指令不执行任何操作。在所公开的技术的一些示例中,指令块需要具有四个指令字的倍数的大小。
图9是图示用于编译基于块的计算机架构的程序的示例方法900的流程图。方法900可以被实现于在基于块的处理器或者常规处理器上执行的编译器的软件中。编译器可以在一个或多个阶段或者传递中将程序的高级源代码(诸如C、C++或Java)转换为在目标基于块的处理器上可执行的低级目标或者机器代码。例如,编译器阶段可以包括:词法分析,用于从源码生成令牌流;语法分析或解析,用于将令牌流与源码语言的语法相比较并且生成语法或分析树;语义分析,用于对语法树执行各种静态检查(诸如类型检查,检查变量被声明等)并且生成注释或抽象语法树;从抽象语法树生成中间码;中间码的优化;机器码生成,用于从中间码生成目标处理器的机器码;以及机器码的优化。机器码可以被发射并且存储在基于块的处理器的存储器中,使得基于块的处理器可以执行程序。
在过程框905,可以接收程序的指令。例如,可以从编译器的前端接收指令以将源码转变为机器码。附加地或备选地,可以从存储器、辅助存储设备(诸如硬盘驱动器)或从通信接口(诸如当指令从远程服务器计算机下载时)加载指令。程序的指令可以包括关于指令的元数据或数据,诸如与指令相关联的断点或单步起点。
在过程框910,可以将指令分组为目标用于在基于块的处理器上执行的指令块。例如,编译器可以将机器码生成为顺序指令流,这些指令可以根据基于块的计算机的硬件资源以及代码的数据和控制流被分组为指令块。例如,给定的指令块可以包括单个基本块、基本块的一部分或多个基本块,只要指令块可以在ISA的约束和目标计算机的硬件资源内执行。基本块是代码块,其中控制只能在块的第一个指令处进入块,并且控制只能在基本块的最后一个指令处离开块。因此,基本块是一起执行的一系列指令。可以使用断言的指令将多个基本块组合为单个指令块,使得能够将指令块内分支转换为数据流指令。
指令可以被分组以使得处理器核的资源不被超出和/或被有效利用。例如,处理器核可以包括固定数目的资源,诸如一个或多个指令窗口、固定数目的加载和存储队列条目等。这些指令可以被分组为每组具有比指令窗口内可用的指令少的指令。例如,指令窗口可以具有用于32个指令的存储容量,第一基本块可以具有8个指令,并且第一基本块可以有条件地分支到具有23个指令的第二基本块。两个基本块可以组合成一个指令块,使得这个分组包括31个指令(小于32指令容量),并且第二基本块的指令基于分支条件为真被断言。作为另一示例,指令窗口可以具有用于32个指令的存储容量,并且基本块可以具有38个指令。前31个指令可以分组为一个带有无条件分支的指令块(第32指令),并且接下来的7个指令可以分组为第二指令块。作为另一示例,指令窗口可以具有用于32指令的存储容量,并且循环体可以包括8个指令并且重复三次。分组可以包括通过在更大的循环体内组合循环体的多次迭代来展开循环。通过展开循环,可以增加指令块内的指令的数目,并且潜在地可以更有效地利用指令窗口资源。
在过程框920,可以针对相应指令块标识断言的加载和/或断言的存储指令。断言的加载指令是基于相应指令块内的断言计算的结果有条件地执行的加载指令。类似地,断言的存储指令是根据相应指令块内的断言计算的结果有条件地执行的存储指令。例如,断言计算可以基于“if”、“switch”、“while”、“do”、“for”或其他源码语句中的条件或测试来生成,用于修改程序的控制流。过程框910中的指令的分组可以影响哪些加载和存储是断言的加载和断言的存储。例如,将单个if-then-else语句分组在单个指令块内(如图8的指令块800中)可以使得在if-then-else语句的主体内的任何加载和存储成为断言的加载和存储。备选地,将if子句的主体的语句分组在一个指令块中(以类似于图4的指令块425的方式)并且将else子句的主体的语句分组在不同的指令块中可以使得当在各个指令块外部计算条件时,没有加载和存储成为断言的加载和存储。
在过程框930,可以将相应的断言的加载和/或断言的存储指令分类为用于预取的候选或者不是用于预取的候选。分类可以基于各种因素和/或因素的组合,诸如指令块的静态分析、分支将被采用的可能性、断言计算的来源、编程者提示、执行指令的频率的静态或动态分析、存储器引用的类型、以及可以影响使用预取的数据的可能性的其他因素。
作为一个示例,可以基于对指令块的静态分析来对相应的指令进行分类。静态分析基于与在指令块的任何指令执行之前可用的指令块有关的信息。例如,静态分析可以包括确定算术和逻辑单元(ALU)指令与存储器指令的混合。处理器核的静态模型可以包括ALU指令与存储器指令的期望比率,诸如ALU/存储器指令的2:1比率。如果指令块的指令混合是ALU绑定的(当与存储器指令的数目相比时,存在比期望更多的ALU指令),则预取可能是更期望的。但是,如果指令块的指令混合是存储器绑定的,则预取可能不太理想。因此,可以基于指令块内的指令混合将相应指令分类为用于预取的候选。
作为另一示例,可以基于分支将被采用的可能性来对相应的指令进行分类。分支将被采用的可能性可以基于静态或动态分析。例如,静态分析可以基于生成断言计算的源码语句。作为具体示例,for循环中的分支可能比if-then-else语句中的分支更有可能被采用。动态分析可以使用来自在程序早期运行期间生成的简档的信息。具体地,可以使用用于程序的代表性数据执行程序一次或多次,以生成包括程序及其指令块的轨迹和/或统计数据的简档。简档可以通过在程序运行期间对性能计数器或处理器的其他状态进行采样来生成。简档可以包括诸如以下各项信息:哪个指令块被执行,执行各个指令块的频率(诸如以确定程序的热区域),采用哪个分支,采用各个分支的频率,断言的结果计算等。简档数据可以用于在重新编译程序期间将信息引导或返回给编译器,使得可以潜在地使程序更有效。在一个实施例中,很可能被执行的加载和/或存储可以被分类为用于预取的候选,并且其他加载和/或存储可以被分类为不是用于预取的候选。在备选实施例中,可以减少或增加要执行的可能性,以将特定加载或存储分类为用于预取的候选。
作为另一示例,可以例如经由编译器杂注或者通过使用特定的系统调用将编程者提示传递给编译器。作为具体示例,编程者可以使用由编译器定义的杂注来指定对于特定的加载、存储、子例程、部分或程序启用和/或期望数据预取。附加地或备选地,编程者可以指定针对特定的加载、存储、子例程、部分或程序禁用或不喜欢数据预取。编程者提示可以专门用于将特定的加载或存储分类为用于预取的候选,或者可以用其他因素对其进行加权用于对特定的加载或存储进行分类。
作为另一示例,可以使用一种类型的存储器引用来将特定的加载或存储分类为用于预取的候选。具体地,可能在处理器核的高速缓存中遗漏的存储器访问可以受益于预取。例如,对堆的存储器访问或对链接数据结构内的间接存储器访问(例如,指针追踪)可能更可能在高速缓存中遗漏并且可以受益于预取。因此,这些访问可以被分类为用于预取的候选。
在过程框940,可以在相应的断言的加载和/或断言的存储指令被分类为用于预取的候选时针对其启用预取。例如,可以针对指令块和/或个体指令启用预取。作为具体示例,可以通过在用于配置处理器核以启用预取的指令头部中设置标志来针对指令块启用预取。作为另一示例,可以通过使用指令的使能位编码是否针对指令启用预取来针对特定指令启用预取。
在过程框950,可以可选地在指令块内和/或之间执行优化。例如,用于确定加载或存储指令的存储器地址的指令可以被移动到指令块中的较早位置,使得地址可用于从目标地址预取数据。作为具体示例,用于确定加载或存储指令的存储器地址的断言的指令可以被转换为非断言的指令并且被移动到指令序列中比断言计算更早的位置。作为另一示例,用于确定加载或存储指令的存储器地址的指令可以被移动到断言的路径内的指令序列中的较早位置。作为另一示例,在断言计算之前,可以提升断言的加载或存储。换言之,可以将断言的加载或存储转换为非断言的加载或存储,并且移至断言计算之前。
在过程框960,可以针对目标用以在基于块的处理器上执行的指令块发射目标码。例如,指令块可以以由基于块的目标处理器的ISA定义的格式发射。特别地,指令块可以包括指令块头部和一个或多个指令。指令块头部可以包括用于确定处理器核的操作模式的信息。例如,指令块头部可以包括用于允许断言的加载和存储的预取的执行标志。在一个实施例中,可以发射相应的指令块,使得指令块的指令顺序地跟随指令头部。指令可以按照顺序发射,使得指令块可以存储在存储器的连续部分中。如果指令的长度可变,则例如可以在指令之间插入填充字节以保持期望的对准,诸如在字或双字边界上。在备选实施例中,指令头部可以在一个流中发射,并且指令可以在不同的流中发射,使得指令头部可以存储在连续存储器的一个部分中,并且指令可以存储在连续存储器的不同部分中。
在过程框970处,所发射的目标代码可以被存储在计算机可读存储器或者存储设备中。例如,所发射的目标代码可以被存储到基于块的处理器的存储器中,使得基于块的处理器可以执行程序。作为另一示例,所发射的目标代码可以被加载到存储设备(诸如基于块的处理器的硬盘驱动器),使得基于块的处理器可以执行程序。在运行时,可以从存储设备中取回发射的目标码的全部或一部分,并且将其加载到基于块的处理器的存储器中,使得基于块的处理器可以执行程序。
X.示例的基于块的计算机架构
图10是用于执行程序的示例架构1000。例如,程序可以使用图9的方法900进行编译以生成指令块A到E。指令块A到E可以存储在可以被处理器1005访问的存储器1010中。处理器1005可以包括多个基于块的处理器核(包括基于块的处理器核1020)、可选的存储器控制器和层2(L2)高速缓存1040、高速缓存一致性逻辑1045、控制单元1050和输入/输出(I/O)接口1060。基于块的处理器核1020可以与用于存储和取回程序的指令和数据的存储器层级通信。存储器层级可以包括存储器1010、存储器控制器以及层2(L2)高速缓存1040和层1(L1)高速缓存1028。存储器控制器和层2(L2)高速缓存1040可以用于生成用于与存储器1010通信的控制信号并且为来自或去往存储器1010的信息提供临时存储。如图10所示,存储器1010在处理器1005的片外或外部。然而,存储器1010可以完全或部分地集成在处理器1005内。
控制单元1050可以用于实现程序的全部或部分运行时环境。运行时环境可以用于管理基于块的处理器核和存储器1010的使用。例如,存储器1010可以被划分为包括指令块A到E的代码段1012和包括静态部分、堆部分和堆栈部分的数据段1015。作为另一示例,控制单元1050可以用于分配处理器核以执行指令块。注意,基于块的处理器核1020包括具有与控制单元1050不同的功能的控制单元1030。控制单元1030包括用于管理基于块的处理器核1020对指令块的执行的逻辑。可选的I/O接口1060可以用于将处理器1005连接到各种输入设备(诸如输入设备1070)和各种输出设备(诸如显示器1080)和存储设备1090。在一些示例中,控制单元1030(及其各个组件)、存储器控制器和L2高速缓存1040、高速缓存一致性逻辑1045、控制单元1050和I/O接口1060至少部分地使用以下中的一个或多个来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。在一些示例中,高速缓存一致性逻辑1045、控制单元1050和I/O接口1060至少部分地使用外部计算机(例如,执行控制代码并且经由通信接口(未示出)与处理器1005通信的片外处理器)来实现。
可以在处理器1005上执行程序的全部或一部分。具体地,控制单元1050可以分配一个或多个基于块的处理器核(诸如处理器核1020)以执行程序。控制单元1050可以将指令块的起始地址传送给处理器核1020,使得可以从存储器1010的代码段1012取指指令块。具体地,处理器核1020可以向存储器控制器和L2高速缓存1040发出针对包含指令块的存储器块的读取请求。存储器控制器和L2高速缓存1040可以将指令块返回到处理器核1020。指令块包括指令头部和指令。指令头部可以由头部译码逻辑1032译码以确定关于指令块的信息,诸如是否存在与指令块相关联的任何声明的执行标志。例如,头部可以编码是否为指令块启用数据预取。在执行期间,动态地调度指令块的指令用于由指令调度器逻辑1034执行。当指令执行时,指令块的中间值(诸如指令窗口1022和1023的操作数缓冲器以及加载/存储队列1026的寄存器)被计算并且本地存储在处理器核1020的状态内。指令的结果以原子方式提交用于指令块。因此,由处理器核1020生成的中间值在处理器核1020外部是不可见的,并且最终结果(诸如对存储器1010或全局寄存器文件(未示出)的写入)作为单个事务被释放。处理器核1020可以包括用于在执行一个或多个指令块期间监测性能相关信息的性能CSR 1039。性能CSR 1039可以由状态访问逻辑来访问,并且结果可以记录为简档数据用于由编译器在实现简档引导的优化时使用。
基于块的处理器核1020的控制单元1030可以包括用于预取与指令块的加载和存储指令相关联的数据的逻辑。当加载和存储指令所引用的存储器位置被存储在较接近处理器核1020的存储器层级的较快级别中时,可以增加加载和存储指令的执行速度。预取数据可以包括在执行指令之前将与加载和存储地址相关联的数据从存储器层级的较慢级别复制到存储器层级的较快级别。因此,在加载或存储指令开始执行之前,取回数据的时间可以与其他指令重叠。
预取逻辑1036可以用于生成和管理对数据的预取请求。最初,预取逻辑1036可以标识用于预取的一个或多个候选。例如,预取逻辑1036可以与头部译码逻辑1032和指令译码逻辑1033通信。头部译码逻辑1032可以对指令头部进行译码以确定是否针对驻留指令块启用数据预取。如果启用了数据预取,则可以标识预取的候选。例如,指令译码逻辑1033可以用于通过译码指令的操作码来标识加载和存储指令。指令译码逻辑1033还可以确定针对特定指令启用还是禁用预取,特定指令是否被断言的,任何断言计算的源,执行指令所需要的断言结果的值,用于计算要被预取的数据的地址的操作数的任何源,以及指令的加载存储标识符。用于预取的候选可以加载和存储其中预取未被禁用指令。
预取逻辑1036可以在相应指令被译码并且指令的目标地址已知之后生成针对用于预取的候选的预取请求。指令的目标地址可以直接在指令内编码,也可以根据指令的一个或多个操作数来计算。例如,操作数可以在指令中编码为常量或立即值,可以由指令块的另一指令生成,或其组合。作为具体示例,目标地址可以是编码在指令中的立即数与来自另一指令的结果之和。作为另一示例,目标地址可以是来自第一指令的第一结果与来自第二指令的第二结果之和。唤醒和选择逻辑1038可以监测加载和存储指令的操作数,并且在加载和存储指令的操作数就绪时通知预取逻辑1036。一旦加载和存储指令的操作数就绪,可以计算地址。
预取逻辑1036可以以各种方式计算加载或存储指令的地址。例如,预取逻辑1036可以包括用于根据加载或存储指令的操作数计算地址的专用算术逻辑单元(ALU)。通过在预取逻辑1036内具有专用ALU,只要操作数就绪,就潜在地可以计算要从中预取的地址。然而,通过复用作为另一功能单元的一部分的ALU,可以潜在地使处理器1005更小且更便宜。尺寸减小可能会增加复杂性,因为要管理共享的ALU以使得冲突的请求不会同时呈现给ALU。附加地或备选地,可以使用加载存储队列的ALU来计算加载或存储指令的目标地址。附加地或备选地,ALU 1024的ALU可以用于计算加载或存储指令的目标地址。处理器核1020使用ALU 1024来执行指令块的指令。具体地,在指令的执行阶段期间,输入操作数从指令窗口1022或1023的操作数缓冲器被路由到ALU 1024,并且来自ALU 1024的输出被写入到指令窗口1022或1023的目标操作数缓冲器。然而,ALU 1024的一个或多个ALU可以在给定周期期间空闲,这可以为ALU提供用于地址计算的机会。指令调度器逻辑1034管理ALU 1024的使用。预取逻辑1036可以与指令调度器逻辑1034通信,使得ALU 1024的个体ALU不被超额认购。一旦计算出目标地址,就可以针对指令发出预取请求。
预取逻辑1036可以发起预取请求以将目标地址已经被确定的加载和存储指令的地址作为目标。存储器层级的存储器带宽可能受到限制,并且因此预取逻辑1036的仲裁逻辑可以用于确定选择哪个用于预取的候选(如果有的话)。作为一个示例,对存储器层级的非预取请求可以优先于预取请求。非预取请求可以来自处于执行阶段的指令,并且将非预取请求延迟在预取请求之后可能会降低指令块的总体执行速度。作为另一示例,对于非断言的加载和存储的预取请求可以优先于对于断言的加载和存储的预取请求。由于非断言的加载和存储将被执行,并且断言的加载和存储可以是推测性的,所以通过允许非断言的加载和存储具有高于断言的加载和存储的优先级,可以更有效地利用存储器带宽。例如,可以在计算断言的指令的断言之前发出与断言的加载或存储相关联的预取。根据断言计算的结果,可以或可以不执行断言的指令。如果断言的指令没有执行,则对目标地址的预取是浪费工作。
预取逻辑1036可以与依赖关系预测器1035通信以确定哪些断言的指令更可能被执行。与更可能被执行的断言的指令相关联的预取请求可以优先于不太可能被执行的断言的指令。作为一个示例,依赖关系预测器1035可以使用试探法来预测断言计算的值并且因此断言哪些断言的指令更可能被执行。作为另一示例,依赖关系预测器1035可以使用编码在指令头部中的信息来预测断言计算的值。
预取逻辑1036可以使与断言的加载相关联的预取优先于与断言的存储相关联的预取。例如,在共享存储器多处理器系统中,取回与加载相关联的数据可以比取回与存储相关联的数据具有更少的副作用。具体地,高速缓存一致性逻辑1045可以保持存储器层级中的行的目录和/或一致性状态信息。目录信息可以包括存在信息,诸如高速缓存行可以被存储在多个处理器中的哪个存储器中。一致性状态信息可以包括使用诸如MESI或MOESI协议等高速缓存一致性协议的层级中的每个高速缓存行的状态。这些协议向存储在存储器层级中的行指派状态,诸如修改(“M”)状态、拥有(“O”)状态、独占(“E”)状态、共享(“S”)状态和无效(“I”)状态。当加载高速缓存行的地址时,可以将高速缓存行指派为拥有、独占或共享状态。这可能会导致其他处理器中的高速缓存行的副本改变高速缓存协议状态。但是,当存储高速缓存行的地址时,高速缓存行将被指派为修改状态(使用写入分配回写策略),这可能导致高速缓存行在其他处理器的高速缓存中失效。因此,可能需要使与断言的加载相关联的预取优先于与断言的存储相关联的预取。
预取逻辑1036可以发起对加载和存储指令的目标地址的预取请求。例如,预取逻辑1036可以发起与目标地址相关联的存储器操作。存储器操作可以包括执行与包括存储器地址的高速缓存行相对应的高速缓存一致性操作。例如,可以在高速缓存一致性逻辑1045中搜索与高速缓存行相关的一致性信息。存储器操作可以包括检测对于包括存储器地址的高速缓存行是否存在处理器间冲突。如果不存在冲突,则预取逻辑1036可以发起针对目标地址的预取请求。然而,如果存在冲突,则预取逻辑1036可以中止针对目标地址的预取请求。
预取数据可以包括在加载指令540被执行之前,将与目标地址相关联的数据从存储器层级的较慢级别复制到存储器层级的较快级别。作为具体示例,包括目标地址的高速缓存行可以从存储器1010的数据段1014被取指到L2高速缓存1040和/或L1高速缓存1028中。预取数据可以与执行加载指令形成对比。例如,当执行加载指令时,数据被存储在指令窗口1022或1023的操作数缓冲器中,但是当预取数据时,数据不存储在指令窗口1022或1023的操作数缓冲器中。预取数据可以包括执行与包括目标地址的高速缓存行相关联的一致性操作。例如,可以更新与包括目标地址的高速缓存行相关联的一致性状态。可以在高速缓存一致性逻辑1045和/或共享存储器1010的其他处理器的高速缓存一致性逻辑内更新一致性状态。
图11示出了包括具有多个基于块的处理器核1120A到1120C和存储器层级的处理器1105的示例系统1100。基于块的处理器核1120A到1120C可以是物理处理器核和/或包括多个物理处理器核的逻辑处理器核。存储器层级可以以各种不同的方式布置。例如,不同的布置可以包括层级内的较多或较少的级别,并且存储器层级的不同组件可以在系统1100的不同组件之间共享。存储器层级的组件可以集成在单个集成电路或芯片上。备选地,存储器层级的一个或多个组件可以在包括处理器1105的芯片外部。如图所示,存储器层级可以包括存储1190、存储器1110和在基于块的处理器核1120A到1120C之间共享的L2高速缓存(L2$)1140。存储器层级可以包括在处理器核1120A到1120C的相应核内私有的多个L1高速缓存(L1$)1124A到1124C。在一个示例中,处理器核1120A到1120C可以寻址虚拟存储器,并且在虚拟存储器地址与物理存储器地址之间存在转换。例如,可以使用存储器管理单元(MMU)1152来管理和分配虚拟存储器,使得可寻址存储器空间可以超过主存储器1110的大小。虚拟存储器可以被分成页面并且活动页面可以存储在存储器1110中,并且非活动页面可以存储在存储设备1190内的后备存储上。存储器控制器1150可以与输入/输出(I/O)接口1160通信以在主存储器与后备存储之间移动页面。
数据可以在存储器层级的不同级别以不同粒度被访问。例如,指令可以以字节、半字、字或双字为单位访问存储器。存储器1110与L2高速缓存1140之间以及L2高速缓存1140与L1高速缓存1124A到1124C之间的转移单位可以是行。高速缓存行可以是多个字宽,并且高速缓存行大小可以在存储器层级的不同级别之间不同。存储设备1190与存储器1110之间的转移单位可以是页面或块。页面可以是多个高速缓存行。因此,加载或预取用于加载或存储指令的数据可能导致将更大的数据单元从存储器层级的一个级别复制到存储器层级的另一级别。作为具体示例,在处理器核1120A上执行并且请求位于存储器的被移出页面的块中的数据的半字的加载指令可以导致存储器块从存储设备1190复制到主存储器1110,第一行从主存储器1110复制到L2高速缓存1140,第二行从L2高速缓存1140复制到L1高速缓存1124A,并且字或半字从L1高速缓存1124A复制到处理器核1120A的操作数缓冲器。所请求的数据的半字被包含在第一行、第二行和块中的每个中。
当多个处理器核可以具有特定存储器位置的不同副本时,诸如在L1高速缓存1124A到1124C中,存在本地副本对于相同存储器位置具有不同值的潜在性。然而,可以使用目录1130和高速缓存一致性协议来保持存储器的不同副本一致。在一些示例中,目录1130至少部分地使用硬连线有限状态机、可编程微码、可编程门阵列、可编程处理器或其他合适的控制电路中的一个或多个来实现。目录1130可以用于保持包括关于存储器行的副本位于何处的存在信息的驻留信息1136。例如,存储器行可以位于处理器1105的高速缓存中和/或共享存储器1110的其他处理器的高速缓存中。具体地,驻留信息1136可以包括L1高速缓存1124A到1124C的粒度的存在信息。为了保持存储器位置的一致副本,高速缓存一致性协议可以要求在给定的时间只有一个处理器核1120A到1120C可以写入特定存储器位置。可以使用各种不同的高速缓存协议,诸如本例中描述的MESI协议。为了写入存储器位置,处理器核可以获取存储器位置的独占副本,并且在一致性状态1132中将一致性状态记录为“E”。存储器位置可以以L1高速缓存行尺寸的粒度被跟踪。标签1134可以用于保持存在于L1高速缓存中的所有存储器位置的列表。因此,每个存储器位置在标签1134、驻留信息1136和一致性状态1132中具有相应的条目。当处理器核诸如通过使用存储指令写入存储器位置时,可以将一致性状态改变为修改或“M”状态。多个处理器核可以读取相同的存储器位置的未修改版本,诸如当处理器核使用加载指令预取或加载存储器位置时。当存储器位置的多个副本存储在多个L1高速缓存中时,一致性状态可以是共享或“S”状态。然而,如果要由第一处理器写入共享副本之一,则第一处理器通过使存储器位置的其他副本无效来获得专用副本。通过将其他副本的一致性状态更改为无效或“I”状态而使其他副本无效。一旦修改了存储器位置的副本,就可以通过将修改后的值写回到存储器中并且针对被修改的存储器位置的高速缓存副本使一致性状态无效或将其更改为共享来共享更新后的存储器位置。
基于块的处理器核1120A到1120C可以执行共享存储器1110的不同程序和/或线程。线程是如下程序内的控制单元,在该程序中根据线程的控制流来排序指令块。线程可以包括程序的一个或多个指令块。线程可以包括用于将其与其他线程区分开来的线程标识符、引用线程的非推测性指令块的程序计数器、用于在线程的指令块之间传递值的逻辑寄存器文件以及用于将数据(诸如激活记录)本地存储到线程的栈。程序可以是多线程的,其中每个线程可以独立于其他线程来操作。因此,不同线程可以在不同的各个处理器核上执行。如上所述,在处理器核1120A到1120C上执行的不同程序和/或线程可以根据高速缓存一致性协议来共享存储器1110。
XI.预取与断言的加载和/或存储相关联的数据的示例方法
图12是示出预取与在基于块的处理器核上执行的断言的加载相关联的数据的示例方法1200的流程图。例如,方法1200可以在处理器核1020被布置在诸如图10的系统1000等系统中时使用处理器核1020来执行。基于块的处理器核用于使用块原子执行模型来执行程序。程序包括一个或多个指令块,其中每个指令块包括指令块头部和多个指令。使用块原子执行模型,各个指令块的个体指令被原子地执行和提交,使得指令块的最终结果在提交之后对单个事务中的其他指令块在架构上可见。
在过程框1210,接收指令块。指令块包括指令头部和多个指令。例如,可以响应于处理器核的程序计数器被加载在指令块的起始地址来接收指令块。多个指令可以包括各种不同类型的指令,其中不同类型的指令由相应指令的操作码来标识。指令可以是断言的或非断言的。断言的指令基于在指令块的运行时确定的断言结果有条件地执行。
在过程框1220,可以确定多个指令中的指令是断言的加载指令。例如,处理器核的指令译码逻辑可以通过将指令的操作码与加载指令的操作码相匹配来标识断言的加载指令。指令的断言字段可以被译码以确定加载指令的执行是否以断言计算为条件。指令译码逻辑可以标识断言的加载指令的操作数的来源,诸如断言计算的来源。指令译码逻辑可以标识可以用于确定断言的加载指令的目标地址的断言的加载指令的恒定或立即字段,其中目标地址是要加载的数据在存储器中的位置。经译码的断言的加载指令可以存储在处理器核的指令窗口中。
在可选的过程框1230,可以使用被编码在断言的加载指令的字段中的第一值和由指令块的寄存器读取和/或直接以断言的加载指令为目标的不同指令产生的第二值来计算存储器地址(例如,目标地址)。作为一个示例,第一值可以是断言的加载指令的立即值。作为另一示例,第二值可以由指令块的寄存器读取引起。具体地,寄存器读取可以由指令或通过译码指令块的头部中的字段来发起。作为另一示例,不同的指令可以通过从寄存器文件或存储器读取第二值来产生第二值。作为另一示例,不同的指令可以通过执行诸如加或减运算等计算来产生第二值。第一值和第二值可以以各种方式用来计算存储器地址。例如,第一值和第二值被相加。作为另一示例,在第一值和第二值被相加之前,可以对第一值和第二值中的一个或多个进行符号扩展和/或移位。计算可以由预取逻辑块或加载存储队列中的专用功能单元(诸如ALU)执行。附加地或备选地,计算可以在打开指令发出时隙期间由指令执行逻辑数据路径的算术单元来执行。
作为另一示例,存储器地址可以使用由以断言的加载指令为目标的第一指令产生的第一值和以断言的加载指令为目标的第二指令产生的第二值来计算。作为另一示例,存储器地址可以使用被编码在断言的加载指令的字段中的第一值和被存储在基址寄存器中的第二值来计算。作为另一示例,存储器地址可以使用被编码在断言的加载指令的字段中的第一值来计算。
在过程框1240,可以在断言的加载指令的断言被计算之前,从由断言的加载指令作为目标的存储器地址预取数据。例如,可以在生成存储器地址之后并且在计算断言的加载指令的断言之前预取数据。特别地,唤醒和选择逻辑可以被配置为确定与断言的加载指令相关联的第一值何时就绪,并且在第一值就绪之后发起预取逻辑。
在可选的过程框1250,可以根据存储器访问优先策略而使向存储器的预取请求优先。例如,存储器访问优先策略可以包括用于保持存储器带宽的有效利用的最佳实践。作为一个示例,可以使向存储器的非预取请求优先于预取请求。非预取请求可能比潜在的推测性预取请求更有可能被使用,使得可以更有效地利用存储器带宽。作为另一示例,针对断言的加载指令的预取请求可以优先于针对断言的存储指令的预取请求。
图13是示出预取与在基于块的处理器核上执行的断言的存储相关联的数据的示例方法1300的流程图。例如,方法1300可以在处理器核1020被布置在诸如图10的系统1000的系统中时使用处理器核1020来执行。
在过程框1310,接收指令块。指令块包括指令头部和多个指令。例如,可以响应于处理器核的程序计数器被加载在指令块的起始地址来接收指令块。多个指令可以包括各种不同类型的指令,其中不同类型的指令由相应指令的操作码来标识。指令可以是断言的或非断言的。断言的指令基于在指令块的运行时确定的断言结果有条件地执行。
在过程框1320,可以确定多个指令中的指令是断言的存储指令。例如,处理器核的指令译码逻辑可以通过将指令的操作码与存储指令的操作码相匹配来标识断言的存储指令。指令的断言字段可以被译码以确定存储指令的执行是否以断言计算为条件。指令译码逻辑可以标识断言的存储指令的操作数的来源,诸如断言计算的来源。指令译码逻辑可以标识可以用来确定断言的存储指令的目标地址的断言的存储指令的常量或立即字段,其中目标地址是要存储的数据的存储器中的位置。经译码的断言的存储指令可以存储在处理器核的指令窗口中。
在可选的过程框1330,可以使用被编码在断言的存储指令的字段中的第一值和由指令块的寄存器读取和/或直接以断言的存储指令为目标的不同指令产生的第二值来计算存储器地址(例如,目标地址)。作为一个示例,第一值可以是断言的存储指令的立即值。作为另一示例,不同的指令可以通过从寄存器文件或存储器读取第二值来产生第二值。作为另一示例,不同的指令可以通过执行诸如加或减运算等计算来产生第二值。第一值和第二值可以以各种方式用来计算存储器地址。例如,第一值和第二值可以被相加。作为另一示例,在第一值和第二值被相加之前,可以对第一值和第二值中的一个或多个进行符号扩展和/或移位。计算可以由预取逻辑块或加载存储队列中的专用功能单元(诸如ALU)执行。附加地或备选地,计算可以在打开指令发行时隙期间由指令执行逻辑数据路径的算术单元执行。
作为另一示例,存储器地址可以使用由以断言的存储指令为目标的第一指令产生的第一值和由以断言的存储指令为目标的第二指令产生的第二值来计算。作为另一示例,存储器地址可以使用被编码在断言的存储指令的字段中的第一值和被存储在处理器核的基址寄存器中的第二值来计算。作为另一示例,存储器地址可以使用被编码在断言的存储指令的字段中的第一值来计算。
在过程框1340,可以在计算断言的存储指令的断言之前,发起与由断言的存储指令作为目标的存储器地址相关联的存储器操作。作为一个示例,存储器操作可以在计算断言的存储指令的断言之前发生。特别地,存储器操作可以在存储器地址被生成之后并且在计算断言的存储指令的断言之前发生。具体地,唤醒和选择逻辑可以被配置为确定与断言的存储指令相关联的第一值何时就绪,并且在第一值就绪之后发起预取逻辑和/或高速缓存一致性逻辑。
可以执行各种存储器操作。作为一个示例,存储器操作可以包括向处理器的存储器层级发出针对计算的目标地址处的数据的预取请求。作为另一示例,存储器操作可以包括执行与包括存储器地址的高速缓存行相对应的高速缓存一致性操作。高速缓存一致性操作可以包括为包括计算的目标地址的存储器行取指一致性许可。高速缓存一致性操作可以包括确定对于包括计算的目标地址的存储器行是否存在线程间和/或处理器间冲突。具体地,可以确定存储器行是否存在于另一处理器或处理器核中以及存储器行的高速缓存一致性状态是独占还是共享状态。如果存在线程间和/或处理器间冲突,则可以中止存储器行的预取,或者可以发起适当的一致性动作,诸如回写存储器行的修改副本和/或使存储器行的共享副本无效。
在可选的过程框1350,可以根据存储器访问优先策略使存储器操作优先。例如,存储器访问优先策略可以包括用于有效使用存储器带宽的规则和/或启发。作为一个示例,对于断言的加载指令的预取请求和/或向存储器层级的非预取请求可以优先于发起的存储器操作。通常,向存储器的非预取请求可以优先于预取请求。作为另一示例,针对断言的加载指令的预取请求可以优先于针对断言的存储指令的预取请求。
XII.示例计算环境
图14示出了其中可以实现所描述的实施例、工艺和技术(包括支持与目标用于基于块的处理器的指令块的断言的加载和存储相关联的数据的预取)的合适的计算环境1400的通用示例。
计算环境1400不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置被实现,包括手持式设备、多处理器系统、可编程消费者电子产品、网络PC、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
参考图14,计算环境1400包括至少一个基于块的处理单元1410和存储器1420。在图14中,该最基本配置1430被包括在虚线内。基于块的处理单元1410执行计算机可执行指令并且可以是真实处理器或者虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指以增加处理能力,并且如此多个处理器可以同时运行。存储器1420可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器等)、或者两者的组合。存储器1420存储可以例如实现在此所描述的技术的软件1480、图像和视频。计算环境可以具有附加的特征。例如,计算环境1400包括存储装置1440、一个或多个输入设备1450、一个或多个输出设备1460以及一个或多个通信连接1470。互连机制(未示出)(诸如总线、控制器或者网络)将计算环境1400的部件相互连接。通常,操作系统软件(未示出)提供用于在计算环境1400中执行的其他软件的操作环境,并且协调计算环境1400的部件的活动。
存储装置1440可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、CD-ROM、CD-RW、DVD或者可以用于存储信息并且可以在计算环境1400内访问的任何其他介质。存储装置1440存储用于软件1480的指令、插入数据和消息,其可以用于实现在此所描述的技术。
(一个或多个)输入设备1450可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔或轨迹球、语音输入设备、扫描设备或者向计算环境1400提供输入的另一设备。对于音频而言,(一个或多个)输入设备1450可以是以模拟或者数字形式接受音频输入的声卡或者类似设备,或者向计算环境1400提供音频样本的CD-ROM读取器。(一个或多个)输出设备1460可以是显示器、打印机、扬声器、刻录机或者提供来自计算环境1400的输出的另一设备。
(一个或多个)通信连接1470实现通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频或者调制数据信号中的其他数据的信息。(一个或多个)通信连接1470不限于有线连接(例如,兆比特或吉比特以太网、无限带宽、电气或光纤连接上的光纤信道),而且包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)以及用于提供用于所公开的代理、网桥和代理数据消费者的网络连接的其他适合的通信连接。在虚拟主机环境中,(一个或多个)通信连接可以是由虚拟主机所提供的虚拟化网络连接。
可以使用实现计算云1490中的所公开的技术的全部或部分的计算机可执行指令执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境1430中,或者所公开的编译器可以在被定位在计算云1490中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或者CISC处理器)上执行。
计算机可读介质是可以在计算环境1400内访问的任何可用介质。以示例而非限制的方式,利用计算环境1400,计算机可读介质包括存储器1420和/或存储装置1440。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1420和存储装置1440)而非传输介质(诸如调制数据信号)。
XIII.所公开的技术的附加示例
根据上文所讨论的示例在此讨论了所公开的主题的附加示例。
在一个实施例中,处理器包括用于执行指令块的基于块的处理器核。指令块包括指令头部和多个指令。基于块的处理器核包括译码逻辑和预取逻辑。译码逻辑被配置为检测指令块的断言的加载指令。预取逻辑与译码逻辑通信。预取逻辑被配置为接收与断言的加载指令相关联的第一值。第一值可以由指令块的寄存器读取和/或以断言的加载指令为目标的指令块的另一指令来生成。基于块的处理器核还可以包括与预取逻辑通信的唤醒和选择逻辑。唤醒和选择逻辑可以被配置为确定与断言的加载指令相关联的第一值何时就绪,并且在第一值就绪之后发起预取逻辑。
预取逻辑还被配置为使用所接收的第一值来计算断言的加载指令的目标地址。目标地址可以用各种不同的方式来计算。例如,目标地址可以使用预取逻辑的专用算术单元来计算。作为另一示例,目标地址可以使用加载存储队列的算术单元来计算。作为另一示例,计算目标地址可以包括在打开指令发出时隙期间并且使用指令执行逻辑的算术单元,执行目标地址计算。
预取逻辑还被配置为针对所计算的目标地址处的数据向处理器的存储器层级的高速缓存发出预取请求。向存储器层级的预取请求可以在断言的加载指令的断言被计算之前发出。断言的加载指令可以包括编译器提示字段,并且预取逻辑可以仅在由编译器提示字段指示时才发出预取请求。向存储器层级的非预取请求可以优先于预取请求。
处理器可以用在各种不同的计算系统中。例如,服务器计算机可以包括非易失性存储器和/或存储设备;网络连接;存储一个或多个指令块的存储器;以及包括用于执行指令块的基于块的处理器核的处理器。作为另一示例,一种设备可以包括用户界面组件;非易失性存储器和/或存储设备;蜂窝和/或网络连接;存储一个或多个指令块的存储器;以及包括用于执行指令块的基于块的处理器核的处理器。用户界面组件可以包括以下中的至少一个或多个:显示器、触摸屏显示器、触觉输入/输出设备、运动感测输入设备和/或语音输入设备。
在一个实施例中,可以使用一种方法来在包括基于块的处理器核的处理器上执行程序。该方法包括接收包括多个指令的指令块。该方法还包括确定多个指令中的指令是断言的加载指令。该方法还包括在断言的加载指令的断言被计算之前从由断言的加载指令作为目标的存储器地址中预取数据。断言的加载指令可以包括预取使能位,并且数据可以仅当由预取使能位指示时才从存储器地址中被预取。该方法还可以包括使向存储器的非预取请求优先于预取请求。
该方法还可以包括使用被编码在断言的加载指令的字段中的第一值和由指令块的寄存器读取和/或以断言的加载指令为目标的不同指令生成的第二值来计算存储器地址。存储器地址可以用各种不同的方式来计算。例如,计算存储器地址可以包括使用专用算术单元。算术单元可以在基于块的处理器核的预取逻辑或加载存储队列中是专用的。作为另一示例,计算存储器地址可以包括请求访问共享算术单元并且使用共享算术单元来计算存储器地址。
在一个实施例中,方法包括接收程序的指令并且将指令分组为目标用于在基于块的处理器上执行的多个指令块。该方法还包括:针对多个指令块中的相应指令块:确定加载指令是否被断言的;将给定的断言的加载指令分类为用于预取的候选或不是用于预取的候选;并且当它被分类为预取的候选时,针对给定的断言的加载指令启用预取。该方法还包括发射多个指令块以用于由基于块的处理器执行。该方法还包括将发射的多个指令块存储在一个或多个计算机可读存储介质或设备中。基于块的处理器可以被配置为执行由该方法生成的所存储的多个指令块。
给定的断言的加载指令可以以各种方式分类。例如,对给定的断言的加载指令的分类可以仅基于关于程序的静态信息。作为另一示例,对给定的断言的加载指令的分类可以基于各个指令块的指令组合。作为另一示例,对给定的断言的加载指令的分类可以基于关于程序的动态信息。
一个或多个计算机可读存储介质可以存储在由计算机执行时引起计算机执行该方法的计算机可读指令。
鉴于所公开的主题的原理可以应用的许多可能实施例,应当认识到所图示的实施例仅是优选的示例并且不应该当作将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附的权利要求进行限定。我们因此根据我们的发明要求保护落在这些权利要求的范围内的全部内容。

Claims (15)

1.一种包括基于块的处理器核的处理器,所述基于块的处理器核用于执行包括指令头部和多个指令的指令块,所述基于块的处理器核包括:
译码逻辑,被配置为检测所述指令块的断言的加载指令;以及
预取逻辑,被配置为:
接收与所述断言的加载指令相关联的第一值;
使用所接收的第一值来计算所述断言的加载指令的目标地址;以及
针对所计算的目标地址处的数据向所述处理器的存储器层级中的高速缓存发出预取请求。
2.根据权利要求1所述的基于块的处理器核,其中所述第一值由所述指令块的另一指令生成并且以所述断言的加载指令为目标。
3.根据权利要求1或2中任一项所述的基于块的处理器核,其中向所述存储器层级的所述预取请求在所述断言的加载指令的断言被计算之前被发出。
4.根据权利要求1至3中任一项所述的基于块的处理器核,其中所述目标地址是使用所述预取逻辑的专用算术单元而计算的。
5.根据权利要求1至3中任一项所述的基于块的处理器核,其中计算所述目标地址包括在打开指令发出时隙期间并且使用指令执行逻辑的算术单元来执行所述目标地址计算。
6.根据权利要求1至5中任一项所述的基于块的处理器核,其中所述断言的加载指令包括编译器提示字段,并且所述预取逻辑仅在由所述编译器提示字段指示时才发出所述预取请求。
7.根据权利要求1至6中任一项所述的基于块的处理器核,其中向所述存储器层级的非预取请求优先于所述预取请求。
8.根据权利要求1至7中任一项所述的基于块的处理器核,还包括:
唤醒和选择逻辑,被配置为确定与所述断言的加载指令相关联的所述第一值何时就绪并且在所述第一值就绪之后发起所述预取逻辑。
9.一种在包括基于块的处理器核的处理器上执行程序的方法,所述方法包括:
接收包括多个指令的指令块;
确定所述多个指令中的指令是断言的加载指令;以及
在所述断言的加载指令的断言被计算之前,从由所述断言的加载指令作为目标的存储器地址中预取数据。
10.根据权利要求9所述的方法,还包括:
使用被编码在所述断言的加载指令的字段中的第一值和由以所述断言的加载指令为目标的不同的指令或寄存器读取生成的第二值来计算所述存储器地址。
11.根据权利要求9或10中任一项所述的方法,其中计算所述存储器地址包括使用专用算术单元。
12.根据权利要求9或10中任一项所述的方法,其中计算所述存储器地址包括请求访问共享的算术单元并且使用所述共享的算术单元来计算所述存储器地址。
13.根据权利要求9至12中的任一项所述的方法,其中仅当由所述断言的加载指令的预取使能位指示时,所述数据才从所述存储器地址中被预取。
14.一种方法,包括:
接收程序的指令;
将所述指令分组为多个指令块,所述多个指令块目标用于在基于块的处理器上执行;
针对所述多个指令块中的相应指令块:
确定加载指令是否被断言;
将给定的断言的加载指令分类为用于预取的候选或不是用于预取的候选;以及
当所述给定的断言的加载指令被分类为用于预取的候选时,
为所述给定的断言的加载指令启用预取;
发射所述多个指令块以用于由所述基于块的处理器执行;以及
将所发射的多个指令块存储在一个或多个计算机可读存储介质或设备中。
15.根据权利要求14所述的方法,其中对所述给定的断言的加载指令进行分类仅基于所述相应的指令块的指令混合。
CN201680054441.7A 2015-09-19 2016-09-13 与断言的加载指令相关联的预取 Withdrawn CN108027732A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562221003P 2015-09-19 2015-09-19
US62/221,003 2015-09-19
US15/061,370 US20170083338A1 (en) 2015-09-19 2016-03-04 Prefetching associated with predicated load instructions
US15/061,370 2016-03-04
PCT/US2016/051418 WO2017048657A1 (en) 2015-09-19 2016-09-13 Prefetching associated with predicated load instructions

Publications (1)

Publication Number Publication Date
CN108027732A true CN108027732A (zh) 2018-05-11

Family

ID=66000899

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680054441.7A Withdrawn CN108027732A (zh) 2015-09-19 2016-09-13 与断言的加载指令相关联的预取

Country Status (4)

Country Link
US (1) US20170083338A1 (zh)
EP (1) EP3350691A1 (zh)
CN (1) CN108027732A (zh)
WO (1) WO2017048657A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN111737158A (zh) * 2020-08-25 2020-10-02 开立生物医疗科技(武汉)有限公司 一种异常断言的处理方法、装置、电子设备及存储介质
CN112084122A (zh) * 2019-09-30 2020-12-15 海光信息技术股份有限公司 计算机存储器中对区域预取器的置信度和侵略性控制
CN112395000A (zh) * 2019-08-13 2021-02-23 杭州中天微系统有限公司 一种数据预加载方法和指令处理装置
WO2022222494A1 (zh) * 2021-04-19 2022-10-27 苏州苏大维格科技集团股份有限公司 直写光刻数据处理系统和方法

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10936713B2 (en) * 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10754744B2 (en) * 2016-03-15 2020-08-25 Wisconsin Alumni Research Foundation Method of estimating program speed-up in highly parallel architectures using static analysis
TW201935306A (zh) 2018-02-02 2019-09-01 美商多佛微系統公司 用於安全初始化的策略連結及/或載入之系統和方法
KR102453740B1 (ko) 2018-02-02 2022-10-12 더 차레스 스타크 드레이퍼 래보레이토리, 인코포레이티드 정책 실행 처리를 위한 시스템들 및 방법들
TW201945971A (zh) 2018-04-30 2019-12-01 美商多佛微系統公司 用於檢查安全性能的系統和方法
KR102664213B1 (ko) 2018-10-08 2024-05-08 삼성전자주식회사 인-메모리 프리페칭을 수행하는 메모리 장치 및 이를 포함하는 시스템
EP4009183A1 (en) 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
CN111079908B (zh) * 2018-10-18 2024-02-13 上海寒武纪信息科技有限公司 片上网络数据处理方法、存储介质、计算机设备和装置
WO2020097179A1 (en) 2018-11-06 2020-05-14 Dover Microsystems, Inc. Systems and methods for stalling host processor
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
US10956166B2 (en) * 2019-03-08 2021-03-23 Arm Limited Instruction ordering
US11294686B1 (en) * 2021-01-11 2022-04-05 Next Silicon Ltd Optimizing reconfigurable hardware using data sampling
US11599472B1 (en) 2021-09-01 2023-03-07 Micron Technology, Inc. Interleaved cache prefetching

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275918B1 (en) * 1999-03-16 2001-08-14 International Business Machines Corporation Obtaining load target operand pre-fetch address from history table information upon incremented number of access indicator threshold
GB201001621D0 (en) * 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US20130159679A1 (en) * 2011-12-20 2013-06-20 James E. McCormick, Jr. Providing Hint Register Storage For A Processor
US9811341B2 (en) * 2011-12-29 2017-11-07 Intel Corporation Managed instruction cache prefetching
US20160232006A1 (en) * 2015-02-09 2016-08-11 Qualcomm Incorporated Fan out of result of explicit data graph execution instruction
US20170046158A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Determining prefetch instructions based on instruction encoding

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN112395000A (zh) * 2019-08-13 2021-02-23 杭州中天微系统有限公司 一种数据预加载方法和指令处理装置
CN112084122A (zh) * 2019-09-30 2020-12-15 海光信息技术股份有限公司 计算机存储器中对区域预取器的置信度和侵略性控制
CN112084122B (zh) * 2019-09-30 2021-09-28 成都海光微电子技术有限公司 计算机存储器中对区域预取器的置信度和侵略性控制
CN111737158A (zh) * 2020-08-25 2020-10-02 开立生物医疗科技(武汉)有限公司 一种异常断言的处理方法、装置、电子设备及存储介质
WO2022222494A1 (zh) * 2021-04-19 2022-10-27 苏州苏大维格科技集团股份有限公司 直写光刻数据处理系统和方法

Also Published As

Publication number Publication date
WO2017048657A1 (en) 2017-03-23
US20170083338A1 (en) 2017-03-23
EP3350691A1 (en) 2018-07-25

Similar Documents

Publication Publication Date Title
CN108027732A (zh) 与断言的加载指令相关联的预取
CN108027778A (zh) 与断言的存储指令相关联的预取
CN108027766A (zh) 预取指令块
CN108027767A (zh) 寄存器读取/写入排序
CN108027771A (zh) 基于块的处理器核复合寄存器
CN108027807A (zh) 基于块的处理器核拓扑寄存器
CN108027731A (zh) 针对基于块的处理器的调试支持
CN108027769A (zh) 使用寄存器访问指令发起指令块执行
CN108027772A (zh) 用于逻辑处理器的不同的系统寄存器
CN108139913A (zh) 处理器操作的配置模式
CN108027729A (zh) 分段式指令块
CN108027750A (zh) 乱序提交
CN108027773A (zh) 存储器访问指令顺序编码的生成和使用
CN107810480A (zh) 根据性能度量的指令块分配
CN107810479A (zh) 用于处理器控制传送的目标位置的确定
CN109074260A (zh) 乱序的基于块的处理器和指令调度器
CN107810483A (zh) 验证基于块的处理器中的跳转目标
CN108027768A (zh) 指令块地址寄存器
CN107810478A (zh) 具有连续块的并行执行的基于块的架构
CN108027734B (zh) 空指令的动态生成
CN108027730A (zh) 写入无效
CN108027770A (zh) 用于数据流isa的密集读取编码
CN108027733A (zh) 在目标字段中存储无效
CN110249302A (zh) 在处理器核上同时执行多个程序
CN108112269A (zh) 多重无效

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20180511

WW01 Invention patent application withdrawn after publication