CN108027773A - 存储器访问指令顺序编码的生成和使用 - Google Patents

存储器访问指令顺序编码的生成和使用 Download PDF

Info

Publication number
CN108027773A
CN108027773A CN201680054500.0A CN201680054500A CN108027773A CN 108027773 A CN108027773 A CN 108027773A CN 201680054500 A CN201680054500 A CN 201680054500A CN 108027773 A CN108027773 A CN 108027773A
Authority
CN
China
Prior art keywords
instruction
block
memory
storage
data
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.)
Granted
Application number
CN201680054500.0A
Other languages
English (en)
Other versions
CN108027773B (zh
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
Priority to CN202211067382.0A priority Critical patent/CN115390926A/zh
Publication of CN108027773A publication Critical patent/CN108027773A/zh
Application granted granted Critical
Publication of CN108027773B publication Critical patent/CN108027773B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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)(包括显式数据图形执行(EDGE)架构)的代码的方法、装置和计算机可读存储设备。可以分离地或者在相互的各种组合中实施用于例如提高处理器性能和/或减少能量消耗的解决方案的所描述的技术和工具。如以下将被更完全描述的那样,可以在数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,使用可重新配置逻辑在现场可编程门阵列(FPGA)中被实施的多处理器核)、可编程逻辑或者其它适当逻辑电路中实施所描述的技术和工具。如本领域普通技术人员将容易地清楚的那样,可以在各种计算平台(包括但不限于服务器、大型机、蜂窝电话、智能电话、PDA、手持设备、手持计算机、PDA、触屏平板设备、平板计算机、可穿戴计算机和膝上型计算机)中实施所公开的技术。
在所公开的技术的一个示例中,基于块的处理器被配置为基于存储数据的硬件结构来控制存储器访问指令(例如,存储器加载和存储器存储指令)的顺序,该数据指示存储器访问指令的相对排序。在一些示例中,在对指令块译码时生成或者从指令块头部直接地读取并且在硬件结构中存储存储掩码。在一些示例中,存储器访问指令利用指示它们的相对排序的标识符而被编码。在一些示例中,编译器或者解译器将源代码和/或目标代码变换成用于基于块的处理器的可执行代码、包括利用排序标识符和/或存储掩码信息而被编码的存储器访问指令。
提供本发明内容以引入以在具体实施方式中下面进一步描述的简化形式的概念的选择。本发明内容不旨在标识要求保护的主题的关键特征或基本特征,其也不旨在用于限制要求保护的主题的范围。所公开的主题的前述和其他目标、特征以及优点将从参考附图进行的以下具体实施方式变得更加明显。
附图说明
图1图示了如可以在所公开的技术的一些示例中使用的基于块的处理器核。
图2图示了如可以在所公开的技术的一些示例中使用的基于块的处理器核。
图3图示了根据所公开的技术的某些示例的多个指令块。
图4图示了如可以在所公开的技术的一些示例中使用的指令块和源代码的部分。
图5图示了如可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6是图示了在指令块被映射、执行和退休时向它指派的多个状态的状态图。
图7图示了如可以在所公开的技术的一些示例中使用的多个指令块和处理器核。
图8是概述了如可以所在公开的技术的某些示例中执行的、比较加载存储标识符与存储向量的示例方法的流程图。
图9图示了如可以在所公开的技术的某些示例中使用的示例源和汇编代码。
图10图示了如可以在所公开的技术的某些示例中使用的示例控制流图和加载存储标识符。
图11A和图11B图示了如可以在所公开的技术的某些示例中使用的生成经掩码的存储向量的示例。
图12是概述了如可以在所公开的技术的某些示例中执行的、比较加载存储标识符与计数器的另一示例方法的流程图。
图13是包括如可以在所公开的技术的某些示例中使用的多个存储器访问指令和加载存储标识符的控制流图。
图14是概述了如可以在所公开的技术的某些示例中执行的、将源代码和/或目标代码变换成基于块的处理器可执行代码的示例方法的流程图,该基于块的处理器可执行代码包括存储器访问指令的相对排序的指示。
图15是图示用于实现所公开的技术的一些实施例的适合的计算环境的块图。
具体实施方式
I.总体考虑
在未旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开内容。
如在本申请中所使用的,除非上下文清楚地指明,否则单数形式“一”、“一种”和“该”包括复数形式。此外,术语“包括”意味着“包含”。而且,术语“耦合的”涵盖机械的、电的、磁性的、光学的以及将多个项耦合或链接在一起的其他实际方式,并且不排除耦合项之间的中间元件的存在。另外,如在此所使用的,术语“和/或”意味着短语中的任何一项或多项的组合。
在此所描述的***、方法和装置不应当以任何方式被解释为限制性的。相反,本公开涉及彼此单独并且以各种组合和子组合的各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的***、方法和装置既不限于任何特定方面或者特征或者其组合,所公开的内容和方法也不要求任何一个或多个特定优点存在或者问题被解决。此外,所公开的实施例的任何特征或者方面可以彼此以各种组合和子组合被使用。
虽然为了方便呈现而以特定顺序的次序描述所公开的方法中的一些方法的操作,但是应当理解,除非特定排序由下面阐述的特定语言所要求,否则说明书的这种方式涵盖重新布置。例如,顺序地描述的操作可以在一些情况下重新布置或者并行地执行。此外,出于简单的缘故,附图可能未示出所公开的内容和方法可以结合其他内容和方法使用的各种方式。此外,说明书有时使用类似“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是所执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实现而变化并且是由本领域的普通技术人员容易地可辨别的。
参考本公开的装置或者方法在此所呈现的操作理论、科学原理或者其他理论描述已经出于更好的理解的目的而被提供,并且不旨在范围方面是限制性的。所附的权利要求中的装置和方法不限于以由这样的操作理论所描述的方式实现的那些装置和方法。
所公开的方法中的任一方法可以被实现为被存储在一个或多个计算机可读介质(例如,计算机可读介质(诸如一个或多个光学介质光盘、易失性存储器部件(诸如DRAM或SRAM))或非易失性存储器部件(诸如硬盘驱动器))上并且被执行在计算机(例如,任何商业可获得的计算机,包括智能电话或者包括计算硬件的其他移动设备)上的计算机可执行指令。用于实现所公开的技术的计算机可执行指令中的任一指令以及在所公开的实施例的实现期间创建和使用的任何数据可以被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由网络浏览器或者其他软件应用(诸如远程计算应用)访问或者下载的软件应用的一部分。这样的软件可以例如在单个本地计算机(例如,具有在任何适合的商业可获得的计算机上执行的通用和/或基于块的处理器)上被执行,或者在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)、或者其他这样的网络)中被执行。
为了清晰起见,描述了基于软件的实现的仅某些所选的方面。省略了在本领域中众所周知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或者程序。例如,所公开的技术可以通过以C、C++、JAVA或者任何其他适合的编程语言来实现。同样地,所公开的技术不限于任何特定计算机或者硬件类型。适合的计算机和硬件的某些细节是众所周知的并且不需要在本公开中被详细阐述。
此外,基于软件的实施例(包括例如用于使得计算机执行所公开的方法中的任一方法的计算机可执行指令)中的任一实施例可以通过适合的通信手段被上载、被下载或者被远程访问。这样的适合的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或者其他这样的通信手段。
II.对所公开的技术的介绍
超标量乱序微架构采用大量的电路资源来重命名寄存器,以数据流次序调度指令,在误推测之后清理,并且针对精确异常引退结果。这包括昂贵的电路,诸如深的许多端口的寄存器文件、用于数据流指令调度唤醒的许多端口的内容可访问存储器(CAM)、以及许多宽总线复用器和旁路网络,所有的这些都是资源密集的。例如,多读取、多写入RAM的基于FPGA的实现通常要求复制、多循环操作、时钟加倍、组交错、实况值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令级别并行(ILP)、乱序(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之外的另一集成电路上的存储器)的接口逻辑。外部存储器***150包括L2高速缓存152和主存储器155。在一些示例中,可以使用静态RAM(SRAM)来实施L2高速缓存,并且可以使用动态RAM(DRAM)来实施主存储器155。在一些示例中,在与处理器100的其它部件相同的集成电路上包括存储器***150。在一些示例中,存储器接口140包括允许传送存储器中的数据的块而没有使用寄存器文件和/或处理器100的直接存储器访问(DMA)控制器。在一些示例中,存储器接口管理虚拟存储器的分配,从而扩展可用主存储器155。
I/O接口145包括用于将输入信号和输出信号接收并且发送到其他部件的电路,诸如硬件中断、***控制信号、***接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、物理处理单元、数字信号处理器或者其他协处理部件的信号)、时钟信号、信号量或者其他适合的I/O信号。I/O信号可以是同步的或者异步的。在一些示例中,I/O接口的全部或部分结合存储器接口140使用存储器映射的I/O技术被实现。
基于块的处理器100也可以包括控制单元160。控制单元160监督处理器100的操作。可以由控制单元160执行的操作可以包括用于执行指令处理的代码的分配和取消分配、对在核、寄存器文件、存储器接口140和/或I/O接口145中的任何部件之间的输入数据和输出数据的控制、对执行流程的修改以及验证分支指令、指令头部以及控制流中的其它改变的目标位置。控制单元160可以根据控制流和元数据信息来生成和控制处理器,该元数据信息代表用于指令块的退出点和控制流概率。
控制单元160也可以处理硬件中断,以及控制特殊***寄存器(例如,被存储在一个或者多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的一些示例中,至少部分地使用处理核110中的一个或者多个处理核来实施控制单元160,而在其它示例中,使用非基于块的处理核(例如,被耦合到存储器的通用RISC处理核)来实施控制单元160。在一些示例中,至少部分使用以下各项中的一项或者多项来实施控制单元160:硬接线有限状态机、可编程微代码、可编程门阵列或者其它适当控制电路。在备选示例中,控制单元功能可以由核110中的一个或者多个核执行。
控制单元160包括被用来向处理器核110分配指令块的调度器165。如这里所用,调度器分配是指指引指令块的操作,包括发起指令块映射、取读、译码、执行、提交、放弃、空闲和刷新指令块。在指令块映射期间,向指令块指派处理器核110。指令操作的记载的阶段是为了说明目的,并且在所公开的技术的一些示例中,可以组合某些操作、省略某些操作、将某些操作分离成多个操作或者添加附加操作。调度器165调度指令的流程、包括用于执行指令处理的核的分配和取消分配、对在核、寄存器文件、存储器接口140和/或I/O接口145中的任何部件之间的输入数据和输出数据的控制。控制单元160也可以被用来如以下进一步具体讨论的那样存储包括存储掩码和存储向量寄存器的数据的存储器访问指令硬件结构167。
基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分布到处理器内的各种部件(例如,核110、互连120、存储器接口140和I/O接口145)。在所公开的技术的一些示例中,所有部件共享共同时钟,而在其他示例中,不同的部件使用不同的时钟(例如,具有不同的时钟频率的时钟信号)。在一些示例中,时钟的一部分被选通以在处理器部件中的一些部件未被使用时允许功率节省。在一些示例中,时钟信号使用锁相环(PLL)被生成以生成具有固定的恒定频率和占空比的信号。接收时钟信号的电路可以在单个边沿(例如,上升沿)上被触发,而在其他示例中,接收电路中的至少一些电路通过上升和下降时钟沿而被触发。在一些示例中,时钟信号可以光学地或无线地被传输。
IV.示例基于块的处理器核
图2是进一步具体描述如可以在所公开的技术的某些示例中使用的、用于基于块的处理器100的示例微架构并且特别地为基于块的处理器核中的一个核的实例的框图。为了易于说明,利用五个阶段来图示示例性基于块的处理器核:指令取读(IF)、译码(DC)、操作数取读、执行(EX)和存储器/数据访问(LS)。然而,本领域普通技术人员将容易地理解,可以修改所图示的微结构(比如添加/去除阶段、添加/去除执行操作的单元和其它实施细节)以适合用于基于块的处理器的特定应用。
如图2中所示,处理器核111包括控制单元205,控制单元205生成用于调节核操作的控制信号并且使用指令调度器206来调度核内的指令流。可以由控制单元205和/或指令调度器206执行的操作可以包括生成和使用存储器访问指令编码、用于执行指令处理的核的分配和取消分配、对在核、寄存器文件、存储器接口140和/或I/O接口145中的任何部件之间的输入数据和输出数据的控制。控制单元也可以控制被用来确定指令发出的速率和顺序的加载-存储队列、调度器、全局控制单元、其它单元或者这些单元的组合。
在一些示例中,使用被耦合到存储器的通用处理器来实施指令调度器206,该存储器被配置为存储用于调度指令块的数据。在一些示例中,使用专用处理器或者使用被耦合到存储器的基于块的处理器核来实施指令调度器206。在一些示例中,指令调度器206被实施为被耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或者基于块的处理器核)上执行的操作***生成可以至少部分被用来利用指令调度器206调度指令块的优先级、预测和其它数据。如本领域普通技术人员将容易地清楚的那样,在集成电路、可编程逻辑或者其它适当逻辑中被实施的其它电路结构可以被用来实施用于指令调度器206的硬件。
控制单元205还包括用于存储控制流信息和元数据的存储器(例如,在SRAM或者寄存器中)。例如,可以在硬件结构(比如存储指令数据存储库207)中存储用于存储器访问指令顺序的数据。存储指令数据存储库207可以存储用于存储掩码的数据(例如,通过复制被编码在指令块中的数据或者由指令译码器在对指令译码时被生成)、存储向量寄存器(例如,存储数据,该数据指示哪些和什么类型的存储器访问指令已经执行)和经掩码的存储向量寄存器数据(例如,通过向存储向量寄存器应用存储掩码而被生成的数据)。在一些示例中,存储指令数据存储库20包括计数器,该计数器跟踪已经执行的存储器访问指令的数目和类型。
控制单元205也可以处理硬件中断以及控制特殊***寄存器(例如,被存储在一个或者多个寄存器文件)中的程序计数器的读取和写入。在所公开的技术的其它示例中,使用非基于块的处理核(例如,被耦合到存储器的通用RISC处理核)来实施控制单元205和/或指令调度器206。在一些示例中,至少部分使用以下各项中的一项或者多项来实施控制单元205和/或指令调度器206:硬接线的有限状态机、可编程微代码、可编程门阵列或者其它适当的控制电路。
示例性处理器核111包括两个指令窗口210和211,每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是基于块的处理器指令的原子汇集,该原子汇集包括指令块头部和一个或者多个指令的多个指令。如以下将进一步讨论的那样,指令块头部包括可以被用来进一步定义指令块内的多个指令中的一个或者多个指令的语义的信息。取决于被使用的特定ISA和处理器硬件,指令块头部可以在指令的执行期间被用来例如通过允许早期取读指令和/或数据、提高的分支预测、推测执行、提高的能量效率和提高的代码紧凑来提高执行指令块的性能。在其它示例中,不同数目的指令窗口是有可能的,比如一个、四个、八个或者其它数目的指令窗口。
指令窗口210和211中的每个指令窗口可以从连接到互连总线和指令高速缓存227的输入端口220、221和222中的一个或者多个输入端口接收指令和数据,互连总线和指令高速缓存227转而被连接到指令译码器228和229。也可以在附加输入端口225上接收附加控制信号。指令译码器228和229中的每个指令译码器译码用于指令块的指令头部和/或指令,并且在位于每个相应指令窗口210和211中的存储器存储库215和216内存储译码的指令。另外,译码器228和229中的每个译码器可以向控制单元205发送数据以例如根据在指令块头部中或者在指令中被指定的执行标志来配置处理器核111的操作。
处理器核111还包括被耦合到L1(级别一)高速缓存235的寄存器文件230。寄存器文件230存储用于被定义在基于块的处理器架构中的寄存器的数据,并且可以具有一个或者多个读取端口和一个或者多个写入端口。例如,寄存器文件可以包括用于在寄存器文件中存储数据的两个或者更多个写入端口以及具有用于从寄存器文件内的个别寄存器读取数据的多个读取端口。在一些示例中,单个指令窗口(例如,指令窗口210)可以一次访问寄存器文件的仅一个端口,而在其它示例中,指令窗口210可以同时访问一个读取端口和一个写入端口或者可以同时访问两个或者更多个读取端口和/或写入端口。在一些示例中,寄存器文件230可以包括64个寄存器,每个寄存器保持32位数据的字。(为了便于说明,本申请将把32位数据称为字,除非另有指定。根据所公开的技术的适当处理器可以用8、16、64、128、256位或者另一位数的字操作)在一些示例中,可以向特殊目的分配寄存器文件230内的寄存器中的一些寄存器。例如,寄存器中的一些寄存器可以被专用作为***寄存器,***寄存器的示例包括存储恒定值(例如,全零字)的寄存器、指示正被执行的程序线程的当前地址的程序计数器(PC)、物理核数、逻辑核数、核指派拓扑、核控制标志、执行标志、处理器拓扑或者其它适当专用目的。在一些示例中,存在多个程序计数器寄存器、一个或者每个程序计数器、以允许跨一个或者多个处理器核和/或处理器并行执行多个执行线程。在一些示例中,程序计数器被实施为指明的存储器位置而不是作为寄存器文件中的寄存器。在一些示例中,对***寄存器的使用可以受操作***或者其它监督计数器指令限制。在一些示例中,寄存器文件230被实施为触发器阵列,而在其它示例中,可以使用锁存器、SRAM或者其它存储器存储的形式来实施寄存器文件。用于给定的处理器(例如,处理器100)的ISA规范指定如何定义和使用寄存器文件230内的寄存器。
在一些示例中,处理器100包括由多个处理器核共享的全局寄存器文件。在一些示例中,与处理器核相关联的个体寄存器文件可以被组合以静态地或者动态地形成较大的文件,这取决于处理器ISA和配置。
如图2中所示,指令窗口210的存储器存储库215包括多个译码的指令241、左操作数(LOP)缓冲器242、右操作数(ROP)缓冲器243、断言缓冲器244、三个广播信道245和指令计分板247。在所公开的技术的一些示例中,如图2中所示将指令块的每个指令分解成一行译码的指令、左操作数和右操作数以及计分板数据。译码的指令241可以包括被存储为位级控制信号的指令的部分或者完全译码的版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收的寄存器值、从存储器接收的数据、被编码在指令内的立即操作数、通过更早发出的指令计算的操作数或者其它操作数值),直至它们的相应的译码的指令准备好执行。分别从操作数缓冲器242和243以及断言缓冲器244而不是寄存器文件读取指令操作数和断言。指令计分板245可以包括用于涉及指令的断言的缓冲器,包括用于组合由多个指令向指令发送的断言的接线OR逻辑。
第二指令窗口211的存储器存储库216将相似指令信息(译码的指令、操作数和计分板)存储为存储器存储库215、但是为了简化而没有在图2中被示出。指令块可以关于第一指令窗口被并行地或者依次地、受ISA约束并且如由控制单元205指引的那样由第二指令窗口211执行。
在所公开的技术的一些示例中,前端流水线级IF和DC可以与后端流水线级(IS、EX、LS)去耦合运行。控制单元可以每时钟周期取读两个指令并且将指令译码到指令窗口210和211中的每个指令窗口中。控制单元205提供用以使用计分板245来监视每个译码的指令的输入的就绪状态(例如,每个相应的指令的断言和操作数)的指令窗口数据流调度逻辑。在用于特定的译码的指令的所有输入操作数和断言准备就绪时,指令被准备就绪发出。控制单元205然后发起每周期执行(发出)一个或者多个接下来的指令(例如,最低编号的就绪指令)和基于译码的指令的控制信号而且向功能单元260中的一个或者多个功能单元发送指令的输入操作数以用于执行。译码的指令也可以对多个就绪事件编码。控制单元205中的调度器从其它来源接受这些和/或其它事件,并且更新窗口中的其它指令的就绪状态。因此,执行从处理器核111的就绪零输入指令、作为零输入指令的目标的指令等等开始继续。
译码的指令241无需按它们在指令窗口210的存储器存储库215内被排列的相同顺序执行。实际上,指令计分板245被用来跟踪译码的指令的依赖性,并且在已经满足依赖性时,调度关联的个别的译码的指令以用于执行。例如,可以在对于相应的指令已经满足依赖性时将对相应的指令的引用推送到就绪队列上,并且可以按先入先出(FIFO)顺序从就绪队列调度就绪指令。对于利用加载存储标识符(LSID)而被编码的指令,指令顺序也将遵循在指令LSID中被枚举的或者按表现如同按指定的顺序执行指令那样的顺序执行的优先级。
被存储在计分板245中的信息可以包括但不限于关联的指令的执行断言(比如指令是否正等待计算断言位和是否如果断言位为真或者假则指令执行)、操作数对指令的可用性或者在发出和执行关联的个别指令之前需要的其它前提。被存储在每个指令窗口中的指令的数目一般地对应于指令块内的指令的数目。在一些示例中,在允许向更大数目的指令发送相同操作数或者断言的一个或者多个广播信道上接收操作数和/或断言。在一些示例中,指令块内的指令的数目可以是32、64、128、1024或者另一指令数目。在所公开的技术的一些示例中,在处理器核内跨多个指令窗口分配指令块。可以根据指定一个或者多个操作模式的数据控制乱序操作和存储器访问。
在一些示例中,对处理器施加限制(例如,根据架构定义或者按照处理器的可编程配置)以静止未按指令在指令块中被排列的依次顺序执行指令。在一些示例中,可用的最低编号的指令被配置为待执行的下一指令。在一些示例中,控制逻辑遍历指令块中的指令并且执行准备就绪执行的下一指令。在一些示例中,一次仅一个指令可以发出和/或执行。在一些示例中,指令块内的指令按确定性顺序(例如,指令在块中被排列的顺序)发出和执行。在一些示例中,可以在使用软件调试器时或者由用户调试在基于块的处理器上执行的程序来配置对指令排序的限制。
可以使用位于处理器核111内的控制单元205来分配和调度指令。控制单元205编排指令从存储器对方取读、指令的译码、一旦指令已经被加载到相应的指令窗口中就对它们的执行、处理器核111的数据流入/流出以及由处理器核输入和输出的控制信号。例如,控制单元205可以包括如以上描述的用于在调度指令中使用的就绪队列。可以原子地执行被存储在位于每个相应的指令窗口210和211中的存储器存储库215和216中的指令。因此,可以在核200内本地缓冲对受执行的指令影响的可见架构状态(比如寄存器文件230和存储器)的更新,直至提交指令。控制单元205可以确定指令何时准备就绪被提交、对提交逻辑定序并且发出提交信号。例如,用于指令块的提交阶段可以在缓冲所有寄存器写入、缓冲向存储器的所有写入和计算分支目标时开始。可以在对可见架构状态的更新完成时提交指令块。例如,可以在向寄存器文件写入寄存器写入、向加载/存储单元或者存储器控制器发送存储库和生成提交信号时提交指令块。控制单元205也至少部分控制功能单元260向相应的指令窗口中的每个指令窗口的分配。
如图2中所示,具有多个执行流水线寄存器255的第一路由器250被用来从指令窗口210和211中的任一指令窗口向功能单元260中的一个或者多个功能单元发送数据,这些功能单元可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU 267)、移位/旋转逻辑(例如,桶形移位器268)或者其它适当执行单元,这些执行单元可以包括图形功能、物理学功能和其它数学操作。第一路由器250还包括被用来确定何时向加载/存储队列275发送存储器指令的唤醒/选择逻辑258。例如,唤醒/选择逻辑258可以确定是否所有源操作数和断言条件句可用于存储器访问指令并且基于确定来向加载/存储队列275发送地址(和如果可适用则数据)。
来自功能单元260的数据然后可以取决于正被执行的特定指令的要求,通过第二路由器270被路由到输出290、291和292,路由回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243)或者被反馈到另一功能单元。第二路由器270包括可以被用来发出存储器指令的加载/存储队列275、存储正向核被输入或者从核向存储器被输出的数据的数据高速缓存277和加载/存储流水线寄存器278。
加载/存储队列275接收并且暂时地存储用于执行存储器访问指令的信息。指令块可以作为单个原子事务块执行所有存储器访问指令。换而言之,执行存储器访问指令的全部或者都不执行。基于与每个存储器访问指令关联的LSID(例如,利用对应指令而被编码的LSID)和在一些情况下的存储掩码确定存储器访问指令的相对顺序。在一些示例中,可以通过未按LSID指定的相对排序执行存储器访问来获得附加性能,但是存储器的状态必须仍然表现如同按顺序执行指令。加载/存储队列275也接收用于加载指令的地址以及用于存储指令的地址和数据。在一些示例中,加载/存储队列等待执行排队的存储器访问指令,直至确定包含的指令块将实际地提交。在其它示例中,加载/存储队列275可以推测地发出至少一些存储器访问指令,但是将需要在块没有提交的情况下冲刷存储器操作。在其它示例中,控制单元205通过提供被描述为由唤醒/选择逻辑和/或加载/存储队列275执行的功能来确定存储器访问指令被执行的顺序。在一些示例中,处理器100包括允许借助调试器允许逐步发出存储器访问指令的调试模式。可以使用控制逻辑(例如,利用有限状态机)和存储器(例如,寄存器或者SRAM)来实施加载/存储队列275以分别执行存储器事务和存储存储器指令操作数。
核还包括控制输出295,其用于指示例如指令窗口210或者211中的一个或多个指令窗口的所有指令的执行何时已经完成。当指令块的执行完成时,指令块被指定为“提交的”并且来自控制输出295的信号可以进而可以由基于块的处理器100内的其他核和/或由控制单元160用于发起其他指令块的调度、取指和执行。第一路由器250和第二路由器270二者可以将数据发送回到指令(例如,作为用于指令块内的其他指令的操作数)。
如本领域的普通技术人员将容易理解到,个体核200内的部件不限于图2中所示的那些部件,而是可以根据特定应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以由两个或两个以上指令窗口共享,并且所使用的功能单元的数目和类型可以取决于用于基于块的处理器的特定目标应用而变化。在利用指令核选择并且分配资源时应用的其他考虑包括性能要求、能量使用要求、集成电路芯片、处理技术和/或成本。
对于本领域的普通技术人员而言将容易明显的,可以通过处理器核110的指令窗口(例如,指令窗口210)和控制单元205内的资源的设计和分配来在处理器性能中做出折中。面积、时钟周期、能力和限制实质上确定个体核110的实现性能和基于块的处理器100的吞吐量。
指令调度器206可以具有不同的功能。在某些较高的性能示例中,指令调度器是高并发的。例如,每个周期(一个或多个)译码器将指令的译码就绪状态和译码指令写入到一个或多个指令窗口中,选择要发出的下一个指令,并且作为响应后端发送第二就绪事件——以特定指令的输入槽(断言、左操作数、右操作数等)为目标的任一目标就绪事件或者以所有指令为目标的广播就绪事件。每指令就绪状态位连同译码就绪状态可以用于确定指令准备好发出。
在一些情况下,调度器206接受用于尚未被译码的目标指令的事件,并且也必须禁止重新发出已发出的就绪指令。在一些示例中,指令可以是未断言的或者已断言的(基于真或者假条件)。断言的指令直至另一指令的断言结果以它为目标并且该结果匹配断言条件才变成就绪。如果关联的断言条件不匹配,则指令从未发出。在一些示例中,可以推测地发出和执行断言的指令。在一些示例中,处理器可以随后检查推测地发出和执行的指令被正确地推测。在一些示例中,可以重新执行误推测的发出的指令和对在消耗它的输出的块中的指令的具体过渡关闭,或者取消误推测的副作用。在一些示例中,对误推测的指令的发现造成完全回退和重新执行指令的整个块。在一些示例中,调度器执行被描述为由以上讨论的唤醒/选择逻辑和/或加载/存储队列执行的操作中的一些或者所有操作。
在分支到新指令块时,清除相应的指令窗口就绪状态(块重置)。然而,在指令块分支回到本身(块刷新)时,仅清除活跃就绪状态。因此可以保留用于指令块的译码的就绪状态,从而使得没有必要对块的指令重新取读和译码。因此,块刷新可以被用来节省循环中的时间和能量。
V.指令块的示例流
现在转向图3的图300,图示了基于块的指令的流的部分310,包括多个长度可变指令块313-314。指令流可以被用来实施用户应用、***服务或者任何其它适当使用。可以在存储器中存储、从存储器中的另一进程、通过网络连接接收或者以任何其它适当方式存储或者接收指令流。在图3中所示的示例中,每个指令块始于跟随有可变数目的指令的指令头部。例如,指令块311包括头部320和二十个指令321。所示的特定指令头部320包括多个数据字段,这些数据字段部分控制对指令块内的指令的执行,并且也允许提高性能的增强技术,例如,包括分支预测、推测执行、懒惰评估和/或其它技术。指令头部320也包括指令块大小的指示。指令块大小可以在大于一个指令的组块中,例如,在指令块内包含指令数目为4的组块。换而言之,块的大小被移位4位以便将分配的头部空间压缩成指定指令块大小。因此,大小值0指示最小大小的指令块,该指令块是跟随有四个指令的块头部。在一些示例中,指令块大小被表达为字节数、为字数、为n字组块数、为地址、为地址偏移或者使用用于描述指令块大小的其它适当表达。在一些示例中,指令块大小由指令块头部和/或脚注中的终结位模式指示。
指令块头部320也可以包括指示用于执行指令块的一个或者多个操作模式的一个或者多个执行标志。例如,操作模式可以包括核融合操作、向量模式操作、存储器依赖性预测和/或按顺序或者确定性的指令执行。
在所公开的技术的一些示例中,指令头部320包括指示编码的数据是指令头部的一个或者多个标识位。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设置成二进制值1以指示有效指令块的开始。在其它示例中,不同位编码可以被用于标识位。在一些示例中,指令头部320包括如下信息,该信息指示关联的指令块针对其被编码的ISA的特定版本。
块指令头部也可以包括用于在例如分支预测、控制流确定和/或分支处理中使用的多个块退出类型。退出类型可以指示分支指令类型是什么,例如:依次分支指令,其指向存储器中的下一连续指令块;偏移指令,其分支到在相对于偏移而被计算的存储器地址处的另一指令块;子例程调用;或者子例程返回。通过对指令头部中的分支退出类型编码,分支预测器可以至少部分地在已经对相同指令块内的分支指令取读和/或译码之前开始操作。
所示指令块头部320也包括存储掩码,该存储掩码指示向存储操作指派被编码在块指令中的加载-存储队列标识符中的哪些加载-存储队列标识符。例如,对于具有八个存储器访问指令的块,存储掩码01011011将指示存在三个存储器存储指令(与LSID 0、2和5对应的位0)和五个存储器加载指令(与LSID 1、3、4、6和7对应的位1)。指令块头部也可以包括写入掩码,该写入掩码标识关联的指令块将写入哪个(些)全局寄存器。在一些示例中,存储掩码例如由指令译码器(例如,译码器228或者229)存储在存储向量寄存器中。在其它示例中,指令块头部320没有包括存储掩码,但是指令译码器通过在指令块被译码时分析指令依赖性来动态地生成存储掩码。例如,译码器可以分析指令块指令的加载存储标识符以确定存储掩码,并且在存储向量寄存器中存储该存储掩码。相似地,在其它示例中,没有在指令块头部中编码、但是动态地生成(例如,通过由指令译码器分析由指令块中的指令引用的寄存器)并且在写入掩码寄存器中存储写入掩码。存储掩码和写入掩码可以被用来确定指令块的执行何时已经完成并且因此发起指令块的提交。关联的寄存器文件必须在指令块可以完成之前接收向每个条目的写入。在一些示例中,基于块的处理器架构可以不仅包括标量指令而且包括允许在单个指令内利用更大数目的数据操作数的操作的单指令多数据(SIMD)指令。
可以被用于指令321的适当的基于块的指令的示例可以包括用于执行整数和浮点算术、逻辑操作、类型转换、寄存器读取和写入、存储器加载和存储、分支和跳转的执行以及其它适当处理器指令的指令。在一些示例中,指令包括用于配置处理器以例如通过基于被存储在硬件结构(比如存储指令数据存储库207)中的关于存储器访问指令的控制流和数据的推测执行、根据操作中的一个或者多个操作来操作的指令。在一些示例中,存储指令数据存储库207不是架构可见的。在一些示例中,对存储指令数据存储库207的访问被配置为限于处理器的监督模式或者其它受保护模式中的处理器操作。
VI.示例块指令目标编码
图4是描绘C语言源代码的两个部分410和415及其相应的指令块420和425的示例的示图400,该示图图示了基于块的指令如何可以对它们的目标显式地编码。在这一示例中,前两个READ指令430和431分别以ADD指令432的右(T[2R])操作数和左(T[2L])操作数为目标(2R指示以指令编号2的右操作数为目标;2L以指令编号2的左操作数为目标)。在所图示的ISA中,读取指令是从全局寄存器文件(例如,寄存器文件230)进行读取的指令;然而,任何指令可以以全局寄存器文件为目标。在ADD指令432接收两个寄存器读取的结果时,它将变成就绪并且执行。注意,本公开内容有时将右操作数称为OP0并且将左操作数称为OP1。
在TLEI(少于相等立即的测试)指令433从ADD接收它的单个输入操作数时,它将变成准备就绪发出和执行。测试然后产生在信道一(B[1P])上向在广播信道上侦听断言的所有指令广播的断言操作数,这些指令在这一示例中是两个断言的分支指令(BRO_T 434和BRO_F 435)。接收匹配断言的分支指令将激发(执行),但是利用断言的补码被编码的另一指令不会激发/执行。
用于指令块420的依赖性图形440也被图示为指令节点阵列450及其对应的操作数目标455和456。这图示了在块指令420、对应的指令窗口条目和由指令表示的下层数据流图形之间的对应。这里,译码的指令READ 430和READ 431准备就绪发出,因为它们没有输入依赖性。随着它们发出和执行,向ADD 432的右操作数和左操作数和缓冲器中写入从寄存器R0和R7读取的值,从而将ADD 432的左操作数和右操作数标记“就绪”。作为结果,ADD 432指令变成就绪、向ALU发出、执行,并且向TLEI指令433的左操作数写入求和。
VII.示例的基于块的指令格式
图5是图示了用于指令头部510、通用指令520、分支指令530和存储器访问指令540(例如,存储器加载或者存储指令)的指令格式的广义示例的示图。指令格式可以被用于根据在指定操作模式的指令头部中被指定的多个执行标志而被执行的指令块。根据位数标注指令头部或者指令中的每个指令头部或者指令。例如,指令头部510包括四个32位字并且从它的最低有效位(lsb)(位0)被标注上至它的最高有效位(msb)(位127)。如所示,指令头部包括写入掩码字段、存储掩码字段515、多个退出类型字段、多个执行标志字段、指令块大小字段和指令头部ID位(指令头部的最低有效位)。在一些示例中,存储掩码字段515被LSID计数517替换或者补充,该LSID计数指示指令块的每个断言路径上的存储指令的数目。对于在不同断言路径上具有不同数目的存储指令的指令块,可以使一个或者多个指令无效,并且递增执行的存储指令计数,从而使得每个断言路径将指示相同数目的存储指令已经在运行时间执行。在一些示例中,头部510没有指示LSID计数或者存储掩码,但是指令译码器基于被编码在个别存储指令中的LSID动态地生成信息。
在图5中描绘的执行标志字段占用指令块头部510的位6至13并且指示用于执行指令块的一个或者多个操作模式。例如,操作模式可以包括核融合操作、向量模式操作、分支预测器禁止、存储器依赖性预测器禁止、块同步、在块之后间断、在块之前间断、块失败和/或按顺序或者确定性的指令执行。
退出类型字段包括可以被用来指示被编码在指令块内的控制流指令类型的数据。例如,退出类型字段可以指示指令块包括以下各项中的一项或者多项:依次分支指令、偏移分支指令、间接分支指令、调用指令和/或返回指令。在一些示例中,分支指令可以是用于在指令块之间传送控制流(包括相对和/或绝对地址和使用条件或者无条件断言)的任何控制流指令。退出类型字段除了确定隐式控制流指令之外还可以被用于分支预测和推测执行。
所图示的通用块指令520被存储为一个32位字并且包括操作码字段、断言字段、广播ID字段(BID)、向量操作字段(V)、单指令多数据(SIMD)字段、第一目标字段(T1)和第二目标字段(T2)。对于具有比目标字段更多的消耗者的指令,编译器可以使用移动指令来构建扇出树,或者它可以向广播指派高扇出指令。广播支持通过轻量级网络向核中的任何数目的消耗者指令发送操作数。
尽管由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或者所有指令,但是本领域技术人员将容易地理解,即使对于ISA的特定示例,指令字段中的一个或者多个指令字段也可以从用于特定指令的通用格式偏离。操作码字段指定由指令520执行的操作,比如存储器读取/写入、寄存器加载/存储、添加、减去、乘以、除以、移位、旋转、***操作或者其它适当指令。断言字段指定指令将在其之下执行的条件。例如,断言字段可以指定值“真”,并且仅如果对应的条件标志匹配指定的断言值,则指令才会执行。在一些实施例中,断言字段至少部分指定哪个被用来比较断言,而在其它示例中,对由先前指令(例如,指令块中的在前指令)设置的标志断言执行。在一些示例中,断言字段可以指定指令将总是或者从未被执行。因此,对断言字段的使用可以通过减少被译码和执行的分支指令的数目来允许更密集目标代码、提高的能量效率和提高的处理器性能。
目标字段T1和T2指定基于块的指令的结果被发送到的指令。例如,在指令时隙5处的ADD指令可以指定它的计算的结果将被发送给在时隙3和10处的指令,包括对操作数时隙(例如,左操作、右操作或者断言操作数)的指定。取决于特定指令和ISA,所图示的目标字段之一或者二者可以被其它信息替换,例如,第一目标字段T1可以被立即操作数、附加操作码、指定两个目标等替换。
分支指令530包括操作码字段、断言字段、广播ID字段(BID)和偏移字段。操作码和断言字段在格式和功能上与关于通用指令而被描述的相似。可以以四个指令的组为单位来表达偏移,并且因此延伸分支可以在其上被执行的存储器地址范围。利用通用指令520和分支指令530而被示出的断言可以倍用来避免指令块内的附加分支转移。例如,可以对先前指令(例如,比较两个操作数)的结果断言特定指令的执行。如果断言为假,则指令将不会提交由特定指令计算的值。如果断言值没有匹配要求的断言,则指令没有发出。例如,BRO_F(断言的假)指令如果它被发送假断言值则将发出。
应当容易理解到,如在此所使用的,术语“分支指令”不限于将程序执行改变到相对存储器位置,而且包括跳跃到绝对或者符号存储器位置、子例程调用和返回,以及可以修改执行流的其他指令。在一些示例中,通过改变***寄存器(例如,程序计数器PC或者指令指针)的值来修改执行流,而在其他示例中,可以通过修改被存储在存储器中的指定位置处的值来改变执行流。在一些示例中,跳跃寄存器分支指令用于跳跃到被存储在寄存器中的存储器位置。在一些示例中,分别使用跳跃和链接以及跳跃寄存器指令来实现子例程调用和返回。
存储器访问指令540格式包括操作码字段、断言字段、广播ID字段(BID)、加载存储ID字段(LSID)、立即字段(IMM)偏移字段和目标字段。操作码、广播、断言字段在格式和功能上与关于通用指令而被描述的相似。例如,可以对先前指令(例如,比较两个操作数)的结果断言特定指令的执行。如果断言为假,则指令将不会提交由特定指令计算的值。如果断言值没有匹配要求的断言,则指令没有发出。立即字段(例如,和移位的位数)可以被用作用于向加载或者存储质量发送的操作数的偏移。操作数加(已移位)立即偏移被用作用于加载/存储指令的存储器地址(例如,用于在存储器中从其读取数据或者向其存储数据的地址)。LSID字段指定用于块内的加载和存储指令的相对顺序。换而言之,更高编号的LSID指示指令应当在更低编号的LSID之后执行。在一些示例中,处理器可以确定两个加载/存储指令没有冲突(例如,基于用于指令的读取/写入地址)并且可以按不同顺序执行指令,尽管机器的所得状态不应不同于如果指令已经按指明的LSID排序执行。在一些示例中,具有互斥断言值的加载/存储指令可以使用相同LSID值。例如,如果对值p为真断言第一加载/存储指令并且对值p为假断言第二加载/存储指令,则每个指令可以具有相同LSID值。
VIII.示例处理器状态图
图6是图示了在指令块被映射、执行和退休时被向它指派的多个状态的状态图600。例如,可以在根据一个或者多个执行标志对指令的执行期间指派状态中的一个或者多个状态。应当容易地理解,图6中所示的状态用于所公开的技术的一个示例,但是在其它示例中,指令块可以具有附加或者更少状态,以及具有与在状态图600中描绘的状态不同的状态。在状态605处,对指令块取消映射。指令块可以驻留在被耦合到基于块的处理器的存储器中、存储在计算机可读存储设备(比如硬驱动或者闪存驱动)上并且可以在处理器本地或者位于远程服务器并且使用计算机网络可访问。取消映射的指令也可以至少部分地驻留在被耦合到基于块的处理器的高速缓存存储器中。
在指令块映射状态610处,用于基于块的处理器的控制逻辑(比如指令调度器)可以被用来监视基于块的处理器的处理核资源并且将指令块映射到处理核中的一个或者多个处理核。
控制单元可以将指令块中的一个或者多个指令块映射到处理器核和/或特定处理器核的指令窗口。在一些示例中,控制单元监视先前已经执行了特定指令块的处理器核并且可以重新使用译码的指令以用于仍然驻留在“预热的”处理器核上的指令块。一旦一个或者多个指令块已经被映射到处理器核,则指令块可以前进到取读状态620。
当指令块在取读状态620(例如,指令取读)中时,映射的处理器核从基于块的处理器的存储器***取读计算机可读块指令并且将它们加载到与特定处理器核关联的存储器中。例如,可以取读并且在处理器核内的指令高速缓存中存储用于指令块的取读的指令。可以使用核互连向处理器核传达指令。一旦已经取读了指令块的至少一个指令,指令块就可以进入指令译码状态630。
在指令译码状态630期间,将取读的指令的各种位译码成可以由处理器核用来控制特定指令的执行的信号。例如,可以在以上在图2中示出的存储器存储库215或者216之一中存储译码的指令。译码包括生成用于译码的指令的依赖性、用于译码的指令的操作数信息和用于译码的指令的目标。一旦指令块的至少一个指令已经被译码,指令块就可以前进到执行状态640。
在执行状态640期间,例如使用如以上关于图2而被讨论的功能单元260来执行与指令关联的操作。如以上讨论的那样,执行的功能可以包括算术功能、逻辑功能、分支指令、存储器操作和寄存器操作。与处理器核关联的控制逻辑监视指令块的执行,并且一旦确定可以提交指令块或者将放弃指令块,指令块状态就被设置成提交/放弃650。在一些示例中,控制逻辑使用用于指令块的写入掩码和/或存储掩码以确定执行是否已经充分地进行以提交指令块。执行的存储器访问指令向用于访问存储器的加载/存储队列发送数据和地址信息。在一些示例中,可以在块执行之前执行一些存储器访问指令(例如,存储器加载指令)而其它指令(例如,存储器存储指令)等待执行,直至块正在提交。在一些示例中,所有存储器访问指令等待访问存储器,直至块正在提交。在一些示例中,存储器加载和存储指令在指令块的执行期间访问存储器,但是附加硬件捕捉存储器危险条件(例如,在写入之后读取危险)以保证主存储器表现如同指令根据它们的相对排序被执行。
在提交/放弃状态650处,处理器核控制单元确定可以完成由指令块执行的操作。例如,将根据指令块的控制流确定地执行存储器加载存储操作、寄存器读取/写入、分支指令和其它指令。备选地,如果将放弃指令块,例如,因为不满足指令的依赖性中的一个或者多个依赖性,或者对不满足的用于指令块的断言推测地执行指令,则放弃指令块,从而使得它不会影响存储器或者寄存器文件中的指令序列的状态。也完成任何未完成的存储器访问操作。无论指令块是否已经提交或者放弃,指令块去往状态660以确定是否应当刷新指令块。如果指令块被刷新,则处理器核通常地使用新数据值(特别地为通过刚才提交的对块的执行而被更新的寄存器和存储器)来重新执行指令块并且直接地前进到执行状态640。因此,可以避免在对指令块映射、取读和译码时花费的时间和能量。备选地,如果将不刷新指令块,则指令块进入空闲状态670。
在空闲状态670中,可以例如通过降低执行指令块的处理器核内的硬件的功率而维持用于指令块的译码的指令的至少一部分来使处理器核空闲。在某点,控制单元确定680是否将刷新处理器核上的空闲指令块。如果将刷新空闲指令块,则指令块可以在执行状态640处恢复执行。备选地,如果将不刷新指令块,则指令块被取消映射并且可以冲刷处理器核而且可以随后将指令块映射到冲刷的处理器核。
尽管状态图600为了易于说明而将指令块的状态图示为在单个处理器核上执行,但是本领域普通技术人员应当容易地理解,在某些示例中,多个处理器核可以被用来并行地执行给定的指令块的多个实例。
IX.示例基于块的处理器和存储器配置
图7是图示了包括基于块的处理器710的装置的示图700,处理器700包括被配置为根据用于一个或者多个操作模式的数据执行指令块的控制单元720。控制单元720包括核调度器725和存储器访问硬件结构730。核调度器725调度指令流,包括分配和取消分配用于执行指令处理的核、对在核、寄存器文件、存储器接口和/或I/O接口中的任何部件之间的输入数据和输出数据的控制。存储器访问硬件结构730存储数据,例如包括存储掩码数据、指示哪些指令已经执行的存储向量寄存器数据、掩码存储向量数据和/或控制流数据。可以使用任何适当技术(包括SRAM、寄存器(例如,包括触发器或者锁存器阵列)或者其它适当存储器技术)来实施存储器访问硬件结构730。可以在由控制单元720对指令译码时生成存储掩码。在一些示例中,从存储器750读取存储掩码(存储掩码735)、从指令块头部读取存储掩码(例如,存储掩码737和738)或者在计算机可读存储介质(比如存储介质盘736中)读取存储掩码。
基于块的处理器710也包括被配置为取读和执行指令块的一个或者多个处理器核740-747。所图示的基于块的处理器710具有上至八个核,但是在其它示例中可以有64、512、1024或者其它数目的基于块的处理器核。基于块的处理器710被耦合到包括多个指令块的存储器750(这些指令块包括指令块A和B)和被存储在计算机可读存储介质盘755上的存储掩码736。
X.使用存储掩码以发出指令的示例方法
图8是概述了如可以在所公开的技术的某些示例中执行的、使用存储掩码以便确定何时可以利用基于块的处理器发出和执行指令的示例方法的流程图800。例如,图1的基于块的处理器100(包括以上在图2中描述的基于块的处理器核111)可以被用来执行概述的方法。在一些示例中,基于块的处理器的执行单元被配置为执行指令块中的存储器访问指令,并且硬件结构存储如下数据,该数据指示存储器访问指令中的至少一些存储器访问指令的执行排序,并且基于块的处理器的控制单元被配置为至少部分基于硬件结构数据来控制存储器访问指令向执行单元的发出。
在过程块810处,为当前执行的指令的块产生存储掩码。存储掩码包括如下数据,该数据指示多个存储器访问指令中的哪些存储器访问指令是存储指令。例如,可以在与具有与存储器存储指令关联的特定加载存储标识符(LSID)的存储指令对应的位处存储零,并且可以对于与存储器加载指令关联的LSID存储一。如这里所用,存储器加载和存储指令是指对存储器操作的处理器指令,而读取和写入指令是指寄存器读取和写入,例如,向和从寄存器文件的读取和写入。存储掩码可以被存储在由基于块的处理器核的控制单元可访问的寄存器中。在其它示例中,存储掩码被存储在小型存储器中或者使用其它适当技术被存储。
可以用任何适当方式产生存储掩码。在一些示例中,通过读取由生成指令块的编译器在指令块头部中编码的存储掩码来产生存储掩码。在一些示例中,存储掩码从存储先前生成的存储掩码的存储器位置被产生。例如,用于基于块的处理器程序的二进制文件可以包括如下节段,该节段存储用于程序中的任何数目的指令块的存储掩码。在一些示例中,先前生成的存储掩码从指令块的先前执行被高速缓存,并且无需对于指令块的后续实例而被重新生成。在一些示例中,通过在对指令块的指令译码时生成新存储掩码来产生存储掩码。例如,随着每个加载指令和存储指令由指令译码器译码,提取LSID字段并且存储掩码中的适当位可以被设置以指示LSID是否对应于加载或者存储指令。在一些示例中,多于一个位被用来例如在不考虑或者空LSID的情况下在存储掩码中对LSID编码。一旦已经产生了存储掩码,方法就前进到过程块820。在一些示例中,存储掩码从执行它的指令块的先前实例被生成。在一些示例中,由对存储器访问指令译码的指令译码器生成。
在过程块820处,当前执行的指令块中的一个或者多个指令被译码、发出和执行。如果指令是存储器访问指令(比如存储器加载或者存储器存储),则可以更新存储向量。例如,存储向量可以具有与指令块内的每个LSID对应的位。在具有编码的LSID的加载或者存储指令执行时,然后设置存储向量中的对应位。因此,存储向量可以指示指令块中的哪些存储器访问指令已经执行。在其它示例中,其它技术可以被用来更新存储向量,例如,可以使用计数器而不是存储向量,如以下进一步具体讨论的那样。应当注意,在一些示例中,LSID对于块中的每个指令是唯一的。换而言之,仅能在指令块内使用每个LSID值一次。在其它示例中,例如,在断言的指令的情况下,相同LSID可以对于两个或者更多个指令被编码。因此,对真条件断言的指令集可以让它们的LSID中的一些或者所有LSID与对假值断言的对应的指令重叠。一旦更新了存储向量,方法就前进到过程块830。
在过程块830处,比较用于指令的LSID与经掩码的存储向量。在一些示例中,基于块的处理器控制单元被配置为比较存储向量寄存器数据与来自硬件结构的存储掩码数据以确定存储器存储指令中的哪些存储器存储指令已经执行。组合在过程块820处被更新的存储向量与在过程块810处被产生的存储掩码以产生在比较中被使用的值。例如,逐位逻辑AND或者OR操作可以被用来使用存储掩码来将存储向量掩码化。经掩码的存储向量指示哪些LSID可以执行。例如,如果经掩码的存储向量具有为指令零至五而被设置的所有位,则可接受发出指令编号六。基于比较,方法将如下继续。如果比较指示可接受基于LSID比较来发出指令,则方法前进到过程块840。在另一方面,如果讨论的指令不可接受发出,则方法前进到过程块820以便执行指令块中的附加指令,并且相应地更新存储向量。
在过程块840处,与在过程块830处的比较中被使用的LSID关联的加载或者存储指令发出到处理器流水线的执行阶段中。在一些示例中,至少部分基于被编码在指令的块内的LSID和存储如下数据的存储向量寄存器来选择要执行的下一存储器加载或者存储器存储指令,该数据指示存储器存储指令中的哪些存储器存储指令已经执行。因此,指令可以随着如由它的LSID与经掩码的存储向量的比较所指示的那样已经满足了它的存储器依赖性而继续执行。在一些示例中,其它依赖性可以由于与经掩码的存储向量比较无关的因素而使得发出的指令延迟。
在流程图800中概述的方法的一些示例中,基于块的处理器核包括被配置为执行利用多个指令而被编码的指令块的指令单元,其中包括存储器访问指令的指令中的每个指令可以基于接收针对相应的指令而被指定的依赖性来发出。处理器核还包括被配置为至少部分基于被存储在硬件结构中的数据来控制指令块中的存储器加载和/或存储器存储指令向执行单元的发出的控制单元,该数据指示指令块内的加载和存储的相对排序。在一些示例中,硬件结构可以是存储掩码、内容可寻址存储器(CAM)或者查找表。在一些示例中,数据被存储在从执行指令块的先前实例生成的硬件结构中。在一些示例中,数据被存储在来自从用于指令块的指令块头部被译码的数据的硬件结构中。在一些示例中,控制单元包括用于存储如下数据的存储向量寄存器,该数据指示存储器访问指令(例如,存储器加载和/或存储器存储指令)中的哪些存储器访问指令已经执行。在一些示例中,处理器核控制单元被配置为防止指令块的提交直至存储向量指示所有存储器访问指令已经执行。在一些示例中,处理器控制单元指示在执行存储器加载或者存储器存储指令时被更新(例如,递增)的计数器,并且在计数器达到用于存储器访问指令的数目的预定值时指示指令块被完成。在一些示例中,处理器核被配置为执行断言的指令,包括断言的存储器访问指令。
XI.示例源代码和目标代码
图9图示了如可以在所公开的技术的某些示例中被使用的用于基于块的处理器的源代码910和对应的目标代码920的示例。源代码910包括if/else语句。if/else语句的每个部分内的语句包括向阵列A和B的多个存储器读取和存储器写入。在将源代码910变换成目标代码时,将生成多个加载和存储汇编指令。
用于源代码部分910的汇编代码920包括编号0至24的25个指令。汇编指令指示多个字段,例如,指令操作码pneumonic、由指令指定的元数据(例如,广播标识符或者立即变元)、加载存储ID标识符和目标标示。汇编代码包括寄存器读取指令(0-2)、寄存器写入指令(指令24)、算术指令(例如,指令3和4)和用于向多个目标发送数据的移动指令(例如,移动指令5和6)。汇编代码920也包括测试指令11,测试指令11是将在广播信道2上生成断言值的测试是否大于指令。另外,汇编代码包括两个未断言的存储器加载指令7和8,以及一个断言的加载指令16。加载指令23也不是断言的。汇编代码920也包括将向存储器地址存储数据的多个存储器存储指令,例如,断言的存储指令12、13和18以及未断言的存储指令21。如在汇编代码920中所示,已经向加载和存储指令中的每个加载和存储指令指派了唯一LSID。例如,向LSID 0指派加载指令7,向LSID 1指派加载指令8,并且向LSID 2指派断言的存储指令12。LSID指示指令将被执行的相对排序。例如,指令12和13依赖于加载指令7和8首先执行。这一顺序是强制的,因为加载指令7和8被用来生成将由存储指令12和13存储的值。在一些示例中,两个或者更多个加载存储指令可以共享LSID。在一些示例中,指令集架构要求LSID连续,而在其它示例中,LSID可以是稀疏的(例如,跳过中间LSID值)。也应当注意,在一些示例中,可以执行块中的指令的推测或者乱序执行,但是处理器必须仍然维持语义如同没有违反由LSID指定的存储器依赖性。在一些示例中,是否可以乱序发出存储器访问指令可以依赖于在运行时被计算的存储器地址。
可以将汇编代码部分920转换成用于由基于块的处理器实际执行的机器代码。
XII.示例控制流图形
图10图示了针对以上关于图9而被描述的汇编代码920而被生成的控制流图形1000。为了易于图示而以包括节点和边的形式描绘、但是可以用其它形式(比如根据适当图形数据结构的、存储器中的数据排列)表示控制流图形1000,如本领域普通技术人员将容易地清楚的那样。为了易于说明,在控制流图形中仅示出了来自汇编代码920的加载和存储指令,但是应当理解,控制流图形的节点将根据每个相应指令的依赖性和断言来放置或者引用其它指令。
如所示,第一节点1010包括分别与LSID 0和1关联的加载指令7和8。指令7和8是未断言的并且可以一旦它们的操作数可用就发出和执行。例如,汇编代码移动指令5向移动指令5发送与a[i]关联的存储器地址,该移动指令5转而向加载指令7发送地址。加载指令7可以一旦地址可用就执行。也可以执行其它指令(比如读取指令0至2)而没有参照断言。
如果由于通过比较两个值(例如,用于一个操作数大于另一操作数的测试)来生成布尔值的条件指令11而生成节点1020。如果测试指令的左操作数大于,则断言条件值为真,并且仅用于代码部分1030的指令将执行。反言之,如果条件值为假,则代码部分1035将执行。在所公开的基于块的处理器架构中,这可以被执行而没有使用分支或者跳转,因为关联的指令是断言的。例如,指令12是由测试指令11生成的、在广播信道2上被断言的存储指令。相似地,如果广播断言的值为假,则指令16将执行。代码部分1030中的存储指令与LSID 2和3关联,而代码部分1035中的加载和存储质量与LSID 4和5关联。随着指令中的每个指令执行,更新存储向量以指示指令已经执行。控制流图形1000也包括接合节点1040,该接合节点1040表示转变回到被包含在源代码910的if/else语句以外的语句。例如,经过if/else语句放置代码部分1050的指令21和23。指令21和23如所示具有LSID6和7。应当注意,生成汇编代码920的编译器没有与代码部分1010一起放置存储器访问指令21和23,因为它们可能依赖于在代码部分1030或者1035内被生成的值。例如,加载指令23在索引2处从阵列b读取,该阵列b取决于i的值而可以被或者可以没有被代码部分1035的存储指令18写入。应当注意,虽然根据由LSID编码的相对排序执行存储器访问指令,但是指令也将在发出之前等待其它依赖性。
XIII.示例存储掩码/向量比较
图11A和图11B图示了如可以在所公开的技术的某些示例处被执行的、比较存储掩码与存储向量的示例。例如,如图11A中所示,存储掩码1100存储用于与汇编代码920关联的LSID的1或者0值(从左侧的LSID 0开始排列位)。因此,加载存储ID 0、1、4和7与存储器加载指令关联,而LSID 2、3、5和6与存储器存储指令关联。针对加载指令将存储掩码位设置为1而针对存储指令将其设置成0。在指令7、8和12已经执行之后的状态中示出了存储器存储向量1110。因此,将与LSID 0、1和2关联的位设置成1,而未执行的指令让它们的对应位被设置成0。如所示使用逐位OR门1120来比较存储掩码1100和存储掩码向量1110以便产生经掩码的存储向量1130。经掩码的存储向量指示允许哪些指令接着执行。如所示,由于将维持LSID的排序,所以待执行的下一指令是与LSID 3(在这一示例中的指令ID 13)关联的指令。在一些示例中,可以通过在未取得的断言的指令中放置1来将与未取得的指令关联的LSID标记为已取得(换而言之为已被使得无效)。
图11B图示了在附加数目的指令已经执行之后生成经掩码的存储向量比较的示例。如所示,已经更新了存储向量以指示指令0至5已经执行。如果断言结果为真,则可以将与未取得的断言关联的LSID标记为1。经掩码的存储结果1140示出了与第一个0(即,LSID6)关联的指令让它的在前指令依赖性被满足,并且它准备就绪发出。
XIV.根据指定的排序来发出指令的示例方法
图12是概述了如可以在所公开的技术的某些示例处被执行的、基于在指令中被指定的相对排序和计数器来发出指令的示例方法的流程图1200。例如,以上关于图1和图2而被讨论的基于块的处理器100和处理器核111可以被用来实施所示方法。
在过程块1210,执行断言的加载或者存储指令。在执行指令之后,更新计数器(例如,递增1)。因此,计数器可以被用来指示存储器访问指令的执行状态而不是以上讨论的存储器存储向量。在一些示例中,基于块的处理器控制单元被配置为比较存储向量寄存器数据与来自硬件结构的存储掩码数据以确定被排序在存储器访问指令的当前存储器访问指令之前的所有存储器存储指令已经执行,并且基于确定来向执行单元发出当前存储器访问指令。在一些示例中,控制单元包括在执行存储器加载和/或存储器存储指令之一时被递增的计数器,并且其中控制单元在计数器达到用于被编码在指令块中的存储器访问指令的数目的预定值时指示指令块已经完成。一旦已经更新了计数器,方法就前进到过程块1220。
在过程块1220处,使与未取得的断言路径关联的加载存储标识符无效。例如,如果取得与以下讨论的断言节点1320关联的断言,则可以使与未取得的部分关联的存储器访问指令无效。在取决于取得的断言路径来使标识符无效之后,方法前进到过程块1030。
在过程块1030处,比较用于下一指令的加载存储标识符与计数器。如果将计数器设置成指示可接受发出下一指令的值,则方法前进到过程块1240。如果比较的结果指示不可接受发出存储器访问指令,则方法前进到过程块1210以便执行附加指令。例如,如果计数器指示五个指令已经执行并且下一存储器访问指令的LSID是6,则可接受存储器访问指令发出。反言之,如果计数器值小于五,则存储器访问指令发出是不适当的。在一些示例中,存储指令的数目或者存储器访问指令的数目在指令块头部中被存储为LSID计数器517。
XV.示例控制流图像
图13图示了可以在所公开的技术的其它示例中被用来表示用于汇编代码920的略微修改的版本的控制流的示例备选控制流图形。如图13中所示,代码部分1335具有空指令18。除了被用来调整存储向量或者计数器以便指示下一存储器访问指令准备就绪发出之外,空指令18没有改变处理器的状态。例如,如果取得在节点1320处的断言,则将均在发出的两个存储指令。反言之,如果没有取得断言节点1320,则仅一个存储器访问指令将在无空指令时执行。因此,空指令是一种用以平衡在存储向量中被指示的加载存储ID的方式。这可以简化用于指令块的控制流,因为用于指令块的存储库的数目可以相同,或者在控制流图形的接合节点处的LSID可以相同,无论在指令块的执行期间取得的断言路径如何。在其它示例中,未平衡的条件可以由处理器控制单元标识并且可以自动地使LSID无效而没有包括指令块代码中的空指令。也应当注意,源代码部分1320具有重叠LSID(即,LSID2和3)作为源代码部分1335中所示的LSID。由于将取得条件节点1320的仅一侧,所以有可能通过允许更少数目的位被用来对LSID编码来重叠和共享相同LSID,这允许更好分配LSID值。例如,源代码部分1350具有向LSID 4和5而不是6和7指派的指令,如同图10的控制流图形的情况一样。
XVI.变换代码的示例方法
图14是概述了如可以在所公开的技术的某些示例处被执行的、将代码变换成用于基于块的处理器的计算机可执行代码的示例的流程图1400。例如,通用处理器和/或基于块的处理器可以被用来实施在图14中被概述的方法。在一些示例中,代码由编译器变换并且存储为可以由基于块的处理器(例如,基于块的处理器100)执行的目标代码。在一些示例中,准时编译器或者解译器在运行时生成计算机可执行代码。
在过程块1410处,分析被编码在源和/或目标代码中的存储器引用以确定存储器依赖性。例如,存储器依赖性可以简单地是存储器访问指令在程序中被排列的顺序。在其它示例中,可以分析很可能被存储器访问指令写入的存储器地址以确定是否存在在指令块中的加载存储指令之间的重叠。在一些示例中,确定存储器依赖性包括标识指令块中的两个存储器访问指令,存储器访问指令中的第一存储器访问指令在存储器访问指令中的第二存储器访问指令的互补条件上被断言,并且基于标识来向第一存储器访问指令和第二存储器访问指令指派相同标识符。在分析存储器引用之后,方法前进到过程块1420。
在过程块1420处,将源代码和/或目标代码变换成基于块的计算机可执行代码,该计算机可执行代码包括指令块中的存储器访问指令的相对排序的指示。例如,可以在指令中对LSID值编码。在其它示例中,相对排序由块内的指令定位指示。在一些示例中,存储掩码被生成和存储为用于指令块的指令块头部。在一些示例中,存储掩码指示加载/存储标识符中的哪个加载/存储标识符对应于存储存储器访问指令。在一些示例中,提供特殊指令以便将存储掩码加载到控制单元的存储器中以用于在将存储向量掩码化时使用。一旦已经将代码变换成基于块的处理器代码,它可以被存储在计算机可读存储介质中或者经由计算机网络被传输到另一位置已用于由基于块的处理器执行。
XVII.示例性计算环境
图15图示了可以在其中实施描述的实施例、技能和技术(包括配置基于块的处理器)的适当计算环境1500的广义示例。例如,计算环境1500可以实施如这里描述的、用于配置处理器以生成和使用存储器访问指令顺序编码或者将代码编码成用于执行这样的操作的计算机可执行指令的所公开的技能。
计算环境1500不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机***配置被实现,包括手持式设备、多处理器***、可编程消费者电子产品、网络PC、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
参照图15,计算环境1500包括至少一个基于块的处理单元1510和存储器1520。在图15中,在虚线内包括这一最基本配置1530。基于块的处理单元1510执行计算机可执行指令并且可以是实际或者虚拟处理器。在多处理***中,多个处理单元执行计算机可执行指令以增加处理能力,并且如此,多个处理器可以同时地运行。存储器1520可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或者二者的某个组合。存储器1520存储例如可以实施这里描述的技术的软件1580、图像和视频。存储器1520可以由基于块的处理器使用这里讨论的存储器访问指令(包括具有LSID的加载和存储指令)访问。计算环境可以具有附加特征。例如,计算环境1500包括存储装置1540、一个或者多个输入设备1550、一个或者多个输出设备1560和一个或者多个通信连接1570。互连机制(未示出)(比如总线、控制器或者网络)互连计算环境1500的部件。通常地,操作***软件(未示出)提供用于在计算环境1500中执行的其它软件的操作环境并且协调计算环境1500的部件的活动。
存储装置1540可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、CD-ROM、CD-RW、DVD或者可以用于存储信息并且可以在计算环境1500内访问的任何其他介质。存储装置1540存储用于软件1580的指令、***数据和消息,其可以用于实现在此所描述的技术。
(一个或多个)输入设备1550可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔或轨迹球、语音输入设备、扫描设备或者向计算环境1500提供输入的另一设备。对于音频而言,(一个或多个)输入设备1550可以是以模拟或者数字形式接受音频输入的声卡或者类似设备,或者向计算环境1500提供音频样本的CD-ROM读取器。(一个或多个)输出设备1560可以是显示器、打印机、扬声器、刻录机或者提供来自计算环境1500的输出的另一设备。
通信连接1570实现通过通信介质(例如,连接网络)与另一计算实体通信。通信介质传送信息,比如计算机可执行指令、压缩的图形信息、视频或者调制的数据信号中的其它数据。通信连接1570不限于有线连接(例如,兆位或者吉位以太网、无限带宽、在电或者光纤连接之上的光纤信道),而是也包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外线的RF连接)和用于为所公开的方法提供网络连接的其它适当通信连接。在虚拟主机环境中,通信连接可以是由虚拟主机提供的虚拟化的网络连接。
可以使用实现计算云1590中的所公开的技术的全部或部分的计算机可执行指令执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境中,或者所公开的编译器可以在被定位在计算云1590中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或者CISC处理器)上执行。
计算机可读介质是可以在计算环境1500内访问的任何可用介质。以示例而非限制的方式,利用计算环境1500,计算机可读介质包括存储器1520和/或存储装置1540。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1520和存储装置1540)而非传输介质(诸如调制数据信号)。
X.所公开的技术的附加示例
根据上文所讨论的示例在此讨论了所公开的主题的附加示例。
在所公开的技术的一些示例中,一种装置包括存储器和一个或者多个基于块的处理器核,核中的至少一个核包括:执行单元,其被配置为执行被包含在指令块中的、包括多个存储器加载和/或存储器存储指令的存储器访问指令;硬件结构,其存储指示存储器访问指令中的至少一些存储器访问指令的执行排序的数据;以及控制单元,其被配置为至少部分基于硬件结构数据来控制存储器访问指令向执行单元的发出。
在装置的一些示例中,硬件结构是存储掩码、内容可寻址存储器(CAM)或者查找表。在一些示例中,从执行指令块的先前实例生成被存储在硬件结构中的数据。在一些示例中,从用于指令块的指令块头部生成被存储在硬件结构中的数据。在一些示例中,被存储在硬件结构中的数据由对存储器访问指令译码的指令译码器生成。
在装置的一些示例中,控制单元包括存储数据的存储向量寄存器,该数据指示存储器访问指令中的哪些存储器访问指令已经执行。在一些示例中,控制单元还被配置为比较存储向量寄存器数据与来自硬件结构的存储掩码数据以确定存储器访问指令中的哪些存储器访问指令已经执行。在一些示例中,控制单元还被配置为比较存储向量寄存器数据与来自硬件结构的存储掩码数据以确定被排序在存储器访问指令中的当前存储器访问指令之前的所有存储器访问指令已经执行,并且基于确定来向被耦合到控制单元的加载/存储队列发出当前存储器访问指令。在一些示例中,控制单元包括在执行存储器访问指令之一时被递增的计数器,并且控制单元在计数器达到用于被编码在指令块中的存储器访问指令的数目的预定值时指示指令块已经完成。在一些示例中,控制单元生成被用来控制被耦合到控制单元的唤醒/选择逻辑和/或一个或者多个存储器加载/存储队列的信号。在一些示例中,控制单元生成被用来直接地控制处理器核和/或存储器单元内的部件的信号。在一些示例中,唤醒/选择逻辑和/或存储器加载/存储队列执行与存储器访问指令顺序编码的生成和使用有关的操作中的一些或者所有操作。
在装置的一些示例中,指示执行排序的数据至少部分基于针对指令块中的存储器访问指令中的每个存储器访问指令而被编码的加载/存储标识符。在一些示例中,装置是基于块的处理器本身。在一些示例中,装置包括存储数据的计算机可读存储介质,该数据用于指令块头部和用于指令块中的存储器访问指令。
在所公开的技术的一些示例中,一种操作处理器以执行包括多个存储器加载和/或存储器存储指令的指令的块的方法包括至少部分基于被编码在指令的块内的依赖性和至少部分基于存储数据的存储向量寄存器来选择多个指令的下一存储器加载或者存储器存储指令以执行,该数据指示存储器存储指令中的哪些存储器存储指令已经执行,并且执行下一指令。
在方法的一些示例中,选择包括比较被编码在指令块的头部中的存储掩码与存储向量寄存器数据。在一些示例中,利用被编码在存储器加载和/或存储器存储指令中的每个指令中的标识符来对依赖性编码。在一些示例中,对存储器加载和存储器存储指令中的至少一个指令的执行在由指令块的另一指令生成的条件值上被断言。
方法的一些示例还包括比较存储向量寄存器数据与用于指令的块的存储掩码,该存储掩码指示编码的依赖性中的哪个依赖性对应于存储器存储指令,并且基于比较来执行以下操作之一:停止下一指令的执行、停止下一指令块的执行、生成存储器依赖性预测、发起下一指令块的执行或者发起例外句柄以指示存储器访问错误。
方法的一些示例还包括执行指令的块的存储器存储指令,存储器存储指令利用指示指令在相对排序中的定位的标识符而被编码,在存储向量寄存器中存储存储器存储指令是否被执行的指示,并且基于指示来执行具有更晚相对排序的存储器加载指令。
在方法的一些示例中,选择还基于比较计数器值与在选择的下一指令中被编码的标识符,该计数器值指示已经执行的存储器加载和/或存储器存储指令的数目。在一些示例中,LSID值连续(例如,1、2、3、…、n),而在其它示例中,LSID值不是都连续(例如,1、2、3、5、7、9、…、n)。在一些示例中,相对排序由以下各项中的一项或者多项指定:被编码在指令块头部中的数据、被编码在指令块的一个或者多个指令中的数据、被编码在对指令块译码时被动态地生成的表中的数据和/或在指令块的先前执行期间被编码的高速缓存的数据。
在所公开的技术的一些示例中,一个或者多个计算机可读存储介质存储在由基于块的处理器执行时使得处理器执行所公开的方法中的任何一种或者多种方法的计算机可读指令。
在所公开的技术的一些示例中,一个或者多个计算机可读存储介质存储用于指令块的计算机可读指令,这些计算机可读指令在由基于块的处理器执行时使得处理器执行方法,这些计算机可读指令包括用于分析被编码在源代码和/或目标代码中的存储器访问以确定用于指令块的存储器依赖性的指令,以及用于将源代码和/或目标代码变换成用于指令块的计算机可执行代码的指令,计算机可执行代码包括指令块中的存储器访问指令的排序的指示。在一些示例中,计算机可读指令包括:用于标识指令块中的两个存储器访问指令的指令,存储器访问指令中的第一存储器访问指令在存储器访问指令中的第二存储器访问指令的互补条件上被断言,以及用于基于标识来向第一存储器访问指令和第二存储器访问指令指派相同标识符的指令。在一些示例中,排序指示由被编码在存储器访问指令中的加载/存储标识符指示,并且指令包括用于在指令块的头部中生成存储掩码的指令,该存储掩码指示加载/存储标识符中的哪些加载/存储标识符对应于存储存储器访问指令。
鉴于所公开的主题的原理可以应用的许多可能实施例,应当认识到所图示的实施例仅是优选的示例并且不应该当作将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附的权利要求进行限定。我们因此根据我们的发明要求保护落在这些权利要求的范围内的全部内容。

