JP2022523912A - 圧縮技術 - Google Patents

圧縮技術 Download PDF

Info

Publication number
JP2022523912A
JP2022523912A JP2021544544A JP2021544544A JP2022523912A JP 2022523912 A JP2022523912 A JP 2022523912A JP 2021544544 A JP2021544544 A JP 2021544544A JP 2021544544 A JP2021544544 A JP 2021544544A JP 2022523912 A JP2022523912 A JP 2022523912A
Authority
JP
Japan
Prior art keywords
memory
processing
processor
data
graphic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2021544544A
Other languages
English (en)
Other versions
JP7420440B2 (ja
Inventor
アール. アップ、アビーシェク
コカー、アルトゥグ
アナンタラマン、アラヴィンド
ウルド-アハメド-ヴァル、エルモウスタファ
レイ、ジョイディープ
マクファーソン、マイク
アンドレイ、ヴァレンティン
ヴォン ボリース、ニコラス ガロッポ
ジョージ、ヴァルギース
マイユラン、スブラマニアム
ランガナサン、ヴァサンス
ピー エス、ジャヤクリシュナ
ケイ、パッタビーラマン
カンマ、スダカル
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 JP2022523912A publication Critical patent/JP2022523912A/ja
Application granted granted Critical
Publication of JP7420440B2 publication Critical patent/JP7420440B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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 or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Operations Research (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Computer Graphics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

データ圧縮技術に関する方法および装置。例では、装置は、プロセッサが、メモリセグメントに対するデータ圧縮命令を受信し、データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するとの判定に応答して、同一メモリ値のシーケンスを圧縮する。他の実施形態もまた開示され、特許請求される。

Description

[優先権主張と関連出願の相互参照]
本願は、35 U.S.C.119(e)に関連および従属し、Abhishek Appu,ら(弁護士登録番号AC0271-Z)により2019年3月15日に出願され、グラフィック処理と題された米国仮出願62/819,337と、Lakshminarayanan Striramassarmaら(弁護士登録番号AC0285-Z)により2019年3月15日に出願され、グラフィックデータ処理と題された62/819,435と、Subramaniam Maiyuranら(弁護士登録番号AC0286-Z)により2019年3月15日に出願され、キャッシュ・アクセス・レイテンシーを低減するためにキャッシュをパーティショニングするシステムおよび方法と題された62/819,361の利益と優先権を主張し、これらすべての内容は参照により本明細書に組み込まれる。
[フィールド]
本開示は、概して、データ処理に関し、より具体的には、汎用グラフィック処理ユニットを介したデータ処理に関する。
現在の並列グラフィックデータ処理には、例えば、線形補間、テッセレーション、ラスタライズ、テクスチャマッピング、デプステストなどといった特定の処理をグラフィックデータなどに対し実行するように開発されたシステムおよび方法が含まれる。従来、グラフィックプロセッサは、グラフィックデータを処理するための固定の機能計算ユニットを用いてきたが、しかしながら、より最近には、グラフィックプロセッサの一部がプログラム可能とされ、そのようなプロセッサは、頂点およびフラグメントデータの処理のために、より広い種類の操作をサポートすることを可能とする。
さらに性能を高めるように、グラフィックプロセッサは典型的には、グラフィックパイプラインの異なる部分にわたって可能な限り多くのグラフィックデータを並列に処理しようと試みる、パイプライニングなどの処理技術を実装する。単一の命令で複数のスレッド(SIMT)アーキテクチャによる並列グラフィックプロセッサは、グラフィックパイプラインにおける並列処理量を最大化するように設計される。SIMTアーキテクチャにおいて、並列スレッドのグループは、処理効率を高めるように、可能な限り頻繁に、プログラム命令を一緒に同期的に実行しようと試みる。SIMTアーキテクチャに関するソフトウェアおよびハードウェアの一般的な概要は、Shane Cook,CUDAプログラミング、第3章、ページ37-51(2013)に見ることができる。
これにより、本実施形態の上の記載の特徴が詳細に、上に簡潔に要約された実施形態のより具体的な説明において、理解され得る方式が、実施形態を参照することにより示され得、それらのうちいくつかは添付図面において図示される。しかしながら、添付図面は、典型的な実施形態のみを示し、従って、その範囲を限定すると考慮されるべきではないことが、留意されるべきである。
本明細書に説明された実施形態の1またはより多くの態様を実装するように構成された、コンピュータシステムを示すブロック図である。
並列プロセッサコンポーネントを示す。 並列プロセッサコンポーネントを示す。 並列プロセッサコンポーネントを示す。 並列プロセッサコンポーネントを示す。
グラフィックマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。 グラフィックマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。 グラフィックマルチプロセッサおよびマルチプロセッサベースのGPUのブロック図である。
複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。 複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
グラフィック処理パイプラインを示す。
機械学習ソフトウェアスタックを示す。
汎用グラフィック処理ユニットを示す。
マルチGPUコンピューティングシステムを示す。
例示的なディープニューラルネットワークの層を示す。 例示的なディープニューラルネットワークの層を示す。
例示的な再帰型ニューラルネットワークを示す。
ディープニューラルネットワークの訓練及び展開を示す。
分散型学習を示すブロック図である。
訓練されたモデルを使用して推論を実行するのに好適な例示的な推論システムオンチップ(SOC)を示す。
処理システムのブロック図である。
コンピューティングシステムおよびグラフィックプロセッサを示す。 コンピューティングシステムおよびグラフィックプロセッサを示す。 コンピューティングシステムおよびグラフィックプロセッサを示す。
追加のグラフィックプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。 追加のグラフィックプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。 追加のグラフィックプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。
グラフィックプロセッサのグラフィック処理エンジンのブロック図である。
グラフィックプロセッサコアで用いられる処理要素のアレイを含むスレッド実行ロジックを示す。 グラフィックプロセッサコアで用いられる処理要素のアレイを含むスレッド実行ロジックを示す。
追加の実行ユニットを示す。
グラフィックプロセッサ命令フォーマットを示すブロック図である。
追加のグラフィックプロセッサアーキテクチャのブロック図である。
グラフィックプロセッサコマンドフォーマットおよびコマンドシーケンスを示す。 グラフィックプロセッサコマンドフォーマットおよびコマンドシーケンスを示す。
データ処理システムのための例示的なグラフィックソフトウェアアーキテクチャを示す。
IPコア開発システムを示すブロック図である。
集積回路パッケージアセンブリの断面図を示す。
基板に接続されるハードウェアロジックチップレット(例えば、ベースダイ)の複数のユニットを含むパッケージアセンブリを示す。
置き換え可能なチップレットを含むパッケージアセンブリを示す。
チップ集積回路上の例示的なシステムを示すブロック図である。
SoC内で用いるための例示的なグラフィックプロセッサを示すブロック図である。 SoC内で用いるための例示的なグラフィックプロセッサを示すブロック図である。
実施形態に基づく、圧縮技術を実装する方法における処理を示すフローチャートである。 実施形態に基づく、圧縮技術を実装する方法における処理を示すフローチャートである。
実施形態に基づく、ビット列の圧縮および圧縮解除の模式図である。
実施形態に基づく、動的バイトサイズ最頻値圧縮を実施する方法における処理を示すフローチャートである。
実施形態に基づく、動的バイトサイズ最頻値圧縮が実装される可能性のあるキャッシュ構造を示す模式図である。
実施形態に基づく、書き込み処理加速技術を実行するように構成されたメモリコントローラの模式図である。
実施形態に基づく、書き込み処理の加速化技術を実装する方法における処理を示すフローチャートである。 実施形態に基づく、書き込み処理の加速化技術を実装する方法における処理を示すフローチャートである。 実施形態に基づく、書き込み処理の加速化技術を実装する方法における処理を示すフローチャートである。 他の例の処理を示す図である。 他の例の処理を示す図である。
グラフィック処理ユニット(GPU)は、例えば、グラフィック処理、機械学習処理、パターン解析処理および/または様々な汎用GPU(GPGPU)機能を加速化すべく、ホスト/プロセッサコアに通信可能に結合されている。GPUは、バスまたは別の相互接続(例えば、PCIeまたはNVリンク等の高速相互接続)経由で、ホストプロセッサ/コアに通信可能に結合されてよい。代替的に、GPUは、当該コアと同一のパッケージまたはチップ上で統合されてよく、内部プロセッサバス/相互接続(つまり、パッケージまたはチップの内部)経由上でコアに通信可能に結合されてよい。GPUの接続態様に関わらず、プロセッサコアは、GPUに対し、ワーク記述子に含まれるコマンド/命令のシーケンスの形態で、ワークをGPUに割り当ててよい。その後、GPUは、これらのコマンド/命令を効率的に処理するために、専用回路/ロジックを用いる。
以下の説明においては、より完全な理解を提供すべく、多数の具体的な詳細について記載されている。しかしながら、これらの具体的な詳細のうち、1または複数がなくても、本明細書で説明する実施形態を実施可能であることは当業者にとって明らかであろう。他の例においては、本実施形態の詳細を不明瞭にするのを回避するため、周知の機能については説明されていない。
「システムの概要」
図1は、本明細書で説明する実施形態の1または複数の態様を実装するよう構成されたコンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、メモリハブ105を含んでよい相互接続パスを介して通信する1または複数のプロセッサ102およびシステムメモリ104を有する処理サブシステム101を含む。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであってよく、または、1または複数のプロセッサ102内に統合されていてもよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111に結合される。I/Oサブシステム111は、コンピューティングシステム100が、1または複数の入力デバイス108から入力を受信できるようにするI/Oハブ107を含む。追加で、I/Oハブ107は、1または複数のプロセッサ102内に含まれてよいディスプレイコントローラが、1または複数のディスプレイデバイス110Aに出力を提供できるようにしてよい。一実施形態において、I/Oハブ107に結合された1または複数のディスプレイデバイス110Aは、ローカルの、内部の、または埋め込みされたディスプレイデバイスを含んでよい。
処理サブシステム101は、例えば、バスまたは他の通信リンク113を介してメモリハブ105に結合された1または複数の並列プロセッサ112を含む。通信リンク113は、限定ではないが、PCI Express等といった、任意の数の標準ベースの通信リンク技術またはプロトコルのうちの1つであってよく、あるいは、ベンダ特有の通信インタフェースまたは通信ファブリックであってよい。1または複数の並列プロセッサ112は、多数の集積コア(MIC)プロセッサ等の多数のプロセッシングコアおよび/または処理クラスタを含んでよい計算集中的な並列またはベクトル処理システムを形成してよい。例えば、1または複数の並列プロセッサ112は、I/Oハブ107を介して結合された1または複数のディスプレイデバイス110Aのうちの1つに、画素を出力可能なグラフィック処理サブシステムを形成する。また、1または複数の並列プロセッサ112は、1または複数のディスプレイデバイス110Bへの直接接続を可能にするディスプレイコントローラおよびディスプレイインタフェース(不図示)も含んでよい。
I/Oサブシステム111内では、システムストレージユニット114が、コンピューティングシステム100のためのストレージメカニズムを提供すべく、I/Oハブ107に接続されてよい。I/Oスイッチ116を用いて、I/Oハブ107およびプラットフォームに統合可能なネットワークアダプタ118および/または無線ネットワークアダプタ119等の他のコンポーネントと、1または複数のアドインデバイス120を介して追加可能な様々な他のデバイスとの間の接続を可能にするためのインタフェースメカニズムを提供してよい。アドインデバイス120はまた、例えば、1または複数の外部グラフィックプロセッサデバイスおよび/または計算アクセラレータも含んでよい。ネットワークアダプタ118は、イーサネット(登録商標)アダプタまたは別の有線ネットワークアダプタであってよい。無線ネットワークアダプタ119は、Wi-Fi(登録商標)、Bluetooth(登録商標)、近距離通信(NFC)、または、1または複数の無線装置を含む他のネットワークデバイスのうちの1または複数を含んでよい。
コンピューティングシステム100は、明示的に示されていない他のコンポーネントを含むことができ、USB又は他のポート接続、光ストレージドライブ、ビデオキャプチャデバイスなどを含んでよく、またI/Oハブ107に接続され得る。図1の様々なコンポーネントを相互接続する通信パスは、PCI(ペリフェラルコンポーネントインターコネクト)をベースにしたプロトコル(例えば、PCI-Express)、または任意の他のバスまたはポイントツーポイント通信インタフェース、および/または、NV-リンク高速インターコネクト、または当技術分野で既知の相互接続プロトコルなどのプロトコルなどといった、任意の適したプロトコルを用いて実装されてよい。
1または複数の並列プロセッサ112は、例えば、ビデオ出力回路を含む、グラフィック処理およびビデオ処理のために最適化された回路を組み込んでよく、グラフィック処理ユニット(GPU)を構成する。代替的または追加的に、1または複数の並列プロセッサ112は、本明細書で後に詳しく説明する基礎となる計算アーキテクチャを保持する一方、汎用処理のために最適化された回路を組み込んでよい。コンピューティングシステム100のコンポーネントは、単一の集積回路上の1または複数の他のシステム要素と統合されてよい。例えば、1または複数の並列プロセッサ112、メモリハブ105、プロセッサ102およびI/Oハブ107は、システムオンチップ(SoC)集積回路に統合されてよい。代替的に、コンピューティングシステム100のコンポーネントは、単一パッケージ内に統合されて、システムインパッケージ(SiP)構成を形成してよい。一実施形態において、コンピューティングシステム100のコンポーネントの少なくとも一部は、マルチチップモジュール(MCM)に統合されてよく、MCMが、モジュール式コンピューティングシステム内の他のマルチチップモジュールと相互接続されてよい。
ここで示すコンピューティングシステム100は例示であり、変形例および改良例が可能であることを理解されたい。ブリッジの数および構成、プロセッサ102の数、および並列プロセッサ112の数を含む接続トポロジは、所望の通り修正されてよい。例えば、システムメモリ104は、ブリッジを通さずにむしろ直接プロセッサ102に接続されてよい一方、他のデバイスは、メモリハブ105およびプロセッサ102を介してシステムメモリ104と通信する。他の代替的なトポロジでは、並列プロセッサ112はメモリハブ105ではなくむしろ、I/Oハブ107に接続され、または、1または複数のプロセッサ102のうちの1つに直接接続される。他の実施形態において、I/Oハブ107およびメモリハブ105は、単一のチップに統合されてよい。2または2より多いセットのプロセッサ102が複数のソケットを介して取り付けられることもまた可能であり、当該ソケットは、並列プロセッサ112のうちの2または2より多いインスタンスと結合されてよい。
ここで示す具体的なコンポーネントのうちの一部は随意ものであり、コンピューティングシステム100のすべての実装に含まれていなくもよい。例えば、任意の数のアドインカードまたは周辺機器がサポートされてよく、あるいは、一部のコンポーネントは除去されてよい。さらに、一部のアーキテクチャは、図1に示すコンポーネントと同様のコンポーネントのために、異なる用語を使用してよい。例えば、一部のアーキテクチャにおいて、メモリハブ105は、ノースブリッジと称されてよい一方、I/Oハブ107は、サウスブリッジと称されてよい。
図2Aは、並列プロセッサ200を示す。並列プロセッサ200は、本明細書で説明されるGPU、GPGPUなどであってよい。並列プロセッサ200の様々なコンポーネントは、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)等の1または複数の集積回路デバイスを用いて実装されてよい。示された並列プロセッサ200は、図1に示された並列プロセッサ112であってもよく、並列プロセッサ112のうちの1つであってよい。
並列プロセッサ200は、並列処理ユニット202を含む。並列処理ユニットは、並列処理ユニット202の他のインスタンスを含む他のデバイスとの通信を可能にするI/Oユニット204を含む。I/Oユニット204は、他のデバイスに直接的に接続されてよい。例えば、I/Oユニット204は、メモリハブ105等のハブまたはスイッチインタフェースの使用を介して、他のデバイスに接続される。メモリハブ105とI/Oユニット204との間の接続は、通信リンク113を形成する。並列処理ユニット202内で、I/Oユニット204は、ホストインタフェース206およびメモリクロスバー216に接続され、ここでホストインタフェース206は、演算処理の実行を指示するコマンドを受信し、メモリクロスバー216は、メモリ処理の実行を指示するコマンドを受信する。
ホストインタフェース206が、I/Oユニット204を介してコマンドバッファを受信する場合、ホストインタフェース206は、それらのコマンドを実行するためのワーク動作をフロントエンド208に宛ててよい。一実施形態において、フロントエンド208は、スケジューラ210に結合され、スケジューラ210は、処理クラスタアレイ212に、複数のコマンドまたは他のワークアイテムを分散するよう構成されている。スケジューラ210は、タスクが処理クラスタアレイ212の処理クラスタに分散される前に、処理クラスタアレイ212が適切に構成されていること、および、有効な状態にあることを保証する。スケジューラ210は、マイクロコントローラ上で実行されるファームウェアロジックを介して実装されてよい。マイクロコントローラで実装されるスケジューラ210は、複雑なスケジューリング、ならびに、粗い、および細かい粒度での作業配分動作を実行し、処理アレイ212上で実行するスレッドの急速なプリエンプションおよびコンテキストスイッチを可能にするように構成可能である。好ましくは、ホストソフトウェアは、複数のグラフィック処理ドアベルのうちの1つを介して、処理アレイ212にスケジューリングするワークロードを証明してよい。ワークロードは、次に、スケジューラマイクロコントローラ内のスケジューラ210ロジックによって、処理アレイ212にわたって自動的に分散され得る。
処理クラスタアレイ212は、最大"N個"の処理クラスタ(例えば、クラスタ214A、クラスタ214B、クラスタ214Nまで)を含んでよい。処理クラスタアレイ212の各クラスタ214A~214Nは、多数の並行スレッドを実行してよい。スケジューラ210は、様々なスケジューリングおよび/またはワーク分散アルゴリズムを用いて、処理クラスタアレイ212のクラスタ214A~214Nにワークを割り当ててよく、様々なスケジューリングおよび/またはワーク分散アルゴリズムは、各タイプのプログラムまたは計算に生じるワークロードに応じて変わってよい。スケジューリングは、スケジューラ210によって動的に処理されてよく、あるいは、処理クラスタアレイ212による実行用に構成されたプログラムロジックのコンパイル中に、部分的にコンパイラロジックによって支援されてよい。随意で、処理クラスタアレイ212の異なるクラスタ214A~214Nは、異なるタイプのプログラムの処理のために、または、異なるタイプの計算を実行するために割り当てられてよい。
処理クラスタアレイ212は、様々なタイプの並列演算処理を実行するよう構成されてよい。例えば、処理クラスタアレイ212は、汎用の並列計算処理を実行するよう構成されている。例えば、処理クラスタアレイ212は、ビデオおよび/またはオーディオデータのフィルタリングを含むタスクの処理、物理処理を含むモデリング処理の実行、および、データ変換の実行を行うためのロジックを含んでよい。
処理クラスタアレイ212は、並列グラフィック演算処理を実行するよう構成されている。並列プロセッサ200が、グラフィック演算処理を実行するよう構成されているかかる実施形態においては、処理クラスタアレイ212は、かかるグラフィック演算処理の実行をサポートする追加のロジックを含んでよく、例えば、限定ではないが、テクスチャ処理を実行するためのテクスチャサンプリングロジックに加え、テッセレーションロジックおよび他の頂点処理ロジックが含まれる。追加で、処理クラスタアレイ212は、限定ではないが、頂点シェーダ、テッセレーションシェーダ、ジオメトリシェーダ、および画素シェーダ等の、グラフィック処理関連のシェーダプログラムを実行するよう構成されてよい。並列処理ユニット202は、I/Oユニット204を介して、システムメモリからのデータを処理のために転送してよい。処理中、転送されたデータは、オンチップメモリ(例えば、並列プロセッサメモリ222)に格納されてよく、その後、処理中にシステムメモリに書き戻される。
並列処理ユニット202を用いてグラフィック処理を実行する実施形態においては、スケジューラ210は、グラフィック演算処理を、処理クラスタアレイ212の複数のクラスタ214A~214Nにより良く分散できるように、処理ワークロードを、ほぼ等しいサイズのタスクに分割するよう構成されてよい。これらの実施形態のうちのいくつかにおいて、処理クラスタアレイ212の一部は、異なるタイプの処理を実行するよう構成されてよい。例えば、第1の部分は、頂点シェーディングおよびトポロジ生成を実行するよう構成されてよく、第2の部分は、テッセレーションおよびジオメトリシェーディングを実行するよう構成されてよく、第3の部分は、表示用のレンダリングイメージを生成すべく、画素シェーディングまたは他のスクリーン空間処理を実行するよう構成されてよい。クラスタ214A~214Nのうちの1または複数によって生成された中間データはバッファに格納されて、中間データがさらなる処理のためにクラスタ214A~214N間で伝送されることを可能にしてよい。
処理中、処理クラスタアレイ212は、スケジューラ210を介して実行されるべき処理タスクを受信してよく、スケジューラ210は、フロントエンド208から、処理タスクを定義するコマンドを受信する。グラフィック演算処理について、処理タスクは、処理されるべきデータ、例えば、表面(パッチ)データ、プリミティブデータ、頂点データ、および/または画素データのインデックスを含んでよく、並びに、データがどのように処理(例えば、どのプログラムが実行されるべきであるか)されるべきかを定義する状態パラメータおよびコマンドも含んでよい。スケジューラ210は、タスクに対応するインデックスをフェッチするよう構成されてよく、または、フロントエンド208からインデックスを受信してよい。フロントエンド208は、着信するコマンドバッファ(例えば、バッチバッファ、プッシュバッファ等)によって指定されるワークロードが開始される前に、処理クラスタアレイ212が有効な状態に構成されていることを保証するよう構成されてよい。
並列処理ユニット202の1または複数のインスタンスの各々は、並列プロセッサメモリ222に結合されてよい。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスされてよく、メモリクロスバー216は、処理クラスタアレイ212およびI/Oユニット204からのメモリ要求を受信してよい。メモリクロスバー216は、メモリインタフェース218を介して並列プロセッサメモリ222にアクセスしてよい。メモリインタフェース218は、複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220B、パーティションユニット220Nまで)を含んでよく、パーティションユニットのそれぞれが、並列プロセッサメモリ222の一部(例えば、メモリユニット)に結合されてよい。パーティションユニット220A~220Nの数は、第1のパーティションユニット220Aが対応する第1のメモリユニット224Aを有し、第2のパーティションユニット220Bが対応するメモリユニット224Bを有し、N番目のパーティションユニット220Nが対応するN番目のメモリユニット224Nを有するように、メモリユニットの数と等しく構成されてよい。他の実施形態においては、パーティションユニット220A~220Nの数は、メモリデバイスの数と等しくなくてよい。
メモリユニット224A~224Nは、ダイナミックランダムアクセスメモリ(DRAM)、または、グラフィックダブルデータレート(GDDR)メモリを含む同期グラフィックランダムアクセスメモリ(SGRAM)等のグラフィックランダムアクセスメモリを含む様々なタイプのメモリデバイスを含んでよい。随意で、メモリユニット224A~224Nは、また、限定ではないが高帯域幅メモリ(HBM)を含む3Dスタックメモリも含んでよい。当業者であれば、メモリユニット224A~224Nの具体的な実装は可変であってよく、様々な従来の設計のうちの1つから選択されてよいことを理解するであろう。フレームバッファまたはテクスチャマップ等のレンダリングターゲットは、メモリユニット224A~224Nにわたり格納されてよく、パーティションユニット220A~220Nが、各レンダリングターゲットの一部を並列に書き込んで、並列プロセッサメモリ222の利用可能な帯域幅を効率的に用いることを可能にする。いくつかの実施形態において、システムメモリをローカルキャッシュメモリと共に用いる一体化メモリの設計を優先して、並列プロセッサメモリ222のローカルインスタンスが除外されてよい。
随意で、処理クラスタアレイ212のクラスタ214A~214Nの任意の1つは、並列プロセッサメモリ222内のメモリユニット224A~224Nの任意のものに書き込まれるデータを処理する能力を有する。メモリクロスバー216は、各クラスタ214A~214Nの出力を、任意のパーティションユニット220A~220Nまたは別のクラスタ214A~214Nに転送するよう構成されてよく、これらが、当該出力に対し追加の演算処理を実行してよい。クラスタ214A~214Nの各々は、メモリクロスバー216を通してメモリインタフェース218と通信して、様々な外部メモリデバイスからの読み取り、または様々な外部メモリデバイスへの書き込みを行ってよい。メモリクロスバー216を備える実施形態のうちの1つにおいて、メモリクロスバー216は、I/Oユニット204と通信すべく、メモリインタフェース218への接続を有し、および、並列プロセッサメモリ222のローカルインスタンスへの接続を有し、異なる処理クラスタ214A~214N内の処理ユニットが、並列処理ユニット202に対しローカルでないシステムメモリまたは他のメモリと通信することを可能にする。概して、メモリクロスバー216は、例えば、クラスタ214A~214Nと、パーティションユニット220A~220Nとの間のトラフィックストリームを分離すべく、仮想チャネルを用いることが可能であってよい。
並列プロセッサ200内に並列処理ユニット202の単一インスタンスが示されている一方で、並列処理ユニット202の任意の数のインスタンスが含まれてよい。例えば、並列処理ユニット202の複数のインスタンスが単一のアドインカード上に提供されてよく、あるいは、複数のアドインカードが相互接続されてよい。たとえ並列処理ユニット202の異なるインスタンスが、異なる数のプロセッシングコア、異なる量のローカル並列プロセッサメモリ、および/または、他の構成の差異を有する場合であっても、当該異なるインスタンスは相互動作するよう構成されてよい。随意で、並列処理ユニット202のいくつかのインスタンスは、他のインスタンスと比較して、より高精度の精度浮動小数点ユニットを含んでよい。並列処理ユニット202または並列プロセッサ200の1または複数のインスタンスを組み込んだシステムは、様々な構成およびフォームファクタにおいて実装されてよく、このようなものとしては、限定ではないが、デスクトップ、ラップトップ、またはハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソールおよび/または埋め込みシステムが含まれる。
図2Bは、パーティションユニット220のブロック図である。パーティションユニット220は、図2Aのパーティションユニット220A~220Nのうちの1つのインスタンスであってよい。図示の通り、パーティションユニット220は、L2キャッシュ221、フレームバッファインタフェース225、およびROP226(ラスタ処理ユニット)を含む。L2キャッシュ221は、メモリクロスバー216およびROP226から受信されたロードおよびストア処理を実行するよう構成された読み取り/書き込みキャッシュである。読み取りミスおよび緊急書き戻し要求は、L2キャッシュ221によって、処理のためにフレームバッファインタフェース225に出力される。また、更新も、フレームバッファインタフェース225を介して、処理のためにフレームバッファに送信されてよい。一実施形態において、フレームバッファインタフェース225は、並列プロセッサメモリ内のメモリユニット、例えば、図2Aのメモリユニット224A~224N(例えば、並列プロセッサメモリ222内の)等のうちの1つとやり取りする。追加的にまたは代替的に、パーティションユニット220は、メモリコントローラ(不図示)を介して、並列プロセッサメモリ内の複数のメモリユニットのうちの1つとやり取りしてよい。
グラフィックアプリケーションにおいて、ROP226は、ステンシル、z試験、ブレンディング等のようなラスタ処理を実行する処理ユニットである。その後、ROP226は、処理されたグラフィックデータを出力し、それがグラフィックメモリ内に格納される。いくつかの実施形態において、ROP226は、メモリに書き込まれた深さまたはカラーデータを圧縮し、メモリから読み出された深さまたはカラーデータを圧縮解除する圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムのうちの1または複数を活用する無損失圧縮ロジックであってよい。ROP226によって実行される圧縮のタイプは、圧縮されるべきデータの統計的特性に基づいて変わり得る。例えば、一実施形態において、タイル毎に、デルタカラー圧縮がデプスデータおよびカラーデータに実行される。
ROP226は、パーティションユニット220内の代わりに、各処理クラスタ(例えば、図2Aのクラスタ214A~214N)内に含まれてよい。かかる実施形態においては、画素フラグメントデータの代わりに、画素データへの読み取り要求および書き込み要求が、メモリクロスバー216経由で伝送される。処理されたグラフィックデータは、図1の1または複数のディスプレイデバイス110のうちの1つなどの、ディスプレイデバイス上に表示され得、プロセッサ102によってさらなる処理のためにルーティングされ得る。または図2Aの並列プロセッサ200内の処理されたエンティティのうちの1つによるさらなる処理のためにルーティングされ得る。
図2Cは、並列処理ユニット内の処理クラスタ214のブロック図である。例えば、処理クラスタは、図2Aの処理クラスタ214A~214Nのうちの1つのインスタンスである。処理クラスタ214は、多くのスレッドを並列で実行するよう構成されてよく、ここで"スレッド"という用語は、入力データの特定のセット上で実行される特定のプログラムのインスタンスを指す。随意で、複数の独立した命令ユニットを提供することなく、多数のスレッドの並列実行をサポートするために、単一命令、複数データ(SIMD)命令発行技術が用いられてよい。代替的に、各処理クラスタ内の処理エンジンのセットに対し命令を発行するよう構成された共通の命令ユニットを用いて、概して同期された多数のスレッドの並列実行をサポートするために、単一命令、複数スレッド(SIMT)技術が用いられてよい。すべての処理エンジンが通常、同一命令を実行するSIMD実行レジームとは異なり、SIMT実行では、特定のスレッドプログラムを通して、異なるスレッドが分岐実行パスをより容易にたどることを可能にする。当業者は、SIMD処理レジームは、SIMT処理レジームの機能的サブセットを表わすことを理解するであろう。
処理クラスタ214の処理は、処理タスクをSIMT並列プロセッサに分散させるパイプラインマネージャ232を介して制御されてよい。パイプラインマネージャ232は、図2Aのスケジューラ210から命令を受信し、グラフィックマルチプロセッサ234および/またはテクスチャユニット236を介して、これらの命令の実行を管理する。示されたグラフィックマルチプロセッサ234は、SIMT並列プロセッサの例示的なインスタンスである。しかしながら、異なるアーキテクチャの様々なタイプのSIMT並列プロセッサが、処理クラスタ214内に含まれてよい。グラフィックマルチプロセッサ234の1または複数のインスタンスが、処理クラスタ214内に含まれてよい。グラフィックマルチプロセッサ234は、データを処理してよく、データクロスバー240は、処理されたデータを、他のシェーダユニットを含む複数の考え得るデスティネーションのうちの1つへ分散するために用いられてよい。パイプラインマネージャ232は、データクロスバー240を介して、分散されるべき処理されたデータのデスティネーションを指定することで、処理されたデータの分散を容易にしてよい。
処理クラスタ214内の各グラフィックマルチプロセッサ234は、機能実行ロジックの同一セット(例えば、算術論理ユニット、ロード-ストアユニット等)を含んでよい。機能実行ロジックは、前の命令が完了する前に、新しい命令が発行され得るパイプライン化方式で構成されてよい。機能実行ロジックは、整数および浮動小数点算術、比較処理、ブール処理、ビットシフトおよび様々な代数関数の計算を含む様々な処理をサポートする。同一の機能ユニットハードウェアを活用して、異なる処理を実行してよく、機能ユニットの任意の組み合わせが存在してよい。
処理クラスタ214に伝送される命令はスレッドを構成する。並列処理エンジンのセット間で実行されるスレッドのセットは、スレッドグループである。スレッドグループは、異なる入力データに対し、同一のプログラムを実行する。スレッドグループ内の各スレッドが、グラフィックマルチプロセッサ234内の異なる処理エンジンに割り当てられてよい。スレッドグループは、グラフィックマルチプロセッサ234内の処理エンジンの数より少ないスレッドを含んでよい。スレッドグループが処理エンジンの数より少ないスレッドを含む場合、処理エンジンのうちの1または複数は、そのスレッドグループが処理されているサイクル中に、アイドルであってよい。スレッドグループは、グラフィックマルチプロセッサ234内の処理エンジンの数より多いスレッドも含んでよい。スレッドグループがグラフィックマルチプロセッサ234内の処理エンジンの数より多くのスレッドを含む場合、処理は、連続的なクロックサイクルにわたり実行されてよい。随意で、グラフィックマルチプロセッサ234上で、複数のスレッドグループが同時に実行されてよい。
グラフィックマルチプロセッサ234は、ロードおよびストア処理を実行するための内部キャッシュメモリを含んでよい。随意で、グラフィックマルチプロセッサ234は内部キャッシュより先行してよく、処理クラスタ214内のキャッシュメモリ(例えば、L1キャッシュ248)を用いてよい。各グラフィックマルチプロセッサ234もまた、すべての処理クラスタ214の間で共有され、スレッドの間でデータを転送するのに用いられ得るパーティションユニット(例えば、図2Aのパーティションユニット220A-220N)内のL2キャッシュへのアクセスを有する。また、グラフィックマルチプロセッサ234は、オフチップグローバルメモリにもアクセスしてよく、オフチップグローバルメモリは、ローカル並列プロセッサメモリおよび/またはシステムメモリのうちの1または複数を含んでよい。並列処理ユニット202の外部にある任意のメモリをグローバルメモリとして用いてよい。処理クラスタ214がグラフィックマルチプロセッサ234の複数のインスタンスを含む実施形態は、共通の命令およびデータを共有してよく、当該命令およびデータは、L1キャッシュ248内に格納されてよい。
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするよう構成されたMMU245(メモリ管理ユニット)を含んでよい。他の実施形態においては、MMU245の1または複数のインスタンスは、図2Aのメモリインタフェース218内に存在してよい。MMU245は、仮想アドレスを、タイルの物理アドレスに、および随意でキャッシュラインインデックスにマッピングするために用いられるページテーブルエントリ(PTE)のセットを含む。MMU245は、アドレストランスレーションルックアサイドバッファ(TLB)、または、グラフィックマルチプロセッサ234に存在してよいキャッシュ若しくはL1キャッシュ若しくは処理クラスタ214を含んでよい。物理アドレスが処理されて、サーフェスデータアクセス局所性を分散させ、複数のパーティションユニットにわたる効率的な要求インタリーブを可能にする。キャッシュラインインデックスは、キャッシュラインの要求がヒットか、ミスかを判定するために用いられてよい。
グラフィックおよびコンピューティングアプリケーションにおいて、各グラフィックマルチプロセッサ234が、例えば、テクスチャサンプル位置を判定し、テクスチャデータを読み取り、当該テクスチャデータをフィルタリングするといった、テクスチャマッピングの処理を実行するためのテクスチャユニット236に結合されるように、処理クラスタ214は構成されてよい。テクスチャデータは、内部テクスチャL1キャッシュ(不図示)から読み取られ、あるいはいくつかの実施形態においては、テクスチャデータは、グラフィックマルチプロセッサ234内のL1キャッシュから読み取られ、必要に応じてL2キャッシュ、ローカル並列プロセッサメモリまたはシステムメモリからフェッチされる。各グラフィックマルチプロセッサ234は、処理されたタスクを別の処理クラスタ214にさらなる処理のために提供する、あるいは、処理されたタスクを、メモリクロスバー216を介してL2キャッシュ、ローカル並列プロセッサメモリ、またはシステムメモリに格納するために、処理されたタスクをデータクロスバー240に出力する。プリROP242(プレラスタ処理ユニット)が、グラフィックマルチプロセッサ234からデータを受信し、ROPユニット宛てにデータを送信するように構成され、ROPユニットは、本明細書で説明するようなパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)と共に配置されてよい。プリROP242ユニットは、カラーブレンディングのための最適化を実行してよく、画素カラーデータを編成してよく、アドレス変換を実行してよい。
本明細書で説明するコアアーキテクチャは例示的なものであること、変形例および改良例が可能であることを理解されたい。例えば、グラフィックマルチプロセッサ234、テクスチャユニット236、プリROP242等の、任意の数の処理ユニットが処理クラスタ214内に含まれてよい。さらに、1つの処理クラスタ214のみが示されている一方、本明細書で説明する並列処理ユニットは、任意の数の処理クラスタ214のインスタンスを含んでよい。随意で、各処理クラスタ214は、別個且つ異なる処理ユニット、L1キャッシュ等を用いて、他の処理クラスタ214とは独立して動作するよう構成されてよい。
図2Dは、グラフィックマルチプロセッサ234の一例を示し、そこでは、グラフィックマルチプロセッサ234は、処理クラスタ214のパイプラインマネージャ232に結合されている。グラフィックマルチプロセッサ234は、限定ではないが、命令キャッシュ252、命令ユニット254、アドレスマッピングユニット256、レジスタファイル258、1または複数の汎用グラフィック処理ユニット(GPGPU)コア262、および1または複数のロード/ストアユニット266を含む実行パイプラインを有する。GPGPUコア262およびロード/ストアユニット266は、メモリおよびキャッシュ相互接続268を介して、キャッシュメモリ272および共有メモリ270に結合される。追加的に、グラフィックマルチプロセッサ234は、行列および/またはレイトレーシング操作を加速化させるためのハードウェアロジックを含むテンソルおよび/またはレイトレーシングコア263を含んでよい。
命令キャッシュ252は、パイプラインマネージャ232から、実行すべき命令ストリームを受信してよい。当該命令は、命令キャッシュ252内にキャッシュされ、命令ユニット254によって実行のためにディスパッチされる。命令ユニット254は、命令をスレッドグループ(例えば、ワープ)としてディスパッチしてよく、スレッドグループの各スレッドはGPGPUコア262内の異なる実行ユニットに割り当てられる。命令は、一体化アドレス空間内でアドレスを指定することで、ローカル、共有またはグローバルの任意のアドレス空間にアクセスしてよい。アドレスマッピングユニット256を用いて、一体化アドレス空間内のアドレスを、ロード/ストアユニット266によりアクセス可能な別個のメモリアドレスに変換してよい。
レジスタファイル258は、グラフィックマルチプロセッサ234の機能ユニットに対し、レジスタのセットを提供する。レジスタファイル258は、グラフィックマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータパスに接続された、オペランドのための一時ストレージを提供する。各機能ユニットにレジスタファイル258の専用部分が割り当てられるように、レジスタファイル258は、機能ユニットの各々の間で分割されてよい。例えば、レジスタファイル258は、グラフィックマルチプロセッサ234によって実行されている異なるワープ間で分割されてよい。
GPGPUコア262はそれぞれ、グラフィックマルチプロセッサ234の命令を実行するために用いられる浮動小数点ユニット(FPU)および/または整数算術論理ユニット(ALU)を含んでよい。いくつかの実装において、GPGPUコア262は、別の場合にはテンソルおよび/またはレイトレーシングコア263に存在し得るハードウェアロジックを含んでよい。GPGPUコア262は、アーキテクチャにおいて同様であってよく、または、アーキテクチャにおいて異なってよい。例えば、一実施形態において、GPGPUコア262の第1の部分は単精度FPUおよび整数ALUを含む一方で、GPGPUコアの第2の部分は倍精度FPUを含む。随意で、FPUは、浮動小数点算術のためのIEEE754-2008標準を実装してよく、または、可変精度の浮動小数点算術を可能にしてよい。追加的に、グラフィックマルチプロセッサ234は、矩形コピー処理または画素ブレンディング処理等の特別な機能を実行するための1または複数の固定機能ユニット、または特別な機能ユニットを含んでよい。GPGPUコアの1または複数はまた、固定または特別な機能ロジックも含んでよい。
GPGPUコア262は、複数のセットのデータに対し、単一の命令を実行可能なSIMDロジックを含んでよい。随意で、GPGPUコア262は、物理的に、SIMD4、SIMD8およびSIMD16命令を実行してよく、論理的にSIMD1、SIMD2およびSIMD32命令を実行してよい。GPGPUコアのためのSIMD命令は、コンパイル時にシェーダコンパイラによって生成されてよく、または、SPMD(single program multiple data)アーキテクチャ若しくはSIMTアーキテクチャ用に記述およびコンパイルされたプログラムの実行時に自動的に生成されてよい。SIMT実行モデル用に構成されたプログラムの複数のスレッドは、単一のSIMD命令を介して実行されてよい。例えば、一実施形態において、同一または同様の処理を実行する8個のSIMTスレッドが、単一のSIMD8ロジックユニットを介して並列に実行されてよい。
メモリおよびキャッシュ相互接続268は、グラフィックマルチプロセッサ234の機能ユニットの各々を、レジスタファイル258および共有メモリ270に接続する相互接続ネットワークである。例えば、メモリおよびキャッシュ相互接続268は、ロード/ストアユニット266が、共有メモリ270とレジスタファイル258との間でロードおよびストア処理を実装できるようにするクロスバー相互接続である。レジスタファイル258は、GPGPUコア262と同一周波数で動作してよく、従って、GPGPUコア262とレジスタファイル258との間のデータ転送は非常に低レイテンシである。共有メモリ270を用いて、グラフィックマルチプロセッサ234内の機能ユニット上で実行されるスレッド間の通信を可能にしてよい。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されるテクスチャデータをキャッシュするためのデータキャッシュとして用いられてよい。共有メモリ270は、また、プログラムで管理されるキャッシュとして用いられてよい。GPGPUコア262上で実行されるスレッドは、キャッシュメモリ272内に格納された自動的にキャッシュされたデータに加え、プログラム的に共有メモリ内にデータを格納してよい。
図3A~3Cは、実施形態による、追加のグラフィックマルチプロセッサを示す。図3A~3Bは、図2Cのグラフィックマルチプロセッサ234に関連し、それらのうちの1つの代わりに用いられてよいグラフィックマルチプロセッサ325、350を示す。従って、本明細書のグラフィックマルチプロセッサ234との組み合わせにおける任意の特徴に関する開示内容はまた、グラフィックマルチプロセッサ325、350との対応する組み合わせも開示しているが、そのように限定はされない。図3Cは、グラフィックマルチプロセッサ325、350に対応するマルチコアグループ365A~365N内に配置されるグラフィック処理リソースの専用のセットを含む、グラフィック処理ユニット(GPU)380を示す。示されたグラフィックマルチプロセッサ325、350およびマルチコアグループ365A~365Nは、多数の実行スレッドの同時実行が可能なストリーミングマルチプロセッサ(SM)であってよい。
図3Aのグラフィックマルチプロセッサ325は、図2Dのグラフィックマルチプロセッサ234と比較して、実行リソースユニットの複数の追加のインスタンスを含む。例えば、グラフィックマルチプロセッサ325は、命令ユニット332A~332B、レジスタファイル334A~334Bおよびテクスチャユニット344A~344Bの複数のインスタンスを含んでよい。グラフィックマルチプロセッサ325はまた、グラフィック実行ユニットまたは計算実行ユニット(例えば、GPGPUコア336A~336B、テンソルコア337A~337B、レイトレーシングコア338A~338B)の複数のセット、および、ロード/ストアユニット340A~340Bの複数のセットも含む。実行リソースユニットは、共通の命令キャッシュ330、テクスチャおよび/またはデータキャッシュメモリ342、並びに共有メモリ346を有する。
様々なコンポーネントは、相互接続ファブリック327を介して通信してよい。相互接続ファブリック327は、グラフィックマルチプロセッサ325の様々なコンポーネント間の通信を可能にするための1または複数のクロスバースイッチを含んでよい。相互接続ファブリック327は、グラフィックマルチプロセッサ325の各コンポーネントがその上に積み重ねられる別個の高速ネットワークファブリック層であってよい。グラフィックマルチプロセッサ325の複数のコンポーネントは、相互接続ファブリック327を介して、リモートコンポーネントと通信する。例えば、GPGPUコア336A-336B、337A-337Bおよび3378A-338Bは、相互接続ファブリック327を介しして共有メモリ346と各々通信し得る。相互接続ファブリック327は、グラフィックマルチプロセッサ325内の通信の調整(arbitrate)して、コンポーネント間の公平な帯域幅割り当てを保証してよい。
図3Bのグラフィックマルチプロセッサ350は、実行リソース356A~356Dの複数のセットを含み、実行リソースの各セットは、図2Dおよび図3Aに示されるような、複数の命令ユニット、レジスタファイル、GPGPUコアおよびロードストアユニットを含む。実行リソース356A~356Dは、共有命令キャッシュ354および共有メモリ353を共有する一方、テクスチャ処理のために、テクスチャユニット360A~360Dと連携して動作してよい。例えば、実行リソース356A~356Dは、命令キャッシュ354および共有メモリ353、並びに、テクスチャおよび/またはデータキャッシュメモリ358A~358Bの複数のインスタンスを共有してよい。様々なコンポーネントは、図3Aの相互接続ファブリック327と同様の相互接続ファブリック352を介して通信してよい。
当業者は、図1、2A~2Dおよび3A~3Bに記載されたアーキテクチャは説明のためのものであり、本実施形態の範囲を限定するものではないことを理解されたい。故に、本明細書で説明する技術は、任意の適切に構成された処理ユニット上で実装されてよく、このようなものとしては、限定ではないが、1または複数のモバイルアプリケーションプロセッサ、マルチコアCPUを含む1または複数のデスクトップまたはサーバの中央処理ユニット(CPU)、図2Aの並列処理ユニット202等の1または複数の並列処理ユニット、および、1または複数のグラフィックプロセッサまたは特定用途向け処理ユニットが含まれ、これは本明細書で説明する実施形態の範囲から逸脱することはない。
本明細書で説明する並列プロセッサまたはGPGPUは、グラフィック処理、機械学習処理、パターン解析処理および様々な汎用GPU(GPGPU)機能を加速化させるべく、ホスト/プロセッサコアに通信可能に結合されてよい。GPUは、バスまたは他の相互接続(例えば、PCIeまたはNVリンク等の高速相互接続)経由で、ホストプロセッサ/コアに通信可能に結合されてよい。他の実施形態において、GPUは、コアと同一のパッケージまたはチップ上に統合されてよく、および、内部プロセッサバス/相互接続(つまり、パッケージまたはチップの内部にある)経由でコアに通信可能に結合されてよい。GPUの接続態様に関わらず、プロセッサコアは、GPUに対し、ワーク記述子に含まれるコマンド/命令のシーケンスの形態で、ワークをGPUに割り当ててよい。その後、GPUは、これらのコマンド/命令を効率的に処理するために、専用回路/ロジックを用いる。
図3Cは、マルチコアグループ365A~365Nに配置されたグラフィック処理リソースの専用のセットを含む、グラフィック処理ユニット(GPU)380を示す。単一のマルチコアグループ365Aのみの詳細が記載されている一方、他のマルチコアグループ365B~365Nに、グラフィック処理リソースの同一または同様のセットが備えられてよいことを理解されたい。マルチコアグループ365A-365Nに関し説明した詳細は、ここで説明する任意のグラフィックマルチプロセッサ234、325、350にも適用されてよい。
図示の通り、マルチコアグループ365Aは、グラフィックコア370のセット、テンソルコア371のセット、およびレイトレーシングコア372のセットを含んでよい。スケジューラ/ディスパッチャ368は、様々なコア370、371、372上で実行されるグラフィックスレッドをスケジューリングおよびディスパッチする。レジスタファイル369のセットは、グラフィックスレッドの実行時に、コア370、371、372によって用いられるオペランド値を格納する。これらは、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックドデータ要素(整数および/または浮動小数点のデータ要素)を格納するためのベクトルレジスタ、および、テンソル/行列値を格納するためのタイルレジスタを含んでよい。タイルレジスタは、ベクトルレジスタの組み合わせセットとして実装されてよい。
1または複数の組み合わされたレベル1(L1)キャッシュおよび共有メモリユニット373は、テクスチャデータ、頂点データ、画素データ、レイデータ、バウンディングボリュームデータ等といったグラフィックデータなどを、各マルチコアグループ365A内にローカルに格納する。また、1または複数のテクスチャユニット374を用いて、テクスチャマッピングおよびサンプリング等のテクスチャリング処理を実行してよい。マルチコアグループ365A~365Nの全部またはサブセットによって共有されるレベル2(L2)キャッシュ375は、複数の並行グラフィックスレッドのためのグラフィックデータおよび/または命令を格納する。図示の通り、L2キャッシュ375は、複数のマルチコアグループ365A~365Nの間で共有されてよい。1または複数のメモリコントローラ367は、GPU380を、システムメモリ(例えば、DRAM)および/または専用グラフィックメモリ(例えば、GDDR6メモリ)であってよいメモリ366に結合する。
入力/出力(I/O)回路363は、GPU380を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、またはユーザ入力デバイス等の1または複数のI/Oデバイス362に結合する。オンチップ相互接続を用いて、I/Oデバイス362を、GPU380およびメモリ366に結合してよい。I/O回路363の1または複数のI/Oメモリ管理ユニット(IOMMU)364は、I/Oデバイス362をシステムメモリ366に直接結合する。随意で、IOMMU364は、仮想アドレスをシステムメモリ366内の物理アドレスにマッピングするためのページテーブルの複数のセットを管理する。その後、I/Oデバイス362、CPU361およびGPU380は、同じ仮想アドレス空間を共有してよい。
IOMMU364の一実装において、IOMMU364は仮想化をサポートする。この場合、ゲスト/グラフィック仮想アドレスをゲスト/グラフィック物理アドレスにマッピングするための第1のセットのページテーブルを管理してよく、ゲスト/グラフィック物理アドレスをシステム/ホスト物理アドレスにマッピングするための第2のセットのページテーブルを管理してよい(例えば、システムメモリ366内で)。第1のセットのページテーブルおよび第2のセットのページテーブルの各々のベースアドレスは、制御レジスタ内に格納されてよく、コンテキストスイッチ上でスワップアウトされてよい(例えば、その結果、新しいコンテキストに、関連するページテーブルのセットへのアクセスが提供される)。図3Cには不図示である一方、コア370、371、372および/またはマルチコアグループ365A~365Nの各々は、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換およびゲスト仮想からホスト物理への変換をキャッシュするための、トランスレーションルックアサイドバッファ(TLB)を含んでよい。
CPU361、GPU380およびI/Oデバイス362は、単一の半導体チップおよび/またはチップパッケージ上に統合されてよい。示されたメモリ366は、同一チップ上に統合されてよく、または、オフチップインタフェースを介してメモリコントローラ367に結合されてよい。一実装において、メモリ366は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを有するが、ここで説明される基礎となる原理は、この具体的な実装に限定されることはない。
テンソルコア371は、行列処理を実行するように具体的に設計された複数の実行ユニットを含んでよく、行列処理は、深層学習処理を実行するために用いられる基本的な計算処理である。例えば、同時行列乗算処理は、ニューラルネットワークの訓練及び推論に使用され得る。テンソルコア371は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)およびハーフバイト(4ビット)を含む、様々なオペランド精度を用いて、行列処理を実行してよい。例えば、ニューラルネットワーク実装は、各レンダリングされたシーンの特徴を抽出し、潜在的に複数のフレームからの詳細情報と組み合わせて、高品質な最終イメージを構築する。
深層学習の実装においては、並列行列乗算ワークは、テンソルコア371上での実行のためにスケジューリングされてよい。具体的には、ニューラルネットワークの訓練には、かなりの数の行列ドット積処理が必要である。NxNxN行列乗算の内積の公式化を処理するために、テンソルコア371は、少なくともN個のドット積処理要素を含んでよい。行列乗算が開始される前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、N回サイクルのうちの各サイクルでロードされる。各サイクルにおいて、処理されるN個のドット積が存在する。
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)および4ビットハーフバイト(例えば、INT4)などを含む、特定の実装に応じて異なる精度で格納し得る。異なるワークロード(例えば、バイトおよびハーフバイトへの量子化を許容し得る推論ワークロード等)に、最も効率的な精度が用いられることを保証すべく、異なる精度モードがテンソルコア371に指定されてよい。
レイトレーシングコア372は、リアルタイムレイトレーシングおよび非リアルタイムレイトレーシングの両方の実装のために、レイトレーシング処理を加速化させてよい。特に、レイトレーシングコア372は、バウンディングボリューム階層(BVHs)を用いてレイトラバーサルを実行し、BVHボリューム内で囲まれたレイおよびプリミティブ間のインタセクションを識別するためのレイトラバーサル/インタセクション回路を含んでよい。レイトレーシングコア372は、デプステストおよびカリング(例えば、Zバッファまたは同様の構成を用いて)を実行するための回路も含んでよい。一実装において、レイトレーシングコア372は、本明細書で説明するイメージノイズ除去技術と連携して、トラバーサルおよびインタセクション処理を実行し、イメージノイズ除去技術の少なくとも一部がテンソルコア371上で実行されてよい。例えば、テンソルコア371は、レイトレーシングコア372により生成されたフレームのノイズ除去を実行すべく、深層学習ニューラルネットワークを実装してよい。しかしながら、また、CPU361、グラフィックコア370および/またはレイトレーシングコア372は、当該ノイズ除去および/または深層学習アルゴリズムの全部または一部も実装してよい。
また、上で説明したように、ノイズ除去への分散型アプローチが用いられてよく、そこでは、GPU380がネットワークまたは高速相互接続を通して他のコンピューティングデバイスに結合されたコンピューティングデバイス内に存在する。この分散型アプローチにおいては、相互接続されたコンピューティングデバイス同士は、ニューラルネットワーク学習/訓練データを共有して、システム全体が、異なるタイプのイメージフレームおよび/または異なるグラフィックアプリケーションのためのノイズ除去の実行を学習する速度を改善してよい。
レイトレーシングコア372は、すべてのBVHトラバーサルおよび/またはレイプリミティブインタセクションを処理してよく、グラフィックコア370にレイ毎に数千の命令で過負荷がかかるのを避ける。例えば、各レイトレーシングコア372は、バウンディングボックス試験(例えば、トラバーサル処理のための)を実行するための第1のセットの専用回路、および/または、レイ三角形インタセクション試験(例えば、トラバース済みのインタセクションするレイ)を実行するための第2のセットの専用回路を含む。故に、例えば、マルチコアグループ365Aは、単にレイプローブを起動するだけでよく、レイトレーシングコア372は、レイトラバーサルおよびインタセクションを独立して実行し、ヒットデータ(例えば、ヒット、ヒットなし、複数のヒット等)をスレッドコンテキストに戻す。レイトレーシングコア372がトラバーサルおよびインタセクション処理を実行する間、他のコア370、371は他のグラフィックワークまたは計算ワークを実行すべく解放される。
随意で、各レイトレーシングコア372は、BVH試験処理を実行するためのトラバーサルユニットおよび/またはレイプリミティブインタセクション試験を実行するインタセクションユニットを含んでよい。インタセクションユニットは、"ヒット"、"ヒットとなし"または"複数のヒット"応答を生成し、インタセクションユニットは、これを適切なスレッドに提供する。トラバーサルおよびインタセクション処理中に、他のコア(例えば、グラフィックコア370およびテンソルコア371)の実行リソースは、他の形態のグラフィックワークを実行すべく、解放される。
後述する1つの随意の実施形態において、ワークがグラフィックコア370とレイトレーシングコア372との間で分散されるハイブリッドラスタライズ/レイトレーシングアプローチが用いられる。
レイトレーシングコア372(および/または他のコア370、371)は、マイクロソフト(登録商標)のDispatchRaysコマンドおよびレイ生成、最も近いヒット、任意のヒットおよびミスシェーダを含む、DirectX Ray Tracing(DXR)等のレイトレーシング命令セットのためのハードウェアサポートを含んでよく、これらが、各オブジェクトのシェーダおよびテクスチャの一意のセットの割り当てを可能にする。レイトレーシングコア372、グラフィックコア370およびテンソルコア371によってサポートされ得る別のレイトレーシングプラットフォームは、Vulkan1.1.85である。しかしながら、ここで説明される基礎となる原理は任意の特定のレイトレーシングISAに限定されることはないことを留意されたい。
一般的に、様々なコア372、371、370は、レイ生成、最も近いヒット、任意のヒット、レイプリミティブインタセクション、プリミティブ毎および階層バウンディングボックス構築、ミス、ビジットおよび例外のうちの1または複数のための命令/関数を含むレイトレーシング命令セットをサポートしてよい。より具体的には、好ましい実施形態は、以下の機能のうちの1または複数を実行するためのレイトレーシング命令を含む。
「レイ生成」:画素毎、サンプル毎または他のユーザ定義のワーク割り当て毎に、レイ生成命令が実行されてよい。
「最も近いヒット」:最も近いヒット命令は、シーン内のプリミティブを持つレイの最も近いインタセクションポイントを位置特定するために実行されてよい。
「任意のヒット」:任意のヒット命令は、潜在的に新しい最も近いインタセクションポイントを識別すべく、レイとシーン内のプリミティブとの間の複数のインタセクションを識別する。
「インタセクション」:インタセクション命令は、レイプリミティブインタセクション試験を実行し、結果を出力する。
「プリミティブ毎のバウンディングボックス構築」:この命令は、特定のプリミティブまたはプリミティブのグループの周りに、バウンディングボックスを構築する(例えば、新しいBVHまたは他の加速データ構造の構築時)。
「ミス」:レイはシーン内のまたはシーンの指定領域内のすべてのジオメトリをミスすることを示す。
「ビジット」:レイがトラバースする子ボリュームを示す。
「例外」:様々なタイプの例外ハンドラ(例えば、様々なエラー条件に対し呼び出される)を含む。「GPUがホストプロセッサを相互接続するための技術」
図4Aは、例えば、図2Aに示される並列プロセッサ200等のような複数のGPU410~413が、高速リンク440A~440D(例えば、バス、ポイント間相互接続等)を通して、複数のマルチコアプロセッサ405~406に通信可能に結合されている例示的なアーキテクチャを示す。高速リンク440A~440Dは、実装に応じて、4GB/s、30GB/s、80GB/sあるいはそれより高い通信スループットをサポートしてよい。様々な相互接続プロトコルが用いられてよく、このようなものとしては、PCIe4.0または5.0およびNVLink2.0が含まれるが、これらに限定はされない。しかしながら、ここで説明される基礎となる原理は、任意の特定の通信プロトコルまたはスループットに限定はされない。
GPU410~413のうちの2または2より多くが、高速リンク442A~442Bを通して相互接続されてよく、これは、高速リンク440A~440Dに用いられるプロトコル/リンクと同一または異なるプロトコル/リンクを用いて実装されてよい。同様に、2またはそれより多くのマルチコアプロセッサ405-406が、20GB/s、30GB/s、120GB/s、またはより高い速度で対称マルチプロセッサ(SMP)バス動作であり得る高速リンク443を介して接続され得る。代替的に、図4Aに示された様々なシステムコンポーネント間のすべての通信は、同一のプロトコル/リンク(例えば、共通相互接続ファブリックを通して)を用いて実現されてよい。しかしながら、前述のように、ここで説明される基礎となる原理は、任意の特定のタイプの相互接続技術に限定はされない。
各マルチコアプロセッサ405~406はそれぞれ、メモリ相互接続430A~430Bを介してプロセッサメモリ401~402に通信可能に結合されてよく、各GPU410~413はそれぞれ、GPUメモリ相互接続450A~450Dを通してGPUメモリ420~423に通信可能に結合される。メモリ相互接続430A~430Bおよび450A~450Dは、同一または異なるメモリアクセス技術を用いてよい。限定ではなく例示であるが、プロセッサメモリ401~402およびGPUメモリ420~423は、ダイナミックランダムアクセスメモリ(DRAM)(スタック型DRAMを含む)、グラフィックDDR SDRAM(GDDR)(例えば、GDDR5、GDDR6)または高帯域幅メモリ(HBM)等の揮発性メモリであってよく、および/または、3D XPoint/OptaneまたはNano-Ram等の不揮発性メモリであってよい。例えば、複数のメモリの一部のいくつかは揮発性メモリであってよく、別の一部が不揮発性メモリ(例えば、2レベルのメモリ(2LM)階層を用いる)であってよい。
以下に説明する通り、様々なプロセッサ405~406およびGPU410~413はそれぞれ、特定のメモリ401~402、420~423に物理的に結合されてよいが、同一の仮想システムアドレス空間("有効アドレス"空間とも呼ばれる)が、様々な物理メモリのすべてに分散されている一体化メモリアーキテクチャが実装されてよい。例えば、プロセッサメモリ401~402はそれぞれ、64GBのシステムメモリアドレス空間を有してよく、GPUメモリ420~423はそれぞれ、32GBのシステムメモリアドレス空間を有してよい(その結果、この例では、合計で256GBのアドレス指定可能メモリをもたらす)。
図4Bは、マルチコアプロセッサ407とグラフィック加速化モジュール446との間の相互接続の追加的オプションの詳細を示す。グラフィック加速化モジュール446は、高速リンク440を介してプロセッサ407に結合されたラインカード上に統合された1または複数のGPUチップを含んでよい。代替的に、グラフィック加速化モジュール446は、プロセッサ407と同一のパッケージまたはチップに統合されてよい。
示されたプロセッサ407は、複数のコア460A~460Dを含み、それぞれは、トランスレーションルックアサイドバッファ461A~461Dおよび1または複数のキャッシュ462A~462Dを備える。コアは、命令を実行し、およびデータを処理するための様々な他のコンポーネント(例えば、命令フェッチユニット、分岐予測ユニット、デコーダ、実行ユニット、リオーダバッファ等)を含んでよいが、ここで説明されるコンポーネントの基礎となる原理を不明瞭にすることを回避すべく、図示されていない。キャッシュ462A~462Dは、レベル1(L1)キャッシュおよびレベル2(L2)キャッシュを有してよい。また、1または複数の共有キャッシュ456が、キャッシュ階層に含まれてよく、コア460A~460Dのセットにより共有されてよい。例えば、プロセッサ407の一実施形態は、24個のコアを含み、それぞれが独自のL1キャッシュ、12個の共有L2キャッシュおよび12個の共有L3キャッシュを有する。この実施形態においては、L2キャッシュおよびL3キャッシュのうちの1つが、2つの隣接するコアにより共有される。プロセッサ407およびグラフィックアクセラレータ統合モジュール446は、プロセッサメモリ401~402を含んでよいシステムメモリ441に接続される。
様々なキャッシュ462A~462D、456およびシステムメモリ441内に格納されたデータおよび命令のコヒーレンシは、コヒーレンスバス464経由のインタコア通信を介して維持される。例えば、各キャッシュは自身に関連付けられたキャッシュコヒーレンシロジック/回路を有してよく、特定のキャッシュラインからの読み取りまたは書き込みが検出されることに応答して、コヒーレンスバス464を通してそれらと通信する。一実装において、キャッシュアクセスをスヌープするためのキャッシュスヌーピングプロトコルがコヒーレンスバス464を通して実装される。キャッシュスヌーピング/コヒーレンシ技術は、当業者に十分理解されており、ここで説明される基礎となる原理を不明瞭にすることを回避すべく、ここでは詳しく説明することはしない。
グラフィック加速化モジュール446をコヒーレンスバス464に通信可能に結合して、グラフィック加速化モジュール446が、コアのピアとして、キャッシュコヒーレンスプロトコルに参加できるようにするプロキシ回路425が提供されてよい。具体的には、インタフェース435が高速リンク440(例えば、PCIeバス、NVリンク等)を通してプロキシ回路425への接続性を提供し、インタフェース437がグラフィック加速化モジュール446を高速リンク440に接続する。
一実装において、アクセラレータ集積回路436は、グラフィック加速化モジュール446の複数のグラフィック処理エンジン431、432、Nに代わって、キャッシュ管理、メモリアクセス、コンテキスト管理、および割り込み管理サービスを提供する。グラフィック処理エンジン431、432、Nはそれぞれ別個のグラフィック処理ユニット(GPU)を有してよい。代替的に、グラフィック処理エンジン431、432、Nは、GPU内に、例えば、グラフィック実行ユニット、メディア処理エンジン(例えば、ビデオエンコーダ/デコーダ)、サンプラおよびブリットエンジン等の異なるタイプのグラフィック処理エンジンを有してよい。換言すると、グラフィック加速化モジュールは、複数のグラフィック処理エンジン431-432、Nを持つGPUであってよく、またはグラフィック処理エンジン431~432、Nは共通のパッケージ、ラインカードまたはチップ上に統合された個々のGPUであってよい。
アクセラレータ統合回路436は、仮想‐物理メモリ変換(有効-実メモリ変換とも称される)等の様々なメモリ管理機能を実行するためのメモリ管理ユニット(MMU)439、およびシステムメモリ441にアクセスするためのメモリアクセスプロトコルを含んでよい。MMU439はまた、仮想/有効‐物理/実際のアドレス変換をキャッシュするためのトランスレーションルックアサイドバッファ(TLB)(不図示)を含んでよい。一実装において、キャッシュ438は、グラフィック処理エンジン431-432、Nによる効率的なアクセスのためにデータおよびコマンドを格納する。キャッシュ438およびグラフィックメモリ433~434、Mに格納されたデータは、コアキャッシュ462A~462D、456およびシステムメモリ411とコヒーレントに保持されてよい。前述の通り、これは、キャッシュ438およびメモリ433~434、Mの代わりに、キャッシュコヒーレンシメカニズムに参加するプロキシ回路425を介して実現されてよい(例えば、プロセッサキャッシュ462A~462D、456上へのキャッシュラインの修正/アクセスに関する更新をキャッシュ438に送信する、および、キャッシュ438から更新を受信する)。
レジスタのセット445は、グラフィック処理エンジン431~432、Nによって実行されるスレッドのためのコンテキストデータを格納し、コンテキスト管理回路448は、当該スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキストスイッチの最中の様々なスレッドのコンテキストを保存および復元するように、保存および復元動作を実行し得る(第2のスレッドがグラフィック処理エンジンによって実行され得るように、例えば、第1のスレッドがどこに保存されるか、および第2のスレッドがどこに格納されるか)。例えば、コンテキストスイッチ上では、コンテキスト管理回路448は、現在のレジスタ値をメモリ内の指定領域(例えば、コンテキストポインタにより識別される)に格納してよい。その後、コンテキストに戻るとき、レジスタ値を復元してよい。割り込み管理回路447は、例えば、システムデバイスから受信される割り込みを受信および処理してよい。
一実装において、MMU439により、グラフィック処理エンジン431からの仮想/有効アドレスが、システムメモリ411内の実/物理アドレスに変換される。随意で、アクセラレータ統合回路436は、複数(例えば、4、8、16)のグラフィックアクセラレータモジュール446および/または他のアクセラレータデバイスをサポートする。グラフィックアクセラレータモジュール446は、プロセッサ407上で実行される単一のアプリケーション専用に割り当てられてよく、または、複数のアプリケーション間で共有されてよい。随意で、グラフィック処理エンジン431~432、Nのリソースが、複数のアプリケーション、または仮想マシン(VM)と共有される仮想化グラフィック実行環境が提供される。リソースは、処理要求に基づいて、および、VMおよび/またはアプリケーションに関連付けられた優先度に基づいて、異なるVMおよび/またはアプリケーションに割り当てられる「スライス」へと細分化され得る。
故に、アクセラレータ統合回路436は、グラフィック加速化モジュール446のためのシステムへのブリッジとして機能し、アドレス変換およびシステムメモリキャッシュサービスを提供する。一実施形態において、ブリッジ機能を促進すべく、アクセラレータ統合回路436はまた、共有I/O497(例えば、PCIe、USBまたはその他)および電圧、クロック、性能、熱およびセキュリティのシステム制御を可能にするためのハードウェアも含んでよい。共有I/O497は、複数の別個の物理接続を利用してよく、または、高速リンク440を横断してよい。また、アクセラレータ統合回路436は、ホストプロセッサのために、グラフィック処理エンジンの仮想化、割り込およびメモリ管理を管理する仮想化機能を提供してよい。
グラフィック処理エンジン431~432、Nのハードウェアリソースは、ホストプロセッサ407から見られる実アドレス空間に明示的にマッピングされるので、任意のホストプロセッサは、有効アドレス値を用いて、これらのリソースを直接アドレス指定してよい。アクセラレータ統合回路436の1つのオプションの機能は、グラフィック処理エンジン431~432、Nがシステムにとってそれぞれ独立のユニットとして見えるように、それらを物理的に分離することである。
1または複数のグラフィックメモリ433~434、Mはそれぞれ、グラフィック処理エンジン431~432、Nにそれぞれ結合されてよい。グラフィックメモリ433~434、Mは、グラフィック処理エンジン431~432、Nの各々により処理されている命令およびデータを格納する。グラフィックメモリ433~434、Mは、DRAM(スタック型DRAMを含む)、GDDRメモリ(例えば、GDDR5、GDDR6)またはHBM等の揮発性メモリであってよく、および/または、3D XPoint/Optane、またはNano-Ram等の不揮発性メモリであってよい。
高速リンク440上のデータトラフィックを低減すべく、バイアス技術が用いられて、グラフィックメモリ433~434、M内に格納されたデータが、グラフィック処理エンジン431~432、Nによって最も頻繁に用いられ、好ましくは、コア460A~460Dによって用いられない(少なくとも頻繁にではない)データであることを保証してよい。同様に、バイアスメカニズムは、コアおよびシステムメモリ411のキャッシュ462A~462D、456内のコア(好ましくは、グラフィック処理エンジン431~432、Nではない)によって必要とされるデータの保持を試行する。
図4Cに示される変形により、アクセラレータ統合回路436がプロセッサ407内で統合される。グラフィック処理エンジン431~432、Nは、高速リンク440経由でインタフェース437およびインタフェース435を介して、アクセラレータ統合回路436と直接通信する(これらは再び任意の形態のバスまたはインタフェースプロトコルを用いてよい)。アクセラレータ集積回路436は、図4Bに関して説明されるものと同一の処理を実行し得るが、潜在的に、コヒーレンシバス464およびキャッシュ462A-462D、456に近接する、より高い所与のスループットである。
本明細書で説明する実施形態は、専用プロセスプログラミングモデル(グラフィック加速化モジュール仮想化なし)および共有プログラミングモデル(仮想化あり)を含む異なるプログラミングモデルをサポートしてよい。後者は、アクセラレータ集積回路436によって制御されるプログラミングモデルと、グラフィック加速化モジュール446によって制御されるプログラミングモデルとを含んでよい。
専用プロセスモデルの実施形態において、グラフィック処理エンジン431~432、Nは、単一のオペレーティングシステム下で、単一のアプリケーションまたはプロセスに割り当てられてよい。単一アプリケーションは、他のアプリケーション要求をグラフィックエンジン431~432、Nに送信し、VM/パーティション内で仮想化を提供できる。
専用プロセスプログラミングモデルにおいて、グラフィック処理エンジン431-432、Nは、複数のVM/アプリケーションパーティションを共有し得る。共有モデルは、グラフィック処理エンジン431~432、Nを仮想化して、各オペレーティングシステムによるアクセスを可能にするためのシステムハイパバイザを必要とする。ハイパーバイザを持たない単一のパーティショニングシステムについては、グラフィック処理エンジン431~432、Nはオペレーティングシステムにより所有される。これら両方の場合において、オペレーティングシステムは、各プロセスまたはアプリケーションへのアクセスを提供すべく、グラフィック処理エンジン431~432、Nを仮想化してよい。
共有プログラミングモデルについては、グラフィック加速化モジュール446または個々のグラフィック処理エンジン431~432、Nが、プロセスハンドルを用いてプロセス要素を選択する。プロセス要素はシステムメモリ411内に格納されてよく、本明細書で説明する有効アドレス-実際のアドレス変換技術を用いてアドレス指定可能であってよい。プロセスハンドルは、コンテキストをグラフィック処理エンジン431~432、Nに登録するときに、ホストプロセスに提供される実装固有の値であってよい(すなわち、プロセス要素をプロセス要素リンクリストに追加するためにシステムソフトウェアを呼び出す)。プロセスハンドルのうち低いほうの16ビットは、プロセス要素にリンクしたリスト内のプロセス要素のオフセットであり得る。
図4Dは、例示的なアクセラレータ統合スライス490を示す。 ここで用いられる「スライス」は、アクセラレータ統合回路436の処理リソースの特定の一部を有する。システムメモリ411内のアプリケーション有効アドレス空間482は、プロセス要素483を格納する。プロセス要素483は、プロセッサ407上で実行されるアプリケーション480からのGPU呼び出し481に応答して格納されてよい。プロセス要素483は、対応するアプリケーション480の処理状態を含む。プロセス要素483内に含まれるワーク記述子(WD)484は、アプリケーションにより要求される単一のジョブであってよく、または、複数のジョブのキューへのポインタを含んでよい。後者の場合、WD484は、そのアプリケーションのアドレス空間482におけるジョブ要求キューへのポインタである。
グラフィック加速化モジュール446および/または個々のグラフィック処理エンジン431~432、Nは、システム内のプロセスの全部またはサブセットによって共有されてよい。例えば、ここで説明される技術は、処理状態を設定するための、および、WD484をグラフィック加速化モジュール446に送信して仮想化環境内でジョブを開始するためのインフラストラクチャを含んでよい。
一実装において、専用プロセスプログラミングモデルは、実装固有である。このモデルにおいては、単一プロセスは、グラフィック加速化モジュール446または個々のグラフィック処理エンジン431を所有する。グラフィック加速化モジュール446が単一プロセスにより所有されるので、ハイパーバイザは、その所有するパーティショニングのためのアクセラレータ統合回路436を初期化し、オペレーティングシステムは、グラフィック加速化モジュール446が割り当てられた時点で、所有するプロセスのためのアクセラレータ統合回路436を初期化する。
動作中、アクセラレータ統合スライス490内のWDフェッチユニット491は、グラフィック加速化モジュール446のグラフィック処理エンジンのうちの1つによって成されるべきワークの指標を含む次のWD484をフェッチする。WD484からのデータは、レジスタ445内に格納されてよく、図示の通り、MMU439、割り込み管理回路447および/またはコンテキスト管理回路448によって用いられてよい。例えば、MMU439は、OS仮想アドレス空間485内のセグメント/ページテーブル486にアクセスするためのセグメント/ページウォーク回路を含んでよい。割り込み管理回路447は、グラフィック加速化モジュール446から受信した割り込みイベント492を処理してよい。グラフィック処理の実行時、グラフィック処理エンジン431~432、Nによって生成される有効アドレス493は、MMU439によって実アドレスに変換される。
各グラフィック処理エンジン431~432、Nおよび/またはグラフィック加速化モジュール446に、同一のレジスタのセット445が重複されてよく、ハイパーバイザまたはオペレーティングシステムにより初期化されてよい。これらの重複レジスタの各々は、アクセラレータ統合スライス490内に含まれてよい。ハイパーバイザにより初期化されてよい例示的なレジスタが、表1に示される。
表1-ハイパーバイザ初期化されたレジスタ
Figure 2022523912000002
オペレーティングシステムによって初期化されてよい例示的なレジスタが表2に示される。
表2-オペレーティングシステム初期化されたレジスタ
Figure 2022523912000003
各WD484は、特定のグラフィック加速化モジュール446および/またはグラフィック処理エンジン431-432に固有であってよい。各WD484は、グラフィック処理エンジン431~432、Nがそのワークを行うために必要なすべての情報を含み、または、各WD484は、アプリケーションが完了すべきワークのコマンドキューを設定したメモリ位置へのポインタであってよい。
図4Eは、共有モデルの追加のオプションの詳細を示す。これは、プロセス要素リスト499が格納されているハイパーバイザ実アドレス空間498を含む。ハイパーバイザ実アドレス空間498は、オペレーティングシステム495のために、グラフィック加速化モジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
共有プログラミングモデルは、システム内のパーティショニングの全部またはサブセットからのプロセスの全部またはサブセットが、グラフィック加速化モジュール446を用いることを可能にする。グラフィック加速化モジュール446が、複数のプロセスおよびパーティションにより共有されるプログラミングモデルには、タイムスライス共有およびグラフィックにより指示される共有の2つがある。
このモデルでは、システムハイパバイザ496は、グラフィック加速化モジュール446を所有し、その機能をすべてのオペレーティングシステム495に対し利用可能にする。システムハイパバイザ496による仮想化をサポートするグラフィック加速化モジュール446については、グラフィック加速化モジュール446は、以下の要求に従ってよい。1)アプリケーションのジョブ要求は、自律的(つまり、状態はジョブ間で維持される必要がない)である必要がある、または、グラフィック加速化モジュール446は、コンテキスト保存および復元メカニズムを提供する必要がある。2)アプリケーションのジョブ要求は、任意の変換障害を含む指定時間内で完了することをグラフィック加速化モジュール446により保証される、または、グラフィック加速化モジュール446はジョブの処理をプリエンプトできる能力を提供する。3)グラフィック加速化モジュール446は、指示される共有プログラミングモデルで動作するとき、プロセス間の公平性を保証される必要がある。
共有モデルについては、アプリケーション480は、グラフィック加速化モジュール446タイプ、ワーク記述子(WD)、権限マスクレジスタ(AMR)値およびコンテキスト保存/復元領域ポインタ(CSRP)で、オペレーティングシステム495のシステム呼び出しを行うことが必要とされてよい。グラフィック加速化モジュール446タイプは、システム呼び出しの目的とされる加速化機能を記述する。グラフィック加速化モジュール446タイプは、システム固有の値であってよい。WDは、グラフィック加速化モジュール446用に具体的にフォーマットされており、グラフィック加速化モジュール446のコマンド、ユーザ定義の構造への有効アドレスポインタ、コマンドキューへの有効アドレスポインタ、または、ワークがグラフィック加速化モジュール446により実行されるべきであることを記述する任意の他のデータ構造の形態であってよい。一実施形態において、AMR値は、現在のプロセスに用いられるAMR状態である。オペレーティングシステムに渡される値は、AMRを設定するアプリケーションと同様である。アクセラレータ統合回路436実装およびグラフィック加速化モジュール446実装が、ユーザ権限マスク上書きレジスタ(UAMOR)をサポートしない場合、オペレーティングシステムは、ハイパーバイザ呼び出しでAMRを渡す前に、現在のUAMOR値をAMR値に適用してよい。随意で、ハイパーバイザ496は、AMRを、プロセス要素483に配置する前に、現在の権限マスク上書きレジスタ(AMOR)値を適用してよい。CSRPは、グラフィック加速化モジュール446がコンテキスト状態を保存および復元するためのアプリケーションアドレス空間482内の領域の有効アドレスを含むレジスタ445のうちの1つであってよい。ジョブ間の状態が保存される必要がない場合、または、あるジョブがプリエンプトされるとき、このポインタは随意である。コンテキスト保存/復元領域は、固定されたシステムメモリ(pinned system memory)であってよい。
システム呼び出しを受信すると、オペレーティングシステム495は、アプリケーション480が登録されており、グラフィック加速化モジュール446を使用するための権限が付与されていることを検証してよい。その後、オペレーティングシステム495は、表3に示される情報を用いてハイパーバイザ496を呼び出す。
表3-ハイパーバイザ呼び出しパラメータへのOS
Figure 2022523912000004
ハイパーバイザ呼び出しを受信すると、ハイパーバイザ496は、オペレーティングシステム495が登録されており、グラフィック加速化モジュール446を使用する権限が付与されていることを検証する。その後、ハイパーバイザ496は、プロセス要素483を、対応するグラフィック加速化モジュール446タイプのプロセス要素リンクリストに置く。プロセス要素は、表4に示される情報を含んでよい。
表4-プロセス要素情報
Figure 2022523912000005
ハイパーバイザは、アクセラレータ統合スライス490の複数のレジスタ445を初期化してよい。
図4Fに示される通り、1つのオプションの実装においては、物理プロセッサメモリ401~402およびGPUメモリ420~423にアクセスするために用いられる共通仮想メモリアドレス空間を介してアドレス指定可能な一体化メモリを用いる。この実装においては、GPU410~413で実行される処理は、プロセッサメモリ401~402にアクセスするために、同一の仮想/有効メモリアドレス空間を用い、逆の場合もそうであり、これによりプログラム可能性を単純化させる。仮想/有効アドレス空間の第1の部分がプロセッサメモリ401に、第2の部分が第2のプロセッサメモリ402に、第3の部分がGPUメモリ420(以下同様)に割り当てられてよい。よって、仮想/有効メモリ空間全体(有効アドレス空間とも称される)は、プロセッサメモリ401~402およびGPUメモリ420~423の各々の間で分散されてよく、任意のプロセッサまたはGPUが、そのメモリにマッピングされた仮想アドレスを用いて任意の物理メモリにアクセスすることを可能にする。
ホストプロセッサ(例えば、405)のキャッシュとGPU410~413のキャッシュとの間のキャッシュコヒーレンスを保証し、特定のタイプのデータが格納されるべき物理メモリを示すバイアス技術を実装する、MMU439A~439Eの1または複数内のバイアス/コヒーレンス管理回路494A~494Eが提供されてよい。図4F中にはバイアス/コヒーレンス管理回路494A~494Eの複数のインスタンスが示されている一方、バイアス/コヒーレンス回路は、1または複数のホストプロセッサ405のMMU内および/またはアクセラレータ統合回路436内に実装されてもよい。
GPU付属メモリ420~423が、システムメモリの一部としてマッピングされること、および、共有仮想メモリ(SVM)技術を用いてアクセスされてよく、フルシステムのキャッシュコヒーレンスに関連する典型的な性能上の欠点には悩まされない。厄介なキャッシュコヒーレンスのオーバヘッドを伴わず、GPU付属メモリ420~423がシステムメモリとしてアクセスできることにより、GPUオフロードのための有利な動作環境がもたらされる。この構成により、従来のI/O DMAデータコピーのオーバヘッドを伴うことなく、ホストプロセッサ405のソフトウェアがオペランドを設定すること、および、計算結果にアクセスすることを可能にする。かかる従来のコピーは、ドライバ呼び出し、割り込み、メモリにマッピングされたI/O(MMIO)アクセスを必要とし、これらはすべて、簡易なメモリアクセスと比較して非効率的である。同時に、キャッシュコヒーレンスのオーバヘッドを伴わずに、GPU付属メモリ420~423にアクセスできることは、オフロード計算の実行時間にとってクリティカルであってよい。ストリーミング書き込みメモリトラフィックが大きい場合、例えば、キャッシュコヒーレンスのオーバヘッドは、GPU410~413から見える有効書き込み帯域幅を大きく低減させる可能性がある。オペランド設定の効率性、結果へのアクセスの効率性およびGPU計算の効率性はすべて、GPUオフロードの有効性を決定づける役割を果たす。
GPUバイアスおよびホストプロセッサバイアスの間の選択は、バイアストラッカデータ構造により駆動されてよい。例えば、GPU付属メモリページ毎に1または2ビットを含むページ粒度の構造(つまり、メモリページの粒度で制御される)であってよい、バイアステーブルが用いられてよい。バイアステーブルは、GPU410~413内のバイアスキャッシュを有するまたは有しない状態で、1または複数のGPU付属メモリ420~423のストールンメモリ(stolen memory)範囲内で実装されてよい(例えば、バイアステーブルの頻繁に/最近用いられたエントリをキャッシュすべく)。代替的に、バイアステーブル全体がGPU内で維持されてよい。
一実装において、GPU付属メモリ420~423への各アクセスに関連付けられたバイアステーブルエントリは、GPUメモリへの実際のアクセスより前にアクセスされ、以下の処理を生じさせる。第1に、GPUバイアス内に自身のページを検出したGPU410~413からのローカル要求は、対応するGPUメモリ420~423に直接転送される。ホストバイアス内に自身のページを検出したGPUからのローカル要求は、プロセッサ405に転送(例えば、上述のような高速リンクを通して)される。随意で、ホストプロセッサバイアス内に要求されたページを検出したプロセッサ405からの要求は、通常のメモリ読み取りと同様に当該要求を完了する。代替的に、GPUバイアスされたページに宛てられた要求は、GPU410~413に転送されてよい。すると、GPUが当該ページを現在使用中でない場合は、GPUは当該ページをホストプロセッサバイアスに遷移させてよい。
ページのバイアス状態は、ソフトウェアベースのメカニズム、ハードウェア支援のソフトウェアベースのメカニズム、あるいは、限定的な場合では純粋なハードウェアベースのメカニズムのいずれかにより変更されてよい。
バイアス状態を変更するための1つのメカニズムがAPI呼び出し(例えば、OpenCL)を用いると、API呼び出しによりGPUのデバイスドライバが呼び出され、GPUのデバイスドライバにより、GPUに対しバイアス状態を変更し、且ついくつかの遷移のために、ホスト内のキャッシュフラッシュ処理を実行することを指示するメッセージがGPUに送信(またはコマンド記述子をキューに入れる)される。ホストプロセッサ405バイアスからGPUバイアスへの遷移には、キャッシュフラッシュ処理が必要とされるが、逆の遷移に対しては、これは必要ではない。
キャッシュコヒーレンシは、ホストプロセッサ405により、一時的にGPUバイアスされたページをキャッシュ不可能にレンダリングすることで維持されてよい。これらのページにアクセスすべく、プロセッサ405は、GPU410からのアクセスを要求してよく、実装に応じ、GPU410は即座にアクセスを許可してもよいし、しなくてもよい。故に、ホストプロセッサ405とGPU410との間の通信を低減するには、GPUバイアスされたページが、ホストプロセッサ405ではなく、GPUにより必要とされるページであることを保証することが有利であり、逆の場合にも当てはまる。「グラフィック処理パイプライン」
図5は、グラフィック処理パイプライン500を示す。図2D中のグラフィックマルチプロセッサ234、図3Aのグラフィックマルチプロセッサ325、図3Bのグラフィックマルチプロセッサ350等のグラフィックマルチプロセッサが、図示されたグラフィック処理パイプライン500を実装してよい。グラフィックマルチプロセッサは、図2Aの並列プロセッサ200等の、本明細書で説明する並列処理サブシステム内に含まれてよく、並列処理サブシステムは、図1の並列プロセッサ112に関連づけられてよく、それらのうちの1つの代わりに用いられてよい。様々な並列処理システムは、本明細書で説明する並列処理ユニット(例えば、図2Aの並列処理ユニット202)の1または複数のインスタンスを介してグラフィック処理パイプライン500を実装してよい。例えば、シェーダユニット(例えば、図2Cのグラフィックマルチプロセッサ234)は、頂点処理ユニット504、テッセレーション制御処理ユニット508、テッセレーション評価処理ユニット512、ジオメトリ処理ユニット516およびフラグメント/画素処理ユニット524のうちの1または複数の機能を実行するよう構成されてよい。データアセンブラ502、プリミティブアセンブラ506、514、518、テッセレーションユニット510、ラスタライザ522およびラスタ処理ユニット526の機能も、処理クラスタ(例えば、図2Aの処理クラスタ214)および対応するパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)内の他の処理エンジンにより実行されてよい。またグラフィック処理パイプライン500は、1または複数の機能のための専用処理ユニットを用いて実装されてもよい。グラフィック処理パイプライン500の1または複数の部分は、汎用プロセッサ(例えば、CPU)内の並列処理ロジックにより実行されることも可能である。随意で、グラフィック処理パイプライン500の1または複数の部分は、メモリインタフェース528を介してオンチップメモリ(例えば、図2Aのような並列プロセッサメモリ222)にアクセスしてよく、メモリインタフェース528は、図2Aのメモリインタフェース218の一例であってよい。グラフィックプロセッサパイプライン500はまた、図3Cにあるようなマルチコアグループ365Aにより実装されてもよい。
データアセンブラ502は、表面およびプリミティブのための頂点データを収集してよい処理ユニットである。その後、データアセンブラ502は、頂点属性を含む当該頂点データを頂点処理ユニット504に出力する。頂点処理ユニット504は、頂点シェーダプログラムを実行するプログラマブル実行ユニットであり、頂点シェーダプログラムにより指定される通りに、頂点データをライティングおよび変換する。頂点処理ユニット504は、頂点データの処理に用いるために、キャッシュ、ローカルまたはシステムメモリに格納されたデータを読み取り、頂点処理ユニット504は、頂点データをオブジェクトベースの座標表現からワールド空間座標空間または正規化されたデバイスの座標空間へ変換するようにプログラムされてよい。
プリミティブアセンブラ506の第1のインスタンスは、頂点処理ユニット504から頂点属性を受信する。プリミティブアセンブラ506は必要に応じて、格納された頂点属性を読み取り、テッセレーション制御処理ユニット508による処理のためにグラフィックプリミティブを構築する。グラフィックプリミティブは、様々なグラフィック処理アプリケーションプログラミングインタフェース(API)によってサポートされるような三角形、線分、ポイントおよびパッチ等を含む。
テッセレーション制御処理ユニット508は、入力された頂点をジオメトリックパッチのための制御ポイントとして扱う。制御ポイントは、パッチからの入力表現(例えば、パッチベース)から、テッセレーション評価処理ユニット512による表面評価での使用に好適な表現へと変換される。テッセレーション制御処理ユニット508は、ジオメトリックパッチのエッジのテッセレーションファクタも計算してよい。テッセレーションファクタは、単一のエッジに適用され、当該エッジに関連付けられた詳細情報のビュー依存レベルを定量化する。テッセレーションユニット510は、パッチのエッジのテッセレーションファクタを受信し、且つ、当該パッチを、線、三角形、四辺形のプリミティブ等の複数のジオメトリックプリミティブにテッセレーションするよう構成されており、これらのプリミティブはテッセレーション評価処理ユニット512に伝送される。テッセレーション評価処理ユニット512は、細分化されたパッチのパラメータ化された座標に対し処理を行い、当該ジオメトリックプリミティブに関連付けられた表面表現および各頂点の頂点属性を生成する。
プリミティブアセンブラ514の第2のインスタンスは、テッセレーション評価処理ユニット512から頂点属性を受信し、必要に応じて格納された頂点属性を読み取り、ジオメトリ処理ユニット516による処理のためのグラフィックプリミティブを構築する。ジオメトリ処理ユニット516は、プリミティブアセンブラ514から受信されたグラフィックプリミティブを、ジオメトリシェーダプログラムよる指定通りに変換するジオメトリシェーダプログラムを実行するプログラマブル実行ユニットである。ジオメトリ処理ユニット516は、グラフィックプリミティブを、1または複数の新しいグラフィックプリミティブに細分化し、且つ、当該新しいグラフィックプリミティブをラスタライズするために用いられるパラメータを計算ようにプログラムされてよい。
ジオメトリ処理ユニット516は、ジオメトリストリームに要素を追加または削除できてよい。ジオメトリ処理ユニット516は、新しいグラフィックプリミティブを指定するパラメータおよび頂点をプリミティブアセンブラ518に出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516から当該パラメータおよび頂点を受信し、ビューポイントスケール、カリングおよびクリップユニット520による処理のためのグラフィックプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリデータを処理するために用いる、並列プロセッサメモリまたはシステムメモリ内に格納されたデータを読み取る。ビューポイントスケール、カリング、クリップユニット520は、クリッピング、カリングおよびビューポイントスケーリングを実行し、処理されたグラフィックプリミティブをラスタライザ522に出力する。
ラスタライザ522は、デプスカリングおよび他のデプスベースの最適化を実行してよい。またラスタライザ522は、新しいグラフィックプリミティブに対しスキャン変換を実行してフラグメントを生成し、これらのフラグメントおよび関連するカバレッジデータを、フラグメント/画素処理ユニット524に出力する。フラグメント/画素処理ユニット524は、フラグメントシェーダプログラムまたは画素シェーダプログラムを実行するよう構成されたプログラマブル実行ユニットである。フラグメント/画素処理ユニット524は、ラスタライザ522から受信されたフラグメントまたは画素を、フラグメントまたは画素シェーダプログラムにより指定された通りに変換する。例えば、フラグメント/画素処理ユニット524は、テクスチャマッピング、シェーディング、ブレンディング、テクスチャ補正およびパースペクティブ補正等(これらに限定はされない)を含む処理を実行して、シェーディングされたフラグメントまたは画素を生成するようプログラムされてよく、当該フラグメントまたは画素はラスタ処理ユニット526に出力される。フラグメント/画素処理ユニット524は、フラグメントデータを処理するときに用いるために、並列プロセッサメモリまたはシステムメモリのいずれかに格納されたデータを読み取ってよい。フラグメントまたは画素シェーダプログラムは、処理ユニットのために構成されたサンプリングレートに応じ、サンプル粒度、画素粒度、タイル粒度または他の粒度でシェーディングするよう構成されてよい。
ラスタ処理ユニット526は、ラスタ処理を実行する処理ユニットであり、ラスタ処理としては、限定ではないが、ステンシル、z検定およびブレンディング等が含まれ、ラスタ処理ユニット526は、画素データを、グラフィックメモリ(例えば、図2Aの並列プロセッサメモリ222のような、および/または、図1のシステムメモリ104のような)内に格納されるべき処理されたグラフィックデータとして、1または複数のディスプレイデバイス110上に表示されるべき処理されたグラフィックデータとして、あるいは、1または複数のプロセッサ102または並列プロセッサ112のうちの1つによるさらなる処理のために、出力する。ラスタ処理ユニット526は、メモリに書き込まれるzデータまたはカラーデータを圧縮し、メモリから読み取られたzデータまたはカラーデータを圧縮解除するよう構成されてよい。「機械学習の概要」
上述のアーキテクチャは、機械学習モデルを用いて訓練および推論処理を実行するために適用されてよい。機械学習は、多くの種類のタスクの解決において成功してきた。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練および使用する際に生じる計算は、本質的に効率的な並列実装にふさわしい。従って、汎用グラフィック処理ユニット(GPGPU)等の並列プロセッサは、ディープニューラルネットワークの実用的実装において大きな役割を果たす。単一命令複数スレッド(SIMT)アーキテクチャを持つ並列グラフィックプロセッサが、グラフィックパイプライン内での並列処理量を最大化するよう設計されている。SIMTアーキテクチャにおいては、処理効率性を向上させるべく、並列スレッドのグループが、可能な限り頻繁に、複数のプログラム命令を同期して実行することを試みる。並列機械学習アルゴリズム実装によりもたらされる効率性は、高容量ネットワークの使用を可能とし、これらのネットワークがより大型のデータベース上で訓練されることを可能にする。
機械学習アルゴリズムは、データのセットを基に学習可能なアルゴリズムである。例えば、機械学習アルゴリズムは、データセット内の高レベルの抽象化をモデリングするように設計されてよい。例えば、イメージ認識アルゴリズムは、特定の入力がいくつかのカテゴリのうちのいずれに属するかを判定するために用いられてよい。回帰アルゴリズムは、入力が与えられると数値を出力してよい。パターン認識アルゴリズムは、変換されたテキストを生成する、またはテキスト対スピーチ認識および/またはスピーチ認識を実行するために用いられてよい。
機械学習アルゴリズムの例示的なタイプは、ニューラルネットワークである。多くのタイプのニューラルネットワークが存在する。単純なタイプのニューラルネットワークは、フィードフォワードネットワークである。フィードフォワードネットワークは、ノードが複数の層に配置される非巡回グラフとして実装されてよい。典型的には、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層および出力層を含む。隠れ層は、入力層により受信された入力を、出力層での出力を生成するために有用な表現に変換する。ネットワークノードは、エッジにより、隣接する層のノードにすべて結合されるが、各層内のノード間にはエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信されるデータは、レイヤ同士を接続する各エッジにそれぞれ関連付けられた係数("重み")に基づき、ネットワーク内の連続する各層のノードの状態を計算する活性化関数を介して、出力層のノードに伝播(つまり、"フィードフォワードされ")される。実行されるアルゴリズムにより表現される特定のモデルに応じ、ニューラルネットワークアルゴリズムからの出力は、様々な形態を取ってよい。
機械学習アルゴリズムを用いて特定の問題をモデリングできるようになる前に、当該アルゴリズムは訓練データセットを用いて訓練される。ニューラルネットワークの訓練には、ネットワークトポロジを選択すること、ニューラルネットワークによりモデリングされている問題を表わす訓練データのセットを用いること、および、ネットワークモデルが当該訓練データのセットのあらゆるインスタンスに対し最小のエラーで実行するようになるまで重みを調整することが含まれる。例えば、ニューラルネットワークのための教師あり学習訓練プロセスの間に、訓練データセット内のあるインスタンスを表わす入力に応答して、ネットワークにより生成された出力は、そのインスタンスの"正解"ラベルの出力と比較され、出力とそのラベル付き出力との間の差を表わすエラー信号が計算され、当該エラー信号がネットワークの層を通って後方伝播される際、そのエラーを最小化すべく、これらの関係に関連付けられた重みが調整される。訓練データセットのインスタンスから生成される各出力に対するエラーが最小化されたら、ネットワークは、"訓練された"とみなされる。
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために用いられるデータセットの品質により大きく影響され得る。訓練プロセスは計算集中的なものであり得、従来の汎用プロセッサに対し多大な時間を要求する可能性がある。従って、並列処理ハードウェアが、多くのタイプの機械学習アルゴリズムを訓練するために用いられる。ニューラルネットワークにおける係数の調整において実行される計算は、本質的に並列実装にふさわしいものであり、これは、ニューラルネットワークの訓練を最適化するために特に有用である。具体的に言うと、多くの機械学習アルゴリズムおよびソフトウェアアプリケーションは、汎用グラフィック処理デバイス内で並列処理ハードウェアを活用するように適合されている。
図6は、機械学習ソフトウェアスタック600の一般的な図である。機械学習アプリケーション602は、訓練データセットを使用してニューラルネットワークを訓練するように、又は訓練されたディープニューラルネットワークを使用してマシンインテリジェンスを実装するように構成されることができる。機械学習アプリケーション602は、ニューラルネットワークのための訓練および推論機能、および/または、展開前にニューラルネットワークを訓練するために用いられてよい専用ソフトウェアを含んでよい。機械学習アプリケーション602は、限定されることはないが、画像認識、マッピングおよび位置特定、自律航法、音声合成、医用イメージング、または言語変換を含む、任意のタイプのマシンインテリジェンスを実装し得る。
機械学習アプリケーション602のためのハードウェア加速化は、機械学習フレームワーク604を介して有効化されてよい。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供してよい。機械学習プリミティブは、機械学習アルゴリズムにより共通に実行される基本的な処理である。機械学習フレームワーク604がなければ、機械学習アルゴリズムの開発者たちに、機械学習アルゴリズムに関連する主な計算ロジックを作成し且つ最適化することが要求され、新しい並列プロセッサが開発されるにつれ、計算ロジックを再度最適化することが要求されるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク604により提供されるプリミティブを用いて、必要な計算を実行するよう構成されてよい。例示的なプリミティブには、テンソル畳み込み、活性化関数およびプーリングが含まれ、これらは、畳み込みニューラルネットワーク(CNN)を訓練する際に実行される計算処理である。機械学習フレームワーク604はまた、行列処理およびベクトル処理等の多くの機械学習アルゴリズムにより行われる基本的な線形代数サブプログラムを実装するためのプリミティブも提供してよい。
機械学習フレームワーク604は、機械学習アプリケーション602から受信された入力データを処理し、適切な入力を計算フレームワーク606に生成してよい。計算フレームワーク606は、機械学習フレームワーク604に対しがGPGPUハードウェア610のアーキテクチャの詳細な知識を有することを要求することなく、機械学習フレームワーク604がGPGPUハードウェア610を介してハードウェア加速化を活用できるようにするためのGPGPUドライバ608に提供される基礎的な命令を要約してよい。追加的に、計算フレームワーク606は、様々なタイプおよび世代のGPGPUハードウェア610にわたり、機械学習フレームワーク604のためのハードウェア加速化を可能にしてよい。「GPGPU機械学習加速化」
図7は、図2Aの並列プロセッサ200または図1の並列プロセッサ112であってよい汎用グラフィック処理ユニット700を示す。汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練に関連付けられたタイプの計算ワークロードを、特に効率的に処理するように構成され得る。さらに、GPGPU700は、特に、ディープニューラルネットワークに対する訓練スピードを改善させるマルチGPUクラスタを作成するGPGPUの他の例に直接関連し得る。
GPGPU700は、ホストプロセッサへの接続を可能にするホストインタフェース702を含む。ホストインタフェース702は、PCI Expressインタフェースであってよい。しかしながら、ホストインタフェースは、ベンダ特有の通信インタフェースまたは通信ファブリックであってもよい。GPGPU700は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ704を用いて、これらのコマンドに関連付けられた実行スレッドを、処理クラスタ706A~706Hのセットに分散する。処理クラスタ706A~706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708は、処理クラスタ706A~706H内のキャッシュメモリのためのより高レベルのキャッシュとして機能してよい。図示された処理クラスタ706A~706Hは、図2Aにあるような処理クラスタ214A~214Nと対応してよい。
GPGPU700は、メモリコントローラ712A~712Bのセットを介して、処理クラスタ706A~Hに結合されたメモリ714A~714Bを含む。メモリユニット714A~714Bは、ダイナミックランダムアクセスメモリ(DRAM)を含むメモリデバイス、または、グラフィックダブルデータレート(GDDR)メモリを含む同期グラフィックランダムアクセスメモリ(SGRAM)等のグラフィックランダムアクセスメモリの様々なタイプのメモリデバイスを含んでよい。メモリ714A~714Bはまた、高帯域幅メモリ(HBM)を含む3Dスタックメモリも含んでよいが、HBMに限定はされない。
処理クラスタ706A~706Hの各々は、図2Dのグラフィックマルチプロセッサ234、図3Aのグラフィックマルチプロセッサ325、図3Bのグラフィックマルチプロセッサ350等のグラフィックマルチプロセッサのセットを含んでよく、または、図3Cのマルチコアグループ365A~365Nを含んでよい。計算クラスタのグラフィックマルチプロセッサは、機械学習計算に好適なものを含む精度範囲において計算処理を実行可能な、複数のタイプの整数および浮動小数点ロジックユニットを含む。例えば、各処理クラスタ706A~706H内の浮動小数点ユニットの少なくともサブセットは、16ビットまたは32ビットの浮動小数点処理を実行するよう構成されてよい一方、浮動小数点ユニットの異なサブセットは、64ビットの浮動小数点処理を実行するよう構成されてよい。
GPGPU700の複数のインスタンスは、計算クラスタとして動作するよう構成されてよい。同期およびデータ交換用に計算クラスタにより用いられる通信メカニズムは、実施形態にわたり変わる。例えば、GPGPU700の複数のインスタンスは、ホストインタフェース702を通して通信する。一実施形態において、GPGPU700は、GPGPU700を、GPGPUの他のインスタンスに直接接続できるようにするGPUリンク710に結合するI/Oハブ709を含む。GPUリンク710は、GPGPU700の複数のインスタンス間での通信および同期化を可能にする専用のGPU間ブリッジに結合されてよい。随意で、GPUリンク710は、他のGPGPUまたは並列プロセッサへのデータを送信および受信すべく、高速相互接続に結合される。GPGPU700の複数のインスタンスは、別個のデータ処理システムに位置してよく、ホストインタフェース702を介してアクセス可能なネットワークデバイスを介して通信してよい。GPUリンク710は、ホストインタフェース702に加え、または、ホストインタフェース702の代わりに、ホストプロセッサへの接続を可能にするよう構成されてよい。
図示されたGPGPU700の構成は、ニューラルネットワークを訓練するように構成され得るが、高性能または低電力の推論プラットフォーム内で展開するために、GPGPU700の代替的な構成が構成されてよい。推論構成においては、GPGPU700は、訓練構成と比較して、より少ない数の処理クラスタ706A~706Hを含む。追加的に、メモリ714A~714Bメモリに関連付けするメモリ技術は、推論構成と訓練構成との間で異なってよい。一実施形態において、GPGPU700の推論構成は、推論特有の命令をサポートしてよい。例えば、推論構成は、1または複数の8ビット整数ドット積命令のサポートを提供してよく、当該命令は、展開されたニューラルネットワークのための推論処理中に共通で用いられる。
図8は、マルチGPUコンピューティングシステム800を示す。マルチGPUコンピューティングシステム800は、ホストインタフェーススイッチ804を介して複数のGPGPU806A~806Dに結合されたプロセッサ802を含んでよい。ホストインタフェーススイッチ804は、プロセッサ802をPCIエクスプレスバスに結合するPCI Expressスイッチデバイスであってよく、PCIエクスプレスバスを通して、プロセッサ802は、GPGPU806A~806Dのセットと通信してよい。複数のGPGPU806A~806Dの各々は、図7のGPGPU700のインスタンスであってよい。GPGPU806A~806Dは、高速ポイントツーポイントGPU間リンク816のセットを介して相互接続されてよい。高速GPU間リンクは、図7のGPUリンク710等の専用GPUリンクを介して、GPGPU806A~806Dの各々に接続されてよい。P2P GPUリンク816は、プロセッサ802が接続されたホストインタフェースバス経由での通信を要求することなく、GPGPU806A~806Dの各々の間での直接通信を可能にする。GPU間トラフィックはP2P GPUリンクに宛てられ、ホストインタフェースバスは、システムメモリアクセスのために、または、マルチGPUコンピューティングシステム800の他のインスタンスと例えば、1または複数のネットワークデバイスを介して通信すべく、利用可能なままである。図8においては、GPGPU806A~806Dは、ホストインタフェーススイッチ804を介してプロセッサ802に接続される一方、プロセッサ802は、代替的にP2P GPUリンク816の直接サポートを含んでよく、GPGPU806A~806Dに直接接続されてよい。「機械学習ニューラルネットワーク実装」
本明細書で説明するコンピューティングアーキテクチャは、機械学習のためのニューラルネットワークの訓練および展開に特に好適なタイプの並列処理を実行するよう構成されてよい。ニューラルネットワークは、グラフ関係を有する機能のネットワークとして一般化されてよい。当技術分野で周知であるように、機械学習において用いられる様々なタイプのニューラルネットワーク実装が存在する。ニューラルネットワークの1つの例示的なタイプは、上述のようなフィードフォワードネットワークである。
第2の例示的なタイプのニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。CNNは、イメージデータ等の既知のグリッドの様なトポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。従って、CNNは、コンピュータビジョンアプリケーションおよびイメージ認識アプリケーションで一般的に用いられるが、それらはまた、スピーチ処理および言語処理等の他のタイプのパターン認識に用いられてもよい。CNN入力層におけるノードは、"フィルタ"(網膜で見られる受容野によりインスパイアされた機能検出器)のセットに編成され、フィルタの各セットの出力がネットワークの連続層におけるノードへ伝播される。CNNのための計算は、畳み込み数学処理を各フィルタに適用して、そのフィルタの出力を生成することを含む。畳み込みとは、2つの元の機能のうちの一方の修正版である第3の機能を生成すべく、当該2つの機能により実行される特別な種類の数学処理である。畳み込みネットワークの用語において、畳み込みに対する第1の機能は入力と称されてよい一方、第2の機能は、畳み込みカーネルと称されてよい。出力は、特徴マップと称されてよい。例えば、畳み込み層への入力は、入力イメージの様々なカラー要素を定義するデータの多次元アレイであってよい。畳み込みカーネルは、パラメータの多次元アレイであってよく、当該パラメータは、ニューラルネットワークの訓練プロセスにより適合されている。
再帰型ニューラル(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分間でパラメータデータを共有することで、シーケンシャルデータのモデリングを可能にする。RNNのアーキテクチャは、サイクルを含む。RNNからの出力データの少なくとも一部はシーケンス中の後続の入力を処理するためのフィードバックとして用いられるので、サイクルは変数の現在の値が、将来の時点におけるそれ自体の値への影響を表わす。この機能は、言語データが作成され得る変数の本質に起因し、言語処理にRNNを特に有用にする。
以下に示す図は、例示的なフィードフォワード、CNNおよびRNNネットワークを示しており、これらのタイプの各ネットワークをそれぞれ訓練および展開するための一般的なプロセスについて説明する。これらの説明は例示であり、ここで説明する特定の実施形態に限定するものではないこと、および、示される概念は、一般にディープニューラルネットワークおよび機械学習技術に概して適用可能であることを理解されたい。
上記の例示的なニューラルネットワークを用いて、深層学習を実行してよい。深層学習は、ディープニューラルネットワークを用いる機械学習である。深層学習で用いられるディープニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークに対し、複数の隠れ層で構成される人工ニューラルネットワークである。概して、より深いニューラルネットワークは、より訓練のための計算集中的なものとなる。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して、出力エラーの低減をもたらすマルチステップパターン認識を可能にする。
深層学習で用いられるディープニューラルネットワークは典型的に、バックエンドネットワークに結合された特徴認識を実行するためのフロントエンドネットワークを含み、バックエンドネットワークは、モデルに提供された特徴表現に基づく処理(例えば、オブジェクト分類、スピーチ認識等)を実行し得る数学モデルを表わす。深層学習は、手作業で作成される特徴エンジニアリングがモデルに実行されることを必要とせずに、機械学習が実行されることを可能にする。代わりに、ディープニューラルネットワークは、統計構造または入力データ内の相関関係に基づき、特徴を学習してよい。学習された特徴が数学モデルに提供されてよく、数学モデルが検出された特徴を出力にマッピングしてよい。ネットワークにより用いられる数学モデルは概して、実行されるべき特定のタスクに専用のものであり、異なるタスクを実行するために異なるモデルが用いられる。
ニューラルネットワークが構築されると、学習モデルがネットワークに適用され、ネットワークが特定のタスクを実行するよう訓練してよい。学習モデルは、ネットワークの出力エラーを低減すべく、モデル内の重みをいかに調整するかを記述する。誤差逆伝播法は、ニューラルネットワークを訓練するために用いられる一般的方法である。処理するための入力ベクトルがネットワークに示される。ネットワークの出力は、損失関数を用いて所望の値と比較され、出力層における各ニューロンに対し各エラー値が計算される。その後、エラー値は、各ニューロンが、元の出力に対する寄与を大まかに表す関連するエラー値を有するようになるまで、後方伝播される。その後、ネットワークは、確率的勾配降下法アルゴリズム等のアルゴリズムを用いて、これらのエラーから学習して、ニューラルネットワークの重みを更新してよい。
図9A~9Bは、例示的な畳み込みニューラルネットワークを示す。図9Aは、CNN内の様々な層を示す。図9Aに示される通り、イメージプロセッシングをモデリングするために用いられる例示的なCNNは、入力イメージの赤、緑および青(RGB)の要素を記述した入力902を受信してよい。入力902は、複数の畳み込み層(例えば、畳み込み層904、畳み込み層906)により処理されてよい。随意で、複数の畳み込み層からの出力は、全結合層層のセット908により処理されてよい。全結合層におけるニューロンは、フィードフォワードネットワークで前述したように、前の層におけるすべての活性化に対し完全な結合を有している。全結合層908からの出力を用いて、ネットワークからの出力結果を生成してよい。全結合層908内の活性化は、畳み込みの代わりに行列乗算を用いて計算されてよい。すべてのCNN実装が、全結合層908を利用するわけではない。例えば、いくつかの実装においては、畳み込み層906がCNNの出力を生成してよい。
畳み込み層はスパースに接続され、全結合層908において見受けられる従来型のニューラルネットワーク構成とは異なる。あらゆる出力ユニットがあらゆる入力ユニットと相互作用するように、従来のニューラルネットワーク層は完全に結合されている。しかしながら、図示の通り、あるフィールドの畳み込みの出力が後続層のノードへ入力(当該フィールドにおける各ノードのそれぞれの状態値の代わりに)されるので、畳み込み層はスパースに接続されている。畳み込み層に関連付けられたカーネルが畳み込み処理を実行し、その出力が次の層へと送信される。畳み込み層内で実行される次元削減は、CNNが大きなイメージを処理するためにスケーリングできるようにする1つの態様である。
図9Bは、CNNの畳み込み層内での例示的な計算ステージを示す。CNNの畳み込み層912への入力は、畳み込み層914の3つのステージで処理されてよい。3つのステージは、畳み込みステージ916、検出ステージ918、およびプーリングステージ920を含んでよい。その後、畳み込み層914は、出力データをその後に続く畳み込み層へと出力してよい。ネットワークの最終畳み込み層は、出力特徴マップデータを生成し、または、全結合層へ入力を提供し、例えば、入力の分類値をCNNに生成してよい。
畳み込みステージ916において、線形活性化のセットを生成すべく、いくつかの畳み込みを並列で実行する。畳み込みステージ916は、アフィン変換を含んでよく、アフィン変換は、線形変換に平行移動を加えたものとして指定され得る任意の変換であってよい。アフィン変換は、回転、平行移動、スケーリングおよびこれらの変換の組み合わせを含む。畳み込みステージは、入力における特定の領域に接続された機能(例えば、ニューロン)の出力を計算し、入力はニューロンに関連付けられた局所領域として決定されてよい。ニューロンは、ニューロンの重みと、ニューロンが接続された局所入力における領域との間のドット積を計算する。畳み込みステージ916からの出力は、畳み込み層914の連続ステージによって処理される線形活性化のセットを定義する。
線形活性化は、検出ステージ918によって処理されてよい。検出ステージ918において、各線形活性化は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を及ぼすことなく、ネットワーク全体の非線形プロパティを増やす。いくつかのタイプの非線形活性化関数が用いられてよい。1つの特定のタイプは、正規化線形ユニット(ReLU)であり、ReLUは、活性化がゼロに閾値設定されるように、f(x)=max(0,x)として定義される活性化関数を用いる。
プーリングステージ920は、畳み込み層906の出力を、近くの出力の要約統計と置き換えるプーリング関数を用いる。入力へのわずかな並進がプールされた出力を変更しないように、プーリング関数を用いて、ニューラルネットワークに並進不変性(translation invariance)を導入してよい。入力データ内の特徴の存在が特徴の正確な位置よりも重要なシナリオにおいては、局所的な移動に対する不変性は有用であり得る。様々なタイプのプーリング関数が、最大プーリング、平均プーリングおよびl2-ノルムプーリングを含むプーリングステージ920中に用いられてよい。追加的に、いくつかのCNN実装は、プーリングステージを含まない。代わりに、かかる実装は、前の畳み込みステージと比較して、増加したストライドを有する代わりのおよび追加の畳み込みステージである。
その後、畳み込み層914からの出力は、次の層922により処理されてよい。次の層922は、追加の畳み込み層であってよく、または、全結合層908のうちの1つであってよい。例えば、図9Aの第1の畳み込み層904は、第2の畳み込み層906に出力してよい一方、第2の畳み込み層は、全結合層908の第1の層に出力してよい。
図10は、例示的な再帰型ニューラルネットワーク1000を示す。再帰型ニューラルネットワーク(RNN)においては、ネットワークの1つ前の状態がネットワークの現在の状態の出力に影響する。RNNは、様々な機能を用いて様々に構築されてよい。RNNの使用は、概して、入力の前のシーケンスに基づき将来を予測する数学モデルを用いて、循環する。例えば、RNNを用いて、1つ前の単語シーケンスを与えられると、次に来る単語を予測する統計的言語モデリングを実行してよい。図示されたRNN1000は、入力ベクトルを受信する入力層1002、再帰機能を実装する隠れ層1004、前の状態の"メモリ"を可能にするフィードバックメカニズム1005および結果を出力する出力層1006を有するものとして説明されてよい。RNN1000は、タイムステップに基づき動作する。特定のタイムステップにおけるRNNの状態は、フィードバックメカニズム1005による前のタイムステップに基づき影響を受ける。特定のタイムステップについて、隠れ層1004の状態は、前の状態および現在のタイムステップにおける入力により定義される。第1のタイムステップにおける初期入力(x)が、隠れ層1004により処理されてよい。第2の入力(x)は、初期入力(x)の処理中に判定された状態情報を用いて、隠れ層1004により処理されてよい。特定の状態は、st=f(Uxt+Wst-1)として計算されてよく、式中UおよびWはパラメータ行列である。概して、関数fは、双曲線正接関数(Tanh)または正規化関数f(x)=max(0,x)の変形例等、非線形性である。しかしながら、隠れ層1004で用いられる特定の数学関数は、RNN1000の具体的な実装の詳細に応じ変わってよい。
説明される基本的なCNNおよびRNNネットワークに加えて、これらのネットワーク上のバリエーションが可能にされてもよい。一例のRNNの変形例は、長短期記憶(LSTM)RNNである。LSTM RNNは、言語のより長いシーケンスを処理するために必要であり得る長期依存を学習可能である。CNNの変形例は畳み込みディープビリーフネットワークであり、当該ネットワークは、CNNと同様の構造を有し、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク(DBN)は、確率(ランダム)変数の複数の層で構成される生成系ニューラルネットワーク(generative neural network)である。DBNは、層毎にグリーディ教師なし学習(greedy unsupervised learning)を用いて訓練されてよい。次に、DBNの学習される重みは、ニューラルネットワークに対する重みの最適な初期セットを決定することにより、事前訓練ニューラルネットワークを提供するために用いられ得る。
図11は、ディープニューラルネットワークの訓練と展開を示す。あるタスク用に特定のネットワークが構築済みとされたら、ニューラルネットワークは、訓練データセット1102を用いて訓練される。訓練プロセスのハードウェア加速化を可能にするための様々な訓練フレームワーク1104が開発されている。例えば、図6の機械学習フレームワーク604は、訓練フレームワーク604として構成されてよい。訓練フレームワーク604は、訓練されていないニューラルネットワーク1106に接続されてよく、訓練されていないニューラルネットが本明細書で説明する並列処理リソースを用いて訓練できるようにして、訓練されたニューラルネット1108を生成してよい。
訓練プロセスを開始すべく、初期の重みがランダムに、または、ディープビリーフネットワークを用いた事前訓練により選択されてよい。その後、訓練サイクルが、教師ありまたは教師なし方式で実行されてよい。
教師あり学習は、例えば、訓練データセット1102が、入力に対する所望の出力と組み合わされる入力を含む場合、または、訓練データセットが、既知の出力を有する入力を含み、かつ、ニューラルネットワークの出力が手動で格付けされる場合等の仲介処理として訓練が実行される学習方法である。ネットワークは入力を処理し、得られた出力を、予期されるまたは所望の出力のセットと比較する。その後、エラーがシステムに伝播される。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106を制御する重みを調整してよい。訓練フレームワーク1104は、うまく訓練されていないニューラルネットワーク1106が、既知の入力データに基づき正しい回答を生成するのに適したモデルに収束しつつあるかをモニタリングするツールを提供してよい。ネットワークの重みが、ニューラルネットワークにより生成される出力を絞り込むべく調整されるにつれ、訓練プロセスは繰り返し行われる。訓練プロセスは、訓練されたニューラルネット1108に関連付けられた統計的に所望される精度にニューラルネットワークが到達するまで継続されてよい。その後、訓練されたニューラルネットワーク1108は、新しいデータ1112の入力に基づき、推論結果1114を生成するための任意の数の機械学習処理を実装するよう展開されてよい。
教師なし学習は、ネットワークがラベル付けされていないデータを用いて自身を訓練することを試みる学習方法である。故に、教師なし学習については、訓練データセット1102は、関連付けられた出力データを持たない入力データを含む。訓練されていないニューラルネットワーク1106は、ラベル付けされていない入力内のグループ化を学習してよく、個々の入力がデータセット全体にどのように関係するかを判定してよい。教師なし訓練を用いて、自己組織化マップを生成してよく、当該マップは、データの次元を削減するのに有用な処理を実行可能な訓練されたニューラルネットワーク1108の一種である。また、教師なし訓練を用いて、アノマリ検出を実行してもよく、アノマリ検出は、入力データセット内の、データの通常のパターンから逸脱するデータポイントの識別を可能にする。
教師あり学習および教師なし訓練の変形例も、用いられてよい。半教師あり学習は、訓練データセット1102が、同一分散のうち、ラベル付けされたデータとラベル付けされていないデータの混在を含む技術である。増分学習は、モデルをさらに訓練すべく、入力データが継続的に用いられる教師あり学習の変形例である。増分学習は、訓練されたニューラルネットワーク1108が、初期訓練中にネットワーク内に植え付けられた知識を忘れることなく、新しいデータ1112に適合できるようにする。
教師ありまたは教師なしに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードにとって計算集中となり過ぎる可能性がある。単一の計算ノードを用いる代わりに、計算ノードの分散型ネットワークを用いて、訓練プロセスを加速化させてよい。
図12は、分散型学習を示すブロック図である。分散型学習は、複数の分散コンピューティングノードを用いて、ニューラルネットワークの教師あり訓練または教師なし訓練を実行する訓練モデルである。分散型計算ノードはそれぞれ、1または複数のホストプロセッサ、および図7の高速並列汎用グラフィック処理ユニット700のような、汎用処理ノードのうちの1または複数を含んでよい。図示されるように、分散型学習は、モデル並列処理1202、データ並列処理1204、または、モデルおよびデータ並列処理1204の組み合わせを実行し得る。
モデル並列処理1202においては、分散型システム内の異なる計算ノードが、単一のネットワークの異なる部分の訓練計算を実行してよい。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによって訓練されてよい。モデル並列処理の利点には、とりわけ大きいモデルにスケーリングできる能力が含まれてよい。ニューラルネットワークの異なる層に関連付けられた計算を分裂させることで、すべての層の重みが単一の計算ノードのメモリに収まらないであろう非常に大きなニューラルネットワークの訓練を可能にする。いくつかの例において、モデル並列処理は、大型ニューラルネットワークの教師なし訓練を実行するのに特に有用であってよい。
データ並列処理1204において、分散型ネットワークの異なるノードはモデルの完全なインスタンスを有し、各ノードはデータの異なる部分を受信する。その後、異なるノードからの結果が組み合わされる。データ並列処理に対する異なるアプローチが可能である一方、データ並列訓練アプローチはすべて結果を結合し、且つ、各ノード間のモデルパラメータを同期化する技術を要求する。データを結合する例示的なアプローチには、データ並列処理に基づくパラメータの平均化および更新が含まれる。パラメータの平均化は、訓練データのサブセット上の各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータの平均化は、パラメータデータを維持する中央のパラメータサーバを用いる。更新ベースのデータ並列処理は、ノードからのパラメータをパラメータサーバに転送する代わりに、モデルへの更新が転送される点を除き、パラメータの平均化と同様である。追加的に、更新ベースのデータ並列処理は、非中央集中方式で実行されてよく、そこでは、更新は圧縮されて、ノード間で転送される。
組み合わされたモデルおよびデータ並列処理1206が、例えば、各計算ノードが複数のGPUを含む分散型システム内で実装されてよい。各ノードは、モデルの異なる部分を訓練するために用いられる、各ノード内の別個のGPUを持つモデルの完全なインスタンスを有することができる。
分散型訓練は、単一マシン上での訓練と比較してオーバヘッドを増大させる。しかしながら、本明細書において説明される並列プロセッサおよびGPGPUは各々、分散型訓練のオーバヘッドを低減させる様々な技術を実装でき、高帯域幅GPU間データ転送および加速されたリモートデータ同期を可能にする技術を含む。「例示的な機械学習アプリケーション」
様々な技術的な問題を解決すべく、機械学習が適用されてよく、このような問題としては、限定ではないが、コンピュータビジョン、自律運転およびナビゲーション、スピーチ認識および言語処理等が含まれる。従来、コンピュータビジョンは、機械学習アプリケーションにとっての最も活発な研究分野のうちの1つである。コンピュータビジョンのアプリケーションは、顔認識等の人間の視覚能力を再生するものから、視覚能力の新たなカテゴリを作成することまでにわたる。例えば、コンピュータビジョンアプリケーションは、ビデオ内の可視オブジェクトに誘導される振動から音波を認識するよう構成されてよい。並列プロセッサにより加速化される機械学習は、コンピュータビジョンアプリケーションが、以前の実行可能なものよりはるかに大型の訓練データセットを用いて訓練されることを可能にし、且つ、推論システムが、低電力並列プロセッサを用いて展開されることを可能にする。
並列プロセッサにより加速化される機械学習は、レーンおよび道路標識の認識、障害回避、ナビゲーションおよび運転制御を含む自律運転アプリケーションを有する。加速化された機械学習技術を用いて、特定の訓練入力に対する適切な応答を定義するデータセットに基づき、運転モデルを訓練してよい。本明細書で説明される並列プロセッサは、自律運転ソリューションに用いられるますます複雑化するニューラルネットワークの迅速な訓練を可能にしてよく、自律走行車に統合するのに適したモバイルプラットフォーム内への低電力推論プロセッサの配備を可能にする。
並列プロセッサにより加速化されるディープニューラルネットワークは、機械学習アプローチを自動スピーチ認識(ASR)に可能にしている。ASRは、入力アコースティックシーケンスが与えられた際、最も確からしい言語シーケンスを計算する機能の作成を含む。ディープニューラルネットワークを用いた加速化された機械学習は、ASRに前に用いられた非表示Markovモデル(HMM)とガウス混在モデル(GMM)の置換を可能にする。
また、並列プロセッサにより加速化された機械学習を用いて、自然言語処理を加速化させてよい。自動学習プロシージャは、統計推論アルゴリズムを活用して、エラーの多い、または見慣れていない入力に対し堅牢なモデルを生成してよい。例示的な自然言語プロセッサアプリケーションは、人間の言語と言語との間の自動機械翻訳を含む。
機械学習に用いられる並列処理プラットフォームが、訓練プラットフォームおよび展開プラットフォームに分割されてよい。概して、訓練プラットフォームは非常に並列的であり、マルチGPU‐単一ノードの訓練およびマルチノード‐マルチGPUの訓練を加速化させるための最適化を含む。訓練に適した例示的な並列プロセッサは、図7の汎用グラフィック処理ユニット700および図8のマルチGPUコンピューティングシステム800を含む。それどころか、展開される機械学習プラットフォームは、一般的に、カメラ、自律ロボットおよび自律走行車などの製品での使用に適した低電力並列プロセッサを含む。
図13は、訓練されたモデルを用いて、推論を実行するのに適した、システムオンチップ(SoC)1300上の例示的な推論システムを示す。SoC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306およびマルチコアプロセッサ1308を含む処理コンポーネントを統合してよい。GPGPU1306はGPGPU700等のここで説明するようなGPGPUであってよく、マルチコアプロセッサ1308は、マルチコアプロセッサ405~406等のここで説明するようなマルチコアプロセッサであってよい。追加的に、SoC1300は、処理コンポーネントの各々によりアクセス可能な共有のオンチップデータプールを可能にし得るオンチップメモリ1305を含んでよい。処理コンポーネントは、自律走行車および自律ロボットを含む、様々機械学習プラットフォームへの配備を可能にするために、低電力処理のために最適化されてよい。例えば、SoC1300の一実装が自律走行車のメイン制御システムの一部として用いられてよい。SoC1300が、自律走行車での使用に構成される場合、SoCは、配備管轄機関の関連する機能的安全性標準に準拠するよう設計され、構成される。
処理中、メディアプロセッサ1302およびビジョンプロセッサ1304は、コンピュータビジョン処理を加速化させるべく、連携動作してよい。メディアプロセッサ1302は、複数の高解像度(例えば、4K、8K)ビデオストリームの低レイテンシのデコードを可能にしてよい。デコードされたビデオストリームは、オンチップメモリ1305のバッファに書き込まれ得る。その後、ビジョンプロセッサ1304がデコードされたビデオを解析してよく、訓練されたイメージ認識モデルを用いてフレームを処理する準備として、デコードされたビデオのフレームに対し予備的な演算処理を実行してよい。例えば、バックエンドモデルの計算がGPGPU1306により実行されている間に、ビジョンプロセッサ1304は、高解像度のビデオデータでのイメージ認識を実行するために用いられるCNNの畳み込み処理を加速化させてよい。
マルチコアプロセッサ1308は、データ転送のシーケンシングおよび同期化、並びに、メディアプロセッサ1302およびビジョンプロセッサ1304により実行される共有メモリ処理を支援するための制御ロジックを含んでよい。マルチコアプロセッサ1308はまた、GPGPU1306の推論計算機能を活用し得るソフトウェアアプリケーションを実行するためのアプリケーションプロセッサとして機能してよい。例えば、ナビゲーションおよび運転ロジックの少なくとも一部が、マルチコアプロセッサ1308上で実行されるソフトウェアに実装されてよい。かかるソフトウェアは、計算ワークロードをGPGPU1306に直接発行してよく、または、計算ワークロードは、これらの処理の少なくとも一部を、GPGPU1306にオフロードし得るマルチコアプロセッサ1308に対して発行されてよい。
GPGPU1306は、汎用グラフィック処理ユニット700内の低電力構成の処理クラスタ706A~706Hのような計算クラスタを含んでよい。GPGPU1306内の計算クラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために特に最適化された命令をサポートしてよい。例えば、GPGPU1306は、8ビット整数ベクトル処理および4ビット整数ベクトル処理等の低精度計算を実行するための命令をサポートしてよい。「追加のシステム概要」
図14は、処理システム1400のブロック図である。本明細書における任意の他の図面の要素と同一または類似の名称を有する図14の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定されることはない。システム1400は、単一プロセッサのデスクトップ、システム、マルチプロセッサワークステーションシステム、または多数ののプロセッサ1402若しくはプロセッサコア1407を有するサーバシステムで用いられてよい。システム1400は、モバイル、ハンドヘルド、またはローカルエリアネットワーク若しくはワイドエリアネットワークへの有線若しくは無線接続機能を備えたモノのインターネット(IoT)デバイス等の埋め込み型デバイスで用いられるためのシステムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームであってよい。
システム1400は、図1のコンポーネントに対応するコンポーネントを有する処理システムであってよい。例えば、様々な構成において、プロセッサ1402またはプロセッサコア1407は、図1のプロセッサ102に対応してよい。グラフィックプロセッサ1408は、図1の並列プロセッサ112に対応してよい。外部グラフィックプロセッサ1418は、図1のアドインデバイス120のうちの1つであってよい。
システム1400は、サーバベースのゲームプラットフォーム、ゲームコンソールおよびメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソールまたはオンラインゲームコンソールを含んでよい、またはそこに結合されてよい、または、そこに統合されてよい。システム1400は、モバイルフォン、スマートフォン、タブレットコンピューティングデバイス、または内部ストレージ容量の低いラップトップ等のモバイルインターネット接続デバイスの一部であってよい。処理システム1400は、スマートウォッチウェアラブルデバイス;実世界のビジュアルエクスペリエンス、オーディオエクスペリエンスまたは触覚エクスペリエンスを補強するビジュアル出力、オーディオ出力または触覚出力を提供するための、あるいはテキストフィードバック、オーディオフィードバック、グラフィックフィードバック、ビデオフィードバック、ホログラムイメージフィードバックまたはビデオフィードバックまたは触覚フィードバックを提供するための、拡張現実(AR)機能または仮想現実(VR)機能付きの拡張されたスマートアイウェアまたはスマート衣服;他の拡張現実(AR)デバイス;他の仮想現実(VR)デバイス等のウェアラブルデバイスを含んでよい、ウェアラブルデバイスに結合されてよい、またはウェアラブルデバイスに統合されてよい。処理システム1400は、テレビジョンデバイスまたはセットトップボックスデバイスを含んでよい、または、その一部であってよい。システム1400は、バス、トラクタトレーラ、車、モータサイクルまたは電力サイクル、飛行機またはグライダ(またはこれらの任意の組み合わせ)等の自動運転ビークルを含んでよい、当該ビークルに結合されてよい、または当該ビークルに統合されてよい。自動運転ビークルは、システム1400を用いてビークルの周囲で感知された環境を処理してよい。
1または複数のプロセッサ1402は、実行時にシステムまたはユーザソフトウェアに、処理を実行する命令を処理するための1または複数のプロセッサコア1407を含んでよい。1または複数のプロセッサコア1407の少なくとも1つは、特定の命令セット1409を処理するよう構成されてよい。命令セット1409は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、または、超長命令語(VLIW)を介したコンピューティングを促進してよい。1または複数のプロセッサコア1407は、異なる命令セット1409を処理してよく、当該命令は、他の命令セットのエミュレーションを容易にするための命令を含んでよい。プロセッサコア1407はまた、デジタル信号プロセッサ(DSP)等の他の処理デバイスを含んでもよい。
プロセッサ1402は、キャッシュメモリ1404を含んでよい。アーキテクチャに応じ、プロセッサ1402は、単一の内部キャッシュまたは複数レベルの内部キャッシュを有してよい。いくつかの実施形態において、キャッシュメモリは、プロセッサ1402の様々なコンポーネント間で共有されてよい。いくつかの実施形態において、プロセッサ1402はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュまたはラストレベルキャッシュ(LLC))(不図示)も用い、外部キャッシュは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア1407間で共有されてよい。追加的に、レジスタファイル1406は、プロセッサ1402内に含まれてよく、レジスタファイル1406は、異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタおよび命令ポインタレジスタ)を含んでよい。いくつかのレジスタは、汎用レジスタであって良い一方、他のレジスタは、プロセッサ1402の設計に固有のものであってよい。
1または複数のプロセッサ1402は、アドレス信号、データ信号、制御信号等の通信信号をプロセッサ1402とシステム1400内の他のコンポーネントとの間で伝送するために、1または複数のインタフェースバス1410に結合されていてよい。これらの実施形態のうちの1つにおいて、インタフェースバス1410は、ダイレクトメディアインタフェース(DMI)バスのバージョン等のプロセッサバスであってよい。しかしながら、プロセッサバスはDMIバスに限定されることはなく、1または複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバスまたは他のタイプのインタフェースバスを含んでよい。例えば、プロセッサ1402は、統合メモリコントローラ1416およびプラットフォームコントローラハブ1430を含んでよい。メモリコントローラ1416は、メモリデバイスとシステム1400の他のコンポーネントとの間の通信を容易にする一方、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイスまたはプロセスメモリとして機能する好適な性能を有するいくつかの他のメモリデバイスであってよい。メモリデバイス1420は、例えば、システム1400のシステムメモリとして動作して、1または複数のプロセッサ1402がアプリケーションまたはプロセスを実行するときに用いるデータ1422および命令1421を格納してよい。また、メモリコントローラ1416は、オプションの外部グラフィックプロセッサ1418に結合され、外部グラフィックプロセッサ1418は、グラフィック処理またはメディア処理を実行するために、プロセッサ1402内の1または複数のグラフィックプロセッサ1408を通信してよい。いくつかの実施形態において、グラフィック処理、メディア処理および/または計算処理は、グラフィック処理、メディア処理または計算処理の特別なセットを実行するよう構成されてよいコプロセッサであるアクセラレータ1412により支援されてよい。例えば、アクセラレータ1412は、機械学習または計算処理を最適化するために用いられる行列乗算アクセラレータであってよい。アクセラレータ1412は、グラフィックプロセッサ1408と連携してレイトレーシング処理を実行するために用いられてよいレイトレーシングアクセラレータであってよい。一実施形態において、アクセラレータ1412の代わりに、またはアクセラレータ1412と連携させて、外部アクセラレータ1419が用いられてよい。
プロセッサ1402に接続されてよいディスプレイデバイス1411が提供されてよい。ディスプレイデバイス1411は、モバイル電子デバイスまたはラップトップデバイスまたはディスプレイインタフェース(例えば、ディスプレイポート等)を介して取り付けられた外部ディスプレイデバイス内にあるような、内部ディスプレイデバイスのうちの1または複数であってよい。ディスプレイデバイス1411は、ヘッドマウントディスプレイ(HMD)、例えば、仮想現実(VR)アプリケーションまたは拡張現実(AR)アプリケーションでの使用のための立体表示デバイスであってよい。
プラットフォームコントローラハブ1430は、高速I/Oバスを介して、周辺機器をメモリデバイス1420およびプロセッサ1402に接続できるようにしてよい。I/O周辺機器としては、限定ではないが、オーディオコントローラ1446、ネットワークコントローラ1434、ファームウェアインタフェース1428、無線トランシーバ1426、タッチセンサ1425、データストレージデバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint/Optane等)が含まれる。データストレージデバイス1424は、ストレージインタフェース(例えば、SATA)を介して、またはペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)等の周辺機器バスを介して接続されてよい。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサまたは指紋センサを含んでよい。無線トランシーバ1426は、Wi-Fi(登録商標)トランシーバ、Bluetooth(登録商標)トランシーバ、3G、4G、5G若しくはロングタームエボリューション(LTE)トランシーバ等のモバイルネットワークトランシーバであってよい。ファームウェアインタフェース1428は、システムファームウェアとの通信を可能にし、例えば、一体化された拡張可能ファームウェアインタフェース(UEFI)であってよい。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にしてよい。いくつかの実施形態において、高性能ネットワークコントローラ(不図示)は、インタフェースバス1410に結合される。オーディオコントローラ1446は、マルチチャネル高解像度オーディオコントローラであってよい。これらの実施形態のうちのいくつかにおいて、システム1400は、レガシ(例えば、パーソナルシステム2(PS/2))デバイスをシステムに結合するための随意のレガシI/Oコントローラ1440を含む。また、プラットフォームコントローラハブ1430は、キーボードおよびマウス1443の組み合わせ、カメラ1444または他のUSB入力デバイス等の、1または複数のユニバーサルシリアルバス(USB)コントローラ1442の接続入力デバイスに接続されてよい。
図示されたシステム1400は、例示的なものであり限定的なものでないので、異なる構成の他のタイプのデータ処理システムも用いられてよいことを理解されたい。例えば、メモリコントローラ1416およびプラットフォームコントローラハブ1430のインスタンスは、外部グラフィックプロセッサ1418などの、別個の外部グラフィックプロセッサへと統合されてよい。プラットフォームコントローラハブ1430および/またはメモリコントローラ1416は、1または複数のプロセッサ1402の外部にあってよい。例えば、システム1400は、外部メモリコントローラ1416およびプラットフォームコントローラハブ1430を含んでよく、これらは、プロセッサ1402と通信するシステムチップセット内のメモリコントローラハブおよび周辺機器コントローラハブとして構成されてよい。
例えば、CPU、メモリ等のコンポーネントおよび他のコンポーネントが配置された回路基板("スレッド(sled)")が、熱性能を高めるために設計される。プロセッサ等の処理コンポーネントは、スレッドの上面に配置される一方、DIMM等のnearメモリがスレッドの下面に配置されてよい。この設計によりもたらされるエアフローの拡大の結果、コンポーネントは、典型的なシステムよりも、高い周波数および電力レベルで動作してよく、これにより、性能が上がる。スレッドは、ラック内のパワーおよびデータ通信ケーブルに手探りでリンクされるよう構成されており、これにより、迅速に除去、アップグレード、再設置および/または交換ができる能力を向上させる。同様に、プロセッサ、アクセラレータ、メモリおよびデータストレージドライブ等の、スレッド上に配置された個々のコンポーネントは、それらの互いとの間の間隔が広くなっていることにより、容易にアップグレードされるよう構成されている。示された実施形態では、追加的に、コンポーネントは、これらの認証を証明するためのハードウェア証明機能を含む。
データセンタは、イーサネット(登録商標)およびオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ("ファブリック")を用いてよい。スレッドは、典型的なツイストペアケーブル配線(例えば、カテゴリ5、カテゴリ5e、カテゴリ6等)よりも、高い帯域幅およびより低いレイテンシをもたらす光ファイバを介してスイッチに結合されてよい。高帯域幅および低レイテンシの相互接続およびネットワークアーキテクチャにより、データセンタは、メモリアクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワークおよび/または人工知能アクセラレータ等)、および、物理的に非集約なデータストレージドライブ等のプールリソースを使用してよく、それらを必要時に応じ、計算リソース(例えば、プロセッサ)に提供し、プールリソースがローカルである場合に、計算リソースがプールリソースにアクセスできるようにしてよい。
電源または電力ソースは、電圧および/または電流をシステム1400または任意のコンポーネントまたは本明細書で説明するシステムに提供してよい。一例において、電源は、壁のコンセントに差し込むAC‐DC(交流‐直流)アダプタを含む。このようなAC電力は、再生エネルギー(例えば、太陽光発電)電力源であってよい。一例において、電力源は、外付けのAC‐DCコンバータ等のDC電力源を含む。電力源または電源はまた、充電場に近接させることで充電する無線の充電ハードウェアも含んでよい。電力源は、内蔵バッテリ、交流電源、モーションベースの電源、太陽光発電または燃料電池ソースを含んでよい。
図15A~図15Cは、コンピューティングシステムおよびグラフィックプロセッサを示す。本明細書の任意の他の図面の要素と同一または類似の名称を有する図15A~15Cの要素は、他の図面における同一の要素を説明しており、本明細書の他の箇所での説明と同様に、それと同様の態様で動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定はされない。
図15Aは、プロセッサ1500のブロック図であり、プロセッサ1500は、プロセッサ1402のうちの1つの変形例であってよく、それらのうちの1つの代わりに用いられてよい。従って、ここでのプロセッサ1500との組み合わせにおける任意の特徴の開示内容はまた、プロセッサ1402との対応する組み合わせも開示しているが、そのように限定はされない。プロセッサ1500は、1または複数のプロセッサコア1502A-1502N、統合メモリコントローラ1514および統合グラフィックプロセッサ1508を有してよい。統合グラフィックプロセッサ1508が除外される場合、当該プロセッサを含むシステムは、システムチップセット内にグラフィックプロセッサデバイスを含むか、あるいは、システムバスを介して結合される。プロセッサ1500は、最大で、破線ボックスで表される追加のコア1502Nまでを含む追加のコアを含んでよい。プロセッサコア1502A~1502Nの各々は、1または複数の内部キャッシュのユニット1504A~1504Nを含む。いくつかの実施形態において、各プロセッサコア1502A~1502Nは、また1または複数の共有のキャッシュユニット1506にアクセスできる。内部キャッシュユニット1504A~1504Nおよび共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表わす。キャッシュメモリ階層は、各プロセッサコア内に少なくとも1つのレベルの命令およびデータキャッシュ、並びにレベル2(L2)、レベル3(L3)、レベル4(L4)等の共有中間レベルキャッシュおよび他のレベルのキャッシュのうちの1または複数のレベルを含んでよく、この場合、外部メモリの前の最高レベルのキャッシュがLLCと分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックが、様々なキャッシュユニット1506および1504A~1504N間のコヒーレンシを維持する。
プロセッサ1500は、1または複数のバスコントローラユニット1516のセットおよびシステムエージェントコア1510を含んでもよい。1または複数のバスコントローラユニット1516は、1または複数のPCIまたはPCI Expressバス等の周辺機器バスのセットを管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントのための管理機能を提供する。システムエージェントコア1510は、様々な外部メモリデバイス(不図示)へのアクセスを管理するための1または複数の統合メモリコントローラ1514を含んでよい。
例えば、プロセッサコア1502A~1502Nのうちの1または複数は、同時マルチスレッディングのためのサポートを含んでよい。システムエージェントコア1510は、マルチスレッド処理中にコア1502A~1502Nを協調させ、動作させるためのコンポーネントを含む。追加的にシステムエージェントコア1510は、電力制御ユニット(PCU)を含んでよく、PCUは、プロセッサコア1502A~1502Nおよびグラフィックプロセッサ1508の電力状態を制御するためのロジックおよびコンポーネントを含む。
追加的にプロセッサ1500は、グラフィック演算処理を実行するためのグラフィックプロセッサ1508を含んでよい。これらの実施形態うちのいくつかにおいて、グラフィックプロセッサ1508は、共有キャッシュユニット1506のセットおよび1または複数の統合メモリコントローラ1514を含むシステムエージェントコア1510に結合される。システムエージェントコア1510は、1または複数の結合ディスプレイへのグラフィックプロセッサの出力を駆動するためのディスプレイコントローラ1511も含んでよい。ディスプレイコントローラ1511は、また少なくとも1つの相互接続を介してグラフィックプロセッサに結合された別個のモジュールであってよく、あるいは、グラフィックプロセッサ1508内に統合されてもよい。
リングベースの相互接続ユニット1512を用いて、プロセッサ1500の内部コンポーネントを結合してよい。しかしながら、代替的な相互接続ユニットが使用されてもよく、例えば、ポイント間相互接続、切り替え相互接続、または当技術分野で周知の技術を含む他の技術が用いられてよい。これらの実施形態うちのいくつかにおいて、リングベースの相互接続1512を用いて、グラフィックプロセッサ1508は、I/Oリンク1513を介してリングベース相互接続1512に結合される。
例示的なI/Oリンク1513は、複数の様々なI/O相互接続のうちの少なくとも1つを表わし、このようなものとしては、様々なプロセッサコンポーネントと、eDRAMモジュール等の高性能埋め込み型メモリモジュール1518との間の通信を促進させるパッケージI/O相互接続が含まれる。随意でプロセッサコア1502A~1502Nおよびグラフィックプロセッサ1508の各々は、埋め込み型メモリモジュール1518を共有ラストレベルキャッシュとして用いてよい。
例えば、プロセッサコア1502A~1502Nは、同一の命令セットアーキテクチャを実行する同種のコアであってよい。代替的に、プロセッサコア1502A~1502Nは、命令セットアーキテクチャ(ISA)の観点から異種であり、プロセッサコア1502A~1502Nのうちの1または複数は、第1の命令セットを実行する一方、他のコアのうちの少なくとも1つは、第1の命令セットのサブセットまたは異なる命令セットを実行する。プロセッサコア1502A~1502Nは、マイクロアーキテクチャの観点から異種であってよく、比較的より高い電力消費量を有する1または複数のコアは、より低い電力消費量を有する1または複数の電力コアに結合される。別の例として、プロセッサコア1502A~1502Nは、計算能力の観点から異種である。追加的に、プロセッサ1500は、1または複数のチップ上に実装されてよく、あるいは他のコンポーネントに加え、図示されたコンポーネントを有するSoC集積回路として実装されてよい。
図15Bは、本明細書で説明するいくつかの実施形態により、グラフィックプロセッサコア1519のハードウェアロジックのブロック図である。コアスライスとも呼ばれることがあるグラフィックプロセッサコア1519は、モジュール式グラフィックプロセッサ内の1または複数のグラフィックコアであってよい。グラフィックプロセッサコア1519は、1つのグラフィックコアスライスの例示であり、本明細書で説明されるようなグラフィックプロセッサは、目標とする電力および性能エンベロープに基づき、複数のグラフィックコアスライスを含んでよい。各グラフィックプロセッサコア1519は、サブスライスとも称される複数のサブコア1521A~1521Fに結合された固定機能ブロック1530を含んでよく、サブコアは、汎用の固定機能ロジックのモジュール式ブロックを含む。
固定機能ブロック1530は、グラフィックプロセッサコア1519内の、例えば、より低性能および/またはより低電力のグラフィックプロセッサ実装におけるすべてのサブコアで共有可能なジオメトリ/固定機能パイプライン1531を含んでよい。ジオメトリ/固定機能パイプライン1531は、3D固定機能パイプライン(例えば、後述する図16Aにあるような3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポーナおよびスレッドディスパッチャ、並びに、一体化戻りバッファ(例えば、後述する図17にあるような一体化戻りバッファ1718)を管理する一体化戻りバッファマネージャを含んでよい。
固定機能ブロック1530はまた、グラフィックSoCインタフェース1532、グラフィックマイクロコントローラ1533およびメディアパイプライン1534も含んでもよい。グラフィックSoCインタフェース1532は、グラフィックプロセッサコア1519と、チップ集積回路上のシステム内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックマイクロコントローラ1533は、グラフィックプロセッサコア1519の様々な機能を管理するよう構成可能なプログラム可能なサブプロセッサであり、当該様々な機能としては、スレッドディスパッチ、スケジューリングおよびプリエンプトが含まれる。メディアパイプライン1534(例えば、図16Aおよび図17のメディアパイプライン1616)は、イメージビデオデータを含むマルチメディアデータのデコーディング、エンコーディング、前処理および/または後処理を容易化するためのロジックを含む。メディアパイプライン1534は、計算の要求を介してメディア処理またはサブコア1521-1521F内のサンプリングロジックを実装する。
SoCインタフェース1532は、グラフィックプロセッサコア1519が、汎用アプリケーションプロセッサコア(例えば、CPU)および/またはSoC内の他のコンポーネントと通信できるようにしてよく、当該他のコンポーネントには、共有ラストレベルキャッシュメモリ、システムRAM、および/または、埋め込み型のオンチップ若しくはオンパッケージDRAM等のメモリ階層要素を含む。SoCインタフェース1532はまた、カメライメージングパイプライン等のSoC内の固定機能デバイスとの通信も可能にしてよく、グラフィックプロセッサコア1519とSoC内のCPUとの間で共有可能なグローバルメモリアトミックの使用を可能にし、および/または当該グローバルメモリアトミックを実装する。SoCインタフェース1532はまた、グラフィックプロセッサコア1519の電力管理制御も実装してよく、グラフィックコア1519のクロック領域と、SoC内の他のクロック領域との間のインタフェースを可能にしてよい。随意で、SoCインタフェース1532は、コマンドおよび命令を、グラフィックプロセッサ内の1または複数のグラフィックコアの各々に提供するよう構成されたコマンドストリーマおよびグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンドおよび命令は、メディア処理が実行されるときは、メディアパイプライン1534にディスパッチされてよく、あるいは、グラフィック処理動作が実行されるときは、ジオメトリおよび固定機能パイプライン(例えば、ジオメトリおよび固定機能パイプライン1531、ジオメトリおよび固定機能パイプライン1537)にディスパッチさえてよい。
グラフィックマイクロコントローラ1533は、グラフィックプロセッサコア1519のための様々なスケジューリングおよび管理タスクを実行するよう構成されてよい。一構成において、グラフィックマイクロコントローラ1533は、例えば、グラフィックおよび/または計算ワークロードスケジューリングを、サブコア1521A~1521F内の実行ユニット(EU)アレイ1522A~1522F、1524A~1524F内の様々なグラフィック並列エンジンに実行してよい。このワークロードスケジューリングでは、グラフィックプロセッサコア1519を含むSoCのCPUコア上で実行されるホストソフトウェアは、複数のグラフィックプロセッサドアベルのうちの1つにワークロードを送信でき、複数のグラフィックプロセッサドアベルのうちの1つが適切なグラフィックエンジンに対するスケジューリング処理を呼び出す。スケジューリング処理には、次に実行するワークロードの判定、ワークロードのコマンドストリーマへの送信、エンジン上で実行されている既存のワークロードのプリエンプト、ワークロードの進捗のモニタリング、およびワークロードが完了したときのホストソフトウェアへの通知が含まれる。随意で、グラフィックマイクロコントローラ1533はまた、グラフィックプロセッサコア1519のための低電力またはアイドル状態を促進することができ、システム上のオペレーティングシステムおよび/またはグラフィックドライバソフトウェアから独立して、低電力状態遷移にわたってグラフィックプロセッサコア1519内のレジスタを保存および復元する能力をグラフィックプロセッサコア1519に提供する。
グラフィックプロセッサコア1519は、図示されたサブコア1521A~1521Fよりも多い、または少ないサブコアを有してよく、最大N個のモジュール式サブコアまで有してよい。N個のサブコアの各セットについて、グラフィックプロセッサコア1519はまた、共有機能ロジック1535、共有および/またはキャッシュメモリ1536、ジオメトリ/固定機能パイプライン1537に加え、追加の固定機能ロジック1538も含んでよく、様々なグラフィック計算演算処理を加速化させる。共有機能ロジック1535は、グラフィックプロセッサコア1519内のN個のサブコアの各々により共有可能な図17の共有機能ロジック1720に関連付けられたロジックユニット(例えば、サンプラ、数学および/またはスレッド間通信ロジック)も含んでよい。共有および/またはキャッシュメモリ1536は、グラフィックプロセッサコア1519内のN個のサブコア1521A~1521Fのセットのためのラストレベルキャッシュであってよく、また、複数のサブコアによりアクセス可能な共有メモリとして機能してもよい。ジオメトリ/固定機能パイプライン1531の代わりに、ジオメトリ/固定機能パイプライン1537が、固定機能ブロック1530内に含まれてよく、ジオメトリ/固定機能パイプライン1537は同一または同様のロジックユニットを含んでよい。
グラフィックプロセッサコア1519は、グラフィックプロセッサコア1519により用いられるための様々な固定機能の加速化ロジックを含んでよい追加の固定機能ロジック1538を含んでよい。随意で、追加の固定機能ロジック1538は、位置のみのシェーディングで用いられるための追加のジオメトリパイプラインを含む。位置のみのシェーディングでは、ジオメトリ/固定機能パイプライン1538、1531内の完全なジオメトリパイプラインと、カリングパイプラインの2つのジオメトリパイプラインが存在し、カリングパイプラインは、追加の固定機能ロジック1538内に含まれてよい追加のジオメトリパイプラインである。例えば、カリングパイプラインは、完全なジオメトリパイプラインの簡易バージョンであってよい。完全なパイプラインおよびカリングパイプラインは、同一のアプリケーションの異なるインスタンスを実行してよく、各インスタンスは別個のコンテキストを有する。位置のみのシェーディングは、破棄された三角形の長いカリング実行を非表示にでき、いくつかの場合において、より早期に完了されるべきシェーディングを可能にする。例えば、追加の固定機能ロジック1538内のカリングパイプラインロジックは、メインのアプリケーションと並列で位置シェーダを実行してよく、カリングパイプラインは、フレームバッファの画素のラスタライズおよびレンダリングを実行せずに、頂点の位置属性のみをフェッチし、およびシェーディングするので、概して、重要な結果を完全なパイプラインよりも高速に生成する。カリングパイプラインは、生成された重要な結果を用いて、これらの三角形がカリングされたかどうかに関わらず、すべての三角形の可視情報を計算してよい。完全なパイプライン(この例においては、再生パイプラインとも称されてよい)は、当該可視情報を用いて、カリングされた三角形をスキップして、最終的にラスタライズフェーズに渡される可視三角形のみをシェーディングしてよい。
随意で、追加の固定機能ロジック1538はまた、機械学習訓練または推論の最適化を含む実装のために、固定機能行列乗算ロジック等の機械学習加速化ロジックも含んでよい。
各グラフィックサブコア1521A-1521F内には、グラフィックパイプライン、メディアパイプラインまたはシェーダプログラムによる要求に応答して、グラフィック処理、メディア処理および計算処理を実行するために用いられてよい実行リソースのセットが含まれる。グラフィックサブコア1521A~1521Fは、複数のEUアレイ1522A~1522F、1524A~1524F、スレッドディスパッチおよびスレッド間通信(TD/IC)ロジック1523A~1523F、3D(例えば、テクスチャ)サンプラ1525A~1525F、メディアサンプラ1506A~1506F、シェーダプロセッサ1527A~1527Fおよび共有ローカルメモリ(SLM)1528A~1528Fを含む。EUアレイ1522A~1522F、1524A~1524Fはそれぞれ複数の実行ユニットを含み、当該実行ユニットは、グラフィック、メディアまたは計算シェーダプログラムを含む、グラフィック処理、メディア処理または計算処理のサービスにおける浮動小数点および整数/固定小数点ロジック処理を実行可能な汎用グラフィック処理ユニットである。TD/ICロジック1523A-1523Fは、サブコア内の実行ユニットのためのローカルのスレッドディスパッチおよびスレッド制御の処理を実行し、サブコアの実行ユニット上で実行されるスレッド間の通信を促進させる。3Dサンプラ1525A~1525Fは、メモリ内のテクスチャまたは他の3Dグラフィック関連データを読み取ってよい。3Dサンプラは、構成されたサンプル状態および特定のテクスチャに関連付けられたテクスチャフォーマットに基づき、テクスチャデータを異なって読み取ってよい。メディアサンプラ1506A~1506Fは、メディアデータに関連付けられたタイプおよびフォーマットに基づき、同様の読み取り処理を実行してよい。例えば、各グラフィックサブコア1521A-1521Fは、一体化3Dとメディアサンプラとを交互に含んでよい。各サブコア1521A~1521F内の実行ユニットに実行されるスレッドは、各サブコア内の共有ローカルメモリ1528A~1528Fを活用して、スレッドグループ内で実行されているスレッドが、オンチップメモリの共通プールを用いて実行されることを可能にしてよい。
図15Cは、本明細書で説明する実施形態により、例えば、グラフィックプロセッサ1508等のグラフィックプロセッサおよび/または計算アクセラレータとして構成可能な汎用グラフィック処理ユニット(GPGPU)1570のブロック図である。GPGPU1570は、1または複数のシステムおよび/またはメモリバスを介して、ホストプロセッサ(例えば、1または複数のCPU1546)およびメモリ1571、1572と相互接続されてよい。メモリ1571は、1または複数のCPU1546と共有可能なシステムメモリであってよい一方、メモリ1572は、GPGPU1570に専用のデバイスメモリである。例えば、GPGPU1570およびデバイスメモリ1572内のコンポーネントは、1または複数のCPU1546にアクセス可能なメモリアドレスにマッピングされてよい。メモリ1571および1572へのアクセスは、メモリコントローラ1568を介して容易化されてよい。メモリコントローラ1568は、内部ダイレクトメモリアクセス(DMA)コントローラ1569を含んでよく、または、DMAコントローラで実行されるであろう処理を実行するためのロジックを含んでよい。
GPGPU1570は、L2キャッシュ1553、L1キャッシュ1554、命令キャッシュ1555および共有メモリ1556を含む複数のキャッシュメモリを含み、これらの少なくとも一部は、キャッシュメモリとしてパーティショニングされてもよい。GPGPU1570はまた、複数の計算ユニット1560A~1560Nも含む。計算ユニット1560A~1560Nの各々は、ベクトルレジスタ1561、スカラレジスタ1562、ベクトルロジックユニット1563およびスカラロジックユニット1564のセットを含む。計算ユニット1560A~1560Nはまた、ローカル共有メモリ1565およびプログラムカウンタ1566も含んでよい。計算ユニット1560A~1560Nは、定数データを格納するために用いられてよい定数キャッシュ1567に結合されてよく、定数データとは、GPGPU1570上で実行されるカーネルまたはシェーダプログラムの実行中に変更されることのないデータである。定数キャッシュ1567は、スカラデータキャッシュであってよく、キャッシュデータは、スカラレジスタ1562に直接フェッチされてよい。
処理中、1または複数のCPU1546はコマンドをアクセス可能なアドレス空間にマッピングされたGPGPU1570内のレジスタまたはメモリに書き込みしてよい。コマンドプロセッサ1557は、レジスタまたはメモリからコマンドを読み取ってよく、これらのコマンドがGPGPU1570内でどのように処理されるかを判定してよい。その後、スレッドディスパッチャ1558を用いて、スレッドをこれらのコマンドを実行するための計算ユニット1560A~1560Nにディスパッチしてよい。各計算ユニット1560A~1560Nは、他の計算ユニットから独立してスレッドを実行してよい。追加的に、各計算ユニット1560A~1560Nは、条件計算のために独立して構成されてよく、条件的に計算の結果をメモリに出力してよい。コマンドプロセッサ1557は、送信されたコマンドが完了するとき、1または複数のCPU1546に割り込みしてよい。
図16A~16Cは、例えば、図15A~15Cにより本明細書で説明される実施形態により提供される追加のグラフィックプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。任意の他の図面の要素と同一または類似の名称を有する図16A~16Cの要素は、他の図面にある同一の要素を説明しており、本明細書の他の箇所の説明と同様に、それと同様の態様で動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定はされない。
図16Aは、グラフィックプロセッサ1600のブロック図であり、グラフィックプロセッサ1600は、個別のグラフィック処理ユニットであってよく、または、複数のプロセッシングコアと統合されたグラフィックプロセッサ、または他の半導体デバイスなどであってよいが、メモリデバイスまたはネットワークインタフェースに限定はされない。グラフィックプロセッサ1600は、グラフィックプロセッサ1508の変形例であってよく、グラフィックプロセッサ1508の代わりに用いられてよい。従って、本明細書におけるグラフィックプロセッサ1508との組み合わせにおける任意の特徴の開示内容は、グラフィックプロセッサ1600との対応する組み合わせも開示しているが、そのように限定はされない。グラフィックプロセッサは、メモリにマッピングされたI/Oインタフェースを介して、および、プロセッサメモリに配置されたコマンドを用いてグラフィックプロセッサ上のレジスタと通信してよい。グラフィックプロセッサ1600は、メモリにアクセスするためのメモリインタフェース1614を含んでよい。メモリインタフェース1614は、ローカルメモリ、1または複数の内部キャッシュ、1または複数の共有外部キャッシュ、および/またはシステムメモリとのインタフェースであってよい。
随意で、グラフィックプロセッサ1600はまた、ディスプレイの出力データをディスプレイデバイス1618に駆動させるためのディスプレイコントローラ1602を含む。ディスプレイコントローラ1602は、ディスプレイのための1または複数のオーバーレイプレーンのためのハードウェアおよびビデオの複数の層またはユーザインタフェース要素の構成を含む。ディスプレイデバイス1618は、内部または外部ディスプレイデバイスであってよい。一実施形態において、ディスプレイデバイス1618は、仮想現実(VR)ディスプレイデバイスまたは拡張現実(AR)ディスプレイデバイス等の頭に載せるディスプレイデバイスである。グラフィックプロセッサ1600は、限定されることはないが、MPEG-2などのムービングピクチャエキスパーツグループ(MPEG)フォーマット、H.264/MPEG-4 AVC、H.265/HEVC、Alliance for Open Media(AOMedia)VP8、VP9等のアドバンスドビデオコーティング(AVC)フォーマット、並びに、米国映画テレビ技術者協会(SMPTE)421M/VC-1、および、JPEG等のジョイントフォトグラフィックエキスパートグループ(JPEG)フォーマット、および、モーションJPEG(MJPEG)フォーマットを含む1または複数のメディアエンコードフォーマットに、当該メディアエンコードフォーマットから、または、当該メディアエンコードフォーマット間でメディアをエンコード、デコードまたはトランスコードするビデオコーデックエンジン1606を含んでよい。
グラフィックプロセッサ1600は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ処理を実行するためのブロックイメージ転送(BLIT)エンジン1604を含んでよい。しかしながら、代替的に、2Dグラフィック処理が、グラフィック処理エンジン(GPE)1610の1または複数のコンポーネントを用いて実行されてよい。いくつかの実施形態において、GPE1610は、3次元(3D)グラフィック処理およびメディア処理を含むグラフィック処理を実行するための計算エンジンである。
GPE1610は、3Dプリミティブ形状(例えば、矩形、三角形等)に作用する処理機能を用いる3次元イメージおよびシーンのレンダリング等の、3D処理を実行するための3Dパイプライン1612を含んでよい。3Dパイプライン1612は、要素内で様々なタスクを実行する、および/または実行スレッドを3D/メディアサブシステム1615に生成するプログラム可能な固定された機能要素を含む。3Dパイプライン1612を用いて、メディア処理を実行してよい一方、GPE1610の実施形態はまた、ビデオ後処理およびイメージ拡大等のメディア処理を実行するために特に用いられるメディアパイプライン1616も含む。
メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに、または、その代理で、ビデオデコード加速化、ビデオインタレース解除、およびビデオエンコード加速化等の1または複数の特別なメディア処理を実行するための、固定機能またはプログラム可能ロジックユニットを含んでよい。追加的に、メディアパイプライン1616は、3D/メディアサブシステム1615上で実行するためのスレッドを生成するためのスレッド生成ユニットも含んでよい。生成されたスレッドは、3D/メディアサブシステム1615に含まれる1または複数のグラフィック実行ユニット上でのメディア処理に関する計算を実行する。
3D/メディアサブシステム1615は、3Dパイプライン1612およびメディアパイプライン1616により生成されたスレッドを実行するためのロジックを含んでよい。当該パイプラインは、スレッド実行要求を、3D/メディアサブシステム1615に送信してよく、3D/メディアサブシステム1615は、様々な要求を調整し、利用可能なスレッド実行リソースにディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3Dおよびメディアスレッドを処理するためのグラフィック実行ユニットのアレイを含む。3D/メディアサブシステム1615は、スレッド命令およびデータのための1または複数の内部キャッシュを含んでよい。追加的に、3D/メディアサブシステム1615はまた、スレッド間でデータを共有し、出力データを格納するためのレジスタおよびアドレス指定可能メモリを含む共有メモリも含んでよい。
図16Bは、グラフィックプロセッサ1600の変形例であり、グラフィックプロセッサ1600の代わりに用いられてよい、あるいはその逆であってよいグラフィックプロセッサ1620を示す。従って、本明細書におけるグラフィックプロセッサ1600との組み合わせにおける任意の特徴の開示内容は、グラフィックプロセッサ1620との対応する組み合わせも開示しているが、そのように限定はされない。グラフィックプロセッサ1620は、本明細書に記載の実施形態により、タイルアーキテクチャを有する。グラフィックプロセッサ1620は、グラフィックエンジンタイル1610A~1610D内に図16Aのグラフィック処理エンジン1610の複数のインスタンスを有するグラフィック処理エンジンクラスタ1622を含んでよい。各グラフィックエンジンタイル1610A~1610Dは、タイル相互接続1623A~1623Fのセットを介して相互接続されてよい。各グラフィックエンジンタイル1610A~1610Dはまた、メモリ相互接続1625A~1625Dを介してメモリモジュールまたはメモリデバイス1626A~1626Dに接続されてもよい。メモリデバイス1626A~1626Dは、任意のグラフィックメモリ技術を用いてよい。例えば、メモリデバイス1626A~1626Dは、グラフィックダブルデータレート(GDDR)メモリであってよい。メモリデバイス1626A~1626Dは、それぞれのグラフィックエンジンタイル1610A~1610Dと共にダイに存在してよい高帯域幅メモリ(HBM)モジュールであってよい。メモリデバイス1626A~1626Dは、それぞれのグラフィックエンジンタイル1610A~1610D上にスタックされてよいスタックメモリデバイスであってよい。各グラフィックエンジンタイル1610A~1610Dおよび関連付けられたメモリ1626A~1626Dは、別個のチップレットに存在してよく、チップレットは、ベースのダイまたはベースの基板に接合され、これについては、図24B~24Dでさらに詳細に説明する。
グラフィックプロセッサ1620は、不均一性メメモリアクセス(NUMA)システムで構成されてよく、メモリデバイス1626A~1626Dは、関連するグラフィックエンジンタイル1610A~1610Dに結合される。特定のメモリデバイスは、特定のメモリデバイスが直接接続されたタイル以外のグラフィックエンジンタイルによりアクセスされてよい。しかしながら、メモリデバイス1626A~1626Dへのアクセスレイテンシは、ローカルタイルへのアクセス時に最も低くなってよい。一実施形態において、1またはそれより多くのキャッシュが同一のメモリ位置に格納する場合、グラフィックエンジンタイル1610A~1610D内のキャッシュコントローラ間の通信が一貫性のあるメモリイメージを保持できるようにするタイル相互接続1623A~1623Fを用いるキャッシュコヒーレントNUMA(ccNUMA)システムが有効にされてよい。
グラフィック処理エンジンクラスタ1622は、オンチップまたはオンパッケージファブリック相互接続1624に接続されてよい。ファブリックインターコネクト1624は、グラフィックエンジンタイル1610A-1610Dと、ビデオコーデック1606および1または複数のコピーエンジン1604などのコンポーネントとの間での通信を可能にし得る。コピーエンジン1604を用いて、メモリデバイス1626A~1626Dおよびグラフィックプロセッサ1620(例えば、システムメモリ)の外部にあるメモリから、メモリデバイス1626A~1626Dおよびグラフィックプロセッサ1620の外部にあるメモリへ、並びにメモリデバイス1626A~1626Dおよびグラフィックプロセッサ1620の外部にあるメモリ間でデータを移動させてよい。ファブリック相互接続1624も用いて、グラフィックエンジンタイル1610A~1610Dを相互接続してよい。随意でグラフィックプロセッサ1620は、外部ディスプレイデバイス1618との接続を可能にするためのディスプレイコントローラ1602を含んでよい。グラフィックプロセッサはまた、グラフィックアクセラレータまたは計算アクセラレータとして構成されてもよい。アクセラレータ構成において、ディスプレイコントローラ1602およびディスプレイデバイス1618は省略されてよい。
グラフィックプロセッサ1620は、ホストインタフェース1628を介してホストシステムに接続されてよい。ホストインタフェース1628は、グラフィックプロセッサ1620、システムメモリおよび/または他のシステムコンポーネントとの間の通信を可能にしてよい。ホストインタフェース1628は、例えば、PCIエクスプレスバスまたは別のタイプのホストシステムインタフェースであってよい。
図16Cは、本明細書で説明する実施形態による、計算アクセラレータ1630を示す。計算アクセラレータ1630は、図16Bのグラフィックプロセッサ1620と同様のアーキテクチャを含んでよく、計算加速化のために最適化されている。計算エンジンクラスタ1632は、並列またはベクトルベースの汎用計算処理に最適化された実行ロジックを含む計算エンジンタイル1640A~1640Dのセットを含んでよい。計算エンジンタイル1640A~1640Dは、固定機能のグラフィック処理ロジックを含まなくてよいが、いくつかの実施形態においては、計算エンジンタイル1640A~1640Dのうちの1または複数は、メディア加速化を実行するためのロジックを含んでよい。計算エンジンタイル1640A~1640Dは、メモリ相互接続1625A~1625Dを介してメモリ1626A~1626Dに接続されてよい。メモリ1626A~1626Dおよびメモリ相互接続1625A~1625Dは、グラフィックプロセッサ1620と同様の技術であってよく、または、異なっていてもよい。またグラフィック計算エンジンタイル1640A~1640Dは、タイル相互接続1623A~1623Fのセットを介して相互接続されてもよく、ファブリック相互接続1624に接続されてもよく、および/または、ファブリック相互接続1624により相互接続されてもよい。一実施形態において、計算アクセラレータ1630は、デバイス全体のキャッシュとして構成可能な大型のL3キャッシュ1636を含む。計算アクセラレータ1630は、また、図16Bのグラフィックプロセッサ1620と同様の方式で、ホストインタフェース1628を介してホストプロセッサおよびメモリに接続されてよい。「グラフィック処理エンジン」
図17は、いくつかの実施形態による、グラフィックプロセッサのグラフィック処理エンジン1710のブロック図である。グラフィック処理エンジン(GPE)1710は、図16Aに示されるGPE1610のバージョンであってよく、図16Bのグラフィックエンジンタイル1610A~1610Dを表わしてもよい。本明細書における任意の他の図面の要素と同一または類似の名称を有する図17の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定されることはない。例えば、図16Aの3Dパイプライン1612およびメディアパイプライン1616も図17に図示されている。GPE1710のいくつかの実施形態において、メディアパイプライン1616は随意のものであり、GPE1710内に明示的に含まれなくてもよい。例えば、少なくとも一実施形態において、別個のメディアプロセッサおよび/またはイメージプロセッサが、GPE1710に結合される。
GPE1710は、コマンドストリームを3Dパイプライン1612および/またはメディアパイプライン1616に提供するコマンドストリーマ1703に結合されてよく、または、コマンドストリーマ1703を含んでよい。代替的にまたは追加的に、コマンドストリーマ1703は一体化戻りバッファ1718に直接結合されてよい。一体化戻りバッファ1718は、グラフィックコアアレイ1714に通信可能に結合されてよい。随意で、コマンドストリーマ1703はメモリに結合され、メモリは、システムメモリまたは内部キャッシュメモリおよび共有キャッシュメモリのうちの1または複数であってよい。コマンドストリーマ1703は、メモリからコマンドを受信してよく、コマンドを3Dパイプライン1612および/またはメディアパイプライン1616に送信する。コマンドは、リングバッファからフェッチされる命令であり、リングバッファは、3Dパイプライン1612およびメディアパイプライン1616のためのコマンドを格納する。追加的にリングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを含んでよい。3Dパイプライン1612に関するコマンドは、限定されることはないが、3Dパイプライン1612に関する頂点およびジオメトリデータ、および/または、メディアパイプライン316に関する画像データおよびメモリオブジェクトなどの、メモリに格納されたデータへの参照もまた含み得る。3Dパイプライン1612およびメディアパイプライン1616は、それぞれのパイプライン内のロジックを介して処理を実行することにより、または、1または複数の実行スレッドをグラフィックコアアレイ1714にディスパッチすることにより、コマンドおよびデータを処理する。グラフィックコアアレイ1714は、グラフィックコア(例えば、グラフィックコア1715A,グラフィックコア1715B)のうちの1または複数のブロックを含み、各ブロックが1または複数のグラフィックコアを含んでよい。各グラフィックコアは、グラフィック処理および計算処理を実行するための汎用実行ロジックおよびグラフィック専用実行ロジックに加え、固定機能テクスチャ処理および/または機械学習および人工知能加速化ロジックを含むグラフィック実行リソースのセットを含む。
様々な実施形態において、3Dパイプライン1612は、命令を処理し、実行スレッドをグラフィックコアアレイ1714にディスパッチすることで、1または複数のシェーダプログラムを処理するための固定機能ロジックおよびプログラム可能ロジックを含んでよく、このようなプログラムとしては、例えば、頂点シェーダ、ジオメトリシェーダ、画素シェーダ、フラグメントシェーダ、計算シェーダまたは他のシェーダプログラム等が含まれる。グラフィックコアアレイ1714は、これらのシェーダプログラムを処理する際に用いられるための実行リソースの一体化ブロックを提供する。グラフィックコアアレイ1714のグラフィックコア1715A-1714B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
グラフィックコアアレイ1714は、ビデオおよび/または画像処理等のメディア機能を実行するための実行ロジックを含んでよい。実行ユニットは、グラフィック演算処理に加え、並列の汎用計算処理を実行するためにプログラム可能である汎用ロジックも含んでよい。汎用ロジックは、図14のプロセッサコア1407内のまたは図15Aのコア1502A~1502N内の汎用ロジックと並列でまたはそれと連携して演算処理を実行してよい。
グラフィックコアアレイ1714上で実行されるスレッドにより生成された出力データは、一体化戻りバッファ(URB)1718内のメモリにデータを出力してよい。URB1718は、複数のスレッドのためのデータを格納してよい。URB1718を用いて、グラフィックコアアレイ1714上で実行される異なるスレッド間でデータを送信してよい。追加的に、URB1718は、グラフィックコアアレイ1714上のスレッドと、共有機能ロジック1720内の固定機能ロジックとの間の同期に用いられてよい。
随意で、アレイが可変数のグラフィックコアを含むように、グラフィックコアアレイ1714はスケーラブルであってよく、グラフィックコアの各々は、GPE1710の目標電力および性能レベルに基づき、可変数の実行ユニットを有する。実行リソースが必要に応じて有効化または無効化され得るように、実行リソースは動的にスケーラブルであってよい。
グラフィックコアアレイ1714は、グラフィックコアとグラフィックコアアレイとの間で共有される複数のリソースを含む共有機能ロジック1720に結合される。共有機能ロジック1720内の共有機能は、特別な補足機能をグラフィックコアアレイ1714に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック1720は、限定ではないが、サンプラ1721、数学1722およびスレッド間通信(ITC)1723ロジックを含む。追加的に、共有機能ロジック1720内の1または複数のキャッシュ1725が実装されてよい。
共有機能は、少なくとも、グラフィックコアアレイ1714内に含まれる特定の専用機能に対する要求が不十分である場合に実装される。グラフィックコアアレイ1714間で共有され、グラフィックコアアレイ1714内に含まれる機能の正確なセットは、実施形態により変わる。グラフィックコアアレイ1714によって拡張的に用いられる共有機能ロジック1720内の特定の共有機能が、グラフィックコアアレイ1714内の共有機能ロジック1716内に含まれてよい。随意で、グラフィックコアアレイ1714内の共有機能ロジック1716は、共有機能ロジック1720内のロジックの一部のロジックまたは全部のロジックを含んでよい。共有機能ロジック1720内のすべてのロジック要素は、グラフィックコアアレイ1714の共有機能ロジック1716内で重複していてよい。代替的に、グラフィックコアアレイ1714内の共有機能ロジック1716が優先され、共有機能ロジック1720は、除外される。「実行ユニット」
図18A~18Bは、本明細書で説明する実施形態による、グラフィックプロセッサコア内に用いられる処理要素のアレイを含むスレッド実行ロジック1800を示す。任意の他の図面の要素と同一または類似の名称を有する図18A~18Bの要素は、他の図面内の同一の要素を説明しており、本明細書の他の箇所の説明と同様、それと同様に動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、それに限定はされない。図18A~18Bは、スレッド実行ロジック1800の概要を示し、スレッド実行ロジック1800は、図15Bの各サブコア1521A~1521Fと共に図示されたハードウェアロジックを表わしてよい。図18Aは、汎用グラフィックプロセッサ内の実行ユニットを表わす一方、図18Bは、計算アクセラレータ内で用いられてよい実行ユニットを表わす。
図18Aに示される通り、スレッド実行ロジック1800は、シェーダプロセッサ1802、スレッドディスパッチャ1804、命令キャッシュ1806、複数の実行ユニット1808A~1808Nを含むスケーラブル実行ユニットアレイ、サンプラ1810、共有ローカルメモリ1811、データキャッシュ1812およびデータポート1814を含んでよい。随意で、スケーラブル実行ユニットアレイは、ワークロードの計算要件に基づき、1または複数の実行ユニット(例えば、実行ユニット1808A、1808B、1808C、1808D、1808N‐1および1808Nまでの任意のもの)を有効化または無効化することで動的にスケーリングされてよい。含まれるコンポーネントは、各コンポーネントにリンクされた相互接続ファブリックリンクを介して相互接続されてよい。スレッド実行ロジック1800は、命令キャッシュ1806、データポート1814、サンプラ1810および実行ユニット1808A~1808Nのうちの1または複数を通して、システムメモリまたはキャッシュメモリ等のメモリへの1または複数の接続を含んでよい。各実行ユニット(例えば、1808A)は、各スレッドの複数のデータ要素を並列処理する間に、複数の同時ハードウェアスレッドを実行可能であるスタンドアロンのプログラム可能な汎用計算ユニットであってよい。様々な実施形態において、実行ユニット1808A~1808Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーリング可能である。
実行ユニット1808A~1808Nは、シェーダプログラムを実行するために主に用いられてよい。シェーダプロセッサ1802は、様々なシェーダプログラムを処理してよく、スレッドディスパッチャ1804を介してシェーダプログラムに関連付けられた実行スレッドをディスパッチしてよい。スレッドディスパッチャは、グラフィックおよびメディアパイプラインからのスレッド開始要求を調整し、且つ要求されたスレッドを1または複数の実行ユニット1808A~1808Nでインスタンス化するためのロジックを含んでよい。例えば、ジオメトリパイプラインは、頂点、テッセレーションまたはジオメトリシェーダを処理するためにスレッド実行ロジックにディスパッチしてよい。随意で、スレッドディスパッチャ1804はまた、実行シェーダプログラムからのランタイムのスレッド生成要求を処理してもよい。
実行ユニット1808A~1808Nは、グラフィックライブラリ(例えば、ダイレクト3DおよびOpenGL)からのシェーダプログラムが最小の変換で実行されるように、多くの標準3Dグラフィックシェーダ命令のためのネイティブサポートを含む命令セットをサポートしてよい。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、画素処理(例えば、画素シェーダ、フラグメントシェーダ)および汎用処理(例えば、計算およびメディアシェーダ)をサポートする。実行ユニット1808A-1808Nのそれぞれは、マルチ発行型の単一命令複数のデータ(SIMD)実行を可能にし、マルチスレッド動作は、より高いレイテンシメモリアクセスにあるにも関わらず効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルおよび関連付けられた独立のスレッド状態を有する。実行は、整数、単精度および倍精度浮動小数点処理、SIMD分岐機能、論理処理、超越処理および他の各種処理が可能なパイプラインへのクロック毎のマルチ発行である。メモリからのデータまたは共有機能のうちの1つからのデータを待機する間、実行ユニット1808A~1808N内の依存性ロジックは、要求したデータが戻されるまで、待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間に、ハードウェアリソースは、他のスレッドを処理することに専念してよい。例えば、頂点シェーダ処理に関連する遅延中に、実行ユニットは、図21に図示された頂点シェーダ2107等の異なる頂点シェーダを含む、画素シェーダ、フラグメントシェーダまたは別のタイプのシェーダプログラムの処理を実行してよい。様々な実施形態は、SIMDの使用の代替として、またはSIMDの使用に加え、単一命令複数スレッド(Single Instruction Multiple Thread:SIMT)の使用による実行の使用に適用されてよい。SIMDコアまたは処理への参照はSIMTにも適用されてよく、あるいは、SIMTと組み合わせたSIMDに適用されてもよい。
実行ユニット1808A-1808Nの各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、"実行サイズ"まてゃあ命令のためのチャネルの数である。実行チャネルは、命令内のデータ要素アクセス、マスキングおよびフロー制御のための実行のロジカルユニットである。チャネルの数は、特定のグラフィックプロセッサ用の物理算術論理ユニット(ALU)浮動小数点ユニット(FPU)または他のロジックユニット(例えば、テンソルコア、レイトレーシングコア等)の数とは独立していてよい。追加的に、実行ユニット1808A~1808Nは、整数および浮動小数点データ型をサポートしてよい。
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、レジスタ内のパックドデータタイプとして格納されることができ、実行ユニットは、要素のデータサイズに基づいて、様々な要素を処理する。例えば、256ビット幅のベクトルを操作する場合、ベクトルの256ビットがレジスタに格納され、実行ユニットは、4つの別個の184ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを操作する。しかしながら、異なベクトル幅およびレジスタサイズも可能である。
随意で、1または複数の実行ユニットは、融合されたEUに共通のスレッド制御ロジック(1807A~1807N)を有する融合された実行ユニット1809A~1809Nと組み合わせられてよい。複数のEUが、1つのEUグループに融合されてよい。融合されたEUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するよう構成されてよい。融合されたEUグループ内のEUの数は、実施形態により変わってよい。追加的に、EU毎にSIMD8、SIMD16およびSIMD32を含む、様々なSIMD幅が実行されてよいが、これらに限定はされない。各融合されたグラフィック実行ユニット1809A~1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合された実行ユニット1809Aは、第1のEU1808A、第2のEU1808B、および第1のEU1808Aと第2のEU1808Bに共通のスレッド制御ロジック1807Aを含む。スレッド制御ロジック1807Aは、融合されたグラフィック実行ユニット1809A上で実行されるスレッドを制御し、融合された実行ユニット1809A-1809N内の各EUが、共通命令ポインタレジスタを用いて実行されることを可能にする。
1または複数の内部命令キャッシュ(例えば、1806)は、実行ユニットのスレッド命令をキャッシュするためのスレッド実行ロジック1800に含まれる。スレッド実行中のスレッドデータをキャッシュするために、1または複数のデータキャッシュ(例えば、1812)がスレッド実行ロジック1800内に含まれてよい。実行ロジック1800で実行されるスレッドはまた、明示的に管理されたデータを共有ローカルメモリ1811内に格納してよい。3D処理用のテクスチャサンプリングおよびメディア処理用のメディアサンプリングを提供するために、サンプラ1810が含まれてよい。サンプラ1810は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理するための専用のテクスチャまたはメディアサンプリング機能を含んでよい。
実行中、グラフィックおよびメディアパイプラインは、スレッド生成およびディスパッチロジックを介して、スレッド開始要求をスレッド実行ロジック1800にを送信する。一度ジオメトリックオブジェクトのグループが処理されて、画素データへとラスタライズされると、シェーダプロセッサ1802内の画素プロセッサロジック(例えば、画素シェーダロジック、フラグメントシェーダロジック等)が、出力情報をさらに計算するために呼び出され、出力サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファ等)に結果が書き込まれるようにする。画素シェーダまたはフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算してよい。シェーダプロセッサ1802内の画素プロセッサロジックは、次に、アプリケーションプログラミングインタフェース(API)により供給される画素またはフラグメントシェーダプログラムを実行してよい。シェーダプログラムを実行するべく、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して、スレッドを実行ユニット(例えば1808A)にディスパッチする。シェーダプロセッサ1802は、サンプラ1810内のテクスチャサンプリングロジックを用いて、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスしてよい。テクスチャデータおよび入力されたジオメトリデータに対する算術処理は、各ジオメトリックフラグメントに対する画素カラーデータを計算する、または、さらなる処理から1または複数の画素を破棄する。
また、データポート1814は、グラフィックプロセッサの出力パイプライン上でさらに処理するために、処理されたデータをメモリに出力するためのメモリアクセスメカニズムをスレッド実行ロジック1800に提供してよい。データポート1814は、データポート1814を介するメモリアクセスのために、データをキャッシュするための1または複数のキャッシュメモリ(例えば、データキャッシュ1812)を含んでよい、または、そこに結合されてよい。
随意で、実行ロジック1800はまた、レイトレーシング加速化機能を提供可能なレイトレーサ1805も含んでよい。レイトレーサ1805は、レイ生成のための命令/機能を含むレイトレーシング命令セットをサポートしてよい。レイトレーシング命令セットは、図3Cのレイトレーシングコア372によってサポートされるレイトレーシング命令セットと同様であってよく、または、異なってよい。
図18Bは、実行ユニット1808の例示的な内部の詳細を示す。グラフィック実行ユニット1808は、命令フェッチユニット1837、汎用レジスタファイルアレイ(GRF)1824、アーキテクチャレジスタファイルアレイ(ARF)1826、スレッドアービタ1822、送信ユニット1830、分岐ユニット1832、SIMD浮動小数点ユニット(FPU)のセット1834、および随意で専用の整数SIMD ALUのセット1835を含んでよい。GRF1824およびARF1826は、グラフィック実行ユニット1808内でアクティブであってよい各同時ハードウェアスレッドと関連付けられた汎用レジスタファイルおよびアーキテクチャレジスタファイルのセットを含む。スレッド毎に、アーキテクチャの状態がARF1826内で維持されてよい一方、スレッド実行中に用いられるデータは、GRF1824内に格納される。各スレッドの命令ポインタを含む、各スレッドの実行状態は、ARF1826内のスレッド特有のレジスタ内に保持されてよい。
グラフィック実行ユニット1808は、同時マルチスレッディング(SMT)および細粒度のインタリーブ型マルチスレッディング(IMT)の組み合わせのアーキテクチャを有してよい。アーキテクチャは、目標の同時スレッドの数および実行ユニット毎のレジスタの数に基づいて、設計時に微調整され得るモジュール構成を有してよく、そこでは、実行ユニットのリソースが複数の同時スレッドを実行するために用いられるロジックに分割される。グラフィック実行ユニット1808によって実行可能なロジカルスレッドの数は、ハードウェアスレッドの数に限定はされず、複数のロジカルスレッドが各ハードウェアスレッドに割り当てられてよい。
随意で、グラフィック実行ユニット1808は、それぞれが異なる命令であり得る複数の命令を共同発行できる。グラフィック実行ユニットスレッド1808のスレッドアービタ1822は、実行のために送信ユニット1830、分岐ユニット1832またはSIMD FPU1834のうちの1つに命令をディスパッチすることができる。各実行スレッドは、GRF1824内の128個の汎用レジスタにアクセスしてよく、ここで、各レジスタは、32ビットデータ要素のSIMD8要素ベクトルとしてアクセス可能な32バイトを格納できる。各実行ユニットスレッドは、GRF1824内の4Kバイトにアクセスできてよいが、実施形態はこのようには限定されず、他の実施形態においては、より多いまたはより少ない数のレジスタリソースが提供されてよい。グラフィック実行ユニット1808は、計算処理を独立して実行できる7個のハードウェアスレッドにパーティショニングされてよいが、実行ユニット毎のスレッド数は、実施形態により変わってもよく、例えば、最大16個のハードウェアスレッドがサポートされてよい。7個のスレッドが4Kバイトにアクセスしてよい例示的な実施形態においては、GRF1824は、合計28Kバイトを格納してよい。16個のスレッドが4Kバイトにアクセスし得る別の例示的な実施形態においては、GRF1824は合計64Kバイトを格納してよい。しかしながら、実行ユニット毎のスレッド数は、これらの例に限定はされず、特定数よりも多いまたは少なくてよい。柔軟なアドレス指定モードにより複数のレジスタが一緒にアドレス指定されることを可能にし、効果的により幅広いレジスタを構築する、または、ストライド矩形ブロックデータ構造を表わす。
追加的にまたは代替的に、メモリ処理、サンプラ処理および他のより長いレイテンシのシステム通信が、メッセージパッシング送信ユニット1830により実行される"送信"命令を介してディスパッチされてよい。分岐命令は、SIMD分岐および最終的な収束を促進するための専用分岐ユニット1832にディスパッチされてよい。
グラフィック実行ユニット1808は、浮動小数点処理を実行する1または複数のSIMD浮動小数点ユニット(FPU)1834を含んでよい。FPU1834はまた、整数計算もサポートしてよい。いくつかの例において、FPU1834は、最大M個の32ビット浮動小数点(または整数)処理をSIMD実行でき、あるいは、最大2M個の16ビット整数または16ビット浮動小数点処理をSIMD実行できる。随意で、FPUのうちの少なくとも1つは、ハイスループットで卓越した数学関数および倍精度の184ビット浮動小数点をサポートする拡張数学機能を提供する。8ビット整数SIMD ALU1835のセットも存在してよく、具体的には、機械学習計算に関連付けられる処理を実行するように最適化されてよい。
随意で、グラフィック実行ユニット1808の複数のインスタンスのアレイは、グラフィックサブコアグループ(例えば、サブスライス)にインスタンス化されてよい。スケーラビリティについては、製品の設計者は、サブコアグループ毎に実行ユニットの正確な数を選択してよい。実行ユニット1808は、複数の実行チャネルにわたり命令を実行してよい。また、グラフィック実行ユニット1808上で実行される各スレッドは、異なるチャネル上で実行されてよい。
図19は、さらなる例示的案実行ユニット1900を示す。本明細書の任意の他の図面の要素と同一または類似の名称を有する図19の要素は、他の図面における同一の要素を説明しており、本明細書の他の箇所における説明と同様、それと同様に動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定はされない。実行ユニット1900は、例えば、図16Cにあるような計算エンジンタイル1640A~1640Dでの使用のための計算に最適化された実行ユニットであってよいが、これに限定はされない。実行ユニット1900はまた、図16Bにあるようなグラフィックエンジンタイル1610A~1610Dで用いられてもよい。実行ユニット1900は、スレッド制御ユニット1901、スレッドの状態ユニット1902、命令フェッチ/プリフェッチユニット1903および命令デコードユニット1904を含んでよい。追加的に、実行ユニット1900は、実行ユニット内のハードウェアスレッドに割り当てられ得るレジスタを格納するレジスタファイル1906を含んでよい。追加的に、実行ユニット1900は、送信ユニット1907および分岐ユニット1908を含んでよい。送信ユニット1907および分岐ユニット1908は、図18Bのグラフィック実行ユニット1808の送信ユニット1830および分岐ユニット1832と同様に動作してよい。
実行ユニット1900はまた、複数の異なるタイプの機能ユニットを含む計算ユニット1910も含んでよい。計算ユニット1910は、算術論理ユニットのアレイを含むALUユニット1911をまた含んでよい。ALUユニット1911は、64ビット、32ビット、および16ビット整数および浮動小数点処理を実行するように構成され得る。整数および浮動小数点処理は、同時に実行され得る。計算ユニット1910は、シストリックアレイ1912、および数学ユニット1913もまた含み得る。シストリックアレイ1912は、シストリック方式でベクトルまたは他のデータ並列処理を実行するように用いられ得るデータ処理ユニットの、Wの広さおよびDの深さのネットワークを含む。シストリックアレイ1912は、行列ドット積算処理などの、行列処理を実行するように構成され得る。シストリックアレイ1912は、16ビットの浮動小数点処理並びに8ビット、および4ビットの整数処理をサポートしてよい。シストリックアレイ1912は、機械学習処理を加速化させるよう構成されてよい。シストリックアレイ1912は、bfloat16の16ビット浮動小数点フォーマットのためのサポートで構成され得る。数学ユニット1913は、ALUユニット1911よりも、効率的且つ低電力方式で数学処理の具体的なサブセットを実行するよう構成されてよい。数学ユニット1913は、説明された他の実施形態により提供されるグラフィック処理エンジンの共有機能ロジックに見出される数学ロジック、例えば、図17の共有機能ロジック1720の数学ロジック1722を含んでよい。数学ユニット1913は、32ビットおよび64ビットの浮動小数点処理を実行するよう構成されてよい。
スレッド制御ユニット1901は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット1901は、実行ユニット1900内のスレッドの実行を開始、停止およびプリエンプトするためのスレッドアービトレーションロジックを含んでよい。スレッドの状態ユニット1902を用いて、実行ユニット1900上で実行するように割り当てられたスレッドのスレッドの状態を格納してよい。実行ユニット1900内のスレッドの状態を格納することで、これらのスレッドがブロックまたはアイドルになったとき、これらのスレッドの迅速なプリエンプトを可能にする。命令フェッチ/プリフェッチユニット1903は、より高レベルの実行ロジック(例えば、図18Aにあるような命令キャッシュ1806)の命令キャッシュから命令をフェッチしてよい。命令フェッチ/プリフェッチユニット1903はまた、現在実行中のスレッドの解析に基づき、命令キャッシュにロードされるべき命令のためのプリフェッチ要求を発行してよい。命令デコードユニット1904を用いて、計算ユニットにより実行されるべき命令をデコードしてよい。命令デコードユニット1904は、複合命令を構成マイクロ処理にデコードするための二次デコーダとして用いられてよい。
追加的に、実行ユニット1900は、実行ユニット1900上で実行されるハードウェアスレッドにより用いられてよいレジスタファイル1906を含む。レジスタファイル1906内のレジスタは、実行ユニット1900の計算ユニット1910内で複数の同時スレッドを実行するために用いられるロジックにわたり分割されてよい。グラフィック実行ユニット1900によって実行可能なロジカルスレッドの数は、ハードウェアスレッドの数に限定はされず、複数のロジカルスレッドが各ハードウェアスレッドに割り当てられてよい。レジスタファイル1906のサイズは、サポートされるハードウェアスレッドの数に基づき、実施形態により変わってよい。レジスタリネーミングを用いて、レジスタをハードウェアスレッドに動的に割り当ててよい。
図20は、グラフィックプロセッサ命令フォーマット2000を示すブロック図である。グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、実行ユニット命令に一般的に含まれるコンポーネントを示す一方、破線は随意でありり、または、命令のサブセットにのみ含まれるコンポーネントを含む。説明および図示されたグラフィックプロセッサ命令フォーマット2000は、命令が処理された時点の命令デコードから得られたマイクロ処理とは対照的に、実行ユニットに供給される命令であるという点で、マクロ命令である。
本明細書で説明するようにグラフィックプロセッサ実行ユニットは、128ビットの命令フォーマット2010の命令をネイティブサポートしてよい。選択された命令、命令オプションおよびオペランド数に基づき、64ビットの圧縮命令フォーマット2030が、いくつかの命令に利用可能である。ネイティブの128ビットの命令フォーマット2010はすべての命令オプションへのアクセスを提供する一方、いくつかのオプションおよび処理は、64ビットフォーマット2030に制約される。64ビットフォーマット2030で利用可能なネイティブ命令は、実施形態により変わる。インデックスフィールド2013内のインデックス値のセットを部分的に用いて、命令は圧縮される。実行ユニットハードウェアは、インデックス値に基づき、圧縮テーブルのセットを参照し、圧縮テーブルの出力を用いて、128ビットの命令フォーマット2010のネイティブ命令を再構築する。他のサイズおよびフォーマットの命令も使用可能である。
各フォーマットについて、命令オペコード2012は、実行ユニットが実行すべき処理を定義する。実行ユニットは、各オペランドの複数のデータ要素に並行して各命令を実行する。例えば、追加の命令に応答して、実行ユニットは、テクスチャ要素ま又はピクチャ要素を表わす各カラーチャネルにわたって追加の処理を同時に実行する。既定で、実行ユニットは、オペランドのすべてのデータチャネルにわたって各命令を実行する。命令制御フィールド2014は、チャネル選択(例えば、予測)およびデータチャネルオーダ(例えば、スウィズル)等の特定の実行オプションに対する制御を可能にしてよい。128ビットの命令フォーマット2010の命令については、実行サイズフィールド2016は、並列に実行されるデータチャネルの数を制限する。実行サイズフィールド2016は、64ビットのコンパクトな命令フォーマット2030での使用に対しては利用可能ではない可能性がある。
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 2020、src1 2022、および1つのデスティネーション2018を含む、最大3つのオペランドを有する。実行ユニットは、デュアルデスティネーション命令をサポートしてよく、この場合、デスティネーションのうちの1つが暗示される。データ操作命令は、第3のソースオペランド(例えば、SRC2 2024)を有することができ、この場合、命令オペコード2012が、ソースオペランドの数を判定する。命令の最後のソースオペランドは、命令と共に渡される(例えば、ハードコードされた)即値であってよい。
128ビットの命令フォーマット2010は、例えば、直接レジスタアドレス指定モードまたは間接レジスタアドレス指定モードが用いられるかどうかを特定するアクセス/アドレスモードフィールド2026を含んでよい。直接レジスタアドレス指定モードが用いられる場合、1または複数のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
128ビットの命令フォーマット2010はまた、アクセス/アドレスモードフィールド2026も含んでよく、アクセス/アドレスモードフィールド2026が命令のアドレスモードおよび/またはアクセスモードを指定する。アクセスモードは、命令のデータアクセスアライメントを定義するために用いられてよい。16バイトアライン型のアクセスモードおよび1バイトアライン型のアクセスモードを含むアクセスモードをサポートしてよく、この場合、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第1モードの場合、命令はソースオペランドおよびデスティネーションオペランドに、バイトアライン型のアドレス指定を使用してよく、第2モードの場合、命令はすべてのソースオペランドおよびデスティネーションオペランドに対して16バイトアライン型のアドレス指定を使用してよい。
アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接アドレス指定あるいは間接アドレス指定のいずれを使用するかを決定してよい。直接レジスタアドレス指定モードが用いられる場合、命令内のビットが1または複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが用いられる場合、1または複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値およびアドレス即値フィールドに基づいて計算されてよい。
命令は、オペコードデコード2040を単純化するべく、オペコード2012ビットフィールドに基づいてグループ化されてよい。8ビットオペコードについては、ビット4、5および6は、実行ユニットがオペコードのタイプを判定することを可能にする。示された正確なオペコードグループ化は、一例に過ぎない。移動およびロジックオペコードグループ2042は、データ移動およびロジック命令(例えば、移動(mov)、比較(cmp))を含んでよい。移動およびロジックグループ2042は、5つの最上位ビット(MSB)を共有してよく、ここで、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxxbの形式である。フロー制御命令グループ2044(例えば、呼び出し、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。各種命令グループ2046は、命令の混在を含み、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む。並列数学命令グループ2048は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ2048は、データチャネルに並行して算術処理を実行する。ベクトル数学グループ2050は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドに対するドット積計算等の算術を実行する。一実施形態において、示されたオペコードデコード2040を用いて、実行ユニットのどの部分が、デコードされた命令の実行に用いられるかを判定してよい。例えば、いくつかの命令は、シストリックアレイによって実行されるシストリック命令として指定されてよい。レイトレーシング命令(不図示)等の他の命令は、実行ロジックのスライスまたはパーティショニング内のレイトレーシングコアまたはレイトレーシングロジックにルーティングされてよい。「グラフィックパイプライン」
図21は、別の実施形態による、グラフィックプロセッサ2100のブロック図である。本明細書の任意の他の図面の要素と同一または類似の名称を有する図21の要素は、他の図面における同一の要素を説明しており、本明細書の他の箇所の説明と同様、それと同様の態様で動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定はされない。
グラフィックプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150およびレンダリング出力パイプライン2170等の異なるタイプのグラフィック処理パイプラインを含んでよい。グラフィックプロセッサ2100は、1または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックプロセッサであってよい。グラフィックプロセッサは、1または複数の制御レジスタ(不図示)へのレジスタへの書き込みにより、または、リング相互接続2102を介してグラフィックプロセッサ2100に発行されたコマンドを介して制御されてよい。リング相互接続2102は、グラフィックプロセッサ2100を、他のグラフィックプロセッサまたは汎用プロセッサ等の他の処理コンポーネントに結合してよい。リング相互接続2102からのコマンドがコマンドストリーマ2103により解釈され、コマンドストリーマ2103は、命令をジオメトリパイプライン2120またはメディアパイプライン2130の個々のコンポーネントに供給する。
コマンドストリーマ2103は、メモリから頂点データを読み取る頂点フェッチャ2105の処理を命令してよく、コマンドストリーマ2103により提供される頂点処理コマンドを実行する。頂点フェッチャ2105は、頂点データを頂点シェーダ2107に提供してよく、頂点シェーダ2107は、各頂点に座標空間変換およびライティング(lighting)処理を実行する。頂点フェッチャ2105および頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行スレッドを実行ユニット2152A~2152Bにディスパッチすることにより、頂点処理命令を実行してよい。
実行ユニット2152A~2152Bは、グラフィック処理およびメディア処理を実行するための命令セットを有するベクトルプロセッサのアレイであってよい。実行ユニット2152A~2152Bは、それぞれのアレイに固有である、または、アレイ間で共有される付属のL1キャッシュ2151を有してよい。キャッシュは、データキャッシュ、命令キャッシュ、または、異なるパーティショニングにデータおよび命令を含むようにパーティショニングされたシングルキャッシュとして構成されてよい。
ジオメトリパイプライン2120は、3Dオブジェクトのハードウェア加速化テッセレーションを実行するテッセレーションコンポーネントを含んでよい。プログラム可能なハルシェーダ2111は、テッセレーション処理を構成してよい。プログラム可能ドメインシェーダ2117は、テッセレーション出力のバックエンド評価を提供してよい。テッセレータ2113は、ハルシェーダ2111の指示で動作してよく、入力としてジオメトリパイプライン2120に提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する特定用途用ロジックを含んでよい。また、テッセレーションが用いられない場合、テッセレーションコンポーネント(例えば、ハルシェーダ2111、テッセレータ2113およびドメインシェーダ2117)はバイパスされてよい。
完全なジオメトリックオブジェクトは、実行ユニット2152A~2152Bにディスパッチされる1または複数のスレッドを介してジオメトリシェーダ2119により処理されてよく、またはクリッパ2129に直接進んでもよい。ジオメトリシェーダは、グラフィックパイプラインの前のステージにあるような頂点または頂点のパッチではなく、むしろジオメトリックオブジェクト全体に対し処理してよい。テッセレーションが無効化されている場合、ジオメトリシェーダ2119は、頂点シェーダ2107から入力を受信する。ジオメトリシェーダ2119は、テッセレーションユニットが無効化されている場合に、ジオメトリテッセレーションを実行するために、ジオメトリシェーダプログラムによりプログラム可能であってよい。
ラスタライズの前に、クリッパ2129は頂点データを処理する。クリッパ2129は、固定機能クリッパまたはクリッピングおよびジオメトリシェーダ機能を有するプログラム可能なクリッパであってよい。レンダリング出力パイプライン2170内のラスタライザおよびデプス試験コンポーネント2173は、ジオメトリックオブジェクトを画素毎の表現へと変換するために、画素シェーダをディスパッチしてよい。画素シェーダロジックは、スレッド実行ロジック2150に含まれてよい。随意で、アプリケーションは、ラスタライザおよびデプス試験コンポーネント2173をバイパスし、ストリームアウトユニット2123を介して、ラスタライズされていない頂点データにアクセスしてよい。
グラフィックプロセッサ2100は、相互接続バス、相互接続ファブリック、または、プロセッサの主要なコンポーネント間でのデータおよびメッセージの受け渡しを可能にするいくつかの他の相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット2152A~2152Bおよび関連するロジックユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158等)は、メモリアクセスを実行して、プロセッサのレンダリング出力パイプラインコンポーネントと通信するために、データポート2156を介して相互接続する。サンプラ2154、キャッシュ2151、2158および実行ユニット2152A~2152Bはそれぞれ、別個のメモリアクセスパスを有してよい。随意で、テクスチャキャッシュ2158はまた、サンプラキャッシュとしても構成され得る。
レンダリング出力パイプライン2170は、頂点ベースのオブジェクトを関連する画素ベースの表現へと変換するラスタライザおよびデプス試験コンポーネント2173を含んでよい。ラスタライザロジックは、固定機能三角形および線ラスタライズを実行するウィンドウア(windower)/マスカ(masker)ユニットを含んでよい。いくつかの実施形態において、関連するレンダリングキャッシュ2178およびデプスキャッシュ2179も利用可能である。画素処理コンポーネント2177は、データに対して画素ベースの処理を実行するが、いくつかの例では、2D処理に関連付けられる画素処理(例えば、ブレンディングを用いたビットブロックイメージ転送)が2Dエンジン2141により実行される、または、オーバレイディスプレイプレーンを用いてディスプレイコントローラ2143により表示時に置き換えられる。共有のL3キャッシュ2175は、すべてのグラフィックコンポーネントに利用可能であってよく、メインシステムメモリを使用することなく、データの共有を可能にする。
グラフィックプロセッサのメディアパイプライン2130は、メディアエンジン2137およびビデオフロントエンド2134を含んでよい。ビデオフロントエンド2134は、コマンドストリーマ2103からパイプラインコマンドを受信してよい。メディアパイプライン2130は別個のコマンドストリーマを含んでよい。ビデオフロントエンド2134は、コマンドをメディアエンジン2137に送信する前に、メディアコマンドを処理してよい。メディアエンジン2137は、スレッドディスパッチャ2131を介してスレッド実行ロジック2150にディスパッチするためのスレッドを生成するためのスレッド生成機能を含んでよい。
グラフィックプロセッサ2100はディスプレイエンジン2140を含んでよい。このディスプレイエンジン2140は、プロセッサ2100の外部にあってよく、リング相互接続2102またはいくつかの他の相互接続バス若しくはファブリックを介してグラフィックプロセッサと結合してよい。ディスプレイエンジン2140は、2Dエンジン2141およびディスプレイコントローラ2143を含んでよい。ディスプレイエンジン2140は、3Dパイプラインから独立して動作可能な特定用途ロジックを含んでよい。ディスプレイコントローラ2143は、ディスプレイデバイス(不図示)に結合されてよく、ディスプレイデバイスは、ラップトップコンピュータにあるようなシステム統合型ディスプレイデバイス、または、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
ジオメトリパイプライン2120およびメディアパイプライン2130は、複数のグラフィックおよびメディアプログラミングインタフェースに基づいて処理を実行するように構成可能であってよく、いずれかのアプリケーションプログラミングインタフェース(API)に固有のものではない。グラフィックプロセッサ用のドライバソフトウェアは、グラフィックプロセッサにより処理され得るコマンドに、特定のグラフィックまたはメディアライブラリに固有のAPI呼び出しを変換してよい。オープングラフィックライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、および/または、VulkanグラフィックおよびコンピュートAPIに対し、すべてKhronosグループからサポートが提供されてよい。マイクロソフトコーポレーションのDirect3Dライブラリに対してもサポートが提供され得る。これらのライブラリも組み合わせもサポートされてよい。オープンソースコンピュータビジョンライブラリ(OpenCV)へのサポートも提供されてよい。3Dパイプラインとの互換性を有する将来のAPIはまた、将来のAPIのパイプラインからグラフィックプロセッサのパイプラインへとマッピングが行われることができる場合にサポートされるだろう。「グラフィックパイプラインプログラミング」
図22Aは、例えば、本明細書で図16A、17、21と共に説明されたパイプライン等のグラフィック処理パイプラインをプログラミングするために用いられる、グラフィックプロセッサコマンドフォーマット2200を示すブロック図である。図22Bは、一実施形態による、グラフィックプロセッサコマンドシーケンス2210を示すブロック図である。図22Aの実線のボックスは、概してグラフィックコマンドに含まれるコンポーネントを示す一方、破線は随意であり、または、グラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。図22Aの例示的なグラフィックプロセッサコマンドフォーマット2200は、クライアント2202、コマンド処理コード(オペコード)2204およびコマンド用のデータ2206を識別するデータフィールドを含む。サブオペコード2205およびコマンドサイズ2208もいくつかのコマンド内に含まれる。
クライアント2202は、コマンドデータを処理するグラフィックデバイスのクライアントユニットを指定してよい。グラフィックプロセッサコマンドパーサは、各コマンドのクライアントフィールドを検査して、コマンドのさらなる処理を条件付けてよく、適切なクライアントユニットにコマンドデータをルーティングする。グラフィックプロセッサクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニットおよびメディアユニットを含んでよい。各クライアントユニットは、コマンドを処理するための対応するプロセッシングパイプラインを有してよい。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード2204、および、存在する場合にはサブオペコード2205を読み取って、実行する処理を決定する。クライアントユニットは、データフィールド2206内の情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ2208は、コマンドのサイズを指定することが予期される。コマンドパーサは、コマンドオペコードに基づいて、コマンドの少なくともいくつかのサイズを自動的に決定してよい。コマンドは、ダブルワードの倍数を用いてアラインされてよい。他のコマンドフォーマットも用いられてよい。
図22B中のフロー図は、例示的なグラフィックプロセッサコマンドシーケンス2210を示す。例示的なグラフィックプロセッサを特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、グラフィック処理のセットを設定、実行および終了するための図示されたコマンドシーケンスのバージョンを用いてよい。サンプルコマンドシーケンスが、例示の目的のみで示され、説明されるが、これらの特定のコマンドまたはこのコマンドシーケンスに限定されることはない。さらに、当該コマンドは、コマンドシーケンスにおけるコマンドのバッチとして発行されてよく、その結果、グラフィックプロセッサが少なくとも部分的にコヒーレンスな状態でコマンドのシーケンスを処理する。
グラフィックプロセッサコマンドシーケンス2210は、任意のアクティブなグラフィックパイプラインにパイプラインに対する現在保留中のコマンドを完了させるパイプラインフラッシュコマンド2212から始めてよい。随意で、3Dパイプライン2222およびメディアパイプライン2224は同時に動作しなくてよい。パイプラインフラッシュは、アクティブなグラフィックパイプラインに任意の保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックプロセッサに対するコマンドパーサは、アクティブな描画エンジンが保留中の処理を完了し、かつ、関連する読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。随意で、「ダーティ(dirty)」とマーキングされたレンダリングキャッシュ内の任意のデータがメモリに対してフラッシュされ得る。パイプラインフラッシュコマンド2212は、パイプライン同期中に、または、グラフィックプロセッサを低電力状態にする前に用いられ得る。
パイプライン選択コマンド2213は、パイプライン間で明示的に切り替えるために、コマンドシーケンスがグラフィックプロセッサを必要とする場合に用いられてよい。パイプライン選択コマンド2213は、コンテキストが両方のパイプラインにコマンドを発行しない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で一度のみ必要とされてよい。パイプラインフラッシュコマンド2212は、パイプライン選択コマンド2213を介したパイプライン切り替えの直前に必要とされてよい。
パイプライン制御コマンド2214は、処理のためにグラフィックパイプラインを構成してよく、パイプライン制御コマンド2214を用いて、3Dパイプライン2222およびメディアパイプライン2224をプログラムしてよい。パイプライン制御コマンド2214は、アクティブなパイプラインのパイプライン状態を構成してよい。パイプライン制御コマンド2214は、パイプライン同期中に用いられてよい、または、コマンドのバッチを処理する前に、アクティブなパイプライン内の1または複数のキャッシュメモリからのデータをクリアするために用いられてよい。
戻りバッファ状態コマンド2216は、データを書き込むために各パイプラインに対する戻りバッファのセットを構成するために用いられてよい。いくつかのパイプライン処理は、処理が処理中に中間データを書き込む1または複数の戻りバッファの割り当て、選択又は構成を必要とする。グラフィックプロセッサはまた、出力データを格納し、かつ、クロススレッド通信を実行するために1または複数の戻りバッファを用いてよい。戻りバッファ状態2216は、パイプライン処理のセットを用いるために、戻りバッファのサイズおよび数を選択することを含んでよい。
コマンドシーケンスにおける残りのコマンドは、処理用のアクティブなパイプラインに基づいて異なる。パイプライン決定2220に基づいて、コマンドシーケンスは、3Dパイプライン状態2230から始まる3Dパイプライン2222またはメディアパイプライン状態2240で始まるメディアパイプライン2224に合わせる。
3Dパイプライン状態2230を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、および、3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて少なくとも部分的に決定される。3Dパイプライン状態2230のコマンドは、これらの要素が用いられない場合、特定のパイプライン要素を選択的に無効にするまたはバイパスすることもできてよい。
3Dプリミティブ2232コマンドは、3Dパイプラインにより処理されるべき3Dプリミティブを提示するために用いられてよい。3Dプリミティブ2232コマンドを介してグラフィックプロセッサに渡されるコマンドおよび関連するパラメータは、グラフィックパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、頂点データ構造を生成するための3Dプリミティブ2232コマンドデータを用いる。頂点データ構造は、1または複数の戻りバッファ内に格納される。3Dプリミティブ2232コマンドを用いて、頂点シェーダを介して3Dプリミティブに頂点処理を実行してよい。頂点シェーダを処理するために、3Dパイプライン2222は、シェーダ実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
3Dパイプライン2222は、実行2234コマンドまたはイベントを介してトリガされてよい。レジスタはコマンド実行を書き込みトリガしてよい。実行は、コマンドシーケンス内の"go"、"kick"コマンドを介してトリガされてよい。コマンド実行は、グラフィックパイプライン中のコマンドシーケンスをフラッシュするためのパイプライン同期コマンドを用いてトリガされてよい。3Dパイプラインは、3Dプリミティブのためのジオメトリ処理を実行する。一度処理が完了すると、結果として生じるジオメトリックオブジェクトがラスタライズされ、画素エンジンは、結果として生じる画素に色をつける。画素シェーディングおよび画素バックエンド処理を制御する追加のコマンドがこれらの処理のために含まれてもよい。
グラフィックプロセッサコマンドシーケンス2210は、メディア処理を実行する場合、メディアパイプライン2224のパスに従ってよい。一般的には、メディアパイプライン2224に対するプログラミングについての特定の使用および方式は、実行されるメディアまたは計算処理に依存する。特定のメディアデコード処理は、メディアデコード中に、メディアパイプラインにオフロードされてよい。メディアパイプラインはバイパスされることもでき、メディアデコードは、1または複数の汎用プロセッシングコアにより提供されるリソースを全体的にまたは部分的に用いて実行され得る。メディアパイプラインはまた、汎用グラフィックプロセッサユニット(GPGPU)処理用の要素を含も含んでよく、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的には関連していない計算シェーダプログラムを用いてSIMDベクトル処理を実行するために用いられる。
メディアパイプライン2224は、3Dパイプライン2222と同様の方式で構成されてよい。メディアパイプライン状態2240を構成するためののコマンドのセットは、コマンドキューにメディアオブジェクトコマンド2242の前にディスパッチされ、または配置される。メディアパイプラインの状態2240のためのコマンドは、メディアオブジェクトを処理するために用いられるメディアパイプライン要素を構成するためのデータを含んでよい。これは、メディアパイプライン内のビデオデコードおよびビデオエンコードロジックを構成するデータ、例えば、エンコードまたはデコードフォーマットを含む。メディアパイプライン状態2240に対するコマンドはまた、状態設定のバッチを含む「間接」状態要素に対する1または複数のポインタの使用もサポートしてよい。
メディアオブジェクトコマンド2242は、メディアパイプラインによる処理のためのメディアオブジェクトにポインタを供給してよい。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。随意で、すべてのメディアパイプラインの状態は、メディアオブジェクトコマンド2242を発行する前に有効である必要がある。一度パイプライン状態が構成され、メディアオブジェクトコマンド2242がキューに入れられると、メディアパイプライン2224は、実行コマンド2244または同等の実行イベント(例えば、レジスタ書き込み)によりトリガされる。次に、メディアパイプライン2224からの出力は、3Dパイプライン2222またはメディアパイプライン2224により提供される処理により後処理されてよい。GPGPU処理が構成されてよく、メディア処理と同様の方式で実行されてよい。「グラフィックソフトウェアアーキテクチャ」
図23は、データ処理システム2300のための例示的なグラフィックソフトウェアアーキテクチャを示す。かかるソフトウェアアーキテクチャは、3Dグラフィックアプリケーション2310、オペレーティングシステム2320および少なくとも1つのプロセッサ2330を含んでよい。プロセッサ2330は、グラフィックプロセッサ2332、および1または複数の汎用プロセッサコア2334を含んでよい。プロセッサ2330は、プロセッサ1402または本明細書で説明された任意の他のプロセッサの変形例であってよい。プロセッサ2330は、プロセッサ1402または本明細書で説明された任意の他のプロセッサの代わりに用いられてよい。従って、プロセッサ1402または本明細書で説明された任意の他のプロセッサとの組み合わせにおける任意の特徴の開示内容はまた、グラフィックプロセッサ2330との対応する組み合わせも開示しているが、そのように限定されることはない。さらに、本明細書の任意の他の図面の要素を同一または同様の名称を有する図23の要素は、他の図面の同一の要素を説明しており、本明細書の他の箇所の説明と同様、それと同様に動作または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定されることはない。グラフィックアプリケーション2310およびオペレーティングシステム2320はそれぞれ、データ処理システムのシステムメモリ2350内で実行される。
3Dグラフィックアプリケーション2310は、シェーダ命令2312を含む、1または複数のシェーダプログラムを含んでよい。シェーダ言語命令は、例えば、Direct3Dの高レベルシェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)等におけるものであってよい。アプリケーションはまた、汎用プロセッサコア2334により実行するのに好適な機械言語による実行可能命令2314も含んでよい。アプリケーションはまた、頂点データにより定義されるグラフィックオブジェクト2316も含んでよい。
いくつかの実施形態において、オペレーティングシステム2320は、マイクロソフトコーポレーションのマイクロソフト(登録商標)Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、または、Linux(登録商標)カーネルの変形例を用いたオープンソースUNIX(登録商標)様式のオペレーティングシステムであってよい。オペレーティングシステム2320は、Direct3D API、OpenGL APIまたはVulkan API等のグラフィックAPI 2322をサポートすることができる。Direct3D APIが用いられる場合、オペレーティングシステム2320は、フロントエンドシェーダコンパイラ2324を用いて、HLSLにおける任意のシェーダ命令2312を下位レベルのシェーダ言語へとコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってよい、または、アプリケーションは、シェーダプリコンパイルを実行できる。高水準シェーダは、3Dグラフィックアプリケーション2310のコンパイル中により低水準のシェーダへとコンパイルされてよい。シェーダ命令2312は、Vulkan APIにより用いられるスタンダードポータブルインターメディエイトレプリゼンテーション(SPIR)のバージョン等の中間形態で提供されてよい。
ユーザモードグラフィックドライバ2326は、シェーダ命令2312をハードウェア特定表現に変換するためのバックエンドシェーダコンパイラ2327を含んでよい。OpenGL APIが用いられる場合、GLSL高水準言語におけるシェーダ命令2312は、コンパイルのためにユーザモードグラフィックドライバ2326に渡される。ユーザモードグラフィックドライバ2326は、オペレーティングシステムカーネルモード機能2328を用いて、カーネルモードグラフィックドライバ2329と通信してよい。カーネルモードグラフィックドライバ2329は、グラフィックプロセッサ2332と通信して、コマンドおよび命令をディスパッチしてよい。「IPコア実装」
1または複数の態様は、プロセッサ等の集積回路内のロジックを表わすおよび/または定義する機械可読媒体に格納される代表的なコードにより実装され得る。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。マシンにより読み取られると、命令は、マシンに、本明細書において説明される技術を実行するロジックを組み立てさせてよい。「IPコア」として知られるそのような表現は、集積回路の構造を説明するハードウェアモデルとして有形の機械可読媒体に格納され得る集積回路用のロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械上に当該ハードウェアモデルをロードする様々な顧客または製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明された処理を回路が実行するように製造されてよい。
図24Aは、一実施形態による、処理を実行する集積回路を製造するために用いられ得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、より大きな設計へと組み込まれ得るモジュール式の再利用可能な設計を生成するために用いられてよい、または、集積回路(例えば、SoC集積回路)全体を構築するために用いられてよい。設計施設2430は、高水準プログラミング言語(例えば、C/C++)におけるIPコア設計のソフトウェアシミュレーション2410を生成できる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を用いてIPコアの挙動を設計、試験および検証するために用いられ得る。シミュレーションモデル2412は、機能、挙動および/またはタイミングシミュレーションを含んでよい。その後、レジスタ転送レベル(RTL)設計2415が作成され、またはシミュレーションモデル2412から合成されてよい。RTL設計2415は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動を抽出し、モデル化されたデジタル信号を用いて実行される関連するロジックを含む。RTL設計2415に加えて、論理レベルまたはトランジスタレベルにおける下位レベルの設計が作成、設計または合成されてもよい。故に、最初の設計およびシミュレーションの特定の詳細は異なってよい。
RTL設計2415またはこれと同等のものは、ハードウェアモデル2420へと設計機能によりさらに合成されてよく、ハードウェアモデル2420は、ハードウェア記述言語(HDL)または物理的な設計データのいくつか他の表現であってよい。HDLは、IPコア設計を検証するためにさらにシミュレーションまたは試験されてよい。IPコア設計は、サードパーティの製造施設2465へ供給するために、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリまたは任意の不揮発性ストレージ媒体)を用いて格納されてよい。代替的に、IPコア設計は、有線接続2450または無線接続2460を通して伝送(例えば、インターネット経由)されてよい。その後、製造施設2465は、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態に従って処理を実行するように構成され得る。
図24Bは、集積回路パッケージアセンブリ2470の垂直断面図を示す。集積回路パッケージアセンブリ2470は、ここで説明する1または複数のプロセッサまたはアクセラレータデバイスの実装を示す。パッケージアセンブリ2470は、基板2480に接続されたハードウェアロジック2472、2474の複数のユニットを含む。ロジック2472、2474は、構成可能なロジックまたは固定機能ロジックハードウェアにおいて少なくとも部分的に実装されてよく、本明細書において説明されるプロセッサコア、グラフィックプロセッサまたは他のアクセラレータデバイスのいずれかの1または複数の部分を含み得る。ロジック2472、2474の各々ユニットは、半導体ダイ内で実装され、相互接続構造2473を介して基板2480に結合されてよい。相互接続構造2473は、ロジック2472、2474と基板2480との間で電気信号をルーティングするように構成されてよく、限定されることはないが、バンプまたはピラー等の相互接続を含み得る。相互接続構造2473は、例えば、ロジック2472、2474の処理に関連付けられる入力/出力(I/O)信号、および/または、電力または地上信号等の電気信号をルーティングするように構成されてよい。随意で、基板2480はエポキシベースのラミネート基板であってよい。基板2480はまた、他の好適なタイプの基板を含んでもよい。パッケージアセンブリ2470は、パッケージ相互接続2483を介して他の電気デバイスに接続されてよい。パッケージ相互接続2483は、基板2480の表面に結合されて、電気信号を、マザーボード、他のチップセットまたはマルチチップモジュール等の他の電気デバイスにルーティングしてよい。
ロジック2472、2474のユニットは、ロジック2472、2474間で電気信号をルーティングするよう構成されたブリッジ2482に電気的に結合されてよい。ブリッジ2482は、電気信号のルーティングを提供する高密度相互接続構造であってよい。ブリッジ2482は、ガラスまたは適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的ルーティング機能は、ロジック2472、2474間のチップ間接続を提供するブリッジ基板上に形成され得る。
ロジック2472、2474の2つのユニットおよびブリッジ2482が示されているが、本明細書において説明される実施形態では、より多いまたはより少ない数のロジックユニットを1または複数のダイ上に含んでよい。単一のダイ上にロジックが含まれる場合はブリッジ2482が除外されてよいので、1または複数のダイは、ゼロまたはそれより多いブリッジにより接続されてよい。代替的に、ロジックの複数のダイまたはユニットが1または複数のブリッジにより接続されてよい。追加的に、複数のロジックユニット、ダイおよびブリッジは、3次元構成を含む他の可能な構成において一緒に接続されてよい。
図24Cは、基板2480(例えば、ベースのダイ)に接続されたハードウェアロジックチップセットの複数のユニットを含むパッケージアセンブリ2490を示す。本明細書で説明するグラフィック処理ユニット、並列プロセッサおよび/または計算アクセラレータは、別個に製造される多様なシリコンチップレットで構成されてよい。この文脈では、チップレットは、他のチップレットと共により大きなパッケージにアセンブルされてよいロジックの別個のユニットを含む、少なくとも部分的なパッケージ統合された回路である。異なるIPコアロジックを持つ多様なセットのチップレットが、単一のデバイスにアセンブルされてよい。追加的に、チップレットは、アクティブインタポーザ技術を用いて、ベースのダイまたはベースのチップレットに統合されてよい。本明細書で説明される概念は、GPU内のIPの異なる形態間での相互接続および通信を可能にする。IPコアは、異なるプロセス技術を用いて製造されてよく、製造中に構成されてよい。これにより、とりわけいくつかのフレーバIPを持つ大型のSoC上の複数のIPを、同一の製造プロセスに収束させる複雑さを回避する。複数のプロセス技術を使用できるようにすることで、市場への出荷までの時間を短縮させ、複数のプロダクトSKUを作成するコスト効率的な方法を提供する。さらに、分割されたIPは、独立した電力ゲートを設けることにより適しており、所与のワークロードにおいて用いられないコンポーネントは、電源をオフにされることができ、全体の電力消費を減らし得る。
ハードウェアロジックチップセットは、専用ハードウェアロジックチップレット2472、ロジックまたはI/Oチップレット2474および/またはメモリチップレット2475を含んでよい。ハードウェアロジックチップセット2472およびロジックまたはI/Oチップレット2474は、構成可能なロジックまたは固定機能ロジックハードウェアにおいて少なくとも部分的に実装されてよく、本明細書において説明されるプロセッサコア、グラフィックプロセッサ、並列プロセッサまたは他のアクセラレータデバイスのいずれかの1または複数の部分を含み得る。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリまたはキャッシュ(SRAM)メモリであり得る。
各チップレットは、別個の半導体ダイとして製造され、相互接続構造2473を介して基板2480と結合され得る。相互接続構造2473は、基板2480内の様々なチップレットおよびロジック間で電気信号をルーティングするよう構成されてよい。相互接続構造2473は、バンプまたはピラー等の相互接続を含んでよいが、これらに限定はされない。いくつかの実施形態において、相互接続構造2473は、例えば、ロジック、I/Oおよびメモリチップレットの動作に関連付けられる入力/出力(I/O)信号、および/または、電力信号または地上信号などの電気信号をルーティングするように構成されてよい。
基板2480はエポキシベースのラミネート基板であってよいが、そのように限定されることはなく、基板2480はまた、他の好適なタイプの基板も含んでよい。パッケージアセンブリ2490は、パッケージ相互接続2483を介して、他の電気デバイスに接続されてよい。パッケージ相互接続2483は、基板2480の表面に結合されて、電気信号を、マザーボード、他のチップセットまたはマルチチップモジュール等の他の電気デバイスにルーティングしてよい。
ロジックまたはI/Oチップレット2474およびメモリチップレット2475は、ロジックまたはI/Oチップレット2474およびメモリチップレット2475間で電気信号をルーティングするよう構成されたブリッジ2487を介して電気的に結合されてよい。ブリッジ2487は、電気信号のルーティングを提供する高密度相互接続構造であってよい。ブリッジ2487は、ガラスまたは適切な半導体材料から構成されるブリッジ基板を含んでよい。電気的ルーティング機能は、ロジックまたはI/Oチップレット2474およびメモリチップレット2475間のチップ間接続を提供するブリッジ基板上に形成され得る。ブリッジ2487は、シリコンブリッジまたは相互接続ブリッジとも称されてよい。例えば、ブリッジ2487は、埋め込みマルチダイ相互接続ブリッジ(EMIB)である。代替的に、ブリッジ2487は、単に、1つのチップレットから別のチップレットへの直接接続であってよい。
基板2480は、I/O2491、キャッシュメモリ2492、および他のハードウェアロジック2493に関するハードウェアコンポーネントを含み得る。ファブリック2485は、基板2480内の様々なロジックチップレットおよびロジック2491、2493の間の通信を可能するように、基板2480に埋め込まれ得る。随意で、I/O2491、ファブリック2485、キャッシュ、ブリッジ、および他のハードウェアロジック2493は、基板2480の頂部に層状となるベースダイに統合され得る。
さらに、パッケージアセンブリ2490は、ファブリック2485または1または複数のブリッジ2487により相互接続されたコンポーネントまたはチップレットより少ない数または、より多い数のコンポーネントまたはチップレットをまた含んでよい。パッケージアセンブリ2490内のチップレットは、3Dまたは2.5D配置で配置され得る。一般的には、ブリッジ構造2487は、例えば、ロジックまたはI/Oチップレットとメモリチップレットとの間でポイントツーポイント相互接続を促すように用いられ得る。ファブリック2485は、様々なロジックおよび/またはI/Oチップレット(例えば、チップレット2472、2474、2491、2493)を他のロジックおよび/またはI/Oチップレットと相互接続するために使用され得る。基板内のキャッシュメモリ2492は、パッケージアセンブリ2490のためのグローバルキャッシュ、分散されたグローバルキャッシュの一部、またはファブリック2485のための専用のキャッシュとして作用し得る。
図24Dは、一実施形態による置き換え可能なチップレット2495を含むパッケージアセンブリ2494を示す。置き換え可能なチップレット2495は、1または複数のベースのチップレット2496、2498上の標準スロットにアセンブルされてよい。ベースのチップレット2496、2498は、ブリッジ相互接続2497を介して結合されてよく、これは本明細書で説明される他のブリッジ相互接続と同様であってよく、例えば、EMIBであってよい。メモリチップレットはまた、ブリッジ相互接続を介してロジックまたはI/Oチップレットに接続されてもよい。I/Oおよびロジックチップレットは相互接続ファブリックを介して通信してよい。ベースのチップレットはそれぞれ、ロジックまたはI/Oメモリキャッシュのうちの1つのための標準フォーマットの1または複数のスロットをサポートしてよい。
SRAMおよび電力供給回路は、ベースのチップレット2496、2498のうちの1または複数の内部に製造されてよく、これは、ベースのチップレットの上にスタックされる置き換え可能なチップレット2495とは異なるプロセス技術を用いて製造されてよい。例えば、ベースのチップレット2496、2498は、より大型プロセス技術を用いて製造されてよい一方、置き換え可能なチップレットは、より小型のプロセス技術を用いて製造されてよい。置き換え可能なチップレット2495の1または複数は、メモリ(例えば、DRAM)チップレットであってよい。パッケージアセンブリ2494を用いるプロダクトをターゲットとする電力および/または性能に基づき、パッケージアセンブリ2494のための異なるメモリ密度が選択されてよい。追加的に、異なる数の機能ユニットタイプを持つロジックチップレットが、ターゲットのプロダクトの電力および/または性能に基づきアセンブリ時に選択されてよい。追加的に、異るタイプのIPロジックコアを含むチップレットが、置き換え可能なチップレットスロットに挿入されてよく、異なる技術のIPブロックを混在可能で、異なる技術のIPブロックに合致できるハイブリッドプロセッサ設計を可能にする。「チップ集積回路上の例示的なシステム」
図25~26は、1または複数のIPコアを用いて製造されてよい例示の集積回路および関連するグラフィックプロセッサを示す。図示されるものに加えて、他のロジックおよび回路が含まれてよく、これらは、追加のグラフィックプロセッサ/コア、周辺機器インタフェースコントローラまたは汎用プロセッサコアを含む。本明細書における任意の他の図面の要素と同一または類似の名称を有する図25~26の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に処理または機能してよく、同一のコンポーネントを備えてよく、他のエンティティにリンクされてよいが、そのように限定されることはない。
図25は、1または複数のIPコアを用いて製造され得るチップ集積回路2500上の例示的なシステムを示すブロック図である。例示的な集積回路2500は、1または複数のアプリケーションプロセッサ2505(例えば、CPU)、少なくとも1つのグラフィックプロセッサ2510を含み、少なくとも1つのグラフィックプロセッサは、グラフィックプロセッサ1408、1508、2510あるいは本明細書で説明された任意のグラフィックプロセッサの変形例であってよく、本明細書で説明された任意のグラフィックプロセッサの代わりに用いられてよい。従って、本明細書におけるグラフィックプロセッサとの組み合わせにおける任意の特徴の開示内容はまた、グラフィックプロセッサ2510との対応する組み合わせも開示しているが、そのように限定はされない。集積回路2500は、イメージプロセッサ2515および/またはビデオプロセッサ2520をさらに含んでよく、これらのいずれかは、同じまたは複数の異なる設計施設からのモジュール式のIPコアであってよい。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535およびIS/ICコントローラ2540を含む周辺機器またはバスロジックを含んでよい。追加的に、集積回路は、高解像度マルチメディアインタフェース(HDMI(登録商標))コントローラ2550およびモバイルインダストリプロセッサインタフェース(MIPI)ディスプレイインタフェース2555のうちの1または複数に結合されたディスプレイデバイス2545を含んでよい。ストレージは、フラッシュメモリおよびフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供されてよい。メモリインタフェースは、SDRAMまたはSRAMメモリデバイスへのアクセスのためにメモリコントローラ2565を介して提供されてよい。いくつかの集積回路は追加で、埋め込みセキュリティエンジン2570を含んでよい。
図26A~26Bは、本明細書で説明する実施形態により、SoC内で用いるための例示的なグラフィックプロセッサを示すブロック図である。グラフィックプロセッサは、グラフィックプロセッサ1408、1508、2510または本明細書で説明した任意の他のグラフィックプロセッサの変形例であってよい。グラフィックプロセッサは、グラフィックプロセッサ1408、1508、2510または本明細書で説明した任意の他のグラフィックプロセッサの代わりに用いられてよい。従って、グラフィックプロセッサ1408、1508、2510または本明細書で説明した任意の他のグラフィックプロセッサとの組み合わせにおける任意の特徴の開示内容は、図26A~図26Bのグラフィックプロセッサとの対応する組み合わせについても開示しているが、そのように限定はされない。図26Aは、一実施形態による、1または複数のIPコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックプロセッサ2610を示す。図26Bは、一実施形態による、1または複数のIPコアを用いて製造されてよいチップ集積回路上のシステムの追加の例示的なグラフィックプロセッサ2640を示す。図26Aのグラフィックプロセッサ2610は、低パワーグラフィックプロセッサコアの例である。図26Bのグラフィックプロセッサ2640はより高性能のグラフィックプロセッサコアの例である。例えば、グラフィックプロセッサ2610および2640の各々は、この段落の冒頭で言及した通り、図25のグラフィックプロセッサ2510の変形例であってよい。
図26Aに示される通り、グラフィックプロセッサ2610は、頂点プロセッサ2605および1または複数のフラグメントプロセッサ2615A~2615N(例えば、2615A、2615B、2615C、2615D、2615N‐1および2615Nまで)を含む。グラフィックプロセッサ2610は、別個のロジックを介して異なるシェーダプログラムを実行でき、頂点プロセッサ2605は、頂点シェーダプログラムに対する処理を実行するために最適化され、一方、1または複数のフラグメントプロセッサ2615A~2615Nは、フラグメントまたは画素シェーダプログラムに対するフラグメント(例えば、画素)シェーディング処理を実行してよい。頂点プロセッサ2605は、3Dグラフィックパイプラインの頂点処理ステージを実行し、プリミティブおよび頂点データを生成する。フラグメントプロセッサ2615A~2615Nは、頂点プロセッサ2605により生成されたプリミティブおよび頂点データを用いて、ディスプレイデバイス上に表示されるフレームバッファを生成する。フラグメントプロセッサ2615A~2615Nは、OpenGL APIに提供されるようなフラグメントシェーダプログラムを実行するために最適化されてよく、ダイレクト3D APIにおいて提供されるような画素シェーダプログラムと同様の処理を実行するために用いられてよい。
追加的にグラフィックプロセッサ2610は、1または複数のメモリ管理ユニット(MMU)2620A~2620B、キャッシュ2625A~2625Bおよび回路相互接続2630A~2630Bをさらに含む。1または複数のMMU2620A~2620Bは、頂点プロセッサ2605および/またはフラグメントプロセッサ2615A~2615Nを含むグラフィックプロセッサ2610に対する仮想-物理アドレスマッピングを提供し、1または複数のキャッシュ2625A~2625Bに格納される頂点またはイメージ/テクスチャデータに加えて、メモリに格納される参照頂点またはイメージ/テクスチャデータであってよい。各プロセッサ2505~2520が共有または一体化された仮想メモリシステムに参加できるように、1または複数のMMU2620A~2620Bは、図25の1または複数のアプリケーションプロセッサ2505、イメージプロセッサ2515および/またはビデオプロセッサ2520と関連付けられた1または複数のMMUを含む、システム内の他のMMUと同期されてよい。グラフィックプロセッサ2610のコンポーネントは、本明細書で説明された他のグラフィックプロセッサのコンポーネントに対応してよい。1または複数のMMU2620A~2620Bは、図2CのMMU245と対応してよい。頂点プロセッサ2605およびフラグメントプロセッサ2615A~2615Nは、グラフィックマルチプロセッサ234と対応してよい。1または複数の回路相互接続2630A~2630Bは、実施形態に従い、グラフィックプロセッサ2610がSoCの内部バスを介してまたは直接接続を介して、SoC内の他のIPコアとインタフェースを取ることを可能にする。1または複数の回路相互接続2630A~2630Bは、図2Cのデータクロスバー240に対応してよい。グラフィックプロセッサ2610の類似のコンポーネントと、本明細書で説明される様々なグラフィックプロセッサアーキテクチャとの間のさらなる対応関係が見出されてよい。
図26Bに示されるように、グラフィックプロセッサ2640は、図26Aのグラフィックプロセッサ2610の1または複数のMMU2620A~2620B、キャッシュ2625A~2625Bおよび回路相互接続2630A~2630Bを含む。グラフィックプロセッサ2640は、1または複数のシェーダコア2655A~2655N(例えば、2655A、2655B、2655C、2655D、2655E、2655Fから2655N-1および2655N)を含み、シェーダコアは統合されたシェーダコアアーキテクチャを提供し、そこでは、単一のコアまたはタイプまたはコアが、頂点シェーダ、フラグメントシェーダおよび/または計算シェーダを実装するシェーダプログラムコードを含むあらゆるタイプのプログラム可能なシェーダコードを実行できる。提示する正確な数のシェーダコアは、実施形態および実装間で変化し得る。さらに、グラフィックプロセッサ2640は、コア間タスクマネージャ2645を含み、コア間タスクマネージャは、1または複数のシェーダコア2655A~-2655Nに実行スレッドをディスパッチするスレッドディスパッチャ、および、タイルベースのレンダリングに対するタイル化処理を加速化させるタイル化ユニット2658としての機能を果たし、タイル化ユニットでは、例えば、シーン内の局所空間のコヒーレンスを活用するために、または、内部キャッシュの利用を最適化するために、シーンに対するレンダリング処理がイメージ空間に細分化される。シェーダコア2655A~2655Nは、例えば、図2Dにあるようなグラフィックマルチプロセッサ234、または、図3Aおよび3Bのグラフィックマルチプロセッサ325、350のそれぞれ、あるいは、図3Cのマルチコアグループ365Aに対応してよい。
[データ圧縮管理]
グラフィック処理デバイス(例えば、GPU)は、グラフィック処理デバイスのメモリに格納されるデータ、またはグラフィック処理デバイスと通信可能に結合されるデータに対して、圧縮技術を実装するための処理を呼び出すことができる。いくつかの例では、処理は、グラフィック処理デバイス上の処理リソースによって実行される命令セットアーキテクチャ(ISA)の1または複数の命令によって呼び出される。本明細書で使用されるように、「処理リソース」という語句は、GPUにおける、例えば、処理ユニット、処理エンジン、実行リソース、実行ユニット(EU)508A-N、509A-N、600、852A-B、ストリームプロセッサ、ストリーミングマルチプロセッサ(SM)、グラフィックマルチプロセッサ1925、1950、マルチコアグループ1965A-1965N、コンピュートユニット(グラフィックコアネクストのコンピュートユニット)、を指すと解釈されるものとする。他の例では、処理は、図3Cに示されるメモリコントローラ367、図7に示されるメモリコントローラ712A~712B、または図15に示されるメモリコントローラ1514のうちの1または複数など、グラフィック処理デバイスのメモリコントローラ上の処理リソースによって実装されてもよい。
ここでは、様々な異なる圧縮管理技術について説明する。いくつかの例では、例えば、複数のスレッドが共通の圧縮メモリを共有して実行する場合や、テンソルハードウェアが圧縮メモリを読み出しおよび/または書き込みする場合、レイトレーシングハードウェアが圧縮メモリを読み出しおよび/または書き込みする場合など、技術はグラフィック処理環境での利用が考えられる。
[命令ベースの圧縮]
いくつかの例では、データ圧縮命令は、グラフィック処理デバイスの処理要素および/またはメモリコントローラによって実行され、グラフィック処理デバイスのメモリに格納されたデータを圧縮することができる。命令に応答して、メモリの値を分析し、閾値を超える長さを持つメモリ内の同一な値のシーケンスを見つけることができる。シーケンスが配置された場合、メモリ内のシーケンスは、単一の値と、シーケンス内の値の数を識別する関連するメタデータタグで置き換えられ、これによりメモリに保存されるデータが圧縮される。圧縮データは、メモリから読み出され、またはアクセスされるときに、逆の処理を実行する、すなわち、単一のデータ値を、メタデータタグで識別される長さを持つ一連のデータ値に展開することで、圧縮解除されることがある。
図27は、実施形態による、圧縮技術を実装する方法における処理を示すフローチャートである。いくつかの例では、図27に示される処理は、圧縮命令に応答して、上述したように、グラフィック処理ユニットのメモリコントローラによって実装されてもよい。図27を参照すると、処理2710で、メモリ値が分析される。いくつかの例では、メモリは、処理リソースに通信可能に結合されたキャッシュメモリ、またはグラフィック処理デバイスに通信可能に結合されたリモートメモリのうちの1または複数を含んでいてもよい。
処理2715では、閾値よりも大きい長さを有する同一メモリ値のシーケンスが配置されているかどうかが判断される。いくつかの例では、閾値は、例えば、グラフィック処理デバイスのユーザによって設定される静的な値であってもよい。閾値は、グラフィック処理デバイス上で実行されるアプリケーションまたはアプリケーションのクラスに固有のものであってもよい。あるいは、閾値は、メモリ内のデータの圧縮が望ましいと思われる度合いに固有のものとすることもできる。例えば、ニューラルネットワーキングモデルの大きな層のデータを小さな層よりも圧縮することや、ニューラルネットワーキングモデルの特定の種類のデータを圧縮することに大きな効用があり得る。他の例では、グラフィック処理デバイスの処理条件に応じて、閾値を動的に設定することができる。
処理2715において、同一メモリ値の長さのシーケンスが閾値未満である場合、2720に示されるように、次にシーケンスは圧縮されない。対照的に、処理2715において、同一メモリ値のシーケンスの長さが閾値未満でない(すなわち、閾値より大きいまたはこれと等しい)場合には、2725に例示されているように、次にシーケンスが圧縮される。いくつかの例では、同一データ値のシーケンスを、単一のデータ値と、シーケンスの長さを表すメタデータタグに置き換えることで、シーケンスを圧縮することができる。例えば、メモリが25個のゼロ(0)のメモリ値のシーケンスで構成されている場合、次にそのシーケンスはゼロ(0)の単一の値と、そのシーケンスが25個の値を持つことを示すメタデータタグで置き換えられてもよい。いくつかの例では、メタデータタグは、単一の値に隣接してメモリに格納されている場合がある。
図28は、実施形態による、圧縮解除技術を実施する方法における処理を示すフローチャートである。いくつかの例では、図28に示される処理は、図27に示される処理によって生成された圧縮メモリに向けられたデータアクセス要求、例えば、読み取り要求に応答して開始されてもよい。他の例では、図28に示される処理は、データ圧縮解除命令に応答して実施されてもよい。
図28を参照すると、処理2810において、圧縮されたメモリからメモリ値が読み込まれる。処理2815では、処理2810で読み込んだメモリ値にメタデータタグが検出されたかどうかが判断される。処理2815において、メタデータタグが検出されない場合、2820に示されるように、次にメモリ値は圧縮解除されない。対照的に、処理2815において、メタデータタグが検出された場合、2825に示されるように、次にメモリ値は圧縮解除される。いくつかの例では、メタデータタグを、メタデータタグの値に対応する長さを持つ同一データ値のシーケンスで置き換えることにより、メモリ値を圧縮解除することができる。前述の例を用いると、メタデータタグの値が25の場合、次にメタデータタグをゼロ(0)のメモリ値25個のシーケンスで置き換えることで、データを圧縮解除することができる。処理2825において、圧縮解除されたメモリ値は、要求元に転送されてもよい。他の例では、圧縮データが要求元に直接伝送され、要求元がデータを圧縮解除してもよい。
図29は、実施形態による、ビット列の圧縮および圧縮解除の模式図である。図29に示される例では、閾値を3(3)に設定することができる。圧縮命令に応答して、生(圧縮解除)データ2910のメモリ値は、3つのゼロ値のシーケンスを、3(3)の値を持つメタデータタグにリンクされた単一のゼロ値に置き換えることにより、また、4つのゼロ値のシーケンスを、4(4)の値を持つメタデータタグにリンクされた単一のゼロ値に置き換えることにより、圧縮され、圧縮データセット2920を生成する。逆に、圧縮解除命令に応答して、圧縮データセット2920は、3(3)の値を有するメタデータタグにリンクされた単一のゼロ値を3つのゼロ値のシーケンスに戻して展開して、4(4)の値を有するメタデータタグにリンクされた単一のゼロ値を4つのゼロ値のシーケンスに戻して展開して圧縮解除し、生の(圧縮解除された)データセット2930を再作成する。
[動的なバイトサイズの最頻値圧縮]
グラフィック処理装置は、キャッシュメモリに格納されたデータに対して、様々な形式のデータ圧縮を行うことができる。いくつかの例では、圧縮ベースバイトサイズは、少なくとも部分的には、前回の圧縮処理で最も頻繁に使用された圧縮ベースサイズの値に基づいて、動的に選択されることがある。これは、1バイト、2バイト、4バイト、8バイト、16バイトなどを含む圧縮ベースで実装することができる。圧縮ベースサイズは、圧縮データに論理的に関連付けられたメタデータに格納されていてもよい。
図30は、実施形態による、動的バイトサイズ最頻値圧縮を実装する方法における処理を示すフローチャートであり、図31は、実施形態による、動的バイトサイズ最頻値圧縮が実装され得るキャッシュ構造の模式図である。図30~31を参照すると、処理3010において、キャッシュラインの128バイトのセグメント内のデータパターンが分析され、処理3015において、キャッシュラインの最頻値バイトサイズが決定される。処理3020では、処理3015で決定された最頻値のバイトサイズに基づいてマスク長が選択され、処理3025では、マスク長がキャッシュラインに関連付けられたメタデータに格納される。処理3030では、処理3015で決定された最頻値バイトサイズが、キャッシュ内の次の128バイトの最頻値バイトサイズを決定するための出発点として使用される。図30に示される処理は、キャッシュ全体で繰り返してもよいし、キャッシュの一部分だけで繰り返してもよい。図31に示すように、結果として得られるキャッシュ3010は、可変の圧縮ブロックサイズ(すなわち、1B、2B、4B、8B、16B)を用いて圧縮され、そのサイズはメタデータ3020によって識別される。
[類似値ベースの書き込み加速化]
いくつかの例では、グラフィック処理デバイスのメモリコントローラは、メモリに指示された書き込み処理のための類似値ベースの加速化を実行する処理を実装することができる。例えば、多くのグラフィック処理では、大きなセグメントのデータにゼロの値が含まれていることが一般的であり、このようなデータがメモリに繰り返し書き込まれることがある。いくつかの例では、メモリコントローラは、ターゲットデータのアドレス範囲にすべて類似値(例えば、すべてゼロまたはすべて1)が含まれている可能性、または信頼性レベルを示すデータを維持することで、書き込み処理を加速することができる。書き込み処理で受信した書き込みデータがすべて類似値(例えば、すべてゼロまたはすべて1)を含み、書き込み処理に関連するターゲットメモリアドレスのデータが同じ値を持つという高い信頼性レベルがある場合、次にメモリコントローラはターゲットメモリアドレスへの読み取り処理を実行し、ターゲットメモリアドレスの現在のデータが書き込み処理の書き込みデータと一致する場合、書き込み処理を取りやめてもよい。
図32は、実施形態による、書き込み処理加速技術を実行するように構成されたメモリコントローラの模式図である。図32を参照すると、いくつかの例では、メモリコントローラ3200は、信頼度予測器3210およびアクセラレータ3220を含んでもよい。図32に示される例では、信頼度予測器3210は、カウンタのセットを含むハッシュテーブルを維持しており、そのカウンタの各々はメモリアドレスインデックスに関連付けられている。アクセラレータ3220は、信頼性予測器の信頼性レベルを使用して、書き込み処理を実行しなければならないか、あるいはそれとは対照的に、書き込み処理をやめることができるかを判断する処理回路を含んでもよい。
図33~35は、実施形態による、書き込み処理の加速化技術を実装する方法における処理を示すフローチャートである。いくつかの例では、図33~35に示される処理は、メモリコントローラ3200によって、単独で、またはグラフィック処理デバイスの他の要素と組み合わせて実装されてもよい。図33は、信頼度予測器のハッシュテーブルを初期化する処理を示している。図33に示される処理は、例えば、グラフィック処理デバイスの電源投入時や、メモリコントローラ3200が管理するメモリに新たなワークロードが割り当てられたときに実行されてもよい。図33を参照すると、処理3310において、メモリコントローラ3300が管理するメモリアドレスのハッシュが計算され、処理3315において、メモリアドレスの信頼度カウンタがゼロに設定される。図33に示される処理は、メモリアドレス範囲のハッシュテーブルが構築されるまで繰り返すことができる。
図34は、メモリコントローラで読み取り処理が実施された場合に、ハッシュテーブルを更新する方法における処理を示したものである。図34を参照すると、処理3410において、メモリコントローラ3300において読み取り処理が受信され、その読み取り処理に関連するターゲットメモリアドレスからデータが取り出される。処理3415で、メモリから検索されたデータがすべて類似値(例えば、すべてゼロまたはすべて1)である場合、次に処理3420が実行され、信頼度予測器は、メモリアドレスに関連付けられたハッシュテーブルのカウンタをインクリメントする。対照的に、処理3415において、メモリから検索されたデータがすべて類似値(例えば、すべてのゼロまたはすべての1)でない場合、次に処理3420はバイパスされ、処理3425が実施され、読み出しデータは要求元に返される。従って、図34に示される処理は、メモリアドレスへの読み取り処理によって、すべて類似値(例えば、すべてゼロまたはすべて1)のデータが返されるたびに、メモリアドレスに関連付けられたカウンタをインクリメントする役割を果たす。
図35は、書き込み処理を管理する方法における処理を示したものである。図35を参照すると、処理3510において、メモリコントローラ3300に書き込み処理が受信される。処理3515では、書き込み処理に関連した書き込みデータがすべての類似値(例えば、すべてのゼロまたはすべての1)であるかどうかが判断される。処理3515で、書き込み処理に関連付けられた書き込みデータがすべての類似値(例えば、すべてのゼロまたはすべての1)でない場合、次に処理3520が実行され、書き込み処理で受信した書き込みデータが、書き込み処理に関連付けられたターゲットメモリアドレスに書き込まれる。対照的に、処理3515で、書き込み処理に関連する書き込みデータがすべて類似値(例えば、すべてゼロまたはすべて1)である場合、次に処理3525が実行され、信頼度予測器が呼び出されて、ハッシュテーブルを読み、ターゲットメモリアドレスのデータもまたすべて類似値(例えば、すべてゼロまたはすべて1)からなるという信頼性レベルを得る。
ある例では、メモリアドレスに関連付けられたカウンタが、信頼性レベルとして機能することがある。処理3530では、カウンタがプログラムされた閾値を超えているかどうかが判断される。いくつかの例では、閾値は静的で、所定の値として設定され得る。他の例では、処理条件の機能に応じて閾値を変化させることができる。例えば、グラフィックワークロードにおいて、書き込み処理がパフォーマンスを制限する要因とならないような処理環境では、閾値を大きくすることができる。逆に、グラフィックワークロードにおいて書き込み処理がパフォーマンスを制限する要因となるような処理環境では、閾値を下げることができる。
処理3530において、メモリアドレスに関連するカウンタがプログラムされた閾値を超えていない場合、次に処理3520が実行され、書き込み処理で受信した書き込みデータがメモリに書き込まれる。対照的に、処理3530において、メモリアドレスに関連付けられたカウンタがプログラムされた閾値以上である場合、次に処理3535が実施され、メモリコントローラは、書き込み処理に関連付けられたターゲットメモリアドレスに対して、(書き込み処理の代わりに)読み取り処理を行う。
処理3540では、処理3535でターゲットメモリアドレスから取り出したデータが、処理3510で受信した書き込み処理の書き込みデータと一致するかどうかを判断する。処理3540で、データが一致しない場合、次に処理3545が実施され、メモリアドレスに関連するカウンタがデクリメントされ、その後、処理3520が実施され、処理3510の書き込み処理で受信した書き込みデータがメモリに書き込まれる。対照的に、処理3540でデータが一致した場合には、次に処理3545が実行され、書き込み処理は不要であるため取りやめる。
別の実施形態では、ソフトウェアは、メモリページのすべてのビットが同様の値(例えば、すべてゼロまたはすべて1)に設定されているときにヒントを提供することができ、メモリコントローラは、メモリページのすべてのビットが同様の値(例えば、すべてゼロまたはすべて1)に設定されているメモリページのリストを維持することができる。メモリアクセス要求をページリストと照合し、要求のアドレスがリスト上にあれば、次にメモリコントローラは、メモリ処理を実行せずにデータ値を自動的に返すことができる。受信した書き込み処理をページのリストと照合し得、書き込みのデータがすべて類似値(例えば、すべてゼロまたはすべて1)でない場合、次にそのページはリストから削除される。
[独自のバイトストレージによるGPUデータベース加速化]
いくつかの例では、グラフィック処理装置のメモリに保存された、または通信可能に結合された1または複数のデータベースは、データベースの数値コンテンツを分析し、データベース内の同一な値のシーケンスを識別し、同一な値のシーケンスを単一の値とそのシーケンス内の値の数を識別する関連するメタデータタグで置き換えることにより、圧縮される場合がある。これは、例えば、グラフィック処理環境において、数値化されたカラーデータおよび/またはテクスチャデータを圧縮するのに有効である。カラーデータおよび/またはテクスチャデータは、1または複数のデータベースにnバイトの値として一般的に保存されており、ここでnは2の累乗(例えば、32、64、128、256など)である。
図36および図37を参照すると、いくつかの例における処理では、データベース内のnバイト番号(処理3610)を分析し、処理3615において、nバイト番号内の同一な値のシーケンスを1バイトの値として格納し、文字列の開始位置を識別するメタデータを別のデータフィールドに格納することにより、非圧縮ソースファイル3710を圧縮することが可能である。処理3620では、圧縮された値を圧縮先のファイル3720に保存してもよい。
本明細書で紹介する技術の例を以下に示す。技術の実施形態は、以下に説明する例のうち、任意の1または複数、および任意の組み合わせを含むことができる。
例1は、メモリセグメントに対するデータ圧縮命令を受信するプロセッサを備える装置を含み、データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するという判定に応答して、同一メモリ値のシーケンスを圧縮する。
例2は、例1の主題を含み、閾値は、装置上で実行可能なアプリケーションのクラスに固有の静的な値であることを特徴とする。
例3は、例1~2のいずれかの主題を含み、閾値は、装置の処理条件に応じて動的に設定される。
例4は、例1~3のいずれかの主題を含み、プロセッサは、同一メモリ値のシーケンスを、メモリ値の単一インスタンスと、シーケンスの長さを識別するメタデータタグとに置き換えて、圧縮データシーケンスを生成する。
例5は、例1~4のいずれかの主題を含み、プロセッサは、メモリ値の単一インスタンスに隣接するメタデータタグを格納する。
例6は、例1~5のいずれかに記載の主題を含み、プロセッサは、メモリセグメントに向けられたデータ圧縮解除命令を受信し、データ圧縮解除命令に応答して、メモリ値の単一インスタンスを、メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置換する。
例7は、例1~6のいずれかに記載の主題を含み、プロセッサは、要求元から、メモリセグメントに向けられた読み取り処理を受信し、読み取り処理に応答して、圧縮データシーケンスを要求元に伝送する。
例8は、コンピュータが実施する方法であって、メモリセグメントに対するデータ圧縮命令を受信することと、データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するという判定に応答して、同一メモリ値のシーケンスを圧縮することと、を含む。
例9は、例8の主題を含み、閾値は、装置上で実行可能なアプリケーションのクラスに固有の静的な値である。
例10は、例8~9のいずれかの主題を含み、閾値は、装置の処理条件に応じて動的に設定される。
例11は、例8~10のいずれかの主題を含み、さらに、同一メモリ値のシーケンスを、メモリ値の単一インスタンスと、シーケンスの長さを識別するメタデータタグとに置き換えて、圧縮データシーケンスを生成することを含む。
例12は、例8~11のいずれかの主題を含み、メモリ値の単一インスタンスに隣接してメタデータタグを格納することをさらに含む。
例13は、例8~12のいずれかの主題を含み、メモリセグメントに向けられたデータ圧縮解除命令を受信することと、データ圧縮解除命令に応答して、メモリ値の単一インスタンスを、メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置き換えることとをさらに含む。
例14は、例8~13のいずれかに記載の主題を含み、要求元から、メモリセグメントに向けられた読み取り処理を受信し、読み取り処理に応答して、圧縮データシーケンスを要求元に伝送することをさらに含む。
例15は、少なくとも1つのプロセッサ上で実行されるとき、メモリセグメントに対するデータ圧縮命令を受信し、データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するという判定に応答して、同一メモリ値のシーケンスを圧縮するように、少なくとも1つのプロセッサを構成する1または複数の命令を含む非一時的コンピュータ可読媒体を含む。
例16は、例15の主題を含み、閾値は、装置上で実行可能なアプリケーションのクラスに固有の静的な値である。
例17は、閾値が装置の処理条件に応じて動的に設定される、例15~16のいずれかに記載の主題を含む。
例18は、例15~17のいずれかに記載の主題を含み、圧縮データシーケンスを生成するために、同一メモリ値のシーケンスを、メモリ値の単一インスタンスと、シーケンスの長さを識別するメタデータタグとに置き換える命令をさらに含む。
例19は、例15~18のいずれかに記載の主題を含み、メモリ値の単一インスタンスに隣接してメタデータタグを格納する命令をさらに備える。
例20は、例15~19のいずれかに記載の主題を含み、メモリセグメントに向けられたデータ圧縮解除命令を受信し、データ圧縮解除命令に応答して、メモリ値の単一インスタンスを、メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置き換える命令をさらに含む。
例21は、例15~20のいずれかの主題を含み、要求元から、メモリセグメントに向けられた読み取り処理を受信し、読み取り処理に応答して、圧縮データシーケンスを要求元に伝送する命令をさらに含む。
例22は、キャッシュラインのセグメント内のデータパターンを分析し、最頻値(MFV)バイトサイズを決定し、MFVバイトサイズに基づいてマスク長を選択し、マスク長をメタデータに格納し、MFV値に基づいて次の圧縮の開始点を選択するプロセッサを備えた装置である。
例23は、書き込みデータからなる書き込み処理を受信し、書き込みデータが同類の値からなるかどうかを判断し、確信度予測器を起動してハッシュテーブルを読み、メモリ内の値が書き込み値と一致するという確信度指標を得て、メモリからデータを読み出し、メモリ内の値が書き込み値と一致したときに書き込み処理を中止するプロセッサを備える装置である。
上記の詳細な説明は添付図面の参照を伴い、当該添付図面は発明を実施するための形態の一部を成す。図面には、例示として、実施され得る特定の実施形態が示されている。これらの実施形態は、本明細書において例としても呼ばれることがある。そのような例は、図示または記載された要素に追加される複数の要素を含んでよい。しかし、図示または説明された要素を含む例もまた考えられる。さらに、本明細書で示されるまたは説明される、特定の例(またはそれらの1または複数の態様)に対して、または他の例(またはそれらの1または複数の態様)に対してのどちらかで、示されるまたは説明されるこれらの要素のいくつかの組み合わせまたは置き換えを用いる複数の例(またはそれらの1または複数の態様)も考えられる。
本明細書において参照される複数の出版物、複数の特許、及び複数の特許文献は、参照により個別に組み込まれるかのように、それらの全体において個々で参照により組み込まれる。本明細書と参照により組み込まれるこれらの文献との間に一貫性がない使用がある場合、組み込まれる参照における使用は、本明細書のものへの補足であり、矛盾する不一致については、本明細書における使用が制御する。
この文書では、特許文献で一般的なように、「1つ」という用語は、任意の他の事例や用法とは無関係に、「少なくとも1つ」または「1または複数」の1または複数のものを含むために使用されており、また、「加えて」、「セットの」は1または複数の要素を含む。この文書では、特に断りのない限り、「AまたはB」には「AだがBではない」、「BだがAではない」、「AおよびB」が含まれるように、「または」という用語は、非排他的な「または」を指すために使用される。添付の特許請求の範囲では、「含む」および「その中で」という用語は、「有する」および「そこで」というそれぞれの用語の平易な英語での同等物として使用されている。また、以下の特許請求の範囲では、「含む」および「有する」という用語は、オープンエンドであり、すなわち、特許請求の範囲でその用語の後に列挙された要素に加えて要素を含むシステム、デバイス、物品、またはプロセスは、依然としてその特許請求の範囲に含まれるものとみなされる。さらに、以下の特許請求の範囲において、「第1」、「第2」、「第3」などの用語は、単なるラベルとして使用されるにすぎず、その対象物の数値的な順序を示唆するものではない。
本明細書において「ロジック命令」と称される用語は、1または複数の論理処理を実行する1または複数の機械によって理解され得る表現に関する。例えば、ロジック命令は、1または複数のデータオブジェクトに対し、1または複数の処理を実行するプロセッサコンパイラによって解釈可能な命令を備えてよい。しかしながら、これは、機械可読命令の例に過ぎず、複数の例は、この点で限定されるものではない。
本明細書で言う「コンピュータ可読媒体」という用語は、1または複数の機械によって理解可能な複数の表現を維持可能な媒体を指す。例えば、コンピュータ可読媒体は複数のコンピュータ可読命令またはデータを格納する、1または複数のストレージ装置を備えてよい。そのような複数のストレージ装置は、例えば、光学ストレージ媒体、磁気ストレージ媒体、または半導体ストレージ媒体等のストレージ媒体を備えてよい。しかしながら、これは、単にコンピュータ可読媒体の例であり、例は、この点で限定されるものではない。
本明細書において「ロジック」と称される用語は、1又は複数の論理処理を実行する構造に関する。例えば、ロジックは1または複数の入力信号に基づく1または複数の出力信号を提供する回路を備えてよい。そのような回路は、デジタル入力を受信し、デジタル出力を提供する有限状態機械、あるいは1または複数のアナログ入力信号に応じて1または複数のアナログ出力信号を提供する回路を備えてよい。そのような回路は、特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)に提供されてよい。また、ロジックはそのような複数の機械可読命令を実行するための処理回路と組み合わされたメモリ内に格納された複数の機械可読命令を備えてよい。しかしながら、これらは、ロジックを提供し得る複数の構造の例に過ぎず、これらの例は、この点で限定されるものではない。
本明細書に記載の複数の方法の一部は、コンピュータ可読媒体上の複数のロジック命令として具現化されてよい。プロセッサ上で実行されるとき、ロジック命令は、プロセッサに、説明される方法を実装する特定用途向けの機械としてプログラミングされるようにさせる。プロセッサが本明細書において説明される方法を実行するロジック命令によって構成される場合、プロセッサは、説明される方法を実行する構造を構成する。代替的に、本明細書において説明された方法は、例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等におけるロジックに縮小されてよい。
詳細な説明および特許請求の範囲において、「結合された」および「接続された」という用語がそれらの派生語とともに、使用される可能性がある。具体例において、「接続される」とは、2または2より多くの要素が、互いに対して物理的に又は電気的に直接接触することを示すために使用されてよい。「結合される」とは、2または2より多くの要素が、物理的にまたは電気的に直接接触する状態にあることを意味してよい。しかしながら、「結合される」とは、2または2より多くの要素が互いに直接接触しなくてよいが、さらに互いに協働又は相互作用し得ることもまた意味してよい。
本明細書で参照される「一例」又は「いくつかの例」という記載は、その例と関連して説明される特定の特徴、構造、又は特性が、少なくとも実装に含まれることを意味する。本明細書の様々な箇所で登場する「一例では」という語句は、全て同じ例を指してもよく、又は指さなくてもよい。
上記の説明は、例示することを意図されているのであって、限定するものではない。例えば、上述の複数の例(またはそれらの1または複数の態様)は、他との組み合わせで用いられてよい。当業者等が上記の説明を読むと、複数の他の実施形態が使用可能である。要約書は、読み手が技術的な開示の本質をすぐに確認するのを可能にする。要約書は、特許請求の範囲に関して、その範囲または意味の解釈または限定には、用いられないという理解の下、提出されている。また、上記の詳細な説明においては、開示を簡素化すべく、様々な特徴が共にグループ化されることがある。しかしながら、実施形態は本明細書で開示された上記の特徴のサブセットを特徴付けてよいので、請求項は、それらのあらゆる特徴を説明しなくてよい。さらに、実施形態は、具体例で開示されたものより少ない特徴を含んでよい。従って、下記の特許請求の範囲はここで、各請求項がそれ自身別個の実施形態として、発明を実施するための形態に組み込まれる。ここに開示された複数の実施形態の範囲は、添付の特許請求の範囲を参照して、権利を与えられるそのような特許請求の範囲の均等物の全範囲と併せて決定されるべきである。
複数の例が、複数の構造的特徴および/または方法論的作用に固有の言語で説明されたが、特許請求の範囲に記載された主題は、説明された複数の具体的な特徴又は処理に限定されなくてよいことを理解されたい。むしろ、特定の複数の特徴及び複数の動作は、特許の請求される主題を実装するサンプルの形として開示されている。
上記の説明および図面は、限定的な意味ではなく、むしろ例示的なものとしてみなされるべきである。当業者は、添付の特許請求の範囲に記載された本発明の、より広い趣旨および範囲から逸脱することなく、本明細書に説明される実施形態に様々な修正および変更が行われ得ることを理解するであろう。

