DE112020001258T5 - Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat - Google Patents

Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat Download PDF

Info

Publication number
DE112020001258T5
DE112020001258T5 DE112020001258.1T DE112020001258T DE112020001258T5 DE 112020001258 T5 DE112020001258 T5 DE 112020001258T5 DE 112020001258 T DE112020001258 T DE 112020001258T DE 112020001258 T5 DE112020001258 T5 DE 112020001258T5
Authority
DE
Germany
Prior art keywords
graphics
processor
memory
data
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.)
Pending
Application number
DE112020001258.1T
Other languages
English (en)
Inventor
Subramaniam Maiyuran
Shubra Marwaha
Ashutosh Garg
Supratim Pal
Jorge PARRA
Chandra Gurram
Varghese George
Darin Starkey
Guei-Yuan Lueh
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112020001258T5 publication Critical patent/DE112020001258T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing 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/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/24569Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/57Arithmetic 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/575Basic 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing

Abstract

Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat werden offenbart. Bei einer Ausführungsform umfasst ein Grafikmultiprozessor, eine Anweisungseinheit zum Versenden von Anweisungen undeine Verarbeitungsressource, die mit der Anweisungseinheit gekoppelt ist. Die Verarbeitungsressource ist dafür ausgelegt, eine Skalarproduktakkumulationsanweisung von der Anweisungseinheit zu empfangen und die Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Zahlenformats zu verarbeiten.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Die vorliegende Anmeldung bezieht sich auf, und beansprucht unter 35 USC 119(e), den Nutzen und die Priorität der vorläufigen US-Anmeldungen 62/819,337 mit dem Titel GRAPHICS PROCESSING von Abhishek Appu et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0271-Z), 62/819,435 , mit dem Titel GRAPHICS DATA PROCESSING, von Lakshminarayanan Striramassarma et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0285-Z) und 62/819,361 mit dem Titel SYSTEMS AND METHODS FOR PARTITIONING CACHE TO REDUCE CACHE ACCESS LATENCY, von Subramaniam Maiyuran, et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0286-Z), wobei der Inhalt aller hiermit durch Bezugnahme aufgenommen wird.
  • TECHNISCHES GEBIET
  • Diese Offenbarung bezieht sich allgemein auf Datenverarbeitung und insbesondere auf Datenverarbeitung über eine Allzweck-Grafikverarbeitungseinheit.
  • HINTERGRUND DER OFFENBARUNG
  • Gegenwärtige parallele Grafikdatenverarbeitung umfasst Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten durchzuführen, wie beispielsweise lineare Interpolation, Tesselation, Rasterung, Texturmapping, Tiefenprüfung usw. Traditionell verwendeten Grafikprozessoren Recheneinheiten mit festen Funktionen, um Grafikdaten zu verarbeiten; in jüngerer Zeit wurden jedoch Teile von Grafikprozessoren programmierbar gemacht, was es solchen Prozessoren ermöglicht, eine breitere Vielfalt von Operationen zum Verarbeiten von Vertex- und Fragmentdaten zu unterstützen.
  • Um die Leistungsfähigkeit weiter zu verbessern, implementieren Grafikprozessoren typischerweise Verarbeitungstechniken wie Pipelining, bei denen versucht wird, parallel so viele Grafikdaten wie möglich über die verschiedenen Teile der Grafik-Pipeline hinweg zu verarbeiten. Parallelgrafikprozessoren mit SIMT-Architekturen (SIMT: Single Instruction, Multiple Thread) sind dafür designt, den Umfang von Parallelverarbeitung in der Grafik-Pipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Einen allgemeinen Überblick über Soft- und Hardware für SIMT-Architekturen finden sich bei Shane Cook, CUDA-Programming Kapitel 3, Seiten 37-51 (2013).
  • Figurenliste
  • Für ein ausführliches Verständnis der Art und Weise der oben angeführten Merkmale der vorliegenden Ausführungsformen kann eine speziellere Beschreibung der oben kurz zusammengefassten Ausführungsformen unter Bezugnahme auf Ausführungsformen vorgenommen werden, von denen manche in den beigefügten Zeichnungen veranschaulicht sind. Es ist jedoch anzumerken, dass die beigefügten Zeichnungen nur typische Ausführungsformen veranschaulichen und daher nicht als ihren Schutzumfang beschränkend anzusehen sind.
    • 1 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, das zum Implementieren eines oder mehrerer Aspekte der hierin beschriebenen Ausführungsformen ausgelegt ist;
    • 2A-2D veranschaulichen Parallelprozessorkomponenten;
    • 3A-3C sind Blockdiagramme von Grafikmultiprozessoren und Multiprozessor-basierten GPUs;
    • 4A-4F veranschaulichen eine beispielhafte Architektur, in der mehrere GPUs kommunikativ mit mehreren Mehrkernprozessoren gekoppelt sind;
    • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline;
    • 6 veranschaulicht einen Software-Stack für maschinelles Lernen;
    • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit;
    • 8 veranschaulicht ein Multi-GPU-Rechensystem;
    • 9A-9B veranschaulichen Schichten beispielhafter tiefer neuronaler Netze;
    • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz;
    • 11 veranschaulicht Training und Einsatz eines tiefen neuronalen Netzes;
    • 12 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht;
    • 13 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC), das zum Durchführen einer Inferenz unter Verwendung eines trainierten Modells geeignet ist;
    • 14 ist ein Blockdiagramm eines Verarbeitungssystems;
    • 15A-15C veranschaulichen Rechensysteme und Grafikprozessoren;
    • 16A-16C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen;
    • 17 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors;
    • 18A-18B veranschaulichen eine Thread-Ausführungslogik, die ein Array von Verarbeitungselementen beinhaltet, die in einem Grafikprozessorkern eingesetzt werden;
    • 19 veranschaulicht eine zusätzliche Ausführungseinheit;
    • 20 ist ein Blockdiagramm, das die Befehlsformate eines Grafikprozessors veranschaulicht;
    • 21 ist ein Blockdiagramm einer zusätzlichen Grafikprozessorarchitektur;
    • 22A-22B veranschaulichen ein Grafikprozessor-Befehlsformat und eine Grafikprozessor-Befehlssequenz;
    • 23 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem;
    • 24A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem veranschaulicht;
    • 24B veranschaulicht eine Querschnittsseitenansicht einer Package-Zusammenstellung einer integrierten Schaltung;
    • 24C veranschaulicht eine Package-Zusammenstellung, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, die mit einem Substrat verbunden sind(z. B. einem Basis-Die);
    • 24D veranschaulicht eine Package-Zusammenstellung, die austauschbare Chiplets beinhaltet;
    • 25 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung eines System-auf-Chip veranschaulicht;
    • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC veranschaulichen;
    • 27 veranschaulicht ein Blockdiagramm einer Schaltung 2700 zum Durchführen einer dp2a-Anweisung für das BF16-Format in einer Verarbeitungsressource (z. B. eine Funktionseinheit, FPU) gemäß einer Ausführungsform.
    • 28 veranschaulicht ein Blockdiagramm einer Schaltung 2800 zum Durchführen einer dp2a-Anweisung für das BF16-Format in einer FPU gemäß einer weiteren Ausführungsform.
    • 29 veranschaulicht ein Blockdiagramm einer Schaltung 2900 zum Durchführen einer dp2a-Anweisung für das BF16-Format in einer FPU gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Eine Grafikverarbeitungseinheit (GPU) ist kommunikativ mit Host-/Prozessorkernen gekoppelt, um beispielsweise Grafikoperationen, Maschinenlemoperationen, Musteranalyseoperationen und/oder verschiedene Allzweck-GPU(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder ein anderes Interconnect (z. B. ein Hochgeschwindigkeits-Interconnect wie PCIe oder NVLink) kommunikativ mit dem Hostprozessor/den Kernen verbunden sein. Alternativ kann die GPU auf demselben Package oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus bzw. ein internes Interconnect (d. h. innerhalb des Package oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, auf welche die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In der folgenden Beschreibung werden zahlreiche spezielle Einzelheiten dargelegt, um ein umfassenderes Verständnis zu liefern. Fachleute werden jedoch erkennen, dass die hierin beschriebenen Ausführungsformen ohne eine oder mehrere dieser speziellen Einzelheiten in die Praxis umgesetzt werden können. In anderen Fällen wurden wohlbekannte Merkmale nicht beschrieben, um die Einzelheiten der vorliegenden Ausführungsformen nicht unklar zu machen.
  • Systemübersicht
  • 1 ist ein Blockdiagramm, das ein Rechensystem 100 veranschaulicht, das dazu ausgestaltet ist, einen oder mehrere Aspekte der hierin beschriebenen Ausführungsformen zu implementieren. Das Rechensystem 100 beinhaltet ein Verarbeitungssubsystem 101, das einen oder mehrere Prozessoren 102 und einen Systemspeicher 104 aufweist, die über einen Interconnect-Pfad kommunizieren, der einen Speicher-Hub 105 beinhalten kann. Der Speicher-Hub 105 kann eine separate Komponente innerhalb einer Chipsatzkomponente sein oder kann in dem einen oder den mehreren Prozessoren 102 integriert sein. Der Speicher-Hub 105 ist über einen Kommunikations-Link 106 mit einem E/A-Subsystem 111 gekoppelt. Das E/A-Subsystem 111 beinhaltet einen E/A-Hub 107, der ermöglichen kann, dass das Rechensystem 100 eine Eingabe von einer oder mehreren Eingabevorrichtungen 108 empfängt. Außerdem kann der E/A-Hub 107 ermöglichen, dass eine Anzeigesteuerung, die in dem einen oder den mehreren Prozessoren 102 enthalten sein kann, einer oder mehreren Anzeigevorrichtungen 110A Ausgaben zuführt. In einer Ausführungsform können die eine oder die mehreren Anzeigevorrichtungen 110A, die mit dem E/A-Hub 107 gekoppelt sind, eine lokale, interne oder eingebettete Anzeigevorrichtung beinhalten.
  • Das Verarbeitungssubsystem 101 beinhaltet zum Beispiel einen oder mehrere Parallelprozessoren 112, die über einen Bus oder einen anderen Kommunikations-Link 113 an den Speicher-Hub 105 gekoppelt sind. Der Kommunikations-Link 113 kann eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikation-Link-Technologien oder - protokollen sein, wie, jedoch nicht darauf beschränkt, PCI Express, oder kann eine anbieterspezifische Kommunikationsschnittstelle oder ein Kommunikations-Fabric sein. Der eine oder die mehreren Parallelprozessor 112 können ein rechnerisch fokussiertes Parallel- oder Vektorverarbeitungssystem bilden, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern beinhalten kann, wie etwa einen MIC-Prozessor (MIC: Many Integrated Core). Zum Beispiel bilden der eine oder die mehreren Parallelprozessoren 112 ein Grafikverarbeitungssubsystem, das Pixel an eine der einen oder mehreren Anzeigevorrichtungen 110A, die über den E/A-Hub 107 gekoppelt sind, ausgeben kann. Der eine oder die mehreren Parallelprozessoren 112 können auch eine Anzeigesteuerung und eine Anzeigeschnittstelle (nicht dargestellt) beinhalten, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtungen) 110B zu ermöglichen.
  • Innerhalb des E/A-Subsystems 111 kann eine Systemspeicherungseinheit 114 eine Verbindung mit dem E/A-Hub 107 herstellen, um einen Speicherungsmechanismus für das Rechensystem 100 bereitzustellen. Ein E/A-Switch 116 kann dafür verwendet werden, einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem E/A-Hub 107 und anderen Komponenten zu ermöglichen, wie etwa einem Netzwerkadapter 118 und/oder einem Drahtlosnetzwerkadapter 119, der bzw. die in die Plattform integriert sein kann bzw. können, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Add-In-Vorrichtungen 120 hinzugefügt werden können. Die Add-In-Vorrichtung(en) 120 kann bzw. können beispielsweise auch eine oder mehrere externe Grafikprozessorvorrichtungen und/oder Rechenbeschleuniger beinhalten. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer drahtgebundener Netzwerkadapter sein. Der Drahtlosnetzwerkadapter 119 kann eine oder mehrere einer Wi-Fi-, Bluetooth-, Nahfeldkommunikations(NFC)- oder einer anderen Netzwerkvorrichtung beinhalten, die eine oder mehrere drahtlose Funkvorrichtungen aufweist.
  • Das Rechensystem 100 kann andere Komponenten beinhalten, die nicht explizit gezeigt sind, darunter USB- oder andere Port-Verbindungen, optische Speicherungslaufwerke, Videoaufnahmevorrichtungen und dergleichen, die auch mit dem E/A-Hub 107 verbunden sein können. Kommunikationswege, die die verschiedenen Komponenten in 1 miteinander verschalten, können unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie etwa PCI(Peripheral-Component-Interconnect)-basierte Protokolle (z. B. PCI-Express) oder beliebige andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder - Protokoll(e), wie etwa das NV-Link-Hochgeschwindigkeits-Interconnect oder im Stand der Technik bekannte Interconnect-Protokolle.
  • Der eine oder die mehreren Parallelprozessoren 112 können eine Schaltungsanordnung einschließen, die für Grafik- und Videoverarbeitung optimiert ist, darunter beispielsweise eine Videoausgabeschaltungsanordnung, und eine Grafikverarbeitungseinheit (GPU) begründen. Alternativ oder zusätzlich können der eine oder die mehreren Parallelprozessoren 112 eine Schaltungsanordnung einschließen, die für Allzweckverarbeitung optimiert ist, während die zugrundeliegende Rechenarchitektur erhalten bleibt, die hier ausführlicher beschrieben wird. Komponenten des Rechensystems 100 können mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren Parallelprozessoren 112, der Speicher-Hub 105, der/die Prozessor(en) 102 und der E/A-Hub 107 in einer integrierten Schaltung eines System-on-Chip (SoC) integriert sein. Alternativ können die Komponenten des Rechensystems 100 in einem einzigen Package integriert sein, um eine System-in-Package(SIP)-Ausgestaltung zu bilden. Bei einer Ausführungsform kann mindestens ein Teil der Komponenten des Rechensystems 100 in einem Multi-Chip-Modul (MCM) integriert sein, das mit anderen Multi-Chip-Modulen zu einem modularen Rechensystem verschaltet sein kann.
  • Es versteht sich, dass das hier gezeigte Rechensystem 100 veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von Prozessor(en) 102 und der Anzahl von Parallelprozessor(en) 112, kann wie gewünscht modifiziert sein. Beispielsweise kann der Systemspeicher 104 direkt mit dem bzw. den Prozessor(en) 102 statt über eine Brücke verbunden sein, wohingegen andere Vorrichtungen über den Speicher-Hub 105 und den bzw. die Prozessor(en) 102 mit dem Systemspeicher 104 kommunizieren. In anderen alternativen Topologien ist bzw. sind der bzw. die Parallelprozessor(en) 112 mit dem E/A-Hub 107 oder direkt mit einem des einen bzw. der mehreren Prozessoren 102 verbunden, statt mit dem Speicher-Hub 105. In anderen Ausführungsformen können der E/A-Hub 107 und der Speicher-Hub 105 in einem einzigen Chip integriert sein. Es ist auch möglich, dass zwei oder mehr Sätze von Prozessor(en) 102 über mehrere Sockel angeschlossen sind, die mit zwei oder mehr Instanzen des/der Parallelprozessors(en) 112 gekoppelt sein können.
  • Manche der hierin gezeigten speziellen Komponenten sind optional und müssen nicht in allen Implementierungen des Rechensystems 100 enthalten sein. Zum Beispiel kann eine beliebige Anzahl von Add-in-Karten oder Peripheriegeräten unterstützt werden, oder einige Komponenten können entfernt sein. Darüber hinaus können einige Architekturen eine andere Terminologie für Komponenten verwenden, die denen ähnlich sind, die in 1 dargestellt sind. Zum Beispiel kann der Speicher-Hub 105 in manchen Architekturen als eine Northbridge bezeichnet werden, während der E/A-Hub 107 als eine Southbridge bezeichnet werden kann.
  • 2A veranschaulicht einen Parallelprozessor 200. Der Parallelprozessor 200 kann eine GPU, GPGPU oder dergleichen sein, wie hierin beschrieben. Die verschiedenen Komponenten des Parallelprozessors 200 können unter Verwendung einer oder mehrerer Integrierter-Schaltung-Vorrichtungen implementiert sein, wie etwa programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGA). Der veranschaulichte Parallelprozessor 200 kann der oder einer der in 1 gezeigten Parallelprozessor(en) 112 sein.
  • Der Parallelprozessor 200 beinhaltet eine Parallelverarbeitungseinheit 202. Die Parallelverarbeitungseinheit beinhaltet eine E/A-Einheit 204, die eine Kommunikation mit anderen Vorrichtungen, darunter andere Instanzen der Parallelverarbeitungseinheit 202, ermöglicht. Die E/A-Einheit 204 kann direkt mit anderen Vorrichtungen verbunden sein. Zum Beispiel stellt die E/A-Einheit 204 unter Verwendung einer Hub- oder Switch-Schnittstelle, wie etwa des Speicher-Hubs 105, eine Verbindung mit anderen Vorrichtungen her. Die Verbindungen zwischen dem Speicher-Hub 105 und der E/A-Einheit 204 bilden einen Kommunikations-Link 113. Innerhalb der Parallelverarbeitungseinheit 202 ist die E/A-Einheit 204 mit einer Hostschnittstelle 206 und einer Speicher-Crossbar 216 verbunden, wobei die Hostschnittstelle 206 Befehle empfängt, die auf das Durchführen von Verarbeitungsoperationen ausgerichtet sind, und die Speicher-Crossbar 216 Befehle empfängt, die auf das Durchführen von Speicheroperationen ausgerichtet sind.
  • Wenn die Hostschnittstelle 206 einen Befehlspuffer über die E/A-Einheit 204 empfängt, kann die Hostschnittstelle 206 Arbeitsoperationen zum Durchführen dieser Befehle an ein Frontend 208 leiten. Bei einer Ausführungsform ist das Frontend 208 mit einem Scheduler 210 gekoppelt, der dazu konfigurierbar ist, Befehle oder andere Arbeitselemente an ein Verarbeitungscluster-Array 212 zu verteilen. Der Scheduler 210 stellt sicher, dass das Verarbeitungscluster-Array 212 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungscluster des Verarbeitungscluster-Arrays 212 verteilt werden. Der Scheduler 210 kann über Firmware-Logik implementiert sein, die auf einem Mikrocontroller ausgeführt wird. Der Mikrocontroller-implementierte Scheduler 210 ist dazu konfigurierbar, komplexe Scheduling- und Arbeitsverteilungsoperationen mit Grob- und Feingranularität auszuführen, was eine schnelle Präemption und einen schnellen Kontextwechsel von Threads ermöglicht, die auf dem Verarbeitungsarray 212 ausgeführt werden. Die Hostsoftware kann Arbeitslasten zum Scheduling auf dem Verarbeitungsarray 212 über eine von mehreren Grafikverarbeitungs-Doorbells prüfen. Die Arbeitslasten können dann automatisch durch die Logik des Schedulers 210 innerhalb des Scheduler-Mikrocontrollers über das Verarbeitungsarray 212 hinweg verteilt werden.
  • Das Verarbeitungscluster-Array 212 kann bis zu „N“-Verarbeitungscluster beinhalten (z. B. den Cluster 214A, den Cluster 214B bis zum Cluster 214N). Jeder Cluster 214A-214N des Verarbeitungscluster-Arrays 212 kann eine große Anzahl gleichzeitiger Threads ausführen. Der Scheduler 210 kann den Clustern 214A-214N des Verarbeitungscluster-Arrays 212 unter Verwendung verschiedener Scheduling- und/oder Arbeitsverteilungsalgorithmen, die je nach der Arbeitslast variieren können, die für jede Art von Programm oder Berechnung auftritt, Arbeit zuweisen. Das Scheduling kann dynamisch durch den Scheduler 210 gehandhabt werden oder kann teilweise durch eine Compiler-Logik während eines Kompilierens einer Programmlogik, die zur Ausführung durch das Verarbeitungscluster-Array 212 konfiguriert ist, unterstützt werden. Optional können verschiedene Cluster 214A-214N des Verarbeitungscluster-Arrays 212 zum Verarbeiten verschiedener Arten von Programmen oder zum Durchführen verschiedener Arten von Berechnungen zugewiesen werden.
  • Das Verarbeitungscluster-Array 212 kann dazu konfiguriert sein, verschiedene Arten von parallelen Verarbeitungsoperationen durchzuführen. Beispielsweise ist das Cluster-Array 212 dazu konfiguriert, Allzweck-Parallelrechenoperationen durchzuführen. Zum Beispiel kann das Verarbeitungscluster-Array 212 Logik zum Ausführen von Verarbeitungsaufgaben, darunter Filtern von Video- und/oder Audiodaten, Durchführen von Modellierungsoperationen, einschließlich physikalischer Operationen, und Durchführen von Datentransformationen, beinhalten.
  • Das Verarbeitungscluster-Array 212 ist dazu konfiguriert, parallele Grafikverarbeitungsoperationen durchzuführen. Bei solchen Ausführungsformen, in denen der Parallelprozessor 200 zum Durchführen von Grafikverarbeitungsoperationen konfiguriert ist, kann das Verarbeitungscluster-Array 212 zusätzliche Logik aufweisen, um die Ausführung solcher Grafikverarbeitungsoperationen zu unterstützen, darunter unter anderem eine Texturabtastlogik zum Durchführen von Texturoperationen sowie eine Tessellationslogik und andere Vertex-Verarbeitungslogik. Zusätzlich kann das Verarbeitungscluster-Array 212 dazu konfiguriert sein, mit der Grafikverarbeitung in Zusammenhang stehende Shader-Programme auszuführen, wie etwa unter anderem Vertex-Shader, Tessellations-Shader, Geometrie-Shader und Pixel-Shader. Die Parallelverarbeitungseinheit 202 kann Daten zur Verarbeitung aus dem Systemspeicher über die E/A-Einheit 204 übertragen. Während der Verarbeitung können die übertragenen Daten während der Verarbeitung in einem On-Chip-Speicher (z. B. Parallelprozessorspeicher 222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • Bei Ausführungsformen, in denen die Parallelverarbeitungseinheit 202 zum Durchführen von Grafikverarbeitung verwendet wird, kann der Scheduler 210 dazu konfiguriert sein, die Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um eine Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A-214N des Verarbeitungscluster-Arrays 212 besser zu ermöglichen. Bei einigen dieser Ausführungsformen können Teile des Verarbeitungscluster-Arrays 212 dazu konfiguriert sein, unterschiedliche Arten von Verarbeitung durchzuführen. Ein erster Teil kann zum Beispiel dazu konfiguriert sein, Vertex-Shading und Topologieerzeugung durchzuführen, ein zweiter Teil kann dazu konfiguriert sein, Tessellation und Geometrie-Shading durchzuführen, und ein dritter Teil kann dazu konfiguriert sein, Pixel-Shading oder andere Screen-Space-Operationen durchzuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Zwischendaten, die durch ein oder mehrere der Cluster 214A-214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen Clustern 214A-214N zur weiteren Verarbeitung übertragen werden.
  • Während des Betriebs kann das Verarbeitungscluster-Array 212 auszuführende Verarbeitungsaufgaben über den Scheduler 210 empfangen, der Befehle, die Verarbeitungsaufgaben definieren, vom Frontend 208 empfängt. Für Grafikverarbeitungsoperationen können Verarbeitungsaufgaben Indizes zu verarbeitender Daten, z. B. Oberflächen(Patch)-Daten, Primitivdaten, Vertex-Daten und/oder Pixeldaten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (z. B. welches Programm auszuführen ist), beinhalten. Der Scheduler 210 kann dazu konfiguriert sein, die den Aufgaben entsprechenden Indizes abzurufen, oder kann die Indizes von dem Frontend 208 empfangen. Das Frontend 208 kann dazu konfiguriert sein, sicherzustellen, dass das Verarbeitungscluster-Array 212 in einen gültigen Zustand konfiguriert ist, bevor die durch Eingangsbefehlspuffer (z. B. Stapel-Puffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder der mehreren Instanzen der Parallelverarbeitungseinheit 202 kann mit dem Parallelprozessorspeicher 222 gekoppelt sein. Auf den Parallelprozessorspeicher 222 kann über die Speicher-Crossbar 216 zugegriffen werden, die Speicheranfragen von dem Verarbeitungscluster-Array 212 sowie der E/A-Einheit 204 empfangen kann. Die Speicher-Crossbar 216 kann über eine Speicherschnittstelle 218 auf den Parallelprozessorspeicher 222 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionseinheiten (z. B. Partitionseinheit 220A, Partitionseinheit 220B bis zur Partitionseinheit 220N) beinhalten, die jeweils an einen Teil (z. B. eine Speichereinheit) des Parallelprozessorspeichers 222 angekoppelt sein können. Die Anzahl von Partitionseinheiten 220A - 220N kann so konfiguriert sein, dass sie gleich der Anzahl von Speichereinheiten ist, sodass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende Speichereinheit 224B aufweist und eine N-te Partitionseinheit 220N eine entsprechende N-te Speichereinheit 224N aufweist. Bei anderen Ausführungsformen ist die Anzahl von Partitionseinheiten 220A-220N möglicherweise nicht gleich der Anzahl von Speichervorrichtungen.
  • Die Speichereinheiten 224A - 224N können verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafik-Direktzugriffspeichers, wie beispielsweise eines synchronen Grafik-Direktzugriffspeichers (SGRAM), einschließlich eines Grafikspeichers mit doppelter Datenrate (GDDR). Optional können die Speichereinheiten 224A - 224N auch 3D-Stapelspeicher beinhalten, einschließlich unter anderem Speicher mit hoher Bandbreite (High Bandwidth Memory - HBM). Fachleute verstehen, dass die spezielle Implementierung der Speichereinheiten 224A-224N variieren kann und aus einer von verschiedenen herkömmlichen Gestaltungen ausgewählt werden kann. Rendering-Ziele, wie etwa Frame-Puffer oder Texturkarten, können über die Speichereinheiten 224A-224N hinweg gespeichert werden, wodurch ermöglicht wird, dass die Partitionseinheiten 220A-220N Teile jedes Rendering-Ziels parallel schreiben, um die verfügbare Bandbreite des Parallelprozessorspeichers 222 effizient zu nutzen. Bei manchen Ausführungsformen kann eine lokale Instanz des Parallelprozessorspeichers 222 zugunsten eines vereinheitlichten Speicherdesigns, das einen Systemspeicher in Verbindung mit einem lokalen Cachespeicher nutzt, ausgeschlossen werden.
  • Optional weist jeder beliebige der Cluster 214A - 214N des Verarbeitungscluster-Arrays 212 die Fähigkeit auf, Daten zu verarbeiten, die in irgendeine der Speichereinheiten 224A - 224N innerhalb des Parallelprozessorspeichers 222 geschrieben werden. Die Speicher-Crossbar 216 kann dazu ausgelegt sein, die Ausgabe jedes Clusters 214A-214N an eine beliebige Partitionseinheit 220A-220N oder an einen weiteren Cluster 214A-214N zu übertragen, der zusätzliche Verarbeitungsoperationen an der Ausgabe ausführen kann. Jeder Cluster 214A-214N kann mit der Speicherschnittstelle 218 über die Speicher-Crossbar 216 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. Bei einer der Ausführungsformen mit der Speicher-Crossbar 216 weist die Speicher-Crossbar 216 eine Verbindung mit der Speicherschnittstelle 218 zum Kommunizieren mit der E/A-Einheit 204 sowie eine Verbindung mit einer lokalen Instanz des Parallelprozessorspeichers 222 auf, was es den Verarbeitungseinheiten in den verschiedenen Verarbeitungsclustern 214A-214N ermöglicht, mit einem Systemspeicher oder einem anderen Speicher, der für die Parallelverarbeitungseinheit 202 nicht lokal ist, zu kommunizieren. Im Allgemeinen kann die Speicher-Crossbar 216 beispielsweise dazu in der Lage sein, virtuelle Kanäle zu verwenden, um Verkehrsströme zwischen den Clustern 214A-214N und den Partitionseinheiten 220A-220N zu trennen.
  • Obgleich eine einzige Instanz der Parallelverarbeitungseinheit 202 innerhalb des Parallelprozessors 200 veranschaulicht ist, kann eine beliebige Anzahl von Instanzen der Parallelverarbeitungseinheit 202 enthalten sein. Zum Beispiel können mehrere Instanzen der Parallelverarbeitungseinheit 202 auf einer einzigen Add-In-Karte vorgesehen sein, oder mehrere Add-In-Karten können miteinander verschaltet sein. Die verschiedenen Instanzen der Parallelverarbeitungseinheit 202 können dazu ausgelegt sein, miteinander zu arbeiten, selbst wenn die verschiedenen Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen von lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Optional können einige Instanzen der Parallelverarbeitungseinheit 202 Gleitkommaeinheiten mit höherer Genauigkeit 264 relativ zu anderen Instanzen beinhalten. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des Parallelprozessors 200 einschließen, können in einer Vielzahl von Ausgestaltungen und Formfaktoren implementiert sein, darunter unter anderem Desktop-, Laptop- oder Handheld-Personal-Computer, Server, Workstations, Spielkonsolen und/oder eingebettete Systeme.
  • 2B ist ein Blockdiagramm einer Partitionseinheit 220. Die Partitionseinheit 220 kann eine Instanz von einer der Partitionseinheiten 220A - 220N von 2A sein. Wie veranschaulicht beinhaltet die Partitionseinheit 220 ein L2-Cache 221, ein Metadaten-Cache 224 zum Speichern von Metadaten (z. B. Steueroberflächenaktualisierungen, Kompressionswerte), eine Framepufferschnittstelle 225 und eine ROP 226 (ROP - Raster Operations Unit). Der L2-Cachespeicher 221 ist ein Lese/Schreib-Cache, der zum Durchführen von Lade- und Speicheroperationen, die von der Speicher-Crossbar 216 und der ROP 226 empfangen werden, ausgelegt ist. Lesefehltreffer und dringende Rückschreibanforderungen werden durch den L2-Cache 221 an die Framepufferschnittstelle 225 zur Verarbeitung ausgegeben. Aktualisierungen können auch über die Framepufferschnittstelle 225 zur Verarbeitung an den Framepuffer gesendet werden. Bei einer Ausführungsform ist die Framepufferschnittstelle 225 an eine der Speichereinheiten im Parallelprozessorspeicher, wie etwa den Speichereinheiten 224A-224N von 2A (z. B. innerhalb des Parallelprozessorspeichers 222), angeschaltet. Die Partitionseinheit 220 kann zusätzlich oder alternativ auch über eine Speichersteuerung (nicht gezeigt) an eine der Speichereinheiten im Parallelprozessorspeicher angeschaltet sein.
  • In Grafikanwendungen ist die ROP 226 eine Verarbeitungseinheit, die Rasteroperationen wie Schablonen-, z-Test-, Mischoperationen und dergleichen ausführt. Die ROP 226 gibt dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert werden. Bei manchen Ausführungsformen beinhaltet die ROP 226 eine Kompressionslogik zum Komprimieren von Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, und zum Dekomprimieren von Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden. Die Kompressionslogik kann eine verlustfreie Kompressionslogik sein, bei der ein oder mehrere Kompressionsalgorithmen verwendet werden. Die Art der Komprimierung, die von der ROP 226 ausgeführt wird, kann basierend auf den statistischen Eigenschaften der zu komprimierenden Daten variieren. Zum Beispiel wird in einer Ausführungsform eine Delta-Farbkompression an Tiefen- und Farbdaten auf einer Pro-Kachel-Basis durchgeführt.
  • Die ROP 226 kann in jedem Verarbeitungscluster (z. B. Cluster 214A-214N von 2A) anstatt in der Partitionseinheit 220 enthalten sein. Bei einer solchen Ausführungsform werden Lese- und Schreibanfragen für Pixeldaten über die Speicher-Crossbar 216 anstelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung, wie etwa einer der einen oder der mehreren Anzeigevorrichtungen 110 aus 1, angezeigt werden, zur weiteren Verarbeitung durch den bzw. die Prozessor(en) 102 geroutet werden oder für weitere Verarbeitung durch eine der Verarbeitungsentitäten innerhalb des Parallelprozessors 200 aus 2A geroutet werden.
  • 2C ist ein Blockdiagramm eines Verarbeitungsclusters 214 innerhalb einer Parallelverarbeitungseinheit. Der Verarbeitungscluster ist zum Beispiel eine Instanz eines der Verarbeitungscluster 214A-214N von 2A. Der Verarbeitungscluster 214 kann dazu ausgelegt sein, viele Threads parallel auszuführen, wobei sich der Begriff „Thread“ auf eine Instanz eines speziellen Programms bezieht, das auf einem speziellen Satz von Eingangsdaten ausgeführt wird. Optional können SIMD-Anweisungsausgabetechniken (SIMD: Single Instruction, Multiple Data) angewendet werden, um eine parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. Alternativ werden SIMT-Techniken (SIMT: Single Instruction, Multiple Thread) angewendet, um eine parallele Ausführung einer großen Anzahl von allgemein synchronisierten Threads zu unterstützen, wobei eine gemeinsame Anweisungseinheit verwendet wird, die dazu konfiguriert ist, Anweisungen an einen Satz von Verarbeitungs-Engines innerhalb jedes der Verarbeitungscluster auszugeben. Im Gegensatz zu einem SIMD-Ausführungsregime, bei dem alle Verarbeitungs-Engines typischerweise identische Anweisungen ausführen, erlaubt SIMT-Ausführung, dass verschiedene Threads divergenten Ausführungspfaden durch ein gegebenes Thread-Programm leichter folgen. Fachleute werden verstehen, dass ein SIMD-Verarbeitungsregime eine funktionelle Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des Verarbeitungsclusters 214 kann über einen Pipeline-Manager 232 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. Der Pipeline-Manager 232 empfängt Anweisungen vom Scheduler 210 von 2A und verwaltet die Ausführung dieser Anweisungen über einen Grafikmultiprozessor 234 und/oder eine Textureinheit 236. Der veranschaulichte Grafikmultiprozessor 234 ist eine beispielhafte Instanz eines SIMT-Parallelprozessors. Es können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen in dem Verarbeitungscluster 214 enthalten sein. Eine oder mehrere Instanzen des Grafikmultiprozessors 234 können in einem Verarbeitungscluster 214 enthalten sein. Der Grafikmultiprozessor 234 kann Daten verarbeiten und eine Daten-Crossbar 240 kann dazu verwendet werden, die verarbeiteten Daten an einen von mehreren möglichen Bestimmungsorten, darunter andere Shader-Einheiten, zu verteilen. Der Pipeline-Manager 232 kann die Verteilung verarbeiteter Daten erleichtern, indem er Bestimmungsorte für verarbeitete Daten spezifiziert, die über die Daten-Crossbar 240 verteilt werden sollen.
  • Jeder Grafikmultiprozessor 234 innerhalb des Verarbeitungsclusters 214 kann einen identischen Satz von Funktionalausführungslogik (z. B. arithmetische Logikeinheiten, Lade-Speicher-Einheiten usw.) aufweisen. Die Funktionalausführungslogik kann in einer Pipeline-Weise ausgestaltet sein, in der neue Befehle ausgegeben werden können, bevor vorherige Befehle abgeschlossen sind. Die Funktionalausführungslogik unterstützt eine Vielfalt an Operationen, einschließlich Ganzzahl- und Gleitkomma-Arithmetik, Vergleichsoperationen, Boolescher Operationen, Bitverschiebung und Berechnung verschiedenster algebraischer Funktionen. Dieselbe Funktionseinheit-Hardware könnte dafür ausgenutzt werden, unterschiedliche Operationen durchzuführen, und es kann eine beliebige Kombination von Funktionseinheiten vorhanden sein.
  • Die an den Verarbeitungscluster 214 übertragenen Anweisungen begründen einen Thread. Ein Satz von Threads, der über den Satz Parallelverarbeitungs-Engines ausgeführt wird, ist eine Thread-Gruppe. Eine Thread-Gruppe führt dasselbe Programm mit unterschiedlichen Eingabedaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungs-Engine innerhalb eines Grafikmultiprozessors 234 zugewiesen sein. Eine Thread-Gruppe kann weniger Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 aufweisen. Wenn eine Thread-Gruppe weniger Threads als die Anzahl der Verarbeitungs-Engines aufweist, können eine oder mehrere der Verarbeitungs-Engines während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Ruhezustand sein. Eine Thread-Gruppe kann auch mehr Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 beinhalten. Wenn die Thread-Gruppe mehr Threads beinhaltet als die Anzahl der Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234, kann die Verarbeitung über aufeinanderfolgende Taktzyklen durchgeführt werden. Optional können mehrere Thread-Gruppen gleichzeitig auf dem Grafikmultiprozessor 234 ausgeführt werden.
  • Der Grafikmultiprozessor 234 kann einen internen Cachespeicher beinhalten, um Lade- und Speicheroperationen durchzuführen. Optional kann der Grafikmultiprozessor 234 auf einen internen Cache verzichten und einen Cachespeicher (z. B. L1-Cache 248) innerhalb des Verarbeitungsclusters 214 verwenden. Jeder Grafikmultiprozessor 234 hat auch Zugriff auf L2-Caches innerhalb der Partitionseinheiten (z. B. Partitionseinheiten 220A-220N von 2A), die durch alle Verarbeitungscluster 214 gemeinsam genutzt werden und zum Übertragen von Daten zwischen Threads verwendet werden können. Der Grafikmultiprozessor 234 kann auch auf einen chip externen globalen Speicher zugreifen, der einen oder mehrere eines lokalen Parallelprozessorspeichers und/oder eines Systemspeichers beinhalten kann. Ein beliebiger Speicher außerhalb der Parallelverarbeitungseinheit 202 kann als globaler Speicher verwendet werden. Ausführungsformen, in denen der Verarbeitungscluster 214 mehrere Instanzen des Grafikmultiprozessors 234 aufweist, können gemeinsame Anweisungen und Daten, die in dem L1-Cache 248 gespeichert sein können, gemeinsam nutzen.
  • Jeder Verarbeitungscluster 214 kann eine MMU 245 (Memory Management Unit - Speicherverwaltungseinheit) aufweisen, die dafür ausgelegt ist, virtuelle Adressen in physische Adressen abzubilden. Bei anderen Ausführungsformen können eine oder mehrere Instanzen der MMU 245 in der Speicherschnittstelle 218 von 2A residieren. Die MMU 245 beinhaltet einen Satz von Seitentabelleneinträgen (PTEs), die zum Abbilden einer virtuellen Adresse auf eine physische Adresse einer Kachel verwendet werden, und optional einen Cachezeilenindex. Die MMU 245 kann Adressenübersetzungspuffer (Adressen-TLB: Adressen-Translation-Lookaside-Buffer) oder Caches aufweisen, die innerhalb des Grafikmultiprozessors 234 oder des L1-Caches oder Verarbeitungsclusters 214 residieren können. Die physische Adresse wird verarbeitet, um die Oberflächendatenzugriffslokalität zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten zu ermöglichen. Der Cachezeilenindex kann verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cachezeile ein Treffer oder ein Fehltreffer ist.
  • In Grafik- und Rechenanwendungen kann ein Verarbeitungscluster 214 derart ausgestaltet sein, dass jeder Grafikmultiprozessor 234 mit einer Textureinheit 236 zur Durchführung von Texturabbildungsoperationen, z. B. Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern der Texturdaten, gekoppelt ist. Texturdaten werden aus einem internen Textur-L1-Cache (nicht gezeigt) oder bei manchen Ausführungsformen aus dem L1-Cache innerhalb des Grafikmultiprozessors 234 gelesen und werden je nach Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher abgerufen. Jeder Grafikmultiprozessor 234 gibt verarbeitete Aufgaben an die Daten-Crossbar 240 aus, um die verarbeitete Aufgabe einem weiteren Verarbeitungscluster 214 zur weiteren Verarbeitung zuzuführen oder die verarbeitete Aufgabe über die Speicher-Crossbar 216 in einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher zu speichern. Eine preROP 242 (Vor-Rasteroperationseinheit) ist dazu ausgelegt, Daten von dem Grafikmultiprozessor 234 zu empfangen, Daten zu ROP-Einheiten zu leiten, die sich bei Partitionseinheiten befinden können, wie hier beschrieben (z. B. Partitionseinheiten 220A-220N von 2A). Die preROP-Einheit 242 kann Optimierungen für die Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
  • Es versteht sich, dass die hier beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Jegliche Anzahl von Verarbeitungseinheiten, z. B. der Grafikmultiprozessor 234, Textureinheiten 236, preROPs 242 usw. können innerhalb eines Verarbeitungsclusters 214 enthalten sein. Wenngleich nur ein Verarbeitungscluster 214 gezeigt ist, kann ferner eine Parallelverarbeitungseinheit, wie sie hier beschrieben ist, eine beliebige Anzahl von Instanzen des Verarbeitungsclusters 214 aufweisen. Optional kann jeder Verarbeitungscluster 214 dazu ausgelegt sein, unabhängig von anderen Verarbeitungsclustern 214 unter Verwendung separater und unterschiedlicher Verarbeitungseinheiten, L1-Caches usw. zu arbeiten.
  • 2D zeigt ein Beispiel für den Grafikmultiprozessor 234, in dem der Grafikmultiprozessor 234 an den Pipeline-Manager 232 des Verarbeitungsclusters 214 gekoppelt ist. Der Grafikmultiprozessor 234 weist eine Ausführungspipeline auf, die unter anderem ein Anweisungscache 252, eine Anweisungseinheit 254, eine Adressenabbildungseinheit 256, eine Registerbank 258, einen oder mehrere Allzweck-Grafikverarbeitungseinheit-Kerne bzw. GPGPU-Kerne 262 und eine oder mehrere Lade/Speicher-Einheiten 266 beinhaltet. Die GPGPU-Kerne 262 und die Lade/Speicher-Einheiten 266 sind mit dem Cachespeicher 272 und dem gemeinsam genutzten Speicher 270 über ein Speicher- und Cache-Interconnect 268 gekoppelt. Der Grafikmultiprozessor 234 kann zusätzlich Tensor- und/oder Strahlverfolgungskerne 263 beinhalten, die Hardwarelogik zum Beschleunigen von Matrix- und/oder Strahlverfolgungsoperationen beinhalten.
  • Der Anweisungscache 252 kann einen Strom von Anweisungen zur Ausführung von dem Pipeline-Manager 232 empfangen. Die Anweisungen werden in dem Anweisungscache 252 gecacht und zur Ausführung durch die Anweisungseinheit 254 versendet. Die Anweisungseinheit 254 kann Anweisungen als Thread-Gruppen (z. B. Warps) versenden, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 262 zugewiesen ist. Eine Anweisung kann auf einen beliebigen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem sie eine Adresse in einem vereinheitlichten Adressraum spezifiziert. Die Adressenabbildungseinheit 256 kann dazu verwendet werden, Adressen in dem vereinheitlichten Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die von den Lade/Speicher-Einheiten 266 zugegriffen werden kann.
  • Die Registerbank 258 liefert einen Satz von Registern für die Funktionseinheiten des Grafikmultiprozessors 234. Die Registerbank 258 stellt temporäre Ablage für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (z. B. GPGPU-Kerne 262, Lade/SpeicherEinheiten 266) des Grafikmultiprozessors 234 verbunden sind. Die Registerbank 258 kann derart zwischen jeder der Funktionseinheiten aufgeteilt werden, dass jeder Funktionseinheit ein dedizierter Teil der Registerbank 258 zugeteilt wird. Beispielsweise kann die Registerbank 258 zwischen den verschiedenen Warps aufgeteilt werden, die durch den Grafikmultiprozessor 234 ausgeführt werden.
  • Die GPGPU-Kerne 262 können jeweils Funktionseinheiten (z. B. Gleitkommaeinheiten 264 (FPUs) und/oder Ganzzahl-Arithmetik-Logikeinheiten (ALUs)) aufweisen, die zum Ausführen von Anweisungen des Grafikmultiprozessors 234 verwendet werden. In manchen Implementierungen können die GPGPU-Kerne 262 Hardwarelogik beinhalten, die ansonsten in den Tensor- und/oder Strahlverfolgungskernen 263 residieren kann. Die GPGPU-Kerne 262 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. Zum Beispiel und bei einer Ausführungsform beinhaltet ein erster Teil der GPGPU-Kerne 262 eine FPU mit einfacher Genauigkeit und eine Ganzzahl-ALU, wohingegen ein zweiter Teil der GPGPU-Kerne eine FPU mit doppelter Genauigkeit beinhaltet. Optional können die FPUs den IEEE 754-2008-Standard für Gleitkomma-Arithmetik implementieren oder Gleitkomma-Arithmetik mit variabler Genauigkeit ermöglichen. Der Grafikmultiprozessor 234 kann außerdem eine oder mehrere Festfunktions- oder Spezialfunktionseinheiten beinhalten, um spezielle Funktionen wie Rechteckkopier- oder Pixelmischoperationen durchzuführen. Einer oder mehrere der GPGPU-Kerne können auch Logik mit Fest- oder Spezialfunktion enthalten.
  • Die GPGPU-Kerne 262 können eine SIMD-Logik beinhalten, die in der Lage ist, eine einzelne Anweisung an mehreren Datensätzen durchzuführen. Optional können die GPGPU-Kerne 262 SIMD4-, SIMD8- und SIMD16-Anweisungen physisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. Die SIMD-Anweisungen für die GPGPU-Kerne können zur Kompilierungszeit von einem Shader-Compiler erzeugt oder automatisch erzeugt werden, wenn Programme ausgeführt werden, die für Single-Program-Multiple-Data(SPMD-) oder SIMT-Architekturen geschrieben und kompiliert werden. Mehrere Threads eines für das SIMT-Ausführungsmodell konfigurierten Programms können über eine einzige SIMD-Anweisung ausgeführt werden. Zum Beispiel können bei einer Ausführungsform acht SIMT-Threads, die die gleichen oder ähnliche Operationen durchführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.
  • Das Speicher- und Cache-Interconnect 268 ist ein Interconnect-Netzwerk, das jede der Funktionseinheiten des Grafikmultiprozessors 234 mit der Registerbank 258 und mit dem gemeinsam genutzten Speicher 270 verbindet. Zum Beispiel ist das Speicher- und Cache-Interconnect 268 ein Crossbar-Interconnect, das es der Lade/Speicher-Einheit 266 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 270 und der Registerbank 258 zu implementieren. Die Registerbank 258 kann mit der gleichen Frequenz wie die GPGPU-Kerne 262 arbeiten, sodass die Datenübertragung zwischen den GPGPU-Kernen 262 und der Registerbank 258 eine sehr niedrige Latenz hat. Der gemeinsam genutzte Speicher 270 kann verwendet werden, um eine Kommunikation zwischen Threads zu ermöglichen, die auf den Funktionseinheiten innerhalb des Grafikmultiprozessors 234 ausgeführt werden. Der Cachespeicher 272 kann beispielsweise als ein Datencache verwendet werden, um Texturdaten, die zwischen den Funktionseinheiten und der Textureinheit 236 kommuniziert werden, zwischenzuspeichern. Der gemeinsam genutzte Speicher 270 kann auch als ein Programm mit Cacheverwaltung verwendet werden. Threads, die auf den GPG-Kernen 262 ausgeführt werden, können programmgesteuert Daten im gemeinsam genutzten Speicher speichern, zusätzlich zu den automatisch zwischengespeicherten Daten, die in dem Cache-Speicher 272 gespeichert sind.
  • 3A-3C veranschaulichen zusätzliche Grafikmultiprozessoren gemäß Ausführungsformen. 3A - 3B veranschaulichen Grafikmultiprozessoren 325, 350, die mit den Grafikmultiprozessor 234 von 2C in Zusammenhang stehen und anstelle von einem von diesen verwendet werden können. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikmultiprozesssor 234 hierin auch eine entsprechende Kombination mit dem (den) Grafikmultiprozessor(en) 325, 350, ist aber nicht darauf beschränkt. 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, die in Mehrkerngruppen 365A-365N angeordnet sind, die den Grafikmultiprozessoren 325, 350 entsprechen. Die veranschaulichten Grafikmultiprozessoren 325, 350 und die Mehrkerngruppen 365A-365N können Streaming-Multiprozessoren (SM) sein, die in der Lage sind, gleichzeitig eine große Anzahl von Ausführungs-Threads auszuführen.
  • Der Grafikmultiprozessor 325 von 3A beinhaltet mehrere zusätzliche Instanzen von Ausführungsressourceneinheiten relativ zu dem Grafikmultiprozessor 234 von 2D. Zum Beispiel kann der Grafikmultiprozessor 325 mehrere Instanzen der Anweisungseinheit 332A-332B, Registerbank 334A-334B und Textureinheit(en) 344A-344B beinhalten. Der Grafikmultiprozessor 325 beinhaltet auch mehrere Sätze von Grafik- oder Rechenausführungseinheiten (z. B. GPGPU-Kerne 336A-336B, Tensorkern 337A-337B, Strahlverfolgungskern 338A-338B) und mehrere Sätze von Lade/Speicher-Einheiten 340A-340B. Die Ausführungsressourceneinheiten weisen einen gemeinsamen Anweisungscache 330, einen Textur- und/oder Datencachespeicher 342 und einen gemeinsam genutzten Speicher 346 auf.
  • Die verschiedenen Komponenten können über ein Interconnect-Fabric 327 kommunizieren. Das Interconnect-Fabric 327 kann einen oder mehrere Crossbar-Schalter beinhalten, um eine Kommunikation zwischen den verschiedenen Komponenten des Grafikmultiprozessors 325 zu ermöglichen. Das Interconnect-Fabric 327 kann eine separate Hochgeschwindigkeits-Netzwerk-Fabric-Schicht sein, auf der jede Komponente des Grafikmultiprozessors 325 gestapelt ist. Die Komponenten des Grafikmultiprozessors 325 kommunizieren mit fernen Komponenten über das Interconnect-Fabric 327. Zum Beispiel können die GPGPU-Kerne 336A-336B, 337A-337B, und 3378A-338B jeweils mit einem gemeinsam genutzten Speicher 346 über das Interconnect-Fabric 327 kommunizieren. Das Interconnect-Fabric 327 kann die Kommunikation innerhalb des Grafikmultiprozessors 325 vermitteln, um eine faire Bandbreitenzuordnung zwischen den Komponenten sicherzustellen.
  • Der Grafikmultiprozessor 350 von 3B beinhaltet mehrere Sätze von Ausführungsressourcen 356A-356D, wobei jeder Satz von Ausführungsressourcen mehrere Anweisungseinheiten, Registerbänke, GPGPU-Kerne und Lade/Speicher-Einheiten beinhaltet, wie in 2D und 3A veranschaulicht ist. Die Ausführungsressourcen 356A-356D können in Abstimmung mit (einer) Textureinheit(en) 360A-360D für Texturoperationen arbeiten, während ein Anweisungscache 354 und ein gemeinsam genutzter Speicher 353 gemeinsam genutzt werden. Zum Beispiel können die Ausführungsressourcen 356A-356D einen Anweisungscache 354 und einen gemeinsam genutzten Speicher 353 sowie mehrere Instanzen eines Textur- und/oder Datencachespeichers 358A-358B gemeinsam nutzen. Die verschiedenen Komponenten können über ein Interconnect-Fabric 352 ähnlich dem Interconnect-Fabric 327 von 3A kommunizieren.
  • Fachleute werden verstehen, dass die in 1, 2A-2D und 3A-3B beschriebenen Architekturen beschreibend sind und den Schutzumfang der vorliegenden Ausführungsformen nicht einschränken. Somit können die hierin beschriebenen Techniken auf jeder fachgerecht ausgestalteten Verarbeitungseinheit implementiert werden, darunter, ohne Einschränkung, ein oder mehrere Mobilanwendungsprozessoren, eine oder mehrere Desktop- oder Server-Zentralverarbeitungseinheiten (CPUs), einschließlich Mehrkern-CPUs, eine oder mehrere Parallelverarbeitungseinheiten, wie etwa die Parallelverarbeitungseinheit 202 von 2A, sowie ein oder mehrere Grafikprozessoren oder Sonderzweck-Verarbeitungseinheiten, ohne vom Schutzumfang der hierin beschriebenen Ausführungsformen abzuweichen.
  • Der Parallelprozessor oder die GPGPU, wie hierin beschrieben, können kommunikativ mit Host-/Prozessorkernen gekoppelt sein, um Grafikoperationen, Maschinenlemoperationen, Musteranalyseoperationen und verschiedene Allzweck-GPU(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder ein anderes Interconnect (z. B. ein Hochgeschwindigkeits-Interconnect wie etwa PCIe oder NVLink) kommunikativ mit dem Hostprozessor/den Kernen verbunden sein. In anderen Ausführungsformen kann die GPU auf demselben Package oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus bzw. ein internes Interconnect (d. h. innerhalb des Package oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, auf welche die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, die in Mehrkerngruppen 365A-365N angeordnet sind. Während die Einzelheiten lediglich einer einzigen Mehrkerngruppe 365A bereitgestellt sind, versteht es sich, dass die anderen Mehrkerngruppen 365B-365N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können. Einzelheiten, die in Bezug auf die Mehrkerngruppen 365A - 365N beschrieben sind, können auch für jeden beliebigen hierin beschriebenen Grafikmultiprozessor 234, 325, 350 gelten.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 365A einen Satz von Grafikkernen 370, einen Satz von Tensorkernen 371 und einen Satz von Strahlverfolgungskernen 372 beinhalten. Ein Scheduler/Dispatcher 368 plant und versendet die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 370, 371, 372. Ein Satz von Registerbanken 369 speichert Operandenwerte, die durch die Kerne 370, 371, 372 verwendet werden, wenn die Grafik-Threads ausgeführt werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl-und/oder Gleitkommadatenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten beinhalten. Die Kachelregister können als kombinierte Sätze von Vektorregistern implementiert werden.
  • Ein oder mehrere kombinierte Level-1(L1)-Caches und gemeinsam genutzte Speichereinheiten 373 speichern Grafikdatenstrukturen, wie etwa Texturdaten, Vertex-Daten, Pixeldaten, Strahldaten, Grenzvolumendaten usw., lokal innerhalb jeder Mehrkerngruppe 365A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturierungsoperationen, wie etwa Texturabbildung und Sampling, durchzuführen. Ein Level-2(L2)-Cache 375, der durch alle oder eine Teilmenge der Mehrkerngruppen 365A-365N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 375 über mehrere Mehrkerngruppen 365A-365N gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 367 koppeln die GPU 380 mit einem Speicher 366, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe/Ausgabe(E/A)-Schaltungsanordnung 363 koppelt die GPU 380 mit einer oder mehreren E/A-Vorrichtungen 362, wie etwa Digitalsignalprozessoren (DSPs), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Ein On-Chip-Interconnect kann dazu verwendet werden, die E/A-Vorrichtungen 362 mit der GPU 380 und dem Speicher 366 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 364 der E/A-Schaltungsanordnung 363 koppeln die E/A-Vorrichtungen 362 direkt mit dem Systemspeicher 366. Optional verwaltet die IOMMU 364 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen im Systemspeicher 366 abzubilden. Die E/A-Vorrichtungen 362, die CPU(s) 361 und die GPU(s) 380 können sich dann denselben virtuellen Adressraum teilen.
  • In einer Implementierung der IOMMU 364 unterstützt die IOMMU 364 die Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen dahingehend verwalten, virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen dahingehend verwalten, die physischen Gast-/Grafikadressen auf physische System-/Hostadressen (z. B. innerhalb des Systemspeichers 366) abzubilden. Die Basisadressen sowohl des ersten als auch des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert werden und bei einem Kontextwechsel ausgelagert werden (z. B. sodass der neue Kontext Zugriff auf den relevanten Satz von Seitentabellen erhält). Obwohl dies in 3C nicht veranschaulicht ist, kann jeder der Kerne 370, 371, 372 und/oder die Mehrkerngruppen 365A-365N Übersetzungspuffer (TLBs: Translation Lookaside Buffer) beinhalten, um Gast-virtuell-zu-Gast-physisch-Übersetzungen, Gast-physisch-zu-Host-physisch-Übersetzungen und Gast-virtuell-zu-Host-physisch-Übersetzungen zu cachen.
  • Die CPUs 361, die GPUs 380 und die E/A-Vorrichtungen 362 können auf einem einzelnen Halbleiterchip und/oder Chip-Package integriert sein. Der veranschaulichte Speicher 366 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichersteuerungen 367 gekoppelt sein. In einer Implementierung umfasst der Speicher 366 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physische Speicher auf Systemebene teilt, obwohl die hierin beschriebenen zugrundeliegenden Prinzipien nicht auf diese spezielle Implementierung beschränkt sind.
  • Die Tensorkerne 371 können eine Vielzahl von Ausführungseinheiten beinhalten, die speziell dafür ausgelegt sind, Matrixoperationen durchzuführen, die die grundlegende Rechenoperation sind, die verwendet wird, um Deep-Learning-Operationen durchzuführen. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Neuronales-Netz-Training und Inferenz verwendet werden. Die Tensorkerne 371 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandenpräzisionen durchführen, darunter Gleitkomma mit einfacher Präzision (z. B. 32 Bit), Gleitkomma mit halber Präzision (z. B. 16 Bit), Ganzzahlwörter (16 Bit), Bytes (8 Bit) und Halbbytes (4 Bits). Beispielsweise extrahiert eine Neuronalnetzimplementierung Merkmale jeder gerenderten Szene, wobei möglicherweise Details aus mehreren Frames kombiniert werden, um ein hochwertiges Endbild zu konstruieren.
  • Bei Implementierungen mit tiefem Lernen kann eine Parallelmatrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 371 geplant werden. Insbesondere erfordert das Training neuronaler Netze eine signifikante Anzahl an Matrixskalarproduktoperationen. Um eine Innenproduktformulierung einer N x N x N Matrixmultiplikation zu verarbeiten, können die Tensorkerne 371 mindestens N Skalarproduktverarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird für jeden Zyklus von N Zyklen eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der speziellen Implementierung mit unterschiedlichen Präzisionen gespeichert werden, einschließlich 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Unterschiedliche Präzisionsmodi können für die Tensorkerne 371 spezifiziert werden, um sicherzustellen, dass die effizienteste Präzision für unterschiedliche Arbeitslasten verwendet wird (wie beispielsweise Inferenzfindungsarbeitslasten, die Quantisierung zu Bytes und Halbbytes tolerieren können).
  • Die Strahlverfolgungskerne 372 können Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch für Nicht-Echtzeit-Strahlverfolgungsimplementierungen beschleunigen. Insbesondere können die Strahlverfolgungskerne 372 eine Strahldurchquerungs-/-schnittpunktschaltungsanordnung zum Durchführen einer Strahldurchquerung unter Verwendung von Hüllkörperhierarchien (BVHs: Bounding Volume Hierarchies) und Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven, die in den BVH-Volumina enthalten sind, beinhalten. Die Strahlverfolgungskerne 372 können auch eine Schaltungsanordnung zum Durchführen von Tiefenprüfung und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. Bei einer Implementierung führen die Strahlverfolgungskerne 372 Durchquerungs- und Schnittoperationen in Übereinstimmung mit den hierin beschriebenen Bild-Rauschentfernung-Techniken durch, von denen zumindest ein Teil auf den Tensorkernen 371 ausgeführt werden kann. Zum Beispiel können die Tensorkerne 371 ein neuronales Deep-Learning-Netz implementieren, um eine Entrauschung von Frames durchzuführen, die durch die Strahlenverfolgungskerne 372 erzeugt werden. Die CPU(s) 361, Grafikkerne 370 und/oder Strahlverfolgungskerne 372 können jedoch auch alle oder einen Teil der Rauschentfernungs- und/oder Tiefes-Lernen-Algorithmen implementieren.
  • Zudem kann, wie oben beschrieben, ein verteilter Ansatz zum Entrauschen eingesetzt werden, bei dem sich die GPU 380 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder einen Hochgeschwindigkeits-Interconnect mit anderen Rechenvorrichtungen gekoppelt ist. Bei diesem verteilten Ansatz können die miteinander verbundenen Rechenvorrichtungen Neuronalnetz-Lern-/-Trainingsdaten gemeinsam nutzen, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für unterschiedliche Arten von Bild-Frames und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • Die Strahlverfolgungskerne 372 können alle BVH-Durchquerungen und/oder Strahl-Primitiv-Schnittpunkte verarbeiten, wodurch verhindert wird, dass die Grafikkerne 370 mit tausenden Anweisungen pro Strahl überlastet werden. Zum Beispiel beinhaltet jeder Strahlverfolgungskern 372 einen ersten Satz spezialisierter Schaltungsanordnungen zum Durchführen von Hüllquaderprüfungen (z. B. für Durchquerungsoperationen) und/oder einen zweiten Satz spezialisierter Schaltungsanordnungen zum Durchführen der Strahl-Dreieck-Schnittpunktprüfungen (z. B. sich schneidende Strahlen, die durchquert wurden). Somit kann zum Beispiel die Mehrkerngruppe 365A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 372 führen unabhängig Strahldurchquerung und -schneidung durch und geben Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) an den Thread-Kontext zurück. Die anderen Kerne 370, 371 werden freigegeben, um andere Grafik- oder Rechenarbeit durchzuführen, während die Strahlverfolgungskerne 372 die Durchquerungs- und Schnittoperationen durchführen.
  • Optional kann jeder Strahlverfolgungskern 372 eine Durchquerungseinheit zum Durchführen von BVH-Prüfungsoperationen und/oder eine Schnittpunkteinheit, die Strahl-Primitiv-Schnittpunktprüfungen durchführt, beinhalten. Die Schnittpunkteinheit erzeugt eine „Treffer“-, „Kein-Treffer“- oder „Mehrfachtreffer“-Antwort, die sie an den entsprechenden Thread liefert. Während der Durchquerungs- und Schnittpunktoperationen werden die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 370 und Tensorkerne 371) freigegeben, um andere Arten von Grafikarbeit durchzuführen.
  • In einer unten beschriebenen optionalen Ausführungsform wird ein hybrider Rasterung/Strahlverfolgung-Ansatz verwendet, bei dem Arbeit zwischen den Grafikkernen 370 und den Strahlverfolgungskernen 372 verteilt wird.
  • Die Strahlverfolgungskerne 372 (und/oder andere Kerne 370, 371) können Hardwareunterstützung für einen Strahlverfolgungsanweisungssatz beinhalten, wie etwa DirectX Ray Tracing (DXR) von Microsoft, der einen DispatchRays-Befehl beinhaltet, sowie Strahlerzeugung, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Shader, die die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 372, Grafikkerne 370 und Tensorkerne 371 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die hierin beschriebenen zugrundeliegenden Prinzipien nicht auf irgendeine spezielle Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 372, 371, 370 einen Strahlverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktionen für Strahlerzeugung und/oder Closest-Hit und/oder Any-Hit und/oder Strahl-Primitiv-Schnittpunkt und/oder Primitiv-weise und hierarchische Hüllquaderkonstruktion und/oder Fehltreffer und/oder Visit und/oder Ausnahmen enthält. Genauer gesagt beinhaltet eine bevorzugte Ausführungsform Strahlverfolgungsanweisungen zum Durchführen einer oder mehrerer der folgenden Funktionen:
    • Strahlenerzeugung - Strahlenerzeugungsanweisungen können für jedes Pixel, jede Abtastung oder jede andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
    • Closest-Hit - Eine Closest-Hit-Anweisung kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
    • Any-Hit - Eine Any-Hit-Anweisung identifiziert mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um potenziell einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
    • Schnittpunkt - Eine Schnittpunktanweisung führt eine Strahl-Primitiv-Schnittpunktprüfung durch und gibt ein Ergebnis aus.
    • Primitiv-weise Hüllquaderkonstruktion - Diese Anweisung erstellt einen Hüllquader um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven herum (z. B. wenn eine neue BVH- oder andere Beschleunigungsdatenstruktur erstellt wird).
    • Fehltreffer - gibt an, dass ein Strahl alle Geometrie innerhalb einer Szene oder ein spezifiziertes Gebiet einer Szene verfehlt.
    • Visit - gibt die Nachfolgevolumina an, die ein Strahl durchlaufen wird.
    • Ausnahmen - beinhalten verschiedene Typen von Ausnahme-Handler (z. B. für verschiedene Fehlerbedingungen aufgerufen).
  • Techniken zur Verbindung zwischen GPU und Hostprozessor
  • 4A veranschaulicht eine beispielhafte Architektur, in der mehrere GPUs 410-413, z. B. wie etwa die in 2A gezeigten Parallelprozessoren 200, kommunikativ mit mehreren Mehrkernprozessoren 405-406 über Hochgeschwindigkeits-Links 440A-440D (z. B. Busse, Punkt-zu-Punkt-Interconnects usw.) gekoppelt sind. Die Hochgeschwindigkeits-Links 440A-440D können je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder höher unterstützen. Verschiedene Interconnect-Protokolle können verwendet werden, einschließlich, jedoch nicht beschränkt auf PCIe 4.0 oder 5.0 und NVLink 2.0. Die hierin beschriebenen zugrundeliegenden Prinzipien sind jedoch nicht auf ein bestimmtes Kommunikationsprotokoll oder einen bestimmten Durchsatz beschränkt.
  • Zwei oder mehr der GPUs 410-413 können über Hochgeschwindigkeits-Links 442A-442B miteinander verbunden sein, die unter Verwendung der gleichen oder anderer Protokolle/Links als denen, die für die Hochgeschwindigkeits-Links 440A-440D verwendet werden, implementiert werden können. In ähnlicher Weise können zwei oder mehrere der Mehrkernprozessoren 405-406 über einen Hochgeschwindigkeits-Link 443 verbunden sein, der Symmetrischer-Multiprozessor(SMP)-Busse sein kann, die mit 20 GB/s, 30 GB/s, 120 GB/s oder mehr arbeiten. Alternativ kann die gesamte Kommunikation zwischen den in 4A gezeigten verschiedenen Systemkomponenten unter Verwendung der gleichen Protokolle/Links (z. B. über eine gemeinsame Verbindungs-Fabric) erreicht werden. Wie erwähnt, sind die hierin beschriebenen zugrundeliegenden Prinzipien jedoch nicht auf eine bestimmte Art von Interconnect-Technologie beschränkt.
  • Jeder Mehrkernprozessor 405-406 kann jeweils über Speicher-Interconnects 430A-430B kommunikativ mit einem Prozessorspeicher 401-402 gekoppelt sein und jede GPU 410-413 ist jeweils über GPU-Speicher-Interconnects 450A-450D kommunikativ mit dem GPU-Speicher 420-423 gekoppelt. Die Speicher-Interconnects 430A-430B und 450A-450D können die gleiche oder unterschiedliche Speicherzugriffstechnologien nutzen. Beispielhaft und nicht beschränkend können die Prozessorspeicher 401-402 und die GPU-Speicher 420-423 flüchtige Speicher wie dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelten DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder High-Bandwidth-Memory (HBM) sein und/oder können nichtflüchtige Speicher wie 3D-XPoint- oder Nano-Ram sein. Beispielsweise kann ein Teil der Speicher ein flüchtiger Speicher sein und ein anderer Teil kann ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer 2LM-Hierarchie (2LM: Two-Level Memory - Zwei-Ebenen-Speicher)).
  • Wie nachstehend beschrieben, kann, wenngleich die verschiedenen Prozessoren 405-406 und GPUs 410-413 physisch jeweils mit einem bestimmten Speicher 401-402, 420-423 gekoppelt sein können, eine vereinheitlichte Speicherarchitektur implementiert sein, in der derselbe virtuelle Systemadressraum (auch als der „effektive Adressraum“ bezeichnet) unter allen verschiedenen physischen Speichern verteilt ist. Zum Beispiel können die Prozessorspeicher 401-402 jeweils 64 GB des Systemspeicheradressraums umfassen, und die GPU-Speicher 420-423 können jeweils 32 GB des Systemspeicheradressraums umfassen (was in diesem Beispiel zu insgesamt 256 GB adressierbaren Speichers führt).
  • 4B veranschaulicht zusätzliche optionale Einzelheiten für eine Verbindung zwischen einem Mehrkernprozessor 407 und einem Grafikbeschleunigungsmodul 446. Das Grafikbeschleunigungsmodul 446 kann einen oder mehrere GPU-Chips aufweisen, die auf einer Leitungskarte integriert sind, die über den Hochgeschwindigkeits-Link 440 mit dem Prozessor 407 gekoppelt ist. Alternativ dazu kann das Grafikbeschleunigungsmodul 446 auf dem gleichen Package oder Chip wie der Prozessor 407 integriert sein.
  • Der veranschaulichte Prozessor 407 weist mehrere Kerne 460A-460D mit jeweils einem Übersetzungspuffer 461A-461D und einem oder mehreren Caches 462A-462D auf. Die Kerne können verschiedene andere Komponenten zum Ausführen von Anweisungen und zum Verarbeiten von Daten beinhalten, die nicht veranschaulicht sind, um zu vermeiden, dass die zugrundeliegenden Prinzipien der hierin beschriebenen Komponenten (z. B. Anweisungsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decoder, Ausführungseinheiten, Neuordnungspuffer usw.) unklar werden. Die Caches 462A-462D können Level-1(L1)- und Level-2(L2)-Caches umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Caches 456 in der Caching-Hierarchie enthalten sein und durch Sätze der Kerne 460A-460D gemeinsam genutzt werden. Zum Beispiel weist eine Ausführungsform des Prozessors 407 24 Kerne auf, jeweils mit seinem eigenen L1-Cache, zwölf gemeinsam genutzten L2-Caches und zwölf gemeinsam genutzten L3-Caches. In dieser Ausführungsform wird einer der L2- und L3-Caches von zwei benachbarten Kernen gemeinsam genutzt. Der Prozessor 407 und das Grafikbeschleunigerintegrationsmodul 446 sind mit dem Systemspeicher 441 verbunden, der Prozessorspeicher 401-402 beinhalten kann.
  • Die Kohärenz wird für Daten und Anweisungen, die in den verschiedenen Caches 462A-462D, 456 und dem Systemspeicher 441 gespeichert sind, über eine Inter-Kern-Kommunikation über einen Kohärenzbus 464 aufrechterhalten. Zum Beispiel kann jeder Cache eine mit diesem assoziierte Cachekohärenzlogik/-schaltungsanordnung aufweisen, um als Reaktion auf detektierte Lese- oder Schreibvorgänge in bestimmte Cachezeilen über den Kohärenzbus 464 zu kommunizieren. In einer Implementierung wird ein Cache-Snooping-Protokoll über den Kohärenzbus 464 implementiert, um Cachezugriffe zu snoopen. Cache-Snooping-/Kohärenztechniken sind Fachleuten gut bekannt und werden hier nicht detailliert beschrieben, um zu vermeiden, dass die hierin beschriebenen zugrundeliegenden Prinzipien unklar werden.
  • Eine Proxyschaltung 425 kann bereitgestellt sein, die das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenzbus 464 koppelt, wodurch ermöglicht wird, dass das Grafikbeschleunigungsmodul 446 als ein Peer der Kerne am Cache-Kohärenzprotokoll teilnimmt. Insbesondere stellt eine Schnittstelle 435 eine Konnektivität zu der Proxy-Schaltung 425 über einen Hochgeschwindigkeit-Link 440 (z.B. einen PCIe-Bus, NVLink usw.) bereit und eine Schnittstelle 437 verbindet das Grafikbeschleunigungsmodul 446 mit dem Hochgeschwindigkeit-Link 440.
  • Bei einer Implementierung stellt eine Beschleunigerintegrationsschaltung 436 Cacheverwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Interrupt-Verwaltungsdienste für mehrere Grafikverarbeitungs-Engines 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikverarbeitungs-Engines 431, 432, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ dazu können die Grafikverarbeitungs-Engines 431, 432, N verschiedene Arten von Grafikverarbeitungs-Engines in einer GPU umfassen, wie etwa Grafikausführungseinheiten, Medienverarbeitungs-Engines (z. B. Videocodierer/-decodierer), Sampler und Blit-Engines. Mit anderen Worten kann das Grafikbeschleunigungsmodul eine GPU mit mehreren Grafikverarbeitungs-Engines 431-432, N sein oder können die Grafikverarbeitungs-Engines 431-432, N einzelne GPUs sein, die auf einem gemeinsamen Package, einer Leitungskarte oder einem Chip integriert sind.
  • Die Beschleunigerintegrationsschaltung 436 kann eine Speicherverwaltungseinheit (MMU: Memory Management Unit) 439 zum Durchführen verschiedener Speicherverwaltungsfunktionen wie etwa Übersetzungen von virtuellem in physischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle zum Zugriff auf den Systemspeicher 441 beinhalten. Die MMU 439 kann auch einen Übersetzungspuffer (TLB) (nicht gezeigt) zum Cachen der Übersetzungen von virtuellen/effektiven in physische/reale Adressen aufweisen. In einer Implementierung speichert ein Cache 438 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungs-Engines 431-432, N. Die in dem Cache 438 und den Grafikspeichern 433-434, M gespeicherten Daten können kohärent mit den Kerncaches 462A-462D, 456 und dem Systemspeicher 411 gehalten werden. Wie erwähnt, kann dies über den Proxy-Schaltkreis 425 erreicht werden, der anstelle des Caches 438 und der Speicher 433-434, M an dem Cachekohärenzmechanismus beteiligt ist (z. B. Senden von Aktualisierungen an den Cache 438 bezüglich Modifikationen/Zugriffen auf Cacheleitungen auf Prozessorcaches 462A-462D, 456 und Empfangen von Aktualisierungen von dem Cache 438).
  • Ein Satz von Registern 445 speichert Kontextdaten für Threads, die durch die Grafikprozessor-Engines 431-432, N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Speicher- und Wiederherstellungsoperationen zum Speichern und Wiederherstellen von Kontexten der verschiedenen Threads während Kontextwechseln durchführen (z. B. wenn ein erster Thread gespeichert wird und ein zweiter Thread gespeichert wird, sodass der zweite Thread durch eine Grafikverarbeitungs-Engine ausgeführt werden kann). Zum Beispiel kann die Kontextverwaltungsschaltung 448 bei einem Kontextwechsel aktuelle Registerwerte in einem designierten Bereich im Speicher (z. B. durch einen Kontextzeiger identifiziert) speichern. Er kann dann die Registerwerte bei Rückkehr zu dem Kontext wiederherstellen. Eine Interrupt-Verwaltungsschaltung 447 kann beispielsweise Interrupts empfangen und verarbeiten, die von Systemvorrichtungen empfangen werden.
  • In einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungs-Engine 431 durch die MMU 439 in reale/physische Adressen im Systemspeicher 411 übersetzt. Optional unterstützt die Beschleunigerintegrationsschaltung 436 mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 446 kann für eine einzelne Anwendung dediziert sein, die auf dem Prozessor 407 ausgeführt wird, oder kann von mehreren Anwendungen gemeinsam genutzt werden. Optional wird eine virtualisierte Grafikausführungsumgebung bereitgestellt, in der die Ressourcen der Grafikverarbeitungs-Engines 431 - 432, N mit mehreren Anwendungen oder virtuellen Maschinen (VMs) geteilt werden. Die Ressourcen können in „Slices“ unterteilt sein, die verschiedenen VMs und/oder Anwendungen auf der Grundlage der mit den VMs und/oder den Anwendungen assoziierten Verarbeitungsanforderungen und -prioritäten zugewiesen sind.
  • Somit wirkt die Beschleunigerintegrationsschaltung 436 als Brücke zum System für das Grafikbeschleunigungsmodul 446 und stellt Adressübersetzungs- und Systemspeichercachedienste bereit. In einer Ausführungsform kann die Beschleunigerintegrationsschaltung 436 zur Erleichterung der Überbrückungsfunktionalität auch gemeinsam genutzte E/A 497 (z. B. PCIe, USB) und Hardware beinhalten, um eine Systemsteuerung von Spannung, Taktung, Leistungsfähigkeit, Temperatur und Sicherheit zu ermöglichen. Die gemeinsam genutzte E/A 497 kann separate physische Verbindungen verwenden oder kann den Hochgeschwindigkeits-Link 440 durchlaufen. Außerdem kann die Beschleunigerintegrationsschaltung 436 Virtualisierungseinrichtungen für den Hostprozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungs-Engines, Interrupts und Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungs-Engines 431-432, N explizit auf den realen Adressraum abgebildet werden, den der Hostprozessor 407 sieht, kann jeder Hostprozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts adressieren. Eine optionale Funktion der Beschleunigerintegrationsschaltung 436 ist die physische Trennung der Grafikverarbeitungs-Engines 431 - 432, N, sodass sie dem System als unabhängige Einheiten erscheinen.
  • Ein oder mehrere Grafikspeicher 433 - 434, M können jeweils mit jeder der Grafikverarbeitungs-Engines 431 - 432, N gekoppelt sein. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die von jeder der Grafikverarbeitungs-Engines 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (z. B. GDDR5, GDDR6) oder HBM sein und/oder können nichtflüchtiger Speicher wie 3D XPoint oder Nano-Ram sein.
  • Um den Datenverkehr über den Hochgeschwindigkeits-Link 440 zu reduzieren, können Biasing-Techniken verwendet werden, um sicherzustellen, dass die in den Grafikspeichern 433-434, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungs-Engines 431-432, N verwendet werden und vorzugsweise nicht von den Kernen 460A-460D verwendet werden (zumindest nicht häufig). Gleichermaßen versucht der Biasing-Mechanismus, Daten, die von den Kernen (und vorzugsweise nicht den Grafikverarbeitungs-Engines 431-432, N) benötigt werden, in den Caches 462A-462D, 456 der Kerne und des Systemspeichers 411 zu halten.
  • Gemäß einer in 4C gezeigten Variante ist die Beschleunigerintegrationsschaltung 436 in dem Prozessor 407 integriert. Die Grafikverarbeitungs-Engines 431-432, N kommunizieren direkt über den Hochgeschwindigkeits-Link 440 mit der Beschleunigerintegrationsschaltung 436 über die Schnittstelle 437 und die Schnittstelle 435 (die wiederum eine beliebige Form von Bus- oder Schnittstellenprotokoll verwenden können). Die Beschleunigerintegrationsschaltung 436 kann die gleichen Operationen wie jene durchführen, die mit Bezug auf 4 B beschrieben sind, aber angesichts seiner unmittelbaren Nähe zu dem Kohärenzbus 464 und den Caches 462A-462D, 456 möglicherweise mit einem höheren Durchsatz.
  • Die beschriebenen Ausführungsformen können verschiedene Programmiermodelle unterstützen, einschließlich eines Programmiermodells mit dedizierten Prozessen (keine Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzten Programmiermodellen (mit Virtualisierung). Letzteres kann Programmiermodelle, die von der Beschleunigerintegrationsschaltung 436 gesteuert werden, und Programmiermodelle, die von dem Grafikbeschleunigungsmodul 446 gesteuert werden, beinhalten.
  • In den Ausführungsformen des dedizierten Prozessmodells können die Grafikverarbeitungs-Engines 431 - 432, N einer einzelnen Anwendung oder einem einzelnen Prozess unter einem einzigen Betriebssystem dediziert sein. Die Einzelanwendung kann andere Anwendungsanfragen an die Grafik-Engines 431-432, N leiten, wobei eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In den Programmiermodellen mit dedizierten Prozessen können die Grafikverarbeitungs-Engines 431-432, N durch mehrere VM/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle erfordern einen Systemhypervisor zur Virtualisierung der Grafikverarbeitungs-Engines 431-432, N, um einen Zugriff durch jedes Betriebssystem zu ermöglichen. Für Einzelpartitionssysteme ohne einen Hypervisor gehören die Grafikverarbeitungs-Engines 431-432, N dem Betriebssystem. In beiden Fällen kann das Betriebssystem die Grafikverarbeitungs-Engines 431-432, N virtualisieren, um Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • Für das gemeinsam genutzte Programmiermodell wählt das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungs-Engine 431-432, N ein Prozesselement unter Verwendung eines Prozess-Handles aus. Die Prozesselemente können in dem Systemspeicher 411 gespeichert werden und unter Verwendung der hierin beschriebenen Techniken zur Übersetzung von effektiven Adressen in reale Adressen adressierbar sein. Der Prozess-Handle kann ein implementierungsspezifischer Wert sein, der dem Hostprozess zugeführt wird, wenn sein Kontext bei der Grafikverarbeitungs-Engine 431-432, N registriert wird (das heißt, Systemsoftware aufgerufen wird, um das Prozesselement zu der verknüpften Prozesselement-Liste hinzuzufügen). Die unteren 16 Bit des Prozess-Handles können der Offset des Prozesselements innerhalb der verknüpften Prozesselement-Liste sein.
  • 4D veranschaulicht ein beispielhaftes Beschleunigerintegrations-Slice 490. Wie hierin verwendet, umfasst ein „Slice“ einen festgelegten Anteil der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 436. Der effektive Anwendungsadressraum 482 im Systemspeicher 411 speichert Prozesselemente 483. Die Prozesselemente 483 können als Reaktion auf GPU-Aufrufe 481 von Anwendungen 480, die auf dem Prozessor 407 ausgeführt werden, gespeichert werden. Ein Prozesselement 483 enthält den Prozesszustand für die entsprechende Anwendung 480. Ein Arbeitsdeskriptor (WD: Work Descriptor) 484, der in dem Prozesselement 483 enthalten ist, kann ein einziger Arbeitsauftrag sein, der durch eine Anwendung angefordert wird, oder er kann einen Zeiger auf eine Warteschlange von Arbeitsaufträgen enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Arbeitsauftragsanforderungswarteschlange in dem Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungs-Engines 431-432, N können durch alle oder eine Teilmenge der Prozesse in dem System gemeinsam genutzt werden. Die hierin beschriebenen Technologien können beispielsweise eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 484 an ein Grafikbeschleunigungsmodul 446 zum Starten eines Arbeitsauftrags in einer virtualisierten Umgebung beinhalten.
  • In einer Implementierung ist das Programmiermodell mit dedizierten Prozessen implementierungsspezifisch. In diesem Modell gehört das Grafikbeschleunigungsmodul 446 oder eine individuelle Grafikverarbeitungs-Engine 431 einem einzelnen Prozess. Weil das Grafikbeschleunigungsmodul 446 einem einzigen Prozess gehört, initialisiert der Hypervisor die Beschleunigerintegrationsschaltung 436 für die besitzende Partition, und das Betriebssystem initialisiert die Beschleunigerintegrationsschaltung 436 für den besitzenden Prozess zu dem Zeitpunkt, zu dem das Grafikbeschleunigungsmodul 446 zugewiesen wird.
  • Im Betrieb ruft eine WD-Abrufeinheit 491 in der Beschleunigerintegrations-Slice 490 den nächsten WD 484 ab, der eine Angabe der durch eine der Grafikverarbeitungs-Engines des Grafikbeschleunigungsmoduls 446 vorzunehmenden Arbeit beinhaltet. Daten von dem WD 484 können in Registern 415 gespeichert und durch die MMU 439, die Interrupt-Verwaltungsschaltung 447 und/oder die Kontext-Verwaltungsschaltung 448 verwendet werden, wie veranschaulicht ist. Beispielsweise kann die MMU 439 eine Segment-/Seiten-Walk-Schaltungsanordnung zum Zugreifen auf Segment-/Seitentabellen 486 innerhalb des virtuellen OS-Adressraums 485 beinhalten. Die Interrupt-Verwaltungsschaltung 447 kann Interrupt-Ereignisse 492, die von dem Grafikbeschleunigungsmodul 446 empfangen wurden, verarbeiten. Wenn Grafikoperationen durchgeführt werden, wird eine effektive Adresse 493, die durch eine Grafikverarbeitungs-Engine 431-432, N erzeugt wurde, durch die MMU 439 in eine reale Adresse übersetzt.
  • Der gleiche Satz von Registern 445 kann für jede Grafikverarbeitungs-Engine 431-432, N und/oder Grafikbeschleunigungsmodul 446 dupliziert werden und kann durch den Hypervisor oder das Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einer Beschleunigerintegrations-Slice 490 enthalten sein. Beispielhafte Register, die durch den Hypervisor initialisiert werden können, sind in Tabelle 1 gezeigt. Tabelle 1 - Hypervisor initialisierte Register
    1 Slice- Steuerregi ster
    2 Realadressen(RA)-Bereichszeiger für geplante Prozesse
    3 Autoritätsmaskenüberschreibungsregister
    4 Interrupt-Vektor-Tabelleneintrag-Offset
    5 Interrupt-Vektor-Tabelleneintrag-Grenze
    6 Zustandsregister
    7 Logikpartition-ID
    8 Realadressen(RA)-Hypervisorbeschleunigernutzungsdatensatzzeiger
    9 Speicherungsbeschreibungsregister
  • Beispielhafte Register, die vom Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - Vom Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifizierung
    2 Effektive Adresse(EA)-Kontext-Speichern/Wiederherstellen-Zeiger
    3 Beschleunigerauslastungsdatensatzzeiger für virtuelle Adresse (VA)
    4 Virtuelladressen(VA)-Speicherungssegmenttabellenzeiger
    5 Berechtigungsmaske
    6 Arbeitsdeskriptor
  • Jeder WD 484 kann für ein spezielles Grafikbeschleunigungsmodul 446 und/oder eine Grafikverarbeitungs-Engine 431-432, N spezifisch sein. Er enthält alle Informationen, die eine Grafikverarbeitungs-Engine 431-432, N benötigt, um ihre Arbeit zu verrichten, oder er kann ein Zeiger auf einen Speicherort sein, an dem die Anwendung eine Befehlswarteschlange für zu verrichtende Arbeit eingerichtet hat.
  • 4E veranschaulicht zusätzliche optionale Einzelheiten eines gemeinsam genutzten Modells. Es enthält einen Hypervisor-Realadressraum 498, in dem eine Prozesselementliste 499 gespeichert ist. Der Hypervisor-Adressraum 498 ist über einen Hypervisor 496 zugreifbar, der die Grafikbeschleunigungsmodul-Engines für das Betriebssystem 495 virtualisiert.
  • Die gemeinsam genutzten Programmiermodelle ermöglichen, dass alle oder eine Teilmenge von Prozessen von allen oder einer Teilmenge von Partitionen in dem System ein Grafikbeschleunigungsmodul 446 verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 446 durch mehrere Prozesse und Partitionen gemeinsam genutzt wird: eine gemeinsame Nutzung nach Zeit-Slices und eine grafikgerichtete gemeinsame Nutzung.
  • In diesem Modell hat der Systemhypervisor 496 das Grafikbeschleunigungsmodul 446 inne und stellt dessen Funktion allen Betriebssystemen 495 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 446 eine Virtualisierung durch den Systemhypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Eine Arbeitsauftragsanforderung einer Anwendung muss autonom sein (das heißt, der Zustand muss nicht zwischen Arbeitsaufträgen aufrechterhalten werden), oder das Grafikbeschleunigungsmodul 446 muss einen Kontextspeicherungs-
    und -wiederherstellungsmechanismus bereitstellen. 2) Eine Arbeitsauftragsanforderung wird durch das Grafikbeschleunigungsmodul 446 garantiert innerhalb eines spezifizierten Zeitraums abgeschlossen, einschließlich jeglicher Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 446 stellt die Fähigkeit bereit, das Verarbeiten des Arbeitsauftrags vorwegzunehmen. 3) Dem Grafikbeschleunigungsmodul 446 muss Fairness zwischen Prozessen garantiert werden, wenn es in dem gerichteten gemeinsam genutzten Programmiermodell arbeitet.
  • Für das gemeinsam genutzte Modell muss die Anwendung 480 möglicherweise einen Systemsystemaufruf des Betriebssystems 495 mit einem Typ des Grafikbeschleunigungsmoduls 446, einem Arbeitsdeskriptor (WD), einem AMR-Wert (AMR: Authority Mask Register) und einem Kontextspeicherungs-/-wiederherstellungsbereichszeiger (Context Save/Restore Area Pointer - CSRP) durchführen. Der Typ des Grafikbeschleunigungsmoduls 446 beschreibt die Zielbeschleunigungsfunktion für den Systemaufruf. Der Typ des Grafikbeschleunigungsmodul 446 kann ein systemspezifischer Wert sein. Der WD ist speziell für das Grafikbeschleunigungsmodul 446 formatiert und kann in Form eines Befehls des Grafikbeschleunigungsmoduls 446, eines Effektivadresszeigers auf eine benutzerdefinierte Struktur, eines Effektivadresszeigers auf eine Warteschlange von Befehlen oder einer beliebigen anderen Datenstruktur zum Beschreiben der durch das Grafikbeschleunigungsmodul 446 zu verrichtenden Arbeit vorliegen. In einer Ausführungsform ist der AMR-Wert der AMR-Zustand, der für den aktuellen Prozess zu verwenden ist. Der an das Betriebssystem weitergebene Wert ähnelt einer Anwendung, die den AMR einstellt. Falls die Implementierungen der Beschleunigerintegrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein Benutzerautoritätsmaskenüberschreibungsregister (UAMOR: User-Authority-Mask-Override-Register) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor der AMR in dem Hypervisor-Aufruf übergeben wird. Der Hypervisor 496 kann den aktuellen Autoritätsmaskenüberschreibungsregister(AMOR: Authority Mask Override Register)-Wert anwenden, bevor das AMR in das Prozesselement 483 platziert wird. Der CSRP kann eines der Register 445 sein, das die effektive Adresse eines Bereichs im Adressraum 482 der Anwendung für das Grafikbeschleunigungsmodul 446 zum Speichern und Wiederherstellen des Kontextzustands enthält. Dieser Zeiger ist optional, falls kein Status zwischen Arbeitsaufträgen gespeichert werden muss oder wenn ein Arbeitsauftrag zurückgestellt wird. Der Kontextspeicherungs-/-wiederherstellungsbereich kann ein festgelegter Systemspeicher sein.
  • Beim Empfang des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass die Anwendung 480 registriert wurde und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 erhalten hat. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - OS-zu-Hypervisor-Aufrufparameter
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert).
    3 Ein Effektive-Adresse(EA)-Context Save/Restore-Bereichszeiger (CSRP)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Virtuelladressen(VA)-Beschleunigernutzungsdatensatzzeiger (AURP)
    6 Die virtuelle Adresse des Speicherungssegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Dienstnummer (LISN)
  • Bei Empfang des Hypervisoraufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 registriert wurde und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 erhalten hat. Der Hypervisor 496 fügt dann das Prozesselement 483 in die verknüpfte Prozesselementliste für den entsprechenden Typ des Grafikbeschleunigungsmoduls 446 ein. Das Prozesselement kann die in Tabelle 4 dargestellten Informationen enthalten. Tabelle 4 - Prozesselementinformationen
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert).
    3 Ein Effektive-Adresse(EA)-Context Save/Restore-Bereichszeiger (CSRP)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Virtuelladressen(VA)-Beschleunigernutzungsaufzeichnungszeiger (AURP)
    6 Die virtuelle Adresse des Speicherungssegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Dienstnummer (LISN)
    8 Interrupt-Vektortabelle, abgeleitet von den Hypervisoraufrufparametern.
    9 Ein Zustandsregister(SR)-Wert
    10 Eine Logikpartitions-ID (LPID)
    11 Ein Reale-Addresse(RA)-Hypervisor-Beschleunigungs-Nutzungsdatensatzzeiger
    12 Das Speicherungsdeskriptorregister (SDR)
  • Der Hypervisor kann mehrere Register 445 des Beschleunigerintegrations-Slice 490 initialisieren.
  • Wie in 4F veranschaulicht, wird in einer optionalen Implementierung ein vereinheitlichter Speicher, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der zum Zugriff auf die physischen Prozessorspeicher 401-402 und GPU-Speicher 420-423 verwendet wird, eingesetzt. Bei dieser Implementierung verwenden auf den GPUs 410-413 ausgeführte Operationen den gleichen virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401-402 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. Ein erster Abschnitt des virtuellen/effektiven Speicheradressraums kann dem Prozessorspeicher 401, ein zweiter Abschnitt dem zweiten Prozessorspeicher 402, ein dritter Abschnitt dem GPU-Speicher 420 usw. zugewiesen sein. Der gesamte virtuelle/effektive Speicherraum (manchmal als effektiver Adressraum bezeichnet) kann dadurch auf jeden der Prozessorspeicher 401 - 402 und GPU-Speicher 420 - 423 verteilt werden, wodurch ermöglicht wird, dass jeder Prozessor oder jede GPU auf einen beliebigen physischen Speicher Adresse mit einer auf diesen Speicher abgebildeten virtuellen Adresse zugreifen kann.
  • Eine Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A - 494E innerhalb einer oder mehrerer der MMUs 439A - 439E kann bereitgestellt werden, die die Cache-Kohärenz zwischen den Caches der Hostprozessoren (z. B. 405) und den GPUs 410 - 413 sicherstellt und Biasing-Techniken implementiert, die die physischen Speicher angeben, in denen bestimmte Arten von Daten gespeichert werden sollten. Obwohl in 4F mehrere Instanzen einer Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A-494E veranschaulicht sind, kann die Bias-/Kohärenz-Verwaltungsschaltungsanordnung innerhalb der MMU eines oder mehrerer Hostprozessoren 405 und/oder innerhalb der Beschleunigerintegrationsschaltung 436 implementiert sein.
  • Der an die GPU angeschlossene Speicher 420-423 kann als Teil des Systemspeichers abgebildet werden und es kann auf ihn unter Verwendung einer SVM-Technologie (SVM Shared Virtual Memory - gemeinsam genutzter Speicher) zugegriffen werden, ohne jedoch die typischen Leistungsnachteile zu erleiden, die mit vollständiger System-Cache-Kohärenz verbunden sind. Die Möglichkeit, auf den an die GPU angeschlossenen Speicher 420-423 als Systemspeicher ohne lästigen Cachekohärenz-Overhead zuzugreifen, bietet eine vorteilhafte Betriebsumgebung für GPU-Offload. Diese Anordnung ermöglicht es der Software des Hostprozessors 405, Operanden einzurichten und auf Berechnungsergebnisse zuzugreifen, ohne den Overhead herkömmlicher E/A-DMA-Datenkopien. Solche herkömmlichen Kopien beinhalten Treiberaufrufe, Interrupts und speicherabgebildete E/A-Zugriffe (MMIO-Zugriffe - Memory Mapped I/O), die alle in Bezug auf einfache Speicherzugriffe ineffizient sind. Gleichzeitig kann die Fähigkeit, ohne Cachekohärenz-Overhead auf den an die GPU angeschlossenen Speicher 420-423 zuzugreifen, entscheidend für die Ausführungszeit einer ausgelagerten Berechnung sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr kann beispielsweise der Cachekohärenz-Overhead die effektive Schreibbandbreite, die eine GPU 410-413 sieht, erheblich reduzieren. Die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung spielen alle eine Rolle bei der Bestimmung der Effektivität des GPU-Offloads.
  • Eine Auswahl zwischen GPU-Bias und Hostprozessor-Bias kann durch eine Bias-Tracker-Datenstruktur gesteuert werden. Beispielsweise kann eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (d. h. mit der Granularität einer Speicherseite gesteuert werden kann), die 1 oder 2 Bits pro GPU-angeschlossener Speicherseite aufweist. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich eines oder mehrerer an die GPU angeschlossener Speicher 420-423 mit oder ohne Bias-Cache in der GPU 410-413 implementiert sein (z. B. um häufig/kürzlich verwendete Einträge der Bias-Tabelle zu cachen). Alternativ dazu kann die gesamte Bias-Tabelle in der GPU beibehalten werden.
  • In einer Implementierung wird auf den Bias-Tabelleneintrag, der mit jedem Zugriff auf den an die GPU angeschlossenen Speicher 420-423 assoziiert ist, vor dem eigentlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen bewirkt. Zunächst werden lokale Anforderungen von der GPU 410-413, die ihre Seite in GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 420-423 weitergeleitet. Lokale Anforderungen von der GPU, die ihre Seite in Host-Bias finden, werden an den Prozessor 405 weitergeleitet (z. B. über einen Hochgeschwindigkeits-Link, wie oben erläutert). Optional schließen Anforderungen von dem Prozessor 405, die die angeforderte Seite in Hostprozessor-Bias finden, die Anforderung wie einen normalen Speicherlesevorgang ab. Alternativ dazu können Anforderungen, die an eine Seite mit GPU-Bias gerichtet sind, an die GPU 410-413 weitergeleitet werden. Die GPU kann dann die Seite zu einem Hostprozessor-Bias überführen, wenn sie die Seite derzeit nicht verwendet.
  • Der Bias-Zustand einer Seite kann entweder durch einen softwarebasierten Mechanismus, einen hardwaregestützten softwarebasierten Mechanismus oder für einen begrenzten Satz von Fällen einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Bias-Zustands verwendet einen API-Aufruf (z. B. OpenCL), der wiederum den Vorrichtungstreiber der GPU aufruft, der wiederum eine Nachricht an die GPU sendet (oder einen Befehlsdeskriptor in eine Warteschlange einreiht), die sie anweist, den Bias-Zustand zu ändern und für manche Übergänge eine Cache-Flushing-Operation in dem Host durchzuführen. Die Cache-Flushing-Operation ist für einen Übergang vom Bias des Hostprozessors 405 zum GPU-Bias erforderlich, ist jedoch für den umgekehrten Übergang nicht erforderlich.
  • Die Cache-Kohärenz kann dadurch aufrechterhalten werden, dass bewirkt wird, dass Seiten mit GPU-Bias durch den Hostprozessor 405 vorübergehend nicht cachebar gemacht werden. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 Zugriff von der GPU 410 anfordern, die je nach der Implementierung einen sofortigen Zugriff gewähren kann oder nicht. Somit ist es zur Reduzierung einer Kommunikation zwischen dem Hostprozessor 405 und der GPU 410 vorteilhaft, sicherzustellen, dass Seiten mit GPU-Bias jene sind, die durch die GPU, jedoch nicht den Hostprozessor 405 benötigt werden, und umgekehrt.
  • Grafikverarbeitungs-Pipeline
  • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline 500. Ein Grafikmultiprozessor, wie etwa der Grafikmultiprozessor 234 von 2D, der Grafikmultiprozessor 325 von 3A, der Grafikmultiprozessor 350 von 3B, kann die veranschaulichte Grafikverarbeitungs-Pipeline 500 implementieren. Der Grafikmultiprozessor kann in den hierin beschriebenen Parallelverarbeitungssubsystemen enthalten sein, wie etwa dem Parallelprozessor 200 von 2A, der mit dem Parallelprozessor bzw. den Parallelprozessoren 112 von 1 in Beziehung steht und anstelle dieser verwendet werden kann. Die verschiedenen Parallelverarbeitungssysteme können die Grafikverarbeitungs-Pipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (z. B. Parallelverarbeitungseinheit 202 von 2A) implementieren, wie hierin beschrieben. Zum Beispiel kann eine Shader-Einheit (z. B. Grafikmultiprozessor 234 von 2C) dazu konfiguriert sein, die Funktionen einer oder mehrerer einer Vertex-Verarbeitungseinheit 504, einer Tessellationssteuerverarbeitungseinheit 508, einer Tessellationsauswertungsverarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und einer Fragment-/Pixelverarbeitungseinheit 524 auszuführen. Die Funktionen des Daten-Assemblers 502, der Primitiv-Assembler 506, 514, 518, der Tessellationseinheit 510, des Rasterers 522 und der Rasteroperationseinheiten 526 können auch durch andere Verarbeitungs-Engines innerhalb eines Verarbeitungsclusters (z. B. Verarbeitungscluster 214 aus 2A) und eine entsprechende Partitionseinheit (z. B. Partitionseinheit 220A-220N aus 2A) durchgeführt werden. Die Grafikverarbeitungs-Pipeline 500 kann auch unter Verwendung dedizierter Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert werden. Es ist auch möglich, dass ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 von einer Parallelverarbeitungslogik in einem Allzweckprozessor (z. B. CPU) ausgeführt werden. Optional können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 über eine Speicherschnittstelle 528, die eine Instanz der Speicherschnittstelle 218 von 2A sein kann, auf einen chipinternen Speicher (z. B. den Parallelprozessorspeicher 222 wie in 2A) zugreifen. Die Grafikprozessor-Pipeline 500 kann auch über eine Mehrkerngruppe 365A wie in 3C implementiert werden.
  • Der Daten-Assembler 502 ist eine Verarbeitungseinheit, die Vertexdaten für Oberflächen und Primitive sammelt. Der Daten-Assembler 502 gibt dann die Vertex-Daten einschließlich der Vertex-Attribute an die Vertex-Verarbeitungseinheit 504 aus. Die Vertex-Verarbeitungseinheit 504 ist eine programmierbare Ausführungseinheit, die Vertex-Shader-Programme ausführt und Vertex-Daten wie durch die Vertex-Shader-Programme spezifiziert beleuchtet und transformiert. Die Vertex-Verarbeitungseinheit 504 liest Daten, die im Cache-, Lokal- oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Vertex-Daten und kann so programmiert sein, dass sie die Vertex-Daten von einer objektbasierten Koordinatendarstellung in einen Weltkoordinatenraum oder einen normierten Vorrichtungskoordinatenraum transformiert.
  • Eine erste Instanz eines Primitiv-Assemblers 506 empfängt Vertex-Attribute von der Vertex-Verarbeitungseinheit 504. Der Primitiv-Assembler 506 liest nach Bedarf gespeicherte Vertex-Attribute aus und konstruiert Grafikprimitive zur Verarbeitung durch die Tessellationssteuerverarbeitungseinheit 508. Die Grafikprimitive beinhalten Dreiecke, Liniensegmente, Punkte, Felder und so weiter, wie sie durch verschiedene Grafikverarbeitungs-Anwendungsprogrammierschnittstellen (APIs) unterstützt werden.
  • Die Tessellationssteuerungsverarbeitungseinheit 508 behandelt die Eingabe-Vertices als Steuerpunkte für ein geometrisches Feld. Die Steuerpunkte werden von einer Eingaberepräsentation von dem Feld (z. B. den Basen des Felds) in eine Repräsentation transformiert, die zur Verwendung bei der Oberflächenbewertung von der Tessellationsauswertungs-Verarbeitungseinheit 512 geeignet ist. Die Tessellationssteuerverarbeitungseinheit 508 kann auch Tessellationsfaktoren für Kanten geometrischer Felder berechnen. Ein Tessellationsfaktor gilt für eine einzige Kante und quantifiziert einen mit der Kante assoziierten ansichtsabhängigen Detailgrad. Eine Tessellationseinheit 510 ist dazu ausgelegt, die Tessellationsfaktoren für Kanten eines Feldes zu empfangen und das Feld in mehrere geometrische Primitive wie Linien-, Dreieck- oder Viereck-Primitive zu tessellieren, die an eine Tessellationsauswertungsverarbeitungseinheit 512 übertragen werden. Die Tessellationsauswertungsverarbeitungseinheit 512 arbeitet mit parametrisierten Koordinaten des unterteilten Felds, um eine Oberflächendarstellung und Vertex-Attribute für jeden mit den geometrischen Primitiven assoziierten Vertex zu erzeugen.
  • Eine zweite Instanz eines Primitiv-Assemblers 514 empfängt Vertex-Attribute von der Tessellationsauswertungsverarbeitungseinheit 512, liest bei Bedarf gespeicherte Vertex-Attribute aus und konstruiert Grafikprimitive zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrie-Shader-Programme ausführt, um Grafikprimitive, die von dem Primitiv-Assembler 514 empfangen werden, wie durch die Geometrie-Shader-Programme spezifiziert zu transformieren. Die Geometrieverarbeitungseinheit 516 kann dazu programmiert sein, die Grafikprimitive in ein oder mehrere neue Grafikprimitive zu unterteilen und Parameter zu berechnen, die zum Rasterisieren der neuen Grafikprimitive verwendet werden.
  • Die Geometrieverarbeitungseinheit 516 kann in der Lage sein, im Geometriestrom Elemente hinzuzufügen oder zu löschen. Die Geometrieverarbeitungseinheit 516 gibt die Parameter und Vertices, die neue Grafik-Primitive spezifizieren, an den Primitiv-Assembler 518 aus. Der Primitiv-Assembler 518 empfängt die Parameter und Vertices von der Geometrieverarbeitungseinheit 516 und konstruiert Grafikprimitve zum Verarbeiten durch eine Viewport-Skalierungs-, Cull- und Clip-Einheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die im Parallelprozessorspeicher oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Geometriedaten. Die Viewport-Skalierungs-, Cull- und Clip-Einheit 520 führt Clipping, Culling und Viewport-Skalierung durch und gibt verarbeitete Grafikprimitive an einen Rasterer 522 aus.
  • Der Rasterer 522 kann Tiefen-Culling und andere tiefenbasierte Optimierungen durchführen. Der Rasterer 522 führt auch eine Scankonvertierung an den neuen Grafikprimitiven durch, um Fragmente zu erzeugen und diese Fragmente und zugehörige Abdeckungsdaten an die Fragment-/Pixelverarbeitungseinheit 524 auszugeben. Die Fragment-/Pixelverarbeitungseinheit 524 ist eine programmierbare Ausführungseinheit, die dazu ausgelegt ist, Fragment-Shader-Programme oder Pixel-Shader-Programme auszuführen. Die Fragment-/Pixelverarbeitungseinheit 524 transformiert Fragmente oder Pixel, die von dem Rasterer 522 empfangen werden, wie durch die Fragment- oder Pixel-Shader-Programme spezifiziert. Zum Beispiel kann die Fragment-/Pixelverarbeitungseinheit 524 dazu programmiert sein, Operationen durchzuführen, darunter unter anderem Texturabbildung, Shading, Blending, Texturkorrektur und Perspektivenkorrektur, um schattierte Fragmente oder Pixel zu erzeugen, die an eine Rasteroperationseinheit 526 ausgegeben werden. Die Fragment-/Pixelverarbeitungseinheit 524 kann entweder in dem Parallelprozessorspeicher oder in dem Systemspeicher gespeicherte Daten zur Verwendung bei einer Verarbeitung der Fragmentdaten lesen. Fragment- oder Pixel-Shader-Programme können so konfiguriert sein, dass sie abhängig von der für die Verarbeitungseinheiten konfigurierten Abtastrate mit Sample-, Pixel-, Kachel- oder anderen Granularitäten schattieren.
  • Die Rasteroperationseinheit 526 ist eine Verarbeitungseinheit, die Rasteroperationen durchführt, einschließlich, aber nicht beschränkt auf Schablone, Z-Test, Mischen und dergleichen, und Pixeldaten als verarbeitete Grafikdaten ausgibt, die im Grafikspeicher (z. B. Parallelprozessorspeicher 222 wie in 2A und/oder Systemspeicher 104 wie in 1), die auf dereinen oder den mehreren Anzeigegeräten 110 angezeigt werden sollen, oder zur Weiterverarbeitung durch einen des einen oder der mehreren Prozessoren 102 oder Parallelprozessoren 112. Die Rasteroperationseinheit 526 kann dazu konfiguriert sein, z- oder Farbdaten, die in Speicher geschrieben werden, zu komprimieren und z- oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren.
  • Überblick über das maschinelle Lernen
  • Die oben beschriebene Architektur kann angewendet werden, um Trainings- und Inferenzoperationen unter Verwendung von Maschinenlernmodellen durchzuführen. Maschinelles Lernen hat sich bei der Lösung vieler Arten von Aufgaben bewährt. Die Berechnungen, die beim Training und bei der Verwendung von Maschinenlernalgorithmen (z. B. neuronalen Netzen) anfallen, eignen sich in ihrer Natur für effiziente Parallelimplementierungen. Dementsprechend haben Parallelprozessoren wie Grafikprozessoren für allgemeine Zwecke (GPGPUs) eine bedeutende Rolle bei der praktischen Implementierung von tiefen neuronalen Netzwerken gespielt. Parallelgrafikprozessoren mit SIMT-Architekturen (SIMT: Single Instruction, Multiple Thread) sind dafür ausgelegt, das Ausmaß der Parallelverarbeitung in der Grafik-Pipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Die Effizienz, die durch parallele Maschinenlernalgorithmusimplementierungen bereitgestellt wird, ermöglicht die Verwendung von Netzen mit hoher Kapazität und erlaubt es, diese Netze an größeren Datensätzen zu trainieren.
  • Ein Maschinenlernalgorithmus ist ein Algorithmus, der basierend auf einem Datensatz lernen kann. Beispielsweise können Maschinenlernalgorithmen darauf ausgelegt sein, hochgradige Abstraktionen innerhalb eines Datensatzes zu modellieren. Zum Beispiel können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, welche von mehreren Kategorien zu welcher gegebenen Eingabe gehören; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu erzeugen oder eine Text-zu-Sprache- und/oder Spracherkennung durchzuführen.
  • Ein beispielhafter Typ eines Maschinenlernalgorithmus ist ein neuronales Netz. Es gibt viele Arten von neuronalen Netzen; ein einfacher Typ eines neuronalen Netzes ist ein vorwärtsgekoppeltes Netz. Ein vorwärtsgekoppeltes Netz kann als ein azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise weist eine vorwärtsgekoppelte Netztopologie eine Eingabeschicht und eine Ausgabeschicht auf, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht wandelt durch die Eingabeschicht empfangene Eingaben in eine Repräsentation um, die zum Erzeugen von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzknoten sind vollständig über Kanten mit den Knoten in angrenzenden Schichten verbunden, aber es gibt keine Kanten zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgekoppelten Netzes empfangen werden, werden über eine Aktivierungsfunktion, die die Zustände der Knoten jeder aufeinanderfolgenden Schicht in dem Netz auf der Grundlage von Koeffizienten („Gewichtungen“) berechnet, die jeweils mit jeder der die Schichten verbindenden Kanten assoziiert sind, an die Knoten der Ausgabeschicht propagiert (d. h. „vorwärts gekoppelt“). Abhängig von dem durch den ausgeführten Algorithmus repräsentierten speziellen Modell kann die Ausgabe von dem Neuronalnetzalgorithmus verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzes beinhaltet das Auswählen einer Netztopologie, das Verwendung eines Satzes von Trainingsdaten, die ein durch das Netz modelliertes Problem repräsentieren, und das Anpassen der Gewichtungen, bis das Netzmodell für alle Instanzen des Trainingsdatensatzes mit einem minimalen Fehler arbeitet. Zum Beispiel wird während eines Trainingsprozesses mit überwachtem Lernen für ein neuronales Netz die Ausgabe, die durch das Netz als Reaktion auf die eine Instanz in einem Trainingsdatensatz repräsentierende Eingabe erzeugt wird, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe repräsentiert, wird berechnet, und die Gewichtungen, die mit den Verbindungen assoziiert sind, werden angepasst, um diesen Fehler zu minimieren, während das Fehlersignal rückwärts durch die Schichten des Netzes propagiert wird. Das Netz wird als „trainiert“ betrachtet, wenn die Fehler für jede der aus den Instanzen des Trainingsdatensatzes erzeugten Ausgaben minimiert sind.
  • Die Genauigkeit eines Maschinenlernalgorithmus kann durch die Qualität des zum Trainieren des Algorithmus verwendeten Datensatzes erheblich beeinflusst werden. Der Trainingsprozess kann rechenintensiv sein und kann einen erheblichen Zeitaufwand auf einem herkömmlichen Allzweckprozessor erfordern. Dementsprechend wird eine Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders zum Optimieren des Trainings von neuronalen Netzen nützlich, da die Berechnungen, die beim Anpassen der Koeffizienten in neuronalen Netzen durchgeführt werden, sich auf natürliche Weise für parallele Implementierungen eignen. Insbesondere wurden viele Maschinenlernalgorithmen und Softwareanwendungen dahingehend angepasst, die Parallelverarbeitungshardware in Allzweckgrafikverarbeitungsvorrichtungen zu verwenden.
  • 6 ist ein verallgemeinertes Diagramm eines Softwarestapels 600 für maschinelles Lernen. Eine Maschinenlernanwendung 602 kann dazu konfiguriert sein, ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netz zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 602 kann eine Trainings- und Inferenzfunktionalität für ein neuronales Netz und/oder spezialisierte Software beinhalten, die verwendet werden kann, um ein neuronales Netz vor dem Einsatz zu trainieren. Die Maschinenlernanwendung 602 kann eine beliebige Art von Maschinenintelligenz implementieren, darunter unter anderem Bilderkennung, Kartierung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Hardwarebeschleunigung für die Maschinenlernanwendung 602 kann über ein Maschinenlern-Framework 604 ermöglicht werden. Das Maschinenlern-Framework 604 kann eine Bibliothek von Maschinenlernprimitiven bereitstellen. Maschinenlernprimitive sind Basisoperationen, die üblicherweise durch Maschinenlernalgorithmen durchgeführt werden. Ohne das Maschinenlern-Framework 604 müssten Entwickler von Maschinenlernalgorithmen die mit dem Maschinenlernalgorithmus assoziierte Hauptrechenlogik erstellen und optimieren und dann bei Entwicklung neuer Parallelprozessoren die Rechenlogik erneut optimieren. Stattdessen kann die Maschinenlernanwendung dazu konfiguriert sein, die notwendigen Berechnungen unter Verwendung der Primitiven durchzuführen, die von dem Maschinenlern-Framework 604 bereitgestellt werden. Zu beispielhaften Primitiven gehören Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Rechenoperationen handelt, die während des Trainierens eines faltenden neuronalen Netzes (CNN: Convolutional Neural Network) durchgeführt werden. Das Maschinenlern-Framework 604 kann auch Primitive bereitstellen, um Basisunterprogramme für lineare Algebra, die durch viele Maschinenlernalgorithmen durchgeführt werden, wie etwa Matrix- und Vektoroperationen, zu implementieren.
  • Das Maschinenlern-Framework 604 kann von der Maschinenlernanwendung 602 empfangene Eingabedaten verarbeiten und die passende Eingabe für ein Rechen-Framework 606 erzeugen. Das Rechen-Framework 606 kann die zugrundliegenden Anweisungen, die dem GPGPU-Treiber 608 zugeführt werden, abstrahieren, um dem Maschinenlern-Framework 604 zu ermöglichen, Hardware-Beschleunigung über GPGPU-Hardware 610 auszunutzen, ohne dass erforderlich ist, dass das Maschinenlern-Framework 704 über intime Kenntnis der Architektur der GPGPU-Hardware 610 verfügt. Weiterhin kann das Rechen-Framework 606 Hardware-Beschleunigung für das Maschinenlern-Framework 604 über eine Vielfalt von Arten und Generationen von GPGPU-Hardware 610 hinweg ermöglichen.
  • GPGPU-Beschleunigung für machinenelles Lernen
  • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit 700, die der Parallelprozessor 200 von 2A oder der (die) Parallelprozessor(en) 112 von 1 sein kann. Die Allzweck-Verarbeitungseinheit (GPGPU) 700 kann derart konfiguriert sein, dass sie besonders effizient beim Verarbeiten der Art von Berechnungsarbeitslasten ist, die mit dem Trainieren von tiefen neuronalen Netzen assoziiert ist. Darüber hinaus kann die GPGPU 700 direkt mit anderen Instanzen der GPGPU verlinkt sein, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für besonders tiefe neuronale Netze zu verbessern.
  • Die GPGPU 700 weist eine Hostschnittstelle 702 zum Ermöglichen einer Verbindung mit einem Hostprozessor auf. Die Hostschnittstelle 702 kann eine PCI-Express-Schnittstelle sein. Die Hostschnittstelle kann jedoch auch eine anbieterspezifische Kommunikationsschnittstelle oder ein anbieterspezifisches Kommunikations-Fabric sein. Die GPGPU 700 empfängt Befehle von dem Hostprozessor und verwendet einen globalen Scheduler 704 zum Verteilen von Ausführungs-Threads, die mit jenen Befehlen assoziiert sind, an einen Satz von Verarbeitungsclustern 706A-706H. Die Verarbeitungscluster 706A-706H nutzen einen Cachespeicher 708 gemeinsam. Der Cachespeicher 708 kann als Cache höherer Ebene für Cachespeicher innerhalb der Verarbeitungscluster 706A-706H dienen. Die veranschaulichten Verarbeitungscluster 706A - 706H können den Verarbeitungsclustern 214A - 214N wie in 2A entsprechen.
  • Die GPGPU 700 beinhaltet Speicher 714A-B, gekoppelt mit den Verarbeitungsclustern 706A-H über einen Satz von Speichersteuerungen 712A-712B. Der Speicher 714A - 714N kann verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafik-Direktzugriffspeichers, wie etwa eines synchronen Grafik-Direktzugriffspeichers (SGRAM), einschließlich eines Grafikspeichers mit doppelter Datenrate (GDDR). Optional können die Speichereinheiten 714A - 714N auch einen gestapelten 3D-Speicher beinhalten, einschließlich unter anderem Speicher mit hoher Bandbreite (HBM: High Bandwidth Memory).
  • Jeder der Verarbeitungscluster 706A-706H kann einen Satz von Grafikmultiprozessoren beinhalten, wie etwa den Grafikmultiprozessor 234 von 2D, den Grafikmultiprozessor 325 von 3A, den Grafikmultiprozessor 350 von 3B, oder kann eine Mehrkerngruppe 365A-365N wie in 3C beinhalten. Die Grafikmultiprozessoren des Rechenclusters beinhalten mehrere Arten von Ganzzahl- und Gleitkommalogikeinheiten, die Rechenoperationen mit einer Reihe von Präzisionen durchführen können, darunter auch solche, die sich für Maschinenlernberechnungen eignen. Zum Beispiel kann mindestens eine Teilmenge der Gleitkommaeinheiten 264 in jedem der Verarbeitungscluster 706A-706H konfiguriert werden, 16-Bit- oder 32-Bit-Gleitkommaoperationen auszuführen, während eine andere Teilmenge der Gleitkommaeinheiten 264 konfiguriert werden kann, 64-Bit-GleitkommaOperationen auszuführen.
  • Mehrere Instanzen der GPGPU 700 können derart konfiguriert sein, dass sie als ein Rechencluster arbeiten. Der Kommunikationsmechanismus, der durch den Rechencluster zur Synchronisation und zum Datenaustausch verwendet wird, variiert zwischen Ausführungsformen. Zum Beispiel kommunizieren die mehreren Instanzen der GPGPU 700 über die Hostschnittstelle 702. Bei einer Ausführungsform beinhaltet die GPGPU 700 einen E/A-Hub 709, der die GPGPU 700 mit einem GPU-Link 710 koppelt, der eine direkte Verbindung mit anderen Instanzen der GPGPU ermöglicht. Der GPU-Link 710 kann mit einer dedizierten GPU-zu-GPU-Bridge gekoppelt sein, die eine Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 700 ermöglicht. Optional ist der GPU-Link 710 mit einem Hochgeschwindigkeits-Interconnect gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu übertragen und von diesen zu empfangen. Die mehreren Instanzen der GPGPU 700 können sich in separaten Datenverarbeitungssystemen befinden und über eine Netzwerkvorrichtung kommunizieren, auf die über die Hostschnittstelle 702 zugegriffen werden kann. Der GPU-Link 710 kann dazu ausgestaltet sein, eine Verbindung zu einem Hostprozessor zusätzlich oder als Alternative zur Hostschnittstelle 702 zu ermöglichen.
  • Obgleich die veranschaulichte Ausgestaltung der GPGPU 700 zum Trainieren von neuronalen Netzen ausgelegt sein kann, kann eine alternative Ausgestaltung der GPGPU 700 zum Einsatz in einer Inferenzplattform mit hoher Leistungsfähigkeit oder einer Niederleistungsinferenzplattform ausgelegt sein. In einer Inferenzfindungsausgestaltung beinhaltet die GPGPU 700 im Vergleich zu der Trainingsausgestaltung weniger der Verarbeitungscluster 706A-706H. Außerdem kann sich die mit dem Speicher 714A-714B assoziierte Speichertechnologie zwischen Inferenzfindungs- und Trainingsausgestaltungen unterscheiden. Bei einer Ausführungsform kann die Inferenzfindungsausgestaltung der GPGPU 700 inferenzfindungsspezifische Anweisungen unterstützen. Zum Beispiel kann eine Inferenzausgestaltung Unterstützung für eine oder mehrere 8-Bit-Integer-Skalarproduktanweisungen vorsehen, die üblicherweise bei Inferenzoperationen für eingesetzte neuronale Netze verwendet werden.
  • 8 veranschaulicht ein Multi-GPU-Rechensystem 800. Das Multi-GPU-Rechensystem 800 kann einen Prozessor 802, über einen Hostschnittstellenswitch 804 mit mehreren GPGPUs 806A gekoppelt, beinhalten. Der Hostschnittstellen-Switch 804 kann eine PCI-Express-Vorrichtung sein, die mit dem Prozessor 802 an einen PCI-Express-Bus gekoppelt ist, über den der Prozessor 802 mit dem Satz von GPGPUs 806A-806D kommunizieren kann. Jede der mehreren GPGPUs 806A-806D kann eine Instanz der GPGPU 700 von 7 sein. Die GPGPUs 806A-806D können über einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Links 816 verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Links können mit jeder der GPGPUs 806A-806D über einen dedizierten GPU-Link, wie etwa den GPU-Link 710 wie in 7, verbunden sein. Die P2P-GPU-Links 816 ermöglichen direkte Kommunikation zwischen jeder der GPGPUs 806A-806D, ohne Kommunikation über den HostSchnittstellenbus, mit dem der Prozessor 802 verbunden ist, zu benötigen. Wenn der GPU-zu-GPU-Verkehr auf die P2P-GPU-Links geleitet wird, bleibt der Hostschnittstellenbus für einen Systemspeicherzugriff oder zur Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 800 verfügbar, beispielsweise über eine oder mehrere Netzwerkvorrichtungen. Obwohl in 8 die GPGPUs 806A-D über den Hostschnittstellen-Switch 804 mit dem Prozessor 802 verbunden sind, kann der Prozessor 802 alternativ dazu eine direkte Unterstützung für die P2P-GPU-Links 816 beinhalten und direkt mit den GPGPUs 806A-806D verbinden.
  • Implementierungen neuronaler Netze für maschinelles Lernen
  • Die hierin beschriebene Rechenarchitektur kann dazu ausgestaltet sein, die Arten von Parallelverarbeitung durchzuführen, die insbesondere zum Trainieren und Einsetzen von neuronalen Netzen für maschinelles Lernen geeignet sind. Ein neuronales Netz kann als ein Netz von Funktionen, die in einer Graphenbeziehung stehen, verallgemeinert werden. Wie im Stand der Technik bekannt, gibt es viele verschiedene Arten von Implementierungen neuronaler Netze, die beim maschinellen Lernen verwendet werden. Eine beispielhafte Art eines neuronalen Netzes ist das vorwärtsgekoppelte Netz, wie zuvor beschrieben.
  • Eine zweite beispielhafte Art eines neuronalen Netzes ist das faltende neuronale Netz (CNN: Convolutional Neural Network). Ein CNN ist ein spezialisiertes vorwärtsgekoppeltes neuronales Netz zum Verarbeiten von Daten mit einer bekannten gitterartigen Topologie, wie etwa Bilddaten. Dementsprechend werden CNNs üblicherweise für Computer-Vision- und Bilderkennungsanwendungen verwendet, sie können aber auch für andere Arten von Mustererkennung verwendet werden, wie etwa Sprach- und Sprachenverarbeitung. Die Knoten in der CNN-Eingabeschicht sind in einem Satz von „Filtern“ organisiert (Merkmalsdetektoren, die von den rezeptiven Feldern in der Netzhaut inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzes propagiert. Die Berechnungen für ein CNN beinhalten das Anwenden der mathematischen Faltungsoperation auf jedes Filter, um die Ausgabe dieses Filters zu erzeugen. Die Faltung ist eine spezielle Art von mathematischer Operation, bei der zwei Funktionen eine dritte Funktion erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Terminologie eines faltenden Netzes kann die erste Funktion der Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskern bezeichnet werden kann. Die Ausgabe kann als Feature-Map bezeichnet werden. Die Eingabe in eine Faltungsschicht kann beispielsweise ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingabebilds definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netz angepasst werden.
  • Rekurrente neuronale Netze (RNNs) sind eine Familie von vorwärtsgekoppelten neuronalen Netzen, die Rückkopplungsverbindungen zwischen Schichten enthalten. RNNs ermöglichen eine Modellierung sequenzieller Daten durch den Austausch von Parameterdaten über verschiedene Teile des neuronalen Netzes hinweg. Die Architektur für ein RNN umfasst Zyklen. Die Zyklen stellen den Einfluss eines gegenwärtigen Wertes einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der Ausgangsdaten von dem RNN als eine Rückkopplung zum Verarbeiten einer nachfolgenden Eingabe in einer Sequenz verwendet wird. Diese Eigenschaft macht RNNs aufgrund der variablen Natur, in der Sprachendaten zusammengesetzt werden können, besonders nützlich für die Sprachenverarbeitung.
  • Die nachstehend beschriebenen Figuren zeigen beispielhafte vorwärtsgekoppelte, CNN- und RNN-Netze und beschreiben einen allgemeinen Prozess zum jeweiligen Trainieren und Einsetzen jedes dieser Arten von Netzen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für eine beliebige spezielle hierin beschriebene Ausführungsform sind und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netze und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netze können zum Durchführen von tiefem Lernen verwendet werden. Tiefes Lernen ist maschinelles Lernen unter Verwendung von tiefen neuronalen Netzen. Die tiefen neuronalen Netze, die beim tiefen Lernen verwendet werden, sind künstliche neuronale Netze, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzen, die nur eine einzige verborgene Schicht aufweisen. Tiefere neuronale Netze sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzes ermöglichen jedoch eine mehrstufige Mustererkennung, die verglichen mit flachen Maschinenlerntechniken zu verringerten Ausgabefehlern führt.
  • Tiefe neuronale Netze, die beim tiefen Lernen verwendet werden, beinhalten in der Regel ein Frontend-Netz zur Durchführung einer Merkmalserkennung, das mit einem Backend-Netz gekoppelt ist, das ein mathematisches Modell repräsentiert, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der dem Modell bereitgestellten Merkmalsrepräsentation durchführen kann. Tiefes Lernen ermöglicht ein Durchführen von maschinellem Lernen, ohne dass für das Modell eine manuelle Merkmalskonstruktion durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale basierend auf einer statistischen Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die gelernten Merkmale können einem mathematischen Modell zugeführt werden, das detektierte Merkmale auf eine Ausgabe abbilden kann. Das durch das Netz verwendete mathematische Modell ist im Allgemeinen für die spezielle durchzuführende Aufgabe spezialisiert, und andere Modelle werden verwendet, um andere Aufgaben durchzuführen.
  • Sobald das neuronale Netz strukturiert ist, kann ein Lernmodell auf das Netz angewendet werden, um das Netz dahingehend zu trainieren, spezielle Aufgaben durchzuführen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells anzupassen sind, um den Ausgabefehler des Netzes zu reduzieren. Fehlerrückpropagation ist ein übliches Verfahren zum Trainieren neuronaler Netze. Ein Eingabevektor wird dem Netz zur Verarbeitung zugeführt. Die Ausgabe des Netzes wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen, und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärts propagiert, bis jedes Neuron einen zugehörigen Fehlerwert hat, der in etwa seinen Beitrag zur ursprünglichen Ausgabe repräsentiert. Das Netz kann dann aus diesen Fehlern lernen, indem es einen Algorithmus, wie etwa den stochastischen Gradientenabstiegsalgorithmus, verwendet, um die Gewichtungen des neuronalen Netzes zu aktualisieren.
  • 9A-9B veranschaulichen ein beispielhaftes neuronales Faltungsnetz. 9A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in 9A gezeigt, kann ein beispielhaftes CNN, das zum Modellieren einer Bildverarbeitung verwendet wird, eine Eingabe 902 empfangen, die die Rot-, Grün- und Blau(RGB)-Komponenten eines Eingabebilds beschreibt. Die Eingabe 902 kann durch mehrere Faltungsschichten (z. B. Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann gegebenenfalls durch einen Satz vollständig verbundener Schichten 908 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht weisen vollständige Verbindungen mit allen Aktivierungen in der vorherigen Schicht auf, wie zuvor für ein vorwärtsgekoppeltes Netz beschrieben. Die Ausgabe von den vollständig verbundenen Schichten 908 kann dazu verwendet werden, ein Ausgabeergebnis von dem Netz zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten 908. Zum Beispiel kann in manchen Implementierungen die Faltungsschicht 906 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von der herkömmlichen Neuronalnetzkonfiguration unterscheidet, die in den vollständig verbundenen Schichten 908 zu finden ist. Herkömmliche Neuronalnetzschichten sind vollständig verbunden, sodass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstatt des jeweiligen Zustandswertes jedes der Knoten in dem Feld) in die Knoten der nachfolgenden Schicht eingegeben wird, wie veranschaulicht. Die mit den Faltungsschichten assoziierten Kerne führen Faltungsoperationen durch, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionalitätsreduzierung, die in den Faltungsschichten durchgeführt wird, ist ein Aspekt, der ermöglicht, dass das CNN zur Verarbeitung großer Bilder skaliert.
  • 9B veranschaulicht beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Eine Eingabe in eine Faltungsschicht 912 eines CNN kann in drei Stufen einer Faltungsschicht 914 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 916, eine Detektorstufe 918 und eine Pooling-Stufe 920 beinhalten. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzes kann Ausgabe-Feature-Map-Daten erzeugen oder eine Eingabe in eine vollständig verbundene Schicht bereitstellen, um beispielsweise einen Klassifizierungswert für die Eingabe in das CNN zu erzeugen.
  • In der Faltungsstufe 916 werden einige Faltungen parallel durchgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 916 kann eine affine Transformation enthalten, bei der es sich um eine beliebige Transformation handelt, die als lineare Transformation plus eine Translation angegeben werden kann. Affine Transformationen beinhalten Rotationen, Translationen, Skalierungen und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit speziellen Regionen in der Eingabe verbunden sind, die als die mit dem Neuron assoziierte lokale Region bestimmt werden können. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichtungen der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe von der Faltungsstufe 916 definiert einen Satz linearer Aktivierungen, die durch aufeinanderfolgende Stufen der Faltungsschicht 914 verarbeitet werden.
  • Die linearen Aktivierungen können durch eine Detektorstufe 918 verarbeitet werden. In der Detektorstufe 918 wird jede lineare Aktivierung durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des Gesamtnetzes, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Verschiedene Arten von nichtlinearen Aktivierungsfunktionen können verwendet werden. Eine spezielle Art ist die rektifizierte lineare Einheit (ReLU: Rectified Linear Unit), die eine Aktivierungsfunktion verwendet, die als f(x) = max (0, x) definiert ist, sodass die Aktivierung bei null begrenzt wird.
  • Die Pooling-Stufe 920 verwendet eine Pooling-Funktion, die die Ausgabe der Faltungsschicht 906 durch eine Zusammenfassungsstatistik der nahegelegenen Ausgaben ersetzt. Die Pooling-Funktion kann dazu verwendet werden, eine Translationsinvarianz in das neuronale Netz einzuführen, sodass kleine Translationen der Eingabe die gepoolten Ausgaben nicht verändern. Die Invarianz gegenüber lokaler Translation kann in Szenarien nützlich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger ist als die genaue Position des Merkmals. Während der Pooling-Stufe 920 können verschiedene Arten von Pooling-Funktionen verwendet werden, darunter Max-Pooling, MIttelwert-Pooling und L2-Norm-Pooling. Darüber hinaus beinhalten einige CNN-Implementierungen keine Pooling-Stufe. Stattdessen ersetzen solche Implementierungen eine zusätzliche Faltungsstufe, die eine erhöhte Schrittweite relativ zu vorherigen Faltungsstufen hat.
  • Die Ausgabe aus der Faltungsschicht 914 kann dann durch die nächste Schicht 922 verarbeitet werden. Die nächste Schicht 922 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 908 sein. Beispielsweise kann die erste Faltungsschicht 904 von 9A die zweite Faltungsschicht 906 ausgeben, wohingegen die zweite Faltungsschicht eine erste Schicht der vollständig verbundenen Schichten 908 ausgeben kann.
  • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz 1000. In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNNs können auf vielfältige Weise unter Verwendung einer Vielfalt von Funktionen konstruiert werden. Bei der Verwendung von RNNs geht es im Allgemeinen um die Verwendung mathematischer Modelle zur Vorhersage der Zukunft auf Grundlage einer vorherigen Sequenz von Eingaben. Ein RNN kann beispielsweise zum Durchführen einer statistischen Sprachenmodellierung verwendet werden, um ein aufkommendes Wort anhand einer vorherigen Wortfolge vorherzusagen. Das veranschaulichte RNN 100 kann so beschrieben werden, dass es eine Eingabeschicht 1002, die einen Eingabevektor empfängt, verborgene Schichten 1004 zum Implementieren einer rekurrenten Funktion, einen Rückkopplungsmechanismus 1005 zum Ermöglichen einer „Erinnerung“ von früheren Zuständen und eine Ausgabeschicht 1006 zum Ausgeben eines Ergebnisses aufweist. Das RNN 1000 arbeitet auf Grundlage von Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 1004 durch den vorherigen Zustand und die Eingabe in dem aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) in einem ersten Zeitschritt kann durch die verborgene Schicht 1004 verarbeitet werden. Eine zweite Eingabe (x2) kann durch die verborgene Schicht 1004 unter Verwendung von Zustandsinformationen, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden, verarbeitet werden. Ein gegebener Zustand kann als st=f(Uxt+Wst-1) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion ƒ ist im Allgemeinen eine Nichtlinearität, wie etwa die Tagens-Hyperbolicus-Funktion (tanh) oder eine Variante der Gleichrichterfunktion ƒ(x) = max(0, x). Die spezielle mathematische Funktion, die in den verborgenen Schichten 1004 verwendet wird, kann jedoch abhängig von den speziellen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzwerken können Variationen dieser Netze ermöglicht werden. Eine beispielhafte RNN-Variante ist das Long-Short-Term-Memory(LSTM)-RNN. LSTM-RNNs sind in der Lage, langfristige Abhängigkeiten zu lernen, die für die Verarbeitung längerer Sprachsequenzen notwendig sein können. Eine Variante des CNN ist ein faltendes Deep-Belief-Netz, das eine ähnliche Struktur wie ein CNN aufweist und ähnlich wie ein Deep-Belief-Netz trainiert wird. Ein Deep-Belief-Netzwerk (DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. DBNs können Schicht für Schicht mittels unüberwachtem Lernen mit Greedy-Ansatz trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um neuronale Vortrainings-Netze bereitzustellen, indem ein optimaler Anfangssatz von Gewichtungen für das neuronale Netz bestimmt wird.
  • 11 veranschaulicht Training und Einsatz eines tiefen neuronalen Netzes. Sobald ein gegebenes Netz für eine Aufgabe strukturiert wurde, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes 1102 trainiert. Verschiedene Trainings-Frameworks 1104 wurden entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Maschinenlern-Framework 604 von 6 als ein Trainings-Framework 604 konfiguriert sein. Das Trainings-Framework 604 kann in ein untrainiertes neuronales Netz 1106 einhaken und das untrainierte neuronale Netz befähigen, unter Verwendung der hier beschriebenen Parallelverarbeitungsressourcen trainiert zu werden, um ein trainiertes neuronales Netz 1108 zu erzeugen.
  • Um den Trainingsprozess zu beginnen, können die Anfangsgewichtungen zufällig oder durch Vortraining unter Verwendung eines Deep-Belief-Netzes gewählt werden. Der Trainingszyklus kann dann entweder auf überwachte oder auf unüberwachte Weise durchgeführt werden.
  • Überwachtes Lernen ist eine Lernmethode, bei der das Training als vermittelte Operation durchgeführt wird, z. B. wenn der Trainingsdatensatz 1102 Eingaben enthält, die mit der gewünschten Ausgabe für die Eingabe gepaart sind, oder wenn der Trainingsdatensatz Eingaben mit bekannter Ausgabe enthält und die Ausgabe des neuronalen Netzes manuell bewertet wird. Das Netz verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. Fehler werden dann durch das System zurück propagiert. Das Trainings-Framework 1104 kann sich anpassen, um die Gewichtungen anzupassen, die das untrainierte neuronale Netz 1106 steuern. Das Trainings-Framework 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 1106 zu einem Modell hin konvergiert, das zum Erzeugen korrekter Antworten auf der Grundlage bekannter Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, während die Gewichtungen des Netzes angepasst werden, um die durch das neuronale Netz erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine mit einem trainierten neuronalen Netz 1108 assoziierte statistisch gewünschte Genauigkeit erreicht. Das trainierte neuronale Netz 1108 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren, um auf der Grundlage einer Eingabe von neuen Daten 1112 ein Inferenzergebnis 1114 zu erzeugen.
  • Unüberwachtes Lernen ist eine Lernmethode, bei der das Netz versucht, sich selbst unter Verwendung nicht gekennzeichneter Daten zu trainieren. Somit wird der Trainingsdatensatz 1102 für unüberwachtes Lernen Eingabedaten ohne jegliche assoziierte Ausgabedaten enthalten. Das untrainierte neuronale Netz 1106 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe lernen und kann bestimmen, wie einzelne Eingaben mit dem gesamten Datensatz in Zusammenhang stehen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Map zu erzeugen, die eine Art trainiertes neuronales Netz 1108 ist, das in der Lage ist, Operationen durchzuführen, die nützlich sind, um die Dimensionalität von Daten zu reduzieren. Unüberwachtes Training kann auch verwendet werden, um eine Anomaliedetektion auszuführen, die die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Es können auch Variationen von überwachtem und unüberwachtem Training eingesetzt werden. Semi-überwachtes Lernen ist eine Technik, bei der der Trainingsdatensatz 1102 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten mit gleicher Verteilung beinhaltet. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der die Eingabedaten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht, dass sich das trainierte neuronale Netz 1108 an die neuen Daten 1112 anpasst, ohne das Wissen zu vergessen, das dem Netz bei einem anfänglichen Training vermittelt wurde.
  • Unabhängig davon, ob er überwacht oder unüberwacht ist, kann der Trainingsprozess für besonders tiefe neuronale Netze für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstatt einen einzelnen Rechenknoten zu verwenden, kann ein verteiltes Netzwerk von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 12 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um überwachtes oder unüberwachtes Training eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Hostprozessoren und einen oder mehrere der Allzweck-Verarbeitungsknoten umfassen, wie etwa die hochparallele Allzweck-Grafikverarbeitungseinheit 700 wie in 7. Wie veranschaulicht, kann verteiltes Lernen als Modellparallelität 1202, Datenparallelität 1204 oder eine Kombination von Modell- und Datenparallelität 1204 durchgeführt werden.
  • Bei der Modellparallelität 1202 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzes durchführen. Zum Beispiel kann jede Schicht eines neuronalen Netzes durch einen anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen von Modellparallelität gehört die Fähigkeit, auf besonders große Modelle zu skalieren. Die Aufteilung der Berechnungen, die mit verschiedenen Schichten des neuronalen Netzes assoziiert sind, ermöglicht das Trainieren von sehr großen neuronalen Netzen, bei denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. Bei manchen Fällen kann die Modellparallelität besonders nützlich sein, um ein unüberwachtes Training großer neuronaler Netze durchzuführen.
  • Bei der Datenparallelität 1204 weisen die verschiedenen Knoten des verteilten Netzes eine vollständige Instanz des Modells auf, und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse von den verschiedenen Knoten werden dann kombiniert. Obgleich verschiedene Ansätze zur Datenparallelität möglich sind, erfordern alle Ansätze für datenparalleles Training eine Technik zur Kombination von Ergebnissen und zur Synchronisierung der Modellparameter zwischen den einzelnen Knoten. Zu beispielhaften Ansätzen zum Kombinieren von Daten gehören Parametermittelwertbildung und aktualisierungsbasierte Datenparallelität. Die Parametermittelwertbildung trainiert jeden Knoten an einem Teilsatz der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichtungen, Biases) auf den Mittelwert der Parameter von jedem Knoten. Die Parametermittelwertbildung verwendet einen zentralen Parameterserver, der die Parameterdaten verwaltet. Die aktualisierungsbasierte Datenparallelität ist der Parametermittelwertbildung ähnlich, außer dass die Aktualisierungen an die Modelle übertragen werden, statt Parameter von den Knoten an den Parameterserver zu übertragen. Zudem kann die aktualisierungsbasierte Datenparallelität dezentral durchgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Die kombinierte Modell- und Datenparallelität 1206 kann beispielsweise in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs beinhaltet. Jeder Knoten kann eine vollständige Instanz des Modells aufweisen, wobei separate GPUs innerhalb jedes Knotens dazu verwendet werden, verschiedene Teile des Modells zu trainieren.
  • Verteiltes Training hat einen erhöhten Overhead im Vergleich zum Training auf einer einzelnen Maschine. Die hier beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainings zu reduzieren, darunter Techniken zum Ermöglichen einer GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und einer beschleunigten Ferndatensynchronisation.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinelles Lernen kann zur Lösung einer Vielzahl von technologischen Problemen eingesetzt werden, darunter unter anderem Computer-Vision, autonomes Fahren und Navigation, Spracherkennung und Sprachenverarbeitung. Computer-Vision ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen von Computer-Vision reichen von der Reproduktion menschlicher visueller Fähigkeiten, wie etwa dem Erkennen von Gesichtern, bis hin zur Schaffung neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Computer-Vision-Anwendungen dazu ausgelegt sein, Schallwellen aus den Vibrationen, die in den in einem Video sichtbaren Objekten induziert werden, zu erkennen. Parallelprozessor-beschleunigtes maschinelles Lernen ermöglicht es, Computer-Vision-Anwendungen unter Verwendung wesentlich größerer Trainingsdatensätze zu trainieren, als dies bisher möglich war, und ermöglicht es, Inferenzsysteme unter Verwendung von NiederleistungsParallelprozessoren einzusetzen.
  • Parallelprozessor-beschleunigtes maschinelles Lernen hat Anwendungen für autonomes Fahren, einschließlich Fahrspur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrkontrolle. Beschleunigte Maschinenlerntechniken können zum Trainieren von Fahrmodellen auf der Grundlage von Datensätzen verwendet werden, die die entsprechenden Reaktionen auf bestimmte Trainingseingaben definieren. Die vorliegend beschriebenen Parallelprozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netze ermöglichen, die für Lösungen zum autonomen Fahren verwendet werden, und ermöglichen den Einsatz von Niederleistungs-Inferenzprozessoren in einer mobilen Plattform, die zur Integration in autonome Fahrzeuge geeignet ist.
  • Parallelprozessor-beschleunigte tiefe neuronale Netze haben Maschinenlernansätze für die automatische Spracherkennung (ASR: Automatic Speech Recognition) ermöglicht. ASR beinhaltet die Erstellung einer Funktion, die die wahrscheinlichste sprachliche Sequenz angesichts einer akustischen Eingabesequenz berechnet. Beschleunigtes maschinelles Lernen unter Verwendung tiefer neuronaler Netze hat es ermöglicht, die bisher für ASR verwendeten Hidden-Markov-Modelle (HMMs) und Gaußschen Mischmodelle (GMMs) zu ersetzen.
  • Parallelprozessor-beschleunigtes maschinelles Lernen kann auch zur Beschleunigung der Verarbeitung natürlicher Sprache verwendet werden. Automatische Lernverfahren können statistische Inferenzalgorithmen nutzen, um Modelle zu erzeugen, die robust gegenüber fehlerhaften oder ungewohnten Eingaben sind. Zu beispielhaften Anwendungen für Natürliche-Sprachen-Prozessoren gehört die automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
  • Die für maschinelles Lernen verwendeten Parallelverarbeitungsplattformen können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hochparallel und beinhalten Optimierungen zur Beschleunigung von Multi-GPU-Einzelknoten-Training und Multi-Knoten-Multi-GPU-Training. Zu beispielhaften Parallelprozessoren, die sich für das Training eignen, gehören die Allzweck-Grafikverarbeitungseinheit 700 von 7 und das Multi-GPU-Rechensystem 800 von Figur 800. Eingesetzte Maschinenlernpattformen beinhalten dagegen im Allgemeinen Niederleistungsparallelprozessoren, die zur Verwendung in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 13 veranschaulicht ein beispielhaftes Inferenzfindungssystem auf einem Chip (SOC) 1300, das zur Durchführung von Inferenzfindung unter Verwendung eines trainierten Modells geeignet ist. Das SOC 1300 kann Verarbeitungskomponenten integrieren, die einen Medienprozessor 1302, einen Vision-Prozessor 1304, eine GPGPU 1306 und einen Mehrkernprozessor 1308 beinhalten. Die GPGPU 1306 kann eine hierin beschriebene GPGPU sein, wie etwa die GPGPU 700, und der Mehrkernprozessor 1308 kann ein hierin beschriebener Mehrkernprozessor sein, wie etwa die Mehrkernprozessoren 405 - 406. Das SOC 1300 kann zusätzlich einen On-Chip-Speicher 1305 beinhalten, der einen gemeinsam genutzten On-Chip-Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für einen Niederleistungsbetrieb optimiert werden, um den Einsatz in einer Vielzahl von Maschinenlernplattformen zu ermöglichen, einschließlich autonomer Fahrzeuge und autonomer Roboter. Eine Implementierung des SOC 1300 kann zum Beispiel als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 1300 zur Verwendung in autonomen Fahrzeugen ausgestaltet ist, ist das SOC dahingehend ausgelegt und konfiguriert, die relevanten Standards funktionaler Sicherheit des Einsatzlandes zu erfüllen.
  • Während des Betriebs können der Medienprozessor 1302 und der Vision-Prozessor 1304 zusammenarbeiten, um Computer-Vision-Operationen zu beschleunigen. Der Medienprozessor 1302 kann Niederlatenz-Decodierung mehrerer hochauflösender Videoströme (z. B. 4K, 8K) ermöglichen. Die decodierten Videoströme können in einen Puffer in dem On-Chip-Speicher 1305 geschrieben werden. Der Vision-Prozessor 1304 kann dann das decodierte Video parsen und vorläufige Verarbeitungsoperationen an den Frames des decodierten Videos als Vorbereitung für Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells durchführen. Beispielsweise kann der Vision-Prozessor 1304 die Faltungsoperationen für ein CNN beschleunigen, das zur Durchführung von Bilderkennung an den hochauflösenden Videodaten verwendet wird, während die Backend-Modellberechnungen durch die GPGPU 1306 durchgeführt werden.
  • Der Mehrkernprozessor 1308 kann Steuerlogik zum Helfen beim Sequenzieren und bei Synchronisation von Datenübertragungen und Operationen an gemeinsam genutztem Speicher, die durch den Medienprozessor 1302 und den Vision-Prozessor 1304 durchgeführt werden, beinhalten. Der Mehrkernprozessor 1308 kann zudem als ein Anwendungsprozessor fungieren, um Softwareanwendungen auszuführen, die die Inferenzrechenfähigkeit der GPGPU 1306 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Mehrkernprozessor 1308 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPU 1306 ausgeben oder die Rechenarbeitslasten können an den Mehrkernprozessor 1308 ausgegeben werden, der zumindest einen Teil dieser Operationen auf die GPU 1306 auslagern kann.
  • Die GPGPU 1306 kann Rechencluster beinhalten, wie etwa eine Niederleistungsausgestaltung der Verarbeitungscluster 706A-706H innerhalb einer Allzweck-Grafikverarbeitungseinheit 700. Die Rechencluster innerhalb der GPGPU 1306 können Anweisungen unterstützen, die spezifisch zur Durchführung von Inferenzberechnungen in einem trainierten neuronalen Netz optimiert sind. Die GPGPU 1306 kann beispielsweise Anweisungen zur Durchführung von Berechnungen mit geringer Präzision wie 8-Bit- und 4-Bit-Ganzzahl-Vektoroperationen unterstützen.
  • Zusätzliche Systemübersicht
  • 14 ist ein Blockdiagramm eines Verarbeitungssystems 1400. Die Elemente von 14 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Das System 1400 kann in einem Einzelprozessor-Desktop-System, einem Multiprozessor-Workstation-System oder einem Serversystem mit einer großen Anzahl von Prozessoren 1402 oder Prozessorkernen 1407 verwendet werden. Das System 1400 kann eine Verarbeitungsplattform sein, die innerhalb einer integrierten System-on-Chip(SoC)-Schaltung zur Verwendung in mobilen, handgehaltenen oder eingebetteten Vorrichtungen, wie etwa innerhalb von Internet-der-Dinge(IoT)-Vorrichtungen mit drahtgebundener oder drahtloser Konnektivität zu einem Lokal- oder Weitbereichsnetzwerk, integriert ist.
  • Das System 1400 kann ein Verarbeitungssystem mit Komponenten sein, die denen von 1 entsprechen. Beispielsweise können in unterschiedlichen Ausgestaltungen Prozessor(en) 1402 oder Prozessorkern(e) 1407 dem einen bzw. den mehreren Prozessoren 102 von 1 entsprechen. Der eine bzw. die mehreren Grafikprozessoren 1408 können dem einen bzw. den mehreren Parallelprozessoren 112 von 1 entsprechen. Der externe Grafikprozessor 1418 kann eine der Add-In-Vorrichtungen 120 von 1 sein.
  • Das System 1400 kann eine serverbasierte Gaming-Plattform; eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole; eine Mobile-Gaming-Konsole, eine handgehaltene Spielkonsole oder eine Onlinespielkonsole beinhalten, mit dieser gekoppelt oder darin integriert sein. Das System 1400 kann Teil eines Mobiltelefons, Smartphones, einer Tablet-Rechenvorrichtung oder einer mobilen internetverbundenen Vorrichtung sein, wie etwa eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 1400 kann auch Folgendes beinhalten, damit gekoppelt oder darin integriert sein: eine Wearable-Vorrichtung, wie etwa eine Smartwatch-Wearable-Vorrichtung; eine Smart-Brille oder Smart-Kleidung, erweitert mit Augmented-Reality(AR)- oder Virtual-Reality(VR)-Merkmalen, um visuelle, auditive oder taktile Ausgaben bereitzustellen, um visuelle, auditive oder taktile reelle Erfahrungen zu ergänzen oder anderweitig Text, Audio, Grafiken, Video, holografische Bilder oder Video oder taktiles Feedback bereitzustellen; eine andere Augmented-Reality(AR)-Vorrichtung; oder eine andere Virtual-Reality(VR)-Vorrichtung. Das Verarbeitungssystem 1400 kann ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung beinhalten oder ein Teil davon sein. Das System 1400 kann ein selbstfahrendes Fahrzeug, wie etwa einen Bus, einen Traktoranhänger, ein Auto, ein Motorrad oder E-Bike, ein Flugzeug oder Segelflugzeug (oder eine beliebige Kombination davon) beinhalten, damit gekoppelt oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 1400 zur Verarbeitung der um das Fahrzeug herum erfassten Umgebung verwenden.
  • Der eine oder die mehreren Prozessoren 1402 können einen oder mehrere Prozessorkerne 1407 beinhalten, um Anweisungen zu verarbeiten, die dann, wenn sie ausgeführt werden, Operationen für System- und Anwender-Software durchführen. Der mindestens eine des einen oder der mehreren Prozessorkerne 1407 kann dazu konfiguriert sein, einen spezifischen Anweisungssatz 1409 zu verarbeiten. Der Anweisungssatz 1409 kann Berechnungen mit komplexem Anweisungssatz (CISC), Berechnungen mit reduziertem Anweisungssatz (RISC) oder Berechnungen über ein sehr langes Befehlswort (VLIW) unterstützen. Ein oder mehrere Prozessorkerne 1407 können einen unterschiedlichen Anweisungssatz 1409 verarbeiten, der Anweisungen enthalten kann, um die Emulation anderer Anweisungssätze zu unterstützen. Der Prozessorkern 1407 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen digitalen Signalprozessor (DSP).
  • Der Prozessor 1402 kann einen Cachespeicher 1404 beinhalten. In Abhängigkeit von der Architektur kann der Prozessor 1402 einen einzigen internen Cache oder mehrere Ebenen von internem Cache aufweisen. Bei manchen Ausführungsformen wird der Cachespeicher durch verschiedene Komponenten des Prozessors 1402 gemeinsam genutzt. Bei manchen Ausführungsformen verwendet der Prozessor 1402 auch einen externen Cache (z. B. einen Level-3(L3)-Cache oder einen Cache der letzten Ebene (LLC)) (nicht gezeigt), der durch Prozessorkerne 1407 unter Verwendung bekannter Cachekohärenztechniken gemeinsam genutzt wird. Eine Registerbank 1406 kann zusätzlich in dem Prozessor 1402 enthalten sein und kann verschiedene Arten von Registern zum Speichern verschiedener Arten von Daten beinhalten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister). Manche Register können Mehrzweckregister sein, während andere Register speziell für die Gestaltung des Prozessors 1402 sein können.
  • Der eine oder die mehreren Prozessoren 1402 können mit einem oder mehreren Schnittstellenbussen 1410 zum Übertragen von Kommunikationssignalen, wie etwa Adress-, Daten- oder Steuersignalen, zwischen dem Prozessor 1402 und anderen Komponenten in dem System 1400 gekoppelt sein. Der Schnittstellenbus 1410 kann bei einer dieser Ausführungsformen ein Prozessorbus sein, wie etwa eine Version des DMI-Busses (DMI: Direct Media Interface - direkte Medienschnittstelle). Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheral-Component-Interconnect-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. Beispielsweise können der eine oder die mehreren Prozessoren 1402 eine integrierte Speichersteuerung 1416 und einen Plattformsteuerungshub 1430 beinhalten. Die Speichersteuerung 1416 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 1400, während der Plattformsteuerungshub (PCH: Plattform Controller Hub) 1430 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 1420 kann eine Dynamischer-Direktzugriffsspeicher(DRAM)-Vorrichtung, eine Statischer-Direktzugriffsspeicher(SRAM)-Vorrichtung, eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder eine andere Speichervorrichtung sein, die eine geeignete Leistungsfähigkeit aufweist, um als ein Prozessspeicher zu dienen. Die Speichervorrichtung 1420 kann beispielsweise als ein Systemspeicher für das System 1400 arbeiten, um Daten 1422 und Anweisungen 1421 für eine Verwendung bei Ausführung einer Anwendung oder eines Prozesses durch den einen oder die mehreren Prozessoren 1402 zu speichern. Die Speichersteuerung 1416 ist auch mit einem optionalen externen Grafikprozessor 1418 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 1408 in den Prozessoren 1402 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. Bei manchenn Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 1412 unterstützt werden, der ein Coprozessor ist, der dazu ausgelegt sein kann, einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Beispielsweise kann der Beschleuniger 1412 ein Matrixmultiplikationsbeschleuniger sein, der verwendet wird, um Maschinenlern-oder Rechenoperationen zu optimieren. Der Beschleuniger 1412 kann ein Strahlverfolgungsbeschleuniger sein, der verwendet werden kann, um Strahlverfolgungsoperationen zusammen mit dem Grafikprozessor 1408 durchzuführen. Bei einer Ausführungsform kann ein externer Beschleuniger 1419 anstelle des Beschleunigers 1412 oder zusammen mit diesem verwendet werden.
  • Eine Anzeigevorrichtung 1411 kann vorgesehen sein, die mit dem einen oder den mehreren Prozessoren 1402 verbunden sein kann. Die Anzeigevorrichtung 1411 kann eine interne Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung, und/oder eine externe Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. Die Anzeigevorrichtung 1411 kann eine am Kopf befestigte Anzeige (HMD: Head Mounted Display) sein, wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung bei Virtual-Reality(VR)-Anwendungen oder Augmented-Reality(AR)-Anwendungen.
  • Der Plattformsteuerungshub 1430 kann die Verbindung von Peripheriegeräten mit einer Speichervorrichtung 1420 und einemProzessor 1402 über einen Hochgeschwindigkeits-E/A-Bus ermöglichen. Die E/A-Peripheriegeräte beinhalten unter anderem: einen Audiocontroller 1446, einen Netzwerkcontroller 1434, eine Firmware-Schnittstelle 1428, einen drahtlosen Sendeempfänger 1426, Berührungssensoren 1425, eine Datenspeicherungsvorrichtung 1424 (z. B. nichtflüchtiger Speicher, flüchtiger Speicher, Festplattenlaufwerk, Flash-Speicher, NAND, 3D NAND, 3D XPoint usw.). Die Datenspeicherungsvorrichtung 1424 kann über eine Speicherungsschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI Express), verbunden sein. Die Berührungssensoren 1425 können Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren einschließen. Der drahtlose Sendeempfänger 1426 kann ein WiFi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilnetz-Sendeempfänger sein, wie etwa ein 3G-, 4G-, 5G- oder Long-Term-Evolution(LTE)-Sendeempfänger. Die Firmwareschnittstelle 1428 ermöglicht die Kommunikation mit Systemfirmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmwareschnittstelle (UEFI: Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 1434 kann eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. Bei manchen Ausführungsformen ist eine Hochleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 1410 gekoppelt. Die Audiosteuerung 1446 kann eine Mehrkanal-High-Definition-Audiosteuerung sein. In einigen dieser Ausführungsformen beinhaltet das System 1400 eine optionale Legacy-E/A-Steuerung 1440 zum Koppeln von Legacy(z. B. Personal System 2 (PS/2))-Vorrichtungen mit dem System. Der Plattformsteuerungshub 1430 kann auch mit einer oder mehreren USB(Universal-Serial-Bus)-Steuerungen 1442 verbunden sein, welche Eingabevorrichtungen, wie etwa Kombinationen aus Tastatur und Maus 1443, eine Kamera 1444 oder andere USB-Eingabevorrichtungen, verbinden.
  • Es versteht sich, dass das gezeigte System 1400 beispielhaft und nicht beschränkend ist, da andere Arten von Datenverarbeitungssystemen, die anders ausgestaltet sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz der Speichersteuerung 1416 und des Plattformsteuerungshubs 1430 in einen diskreten externen Grafikprozessor, wie etwa den externen Grafikprozessor 1418, integriert sein. Der Plattformsteuerungshub 1430 und/oder die Speichersteuerung 1416 können extern zu dem einen oder den mehreren Prozessoren 1402 sein. Zum Beispiel kann das System 1400 eine externe Speichersteuerung 1416 und einen Plattformsteuerungshub 1430 beinhalten, die als ein Speichersteuerungshub und ein Peripheriesteuerungshub innerhalb eines Systemchipsatzes, der mit dem/den Prozessor(en) 1402 in Kommunikation steht, ausgestaltet sein können.
  • Zum Beispiel können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten, wie etwa CPUs, Speicher und andere Komponenten, platziert sind, die für eine erhöhte thermische Leistungsfähigkeit gestaltet sind. Verarbeitungskomponenten, wie etwa die Prozessoren, können sich auf einer Oberseite eines Schlittens befinden, während sich Nahspeicher, wie etwa DIMMs, auf einer Unterseite des Schlittens befinden. Infolge des verbesserten Luftstroms, der durch diese Gestaltung bereitgestellt wird, können die Komponenten mit höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistungsfähigkeit erhöht wird. Des Weiteren sind die Schlitten dazu ausgestaltet, blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammenzupassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, wieder installiert und/oder ersetzt zu werden. Gleichermaßen sind individuelle auf den Schlitten befindliche Komponenten wie Prozessoren, Beschleuniger, Speicher und Datenspeicherungslaufwerke so ausgestaltet, dass sie sich dank ihrer größeren Beabstandung zueinander leicht aufrüsten lassen. In der veranschaulichenden Ausführungsform beinhalten die Komponenten zusätzlich Hardwareattestierungsmerkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzige Netzwerkarchitektur („Fabric“) nutzen, die mehrere andere Netzwerkarchitekturen unterstützt, darunter Ethernet und Omni-Path. Die Schlitten können über Glasfasern mit Switches gekoppelt werden, die eine höhere Bandbreite und geringere Latenz bieten als typische Twisted-Pair-Kabel (z.B. Kategorie 5, Kategorie 5e, Kategorie 6, usw.). Aufgrund der Interconnections mit hoher Bandbreite und niedriger Latenz und der Netzwerkarchitektur kann das Datenzentrum im Gebrauch Ressourcen, wie etwa Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Neuronalnetz- und/oder Künstliche-Intelligenz-Beschleuniger usw.) und Datenspeicherungslaufwerke, die physisch getrennt sind, zusammenschließen und sie Rechenressourcen (z. B. Prozessoren) nach Bedarf bereitstellen, wodurch ermöglicht wird, dass die Rechenressourcen auf die zusammengeschlossenen Ressourcen zugreifen, als wären sie lokal.
  • Eine Leistungsversorgung oder -quelle kann Spannung und/oder Strom an das System 1400 oder eine beliebige Komponente oder ein beliebiges System, die/das hierin beschrieben wird, liefern. In einem Beispiel beinhaltet die Leistungsversorgung einen AC/DC(Wechselstrom-zu-Gleichstrom)-Adapter zum Einstecken in eine Steckdose. Eine solche AC-Leistungsquelle kann eine Leistungsquelle mit erneuerbarer Energie (z. B. Solarenergie) sein. In einem Beispiel beinhaltet die Leistungsquelle eine DC-Leistungsquelle, wie etwa einen externen AC-DC-Wandler. Eine Leistungsquelle oder Leistungsversorgung kann auch Drahtlosladehardware zum Laden über die Nähe zu einem Ladefeld beinhalten. Die Leistungsquelle kann eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarenergieversorgung oder eine Brennstoffzellenquelle beinhalten.
  • 15A-15C veranschaulichen Rechensysteme und Grafikprozessoren. Die Elemente von 15A-15C mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 15A ist ein Blockdiagramm eines Prozessors 1500, der eine Variante eines der Prozessoren 1402 sein kann und anstelle eines dieser verwendet werden kann. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Prozessor 1500 hierin auch eine entsprechende Kombination mit dem einen oder den mehreren Prozessoren 1402, ist aber nicht darauf beschränkt. Der Prozessor 1500 kann einen oder mehrere Prozessorkerne 1502A-1502N, eine integrierte Speichersteuerung 1514 und einen integrierten Grafikprozessor 1508 aufweisen. Wenn ein integrierter Grafikprozessor 1508 ausgeschlossen ist, enthält das System, das den Prozessor enthält, eine Grafikprozessorvorrichtung innerhalb eines Systemchipsatzes oder ist über einen Systembus gekoppelt. Der Prozessor 1500 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 1502N enthalten, der durch die gestrichelten Kästen repräsentiert ist. Jeder der Prozessorkerne 1502A-1502N beinhaltet eine oder mehrere interne Cacheeinheiten 1504A-1504N. In einigen Ausführungsformen weist jeder Prozessorkern 1502A - 1502N auch Zugriff auf eine oder mehrere gemeinsam genutzte Cacheeinheiten 1506 auf. Die internen Cacheeinheiten 1504A-1504N und die gemeinsam genutzten Cacheeinheiten 1506 repräsentieren eine Cachespeicherhierarchie innerhalb des Prozessors 1500. Die Cachespeicherhierarchie kann mindestens eine Ebene („Level“) von Anweisungs- und Datencache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Mid-Level-Cache, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cacheebenen beinhalten, wobei die höchste Cacheebene vor dem externen Speicher als LLC klassifiziert wird. In einigen Ausführungsformen bewahrt eine Cachekohärenzlogik die Kohärenz zwischen den verschiedenen Cacheeinheiten 1506 und 1504A-1504N.
  • Der Prozessor 1500 kann zudem einen Satz aus einer oder mehreren Bussteuerungseinheiten 1516 und einen Systemagentenkern 1510 beinhalten. Die eine oder die mehreren Bussteuerungseinheiten 1516 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 1510 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. Der Systemagentenkern 1510 kann eine oder mehrere integrierte Speichersteuerungen 1514 beinhalten, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • Beispielsweise beinhalten einer oder mehrere der Prozessorkerne 1502A-1502N eine Unterstützung für simultanes Multithreading. Der Systemagentenkern 1510 beinhaltet Komponenten zum Koordinieren und Betreiben der Kerne 1502A-1502N während der Multithreading-Verarbeitung. Der Systemagentenkern 1510 kann zusätzlich eine Leistungssteuereinheit (Power Control Unit, PCU) beinhalten, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 1502A-1502N und des Grafikprozessors 1508 beinhaltet.
  • Der Prozessor 1500 kann zusätzlich einen Grafikprozessor 1508 zum Ausführen von Grafikverarbeitungsoperationen beinhalten. In einigen dieser Ausführungsformen ist der Grafikprozessor 1508 mit dem Satz von gemeinsam genutzten Cacheeinheiten 1506 und dem Systemagentenkern 1510 gekoppelt, einschließlich der einen oder der mehreren integrierten Speichersteuerungen 1514. Der Systemagentenkern 1510 kann auch eine Anzeigesteuerung 1511 zum Ansteuern einer Grafikprozessorausgabe für eine oder mehrere gekoppelte Anzeigen beinhalten. Die Anzeigesteuerung 1511 kann auch ein separates Modul sein, das über mindestens ein Interconnect mit dem Grafikprozessor gekoppelt ist, oder kann in den Grafikprozessor 1508 integriert sein.
  • Eine ringbasierte Interconnect-Einheit 1512 kann verwendet werden, um die internen Komponenten des Prozessors 1500 zu koppeln. Es kann jedoch auch eine alternative Interconnect-Einheit verwendet werden, wie etwa ein Punkt-zu-Punkt-Interconnect, ein geschaltetes Interconnect oder andere Techniken, einschließlich im Stand der Technik bestens bekannter Techniken. In einigen dieser Ausführungsformen mit einem ringbasierten Interconnect 1512 ist der Grafikprozessor 1508 mit dem ringbasierten Interconnect 1512 über einen E/A-Link 1513 gekoppelt.
  • Der beispielhafte E/A-Link 1513 repräsentiert mindestens eine von mehreren Arten von E/A-Interconnects, einschließlich eines On-Package-E/A-Interconnects, das die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1518, wie etwa einem eDRAM-Modul, ermöglicht. Optional können jeder der Prozessorkerne 1502A - 1502N und der Grafikprozessor 1508 eingebettete Speichermodule 1518 als einen gemeinsam genutzten Last-Level-Cache verwenden.
  • Die Prozessorkerne 1502A - 1502N können beispielsweise homogene Kerne sein, die dieselbe Anweisungssatzarchitektur ausführen. Alternativ sind die Prozessorkerne 1502A-1502N hinsichtlich der Anweisungssatzarchitektur (ISA: Instruction Set Architecture) heterogen, wobei einer oder mehrere der Prozessorkerne 1502A-1502N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. Die Prozessorkerne 1502A-1502N können in Bezug auf die Mikroarchitektur heterogen sein, wobei ein oder mehrere Kerne mit einem relativ höheren Leistungsverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Leistungsverbrauch gekoppelt sind. Als weiteres Beispiel sind die Prozessorkerne 1502A - 1502N hinsichtlich der Rechenfähigkeit heterogen. Außerdem kann der Prozessor 1500 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den veranschaulichten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 15B ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns 1519 gemäß einigen hierin beschriebenen Ausführungsformen. Der Grafikprozessorkern 1519, der mitunter als Kern-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 1519 ist beispielhaft für ein Grafikkern-Slice, und ein Grafikprozessor, wie hierin beschrieben, kann mehrere Grafikkern-Slices auf der Grundlage von Zielleistungs- und Leistungsverhaltenshüllkurven beinhalten. Jeder Grafikprozessorkern 1519 kann einen Festfunktionsblock 1530 beinhalten, der mit mehreren Unterkernen 1521A-1521F, auch als Unter-Slices bezeichnet, die modulare Blöcke von Allzweck- und Festfunktionslogik beinhalten, gekoppelt ist.
  • Der Festfunktionsblock 1530 kann eine Geometrie-/Festfunktions-Pipeline 1531 beinhalten, die durch alle Unterkerne in dem Grafikprozessorkern 1519 gemeinsam genutzt werden kann, zum Beispiel bei Grafikprozessorimplementierungen mit geringerer Leistungsfähigkeit und/oder geringerer Leistung. Die Geometrie-/Festfunktions-Pipeline 1531 kann eine 3D-Festfunktions-Pipeline (z. B. 3D-Pipeline 1612 wie in der nachstehend beschriebenen 16A), eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen Vereinheitlichter-Rückgabepuffer-Manager, der vereinheitlichte Rückgabepuffer verwaltet (z. B. den vereinheitlichten Rückgabepuffer 1718 von 17, wie nachstehend beschrieben) beinhalten.
  • Der Festfunktionsblock 1530 kann auch eine Grafik-SoC-Schnittstelle 1532, einen Grafik-Mikrocontroller 1533 und eine Medien-Pipeline 1534 beinhalten. Die Grafik-SoC-Schnittstelle 1532 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 1519 und anderen Prozessorkernen innerhalb einer integrierten System-auf-Chip-Schaltung bereit. Der Grafik-Mikrocontroller 1533 ist ein programmierbarer Subprozessor, der dazu konfigurierbar ist, verschiedene Funktionen des Grafikprozessorkerns 1519 zu verwalten, einschließlich Thread-Dispatch, Scheduling und Präemption. Die Medien-Pipeline 1534 (z. B. die Medien-Pipeline 1616 von 16A und 17) beinhaltet eine Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, zu ermöglichen. Die Medien-Pipeline 1534 implementiert Medienoperationen über Anfragen zum Berechnen oder Sampeln einer Logik innerhalb der Unterkerne 1521-1521F.
  • Die SoC-Schnittstelle 1532 kann dem Grafikprozessorkern 1519 die Kommunikation mit Prozessorkernen für Allzweckanwendungen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC ermöglichen, darunter Speicherhierarchieelemente wie etwa ein gemeinsam genutzter Last-Level-Cachespeicher, der System-RAM und/oder eingebetteter On-Chip- oder On-Package-DRAM. Die SoC-Schnittstelle 1532 kann auch die Kommunikation mit Festfunktionseinrichtungen innerhalb des SoC ermöglichen, wie etwa Kamerabildgebungs-Pipelines, und ermöglicht die Verwendung von und/oder implementiert globale Speicher-Atome, die zwischen dem Grafikprozessorkern 1519 und CPUs innerhalb des SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 1532 kann zudem Energieverwaltungssteuerungen für den Grafikprozessorkern 1519 implementieren und eine Schnittstelle zwischen einem Taktbereich des Grafikkerns 1519 und anderen Taktbereichen innerhalb des SoC ermöglichen. Optional ermöglicht die SoC-Schnittstelle 1532 den Empfang von Befehlspuffern von einem Befehls-Streamer und globalen Thread-Dispatcher, die dafür konfiguriert sind, Befehle und Anweisungen an jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können an die Medien-Pipeline 1534 geschickt werden, wenn Medienoperationen durchgeführt werden sollen, oder an eine Geometrie- und Festfunktions-Pipeline (z. B. Geometrie- und Festfunktions-Pipeline 1531, Geometrie- und Festfunktions-Pipeline 1537), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen.
  • Der Grafik-Mikrocontroller 1533 kann dafür konfiguriert sein, verschiedene Scheduling- und Verwaltungsaufgaben für den Grafikprozessorkern 1519 durchzuführen. Bei einer Konfiguration kann der Grafik-Mikrocontroller 1533 beispielsweise Grafik- und/oder Rechenlast-Scheduling auf den verschiedenen Parallel-Grafik-Engines innerhalb der Arrays 1522A-1522F, 1524A-1524F der Ausführungseinheiten (EU) innerhalb der Unterkerne 1521A-1521F durchführen. Bei diesem Arbeitslast-Scheduling kann eine Hostsoftware, die auf einem CPU-Kern eines den Grafikprozessorkern 1519 beinhaltenden SoC ausgeführt wird, Arbeitslasten einer von mehreren Grafikprozessor-Doorbells liefern, was eine Scheduling-Operation auf der entsprechenden Grafik-Engine aktiviert. Zu Scheduling-Operationen zählen Bestimmen, welche Arbeitslast als nächstes ausgeführt werden soll, Liefern einer Arbeitslast an einen Befehls-Streamer, Präemptieren bestehender Arbeitslasten, die auf einer Engine ausgeführt werden, Überwachen des Fortschritts einer Arbeitslast und Benachrichtigen einer Hostsoftware, wenn eine Arbeitslast abgeschlossen ist. Optional kann der Grafik-Mikrocontroller 1533 auch Niederleistungs- oder Leerlaufzustände für den Grafikprozessorkern 1519 ermöglichen, indem er dem Grafikprozessorkern 1519 die Möglichkeit gibt, Register innerhalb des Grafikprozessorkerns 1519 über Niederleistungszustandsübergänge hinweg unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 1519 kann mehr als oder weniger als die veranschaulichten Unterkerne 1521A-1521F aufweisen, bis zu N modulare Unterkerne. Für jeden Satz aus N Unterkernen kann der Grafikprozessorkern 1519 auch eine Logik 1535 mit gemeinsam genutzter Funktion, einen gemeinsam genutzten Speicher und/oder Cachespeicher 1536, eine Geometrie-/Festfunktions-Pipeline 1537 sowie eine zusätzliche Festfunktionslogik 1538 zur Beschleunigung verschiedener Grafik- und Rechenverarbeitungsoperationen beinhalten. Die Logik 1535 mit gemeinsam genutzter Funktion kann Logikeinheiten beinhalten, die mit der Logik 1720 mit gemeinsam genutzter Funktion von 17 assoziiert sind (z. B. Sampler-, Mathe- und/oder Inter-Thread-Kommunikationslogik), die durch jeden der N Unterkerne innerhalb des Grafikprozessorkerns 1519 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cachespeicher 1536 kann ein Last-Level-Cache für den Satz von N Unterkernen 1521A-1521F innerhalb des Grafikprozessorkerns 1519 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den mehrere Unterkerne zugreifen können. Die Geometrie-/Festfunktions-Pipeline 1537 kann anstelle der Geometrie-/Festfunktions-Pipeline 1531 innerhalb des Festfunktionsblocks 1530 enthalten sein und dieselben oder ähnliche Logikeinheiten aufweisen.
  • Der Grafikprozessorkern 1519 kann zusätzliche Festfunktionslogik 1538 beinhalten, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 1519 beinhalten kann. Optional beinhaltet die zusätzliche Festfunktionslogik 1538 eine zusätzliche Geometrie-Pipeline zur Verwendung beim Nur-Positions-Shading. Beim Nur-Positions-Shading existieren zwei Geometrie-Pipelines, die vollständige Geometrie-Pipeline innerhalb der Geometrie-/Festfunktions-Pipeline 1538, 1531 und eine Cull-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die in der zusätzlichen Festfunktionslogik 1538 enthalten sein kann. Zum Beispiel kann die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline sein. Die vollständige Pipeline und die Cull-Pipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Das Nur-Positions-Shading kann lange Cull-Durchläufe von verworfenen Dreiecken verbergen, wodurch das Shading in manchen Fällen früher abgeschlossen werden kann. Zum Beispiel kann die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 1538 Positions-Shader parallel zur Hauptanwendung ausführen und erzeugt allgemein kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und diese schattiert, ohne Rasterung und Rendering der Pixel zum Frame-Puffer durchzuführen. Die Cull-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke gecullt werden. Die vollständige Pipeline (die in diesem Fall als Wiedergabe-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die gecullten Dreiecke zu überspringen, um nur an den sichtbaren Dreiecken Shading durchzuführen, die schließlich an die Rasterungsphase übergeben werden.
  • Optional kann die zusätzliche Festfunktionslogik 1538 auch eine Maschinenlernbeschleunigungslogik, wie etwa eine Festfunktions-Matrixmultiplikationslogik, für Implementierungen einschließlich Optimierungen für Maschinenlemtraining oder Inferenzieren, beinhalten.
  • Innerhalb jedes Grafikunterkerns 1521A-1521F ist ein Satz von Ausführungsressourcen enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen durch eine Grafik-Pipeline, Medien-Pipeline oder Shader-Programme durchzuführen. Die Grafikunterkerne 1521A-1521F beinhalten mehrere EU-Arrays 1522A-1522F, 1524A-1524F, Thread-Dispatch- und Inter-Thread-Kommunikations(TD/IC)-Logik 1523A-1523F, einen 3D-Sampler (z. B. Textur-Sampler) 1525A-1525F, einen Medien-Sampler 1506A-1506F, einen Shader-Prozessor 1527A-1527F und einen gemeinsam genutzten lokalen Speicher (SLM: Shared Local Memory) 1528A-1528F. Die EU-Arrays 1522A-1522F, 1524A-1524F beinhalten jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkommalogikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation durchführen können, einschließlich Grafik-, Medien- oder Rechen-Shader-Programmen. Die TD/IC-Logik 1523A-1523F führt lokale Thread-Dispatch- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Unterkerns aus und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Sampler 1525A-1525F kann Textur- oder andere 3D-Grafik-bezogene Daten in den Speicher lesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Sample-Status und dem Texturformat, das mit einer gegebenen Textur assoziiert ist, unterschiedlich lesen. Der Medien-Sampler 1506A-1506F kann ähnliche Leseoperationen basierend auf der Art und dem Format durchführen, die mit den Mediendaten assoziiert sind. Zum Beispiel kann jeder Grafikunterkern 1521A-1521F abwechselnd einen vereinheitlichten 3D- und Medien-Sampler beinhalten. Threads, die auf den Ausführungseinheiten in jedem der Unterkerne 1521A-1521F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 1528A-1528F in jedem Unterkern verwenden, um zu ermöglichen, dass Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen On-Chip-Speicher-Pools ausgeführt werden.
  • 15C ist ein Blockdiagramm einer Allzweck-Grafikverarbeitungseinheit (GPGPU) 1570, die als ein Grafikprozessor, z. B. der Grafikprozessor 1508, und/oder als ein Berechnungsbeschleuniger ausgestaltet sein kann, gemäß hier beschriebenen Ausführungsformen. Die GPGPU 1570 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B. einer oder mehreren CPUs 1546) und Speicher 1571, 1572 verbunden sein. Der Speicher 1571 kann Systemspeicher sein, der mit der einen oder den mehreren CPUs 1546 gemeinsam genutzt werden kann, während der Speicher 1572 ein Vorrichtungsspeicher ist, der der GPGPU 1570 dediziert ist. Zum Beispiel können Komponenten innerhalb der GPGPU 1570 und des Vorrichtungsspeichers 1572 in Speicheradressen abgebildet werden, auf die die eine oder die mehreren CPUs 1546 zugreifen können. Der Zugriff auf den Speicher 1571 und 1572 kann über eine Speichersteuerung 1568 ermöglicht werden. Die Speichersteuerung 1568 kann eine interne Direktspeicherzugriff(DMA)-Steuerung 1569 beinhalten oder kann Logik enthalten, um Operationen durchzuführen, die ansonsten durch eine DMA-Steuerung ausgeführt werden würden.
  • Die GPGPU 1570 enthält mehrere Cachespeicher, einschließlich eines L2-Cache 1553, L1-Cache 1554, eines Anweisungscache 1555 und eines gemeinsam genutzten Speichers 1556, von dem zumindest ein Teil auch als Cachespeicher partitioniert werden kann. Die GPGPU 1570 enthält außerdem mehrere Berechnungseinheiten 1560A-1560N. Jede Berechnungseinheit 1560A-1560N beinhaltet einen Satz von Vektorregistern 1561, Skalarregistern 1562, Vektorlogikeinheiten 1563 und Skalarlogikeinheiten 1564. Die Berechnungseinheiten 1560A-1560N können auch einen lokalen gemeinsam genutzten Speicher 1565 und einen Programmzähler 1566 beinhalten. Die Berechnungseinheiten 1560A-1560N können mit einem konstanten Cache 1567 gekoppelt werden, der zum Speichern von konstanten Daten verwendet werden kann, die Daten sind, die sich während der Ausführung eines Kernel- oder Shader-Programms, das auf der GPGPU 1570 ausgeführt wird, nicht ändern. Der konstante Cache 1567 kann ein Skalardaten-Cache sein und gecachte Daten können direkt in die Skalarregister 1562 abgerufen werden.
  • Während des Betriebs können die eine oder die mehreren CPUs 1546 Befehle in Register oder Speicher in der GPGPU 1570 schreiben, die in einen zugänglichen Adressraum abgebildet wurde. Die Befehlsprozessoren 1557 können die Befehle aus Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 1570 verarbeitet werden. Ein Thread-Dispatcher 1558 kann dann verwendet werden, um Threads an die Berechnungseinheiten 1560A-1560N zu senden, um diese Befehle durchzuführen. Jede Recheneinheit 1560A-1560N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Außerdem kann jede Berechnungseinheit 1560A-1560N unabhängig für eine bedingte Berechnung konfiguriert werden und die Ergebnisse der Berechnung bedingt an den Speicher ausgeben. Die Befehlsprozessoren 1557 können die eine oder die mehreren CPUs 1546 unterbrechen, wenn die übermittelten Befehle abgeschlossen sind.
  • 16A-16C veranschaulichen Blockdiagramme zusätzlicher Grafikprozessor- und Berechnungsbeschleunigerarchitekturen, die durch hierin beschriebene Ausführungsformen bereitgestellt werden, z. B. gemäß 15A-15C. Die Elemente von 16A-16C mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 16A ist ein Blockdiagramm eines Grafikprozessors 1600, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der mit mehreren Verarbeitungskernen oder anderen Halbleitervorrichtungen, wie etwa unter anderem Speichervorrichtungen oder Netzwerkschnittstellen, integriert ist. Der Grafikprozessor 1600 kann eine Variante des Grafikprozessors 1508 sein und kann anstelle des Grafikprozessors 1508 verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1508 hierin auch eine entsprechende Kombination mit dem Grafikprozessor 1600, ist aber nicht darauf beschränkt. Der Grafikprozessor kann über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit in den Prozessorspeicher platzierten Befehlen kommunizieren. Der Grafikprozessor 1600 kann eine Speicherschnittstelle 1614 enthalten, um auf Speicher zuzugreifen. Die Speicherschnittstelle 1614 kann eine Schnittstelle zu einem lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder einem Systemspeicher sein.
  • Optional beinhaltet der Grafikprozessor 1600 zudem eine Anzeigesteuerung 1602, um eine Anzeigevorrichtung 1618 mit Anzeigeausgabedaten anzusteuern. Die Anzeigesteuerung 1602 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzeroberflächenelementen. Die Anzeigevorrichtung 1618 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 1618 eine am Kopf befestigte Anzeigevorrichtung, wie etwa eine Virtual-Reality(VR)-Anzeigevorrichtung oder eine Augmented-Reality(AR)-Anzeigevorrichtung. Der Grafikprozessor 1600 kann eine Video-Codec-Engine 1606 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierformaten beinhalten, darunter unter anderem MPEG-Formate (MPEG: Moving Picture Experts Group) wie MPEG-2, AVC-Formate (AVC: Advanced Video Coding) wie H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media (AOMedia) VP8, VP9 sowie die SMPTE-421M/VC-1- (SMPTE: Society of Motion Picture & Television Engineers) und JPEG- (JPEG: Joint Photographic Experts Group) Formate wie JPEG- und Motion-JPEG(MJPEG)-Formate.
  • Der Grafikprozessor 1600 kann eine Blockbildtransfer(BLIT)-Engine 1604 beinhalten, um zweidimensionale (2D) Rastereroperationen durchzuführen, einschließlich zum Beispiel Bitgrenzblocktransfers. Alternativ dazu können jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 1610 durchgeführt werden. In manchen Ausführungsformen ist die GPE 1610 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • Die GPE 1610 kann eine 3D-Pipeline 1612 zum Durchführen von 3D-Operationen beinhalten, wie etwa Rendering von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 1612 beinhaltet programmierbare und Festfunktionselemente, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungs-Threads zu einem 3D/Medien-Subsystem 1615 spawnen. Obwohl die 3D-Pipeline 1612 verwendet werden kann, um Medienoperationen durchzuführen, beinhaltet eine Ausführungsform der GPE 1610 auch eine Medien-Pipeline 1616, die speziell verwendet wird, um Medienoperationen, wie etwa Video-Nachverarbeitung und Bildverbesserung, durchzuführen.
  • Die Medien-Pipeline 1616 kann Festfunktions- oder programmierbare Logikeinheiten beinhalten, um eine oder mehrere spezialisierte Medienoperationen, wie etwa Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung, anstelle von oder im Auftrag der Video-Codec-Engine 1606 durchzuführen. Die Medien-Pipeline 1616 kann außerdem eine Thread-Spawning-Einheit beinhalten, um Threads zur Ausführung auf dem 3D/Medien-Subsystem 1615 zu spawnen. Die gespawnten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die in dem 3D/Medien-Subsystem 1615 enthalten sind.
  • Das 3D/Medien-Subsystem 1615 kann Logik zum Ausführen von durch die 3D-Pipeline 1612 und die Medien-Pipeline 1616 gespawnten Threads beinhalten. Die Pipelines können Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 1615 senden, das eine Thread-Dispatch-Logik für die Vermittlung und Versand bzw. Dispatch der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen beinhaltet. Die Ausführungsressourcen beinhalten ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. Das 3D/Medien-Subsystem 1615 kann einen oder mehrere interne Caches für Thread-Anweisungen und Daten beinhalten. Zusätzlich kann das 3D/Medien-Subsystem auch gemeinsam genutzten Speicher beinhalten, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • 16B veranschaulicht einen Grafikprozessor 1620, der eine Variante des Grafikprozessors 1600 ist und anstelle des Grafikprozessors 1600 verwendet werden kann und umgekehrt. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1600 hierin auch eine entsprechende Kombination mit dem Grafikprozessor 1620, ist aber nicht darauf beschränkt. Der Grafikprozessor 1620 weist gemäß hierin beschriebenen Ausführungsformen eine gekachelte Architektur auf. Der Grafikprozessor 1620 kann einen Grafikverarbeitungs-Engine-Cluster 1622 mit mehreren Instanzen der Grafikverarbeitungs-Engine 1610 von 16A innerhalb einer Grafik-Engine-Kachel 1610A-1610D beinhalten. Jede Grafik-Engine-Kachel 1610A-1610D kann über einen Satz von Kachel-Interconnects 1623A-1623F miteinander verbunden sein. Jede Grafik-Engine-Kachel 1610A-1610D kann auch über Speicher-Interconnects 1625A-1625D mit einem Speichermodul oder einer Speichervorrichtung 1626A-1626D verbunden sein. Die Speichervorrichtungen 1626A-1626D können eine beliebige Grafikspeichertechnologie verwenden. Zum Beispiel können die Speichervorrichtungen 1626A - 1626D ein Grafikspeicher mit doppelter Datenrate (GDDR) sein. Die Speichervorrichtungen 1626A - 1626D können Hochbandbreitenspeicher(HBM)-Module sein, die sich mit ihrer j eweiligen Grafik-Engine-Kachel 1610A - 1610D auf dem Die befinden können. Die Speichervorrichtungen 1626A - 1626D können gestapelte Speichervorrichtungen sein, die auf ihre j eweiligen Grafik-Engine-Kacheln 1610A - 1610D gestapelt sein können. Jede Grafik-Engine-Kachel 1610A - 1610D und ein assoziierter Speicher 1626A - 1626D können sich auf separaten Chiplets befinden, die an einen Basis-Die oder ein Basis-Substrat gebondet sind, wie in 24B-24D ausführlicher beschrieben ist.
  • Der Grafikprozessor 1620 kann mit einem Non-Uniform-Memory-Access(NUMA; ungleichförmiger Speicherzugriff)-System ausgestaltet sein, bei dem die Speichervorrichtungen 1626A-1626D mit assoziierten Grafik-Engine-Kacheln 1610A-1610D gekoppelt sind. Auf eine gegebene Speichervorrichtung kann durch andere Grafik-Engine-Kacheln als die Kachel, mit der sie direkt verbunden ist, zugegriffen werden. Jedoch kann die Zugriffslatenz auf die Speichervorrichtungen 1626A - 1626D am niedrigsten sein, wenn auf eine lokale Kachel zugegriffen wird. In einer Ausführungsform ist ein cachekohärentes NUMA(ccNUMA)-System aktiviert, das die Kachel-Interconnects 1623A-1623F verwendet, um die Kommunikation zwischen Cachesteuerungen innerhalb der Grafik-Engine-Kacheln 1610A-1610D zu ermöglichen, damit ein konsistentes Speicherabbild beibehalten wird, wenn mehr als ein Cache denselben Speicherort speichert.
  • Der Grafikverarbeitungs-Engine-Cluster 1622 kann mit einem On-Chip- oder On-Package-Fabric-Interconnect 1624 verbunden sein. Das Fabric-Interconnect 1624 kann die Kommunikation zwischen den Grafik-Engine-Kacheln 1610A-1610D und Komponenten wie dem Video-Codec 1606 und einer oder mehreren Kopier-Engines 1604 ermöglichen. Die Kopier-Engines 1604 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 1626A - 1626D und einem Speicher extern zu dem Grafikprozessor 1620 (z. B. Systemspeicher) zu verschieben. Das Fabric-Interconnect 1624 kann auch verwendet werden, um die Grafik-Engine-Kacheln 1610A-1610D miteinander zu verschalten. Der Grafikprozessor 1620 kann optional eine Anzeigesteuerung 1602 beinhalten, um eine Verbindung mit einer externen Anzeigevorrichtung 1618 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger ausgestaltet sein. In der Beschleunigerausgestaltung können die Anzeigesteuerung 1602 und die Anzeigevorrichtung 1618 weggelassen sein.
  • Der Grafikprozessor 1620 kann über eine Hostschnittstelle 1628 mit einem Hostsystem verbunden sein. Die Hostschnittstelle 1628 kann eine Kommunikation zwischen dem Grafikprozessor 1620, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle 1628 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Hostsystemschnittstelle sein.
  • 16C veranschaulicht einen Berechnungsbeschleuniger 1630 gemäß hierin beschriebenen Ausführungsformen. Der Berechnungsbeschleuniger 1630 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 1620 von 16B aufweisen und ist für die Berechnungsbeschleunigung optimiert. Ein Berechnungs-Engine-Cluster 1632 kann einen Satz von Berechnungs-Engine-Kacheln 1640A - 1640D beinhalten, die eine Ausführungslogik beinhalten, die für parallele oder vektorbasierte Allzweck-Rechenoperationen optimiert ist. Die Berechnungs-Engine-Kacheln 1640A - 1640D beinhalten möglicherweise keine Festfunktions-Grafikverarbeitungslogik, obwohl in einigen Ausführungsformen eine oder mehrere der Berechnungs-Engine-Kacheln 1640A - 1640D Logik zum Durchführen einer Medienbeschleunigung beinhalten können. Die Berechnungs-Engine-Kacheln 1640A-1640D können über Speicher-Interconnects 1625A-1625D mit einem Speicher 1626A-1626D verbunden sein. Der Speicher 1626A - 1626D und die Speicher-Interconnects 1625A - 1625D können eine ähnliche Technologie wie im Grafikprozessor 1620 sein oder können anders sein. Die Grafikberechnungs-Engine-Kacheln 1640A - 1640D können auch über einen Satz von Kachel-Interconnects 1623A - 1623F miteinander verschaltet sein und können mit einem Fabric-Interconnect 1624 verbunden und/oder durch d50ieses verschaltet sein. In einer Ausführungsform beinhaltet der Berechnungsbeschleuniger 1630 einen großen L3-Cache 1636, der als ein vorrichtungsweiter Cache ausgestaltet sein kann. Der Berechnungsbeschleuniger 1630 kann auch über eine Hostschnittstelle 1628 in ähnlicher Weise wie der Grafikprozessor 1620 von 16B mit einem Hostprozessor und Speicher verbunden sein.
  • Grafikverarb eitungs-Engine
  • 17 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 1710 eines Grafikprozessors gemäß manchen Ausführungsformen. Die Grafikverarbeitungs-Engine (GPE) 1710 kann eine Version der in 16A gezeigten GPE 1610 sein und kann auch eine Grafik-Engine-Kachel 1610A-1610D von 16B repräsentieren. Die Elemente von 17 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 1612 und die Medien-Pipeline 1616 von 16A auch in 17 veranschaulicht. Die Medien-Pipeline 1616 ist bei manchen Ausführungsformen der GPE 1710 optional und möglicherweise nicht explizit in der GPE 1710 enthalten. Beispielsweise und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 1710 gekoppelt.
  • Die GPE 1710 kann mit einem Befehlsstreamer 1703 gekoppelt sein oder diesen beinhalten, der der 3D-Pipeline 1612 und/oder den Medien-Pipelines 1616 einen Befehlsstrom zuführt. Alternativ dazu oder zusätzlich kann der Befehlsstreamer 1703 direkt mit einem vereinheitlichten Rückgabepuffer 1718 gekoppelt sein. Der vereinheitlichte Rückgabepuffer 1718 kann kommunikativ mit einem Grafikkernarray 1714 gekoppelt sein. Optional ist der Befehlsstreamer 1703 mit einem Speicher, der ein Systemspeicher sein kann, oder einem internen Cachespeicher und/oder einem gemeinsam genutzten Cachespeicher gekoppelt. Der Befehlsstreamer 1703 kann Befehle vom Speicher empfangen und sendet die Befehle an die 3D-Pipeline 1612 und/oder die Medien-Pipeline 1616. Bei den Befehlen handelt es sich um Direktiven, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 1612 und die Medien-Pipeline 1616 speichert. Der Ringpuffer kann zusätzlich Stapelbefehlspuffer enthalten, die Stapel mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 1612 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, wie etwa unter anderem Vertex- und Geometriedaten für die 3D-Pipeline 1612 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 1612 und die Medien-Pipeline 1616 verarbeiten die Befehle und Daten, indem sie Operationen über eine Logik innerhalb der jeweiligen Pipelines durchführen oder indem sie einen oder mehrere Ausführungs-Threads an das Grafikkern-Array 1714 versenden. Das Grafikkernarray 1714 kann einen oder mehrere Blöcke aus Grafikkernen (z. B. Grafikkern(e) 1715A, Grafikkern(e) 1715B) beinhalten, wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, der eine Allzweck- und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie Festfunktionstexturverarbeitung und/oder Maschinenlernen und eine Künstliche-Intelligenz-Beschleunigungslogik beinhaltet.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 1612 Festfunktions- und programmierbare Logik beinhalten, um ein oder mehrere Shader-Programme, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme zu verarbeiten, indem die Anweisungen verarbeitet und Ausführungs-Threads an das Grafikkern-Array 1714 versendet werden. Das Grafikkernarray 1714 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Eine Mehrzweckausführungslogik (z. B. Ausführungseinheiten) innerhalb des/der Grafikkern(e) 1715A-1714B des Grafikkern-Arrays 1714 beinhaltet Unterstützung verschiedener 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungs-Threads ausführen, die mit mehreren Shadern assoziiert sind.
  • Das Grafikkernarray 1714 kann Ausführungslogik zum Durchführen von Medienfunktionen wie etwa Video- und/oder Bildverarbeitung beinhalten. Die Ausführungseinheiten können zusätzlich Allzwecklogik beinhalten, die dazu programmierbar ist, parallele Allzweck-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Allzwecklogik innerhalb des einen bzw. der mehreren Prozessorkerne 1407 von 14 oder des Kerns 1502A-1502N wie in 15A durchführen.
  • Ausgabedaten, die durch Threads erzeugt werden, die auf dem Grafikkern-Array 1714 ausgeführt werden, können Daten zu einem Speicher in einen vereinheitlichten Rückgabepuffer (URB: Unified Return Buffer) 1718 ausgeben. Der URB 1718 kann Daten für mehrere Threads speichern. Der URB 1718 kann verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkernarray 1714 ausgeführt werden. Der URB 1718 kann zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkernarray 1714 und einer Festfunktionslogik innerhalb der Logik 1720 mit gemeinsam genutzter Funktion verwendet werden.
  • Optional kann das Grafikkernarray 1714 skalierbar sein, sodass das Array eine variable Anzahl von Grafikkernen mit jeweils einer variablen Anzahl an Ausführungseinheiten, die auf der Zielleistung und dem Leistungsfähigkeitsniveau der GPE 1710 basiert, beinhaltet. Die Ausführungsressourcen können dynamisch skalierbar sein, sodass Ausführungsressourcen je nach Bedarf freigegeben oder blockiert werden können.
  • Das Grafikkernarray 1714 ist mit Logik 1720 mit gemeinsam genutzter Funktion gekoppelt, die mehrere Ressourcen beinhaltet, die unter den Grafikkernen in dem Grafikkernarray gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der Logik 1720 mit gemeinsam genutzter Funktion sind Hardware-Logikeinheiten, die das Grafikkernarray 1714 mit einer spezialisierten Zusatzfunktionalität versehen. In verschiedenen Ausführungsformen beinhaltet die Logik 1720 mit gemeinsam genutzter Funktion, ohne darauf beschränkt zu sein, eine Sampler- 1721, eine Math- 1722 und eine Inter-Thread-Kommunikations(ITC: Inter-Thread Communication)-Logik 1723. Außerdem können ein oder mehrere Caches 1725 innerhalb der Logik 1720 mit gemeinsam genutzter Funktion implementiert werden.
  • Eine gemeinsam genutzte Funktion wird zumindest in einem Fall implementiert, in dem die Nachfrage nach einer gegebenen spezialisierten Funktion nicht ausreicht, um sie in das Grafikkern-Array 1714 aufzunehmen. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der Logik 1720 mit gemeinsam genutzter Funktion implementiert und unter den Ausführungsressourcen innerhalb des Grafikkernarrays 1714 gemeinsam genutzt. Der genaue Satz von Funktionen, die von dem Grafikkernarray 1714 gemeinsam genutzt werden und im Grafikkernarray 1714 enthalten sind, variiert zwischen den Ausführungsformen. Spezifische gemeinsam genutzte Funktionen innerhalb der Logik 1720 mit gemeinsam genutzter Funktion, die ausgiebig von dem Grafikkernarray 1714 verwendet werden, können in der Logik 1716 mit gemeinsam genutzter Funktion innerhalb des Grafikkernarrays 1714 enthalten sein. Optional kann die Logik 1716 mit gemeinsam genutzter Funktion innerhalb des Grafikkernarrays 1714 einen Teil der oder die gesamte Logik innerhalb der Logik 1720 mit gemeinsam genutzter Funktion beinhalten. Alle Logikelemente innerhalb der Logik 1720 mit gemeinsam genutzter Funktion können innerhalb der Logik 1716 mit gemeinsam genutzter Funktion des Grafikkernarrays 1714 dupliziert werden. Alternativ wird die Logik 1720 mit gemeinsam genutzter Funktion zugunsten der Logik 1716 mit gemeinsam genutzter Funktion innerhalb des Grafikkernarrays 1714 ausgeschlossen.
  • Ausführungseinheiten
  • 18A-18B veranschaulichen Thread-Ausführungslogik 1800 einschließlich eines Arrays von Verarbeitungselementen, die in einem Grafikprozessorkern eingesetzt werden, gemäß hierin beschriebenen Ausführungsformen. Die Elemente von 18A-18B mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. 18A-18B veranschaulicht eine Übersicht über die Thread-Ausführungslogik 1800, die die Hardwarelogik repräsentieren kann, die mit jedem Unterkern 1521A-1521F von 15B veranschaulicht ist. 18A ist repräsentativ für eine Ausführungseinheit innerhalb eines Allzweck-Grafikprozessors, während 18B repräsentativ für eine Ausführungseinheit ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie in 18A veranschaulicht, kann die Thread-Ausführungslogik 1800 einen Shader-Prozessor 1802, einen Thread-Dispatcher 1804, Anweisungscache 1806, ein skalierbares Ausführungseinheiten-Array mit mehreren Ausführungseinheiten 1808A-1808N, einen Sampler 1810, gemeinsam genutzten lokalen Speicher 1811, ein Datencache 1812, und einen Datenport 1814 beinhalten. Optional kann sich das skalierbare Ausführungseinheiten-Array dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine beliebige der Ausführungseinheiten 1808A, 1808B, 1808C, 1808D bis 1808N-1 und 1808N) basierend auf den Rechenanforderungen einer Arbeitslast freigegeben oder blockiert werden. Die enthaltenen Komponenten können über ein Interconnect-Fabric, das mit jeder der Komponenten verlinkt ist, miteinander verschaltet sein. Die Thread-Ausführungslogik 1800 kann eine oder mehrere Verbindungen zum Speicher, wie etwa Systemspeicher oder Cache-Speicher, über eine oder mehrere von Anweisungscache 1806, Datenport 1814, Sampler 1810, und Ausführungseinheiten 1808A-1808N beinhalten. Jede Ausführungseinheit (z. B. 1808A) kann eine selbständige programmierbare Allzweckrecheneinheit sein, die dazu in der Lage ist, mehrere simultane Hardware-Threads auszuführen, während sie mehrere Datenelemente parallel für jeden Thread verarbeitet. In verschiedenen Ausführungsformen kann das Array aus Ausführungseinheiten 1808A-1808N skalierbar sein, sodass es eine beliebige Anzahl einzelner Ausführungseinheiten enthält.
  • Die Ausführungseinheiten 1808A-1808N können primär zum Ausführen von Shader-Programmen verwendet werden. Ein Shader-Prozessor 1802 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die mit den Shader-Programmen assoziiert sind, über einen Thread-Dispatcher 1804 versenden. Der Thread-Dispatcher kann Logik beinhalten, um Thread-Initiierungsanforderungen von den Grafik- und Medien-Pipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten 1808A-1808N zu instanziieren. Zum Beispiel kann eine Geometrie-Pipeline Vertex-,
    Tessellations- oder Geometrie-Shader zum Verarbeiten an die Thread-Ausführungslogik versenden. Optional kann der Thread-Dispatcher 1804 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • Die Ausführungseinheiten 1808A-1808N können einen Anweisungssatz unterstützen, der native Unterstützung für viele Standard-3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Allzweckverarbeitung (z. B. Berechnungs- und Medien-Shader). Jede der Ausführungseinheiten 1808A-1808N ist zu einer Mehrfach-Erteilungs-SIMD-Ausführung (SIMD: Single Instruction Multiple Data) fähig und eine Multithread-Operation ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerbank mit hoher Bandbreite und einen assoziierten unabhängigen Thread-Zustand auf. Die Ausführung ist eine Mehrfach-Erteilung pro Takt an Pipelines die fähig sind zu Ganzzahloperationen, Gleitkomma-Operationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen. Während auf Daten aus dem Speicher oder einer der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik innerhalb der Ausführungseinheiten 1808A-1808N, dass ein wartender Thread in den Schlafzustand versetzt wird, bis die angeforderten Daten zurückgegeben worden sind. Während sich der wartende Thread im Schlafzustand befindet, können sich Hardwareressourcen der Verarbeitung anderer Threads widmen. Zum Beispiel kann während einer Verzögerung, die mit einer Vertex-Shader-Operation assoziiert ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, Fragment-Shader oder eine andere Art von Shader-Programm durchführen, einschließlich eines anderen Vertex-Shaders, wie etwa des in 21 veranschaulichten Vertex-Shaders 2107. Verschiedene Ausführungsformen können für die Verwendung einer Ausführung unter Verwendung von Single Instruction Multiple Thread (SIMT) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD gelten. Eine Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in Ausführungseinheiten 1808A-1808N arbeitet mit Arrays von Datenelementen. Die Anzahl der Datenelemente ist die „Ausführungsgröße“ oder die Anzahl der Kanäle für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für einen Datenelementzugriff, eine Maskierung und eine Ablaufsteuerung innerhalb von Anweisungen. Die Anzahl der Kanäle kann unabhängig von der Anzahl der physischen arithmetischen Logikeinheiten (ALUs), Gleitkommaeinheiten (FPUs) oder anderen Logikeinheiten (z. B. Tensorkerne, Strahlverfolgungskerne usw.) für einen bestimmten Grafikprozessor sein. Außerdem können die Ausführungseinheiten 1808A - 1808N Ganzzahl- und Gleitkomma-Datentypen unterstützen.
  • Der Ausführungseinheitanweisungssatz beinhaltet SIMD-Anweisungen. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. Wenn zum Beispiel mit einem 256 Bit breiten Vektor gearbeitet wird, werden die 256 Bits des Vektors in einem Register gespeichert, wobei die Ausführungseinheit am Vektor als vier separate gepackte 184-Bit-Datenelemente (Datenelemente in Vierfachwort(QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente in Doppelwort(DW)-Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente in Wort(W)-Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente in Byte(B)-Größe) arbeitet. Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • Optional können eine oder mehrere Ausführungseinheiten zu einer vereinigten Ausführungseinheit 1809A-1809N mit einer Thread-Steuerlogik (1807A-1807N) kombiniert werden, die den vereinigten EUs gemein ist. Mehrere EUs können zu einer EU-Gruppe vereinigt werden. Jede EU in der vereinigten EU-Gruppe kann derart konfiguriert sein, dass sie einen separaten SIMD-Hardware-Thread ausführt. Die Anzahl der EU in einer vereinigten EU-Gruppe kann je nach Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf, SIMD8, SIMD16 und SIMD32. Jede vereinigte Grafikausführungseinheit 1809A-1809N beinhaltet mindestens zwei Ausführungseinheiten. Beispielsweise beinhaltet jede Ausführungseinheit 1809A eine erste EU 1808A, eine zweite EU 1808B und eine Thread-Steuerlogik 1807A, die der ersten EU 1808A und der zweiten EU 1808B gemein ist. Die Thread-Steuerlogik 1807A steuert Threads, die auf der vereinigten Grafikausführungseinheit 1809A ausgeführt werden, wodurch jeder EU innerhalb der vereinigten Ausführungseinheiten 1809A-1809N ermöglicht wird, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungscaches (z. B. 1806) sind in der Thread-Ausführungslogik 1800 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zu cachen. Ein oder mehrere Datencaches (z. B. 1812) können in der Thread-Ausführungslogik 1800 enthalten sein, um Thread-Daten während der Thread-Ausführung zu cachen. Threads, die auf der Ausführungslogik 1800 ausgeführt werden, können auch explizit verwaltete Daten im gemeinsam genutzten lokalen Speicher 1811 speichern. Ein Sampler 1810 kann enthalten sein, um ein Textur-Sampling für 3D-Operationen und ein Medien-Sampling für Medienoperationen bereitzustellen. Der Sampler 1810 kann eine spezielle Textur- oder Medien-Sampling-Funktionalität beinhalten, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die gesampelten Daten einer Ausführungseinheit zugeführt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 1800 über die Thread-Spawning- und -Dispatch-Logik. Sobald eine Gruppe geometrischer Objekte verarbeitet und zu Pixeldaten gerastert wurde, wird Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 1802 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse auf Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. Ein Pixel-Shader oder Fragment-Shader kann die Werte der verschiedenen Vertex-Attribute berechnen, die über das gerasterte Objekt hinweg interpoliert werden sollen. Die Pixelprozessorlogik innerhalb des Shader-Prozessors 1802 kann dann ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel- oder Fragment-Shader-Programm ausführen. Um das Shader-Programm auszuführen, versendet der Shader-Prozessor 1802 Threads über den Thread-Dispatcher 1804 zu einer Ausführungseinheit (z. B. 1808A). Der Shader-Prozessor 1802 kann eine Textur-Sampling-Logik in dem Sampler 1810 verwenden, um auf Texturdaten in im Speicher gespeicherten Texturabbildungen zuzugreifen. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von der weiteren Verarbeitung.
  • Außerdem kann der Datenport 1814 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 1800 bereitstellen, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. Der Datenport 1814 kann einen oder mehrere Cachespeicher (z. B. den Datencache 1812) beinhalten oder damit gekoppelt sein, um Daten für den Speicherzugriff über den Datenport 1814 zu cachen.
  • Optional kann die Ausführungslogik 1800 auch einen Strahlverfolger 1805 beinhalten, der eine Strahlverfolgungs-Beschleunigungsfunktionalität bereitstellen kann. Der Strahlverfolger 1805 kann einen Strahlverfolgungs-Anweisungssatz unterstützen, der Anweisungen/Funktionen für die Strahlerzeugung enthält. Der Strahlverfolgungs-Anweisungssatz kann dem Strahlverfolgungs-Anweisungssatz, der von den Strahlverfolgungskernen 372 in 3C unterstützt wird, ähneln oder von diesem verschieden sein.
  • 18B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit 1808. Eine Grafikausführungseinheit 1808 kann eine Anweisungsabrufeinheit 1837, ein Allgemeinregisterbank-Array (GRF) 1824, ein Architekturregisterbank-Array (ARF) 1826, einen Thread-Arbiter 1822, eine Sendeeinheit 1830, eine Verzweigungseinheit 1832, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 1834 und optional einen Satz von dedizierten ganzzahligen SIMD-ALUs 1835 beinhalten. Das GRF 1824 und das ARF 1826 beinhalten den Satz von Allgemeinregisterbänken und Architekturregisterbänken, die mit jedem simultanen Hardware-Thread assoziiert sind, der in der Grafikausführungseinheit 1808 aktiv sein kann. Der Architekturzustand pro Thread kann in dem ARF 1826 beibehalten werden, während Daten, die während der Thread-Ausführung verwendet werden, in dem GRF 1824 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern im ARF 1826 gehalten werden.
  • Die Grafikausführungseinheit 1808 kann eine Architektur aufweisen, die eine Kombination aus Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. Die Architektur kann eine modulare Ausgestaltung aufweisen, die zur Entwurfszeit basierend auf einer Zielanzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit über Logik hinweg aufgeteilt werden, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 1808 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und jedem Hardware-Thread können mehrere logische Threads zugewiesen werden.
  • Optional kann die Grafikausführungseinheit 1808 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 1822 des Grafikausführungseinheit-Threads 1808 kann die Anweisung zur Verarbeitung an die Sendeeinheit 1830 oder die Verzweigungseinheit 1832 oder die SIMD-FPU(s) 1834 versenden. Jeder Ausführungs-Thread kann auf 128 Allzweckregister innerhalb des GRF 1824 zugreifen, wobei jedes Register 32 Byte speichern kann, die als ein SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. Jeder Ausführungseinheit-Thread kann Zugriff auf 4 kByte innerhalb des GRF 1824 haben, obwohl die Ausführungsformen nicht darauf beschränkt sind und mehr oder weniger Registerressourcen in anderen Ausführungsformen vorgesehen sein können. Die Grafikausführungseinheit 1808 kann in sieben Hardware-Threads partitioniert sein, die unabhängig Rechenoperationen durchführen können, obwohl die Anzahl von Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann, zum Beispiel können bis zu 16 Hardware-Threads unterstützt werden. In einer beispielhaften Ausführungsform, in der sieben Threads auf 4 kByte zugreifen können, kann das GRF 1824 insgesamt 28 kByte speichern. In einer anderen beispielhaften Ausführungsform, bei der 16 Threads auf 4 kByte zugreifen können, kann das GRF 1824 insgesamt 64 kByte speichern. Die Anzahl der Threads pro Ausführungseinheit ist j edoch nicht auf diese Beispiele beschränkt und kann größer oder kleiner als die angegebenen Zahlen sein. Flexible Adressierungsmodi können ermöglichen, dass Register zusammen adressiert werden, um effektiv breitere Register zu bilden oder um streifenförmige rechteckige Blockdatenstrukturen zu repräsentieren.
  • Zusätzlich oder alternativ dazu können Speicheroperationen, Sampler-Operationen und andere Systemkommunikationen mit längerer Latenz über „send‟ (Senden)-Anweisungen versendet werden, die durch die Nachrichtenweiterleitungssendeeinheit 1830 ausgeführt werden. Verzweigungsanweisungen können an eine dedizierte Verzweigungseinheit 1832 versendet werden, um eine SIMD-Divergenz und letztliche Konvergenz zu erleichtern.
  • Die Grafikausführungseinheit 1808 kann eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 1834 zum Durchführen von Gleitkommaoperationen beinhalten. Die FPU(s) 1834 kann bzw. können auch Ganzzahlberechnungen unterstützen. In einigen Fällen kann bzw. können die FPU(s) 1834 bis zu einer Anzahl M von 32-Bit Gleitkomma- (oder Ganzzahl-) Operationen SIMD-ausführen, oder bis zu 2M 16-Bit Ganzzahl- oder 16-Bit-Gleitkommaoperationen SIMD-ausführen. Optional stellt mindestens eine der FPUs erweiterte mathematische Fähigkeiten bereit, um mit hohem Durchsatz transzendente mathematische Funktionen und doppeltgenaues 184-Bit-Gleitkomma zu unterstützen. Ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 1835 kann auch vorhanden sein und kann speziell optimiert sein, um Operationen durchzuführen, die mit Maschinenlernberechnungen assoziiert sind.
  • Optional können Arrays von mehreren Instanzen der Grafikausführungseinheit 1808 in einer Grafikunterkerngruppierung (z. B. einem Sub-Slice) instanziiert sein. Für Skalierbarkeit können Produktarchitekten die exakte Anzahl an Ausführungseinheiten pro Unterkerngruppierung wählen. Die Ausführungseinheit 1808 kann Anweisungen über mehrere Ausführungskanäle hinweg ausführen. Außerdem kann jeder auf der Grafikausführungseinheit 1808 ausgeführte Thread auf einem anderen Kanal ausgeführt werden.
  • 19 veranschaulicht eine weitere beispielhafte Ausführungseinheit 1900. Die Elemente von 19 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Die Ausführungseinheit 1900 kann eine rechenoptimierte Ausführungseinheit zur Verwendung in beispielsweise einer Berechnungs-Engine-Kachel 1640A - 1640D wie in 16C sein, ist j edoch nicht darauf beschränkt. Die Ausführungseinheit 1900 kann auch in einer Grafik-Engine-Kachel 1610A-1610D wie in 16B verwendet werden. Die Ausführungseinheit 1900 kann eine Thread-Steuereinheit 1901, eine Thread-Zustandseinheit 1902, eine Anweisungsabruf-/Vorabrufeinheit 1903 und eine Anweisungsdecodiereinheit 1904 beinhalten. Die Ausführungseinheit 1900 kann zusätzlich eine Registerbank 1906 beinhalten, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 1900 kann zusätzlich eine Sendeeinheit 1907 und eine Verzweigungseinheit 1908 beinhalten. Die Sendeeinheit 1907 und die Verzweigungseinheit 1908 können ähnlich der Sendeeinheit 1830 und einer Verzweigungseinheit 1832 der Grafikausführungseinheit 1808 von 18B arbeiten.
  • Die Ausführungseinheit 1900 kann auch eine Berechnungseinheit 1910 beinhalten, die mehrere unterschiedliche Arten von Funktionseinheiten enthält. Die Berechnungseinheit 1910 kann auch eine ALU-Einheit 1911 beinhalten, die ein Array von Arithmetiklogikeinheiten enthält. Die ALU-Einheit 1911 kann dazu ausgelegt sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkomma-Operationen durchzuführen. Ganzzahl- und Gleitkomma-Operationen können gleichzeitig durchgeführt werden. Die Berechnungseinheit 1910 kann auch ein systolisches Array 1912 und eine Mathe-Einheit 1913 beinhalten. Das systolische Array 1912 enthält ein Netzwerk von Datenverarbeitungseinheiten mit einer Breite Wund einer Tiefe D, welche verwendet werden können, um Vektor- oder andere datenparallele Operationen auf systolische Weise durchzuführen. Das systolische Array 1912 kann dazu ausgelegt sein, Matrixoperationen durchzuführen, wie etwa Matrixskalarproduktoperationen. Das systolische Array 1912 kann 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen unterstützen. Das systolische Array 1912 kann dazu ausgelegt sein, Maschinenlernoperationen zu beschleunigen. Das systolische Array 1912 kann mit Unterstützung für bfloat16, einem 16-Bit-Gleitkommaformat, ausgestaltet werden. Eine Mathe-Einheit 1913 kann enthalten sein, um eine bestimmte Teilmenge mathematischer Operationen auf effiziente Weise und mit geringerer Leistung als die ALU-Einheit 1911 durchzuführen. Die Mathe-Einheit 1913 kann eine Mathe-Logik beinhalten, die man in einer Logik mit gemeinsam genutzter Funktion einer Grafikverarbeitungs-Engine findet, die von anderen beschriebenen Ausführungsformen bereitgestellt wird, z. B. die Mathe-Logik 1722 der Logik 1720 mit gemeinsam genutzter Funktion von 17. Die Mathe-Einheit 1913 kann dazu ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuereinheit 1901 enthält Logik zum Steuern der Ausführung von Threads innerhalb der Ausführungseinheit. Die Thread-Steuereinheit 1901 kann Thread-Arbitrierungslogik beinhalten, um die Ausführung von Threads innerhalb der Ausführungseinheit 1900 zu starten, zu stoppen und zu präemptieren. Die Thread-Zustandseinheit 1902 kann verwendet werden, um den Thread-Zustand für Threads zu speichern, die zur Ausführung auf der Ausführungseinheit 1900 zugewiesen sind. Das Speichern des Thread-Zustands in der Ausführungseinheit 1900 ermöglicht die schnelle Präemption von Threads, wenn diese Threads blockiert oder inaktiv werden. Die Anweisungsabruf-/-vorabrufeinheit 1903 kann Anweisungen aus einem Anweisungscache einer Ausführungslogik höherer Ebene (z. B. Anweisungscache 1806 wie in 18A) abrufen. Die Anweisungssabruf-/-vorabrufeinheit 1903 kann auch Vorabruf-Anforderungen für in den Anweisungscache zu ladende Anweisungen basierend auf einer Analyse aktuell ausgeführter Threads ausgeben. Die Anweisungsdecodiereinheit 1904 kann verwendet werden, um von den Berechnungseinheiten auszuführende Anweisungen zu decodieren. Die Anweisungsdecodiereinheit 1904 kann als ein sekundärer Decoder verwendet werden, um komplexe Anweisungen in Einzel-Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 1900 beinhaltet zusätzlich eine Registerbank 1906, die durch Hardware-Threads verwendet werden kann, die auf der Ausführungseinheit 1900 ausgeführt werden. Register in der Registerbank 1906 können über die Logik hinweg aufgeteilt werden, die verwendet wird, um mehrere simultane Threads innerhalb der Berechnungseinheit 1910 der Ausführungseinheit 1900 auszuführen. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 1900 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und jedem Hardware-Thread können mehrere logische Threads zugewiesen werden. Die Größe der Registerbank 1906 kann zwischen Ausführungsformen basierend auf der Anzahl unterstützter Hardware-Threads variieren. Eine Registerumbenennung kann verwendet werden, um Register dynamisch Hardware-Threads zuzuordnen.
  • 20 ist ein Blockdiagramm, das ein Grafikprozessor-Anweisungsformat 2000 veranschaulicht. Die Grafikprozessorausführungseinheiten unterstützen einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die Kästchen mit durchgezogenen Linien veranschaulichen die Komponenten, die allgemein in einer Ausführungseinheitenanweisung enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. Die beschriebenen und veranschaulichten Anweisungsformate 2000 sind Makroanweisungen, da sie Anweisungen sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus der Anweisungsdecodierung ergeben, sobald die Anweisung verarbeitet ist.
  • Die hierin beschriebenen Grafikprozessorausführungseinheiten können Anweisungen in einem 128-Bit-Anweisungsformat 2010 nativ unterstützen. Ein verdichtetes 64-Bit-Anweisungsformat 2030 ist für manche Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl der Operanden verfügbar. Das native 128-Bit-Anweisungsformat 2010 bietet Zugriff auf alle Anweisungsoptionen, während manche Optionen und Operationen im 64-Bit-Format 2030 beschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 2030 verfügbar sind, variieren je nach Ausführungsform. Die Anweisung wird teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 2013 verdichtet. Die Ausführungseinheit-Hardware referenziert einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Verdichtungstabellenausgaben, um eine native Anweisung im 128-Bit-Anweisungsformat 2010 zu rekonstruieren. Andere Anweisungsgrößen und -formate können verwendet werden.
  • Für jedes Format definiert der Anweisungs-Opcode 2012 die Operation, die die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit als Reaktion auf eine Addieranweisung eine simultane Addieroperation über jeden Farbkanal aus, der ein Texturelement oder Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. Das Anweisungsteuerungsfeld 2014 kann die Steuerung bestimmter Ausführungsoptionen ermöglichen, wie etwa Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Swizzle). Für Befehle im 128-Bit-Anweisungsformat 2010 begrenzt ein Ausführungsgröße-Feld 2016 die Anzahl von Datenkanälen, die parallel ausgeführt werden. Ein Ausführungsgröße-Feld 2016 ist möglicherweise nicht zur Verwendung in dem kompakten 64-Bit-Anweisungsformat 2030 verfügbar.
  • Einige Ausführungseinheitsanweisungen haben bis zu drei Operanden einschließlich zwei Quelloperanden, src0 2020, src1 2022, und ein Ziel 2018. Die Ausführungseinheiten können duale Zielanweisungen unterstützen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden aufweisen (z. B. SRC2 2024), wobei der Anweisungs-Opcode 2012 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z. B. festcodierter) Wert sein, der mit der Anweisung übergeben wird.
  • Das 128-Bit-Anweisungsformat 2010 kann ein Zugriffs-/Adressmodus-Feld 2026 beinhalten, das zum Beispiel angibt, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • Das 128-Bit-Anweisungsformat 2010 kann auch ein Zugriffs-/Adressmodus-Feld 2026 beinhalten, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. Der Zugriffsmodus kann verwendet werden, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Zugriffsmodi einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus können unterstützt werden, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Beispielsweise kann die Anweisung, wenn in einem ersten Modus befindlich, eine byteausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und, wenn in einem zweiten Modus befindlich, kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • Der Adressmodusabschnitt des Zugriffs-/Adressmodus-Feldes 2026 kann bestimmen, ob die Anweisung eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
  • Anweisungen können basierend auf Bitfeldern des Opcodes 2012 gruppiert werden, um die Opcode-Decodierung 2040 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 der Ausführungseinheit, den Typ des Opcodes zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. Eine Bewegen-und-Logik-Opcode-Gruppe 2042 kann Datenbewegungs- und Logikanweisungen (z. B. move (mov) (Bewegen), compare (cmp) (Vergleichen)) beinhalten. Die Bewegen-und-Logik-Gruppe 2042 kann die fünf höchstwertigen Bits (MSB) gemeinsam nutzen, wobei move(mov)-Anweisungen die Form 0000xxxxb haben und Logikanweisungen die Form 0001xxxxb haben. Eine Ablaufsteueranweisungsgruppe 2044 (z. B. call (Aufrufen), jump (jmp) (Springen)) beinhaltet Anweisungen in Form von 0010xxxxb (z. B. 0x20). Eine Andere-Anweisungsgruppe 2046 beinhaltet eine Mischung von Anweisungen einschließlich Synchronisationsanweisungen (z. B. wait (Warten), send (Senden)) in der Form 001 Ixxxxb (z. B. 0x30). Eine Parallel-Mathe-Anweisungsgruppe 2048 beinhaltet komponentenweise arithmetische Anweisungen (z. B. add (Addieren), multiply (mul) (Multiplizieren)) in der Form 0100xxxxb (z. B. 0x40). Die Parallel-Mathe-Gruppe 2048 führt die arithmetischen Operationen parallel über Datenkanäle hinweg aus. Die Vektor-Mathe-Gruppe 2050 beinhaltet arithmetische Anweisungen (z. B. dp4) in Form von 0101xxxxb (z. B. 0x50). Die Vektor-Mathe-Gruppe führt Arithmetik, wie etwa Skalarproduktberechnungen an Vektoroperanden aus. Die veranschaulichte Opcode-Decodierung 2040 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Zum Beispiel können einige Anweisungen als systolische Anweisungen bezeichnet werden, die durch ein systolisches Array ausgeführt werden. Andere Anweisungen, wie etwa Strahlverfolgungsanweisungen (nicht gezeigt), können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb eines Slice oder einer Partition der Ausführungslogik geleitet werden.
  • Grafik-Pipeline
  • 21 ist ein Blockdiagramm eines Grafikprozessors 2100 gemäß einer anderen Ausführungsform. Die Elemente von 21 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • Der Grafikprozessor 2100 kann verschiedene Arten von Grafikverarbeitungs-Pipelines beinhalten, wie etwa eine Geometrie-Pipeline 2120, eine Medien-Pipeline 2130, eine Anzeige-Engine 2140, eine Thread-Ausführungslogik 2150 und eine Rendering-Ausgabe-Pipeline 2170. Der Grafikprozessor 2100 kann ein Grafikprozessor in einem Mehrkernverarbeitungssystem sein, das einen oder mehrere Mehrzweckverarbeitungskerne beinhaltet. Der Grafikprozessor kann durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle gesteuert werden, die über ein Ring-Interconnect 2102 an den Grafikprozessor 2100 ausgegeben werden. Das Ring-Interconnect 2102 kann den Grafikprozessor 2100 mit anderen Verarbeitungskomponenten koppeln, wie etwa anderen Grafikprozessoren oder Mehrzweckprozessoren. Befehle von dem Ring-Interconnect 2102 werden von einem Befehls-Streamer 2103 interpretiert, der Anweisungen an einzelne Komponenten der Geometrie-Pipeline 2120 oder der Medien-Pipeline 2130 liefert.
  • Der Befehls-Streamer 2103 kann die Operation eines Vertex-Abrufers 2105 leiten, der Vertex-Daten aus einem Speicher liest und Vertex-Verarbeitungsbefehle ausführt, die durch den Befehls-Streamer 2103 bereitgestellt werden. Der Vertex-Abrufer 2105 kann Vertex-Daten an einen Vertex-Shader 2107 liefern, der eine Koordinatenraumtransformation und Beleuchtungsoperationen für jeden Vertex durchführt. Der Vertex-Abrufer 2105 und der Vertex-Shader 2107 können Vertex-Verarbeitungsanweisungen ausführen, indem sie Ausführungs-Threads über einen Thread-Dispatcher 2131 an die Ausführungseinheiten 2152A-2152B versenden.
  • Die Ausführungseinheiten 2152A-2152B können ein Array von Vektorprozessoren mit einem Anweisungssatz zum Durchführen von Grafik- und Medienoperationen sein. Die Ausführungseinheiten 2152A-2152B können einen angeschlossenen L1-Cache 2151 aufweisen, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Datencache, als Anweisungscache oder als Einzelcache konfiguriert sein, der derart partitioniert ist, dass er Daten und Anweisungen in verschiedenen Partitionen enthält.
  • Eine Geometrie-Pipeline 2120 kann Tessellationskomponenten beinhalten, um eine hardwarebeschleunigte Tessellation von 3D-Objekten durchzuführen. Ein programmierbarer Hüllen-Shader 2111 kann die Tessellationsoperationen konfigurieren. Ein programmierbarer Domänen-Shader 2117 kann eine Backend-Auswertung der Tessellationsausgabe bereitstellen. Ein Tessellator 2113 kann in Richtung des Hüllen-Shaders 2111 arbeiten und eine Spezialzwecklogik zum Erzeugen eines Satzes detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell enthalten, das als Eingabe in die Geometrie-Pipeline 2120 bereitgestellt wird. Falls keine Tessellation verwendet wird, können zusätzlich Tessellationskomponenten (z. B. Hüllen-Shader 2111, Tessellator 2113 und Domänen-Shader 2117) umgangen werden.
  • Vollständige geometrische Objekte können durch einen Geometrie-Shader 2119 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2152A-2152B versendet werden, oder sie können direkt zu dem Clipper 2129 weitergehen. Der Geometrie-Shader kann mit ganzen geometrischen Objekten arbeiten, anstatt mit Vertices oder Patches von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Wenn die Tessellation deaktiviert ist, empfängt der Geometrie-Shader 2119 eine Eingabe von dem Vertex-Shader 2107. Der Geometrie-Shader 2119 kann durch ein Geometrie-Shader-Programm programmierbar sein, um eine Geometrie-Tessellation durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Clipper 2129 Vertex-Daten. Der Clipper 2129 kann ein Festfunktions-Clipper oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. Eine Rasterer-und-Tiefenprüfung-Komponente 2173 in der Rendering-Ausgabe-Pipeline 2170 kann Pixel-Shader einsetzen, um die geometrischen Objekte in Pro-Pixel-Repräsentationen umzuwandeln. Die Pixel-Shader-Logik kann in der Thread-Ausführungslogik 2150 enthalten sein. Optional kann eine Anwendung die Rasterer-und-Tiefenprüfung-Komponente 2173 umgehen und über eine Stream-Out-Einheit 2123 auf nicht gerasterte Vertex-Daten zugreifen.
  • Der Grafikprozessor 2100 weist einen Interconnect-Bus, ein Interconnect-Fabric oder einen anderen Interconnect-Mechanismus auf, der ein Weitergeben von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors ermöglicht. Bei manchen Ausführungsformen sind die Ausführungseinheiten 2152A-2152B und die assoziierten Logikeinheiten (z. B. L1-Cache 2151, Sampler 2154, Textur-Cache 2158 usw.) über einen Datenport 2156 miteinander verbunden, um einen Speicherzugriff durchzuführen und mit Rendering-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. Ein Sampler 2154, die Caches 2151, 2158 und die Ausführungseinheiten 2152A-2152B können jeweils getrennte Speicherzugriffspfade aufweisen. Optional kann der Textur-Cache 2158 auch als ein Sampler-Cache konfiguriert sein.
  • Die Rendering-Ausgabe-Pipeline 2170 kann eine Rasterer-und-Tiefenprüfung-Komponente 2173 enthalten, die Vertex-basierte Objekte in eine assoziierte pixelbasierte Repräsentation umwandelt. Die Rasterer-Logik kann eine Windower/Maskierer-Einheit aufweisen, um eine Dreiecks- und Linienrasterung mit fester Funktion durchzuführen. Ein zugehöriges Rendering Cache 2178 und Tiefencache 2179 sind auch in einigen Ausführungsformen verfügbar. Eine Pixeloperationskomponente 2177 führt pixelbasierte Operationen an den Daten aus, wenngleich in manchen Fällen Pixeloperationen, die mit 2D-Operationen assoziiert sind (z. B. Bitblockbildtransfers mit Mischen), von der 2D-Engine 2141 ausgeführt oder zur Anzeigezeit von der Anzeigesteuerung 2143 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. Ein gemeinsam genutzter L3-Cache 2175 kann für alle Grafikkomponenten verfügbar sein, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • Die Grafikprozessor-Medien-Pipeline 2130 kann eine Medien-Engine 2137 und ein Video-Frontend 2134 beinhalten. Das Video-Frontend 2134 kann Pipeline-Befehle vom Befehls-Streamer 2103 empfangen. Die Medien-Pipeline 2130 kann einen separaten Befehls-Streamer beinhalten. Das Video-Frontend 2134 kann Medienbefehle verarbeiten, bevor der Befehl an die Medien-Engine 2137 gesendet wird. Die Medien-Engine 2137 kann eine Thread-Spawning-Funktionalität beinhalten, um Threads zum Versand an die Thread-Ausführungslogik 2150 über den Thread-Dispatcher 2131 zu spawnen.
  • Der Grafikprozessor 2100 kann eine Anzeige-Engine 2140 beinhalten. Diese Anzeige-Engine 2140 kann sich außerhalb des Prozessors 2100 befinden und kann mit dem Grafikprozessor über das Ring-Interconnect 2102 oder einen anderen Interconnect-Bus oder ein anderes Interconnect-Fabric gekoppelt sein. Die Anzeige-Engine 2140 kann eine 2D-Engine 2141 und eine Anzeigesteuerung 2143 beinhalten. Die Anzeige-Engine 2140 kann eine Speziallogik enthalten, die dazu in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. Die Anzeigesteuerung 2143 kann mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt sein, die eine systemintegrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung sein kann, die über einen Anzeigevorrichtungsverbindungselement angeschlossen ist.
  • Die Geometrie-Pipeline 2120 und die Medien-Pipeline 2130 können dazu konfigurierbar sein, Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind für keine Anwendungsprogrammierschnittstelle (API) spezifisch. Eine Treibersoftware für den Grafikprozessor kann API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle übersetzen, die von dem Grafikprozessor verarbeitet werden können. Eine Unterstützung kann für Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics und Rechen-API bereitgestellt werden, die alle von der Khronos Group sind. Eine Unterstützung kann auch für die Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt werden. Eine Kombination dieser Bibliotheken kann unterstützt werden. Eine Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline wird ebenfalls unterstützt, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik-Pipeline-Programmierung
  • 22A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2200 veranschaulicht, das zum Programmieren von Grafikverarbeitungs-Pipelines verwendet wird, wie beispielsweise die hierin in Verbindung mit 16A, 17, 21 beschriebenen Pipelines. 22B ist ein Blockdiagramm, das eine Grafikprozessorbefehlssequenz 2210 gemäß einer Ausführungsform veranschaulicht. Die durchgezogenen Kästen in 22A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 2200 aus 22A enthält Datenfelder zum Identifizieren eines Client 2202, eines Befehlsoperationscodes (Opcodes) 2204 und von Daten 2206 für den Befehl. Ein Sub-Opcode 2205 und eine Befehlsgröße 2208 sind ebenfalls in manchen Befehlen enthalten.
  • Der Client 2202 kann die Client-Einheit der Grafikvorrichtung spezifizieren, die die Befehlsdaten verarbeitet. Ein Grafikprozessor-Befehls-Parser kann das Client-Feld jedes Befehls untersuchen, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die geeignete Client-Einheit zu leiten. Die Grafikprozessor-Client-Einheiten können eine Speicherschnittstelleneinheit, eine Rendering-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit beinhalten. Jede Client-Einheit kann eine entsprechende Verarbeitungs-Pipeline aufweisen, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 2204 und, falls vorhanden, den Sub-Opcode 2205, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 2206 aus. Für manche Befehle wird eine explizite Befehlsgröße 2208 erwartet, die die Größe des Befehls angibt. Der Befehls-Parser kann die Größe von zumindest manchen der Befehle basierend auf dem Befehls-Opcode automatisch bestimmen. Befehle können über Vielfache eines Doppelwortes ausgerichtet werden. Andere Befehlsformate können ebenfalls verwendet werden.
  • Das Flussdiagramm in 22B veranschaulicht eine beispielhafte Grafikprozessorbefehlssequenz 2210. Software oder Firmware eines Datenverarbeitungssystems, das einen beispielhaften Grafikprozessor aufweist, kann eine Version der gezeigten Befehlssequenz verwenden, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlssequenz ist nur zu beispielhaften Zwecken gezeigt und beschrieben und ist nicht auf diese speziellen Befehle oder auf diese Befehlssequenz beschränkt. Darüber hinaus können die Befehle als ein Stapel von Befehlen in einer Befehlssequenz ausgegeben werden, sodass der Grafikprozessor die Sequenz von Befehlen zumindest teilweise gleichzeitig verarbeiten wird.
  • Die Grafikprozessor-Befehlssequenz 2210 kann mit einem Pipeline-Flush-Befehl 2212 beginnen, um zu bewirken, dass jede aktive Grafik-Pipeline die aktuell anstehenden Befehle für die Pipeline abschließt. Optional arbeiten die 3D-Pipeline 2222 und die Medien-Pipeline 2224 möglicherweise nicht gleichzeitig. Der Pipeline-Flush wird durchgeführt, um die aktive Grafik-Pipeline zu veranlassen, alle ausstehenden Befehle abzuschließen. Als Reaktion auf einen Pipeline-Flush pausiert der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichnung-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Rendering-Cache, die als „schmutzig“ gekennzeichnet sind, in den Speicher geflusht werden. Der Pipeline-Flush-Befehl 2212 kann zur Pipeline-Synchronisation oder vor dem Versetzen des Grafikprozessors in einen Niederleistungszustand verwendet werden.
  • Ein Pipeline-Auswahlbefehl 2213 kann verwendet werden, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. Ein Pipeline-Auswahlbefehl 2213 wird möglicherweise nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipeline-Befehlen benötigt, es sei denn, der Kontext gibt Befehle für beide Pipelines aus. Ein Pipeline-Flush-Befehl 2212 kann unmittelbar vor einem Pipeline-Umschalten über den Pipeline-Auswahlbefehl 2213 erforderlich sein.
  • Ein Pipeline-Steuerbefehl 2214 kann eine Grafik-Pipeline für den Betrieb konfigurieren und kann verwendet werden, um die 3D-Pipeline 2222 und die Medien-Pipeline 2224 zu programmieren. Der Pipeline-Steuerbefehl 2214 kann den Pipeline-Zustand für die aktive Pipeline konfigurieren. Der Pipeline-Steuerbefehl 2214 kann für die Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline verwendet werden, bevor ein Stapel von Befehlen verarbeitet wird.
  • Rückgabepufferzustandsbefehle 2216 können verwendet werden, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Manche Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. Der Grafikprozessor kann auch einen oder mehrere Rückgabepuffer verwenden, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation auszuführen. Der Rückgabepufferzustand 2216 kann das Auswählen der Größe und der Anzahl von Rückgabepuffern beinhalten, die für einen Satz von Pipeline-Operationen zu verwenden sind.
  • Die verbleibenden Befehle in der Befehlssequenz unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 2220 wird die Befehlssequenz auf die 3D-Pipeline 2222, beginnend mit dem 3D-Pipeline-Zustand 2230, oder auf die Medien-Pipeline 2224, beginnend mit dem Medien-Pipeline-Zustand 2240, zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipeline-Zustands 2230 beinhalten 3D-Zustandseinstellbefehle für den Vertex-Pufferzustand, den Vertex-Elementzustand, den Konstante-Farbe-Zustand, den Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitivbefehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der bestimmten 3D-API in Verwendung bestimmt. Die Befehle zum 3D-Pipeline-Zustand 2230 können auch in der Lage sein, bestimmte Pipeline-Elemente gezielt zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • Ein 3D-Primitivbefehl 2232 kann verwendet werden, um 3D-Primitive, die von der 3D-Pipeline verarbeitet werden sollen, zu versenden. Befehle und assoziierte Parameter, die über den 3D-Primitivbefehl 2232 an den Grafikprozessor geleitet werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Primitivbefehls 2232, um Vertex-Datenstrukturen zu erzeugen. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. Der 3D-Primitivbefehl 2232 kann verwendet werden, um Vertex-Operationen an 3D-Primitiven über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, versendet die 3D-Pipeline 2222 Shader-Ausführungs-Threads an Grafikprozessorausführungseinheiten.
  • Die 3D-Pipeline 2222 kann über einen Ausführungsbefehl 2234 oder ein Ausführungsereignis ausgelöst werden. Ein Register kann Auslösebefehlsausführungen schreiben. Eine Ausführung kann über einen ,go'- oder ,kick'-Befehl in der Befehlssequenz ausgelöst werden. Die Befehlsausführung kann unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst werden, um die Befehlssequenz durch die Grafik-Pipeline zu flushen. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitive aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixel-Engine färbt die resultierenden Pixel ein. Weitere Befehle zum Steuern von Pixel-Shading und Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
  • Die Grafikprozessor-Befehlssequenz 2210 kann dem Pfad der Medien-Pipeline 2224 folgen, wenn Medienoperationen durchgeführt werden. Im Allgemeinen hängen die spezielle Verwendung und Art der Programmierung für die Medien-Pipeline 2224 von den durchzuführenden Medien oder Rechenoperationen ab. Spezielle Mediendecodierungsoperationen können während der Mediendecodierung in die Medien-Pipeline ausgelagert werden. Die Medien-Pipeline kann auch umgangen werden und die Mediendecodierung kann vollständig oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Mehrzweckverarbeitungskernen bereitgestellt werden. Die Medien-Pipeline kann auch Elemente für Operationen einer Mehrzweckgrafikprozessoreinheit (GPGPU: General-Purpose Graphics Processor Unit) beinhalten, wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen, die nicht explizit mit dem Rendering von Grafikprimitiven in Zusammenhang stehen, durchzuführen.
  • Die Medien-Pipeline 2224 kann auf ähnliche Weise wie die 3D-Pipeline 2222 konfiguriert werden. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 2240 wird vor den Medienobjektbefehlen 2242 versendet oder in eine Befehlswarteschlange eingereiht. Befehle für den Medien-Pipeline-Zustand 2240 können Daten zum Konfigurieren der Medien-Pipeline-Elemente beinhalten, die zum Verarbeiten der Medienobj ekte verwendet werden. Dies schließt Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik in der Medien-Pipeline, wie etwa ein Codierungs- oder Decodierungsformat, ein. Befehle für den Medien-Pipeline-Zustand 2240 können auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente unterstützen, die ein Batch von Zustandseinstellungen enthalten.
  • Medienobjektbefehle 2242 können Zeiger auf Medienobjekte zur Verarbeitung durch die Medien-Pipeline unterstützen. Die Medienobjekte beinhalten Speicherpuffer, die zu verarbeitende Videodaten enthalten. Optional müssen alle Medien-Pipeline-Zustände gültig sein, bevor sie einen Medienobjektbefehl 2242 ausgeben. Sobald der Pipeline-Zustand konfiguriert ist und die Medienobjektbefehle 2242 in die Warteschlange eingereiht sind, wird die Medien-Pipeline 2224 über einen Ausführungsbefehl 2244 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe von der Medien-Pipeline 2224 kann dann durch Operationen nachbearbeitet werden, die durch die 3D-Pipeline 2222 oder die Medien-Pipeline 2224 bereitgestellt werden. GPGPU-Operationen können auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt werden.
  • Grafik-Software-Architektur
  • 23 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 2300. Eine solche Softwarearchitektur kann eine 3D-Grafikanwendung 2310, ein Betriebssystem 2320 und mindestens einen Prozessor 2330 beinhalten. Der Prozessor 2330 kann einen Grafikprozessor 2332 und einen oder mehrere Mehrzweckprozessorkerne 2334 beinhalten. Der Prozessor 2330 kann eine Variante des Prozessors 1402 oder ein beliebiger anderer der hierin beschriebenen Prozessoren sein. Der Prozessor 2330 kann anstelle des Prozessors 1402 oder eines beliebigen anderen der hierin beschriebenen Prozessoren verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Prozessor 1402 oder einem beliebigen anderen der hierin beschriebenen Prozessoren auch eine entsprechende Kombination mit dem Grafikprozessor 2330, ist aber nicht darauf beschränkt. Zudem beschreiben die Elemente von 23 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Die Grafikanwendung 2310 und das Betriebssystem 2320 werden jeweils in dem Systemspeicher 2350 des Datenverarbeitungssystems ausgeführt.
  • Die 3D-Grafikanwendung 2310 kann ein oder mehrere Shader-Programme, einschließlich Shader-Anweisungen 2312, enthalten. Die Shader-Sprache-Anweisungen können in einer High-Level-Shader-Sprache sein, wie etwa der High-Level-Shader-Sprache (HLSL) von Direct3D, der OpenGL Shader-Sprache (GLSL) und so weiter. Die Anwendung kann auch ausführbare Anweisungen 2314 in einer Maschinensprache aufweisen, die zur Ausführung durch den Mehrzweckprozessorkern 2334 geeignet sind. Die Anwendung kann auch Grafikobjekte 2316 beinhalten, die durch Vertex-Daten definiert sind.
  • Bei dem Betriebssystem 2320 kann es sich um ein Microsoft® Windows® Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet, handeln. Das Betriebssystem 2320 kann eine Grafik-API 2322 unterstützen, wie etwa die Direct3D-API, die OpenGL-API oder die Vulkan-API. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 2320 einen Frontend-Shader-Compiler 2324, um beliebige Shader-Anweisungen 2312 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine Just-in-Time(JIT)-Kompilierung sein, oder die Anwendung kann eine Shader-Vorkompilierung durchführen. Shader hoher Ebene können während der Kompilierung der 3D-Grafikanwendung 2310 zu Shadern niedrigerer Ebene kompiliert werden. Die Shader-Anweisungen 2312 können in einer Zwischenform bereitgestellt werden, wie etwa als eine Version der SPIR (Standard Portable Intermediate Representation), die durch die Vulkan-API verwendet wird.
  • Ein Benutzermodus-Grafiktreiber 2326 kann einen Backend-Shader-Compiler 2327 enthalten, um die Shader-Anweisungen 2312 in eine hardwarespezifische Repräsentation umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Shader-Anweisungen 2312 in der GLSL-High-Level-Sprache zu einem Benutzermodus-Grafiktreiber 2326 zur Kompilierung geleitet. Der Benutzermodus-Grafiktreiber 2326 kann Betriebssystemkernelmodus-Funktionen 2328 verwenden, um mit einem Kernelmodus-Grafiktreiber 2329 zu kommunizieren. Der Kernelmodus-Grafiktreiber 2329 kann mit dem Grafikprozessor 2332 kommunizieren, um Befehle und Anweisungen zu versenden.
  • IP-Kern- Implementierungen
  • Ein oder mehrere Aspekte können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, das eine Logik innerhalb einer integrierten Schaltung, wie zum Beispiel einem Prozessor, repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen enthalten, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie von einer Maschine gelesen werden, können die Anweisungen bewirken, dass die Maschine die Logik herstellt, um die hierin beschriebenen Techniken auszuführen. Solche Repräsentationen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Einheiten von Logik für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardware-Modell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung fertigen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen durchführt, die in Verbindung mit irgendeiner der hierin beschriebenen Ausführungsformen beschrieben sind.
  • 24A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 2400 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 2400 kann verwendet werden, um modulare, wiederverwendbare Designs zu erzeugen, die in ein größeres Design integriert oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SOC-Schaltung) zu konstruieren. Eine Designeinrichtung 2430 kann eine Softwaresimulation 2410 eines IP-Kern-Designs in einer höheren Programmiersprache (z. B. C/C++) erzeugen. Die Softwaresimulation 2410 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 2412 zu gestalten, zu testen und zu verifizieren. Das Simulationsmodell 2412 kann Funktions-, Verhaltens- und/oder Timing-Simulationen beinhalten. Ein Registertransferebenen(RTL)-Design 2415 kann dann aus dem Simulationsmodell 2412 erzeugt oder synthetisiert werden. Das RTL-Design 2415 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der assoziierten Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Neben einem RTL-Design 2415 können auch Designs auf niedrigerer Ebene auf der Logikebene oder der Transistorebene erzeugt, gestaltet oder synthetisiert werden. Daher können die speziellen Einzelheiten des anfänglichen Designs und der Simulation variieren.
  • Das RTL-Design 2415 oder ein Äquivalent kann ferner durch die Designeinrichtung in ein Hardwaremodell 2420 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Repräsentation von physischen Designdaten vorliegen kann. Die HDL kann ferner simuliert oder getestet werden, um das IP-KERNDESIGN zu verifizieren. Das IP-Kern-Design kann zur Lieferung an eine Fertigungseinrichtung 2465 einer Drittpartei unter Verwendung eines nichtflüchtigen Speichers 2440 (z. B. einer Festplatte, eines Flash-Speichers oder eines beliebigen nichtflüchtigen Speichermediums) gespeichert werden. Alternativ dazu kann das IP-Kern-Design über eine drahtgebundene Verbindung 2450 oder eine drahtlose Verbindung 2460 übertragen werden (z. B. über das Internet). Die Fertigungseinrichtung 2465 kann dann eine integrierte Schaltung fertigen, die zumindest teilweise auf dem IP-Kern-Design basiert. Die gefertigte integrierte Schaltung kann dazu ausgestaltet sein, Operationen gemäß wenigstens einer hier beschriebenen Ausführungsform durchzuführen.
  • 24B veranschaulicht eine Querschnittsseitenansicht einer Integrierte-Schaltung-Package-Zusammenstellung 2470. Die Integrierte-Schaltung-Package-Zusammenstellung 2470 veranschaulicht eine Implementierung eines oder mehrerer Prozessoren oder einer oder mehrerer Beschleunigervorrichtungen, wie hierin beschrieben. Die Package-Zusammenstellung 2470 beinhaltet mehrere Einheiten von Hardwarelogik 2472, 2474, die mit einem Substrat 2480 verbunden sind. Die Logik 2472, 2474 kann zumindest teilweise in konfigurierbarer Logik- oder Festfunktionalitätslogikhardware implementiert werden und kann einen oder mehrere Teile beliebiger des/der Prozessorkern(e), des/der Grafikprozessor(en) oder anderer hierin beschriebener Beschleunigervorrichtungen beinhalten. Jede Einheit von Logik 2472, 2474 kann in einem Halbleiter-Die implementiert und über eine Interconnect-Struktur 2473 mit dem Substrat 2480 gekoppelt sein. Die Interconnect-Struktur 2473 kann dazu ausgestaltet sein, elektrische Signale zwischen der Logik 2472, 2474 und dem Substrat 2480 zu routen, und kann Interconnects, wie etwa unter anderem Kontakthügel oder Säulen, beinhalten. Die Interconnect-Struktur 2473 kann dazu ausgestaltet sein, elektrische Signale, wie etwa zum Beispiel Eingabe/Ausgabe(E/A)-Signale und/oder Leistungs- oder Massesignale, zu routen, die mit dem Betrieb der Logik 2472, 2474 assoziiert sind. Optional kann das Substrat 2480 ein epoxidbasiertes Laminatsubstrat sein. Das Substrat 2480 kann auch andere geeignete Arten von Substraten beinhalten. Die Package-Zusammenstellung 2470 kann über ein Package-Interconnect 2483 mit anderen elektrischen Vorrichtungen verbunden werden. Das Package-Interconnect 2483 kann mit einer Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie etwa einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul, zu routen.
  • Die Einheiten von Logik 2472, 2474 können elektrisch mit einer Brücke 2482 gekoppelt sein, die dazu ausgestaltet ist, elektrische Signale zwischen der Logik 2472, 2474 zu routen. Die Brücke 2482 kann eine dichte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 2482 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial gebildet ist. Elektrische Routing-Merkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 2472, 2474 bereitzustellen.
  • Obwohl zwei Einheiten von Logik 2472, 2474 und eine Brücke 2482 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies beinhalten. Der eine oder die mehreren Dies können durch keine oder mehr Brücken verbunden sein, da die Brücke 2482 weggelassen werden kann, wenn die Logik auf einem einzelnen Die enthalten ist. Alternativ dazu können mehrere Dies oder Einheiten von Logik durch eine oder mehrere Brücken verbunden sein. Zusätzlich dazu können mehrere Logikeinheiten, Dies und Brücken in anderen möglichen Ausgestaltungen, einschließlich dreidimensionaler Ausgestaltungen, miteinander verbunden sein.
  • 24C veranschaulicht eine Package-Zusammenstellung 2490, die mehrere Einheiten von Hardware-Logik-Chiplets beinhaltet, die mit einem Substrat 2480 (z. B. Basis-Die) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Berechnungsbeschleuniger, wie hierin beschrieben, können aus verschiedenen Silicium-Chiplets zusammengesetzt sein, die separat hergestellt werden. In diesem Zusammenhang ist ein Chiplet eine zumindest teilweise integrierte Schaltung in einem Package, die verschiedene Einheiten von Logik beinhaltet, die mit anderen Chiplets zu einem größeren Package zusammengesetzt werden können. Ein diverser Satz von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzigen Vorrichtung zusammengesetzt werden. Darüber hinaus können die Chiplets mittels aktiver Interposer-Technologie in einen Basis-Die oder ein Basis-Chiplet integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Verschaltung und Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung unterschiedlicher Prozesstechnologien hergestellt und während der Herstellung zusammengesetzt werden, wodurch die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren IP-Ausgestaltungsrichtungen, für denselben Herstellungsprozess vermieden wird. Ermöglichen einer Nutzung mehrerer Prozesstechnologien verkürzt die Markteinführungszeit und bietet eine kostengünstige Möglichkeit, mehrere Produkt-SKUs zu erstellen. Darüber hinaus sind die disaggregierten IPs für ein unabhängiges Ansteuern mit Leistung besser geeignet, Komponenten, die bei einer bestimmten Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtleistungsverbrauch reduziert wird.
  • Die Hardware-Logik-Chiplets können Sonderzweck-Hardware-Logik-Chiplets 2472, Logik- oder E/A-Chiplets 2474 und/oder Speicher-Chiplets 2475 beinhalten. Die Hardware-Logik-Chiplets 2472 und die Logik- oder E/A-Chiplets 2474 können zumindest teilweise in konfigurierbarer Logik- oder Festfunktionalitätslogikhardware implementiert werden und können einen oder mehrere Teile beliebiger des einen oder der mehreren Prozessorkerne, des einen oder der mehreren Grafikprozessoren, der Parallelprozessoren oder anderer hierin beschriebener Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 2475 können DRAM(z. B. GDDR, HBM)-Speicher oder Cache(SRAM)-Speicher sein.
  • Jedes Chiplet kann als separater Halbleiter-Die gefertigt und über eine Interconnect-Struktur 2473 mit dem Substrat 2480 gekoppelt werden. Die Interconnect-Struktur 2473 kann dazu ausgestaltet sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats 2480 zu routen. Die Interconnect-Struktur 2473 kann Interconnects wie etwa unter anderem Kontakthügel oder Säulen beinhalten. Bei manchen Ausführungsformen kann die Interconnect-Struktur 2473 dazu ausgestaltet sein, elektrische Signale, wie etwa zum Beispiel Eingabe/Ausgabe(E/A)-Signale und/oder Leistungs- oder Massesignale, zu routen, die mit dem Betrieb der Logik, von E/A und Speicher-Chiplets assoziiert sind.
  • Das Substrat 2480 kann ein epoxidbasiertes Laminatsubstrat sein, ist jedoch nicht darauf beschränkt, und das Substrat 2480 kann auch andere geeignete Arten von Substraten beinhalten. Die Package-Zusammenstellung 2490 kann über ein Package-Interconnect 2483 mit anderen elektrischen Vorrichtungen verbunden werden. Das Package-Interconnect 2483 kann mit einer Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie etwa einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul, zu routen.
  • Ein Logik- oder E/A-Chiplet 2474 und ein Speicher-Chiplet 2475 können über eine Brücke 2487 elektrisch gekoppelt sein, die dazu ausgestaltet ist, elektrische Signale zwischen dem Logik- oder E/A-Chiplet 2474 und einem Speicher-Chiplet 2475 zu routen. Die Brücke 2487 kann eine dichte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 2487 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial gebildet ist. Elektrische Routing-Merkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E/A-Chiplet 2474 und einem Speicher-Chiplet 2475 bereitzustellen. Die Brücke 2487 kann auch als Siliciumbrücke oder Interconnect-Brücke bezeichnet werden. Die Brücke 2487 ist beispielsweise eine eingebettete Mehrfach-Die-Interconnect-Brücke (EMIB: Embedded Multidie Interconnect Bridge). Alternativ dazu kann die Brücke 2487 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 2480 kann Hardwarekomponenten für die E/A 2491, den Cachespeicher 2492 und andere Hardwarelogik 2493 beinhalten. Ein Fabric 2485 kann in das Substrat 2480 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 2491, 2493 innerhalb des Substrats 2480 zu ermöglichen. Optional können die E/A 2491, das Fabric 2485, der Cache, die Brücke und andere Hardwarelogik 2493 in einen Basis-Die integriert werden, der auf das Substrat 2480 geschichtet ist. Das Fabric 2485 kann ein Netzwerk auf einem Chip-Interconnect oder eine andere Form eines paketvermittelten Fabric sein, das Datenpakete zwischen Komponenten der Package-Zusammenstellung vermittelt.
  • Darüber hinaus kann eine Package-Zusammenstellung 2490 auch eine kleinere oder größere Anzahl von Komponenten und Chiplets beinhalten, die durch ein Fabric 2485 oder eine oder mehrere Brücken 2487 miteinander verschaltet sind. Die Chiplets innerhalb der Package-Zusammenstellung 2490 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 2487 verwendet werden, um ein Punkt-zu-Punkt-Interconnect zwischen beispielsweise Logik- oder E/A-Chiplets und Speicher-Chiplets zu erleichtern. Das Fabric 2485 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (z. B. Chiplets 2472, 2474, 2491, 2493) mit anderen Logik- und/oder E/A-Chiplets zu verschalten. Der Cachespeicher 2492 innerhalb des Substrats kann als globaler Cache für die Package-Zusammenstellung 2490, als Teil eines verteilten globalen Caches oder als dedizierter Cache für das Fabric 2485 fungieren.
  • 24D veranschaulicht eine Package-Baugruppe 2494 einschließlich austauschbarer Chiplets 2495 gemäß einer Ausführungsform. Die austauschbaren Chiplets 2495 können in standardisierte Steckplätze auf einem oder mehreren Basis-Chiplets 2496, 2498 montiert werden. Die Basis-Chiplets 2496, 2498 können über ein Brücken-Interconnect 2497 gekoppelt sein, das den anderen hierin beschriebenen Brücken-Interconnects ähnlich sein kann und beispielsweise eine EMIB sein kann. Speicher-Chiplets können auch über ein Brücken-Interconnect mit Logik- oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über ein Interconnect-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für Logik oder E/A oder Speicher/Cache unterstützen.
  • SRAM- und Leistungsabgabeschaltungen können in einem oder mehreren der Basis-Chiplets 2496, 2498 hergestellt werden, die unter Verwendung einer anderen Prozesstechnologie im Vergleich zu den austauschbaren Chiplets 2495 hergestellt werden können, die auf die Basis-Chiplets gestapelt sind. Beispielsweise können die Basis-Chiplets 2496, 2498 unter Verwendung einer größeren Prozesstechnologie hergestellt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Einer oder mehrere der austauschbaren Chiplets 2495 können Speicher(z. B. DRAM)-Chiplets sein. Für die Package-Zusammenstellung 2494 können unterschiedliche Speicherdichten basierend auf der Leistung und/oder Leistungsfähigkeit ausgewählt werden, die für das Produkt, das die Package-Zusammenstellung 2494 verwendet, angestrebt wird. Außerdem können Logik-Chiplets mit einer anderen Anzahl von Typen von Funktionseinheiten zum Zeitpunkt des Zusammenbaus basierend auf der Leistung und/oder Leistungsfähigkeit ausgewählt werden, die für das Produkt angestrebt wird. Darüber hinaus können Chiplets mit IP-Logikkernen unterschiedlicher Typen in die austauschbaren Chiplet-Steckplätze eingefügt werden, wodurch Hybridprozessordesigns ermöglicht werden, die IP-Blöcke unterschiedlicher Technologie kombinieren und anpassen können.
  • Beispielhaftes System auf einem Integrierte-Schaltung-Chip
  • 25-26 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können. Zusätzlich zu den Veranschaulichungen können andere Logik und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Mehrzweckprozessorkerne. Die Elemente von 25-26 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder fungieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 25 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung 2500 eines System-on-Chip veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Die beispielhafte integrierte Schaltung 2500 beinhaltet einen oder mehrere Anwendungsprozessoren 2505 (z. B. CPUs), mindestens einen Grafikprozessor 2510, der eine Variante des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen hierin beschriebenen Grafikprozessors sein kann, und kann anstelle jeglicher beschriebenen Grafikprozessoren verwendet werden. Daher offenbart die Offenbarung beliebiger Merkmale in Kombination mit einem Grafikprozessor hierin auch eine entsprechende Kombination mit dem Grafikprozessor 2510, ist aber nicht darauf beschränkt. Die integrierte Schaltung 2500 kann zusätzlich einen Bildprozessor 2515 und/oder einen Videoprozessor 2520 aufweisen, von denen jeder ein modularer IP-Kern aus derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 2500 kann eine Peripherie- oder Buslogik beinhalten, einschließlich einer USB-Steuerung 2525, einer UART-Steuerung 2530, einer SPI/SDIO-Steuerung 2535 und einer I2S/I2C-Steuerung 2540. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung 2545 beinhalten, die mit einer HDMI(High Definition Multimedia Interface)-Steuerung 2550 und/oder einer MIPI(Mobile Industry Processor Interface)-Anzeigeschnittstelle 2555 gekoppelt ist. Die Speicherung kann durch ein Flash-Speichersubsystem 2560 bereitgestellt werden, das einen Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Eine Speicherschnittstelle kann über eine Speichersteuerung 2565 zum Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Manche integrierte Schaltungen beinhalten zusätzlich eine eingebettete Sicherheits-Engine 2570.
  • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen. Die Grafikprozessoren können Varianten des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen anderen hierin beschriebenen Grafikprozessors sein. Die Grafikprozessoren können anstelle des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen anderen der hierin beschriebenen Grafikprozessoren verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1408, 1508, 2510, oder einem beliebigen anderen der hierin beschriebenen Grafikprozessoren auch eine entsprechende Kombination mit den Grafikprozessoren von 26A-26B, ist aber nicht darauf beschränkt. 26A veranschaulicht einen beispielhaften Grafikprozessor 2610 einer integrierten System-on-Chip-Schaltung, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. 26B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 2640 einer integrierten System-on-Chip-Schaltung, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Der Grafikprozessor 2610 von 26A ist ein Beispiel für einen Grafikprozessorkern mit geringem Stromverbrauch. Der Grafikprozessor 2640 von 26B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistungsfähigkeit. Beispielsweise kann jeder der Grafikprozessoren 2610, 2640 eine Variante des Grafikprozessors 2510 von 25 sein, wie zu Beginn dieses Absatzes erwähnt.
  • Wie in 26A gezeigt, beinhaltet der Grafikprozessor 2610 einen Vertex-Prozessor 2605 und einen oder mehrere Fragmentprozessoren 2615A-2615N (z. B. 2615A, 2615B, 2615C, 2615D bis 2615N-1 und 2615N). Der Grafikprozessor 2610 kann verschiedene Shader-Programme über separate Logik ausführen, sodass der Vertex-Prozessor 2605 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während der eine oder die mehreren Fragment-Prozessoren 2615A-2615N Fragment(z. B. Pixel)-Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 2605 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline aus und erzeugt Primitive und Vertex-Daten. Der bzw. die Fragment-Prozessoren) 2615A-2615N verwenden die durch den Vertex-Prozessor 2605 erzeugten Primitiv- und Vertex-Daten, um einen Frame-Puffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. Der bzw. die Fragmentprozessor(en) 2615A-2615N können optimiert sein zum Ausführen von Fragment-Shader-Programmen, wie in der OpenGL-API vorgesehen ist, die verwendet werden kann, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie in der Direkt3D-API vorgesehen ist.
  • Der Grafikprozessor 2610 enthält zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs: Memory Management Units) 2620A-2620B, den/die Cache(s) 2625A-2625B und das/die Schaltung-Interconnect(s) 2630A-2630B. Die eine oder die mehreren MMUs 2620A-2620B stellen eine Abbildung von virtuellen auf physische Adressen für den Grafikprozessor 2610 bereit, einschließlich für den Vertex-Prozessor 2605 und/oder den (die) Fragment-Prozessor(en) 2615A-2615N, der (die) zusätzlich zu Vertex oder Bild-/Texturdaten, die in dem (den) Cache(s) 2625A-2625B gespeichert sind, Vertex oder Bild-/Texturdaten referenzieren kann (können), die im Speicher gespeichert sind. Die eine oder die mehreren MMUs 2620A-2620B können mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessoren 2505, dem Bildprozessor 2515 und/oder dem Videoprozessor 2520 von 25 assoziiert sind, sodass jeder Prozessor 2505-2520 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Komponenten des Grafikprozessors 2610 können Komponenten anderer hierin beschriebener Grafikprozessoren entsprechen. Die eine oder die mehreren MMUs 2620A-2620B können der MMU 245 von 2C entsprechen. Der Vertex-Prozessor 2605 und der Fragmentprozessor 2615A-2615N können dem Grafikmultiprozessor 234 entsprechen. Das eine oder die mehreren Schaltung-Interconnects 2630A-2630B ermöglichen gemäß Ausführungsformen, dass der Grafikprozessor 2610 an andere IP-Kerne innerhalb des SoC ankoppelt, entweder über einen internen Bus des SoC oder über eine direkte Verbindung. Das eine oder die mehreren Interconnects 2630A-2630B können der Daten-Crossbar 240 von 2C entsprechen. Eine weitere Entsprechung kann zwischen analogen Komponenten des Grafikprozessors 2610 und den verschiedenen hierin beschriebenen Grafikprozessorarchitekturen gefunden werden.
  • Wie in 26B gezeigt, enthält der Grafikprozessor 2640 die eine oder die mehreren MMUs 2620A-2620B, den einen oder die mehreren Caches 2625A-2625B und das eine oder die mehreren Schaltung-Interconnects 2630A-2630B des Grafikprozessors 2610 von 26A. Der Grafikprozessor 2640 beinhaltet einen oder mehrere Shader-Kerne 2655A-2655N (z. B. 2655A, 2655B, 2655C, 2655D, 2655E, 2655F, bis 2655N-1 und 2655N), was für eine vereinheitlichte Shader-Kernarchitektur sorgt, in der ein einzelner Kern oder Kerntyp alle Arten von Programmierbarer-Shader-Code ausführen kann, einschließlich Shader-Programmcode zur Implementierung von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern. Die genaue Anzahl der vorhandenen Shader-Kerne kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem beinhaltet der Grafikprozessor 2640 einen Interkernaufgabenmanager 2645, der als ein Thread-Dispatcher zum Versenden von Ausführungs-Threads an einen oder mehrere Shader-Kerne 2655A-2655N und eine Kachelungseinheit 2658 zum Beschleunigen von Kacheloperationen für kachelbasiertes Rendering agiert, wobei die Rendering-Operationen für eine Szene in einen Bildraum unterteilt sind, um zum Beispiel lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder um die Verwendung von internen Caches zu optimieren. Die Shader-Kerne 2655A-2655N können beispielsweise dem Grafikmultiprozessor 234 wie in 2D oder den Grafikmultiprozessoren 325, 350 von 3A bzw. 3B oder der Mehrkerngruppe 365A von 3C entsprechen.
  • GRAFIKPROZESSOREN, DIE EINE SKALARPRODUKT-AKKUMULIER-ANWEISUNG FÜR EINEN HYBRID-GLEITKOMMA-DATENTYP AUFWEISEN
  • Computer verwenden eine (binäre) wissenschaftliche Darstellung von Zahlen, die in der Informatik Gleitkomma genannt wird. In der wissenschaftlichen Notation wird eine Zahl als eine rationale Zahl dargestellt, die Mantisse genannt wird, gefolgt von einer Multiplikation dieser Mantisse mit der Basis hoch einem Exponenten. Gleitkommazahlenformate für Computer umfassen im Allgemeinen binary32 (oder FP32) und binary64 (oder FP64). Die Zahl bezieht sich auf die Gesamtzahl der Stellen, die verwendet werden, um die Zahl darzustellen, wobei die meisten Stellen der Mantisse zugewiesen sind, da dies eine höhere Genauigkeit bietet.
  • Das vorliegende Design beinhaltet eine generische DP2A-Anweisung zum Ausführen von Skalarprodukten unter Verwendung des bfloat(BF16)-Formats. Dies ist nützlich für Produkte, die keine Matrix-Multiplikations-ähnlichen Strukturen unterstützen.
  • Das bfloat16-Format ist eine verkürzte 16-Bit-Version des 32-Bit-IEEE 754-Gleitkommaformats mit einfacher Genauigkeit, das 8 Exponentenbits beibehält, aber die Präzision des Signifikanten von 24 Bit auf 8 Bit reduziert, um Speicher, Bandbreite und Verarbeitungsressourcen zu sparen, bei gleichbleibendem Zahlenbereich. Das bfloat16-Format wurde in erster Linie für maschinelles Lernen und sensornahe Rechenanwendungen entwickelt, bei denen Präzision nahe 0, aber nicht so sehr im maximalen Bereich erforderlich ist.
  • DP2A-ANWEISUNG FÜR BF 16 DATENTYP
  • Ausführungsformen der vorliegenden Erfindung beinhalten eine generische Skalarproduktakkumulationsanweisung bzw. dp2a-Anweisung, die dafür vorgesehen ist, ein Skalarprodukt unter Verwendung des bfloat16(BF16)-Formats durchzuführen. BF16 ist eine Kreuzung zwischen dem Gleitkommazahlenformat mit halber Genauigkeit (FP16) und dem Gleitkommazahlenformat mit einfacher Genauigkeit (FP32). BF16 weist 16 Bit auf, wie FP16, weist aber die gleiche Anzahl von Exponentenbits wie FP32 auf. Dies macht die Konvertierung zwischen BF 16 und FP32 einfach, mit Ausnahme einiger Randfälle bezüglich entnormierter Zahlen. Jede Zahl weist 1 Vorzeichenbit auf.
  • | Format | Bits | Exponent | Bruchteil |
    |--------- ------ ---------- ----------|
    | FP32 | 32 | 8 | 23 |
    | FP16 | 16 | 5 | 10 |
    | BF16 | 16 | 8 | 7 |
  • BF16 weist eine viel geringere Genauigkeit nahe 1 aus als andere Formate. BF16 weist einen großen Zahlenbereichsexponenten im Vergleich zu FP16 auf, das die gleichen 16 Bit aufweist.
  • Bei einer Ausführungsform ist eine generische dp2a-Anweisung vorgesehen, um unter Verwendung des BF16-Formats ein Skalarprodukt durchzuführen. Die folgende Anweisung ist Teil des Betriebs einer Verarbeitungsressource (z. B. regulärer Teil des FPU-Betriebs). Bestimmung  ( Ausgabe 2722 ) = Quelle 0 Operand FP32 + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 ) + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 )
    Figure DE112020001258T5_0001
  • 27 veranschaulicht ein Blockdiagramm einer Schaltung 2700 zum Durchführen dieser dp2a-Anweisung für das BF16-Format in einer Verarbeitungsressource (z. B. eine Funktionseinheit, FPU) gemäß einer Ausführungsform. Diese Anweisung wird Teil des regulären FPU-Betriebs sein (nicht-systolische Pipelines).
  • Verarbeitungscluster 214 des Parallelprozessors 200 von 2A können jeweils Gleitkommaeinheiten 264 (FPUs) beinhalten. GPGPU-Kerne 262 von 2D können jeweils Gleitkommaeinheiten 264 (FPUs) und/oder Ganzzahl-Arithmetik-Logikeinheiten (ALUs) beinhalten, die verwendet werden, um Anweisungen des Grafikmultiprozessors 234 auszuführen. Verarbeitungscluster 706A-706H von 7 können jeweils Gleitkommaeinheiten 264 (FPUs) beinhalten. Ein Satz von SIMD-Gleitkommaeinheiten (FPUs) 1834 ist in 18B veranschaulicht.
  • Die GPGPU-Kerne 262 können eine SIMD-Logik umfassen, die in der Lage ist, eine einzelne Anweisung (z. B. eine dp2a-Anweisung für das BF16-Format) an mehreren Sätzen von Daten durchzuführen. Optional können die GPGPU-Kerne 262 SIMD4-, SIMD8- und SIMD16-Anweisungen physisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen.
  • Die Schaltung 2700 enthält Multiplizierer 2710 und 2711 (z. B. BF16-Multiplizierer), die jeweils Eingangsoperanden (z. B. srcl, src2) multiplizieren. Ein Akkumulator oder Addierer 2720 addiert einen ersten Operanden (src0) mit einer Ausgabe von jedem der Multiplizierer 2710 und 2711. Der Akkumulator oder Addierer 2720 erzeugt eine Ausgabe 2722 für eine Bestimmung. Die Schaltung 2700 kann für verschiedene Spuren von SIMD mehrfach dupliziert werden.
  • Subnormale Operationen werden von BF 16 unterstützt, wenn eine Modusfähigkeit eingestellt ist. Subnormale Zahlen können auf Null gespült werden.
  • In einer anderen Ausführungsform können die Bestimmung (Ausgabe 2722)- und der Quelle 0-Operand FP16-, FP32- oder BF16-Gleitkommazahlenformate sein.
  • Eine Verarbeitungsressource repräsentiert ein Verarbeitungselement (z. B. GPGPU-Kern, Strahlverfolgungskern, Tensorkern, Ausführungsressource, Ausführungseinheit (EU), Stream-Prozessor, Streaming-Multiprozessor (SM), Grafikmultiprozessor), assoziiert mit einem Grafikprozessor oder einer Grafikprozessorstruktur (z. B. Parallelverarbeitungseinheit, Grafikverarbeitungs-Engine, Mehrkerngruppe, Recheneinheit, Recheneinheit des Grafikkerns als nächstes) in einer GPU, wie hierin beschrieben ist. Beispielsweise kann die Verarbeitungsressource eines der Folgenden sein: GPGPU-Kerne 262 mit FPUs oder Tensor-/Strahlverfolgungskerne 263 des Grafikmultiprozessors 234; ein Strahlverfolgungskern 338A-338B, Tensorkern 337A-337B oder GPGPU-Kern 336A-336B des Grafikmultiprozessors 325; Ausführungsressourcen 356A-356D des Grafikmultiprozessors 350; einer von GFX-Kernen 370, Tensor-Kernen 371 oder Strahlverfolgungskernen 372 einer Mehrkerngruppe 365A-365N; eine von Vektorlogikeinheiten 1563 oder Skalarlogikeinheiten 1564 einer Recheneinheit 1506A-1506N; Ausführungseinheit mit EU-Array 1522A-1522F oder EU-Array 1524A-1524F; eine Ausführungseinheit 1808A-1808N der Ausführungslogik 1800; und/oder eine Ausführungseinheit 1900. Die Verarbeitungsressource kann auch eine Ausführungsressource innerhalb beispielsweise einer Grafikverarbeitungs-Engine 431-432, eines Verarbeitungsclusters 706A-706H, einer GPGPU 806A-806D, einer GPGPU 1306, einer Grafikverarbeitungs-Engine 1610, eines Grafikverarbeitungs-Engine-Clusters 1622 und/oder einer Grafikverarbeitungs-Engine 1710 sein. Die Verarbeitungsressource kann auch eine Verarbeitungsressource innerhalb des Grafikprozessors 2510, des Grafikprozessors 2610 und/oder des Grafikprozessors 2640 sein.
  • Bei einer weiteren Ausführungsform ist eine generische dp2a-Anweisung vorgesehen, um unter Verwendung des BF16-Formats ein Skalarprodukt durchzuführen. Die folgende Anweisung wird Teil des regulären FPU-Betriebs sein. Bestimmung  ( Ausgabe 2822 ) = Quelle 0 Operand FP32 + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 ) + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 ) ( Quelle  1 Operand BF 16 ) * ( Quelle 2 Operand BF16 )
    Figure DE112020001258T5_0002
  • 28 veranschaulicht ein Blockdiagramm einer Schaltung 2800 zum Durchführen dieser dp2a-Anweisung für das BF16-Format in einer FPU gemäß einer weiteren Ausführungsform. Diese Anweisung wird Teil des regulären FPU-Betriebs sein (nicht-systolische Pipelines). Diese Anweisung ist nützlich, wenn Produkte keine großen matrixartigen Strukturen unterstützen.
  • Die Schaltung 2800 umfasst Multiplizierer 2810 , 2811 , 2812 (z. B. BF16-Multiplizierer), die jeweils mehrere Eingangsoperanden (z. B. srcl, src2 oder andere Eingangsoperanden) aufweisen. Ein Akkumulator oder Addierer 2820 addiert einen ersten Operanden (src0) mit einer Ausgabe von jedem der Multiplizierer 2810, 2811 und 2812. Der Akkumulator oder Addierer 2820 erzeugt eine Ausgabe 2822 für eine Bestimmung. Die Schaltung 2800 kann für verschiedene Spuren von SIMD mehrfach repliziert werden.
  • Die Schaltung 2800 kann so modifiziert werden, dass sie zusätzliche Multiplizierer oder weniger Multiplizierer aufweist.
  • Kaskaden-Skalarprodukt-Akkumulation
  • Die Schaltung 2700 oder die Schaltung 2800 kann dupliziert werden, wobei eine Ausgabe einer ersten Stufe als Eingabe für eine zweite Stufe vorgesehen ist. Eine Ausgabe der zweiten Stufe kann als Eingabe einer dritten Stufe vorgesehen sein usw.
  • Bei einer Ausführungsform ist eine generische dp2a-Anweisung vorgesehen, um unter Verwendung des BF16-Formats ein Skalarprodukt durchzuführen. Die folgende Anweisung wird Teil des regulären FPU-Betriebs sein. Bestimmung  ( Ausgabe 2922 ) = Quelle 0 Operand FP32 + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 ) + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 )
    Figure DE112020001258T5_0003
    Bestimmung  ( Ausgabe 2962 ) = Ausgabe 2922 Operand FP32 + ( Quelle 1 Operand BF 16 ) * ( Quelle 2 Operand BF16 ) + ( Quelle 1 Operand BF16 ) * ( Quelle 2 Operand BF16 )
    Figure DE112020001258T5_0004
  • 29 veranschaulicht ein Blockdiagramm einer Schaltung 2900 zum Durchführen dieser dp2a-Anweisung für das BF 16-Format in einer FPU gemäß einer Ausführungsform. Diese Anweisung wird Teil des regulären FPU-Betriebs sein (nicht-systolische Pipelines).
  • Die Schaltung 2900 beinhaltet eine erste und eine zweite Stufe, obwohl auch zusätzliche Stufen enthalten sein können. Die erste Stufe 2901 enthält Multiplizierer 2910 und 2911 (z. B. BF16-Multiplizierer), die jeweils Eingangsoperanden (z. B. srcl, src2) multiplizieren. Ein Akkumulator oder Addierer 2920 der ersten Stufe 2901 addiert einen ersten Operanden (src0) mit einer Ausgabe von jedem der Multiplizierer 2910 und 2911. Der Akkumulator oder Addierer 2920 erzeugt eine erste Ausgabe 2922.
  • Die zweite Stufe 2902 enthält Multiplizierer 2960 und 2961 (z. B. BF16-Multiplizierer), die jeweils mehrere Eingangsoperanden (z. B. srcl, src2) aufweisen. Ein Akkumulator oder Addierer 2960 der zweiten Stufe 2902 addiert einen ersten Operanden (Ausgabe 2922) mit einer Ausgabe von jedem der Multiplizierer 2960 und 2961. Der Akkumulator oder Addierer 2960 erzeugt eine zweite Ausgabe 2962 für eine Bestimmung, oder zusätzliche Stufen N könnten der zweiten Stufe folgen.
  • Viele der Verfahren werden in ihrer grundlegendsten Form beschrieben, aber Prozesse können zu jedem der Verfahren hinzugefügt oder daraus gelöscht werden, und Informationen können zu jeder der beschriebenen Nachrichten hinzugefügt oder daraus entfernt werden, ohne vom grundlegenden Schutzumfang der vorliegenden Ausführungsformen abzuweichen. Für Fachleute versteht sich, dass viele weitere Modifikationen und Anpassungen vorgenommen werden können. Die speziellen Ausführungsformen werden nicht bereitgestellt, um das Konzept einzuschränken, sondern um es zu veranschaulichen. Der Schutzumfang der Ausführungsformen soll nicht durch die oben bereitgestellten spezifischen Beispiele bestimmt sein sondern nur durch die unten aufgeführten Ansprüche.
  • Wenn gesagt wird, dass ein Element „A“ an oder mit Element „B,“ gekoppelt ist, kann Element A direkt oder indirekt über beispielsweise Element C an Element B gekoppelt sein. Wenn in der Beschreibung oder den Ansprüchen angegeben ist, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Charakteristik A eine Komponente, ein Merkmal, eine Struktur, einen Prozess oder eine Charakteristik B „bewirkt“, bedeutet dies, dass „A“ zumindest eine Teilursache von „B“ ist, es aber auch mindestens eine andere Komponente, Merkmal, Struktur, Prozess oder Charakteristik geben kann, die dazu beiträgt, „B“ zu verursachen. Wenn die Beschreibung angibt, dass eine Komponente, ein Merkmal, eine Struktur oder eine Charakteristik enthalten sein „kann“ oder „könnte“, muss die spezielle Komponente, das spezielle Merkmal, die spezielle Struktur oder die spezielle Charakteristik nicht notwendigerweise enthalten sein. Wenn sich die Beschreibung oder der Anspruch auf „ein“ Element bezieht, bedeutet dies nicht, dass nur eines der Elemente vorhanden ist.
  • Eine Ausführungsform ist eine Implementierung oder ein Beispiel. In der Schrift bedeutet ein Bezug auf „eine Ausführungsform“, „manche Ausführungsformen“ oder „andere Ausführungsformen“, dass ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Charakteristik, das bzw. die in Verbindung mit den Ausführungsformen beschrieben wird, in zumindest manchen Ausführungsformen, aber nicht zwangsweise allen Ausführungsformen enthalten ist. Die verschiedenen Erscheinungsformen von „einer Ausführungsform“ oder „manchen Ausführungsformen“ beziehen sich nicht notwendigerweise alle auf die gleichen Ausführungsformen. Es versteht sich, dass in der vorstehenden Beschreibung beispielhafter Ausführungsformen verschiedene Merkmale mitunter in einer einzigen Ausführungsform, Figur oder Beschreibung davon zusammengefasst sind, um die Offenbarung zu straffen und zum Verständnis eines oder mehrerer der verschiedenen neuartigen Aspekte beizutragen. Diese Art der Offenbarung darf jedoch nicht als eine Absicht wiedergebend ausgelegt werden, dass die beanspruchten Ausführungsformen mehr Merkmale als ausdrücklich in jedem Anspruch erwähnt erfordern. Vielmehr liegen, wie in den folgenden Ansprüchen wiedergegeben, neuartige Aspekte in weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform. Somit werden die Ansprüche hiermit ausdrücklich in diese Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als separate Ausführungsform steht.
  • Manche Ausführungsformen gehören zu Beispiel 1, das einen Grafikmultiprozessor beinhaltet, der eine Anweisungseinheit zum Versenden von Anweisungen und eine Verarbeitungsressource, die mit der Anweisungseinheit gekoppelt ist, aufweist. Die Verarbeitungsressource ist dafür ausgelegt, eine Skalarproduktakkumulationsanweisung von der Anweisungseinheit zu empfangen und die Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Zahlenformats zu verarbeiten.
  • Beispiel 2 beinhaltet den Erfindungsgegenstand von Beispiel 1, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  • Beispiel 3 beinhaltet den Erfindungsgegenstand von einem der Beispiele 1-2, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  • Beispiel 4 beinhaltet den Erfindungsgegenstand von einem der Beispiele 1-3, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  • Beispiel 5 beinhaltet den Erfindungsgegenstand von einem der Beispiele 1-4, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF 16-Formate sind.
  • Beispiel 6 beinhaltet den Erfindungsgegenstand von einem der Beispiele 1-5, wobei die Verarbeitungsressource eine Gleitkommaeinheit (FPU), um die Skalarproduktakkumulationsanweisung unter Verwendung des BF16-Formats auszuführen, aufweist.
  • Beispiel 7 beinhaltet den Erfindungsgegenstand von einem der Beispiele 1-6, wobei die Anweisungseinheit Anweisungen versenden soll, die Single Instruction Multiple Data (SIMD)-Anweisungen umfassen.
  • Manche Ausführungsformen gehören zu Beispiel 8, das einen Allzweck-Grafikverarbeitungseinheit-Kern bzw. GPGPU-Kern beinhaltet, der eine Gleitkommaeinheit mit einfacher Genauigkeit für Gleitkommaoperationen mit einfacher Genauigkeit und eine Gleitkommaeinheit mit halber Genauigkeit für Gleitkommaoperationen mit halber Genauigkeit aufweist. Die Gleitkommaeinheit mit halber Genauigkeit ist so konfiguriert, dass sie eine Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Formats ausführt.
  • Beispiel 9 beinhaltet den Erfindungsgegenstand von Beispiel 8, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  • Beispiel 10 beinhaltet den Erfindungsgegenstand von einem der Beispiele 8-9, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  • Beispiel 11 beinhaltet den Erfindungsgegenstand von einem der Beispiele 8-10, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  • Beispiel 12 beinhaltet den Erfindungsgegenstand von einem der Beispiele 8-11, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF16-Formate sind.
  • Beispiel 13 beinhaltet den Erfindungsgegenstand von einem der Beispiele 8-12, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass eine erste Stufe des ersten und des zweiten BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator einen ersten Quelloperanden mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert, um eine Ausgabe der ersten Stufe zu erzeugen.
  • Beispiel 14 beinhaltet den Erfindungsgegenstand von einem der Beispiele 8-12, wobei die Skalarproduktakkumulationsanweisung für eine kaskadierte Anordnung mit N Stufen von Multiplizierern und Akkumulatoren bewirkt, dass eine zweite Stufe des ersten und des zweiten BF 16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator die Ausgabe von der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers der zweiten Stufe addiert.
  • Beispiel 15 gehört zu manchen Ausführungsformen, die eine Parallelverarbeitungseinheit beinhalten, die einen ersten Verarbeitungscluster zum Ausführen von parallelen Verarbeitungsoperationen und einen zweiten Verarbeitungscluster, der mit dem ersten Verarbeitungscluster gekoppelt ist, aufweist. Der erste Verarbeitungscluster beinhaltet eine Gleitkommaeinheit zum Ausführen von Gleitkommaoperationen. Die Gleitkommaeinheit ist konfiguriert zum Verarbeiten einer Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Formats.
  • Beispiel 16 beinhaltet den Erfindungsgegenstand von Beispiel 15, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  • Beispiel 17 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-16, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  • Beispiel 18 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-17, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  • Beispiel 19 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-18, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF 16-Formate sind.
  • Beispiel 20 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-19, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass eine erste Stufe des ersten und des zweiten BF 16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF 16-Multiplizierers addiert. wobei die Skalarproduktakkumulationsanweisung für eine kaskadierte Anordnung mit N Stufen von Multiplizierern und Akkumulatoren bewirkt, dass eine zweite Stufe des ersten und des zweiten BF 16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator die Ausgabe von der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF 16-Multiplizierers der zweiten Stufe addiert.
  • Beispiel 21 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-20, wobei die Gleitkommaeinheit eine kaskadierte Anordnung mit N Stufen von BF 16-Multiplizierern und Akkumulatoren aufweist.
  • Beispiel 22 beinhaltet den Erfindungsgegenstand von einem der Beispiele 15-21, wobei die N Stufen Folgendes umfassen: eine erste Stufe des ersten und des zweiten BF16-Multiplizierers, die jeweils den zweiten und den dritten Quelloperanden multiplizieren soll, und einen Akkumulator, der einen ersten Quelloperanden mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addieren soll, um eine Ausgabe der ersten Stufe zu erzeugen, und eine zweite Stufe des ersten und des zweiten BF16-Multiplizierers, die jeweils den zweiten und den dritten Quelloperanden multiplizieren soll, und einen Akkumulator, der die Ausgabe der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers der zweiten Stufe addieren soll.
  • Die vorstehende Beschreibung und Zeichnungen sind in einem veranschaulichenden und nicht einschränkenden Sinne zu betrachten. Fachleute werden verstehen, dass verschiedene Modifikationen und Veränderungen an den hierin beschriebenen Ausführungsformen vorgenommen werden können, ohne von der weiteren Idee und dem Schutzumfang der Erfindung gemäß Darlegung in den angehängten Ansprüchen abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 62/819337 [0001]
    • US 62/819435 [0001]
    • US 62/819361 [0001]
  • Zitierte Nicht-Patentliteratur
    • Abhishek Appu et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0271-Z) [0001]
    • GRAPHICS DATA PROCESSING, von Lakshminarayanan Striramassarma et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0285-Z) [0001]
    • Titel SYSTEMS AND METHODS FOR PARTITIONING CACHE TO REDUCE CACHE ACCESS LATENCY, von Subramaniam Maiyuran, et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0286-Z) [0001]