Claims (20)

1.一种包括存储器和一个或者多个基于块的处理器核的装置,所述核中的至少一个核包括:
执行单元,被配置为执行被包含在指令块中的、包括多个存储器加载和/或存储器存储指令的存储器访问指令;
硬件结构,其存储指示所述存储器访问指令中的至少一些存储器访问指令的执行排序的数据;以及
控制单元,被配置为至少部分基于硬件结构数据来控制所述存储器访问指令向所述执行单元的发出。
2.根据权利要求1所述的装置,其中所述硬件结构是存储掩码、内容可寻址存储器(CAM)或者查找表。
3.根据权利要求1或者权利要求2所述的装置,其中被存储在所述硬件结构中的所述数据从执行所述指令块的先前实例被生成。
4.根据权利要求1-3中的任一权利要求所述的装置,其中被存储在所述硬件结构中的所述数据从用于所述指令块的指令块头部被生成。
5.根据权利要求1-3中的任一权利要求所述的装置,其中被存储在所述硬件结构中的所述数据由对所述存储器访问指令译码的指令译码器生成。
6.根据权利要求1-5中的任一权利要求所述的装置,其中所述控制单元包括存储向量寄存器,所述存储向量寄存器存储指示所述存储器访问指令中的哪些存储器访问指令已经执行的数据。
7.根据权利要求1-6中的任一权利要求所述的装置,其中所述控制单元还被配置为比较存储向量寄存器数据与来自所述硬件结构的存储掩码数据,以确定所述存储器访问指令中的哪些存储器访问指令已经执行。
8.根据权利要求1-6中的任一权利要求所述的装置,其中所述控制单元还被配置为比较存储向量寄存器数据与来自所述硬件结构的存储掩码数据以确定被排序在所述存储器访问指令中的当前存储器访问指令之前的所有存储器访问指令已经执行,并且基于所述确定来向被耦合到所述控制单元的加载/存储队列发出所述当前存储器访问指令。
9.根据权利要求1-5中的任一权利要求所述的装置,其中所述控制单元包括在所述存储器访问指令之一被执行时被递增的计数器,并且其中所述控制单元在所述计数器达到用于被编码在所述指令块中的存储器访问指令的数目的预定值时指示所述指令块已经完成。
10.根据权利要求1-9中的任一权利要求所述的装置,其中指示执行排序的所述数据至少部分基于针对所述指令块中的所述存储器访问指令中的每个存储器访问指令而被编码的加载/存储标识符。
11.一种操作处理器以执行包括多个存储器加载和/或存储器存储指令的指令的块的方法,所述方法包括:
至少部分基于被编码在所述指令的块内的依赖性并且至少部分基于存储数据的存储向量寄存器来选择所述多个指令中的下一存储器加载或者存储器存储指令以执行,所述数据指示所述存储器存储指令中的哪些存储器存储指令已经执行;以及
执行所述下一指令。
12.根据权利要求11所述的方法,其中所述选择包括比较被编码在所述指令的块的头部中的存储掩码与所述存储向量寄存器数据。
13.根据权利要求11或者权利要求12所述的方法,其中所述依赖性利用被编码在所述存储器加载和/或存储器存储指令中的每个指令中的标识符被编码。
14.根据权利要求11-13中的任一权利要求所述的方法,其中对所述存储器加载和存储器存储指令中的至少一个指令的执行在由所述指令块的另一指令生成的条件值上被断言。
15.根据权利要求11-14中的任一权利要求所述的方法,还包括:
比较所述存储向量寄存器数据与用于所述指令的块的存储掩码,所述存储掩码指示编码的所述依赖性中的哪些依赖性对应于存储器存储指令;以及
基于所述比较来执行以下操作之一:停止对所述下一指令的执行、停止对下一指令块的执行、生成存储器依赖性预测、发起对下一指令块的执行或者发起例外句柄以指示存储器访问错误。
16.根据权利要求11-15中的任一权利要求所述的方法,还包括:
执行所述指令的块的存储器存储指令,所述存储器存储指令利用指示所述指令在所述相对排序中的位置的标识符被编码;
在所述存储向量寄存器中存储所述存储器存储指令是否执行的指示;以及
基于所述指示来执行具有较晚相对排序的存储器加载指令。
17.一种或者多种计算机可读存储介质,其存储计算机可读指令,所述计算机可读指令在由基于块的处理器执行时,使得所述处理器执行根据权利要求11-16中的任一权利要求所述的方法。
18.一种或者多种计算机可读存储介质,存储用于指令块的计算机可读指令,所述计算机可读指令在由基于块的处理器执行时,使得所述处理器执行方法,所述计算机可读指令包括:
用于分析被编码在源代码和/或目标代码中的存储器访问以确定用于所述指令块的存储器依赖性的指令;以及
用于将所述源代码和/或目标代码变换成用于所述指令块的计算机可执行代码的指令,所述计算机可执行代码包括所述指令块中的存储器访问指令的排序的指示。
19.根据权利要求18所述的计算机可读存储介质,其中所述计算机可读指令还包括:
用于标识所述指令块中的两个存储器访问指令的指令,所述存储器访问指令的第一存储器访问指令在所述存储器访问指令的第二存储器访问指令的互补条件上被断言;以及
用于基于所述标识来向所述第一存储器访问指令和所述第二存储器访问指令指派相同标识符的指令。
20.根据权利要求18或者权利要求19所述的计算机可读存储介质,其中排序指示由被编码在所述存储器访问指令中的加载/存储标识符指示,并且其中所述计算机可读指令还包括:
用于在所述指令块的头部中生成存储掩码的指令,所述存储掩码指示所述加载/存储标识符中的哪些加载/存储标识符对应于存储存储器访问指令。
CN201680054500.0A 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用 Active CN108027773B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211067382.0A CN115390926A (zh) 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562221003P 2015-09-19 2015-09-19
US62/221,003 2015-09-19
US14/921,855 2015-10-23
US14/921,855 US11681531B2 (en) 2015-09-19 2015-10-23 Generation and use of memory access instruction order encodings
PCT/US2016/051407 WO2017048646A1 (en) 2015-09-19 2016-09-13 Generation and use of memory access instruction order encodings

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202211067382.0A Division CN115390926A (zh) 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用

