CN108027773A - 存储器访问指令顺序编码的生成和使用 - Google Patents
存储器访问指令顺序编码的生成和使用 Download PDFInfo
- 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
Links
- 230000015654 memory Effects 0.000 title claims abstract description 304
- 238000003860 storage Methods 0.000 claims abstract description 223
- 238000000034 method Methods 0.000 claims abstract description 96
- 238000011068 loading method Methods 0.000 claims abstract description 83
- 230000005055 memory storage Effects 0.000 claims description 14
- 238000004458 analytical method Methods 0.000 claims description 5
- 238000000151 deposition Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 77
- 230000003362 replicative effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 18
- 238000004891 communication Methods 0.000 description 16
- 238000012545 processing Methods 0.000 description 15
- 239000000872 buffer Substances 0.000 description 14
- 238000009826 distribution Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000012360 testing method Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 230000005611 electricity Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000005291 magnetic effect Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000002045 lasting effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002730 additional effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000001259 photo etching Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect 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/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/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Multimedia (AREA)
- Computing Systems (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所述的计算机可读存储介质,其中排序指示由被编码在所述存储器访问指令中的加载/存储标识符指示,并且其中所述计算机可读指令还包括:
用于在所述指令块的头部中生成存储掩码的指令,所述存储掩码指示所述加载/存储标识符中的哪些加载/存储标识符对应于存储存储器访问指令。
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 US11681531B2 (en) | 2015-09-19 | 2015-10-23 | Generation and use of memory access instruction order encodings |
US14/921,855 | 2015-10-23 | ||
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)
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 (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US10061584B2 (en) * | 2015-09-19 | 2018-08-28 | Microsoft Technology Licensing, Llc | Store nullification in the target field |
US10180840B2 (en) | 2015-09-19 | 2019-01-15 | Microsoft Technology Licensing, Llc | Dynamic generation of null instructions |
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 |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
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 |
CN118312218A (zh) * | 2019-09-23 | 2024-07-09 | 阿里巴巴集团控股有限公司 | 一种指令处理装置、处理器及其处理方法 |
CN112925566B (zh) * | 2019-12-06 | 2024-06-25 | 中科寒武纪科技股份有限公司 | 建立虚拟寄存器生存区间的方法和装置及编译方法和装置 |
Citations (7)
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)
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 |
AU3412295A (en) | 1994-09-01 | 1996-03-22 | Gary L. Mcalpine | 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 |
US5644742A (en) | 1995-02-14 | 1997-07-01 | Hal Computer Systems, Inc. | Processor structure and method for a time-out checkpoint |
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 |
AU2002363142A1 (en) | 2001-10-31 | 2003-05-12 | Doug Burger | 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 |
JP2005522773A (ja) | 2002-04-08 | 2005-07-28 | ユニバーシティー・オブ・テキサス・システム | 非均等型キャッシュ装置、システム及び方法 |
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 |
EP1731998A1 (en) | 2004-03-29 | 2006-12-13 | Kyoto University | Data processing device, data processing program, and recording medium containing the data processing program |
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 |
US8327115B2 (en) | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
US7962725B2 (en) | 2006-05-04 | 2011-06-14 | Qualcomm Incorporated | Pre-decoding variable length instructions |
US7487340B2 (en) | 2006-06-08 | 2009-02-03 | International Business Machines Corporation | Local and global branch prediction information storage |
US20070288733A1 (en) | 2006-06-08 | 2007-12-13 | Luick David A | Early Conditional Branch Resolution |
JP4983801B2 (ja) | 2006-09-28 | 2012-07-25 | 富士通株式会社 | プログラム性能解析装置 |
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 |
EP2527972A3 (en) | 2006-11-14 | 2014-08-06 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US7600077B2 (en) | 2007-01-10 | 2009-10-06 | Arm Limited | Cache circuitry, data processing apparatus and method for handling write access requests |
US8291400B1 (en) | 2007-02-07 | 2012-10-16 | Tilera Corporation | Communication scheduling 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 |
WO2010033497A1 (en) | 2008-09-18 | 2010-03-25 | Marvell World Trade Ltd. | Preloading applications onto memory at least partially during boot up |
EP2996035A1 (en) | 2008-10-15 | 2016-03-16 | Hyperion Core, Inc. | Data processing device |
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 |
US20100146209A1 (en) | 2008-12-05 | 2010-06-10 | Intellectual Ventures Management, Llc | Method and apparatus for combining independent data caches |
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 |
US9021241B2 (en) | 2010-06-18 | 2015-04-28 | The Board Of Regents Of The University Of Texas System | Combined branch target and predicate prediction for instruction blocks |
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 |
EP2689326B1 (en) | 2011-03-25 | 2022-11-16 | Intel Corporation | Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines |
CN103547993B (zh) | 2011-03-25 | 2018-06-26 | 英特尔公司 | 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块 |
CN102707988B (zh) | 2011-04-07 | 2015-09-09 | 威盛电子股份有限公司 | 微处理器及其操作方法 |
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 |
WO2014150806A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for populating register view data structure by using register template snapshots |
CN105247484B (zh) | 2013-03-15 | 2021-02-23 | 英特尔公司 | 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法 |
US20140281434A1 (en) | 2013-03-15 | 2014-09-18 | Carlos Madriles | Path profiling using hardware and software combination |
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 |
US9317284B2 (en) | 2013-09-24 | 2016-04-19 | Apple Inc. | Vector hazard check instruction with reduced source operands |
US9400651B2 (en) * | 2013-09-24 | 2016-07-26 | Apple Inc. | Early issue of null-predicated operations |
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 |
US20170083319A1 (en) | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Generation and use of block branch metadata |
US20170083318A1 (en) | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Configuring modes of processor operation |
US10678544B2 (en) | 2015-09-19 | 2020-06-09 | Microsoft Technology Licensing, Llc | Initiating instruction block execution using a register access instruction |
US10180840B2 (en) * | 2015-09-19 | 2019-01-15 | Microsoft Technology Licensing, Llc | Dynamic generation of null instructions |
US20170083320A1 (en) | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Predicated read instructions |
US10061584B2 (en) | 2015-09-19 | 2018-08-28 | Microsoft Technology Licensing, Llc | Store nullification in the target field |
US10031756B2 (en) | 2015-09-19 | 2018-07-24 | Microsoft Technology Licensing, Llc | Multi-nullification |
US10198263B2 (en) | 2015-09-19 | 2019-02-05 | Microsoft Technology Licensing, Llc | Write nullification |
US10871967B2 (en) | 2015-09-19 | 2020-12-22 | Microsoft Technology Licensing, Llc | Register read/write ordering |
US20170083331A1 (en) | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Memory synchronization in block-based processors |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
-
2015
- 2015-10-23 US US14/921,855 patent/US11681531B2/en active Active
-
2016
- 2016-09-13 WO PCT/US2016/051407 patent/WO2017048646A1/en active Application Filing
- 2016-09-13 EP EP16775374.8A patent/EP3350706A1/en active Pending
- 2016-09-13 CN CN202211067382.0A patent/CN115390926A/zh active Pending
- 2016-09-13 CN CN201680054500.0A patent/CN108027773B/zh active Active
Patent Citations (7)
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)
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)
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 |
CN108027773B (zh) | 2022-09-20 |
EP3350706A1 (en) | 2018-07-25 |
US20170083324A1 (en) | 2017-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027773A (zh) | 存储器访问指令顺序编码的生成和使用 | |
CN108027767A (zh) | 寄存器读取/写入排序 | |
CN108027769A (zh) | 使用寄存器访问指令发起指令块执行 | |
CN108027732A (zh) | 与断言的加载指令相关联的预取 | |
CN108139913A (zh) | 处理器操作的配置模式 | |
CN108027729A (zh) | 分段式指令块 | |
CN108027730A (zh) | 写入无效 | |
CN108027768A (zh) | 指令块地址寄存器 | |
CN106843810B (zh) | 跟踪指令的控制流程的设备、方法以及机器可读介质 | |
CN109074260A (zh) | 乱序的基于块的处理器和指令调度器 | |
CN108027731A (zh) | 针对基于块的处理器的调试支持 | |
CN108027770A (zh) | 用于数据流isa的密集读取编码 | |
CN108027766A (zh) | 预取指令块 | |
CN107810483A (zh) | 验证基于块的处理器中的跳转目标 | |
CN107810479A (zh) | 用于处理器控制传送的目标位置的确定 | |
CN108027750A (zh) | 乱序提交 | |
CN108027778A (zh) | 与断言的存储指令相关联的预取 | |
CN108027771A (zh) | 基于块的处理器核复合寄存器 | |
CN108027807A (zh) | 基于块的处理器核拓扑寄存器 | |
CN108027734A (zh) | 空指令的动态生成 | |
CN108027772A (zh) | 用于逻辑处理器的不同的系统寄存器 | |
US20170083320A1 (en) | Predicated read instructions | |
CN110249302A (zh) | 在处理器核上同时执行多个程序 | |
CN108027733A (zh) | 在目标字段中存储无效 | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method |
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 |