Claims (22)

  1. Grafikmultiprozessor, umfassend: eine Anweisungseinheit zum Versenden von Anweisungen; und eine Verarbeitungsressource, gekoppelt mit der Anweisungseinheit, wobei die Verarbeitungsressource dafür ausgelegt ist, eine Skalarproduktakkumulationsanweisung von der Anweisungseinheit zu empfangen und die Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Zahlenformats zu verarbeiten.
  2. Grafikmultiprozessor nach Anspruch 1, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  3. Grafik-Multiprozessor nach Anspruch 1, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  4. Grafikmultiprozessor nach Anspruch 2, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  5. Grafikmultiprozessor nach Anspruch 2, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF16-Formate sind.
  6. Grafikmultiprozessor nach Anspruch 1, wobei die Verarbeitungsressource eine Gleitkommaeinheit (FPU), um die Skalarproduktakkumulationsanweisung unter Verwendung des BF16-Formats auszuführen, aufweist.
  7. Grafikmultiprozessor nach Anspruch 1, wobei die Anweisungseinheit Anweisungen versenden soll, die Single Instruction Multiple Data(SIMD)-Anweisungen umfassen.
  8. Allzweck-Grafikverarbeitungseinheit-Kern bzw. GPGPU-Kern, umfassend: eine Gleitkommaeinheit mit einfacher Genauigkeit für Gleitkommaoperationen mit einfacher Genauigkeit; und eine Gleitkommaeinheit mit halber Genauigkeit für Gleitkommaoperationen mit halber Genauigkeit, wobei die Gleitkommaeinheit mit halber Genauigkeit so konfiguriert ist, dass sie eine Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Formats ausführt.
  9. GPGPU-Kern nach Anspruch 8, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  10. GPGPU-Kern nach Anspruch 9, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  11. GPGPU-Kern nach Anspruch 9, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  12. GPGPU-Kern nach Anspruch 9, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF16-Formate sind.
  13. GPGPU-Kern nach Anspruch 8, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass eine erste Stufe des ersten und des zweiten BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator einen ersten Quelloperanden mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert, um eine Ausgabe der ersten Stufe zu erzeugen.
  14. GPGPU-Kern nach Anspruch 13, wobei die Skalarproduktakkumulationsanweisung für eine kaskadierte Anordnung mit N Stufen von Multiplizierern und Akkumulatoren bewirkt, dass eine zweite Stufe des ersten und des zweiten BF16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator die Ausgabe von der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers der zweiten Stufe addiert.
  15. Parallelverarbeitungseinheit, umfassend: einen ersten Verarbeitungscluster zum Durchführen von parallelen Verarbeitungsoperationen; und einen zweiten Verarbeitungscluster, gekoppelt mit dem ersten Verarbeitungscluster, wobei der erste Verarbeitungscluster eine Gleitkommaeinheit zum Durchführen von Gleitkommaoperationen beinhaltet, wobei die Gleitkommaeinheit konfiguriert ist zum Verarbeiten einer Skalarproduktakkumulationsanweisung unter Verwendung eines bfloat16(BF16)-Formats.
  16. Parallelverarbeitungseinheit nach Anspruch 15, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass der erste und der zweite BF16-Multiplizierer jeweils den zweiten und den dritten Quelloperanden multiplizieren, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert.
  17. Parallelverarbeitungseinheit nach Anspruch 16, wobei der Akkumulator eine Ausgabe für eine Bestimmung erzeugt.
  18. Parallelverarbeitungseinheit nach Anspruch 16, wobei der erste Quelloperand ein Gleitkommaformat mit einfacher Genauigkeit aufweist, während der zweite und der dritte Quelloperand das BF16-Format aufweisen.
  19. Parallelverarbeitungseinheit nach Anspruch 16, wobei der erste Quelloperand und die Bestimmung Gleitkommaformat mit halber Genauigkeit, Gleitkommaformat mit einfacher Genauigkeit oder BF16-Formate sind.
  20. Parallelverarbeitungseinheit nach Anspruch 15, wobei die Skalarproduktakkumulationsanweisung bewirkt, dass eine erste Stufe des ersten und des zweiten BF 16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator einen ersten Quelloperanden mit der Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addiert, wobei die Skalarproduktakkumulationsanweisung für eine kaskadierte Anordnung mit N Stufen von Multiplizierern und Akkumulatoren bewirkt, dass eine zweite Stufe des ersten und des zweiten BF 16-Multiplizierers jeweils den zweiten und den dritten Quelloperanden multipliziert, während ein Akkumulator die Ausgabe von der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF 16-Multiplizierers der zweiten Stufe addiert.
  21. Parallelverarbeitungseinheit nach Anspruch 15, wobei die Gleitkommaeinheit eine kaskadierte Anordnung mit N Stufen von BF16-Multiplizierern und Akkumulatoren aufweist.
  22. Parallelverarbeitungseinheit nach Anspruch 21, wobei die N Stufen umfassen: eine erste Stufe des ersten und des zweiten BF 16-Multiplizierers, die jeweils den zweiten und den dritten Quelloperanden multiplizieren soll, und einen Akkumulator, der einen ersten Quelloperanden mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers addieren soll, um eine Ausgabe der ersten Stufe zu erzeugen; und eine zweite Stufe des ersten und des zweiten BF16-Multiplizierers, die jeweils den zweiten und den dritten Quelloperanden multiplizieren soll, und einen Akkumulator, der die Ausgabe der ersten Stufe mit einer Ausgabe von jedem des ersten und des zweiten BF16-Multiplizierers der zweiten Stufe addieren soll.