Publications (2)

Publication Number Publication Date
CN108027773A true CN108027773A (zh) 2018-05-11
CN108027773B CN108027773B (zh) 2022-09-20

Family

ID=66000908

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202211067382.0A Pending CN115390926A (zh) 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用
CN201680054500.0A Active CN108027773B (zh) 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202211067382.0A Pending CN115390926A (zh) 2015-09-19 2016-09-13 存储器访问指令顺序编码的生成和使用

Country Status (4)

Country Link
US (1) US11681531B2 (zh)
EP (1) EP3350706A1 (zh)
CN (2) CN115390926A (zh)
WO (1) WO2017048646A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101275A (zh) * 2018-06-26 2018-12-28 天津飞腾信息技术有限公司 一种基于移位的指令提取与缓冲方法及超标量微处理器
CN110428359A (zh) * 2019-08-09 2019-11-08 南京地平线机器人技术有限公司 用于处理感兴趣区域数据的装置和方法
CN110928575A (zh) * 2018-09-20 2020-03-27 上海登临科技有限公司 一种多设备同步控制***和控制方法
CN111625280A (zh) * 2019-02-27 2020-09-04 上海复旦微电子集团股份有限公司 指令控制方法及装置、可读存储介质
CN114490461A (zh) * 2020-10-27 2022-05-13 Oppo广东移动通信有限公司 一种数据转移控制方法、存储介质及设备

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10684859B2 (en) * 2016-09-19 2020-06-16 Qualcomm Incorporated Providing memory dependence prediction in block-atomic dataflow architectures
US10915324B2 (en) 2018-08-16 2021-02-09 Tachyum Ltd. System and method for creating and executing an instruction word for simultaneous execution of instruction operations
CN112540796B (zh) * 2019-09-23 2024-05-07 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101542441A (zh) * 2006-11-22 2009-09-23 可递有限公司 多处理器计算***中的存储器一致性保护
CN102902529A (zh) * 2011-09-07 2013-01-30 微软公司 变换的上下文知晓数据源管理
CN104040487A (zh) * 2011-12-23 2014-09-10 英特尔公司 用于合并掩码模式的指令
CN104049953A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于合并操作掩码的未经掩码元素的处理器、方法、***和指令
CN104077107A (zh) * 2013-03-30 2014-10-01 英特尔公司 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和***
CN104126173A (zh) * 2011-12-23 2014-10-29 英特尔公司 不会引起密码应用的算术标志的三输入操作数向量add指令
CN104583958A (zh) * 2012-09-28 2015-04-29 英特尔公司 用于sha256算法的消息调度的指令集