Claims (22)

  1. メモリセグメントに対するデータ圧縮命令を受信する手順、および、
    前記データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するとの判断に応答して、同一メモリ値の前記シーケンスを圧縮する手順、を行うプロセッサを有する装置。
  2. 前記閾値は、前記装置上で実行可能なアプリケーションのクラスに固有の静的な値である、請求項1に記載の装置。
  3. 前記閾値は、前記装置の処理条件に応答して動的に設定される、請求項2に記載の装置。
  4. 前記プロセッサが、
    同一メモリ値の前記シーケンスを、メモリ値の単一インスタンスと、前記シーケンスの長さを識別するメタデータタグとに置き換えて、圧縮データシーケンスを生成する手順を行う、請求項3に記載の装置。
  5. 前記プロセッサが、
    前記メタデータタグを、前記メモリ値の前記単一インスタンスに隣接して格納する手順を行う、請求項4に記載の装置。
  6. 前記プロセッサが、
    前記メモリセグメントに向けられたデータ圧縮解除命令を受信する手順、および、
    前記データ圧縮解除命令に応答して、前記メモリ値の前記単一インスタンスを、前記メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置き換える手順、を行う請求項5に記載の装置。
  7. 前記プロセッサが、
    要求元から、前記メモリセグメントに向けられた読み取り処理を受信する手順、および、
    前記読み取り処理に応答して、前記要求元に前記圧縮データシーケンスを伝送する手順、を行う請求項6に記載の装置。
  8. メモリセグメントに対するデータ圧縮命令を受信する段階、および、
    前記データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するとの判断に応答して、同一メモリ値の前記シーケンスを圧縮する段階、を有するプロセッサが実装する方法。
  9. 前記閾値は、装置上で実行可能なアプリケーションのクラスに固有の静的な値である、請求項8に記載の方法。
  10. 前記閾値は、前記装置の処理条件に応答して動的に設定される、請求項9に記載の方法。
  11. 同一メモリ値の前記シーケンスを、メモリ値の単一インスタンスと、前記シーケンスの長さを識別するメタデータタグとに置き換えて、圧縮データシーケンスを生成する段階、をさらに有する、請求項10に記載の方法。
  12. 前記メタデータタグを、前記メモリ値の前記単一インスタンスに隣接して格納する段階、をさらに有する、請求項11に記載の方法。
  13. 前記メモリセグメントに向けられたデータ圧縮解除命令を受信する段階、および、
    前記データ圧縮解除命令に応答して、前記メモリ値の前記単一インスタンスを、前記メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置き換える段階、をさらに有する、請求項12に記載の方法。
  14. 要求元から、前記メモリセグメントに向けられた読み取り処理を受信する段階、および、
    前記読み取り処理に応答して、前記要求元に前記圧縮データシーケンスを伝送する段階、をさらに有する、請求項13に記載の方法。
  15. メモリセグメントに対するデータ圧縮命令を受信する手順、および、
    前記データ圧縮命令に応答して、同一メモリ値のシーケンスが閾値を超える長さを有するとの判断に応答して、同一メモリ値の前記シーケンスを圧縮する手順、をコンピュータに実行させるプログラム。
  16. 前記閾値は、装置上で実行可能なアプリケーションのクラスに固有の静的な値である、請求項15に記載のプログラム。
  17. 前記閾値は、前記装置の処理条件に応答して動的に設定される、請求項16に記載のプログラム。
  18. 同一メモリ値の前記シーケンスを、メモリ値の単一インスタンスと、前記シーケンスの長さを識別するメタデータタグとに置き換えて、圧縮データシーケンスを生成する手順を実行するように構成する1または複数の命令をさらに前記コンピュータに実行させる、請求項17に記載のプログラム。
  19. 前記メタデータタグを、前記メモリ値の前記単一インスタンスに隣接して格納する手順を実行するように構成する1または複数の命令をさらに前記コンピュータに実行させる、請求項18に記載のプログラム。
  20. 前記メモリセグメントに向けられたデータ圧縮解除命令を受信する手順、および、
    前記データ圧縮解除命令に応答して、前記メモリ値の前記単一インスタンスを、前記メタデータタグで指定された長さに等しい長さを有する同一メモリ値のシーケンスに置き換える手順、を実行するように構成する1または複数の命令をさらに前記コンピュータに実行させる、請求項19に記載のプログラム。
  21. 要求元から、前記メモリセグメントに向けられた読み取り処理を受信する手順、および、
    前記読み取り処理に応答して、前記要求元に前記圧縮データシーケンスを伝送する手順、をさらに前記コンピュータに実行させる、請求項20に記載のプログラム。
  22. 請求項15から21のいずれか1項に記載のプログラムを格納した非一時的機械可読媒体。
