DE102020124932A1 - Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel - Google Patents
Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel Download PDFInfo
- Publication number
- DE102020124932A1 DE102020124932A1 DE102020124932.2A DE102020124932A DE102020124932A1 DE 102020124932 A1 DE102020124932 A1 DE 102020124932A1 DE 102020124932 A DE102020124932 A DE 102020124932A DE 102020124932 A1 DE102020124932 A1 DE 102020124932A1
- Authority
- DE
- Germany
- Prior art keywords
- graphics
- threads
- processor
- local
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 187
- 238000000034 method Methods 0.000 title claims abstract description 142
- 230000009183 running Effects 0.000 claims abstract description 23
- 230000008569 process Effects 0.000 claims description 63
- 239000000872 buffer Substances 0.000 claims description 48
- 238000011156 evaluation Methods 0.000 claims description 2
- 230000015654 memory Effects 0.000 description 163
- 238000012549 training Methods 0.000 description 105
- 238000010801 machine learning Methods 0.000 description 99
- 230000006870 function Effects 0.000 description 86
- 238000013528 artificial neural network Methods 0.000 description 79
- 238000003860 storage Methods 0.000 description 54
- 239000013598 vector Substances 0.000 description 38
- 238000013527 convolutional neural network Methods 0.000 description 36
- 238000007667 floating Methods 0.000 description 34
- 238000009877 rendering Methods 0.000 description 33
- 238000007906 compression Methods 0.000 description 29
- 230000006835 compression Effects 0.000 description 29
- 230000013016 learning Effects 0.000 description 29
- 239000011159 matrix material Substances 0.000 description 29
- 238000012360 testing method Methods 0.000 description 29
- 239000000758 substrate Substances 0.000 description 26
- 238000010586 diagram Methods 0.000 description 24
- 238000004891 communication Methods 0.000 description 23
- 230000006854 communication Effects 0.000 description 23
- 230000001133 acceleration Effects 0.000 description 16
- 239000012634 fragment Substances 0.000 description 16
- 238000004422 calculation algorithm Methods 0.000 description 15
- 230000009467 reduction Effects 0.000 description 15
- 108091006146 Channels Proteins 0.000 description 14
- 238000013135 deep learning Methods 0.000 description 14
- 239000000523 sample Substances 0.000 description 14
- 238000013461 design Methods 0.000 description 13
- 230000008449 language Effects 0.000 description 13
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 12
- 238000005520 cutting process Methods 0.000 description 12
- 230000006837 decompression Effects 0.000 description 11
- 230000009021 linear effect Effects 0.000 description 11
- 238000013439 planning Methods 0.000 description 11
- 238000013459 approach Methods 0.000 description 10
- 238000013473 artificial intelligence Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 10
- 238000007726 management method Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 238000012546 transfer Methods 0.000 description 9
- 230000004913 activation Effects 0.000 description 8
- 239000004744 fabric Substances 0.000 description 8
- 239000000203 mixture Substances 0.000 description 8
- 210000002569 neuron Anatomy 0.000 description 8
- 230000004044 response Effects 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000004519 manufacturing process Methods 0.000 description 7
- 238000013507 mapping Methods 0.000 description 7
- 230000036961 partial effect Effects 0.000 description 7
- 230000002093 peripheral effect Effects 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 230000003190 augmentative effect Effects 0.000 description 6
- 230000001965 increasing effect Effects 0.000 description 6
- 239000000463 material Substances 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 5
- 239000003086 colorant Substances 0.000 description 5
- 238000010276 construction Methods 0.000 description 5
- 230000004438 eyesight Effects 0.000 description 5
- 238000013178 mathematical model Methods 0.000 description 5
- 230000001603 reducing effect Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 230000001629 suppression Effects 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000001976 improved effect Effects 0.000 description 4
- 230000033001 locomotion Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000000306 recurrent effect Effects 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 238000012935 Averaging Methods 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000007600 charging Methods 0.000 description 3
- 230000009850 completed effect Effects 0.000 description 3
- 238000013144 data compression Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000005265 energy consumption Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 238000013139 quantization Methods 0.000 description 3
- 239000000700 radioactive tracer Substances 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 238000012384 transportation and delivery Methods 0.000 description 3
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 2
- 239000004593 Epoxy Substances 0.000 description 2
- 102100035964 Gastrokine-2 Human genes 0.000 description 2
- 241000282414 Homo sapiens Species 0.000 description 2
- 101001075215 Homo sapiens Gastrokine-2 Proteins 0.000 description 2
- 101710092887 Integrator complex subunit 4 Proteins 0.000 description 2
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 2
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 2
- 102100037075 Proto-oncogene Wnt-3 Human genes 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000008713 feedback mechanism Effects 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000003058 natural language processing Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012946 outsourcing Methods 0.000 description 2
- 238000003909 pattern recognition Methods 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- CCEKAJIANROZEO-UHFFFAOYSA-N sulfluramid Chemical group CCNS(=O)(=O)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)C(F)(F)F CCEKAJIANROZEO-UHFFFAOYSA-N 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 101100534223 Caenorhabditis elegans src-1 gene Proteins 0.000 description 1
- 102000020897 Formins Human genes 0.000 description 1
- 108091022623 Formins Proteins 0.000 description 1
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 101100496858 Mus musculus Colec12 gene Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000002146 bilateral effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000003518 caustics Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000002059 diagnostic imaging Methods 0.000 description 1
- 238000005315 distribution function Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 210000000887 face Anatomy 0.000 description 1
- 239000000945 filler Substances 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 230000009975 flexible effect Effects 0.000 description 1
- 239000000446 fuel Substances 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 230000004313 glare Effects 0.000 description 1
- 210000004209 hair Anatomy 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005305 interferometry Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000035699 permeability Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 230000002040 relaxant effect Effects 0.000 description 1
- 230000003578 releasing effect Effects 0.000 description 1
- 210000001525 retina Anatomy 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 239000000779 smoke Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013456 study Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000029305 taxis Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
- 229910001868 water Inorganic materials 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/25—Output arrangements for video game devices
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
- A63F13/355—Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an MPEG-stream for transmitting to a mobile phone or a thin client
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/30—Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
- A63F13/35—Details of game servers
- A63F13/358—Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/50—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
- A63F2300/53—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
- A63F2300/534—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Abstract
Eine Vorrichtung und ein Verfahren zum Planen von Strängen auf lokalen und fernen Verarbeitungsbetriebsmitteln. Beispielsweise umfasst eine Ausführungsform einer Vorrichtung: einen lokalen Grafikprozessor zum Ausführen von Strängen einer Anwendung; eine Grafikprozessorvirtualisierungs-Schaltungsanordnung und/oder -Logik zum Erzeugen einer virtualisierten Repräsentation eines lokalen Prozessors; einen Planer zum Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; wobei der Planer die erste Teilmenge von Strängen auf dem lokalen Grafikprozessor und die zweite Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, planen soll; und der lokale Grafikprozessor die ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln kombinieren soll, um einen Bildframe zu rendern
Description
- Hintergrund
- Gebiet der Erfindung
- Diese Erfindung bezieht sich im Allgemeinen auf das Gebiet der Grafikprozessoren. Insbesondere bezieht sich die Erfindung auf eine Vorrichtung und ein Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und Cloud-basierter Grafikverarbeitungsbetriebsmittel.
- Beschreibung des Standes der Technik
- Während Fern-Grafikserver Bildframes viel schneller als die Spielvorrichtung eines typischen Anwenders rendern können, gibt es andere Herausforderungen, die das Echtzeit-Spiel-Anwendererlebnis beeinträchtigen können, wie z. B. die durch das Netz verursachte Latenz und Qualitätsschwankungen aufgrund der Datenkomprimierung. Für bestimmte Arten von Spielen, wie z. B. Spiele mit erweiterter Realität (AR-Spiele) und virtueller Realität (VR-Spiele), sind leistungsstarke Netzplattformen erforderlich, um die benötigte Latenz zu erzielen.
- Figurenliste
- Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden genauen Beschreibung in Zusammenschau mit den folgenden Zeichnungen erzielt werden:
-
1 ist ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor, der einen oder mehrere Prozessorkerne und Grafikprozessoren aufweist; -
2A-D zeigen Rechensysteme und Grafikprozessoren, die von hierin beschriebenen Ausführungsformen bereitgestellt werden; -
3A-C sind Blockdiagramme von zusätzlichen Grafikprozessor- und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden; -
4 ist ein Blockdiagramm einer Ausführungsform einer Grafikverarbeitungsmaschine für einen Grafikprozessor; -
5A-B zeigen eine Strangausführungslogik, die eine Anordnung von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern verwendet wird; -
6 zeigt eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform; -
7 ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat gemäß einigen Ausführungsformen darstellt; -
8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors, der eine Grafikpipeline, eine Medienpipeline, eine Anzeigemaschine, eine Strangausführungslogik und eine Renderausgabepipeline aufweist; -
9A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat gemäß einer Ausführungsform darstellt; -
9B ist ein Blockdiagramm, das eine Grafikprozessorbefehlsfolge gemäß einer Ausführungsform darstellt; -
10 zeigt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform; -
11A-B zeigen ein beispielhaftes IP-Kern-Entwicklungssystem, das verwendet werden kann, um eine integrierte Schaltung und eine beispielhafte Baugruppenanordnung herzustellen; -
11C-D zeigen andere beispielhafte Baugruppenanordnungen; -
12 zeigt eine beispielhaftes integrierte Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform hergestellt werden kann; -
13-14 zeigen beispielhafte Grafikprozessoren und Kerne, die in einem Ein-Chip-System (SoC) integriert sind; -
15A-B zeigen Ausführungsformen einer Architektur, die virtualisierte oder „Geister“-GPUs aufweist; -
16 zeigt eine weitere Ausführungsform einer Architektur, die virtualisierte oder „Geister“-GPUs aufweist; -
17 zeigt die der Ausführung zugeordnete Zeitvorgabe unter Verwendung von drei Geister-GPUs und einer physischen GPU; -
18 zeigt eine Ausführungsform zum Erzeugen einer Geister-GPU und zum Aufzählen der Geister-GPU; -
19 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung; -
20A-B zeigen Anordnungen von Geister- und physischen GPUs und xPUs; -
21 zeigt eine Ausführungsform einer Architektur zum Durchführen eines anfänglichen Trainings einer Maschinenlernarchitektur; -
22 zeigt eine Ausführungsform, in der eine maschinell lernende Maschine während der Laufzeit fortlaufend trainiert und aktualisiert wird; -
23 zeigt eine weitere Ausführungsform darstellt, bei der eine maschinell lernende Maschine während der Laufzeit fortlaufend trainiert und aktualisiert wird; -
24A-B zeigen Ausführungsformen, in denen Maschinenlerndaten in einem Netz gemeinsam genutzt werden; und -
25 zeigt eine Ausführungsform eines Verfahrens zum Trainieren einer maschinell lernenden Maschine; -
26 zeigt eine Ausführungsform, in der Knoten Geisterbereichsdaten austauschen, um verteilte Entrauschungsoperationen durchzuführen; -
27 zeigt eine Ausführungsform einer Architektur, in der Bildrender- und Entrauschungsoperationen über mehrere Knoten verteilt werden; -
28 zeigt zusätzliche Einzelheiten einer Architektur zum verteilten Rendern und Entrauschen; -
29 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung; -
30 zeigt eine Ausführungsform eines Maschinenlernverfahrens; -
31 zeigt mehrere miteinander verbundene Allzweck-Grafikprozessoren; -
32 zeigt einen Satz von faltenden Schichten und vollständig verbundenen Schichten für eine Maschinenlernimplementierung; -
33 zeigt eine Ausführungsform einer faltenden Schicht; -
34 zeigt ein Beispiel eines Satzes miteinander verbundener Knoten in einer Maschinenlernimplementierung; -
35 zeigt eine Ausführungsform eines Trainingsrahmens, in dem ein neuronales Netz unter Verwendung eines Trainingsdatensatzes lernt; -
36A zeigt Beispiele von Modellparallelität und Datenparallelität; -
36B zeigt ein Beispiel eines Ein-Chip-Systems (SoC); -
37 zeigt ein Beispiel einer Verarbeitungsarchitektur, die Strahlverfolgungskerne und Tensorkerne umfasst; -
38 zeigt ein Beispiel eines Strahlbündels; -
39 zeigt eine Ausführungsform einer Vorrichtung zum Durchführen einer Strahlbündelverfolgung; -
40 zeigt ein Beispiel einer Strahlbündelhierarchie; -
41 zeigt ein Verfahren zum Durchführen einer Strahlbündelverfolgung; -
42 zeigt ein Beispiel einer verteilten Strahlverfolgungsmaschine; -
43-44 zeigen ein Beispiel einer Komprimierung, die in einem Strahlverfolgungssystem durchgeführt wird; -
45 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung; -
46 zeigt eine beispielhafte Hybrid-Strahlverfolgungsvorrichtung; -
47 zeigt Beispiele von Stapeln, die für Strahlverfolgungsoperationen verwendet werden; -
48 zeigt zusätzliche Einzelheiten für eine Ausführungsform einer Hybrid-Strahlverfolgungsvorrichtung; -
49 zeigt ein Beispiel einer Begrenzungsvolumenhierarchie; -
50 zeigt ein Beispiel eines Speichers für Aufrufstapel und eines Durchlaufzustände; -
51 zeigt eine Ausführungsform eines Verfahrens zum Durchqueren und Schneiden; -
52A-B zeigen eine Ausführungsform, in der mehrere Abfertigungszyklen erforderlich sind, um bestimmte Schattierer auszuführen; -
53 zeigt eine Ausführungsform, in der ein einzelner Abfertigungszyklus mehrere Schattierer ausführt; -
54 zeigt eine weitere Ausführungsform, in der ein einzelner Abfertigungszyklus mehrere Schattierer ausführt; -
55 zeigt eine Ausführungsform einer Architektur zum Ausführen von Strahlverfolgungsbefehlen; und -
56 zeigt eine Ausführungsform eines Verfahrens zum Ausführen von Strahlverfolgungsbefehlen innerhalb eines Strangs. - Genaue Beschreibung
- In der folgenden Beschreibung werden zu Erklärungszwecken zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der nachfolgend beschriebenen Ausführungsformen der Erfindung zu bieten. Es wird jedoch für Fachleute ersichtlich sein, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind wohlbekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um eine Verunklarung der zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung zu vermeiden.
- Beispielhafte Grafikprozessorarchitekturen und Datentypen
- Systemüberblick
-
1 ist ein Blockdiagramm eines Verarbeitungssystems100 gemäß einer Ausführungsform. Das System100 kann in einem Einzelprozessor-Desktop-System, einem Multiprozessor-Arbeitsplatz-System oder einem Serversystem mit einer großen Anzahl von Prozessoren102 oder Prozessorkernen107 verwendet werden. In einer Ausführungsform ist das System100 eine Verarbeitungsplattform, die in einer integrierten Ein-Chip-System-Schaltung (SoC-Schaltung) zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen, z. B. in Internet-der-Dinge-Vorrichtungen (IoT-Vorrichtungen) mit drahtgebundener oder drahtloser Verbindungsfähigkeit zu einem lokalen Netz oder Weitbereichsnetz. - In einer Ausführungsform kann das System
100 Folgendes umfassen, damit gekoppelt oder darin integriert sein: eine serverbasierte Spielplattform; eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole; eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole. In einigen Ausführungsformen ist das System100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Rechenvorrichtung oder einer mit dem Internet verbundenen Mobilvorrichtung wie eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem100 kann zudem Folgendes umfassen, damit gekoppelt sein oder darin integriert sein: eine am Körper tragbare Vorrichtung wie beispielsweise eine am Körper tragbare Smartwatch-Vorrichtung; intelligente Brillen oder Kleidung, die mit Funktionen erweiterter Realität (AR) oder virtueller Realität (VR) erweitert wurden, um visuelle, hörbare oder taktile Ausgaben zu liefern, um visuelle, hörbare oder taktile Erlebnisse der realen Welt zu ergänzen oder auf andere Weise Text, Audio, Grafik, Video, holographische Bilder oder holographisches Video oder taktile Rückkopplung zu liefern; eine andere Vorrichtung für erweiterte Realität (AR-Vorrichtung); oder eine andere Vorrichtung für virtuelle Realität (VR-Vorrichtung). In einigen Ausführungsformen umfasst das Verarbeitungssystem100 eine Fernseh- oder Beistellkasten-Vorrichtung oder ist Teil davon. In einer Ausführungsform kann das System100 ein selbstfahrendes Fahrzeug wie etwa einen Bus, einen Sattelschlepper, ein Auto, ein Motorrad oder ein Elektrorad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination davon) umfassen, damit koppeln oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System100 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten. - In einigen Ausführungsformen umfassen der eine oder die mehreren Prozessoren
102 jeweils einen oder mehrere Prozessorkerne107 , um Befehle zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- und Anwendersoftware durchführen. In einigen Ausführungsformen ist jeder des einen oder der mehreren Prozessorkerne107 dazu ausgelegt, einen bestimmten Befehlssatz109 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz109 eine Datenverarbeitung mit komplexem Befehlssatz (CISC), eine Datenverarbeitung mit reduziertem Befehlssatz (RISC) oder eine Datenverarbeitung mit sehr langem Befehlswort (VLIW) ermöglichen. Ein oder mehrere Prozessorkerne107 können jeweils einen anderen Befehlssatz109 verarbeiten, der Befehle enthalten kann, um die Emulation von anderen Befehlssätzen zu ermöglichen. Der Prozessorkern107 kann zudem andere Verarbeitungsvorrichtungen wie einen Digitalsignalprozessor (DSP) umfassen. - In einigen Ausführungsformen umfasst der Prozessor
102 einen Cache-Speicher104 . Abhängig von der Architektur kann der Prozessor102 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache aufweisen. In einer Ausführungsform wird der Cache-Speicher von den verschiedenen Komponenten des Prozessors102 gemeinsam verwendet. In einer Ausführungsform verwendet der Prozessor102 auch einen externen Cache (beispielsweise einen Ebene-3-Cache (L3-Cache) oder einen Cache letzter Ebene (LLC)) (nicht gezeigt), der von den Prozessorkernen107 unter Verwendung bekannter Cache-Kohärenz-Techniken gemeinsam verwendet werden kann. Zusätzlich kann ein Registersatz106 in dem Prozessor102 enthalten sein, der verschiedene Arten von Registern zum Speichern von verschiedenen Arten von Daten enthalten kann (beispielsweise ein Ganzzahlregister, ein Gleitkommaregister, ein Statusregister und ein Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register spezifisch für den Entwurf des Prozessors102 sein können. - In einigen Ausführungsformen sind der eine oder die mehreren Prozessoren
102 mit einem oder mehreren Schnittstellenbussen110 gekoppelt, um Kommunikationssignale wie Adressen, Daten oder Steuersignale zwischen dem Prozessor102 und anderen Komponenten in dem System100 zu übertragen. Der Schnittstellenbus110 kann in einer Ausführungsform ein Prozessorbus sein, beispielsweise eine Version des Direktmedienschnittstellen-Busses (DMI-Busses). Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheriekomponenten-Zwischenverbindungs-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In einer Ausführungsform umfassen der eine oder die mehreren Prozessoren102 einen integrierten Speichercontroller116 und einen Plattformcontroller-Hub130 . Der Speichercontroller116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems100 , während der Plattformcontroller-Hub (PCH)130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bietet. - Die Speichervorrichtung
120 kann eine Vorrichtung mit dynamischem Direktzugriffsspeicher (DRAM), eine Vorrichtung mit statischem Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder eine andere Speichervorrichtung mit geeignetem Leistungsvermögen, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung120 als Systemspeicher für das System100 fungieren, um Daten122 und Befehle121 für die Verwendung beim Ausführen eines Prozesses oder einer Anwendung durch den Prozessor102 zu speichern. Der Speichercontroller116 koppelt auch mit einem optionalen externen Grafikprozessor118 , der mit dem einen oder den mehreren Grafikprozessoren108 in den Prozessoren102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger112 unterstützt werden, der ein Koprozessor ist, der dazu ausgelegt sein kann, einen speziellen Satz von Grafik-, Medien- oder Rechenoperationen auszuführen. Beispielsweise ist der Beschleuniger112 in einer Ausführungsform ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um maschinelles Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen zusammen mit dem Grafikprozessor108 durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger119 anstelle oder abgestimmt mit dem Beschleuniger112 verwendet werden. - In einigen Ausführungsformen kann eine Anzeigevorrichtung
111 mit dem einen oder mehreren Prozessoren102 verbunden sein. Die Anzeigevorrichtung111 kann eine oder mehrere von einer internen Anzeigevorrichtung, wie etwa in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung111 eine am Kopf befestigte Anzeige (HMD) wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in Anwendungen der virtuellen Realität (VR-Anwendungen) oder Anwendungen der erweiterten Realität (AR-Anwendungen) sein. - In einigen Ausführungsformen ermöglicht es der Plattformcontroller-Hub
130 Peripheriegeräten, eine Verbindung zu der Speichervorrichtung120 und dem Prozessor102 über einen Hochgeschwindigkeits-E/A-Bus herzustellen. Die E/A-Peripheriegeräte umfassen einen Audiocontroller146 , einen Netzcontroller134 , eine Firmware-Schnittstelle128 , einen drahtlosen Sendeempfänger126 , Berührungssensoren125 , eine Datenspeichervorrichtung124 (z. B. nichtflüchtigen Speicher, flüchtigen Speicher, ein Festplattenlaufwerk, Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.), ohne darauf beschränkt zu sein. Die Datenspeichervorrichtung124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriekomponentenbus wie einen Peripheriekomponenten-Zwischenverbindungs-Bus (z. B. PCI, PCI Express) verbunden sein. Die Berührungssensoren125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. Der drahtlose Sendeempfänger126 kann ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilfunknetz-Sendeempfänger wie etwa ein 3G-, 4G- oder 5G-Langzeitzentwicklungs-Sendeempfänger (LTE-Sendeempfänger) sein. Die Firmware-Schnittstelle128 ermöglicht die Kommunikation mit System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netzcontroller134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen koppelt ein Hochleistungs-Netzcontroller (nicht gezeigt) mit dem Schnittstellenbus110 . Der Audiocontroller146 ist in einer Ausführungsform ein Mehrkanal-Hochdefinitions-Audiocontroller. In einer Ausführungsform umfasst das System100 einen optionalen Alt-E/A-Controller140 zum Koppeln von Alt-Vorrichtungen (z. B. Personal-System-2-Vorrichtungen (PS/2-Vorrichtungen)) an das System. Der Plattformcontroller-Hub130 kann auch mit einem oder mehreren Controllern des universellen seriellen Busses (USB-Controllern)142 verbunden sein, um Eingabevorrichtungen wie Kombinationen aus Tastatur und Maus143 , eine Kamera144 oder andere USB-Eingabevorrichtungen anzuschließen. - Es versteht sich, dass das gezeigte System
100 beispielhaft und nicht einschränkend ist, weil andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz des Speichercontrollers116 und des Plattformcontroller-Hubs130 in einen diskreten externen Grafikprozessor wie etwa den externen Grafikprozessor118 integriert sein. In einer Ausführungsform kann der Plattformcontroller-Hub130 und/oder der Speichercontroller116 außerhalb des einen oder der mehreren Prozessoren102 sein. Zum Beispiel kann das System100 einen externen Speichercontroller116 und Plattformcontroller-Hub130 umfassen, der als ein Speichercontroller-Hub und Peripheriekomponenten-Controller-Hub innerhalb eines System-Chipsatzes, der mit dem einen oder den mehreren Prozessoren102 in Kommunikation steht, ausgelegt sein kann. - Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie etwa CPUs, Speicher und andere Komponenten angeordnet sind, für eine erhöhte thermische Leistungsfähigkeit ausgelegt. In einigen Beispielen befinden sich Verarbeitungskomponenten wie beispielsweise die Prozessoren auf einer Oberseite eines Schlittens, während Nahspeicher wie z. B. DIMMs auf einer Unterseite des Schlittens angeordnet ist. Als Ergebnis der verbesserten Luftströmung, die durch diese Gestaltung geboten wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln arbeiten als in typischen Systemen, wodurch die Leistungsfähigkeit erhöht wird. Ferner sind die Schlitten so ausgelegt, dass sie blind mit Leistungs- und Datenkommunikationskabeln in einem Rack zusammenpassen, was ihre Fähigkeit verbessert, schnell entfernt, aufgerüstet, wieder eingebaut und/oder ersetzt zu werden. Ebenso sind einzelne Komponenten, die sich auf den Schlitten befinden, wie etwa Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, aufgrund ihres erhöhten Abstands voneinander so ausgelegt, dass sie leicht aufgerüstet werden können. In der veranschaulichenden Ausführungsform weisen die Komponenten zudem Hardwarebestätigungsmerkmale auf, um ihre Authentizität nachzuweisen.
- Ein Datenzentrum kann eine einzelne Netzarchitektur („Fabric“) verwenden, die mehrere andere Netzarchitekturen einschließlich Ethernet und Omni-Path unterstützt. Die Schlitten können über Lichtleitfasern, die eine höhere Bandbreite und eine geringere Latenz als eine typische verdrillte Doppelleitung (z. B. Kategorie
5 , Kategorie5e , Kategorie6 usw.) bieten, mit Switches gekoppelt sein. Aufgrund der Zwischenverbindungen und der Netzarchitektur mit hoher Bandbreite und niedriger Latenz kann das Datenzentrum im Einsatz Betriebsmittel wie beispielsweise Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger für künstliche Intelligenz usw.) und Datenspeicherlaufwerke, die physisch getrennt sind, zusammenlegen und sie für Rechenbetriebsmittel (z. B. Prozessoren) nach Bedarf bereitstellen, so dass die Rechenbetriebsmittel auf die zusammengelegte Betriebsmitteln so zugreifen können, als wären sie lokal. - Eine Leistungsversorgung oder -quelle kann dem System
100 oder einer hierin beschriebenen Komponente oder einem hierin beschriebenen System Spannung und/oder Stromstärke liefern. In einem Beispiel umfasst die Leistungsversorgung einen Wechselstrom-zu-Gleichstrom-Adapter zum Anschließen an eine Wandsteckdose. Solche Wechselstromleistung kann eine Leistungsquelle mit erneuerbarer Energie (z. B. Solarenergie) sein. In einem Beispiel umfasst die Leistungsquelle eine Gleichstromquelle, beispielsweise einen externen Wechselstrom-Gleichstrom-Umsetzer. In einem Beispiel umfasst eine Leistungsquelle oder eine Leistungsversorgung drahtlose Ladehardware zum Laden über die Nähe zu einem Ladefeld. In einem Beispiel kann die Leistungsquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarleistungsversorgung oder eine Brennstoffzellenquelle umfassen. -
2A-2D zeigen Rechensysteme und Grafikprozessoren, die von hierin beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von2A-2D mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt. -
2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors200 mit einem oder mehreren Prozessorkernen202A-202N , einem integrierten Speichercontroller214 und einem integrierten Grafikprozessor208 . Der Prozessor200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns202N umfassen, die durch die gestrichelten Kästen dargestellt sind. Jeder der Kerne202A-202N umfasst eine oder mehrere interne Cache-Einheiten204A-204N . In einer Ausführungsform hat jeder Kern auch auf eine oder mehrere gemeinsam genutzte Cache-Einheiten206 Zugriff. Die internen Cache-Einheiten204A-204N und die gemeinsam genutzten Cache-Einheiten206 stellen eine Cache-Speicherhierarchie innerhalb des Prozessors200 dar. Die Cache-Speicherhierarchie kann mindestens eine Ebene eines Befehls- und Daten-Caches in jedem Kern und eine oder mehrere Ebenen von mehrere Caches einer mittleren Ebene wie z. B. Ebene2 (L2), Ebene3 (L3), Ebene4 (L4) oder Caches anderer Ebenen umfassen, wobei die höchste Ebene des Caches vor dem externen Speicher als der LLC klassifiziert ist. In einigen Ausführungsformen hält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten206 und204A-204N aufrecht. - In einigen Ausführungsformen kann der Prozessor
200 auch einen Satz von einem oder mehreren Buscontrollereinheiten216 und einen Systemagentenkern210 umfassen. Der eine oder die mehreren Buscontrollereinheiten216 verwalten einen Satz von Peripheriebussen wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern210 bietet Verwaltungsfunktionen für die verschiedenen Prozessorkomponenten. In einigen Ausführungsformen umfasst der Systemagentenkern210 einen oder mehrere integrierte Speichercontroller214 , die den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) verwalten. - In einigen Ausführungsformen weisen ein oder mehrere der Kerne
202A-202N eine Unterstützung für simultane Mehrsträngigkeit [multi-threading] auf. In solchen Ausführungsformen umfasst der Systemagentenkern210 Komponenten zum Koordinieren und Betreiben der Kerne202A-202N während der Mehrstrangverarbeitung. Der Systemagentenkern210 kann zusätzlich eine Leistungssteuereinheit (PCU) umfassen, die Logik und die Komponenten enthält, um den Leistungsaufnahmezustand der Kerne202A-202N und des Grafikprozessors208 zu regulieren. - In einigen Ausführungsformen umfasst der Prozessor
200 zusätzlich einen Grafikprozessor208 , um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Grafikprozessor208 mit dem Satz von gemeinsam genutzten Cache-Einheiten206 und dem Systemagentenkern210 einschließlich des einen oder der mehreren integrierte Speichercontroller214 gekoppelt. In einigen Ausführungsformen umfasst der Systemagentenkern210 einen Anzeigecontroller211 , um die Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu auszugeben. In einigen Ausführungsformen kann der Anzeigecontroller211 zudem ein separates Modul sein, das mit dem Grafikprozessor über mindestens eine Zwischenverbindung gekoppelt ist, oder kann in den Grafikprozessor208 integriert sein. - In einigen Ausführungsformen wird eine ringbasierte Zwischenverbindungseinheit
212 verwendet, um die internen Komponenten des Prozessors200 zu koppeln. Jedoch kann eine alternative Zwischenverbindungseinheit wie beispielsweise eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik gut bekannt sind, verwendet werden. In einigen Ausführungsformen ist der Grafikprozessor208 mit der Ringzwischenverbindung212 über einen E/A-Link 213 gekoppelt. - Der beispielhafte E/A-Link 213 stellt mindestens eine von mehreren Arten von E/A-Zwischenverbindungen dar, darunter eine Baugruppen-E/A-Zwischenverbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten ermöglicht, und ein eingebettetes Hochleistungs-Speichermodul
218 wie etwa ein eDRAM-Modul. In einigen Ausführungsformen verwenden jeder der Kerne202A-202N und der Grafikprozessor208 die eingebetteten Speichermodule218 als gemeinsamen Cache letzter Ebene. - In einigen Ausführungsformen sind die Verarbeitungskerne
202A-202N homogene Kerne, die die gleiche Befehlssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Verarbeitungskerne202A-202N heterogen in Bezug auf die Befehlssatzarchitektur (ISA), wobei einer oder mehrere der Kerne202A-202N einen ersten Befehlssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Befehlssatzes oder einen anderen Befehlssatz ausführt. In einer Ausführungsform sind die Prozessorkerne202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einer relativ höheren Leistungsaufnahme mit einem oder mehreren Leistungskernen mit einer geringeren Leistungsaufnahme gekoppelt sind. In einer Ausführungsform sind die Prozessorkerne202A-202N hinsichtlich der Rechenleistung heterogen. Zusätzlich kann der Prozessor200 auf einem oder mehreren Chips oder als eine integrierte Ein-Chip-System-Schaltung (SOC-Schaltung) mit den dargestellten Komponenten zusätzlich zu den anderen Komponenten implementiert sein. -
2B ist ein Blockdiagramm von Hardwarelogik eines Grafikprozessorkerns219 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von2B , die die gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin aufweisen, können auf eine beliebige Art und Weise, die mit der an einer anderen Stelle hierin beschriebenen vergleichbar ist, wirken oder funktionieren, ohne darauf beschränkt zu sein. Der Grafikprozessorkern219 , der gelegentlich als ein Kern-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern219 ist beispielhaft für einen Grafikkern-Slice und ein hierin beschriebener Grafikprozessor kann basierend auf gewünschten Leistungsaufnahme- und Rechenleistungshüllkurven mehrere Grafikkern-Slices umfassen. Jeder Grafikprozessorkern219 kann einen Block mit fester Funktion230 umfassen, der mit mehreren Teilkernen221A-221F gekoppelt ist, die auch als Unter-Slices bezeichnet werden, die modulare Blöcke von Allzwecklogik und Logik mit fester Funktion umfassen. - In einigen Ausführungsformen umfasst der Block mit fester Funktion
230 eine Geometrie-Pipeline/Pipeline mit fester Funktion231 , die von allen Teilkernen in dem Grafikprozessor219 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessorimplementierungen mit niedrigerer Rechenleistung und/oder mit niedrigerer Leistungsaufnahme. In verschiedenen Ausführungsformen umfasst die Geometrie-Pipeline/Pipeline mit fester Funktion231 eine 3D-Pipeline mit fester Funktion (z. B. die 3D-Pipeline312 wie in3 und4 nachstehend beschrieben), eine Video-Frontend-Einheit, einen Strangersteller und Strangabfertiger und einen Verwalter eines vereinheitlichten Rücklaufpuffers, der vereinheitlichte Rücklaufpuffer (wie den vereinheitlichten Rücklaufpuffer418 von4 wie nachstehend beschrieben) verwaltet. - In einer Ausführungsform umfasst der Block mit fester Funktion
230 zudem eine Grafik-SoC-Schnittstelle232 , einen Grafikmikrocontroller233 und eine Medienpipeline234 . Die Grafik-SoC-Schnittstelle232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern219 und anderen Prozessorkernen innerhalb einer integrierten Ein-Chip-System-Schaltung bereit. Der Grafikmikrocontroller233 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessors219 einschließlich Strangabfertigung, Planung und Vorwegnahme zu verwalten. Die Medienpipeline234 (z. B. die Medienpipeline316 von3 und4 ) umfasst Logik zum Unterstützen des Decodierens, Codierens, Vorverarbeitens und/oder Nachverarbeitens von Multimedia-Daten einschließlich Bild- und Videodaten. Die Medienpipeline234 implementiert Medienoperationen über Anforderungen zum Berechnen oder Abtasten von Logik innerhalb der Teilkerne221-221F . - In einer Ausführungsform ermöglicht es die SoC-Schnittstelle
232 dem Grafikprozessorkern219 , mit Allzweckanwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC einschließlich Speicherhierarchieelementen wie einem gemeinsam genutzten Cache-Speicher letzter Ebene, dem System-RAM und/oder eingebettetem DRAM auf dem Chip oder in der Baugruppe zu kommunizieren. Die SoC-Schnittstelle232 kann auch eine Kommunikation mit Vorrichtungen mit fester Funktion innerhalb des SoC wie etwa Kamera-Bildgebungs-Pipelines ermöglichen und ermöglicht die Verwendung von globalen Speicheratomen, die zwischen dem Grafikprozessorkern219 und CPUs innerhalb des SoC geteilt werden können, und/oder implementiert diese. Die SoC-Schnittstelle232 kann auch Leistungsverwaltungssteuerungen für den Grafikprozessorkern219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikprozessorkerns219 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle232 den Empfang von Befehlspuffern von einem Befehls-Streamer und globalen Strangabfertiger, die dazu ausgelegt sind, Befehle und Anweisungen zu jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors zu liefern. Die Befehle und Anweisungen können zu der Medienpipeline234 gesendet werden, wenn Medienoperationen durchzuführen sind, oder zu einer Geometrie-Pipeline und Pipeline mit fester Funktion (z. B. der Geometrie-Pipeline und Pipeline mit fester Funktion231 , der Geometrie-Pipeline und Pipeline mit fester Funktion237 ) gesendet werden, wenn Grafikverarbeitungsoperationen durchzuführen sind. - Der Grafikmikrocontroller
233 kann dazu ausgelegt sein, verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern219 durchzuführen. In einer Ausführungsform kann der Grafikmikrocontroller233 eine Grafik- und/oder Rechenarbeitslastplanung auf den verschiedenen parallelen Grafikmaschinen innerhalb der Ausführungseinheitsanordnungen (EU-Anordnungen)222A-222F , 224A-224F innerhalb der Teilkerne221A-221F durchführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC ausgeführt wird, das den Grafikprozessorkern219 umfasst, Arbeitslasten eine von mehreren Grafikprozessor-Türklingeln übermitteln, wodurch eine Planungsoperation auf der geeigneten Grafikmaschine aufgerufen wird. Planungsoperationen umfassen ein Bestimmen, welche Arbeitslast als Nächstes ausgeführt werden soll, ein Übermitteln einer Arbeitslast an einen Befehls-Streamer, ein Vorwegnehmen vorhandener Arbeitslasten, die auf einer Maschine ausgeführt werden, ein Überwachen des Fortschritts einer Arbeitslast und ein Benachrichtigen von Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Grafikmikrocontroller233 auch Zustände mit niedriger Leistungsaufnahme oder Ruhezustände für den Grafikprozessorkern219 unterstützen, wodurch dem Grafikprozessorkern219 die Fähigkeit gegeben wird, Register innerhalb des Grafikprozessorkerns219 über Übergänge zu Zuständen mit niedriger Leistungsaufnahme hinweg unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen. - Der Grafikprozessorkern
219 kann mehr oder weniger als die veranschaulichten Teilkerne221A-221F aufweisen, und zwar bis zu N modulare Teilkerne. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern219 auch gemeinsam genutzte Funktionslogik235 , gemeinsam genutzten Speicher und/oder Cache-Speicher236 , eine Geometrie-Pipeline/Pipeline mit fester Funktion237 sowie zusätzliche Logik mit fester Funktion238 zum Beschleunigen verschiedener Grafik- und Rechenverarbeitungsoperationen umfassen. Die gemeinsam genutzte Funktionslogik235 kann Logikeinheiten umfassen, die mit der gemeinsam genutzten Funktionslogik420 von4 (z. B. Abtaster-, Mathematik- und/oder Zwischenstrangkommunikations-Logik) verbunden sind und die von allen N Teilkernen innerhalb des Grafikprozessorkerns219 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher236 kann ein Cache letzter Ebene für den Satz von N Teilkernen221A-221F innerhalb des Grafikprozessorkerns219 sein und kann auch als gemeinsam genutzter Speicher dienen, der mehreren Teilkernen zugänglich ist. Die Geometrie-Pipeline/Pipeline mit fester Funktion237 kann anstelle der Geometrie-Pipeline/Pipeline mit fester Funktion231 innerhalb des Blocks mit fester Funktion230 enthalten sein und kann die gleichen oder ähnliche Logikeinheiten umfassen. - In einer Ausführungsform umfasst der Grafikprozessorkern
219 eine zusätzliche Logik mit fester Funktion238 , die verschiedene Beschleunigungslogik mit fester Funktion zur Verwendung durch den Grafikprozessorkern219 umfassen kann. In einer Ausführungsform umfasst die zusätzliche Logik mit fester Funktion238 eine zusätzliche Geometrie-Pipeline zur Verwendung bei Nur-Positions-Schattierung. Bei Nur-Positions-Schattierung sind zwei Geometrie-Pipelines vorhanden, die vollständige Geometrie-Pipeline innerhalb der Geometrie-Pipeline/Pipeline mit fester Funktion238 ,231 und eine Ausschuss-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die innerhalb der zusätzlichen Logik mit fester Funktion238 enthalten sein kann. In einer Ausführungsform ist die Ausschuss-Pipeline eine gekürzte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Ausschuss-Pipeline können verschiedene Instanzen der gleichen Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Nur-Positions-Schattierung kann lange Ausschuss-Läufe von verworfenen Dreiecken verbergen, wodurch es in einigen Fällen ermöglicht wird, dass die Schattierung früher abgeschlossen wird. Zum Beispiel und in einer Ausführungsform kann die Ausschuss-Pipeline-Logik innerhalb der zusätzlichen Logik mit fester Funktion238 Positionsschattierer parallel zu der Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Ausschuss-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterung und ein Rendern der Pixel in den Frame-Speicher durchzuführen. Die Ausschuss-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke aussortiert werden. Die vollständige Pipeline (die in diesem Fall als eine Replay-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die letztlich an die Rasterungsphase übergeben werden. - In einer Ausführungsform kann die zusätzliche Logik mit fester Funktion
238 auch Beschleunigungslogik für maschinelles Lernen wie Matrixmultiplikationslogik mit fester Funktion für Implementierungen, die Optimierungen für Training und Inferenz für maschinelles Lernen beinhalten, umfassen. - Innerhalb jedes Grafikteilkerns
221A-221F ist ein Satz von Ausführungsbetriebsmitteln enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Antwort auf Anforderungen von einer Grafik-Pipeline, einer Medienpipeline oder Schattiererprogrammen durchzuführen. Die Grafikteilkerne221A-221F umfassen mehrere EU-Anordnungen222A-222F ,224A-224F , Strangabfertigungs- und Zwischenstrangkommunikations-Logik (TD/IC-Logik)223A-223F , einen 3D-Abtaster (z. B. Textur-Abtaster) 225A-225F, einen Medienabtaster206A-206F , einen Schattiererprozessor227A-227F und einen gemeinsam genutzten lokalen Speicher (SLM)228A-228F . Die EU-Anordnungen222A-222F ,224A-224F umfassen jeweils mehrere Ausführungseinheiten, die Universalgrafikverarbeitungseinheiten sind, die dazu in der Lage sind, logische Gleitkomma- und Ganzzahl-/Festkommaoperationen für eine Grafik-, Medien- oder Rechenoperation einschließlich Grafik-, Medien- oder Rechen-Schattiererprogrammen durchzuführen. Die TD/IC-Logik223A-223F führt lokale Strangabfertigungs- und Strangsteuerungsoperationen für die Ausführungseinheiten innerhalb eines Teilkerns durch und ermöglicht eine Kommunikation zwischen Strängen, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Texturdaten oder andere auf 3D-Grafik bezogene Daten in einen Speicher lesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist, unterschiedlich lesen. Der Medienabtaster206A-206F kann ähnliche Leseoperationen basierend auf dem Typ und Format, der bzw. das Mediendaten zugeordnet ist, durchführen. In einer Ausführungsform kann jeder Grafikteilkern221A-221F abwechselnd einen vereinheitlichten 3D- und Medienabtaster umfassen. Stränge, die auf den Ausführungseinheiten innerhalb jedes der Teilkerne221A-221F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher228A-228F innerhalb jedes Teilkerns verwenden, um es zu ermöglichen, dass Stränge, die innerhalb einer Strang-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen Pools von chipinternem Speicher ausgeführt werden. -
2C zeigt eine Grafikverarbeitungseinheit (GPU)239 , die dedizierte Sätze von Grafikverarbeitungsbetriebsmitteln aufweist, die in Mehrkerngruppen240A-240N angeordnet sind. Obwohl nur die Einzelheiten einer einzelnen Mehrkerngruppe240A bereitgestellt sind, versteht es sich, dass die anderen Mehrkerngruppen240B-240N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsbetriebsmitteln ausgestattet sein können. - Wie es dargestellt ist, kann eine Mehrkerngruppe
240A einen Satz von Grafikkernen243 , einen Satz von Tensorkernen244 und einen Satz von Strahlverfolgungskernen245 umfassen. Ein Planer/Abfertiger241 plant die Grafikstränge zur Ausführung auf den verschiedenen Kernen243 ,244 ,245 und fertigt sie ab. Ein Satz von Registersätzen242 speichert Operandenwerte, die von den Kernen243 ,244 ,245 beim Ausführen der Grafikstränge verwendet werden. Diese können beispielsweise Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern gepackter Datenelemente (Ganzzahl- und/oder Gleitkommadatenelemente) und Kachelregister zum Speichern von Tensor-/Matrixwerten umfassen. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert. - Ein oder mehrere kombinierte Ebene-1-Caches (L1-Caches) und gemeinsam genutzte Speichereinheiten
247 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal in jeder Mehrkerngruppe240A . Eine oder mehrere Textureinheiten247 können auch verwendet werden, um Texturierungsoperationen wie Texturabbildung und -abtastung durchzuführen. Ein Ebene-2-Cache (L2-Cache) 253, der von allen oder einer Teilmenge der Multikerngruppen240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Befehle für mehrere gleichzeitige Grafikstränge. Wie es dargestellt ist, kann der L2-Cache 253 über mehreren Mehrkerngruppen240A-240N gemeinsam genutzt werden. Ein oder mehrere Speichercontroller248 koppeln die GPU239 mit einem Speicher249 , der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann. - Die Eingabe/Ausgabe-Schaltungsanordnung (E/A-Schaltungsanordnung)
250 koppelt die GPU239 mit einem oder mehreren E/A-Vorrichtungen252 wie beispielsweise Digitalsignalprozessoren (DSPs), Netzcontrollern oder Anwendereingabevorrichtungen. Eine chipinterne Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen252 mit der GPU239 und dem Speicher249 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs)251 der E/A-Schaltungsanordnung250 koppeln die E/A-Vorrichtungen252 direkt mit dem Systemspeicher249 . In einer Ausführungsform verwaltet die IOMMU251 mehrere Sätze von Seitentabellen, um virtuelle Adressen physischen Adressen in dem Systemspeicher249 zuzuordnen. In dieser Ausführungsform können die E/A-Vorrichtungen252 , CPU(s)246 und GPU(s)239 denselben virtuellen Adressraum gemeinsam nutzen. - In einer Implementierung unterstützt die IOMMU
251 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen zum Zuordnen von virtuellen Gast-/Grafikadressen zu physischen Gast-/Grafikadressen und einen zweiten Satz von Seitentabellen zum Zuordnen von physischen Gast-/Grafikadressen zu physischen System-/Hostadressen (z. B. in dem Systemspeicher249 ) verwalten. Die Basisadressen des ersten und zweiten Satzes von Seitentabellen können jeweils in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. so, dass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl dies in2C nicht dargestellt ist, kann jede(r) der Kerne243 ,244 ,245 und/oder Mehrkerngruppen240A-240N Übersetzungs-Nachschlagepuffer (TLBs) umfassen, um Übersetzungen von Gast virtuell zu Gast physisch, Übersetzungen von Gast physisch zu Host physisch und Übersetzungen von Gast virtuell zu Host physisch zwischenzuspeichern. - In einer Ausführungsform sind die CPUs
246 , GPUs239 und E/A-Vorrichtungen252 auf einem einzelnen Halbleiterchip und/oder einer Chipbaugruppe integriert. Der dargestellte Speicher249 kann auf demselben Chip integriert sein oder über eine chipexterne Schnittstelle mit den Speichercontrollern248 gekoppelt sein. In einer Implementierung umfasst der Speicher249 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere Speicher auf physischer Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind. - In einer Ausführungsform umfassen die Tensorkerne
244 mehrere Ausführungseinheiten, die speziell zum Ausführen von Matrixoperationen ausgelegt sind, die die grundlegende Rechenoperation sind, die zum Ausführen von Operationen tiefen Lernens verwendet wird. Beispielsweise können simultane Matrixmultiplikationsoperationen für das Training und die Inferenz neuronaler Netze verwendet werden. Die Tensorkerne244 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkomma mit halber Genauigkeit (z. B. 16 Bit), Ganzzahlwörtern (16 Bit), Bytes (8 Bit) und halben Bytes (4 Bit). In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, wobei möglicherweise Details aus mehreren Frames kombiniert werden, um ein qualitativ hochwertiges Endbild zu erstellen. - In Implementierungen tiefen Lernens können parallele Matrixmultiplikationsarbeiten zur Ausführung auf den Tensorkernen
244 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine signifikante Anzahl von Matrixpunktproduktoperationen. Um eine Innenproduktformulierung einer N×N×N-MatrixMultiplikation zu verarbeiten, können die Tensorkerne244 mindestens N Punktprodukt-Verarbeitungselemente aufweisen. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus werden N Punktprodukte verarbeitet. - Matrixelemente können abhängig von der speziellen Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Für die Tensorkerne
244 können unterschiedliche Genauigkeitsmodi spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Arbeitslasten verwendet wird (wie z. B. Inferenz-Arbeitslasten, die eine Quantisierung auf Bytes und Halbbytes tolerieren können). - In einer Ausführungsform beschleunigen die Strahlverfolgungskerne
245 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch für Nicht-Echtzeit-Strahlverfolgungs-Implementierungen. Insbesondere umfassen die Strahlverfolgungskerne245 eine Strahldurchquerungs-/Strahlschnitt-Schaltungsanordnung zum Durchführen eines Strahldurchquerung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven, die in den BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne245 können auch eine Schaltungsanordnung zum Durchführen von Tiefentests und Aussortieren (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Implementierung führen die Strahlverfolgungskerne245 Durchquerungs- und Schnittoperationen gemäß den hierin beschriebenen Bildentrauschungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen244 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne244 beispielsweise ein neuronales Netz für tiefes Lernen zum Durchführen der Entrauschung von durch die Strahlverfolgungskerne245 erzeugten Frames. Die CPU(s)246 , die Grafikkerne243 und/oder die Strahlverfolgungskerne245 können jedoch auch die gesamte Entrauschung oder einen Teil davon und/oder Algorithmen für tiefes Lernen implementieren. - Zudem kann wie oben beschrieben ein verteilter Ansatz zum Entrauschen verwendet werden, bei dem sich die GPU
239 in einer Rechenvorrichtung befindet, die über ein Netz oder eine Hochgeschwindigkeitszwischenverbindung mit anderen Rechenvorrichtungen verbunden ist. In dieser Ausführungsform teilen sich die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten für ein neuronales Netz, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für verschiedene Arten von Frames und/oder verschiedene Grafikanwendungen durchzuführen. - In einer Ausführungsform verarbeiten die Strahlverfolgungskerne
245 alle BVH-Durchquerungs- und Strahl-Primitiv-Schnittstellen, wodurch vermieden wird, dass die Grafikkerne243 mit Tausenden von Befehlen pro Strahl überlastet werden. In einer Ausführungsform umfasst jeder Strahlverfolgungskern245 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahl-Dreieck-Schnitt-Tests (z. B. schneidende Strahlen, die durchquert worden sind). Somit kann in einer Ausführungsform die Mehrkerngruppe240A einfach eine Strahlsonde starten und die Strahlverfolgungskerne245 führen unabhängig eine Strahldurchquerung und eine einen Strahlschnitt durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrere Treffer usw.) an den Strangkontext zurück. Die anderen Kerne243 ,244 werden zum Durchführen anderer Grafik- oder Berechnungsarbeit freigegeben, während die Strahlverfolgungskerne245 die Durchquerungs- und Schnittoperationen durchführen. - In einer Ausführungsform umfasst jeder Strahlverfolgungskern
245 eine Durchquerungseinheit zum Durchführen von BVH-Testoperationen und eine Schnitteinheit, die Strahl-Primitiv-Schnitt-Tests durchführt. Die Schnitteinheit erzeugt eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie an den entsprechenden Strang liefert. Während der Durchquerungs- und Schnittoperationen werden die Ausführungsbetriebsmittel der anderen Kerne (z. B. der Grafikkerne243 und der Tensorkerne244 ) freigegeben, um andere Formen der Grafikarbeit auszuführen. - In einer speziellen nachstehend beschriebenen Ausführungsform wird ein hybrider Ansatz zur Rasterung/Strahlverfolgung verwendet, bei dem die Arbeit unter den Grafikkernen
243 und den Strahlverfolgungskernen245 verteilt wird. - In einer Ausführungsform umfassen die Strahlverfolgungskerne
245 (und/oder andere Kerne243 ,244 ) Hardwareunterstützung für einen Strahlverfolgungsbefehlssatz wie etwa Microsofts DirectX-Strahlverfolgung (DXR), der einen DispatchRays-Befehl sowie Strahlerzeugungs-, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Schattierer, die die Zuweisung eindeutiger Sätze von Schattierern und Texturen für jedes Objekt ermöglichen. Eine weitere Strahlverfolgungsplattform, die von den Strahlverfolgungskernen245 , den Grafikkernen243 und den Tensorkernen244 unterstützt werden kann, ist Vulkan1.1.85 . Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind. - Im Allgemeinen können die verschiedenen Kerne
245 ,244 ,243 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, nächsten Treffer, beliebigen Treffer, Strahl-Primitiv-Schnitt, pro-Primitiv und hierarchische Begrenzungsrahmenkonstruktion, Fehltreffer, Besuch und Ausnahmen umfasst. Insbesondere umfasst eine Ausführungsform Strahlverfolgungsbefehle, um die folgenden Funktionen auszuführen: - Strahlerzeugung - Strahlerzeugungsbefehle können für jedes Pixel, jede Abtastung oder andere anwenderdefinierte Arbeitszuweisungen ausgeführt werden.
- Nächster Treffer - Ein Nächster-Treffer-Befehl kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
- Beliebiger Treffer - Ein Beliebiger-Treffer-Befehl ermittelt mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um möglicherweise einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
- Schnitt - Ein Schnittbefehl führt einen Strahl-Primitiv-Schnitt-Test durch und gibt ein Ergebnis aus.
- Pro-Primitiv-Begrenzungsrahmenkonstruktion - Dieser Befehl baut einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Aufbau einer neuen BVH- oder einer anderen Beschleunigungsdatenstruktur).
- Fehltreffer - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene verfehlt.
- Besuch - Gibt die Kindervolumen an, die ein Strahl durchqueren wird.
- Ausnahmen - Umfasst verschiedene Arten von Ausnahmebehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
-
2D ist ein Blockdiagramm einer Allzweck-Grafikverarbeitungseinheit (GPGPU)270 , die gemäß den hierin beschriebenen Ausführungsformen als Grafikprozessor und/oder Rechenbeschleuniger ausgelegt werden kann. Die GPGPU270 kann über einen oder mehrere System- und/oder Speicherbusse mit Host-Prozessoren (z. B. einer oder mehreren CPU(s)246 ) und dem Speicher271 ,272 verbunden sein. In einer Ausführungsform ist der Speicher271 ein Systemspeicher, der mit der einen oder den mehreren CPUs246 geteilt werden kann, während der Speicher272 ein Vorrichtungsspeicher ist, der der GPGPU270 zugeordnet ist. In einer Ausführungsform sind Komponenten innerhalb der GPGPU270 und der Vorrichtungsspeicher272 kann auf Speicheradressen abgebildet werden, auf die die eine oder die mehreren CPUs246 zugreifen können. Der Zugriff auf die Speicher271 und272 kann über einen Speichercontroller268 ermöglicht werden. In einer Ausführungsform umfasst der Speichercontroller268 einen internen Controller für direkten Speicherzugriff (DMA-Controller)269 oder kann Logik aufweisen, um Operationen auszuführen, die andernfalls von einem DMA-Controller ausgeführt würden. - Die GPGPU
270 weist mehrere Cache-Speicher einschließlich eines L2-Cache 253, eines L1-Cache254 , eines Befehls-Cache255 und eines gemeinsam genutzten Speichers256 , mindestens ein Teil dessen auch als Cache-Speicher partitioniert sein kann, auf. Die GPGPU270 weist auch mehrere Recheneinheiten260A-260N auf. Jede Recheneinheit260A-260N umfasst einen Satz von Vektorregistern261 , Skalarregistern262 , Vektorlogikeinheiten263 und Skalarlogikeinheiten264 . Die Recheneinheiten260A-260N können auch einen lokalen gemeinsam genutzten Speicher265 und einen Programmzähler266 umfassen. Die Recheneinheiten260A-260N können mit einem Konstant-Cache267 gekoppelt werden, der zum Speichern konstanter Daten verwendet werden kann. Dies sind Daten, die sich während der Ausführung des Kernel- oder Schattiererprogramms, das auf der GPGPU270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der Konstant-Cache267 ein Skalardaten-Cache und zwischengespeicherte Daten können direkt in die Skalarregister262 abgerufen werden. - Während des Betriebs können die eine oder die mehreren CPUs
246 Befehle in Register oder Speicher in der GPGPU270 schreiben, die einem zugänglichen Adressraum zugeordnet wurden. Die Befehlsprozessoren257 können die Befehle aus Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU270 verarbeitet werden. Ein Strangabfertiger258 kann dann verwendet werden, um Stränge an die Recheneinheiten260A-260N zu entsenden, um diese Befehle auszuführen. Jede Recheneinheit260A-260N kann Stränge unabhängig von den anderen Recheneinheiten ausführen. Zudem kann jede Recheneinheit260A-260N unabhängig für eine bedingte Berechnung konfiguriert werden und kann die Berechnungsergebnisse bedingt in den Speicher ausgeben. Die Befehlsprozessoren257 können die eine oder die mehreren CPUs246 unterbrechen, wenn die übermittelten Befehle abgeschlossen sind. -
3A-3C zeigen Blockdiagramme von zusätzlichen Grafikprozessoren und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von3A-3C mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt -
3A ist ein Blockdiagramm eines Grafikprozessors300 , der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in mehrere Prozessorkerne oder andere Halleitervorrichtungen wie etwa Speichervorrichtungen oder Netzvorrichtungen integriert ist, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und über Befehle, die in dem Prozessorspeicher platziert sind. In einigen Ausführungsformen umfasst der Grafikprozessor300 eine Speicherschnittstelle314 , um auf Speicher zuzugreifen. Die Speicherschnittstelle314 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zu Systemspeicher sein. - In einigen Ausführungsformen umfasst der Grafikprozessor
300 zudem einen Anzeigecontroller302 , um Anzeigeausgabedaten an eine Anzeigevorrichtung318 auszugeben. Der Anzeigecontroller302 umfasst Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und die Komposition von mehreren Schichten von Video- oder Anwenderschnittstellenelementen. Die Anzeigevorrichtung318 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung318 eine am Kopf angebrachte Anzeigevorrichtung wie etwa eine Anzeigevorrichtung für virtuelle Realität (VR-Anzeigevorrichtung) oder eine Anzeigevorrichtung für erweiterte Realität (AR-Anzeigevorrichtung). In einigen Ausführungsform umfasst der Grafikprozessor300 eine Video-Codec-Maschine306 zum Codieren, Decodieren oder Transcodieren von Medien in, aus oder zwischen einen oder mehreren Mediencodierungsformaten, einschließlich, aber nicht beschränkt auf, Formate der Expertengruppe für bewegte Bilder (MPEG) wie MPEG-2, Fortgeschrittene Videocodierformate (AVC) wie H.264/MPEG-4 AVC, H.265/HEVC, Allianz für offene Medien (AOMedia) VP8, VP9 sowie Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Formate der gemeinsamen Fotografieexpertengruppe (JPEG) wie JPEG und Motion JPEG (MJPEG). - In einigen Ausführungsformen umfasst der Grafikprozessor
300 eine Blockbildübertragungs-Maschine (BLIT-Maschine)304 , um zweidimensionale Rasterungs-Operationen (2D-Rasterungs-Operationen), die beispielsweise Bitgrenzen-Blockübertragungen umfassen, durchzuführen. Jedoch werden in einer Ausführungsform 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungsmaschine (GPE)310 durchgeführt. In einigen Ausführungsformen ist die GPE310 eine Rechenmaschine zum Ausführen von Grafikoperationen, die dreidimensionale Grafikoperationen (3D-Grafikoperationen) und Medienoperationen umfassen. - In einigen Ausführungsformen umfasst die GPE
310 eine 3D-Pipeline312 zum Durchführen von 3D-Operationen wie etwa dem Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die mit 3D-Grundformen (z. B. Rechteck, Dreieck usw.) arbeiten. Die 3D-Pipeline312 umfasst programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements erfüllen und/oder Ausführungsstränge zu einem 3D/Medien-Teilsystem315 erzeugen. Obwohl die 3D-Pipeline312 verwendet werden kann, um Medienoperationen auszuführen, umfasst eine Ausführungsform der GPE310 auch eine Medienpipeline316 , die speziell verwendet wird, um Medienoperationen wie beispielsweise Videonachbearbeitung und Bildverbesserung durchzuführen. - In einigen Ausführungsformen umfasst die Medienpipeline
316 Logikeinheiten, die eine feste Funktion aufweisen oder programmierbar sind, zum Durchführen einer oder mehrerer spezialisierter Medienoperationen wie einer Videodecodierbeschleunigung, einer Videoentschachtelung und einer Videocodierbeschleunigung anstelle oder im Auftrag der Video-Codec-Maschine306 . In einigen Ausführungsformen umfasst die Medienpipeline316 zusätzlich eine Strangerzeugungseinheit zum Erzeugen von Strängen für die Ausführung auf dem 3D/Medien-Teilsystem315 . Die erzeugten Stränge führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten in dem 3D/Medien-Teilsystem315 aus. - In einigen Ausführungsformen umfasst das 3D/Medien-Teilsystem
315 eine Logik zum Ausführen von Strängen, die von der 3D-Pipeline312 und der Medienpipeline316 erzeugt werden. In einer Ausführungsform senden die Pipelines Strangausführungsanforderungen an das 3D/Medien-Teilsystem315 , das eine Strangabfertigungslogik zum Zuteilen und Entsenden der verschiedenen Anforderungen an verfügbare Strangausführungsbetriebsmittel umfasst. Die Ausführungsbetriebsmittel umfassen eine Anordnung von Grafikausführungseinheiten, um die 3D- und Medien-Stränge zu verarbeiten. In einigen Ausführungsformen umfasst das 3D/Medien-Teilsystem315 einen oder mehrere interne Caches für Strangbefehle und -daten. In einigen Ausführungsformen umfasst das Teilsystem zudem einen gemeinsamen Speicher, der Register und adressierbaren Speicher umfasst, um Daten zwischen Strängen zu teilen und Ausgabedaten zu speichern. -
3B zeigt einen Grafikprozessor320 mit einer gekachelten Architektur gemäß den hierin beschriebenen Ausführungsformen. In einer Ausführungsform umfasst der Grafikprozessor320 einen Grafikverarbeitungsmaschinen-Cluster322 mit mehreren Instanzen der Grafikverarbeitungsmaschine310 von3A innerhalb einer Grafikmaschinenkachel310A-310D . Jede Grafikmaschinenkachel310A-310D kann über einen Satz von Kachelzwischenverbindungen323A-323F angeschlossen sein. Jede Grafikmaschinenkachel310A-310D kann auch über Speicherzwischenverbindungen325A-325D mit einem Speichermodul oder einer Speichervorrichtung326A-326D verbunden sein. Die Speichervorrichtungen326A-326D können eine beliebige Grafikspeichertechnologie verwenden. Beispielsweise können die Speichervorrichtungen326A-326D ein Speicher mit doppelter Datenrate (GDDR-Speicher) sein. Die Speichervorrichtungen326A-326D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM-Module), die mit ihrer jeweiligen Grafikmaschinenkachel310A-310D gemeinsam auf einem Chip sein können. In einer Ausführungsform sind die Speichervorrichtungen326A-326D gestapelte Speichervorrichtungen, die auf ihrer jeweiligen Grafikmaschinenkachel310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Grafikmaschinenkachel310A-310D und der zugehörige Speicher326A-326D auf getrennten Chiplets, die mit einem Basis-Chip oder Basissubstrat verbunden sind, wie es in11B-11D ausführlicher beschrieben ist. - Der Grafikverarbeitungsmaschinen-Cluster
322 kann eine Verbindung mit einer chipinternen oder baugruppeninternen Fabric-Zwischenverbindung324 herstellen. Die Fabric-Zwischenverbindung324 kann die Kommunikation zwischen den Grafikmaschinenkacheln310A-310D und Komponenten wie dem Video-Codec306 und einer oder mehreren Kopiermaschinen304 ermöglichen. Die Kopiermaschinen304 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen326A-326D und Speicher außerhalb des Grafikprozessors320 (z. B. Systemspeicher) zu verschieben. Die Fabric-Zwischenverbindung324 kann auch verwendet werden, um die Grafikmaschinenkacheln310A-310D miteinander zu verbinden. Der Grafikprozessor320 kann optional einen Anzeigecontroller302 umfassen, um eine Verbindung mit einer externen Anzeigevorrichtung318 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können der Anzeigecontroller302 und die Anzeigevorrichtung318 entfallen. - Der Grafikprozessor
320 kann über eine Hostschnittstelle328 eine Verbindung zu einem Hostsystem herstellen. Die Hostschnittstelle328 kann die Kommunikation zwischen dem Grafikprozessor320 , dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle328 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Hostsystemschnittstelle sein. -
3C zeigt einen Rechenbeschleuniger330 gemäß den hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor320 von3B aufweisen und ist für die Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster332 kann einen Satz von Rechenmaschinenkacheln340A-340D umfassen, die eine Ausführungslogik aufweisen, die für parallele oder vektorbasierte Allzweck-Rechenoperationen optimiert ist. In einigen Ausführungsformen umfassen die Rechenmaschinenkacheln340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere der Rechenmaschinenkacheln340A-340D eine Logik zum Durchführen einer Medienbeschleunigung aufweisen können. Die Rechenmaschinenkacheln340A-340D können über Speicherzwischenverbindungen325A-325D eine Verbindung zu dem Speicher326A-326D herstellen. Der Speicher326A-326D und die Speicherzwischenverbindungen325A-325D können eine ähnliche Technologie wie in dem Grafikprozessor320 aufweisen oder anders sein. Die Grafik-Rechenmaschinenkacheln340A-340D können auch über einen Satz von Kachelzwischenverbindungen323A-323F miteinander verbunden sein und können mit einer Fabric-Zwischenverbindung324 verbunden sein und/oder durch diese miteinander verbunden sein. In einer Ausführungsform umfasst der Rechenbeschleuniger330 einen großen L3-Cache336 , der als vorrichtungsweiter Cache ausgelegt sein kann. Der Rechenbeschleuniger330 kann auf ähnliche Weise wie der Grafikprozessor320 von3B auch über eine Hostschnittstelle328 eine Verbindung zu einem Hostprozessor und Speicher herstellen. - Grafikverarbeitungsmaschine
-
4 ist ein Blockdiagramm einer Grafikverarbeitungsmaschine410 für einen Grafikprozessor gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE)410 eine Version der GPE310 , die in3A gezeigt ist (sentence missing - 27/-7). Elemente von4 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt. Beispielsweise sind die 3D-Pipeline312 und die Medienpipeline316 von3A dargestellt. Die Medienpipeline316 ist in einigen Ausführungsformen der GPE410 optional und ist vielleicht nicht explizit in der GPE410 enthalten. Beispielsweise und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE410 gekoppelt. - In einigen Ausführungsformen ist die GPE
410 mit einem Befehls-Streamer403 gekoppelt, der einen Befehlsstrom an die 3D-Pipeline312 und/oder die Medienpipelines316 liefert. In einigen Ausführungsformen ist der Befehls-Streamer403 mit einem Speicher, der ein Systemspeicher sein kann, oder einem oder mehreren des internen Cache-Speichers und des gemeinsam genutzten Cache-Speichers gekoppelt. In einigen Ausführungsformen empfängt der Befehls-Streamer403 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline312 und/oder die Medienpipeline316 . Die Befehle sind Anweisungen, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline312 und die Medienpipeline316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer umfassen, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline312 können auch Verweise auf Daten enthalten, die im Speicher gespeichert sind, wie beispielsweise Vertex- und Geometriedaten für die 3D-Pipeline312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline316 , ohne darauf beschränkt zu sein. Die 3D-Pipeline312 und die Medienpipeline316 verarbeiten die Befehle und Daten durch Ausführen von Operationen über Logik in den jeweiligen Pipelines oder durch Versenden eines oder mehrerer Ausführungsstränge an eine Grafikkernanordnung414 . In einer Ausführungsform umfasst die Grafikkernanordnung414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e)415A , Grafikkern(e)415B ), wobei jeder Block einen oder mehrere Grafikkerne umfasst. Jeder Grafikkern umfasst einen Satz von Grafikausführungsbetriebsmitteln, die allgemeine und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie Texturverarbeitung mit festen Funktionen und/oder maschinelles Lernen und Beschleunigungslogik für künstliche Intelligenz umfassen. - In verschiedenen Ausführungsformen umfasst die 3D-Pipeline
312 möglicherweise eine Logik mit fester Funktion oder eine programmierbare Logik zum Verarbeiten eines oder mehrerer Schattiererprogramme wie z. B. Vertexschattierer, Geometrieschattierer, Pixelschattierer, Fragmentschattierer, Rechenschattierer oder andere Schattiererprogramme, indem sie die Befehle verarbeitet und Ausführungsstränge an die Grafikkernanordnung414 absendet. Die Grafikkernanordnung414 stellt einen vereinheitlichten Block von Ausführungsbetriebsmitteln für die Verarbeitung dieser Schattiererprogramme bereit. Die Mehrzweckausführungslogik (z. B. Ausführungseinheiten) innerhalb des einen oder der mehreren Grafikkerne415A-414B der Grafikkernanordnung414 umfasst die Unterstützung verschiedener 3D-API-Schattierer-Sprachen und kann mehrere gleichzeitige Ausführungsstränge, die mehreren Schattierern zugeordnet sind, ausführen. - In einigen Ausführungsformen umfasst die Grafikkernanordnung
414 auch eine Ausführungslogik zum Ausführen von Medienfunktionen wie z. B. Video- und/oder Bildverarbeitung. In einer Ausführungsform umfassen die Ausführungseinheiten zusätzlich eine Allzwecklogik, die programmierbar ist, um zusätzlich zu Grafikverarbeitungsoperationen parallele Allzweck-Rechenoperationen durchzuführen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Allzwecklogik innerhalb des Prozessorkerns (der Prozessorkerne)107 von1 oder des Kerns202A-202N wie in2A ausführen. - Ausgabedaten, die von Strängen erzeugt werden, die auf der Grafikkernanordnung
414 ausgeführt werden, können Daten an einen Speicher in einem vereinheitlichten Rückgabepuffer (URB)418 ausgeben. Der URB418 kann Daten für mehrere Stränge speichern. In einigen Ausführungsformen kann der URB418 verwendet werden, um Daten zwischen verschiedenen auf der Grafikkernanordnung414 ausgeführten Strängen zu senden. In einigen Ausführungsformen kann der URB418 zusätzlich zur Synchronisation zwischen Strängen auf der Grafikkernanordnung und für die Logik fester Funktionen innerhalb der gemeinsam genutzten Funktionslogik420 verwendet werden. - In einigen Ausführungsformen ist die Grafikkernanordnung
414 basierend auf der gewünschten Leistungsaufnahme und Rechenleistung der GPE410 so skalierbar, dass die Anordnung eine variable Anzahl von Grafikkernen enthält, die jeweils eine variable Anzahl von Ausführungseinheiten aufweisen. Die Ausführungsbetriebsmittel sind in einer Ausführungsform dynamisch skalierbar, so dass Ausführungsbetriebsmittel nach Bedarf aktiviert oder deaktiviert werden können. - Die Grafikkernanordnung
414 ist mit einer gemeinsam genutzten Funktionslogik420 gekoppelt, die mehrere Betriebsmittel enthält, die unter den Grafikkernen in der Grafikkernanordnung gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der gemeinsam genutzten Funktionslogik420 sind Hardwarelogikeinheiten, die für die Grafikkernanordnung414 eine spezialisierte Zusatzfunktionalität bereitstellen. In verschiedenen Ausführungsformen umfasst die gemeinsam genutzte Funktionslogik420 einen Abtaster421 , Mathematik422 und eine Zwischenstrangkommunikations-Logik (ITC-Logik)423 , ist jedoch nicht darauf beschränkt. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Caches425 in der gemeinsam genutzten Funktionslogik420 . - Eine gemeinsam genutzte Funktion wird mindestens dann implementiert, wenn der Bedarf an einer bestimmten spezialisierten Funktion für die Aufnahme in die Grafikkernanordnung
414 unzureichend ist. Stattdessen wird eine einzelne Instantiierung der spezialisierten Funktion als eigenständige Einheit in der gemeinsam genutzten Funktionslogik420 implementiert und wird von den Ausführungsbetriebsmitteln innerhalb der Grafikkernanordnung414 gemeinsam genutzt. Der genaue Satz von Funktionen, die unter der Grafikkernanordnung414 gemeinsam genutzt werden und in der Grafikkernanordnung414 enthalten sind, variiert zwischen Ausführungsformen. In einigen Ausführungsformen können bestimmte gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik420 , die in großem Umfang von der Grafikkernanordnung414 verwendet werden, in der gemeinsam genutzten Funktionslogik416 in der Grafikkernanordnung414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik416 in der Grafikkernanordnung414 einen Teil oder die gesamte Logik innerhalb der gemeinsam genutzten Funktionslogik420 umfassen. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam genutzten Funktionslogik420 innerhalb der gemeinsam genutzten Funktionslogik416 der Grafikkernanordnung414 dupliziert sein. In einer Ausführungsform ist die gemeinsam genutzte Funktionslogik420 zugunsten der gemeinsam genutzten Funktionslogik416 innerhalb der Grafikkernanordnung414 weggelassen. - Ausführungseinheiten
-
5A-5B zeigen eine Strangausführungslogik500 , die eine Anordnung von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern eingesetzt werden, gemäß hierin beschriebenen Ausführungsformen. Elemente von5A-5B , die die gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin aufweisen, können auf eine beliebige Art und Weise, die mit der an einer anderen Stelle hierin beschriebenen vergleichbar ist, wirken oder funktionieren, ohne darauf beschränkt zu sein.5A-5B zeigen eine Übersicht über die Strangausführungslogik500 , die eine Variante der Hardwarelogik umfassen kann, die mit jedem Teilkern221A-221F von2B veranschaulicht ist.5A ist repräsentativ für eine Ausführungseinheit innerhalb eines Allzweck-Grafikprozessors, während5B repräsentativ für eine Ausführungseinheit ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann. - Wie es in
5A dargestellt ist, umfasst die Strangausführungslogik500 in einigen Ausführungsformen einen Schattiererprozessor502 , einen Strangabfertiger504 , einen Befehls-Cache506 , eine skalierbare Ausführungseinheitsanordnung, die mehrere Ausführungseinheiten508A-508N umfasst, einen Abtaster510 , lokalen Speicher511 , einen Daten-Cache512 und einen Daten-Port514 . In einer Ausführungsform kann die skalierbare Ausführungseinheitsanordnung dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine beliebige der Ausführungseinheiten508A ,508B ,508C ,508D bis508N-1 und508N ) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Zwischenverbindungs-Fabric, die mit jeder der Komponenten verbunden ist, miteinander verbunden. In einigen Ausführungsformen umfasst die Strangausführungslogik500 eine oder mehrere Verbindungen zu Speicher wie Systemspeicher oder Cache-Speicher durch den Befehls-Cache506 , den Daten-Port514 , den Abtaster510 und/oder die Ausführungseinheiten508A-508N . In einigen Ausführungsformen ist jede Ausführungseinheit (z. B.508A ) eine eigenständige programmierbare Universalrecheneinheit, die dazu in der Lage ist, mehrere gleichzeitige Hardwarestränge auszuführen und zugleich für jeden Strang mehrere Datenelemente parallel zu verarbeiten. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten508A-508N so skalierbar, dass sie eine beliebige Anzahl von einzelnen Ausführungseinheiten umfasst. - In einigen Ausführungsformen werden die Ausführungseinheiten
508A-508N hauptsächlich verwendet, um Schattiererprogramme auszuführen. Ein Schattiererprozessor502 kann die verschiedenen Schattiererprogramme verarbeiten und Ausführungsstränge, die den Schattiererprogrammen zugeordnet sind, über einen Strangabfertiger504 abfertigen. In einer Ausführungsform umfasst der Strangabfertiger Logik zum Vermitteln von Stranginitiierungsanforderungen von den Grafik- und Medien-Pipelines und Instanziieren der angeforderten Stränge auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten508A-508N . Zum Beispiel kann eine Geometrie-Pipeline Vertex-, Tessellations- oder Geometrieschattierer zum Verarbeiten an die Strangausführungslogik senden. In einigen Ausführungsformen kann der Strangabfertiger504 auch Laufzeit-Strangerstellungsanforderungen aus den ausgeführten Schattiererprogrammen verarbeiten. - In einigen Ausführungsformen unterstützen die Ausführungseinheiten
508A-508N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafik-Schattiererbefehle umfasst, so dass Schattiererprogramme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertexprogramme, Geometrieprogramme, Vertexschattierer), Pixelverarbeitung (z. B. Pixelschattierer, Fragmentschattierer) und Allzweckverarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten508A-508N ist zur Ausführung mit Anwendung eines Befehls auf mehrere Datenströme (SIMD-Ausführung) mit mehrfacher Ausgabe in der Lage und ein mehrsträngiger Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Strang innerhalb jeder Ausführungseinheit weist einen dedizierten Registersatz mit hoher Bandbreite und einen zugehörigen unabhängigen Strangzustand auf. Die Ausführung erfolgt durch mehrfaches Ausgeben je Takt an Pipelines, die zu Ganzzahlgleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und sonstigen Operationen in der Lage sind. Während des Wartens auf Daten aus Speicher oder von einer der gemeinsam genutzten Funktionen veranlasst eine Abhängigkeitslogik innerhalb der Ausführungseinheiten508A-508N , dass ein wartender Strang im Ruhezustand bleibt, bis die angeforderten Daten zurückgegeben worden sind. Während sich der wartende Strang im Ruhezustand befindet, können Hardwarebetriebsmittel für die Verarbeitung von anderen Strängen verwendet werden. Zum Beispiel kann eine Ausführungseinheit während einer Verzögerung im Zusammenhang mit einer Vertexschattiereroperation Operationen für einen Pixelschattierer, einen Fragmentschattierer oder einen anderen Typ von Schattiererprogramm einschließlich eines anderen Vertexschattierers durchführen. Verschiedene Ausführungsformen können für die Verwendung der Ausführung unter Verwendung von Einzelbefehl-Mehrstrang (SIMT) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD gelten. Die Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT oder für SIMD in Kombination mit SIMT gelten. - Jede Ausführungseinheit in den Ausführungseinheiten
508A-508N arbeitet mit Arrays von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für den Befehl. Ein Ausführungskanal ist eine logische Ausführungseinheit für Datenelementzugriff, Maskierung und Flusssteuerung innerhalb von Befehlen. Die Anzahl von Kanälen kann von der Anzahl von arithmetischlogischen Einheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Grafikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten508A-508N Ganzzahl- und Gleitkommadatentypen. - Der Ausführungseinheits-Befehlssatz umfasst SIMD-Befehle. Die verschiedenen Datenelemente können als gepackte Datentypen in einem Register gespeichert sein und die Ausführungseinheit wird die verschiedenen Elemente auf der Basis der Datengröße der Elemente verarbeiten. Beispielsweise sind beim Arbeiten mit einem 256 Bit breiten Vektor die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet mit dem Vektor als vier separaten 54-Bit-gepackten Datenelementen (Datenelementen der Größe Vierfachwort (QW)), acht separaten 32-Bit-gepackten Datenelementen (Datenelementen der Größe Doppelwort (DW)), sechzehn separaten 16-Bit-gepackten Datenelementen (Datenelementen der Größe Wort (W)) oder zweiunddreißig separaten 8-Bit-Datenelementen (Datenelementen der Größe Byte (B)). Allerdings sind andere Vektorbreiten und Registergrößen möglich.
- In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer zusammengeschlossenen Ausführungseinheit
509A-509N kombiniert werden, die eine Strangsteuerlogik (507A-507N ) aufweist, die den zusammengeschlossenen EUs gemein ist. Mehrere EUs können in einer EU-Gruppe zusammengeschlossen sein. Jede EU in der zusammengeschlossenen EU-Gruppe kann dazu ausgelegt sein, einen separaten SIMD-Hardware-Strang auszuführen. Die Anzahl von EUs in einer zusammengeschlossenen EU-Gruppe kann gemäß Ausführungsformen variieren. Außerdem können je EU verschiedene SIMD-Breiten durchgeführt werden, einschließlich, ohne darauf beschränkt zu sein, SIMD8, SIMD16 und SIMD32. Jede zusammengeschlossene Grafikausführungseinheit509A-509N umfasst mindestens zwei Ausführungseinheiten. Zum Beispiel umfasst die zusammengeschlossene Ausführungseinheit509A eine erste EU508A , eine zweite EU508B und die Strangsteuerlogik507A , die der ersten EU508A und der zweiten EU508B gemein ist. Die Strangsteuerlogik507A steuert Stränge, die auf der zusammengeschlossenen Grafikausführungseinheit509A ausgeführt werden, wodurch es ermöglicht wird, dass jede EU innerhalb der zusammengeschlossenen Ausführungseinheiten509A-509N unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt wird. - Ein oder mehrere interne Befehls-Caches (z. B.
506 ) sind in der Strangausführungslogik500 enthalten, um Strangbefehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B.512 ) enthalten, um Strangdaten während der Strangausführung zwischenzuspeichern. Stränge, die auf der Ausführungslogik500 ausgeführt werden, können explizit verwaltete Daten auch in dem gemeinsam genutzten lokalen Speicher511 speichern. In einigen Ausführungsformen ist ein Abtaster510 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen umfasst der Abtaster510 eine spezielle Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastverfahrens zu verarbeiten, bevor er die abgetasteten Daten an eine Ausführungseinheit liefert. - Während der Ausführung senden die Grafik- und Medien-Pipelines Stranginitiierungsanforderungen über Strangerstellungs- und Strangabfertigungslogik an die Strangausführungslogik
500 . Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert wurde, wird Pixelprozessorlogik (z. B. Pixelschattiererlogik, Fragmentschattiererlogik usw.) innerhalb des Schattiererprozessors502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass Ergebnisse in Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixelschattierer oder Fragmentschattierer die Werte der verschiedenen Vertexattribute, die über das gerasterte Objekt hinweg zu interpolieren sind. In einigen Ausführungsformen führt Pixelprozessorlogik innerhalb des Schattiererprozessors502 dann ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel- oder Fragmentschattiererprogramm aus. Zum Ausführen des Schattiererprogramms sendet der Schattiererprozessor502 über den Strangabfertiger504 Stränge an eine Ausführungseinheit (z. B.508A ). In einigen Ausführungsformen verwendet der Schattiererprozessor502 Texturabtastlogik in dem Abtaster510 , um auf Texturdaten in Texturkarten zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und die eingegebenen Geometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder schließen einen oder mehrere Pixel von einer Weiterverarbeitung aus. - In einigen Ausführungsformen bietet der Daten-Port
514 einen Speicherzugriffsmechanismus für die Strangausführungslogik500 zum Ausgeben von verarbeiteten Daten an Speicher zur Weiterverarbeitung auf einer Grafikprozessorausgabe-Pipeline. In einigen Ausführungsformen umfasst der Daten-Port514 einen oder mehrere Cache-Speicher (z. B. Daten-Cache512 ) oder koppelt mit diesen, um Daten für einen Speicherzugriff über den Daten-Port zwischenzuspeichern. - In einer Ausführungsform kann die Ausführungslogik
500 auch einen Strahlverfolger505 enthalten, der eine Strahlverfolgungsbeschleunigungsfunktionalität bereitstellen kann. Der Strahlverfolger505 kann einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen zur Strahlerzeugung enthält. Der Strahlverfolgungsbefehlssatz kann dem Strahlverfolgungsbefehlssatz, der von den Strahlverfolgungskernen245 in2C unterstützt wird, ähnlich sein oder sich von diesem unterscheiden -
5B zeigt beispielhafte interne Einzelheiten einer Ausführungseinheit508 gemäß Ausführungsformen. Eine Grafikausführungseinheit508 eine Befehlsabrufeinheit537 , eine Allgemeinregistersatz-Anordnung (GRF-Anordnung)524 , eine Architekturregistersatz-Anordnung (ARF-Anordnung)526 , einen Strangvermittler522 , eine Sendeeinheit530 , eine Verzweigungseinheit532 , einen Satz von SIMD-Gleitkommaeinheiten (SIMD-FPUs)534 und in einer Ausführungsform einen Satz dedizierter Ganzzahl-SIMD-ALUs535 umfassen. Die GRF524 und die ARF526 umfassen die Menge von Allgemeinregistersätzen und Architekturregistersätzen, die jedem gleichzeitigen Hardware-Strang zugeordnet sind, der in der Grafikausführungseinheit508 aktiv sein kann. In einer Ausführungsform wird der Per-Strang-Architekturzustand in der ARF526 gepflegt, während Daten, die während der Strangausführung verwendet werden, in der GRF524 gespeichert werden. Der Ausführungszustand jedes Strangs einschließlich der Befehlszeiger für jeden Strang kann in strangspezifischen Registern in der ARF526 gehalten werden. - In einer Ausführungsform weist die Grafikausführungseinheit
508 eine Architektur auf, die eine Kombination von gleichzeitiget Mehrsträngigkeit (SMT) und feinkörniger verschachtelter Mehrsträngigkeit (IMT) darstellt. Die Architektur weist eine modulare Konfiguration auf, die zur Designzeit basierend auf einer Zielanzahl von gleichzeitigen Strängen und einer Anzahl von Registern je Ausführungseinheit fein abgestimmt werden kann, wobei Ausführungseinheitsbetriebsmittel auf Logik, die zum Ausführen von mehreren gleichzeitigen Strängen verwendet wird, verteilt wird. Die Anzahl der logischen Stränge, die von der Grafikausführungseinheit508 ausgeführt werden können, ist nicht auf die Anzahl der Hardware-Stränge beschränkt, und jedem Hardware-Strang können mehrere logische Stränge zugewiesen sein. - In einer Ausführungsform kann die Grafikausführungseinheit
508 mehrere Befehle, die jeweils verschiedene Befehle sein können, gemeinsam ausgeben. Der Strangvermittler522 des Grafikausführungseinheitsstrangs508 kann die Befehle an die Sendeeinheit530 , die Verzweigungseinheit532 und/oder die eine oder die mehreren SIMD-FPU(s)534 zur Ausführung senden. Jeder Ausführungsstrang kann auf128 Universalregister innerhalb der GRF524 zugreifen, wobei jedes Register32 Bytes speichern kann, die als ein 8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In einer Ausführungsform hat jeder Ausführungseinheitsstrang Zugriff auf 4 KB innerhalb der GRF524 , wenngleich Ausführungsformen nicht hierauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerbetriebsmittel bereitgestellt sein können. In einer Ausführungsform ist die Grafikausführungseinheit508 in sieben Hardware-Stränge unterteilt, die unabhängig voneinander Rechenoperationen ausführen können, wenngleich die Anzahl von Strängen pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Beispielsweise werden in einer Ausführungsform bis zu 16 Hardware-Stränge unterstützt. In einer Ausführungsform, in der sieben Stränge auf 4 KB zugreifen können, kann die GRF524 insgesamt 28 KB speichern. Wenn16 Stränge auf 4 KB zugreifen können, kann die GRF524 insgesamt 64 KB speichern. Flexible Adressierungsmodi können es ermöglichen, Register zusammen zu adressieren, um effektiv breitere Register aufzubauen oder schrittweise rechteckige Blockdatenstrukturen darzustellen. - In einer Ausführungsform werden Speicheroperationen, Abtasteroperationen und andere Systemkommunikation mit längerer Latenz über „Senden“-Befehle gesendet, die durch die Nachrichtenweiterleitungssendeeinheit
530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsbefehle an eine dedizierte Verzweigungseinheit532 gesendet, um eine SIMD-Divergenz und letztliche Konvergenz zu unterstützen. - In einer Ausführungsform umfasst die Grafikausführungseinheit
508 eine oder mehrere SIMD-Gleitkommaeinheiten (SIMD-FPUs)534 zum Durchführen von Gleitkommaoperationen. In einer Ausführungsform unterstützt/unterstützen die FPU(s)534 auch eine Ganzzahlberechnung. In einer Ausführungsform kann/können die FPU(s)534 bis zu M Anzahl von 32-Bit-Gleitkomma-(oder Ganzzahl-) Operationen mit SIMD ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen mit SIMD ausführen. In einer Ausführungsform bietet zumindest eine der FPU(s) erweiterte Mathematikfähigkeit, um transzendente Mathematikfunktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. In einigen Ausführungsformen ist auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs535 vorhanden und kann insbesondere optimiert sein, um Operationen in Verbindung mit Maschinenlernberechnungen durchzuführen. - In einer Ausführungsform können Anordnungen von mehreren Instanzen der Grafikausführungseinheit
508 in einer Grafikteilkerngruppierung (z. B. einem Unter-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten je Teilkerngruppierung auswählen. In einer Ausführungsform kann die Ausführungseinheit508 Befehle über mehrere Ausführungskanäle hinweg ausführen. In einer weiteren Ausführungsform wird jeder Strang, der auf der Grafikausführungseinheit508 ausgeführt wird, auf einem anderen Kanal ausgeführt. -
6 zeigt eine zusätzliche Ausführungseinheit600 gemäß einer Ausführungsform. Die Ausführungseinheit600 kann eine rechenoptimierte Ausführungseinheit zur beispielsweisen Verwendung in einer Rechenmodulkachel340A-340D wie in3C sein, ist jedoch nicht darauf beschränkt. Varianten der Ausführungseinheit600 können auch in einer Grafikmaschinenkachel310A-310D wie in3B verwendet werden. In einer Ausführungsform umfasst die Ausführungseinheit600 eine Strangsteuereinheit601 , eine Strangzustandseinheit602 , eine Befehlsabruf-/Vorabrufeinheit603 und eine Befehlsdecodiereinheit604 . Die Ausführungseinheit600 umfasst zusätzlich einen Registersatz606 , der Register aufnimmt, die Hardware-Strängen innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit600 umfasst zusätzlich eine Sendeeinheit607 und eine Verzweigungseinheit608 . In einer Ausführungsform können die Sendeeinheit607 und die Verzweigungseinheit608 ähnlich wie die Sendeeinheit530 und eine Verzweigungseinheit532 der Grafikausführungseinheit508 von5B arbeiten. - Die Ausführungseinheit
600 umfasst zudem eine Recheneinheit610 , die mehrere verschiedene Arten von Funktionseinheiten aufweist. In einer Ausführungsform umfasst die Recheneinheit610 eine ALU-Einheit611 , die eine Anordnung von arithmetischen Logikeinheiten umfasst. Die ALU-Einheit611 kann dazu ausgelegt sein, Ganzzahl- und Gleitkommaoperationen mit64 Bit,32 Bit und 16 Bit auszuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig ausgeführt werden. Die Recheneinheit610 kann auch eine systolische Anordnung612 und eine Mathematikeinheit613 umfassen. Die systolische Anordnung612 umfasst ein W breites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektoroperationen oder andere datenparallele Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann die systolische Anordnung612 dazu ausgelegt sein, Matrixoperationen wie beispielsweise Matrixpunktproduktoperationen auszuführen. In einer Ausführungsform unterstützt die systolische Anordnung612 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung612 dazu ausgelegt sein, Maschinenlernoperationen zu beschleunigen. In solchen Ausführungsformen kann die systolische Anordnung612 mit Unterstützung für das bfloat-16-Bit-Gleitkommaformat ausgelegt sein. In einer Ausführungsform kann eine Mathematikeinheit613 enthalten sein, um eine bestimmte Teilmenge von mathematischen Operationen auf eine effizientere und energiesparendere Weise als die ALU-Einheit611 auszuführen. Die Mathematikeinheit613 kann eine Variante der mathematischen Logik aufweisen, die in der gemeinsam genutzten Funktionslogik einer Grafikverarbeitungsmaschine zu finden ist, die durch andere Ausführungsformen bereitgestellt wird (z. B. mathematische Logik422 der gemeinsam genutzten Funktionslogik420 von4 ). In einer Ausführungsform kann die mathematische Einheit613 dazu ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen auszuführen. - Die Strangsteuereinheit
601 umfasst eine Logik zum Steuern der Ausführung von Strängen innerhalb der Ausführungseinheit. Die Strangsteuereinheit601 kann eine Strangvermittlungslogik zum Starten, Stoppen und Verhindern der Ausführung von Strängen innerhalb der Ausführungseinheit600 umfassen. Die Strangzustandseinheit602 kann zum Speichern des Strangzustands für Stränge verwendet werden, die zur Ausführung auf der Ausführungseinheit600 zugewiesen sind. Das Speichern des Strangzustands innerhalb der Ausführungseinheit600 ermöglicht die schnelle Vorwegnahme von Strängen, wenn diese Stränge blockiert werden oder inaktiv sind. Die Befehlsabruf-/Vorabrufeinheit603 kann Befehle aus einem Befehls-Cache einer Ausführungslogik höherer Ebene (z. B. dem Befehls-Cache506 wie in5A) abrufen. Die Befehlsabruf-/Vorabrufeinheit603 kann auch basierend auf einer Analyse von aktuell ausgeführten Strängen Vorabrufanforderungen für Befehle ausgeben, die in den Befehls-Cache geladen werden sollen. Die Befehlsdecodiereinheit604 kann verwendet werden, um Befehle zu decodieren, die von den Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Befehlsdecodiereinheit604 als sekundärer Decodierer verwendet werden, um komplexe Befehle in konstituierende Mikrooperationen zu decodieren. - Die Ausführungseinheit
600 umfasst zusätzlich einen Registersatz606 , der von Hardwaresträngen verwendet werden kann, die auf der Ausführungseinheit600 ausgeführt werden. Register in dem Registersatz606 können über die Logik hinweg aufgeteilt werden, die zum Ausführen600 mehrerer gleichzeitiger Stränge innerhalb der Recheneinheit610 verwendet wird. Die Anzahl der logischen Stränge, die von der Grafikausführungseinheit600 ausgeführt werden können, ist nicht auf die Anzahl der Hardwarestränge beschränkt und jedem Hardware-Strang können mehrere logische Stränge zugewiesen werden. Die Größe des Registersatzes606 kann je nach Anzahl der unterstützten Hardwarestränge zwischen Ausführungsformen variieren. In einer Ausführungsform kann das Umbenennen von Registern verwendet werden, um Register dynamisch Hardwaresträngen zuzuweisen. -
7 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Befehlssatz mit Befehlen in mehreren Formaten. Die Kästen mit durchgezogenen Linien zeigen die Komponenten, die in der Regel in einem Ausführungseinheitsbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Befehle enthalten sind. In einigen Ausführungsformen besteht das Befehlsformat700 , das gezeigt und beschrieben wird, aus Makrobefehlen, die Befehle sind, die an die Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die aus der Befehlsdecodierung resultieren, sobald der Befehl verarbeitet wird. - In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Befehle in einem 128-Bit-Befehlsformat
710 . Ein verdichtetes 64-Bit-Befehlsformat730 steht für einige Befehle basierend auf dem ausgewählten Befehl, den Befehlsoptionen und der Anzahl der Operanden zur Verfügung. Das native 128-Bit-Format710 bietet Zugriff auf alle Befehlsoptionen, während einige Optionen und Operationen in dem 64-Bit-Format730 eingeschränkt sind. Die nativen Befehle, die in dem 64-Bit-Format730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen ist der Befehl unter Verwendung eines Satzes von Indexwerten in einem Indexfeld713 zum Teil verdichtet. Die Ausführungseinheits-Hardware verweist auf einen Satz von Verdichtungstabellen auf der Grundlage der Indexwerte und verwendet die Verdichtungstabellenausgaben, um einen nativen Befehl in dem 128-Bit-Befehlsformat710 zu rekonstruieren. Andere Größen und Formate von Befehlen können verwendet werden. - Für jedes Format definiert ein Befehls-Opcode
712 die Funktion, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden hinweg aus. Zum Beispiel führt die Ausführungseinheit als Antwort auf einen Addierbefehl eine gleichzeitige Additionsoperation für jeden Farbkanal, der ein Texturelement oder Bildelement darstellt, durch. Standardmäßig führt die Ausführungseinheit jeden Befehl über alle Datenkanäle der Operanden hinweg aus. In einigen Ausführungsformen ermöglicht ein Befehlssteuerfeld714 die Kontrolle über bestimmte Ausführungsoptionen wie beispielsweise die Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Umordnen (Swizzle)). Für 128-Bit-Befehle710 begrenzt ein Feld „exec-size“716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. Das Feld „exec-size“716 steht in einigen Ausführungsformen nicht für den Einsatz in dem kompakten 64-Bit-Befehlsformat730 zur Verfügung. - Einige Ausführungseinheitsbefehle weisen bis zu drei Operanden auf, darunter zwei Quelloperanden src0
720 , srcl722 , und ein Ziel718 . In einigen Ausführungsformen unterstützen die Ausführungseinheiten Doppelziel-Befehle, wobei eines der Ziele impliziert ist. Datenmanipulationsbefehle können einen dritten Quelloperanden (z. B. SRC2724 ) aufweisen, wobei der Befehls-Opcode712 die Anzahl der Quelloperanden bestimmt. Der letzte Quelloperand eines Befehls kann ein direkter (z. B. fest codierter) Wert sein, der mit dem Befehl weitergegeben wird. - In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat
710 ein Zugriffs-/Adressmodusfeld726 , das beispielsweise angibt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt von Bits in dem Befehl bereitgestellt. - In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat
710 ein Zugriffs-/Adressmodusfeld726 , das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines 16-Byte-Ausrichtungs-Zugriffsmodus und eines 1-Byte-Ausrichtungs-Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Befehlsoperanden bestimmt. Wenn sich der Befehl beispielsweise in einem ersten Modus befindet, kann er eine Byte-Ausrichtungs-Adressierung für Quell- und Zieloperanden verwenden, und wenn sich der Befehl in einem zweiten Modus befindet, kann er eine 16-Byte-Ausrichtungs-Adressierung für alle Quell- und Zieloperanden verwenden. - In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds
726 , ob der Befehl eine direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, liefern die Bits in dem Befehl direkt die Registeradresse eines oder mehrerer Operanden. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adress-Direktwertfeld in dem Befehl berechnet werden. - In einigen Ausführungsformen sind Befehle basierend auf Opcode-Bitfeldern
712 gruppiert, um eine Opcode-Decodierung740 zu vereinfachen. Bei einem 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 es der Ausführungseinheit, den Typ von Opcode zu bestimmen. Die speziell gezeigte Opcode-Gruppierung ist lediglich beispielhaft. In einigen Ausführungsformen umfasst eine Verschiebungs- und Logik-Opcode-Gruppe742 Datenverschiebungs- und Logik-Befehle (z. B. Verschieben (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Verschiebungs- und Logik-Gruppe742 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei die Verschiebungsbefehle (mov-Befehle) in der Form 0000xxxxb vorliegen und die Logikbefehle in der Form 0001xxxxb vorliegen. Eine Ablaufsteuerungsbefehlsgruppe744 (z. B. Aufrufen (call), Springen (jmp)) enthält Befehle in der Form 0010xxxxb (z. B. 0x20). Eine gemischte Befehlsgruppe746 umfasst eine Mischung aus Befehlen, die Synchronisationsbefehle (z. B. Warten (wait), Senden (send)) in der Form 0011xxxxb (z. B. 0x30) umfasst. Eine Parallelmathematik-Befehlsgruppe748 umfasst komponentenweise arithmetische Befehle (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0100xxxxb (z. B. 0x40). Die Parallelmathematik-Gruppe748 führt die arithmetischen Operationen parallel über Datenkanäle hinweg aus. Die Vektormathematik-Gruppe750 umfasst arithmetische Befehle (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektormathematik-Gruppe führt arithmetische Operationen wie Skalarproduktberechnungen an Vektoroperanden aus. Die dargestellte Opcode-Decodierung740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit zum Ausführen eines decodierten Befehls verwendet wird. Beispielsweise können einige Befehle als systolische Befehle festgelegt sein, die von einer systolischen Anordnung ausgeführt werden. Andere Befehle wie beispielsweise Strahlverfolgungsbefehle (nicht gezeigt) können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb eines Slice oder einer Partition der Ausführungslogik geleitet werden. - Grafikpipeline
-
8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors800 . Elemente von8 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt. - In einigen Ausführungsformen umfasst der Grafikprozessor
800 eine Geometriepipeline820 , eine Medienpipeline830 , eine Anzeigemaschine840 , eine Strangausführungslogik850 und eine Renderausgabepipeline870 . In einigen Ausführungsformen ist der Grafikprozessor800 ein Grafikprozessor innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Allzweckverarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle, die über eine Ringzwischenverbindung802 an den Grafikprozessor800 erteilt werden, gesteuert. In einigen Ausführungsformen koppelt die Ringzwischenverbindung802 den Grafikprozessor800 mit anderen Verarbeitungskomponenten wie anderen Grafikprozessoren oder Allzweckprozessoren. Befehle aus der Ringzwischenverbindung802 werden durch einen Befehls-Streamer803 interpretiert, der Befehle an einzelne Komponenten der Geometriepipeline820 oder Medienpipeline830 liefert. - In einigen Ausführungsformen lenkt der Befehls-Streamer
803 den Betrieb eines Vertexabrufers805 , der Vertexdaten aus dem Speicher liest und Vertexverarbeitungsbefehle, die von dem Befehls-Streamer803 geliefert werden, ausführt. In einigen Ausführungsformen liefert der Vertexabrufer805 Vertexdaten an einen Vertexschattierer807 , der eine Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Vertex ausführt. In einigen Ausführungsformen führen der Vertexabrufer805 und der Vertexschattierer807 Vertexverarbeitungsbefehle durch Entsenden von Ausführungssträngen an die Ausführungseinheiten852A-852B über einen Strangabfertiger831 aus. - In einigen Ausführungsformen sind die Ausführungseinheiten
852A-852B eine Anordnung von Vektorprozessoren mit einem Befehlssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten852A-852B einen angeschlossenen Ll-Cache851 auf, der spezifisch für jede Anordnung ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Daten-Cache, Befehls-Cache oder ein einzelner Cache, der so partitioniert ist, dass er Daten und Befehle in verschiedenen Partitionen enthält, ausgelegt sein. - In einigen Ausführungsformen umfasst die Geometriepipeline
820 Tessellationskomponenten zum Durchführen einer hardwarebeschleunigtem Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Mantelschattierer811 die Tessellationsoperationen. Ein programmierbarer Domain-Schattierer817 liefert eine Backend-Auswertung der Tessellationsausgabe. Ein Tessellator813 arbeitet unter der Führung des Mantelschattierers811 und umfasst Sonderlogik, um einen Satz von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell, das als Eingabe in die Geometriepipeline820 bereitgestellt wird, zu erzeugen. Wenn die Tessellation in einigen Ausführungsformen nicht verwendet wird, können die Tessellationskomponenten (z. B. Mantelschattierer811 , Tessellator813 und Domain-Schattierer817 ) umgangen werden. - In einigen Ausführungsformen können die vollständigen geometrischen Objekte durch einen Geometrieschattierer
819 über einen oder mehrere Stränge, die an die Ausführungseinheiten852A-852B entsendet werden, verarbeitet werden oder können direkt zu dem Clipper829 gelangen. In einigen Ausführungsformen bearbeitet der Geometrieschattierer gesamte geometrische Objekte anstelle von Vertices oder Flecken von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Wenn die Tessellation deaktiviert ist, empfängt der Geometrieschattierer819 Eingaben aus dem Vertexschattierer807 . In einigen Ausführungsformen ist der Geometrieschattierer819 durch ein Geometrieschattiererprogramm programmierbar, um eine Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten deaktiviert sind. - Vor der Rasterung verarbeitet ein Clipper
829 Vertexdaten. Der Clipper829 kann entweder ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrieschattiererfunktionen sein. In einigen Ausführungsformen fertigt eine Raster-und-Tiefentestkomponente873 in der Renderausgabepipeline870 Pixelschattierer ab, um die geometrischen Objekte in ihre pixelweisen Darstellungen zu konvertieren. In einigen Ausführungsformen ist die Pixelschattiererlogik in der Strangausführungslogik850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Raster-und-Tiefentestkomponente873 umgehen und über eine Stream-Out-Einheit823 auf nicht gerasterte Vertexdaten zugreifen. - Der Grafikprozessor
800 verfügt über einen Zwischenverbindungsbus, eine Zwischenverbindungsstruktur oder irgendeinen anderen Zwischenverbindungsmechanismus, der einen Daten- und Nachrichtenaustausch zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind Ausführungseinheiten852A-852B und zugehörige Logikeinheiten (z. B. Ll-Cache851 , Abtaster854 und ein Textur-Cache858 usw.) über einen Daten-Port856 verbunden, um einen Speicherzugriff durchführen und mit Renderausgabepipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster854 , die Caches851 ,858 und die Ausführungseinheiten852A-852B jeweils separate Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache858 auch als Abtaster-Cache ausgelegt sein. - In einigen Ausführungsformen umfasst die Renderausgabepipeline
870 eine Raster-und-Tiefentestkomponente873 , die vertexbasierte Objekte in die ihnen zugeordnete pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen umfasst die Rasterlogik eine Fenster-/Maskier-Einheit, um eine Dreiecks- und Linien-Rasterung mit fester Funktion durchzuführen. Zudem sind ein zugehöriger Render-Cache878 und Tiefen-Cache879 in einigen Ausführungsformen verfügbar. Eine Pixeloperationskomponente877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bitblockbildübertragungen mit Überlagerung), von der 2D-Maschine841 durchgeführt werden oder zu der Anzeigezeit durch den AnzeigeController843 mit Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache875 für alle Grafikkomponenten verfügbar, so dass die gemeinsame Nutzung von Daten ohne den Einsatz des Hauptsystemspeichers ermöglicht wird. - In einigen Ausführungsformen umfasst die Grafikprozessor-Medienpipeline
830 eine Medienmaschine837 und ein Video-Frontend834 . In einigen Ausführungsformen empfängt das Video-Frontend834 Pipelinebefehle aus dem Befehls-Streamer803 . In einigen Ausführungsformen umfasst die Medien-Pipeline830 aber einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend834 Medienbefehle, bevor es den Befehl an die Medienmaschine837 sendet. In einigen Ausführungsformen weist die Medienmaschine837 eine Strangerzeugungsfunktionalität auf, um Stränge für das Entsenden an die Strangausführungslogik850 über den Strangabfertiger831 zu erzeugen. - In einigen Ausführungsformen umfasst der Grafikprozessor
800 eine Anzeigemaschine840 . In einigen Ausführungsformen ist die Anzeigemaschine840 bezüglich des Prozessors800 extern und ist mit dem Grafikprozessor über die Ringzwischenverbindung802 oder irgendeinen anderen Zwischenverbindungsbus oder irgendeine andere Zwischenverbindungsstruktur gekoppelt. In einigen Ausführungsformen umfasst die Anzeigemaschine840 eine 2D-Maschine841 und einen Anzeigecontroller843 . In einigen Ausführungsformen enthält die Anzeigemaschine840 eine Sonderlogik, die unabhängig von der 3D-Pipeline arbeiten kann. In einigen Ausführungsformen ist der Anzeigecontroller843 mit einer Anzeigevorrichtung (nicht dargestellt) gekoppelt, die eine integrierte Systemanzeigevorrichtung wie bei einem Laptop-Computer oder eine externe Anzeigevorrichtung, die über ein Anzeigevorrichtungs-Verbindungselement angeschlossen ist, sein kann. - In einigen Ausführungsformen sind die Geometriepipeline
820 und die Medienpipeline830 konfigurierbar, um Operationen auf der Basis mehrerer Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht speziell für irgendeine Anwendungsprogrammierschnittstelle (API) ausgelegt. In einigen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Aufrufe, die spezifisch für eine bestimmte Grafik- oder Medienbibliothek sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL) und die Open Computing Language (OpenCL) und/oder Vulkan-Grafik und Rechen-API geboten, die alle von der Khronos Group stammen. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation geboten werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Es kann auch Unterstützung für die Open Source Computer Vision Library (OpenCV) geboten werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde dann auch unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann. - Grafikpipelineprogrammierung
-
9A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat900 gemäß einigen Ausführungsformen zeigt.9B ist ein Blockdiagramm, das eine Grafikprozessorbefehlsfolge910 gemäß einer Ausführungsform zeigt. Die durchgezogenen Kästchen in9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat900 von9A umfasst Datenfelder zum Identifizieren eines Clients902 , eines Befehlsoperationscodes (Opcodes)904 und von Daten906 für den Befehl. Ein Teil-Opcode905 und eine Befehlsgröße908 sind in einigen Befehlen ebenfalls enthalten. - In einigen Ausführungsformen spezifiziert der Client
902 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die geeignete Client-Einheit weiterzuleiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode904 und, falls vorhanden, den Teil-Opcode905 , um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld906 aus. Für einige Befehle wird eine explizite Befehlsgröße908 erwartet, die die Größe des Befehls angibt. In einigen Ausführungsformen bestimmt der Befehls-Parser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen sind Befehle nach Vielfachen eines Doppelwortes ausgerichtet. Andere Befehlsformate können verwendet werden. - Das Ablaufdiagramm in
9B zeigt eine beispielhafte Grafikprozessorbefehlsfolge910 . In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der dargestellten Befehlsfolge, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge ist nur zu Beispielszwecken dargestellt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge so ausgegeben werden, dass der Grafikprozessor die Folge von Befehlen zumindest teilweise gleichzeitig verarbeitet. - In einigen Ausführungsformen kann die Grafikprozessorbefehlsfolge
910 mit einem Pipelinebereinigungsbefehl912 beginnen, um zu veranlassen, dass eine aktive Grafikpipeline die aktuell ausstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline922 und die Medienpipeline924 nicht gleichzeitig. Die Pipelinebereinigung wird ausgeführt, um zu veranlassen, dass die aktive Grafikpipeline alle ausstehenden Befehle abschließt. Als Antwort auf eine Pipelinebereinigung unterbricht der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „schmutzig“ gekennzeichnet sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipelinebereinigungsbefehl912 für die Pipelinesynchronisation oder vor dem Versetzen des Grafikprozessors in einen Zustand niedriger Leistungsaufnahme verwendet werden. - In einigen Ausführungsformen wird ein Pipelineauswahlbefehl
913 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen wird ein Pipelineauswahlbefehl913 nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipelinebefehlen benötigt, es sei denn, der Kontext gibt vor, Befehle für beide Pipelines auszugeben. In einigen Ausführungsformen ist ein Pipelinebereinigungsbefehl912 unmittelbar vor einem Pipelinewechsel mittels des Pipelineauswahlbefehls913 erforderlich. - In einigen Ausführungsformen konfiguriert ein Pipelinesteuerbefehl
914 eine Grafikpipeline für den Betrieb und wird verwendet, um die 3D-Pipeline922 und die Medienpipeline924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipelinesteuerbefehl914 den Pipelinezustand für die aktive Pipeline. In einer Ausführungsform wird der Pipelinesteuerbefehl914 für eine Pipelinesynchronisation und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird. - In einigen Ausführungsformen werden Rückgabepufferzustandsbefehle
916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipelineoperationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine strangübergreifende Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rückgabepufferzustand916 das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipelineoperationen verwendet werden sollen. - Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipelinebestimmung
920 wird die Befehlsfolge auf die 3D-Pipeline922 , beginnend mit dem 3D-Pipeline-Zustand930 , oder die Medienpipeline924 , beginnend mit dem MedienpipelineZustand940 , zugeschnitten. - Die Befehle zum Konfigurieren des 3D-Pipelinezustands
930 umfassen 3D-Zustandseinstellungsbefehle für den Vertexpufferzustand, einen Vertexelementzustand, einen Konstantfarbzustand, einen Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der jeweiligen verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle zum 3D-Pipelinezustand930 auch in der Lage, bestimmte Pipelineelemente gezielt zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden. - In einigen Ausführungsformen wird der 3D-Primitiv-Befehl
932 verwendet, um 3D-Primitive, die von der 3D-Pipeline verarbeitet werden sollen, zu versenden. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl932 an den Grafikprozessor geleitet werden, werden an die Vertexabruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertexabruffunktion verwendet die Daten des 3D-Primitiv-Befehls932 , um Vertexdatenstrukturen zu erzeugen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl932 verwendet, um Vertexoperationen an 3D-Primitiven mittels Vertexschattierern durchzuführen. Um Vertexschattierer zu verarbeiten, sendet die 3D-Pipeline922 Schattiererausführungsstränge an Grafikprozessor-Ausführungseinheiten. - In einigen Ausführungsformen wird die 3D-Pipeline
922 über einen Befehl oder ein Ereignis Ausführen934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen „go“- oder „kick“-Befehl in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipelinesynchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafikpipeline zu bereinigen. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitive aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixelmaschine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixelschattierungs- und Pixel-Backend-Operationen können für diese Operationen ebenfalls enthalten sein. - In einigen Ausführungsformen folgt die Grafikprozessorbefehlsfolge
910 dem Pfad der Medienpipeline924 , wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medienpipeline924 von den durchzuführenden Medien- oder Rechenoperationen ab. Bestimmte Mediendecodieroperationen können während der Mediendecodierung in die Medienpipeline ausgelagert werden. In einigen Ausführungsformen kann die Medienpipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Betriebsmitteln durchgeführt werden, die von einem oder mehreren Allzweckverarbeitungskernen bereitgestellt werden. In einer Ausführungsform umfasst die Medienpipeline auch Elemente für Operationen einer Allzweck-Grafikprozessoreinheit (GPGPU), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechenschattiererprogrammen, die nicht explizit mit dem Rendern von Grafikprimitiven in Zusammenhang stehen, durchzuführen. - In einigen Ausführungsformen ist die Medienpipeline
924 auf ähnliche Weise wie die 3D-Pipeline922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands940 wird vor den Medienobjektbefehlen942 an eine Befehlswarteschlange versendet oder in dieser platziert. In einigen Ausführungsformen umfassen die Befehle für den Medienpipelinezustand940 Daten zum Konfigurieren der Medienpipelineelemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies umfasst Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik in der Medienpipeline wie beispielsweise ein Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen die Befehle für den Medienpipelinezustand940 auch die Verwendung von einem oder mehreren Zeigern auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten. - In einigen Ausführungsformen liefern Medienobjektbefehle
942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medienpipelinezustände gültig sein, bevor ein Medienobjektbefehl942 ausgegeben wird. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle942 in die Warteschlange eingereiht sind, wird die Medienpipeline924 über einen Ausführungsbefehl944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe aus der Medienpipeline924 kann dann durch Operationen nachbearbeitet werden, die von der 3D-Pipeline922 oder der Medienpipeline924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt. - Grafiksoftwarearchitektur
-
10 zeigt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen umfasst die Softwarearchitektur eine 3D-Grafikanwendung1010 , ein Betriebssystem1020 und mindestens einen Prozessor1030 . In einigen Ausführungsformen weist der Prozessor1030 einen Grafikprozessor1032 und einen oder mehrere Allzweck-Prozessorkerne1034 auf. Die Grafikanwendung1010 und das Betriebssystem1020 werden jeweils in dem Systemspeicher1050 des Datenverarbeitungssystems ausgeführt. - In einigen Ausführungsformen weist die 3D-Grafikanwendung
1010 ein oder mehrere Schattiererprogramme auf, die Schattiererbefehle1012 enthalten. Die Schattierersprachenbefehle können in einer Schattiererhochsprache wie der High Level Shader Language (HLSL) von Direct3D oder der OpenGL Shader Language (GLSL) usw. vorliegen. Die Anwendung weist auch ausführbare Befehle1014 in einer Maschinensprache auf, die zur Ausführung durch den Allzweck-Prozessorkern1034 geeignet sind. Die Anwendung weist auch Grafikobjekte1016 auf, die durch Vertexdaten definiert sind. - In einigen Ausführungsformen ist das Betriebssystem
1020 das Betriebssystem Microsoft® Windows® der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem1020 kann eine Grafik-API1022 wie die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem1020 einen Frontend-Schattierer-Kompilierer1024 , um jegliche Schattiererbefehle1012 in HLSL in eine Schattierersprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine einsatzsynchrone Kompilierung (JIT-Kompilierung) sein oder die Anwendung kann eine Schattierer-Vorkompilierung ausführen. In einigen Ausführungsformen werden Schattierer hoher Ebene während der Kompilierung der 3D-Grafikanwendung1010 zu Schattierern niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Schattiererbefehle1012 in einer Zwischenform wie beispielsweise einer Version der von der Vulkan-API verwendeten portierbaren Standard-Zwischendarstellung (SPIR) bereitgestellt. - In einigen Ausführungsformen umfasst der Anwendermodus-Grafiktreiber
1026 einen Backend-Schattiererkompilierer1027 , um die Schattiererbefehle1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Schattiererbefehle1012 in der GLSL-Hochsprache an einen Anwendermodus-Grafiktreiber1026 zur Kompilierung geleitet. In einigen Ausführungsformen verwendet der Anwendermodus-Grafiktreiber1026 Betriebssystemkernelmodusfunktionen1028 , um mit einem Kernelmodus-Grafiktreiber1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber1029 mit dem Grafikprozessor1032 , um Befehle und Anweisungen zu entsenden. - IP-Kern-Implementierungen
- Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und Logik innerhalb einer integrierten Schaltung wie etwa eines Prozessors repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Befehle enthalten, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie von einer Maschine gelesen werden, können die Befehle veranlassen, dass die Maschine die Logik zum Ausführen der hierin beschriebenen Techniken herstellt. Solche Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen ausführt, die in Verbindung mit irgendeiner der hierin beschriebenen Ausführungsformen beschrieben sind.
-
11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem1100 zeigt, das zur Herstellung einer integrierten Schaltung zur Ausführung von Operationen gemäß einer Ausführungsform verwendet werden kann. Das IP-Kern-Entwicklungssystem1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einen größeren Entwurf integriert werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) zu konstruieren. Eine Entwurfseinrichtung1130 kann eine Softwaresimulation1110 eines IP-Kernentwurfs in einer Programmierhochsprache (z. B. C/C++) erzeugen. Die Softwaresimulation1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells1112 zu gestalten, zu testen und zu verifizieren. Das Simulationsmodell1112 kann Funktions-, Verhaltens- und/oder Zeitvorgabesimulationen beinhalten. Ein Registertransferebenen-Entwurf (RTL-Entwurf)1115 kann dann aus dem Simulationsmodell1112 erzeugt oder synthetisiert werden. Der RTL-Entwurf1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Neben einem RTL-Entwurf1115 können auch Entwürfe auf niedrigerer Ebene auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die speziellen Einzelheiten des anfänglichen Entwurfs und der Simulation variieren. - Der RTL-Entwurf
1115 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung zu einem Hardwaremodell1120 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physischen Entwurfsdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um den IP-Kern-Entwurf zu verifizieren. Der IP-Kern-Entwurf kann zur Lieferung an eine Drittherstellereinrichtung1165 unter Verwendung eines nichtflüchtigen Speichers1140 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann der IP-Kern-Entwurf über eine drahtgebundene Verbindung1150 oder eine drahtlose Verbindung1160 (übertragen werden z. B. über das Internet). Die Herstellungseinrichtung1165 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kern-Entwurf basiert. Die hergestellte integrierte Schaltung kann dazu ausgelegt sein, Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform auszuführen. -
11B zeigt eine Querschnittsseitenansicht einer Baugruppenanordnung für integrierte Schaltungen1170 gemäß einigen hierin beschriebenen Ausführungsformen. Die Baugruppenanordnung für integrierte Schaltungen1170 veranschaulicht eine Implementierung von einer oder mehreren Prozessor- oder Beschleunigervorrichtungen, wie sie hierin beschrieben sind. Die Baugruppenanordnung1170 umfasst mehrere Einheiten von Hardwarelogik1172 ,1174 , die mit einem Substrat1180 verbunden sind. Die Logik1172 ,1174 kann zumindest teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte von beliebigen der hierin beschriebenen Prozessorkern(e), Grafikprozessor(en) oder anderen Beschleunigervorrichtungen umfassen. Jede Logikeinheit1172 ,1174 kann innerhalb eines Halbleiter-Chips implementiert und mit dem Substrat1180 über eine Zwischenverbindungsstruktur1173 gekoppelt sein. Die Zwischenverbindungsstruktur1173 kann dazu ausgelegt sein, elektrische Signale zwischen der Logik1172 ,1174 und dem Substrat1180 weiterzuleiten, und kann Zwischenverbindungen wie Kontakthügel oder Kontaktsäulen umfassen, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur1173 dazu ausgelegt sein, elektrische Signale, wie z. B. Eingabe/Ausgabe-Signale (E/A-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik1172 ,1174 zugeordnet sind, weiterzuleiten. In einigen Ausführungsformen ist das Substrat1180 ein Laminatsubstrat auf Epoxidbasis. Das Baugruppensubstrat1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten umfassen. Die Baugruppenanordnung1170 kann über eine Baugruppenzwischenverbindung1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzwischenverbindung1183 kann an eine Oberfläche des Substrats1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen wie eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul weiterzuleiten. - In einigen Ausführungsformen sind die Logikeinheiten
1172 ,1174 mit einer Brücke1182 elektrisch gekoppelt, die dazu ausgelegt ist, elektrische Signale zwischen der Logik1172 ,1174 weiterzuleiten. Die Brücke1182 kann eine dichte Zwischenverbindungsstruktur sein, die einen Weg für elektrische Signale bietet. Die Brücke1182 kann ein Brückensubstrat umfassen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Merkmale zur elektrischen Weiterleitung können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik1172 ,1174 bereitzustellen. - Wenngleich zwei Logikeinheiten
1172 ,1174 und eine Brücke1182 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Chips umfassen. Der eine oder die mehreren Chips können durch null oder mehr Brücken verbunden sein, weil die Brücke1182 entfallen kann, wenn die Logik auf einem einzelnen Chip enthalten ist. Alternativ dazu können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Außerdem können mehrere Logikeinheiten, Chips und Brücken in anderen möglichen Konfigurationen einschließlich dreidimensionaler Konfigurationen miteinander verbunden sein. -
11C zeigt eine Baugruppenanordnung1190 , die mehrere Einheiten von Hardware-Logik-Chiplets umfasst, die mit einem Substrat1180 (z. B. einem Basis-Chip) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie sie hierin beschrieben sind, können aus verschiedenen Silizium-Chiplets zusammengesetzt sein, die separat hergestellt werden. In diesem Zusammenhang ist ein Chiplet eine zumindest teilweise verpackte integrierte Schaltung, die unterschiedliche Logikeinheiten umfasst, die mit anderen Chiplets zu einer größeren Baugruppe zusammengesetzt werden können. Eine vielfältige Menge von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzigen Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets unter Verwendung der aktiven Interposer-Technologie in einen Basis-Chip oder ein Basis-Chiplet integriert werden. Die hier beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt und während der Herstellung zusammengesetzt werden, wodurch die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit IPs mehrerer Richtungen, zu demselben Herstellungsprozess vermieden wird. Durch die Verwendung mehrerer Prozesstechnologien wird die Markteinführungszeit verkürzt und eine kostengünstige Möglichkeit zum Erstellen mehrerer Produkt-SKUs bereitgestellt. Darüber hinaus können die verstreuten IPs unabhängig voneinander mit Energie versorgt werden. Komponenten, die für eine bestimmte Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtenergieverbrauch verringert wird. - Die Hardware-Logik-Chiplets können spezielle Hardware-Logik-Chiplets
1172 , Logik- oder E/A-Chiplets1174 und/oder Speicher-Chiplets1175 umfassen. Die Hardware-Logik-Chiplets1172 und Logik- oder E/A-Chiplets1174 können zumindest teilweise in konfigurierbarer Logik oder Logik-Hardware mit fester Funktionalität implementiert sein und können einen oder mehrere Teile eines der Prozessorkerne, Grafikprozessoren, Parallelprozessoren oder anderer Beschleunigervorrichtungen, die hierin beschrieben sind, umfassen. Die Speicher-Chiplets1175 können DRAM-Speicher (z. B. GDDR, HBM) oder Cache-Speicher (SRAM) sein. - Jedes Chiplet kann als separater Halbleiterchip hergestellt und über eine Zwischenverbindungsstruktur
1173 mit dem Substrat1180 gekoppelt werden. Die Zwischenverbindungsstruktur1173 kann dazu ausgelegt sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats1180 zu leiten. Die Zwischenverbindungsstruktur1173 kann Zwischenverbindungen wie Kontakthügel oder Kontaktsäulen umfassen, ist aber nicht darauf beschränkt. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur1173 dazu ausgelegt sein, elektrische Signale wie beispielsweise Eingangs-/Ausgangssignale (E/A-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik-, E/A- und Speicher-Chiplets zugeordnet sind, zu leiten. - In einigen Ausführungsformen ist das Substrat
1180 ein Laminatsubstrat auf Epoxidbasis. Das Substrat1180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Baugruppenanordnung1190 kann über eine Baugruppenzwischenverbindung1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzwischenverbindung1183 kann mit einer Oberfläche des Substrats1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen wie einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul zu leiten. - In einigen Ausführungsformen können ein Logik- oder E/A-Chiplet
1174 und ein Speicher-Chiplet1175 über eine Brücke1187 elektrisch gekoppelt sein, die dazu ausgelegt ist, elektrische Signale zwischen dem Logik- oder E/A-Chiplet1174 und einem Speicher-Chiplet1175 zu leiten. Die Brücke1187 kann eine dichte Zwischenverbindungsstruktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke1187 kann ein Brückensubstrat aus Glas oder einem geeigneten Halbleitermaterial umfassen. Auf dem Brückensubstrat können elektrische Leitungsmerkmale ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E/A-Chiplet1174 und einem Speicher-Chiplet1175 bereitzustellen. Die Brücke1187 kann auch als Siliziumbrücke oder Zwischenverbindungsbrücke bezeichnet werden. Beispielsweise ist die Brücke1187 in einigen Ausführungsformen eine eingebettete Mehrchip-Zwischenverbindungsbrücke (EMIB). In einigen Ausführungsformen kann die Brücke1187 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein. - Das Substrat
1180 kann Hardwarekomponenten für E/A1191 , Cache-Speicher1192 und andere Hardware-Logik1193 aufwiesen. Eine Struktur1185 kann in das Substrat1180 eingebettet sein, um die Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik1191 ,1193 innerhalb des Substrats1180 zu ermöglichen. In einer Ausführungsform können die E/A1191 , die Struktur1185 , der Cache, die Brücke und andere Hardware-Logik1193 in einen Basis-Chip integriert sein, der auf das Substrat1180 geschichtet ist. - In verschiedenen Ausführungsformen kann eine Baugruppenanordnung
1190 eine kleinere oder eine größere Anzahl von Komponenten und Chiplets aufweisen, die durch eine Struktur1185 oder eine oder mehrere Brücken1187 miteinander verbunden sind. Die Chiplets innerhalb der Baugruppenanordnung1190 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen1187 verwendet werden, um eine Punkt-zu-Punkt-Zwischenverbindung beispielsweise zwischen Logik- oder E/A-Chiplets und Speicher-Chiplets zu ermöglichen. Die Struktur1185 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (z. B. Chiplets1172 ,1174 ,1191 ,1193 ) mit anderen Logik- und/oder E/A-Chiplets zu verbinden. In einer Ausführungsform kann der Cache-Speicher1192 innerhalb des Substrats als globaler Cache für die Baugruppenanordnung1190 , als Teil eines verteilten globalen Caches oder als dedizierter Cache für die Struktur1185 fungieren. -
11D zeigt eine Baugruppenanordnung1194 mit austauschbaren Chiplets1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets1195 können zu standardisierten Schlitzen auf einem oder mehreren Basis-Chiplets1196 ,1198 zusammengesetzt werden. Die Basis-Chiplets1196 ,1198 können über eine Brückenzwischenverbindung1197 gekoppelt werden, die den anderen hier beschriebenen Brückenzwischenverbindungen ähnlich sein kann und beispielsweise eine EMIB sein kann. Speicher-Chiplets können auch über eine Brückenzwischenverbindung mit Logik- oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über eine Zwischenverbindungsstruktur kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für Logik oder E/A oder Speicher/Cache unterstützen. - In einer Ausführungsform können SRAM- und Leistungsabgabeschaltungen in einem oder mehreren der Basis-Chiplets
1196 ,1198 hergestellt werden, die im Vergleich zu den austauschbaren Chiplets1195 , die auf den Basis-Chiplets gestapelt werden, unter Verwendung einer anderen Prozesstechnologie hergestellt werden können. Beispielsweise können die Basis-Chiplets1196 ,1198 unter Verwendung einer größeren Prozesstechnologie hergestellt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere der austauschbaren Chiplets1195 können Speicher-Chiplets (z. B. DRAM-Chiplets) sein. Für die Baugruppenanordnung1194 können basierend auf der Leistungsaufnahme und/oder Rechenleistung, die für das Produkt angestrebt wird, das die Baugruppenanordnung1194 verwendet unterschiedliche Speicherdichten ausgewählt werden. Zudem können Logik-Chiplets mit einer anderen Anzahl von Typen von Funktionseinheiten zum Zeitpunkt der Montage basierend auf der Leistungsaufnahme und/oder Rechenleistung des Produkts ausgewählt werden. Zusätzlich können Chiplets, die IP-Logik-Kerne unterschiedlicher Typen enthalten, in die austauschbaren Chiplet-Steckplätze eingefügt werden, wodurch Hybridprozessorentwürfe ermöglicht werden, die IP-Blöcke verschiedener Technologien mischen und angleichen können. - Beispielhafte integrierte Ein-Chip-System-Schaltung
-
12-13 zeigen beispielhafte integrierte Schaltungen und zugeordnete Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hierin beschriebenen Ausführungsformen hergestellt werden können. Zusätzlich zu dem Dargestellten können andere Logik und Schaltungen einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellencontroller oder Allzweck-Prozessorkerne enthalten sein. -
12 ist ein Blockdiagramm, das eine beispielhafte integrierte Ein-Chip-System-Schaltung1200 , die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform zeigt. Die beispielhafte integrierte Schaltung1200 weist einen oder mehrere Anwendungsprozessoren1205 (z. B. CPUs) und mindestens einen Grafikprozessor1210 auf und kann zusätzlich einen Bildprozessor1215 und/oder einen Videoprozessor1220 aufweisen, von denen jeder ein modularer IP-Kern aus derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung1200 weist eine Peripherie- oder Buslogik auf, die einen USB-Controller1225 , einen UART-Controller1230 , einen SPI/SDIO-Controller1235 und einen I2S/I2C-Controller1240 aufweist. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung1245 aufweisen, die mit einem Controller für die hochauflösende Multimedia-Schnittstelle (HDMI-Controller)1250 und einer Mobilindustrie-Prozessorschnittstellen-Anzeigeschnittstelle (MIPI-Anzeigeschnittstelle)1255 gekoppelt ist. Die Speicherung kann durch ein Flash-Speicher-Untersystem1260 bereitgestellt sein, das einen Flash-Speicher und einen Flash-Speichercontroller aufweist. Die Speicherschnittstelle kann über einen Speichercontroller1265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheitsmaschine1270 auf. -
13-14 sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hierin beschriebenen Ausführungsformen zeigen.13 zeigt einen beispielhaften Grafikprozessor1310 einer integrierten Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform.14 zeigt einen zusätzlichen beispielhaften Grafikprozessor1340 einer integrierten Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor1310 von13 ist ein Beispiel eines Grafikprozessorkerns mit niedriger Leistungsaufnahme. Der Grafikprozessor1340 von14 ist ein Beispiel eines Grafikprozessorkerns mit höherer Rechenleistung. Die Grafikprozessoren1310 ,1340 können jeweils Varianten des Grafikprozessors1210 von12 sein. - Wie es in
13 gezeigt ist, weist der Grafikprozessor1310 einen Vertexprozessor1305 und einen oder mehrere Fragmentprozessoren1315A-1315N (z. B.1315A ,1315B ,1315C ,1315D , bis1315N-1 ,1315N ) auf. Der Grafikprozessor1310 kann unterschiedliche Schattiererprogramme über eine separate Logik ausführen, so dass der Vertexprozessor1305 dazu optimiert ist, Operationen für Vertexschattiererprogramme auszuführen, während der eine oder die mehreren Fragmentprozessoren1315A-1315N Fragmentschattierungsoperationen (z. B. Pixelschattierungsoperationen) für Fragment- oder Pixelschattiererprogramme ausführen. Der Vertexprozessor1305 führt die Vertexverarbeitungsstufe der 3D-Grafik-Pipeline durch und erzeugt Primitiv- und Vertexdaten. Der eine oder die mehreren Fragmentprozessoren1315A-1315N verwenden Primitiv- und Vertexdaten, die durch den Vertexprozessor1305 erzeugt werden, um einen Frame-Puffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind der eine oder die mehreren Fragmentprozessoren1315A-1315N dazu optimiert, Fragmentschattiererprogramme auszuführen, die in der OpenGL-API bereitgestellt sind und verwendet werden können, um ähnliche Operationen durchzuführen wie ein Pixelschattiererprogramm, das in der Direct-3D-API bereitgestellt ist. - Der Grafikprozessor
1310 weist zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs)1320A-1320B , Cache(s)1325A-1325B und Schaltungszwischenverbindung(en)1330A-1330B auf. Die eine oder mehreren MMUs1320A-1320B stellen eine Virtuell-zu-Physisch-Adresszuordnung für den Grafikprozessor1310 einschließlich des Vertexprozessors1305 und/oder des einen oder der mehreren Fragmentprozessoren1315A-1315N bereit, die auf Vertex- oder Bild-/Texturdaten, die in dem Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Texturdaten, die in dem einen oder den mehreren Caches1325A-1325B gespeichert sind, verweisen kann. In einer Ausführungsform können die eine oder mehreren MMU(s)1320A-1320B mit anderen MMUs innerhalb des Systems einschließlich einer oder mehrerer MMUs, die dem einen oder den mehreren Anwendungsprozessoren1205 , Bildprozessor1215 und/oder Videoprozessor1220 von12 zugeordnet sind, synchronisiert sein, so dass jeder Prozessor1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder mehreren Schaltungszwischenverbindungen1330A-1330B ermöglichen es dem Grafikprozessor1310 gemäß Ausführungsformen mit anderen IP-Kernen innerhalb des SoC eine Schnittstelle zu bilden, entweder über einen internen Bus des SoC oder über eine direkte Verbindung. - Wie es in
14 gezeigt ist, umfasst der Grafikprozessor1340 die eine oder die mehreren MMU(s)1320A-1320B , Caches1325A-1325B und Schaltungszwischenverbindungen1330A-1330B des Grafikprozessors1310 von13A . Der Grafikprozessor1340 umfasst einen oder mehrere Schattiererkerne1355A-1355N (z. B.1455A ,1355B ,1355C ,1355D ,1355E ,1355F bis1355N-1 und1355N ), was eine vereinheitlichte Schattiererkernarchitektur bietet, in der ein einzelner Kern oder Typ oder Kern alle Typen von programmierbarem Schattierercode einschließlich Schattiererprogrammcode zum Implementieren von Vertexschattierern, Fragmentschattierern und/oder Rechenschattierern ausführen kann. Die genaue Anzahl von vorhandenen Schattiererkernen kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem umfasst der Grafikprozessor1340 einen Zwischenkernaufgabenverwalter1345 , der als ein Strangabfertiger fungiert, um Ausführungsstränge an einen oder mehrere Schattiererkerne1355A-1355N zu entsenden, und eine Kachelungseinheit1358 zum Beschleunigen von Kachelungsoperationen für kachelbasiertes Rendern, wobei Renderoperationen für eine Szene in Bildraum unterteilt werden, um zum Beispiel eine lokale räumliche Kohärenz innerhalb einer Szene zu nutzen oder um die Verwendung von internen Caches zu optimieren. - Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
- Während Fern-Grafikserver Bildframes viel schneller als die Spielvorrichtung eines typischen Anwenders rendern können, gibt es andere Herausforderungen, die das Echtzeit-Spiel-Anwendererlebnis beeinträchtigen können, wie z. B. die durch das Netz verursachte Latenz und Qualitätsschwankungen aufgrund der Datenkomprimierung. Für bestimmte Arten von Spielen, wie z. B. Spiele mit erweiterter Realität (AR-Spiele) und virtueller Realität (VR-Spiele), sind leistungsstarke Netzplattformen erforderlich, um die benötigte Latenz zu erzielen.
- Ausführungsformen der Erfindung verbessern die Latenz, indem sie die Arbeitslast zwischen der lokalen GPU (z. B. für Rechenoperationen mit geringer Latenz) und einem Auslagern anderer Arbeiten an Fernverarbeitungsbetriebsmittel aufteilen, ohne dass die Grafikanwendung die Fernverbindung verwalten muss.
- In einer Ausführungsform wird die Remote-GPU-Unterstützung als virtueller Grafikadapter in dem Betriebssystem dargestellt (z. B. als eine oder mehrere „Geister“-GPUs). Aufgrund dieser Integration können Anwendungen wie bei physischen GPUs die aktuellen Grafik- und Computer-APIs verwenden, um auf die Geister-GPUs zuzugreifen. Lokale GPUs können vollständig ausgenutzt werden, wenn ausreichend lokale Berechnungen verfügbar sind, während in einer Ausführungsform zusätzliche „Geister“-GPUs aktiviert werden, wenn zusätzliche Berechnungen erforderlich sind.
-
15A zeigt eine spezielle Implementierung, bei der die Grafikverarbeitungsbetriebsmittel1500 mehrere lokale physische GPUs1505-1506 und mehrere Geister-GPUs1515-1517 , die den Client1502 über ein Netz1592 mit Fernverarbeitungsbetriebsmitteln1525 koppeln, umfassen. Es ist zu beachten, dass die Geister-GPU1560 verschiedene Arten von Pipelines repräsentieren kann, einschließlich, aber nicht beschränkt auf Rasterisierungspipelines, Pipelines für maschinelles Lernen, Strahlverfolgungspipelines, Medienpipelines, Kopierpipelines und Rechenpipelines. Obwohl sich bestimmte Beschreibungen nachstehend auf bestimmte Arten von Pipelines konzentrieren, sind die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Art von Grafikverarbeitungsbetriebsmitteln beschränkt. Darüber hinaus können die Fernverarbeitungsbetriebsmittel1525 Allzweckverarbeitungsbetriebsmittel wie CPUs (z. B. Xeon-CPUs, Core-i7-CPUs usw.) und anwendungsspezifische Beschleuniger umfassen. Beispielsweise können die Geister-GPUs1517-1515 Verarbeitungsfähigkeiten repräsentieren, die die physischen GPUs1505-1506 nicht nativ unterstützen (z. B. Strahlverfolgungs fähigkeiten). - In einer Implementierung sind sowohl die Geister-GPUs
1515-1517 als auch die physischen GPUs1505-1506 für die Anwendung1505 und/oder einen Geister-GPU-bewussten Planer1510 freigelegt. In einer Ausführungsform verwaltet die Anwendung1505 mehrere Befehlspuffer1511 , die jeweils Arbeit für einen anderen Strang enthalten können. Der Geister-GPU-bewusste Planer1510 (der eine separate Komponente sein kann, die von mehreren Anwendungen gemeinsam genutzt wird, anstatt in eine Anwendung integriert zu sein, wie es in15 dargestellt ist) plant die Grafikarbeit für die physischen GPUs1505-1506 und die Geister-GPUs1515-1517 basierend auf den Grafikverarbeitungsfähigkeiten und -eigenschaften der Geister-GPUs und physischen GPUs (z. B. Unterschiede in der Latenz, der Grafikverarbeitungsbandbreite usw.) auf intelligente Weise. Wenn beispielsweise die physischen GPUs1505-1506 über ausreichende Grafikverarbeitungsbetriebsmittel verfügen, um die erforderliche Grafikarbeit angemessen auszuführen, kann der Geister GPU-bewusste Planer alle Arbeiten an die physischen GPUs1505-1506 senden. - In einer Ausführungsform kann mindestens ein Teil der Planung von den Fernverarbeitungsbetriebsmitteln (RPR)
1525 ausgeführt werden. Wie es in15B dargestellt ist, sendet der lokale Planer1510 eine Arbeitsanforderung, die einen Stapel verschiedener Typen von Arbeit umfasst, an die Geister-GPU1560 , die die Arbeit an die Fernverarbeitungsbetriebsmittel1525 weiterleitet. In einer Ausführungsform enthält die Anforderung einen Satz von Parametern und/oder Anforderungen für die Arbeit, wie beispielsweise eine minimale akzeptable Latenz, Auflösung, Genauigkeit usw. - Ein Betriebsmittelmanager
1550 sendet eine Bestätigung an die Geister-GPU1560 , die angibt, dass (1 ) er die gesamte Arbeit gemäß den spezifizierten Parametern/Anforderungen verarbeiten wird; (2 ) er einen Teil der Arbeit gemäß den angegebenen Parametern/Anforderungen verarbeiten wird; oder (3) er keine der Arbeiten gemäß den Parametern/Anforderungen verarbeiten kann. Für die Arbeit, die angenommen wurde, plant der Betriebsmittelmanager1550 die Arbeit über einen geeigneten Satz von Verarbeitungspipelines1551-1556 hinweg (nämlich basierend auf dem Typ der angeforderten Arbeit) und überträgt die Ergebnisse nach Abschluss zurück an die Geister-GPU1560 . In dem in15B gezeigten Beispiel umfassen die Verarbeitungspipelines Rasterisierungspipelines1551 zum Durchführen einer Rasterisierung von Grafikobjekten und/oder zugehörigen Operationen; Pipelines für maschinelles Lernen1552 zum Durchführen von Operationen maschinellen Lernens (z. B. zusammengelegten Multiplikations-Akkumulations-Operationen mit gemischter Genauigkeit); Strahlverfolgungspipelines1553 zum Durchführen von Strahlverfolgungsoperationen (z. B. Strahldurchquerung, Schnitt, globale Beleuchtung usw.); Medienpipelines1554 zur Medienverarbeitung (z. B. Videocodierung/-decodierung); Rechenpipelines1555 für parallele Allzweck-Rechenoperationen; und Kopierpipelines1556 zum Durchführen von Bitblockübertragungen und anderen Kopieroperationen. - Somit wird in der in
15B gezeigten Ausführungsform mindestens ein Teil der Arbeitsplanung auf den RPR1525 ausgeführt. Obwohl in15B nur eine einzige Geister-GPU1560 gezeigt ist, können mehrere solcher Geister-GPUs und zugehörige Fernverarbeitungsbetriebsmittel genutzt werden. Beispielsweise kann jede der Geister-GPUs1515-1517 in15A einem anderen Satz von Verarbeitungsbetriebsmitteln in einem anderen (oder demselben) Cloud-Dienst, der RPRs bereitstellt, zugeordnet sein. - Unter erneuter Bezugnahme auf
15A lagert der Geister-GPU-bewusste Planer1510 unter Umständen, unter denen die physischen GPUs1505-1506 die Grafikarbeit nicht angemessen verarbeiten können, einige Grafikarbeiten1561 auf die Geister-GPUs aus. In diesem Fall kann der Planer1510 die Grafikarbeit unterteilen, wobei die latenzempfindliche Arbeit1560 auf den physischen GPUs1560 (die, da sie lokal sind, keine netzbedingte Latenz aufweisen) geplant werden und andere Grafikarbeiten auf den Geister-GPUs1515-1516 geplant werden. - In einer Ausführungsform werden die Geister-GPUs
1515-1517 während der Vorrichtungsaufzählungsphase für den Planer1510 /die Anwendung1505 sichtbar gemacht. Der Planer1510 /die Anwendung1505 ordnet dann Vorrichtungsinstanzen den Geister-GPUs1515-1517 zu, und die Auslagerungsarbeit1561 wird an diese Instanzen gesendet. Somit wird die „Cloud“-Komplexität der Geister-GPUs1515-1517 von den Anwendungen weg abstrahiert. - Neue Entwicklungen in der Grafikverarbeitungstechnologie ermöglichen eine nahtlosere Integration mehrerer GPUs. Beispielsweise legen neue APIs wie DX12 und Vulkan mehrere GPUs auf API-Ebene frei, wodurch die Anwendung
1505 die Flexibilität bekommt, die Arbeitslast mit einer viel feineren Körnigkeit aufzuteilen. Darüber hinaus bieten die neuen APIs Möglichkeiten für die Anwendung1505 , Befehlspuffer effizienter zu verwalten, einschließlich asynchroner Befehlspuffererstellung, Aufzeichnung/Wiedergabe von Befehlspuffern und Bündeln. Diese Funktionen tragen dazu bei, die redundanten Befehlspuffererstellungen in früheren API-Modellen zu reduzieren. -
16 zeigt zusätzliche Einzelheiten einer Ausführungsform, bei der die Anwendung1505 mehrere Stränge verwaltet, von denen jeder einem von mehreren Befehlspuffern1611A-D zugeordnet ist. Der Geister-GPU-bewusste Planer1510 weist Befehle aus den Befehlspuffern1611A-D jeweils Befehlswarteschlangen1615-1617 der Geister-GPUs1515-1517 und einer Befehlswarteschlange1605 einer auf dem Client1502 installierten physischen GPU1505 zu. Wie erwähnt versucht der Geister-GPU-bewusste Planer1510 , latenzempfindliche Arbeit an die Befehlswarteschlange1605 der physischen GPU1505 zu senden. In einer Ausführungsform wird die an die Geister-GPU-Befehlswarteschlangen1615-1617 gesendete Arbeit von den Geister-GPUs1515-1517 an Fernverarbeitungsbetriebsmittel übertragen, bei denen die Arbeitslasten in einer Anordnung von GPUs, CPUs und/oder FPGAs ausgeführt werden können. Die Ergebnisse werden über die Geister-GPUs1515-1517 auf der Clientseite an die Anwendung1505 und/oder die physische GPU1505 zurückgesendet. Die Ergebnisse werden dann verwendet, um den endgültig gerenderten Frame in einem Framepuffer auf der physischen GPU1505 zusammenzustellen, und sobald dies abgeschlossen ist, wird die physische GPU1505 angewiesen, den Frame auf der lokalen Anzeige1590 anzuzeigen. - In einer Ausführungsform wird einer Anwendung
1505 die vollständige Sichtbarkeit aller GPUs, einschließlich virtueller oder „Geister“-GPUs während der GPU-Aufzählungsphase gegeben. Die Anwendung kann dann Vorrichtungsobjekte auf diesen Geister-GPUs erstellen und auf diese als reguläre GPUs zugreifen. In einer Ausführungsform sendet die Anwendung Arbeitslasten an die Geister-GPU-Instanzen, um durch Abfragen der Ausführungszeit die Gesamtlatenz zu bewerten. Basierend auf der gemessenen Latenz kann die Anwendung die Arbeitslast auf verschiedene GPUs aufteilen und die lokale GPU1505 verwenden, um den endgültigen Frame zu erstellen. Die von cloudbasierten Grafikverarbeitungsbetriebsmitteln1525 erzeugten Ergebnisse werden an die virtuellen Adapter zurückgesendet, die den Geister-GPUs zugeordnet sind. Die Anwendung1505 kombiniert die Ergebnisse mit Ergebnissen, die von der lokalen GPU1505 erzeugt werden, auf der der endgültige Frame erstellt wird. - Alternativ ist sich die Anwendung
1505 in einer Implementierung der heterogenen Fähigkeiten der physischen und virtuellen GPUs nicht bewusst und ein Geister-GPU-bewusster Planer führt die Planung von Strängen im Namen der Anwendung durch. - Unabhängig davon, welche Entität die Planung durchführt, können in einer Ausführungsform bestimmte Arten von latenztoleranten Aufgaben/Strängen auf die Geister-GPUs ausgelagert werden, während latenzunempfindliche Aufgaben/Stränge zur Ausführung auf den physischen GPUs in die Warteschlange gestellt werden. Diese latenztoleranten Aufgaben/Stränge umfassen (ohne darauf beschränkt zu sein) Aufgaben, die nicht Frame für Frame aktualisiert werden. Ein Beispiel ist die Verwendung der Fernverarbeitungsbetriebsmittel zum Rendern der dynamischen Reflexionsabbildung (z. B. Kubusabbildungs-Rendern vom Standort eines Objekts aus), die Spielemaschinen normalerweise nicht Frame für Frame aktualisieren, während die lokale GPU den Rest der Durchgänge rendert, um den endgültigen Frame zusammenzustellen.
- Das Folgende sind Beispiele für Rendertechniken, die latenztolerant sind und daher gemäß den Ausführungsformen der Erfindung auf Geister-GPUs ausgelagert werden können:
- • Dynamische Umgebungsabbildung (Reflexionen/Berechnungen)
- • Indirekte Beleuchtung/globale Beleuchtung (z. B. Szenarien mit festem Licht)
- • Traditionelle Spielphysik (Kaustik, Partikelsimulationen, Rauch, Stoffsimulation, Haarsimulation)
- • Hybride Strahlverfolgung
- • KI-basierte Ansätze (z. B. Charakteranimation, Spielphysik durch Inferenz)
- • KI-basierte Texturerzeugung, Modellerzeugung, Gelände-/Kartenerzeugung
- • Echte räumliche Audioverarbeitung
- • KI-basierte Stilübertragung (z. B. wird eine GPU zum Rendern und eine andere GPU zur Stilübertragung verwendet)
- • Double-Rendern
- Das Diagramm in
17 zeigt ein Szenario, in dem Befehlspuffer1611A-D parallel zu jeder GPU1515-1517 ,1505 separat gesendet und von der lokalen GPU1505 synchronisiert werden. Die resultierende Frame-Zeit1700 , um den endgültigen Frame unter Verwendung von Ergebnissen aus den Geister-GPUs1515-1517 zu erzeugen, ist ebenfalls gezeigt. - Geister-GPUs, wie sie hierin beschrieben sind, können auch von vorhandenen Anwendungen, Rahmen für tiefes Lernen und Renderanwendungen verwendet werden, um die Fern-GPU-Funktionen zu nutzen, indem die GPU-Arbeitslasten an die virtuellen Grafikadapter der Geister-GPUs gesendet werden.
- In einer Ausführungsform wird ein Profil erzeugt, das die Anforderungen und Fähigkeiten für die „Geister-GPUs“ spezifiziert, die Latenzwerte (z. B. minimale/maximale Latenzwerte), Bandbreite, Berechnung, Kosten und Leistung umfassen können. Sobald das Profil festgelegt ist, kann der Geister-GPU-bewusste Planer
1510 angesichts der Fähigkeiten und Einschränkungen dieser GPUs Arbeit an edgebasierte bzw. cloudbasierte „Geister-GPUs“ senden. - Obwohl eine 1:1-Beziehung von Geister-GPU:Cloud-GPU für viele Arbeitslasten und Programmiermodelle geeignet sein kann, kann die cloudseitige Aufgabenverteilung andere Zuweisungen zum Planen von Arbeiten auf den verfügbaren Computern und Betriebsmitteln in der Cloud vornehmen. Die Zuweisungen können basierend auf den Merkmalen der auszuführenden Arbeit dynamisch durchgeführt werden. Somit kann in einigen Ausführungsformen eine 1:N-Beziehung (Geister-GPU: Cloud-GPU) existieren, wobei N ein beliebiger Wert ist, der Bruchteile einschließt (z. B. um einen virtualisierten Teil einer GPU zuzuweisen).
- In einer Ausführungsform liefert die Anwendung einen Abhängigkeitsgraphen an die Geister-GPU-Befehlswarteschlange oder einen indirekten Ausführungskernel zum Erzeugen von cloudseitigen Befehlspuffern, die gegen eine Cloud-Warteschlange gesendet werden können. Diese Techniken ermöglichen entweder eine herstellerspezifische Verteilung (basierend auf Kacheln, geteiltem Rendern, Rendern mit abwechselnden Frames usw.) oder ein anwendergeführtes Übermittlungsschema zum Erzeugen und Konsumieren von Arbeiten in der Cloud.
-
18 zeigt eine Ausführungsform für die Erstellung und Verwendung von Geister-GPUs auf einem Client-Computer. Ein(e) GPU-Konfigurations-und-SteuerModul oder -Anwendung 1801 (z. B. eine Geister-GPU-Erstelleranwendung) ermöglicht es dem Anwender, Geister-GPUs für einen Geister-GPU-Generator1802 anzugeben, der mit dem Betriebssystem1803 kommuniziert, um drei Geister-GPUs in dem System zu registrieren. In einer Ausführungsform weist jede Geister-GPU eine Verbindung zu dem Cloud-Dienst auf. Eine registrierte Geister-GPU wird jedoch von dem Vorrichtungsmanager1810 des Clients als eine weitere physische GPU behandelt. In diesem Beispiel werden drei Geister-GPU-Adapter1811 in dem Vorrichtungsmanager1810 angezeigt. - Wenn eine Anwendung
1505 Zugriff auf Grafikverarbeitungsbetriebsmittel benötigt, kann die Anwendung alle verfügbaren GPUs einschließlich der Geister-GPUs1811 während der GPU-Aufzählungsphase1804 betrachten. Die Anwendung1505 kann nun Vorrichtungsobjekte auf diesen Geister-GPUs1811 erstellen und auf diese als reguläre GPUs zugreifen. Die Anwendung kann auch Arbeitslasten an die Geister-GPU-Instanzen senden, um durch Abfragen der Ausführungszeit die Gesamtlatenz zu bewerten. - Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in
19 dargestellt. Das Verfahren kann im Zusammenhang mit den oben beschriebenen Architekturen implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt. - Bei
1901 werden eine oder mehrere Geister-GPUs auf einem System, das eine oder mehrere physische GPUs aufweist, registriert und konfiguriert. Wie es bereits erwähnt wurde, muss möglicherweise ein virtueller Adapter oder Treiber installiert werden, der den Geister-GPUs zugeordnet ist, so dass sie als echte GPUs in dem System erscheinen. - Bei
1902 werden die Geister-GPUs und die physischen GPUs in dem System aufgelistet (z. B. als Antwort auf eine Anwendung). Bei1903 wird eine Anwendung mit mehreren Grafiksträngen ausgeführt. Wie erwähnt kann in einigen Implementierungen jedem Grafikstrang eine eigene Befehlswarteschlange zugewiesen werden, die einer bestimmten GPU zugewiesen werden kann. - Bei
1904 werden Ausführungsparameter der Grafikstränge im Hinblick auf Ausführungsmetriken, die den Geister-GPUs zugeordnet sind, bewertet. Beispielsweise können die Ausführungsparameter eine Angabe von Anforderungen der Grafikstränge bezüglich maximaler Latenz und/oder Bandbreite enthalten und die Geister-GPU-Metriken können auch Daten enthalten, die sich auf Latenz und/oder Bandbreite beziehen (z. B. die durchschnittliche Latenz/Bandbreite, die aktuelle Latenz/Bandbreite basierend auf den aktuellen Netzbedingungen usw.). - Bei
1905 werden basierend auf dieser Bewertung bestimmte Grafikstränge für die Ausführung auf den Geister-GPUs geplant. Wenn die Geister-GPUs beispielsweise in der Lage sind, Ergebnisse für Stränge mit einer akzeptablen Latenz zu erzeugen, können diese Stränge auf den Geister-GPUs geplant werden, wodurch die Arbeit aus der physischen GPU ausgelagert wird. Die verbleibenden Stränge werden auf der physischen GPU geplant. - Bei
1906 werden die Geister-GPU-Stränge in einen bestimmten Cloud-Dienst ausgelagert, wo sie von Grafikverarbeitungsbetriebsmitteln in dem Cloud-Dienst ausgeführt werden. Wie erwähnt können die Grafikverarbeitungsbetriebsmittel spezielle Hardware (z. B. Strahldurchquerungs-/Schnitt-Hardware, Tensorausführungs-Hardware, Hardware für globale Beleuchtung usw.) und CPUs, GPUs und/oder FPGAs umfassen. Die Ergebnisse werden von dem Cloud-Dienst an die Geister-GPUs geliefert, die die Ergebnisse an die Anwendung und/oder die physische GPU weiterleiten. Bei1907 verwendet die physische GPU die Ergebnisse, um den endgültigen Frame zu erzeugen, der auf der lokalen Anzeigevorrichtung angezeigt wird. - Ein Vorteil, den diese Ausführungsformen bieten, besteht darin, dass einige Aufgaben wie Strahlverfolgung, die häufig auf triviale Weise auf Rechenbetriebsmittel aufgeteilt werden können, jetzt eine logische Entität in der Cloud haben, um den Lastausgleich zu erleichtern. In Szenarien mit geteiltem Rendern muss die Anwendung die Fernrenderunterstützung nicht kennen. Vielmehr muss sie nur wissen, dass die Geister-GPUs vorhanden sind, und die Fähigkeiten der Geister-GPUs verstehen (z. B. die Verarbeitungsmetriken, die verschiedenen Arten der Grafikverarbeitung zugeordnet sind, einschließlich der Latenz).
- In einer Ausführungsform der Erfindung nutzt die Anwendung, die sich mehrerer GPUs bewusst ist, APIs wie DX12 oder Vulkan, um Befehlspuffer asynchron zu erstellen und sie an die jeweiligen GPUs (entweder lokale physische GPUs oder Geister-GPUs) zu senden.
- Wie es in
20A dargestellt ist, kann eine mehrschichtige Architektur aus Geister-GPUs implementiert werden. Insbesondere greifen Clients2010 basierend auf den Geister-GPU-Konfigurationen auf Verarbeitungsbetriebsmittel von Edge-Diensten2020 zu, es oben beschrieben ist. In diesem Beispiel können die Clients2010 lokale GPUs und Geister-GPUs oder nur Geister-GPUs (d. h. ohne lokale GPU-Hardware) umfassen. Wie sie hierin verwendet werden, umfassen „Edge“-Dienste Ferndienste, die hinsichtlich der Netzlatenz den Clients2010 am nächsten sind (z. B. direkt innerhalb des Internetdienstanbieternetzes der Clients oder des 5G-Netzes im Fall von Mobilfunkanbietern gehostet werden). In dieser Ausführungsform umfassen die Edge-Dienste2020 physische GPUs, können jedoch auch Geister-GPUs umfassen, die Fernverarbeitungsbetriebsmitteln innerhalb eines oder mehrerer Cloud-Dienste2030 zugeordnet sind. Unter Verwendung dieser Architektur kann ein Betriebsmittelmanager innerhalb der Edge-Dienste2020 eine Client-Anforderung auswerten, um zu bestimmen, ob er die Verarbeitung selbst durchführt oder die Verarbeitung auf Verarbeitungsbetriebsmittel innerhalb der Cloud-Dienste2030 auslagert. - In jeder der oben beschriebenen Ausführungsformen können die „Geister-GPUs“ oder physischen GPUs Geister-xPUs oder physische xPUs sein, wobei xPU jede Form von Prozessor (z. B. CPUs, digitale Signalverarbeitungseinheiten, Tensorverarbeitungseinheiten, Strahlverfolgungsverarbeitungseinheiten, Vektorverarbeitungseinheiten usw.) zum Verarbeiten oder Auslagern jeglicher Art von Datenverarbeitungsarbeit an einen entfernten Prozessor bezeichnet.
20B zeigt eine Ausführungsform, in der Clients2050 mit einer oder mehreren Geister-xPUs zum Auslagern von Arbeit und optional einer oder mehreren lokalen xPUs ausgestattet sind (d. h. der Client kann die physische Ausstattung zum Ausführen der Verarbeitungsarbeit haben oder auch nicht). In ähnlicher Weise umfassen die Edge-Dienste2060 lokale xPUs und Geister-xPUs und weiter oben in der Hierarchie können Cloud-Dienste2070 lokale xPUs und Geister-xPUs aufweisen. Beispielsweise weist in einer Ausführungsform eine Vektorverarbeitungseinheit (VPU) auf dem Client2010 zusätzliche Geister xPUs zu, um Rechenarbeiten ähnlich wie die VPU auszuführen. - In einer Implementierung wird der Betriebsmittelmanager diese Bestimmung basierend auf den Parametern und/oder Latenzanforderungen vornehmen, die der Client-Anforderung zugeordnet sind. Wenn die Edge-Dienste
2020 beispielsweise die Anforderung innerhalb der angegebenen Latenz und gemäß den angegebenen Parametern verarbeiten können, geschieht dies, wenn das Auslagern der Anforderung an die Cloud-Dienste2030 die Latenz überschreitet. Bestimmte Arten von Arbeiten, für die eine höhere Latenz akzeptabel ist und/oder für die spezielle Plattformen (z. B. Queantenrechenplattformen) erforderlich sind, können jedoch über Geister-GPUs, die auf den Edge-Diensten ausgebildet sind, auf die Cloud-Dienste2030 ausgelagert werden. Auf diese Weise können mehrere Ebenen von Verarbeitungsbetriebsmitteln und Geister-GPUs ausgebildet werden, um Arbeit lokal zu verarbeiten und Arbeit auszulagern, die ausgelagert werden kann. - Zudem können zusätzliche Ebenen innerhalb der Wohnstätte des Anwenders ausgebildet sein. Beispielsweise kann ein leistungsfähiger Server in der Wohnstätte des Anwenders mehrere Clients bedienen. Dieser Server kann eine oder mehrere Geister-GPUs aufweisen, um die Arbeit an den Netzanbieter des Anwenders auszulagern. Der Netzanbieter kann die Gesamtheit oder einen Teil der Arbeit ausführen und bestimmte Arbeiten über seine eigenen Geister-GPUs an Cloud-Dienste auslagern. Schließlich kann jeder Cloud-Dienst selbst Geister-GPUs aufweisen, um die Arbeit auf andere Cloud-Dienste auszulagern.
- Jeder Auslagerungsanforderung können verschiedene Parameter zugeordnet sein. Beispielsweise können die Kosten für die Verwendung von Fernverarbeitungsbetriebsmitteln in Kombination mit Latenz und/oder Leistungsfähigkeit bewertet werden. Beispielsweise kann die Anforderung eine maximale Latenz, eine minimale Leistungsfähigkeit und einen maximal zulässigen Kostenwert angeben. Der Planer auf dem Client
2010 oder dem Edge-Dienst2020 kann dann bestimmen, wie die Arbeit verteilt werden soll, um die Latenz- und Leistungsfähigkeitsanforderungen zu erfüllen und gleichzeitig die Kosten zu minimieren. - Wie erwähnt können die Ausführungsformen der Erfindung zusätzlich zu Grafikarbeiten andere Arten von Arbeiten einschließlich (aber nicht beschränkt auf) Strahlverfolgungsoperationen und Operationen maschinellen Lernens auslagern. Der Rest dieser Patentanmeldung enthält spezifische Beispiele für diese zusätzlichen Typen von Arbeiten.
- Strahlverfolgung mit maschinellem Lernen
- Wie oben erwähnt ist die Strahlverfolgung eine Grafikverarbeitungstechnik, bei der ein Lichttransport durch physikalisch basiertes Rendern simuliert wird. Eine der wichtigsten Operationen bei der Strahlverfolgung ist die Verarbeitung einer Sichtbarkeitsabfrage, die das Durchqueren und Testen von Knoten in einer Begrenzungsvolumenhierarchie (BVH) erfordert.
- Auf Strahl- und Pfadverfolgung basierte Techniken berechnen Bilder durch Verfolgen von Strahlen und Pfaden durch jedes Pixel und durch Verwenden von Zufallsabtastung, um fortgeschrittene Effekte wie Schatten, Glanz, indirekte Beleuchtung usw. zu berechnen. Das Verwenden von nur wenigen Abtastwerten ist schnell, aber erzeugt verrauschte Bilder, während das Verwenden vieler Abtastwerte Bilder von hoher Qualität erzeugt, jedoch kostenintensiv ist.
- Maschinelles Lernen umfasst jegliche Schaltung, jeglichen Programmcode oder jegliche Kombination davon, die in der Lage ist, die Durchführung einer bestimmten Aufgabe zunehmend zu verbessern oder zunehmend genauere Vorhersagen oder Entscheidungen zu treffen. Einige maschinell lernende Maschinen können diese Aufgaben ausführen oder diese Vorhersagen/Entscheidungen treffen, ohne explizit dafür programmiert zu werden, die Aufgaben auszuführen oder die Vorhersagen/Entscheidungen zu treffen. Es gibt eine Vielzahl von Techniken des maschinellen Lernens, einschließlich (aber nicht beschränkt auf) beaufsichtigtes und halbbeaufsichtigtes Lernen, unbeaufsichtigtes Lernen und verstärkendes Lernen
- In den letzten Jahren gab es eine bahnbrechende Lösung für die Strahl- und Pfadverfolgung zur Verwendung in Echtzeit in Form von „Entrauschen“ - dem Prozess der Verwendung von Bildverarbeitungstechniken zum Erzeugen von qualitativ hochwertigen gefilterten/entrauschten Bildern aus verrauschten Eingaben mit geringer Abtastungszahl. Die effektivsten Entrauschungstechniken beruhen auf Maschinenlerntechniken, bei denen eine maschinell lernende Maschine erlernt, wie ein verrauschtes Bild wahrscheinlich aussehen würde, wenn es mit mehr Abtastungen berechnet worden wäre. In einer bestimmten Implementierung wird das maschinelle Lernen durch ein faltendes neuronales Netz (CNN) durchgeführt; die der Erfindung zugrundeliegenden Prinzipien sind jedoch nicht auf eine CNN-Implementierung beschränkt. Bei einer solchen Implementierung werden Trainingsdaten mit Eingaben mit niedriger Abtastzahl und Feldreferenz erzeugt. Das CNN wird trainiert, um das konvergierte Pixel aus einer Nachbarschaft von verrauschten Pixeleingaben um das fragliche Pixel vorherzusagen.
- Obwohl sie nicht perfekt ist, hat sich diese Entrauschungstechnik auf KI-Basis als überraschend wirksam erwiesen. Die Einschränkung besteht jedoch darin, dass gute Trainingsdaten erforderlich sind, da das Netz ansonsten möglicherweise die falschen Ergebnisse vorhersagt. Wenn ein Animationsfilmstudio beispielsweise ein Entrauschungs-CNN an früheren Filme mit Szenen an Land trainiert und dann versucht, das trainierte CNN zum Entrauschen von Bildern aus einem neuen Film auf dem Wasser zu verwenden, wird die Entrauschungsoperation suboptimal durchgeführt.
- Um dieses Problem anzugehen, sammelt eine Ausführungsform der Erfindung Lerndaten dynamisch während des Renderns und trainiert fortlaufend eine maschinell lernende Maschine wie beispielsweise ein CNN basierend auf den Daten, auf denen sie aktuell ausgeführt wird, und verbessert somit fortlaufend die maschinell lernende Maschine für die jeweilige Aufgabe. Diese Ausführungsform kann immer noch eine Trainingsphase vor der Laufzeit durchführen, setzt jedoch die Anpassung der Maschinenlerngewichte nach Bedarf während der Laufzeit fort. Zusätzlich vermeidet diese Ausführungsform den hohen Aufwand der Berechnung der Referenzdaten, die für das Training erforderlich sind, indem die Erzeugung von Lerndaten auf einen Unterbereich des Bildes für jeden Frame oder alle N Frames beschränkt wird. Insbesondere werden die verrauschten Eingaben eines Frames erzeugt, um das gesamte Frame mit dem aktuellen Netz zu entrauschen. Zusätzlich wird ein kleiner Bereich von Referenzpixeln erzeugt und für ein fortlaufendes Training verwendet, wie es nachstehend beschrieben wird.
- Obwohl in Bezug auf bestimmte Ausführungsformen eine CNN-Implementierung beschrieben wird, kann jede Form einer maschinell lernenden Maschine verwendet werden, einschließlich, aber nicht beschränkt auf Systeme, die beaufsichtigtes Lernen (z. B. Erstellen eines mathematischen Modells eines Datensatzes, der sowohl die Eingaben als auch die gewünschten Ausgaben enthält), unbeaufsichtigtes Lernen (z. B. Auswerten der Eingabedaten für bestimmte Arten von Strukturen) und/oder eine Kombination von beaufsichtigtem und unbeaufsichtigtem Lernen durchführen.
- Bestehende Entrauschungsimplementierungen arbeiten in einer Trainingsphase und einer Laufzeitphase. Während der Trainingsphase wird eine Netztopologie definiert, die einen Bereich von NxN Pixeln mit verschiedenen Datenkanälen pro Pixel wie Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo empfängt und eine endgültige Pixelfarbe erzeugt. Ein Satz von „repräsentativen“ Trainingsdaten wird unter Verwendung von Eingaben mit niedriger Abtastungszahl für ein Frame und unter Bezugnahme auf die „gewünschten“ Pixelfarben, die mit einer sehr hohen Abtastungszahl berechnet wurden, erzeugt. Das Netz wird auf diese Eingaben hin trainiert und erzeugt eine Menge von „idealen“ Gewichten für das Netz. In diesen Implementierungen werden die Referenzdaten verwendet, um die Netzgewichte so zu trainieren, dass die Netzausgabe dem gewünschten Ergebnis am besten entspricht.
- Zur Laufzeit werden die vorgegebenen, vorberechneten idealen Netzgewichte geladen und das Netz initialisiert. Für jedes Frame wird ein Bild mit niedriger Abtastungszahl aus Entrauschungseingaben (d. h. denselben, wie sie für das Training verwendet wird) erzeugt. Für jedes Pixel wird die gegebene Nachbarschaft der Pixeleingaben durch das Netz geleitet, um die „entrauschte“ Pixelfarbe vorherzusagen, wodurch ein entrauschtes Frame erzeugt wird.
-
21 zeigt eine Ausführungsform einer anfänglichen Trainingsimplementierung. Eine maschinell lernende Maschine2100 (z. B. ein CNN) empfängt einen Bereich von N×N Pixeln als Bilddaten1702 mit hoher Abtastungszahl mit verschiedenen Datenkanälen pro Pixel, wie z. B. Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo, und erzeugt endgültige Pixelfarben. Repräsentative Trainingsdaten werden unter Verwendung von Eingaben2101 mit niedriger Abtastungszahl für einen Frame erzeugt. Das Netz wird auf diese Eingaben hin trainiert, wobei ein Satz von „idealen“ Gewichten2105 erzeugt wird, die die maschinell lernende Maschine2100 anschließend verwendet, um Bilder mit niedriger Abtastungszahl zur Laufzeit zu entrauschen. - Um die obigen Techniken zu verbessern, erweitert eine Ausführungsform der Erfindung die Entrauschungsphase, um für jeden Frame oder eine Teilmenge von Frames (z. B. für je N Frames mit N =
2 , 3, 4, 10, 25 usw.) neue Trainingsdaten zu erzeugen. Wie es in22 dargestellt ist, wählt diese Ausführungsform insbesondere einen oder mehrere Bereiche in jedem Frame aus, die hier als „neue Referenzbereiche“2202 bezeichnet werden und mit einer hohen Abtastungszahl in einen separaten Puffer2204 mit hoher Abtastzahl gerendert werden. Ein Puffer1603 mit niedriger Abtastungszahl speichert das Eingabeframe2201 mit niedriger Abtastungszahl (einschließlich des Bereichs2204 mit niedriger Abtastungszahl, der dem neuen Referenzbereich2202 entspricht). - In einer Ausführungsform wird der Ort des neuen Referenzbereichs
2202 zufällig ausgewählt. Alternativ kann der Ort des neuen Referenzbereichs2202 für jeden neuen Frame auf eine vorgegebene Weise angepasst werden (z. B. unter Verwendung einer vorgegebenen Bewegung des Bereichs zwischen Frames, die auf einen vorgegebenen Bereich in der Mitte des Frames begrenzt ist usw.). - Unabhängig davon, wie der neue Referenzbereich ausgewählt wird, wird er von der maschinell lernenden Maschine
2200 verwendet, um die trainierten Gewichte2205 , die zum Entrauschen verwendet werden, fortlaufend zu verfeinern und zu aktualisieren. Insbesondere werden Referenzpixelfarben aus jedem neuen Referenzbereich2202 und verrauschte Referenzpixeleingaben aus einem entsprechenden Bereich2207 mit niedriger Abtastungszahl gerendert. Ein zusätzliches Training wird dann an der maschinell lernenden Maschine2200 unter Verwendung des Referenzbereichs2202 mit hoher Abtastungszahl und des entsprechenden Bereichs2207 mit niedriger Abtastungszahl durchgeführt. Im Gegensatz zum anfänglichen Training wird dieses Training fortlaufend während der Laufzeit für jeden neuen Referenzbereich2202 durchgeführt - wodurch sichergestellt wird, dass die maschinell lernende Maschine2200 genau trainiert wird. Beispielsweise können Datenkanäle pro Pixel (z. B. Pixelfarbe, Tiefe, Normale, Normalabweichung usw.) ausgewertet werden, die die maschinell lernende Maschine2200 verwendet, um Anpassungen an den trainierten Gewichten2205 vorzunehmen. Wie im Trainingsfall (21 ) wird die maschinell lernende Maschine2200 auf einen Satz von Idealgewichten2205 zum Entfernen von Rauschen aus dem Eingabeframe2201 mit niedriger Abtastungszahl hin trainiert, um den entrauschten Frame2220 zu erzeugen. In dieser Ausführungsform werden die trainierten Gewichte2205 jedoch basierend auf neuen Bildeigenschaften neuer Typen von Eingabeframes2201 mit niedriger Abtastungszahl fortlaufend aktualisiert. - In einer Ausführungsform werden die von der maschinell lernenden Maschine
2200 ausgeführten Neutrainingsoperationen gleichzeitig in einem Hintergrundprozess auf der Grafikprozessoreinheit (GPU) oder dem Hostprozessor ausgeführt. Die Renderschleife, die als eine Treiberkomponente und/oder eine GPU-Hardwarekomponente implementiert sein kann, erzeugt fortlaufend neue Trainingsdaten (z. B. in Form neuer Referenzbereiche2202 ), die sie in eine Warteschlange stellt. Der Hintergrund-Trainingsprozess, der auf der GPU oder dem Hostprozessor ausgeführt wird, liest fortlaufend die neuen Trainingsdaten aus dieser Warteschlange, trainiert die maschinell lernende Maschine2200 neu und aktualisiert sie in geeigneten Intervallen mit neuen Gewichten2205 . -
23 zeigt ein Beispiel einer solchen Implementierung, bei der der Hintergrund-Trainingsprozess2300 durch die Host-CPU1710 implementiert wird. Insbesondere verwendet der Hintergrund-Trainingsprozess2300 in dieser Ausführungsform den neuen Referenzbereich2202 mit hoher Abtastungszahl und entsprechenden den Bereich2204 mit niedriger Abtastungszahl, um die trainierten Gewichte2205 fortlaufend zu aktualisieren, wodurch die maschinell lernende Maschine2200 aktualisiert wird. - Wie es in
24A dargestellt ist, erzeugen in einer Implementierung wie etwa in einem Mehrspieler-Online-Spiel verschiedene Hostmaschinen2420-2422 individuell Referenzbereiche, die ein Hintergrund-Trainingsprozess1700A-C an einen Server2400 (z. B. einen Spieleserver) sendet. Der Server2400 führt dann ein Training an einer maschinellen Lernmaschine2410 unter Verwendung der neuen Referenzbereiche durch, die von jedem der Hosts2421-2422 empfangen wurden, wobei die Gewichte2405 wie zuvor beschrieben aktualisiert werden. Er sendet diese Gewichte2405 an die Hostmaschinen2420 , die die Gewichte2205A-C speichern, wodurch jede einzelne maschinell lernende Maschine (nicht gezeigt) aktualisiert wird. Da dem Server2400 in kurzer Zeit eine große Anzahl von Referenzbereichen geliefert werden, kann er die Gewichte für jegliche gegebene Anwendung (z. B. ein Online-Spiel), die von den Anwendern ausgeführt wird, effizient und präzise aktualisieren. - Wie es in
24B dargestellt ist, können die verschiedenen Hostmaschinen neue trainierte Gewichte erzeugen (z. B. basierend auf Trainings-/Referenzbereichen2202 , wie es zuvor beschrieben ist) und die neuen trainierten Gewichte mit einem Server2400 (z. B. einem Spieleserver) teilen oder alternativ ein Peer-zu-Peer-Freigabe-Protokoll verwenden. Eine Maschinenlernverwaltungskomponente2410 auf dem Server erzeugt einen Satz kombinierter Gewichte2405 unter Verwendung der neuen Gewichte, die von jeder der Hostmaschinen empfangen werden. Die kombinierten Gewichte2405 können beispielsweise ein Durchschnitt sein, der aus den neuen Gewichten erzeugt und fortlaufend aktualisiert wird, wie es hierin beschrieben ist. Nach der Erzeugung können Kopien der kombinierten Gewichte2205A-C übertragen und auf jeder der Hostmaschinen2420-2421 gespeichert werden, die dann die hier beschriebenen kombinierten Gewichte verwenden können, um Entrauschungsoperationen durchzuführen. - In einer Ausführungsform kann dieser Aktualisierungsmechanismus mit halbgeschlossener Schleife von dem Hardwarehersteller verwendet werden. Beispielsweise kann das Referenznetz als Teil des Treibers enthalten sein, der vom Hardwarehersteller vertrieben wird. Während der Treiber mithilfe der hier beschriebenen Techniken neue Trainingsdaten erzeugt und diese fortlaufend an den Hardwarehersteller zurücksendet, verwendet der Hardwarehersteller diese Informationen, um seine Maschinenlernimplementierungen für die nächste Treiberaktualisierung weiter zu verbessern.
- In einer Implementierung (z. B. beim stapelweisen Rendern von Filmen in einer Renderfarm) überträgt der Renderer die neu erzeugten Trainingsbereiche an einen dedizierten Server oder eine dedizierte Datenbank (in der Renderfarm dieses Studios), die diese Daten aus mehreren Render-Knoten im Laufe der Zeit ansammelt. Ein separater Prozess auf einer separaten Maschine verbessert fortlaufend das dedizierte Entrauschungsnetz des Studios. Für neue Renderaufträge wird immer das neueste trainierte Netz verwendet.
- Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in
25 dargestellt. Das Verfahren kann auf den hier beschriebenen Architekturen implementiert werden, ist jedoch nicht auf eine bestimmte System- oder Grafikverarbeitungsarchitektur beschränkt. - Bei
2501 werden als Teil der anfänglichen Trainingsphase Bilddaten mit niedriger Abtastungszahl und Bilddaten mit hoher Abtastungszahl für mehrere Frames erzeugt. Bei2502 wird eine maschinell lernende Entrauschungsmaschine unter Verwendung der Bilddaten mit hoher/niedriger Abtastungszahl trainiert. In einer Ausführungsform kann beispielsweise ein Satz von Pixelmerkmalen zugeordneten Gewichten des faltenden neuronalen Netzes gemäß dem Training aktualisiert werden. Es kann jedoch eine beliebige Maschinenlernarchitektur verwendet werden. - Bei
2503 werden zur Laufzeit Frames mit niedriger Abtastungszahl zusammen mit mindestens einem Referenzbereich mit hoher Abtastungszahl erzeugt. Bei2504 wird der Referenzbereich mit hoher Abtastungszahl von der maschinell lernenden Maschine und/oder einer separaten Trainingslogik (z. B. einem Hintergrundtrainingsmodul2300 ) verwendet, um das Training der maschinell lernenden Maschine fortlaufend zu verfeinern. Zum Beispiel wird in einer Ausführungsform der Referenzbereich mit hoher Abtastungszahl in Kombination mit einem entsprechenden Teil des Bildes mit niedriger Abtastungszahl verwendet, um der maschinell lernenden Maschine1904 weiterhin beizubringen, wie sie das Entrauschen am effektivsten durchführt. In einer CNN-Implementierung kann dies beispielsweise ein Aktualisieren der dem CNN zugeordneten Gewichte umfassen. - Es können mehrere Variationen der oben beschriebenen Ausführungsformen implementiert werden, beispielsweise die Weise, in der die Rückkopplungsschleife in die maschinell lernende Maschine konfiguriert ist, die Entitäten, die die Trainingsdaten erzeugen, die Weise, in der die Trainingsdaten in die Trainingsmaschine zurückgekoppelt werden und die Weise, in der das verbesserte Netz an die Rendermaschinen geliefert wird. Obwohl die oben beschriebenen Ausführungsformen ein fortlaufendes Training unter Verwendung eines einzelnen Referenzbereichs durchführen, kann zudem eine beliebige Anzahl von Referenzbereichen verwendet werden. Darüber hinaus können wie zuvor erwähnt die Referenzbereiche unterschiedliche Größen haben, auf unterschiedliche Anzahlen von Frames angewendet werden und können an unterschiedlichen Stellen innerhalb der Frames unter Verwendung unterschiedlicher Techniken (z. B. zufällig, gemäß einem vorbestimmten Muster usw.) positioniert werden.
- Obwohl ein faltendes neuronales Netz (CNN) als ein Beispiel einer maschinell lernenden Maschine
2200 beschrieben ist, können die zugrundeliegenden Prinzipien der Erfindung unter Verwendung einer beliebigen Form von maschinell lernender Maschine implementiert werden, die in der Lage ist, ihre Ergebnisse mit neuen Trainingsdaten fortlaufend zu verfeinern. Beispielhaft und nicht einschränkend umfassen andere Maschinenlernimplementierungen das Gruppenverfahren der Datenhandhabung (GMDH), Lang-Kurzzeitgedächtnis, Tiefreservoirberechnung, Deep-Belief-Netze, Tensor-Deep-Stacking-Netze und Deep-Predictive-Coding-Netze, um nur einige zu nennen. - Vorrichtung und Verfahren zum effizienten verteilten Entrauschen
- Wie oben beschrieben ist das Entrauschen zu einem kritischen Merkmal der Echtzeitstrahlverfolgung mit glatten, rauschfreien Bildern geworden. Das Rendern kann über ein verteiltes System hinweg auf mehreren Vorrichtungen ausgeführt werden. Bisher werden die vorhandenen Entrauschungsrahmen jedoch alle auf einer einzelnen Instanz auf einer einzelnen Maschine ausgeführt. Wenn über mehrere Vorrichtungen hinweg gerendert wird, sind möglicherweise nicht alle gerenderten Pixel für die Berechnung eines entrauschten Abschnitts des Bildes verfügbar.
- Eine Ausführungsform der Erfindung umfasst einen Algorithmus zum verteilten Entrauschen, der sowohl mit künstlicher Intelligenz (KI) als auch mit nicht auf KI basierenden Entrauschungstechniken arbeitet. Bildbereiche sind entweder bereits von einer verteilten Renderoperation her auf Knoten verteilt oder sie werden von einem einzelnen Framepuffer aufgeteilt und verteilt. Geisterbereiche benachbarter Bereichen, die zum Berechnen einer ausreichenden Entrauschung benötigt werden, werden bei Bedarf aus benachbarten Knoten gesammelt und die endgültigen resultierenden Kacheln werden zu einem endgültigen Bild zusammengesetzt.
- Verteilte Verarbeitung
-
26 zeigt eine Ausführungsform der Erfindung, bei der mehrere Knoten2621-2623 ein Rendern durchführen. Während der Einfachheit halber nur drei Knoten dargestellt sind, sind die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Anzahl von Knoten beschränkt. Tatsächlich kann ein einziger Knoten verwendet werden, um bestimmte Ausführungsformen der Erfindung zu implementieren. - Die Knoten
2621-2623 rendern jeweils einen Abschnitt eines Bildes, was in diesem Beispiel in Bereichen2611-2613 resultiert. Obwohl in26 rechteckige Bereiche2611-2613 dargestellt sind, können Bereiche beliebiger Form verwendet werden und jede Vorrichtung kann eine beliebige Anzahl von Bereichen verarbeiten. Die Bereiche, die von einem Knoten benötigt werden, um eine ausreichend glatte Entrauschungsoperation durchzuführen, werden als Geisterbereiche2611-2613 bezeichnet. Mit anderen Worten stellen die Geisterbereichen2601-2603 die Gesamtheit der Daten dar, die erforderlich sind, um eine Entrauschung mit einem bestimmten Qualitätsniveau durchzuführen. Ein Verringern des Qualitätsniveaus verringert die Größe des Geisterbereichs und daher die erforderliche Datenmenge und ein Erhöhen des Qualitätsniveaus vergrößert den Geisterbereich und die entsprechenden erforderlichen Daten. - In einer Ausführungsform ruft der Knoten dann, wenn ein Knoten wie der Knoten
2621 eine lokale Kopie eines Abschnitts des Geisterbereichs2601 hat, der erforderlich ist, um seinen Bereich2611 auf einem bestimmten Qualitätsniveau zu entrauschen, die erforderlichen Daten von einem oder mehreren „benachbarten“ Knoten wie beispielsweise dem Knoten2622 , der einen Abschnitt des Geisterbereichs2601 besitzt, wie dargestellt ab. In ähnlicher Weise ruft der Knoten2622 die erforderlichen Geisterbereichsdaten2632 dann, wenn der Knoten2622 eine lokale Kopie eines Abschnitts des Geisterbereichs2602 hat, der erforderlich ist, um seinen Bereich2612 auf dem angegebenen Qualitätsniveau zu entrauschen, aus dem Knoten2621 ab. Der Abruf kann über einen Bus, eine Verbindung, eine Hochgeschwindigkeitsspeicher-Fabric, ein Netz (z. B. Hochgeschwindigkeits-Ethernet) oder sogar eine chipinterne Zwischenverbindung in einem Mehrkernchip, der in der Lage ist, Renderarbeit auf mehrere Kerne zu verteilen (z. B. zum Rendern großer Bilder mit extremen Auflösungen oder zeitlich variierenden Auflösungen genutzt) ausgeführt werden. In einer Ausführungsform umfasst jeder Knoten2621-2623 eine einzelne Ausführungseinheit oder einen spezifizierten Satz von Ausführungseinheiten in einem Grafikprozessor. - Die spezifische zu sendende Datenmenge hängt von den verwendeten Entrauschungstechniken ab. Darüber hinaus können die Daten aus dem Geisterbereich jegliche Daten umfassen, die zur Verbesserung der Entrauschung für jeden jeweiligen Bereich benötigt werden. In einer Ausführungsform umfassen die Geisterbereichsdaten beispielsweise Bildfarben/Wellenlängen, Intensitäts-Alphadaten und/oder Normalen. Die der Erfindung zugrundeliegenden Prinzipien sind jedoch nicht auf einen bestimmten Satz von Geisterbereichsdaten beschränkt.
- Zusätzliche Einzelheiten einer Ausführungsform
- Für langsamere Netze oder Zwischenverbindungen kann die Komprimierung dieser Daten unter Verwendung einer bestehenden verlustfreien oder verlustbehafteten Allzweckkomprimierung verwendet werden. Beispiele sind unter anderem zlib, gzip und der Lempel-Ziv-Markov-Kettenalgorithmus (LZMA). Weitere inhaltsspezifische Komprimierung kann verwendet werden, wenn erkannt wird, dass das Delta in Strahlentrefferinformationen zwischen Frames ziemlich dünnbesetzt sein kann und nur die Abtastungen, die zu diesem Delta beitragen, gesendet werden müssen, wenn der Knoten bereits die gesammelten Deltas aus vorherigen Frames hat. Diese können selektiv an Knoten übertragen werden, die diese Abtastungen, i, sammeln, oder der Knoten i kann Abtastungen von anderen Knoten anfordern. In einer Ausführungsform wird eine verlustfreie Komprimierung für bestimmte Arten von Daten und Programmcode verwendet, während verlustbehaftete Daten für andere Arten von Daten verwendet werden.
-
27 zeigt zusätzliche Einzelheiten der Wechselwirkungen zwischen den Knoten2621-2622 gemäß einer Ausführungsform der Erfindung. Jeder Knoten2621-2622 weist eine Strahlverfolgungs-Renderschaltung2681-2682 zum Rendern der jeweiligen Bildbereiche2611-2612 und der Geisterbereiche2601-2602 aus. Die Entrauscher2700-2711 führen jeweils Entrauschungsoperationen in den Bereichen2611-2012 aus, in denen jeder Knoten2621-2622 für das Rendern und Entrauschen verantwortlich ist. Die Entrauscher2621-2622 können beispielsweise eine Schaltung, Software oder irgendeine Kombination davon umfassen, um die entrauschten Bereiche2721-2722 zu erzeugen. Wie erwähnt müssen sich die Entrauscher2621-2622 beim Erzeugen von entrauschten Bereichen möglicherweise auf Daten in einem Geisterbereich stützen, der einem anderen Knoten gehört (z. B. benötigt der Entrauscher2700 möglicherweise Daten aus dem Geisterbereich2602 , der dem Knoten2622 gehört). - Somit erzeugen in einer Ausführungsform die Entrauscher
2700-2711 die entrauschten Bereiche2721-2722 unter Verwendung von Daten aus Bereichen2611-2612 bzw. Geisterbereichen2601-2602 , von denen mindestens ein Teil von einem anderen Knoten empfangen werden kann. Die Bereichsdatenverwalter2701-2702 verwalten die Datenübertragungen aus den Geisterbereichen2601-2602 wie hierin beschrieben. In einer Ausführungsform führen die Komprimierer/Dekomprimierer-Einheiten2731-2732 eine Komprimierung und Dekomprimierung der Geisterbereichsdaten, die zwischen den Knoten2621-2622 ausgetauscht werden, durch. - Beispielsweise kann der Bereichsdatenverwalter
2701 des Knotens2621 auf Anforderung von dem Knoten2622 Daten aus dem Geisterbereich2601 an den Komprimierer/Dekomprimierer2731 senden, der die Daten komprimiert, um komprimierte Daten2706 zu erzeugen, die er an den Knoten2622 sendet, wodurch die Bandbreite über die Zwischenverbindung, das Netz, den Bus oder eine andere Datenkommunikationsverbindung verringert wird. Der Komprimierer/Dekomprimierer2732 des Knotens2622 dekomprimiert dann die komprimierten Daten2706 und der Entrauscher2711 verwendet die dekomprimierten Geisterdaten, um einen entrauschten Bereich2612 mit höherer Qualität zu erzeugen, als dies nur mit Daten aus dem Bereich2612 möglich wäre. Der Bereichsdatenverwalter2702 kann die dekomprimierten Daten aus dem Geisterbereich2601 in einem Cache, Speicher, einem Registersatz oder einem anderen Speicher speichern, um sie dem Entrauscher2711 zur Verfügung zu stellen, wenn der entrauschte Bereich2722 erzeugt wird. Ein ähnlicher Satz von Operationen kann durchgeführt werden, um die Daten aus dem Geisterbereich2602 an den Entrauscher2700 auf dem Knoten2621 zu liefern, der die Daten in Kombination mit Daten aus dem Bereich2011 verwendet, um einen entrauschten Bereich2721 mit höherer Qualität zu erzeugen. - Daten erfassen oder rendern
- Wenn die Verbindung zwischen Vorrichtungen wie den Knoten
2621-2622 langsam ist (d. h. niedriger als eine Schwellenlatenz und/oder eine Schwellenbandbreite), kann es schneller sein, Geisterbereiche lokal zu rendern, als die Ergebnisse aus anderen Vorrichtungen anzufordern. Dies kann zur Laufzeit bestimmt werden, indem die Netztransaktionsgeschwindigkeiten und linear extrapolierten Renderzeiten für die Größe des Geisterbereichs überwacht werden. In den Fällen, in denen das Rendern des gesamten Geisterbildbereichs schneller ist, können mehrere Vorrichtungen dieselben Abschnitte des Bildes rendern. Die Auflösung des gerenderten Abschnitts der Geisterbereiche kann basierend auf der Varianz des Basisbereichs und dem bestimmten Unschärfegrad angepasst werden. - Lastausgleich
- In einer Ausführungsform können statische und/oder dynamische Lastausgleichsschemata verwendet werden, um die Verarbeitungslast unter den verschiedenen Knoten
2621-2623 zu verteilen. Für den dynamischen Lastausgleich kann die durch das Entrauschungsfilter bestimmte Varianz sowohl mehr Zeit bei der Entrauschung erfordern als auch die Menge der zum Rendern eines bestimmten Bereichs der Szene verwendeten Abtastungen steuern, wobei eine geringe Varianz und unscharfe Bereiche des Bildes weniger Abtastungen erfordern. Die speziellen Bereiche, die speziellen Knoten zugewiesen sind, können dynamisch basierend auf Daten aus vorherigen Frames angepasst werden oder dynamisch zwischen Vorrichtungen übertragen werden, während sie gerendert werden, so dass alle Vorrichtungen den gleichen Arbeitsaufwand haben. -
28 zeigt eine Ausführungsform, bei der ein auf jedem jeweiligen Knoten2621-2622 ausgeführter Überwacher2801-2802 Leistungsmetrikdaten sammelt, die ohne Einschränkung darauf die Zeit, die zum Übertragen von Daten über die Netzschnittstelle2811-2812 benötigt wird, die Zeit, die beim Entrauschen eines Bereichs (mit und ohne Geisterbereichsdaten) benötigt wird, und die Zeit, die zum Rendern jedes Bereichs/Geisterbereichs benötigt wird, umfassen. Die Überwacher2801-2802 melden diese Leistungsmetriken an einen Verwalter oder einen Lastausgleichsknoten2801 zurück, der die Daten analysiert, um die aktuelle Arbeitslast auf jedem Knoten2621-2622 zu ermitteln und möglicherweise einen effizienteren Verarbeitungsmodus für die verschiedenen entrauschten Bereiche2721-2722 zu bestimmen. Der Verwaltungsknoten2801 verteilt dann gemäß der detektierten Last neue Arbeitslasten für neue Bereiche an die Knoten2621-2622 . Zum Beispiel kann der Verwalterknoten2801 mehr Arbeit an diejenigen Knoten, die nicht stark belastet sind, senden und/oder Arbeit von denjenigen Knoten, die überlastet sind, neu zuweisen. Zusätzlich kann der Lastausgleichsknoten2801 einen Umkonfigurationsbefehl senden, um die spezifische Weise anzupassen, in der das Rendern und/oder Entrauschen durch jeden der Knoten durchgeführt wird (einige Beispiele davon sind oben beschrieben). - Bestimmen von Geisterbereichen
- In einer Ausführungsform werden die Größen und Formen der Geisterbereiche
2601-2602 basierend auf dem Entrauschungsalgorithmus bestimmt, der von den Entrauschern2700-2711 implementiert wird. Ihre jeweiligen Größen können dann basierend auf der detektierten Varianz der Abtastungen, die entrauscht werden, dynamisch modifiziert werden. Der Lernalgorithmus, der für die KI-Entrauschung selbst verwendet wird, kann zum Bestimmen geeigneter Bereichsgrößen verwendet werden, oder in anderen Fällen, wie beispielsweise einer bilateralen Unschärfe, bestimmt die vorbestimmte Filterbreite die Größe der Geisterbereiche2601-2602 . In einer Implementierung, die einen Lernalgorithmus verwendet, kann die maschinell lernende Maschine auf dem Verwaltungsknoten2801 ausgeführt werden und/oder Teile des maschinellen Lernens können auf jedem der einzelnen Knoten2621-2623 ausgeführt werden (siehe z. B.24A-B und zugehöriger Text oben). - Erhalten des endgültigen Bildes
- In einer Ausführungsform wird das endgültige Bild erzeugt, indem die gerenderten und entrauschten Bereiche aus jedem der Knoten
2621-2623 gesammelt werden, ohne dass die Geisterbereiche oder Normalen benötigt werden. In28 werden beispielsweise die entrauschten Bereiche2721-2722 an den Bereichsprozessor2680 des Verwalterknotens2601 übertragen, der die Bereiche kombiniert, um das endgültige entrauschte Bild2690 zu erzeugen, das dann auf einer Anzeige2690 angezeigt wird. Der Bereichsprozessor2280 kann die Bereiche mit mehreren von 2D-Zusammenstellungstechniken kombinieren. Obwohl diese als separate Komponenten dargestellt sind, können der Bereichsprozessor2680 und das entrauschte Bild2690 in die Anzeige2690 integriert sein. In dieser Ausführungsform können die verschiedenen Knoten2621-2622 eine Direktsendetechnik verwenden, um die entrauschten Bereichen2721-2722 zu übertragen, und möglicherweise verschiedene verlustbehaftete oder verlustfreie Komprimierung der Bereichsdaten verwenden. - KI-Entrauschung ist immer noch ein aufwändiger Vorgang, wenn sich das Spielen in die Cloud verschiebt. Daher kann das Verteilen der Entrauschungsverarbeitung auf mehrere Knoten
2621-2622 erforderlich werden, um Echtzeit-Bildraten für traditionelles Spielen oder virtuelle Realität (VR) zu erzielen, die höhere Bildraten erfordern. Filmstudios rendern häufig auch in großen Renderfarmen, die zum schnelleren Entrauschen verwendet werden können. - Eine Ausführungsform eines Verfahrens zum Durchführen eines verteilten Renderns und Entrauschens ist in
29 dargestellt. Das Verfahren kann im Kontext der oben beschriebenen Systemarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt. - Bei
2901 wird Grafikarbeit an mehrere Knoten gesendet, die Strahlverfolgungsoperationen ausführen, um einen Bereich eines Frames zu rendern. In einer Ausführungsform kann jeder Knoten bereits Daten im Speicher haben, die erforderlich sind, um die Operationen auszuführen. Beispielsweise können zwei oder mehr der Knoten einen gemeinsamen Speicher gemeinsam nutzen oder die lokalen Speicher der Knoten können bereits Daten aus früheren Strahlverfolgungsoperationen gespeichert haben. Alternativ oder zusätzlich können bestimmte Daten an jeden Knoten übertragen werden. - Bei
2902 wird der „Geisterbereich“ bestimmt, der für einen bestimmten Entrauschungsgrad (d. h. bei einem akzeptablen Leistungsniveau) erforderlich ist. Der Geisterbereich umfasst alle Daten, die zum Durchführen des angegebenen Entrauschungsgrads erforderlich sind, einschließlich Daten, die einem oder mehreren anderen Knoten gehören. - Bei
2903 werden Daten, die sich auf die Geisterbereiche (oder Abschnitte davon) beziehen, zwischen Knoten ausgetauscht. Bei2904 führt jeder Knoten eine Entrauschung in seinem jeweiligen Bereich durch (z. B. unter Verwendung der ausgetauschten Daten) und bei2905 werden die Ergebnisse kombiniert, um den endgültigen entrauschten Frame zu erzeugen. - In einer Ausführungsform sendet ein Verwalterknoten oder ein Primärknoten, wie es in
28 gezeigt ist, die Arbeit an die Knoten und kombiniert dann die von den Knoten ausgeführte Arbeit, um den endgültigen Frame zu erzeugen. In einer weiteren Ausführungsform wird eine auf Peers basierte Architektur verwendet, bei der die Knoten Peers sind, die Daten austauschen, um den endgültigen Frame zu rendern und zu entrauschen. - Die hierin beschriebenen Knoten (z. B. die Knoten
2621-2623 ) können Grafikverarbeitungs-Rechensysteme sein, die über ein Hochgeschwindigkeitsnetz miteinander verbunden sind. Alternativ können die Knoten einzelne Verarbeitungselemente sein, die mit einer Hochgeschwindigkeitsspeicherstruktur gekoppelt sind. In dieser Ausführungsform können sich alle Knoten einen gemeinsamen virtuellen Speicherplatz und/oder einen gemeinsamen physischen Speicher teilen. In einer weiteren Ausführungsform können die Knoten eine Kombination von CPUs und GPUs sein. Beispielsweise kann der oben beschriebene Verwaltungsknoten2801 eine CPU und/oder Software, die auf der CPU ausgeführt wird, sein und die Knoten2621-2622 können GPUs und/oder Software, die auf den GPUs ausgeführt wird, sein. Es können unter Einhaltung der der Erfindung zugrundeliegenden Prinzipien verschiedene Arten von Knoten verwendet werden. - Beispielhafte Implementierungen neuronaler Netze
- Es gibt viele Typen von neuronalen Netzen; ein einfacher Typ eines neuronalen Netzes ist ein vorwärtskoppelndes Netz. Ein vorwärtskoppelndes Netz kann als azyklischer Graph implementiert werden, in dem die Knoten in Schichten angeordnet sind. Typischerweise enthält eine vorwärtskoppelnde Netztopologie eine Eingabe- und eine Ausgabeschicht, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht wandelt von der Eingabeschicht empfangene Eingaben in eine Darstellung um, die zum Erzeugen von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzknoten sind über Kanten mit den Knoten in benachbarten Schichten vollständig verbunden, es gibt jedoch keine Kanten zwischen Knoten innerhalb jeweiliger Schichten. An den Knoten einer Eingabeschicht eines vorwärtskoppelnden Netzes empfangene Daten werden über eine Aktivierungsfunktion, die die Zustände der Knoten jeder nachfolgenden Schicht in dem Netz basierend auf Koeffizienten („Gewichten“), die jeweils den Kanten zugeordnet sind, die die Schichten verbinden, berechnet, an die Knoten der Ausgabeschicht weitergeleitet (d. h. „vorwärtsgekoppelt“). Abhängig von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe des Algorithmus des neuronalen Netzes verschiedene Formen annehmen.
- Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzes umfasst ein Auswählen einer Netztopologie, ein Verwenden eines Satzes von Trainingsdaten, die ein von dem Netz modelliertes Problem darstellen, und ein Anpassen der Gewichte, bis das Netzmodell für alle Instanzen des Trainingsdatensatzes mit minimalem Fehler arbeitet. Beispielsweise wird während eines beaufsichtigten Lerntrainingsprozesses für ein neuronales Netz die Ausgabe, die von dem Netz als Antwort auf die Eingabe, die eine Instanz in einem Trainingsdatensatz darstellt, erzeugt wird, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, wird berechnet und die den Verbindungen zugeordneten Gewichte werden angepasst, um diesen Fehler zu minimieren, wenn das Fehlersignal rückwärts durch die Schichten des Netzes weitergeleitet wird. Das Netz wird als „trainiert“ betrachtet, wenn die Fehler für jede der Ausgaben, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
- Die Genauigkeit eines Maschinenlernalgorithmus kann erheblich durch die Qualität des Datensatzes beeinflusst werden, der zum Trainieren des Algorithmus verwendet wird. Der Trainingsprozess kann rechenintensiv sein und auf einem herkömmlichen Allzweckprozessor viel Zeit in Anspruch nehmen. Dementsprechend wird Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders nützlich für die Optimierung des Trainings von neuronalen Netzen, da sich die beim Anpassen der Koeffizienten in neuronalen Netzen durchgeführten Berechnungen in natürlicher Weise für parallele Implementierungen eignen. Insbesondere sind viele Maschinenlernalgorithmen und Softwareanwendungen angepasst worden, um die Parallelverarbeitungshardware in Allzweck-Grafikverarbeitungsvorrichtungen zu nutzen.
-
30 ist eine verallgemeinerte Darstellung eines Maschinenlernsoftware-Stapels3000 . Eine Maschinenlernanwendung3002 kann dazu ausgelegt sein, ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netz zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung3002 kann Trainings- und Inferenzfunktionalität für ein neuronales Netz und/oder spezielle Software, die verwendet werden kann, um ein neuronales Netz vor der Bereitstellung zu trainieren, umfassen. Die Maschinenlernanwendung3002 kann eine beliebige Art von Maschinenintelligenz implementieren, einschließlich, aber nicht beschränkt auf Bilderkennung, Kartierung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinischer Bildgebung oder Sprachübersetzung. - Die Hardwarebeschleunigung für die Maschinenlernanwendung
3002 kann über einen Maschinenlernrahmen3004 ermöglicht werden. Der Maschinenlernrahmen3004 kann eine Bibliothek von Maschinenlern-Primitiven bereitstellen. Maschinenlern-Primitive sind grundlegende Operationen, die üblicherweise von Maschinenlernalgorithmen ausgeführt werden. Ohne den Maschinenlernrahmen3004 müssten Entwickler von Maschinenlernalgorithmen die dem Maschinenlernalgorithmus zugeordnete Hauptrechenlogik erstellen und optimieren und dann die Rechenlogik erneut optimieren, wenn neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung dazu ausgelegt sein, die erforderlichen Berechnungen unter Verwendung der von dem Maschinenlernrahmen3004 bereitgestellten Primitive durchzuführen. Beispielhafte Primitive umfassen Tensor-Faltungen, Aktivierungsfunktionen und Zusammenlegung, die Rechenoperationen sind, die ausgeführt werden, während ein faltendes neuronales Netz (CNN) trainiert wird. Der Maschinenlernrahmen3004 kann auch Primitive bereitstellen, um grundlegende Unterprogramme für lineare Algebra zu implementieren, die von vielen Maschinenlernalgorithmen ausgeführt werden, wie etwa Matrix- und Vektoroperationen. - Der Maschinenlernrahmen
3004 kann von der Maschinenlernanwendung3002 empfangene Eingabedaten verarbeiten und die entsprechende Eingabe in einen Rechenrahmen3006 erzeugen. Der Rechenrahmen3006 kann die an den GPGPU-Treiber3008 gelieferten zugrundeliegenden Befehle abstrahieren, um es dem Maschinenlernrahmen3004 zu ermöglichen, Vorteil aus der Hardwarebeschleunigung über die GPGPU-Hardware3010 zu ziehen, ohne dass der Maschinenlernrahmen3004 genaue Kenntnisse über die Architektur der GPGPU-Hardware3010 haben muss. Zusätzlich kann der Rechenrahmen3006 die Hardwarebeschleunigung für den Maschinenlernrahmen3004 über eine Vielzahl von Typen und Generationen der GPGPU-Hardware3010 hinweg ermöglichen. - GPGPU-Maschinenlernbeschleunigung
-
31 zeigt ein Multi-GPU-Rechensystem3100 gemäß einer Ausführungsform. Das Multi-GPU-Rechensystem3100 kann einen Prozessor3102 umfassen, der über einen Hostschnittstellen-Switch3104 mit mehreren GPGPUs3106A-D gekoppelt ist. Der Hostschnittstellen-Switch3104 ist in einer Ausführungsform eine PCI-Express-Switch-Vorrichtung, die den Prozessor3102 mit einem PCI-Express-Bus koppelt, über den der Prozessor3102 mit dem Satz von GPGPUs3106A-D kommunizieren kann. Jede der mehreren GPGPUs3106A-D kann eine Instanz der oben beschriebenen GPGPU sein. Die GPGPUs3106A-D können über einen Satz von Hochgeschwindigkeits-Punktzu-Punkt-GPU-zu-GPU-Verbindungen3116 miteinander verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können über eine dedizierte GPU-Verbindung mit jeder der GPGPUs3106A-D verbunden sein. Die P2P-GPU-Verbindungen3116 ermöglichen eine direkte Kommunikation zwischen jeder der GPGPUs3106A-D , ohne dass eine Kommunikation über den Host-Schnittstellenbus erforderlich ist, an den der Prozessor3102 angeschlossen ist. Wenn GPU-zu-GPU-Verkehr zu den P2P-GPU-Verbindungen geleitet wird, bleibt der Host-Schnittstellenbus für den Systemspeicherzugriff oder für die Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems3100 , beispielsweise über ein oder mehrere Netzvorrichtungen, verfügbar. Obwohl in der dargestellten Ausführungsform die GPGPUs3106A-D über den Hostschnittstellen-Switch3104 mit dem Prozessor3102 verbunden sind, umfasst der Prozessor3102 in einer Ausführungsform eine direkte Unterstützung für die P2P-GPU-Verbindungen3116 und kann eine direkte Verbindung zu den GPGPUs3106A-D herstellen. - Implementierungen neuronaler Netze für maschinelles Lernen
- Die von den hier beschriebenen Ausführungsformen bereitgestellte Rechenarchitektur kann dazu ausgelegt sein, Arten der Parallelverarbeitung auszuführen, die besonders zum Trainieren und Bereitstellen neuronaler Netze für maschinelles Lernen geeignet sind. Ein neuronales Netz kann als ein Netz von Funktionen mit einer Graphbeziehung verallgemeinert werden. Wie in der Technik bekannt ist, gibt es eine Vielzahl von Arten von Implementierungen neuronaler Netze, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzes ist das zuvor beschriebene vorwärtskoppelnde Netz.
- Ein zweiter beispielhafter Typ eines neuronalen Netzes ist das faltende neuronale Netz (CNN). Ein CNN ist ein spezialisiertes vorwärtskoppelndes neuronales Netz zum Verarbeiten von Daten mit einer bekannten gitterartigen Topologie wie beispielsweise Bilddaten. Dementsprechend werden CNN üblicherweise für Bildverarbeitungs- und Bilderkennungsanwendungen verwendet, sie können jedoch auch für andere Arten der Mustererkennung wie Rede- und Sprachverarbeitung verwendet werden. Die Knoten in der CNN-Eingangsschicht sind zu einem Satz von „Filtern“ (Merkmalsdetektoren, die von den in der Netzhaut gefundenen Empfangsfeldern inspiriert sind) organisiert, und die Ausgabe jedes Satzes von Filtern wird an Knoten in nachfolgenden Schichten des Netzes weitergegeben. Die Berechnungen für ein CNN umfassen ein Anwenden der mathematischen Faltungsoperation auf jedes Filter, um die Ausgabe dieses Filters zu erzeugen. Faltung ist eine spezielle mathematische Operation, die von zwei Funktionen ausgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Terminologie faltender Netze kann die erste Funktion der Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskern bezeichnet werden kann. Die Ausgabe kann als Merkmalskarte bezeichnet werden. Beispielsweise kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netz angepasst werden.
- Rekurrente neuronale Netze (RNN) sind eine Familie von neuronalen vorwärtskoppelnden Netzen, die Rückkopplungsverbindungen zwischen Schichten aufweisen. RNNs ermöglichen die Modellierung sequentieller Daten durch gemeinsame Nutzung von Parameterdaten über verschiedene Teile des neuronalen Netzes hinweg. Die Architektur für ein RNN enthält Zyklen. Die Zyklen stellen den Einfluss eines aktuellen Werts einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da mindestens ein Teil der Ausgabedaten aus dem RNN als Rückkopplung zur Verarbeitung nachfolgender Eingaben in einer Sequenz verwendet wird. Diese Funktion macht RNN aufgrund der variablen Art, in der Sprachdaten zusammengestellt werden können, besonders nützlich für die Sprachverarbeitung.
- Die nachstehend beschriebenen Figuren stellen beispielhafte vorwärtskoppelnde Netze, CNN-Netze und RNN-Netze dar und beschreiben einen allgemeinen Prozess zum Trainieren bzw. bereitstellen jedes dieser Netztypen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für jede hierin beschriebene spezifische Ausführungsform sind und die dargestellten Konzepte allgemein auf tiefe neuronale Netze und Maschinenlerntechniken im Allgemeinen angewendet werden können.
- Die oben beschriebenen beispielhaften neuronalen Netze können verwendet werden, um tiefes Lernen durchzuführen. Tiefes Lernen ist maschinelles Lernen mit tiefen neuronalen Netzen. Die beim tiefen Lernen verwendeten tiefen neuronalen Netze sind künstliche neuronale Netze, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzen, die nur eine einzige verborgene Schicht aufweisen. Tiefere neuronale Netze sind in der Regel rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzes ermöglichen jedoch eine mehrstufige Mustererkennung, die zu einem verringerten Ausgabefehler im Vergleich zu flachen Maschinenlerntechniken führt.
- Tiefe neuronale Netze, die beim tiefen Lernen verwendet werden, umfassen typischerweise ein Frontend-Netz zum Durchführen einer Merkmalserkennung, das mit einem Backend-Netz gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsdarstellung, die dem Modell bereitgestellt wird, ausführen kann. Tiefes Lernen ermöglicht maschinelles Lernen, ohne dass handgefertigte Merkmalserstellung für das Modell durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale erlernen, die auf der statistischen Struktur oder Korrelation innerhalb der Eingabedaten basieren. Die erlernten Merkmale können an ein mathematisches Modell geliefert werden, das detektierte Merkmale einer Ausgabe zuordnen kann. Das von dem Netz verwendete mathematische Modell ist im Allgemeinen auf die jeweilige auszuführende Aufgabe spezialisiert und verschiedene Modelle werden verwendet, um verschiedene Aufgaben durchzuführen.
- Sobald das neuronale Netz strukturiert ist, kann ein Lernmodell auf das Netz angewendet werden, um das Netz für die Ausführung spezifischer Aufgaben zu trainieren. Das Lernmodell beschreibt, wie die Gewichte innerhalb des Modells angepasst werden, um den Ausgabefehler des Netzes zu verringern. Die Rückübertragung von Fehlern ist ein übliches Verfahren, das verwendet wird, um neuronale Netze zu trainieren. Ein Eingabevektor wird dem Netz zur Verarbeitung vorgelegt. Die Ausgabe des Netzes wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärts weitergeleitet, bis jedem Neuron ein Fehlerwert zugeordnet ist, der ungefähr seinen Beitrag zu der ursprünglichen Ausgabe darstellt. Das Netz kann dann aus diesen Fehlern lernen, indem es einen Algorithmus verwendet, beispielsweise den stochastischen Gradientenabstiegsalgorithmus, um die Gewichte des neuronalen Netzes zu aktualisieren.
-
32-33 zeigen ein beispielhaftes faltendes neuronales Netz.32 zeigt verschiedene Schichten innerhalb eines CNN. Wie es in32 gezeigt ist, kann ein beispielhaftes CNN, das zum Modellieren der Bildverarbeitung verwendet wird, eine Eingabe3202 empfangen, die die rote, grüne und blaue Komponente (RGB-Komponenten) eines Eingangsbildes beschreibt. Die Eingabe3202 kann durch mehrere Faltungsschichten (z. B. Faltungsschicht3204 , Faltungsschicht3206 ) verarbeitet werden. Die Ausgabe aus den mehreren Faltungsschichten kann optional durch einen Satz vollständig verbundener Schichten3208 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht haben vollständige Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie dies zuvor für ein vorwärtskoppelndes Netz beschrieben wurde. Die Ausgabe aus den vollständig verbundenen Schichten3208 kann verwendet werden, um ein Ausgabeergebnis aus dem Netz zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten3208 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten. Beispielsweise kann in einigen Implementierungen die Faltungsschicht3206 eine Ausgabe für das CNN erzeugen. - Die Faltungsschichten sind spärlich verbunden, was sich von der herkömmlichen Konfiguration neuronaler Netze unterscheidet, die in den vollständig verbundenen Schichten
3208 zu finden ist. Herkömmliche Schichten neuronaler Netze sind vollständig verbunden, so dass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswerts jedes der Knoten in dem Feld) wie dargestellt in die Knoten der nachfolgenden Schicht eingegeben wird. Die den Faltungsschichten zugeordneten Kerne führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesendet wird. Die in den Faltungsschichten durchgeführte Dimensionsreduzierung ist ein Aspekt, der es dem CNN ermöglicht, für die Verarbeitung großer Bilder zu skalieren. -
33 zeigt beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Eine Eingabe in eine Faltungsschicht3312 eines CNN kann in drei Stufen einer Faltungsschicht3314 verarbeitet werden. Die drei Stufen können eine Faltungsstufe3316 , eine Detektorstufe3318 und eine Zusammenlegungsstufe3320 umfassen. Die Faltungsschicht3314 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzes kann Ausgabemerkmalskartendaten erzeugen oder einer vollständig verbundenen Schicht eine Eingabe liefern, um beispielsweise einen Klassifizierungswert für die Eingabe in das CNN zu erzeugen. - In der Faltungsstufe
3316 werden mehrere Faltungen parallel ausgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe3316 kann eine affine Transformation umfassen, die eine beliebige Transformation ist, die als lineare Transformation plus Translation spezifiziert werden kann. Affine Transformationen umfassen Drehungen, Translationen, Skalierungen und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit spezifischen Bereichen in der Eingabe verbunden sind, die als der dem Neuron zugeordnete lokale Bereich bestimmt werden können. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichten der Neuronen und dem Bereich in der lokalen Eingabe, mit dem die Neuronen verbunden sind. Die Ausgabe aus der Faltungsstufe3316 definiert einen Satz von linearen Aktivierungen, die von nachfolgenden Stufen der Faltungsschicht3314 verarbeitet werden. - Die linearen Aktivierungen können von einer Detektorstufe
3318 verarbeitet werden. In der Detektorstufe3318 wird jede lineare Aktivierung von einer nichtlinearen Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des gesamten Netzes, ohne die Empfangsfelder der Faltungsschicht zu beeinflussen. Es können verschiedene Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Ein besonderer Typ ist die gleichgerichtete Lineareinheit (ReLU), die eine Aktivierungsfunktion verwendet, die als f(x)=max(0,x) definiert ist, so dass die Aktivierung auf null begrenzt wird. - Die Zusammenlegungsstufe
3320 verwendet eine Zusammenlegungsfunktion, die die Ausgabe der Faltungsschicht3306 durch eine zusammenfassende Statistik der nahegelegenen Ausgaben ersetzt. Die Zusammenlegungsfunktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netz einzubringen, so dass kleine Verschiebungen der Eingabe die zusammengelegten Ausgaben nicht verändern. Die Invarianz gegenüber lokaler Translation kann in Szenarien hilfreich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger ist als die genaue Position des Merkmals. Während der Zusammenlegungsphase3320 können verschiedene Arten von Zusammenlegungsfunktionen verwendet werden, einschließlich Max-Zusammenlegung, Durchschnitts-Zusammenlegung und L2-Norm-Zusammenlegung. Darüber hinaus weisen einige CNN-Implementierungen keine Zusammenlegungsphase auf. Stattdessen setzen solche Implementierungen eine zusätzliche Faltungsstufe mit einer erhöhten Schrittweite im Vergleich zu vorherigen Faltungsstufen ein. - Die Ausgabe aus der Faltungsschicht
3314 kann dann von der nächsten Schicht3322 verarbeitet werden. Die nächste Schicht3322 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten3308 sein. Beispielsweise kann die erste Faltungsschicht3304 von33 an die zweite Faltungsschicht3306 ausgeben, während die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten2808 ausgeben kann. -
34 zeigt ein beispielhaftes rekurrentes neuronales Netz3400 . In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNN können auf verschiedene Arten unter Verwendung verschiedener Funktionen erstellt werden. Die Verwendung von RNN dreht sich im Allgemeinen um die Verwendung mathematischer Modelle zur Vorhersage der Zukunft auf der Basis einer vorherigen Abfolge von Eingaben. Zum Beispiel kann ein RNN verwendet werden, um eine statistische Sprachmodellierung durchzuführen, um ein bevorstehendes Wort unter Vorgabe einer vorherigen Abfolge von Wörtern vorherzusagen. Das dargestellte RNN3400 kann so beschrieben werden, dass es eine Eingabeschicht3402 , die einen Eingabevektor empfängt, verborgene Schichten404 zum Implementieren einer rekurrenten Funktion, einen Rückkopplungsmechanismus3405 zum Freigeben eines „Speichers“ vorheriger Zustände und eine Ausgabeschicht3406 zum Ausgeben eines Ergebnisses aufweist. Das RNN3400 arbeitet auf der Basis von Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird über den Rückkopplungsmechanismus3405 basierend auf dem vorhergehenden Zeitschritt beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten3404 durch den vorhergehenden Zustand und die Eingabe zum aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) in einem ersten Zeitschritt kann von der verborgenen Schicht3404 verarbeitet werden. Eine zweite Eingabe (x2) kann von der verborgenen Schicht3404 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden. Ein gegebener Zustand kann als s_t=f(Ux_t+Ws (t-1)) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität wie die Hyperbeltangensfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x)=max(0,x). Die in den verborgenen Schichten3404 verwendete spezifische mathematische Funktion kann jedoch in Abhängigkeit von den spezifischen Implementierungseinzelheiten des RNN3400 variieren. - Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen können Variationen dieser Netze ermöglicht werden. Eine beispielhafte RNN-Variante ist das RNN mit langem Kurzzeitgedächtnis (LSTM-RNN). LSTM-RNN sind in der Lage, langfristige Abhängigkeiten zu erlernen, die für die Verarbeitung längerer Sprachsequenzen erforderlich sein können. Eine Variante des CNN ist ein faltendes Deep-Believe-Netz, das eine ähnliche Struktur wie ein CNN aufweist und auf eine ähnliche Weise wie ein Deep-Believe-Netz trainiert wird. Ein Deep-Believe-Netz (DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. DBN können mithilfe von unbeaufsichtigtem Lernen Schicht für Schicht trainiert werden. Die erlernten Gewichte des DBN können dann verwendet werden, um neuronale Vortrainings-Netze bereitzustellen, indem ein optimaler Anfangssatz von Gewichten für das neuronale Netz bestimmt wird.
-
35 zeigt das Training und die Bereitstellung eines tiefen neuronalen Netzes. Sobald ein gegebenes Netz für eine Aufgabe strukturiert wurde, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes3502 trainiert. Verschiedene Trainingsrahmen3504 wurden entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Beispielsweise kann der oben beschriebene Maschinenlernrahmen als ein Trainingsrahmen konfiguriert sein. Der Trainingsrahmen3504 kann sich in ein nicht trainiertes neuronales Netz3506 einklinken und ermöglichen, dass das nicht trainierte neuronale Netz unter Verwendung der hierin beschriebenen Parallelverarbeitungsbetriebsmittel trainiert wird, um ein trainiertes neuronales Netz3508 zu erzeugen. - Um den Trainingsprozess zu starten, können die anfänglichen Gewichte zufällig oder durch Vortraining unter Verwendung eines Deep-Believe-Netzes ausgewählt werden. Der Trainingszyklus kann dann entweder beaufsichtigt oder unbeaufsichtigt durchgeführt werden.
- Beaufsichtigtes Lernen ist ein Lernverfahren, bei dem das Training als unterstützte Operation ausgeführt wird, also beispielsweise wenn der Trainingsdatensatz
3502 als Eingabe eine mit der gewünschten Ausgabe gepaarte Eingabe enthält oder wenn der Trainingsdatensatz eine Eingabe mit bekannter Ausgabe enthält und die Ausgabe des neuronalen Netzes manuell eingestuft wird. Das Netz verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einer Menge von erwarteten oder gewünschten Ausgaben. Fehler werden dann durch das System zurückübermittelt. Der Trainingsrahmen3504 kann sich anpassen, um die Gewichte anzupassen, die das untrainierte neuronale Netz3506 steuern. Der Trainingsrahmen3504 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz3506 zu einem Modell konvergiert, das geeignet ist, basierend auf bekannten Eingabedaten korrekte Antworten zu erzeugen. Der Trainingsprozess findet wiederholt statt, da die Gewichte des Netzes angepasst werden, um die von dem neuronalen Netz erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine statistisch gewünschte Genauigkeit erreicht, die einem trainierten neuronalen Netz3508 zugeordnet ist. Das trainierte neuronale Netz3508 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren. - Unbeaufsichtigtes Lernen ist ein Lernverfahren, bei dem das Netz versucht, sich unter Verwendung von nicht gekennzeichneten Daten selbst zu trainieren. Somit enthält der Trainingsdatensatz
3502 für unbeaufsichtigtes Lernen Eingabedaten ohne zugeordnete Ausgabedaten. Das untrainierte neuronale Netz3506 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingaben erlernen und kann bestimmen, wie einzelne Eingaben mit dem Gesamtdatensatz in Beziehung stehen. Unbeaufsichtigtes Training kann verwendet werden, um eine selbstorganisierende Karte zu erzeugen, die ein Typ eines trainierten neuronalen Netzes3507 ist, der Operationen ausführen kann, die zum Reduzieren der Dimensionalität von Daten nützlich sind. Unbeaufsichtigtes Training kann auch zur Anomaliendetektion verwendet werden, wodurch Datenpunkte in einem Eingabedatensatz identifiziert werden können, die von den normalen Datenmustern abweichen. - Variationen des beaufsichtigten und unbeaufsichtigten Trainings können ebenfalls angewendet werden. Halbbeaufsichtigtes Lernen ist eine Technik, bei der der Trainingsdatensatz
3502 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten derselben Verteilung enthält. Inkrementelles Lernen ist eine Variante des beaufsichtigten Lernens, bei der Eingabedaten fortlaufend zum weiteren Trainieren des Modells verwendet werden. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netz3508 , sich an die neuen Daten3512 anzupassen, ohne das in dem Netz während des anfänglichen Trainings gewonnene Wissen zu vergessen. - Ob nun beaufsichtigt oder unbeaufsichtigt, der Trainingsprozess für besonders tiefe neuronale Netze kann für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstelle eines einzelnen Rechenknotens kann ein verteiltes Netz von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
-
36A ist ein Blockdiagramm, das verteiltes Lernen darstellt. Das verteilte Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten wie die oben beschriebenen Knoten verwendet, um ein beaufsichtigtes oder unbeaufsichtigtes Training eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Hostprozessoren und einen oder mehrere der Allzweck-Verarbeitungsknoten umfassen, beispielsweise eine hochparallele Allzweck-Grafikverarbeitungseinheit. Wie dargestellt kann verteiltes Lernen mit Modellparallelität3602 , Datenparallelität3604 oder einer Kombination aus Modell- und Datenparallelität durchgeführt werden. - Bei der Modellparallelität
3602 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzes durchführen. Beispielsweise kann jede Schicht eines neuronalen Netzes von einem anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen der Modellparallelität gehört die Möglichkeit, auf besonders große Modelle zu skalieren. Das Aufteilen der verschiedenen Schichten des neuronalen Netzes zugeordneten Berechnungen ermöglicht das Training sehr großer neuronaler Netze, bei denen die Gewichte aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann Modellparallelität besonders nützlich sein, um ein unbeaufsichtigtes Training großer neuronaler Netze durchzuführen. - Bei der Datenparallelität
3604 haben die verschiedenen Knoten des verteilten Netzes eine vollständige Instanz des Modells und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse der verschiedenen Knoten werden dann kombiniert. Obwohl verschiedene Ansätze für Datenparallelität möglich sind, erfordern alle Ansätze für datenparalleles Training eine Technik zum Kombinieren von Ergebnissen und zum Synchronisieren der Modellparameter zwischen jeweiligen Knoten. Beispielhafte Ansätze zum Kombinieren von Daten umfassen eine Parametermittelung und eine aktualisierungsbasierte Datenparallelität. Die Parametermittelung trainiert jeden Knoten an einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichte, Vorspannungen) auf den Durchschnitt der Parameter aus jedem Knoten. Die Parametermittelung erfolgt über einen zentralen Parameterserver, der die Parameterdaten pflegt. Die aktualisierungsbasierte Datenparallelität ähnelt der Parametermittelung, mit der Ausnahme, dass anstelle der Übertragung von Parametern von den Knoten an den Parameterserver die Aktualisierungen für das Modell übertragen werden. Außerdem kann eine aktualisierungsbasierte Datenparallelität dezentral durchgeführt werden, wobei die Aktualisierungen komprimiert werden und zwischen Knoten übertragen werden. - Die kombinierte Modell- und Datenparallelität
3606 kann beispielsweise in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs enthält. Jeder Knoten kann eine vollständige Instanz des Modells haben, wobei separate GPUs in jedem Knoten verwendet werden, um verschiedene Teile des Modells zu trainieren. - Das verteilte Training weist im Vergleich zum Training auf einer einzelnen Maschine erhöhten Zusatzaufwand auf. Die hier beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Zusatzaufwand für verteiltes Training zu verringern, einschließlich Techniken zum Ermöglichen einer GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und einer beschleunigten Datenfernsynchronisation.
- Beispielhafte Maschinenlernanwendungen
- Maschinelles Lernen kann angewendet werden, um eine Vielzahl von technologischen Problemen zu lösen, einschließlich, aber nicht beschränkt auf, maschinelles Sehen, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Maschinelles Sehen ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen des maschinellen Sehens reichen von der Reproduktion menschlicher Sehfähigkeiten wie der Erkennung von Gesichtern bis zur Schaffung neuer Kategorien von Sehfähigkeiten. Beispielsweise können Bildverarbeitungsanwendungen dazu ausgelegt sein, Schallwellen anhand der Schwingungen erkennen, die in Objekten ausgelöst werden, die in einem Video sichtbar sind. Durch das mit Parallelprozessoren beschleunigte maschinelle Lernen können Anwendungen maschinellen Sehens unter Verwendung eines erheblich größeren Trainingsdatensatzes als bisher möglich trainiert werden und Inferenzsysteme unter Verwendung von Parallelprozessoren mit geringem Energieverbrauch implementiert werden.
- Das mit parallelen Prozessoren beschleunigte maschinelle Lernen hat Anwendungen beim autonomen Fahren einschließlich Fahrspur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Techniken für beschleunigtes maschinelles Lernen können verwendet werden, um basierend auf Datensätzen Fahrmodelle zu trainieren, die die geeigneten Antworten auf bestimmte Trainingseingaben definieren. Die hierin beschriebenen Parallelprozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netze ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von Inferenzprozessoren mit geringem Energieverbrauch in einer mobilen Plattform, die für die Integration in autonome Fahrzeuge geeignet ist.
- Mit Parallelprozessoren beschleunigte tiefe neuronale Netze haben Maschinenlernansätze für die automatische Spracherkennung (ASR) ermöglicht. ASR umfasst die Erstellung einer Funktion, die die wahrscheinlichste Sprachsequenz unter Vorgabe einer eingegebenen akustischen Sequenz berechnet. Durch beschleunigtes maschinelles Lernen mittels tiefen neuronalen Netzen konnten die bisher für ASR verwendeten Hidden-Markov-Modelle (HMM) und Gauß-Mischungsmodelle (GMM) ersetzt werden.
- Mit Parallelprozessoren beschleunigtes maschinelles Lernen kann auch verwendet werden, um die Verarbeitung natürlicher Sprache zu beschleunigen. Automatische Lernprozeduren können statistische Inferenzalgorithmen verwenden, um Modelle zu erzeugen, die gegenüber fehlerhaften oder nicht vertrauten Eingaben robust sind. Beispielhafte Anwendungen für die Verarbeitung natürlicher Sprachen umfassen eine automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
- Die zum maschinellen Lernen verwendeten Parallelverarbeitungsplattformen können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Die Trainingsplattformen sind im Allgemeinen hochgradig parallel und umfassen Optimierungen zur Beschleunigung des Trainings eines einzelnen Knotens mit mehreren GPUs und des Trainings mehrerer Knoten mit mehreren GPUs. Beispielhafte Parallelprozessoren, die für das Training geeignet sind, umfassen die hochparallele Allzweck-Grafikverarbeitungseinheit und/oder die hierin beschriebenen Multi-GPU-Rechensysteme. Im Gegensatz dazu umfassen eingesetzte Maschinenlernplattformen im Allgemeinen Parallelprozessoren mit geringerer Leistung, die zur Verwendung in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
-
36B zeigt ein beispielhaftes Inferenz-Ein-Chip-System (Inferenz-SOC)3700 , das zum Durchführen von Inferenz unter Verwendung eines trainierten Modells geeignet ist. Das SOC3700 kann Verarbeitungskomponenten einschließlich eines Medienprozessors3702 , eines Sichtprozessors3704 , einer GPGPU3706 und eines Mehrkernprozessors3708 , integrieren. Das SOC33700 kann zudem einen chipinternen Speicher3705 aufweisen, der einen gemeinsam genutzten chipinternen Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für den Betrieb mit geringem Energieverbrauch optimiert sein, um den Einsatz auf einer Vielzahl von Maschinenlernplattformen einschließlich autonomer Fahrzeuge und autonomer Roboter zu ermöglichen. Beispielsweise kann eine Implementierung des SOC3700 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC3700 für die Verwendung in autonomen Fahrzeugen ausgelegt ist, ist das SOC so konzipiert und ausgelegt, dass die relevanten Standards für die funktionale Sicherheit des Rechtssystems des Einsatzlandes eingehalten werden. - Während des Betriebs können der Medienprozessor
3702 und der Sichtprozessor3104 zusammenarbeiten, um Operationen maschinellen Sehens zu beschleunigen. Der Medienprozessor3702 kann eine Decodierung von mehreren hochauflösenden Videoströmen (z. B. 4K, 8K) mit niedriger Latenz ermöglichen. Die decodierten Videoströme können in einen Puffer im chipinternen Speicher3705 geschrieben werden. Der Sichtprozessor3704 kann dann das decodierte Video parsen und vorbereitende Verarbeitungsoperationen an den Frames des decodierten Videos durchführen, um die Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells vorzubereiten. Beispielsweise kann der Sichtprozessor3704 Faltungsoperationen für ein CNN beschleunigen, das zum Ausführen einer Bilderkennung an den hochauflösenden Videodaten verwendet wird, während Backend-Modellberechnungen von der GPGPU3706 durchgeführt werden. - Der Mehrkernprozessor
3708 kann eine Steuerlogik aufweisen, um die Sequenzierung und Synchronisierung von Datenübertragungen und gemeinsamen Speicheroperationen zu unterstützen, die von dem Medienprozessor3702 und vom Sichtprozessor3104 ausgeführt werden. Der Mehrkernprozessor3708 kann auch als Anwendungsprozessor zum Ausführen von Softwareanwendungen, die die Inferenzberechnungsfähigkeit der GPGPU3706 nutzen können, fungieren. Zum Beispiel kann mindestens ein Teil der Navigations- und Fahrlogik in Software implementiert werden, die auf dem Mehrkernprozessor3708 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPGPU3706 ausgeben oder die Rechenarbeitslasten können an den Mehrkernprozessor3708 ausgegeben werden, der mindestens einen Teil dieser Operationen auf die GPGPU3706 auslagern kann. - Die GPGPU
3706 kann Rechencluster wie eine Niedrigenergiekonfiguration der Rechencluster DPLAB06A-DPLAB06H in der hochparallelen Allzweck-Grafikverarbeitungseinheit DPLAB00 umfassen. Die Rechencluster in der GPGPU3706 können Befehle unterstützen, die speziell für die Durchführung von Inferenzberechnungen in einem trainierten neuronalen Netz optimiert sind. Beispielsweise kann die GPGPU3706 Befehle zum Ausführen von Berechnungen mit geringer Genauigkeit wie 8-Bit- und 4-Bit-Ganzzahlvektoroperationen unterstützen. - Strahlverfolgungsarchitektur
- In einer Implementierung umfasst der Grafikprozessor eine Schaltungsanordnung und/oder Programmcode zum Durchführen einer Echtzeitstrahlverfolgung. In einigen Ausführungsformen ist ein dedizierter Satz von Strahlverfolgungskernen in dem Grafikprozessor enthalten, um die verschiedenen hier beschriebenen Strahlverfolgungsoperationen einschließlich Strahldurchquerungs- und/oder Strahlschnittoperationen durchzuführen. Zusätzlich zu den Strahlverfolgungskernen umfasst eine Ausführungsform mehrere Sätze von Grafikverarbeitungskernen zum Ausführen programmierbarer Schattierungsoperationen und mehrere Sätze von Tensorkernen zum Ausführen von Matrixoperationen an Tensordaten.
-
37 zeigt einen beispielhaften Abschnitt einer solchen Grafikverarbeitungseinheit (GPU)3105 , die dedizierte Sätze von Grafikverarbeitungsbetriebsmitteln umfasst, die in Mehrkerngruppen3700A-N angeordnet sind. Obwohl nur die Einzelheiten einer einzelnen Mehrkerngruppe3700A angegeben sind, versteht es sich, dass die anderen Mehrkerngruppen3700B-N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsbetriebsmitteln ausgestattet sein können. - Wie dargestellt kann eine Mehrkerngruppe
3700A einen Satz von Grafikkernen3730 , einen Satz von Tensorkernen3740 und einen Satz von Strahlverfolgungskernen3750 umfassen. Ein Planer/Abfertiger3710 plant und verteilt die Grafikstränge zur Ausführung auf den verschiedenen Kernen3730 ,3740 ,3750 . Ein Satz von Registersätzen3720 speichert Operandenwerte, die von den Kernen3730 ,3740 ,3750 beim Ausführen der Grafikstränge verwendet werden. Dabei kann es sich beispielsweise um Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkommadatenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten handeln. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert. - Ein oder mehrere Ebene-1-Caches (L1-Caches) und Textureinheiten
3760 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Grenzvolumendaten usw. lokal in jeder Mehrkerngruppe3700A . Ein Level-2--Cache (L2-Cache)3780 , der von allen oder einer Teilmenge der Mehrkerngruppen3700A-N gemeinsam genutzt wird, speichert Grafikdaten und/oder Befehle für mehrere gleichzeitige Grafikstränge. Wie dargestellt kann der L2-Cache3780 von mehreren Mehrkerngruppen3700A-N gemeinsam genutzt werden. Ein oder mehrere Speichercontroller3770 koppeln die GPU3705 mit einem Speicher3798 , der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann. - Die Eingabe/Ausgabe-Schaltungsanordnung (E/A-Schaltungsanordnung)
3795 koppelt die GPU3705 mit einer oder mehreren E/A-Vorrichtungen3795 wie etwa Digitalsignalprozessoren (DSPs), Netzcontrollern oder Anwendereingabevorrichtungen. Eine chipinterne Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen3790 mit der GPU3705 und dem Speicher3798 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs)3770 der E/A-Schaltungsanordnung3795 koppeln die E/A-Vorrichtungen3790 direkt mit dem Systemspeicher3798 . In einer Ausführungsform verwaltet die IOMMU3770 mehrere Sätze von Seitentabellen zum Zuordnen von virtuellen Adressen zu physischen Adressen in dem Systemspeicher3798 . In dieser Ausführungsform können sich die E/A-Vorrichtungen3790 , die CPU(s)3799 und die GPU(s)3705 den gleichen virtuellen Adressraum teilen. - In einer Implementierung unterstützt die IOMMU
3770 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen abzubilden (z. B. innerhalb des Systemspeichers3798 ), verwalten. Die Basisadressen von jeweils dem ersten und zweiten Satz von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. damit der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl dies in37 nicht dargestellt ist, kann jeder der Kerne3730 ,3740 ,3750 und/oder der Mehrkerngruppen3700A-N Übersetzungspuffer (TLBs) aufweisen, um Übersetzungen von Gast virtuell zu Gast physisch, Übersetzungen von Gast physisch zu Host physisch und Übersetzungen von Gast virtuell zu Host physisch zwischenzuspeichern. - In einer Ausführungsform sind die CPUs
3799 , GPUs3705 und E/A--Vorrichtungen3790 auf einem einzelnen Halbleiterchip und/oder einer einzelnen Chipbaugruppe integriert. Der dargestellte Speicher3798 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichercontrollern3770 gekoppelt sein. In einer Implementierung umfasst der Speicher3798 einen GDDR6-Speicher, der den gleichen virtuellen Adressraum wie andere physische Speicher auf Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind. - In einer Ausführungsform umfassen die Tensorkerne
3740 mehrere Ausführungseinheiten, die speziell zum Ausführen von Matrixoperationen ausgelegt sind, die die grundlegende Rechenoperation sind, die zum Ausführen von Operationen des tiefen Lernens verwendet wird. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Training und Inferenz von neuronalen Netzen verwendet werden. Die Tensorkerne3740 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkommazahlen mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkommazahlen mit halber Genauigkeit (z. B. 16 Bits, Ganzzahlwörter (16 Bit), Bytes (8 Bit) und Halb-Bytes (4 Bit). In einer Ausführungsform extrahiert eine Implementierung neuronaler Netze Merkmale jeder gerenderten Szene, wobei möglicherweise Einzelheiten aus mehreren Frames kombiniert werden, um ein qualitativ hochwertiges endgültiges Bild zu erstellen. - In Implementierungen tiefen Lernens kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen
3740 eingeplant werden. Das Training von neuronalen Netzen erfordert insbesondere eine signifikante Anzahl von Matrixpunktproduktoperationen. Um eine Innenproduktformulierung einer N×N×N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne3740 mindestens N Punktproduktverarbeitungselemente enthalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus werden N Punktprodukte verarbeitet. - Matrixelemente können in Abhängigkeit von der bestimmten Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halb-Bytes (z. B. INT4). Für die Tensorkerne
3740 können verschiedene Genauigkeitsmodi spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Arbeitslasten verwendet wird (z. B. Inferenz-Arbeitslasten, die eine Quantisierung in Bytes und Halb-Bytes tolerieren können). - In einer Ausführungsform beschleunigen die Strahlverfolgungskerne
3750 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch Nicht-Echtzeit-Strahlverfolgungs-Implementierungen. Insbesondere umfassen die Strahlverfolgungskerne3750 eine Strahldurchquerungs-/Strahlschnitt-Schaltungsanordnung zum Durchführen einer Strahldurchquerung unter Verwendung von Grenzvolumenhierarchien (BVHs) und zum Identifizieren von Schnittmengen zwischen Strahlen und Primitiven, die in den BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne3750 können auch eine Schaltungsanordnung zum Durchführen von Tiefentests und Aussortieren (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Implementierung führen die Strahlverfolgungskerne3750 Durchquerungs- und Schnittoperationen gemäß den hierin beschriebenen Bildentrauschungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen3740 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne3740 beispielsweise ein neuronales Netz für tiefes Lernen zum Durchführen der Entrauschung von durch die Strahlverfolgungskerne3750 erzeugten Frames. Die CPU(s)3799 , die Grafikkerne3730 und/oder die Strahlverfolgungskerne3750 können jedoch auch die gesamte Entrauschung oder einen Teil davon und/oder Algorithmen für tiefes Lernen implementieren. - Zudem kann wie oben beschrieben ein verteilter Ansatz zum Entrauschen verwendet werden, bei dem sich die GPU
3105 in einer Rechenvorrichtung befindet, die über ein Netz oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen verbunden ist. In dieser Ausführungsform teilen sich die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten für ein neuronales Netz, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für verschiedene Arten von Frames und/oder verschiedene Grafikanwendungen durchzuführen. - In einer Ausführungsform verarbeiten die Strahlverfolgungskerne
3750 alle BVH-Durchquerungs- und Strahl-Primitiv-Schnittstellen, wodurch vermieden wird, dass die Grafikkerne3730 mit Tausenden von Befehlen pro Strahl überlastet werden. In einer Ausführungsform umfasst jeder Strahlverfolgungskern3750 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahl-Dreieck-Schnitt-Tests (z. B. schneidende Strahlen, die durchquert worden sind). Somit kann in einer Ausführungsform die Mehrkerngruppe3700A einfach eine Strahlsonde starten und die Strahlverfolgungskerne3750 führen unabhängig eine Strahldurchquerung und eine einen Strahlschnitt durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrere Treffer usw.) an den Strangkontext zurück. Die anderen Kerne3730 ,3740 werden zum Durchführen anderer Grafik- oder Berechnungsarbeit freigegeben, während die Strahlverfolgungskerne3750 die Durchquerungs- und Schnittoperationen durchführen. - In einer Ausführungsform umfasst jeder Strahlverfolgungskern
3750 eine Durchquerungseinheit zum Durchführen von BVH-Testoperationen und eine Schnitteinheit, die Strahl-Primitiv-Schnitt-Tests durchführt. Die Schnitteinheit erzeugt eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie an den entsprechenden Strang liefert. Während der Durchquerungs- und Schnittoperationen werden die Ausführungsbetriebsmittel der anderen Kerne (z. B. der Grafikkerne3730 und der Tensorkerne3740 ) freigegeben, um andere Formen der Grafikarbeit auszuführen. - In einer speziellen unten beschriebenen Ausführungsform wird ein hybrider Ansatz zur Rasterung/Strahlverfolgung verwendet, bei dem die Arbeit unter den Grafikkernen
3730 und den Strahlverfolgungskernen3750 verteilt wird. - In einer Ausführungsform umfassen die Strahlverfolgungskerne
3150 (und/oder andere Kerne3730 ,3740 ) Hardwareunterstützung für einen Strahlverfolgungsbefehlssatz wie etwa Microsofts DirectX-Strahlverfolgung (DXR), der einen DispatchRays-Befehl sowie Strahlerzeugungs-, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Schattierer, die die Zuweisung eindeutiger Sätze von Schattierern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die von den Strahlverfolgungskernen3750 , den Grafikkernen3730 und den Tensorkernen3740 unterstützt werden kann, ist Vulkan1.1.85 . Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind. - Im Allgemeinen können die verschiedenen Kerne
3750 ,3740 ,3730 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, nächsten Treffer, beliebigen Treffer, Strahl-Primitiv-Schnitt, pro-Primitiv und hierarchische Begrenzungsrahmenkonstruktion, Fehltreffer, Besuch und Ausnahmen umfasst. Insbesondere umfasst eine Ausführungsform Strahlverfolgungsbefehle, um die folgenden Funktionen auszuführen: - Strahlerzeugung - Strahlerzeugungsbefehle können für jedes Pixel, jede Abtastung oder andere anwenderdefinierte Arbeitszuweisungen ausgeführt werden.
- Nächster Treffer - Ein Nächster-Treffer-Befehl kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
- Beliebiger Treffer - Ein Beliebiger-Treffer-Befehl ermittelt mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um möglicherweise einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
- Schnitt - Ein Schnittbefehl führt einen Strahl-Primitiv-Schnitt-Test durch und gibt ein Ergebnis aus.
- Pro-Primitiv-Begrenzungsrahmenkonstruktion - Dieser Befehl baut einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Aufbau einer neuen BVH- oder einer anderen Beschleunigungsdatenstruktur).
- Fehltreffer - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene verfehlt.
- Besuch - Gibt die Kindervolumen an, die ein Strahl durchqueren wird.
- Ausnahmen - Umfasst verschiedene Arten von Ausnahmebehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
- Hierarchische Strahlbündelverfolgung
- Begrenzungsvolumenhierarchien werden üblicherweise verwendet, um die Effizienz zu verbessern, mit der Operationen an Grafikprimitiven und anderen Grafikobjekten ausgeführt werden. Eine BVH ist eine hierarchische Baumstruktur, die auf einer Menge von geometrischen Objekten basiert. Oben in der Baumstruktur befindet sich der Wurzelknoten, der alle geometrischen Objekte in einer bestimmten Szene einschließt. Die einzelnen geometrischen Objekte werden in Begrenzungsvolumina eingehüllt, die die Blattknoten des Baums bilden. Diese Knoten werden dann als kleine Mengen gruppiert und in größere Begrenzungsvolumina eingeschlossen. Diese wiederum werden rekursiv gruppiert und in andere größere Begrenzungsvolumina eingeschlossen, was schließlich zu einer Baumstruktur mit einem einzelnen Begrenzungsvolumen führt, das durch den Wurzelknoten an der Oberseite des Baums dargestellt wird. Begrenzungsvolumenhierarchien werden verwendet, um eine Vielzahl von Operationen an Sätzen von geometrischen Objekten effizient zu unterstützen, z. B. Kollisionsdetektion, Primitiv-Aussortierung und Strahldurchquerungs-/Strahlschnittoperationen, die bei der Strahlverfolgung verwendet werden.
- In Strahlverfolgungsarchitekturen werden Strahlen durch eine BVH geleitet, um Strahl-Primitiv-Schnittpunkte zu bestimmen. Wenn ein Strahl beispielsweise nicht durch den Wurzelknoten der BVH geht, schneidet der Strahl keines der von der BVH eingeschlossenen Primitive und es ist keine weitere Verarbeitung für den Strahl in Bezug auf diesen Satz von Primitiven erforderlich. Wenn ein Strahl durch einen ersten Kinderknoten der BVH, aber nicht durch den zweiten Kinderknoten geht, muss der Strahl nicht gegen irgendwelche von dem zweiten Kinderknoten eingeschlossenen Primitive getestet werden. Auf diese Weise bietet ein BVH einen effizienten Mechanismus zum Testen auf Strahl-Primitiv-Schnittpunkte.
- In einer Ausführungsform der Erfindung werden Gruppen von zusammenhängenden Strahlen, die als „Strahlenbündel“ bezeichnet werden, statt einzelne Strahlen gegen die BVH getestet.
38 zeigt ein beispielhaftes Strahlenbündel3801 , der durch vier verschiedene Strahlen umrissen ist. Alle Strahlen, die das durch die vier Strahlen definierte Feld3800 schneiden, werden als innerhalb desselben Strahlenbündels liegend betrachtet. Obwohl das Strahlenbündel3801 in38 durch eine rechteckige Anordnung von Strahlen definiert ist, können Strahlenbündel auf verschiedene andere Arten unter bleibender Einhaltung der zugrundeliegenden Prinzipien der Erfindung (z. B. Kreise, Ellipsen usw.) definiert sein. -
39 zeigt eine beispielhafte Ausführungsform, in der eine Strahlverfolgungsmaschine3910 einer GPU3920 die hier beschriebenen Strahlenbündelverfolgungstechniken implementiert. Insbesondere erzeugt die Strahlerzeugungsschaltungsanordnung3904 mehrere Strahlen, für die Durchquerungs- und Schnittoperationen durchzuführen sind. Anstatt jedoch Durchquerungs- und Schnittoperationen an einzelnen Strahlen durchzuführen, führt die dargestellte Ausführungsform Durchquerungs- und Schnittoperationen unter Verwendung einer Hierarchie von Strahlenbündeln3907 durch, die durch die Strahlenbündelhierarchie-Konstruktionsschaltung3905 erzeugt wird. In einer Ausführungsform ist die Strahlenbündelhierarchie analog zu der Begrenzungsvolumenhierarchie (BVH). Zum Beispiel liefert40 ein Beispiel eines Primärstrahlenbündels4000 , das in mehrere verschiedene Komponenten unterteilt sein kann. Insbesondere kann das Primärstrahlenbündel4000 in die Quadranten4001 bis4004 unterteilt sein und jeder Quadrant kann selbst in Unterquadranten wie die Unterquadranten A-D innerhalb des Quadranten4004 unterteilt sein. Das Primärstrahlenbündel kann auf verschiedene Arten unterteilt sein. Beispielsweise kann in einer Ausführungsform das Primärstrahlenbündel in zwei Hälften (anstelle von Quadranten) geteilt sein und jede Hälfte kann in zwei Hälften geteilt sein und so weiter. Unabhängig davon, wie die Unterteilungen vorgenommen werden, wird in einer Ausführungsform eine hierarchische Struktur auf ähnliche Weise wie eine BVH erzeugt, z. B. mit einem Wurzelknoten, der das Primärstrahlenbündel4000 darstellt, einer Kindknoten erster Ebene, die jeweils durch einen Quadranten4001-4004 dargestellt sind, Kindknoten zweiter Ebene für jeden Unterquadranten A-D und so weiter. - In einer Ausführungsform führt die Durchquerungs-/Schnittschaltungsanordnung
3906 , sobald die Strahlenbündelhierarchie3907 aufgebaut ist, Durchquerungs-/Schnittoperationen unter Verwendung der Strahlenbündelhierarchie3907 und der BVH3908 durch. Insbesondere kann sie das Strahlenbündel gegen die BVH- und Ausschluss-Abschnitte des Strahlenbündels testen, die keine Teile der BVH schneiden. Unter Verwendung der in40 gezeigten Daten können beispielsweise dann, wenn sich die Unterstrahlenbündel, die den Unterbereichen4002 und4003 zugeordnet sind, nicht mit der BVH oder einem bestimmten Zweig der BVH schneiden, in Bezug auf die BVH oder den Zweig aussortiert werden. Die verbleibenden Abschnitte4001 ,4004 können gegen die BVH getestet werden, indem eine Tiefensuche oder ein anderer Suchalgorithmus durchgeführt wird. - Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in
41 dargestellt. Das Verfahren kann im Kontext der oben beschriebenen Grafikverarbeitungsarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Architektur beschränkt. - Bei
4100 wird ein Primärstrahlenbündel konstruiert, das mehrere Strahlen umfasst, und bei4101 wird das Strahlenbündel unterteilt und hierarchische Datenstrukturen werden erzeugt, um eine Strahlenbündelhierarchie zu erzeugen. In einer Ausführungsform werden die Operationen4100-4101 als eine einzige integrierte Operation ausgeführt, die eine Strahlenbündelhierarchie aus mehreren Strahlen aufbaut. Bei4102 wird die Strahlenbündelhierarchie mit einer BVH verwendet, um Strahlen (aus der Strahlenbündelhierarchie) und/oder Knoten/Primitive aus der BVH auszusortieren. Bei4103 werden Strahl-Primitiv-Schnittpunkte für die verbleibenden Strahlen und Primitive bestimmt. - Verlustbehaftete und Verlustfreie Paketkompression in einem verteilten Strahlenverfolgungssystem
- In einer Ausführungsform werden Strahlverfolgungsoperationen über mehrere Rechenknoten verteilt, die über ein Netz miteinander verbunden sind.
42 zeigt beispielsweise einen Strahlverfolgungs-Cluster4200 , der mehrere Strahlverfolgungsknoten4210-4213 umfasst, die Strahlverfolgungsoperationen parallel ausführen, wobei möglicherweise die Ergebnisse an einem der Knoten kombiniert werden. In der dargestellten Architektur sind die Strahlverfolgungsknoten4210-4213 über ein Gateway kommunikationstechnisch mit einer clientseitigen Strahlverfolgungsanwendung4230 gekoppelt. - Eine der Schwierigkeiten bei einer verteilten Architektur ist die große Menge an paketierten Daten, die zwischen jeweiligen der Strahlverfolgungsknoten
4210-4213 übertragen werden müssen. In einer Ausführungsform werden sowohl verlustfreie Komprimierungstechniken als auch verlustbehaftete Komprimierungstechniken verwendet, um die zwischen den Strahlverfolgungsknoten4210-4213 übertragenen Daten zu reduzieren. - Um eine verlustfreie Komprimierung zu implementieren, werden, anstatt mit den Ergebnissen bestimmter Arten von Operationen gefüllte Pakete zu senden, Daten oder Befehle gesendet, die es dem empfangenden Knoten ermöglichen, die Ergebnisse zu rekonstruieren. Beispielsweise benötigen stochastisch abgetastete Flächenbeleuchtungen und Umgebungsverdeckungsoperationen (AO-Operationen) nicht unbedingt Richtungen. Folglich sendet in einer Ausführungsform ein sendender Knoten einfach einen Zufallsstartpunkt, der dann von dem empfangenden Knoten verwendet wird, um eine Zufallsabtastung durchzuführen. Wenn beispielsweise eine Szene über die Knoten
4210-4212 verteilt ist, müssen, um Licht1 an Punkten p1-p3 abzutasten, nur die Licht-ID und die Ursprünge an die Knoten4210-4212 gesendet werden. Jeder der Knoten kann dann das Licht unabhängig stochastisch abtasten. In einer Ausführungsform wird der Zufallsstartpunkt durch den empfangenden Knoten erzeugt. In ähnlicher Weise können für Primärstrahl-Trefferpunkte Umgebungsverdeckung (AO) und weiche Schattenabtastung auf den Knoten4210-4212 berechnet werden, ohne für die ursprünglichen Punkte auf nachfolgende Frames zu warten. Wenn bekannt ist, dass ein Satz von Strahlen zu derselben Punktlichtquelle geht, können zudem Befehle gesendet werden, die die Lichtquelle für den empfangenden Knoten identifizieren, der dies auf den Satz von Strahlen anwendet. Als ein weiteres Beispiel kann dann, wenn N Umgebungsverdeckungsstrahlen an einem einzelnen Punkt gesendet werden, ein Befehl gesendet werden, um von diesem Punkt N Abtastungen zu erzeugen. - Verschiedene zusätzliche Techniken können zur verlustbehafteten Komprimierung angewendet werden. Beispielsweise kann in einer Ausführungsform ein Quantisierungsfaktor verwendet werden, um alle Koordinatenwerte zu quantisieren, die der BVH, den Primitiven und den Strahlen zugeordnet sind. Außerdem können 32-Bit-Gleitkommawerte, die für Daten wie BVH-Knoten und Primitive verwendet werden, in 8-Bit-Ganzzahlwerte konvertiert werden. In einer bestimmten Implementierung werden die Begrenzungen von Strahlenpaketen in voller Genauigkeit gespeichert, aber einzelne Strahlenpunkte
P1-P3 werden als indexierte Versätze zu den Begrenzungen übertragen. In ähnlicher Weise können mehrere lokale Koordinatensysteme erzeugt werden, die 8-Bit-Ganzzahlwerte als lokale Koordinaten verwenden. Der Ort des Ursprungs jedes dieser lokalen Koordinatensysteme kann unter Verwendung der Werte mit voller Genauigkeit (z. B. 32-Bit-Gleitkommawerte) codiert werden, wodurch das globale und das lokale Koordinatensystem effektiv verbunden werden. - Das Folgende ist ein Beispiel einer verlustfreien Komprimierung, die in einer Ausführungsform der Erfindung angewendet wird. Ein Beispiel für ein Strahl-Datenformat, das intern in einem Strahlverfolgungsprogramm verwendet wird, ist wie folgt:
struct Ray { uint32 pixId; uint32 materialID; uint32 instanceID; uint64 primitiveID; uint32 geometryID; uint32 lightID; float origin [3]; float direction[3]; float t0; float t; float time; float normal[3]; //für Geometrieschnitte float u; float v; float wavelength; float phase; //Interferometrie float refractedOffset; //schlierenartig float amplitude; float weight; };
Anstatt die Rohdaten für jeden erzeugten Knoten zu senden, können diese Daten komprimiert werden, indem Werte gruppiert werden und wenn möglich implizite Strahlen unter Verwendung geeigneter Metadaten erzeugt werden.
Bündeln und Gruppieren von Strahldaten
Eine Ausführungsform verwendet Merker für gemeinsame Daten oder Masken mit Modifikatoren.
struct RayPacket { uint32 size; uint32 flags; }list<Ray> rays;
Zum Beispiel:
RayPacket.rays = ray_1 to ray_256
Ursprünge werden alle geteilt
Alle Strahldaten werden gepackt, außer dass über alle Strahlen hinweg nur ein einzelner Ursprung gespeichert wird. RayPacket.flags ist auf RAYPACKET-COMMON-ORIGIN gesetzt. Wenn RayPacket beim Empfang entpackt wird, werden die Ursprünge anhand des einzelnen Ursprungswerts aufgefüllt.
Ursprünge werden nur von einigen Strahlen geteilt
Alle Strahldaten werden gepackt, mit Ausnahme von Strahlen, die denselben Ursprung haben. Für jede Gruppe eindeutiger gemeinsamer Ursprünge wird ein Operator gepackt, der die Operation (gemeinsame Ursprünge) identifiziert, den Ursprung speichert und maskiert, welche Strahlen sich die Informationen teilen. Eine solche Operation kann an beliebigen gemeinsamen Werten zwischen Knoten wie Material-IDs, Primitiv-IDs, Ursprung, Richtung, Normalen usw. durchgeführt werden.
struct RayOperation { uint8 operationID; void* value; } uint64 mask;
Senden von impliziten Strahlen
Oftmals können Strahldaten auf der Empfangsseite mit minimalen zur Erzeugung verwendeten Metainformationen abgeleitet werden. Ein sehr verbreitetes Beispiel ist die Erzeugung mehrerer Sekundärstrahlen, um einen Bereich stochastisch abzutasten. Anstelle dessen, dass der Sender einen Sekundärstrahl erzeugt, diesen sendet und der Empfänger mit diesem arbeitet, kann der Sender einen Befehl senden, dass ein Strahl mit irgendwelchen abhängigen Informationen erzeugt werden muss, und der Strahl wird auf der Empfangsseite erzeugt. In dem Fall, in dem der Strahl zuerst von dem Sender erzeugt werden muss, um zu bestimmen, an welchen Empfänger er gesendet werden soll, wird der Strahl erzeugt und der zufällige Startpunkt kann gesendet werden, um den exakt gleichen Strahl erneut zu erzeugen.
Um beispielsweise einen Trefferpunkt mit 64 Schattenstrahlen abzutasten, die eine Flächenlichtquelle abtasten, schneiden sich alle 64 Strahlen mit Bereichen aus derselben Berechnung N4 . Ein Strahlenpaket mit gemeinsamem Ursprung wird erstellt. Es könnten weitere Daten gesendet werden, wenn man wollte, dass der Empfänger den resultierenden Pixelbeitrag schattiert, aber für dieses Beispiel wird angenommen, dass nur zurückgegeben werden soll, ob ein Strahl auf Daten eines weiteren Knotens trifft. Eine Strahloperation wird für eine Operation zum Erzeugen von Schattenstrahlen erstellt und mit dem Wert der abzutastenden Licht-ID und dem Zufallszahlen-Startpunkt versehen. Wenn N4 das Strahlenpaket empfängt, erzeugt sie die vollständig ausgefüllten Strahldaten, indem sie die gemeinsam genutzten Ursprungsdaten für alle Strahlen ausfüllt und die Richtung basierend auf der stochastisch mit dem Zufallszahl-Startpunkt abgetasteten Licht-ID festlegt, um die gleichen Strahlen zu erzeugen, die der ursprüngliche Sender erzeugt hat. Wenn die Ergebnisse zurückgegeben werden, müssen nur binäre Ergebnisse für jeden Strahl zurückgegeben werden, die von einer Maske über die Strahlen gelegt werden können.
Das Senden der ursprünglichen 64 Strahlen hätte in diesem Beispiel 104 Bytes * 64 Strahlen = 6656 Bytes verwendet. Wenn die zurückkommenden Strahlen auch in ihrer Rohform gesendet worden wären, hätte sich dies ebenfalls auf 13312 Bytes verdoppelt. Bei Verwendung der verlustfreien Komprimierung, bei der nur der gemeinsame Strahlursprung, die Normale und die Strahlerzeugungsoperation mit Startpunkt und ID gesendet werden, werden nur 29 Bytes gesendet, wobei 8 Bytes für die geschnittene Maske zurückgegeben wurden. Dies führt zu einer Datenkomprimierungsrate von ~360:1, die über das Netz gesendet werden muss. Dies beinhaltet nicht den Zusatzaufwand für die Verarbeitung der Nachricht selbst, der auf irgendeine Weise identifiziert werden müsste. Dies bleibt aber der Implementierung überlassen. Andere Operationen können durchgeführt werden, um den Strahlenursprung und die Richtungen aus der Pixel-ID für Primärstrahlen neu zu berechnen, Pixel-IDs basierend auf den Bereichen in dem Strahlenpaket neu zu berechnen, und es bestehen viele andere mögliche Implementierungen für die Neuberechnung von Werten. Ähnliche Operationen können für jeden einzelnen oder Gruppen von gesendeten Strahlen verwendet werden, einschließlich Schatten, Reflexionen, Brechung, Umgebungsverdeckung, Schnittpunkte, Volumenschnittpunkte, Schattierung, abgeprallte Reflexionen bei der Pfadverfolgung usw.
In der umgekehrten Richtung komprimiert die Strahlenkomprimierungsschaltungsanordnung 4341 die Strahldaten, die Netzschnittstelle 326 überträgt die komprimierten Strahldaten über das Netz (z. B. unter Verwendung der hierin beschriebenen Techniken), die Strahlendekomprimierungsschaltungsanordnung 4340 dekomprimiert die Strahldaten, wenn dies erforderlich ist, und Strahlverfolgungsmaschine 4330 verwendet die Daten bei Strahlverfolgungsoperationen. Obwohl sie in 43 als separate Einheit dargestellt ist, kann die Strahlendekomprimierungsschaltungsanordnung 4340-4341 jeweils in die Strahlverfolgungsmaschinen 4330-4331 integriert sein. Zum Beispiel können, sofern die komprimierten Strahldaten Befehle zum Rekonstruieren der Strahldaten umfassen, diese Befehle von jeder jeweiligen Strahlverfolgungsmaschine 4330-4331 ausgeführt werden.
Wie es in 44 dargestellt ist, kann die Strahlkomprimierungsschaltungsanordnung 4420 eine verlustbehaftete Komprimierungsschaltungsanordnung 4401 zum Durchführen der hier beschriebenen verlustbehafteten Komprimierungstechniken (z. B. Konvertieren von 32-Bit-Gleitkommakoordinaten in 8-Bit-Ganzzahlkoordinaten) und eine verlustfreie Komprimierungsschaltungsanordnung 4403 zum Durchführen der verlustfreien Komprimierungstechniken (z. B. Übertragen von Befehlen und Daten, damit die Strahlenrekomprimierungsschaltungsanordnung 4421 die Daten rekonstruieren kann) umfassen. Die Strahlendekomprimierungsschaltungsanordnung 34321 umfasst eine verlustbehaftete Dekomprimierungsschaltungsanordnung 4402 und eine verlustfreie Dekomprimierungsschaltungsanordnung 4404 zum Durchführen einer verlustfreien Dekomprimierung.
Ein Verfahren gemäß einer Ausführungsform ist in 45 dargestellt. Das Verfahren kann auf den hier beschriebenen Strahlverfolgungsarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Architektur beschränkt.
Bei 4500 werden Strahldaten empfangen, die von einem ersten Strahlverfolgungsknoten zu einem zweiten Strahlverfolgungsknoten übertragen werden. Bei 4501 führt die verlustbehaftete Komprimierungsschaltungsanordnung eine verlustbehaftete Komprimierung an den ersten Strahlverfolgungsdaten durch und bei 4502 führt die verlustfreie Komprimierungsschaltungsanordnung eine verlustfreie Komprimierung an den zweiten Strahlverfolgungsdaten durch. Bei 4503 werden die komprimierten Strahllaufdaten zu einem zweiten Strahlverfolgungsknoten übertragen. Bei 4504 führt die verlustbehaftete/verlustfreie Dekomprimierungsschaltungsanordnung eine verlustbehaftete/verlustfreie Dekomprimierung der Strahlverfolgungsdaten durch und bei 4505 führt der zweite Strahlverfolgungsknoten Strahlverfolgungsoperationen unter Verwendung der dekomprimierten Daten durch.
Grafikprozessor mit hardwarebeschleunigter Hybridstrahlverfolgung
Eine Ausführungsform der Erfindung umfasst eine Hybrid-Render-Pipeline, die eine Rasterung auf Grafikkernen 3730 und Strahlverfolgungsoperationen auf den Strahlverfolgungskernen 3750 , den Grafikkernen 3730 und/oder den CPU-Kernen 3799 durchführt. Beispielsweise können Raster- und Tiefentests auf den Grafikkernen 3730 anstelle der Primärstrahl-Auswurfstufe durchgeführt werden. Die Strahlverfolgungskerne 3750 können dann Sekundärstrahlen für Strahlreflexionen, Brechungen und Schatten erzeugen. Außerdem können bestimmte Ausführungsformen bestimmte Bereiche einer Szene auswählen, in denen die Strahlverfolgungskerne 3750 Strahlverfolgungsoperationen ausführen (z. B. basierend auf Materialeigenschaftsschwellen wie hohen Reflexionsgraden), während andere Bereiche der Szene mit Rasterung auf den Grafikkernen 3730 gerendert werden. In einer Ausführungsform wird diese Hybrid-Implementierung für Echtzeit-Strahlverfolgungsanwendungen verwendet - wobei Latenz ein kritisches Problem ist.
Eine Ausführungsform der nachstehend beschriebenen Strahlendurchquerungsarchitektur führt eine programmierbare Schattierung und Steuerung der Strahlendurchquerung unter Verwendung vorhandener Grafikprozessoren mit Anwendung eines Befehls auf mehrere Datenströme (SIMD) und/oder eines Befehls auf mehreren Stränge (SIMT) durch, während kritische Funktionen wie die BVH-Durchquerung und/oder -Schnitte mit dedizierter Hardware beschleunigt werden. In dieser Ausführungsform wird die SIMD-Belegung für inkohärente Pfade verbessert, indem erzeugte Schattierer an bestimmten Punkten während des Durchlaufs und vor dem Schattieren neu gruppiert werden. Dies wird mit dedizierter Hardware erreicht, die Schattierer dynamisch chipintern sortiert. Die Rekursion wird verwaltet, indem eine Funktion in Fortsetzungen aufgeteilt wird, die bei der Rückgabe ausgeführt werden, und Fortsetzungen vor der Ausführung neu gruppiert werden, um die SIMD-Belegung zu verbessern.
Eine programmierbare Steuerung von Strahldurchquerung/-schnitt wird erreicht, indem die Durchquerungsfunktionalität in eine innere Durchquerung, die als Hardware mit fester Funktion implementiert werden kann, und eine äußere Durchquerung, die auf GPU-Prozessoren ausgeführt wird und eine programmierbare Steuerung durch anwenderdefinierte Durchquerungs-Schattierer ermöglicht, zerlegt wird. Der Aufwand für die Übertragung des Durchquerungskontexts zwischen Hardware und Software wird reduziert, indem der innere Durchquerungszustand während des Übergangs zwischen innerer und äußerer Durchquerung konservativ gekürzt wird.
Die programmierbare Steuerung der Strahlverfolgung kann durch die verschiedenen Schattierer-Typen ausgedrückt werden, die in der folgenden Tabelle A aufgeführt sind. Es können mehrere Schattierer für jeden Typ vorhanden sein. Beispielsweise kann jedes Material einen anderen Treffer-Schattierer aufweisen.
Tabelle A
Schattierertyp | Funktionalität |
Primär | Starten von Primärstrahlen |
Treffer | Bidirektionale Reflexionsgradverteilungsfunktions -Abtastung (BRDF-Abtastung), |
Starten von Sekundärstrahlen | |
Beliebiger Treffer | Berechnen der Durchlässigkeit für Alpha-Textur-Geometrie |
Fehltreffer | Berechnen der Strahldichte aus einer Lichtquelle |
Schnitt | Schneiden von spezifischen Formen |
Durchquerung | Instanzauswahl und Transformation |
Aufrufbar | Eine Allzweck-Funktion |
In einer Ausführungsform wird die rekursive Strahlverfolgung durch eine API-Funktion initiiert, die dem Grafikprozessor befiehlt, einen Satz von primären Schattierern oder Schnittschaltungen zu starten, die Strahl-Szenen-Schnitte für Primärstrahlen erzeugen können. Dies wiederum erzeugt andere Schattierer wie Durchquerung, Treffer-Schattierer oder Fehltreffer-Schattierer. Ein Schattierer, der einen Kind-Schattierer erzeugt, kann auch einen Rückgabewert von diesem Kind-Schattierer erhalten. Aufrufbare Schattierer sind Allzweck-Funktionen, die direkt von einem anderen Schattierer erzeugt werden können und auch Werte an den aufrufenden Schattierer zurückgeben können.
Im Betrieb sendet der primäre Abfertiger 4609 einen Satz von Primärstrahlen an den Planer 4607 , der die Arbeit für Schattierer plant, die auf den SIMD/SIMT-Kernen/EUs 4601 ausgeführt werden. Die SIMD-Kerne/EUs 4601 können die Strahlverfolgungskerne 3750 und/oder oder die Grafikkerne 3730 , die oben beschrieben sind, sein. Die Ausführung der primären Schattierer führt zu zusätzlicher Arbeit, die ausgeführt werden muss (z. B. von einem oder mehreren Kind-Schattierern und/oder Hardware mit fester Funktion). Die Nachrichteneinheit 4604 verteilt die von den SIMD-Kernen/EUs 4601 hervorgebrachte Arbeit auf den Planer 4607 , wobei nach Bedarf auf den freien Stapelpool zugegriffen wird, die Sortierschaltungsanordnung 4608 oder die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 . Wenn die zusätzliche Arbeit an den Planer 4607 gesendet wird, wird sie zur Ausführung auf den SIMD/SIMT-Kernen/EUs 4601 eingeplant. Vor dem Planen kann die Sortierschaltung 4608 die Strahlen wie hierin beschrieben in Gruppen oder Töpfen sortieren (z. B. Gruppieren von Strahlen mit ähnlichen Eigenschaften). Die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 führt eine Schnittprüfung von Strahlen unter Verwendung von BVH-Volumina durch. Beispielsweise kann die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 Strahlkoordinaten mit jeder Ebene der BVH vergleichen, um Volumina zu identifizieren, die von dem Strahl geschnitten werden.
Auf Schattierer kann unter Verwendung einer Schattiereraufzeichnung verwiesen werden, einer von Anwendern zugewiesenen Struktur, die einen Zeiger auf die Eingabefunktion, herstellerspezifische Metadaten und globale Argumente für den Schattierer enthält, der von den SIMD-Kernen/EUs 4601 ausgeführt wird. Jede ausführende Instanz eines Schattierers ist einem Aufrufstapel zugeordnet, der zum Speichern von Argumenten verwendet werden kann, die zwischen einem Eltern-Schattierer und einem Kind-Schattierer übergeben werden. Aufrufstapel können auch Verweise auf die Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Aufruf zurückkehrt.
In einer Ausführungsform gibt es eine endliche Anzahl von Aufrufstapeln, von denen jeder eine feste maximale Größe „Sstack“ aufweist, die in einem zusammenhängenden Speicherbereich zugewiesen ist. Daher kann die Basisadresse eines Stapels direkt aus einem Stapelindex (SID) als Basisadresse = SID*Sstack berechnet werden. In einer Ausführungsform werden Stapel-IDs von dem Planer 4607 zugewiesen und freigegeben, wenn Arbeit auf den SIMD-Kernen/EUs 4601 geplant wird.
In einer Ausführungsform umfasst der primäre Abfertiger 4609 einen Grafikprozessor-Befehlsprozessor, der primäre Schattierer als Antwort auf einen Abfertigungsbefehl von dem Host (z. B. einer CPU) abfertigt. Der Planer 4607 empfängt diese Abfertigungsanforderungen und startet einen primären Schattierer auf einem SIMD-Prozessorstrang, wenn er eine Stapel-ID für jede SIMD-Bahn zuweisen kann. Stapel-IDs werden aus dem freien Stapelpool 4702 zugewiesen, der zu Beginn des Abfertigungsbefehls initialisiert wird.
Ein ausführender Schattierer kann einen Kind-Schattierer durch Senden einer Erzeugungsnachricht an die Nachrichteneinheit 4604 erzeugen. Dieser Befehl enthält die dem Schattierer zugeordneten Stapel-IDs und enthält auch einen Zeiger auf die Kind-Schattierer-Aufzeichnung für jede aktive SIMD-Bahn. Ein Eltern-Schattierer kann diese Nachricht für eine aktive Bahn nur einmal ausgeben. In einer Ausführungsform wird der Eltern-Schattierer nach dem Senden von Erzeugungsnachrichten für alle relevanten Bahnen beendet.
Ein Schattierer, der auf den SIMD-Kernen/EUs 4601 ausgeführt wird, kann auch Aufgaben mit fester Funktion wie z. B. Strahl-BVH-Schnitte unter Verwendung einer Erzeugungsnachricht mit einem für die Hardware mit fester Funktion reservierten Schattierer-Aufzeichnungszeiger erzeugen. Wie erwähnt sendet die Nachrichtenübermittlungseinheit 4604 erzeugte Strahl-BVH-Schnitt-Arbeit an die Strahl-BVH-Schnitt-Schaltungsanordnung mit fester Funktion 4005 und aufrufbare Schattierer direkt an die Sortierschaltungsanordnung 4608 . In einer Ausführungsform gruppiert die Sortierschaltungsanordnung die Schattierer nach Schattierer-Aufzeichnungszeiger, im einer SIMD-Charge mit ähnlichen Eigenschaften abzuleiten. Dementsprechend können Stapel-IDs von verschiedenen übergeordneten Schattierern durch die Sortierschaltungsanordnung 4608 in derselben Charge gruppiert werden. Die Sortierschaltungsanordnung 4608 sendet gruppierte Chargen an den Planer 4607 , der auf die Schattierer-Aufzeichnungen aus dem Grafikspeicher 2511 oder dem Cache letzter Ebene (LLC) 4620 zugreift und den Schattierer auf einem Prozessorstrang startet.
In einer Ausführungsform werden Fortsetzungen als aufrufbare Schattierer behandelt und können auch durch Schattierer-Datensätze referenziert werden. Wenn ein Kind-Schattierer erzeugt wird und Werte an den Eltern-Schattierer zurückgibt, wird ein Zeiger auf die Fortsetzungs-Schattierer-Aufzeichnung auf den Aufrufstapel 4701 gelegt, wie es in 47 gezeigt ist. Wenn ein Kind-Schattierer zurückgibt, wird die Fortsetzungs-Schattierer-Aufzeichnung aus dem Aufrufstapel 4701 entfernt und ein Fortsetzungs-Schattierer wird erzeugt. Ausgelöste Fortsetzungen durchlaufen die Sortiereinheit ähnlich wie aufrufbare Schattierer und werden auf einem Prozessorstrang gestartet.
Wie es in 48 dargestellt ist, gruppiert eine Ausführungsform der Sortierschaltungsanordnung 4008 erzeugte Aufgaben nach Schattierer-Aufzeichnungszeigern 4801A , 4801B , 4801n , um SIMD-Chargen zum Schattieren zu erzeugen. Die Stapel-IDs oder Kontext-IDs in einer sortierten Charge können aus verschiedenen Abfertigungen und verschiedenen Eingabe-SIMD-Bahnen gruppiert werden. In einer Ausführungsform führt die Gruppierungsschaltungsanordnung 4810 ein Sortieren unter Verwendung einer inhaltsadressierbaren Speicherstruktur (CAM-Struktur) 4801 durch, die mehrere Einträge umfasst, wobei jeder Eintrag mit einem Etikett 4801 gekennzeichnet ist. Wie erwähnt, ist in einer Ausführungsform das Etikett 4201 ein entsprechender Schattierer-Aufzeichnungszeiger 4801A , 4801B , 4801n . In einer Ausführungsform speichert die CAM-Struktur 4801 eine begrenzte Anzahl von Etiketten (z. B. 32 , 64 , 128 usw.), die jeweils einer unvollständigen SIMD-Charge zugeordnet sind, die einem Schattierer-Aufzeichnungszeiger entspricht.
Für einen eingehenden Erzeugungsbefehl hat jede SIMD-Bahn eine entsprechende Stapel-ID (gezeigt als 16 Kontext-IDs 0-15 in jedem CAM-Eintrag) und einen Schattierer-Aufzeichnungszeiger 4801A-B , ... n (der als Etikettwert fungiert). In einer Ausführungsform vergleicht die Gruppierungsschaltungsanordnung 4810 den Schattierer-Aufzeichnungszeiger für jede Bahn mit den Etiketten 4801 in der CAM-Struktur 4801 , um eine passende Charge zu finden. Wird eine passende Charge gefunden, wird die Stapel-ID/Kontext-ID zu der Charge hinzugefügt. Andernfalls wird ein neuer Eintrag mit einem neuen Schattierer-Aufzeichnungszeiger-Etikett erstellt, wobei möglicherweise ein älterer Eintrag mit einer unvollständigen Charge entfernt wird.
Ein ausführender Schattierer kann den Aufrufstapel freigeben, wenn dieser leer ist, indem eine Freigabenachricht an die Nachrichteneinheit gesendet wird. Die Freigabenachricht wird an den Planer weitergeleitet, der Stapel-IDs/Kontext-IDs für aktive SIMD-Bahnen an den freien Pool zurückgibt.
Eine Ausführungsform der Erfindung implementiert einen Hybridansatz für Strahlendurchquerungsoperationen unter Verwendung einer Kombination von Festfunktions-Strahlendurchquerung und Software-Strahlendurchquerung. Folglich bietet dieser die Flexibilität der Software-Durchquerung, während die Effizienz der Festfunktions-Durchquerung erhalten bleibt. 49 zeigt eine Beschleunigungsstruktur, die für eine Hybrid-Durchquerung verwendet werden kann, die ein Baum mit zwei Ebenen mit einer einzelnen BVH 4300 auf oberster Ebene und mehreren BVHs 4901 und 4902 auf unterster Ebene ist. Grafische Elemente sind rechts gezeigt, um innere Durchquerungspfade 4903 , äußere Durchquerungspfade 4904 , Durchquerungsknoten 4905 , Blattknoten mit Dreiecken 4906 und Blattknoten mit anwenderdefinierten Primitiven 4907 anzugeben.
Die Blattknoten mit Dreiecken 4906 in der BVH 4900 der obersten Ebene können auf Dreiecke, Schnitt-Schattierer-Aufzeichnungen für anwenderdefinierte Primitive oder Durchquerungs-Schattierer-Aufzeichnungen verweisen. Die Blattknoten mit Dreiecken 4906 der BVHs 4901-4902 der unteren Ebene können nur auf Dreiecke und Schnitt-Schattierer-Aufzeichnungen für anwenderdefinierte Primitive verweisen. Die Art des Verweises ist innerhalb des Blattknotens 4306 codiert. Die innere Durchquerung 4303 bezieht sich auf die Durchquerung innerhalb jeder BVH 4900-4902 . Innere Durchquerungsoperationen umfassen eine Berechnung von Strahl-BVH-Schnittpunkten und die Durchquerung der BVH-Strukturen 4900-4902 ist als äußere Durchquerung bekannt. Innere Durchquerungsoperationen können effizient in Hardware mit fester Funktion implementiert werden, während äußere Durchquerungsoperationen mit programmierbaren Schattierern mit akzeptabler Leistung ausgeführt werden können. Folglich führt eine Ausführungsform der Erfindung innere Durchquerungsoperationen unter Verwendung einer Schaltungsanordnung mit fester Funktion 4610 durch und führt äußere Durchquerungsoperationen unter Verwendung der Schattierer-Ausführungsschaltungsanordnung 4600 durch, die SIMD/SIMT-Kerne/ EUs 4601 zum Ausführen programmierbarer Schattierer umfasst.
Es ist zu beachten, dass die SIMD/SIMT-Kerne/EUs 4601 hier der Einfachheit halber manchmal einfach als „Kerne“, „SIMD-Kerne“, „EUs“ oder „SIMD-Prozessoren“ bezeichnet werden. In ähnlicher Weise wird die Strahl-BVH-Durchquerungs-/Schnittschaltungsanordnung 4605 manchmal einfach als „Durchquerungseinheit“, „Durchquerungs-/Schnitteinheit“ oder „Durchquerungs-/Schnittschaltungsanordnung“ bezeichnet. Wenn ein alternativer Begriff verwendet wird, ändert der bestimmte Name, der zur Bezeichnung der jeweiligen Schaltungsanordnung/Logik verwendet wird, nicht die zugrundeliegenden Funktionen, die die Schaltung/Logik ausführt, wie sie hierin beschrieben sind.
Darüber hinaus kann die Durchquerungs-/Schnitteinheit 4605 , obwohl sie in 46 zu Erläuterungszwecken als einzelne Komponente dargestellt ist, eine einzelne Durchquerungseinheit und eine separate Schnitteinheit umfassen, von denen jede in einer hierin beschriebenen Schaltungsanordnung und/oder Logik implementiert sein kann.
In einer Ausführungsform wird dann, wenn ein Strahl einen Durchquerungsknoten während einer inneren Durchquerung schneidet, ein Durchquerungsschattierer erzeugt. Wie es in 48 dargestellt ist, gruppiert die Sortierschaltungsanordnung 4608 diese Schattierer nach Schattierer-Aufzeichnungszeigern 4801A-B , n, um eine SIMD-Charge zu erstellen, die von dem Planer 4607 für die SIMD-Ausführung auf den Grafik-SIMD-Kernen/EUs 4001 gestartet wird. Durchquerungs-Schattierer können die Durchquerung auf verschiedene Arten modifizieren und ermöglichen eine breite Palette von Anwendungen. Beispielsweise kann der Durchquerungs-Schattierer eine BVH mit einem gröberen Detailgrad (LOD) auswählen oder den Strahl transformieren, um Transformationen starrer Körper zu ermöglichen. Der Durchquerungs-Schattierer erzeugt dann die innere Durchquerung für die ausgewählte BVH.
Die innere Durchquerung berechnet die Strahl-BVH-Schnitte durch Durchqueren der BVH und Berechnen der Strahl-Rahmen- und Strahl-Dreieck-Schnitte. Die innere Durchquerung wird auf die gleiche Weise wie Schattierer erzeugt, indem eine Nachricht an die Nachrichtenschaltungsanordnung 4604 gesendet wird, die die entsprechende Erzeugungsnachricht an die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 weiterleitet, die Strahl-BVH-Schnitte berechnet.
In einer Ausführungsform wird der Stapel für die innere Durchquerung lokal in der Festfunktionsschaltungsanordnung 4610 (z. B. innerhalb des L1-Cache 4606 ) gespeichert. Wenn ein Strahl einen Blattknoten schneidet, der einem Durchquerungs-Schattierer oder einem Schnitt-Schattierer entspricht, wird die innere Durchquerung beendet und der innere Stapel wird abgeschnitten. Der abgeschnittene Stapel wird zusammen mit einem Zeiger auf den Strahl und die BVH an einer von dem aufrufenden Schattierer angegebenen Stelle in den Speicher geschrieben und dann wird der entsprechende Durchquerungs-Schattierer oder Schnitt-Schattierer erzeugt. Wenn der Strahl während der inneren Durchquerung Dreiecke schneidet, werden die entsprechenden Trefferinformationen als Eingabeargumente für diese Schattierer bereitgestellt, wie es im folgenden Code gezeigt ist. Diese erzeugten Schattierer werden von der Sortierschaltungsanordnung 4008 gruppiert, um SIMD-Chargen zur Ausführung zu erzeugen.
struct HitInfo { float barycentrics[2]; float tmax; bool innerTravComplete; uint primID; uint geomID; } ShaderRecord* leafShaderRecord;
Ein Abschneiden des inneren Durchquerungsstapels verringert den Aufwand für das Abgeben in den Speicher. Eine Ausführungsform der Erfindung verwendet den in „Restart Trail für Stackless BVH Traversal“, High Performance Graphics (2010 ), S. 107-111 beschriebenen Ansatz, um den Stapel auf eine kleine Anzahl von Einträgen am oberen Rand des Stapels, einen 42-Bit-Neustartpfad und einen 6-Bit-Tiefenwert zu kürzen. Der Neustartpfad gibt Abzweigungen an, die bereits innerhalb der BVH genommen wurden, und der Tiefenwert gibt die Durchquerungstiefe an, die dem letzten Stapeleintrag entspricht. Dies sind ausreichende Informationen, um die innere Durchquerung zu einem späteren Zeitpunkt fortzusetzen.
Die innere Durchquerung ist abgeschlossen, wenn der innere Stapel leer ist und keine BVH-Knoten mehr zu testen sind. In diesem Fall wird ein Außenstapelbehandler erzeugt, der den oberen Bereich des äußeren Stapels entfernt und die Durchquerung wieder aufnimmt, wenn der äußere Stapel nicht leer ist.
In einer Ausführungsform führt die äußere Durchquerung die Hauptdurchquerungszustandsmaschine aus und ist in Programmcode implementiert, der von der Schattierer-Ausführungsschaltungsanordnung 4600 ausgeführt wird. Es wird eine innere Durchquerungsabfrage unter den folgenden Bedingungen erzeugt: (1 ) wenn ein neuer Strahl von einem Treffer-Schattierer oder einem primären Schattierer erzeugt wird; (2 ) wenn ein Durchquerungs-Schattierer eine BVH zur Durchquerung auswählt; und (3) wenn ein Außenstapelbehandler die innere Durchquerung für eine BVH wieder aufnimmt.
Wie es in 50 dargestellt ist, wird auf dem Aufrufstapel 5005 Platz für die Festfunktions-Schaltungsanordnung 4010 zugewiesen, um den abgeschnittenen inneren Stapel 5010 zu speichern, bevor der innere Durchlauf erzeugt wird. Die Versätze 5003-4404 oben auf dem Aufrufstapel und der innere Stapel werden in dem Durchquerungszustand 5000 gepflegt, der ebenfalls in dem Speicher gespeichert ist. Der Durchquerungszustand 5000 umfasst auch den Strahl in dem Weltenraum 5001 und dem Objektraum 5002 sowie Trefferinformationen für das nächste schneidende Primitiv.
Der Durchquerungs-Schattierer, der Schnitt-Schattierer und der Außenstapelbehandler werden alle von der Strahl-BVH-Schnitt-Schaltungsanordnung 4605 erzeugt. Der Durchquerungs-Schattierer weist auf dem Aufrufstapel 5005 zu, bevor ein neuer innerer Durchlauf für die BVH zweiter Ebene initiiert wird. Der Außenstapelbehandler ist ein Schattierer, der für die Aktualisierung der Trefferinformationen und die Wiederaufnahme aller anstehenden inneren Durchquerungs-Aufgaben verantwortlich ist. Der Außenstapelbehandler ist auch dafür verantwortlich, getroffene oder verfehlte Schattierer zu erzeugen, wenn die Durchquerung abgeschlossen ist. Die Durchquerung ist abgeschlossen, wenn keine ausstehenden inneren Durchquerungsabfragen zur Erzeugung vorliegen. Wenn die Durchquerung abgeschlossen ist und ein Schnitt gefunden wurde, wird ein Treffer-Schattierer erzeugt. Andernfalls wird ein Fehltreffer-Schattierer erzeugt.
Obwohl das oben beschriebene Hybrid-Durchquerungsschema eine zweistufige BVH-Hierarchie verwendet, können die hier beschriebenen Ausführungsformen der Erfindung eine beliebige Anzahl von BVH-Stufen mit einer entsprechenden Änderung in der Implementierung der äußeren Durchquerung verwenden.
Obwohl in den obigen Ausführungsformen eine Festfunktionsschaltungsanordnung 4610 zum Durchführen von Strahl-BVH-Schnitten beschrieben ist, können darüber hinaus auch andere Systemkomponenten in Festfunktionsschaltungen implementiert sein. Zum Beispiel kann der oben beschriebene Außenstapelbehandler ein interner (nicht für den Anwender sichtbarer) Schattierer sein, der möglicherweise in der Festfunktions-BVH-Durchquerungs-/Schnitt-Schaltungsanordnung 4605 implementiert sein könnte. Diese Implementierung kann verwendet werden, um die Anzahl der versendeten Schattierer-Stufen und Rundtrips zwischen der Festfunktions-Schnitt-Hardware 4605 und dem Prozessor zu verringern.
Die hier beschriebenen Ausführungsformen der Erfindung ermöglichen eine programmierbare Schattierungs- und Strahlendurchquerungssteuerung unter Verwendung anwenderdefinierter Funktionen, die mit größerer SIMD-Effizienz auf vorhandenen und zukünftigen GPU-Prozessoren ausgeführt werden kann. Die programmierbare Steuerung der Strahldurchquerung ermöglicht verschiedene wichtige Funktionen wie die prozedurale Instantiierung, die stochastische Detailgradauswahl, maßgeschneiderte Primitiv-Schnitte und verzögerte BVH-Aktualisierungen.
Eine Ausführungsform der Erfindung umfasst eine programmierbare Strahlverfolgungsarchitektur mit Anwendung mehrerer Befehle auf mehrere Datenströme (MIMD-Strahlverfolgungsarchitektur), die die spekulative Ausführung von Treffer- und Schnitt-Schattierern unterstützt. Insbesondere konzentriert sich eine Ausführungsform auf die Reduzierung des Planungs- und Kommunikationsaufwands zwischen den programmierbaren SIMD/SIMT-Kernen/Ausführungseinheiten 4001 , die oben in Bezug auf 46 beschrieben wurden, und den Festfunktions-MIMD-Durchquerungs-/Schnitteinheiten 4605 in einer Hybrid-Strahlverfolgungsarchitektur. Im Folgenden werden mehrere spekulative Ausführungsschemata von Treffer- und Schnitt-Schattierern beschrieben, die in einer einzigen Charge von der Durchquerungs-Hardware abgefertigt werden können, wobei mehrere Durchquerungs- und Schattierungs-Umläufe vermieden werden. Eine Ausführungsform umfasst eine dedizierte Schaltungsanordnung zum Implementieren dieser Techniken.
Die Ausführungsformen der Erfindung sind besonders vorteilhaft in Anwendungsfällen, in denen die Ausführung von mehreren Treffer- oder Schnitt-Schattierern von einer Strahldurchquerungsabfrage erwünscht ist, die bei Implementierung ohne dedizierte Hardwareunterstützung einen erheblichen Mehraufwand verursachen würde. Dazu gehören, ohne darauf beschränkt zu sein, die Nächste-k-Treffer-Abfrage (Starten eines Treffer-Schattierers für die k nächsten Schnitte) und mehrere programmierbare Schnitt-Schattierer.
Die hier beschriebenen Techniken können als Erweiterungen der in 46 dargestellten (und in Bezug auf 46-50 beschriebenen) Architektur implementiert werden. Insbesondere bauen die vorliegenden Ausführungsformen der Erfindung auf dieser Architektur mit Verbesserungen auf, um die Leistungsfähigkeit in den oben erwähnten Anwendungsfällen zu verbessern.
Eine Leistungsbeschränkung von Hybrid-Strahlverfolgungs-Durchquerungs-Architekturen ist der Mehraufwand beim Starten von Durchquerungsabfragen aus den Ausführungseinheiten und der Mehraufwand beim Aufrufen programmierbarer Schattierer aus der Strahlverfolgungs-Hardware. Wenn während des Durchlaufs desselben Strahls mehrere Treffer- oder Schnitt-Schattierer aufgerufen werden, erzeugt dieser Mehraufwand „Ausführungsumläufe“ zwischen den programmierbaren Kernen 4601 und der Durchquerungs-/Schnitteinheit 4605 . Dies setzt auch zusätzlich die Sortiereinheit 4608 unter Druck, die SIMD/SIMT-Kohärenz aus den einzelnen Schattierer-Aufrufen extrahieren muss.
Mehrere Aspekte der Strahlverfolgung erfordern eine programmierbare Steuerung, die durch die verschiedenen in Tabelle A oben aufgeführten Schattierertypen ausgedrückt werden kann (d. h. Primär, Treffer, Beliebiger Treffer, Fehltreffer, Schnitt, Durchquerung und Aufrufbar). Für jeden Typ können mehrere Schattierer vorhanden sein. Zum Beispiel kann jedes Material einen anderen Treffer-Schattierer haben. Einige dieser Schattierer-Typen sind in der aktuellen Strahlverfolgungs-API von Microsoft® definiert.
Als kurzer Überblick wird die rekursive Strahlverfolgung durch eine API-Funktion initiiert, die der GPU befiehlt, einen Satz von Primär-Schattierern zu starten, die Strahlen-Szenen-Schnitte (implementiert in Hardware und/oder Software) für Primärstrahlen erzeugen können. Dies kann wiederum andere Schattierer erzeugen, wie z. B. Durchquerungs-, Treffer- oder Fehltreffer-Schattierer. Ein Schattierer, der einen Kind-Schattierer erzeugt, kann auch einen Rückgabewert von diesem Schattierer erhalten. Aufrufbare Schattierer sind universelle Funktionen, die direkt von einem anderen Schattierer erzeugt werden können und auch Werte an den aufrufenden Schattierer zurückgeben können.
Strahldurchquerung berechnet Strahl-Szene-Schnitte durch Durchqueren und Schneiden von Knoten in einer Begrenzungsvolumenhierarchie (BVH). Jüngste Forschungen haben gezeigt, dass die Effizienz der Berechnung von Strahl-Szene-Schnitten um mehr als eine Größenordnung verbessert werden kann, indem Techniken verwendet werden, die besser für Hardware mit fester Funktion geeignet sind, wie z. B. Arithmetik mit verringerter Genauigkeit, BVH-Kompression, Pro-Strahl-Zustandsmaschinen, dedizierte Schnitt-Pipelines und maßgeschneiderte Caches.
Die in 46 gezeigte Architektur umfasst ein solches System, bei dem eine Anordnung von SIMD/SIMT-Kernen/Ausführungseinheiten 4601 mit einer Festfunktions-Strahlverfolgungs-/Schnitteinheit 4605 zusammenwirkt, um eine programmierbare Strahlverfolgung durchzuführen. Programmierbare Schattierer werden SIMD/SIMT-Strängen auf den Ausführungseinheiten/Kernen 4601 zugeordnet, wobei die Nutzung, Ausführung und Datenkohärenz von SIMD/SIMT für eine optimale Leistung entscheidend sind. Strahlabfragen lösen häufig die Kohärenz aus verschiedenen Gründen auf, z. B.:
- • Durchquerungsdivergenz: Die Dauer der BVH-Durchquerung variiert unter Strahlen stark, was die asynchrone Strahlenverarbeitung begünstigt.
- • Ausführungsdivergenz: Strahlen, die von verschiedenen Bahnen desselben SIMD/SIMT-Strangs erzeugt werden, können zu unterschiedlichen Schattierer-Aufrufen führen.
- • Datenzugriffsdivergenz: Strahlen, die auf verschiedene Oberflächen treffen, tasten unterschiedliche BVH-Knoten und Primitive ab, und Schattierer greifen beispielsweise auf unterschiedliche Texturen zu. Eine Vielzahl anderer Szenarien kann zu Datenzugriffsdivergenz führen.
In einer Ausführungsform meistert die Festfunktions-Strahlverfolgungs-/Schnitteinheit 4005 die ersten beiden Herausforderungen, indem jeder Strahl einzeln und nicht reihenfolgetreu verarbeitet wird. Dadurch werden jedoch SIMD/SIMT-Gruppen aufgelöst. Die Sortiereinheit 4608 ist daher dafür verantwortlich, neue, kohärente SIMD/SIMT-Gruppen von Schattierer-Aufrufen zu bilden, die erneut an die Ausführungseinheiten entsendet werden sollen.
Es ist leicht zu erkennen, welche Vorteile eine solche Architektur im Vergleich zu einer reinen softwarebasierten Strahlverfolgungsimplementierung direkt auf den SIMD/SIMT-Prozessoren bietet. Mit der Nachrichtenübermittlung zwischen den SIMD/SIMT-Kernen/Ausführungseinheiten 4601 (hier manchmal einfach als SIMD/SIMT-Prozessoren oder -Kerne/EUs bezeichnet) und der MIMD-Durchquerungs-/Schnitteinheit 4605 ist jedoch ein Mehraufwand verbunden. Ferner extrahiert die Sortiereinheit 4608 möglicherweise keine perfekte SIMD/SIMT-Nutzung aus inkohärenten Schattiereraufrufen.
Eine Ausführungsform der Erfindung identifiziert Anwendungsfälle, in denen Schattiereraufrufe während des Durchquerung besonders häufig sein können. Für hybride MIMD-Strahlverfolgungs-Prozessoren werden Verbesserungen beschrieben, um den Kommunikationsmehraufwand zwischen den Kernen/EUs 4601 und den Durchquerungs-/Schnitteinheiten 4605 erheblich zu verringern. Diese Ausführungsform kann besonders bei Finden der k-nächsten Schnitte und Implementierung von programmierbaren Schnittschattierern vorteilhaft sein. Es ist jedoch zu beachten, dass die hier beschriebenen Techniken nicht auf ein bestimmtes Verarbeitungsszenario beschränkt sind.
Eine Zusammenfassung des hohen Aufwands des Strahlverfolgungs-Kontextwechsels zwischen den Kernen/EUs 4601 und der Festfunktions-Durchquerungs-/Schnitteinheit 4605 ist nachstehend gegeben. Der größte Teil des Leistungsmehraufwands wird durch diese beiden Kontextwechsel immer dann, wenn der Schattiereraufruf während der Einzelstrahldurchquerung erforderlich ist, verursacht.
Jede SIMD/SIMT-Bahn, die einen Strahl startet, erzeugt eine Erzeugungsnachricht an die Durchquerungs-/Schnitteinheit 4005 , die einer BVH zum Durchqueren zugeordnet ist. Die Daten (Strahldurchquerungskontext) werden über die Erzeugungsnachricht und den (zwischengespeicherten) Speicher an die Durchquerungs-/Schnitteinheit 4605 weitergeleitet. Wenn die Durchquerungs-/Schnitteinheit 4605 bereit ist, der Erzeugungsnachricht einen neuen Hardware-Strang zuzuweisen, lädt sie den Durchquerungszustand und führt eine Durchquerung an der BVH durch. Es gibt auch Einrichtungsaufwand, der vor dem ersten Durchlaufschritt an der BVH durchgeführt werden müssen.
Ein Primärstrahl-Schattierer 5101 sendet bei 4502 Arbeit an die Durchquerungsschaltungsanordnung, die den einen oder die mehreren aktuellen Strahlen durch die BVH (oder eine andere Beschleunigungsstruktur) laufen lässt. Wenn ein Blattknoten erreicht wird, ruft die Durchquerungsschaltungsanordnung bei 5103 die Schnittschaltungsanordnung auf, die bei Identifizieren eines Strahl-Dreieck-Schnitts bei 5104 einen Beliebiger-Treffer-Schattierer aufruft (der wie angegeben Ergebnisse an die Durchquerungsschaltungsanordnung zurückgeben kann).
Alternativ kann die Durchquerung beendet werden, bevor ein Blattknoten erreicht wird, und ein Nächster-Treffer-Schattierer wird bei 5107 aufgerufen (wenn ein Treffer registriert wurde) oder ein Fehltreffer-Schattierer wird bei 5106 aufgerufen (im Falle eines Fehltreffers).
Wie es bei 5105 angegeben ist, kann ein Schnitt-Schattierer aufgerufen werden, wenn die Durchquerungsschaltungsanordnung einen Spezialprimitiv-Blattknoten erreicht. Ein Spezialprimitiv kann ein beliebiges Nicht-Dreieck-Primitiv sein, beispielsweise ein Polygon oder ein Polyeder (z. B. Tetraeder, Voxel, Hexaeder, Keile, Pyramiden oder ein anderes „unstrukturiertes“ Volumen). Der Schnitt-Schattierer 5105 identifiziert alle Schnitte zwischen dem Strahl und dem Spezialprimitiv für den Beliebiger-Treffer-Schattierer 5104 , der eine Beliebiger-Treffer-Verarbeitung implementiert.
In einer Ausführungsform erzeugt die Durchquerungs-/Schnitteinheit 5105 dann, wenn die Hardware-Durchquerung 5102 eine programmierbare Stufe erreicht, eine Schattierer-Abfertigungsnachricht an einen relevanten Schattierer 5105-5107 , die einer einzelnen SIMD-Bahn der zum Ausführen des Schattierers verwendeten Ausführungseinheit(en) entspricht. Da Abfertigungen in einer beliebigen Reihenfolge von Strahlen erfolgen und sie in den aufgerufenen Programmen divergent sind, akkumuliert eine Ausführungsform der Sortiereinheit 4608 mehrere Abfertigungsaufrufe, um kohärente SIMD-Chargen zu extrahieren. Der aktualisierte Durchlaufzustand und die optionalen Schattierer-Argumente können von der Durchquerungs-/Schnitteinheit 4605 in den Speicher 2511 geschrieben werden.
Bei dem Problem des k-nächsten Schnittes wird ein Nächster-Treffer-Schattierer 5107 für die ersten k Schnitte ausgeführt. Bei der herkömmlichen Weise würde dies bedeuten, dass die Strahlendurchquerung endet, wenn der nächstgelegene Schnitt gefunden wird, ein Treffer-Schattierer aufgerufen wird und ein neuer Strahl aus dem Treffer-Schattierer erzeugt wird, um den nächsten nächstgelegenen Schnitt zu finden (mit dem Strahlursprungsversatz, so dass nicht derselbe Schnitt auftritt). Es ist leicht zu erkennen, dass diese Implementierung k Strahlerzeugungen für einen einzelnen Strahl erfordern würde. Eine weitere Implementierung arbeitet mit Beliebiger-Treffer-Schattierern 5104 , die für alle Schnitte aufgerufen werden und eine globale Liste von nächstgelegenen Schnitten pflegen, unter Verwendung einer Einfügesortieroperation. Das Hauptproblem bei diesem Ansatz besteht darin, dass es keine Obergrenze für Beliebiger-Treffer-Schattierer-Aufrufe gibt.
Wie erwähnt kann ein Schnitt-Schattierer 5105 für Nicht-Dreieck-(Spezial-)Primitive aufgerufen werden. Abhängig vom Ergebnis des Schnitttests und dem Durchquerungszustand (ausstehende Knoten- und Primitiv-Schnitte) kann die Durchquerung desselben Strahls nach der Ausführung des Schnitt-Schattierers 5105 fortgesetzt werden. Daher kann das Finden des nächsten Treffers mehrere Umläufe zu der Ausführungseinheit erfordern.
Eine Ausführungsform der Erfindung konzentriert sich auf die Reduzierung von SIMD-MIMD-Kontextwechseln für Schnitt-Schattierer 5105 und Treffer-Schattierer 5104 , 5107 durch Änderungen an der Durchquerungs-Hardware und dem Schattierer-Planungsmodell. Zuerst schiebt die Strahldurchquerungsschaltungsanordnung 4605 Schattiereraufrufe auf, indem sie mehrere potenzielle Aufrufe akkumuliert und in einer größeren Charge abfertigt. Darüber hinaus können bestimmte Aufrufe, die sich als unnötig herausstellen, zu diesem Zeitpunkt aussortiert werden. Darüber hinaus sammelt eine Ausführungsform des Schattierer-Planers 4607 mehrere Schattiereraufrufe aus demselben Durchquerungskontext in einer einzelnen SIMD-Charge, was in einer einzelnen Strahlverfolgungsnachricht resultiert. In einer Implementierung unterbricht die Durchquerungs-Hardware 4605 den Durchquerungsstrang und wartet auf die Ergebnisse mehrerer Schattiereraufrufe. Diese Betriebsart wird hier als „spekulative“ Schattiererausführung bezeichnet, da sie die Abfertigung mehrerer Schattierer ermöglicht, von denen einige möglicherweise nicht aufgerufen werden, wenn sequentielle Aufrufe verwendet werden.
Aufgeschobene Strahlverfolgungsschattiereraufrufe
Eine Ausführungsform der Erfindung wandelt die Art und Weise ab, in der der Hardware-Durchquerungszustand 5201 verwaltet wird, um die Ansammlung mehrerer potentieller Schnitt- oder Trefferaufrufe in einer Liste zu ermöglichen. Zu einem bestimmten Zeitpunkt während der Durchquerung kann jeder Eintrag in der Liste verwendet werden, um einen Schattiereraufruf zu erzeugen. Beispielsweise können die k-nächsten Schnittpunkte auf der Durchquerungs-Hardware 4605 und/oder in dem Durchquerungszustand 5201 im Speicher gesammelt werden und Treffer-Schattierer können für jedes Element aufgerufen werden, wenn die Durchquerung abgeschlossen ist. Bei Treffer-Schattierern können für einen Teilbaum in der BVH mehrere potenzielle Schnitte gesammelt werden.
Für den Nächste-k-Anwendungsfall besteht der Vorteil dieses Ansatzes darin, dass anstelle von k-1-Umläufen zu dem/r SIMD-Kern/EU 4601 und k-1 neuen Strahlerzeugungsnachrichten alle Treffer-Schattierer während des gleichen Durchquerungsstrangs während einer einzelnen Durchquerungsoperation auf der Durchquerungsschaltungsanordnung 4605 aufgerufen werden. Eine Herausforderung für mögliche Implementierungen besteht darin, dass es nicht trivial ist, die Ausführungsreihenfolge von Treffer-Schattierern zu gewährleisten (der Standard-„Umlauf“-Ansatz garantiert, dass der Treffer-Schattierer des nächstgelegenen Schnitts zuerst ausgeführt wird usw.). In einer Ausführungsform wird dies entweder durch die Synchronisation der Treffer-Schattierer oder durch die Lockerung der Reihenfolge angegangen.
Für den Schnitt-Schattierer-Anwendungsfall weiß die Durchquerungsschaltungsanordnung 4605 nicht im Voraus, ob ein gegebener Schattierer einen positiven Schnitttest zurückgeben würde. Es ist jedoch möglich, mehrere Schnitt-Schattierer spekulativ auszuführen. Wenn mindestens einer ein positives Trefferergebnis zurückgibt, wird er mit dem globalen nächsten Treffer zusammengeführt. Bestimmte Implementierungen müssen eine optimale Anzahl aufgeschobener Schnitttests finden, um die Anzahl der Abfertigungsaufrufe zu verringern, aber zu vermeiden, zu viele redundante Schnitt-Schattierer aufzurufen.
Zusammengefasste Schattiereraufrufe aus der Durchquerungsschaltungsanordnung
Wenn mehrere Schattierer aus demselben Strahlerzeugung auf der Durchquerungsschaltungsanordnung 4605 entsendet werden, erzeugt eine Ausführungsform Verzweigungen in dem Ablauf des Strahldurchquerungsalgorithmus. Dies kann für Schnitt-Schattierer problematisch sein, da der Rest der BVH-Durchquerung vom Ergebnis aller entsendeten Schnitttests abhängt. Dies bedeutet, dass eine Synchronisierungsoperation erforderlich ist, um auf das Ergebnis der Schattiereraufrufe zu warten, was auf asynchroner Hardware eine Herausforderung darstellen kann.
Eine Ausführungsform der Erfindung beruht auf zwei Punkten des Zusammenführens der Ergebnisse der Schattiereraufrufe: dem SIMD-Prozessor 4601 und der Durchquerungsschaltungsanordnung 4605 . In Bezug auf den SIMD-Prozessor 4601 können mehrere Schattierer ihre Ergebnisse unter Verwendung von Standardprogrammiermodellen synchronisieren und zusammenfassen. Eine relativ einfache Möglichkeit, dies zu tun, besteht darin, globale Atomics zu verwenden und Ergebnisse in einer gemeinsam genutzten Datenstruktur im Speicher zu sammeln, in der Schnittergebnisse mehrerer Schattierer gespeichert werden können. Dann kann der letzte Schattierer die Datenstruktur auflösen und die Durchquerungsschaltungsanordnung 4605 zurückrufen, um die Durchquerung fortzusetzen.
Eine Ausführungsform der Erfindung implementiert einen effizienteren Ansatz, der die Ausführung mehrerer Schattiereraufrufe auf Bahnen desselben SIMD-Strangs auf dem SIMD-Prozessor 4601 begrenzt. Die Schnitttests werden dann lokal unter Verwendung von SIMD/SIMT-Reduktionsoperationen reduziert (anstatt unter Zurückgreifen auf globale Atomics). Diese Ausführungsform kann auf einer neuen Schaltungsanordnung innerhalb der Sortiereinheit 4608 beruhen, um eine kleine Charge von Schattiereraufrufen in derselben SIMD-Charge verbleiben zu lassen.
Eine Ausführungsform der Erfindung unterbricht die Ausführung des Durchquerungsstrangs auf der Durchquerungsschaltungsanordnung 4605 . Unter Verwendung des herkömmlichen Ausführungsmodells wird dann, wenn ein Schattierer während der Durchquerung abgefertigt wird, der Durchquerungsstrang beendet und der Strahldurchquerungszustand im Speicher gespeichert, um die Ausführung anderer Strahlerzeugungsbefehle zu ermöglichen, während die Ausführungseinheiten 4601 die Schattierer verarbeiten. Wenn der Durchquerungsstrang lediglich angehalten wird, muss der Durchquerungszustand nicht gespeichert werden und kann auf jedes Schattiererergebnis separat warten. Diese Ausführungsform kann eine Schaltungsanordnung aufweisen, um Blockaden zu vermeiden und eine ausreichende Hardwareauslastung zu bieten.
Wie erwähnt kann die Gesamtheit oder ein Teil der Schattierer-Sammlung und/oder -Aufschiebung von der Durchquerungs-/Schnittschaltungsanordnung 4605 und/oder dem Kern-/EU-Planer 4607 ausgeführt werden. 53 zeigt eine Ausführungsform, in der die Schattierer-Aufschub-/Sammelschaltungsanordnung 5306 innerhalb des Planers 4607 die Planung von Schattierern, die einem bestimmten SIMD/SIMT-Strang bzw. einer bestimmten SIMD/SIMT-Bahn zugeordnet sind, aufschiebt, bis ein bestimmtes auslösendes Ereignis aufgetreten ist. Bei Detektieren des auslösenden Ereignisses entsendet der Planer 4607 die mehreren gesammelten Schattierer in einer einzelnen SIMD/SIMT-Charge an die Kerne/EUs 4601 .
Es ist jedoch zu beachten, dass die Schattierer-Aufschub- und Sammeltechniken in verschiedenen anderen Komponenten wie etwa der Sortiereinheit 4608 implementiert oder über mehrere Komponenten verteilt sein können. Beispielsweise kann die Durchquerungs-/Schnittschaltungsanordnung 4605 einen ersten Satz von Schattierer-Sammeloperationen ausführen und der Planer 4607 kann einen zweiten Satz von Schattierer-Sammeloperationen ausführen, um sicherzustellen, dass Schattierer für einen SIMD-Strang effizient auf den Kernen/EUs 4601 eingeplant werden.
Das „auslösende Ereignis“, das bewirkt, dass die gesammelten Schattierer an die Kerne/EUs entsendet werden, kann ein Verarbeitungsereignis wie beispielsweise eine bestimmte Anzahl von gesammelten Schattierern oder eine minimale Latenz, die einem bestimmten Strang zugeordnet ist, sein. Alternativ oder zusätzlich kann das auslösende Ereignis ein zeitliches Ereignis wie beispielsweise eine bestimmte Dauer ab dem Aufschieben des ersten Schattierers oder eine bestimmte Anzahl von Prozessorzyklen sein. Andere Variablen wie die aktuelle Arbeitslast auf den Kernen/EUs 4001 und der Durchquerungs-/Schnittschaltungsanordnung 4605 können ebenfalls von dem Planer 4607 bewertet werden, um zu bestimmen, wann die SIMD/SIMT-Charge aus Schattierern entsendet werden soll.
Verschiedene Ausführungsformen der Erfindung können unter Verwendung verschiedener Kombinationen der obigen Ansätze basierend auf der speziellen verwendeten Systemarchitektur und den Anforderungen der Anwendung implementiert werden.
Strahlverfolgungsbefehle
Die nachstehend beschriebenen Strahlverfolgungsbefehle sind in einer Befehlssatzarchitektur (ISA) enthalten, die von einer Ausführungsform der CPU 3799 und/oder der GPU 3705 unterstützt wird. Wenn sie von der CPU ausgeführt werden, können die Einzelbefehl-Mehrfachdaten-Befehle (SIMD-Befehle) Vektor-/gepackte Quell- und Zielregister zum Ausführen der beschriebenen Operationen verwenden, und können von einem CPU-Kern decodiert und ausgeführt werden. Wenn sie von einer GPU 3705 ausgeführt werden, können die Befehle von Grafikkernen 3730 ausgeführt werden. Beispielsweise kann eine beliebige der oben beschriebenen Ausführungseinheiten (EUs) 4601 die Befehle ausführen. Alternativ oder zusätzlich können die Befehle durch eine Ausführungsschaltungsanordnung auf den Strahlverfolgungskernen 3150 und/oder den Tensorkernen 3740 ausgeführt werden.
Im Betrieb ruft eine Befehlsabrufeinheit 5503 die Strahlverfolgungsbefehle 5500 aus dem Speicher 3798 ab und ein Decodierer 5595 decodiert die Befehle. In einer Implementierung decodiert der Decodierer 5595 Befehle, um ausführbare Operationen (z. B. Mikrooperationen oder uops in einem mikrocodierten Kern) zu erzeugen. Alternativ können einige oder alle der Strahlverfolgungsbefehle 5500 ohne Decodierung ausgeführt werden und an sich ist ein Decodierer 5504 nicht erforderlich.
In jeder Implementierung plant und entsendet ein Planer/Abfertiger 5505 die Befehle (oder Operationen) über einen Satz von Funktionseinheiten (FUs) 5510-5512 . Die dargestellte Ausführungsform umfasst eine Vektor-FU 5510 zum Ausführen von Einzelbefehl-Mehrfachdaten-Befehlen (SIMD-Befehlen), die gleichzeitig an mehreren gepackten Datenelementen arbeiten, die in Vektorregistern 5515 gespeichert sind, und eine Skalar-FU 5511 zum Arbeiten an Skalarwerten, die in einem oder mehreren Skalarregistern 5516 gespeichert sind. Eine optionale Strahlverfolgungs-FU 5512 kann mit gepackten Datenwerten, die in den Vektorregistern 515 gespeichert sind, und/oder Skalarwerten, die in den Skalarregistern 5516 gespeichert sind, arbeiten. In einer Ausführungsform ohne eine dedizierte FU 5512 führen die Vektor-FU 5510 und möglicherweise die Skalar-FU 5511 die unten beschriebenen Strahlverfolgungsbefehle durch.
Die verschiedenen FUs 5510-5512 greifen auf Strahlverfolgungsdaten 5502 (z. B. Durchquerungs-/Schnittdaten), die zum Ausführen der Strahlverfolgungsbefehle 5500 notwendig sind, aus den Vektorregistern 5515 , dem Skalarregister 5516 und/oder dem lokalen Cache-Untersystem 5508 (z. B. einem L1-Cache) zu. In einer Ausführungsform können die FUs 5510-5512 auch über Lade- und Speicheroperationen Zugriffe auf den Speicher 3798 durchführen und das Cache-Untersystem 5508 kann unabhängig arbeiten, um die Daten lokal zwischenzuspeichern.
Während die Strahlverfolgungsbefehle verwendet werden können, um die Leistungsfähigkeit für Strahldurchquerungs-/Schnitt- und BVH-Builds zu erhöhen, können sie auch auf andere Bereiche anwendbar sein, wie beispielsweise Implementierungen von Hochleistungsrechnen (HPC) und Allzweck-GPUs (GPGPUs).
In den folgenden Beschreibungen wird der Begriff Doppelwort manchmal mit dw abgekürzt und das vorzeichenlose Byte wird mit ub abgekürzt. Zusätzlich können sich die nachstehend genannten Quell- und Zielregister (z. B. src0, src1, dest usw.) auf Vektorregister 5515 oder in einigen Fällen auf eine Kombination von Vektorregistern 5515 und Skalarregistern 5516 beziehen. Typischerweise werden dann, wenn ein von einem Befehl verwendeter Quell- oder Zielwert gepackte Datenelemente umfasst (wenn z. B. eine Quelle oder ein Ziel N Datenelemente speichert), Vektorregister 5515 verwendet. Andere Werte können Skalarregister 5516 oder Vektorregister 5515 verwenden.
Dequantisieren
Eine Ausführungsform des Dequantisierungsbefehls „dequantisiert“ zuvor quantisierte Werte. Beispielsweise können in einer Strahlverfolgungsimplementierung bestimmte BVH-Teilbäume quantisiert werden, um die Speicher- und Bandbreitenanforderungen zu reduzieren. Eine Ausführungsform des Dequantisierungsbefehls hat die Form dequantize dest src0 src1 src2, wobei das Quellregister src0 N vorzeichenlose Bytes speichert, das Quellregister src1 1 vorzeichenloses Byte speichert, das Quellregister src2 1 Gleitkommawert speichert und das Zielregister dest N Gleitkommawerte speichert. Alle diese Register können Vektorregister 5515 sein. Alternativ können src0 und dest Vektorregister 4915 sein und src 1 und src2 können Skalarregister 5516 sein.
Die folgende Codesequenz definiert eine bestimmte Implementierung des Dequantisierungsbefehls:
for (int i = 0; i < SIMD_WIDTH) { if (execMask[i]) { dst [i] = src2[i] + ldexp(convert_to_float(src0[i]),src1); } }
In diesem Beispiel multipliziert ldexp einen Gleitkommawert mit doppelter Genauigkeit mit einer spezifizierten ganzzahligen Potenz von zwei (d. h. ldexp (x, exp) = x * 2exp) . Wenn im obigen Code der dem aktuellen SIMD-Datenelement (execMask [i]) zugeordnete Ausführungsmaskenwert auf 1 gesetzt ist, wird das SIMD-Datenelement an Position i in src0 in einen Gleitkommawert konvertiert und mit der ganzzahligen Potenz des Wertes in src1 (2src1-Wert) multipliziert und dieser Wert wird zu dem entsprechenden SIMD-Datenelement in src2 addiert.
Selektives Min oder Max
Eine Ausführungsform eines selektiven Min- oder Max-Befehls führt entweder eine Min- oder eine Max-Operation pro Bahn aus (d. h. Rückgabe des Minimums oder Maximums einer Menge von Werten), wie es durch ein Bit in einer Bitmaske angegeben ist. Die Bitmaske kann die Vektorregister 5515 , Skalarregister 5516 oder einen separaten Satz von Maskenregistern (nicht gezeigt) verwenden. Die folgende Codesequenz definiert eine bestimmte Implementierung des Min/Max-Befehls: sel_min_max dest src0 src1 src2, wobei src0 N Doppelwörter speichert, src1 N Doppelwörter speichert, src2 ein Doppelwort speichert und das Zielregister N Doppelwörter speichert.
Die folgende Codesequenz definiert eine bestimmte Implementierung des selektiven Min/Max-Befehls:
for (int i = 0; i < SIMD_WIDTH) { if (execMask[i]) { dst[i] = (1 << i) & src2 ? min(src0[i],src1[i]) : max(src0[i],src1[i]); } }
In diesem Beispiel wird der Wert von (1 << i) & src2 (eine um i linksverschobene 1 UND-verknüpft mit src2) verwendet, um entweder das Minimum des i-ten Datenelements in src0 und src1 oder das Maximum des i-ten Datenelements in src0 und src1 auszuwählen. Die Operation wird für das i-te Datenelement nur ausgeführt, wenn der dem aktuellen SIMD-Datenelement (execMask [i]) zugeordnete Ausführungsmaskenwert auf 1 gesetzt ist.
Indexmischbefehl
Eine Ausführungsform eines Indexmischbefehls kann einen beliebigen Satz von Eingabebahnen auf die Ausgabebahnen kopieren. Bei einer SIMD-Breite von 32 kann dieser Befehl mit einem geringeren Durchsatz ausgeführt werden. Diese Ausführungsform hat die Form: shuffle_index dest src0 src1 <optionaler Merker>, wobei src0 N Doppelwörter speichert, src1 N vorzeichenlose Bytes (d. h. den Indexwert) speichert und dest N Doppelwörter speichert.
Die folgende Codesequenz definiert eine bestimmte Implementierung des Indexmischbefehls:
for (int i = 0; i < SIMD_WIDTH) { uint8_t srcLane = src1.index[i]; if (execMask[i]) { bool invalidLane = srcLane < 0 | | srcLane >= SIMD_WIDTH | | !execMask[srcLaneMod]; if (FLAG) { } invalidLane |= flag[srcLaneMod]; if (invalidLane) { dst[i] = src0[i]; } else { dst[i] = src0[srcLane]; } } }
In dem obigen Code identifiziert der Index in src1 die aktuelle Bahn. Wenn der i-te Wert in der Ausführungsmaske auf 1 gesetzt ist, wird überprüft, ob die Quellbahn im Bereich von 0 bis zu der SIMD-Breite liegt. Wenn ja, wird der Merker gesetzt (srcLaneMod) und das Datenelement i des Ziels wird gleich dem Datenelement i von src0 gesetzt. Wenn sich die Bahn innerhalb des Bereichs befindet (d. h. gültig ist), wird der Indexwert von src1 (srcLane0) als Index für src0 verwendet (dst [i] = src0 [srcLane]).
Direkter Misch-Up/Dn/XOR-Befehl
In einer Ausführungsform mischt ein Direkter Mischbefehl Eingabedatenelemente/Bahnen basierend auf einem Direktwert des Befehls. In einer Implementierung kann der Direktwert das Verschieben der Eingabebahnen um 1 , 2 , 4, 8 oder 16 Positionen basierend auf dem Wert des Direktwerts spezifizieren. Optional kann ein zusätzliches skalares Quellregister als Füllwert angegeben werden. Wenn der Quellbahnindex ungültig ist, wird der Füllwert (falls angegeben) an der Datenelementposition in dem Ziel gespeichert. Wenn kein Füllwert angegeben ist, wird die Datenelementposition auf nur Nullen gesetzt.
In einer Ausführungsform wird ein Merkerregister als Quellmaske verwendet. Wenn das Merkerbit für eine Quellbahn auf 1 gesetzt ist, ist die Quellbahn als ungültig markiert und der Befehl wird fortgesetzt.
Das Folgende sind Beispiele für verschiedene Implementierungen des direkten Mischbefehls:
- shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional Merker>
- shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional Merker>
In dieser Implementierung speichert src0 N Doppelwörter, src1 speichert ein Doppelwort für den Füllwert (falls vorhanden) und dest speichert N Doppelwörter, die das Ergebnis umfassen.
Die folgende Codesequenz definiert eine bestimmte Implementierung des direkten Mischbefehls:
for (int i = 0; i < SIMD_WIDTH) { int8_t srcLane; switch(SHUFFLE_TYPE) { case UP: srcLane = i - SHIFT; case DN: srcLane = i + SHIFT; case XOR: } srcLane = i ^ SHIFT; if (execMask[i]) { bool invalidLane = srcLane < 0 || srcLane >= SIMD_WIDTH | | !execMask[srcLane]; if (FLAG) { } invalidLane |= flag[srcLane]; if (invalidLane) { if (SRC1) dst[i] = src1; else } dst [i] = 0; else { dst[i] = src0[srcLane]; } } }
Hier werden die Eingabedatenelemente/-bahnen um 1 , 2 , 4, 8 oder 16 Positionen verschoben, basierend auf dem Wert des Direktwerts. Das Register src1 ist ein zusätzliches skalares Quellregister, das als Füllwert verwendet wird und an der Datenelementposition in dem Ziel gespeichert wird, wenn der Quellbahnindex ungültig ist. Wenn kein Füllwert angegeben ist und der Quellbahnindex ungültig ist, wird die Datenelementposition in dem Ziel auf 0 gesetzt. Das Merkerregister (FLAG) wird als Quellmaske verwendet. Wenn das Merkerbit für eine Quellbahn auf 1 gesetzt ist, ist die Quellbahn als ungültig markiert und der Befehl wird wie oben beschrieben fortgesetzt.
Indirekter Misch-Up/Dn/XOR-Befehl
Der indirekte Mischbefehl hat einen Quelloperanden (src1), der die Zuordnung von Quellbahnen zu Zielbahnen steuert. Eine Ausführungsform des indirekten Mischbefehls hat die Form: shuffle_<up/dn/xor> dest src0 src1 <optionaler Merker> Dabei speichert src0 N Doppelwörter, src1 1 Doppelwort und dest N Doppelwörter.
Die folgende Codesequenz definiert eine bestimmte Implementierung des direkten Mischbefehls:
for (int i = 0; i < SIMD_WIDTH) { int8_t srcLane; switch(SHUFFLE_TYPE) { case UP: srcLane = i - src1; case DN: srcLane = i + src1; case XOR: } srcLane = i ^ src1; if (execMask[i]) { bool invalidLane = srcLane < 0 || srcLane >= SIMD_WIDTH | | !execMask[srcLane]; if (FLAG) { } invalidLane |= flag[srcLane]; if (invalidLane) { dst [i] = 0; } else { dst[i] = src0[srcLane]; } } }
Somit arbeitet der indirekte Mischbefehl auf ähnliche Weise wie der oben beschriebene direkte Mischbefehl, aber die Zuordnung von Quellbahnen zu Zielbahnen wird durch das Quellregister src1 anstatt durch den Direktwert gesteuert.
Bahnübergreifender Min/Max-Befehl
Ausführungsformen eines bahnübergreifenden Minimum/Maximum-Befehls werden für Gleitkomma- und Ganzzahl-Datentypen unterstützt. Der bahnübergreifenden Minimum-Befehl hat die Form lane min Dest src0 und der bahnübergreifenden Maximum-Befehl hat die Form lane_max dest src0, wobei src0 N Doppelwörter und dest 1 Doppelwort speichert.
Beispielsweise definiert die folgende Codesequenz eine bestimmte Implementierung des bahnübergreifenden Minimums:
dst = src[0]; for (int i = 1; i < SIMD_WIDTH) { if (execMask[i]) { } dst = min(dst, src[i]); }
In dieser Ausführungsform wird der Doppelwortwert an der Datenelementposition i des Quellregisters mit dem Datenelement in dem Zielregister verglichen und das Minimum der beiden Werte wird in das Zielregister kopiert. Der bahnübergreifende Maximum-Befehl arbeitet im Wesentlichen auf die gleiche Weise, wobei der einzige Unterschied darin besteht, dass das Maximum des Datenelements an Position i und der Zielwert ausgewählt werden.
Bahnübergreifender Min/Max-Index-Befehl
Ausführungsformen eines bahnübergreifenden Minimum-Index-Befehls haben die Form lane_min_index dest src0 und eines bahnübergreifenden Maximum-Befehls haben die Form lane _max_index dest src0, wobei src0 N Doppelwörter und dest 1 Doppelwort speichert.
Beispielsweise definiert die folgende Codesequenz eine bestimmte Implementierung des bahnübergreifenden Minimum-Index-Befehls:
dst_index = 0; tmp = src[0] for (int i = 1; i < SIMD_WIDTH) { if (src[i] < tmp && execMask[i]) { tmp = src[i]; } dst_index = i; }
In dieser Ausführungsform wird der Zielindex von 0 auf die SIMD-Breite inkrementiert, wobei das Zielregister umspannt wird. Wenn das Ausführungsmaskenbit gesetzt ist, wird das Datenelement an Position i in dem Quellregister an eine temporäre Speicherposition (tmp) kopiert und der Zielindex wird auf Datenelementposition i gesetzt.
Bahnübergreifender Sortiernetz-Befehl
In einer Ausführungsform sortiert ein bahnübergreifender Sortiernetzbefehl alle N Eingabeelemente unter Verwendung eines N-breiten (stabilen) Sortiernetzes entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet max). Die Min/Max-Versionen des Befehls haben die Form sortnet _min dest src0 bzw. sortnet _max dest src0. In einer Implementierung speichern src0 und dest N Doppelwörter. Die Min/Max-Sortierung wird für die N Doppelwörter von src0 durchgeführt und die aufsteigend geordneten Elemente (für Min) oder absteigend geordneten Elemente (für Max) werden in ihrer jeweiligen sortierten Reihenfolge in dest gespeichert. Ein Beispiel für eine Codesequenz, die den Befehl definiert, ist: dst = apply_N_wide_sorting_network_min/max (src0).
Bahnübergreifender Sortiernetz-Index-Befehl
In einer Ausführungsform sortiert ein bahnübergreifender Sortiernetz-Index-Befehl alle N Eingabeelemente unter Verwendung eines N-breiten (stabilen) Sortiernetzes, gibt jedoch den Permutationsindex entweder in aufsteigender Reihenfolge (sortnet min) oder in absteigender Reihenfolge (sortnet_max) zurück. Die Min/Max-Versionen des Befehls haben die Formen sortnet_min_index dest src0 und sortnet _max_index dest src0, wobei src0 und dest jeweils N Doppelwörter speichern. Ein Beispiel für eine Codesequenz, die den Befehl definiert, ist dst = apply_N_wide_sorting_network_min / max_index (src0).
Eine Ausführungsform eines Verfahrens zum Ausführen beliebiger der obigen Befehle ist in 56 dargestellt. Das Verfahren kann auf den oben beschriebenen spezifischen Prozessorarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Prozessor- oder Systemarchitektur beschränkt.
Bei 5601 werden Befehle eines primären Grafik-Strangs auf Prozessorkernen ausgeführt. Dies kann beispielsweise einen beliebigen der oben beschriebenen Kerne (z. B. Grafikkerne 3730 ) einbeziehen. Wenn die Strahlverfolgungsarbeit innerhalb des primären Grafik-Strangs erreicht ist, der bei 5602 bestimmt wurde, werden die Strahlverfolgungsbefehle an die Strahlverfolgungsausführungsschaltungsanordnung ausgelagert, die die Form einer Funktionseinheit (FU) haben kann, wie sie oben in Bezug auf 55 beschrieben ist, oder die sich in einem dedizierten Strahlverfolgungskern 3150 befinden kann, wie es in Bezug auf 37 beschrieben ist.
Bei 5603 werden die Strahlverfolgungsbefehle decodiert und aus dem Speicher abgerufen, und bei 5605 werden die Befehle in ausführbare Operationen decodiert (in einer Ausführungsform, die einen Decodierer erfordert). Bei 5604 werden die Strahlverfolgungsbefehle geplant und zur Ausführung durch eine Strahlverfolgungsschaltungsanordnung abgefertigt. Bei 5605 werden die Strahlverfolgungsbefehle von der Strahlverfolgungsschaltungsanordnung ausgeführt. Beispielsweise können die Befehle auf den oben beschriebenen FUs (z. B. Vektor-FU 5510 , Strahlverfolgungs-FU 4912 usw.) und/oder den Grafikkernen 3730 oder Strahlverfolgungskernen 3750 abgefertigt und ausgeführt.
Wenn die Ausführung für einen Strahlverfolgungsbefehl abgeschlossen ist, werden die Ergebnisse bei 5606 gespeichert (z. B. zurück in den Speicher 3798 gespeichert) und bei 5607 wird der primäre Grafik-Strang benachrichtigt. Bei 5608 werden die Strahlverfolgungsergebnisse im Kontext des primären Strangs verarbeitet (z. B. aus dem Speicher gelesen und in Grafikrenderergebnisse integriert).
In hierin beschriebenen Ausführungsformen kann sich der Begriff „Maschine“, „Modul“ oder „Logik“ auf eine anwendungsspezifische integrierte Schaltung (ASIC), eine elektronische Schaltung, einen Prozessor (gemeinsam genutzt, dediziert oder Gruppe) und/oder Speicher (gemeinsam genutzt, dediziert oder Gruppe), die ein oder mehrere Software- oder Firmware-Programme ausführen, eine kombinatorische Logikschaltung und/oder andere geeignete Komponenten, die die beschriebene Funktionalität bereitstellen, beziehen, ein Teil davon sein oder diese umfassen. In Ausführungsformen kann eine Maschine, ein Modul oder eine Logik in Firmware, Hardware, Software oder einer beliebigen Kombination von Firmware, Hardware und Software implementiert sein.
Ausführungsformen der Erfindung können verschiedene Schritte umfassen, die oben beschrieben wurden. Die Schritte können in maschinenausführbaren Befehlen verkörpert sein, die verwendet werden können, um einen Allzweck- oder Spezialprozessor zu veranlassen, die Schritte auszuführen. Alternativ können diese Schritte von bestimmten Hardwarekomponenten, die festverdrahtete Logik zum Ausführen der Schritte aufweisen, oder von einer beliebigen Kombination aus programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten ausgeführt werden.
Wie hierin beschrieben können sich Befehle auf bestimmte Hardwarekonfigurationen wie beispielsweise anwendungsspezifische integrierte Schaltungen (ASICs), die dazu ausgelegt sind, bestimmte Operationen auszuführen, oder die eine vorbestimmte Funktionalität aufweisen, oder Softwarebefehle, die in einem Speicher gespeichert sind, der in einem nichttransitorischen computerlesbaren Medium verkörpert ist, beziehen. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten implementiert werden, die auf einer oder mehreren elektronischen Vorrichtungen (z. B. einer Endstation, einem Netzelement usw.) gespeichert und ausgeführt werden. Solche elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netz) Code und Daten unter Verwendung von maschinenlesbaren Computermedien wie nichttransitorischen maschinenlesbaren Speichermedien (z. B. Magnetplatten; optischen Platten; Direktzugriffsspeicher, Nur-LeseSpeicher, Flash-Speichervorrichtungen, Phasenwechselspeicher) und transitorische computerlesbare Kommunikationsmedien (z. B. elektrische, optische, akustische Signale oder andere Formen von sich ausbreitenden Signalen wie etwa Trägerwellen, Infrarotsignale, digitale Signale, usw.).
Zusätzlich umfassen solche elektronischen Vorrichtungen typischerweise einen Satz von einem oder mehreren Prozessoren, die mit einer oder mehreren anderen Komponenten, wie einer oder mehreren Speichervorrichtungen (nichttransitorischen maschinenlesbaren Speichermedien), Anwender-Eingabe/Ausgabe-Vorrichtungen (z. B. einer Tastatur, einem Berührungsbildschirm und/oder einer Anzeige) und Netzanschlüssen gekoppelt sind. Die Kopplung des Satzes von Prozessoren und anderen Komponenten erfolgt typischerweise über einen oder mehrere Busse und Brücken (auch als Bus-Controller bezeichnet). Die Speichervorrichtung und die Signale, die den Netzverkehr tragen, repräsentieren jeweils ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung typischerweise Code und/oder Daten zur Ausführung auf dem Satz eines oder mehrerer Prozessoren dieser elektronischen Vorrichtung. Natürlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung verschiedener Kombinationen von Software, Firmware und/oder Hardware implementiert werden. In dieser genauen Beschreibung wurden zum Zwecke der Erläuterung zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der vorliegenden Erfindung zu ermöglichen. Fachleuten wird jedoch klar sein, dass die Erfindung auch ohne einige dieser spezifischen Einzelheiten praktiziert werden kann. In bestimmten Fällen wurden bekannte Strukturen und Funktionen nicht genaue beschrieben, um zu vermeiden, dass der Gegenstand der vorliegenden Erfindung verunklart wird. Dementsprechend sollten Umfang und Gedanke der Erfindung anhand der folgenden Ansprüche beurteilt werden
Claims (25)
- Verfahren, das Folgendes umfasst: Ausführen einer Anwendung mit mehreren Strängen; Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; Planen der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor; Planen der zweiten Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind; und Kombinieren der ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln, um einen Bildframe zu rendern.
- Verfahren nach
Anspruch 1 , das ferner Folgendes umfasst: Auswerten der mehreren Stränge, um die erste und zweite Teilmenge von Strängen zu identifizieren. - Verfahren nach
Anspruch 2 , wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst. - Verfahren nach
Anspruch 3 , wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind. - Verfahren nach
Anspruch 1 oder4 , das ferner Folgendes umfasst: Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors. - Verfahren nach
Anspruch 1 oder5 , wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen. - Verfahren nach
Anspruch 6 , das ferner Folgendes umfasst: Planen des ersten Grafikstrangs auf dem lokalen Grafikprozessor durch Übertragen der ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll. - Verfahren nach
Anspruch 7 , das ferner Folgendes umfasst: Planen des zweiten Grafikstrangs in der virtualisierten Repräsentation des zweiten lokalen Grafikprozessors durch Übertragen der zweiten Befehle in eine zweite Befehlswarteschlange, wobei die cloudbasierten Grafikausführungsbetriebsmittel die zweiten Befehle aus der zweiten Befehlswarteschlange verarbeiten sollen. - Verfahren nach
Anspruch 1 oder8 , wobei jeder Strang der mehreren Stränge ein Arbeitselement innerhalb einer Grafikarbeitsgruppe umfasst. - Maschinenlesbares Medium, auf dem Programmcode gespeichert ist, der, wenn er von einer Maschine ausgeführt wird, die Maschine dazu veranlasst, die folgenden Operationen auszuführen: Ausführen einer Anwendung mit mehreren Strängen; Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; Planen der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor; Planen der zweiten Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind; und Kombinieren der ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln, um einen Bildframe zu rendern.
- Maschinenlesbares Medium nach
Anspruch 10 , das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Auswerten der mehreren Stränge, um die erste und zweite Teilmenge von Strängen zu identifizieren. - Maschinenlesbares Medium nach
Anspruch 11 , wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst. - Maschinenlesbares Medium nach
Anspruch 12 , wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind. - Maschinenlesbares Medium nach
Anspruch 10 oder13 , das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors. - Maschinenlesbares Medium nach
Anspruch 10 oder14 , wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen. - Maschinenlesbares Medium nach
Anspruch 15 , das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Planen des ersten Grafikstrangs auf dem lokalen Grafikprozessor durch Übertragen der ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll. - Maschinenlesbares Medium nach
Anspruch 16 , das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Planen des zweiten Grafikstrangs auf der virtualisierten Repräsentation des zweiten lokalen Grafikprozessors durch Übertragen der zweiten Befehle in eine zweite Befehlswarteschlange, wobei die cloudbasierten Grafikausführungsbetriebsmittel die zweiten Befehle aus der zweiten Befehlswarteschlange verarbeiten sollen. - Maschinenlesbares Medium nach
Anspruch 10 oder17 , wobei jeder Strang der mehreren Stränge ein Arbeitselement innerhalb einer Grafikarbeitsgruppe umfasst. - Vorrichtung, die Folgendes umfasst: einen lokalen Grafikprozessor zum Ausführen von Strängen einer Anwendung; eine Grafikprozessorvirtualisierungs-Schaltungsanordnung und/oder -Logik zum Erzeugen einer virtualisierten Repräsentation eines lokalen Prozessors; einen Planer zum Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; wobei der Planer die erste Teilmenge von Strängen auf dem lokalen Grafikprozessor und die zweite Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, planen soll; und wobei der lokale Grafikprozessor die ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln kombinieren soll, um einen Bildframe zu rendern.
- Vorrichtung nach
Anspruch 19 , wobei der Planer eine Auswertungsschaltungsanordnung/-logik zum Auswerten der mehreren Stränge umfasst, um die erste und zweite Teilmenge von Strängen zu identifizieren. - Vorrichtung nach
Anspruch 20 , wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst. - Vorrichtung nach
Anspruch 21 , wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind. - Vorrichtung nach
Anspruch 19 oder22 , die ferner eine Schaltungsanordnung und/oder Logik zum Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors umfasst. - Vorrichtung nach
Anspruch 19 oder23 , wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen. - Vorrichtung nach
Anspruch 24 , wobei der Planer den ersten Grafikstrang auf dem lokalen Grafikprozessor planen soll, indem er die ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors überträgt, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/588,855 | 2019-09-30 | ||
US16/588,855 US11127107B2 (en) | 2019-09-30 | 2019-09-30 | Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102020124932A1 true DE102020124932A1 (de) | 2021-04-01 |
Family
ID=74872779
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102020124932.2A Pending DE102020124932A1 (de) | 2019-09-30 | 2020-09-24 | Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel |
Country Status (5)
Country | Link |
---|---|
US (2) | US11127107B2 (de) |
JP (1) | JP2021057011A (de) |
KR (1) | KR20210038294A (de) |
CN (1) | CN112669193A (de) |
DE (1) | DE102020124932A1 (de) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113853796A (zh) * | 2019-05-22 | 2021-12-28 | 诺基亚技术有限公司 | 用于体积视频编码和解码的方法、装置和计算机程序产品 |
US11579929B2 (en) * | 2020-01-31 | 2023-02-14 | Salesforce. Inc. | Cross platform application flow orchestration by transmitting the application flow including a transition rule to a plurality of computation layers |
CN114787775A (zh) * | 2020-02-03 | 2022-07-22 | 索尼互动娱乐股份有限公司 | 数据处理系统、数据转发装置以及上下文切换方法 |
US11568021B2 (en) | 2020-02-21 | 2023-01-31 | Alibaba Group Holding Limited | Vector-vector multiplication techniques for processing systems |
US11252226B2 (en) * | 2020-03-05 | 2022-02-15 | Qualcomm Incorporated | Methods and apparatus for distribution of application computations |
US11500680B2 (en) * | 2020-04-24 | 2022-11-15 | Alibaba Group Holding Limited | Systolic array-friendly data placement and control based on masked write |
CN111709870B (zh) * | 2020-05-28 | 2023-10-03 | 钟杰东 | 一种zjd应用处理器架构 |
US11409839B2 (en) * | 2020-08-21 | 2022-08-09 | Alibaba Group Holding Limited | Programmable and hierarchical control of execution of GEMM operation on accelerator |
CN113343813B (zh) * | 2021-05-31 | 2022-05-10 | 太原理工大学 | 一种基于单节点光子储备池计算的动作视频识别方法 |
CN113343814B (zh) * | 2021-05-31 | 2022-06-14 | 太原理工大学 | 一种基于单节点光子储备池计算的手写数字图像识别方法 |
CN113918249B (zh) * | 2021-09-14 | 2023-11-21 | 北京房江湖科技有限公司 | 一种背景模糊控件的实现方法及装置 |
US11663759B1 (en) | 2022-04-04 | 2023-05-30 | Cloudstream Medical Imaging, Inc. | System and method for processing multi-dimensional and time-overlapping imaging data in real time with cloud computing |
US11690601B1 (en) | 2022-04-04 | 2023-07-04 | Cloudstream Medical Imaging, Inc. | System and method for processing multi-dimensional ultrasound imaging data on real-time cloud computers |
CN114723601B (zh) * | 2022-04-08 | 2023-05-09 | 山东翰林科技有限公司 | 一种虚拟场景下的模型结构化建模及快速渲染方法 |
US20230394739A1 (en) * | 2022-06-06 | 2023-12-07 | William USHER | Apparatus and Method for Approximate Puzzlepiece Compositing |
WO2024010125A1 (ko) * | 2022-07-08 | 2024-01-11 | 엘지전자 주식회사 | 사이니지 제공을 위한 에지 및 클라우드 간 협업 플랫폼 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9280375B1 (en) * | 2014-04-30 | 2016-03-08 | Google Inc. | Dynamically adjustable virtual machine |
EP3180691A1 (de) * | 2014-08-15 | 2017-06-21 | Intel Corporation | Ermöglichung von dynamischen thread-sicheren operationen für transaktionen mit variabler bitlänge auf rechnervorrichtungen |
-
2019
- 2019-09-30 US US16/588,855 patent/US11127107B2/en active Active
-
2020
- 2020-06-24 CN CN202010589455.7A patent/CN112669193A/zh active Pending
- 2020-06-26 JP JP2020110060A patent/JP2021057011A/ja active Pending
- 2020-06-26 KR KR1020200078251A patent/KR20210038294A/ko active Search and Examination
- 2020-09-24 DE DE102020124932.2A patent/DE102020124932A1/de active Pending
-
2021
- 2021-09-14 US US17/475,147 patent/US11593909B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20220148123A1 (en) | 2022-05-12 |
US11127107B2 (en) | 2021-09-21 |
US20210097641A1 (en) | 2021-04-01 |
KR20210038294A (ko) | 2021-04-07 |
CN112669193A (zh) | 2021-04-16 |
US11593909B2 (en) | 2023-02-28 |
JP2021057011A (ja) | 2021-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102020124932A1 (de) | Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel | |
DE102020108218A1 (de) | Vorrichtung und Verfahren zur Konstruktion von Begrenzungsvolumenhierarchien mit reduzierter Genauigkeit | |
DE102021118444A1 (de) | Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten | |
DE112020000874T5 (de) | Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration | |
DE102020130078A1 (de) | Systolische arithmetik an spärlichen daten | |
DE102021121187A1 (de) | EINRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN GRAFIKVERARBEITUNG EINSCHLIEßLICH STRAHLVERFOLGUNG | |
DE102020115026A1 (de) | Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität | |
DE102019102279A1 (de) | Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells | |
DE102020120372A1 (de) | Programmierbare wandlungshardware | |
DE102018110380A1 (de) | Tool zum Ermöglichen der Effizienz beim Maschinenlernen | |
DE102019135639A1 (de) | Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS) | |
DE102020129251A1 (de) | Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen | |
DE102020129970A1 (de) | Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente | |
DE102020132557A1 (de) | Vorrichtung und verfahren für asynchrones raytracing | |
DE102020130073A1 (de) | Verbesserung der datenlokalität für grafikprozessoreinheiten | |
DE112020000464T5 (de) | Mehrfachkachel-grafikprozessor-rendering | |
DE102020131896A1 (de) | Deep learning-basierte auswahl von abtastwerten für adaptives supersampling | |
DE102020129003A1 (de) | Vorrichtung und verfahren zum verwenden von alpha-werten zum verbessern einer strahlverfolgungseffizienz | |
DE102019103310A1 (de) | Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet | |
DE102020131901A1 (de) | Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors | |
DE102020132544A1 (de) | Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline | |
DE102020107080A1 (de) | Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz | |
DE102020132377A1 (de) | Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline | |
DE102019132001A1 (de) | Vorrichtung und verfahren für einen hierarchischen beamtracer | |
DE102020132272A1 (de) | Verfahren und vorrichtung zum codieren basierend auf schattierungsraten |