Family Cites Families (172)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142631A (en) 1989-02-03 1992-08-25 Digital Equipment Corporation System for queuing individual read or write mask and generating respective composite mask for controlling access to general purpose register
US5333283A (en) 1991-10-29 1994-07-26 International Business Machines Corporation Case block table for predicting the outcome of blocks of conditional branches having a common operand
EP0583089B1 (en) 1992-08-12 2000-01-26 Advanced Micro Devices, Inc. Instruction decoder
WO1996007139A1 (en) 1994-09-01 1996-03-07 Mcalpine Gary L A multi-port memory system including read and write buffer interfaces
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5673408A (en) 1995-02-14 1997-09-30 Hal Computer Systems, Inc. Processor structure and method for renamable trap-stack
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5729228A (en) 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
US5742840A (en) 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5917505A (en) 1995-12-19 1999-06-29 Cirrus Logic, Inc. Method and apparatus for prefetching a next instruction using display list processing in a graphics processor
US5790822A (en) 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US8583895B2 (en) 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
US5905893A (en) 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
US6665792B1 (en) 1996-11-13 2003-12-16 Intel Corporation Interface to a memory system for a processor having a replay system
US5903750A (en) 1996-11-20 1999-05-11 Institute For The Development Of Emerging Architectures, L.L.P. Dynamic branch prediction for branch instructions with multiple targets
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US6879341B1 (en) 1997-07-15 2005-04-12 Silverbrook Research Pty Ltd Digital camera system containing a VLIW vector processor
US7272703B2 (en) 1997-08-01 2007-09-18 Micron Technology, Inc. Program controlled embedded-DRAM-DSP architecture and methods
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6178498B1 (en) 1997-12-18 2001-01-23 Idea Corporation Storing predicted branch target address in different storage according to importance hint in branch prediction instruction
US6314493B1 (en) 1998-02-03 2001-11-06 International Business Machines Corporation Branch history cache
JP3881763B2 (ja) 1998-02-09 2007-02-14 株式会社ルネサステクノロジ データ処理装置
TW440793B (en) 1998-02-25 2001-06-16 Koninkl Philips Electronics Nv A method for structuring a multi-instruction computer program from basic blocks that compose from internal instructions and external jumps in an internal directed acyclic graph, and a processor loaded with such program
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6212621B1 (en) 1998-06-24 2001-04-03 Advanced Micro Devices Inc Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
US6353883B1 (en) 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US6240510B1 (en) 1998-08-06 2001-05-29 Intel Corporation System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions
US6212622B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Mechanism for load block on store address generation
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US6115808A (en) 1998-12-30 2000-09-05 Intel Corporation Method and apparatus for performing predicate hazard detection
US6367004B1 (en) 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6813705B2 (en) 2000-02-09 2004-11-02 Hewlett-Packard Development Company, L.P. Memory disambiguation scheme for partially redundant load removal
KR100337149B1 (ko) 2000-07-05 2002-05-18 권 기 홍 프로그램 테스트 및 디버깅이 용이한 중앙처리장치
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US6662294B1 (en) 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
KR20030007403A (ko) 2000-11-27 2003-01-23 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 데이터 프로세싱 장치
US20030023959A1 (en) 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
JP3702815B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
US7095343B2 (en) 2001-10-09 2006-08-22 Trustees Of Princeton University code compression algorithms and architectures for embedded systems
WO2003038645A2 (en) 2001-10-31 2003-05-08 University Of Texas A scalable processing architecture
US6892292B2 (en) 2002-01-09 2005-05-10 Nec Corporation Apparatus for one-cycle decompression of compressed data and methods of operation thereof
EP1470476A4 (en) 2002-01-31 2007-05-30 Arc Int CONFIGURABLE DATA PROCESSOR WITH MULTI-LENGTH INSTRUCTION KIT ARCHITECTURE
EP1495407A1 (en) 2002-04-08 2005-01-12 The University Of Texas System Non-uniform cache apparatus, systems, and methods
WO2004001584A2 (en) 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
JP4196614B2 (ja) 2002-08-22 2008-12-17 パナソニック株式会社 命令スケジューリング方法、命令スケジューリング装置、及びプログラム
US7299458B2 (en) 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US20040139299A1 (en) 2003-01-14 2004-07-15 International Business Machines Corporation Operand forwarding in a superscalar processor
US20040193849A1 (en) 2003-03-25 2004-09-30 Dundas James D. Predicated load miss handling
US7308682B2 (en) 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
KR100877138B1 (ko) 2004-03-29 2009-01-09 고쿠리츠 다이가쿠 호진 교토 다이가쿠 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체
US7424482B2 (en) 2004-04-26 2008-09-09 Storwize Inc. Method and system for compression of data for block mode access storage
JP4296996B2 (ja) 2004-06-15 2009-07-15 富士通株式会社 マルチコアプロセサ制御方式
US7302543B2 (en) 2004-06-16 2007-11-27 Nec Laboratories America, Inc. Compressed memory architecture for embedded systems
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7624386B2 (en) 2004-12-16 2009-11-24 Intel Corporation Fast tree-based generation of a dependence graph
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US8332526B2 (en) 2005-05-25 2012-12-11 Microsoft Corporation Data communication protocol including negotiation and command compounding
US8312452B2 (en) 2005-06-30 2012-11-13 Intel Corporation Method and apparatus for a guest to access a privileged register
US7872892B2 (en) 2005-07-05 2011-01-18 Intel Corporation Identifying and accessing individual memory devices in a memory channel
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US9870267B2 (en) 2006-03-22 2018-01-16 Intel Corporation Virtual vector processing
US8290095B2 (en) 2006-03-23 2012-10-16 Qualcomm Incorporated Viterbi pack instruction
TW200739419A (en) 2006-04-07 2007-10-16 Univ Feng Chia Prediction mechanism of a program backward jump instruction
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
US7962725B2 (en) 2006-05-04 2011-06-14 Qualcomm Incorporated Pre-decoding variable length instructions
US20070288733A1 (en) 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
WO2008038389A1 (fr) 2006-09-28 2008-04-03 Fujitsu Limited Appareil d'analyse de performance de programme
US8332452B2 (en) 2006-10-31 2012-12-11 International Business Machines Corporation Single precision vector dot product with “word” vector write mask
US7809926B2 (en) 2006-11-03 2010-10-05 Cornell Research Foundation, Inc. Systems and methods for reconfiguring on-chip multiprocessors
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US7600077B2 (en) 2007-01-10 2009-10-06 Arm Limited Cache circuitry, data processing apparatus and method for handling write access requests
US8250556B1 (en) 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
US20080229065A1 (en) 2007-03-13 2008-09-18 Hung Qui Le Configurable Microprocessor
US7958333B2 (en) 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
JP5043560B2 (ja) 2007-08-24 2012-10-10 パナソニック株式会社 プログラム実行制御装置
US9384003B2 (en) 2007-10-23 2016-07-05 Texas Instruments Incorporated Determining whether a branch instruction is predicted based on a capture range of a second instruction
US7870371B2 (en) 2007-12-17 2011-01-11 Microsoft Corporation Target-frequency based indirect jump prediction for high-performance processors
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US7818551B2 (en) 2007-12-31 2010-10-19 Microsoft Corporation Feedback mechanism for dynamic predication of indirect jumps
US8677336B2 (en) 2008-01-17 2014-03-18 Microsoft Corporation Block count based procedure layout and splitting
US7886132B2 (en) 2008-05-19 2011-02-08 International Business Machines Corporation Predication support in an out-of-order processor by selectively executing ambiguously renamed write operations
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
KR101595043B1 (ko) 2008-09-18 2016-02-17 마벨 월드 트레이드 리미티드 적어도 부분적으로 부팅 동안에 어플리케이션들을 메모리에 프리로딩하는 방법
EP2366144B1 (en) 2008-10-15 2015-09-30 Hyperion Core, Inc. Sequential processor comprising an alu array
US20100146209A1 (en) 2008-12-05 2010-06-10 Intellectual Ventures Management, Llc Method and apparatus for combining independent data caches
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
CN101477454A (zh) 2009-01-22 2009-07-08 浙江大学 嵌入式处理器的乱序执行控制装置
US20100191943A1 (en) 2009-01-26 2010-07-29 Agere Systems Inc. Coordination between a branch-target-buffer circuit and an instruction cache
US8108655B2 (en) 2009-03-24 2012-01-31 International Business Machines Corporation Selecting fixed-point instructions to issue on load-store unit
CN101866280B (zh) 2009-05-29 2014-10-29 威盛电子股份有限公司 微处理器及其执行方法
US20100325395A1 (en) 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8364902B2 (en) 2009-08-07 2013-01-29 Via Technologies, Inc. Microprocessor with repeat prefetch indirect instruction
US8433885B2 (en) 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US20110078424A1 (en) 2009-09-30 2011-03-31 International Business Machines Corporation Optimizing program code using branch elimination
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
WO2011067896A1 (en) 2009-12-02 2011-06-09 Mush-A Co., Ltd. Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
CN101763285B (zh) 2010-01-15 2013-03-20 西安电子科技大学 零开销切换多线程处理器及其线程切换方法
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
KR101603751B1 (ko) 2010-02-18 2016-03-16 삼성전자주식회사 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
US8434074B2 (en) 2010-02-24 2013-04-30 Intel Corporation Register allocation with SIMD architecture using write masks
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
KR101330201B1 (ko) 2010-07-12 2013-11-15 도시바삼성스토리지테크놀러지코리아 주식회사 광 픽업 장치 및 이를 적용한 광 디스크 드라이브
US20120030451A1 (en) 2010-07-28 2012-02-02 Broadcom Corporation Parallel and long adaptive instruction set architecture
US8776026B2 (en) 2010-10-01 2014-07-08 Ecole Polytechnique Federale De Lausanne System and method for in-vivo multi-path analysis of binary software
US8589892B2 (en) 2010-11-21 2013-11-19 International Business Machines Corporation Verification of speculative execution
US20120158647A1 (en) 2010-12-20 2012-06-21 Vmware, Inc. Block Compression in File System
WO2012107800A1 (en) 2011-02-11 2012-08-16 Freescale Semiconductor, Inc. Integrated circuit devices and methods for scheduling and executing a restricted load operation
CN103547993B (zh) 2011-03-25 2018-06-26 英特尔公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
WO2012135050A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN107832083B (zh) 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
US8683261B2 (en) 2011-07-20 2014-03-25 International Business Machines Corporation Out of order millicode control operation
US9632779B2 (en) 2011-12-19 2017-04-25 International Business Machines Corporation Instruction predication using instruction filtering
US9092346B2 (en) 2011-12-22 2015-07-28 Intel Corporation Speculative cache modification
US8751525B2 (en) 2011-12-23 2014-06-10 Sap Ag Time slider operator for temporal data aggregation
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
WO2013156825A1 (en) 2012-04-20 2013-10-24 Freescale Semiconductor, Inc. A computer system and a method for generating an optimized program code
CN103513957B (zh) 2012-06-27 2017-07-11 上海芯豪微电子有限公司 高性能缓存方法
US9424191B2 (en) 2012-06-29 2016-08-23 Intel Corporation Scalable coherence for multi-core processors
US9003225B2 (en) 2012-10-17 2015-04-07 Advanced Micro Devices, Inc. Confirming store-to-load forwards
US9081606B2 (en) * 2012-11-13 2015-07-14 International Business Machines Corporation Asynchronous persistent stores for transactions
GB2501791B (en) 2013-01-24 2014-06-11 Imagination Tech Ltd Register file having a plurality of sub-register files
US9535695B2 (en) * 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
EP2759907B1 (en) 2013-01-29 2024-05-22 Malikie Innovations Limited Methods for monitoring and adjusting performance of a mobile computing device
CN103150146B (zh) 2013-01-31 2015-11-25 西安电子科技大学 基于可扩展处理器架构的专用指令集处理器及其实现方法
US9400653B2 (en) 2013-03-14 2016-07-26 Samsung Electronics Co., Ltd. System and method to clear and rebuild dependencies
EP2972782A1 (en) 2013-03-15 2016-01-20 Intel Corporation Path profiling using hardware and software combination
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
EP2972836B1 (en) 2013-03-15 2022-11-09 Intel Corporation A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
GB2515076B (en) 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache
US9619750B2 (en) 2013-06-29 2017-04-11 Intel Corporation Method and apparatus for store dependence prediction
US9239735B2 (en) 2013-07-17 2016-01-19 Texas Instruments Incorporated Compiler-control method for load speculation in a statically scheduled microprocessor
US9400651B2 (en) * 2013-09-24 2016-07-26 Apple Inc. Early issue of null-predicated operations
US9317284B2 (en) 2013-09-24 2016-04-19 Apple Inc. Vector hazard check instruction with reduced source operands
US20150095578A1 (en) 2013-09-27 2015-04-02 Kshitij Doshi Instructions and logic to provide memory fence and store functionality
US9547496B2 (en) 2013-11-07 2017-01-17 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue
US9448936B2 (en) 2014-01-13 2016-09-20 Apple Inc. Concurrent store and load operations
JP6488711B2 (ja) 2015-01-14 2019-03-27 富士通株式会社 演算処理装置および演算処理装置の制御方法
US9946549B2 (en) 2015-03-04 2018-04-17 Qualcomm Incorporated Register renaming in block-based instruction set architecture
US20170083318A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Configuring modes of processor operation
US20170083320A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Predicated read instructions
US20170083331A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Memory synchronization in block-based processors
US20170083319A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Generation and use of block branch metadata
US10180840B2 (en) * 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101542441A (zh) * 2006-11-22 2009-09-23 可递有限公司 多处理器计算***中的存储器一致性保护
CN102902529A (zh) * 2011-09-07 2013-01-30 微软公司 变换的上下文知晓数据源管理
CN104040487A (zh) * 2011-12-23 2014-09-10 英特尔公司 用于合并掩码模式的指令
CN104126173A (zh) * 2011-12-23 2014-10-29 英特尔公司 不会引起密码应用的算术标志的三输入操作数向量add指令
CN104583958A (zh) * 2012-09-28 2015-04-29 英特尔公司 用于sha256算法的消息调度的指令集
CN104049953A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于合并操作掩码的未经掩码元素的处理器、方法、***和指令
CN104077107A (zh) * 2013-03-30 2014-10-01 英特尔公司 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和***

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
DOUG BURGER等: "Design and Implementation of the TRIPS EDGE Architecture", 《32ND ANNUAL INTERNATIONAL SYMPOSIUM ON (2005)》 *
DOUG BURGER等: "Design and Implementation of", 《32ND ANNUAL INTERNATIONAL SYMPOSIUM ON (2005)》 *
DOUG BURGER等: "TRIPS Processor Reference Manual", 《DEPARTMENT OF COMPUTER SCIENCES, THE UNIVERSITY OF TEXAS AT AUSTIN》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101275A (zh) * 2018-06-26 2018-12-28 天津飞腾信息技术有限公司 一种基于移位的指令提取与缓冲方法及超标量微处理器
CN109101275B (zh) * 2018-06-26 2021-07-23 飞腾技术(长沙)有限公司 一种基于移位的指令提取与缓冲方法及超标量微处理器
CN110928575A (zh) * 2018-09-20 2020-03-27 上海登临科技有限公司 一种多设备同步控制***和控制方法
CN111625280A (zh) * 2019-02-27 2020-09-04 上海复旦微电子集团股份有限公司 指令控制方法及装置、可读存储介质
CN111625280B (zh) * 2019-02-27 2023-08-04 上海复旦微电子集团股份有限公司 指令控制方法及装置、可读存储介质
CN110428359A (zh) * 2019-08-09 2019-11-08 南京地平线机器人技术有限公司 用于处理感兴趣区域数据的装置和方法
CN110428359B (zh) * 2019-08-09 2022-12-06 南京地平线机器人技术有限公司 用于处理感兴趣区域数据的装置和方法
CN114490461A (zh) * 2020-10-27 2022-05-13 Oppo广东移动通信有限公司 一种数据转移控制方法、存储介质及设备
CN114490461B (zh) * 2020-10-27 2024-03-29 Oppo广东移动通信有限公司 一种数据转移控制方法、存储介质及设备