JP2021544544A 2019-03-15 2020-03-14 装置、方法、プログラム、及び、機械可読媒体 Active JP7420440B2 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201962819435P 2019-03-15 2019-03-15
US201962819337P 2019-03-15 2019-03-15
US201962819361P 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/022840 WO2020190802A1 (en) 2019-03-15 2020-03-14 Compression techniques

Publications (2)

Publication Number Publication Date
JP2022523912A true JP2022523912A (ja) 2022-04-27
JP7420440B2 JP7420440B2 (ja) 2024-01-23

Family

ID=70277485

Family Applications (5)

Application Number Title Priority Date Filing Date
JP2021544279A Pending JP2022523909A (ja) 2019-03-15 2020-03-14 マルチタイルメモリ管理
JP2021544544A Active JP7420440B2 (ja) 2019-03-15 2020-03-14 装置、方法、プログラム、及び、機械可読媒体
JP2021544339A Active JP7107482B2 (ja) 2019-03-15 2020-03-14 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
JP2022104265A Active JP7414894B2 (ja) 2019-03-15 2022-06-29 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
JP2023223711A Pending JP2024041826A (ja) 2019-03-15 2023-12-28 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2021544279A Pending JP2022523909A (ja) 2019-03-15 2020-03-14 マルチタイルメモリ管理

