ES3003288T3 - Dynamic memory reconfiguration - Google Patents
Dynamic memory reconfiguration Download PDFInfo
- Publication number
- ES3003288T3 ES3003288T3 ES20718903T ES20718903T ES3003288T3 ES 3003288 T3 ES3003288 T3 ES 3003288T3 ES 20718903 T ES20718903 T ES 20718903T ES 20718903 T ES20718903 T ES 20718903T ES 3003288 T3 ES3003288 T3 ES 3003288T3
- Authority
- ES
- Spain
- Prior art keywords
- graphics
- cache
- memory
- processor
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/7839—Architectures of general purpose stored program computers comprising a single central processing unit with memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0215—Addressing or allocation; Relocation with look ahead addressing means
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0607—Interleaved addressing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0888—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0893—Caches characterised by their organisation or structure
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/128—Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/161—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
- G06F13/1626—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/8046—Systolic arrays
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/18—Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
- G06F5/012—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
- G06F7/575—Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/588—Random number generators, i.e. based on natural stochastic processes
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
- G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/0895—Weakly supervised learning, e.g. semi-supervised or self-supervised learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/09—Supervised learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/098—Distributed learning, e.g. federated learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/12—Replacement control
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/254—Distributed memory
- G06F2212/2542—Non-uniform memory access [NUMA] architecture
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/30—Providing cache or TLB in specific location of a processing system
- G06F2212/302—In image processor or graphics adapter
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/455—Image or video data
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/601—Reconfiguration of cache memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/6026—Prefetching based on access pattern detection, e.g. stride based prefetch
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/6028—Prefetching based on hints or prefetch instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/608—Details relating to cache mapping
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/652—Page size control
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Operations Research (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Advance Control (AREA)
- Computer Graphics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Complex Calculations (AREA)
- Memory System (AREA)
Abstract
Las realizaciones descritas en este documento proporcionan técnicas para permitir la reconfiguración dinámica de la memoria en una unidad de procesamiento de gráficos de propósito general. Una realización descrita en este documento permite la reconfiguración dinámica de las asignaciones de bancos de memoria caché en función de las estadísticas de hardware. Una realización permite la traducción de direcciones de memoria virtual utilizando páginas mixtas de cuatro kilobytes y sesenta y cuatro kilobytes dentro de la misma jerarquía de tabla de páginas y bajo el mismo directorio de páginas. Una realización proporciona un procesador de gráficos y un sistema de procesamiento heterogéneo asociado que tiene regiones cercanas y lejanas del mismo nivel de una jerarquía de caché. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Reconfiguración dinámica de memoria
CAMPO TÉCNICO
Esta divulgación se refiere en general al procesamiento de datos y, más particularmente, a la reconfiguración dinámica de la memoria en una unidad de procesamiento de gráficos de propósito general.
ANTECEDENTES DE LA DIVULGACIÓN
El procesamiento paralelo de datos gráficos actual incluye sistemas y métodos desarrollados para realizar operaciones específicas sobre datos gráficos tales como, por ejemplo, interpolación lineal, teselación, rasterización, mapeado de texturas, pruebas de profundidad, etc.
Tradicionalmente, los procesadores gráficos usaban unidades de cálculo de función fija para procesar los datos gráficos; sin embargo, más recientemente, porciones de los procesadores gráficos se han hecho programables, permitiendo a tales procesadores soportar una mayor diversidad de operaciones para procesar datos de vértices y fragmentos.
Para aumentar adicionalmente el rendimiento, los procesadores de gráficos típicamente implementan técnicas de procesamiento, tales como canalizaciones, que intentan procesar, en paralelo, tantos datos de gráficos como sea posible a lo largo de todas las diferentes partes de la canalización de gráficos. Los procesadores de gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) se diseñan para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de manera síncrona conjuntamente tan a menudo como sea posible para aumentar la eficiencia de procesamiento. Puede encontrarse una vista general de software y hardware para arquitecturas de SIMT en Shane Cook, CUDA Programming, capítulo 3, páginas 37-51 (2013).
El documento US 8.990.505 B1 divulga dispositivos, sistemas, métodos y otras realizaciones asociadas con una memoria caché. En una realización, una matriz de etiquetas de caché incluye bancos de etiquetas. La memoria caché incluye además un selector de banco configurado para recibir una dirección y aplicar una función de troceo que asigna la dirección a uno de los bancos de etiquetas.
El documento US 2018/210836 A1 divulga: Un chip de procesamiento de múltiples núcleos donde la caché de último nivel se implementa mediante múltiples cachés de último nivel (también conocidas como segmentos de caché) distribuidas física y lógicamente. Los diversos procesadores del chip deciden qué caché de último nivel debe alojar un bloque de datos dado aplicando a la dirección física una función de troceo dependiente de la temperatura o la fiabilidad. Mientras el sistema está en ejecución, una caché de último nivel que se está sobrecalentando, o que está siendo sobreutilizada, ya no se usa más cambiando la función de troceo. Antes de evitar los accesos a la caché sobrecalentada, el contenido de esa caché se migra a otras cachés de último nivel según la función de troceo cambiada. Cuando un procesador de núcleo asociado con una caché de último nivel se apaga, o se retiran procesos/hilos de ese núcleo, o cuando el núcleo se sobrecalienta, se puede evitar el uso de la caché de último nivel asociada cambiando la función de troceo y que el contenido migre a otras cachés.
SUMARIO
La invención se define por un procesador de gráficos de propósito general, un sistema y un método de acuerdo con las reivindicaciones independientes. Se definen realizaciones ventajosas en las reivindicaciones dependientes y se describen en el presente documento a continuación.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para que la forma en que las características citadas anteriormente de las presentes realizaciones puedan entenderse en detalle, se puede obtener una descripción más particular de las realizaciones, brevemente resumida anteriormente, con referencia a las realizaciones, algunas de las cuales se ilustran en los dibujos adjuntos.
La Figura 1 es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
las Figuras 2A-2D ilustran componentes de procesador paralelo;
las Figuras 3A-3C son diagramas de bloques de multiprocesadores de gráficos y GPU basadas en multiprocesadores; las Figuras 4A-4F ilustran una arquitectura ilustrativa en la que una pluralidad de GPU se acopla de manera comunicativa a una pluralidad de procesadores de múltiples núcleos;
la Figura 5 ilustra una canalización de procesamiento de gráficos;
la Figura 6 ilustra una pila de software de aprendizaje automático;
la Figura 7 ilustra una unidad de procesamiento de gráficos de propósito general;
la Figura 8 ilustra un sistema informático de múltiples GPU;
las Figuras 9A-9B ilustran capas de redes neuronales profundas ilustrativas;
la Figura 10 ilustra una red neuronal recurrente ilustrativa;
la Figura 11 ilustra el entrenamiento y despliegue de una red neuronal profunda;
la Figura 12 es un diagrama de bloques que ilustra un aprendizaje distribuido;
la Figura 13 ilustra un sistema en un chip (SOC) de inferencia ilustrativo adecuado para realizar una inferencia usando un modelo entrenado;
la Figura 14 es un diagrama de bloques de un sistema de procesamiento;
las Figuras 15A-15C ilustran sistemas informáticos y procesadores de gráficos;
las Figuras 16A-16C ilustran diagramas de bloques de arquitecturas de procesadores de gráficos y aceleradores de cálculo adicionales;
la Figura 17 es un diagrama de bloques de un motor de procesamiento de gráficos de un procesador de gráficos; las Figuras 18A-18B ilustran una lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador de gráficos;
la Figura 19 ilustra una unidad de ejecución adicional;
la Figura 20 es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos; la Figura 21 es un diagrama de bloques de una arquitectura de procesador de gráficos adicional;
las Figuras 22A-22B ilustran un formato de comando de procesador de gráficos y una secuencia de comandos; la Figura 23 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento;
la Figura 24A es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP;
la Figura 24B ilustra una vista lateral en sección transversal de un conjunto de paquete de circuito integrado;
la Figura 24C ilustra un conjunto de paquete que incluye múltiples unidades de chiplets de lógica de hardware conectados a un sustrato (por ejemplo, una pastilla base);
la Figura 24D ilustra un conjunto de paquete que incluye chiplets intercambiables;
la Figura 25 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip ilustrativo;
las Figuras 26A-26B son diagramas de bloques que ilustran procesadores de gráficos ilustrativos para su uso dentro de un SoC;
la Figura 27 ilustra un sistema de procesamiento que incluye una caché en banco;
la Figura 28 ilustra un sistema de procesamiento que incluye un controlador de caché con una unidad de función de troceo dinámica;
la Figura 29 ilustra un método para permitir la reconfiguración dinámica de una función de troceo de banco de memoria basándose en estadísticas de hardware;
la Figura 30 ilustra un sistema de procesamiento heterogéneo que incluye un espacio de memoria unificado; las Figuras 31A-31B ilustran estructuras jerárquicas de tablas de páginas para páginas de 4K y 64K;
las Figuras 32A-32C ilustran un directorio de páginas y tablas de páginas para permitir la mezcla de páginas 4K y 64K dentro de una estructura de tabla de páginas jerárquica, de acuerdo con una realización;
las Figuras 33A-33B ilustran métodos para permitir la mezcla de páginas de 4K y 64K dentro de una estructura de tabla de páginas jerárquica;
la Figura 34 ilustra un sistema de procesamiento que incluye una caché que tiene regiones cercanas y lejanas; la Figura 35 ilustra un sistema de procesamiento heterogéneo que tiene regiones de caché cercanas y lejanas; la Figura 36 ilustra un conjunto de encapsulado para un procesador paralelo que incluye una caché L3 de múltiples regiones;
la Figura 37 ilustra un método de gestión de una caché que tiene múltiples regiones de caché;
la Figura 38 es un diagrama de bloques de un sistema de procesamiento de datos 3800, de acuerdo con una realización; y
la Figura 39 es un diagrama de bloques de un dispositivo informático que incluye un procesador de gráficos, de acuerdo con una realización.
DESCRIPCIÓN DETALLADA
Una unidad de procesamiento de gráficos (GPU) se acopla de manera comunicativa a núcleos de anfitrión/procesador para acelerar, por ejemplo, operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y/o diversas funciones de GPU de propósito general (GPGPU). La GPU puede acoplarse de manera comunicativa al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). Como alternativa, la GPU puede integrarse en el mismo paquete o chip que los núcleos y acoplarse de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, internamente al paquete o chip). Independientemente de la manera en la que se conecta la GPU, los núcleos de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa, a continuación, circuitería/lógica dedicada para procesar de manera eficiente estos comandos/instrucciones.
Las realizaciones descritas en el presente documento proporcionan técnicas para permitir la reconfiguración dinámica de la memoria en una unidad de procesamiento gráfico de propósito general. Una realización descrita en el presente documento permite la reconfiguración dinámica de las asignaciones de bancos de memoria caché basándose en estadísticas de hardware. Una realización permite la traducción de direcciones de memoria virtual usando páginas mixtas de cuatro kilobytes y 64 kilobytes dentro de la misma jerarquía de tabla de páginas y bajo el mismo directorio de páginas. Una realización proporciona un procesador de gráficos y un sistema de procesamiento heterogéneo asociado que tiene regiones cercanas y lejanas del mismo nivel de una jerarquía de caché.
En la siguiente descripción, se exponen numerosos detalles específicos para proporcionar un entendimiento más minucioso. Sin embargo, será evidente para un experto en la técnica que las realizaciones descritas en el presente documento pueden ponerse en práctica sin uno o más de estos detalles específicos. En otras instancias, no se han descrito características bien conocidas para evitar complicar los detalles de las presentes realizaciones.
Vista general del sistema
La Figura 1 es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesador(es) 102 y una memoria de sistema 104 que se comunica mediante una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente de conjunto de chips o puede integrarse dentro del/de los uno o más procesador(es) 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede posibilitar que el sistema informático 100 reciba una entrada desde uno o más dispositivo(s) de entrada 108. Adicionalmente, el concentrador de E/S 107 puede posibilitar que un controlador de visualización, que puede incluirse en el/los uno o más procesador(es) 102, proporcione salidas a uno o más dispositivo(s) de visualización 110A. En una realización, el/los uno o más dispositivo(s) de visualización 110A acoplado(s) con el concentrador de E/S 107 puede(n) incluir un dispositivo de visualización local, interno o embebido.
El subsistema de procesamiento 101, por ejemplo, incluye uno o más procesador(es) paralelo(s) 112 acoplado(s) al concentrador de memoria 105 mediante un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, pero sin limitación, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de distribuidor. El/los uno o más procesador(es) paralelo(s) 112 puede(n) formar un sistema de procesamiento paralelo o vectorial de enfoque computacional que puede incluir un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tal como un procesador de muchos núcleos integrados (MIC). Por ejemplo, el/los uno o más procesador(es) paralelo(s) 112 forma(n) un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del/de los uno o más dispositivo(s) de visualización 110A acoplado(s) mediante el concentrador de E/S 107. El/los uno o más procesador(es) paralelo(s) 112 puede(n) incluir también un controlador de visualización y una interfaz de visualización (no mostrados) para posibilitar una conexión directa a uno o más dispositivo(s) de visualización 110B.
Dentro del subsistema de E/S 111, una unidad de almacenamiento de sistema 114 puede conectarse al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Puede usarse un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para posibilitar conexiones entre el concentrador de E/S 107 y otros componentes, tales como un adaptador de red 118 y/o un adaptador de red inalámbrico 119 que pueden integrarse en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivo(s) de adición 120. El/los dispositivo(s) de adición 120 también puede(n) incluir, por ejemplo, uno o más aceleradores de cálculo y/o dispositivos de procesador de gráficos externos. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red cableado. El adaptador de red inalámbrico 119 puede incluir uno o más de un dispositivo de red de Wi-Fi, de Bluetooth, de comunicación de campo cercano (NFC) o de otro tipo que incluye una o más radios inalámbricas.
El sistema informático 100 puede incluir otros componentes no explícitamente mostrados, incluyendo USB u otras conexiones de puerto, unidades de almacenamiento óptico, dispositivos de captura de vídeo, y similares, puede conectarse también al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes en la Figura 1 se pueden implementar usando cualquier protocolo adecuado, tal como protocolos (por ejemplo, PCI-Express) basados en PCI (Interconexión de Componentes Periféricos), o cualesquiera otras interfaces de comunicación de bus o de punto a punto y/o protocolo o protocolos, tal como la interconexión de alta velocidad NVLink o protocolos de interconexión conocidos en la técnica.
El/los uno o más procesador(es) paralelo(s) 112 puede(n) incorporar circuitería optimizada para un procesamiento de gráficos y de vídeo, incluyendo, por ejemplo, circuitería de salida de vídeo, y constituye una unidad de procesamiento de gráficos (GPU). Como alternativa o adicionalmente, el/los uno o más procesador(es) paralelo(s) 112 puede(n) incorporar circuitería optimizada para un procesamiento de propósito general, al tiempo que se conserva la arquitectura computacional subyacente, descrita en mayor detalle en el presente documento. Componentes del sistema informático 100 pueden integrarse con otros uno o más elementos de sistema en un único circuito integrado. Por ejemplo, el/los uno o más procesador(es) paralelo(s) 112, el concentrador de memoria 105, el/los procesador(es) 102 y el concentrador de E/S 107 pueden integrarse en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 100 pueden integrarse en un único paquete para formar una configuración de sistema en paquete (SIP). En una realización, al menos una porción de los componentes del sistema informático 100 puede integrarse en un módulo de múltiples chips (MCM), que puede interconectarse con otros módulos de múltiples chips para dar un sistema informático modular.
Se apreciará que el sistema informático 100 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, incluyendo el número y disposición de puentes, el número de procesador(es) 102, y el número de procesador(es) paralelo(s) 112, puede modificarse como se desee. Por ejemplo, la memoria de sistema 104 puede conectarse al/a los procesador(es) 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el/los procesador(es) 102. En otras topologías alternativas, el/los procesador(es) paralelo(s) 112 se conecta(n) al concentrador de E/S 107 o directamente a uno del/de los uno o más procesador(es) 102, en lugar de al concentrador de memoria 105. En otras realizaciones, el concentrador de E/S 107 y el concentrador de memoria 105 pueden integrarse en un único chip. También es posible que dos o más conjuntos de procesador(es) 102 se anexen mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del/de los procesador(es) paralelo(s) 112.
Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no incluirse en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos de adición, o pueden eliminarse algunos componentes. Además, algunas arquitecturas pueden usar terminología diferente para componentes similares a los ilustrados en la Figura 1. Por ejemplo, el concentrador de memoria 105 puede denominarse puente norte en algunas arquitecturas, mientas que el concentrador de E/S 107 puede denominarse puente sur.
La Figura 2A ilustra un procesador paralelo 200. El procesador paralelo 200 puede ser una GPU, GPGPU o similar como se describe en el presente documento. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tales como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo 200 ilustrado puede ser el, o uno de los, procesador(es) paralelo(s) 112 mostrado(s) en la Figura 1.
El procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que posibilita la comunicación con otros dispositivos, incluyendo otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede conectarse directamente a otros dispositivos. Por ejemplo, la unidad de E/S 204 se conecta con otros dispositivos mediante el uso de una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicación 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 se conecta con una interfaz de anfitrión 206 y una barra transversal de memoria 216, donde la interfaz de anfitrión 206 recibe comandos dirigidos a realizar operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos a realizar operaciones de memoria.
Cuando la interfaz de anfitrión 206 recibe una memoria intermedia de comandos mediante la unidad de E/S 204, la interfaz de anfitrión 206 puede dirigir operaciones de trabajo para realizar esos comandos a un extremo frontal 208. En una realización, el extremo frontal 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 212. El planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 está configurada apropiadamente y en un estado válido antes de que las tareas se distribuyan a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212. El planificador 210 puede implementarse mediante lógica de firmware que se ejecuta en un microcontrolador. El planificador implementado por microcontrolador 210 puede configurarse para realizar operaciones de planificación y de distribución de trabajo complejas con granularidad gruesa y fina, lo que posibilita un rápido otorgamiento de prioridad y conmutación de contexto de hilos que se ejecutan en la matriz de procesamiento 212. Preferiblemente, el software de anfitrión puede probar cargas de trabajo para su planificación en la matriz de procesamiento 212 mediante uno de múltiples llamadores de procesamiento de gráficos. Las cargas de trabajo pueden distribuirse, a continuación, automáticamente a través de la matriz de procesamiento 212 por la lógica del planificador 210 dentro del microcontrolador planificador.
La matriz de agrupaciones de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, de la agrupación 214A, la agrupación 214B a la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupaciones de procesamiento 212 puede ejecutar un gran número de hilos concurrentes. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 usando diversos algoritmos de planificación y/o de distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surja para cada tipo de programa o cálculo. La planificación puede ser manejada dinámicamente por el planificador 210, o puede ser asistida, en parte, por lógica de compilador durante la compilación de lógica de programa configurada para su ejecución por la matriz de agrupaciones de procesamiento 212. Opcionalmente, pueden asignarse diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
La matriz de agrupaciones de procesamiento 212 puede configurarse para realizar diversos tipos de operaciones de procesamiento paralelo. Por ejemplo, la matriz de agrupaciones 212 está configurada para realizar operaciones de cálculo paralelo de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento, incluyendo filtración de datos de vídeo y/o de audio, realizar operaciones de modelado, incluyendo operaciones de física y realizar transformaciones de datos.
La matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos paralelo. En tales realizaciones en las que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, incluyendo, pero sin limitación, lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselación y otra lógica de procesamiento de vértices. Adicionalmente, la matriz de agrupaciones de procesamiento 212 puede configurarse para ejecutar programas de sombreado relacionados con el procesamiento de gráficos tales como, pero sin limitación, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 202 puede transferir datos desde memoria de sistema mediante la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos pueden almacenarse en memoria en chip (por ejemplo, la memoria de procesador paralelo 222) durante el procesamiento y, a continuación, escribirse en diferido en memoria de sistema.
En realizaciones en las que la unidad de procesamiento paralelo 202 se usa para realizar un procesamiento de gráficos, el planificador 210 puede configurarse para dividir la carga de trabajo de procesamiento en tareas de un tamaño aproximadamente igual, para posibilitar mejor la distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunas de estas realizaciones, porciones de la matriz de agrupaciones de procesamiento 212 pueden configurarse para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede configurarse para realizar un sombreado de vértices y una generación de topología, una segunda porción puede configurarse para realizar sombreado de teselación y de geometría, y una tercera porción puede configurarse para realizar sombreado de píxeles u otras operaciones de espacio de visualización, para producir una imagen representada para su visualización. Datos intermedios producidos por una o más de las agrupaciones 214A-214N pueden almacenarse en memorias intermedias para permitir que los datos intermedios se transmitan entre las agrupaciones 214A-214N para su procesamiento adicional.
Durante la operación, la matriz de agrupaciones de procesamiento 212 puede recibir tareas de procesamiento a ejecutar mediante el planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos a procesar, por ejemplo, datos de superficie (parche), datos de primitiva, datos de vértice y/o datos de píxel, así como parámetros de estado y comandos que definen cómo han de procesarse los datos (por ejemplo, qué programa ha de ejecutarse). El planificador 210 puede configurarse para extraer los índices que corresponden a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 puede configurarse para garantizar que la matriz de agrupaciones de procesamiento 212 está configurada en un estado válido antes de que se inicie la carga de trabajo especificada por memorias intermedias de comando de entrada (por ejemplo, memorias intermedias de lotes, memorias intermedias de inserción, etc.).
Cada una de las una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse con la memoria de procesador paralelo 222. Puede accederse a la memoria de procesador paralelo 222 mediante la barra transversal de memoria 216, que puede recibir solicitudes de memoria desde la matriz de agrupaciones de procesamiento 212, así como la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria de procesador paralelo 222 mediante una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de subdivisión (por ejemplo, de la unidad de subdivisión 220A, la unidad de subdivisión 220B a la unidad de subdivisión 220N), cada una de las cuales puede acoplarse a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 222. El número de unidades de subdivisión 220A-220N puede configurarse para que sea igual al número de unidades de memoria, de manera que una primera unidad de subdivisión 220A tiene una primera unidad de memoria 224A correspondiente, una segunda unidad de subdivisión 220B tiene una unidad de memoria 224B correspondiente y una N-ésima unidad de subdivisión 220N tiene una N-ésima unidad de memoria 224N correspondiente. En otras realizaciones, el número de unidades de subdivisión 220A-220N puede no ser igual al número de dispositivos de memoria.
Las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, incluyendo memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como memoria de acceso aleatorio de gráficos síncrona (SGRAM), incluyendo memoria de tasa de datos doble de gráficos (GDDR). Opcionalmente, las unidades de memoria 224A-224N pueden incluir también memoria apilada 3D, incluyendo, pero sin limitación, memoria de ancho de banda alto (HBM). Los expertos en la técnica apreciarán que la implementación específica de las unidades de memoria 224A-224N puede variar, y puede seleccionarse de uno de diversos diseños convencionales. Pueden almacenarse objetivos de representación, tales como memorias intermedias de fotogramas o mapas de textura, a través de las unidades de memoria 224A-224N, permitiendo que las unidades de subdivisión 220A-220N escriban porciones de cada objetivo de representación en paralelo para usar de manera eficiente el ancho de banda disponible de la memoria de procesador paralelo 222. En algunas realizaciones, puede excluirse una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificado que utiliza memoria de sistema junto con memoria caché local.
Opcionalmente, una cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 tiene la capacidad de procesar datos que se escribirán en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 puede configurarse para transferir la salida de cada agrupación 214A-214N a cualquier unidad de subdivisión 220A-220N o a otra agrupación 214A-214N, que puede realizar operaciones de procesamiento adicionales sobre la salida. Cada agrupación 214A-214N puede comunicarse con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para leer desde o escribir en diversos dispositivos de memoria externos. En una de las realizaciones con la barra transversal de memoria 216, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador paralelo 222, lo que posibilita que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A-214N se comuniquen con memoria de sistema u otra memoria que no sea local a la unidad de procesamiento paralelo 202. Generalmente, la barra transversal de memoria 216 puede, por ejemplo, ser capaz de usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de subdivisión 220A-220N.
Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 202 dentro del procesador paralelo 200, puede incluirse cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, pueden proporcionarse múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de adición, o pueden interconectarse múltiples tarjetas de adición. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden configurarse para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Opcionalmente, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de precisión superior en relación con otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o el procesador paralelo 200 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, pero sin limitación, ordenadores personales de sobremesa, portátiles o de mano, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
La Figura 2B es un diagrama de bloques de una unidad de subdivisión 220. La unidad de subdivisión 220 puede ser una instancia de una de las unidades de subdivisión 220A-220N de la Figura 2A. Como se ilustra, la unidad de subdivisión 220 incluye una caché de L2221, una interfaz de memoria intermedia de fotogramas 225 y una ROP 226 (unidad de operaciones de rasterización). La caché de L2221 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y de almacenamiento recibidas desde la barra transversal de memoria 216 y la ROP 226. Los desaciertos de lectura y las solicitudes de escritura diferida urgente son emitidas por la caché de L2 221 a la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. También pueden enviarse actualizaciones a la memoria intermedia de fotogramas mediante la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. En una realización, la interfaz de memoria intermedia de fotogramas 225 interacciona con una de las unidades de memoria en memoria de procesador paralelo, tales como las unidades de memoria 224A-224N de la Figura 2A (por ejemplo, dentro de la memoria de procesador paralelo 222). Adicionalmente o como alternativa, la unidad de subdivisión 220 también puede interaccionar con una de las unidades de memoria en memoria de procesador paralelo mediante un controlador de memoria (no mostrado).
En aplicaciones de gráficos, la ROP 226 es una unidad de procesamiento que realiza operaciones de rasterización tales como estarcido, prueba z, mezcla y similares. La ROP 226 emite, a continuación, datos de gráficos procesados que se almacenan en memoria de gráficos. En algunas realizaciones, la ROP 226 incluye lógica de compresión para comprimir datos de profundidad o de color que se escriben en memoria y descomprimir datos de profundidad o de color que se leen desde memoria. La lógica de compresión puede ser lógica de compresión sin pérdidas que hace uso de uno o más de múltiples algoritmos de compresión. El tipo de compresión que es realizado por la ROP 226 puede variar basándose en las características estadísticas de los datos a comprimir. Por ejemplo, en una realización, se realiza una compresión de color delta sobre datos de profundidad y de color de una manera por tesela.
La ROP 226 puede incluirse dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 214A-214N de la Figura 2A) en lugar de dentro de la unidad de subdivisión 220. En tal realización, se transmiten solicitudes de lectura y de escritura de datos de píxel a través de la barra transversal de memoria 216 en lugar de datos de fragmento de píxel. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno del/de los uno o más dispositivo(s) de visualización 110 de la Figura 1, encaminarse para su procesamiento adicional por el/los procesador(es) 102, o encaminarse para su procesamiento adicional por una de las entidades de procesamiento dentro del procesador paralelo 200 de la Figura 2A.
La Figura 2C es un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo. Por ejemplo, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la Figura 2A. La agrupación de procesamiento 214 puede configurarse para ejecutar muchos hilos en paralelo, donde el término "hilo" se refiere a una instancia de un programa particular que se ejecuta en un conjunto particular de datos de entrada. Opcionalmente, pueden usarse técnicas de emisión de instrucciones de única instrucción múltiples datos (SIMD) para soportar la ejecución paralela de un gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. Como alternativa, pueden usarse técnicas de única instrucción múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, usando una unidad de instrucción común configurada para emitir instrucciones en un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia del régimen de ejecución de SIMD, donde todos los motores de procesamiento ejecutan típicamente instrucciones idénticas, la ejecución de SIMT permite que diferentes hilos sigan más fácilmente rutas de ejecución divergentes a través de un programa de hilos dado. Los expertos en la técnica entenderán que un régimen de procesamiento de SIMD representa un subconjunto funcional de un régimen de procesamiento de SIMT.
La operación de la agrupación de procesamiento 214 puede controlarse mediante un gestor de canalizaciones 232 que distribuye tareas de procesamiento a procesadores paralelos de SIMT. El gestor de canalizaciones 232 recibe instrucciones desde el planificador 210 de la Figura 2A y gestiona la ejecución de esas instrucciones mediante un multiprocesador de gráficos 234 y/o una unidad de textura 236. El multiprocesador de gráficos 234 ilustrado es una instancia ilustrativa de un procesador paralelo de SIMT. Sin embargo, pueden incluirse diversos tipos de procesadores paralelos de SIMT de arquitecturas diferentes dentro de la agrupación de procesamiento 214. Pueden incluirse una o más instancias del multiprocesador de gráficos 234 dentro de una agrupación de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y puede usarse una barra transversal de datos 240 para distribuir los datos procesados a uno de múltiples destinos posibles, incluyendo otras unidades sombreadoras. El gestor de canalizaciones 232 puede facilitar la distribución de datos procesados especificando destinos para que se distribuyan datos procesados mediante la barra transversal de datos 240.
Cada multiprocesador de gráficos 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades aritmético-lógicas, unidades de carga-almacenamiento, etc.). La lógica de ejecución funcional puede configurarse de una manera canalizada en la que pueden emitirse nuevas instrucciones antes de que se hayan completado instrucciones previas. La lógica de ejecución funcional soporta una diversidad de operaciones, incluyendo aritmética de números enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y cálculo de diversas funciones algebraicas. Podría aprovecharse el mismo hardware de unidades funcionales para realizar diferentes operaciones, y puede estar presente cualquier combinación de unidades funcionales.
Las instrucciones transmitidas a la agrupación de procesamiento 214 constituyen un hilo. Un conjunto de hilos que se ejecutan a través del conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa sobre diferentes datos de entrada. Cada hilo dentro de un grupo de hilos puede asignarse a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 234. Un grupo de hilos puede incluir menos hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden encontrarse en reposo durante ciclos en los que se está procesando ese grupo de hilos. Un grupo de hilos puede incluir también más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, puede realizarse un procesamiento a lo largo de ciclos de reloj consecutivos. Opcionalmente, múltiples grupos de hilos pueden ejecutarse concurrentemente en el multiprocesador de gráficos 234.
El multiprocesador de gráficos 234 puede incluir una memoria caché interna para realizar operaciones de carga y de almacenamiento. Opcionalmente, el multiprocesador de gráficos 234 puede renunciar a una caché interna y usar una memoria caché (por ejemplo, la caché de L1 248) dentro de la agrupación de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a cachés de L2 dentro de las unidades de subdivisión (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2A) que se comparten entre todas las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre hilos. El multiprocesador de gráficos 234 puede acceder también a memoria global fuera de chip, que puede incluir uno o más de memoria de procesador paralelo local y/o memoria de sistema. Cualquier memoria externa a la unidad de procesamiento paralelo 202 puede usarse como memoria global. Realizaciones en las que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que pueden almacenarse en la caché de L1 248.
Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para mapear direcciones virtuales con direcciones físicas. En otras realizaciones, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de la Figura 2A. La MMU 245 incluye un conjunto de entradas de tabla de páginas (PTE) usadas para mapear una dirección virtual con una dirección física de una tesela y, opcionalmente, un índice de líneas de caché. La MMU 245 puede incluir memorias intermedias de traducción adelantada (TLB) de direcciones o cachés que pueden residir dentro del multiprocesador de gráficos 234 o la caché de L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la localidad de acceso de datos de superficie para permitir una intercalación de solicitud eficiente entre unidades de subdivisión. El índice de líneas de caché puede usarse para determinar si una solicitud de una línea de caché es un acierto o un desacierto.
En aplicaciones de gráficos e informáticas, una agrupación de procesamiento 214 puede configurarse de manera que cada multiprocesador de gráficos 234 se acopla a una unidad de textura 236 para realizar operaciones de mapeo de textura, por ejemplo, determinar posiciones de muestra de textura, leer datos de textura y filtrar los datos de textura. Se leen datos de textura desde una caché de L1 de textura interna (no mostrada) o, en algunas realizaciones, desde la caché de L1 dentro del multiprocesador de gráficos 234 y se extraen desde una caché de L2, memoria de procesador paralelo local o memoria de sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una caché de L2, memoria de procesador paralelo local o memoria de sistema mediante la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones prerrasterización) está configurada para recibir datos desde el multiprocesador de gráficos 234, dirigir datos a unidades de ROP, que pueden ubicarse con unidades de subdivisión como se describe en el presente documento (por ejemplo, las unidades de subdivisión 220A-220N de la Figura 2A). La unidad de preROP 242 puede realizar optimizaciones para la mezcla de color, organizar datos de color de píxel y realizar traducciones de dirección.
Se apreciará que la arquitectura de núcleo descrita en el presente documento es ilustrativa y que son posibles variaciones y modificaciones. Puede incluirse cualquier número de unidades de procesamiento, por ejemplo, el multiprocesador de gráficos 234, las unidades de textura 236, las preROP 242, etc., dentro de una agrupación de procesamiento 214. Además, aunque solo se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo como se describe en el presente documento puede incluir cualquier número de instancias de la agrupación de procesamiento 214. Opcionalmente, cada agrupación de procesamiento 214 puede configurarse para operar independientemente de otras agrupaciones de procesamiento 214 usando unidades de procesamiento, cachés de L1, etc., separadas y distintas.
La Figura 2D muestra un ejemplo del multiprocesador de gráficos 234 en el que el multiprocesador de gráficos 234 se acopla con el gestor de canalizaciones 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucción 254, una unidad de mapeo de direcciones 256, un archivo de registro 258, uno o más núcleos de unidad de procesamiento de gráficos de propósito general (GPGPU) 262 y una o más unidades de carga/almacenamiento 266. Los núcleos de GPGPU 262 y las unidades de carga/almacenamiento 266 se acoplan con la memoria caché 272 y la memoria compartida 270 mediante una interconexión de memoria y caché 268. El multiprocesador de gráficos 234 puede incluir adicionalmente núcleos de tensor y/o de trazado de rayos 263 que incluyen lógica de hardware para acelerar las operaciones matriciales y/o de trazado de rayos.
La caché de instrucciones 252 puede recibir un flujo de instrucciones para ejecutarse desde el gestor de canalizaciones 232. Las instrucciones se almacenan en caché en la caché de instrucciones 252 y se despachan para su ejecución por la unidad de instrucción 254. La unidad de instrucción 254 puede despachar instrucciones como grupos de hilos (por ejemplo, urdimbres), con cada hilo del grupo de hilos asignado a una unidad de ejecución diferente dentro del núcleo de GPGPU 262. Una instrucción puede acceder a cualquiera del espacio de direcciones local, compartido o global especificando una dirección dentro de un espacio de direcciones unificado. La unidad de mapeo de direcciones 256 puede usarse para traducir direcciones en el espacio de direcciones unificado a una dirección de memoria distinta a la que pueden acceder las unidades de carga/almacenamiento 266.
El archivo de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 234. El archivo de registro 258 proporciona almacenamiento temporal para operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, los núcleos de GPGPU 262, las unidades de carga/almacenamiento 266) del multiprocesador de gráficos 234. El archivo de registro 258 puede dividirse entre cada una de las unidades funcionales de manera que cada unidad funcional se asigna a una porción dedicada del archivo de registro 258. Por ejemplo, el archivo de registro 258 puede dividirse entre las diferentes urdimbres que son ejecutadas por el multiprocesador de gráficos 234.
Cada uno de los núcleos de GPGPU 262 puede incluir unidades de coma flotante (FPU) y/o unidades aritméticológicas (ALU) de números enteros que se usan para ejecutar instrucciones del multiprocesador de gráficos 234. En algunas implementaciones, los núcleos de GPGPU 262 pueden incluir lógica de hardware que, de otro modo, podría residir dentro de los núcleos de tensor y/o de trazado de rayos 263. Los núcleos de GPGPU 262 pueden ser similares en cuanto a su arquitectura o pueden diferir en cuanto a su arquitectura. Por ejemplo, y en una realización, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión sencilla y una a Lu de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. Opcionalmente, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar una aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 234 puede incluir adicionalmente una o más unidades de función fija o de función especial para realizar funciones específicas tales como operaciones de copiar rectángulo o de mezcla de píxeles. Uno o más de los núcleos de GPGPU pueden incluir también lógica de función fija o especial.
Los núcleos de GPGPU 262 pueden incluir lógica de SIMD capaz de realizar una única instrucción sobre múltiples conjuntos de datos. Opcionalmente, los núcleos de GPGPU 262 pueden ejecutar físicamente instrucciones de SIMD4, de SIMD8 y de SIMD16 y ejecutar lógicamente instrucciones de SIMD1, de SIMD2 y de SIMD32. Las instrucciones de SIMD para los núcleos de GPGPU pueden ser generadas en tiempo de compilación por un compilador sombreador o pueden generarse automáticamente cuando se ejecutan programas escritos y compilados para arquitecturas de único programa - múltiples datos (SPMD) o de SIMT. Múltiples hilos de un programa configurado para el modelo de ejecución de SIMT pueden ejecutarse mediante una única instrucción de SIMD. Por ejemplo, y en una realización, ocho hilos de SIMT que realizan las mismas operaciones o similares pueden ejecutarse en paralelo mediante una única unidad de lógica de SIMD8.
La interconexión de memoria y caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 234 al archivo de registro 258 y a la memoria compartida 270. Por ejemplo, la interconexión de memoria y caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacenamiento 266 implemente operaciones de carga y de almacenamiento entre la memoria compartida 270 y el archivo de registro 258. El archivo de registro 258 puede operar a la misma frecuencia que los núcleos de GPGPU 262, por lo tanto, la transferencia de datos entre los núcleos de GPGPU 262 y el archivo de registro 258 es de latencia muy baja. La memoria compartida 270 puede usarse para posibilitar la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 puede usarse como una caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de textura 236. La memoria compartida 270 puede usarse también como una caché gestionada por programa. Los hilos que se ejecutan en los núcleos de GPGPU 262 pueden almacenar, de manera programática, datos dentro de la memoria compartida además de los datos almacenados automáticamente en caché que se almacenan dentro de la memoria caché 272.
Las Figuras 3A-3C ilustran multiprocesadores de gráficos adicionales, de acuerdo con realizaciones. Las Figuras 3A-3B ilustran los multiprocesadores de gráficos 325, 350, que están relacionados con el multiprocesador de gráficos 234 de la Figura 2C y puede usarse en lugar de uno de ellos. Por lo tanto, la divulgación de cualquier característica en combinación con el multiprocesador 234 en el presente documento también divulga una combinación correspondiente con el/los multiprocesador(es) de gráficos 325, 350, pero no se limita a tal cosa. La Figura 3C ilustra una unidad de procesamiento de gráficos (GPU) 380 que incluye conjuntos especializados de recursos de procesamiento de gráficos dispuestos en grupos de múltiples núcleos 365A-365N, que corresponden a los multiprocesadores de gráficos 325, 350. Los multiprocesadores de gráficos 325, 350 ilustrados y los grupos de múltiples núcleos 365A-365N pueden ser multiprocesadores de transmisión por flujo continuo (SM) capaces de ejecutar simultáneamente un gran número de hilos de ejecución.
El multiprocesador de gráficos 325 de la Figura 3A incluye múltiples instancias adicionales de unidades de recurso de ejecución relativas al multiprocesador de gráficos 234 de la Figura 2D. Por ejemplo, el multiprocesador de gráficos 325 puede incluir múltiples instancias de la unidad de instrucción 332A-332B, el archivo de registro 334A-334B y la(s) unidad(es) de textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de cálculo o de gráficos (por ejemplo, el núcleo de GPGPU 336A-336B, el núcleo de tensor 337A-337B, el núcleo de trazado de rayos 338A-338B) y múltiples conjuntos de unidades de carga/almacenamiento 340A-340B. Las unidades de recurso de ejecución tienen una caché de instrucciones común 330, una memoria caché de textura y/o de datos 342 y una memoria compartida 346.
Los diversos componentes pueden comunicarse mediante un tejido de interconexión 327. El tejido de interconexión 327 puede incluir uno o más conmutadores de barra transversal para posibilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 325. El tejido de interconexión 327 puede ser una capa de tejido de red de alta velocidad separada sobre la que se apila cada componente del multiprocesador de gráficos 325. Los componentes del multiprocesador de gráficos 325 se comunican con componentes remotos mediante el tejido de interconexión 327. Por ejemplo, cada uno de los núcleos de GPGPU 336A-336B, 337A-337By 3378A-338B puede comunicarse con la memoria compartida 346 mediante el tejido de interconexión 327. El tejido de interconexión 327 puede arbitrar la comunicación dentro del multiprocesador de gráficos 325 para garantizar una asignación de ancho de banda equitativa entre componentes.
El multiprocesador de gráficos 350 de la Figura 3B incluye múltiples conjuntos de recursos de ejecución 356A-356D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucción, archivos de registro, núcleos de GPGPU y unidades de carga-almacenamiento, como se ilustra en la Figura 2D y en la Figura 3A. Los recursos de ejecución 356A-356D pueden funcionar en conjunto con la(s) unidad(es) de textura 360A-360D para operaciones de textura, mientras comparten una caché de instrucciones 354 y una memoria compartida 353. Por ejemplo, los recursos de ejecución 356A-356D pueden compartir una caché de instrucciones 354 y una memoria compartida 353, así como múltiples instancias de una memoria de textura y/o de caché de datos 358A-358B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 352 similar al tejido de interconexión 327 de la Figura 3A.
Los expertos en la materia comprenderán que la arquitectura descrita en las Figura 1 ,2A-2D y 3A-3B es descriptiva. Por lo tanto, las técnicas descritas en el presente documento pueden implementarse en cualquier unidad de procesamiento configurada apropiadamente, incluyendo, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades centrales de procesamiento (CPU) de sobremesa o de servidor, incluyendo CPU de múltiples núcleos, una o más unidades de procesamiento paralelo, tales como la unidad de procesamiento paralelo 202 de la Figura 2A, así como uno o más procesadores de gráficos o unidades de procesamiento de propósito especial.
Un procesador paralelo o GPGPU como se describe en el presente documento puede acoplarse de manera comunicativa a núcleos de anfitrión/procesador para acelerar las operaciones de gráficos, las operaciones de aprendizaje automático, las operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede acoplarse de manera comunicativa al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede integrarse en el mismo paquete o chip que los núcleos y acoplarse de manera comunicativa a los núcleos a través de un bus/interconexión de procesador interno (es decir, internamente al paquete o chip). Independientemente de la manera en la que se conecta la GPU, los núcleos de procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. La GPU usa, a continuación, circuitería/lógica dedicada para procesar de manera eficiente estos comandos/instrucciones.
La Figura 3C ilustra una unidad de procesamiento de gráficos (GPU) 380 que incluye conjuntos especializados de recursos de procesamiento de gráficos dispuestos en grupos de múltiples núcleos 365A-365N. Aunque se proporcionan los detalles de un único grupo de múltiples núcleos 365A, se apreciará que los otros grupos de múltiples núcleos 365B-365N pueden equiparse con los mismos conjuntos o similares de recursos de procesamiento de gráficos. Los detalles descritos con respecto a los grupos de múltiples núcleos 365A-365N también pueden ser aplicables a cualquier multiprocesador de gráficos 234, 325, 350 descrito en el presente documento.
Como se ilustra, un grupo de múltiples núcleos 365A puede incluir un conjunto de núcleos de gráficos 370, un conjunto de núcleos de tensor 371 y un conjunto de núcleos de trazado de rayos 372. Un planificador/despachador 368 planifica y distribuye los hilos de gráficos para su ejecución en los diversos núcleos 370, 371,372. Un conjunto de archivos de registro 369 almacena valores de operando usados por los núcleos 370, 371, 372 cuando se ejecutan los hilos de gráficos. Estos pueden incluir, por ejemplo, registros de número entero para almacenar valores de números enteros, registros de coma flotante para almacenar valores de coma flotante, registros de vector para almacenar elementos de datos empaquetados (elementos de datos de número entero y/o de coma flotante) y registros de tesela para almacenar valores de tensor/matriz. Los registros de tesela pueden implementarse como conjuntos combinados de registros de vector.
Una o más cachés de nivel 1 (L1) y unidades de memoria compartida 373 combinadas almacenan datos de gráficos tales como datos de textura, datos de vértice, datos de píxel, datos de rayo, datos de volumen delimitador, etc., localmente dentro de cada grupo de múltiples núcleos 365A. También pueden usarse una o más unidades de textura 374 para realizar operaciones de texturizado, tales como mapeo y muestreo de textura. Una caché de nivel 2 (L2) 375 compartida por todos o un subconjunto de los grupos de múltiples núcleos 365A-365N almacena datos de gráficos y/o instrucciones para múltiples hilos de gráficos concurrentes. Como se ilustra, la caché de L2375 puede compartirse a través de una pluralidad de grupos de múltiples núcleos 365A-365N. Uno o más controladores de memoria 367 acoplan la GPU 380 a una memoria 366 que puede ser una memoria de sistema (por ejemplo, DRAM) y/o una memoria de gráficos dedicada (por ejemplo, memoria GDDR6).
La circuitería de entrada/salida (E/S) 363 acopla la GPU 380 a uno o más dispositivos de E/S 362, tales como procesadores de señales digitales (DSP), controladores de red o dispositivos de entrada de usuario. Puede usarse una interconexión en chip para acoplar los dispositivos de E/S 362 a la GPU 380 y a la memoria 366. Una o más unidades de gestión de memoria de E/S (IOMMU) 364 de la circuitería de E/S 363 acoplan los dispositivos de E/S 362 directamente a la memoria de sistema 366. Opcionalmente, la IOMMU 364 gestiona múltiples conjuntos de tablas de páginas para mapear direcciones virtuales a direcciones físicas en la memoria de sistema 366. Los dispositivos de E/S 362, la(s) CPU 361 y la(s) GPU 380 pueden compartir, a continuación, el mismo espacio de direcciones virtuales.
En una implementación de la IOMMU 364, la IOMMU 364 soporta virtualización. En este caso, puede gestionar un primer conjunto de tablas de páginas para mapear direcciones virtuales de invitados/gráficos a direcciones físicas de invitados/gráficos y un segundo conjunto de tablas de páginas para mapear las direcciones físicas de invitados/gráficos a direcciones físicas de sistema/anfitrión (por ejemplo, dentro de la memoria de sistema 366). Las direcciones base de cada uno del primer y segundo conjuntos de tablas de páginas pueden almacenarse en registros de control e intercambiarse en una conmutación de contexto (por ejemplo, de modo que se proporciona al nuevo contexto acceso al conjunto relevante de tablas de páginas). Aunque no se ilustra en la Figura 3C, cada uno de los núcleos 370, 371, 372 y/o los grupos de múltiples núcleos 365A-365N pueden incluir memorias intermedias de traducción adelantada (TLB) para almacenar en caché las traducciones de virtual de invitado a física de invitado, traducciones de física de invitado a física de anfitrión y traducciones de virtual de invitado a física de anfitrión.
La(s) CPU 361, la(s) GPU 380 y los dispositivos de E/S 362 pueden integrarse en un único chip y/o paquete de chips de semiconductores. La memoria ilustrada 366 puede integrarse en el mismo chip o puede acoplarse a los controladores de memoria 367 mediante una interfaz fuera de chip. En una implementación, la memoria 366 comprende memoria GDDR6 que comparte el mismo espacio de direcciones virtuales que otras memorias de nivel de sistema físico, aunque los principios subyacentes descritos en el presente documento no se limitan a esta implementación específica.
Los núcleos de tensor 371 pueden incluir una pluralidad de unidades de ejecución diseñadas específicamente para realizar operaciones matriciales, que son la operación de cálculo fundamental usada para realizar operaciones de aprendizaje profundo. Por ejemplo, pueden usarse operaciones de multiplicación de matrices simultáneas para el entrenamiento y la inferencia de redes neuronales. Los núcleos de tensor 371 pueden realizar procesamiento matricial usando una diversidad de precisiones de operandos que incluyen coma flotante de precisión sencilla (por ejemplo, 32 bits), coma flotante de media precisión (por ejemplo, 16 bits), palabras enteras (16 bits), bytes (8 bits) y medios bytes (4 bits). Por ejemplo, una implementación de red neuronal extrae características de cada escena representada, combinando potencialmente detalles de múltiples fotogramas, para construir una imagen final de alta calidad.
En implementaciones de aprendizaje profundo, puede planificarse el trabajo de multiplicación de matrices paralela para su ejecución en los núcleos de tensor 371. El entrenamiento de redes neuronales, en particular, requiere un número significativo de operaciones de productos escalares de matrices. Para procesar una formulación de producto interno de una matriz N x N x N multiplicada, los núcleos de tensor 371 pueden incluir al menos N elementos de procesamiento de producto escalar. Antes de que comience la multiplicación de matrices, se carga una matriz completa en registros de teselas y se carga al menos una columna de una segunda matriz en cada ciclo durante N ciclos. En cada ciclo, hay N productos escalares que se procesan.
Los elementos de matriz pueden almacenarse con diferentes precisiones de acuerdo con la implementación particular, que incluye palabras de 16 bits, bytes de 8 bits (por ejemplo, INT8) y medios bytes de 4 bits (por ejemplo, INT4). Pueden especificarse diferentes modos de precisión para los núcleos de tensor 371 para garantizar que se use la precisión más eficiente para diferentes cargas de trabajo (por ejemplo, tales como cargas de trabajo de inferencia que pueden tolerar la cuantificación a bytes y medios bytes).
Los núcleos de trazado de rayos 372 pueden acelerar las operaciones de trazado de rayos tanto para implementaciones de trazado de rayos en tiempo real como para implementaciones de trazado de rayos que no son en tiempo real. En particular, los núcleos de trazado de rayos 372 pueden incluir circuitería de cruce/intersección de rayos para realizar el cruce de rayos usando jerarquías de volúmenes delimitadores (BVH) e identificar intersecciones entre rayos y primitivas encerradas dentro de los volúmenes de BVH. Los núcleos de trazado de rayos 372 también pueden incluir circuitería para realizar prueba de profundidad y selección (por ejemplo, usando una memoria intermedia Z o una disposición similar). En una implementación, los núcleos de trazado de rayos 372 realizan operaciones de cruce e intersección en conjunto con las técnicas de eliminación de ruido de imágenes descritas en el presente documento, al menos una porción de las cuales puede ejecutarse en los núcleos de tensor 371. Por ejemplo, los núcleos de tensor 371 pueden implementar una red neuronal de aprendizaje profundo para realizar la eliminación de ruido de fotogramas generados por los núcleos de trazado de rayos 372. Sin embargo, la(s) CPU 361, los núcleos de gráficos 370 y/o los núcleos de trazado de rayos 372 también pueden implementar todos o una porción de los algoritmos de eliminación de ruido y/o aprendizaje profundo.
Además, como se ha descrito anteriormente, puede emplearse un enfoque distribuido para la eliminación de ruido en el que la GPU 380 está en un dispositivo informático acoplado a otros dispositivos informáticos a través de una red o interconexión de alta velocidad. En este enfoque distribuido, los dispositivos informáticos interconectados pueden compartir datos de aprendizaje/entrenamiento de redes neuronales para mejorar la velocidad con la que el sistema global aprende a realizar la eliminación de ruido para diferentes tipos de fotogramas de imagen y/o diferentes aplicaciones de gráficos.
Los núcleos de trazado de rayos 372 pueden procesar todos los cruces de BVH y las intersecciones de primitivas de rayos, evitando que los núcleos de gráficos 370 se sobrecarguen con miles de instrucciones por rayo. Por ejemplo, cada núcleo de trazado de rayos 372 incluye un primer conjunto de circuitería especializada para realizar pruebas de recuadros delimitadores (por ejemplo, para operaciones de cruce) y un segundo conjunto de circuitería especializada para realizar las pruebas de intersección de triángulos de rayos (por ejemplo, rayos que se intersecan que han sido cruzados). Por lo tanto, por ejemplo, el grupo de múltiples núcleos 365A puede simplemente lanzar una sonda de rayos, y los núcleos de trazado de rayos 372 realizan de forma independiente cruce e intersección de rayos y devuelven datos de acierto (por ejemplo, un acierto, ningún acierto, múltiples aciertos, etc.) al contexto de hilo. Los otros núcleos 370, 371 se liberan para realizar otro trabajo de gráficos o cálculo mientras que los núcleos de trazado de rayos 372 realizan las operaciones de cruce e intersección.
Opcionalmente, cada núcleo de trazado de rayos 372 puede incluir una unidad de cruce para realizar operaciones de prueba de BVH y/o una unidad de intersección que realiza pruebas de intersección de primitivas de rayos. La unidad de intersección genera una respuesta de "acierto", "ningún acierto" o "múltiples aciertos", que proporciona al hilo apropiado. Durante las operaciones de cruce e intersección, los recursos de ejecución de los otros núcleos (por ejemplo, los núcleos de gráficos 370 y los núcleos de tensor 371) se liberan para realizar otras formas de trabajo de gráficos.
En una realización opcional descrita a continuación, se usa un enfoque de rasterización/trazado de rayos híbrido en el que se distribuye trabajo entre los núcleos de gráficos 370 y los núcleos de trazado de rayos 372.
Los núcleos de trazado de rayos 372 (y/u otros núcleos 370, 371) pueden incluir soporte de hardware para un conjunto de instrucciones de trazado de rayos tal como el trazado de rayos de DirectX (DXR) de Microsoft que incluye un comando DispatchRays, así como sombreadores de generación de rayos, de acierto más cercano, de cualquier acierto y de desacierto, que posibilitan la asignación de conjuntos singulares de sombreadores y texturas para cada objeto. Otra plataforma de trazado de rayos que puede ser soportada por los núcleos de trazado de rayos 372, los núcleos de gráficos 370 y los núcleos de tensor 371 es Vulkan 1.1.85. Sin embargo, obsérvese que los principios subyacentes descritos en el presente documento no se limitan a ninguna ISA de trazado de rayos particular.
En general, los diversos núcleos 372, 371,370 pueden soportar un conjunto de instrucciones de trazado de rayos que incluye instrucciones/funciones para uno o más de generación de rayos, acierto más cercano, cualquier acierto, intersección de primitivas de rayos, construcción de recuadro delimitador jerárquico y por primitiva, desacierto, visita y excepciones. Más específicamente, una realización preferida incluye instrucciones de trazado de rayos para realizar una o más de las siguientes funciones:
Generación de rayos - Las instrucciones de generación de rayos pueden ejecutarse para cada píxel, muestra u otra asignación de trabajo definida por el usuario.
Acierto más cercano - Una instrucción de acierto más cercano puede ejecutarse para ubicar el punto de intersección más cercano de un rayo con primitivas dentro de una escena.
Cualquier acierto - Una instrucción de cualquier acierto identifica múltiples intersecciones entre un rayo y primitivas dentro de una escena, potencialmente para identificar el nuevo punto de intersección más cercano.
Intersección - Una instrucción de intersección realiza una prueba de intersección de primitivas de rayos y emite un resultado.
Construcción de recuadro delimitador por primitiva - Esta instrucción crea un recuadro delimitador alrededor de una primitiva o grupo de primitivas dado (por ejemplo, cuando se construye una nueva BVH u otra estructura de datos de aceleración).
Desacierto - Indica que un rayo yerra toda la geometría dentro de una escena, o una región especificada de una escena.
Visita - Indica los volúmenes hijos que cruzará un rayo.
Excepciones - Incluye diversos tipos de manejadores de excepciones (por ejemplo, invocados para diversas condiciones de error).
Técnicas para interconexión de GPU a procesador de anfitrión
La Figura 4A ilustra una arquitectura ilustrativa en la que una pluralidad de GPU 410-413, por ejemplo, tales como los procesadores paralelos 200 mostrados en la Figura 2A, se acoplan de manera comunicativa a una pluralidad de procesadores de múltiples núcleos 405-406 a través de los enlaces de alta velocidad 440A-440D (por ejemplo, buses, interconexiones de punto a punto, etc.). Los enlaces de alta velocidad 440A-440D pueden soportar un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o superior, dependiendo de la implementación. Pueden usarse diversos protocolos de interconexión, incluyendo, pero sin limitación, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes descritos en el presente documento no se limitan a ningún protocolo o caudal de comunicación particular.
Dos o más de las GPU 410-413 pueden interconectarse a través de los enlaces de alta velocidad 442A-442B, que pueden implementarse usando los mismos protocolos/enlaces que, o unos diferentes de, los usados para los enlaces de alta velocidad 440A-440D. De manera similar, dos o más de los procesadores de múltiples núcleos 405-406 pueden conectarse a través del enlace de alta velocidad 443, que pueden ser buses de multiprocesador simétrico (SMP) que operan a 20 GB/s, 30 GB/s, 120 GB/s o superior. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en la Figura 4A puede conseguirse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, como se menciona, los principios subyacentes descritos en el presente documento no se limitan a ningún tipo particular de tecnología de interconexión.
Cada procesador de múltiples núcleos 405-406 puede acoplarse de manera comunicativa a una memoria de procesador 401-402, mediante las interconexiones de memoria 430A-430B, respectivamente, y cada GPU 410-413 se acopla de manera comunicativa a la memoria de GPU 420-423 a través de las interconexiones de memoria de GPU 450A-450D, respectivamente. Las interconexiones de memoria 430A-430B y 450A-450D pueden utilizar las mismas tecnologías de acceso de memoria, o unas diferentes. A modo de ejemplo, y no de limitación, las memorias de procesador 401-402 y las memorias de GPU 420-423 pueden ser memorias volátiles, tal como memorias de acceso aleatorio dinámicas (DRAM) (incluyendo DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6), o Memoria de Alto Ancho de Banda (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint/Optane o Nano-Ram. Por ejemplo, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
Como se describe a continuación, aunque los diversos procesadores 405-406 y las diversas GPU 410-413 pueden acoplarse físicamente a una memoria 401-402, 420-423 particular, respectivamente, puede implementarse una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtual (también denominado espacio "de direcciones eficaces") se distribuye entre todas las diversas memorias físicas. Por ejemplo, cada una de las memorias de procesador 401 -402 puede comprender 64 GB del espacio de direcciones de memoria de sistema y cada una de las memorias de GPU 420-423 puede comprender 32 GB del espacio de direcciones de memoria de sistema (dando como resultado un total de memoria direccionable de 256 GB en este ejemplo).
La Figura 4B ilustra detalles opcionales adicionales para una interconexión entre un procesador de múltiples núcleos 407 y un módulo de aceleración de gráficos 446. El módulo de aceleración de gráficos 446 puede incluir uno o más chips de GPU integrados en una tarjeta de línea que se acopla al procesador 407 mediante el enlace de alta velocidad 440. Como alternativa, el módulo de aceleración de gráficos 446 puede integrarse en el mismo paquete o chip que el procesador 407.
El procesador 407 ilustrado incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción adelantada 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos que no se ilustran para evitar complicar los principios subyacentes de los componentes descritos en el presente documento (por ejemplo, unidades de extracción de instrucción, unidades de predicción de bifurcaciones, descodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las cachés 462A-462D pueden comprender cachés de nivel 1 (L1) y de nivel 2 (L2). Además, una o más cachés compartidas 456 pueden incluirse en la jerarquía de almacenamiento en caché y pueden ser compartidas por conjuntos de los núcleos 460A-460D. Por ejemplo, una realización del procesador 407 incluye 24 núcleos, cada uno con su propia caché de L1, doce cachés de L2 compartidas y doce cachés de L3 compartidas. En esta realización, una de las cachés de L2 y de L3 es compartida por dos núcleos adyacentes. El procesador 407 y el módulo de integración de acelerador de gráficos 446 se conectan con la memoria de sistema 441, que puede incluir las memorias de procesador 401 -402.
Se mantiene la coherencia para datos e instrucciones almacenados en las diversas cachés 462A-462D, 456 y la memoria de sistema 441 mediante comunicación entre núcleos a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener una lógica/circuitería de coherencia de caché asociada con la misma con la que comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de fisgoneo de caché a través del bus de coherencia 464 para fisgar accesos de caché. Las técnicas de fisgoneo/coherencia de caché son bien entendidas por los expertos en la técnica y no se describirán en detalle en el presente caso para evitar complicar los principios subyacentes descritos en el presente documento.
Puede proporcionarse un circuito intermediario 425 que acopla de manera comunicativa el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de caché como un homólogo de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito intermediario 425 a través del enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración de gráficos 446 al enlace de alta velocidad 440.
En una implementación, un circuito de integración de acelerador 436 proporciona servicios de gestión de caché, de acceso de memoria, de gestión de contexto y de gestión de interrupciones en nombre de una pluralidad de motores de procesamiento de gráficos 431, 432, N del módulo de aceleración de gráficos 446. Cada uno de los motores de procesamiento de gráficos 431,432, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 431, 432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/descodificadores de vídeo), muestreadores y motores de BLIT. En otras palabras, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 431 -432, N, o los motores de procesamiento de gráficos 431 -432, N pueden ser unas GPU individuales integradas en un paquete, tarjeta de línea o chip común.
El circuito de integración de acelerador 436 puede incluir una unidad de gestión de memoria (MMU) 439 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria virtual a física (también denominadas traducciones de memoria eficaz a real) y protocolos de acceso de memoria para acceder a la memoria de sistema 441. La MMU 439 puede incluir también una memoria intermedia de traducción adelantada (TLB) (no mostrada) para almacenar en caché las traducciones de dirección virtual/eficaz a física/real. En una implementación, una caché 438 almacena comandos y datos para un acceso eficiente por los motores de procesamiento de gráficos 431-432, N. Los datos almacenados en la caché 438 y en las memorias de gráficos 433-434, M pueden mantenerse coherentes con las cachés de núcleo 462A-462D, 456 y la memoria de sistema 411. Como se menciona, esto puede conseguirse mediante el circuito intermediario 425 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 438 y las memorias 433-434, M (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones desde la caché 438).
Un conjunto de registros 445 almacenan datos de contexto para hilos ejecutados por los motores de procesamiento de gráficos 431-432, N y un circuito de gestión de contexto 448 gestiona los contextos de hilo. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de guardado y de restablecimiento para guardar y restablecer contextos de los diversos hilos durante conmutaciones de contexto (por ejemplo, en donde se guarda un primer hilo y se almacena un segundo hilo de modo que el segundo hilo puede ser ejecutado por un motor de procesamiento de gráficos). Por ejemplo, en una conmutación de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales en una región designada en memoria (por ejemplo, identificada por un puntero de contexto). Este puede restablecer, a continuación, los valores de registro cuando se vuelve al contexto. Un circuito de gestión de interrupciones 447, por ejemplo, puede recibir y procesar interrupciones recibidas desde dispositivos de sistema.
En una implementación, direcciones virtuales/eficaces desde un motor de procesamiento de gráficos 431 son traducidas, por la MMU 439, a direcciones reales/físicas en la memoria de sistema 411. Opcionalmente, el circuito de integración de acelerador 436 soporta múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo de acelerador de gráficos 446 puede dedicarse a una única aplicación ejecutada en el procesador 407 o puede compartirse entre múltiples aplicaciones. Opcionalmente, se proporciona un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos pueden subdividirse en "segmentos" que se asignan a diferentes VM y/o aplicaciones basándose en los requisitos de procesamiento y prioridades asociados con las VM y/o las aplicaciones.
Por lo tanto, el circuito de integración de acelerador 436 actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de traducción de direcciones y de caché de memoria de sistema. En una realización, para facilitar la funcionalidad de unión con puente, el circuito de integración de acelerador 436 también puede incluir una E/S compartida 497 (por ejemplo, PCIe, USB) y hardware para posibilitar el control de sistema del voltaje, la sincronización, el rendimiento, las características térmicas y la seguridad. La E/S compartida 497 puede utilizar conexiones físicas separadas o puede cruzar el enlace de alta velocidad 440. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador de anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de memoria.
Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente con el espacio de direcciones real observado por el procesador de anfitrión 407, cualquier procesador de anfitrión puede dirigir estos recursos directamente usando un valor de dirección eficaz. Una función opcional del circuito de integración de acelerador 436 es la separación física de los motores de procesamiento de gráficos 431 -432, N de modo que aparecen ante el sistema como unidades independientes.
Una o más memorias de gráficos 433-434, M pueden acoplarse a cada uno de los motores de procesamiento de gráficos 431-432, N, respectivamente. Las memorias de gráficos 433-434, M almacenan instrucciones y datos que procesa cada uno de los motores de procesamiento de gráficos 431-432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles tales como DRAM (incluyendo las DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6) o HBM, y/o pueden ser memorias no volátiles tales como 3D XPoint/Optane o Nano-Ram.
Para reducir el tráfico de datos a través del enlace de alta velocidad 440, pueden usarse técnicas de desviación para garantizar que los datos almacenados en las memorias de gráficos 433-434, M son datos que serán usados de la manera más frecuente por los motores de procesamiento de gráficos 431-432, N y preferiblemente no serán usados por los núcleos 460A-460D (al menos, no de manera frecuente). De manera similar, el mecanismo de desviación intenta mantener datos que son necesitados por los núcleos (y, preferiblemente, no por los motores de procesamiento de gráficos 431 -432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria de sistema 411.
De acuerdo con una variante mostrada en la Figura 4C, el circuito de integración de acelerador 436 se integra dentro del procesador 407. Los motores de procesamiento de gráficos 431-432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, puede utilizar cualquier forma de protocolo de interfaz o bus). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que las descritas con respecto a la Figura 4B , pero potencialmente a un caudal superior dada su proximidad estrecha al bus de coherencia 464 y a las cachés 462A-462D, 456.
Las realizaciones descritas pueden soportar diferentes modelos de programación que incluyen un modelo de programación de proceso dedicado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). Este último puede incluir modelos de programación que son controlados por el circuito de integración de acelerador 436 y modelos de programación que son controlados por el módulo de aceleración de gráficos 446.
En las realizaciones del modelo de proceso dedicado, los motores de procesamiento de gráficos 431-432, N pueden dedicarse a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede encauzar otras solicitudes de aplicación a los motores de gráficos 431-432, N, proporcionando virtualización dentro de una VM/subdivisión.
En los modelos de programación de proceso dedicado, los motores de procesamiento de gráficos 431-432, N, pueden ser compartidos por múltiples subdivisiones de aplicación/VM. Los modelos compartidos requieren que un hipervisor de sistema virtualice los motores de procesamiento de gráficos 431-432, N para permitir el acceso por cada sistema operativo. Para sistemas de subdivisión única sin un hipervisor, los motores de procesamiento de gráficos 431-432, N son propiedad del sistema operativo. En ambos casos, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431 -432, N para proporcionar acceso a cada proceso o aplicación.
Para el modelo de programación compartida, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos 431-432, N individual selecciona un elemento de proceso usando un manejador de proceso. Los elementos de proceso pueden almacenarse en la memoria de sistema 411, y estos pueden ser direccionables usando las técnicas de traducción de dirección eficaz a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso de anfitrión cuando se registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, llamando a software de sistema para añadir el elemento de proceso a la lista vinculada de elementos de proceso). Los 16 bits inferiores del manejador de proceso pueden ser el desplazamiento del elemento de proceso dentro de la lista vinculada de elementos de proceso.
La Figura 4D ilustra un segmento de integración de acelerador 490 ilustrativo. Como se usa en el presente documento, un "segmento" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de direcciones eficaces de aplicación 482 dentro de la memoria de sistema 411 almacena los elementos de proceso 483. Los elementos de proceso 483 pueden almacenarse en respuesta a las invocaciones de GPU 481 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado de proceso para la aplicación 480 correspondiente. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un único trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En este último caso, el WD 484 es un puntero a la cola de solicitudes de trabajo en el espacio de direcciones 482 de la aplicación.
El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos 431 -432, N individuales pueden ser compartidos por todos, o por un subconjunto de, los procesos en el sistema. Por ejemplo, las tecnologías descritas en el presente documento pueden incluir una infraestructura para establecer el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para empezar un trabajo en un entorno virtualizado.
En una implementación, el modelo de programación de proceso dedicado es específico de la implementación. En este modelo, un único proceso es propietario del módulo de aceleración de gráficos 446 o de un motor de procesamiento de gráficos 431 individual. Debido a que el módulo de aceleración de gráficos 446 es propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 436 para la subdivisión propietaria y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso propietario en el momento en el que se asigna el módulo de aceleración de gráficos 446.
Durante la operación, una unidad de extracción de WD 491 en el segmento de integración de acelerador 490 extrae el siguiente WD 484 que incluye una indicación del trabajo a hacer por uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Datos desde el WD 484 pueden almacenarse en los registros 445 y ser usados por la MMU 439, el circuito de gestión de interrupciones 447 y/o el circuito de gestión de contexto 448 como se ilustra. Por ejemplo, la MMU 439 puede incluir circuitería de recorrido de segmentos/páginas para acceder a las tablas de segmentos/páginas 486 dentro del espacio de direcciones virtuales de SO 485. El circuito de gestión de interrupciones 447 puede procesar los eventos de interrupción 492 recibidos del módulo de aceleración de gráficos 446. Cuando se realizan operaciones de gráficos, una dirección eficaz 493 generada por un motor de procesamiento de gráficos 431 -432, N es traducida a una dirección real por la MMU 439.
El mismo conjunto de registros 445 puede duplicarse para cada motor de procesamiento de gráficos 431-432, N y/o módulo de aceleración de gráficos 446, y puede ser inicializado por el hipervisor o el sistema operativo. Cada uno de estos registros duplicados puede incluirse en un segmento de integración de acelerador 490. En la Tabla 1 se muestran registros ilustrativos que pueden ser inicializados por el hipervisor.
Tabla 1 - Registros inicializados por hipervisor
Los registros ilustrativos que pueden inicializarse por el sistema operativo se muestran en la Tabla 2.
Tabla 2 - Registros inicializados por sistema operativo
Cada WD 484 puede ser específico de un módulo de aceleración de gráficos 446 y/o de un motor de procesamiento de gráficos 431-432, N particular. Este contiene toda la información que requiere un motor de procesamiento de gráficos 431 -432, N para hacer su trabajo, o puede ser un puntero a una ubicación de memoria en la que la aplicación ha establecido una cola de comandos de trabajo que completar.
La Figura 4E ilustra detalles opcionales adicionales de un modelo compartido. Este incluye un espacio de direcciones real de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones real de hipervisor 498 es accesible mediante un hipervisor 496 que virtualiza los motores de módulo de aceleración de gráficos para el sistema operativo 495.
Los modelos de programación compartida prevén que todos los procesos, o un subconjunto de los mismos, de todas las subdivisiones en el sistema, o de un subconjunto de las mismas, usen un módulo de aceleración de gráficos 446. Hay dos modelos de programación en los que el módulo de aceleración de gráficos 446 es compartido por múltiples procesos y particiones: compartido en segmentos de tiempo y compartido dirigido a gráficos.
En este modelo, el hipervisor de sistema 496 es propietario del módulo de aceleración de gráficos 446 y hace que su función esté disponible para todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede satisfacer los siguientes requisitos: 1) La solicitud de trabajo de una aplicación ha de ser autónoma (es decir, no es necesario mantener el estado entre trabajos), o el módulo de aceleración de gráficos 446 ha de proporcionar un mecanismo de guardado y de restablecimiento de contexto. 2) Se garantiza, por el módulo de aceleración de gráficos 446, que la solicitud de trabajo de una aplicación se completa en una cantidad especificada de tiempo, incluyendo cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de dar prioridad al procesamiento del trabajo. 3) Se ha de garantizar al módulo de aceleración de gráficos 446 la equidad entre procesos cuando se opera en el modelo de programación compartido dirigido.
Para el modelo compartido, puede requerirse que la aplicación 480 haga una llamada de sistema al sistema operativo 495 con un tipo del módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de guardado/restablecimiento de contexto (CSRP). El tipo del módulo de aceleración de gráficos 446 describe la función de aceleración objetivo para la llamada de sistema. El tipo del módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. Al WD se le da formato específicamente para el módulo de aceleración de gráficos 446, y puede estar en forma de un comando del módulo de aceleración de gráficos 446, un puntero de dirección eficaz a una estructura definida por el usuario, un puntero de dirección eficaz a una cola de comandos, o cualquier otra estructura de datos para describir el trabajo a hacer por el módulo de aceleración de gráficos 446. En una realización, el valor de AMR es el estado de AMR que usar para el proceso actual. El valor pasado al sistema operativo es similar a que una aplicación establezca el AMR. Si las implementaciones del circuito de integración de acelerador 436 y del módulo de aceleración de gráficos 446 no soportan un Registro de Anulación de Máscara de Autoridad de Usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada de hipervisor. El hipervisor 496 puede aplicar opcionalmente el valor de registro de anulación de máscara de autoridad (AMOR) actual antes de colocar el AMR en el elemento de proceso 483. El CSRP puede ser uno de los registros 445 que contienen la dirección eficaz de un área en el espacio de direcciones 482 de la aplicación para que el módulo de aceleración de gráficos 446 guarde y restablezca el estado de contexto. Este puntero es opcional si no se requiere que se guarde estado alguno entre trabajos o cuando se da prioridad a un trabajo. El área de guardado/restablecimiento de contexto puede ser memoria de sistema anclada.
Tras recibir la llamada de sistema, el sistema operativo 495 puede verificar que la aplicación 480 se ha registrado y que se le ha dado la autoridad para usar el módulo de aceleración de gráficos 446. El sistema operativo 495 llama, a continuación, al hipervisor 496 con la información mostrada en la Tabla 3.
Tabla 3 - Parámetros de llamada de SO a hipervisor
Tras recibir la llamada de hipervisor, el hipervisor 496 verifica que el sistema operativo 495 se ha registrado y que se le ha dado la autoridad para usar el módulo de aceleración de gráficos 446. El hipervisor 496 pone, a continuación, el elemento de proceso 483 en la lista vinculada de elementos de proceso para el tipo del módulo de aceleración de gráficos 446 correspondiente. El elemento de proceso puede incluir la información mostrada en la Tabla 4.
Tabla 4 - Información de elemento de proceso
El hipervisor puede inicializar una pluralidad de registros 445 del segmento de integración de acelerador 490.
Como se ilustra en la Figura 4F, en una implementación opcional, se emplea una memoria unificada direccionable mediante un espacio de direcciones de memoria virtual común usado para acceder a las memorias de procesador físico 401-402 y a las memorias de GPU 420-423. En esta implementación, operaciones ejecutadas en las GPU 410 413 utilizan el mismo espacio de direcciones de memoria virtual/eficaz para acceder a las memorias de procesadores 401-402, y viceversa, simplificando de ese modo la programabilidad. Una primera porción del espacio de direcciones virtual/eficaz puede asignarse a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. El espacio de memoria virtual/eficaz total (denominado, en ocasiones, el espacio de direcciones eficaces) puede distribuirse, por lo tanto, a través de cada una de las memorias de procesador 401-402 y las memorias de GPU 420-423, permitiendo que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual mapeada con esa memoria.
Puede proporcionarse una circuitería de gestión de desvío/coherencia 494A-494E dentro de una o más de las MMU 439A-439E que garantiza la coherencia de caché entre las cachés de los procesadores de anfitrión (por ejemplo, 405) y las GPU 410-413 e implementa técnicas de desvío que indican las memorias físicas en las que deberían almacenarse ciertos tipos de datos. Aunque se ilustran múltiples instancias de la circuitería de gestión de desvío/coherencia 494A-494E en la Figura 4F, la circuitería de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 405 y/o dentro del circuito de integración de acelerador 436.
La memoria unida a GPU 420-423 puede mapearse como parte de memoria de sistema, y que se acceda a la misma usando tecnología de memoria virtual compartida (SVM), pero sin adolecer de las desventajas de rendimiento típicas asociadas con la coherencia de caché de sistema completa. La capacidad de que se acceda a la memoria unida a GPU 420-423 como memoria de sistema sin una sobrecarga de coherencia de caché onerosa proporciona un entorno de operación beneficioso para la descarga de GPU. Esta disposición permite que el software del procesador de anfitrión 405 establezca operandos y acceda a resultados de cálculo, sin la sobrecarga de copias de datos de DMA de E/S tradicionales. Tales copias tradicionales implican llamadas de controlador, interrupciones y accesos de E/S mapeados con memoria (MMIO) que son, todos ellos, ineficientes en relación con los accesos de memoria sencillos. Al mismo tiempo, la capacidad de acceder a la memoria unida a GPU 420-423 sin sobrecargas de coherencia de caché puede ser crítica para el tiempo de ejecución de un cálculo descargado. En casos con tráfico de memoria de escritura de transmisión por flujo continuo sustancial, por ejemplo, la sobrecarga de coherencia de caché puede reducir significativamente el ancho de banda de escritura eficaz observado por una GPU 410-413. La eficiencia del establecimiento de operandos, la eficiencia del acceso a resultados y la eficiencia del cálculo de GPU desempeñan, todas ellas, un papel en la determinación de la eficacia de la descarga de GPU.
Una selección entre el desvío de GPU y el desvío de procesador de anfitrión puede ser controlada por una estructura de datos de rastreador de desvío. Puede usarse una tabla de desvíos, por ejemplo, que puede ser una estructura granular a nivel de página (es decir, controlada con la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria unida a GPU. La tabla de desvíos puede implementarse en un rango de memoria robado de una o más memorias unidas a GPU 420-423, con o sin una caché de desvío en la GPU 410-413 (por ejemplo, para almacenar en caché entradas usadas de manera frecuente/reciente de la tabla de desvíos). Como alternativa, toda la tabla de desvíos puede mantenerse dentro de la GPU.
En una implementación, se accede a la entrada de tabla de desvíos asociada con cada acceso a la memoria unida a GPU 420-423 antes del acceso real a la memoria de GPU, provocando las siguientes operaciones. En primer lugar, solicitudes locales desde la GPU 410-413 que encuentran su página en el desvío de GPU se reenvían directamente a una memoria de GPU 420-423 correspondiente. Las solicitudes locales de la GPU que encuentran su página en la desviación del anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). Opcionalmente, las solicitudes del procesador 405 que encuentran la página solicitada en una desviación de procesador de anfitrión completan la solicitud como una lectura de memoria normal. Como alternativa, solicitudes dirigidas a una página con desvío de GPU pueden redirigirse a la GPU 410-413. La GPU puede hacer, a continuación, que la página realice una transición a una desviación de procesador de anfitrión si no está usando actualmente la página.
El estado de desvío de una página puede cambiarse mediante o bien un mecanismo basado en software, o bien un mecanismo basado en software asistido por hardware, o bien, para un conjunto limitado de casos, un mecanismo basado puramente en hardware.
Un mecanismo para cambiar el estado de desvío emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador de dispositivos de la GPU que, a su vez, envía un mensaje a (o pone en cola un descriptor de comandos para) la GPU que le indica que cambie el estado de desvío y, para algunas transiciones, que realice una operación de vaciado de caché en el anfitrión. La operación de vaciado de caché se requiere para una transición desde un desvío del procesador de anfitrión 405 a un desvío de GPU, pero no se requiere para la transacción opuesta.
La coherencia de caché puede mantenerse haciendo temporalmente que las páginas con desvío de GPU no puedan ser almacenadas en caché por el procesador de anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso desde la GPU 410 que puede conceder, o no, acceso de manera inmediata, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador de anfitrión 405 y la GPU 410, es beneficioso garantizar que las páginas con desvío de GPU son aquellas que son requeridas por la GPU, pero no por el procesador de anfitrión 405, y viceversa.
Canalización de procesamiento de gráficos
La Figura 5 ilustra una canalización de procesamiento de gráficos 500. Un multiprocesador de gráficos, tal como el multiprocesador de gráficos 234 como en la Figura 2D, el multiprocesador de gráficos 325 de la Figura 3A, el multiprocesador de gráficos 350 de la Figura 3B puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El multiprocesador de gráficos puede incluirse dentro del subsistema de procesamiento paralelos como se describe en el presente documento, tal como el procesador paralelo 200 de la Figura 2A, que puede estar relacionado con el/los procesador(es) paralelo(s) 112 de la Figura 1 y puede usarse en lugar de uno de ellos. Los diversos sistemas de procesamiento paralelo pueden implementar la canalización de procesamiento de gráficos 500 mediante una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de la Figura 2A) como se describe en el presente documento. Por ejemplo, una unidad sombreadora (por ejemplo, el multiprocesador de gráficos 234 de la Figura 2C) puede configurarse para realizar las funciones de una o más de una unidad de procesamiento de vértices 504, una unidad de procesamiento de control de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmentos/píxeles 524. Las funciones del ensamblador de datos 502, los ensambladores de primitivas 506, 514, 518, la unidad de teselación 510, el rasterizador 522 y la unidad de operaciones de rasterización 526 también pueden ser realizadas por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de la Figura 2A) y una unidad de subdivisión correspondiente (por ejemplo, la unidad de subdivisión 220A-220N de la Figura 2A). La canalización de procesamiento de gráficos 500 puede implementarse también usando unidades de procesamiento dedicadas para una o más funciones. También es posible que una o más porciones de la canalización de procesamiento de gráficos 500 se realicen mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, una CPU). Opcionalmente, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a memoria en chip (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2A) mediante una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de la Figura 2A. La canalización de procesador de gráficos 500 también puede implementarse mediante un grupo de múltiples núcleos 365A como en la Figura 3C.
El ensamblador de datos 502 es una unidad de procesamiento que puede recopilar datos de vértice para superficies y primitivas. El ensamblador de datos 502 emite, a continuación, los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértices 504. La unidad de procesamiento de vértices 504 es una unidad de ejecución programable que ejecuta programas de sombreado de vértices, iluminando y transformando datos de vértice según sea especificado por los programas de sombreado de vértices. La unidad de procesamiento de vértices 504 lee datos que se almacenan en memoria caché, local o de sistema para su uso en el procesamiento de los datos de vértice y puede programarse para transformar los datos de vértice desde una representación de coordenadas basada en objetos a un espacio de coordenadas de espacio mundial o un espacio de coordenadas de dispositivo normalizado.
Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértice desde la unidad de procesamiento de vértices 504. El ensamblador de primitivas 506 lee atributos de vértice almacenados según sea necesario y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de control de teselación 508. Las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches y así sucesivamente, según sea soportado por diversas interfaces de programación de aplicaciones (API) de procesamiento de gráficos.
La unidad de procesamiento de control de teselación 508 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman de una representación de entrada a partir del parche (por ejemplo, las bases del parche) a una representación que es adecuada para su uso en una evaluación superficial por la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede calcular factores de teselación para bordes de parches geométricos. Un factor de teselación es aplicable a un único borde y cuantifica un nivel de detalle, dependiente de la vista, asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para bordes de un parche y para teselar el parche en múltiples primitivas geométricas, tales como primitivas de línea, de triángulo o cuadrilaterales, que se transmiten a una unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de evaluación de teselación 512 opera sobre coordenadas parametrizadas del parche subdividido para generar una representación superficial y atributos de vértice para cada vértice asociado con las primitivas geométricas.
Una segunda instancia de un ensamblador de primitivas 514 recibe atributos de vértices desde la unidad de procesamiento de evaluación de teselación 512, leyendo atributos de vértice almacenados según sea necesario, y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que ejecuta programas de sombreado de geometría para transformar primitivas de gráficos recibidas desde el ensamblador de primitivas 514 según sea especificado por los programas de sombreado de geometría. La unidad de procesamiento de geometría 516 puede programarse para subdividir las primitivas de gráficos en una o más nuevas primitivas de gráficos y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
La unidad de procesamiento de geometría 516 puede ser capaz de añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 emite los parámetros y vértices que especifican nuevas primitivas de gráficos al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices desde la unidad de procesamiento de geometría 516 y construye primitivas de gráficos para su procesamiento por una unidad de escala, selección y recorte de ventana gráfica 520. La unidad de procesamiento de geometría 516 lee datos que se almacenan en memoria de procesador paralelo o memoria de sistema para su uso en el procesamiento de los datos de geometría. La unidad de escala, selección y recorte de ventana gráfica 520 realiza el recorte, la selección y el ajuste a escala de ventana gráfica y emite primitivas de gráficos procesadas a un rasterizador 522.
El rasterizador 522 puede realizar optimizaciones de selección de profundidad y otras basadas en profundidad. El rasterizador 522 también realiza una conversión de exploración sobre las nuevas primitivas de gráficos para generar fragmentos y emitir esos fragmentos y datos de cobertura asociados a la unidad de procesamiento de fragmentos/píxeles 524. La unidad de procesamiento de fragmentos/píxeles 524 es una unidad de ejecución programable que está configurada para ejecutar programas de sombreado de fragmentos o programas de sombreado de píxeles. Transformando, la unidad de procesamiento de fragmentos/píxeles 524, fragmentos o píxeles recibidos desde el rasterizador 522, según sea especificado por los programas de sombreado de fragmentos o de píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones que incluyen, pero sin limitación, mapeo de textura, sombreado, mezcla, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se emiten a una unidad de operaciones de rasterización 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos que se almacenan o bien en la memoria de procesador paralelo o bien en la memoria de sistema para su uso cuando se procesan los datos de fragmento. Pueden configurarse programas de sombreado de fragmentos o de píxeles para sombrear con granularidades de muestra, de píxel, de tesela u otras dependiendo de las tasas de muestreo configuradas para las unidades de procesamiento.
La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, pero sin limitación estarcido, prueba z, mezcla y similares, y emite datos de píxel como datos de gráficos procesados para almacenarse en memoria de gráficos (por ejemplo, la memoria de procesador paralelo 222 como en la Figura 2A, y/o la memoria de sistema 104 como en la Figura 1), para visualizarse en el/los uno o más dispositivo(s) de visualización 110 o para su procesamiento adicional por uno del/los uno o más procesador(es) 102 o procesador(es) paralelo(s) 112. La unidad de operaciones de rasterización 526 puede configurarse para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde memoria.
Vista general del aprendizaje automático
La arquitectura descrita anteriormente puede aplicarse para realizar operaciones de entrenamiento e inferencia usando modelos de aprendizaje automático. El aprendizaje automático ha tenido éxito en la resolución de muchas clases de tareas. Los cálculos que surgen cuando se entrenan y se usan algoritmos de aprendizaje automático (por ejemplo, redes neuronales) se prestan naturalmente a implementaciones paralelas eficientes. En consecuencia, los procesadores paralelos, tales como las unidades de procesamiento gráfico de propósito general (GPGPU), han desempeñado un papel importante en la implementación práctica de las redes neuronales profundas. Los procesadores de gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) se diseñan para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de manera síncrona conjuntamente tan a menudo como sea posible para aumentar la eficiencia de procesamiento. La eficiencia proporcionada por las implementaciones de algoritmos de aprendizaje automático paralelo posibilita el uso de redes de alta capacidad y posibilita que esas redes se entrenen en conjuntos de datos más grandes.
Un algoritmo de aprendizaje automático es un algoritmo que puede aprender basándose en un conjunto de datos. Por ejemplo, las realizaciones de algoritmos de aprendizaje automático pueden diseñarse para modelar abstracciones de alto nivel dentro de un conjunto de datos. Por ejemplo, pueden usarse algoritmos de reconocimiento de imágenes para determinar a cuál de varias categorías pertenece una entrada dada; los algoritmos de regresión pueden emitir un valor numérico dada una entrada; y pueden usarse los algoritmos de reconocimiento de patrones para generar texto traducido o para realizar texto a habla y/o reconocimiento de habla.
Un tipo ilustrativo de algoritmo de aprendizaje automático es una red neuronal. Hay muchos tipos de redes neuronales; un tipo sencillo de red neuronal es una red de realimentación prospectiva. Una red de realimentación prospectiva puede implementarse como un grafo acíclico en el que los nodos se disponen en capas. Típicamente, una topología de red de realimentación prospectiva incluye una capa de entrada y una capa de salida que están separadas por al menos una capa oculta. La capa oculta transforma la entrada recibida por la capa de entrada en una representación que es útil para generar la salida en la capa de salida. Los nodos de red están completamente conectados mediante bordes a los nodos en capas adyacentes, pero no hay bordes entre nodos dentro de cada capa. Los datos recibidos en los nodos de una capa de entrada de una red de realimentación prospectiva se propagan (es decir, "se realimentan prospectivamente") a los nodos de la capa de salida mediante una función de activación que calcula los estados de los nodos de cada capa sucesiva en la red basándose en coeficientes ("pesos") asociados, respectivamente, con cada uno de los bordes que conectan las capas. Dependiendo del modelo específico que está siendo representado por el algoritmo que se está ejecutando, la salida del algoritmo de la red neuronal puede adoptar diversas formas.
Antes de que pueda usarse un algoritmo de aprendizaje automático para modelar un problema particular, se entrena el algoritmo usando un conjunto de datos de entrenamiento. Entrenar una red neuronal implica seleccionar una topología de red, usar un conjunto de datos de entrenamiento que representa un problema que es modelado por la red, y ajustar los pesos hasta que el modelo de red rinde con un error mínimo para todas las instancias del conjunto de datos de entrenamiento. Por ejemplo, durante un proceso de entrenamiento de aprendizaje supervisado para una red neuronal, la salida producida por la red en respuesta a la entrada que representa una instancia en un conjunto de datos de entrenamiento se compara con la salida etiquetada "correcta" para esa instancia, se calcula una señal de error que representa la diferencia entre la salida y la salida etiquetada, y se ajustan los pesos asociados con las conexiones para minimizar ese error a medida que la señal de error se retropropaga a través de las capas de la red. La red se considera "entrenada" cuando se minimizan los errores para cada una de las salidas generadas a partir de las instancias del conjunto de datos de entrenamiento.
La precisión de un algoritmo de aprendizaje automático puede verse afectada significativamente por la calidad del conjunto de datos usado para entrenar el algoritmo. El proceso de entrenamiento puede ser intensivo desde el punto de vista computacional y puede requerir una cantidad de tiempo significativa en un procesador de propósito general convencional. En consecuencia, se usa hardware de procesamiento paralelo para entrenar muchos tipos de algoritmos de aprendizaje automático. Esto es particularmente útil para optimizar el entrenamiento de redes neuronales, debido a que los cálculos realizados en el ajuste de los coeficientes en redes neuronales se prestan de manera natural a implementaciones paralelas. Específicamente, muchos algoritmos de aprendizaje automático y aplicaciones de software se han adaptado para hacer uso del hardware de procesamiento paralelo dentro de dispositivos de procesamiento de gráficos de propósito general.
La Figura 6 es un diagrama generalizado de una pila de software de aprendizaje automático 600. Una aplicación de aprendizaje automático 602 puede configurarse para entrenar una red neuronal usando un conjunto de datos de entrenamiento o para usar una red neuronal profunda entrenada para implementar una inteligencia automática. La aplicación de aprendizaje automático 602 puede incluir una funcionalidad de entrenamiento y de inferencia para una red neuronal y/o software especializado que puede usarse para entrenar una red neuronal antes del despliegue. La aplicación de aprendizaje automático 602 puede implementar cualquier tipo de inteligencia automática incluyendo, pero sin limitación, reconocimiento de imágenes, mapeo y localización, navegación autónoma, síntesis de habla, formación de imágenes médicas o traducción de idioma.
Puede posibilitarse una aceleración de hardware para la aplicación de aprendizaje automático 602 mediante una estructura de aprendizaje automático 604. La estructura de aprendizaje automático 604 puede proporcionar una biblioteca de primitivas de aprendizaje automático. Las primitivas de aprendizaje automático son operaciones básicas que se realizan comúnmente por algoritmos de aprendizaje automático. Sin la estructura de aprendizaje automático 604, se requeriría que los desarrolladores de algoritmos de aprendizaje automático crearan y optimizaran la lógica computacional principal asociada con el algoritmo de aprendizaje automático, y que reoptimizaran, a continuación, la lógica computacional a medida que se desarrollan nuevos procesadores paralelos. En su lugar, la aplicación de aprendizaje automático puede configurarse para realizar los cálculos necesarios usando las primitivas proporcionadas por la estructura de aprendizaje automático 604. Las primitivas ilustrativas incluyen convoluciones tensoriales, funciones de activación y agrupamiento, que son operaciones computacionales que se realizan mientras se entrena una red neuronal convolucional (CNN). La estructura de aprendizaje automático 604 también puede proporcionar primitivas para implementar subprogramas de álgebra lineal básicos realizados por muchos algoritmos de aprendizaje automático, tales como operaciones matriciales y vectoriales.
La estructura de aprendizaje automático 604 puede procesar datos de entrada recibidos desde la aplicación de aprendizaje automático 602 y generar la entrada apropiada a una estructura de cálculo 606. La estructura de cálculo 606 puede abstraer las instrucciones subyacentes proporcionadas al controlador de GPGPU 608 para posibilitar que la estructura de aprendizaje automático 604 se aproveche de la aceleración de hardware mediante el hardware de GPGPU 610 sin requerir que la estructura de aprendizaje automático 604 tenga un conocimiento íntimo de la arquitectura del hardware de GPGPU 610. Adicionalmente, la estructura de cálculo 606 puede posibilitar la aceleración de hardware para la estructura de aprendizaje automático 604 a través de una diversidad de tipos y generaciones del hardware de GPGPU 610.
Aceleración de aprendizaje automático de GPGPU
La Figura 7 ilustra una unidad de procesamiento de gráficos de propósito general 700, que puede ser el procesador paralelo 200 de la Figura 2A o el/los procesador(es) paralelo(s) 112 de la Figura 1. La unidad de procesamiento de propósito general (GPGPU) 700 puede configurarse para ser particularmente eficiente en el procesamiento del tipo de cargas de trabajo computacionales asociadas con el entrenamiento de redes neuronales profundas. Adicionalmente, la GPGPU 700 puede vincularse directamente a otras instancias de la GPGPU para crear una agrupación de múltiples GPU para mejorar la velocidad de entrenamiento para redes neuronales particularmente profundas.
La GPGPU 700 incluye una interfaz de anfitrión 702 para posibilitar una conexión con un procesador de anfitrión. La interfaz de anfitrión 702 puede ser una interfaz PCI Express. Sin embargo, la interfaz de anfitrión también puede ser una interfaz de comunicaciones o tejido de comunicaciones específico de proveedor. La GPGPU 700 recibe comandos desde el procesador de anfitrión y usa un planificador global 704 para distribuir hilos de ejecución asociados con esos comandos a un conjunto de agrupaciones de procesamiento 706A-706H. Las agrupaciones de procesamiento 706A-706H comparten una memoria caché 708. La memoria caché 708 puede servir como una caché de nivel superior para memorias caché dentro de las agrupaciones de procesamiento 706A-706H. Las agrupaciones de procesamiento 706A-706H ilustradas pueden corresponder con las agrupaciones de procesamiento 214A-214N como en la Figura 2A.
La GPGPU 700 incluye la memoria 714A-714B acoplada con las agrupaciones de procesamiento 706A-H mediante un conjunto de controladores de memoria 712A-712B. La memoria 714A-714B puede incluir diversos tipos de dispositivos de memoria, incluyendo memoria de acceso aleatorio dinámica (DRAM) o memoria de acceso aleatorio de gráficos, tal como memoria de acceso aleatorio de gráficos síncrona (SGRAM), incluyendo memoria de tasa de datos doble de gráficos (GDDR). La memoria 714A-714B puede incluir también memoria apilada 3D, incluyendo, pero sin limitación, memoria de ancho de banda alto (HBM).
Cada una de las agrupaciones de procesamiento 706A-706H puede incluir un conjunto de multiprocesadores de gráficos, tales como el multiprocesador de gráficos 234 de la Figura 2D, el multiprocesador de gráficos 325 de la Figura 3A, el multiprocesador de gráficos 350 de la Figura 3B, o puede incluir un grupo de múltiples núcleos 365A-365N como en la Figura 3C. Los multiprocesadores de gráficos de la agrupación de cálculo incluyen múltiples tipos de unidades de lógica de enteros y de coma flotante que pueden realizar operaciones computacionales con un rango de precisiones que incluyen unas adecuadas para cálculos de aprendizaje automático. Por ejemplo, al menos un subconjunto de las unidades de coma flotante en cada una de las agrupaciones de procesamiento 706A-706H puede configurarse para realizar operaciones de coma flotante de 16 bits o de 32 bits, mientras que un subconjunto diferente de las unidades de coma flotante puede configurarse para realizar operaciones de coma flotante de 64 bits.
Múltiples instancias de la GPGPU 700 pueden configurarse para operar como una agrupación de cálculo. El mecanismo de comunicación usado por la agrupación de cálculo para la sincronización y el intercambio de datos varía a través de las realizaciones. Por ejemplo, las múltiples instancias de la GPGPU 700 se comunican a través de la interfaz de anfitrión 702. En una realización, la GPGPU 700 incluye un concentrador de E/S 709 que acopla la GPGPU 700 con un enlace de GPU 710 que posibilita una conexión directa a otras instancias de la GPGPU. El enlace de GPU 710 puede acoplarse a un puente de GPU a GPU dedicado que posibilita la comunicación y la sincronización entre múltiples instancias de la GPGPU 700. Opcionalmente, el enlace de GPU 710 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. Las múltiples instancias de la GPGPU 700 pueden ubicarse en sistemas de procesamiento de datos separados y comunicarse mediante un dispositivo de red que es accesible mediante la interfaz de anfitrión 702. El enlace de GPU 710 puede configurarse para posibilitar una conexión a un procesador de anfitrión además de o como una alternativa a la interfaz de anfitrión 702.
Aunque la configuración ilustrada de la GPGPU 700 puede configurarse para entrenar redes neuronales, una configuración alternativa de la GPGPU 700 puede configurarse para el despliegue dentro de una plataforma de inferencia de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 700 incluye menos de las agrupaciones de procesamiento de las agrupaciones de cómputo 706A-706H en relación con la configuración de entrenamiento. Adicionalmente, una tecnología de memoria asociada con la memoria 714A-714B puede diferir entre configuraciones de inferencia y de entrenamiento. En una realización, la configuración de inferencia de la GPGPU 700 puede soportar instrucciones específicas de inferencia. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de producto escalar de números enteros de 8 bits, que se usan comúnmente durante operaciones de inferencia para redes neuronales desplegadas.
La Figura 8 ilustra un sistema informático de múltiples GPU 800. El sistema informático de múltiples GPU 800 puede incluir un procesador 802 acoplado a múltiples GPGPU 806A-806D mediante un conmutador de interfaz de anfitrión 804. El conmutador de interfaz de anfitrión 804 puede ser un dispositivo de conmutador de PCI Express que acopla el procesador 802 a un bus de PCI Express a través del que el procesador 802 puede comunicarse con el conjunto de GPGPU 806A-806D. Cada una de las múltiples GPGPU 806A-806D puede ser una instancia de la GPGPU 700 de la Figura 7. Las GPGPU 806A-806D pueden interconectarse mediante un conjunto de enlaces de GPU a GPU de punto a punto de alta velocidad 816. Los enlaces de GPU a GPU de alta velocidad pueden conectarse a cada una de las GPGPU 806A-806D mediante un enlace de GPU dedicado, tal como el enlace de GPU 710 como en la Figura 7. Los enlaces de GPU de P2P 816 posibilitan una comunicación directa entre cada una de las GPGPU 806A-806D sin requerir una comunicación a través del bus de interfaz de anfitrión al que se conecta el procesador 802. Con el tráfico de GPU a GPU dirigido a los enlaces de GPU de P2P, el bus de interfaz de anfitrión permanece disponible para el acceso de memoria de sistema o para comunicarse con otras instancias del sistema informático de múltiples GPU 800, por ejemplo, mediante uno o más dispositivos de red. Aunque en la Figura 8 las GPGPU 806A-806D se conectan al procesador 802 mediante el conmutador de interfaz de anfitrión 804, como alternativa el procesador 802 puede incluir un soporte directo para los enlaces de GPU de P2P 816 y conectarse directamente a las GPGPU 806A-806D.
Implementaciones de red neuronal de aprendizaje automático
La arquitectura informática descrita en el presente documento puede configurarse para realizar los tipos de procesamiento paralelo que son particularmente adecuados para entrenar y desplegar redes neuronales para un aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es bien conocido en la técnica, en el aprendizaje automático se usa una diversidad de tipos de implementaciones de red neuronal. Un tipo ilustrativo de red neuronal es la red de realimentación prospectiva, como se ha descrito previamente.
Un segundo tipo ilustrativo de red neuronal es la red neuronal convolucional (CNN). Una CNN es una red neuronal de realimentación prospectiva especializada para procesar datos que tienen una topología de tipo cuadrícula conocida, tales como datos de imagen. En consecuencia, las CNN se usan comúnmente para aplicaciones de reconocimiento de imágenes y de visión de cálculo, pero pueden usarse también para otros tipos de reconocimiento de patrones, tales como procesamiento de habla y de idioma. Los nodos en la capa de entrada de CNN están organizados en un conjunto de "filtros" (detectores de características inspirados por los campos receptivos encontrados en la retina), y la salida de cada conjunto de filtros se propaga a nodos en capas sucesivas de la red. Los cálculos para una CNN incluyen aplicar la operación matemática de convolución a cada filtro para producir la salida de ese filtro. La convolución es una clase especializada de operación matemática realizada por dos funciones para producir una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de redes convolucionales, la primera función para la convolución puede denominarse entrada, mientras que la segunda función puede denominarse núcleo de convolución. La salida puede denominarse mapa de características. Por ejemplo, la entrada a una capa de convolución puede ser una matriz multidimensional de datos que definen las diversas componentes de color de una imagen de entrada. El núcleo de convolución puede ser una matriz multidimensional de parámetros, donde los parámetros están adaptados por el proceso de entrenamiento para la red neuronal.
Las redes neuronales recurrentes (RNN) son una familia de redes neuronales de realimentación prospectiva que incluyen conexiones de realimentación entre capas. Las RNN posibilitan el modelado de datos secuenciales compartiendo datos de parámetro a través de diferentes partes de la red neuronal. La arquitectura para una RNN incluye ciclos. Los ciclos representan la influencia de un valor presente de una variable sobre su propio valor en un tiempo futuro, debido a que al menos una porción de los datos de salida desde la RNN se usa como realimentación para procesar una entrada subsiguiente en una secuencia. Esta característica hace que las RNN sean particularmente útiles para el procesamiento de idioma debido a la naturaleza variable en la que pueden componerse los datos de idioma.
Las figuras descritas a continuación presentan redes de realimentación prospectiva, CNN y RNN ilustrativas, así como describen un proceso general para entregar y desplegar, respectivamente, cada uno de esos tipos de redes. Se entenderá que estas descripciones son ilustrativas y no limitativas en cuanto a cualquier realización específica descrita en el presente documento y los conceptos ilustrados pueden aplicarse, de manera general, a redes neuronales profundas y técnicas de aprendizaje automático en general.
Las redes neuronales ilustrativas descritas anteriormente pueden usarse para realizar un aprendizaje profundo. El aprendizaje profundo es un aprendizaje automático que usa redes neuronales profundas. Las redes neuronales profundas usadas en el aprendizaje profundo son redes neuronales artificiales compuestas por múltiples capas ocultas, en contraposición a redes neuronales poco profundas que solo incluyen una única capa oculta. El entrenamiento de redes neuronales más profundas es, en general, más intensivo desde el punto de vista computacional. Sin embargo, las capas ocultas adicionales de la red posibilitan un reconocimiento de patrones de múltiples etapas que da como resultado un error de salida reducido en relación con técnicas de aprendizaje automático poco profundo.
Las redes neuronales profundas usadas en el aprendizaje automático incluyen típicamente una red de extremo frontal para realizar un reconocimiento de características, acoplada a una red de extremo posterior que representa un modelo matemático que puede realizar operaciones (por ejemplo, clasificación de objetos, reconocimiento de habla, etc.) basándose en la representación de características proporcionada al modelo. Un aprendizaje profundo posibilita que se realice un aprendizaje automático sin requerir que se realice una ingeniería de características artesanal para el modelo. En su lugar, las redes neuronales profundas pueden aprender características basándose en una correlación o estructura estadística dentro de los datos de entrada. Las características aprendidas pueden proporcionarse a un modelo matemático que puede mapear características detectadas con una salida. El modelo matemático usado por la red está especializado, en general, para la tarea específica a realizar, y se usarán diferentes modelos para realizar diferentes tareas.
Una vez que se ha estructurado la red neuronal, puede aplicarse un modelo de aprendizaje a la red para entrenar la red para realizar tareas específicas. El modelo de aprendizaje describe cómo ajustar los pesos dentro del modelo para reducir el error de salida de la red. La retropropagación de errores en un método común usado para entrenar redes neuronales. Se presenta un vector de entrada a la red para su procesamiento. La salida de la red se compara a la salida deseada usando una función de pérdida y se calcula un valor de error para cada una de las neuronas en la capa de salida. Los valores de error se retropropagan, a continuación, hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. La red puede aprender, a continuación, de esos errores usando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
Las Figuras 9A-9B ilustran una red neuronal convolucional ilustrativa. La Figura 9A ilustra diversas capas dentro de una CNN. Como se muestra en la Figura 9A, una CNN ilustrativa usada para modelar el procesamiento de imagen puede recibir la entrada 902 que describe las componentes de rojo, verde y azul (RGB) de una imagen de entrada. La entrada 902 puede ser procesada por múltiples capas convolucionales (por ejemplo, la capa convolucional 904, la capa convolucional 906). La salida desde las múltiples capas convolucionales puede ser procesada opcionalmente por un conjunto de capas completamente conectadas 908. Las neuronas en una capa completamente conectada tienen conexiones completas a todas las activaciones en la capa previa, como se ha descrito previamente para una red de realimentación prospectiva. La salida desde las capas completamente conectadas 908 puede usarse para generar un resultado de salida a partir de la red. Las activaciones dentro de las capas completamente conectadas 908 pueden calcularse usando una multiplicación matricial en lugar de una convolución. No todas las implementaciones de CNN hacen uso de las capas completamente conectadas 908. Por ejemplo, en algunas implementaciones, la capa convolucional 906 puede generar una salida para la CNN.
Las capas convolucionales se conectan de manera dispersa, lo que difiere de la configuración de red neuronal tradicional encontrada en las capas completamente conectadas 908. Las capas de red neuronal tradicionales están completamente conectadas, de manera que cada unidad de salida interacciona con cada unidad de entrada. Sin embargo, las capas convolucionales se conectan de manera dispersa debido a que se introduce la salida de la convolución de un campo (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) en los nodos de la capa subsiguiente, como se ilustra. Los núcleos asociados con las capas convolucionales realizan operaciones de convolución, la salida de los cuales se envía a la siguiente capa. La reducción de dimensionalidad realizada dentro de las capas convolucionales es un aspecto que posibilita que la CNN realice un ajuste a escala para procesar imágenes grandes.
La Figura 9B ilustra fases de cálculo ilustrativas dentro de una capa convolucional de una CNN. La entrada a una capa convolucional 912 de una CNN puede procesarse en tres fases de una capa convolucional 914. Las tres fases pueden incluir una fase de convolución 916, una fase de detección 918 y una fase de agrupamiento 920. La capa de convolución 914 puede emitir, a continuación, datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapa de características de salida o proporcionar una entrada a una capa completamente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la CNN.
En la fase de convolución 916 se realizan varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La fase de convolución 916 puede incluir una transformación afín, que es cualquier transformación que pueda especificarse como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, ajuste a escala y combinaciones de estas transformaciones. La fase de convolución calcula la salida de funciones (por ejemplo, neuronas) que se conectan a regiones específicas en la entrada, lo que puede determinarse como la región local asociada con la neurona. Las neuronas calculan un producto escalar entre los pesos de las neuronas y la región en la entrada local a la que se conectan las neuronas. La salida desde la fase de convolución 916 define un conjunto de activaciones lineales que son procesadas por fases sucesivas de la capa convolucional 914.
Las activaciones lineales pueden ser procesadas por una fase de detección 918. En la fase de detección 918, cada activación lineal es procesada por una función de activación no lineal. La función de activación no lineal aumenta las propiedades no lineales de la red global sin afectar a los campos receptivos de la capa de convolución. Pueden usarse varios tipos de funciones de activación no lineal. Un tipo particular es la unidad lineal rectificada (ReLU), que usa una función de activación definida como f(x) = máx (0, x), de manera que se fija un umbral de cero para la activación.
La fase de agrupamiento 920 usa una función de agrupamiento que sustituye la salida de la capa convolucional 906 con una estadística de resumen de las salidas cercanas. La función de agrupamiento puede usarse para introducir la invarianza de traslación en la red neuronal, de manera que traslaciones pequeñas a la entrada no cambian las salidas agrupadas. La invarianza a la traslación local puede ser útil en escenarios donde la presencia de una característica en los datos de entrada es más importante que la ubicación precisa de la característica. Pueden usarse diversos tipos de funciones de agrupamiento durante la fase de agrupamiento 920, incluyendo agrupamiento máximo, agrupamiento promedio y agrupamiento de norma l2. Adicionalmente, algunas implementaciones de CNN no incluyen una fase de agrupamiento. En su lugar, tales implementaciones sustituyen una fase de convolución adicional que tiene un paso aumentado en relación con fases de convolución previas.
La salida desde la capa convolucional 914 puede ser procesada, a continuación, por la siguiente capa 922. La siguiente capa 922 puede ser una capa convolucional adicional o una de las capas completamente conectadas 908. Por ejemplo, la primera capa convolucional 904 de la Figura 9A puede emitir a la segunda capa convolucional 906, mientras que la segunda capa convolucional puede emitir a una primera capa de las capas completamente conectadas 908.
La Figura 10 ilustra una red neuronal recurrente 1000 ilustrativa. En una red neuronal recurrente (RNN), el estado previo de la red influye sobre la salida del estado actual de la red. Las RNN pueden construirse de una diversidad de maneras usando una diversidad de funciones. El uso de las RNN pivota, en general, alrededor del uso de modelos matemáticos para predecir el futuro basándose en una secuencia anterior de entradas. Por ejemplo, una RNN puede usarse para realizar un modelado de idioma estadístico para predecir una palabra venidera, dada una secuencia previa de palabras. La RNN 1000 ilustrada puede describirse como que tiene una capa de entrada 1002 que recibe un vector de entrada, las capas ocultas 1004 para implementar una función recurrente, un mecanismo de realimentación 1005 para posibilitar una 'memoria' de estados previos y una capa de salida 1006 para emitir un resultado. La RNN 1000 opera basándose en escalones de tiempo. El estado de la RNN en un escalón de tiempo dado se ve influenciado basándose en el escalón de tiempo previo mediante el mecanismo de realimentación 1005. Para un escalón de tiempo dado, el estado de las capas ocultas 1004 se define por el estado anterior y la entrada en el escalón de tiempo actual. Una entrada inicial (x<1>) en un primer escalón de tiempo puede ser procesada por la capa oculta 1004. Una segunda entrada (x<2>) puede ser procesada por la capa oculta 1004 usando información de estado que se determina durante el procesamiento de la entrada inicial (x<1>). Un estado dado puede calcularse como st = f(Uxt Wst-<1>), donde U y W son matrices de parámetros. La función f es, en general, una no linealidad, tal como la función tangente hiperbólica (Tanh) o una variante de la función rectificadora f(x) = máx(0, x). Sin embargo, la función matemática específica usada en las capas ocultas 1004 puede variar dependiendo de los detalles de implementación específicos de la RNN 1000.
Además de las redes CNN y RNN básicas descritas, pueden posibilitarse variaciones a esas redes. Una variante de RNN ilustrativa es la RNN de memoria a corto plazo larga (LSTM). Las RNN de LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias de idioma más largas. Una variante de la CNN es una red de creencia profunda convolucional, que tiene una estructura similar a una CNN y se entrena de una manera similar a una red de creencia profunda. Una red de creencia profunda (DBN) es una red neuronal generativa que está compuesta por múltiples capas de variables estocásticas (aleatorias). Las DBN pueden entrenarse capa a capa usando aprendizaje no supervisado voraz. Los pesos aprendidos de la DBN pueden usarse, a continuación, para proporcionar redes neuronales de preentrenamiento determinando un conjunto inicial óptimo de pesos para la red neuronal.
La Figura 11 ilustra el entrenamiento y despliegue de una red neuronal profunda. Una vez que se ha estructurado una red dada para una tarea, la red neuronal se entrena usando un conjunto de datos de entrenamiento 1102. Se han desarrollado diversas estructuras de entrenamiento 1104 para posibilitar la aceleración de hardware del proceso de entrenamiento. Por ejemplo, la estructura de aprendizaje automático 604 de la Figura 6 puede configurarse como una estructura de entrenamiento 604. La estructura de entrenamiento 604 puede engancharse a una red neuronal no entrenada 1106 y posibilitar que la red neuronal no entrenada se entrene usando los recursos de procesamiento paralelo descritos en el presente documento para generar una red neuronal entrenada 1108.
Para iniciar el proceso de entrenamiento, los pesos iniciales pueden elegirse aleatoriamente o mediante preentrenamiento usando una red de creencia profunda. El ciclo de entrenamiento puede realizarse, a continuación, de una manera o bien supervisada o bien no supervisada.
El aprendizaje supervisado es un método de aprendizaje en el que un entrenamiento se realiza como una operación mediada, tal como cuando el conjunto de datos de entrenamiento 1102 incluye una entrada emparejada con la salida deseada para la entrada, o donde el conjunto de datos de entrenamiento incluye una entrada que tiene una salida conocida, y la salida de la red neuronal se califica manualmente. La red procesa las entradas y compara las salidas resultantes contra un conjunto de salidas esperadas o deseadas. Los errores se retropropagan, a continuación, a través del sistema. La estructura de entrenamiento 1104 puede ajustarse para ajustar los pesos que controlan la red neuronal no entrenada 1106. La estructura de entrenamiento 1104 puede proporcionar herramientas para supervisar cómo está convergiendo de bien la red neuronal no entrenada 1106 hacia un modelo adecuado para generar respuestas correctas basándose en datos de entrada conocidos. El proceso de entrenamiento tiene lugar repetidamente a medida que se ajustan los pesos de la red para perfeccionar la salida generada por la red neuronal. El proceso de entrenamiento puede continuar hasta que la red neuronal alcanza una precisión estadísticamente deseada asociada con una red neuronal entrenada 1108. La red neuronal entrenada 1108 puede desplegarse, a continuación, para implementar cualquier número de operaciones de aprendizaje automático para generar un resultado de inferencia 1114 basándose en la entrada de nuevos datos 1112.
El aprendizaje no supervisado es un método automático en el que la red intenta entrenarse a sí misma usando datos no etiquetados. Por lo tanto, para un aprendizaje no supervisado, el conjunto de datos de entrenamiento 1102 incluirá datos de entrada sin dato de salida asociado alguno. La red neuronal no entrenada 1106 puede aprender agrupamientos dentro de la entrada no etiquetada y puede determinar cómo las entradas individuales están relacionadas con el conjunto de datos global. El entrenamiento no supervisado puede usarse para generar un mapa de autoorganización, que es un tipo de red neuronal entrenada 1108 que puede realizar operaciones útiles en cuanto a la reducción de la dimensionalidad de los datos. El entrenamiento no supervisado puede usarse también para realizar una detección de anomalías, lo que permite la identificación de puntos de datos en un conjunto de datos de entrada que se desvían de los patrones normales de los datos.
También pueden emplearse variaciones al entrenamiento supervisado y no supervisado. El aprendizaje semisupervisado es una técnica en la que el conjunto de datos de entrenamiento 1102 incluye una mezcla de datos etiquetados y no etiquetados de la misma distribución. El aprendizaje incremental es una variante del aprendizaje supervisado en el que se usan continuamente datos de entrada para entrenar adicionalmente el modelo. El aprendizaje incremental posibilita que la red neuronal entrenada 1108 se adapte a los nuevos datos 1112 sin olvidar el conocimiento inculcado dentro de la red durante el entrenamiento inicial.
Ya sea supervisado o no supervisado, el proceso de entrenamiento para redes neuronales particularmente profundas puede ser demasiado intensivo desde el punto de vista computacional para un único nodo de cálculo. En lugar de usar un único nodo de cálculo, puede usarse una red distribuida de nodos computacionales para acelerar el proceso de entrenamiento.
La Figura 12 es un diagrama de bloques que ilustra un aprendizaje distribuido. El aprendizaje distribuido es un modelo de entrenamiento que usa múltiples nodos informáticos distribuidos para realizar un entrenamiento supervisado o no supervisado de una red neuronal. Cada uno de los nodos computacionales distribuidos puede incluir uno o más procesadores de anfitrión y uno o más de los nodos de procesamiento de propósito general, tales como la unidad de procesamiento de gráficos de propósito general altamente paralela 700, como en la Figura 7. Como se ilustra, un aprendizaje distribuido puede realizarse con el paralelismo de modelo 1202, el paralelismo de datos 1204 o una combinación del paralelismo de modelo y de datos 1204.
En el paralelismo de modelo 1202, diferentes nodos computacionales en un sistema distribuido pueden realizar cálculos de entrenamiento para diferentes partes de una única red. Por ejemplo, cada capa de una red neuronal puede ser entrenada por un nodo de procesamiento diferente del sistema distribuido. Los beneficios del paralelismo de modelo incluyen la capacidad de ajustar a escala a modelos particularmente grandes. La división de los cálculos asociados con diferentes capas de la red neuronal posibilita el entrenamiento de redes neuronales muy grandes en las que los pesos de todas las capas no cabrían en la memoria de un único nodo computacional. En algunas instancias, el paralelismo de modelo puede ser particularmente útil en la ejecución de un entrenamiento no supervisado de redes neuronales grandes.
En el paralelismo de datos 1204, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una porción diferente de los datos. Los resultados desde los diferentes nodos se combinan a continuación. Aunque son posibles diferentes enfoques para el paralelismo de datos, los enfoques de entrenamiento de datos paralelos requieren, todos ellos, una técnica de combinación de resultados y de sincronización de los parámetros de modelo entre cada nodo. Los enfoques ilustrativos para la combinación de datos incluyen promediado de parámetros y paralelismo de datos basado en actualizaciones. El promediado de parámetros entrena cada nodo en un subconjunto de los datos de entrenamiento y establece los parámetros globales (por ejemplo, pesos, desviaciones) al promedio de los parámetros desde cada nodo. El promediado de parámetros usa un servidor de parámetros central que mantiene los datos de parámetro. El paralelismo de datos basado en actualizaciones es similar al promediado de parámetros excepto en que, en lugar de transferir parámetros desde los nodos al servidor de parámetros, se transfieren las actualizaciones al modelo. Adicionalmente, el paralelismo de datos basado en actualizaciones puede realizarse de una manera descentralizada, donde las actualizaciones se comprimen y se transfieren entre nodos.
El paralelismo de modelo y de datos 1206 combinado puede implementarse, por ejemplo, en un sistema distribuido en el que cada nodo computacional incluye múltiples GPU. Cada nodo puede tener una instancia completa del modelo con GPU separadas dentro de cada nodo que se usan para entrenar diferentes porciones del modelo.
El entrenamiento distribuido ha aumentado la sobrecarga en relación con el entrenamiento en una única máquina. Sin embargo, cada uno de los procesadores paralelos y las GPGPU descritas en el presente documento pueden implementar diversas técnicas para reducir la sobrecarga del entrenamiento distribuido, incluyendo técnicas para posibilitar una transferencia de datos de GPU a GPU de alto ancho de banda y una sincronización de datos remota acelerada.
Aplicaciones de aprendizaje automático ilustrativas
El aprendizaje automático puede aplicarse a resolver una diversidad de problemas tecnológicos, incluyendo, pero sin limitación, visión informática, conducción y navegación autónoma, reconocimiento de habla y procesamiento de idioma. La visión informática ha sido tradicionalmente una de las áreas de investigación más activas para aplicaciones de aprendizaje automático. Las aplicaciones de visión informática varían de reproducir capacidades visuales humanas, tales como reconocer caras, a crear nuevas categorías de capacidades visuales. Por ejemplo, las aplicaciones de visión informática pueden configurarse para reconocer ondas de sonido de las vibraciones inducidas en los objetos visibles en un vídeo. El aprendizaje automático acelerado por procesador paralelo posibilita que se entrenen aplicaciones de visión informática usando un conjunto de datos de entrenamiento significativamente mayor que el previamente factible y posibilita que se desarrollen sistemas de inferencia usando procesadores paralelos de baja potencia.
El aprendizaje automático acelerado por procesador paralelo tiene aplicaciones de conducción autónoma que incluyen reconocimiento de señales de carretera y de carril, evitación de obstáculos, navegación y control de conducción. Las técnicas de aprendizaje automático aceleradas pueden usarse para entrenar modelos de conducción basándose en conjuntos de datos que definen las respuestas apropiadas a una entrada de entrenamiento específica. Los procesadores paralelos descritos en el presente documento pueden posibilitar el entrenamiento rápido de las redes neuronales cada vez más complejas usadas para soluciones de conducción autónoma y posibilita el despliegue de procesadores de inferencia de baja potencia en una plataforma móvil adecuada para su integración en vehículos autónomos.
Las redes neuronales profundas aceleradas por procesador paralelo han posibilitado enfoques de aprendizaje automático para un reconocimiento de habla automático (ASR). El ASR incluye la creación de una función que, dada una secuencia acústica de entrada, calcula la secuencia lingüística más probable. El aprendizaje automático acelerado usando redes neuronales profundas ha posibilitado la sustitución de los modelos ocultos de Markov (HMM) y los modelos de mezcla gaussiana (GMM) previamente usados para el ASR.
El aprendizaje automático acelerado por procesador paralelo puede usarse también para acelerar el procesamiento de lenguaje natural. Los procedimientos de aprendizaje automático pueden hacer uso de algoritmos de inferencia estadística para producir modelos que son robustos ante una entrada errónea o extraña. Las aplicaciones de procesador de lenguaje natural ilustrativas incluyen la traducción mecánica automática entre idiomas humanos.
Las plataformas de procesamiento paralelo usadas para el aprendizaje automático pueden dividirse en plataformas de entrenamiento y plataformas de despliegue. Las plataformas de entrenamiento son, en general, altamente paralelas e incluyen optimizaciones para acelerar el entrenamiento de múltiples GPU y un único nodo y el entrenamiento de múltiples nodos y múltiples GPU. Los procesadores paralelos ilustrativos adecuados para el entrenamiento incluyen la unidad de procesamiento de gráficos de propósito general 700 de la Figura 7 y el sistema informático de múltiples GPU 800 de la Figura 8. Por el contrario, las plataformas de aprendizaje automático desplegadas incluyen, en general, procesadores paralelos de potencia inferior adecuados para su uso en productos tales como cámaras, robots autónomos y vehículos autónomos.
La Figura 13 ilustra un sistema en un chip (SOC) de inferencia 1300 ilustrativo adecuado para realizar una inferencia usando un modelo entrenado. El SOC 1300 puede integrar componentes de procesamiento que incluyen un procesador de medios 1302, un procesador de visión 1304, una GPGPU 1306 y un procesador de múltiples núcleos 1308. La GPGPU 1306 puede ser una GPGPU como se describe en el presente documento, tal como la GPGPU 700, y el procesador de múltiples núcleos 1308 puede ser un procesador de múltiples núcleos descrito en el presente documento, tal como los procesadores de múltiples núcleos 405-406. El SOC 1300 puede incluir adicionalmente la memoria en chip 1305 que puede posibilitar un agrupamiento de datos en chip compartida a la que puede acceder cada uno de los componentes de procesamiento. Los componentes de procesamiento pueden optimizarse para una operación de baja potencia para posibilitar el despliegue en una diversidad de plataformas de aprendizaje automático, incluyendo vehículos autónomos y robots autónomos. Por ejemplo, una implementación del SOC 1300 puede usarse como una porción del sistema de control principal para un vehículo autónomo. Donde el SOC 1300 está configurado para su uso en vehículos autónomos, el SOC se diseña y está configurado para cumplir con las normas de seguridad funcional relevantes de la jurisdicción de despliegue.
Durante la operación, el procesador de medios 1302 y el procesador de visión 1304 pueden trabajar conjuntamente para acelerar las operaciones de visión por ordenador. El procesador de medios 1302 puede posibilitar la descodificación de latencia baja de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8K). Los flujos de vídeo descodificados pueden escribirse en una memoria intermedia en la memoria en chip 1305. El procesador de visión 1304 puede analizar, a continuación, el vídeo descodificado y realizar operaciones de procesamiento preliminares sobre los fotogramas del vídeo descodificado como preparación al procesamiento de los fotogramas usando un modelo de reconocimiento de imágenes entrenado. Por ejemplo, el procesador de visión 1304 puede acelerar las operaciones de convolución para una CNN que se usa para realizar un reconocimiento de imágenes sobre los datos de vídeo de alta resolución, mientras que los cálculos de modelo de extremo posterior son realizados por la GPGPU 1306.
El procesador de múltiples núcleos 1308 puede incluir lógica de control para asistir con la secuenciación y la sincronización de transferencias de datos y operaciones de memoria compartida realizadas por el procesador de medios 1302 y el procesador de visión 1304. El procesador de múltiples núcleos 1308 también puede funcionar como un procesador de aplicaciones para ejecutar aplicaciones de software que pueden hacer uso de la capacidad de cálculo de inferencia de la GPGPU 1306. Por ejemplo, al menos una porción de la lógica de navegación y de conducción puede implementarse en software que se ejecuta en el procesador de múltiples núcleos 1308. Tal software puede emitir directamente cargas de trabajo computacionales a la GPGPU 1306 o las cargas de trabajo computacionales pueden emitirse al procesador de múltiples núcleos 1308, que puede descargar al menos una porción de esas operaciones a la GPGPU 1306.
La GPGPU 1306 puede incluir agrupaciones de cálculo, tales como una configuración de baja potencia de las agrupaciones de procesamiento 706A-706H dentro de la unidad de procesamiento de gráficos de propósito general 700. Las agrupaciones de cálculo dentro de la GPGPU 1306 pueden soportar instrucciones que se optimizan específicamente para realizar cálculos de inferencia sobre una red neuronal entrenada. Por ejemplo, la GPGPU 1306 puede soportar instrucciones para realizar cálculos de precisión baja, tales como operaciones vectoriales de números enteros de 8 bits y de 4 bits.
Vista general del sistema adicional
La Figura 14 es un diagrama de bloques de un sistema de procesamiento 1400. Los elementos de la Figura 14 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. El sistema 1400 puede usarse en un sistema de sobremesa de procesador único, un sistema de estación de trabajo de multiprocesador o un sistema de servidor que tiene un gran número de procesadores 1402 o núcleos de procesador 1407. El sistema 1400 puede ser una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, de mano o integrados, tal como dentro de dispositivos de Internet de las cosas (IoT) con conectividad cableada o inalámbrica a una red de área local o extensa.
El sistema 1400 puede ser un sistema de procesamiento que tiene componentes que corresponden con los de la Figura 1. Por ejemplo, en diferentes configuraciones, el/los procesador(es) 1402 o el/los núcleo(s) de procesador 1407 puede(n) corresponder con el/los procesador(es) 102 de la Figura 1. El/los procesador(es) de gráficos 1408 puede(n) corresponder con el/los procesador(es) paralelo(s) 112 de la Figura 1. El procesador de gráficos externo 1418 puede ser uno del/de los dispositivo(s) de adición 120 de la Figura 1.
El sistema 1400 puede incluir, acoplarse con o incorporarse dentro de: una plataforma de juegos basada en servidor; una consola de juegos, incluyendo una consola de juegos y de medios; una consola de juegos móvil, una consola de juegos de mano o una consola de juegos en línea. El sistema 1400 puede ser parte de un teléfono móvil, un teléfono inteligente, un dispositivo informático de tipo tableta o un dispositivo móvil conectado a Internet, tal como un ordenador portátil con una capacidad baja de almacenamiento interno. El sistema de procesamiento 1400 también puede incluir, acoplarse con o integrarse dentro de: un dispositivo ponible, tal como un dispositivo ponible de reloj inteligente; gafas o prendas inteligentes potenciadas con características de realidad aumentada (RA) o realidad virtual (RV) para proporcionar salidas visuales, de audio o táctiles para complementar las experiencias visuales, de audio o táctiles del mundo real o proporcionar de otro modo texto, audio, gráficos, vídeo, imágenes holográficas o vídeo o realimentación táctil; otro dispositivo de realidad aumentada (RA); u otro dispositivo de realidad virtual (RV). El sistema de procesamiento 1400 puede incluir o ser parte de un televisor o dispositivo descodificador de salón. El sistema 1400 puede incluir, acoplarse con o integrarse dentro de un vehículo de conducción autónoma tal como un autobús, un camión articulado, un coche, una motocicleta o bicicleta eléctrica, un avión o un planeador (o cualquier combinación de los mismos). El vehículo de conducción autónoma puede usar el sistema 1400 para procesar el entorno detectado alrededor del vehículo.
Los uno o más procesadores 1402 pueden incluir uno o más núcleos de procesador 1407 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para el software de usuario o sistema. El al menos uno de los uno o más núcleos de procesador 1407 puede configurarse para procesar un conjunto de instrucciones 1409 específico. El conjunto de instrucciones 1409 puede facilitar el cálculo de conjunto de instrucciones complejo (CISC), el cálculo de conjunto de instrucciones reducido (RISC) o el cálculo mediante una palabra de instrucción muy larga (VLIW). Uno o más núcleos de procesador 1407 pueden procesar un conjunto de instrucciones 1409 diferente, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo de procesador 1407 también puede incluir otros dispositivos de procesamiento, tales como un procesador de señales digitales (DSP).
El procesador 1402 puede incluir la memoria caché 1404. Dependiendo de la arquitectura, el procesador 1402 puede tener una única caché interna o múltiples niveles de caché interna. En algunas realizaciones, la memoria caché se comparte entre diversos componentes del procesador 1402. En algunas realizaciones, el procesador 1402 también usa una caché externa (por ejemplo, una caché de nivel 3 (L3) o una caché de último nivel (LLC)) (no mostrada), que puede compartirse entre los núcleos de procesador 1407 usando técnicas de coherencia de caché conocidas. Un archivo de registro 1406 puede incluirse adicionalmente en el procesador 1402 y puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de número entero, registros de coma flotante, registros de estado y un registro de puntero de instrucción). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos del diseño del procesador 1402.
El/los uno o más procesador(es) 1402 puede(n) acoplarse con uno o más bus(es) de interfaz 1410 para transmitir señales de comunicación tales como señales de dirección, de datos o de control entre el procesador 1402 y otros componentes en el sistema 1400. El bus de interfaz 1410, en una de estas realizaciones, puede ser un bus de procesador, tal como una versión del bus de interfaz de medios directa (DMI). Sin embargo, los buses de procesador no se limitan al bus DMI y pueden incluir uno o más buses de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express), buses de memoria u otros tipos de buses de interfaz. Por ejemplo, el/los procesador(es) 1402 puede(n) incluir un controlador de memoria integrado 1416 y un concentrador de controlador de plataforma 1430. El controlador de memoria 1416 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 1400, mientras que el concentrador de controlador de plataforma (PCH) 1430 proporciona conexiones a dispositivos de E/S mediante un bus de E/S local.
El dispositivo de memoria 1420 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como memoria de proceso. El dispositivo de memoria 1420 puede, por ejemplo, operar como memoria de sistema para el sistema 1400, para almacenar los datos 1422 y las instrucciones 1421 para su uso cuando los uno o más procesadores 1402 ejecutan una aplicación o proceso. El controlador de memoria 1416 también se acopla con un procesador de gráficos externo 1418 opcional, que puede comunicarse con los uno o más procesadores de gráficos 1408 en los procesadores 1402 para realizar operaciones de gráficos y de medios. En algunas realizaciones, las operaciones de gráficos, de medios y/o de cálculo pueden ser asistidas por un acelerador 1412 que es un coprocesador que puede configurarse para realizar un conjunto especializado de operaciones de gráficos, de medios o de cálculo. Por ejemplo, el acelerador 1412 puede ser un acelerador de multiplicación matricial usado para optimizar las operaciones de aprendizaje automático o de cálculo. El acelerador 1412 puede ser un acelerador de trazado de rayos que puede usarse para realizar operaciones de trazado de rayos junto con el procesador de gráficos 1408. En una realización, puede usarse un acelerador externo 1419 en lugar de o en conjunto con el acelerador 1412.
Puede proporcionarse un dispositivo de visualización 1411 que puede conectarse al/a los procesador(es) 1402. El dispositivo de visualización 1411 puede ser uno o más de un dispositivo de visualización interno, como en un dispositivo electrónico móvil o un dispositivo portátil o un dispositivo de visualización externo unido mediante una interfaz de visualización (por ejemplo, DisplayPort, etc.). El dispositivo de visualización 1411 puede ser una pantalla montada en la cabeza (HMD), tal como un dispositivo de visualización estereoscópico para su uso en aplicaciones de realidad virtual (RV) o aplicaciones de realidad aumentada (RA).
El concentrador de controlador de plataforma 1430 puede posibilitar que se conecten periféricos al dispositivo de memoria 1420 y al procesador 1402 mediante un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 1446, un controlador de red 1434, una interfaz de firmware 1428, un transceptor inalámbrico 1426, unos sensores táctiles 1425, un dispositivo de almacenamiento de datos 1424 (por ejemplo, memoria no volátil, memoria volátil, unidad de disco duro, memoria flash, NAND, 3D NAND, 3D XPoint/Optane, etc.). El dispositivo de almacenamiento de datos 1424 puede conectarse mediante una interfaz de almacenamiento (por ejemplo, SATA) o mediante un bus de periféricos, tal como un bus de interconexión de componentes periféricos (por ejemplo, PCI, PCI Express). Los sensores táctiles 1425 pueden incluir sensores de pantalla táctil, sensores de presión o sensores de huellas digitales. El transceptor inalámbrico 1426 puede ser un transceptor de Wi-Fi, un transceptor de Bluetooth o un transceptor de red móvil tal como un transceptor de 3G, 4G, 5G o evolución a largo plazo (LTE). La interfaz de firmware 1428 posibilita la comunicación con firmware de sistema y puede ser, por ejemplo, una interfaz de firmware ampliable unificada (UEFI). El controlador de red 1434 puede posibilitar una conexión de red a una red cableada. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla con el bus de interfaz 1410. El controlador de audio 1446 puede ser un controlador de audio de alta definición de múltiples canales. En algunas de estas realizaciones, el sistema 1400 incluye un controlador de E/S heredado 1440 opcional para acoplar dispositivos heredados (por ejemplo, de sistema personal 2 (PS/2)) al sistema. El concentrador de controlador de plataforma 1430 también puede conectarse a uno o más controladores de bus serie universal (USB) 1442 para conectar dispositivos de entrada, tales como combinaciones de teclado y ratón 1443, una cámara 1444 u otros dispositivos de entrada de USB.
Se apreciará que el sistema 1400 mostrado es ilustrativo y no limitante, debido a que también pueden usarse otros tipos de sistemas de procesamiento de datos que están configurados de manera diferente. Por ejemplo, una instancia del controlador de memoria 1416 y del concentrador de controlador de plataforma 1430 puede integrarse en un procesador de gráficos externo discreto, tal como el procesador de gráficos externo 1418. El concentrador de controlador de plataforma 1430 y/o el controlador de memoria 1416 pueden ser externos al/a los uno o más procesador(es) 1402. Por ejemplo, el sistema 1400 puede incluir un controlador de memoria externo 1416 y un concentrador de controlador de plataforma 1430, que puede configurarse como un concentrador de controlador de memoria y un concentrador de controlador de periféricos dentro de un conjunto de chips de sistema que está en comunicación con el/los procesador(es) 1402.
Por ejemplo, pueden usarse placas de circuito ("trineos") en las que se colocan componentes tales como las CPU, memoria y otros componentes, que se diseñan para un rendimiento térmico aumentado. Componentes de procesamiento tales como los procesadores pueden ubicarse en un lado superior de un trineo, mientras que las memorias cercanas, tales como los DIMM, se ubican en el lado inferior del trineo. Como resultado del flujo de aire potenciado proporcionado por este diseño, los componentes pueden operar a frecuencias y niveles de potencia superiores a los de los sistemas típicos, aumentando de esta manera el rendimiento. Además, los trineos están configurados para acoplarse a ciegas con cables de comunicación de datos y alimentación en un bastidor, potenciando de esta manera su capacidad de retirarse, actualizarse, reinstalarse y/o sustituirse rápidamente. De manera similar, los componentes individuales ubicados en los trineos, tales como procesadores, aceleradores, memoria y unidades de almacenamiento de datos, están configurados para actualizarse fácilmente debido al aumento de la separación entre los mismos. En la realización ilustrativa, los componentes incluyen adicionalmente características de certificación de hardware para demostrar su autenticidad.
Un centro de datos puede utilizar una única arquitectura de red ("tejido") que soporta múltiples otras arquitecturas de red, incluyendo Ethernet y Omni-Path. Los trineos pueden acoplarse a conmutadores mediante fibras ópticas, que proporcionan un ancho de banda superior y una latencia inferior que el cableado de par trenzado típico (por ejemplo, Categoría 5, Categoría 5e, Categoría 6, etc.). Debido al alto ancho de banda, a las interconexiones de baja latencia y a la arquitectura de red, el centro de datos puede, durante el uso, agrupar recursos, tales como memoria, aceleradores (por ejemplo, GPU, aceleradores de gráficos, FPGA, ASIC, redes neuronales y/o aceleradores de inteligencia artificial, etc.), y unidades de almacenamiento de datos que están físicamente desagregadas, y proporcionarlos a recursos de cálculo (por ejemplo, procesadores) según sea necesario, posibilitando que los recursos de cálculo accedan a los recursos agrupados como si los mismos fueran locales.
Una fuente de energía o de alimentación puede proporcionar voltaje y/o corriente al sistema 1400 o a cualquier componente o sistema descrito en el presente documento. En un ejemplo, la fuente de alimentación incluye un adaptador de CA a CC (corriente alterna a corriente continua) para enchufarlo a una toma de pared. Tal alimentación de CA puede ser una fuente de alimentación de energía renovable (por ejemplo, energía solar). En un ejemplo, la fuente de alimentación incluye una fuente de alimentación de CC, tal como un convertidor de CA a CC externo. Una fuente de energía o fuente de alimentación también puede incluir hardware de carga inalámbrica para cargar mediante la proximidad a un campo de carga. La fuente de energía puede incluir una batería interna, una fuente de corriente alterna, una fuente de alimentación basada en movimiento, una fuente de energía solar o una fuente de celda de combustible.
Las Figuras 15A-15C ilustran sistemas informáticos y procesadores de gráficos. Los elementos de las Figuras 15A-15C que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa.
La Figura 15A es un diagrama de bloques de un procesador 1500, que puede ser una variante de uno de los procesadores 1402 y puede usarse en lugar de uno de ellos. Por lo tanto, la divulgación de cualquier característica en combinación con el procesador 1500 en el presente documento también divulga una combinación correspondiente con el/los procesador(es) 1402, pero no se limita a tal cosa. El procesador 1500 puede tener uno o más núcleos de procesador 1502A-1502N, un controlador de memoria integrado 1514 y un procesador de gráficos integrado 1508. Cuando se excluye un procesador de gráficos integrado 1508, el sistema que incluye el procesador incluirá un dispositivo de procesador de gráficos dentro de un chipset de sistema o acoplado mediante un bus de sistema. El procesador 1500 puede incluir núcleos adicionales hasta e incluyendo el núcleo adicional 1502N representado por los recuadros con línea discontinua. Cada uno de los núcleos de procesador 1502A-1502N incluye una o más unidades de caché internas 1504A-1504N. En algunas realizaciones, cada núcleo de procesador 1502A-1502N también tiene acceso a una o más unidades de caché compartidas 1506. Las unidades de caché internas 1504A-1504N y las unidades de caché compartidas 1506 representan una jerarquía de memoria caché dentro del procesador 1500. La jerarquía de memoria caché puede incluir al menos un nivel de caché de instrucciones y de datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como una caché de Nivel 2 (L2), de Nivel 3 (L3), de Nivel 4 (L4) o de otros niveles, donde el nivel más alto de caché antes de la memoria externa se clasifica como LLC. En algunas realizaciones, la lógica de coherencia de caché mantiene la coherencia entre las diversas unidades de caché 1506 y 1504A-1504N.
El procesador 1500 también puede incluir un conjunto de una o más unidades de controlador de bus 1516 y un núcleo de agente de sistema 1510. Las una o más unidades de controlador de bus 1516 gestionan un conjunto de buses de periféricos, tal como uno o más buses PCI o PCI Express. El núcleo de agente de sistema 1510 proporciona funcionalidad de gestión para los diversos componentes de procesador. El núcleo de agente de sistema 1510 puede incluir uno o más controladores de memoria integrados 1514 para gestionar el acceso a diversos dispositivos de memoria externos (no mostrados).
Por ejemplo, uno o más de los núcleos de procesador 1502A-1502N pueden incluir soporte para múltiples hilos simultáneos. El núcleo de agente de sistema 1510 incluye componentes para coordinar y operar los núcleos 1502A-1502N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 1510 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye lógica y componentes para regular el estado de potencia de los núcleos de procesador 1502A-1502N y el procesador de gráficos 1508.
El procesador 1500 puede incluir adicionalmente un procesador de gráficos 1508 para ejecutar operaciones de procesamiento de gráficos. En algunas de estas realizaciones, el procesador de gráficos 1508 se acopla con el conjunto de unidades de caché compartidas 1506 y el núcleo de agente de sistema 1510, incluyendo los uno o más controladores de memoria integrados 1514. El núcleo de agente de sistema 1510 también puede incluir un controlador de visualización 1511 para controlar una salida de procesador de gráficos a una o más pantallas acopladas. El controlador de visualización 1511 también puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede integrarse dentro del procesador de gráficos 1508.
Puede usarse una interconexión basada en anillo 1512 para acoplar los componentes internos del procesador 1500. Sin embargo, puede usarse una unidad de interconexión alternativa, tal como una interconexión de punto a punto, una interconexión conmutada u otras técnicas, incluyendo técnicas bien conocidas en la técnica. En algunas de estas realizaciones con una interconexión basada en anillo 1512, el procesador de gráficos 1508 se acopla con la interconexión basada en anillo 1512 mediante un enlace de E/S 1513.
El enlace de E/S 1513 ilustrativo representa al menos una de múltiples diversidades de interconexiones de E/S, incluyendo una interconexión de E/S en paquete que facilita la comunicación entre diversos componentes de procesador y un módulo de memoria integrado de alto rendimiento 1518, tal como un módulo de eDRAM. Opcionalmente, cada uno de los núcleos de procesador 1502A-1502N y el procesador de gráficos 1508 puede usar módulos de memoria integrados 1518 como una caché de último nivel compartida.
Los núcleos de procesador 1502A-1502N pueden, por ejemplo, ser núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. Como alternativa, los núcleos de procesador 1502A-1502N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 1502A-1502N ejecutan un primer conjunto de instrucciones, mientras que al menos uno de los otros núcleos ejecuta un subconjunto del primer conjunto de instrucciones o un conjunto de instrucciones diferente. Los núcleos de procesador 1502A-1502N pueden ser heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de energía relativamente superior se acoplan con uno o más núcleos de potencia que tienen un consumo de energía inferior. Como otro ejemplo, los núcleos de procesador 1502A-1502N son heterogéneos en términos de capacidad computacional. Adicionalmente, el procesador 1500 puede implementarse en uno o más chips o como un circuito integrado de SoC que tiene los componentes ilustrados, además de otros componentes.
La Figura 15B es un diagrama de bloques de lógica de hardware de un núcleo de procesador de gráficos 1519, de acuerdo con algunas realizaciones descritas en el presente documento. El núcleo de procesador de gráficos 1519, denominado, en ocasiones, segmento de núcleo, puede ser uno o múltiples núcleos de gráficos dentro de un procesador de gráficos modular. El núcleo de procesador de gráficos 1519 es ilustrativo de un segmento de núcleo de gráficos, y un procesador de gráficos como se describe en el presente documento puede incluir múltiples segmentos de núcleo de gráficos basándose en la potencia objetivo y en las envolventes de rendimiento. Cada núcleo de procesador de gráficos 1519 puede incluir un bloque de función fija 1530 acoplado con múltiples subnúcleos 1521A-1521F, también denominados subsegmentos, que incluyen bloques modulares de lógica de función fija y de propósito general.
El bloque de función fija 1530 puede incluir una canalización de geometría/función fija 1531 que puede ser compartida por todos los subnúcleos en el núcleo de procesador de gráficos 1519, por ejemplo, en implementaciones de procesador de gráficos de rendimiento inferior y/o potencia inferior. La canalización de geometría/función fija 1531 puede incluir una canalización de función fija 3D (por ejemplo, la canalización 3D 1612 como en la Figura 16A descrita a continuación), una unidad de extremo frontal de vídeo, un generador de hilos y un despachador de hilos, y un gestor de memoria intermedia de retorno unificada, que gestiona memorias intermedias de retorno unificadas (por ejemplo, la memoria intermedia de retorno unificada 1718 en la Figura 17, como se describe a continuación).
El bloque de función fija 1530 también puede incluir una interfaz de SoC de gráficos 1532, un microcontrolador de gráficos 1533 y una canalización de medios 1534. La interfaz de SoC de gráficos 1532 proporciona una interfaz entre el núcleo de procesador de gráficos 1519 y otros núcleos de procesador dentro de un circuito integrado de sistema en un chip. El microcontrolador de gráficos 1533 es un subprocesador programable que puede configurarse para gestionar diversas funciones del núcleo de procesador de gráficos 1519, incluyendo el despacho de hilos, la planificación y el otorgamiento de prioridad. La canalización de medios 1534 (por ejemplo, la canalización de medios 1616 de la Figura 16A y la Figura 17) incluye lógica para facilitar la descodificación, la codificación, el preprocesamiento y/o el post-procesamiento de datos multimedia, que incluyen datos de imagen y de vídeo. La canalización de medios 1534 implementa operaciones de medios mediante solicitudes a lógica de cálculo o muestreo dentro de los subnúcleos 1521-1521F.
La interfaz de SoC 1532 puede posibilitar que el núcleo de procesador de gráficos 1519 se comunique con núcleos de procesador de aplicaciones de propósito general (por ejemplo, CPU) y/u otros componentes dentro de un SoC, incluyendo elementos de jerarquía de memoria tales como una memoria caché de último nivel compartida, la RAM de sistema y/o DRAM en chip o en paquete integrada. La interfaz de SoC 1532 también puede posibilitar la comunicación con dispositivos de función fija dentro del SoC, tales como canalizaciones de formación de imágenes de cámara, y posibilita el uso y/o implementa atomizaciones de memoria global que pueden compartirse entre el núcleo de procesador de gráficos 1519 y las CPU dentro del SoC. La interfaz de SoC 1532 también puede implementar controles de gestión de energía para el núcleo de procesador de gráficos 1519 y posibilitar una interfaz entre un dominio de reloj del núcleo de gráficos 1519 y otros dominios de reloj dentro del SoC. Opcionalmente, la interfaz de SoC 1532 posibilita la recepción de memorias intermedias de comandos desde un emisor de flujo continuo de comandos y un despachador de hilos global que están configurados para proporcionar comandos e instrucciones a cada uno de uno o más núcleos de gráficos dentro de un procesador de gráficos. Los comandos e instrucciones pueden despacharse a la canalización de medios 1534, cuando van a realizarse operaciones de medios, o a una canalización de geometría y función fija (por ejemplo, la canalización de geometría y función fija 1531, la canalización de geometría y función fija 1537) cuando van a realizarse operaciones de procesamiento de gráficos.
El microcontrolador de gráficos 1533 puede configurarse para realizar diversas tareas de planificación y gestión para el núcleo de procesador de gráficos 1519. En una configuración, el microcontrolador de gráficos 1533 puede realizar, por ejemplo, una planificación de carga de trabajo de gráficos y/o de cálculo en los diversos motores paralelos de gráficos dentro de las matrices de unidades de ejecución (EU) 1522A-1522F, 1524A-1524F dentro de los subnúcleos 1521A-1521F. En esta planificación de carga de trabajo, el software de anfitrión que se ejecuta en un núcleo de CPU de un SoC que incluye el núcleo de procesador de gráficos 1519 puede enviar cargas de trabajo a uno de múltiples llamadores de procesador de gráficos, lo que invoca una operación de planificación en el motor de gráficos apropiado. Las operaciones de planificación incluyen determinar qué carga de trabajo ejecutar a continuación, emitir una carga de trabajo a un emisor por flujo continuo de comandos, dar prioridad a cargas de trabajo existentes que se ejecutan en un motor, supervisar el progreso de una carga de trabajo y notificar al software de anfitrión cuándo se ha completado una carga de trabajo. Opcionalmente, el microcontrolador de gráficos 1533 también puede facilitar estados de baja potencia o en reposo para el núcleo de procesador de gráficos 1519, proporcionando al núcleo de procesador de gráficos 1519 la capacidad de guardar y restablecer registros dentro del núcleo de procesador de gráficos 1519 a través de transiciones de estado de baja potencia de forma independiente desde el sistema operativo y/o el software de controlador de gráficos en el sistema.
El núcleo de procesador de gráficos 1519 puede tener más o menos que los subnúcleos 1521A-1521F ilustrados, hasta N subnúcleos modulares. Para cada conjunto de N subnúcleos, el núcleo de procesador de gráficos 1519 también puede incluir una lógica de funciones compartidas 1535, una memoria compartida y/o caché 1536, una canalización de geometría/función fija 1537, así como una lógica de función fija adicional 1538 para acelerar diversas operaciones de procesamiento de gráficos y de cálculo. La lógica de función compartida 1535 puede incluir unidades lógicas asociadas con la lógica de función compartida 1720 de la Figura 17 (por ejemplo, lógica del muestreador, matemática y/o de comunicación inter-hilo) que puede compartirse por cada N subnúcleos dentro del núcleo de procesador de gráficos 1519. La memoria compartida y/o caché 1536 puede ser una caché de último nivel para el conjunto de N subnúcleos 1521A-1521F dentro del núcleo de procesador de gráficos 1519, y también puede servir como memoria compartida a la que pueden acceder múltiples subnúcleos. La canalización de geometría/función fija 1537 puede incluirse en lugar de la canalización de geometría/función fija 1531 dentro del bloque de función fija 1530 y puede incluir las mismas unidades de lógica o similares.
El núcleo de procesador de gráficos 1519 puede incluir una lógica de función fija adicional 1538 que puede incluir diversas lógicas de aceleración de función fija para su uso por el núcleo de procesador de gráficos 1519. Opcionalmente, la lógica de función fija adicional 1538 incluye una canalización de geometría adicional para su uso en un sombreado solo de posición. En el sombreado solo de posición, existen dos canalizaciones de geometría, la canalización de geometría completa dentro de la canalización de geometría/función fija 1538, 1531, y una canalización de selección, que es una canalización de geometría adicional que puede incluirse dentro de la lógica de función fija adicional 1538. Por ejemplo, la canalización de selección puede ser una versión recortada de la canalización de geometría completa. La canalización completa y la canalización de selección pueden ejecutar diferentes instancias de la misma aplicación, teniendo cada instancia un contexto separado. El sombreado solo de posición puede ocultar tramos de selección largos de triángulos descartados, posibilitando completar el sombreado antes en algunos casos. Por ejemplo, la lógica de canalización de selección dentro de la lógica de función fija adicional 1538 puede ejecutar sombreadores de posición en paralelo con la aplicación principal y generalmente genera resultados críticos más rápido que la canalización completa, debido a que la canalización de selección extrae y sombrea solo el atributo de posición de los vértices, sin realizar la rasterización y representación de los píxeles a la memoria intermedia de fotogramas. La canalización de selección puede usar los resultados críticos generados para calcular información de visibilidad de todos los triángulos sin tener en cuenta si se seleccionan esos triángulos. La canalización completa (que en este caso puede denominarse canalización de reproducción) puede consumir la información de visibilidad para omitir los triángulos seleccionados para sombrear solo los triángulos visibles que se pasan finalmente a la fase de rasterización.
Opcionalmente, la lógica de función fija adicional 1538 también puede incluir lógica de aceleración de aprendizaje automático, tal como lógica de multiplicación matricial de función fija, para implementaciones que incluyen optimizaciones para entrenamiento o inferencia de aprendizaje automático.
Dentro de cada subnúcleo de gráficos 1521A-1521F, se incluye un conjunto de recursos de ejecución que pueden usarse para realizar operaciones de gráficos, medios y cálculo en respuesta a solicitudes por programas de sombreado, canalización de medios o canalización de gráficos. Los subnúcleos de gráficos 1521A-1521F incluyen múltiples matrices de EU 1522A-1522F, 1524A-1524F, la lógica de despacho de hilos y comunicación entre hilos (TD/IC) 1523A-1523F, un muestreador 3D (por ejemplo, de textura) 1525A-1525F, un muestreador de medios 1506A-1506F, un procesador de sombreador 1527A-1527F y una memoria local compartida (SLM) 1528A-1528F. Cada una de las matrices de EU 1522A-1522F, 1524A-1524F incluye múltiples unidades de ejecución, que son unidades de procesamiento de gráficos de propósito general que pueden realizar operaciones lógicas de coma flotante y de números enteros/coma fija al servicio de una operación de gráficos, de medios o de cálculo, incluyendo programas de gráficos, de medios o de sombreado de cálculo. La lógica de TD/IC 1523A-1523F realiza operaciones de control de hilos y de despacho de hilos locales para las unidades de ejecución dentro de un subnúcleo y facilita la comunicación entre hilos que se ejecutan en las unidades de ejecución del subnúcleo. El muestreador 3D 1525A-1525F puede leer texturas u otros datos relacionados con gráficos 3D en memoria. El muestreador 3D puede leer datos de textura de manera diferente basándose en el estado de muestra configurado y en el formato de textura asociado con una textura dada. El muestreador de medios 1506A-1506F puede realizar operaciones de lectura similares basándose en el tipo y en el formato asociados con datos de medios. Por ejemplo, cada subnúcleo de gráficos 1521A-1521F puede incluir, como alternativa, un muestreador 3D y de medios unificado. Los hilos que se ejecutan en las unidades de ejecución dentro de cada uno de los subnúcleos 1521A-1521F pueden hacer uso de la memoria local compartida 1528A-1528F dentro de cada subnúcleo, para posibilitar que los hilos que se ejecutan dentro de un grupo de hilos se ejecuten usando un agrupamiento común de memoria en chip.
La Figura 15C es un diagrama de bloques de la unidad de procesamiento de gráficos de propósito general (GPGPU) 1570 que puede configurarse como un procesador de gráficos, por ejemplo, el procesador de gráficos 1508, y/o un acelerador de cálculo, de acuerdo con realizaciones descritas en el presente documento. La GPGPU 1570 puede interconectarse con procesadores de anfitrión (por ejemplo, la(s) una o más CPU 1546) y la memoria 1571, 1572 mediante uno o más buses de sistema y/o memoria. La memoria 1571 puede ser memoria de sistema que puede compartirse con la una o más CPU 1546, mientras que la memoria 1572 es memoria de dispositivo que está especializada a la GPGPU 1570. Por ejemplo, los componentes dentro de la GPGPU 1570 y la memoria de dispositivo 1572 pueden mapearse a direcciones de memoria que son accesibles para la(s) una o más CPU 1546. El acceso a la memoria 1571 y 1572 puede facilitarse mediante un controlador de memoria 1568. El controlador de memoria 1568 puede incluir un controlador de acceso de memoria directo (DMA) interno 1569 o puede incluir lógica para realizar operaciones que, de otro modo, serían realizadas por un controlador de DMA.
La GPGPU 1570 incluye múltiples memorias caché, incluyendo una caché de L2 1553, una caché de L1 1554, una caché de instrucciones 1555 y una memoria compartida 1556, al menos una porción de la cual también puede subdividirse como una memoria caché. La GPGPU 1570 también incluye múltiples unidades de cálculo 1560A-1560N. Cada unidad de cálculo 1560A-1560N incluye un conjunto de registros de vector 1561, registros de escalar 1562, unidades de lógica de vectores 1563 y unidades de lógica de escalares 1564. Las unidades de cálculo 1560A-1560N también pueden incluir una memoria compartida local 1565 y un contador de programa 1566. Las unidades de cálculo 1560A-1560N pueden acoplarse con una caché de constantes 1567, que puede usarse para almacenar datos de constantes, que son datos que no cambiarán durante la ejecución del núcleo o programa de sombreado que se ejecuta en la GPGPU 1570. La caché de constantes 1567 es una caché de datos de escalares y los datos almacenados en caché pueden extraerse directamente a los registros de escalar 1562.
Durante la operación, la(s) una o más CPU 1546 puede(n) escribir comandos en registros o memoria en la GPGPU 1570 que se ha mapeado a un espacio de direcciones accesible. Los procesadores de comandos 1557 pueden leer los comandos desde registros o memoria y determinar cómo se procesarán esos comandos dentro de la GPGPU 1570. Un despachador de hilos 1558 puede usarse, a continuación, para despachar hilos a las unidades de cálculo 1560A-1560N para realizar esos comandos. Cada unidad de cálculo 1560A-1560N puede ejecutar hilos independientemente de las otras unidades de cálculo. Adicionalmente, cada unidad de cálculo 1560A-1560N puede configurarse de forma independiente para el cálculo condicional y puede emitir condicionalmente los resultados del cálculo a la memoria. Los procesadores de comandos 1557 pueden interrumpir la(s) una o más CPU 1546 cuando se han completado los comandos enviados.
Las Figuras 16A-16C ilustran diagramas de bloques de arquitecturas de procesadores de gráficos y aceleradores de cálculo adicionales proporcionadas por las realizaciones descritas en el presente documento, por ejemplo, de acuerdo con las Figuras 15A-15C. Los elementos de las Figuras 16A-16C que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa.
La Figura 16A es un diagrama de bloques de un procesador de gráficos 1600, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento, u otros dispositivos semiconductores tales como, pero sin limitación, dispositivos de memoria o interfaces de red. El procesador de gráficos 1600 puede ser una variante del procesador de gráficos 1508 y puede usarse en lugar del procesador de gráficos 1508. Por lo tanto, la divulgación de cualquier característica en combinación con el procesador de gráficos 1508 en el presente documento también divulga una combinación correspondiente con el procesador de gráficos 1600, pero no se limita a tal cosa. El procesador de gráficos puede comunicarse, mediante una interfaz de E/S mapeada con memoria, con registros en el procesador de gráficos y con comandos colocados en la memoria de procesador. El procesador de gráficos 1600 puede incluir una interfaz de memoria 1614 para acceder a memoria. La interfaz de memoria 1614 puede ser una interfaz a memoria local, una o más cachés internas, una o más cachés externas compartidas y/o a memoria de sistema.
Opcionalmente, el procesador de gráficos 1600 también incluye un controlador de visualización 1602 para controlar unos datos de salida de visualización a un dispositivo de visualización 1618. El controlador de visualización 1602 incluye hardware para uno o más planos de superposición para la visualización y composición de múltiples capas de elementos de interfaz de usuario o de vídeo. El dispositivo de visualización 1618 puede ser un dispositivo de visualización interno o externo. En una realización, el dispositivo de visualización 1618 es un dispositivo de visualización montado en la cabeza, tal como un dispositivo de visualización de realidad virtual (RV) o un dispositivo de visualización de realidad aumentada (RA). El procesador de gráficos 1600 puede incluir un motor de códec de vídeo 1606 para codificar, descodificar o transcodificar medios a, desde o entre uno o más formatos de codificación de medios, que incluyen, pero sin limitación, formatos del Grupo de Expertos de Imágenes en Movimiento (MPEG) tales como MPEG-2, formatos de Codificación de Vídeo Avanzada (AVC) tales como H.264/MPEG-4 AVC, H.265/HEVC, Alianza para los Medios Abiertos (AOMedia) VP<8>, VP9, así como de 421M/VC-1 de la Sociedad de Ingenieros de Imágenes en Movimiento y Televisión (SMPTE), y formatos del Grupo Conjunto de Expertos en Fotografía (JPEG), tales como los formatos JPEG y Motion JPEG (MJPEG).
El procesador de gráficos 1600 puede incluir un motor de transferencia de imágenes en bloque (BLIT) 1604 para realizar operaciones de rasterizador bidimensionales (2D), incluyendo, por ejemplo, transferencias de bloque de límite de bits. Sin embargo, como alternativa, pueden realizarse operaciones de gráficos 2D usando uno o más componentes del motor de procesamiento de gráficos (GPE) 1610. En algunas realizaciones, el GPE 1610 es un motor de cálculo para realizar operaciones de gráficos, incluyendo operaciones de gráficos tridimensionales (3D) y operaciones de medios.
El GPE 1610 puede incluir una canalización 3D 1612 para realizar operaciones 3D, tales como representar imágenes y escenas tridimensionales usando funciones de procesamiento que actúan sobre formas de primitivas 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 1612 incluye elementos de función programable y fija que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema 3D/de medios 1615. Aunque la canalización 3D 1612 puede usarse para realizar operaciones de medios, una realización del GPE 1610 también incluye una canalización de medios 1616 que se usa específicamente para realizar operaciones de medios, tales como post-procesamiento de vídeo y potenciación de imagen.
La canalización de medios 1616 puede incluir unidades de lógica programable o de función fija para realizar una o más operaciones de medios especializadas, tales como aceleración de descodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar o en nombre del motor de códec de vídeo 1606. La canalización de medios 1616 puede incluir adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 1615. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 1615.
El subsistema 3D/de medios 1615 puede incluir lógica para ejecutar hilos generados por la canalización 3D 1612 y la canalización de medios 1616. Las canalizaciones pueden enviar solicitudes de ejecución de hilos al subsistema 3D/de medios 1615, incluyendo lógica de despacho de hilos para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una matriz de unidades de ejecución de gráficos para procesar los hilos 3D y de medios. El subsistema 3D/de medios 1615 puede incluir una o más cachés internas para datos e instrucciones de hilo. Adicionalmente, el subsistema 3D/de medios 1615 puede incluir también memoria compartida, incluyendo registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
La Figura 16B ilustra un procesador de gráficos 1620, que es una variante del procesador de gráficos 1600 y puede usarse en lugar del procesador de gráficos 1600, y viceversa. Por lo tanto, la divulgación de cualquier característica en combinación con el procesador de gráficos<1 6 0 0>en el presente documento también divulga una combinación correspondiente con el procesador de gráficos 1620, pero no se limita a tal cosa. El procesador de gráficos 1620 tiene una arquitectura teselada, de acuerdo con realizaciones descritas en el presente documento. El procesador de gráficos 1620 puede incluir una agrupación de motores de procesamiento de gráficos 1622 que tiene múltiples instancias del motor de procesamiento de gráficos 1610 de la Figura 16A dentro de una tesela de motor de gráficos 1610A-1610D. Cada tesela de motor de gráficos 1610A-1610D puede interconectarse mediante un conjunto de interconexiones de teselas 1623A-1623F. Cada tesela de motor de gráficos 1610A-1610D también puede conectarse a un módulo de memoria o dispositivo de memoria 1626A-1626D mediante unas interconexiones de memoria 1625A-1625D. Los dispositivos de memoria 1626A-1626D pueden usar cualquier tecnología de memoria de gráficos. Por ejemplo, los dispositivos de memoria 1626A-1626D pueden ser memorias de doble tasa de datos de gráficos (GDDR). Los dispositivos de memoria 1626A-1626D pueden ser módulos de memoria de alto ancho de banda (HBM) que pueden estar en pastilla con su tesela de motor de gráficos 1610A-1610D respectiva. Los dispositivos de memoria 1626A-1626D pueden ser dispositivos de memoria apilados que pueden apilarse encima de su tesela de motor de gráficos 1610A-1610D respectiva. Cada tesela de motor de gráficos 1610A-1610D y la memoria 1626A-1626D asociada pueden residir en chiplets separados, que se unen a una pastilla base o sustrato base, como se describe con detalle adicional en las Figuras 24B-24D.
El procesador de gráficos 1620 puede configurarse con un sistema de acceso de memoria no uniforme (NUMA) en el que los dispositivos de memoria 1626A-1626D se acoplan con unas teselas de motor de gráficos 1610A-1610D asociadas. A un dispositivo de memoria dado pueden acceder teselas de motor de gráficos que no sean la tesela a la que este se conecta directamente. Sin embargo, la latencia de acceso a los dispositivos de memoria 1626A-1626D puede ser la más baja cuando se accede a una tesela local. En una realización, se posibilita un sistema de NUMA coherente con caché (ccNUMA) que usa las interconexiones de teselas 1623A-1623F para posibilitar la comunicación entre controladores de caché dentro de las teselas de motor de gráficos 1610A-1610D para mantener una imagen de memoria consistente cuando más de una caché almacena la misma ubicación de memoria.
La agrupación de motores de procesamiento de gráficos 1622 puede conectarse con una interconexión de tejido en chip o en paquete 1624. La interconexión de tejido 1624 puede posibilitar la comunicación entre las teselas de motor de gráficos<1 6 1>0A-1610D y componentes tales como el códec de vídeo 1606 y uno o más motores de copia 1604. Los motores de copia 1604 pueden usarse para mover datos fuera de, a y entre los dispositivos de memoria 1626A-1626D y memoria que es externa al procesador de gráficos 1620 (por ejemplo, memoria de sistema). La interconexión de tejido 1624 también puede usarse para interconectar las teselas de motor de gráficos 1610A-1610D. El procesador de gráficos 1620 puede incluir opcionalmente un controlador de visualización 1602 para posibilitar una conexión con un dispositivo de visualización externo 1618. El procesador de gráficos también puede configurarse como un acelerador de gráficos o de cálculo. En la configuración de acelerador, pueden omitirse el controlador de visualización 1602 y el dispositivo de visualización 1618.
El procesador de gráficos 1620 puede conectarse a un sistema de anfitrión mediante una interfaz de anfitrión 1628. La interfaz de anfitrión 1628 puede posibilitar la comunicación entre el procesador de gráficos 1620, la memoria de sistema y/u otros componentes de sistema. La interfaz de anfitrión 1628 puede ser, por ejemplo, un bus PCI Express u otro tipo de interfaz de sistema de anfitrión.
La Figura 16C ilustra un acelerador de cálculo 1630, de acuerdo con realizaciones descritas en el presente documento. El acelerador de cálculo 1630 puede incluir similitudes arquitectónicas con el procesador de gráficos 1620 de la Figura 16B y se optimiza para la aceleración de cálculos. Una agrupación de motores de cálculo 1632 puede incluir un conjunto de teselas de motor de cálculo 1640A-1640D que incluyen lógica de ejecución que se optimiza para operaciones de cálculo de propósito general paralelas o basadas en vectores. Las teselas de motor de cálculo 1640A-1640D pueden no incluir lógica de procesamiento de gráficos de función fija, aunque, en algunas realizaciones, una o más de las teselas de motor de cálculo 1640A-1640D pueden incluir lógica para realizar una aceleración de medios. Las teselas de motor de cálculo 1640A-1640D pueden conectarse a la memoria 1626A-1626D mediante las interconexiones de memoria 1625A-1625D. La memoria 1626A-1626D y las interconexiones de memoria 1625A-1625D pueden ser de una tecnología similar a la del procesador de gráficos 1620, o pueden ser diferentes. Las teselas de motor de cálculo de gráficos 1640A-1640D también pueden interconectarse mediante un conjunto de interconexiones de teselas 1623A-1623F y pueden conectarse con y/o interconectarse mediante una interconexión de tejido 1624. En una realización, el acelerador de cálculo 1630 incluye una caché de L3 grande 1636 que puede configurarse como una caché que abarca todo el dispositivo. El acelerador de cálculo 1630 también puede conectarse a un procesador de anfitrión y a memoria mediante una interfaz de anfitrión 1628 de una manera similar a la del procesador de gráficos 1620 de la Figura 16B.
Motor de procesamiento de gráficos
La Figura 17 es un diagrama de bloques de un motor de procesamiento de gráficos 1710 de un procesador de gráficos de acuerdo con algunas realizaciones. El motor de procesamiento de gráficos (GPE) 1710 puede ser una versión del GPE 1610 mostrado en la Figura 16A, y también puede representar una tesela de motor de gráficos 1610A-1610D de la Figura 16B. Los elementos de la Figura 17 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. Por ejemplo, la canalización 3D 1612 y la canalización de medios 1616 de la Figura 16A también se ilustran en Figura 17. La canalización de medios 1616 es opcional en algunas realizaciones del GPE 1710 y puede no incluirse explícitamente dentro del GPE 1710. Por ejemplo, y en al menos una realización, un procesador de medios y/o de imágenes separado se acopla al GPE 1710.
El GPE 1710 puede acoplarse con o incluir un transmisor por flujo continuo de comandos 1703, que proporciona un flujo de comandos a la canalización 3D 1612 y/o a las canalizaciones de medios 1616. Como alternativa o adicionalmente, el transmisor por flujo continuo de comandos 1703 puede acoplarse directamente a una memoria intermedia de retorno unificada 1718. La memoria intermedia de retorno unificada 1718 puede acoplarse de manera comunicativa a una matriz de núcleos de gráficos 1714. Opcionalmente, el transmisor por flujo continuo de comandos 1703 se acopla con memoria, que puede ser memoria de sistema, o una o más de memoria caché interna y memoria caché compartida. El transmisor por flujo continuo de comandos 1703 puede recibir comandos desde la memoria y envía los comandos a la canalización 3D 1612 y/o a la canalización de medios 1616. Los comandos son directivas extraídas de una memoria intermedia en anillo, que almacena comandos para la canalización 3D 1612 y la canalización de medios 1616. La memoria intermedia en anillo puede incluir adicionalmente memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización 3D 1612 también pueden incluir referencias a datos almacenados en memoria, tales como, pero sin limitación, datos de vértice y de geometría para la canalización 3D 1612 y/o datos de imagen y objetos de memoria para la canalización de medios 316. La canalización 3D 1612 y la canalización de medios 1616 procesan los comandos y datos realizando operaciones mediante lógica dentro de las canalizaciones respectivas o despachando uno o más hilos de ejecución a la matriz de núcleos de gráficos 1714. La matriz de núcleos de gráficos 1714 puede incluir uno o más bloques de núcleos de gráficos (por ejemplo, el/los núcleo(s) de gráficos 1715A, el/los núcleo(s) de gráficos 1715B), incluyendo cada bloque uno o más núcleos de gráficos. Cada núcleo de gráficos incluye un conjunto de recursos de ejecución de gráficos que incluyen lógica de ejecución de propósito general y específica de gráficos para realizar operaciones de gráficos y de cálculo, así como lógica de aceleración de inteligencia artificial y aprendizaje automático y/o procesamiento de texturas de función fija.
En diversas realizaciones, la canalización 3D 1612 puede incluir lógica de función fija y programable para procesar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de cálculo u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleos de gráficos 1714. La matriz de núcleos de gráficos 1714 proporciona un bloque unificado de recursos de ejecución para su uso en el procesamiento de estos programas de sombreado. La lógica de ejecución de múltiples propósitos (por ejemplo, unidades de ejecución) dentro del/de los núcleo(s) de gráficos 1715A-1714B de la matriz de núcleos de gráficos 1714 incluye el soporte para diversos lenguajes de sombreador de API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
La matriz de núcleos de gráficos 1714 puede incluir lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. Las unidades de ejecución pueden incluir lógica de propósito general que es programable para realizar operaciones computacionales de propósito general paralelas, además de operaciones de procesamiento de gráficos. La lógica de propósito general puede realizar operaciones de procesamiento en paralelo o junto con lógica de propósito general dentro del/de los núcleo(s) de procesador 1407 de la Figura 14 o del núcleo 1502A-1502N, como en la Figura 15A.
Los datos de salida generados por hilos que se ejecutan en la matriz de núcleos de gráficos 1714 pueden emitir datos a memoria en una memoria intermedia de retorno unificada (URB) 1718. La URB 1718 puede almacenar datos para múltiples hilos. La URB 1718 puede usarse para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleos de gráficos 1714. La URB 1718 puede usarse adicionalmente para la sincronización entre hilos en la matriz de núcleos de gráficos 1714 y la lógica de función fija dentro de la lógica de funciones compartidas 1720.
Opcionalmente, la matriz de núcleos de gráficos 1714 puede ser ajustable a escala, de manera que la matriz incluye un número variable de núcleos de gráficos, teniendo cada uno un número variable de unidades de ejecución basándose en la potencia objetivo y en el nivel de rendimiento del GPE 1710. Los recursos de ejecución pueden ser ajustables a escala dinámicamente, de manera que los recursos de ejecución pueden habilitarse o deshabilitarse según sea necesario.
La matriz de núcleos de gráficos 1714 se acopla con la lógica de funciones compartidas 1720 que incluye múltiples recursos que se comparten entre los núcleos de gráficos en la matriz de núcleos de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 1720 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleos de gráficos 1714. En diversas realizaciones, la lógica de funciones compartidas 1720 incluye, pero sin limitación, la lógica del muestreador 1721, del cálculo matemático 1722 y de la comunicación entre hilos (ITC) 1723. Adicionalmente, una o más caché(s) 1725 puede(n) implementarse dentro de la lógica de funciones compartidas 1720.
Se implementa una función compartida al menos en un caso en el que la demanda de una función especializada dada es insuficiente para su inclusión dentro de la matriz de núcleos de gráficos 1714. En su lugar, una única instanciación de esa función especializada se implementa como una entidad autónoma en la lógica de funciones compartidas 1720 y se comparte entre los recursos de ejecución dentro de la matriz de núcleos de gráficos 1714. El conjunto preciso de funciones que se comparten entre la matriz de núcleos de gráficos 1714 y se incluyen dentro de la matriz de núcleos de gráficos 1714 varía a través de las realizaciones. Funciones compartidas específicas dentro de la lógica de funciones compartidas 1720 que son usadas ampliamente por la matriz de núcleos de gráficos 1714 pueden incluirse dentro de la lógica de funciones compartidas 1716 dentro de la matriz de núcleos de gráficos 1714. Opcionalmente, la lógica de funciones compartidas 1716 dentro de la matriz de núcleos de gráficos 1714 puede incluir alguna o toda la lógica dentro de la lógica de funciones compartidas 1720. Todos los elementos lógicos dentro de la lógica de funciones compartidas 1720 pueden duplicarse dentro de la lógica de funciones compartidas 1716 de la matriz de núcleos de gráficos 1714. Como alternativa, la lógica de funciones compartidas 1720 se excluye en favor de la lógica de funciones compartidas 1716 dentro de la matriz de núcleos de gráficos 1714.
Unidades de ejecución
Las Figuras 18A-18B ilustran la lógica de ejecución de hilos 1800 que incluye una matriz de elementos de procesamiento empleados en un núcleo de procesador de gráficos de acuerdo con realizaciones descritas en el presente documento. Los elementos de las Figuras 18A-18B que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. Las Figuras 18A-18B ilustran una vista general de la lógica de ejecución de hilos 1800, que puede ser representativa de la lógica de hardware ilustrada con cada subnúcleo 1521A-1521F de la Figura 15B. La Figura 18A es representativa de una unidad de ejecución dentro de un procesador de gráficos de propósito general, mientras que la Figura 18B es representativa de una unidad de ejecución que puede usarse dentro de un acelerador de cálculo.
Como se ilustra en la Figura 18A, en algunas realizaciones, la lógica de ejecución de hilos 1800 puede incluir un procesador de sombreador 1802, un despachador de hilos 1804, una caché de instrucciones 1806, una matriz de unidades de ejecución ajustable a escala que incluye una pluralidad de unidades de ejecución 1808A-1808N, un muestreador 1810, una memoria local compartida 1811, una caché de datos 1812 y un puerto de datos 1814. Opcionalmente, la matriz de unidades de ejecución ajustable a escala puede realizar un ajuste a escala dinámico habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 1808A, 1808B, 1808C, 1808D a 1808N-1 y 1808N) basándose en los requisitos computacionales de una carga de trabajo. Los componentes incluidos pueden interconectarse mediante un tejido de interconexión que enlaza con cada uno de los componentes. La lógica de ejecución de hilos 1800 puede incluir una o más conexiones a memoria, tales como memoria de sistema o memoria caché, a través de una o más de la caché de instrucciones 1806, el puerto de datos 1814, el muestreador 1810 y las unidades de ejecución 1808A-1808N. Cada unidad de ejecución (por ejemplo, 1808A) puede ser una unidad computacional de propósito general programable autónoma que es capaz de ejecutar múltiples hilos de hardware simultáneos mientras se procesan múltiples elementos de datos en paralelo para cada hilo. En diversas realizaciones, la matriz de unidades de ejecución 1808A-1808N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
Las unidades de ejecución 1808A-1808N pueden usarse principalmente para ejecutar programas de sombreado. Un procesador de sombreador 1802 puede procesar los diversos programas de sombreado y despachar hilos de ejecución asociados con los programas de sombreado mediante un despachador de hilos 1804. El despachador de hilos puede incluir una lógica para arbitrar solicitudes de iniciación de hilo desde las canalizaciones de gráficos y de medios e instanciar los hilos solicitados en una o más unidades de ejecución 1808A-1808N. Por ejemplo, una canalización de geometría puede despachar sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de hilos para su procesamiento. Opcionalmente, el despachador de hilos 1804 también puede procesar solicitudes de generación de hilos en tiempo de ejecución desde los programas de sombreado en ejecución.
Las unidades de ejecución 1808A-1808N pueden soportar un conjunto de instrucciones que incluye soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencionales, de manera que programas de sombreado desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución soportan un procesamiento de vértices y de geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), un procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y un procesamiento de propósito general (por ejemplo, sombreadores de cálculo y de medios). Cada una de las unidades de ejecución 1808A-1808N es capaz de múltiples emisiones de ejecución de múltiples datos de instrucción única (SIMD), y una operación de múltiples hilos posibilita un entorno de ejecución eficiente frente a accesos de memoria de latencia superior. Cada hilo de hardware dentro de cada unidad de ejecución tiene un archivo de registro de ancho de banda alto dedicado y un estado de hilo independiente asociado. La ejecución es de múltiples emisiones por reloj a canalizaciones capaces de realizar operaciones de coma flotante de precisión sencilla y doble, capacidad de bifurcación de SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones misceláneas. Mientras se esperan datos desde memoria o una de las funciones compartidas, una lógica de dependencia dentro de las unidades de ejecución 1808A-1808N hace que un hilo en espera pase a estar inactivo hasta que se hayan devuelto los datos solicitados. Mientras el hilo en espera está inactivo, pueden dedicarse recursos de hardware a procesar otros hilos. Por ejemplo, durante un retardo asociado con una operación de sombreador de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, un sombreador de fragmentos u otro tipo de programa de sombreado, incluyendo un sombreador de vértices diferente, tal como el sombreador de vértices 2107 ilustrado en la Figura 21. Diversas realizaciones pueden ser aplicables a usar la ejecución mediante el uso de múltiples hilos y única instrucción (SIMT) como una alternativa al uso de SIMD o además del uso de SIMD. La referencia a un núcleo u operación de SIMD también puede ser aplicable a SIMT o ser aplicable a SIMD en combinación con SIMT.
Cada unidad de ejecución en las unidades de ejecución 1808A-1808N opera sobre matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso, enmascaramiento y control de flujo de elementos de datos dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticológicas (ALU), unidades de coma flotante (FPU) u otras unidades de lógica (por ejemplo, núcleos de tensor, núcleos de trazado de rayos, etc.) para un procesador de gráficos particular. Adicionalmente, las unidades de ejecución 1808A-1808N pueden soportar tipos de datos de números enteros y de coma flotante.
El conjunto de instrucciones de unidad de ejecución incluye instrucciones de SIMD. Los diversos elementos de datos pueden almacenarse como un tipo de datos empaquetados en un registro y la unidad de ejecución procesará los diversos elementos basándose en el tamaño de datos de los elementos. Por ejemplo, cuando se opera sobre un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera sobre el vector como cuatro elementos de datos empaquetados de 184 bits separados (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados de 32 bits separados (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados de 16 bits separados (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos de<8>bits separados (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchuras de vector y tamaños de registro.
Opcionalmente, una o más unidades de ejecución pueden combinarse en una unidad de ejecución fusionada 1809A-1809N que tiene una lógica de control de hilos (1807A-1807N) que es común a las EU fusionadas. Múltiples EU pueden fusionarse en un grupo de EU. Cada EU del grupo de EU fusionadas puede configurarse para ejecutar un hilo de hardware de SIMD separado. El número de EU en un grupo de EU fusionadas puede variar de acuerdo con realizaciones. Adicionalmente, pueden realizarse diversas anchuras de SIMD por EU, que incluyen, pero sin limitación, SIMD<8>, SIMD16 y SIMD32. Cada unidad de ejecución de gráficos fusionada 1809A-1809N incluye al menos dos unidades de ejecución. Por ejemplo, la unidad de ejecución fusionada 1809A incluye una primera EU 1808A, una segunda EU 1808B y una lógica de control de hilos 1807A que es común a la primera EU 1808A y a la segunda EU 1808B. La lógica de control de hilos 1807A controla los hilos ejecutados en la unidad de ejecución de gráficos fusionada 1809A, permitiendo que cada EU dentro de las unidades de ejecución fusionadas 1809A-1809N se ejecute usando un registro de puntero de instrucción común.
Una o más cachés de instrucciones internas (por ejemplo, 1806) se incluyen en la lógica de ejecución de hilos 1800 para almacenar en caché instrucciones de hilo para las unidades de ejecución. Una o más cachés de datos (por ejemplo, 1812) pueden incluirse en la lógica de ejecución de hilos 1800 para almacenar en caché datos de hilo durante la ejecución de hilo. Los hilos que se ejecutan en la lógica de ejecución 1800 también pueden almacenar datos gestionados explícitamente en la memoria local compartida 1811. Puede incluirse un muestreador 1810 para proporcionar un muestreo de textura para operaciones 3D y un muestreo de medios para operaciones de medios. El muestreador 1810 puede incluir una funcionalidad de muestreo de textura o de medios especializada para procesar datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
Durante la ejecución, las canalizaciones de gráficos y de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilos 1800 mediante lógica de generación y de despacho de hilos. Una vez que se ha procesado y rasterizado un grupo de objetos geométricos para dar datos de píxel, se invoca lógica de procesador de píxeles (por ejemplo, lógica de sombreador de píxeles, lógica de sombreador de fragmentos, etc.) dentro del procesador de sombreador 1802 para calcular adicionalmente información de salida y hacer que se escriban resultados para emitir superficies (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de estarcido, etc.). Un sombreador de píxeles o un sombreador de fragmentos puede calcular los valores de los diversos atributos de vértice que van a interpolarse a través del objeto rasterizado. La lógica de procesador de píxeles dentro del procesador de sombreador 1802 puede ejecutar, a continuación, un programa de sombreado de píxeles o de fragmentos suministrado por interfaz de programación de aplicaciones (API). Para ejecutar el programa de sombreado, el procesador de sombreador 1802 despacha hilos a una unidad de ejecución (por ejemplo, 1808A) mediante el despachador de hilos 1804. El procesador de sombreador 1802 puede usar una lógica de muestreo de textura en el muestreador 1810 para acceder a datos de textura en mapeos de textura almacenados en memoria. Operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada calculan datos de color de píxel para cada fragmento geométrico, o descartan el procesamiento adicional de uno o más píxeles.
Además, el puerto de datos 1814 puede proporcionar un mecanismo de acceso a memoria para que la lógica de ejecución de hilos 1800 emita datos procesados a memoria para su procesamiento adicional en una canalización de salida de procesador de gráficos. El puerto de datos 1814 puede incluir o acoplarse a una o más memorias caché (por ejemplo, la caché de datos 1812) para almacenar en caché datos para un acceso de memoria mediante el puerto de datos 1814.
Opcionalmente, la lógica de ejecución 1800 también puede incluir un trazador de rayos 1805 que puede proporcionar funcionalidad de aceleración de trazado de rayos. El trazador de rayos 1805 puede soportar un conjunto de instrucciones de trazado de rayos que incluye instrucciones/funciones para la generación de rayos. El conjunto de instrucciones de trazado de rayos puede ser similar o diferente del conjunto de instrucciones de trazado de rayos soportado por los núcleos de trazado de rayos 372 en la Figura 3C.
La Figura 18B ilustra detalles internos ilustrativos de una unidad de ejecución 1808. Una unidad de ejecución de gráficos 1808 puede incluir una unidad de extracción de instrucciones<1>837, una matriz de archivos de registro general (GRF) 1824, una matriz de archivos de registro arquitectónica (ARF) 1826, un árbitro de hilos 1822, una unidad de envío 1830, una unidad de bifurcación 1832, un conjunto de unidades de coma flotante (FPU) de SIMD 1834 y, opcionalmente, un conjunto de ALU de SIMD de números enteros dedicadas 1835. La GRF 1824 y la ARF 1826 incluyen el conjunto de archivos de registro generales y archivos de registro de arquitectura asociados con cada hilo de hardware simultáneo que puede estar activo en la unidad de ejecución de gráficos 1808. El estado arquitectónico por hilo puede mantenerse en la ARF 1826, mientras que los datos usados durante la ejecución de hilo se almacenan en la GRF 1824. El estado de ejecución de cada hilo, incluyendo los punteros de instrucción para cada hilo, puede mantenerse en registros específicos de hilo en la ARF 1826.
La unidad de ejecución de gráficos 1808 puede tener una arquitectura que es una combinación de múltiples hilos simultáneos (SMT) y múltiples hilos entrelazados de granularidad fina (IMT). La arquitectura puede tener una configuración modular que puede ajustarse con precisión en tiempo de diseño basándose en un número objetivo de hilos simultáneos y en un número de registros por unidad de ejecución, donde los recursos de unidad de ejecución se dividen a través de la lógica usada para ejecutar múltiples hilos simultáneos. El número de hilos lógicos que pueden ser ejecutados por la unidad de ejecución de gráficos 1808 no se limita al número de hilos de hardware, y pueden asignarse múltiples hilos lógicos a cada hilo de hardware.
Opcionalmente, la unidad de ejecución de gráficos 1808 puede emitir conjuntamente múltiples instrucciones, cada una de las cuales pueden ser instrucciones diferentes. El árbitro de hilos 1822 del hilo de la unidad de ejecución de gráficos 1808 puede despachar las instrucciones a una de la unidad de envío 1830, la unidad de bifurcación 1832 o la(s) FPU de SIMD 1834 para su ejecución. Cada hilo de ejecución puede acceder a 128 registros de propósito general dentro de la GRF 1824, donde cada registro puede almacenar 32 bytes, accesibles como un vector de<8>elementos de SIMD de elementos de datos de 32 bits. Cada hilo de unidad de ejecución puede tener acceso a 4 kbytes dentro de la GRF 1824, aunque las realizaciones no se limitadas a ello, y pueden proporcionarse más o menos recursos de registro en otras realizaciones. La unidad de ejecución de gráficos 1808 puede subdividirse en siete hilos de hardware que pueden realizar operaciones computacionales de forma independiente, aunque el número de hilos por unidad de ejecución también puede variar de acuerdo con realizaciones, por ejemplo, pueden soportarse hasta 16 hilos de hardware. En una realización en la que siete hilos pueden acceder a 4 kbytes, la GRF 1824 puede almacenar un total de 28 kbytes. En otra realización ilustrativa, donde 16 hilos pueden acceder a 4 kbytes, la GRF 1824 puede almacenar un total de 64 kbytes. Sin embargo, el número de hilos por unidad de ejecución no se limita a esos ejemplos y puede ser mayor o menor que los números dados. Los modos de direccionamiento flexibles pueden permitir que los registros se direccionen conjuntamente para construir registros más amplios de manera eficaz o para representar estructuras de datos de bloques rectangulares con paso.
Adicionalmente o como alternativa, las operaciones de memoria, las operaciones de muestreo y otras comunicaciones de sistema de latencia más larga pueden despacharse mediante instrucciones de "envío" que son ejecutadas por la unidad de envío de paso de mensajes 1830. Las instrucciones de bifurcación pueden despacharse a una unidad de bifurcación dedicada 1832 para facilitar la divergencia de SIMD y la convergencia final.
La unidad de ejecución de gráficos 1808 puede incluir una o más unidades de SIMD de coma flotante (una(s) FPU) 1834 para realizar operaciones de coma flotante. La(s) FPU 1834 también puede(n) soportar el cálculo de números enteros. En algunos casos, la(s) FPU 1834 puede(n) ejecutar SIMD hasta un número M de operaciones de coma flotante (o de números enteros) de 32 bits, o ejecutar SIMD hasta 2M operaciones de números enteros de16 bits o de coma flotante de 16 bits. Opcionalmente, al menos una de la(s) FPU proporciona una capacidad de cálculo matemático ampliada para soportar funciones de cálculo matemático trascendental de alto caudal y coma flotante de 184 bits de doble precisión. También puede estar presente un conjunto de ALU de SIMD 1835 de números enteros de<8>bits, y puede optimizarse específicamente para realizar operaciones asociadas con cálculos de aprendizaje automático.
Opcionalmente, matrices de múltiples instancias de la unidad de ejecución de gráficos 1808 pueden instanciarse en una agrupación de subnúcleos de gráficos (por ejemplo, un subsegmento). Para lograr escalabilidad, los arquitectos de producto pueden elegir el número exacto de unidades de ejecución por agrupamiento de subnúcleos. La unidad de ejecución 1808 puede ejecutar instrucciones a través de una pluralidad de canales de ejecución. Además, cada hilo ejecutado en la unidad de ejecución de gráficos 1808 puede ejecutarse en un canal diferente.
La Figura 19 ilustra una unidad de ejecución 1900 ilustrativa adicional. Los elementos de la Figura 19 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. La unidad de ejecución 1900 puede ser una unidad de ejecución optimizada para cálculo para su uso en, por ejemplo, una tesela de motor de cálculo 1640A-1640D como en la Figura 16C, pero no está limitada en este sentido. La unidad de ejecución 1900 también puede usarse en una tesela de motor de gráficos 1610A-1610D como en la Figura 16B. La unidad de ejecución 1900 puede incluir una unidad de control de hilos 1901, una unidad de estado de hilos 1902, una unidad de extracción/extracción previa de instrucciones 1903 y una unidad de descodificación de instrucciones 1904. La unidad de ejecución 1900 puede incluir adicionalmente un archivo de registro 1906 que almacena registros que pueden asignarse a hilos de hardware dentro de la unidad de ejecución. La unidad de ejecución 1900 puede incluir adicionalmente una unidad de envío 1907 y una unidad de bifurcación 1908. La unidad de envío 1907 y la unidad de bifurcación 1908 pueden operar de manera similar a la unidad de envío 1830 y una unidad de bifurcación 1832 de la unidad de ejecución de gráficos 1808 de la Figura 18B.
La unidad de ejecución 1900 también puede incluir una unidad de cálculo 1910 que incluye múltiples tipos diferentes de unidades funcionales. La unidad de cálculo 1910 también puede incluir una unidad ALU 1911 que incluye una matriz de unidades aritmético-lógicas. La unidad de ALU 1911 puede configurarse para realizar operaciones de números enteros y de coma flotante de 64 bits, 32 bits y 16 bits. Las operaciones de números enteros y de coma flotante pueden realizarse simultáneamente. La unidad de cálculo 1910 puede incluir también una matriz sistólica 1912 y una unidad de cálculo matemático 1913. La matriz sistólica 1912 incluye una red de unidades de procesamiento de datos de anchura W y profundidad D que pueden usarse para realizar operaciones vectoriales u otras operaciones paralelas en cuanto a datos de una manera sistólica. La matriz sistólica 1912 puede configurarse para realizar operaciones matriciales, tales como operaciones de productos escalares de matrices. La matriz sistólica 1912 puede soportar operaciones de coma flotante de 16 bits, así como operaciones de números enteros de<8>y 4 bits. La matriz sistólica 1912 puede configurarse para acelerar las operaciones de aprendizaje automático. La matriz sistólica 1912 puede configurarse con soporte para bfloat16, un formato de coma flotante de 16 bits. Una unidad de cálculo matemático 1913 puede incluirse para realizar un subconjunto específico de operaciones matemáticas de una manera eficiente y de una manera con una potencia inferior a la de la unidad ALU 1911. La unidad de cálculo matemático 1913 puede incluir una variante de lógica de cálculo matemático que puede encontrarse en la lógica de funciones compartidas de un motor de procesamiento de gráficos proporcionado por otras realizaciones descritas, por ejemplo, la lógica de cálculo matemático 1722 de la lógica de funciones compartidas 1720 de la Figura 17. La unidad de cálculo matemático 1913 puede configurarse para realizar operaciones de coma flotante de 32 bits y 64 bits.
La unidad de control de hilos 1901 incluye lógica para controlar la ejecución de hilos dentro de la unidad de ejecución. La unidad de control de hilos 1901 puede incluir lógica de arbitraje de hilos para iniciar, detener y dar prioridad a la ejecución de hilos dentro de la unidad de ejecución 1900. La unidad de estado de hilos 1902 puede usarse para almacenar un estado de hilo para hilos asignados para su ejecutarse en la unidad de ejecución 1900. Almacenar el estado de hilo dentro de la unidad de ejecución 1900 posibilita un otorgamiento de prioridad rápido a los hilos cuando esos hilos quedan bloqueados o en reposo. La unidad de extracción/extracción previa de instrucciones 1903 puede extraer instrucciones desde una caché de instrucciones de lógica de ejecución de nivel superior (por ejemplo, la caché de instrucciones 1806 como en la Figura 18A). La unidad de extracción/extracción previa de instrucciones 1903 también puede emitir solicitudes de extracción previa para que se carguen instrucciones en la caché de instrucciones basándose en un análisis de los hilos que se están ejecutando actualmente. La unidad de descodificación de instrucciones 1904 puede usarse para descodificar instrucciones que van a ser ejecutadas por las unidades de cálculo. La unidad de descodificación de instrucciones 1904 puede usarse como un descodificador secundario para descodificar instrucciones complejas en microoperaciones constituyentes.
La unidad de ejecución 1900 incluye adicionalmente un archivo de registro 1906 que puede ser usado por hilos de hardware que se ejecutan en la unidad de ejecución 1900. Los registros en el archivo de registro 1906 pueden dividirse a través de la lógica usada para ejecutar múltiples hilos simultáneos dentro de la unidad de cálculo 1910 de la unidad de ejecución 1900. El número de hilos lógicos que pueden ser ejecutados por la unidad de ejecución de gráficos 1900 no se limita al número de hilos de hardware, y pueden asignarse múltiples hilos lógicos a cada hilo de hardware. El tamaño del archivo de registro 1906 puede variar a través de las realizaciones basándose en el número de hilos de hardware soportados. El cambio de nombre de registros puede usarse para asignar dinámicamente registros a hilos de hardware.
La Figura 20 es un diagrama de bloques que ilustra un formato de instrucción de procesador de gráficos 2000. Las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen, en general, en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de las instrucciones. Los formatos de instrucción 2000 descritos e ilustrados son macro-instrucciones, en el sentido de que los mismos son instrucciones suministradas a la unidad de ejecución, en contraposición a micro-operaciones resultantes de la descodificación de instrucciones una vez que se ha procesado la instrucción.
Las unidades de ejecución de procesador de gráficos como se describe en el presente documento pueden soportar de manera nativa instrucciones en un formato de instrucción de 128 bits 2010. Un formato de instrucción compactado de 64 bits 2030 está disponible para algunas instrucciones basándose en la instrucción, las opciones de instrucción y el número de operandos seleccionados. El formato de instrucción de 128 bits nativo 2010 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 2030. Las instrucciones nativas disponibles en el formato de 64 bits 2030 varían según la realización. La instrucción se compacta en parte usando un conjunto de valores de índice en un campo de índice 2013. El hardware de unidad de ejecución consulta un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 2010. Pueden usarse otros tamaños y formatos de instrucción.
Para cada formato, el código de operación de instrucción 2012 define la operación que ha de realizar la unidad de ejecución. Las unidades de ejecución ejecutan cada instrucción en paralelo a través de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de suma, la unidad de ejecución realiza una operación de suma simultánea a través de cada canal de color que representa un elemento de textura o un elemento de imagen. Por defecto, la unidad de ejecución ejecuta cada instrucción a través de todos los canales de datos de los operandos. El campo de control de instrucción 2014 puede posibilitar el control sobre ciertas opciones de ejecución, tales como la selección de canales (por ejemplo, predicación) y el orden de canal de datos (por ejemplo, mezcla). Para instrucciones en el formato de instrucción de<1 2 8>bits<2 0 1 0>, un campo de tamaño de ejecución 2016 limita el número de canales de datos que se ejecutarán en paralelo. Un campo de tamaño de ejecución 2016 puede no estar disponible para su uso en el formato de instrucción compacto de 64 bits 2030.
Algunas instrucciones de unidad de ejecución tienen hasta tres operandos, incluyendo dos operandos de origen, src0 2020, src1 2022 y un destino 2018. Las unidades de ejecución pueden soportar instrucciones de destino dual, donde uno de los destinos está implícito. Las instrucciones de manipulación de datos pueden tener un tercer operando de origen (por ejemplo, SRC22024), donde el código de operación de instrucción 2012 determina el número de operandos de origen. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera rígida) pasado con la instrucción.
El formato de instrucción de 128 bits 2010 puede incluir un campo de modo de acceso/dirección 2026 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se usa el modo de direccionamiento de registro directo, la dirección de registro de uno o más operandos es proporcionada directamente por bits en la instrucción.
El formato de instrucción de 128 bits 2010 también puede incluir un campo de modo de acceso/dirección 2026, que especifica un modo de dirección y/o un modo de acceso para la instrucción. El modo de acceso puede usarse para definir una alineación de acceso de datos para la instrucción. Pueden soportarse modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de<1>byte, donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede usar un direccionamiento alineado por byte para los operandos de origen y de destino y, cuando está en un segundo modo, la instrucción puede usar un direccionamiento alineado por 16 bytes para todos los operandos de origen y de destino.
La porción de modo de dirección del campo de modo de acceso/dirección 2026 puede determinar si la instrucción va a usar un direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se usa un modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos puede calcularse basándose en un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
Las instrucciones pueden agruparse basándose en los campos de bits del código de operación 2012 para simplificar la descodificación de código de operación 2040. Para un código de operación de<8>bits, los bits 4, 5 y<6>permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación de código de operación precisa mostrada es simplemente un ejemplo. Un grupo de código de operación de movimiento y de lógica 2042 puede incluir instrucciones de movimiento y de lógica de datos (por ejemplo, mover (mov), comparar (cmp)). El grupo de movimiento y de lógica 2042 puede compartir los cinco bits más significativos (MSB), donde las instrucciones de movimiento (mov) están en forma de 0000xxxxb y las instrucciones de lógica están en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 2044 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 2046 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, espera, envío) en forma de 0011xxxxb (por ejemplo, 0x30). Un grupo de instrucciones de cálculo matemático paralelo 2048 incluye instrucciones aritméticas a nivel de componente (por ejemplo, suma, multiplicación (mul)) en forma de 0100xxxxb (por ejemplo, 0x40). El grupo de cálculo matemático paralelo 2048 realiza las operaciones aritméticas en paralelo a través de canales de datos. El grupo de cálculo matemático vectorial 2050 incluye instrucciones aritméticas (por ejemplo, dp4) en forma de 0101xxxxb (por ejemplo, 0x50). El grupo de cálculo matemático vectorial realiza aritmética tal como cálculos de producto escalar sobre operandos de vectores. La descodificación de código de operación 2040 ilustrada, en una realización, puede usarse para determinar qué porción de una unidad de ejecución se usará para ejecutar una instrucción descodificada. Por ejemplo, algunas instrucciones pueden designarse como instrucciones sistólicas que serán realizadas por una matriz sistólica. Otras instrucciones, tales como instrucciones de trazado de rayos (no mostradas), pueden encaminarse a un núcleo de trazado de rayos o a una lógica de trazado de rayos dentro de un segmento o subdivisión de la lógica de ejecución.
Canalización de gráficos
La Figura 21 es un diagrama de bloques del procesador de gráficos 2100 de acuerdo con otra realización. Los elementos de la Figura 21 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa.
El procesador de gráficos 2100 puede incluir diferentes tipos de canalizaciones de procesamiento de gráficos, tales como una canalización de geometría 2120, una canalización de medios 2130, un motor de visualización 2140, una lógica de ejecución de hilos 2150 y una canalización de salida de representación 2170. El procesador de gráficos 2100 puede ser un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos puede ser controlado por escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 2100 mediante una interconexión en anillo 2102. La interconexión de anillo 2102 puede acoplar el procesador de gráficos<2 1 0 0>a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de propósito general. Los comandos desde la interconexión en anillo 2102 son interpretados por un transmisor por flujo continuo de comandos 2103, que suministra instrucciones a componentes individuales de la canalización de geometría<2 1 2 0>o la canalización de medios 2130.
El transmisor por flujo continuo de comandos 2103 puede dirigir la operación de un extractor de vértices 2105 que lee datos de vértice desde memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor por flujo continuo de comandos 2103. El extractor de vértices 2105 puede proporcionar datos de vértice a un sombreador de vértices 2107, que realiza operaciones de transformación y de iluminación de espacio de coordenadas en cada vértice. El extractor de vértices 2105 y el sombreador de vértices 2107 pueden ejecutar instrucciones de procesamiento de vértices despachando hilos de ejecución a las unidades de ejecución 2152A-2152B mediante un despachador de hilos 2131.
Las unidades de ejecución 2152A-2152B pueden ser una matriz de procesadores vectoriales que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. Las unidades de ejecución 2152A-2152B pueden tener una caché de L1 2151 unida que es específica para cada matriz o se comparte entre las matrices. La caché puede configurarse como una caché de datos, una caché de instrucciones o una única caché que se subdivide para contener datos e instrucciones en diferentes subdivisiones.
Una canalización de geometría 2120 puede incluir componentes de teselación para realizar una teselación acelerada por hardware de objetos 3D. Un sombreador de casco programable 2111 puede configurar las operaciones de teselación. Un sombreador de dominio programable 2117 puede proporcionar una evaluación de extremo posterior de la salida de teselación. Un teselador 2113 puede operar en la dirección del sombreador de casco 2111 y contener una lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico grueso que se proporciona como entrada a la canalización de geometría 2120. Además, si no se usa la teselación, pueden sortearse los componentes de teselación (por ejemplo, el sombreador de casco<2 1 1 1>, el teselador 2113 y el sombreador de dominio 2117).
Objetos geométricos completos pueden ser procesados por un sombreador de geometría 2119 mediante uno o más hilos despachados a las unidades de ejecución 2152A-2152B, o puede avanzar directamente al recortador 2129. El sombreador de geometría puede operar sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en fases previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 2119 recibe una entrada desde el sombreador de vértices 2107. El sombreador de geometría 2119 puede programarse mediante un programa de sombreado de geometría para realizar una teselación de geometría si se deshabilitan las unidades de teselación.
Antes de la rasterización, un recortador 2129 procesa datos de vértice. El recortador 2129 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y de sombreador de geometría. Un componente de rasterizador y prueba de profundidad 2173 en la canalización de salida de representación 2170 puede despachar sombreadores de píxeles para convertir los objetos geométricos en sus representaciones por píxel. La lógica de sombreador de píxeles puede incluirse en la lógica de ejecución de hilos 2150. Opcionalmente, una aplicación puede sortear el componente de rasterizador y prueba de profundidad 2173 y acceder a datos de vértice sin rasterizar mediante una unidad de salida de flujo 2123.
El procesador de gráficos 2100 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y de mensajes entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 2152A-2152B y las unidades de lógica asociadas (por ejemplo, la caché de L1 2151, el muestreador 2154, la caché de textura 2158, etc.) se interconectan mediante un puerto de datos 2156 para realizar el acceso de memoria y comunicarse con los componentes de canalización de salida de representación del procesador. Un muestreador 2154, las cachés 2151, 2158 y las unidades de ejecución 2152A-2152B pueden tener, cada uno, rutas de acceso de memoria separadas. Opcionalmente, la caché de textura 2158 también puede configurarse como una caché de muestreador.
La canalización de salida de representación 2170 puede contener un componente de rasterizador y prueba de profundidad 2173 que convierte objetos basados en vértices en una representación basada en píxeles asociada. La lógica de rasterizador puede incluir una unidad generadora de ventanas/enmascaradora para realizar una rasterización de líneas y de triángulos de función fija. Una caché de representación 2178 y una caché de profundidad 2179 asociadas también están disponibles en algunas realizaciones. Un componente de operaciones de píxel 2177 realiza operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) son realizadas por el motor 2D 2141, o son sustituidas en el momento de la visualización por el controlador de visualización 2143 usando planos de visualización de superposición. Una caché de L3 compartida 2175 puede estar para todos los componentes de gráficos, permitiendo la compartición de datos sin el uso de memoria de sistema principal.
La canalización de medios de procesador de gráficos 2130 puede incluir un motor de medios 2137 y un extremo frontal de vídeo 2134. El extremo frontal de vídeo 2134 puede recibir comandos de canalización desde el transmisor por flujo continuo de comandos 2103. La canalización de medios 2130 puede incluir un transmisor por flujo continuo de comandos separado. El extremo frontal de vídeo 2134 puede procesar comandos de medios antes de enviar el comando al motor de medios 2137. El motor de medios 2137 puede incluir una funcionalidad de generación de hilos para generar hilos para despacharlos a la lógica de ejecución de hilos 2150 mediante el despachador de hilos 2131.
El procesador de gráficos 2100 puede incluir un motor de visualización 2140. Este motor de visualización 2140 puede ser externo al procesador<2 1 0 0>y puede acoplarse con el procesador de gráficos mediante la interconexión en anillo 2102, o algún otro bus o tejido de interconexión. El motor de visualización 2140 puede incluir un motor 2D 2141 y un controlador de visualización 2143. El motor de visualización 2140 puede contener una lógica de propósito especial capaz de operar independientemente de la canalización 3D. El controlador de visualización 2143 puede acoplarse con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en sistema, como en un ordenador portátil, o un dispositivo de visualización externo unido mediante un conector de dispositivo de visualización.
La canalización de geometría 2120 y la canalización de medios 2130 pueden configurarse para realizar operaciones basándose en múltiples interfaces de programación de gráficos y de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API) concreta. El software de controlador para el procesador de gráficos puede traducir llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. Puede proporcionarse soporte para la Biblioteca de Gráficos Abierta (OpenGL), el Lenguaje Informático Abierto (OpenCL) y/o API de gráficos y de cálculo Vulkan, todas ellas de Khronos Group. También puede proporcionarse soporte para la biblioteca Direct3D de Microsoft Corporation. Puede soportarse una combinación de estas bibliotecas. También puede proporcionarse soporte para la Biblioteca de Visión Informática de Código Abierto (OpenCV). También se soportaría una API futura con una canalización 3D compatible si puede hacerse un mapeo desde la canalización de la API futura a la canalización del procesador de gráficos.
Programación de canalización de gráficos
La Figura 22A es un diagrama de bloques que ilustra un formato de comando de procesador de gráficos 2200 usado para programar canalizaciones de procesamiento de gráficos, tales como, por ejemplo, las canalizaciones descritas en el presente documento junto con las Figuras 16A, 17, 21. La Figura 22B es un diagrama de bloques que ilustra una secuencia de comandos de procesador de gráficos 2210 de acuerdo con una realización. Los recuadros con línea continua en la Figura 22A ilustran los componentes que se incluyen, en general, en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador de gráficos 2200 ilustrativo de la Figura 22A incluye campos de datos para identificar un cliente 2202, un código de operación (código de op.) de comando 2204 y unos datos 2206 para el comando. También se incluyen un subcódigo de operación 2205 y un tamaño de comando 2208 en algunos comandos.
El cliente 2202 puede especificar la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. Un analizador de comandos de procesador de gráficos puede examinar el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. Las unidades de cliente de procesador de gráficos pueden incluir una unidad de interfaz de memoria, una unidad de representación, una unidad 2D, una unidad 3D y una unidad de medios. Cada unidad de cliente puede tener una canalización de procesamiento correspondiente que procesa los comandos. Una vez que el comando ha sido recibido por la unidad de cliente, la unidad de cliente lee el código de operación 2204 y, si está presente, el subcódigo de operación 2205 para determinar la operación a realizar. La unidad de cliente realiza el comando usando información en el campo de datos 2206. Para algunos comandos, se espera que un tamaño de comando explícito 2208 especifique el tamaño del comando. El analizador de comandos puede determinar automáticamente el tamaño de al menos algunos de los comandos basándose en el código de operación de comando. Los comandos pueden alinearse mediante múltiplos de una palabra doble. También pueden usarse otros formatos de comando.
El diagrama de flujo en la Figura 22B ilustra una secuencia de comandos de procesador de gráficos 2210 ilustrativa. El software o firmware de un sistema de procesamiento de datos que cuenta con un procesador de gráficos ilustrativo puede usar una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra y se describe una secuencia de comandos de muestra solo con fines de ejemplo, y no se limita a este comando específico o a esta secuencia de comandos. Además, los comandos pueden emitirse como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos de manera al menos parcialmente concurrente.
La secuencia de comandos de procesador de gráficos 2210 puede comenzar con un comando de vaciado de canalización<2 2 1 2>para hacer que cualquier canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. Opcionalmente, la canalización 3D 2222 y la canalización de medios 2224 pueden no operar de manera concurrente. El vaciado de canalización se realiza para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de canalización, el analizador de comandos para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las cachés de lectura relevantes. Opcionalmente, cualquier dato en la caché de representación que se marque como 'sucio' puede vaciarse a memoria. El comando de vaciado de canalización<2 2 1 2>puede usarse para la sincronización de canalización o antes de poner el procesador de gráficos en un estado de baja potencia.
Puede usarse un comando de selección de canalización 2213 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre canalizaciones. Puede requerirse un comando de selección de canalización 2213 solo una vez dentro de un contexto de ejecución antes de emitir comandos de canalización, a menos que el contexto sea para emitir comandos para ambas canalizaciones. Puede requerirse un comando de vaciado de canalización<2 2 1 2>inmediatamente antes de una conmutación de canalización mediante el comando de selección de canalización 2213.
Un comando de control de canalización 2214 puede configurar una canalización de gráficos para la operación y puede usarse para programar la canalización 3D 2222 y la canalización de medios 2224. El comando de control de canalización 2214 puede configurar el estado de canalización para la canalización activa. El comando de control de canalización 2214 puede usarse para la sincronización de canalización y para limpiar datos de una o más memorias caché dentro de la canalización activa antes de procesar un lote de comandos.
Los comandos de estado de memoria intermedia de retorno 2216 pueden usarse para configurar un conjunto de memorias intermedias de retorno para que las canalizaciones respectivas escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o más memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. El procesador de gráficos también puede usar una o más memorias intermedias de retorno para almacenar datos de salida y para realizar una comunicación entre hilos. El estado de memoria intermedia de retorno 2216 puede incluir seleccionar el tamaño y el número de memorias intermedias de retorno que usar para un conjunto de operaciones de canalización.
Los comandos restantes en la secuencia de comandos difieren basándose en la canalización activa para las operaciones. Basándose en una determinación de canalización 2220, la secuencia de comandos se adapta a la canalización 3D 2222 comenzando con el estado de canalización 3D 2230, o a la canalización de medios 2224 comenzando en el estado de canalización de medios 2240.
Los comandos para configurar el estado de canalización 3D 2230 incluyen comandos de ajuste de estado 3D para estado de memoria intermedia de vértice, estado de elemento de vértice, estado de color constante, estado de memoria intermedia de profundidad y otras variables de estado que han de configurarse antes de que se procesen los comandos de primitiva 3D. Los valores de estos comandos se determinan, al menos en parte, basándose en la API 3D particular en uso. Los comandos del estado de canalización 3D 2230 también pueden ser capaces de deshabilitar o sortear selectivamente ciertos elementos de canalización si no van a usarse esos elementos.
Un comando de la primitiva 3D 2232 puede usarse para enviar primitivas 3D para que sean procesadas por la canalización 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de la primitiva 3D 2232 se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices usa los datos de comando de la primitiva 3D 2232 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. El comando de la primitiva 3D 2232 puede usarse para realizar operaciones de vértice sobre primitivas 3D mediante sombreadores de vértices. Para procesar sombreadores de vértices, la canalización 3D 2222 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
La canalización 3D 2222 puede desencadenarse mediante un evento o comando de ejecución 2234. Una escritura de registro puede desencadenar ejecuciones de comando. Una ejecución puede desencadenarse mediante un comando 'ir' o 'poner en marcha' en la secuencia de comandos. La ejecución de comando puede desencadenarse usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que se han completado las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles da color a los píxeles resultantes. También pueden incluirse comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para esas operaciones.
La secuencia de comandos de procesador de gráficos 2210 puede seguir la ruta de la canalización de medios 2224 cuando se realizan operaciones de medios. En general, el uso específico y manera específicos de la programación para la canalización de medios 2224 depende de las operaciones de medios o de cálculo a realizar. Operaciones de descodificación de medios específicas pueden descargarse a la canalización de medios durante la descodificación de medios. La canalización de medios también puede sortearse y la descodificación de medios puede realizarse, en su totalidad o en parte, usando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. La canalización de medios también puede incluir elementos para operaciones de unidad de procesador de gráficos de propósito general (GPGPU), donde el procesador de gráficos se usa para realizar operaciones vectoriales de SIMD usando programas de sombreado computacional que no están relacionados explícitamente con la representación de primitivas de gráficos.
La canalización de medios 2224 puede configurarse de una manera similar a la de la canalización 3D 2222. Un conjunto de comandos para configurar el estado de canalización de medios 2240 se despachan o se colocan en una cola de comandos antes de los comandos de objeto de medios 2242. Los comandos para el estado de canalización de medios 2240 pueden incluir datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de descodificación de vídeo y de codificación de vídeo dentro de la canalización de medios, tal como el formato de codificación o de descodificación. Los comandos para el estado de canalización de medios 2240 también pueden soportar el uso de uno o más punteros a elementos de estado "indirectos" que contienen un lote de ajustes de estado.
Los comandos de objeto de medios 2242 pueden suministrar punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias de memoria que contienen datos de vídeo a procesar. Opcionalmente, todos los estados de canalización de medios han de ser válidos antes de emitir un comando de objeto de medios 2242. Una vez que se ha configurado el estado de canalización y los comandos de objeto de medios 2242 se han puesto en cola, la canalización de medios 2224 se desencadena mediante un comando de ejecución 2244 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida desde la canalización de medios 2224 puede post-procesarse, a continuación, mediante operaciones proporcionadas por la canalización 3D 2222 o la canalización de medios 2224. Las operaciones de GPGPU pueden configurarse y ejecutarse de una manera similar a la de las operaciones de medios.
Arquitectura de software de gráficos
La Figura 23 ilustra una arquitectura de software de gráficos ilustrativa para un sistema de procesamiento 2300. Una arquitectura de software de este tipo puede incluir una aplicación de gráficos 3D 2310, un sistema operativo 2320 y al menos un procesador 2330. El procesador 2330 puede incluir un procesador de gráficos 2332 y uno o más núcleo(s) de procesador de propósito general 2334. El procesador 2330 puede ser una variante del procesador 1402 o cualquier otro de los procesadores descritos en el presente documento. El procesador 2330 puede usarse en lugar del procesador 1402 o cualquier otro de los procesadores descritos en el presente documento. Por lo tanto, la divulgación de cualquier característica en combinación con el procesador 1402 o cualquier otro de los procesadores descritos en el presente documento también divulga una combinación correspondiente con el procesador de gráficos 2330, pero no se limita a tal cosa. Además, los elementos de la Figura 23 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa. La aplicación de gráficos 2310 y el sistema operativo 2320 se ejecutan, cada uno, en la memoria de sistema 2350 del sistema de procesamiento de datos.
La aplicación de gráficos 3D 2310 puede contener uno o más programas de sombreado que incluyen las instrucciones de sombreador 2312. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el lenguaje de sombreador de alto nivel (HLSL) de Direct3D o el lenguaje de sombreador de OpenGL (GLSL) y así sucesivamente. La aplicación también puede incluir las instrucciones ejecutables 2314 en un lenguaje máquina adecuado para su ejecución por el núcleo de procesador de propósito general 2334. La aplicación también puede incluir los objetos de gráficos 2316 definidos por datos de vértice.
El sistema operativo 2320 puede ser un sistema operativo Microsoft® Windows® de Microsoft Corporation, un sistema operativo de tipo UNIX de propiedad exclusiva o un sistema operativo de tipo UNIX de código abierto que usa una variante del núcleo de Linux. El sistema operativo 2320 puede soportar una API de gráficos 2322 tal como la API de Direct3D, la API de OpenGL o la API de Vulkan. Cuando está en uso la API de Direct3D, el sistema operativo 2320 usa un compilador de sombreador de extremo frontal 2324 para compilar cualquier instrucción de sombreador 2312 en HLSL a un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede realizar una precompilación de sombreador. Los sombreadores de alto nivel pueden compilarse a sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 2310. Las instrucciones de sombreador 2312 pueden proporcionarse en una forma intermedia, tal como una versión de la representación intermedia portátil convencional (SPIR) usada por la API de Vulkan.
El controlador de gráficos de modo de usuario 2326 puede contener un compilador de sombreador de extremo posterior 2327 para convertir las instrucciones de sombreador 2312 en una representación específica de hardware. Cuando está en uso la API de OpenGL, las instrucciones de sombreador 2312 en el lenguaje de alto nivel GLSL se pasan a un controlador de gráficos de modo de usuario 2326 para su compilación. El controlador de gráficos de modo de usuario 2326 puede usar las funciones de modo de núcleo de sistema operativo 2328 para comunicarse con un controlador de gráficos de modo de núcleo 2329. El controlador de gráficos de modo de núcleo 2329 puede comunicarse con el procesador de gráficos 2332 para despachar comandos e instrucciones.
Implementaciones de núcleo de IP
Uno o más aspectos pueden implementarse mediante un código representativo almacenado en un medio legible por máquina que representa y/o define una lógica dentro de un circuito integrado tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan una lógica diversa dentro del procesador. Cuando son leídas por una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en el presente documento. Tales representaciones, conocidas como "núcleos de IP", son unidades reutilizables de lógica para un circuito integrado que pueden almacenarse en un medio legible por máquina tangible como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado puede fabricarse de manera que el circuito realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
La Figura 24A es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP 2400 que puede usarse para fabricar un circuito integrado para realizar operaciones de acuerdo con una realización. El sistema de desarrollo de núcleo de IP 2400 puede usarse para generar diseños reutilizables modulares que pueden incorporarse en un diseño más grande o usarse para construir todo un circuito integrado (por ejemplo, un circuito integrado de SoC). Una instalación de diseño 2430 puede generar una simulación de software 2410 de un diseño de núcleo de IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). El software de simulación 2410 puede usarse para diseñar, someter a prueba y verificar el comportamiento del núcleo de IP usando un modelo de simulación 2412. El modelo de simulación 2412 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Puede crearse o sintetizarse, a continuación, un diseño de nivel de transferencia de registro (RTL) 2415 a partir del modelo de simulación 2412. El diseño de RTL 2415 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada realizada usando las señales digitales modeladas. Además de un diseño de RTL 2415, también pueden crearse, diseñarse o sintetizarse diseños de nivel inferior a nivel de lógica o a nivel de transistores. Por lo tanto, los detalles particulares del diseño y simulación inicial pueden variar.
El diseño de RTL 2415, o un equivalente, puede ser sintetizado adicionalmente por la instalación de diseño para dar un modelo de hardware 2420, que puede estar en un lenguaje de descripción de hardware (HDL) o alguna otra representación de datos de diseño físico. El HDL puede simularse o someterse a prueba adicionalmente para verificar el diseño de núcleo de IP. El diseño de núcleo de IP puede almacenarse para su entrega a una instalación de fabricación de terceros 2465 usando la memoria no volátil 2440 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo de IP puede transmitirse (por ejemplo, mediante Internet) a través de una conexión cableada 2450 o una conexión inalámbrica 2460. La instalación de fabricación 2465 puede fabricar, a continuación, un circuito integrado que se basa, al menos en parte, en el diseño de núcleo de IP. El circuito integrado fabricado puede configurarse para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
La Figura 24B ilustra una vista lateral en sección transversal de un conjunto de paquete de circuito integrado 2470. El conjunto de paquete de circuito integrado 2470 ilustra una implementación de uno o más dispositivos procesadores o aceleradores como se describe en el presente documento. El conjunto de paquete 2470 incluye múltiples unidades de la lógica de hardware 2472, 2474 conectadas a un sustrato 2480. La lógica 2472, 2474 puede implementarse al menos parcialmente en hardware de lógica configurable o lógica de funcionalidad fija, y puede incluir una o más porciones de cualquiera del/de los núcleo(s) de procesador, procesador(es) de gráficos u otros dispositivos aceleradores descritos en el presente documento. Cada unidad de lógica 2472, 2474 puede implementarse dentro de una pastilla de semiconductores y acoplarse con el sustrato 2480 mediante una estructura de interconexión 2473. La estructura de interconexión 2473 puede configurarse para encaminar señales eléctricas entre la lógica 2472, 2474 y el sustrato 2480, y puede incluir interconexiones tales como, pero sin limitación, protuberancias o pilares. La estructura de interconexión 2473 puede configurarse para encaminar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de masa asociadas con la operación de la lógica 2472, 2474. Opcionalmente, el sustrato 2480 puede ser un sustrato laminado a base de resina epoxídica. El sustrato 2480 también puede incluir otros tipos adecuados de sustratos. El conjunto de paquete 2470 puede conectarse a otros dispositivos eléctricos mediante una interconexión de paquete 2483. La interconexión de paquete 2483 puede acoplarse a una superficie del sustrato 2480 para encaminar señales eléctricas a otros dispositivos eléctricos, tales como una placa base, otro conjunto de chips o un módulo de múltiples chips.
Las unidades de lógica 2472, 2474 pueden acoplarse eléctricamente con un puente 2482 que está configurado para encaminar señales eléctricas entre la lógica 2472, 2474. El puente 2482 puede ser una estructura de interconexión densa que proporciona una ruta para señales eléctricas. El puente 2482 puede incluir un sustrato de puente compuesto de vidrio o un material semiconductor adecuado. Pueden formarse características de encaminamiento eléctrico sobre el sustrato de puente para proporcionar una conexión de chip a chip entre la lógica 2472, 2474.
Aunque se ilustran dos unidades de lógica 2472, 2474 y un puente 2482, las realizaciones descritas en el presente documento pueden incluir más o menos unidades de lógica en una o más pastillas. Las una o más pastillas pueden conectarse mediante cero o más puentes, debido a que el puente 2482 puede excluirse cuando la lógica se incluye en una única pastilla. Como alternativa, múltiples pastillas o unidades de lógica pueden conectarse mediante uno o más puentes. Adicionalmente, múltiples unidades de lógica, pastillas y puentes pueden conectarse entre sí en otras configuraciones posibles, incluyendo configuraciones tridimensionales.
La Figura 24C ilustra un conjunto de paquete 2490 que incluye múltiples unidades de chiplets de lógica de hardware conectados a un sustrato 2480 (por ejemplo, una pastilla base). Una unidad de procesamiento de gráficos, un procesador paralelo y/o un acelerador de cálculo como se describe en el presente documento pueden componerse a partir de diversos chiplets de silicio que se fabrican por separado. En este contexto, un chiplet es un circuito integrado al menos parcialmente empaquetado que incluye distintas unidades de lógica que pueden ensamblarse con otros chiplets en un paquete más grande. Un conjunto diverso de chiplets con diferente lógica de núcleo de IP puede ensamblarse en un único dispositivo. Adicionalmente, los chiplets pueden integrarse en una pastilla base o un chiplet base usando tecnología de intercalación activa. Los conceptos descritos en el presente documento posibilitan la interconexión y comunicación entre las diferentes formas de IP dentro de la GPU. Los núcleos de IP pueden fabricarse usando diferentes tecnologías de proceso y componerse durante la fabricación, lo que evita la complejidad de hacer converger múltiples IP, especialmente en un SoC grande con varias clases de IP, al mismo proceso de fabricación. Posibilitar el uso de múltiples tecnologías de proceso mejora el tiempo de comercialización y proporciona una forma rentable de crear múltiples SKU de producto. Adicionalmente, las IP desagregadas son más susceptibles de ser controladas por alimentación de forma independiente, los componentes que no están en uso en una carga de trabajo determinada pueden apagarse, reduciendo el consumo de energía global.
Los chiplets de lógica de hardware pueden incluir los chiplets de lógica de hardware de propósito especial 2472, los chiplets de lógica o de E/S 2474 y/o los chiplets de memoria 2475. Los chiplets de lógica de hardware 2472 y los chiplets de lógica o de E/S 2474 pueden implementarse al menos parcialmente en hardware de lógica configurable o de lógica de funcionalidad fija y pueden incluir una o más porciones de cualquiera del/de los núcleo(s) de procesador, procesador(es) de gráficos, procesadores paralelos u otros dispositivos aceleradores descritos en el presente documento. Los chiplets de memoria 2475 pueden ser memoria DRAM (por ejemplo, GDDR, HBM) o memoria caché (SRAM).
Cada chiplet puede fabricarse como una pastilla de semiconductores separada y acoplarse con el sustrato 2480 mediante una estructura de interconexión 2473. La estructura de interconexión 2473 puede configurarse para encaminar señales eléctricas entre los diversos chiplets y lógica dentro del sustrato 2480. La estructura de interconexión 2473 puede incluir interconexiones tales como, pero sin limitación, protuberancias o pilares. En algunas realizaciones, la estructura de interconexión 2473 puede configurarse para encaminar señales eléctricas tales como, por ejemplo, señales de entrada/salida (E/S) y/o señales de alimentación o de masa asociadas con la operación de los chiplets de lógica, de E/S y de memoria.
El sustrato 2480 puede ser un sustrato laminado a base de resina epoxídica; sin embargo, no se limita a eso y el sustrato 2480 también puede incluir otros tipos adecuados de sustratos. El conjunto de paquete 2490 puede conectarse a otros dispositivos eléctricos mediante una interconexión de paquete 2483. La interconexión de paquete 2483 puede acoplarse a una superficie del sustrato 2480 para encaminar señales eléctricas a otros dispositivos eléctricos, tales como una placa base, otro conjunto de chips o un módulo de múltiples chips.
Un chiplet de lógica o de E/S 2474 y un chiplet de memoria 2475 pueden acoplarse eléctricamente mediante un puente 2487 que está configurado para encaminar señales eléctricas entre el chiplet de lógica o de E/S 2474 y un chiplet de memoria 2475. El puente 2487 puede ser una estructura de interconexión densa que proporciona una ruta para señales eléctricas. El puente 2487 puede incluir un sustrato de puente compuesto de vidrio o un material semiconductor adecuado. Pueden formarse características de encaminamiento eléctrico sobre el sustrato de puente para proporcionar una conexión de chip a chip entre el chiplet de lógica o de E/S 2474 y un chiplet de memoria 2475. El puente 2487 también puede denominarse puente de silicio o puente de interconexión. Por ejemplo, el puente 2487 es un puente de interconexión de múltiples pastillas integrado (EMIB). Como alternativa, el puente 2487 puede ser simplemente una conexión directa de un chiplet a otro chiplet.
El sustrato 2480 puede incluir componentes de hardware para la E/S 2491, la memoria caché 2492 y otra lógica de hardware 2493. Un tejido 2485 puede integrarse en el sustrato 2480 para posibilitar la comunicación entre los diversos chiplets de lógica y la lógica 2491,2493 dentro del sustrato 2480. Opcionalmente, la E/S 2491, el tejido 2485, la caché, el puente y otra lógica de hardware 2493 pueden integrarse en una pastilla base que se dispone en capas encima del sustrato 2480. El tejido 2485 puede ser una red en una interconexión de chip u otra forma de tejido conmutada por paquetes que conmuta paquetes de datos entre componentes del conjunto de paquete.
Además, un conjunto de paquete 2490 también puede incluir un número menor o mayor de componentes y chiplets que se interconectan mediante un tejido 2485 o uno o más puentes 2487. Los chiplets dentro del conjunto de paquete 2490 pueden disponerse en una disposición 3D o 2,5D. En general, pueden usarse estructuras de puente 2487 para facilitar una interconexión de punto a punto entre, por ejemplo, chiplets de lógica o de E/S y chiplets de memoria. El tejido 2485 puede usarse para interconectar los diversos chiplets de lógica y/o de E/S (por ejemplo, los chiplets 2472, 2474, 2491, 2493) con otros chiplets de lógica y/o de E/S. La memoria caché 2492 dentro del sustrato puede actuar como una memoria caché global para el conjunto de paquete 2490, parte de una caché global distribuida o como una caché dedicada para el tejido 2485.
La Figura 24D ilustra un conjunto de paquete 2494 que incluye los chiplets intercambiables 2495, de acuerdo con una realización. Los chiplets intercambiables 2495 pueden ensamblarse en ranuras normalizadas en uno o más chiplets base 2496, 2498. Los chiplets base 2496, 2498 pueden acoplarse mediante una interconexión de puente 2497, que puede ser similar a las otras interconexiones de puente descritas en el presente documento y puede ser, por ejemplo, un EMIB. Los chiplets de memoria también pueden conectarse a chips de lógica o de E/S mediante una interconexión de puente. Los chiplets de E/S y de lógica pueden comunicarse mediante un tejido de interconexión. Cada uno de los chiplets base puede soportar una o más ranuras en un formato normalizado para una de lógica o E/S o memoria/caché.
La SRAM y los circuitos de entrega de alimentación pueden fabricarse en uno o más de los chiplets base 2496, 2498, que pueden fabricarse usando una tecnología de proceso diferente en relación con los chiplets intercambiables 2495 que se apilan encima de los chiplets base. Por ejemplo, los chiplets base 2496, 2498 pueden fabricarse usando una tecnología de proceso más grande, mientras que los chiplets intercambiables pueden fabricarse usando una tecnología de proceso más pequeña. Uno o más de los chiplets intercambiables 2495 pueden ser chiplets de memoria (por ejemplo, DRAM). Pueden seleccionarse diferentes densidades de memoria para el conjunto de paquete 2494 basándose en la potencia y/o el rendimiento objetivo del producto que usa el conjunto de paquete 2494. Adicionalmente, pueden seleccionarse chiplets de lógica con un número diferente de tipo de unidades funcionales en el momento del ensamblaje basándose en la potencia y/o el rendimiento objetivo para el producto. Adicionalmente, chiplets que contienen núcleos de lógica de IP de diferentes tipos pueden insertarse en las ranuras de chiplets intercambiables, posibilitando diseños de procesadores híbridos que pueden mezclar y emparejar bloques de IP de diferentes tecnologías.
Circuito integrado de sistema en un chip ilustrativo
Las Figuras 25-26 ilustran circuitos integrados ilustrativos y procesadores de gráficos asociados que pueden fabricarse usando uno o más núcleos de IP. Además de lo que se ilustra, pueden incluirse otros circuitos y lógica, incluyendo procesadores/núcleos de gráficos adicionales, controladores de interfaz de periféricos o núcleos de procesador de propósito general. Los elementos de las Figuras 25-26 que tienen los mismos nombres que o similares a los elementos de cualquier otra figura en el presente documento describen los mismos elementos que en las otras figuras, pueden operar o funcionar de una manera similar a esa, pueden comprender los mismos componentes y pueden vincularse a otras entidades, como las descritas en cualquier otra parte en el presente documento, pero no se limitan a tal cosa.
La Figura 25 es un diagrama de bloques que ilustra un circuito integrado de sistema en un chip 2500 ilustrativo que puede fabricarse usando uno o más núcleos de IP. El circuito integrado 2500 ilustrativo incluye uno o más procesador(es) de aplicaciones 2505 (por ejemplo, CPU), al menos un procesador de gráficos 2510, que puede ser una variante del procesador de gráficos 1408, 1508, 2510 o de cualquier procesador de gráficos descrito en el presente documento y puede usarse en lugar de cualquier procesador de gráficos descrito. Por lo tanto, la divulgación de cualquier característica en combinación con un procesador de gráficos en el presente documento también divulga una combinación correspondiente con el procesador de gráficos 2510, pero no se limita a tal cosa. El circuito integrado 2500 puede incluir adicionalmente un procesador de imágenes 2515 y/o un procesador de vídeo 2520, cualquiera de los cuales puede ser un núcleo de IP modular procedente de las mismas instalaciones de diseño o de múltiples instalaciones de diseño diferentes. El circuito integrado 2500 puede incluir lógica de bus o de periféricos que incluye un controlador de USB 2525, un controlador de UART 2530, un controlador de SPI/SDIO 2535 y un controlador de I<2>S/I2C 2540. Adicionalmente, el circuito integrado puede incluir un dispositivo de visualización 2545 acoplado a uno o más de un controlador de interfaz multimedios de alta definición (HDMI) 2550 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 2555. El almacenamiento puede ser proporcionado por un subsistema de memoria flash 2560 que incluye memoria flash y un controlador de memoria flash. La interfaz de memoria puede proporcionarse mediante un controlador de memoria 2565 para el acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 2570.
Las Figuras 26A-26B son diagramas de bloques que ilustran procesadores de gráficos ilustrativos para su uso dentro de un SoC, de acuerdo con realizaciones descritas en el presente documento. Los procesadores de gráficos pueden ser variantes del procesador de gráficos 1408, 1508, 2510, o cualquier otro de procesador de gráficos descrito en el presente documento. Los procesadores de gráficos pueden usarse en lugar del procesador de gráficos 1408, 1508, 2510, o cualquier otro de los procesadores de gráficos descritos en el presente documento. Por lo tanto, la divulgación de cualquier característica en combinación con el procesador de gráficos 1408, 1508, 2510 o cualquier otro de los procesadores de gráficos descritos en el presente documento también divulga una combinación correspondiente con los procesadores de gráficos de las Figuras 26A-26B, pero no se limita a tal cosa. La Figura 26A ilustra un procesador de gráficos 2610 ilustrativo de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. La Figura 26B ilustra un procesador de gráficos 2640 ilustrativo adicional de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El procesador de gráficos 2610 de la Figura 26A es un ejemplo de un núcleo de procesador de gráficos de baja potencia. El procesador de gráficos 2640 de la Figura 26B es un ejemplo de un núcleo de procesador de gráficos de rendimiento superior. Por ejemplo, cada uno de los procesadores de gráficos 2610, 2640 puede ser una variante del procesador de gráficos 2510 de la Figura 25, como se ha mencionado al principio de este párrafo.
Como se muestra en la Figura 26A, el procesador de gráficos 2610 incluye un procesador de vértices 2605 y uno o más procesador(es) de fragmentos 2615A-2615N (por ejemplo, 2615A,<2 6 1>5B, 2615C, 2615D a 2615N-1, y 2615N). El procesador de gráficos 2610 puede ejecutar diferentes programas de sombreado mediante lógica separada, de manera que el procesador de vértices 2605 se optimiza para ejecutar operaciones para programas de sombreado de vértices, mientras que el/los uno o más procesador(es) de fragmentos 2615A-2615N ejecuta(n) operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreado de fragmentos o de píxeles. El procesador de vértices 2605 realiza la fase de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértice. El/los procesador(es) de fragmentos 2615A-2615N usa(n) los datos de primitiva y de vértice generados por el procesador de vértices 2605 para producir una memoria intermedia de fotogramas que se visualiza en un dispositivo de visualización. El/los procesador(es) de fragmentos 2615A-2615N puede(n) optimizarse para ejecutar programas de sombreado de fragmentos según lo previsto en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa de sombreado de píxeles según lo previsto en la API de Direct 3D.
El procesador de gráficos 2610 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 2620A-2620B, caché(s) 2625A-2625B e interconexión(es) de circuito 2630A-2630B. La(s) una o más MMU 2620A-2620B prevé(n) un mapeo de dirección virtual a física para el procesador de gráficos 2610, incluyendo para el procesador de vértices 2605 y/o el/los procesador(es) de fragmentos 2615A-2615N, que pueden hacer referencia a datos de vértice o de imagen/textura almacenados en memoria, además de datos de vértice o de imagen/textura almacenados en la(s) una o más caché(s) 2625A-2625B. La una o más MMU 2620A-2620B pueden sincronizarse con otras MMU dentro del sistema, incluyendo una o más MMU asociadas con el/los uno o más procesadores de aplicaciones 2505, el procesador de imágenes 2515 y/o el procesador de vídeo 2520 de la Figura 25, de manera que cada procesador 2505-2520 puede participar en un sistema de memoria virtual compartida o unificada. Los componentes del procesador de gráficos 2610 pueden corresponder con componentes de otros procesadores de gráficos descritos en el presente documento. La(s) una o más MMU 2620A-2620B puede(n) corresponder con la MMU 245 de la Figura 2C. El procesador(es) de vértices 2605 y el procesador de fragmentos 2615A-2615N pueden corresponder con el multiprocesador de gráficos 234. La(s) una o más interconexión(es) de circuito 2630A-2630B posibilitan que el procesador de gráficos 2610 interaccione con otros núcleos de IP dentro del SoC, o bien mediante un bus interno del SoC o bien mediante una conexión directa, de acuerdo con realizaciones. La(s) una o más interconexión(es) de circuito 2630A-2630B puede(n) corresponder con la barra transversal de datos 240 de la Figura 2C. Puede encontrarse correspondencia adicional entre componentes análogos del procesador de gráficos 2610 y las diversas arquitecturas de procesador de gráficos descritas en el presente documento.
Como se muestra en la Figura 26B, el procesador de gráficos 2640 incluye la(s) una o más MMU 2620A-2620B, la(s) caché(s) 2625A-2625B y la(s) interconexión(es) de circuito 2630A-2630B del procesador de gráficos 2610 de la Figura 26A . El procesador de gráficos 2640 incluye uno o más núcleos de sombreador 2655A-2655N (por ejemplo, 2655A, 2655B, 2655C, 2655D, 2655E, 2655F a 2655N-1 y 2655N), lo que prevé una arquitectura de núcleo de sombreador unificada en la que un único núcleo o tipo o núcleo puede ejecutar todos los tipos de código de sombreado programable, incluyendo código de programa de sombreado para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cálculo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Adicionalmente, el procesador de gráficos 2640 incluye un gestor de tareas entre núcleos 2645, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 2655A-2655N y una unidad de teselación 2658 para acelerar las operaciones de teselación para una representación basada en teselas, en la que operaciones de representación para una escena se subdividen en el espacio de imágenes, por ejemplo, para aprovechar la coherencia espacial local dentro de una escena o para optimizar el uso de cachés internas. Los núcleos de sombreador 2655A-2655N pueden corresponder, por ejemplo, con el multiprocesador de gráficos 234 como en la Figura 2D, o los multiprocesadores de gráficos 325, 350 de la Figura 3A y 3B respectivamente, o el grupo de múltiples núcleos 365A de la Figura 3C.
Las tecnologías de procesamiento de gráficos descritas anteriormente pueden incluir tecnologías, sistemas, métodos y técnicas que permiten la reconfiguración dinámica de la memoria en una GPGPU. Una realización descrita en el presente documento permite la reconfiguración dinámica de las asignaciones de bancos de memoria caché basándose en estadísticas de hardware. Una realización permite la traducción de direcciones de memoria virtual usando páginas mixtas de cuatro kilobytes y 64 kilobytes dentro de la misma jerarquía de tabla de páginas y bajo el mismo directorio de páginas. Una realización proporciona una GPGPU y un sistema de procesamiento heterogéneo asociado que tiene regiones cercanas y lejanas del mismo nivel de una jerarquía de caché.
Reconfiguración dinámica de las asignaciones de bancos de memoria caché
La asignación de bancos de memoria caché para las cachés L1, L2 y L3 se realiza basándose en una función de troceo estática, que puede conducir a la aparición de puntos calientes, dando como resultado problemas de rendimiento. Se puede usar un monitor de hardware que detecta los puntos calientes de los bancos para recalcular una nueva función de troceo que permita cambiar las asignaciones de los bancos. Cuando se va a producir un cambio de función de troceo dentro de una caché, en primer lugar, se vacía la caché y, a continuación, se cambia la función de troceo usada para determinar las asignaciones de los bancos. A continuación, se puede recargar la caché con los datos almacenados previamente o se puede dejar que la caché se llene normalmente. En una realización, los cambios en la función de troceo del banco de memoria pueden aprovecharse de un vaciado de caché existente.
La Figura 27 ilustra un sistema de procesamiento 2700 que incluye una memoria caché en bancos 2708. El sistema de procesamiento 2700 incluye un recurso de procesamiento 2702, una unidad de carga/almacén 2704, un controlador de caché 2706, la memoria caché 2708 y la memoria 2720. El sistema de procesamiento 2700 ilustra una técnica en la que los datos que se almacenan en la memoria caché 2708 junto con una lectura o escritura en la memoria 2720 se asignan a uno o más bancos de memoria 2710A-2710N basándose en la lógica de función de troceo 2707. El uno o más bancos de memoria 2710A-2710N componen el medio de almacenamiento físico de la memoria caché 2708. La lógica de función de troceo 2707 puede aplicar una o más funciones de troceo a una dirección asociada con un acceso a memoria para determinar un banco 2710A-2710N en el que almacenar uno o más líneas de caché de datos.
La memoria caché 2708 puede ser cualquier memoria caché descrita en el presente documento, tal como, pero sin limitación, la caché L1248, 1554, la caché L21553, las memorias caché 272, 342, 358A-358B, 438, 708, 1404, 1504A-1504N, 1725, 2492, la caché de datos 1812, la caché L32175, o cualquier otra memoria caché descrita en el presente documento. La memoria caché 2708 puede ser también una combinación de memoria caché/memoria compartida, de una manera tal, pero sin limitación, a la memoria caché L1/memoria compartida 373 y/o la memoria compartida/memoria caché 1536.
El recurso de procesamiento 2702 representa un elemento de procesamiento (por ejemplo, núcleo de GPGPU, núcleo de trazado de rayos, núcleo de tensor, recurso de ejecución, unidad de ejecución (EU), procesador de flujo, multiprocesador de envío por flujo continuo (SM), multiprocesador de gráficos) asociado con un procesador de gráficos o a una estructura de procesador de gráficos (por ejemplo, unidad de procesamiento paralelo, motor de procesamiento de gráficos, grupo de múltiples núcleos, unidad de cálculo, unidad de cálculo de núcleo de gráficos siguiente) en una GPU como se describe en el presente documento. Por ejemplo, el recurso de procesamiento 2702 puede ser uno de los núcleos de GPGPU 262, o núcleos de tensor/trazado de rayos 263 del multiprocesador de gráficos 234; un núcleo de trazado de rayos 338A-338B, núcleo de tensor 337A-337B o núcleo de GPGPU 336A-336B del multiprocesador de gráficos 325; recursos de ejecución 356A-356D del multiprocesador de gráficos 350; uno de los núcleos de GFX 370, núcleos de tensor 371 o núcleos de trazado de rayos 372 de un grupo de múltiples núcleos 365A-365N; una de las unidades lógicas vectoriales 1563 o unidades lógicas escalares 1564 de una unidad de cálculo 1506A-1506N; unidad de ejecución con matriz de EU 1522A-1522F o matriz EU 1524A-1524F; una unidad de ejecución 1808A-1808N de la lógica de ejecución 1800; y/o unidad de ejecución 1900. El recurso de procesamiento 2702 también puede ser un recurso de ejecución dentro de, por ejemplo, un motor de procesamiento de gráficos 431-432, hardware de GPGPU 610, GPGPU 700, agrupación de procesamiento 706A-706H, GPGPU 806A-806D, GPGPU 1306, motor de procesamiento de gráficos 1610, agrupación de motor de procesamiento de gráficos 1622, y/o motor de procesamiento de gráficos 1710. El recurso de procesamiento 2702 también puede ser un recurso de procesamiento dentro del procesador de gráficos 2510, el procesador de gráficos 2610, y/o el procesador de gráficos 2640.
La unidad de carga/almacén 2704 puede ser cualquier unidad de carga/almacén descrita en el presente documento, tal como, pero sin limitación, la unidad de carga/almacén 266, la unidad de carga/almacén 340A-340B. La unidad de carga/almacén 2704 facilita el acceso a la memoria para el recurso de procesamiento 2702. Los accesos a la memoria pueden ser accesos con o sin caché. Los accesos a la memoria con caché atraviesan la memoria caché 2708, mientras que los accesos a la memoria sin caché pueden realizarse directamente a la memoria 2720, sin usar la memoria caché 2708 para almacenar datos escritos en la memoria 2720 o leídos de la memoria 2720.
El controlador de caché 2706 gestiona las líneas de caché en la memoria caché 2708 y copia datos a y desde la caché basándose en los accesos a la memoria con caché. El controlador de caché 2706 puede interceptar solicitudes de lectura y escritura de memoria antes de pasar las solicitudes al controlador de memoria asociado con la memoria 2720. El controlador de caché 2706 también puede gestionar operaciones asociadas con el protocolo de coherencia de caché en el que participa la memoria caché 2708.
En diversas configuraciones de caché, y dependiendo del tamaño de los bancos de memoria 2710A-2710N, una unidad de datos almacenados en caché (por ejemplo, línea de caché) puede almacenarse dentro de uno único de los bancos de memoria 2710A-2710N o puede abarcar múltiples bancos. El controlador de caché 2706 puede incluir lógica de función de troceo 2707 para aplicar una función de troceo de direcciones que puede usarse para determinar dónde ha de almacenarse una pieza de datos dada dentro de la memoria caché 2708. Por ejemplo, en una configuración, basándose en la dirección de memoria correspondiente a acceder, los datos asociados con el acceso a memoria pueden almacenarse en uno o más bancos de memoria 2710A-2710N basándose en la salida de la función de troceo usada por la lógica de función de troceo 2707. Cuando los datos asociados con un acceso a memoria pueden almacenarse dentro de un único banco, la función de troceo puede emitir un valor entre 0 y N, donde cada valor potencial entre 0 y N puede corresponder a uno de los bancos de memoria 2710A-2710N. Cuando los datos asociados con un acceso a memoria han de abarcar múltiples bancos de memoria 2710A-2710N, la lógica de función de troceo 2707 puede seleccionar múltiples bancos múltiples bancos de memoria 2710A-2710N en los que almacenar los datos.
Cuando las instrucciones ejecutadas por el recurso de procesamiento 2702 repiten el mismo patrón de acceso a memoria, puede accederse al mismo banco o conjunto de bancos frecuentemente por tales instrucciones. Estos accesos frecuentes pueden dar como resultado el desarrollo de puntos calientes dentro de ciertos bancos de memoria 2710A-2710N. Los puntos calientes pueden inducir efectos térmicos negativos en el sistema de procesamiento 2700, reducir el rendimiento asociado con ciertos accesos a memoria y/o aumentar la latencia asociada con estos accesos a memoria.
La Figura 28 ilustra un sistema de procesamiento 2800 que incluye un controlador de caché 2806 con unidad de función de troceo dinámica 2807. El sistema de procesamiento 2800 incluye adicionalmente hardware de monitor de caché 2810. El hardware de monitor de caché 2810 puede estar incluido dentro del controlador de caché 2806. El hardware de monitor de caché 2810 también puede estar ubicado externamente al controlador de caché 2806. Por ejemplo, el hardware de monitor de caché 2810 puede residir dentro de la memoria caché 2708. La unidad de función de troceo dinámica 2807 puede ser lógica de hardware dentro del controlador de caché 2806. La unidad de función de troceo dinámica 2807 también puede ser un firmware actualizable que incluye instrucciones ejecutadas por un microcontrolador dentro de o asociado con el controlador de caché 2806. La memoria caché 2708 puede ser la misma memoria o similar que en el sistema de procesamiento 2700 e incluye múltiples bancos de memoria 2710A-2710N. El sistema de procesamiento 2800 incluye también una memoria caché o adicional 2816, que puede ser una memoria caché adicional, que puede ser una memoria caché de nivel superior, o memoria de sistema principal, tal como la memoria 2720.
En una realización, la unidad de función de troceo dinámica 2807 está programada con conocimiento de los patrones de acceso a memoria específicos realizados por el recurso de procesamiento 2702. Por ejemplo, el recurso de procesamiento 2702 puede estar configurado con un patrón de acceso a memoria en teselas que tiene un paso y un salto predefinidos. Los algoritmos de función de troceo usados por la unidad de función de troceo dinámica 2807 pueden adaptarse al tipo específico de patrones de acceso a memoria empleados por el recurso de procesamiento 2707. Tener conocimiento del patrón de acceso a memoria permite a la unidad de función de troceo dinámica 2807 seleccionar entre diferentes algoritmos de función de troceo que serán conocidos para seleccionar diferentes conjuntos de bancos de memoria 2710A-2710N cuando se usa el mismo patrón de acceso a memoria.
Durante la ejecución, el hardware de monitor de caché 2810 puede monitorizar el patrón de acceso al banco para la memoria caché 2708. Por ejemplo, el hardware de monitor de caché 2810 puede incluir una matriz de contadores 2811 que actualiza un recuento para cada banco de memoria 2710A-2710N cuando se realiza un acceso a ese banco de memoria. El recuento en la matriz de contadores 2811 puede ser un recuento de accesos a lo largo de una ventana de tiempo deslizante. La matriz de contadores 2811 también puede restablecerse periódicamente. Por ejemplo, la matriz de contadores 2811 puede restablecerse en respuesta a un vaciado de caché. La matriz de contadores 2811 también puede restablecerse en respuesta a un cambio de contexto en el recurso de procesamiento 2702. A través de la matriz de contadores 2811, el hardware de monitor de caché 2810 puede detectar si bancos de memoria específicos 2710A-2710N están recibiendo un número desproporcionado de accesos en relación con otros bancos de memoria. Si el hardware de monitor de caché 2810 detecta un número desproporcionado de accesos a bancos de memoria específicos 2710A-2710N en relación con otros bancos de memoria, de tal manera que un diferencial de acceso está por encima de un umbral predeterminado, el hardware de monitor de caché 2810, en la presente invención, dirige al controlador de caché 2606 para realizar una operación 2812 para reprogramar la unidad de función de troceo dinámica 2807.
En una configuración, cada banco de memoria 2710A-2710N en la memoria caché 2708 puede estar configurado con un sensor térmico. Un monitor térmico 2818 puede estar configurado para monitorizar la temperatura de cada banco de memoria 2710A-2710N. En tal configuración, el monitor térmico 2818 puede señalizar al hardware de monitor de caché 2810 cuando la temperatura de un banco de memoria supera un umbral. El hardware de monitor de caché 2810 puede realizar a continuación la operación 2812 para reprogramar la unidad de función de troceo dinámica 2807 en respuesta a la señal del monitor térmico 2818.
La operación 2812 para reprogramar la unidad de función de troceo dinámica 2807 puede incluir solicitar a la unidad de función de troceo dinámica 2807 que cambie a una función de troceo diferente que dará como resultado un patrón de acceso al banco diferente. A continuación, la unidad de función de troceo dinámica 2807 puede cambiar a una diferente de las múltiples funciones de troceo que están disponibles dentro del hardware o firmware de la unidad de función de troceo dinámica 2807. En una realización, la unidad de función de troceo dinámica 2807 puede estar configurada para aceptar una función de troceo actualizada que puede anular una de las funciones de troceo preconfiguradas de la unidad de función de troceo dinámica 2807. Esta función de troceo actualizada puede añadirse al conjunto de funciones de troceo disponibles que pueden seleccionarse mediante la operación 2812.
Cuando la unidad de función de troceo dinámica 2807 realiza un cambio en la función de troceo, se activa un vaciado de la memoria caché 2708. Durante el vaciado, puede vaciarse cualquiera de las unidades (por ejemplo, líneas de caché) modificadas (por ejemplo, sucias) de datos de caché a la caché o memoria adicional 2816. Las unidades no modificadas de datos de caché pueden descartarse o invalidarse. En una realización, todas las líneas de caché en la caché se pueden establecer como no válidas antes de cambiar una función de troceo usada para la selección de bancos. Después de que se vacía la memoria caché 2708, la unidad de función de troceo dinámica 2807 puede seleccionar una función de troceo diferente que dará como resultado un patrón de acceso al banco diferente. A continuación, el controlador de caché 2806 puede reanudar el funcionamiento de la memoria caché 2708. La unidad de función de troceo dinámica 2807 también puede aprovecharse de cambios de la función de troceo en un vaciado de caché solicitado por el recurso de procesamiento 2702.
La Figura 29 ilustra un método 2900 para permitir la reconfiguración dinámica de una función de troceo de banco de memoria basándose en estadísticas de hardware. El método 2900 puede realizarse por el hardware de monitor de caché 2810 basándose en estadísticas de hardware para accesos a bancos de memoria caché y/o estados térmicos. El método 2900 incluye realizar operaciones (2902) por el hardware de monitor de caché para monitorizar el patrón de acceso y/o el estado térmico de los bancos de memoria de una memoria caché. Si el hardware de monitor de caché detecta una disparidad de acceso al banco por encima de un umbral (2903) o una temperatura del banco por encima de un umbral (2904), el método 2900 indica al hardware de monitor de caché que solicite un cambio de función de troceo en la unidad de función de troceo dinámica (2906). De lo contrario, el hardware de monitor de caché puede continuar realizando las operaciones (2902) para monitorizar el patrón de acceso y/o el estado térmico de los bancos de memoria de la memoria caché.
En una configuración, la solicitud de cambio de función de troceo puede solicitar girar a una función de troceo diferente o puede ser una solicitud para seleccionar una función de troceo específica. La función de troceo que se selecciona puede diferir basándose en si el cambio se basa en un estado térmico o en una disparidad de patrón de acceso.
Usando las técnicas anteriores, un experto en la materia puede implementar, por ejemplo, un procesamiento de datos que comprende una memoria y un procesador de gráficos de propósito general acoplado con la memoria. El procesador de gráficos de propósito general incluye una memoria caché que incluye múltiples bancos de memoria y un controlador de caché acoplado a la memoria caché. La memoria caché puede ser una memoria caché de nivel 1 (L1), de nivel 2 (L2) o de nivel 3 (L3) del procesador de gráficos de propósito general.
El controlador de caché puede incluir una unidad de función de troceo dinámica para seleccionar, basándose en una primera función de troceo y una dirección asociada con un acceso a memoria, uno o más de los múltiples bancos de memoria en los que han de almacenarse los datos asociados con el acceso a memoria. El sistema también incluye hardware de monitor de caché para monitorizar un patrón de acceso de los múltiples bancos de memoria. En respuesta a un patrón de acceso detectado, el hardware de monitor de caché puede solicitar que la unidad de función de troceo dinámica seleccione una segunda función de troceo en respuesta a la detección de una disparidad de patrón de acceso al banco por encima de un umbral.
En una realización, la memoria caché incluye adicionalmente hardware de monitorización térmica para monitorizar un estado térmico de los múltiples bancos de memoria e informar del estado térmico al hardware de monitor de caché. El hardware de monitor de caché puede recibir datos del hardware de monitorización térmica y solicitar que la unidad de función de troceo dinámica seleccione la segunda función de troceo en respuesta a la determinación de que una temperatura de uno o más de los múltiples bancos de memoria supera un umbral. El monitor de caché puede solicitar que la unidad de función de troceo dinámica seleccione una tercera función de troceo en respuesta a la determinación de que una temperatura de uno o más de los múltiples bancos de memoria supera un umbral.
En una realización, la unidad de función de troceo dinámica es una unidad de hardware del controlador de caché. El controlador de caché incluye, está incluido dentro de, o comprende firmware ejecutado por un microcontrolador. La unidad de función de troceo dinámica puede incluir o estar incluida dentro de firmware ejecutado por tal microcontrolador.
Pueden implementarse sistemas y métodos para gestionar las características anteriores o que pueden incluir aspectos de las características anteriores. Los medios legibles por máquina no transitorios pueden almacenar instrucciones que hacen que los procesadores y/o microcontroladores proporcionen las características mencionadas anteriormente.
Páginas mixtas de 4K/64K bajo el mismo directorio de páginas
Los sistemas informáticos del estado de la técnica de uso general común incluyen procesadores de 64 bits que soportan direcciones físicas de hasta 52 bits y emplean un sistema de memoria virtual paginada con direcciones virtuales de hasta 48 bits. Los sistemas de memoria virtual paginada usados por tales procesadores pueden emplear diversas estructuras de tabla de páginas jerárquicas para gestionar el mapeo de direcciones virtuales a físicas. Una dirección virtual puede especificar un número de página virtual. El número de página virtual puede traducirse por un sistema de traducción de direcciones a un número de página físico que identifique una página en la memoria física. La dirección virtual también especifica un desplazamiento en la página que especifica una distancia desde la dirección base de la página en la que se pueden encontrar los datos de la dirección especificada.
Los sistemas de procesamiento heterogéneos que permiten el procesamiento cooperativo entre múltiples tipos de procesadores, tales como un procesador de propósito general (por ejemplo, CPU o procesador de aplicaciones) y una unidad de procesador de gráficos de propósito general (GPGPU) pueden emplear memoria unificada en una única vista del espacio de direcciones virtual de sistema que se comparte por todos los procesadores en el sistema. Una GPGPU dentro de un sistema de procesamiento heterogéneo que incluye soporte para memoria unificada incluye hardware y software que permite el uso de asignaciones de memoria virtual creadas para su uso por la GPGPU, así como asignaciones que se crean al menos parcialmente para su uso por una CPU y/u otros procesadores dentro del sistema. Tanto las CPU como las GPGPU pueden soportar una diversidad de tamaños de página para las asignaciones de memoria virtual, desde páginas de cuatro kilobytes (4K) y sesenta y cuatro kilobytes (64K), hasta páginas de un gigabyte (1G) y/o dieciséis gigabytes (16G). Generalmente, 4K es el tamaño de página común y/o predeterminado para una diversidad de arquitecturas de CPU, siendo tanto 4K como 64K comunes para su uso por GPGPU.
La Figura 30 ilustra un sistema de procesamiento heterogéneo 3000 que incluye memoria unificada 3040. El sistema de procesamiento heterogéneo 3000 incluye una CPU 3002, una memoria de sistema 3004, una memoria GPGPU 3006 y una GPGPU 3008. La CPU 3002 puede ser cualquier CPU, procesador de propósito general o procesador de aplicaciones descrito en el presente documento, tal como, por ejemplo, el procesador<1 0 2>, el procesador 802, el procesador de múltiples núcleos 1308, el procesador o procesadores 1402, el procesador 2330 y/o el procesador de aplicaciones 2505. La memoria de sistema 3004 es una memoria de acceso aleatorio y puede ser, por ejemplo, la memoria de sistema 104, la memoria 366, la memoria de procesador 401 -402, la memoria de sistema 441, la memoria 1571, la memoria 2350, y/o comprender uno o más de los dispositivos de memoria 1420. La memoria de GPGPU 3006 puede ser una porción de la memoria de sistema 3004 que está especializada a usar la GPGPU 3008. La memoria de GPGPU 3006 también puede ser local, especializada o estar en placa, tal como la memoria de procesador paralelo 222, la memoria de g Pu 420-423, la memoria de gráficos 433-434, la memoria 714A-714B, la memoria 1572, la memoria 1626A-1626D y/o la memoria 2475. La GPGPU puede ser cualquier procesador de gráficos o paralelo descrito en el presente documento, tal como, pero sin limitación, el/los procesador(es) paralelo(s) 112, la GPU 380, la GPU 410-413, el módulo de aceleración de gráficos 446, el hardware de GPGPU 610, la<g>P<g>PU 700, la GPGPU 806A-806D, la GPGPU 1306, la GPGPU 1570, el procesador de gráficos 1620, el procesador de gráficos 1630, el procesador de gráficos 1710, el procesador de gráficos 2100, el procesador de gráficos 2510, el procesador de gráficos 2610, y/o el procesador de gráficos 2640. Las técnicas descritas en el presente documento también pueden aplicarse al procesador de imágenes 2515 y al procesador de vídeo 2520. La memoria de sistema 3004 y la memoria de GPGPU 3006 pueden tener espacios de direcciones físicas unificadas o no unificadas y están configuradas como memoria unificada 3040 con un espacio de direcciones virtual unificado, tal como, por ejemplo, la memoria unificada de la Figura 4F.
La CPU 3002 y la GPGPU 3008 incluyen cada una las MMU 3003, 3028, que son similares a otras unidades de gestión de memoria descritas en el presente documento, para facilitar el acceso a la memoria de sistema 3004 y a la memoria de GPGPU 3006. La MMU 3028 incluye una TLB 3032 para almacenar en caché las traducciones de direcciones virtuales a físicas, y un recorredor de tabla de páginas 3030 que incluye hardware para recorrer las tablas de páginas de GPU 3016 y/o las tablas de páginas de CPU 3024 en caso de fallo de TLB. La MMU de CPU 3003 también puede incluir componentes similares. Cuando la CPU 3002 es una CPU de múltiples núcleos, cada núcleo puede incluir una instancia separada de la MMU 3003.
En diversas implementaciones, las tablas de páginas de CPU 3024 y las tablas de páginas de GPU 3016 pueden sincronizarse o la CPU 3002 y la GPGPU 3008 pueden configurarse para compartir un conjunto unificado de tablas de páginas que abarque los datos de las tablas de páginas de CPU 3024 y las tablas de páginas de GPU 3016. Durante la operación, un controlador de gráficos (por ejemplo, el controlador de GPGPU 608, el controlador de gráficos de modo de usuario 2326, el controlador de gráficos de modo de núcleo 2329) que se ejecuta en la CPU 3002, basándose en comandos recibidos a través de una API de gráficos o de cálculo, puede cargar comandos en una memoria intermedia de comandos 3014 en memoria de sistema 3004. Las direcciones en la memoria del sistema 3004 que almacenan la memoria intermedia de comandos 3014 pueden mapearse a través de la tabla de páginas de GPU 3016 a la GPGPU 3008 para permitir que un motor del representador 3018 de la GPGPU 3008 obtenga y ejecute estos comandos. Los píxeles generados por el motor del representador 3018 pueden enviarse por un motor de visualización 3038 a la memoria GPGPU 3006 para su visualización a través de un dispositivo de visualización.
Dado que el sistema de procesamiento heterogéneo 3000 incluye memoria unificada 3040, sería ventajoso permitir la existencia de mapeos para páginas de memoria virtual de 4K junto con mapeos para páginas de 64K. Por ejemplo, la GPGPU 3008 crea por o para uso de la CPU 3002 o la GPGPU 3008 junto a páginas de 64K creadas por o para uso de la GPGPU. Para los sistemas de procesamiento que soportan múltiples tamaños de página, tales sistemas pueden emplear diferentes estructuras jerárquicas dependiendo del tamaño de página en uso. Si no se usan diferentes estructuras jerárquicas, la forma en que se crean y usan estas estructuras puede diferir dependiendo del tamaño de página en uso basándose en la matemática asociada con la identificación de un número de página virtual y desplazamiento.
La Figura 31A-31B ilustra estructuras de tabla de páginas jerárquicas para páginas de 4K y 64K. Un sistema con soporte para 4K páginas puede usar la estructura de tabla de páginas de la Figura 31A. Un sistema con soporte para 64K páginas puede usar la estructura de tabla de páginas de la Figura 31B. En cada una de la Figura 31A y la Figura 31B, se ilustra una estructura de tabla de páginas jerárquica de cuatro niveles. Las estructuras de tabla de páginas ilustradas son ilustrativas de una realización y se pueden usar diferentes técnicas para permitir el soporte de sistemas de memoria virtual que usan tamaños de página de 4K o 64K. Las estructuras de tabla de páginas ilustradas son para su uso por procesadores de 64 bits que tienen al menos un espacio de direcciones virtual canónico de 48 bits. Las estructuras de tabla de páginas ilustradas también pueden usarse por GPGPU que tienen un espacio de direcciones virtual de 49 bits, donde el espacio de direcciones virtual de 49 bits permite a la GPGPU direccionar la totalidad del espacio de direcciones disponible para una CPU que tiene un espacio de direcciones de 48 bits, así como direcciones virtuales superiores especializadas para su uso por la GPGPU.
Como se muestra en la Figura 31A, una dirección virtual proporciona índices en una estructura de tabla de páginas jerárquica que se usa para permitir el mapeo de direcciones virtuales a físicas para la dirección virtual. Cuando se crean mapeos de direcciones virtuales a físicas para una página de 4K, se puede usar un recorrido de tabla de páginas 9:9:9:9 en el que se usan cuatro regiones de 9 bits de la dirección virtual para identificar la tabla de páginas que almacena el mapeo virtual a físico para la dirección virtual. Los bits [47:39] de la dirección virtual especifican el índice del nivel 4 de mapa de páginas (PML4) 3102. Los bits de dirección [38:30] especifican un índice de puntero de directorio de página (PDP) 3104. Los bits de dirección [29:21] especifican un índice de directorio de página 3106. Los bits de dirección [20:12] especifican un índice de tabla de páginas 3108. Una vez que se realiza la traducción de página virtual a página física, se usan los bits de dirección [11:0] para determinar un desplazamiento dentro de la página 3110 para los datos asociados a la dirección virtual. En una implementación, un puntero DE PML4 3111 que especifica la dirección DE base de una tabla PML4 3112 puede encontrarse, por ejemplo, en una entrada de ID de espacio de direcciones de proceso (PASID) para un dispositivo PCI que tiene soporte para la extensión PASID DE PCI. En otras implementaciones, se pueden almacenar punteros similares en registros (por ejemplo, CR3), descriptores de contexto o similares.
Puede especificarse la tabla de páginas empieza a recorrerse usando la entrada de PML4 (PML4E) especificada por el índice de PML43102, que especifica la dirección física de una tabla de puntero de directorio de página (PDP) 3114 dentro de una pluralidad de posibles tablas de PDP. La tabla de PDP 3114 incluye una entrada de puntero de directorio de páginas (PDPE) El PDPE identifica la dirección física de la tabla de directorio de páginas 3116. El índice de directorio de páginas 3106 de la dirección virtual especifica una PDE (entrada de directorio de páginas) que incluye la dirección física de una tabla de páginas 3118. El índice de tabla de páginas 3108 especifica una entrada de tabla de páginas (PTE) que especifica la dirección física de una página de memoria de 4K 3120, especificando el desplazamiento dentro de la página 3110 el desplazamiento en el que se almacenan los datos asociados con la dirección virtual. El recorrido de la tabla de páginas 9:9:9:9 da como resultado una tabla de páginas totalmente utilizada, de tal manera que puede usarse una página de memoria de 4K para almacenar una tabla de páginas de 2<9>(512) entradas de tabla de páginas, siendo cada entrada de ocho bytes (64 bits), sin ningún espacio de memoria entre las entradas.
Como se muestra en la Figura 31B, sin embargo, cuando la jerarquía de tabla de páginas de la Figura 31A se usa para páginas de 64KB, la memoria usada para almacenar la tabla de páginas no se utiliza totalmente, dando como resultado espacio no usado entre las entradas de la tabla de páginas. La jerarquía de la tabla de páginas de la Figura 31B es similar a la de la Figura 31A, con la excepción de que los bits [20:16] de la dirección virtual se usan como índice de la tabla de páginas 3138 y los bits [15:0] se usan para el desplazamiento dentro de la página 3140. Se usan dieciséis bits de desplazamiento para cubrir los 64 kilobytes de la página de 64K. Dentro de la tabla de páginas 3148, se usa cada decimosexta entrada (PTE n.° 0, PTE n.° 16, PTE n.° 32, ... PTE n.° 496) para indexar una página de 64K, que puede calcularse utilizando la dirección virtual[20:16] & "<0 0 0 0>".
Las Figuras 32A-32C ilustran un directorio de páginas y tablas de páginas para permitir la mezcla de páginas 4K y 64K dentro de la misma estructura de tabla de páginas jerárquica, de acuerdo con una realización. La Figura 32A ilustra un directorio de páginas y tablas de páginas que pueden usarse para indexar páginas tanto de 4K como de 64K. La Figura 32B ilustra campos de una entrada de directorio de páginas. La Figura 32C ilustra campos de una entrada de tabla de páginas.
La jerarquía de tabla de páginas ilustrada de la Figura 32A-32C mejora la eficiencia de TLB mediante la adición de una sugerencia TLB de 64K a PTE de 4K. En una realización, se puede añadir un bit de PS64 (tamaño de página 64) a una TLB de 4K que sirve como sugerencia de coalescencia TLB. La coalescencia permite que los datos de traducción de direcciones de dieciséis PTE consecutivas de 4K se almacenen en caché en la TLB como una página de 64KB. La lógica de arbitraje de memoria y de recorrido de tabla de páginas puede seguir realizando la traducción de direcciones para una página de 4K coalescente como si la página fuera una página de 4K. Sin embargo, las páginas de 4K coalescentes se almacenan en caché como una página de 64K. El almacenamiento en caché de las páginas 4K coalescentes como 64K mejora la eficiencia de la TLB al permitir que un acceso a cualquiera de las dieciséis PTE coalescentes de como resultado un acierto en la misma entrada de TLB.
Como se muestra en la Figura 32A, la jerarquía de tabla de páginas incluye una tabla de PDP 3114. La tabla PDP 3114 tiene un tamaño de 4K, alineada en un límite de direcciones de 4K, y puede almacenar hasta 512 PDPE. Las PDPE pueden hacer referencia a una página de 1G 3203 (por ejemplo, PDPE 3201) si el campo de estructura de página (PS) de la PDPE se establece a "1", o a una tabla de PD si PS=1 para la PDPE (por ejemplo, PDPE 3202). El campo de estructura de página puede ser un campo de un único bit.
La jerarquía de tabla de páginas también incluye una tabla de PD 3116. La tabla de PD 3116 tiene un tamaño de 4K, está alineada a 4K y puede almacenar hasta 512 PDE. Una PDE hace referencia a una página de dos megabytes (2M) 3207 si PS=1 para la PDE (por ejemplo, PDE 3204). Además del campo PS, una P<d>E también puede incluir un campo de tamaño de tabla de páginas (PTS) que, junto con el campo PS, indica si la PDE hace referencia a una tabla de páginas PT32 3148 o a una tabla de páginas PT512 3118. Por ejemplo, la PDE 3205 se establece como {PS=<0>, PTS=1} e incluye una dirección física para una tabla de páginas de PT32 3148. La tabla de páginas de PTS32 3148 tiene un tamaño de 256 bytes (256B), se usan 256B alineados para almacenar hasta treinta y dos PTE de 64K (es decir, PTE de 64K 3208) que incluyen una dirección física para una página de 64K 3150. Como otro ejemplo, la PDE 3206 se establece como {PS=0, PTS=1} y almacena una dirección física para una tabla de páginas de PT512 3118. La tabla de páginas PT512 tiene un tamaño de 4K, alineada en un límite de direcciones de 4K, y puede almacenar hasta 512 PTE.
Una PTE en la tabla de páginas 3118 de PT512 puede incluir el campo PS64, que puede ser un campo de un único bit. El campo PS64 está habilitado (por ejemplo, PS64=1) en dieciséis PTE 3209 consecutivas de 4K (por ejemplo, PTE 0-15, 16-31, 32-47, etc.) cuando el correspondiente intervalo de direcciones virtuales de 64KB se mapea a los correspondientes segmentos de 4K de una página contigua de 64KB (16x páginas de 4K 3220) y todos los bits de permiso en las dieciséis PTE son iguales. Las dieciséis PTE 4K consecutivas no coalescentes tendrán el campo PS64 establecido a cero (es decir, PS64=0) y almacenarán la dirección física de una única página de memoria 4K 3120.
La Figura 32B muestra campos ilustrativos de una PDE 3250 que permite mezclar páginas de 4K y 64. La PDE almacena una dirección de tabla de páginas 3251, así como campos de indicador para indicar si las páginas de 64K están habilitadas en el sistema (campo 3252) y en el campo de PTS 3254 que indica si la PDE se usa para referenciar una tabla de páginas que incluye entradas para páginas de 64K. El campo PTS 3254 puede ignorarse si las páginas de 64K no están habilitadas de acuerdo con el campo 3252. El campo 3252 y el campo PTS 3254 pueden ser campos de un único bit cada uno, donde un bit establecido para el campo 3252 indica que las páginas de 64K están habilitadas y un bit establecido para el campo PTS 3254 indica que la PDE hace referencia a una tabla de páginas con soporte para entradas que hacen referencia a páginas de 64K. La PDE 3250 puede incluir también un campo PS 3256 que, cuando está activado, indica que la PDE hace referencia a una única página de memoria de 2M.
La Figura 32C muestra campos ilustrativos de una PTE 3260 que pueden usarse para hacer referencia a una página de 4K o 64K. La PTE almacena una dirección de página 3261, que es la dirección física de una página de 64K. Para una página de 4K, puede usarse un campo de dirección adicional 3262 para almacenar bits adicionales que pueden usarse para la dirección física de una página de 4K. El campo PS643264 indica si la página direccionada por la PTE 3260 ha de almacenarse en caché en la TLB como una única página de 4K o como dieciséis páginas de 4K coalescentes en una página de 64K.
La Tabla 5 a continuación indica el tamaño de página en una entrada de hoja y el mapeo correspondiente permitido en la TLB. Una entrada X indica un bit "sin importancia".
Tabla 5 - Mapeo de entradas de hoja de jerarquía de tabla de páginas
Las Figuras 33A-33C ilustran métodos 3300, 3310, 3320 para permitir la mezcla de páginas de 4K y 64K dentro de una estructura de tabla de páginas jerárquica. La Figura 33A muestra un método 3300 para crear un mapeo para una página en una jerarquía de tabla de páginas que incluye entradas para páginas de 4K y 64K. La Figura 33B muestra un método 3310 para realizar un recorrido de páginas en una jerarquía de tabla de páginas que incluye entradas para páginas de 4K y 64K. La Figura 33C muestra un método 3320 de almacenamiento en caché de múltiples PTE de 4K como una única PTE de 64K. Los métodos ilustrados 3300, 3310 son aplicables a un sistema de procesamiento heterogéneo con tamaños de página mixtos, por ejemplo, el sistema de procesamiento heterogéneo 3000 como en la Figura 30.
Como se muestra en la Figura 33A, la lógica en o asociada con una GPGPU puede recibir una solicitud para mapear a una página de 4K asociada con una asignación de memoria de CPU (3302). La lógica puede crear un mapeo en una jerarquía de tabla de páginas asociada con la GPGPU para la página de 4K (3303). La lógica puede recibir adicionalmente una solicitud en la GPGPU para mapear a una página de 64K asociada con una asignación de memoria de GPGPU (3304). La lógica puede a continuación crear un mapeo en la jerarquía de tabla de páginas asociada con la GPGPU para la página de 64K, donde la jerarquía de tabla de páginas almacena concurrentemente entradas para la página de 4K y la página de 64K (3305).
Como se muestra en la Figura 33B, la lógica en o asociada con una GPGPU puede recibir una solicitud para traducir una dirección virtual de una primera asignación de memoria dentro de una página de 4K (3312). La traducción puede realizarse a través de una entrada de TLB si la traducción se almacena en caché dentro de una TLB. En respuesta a un desacierto de TLB para la traducción de la dirección virtual para la primera asignación de memoria, la lógica puede iniciar un recorrido de página en una jerarquía de tabla de páginas para determinar una dirección física de la primera asignación de memoria (3313). El recorrido de página puede ser un recorrido de tabla de páginas 9:9:9:9 como se ha descrito anteriormente. La lógica puede recibir a continuación una solicitud para traducir la dirección virtual de una segunda asignación de memoria dentro de una página de 64K (3314). La traducción puede realizarse a través de una entrada de TLB si la traducción se almacena en caché dentro de una TLB. En respuesta a un desacierto de TLB para la traducción de la dirección virtual para la segunda asignación de memoria, la lógica puede iniciar un recorrido de página en la jerarquía de tabla de páginas para determinar la dirección física para la segunda asignación de memoria (3315). La jerarquía de tabla de páginas almacena una entrada de tabla de páginas para la página de 4K y la página de 64K. En una realización, una tabla de páginas puede almacenar una entrada para una página de 4K y dieciséis PTE de 4K coalescentes que pueden almacenarse en caché en una TLB como una PTE de 64K.
Como se muestra en la Figura 33C, la lógica en o asociada con una GPGPU puede recibir una solicitud para mapear a una página de 4K con una asignación de memoria asociada con una CPU o una GPGPU (3322). La lógica puede mapear la página de 4K usando una PTE 5K dentro de una tabla de páginas de 512 entradas (3323). Después del mapeo o en paralelo con el mapeo de la página de 4K, la lógica puede determinar si la página de 4K mapeada está dentro de un intervalo de direcciones virtuales consecutivas de 64K (3324). Si la página de 4K mapeada está dentro de un intervalo de direcciones virtuales consecutivas de 64K, la lógica puede determinar si las PTE para cada una de las páginas 4K dentro del intervalo de direcciones virtuales consecutivas tienen los mismos permisos (3325). Si la página de 4K mapeada está dentro de un intervalo de direcciones virtuales consecutivas de 64K y las PTE para cada una de las páginas de 4K dentro del intervalo de direcciones virtuales consecutivas tienen los mismos permisos (por ejemplo, lectura, escritura, ejecución, etc.), la lógica puede establecer un bit (por ejemplo, PS64=1) en cada una de las dieciséis PTE para el intervalo de direcciones virtuales consecutivas de 64K (3326). El bit establecido indica que la lógica puede almacenar en caché las dieciséis PTE como una única PTE de 64K (3328). En consecuencia, un acceso a una dirección virtual que está cubierta por cualquiera de las dieciséis PTE dará como resultado un acierto de TLB en la entrada de PTE de 64K coalescente almacenada en caché.
Usando las técnicas anteriores, un experto en la materia puede implementar, por ejemplo, un dispositivo electrónico que comprende una GPGPU que incluye una unidad de gestión de memoria y una TLB configurada para almacenar en caché datos asociados a una traducción de una dirección virtual a una dirección física. La traducción puede almacenarse en caché a partir de una jerarquía de tabla de páginas configurada para mapear concurrentemente una primera entrada de tabla de páginas para una tabla de páginas de 4K y una segunda entrada de tabla de páginas asociada con una tabla de páginas de 64K. La segunda entrada de la tabla de páginas puede incluir un bit que indica que la segunda entrada de la tabla de páginas apunta a una página de 64K. La segunda entrada de la tabla de páginas puede estar asociada con dieciséis páginas de 4K que son coalescentes en una página de 64K.
En una realización, la GPGPU del dispositivo electrónico incluye un recorredor de tabla de páginas para recorrer una jerarquía de tabla de páginas que incluye la tabla de páginas tras un desacierto de la TLB para la traducción desde la dirección virtual a la dirección física. La jerarquía de tabla de páginas incluye una tabla de directorio de páginas que incluye una entrada de directorio de páginas. La entrada de directorio de páginas incluye una referencia a la tabla de páginas. La entrada de directorio de páginas puede incluir adicionalmente un campo de uno o de múltiples bits que indica que la tabla de páginas a la que hace referencia la entrada de tabla de páginas incluye una entrada para una página de 64K o una página de 4K. La entrada de directorio de páginas también puede hacer referencia directamente a una página de 2M. Una página de 64K referenciada por la entrada de directorio de páginas puede ser una página de 64K monolítica o un conjunto de páginas de 4K coalescentes que se almacenan en caché como una única página de 64K. En una realización, un acceso a una cualquiera de las páginas de 4K coalescentes dará como resultado un acierto con la misma entrada de TLB única.
Un experto en la materia estaría adicionalmente capacitado para implementar un método realizado en un dispositivo electrónico, donde el método comprende recibir una solicitud para que la GPGPU mapee una página de 4K asociada con una primera asignación, crear un mapeo en una jerarquía de tabla de páginas asociada con la GPGPU para la página de 4K, recibir una solicitud para que la GPGPU mapee a una página de sesenta y cuatro kilobytes (64K) asociada con una segunda asignación, y crear un mapeo en la jerarquía de tabla de páginas asociada con la GPGPU para la página de 64K. La tabla de páginas puede almacenar concurrentemente entradas para la página de 4K y la página de 64K. La primera asignación de memoria puede asignarse para su uso por, al menos en parte, una unidad central de procesamiento y se comparte con la GPGPU. La segunda asignación de memoria puede asignarse para su uso por la GPGPU. El método incluye adicionalmente, en el dispositivo electrónico, determinar que la página de 4K es parte de un intervalo de direcciones virtuales contiguo de 64K y establecer un bit en cada entrada de tabla de páginas de un conjunto de entradas de tabla de páginas para el intervalo de direcciones virtuales contiguo de 64K. El bit establecido indica que el conjunto de entradas de tabla de páginas para el intervalo de direcciones virtuales de 64K es almacenable en caché como una entrada de tabla de páginas de 64K. El método incluye adicionalmente almacenar en caché del conjunto de entradas de tabla de páginas en una memoria intermedia de traducción anticipada como una entrada de tabla de páginas de 64K.
Un experto en la materia estaría adicionalmente capacitado para implementar un método ejecutado en un dispositivo electrónico, donde el método comprende recibir una solicitud en una GPGPU para traducir una dirección virtual de una primera asignación dentro de una página de cuatro kilobytes (4K) y en respuesta a un desacierto de TLB para la traducción de la dirección virtual de la primera asignación, iniciar un recorrido de página en una jerarquía de tabla de páginas para determinar una dirección física para la primera asignación. El método incluye adicionalmente recibir una solicitud en la GPGPU para traducir la dirección virtual de una segunda asignación dentro de una página de sesenta y cuatro kilobytes (64K) y en respuesta a un desacierto de TLB para la traducción de la dirección virtual de la segunda asignación, iniciar un recorrido de página en la jerarquía de tabla de páginas para determinar una dirección física para la segunda asignación de memoria. El dispositivo electrónico está configurado para incluir una jerarquía de tabla de páginas que almacena una entrada de tabla de páginas para la página de 4K y la página de 64K. En una realización, la primera asignación de memoria se asigna para su uso, al menos en parte, por una unidad central de procesamiento y se comparte con la GPGPU y la segunda asignación de memoria se asigna para su uso por la GPGPU.
Cachés cercanas y lejanas dentro de una única capa de una jerarquía de caché
A medida que aumentan los recursos de procesamiento dentro de un procesador, puede ser beneficioso aumentar el tamaño de las cachés usadas por estos recursos de procesamiento. En consecuencia, las memorias caché, particularmente una caché de nivel 3 (L3), nivel 4 (L3) y/o de último nivel (LLC) para un sistema de procesamiento, tienden a aumentar de tamaño en los sucesivos diseños de procesadores dentro del mismo nivel de rendimiento. Aunque puede mantenerse el rendimiento de estas cachés más grandes, o incluso aumentar, a medida que crece el tamaño de la caché, la latencia de acceso a una caché tiende a aumentar a medida que aumenta el tamaño de la caché debido a la sobrecarga de gestión del mayor número de entradas de caché. Para contrarrestar el aumento de latencia de las cachés más grandes, una memoria caché puede subdividirse en una región cercana más pequeña y una región lejana más grande. La región de caché más pequeña puede usarse para almacenar datos más sensibles a la latencia y/o usados con más frecuencia. Los datos menos sensibles a la latencia o de uso menos frecuente pueden almacenarse en la región de caché lejana.
En algunos sistemas, la latencia puede introducirse debido a una mayor distancia física entre un núcleo de procesador y una memoria caché grande, o a la naturaleza del canal de comunicación entre el núcleo de procesador y la memoria caché grande. En tales sistemas, la latencia puede reducirse incluyendo una caché más pequeña que está físicamente más cerca del núcleo de procesador o que está conectada a través de un canal de comunicación de latencia inferior en relación con la memoria caché más grande. Por ejemplo, una L3/L4 o LLC para un sistema de procesamiento puede subdividirse en una región cercana y lejana, teniendo la región cercana una latencia de acceso inferior.
Las regiones cercana y lejana de una caché se tratan como regiones diferentes del mismo nivel de caché, de tal manera que las políticas de caché de todo el sistema para un nivel de caché se aplican tanto a la región cercana como a la lejana. Por ejemplo, si un sistema tiene una caché L3 de múltiples regiones y una asignación de memoria está marcada como no almacenable en caché L3, los datos de la asignación de memoria no se almacenarán en ninguna región de la caché L3.
Pueden establecerse políticas de desalojo, sustitución y/o migración de la caché para determinar cómo han de seleccionarse las víctimas para su desalojo de cada región de una caché de múltiples regiones y/o cómo o si han de migrarse los datos entre regiones. Se pueden usar diferentes algoritmos para las distintas regiones de caché. Las políticas de migración de la caché pueden usarse para determinar cuándo o si los datos deben moverse entre las regiones de latencia superior y de latencia inferior de la caché. Las sugerencias proporcionadas por las instrucciones ejecutadas en un procesador también pueden usarse para determinar qué región debe usarse para el almacenamiento de datos inicial de una instrucción y cómo de resistentes deben ser los datos a la migración o el desalojo. Por ejemplo, un compilador de sombreador que compila un núcleo de sombreador para su ejecución por un sistema de procesamiento puede emitir sugerencias generadas por el compilador basándose en los patrones de acceso a memoria detectados para las instrucciones compiladas. El conjunto de instrucciones para los sombreadores también puede ampliarse para permitir al programador incluir sugerencias explícitas para las asignaciones de memoria. Estas sugerencias explícitas pueden usarse por un controlador de caché para determinar una región en una L3/L4/LLC en la que han de almacenarse en caché los datos para el núcleo, o instrucciones específicas en el núcleo.
Aunque las regiones de caché cercana y lejana son ventajosas para las cachés de alto nivel grandes, las técnicas descritas en el presente documento no se limitan a ninguna capa particular de una jerarquía de caché y son aplicables a cualquier nivel de una jerarquía de caché.
La Figura 34 ilustra un sistema de procesamiento 3400 que incluye una caché 3408 que tiene múltiples regiones. La caché 3408 puede ser una caché L3, L4 o LLC grande, con una región cercana relativamente más pequeña, pero de menor latencia 3418 y una región lejana relativamente más grande, pero de mayor latencia 3428. El sistema de procesamiento 3400 incluye un recurso de procesamiento 3402, la unidad de carga/almacén 3404, el controlador de caché 3406, la caché 3408 y la memoria 3420. Los elementos del sistema de procesamiento 3400 son análogos y pueden tener características similares a aquellos del sistema de procesamiento 2700 de la Figura 27. Por ejemplo, el recurso de procesamiento 3402 y la unidad de carga/almacén 3404 pueden ser similares al recurso de procesamiento 2702 y a la unidad de carga/almacén 2704. Análogamente, la memoria 3420 puede ser similar a la memoria 2720. La caché 3408 también puede ser una caché en bancos, con bancos de memoria separados para la región cercana 3418 y la región lejana 3428.
Además de cualquier lógica de selección de banco que pueda estar presente para cada región de la caché 3408, el controlador de caché 3406 incluye adicionalmente lógica de gestión de caché, tal como lógica de selección de región 3407, una o más matrices de contadores 3417, y/o lógica de sustitución/migración de caché 3427. Las matrices de contadores 3417 pueden usarse para contar un número de accesos a cada unidad de datos (por ejemplo, línea de caché) de cada región dentro de un período de tiempo. Cuando surge la necesidad de desalojar datos de una región, la lógica de sustitución/migración de caché 3427 puede aplicar uno o más políticas de migración para determinar si una línea de caché dada debe ser invalidada o, si está sucia, escribirse de nuevo en memoria o en una caché de nivel superior. Pueden usarse diversos algoritmos de sustitución de caché por la lógica de sustitución/migración de caché 3427 para determinar sustituir o migrar datos basándose en métricas de uso asociadas con los datos. La lógica de sustitución/migración de caché 3427 puede emplear algoritmos tales como, pero sin limitación, menos recientemente usado (LRU), menos frecuentemente usado (LFU), menos usado recientemente frecuentemente (LFRU), o similares. Se pueden usar diferentes algoritmos de sustitución para la región cercana 3418 y la región lejana 3428. En una realización, tanto la región cercana 3418 como la región lejana 3428 pueden gestionarse usando un algoritmo segmentado de menos recientemente usado (SLRU), mapeándose los diferentes segmentos del algoritmo SLRU a las diferentes regiones de la caché 3408. La lógica de reemplazo/migración de caché 3427 puede conocer y tener en cuenta patrones específicos de acceso a memoria usados por el recurso de procesamiento 3402 cuando se determina si sustituir o migrar una línea de caché. Por ejemplo, si el recurso de procesamiento 3402 está configurado para el acceso a memoria en teselas, este patrón de acceso puede usarse para predecir las líneas de caché a las que es probable que se acceda basándose en las líneas de caché a las que se ha accedido previamente.
Usando el algoritmo de SLRU o un algoritmo de migración de caché especializado, los datos pueden migrar entre regiones. Los datos a los que se accede regularmente en la región lejana 3428 pueden migrarse a la región cercana 3418. Los datos que son desalojados de la región cercana 3418 pueden almacenarse en la región lejana 3428 en lugar de descartarse de la caché.
En una realización, la lógica de gestión de caché puede almacenar metadatos para rastrear el conjunto de etiquetas que se almacenan en la región cercana 3416 y la región lejana 3428 de la caché 3408. Como alternativa, la lógica de gestión de la caché puede comprobar las etiquetas de cada región en paralelo.
La Figura 35 ilustra un sistema de procesamiento heterogéneo que tiene regiones de caché cercanas y lejanas. El sistema de procesamiento heterogéneo ilustra versiones del procesador de múltiples núcleos 407 y del módulo de aceleración de gráficos 446 de la Figura 4C en las que tanto el procesador de múltiples núcleos 407 como el módulo de aceleración de gráficos 446 incluyen cachés de múltiples regiones. En una realización, las cachés (por ejemplo, 462A, 462B, 462C, 438 usadas por el procesador de múltiples núcleos 407 están subdivididas con regiones cercanas y lejanas para una caché particular. Por ejemplo, la caché 462A incluye la región lejana 462A-F y la región cercana 462A-N. La caché 462B incluye la región lejana 462B-F y la región cercana 462B-N. La caché 462b incluye la región lejana 462B-F y la región cercana 462B-N. La caché 462c incluye la región lejana 462C-F y la región cercana 462C-N. La caché 462D incluye la región lejana 462D-F y la región cercana 462D-N. En una realización, la caché 438 del circuito de integración de acelerador 436 incluye una región lejana 438-F y una región cercana 438-N. Los datos a los que se accede con más frecuencia pueden almacenarse en la región cercana de una caché, con sugerencias explícitas o generadas por el compilador que se usan para indicar la región que debe usarse para almacenar datos en caché tras la inserción inicial de los datos en la caché. Las sugerencias también pueden usarse para determinar la facilidad con la que deben migrarse los datos entre regiones.
La Figura 36 ilustra un conjunto de encapsulado para un procesador paralelo que incluye una caché L3 de múltiples regiones. El conjunto de paquete del sistema de cálculo 3600 puede incluir un procesador paralelo 3620 en el que los diversos componentes del SOC de procesador paralelo se distribuyen a través de múltiples chiplets. Cada chiplet puede ser un núcleo de IP distinto que está diseñado y configurado de forma independiente para comunicarse con otros chiplets mediante una o más interfaces comunes. Cada uno de los chiplets puede ser un circuito integrado distinto y al menos parcialmente empaquetado, lo que permite que se personalice el procesador paralelo durante el montaje en lugar de durante la fase de diseño. Los chiplets incluyen, pero sin limitación, los chiplets de cálculo 3605, un chiplet de medios 3604 y los chiplets de memoria que incluyen chiplets de caché cercana 3606. El sistema de cálculo 3600 puede incluir también chiplets de memoria DRAM (no mostrados). Cada chiplet puede fabricarse por separado usando diferentes tecnologías de proceso. Por ejemplo, los chiplets de cálculo 3605 pueden fabricarse usando la tecnología de procesos más pequeños o más avanzados disponible en el momento de la fabricación, mientras que los chiplets de caché 3606 u otros chiplets (por ejemplo, E/S, interconexión de redes, etc.) pueden fabricarse usando tecnologías de procesos más grandes o menos avanzados.
Los diversos chiplets pueden unirse a una pastilla base 3610 y configurarse para comunicarse entre sí y con lógica dentro de la pastilla base 3610 mediante una capa de interconexión 3612. En una realización, la pastilla base 3610 puede incluir la lógica global 3601, que puede incluir las unidades de lógica de planificador 3611 y de la gestión de potencia 3621, una interfaz 3602, una unidad de despacho 3603 que están interconectados a través de un módulo de tejido de interconexión 3608. El módulo de tejido de interconexión 3608 también puede permitir la comunicación entre la lógica global 3601 y los chiplets de cálculo 3605, el chiplet de medios 3604 y los chiplets de caché cercana 3606. El tejido de interconexión 3608 puede ser un tejido inter-chiplet que está integrado en la pastilla base 3610. Los chiplets de lógica pueden usar el tejido de interconexión 3608 para retransmitir mensajes entre los diversos chiplets.
Los chiplets de caché cercana 3606 y de caché lejana embebida 3609 pueden funcionar conjuntamente para proporcionar una caché L3 al chiplet de medios 3604 y a los chiplets de cálculo 3605. El módulo de tejido de interconexión 3608 puede usarse también para permitir la comunicación entre una caché lejana embebida 3609 y los chiplets de caché cercana 3606. Como alternativa, los chiplets de caché cercana 3606 pueden estar directamente acoplados con la caché lejana embebida 3609 a través de un puente de silicio o una estructura de interconexión. La caché L3 cercana/lejana puede usarse para almacenar en caché datos leídos desde y transmitidos a la memoria de sistema de un anfitrión y/o cualquier chiplet de DRAM que pueda estar incluido en el procesador paralelo 3620.
En una realización, la lógica global 3601 es un microcontrolador que puede ejecutar firmware para realizar el planificador 3611 y la funcionalidad de gestión de potencia 3621 para el procesador paralelo 3620. El microcontrolador que ejecuta la lógica global puede adaptarse para el caso de uso objetivo del procesador paralelo 3620. El planificador 3611 puede realizar operaciones de planificación global para el procesador paralelo 3620. La funcionalidad de gestión de potencia 3621 puede usarse para habilitar o deshabilitar chiplets individuales dentro del procesador paralelo cuando esos chiplets no están en uso.
Los diversos chiplets del procesador paralelo 3620 pueden diseñarse para realizar una funcionalidad específica que, en los diseños existentes, estaría integrada en una única pastilla. Un conjunto de chiplets de cálculo 3605 puede incluir agrupaciones de unidades de cálculo (por ejemplo, unidades de ejecución, multiprocesadores de transmisión por flujo continuo, etc.) que incluyen lógica programable para ejecutar instrucciones de sombreador de cálculo o gráficos. Un chiplet de medios 3604 puede incluir lógica de hardware para acelerar operaciones de codificación y descodificación de medios. También pueden incluirse chiplets de memoria que actúan como memoria local para el procesador paralelo 3620.
La Figura 37 ilustra un método 3700 de gestión de una caché que tiene múltiples regiones de caché. El método 3700 puede realizarse por la lógica de gestión de caché en un controlador de caché 3406 como en la Figura 34. La lógica de gestión de caché puede hacer uso de una o más matrices de contadores 3417 y/o la lógica de sustitución/migración de caché 3427.
El método 3700 incluye que la lógica de gestión de caché reciba una solicitud asociada con un acceso a datos en una dirección de memoria, donde la dirección de memoria está asociada con una asignación de memoria que puede almacenarse en caché (3702). La lógica de gestión de caché puede a continuación comprobar si hay un acierto de caché para los datos dentro de una región de una caché de múltiples regiones (3703). La lógica de gestión de caché puede incluir metadatos para rastrear qué etiquetas se almacenan en qué regiones (por ejemplo, cerca, lejos) de la caché de múltiples regiones o puede comprobar cada región en paralelo.
Tras una coincidencia de caché (3704, NO), la lógica de gestión de caché puede leer datos de la región asociada con el acierto de caché (3707). Tras un desacierto de caché (3704, SÍ), la lógica de gestión de caché puede leer datos de la memoria o de una caché de nivel superior (3706). Por ejemplo, si la caché de múltiples regiones es una caché L3, los datos se pueden leer desde una caché LLC. De lo contrario, los datos se pueden leer de la memoria.
La lógica de gestión de caché puede determinar a continuación si la región en la que se van a almacenar los datos está llena (3708). Puede usarse una región predeterminada para los datos recién añadidos (por ejemplo, una región cercana). La región en la que se almacenan los datos también puede determinarse, por ejemplo, basándose en las sugerencias de núcleo de sombreador. Las sugerencias de núcleo de sombreador pueden ser sugerencias generadas por el compilador o sugerencias explícitas proporcionadas por un desarrollador del núcleo de sombreador. Las sugerencias de núcleo de sombreador pueden indicar que los datos en cuestión serán accedidos con frecuencia o con poca frecuencia. Los datos a los que se sugiere que se accede con poca frecuencia pueden almacenarse en la región lejana, mientras que los datos a los que se sugiere que se accede con frecuencia pueden almacenarse en la región cercana.
Si la región en la que han de almacenarse los datos no está llena (3708, NO), la lógica de gestión de caché puede almacenar los datos en una región de la caché de múltiples regiones (3712), donde la región en la que se van a almacenar los datos se puede determinar basándose en una sugerencia o se puede seleccionar una región predeterminada. Si la región en la que han de almacenarse los datos está llena, la lógica de gestión de la caché puede desalojar datos de la región de acuerdo con una política de sustitución de caché (3710) antes de almacenar los datos en la región de la caché.
Después de que la lógica de gestión de caché lee datos de la región asociada con el acierto de caché (3707) o desaloja datos de la región de acuerdo con una política de sustitución de caché (3710), la lógica de gestión de caché puede migrar datos entre regiones de acuerdo con la política de migración de caché (3709). Por ejemplo, los datos a los que se accede con mayor frecuencia en la región lejana pueden intercambiarse con datos a los que se accede con menor frecuencia en la región cercana. La migración también puede ocurrir como resultado de la política de sustitución de caché, por ejemplo, si la política de sustitución de SLRU está en uso.
Usando las técnicas anteriores, un experto en la materia puede implementar, por ejemplo, un sistema de procesamiento de datos que comprende un procesador de gráficos de propósito general que incluye un único nivel de memoria caché con una región cercana y una región lejana. La región lejana tiene una capacidad inferior y latencia inferior en relación con la región lejana. El sistema de procesamiento de datos comprende adicionalmente un controlador de caché acoplado a la memoria caché. El controlador de caché incluye lógica de selección de región para seleccionar desde una de la región cercana y la región lejana para almacenar una unidad de datos almacenada en caché. En una realización, la lógica de selección de región está configurada para seleccionar desde una de la región cercana y la región lejana para almacenar la unidad de datos almacenada en caché basándose en métricas de uso asociadas con la unidad de datos almacenada en caché. La lógica de selección de región también puede seleccionar desde una de la región cercana y la región lejana para almacenar la unidad de datos almacenada en caché basándose en una sugerencia asociada con la unidad de datos. La sugerencia asociada con la unidad de datos puede generarse durante la compilación de un núcleo de sombreador a ejecutar por el procesador de propósito general. La sugerencia puede generarse en respuesta a una instrucción dentro del núcleo de sombreador. La instrucción puede indicar una frecuencia de uso para la unidad de datos almacenada en caché.
Sistemas de procesamiento de datos y d ispositivos informáticos ilustrativos adicionales
La Figura 38 es un diagrama de bloques de un sistema de procesamiento de datos 3800, de acuerdo con una realización. El sistema de procesamiento de datos 3800 es un sistema de procesamiento heterogéneo que tiene procesador 3802, memoria unificada 3810 y una GPGPU 3820 que incluye lógica de aceleración de aprendizaje automático. El procesador 3802 y la GPGPU 3820 pueden ser cualquiera de los procesadores y GPGPU/procesadores paralelos como se describe en el presente documento. El procesador 3802 puede ejecutar instrucciones para un compilador 3815 almacenado en la memoria de sistema 3812. El compilador 3815 se ejecuta en el procesador 3802 para compilar el código fuente 3814A en código compilado 3814B. El código compilado 3814B puede incluir instrucciones que pueden ejecutarse por el procesador 3802 y/o instrucciones que pueden ejecutarse por la GPGPU 3820. Durante la compilación, el compilador 3815 puede realizar operaciones para insertar metadatos, incluyendo sugerencias en cuanto al nivel de paralelismo de datos presente en el código compilado 3814B y/o sugerencias con respecto a la localidad de datos asociada con hilos que hay que despachar basándose en el código compilado 3814B. Los metadatos también pueden incluir sugerencias relacionadas con una región de caché cercana o lejana en la que preferentemente se almacenarían los datos del hilo. El compilador 3815 puede incluir la información necesaria para realizar tales operaciones o las operaciones se pueden realizar con la asistencia de una biblioteca de tiempo de ejecución 3816. La biblioteca de tiempo de ejecución 3816 también puede ayudar al compilador 3815 la compilación del código fuente 3814A y también puede incluir instrucciones que están vinculadas en tiempo de ejecución con el código compilado 3814B para facilitar la ejecución de las instrucciones compiladas en la GPGPU 3820.
La memoria unificada 3810 representa un espacio de direcciones unificado al que pueden acceder el procesador 3802 y la GPGPU 3820. La memoria unificada puede incluir la memoria de sistema 3812, así como la memoria de GPGPU 3818. La memoria de GPGPU 3818 es memoria dentro de un espacio de direcciones de la GPGPU 3820 y puede incluir parte o la totalidad de la memoria de sistema 3812. En una realización, la memoria de GPGPU 3818 puede también incluir al menos una porción de cualquier memoria especializada para su uso exclusivamente por la GPGPU 3820. En una realización, el código compilado 3814B almacenado en la memoria de sistema 3812 puede mapearse en la memoria de GPGPU 3818 para su acceso por la GPGPU 3820.
La GPGPU 3820 incluye múltiples bloques de cálculo 3824A-3824N, que pueden incluir uno o más de una diversidad de recursos de procesamiento descritos en el presente documento. Los recursos de procesamiento pueden ser o incluir una diversidad de diferentes recursos computacionales tales como, por ejemplo, unidades de ejecución, unidades de cálculo, multiprocesadores de envío por flujo continuo, multiprocesadores de gráficos o grupos de múltiples núcleos. En una realización, la GPGPU 3820 incluye adicionalmente un acelerador de tensor 3823, que puede incluir una o más unidades de cálculo de funciones especiales diseñadas para acelerar un subconjunto de operaciones matriciales (es decir, producto escalar, etc.). El acelerador de tensor 3823 también puede denominarse acelerador de tenso o núcleo de tensor. En una realización, los componentes lógicos dentro del acelerador de tensor 3823 pueden distribuirse a través de los recursos de procesamiento de los múltiples bloques de cálculo 3824A-3824N.
La GPGPU 3820 también puede incluir un conjunto de recursos que pueden compartir los bloques de cálculo 3824A-3824N y el acelerador de tensor 3823, incluyendo, pero sin limitación, un conjunto de registros 3825, un módulo de potencia y rendimiento 3826 y una caché 3827. En una realización, los registros 3825 incluyen registros directa e indirectamente accesibles, donde los registros indirectamente accesibles están optimizados para su uso por el acelerador de tensor 3823. El módulo de potencia y de rendimiento 3826 puede configurarse para ajustar el suministro de potencia y las frecuencias de reloj para los bloques de cálculo 3824A-3824N para controlar por alimentación componentes en espera dentro de los bloques de cálculo 3824A-3824N. En diversas realizaciones, la caché 3827 puede incluir una caché de instrucciones y/o una caché de datos de nivel inferior.
La GPGPU 3820 puede incluir adicionalmente una caché de datos L3 3830, que puede usarse para almacenar en caché los datos a los que accede desde la memoria unificada 3810 el acelerador de tensor 3823 y/o los elementos de cálculo dentro de los bloques de cálculo 3824A-3824N. En una realización, la caché de datos L33830 incluye memoria local compartida 3832 que puede compartirse por los elementos de cálculo dentro de los bloques de cálculo 3824A-3824N y el acelerador de tensor 3823.
En una realización, la GPGPU 3820 incluye lógica de gestión de instrucciones, tal como una unidad de extracción y descodificación 3821 y un controlador planificador 3822. La unidad de extracción y descodificación 3821 incluye una unidad de extracción y una unidad de descodificación para extraer y descodificar instrucciones para su ejecución por uno o más de los bloques de cálculo 3824A-3824N o el acelerador de tensor 3823. Las instrucciones pueden planificarse para la unidad funcional apropiada dentro del bloque de cálculo 3824A-3824N o el acelerador de tensor a través del controlador planificador 3822. En una realización, el controlador planificador 3822 es un ASIC configurable para realizar operaciones de planificación avanzadas. En una realización, el controlador planificador 3822 es un microcontrolador o un núcleo de procesamiento de baja energía por instrucción que puede ejecutar instrucciones de planificador cargadas desde un módulo de firmware.
En una realización, algunas funciones que van a realizarse por los bloques de cálculo 3824A-3824N pueden planificarse directamente o descargarse al acelerador de tensor 3823. En diversas realizaciones, el acelerador de tensor 3823 incluye lógica de elemento de procesamiento configurada para realizar eficientemente operaciones de cálculo de matrices, tales como operaciones de multiplicación y suma y operaciones de producto escalar usadas por gráficos 3D o programas de sombreado de cálculo. En una realización, el acelerador de tensor 3823 puede configurarse para acelerar operaciones usadas por estructuras de aprendizaje automático. En una realización, el acelerador de tensor 3823 es un circuito integrado específico de la aplicación configurado explícitamente para realizar un conjunto específico de operaciones paralelas de multiplicación y/o suma de matrices. En una realización, el acelerador de tensor 3823 es un campo de matrices de puertas programables (FPGA) que proporciona lógica de función fija que puede actualizarse entre cargas de trabajo. El conjunto de operaciones matriciales que puede realizar el acelerador de tensor 3823 puede estar limitado en relación con las operaciones que puede realizar el bloque de cálculo 3824A-3824N. Sin embargo, el acelerador de tensor 3823 puede realizar estas operaciones con un rendimiento significativamente superior al bloque de cálculo 3824A-3824N.
La Figura 39 es un diagrama de bloques de un dispositivo informático 3900 que incluye un procesador de gráficos 3904, de acuerdo con una realización. El dispositivo informático 3900 puede ser un dispositivo informático que incluye funcionalidad de cada una de las realizaciones descritas anteriormente. El dispositivo informático 3900 puede ser o estar incluido dentro de un dispositivo de comunicación tal como un descodificador de salón (por ejemplo, descodificadores de televisión por cable basados en Internet, etc.), dispositivos basados en el sistema de posicionamiento global (GPS), etc. El dispositivo informático 3900 también puede ser o estar incluido dentro de dispositivos informáticos móviles tales como teléfonos celulares, teléfonos inteligentes, asistentes digitales personales (PDA), tabletas, ordenadores portátiles, lectores electrónicos, televisores inteligentes, plataformas de televisión, dispositivos llevables (por ejemplo, gafas, relojes, pulseras, tarjetas inteligentes, joyas, prendas de vestir, etc.), reproductores multimedia, etc. Por ejemplo, en una realización, el dispositivo informático 3900 incluye un dispositivo informático móvil que emplea un circuito integrado ("CI"), tal como un sistema en un chip ("SoC" o "SOC"), que integra diversos componentes de hardware y/o software del dispositivo informático 3900 en un único chip.
El dispositivo informático 3900 incluye un procesador de gráficos 3904. El procesador de gráficos 3904 representa cualquier procesador de gráficos descrito en el presente documento. El procesador de gráficos incluye uno o más motores gráficos, núcleos de procesador de gráficos y otros recursos de ejecución de gráficos como se ha descrito en el presente documento. Tales recursos de ejecución de gráficos pueden presentarse en formas que incluyen, pero sin limitación, unidades de ejecución, motores de sombreado, procesadores de fragmentos, procesadores de vértices, multiprocesadores de envío por flujo continuo, agrupaciones de procesadores de gráficos o cualquier colección de recursos informáticos adecuada para el procesamiento de recursos gráficos o recursos de imágenes, o para realizar operaciones computacionales de propósito general en un procesador heterogéneo.
En una realización, el procesador de gráficos 3904 incluye una caché 3914, que puede ser una caché única o dividida en múltiples segmentos de memoria caché, incluyendo, pero sin limitación, cualquier número de cachés L1, L2, L3, o L4, cachés de representación, cachés de profundidad, cachés de muestreador, y/o cachés de unidad de sombreado. La memoria caché 3914 puede tener una región cercana y una lejana como se describe en el presente documento. La caché 3914 también puede incluir lógica de función de troceo dinámica que soporta reconfiguración dinámica de un algoritmo de función de troceo de banco de memoria. En algunas realizaciones, el procesador de gráficos 3904 incluye un motor de GPGPU 3944 que incluye memoria local compartida (SLM 3934), así como un archivo de registro 3924, que incluye registros para su uso por el motor de GPGPU 3944. El archivo de registro 3924 puede incluir registros de propósito general, registros de arquitectura, registros de configuración y otros tipos de registros. Un archivo de registro de propósito general (GRF) y/o un archivo de registro arquitectónico (ARF) también pueden residir dentro de recursos de procesamiento dentro de uno o más bloques de unidades de cálculo (por ejemplo, cálculo 3950, cálculo 3955) dentro del motor de GPGPU 3944. También puede estar presente un tejido compartido 3942 que permite una comunicación rápida entre los diversos componentes del motor de GPGPU 3944.
Como se ilustra, en una realización, y además del procesador de gráficos 3904, el dispositivo informático 3900 puede incluir además cualquier número y tipo de componentes de hardware y/o componentes de software, incluyendo, pero sin limitación, un procesador de aplicaciones 3906, memoria 3908, y fuentes de entrada/salida (E/S) 3910. El procesador de aplicaciones 3906 puede interactuar con una canalización de gráficos de hardware para compartir la funcionalidad de la canalización de gráficos. Los datos procesados se almacenan en una memoria intermedia en la canalización de gráficos de hardware y la información de estado se almacena en la memoria 3908. Los datos resultantes pueden transferirse a un controlador de visualización para su salida a través de un dispositivo de visualización, tal como el dispositivo de visualización 318 de la Figura 3A. El dispositivo de visualización puede ser de diversos tipos, tales como tubo de rayos catódicos (CRT), transistor de película fina (TFT), pantalla de cristal líquido (LCD), matriz de diodos orgánicos emisores de luz (OLED), etc., y puede estar configurado para mostrar información a un usuario a través de una interfaz gráfica de usuario.
El procesador de aplicaciones 3906 puede incluir uno o varios procesadores y puede ser la unidad central de procesamiento (CPU) que se usa al menos en parte para ejecutar un sistema operativo (SO) 3902 para el dispositivo informático 3900. Por ejemplo, el procesador de aplicaciones 3906 puede ser la CPU 3002 como en la Figura 30. El SO 3902 puede dar servicio como una interfaz entre el hardware y/o los recursos físicos del dispositivo informático 3900 y uno o más usuarios. El SO 3902 puede incluir lógica de controlador para diversos dispositivos de hardware en el dispositivo informático 3900, incluyendo lógica de controlador de gráficos 3922, tal como el controlador de gráficos de modo de usuario 1026 y/o el controlador de gráficos de modo de núcleo 1029 de la Figura 10.
Se contempla que, en algunas realizaciones, el procesador de gráficos 3904 puede existir como parte del procesador de aplicaciones 3906 (tal como parte de un paquete de CPU físico) en cuyo caso, al menos una porción de la memoria 3908 puede compartirse por el procesador de aplicaciones 3906 y el procesador de gráficos 3904, aunque al menos una porción de la memoria 3908 puede ser exclusiva del procesador de gráficos 3904, o el procesador de gráficos 3904 puede tener un almacén separado de memoria. La memoria 3908 puede comprender una región preasignada de una memoria intermedia (por ejemplo, memoria intermedia de fotogramas); sin embargo, un experto en la materia debería entender que las realizaciones no están limitadas a esto y que se puede usar cualquier memoria accesible a la canalización de gráficos inferior. La memoria 3908 puede incluir diversas formas de memoria de acceso aleatorio (RAM) (por ejemplo, SDRAM, SRAM, etc.) que comprende una aplicación que hace uso del procesador de gráficos 3904 para representar una escena gráfica de escritorio o 3D. Un concentrador de controlador de memoria, tal como, por ejemplo, el concentrador de memoria 105 de la Figura 1, puede acceder a los datos de la memoria 3908 y reenviarlos al procesador de gráficos 3904 para el procesamiento de canalización de gráficos. La memoria 3908 puede estar disponible para otros componentes dentro del dispositivo informático 3900. Por ejemplo, cualquier dato (por ejemplo, datos de gráficos de entrada) recibido desde diversas fuentes de E/S 3910 del dispositivo informático 3900 puede ponerse en cola temporalmente en la memoria 3908 antes de ser operados por uno o más procesador (por ejemplo, el procesador de aplicaciones 3906) en la implementación de un programa o aplicación de software. De manera similar, los datos que un programa de software determina que deben enviarse desde el dispositivo informático 3900 a una entidad externa a través de una de las interfaces del sistema informático, o almacenarse en un elemento de almacenamiento interno, a menudo se ponen en cola temporalmente en la memoria 3908 antes de transmitirse o almacenarse.
Las fuentes de E/S pueden incluir dispositivos tales como pantallas táctiles, paneles táctiles, almohadillas táctiles, teclados virtuales o convencionales, ratones virtuales o convencionales, puertos, conectores, dispositivos de red, o similares, y pueden conectarse a través de un concentrador de E/S 107 como en la Figura 1, circuitería de entrada/salida (E/S) 363 como en la Figura 3, un concentrador de controlador de plataforma 1430 como en la Figura 14, o similares. Adicionalmente, las fuentes de E/S 3910 pueden incluir uno o más dispositivos de E/S que se implementan para transferir datos hacia y/o desde el dispositivo informático 3900 (por ejemplo, un adaptador de interconexión en red); o, para un almacenamiento no volátil a gran escala dentro del dispositivo informático 3900 (por ejemplo, unidad de disco duro). Se pueden usar dispositivos de entrada de usuario, que incluyen teclas alfanuméricas y otras, para comunicar información y ordenar selecciones al procesador de gráficos 3904. Otro tipo de dispositivo de entrada de usuario es el control de cursor, tal como un ratón, una bola de seguimiento, una pantalla táctil, un panel táctil o teclas de dirección de cursor para comunicar información de dirección y selecciones de comandos a la GPU y para controlar el movimiento del cursor en el dispositivo de visualización. Se pueden emplear conjuntos de cámaras y micrófonos del dispositivo informático 3900 para observar gestos, grabar audio y vídeo y recibir y transmitir comandos visuales y de audio.
Las fuentes de E/S 3910 configuradas como interfaces de red pueden proporcionar acceso a una red, tal como una LAN, una red de área extensa (WAN), una red de área metropolitana (MAN), una red de área personal (PAN), Bluetooth, una red en la nube, una red celular o móvil (por ejemplo, 3a generación (3G), 4a generación (4G), 5a generación (5G), etc.), una red por satélite, una intranet, Internet, etc. La interfaz o interfaces de red pueden incluir, por ejemplo, una interfaz de red inalámbrica que tiene una o más antenas. La(s) interfaz/interfaces de red también pueden incluir, por ejemplo, una interfaz de red alámbrica para comunicarse con dispositivos remotos por medio de un cable de red, que puede ser, por ejemplo, un cable Ethernet, un cable coaxial, un cable de fibra óptica, un cable serie o un cable paralelo.
La(s) interfaz(es) de red puede(n) proporcionar acceso a una LAN, por ejemplo, conforme a las normas IEEE 802.11, y/o la interfaz de red inalámbrica puede proporcionar acceso a una red de área personal, por ejemplo, conforme a las normas Bluetooth. También pueden ser compatibles otras interfaces y/o protocolos de red inalámbrica, incluidas versiones anteriores y posteriores de las normas. Además de, o en lugar de, la comunicación por medio de las normas de LAN inalámbrica, la(s) interfaz(es) de red puede(n) proporcionar comunicación inalámbrica usando, por ejemplo, protocolos de acceso múltiple por división de tiempo (TDMA), protocolos de sistemas globales para comunicaciones móviles (GSM), protocolos de acceso múltiple por división de código (CDMA) y/o cualquier otro tipo de protocolos de comunicación inalámbrica.
Debe apreciarse que para determinadas implementaciones puede preferirse un sistema menos o más equipado que el ejemplo descrito anteriormente. Por lo tanto, la configuración del dispositivo informático 3900 puede variar de implementación a implementación dependiendo de numerosos factores, tales como limitaciones de precio, requisitos de rendimiento, mejoras tecnológicas u otras circunstancias. Ejemplos incluyen (sin limitación) un dispositivo móvil, un asistente digital personal, un dispositivo informático móvil, un teléfono inteligente, un teléfono celular, un auricular, un buscapersonas unidireccional, un buscapersonas bidireccional, un dispositivo de mensajería, un ordenador, un ordenador personal (PC), un ordenador de escritorio, un ordenador portátil, un ordenador tipo notebook, un ordenador de mano, una tableta, un servidor, un conjunto de servidores o granja de servidores, un servidor web, un servidor de red, un servidor de Internet, una estación de trabajo, un miniordenador, un ordenador central, un superordenador, un dispositivo de red, un dispositivo web, un sistema informático distribuido, sistemas multiprocesador, sistemas basados en procesador, electrónica de consumo, electrónica de consumo programable, un televisor, un televisor digital, un descodificador, un punto de acceso inalámbrico, una estación base, una estación de abonado, un centro de abonado móvil, un controlador de red de radio, un enrutador, un concentrador, una pasarela, un puente, un conmutador, una máquina o combinaciones de los mismos.
Las realizaciones se pueden implementar como cualquiera o una combinación de uno o más microchips o circuitos integrados interconectados usando una placa base, lógica de cableado permanente, software almacenado por un dispositivo de memoria y ejecutado por un microprocesador, firmware, un circuito integrado específico de la aplicación (ASIC) y/o una matriz de puertas programables en campo (FPGA). El término "lógica" puede incluir, a modo de ejemplo, software o hardware y/o combinaciones de software y hardware.
Se pueden proporcionar realizaciones, por ejemplo, como un producto de programa informático que puede incluir uno o más medios legibles por máquina que tienen almacenados en los mismos instrucciones ejecutables por máquina que, cuando se ejecutan por una o más máquinas tales como un ordenador, una red de ordenadores u otros dispositivos electrónicos, pueden dar como resultado que la una o más máquinas lleven a cabo operaciones de acuerdo con las realizaciones descritas en el presente documento. Un medio legible por máquina puede incluir, pero sin limitación, disquetes, discos ópticos, CD-ROM (memorias de sólo lectura en disco compacto) y discos magnetoópticos, ROM, RAM, EPROM (memorias de sólo lectura programables y borrables), EEPROM (memorias de sólo lectura programables y borrables eléctricamente), tarjetas magnéticas u ópticas, memoria flash u otro tipo de medios legibles por máquina no transitorios adecuados para almacenar instrucciones ejecutables por máquina.
Además, las realizaciones pueden descargarse como un producto de programa informático, en donde el programa puede transferirse desde un ordenador remoto (por ejemplo, un servidor) a un ordenador solicitante (por ejemplo, un cliente) por medio de una o más señales de datos incorporadas en y/o moduladas por una onda portadora u otro medio de propagación a través de un enlace de comunicación (por ejemplo, un módem y/o conexión de red).
La referencia en el presente documento a "una realización" significa que un rasgo, estructura o característica particular descrita junto con la realización puede incluirse en al menos una realización de la invención. Las apariciones de la expresión "en una realización" en diversos lugares de la memoria descriptiva no se refieren todas necesariamente a la misma realización. Los procesos representados en las figuras siguientes pueden realizarse mediante lógica de procesamiento que comprende hardware (por ejemplo, circuitería, lógica especializada, etc.), software (como instrucciones en un medio de almacenamiento no transitorio legible por máquina) o una combinación tanto de hardware como software. Se hará referencia en detalle a diversas realizaciones, ejemplos de las cuales se ilustran en los dibujos adjuntos. En la siguiente descripción detallada, se exponen numerosos detalles específicos para proporcionar un entendimiento completo de la presente invención. Sin embargo, será evidente para un experto en la materia que la presente invención se puede poner en práctica sin estos detalles específicos. En otros casos, no se han descrito en detalle métodos, procedimientos, componentes, circuitos y redes bien conocidos para no oscurecer innecesariamente aspectos de las realizaciones.
También se entenderá que, aunque los términos primero, segundo, etc. pueden usarse en el presente documento para describir diversos elementos, estos elementos no deben limitarse por estos términos. Estos términos únicamente se usan para distinguir un elemento de otro. Por ejemplo, un primer contacto podría denominarse segundo contacto y, de manera similar, un segundo contacto podría denominarse primer contacto. El primer contacto y el segundo son ambos contactos, pero no son el mismo contacto.
La terminología usada en el presente documento es para el propósito describir únicamente realizaciones particulares y no se pretende para limitar todas las realizaciones. Como se usan en la descripción de la invención y en las reivindicaciones adjuntas, las formas singulares "un", "una" y "el/la" están previstas para incluir también las formas plurales, a menos que el contexto indique claramente lo contrario. También se entenderá que el término "y/o" como se usa en el presente documento se refiere y abarca todas y cada una de las posibles combinaciones de uno o más de los elementos enumerados asociados. Se entenderá además que los términos y expresiones "comprende" y/o "que comprende", cuando se usan en esta memoria descriptiva, especifican la presencia de características, elemento integrantes, etapas, operaciones, elementos y/o componentes declarados, pero no excluyen la presencia o adición de uno o más de otras características, elementos integrantes, pasos, operaciones, elementos, componentes y/o grupos de la misma.
Como se usa en el presente documento, el término "si" puede interpretarse como "cuando" o "tras" o "en respuesta a determinar" o "en respuesta a detectar", dependiendo del contexto. De manera similar, la expresión "si se determina" o "si se detecta [una condición o evento declarado]" puede interpretarse en el sentido de "tras determinar" o "en respuesta a determinar" o "tras detectar [la condición o evento declarado]" o "en respuesta a detectar [la condición o evento declarado]", dependiendo del contexto.
Las realizaciones descritas en el presente documento proporcionan técnicas para permitir la reconfiguración dinámica de la memoria en una unidad de procesamiento gráfico de propósito general. Una realización descrita en el presente documento permite la reconfiguración dinámica de las asignaciones de bancos de memoria caché basándose en estadísticas de hardware. Una realización permite la traducción de direcciones de memoria virtual usando páginas mixtas de cuatro kilobytes y 64 kilobytes dentro de la misma jerarquía de tabla de páginas y bajo el mismo directorio de páginas. Una realización proporciona un procesador de gráficos y un sistema de procesamiento heterogéneo asociado que tiene regiones cercanas y lejanas del mismo nivel de una jerarquía de caché.
Una realización proporciona un procesador de gráficos de propósito general que comprende una memoria caché que incluye múltiples bancos de memoria y un controlador de caché acoplado con la memoria caché. El controlador de caché incluye una unidad de función de troceo dinámica para seleccionar, basándose en una primera función de troceo y una dirección asociada con un acceso de memoria, uno o más de los múltiples bancos de memoria para almacenar los datos asociados con el acceso a memoria. El procesador de gráficos de propósito general también incluye hardware de monitor de caché para monitorizar un patrón de acceso de los múltiples bancos de memoria. El hardware de monitor de caché puede solicitar a la unidad de función de troceo dinámica que seleccione una segunda función de troceo para su uso para seleccionar el uno o más de los múltiples bancos de memoria. El hardware de monitor de caché puede solicitar la selección de la segunda función de troceo en respuesta a la detección de una disparidad de patrón de acceso al banco por encima de un umbral.
Una realización proporciona un método que comprende, en un procesador de gráficos de propósito general que incluye una memoria caché que tiene múltiples bancos de memoria y un controlador de caché acoplado con la memoria caché, seleccionar, a través del controlador de caché, un primer conjunto de uno o más bancos de memoria de la memoria caché para acceder en respuesta a una primera solicitud de acceso a memoria a una primera dirección. El primer conjunto de uno o más bancos de memoria se selecciona basándose en una dirección asociada con la solicitud de acceso a memoria y una función de troceo de la dirección de memoria generada mediante una primera función de troceo. El método incluye adicionalmente monitorizar un patrón de acceso a los múltiples bancos de memoria de la memoria caché y, en respuesta a la detección de una disparidad de acceso al banco, solicitar al controlador de caché que cambie de la primera función de troceo a una segunda función de troceo. El método incluye adicionalmente seleccionar, a través del controlador de caché, un segundo conjunto de uno o más bancos de memoria de la memoria caché para acceder en respuesta a una segunda solicitud de acceso a memoria a la primera dirección.
En una realización, el método comprende adicionalmente recibir, en el controlador de caché, la solicitud de cambio de la primera función de troceo a la segunda función de troceo, vaciar la memoria caché y cambiar de la primera función de troceo a la segunda función de troceo. Vaciar la memoria caché incluye escribir líneas de caché modificadas en una memoria adicional acoplada con el procesador de gráficos de propósito general y la invalidación de todas las líneas de caché de la memoria caché.
En una realización, el método comprende adicionalmente monitorizar un estado térmico de los múltiples bancos de memoria y, en respuesta a la detección de que una temperatura de uno o más de los múltiples bancos de memoria supera un umbral, solicitar al controlador de caché que cambie a una tercera función de troceo que es diferente de la segunda función de troceo.
En una realización, el método comprende adicionalmente recibir, en el controlador de caché, una solicitud para vaciar la memoria caché, vaciar la memoria caché y, después de vaciar la memoria caché, cambiar a la segunda función de troceo. El método comprende adicionalmente cambiar, después de vaciar la memoria caché en respuesta a una solicitud de vaciado, cambiar a la tercera función de troceo.
Realizaciones adicionales proporcionan la lógica de procesamiento de gráficos para realizar el método indicado anteriormente. Realizaciones adicionales incluyen también un sistema de procesamiento de datos que incluye la lógica de procesamiento gráfico indicada anteriormente. Las técnicas descritas anteriormente pueden integrarse dentro de o adaptarse a cualquiera de las arquitecturas de procesadores de gráficos o paralelos descritas en el presente documento.
Claims (14)
1. Un procesador de gráficos de propósito general que comprende:
una memoria caché (2708) que incluye múltiples bancos de memoria (2710A-N);
un controlador de caché (2706, 2806) acoplado con la memoria caché (2708), en donde el controlador de caché (2706, 2806) incluye una unidad de función de troceo dinámica (2707, 2807) configurada para seleccionar, basándose en una primera función de troceo y una dirección asociada con un acceso a memoria, uno o más de los múltiples bancos de memoria (2710A-N) para almacenar datos asociados con el acceso a memoria; y
hardware de monitor de caché (2810) configurado para solicitar a la unidad de función de troceo dinámica (2707, 2807) que seleccione una segunda función de troceo para su uso para seleccionar el uno o más de los múltiples bancos de memoria (2710A-N);
el hardware de monitor de caché (2810) está configurado para monitorizar un patrón de acceso de los múltiples bancos de memoria (2710A-N) y para solicitar la selección de la segunda función de troceo en respuesta a la detección de una disparidad de patrón de acceso a bancos por encima de un umbral, en donde dicha disparidad de patrón de acceso a bancos corresponde al número de accesos a uno de los múltiples bancos de memoria (2710A-N) en relación con el número de accesos a los otros bancos de memoria de los múltiples bancos de memoria (2710A-N).
2. El procesador de gráficos de propósito general de acuerdo con la reivindicación 1, en donde la memoria caché (2708) es una memoria caché de nivel 1, nivel 2 o nivel 3 (2708) del procesador de gráficos de propósito general.
3. El procesador de gráficos de propósito general de acuerdo con la reivindicación 1, en donde la memoria caché (2708) incluye adicionalmente hardware (2818) configurado para monitorizar un estado térmico de los múltiples bancos de memoria (2710A-N) e informar del estado térmico al hardware de monitor de caché (2810.
4. El procesador de gráficos de propósito general de acuerdo con la reivindicación 3, en donde el hardware de monitor de caché (2810) está configurado para solicitar a la unidad de función de troceo dinámica (2707, 2807) que seleccione la segunda función de troceo en respuesta a una determinación de que una temperatura de uno o más de los múltiples bancos de memoria (2710A-N) supera un umbral.
5. El procesador de gráficos de propósito general de acuerdo con la reivindicación 3, en donde el hardware de monitor de caché (2810) está configurado para solicitar a la unidad de función de troceo dinámica (2707, 2807) que seleccione una tercera función de troceo en respuesta a una determinación de que una temperatura de uno o más de los múltiples bancos de memoria (2710A-N) supera un umbral.
6. El procesador de gráficos de propósito general de acuerdo con la reivindicación 1, en donde la unidad de función de troceo dinámica (2707, 2807) es una unidad de hardware del controlador de caché (2706, 2806).
7. El procesador de gráficos de propósito general de acuerdo con la reivindicación 1, en donde la unidad de función de troceo dinámica (2707, 2807) incluye firmware ejecutado por un microcontrolador asociado con el controlador de caché (2706, 2806).
8. Un sistema, que comprende:
un dispositivo de memoria; y
un procesador de gráficos de propósito general de acuerdo con una de las reivindicaciones 1 a 7.
9. Un método que comprende:
en un procesador de gráficos de propósito general que incluye una memoria caché (2708) que tiene múltiples bancos de memoria (2710A-N) y un controlador de caché (2706, 2806) acoplado con la memoria caché (2708): seleccionar, a través del controlador de caché (2706, 2806), un primer conjunto de uno o más bancos de memoria (2710A-N) de la memoria caché (2708) para acceder en respuesta a una primera solicitud de acceso a memoria a una primera dirección de memoria, en donde el primer conjunto de uno o más bancos de memoria (2710A-N) se selecciona basándose en una dirección asociada con la primera solicitud de acceso a memoria y una función de troceo de la primera dirección de memoria, la función de troceo generada a través de una primera función de troceo; monitorizar un patrón de acceso a los múltiples bancos de memoria (2710A-N) de la memoria caché (2708); en respuesta a la detección de una disparidad de acceso al banco por encima de un umbral, solicitar que el controlador de caché (2706, 2806) cambie de la primera función de troceo a una segunda función de troceo, en donde dicha disparidad de patrón de acceso al banco corresponde al número de accesos a uno de los múltiples bancos de memoria (2710A-N) en relación con el número de accesos a los otros bancos de memoria de los múltiples bancos de memoria (2710A-N); y
seleccionar, a través del controlador de caché (2706, 2806), un segundo conjunto de uno o más bancos de memoria (2710A-N) de la memoria caché (2708) para acceder en respuesta a una segunda solicitud de acceso a memoria a la primera dirección de memoria.
10. El método de acuerdo con la reivindicación 9, que comprende, además:
recibir, en el controlador de caché (2706, 2806), la solicitud para cambiar de la primera función de troceo a la segunda función de troceo;
vaciar la memoria caché (2708); y
cambiar de la primera función de troceo a la segunda función de troceo.
11. El método de acuerdo con la reivindicación 10, en donde el vaciado de la memoria caché (2708) incluye: escribir líneas de caché modificadas en una memoria adicional acoplada con el procesador de gráficos de propósito general; e
invalidar todas las líneas de caché en la memoria caché (2708).
12. El método de acuerdo con la reivindicación 9, que comprende, además:
monitorizar el estado térmico de los múltiples bancos de memoria (2710A-N); y
en respuesta a la detección de que una temperatura de uno o más de los múltiples bancos de memoria (2710A-N) supera un umbral, solicitar al controlador de caché (2706, 2806) que cambie a una tercera función de troceo que es diferente de la segunda función de troceo.
13. El método de acuerdo con la reivindicación 12, que comprende, además:
recibir, en el controlador de caché (2706, 2806), una solicitud para vaciar la memoria caché (2708);
vaciar la memoria caché (2708); y
después de vaciar la memoria caché (2708), cambiar a la segunda función de troceo.
14. El método de acuerdo con la reivindicación 12, que comprende, además:
recibir, en el controlador de caché (2706, 2806), una solicitud para vaciar la memoria caché (2708);
vaciar la memoria caché (2708); y
después de vaciar la memoria caché (2708), cambiar a la tercera función de troceo.
Applications Claiming Priority (4)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201962819435P | 2019-03-15 | 2019-03-15 | |
| US201962819361P | 2019-03-15 | 2019-03-15 | |
| US201962819337P | 2019-03-15 | 2019-03-15 | |
| PCT/US2020/022838 WO2020190800A1 (en) | 2019-03-15 | 2020-03-14 | Dynamic memory reconfiguration |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES3003288T3 true ES3003288T3 (en) | 2025-03-10 |
Family
ID=70277485
Family Applications (5)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES20718903T Active ES3003288T3 (en) | 2019-03-15 | 2020-03-14 | Dynamic memory reconfiguration |
| ES21192702T Active ES2996958T3 (en) | 2019-03-15 | 2020-03-14 | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format |
| ES20719794T Active ES2965299T3 (es) | 2019-03-15 | 2020-03-14 | Técnicas de gestión de controlador de memoria |
| ES20718902T Active ES2964969T3 (es) | 2019-03-15 | 2020-03-14 | Gestión de memoria de múltiples teselas para detectar un acceso trans-tesela, proporcionar un ajuste a escala de inferencia de múltiples teselas y proporcionar una migración de página óptima |
| ES20719251T Active ES3039059T3 (en) | 2019-03-15 | 2020-03-14 | Multi-tile memory management |
Family Applications After (4)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES21192702T Active ES2996958T3 (en) | 2019-03-15 | 2020-03-14 | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format |
| ES20719794T Active ES2965299T3 (es) | 2019-03-15 | 2020-03-14 | Técnicas de gestión de controlador de memoria |
| ES20718902T Active ES2964969T3 (es) | 2019-03-15 | 2020-03-14 | Gestión de memoria de múltiples teselas para detectar un acceso trans-tesela, proporcionar un ajuste a escala de inferencia de múltiples teselas y proporcionar una migración de página óptima |
| ES20719251T Active ES3039059T3 (en) | 2019-03-15 | 2020-03-14 | Multi-tile memory management |
Country Status (10)
| Country | Link |
|---|---|
| US (40) | US20220197800A1 (es) |
| EP (9) | EP3974968B1 (es) |
| JP (6) | JP7107482B2 (es) |
| KR (1) | KR102596790B1 (es) |
| CN (15) | CN113454587A (es) |
| BR (1) | BR112021016111A2 (es) |
| DE (4) | DE112020000874T5 (es) |
| ES (5) | ES3003288T3 (es) |
| PL (5) | PL3974968T3 (es) |
| WO (15) | WO2020190797A1 (es) |
Families Citing this family (150)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2017049594A1 (en) * | 2015-09-25 | 2017-03-30 | Intel Corporation | Efficient memory activation at runtime |
| US10034407B2 (en) | 2016-07-22 | 2018-07-24 | Intel Corporation | Storage sled for a data center |
| EP3549350A4 (en) | 2016-11-29 | 2021-03-24 | Intel Corporation | MILLIMETRIC WAVE CHASSIS INTERCONNECTION TECHNOLOGIES |
| US20180150256A1 (en) | 2016-11-29 | 2018-05-31 | Intel Corporation | Technologies for data deduplication in disaggregated architectures |
| US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
| US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
| US20190044809A1 (en) | 2017-08-30 | 2019-02-07 | Intel Corporation | Technologies for managing a flexible host interface of a network interface controller |
| JP7408671B2 (ja) | 2019-03-15 | 2024-01-05 | インテル コーポレイション | シストリックアレイに対するブロックスパース演算のためのアーキテクチャ |
| US12182035B2 (en) | 2019-03-15 | 2024-12-31 | Intel Corporation | Systems and methods for cache optimization |
| EP3974968B1 (en) | 2019-03-15 | 2024-09-04 | Intel Corporation | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format |
| US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
| GB2582782A (en) * | 2019-04-02 | 2020-10-07 | Graphcore Ltd | Graph conversion method |
| US11321511B2 (en) * | 2019-07-09 | 2022-05-03 | SiFive, Inc. | Reset crossing and clock crossing interface for integrated circuit generation |
| US20210048806A1 (en) * | 2019-08-16 | 2021-02-18 | Arizona Board Of Regents On Behalf Of Arizona State University | System and methods for gray-box adversarial testing for control systems with machine learning components |
| US11663746B2 (en) | 2019-11-15 | 2023-05-30 | Intel Corporation | Systolic arithmetic on sparse data |
| US11861761B2 (en) | 2019-11-15 | 2024-01-02 | Intel Corporation | Graphics processing unit processing and caching improvements |
| US11442631B2 (en) * | 2019-12-26 | 2022-09-13 | Micron Technology, Inc. | Memory operations with consideration for wear leveling |
| US11599376B1 (en) * | 2020-02-20 | 2023-03-07 | Amazon Technologies, Inc. | Deep learning architecture for edge computing system |
| US11907855B2 (en) * | 2020-03-30 | 2024-02-20 | Arm Limited | Data transfers in neural processing |
| CN111523642B (zh) * | 2020-04-10 | 2023-03-28 | 星宸科技股份有限公司 | 用于卷积运算的数据重用方法、运算方法及装置、芯片 |
| WO2021210527A1 (ja) * | 2020-04-13 | 2021-10-21 | LeapMind株式会社 | ニューラルネットワーク回路の制御方法 |
| LU101770B1 (en) | 2020-05-05 | 2021-11-05 | Microsoft Technology Licensing Llc | Memory page markings as logging cues for processor-based execution tracing |
| LU101768B1 (en) | 2020-05-05 | 2021-11-05 | Microsoft Technology Licensing Llc | Recording a cache coherency protocol trace for use with a separate memory value trace |
| LU101767B1 (en) * | 2020-05-05 | 2021-11-05 | Microsoft Technology Licensing Llc | Recording a memory value trace for use with a separate cache coherency protocol trace |
| US11640443B2 (en) | 2020-05-28 | 2023-05-02 | Hewlett Packard Enterprise Development Lp | Distributing matrix multiplication processing among processing nodes |
| US11687376B2 (en) | 2020-06-12 | 2023-06-27 | Baidu Usa Llc | Method for data protection in a data processing cluster with dynamic partition |
| US11687629B2 (en) * | 2020-06-12 | 2023-06-27 | Baidu Usa Llc | Method for data protection in a data processing cluster with authentication |
| US11563745B2 (en) | 2020-06-12 | 2023-01-24 | Baidu Usa Llc | Method for data protection in a data processing cluster with policy-based partition |
| US11847501B2 (en) | 2020-06-12 | 2023-12-19 | Baidu Usa Llc | Method for data protection in a data processing cluster with partition |
| US11393250B2 (en) * | 2020-06-21 | 2022-07-19 | Actimize Ltd. | Sentiment analysis of content using expression recognition |
| KR20210157624A (ko) * | 2020-06-22 | 2021-12-29 | 삼성전자주식회사 | 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템 |
| US11823018B1 (en) * | 2020-06-30 | 2023-11-21 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth |
| US11687831B1 (en) | 2020-06-30 | 2023-06-27 | Cadence Design Systems, Inc. | Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference |
| US11676068B1 (en) | 2020-06-30 | 2023-06-13 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis |
| US11651283B1 (en) * | 2020-06-30 | 2023-05-16 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights |
| US11615320B1 (en) | 2020-06-30 | 2023-03-28 | Cadence Design Systems, Inc. | Method, product, and apparatus for variable precision weight management for neural networks |
| GB2596864A (en) * | 2020-07-10 | 2022-01-12 | Graphcore Ltd | Machine learning computer |
| JP2022016795A (ja) * | 2020-07-13 | 2022-01-25 | 富士通株式会社 | 情報処理装置、情報処理プログラムおよび情報処理方法 |
| US11658922B2 (en) | 2020-08-31 | 2023-05-23 | Micron Technology, Inc. | Optional path ordering in packet-based network |
| US11392527B2 (en) * | 2020-08-31 | 2022-07-19 | Micron Technology, Inc. | Ordered delivery of data packets based on type of path information in each packet |
| JP7536574B2 (ja) * | 2020-09-16 | 2024-08-20 | キオクシア株式会社 | 演算デバイス、計算機システム、及び演算方法 |
| US11636041B2 (en) * | 2020-10-12 | 2023-04-25 | Seagate Technology Llc | Object storage data storage systems and methods |
| CN112395062A (zh) * | 2020-11-17 | 2021-02-23 | 深圳前海微众银行股份有限公司 | 任务处理方法、装置、设备及计算机可读存储介质 |
| US12437199B2 (en) * | 2020-11-24 | 2025-10-07 | Arm Limited | Activation compression method for deep learning acceleration |
| CN112506567B (zh) * | 2020-11-27 | 2022-11-04 | 海光信息技术股份有限公司 | 数据读取方法和数据读取电路 |
| US12455995B2 (en) * | 2020-12-10 | 2025-10-28 | Memryx Incorporated | Chiplet based artificial intelligence accelerators and configuration methods |
| US12130738B2 (en) * | 2020-12-22 | 2024-10-29 | Intel Corporation | Compressed cache memory with decompress on fault |
| US12028094B2 (en) | 2020-12-23 | 2024-07-02 | Intel Corporation | Application programming interface for fine grained low latency decompression within processor core |
| US12106104B2 (en) | 2020-12-23 | 2024-10-01 | Intel Corporation | Processor instructions for data compression and decompression |
| US12182018B2 (en) * | 2020-12-23 | 2024-12-31 | Intel Corporation | Instruction and micro-architecture support for decompression on core |
| US12111775B2 (en) * | 2020-12-26 | 2024-10-08 | Intel Corporation | Memory hub providing cache coherency protocol system method for multiple processor sockets comprising multiple XPUs |
| US12056374B2 (en) | 2021-02-03 | 2024-08-06 | Alibaba Group Holding Limited | Dynamic memory coherency biasing techniques |
| US20220318013A1 (en) * | 2021-03-25 | 2022-10-06 | Intel Corporation | Supporting 8-bit floating point format operands in a computing architecture |
| GB2605375B (en) * | 2021-03-29 | 2023-11-29 | Advanced Risc Mach Ltd | Data processors |
| US20220320042A1 (en) | 2021-03-30 | 2022-10-06 | Advanced Micro Devices, Inc. | Die stacking for modular parallel processors |
| EP4100835A1 (en) * | 2021-04-26 | 2022-12-14 | Google LLC | Efficiently allocating memory on neural network compute tiles |
| KR102841875B1 (ko) * | 2021-05-11 | 2025-08-05 | 한국전자통신연구원 | 메모리 접근 방법 및 장치 |
| US12288283B2 (en) * | 2021-06-24 | 2025-04-29 | Intel Corporation | Out-of-order pixel shading and rasterization |
| US20220414815A1 (en) * | 2021-06-24 | 2022-12-29 | Intel Corporation | Sort middle architecture for multiple graphics processing units |
| US12443407B2 (en) * | 2021-06-30 | 2025-10-14 | Advanced Micro Devices, Inc. | Accelerated processing device and method of sharing data for machine learning |
| US12050800B2 (en) | 2021-07-01 | 2024-07-30 | Samsung Electronics Co., Ltd. | Systems and methods for reordering data in a storage device based on data access patterns |
| US12190405B2 (en) * | 2021-07-06 | 2025-01-07 | Intel Corporation | Direct memory writes by network interface of a graphics processing unit |
| US12147528B2 (en) * | 2021-07-22 | 2024-11-19 | VMware LLC | Coherence-based attack detection |
| US12045474B2 (en) * | 2021-08-02 | 2024-07-23 | Red Hat, Inc. | Efficient dirty page expiration |
| US12379927B2 (en) | 2021-08-31 | 2025-08-05 | Intel Corporation | BFLOAT16 scale and/or reduce instructions |
| US12229554B2 (en) | 2021-08-31 | 2025-02-18 | Intel Corporation | BFLOAT16 fused multiply instructions |
| US20230083345A1 (en) * | 2021-09-07 | 2023-03-16 | Nvidia Corporation | Multi-architecture execution graphs |
| US12242851B2 (en) | 2021-09-09 | 2025-03-04 | Intel Corporation | Verifying compressed stream fused with copy or transform operations |
| CN115841415A (zh) * | 2021-09-18 | 2023-03-24 | 平头哥(上海)半导体技术有限公司 | 处理系统、操作处理系统的方法和计算机可读存储介质 |
| US11775307B2 (en) | 2021-09-24 | 2023-10-03 | Apple Inc. | Systems and methods for synchronizing data processing in a cellular modem |
| US12093155B2 (en) * | 2021-09-24 | 2024-09-17 | Qualcomm Incorporated | Allocation of data sub-tensors onto hardware sub-arrays |
| US11705091B2 (en) | 2021-09-30 | 2023-07-18 | Qualcomm Incorporated | Parallelization of GPU composition with DPU topology selection |
| US20230109990A1 (en) * | 2021-10-07 | 2023-04-13 | Intel Corporation | Modular gpu architecture for clients and servers |
| EP4402554A1 (en) * | 2021-10-19 | 2024-07-24 | Google Llc | Large-scale accelerator system energy performance optimization |
| US12450698B2 (en) * | 2021-11-05 | 2025-10-21 | Intel Corporation | Joint denoising and supersampling of graphics data |
| US12475363B2 (en) * | 2021-11-08 | 2025-11-18 | Groq, Inc. | Tensor processor visualization and analysis tool |
| CN114071222B (zh) * | 2021-11-15 | 2023-07-25 | 深圳Tcl新技术有限公司 | 音视频数据共享装置及电子设备 |
| CN114037807B (zh) * | 2021-11-24 | 2023-03-28 | 深圳市云鼠科技开发有限公司 | 低内存占用的链式栅格地图构建方法、装置及计算机设备 |
| US11762560B2 (en) * | 2021-12-06 | 2023-09-19 | Meta Platforms, Inc. | Optimizing NOC performance using crossbars |
| US12197350B2 (en) | 2021-12-10 | 2025-01-14 | Samsung Electronics Co., Ltd. | Low-latency input data staging to execute kernels |
| US11989142B2 (en) | 2021-12-10 | 2024-05-21 | Samsung Electronics Co., Ltd. | Efficient and concurrent model execution |
| US12417182B2 (en) | 2021-12-14 | 2025-09-16 | Intel Corporation | De-prioritizing speculative code lines in on-chip caches |
| US12360768B2 (en) | 2021-12-16 | 2025-07-15 | Intel Corporation | Throttling code fetch for speculative code paths |
| CN116303134A (zh) | 2021-12-21 | 2023-06-23 | Arm有限公司 | 高速缓存系统 |
| US20230195626A1 (en) * | 2021-12-21 | 2023-06-22 | Advanced Micro Devices, Inc. | Variable dispatch walk for successive cache accesses |
| US20230195509A1 (en) * | 2021-12-21 | 2023-06-22 | Advanced Micro Devices, Inc. | Variable dispatch walk |
| US20230224239A1 (en) * | 2022-01-13 | 2023-07-13 | Nvidia Corporation | Network multicasting using alternate sets of directives |
| US12326820B2 (en) * | 2022-01-18 | 2025-06-10 | Nvidia Corporation | Multicast and reflective memory behavior for memory model consistency |
| KR20230114577A (ko) | 2022-01-25 | 2023-08-01 | 삼성전자주식회사 | 데이터 처리 장치 및 방법 |
| US20230289398A1 (en) * | 2022-03-10 | 2023-09-14 | Nvidia Corporation | Efficient Matrix Multiply and Add with a Group of Warps |
| CN114331806A (zh) * | 2022-03-17 | 2022-04-12 | 南京砺算科技有限公司 | 图形处理器及图形处理方法 |
| US12443363B2 (en) * | 2022-03-18 | 2025-10-14 | Nvidia Corporation | High bandwidth extended memory in a parallel processing system |
| US11940909B2 (en) * | 2022-04-26 | 2024-03-26 | Texas Instruments Incorporated | Dynamic mapping of data to lower latency memory based on data access |
| CN114896058B (zh) * | 2022-04-27 | 2023-09-22 | 南京鼎华智能系统有限公司 | 基于内存运算的派工系统以及派工方法 |
| CN114742691B (zh) * | 2022-05-19 | 2023-08-18 | 支付宝(杭州)信息技术有限公司 | 一种图数据采样方法和系统 |
| US11941742B2 (en) * | 2022-06-23 | 2024-03-26 | Apple Inc. | Tiled processor communication fabric |
| CN115220657A (zh) * | 2022-06-27 | 2022-10-21 | 湖南大学 | 层级数据关系的获取方法、装置及其计算机设备 |
| US12026380B2 (en) * | 2022-06-30 | 2024-07-02 | Advanced Micro Devices, Inc. | Dynamic memory reconfiguration |
| US20240054595A1 (en) * | 2022-08-10 | 2024-02-15 | Intel Corporation | Concurrent compute context |
| TWI806747B (zh) * | 2022-08-22 | 2023-06-21 | 創鑫智慧股份有限公司 | 計算裝置及其資料存取方法 |
| US12315066B2 (en) * | 2022-08-23 | 2025-05-27 | Innosilicon Microelectronics (Zhuhai) Co., Ltd. | Graphics processing method and system |
| US11941066B1 (en) | 2022-09-01 | 2024-03-26 | ZenPayroll, Inc. | Navigation goal identification using clustering |
| US11863641B1 (en) * | 2022-09-01 | 2024-01-02 | ZenPayroll, Inc. | Predictive web navigation |
| GB2622074B (en) | 2022-09-01 | 2025-02-26 | Advanced Risc Mach Ltd | Cache systems |
| US12050780B2 (en) * | 2022-09-06 | 2024-07-30 | Micron Technology, Inc. | Adaptive temperature protection for a memory controller |
| JP2024043364A (ja) | 2022-09-16 | 2024-03-29 | キオクシア株式会社 | メモリコントローラ、メモリコントローラの制御方法、およびメモリシステム |
| TWI818732B (zh) * | 2022-09-16 | 2023-10-11 | 新唐科技股份有限公司 | 記憶體裝置及其操作方法 |
| US12379841B2 (en) | 2022-09-20 | 2025-08-05 | Samsung Electronics Co., Ltd. | Systems and methods for performing data compression in memory |
| US20240111686A1 (en) * | 2022-09-29 | 2024-04-04 | Samsung Electronics Co., Ltd. | Application processor, system-on-a-chip and method of operation thereof |
| CN117915018A (zh) * | 2022-10-12 | 2024-04-19 | 瑞昱半导体股份有限公司 | 应用于多通道视频播放的内存管理方法与视频播放系统 |
| CN115391124B (zh) * | 2022-10-27 | 2023-03-21 | 瀚博半导体(上海)有限公司 | 一种面向图形芯片功耗测试的方法及装置 |
| US12224774B2 (en) | 2022-11-16 | 2025-02-11 | Samsung Electronics Co., Ltd. | Runtime reconfigurable compression format conversion |
| KR102846987B1 (ko) * | 2022-11-22 | 2025-08-18 | 한국과학기술정보연구원 | 클라우드 그래픽 프로세싱 시스템 및 방법 |
| CN115756384B (zh) * | 2022-11-22 | 2024-05-17 | 海光信息技术股份有限公司 | 张量计算单元及使用方法、数据处理装置及操作方法 |
| US12271767B2 (en) | 2022-12-03 | 2025-04-08 | Samsung Electronics Co., Ltd. | Near-storage format transformation |
| US12373107B2 (en) * | 2022-12-13 | 2025-07-29 | Groq, Inc. | Method to manage periodic dram refresh and maintenance scheduling for predictable dram data access |
| KR102772731B1 (ko) * | 2022-12-27 | 2025-02-26 | 리벨리온 주식회사 | 뉴럴 프로세싱 장치 및 그의 tlb 업데이트 방법 |
| US12399839B1 (en) * | 2022-12-28 | 2025-08-26 | Advanced Micro Devices, Inc. | Dynamically controlled cache rinsing |
| US20240289713A1 (en) * | 2023-02-27 | 2024-08-29 | Tracelink, Inc. | Extensible state-based workflows |
| US12360900B2 (en) | 2023-03-15 | 2025-07-15 | Samsung Electronics Co., Ltd. | Processor, system, and method for dynamic cache allocation |
| US20230221994A1 (en) * | 2023-03-16 | 2023-07-13 | Arnab Raha | Dynamic uncompression for channel-separable operation in neural network |
| US12259833B2 (en) | 2023-03-28 | 2025-03-25 | Xilinx, Inc. | Descriptor fetching for a multi-queue direct memory access system |
| US12411780B2 (en) | 2023-03-28 | 2025-09-09 | Xilinx, Inc. | Variable buffer size descriptor fetching for a multi-queue direct memory access system |
| US12332801B2 (en) | 2023-03-28 | 2025-06-17 | Xilinx, Inc. | Descriptor cache eviction for multi-queue direct memory access |
| US12411785B2 (en) | 2023-03-30 | 2025-09-09 | Xilinx, Inc. | Direct memory access system with read reassembly circuit |
| US12468634B2 (en) * | 2023-04-05 | 2025-11-11 | Samsung Electronics Co., Ltd. | System and method for page mirroring for storage |
| CN116382593A (zh) * | 2023-04-28 | 2023-07-04 | 昆仑芯(北京)科技有限公司 | 数据处理装置、方法、电子设备和存储介质 |
| US20240386259A1 (en) * | 2023-05-16 | 2024-11-21 | Microsoft Technology Licensing, Llc | In-place tensor format change |
| US20240420274A1 (en) * | 2023-06-16 | 2024-12-19 | Intel Corporation | Coarse and fine filtering for gpu hardware-based performance monitoring |
| WO2024263962A2 (en) | 2023-06-23 | 2024-12-26 | Rain Neuromorphics Inc. | Flexible compute engine microarchitecture |
| US20250004961A1 (en) * | 2023-06-29 | 2025-01-02 | Xilinx, Inc. | Multi-host and multi-client direct memory access system having a read scheduler |
| WO2025029833A2 (en) * | 2023-07-31 | 2025-02-06 | Rain Neuromorphics Inc. | Improved tiled in-memory computing architecture |
| CN116755779B (zh) * | 2023-08-18 | 2023-12-05 | 腾讯科技(深圳)有限公司 | 循环间隔的确定方法、装置、设备、存储介质及芯片 |
| CN117130663B (zh) * | 2023-09-19 | 2024-06-11 | 摩尔线程智能科技(北京)有限责任公司 | 一种指令读取方法及l2指令缓存、电子设备和存储介质 |
| US12386774B2 (en) * | 2023-10-13 | 2025-08-12 | d-MATRIX CORPORATION | AI accelerator apparatus using full mesh connectivity chiplet devices for transformer workloads |
| TWI867814B (zh) * | 2023-10-25 | 2024-12-21 | 大陸商星宸科技股份有限公司 | 人工智慧模型的建立方法及執行方法 |
| US20250139191A1 (en) * | 2023-10-27 | 2025-05-01 | Expedera, Inc. | Systems and Methods of Floating-Point Vector Operations for Neural Networks and Convolutions |
| US20240078180A1 (en) * | 2023-11-15 | 2024-03-07 | Intel Corporation | Evenly distributing hierarchical binary hashes for strided workloads |
| GB2635733A (en) * | 2023-11-23 | 2025-05-28 | Advanced Risc Mach Ltd | Technique for performing custom operations on data in memory |
| US12327116B1 (en) * | 2023-11-29 | 2025-06-10 | Star Ally International Limited | Processor for configurable parallel computations |
| US20250225081A1 (en) * | 2024-01-09 | 2025-07-10 | Qualcomm Incorporated | Priority-based cache eviction policy governed by latency critical central processing unit (cpu) cores |
| US20250284307A1 (en) * | 2024-03-06 | 2025-09-11 | Nvidia Corporation | Processor clock scaling technique |
| DE102024202781A1 (de) | 2024-03-22 | 2025-09-25 | Robert Bosch Gesellschaft mit beschränkter Haftung | Chiplet-System und Verfahren für ein Chiplet-System |
| CN118312465B (zh) * | 2024-04-12 | 2025-01-03 | 清华大学 | 广域网大模型训练的方法、装置、电子设备及存储介质 |
| WO2025234980A1 (en) * | 2024-05-06 | 2025-11-13 | Google Llc | Lookup table for allocating stream identifiers to virtual and physical memory address regions |
| TWI875601B (zh) * | 2024-05-30 | 2025-03-01 | 詹程凱 | 再生能源算力轉換器 |
| CN118505492B (zh) * | 2024-07-17 | 2024-10-22 | 武汉凌久微电子有限公司 | 一种基于多级Cache高速缓存的GPU存储结构 |
| CN119829482A (zh) * | 2024-12-19 | 2025-04-15 | 海光信息技术股份有限公司 | 缓存装置及其操作方法、处理器、设备及介质 |
| CN120179176B (zh) * | 2025-03-17 | 2025-08-26 | 昱格电子科技有限公司 | 基于云计算的数据全闪存储优化方法及系统 |
| CN120469721B (zh) * | 2025-07-15 | 2025-09-30 | 上海壁仞科技股份有限公司 | 人工智能芯片的向量核模块及其操作方法 |
Family Cites Families (537)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US3872442A (en) | 1972-12-14 | 1975-03-18 | Sperry Rand Corp | System for conversion between coded byte and floating point format |
| US4476523A (en) | 1981-06-11 | 1984-10-09 | Data General Corporation | Fixed point and floating point computation units using commonly shared control fields |
| US4823252A (en) | 1986-03-28 | 1989-04-18 | Tandem Computers Incorporated | Overlapped control store |
| US4823260A (en) | 1987-11-12 | 1989-04-18 | Intel Corporation | Mixed-precision floating point operations from a single instruction opcode |
| CN1168004C (zh) * | 1989-05-17 | 2004-09-22 | 国际商业机器公司 | 在数据处理系统中提供容错环境和体系结构的装置 |
| US5182801A (en) | 1989-06-09 | 1993-01-26 | Digital Equipment Corporation | Apparatus and method for providing fast data transfer between multiple devices through dynamic reconfiguration of the memory space of the devices |
| JP2581236B2 (ja) | 1989-11-16 | 1997-02-12 | 三菱電機株式会社 | データ処理装置 |
| US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
| JP2682232B2 (ja) | 1990-11-21 | 1997-11-26 | 松下電器産業株式会社 | 浮動小数点演算処理装置 |
| US5381539A (en) * | 1992-06-04 | 1995-01-10 | Emc Corporation | System and method for dynamically controlling cache management |
| GB9307359D0 (en) | 1993-04-08 | 1993-06-02 | Int Computers Ltd | Cache replacement mechanism |
| US5450607A (en) | 1993-05-17 | 1995-09-12 | Mips Technologies Inc. | Unified floating point and integer datapath for a RISC processor |
| US5574928A (en) | 1993-10-29 | 1996-11-12 | Advanced Micro Devices, Inc. | Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments |
| US5623636A (en) | 1993-11-09 | 1997-04-22 | Motorola Inc. | Data processing system and method for providing memory access protection using transparent translation registers and default attribute bits |
| US5627985A (en) | 1994-01-04 | 1997-05-06 | Intel Corporation | Speculative and committed resource files in an out-of-order processor |
| CN1107597A (zh) | 1994-02-24 | 1995-08-30 | 吴乾弥 | 管线式与心跳式及单指令多数据流的阵列处理架构及方法 |
| US5673407A (en) | 1994-03-08 | 1997-09-30 | Texas Instruments Incorporated | Data processor having capability to perform both floating point operations and memory access in response to a single instruction |
| GB2296155B (en) | 1994-06-22 | 1997-04-23 | Microsoft Corp | Data decompression circuit |
| US5512921A (en) * | 1994-06-22 | 1996-04-30 | Microsoft Corporation | Visual display system having low energy data storage subsystem with date compression capabilities, and method for operating same |
| US5805475A (en) | 1995-02-10 | 1998-09-08 | International Business Machines Corporation | Load-store unit and method of loading and storing single-precision floating-point registers in a double-precision architecture |
| US5777629A (en) | 1995-03-24 | 1998-07-07 | 3Dlabs Inc. Ltd. | Graphics subsystem with smart direct-memory-access operation |
| US5651137A (en) * | 1995-04-12 | 1997-07-22 | Intel Corporation | Scalable cache attributes for an input/output bus |
| US5983257A (en) | 1995-12-26 | 1999-11-09 | Intel Corporation | System for signal processing using multiply-add operations |
| US5940311A (en) | 1996-04-30 | 1999-08-17 | Texas Instruments Incorporated | Immediate floating-point operand reformatting in a microprocessor |
| US5917741A (en) | 1996-08-29 | 1999-06-29 | Intel Corporation | Method and apparatus for performing floating-point rounding operations for multiple precisions using incrementers |
| JP3790307B2 (ja) | 1996-10-16 | 2006-06-28 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
| US5887160A (en) | 1996-12-10 | 1999-03-23 | Fujitsu Limited | Method and apparatus for communicating integer and floating point data over a shared data path in a single instruction pipeline processor |
| US6078940A (en) | 1997-01-24 | 2000-06-20 | Texas Instruments Incorporated | Microprocessor with an instruction for multiply and left shift with saturate |
| US5943687A (en) | 1997-03-14 | 1999-08-24 | Telefonakiebolaget Lm Ericsson | Penalty-based cache storage and replacement techniques |
| JP4227218B2 (ja) * | 1997-04-30 | 2009-02-18 | キヤノン株式会社 | 動的メモリ管理装置及びその制御方法 |
| US5926406A (en) | 1997-04-30 | 1999-07-20 | Hewlett-Packard, Co. | System and method for calculating floating point exponential values in a geometry accelerator |
| US6092149A (en) | 1997-05-28 | 2000-07-18 | Western Digital Corporation | Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses |
| US6856320B1 (en) | 1997-11-25 | 2005-02-15 | Nvidia U.S. Investment Company | Demand-based memory system for graphics applications |
| US7102646B1 (en) | 1997-11-25 | 2006-09-05 | Nvidia U.S. Investment Company | Demand-based memory system for graphics applications |
| US6253311B1 (en) | 1997-11-29 | 2001-06-26 | Jp First Llc | Instruction set for bi-directional conversion and transfer of integer and floating point data |
| US6049865A (en) | 1997-12-18 | 2000-04-11 | Motorola, Inc. | Method and apparatus for implementing floating point projection instructions |
| US6260008B1 (en) | 1998-01-08 | 2001-07-10 | Sharp Kabushiki Kaisha | Method of and system for disambiguating syntactic word multiples |
| US6513099B1 (en) | 1998-12-22 | 2003-01-28 | Silicon Graphics Incorporated | Enhanced graphics cache memory |
| US6480872B1 (en) | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
| US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
| US6529928B1 (en) | 1999-03-23 | 2003-03-04 | Silicon Graphics, Inc. | Floating-point adder performing floating-point and integer operations |
| US6788738B1 (en) | 1999-05-07 | 2004-09-07 | Xilinx, Inc. | Filter accelerator for a digital signal processor |
| US6631437B1 (en) | 2000-04-06 | 2003-10-07 | Hewlett-Packard Development Company, L.P. | Method and apparatus for promoting memory read commands |
| US6578102B1 (en) | 2000-04-18 | 2003-06-10 | International Business Machines Corporation | Tracking and control of prefetch data in a PCI bus system |
| US6412046B1 (en) | 2000-05-01 | 2002-06-25 | Hewlett Packard Company | Verification of cache prefetch mechanism |
| US7499053B2 (en) | 2000-06-19 | 2009-03-03 | Mental Images Gmbh | Real-time precision ray tracing |
| US8188997B2 (en) | 2000-06-19 | 2012-05-29 | Mental Images Gmbh | Accelerated ray tracing using shallow bounding volume hierarchies |
| US6678806B1 (en) | 2000-08-23 | 2004-01-13 | Chipwrights Design, Inc. | Apparatus and method for using tagged pointers for extract, insert and format operations |
| US20020152361A1 (en) | 2001-02-05 | 2002-10-17 | International Business Machines Corporation | Directed least recently used cache replacement method |
| US6792509B2 (en) | 2001-04-19 | 2004-09-14 | International Business Machines Corporation | Partitioned cache of multiple logical levels with adaptive reconfiguration based on multiple criteria |
| US6748495B2 (en) | 2001-05-15 | 2004-06-08 | Broadcom Corporation | Random generator |
| US6947049B2 (en) | 2001-06-01 | 2005-09-20 | Nvidia Corporation | Method and system for synchronizing updates of vertex data with a graphics processor that is fetching vertex data |
| US6963954B1 (en) | 2001-09-19 | 2005-11-08 | Cisco Technology, Inc. | Method and apparatus for optimizing prefetching based on memory addresses |
| US6785793B2 (en) * | 2001-09-27 | 2004-08-31 | Intel Corporation | Method and apparatus for memory access scheduling to reduce memory access latency |
| US7127482B2 (en) | 2001-11-19 | 2006-10-24 | Intel Corporation | Performance optimized approach for efficient downsampling operations |
| US6598120B1 (en) | 2002-03-08 | 2003-07-22 | International Business Machines Corporation | Assignment of building block collector agent to receive acknowledgments from other building block agents |
| US20030204840A1 (en) | 2002-04-30 | 2003-10-30 | Youfeng Wu | Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs |
| US7197605B2 (en) | 2002-12-30 | 2007-03-27 | Intel Corporation | Allocating cache lines |
| JP2004312584A (ja) | 2003-04-10 | 2004-11-04 | Matsushita Electric Ind Co Ltd | 画像処理方法および画像表示システム |
| US7483031B2 (en) | 2003-04-17 | 2009-01-27 | Nvidia Corporation | Method for synchronizing graphics processing units |
| US7373369B2 (en) | 2003-06-05 | 2008-05-13 | International Business Machines Corporation | Advanced execution of extended floating-point add operations in a narrow dataflow |
| US7272624B2 (en) | 2003-09-30 | 2007-09-18 | International Business Machines Corporation | Fused booth encoder multiplexer |
| JP3807400B2 (ja) | 2003-10-30 | 2006-08-09 | ソニー株式会社 | 記録制御装置および記録制御方法 |
| GB2409068A (en) | 2003-12-09 | 2005-06-15 | Advanced Risc Mach Ltd | Data element size control within parallel lanes of processing |
| US7567252B2 (en) * | 2003-12-09 | 2009-07-28 | Microsoft Corporation | Optimizing performance of a graphics processing unit for efficient execution of general matrix operations |
| KR100800468B1 (ko) | 2004-01-29 | 2008-02-01 | 삼성전자주식회사 | 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법 |
| US8253750B1 (en) | 2004-02-14 | 2012-08-28 | Nvidia Corporation | Digital media processor |
| US7719540B2 (en) | 2004-03-31 | 2010-05-18 | Intel Corporation | Render-cache controller for multithreading, multi-core graphics processor |
| US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
| US7548892B2 (en) | 2004-04-30 | 2009-06-16 | Microsoft Corporation | Processing machine learning techniques using a graphics processing unit |
| US7472383B2 (en) * | 2004-08-13 | 2008-12-30 | Sun Microsystems, Inc. | System and method for providing exceptional flow control in protected code through memory layers |
| US20060101244A1 (en) | 2004-11-10 | 2006-05-11 | Nvidia Corporation | Multipurpose functional unit with combined integer and floating-point multiply-add pipeline |
| US7428566B2 (en) | 2004-11-10 | 2008-09-23 | Nvidia Corporation | Multipurpose functional unit with multiply-add and format conversion pipeline |
| US20060143396A1 (en) | 2004-12-29 | 2006-06-29 | Mason Cabot | Method for programmer-controlled cache line eviction policy |
| US20060179092A1 (en) | 2005-02-10 | 2006-08-10 | Schmookler Martin S | System and method for executing fixed point divide operations using a floating point multiply-add pipeline |
| GB0504326D0 (en) * | 2005-03-02 | 2005-04-06 | Symbian Software Ltd | Dual mode operating system for a computing device |
| US20060248279A1 (en) | 2005-05-02 | 2006-11-02 | Al-Sukhni Hassan F | Prefetching across a page boundary |
| US7346741B1 (en) | 2005-05-10 | 2008-03-18 | Sun Microsystems, Inc. | Memory latency of processors with configurable stride based pre-fetching technique |
| EP1889178A2 (en) | 2005-05-13 | 2008-02-20 | Provost, Fellows and Scholars of the College of the Holy and Undivided Trinity of Queen Elizabeth near Dublin | A data processing system and method |
| US8250348B2 (en) | 2005-05-19 | 2012-08-21 | International Business Machines Corporation | Methods and apparatus for dynamically switching processor mode |
| US7353361B2 (en) * | 2005-06-06 | 2008-04-01 | International Business Machines Corporation | Page replacement policy for systems having multiple page sizes |
| US7861055B2 (en) | 2005-06-07 | 2010-12-28 | Broadcom Corporation | Method and system for on-chip configurable data ram for fast memory and pseudo associative caches |
| US20060282620A1 (en) | 2005-06-14 | 2006-12-14 | Sujatha Kashyap | Weighted LRU for associative caches |
| EP1768383B1 (en) * | 2005-07-15 | 2016-02-24 | Barco N.V. | Network displays and method of their operation |
| US20070030277A1 (en) | 2005-08-08 | 2007-02-08 | Via Technologies, Inc. | Method for processing vertex, triangle, and pixel graphics data packets |
| US7659899B2 (en) | 2005-08-08 | 2010-02-09 | Via Technologies, Inc. | System and method to manage data processing stages of a logical graphics pipeline |
| US20070198815A1 (en) | 2005-08-11 | 2007-08-23 | Coresonic Ab | Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit |
| US20070074008A1 (en) | 2005-09-28 | 2007-03-29 | Donofrio David D | Mixed mode floating-point pipeline with extended functions |
| US7490224B2 (en) | 2005-10-07 | 2009-02-10 | International Business Machines Corporation | Time-of-life counter design for handling instruction flushes from a queue |
| CN1952979B (zh) | 2005-10-14 | 2012-06-27 | 威盛电子股份有限公司 | 多重图形处理器系统及方法 |
| JP4810210B2 (ja) * | 2005-12-06 | 2011-11-09 | 日本電気株式会社 | ストレージシステム、マスタ側ストレージ装置、リモート側ストレージ装置、データコピー方法、データコピープログラム |
| EP2011018B1 (en) | 2006-04-12 | 2016-07-13 | Soft Machines, Inc. | Apparatus and method for processing an instruction matrix specifying parallel and dependent operations |
| US8510827B1 (en) | 2006-05-18 | 2013-08-13 | Vmware, Inc. | Taint tracking mechanism for computer security |
| US8884972B2 (en) * | 2006-05-25 | 2014-11-11 | Qualcomm Incorporated | Graphics processor with arithmetic and elementary function units |
| US7616206B1 (en) | 2006-06-16 | 2009-11-10 | Nvidia Corporation | Efficient multi-chip GPU |
| US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
| US7467280B2 (en) * | 2006-07-05 | 2008-12-16 | International Business Machines Corporation | Method for reconfiguring cache memory based on at least analysis of heat generated during runtime, at least by associating an access bit with a cache line and associating a granularity bit with a cache line in level-2 cache |
| US8035650B2 (en) | 2006-07-25 | 2011-10-11 | Qualcomm Incorporated | Tiled cache for multiple software programs |
| US20080030510A1 (en) | 2006-08-02 | 2008-02-07 | Xgi Technology Inc. | Multi-GPU rendering system |
| US7571286B2 (en) * | 2006-08-24 | 2009-08-04 | International Business Machines Corporation | Reduced memory traffic via detection and tracking of temporally silent stores |
| US8606998B2 (en) | 2006-08-24 | 2013-12-10 | Advanced Micro Devices, Inc. | System and method for instruction-based cache allocation policies |
| US7620793B1 (en) | 2006-08-28 | 2009-11-17 | Nvidia Corporation | Mapping memory partitions to virtual memory pages |
| US20080071851A1 (en) | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
| US7327289B1 (en) | 2006-09-20 | 2008-02-05 | Intel Corporation | Data-modifying run length encoder to avoid data expansion |
| US8122078B2 (en) | 2006-10-06 | 2012-02-21 | Calos Fund, LLC | Processor with enhanced combined-arithmetic capability |
| US20080086598A1 (en) | 2006-10-10 | 2008-04-10 | Maron William A | System and method for establishing cache priority for critical data structures of an application |
| US8516201B2 (en) * | 2006-12-05 | 2013-08-20 | Intel Corporation | Protecting private data from cache attacks |
| US8269727B2 (en) | 2007-01-03 | 2012-09-18 | Apple Inc. | Irregular input identification |
| US20080189487A1 (en) | 2007-02-06 | 2008-08-07 | Arm Limited | Control of cache transactions |
| GB2447428A (en) | 2007-03-15 | 2008-09-17 | Linear Algebra Technologies Lt | Processor having a trivial operand register |
| US7979674B2 (en) * | 2007-05-16 | 2011-07-12 | International Business Machines Corporation | Re-executing launcher program upon termination of launched programs in MIMD mode booted SIMD partitions |
| US8781110B2 (en) | 2007-06-30 | 2014-07-15 | Intel Corporation | Unified system architecture for elliptic-curve cryptography |
| US7783859B2 (en) | 2007-07-12 | 2010-08-24 | Qnx Software Systems Gmbh & Co. Kg | Processing system implementing variable page size memory organization |
| US8990505B1 (en) | 2007-09-21 | 2015-03-24 | Marvell International Ltd. | Cache memory bank selection |
| JP2011503733A (ja) | 2007-11-17 | 2011-01-27 | トーマス リヒター | リコンフィギュラブルな浮動小数点レベルおよびビットレベルのデータ処理ユニット |
| US8330763B2 (en) * | 2007-11-28 | 2012-12-11 | Siemens Aktiengesellschaft | Apparatus and method for volume rendering on multiple graphics processing units (GPUs) |
| US8106914B2 (en) | 2007-12-07 | 2012-01-31 | Nvidia Corporation | Fused multiply-add functional unit |
| US7941633B2 (en) * | 2007-12-18 | 2011-05-10 | International Business Machines Corporation | Hash optimization system and method |
| US7870339B2 (en) | 2008-01-11 | 2011-01-11 | International Business Machines Corporation | Extract cache attribute facility and instruction therefore |
| US20090190432A1 (en) * | 2008-01-28 | 2009-07-30 | Christoph Bilger | DRAM with Page Access |
| US8209493B2 (en) * | 2008-03-26 | 2012-06-26 | Intel Corporation | Systems and methods for scheduling memory requests during memory throttling |
| US8429351B1 (en) | 2008-03-28 | 2013-04-23 | Emc Corporation | Techniques for determining an amount of data to prefetch |
| US8146064B2 (en) * | 2008-04-04 | 2012-03-27 | International Business Machines Corporation | Dynamically controlling a prefetching range of a software controlled cache |
| US8633936B2 (en) | 2008-04-21 | 2014-01-21 | Qualcomm Incorporated | Programmable streaming processor with mixed precision instruction execution |
| US8078833B2 (en) | 2008-05-29 | 2011-12-13 | Axis Semiconductor, Inc. | Microprocessor with highly configurable pipeline and executional unit internal hierarchal structures, optimizable for different types of computational functions |
| US20090309896A1 (en) | 2008-05-30 | 2009-12-17 | Advanced Micro Devices, Inc. | Multi Instance Unified Shader Engine Filtering System With Level One and Level Two Cache |
| US7945768B2 (en) | 2008-06-05 | 2011-05-17 | Motorola Mobility, Inc. | Method and apparatus for nested instruction looping using implicit predicates |
| US8340280B2 (en) | 2008-06-13 | 2012-12-25 | Intel Corporation | Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations |
| US8108361B2 (en) | 2008-07-31 | 2012-01-31 | Microsoft Corporation | Efficient column based data encoding for large-scale data storage |
| US8219757B2 (en) | 2008-09-30 | 2012-07-10 | Intel Corporation | Apparatus and method for low touch cache management |
| US8041856B2 (en) | 2008-09-30 | 2011-10-18 | Lsi Corporation | Skip based control logic for first in first out buffer |
| US20100162247A1 (en) | 2008-12-19 | 2010-06-24 | Adam Welc | Methods and systems for transactional nested parallelism |
| US8645634B1 (en) | 2009-01-16 | 2014-02-04 | Nvidia Corporation | Zero-copy data sharing by cooperating asymmetric coprocessors |
| US20100185816A1 (en) | 2009-01-21 | 2010-07-22 | Sauber William F | Multiple Cache Line Size |
| US8266409B2 (en) * | 2009-03-03 | 2012-09-11 | Qualcomm Incorporated | Configurable cache and method to configure same |
| US20120042130A1 (en) * | 2009-04-24 | 2012-02-16 | Aaron Antony Peapell | Data Storage System |
| US9479358B2 (en) * | 2009-05-13 | 2016-10-25 | International Business Machines Corporation | Managing graphics load balancing strategies |
| US8108612B2 (en) | 2009-05-15 | 2012-01-31 | Microsoft Corporation | Location updates for a distributed data store |
| US8566801B2 (en) | 2009-05-22 | 2013-10-22 | International Business Machines Corporation | Concurrent static single assignment for general barrier synchronized parallel programs |
| KR101004110B1 (ko) * | 2009-05-28 | 2010-12-27 | 주식회사 실리콘아츠 | 레이 트레이싱 코어 및 이를 포함하는 레이 트레이싱 칩 |
| US8380916B2 (en) * | 2009-06-04 | 2013-02-19 | Micron Technology, Inc. | Control of page access in memory |
| US8819359B2 (en) | 2009-06-29 | 2014-08-26 | Oracle America, Inc. | Hybrid interleaving in memory modules by interleaving physical addresses for a page across ranks in a memory module |
| US8352945B2 (en) | 2009-08-11 | 2013-01-08 | International Business Machines Corporation | System, method, and apparatus for scan-sharing for business intelligence queries in an in-memory database |
| US8650240B2 (en) | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
| US8615637B2 (en) | 2009-09-10 | 2013-12-24 | Advanced Micro Devices, Inc. | Systems and methods for processing memory requests in a multi-processor system using a probe engine |
| WO2011041269A2 (en) * | 2009-09-30 | 2011-04-07 | Samplify Systems, Inc. | Enhanced multi-processor waveform data exchange using compression and decompression |
| US8364739B2 (en) | 2009-09-30 | 2013-01-29 | International Business Machines Corporation | Sparse matrix-vector multiplication on graphics processor units |
| US8103910B2 (en) | 2009-11-13 | 2012-01-24 | International Business Machines Corporation | Local rollback for fault-tolerance in parallel computing systems |
| US8984043B2 (en) | 2009-12-23 | 2015-03-17 | Intel Corporation | Multiplying and adding matrices |
| US8669990B2 (en) | 2009-12-31 | 2014-03-11 | Intel Corporation | Sharing resources between a CPU and GPU |
| GB2476800A (en) | 2010-01-07 | 2011-07-13 | Linear Algebra Technologies Ltd | Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations |
| US8458354B2 (en) * | 2010-01-27 | 2013-06-04 | Interdisciplinary Center Herzliya | Multi-pattern matching in compressed communication traffic |
| US20110208505A1 (en) | 2010-02-24 | 2011-08-25 | Advanced Micro Devices, Inc. | Assigning floating-point operations to a floating-point unit and an arithmetic logic unit |
| US8572322B2 (en) | 2010-03-29 | 2013-10-29 | Freescale Semiconductor, Inc. | Asynchronously scheduling memory access requests |
| US20110249744A1 (en) | 2010-04-12 | 2011-10-13 | Neil Bailey | Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core |
| US8677613B2 (en) * | 2010-05-20 | 2014-03-25 | International Business Machines Corporation | Enhanced modularity in heterogeneous 3D stacks |
| US8812575B2 (en) | 2010-07-06 | 2014-08-19 | Silminds, Llc, Egypt | Decimal floating-point square-root unit using Newton-Raphson iterations |
| CN201927837U (zh) | 2010-08-10 | 2011-08-10 | 富士康(昆山)电脑接插件有限公司 | 连接器模组 |
| US20120059983A1 (en) | 2010-09-03 | 2012-03-08 | David Wilkins Nellans | Predictor-based management of dram row-buffers |
| US8682639B2 (en) | 2010-09-21 | 2014-03-25 | Texas Instruments Incorporated | Dedicated memory window for emulation address |
| US8667042B2 (en) | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
| US8982140B2 (en) * | 2010-09-24 | 2015-03-17 | Nvidia Corporation | Hierarchical memory addressing |
| US9965395B2 (en) | 2010-09-28 | 2018-05-08 | Texas Instruments Incorporated | Memory attribute sharing between differing cache levels of multilevel cache |
| US8488055B2 (en) | 2010-09-30 | 2013-07-16 | Apple Inc. | Flash synchronization using image sensor interface timing signal |
| US8745111B2 (en) | 2010-11-16 | 2014-06-03 | Apple Inc. | Methods and apparatuses for converting floating point representations |
| US8847965B2 (en) | 2010-12-03 | 2014-09-30 | The University Of North Carolina At Chapel Hill | Methods, systems, and computer readable media for fast geometric sound propagation using visibility computations |
| US8866825B2 (en) * | 2010-12-15 | 2014-10-21 | Ati Technologies Ulc | Multiple display frame rendering method and apparatus |
| JP5520390B2 (ja) * | 2010-12-28 | 2014-06-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データ要素列を処理する装置及び方法 |
| GB2488985A (en) | 2011-03-08 | 2012-09-19 | Advanced Risc Mach Ltd | Mixed size data processing operation with integrated operand conversion instructions |
| US8862653B2 (en) | 2011-04-26 | 2014-10-14 | University Of South Carolina | System and method for sparse matrix vector multiplication processing |
| FR2974645A1 (fr) | 2011-04-28 | 2012-11-02 | Kalray | Operateur de multiplication et addition fusionnees a precision mixte |
| US9501392B1 (en) | 2011-05-12 | 2016-11-22 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Management of a non-volatile memory module |
| JP5813380B2 (ja) | 2011-06-03 | 2015-11-17 | 株式会社東芝 | 半導体記憶装置 |
| US9032156B2 (en) | 2011-07-06 | 2015-05-12 | Advanced Micro Devices, Inc. | Memory access monitor |
| CN102214160B (zh) | 2011-07-08 | 2013-04-17 | 中国科学技术大学 | 一种基于龙芯3a的单精度矩阵乘法优化方法 |
| US20130021350A1 (en) * | 2011-07-19 | 2013-01-24 | Advanced Micro Devices, Inc. | Apparatus and method for decoding using coefficient compression |
| US9529712B2 (en) | 2011-07-26 | 2016-12-27 | Nvidia Corporation | Techniques for balancing accesses to memory having different memory types |
| US9727336B2 (en) | 2011-09-16 | 2017-08-08 | International Business Machines Corporation | Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers |
| US20130099946A1 (en) | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
| US8935478B2 (en) | 2011-11-01 | 2015-01-13 | International Business Machines Corporation | Variable cache line size management |
| US10681394B2 (en) * | 2011-11-28 | 2020-06-09 | Comcast Cable Communications, Llc | Cache eviction during off-peak transaction time period |
| US20130141442A1 (en) | 2011-12-06 | 2013-06-06 | John W. Brothers | Method and apparatus for multi-chip processing |
| US8954721B2 (en) * | 2011-12-08 | 2015-02-10 | International Business Machines Corporation | Multi-chip initialization using a parallel firmware boot process |
| US20130148947A1 (en) | 2011-12-13 | 2013-06-13 | Ati Technologies Ulc | Video player with multiple grpahics processors |
| US9021237B2 (en) | 2011-12-20 | 2015-04-28 | International Business Machines Corporation | Low latency variable transfer network communicating variable written to source processing core variable register allocated to destination thread to destination processing core variable register allocated to source thread |
| US9960917B2 (en) | 2011-12-22 | 2018-05-01 | Intel Corporation | Matrix multiply accumulate instruction |
| WO2013095537A1 (en) | 2011-12-22 | 2013-06-27 | Intel Corporation | Controlling a processor cache using a real-time attribute |
| WO2013095619A1 (en) | 2011-12-23 | 2013-06-27 | Intel Corporation | Super multiply add (super madd) instruction with three scalar terms |
| US20140195783A1 (en) | 2011-12-29 | 2014-07-10 | Krishnan Karthikeyan | Dot product processors, methods, systems, and instructions |
| US20130185515A1 (en) | 2012-01-16 | 2013-07-18 | Qualcomm Incorporated | Utilizing Negative Feedback from Unexpected Miss Addresses in a Hardware Prefetcher |
| US10073656B2 (en) | 2012-01-27 | 2018-09-11 | Sandisk Technologies Llc | Systems and methods for storage virtualization |
| WO2013119226A1 (en) | 2012-02-08 | 2013-08-15 | Intel Corporation | Dynamic cpu gpu load balancing using power |
| US20130218938A1 (en) | 2012-02-17 | 2013-08-22 | Qualcomm Incorporated | Floating-point adder with operand shifting based on a predicted exponent difference |
| US20130219088A1 (en) | 2012-02-22 | 2013-08-22 | Lsi Corporation | Configurable prioritization of data transmission in a data storage topology |
| US9036710B2 (en) | 2012-03-08 | 2015-05-19 | Blackberry Limited | Unified transform coefficient encoding and decoding |
| US9183664B2 (en) | 2012-05-03 | 2015-11-10 | Apple Inc. | Tiled forward shading with improved depth filtering |
| US8775762B2 (en) | 2012-05-07 | 2014-07-08 | Advanced Micro Devices, Inc. | Method and apparatus for batching memory requests |
| JP5826114B2 (ja) | 2012-05-25 | 2015-12-02 | クラリオン株式会社 | データ解凍装置、データ圧縮装置、データの解凍プログラム、データの圧縮プログラム、及び、圧縮データ配信システム |
| KR20170066700A (ko) | 2012-06-15 | 2017-06-14 | 인텔 코포레이션 | 공유 메모리 자원들을 사용하는 메모리 일관성 모델에서 비순차 load들에 대한 로크 기반 및 동기화 기반 방법 |
| US9213523B2 (en) | 2012-06-29 | 2015-12-15 | Intel Corporation | Double rounded combined floating-point multiply and add |
| US8892619B2 (en) | 2012-07-24 | 2014-11-18 | The Board Of Trustees Of The Leland Stanford Junior University | Floating-point multiply-add unit using cascade design |
| US9128845B2 (en) | 2012-07-30 | 2015-09-08 | Hewlett-Packard Development Company, L.P. | Dynamically partition a volatile memory for a cache and a memory partition |
| CN103581052B (zh) | 2012-08-02 | 2017-07-21 | 华为技术有限公司 | 一种数据处理方法、路由器及ndn系统 |
| US9218289B2 (en) * | 2012-08-06 | 2015-12-22 | Qualcomm Incorporated | Multi-core compute cache coherency with a release consistency memory ordering model |
| JP6007667B2 (ja) | 2012-08-17 | 2016-10-12 | 富士通株式会社 | 情報処理装置、情報処理方法、及び情報処理プログラム |
| US9298456B2 (en) | 2012-08-21 | 2016-03-29 | Apple Inc. | Mechanism for performing speculative predicated instructions |
| US9063727B2 (en) * | 2012-08-31 | 2015-06-23 | Intel Corporation | Performing cross-domain thermal control in a processor |
| US10346095B2 (en) | 2012-08-31 | 2019-07-09 | Sandisk Technologies, Llc | Systems, methods, and interfaces for adaptive cache persistence |
| US9292428B2 (en) | 2012-09-05 | 2016-03-22 | Kabushiki Kaisha Toshiba | Memory system |
| US20140075163A1 (en) | 2012-09-07 | 2014-03-13 | Paul N. Loewenstein | Load-monitor mwait |
| US9134954B2 (en) | 2012-09-10 | 2015-09-15 | Qualcomm Incorporated | GPU memory buffer pre-fetch and pre-back signaling to avoid page-fault |
| US9146846B2 (en) | 2012-09-14 | 2015-09-29 | Advanced Micro Devices, Inc. | Programmable physical address mapping for memory |
| US10742475B2 (en) | 2012-12-05 | 2020-08-11 | Origin Wireless, Inc. | Method, apparatus, and system for object tracking sensing using broadcasting |
| US9582287B2 (en) | 2012-09-27 | 2017-02-28 | Intel Corporation | Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions |
| KR102001414B1 (ko) | 2012-09-27 | 2019-07-18 | 삼성전자주식회사 | 데이터 트랜잭션에 따라 전력공급을 제어하는 시스템-온-칩 및 그 동작방법 |
| US9305045B1 (en) * | 2012-10-02 | 2016-04-05 | Teradata Us, Inc. | Data-temperature-based compression in a database system |
| US9626294B2 (en) | 2012-10-03 | 2017-04-18 | International Business Machines Corporation | Performance-driven cache line memory access |
| US9317482B2 (en) | 2012-10-14 | 2016-04-19 | Microsoft Technology Licensing, Llc | Universal FPGA/ASIC matrix-vector multiplication architecture |
| US9152382B2 (en) | 2012-10-31 | 2015-10-06 | Intel Corporation | Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values |
| US9431064B2 (en) * | 2012-11-02 | 2016-08-30 | Taiwan Semiconductor Manufacturing Company, Ltd. | Memory circuit and cache circuit configuration |
| US11150721B2 (en) | 2012-11-07 | 2021-10-19 | Nvidia Corporation | Providing hints to an execution unit to prepare for predicted subsequent arithmetic operations |
| US9170955B2 (en) | 2012-11-27 | 2015-10-27 | Intel Corporation | Providing extended cache replacement state information |
| US9183144B2 (en) | 2012-12-14 | 2015-11-10 | Intel Corporation | Power gating a portion of a cache memory |
| US20140173203A1 (en) | 2012-12-18 | 2014-06-19 | Andrew T. Forsyth | Block Memory Engine |
| US9558006B2 (en) | 2012-12-20 | 2017-01-31 | Intel Corporation | Continuous automatic tuning of code regions |
| US10289418B2 (en) | 2012-12-27 | 2019-05-14 | Nvidia Corporation | Cooperative thread array granularity context switch during trap handling |
| US9384368B2 (en) * | 2012-12-28 | 2016-07-05 | Intel Corporation | Instruction and logic for mid-level caching of random numbers distributed to multiple units |
| US9317251B2 (en) | 2012-12-31 | 2016-04-19 | Nvidia Corporation | Efficient correction of normalizer shift amount errors in fused multiply add operations |
| US9298457B2 (en) | 2013-01-22 | 2016-03-29 | Altera Corporation | SIMD instructions for data compression and decompression |
| US9971710B2 (en) | 2013-02-07 | 2018-05-15 | Microsoft Technology Licensing, Llc | Optimizing data transfers between heterogeneous memory arenas |
| US8922414B2 (en) * | 2013-02-12 | 2014-12-30 | Cortica, Ltd. | Multi-layer system for symbol-space based compression of patterns |
| US9329870B2 (en) | 2013-02-13 | 2016-05-03 | International Business Machines Corporation | Extensible execution unit interface architecture with multiple decode logic and multiple execution units |
| US9122613B2 (en) | 2013-03-07 | 2015-09-01 | Arm Limited | Prefetching of data and instructions in a data processing apparatus |
| US9478066B2 (en) | 2013-03-14 | 2016-10-25 | Nvidia Corporation | Consistent vertex snapping for variable resolution rendering |
| US10133677B2 (en) | 2013-03-14 | 2018-11-20 | Nvidia Corporation | Opportunistic migration of memory pages in a unified virtual memory system |
| US9940286B2 (en) | 2013-03-14 | 2018-04-10 | Nvidia Corporation | PCIE traffic tracking hardware in a unified virtual memory system |
| US9830210B2 (en) * | 2013-03-15 | 2017-11-28 | Nvidia Corporation | CPU-to-GPU and GPU-to-GPU atomics |
| US9525586B2 (en) | 2013-03-15 | 2016-12-20 | Intel Corporation | QoS based binary translation and application streaming |
| US9153539B2 (en) | 2013-03-15 | 2015-10-06 | Nvidia Corporation | Ground-referenced single-ended signaling connected graphics processing unit multi-chip module |
| US9176895B2 (en) | 2013-03-16 | 2015-11-03 | Intel Corporation | Increased error correction for cache memories through adaptive replacement policies |
| US9311721B1 (en) * | 2013-04-04 | 2016-04-12 | Sandia Corporation | Graphics processing unit-assisted lossless decompression |
| KR20140126189A (ko) | 2013-04-22 | 2014-10-30 | 삼성전자주식회사 | 프로세서의 멀티 실행 모드 지원 장치 및 방법 |
| US9594595B2 (en) | 2013-05-17 | 2017-03-14 | Advanced Micro Devices, Inc. | Efficient processor load balancing using predication flags |
| GB2551291B (en) | 2013-05-23 | 2018-02-14 | Linear Algebra Tech Limited | Corner detection |
| JP2016526220A (ja) | 2013-05-24 | 2016-09-01 | コーヒレント・ロジックス・インコーポレーテッド | プログラム可能な最適化を有するメモリネットワークプロセッサ |
| US9436600B2 (en) | 2013-06-11 | 2016-09-06 | Svic No. 28 New Technology Business Investment L.L.P. | Non-volatile memory storage for multi-channel memory system |
| US9378127B2 (en) | 2013-06-21 | 2016-06-28 | Intel Corporation | Dynamic memory page policy |
| US10963255B2 (en) | 2013-07-15 | 2021-03-30 | Texas Instruments Incorporated | Implied fence on stream open |
| US9264066B2 (en) | 2013-07-30 | 2016-02-16 | Apple Inc. | Type conversion using floating-point unit |
| US9946666B2 (en) | 2013-08-06 | 2018-04-17 | Nvidia Corporation | Coalescing texture access and load/store operations |
| US9092345B2 (en) | 2013-08-08 | 2015-07-28 | Arm Limited | Data processing systems |
| US9710380B2 (en) | 2013-08-29 | 2017-07-18 | Intel Corporation | Managing shared cache by multi-core processor |
| EP2866138B1 (en) | 2013-10-23 | 2019-08-07 | Teknologian tutkimuskeskus VTT Oy | Floating-point supportive pipeline for emulated shared memory architectures |
| JP2015103077A (ja) | 2013-11-26 | 2015-06-04 | 富士通株式会社 | 演算処理装置、情報処理装置、及び、情報処理装置の制御方法 |
| TWI676898B (zh) | 2013-12-09 | 2019-11-11 | 安然國際科技有限公司 | 分散式記憶體磁碟群集儲存系統運作方法 |
| CN108052463B (zh) * | 2013-12-26 | 2021-08-17 | 英特尔公司 | 多芯片封装链路 |
| US9461667B2 (en) | 2013-12-30 | 2016-10-04 | Samsung Electronics Co., Ltd. | Rounding injection scheme for floating-point to integer conversion |
| US20150193358A1 (en) | 2014-01-06 | 2015-07-09 | Nvidia Corporation | Prioritized Memory Reads |
| US10528357B2 (en) | 2014-01-17 | 2020-01-07 | L3 Technologies, Inc. | Web-based recorder configuration utility |
| US20150205724A1 (en) | 2014-01-20 | 2015-07-23 | Honeywell International Inc. | System and method of cache partitioning for processors with limited cached memory pools |
| US9471497B2 (en) * | 2014-01-24 | 2016-10-18 | Netapp, Inc. | Methods for combining access history and sequentiality for intelligent prefetching and devices thereof |
| KR102100161B1 (ko) | 2014-02-04 | 2020-04-14 | 삼성전자주식회사 | Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템 |
| WO2015119610A1 (en) | 2014-02-06 | 2015-08-13 | Empire Technology Development, Llc | Server-client secret generation with cached data |
| US20150227540A1 (en) * | 2014-02-12 | 2015-08-13 | Hitachi, Ltd. | System and method for content-aware data compression |
| US9275429B2 (en) | 2014-02-17 | 2016-03-01 | Qualcomm Incorporated | Device hang detection and recovery |
| US9411644B2 (en) * | 2014-03-07 | 2016-08-09 | Cavium, Inc. | Method and system for work scheduling in a multi-chip system |
| KR20150106132A (ko) | 2014-03-11 | 2015-09-21 | 삼성전자주식회사 | 전자 장치의 캐시 메모리 제어 방법 및 장치 |
| US9720667B2 (en) | 2014-03-21 | 2017-08-01 | Intel Corporation | Automatic loop vectorization using hardware transactional memory |
| US20150268963A1 (en) | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
| US9436972B2 (en) * | 2014-03-27 | 2016-09-06 | Intel Corporation | System coherency in a distributed graphics processor hierarchy |
| EP2937794B1 (en) * | 2014-04-22 | 2016-08-17 | DataVard GmbH | Method and system for archiving digital data |
| US9690696B1 (en) | 2014-05-14 | 2017-06-27 | Western Digital Technologies, Inc. | Lifetime extension of memory for data storage system |
| US9673998B2 (en) | 2014-05-15 | 2017-06-06 | Futurewei Technologies, Inc. | Differential cache for representational state transfer (REST) API |
| JP6248808B2 (ja) | 2014-05-22 | 2017-12-20 | 富士通株式会社 | 情報処理装置、情報処理システム、情報処理装置の制御方法、及び、情報処理装置の制御プログラム |
| KR102192956B1 (ko) | 2014-06-23 | 2020-12-18 | 삼성전자주식회사 | 디스플레이 장치 및 그 제어 방법 |
| US10061592B2 (en) | 2014-06-27 | 2018-08-28 | Samsung Electronics Co., Ltd. | Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices |
| US9520192B2 (en) * | 2014-06-30 | 2016-12-13 | Intel Corporation | Resistive memory write operation with merged reset |
| US20150378920A1 (en) | 2014-06-30 | 2015-12-31 | John G. Gierach | Graphics data pre-fetcher for last level caches |
| US10032244B2 (en) | 2014-08-21 | 2018-07-24 | Intel Corporation | Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU) |
| US10223333B2 (en) | 2014-08-29 | 2019-03-05 | Nvidia Corporation | Performing multi-convolution operations in a parallel processing system |
| CN105468542B (zh) | 2014-09-03 | 2019-03-26 | 杭州华为数字技术有限公司 | 地址分配方法及装置 |
| JP2016057831A (ja) | 2014-09-09 | 2016-04-21 | 株式会社東芝 | 浮動小数点演算装置、及び情報処理システム |
| US10096086B2 (en) | 2014-09-10 | 2018-10-09 | Nvidia Corporation | Enhanced anti-aliasing by varying sample patterns spatially and/or temporally |
| KR102263326B1 (ko) * | 2014-09-18 | 2021-06-09 | 삼성전자주식회사 | 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법 |
| US9928076B2 (en) | 2014-09-26 | 2018-03-27 | Intel Corporation | Method and apparatus for unstructured control flow for SIMD execution engine |
| US20160092118A1 (en) | 2014-09-26 | 2016-03-31 | Intel Corporation | Memory write management in a computer system |
| US9983884B2 (en) | 2014-09-26 | 2018-05-29 | Intel Corporation | Method and apparatus for SIMD structured branching |
| CN104407836B (zh) | 2014-10-14 | 2017-05-31 | 中国航天科技集团公司第九研究院第七七一研究所 | 利用定点乘法器进行级联乘累加运算的装置和方法 |
| JP2016091242A (ja) | 2014-10-31 | 2016-05-23 | 富士通株式会社 | キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム |
| US20160124709A1 (en) | 2014-11-04 | 2016-05-05 | International Business Machines Corporation | Fast, energy-efficient exponential computations in simd architectures |
| US10282227B2 (en) | 2014-11-18 | 2019-05-07 | Intel Corporation | Efficient preemption for graphics processors |
| US9491112B1 (en) | 2014-12-10 | 2016-11-08 | Amazon Technologies, Inc. | Allocating processor resources based on a task identifier |
| US10956617B2 (en) * | 2014-12-12 | 2021-03-23 | Coresecure Technologies, Llc | Systems and methods for random fill caching and prefetching for secure cache memories |
| WO2016097813A1 (en) | 2014-12-14 | 2016-06-23 | Via Alliance Semiconductor Co., Ltd. | Set associative cache memory with heterogeneous replacement policy |
| US9910785B2 (en) | 2014-12-14 | 2018-03-06 | Via Alliance Semiconductor Co., Ltd | Cache memory budgeted by ways based on memory access type |
| EP3066572B1 (en) | 2014-12-14 | 2020-02-19 | VIA Alliance Semiconductor Co., Ltd. | Cache memory budgeted by chunks based on memory access type |
| US9928034B2 (en) | 2014-12-17 | 2018-03-27 | Nvidia Corporation | Work-efficient, load-balanced, merge-based parallelized consumption of sequences of sequences |
| US9727679B2 (en) * | 2014-12-20 | 2017-08-08 | Intel Corporation | System on chip configuration metadata |
| US9766892B2 (en) | 2014-12-23 | 2017-09-19 | Intel Corporation | Method and apparatus for efficient execution of nested branches on a graphics processor unit |
| FR3030846B1 (fr) | 2014-12-23 | 2017-12-29 | Commissariat Energie Atomique | Representation semantique du contenu d'une image |
| US9710228B2 (en) | 2014-12-29 | 2017-07-18 | Imagination Technologies Limited | Unified multiply unit |
| US9304835B1 (en) | 2014-12-31 | 2016-04-05 | International Business Machines Corporation | Optimized system for analytics (graphs and sparse matrices) operations |
| US20170061279A1 (en) | 2015-01-14 | 2017-03-02 | Intel Corporation | Updating an artificial neural network using flexible fixed point representation |
| US9910481B2 (en) | 2015-02-13 | 2018-03-06 | Intel Corporation | Performing power management in a multicore processor |
| US9971686B2 (en) | 2015-02-23 | 2018-05-15 | Intel Corporation | Vector cache line write back processors, methods, systems, and instructions |
| US20160255169A1 (en) | 2015-02-27 | 2016-09-01 | Futurewei Technologies, Inc. | Method and system for smart object eviction for proxy cache |
| KR101639943B1 (ko) * | 2015-03-12 | 2016-07-15 | 성균관대학교산학협력단 | 범용 그래픽 프로세서의 공유 메모리를 캐시로 동작시키기 위한 공유 메모리 제어 방법 및 이를 이용한 범용 그래픽 프로세서 |
| US10002455B2 (en) | 2015-04-20 | 2018-06-19 | Intel Corporation | Optimized depth buffer cache apparatus and method |
| US9626299B2 (en) * | 2015-05-01 | 2017-04-18 | Intel Corporation | Changing a hash function based on a conflict ratio associated with cache sets |
| US10262259B2 (en) | 2015-05-08 | 2019-04-16 | Qualcomm Incorporated | Bit width selection for fixed point neural networks |
| US10379865B1 (en) | 2015-05-20 | 2019-08-13 | Marvell International Ltd. | Selection of instructions to be issued |
| US10049322B2 (en) | 2015-05-21 | 2018-08-14 | Google Llc | Prefetching weights for use in a neural network processor |
| US9804666B2 (en) | 2015-05-26 | 2017-10-31 | Samsung Electronics Co., Ltd. | Warp clustering |
| US20160378465A1 (en) | 2015-06-23 | 2016-12-29 | Intel Corporation | Efficient sparse array handling in a processor |
| US11100004B2 (en) * | 2015-06-23 | 2021-08-24 | Advanced Micro Devices, Inc. | Shared virtual address space for heterogeneous processors |
| US20160378366A1 (en) * | 2015-06-24 | 2016-12-29 | Intel Corporation | Internal consecutive row access for long burst length |
| GB2540761B (en) | 2015-07-23 | 2017-12-06 | Advanced Risc Mach Ltd | Cache usage estimation |
| KR20170014109A (ko) | 2015-07-29 | 2017-02-08 | 삼성전자주식회사 | 반도체 메모리 장치 및 이를 포함하는 메모리 시스템 |
| US20170039144A1 (en) | 2015-08-07 | 2017-02-09 | Intel Corporation | Loading data using sub-thread information in a processor |
| US20190073582A1 (en) | 2015-09-23 | 2019-03-07 | Yi Yang | Apparatus and method for local quantization for convolutional neural networks (cnns) |
| US10423354B2 (en) * | 2015-09-23 | 2019-09-24 | Advanced Micro Devices, Inc. | Selective data copying between memory modules |
| US11068401B2 (en) | 2015-09-25 | 2021-07-20 | Intel Corporation | Method and apparatus to improve shared memory efficiency |
| US10423411B2 (en) | 2015-09-26 | 2019-09-24 | Intel Corporation | Data element comparison processors, methods, systems, and instructions |
| US10042749B2 (en) | 2015-11-10 | 2018-08-07 | International Business Machines Corporation | Prefetch insensitive transactional memory |
| US10387309B2 (en) | 2015-10-14 | 2019-08-20 | Elastifile Ltd. | High-performance distributed caching |
| KR101843243B1 (ko) | 2015-10-30 | 2018-03-29 | 세종대학교산학협력단 | 제로값을 피연산자로 갖는 연산자에 대한 연산을 스킵하는 연산 방법 및 연산 장치 |
| US9558156B1 (en) | 2015-11-24 | 2017-01-31 | International Business Machines Corporation | Sparse matrix multiplication using a single field programmable gate array module |
| US10095631B2 (en) * | 2015-12-10 | 2018-10-09 | Arm Limited | System address map for hashing within a chip and between chips |
| CN106886429B (zh) | 2015-12-16 | 2020-11-06 | 华为技术有限公司 | 一种加载驱动程序的方法和服务器 |
| US20170177336A1 (en) | 2015-12-22 | 2017-06-22 | Intel Corporation | Hardware cancellation monitor for floating point operations |
| US9996320B2 (en) | 2015-12-23 | 2018-06-12 | Intel Corporation | Fused multiply-add (FMA) low functional unit |
| KR102604737B1 (ko) | 2016-01-11 | 2023-11-22 | 삼성전자주식회사 | 가속 구조를 생성하는 방법 및 장치 |
| US10762164B2 (en) | 2016-01-20 | 2020-09-01 | Cambricon Technologies Corporation Limited | Vector and matrix computing device |
| US20170214930A1 (en) | 2016-01-26 | 2017-07-27 | Sandia Corporation | Gpu-assisted lossless data compression |
| JP7109363B2 (ja) | 2016-01-28 | 2022-07-29 | サブプライ ソリューションズ エルティーディー. | オーディオコンテンツを提供する方法およびシステム |
| US20170220592A1 (en) * | 2016-02-01 | 2017-08-03 | Microsoft Technology Licensing, Llc | Modular data operations system |
| US9898441B2 (en) | 2016-02-05 | 2018-02-20 | Google Llc | Matrix processing apparatus |
| US20170228252A1 (en) * | 2016-02-10 | 2017-08-10 | Qualcomm Incorporated | System and method for multi-tile data transactions in a system on a chip |
| JP6973087B2 (ja) * | 2016-02-12 | 2021-11-24 | 東洋紡株式会社 | 衣服型電子機器、および衣服型電子機器の製造方法 |
| US9778871B1 (en) | 2016-03-27 | 2017-10-03 | Qualcomm Incorporated | Power-reducing memory subsystem having a system cache and local resource management |
| US20170286118A1 (en) * | 2016-04-01 | 2017-10-05 | Intel Corporation | Processors, methods, systems, and instructions to fetch data to indicated cache level with guaranteed completion |
| CN107315718B (zh) | 2016-04-26 | 2020-08-21 | 中科寒武纪科技股份有限公司 | 一种用于执行向量内积运算的装置和方法 |
| US20170308800A1 (en) | 2016-04-26 | 2017-10-26 | Smokescreen Intelligence, LLC | Interchangeable Artificial Intelligence Perception Systems and Methods |
| US10509732B2 (en) | 2016-04-27 | 2019-12-17 | Advanced Micro Devices, Inc. | Selecting cache aging policy for prefetches based on cache test regions |
| CN107346148A (zh) | 2016-05-04 | 2017-11-14 | 杭州海存信息技术有限公司 | 基于背面查找表的仿真处理器 |
| US9846579B1 (en) | 2016-06-13 | 2017-12-19 | Apple Inc. | Unified integer and floating-point compare circuitry |
| US10176099B2 (en) | 2016-07-11 | 2019-01-08 | Intel Corporation | Using data pattern to mark cache lines as invalid |
| JP6665720B2 (ja) | 2016-07-14 | 2020-03-13 | 富士通株式会社 | 情報処理装置、コンパイルプログラム、コンパイル方法、およびキャッシュ制御方法 |
| US20180018266A1 (en) | 2016-07-18 | 2018-01-18 | Advanced Micro Devices, Inc. | Stride prefetcher for inconsistent strides |
| US10034407B2 (en) | 2016-07-22 | 2018-07-24 | Intel Corporation | Storage sled for a data center |
| CN107689828B (zh) | 2016-08-04 | 2019-12-24 | 柯莉娟 | 以无人机复原飞行器内通信传输功能的方法 |
| CN107688745B (zh) * | 2016-08-04 | 2020-10-30 | 阿里巴巴集团控股有限公司 | 处理、生成内核镜像的方法、内核初始化方法、装置和设备 |
| US10229470B2 (en) | 2016-08-05 | 2019-03-12 | Intel IP Corporation | Mechanism to accelerate graphics workloads in a multi-core computing architecture |
| US20180046898A1 (en) | 2016-08-11 | 2018-02-15 | Vivante Corporation | Zero Coefficient Skipping Convolution Neural Network Engine |
| US10891538B2 (en) | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10528864B2 (en) | 2016-08-11 | 2020-01-07 | Nvidia Corporation | Sparse convolutional neural network accelerator |
| US10467195B2 (en) | 2016-09-06 | 2019-11-05 | Samsung Electronics Co., Ltd. | Adaptive caching replacement manager with dynamic updating granulates and partitions for shared flash-based storage system |
| US20180107602A1 (en) | 2016-10-13 | 2018-04-19 | Intel Corporation | Latency and Bandwidth Efficiency Improvement for Read Modify Write When a Read Operation is Requested to a Partially Modified Write Only Cacheline |
| US11315018B2 (en) | 2016-10-21 | 2022-04-26 | Nvidia Corporation | Systems and methods for pruning neural networks for resource efficient inference |
| US10360163B2 (en) | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
| KR102853351B1 (ko) | 2016-11-04 | 2025-08-29 | 삼성전자주식회사 | 가속 구조를 생성하는 방법 및 장치 |
| US10216479B2 (en) | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
| CN106683036A (zh) | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向gpu高效绘制的帧缓冲区存储编码方法 |
| US10452551B2 (en) | 2016-12-12 | 2019-10-22 | Intel Corporation | Programmable memory prefetcher for prefetching multiple cache lines based on data in a prefetch engine control register |
| KR102712155B1 (ko) | 2016-12-15 | 2024-09-30 | 삼성전자주식회사 | 가속 구조를 생성하는 방법 및 장치 |
| US20180173623A1 (en) | 2016-12-21 | 2018-06-21 | Qualcomm Incorporated | Reducing or avoiding buffering of evicted cache data from an uncompressed cache memory in a compressed memory system to avoid stalling write operations |
| US10521389B2 (en) | 2016-12-23 | 2019-12-31 | Ati Technologies Ulc | Method and apparatus for accessing non-volatile memory as byte addressable memory |
| US20180183577A1 (en) | 2016-12-28 | 2018-06-28 | Intel Corporation | Techniques for secure message authentication with unified hardware acceleration |
| US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
| US10146738B2 (en) | 2016-12-31 | 2018-12-04 | Intel Corporation | Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data |
| EP4089531B1 (en) | 2016-12-31 | 2024-06-26 | Intel Corporation | Systems, methods, and apparatuses for heterogeneous computing |
| KR102637736B1 (ko) * | 2017-01-04 | 2024-02-19 | 삼성전자주식회사 | 그래픽스 처리 방법 및 시스템 |
| US20180210836A1 (en) | 2017-01-24 | 2018-07-26 | Microsoft Technology Licensing, Llc | Thermal and reliability based cache slice migration |
| US11397687B2 (en) | 2017-01-25 | 2022-07-26 | Samsung Electronics Co., Ltd. | Flash-integrated high bandwidth memory appliance |
| US10394719B2 (en) | 2017-01-25 | 2019-08-27 | Samsung Electronics Co., Ltd. | Refresh aware replacement policy for volatile memory cache |
| US10430912B2 (en) | 2017-02-14 | 2019-10-01 | Qualcomm Incorporated | Dynamic shader instruction nullification for graphics processing |
| GB2560159B (en) | 2017-02-23 | 2019-12-25 | Advanced Risc Mach Ltd | Widening arithmetic in a data processing apparatus |
| US10409887B1 (en) | 2017-02-28 | 2019-09-10 | Ambarella, Inc. | Generalized dot product for computer vision applications |
| KR102499396B1 (ko) | 2017-03-03 | 2023-02-13 | 삼성전자 주식회사 | 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법 |
| US10198369B2 (en) | 2017-03-24 | 2019-02-05 | Advanced Micro Devices, Inc. | Dynamic memory remapping to reduce row-buffer conflicts |
| US10896064B2 (en) * | 2017-03-27 | 2021-01-19 | International Business Machines Corporation | Coordinated, topology-aware CPU-GPU-memory scheduling for containerized workloads |
| US10209890B2 (en) | 2017-03-28 | 2019-02-19 | International Business Machines Corporation | Near memory accelerator |
| US10409727B2 (en) * | 2017-03-31 | 2019-09-10 | Intel Corporation | System, apparatus and method for selective enabling of locality-based instruction handling |
| US10303602B2 (en) | 2017-03-31 | 2019-05-28 | Advanced Micro Devices, Inc. | Preemptive cache management policies for processing units |
| US10229059B2 (en) | 2017-03-31 | 2019-03-12 | Intel Corporation | Dynamic fill policy for a shared cache |
| US10595039B2 (en) | 2017-03-31 | 2020-03-17 | Nvidia Corporation | System and method for content and motion controlled action video generation |
| US10423415B2 (en) | 2017-04-01 | 2019-09-24 | Intel Corporation | Hierarchical general register file (GRF) for execution block |
| US10489915B2 (en) | 2017-04-01 | 2019-11-26 | Intel Corporation | Decouple multi-layer render fequency |
| US10503652B2 (en) | 2017-04-01 | 2019-12-10 | Intel Corporation | Sector cache for compression |
| US10282811B2 (en) * | 2017-04-07 | 2019-05-07 | Intel Corporation | Apparatus and method for managing data bias in a graphics processing architecture |
| US10304421B2 (en) | 2017-04-07 | 2019-05-28 | Intel Corporation | Apparatus and method for remote display and content protection in a virtualized graphics processing environment |
| US10861216B2 (en) | 2017-04-07 | 2020-12-08 | Intel Corporation | Ray tracing apparatus and method for memory access and register operations |
| US10511509B2 (en) | 2017-04-07 | 2019-12-17 | Intel Corporation | Technologies for jitter-adaptive low-latency, low power data streaming between device components |
| US10891773B2 (en) * | 2017-04-07 | 2021-01-12 | Intel Corporation | Apparatus and method for efficient graphics virtualization |
| US10725929B2 (en) | 2017-04-10 | 2020-07-28 | Intel Corporation | Graphics memory extended with nonvolatile memory |
| US10175944B2 (en) * | 2017-04-12 | 2019-01-08 | Intel Corporation | Mixed-precision floating-point arithmetic circuitry in specialized processing blocks |
| US20180300258A1 (en) | 2017-04-13 | 2018-10-18 | Futurewei Technologies, Inc. | Access rank aware cache replacement policy |
| US10489877B2 (en) | 2017-04-24 | 2019-11-26 | Intel Corporation | Compute optimization mechanism |
| US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
| US10417731B2 (en) | 2017-04-24 | 2019-09-17 | Intel Corporation | Compute optimization mechanism for deep neural networks |
| US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
| US10186011B2 (en) | 2017-04-28 | 2019-01-22 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
| US10726514B2 (en) | 2017-04-28 | 2020-07-28 | Intel Corporation | Compute optimizations for low precision machine learning operations |
| US10776699B2 (en) | 2017-05-05 | 2020-09-15 | Intel Corporation | Optimized compute hardware for machine learning operations |
| US11488008B2 (en) | 2017-05-05 | 2022-11-01 | Intel Corporation | Hardware implemented point to point communication primitives for machine learning |
| US10338919B2 (en) | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
| US20180336136A1 (en) | 2017-05-17 | 2018-11-22 | Qualcomm Incorporated | Input/output-coherent Look-ahead Cache Access |
| WO2018213636A1 (en) | 2017-05-17 | 2018-11-22 | Google Llc | Performing matrix multiplication in hardware |
| CN116414350A (zh) | 2017-05-17 | 2023-07-11 | 谷歌有限责任公司 | 低时延矩阵乘法部件 |
| JP2019008444A (ja) * | 2017-06-22 | 2019-01-17 | 日本電気株式会社 | 並列処理スケジューラ、並列処理スケジューリング方法および並列処理スケジューリングプログラム |
| US10102015B1 (en) | 2017-06-22 | 2018-10-16 | Microsoft Technology Licensing, Llc | Just in time GPU executed program cross compilation |
| US10282299B2 (en) | 2017-06-23 | 2019-05-07 | Cavium, Llc | Managing cache partitions based on cache usage information |
| US10984049B2 (en) | 2017-06-27 | 2021-04-20 | Nvidia Corporation | Performing traversal stack compression |
| US10969740B2 (en) | 2017-06-27 | 2021-04-06 | Nvidia Corporation | System and method for near-eye light field rendering for wide field of view interactive three-dimensional computer graphics |
| US10614613B2 (en) | 2017-07-28 | 2020-04-07 | Nvidia Corporation | Reducing noise during rendering by performing parallel path space filtering utilizing hashing |
| US10331558B2 (en) | 2017-07-28 | 2019-06-25 | Apple Inc. | Systems and methods for performing memory compression |
| US10990648B2 (en) | 2017-08-07 | 2021-04-27 | Intel Corporation | System and method for an optimized winograd convolution accelerator |
| US10545860B2 (en) | 2017-08-10 | 2020-01-28 | Samsung Electronics Co., Ltd. | Intelligent high bandwidth memory appliance |
| US10394456B2 (en) | 2017-08-23 | 2019-08-27 | Micron Technology, Inc. | On demand memory page size |
| US11232531B2 (en) | 2017-08-29 | 2022-01-25 | Intel Corporation | Method and apparatus for efficient loop processing in a graphics hardware front end |
| US10691572B2 (en) | 2017-08-30 | 2020-06-23 | Nvidia Corporation | Liveness as a factor to evaluate memory vulnerability to soft errors |
| US10725740B2 (en) | 2017-08-31 | 2020-07-28 | Qualcomm Incorporated | Providing efficient multiplication of sparse matrices in matrix-processor-based devices |
| US10503507B2 (en) | 2017-08-31 | 2019-12-10 | Nvidia Corporation | Inline data inspection for workload simplification |
| US10943171B2 (en) * | 2017-09-01 | 2021-03-09 | Facebook, Inc. | Sparse neural network training optimization |
| US10503520B2 (en) | 2017-09-26 | 2019-12-10 | Intel Corporation | Automatic waking of power domains for graphics configuration requests |
| US10782904B2 (en) | 2017-09-28 | 2020-09-22 | Intel Corporation | Host computing arrangement, remote server arrangement, storage system and methods thereof |
| US10692244B2 (en) | 2017-10-06 | 2020-06-23 | Nvidia Corporation | Learning based camera pose estimation from images of an environment |
| KR20190042193A (ko) * | 2017-10-16 | 2019-04-24 | 현대건설주식회사 | 피씨 더블월을 이용한 벽체 구조물의 시공방법 |
| US11568218B2 (en) | 2017-10-17 | 2023-01-31 | Xilinx, Inc. | Neural network processing system having host controlled kernel acclerators |
| US11222256B2 (en) | 2017-10-17 | 2022-01-11 | Xilinx, Inc. | Neural network processing system having multiple processors and a neural network accelerator |
| GB2569098B (en) | 2017-10-20 | 2020-01-08 | Graphcore Ltd | Combining states of multiple threads in a multi-threaded processor |
| GB2569844B (en) | 2017-10-20 | 2021-01-06 | Graphcore Ltd | Sending data off-chip |
| GB2569271B (en) | 2017-10-20 | 2020-05-13 | Graphcore Ltd | Synchronization with a host processor |
| GB2569274B (en) | 2017-10-20 | 2020-07-15 | Graphcore Ltd | Synchronization amongst processor tiles |
| US11651223B2 (en) | 2017-10-27 | 2023-05-16 | Baidu Usa Llc | Systems and methods for block-sparse recurrent neural networks |
| KR102414047B1 (ko) | 2017-10-30 | 2022-06-29 | 에스케이하이닉스 주식회사 | 통합 메모리 디바이스 및 그의 동작 방법 |
| US10762137B1 (en) | 2017-11-15 | 2020-09-01 | Amazon Technologies, Inc. | Page table search engine |
| US10762620B2 (en) | 2017-11-27 | 2020-09-01 | Nvidia Corporation | Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene |
| US11977974B2 (en) | 2017-11-30 | 2024-05-07 | International Business Machines Corporation | Compression of fully connected / recurrent layers of deep network(s) through enforcing spatial locality to weight matrices and effecting frequency compression |
| US11294810B2 (en) | 2017-12-12 | 2022-04-05 | Advanced Micro Devices, Inc. | Memory request throttling to constrain memory bandwidth utilization |
| US10579535B2 (en) | 2017-12-15 | 2020-03-03 | Intel Corporation | Defragmented and efficient micro-operation cache |
| WO2019129070A1 (zh) | 2017-12-27 | 2019-07-04 | 北京中科寒武纪科技有限公司 | 一种集成电路芯片装置 |
| US10613972B2 (en) * | 2017-12-29 | 2020-04-07 | Intel Corporation | Dynamic configuration of caches in a multi-context supported graphics processor |
| US10482156B2 (en) | 2017-12-29 | 2019-11-19 | Facebook, Inc. | Sparsity-aware hardware accelerators |
| US10423429B2 (en) * | 2018-01-02 | 2019-09-24 | International Business Machines Corporation | Reconfiguring processing groups for cascading data workloads |
| US10685947B2 (en) | 2018-01-12 | 2020-06-16 | Intel Corporation | Distributed semiconductor die and package architecture |
| KR102533241B1 (ko) | 2018-01-25 | 2023-05-16 | 삼성전자주식회사 | 적응적으로 캐시 일관성을 제어하도록 구성된 이종 컴퓨팅 시스템 |
| US10970080B2 (en) | 2018-02-08 | 2021-04-06 | Marvell Asia Pte, Ltd. | Systems and methods for programmable hardware architecture for machine learning |
| EP3750113B1 (en) | 2018-02-09 | 2025-08-20 | DeepMind Technologies Limited | Contiguous sparsity pattern neural networks |
| US10755201B2 (en) | 2018-02-14 | 2020-08-25 | Lucid Circuit, Inc. | Systems and methods for data collection and analysis at the edge |
| JP2019148969A (ja) | 2018-02-27 | 2019-09-05 | 富士通株式会社 | 行列演算装置、行列演算方法および行列演算プログラム |
| US12481500B2 (en) | 2018-03-09 | 2025-11-25 | Nvidia Corporation | Accelerating linear algebra kernels for any processor architecture |
| US20190278600A1 (en) * | 2018-03-09 | 2019-09-12 | Nvidia Corporation | Tiled compressed sparse matrix format |
| US10678508B2 (en) | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
| US10572568B2 (en) | 2018-03-28 | 2020-02-25 | Intel Corporation | Accelerator for sparse-dense matrix multiplication |
| EP3777189A1 (en) | 2018-04-13 | 2021-02-17 | Koninklijke KPN N.V. | Block-level super-resolution based video coding |
| US11010092B2 (en) * | 2018-05-09 | 2021-05-18 | Micron Technology, Inc. | Prefetch signaling in memory system or sub-system |
| US10572409B1 (en) | 2018-05-10 | 2020-02-25 | Xilinx, Inc. | Sparse matrix processing circuitry |
| US11269805B2 (en) | 2018-05-15 | 2022-03-08 | Intel Corporation | Signal pathways in multi-tile processors |
| GB2574060B (en) | 2018-05-25 | 2022-11-23 | Myrtle Software Ltd | Processing matrix vector multiplication |
| US10838864B2 (en) | 2018-05-30 | 2020-11-17 | Advanced Micro Devices, Inc. | Prioritizing local and remote memory access in a non-uniform memory access architecture |
| US12072807B2 (en) * | 2018-06-05 | 2024-08-27 | Rambus Inc. | Storage and access of data and tags in a multi-way set associative cache |
| US10699468B2 (en) | 2018-06-09 | 2020-06-30 | Adshir Ltd. | Method for non-planar specular reflections in hybrid ray tracing |
| US12099912B2 (en) | 2018-06-22 | 2024-09-24 | Samsung Electronics Co., Ltd. | Neural processor |
| US10620951B2 (en) | 2018-06-22 | 2020-04-14 | Intel Corporation | Matrix multiplication acceleration of sparse matrices using column folding and squeezing |
| CN110795228B (zh) | 2018-08-03 | 2023-08-25 | 伊姆西Ip控股有限责任公司 | 用于训练深度学习模型的方法和制品、以及计算系统 |
| CN111010883B (zh) | 2018-08-06 | 2022-07-12 | 华为技术有限公司 | 矩阵的处理方法、装置及逻辑电路 |
| EP3608828A1 (de) | 2018-08-09 | 2020-02-12 | Olympus Soft Imaging Solutions GmbH | Verfahren zur bereitstellung eines auswertungsmittels für wenigstens ein optisches anwendungssystem einer mikroskopischen anwendungstechnologie |
| KR20200022118A (ko) | 2018-08-22 | 2020-03-03 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그 동작 방법 |
| US20190042457A1 (en) | 2018-08-22 | 2019-02-07 | Intel Corporation | Cache (partition) size determination method and apparatus |
| US11833681B2 (en) | 2018-08-24 | 2023-12-05 | Nvidia Corporation | Robotic control system |
| US10846241B2 (en) | 2018-08-29 | 2020-11-24 | Vmware, Inc. | Score-based cache admission and eviction |
| US11093248B2 (en) | 2018-09-10 | 2021-08-17 | International Business Machines Corporation | Prefetch queue allocation protection bubble in a processor |
| US10817426B2 (en) | 2018-09-24 | 2020-10-27 | Arm Limited | Prefetching techniques |
| US10769070B2 (en) | 2018-09-25 | 2020-09-08 | Arm Limited | Multiple stride prefetching |
| US20200098725A1 (en) | 2018-09-26 | 2020-03-26 | Intel Corporation | Semiconductor package or semiconductor package structure with dual-sided interposer and memory |
| US11294626B2 (en) | 2018-09-27 | 2022-04-05 | Intel Corporation | Floating-point dynamic range expansion |
| US10853067B2 (en) | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
| WO2020061992A1 (en) | 2018-09-28 | 2020-04-02 | Intel Corporation | Translation lookaside buffer to implement adapative page size |
| US11307863B1 (en) | 2018-10-08 | 2022-04-19 | Nvidia Corporation | Graphics processing unit systems for performing data analytics operations in data science |
| WO2020073211A1 (zh) | 2018-10-09 | 2020-04-16 | 华为技术有限公司 | 运算加速器、处理方法及相关设备 |
| US11263529B2 (en) | 2018-10-10 | 2022-03-01 | Google Llc | Modifying machine learning models to improve locality |
| GB2578097B (en) | 2018-10-15 | 2021-02-17 | Advanced Risc Mach Ltd | Cache control circuitry and methods |
| US11010314B2 (en) | 2018-10-30 | 2021-05-18 | Marvell Asia Pte. Ltd. | Artificial intelligence-enabled management of storage media access |
| US10768895B2 (en) | 2018-11-08 | 2020-09-08 | Movidius Limited | Dot product calculators and methods of operating the same |
| US11366663B2 (en) | 2018-11-09 | 2022-06-21 | Intel Corporation | Systems and methods for performing 16-bit floating-point vector dot product instructions |
| US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
| US20200175074A1 (en) | 2018-12-04 | 2020-06-04 | Vmware, Inc. | Tree structure aware cache eviction policy |
| GB2579590B (en) | 2018-12-04 | 2021-10-13 | Imagination Tech Ltd | Workload repetition redundancy |
| US11615307B2 (en) | 2018-12-06 | 2023-03-28 | MIPS Tech, LLC | Neural network data computation using mixed-precision |
| US11893470B2 (en) | 2018-12-06 | 2024-02-06 | MIPS Tech, LLC | Neural network processing using specialized data representation |
| US20200202195A1 (en) | 2018-12-06 | 2020-06-25 | MIPS Tech, LLC | Neural network processing using mixed-precision data representation |
| US11610879B2 (en) | 2018-12-19 | 2023-03-21 | Advanced Micro Devices, Inc. | Power on die discovery in 3D stacked die architectures with varying number of stacked die |
| GB2580151B (en) | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Identifying processing units in a processor |
| GB2580316B (en) | 2018-12-27 | 2021-02-24 | Graphcore Ltd | Instruction cache in a multi-threaded processor |
| US10832371B2 (en) | 2018-12-28 | 2020-11-10 | Intel Corporation | Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array |
| US10937225B2 (en) | 2018-12-28 | 2021-03-02 | Intel Corporation | Cell primitive for unstructured volume rendering |
| US10909741B2 (en) | 2018-12-28 | 2021-02-02 | Intel Corporation | Speculative execution of hit and intersection shaders on programmable ray tracing architectures |
| US11210100B2 (en) | 2019-01-08 | 2021-12-28 | Apple Inc. | Coprocessor operation bundling |
| JP7247592B2 (ja) | 2019-01-16 | 2023-03-29 | 株式会社デンソー | 異常検出装置、異常検出プログラム、異常検出方法及び異常検出システム |
| US11550971B1 (en) | 2019-01-18 | 2023-01-10 | X Development Llc | Physics simulation on machine-learning accelerated hardware platforms |
| KR20200091623A (ko) | 2019-01-23 | 2020-07-31 | 삼성전자주식회사 | 위노그라드 변환에 기반한 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치 |
| US11106600B2 (en) | 2019-01-24 | 2021-08-31 | Advanced Micro Devices, Inc. | Cache replacement based on translation lookaside buffer evictions |
| US10725923B1 (en) | 2019-02-05 | 2020-07-28 | Arm Limited | Cache access detection and prediction |
| US11805109B1 (en) * | 2019-02-25 | 2023-10-31 | Amazon Technologies, Inc. | Data transfer encryption offloading using session pairs |
| US10915461B2 (en) | 2019-03-05 | 2021-02-09 | International Business Machines Corporation | Multilevel cache eviction management |
| US12182035B2 (en) | 2019-03-15 | 2024-12-31 | Intel Corporation | Systems and methods for cache optimization |
| JP7408671B2 (ja) | 2019-03-15 | 2024-01-05 | インテル コーポレイション | シストリックアレイに対するブロックスパース演算のためのアーキテクチャ |
| US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
| EP3974968B1 (en) | 2019-03-15 | 2024-09-04 | Intel Corporation | Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format |
| US10630606B1 (en) | 2019-03-18 | 2020-04-21 | Brightways Corporation | System, method and architecture for data center network switching |
| KR102151444B1 (ko) | 2019-04-11 | 2020-09-03 | 주식회사 실리콘아츠 | Mimd 기반의 t&i 스케줄링을 이용한 레이 트레이싱 장치 |
| US11036642B2 (en) | 2019-04-26 | 2021-06-15 | Intel Corporation | Architectural enhancements for computing systems having artificial intelligence logic disposed locally to memory |
| US11126404B2 (en) | 2019-05-20 | 2021-09-21 | Nxp B.V. | Random number generator using multiple entropy sources and a method for generating random numbers |
| US11455171B2 (en) | 2019-05-29 | 2022-09-27 | Gray Research LLC | Multiported parity scoreboard circuit |
| US20200380369A1 (en) | 2019-05-31 | 2020-12-03 | Nvidia Corporation | Training a neural network using selective weight updates |
| US11675998B2 (en) | 2019-07-15 | 2023-06-13 | Meta Platforms Technologies, Llc | System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator |
| US11201838B2 (en) | 2019-09-25 | 2021-12-14 | Intel Corporation | System, apparatus and method for increasing efficiency of link communications |
| US11099756B2 (en) * | 2019-10-16 | 2021-08-24 | EMC IP Holding Company LLC | Managing data block compression in a storage system |
| CN110666066B (zh) | 2019-10-21 | 2023-12-29 | 福建申利卡铝业发展有限公司 | 一种汽车轮毂旋压模具及工艺 |
| US11861761B2 (en) | 2019-11-15 | 2024-01-02 | Intel Corporation | Graphics processing unit processing and caching improvements |
| US11663746B2 (en) | 2019-11-15 | 2023-05-30 | Intel Corporation | Systolic arithmetic on sparse data |
| US11275561B2 (en) | 2019-12-12 | 2022-03-15 | International Business Machines Corporation | Mixed precision floating-point multiply-add operation |
| US11645145B2 (en) | 2019-12-16 | 2023-05-09 | Qualcomm Incorporated | Methods and apparatus to facilitate speculative page fault handling in a graphics processing unit |
| US11658922B2 (en) | 2020-08-31 | 2023-05-23 | Micron Technology, Inc. | Optional path ordering in packet-based network |
| US11392527B2 (en) | 2020-08-31 | 2022-07-19 | Micron Technology, Inc. | Ordered delivery of data packets based on type of path information in each packet |
| US12164924B2 (en) | 2020-09-25 | 2024-12-10 | Advanced Micro Devices, Inc. | Compression metadata assisted computation |
| CN112506567B (zh) | 2020-11-27 | 2022-11-04 | 海光信息技术股份有限公司 | 数据读取方法和数据读取电路 |
| US12216734B2 (en) | 2020-12-23 | 2025-02-04 | Intel Corporation | Apparatus and method for conjugate transpose and multiply |
| US12423597B2 (en) * | 2021-01-22 | 2025-09-23 | Arm Limited | Prediction circuitry configured to predict speculative action based on hit-to-train ratio or based on train counter and hit counter |
| US12190405B2 (en) | 2021-07-06 | 2025-01-07 | Intel Corporation | Direct memory writes by network interface of a graphics processing unit |
| US11775307B2 (en) | 2021-09-24 | 2023-10-03 | Apple Inc. | Systems and methods for synchronizing data processing in a cellular modem |
| EP4402554A1 (en) | 2021-10-19 | 2024-07-24 | Google Llc | Large-scale accelerator system energy performance optimization |
| CN114050884B (zh) * | 2021-11-08 | 2023-05-12 | 重庆邮电大学 | 一种面向工业无线与tsn融合的跨网时间同步方法 |
| US11941742B2 (en) | 2022-06-23 | 2024-03-26 | Apple Inc. | Tiled processor communication fabric |
| US20240111609A1 (en) | 2022-09-30 | 2024-04-04 | Intel Corporation | Synchronization utilizing local team barriers for thread team processing |
| CN115756384B (zh) | 2022-11-22 | 2024-05-17 | 海光信息技术股份有限公司 | 张量计算单元及使用方法、数据处理装置及操作方法 |
-
2020
- 2020-03-14 EP EP21192702.5A patent/EP3974968B1/en active Active
- 2020-03-14 EP EP20719251.9A patent/EP3938915B1/en active Active
- 2020-03-14 WO PCT/US2020/022835 patent/WO2020190797A1/en not_active Ceased
- 2020-03-14 US US17/428,539 patent/US20220197800A1/en not_active Abandoned
- 2020-03-14 WO PCT/US2020/022842 patent/WO2020190804A1/en not_active Ceased
- 2020-03-14 JP JP2021544339A patent/JP7107482B2/ja active Active
- 2020-03-14 DE DE112020000874.6T patent/DE112020000874T5/de active Pending
- 2020-03-14 DE DE112020001258.1T patent/DE112020001258T5/de active Pending
- 2020-03-14 CN CN202080014566.3A patent/CN113454587A/zh active Pending
- 2020-03-14 PL PL21192702.5T patent/PL3974968T3/pl unknown
- 2020-03-14 DE DE112020001256.5T patent/DE112020001256T5/de active Pending
- 2020-03-14 PL PL20718903.6T patent/PL3938914T3/pl unknown
- 2020-03-14 WO PCT/US2020/022841 patent/WO2020190803A1/en not_active Ceased
- 2020-03-14 US US17/428,530 patent/US12210477B2/en active Active
- 2020-03-14 CN CN202080011299.4A patent/CN113439265A/zh active Pending
- 2020-03-14 US US17/428,527 patent/US11995029B2/en active Active
- 2020-03-14 PL PL20719794.8T patent/PL3938912T3/pl unknown
- 2020-03-14 WO PCT/US2020/022836 patent/WO2020190798A1/en not_active Ceased
- 2020-03-14 US US17/428,233 patent/US12141094B2/en active Active
- 2020-03-14 ES ES20718903T patent/ES3003288T3/es active Active
- 2020-03-14 ES ES21192702T patent/ES2996958T3/es active Active
- 2020-03-14 CN CN202080012584.8A patent/CN113396390A/zh active Pending
- 2020-03-14 US US17/430,611 patent/US20220138101A1/en active Pending
- 2020-03-14 EP EP20718903.6A patent/EP3938914B1/en active Active
- 2020-03-14 EP EP20718906.9A patent/EP3938895A1/en active Pending
- 2020-03-14 ES ES20719794T patent/ES2965299T3/es active Active
- 2020-03-14 DE DE112020000850.9T patent/DE112020000850T5/de active Pending
- 2020-03-14 PL PL20718902.8T patent/PL3938894T3/pl unknown
- 2020-03-14 US US17/429,291 patent/US12066975B2/en active Active
- 2020-03-14 CN CN202080011554.5A patent/CN113366447A/zh active Pending
- 2020-03-14 WO PCT/US2020/022838 patent/WO2020190800A1/en not_active Ceased
- 2020-03-14 US US17/430,963 patent/US12242414B2/en active Active
- 2020-03-14 WO PCT/US2020/022849 patent/WO2020190811A1/en not_active Ceased
- 2020-03-14 US US17/430,574 patent/US12093210B2/en active Active
- 2020-03-14 ES ES20718902T patent/ES2964969T3/es active Active
- 2020-03-14 WO PCT/US2020/022844 patent/WO2020190806A1/en not_active Ceased
- 2020-03-14 CN CN202080011341.2A patent/CN113366435A/zh active Pending
- 2020-03-14 US US17/430,041 patent/US20220138895A1/en active Pending
- 2020-03-14 CN CN202311777921.4A patent/CN117689531A/zh active Pending
- 2020-03-14 US US17/428,523 patent/US12007935B2/en active Active
- 2020-03-14 WO PCT/US2020/022852 patent/WO2020190814A1/en not_active Ceased
- 2020-03-14 CN CN202080014501.9A patent/CN113424148A/zh active Pending
- 2020-03-14 EP EP20719794.8A patent/EP3938912B1/en active Active
- 2020-03-14 EP EP20718902.8A patent/EP3938894B1/en active Active
- 2020-03-14 US US17/429,873 patent/US12013808B2/en active Active
- 2020-03-14 WO PCT/US2020/022850 patent/WO2020190812A1/en not_active Ceased
- 2020-03-14 EP EP20718910.1A patent/EP3938891A1/en active Pending
- 2020-03-14 JP JP2021544544A patent/JP7420440B2/ja active Active
- 2020-03-14 KR KR1020217025904A patent/KR102596790B1/ko active Active
- 2020-03-14 WO PCT/US2020/022848 patent/WO2020190810A1/en not_active Ceased
- 2020-03-14 CN CN202080014235.XA patent/CN113396400A/zh active Pending
- 2020-03-14 WO PCT/US2020/022840 patent/WO2020190802A1/en not_active Ceased
- 2020-03-14 WO PCT/US2020/022837 patent/WO2020190799A2/en not_active Ceased
- 2020-03-14 US US17/310,540 patent/US11954062B2/en active Active
- 2020-03-14 CN CN202080011597.3A patent/CN113366454A/zh active Pending
- 2020-03-14 US US17/428,534 patent/US20220180467A1/en active Pending
- 2020-03-14 US US17/428,216 patent/US12079155B2/en active Active
- 2020-03-14 JP JP2021544279A patent/JP7513354B2/ja active Active
- 2020-03-14 CN CN202080014341.8A patent/CN113424162A/zh active Pending
- 2020-03-14 CN CN202080014347.5A patent/CN113396401A/zh active Pending
- 2020-03-14 BR BR112021016111A patent/BR112021016111A2/pt unknown
- 2020-03-14 WO PCT/US2020/022851 patent/WO2020190813A1/en not_active Ceased
- 2020-03-14 CN CN202210586709.9A patent/CN114968366A/zh active Pending
- 2020-03-14 ES ES20719251T patent/ES3039059T3/es active Active
- 2020-03-14 PL PL20719251.9T patent/PL3938915T3/pl unknown
- 2020-03-14 WO PCT/US2020/022843 patent/WO2020190805A1/en not_active Ceased
- 2020-03-14 EP EP23197619.2A patent/EP4270201A3/en active Pending
- 2020-03-14 US US17/431,034 patent/US12099461B2/en active Active
- 2020-03-14 CN CN202080014422.8A patent/CN113508362A/zh active Pending
- 2020-03-14 CN CN202080014355.XA patent/CN113383304A/zh active Pending
- 2020-03-14 CN CN202080011587.XA patent/CN113366437A/zh active Pending
- 2020-03-14 EP EP20718454.0A patent/EP3938913A1/en active Pending
- 2020-03-14 WO PCT/US2020/022839 patent/WO2020190801A1/en not_active Ceased
-
2021
- 2021-06-14 US US17/304,092 patent/US11361496B2/en active Active
-
2022
- 2022-02-17 US US17/674,703 patent/US12153541B2/en active Active
- 2022-04-28 US US17/732,308 patent/US11620256B2/en active Active
- 2022-05-27 US US17/827,067 patent/US11709793B2/en active Active
- 2022-06-24 US US17/849,201 patent/US11899614B2/en active Active
- 2022-06-29 JP JP2022104265A patent/JP7414894B2/ja active Active
- 2022-10-07 US US17/961,833 patent/US12182062B1/en active Active
-
2023
- 2023-02-17 US US18/170,900 patent/US11954063B2/en active Active
- 2023-10-20 US US18/491,474 patent/US12321310B2/en active Active
- 2023-11-21 US US18/516,716 patent/US20240086357A1/en active Pending
- 2023-12-28 JP JP2023223711A patent/JP7631649B2/ja active Active
-
2024
- 2024-01-17 US US18/415,052 patent/US12204487B2/en active Active
- 2024-02-05 US US18/432,859 patent/US12386779B2/en active Active
- 2024-03-28 US US18/620,284 patent/US20240320184A1/en active Pending
- 2024-04-04 US US18/626,775 patent/US20240345990A1/en active Pending
- 2024-04-26 US US18/647,549 patent/US20240362180A1/en active Pending
- 2024-06-10 US US18/738,785 patent/US20240411717A1/en active Pending
- 2024-06-25 JP JP2024102405A patent/JP2024138299A/ja active Pending
- 2024-07-22 US US18/779,461 patent/US20240403259A1/en active Pending
- 2024-08-01 US US18/791,963 patent/US20250028675A1/en active Pending
- 2024-08-02 US US18/793,247 patent/US20250004981A1/en active Pending
- 2024-10-04 US US18/906,859 patent/US20250103547A1/en active Pending
- 2024-10-04 US US18/906,428 patent/US20250103546A1/en active Pending
- 2024-10-15 US US18/915,492 patent/US20250117356A1/en active Pending
- 2024-11-14 US US18/948,174 patent/US20250103548A1/en active Pending
- 2024-11-25 US US18/958,930 patent/US20250173308A1/en active Pending
-
2025
- 2025-01-09 US US19/014,672 patent/US20250156371A1/en active Pending
- 2025-04-09 US US19/174,356 patent/US20250315405A1/en active Pending
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES3003288T3 (en) | Dynamic memory reconfiguration | |
| US20220350751A1 (en) | Systems and methods for cache optimization | |
| ES3034021T3 (en) | Compute optimization mechanism | |
| ES3034105T3 (en) | Neural network scheduling mechanism | |
| ES3011834T3 (en) | Machine learning sparse computation mechanism | |
| ES3027615T3 (en) | Memory prefetching in multiple gpu environment | |
| CN113383313A (zh) | 用于图形处理的线程组调度 | |
| ES2963941T3 (es) | Ahorro de memoria de GPU compartiendo la memoria intermedia entre instancias similares en la misma GPU | |
| WO2020190429A1 (en) | Data prefetching for graphics data processing |