Also Published As

Publication number Publication date
WO2017048646A1 (en) 2017-03-23
CN115390926A (zh) 2022-11-25
US11681531B2 (en) 2023-06-20
US20170083324A1 (en) 2017-03-23
EP3350706A1 (en) 2018-07-25
CN108027773B (zh) 2022-09-20

Similar Documents

Publication Publication Date Title
CN108027773A (zh) 存储器访问指令顺序编码的生成和使用
CN108027767A (zh) 寄存器读取/写入排序
CN108027769A (zh) 使用寄存器访问指令发起指令块执行
CN108139913A (zh) 处理器操作的配置模式
CN108027732A (zh) 与断言的加载指令相关联的预取
CN108027729A (zh) 分段式指令块
CN108027730A (zh) 写入无效
CN106843810B (zh) 跟踪指令的控制流程的设备、方法以及机器可读介质
CN109074260A (zh) 乱序的基于块的处理器和指令调度器
CN108027766A (zh) 预取指令块
CN107810479A (zh) 用于处理器控制传送的目标位置的确定
CN107810483A (zh) 验证基于块的处理器中的跳转目标
CN108027750A (zh) 乱序提交
CN108027770A (zh) 用于数据流isa的密集读取编码
CN108027731A (zh) 针对基于块的处理器的调试支持
CN108027768A (zh) 指令块地址寄存器
CN108027771A (zh) 基于块的处理器核复合寄存器
CN108027778A (zh) 与断言的存储指令相关联的预取
CN108027807A (zh) 基于块的处理器核拓扑寄存器
CN108027734A (zh) 空指令的动态生成
CN108027772A (zh) 用于逻辑处理器的不同的***寄存器
US20170083320A1 (en) Predicated read instructions
CN108027733A (zh) 在目标字段中存储无效
US20080250227A1 (en) General Purpose Multiprocessor Programming Apparatus And Method
CN107810480A (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
GR01 Patent grant
GR01 Patent grant