Family Applications After (3)

Application Number Title Priority Date Filing Date
JP2021544339A Active JP7107482B2 (ja) 2019-03-15 2020-03-14 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
JP2022104265A Active JP7414894B2 (ja) 2019-03-15 2022-06-29 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
JP2023223711A Pending JP2024041826A (ja) 2019-03-15 2023-12-28 ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット

Country Status (10)

Country Link
US (24) US20220138895A1 (ja)
EP (9) EP3938914A1 (ja)
JP (5) JP2022523909A (ja)
KR (2) KR102596790B1 (ja)
CN (15) CN113508362A (ja)
BR (1) BR112021016111A2 (ja)
DE (4) DE112020000850T5 (ja)
ES (2) ES2965299T3 (ja)
PL (2) PL3938912T3 (ja)
WO (15) WO2020190813A1 (ja)

Families Citing this family (75)

* 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
CN109891908A (zh) 2016-11-29 2019-06-14 英特尔公司 用于毫米波机架互连的技术
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
EP3938914A1 (en) 2019-03-15 2022-01-19 INTEL Corporation Dynamic memory reconfiguration
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
KR20210135998A (ko) 2019-03-15 2021-11-16 인텔 코포레이션 매트릭스 가속기 아키텍처를 위한 희소 최적화
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
US11563745B2 (en) 2020-06-12 2023-01-24 Baidu Usa Llc Method for data protection in a data processing cluster with policy-based partition
US11687629B2 (en) * 2020-06-12 2023-06-27 Baidu Usa Llc Method for data protection in a data processing cluster with authentication
US11847501B2 (en) 2020-06-12 2023-12-19 Baidu Usa Llc Method for data protection in a data processing cluster with partition
US11687376B2 (en) 2020-06-12 2023-06-27 Baidu Usa Llc Method for data protection in a data processing cluster with dynamic partition
US11393250B2 (en) * 2020-06-21 2022-07-19 Actimize Ltd. Sentiment analysis of content using expression recognition
KR20210157624A (ko) * 2020-06-22 2021-12-29 삼성전자주식회사 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템
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
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
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
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
US11615320B1 (en) 2020-06-30 2023-03-28 Cadence Design Systems, Inc. Method, product, and apparatus for variable precision weight management for neural networks
GB2596864A (en) * 2020-07-10 2022-01-12 Graphcore Ltd Machine learning computer
JP2022016795A (ja) * 2020-07-13 2022-01-25 富士通株式会社 情報処理装置、情報処理プログラムおよび情報処理方法
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
CN112395062A (zh) * 2020-11-17 2021-02-23 深圳前海微众银行股份有限公司 任务处理方法、装置、设备及计算机可读存储介质
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 한국전자통신연구원 메모리 접근 방법 및 장치
US20220414815A1 (en) * 2021-06-24 2022-12-29 Intel Corporation Sort middle architecture for multiple graphics processing units
US20220414967A1 (en) * 2021-06-24 2022-12-29 Intel Corporation Out-of-order pixel shading and rasterization
US20230004385A1 (en) * 2021-06-30 2023-01-05 Advanced Micro Devices, Inc. Accelerated processing device and method of sharing data for machine learning
US20220351326A1 (en) * 2021-07-06 2022-11-03 Intel Corporation Direct memory writes by network interface of a graphics processing unit
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
WO2023069384A1 (en) * 2021-10-19 2023-04-27 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
US11989142B2 (en) 2021-12-10 2024-05-21 Samsung Electronics Co., Ltd. Efficient and concurrent model execution
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
WO2024006501A1 (en) * 2022-06-30 2024-01-04 Advanced Micro Devices, Inc. Dynamic memory reconfiguration
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
GB2622074A (en) * 2022-09-01 2024-03-06 Advanced Risc Mach Ltd Cache systems
TWI818732B (zh) * 2022-09-16 2023-10-11 新唐科技股份有限公司 記憶體裝置及其操作方法
CN115391124B (zh) * 2022-10-27 2023-03-21 瀚博半导体(上海)有限公司 一种面向图形芯片功耗测试的方法及装置
CN115756384B (zh) * 2022-11-22 2024-05-17 海光信息技术股份有限公司 张量计算单元及使用方法、数据处理装置及操作方法
CN116755779B (zh) * 2023-08-18 2023-12-05 腾讯科技(深圳)有限公司 循环间隔的确定方法、装置、设备、存储介质及芯片
CN117130663B (zh) * 2023-09-19 2024-06-11 摩尔线程智能科技(北京)有限责任公司 一种指令读取方法及l2指令缓存、电子设备和存储介质