DE112020001258.1T 2019-03-15 2020-03-14 Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat Pending DE112020001258T5 (de)

Applications Claiming Priority (7)

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
US62/819,361 2019-03-15
US62/819,435 2019-03-15
US62/819,337 2019-03-15
PCT/US2020/022852 WO2020190814A1 (en) 2019-03-15 2020-03-14 Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format

Publications (1)

Publication Number Publication Date
DE112020001258T5 true DE112020001258T5 (de) 2021-12-23

Family

ID=70277485

Family Applications (4)

Application Number Title Priority Date Filing Date
DE112020001256.5T Pending DE112020001256T5 (de) 2019-03-15 2020-03-14 Kompressionstechniken
DE112020000850.9T Pending DE112020000850T5 (de) 2019-03-15 2020-03-14 Cache-Struktur und -Nutzung
DE112020000874.6T Pending DE112020000874T5 (de) 2019-03-15 2020-03-14 Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration
DE112020001258.1T Pending DE112020001258T5 (de) 2019-03-15 2020-03-14 Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat

Family Applications Before (3)

Application Number Title Priority Date Filing Date
DE112020001256.5T Pending DE112020001256T5 (de) 2019-03-15 2020-03-14 Kompressionstechniken
DE112020000850.9T Pending DE112020000850T5 (de) 2019-03-15 2020-03-14 Cache-Struktur und -Nutzung
DE112020000874.6T Pending DE112020000874T5 (de) 2019-03-15 2020-03-14 Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration

Country Status (10)

Country Link
US (23) US20220180467A1 (de)
EP (9) EP3938915A1 (de)
JP (5) JP7420440B2 (de)
KR (2) KR102596790B1 (de)
CN (15) CN113366447A (de)
BR (1) BR112021016111A2 (de)
DE (4) DE112020001256T5 (de)
ES (2) ES2964969T3 (de)
PL (2) PL3938894T3 (de)
WO (15) WO2020190811A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11361496B2 (en) 2019-03-15 2022-06-14 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
US11676239B2 (en) 2019-03-15 2023-06-13 Intel Corporation Sparse optimizations for a matrix accelerator architecture

Families Citing this family (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017049594A1 (en) * 2015-09-25 2017-03-30 Intel Corporation Efficient memory activation at runtime
EP3549350A4 (de) 2016-11-29 2021-03-24 Intel Corporation Technologien für millimeterwellen-rack-verbindungen
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
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
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
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
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
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
US11687629B2 (en) * 2020-06-12 2023-06-27 Baidu Usa Llc Method for data protection in a data processing cluster with authentication
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 삼성전자주식회사 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템
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
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
US11615320B1 (en) 2020-06-30 2023-03-28 Cadence Design Systems, Inc. Method, product, and apparatus for variable precision weight management for neural networks
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
GB2596864A (en) * 2020-07-10 2022-01-12 Graphcore Ltd Machine learning computer
JP2022016795A (ja) * 2020-07-13 2022-01-25 富士通株式会社 情報処理装置、情報処理プログラムおよび情報処理方法
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
US11658922B2 (en) 2020-08-31 2023-05-23 Micron Technology, Inc. Optional path ordering in packet-based network
US11636041B2 (en) * 2020-10-12 2023-04-25 Seagate Technology Llc Object storage data storage systems and methods
US20220164663A1 (en) * 2020-11-24 2022-05-26 Arm Limited Activation Compression Method for Deep Learning Acceleration
CN112506567B (zh) * 2020-11-27 2022-11-04 海光信息技术股份有限公司 数据读取方法和数据读取电路
US20220188492A1 (en) * 2020-12-10 2022-06-16 Memryx Incorporated Chiplet based artificial intelligence accelerators and configuration methods
US20220197793A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Compressed cache memory with decompress on fault
US20220197799A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Instruction and Micro-Architecture Support for Decompression on Core
US20220197642A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Processor instructions for data compression and decompression
US20210209035A1 (en) * 2020-12-26 2021-07-08 Intel Corporation Memory accesses using a memory hub
GB2605375B (en) * 2021-03-29 2023-11-29 Advanced Risc Mach Ltd Data processors
KR20220153330A (ko) * 2021-05-11 2022-11-18 한국전자통신연구원 메모리 접근 방법 및 장치
US20220414967A1 (en) * 2021-06-24 2022-12-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
US20230004385A1 (en) * 2021-06-30 2023-01-05 Advanced Micro Devices, Inc. Accelerated processing device and method of sharing data for machine learning
US20220335563A1 (en) * 2021-07-06 2022-10-20 Intel Corporation Graphics processing unit with network interfaces
US20230032137A1 (en) * 2021-08-02 2023-02-02 Red Hat, Inc. Efficient dirty page expiration
US20230067810A1 (en) * 2021-08-31 2023-03-02 Intel Corporation Bfloat16 fused multiply instructions
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
US20230100036A1 (en) * 2021-09-24 2023-03-30 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
US20230119235A1 (en) * 2021-10-19 2023-04-20 Google Llc Large-Scale Accelerator System Energy Performance Optimization
US20230148225A1 (en) * 2021-11-05 2023-05-11 Intel Corporation Joint denoising and supersampling of graphics data
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
US20230195626A1 (en) * 2021-12-21 2023-06-22 Advanced Micro Devices, Inc. Variable dispatch walk for successive cache accesses
CN114331806A (zh) * 2022-03-17 2022-04-12 南京砺算科技有限公司 图形处理器及图形处理方法
US20230315328A1 (en) * 2022-03-18 2023-10-05 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
US20240004562A1 (en) * 2022-06-30 2024-01-04 Advanced Micro Devices, Inc. Dynamic memory reconfiguration
GB2622074A (en) * 2022-09-01 2024-03-06 Advanced Risc Mach Ltd Cache systems
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
TWI818732B (zh) * 2022-09-16 2023-10-11 新唐科技股份有限公司 記憶體裝置及其操作方法
CN115391124B (zh) * 2022-10-27 2023-03-21 瀚博半导体(上海)有限公司 一种面向图形芯片功耗测试的方法及装置
CN116755779B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 循环间隔的确定方法、装置、设备、存储介质及芯片
CN117130663A (zh) * 2023-09-19 2023-11-28 摩尔线程智能科技(北京)有限责任公司 一种指令读取方法及l2指令缓存、电子设备和存储介质

Family Cites Families (375)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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 三菱電機株式会社 データ処理装置
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
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
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
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
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
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
US7102646B1 (en) 1997-11-25 2006-09-05 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6856320B1 (en) * 1997-11-25 2005-02-15 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
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
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
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
KR100800468B1 (ko) 2004-01-29 2008-02-01 삼성전자주식회사 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법
US8253750B1 (en) 2004-02-14 2012-08-28 Nvidia Corporation Digital media 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
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
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
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
WO2006120664A2 (en) 2005-05-13 2006-11-16 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
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
US7659899B2 (en) 2005-08-08 2010-02-09 Via Technologies, Inc. System and method to manage data processing stages of a logical graphics pipeline
US20070030277A1 (en) 2005-08-08 2007-02-08 Via Technologies, Inc. Method for processing vertex, triangle, and pixel graphics data packets
US20070074008A1 (en) 2005-09-28 2007-03-29 Donofrio David D Mixed mode floating-point pipeline with extended functions
US8004531B2 (en) 2005-10-14 2011-08-23 Via Technologies, Inc. Multiple graphics processor systems and methods
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
US20080030510A1 (en) 2006-08-02 2008-02-07 Xgi Technology Inc. Multi-GPU rendering system
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
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
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
DE112008003643A5 (de) 2007-11-17 2010-10-28 Krass, Maren Rekonfigurierbare Fliesskomma- und Bit- ebenen Datenverarbeitungseinheit
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
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
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
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
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
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
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
US8364739B2 (en) 2009-09-30 2013-01-29 International Business Machines Corporation Sparse matrix-vector multiplication on graphics processor units
US8713294B2 (en) 2009-11-13 2014-04-29 International Business Machines Corporation Heap/stack guard pages using a wakeup unit
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
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
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
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
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
US20130141442A1 (en) * 2011-12-06 2013-06-06 John W. Brothers Method and apparatus for multi-chip processing
US20130148947A1 (en) * 2011-12-13 2013-06-13 Ati Technologies Ulc Video player with multiple grpahics processors
US9960917B2 (en) 2011-12-22 2018-05-01 Intel Corporation Matrix multiply accumulate instruction
US9792115B2 (en) 2011-12-23 2017-10-17 Intel Corporation Super multiply add (super MADD) instructions 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
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
US9036710B2 (en) 2012-03-08 2015-05-19 Blackberry Limited Unified transform coefficient encoding and decoding
US8775762B2 (en) 2012-05-07 2014-07-08 Advanced Micro Devices, Inc. Method and apparatus for batching memory requests
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系统
JP6007667B2 (ja) 2012-08-17 2016-10-12 富士通株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
US9298456B2 (en) 2012-08-21 2016-03-29 Apple Inc. Mechanism for performing speculative predicated instructions
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
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
US11150721B2 (en) 2012-11-07 2021-10-19 Nvidia Corporation Providing hints to an execution unit to prepare for predicted subsequent arithmetic operations
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
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
US9971710B2 (en) * 2013-02-07 2018-05-15 Microsoft Technology Licensing, Llc Optimizing data transfers between heterogeneous memory arenas
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
US9940286B2 (en) 2013-03-14 2018-04-10 Nvidia Corporation PCIE traffic tracking hardware in a unified virtual memory system
US10133677B2 (en) 2013-03-14 2018-11-20 Nvidia Corporation Opportunistic migration of memory pages in a unified virtual memory system
US9525586B2 (en) 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
GB2514397B (en) 2013-05-23 2017-10-11 Linear Algebra Tech Ltd Corner detection
JP2016526220A (ja) 2013-05-24 2016-09-01 コーヒレント・ロジックス・インコーポレーテッド プログラム可能な最適化を有するメモリネットワークプロセッサ
US9378127B2 (en) * 2013-06-21 2016-06-28 Intel Corporation Dynamic memory page policy
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
JP2015103077A (ja) 2013-11-26 2015-06-04 富士通株式会社 演算処理装置、情報処理装置、及び、情報処理装置の制御方法
TWI676898B (zh) 2013-12-09 2019-11-11 安然國際科技有限公司 分散式記憶體磁碟群集儲存系統運作方法
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
KR102100161B1 (ko) * 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
US9391771B2 (en) 2014-02-06 2016-07-12 Empire Technology Development Llc Server-client secret generation with cached data
US9275429B2 (en) * 2014-02-17 2016-03-01 Qualcomm Incorporated Device hang detection and recovery
KR20150106132A (ko) 2014-03-11 2015-09-21 삼성전자주식회사 전자 장치의 캐시 메모리 제어 방법 및 장치
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 (de) * 2014-04-22 2016-08-17 DataVard GmbH Verfahren und System zum Archivieren von digitalen Daten
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
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
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
KR101817847B1 (ko) * 2014-12-14 2018-02-21 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 메모리 접근 타입에 기초한 통로에 의해 버짓화된 캐시 메모리
EP3129890B1 (de) * 2014-12-14 2019-08-14 VIA Alliance Semiconductor Co., Ltd. Satzassoziativer cache-speicher mit heterogener ersatzpolitik
US9898411B2 (en) * 2014-12-14 2018-02-20 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
FR3030846B1 (fr) 2014-12-23 2017-12-29 Commissariat Energie Atomique Representation semantique du contenu d'une image
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
US20160255169A1 (en) 2015-02-27 2016-09-01 Futurewei Technologies, Inc. Method and system for smart object eviction for proxy cache
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
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
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
US10423354B2 (en) * 2015-09-23 2019-09-24 Advanced Micro Devices, Inc. Selective data copying between memory modules
WO2017049496A1 (en) 2015-09-23 2017-03-30 Intel Corporation Apparatus and method for local quantization for convolutional neural networks (cnns)
WO2017049592A1 (en) 2015-09-25 2017-03-30 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
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
US10869391B2 (en) * 2016-02-12 2020-12-15 Toyobo Co., Ltd. Garment-type electronic device and method for producing same
US9778871B1 (en) 2016-03-27 2017-10-03 Qualcomm Incorporated Power-reducing memory subsystem having a system cache and local resource management
US20170308800A1 (en) 2016-04-26 2017-10-26 Smokescreen Intelligence, LLC Interchangeable Artificial Intelligence Perception Systems and Methods
CN107315718B (zh) 2016-04-26 2020-08-21 中科寒武纪科技股份有限公司 一种用于执行向量内积运算的装置和方法
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
US10091904B2 (en) 2016-07-22 2018-10-02 Intel Corporation Storage sled for data center
CN107689828B (zh) 2016-08-04 2019-12-24 柯莉娟 以无人机复原飞行器内通信传输功能的方法
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
US10242311B2 (en) 2016-08-11 2019-03-26 Vivante Corporation Zero coefficient skipping convolution neural network engine
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
KR20180050124A (ko) 2016-11-04 2018-05-14 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
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
KR20180069461A (ko) 2016-12-15 2018-06-25 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
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
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
DK3812900T3 (da) 2016-12-31 2024-02-12 Intel Corp Systemer, fremgangsmåder og apparater til heterogen beregning
US20180210836A1 (en) * 2017-01-24 2018-07-26 Microsoft Technology Licensing, Llc Thermal and reliability based cache slice migration
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
US10209890B2 (en) * 2017-03-28 2019-02-19 International Business Machines Corporation Near memory accelerator
US10595039B2 (en) 2017-03-31 2020-03-17 Nvidia Corporation System and method for content and motion controlled action video generation
US10229059B2 (en) * 2017-03-31 2019-03-12 Intel Corporation Dynamic fill policy for a shared cache
US10303602B2 (en) 2017-03-31 2019-05-28 Advanced Micro Devices, Inc. Preemptive cache management policies for processing units
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10423415B2 (en) * 2017-04-01 2019-09-24 Intel Corporation Hierarchical general register file (GRF) for execution block
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
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
TWI689873B (zh) 2017-05-17 2020-04-01 美商谷歌有限責任公司 用於執行矩陣乘法之方法、硬體電路、運算系統及電腦儲存媒體
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
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
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 현대건설주식회사 피씨 더블월을 이용한 벽체 구조물의 시공방법
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
GB2569271B (en) * 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
GB2569844B (en) * 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip
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
EP3719712B1 (de) 2017-12-27 2022-09-07 Cambricon Technologies Corporation Limited Integrierte schaltungschipvorrichtung
US10482156B2 (en) 2017-12-29 2019-11-19 Facebook, Inc. Sparsity-aware hardware accelerators
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
CN111788583A (zh) 2018-02-09 2020-10-16 渊慧科技有限公司 连续稀疏性模式神经网络
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 富士通株式会社 行列演算装置、行列演算方法および行列演算プログラム
US20190278593A1 (en) * 2018-03-09 2019-09-12 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
WO2019197661A1 (en) 2018-04-13 2019-10-17 Koninklijke Kpn N.V. Frame-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
US10699468B2 (en) 2018-06-09 2020-06-30 Adshir Ltd. Method for non-planar specular reflections in hybrid ray tracing
US10620951B2 (en) 2018-06-22 2020-04-14 Intel Corporation Matrix multiplication acceleration of sparse matrices using column folding and squeezing
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
EP3690679A4 (de) 2018-08-06 2021-02-17 Huawei Technologies Co., Ltd. Matrixverarbeitungsverfahren und -vorrichtung sowie logische schaltung
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
US20190042457A1 (en) 2018-08-22 2019-02-07 Intel Corporation Cache (partition) size determination method and apparatus
KR20200022118A (ko) * 2018-08-22 2020-03-03 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
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
US10853067B2 (en) 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US11294626B2 (en) 2018-09-27 2022-04-05 Intel Corporation Floating-point dynamic range expansion
EP3857387A4 (de) 2018-09-28 2022-05-18 INTEL Corporation Adressumsetzungspuffer zur implementierung einer adapativen seitengrösse
GB2578097B (en) 2018-10-15 2021-02-17 Advanced Risc Mach Ltd Cache control circuitry and methods
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
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
GB2580151B (en) * 2018-12-21 2021-02-24 Graphcore Ltd Identifying processing units in a 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
US10909741B2 (en) 2018-12-28 2021-02-02 Intel Corporation Speculative execution of hit and intersection shaders on programmable ray tracing architectures
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
US10915461B2 (en) 2019-03-05 2021-02-09 International Business Machines Corporation Multilevel cache eviction management
CN113383310A (zh) 2019-03-15 2021-09-10 英特尔公司 矩阵加速器架构内的脉动分解
EP4024223A1 (de) 2019-03-15 2022-07-06 Intel Corporation Systeme und verfahren zur cache-optimierung
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US10630606B1 (en) 2019-03-18 2020-04-21 Brightways Corporation System, method and architecture for data center network switching
US11036642B2 (en) 2019-04-26 2021-06-15 Intel Corporation Architectural enhancements for computing systems having artificial intelligence logic disposed locally to memory
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
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
US20220100518A1 (en) 2020-09-25 2022-03-31 Advanced Micro Devices, Inc. Compression metadata assisted computation
US20220197975A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Apparatus and method for conjugate transpose and multiply
US20220335563A1 (en) 2021-07-06 2022-10-20 Intel Corporation Graphics processing unit with network interfaces

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Abhishek Appu et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0271-Z)
GRAPHICS DATA PROCESSING, von Lakshminarayanan Striramassarma et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0285-Z)
Titel SYSTEMS AND METHODS FOR PARTITIONING CACHE TO REDUCE CACHE ACCESS LATENCY, von Subramaniam Maiyuran, et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0286-Z)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11361496B2 (en) 2019-03-15 2022-06-14 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
US11676239B2 (en) 2019-03-15 2023-06-13 Intel Corporation Sparse optimizations for a matrix accelerator architecture
US11709793B2 (en) 2019-03-15 2023-07-25 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
US11842423B2 (en) 2019-03-15 2023-12-12 Intel Corporation Dot product operations on sparse matrix elements
US11954063B2 (en) 2019-03-15 2024-04-09 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format

