CN108027735B - 用于操作处理器的装置、方法和计算机可读存储介质 - Google Patents
用于操作处理器的装置、方法和计算机可读存储介质 Download PDFInfo
- Publication number
- CN108027735B CN108027735B CN201680054501.5A CN201680054501A CN108027735B CN 108027735 B CN108027735 B CN 108027735B CN 201680054501 A CN201680054501 A CN 201680054501A CN 108027735 B CN108027735 B CN 108027735B
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- store
- memory access
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 87
- 239000013598 vector Substances 0.000 claims abstract description 38
- 238000005516 engineering process Methods 0.000 abstract description 69
- 238000012545 processing Methods 0.000 description 30
- 238000004891 communication Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 14
- 239000000872 buffer Substances 0.000 description 13
- 230000006870 function Effects 0.000 description 9
- 230000001976 improved effect Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 230000000670 limiting effect Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 3
- 239000000835 fiber Substances 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008685 targeting Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 229920001690 polydopamine Polymers 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 208000003443 Unconsciousness Diseases 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003863 physical function Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/26—Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
- G06F9/262—Arrangements for next microinstruction selection
- G06F9/268—Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent 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/3891—Concurrent 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
- G06F9/528—Mutual exclusion algorithms by using speculative mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/602—Details relating to cache prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/604—Details relating to cache allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
- G06F9/3557—Indexed addressing using program counter as base address
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
公开了用于使用生成指令块中的存储器访问指令的相对排序的硬件结构来控制基于块的处理器架构中的存储器访问指令的执行的装置和方法。在所公开的技术的一个示例中,一种执行具有多个存储器加载和/或存储器存储指令的指令块的方法包括:对编码多个存储器访问指令的指令块进行译码,并生成指示用于执行指令块中的存储器访问指令的相对次序的数据,并且至少部分地基于相对次序的数据来调度指令块的一部分的操作。在一些示例中,存储向量数据寄存器可以存储所生成的相对排序的数据以用于在指令块的后续实例中使用。
Description
技术领域
本申请涉及处理器,具体涉及用于操作处理器的装置、方法和计算机可读存储介质。
背景技术
由于摩尔定律所预测的持续的晶体管扩展,微处理器已经从晶体管数的持续增加、集成电路成本、制造资本、时钟频率、以及能量效率中收益,而相关的处理器指令集架构(ISA)却很小变化。然而,从在过去40年里驱动半导体工业的光刻扩展实现的益处正在放缓或者甚至反转。精简指令集计算(RISC)架构已经成为处理器设计中的主导典范达很多年。乱序超标量实现尚未在面积或性能方面展现出持续改进。因此,存在对于扩展性能改进的处理器ISA改进的足够机会。
发明内容
公开了用于对针对基于块的处理器架构(BB-ISA)的代码进行配置、操作和编译的方法、装置和计算机可读存储设备,基于块的处理器架构(BB-ISA)包括显式数据图形执行(EDGE)架构。针对用于例如改进处理器性能和/或减少能耗的解决方案的所描述的技术和工具可以彼此分离地被实现,或者彼此各种组合被实现。如下面将更充分地描述的,所描述的技术和工具可以被实现在以下各项中:数字信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,使用可重新配置逻辑被实现在现场可编程门阵列(FPGA)中的微处理器核)、可编程逻辑、或者其他适合的逻辑电路。如对于本领域的普通技术人员而言将容易地明显的,所公开的技术可以被实现在各种计算平台中,包括但不限于服务器、大型机、手机、智能电话、PDA、手持式设备、手持式计算机、PDA、触摸屏平板设备、平板计算机、可穿戴计算机、以及膝上型计算机。
在所公开的技术的一个示例中,基于块的处理器被配置为:通过生成指示针对指令块中的存储器访问指令中的两个或更多存储器访问指令的相对排序的标识符,来控制存储器访问指令(例如,存储器加载和存储器存储指令)发出和执行的次序。在一些示例中,存储掩码当对指令块进行译码时被生成,或直接从指令块头部被读取并被存储在硬件结构中。在一些示例中,指令译码器被配置为生成相对排序标识符,其可以被存储用于指令块的后续实例。在一些示例中,一种操作基于块的处理器的方法包括:对指令块进行译码,生成指示用于执行指令块中的存储器访问指令的相对次序的数据,以及基于相对次序的数据来调度指令块的至少一部分的操作。在一些示例中,编译器或解释器将源代码和/或目标代码转换为针对基于块的处理器的可执行代码,包括可以被译码以确定排序的标识符和/或存储掩码信息的存储器访问指令。
提供本发明内容以引入以在具体实施方式中下面进一步描述的简化形式的概念的选择。本发明内容不旨在标识要求保护的主题的关键特征或基本特征,其也不旨在用于限制要求保护的主题的范围。所公开的主题的前述和其他目的、特征以及优点将从参考附图进行的以下具体实施方式变得更加明显。
附图说明
图1图示了如可以在所公开的技术的一些示例中使用的基于块的处理器核。
图2图示了如可以在所公开的技术的一些示例中使用的基于块的处理器核。
图3图示了根据所公开的技术的某些示例的多个指令块。
图4图示了如可以在所公开的技术的一些示例中使用的源代码和指令块的部分。
图5图示了如可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6是图示在指令块被映射、执行和引退时被指派给指令块的多个状态的状态图。
图7图示了如可以在所公开的技术的一些示例中使用的多个指令块和处理器核。
图8是略述如可以在所公开的技术的某些示例中执行的对指令块中的指令进行排序的示例方法的流程图。
图9图示了如可以在所公开的技术的某些示例中使用的示例源代码和汇编代码。
图10A至图10C图示了在所公开的技术的某些示例中可以用于对指令进行排序的图形的示例。
图11至图14图示了如可以在所公开的技术的某些示例中使用的可以用于对指令进行排序的示例数据。
图15A和图15B图示了如可以在所公开的技术的某些示例中使用的使用所生成的相对排序的数据的示例。
图16A和图16B图示了如可以在所公开的技术的某些示例中使用的使用所生成的相对排序的数据的另一示例。
图17是略述了如可以在所公开的技术的某些示例中执行的将源代码和/或目标代码转换成基于块的处理器可执行代码的示例方法的流程图。
图18是图示用于实现所公开的技术的一些实施例的适合的计算环境的块图。
具体实施方式
I.总体考虑
在未旨在以任何方式进行限制的代表性实施例的上下文中阐述了本公开内容。
如在本申请中所使用的,除非上下文清楚地指明,否则单数形式“一”、“一种”和“该”包括复数形式。此外,术语“包括”意味着“包含”。而且,术语“耦合的”涵盖机械的、电的、磁性的、光学的以及将多个项耦合或链接在一起的其他实际方式,并且不排除耦合项之间的中间元件的存在。另外,如在此所使用的,术语“和/或”意味着短语中的多项的组合或任何一项。
在此所描述的系统、方法和装置不应当以任何方式被解释为限制性的。相反,本公开涉及彼此单独并且以各种组合和子组合的各种所公开的实施例的所有新颖和非显而易见的特征和方面。所公开的系统、方法和装置既不限于任何特定方面或者特征或者其组合,所公开的内容和方法也不要求任何一个或多个特定优点存在或者问题被解决。此外,所公开的实施例的任何特征或者方面可以彼此以各种组合和子组合被使用。
虽然为了方便呈现而以特定顺序的次序描述所公开的方法中的一些方法的操作,但是应当理解,除非特定排序由下面阐述的特定语言所要求,否则说明书的这种方式涵盖重新布置。例如,顺序地描述的操作可以在一些情况下重新布置或者并行地执行。此外,出于简单的缘故,附图可能未示出所公开的内容和方法可以结合其他内容和方法使用的各种方式。此外,说明书有时使用类似“产生”、“生成”、“显示”、“接收”、“发射”、“验证”、“执行”和“发起”的术语来描述所公开的方法。这些术语是所执行的实际操作的高层描述。对应于这些术语的实际操作将取决于特定实现而变化,并且是由本领域的普通技术人员容易地可辨别的。
参考本公开的装置或者方法在此所呈现的操作理论、科学原理或者其他理论描述已经出于更好的理解的目的而被提供,并且不旨在范围方面是限制性的。所附的权利要求中的装置和方法不限于以由这样的操作理论所描述的方式起作用的那些装置和方法。
所公开的方法中的任何方法可以被实现为计算机可执行指令,计算机可执行指令被存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质光盘、易失性存储器部件(诸如DRAM或SRAM)或非易失性存储器部件(诸如硬盘驱动器))上,并且被执行在计算机(例如,任何商业可获得的计算机,包括智能电话或者包括计算硬件的其他移动设备)上。用于实现所公开的技术的计算机可执行指令中的任何指令,以及在所公开的实施例的实现期间创建和使用的任何数据,可以被存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由web浏览器或者其他软件应用(诸如远程计算应用)访问或者下载的软件应用的一部分。例如,这样的软件可以在单个本地计算机(例如,利用在任何适合的商业可获得的计算机上执行的通用处理器和/或基于块的处理器)上被执行,或者在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)、或者其他这样的网络)中被执行。
为了清晰起见,描述了基于软件的实现的仅某些所选的方面。省略了在本领域中众所周知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言或者程序。例如,所公开的技术可以通过以C、C++、Java或者任何其他适合的编程语言书写的软件来实现。同样地,所公开的技术不限于任何特定计算机或者硬件类型。适合的计算机和硬件的某些细节是众所周知的并且不需要在本公开中被详细阐述。
此外,基于软件的实施例(包括例如用于使得计算机执行所公开的方法中的任何方法的计算机可执行指令)中的任何实施例可以通过适合的通信手段被上载、被下载或者被远程访问。这样的适合的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或者其他这样的通信手段。
II.对所公开的技术的介绍
超标量乱序微架构采用大量的电路资源来重命名寄存器,以数据流次序调度指令,在误推测之后清理,并且针对精确异常按序引退结果。这包括昂贵的电路,诸如深的许多端口的寄存器文件、用于数据流指令调度唤醒的许多端口的内容可访问存储器(CAM)、以及许多宽总线复用器和旁路网络,所有的这些都是资源密集的。例如,多读取、多写入RAM的基于FPGA的实现通常要求复制、多循环操作、时钟加倍、组交错、实况值表和其他昂贵技术的混合。
所公开的技术可以通过应用包括高指令级并行性(ILP)、乱序(out-of-order,OoO)、超标量执行的技术来实现性能增强,同时避免处理器硬件和相关联的软件二者中的大量的复杂性和开销。在所公开的技术的一些示例中,基于块的处理器使用针对区域和能量高效的高ILP执行所设计的EDGE ISA。在一些示例中,EDGE架构和相关联的编译器的使用巧妙处理许多的寄存器重命名、CAM和复杂性。
在所公开的技术的某些示例中,EDGE ISA可以消除对于一个或多个复杂架构特征的需要,包括寄存器重命名、数据流分析、误推测恢复以及按序引退,同时支持主流编程语言(诸如C和C++)。在所公开的技术的某些示例中,基于块的处理器执行多个(两个或更多)指令作为原子块。基于块的指令可以被用于以更显式的方式表达程序数据流和/或指令流的语义,这允许改进的编译器和处理器性能。在所公开的技术的某些示例中,显式数据图形执行指令集架构(EDGE ISA)包括关于可以用于改进对不适当的控制流指令的检测的程序控制流的信息,从而增加性能、节省存储器资源和/或以及节省能量。
在所公开的技术的一些示例中,在指令块内组织的指令原子地被取指、被执行并且被提交。块内的指令以数据流次序被执行,其使用寄存器重命名减少或者消除,并且提供功率有效的OoO执行。编译器可以被用于通过ISA显式地编码数据依存性,这减少或者消除负担的处理器核控制逻辑在运行时重新发现依存性。使用所断言的执行,块内分支可以被转换为数据流指令,并且除了存储器依存性之外的依存性可以限于直接数据依存性。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接地传递其操作数,这减少对功耗渴望的多端口物理寄存器文件的访问。
在指令块之间,指令可以使用存储器和寄存器来进行通信。因此,通过利用混合数据流执行模型,EDGE架构可以仍然支持命令式编程语言和顺序的存储器语义,但是期望地还享有具有近按序功率效率和复杂性的乱序执行的益处。
公开了用于生成和使用针对基于块的处理器的基于块的分支元数据的装置、方法和计算机可读存储介质。在所公开的技术的某些示例中,指令块包括指令块头部和多个指令。换言之,执行的指令块的指令影响状态,或者作为单元不影响状态。
在所公开的技术的一些示例中,硬件结构存储数据,该数据指示针对多个存储器访问指令要依从的执行次序,该多个存储器访问指令包括存储器加载和存储器存储指令。耦合到处理器核的控制单元至少部分地基于存储在硬件结构中的数据来控制存储器访问指令的发出。因此,存储器读取/写入灾难可以被避免,同时允许指令块中的指令在它们的依存性可获得时就执行。
如相关领域的普通技术人员将容易地理解到,所公开的技术的实现的范围在各种区域和性能折中的情况下是可能的。
III.示例基于块的处理器
图1是如可以被实现在所公开的技术的一些示例中的基于块的处理器100的块图10。处理器100被配置为根据指令集架构(ISA)来执行原子指令块,ISA描述了处理器操作的多个方面,包括寄存器模型、由基于块的指令执行的多个定义操作、存储器模型、中断以及其他架构特征。基于块的处理器包括多个处理器核110,其包括处理器核111。
如在图1中所示,处理器核经由核互连120而彼此连接。核互连120携带数据并且控制核110中的个体核、存储器接口140以及输入/输出(I/O)接口145之间的信号。核互连120可以使用电的、光学的、磁性的或者其他适合的通信技术来传送和接收信号,并且可以取决于特定期望的配置而提供根据多个不同的拓扑布置的通信连接。例如,核互连120可以具有交叉开关(crossbar)、总线、点对点总线、或者其他适合的拓扑。在一些示例中,核110中的任一核可以被连接到其他核中的任何核,而在其他示例中,一些核仅被连接到其他核的子集。例如,每个核可以仅被连接到最近的4、8或20个邻近核。核互连120可以用于将输入/输出数据传送至核以及从核传送输入/输出数据,以及将控制信号和其他信息信号传送至核以及从核传送控制信号和其他信息信号。例如,核110中的每个核可以接收并且传送信号量,该信号量指示当前正由相应核中的每个核执行的指令的执行状态。在一些示例中,核互连120被实现为将核110和存储器系统连接的接线,而在其他示例中,核互连可以包括用于多路复用互连接线上的数据信号的电路、开关和/或路由部件,包括活跃的信号驱动器和中继器或者其他适合的电路。在所公开的技术的一些示例中,在处理器100内以及向/从处理器100被传送的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括差分信号、脉冲信号或者用于传送数据和控制信号的其他适合的信号。
在图1的示例中,处理器的存储器接口140包括被用于连接到附加存储器(例如,被定位在除了处理器100之外的另一集成电路上的存储器)的接口逻辑。外部存储器系统150包括L2高速缓存152和主存储器155。在一些示例中,L2高速缓存可以使用静态RAM(SRAM)被实现,并且主存储器155可以使用动态RAM(DRAM)被实现。在一些示例中,存储器系统150被包括在与处理器100的其他部件相同的集成电路上。在一些示例中,存储器接口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还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的一些示例中,控制单元160至少部分地使用处理核110中的一个或多个处理核被实现,而在其他示例中,控制单元160使用非基于块的处理核(例如,耦合到存储器的通用RISC处理核)被实现。在一些示例中,控制单元160至少部分地使用以下各项中的一项或多项被实现:硬接线有限状态机、可编程微代码、可编程门阵列或者其他适合的控制电路。在备选示例中,可以由核110中的一个或多个核来执行控制单元功能。
控制单元160包括被用于将指令块分配到处理器核110的调度器165。如在此所使用的,调度器块分配涉及引导指令块的操作,包括发起指令块映射、取指、译码、执行、提交、停止、空闲以及刷新指令块。另外,指令调度涉及调度指令块内的指令的发出和执行。例如,基于指示针对存储器访问指令的相对排序的数据和指令依存性,控制单元160可以确定指令块中的哪个(哪些)指令准备好发出并发起指令的发出和执行。处理器核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,其生成控制信号来调节核操作,并且使用指令调度器206调度核内的指令流。可以由控制单元205和/或指令调度器206执行的操作可以包括:生成和使用生成和使用存储器访问指令编码;分配和去分配用于执行指令处理的核;控制任何核、寄存器文件、存储器接口140和/或I/O接口145之间的输入数据和输出数据。
在一些示例中,指令调度器206使用耦合到存储器的通用处理器被实现,存储器被配置为存储用于调度指令块的数据。在一些示例中,指令调度器206使用专用处理器或者使用耦合到存储器的基于块的处理器核被实现。在一些示例中,指令调度器206被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或者基于块的处理器核)上执行的操作系统生成优先级、预测和其他数据,其可以至少部分地被用于利用指令调度器206调度指令块。如对相关领域的普通技术人员将容易地明显的,在集成电路、可编程逻辑或者其他适合的逻辑中实现的其他电路结构可以被用于实现用于指令调度器206的硬件。
控制单元205还包括用于存储控制流信息和元数据的存储器(例如,SRAM或寄存器中)。例如,指示存储器访问指令相对排序的数据可以被存储在诸如存储指令数据存储库207的硬件结构中。存储指令数据存储库207可以存储(例如,通过复制编码于指令块中的数据或当对指令进行译码时通过指令译码器生成的)针对存储掩码的数据、存储计数数据(例如,指示在特定下一指令可以发出之前要被执行的存储器存储的数目的数据)、存储计数器(例如,存储指示已经发出或执行的存储指令的数目的数据的计数器)、存储向量寄存器(例如,指示哪些和什么类型的存储器访问指令已经执行的存储数据)、以及掩码的存储向量寄存器数据(例如,通过将存储掩码应用到存储向量寄存器生成的数据)。在一些示例中,存储指令数据存储库207包括追踪已经执行的存储器访问指令的数目和类型的计数器。在一些示例中,存储指令数据存储库207将数据存储在表(例如,多维表)中,该数据指示:指令标识符、断言、断言路径、加载/存储的数目、或可以用于确定存储器访问指令执行的相对排序的其他信息。
指令译码器228和229可以指定用于发出和执行块内的加载和存储指令的相对次序。例如,数值加载/存储标识符(LSID)可以被指派给每个存储器访问指令,或者被指派给仅仅存储器存储指令。较高编号的LSID指示指令应当在较低编号的LSID之后执行。在一些示例中,处理器可以确定两个加载/存储指令不冲突(例如,基于针对指令的读/写地址),并且可以以不同的次序执行指令,尽管得到的机器状态不应当不同于指令已经以指定的LSID排序执行时的机器状态。在一些示例中,具有互斥的断言值的加载/存储指令可以使用相同的LSID值。例如,如果第一加载/存储指令被断言在为真的值p上,并且第二加载/存储指令被断言在为假的值p上,则每个指令可以具有相同的LSID值。
控制单元205还可以处理硬件中断,并且控制特殊系统寄存器(例如,被存储在一个或多个寄存器文件中的程序计数器)的读取和写入。在所公开的技术的其他示例中,控制单元205和/或指令调度器206使用非基于块的处理核(例如,耦合到存储器的通用RISC处理核)被实现。在一些示例中,控制单元205和/或指令调度器206至少部分地使用以下各项中的一项或多项被实现:硬接线有限状态机、可编程微代码、可编程门阵列、或者其他适合的控制电路。
示例性处理器核111包括两个指令窗口210和211,其中的每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是基于块的处理器指令的原子集合,其包括指令块头部以及多个一个或多个指令。如下面将进一步讨论的,指令块头部包括可以被用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定ISA和处理器硬件,还可以在指令的执行期间使用指令块头部,并且例如通过允许对指令和/或数据的早期取指、改进的分支预测、推测的执行、改进的能量效率以及改进的代码紧密性,来改进执行指令块的性能。在其他示例中,不同数目的指令窗口是可能的,诸如一个、四个、八个或其他数目的指令窗口。
指令窗口210和211中的每个指令窗口可以从输入端口220、221和222中的一个或多个输入端口接收指令和数据,输入端口220、221和222连接到互连总线以及指令高速缓存227,指令高速缓存227进而连接到指令译码器228和229。附加的控制信号还可以在附加的输入端口225上被接收。指令译码器228和229中的每个指令译码器对用于指令块的指令头部和/或指令进行译码,并且将所译码的指令存储在存储器存储库215和216内,存储器存储库215和216被定位在每个相应的指令窗口210和211中。另外,译码器228和229中的每个译码器可以将数据发送到控制单元205,例如以根据在指令块头部中或在指令中指定的执行标志来配置处理器核111的操作。指令译码器228和229中的每个指令译码器被配置为生成指示针对指令块中的一个或多个存储器访问指令的相对排序的标识符。这些标识符可以用于确定针对指令块要被执行的所有存储器访问指令已经执行。例如,指令译码器可以(例如,通过构建控制流图形或等效物)分析指令,以确定与块中的存储器访问指令相关联的断言。基于断言,确定某些存储器访问指令必须在其他存储器访问或跳跃指令之前执行,以便允许合适的指令块实施。
处理器核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而非寄存器文件读取。指令计分板247可以包括针对涉及指令的断言的缓冲器,包括用于组合通过多个指令被发送到指令的断言的接线OR(或)逻辑。
第二指令窗口211的存储器存储库216存储与存储器存储库215类似的指令信息(译码的指令、操作数和记分板),但是出于简单的原因在图2中未示出。指令块可以关于第一指令窗口并发地或者顺序地由第二指令窗口211执行,这受制于ISA约束并且如由控制单元205引导。
在所公开的技术的一些示例中,前端流水线阶段IF和DC可以从后端流水线阶段(IS、EX、LS)运行去耦合。控制单元可以每时钟周期将两个指令取指并且译码到指令窗口210和211中的每个指令窗口中。控制单元205提供指令窗口数据流调度逻辑,以使用记分板245监测每个译码指令的输入(例如,每个相应指令的断言和操作数)的就绪状态。控制单元205还监测指示存储器访问指令的相对排序的数据(例如,使用由指令译码器生成的加载/存储标识符)和指示哪些指令已经执行的数据(例如,通过追踪每个指令和/或维护对已经发出的存储器存储指令的数目的计数)。当针对特定译码指令的所有输入操作数和断言就绪并且任何排序在前的存储器访问指令(例如,排序在前的存储器存储指令)已经发出和/或执行时,指令准备好发出。控制单元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中的指令。因此,由执行的指令影响的可见架构状态(诸如寄存器文件230和存储器)的更新可以本地缓存在核200内,直到指令被提交为止。控制单元205可以确定指令何时准备好被提交、对提交逻辑进行排序并且发出提交信号。例如,指令块的提交阶段可以当所有寄存器写入被缓冲、到存储器的所有写入被缓冲并且分支目标被计算时开始。指令块可以当对可见架构状态的更新完成时被提交。例如,当寄存器写入被写入为寄存器文件、存储被发送到加载/存储单元或者存储器控制器、并且提交信号被生成时,指令块可以被提交。控制单元205还至少部分地控制将功能单元260分配到相应的指令窗口中的每个指令窗口。
如在图2中所示,具有若干执行流水线寄存器255的第一路由器250用于将数据从指令窗口210和211中的任一指令窗口发送到功能单元260中的一个或多个功能单元,功能单元260可以包括但不限于:整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU 267)、移位/旋转逻辑(例如,桶型移位器268)或者其他适合的执行单元,其可以包括图形功能、物理功能和其他数学操作。来自功能单元260的数据可以然后通过第二路由器270被路由到输出290、291和292,被路由回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243),或者被馈送回到另一功能单元,这取决于正被执行的特定指令的要求。第二路由器270包括:加载/存储队列275,其可以被用于发出存储器指令;数据高速缓存277,其存储正输入到核或从核被输出到存储器的数据;以及加载/存储流水线寄存器278。
核还包括控制输出295,其用于指示例如指令窗口210或者211中的一个或多个指令窗口的所有指令的执行何时已经完成。当指令块的执行完成时,指令块被指定为“提交的”并且来自控制输出295的信号可以进而可以由基于块的处理器100内的其他核和/或由控制单元160用于发起其他指令块的调度、取指和执行。第一路由器250和第二路由器270二者可以将数据发送回到指令(例如,作为用于指令块内的其他指令的操作数)。在一些示例中,指示相对排序和执行状态的数据用于确定指令块是否可以被提交。
如相关领域的普通技术人员将容易理解到,个体核200内的部件不限于图2中所示的那些部件,而是可以根据特定应用的要求而变化。例如,核可以具有更少或更多的指令窗口,单个指令译码器可以由两个或更多指令窗口共享,并且所使用的功能单元的数目和类型可以取决于基于块的处理器的特定目标应用而变化。在利用指令核选择并且分配资源时应用的其他考虑包括性能要求、能量使用要求、集成电路裸片、处理技术和/或成本。
对于相关领域的普通技术人员而言将容易明显的,可以通过处理器核110的指令窗口(例如,指令窗口210)和控制单元205内的资源的设计和分配在处理器性能中做出折中。面积、时钟周期、能力和限制实质上确定个体核110的实现性能和基于块的处理器100的吞吐量。
指令调度器206可以具有不同的功能。在某些较高的性能示例中,指令调度器是高并发的。例如,每个周期,译码器将指令的译码就绪状态和译码指令写入到一个或多个指令窗口中,选择要发出的下一个指令,并且作为响应后端发送就绪事件——以特定指令的输入槽(断言、左操作数、右操作数等)为目标的目标就绪事件或者以所有指令为目标的广播就绪事件。每指令就绪状态位连同译码就绪状态一起可以用于确定指令准备好发出。
在一些情况下,调度器206接受尚未被译码的目标指令的事件,并且还必须禁止已发出的就绪指令的重新发出。在一些示例中,指令可以是非断言的、或者断言的(基于真或假条件)。断言的指令直到其由另一指令的断言结果作为目标、并且该结果匹配断言条件时才变得就绪。如果相关联的断言未匹配,则指令绝不发出。在一些示例中,断言指令可以推测地被发出并且被执行。在一些示例中,处理器可以随后检查推测地发出和执行的指令被正确地推测。在一些示例中,误推测的发出指令和消耗其输出的块中的指令的特定传递闭包可以被重新执行、或者被误推测取消的副作用。在一些示例中,对误推测的指令的发现导致整个指令块的完全回滚和重新执行。
在分支到新指令块时,相应的指令窗口就绪状态被清除(块重置)。然而,当指令块分支回到其自身(块刷新)时,仅活跃就绪状态被清除。指令块的译码就绪状态可以因此被保留,使得不需要重新取指并且译码块的指令。因此,块刷新可以被用于节省循环中的时间和能量。
V.示例指令块流
现在转到图3的示图300,图示了基于块的指令流的一部分310,包括若干可变长度指令块311-314。指令流可以被用于实现用户应用、系统服务或者任何其他适合的用途。指令流可以被存储在存储器中,从另一处理被接收在存储器中,通过网络连接被接收,或者以任何其他适当的方式被存储或接收。在图3中所示的示例中,每个指令块从指令头部开始,指令头部被跟随有变化数目的指令。例如,指令块311包括头部320和二十条指令321。所图示的特定指令头部320包括部分地控制指令块内的指令的执行的若干数据字段,并且还允许改进的性能增强技术,包括例如分支预测、推测执行、惰性评估和/或其他技术。指令头部320还包括指令块大小的指示。指令块大小可以处于比一更大的指令的数据块中,例如,被包含在指令块内的4指令数据块的数目。换句话说,块的大小被移动4位,以便压缩被分配到指定指令块大小的头部空间。因此,0的大小值指示最小大小的指令块,其是跟随有四条指令的块头部。在一些示例中,指令块大小被表达为字节数、字数、n字数据块数、地址、地址偏移或者使用用于描述指令块的大小的其他适合的表达。在一些示例中,指令块大小由指令块头部和/或脚部中的终止位模式来指示。
指令块头部320还可以包括一个或多个执行标志,其指示用于执行指令块的一个或多个操作模式。例如,操作模式可以包括核融合操作、向量模式操作、存储器依存性预测、和/或按序或确定性指令执行。
在所公开的技术的一些示例中,指令头部320包括指示编码数据是指令头部的一个或多个标识位。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设置为二进制值1,以指示有效指令块的开始。在其他示例中,不同的位编码可以用于标识位。在一些示例中,指令头部320包括指示相关联的指令块被编码所针对的ISA的特定版本的信息。
指令块头部还可以包括用于在例如分支预测、控制流确定和/或分支处理中使用的若干块退出类型。退出类型可以指示分支指令的类型是什么,例如:顺序分支指令,其指向存储器中的下一相连的指令块;偏移指令,其向相对于偏移而计算的存储器地址处的另一指令块分支;子例程调用、或者子例程返回。通过编码指令头部中的分支退出类型,分支预测器可以至少部分地在相同指令块内的分支指令已经被取指和/或被译码之前开始操作。
图示的指令块头部320还包括存储掩码,其指示编码于块指令中的加载存储队列标识符中的哪些被指派到存储操作。指令块头部还可以包括写入掩码,其标识相关联的指令块将写入那个(那些)全局寄存器。在一些示例中,存储掩码通过例如指令译码器(例如,译码器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(测试小于等于立即(test-less-than-equal-immediate))指令433从ADD接收其单个输入操作数时,其将变为准备好发出并且执行。测试然后产生在信道一(B[1P])上广播到在针对断言的广播信道上监听的所有指令的断言操作数,其在该示例中是两个断言的分支指令(BRO_T 434和BRO_F 435)。接收匹配断言的分支指令将激发(执行),但是编码有互补断言的其他指令将不激发/执行。
指令块420的依存性图形440还被图示为指令节点阵列450和其对应的操作数目标455和456。这图示了块指令420、对应的指令窗口条目以及由指令所表示的底层数据流图形之间的对应性。此处,译码指令READ 430和READ 431准备好发出,因为其不具有输入依存性。当其发出并且执行时,从寄存器R0和R7读取的值被写入到ADD432的右操作数缓冲器和左操作数缓冲器中,这使得ADD 432的左操作数和右操作数“就绪”。因此,ADD 432指令变为就绪、发出到ALU、执行,并且之和被写入到TLEI指令433的左操作数。
VII.示例基于块的指令格式
图5是图示用于指令头部510、通用指令520、分支指令530和存储器访问指令540(例如,存储器加载或存储指令)的指令格式的一般化示例的示图。指令格式可以用于根据在指定操作模式的指令头部中指定的多个执行标志执行的指令块。指令头部或者指令中的每一个根据位数来标记。例如,指令头部510包括四个32位字,并且从其最低有效位(lsb)(位0)被标记直到其最高有效位(msb)(位127)。如所示出的,指令头部包括写入掩码字段、多个退出类型字段、多个执行标志字段、指令块大小字段和指令头部ID位(指令头部的最低有效位)。在一些示例中,指令头部510包括存储器访问指令元数据515,其存储可以用于生成指令块中的存储器访问指令的相对排序的数据,例如断言树大小、存储指令的数目或其他适当的数据。在一些示例中,指令头部不包括存储掩码字段或存储器访问指令元数据,因为数据可以在指令块被译码时被动态地生成。在一些示例中,存储器访问指令元数据被存储为固定长度字段,而在其他示例中,元数据被存储为可变长度字段。
图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)、立即字段(IMM)偏移字段和目标字段。操作码、广播、断言字段在如关于通用指令所描述的格式和功能上类似。例如,特定指令的执行可以根据先前指令(例如,两个操作数的比较)的结果被断定。如果断言为假,则指令将不提交由特定指令计算的值。如果断言值与所要求的断言不匹配,则指令不发出。立即字段(例如,以及偏移的多个位)可以被用作针对被发送到加载或存储指令的操作数的偏移。操作数加上(偏移的)立即偏移被用作针对加载/存储指令的存储器地址(例如,从存储器读取数据或将数据存储到存储器中的地址)。
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,基于块的处理器710包括控制单元720,控制单元720被配置为根据针对一个或多个操作模式的数据来执行指令块。控制单元720包括核调度器725和存储器访问硬件结构730。核调度器725调度包括用于执行指令处理的核的分配和去分配、在任何核、寄存器文件、存储器接口和/或I/O接口之间的输入数据和输出数据的控制的指令流。存储器访问硬件结构730存储元数据731,元数据731包括例如LSID、存储掩码数据、指示哪些指令已经执行的存储向量寄存器数据、掩码存储向量数据、存储计数器和/或任何其他适当的控制流数据。存储器访问硬件结构730可以使用任何适当的技术来实施,包括SRAM、寄存器(例如,包括触发器或锁存器的阵列)或其他适当的存储器技术。存储掩码可以在通过控制单元720译码指令时被生成。在一些示例中,先前由指令译码器针对一个或多个指令块生成的诸如存储计数、存储掩码和/或LSID之类的相对次序数据从存储器750被读取(相对次序数据735),包括利用先前执行的指令块(例如,相对次序数据737和738),或者被读取在诸如存储介质盘736的计算机可读存储介质中(例如,在数据文件739中)。
基于块的处理器710还包括被配置为取指和执行指令块的一个或多个处理器核740-747。所图示的基于块的处理器710具有高达八个核,但是在其他示例中可以存在64个、512个、1024个或其他数目的基于块的处理器核。基于块的处理器710耦合到包括多个指令块(包括指令块A和B)的存储器750,并且耦合到计算机可读存储介质盘736。
X.利用生成的相对排序数据的指令块的调度操作的示例方法
图8是略述如可以在所公开的技术的某些示例中执行的生成指示存储器访问指令的相对排序的数据的示例方法的流程图800。例如,包括以上在图2中描述的基于块的处理器核111的图1的基于块的处理器100可以用于执行所略述的方法。在一些示例中,基于块的处理器的指令译码单元被配置为生成相对排序数据,并将数据存储在存储器或寄存器中以用于在特定指令块的后续实例中使用,并且基于块的处理器的控制单元被配置为:至少部分地基于相对排序数据,来控制将存储器访问指令发出到处理器的执行单元,存储器访问指令包括存储器加载和存储器存储指令。
在处理块810处,例如通过指令译码器228或229来对编码存储器访问指令的指令块进行译码,并且生成指示指令的相对排序的数据。例如,编码于指令块指令内的操作码、存储器目标、断言和其他信息可以用于生成数据。在一些示例中,附加元数据可以被存储在指令块内以便进一步增强数据的生成。例如,通过存储对指令块中的存储器存储指令的数目的计数和/或关于指令块内的断言的信息,相对排序可以以更高效的方式来生成(例如,通过要求更少的处理器硬件,通过减少指令译码时间,和/或通过使用更少的存储器资源)。在一些示例中,相对排序数据可以被存储为存储基于块的处理器指令的存储器中的一个或多个表。适当的数据的示例可以包括关于以下的数据:针对指令块的断言路径、指令块中的加载的数目、指令块中的存储的数目、沿着特定断言路径的加载或存储的数目、针对指令块的指令标识符(例如,LSID),以及以某种方式组合的该数据的版本。在一些示例中,可以针对表示指令块内的指令流的控制流图形中的特定节点生成数据,而在其他示例中,数据可以与这样的控制流块的边相关联。如对于相关领域的普通技术人员将容易理解的,在备选实施例中,可以采用在下面描绘的图示中的表达数据的备选形式。
在处理块820处,基于相对排序数据来调度指令块的一部分的操作。因此,指令块内的个体指令可以基于所生成的相对排序数据结合指示当前执行的指令块的执行状态的数据来发出和执行。例如,相对排序数据可以包括指示存储器存储指令必须被执行的次序的相对标识符。控制单元使较高排序的指令等待较低排序的存储器指令在继续进行发出较高排序的指令之前发出和/或执行。取决于编码于指令块内的特定指令,指令块的全部或部分可以使用相对排序数据来调度。
在处理块830处,将在处理块810处生成的相对排序数据存储在存储器存储库中。该存储器存储库可以在指令块的附加执行实例之间被保持。因此,相对排序数据可以针对执行指令块的第一实例被生成,并且之后用于执行相同指令块的许多后续实例。在存储相对排序数据之后,该方法前进到处理块840。
在处理块840处,针对执行指令块的实例的后续实例,取回和使用所存储的相对排序数据。因此,指令译码器可以通过不重新生成针对指令的相对排序数据而节省能量和时间。在取回相对排序数据之后,该方法前进到处理块820,以便基于所取回的相对排序数据来调度指令块的至少一部分的操作。
相对排序数据可以被存储在任何适当的硬件结构中,例如以上进一步详细讨论的存储指令数据存储库207。在一些示例中,硬件结构可以包括存储掩码、内容可寻址存储器(CAM)和/或查找表。在一些示例中,控制单元可以包括用于存储指示存储器访问指令中的哪些(例如,如由它们的指令号或LSIDS指示的)已经执行的数据的存储的向量寄存器。在一些示例中,处理器控制单元被配置为防止指令块的提交,或者延迟另一指令块的执行,直到存储器存储的指令中的全部指令已经执行。在一些示例中,处理器控制单元包括计数器,当存储器加载和/或存储器存储指令被执行时,计数器被更新(例如,增量),并且在计数器达到针对该特定指令的预定值时,指令块或者指令块内的特定存储器访问指令被指示为被完成时。在一些示例中,处理器核被配置为执行断言的指令,包括断言的存储器访问指令。
XI.示例源代码和目标代码
图9图示了如可以在所公开的技术的某些示例中使用的用于基于块的处理器的源代码910和对应的汇编代码920的示例。源代码910包括if/else语句。if/else语句的每个部分内的语句包括对数组a[]和b[]的多个存储器读取和存储器写入。当源代码910被转换为汇编代码(并且随后,被存储为目标代码的机器代码)时,将生成多个加载和存储汇编指令。
针对源代码部分910的汇编代码920包括编号0至27的28个指令。汇编指令指示多个字段,例如指令操作码、由指令指定的源数据(例如广播标识符或直接自变量)、以及目标指代。汇编代码包括寄存器读取指令(0-3)、算术指令(例如,指令3和4)以及用于将数据发送到多个目标的移动指令(例如,移动指令5和6)。汇编代码920还包括测试指令11,其是测试是否大于将在广播信道2上生成断言值的指令。另外,汇编代码包括两个未断言的存储器加载指令7和8以及断言的存储器加载指令16和23。汇编代码920还包括多个存储器存储指令,其将会把数据存储到存储器地址,例如断言的存储指令12、13、18和26。如下面将示出的,LSID可以由译码器生成以指示存储器访问指令要被执行的相对排序。例如,指令12和13依赖于首先执行的加载指令7和8。在一些示例中,两个或更多加载存储指令可以共享LSID。在一些示例中,LSID由指令集架构要求为相连的,而在其他示例中,LSID可以为稀疏的(例如,中间LSID值被跳过)。还应当指出,在一些示例中,块中的指令的推测的或乱序的执行可以被执行,但是处理器必须仍然保持与在由LSID指定的存储器依存性未被违反时一样的语义。
汇编代码部分920可以被转换为机器代码以用于由基于块的处理器的实际执行。
XII.示例控制流图形
图10A图示了针对以上关于图9描述的汇编代码920生成的控制流图形100。例如,指令译码器可以生成表示控制流图形中图示的依存性的至少一部分的数据。为便于说明,控制流图形1000以包括节点和边的图形形式来描绘,但是如对于相关领域的普通技术人员将容易显而易见的,可以以其他形式表示。为便于说明,在控制流图形中示出了来自汇编代码920的仅仅加载、存储和跳跃指令,但是应当理解,其他指令将根据每个相应指令的依存性和断言由控制流图形的节点放置或引用。
如所示出的,源代码部分1010包括加载指令7和8,其未被断言并且因此可以在一旦它们的操作数可获得时就发出和执行。例如,汇编代码移动指令5将与a[i]相关联的存储器地址发送到移动指令5,移动指令5继而将地址发送到加载指令7。加载指令7可以在一旦地址可获得时就执行。诸如读取指令0至2的其他指令也可以在没有引用断言的情况下被执行。
节点1020由于条件指令11而被生成,条件指令11通过将两个值进行比较而生成布尔值(例如,针对一个操作数大于另一个的测试)。如果测试指令的左操作数大于断言,则条件值为真,并且仅仅针对代码部分1030的指令将执行。相反,如果条件值为假,则代码部分1035将执行。在所公开的基于块的处理器架构中,这可以在不使用分支或跳跃的情况下被执行,因为相关联的指令被断言。例如,指令12是在广播信道2上被断言的存储指令,其由测试指令11生成。类似地,指令16将仅仅在广播断言的值为假时执行。当指令中的每个指令执行时,存储向量和/或存储计数器被更新以指示存储指令是否已经执行。
另一节点1040由于条件指令20而被生成,条件指令20本身是在从指令11接收假条件时被断言的。源代码部分1050(包括加载指令23)和1055(包括存储指令26)将分别以由指令20生成的断言为真或假为条件而执行。
控制流图形1000还包括汇合节点1060,其表示转变回到在源代码910的if/else语句之外被包含的语句。在该示例中,这包括跳跃指令27,其将处理器的控制转移到下一指令块。应当指出,尽管存储器访问指令根据所生成的相对排序数据(例如,LSID和/或计数器值)来执行,但是指令还将在发出之前等待其他依存性。
图10B图示了在指示存储器访问指令的相对排序的动态生成的标识符已经被生成之后、针对汇编代码920生成的控制流图形1000的示例。例如,图10A中图示的控制流图形可以利用如所示出的指示相对排序的LSID被进一步补充。例如,源代码部分1010被指派以针对指令号7的LSID值0(零)和针对指令号8的LSID值1。LSID可以在断言路径的不同分支之间被重新使用。例如,针对与节点1020相关联的断言p,LSID值2和3与源代码部分1030和源代码部分1035二者相关联,因为两个源部分的执行在指令块的特定实例内互斥。在其他示例中,LSID在专属断言路径之间不被共享。
图10C图示了针对汇编代码920生成的控制流图形1000的相对排序数据的备选示例,其中存储器存储计数已经被添加到控制流图形并且加载存储标识符未被使用。如所示出的,控制流图形的边的数目已经被更新,以指示在相关联的源代码部分已经被执行之后将已经被执行的存储器存储指令的数目。例如,源代码部分1010不包括任何存储器存储指令,并且因此在离开源代码部分1010的边上的计数被设置为零。源代码部分1030包括两个存储器存储指令,并且因此,执行源代码部分节点的边被设置成为2的计数,而源代码部分1035包括一个存储器存储指令,并且因此它的边与为一的计数相关联。应当指出,所图示的示例中的边计数从图形的开始累积,但是在其他示例中,计数可以只与源代码的一个部分相关联。例如,源代码部分1055包括一个存储器存储指令,但是与其离开的边相关联的存储器存储指令计数被设置为两个,这是将针对通过控制流图形的该路径执行的存储器存储指令的累积数目。另外,如所示出的,源代码部分1050不包括存储指令,但是空指令已经被插入,其将使存储器存储指令计数增量。这用于平衡似乎已经针对通过控制流图形的每个路径执行的存储指令的数目。因此,在节点1060处,在确定是否要执行相关联的指令之前,控制单元硬件可以确定存储器存储指令计数是否已经达到单个值2。在一些示例中,空指令被生成并被插入到指令块本身的指令中。在其他示例中,存储指令由处理器核硬件无效(nullified),使得其似乎与存储器存储指令已经执行时一样,但是不将指令存储在指令块中。本领域的普通技术人员应当容易理解,相对排序数据可以以多种不同的方式来表示和存储。例如,在各种实施例中,指令标识符和/或存储计数可以与节点、边或个体指令相关联。
XII.表示存储器访问指令的相对排序的数据的示例
图11至图14图示了如可以在所公开的技术的某些示例中使用的表示存储器访问指令的相对排序的数据的示例布置。例如,图示的数据可以被存储在可以由处理器控制单元和/调度器访问的存储指令数据存储库中。相对排序数据可以由指令译码器使用与以上关于图2讨论的技术类似的技术来生成。
图11图示了存储与针对图10A至图10C的控制流图形的多个不同断言路径相关联的指令标识符和存储器访问信息的示例表。如所示出的,每个列与通过控制流图形的不同路径相关联,例如总是执行的、采用的断言p、断言p假、断言p和q真(11)等。在指令ID#行中,与那些指令相关联的指令标识符被存储。例如,指令7和8将总是执行,而不管指令块中的断言如何。另一方面,指令号12和13将仅仅在断言p为真时执行。指令号23将仅仅在断言p为假并且断言q为真时执行。最后一行指示相关联的指令是否是分别由L或S指示的加载或存储。因此,存储器访问指令的相对排序可以基于断言和它们相关联的指令标识符来确定。断言路径11和10利用破折号来标记,因为在断言p为真时,断言值q是不关心的条件。
图12图示了以图11中示出的格式的备选格式编码针对图10A至图10C的控制流图形的相对排序信息的表。如所示出的,断言路径中的每个断言路径被枚举,但是不枚举不关心的断言路径。因此,指令标识符行将包括分别针对断言路径11和10的指令12和13的副本。该表还包括指示相关联的指令是加载还是存储的信息,以及指示将针对每个相关联的断言路径执行的存储指令的总数目的附加行。因此,当指令被执行并且断言被解析时,可以确定存储器访问指令的相对排序。
图13图示了如可以在所公开的技术的某些示例中实施的用作存储向量寄存器的示例表。存储向量寄存器中的信息可以与相对排序数据进行比较,以便确定存储器访问指令是否可以被执行和/或指令块是否被允许提交。如所示出的,该表具有2行,其中的1行指示沿着第一行中的断言路径的每个部分执行的加载和存储的数目。因此,针对源代码部分1010,存在针对采用的断言p的总计2个加载存储指令,针对源代码部分1030,存在总计2个加载存储指令,而针对源代码部分1035,存在总计2个加载存储指令。最后一行指示与断言路径相关联的存储指令的数目。因此,针对源代码部分1030,存在2个源存储指令,而针对断言路径00,存在2个存储指令。因此,公开了追踪存储器访问指令的执行的备选方式。
图14图示了如可以在所公开的技术的某些示例中使用的可以被存储在存储向量寄存器中的数据的另一示例。在图14的寄存器中,每列与特定存储器访问指令标识符:7、8、12等相关联。每行与针对图10A的控制流图形的特定断言路径相关联。因此,1位指示哪些指令标识符具有将取决于断言条件如何解析而执行的存储指令。最后一行是表示针对每列的所有行的逻辑OR(或)的OR掩码。因此,该数据可以用于在指令块的执行前进时追踪存储器指令的执行状态和相对排序。
XIV.示例存储掩码/存储向量比较
图15A和图15B图示了如可以在所公开的技术的某些示例中执行的将存储掩码与存储向量进行比较的示例。例如,如图15A所示,存储掩码1500存储针对与汇编代码920中的存储器访问指令的汇编代码相关联的指令ID的1、0或n值。因此,指令ID 7、8、16和23与存储器加载指令相关联,而标识符12、13、18和26与存储器存储指令相关联。存储掩码位针对加载指令被设置为1,并且针对存储指令被设置为0。存储掩码1500使用断言p和q来更新,因为它们在指令块被执行时被生成。因此,示出的存储掩码1500在断言p被评估为假之后被描绘,并且因此指令标识符12和13被设置为n以指示指令将决不会针对指令块的该特定实例被执行。所图示的电路还包括存储掩码向量1510,使用比较电路1520将其与存储掩码1510进行比较,以产生掩码的存储向量1530。存储掩码向量1510存储针对已经执行的那些指令的一位。因此,存储器访问指令7、8和16已经执行。因此,存储掩码向量指示指令18(存储掩码向量1530中的第一个0)免于下次发出。在一些示例中,如果存储器访问指令的排序要被保留(例如,以帮助调试或确保合适的系统操作),则存储器访问指令的重新排序可以使用例如指令块头部中的标志设置来禁止。
图15B图示了在附加数目的指令已经执行之后生成掩码的存储向量比较的示例。如所示出的,存储掩码向量1540已经被更新以指示指令18已经执行。因此,OR逻辑比较的结果指示将对应于指令18的位设置为1值,因此指示指令26可以现在前进以基于所生成的相对排序数据来执行。
图16A和图16B图示了如可以在所公开的技术的某些示例中执行的使用存储指令计数器比较存储掩码的示例。因此,存储计数器可以与以上关于图15A和图15B讨论的存储掩码向量一起使用或者代替其使用。如所示出的,存储掩码1600存储期望在特定指令被执行之前要被执行的多个存储指令。因此,在23和26处的指令均期望单个存储指令(存储指令18)必须在指令23或指令26之前被执行。存储指令计数器1610存储在该时间点已经执行的存储器存储指令的总数目。存储指令计数器数据和存储掩码数据由比较电路1620比较,比较电路1620将已经执行的存储指令的总数目与存储掩码进行比较,并输出掩码的存储向量1630,因此掩码的存储向量1630指示哪些存储指令可以被认为是已经执行。在其他示例中,仅仅存储器存储操作而非存储器加载操作由图16A的电路监测。在一些示例中,寄存器被指派到保持在存储指令之前有多少存储指令的计数的指令块中的每个指令。处理器加载/存储队列可以用于缓冲针对存储器加载和存储生成的数据,直到指令块提交,并且之后存储器操作被写入到存储器作为提交阶段的部分。
图16B图示了在存储指令已经执行之后的图16A的电路。因此,如所示出的,存储指令计数器1640已经增加到1。比较电路1620将存储掩码数据与计数器进行比较,并将掩码的存储向量寄存器1650设置为全部1位,指示存储器访问指令中的任何存储器访问指令可以现在前进以执行。
XV.转换代码的示例方法
图17是略述如可以在所公开的技术的某些示例处执行的将代码转换成针对基于块的处理器的计算机可执行代码的示例的流程图1700。例如,通用处理器和/或基于块的处理器可以用于实施图7中略述的方法。在一些示例中,代码由编译器转换并被存储为可以由基于块的处理器(例如,基于块的处理器100)执行的目标代码。在一些示例中,即时编译器或解释器在运行时生成计算机可执行代码。
在处理块1710处,分析编码于源代码和/或目标代码中的存储器引用,以确定存储器依存性。例如,存储器依存性可以简单地为存储器访问指令被布置在程序中的次序。在其他示例中,有可能通过存储器访问指令写入的存储器地址可以被分析,以确定在指令块中的加载存储指令之间是否存在重叠。在一些示例中,确定存储器依存性包括:标识指令块中的两个存储器访问指令,存储器访问指令中的第一存储器访问指令在存储器访问指令中的第二存储器访问指令的互补条件上被断言;以及基于标识来确定针对第一和第二存储器访问指令的相对排序。在分析存储器引用之后,该方法前进到处理块1720。
在处理块1720处,将源代码和/或目标代码转换成基于块的计算机可执行代码,基于块的计算机可执行代码可以用于动态地生成指示在处理块1710处确定的相对排序的针对存储器访问指令的标识符。在一些示例中,仅仅存储器访问指令而非元数据被生成和存储以帮助生成相对次序。在这种情况下,指令块内的操作码和断言被指派,其可以用于在指令块的译码后生成相对排序。
在处理块1730处,生成诸如断言树信息、块中的存储指令的数目的计数、或可以用于生成相对指令排序的其他信息的附加元数据,并将其与指令一起存储(例如,在指令块头部或脚部中)。在一些示例中,生成存储掩码,并将其存储为针对指令块的指令块头部。在一些示例中,提供特殊指令以便将数据加载到控制单元的存储器中,以用于例如在对存储向量进行掩码中使用。一旦代码已经被转换成基于块的处理器代码,其就可以被存储在计算机可读存储介质中或者经由计算机网络被传送到另一位置以用于由基于块的处理器执行。在一些示例中,所生成的代码可以包括用于在指令块的执行期间动态地生成程序排序并保存关于次序的数据以用于指令块的后续调用的指令。
XVI.示例性计算环境
图18图示了在其中可以实现所描述的实施例、方法和技术(包括对基于块的处理器进行配置)的适合的计算环境1800的一般化示例。例如,如在此所描述的,计算环境1800可以实现用于对处理器进行配置以生成针对一个或多个指令块的相对排序数据或将代码编译成用于执行这样的操作的计算机可执行指令的所公开的技术。
计算环境1800不旨在提出关于技术的使用或者功能的范围的任何限制,因为技术可以被实现在不同的通用或者专用计算环境中。例如,所公开的技术可以利用其他计算机系统配置被实现,包括手持式设备、多处理器系统、可编程消费者电子产品、网络PC、微型计算机、大型计算机,等等。所公开的技术还可以被实践在分布式计算环境中,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以被定位在本地存储器存储设备和远程存储器存储设备二者中。
参考图18,计算环境1800包括至少一个基于块的处理单元1810和存储器1820。在图18中,该最基本配置1830被包括在虚线内。基于块的处理单元1810执行计算机可执行指令并且可以是真实或者虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令,以增加处理能力,并且如此多个处理器可以同时运行。存储器1820可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器等)或者两者的某一组合。存储器1820存储可以例如实现在此所描述的技术的软件1880、图像和视频。计算环境可以具有附加特征。例如,计算环境1800包括存储装置1840、一个或多个输入设备1850、一个或多个输出设备1860和一个或多个通信连接1870。互连机构(未示出)(诸如总线、控制器或者网络)将计算环境1800的部件相互连接。通常,操作系统软件(未示出)提供用于在计算环境1800中执行的其他软件的操作环境,并且协调计算环境1800的部件的活动。
存储装置1840可以是可移除或者不可移除的,并且包括磁盘、磁带或者磁带盒、CD-ROM、CD-RW、DVD或者可以被用于存储信息并且可以在计算环境1800内被访问的任何其他介质。存储装置1840存储用于软件1880的指令、插入数据和消息,其可以被用于实现在此所描述的技术。
输入设备1850可以是触摸输入设备,诸如键盘、小键盘、鼠标、触屏显示器、笔或轨迹球、语音输入设备、扫描设备或者向计算环境1800提供输入的另一设备。对于音频而言,输入设备1850可以是以模拟或者数字形式接受音频输入的声卡或者类似设备,或者向计算环境1800提供音频样本的CD-ROM读取器。输出设备1860可以是显示器、打印机、扬声器、刻录机或者提供来自计算环境1800的输出的另一设备。
通信连接1870使能通过通信介质(例如,连接网络)与另一计算实体的通信。通信介质传达诸如计算机可执行指令、压缩图形信息、视频或者调制数据信号中的其他数据的信息。通信连接1870不限于有线连接(例如,兆比特或吉比特以太网、无限带宽、电气或光纤连接上的光纤信道),而且还包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)和用于提供用于所公开的方法的网络连接的其他适合的通信连接。在虚拟主机环境中,通信连接可以是由虚拟主机所提供的虚拟化网络连接。
可以使用实现计算云1890中的所公开的技术的全部或部分的计算机可执行指令来执行所公开的方法的一些实施例。例如,所公开的编译器和/或基于块的处理器的服务器被定位在计算环境中,或者所公开的编译器可以在被定位在计算云1890中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或者CISC处理器)上执行。
计算机可读介质是可以在计算环境1800内被访问的任何可用介质。以示例而非限制的方式,利用计算环境1800,计算机可读介质包括存储器1820和/或存储装置1840。如应当容易理解的,术语计算机可读存储介质包括用于数据存储的介质(诸如存储器1820和存储装置1840)而非传输介质(诸如调制数据信号)。
XVII.所公开的技术的附加示例
根据上文所讨论的示例在此讨论了所公开的主题的附加示例。
在所公开的技术的一些示例中,一种装置包括存储器和一个或多个基于块的处理器核,核中的至少一个核包括:指令译码器,其被配置为生成指示针对从指令块译码的多个存储器访问指令的相对排序的标识符;以及控制单元,其被配置为至少部分地基于使用所生成的标识符中的至少一个标识符来发出指令块中的存储器访问指令,以确定要针对指令块执行的所有存储器访问指令已经执行。
在一些示例中,核中的一个或多个核还包括加载/存储队列,其使用所生成的标识符来确定是否要发出存储器访问指令中的一个或多个存储器访问指令。在一些示例中,指令译码器还被配置为生成针对所译码的指令块的两个或更多断言的执行路径中的每个断言的执行路径的存储掩码,存储掩码指示标识符中的哪些标识符与指定类型的存储器访问指令相关联。在一些示例中,控制单元还被配置为通过将针对已经执行的存储器访问指令的所生成的标识符与针对断言的执行路径中的采取的一个断言的执行路径的存储掩码进行比较,来提交指令块。在一些示例中,控制单元还用于根据由所生成的标识符指定的排序来执行存储器访问指令。在一些示例中,指令译码器还被配置为生成针对所译码的指令块的两个或更多断言的执行路径中的每个断言的执行路径的存储计数,每个存储计数指示针对断言的执行路径中的相应一个断言的执行路径被执行的存储指令的数目。在一些示例中,所生成的标识符被存储在高速缓存中以用于由指令块的后续实例使用。
在一些示例中,处理器核还包括存储指令数据存储库,并且控制单元还被配置为将指示存储器访问指令中的哪些存储器访问指令已经执行的数据存储在存储指令数据存储库中,并且基于存储指令数据存储库中存储的数据来提交指令块。
在一些示例中,装置还包括存储针对指令块头部和针对指令块中的存储器访问指令的数据的计算机可读存储介质。
在所公开的技术的一些示例中,操作处理器来执行包括多个存储器加载和/或存储器存储指令的指令块的方法包括以下动作:对编码多个存储器访问指令的指令块进行译码,并生成指示用于执行指令块中的存储器访问指令的相对次序的数据;以及至少部分地基于相对次序的数据来调度指令块的一部分的操作。在一些示例中,相对次序的数据包括针对存储器访问指令中的一个或多个存储器访问指令的加载存储标识符(LSID)。在一些示例中,译码包括将相对次序的数据存储在存储器中,并且方法还包括针对指令块的后续实例:取回针对指令块的所存储的相对排序的数据,并且第二次执行指令块,执行包括至少部分地基于所存储的相对次序的数据来调度指令块的一部分的操作。在一些示例中,调度包括至少部分地基于所生成的标识符中的一个或多个标识符来确定指令块的指令是否可以执行和/或指令块是否可以提交。在一些示例中,存储器访问指令不是利用LSID来编码的。在一些示例中,译码还包括:针对多个存储器访问指令的断言的执行路径,确定当采取断言的执行路径时执行的存储器访问指令的数目。
在一些示例中,方法还包括根据第一或第二断言的执行路径来执行针对指令块的指令,并且执行包括对执行的加载和/或存储指令的数目进行计数,并且方法还包括将执行的加载和/或存储指令的数目与所确定的存储器访问指令的数目进行比较。
在一些示例中,所确定的数目是第一数目并且断言的执行路径是第一执行路径,并且译码还包括确定针对多个存储器指令的第二执行路径执行的存储器访问指令的第二数目,并且如果指令的第一数目不等于存储器指令的第二数目,则将一个或多个空指令插入到具有较少数目的指令的断言的执行路径。
在一些示例中,译码还包括从指令块的指令头部译码存储计数、指示存储器排序是否必须针对块被强制执行的标志、断言路径和/或存储掩码信息。在一些示例中,方法还包括:生成针对指令块的两个或更多断言路径中的每个断言路径的存储掩码;将存储掩码进行组合以生成针对指令块的存储掩码;将所组合的存储掩码与针对采取的断言路径的存储掩码进行比较;以及基于比较,确定使一个或多个LSID无效,其中,调度将无效的LSID考虑为如同相关联的指令已经执行。
在所公开的装置和方法的一些示例中,生成针对所有断言路径的存储掩码。在一些示例中,生成针对所有断言路径的存储计数,并且存储计数还用于确定何时提交指令块。在一些示例中,存储指令数据存储库是寄存器或存储器,并且有效位与每个存储相关联。
在一些示例中,选择还基于将指示已经执行的存储器加载和/或存储器存储指令的数目的计数器值与所选择的下一指令中编码的标识符进行比较。在一些示例中,LSID不被密集编码。在一些示例中,相对次序由以下中的一个或多个来指定:指令块头部中编码的数据、指令块的一个或多个指令中编码的数据、在译码指令块后动态地生成的表中编码的数据、和/或在指令块的先前执行期间编码的高速缓存的数据。
在所公开的技术的一些示例中,某些方法还包括:基于针对执行的指令的生成的LSID,更新存储向量以指示指令被执行。在所公开的技术的一些示例中,某些方法还包括:基于所生成的LSID来生成指示所生成的LSID中的哪些LSID与存储器存储指令相关联的存储掩码,并且基于存储掩码来确定指令块是否可以被提交。在所公开的技术的一些示例中,某些方法还包括:基于所生成的LSID来生成指示所生成的LSID中的哪些LSID与存储器存储指令相关联的存储掩码,并且基于存储掩码来确定具有排序在后的LSID的存储器访问指令是否可以执行。
在所公开的技术的一些示例中,指令译码还包括:针对多个存储器访问指令中的第一指令和第二指令,确定第一指令被编码为基于断言条件来有条件地执行,确定第二指令被编码为基于断言条件的补码来有条件地执行,其中,生成LSID将相同的LSID指派给第一指令和第二指令。
在所公开的技术的一些示例中,某些方法还包括:从针对指令块的头部译码数据,所译码的数据包括针对指令块的以下数据中的至少一个或多个:断言路径、存储掩码、和/或与存储器访问指令相关联的指令数目。在一些示例中,所确定的存储器访问指令的数目包括仅仅存储器存储指令的数目。在一些示例中,数据被编码在包括存储器访问指令的指令块的头部字段中。在一些示例中,比较/组合包括对存储掩码进行逻辑OR(或)。
在一些示例中,指令块头部数据可以包括编码断言路径和/或针对那些路径的存储掩码、头部前缀位、有效位和/或指令数目。在一些示例中,所生成的标识符被存储在高速缓存(例如,指令高速缓存、头部高速缓存、LSID高速缓存、或其他形式的高速缓存)中以用于由指令块的后续实例使用。在一些示例中,所生成的标识符可以被高速缓存或存储在计算机可读存储介质中以用于块的后续调用。
在所公开的技术的一些示例中,一种生成针对基于块的处理器的目标代码的方法包括:分析源代码和/或目标代码中编码的存储器访问,以确定针对指令块的存储器依存性;以及将源代码和/或目标代码转换成针对指令块的计算机可执行代码,计算机可执行代码包括存储器访问指令,存储器访问指令可以用于生成指示存储器访问指令的相对排序的标识符。
在一些示例中,方法还包括将不是存储器访问指令的部分的附加数据与计算机可执行代码一起存储,附加数据能由指令译码器使用以动态地生成标识符。在一些示例中,数据包括以下中的至少一个或多个:指令块中的存储器访问指令的数目的指示、指令块中的存储的数目的指示、或存储器访问指令的位置的指示。在一些示例中,存储器访问指令中的至少一个存储器访问指令被断言,并且数据包括指令块中的一个或多个断言路径的指示。
在所公开的技术的一些示例中,计算机可读存储介质存储针对指令块的计算机可读指令,计算机可读指令当由处理器执行时,使处理器执行本文中公开的方法中的任何一个或多个方法。
鉴于所公开的主题的原理可以适用的许多可能实施例,应当认识到,所图示的实施例仅是优选的示例,并且不应当被视为将权利要求的范围限于那些优选的示例。相反,要求保护的主题的范围由所附权利要求限定。我们因此根据我们的发明要求保护落在这些权利要求的范围内的全部内容。
Claims (21)
1.一种包括存储器和一个或多个处理器核的装置,所述核中的至少一个核包括:
指令译码器,被配置为:
对针对指令组的控制流进行译码,所述控制流包括多个断言路径,所述断言路径中的每个断言路径与由所述指令组中的相应断言指令生成的条件的不同组合相关联,以生成并且在存储器中的表中存储指示针对从指令组译码的多个存储器访问指令的相对排序的数据,所述相对排序将所述多个存储器访问指令中的每个存储器访问指令与所述多个断言路径中的相应一个或多个断言路径相关联,所述相应一个或多个断言路径在被采取时将使得相关联的所述存储器访问指令执行;
存储向量寄存器,被配置为存储指示所述多个存储器访问指令中的哪些存储器访问指令已经执行的数据;
存储器中的存储指示所述相对排序的所述数据的所述表,所述数据指示如果相应断言路径被采取则将被执行的加载指令的数目、存储指令的数目、或者加载和存储指令的数目;以及
控制单元,被配置为通过将在所述存储向量寄存器中存储的数据与在所述表中存储的指示所述相对排序的所述数据进行比较,来发出所述指令组中的存储器访问指令。
2.根据权利要求1所述的装置,还包括加载/存储队列,所述加载/存储队列使用所生成的数据来确定是否要发出所述存储器访问指令中的一个或多个存储器访问指令。
3.根据权利要求1所述的装置,其中,所述相对排序数据包括存储掩码,并且其中,所述指令译码器还被配置为生成针对所译码的指令组的两个或更多断言的执行路径中的每个断言的执行路径的所述存储掩码,所述存储掩码指示所述指令组中的哪些指令与指定类型的存储器访问指令相关联。
4.根据权利要求3所述的装置,其中,所述控制单元还被配置为通过将针对已经执行的存储器访问指令的所生成的数据与针对所述断言的执行路径中的采取的一个断言的执行路径的所述存储掩码进行比较,来提交所述指令组。
5.根据权利要求1所述的装置,其中,所述控制单元还用于根据由所生成的数据所指定的排序来执行所述存储器访问指令。
6.根据权利要求1所述的装置,其中,所述指令译码器还被配置为生成针对所译码的指令组的两个或更多断言的执行路径中的每个断言的执行路径的存储计数,每个存储计数指示针对所述断言的执行路径中的相应一个断言的执行路径被执行的存储指令的数目。
7.根据权利要求1所述的装置,还包括:
存储指令数据存储库,其中,所述控制单元还被配置为将指示所述存储器访问指令中的哪些存储器访问指令已经执行的数据存储在所述存储指令数据存储库中;以及
基于所述存储指令数据存储库中存储的所述数据,来提交所述指令组。
8.根据权利要求1所述的装置,其中,所述存储向量寄存器存储指示针对每个相关联的断言路径将被执行的存储指令的总数目的数据。
9.一种操作处理器的方法,所述方法包括:
对断言的多个存储器访问指令进行译码,所述存储器访问指令不是利用加载/存储标识符LSID来编码的;
基于所述译码,生成和存储指示用于执行所述存储器访问指令的相对排序的数据,所述相对排序数据将针对所述多个存储器访问指令中的每个存储器访问指令的相应指令标识符与通过所述存储器访问指令的断言条件而确定的断言路径相关联;以及
根据所述相对排序数据,来调度所述存储器访问指令的执行。
10.根据权利要求9所述的方法,其中,所述译码包括将所述相对排序数据存储在存储器中,并且其中,所述方法还包括针对所述存储器访问指令的后续执行:
取回针对所述存储器访问指令的所存储的相对排序数据;以及
第二次执行所述存储器访问指令,所述执行包括至少部分地基于所存储的相对排序数据来调度所述存储器访问指令的一部分的操作。
11.根据权利要求9所述的方法,其中,所述调度包括至少部分地基于指示所述相对排序的所述数据,来确定所述存储器访问指令中的指令是否能够执行和/或所述存储器访问指令是否能够提交。
12.根据权利要求9所述的方法,其中,所述译码还包括针对所述多个存储器访问指令的断言的执行路径:
确定当采取所述断言的执行路径时执行的存储器访问指令的数目。
13.根据权利要求9所述的方法,还包括:
根据第一断言的执行路径或第二断言的执行路径来执行针对所述存储器访问指令的所述指令,其中,所述执行包括确定执行的存储器访问指令的数目;以及
将执行的加载和/或存储指令的数目与存储器访问指令的所确定的数目进行比较。
14.根据权利要求13所述的方法,其中,所述数目是存储器访问指令的第一数目,并且断言的执行路径是第一执行路径,并且其中,所述译码还包括:
确定针对所述多个存储器访问指令的第二执行路径所执行的存储器访问指令的第二数目;以及
如果存储器访问指令的所述第一数目不等于存储器访问指令的所述第二数目,则将一个或多个空指令插入到具有较少数目的指令的所述断言的执行路径。
15.根据权利要求9所述的方法,其中,所述译码还包括从所述存储器访问指令的指令头部译码存储计数、指示存储器排序是否必须针对所述存储器访问指令被强制执行的标志、断言路径和/或存储掩码信息。
16.根据权利要求9所述的方法,其中,所述方法还包括:
生成针对所述存储器访问指令的两个或更多断言路径中的每个断言路径的存储掩码;
将所述存储掩码进行组合,以生成针对所述存储器访问指令的存储掩码;
将所组合的存储掩码与针对采取的断言路径的存储掩码进行比较;以及
基于所述比较,确定使一个或多个LSID无效,其中,所述调度将被无效的LSID考虑为如同相关联的指令已经执行。
17.根据权利要求9所述的方法,其中,所述相对排序数据包括存储掩码数据,所述存储掩码数据指示指令是加载指令还是存储指令,所述方法还包括:
将所述存储掩码数据存储在寄存器中;以及
利用比较电路,将所述寄存器中的所述存储掩码数据与存储掩码向量进行比较,以产生掩码的存储向量,其中,所述调度执行是基于所述掩码的存储向量。
18.根据权利要求9所述的方法,其中,所述相对排序数据指示所述存储器访问指令中的多少存储器访问指令是存储指令,所述方法还包括:
更新存储指令计数器,以指示存储器访问指令中的已经执行的存储指令的数目;以及
利用比较电路,将所述存储指令计数器与所述相对排序数据进行比较,其中所述调度执行是基于所述比较。
19.一个或多个计算机可读存储介质,其存储计算机可读指令,所述计算机可读指令当由处理器执行时使得所述处理器执行方法,所述计算机可读指令包括:
用于分析源代码和/或目标代码中编码的存储器访问以确定针对所编码的存储器访问的存储器依存性的指令;以及
用于将所述源代码和/或目标代码转换成计算机可执行代码的指令,所述计算机可执行代码包括:
在没有加载存储标识符的情况下被编码的断言的存储器访问指令,以及
未被编码在所述存储器访问指令内的附加数据,针对指令组中的每个断言路径,所述附加数据包括所述计算机可执行代码中的所述指令组中的存储指令的数目的计数。
20.根据权利要求19所述的计算机可读存储介质,其中,所述数据包括以下中的至少一个或多个:所述指令组 中的存储器访问指令的数目的指示、或存储器访问指令的位置的指示。
21.根据权利要求19所述的计算机可读存储介质,其中:
所述存储器访问指令中的至少一个存储器访问指令被断言;并且
所述数据包括所述指令组 中的一个或多个断言路径的指示。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562221003P | 2015-09-19 | 2015-09-19 | |
US62/221,003 | 2015-09-19 | ||
US15/012,674 US11977891B2 (en) | 2015-09-19 | 2016-02-01 | Implicit program order |
US15/012,674 | 2016-02-01 | ||
PCT/US2016/051408 WO2017048647A1 (en) | 2015-09-19 | 2016-09-13 | Implicit program order |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108027735A CN108027735A (zh) | 2018-05-11 |
CN108027735B true CN108027735B (zh) | 2021-08-27 |
Family
ID=66000909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680054501.5A Active CN108027735B (zh) | 2015-09-19 | 2016-09-13 | 用于操作处理器的装置、方法和计算机可读存储介质 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3350690B1 (zh) |
CN (1) | CN108027735B (zh) |
WO (1) | WO2017048647A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874445A (zh) | 2017-10-30 | 2018-11-23 | 上海寒武纪信息科技有限公司 | 神经网络处理器及使用处理器执行向量点积指令的方法 |
US12057109B2 (en) | 2018-09-13 | 2024-08-06 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and terminal device |
CN112148291A (zh) * | 2019-06-26 | 2020-12-29 | 中兴通讯股份有限公司 | 指令块的处理方法及装置、存储介质、电子装置 |
CN111584011B (zh) * | 2020-04-10 | 2023-08-29 | 中国科学院计算技术研究所 | 面向基因比对的细粒度并行负载特征抽取分析方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5751985A (en) * | 1995-02-14 | 1998-05-12 | Hal Computer Systems, Inc. | Processor structure and method for tracking instruction status to maintain precise state |
CN101918917A (zh) * | 2008-01-17 | 2010-12-15 | 微软公司 | 基于块计数的过程布局和拆分 |
US8024522B1 (en) * | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US20120084759A1 (en) * | 2010-10-01 | 2012-04-05 | George Candea | System and method for in-vivo multi-path analysis of binary software |
CN103177063A (zh) * | 2011-12-23 | 2013-06-26 | Sap股份公司 | 用于时间数据聚合的时间滑动操作器 |
EP2759907A1 (en) * | 2013-01-29 | 2014-07-30 | BlackBerry Limited | Methods for monitoring and adjusting performance of a mobile computing device |
US20150127928A1 (en) * | 2013-11-07 | 2015-05-07 | Microsoft Corporation | Energy Efficient Multi-Modal Instruction Issue |
-
2016
- 2016-09-13 EP EP16775908.3A patent/EP3350690B1/en active Active
- 2016-09-13 WO PCT/US2016/051408 patent/WO2017048647A1/en active Application Filing
- 2016-09-13 CN CN201680054501.5A patent/CN108027735B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5751985A (en) * | 1995-02-14 | 1998-05-12 | Hal Computer Systems, Inc. | Processor structure and method for tracking instruction status to maintain precise state |
US8024522B1 (en) * | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
CN101918917A (zh) * | 2008-01-17 | 2010-12-15 | 微软公司 | 基于块计数的过程布局和拆分 |
US20120084759A1 (en) * | 2010-10-01 | 2012-04-05 | George Candea | System and method for in-vivo multi-path analysis of binary software |
CN103177063A (zh) * | 2011-12-23 | 2013-06-26 | Sap股份公司 | 用于时间数据聚合的时间滑动操作器 |
EP2759907A1 (en) * | 2013-01-29 | 2014-07-30 | BlackBerry Limited | Methods for monitoring and adjusting performance of a mobile computing device |
US20150127928A1 (en) * | 2013-11-07 | 2015-05-07 | Microsoft Corporation | Energy Efficient Multi-Modal Instruction Issue |
Non-Patent Citations (2)
Title |
---|
Distributed Microarchitectural Protocols in the TRIPS Prototype Processor;Karthikeyan Sankaralingam等;《https://www.researchgate.net/publication/221005622》;20140521;第1-13页 * |
Karthikeyan Sankaralingam等.Distributed Microarchitectural Protocols in the TRIPS Prototype Processor.《https://www.researchgate.net/publication/221005622》.2014,第1-13页. * |
Also Published As
Publication number | Publication date |
---|---|
EP3350690A1 (en) | 2018-07-25 |
WO2017048647A1 (en) | 2017-03-23 |
EP3350690B1 (en) | 2022-11-09 |
CN108027735A (zh) | 2018-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027769B (zh) | 使用寄存器访问指令发起指令块执行 | |
CN108027773B (zh) | 存储器访问指令顺序编码的生成和使用 | |
CN108027767B (zh) | 寄存器读取/写入排序 | |
CN108027770B (zh) | 用于数据流isa的密集读取编码 | |
CN108027731B (zh) | 针对基于块的处理器的调试支持 | |
US11977891B2 (en) | Implicit program order | |
US10198263B2 (en) | Write nullification | |
CN108027733B (zh) | 在目标字段中存储无效 | |
WO2017048644A1 (en) | Generation and use of block branch metadata | |
CN108027734B (zh) | 空指令的动态生成 | |
US10031756B2 (en) | Multi-nullification | |
US20170083331A1 (en) | Memory synchronization in block-based processors | |
CN108027735B (zh) | 用于操作处理器的装置、方法和计算机可读存储介质 | |
US20180329708A1 (en) | Multi-nullification | |
WO2017048645A1 (en) | Multimodal targets in a block-based processor |
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 |