Family Cites Families (402)

* 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
CN1107597A (zh) 1994-02-24 1995-08-30 吴乾弥 管线式与心跳式及单指令多数据流的阵列处理架构及方法
US5673407A (en) 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
GB2306271B (en) 1994-06-22 1997-07-16 Microsoft Corp Data analyser
US5805475A (en) 1995-02-10 1998-09-08 International Business Machines Corporation Load-store unit and method of loading and storing single-precision floating-point registers in a double-precision architecture
US5777629A (en) 1995-03-24 1998-07-07 3Dlabs Inc. Ltd. Graphics subsystem with smart direct-memory-access operation
US5651137A (en) 1995-04-12 1997-07-22 Intel Corporation Scalable cache attributes for an input/output bus
US5983257A (en) 1995-12-26 1999-11-09 Intel Corporation System for signal processing using multiply-add operations
US5940311A (en) 1996-04-30 1999-08-17 Texas Instruments Incorporated Immediate floating-point operand reformatting in a microprocessor
US5917741A (en) 1996-08-29 1999-06-29 Intel Corporation Method and apparatus for performing floating-point rounding operations for multiple precisions using incrementers
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
US6856320B1 (en) 1997-11-25 2005-02-15 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US7102646B1 (en) 1997-11-25 2006-09-05 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6253311B1 (en) 1997-11-29 2001-06-26 Jp First Llc Instruction set for bi-directional conversion and transfer of integer and floating point data
US6049865A (en) 1997-12-18 2000-04-11 Motorola, Inc. Method and apparatus for implementing floating point projection instructions
US6260008B1 (en) 1998-01-08 2001-07-10 Sharp Kabushiki Kaisha Method of and system for disambiguating syntactic word multiples
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
US20060143396A1 (en) 2004-12-29 2006-06-29 Mason Cabot Method for programmer-controlled cache line eviction policy
US20060179092A1 (en) 2005-02-10 2006-08-10 Schmookler Martin S System and method for executing fixed point divide operations using a floating point multiply-add pipeline
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
US20090030960A1 (en) 2005-05-13 2009-01-29 Dermot Geraghty 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
US20070030277A1 (en) 2005-08-08 2007-02-08 Via Technologies, Inc. Method for processing vertex, triangle, and pixel graphics data packets
US7659899B2 (en) 2005-08-08 2010-02-09 Via Technologies, Inc. System and method to manage data processing stages of a logical graphics pipeline
US20070074008A1 (en) 2005-09-28 2007-03-29 Donofrio David D Mixed mode floating-point pipeline with extended functions
CN1952979B (zh) 2005-10-14 2012-06-27 威盛电子股份有限公司 多重图形处理器系统及方法
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
GB2447428A (en) 2007-03-15 2008-09-17 Linear Algebra Technologies Lt Processor having a trivial operand register
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
US8108361B2 (en) 2008-07-31 2012-01-31 Microsoft Corporation Efficient column based data encoding for large-scale data storage
US8041856B2 (en) 2008-09-30 2011-10-18 Lsi Corporation Skip based control logic for first in first out buffer
US8219757B2 (en) 2008-09-30 2012-07-10 Intel Corporation Apparatus and method for low touch cache management
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
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
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
CN106775592B (zh) 2011-12-23 2019-03-12 英特尔公司 处理器、用于计算系统的方法、机器可读介质和计算机系统
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
US10359972B2 (en) 2012-08-31 2019-07-23 Sandisk Technologies Llc Systems, methods, and interfaces for adaptive persistence
US10073656B2 (en) 2012-01-27 2018-09-11 Sandisk Technologies Llc Systems and methods for storage virtualization
US20140052965A1 (en) 2012-02-08 2014-02-20 Uzi Sarel 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
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
US9558006B2 (en) 2012-12-20 2017-01-31 Intel Corporation Continuous automatic tuning of code regions
US10289418B2 (en) 2012-12-27 2019-05-14 Nvidia Corporation Cooperative thread array granularity context switch during trap handling
US9384368B2 (en) * 2012-12-28 2016-07-05 Intel Corporation Instruction and logic for mid-level caching of random numbers distributed to multiple units
US9317251B2 (en) 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations
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
US10133677B2 (en) 2013-03-14 2018-11-20 Nvidia Corporation Opportunistic migration of memory pages in a unified virtual memory system
US9940286B2 (en) * 2013-03-14 2018-04-10 Nvidia Corporation PCIE traffic tracking hardware in a unified virtual memory system
US9478066B2 (en) 2013-03-14 2016-10-25 Nvidia Corporation Consistent vertex snapping for variable resolution rendering
US9525586B2 (en) 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
KR20140126189A (ko) 2013-04-22 2014-10-30 삼성전자주식회사 프로세서의 멀티 실행 모드 지원 장치 및 방법
GB2551291B (en) 2013-05-23 2018-02-14 Linear Algebra Tech Limited Corner detection
EP3690641B1 (en) 2013-05-24 2024-02-21 Coherent Logix Incorporated Processor having multiple parallel address generation units
US9436600B2 (en) 2013-06-11 2016-09-06 Svic No. 28 New Technology Business Investment L.L.P. Non-volatile memory storage for multi-channel memory system
US9378127B2 (en) 2013-06-21 2016-06-28 Intel Corporation Dynamic memory page policy
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 (en) 2014-04-22 2016-08-17 DataVard GmbH Method and system for archiving digital data
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
JP2016057831A (ja) 2014-09-09 2016-04-21 株式会社東芝 浮動小数点演算装置、及び情報処理システム
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
US20160092118A1 (en) 2014-09-26 2016-03-31 Intel Corporation Memory write management in a computer system
US9928076B2 (en) 2014-09-26 2018-03-27 Intel Corporation Method and apparatus for unstructured control flow for SIMD execution engine
CN104407836B (zh) 2014-10-14 2017-05-31 中国航天科技集团公司第九研究院第七七一研究所 利用定点乘法器进行级联乘累加运算的装置和方法
JP2016091242A (ja) 2014-10-31 2016-05-23 富士通株式会社 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム
US20160124709A1 (en) 2014-11-04 2016-05-05 International Business Machines Corporation Fast, energy-efficient exponential computations in simd architectures
US10282227B2 (en) 2014-11-18 2019-05-07 Intel Corporation Efficient preemption for graphics processors
US9491112B1 (en) 2014-12-10 2016-11-08 Amazon Technologies, Inc. Allocating processor resources based on a task identifier
US9811468B2 (en) 2014-12-14 2017-11-07 Via Alliance Semiconductor Co., Ltd. Set associative cache memory with heterogeneous replacement policy
WO2016097812A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
US9910785B2 (en) * 2014-12-14 2018-03-06 Via Alliance Semiconductor Co., Ltd Cache memory budgeted by ways 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
US20190073582A1 (en) 2015-09-23 2019-03-07 Yi Yang Apparatus and method for local quantization for convolutional neural networks (cnns)
US10423354B2 (en) 2015-09-23 2019-09-24 Advanced Micro Devices, Inc. Selective data copying between memory modules
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
CN108601409A (zh) * 2016-02-12 2018-09-28 东洋纺株式会社 服装型电子设备及服装型电子设备的制造方法
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
US10390114B2 (en) 2016-07-22 2019-08-20 Intel Corporation Memory sharing for physical accelerator resources in a 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
US10242311B2 (en) 2016-08-11 2019-03-26 Vivante Corporation Zero coefficient skipping convolution neural network engine
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10467195B2 (en) 2016-09-06 2019-11-05 Samsung Electronics Co., Ltd. Adaptive caching replacement manager with dynamic updating granulates and partitions for shared flash-based storage system
US20180107602A1 (en) * 2016-10-13 2018-04-19 Intel Corporation Latency and Bandwidth Efficiency Improvement for Read Modify Write When a Read Operation is Requested to a Partially Modified Write Only Cacheline
US11315018B2 (en) 2016-10-21 2022-04-26 Nvidia Corporation Systems and methods for pruning neural networks for resource efficient inference
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
US10521389B2 (en) 2016-12-23 2019-12-31 Ati Technologies Ulc Method and apparatus for accessing non-volatile memory as byte addressable memory
US20180183577A1 (en) 2016-12-28 2018-06-28 Intel Corporation Techniques for secure message authentication with unified hardware acceleration
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US11416281B2 (en) 2016-12-31 2022-08-16 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10146738B2 (en) 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US20180210836A1 (en) * 2017-01-24 2018-07-26 Microsoft Technology Licensing, Llc Thermal and reliability based cache slice migration
US10394719B2 (en) 2017-01-25 2019-08-27 Samsung Electronics Co., Ltd. Refresh aware replacement policy for volatile memory cache
US11397687B2 (en) 2017-01-25 2022-07-26 Samsung Electronics Co., Ltd. Flash-integrated high bandwidth memory appliance
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
US10861216B2 (en) 2017-04-07 2020-12-08 Intel Corporation Ray tracing apparatus and method for memory access and register operations
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
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
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
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
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
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
WO2018213636A1 (en) 2017-05-17 2018-11-22 Google Llc Performing matrix multiplication in hardware
US20180336136A1 (en) 2017-05-17 2018-11-22 Qualcomm Incorporated Input/output-coherent Look-ahead Cache Access
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
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
US10984049B2 (en) 2017-06-27 2021-04-20 Nvidia Corporation Performing traversal stack compression
US10331558B2 (en) 2017-07-28 2019-06-25 Apple Inc. Systems and methods for performing memory compression
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10545860B2 (en) 2017-08-10 2020-01-28 Samsung Electronics Co., Ltd. Intelligent high bandwidth memory appliance
US10394456B2 (en) 2017-08-23 2019-08-27 Micron Technology, Inc. On demand memory page size
US11232531B2 (en) 2017-08-29 2022-01-25 Intel Corporation Method and apparatus for efficient loop processing in a graphics hardware front end
US10691572B2 (en) 2017-08-30 2020-06-23 Nvidia Corporation Liveness as a factor to evaluate memory vulnerability to soft errors
US10503507B2 (en) 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
US10725740B2 (en) 2017-08-31 2020-07-28 Qualcomm Incorporated Providing efficient multiplication of sparse matrices in matrix-processor-based devices
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
GB2569271B (en) 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
GB2569274B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization amongst processor tiles
GB2569098B (en) 2017-10-20 2020-01-08 Graphcore Ltd Combining states of multiple threads in a multi-threaded processor
GB2569844B (en) 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip
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
EP3789871B1 (en) 2017-12-27 2023-06-07 Cambricon Technologies Corporation Limited Integrated circuit chip device
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
US11693627B2 (en) 2018-02-09 2023-07-04 Deepmind Technologies Limited Contiguous sparsity pattern neural networks
US10755201B2 (en) 2018-02-14 2020-08-25 Lucid Circuit, Inc. Systems and methods for data collection and analysis at the edge
JP2019148969A (ja) 2018-02-27 2019-09-05 富士通株式会社 行列演算装置、行列演算方法および行列演算プログラム
US20190278600A1 (en) 2018-03-09 2019-09-12 Nvidia Corporation Tiled compressed sparse matrix format
US20190278593A1 (en) 2018-03-09 2019-09-12 Nvidia Corporation Accelerating linear algebra kernels for any processor architecture
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
EP3777166A1 (en) 2018-04-13 2021-02-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
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US10620951B2 (en) 2018-06-22 2020-04-14 Intel Corporation Matrix multiplication acceleration of sparse matrices using column folding and squeezing
CN113190791A (zh) 2018-08-06 2021-07-30 华为技术有限公司 矩阵的处理方法、装置及逻辑电路
EP3608828A1 (de) 2018-08-09 2020-02-12 Olympus Soft Imaging Solutions GmbH Verfahren zur bereitstellung eines auswertungsmittels für wenigstens ein optisches anwendungssystem einer mikroskopischen anwendungstechnologie
KR20200022118A (ko) 2018-08-22 2020-03-03 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
US20190042457A1 (en) 2018-08-22 2019-02-07 Intel Corporation Cache (partition) size determination method and apparatus
US11833681B2 (en) 2018-08-24 2023-12-05 Nvidia Corporation Robotic control system
US10846241B2 (en) 2018-08-29 2020-11-24 Vmware, Inc. Score-based cache admission and eviction
US11093248B2 (en) 2018-09-10 2021-08-17 International Business Machines Corporation Prefetch queue allocation protection bubble in a processor
US10817426B2 (en) 2018-09-24 2020-10-27 Arm Limited Prefetching techniques
US10769070B2 (en) 2018-09-25 2020-09-08 Arm Limited Multiple stride prefetching
US20200098725A1 (en) 2018-09-26 2020-03-26 Intel Corporation Semiconductor package or semiconductor package structure with dual-sided interposer and memory
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
US11615034B2 (en) 2018-09-28 2023-03-28 Intel Corporation Translation lookaside buffer to implement adapative page size
US11307863B1 (en) 2018-10-08 2022-04-19 Nvidia Corporation Graphics processing unit systems for performing data analytics operations in data science
EP3855367A4 (en) 2018-10-09 2022-06-29 Huawei Technologies Co., Ltd. Operation accelerator, processing method, and related device
US11263529B2 (en) 2018-10-10 2022-03-01 Google Llc Modifying machine learning models to improve locality
GB2578097B (en) 2018-10-15 2021-02-17 Advanced Risc Mach Ltd Cache control circuitry and methods
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US20200175074A1 (en) 2018-12-04 2020-06-04 Vmware, Inc. Tree structure aware cache eviction policy
GB2579590B (en) 2018-12-04 2021-10-13 Imagination Tech Ltd Workload repetition redundancy
US11893470B2 (en) 2018-12-06 2024-02-06 MIPS Tech, LLC Neural network processing using specialized data representation
US11615307B2 (en) 2018-12-06 2023-03-28 MIPS Tech, LLC Neural network data computation using mixed-precision
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
US10937225B2 (en) 2018-12-28 2021-03-02 Intel Corporation Cell primitive for unstructured volume rendering
US10909741B2 (en) 2018-12-28 2021-02-02 Intel Corporation Speculative execution of hit and intersection shaders on programmable ray tracing architectures
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
US11550971B1 (en) 2019-01-18 2023-01-10 X Development Llc Physics simulation on machine-learning accelerated hardware platforms
KR20200091623A (ko) 2019-01-23 2020-07-31 삼성전자주식회사 위노그라드 변환에 기반한 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US11106600B2 (en) 2019-01-24 2021-08-31 Advanced Micro Devices, Inc. Cache replacement based on translation lookaside buffer evictions
US10725923B1 (en) 2019-02-05 2020-07-28 Arm Limited Cache access detection and prediction
US10915461B2 (en) 2019-03-05 2021-02-09 International Business Machines Corporation Multilevel cache eviction management
KR20210135998A (ko) 2019-03-15 2021-11-16 인텔 코포레이션 매트릭스 가속기 아키텍처를 위한 희소 최적화
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US20220114108A1 (en) 2019-03-15 2022-04-14 Intel Corporation Systems and methods for cache optimization
EP3938914A1 (en) 2019-03-15 2022-01-19 INTEL Corporation Dynamic memory reconfiguration
US10630606B1 (en) 2019-03-18 2020-04-21 Brightways Corporation System, method and architecture for data center network switching
KR102151444B1 (ko) 2019-04-11 2020-09-03 주식회사 실리콘아츠 Mimd 기반의 t&i 스케줄링을 이용한 레이 트레이싱 장치
US11036642B2 (en) 2019-04-26 2021-06-15 Intel Corporation Architectural enhancements for computing systems having artificial intelligence logic disposed locally to memory
US11126404B2 (en) 2019-05-20 2021-09-21 Nxp B.V. Random number generator using multiple entropy sources and a method for generating random numbers
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
US20220351326A1 (en) 2021-07-06 2022-11-03 Intel Corporation Direct memory writes by network interface of a graphics processing unit
US20240111609A1 (en) 2022-09-30 2024-04-04 Intel Corporation Synchronization utilizing local team barriers for thread team processing