Also Published As

Publication number Publication date
US20230195685A1 (en) 2023-06-22
EP3938894A1 (de) 2022-01-19
EP3938912B1 (de) 2023-09-20
PL3938894T3 (pl) 2024-02-19
WO2020190803A1 (en) 2020-09-24
US20220180467A1 (en) 2022-06-09
CN113508362A (zh) 2021-10-15
PL3938912T3 (pl) 2024-03-18
WO2020190814A1 (en) 2020-09-24
WO2020190799A3 (en) 2020-10-29
WO2020190810A1 (en) 2020-09-24
US20220197800A1 (en) 2022-06-23
US20220261347A1 (en) 2022-08-18
DE112020000850T5 (de) 2022-01-20
JP2022523912A (ja) 2022-04-27
WO2020190804A1 (en) 2020-09-24
US20220129271A1 (en) 2022-04-28
JP7414894B2 (ja) 2024-01-16
US20220365901A1 (en) 2022-11-17
US20240086357A1 (en) 2024-03-14
US11709793B2 (en) 2023-07-25
US20240086356A1 (en) 2024-03-14
KR20230155596A (ko) 2023-11-10
DE112020000874T5 (de) 2021-11-11
CN113396401A (zh) 2021-09-14
US20220107914A1 (en) 2022-04-07
JP2022519510A (ja) 2022-03-24
WO2020190801A1 (en) 2020-09-24
JP7107482B2 (ja) 2022-07-27
US20230014565A1 (en) 2023-01-19
CN113454587A (zh) 2021-09-28
WO2020190797A1 (en) 2020-09-24
EP4270201A2 (de) 2023-11-01
US11954063B2 (en) 2024-04-09
US20220138101A1 (en) 2022-05-05
EP3938913A1 (de) 2022-01-19
CN113383304A (zh) 2021-09-10
BR112021016111A2 (pt) 2021-11-09
US20220066931A1 (en) 2022-03-03
CN113424148A (zh) 2021-09-21
JP2022183406A (ja) 2022-12-09
CN113424162A (zh) 2021-09-21
JP7420440B2 (ja) 2024-01-23
WO2020190811A1 (en) 2020-09-24
JP2022523909A (ja) 2022-04-27
WO2020190799A2 (en) 2020-09-24
EP3938895A1 (de) 2022-01-19
EP3938912A1 (de) 2022-01-19
CN113439265A (zh) 2021-09-24
WO2020190812A1 (en) 2020-09-24
WO2020190806A1 (en) 2020-09-24
US20220122215A1 (en) 2022-04-21
ES2965299T3 (es) 2024-04-12
EP3974968A1 (de) 2022-03-30
EP4270201A3 (de) 2024-01-31
WO2020190805A1 (en) 2020-09-24
EP3938894B1 (de) 2023-08-30
CN113366435A (zh) 2021-09-07
CN113366437A (zh) 2021-09-07
WO2020190813A1 (en) 2020-09-24
US20220129521A1 (en) 2022-04-28
US11361496B2 (en) 2022-06-14
WO2020190800A1 (en) 2020-09-24
US11620256B2 (en) 2023-04-04
EP3938891A1 (de) 2022-01-19
WO2020190802A1 (en) 2020-09-24
EP3938914A1 (de) 2022-01-19
US20220179787A1 (en) 2022-06-09
JP2024041826A (ja) 2024-03-27
US11899614B2 (en) 2024-02-13
US20220129266A1 (en) 2022-04-28
CN117689531A (zh) 2024-03-12
CN113366447A (zh) 2021-09-07
US11954062B2 (en) 2024-04-09
US20220114096A1 (en) 2022-04-14
US20210312697A1 (en) 2021-10-07
CN113396390A (zh) 2021-09-14
US20220138104A1 (en) 2022-05-05
WO2020190798A1 (en) 2020-09-24
ES2964969T3 (es) 2024-04-10
US20220171710A1 (en) 2022-06-02
US20220121421A1 (en) 2022-04-21
KR20210114495A (ko) 2021-09-23
EP3938915A1 (de) 2022-01-19
DE112020001256T5 (de) 2022-01-05
CN113396400A (zh) 2021-09-14
CN114968366A (zh) 2022-08-30
US20220138895A1 (en) 2022-05-05
KR102596790B1 (ko) 2023-11-01
US20220129265A1 (en) 2022-04-28
CN113366454A (zh) 2021-09-07

Similar Documents

Publication Publication Date Title
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE112020000846T5 (de) Architektur für Block-Sparse-Operationen an einem systolischen Array
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE112020000848T5 (de) Skalarkernintegration
DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R130 Divisional application to

Ref document number: 112020003700

Country of ref document: DE