Also Published As

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

Similar Documents

Publication Publication Date Title
JP7420440B2 (ja) 装置、方法、プログラム、及び、機械可読媒体
US11145105B2 (en) Multi-tile graphics processor rendering
JP2021077343A (ja) 画像のノイズ除去のための、適応型変形可能カーネル予測ネットワーク
US11455770B2 (en) Method and apparatus for encoding based on shading rates
EP4024223A1 (en) Systems and methods for cache optimization
EP3889788B1 (en) Gpu memory saving by buffer sharing among similar instances on same gpu
CN111694601A (zh) 使用细粒度依赖性检查加速同步并基于可用共享存储器空间调度优化的图形系统和方法
WO2020190422A1 (en) Preemptive page fault handling
US20210256754A1 (en) Method and apparatus for encoding based on importance values
JP2021077342A (ja) メモリ効率を改善するための起動及びカーネルの動的な分割
US20220207293A1 (en) Method and apparatus of spatially sparse convolution module for visual rendering and synthesis
EP3938906A1 (en) Systems and methods for exploiting queues and transitional storage for improved low-latency high-bandwidth on-die data retrieval
EP4124961A1 (en) Efficient compressed verbatim copy
EP4109386A1 (en) 64-bit two-dimensional block load with transpose
EP4020384A1 (en) Method and apparatus of spatially sparse convolution module for visual rendering and synthesis

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231031

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231127

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20231212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240105

R150 Certificate of patent or registration of utility model

Ref document number: 7420440

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150