DE112022000373T5 - Application programming interface for monitoring resource usage - Google Patents
Application programming interface for monitoring resource usage Download PDFInfo
- Publication number
- DE112022000373T5 DE112022000373T5 DE112022000373.1T DE112022000373T DE112022000373T5 DE 112022000373 T5 DE112022000373 T5 DE 112022000373T5 DE 112022000373 T DE112022000373 T DE 112022000373T DE 112022000373 T5 DE112022000373 T5 DE 112022000373T5
- Authority
- DE
- Germany
- Prior art keywords
- api
- processor
- computer program
- information
- graphics
- 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
- 238000012544 monitoring process Methods 0.000 title claims description 9
- 238000004590 computer program Methods 0.000 claims abstract description 208
- 238000000034 method Methods 0.000 claims abstract description 203
- 230000015654 memory Effects 0.000 claims description 248
- 238000012545 processing Methods 0.000 claims description 235
- 230000006870 function Effects 0.000 claims description 173
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 abstract 1
- 230000008569 process Effects 0.000 description 124
- 238000007667 floating Methods 0.000 description 59
- 238000013519 translation Methods 0.000 description 43
- 230000014616 translation Effects 0.000 description 43
- 238000004891 communication Methods 0.000 description 41
- 238000005227 gel permeation chromatography Methods 0.000 description 33
- 238000005192 partition Methods 0.000 description 30
- 238000007726 management method Methods 0.000 description 28
- 239000000872 buffer Substances 0.000 description 26
- 239000008186 active pharmaceutical agent Substances 0.000 description 24
- 239000013598 vector Substances 0.000 description 19
- 230000002093 peripheral effect Effects 0.000 description 18
- 238000012546 transfer Methods 0.000 description 18
- 239000011159 matrix material Substances 0.000 description 17
- 230000004044 response Effects 0.000 description 17
- 230000007246 mechanism Effects 0.000 description 16
- 239000012634 fragment Substances 0.000 description 15
- 238000009826 distribution Methods 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 13
- 238000013135 deep learning Methods 0.000 description 13
- 230000001419 dependent effect Effects 0.000 description 12
- 101000740523 Homo sapiens Syntenin-1 Proteins 0.000 description 11
- 102100037219 Syntenin-1 Human genes 0.000 description 11
- 230000001133 acceleration Effects 0.000 description 11
- 230000001052 transient effect Effects 0.000 description 11
- 230000006378 damage Effects 0.000 description 10
- 238000013500 data storage Methods 0.000 description 10
- 238000009877 rendering Methods 0.000 description 10
- 230000001360 synchronised effect Effects 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 9
- 239000003795 chemical substances by application Substances 0.000 description 9
- 230000010354 integration Effects 0.000 description 9
- 238000013508 migration Methods 0.000 description 8
- 230000005012 migration Effects 0.000 description 8
- 239000004744 fabric Substances 0.000 description 7
- 238000013528 artificial neural network Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000010801 machine learning Methods 0.000 description 6
- 238000013507 mapping Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000002156 mixing Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 4
- 238000007405 data analysis Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000001902 propagating effect Effects 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000011068 loading method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000000047 product Substances 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 238000012552 review Methods 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 102100035964 Gastrokine-2 Human genes 0.000 description 2
- 101001075215 Homo sapiens Gastrokine-2 Proteins 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000001816 cooling Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000001976 improved effect Effects 0.000 description 2
- 238000007620 mathematical function Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 229920001690 polydopamine Polymers 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000008093 supporting effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- BUHVIAUBTBOHAG-FOYDDCNASA-N (2r,3r,4s,5r)-2-[6-[[2-(3,5-dimethoxyphenyl)-2-(2-methylphenyl)ethyl]amino]purin-9-yl]-5-(hydroxymethyl)oxolane-3,4-diol Chemical compound COC1=CC(OC)=CC(C(CNC=2C=3N=CN(C=3N=CN=2)[C@H]2[C@@H]([C@H](O)[C@@H](CO)O2)O)C=2C(=CC=CC=2)C)=C1 BUHVIAUBTBOHAG-FOYDDCNASA-N 0.000 description 1
- 241000543463 Ceroplastes destructor Species 0.000 description 1
- 241001432959 Chernes Species 0.000 description 1
- 241000699666 Mus <mouse, genus> Species 0.000 description 1
- 101100202275 Mus musculus Slc22a8 gene Proteins 0.000 description 1
- 241000492493 Oxymeris Species 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000011773 genetically engineered mouse model Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 239000011435 rock Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- 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
- G06F9/5055—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 considering software capabilities, i.e. software resources associated or available to the machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/28—Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
-
- 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/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/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
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Abstract
Vorrichtungen, Systeme und Techniken zum Erzeugen einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm verwendet werden. In mindestens einer Ausführungsform werden eine oder mehrere Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind, erzeugt, z. B. auf der Grundlage von CUDA oder anderem Parallelrechenplattformcode.Apparatus, systems and techniques for creating one or more data structures used to monitor the use of information by a computer program. In at least one embodiment, one or more data structures to be used to monitor the use of information by a computer program are created, e.g. B. based on CUDA or other parallel computing platform code.
Description
QUERREFERENZ AUF VERWANDTE ANMELDUNGENCROSS REFERENCE TO RELATED APPLICATIONS
Diese Anmeldung beansprucht den Vorteil der U.S. Provisional Application Nr.
GEBIETAREA
Mindestens eine Ausführungsform bezieht sich auf Verarbeitungsressourcen, die zum Überwachen der Verwendung von Computerprogrammressourcen verwendet werden. Zum Beispiel bezieht sich mindestens eine Ausführungsform auf Prozessoren oder Computersysteme, die zum Überwachen der Verwendung von Computerprogrammressourcen verwendet werden und verschiedene hierin beschriebene neue Techniken implementieren.At least one embodiment relates to processing resources used to monitor the usage of computer program resources. For example, at least one embodiment relates to processors or computer systems used to monitor the usage of computer program resources and implementing various new techniques described herein.
HINTERGRUNDBACKGROUND
Die Überwachung der Verwendung von Computerprogrammressourcen kann schwierig sein, da die Ressourcen für verschiedene Operationen verwendet werden können. Techniken zum Überwachen der Verwendung von Computerprogrammressourcen können daher durch den Einsatz von CUDA oder anderem Parallelrechenplattformcode verbessert werden.Monitoring the use of computer program resources can be difficult because the resources can be used for various operations. Techniques for monitoring the usage of computer program resources can therefore be improved through the use of CUDA or other parallel computing platform code.
KURZE BESCHREIBUNG DER ZEICHNUNGENBRIEF DESCRIPTION OF THE DRAWINGS
-
1 veranschaulicht ein Beispiel für ein Programm, das Graphen verwendet, in Übereinstimmung mit mindestens einer Ausführungsform;1 illustrates an example of a program using graphs in accordance with at least one embodiment; -
2 veranschaulicht ein Beispiel für hierin beschriebene Techniken, in Übereinstimmung mit mindestens einer Ausführungsform;2 illustrates an example of techniques described herein, in accordance with at least one embodiment; -
3 veranschaulicht ein Diagramm eines User Object Create API-Aufrufs, in Übereinstimmung mit mindestens einer Ausführungsform;3 illustrates a diagram of a User Object Create API call, in accordance with at least one embodiment; -
4 veranschaulicht ein Diagramm eines User Object Retain API-Aufrufs, in Übereinstimmung mit mindestens einer Ausführungsform;4 illustrates a diagram of a User Object Retain API call, in accordance with at least one embodiment; -
5 veranschaulicht ein Diagramm eines User Object Release API-Aufrufs, in Übereinstimmung mit mindestens einer Ausführungsform;5 illustrates a diagram of a User Object Release API call, in accordance with at least one embodiment; -
6 veranschaulicht ein Beispiel eines Prozesses des Erzeugens von Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm verwendet werden, gemäß mindestens einer Ausführungsform;6 illustrates an example of a process of creating data structures used to monitor a computer program's use of information, according to at least one embodiment; -
7 veranschaulicht ein Beispiel eines Prozesses des Veranlassens, die Verwendung von Informationen durch ein Computerprogramm zu steigern, gemäß mindestens einer Ausführungsform;7 illustrates an example of a process of causing a computer program to increase the use of information, according to at least one embodiment; -
8 veranschaulicht ein Beispiel eines Prozesses des Veranlassens, die Verwendung von Informationen durch ein Computerprogramm zu reduzieren, gemäß mindestens einer Ausführungsform;8th illustrates an example of a process of causing a computer program to reduce the use of information, according to at least one embodiment; -
9 veranschaulicht ein beispielhaftes Rechenzentrum, in Übereinstimmung mit mindestens einer Ausführungsform;9 illustrates an example data center, in accordance with at least one embodiment; -
10 veranschaulicht ein Verarbeitungssystem, in Übereinstimmung mit mindestens einer Ausführungsform;10 illustrates a processing system in accordance with at least one embodiment; -
11 veranschaulicht ein Computersystem, in Übereinstimmung mit mindestens einer Ausführungsform;11 illustrates a computer system in accordance with at least one embodiment; -
12 veranschaulicht ein System, in Übereinstimmung mit mindestens einer Ausführungsform;12 illustrates a system in accordance with at least one embodiment; -
13 veranschaulicht eine beispielhafte integrierte Schaltung, in Übereinstimmung mit mindestens einer Ausführungsform;13 illustrates an example integrated circuit, in accordance with at least one embodiment; -
14 veranschaulicht ein Rechnersystem, in Übereinstimmung mit mindestens einer Ausführungsform;14 illustrates a computer system in accordance with at least one embodiment; -
15 veranschaulicht eine APU, in Übereinstimmung mit mindestens einer Ausführungsform;15 illustrates an APU, in accordance with at least one embodiment; -
16 veranschaulicht eine CPU, in Übereinstimmung mit mindestens einer Ausführungsform;16 illustrates a CPU in accordance with at least one embodiment; -
17 veranschaulicht ein beispielhaftes Beschleunigerintegrationsslice, in Übereinstimmung mit mindestens einer Ausführungsform;17 illustrates an example accelerator integration slice, in accordance with at least one embodiment; -
18A-18B veranschaulichen beispielhafte Grafikprozessoren, in Übereinstimmung mit mindestens einer Ausführungsform;18A-18B illustrate exemplary graphics processors, in accordance with at least one embodiment; -
19A veranschaulicht einen Grafikkern, in Übereinstimmung mit mindestens einer Ausführungsform;19A illustrates a graphics core, in accordance with at least one embodiment; -
19B veranschaulicht eine GPGPU, in Übereinstimmung mit mindestens einer Ausführungsform;19B illustrates a GPGPU, in accordance with at least one embodiment; -
20A veranschaulicht einen Parallelprozessor, in Übereinstimmung mit mindestens einer Ausführungsform;20A illustrates a parallel processor, in accordance with at least one embodiment; -
20B veranschaulicht einen Verarbeitungscluster, in Übereinstimmung mit mindestens einer Ausführungsform;20B illustrates a processing cluster, in accordance with at least one embodiment; -
20C veranschaulicht einen Grafik-Multiprozessor, in Übereinstimmung mit mindestens einer Ausführungsform;20C illustrates a graphics multiprocessor, in accordance with at least one embodiment; -
21 veranschaulicht einen Grafikprozessor, in Übereinstimmung mit mindestens einer Ausführungsform;21 illustrates a graphics processor in accordance with at least one embodiment; -
22 veranschaulicht einen Prozessor, in Übereinstimmung mit mindestens einer Ausführungsform;22 illustrates a processor in accordance with at least one embodiment; -
23 veranschaulicht einen Prozessor, in Übereinstimmung mit mindestens einer Ausführungsform;23 illustrates a processor in accordance with at least one embodiment; -
24 veranschaulicht einen Grafikprozessorkern, in Übereinstimmung mit mindestens einer Ausführungsform;24 illustrates a graphics processor core, in accordance with at least one embodiment; -
25 veranschaulicht eine PPU, in Übereinstimmung mit mindestens einer Ausführungsform;25 illustrates a PPU, in accordance with at least one embodiment; -
26 veranschaulicht eine GPC, in Übereinstimmung mit mindestens einer Ausführungsform;26 illustrates a GPC, in accordance with at least one embodiment; -
27 veranschaulicht einen Streaming-Multiprozessor, in Übereinstimmung mit mindestens einer Ausführungsform;27 illustrates a streaming multiprocessor, in accordance with at least one embodiment; -
28 veranschaulicht einen Software-Stack einer Programmierplattform, in Übereinstimmung mit mindestens einer Ausführungsform;28 illustrates a software stack of a programming platform, in accordance with at least one embodiment; -
29 veranschaulicht eine CUDA-Implementierung eines Software-Stacks von28 , in Übereinstimmung mit mindestens einer Ausführungsform;29 illustrates a CUDA implementation of a software stack from28 , in accordance with at least one embodiment; -
30 veranschaulicht eine ROCm-Implementierung eines Software-Stacks von28 , in Übereinstimmung mit mindestens einer Ausführungsform;30 illustrates a ROCm implementation of a software stack from28 , in accordance with at least one embodiment; -
31 veranschaulicht eine OpenCL-Implementierung eines Software-Stacks von28 , in Übereinstimmung mit mindestens einer Ausführungsform;31 illustrates an OpenCL implementation of a software stack from28 , in accordance with at least one embodiment; -
32 veranschaulicht eine Software, die von einer Programmierplattform unterstützt wird, in Übereinstimmung mit mindestens einer Ausführungsform;32 illustrates software supported by a programming platform in accordance with at least one embodiment; -
33 veranschaulicht die Kompilierung von Code zur Ausführung auf den Programmierplattformen von28-31 , in Übereinstimmung mit mindestens einer Ausführungsform;33 demonstrates how to compile code for execution on the programming platforms of28-31 , in accordance with at least one embodiment; -
34 veranschaulicht in größerem Detail die Kompilierung von Code zur Ausführung auf den Programmierplattformen von28-31 , in Übereinstimmung mit mindestens einer Ausführungsform;34 illustrates in greater detail how to compile code for execution on the programming platforms of28-31 , in accordance with at least one embodiment; -
35 veranschaulicht die Übersetzung von Quellcode vor der Kompilierung von Quellcode, in Übereinstimmung mit mindestens einer Ausführungsform;35 illustrates translation of source code prior to compilation of source code, in accordance with at least one embodiment; -
36A veranschaulicht ein System, das zum Kompilieren und Ausführen von CUDA-Quellcode unter Verwendung verschiedener Arten von Verarbeitungseinheiten konfiguriert ist, in Übereinstimmung mit mindestens einer Ausführungsform;36A illustrates a system configured to compile and execute CUDA source code using various types of processing units, in accordance with at least one embodiment; -
36B veranschaulicht ein System, das zum Kompilieren und Ausführen von CUDA-Quellcode von36A unter Verwendung einer CPU und eines CUDA-fähigen Grafikprozessors konfiguriert ist, in Übereinstimmung mit mindestens einer Ausführungsform;36B illustrates a system for compiling and running CUDA source code36A is configured using a CPU and a CUDA-enabled graphics processor, in accordance with at least one embodiment; -
36C veranschaulicht ein System, das zum Kompilieren und Ausführen von CUDA-Quellcode von36A unter Verwendung einer CPU und einer nicht-CUDA-fähigen GPU konfiguriert ist, in Übereinstimmung mit mindestens einer Ausführungsform;36C illustrates a system for compiling and running CUDA source code36A is configured using a CPU and a non-CUDA capable GPU, in accordance with at least one embodiment; -
37 veranschaulicht einen beispielhaften Kernel, der durch das CUDA-zu-HIP-Übersetzungswerkzeug von36C übersetzt wurde, in Übereinstimmung mit mindestens einer Ausführungsform;37 illustrates an example kernel created by the CUDA to HIP translation tool from36C has been translated in accordance with at least one embodiment; -
38 veranschaulicht die nicht-CUDA-fähige GPU von36C in größerem Detail, in Übereinstimmung mit mindestens einer Ausführungsform;38 illustrates the non-CUDA capable GPU of36C in greater detail, in accordance with at least one embodiment; -
39 veranschaulicht, wie Threads eines beispielhaften CUDA-Grids auf verschiedene Recheneinheiten von38 abgebildet werden, in Übereinstimmung mit mindestens einer Ausführungsform; und39 illustrates how threads of an example CUDA grid access different computing units38 are depicted in accordance with at least one embodiment; and -
40 veranschaulicht, wie bestehender CUDA-Code zu Data Parallel C++-Code zu migrieren ist, in Übereinstimmung mit mindestens einer Ausführungsform.40 illustrates how to migrate existing CUDA code to Data Parallel C++ code, in accordance with at least one embodiment.
DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION
In mindestens einer Ausführungsform verwenden ein oder mehrere Programmiermodelle Graphen, um verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform umfassen das eine oder die mehreren Programmiermodelle Modelle wie das Compute Unified Device Architecture (CUDA)-Modell, das Heterogeneous Compute Interface for Portability (HIP)-Modell, das oneAPI-Modell, verschiedene Hardwarebeschleuniger-Programmiermodelle und/oder Variationen davon. In mindestens einer Ausführungsform ist ein Graph eine Reihe von Operationen, die auf einer oder mehreren Verarbeitungseinheiten, wie einer Zentralverarbeitungseinheit (CPU), einer Grafikverarbeitungseinheit (GPU), einer Universal-GPU (GPGPU), einer Parallelverarbeitungseinheit (PPU) und/oder Variationen davon, ausgeführt werden. In mindestens einer Ausführungsform ist der Graph ein Datenobjekt, das auch als Graphen-Datenstruktur, Graphen-Code und/oder Variationen davon bezeichnet wird und das eine Reihe von Operationen, wie z. B. Kernel-Starts, definiert, die durch Abhängigkeiten verbunden sind. In mindestens einer Ausführungsform werden Abhängigkeiten des Graphen getrennt von der Ausführung des Graphen definiert. In mindestens einer Ausführungsform wird der Graph einmal definiert und kann ein oder mehrere Male gestartet werden.In at least one embodiment, one or more programming models use graphs to perform various operations. In at least one embodiment, the one or more programming models include models such as the Compute Unified Device Architecture (CUDA) model, the Heterogeneous Compute Interface for Portability (HIP) model, the oneAPI model, various hardware accelerator programming models, and/or variations thereof . In at least one embodiment, a graph is a series of operations performed on one or more processing units, such as a central processing unit (CPU), a graphics processing unit (GPU), a general purpose GPU (GPGPU), a parallel processing unit (PPU), and/or variations thereof , be executed. In at least one embodiment, the graph is a data object, also referred to as a graph data structure, graph code, and/or variations thereof, that performs a series of operations such as: B. Kernel starts, which are connected by dependencies. In at least one embodiment, dependencies of the graph are defined separately from the execution of the graph. In at least one embodiment, the graph is defined once and may be started one or more times.
In mindestens einer Ausführungsform entspricht eine Operation bzw. ein Betriebsablauf einem Knoten in dem Graphen. In mindestens einer Ausführungsform bilden Abhängigkeiten zwischen den Operationen Kanten des Graphen. In mindestens einer Ausführungsform schränken Abhängigkeiten die Ausführungsreihenfolge der Operationen ein. In mindestens einer Ausführungsform kann eine Operation jederzeit eingeplant werden, sobald Knoten, von denen er abhängt, abgeschlossen sind (z. B. wenn von Knoten angegebene Operationen ausgeführt/durchgeführt worden sind). In mindestens einer Ausführungsform können von den Knoten angegebene Operationen Operationen wie beispielsweise einen Kernel, CPU-Funktionsaufrufe, Speicherverwaltungs-/-manipulationsoperationen, Warten auf ein Ereignis, Aufzeichnen eines Ereignisses, Signalisieren eines externen Semaphors, Warten auf einen externen Semaphor sowie andere Graphen (z. B. untergeordnete Graphen) umfassen. In mindestens einer Ausführungsform werden Graphen durch verschiedene Funktionen der Anwendungsprogrammierschnittstelle (API) des Programmiermodells erstellt. In mindestens einer Ausführungsform werden Operationen des Graphen über verschiedene API-Funktionen des Programmiermodells ausgeführt.In at least one embodiment, an operation corresponds to a node in the graph. In at least one embodiment, dependencies between the operations form edges of the graph. In at least one embodiment, dependencies restrict the order of execution of operations. In at least one embodiment, an operation may be scheduled at any time once nodes on which it depends have completed (e.g., when node-specified operations have been executed/performed). In at least one embodiment, operations specified by the nodes may include operations such as a kernel, CPU function calls, memory management/manipulation operations, waiting for an event, recording an event, signaling an external semaphore, waiting for an external semaphore, and other graphs (e.g B. subordinate graphs). In at least one embodiment, graphs are created through various functions of the application programming interface (API) of the programming model. In at least one embodiment, operations of the graph are performed via various API functions of the programming model.
In mindestens einer Ausführungsform werden Graphen durch eine oder mehrere Operationen erstellt, welche als Stream Capture bezeichnet werden können. In mindestens einer Ausführungsform werden eine oder mehrere Operationen definiert, bei denen Stream Capture verwendet wird, um die eine oder die mehreren Operationen in dem Graphen zu erfassen. In mindestens einer Ausführungsform zeigt beispielsweise ein API-Aufruf den Beginn einer Reihe von Operationen an, die auch als Stream bezeichnet werden, und ein anderer API-Aufruf zeigt das Ende der Reihe von Operationen an, wobei die Reihe von Operationen dann als Graph instanziiert wird. In mindestens einer Ausführungsform kann eine API-Funktion, die den Beginn der Reihe von Operationen anzeigt, als Stream Begin Capture API-Funktion bezeichnet werden. In mindestens einer Ausführungsform kann eine API-Funktion, die ein Ende der Reihe von Operationen anzeigt, als Stream End Capture API-Funktion bezeichnet werden. In mindestens einer Ausführungsform ist zu beachten, dass API-Funktionen, wie hierin beschriebene, in jeder geeigneten Weise und mit jeder geeigneten Terminologie bezeichnet werden können, die sich auf eine oder mehrere Funktionalitäten der API-Funktionen beziehen kann oder nicht.In at least one embodiment, graphs are created through one or more operations, which may be referred to as stream capture. In at least one embodiment, one or more operations are defined using stream capture to capture the one or more operations in the graph. For example, in at least one embodiment, an API call indicates the beginning of a series of operations, also referred to as a stream, and another API call indicates the end of the series of operations, where the series of operations is then instantiated as a graph . In at least one embodiment, an API function that indicates the beginning of the series of operations may be referred to as a Stream Begin Capture API function. In at least one embodiment, an API function that indicates an end to the series of operations may be as Stream End Capture API function. In at least one embodiment, it should be noted that API functions as described herein may be referred to in any appropriate manner and with any appropriate terminology, which may or may not relate to one or more functionalities of the API functions.
In mindestens einer Ausführungsform werden verschiedene Objekte in verschiedenen Operationen verwendet, die durch den Graphen und/oder ein anderes geeignetes Computerprogramm angegeben werden. In mindestens einer Ausführungsform kann der Graph und/oder ein anderes geeignetes Computerprogramm Operationen definieren, die verschiedene benutzerspezifische Daten und/oder benutzerverwaltete Ressourcen verwenden, die auch als Objekte bezeichnet werden. In mindestens einer Ausführungsform umfasst ein Objekt Kernelargumente, Hostfunktionsargumente, Arbeitsbereichspuffer und/oder Variationen davon. In mindestens einer Ausführungsform umfasst das Objekt alle geeigneten Computerressourcen, Informationen und/oder Daten, die während der Ausführung einer oder mehrerer Operationen des Graphen und/oder eines anderen geeigneten Computerprogramms verwendet werden. In mindestens einer Ausführungsform wird das Objekt durch einen Konstruktor erzeugt, der sich auf eine Art von Funktion bezieht, die zur Erzeugung des Objekts aufgerufen wird. In mindestens einer Ausführungsform wird das Objekt durch eine Destruktorfunktion zerstört, die auch als ein Destruktor bezeichnet wird und eine Art von Funktion ist, die zur Zerstörung des Objekts aufgerufen wird. In mindestens einer Ausführungsform wird das Objekt durch die Destruktorfunktion zerstört, indem zumindest der dem Objekt entsprechende Speicher freigegeben wird, und/oder durch jeden geeigneten Prozess, der das Objekt löscht oder anderweitig zerstört. In mindestens einer Ausführungsform können Konstruktoren und/oder Destruktoren von Benutzern, verschiedenen Softwarebibliotheken und/oder Variationen davon definiert werden.In at least one embodiment, different objects are used in different operations specified by the graph and/or another suitable computer program. In at least one embodiment, the graph and/or another suitable computer program may define operations using various user-specific data and/or user-managed resources, also referred to as objects. In at least one embodiment, an object includes kernel arguments, host function arguments, workspace buffers, and/or variations thereof. In at least one embodiment, the object includes any suitable computer resources, information and/or data used during the execution of one or more operations of the graph and/or another suitable computer program. In at least one embodiment, the object is created by a constructor that refers to some type of function that is called to create the object. In at least one embodiment, the object is destroyed by a destructor function, also referred to as a destructor, which is a type of function called to destroy the object. In at least one embodiment, the object is destroyed by the destructor function, freeing at least the memory corresponding to the object, and/or by any suitable process that deletes or otherwise destroys the object. In at least one embodiment, constructors and/or destructors may be defined by users, various software libraries, and/or variations thereof.
In mindestens einer Ausführungsform werden Graphen in verschiedenen Operationen eines Programms verwendet.
In mindestens einer Ausführungsform führen ein oder mehrere Systeme, z. B. ein System mit einem oder mehreren Programmiermodellen wie beispielsweise CUDA, HIP, oneAPI und/oder Variationen davon, verschiedene hierin beschriebene Vorgänge und/oder Techniken durch. In mindestens einer Ausführungsform bestimmt das System, wann immer ein neues Graph-Handle für eine Verwendung eines Graphen erstellt wird. In mindestens einer Ausführungsform, als ein illustratives Beispiel, wird das Graph-Handle erstellt, wenn der Graph erstellt wird, der Graph als ausführbarer Graph instanziiert wird, der ausführbare Graph gestartet wird und/oder verschiedene andere Graph-Operationen. In mindestens einer Ausführungsform, als ein illustratives Beispiel, wird das Graph-Handle gelöscht, wenn der Graph zerstört wird, der ausführbare Graph ausgeführt wird, der ausführbare Graph zerstört wird, und/oder verschiedene andere Graph-Operationen. In mindestens einer Ausführungsform verwendet das System den Zähler, der auch als ein Referenzzähler bezeichnet wird, um die Erstellung und die Löschung von Graph-Handles zu verfolgen, wobei der Zähler um 1 erhöht wird, wenn das Graph-Handle erstellt wird (z. B. über einen API-Aufruf, der zur Erstellung des Graph-Handles führt), und um 1 verringert wird, wenn das Graph-Handle zerstört oder anderweitig gelöscht wird (z. B. über einen API-Aufruf, der zur Löschung des Graph-Handles führt). In mindestens einer Ausführungsform bestimmt das System, wenn der Referenzzähler einen Wert von 0 erreicht, dass das von dem Graphen verwendete Objekt freigegeben (z. B. kann der für das Objekt zugewiesene Speicher freigegeben werden) oder anderweitig zerstört werden kann (z. B. über einen Destruktor).In at least one embodiment, one or more systems, e.g. B. a system with one or more programming models such as CUDA, HIP, oneAPI and / or variations thereof, perform various operations and / or techniques described herein. In at least one embodiment, the system determines whenever a new graph handle is created for use of a graph. In at least one embodiment, as an illustrative example, the graph handle is created when the graph is created, the graph is instantiated as an executable graph, the executable graph is started, and/or various other graph operations. In at least one embodiment, as an illustrative example, the graph handle is deleted when the graph is destroyed, the executable graph is executed, the executable graph is destroyed, and/or various other graph operations. In at least one embodiment, the system uses the counter, also referred to as a reference counter, to track the creation and deletion of graph handles, where the counter is incremented by 1 when the graph handle is created (e.g . via an API call that results in the creation of the graph handle), and is decremented by 1 if the graph handle is destroyed or otherwise deleted (e.g. via an API call that results in the deletion of the graph handle). Handles leads). In at least one embodiment, when the reference count reaches a value of 0, the system determines that the object used by the graph may be freed (e.g., memory allocated for the object may be freed) or otherwise destroyed (e.g., via a destructor).
In mindestens einer Ausführungsform bietet das System die Möglichkeit, die Verwendung des Objekts oder einer anderen geeigneten Computerressource durch ein Computerprogramm über den Zähler zu verfolgen. In mindestens einer Ausführungsform wird die Verwendung des Objekts durch das Computerprogramm über Referenzen, die dem Computerprogramm zugeordnet sind, zu dem Objekt verfolgt. In mindestens einer Ausführungsform bietet das System die Möglichkeit, den Zähler, der auch als ein Referenzzähler bezeichnet wird, zur Verfolgung von Referenzen auf das Objekt zu verwenden, wobei der Zähler bei einer neuen Referenz auf das Objekt um 1 erhöht und um 1 verringert wird, wenn eine Referenz auf das Objekt nicht mehr verwendet wird. In mindestens einer Ausführungsform bestimmt das System, wenn der Referenzzähler einen Wert von 0 erreicht, dass das von dem Computerprogramm verwendete Objekt freigegeben werden kann (z. B. kann der für das Objekt zugewiesene Speicher freigegeben werden) oder anderweitig zerstört werden kann (z. B. über einen Destruktor).In at least one embodiment, the system provides the ability to track the use of the object or other suitable computer resource by a computer program via the counter In at least one embodiment, use of the object by the computer program is tracked to the object via references associated with the computer program. In at least one embodiment, the system provides the ability to use the counter, also referred to as a reference counter, to track references to the object, the counter being incremented by 1 and decremented by 1 upon a new reference to the object, when a reference to the object is no longer used. In at least one embodiment, when the reference count reaches a value of 0, the system determines that the object used by the computer program may be freed (e.g., the memory allocated for the object may be freed) or otherwise destroyed (e.g. B. via a destructor).
In mindestens einer Ausführungsform werden hierin beschriebene Techniken für verschiedene Softwarebibliotheken, wie z. B. eine NVIDIA Collective Communications Library (NCCL), verschiedene kollektive Kommunikationsbibliotheken und/oder eine beliebige geeignete Softwarebibliothek, verwendet, um einem Host-Knoten in dem Graphen dynamisch dimensionierte Daten bereitzustellen, ohne dass Speicherplatz verloren geht.
In mindestens einer Ausführungsform unterstützen hierin beschriebene Techniken Graphen und/oder andere geeignete Computerprogramme, die auf nicht-trivial kopierbare Objekte Referenzen, wie z. B. Objekte, die einen vom Benutzer bereitgestellten Zerstörungs- und/oder Kopiercode erfordern. In mindestens einer Ausführungsform erlauben hierin beschriebene Techniken Benutzern, die Zerstörung von Benutzerobjekten zu synchronisieren, wenn ein vom Benutzer bereitgestellter Zerstörungscode unterstützt wird. In mindestens einer Ausführungsform ermöglichen hierin beschriebene Techniken die Zerstörung von Objekten durch verschiedene architekturspezifische API-Aufrufe (z. B. CUDA-API-Aufrufe). In mindestens einer Ausführungsform ermöglichen hierin beschriebene Techniken die Aktualisierung von Knoten unter Verwendung einer oder mehrerer Softwarebibliotheken und/oder ursprünglichen Aufgabenbeschreibungscodes.In at least one embodiment, techniques described herein support graphs and/or other suitable computer programs that reference non-trivially copyable objects, such as: B. Objects that require user-supplied destruction and/or copy code. In at least one embodiment, techniques described herein allow users to synchronize the destruction of user objects when user-supplied destruction code is supported. In at least one embodiment, techniques described herein enable objects to be destroyed through various architecture-specific API calls (e.g., CUDA API calls). In at least one embodiment, techniques described herein enable nodes to be updated using one or more software libraries and/or original task description code.
In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken Konstruktoren und Destruktoren für die Erstellung und Löschung von Objekten. In mindestens einer Ausführungsform werden bei hierin beschriebenen Techniken Rückrufe verwendet. In mindestens einer Ausführungsform bezieht sich ein Rückruf auf eine Funktion, die als Argument an einen anderen Code übergeben wird, der die Rückruffunktion ausführen (z. B. rückrufen) kann. In mindestens einer Ausführungsform umfassen Rückrufe Code wie beispielsweise Code von Konstruktoren und/oder Destruktoren. In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken einen vom Benutzer bereitgestellten Destruktorcode. In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken einen C++-Wrapper, der verschiedene C++-Objekte (z. B. Destruktor- und/oder Konstruktorcode) akzeptiert und sie zur Verwendung mit einer oder mehreren hierin beschriebenen Techniken konvertiert. In mindestens einer Ausführungsform ermöglichen hierin beschriebene Techniken, dass Benutzerobjektreferenzen von Graphen, einzelnen Knoten, anderen Objekten und/oder Variationen davon verwendet oder anderweitig in Besitz genommen werden können.In at least one embodiment, techniques described herein use constructors and destructors for creating and deleting objects. In at least one embodiment, techniques described herein utilize callbacks. In at least one embodiment, a callback refers to a function that is passed as an argument to other code that can execute (e.g., callback) the callback function. In at least one embodiment, callbacks include code such as constructor and/or destructor code. In at least one embodiment, techniques described herein use user-supplied destructor code. In at least one embodiment, techniques described herein use a C++ wrapper that accepts various C++ objects (e.g., destructor and/or constructor code) and converts them for use with one or more techniques described herein. In at least one embodiment, techniques described herein enable user object references to be used or otherwise owned by graphs, individual nodes, other objects, and/or variations thereof.
In mindestens einer Ausführungsform wird die Ausführung des Destruktors (z. B. zur Freigabe oder anderweitigen Löschung des Objekts) auf jede geeignete Weise durchgeführt. In mindestens einer Ausführungsform beziehen sich synchrone Referenzen auf Referenzen, die durch Aktionen einer CPU verwaltet werden. In mindestens einer Ausführungsform müssen Objekte alle Graph-Ausführungen überleben, die diese Objekte verwenden. In mindestens einer Ausführungsform hat eine Graph-Ausführung Zugriff auf alle Benutzerobjekte, für die der Graph bei einem Startaufruf als eine synchrone Referenz gehalten wird. In mindestens einer Ausführungsform verfolgen hierin beschriebene Techniken die Graph-Operationen so, dass alle Graph-Ausführungen Zugriff auf alle geeigneten Benutzerobjekte haben. In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken eine Ordnung, die als No-CUDA-Ordnung bezeichnet wird und bei der ein oder mehrere Systeme eines Programmiermodells die Ausführung des Destruktors einplanen, sobald alle synchronen Referenzen auf das Objekt (z. B. ein Objekt, das von einem oder mehreren Graphen verwendet wird) freigegeben sind und alle Graph-Ausführungen mit Zugriff darauf abgeschlossen sind. In mindestens einer Ausführungsform kann das System hinter anderen Destruktoren oder zuvor eingereihten Aufgaben blockieren. In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken ein vollständiges Ordnungsschema, bei dem bei einem Benutzerobjekt, das mit O bezeichnet wird, und einer Anweisung, die mit S bezeichnet wird, alle synchronen Freigaben von O in der Reihenfolge der Basiskausalität vor S erfolgen und alle Graph-Ausführungen mit Zugriff auf O in der Reihenfolge der Basiskausalität vor S erfolgen, wobei ein oder mehrere Systeme eines Programmiermodells sicherstellen, dass die Zerstörung von O in der Reihenfolge der Basiskausalität vor S erfolgt. In mindestens einer Ausführungsform verwenden hierin beschriebene Techniken ein reines CPU-Ordnungsschema, das der vollständigen Ordnung ähnelt, wobei die vollständige Ordnungsdefinition nur auf eine Anweisung S angewendet wird, die von einem CPU-Thread ausgeführt wird.In at least one embodiment, execution of the destructor (e.g., to release or otherwise delete the object) is performed in any suitable manner. In at least one embodiment, synchronous references refer to references that are managed by actions of a CPU. In at least one embodiment, objects must survive all graph executions that use those objects. In at least one embodiment, a graph execution has access to all user objects for which the graph is held as a synchronous reference upon a start call. In at least one embodiment, techniques described herein track graph operations so that all graph executions have access to all appropriate user objects. In at least one embodiment, techniques described herein utilize an ordering, referred to as the no-CUDA ordering, in which one or more systems of a programming model schedule the destructor to execute once all synchronous references to the object (e.g., an object, used by one or more graphs) are released and all graph executions with access to it are completed. In at least one embodiment, the system may block behind other destructors or previously queued tasks. In at least one embodiment, techniques described herein employ a complete ordering scheme in which, given a user object denoted O and an instruction denoted S, all synchronous releases from O occur before S in base causality order and all graph -Executions with access to O occur in the order of base causality before S, with one or more systems of a programming model ensuring that the destruction of O occurs in the order of base causality before S. In at least one embodiment, techniques described herein use a CPU-only ordering scheme similar to full ordering, where the full ordering definition is applied to only an instruction S executed by a CPU thread.
In mindestens einer Ausführungsform werden Referenzen, die dem Graphen gehören oder anderweitig von ihm genutzt werden, von allen Kopien (z. B. Klonen, Instanziierungen) beibehalten. In mindestens einer Ausführungsform stellen ein oder mehrere Systeme sicher, dass Benutzerobjekte die Ausführung des Graphen überleben, wenn ein ausführbarer Graph asynchron zerstört wird (z. B. wenn er gestartet, aber nicht synchronisiert wurde). In mindestens einer Ausführungsform wird, nachdem der Start synchronisiert ist, eine verbleibende Referenz freigegeben, und wird der Destruktor asynchron ausgeführt. In mindestens einer Ausführungsform werden Referenzen, die Graphen in untergeordneten Graphenknoten gehören, den untergeordneten Graphen zugeordnet. In mindestens einer Ausführungsform ändern sich Referenzen entsprechend, wenn ein untergeordneter Graph aktualisiert oder gelöscht wird. In mindestens einer Ausführungsform werden dann, wenn ein ausführbarer Graph oder ein untergeordneter Graph aktualisiert oder gelöscht wird (z. B. durch eine oder mehrere API-Funktionen wie beispielsweise cudaGraphExecUpdate oder cudaGraphExecChildGraphNodeSetParams, oder eine andere geeignete API-Funktion) die Referenzen in einem neuen Quellgraphen geklont und ersetzen die Referenzen in einem Zielgraphen. In mindestens einer Ausführungsform werden, wenn frühere Starts (z. B. Graphenstarts zur Ausführung) nicht synchronisiert sind, alle Referenzen, die freigegeben würden, zurückgehalten, bis diese Starts ihre Ausführung beendet haben. In mindestens einer Ausführungsform rufen ein oder mehrere Systeme die Zerstörungsfunktion (z. B. den Destruktor) des Benutzerobjekts auf, wenn eine letzte Referenz auf ein Benutzerobjekt freigegeben wird.In at least one embodiment, references owned or otherwise used by the graph are retained by all copies (e.g., clones, instantiations). In at least one embodiment, if an executable graph is destroyed asynchronously (e.g., if it was started but not synchronized), one or more systems ensure that user objects survive execution of the graph. In at least one embodiment, after the start is synchronized, a remaining reference is released and the destructor is executed asynchronously. In at least one embodiment, references belonging to graphs in child graph nodes are associated with the child graphs. In at least one embodiment, references change accordingly when a subgraph is updated or deleted. In at least one embodiment, when an executable graph or a child graph is updated or deleted (e.g., by one or more API functions such as cudaGraphExecUpdate or cudaGraphExecChildGraphNodeSetParams, or other suitable API function), the references are in a new one Source graphs cloned and replace the references in a target graph. In at least one embodiment, if previous launches (e.g., graph launches for execution) are not synchronized, any references that would be released are held until those launches have finished executing. In at least one embodiment, one or more systems call the destruction function (e.g., destructor) of the user object when a final reference to a user object is released.
In mindestens einer Ausführungsform bezieht sich eine Referenz auf das Objekt auf einen Zeiger auf das Objekt oder eine andere Verwendung des Objekts in einer oder mehreren Operationen eines oder mehrerer Computerprogramme und/oder Graphen. In mindestens einer Ausführungsform fügen ein oder mehrere Systeme Referenzen zu einzelnen Knoten des Graphen hinzu. In mindestens einer Ausführungsform fragen ein oder mehrere Systeme Referenzen ab, die zu einem bestimmten Objekt gehören. In mindestens einer Ausführungsform planen ein oder mehrere Systeme die Bereinigung von Objekten (z. B. über einen oder mehrere Destruktoren) für die Zeit nach einer letzten Ausführung, wenn der Graph zerstört wird.In at least one embodiment, a reference to the object refers to a pointer to the object or other use of the object in one or more operations of one or more computer programs and/or graphs. In at least one embodiment, one or more systems add references to individual nodes of the graph. In at least one embodiment, one or more systems query references associated with a particular object. In at least one embodiment, one or more systems schedule the cleanup of objects (e.g., via one or more destructors) after a final execution when the graph is destroyed.
In mindestens einer Ausführungsform erlauben hierin beschriebene Techniken Benutzern, einen Rückruf (z. B. einen Destruktor) zu registrieren, der einen internen Referenzzählmechanismus (z. B. einen Zähler) verwendet, der aufzurufen ist, nachdem verschiedene Bedingungen erfüllt sind (z. B. wenn ein Zählerwert 0 erreicht). In mindestens einer Ausführungsform kann ein Rückruf auf dem Graphen registriert werden und wird erst dann aufgerufen werden, wenn das Graph-Handle und alle Klone zerstört sind und alle asynchronen Ausführungen abgeschlossen sind. In mindestens einer Ausführungsform werden Rückrufe zur Zerstörung von Objekten (z. B. über Destruktoren) verwendet. In mindestens einer Ausführungsform stellen hierin beschriebene Techniken einen Mechanismus bereit zum Verfolgen von Operationen an Graph-Handles, die für die Verwaltung der Objektlebensdauer erforderlich sind. In mindestens einer Ausführungsform verschieben hierin beschriebene Techniken die Ausführung aller Rückrufe, bis ein Referenzzähler (z. B. über einen Zähler angezeigt) Null erreicht.In at least one embodiment, techniques described herein allow users to register a callback (e.g., a destructor) that uses an internal reference counting mechanism (e.g., a counter) to be invoked after various conditions are met (e.g . when a counter value reaches 0). In at least one embodiment, a callback may be registered on the graph and will not be invoked until the graph handle and all clones are destroyed and all asynchronous executions have completed. In at least one embodiment, callbacks are used to destroy objects (e.g., via destructors). In at least one embodiment, techniques described herein provide a mechanism for tracking operations on graph handles necessary for object lifetime management. In at least one embodiment, techniques described herein defer execution of all callbacks until a reference count (e.g., indicated by a counter) reaches zero.
In mindestens einer Ausführungsform erlauben hierin beschriebene Techniken einem Benutzer, ein Handle (z. B. ein CUDA-Handle) auf die Ausführung eines Destruktor-Callbacks warten zu lassen. In mindestens einer Ausführungsform erlauben hierin beschriebene Techniken ein Anhängen und/oder Manipulieren von Referenzen an verschiedenen Stellen, wie beispielsweise Graphen, Knoten von Graphen, Abhängigkeiten und/oder Variationen davon. In mindestens einer Ausführungsform sind hierin beschriebene Techniken auf Streams anwendbar, in welchen Referenzen an verschiedene asynchrone Arbeitslasten (z. B. Stream-Workloads) angehängt werden können. In mindestens einer Ausführungsform ermöglichen hierin beschriebene Techniken, dass der Destruktor-Callback rekursiv in einen oder mehrere Treiber (z. B. CUDA-Treiber) aufruft.In at least one embodiment, techniques described herein allow a user to make a handle (e.g., a CUDA handle) wait for a destructor callback to execute. In at least one embodiment, techniques described herein allow for attaching and/or manipulating references at various locations, such as graphs, nodes of graphs, dependencies, and/or variations thereof. In at least one embodiment, techniques described herein are applicable to streams, in which references can be attached to various asynchronous workloads (e.g., stream workloads). In at least one embodiment, techniques described herein enable the destructor callback to recursively call into one or more drivers (e.g., CUDA drivers).
In mindestens einer Ausführungsform ist eine API, wie diejenigen, die hierin beschrieben werden, eine Treiber-API oder eine Laufzeit-API. In mindestens einer Ausführungsform ist eine Treiber-API eine Low-Level-API, auf die in Bezug auf ein Programmiermodell Bezug genommen werden kann (z. B. CUDA-Treiber-API). In mindestens einer Ausführungsform interagiert eine Treiber-API direkt mit einer oder mehreren Vorrichtungen. In mindestens einer Ausführungsform ist eine Laufzeit-API eine High-Level-API, auf die unter Bezugnahme auf ein Programmiermodell Bezug genommen werden kann (z. B. CUDA-Laufzeit-API). In mindestens einer Ausführungsform arbeitet eine Laufzeit-API unter Verwendung einer Treiber-API. Weitere Informationen zu einer Treiber-API und einer Laufzeit-API sind in der Beschreibung von
In mindestens einer Ausführungsform erfolgt ein API-Aufruf als Teil der Ausführung von Code, der mindestens eine API-Funktion angibt, die dem API-Aufruf entspricht. In mindestens einer Ausführungsform führen, als ein veranschaulichendes Beispiel, ein oder mehrere Systeme einen API-Aufruf durch und erhalten eine Antwort als Teil der Ausführung von Code in Verbindung mit einem oder mehreren Programmiermodellen, wie beispielsweise CUDA, HIP, oneAPI und/oder Variationen davon.In at least one embodiment, an API call is made as part of the execution of code that specifies at least one API function that corresponds to the API call. In at least one embodiment, as an illustrative example, one or more systems make an API call and receive a response as part of executing code in conjunction with one or more programming models, such as CUDA, HIP, oneAPI, and/or variations thereof .
In mindestens einer Ausführungsform umfassen Parameter für den User Object Create API-Aufruf „object_out“, „ptr“, „destroy“, „initialRefcount“ und „flags“ und können weitere Parameter beinhalten, die Aspekte des Benutzerobjekts weiter definieren. In mindestens einer Ausführungsform gibt der Parameter „object_out“ einen Ort an, an dem ein Handle an das bzw. zu dem Benutzerobjekt zurückgegeben wird. In mindestens einer Ausführungsform gibt der Parameter „ptr“ einen Zeiger an, der an eine Zerstörungsfunktion (z. B. Destruktor) zu übergeben ist. In mindestens einer Ausführungsform gibt der Parameter „destroy“ einen Rückruf an, um eine oder mehrere Rechenressourcen freizugeben, wenn die eine oder die mehreren Rechenressourcen nicht länger in Verwendung sind. In mindestens einer Ausführungsform gibt der Parameter „initialRefcount“ einen Wert einer anfänglichen Referenzanzahl an, mit der das Objekt zu erstellen ist, wobei die anfänglichen Referenzen einem aufrufenden Thread gehören. In mindestens einer Ausführungsform gibt der Parameter „flags“ ein oder mehrere Flags an, die sich auf einen Wert beziehen, der ein Signal für eine Funktion oder einen Prozess (z. B. eine API-Funktion) ist, das eine oder mehrere Eigenschaften der Funktion oder des Prozesses bestimmt. In mindestens einer Ausführungsform enthalten die Flags für die User Object Create API ein Flag mit der Bezeichnung „UserObjectNoDestructorSync“, das anzeigt, dass der Zerstörungs-Callback nicht von einer API abgewartet werden kann.In at least one embodiment, parameters for the User Object Create API call include “object_out,” “ptr,” “destroy,” “initialRefcount,” and “flags,” and may include other parameters that further define aspects of the user object. In at least one embodiment, the object_out parameter specifies a location at which a handle is returned to the user object. In at least one embodiment, the "ptr" parameter specifies a pointer to pass to a destruction function (e.g., destructor). In at least one embodiment, the destroy parameter indicates a callback to release one or more computing resources when the one or more computing resources are no longer in use. In at least one embodiment, the initialRefcount parameter specifies a value of an initial reference count with which to create the object, the initial references belonging to a calling thread. In at least one embodiment, the "flags" parameter specifies one or more flags that relate to a value that is a signal to a function or process (e.g., an API function) that has one or more properties of the Function or process determined. In at least one embodiment, the flags for the User Object Create API include a flag called "UserObjectNoDestructorSync" that indicates that the destruction callback cannot be awaited by an API.
In mindestens einer Ausführungsform führen ein oder mehrere Systeme die User Object Create API durch, indem sie mindestens das Benutzerobjekt erzeugen, das mindestens eine oder mehrere Funktionen (z. B. einen Destruktor) und einen Wert, der eine Anzahl von Referenzen angibt, auch als eine Referenzanzahl bezeichnet, codiert oder anderweitig angibt. In mindestens einer Ausführungsform enthält eine Antwort auf den User Object Create API-Aufruf einen Status. In mindestens einer Ausführungsform wird folgend auf den User Object Create API-Aufruf, der die Erzeugung des Benutzerobjekts anzeigt, das Benutzerobjekt erzeugt und ein Handle zu dem Benutzerobjekt an einem durch den Parameter „object_out“ spezifizierten Ort zurückgegeben. In mindestens einer Ausführungsform wird der Status im Ansprechen auf den User Object Create API-Aufruf zurückgegeben, um eine Statusanzeige des User Object Create API-Aufrufs anzuzeigen. In mindestens einer Ausführungsform zeigt die Statusanzeige an, ob eine oder mehrere Operationen der User Object Create API erfolgreich sind, fehlgeschlagen sind oder ob andere Fehler aufgetreten sind.In at least one embodiment, one or more systems perform the User Object Create API by creating at least the user object that includes at least one or more functions (e.g., a destructor) and a value indicating a number of references, also known as designates, encodes or otherwise indicates a reference number. In at least one embodiment, a response to the User Object Create API call includes status. In at least one embodiment, following the User Object Create API call indicating creation of the user object, the user object is created and a handle to the user object is returned at a location specified by the object_out parameter. In at least one embodiment, the status is returned in response to the User Object Create API call to display a status indicator of the User Object Create API call. In at least one embodiment, the status indicator indicates whether one or more User Object Create API operations succeeded, failed, or other errors occurred.
In mindestens einer Ausführungsform umfassen Parameter für den User Object Retain API-Aufruf „object“ und „count“ und können weitere Parameter beinhalten, die Aspekte des Benutzerobjekts weiter definieren. In mindestens einer Ausführungsform bezeichnet der Parameter „object“ das Benutzerobjekt. In mindestens einer Ausführungsform gibt der Parameter „count“ die Anzahl der zu haltenden Referenzen an. In mindestens einer Ausführungsform führen ein oder mehrere Systeme die User Object Retain API durch, indem sie eine Anzahl von Referenzen, die dem Benutzerobjekt zugeordnet sind, mindestens erhöhen oder anderweitig inkrementieren (z. B. um die angegebene Anzahl von zu haltenden Referenzen). In mindestens einer Ausführungsform enthält eine Antwort auf den User Object Retain API-Aufruf einen Status. In mindestens einer Ausführungsform wird folgend auf den User Object Retain API-Aufruf die durch den Parameter „object“ angegebene Referenzanzahl des Benutzerobjekts um einen durch den Parameter „count“ spezifizierten Wert inkrementiert. In mindestens einer Ausführungsform wird der Status im Ansprechen auf den User Object Retain API-Aufruf zurückgegeben, um eine Statusanzeige des User Object Retain API-Aufrufs anzuzeigen. In mindestens einer Ausführungsform zeigt die Statusanzeige an, ob eine oder mehrere Operationen der User Object Retain API erfolgreich sind, fehlgeschlagen sind oder ob andere Fehler aufgetreten sind.In at least one embodiment, parameters for the User Object Retain API call include "object" and "count" and may include other parameters that further define aspects of the user object. In at least one embodiment, the “object” parameter denotes the user object. In at least one embodiment, the “count” parameter indicates the number of references to keep. In at least one embodiment, one or more systems perform the User Object Retain API by at least increasing or otherwise incrementing a number of references associated with the user object (e.g., by the specified number of references to be retained). In at least one embodiment, a response to the User Object Retain API call includes status. In at least one embodiment, following the User Object Retain API call, the reference count of the user object specified by the "object" parameter is incremented by a value specified by the "count" parameter. In at least one embodiment, the status is returned in response to the User Object Retain API call to display a status indicator of the User Object Retain API call. In at least one embodiment, the status indicator indicates whether one or more User Object Retain API operations succeeded, failed, or other errors occurred.
In mindestens einer Ausführungsform führt eine Graph Retain User Object API einen oder mehrere Prozesse der User Object Retain API durch. In mindestens einer Ausführungsform kann die User Object Retain API verwendet werden, um einen oder mehrere Prozesse der Graph Retain User Object API durchzuführen. In mindestens einer Ausführungsform wird die Graph Retain User Object API verwendet, um eine Referenz auf das Benutzerobjekt aus dem Graphen zu behalten und/oder das Benutzerobjekt einem oder mehreren Graphen zuzuordnen, wobei die Parameter für den Graph Retain User Object API-Aufruf „graph“ umfassen, der den Graphen angibt, dem die Referenz zuzuordnen ist, „object“, das das Benutzerobjekt angibt, für das die Referenz beizubehalten ist, „count“, das eine Anzahl von Referenzen angibt, die dem Graphen hinzuzufügen sind, und „flags“, das verschiedene Flags angibt, wie z. B. ein „GraphUserObjectMove“-Flag, das Referenzen von dem aufrufenden Thread transferiert (z. B. die Zuordnung des Benutzerobjekts und des Graphen anzeigt).In at least one embodiment, a Graph Retain User Object API performs one or more processes of the User Object Retain API. In at least one embodiment, the User Object Retain API may be used to perform one or more processes of the Graph Retain User Object API. In at least one embodiment, the Graph Retain User Object API is used to create a retain reference to the user object from the graph and/or associate the user object with one or more graphs, the parameters for the Graph Retain User Object API call including "graph" specifying the graph to which the reference is to be associated, "object " which specifies the user object for which the reference is to be retained, "count" which specifies a number of references to add to the graph, and "flags" which specifies various flags such as For example, a “GraphUserObjectMove” flag that transfers references from the calling thread (e.g. indicates the mapping of the user object and the graph).
In mindestens einer Ausführungsform umfassen Parameter für den User Object Release API-Aufruf „object“, „count“ und können weitere Parameter beinhalten, die Aspekte des Benutzerobjekts weiter definieren. In mindestens einer Ausführungsform gibt der Parameter „object“ das Benutzerobjekt an. In mindestens einer Ausführungsform gibt der Parameter „count“ eine Anzahl freizugebender Referenzen an. In mindestens einer Ausführungsform führen ein oder mehrere Systeme die U-ser Object Release API durch, indem sie eine Anzahl von Referenzen, die dem Benutzerobjekt zugeordnet sind, mindestens verringern oder auf andere Weise dekrementieren (z. B. um die angegebene Anzahl von freizugebenden Referenzen). In mindestens einer Ausführungsform enthält eine Antwort auf den User Object Release API-Aufruf einen Status. In mindestens einer Ausführungsform wird folgend auf den User Object Release API-Aufruf die durch den Parameter „object“ angegebene Referenzanzahl des Benutzerobjekts um einen durch den Parameter „count“ angegebenen Wert verringert. In mindestens einer Ausführungsform wird der Status im Ansprechen auf den User Object Release API-Aufruf zurückgegeben, um eine Statusanzeige des User Object Release API-Aufrufs anzuzeigen. In mindestens einer Ausführungsform zeigt die Statusanzeige an, ob eine oder mehrere Operationen der User Object Release API erfolgreich sind, fehlgeschlagen sind oder ob andere Fehler aufgetreten sind.In at least one embodiment, parameters for the User Object Release API call include "object", "count", and may include other parameters that further define aspects of the user object. In at least one embodiment, the object parameter specifies the user object. In at least one embodiment, the count parameter indicates a number of references to be released. In at least one embodiment, one or more systems perform the User Object Release API by at least reducing or otherwise decrementing a number of references associated with the user object (e.g., by the specified number of references to be released ). In at least one embodiment, a response to the User Object Release API call includes status. In at least one embodiment, following the User Object Release API call, the reference count of the user object specified by the "object" parameter is reduced by a value specified by the "count" parameter. In at least one embodiment, the status is returned in response to the User Object Release API call to display a status indicator of the User Object Release API call. In at least one embodiment, the status indicator indicates whether one or more operations of the User Object Release API succeeded, failed, or other errors occurred.
In mindestens einer Ausführungsform führt eine Graph Release User Object API einen oder mehrere Prozesse der User Object Release API durch. In mindestens einer Ausführungsform kann die User Object Release API verwendet werden, um einen oder mehrere Prozesse der Graph Release User Object API durchzuführen. In mindestens einer Ausführungsform wird die Graph Release User Object API verwendet, um die Benutzerobjektreferenz aus dem Graphen freizugeben, wobei die Parameter für den Graph Release User Object API-Aufruf „graph“, das den Graphen angibt, der die Referenz freigeben wird, „object“, das das Benutzerobjekt angibt, für das die Referenz freizugeben ist, und „count“, das eine Anzahl von freizugebenden Referenzen angibt, beinhalten.In at least one embodiment, a Graph Release User Object API performs one or more processes of the User Object Release API. In at least one embodiment, the User Object Release API may be used to perform one or more processes of the Graph Release User Object API. In at least one embodiment, the Graph Release User Object API is used to release the user object reference from the graph, where the parameters for the Graph Release User Object API call "graph" that specifies the graph that will release the reference are "object ', which specifies the user object to which the reference is to be released, and 'count', which specifies a number of references to be released.
In mindestens einer Ausführungsform wird der Prozess 600 von einem oder mehreren Systemen wie beispielsweise diejenigen, die in der vorliegenden Offenbarung beschrieben sind, durchgeführt. In mindestens einer Ausführungsform wird der Prozess 600 von einem System mit einem oder mehreren Programmiermodellen durchgeführt. In mindestens einer Ausführungsform werden ein oder mehrere Prozesse des Prozesses 600 in jeder geeigneten Reihenfolge, einschließlich sequenziell, parallel und/oder Variationen davon, und unter Verwendung einer geeigneten Verarbeitungseinheit, wie beispielsweise einer CPU, GPU, PPU und/oder Variationen davon, durchgeführt.In at least one embodiment,
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 600 durchführt, ausführbaren Code, um mindestens Code zu erhalten 602, der mindestens eine API angibt, um eine oder mehrere Datenstrukturen zu erzeugen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm verwendet werden. In mindestens einer Ausführungsform ist die API eine User Object Create API, wie sie in Verbindung mit
In mindestens einer Ausführungsform ist das Computerprogramm, wie hierin beschrieben, ein beliebiges geeignetes Programm, das von einer beliebigen geeigneten Verarbeitungseinheit, z. B. einer oder mehreren CPUs, GPUs, PPUs, GPGPUs und/oder Variationen davon, ausführbar ist. In mindestens einer Ausführungsform entspricht das Computerprogramm, wie hierin beschrieben, einer oder mehreren Graph-Datenstrukturen, Graph-Code und/oder Variationen davon. In mindestens einer Ausführungsform ist der Code unter Verwendung einer beliebigen geeigneten Programmiersprache und in Verbindung mit einem beliebigen geeigneten Programmiermodell, wie z. B. CUDA, HIP, oneAPI und/oder Variationen davon, geschrieben.In at least one embodiment, the computer program, as described herein, is any suitable program executed by any suitable processing unit, e.g. B. one or more CPUs, GPUs, PPUs, GPGPUs and / or variations thereof. In at least one embodiment, the computer program, as described herein, corresponds to one or more graph data structures, graph code, and/or variations thereof. In at least one embodiment, the code is written using any suitable programming language and in conjunction with any suitable programming model, such as. B. CUDA, HIP, oneAPI and/or variations thereof.
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 600 ausführt, ausführbaren Code, um mindestens die API durchzuführen 604, um eine oder mehrere Datenstrukturen zu erzeugen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind. In mindestens einer Ausführungsform führt das System die API als Teil der Ausführung des Codes durch, der die API angibt. In mindestens einer Ausführungsform erzeugt das System die eine oder die mehreren Datenstrukturen, die mindestens die eine oder die mehreren Funktionen (z. B. Destruktoren) und einen Wert codieren oder anderweitig angeben, der eine Anzahl von Referenzen angibt, die dem Computerprogramm zugeordnet sind und auch als eine Referenzanzahl bezeichnet werden. In mindestens einer Ausführungsform überwacht das System die Verwendung der Informationen durch das Computerprogramm, indem es mindestens die Anzahl der Referenzen auf die Informationen überwacht, die von dem Computerprogramm verwendet werden. In mindestens einer Ausführungsform verknüpft das System die eine oder mehreren Datenstrukturen mit einer oder mehreren Graph-Datenstrukturen, um die Verwendung von Informationen durch die eine oder mehreren Graph-Datenstrukturen zu überwachen. In mindestens einer Ausführungsform veranlasst das System die Ausführung der einen oder mehreren Funktionen, wenn der Wert Null erreicht.In at least one embodiment, the system that executes at least a portion of the
In mindestens einer Ausführungsform wird der Prozess 700 von einem oder mehreren Systemen, wie diejenigen, die in der vorliegenden Offenbarung beschrieben sind, durchgeführt. In mindestens einer Ausführungsform wird der Prozess 700 von einem System mit einem oder mehreren Programmiermodellen durchgeführt. In mindestens einer Ausführungsform werden ein oder mehrere Prozesse des Prozesses 700 in jeder geeigneten Reihenfolge, einschließlich sequenziell, parallel und/oder Variationen davon, und unter Verwendung einer geeigneten Verarbeitungseinheit, wie beispielsweise einer CPU, GPU, PPU und/oder Variationen davon, durchgeführt.In at least one embodiment,
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 700 durchführt, ausführbaren Code, um mindestens Code zu erhalten 702, der mindestens eine API zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm gesteigert wird, angibt, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen verwendet werden. In mindestens einer Ausführungsform ist die API eine User Object Retain API oder Graph Retain User Object API, wie diejenigen, die in Verbindung mit
In mindestens einer Ausführungsform ist das Computerprogramm ein beliebiges geeignetes Programm, das von einer beliebigen geeigneten Verarbeitungseinheit, wie beispielsweise einer oder mehreren CPUs, GPUs, PPUs, GPGPUs und/oder Varianten davon, ausführbar ist. In mindestens einer Ausführungsform ist das Computerprogramm der einen oder den mehreren Graphen-Datenstrukturen zugeordnet, wobei das System die API durchführt, indem es zumindest die eine oder die mehreren Datenstrukturen der einen oder den mehreren Graph-Datenstrukturen zuordnet, um die Verwendung von Informationen durch die eine oder die mehreren Graph-Datenstrukturen zu verfolgen. In mindestens einer Ausführungsform ist der Code unter Verwendung einer beliebigen geeigneten Programmiersprache und in Verbindung mit einem beliebigen geeigneten Programmiermodell, wie z. B. CUDA, HIP, oneAPI und/oder Varianten davon, geschrieben.In at least one embodiment, the computer program is any suitable program executable by any suitable processing unit, such as one or more CPUs, GPUs, PPUs, GPGPUs, and/or variants thereof. In at least one embodiment, the computer program is associated with the one or more graph data structures, wherein the system performs the API by associating at least the one or more data structures with the one or more graph data structures to facilitate the use of information by the to trace one or more graph data structures. In at least one embodiment, the code is written using any suitable programming language and in conjunction with any suitable programming model, such as. B. CUDA, HIP, oneAPI and/or variants thereof.
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 700 ausführt, ausführbaren Code, um mindestens die API durchzuführen 704, um zu veranlassen, dass die Verwendung von Informationen durch das Computerprogramm gesteigert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen verwendet werden. In mindestens einer Ausführungsform führt das System die API als Teil der Ausführung des Codes durch, der die API angibt. In mindestens einer Ausführungsform führt das System die API durch, indem es zumindest einen Wert der einen oder der mehreren Datenstrukturen (z. B. Benutzerobjekt), die eine Anzahl von Referenzen anzeigen, die dem Computerprogramm zugeordnet sind, um die Anzahl von Referenzen erhöht oder anderweitig erhöht, die durch die Parameterwerte der API angezeigt werden. In mindestens einer Ausführungsform veranlasst das System, dass die Verwendung der Informationen durch das Computerprogramm gesteigert wird, zumindest teilweise auf der Grundlage der einen oder mehreren Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden, indem zumindest die API durchgeführt wird, um eine gesteigerte Verwendung von Informationen (z. B. mehr Referenzen auf eine Computerressource, wie beispielsweise das Objekt) durch das Computerprogramm anzuzeigen.In at least one embodiment, the system that executes at least a portion of the
In mindestens einer Ausführungsform wird der Prozess 800 von einem oder mehreren Systemen, wie beispielsweise denjenigen, die in der vorliegenden Offenbarung beschrieben sind, durchgeführt. In mindestens einer Ausführungsform wird der Prozess 800 von einem System eines oder mehrerer Programmiermodelle durchgeführt. In mindestens einer Ausführungsform werden ein oder mehrere Prozesse des Prozesses 800 in jeder geeigneten Reihenfolge, einschließlich sequenziell, parallel und/oder Variationen davon, und unter Verwendung jeder geeigneten Verarbeitungseinheit, wie beispielsweise einer CPU, GPU, PPU und/oder Variationen davon, durchgeführt.In at least one embodiment,
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 800 durchführt, ausführbaren Code, um mindestens Code zu erhalten 802, der mindestens eine API angibt, um zu veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen verwendet werden. In mindestens einer Ausführungsform ist die API eine User Object Release API oder eine Graph Release User Object API, wie beispielsweise diejenigen, die in Verbindung mit
In mindestens einer Ausführungsform ist das Computerprogramm ein beliebiges geeignetes Programm, das von einer beliebigen geeigneten Verarbeitungseinheit, wie beispielsweise einer oder mehreren CPUs, GPUs, PPUs, GPGPUs und/oder Varianten davon, ausführbar sind. In mindestens einer Ausführungsform ist das Computerprogramm der einen oder den mehreren Graph-Datenstrukturen zugeordnet. In mindestens einer Ausführungsform ist der Code unter Verwendung einer beliebigen geeigneten Programmiersprache und in Verbindung mit einem beliebigen geeigneten Programmiermodell, wie beispielsweise CUDA, HIP, oneAPI und/oder Variationen davon, geschrieben.In at least one embodiment, the computer program is any suitable program executable by any suitable processing unit, such as one or more CPUs, GPUs, PPUs, GPGPUs, and/or variants thereof. In at least one embodiment, the computer program is associated with the one or more graph data structures. In at least one embodiment, the code is written using any suitable programming language and in conjunction with any suitable programming model, such as CUDA, HIP, oneAPI, and/or variations thereof.
In mindestens einer Ausführungsform enthält das System, das mindestens einen Teil des Prozesses 800 ausführt, ausführbaren Code, um mindestens die API auszuführen 804, um zu veranlassen, dass die Verwendung von Informationen durch das Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen verwendet werden. In mindestens einer Ausführungsform führt das System die API als Teil der Ausführung des Codes durch, der die API angibt. In mindestens einer Ausführungsform führt das System die API durch, indem es einen Wert der einen oder der mehreren Datenstrukturen (z. B. Benutzerobjekt), der eine Anzahl von Referenzen angibt, die dem Computerprogramm zugeordnet sind, um die Anzahl von Referenzen auf die Freigabe, die durch die Parameterwerte der API angezeigt werden, reduziert oder anderweitig verringert. In mindestens einer Ausführungsform veranlasst das System, dass die Verwendung der Informationen durch das Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage der einen oder mehreren Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden, indem zumindest die API ausgeführt wird, um eine Reduzierung der Verwendung von Informationen (z. B. weniger Referenzen auf eine Computerressource) durch das Computerprogramm anzuzeigen. In mindestens einer Ausführungsform ruft das System, sobald der Wert, der die Anzahl der Referenzen anzeigt, Null erreicht, eine oder mehrere Funktionen (z. B. Destruktoren) auf, um die von dem Computerprogramm verwendeten Informationen (z. B. eine Computerressource, wie beispielsweise das Objekt) zu zerstören oder anderweitig zu löschen.In at least one embodiment, the system that executes at least a portion of the
In der vorangehenden und der nachfolgenden Beschreibung werden zahlreiche spezifische Details aufgeführt, um ein gründlicheres Verständnis mindestens einer Ausführungsform zu ermöglichen. Für den Fachmann ist jedoch ersichtlich, dass die erfindungsgemäßen Konzepte auch ohne eines oder mehrere dieser spezifischen Details in die Praxis umgesetzt werden können.Numerous specific details are set forth in the foregoing and subsequent descriptions to provide a more thorough understanding of at least one embodiment. However, it will be apparent to those skilled in the art that the concepts according to the invention can also be put into practice without one or more of these specific details.
RechenzentrumData center
In mindestens einer Ausführungsform, wie in
In mindestens einer Ausführungsform können die gruppierten Rechenressourcen 914 separate Gruppierungen von Knoten-C.R.s beinhalten, die in einem oder mehreren Racks (nicht dargestellt) untergebracht sind, oder in vielen Racks, die in Rechenzentren an verschiedenen geografischen Positionen untergebracht sind (ebenfalls nicht dargestellt). Separate Gruppierungen von Knoten-C.R.s innerhalb der gruppierten Rechenressourcen 914 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherressourcen beinhalten, die zur Unterstützung einer oder mehrerer Arbeitslasten konfiguriert oder zugewiesen werden können. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s mit CPUs oder Prozessoren in einem oder mehreren Racks gruppiert sein, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks auch eine beliebige Anzahl von Leistungs- bzw. Stromversorgungsmodulen, Kühlmodulen und Netzwerk-Switches in beliebiger Kombination beinhalten.In at least one embodiment, the grouped
In mindestens einer Ausführungsform kann der Ressourcenorchestrator 912 einen oder mehrere Knoten-CRs 916(1)-916(N) und/oder gruppierte Rechenressourcen 914 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 912 eine Software-Design-Infrastruktur („SDI“)-Verwaltungseinheit für das Rechenzentrum 900 beinhalten. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 912 Hardware, Software oder eine Kombination davon umfassen.In at least one embodiment,
In mindestens einer Ausführungsform, wie in
In mindestens einer Ausführungsform kann die in der Softwareschicht 930 enthaltene Software 952 Software enthalten, die von mindestens Teilen der Knoten C.R.s 916(1)-916(N), den gruppierten Rechenressourcen 914 und/oder dem verteilten Dateisystem 938 der Frameworkschicht 920 verwendet wird. Eine oder mehrere Arten von Software können Internet-Webseiten-Suchsoftware, E-Mail-Virenscan-Software, Datenbanksoftware und Software für Stream ing-Videoinhalte umfassen, ohne darauf beschränkt zu sein.In at least one embodiment, the
In mindestens einer Ausführungsform kann (können) die in der Anwendungsschicht 940 enthaltene(n) Anwendung(en) 942 eine oder mehrere Arten von Anwendungen beinhalten, die von mindestens Teilen der Knoten C.R.s 916(1)-916(N), den gruppierten Rechenressourcen 914 und/oder dem verteilten Dateisystem 938 der Rahmenschicht 920 verwendet werden. Mindestens eine oder mehrere Arten von Anwendungen können, ohne Beschränkung darauf, CUDA-Anwendungen beinhalten.In at least one embodiment, the application(s) 942 included in the
In mindestens einer Ausführungsform können der Konfigurationsmanager 934, der Ressourcenverwalter 936 und der Ressourcenorchestrator 912 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen implementieren, die auf einer beliebigen Menge und Art von Daten basieren, die auf jede technisch mögliche Weise erfasst werden. In mindestens einer Ausführungsform können selbstmodifizierende Aktionen einen Rechenzentrumsbetreiber des Rechenzentrums 900 davon entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht leistende Teile eines Rechenzentrums zu vermeiden.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
Computer-basierte SystemeComputer based systems
Die folgenden Figuren zeigen, ohne Beschränkung darauf, beispielhafte computer-basierte bzw. computergestützte Systeme, die zur Implementierung mindestens einer Ausführungsform verwendet werden können.The following figures show, but are not limited to, exemplary computer-based systems that may be used to implement at least one embodiment.
In mindestens einer Ausführungsform kann das Verarbeitungssystem 1000 eine serverbasierte Spielplattform, eine Spielkonsole, eine Medienkonsole, eine mobile Spielkonsole, eine Handheld-Spielkonsole oder eine Online-Spielkonsole beinhalten oder in diese integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 1000 ein Mobiltelefon, ein Smartphone, ein Tablet-Computergerät oder ein mobiles Internetgerät. In mindestens einer Ausführungsform kann das Verarbeitungssystem 1000 auch ein Wearable-Gerät, wie z.B. ein Smart Watch-Wearable-Gerät, eine intelligente Brille, ein Augmented-Reality-Gerät oder ein Virtual-Reality-Gerät beinhalten, mit diesem gekoppelt oder in dieses integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 1000 ein Fernseh- oder Set-Top-Box-Gerät mit einem oder mehreren Prozessoren 1002 und einer grafischen Oberfläche, die von einem oder mehreren Grafikprozessoren 1008 erzeugt wird.In at least one embodiment, the
In mindestens einer Ausführungsform enthalten ein oder mehrere Prozessoren 1002 jeweils einen oder mehrere Prozessorkerne 1007 zur Verarbeitung von Anweisungen, die bei ihrer Ausführung Operationen für System- und Anwendersoftware durchführen. In mindestens einer Ausführungsform ist jeder von einem oder mehreren Prozessorkernen 1007 so konfiguriert, dass er einen bestimmten Befehlssatz 1009 verarbeitet. In mindestens einer Ausführungsform kann der Befehlssatz 1009 Complex Instruction Set Computing („CISC“), Reduced Instruction Set Computing („RISC“) oder das Rechnen über Very Long Instruction Word („VLIW”) erleichtern. In mindestens einer Ausführungsform können die Prozessorkerne 1007 jeweils einen anderen Befehlssatz 1009 verarbeiten, der Anweisungen enthalten kann, um die Emulation anderer Befehlssätze zu erleichtern. In mindestens einer Ausführungsform kann der Prozessorkern 1007 auch andere Verarbeitungsvorrichtungen enthalten, wie z.B. einen digitalen Signalprozessor („DSP“).In at least one embodiment, one or
In mindestens einer Ausführungsform beinhaltet der Prozessor 1002 einen Cachespeicher („Cache“) 1004. In mindestens einer Ausführungsform kann der Prozessor 1002 einen einzigen internen Cache oder mehrere Ebenen von internem Cache haben. In mindestens einer Ausführungsform wird der Cachespeicher von verschiedenen Komponenten des Prozessors 1002 gemeinsam genutzt. In mindestens einer Ausführungsform verwendet der Prozessor 1002 auch einen externen Cache (z.B. einen Level 3 („L3“)-Cache oder Last Level Cache („LLC“)) (nicht dargestellt), der von den Prozessorkernen 1007 unter Verwendung bekannter Cache-Kohärenztechniken gemeinsam genutzt werden kann. In mindestens einer Ausführungsform ist zusätzlich eine Registerdatei 1006 in dem Prozessor 1002 enthalten, die verschiedene Arten von Registern zum Speichern unterschiedlicher Datentypen (z.B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister) enthalten kann. In mindestens einer Ausführungsform kann die Registerdatei 1006 Universalregister oder andere Register enthalten.In at least one embodiment,
In mindestens einer Ausführungsform ist/sind ein oder mehrere Prozessor(en) 1002 mit einem oder mehreren Schnittstellenbus(en) 1010 gekoppelt, um Kommunikationssignale wie Adress-, Daten- oder Steuersignale zwischen dem Prozessor 1002 und anderen Komponenten in dem Verarbeitungssystem 1000 zu übertragen. In mindestens einer Ausführungsform kann der Schnittstellenbus 1010 ein Prozessorbus sein, wie z.B. eine Version eines Direct Media Interface („DMI“)-Busses. In mindestens einer Ausführungsform ist der Schnittstellenbus 1010 nicht auf einen DMI-Bus beschränkt und kann einen oder mehrere Peripheral Component Interconnect-Busse (z.B. „PCI“, PCI Express („PCIe“)), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In mindestens einer Ausführungsform beinhalten der/die Prozessor(en) 1002 einen integrierten Speichercontroller 1016 und einen Plattformcontroller-Hub 1030. In mindestens einer Ausführungsform erleichtert der Speichercontroller 1016 die Kommunikation zwischen einem Speichervorrichtung und anderen Komponenten des Verarbeitungssystems 1000, während der Plattformcontroller-Hub („PCH“) 1030 Verbindungen zu Eingabe/Ausgabe-Geräten („E/A“) über einen lokalen E/A-Bus bereitstellt.In at least one embodiment, one or
In mindestens einer Ausführungsform kann die Speichervorrichtung 1020 eine dynamische Direktzugriffsspeicher („DRAM“)-Vorrichtung, eine statische Direktzugriffsspeicher („SRAM“)-Vorrichtung, eine Flash-Speicher-Vorrichtung, eine Phasenwechsel-Speicher-Vorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessorspeicher zu dienen. In mindestens einer Ausführungsform kann die Speichervorrichtung 1020 als Systemspeicher für das Verarbeitungssystem 1000 arbeiten, um Daten 1022 und Anweisungen 1021 zur Verwendung zu speichern, wenn ein oder mehrere Prozessoren 1002 eine Anwendung oder einen Prozess ausführen. In mindestens einer Ausführungsform koppelt der Speichercontroller 1016 auch mit einem optionalen externen Grafikprozessor 1012, der mit einem oder mehreren Grafikprozessoren 1008 in den Prozessoren 1002 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Anzeigevorrichtung 1011 mit dem/den Prozessor(en) 1002 verbunden sein. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 1011 eine oder mehrere interne Anzeigevorrichtungen, wie in einem mobilen elektronischen Gerät oder einem Laptop, oder eine externe Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z.B. DisplayPort usw.) angeschlossen ist, beinhalten. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 1011 eine kopfmontierte Anzeige („HMD“), wie beispielsweise eine stereoskopische Anzeigevorrichtung zur Verwendung in Anwendungen der virtuellen Realität („VR“) oder der erweiterten Realität („AR“), beinhalten.In at least one embodiment,
In mindestens einer Ausführungsform ermöglicht der Plattformcontroller-Hub 1030 die Verbindung von Peripheriegeräten mit der Speichervorrichtung 1020 und dem Prozessor 1002 über einen Hochgeschwindigkeits-E/A-Bus. In mindestens einer Ausführungsform beinhalten die E/A-Peripheriegeräte, ohne darauf beschränkt zu sein, einen Audiocontroller 1046, einen Netzwerkcontroller 1034, eine Firmware-Schnittstelle 1028, einen drahtlosen Transceiver 1026, Berührungssensoren 1025 und eine Datenspeichervorrichtung 1024 (z.B. ein Festplattenlaufwerk, einen Flash-Speicher usw.). In mindestens einer Ausführungsform kann die Datenspeichervorrichtung 1024 über eine Speicherschnittstelle (z.B. SATA) oder über einen Peripheriebus, wie PCI oder PCIe, verbunden sein. In mindestens einer Ausführungsform können die Berührungssensoren 1025 Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. In mindestens einer Ausführungsform kann der drahtlose Transceiver 1026 ein Wi-Fi-Transceiver, ein Bluetooth-Transceiver oder ein Mobilfunk-Transceiver wie beispielsweise ein 3G-, 4G- oder Long Term Evolution („LTE“)-Transceiver sein. In mindestens einer Ausführungsform ermöglicht die Firmware-Schnittstelle 1028 eine Kommunikation mit System-Firmware und kann z.B. eine einheitliche erweiterbare Firmware-Schnittstelle („UEFI“) sein. In mindestens einer Ausführungsform kann der Netzwerkcontroller 1034 eine Netzwerkverbindung zu einem kabelgebundenen Netzwerk ermöglichen. In mindestens einer Ausführungsform koppelt ein Hochleistungs-Netzwerkcontroller (nicht dargestellt) mit dem Schnittstellenbus 1010. In mindestens einer Ausführungsform ist der Audiocontroller 1046 ein Mehrkanal-High-Definition-Audiocontroller. In mindestens einer Ausführungsform enthält das Verarbeitungssystem 1000 einen optionalen Legacy-E/A-Controller 1040 zur Kopplung von Legacy-Geräten (z.B. Personal System 2 („PS/2“)) mit dem Verarbeitungssystem 1000. In mindestens einer Ausführungsform kann der Plattformcontroller-Hub 1030 auch mit einem oder mehreren Universal Serial Bus („USB“)-Controllern 1042 verbinden, die Eingabevorrichtungen, wie z.B. Tastatur- und Mauskombinationen 1043, eine Kamera 1044 oder andere USB-Eingabevorrichtungen verbinden.In at least one embodiment, the
In mindestens einer Ausführungsform kann eine Instanz des Speichercontrollers 1016 und des Plattformcontroller-Hubs 1030 in einen diskreten externen Grafikprozessor, wie beispielsweise den externen Grafikprozessor 1012, integriert sein. In mindestens einer Ausführungsform können der Plattformcontroller-Hub 1030 und/oder der Speichercontroller 1016 extern zu einem oder mehreren Prozessor(en) 1002 sein. In mindestens einer Ausführungsform kann das Verarbeitungssystem 1000 beispielsweise einen externen Speichercontroller 1016 und einen Plattformcontroller-Hub 1030 enthalten, der als ein Speichercontroller-Hub und Peripheriecontroller-Hub innerhalb eines System-Chipsatzes konfiguriert sein kann, der mit dem/den Prozessor(en) 1002 in Verbindung steht.In at least one embodiment, an instance of the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann das Computersystem 1100 in anderen Vorrichtungen wie Handheld-Geräten und eingebetteten Anwendungen verwendet werden. Einige Beispiele für Handheld-Geräte sind Mobiltelefone, Internetprotokollgeräte, Digitalkameras, persönliche digitale Assistenten („PDAs“) und Handheld-PCs. In mindestens einer Ausführungsform können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor (DSP), ein SoC, Netzwerkcomputer („NetPCs“), Set-Top-Boxen, Netzwerk-Hubs, Wide-Area-Network („WAN“)-Switches oder jedes andere System umfassen, das eine oder mehrere Anweisungen ausführen kann.In at least one embodiment,
In mindestens einer Ausführungsform kann das Computersystem 1100, ohne Beschränkung darauf, einen Prozessor 1102 enthalten, der, ohne Beschränkung darauf, eine oder mehrere Ausführungseinheiten 1108 enthalten kann, die so konfiguriert sein können, dass sie ein Compute Unified Device Architecture („CUDA“)-Programm (CUDA® wird von der NVIDIA Corporation in Santa Clara, CA, entwickelt) ausführen. In mindestens einer Ausführungsform ist ein CUDA-Programm mindestens ein Teil einer Softwareanwendung, die in einer CUDA-Programmiersprache geschrieben ist. In mindestens einer Ausführungsform ist das Computersystem 1100 ein Einzelprozessor-Desktop- oder ein Serversystem. In mindestens einer Ausführungsform kann das Computersystem 1100 ein Multiprozessorsystem sein. In mindestens einer Ausführungsform kann der Prozessor 1102, ohne Beschränkung darauf, einen CISC-Mikroprozessor, einen RISC-Mikroprozessor, einen VLIW-Mikroprozessor, einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder eine beliebige andere Prozessoreinheit, wie z.B. einen digitalen Signalprozessor, beinhalten. In mindestens einer Ausführungsform kann der Prozessor 1102 mit einem Prozessorbus 1110 gekoppelt sein, der Datensignale zwischen dem Prozessor 1102 und anderen Komponenten in dem Computersystem 1100 übertragen kann.In at least one embodiment,
In mindestens einer Ausführungsform kann der Prozessor 1102, ohne Beschränkung darauf, einen internen Level 1 („L1")-Cachespeicher („Cache“) 1104 enthalten. In mindestens einer Ausführungsform kann der Prozessor 1102 einen einzigen internen Cache oder mehrere Ebenen von internem Cache haben. In mindestens einer Ausführungsform kann sich der Cachespeicher außerhalb des Prozessors 1102 befinden. In mindestens einer Ausführungsform kann der Prozessor 1102 auch eine Kombination aus sowohl internen als auch externen Caches enthalten. In mindestens einer Ausführungsform kann eine Registerdatei 1106 verschiedene Arten von Daten in verschiedenen Registern, einschließlich, ohne Beschränkung darauf, Ganzzahlregister, Gleitkommaregister, Statusregister und Befehlszeigerregister, speichern.In at least one embodiment,
In mindestens einer Ausführungsform befindet sich die Ausführungseinheit 1108, einschließlich, ohne Beschränkung darauf, von Logik zur Durchführung von Ganzzahl- und Gleitkommaoperationen, ebenfalls in dem Prozessor 1102. Der Prozessor 1102 kann auch einen Nur-Lese-Speicher („ROM“) für Mikrocode („ucode“) enthalten, der Mikrocode für bestimmte Makrobefehle speichert. In mindestens einer Ausführungsform kann die Ausführungseinheit 1108 Logik zur Verarbeitung eines gepackten Befehlssatzes 1109 enthalten. In mindestens einer Ausführungsform können durch Aufnahme des gepackten Befehlssatzes 1109 in einen Befehlssatz eines Universalprozessors 1102 zusammen mit zugehörigen Schaltkreisen zur Ausführung von Anweisungen Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung gepackter Daten in einem Universalprozessor 1102 durchgeführt werden. In mindestens einer Ausführungsform können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite des Datenbusses eines Prozessors für die Ausführung von Operationen mit gepackten Daten genutzt wird, welches die Notwendigkeit eliminieren kann, kleinere Dateneinheiten über den Datenbus eines Prozessors zu übertragen, um eine oder mehrere Operationen auf bzw. mit einem Datenelement nach dem anderen durchzuführen.In at least one embodiment,
In mindestens einer Ausführungsform kann die Ausführungseinheit 1108 auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Arten von Logikschaltungen verwendet werden. In mindestens einer Ausführungsform kann das Computersystem 1100, ohne Beschränkung darauf, einen Speicher 1120 enthalten. In mindestens einer Ausführungsform kann der Speicher 1120 als eine DRAM-Vorrichtung, eine SRAM-Vorrichtung, eine Flash-Speicher-Vorrichtung oder eine andere Speichervorrichtung implementiert sein. Der Speicher 1120 kann Anweisung(en) 1119 und/oder Daten 1121 speichern, die durch Datensignale repräsentiert werden, die von dem Prozessor 1102 ausgeführt werden können.In at least one embodiment,
In mindestens einer Ausführungsform kann ein Systemlogikchip mit dem Prozessorbus 1110 und dem Speicher 1120 gekoppelt sein. In mindestens einer Ausführungsform kann der Systemlogikchip, ohne Beschränkung darauf, einen Speichercontroller-Hub („MCH“) 1116 enthalten, und kann der Prozessor 1102 mit dem MCH 1116 über den Prozessorbus 1110 kommunizieren. In mindestens einer Ausführungsform kann der MCH 1116 einen Speicherpfad 1118 mit hoher Bandbreite zu dem Speicher 1120 zur Befehls- und Datenspeicherung und zur Speicherung von Grafikbefehlen, Daten und Texturen bereitstellen. In mindestens einer Ausführungsform kann der MCH 1116 Datensignale zwischen dem Prozessor 1102, dem Speicher 1120 und anderen Komponenten in dem Computersystem 1100 leiten und Datensignale zwischen dem Prozessorbus 1110, dem Speicher 1120 und einer System-E/A 1122 überbrücken. In mindestens einer Ausführungsform kann der Systemlogikchip einen Grafik-Port zur Kopplung mit einem Grafikcontroller bereitstellen. In mindestens einer Ausführungsform kann der MCH 1116 über einen Speicherpfad 1118 mit hoher Bandbreite mit dem Speicher 1120 gekoppelt sein, und kann die Grafik-/ Videokarte 1112 über eine Accelerated Graphics Port („AGP“)-Verbindung bzw. Zwischenverbindung bzw. Interconnect 1114 mit dem MCH 1116 gekoppelt sein.In at least one embodiment, a system logic chip may be coupled to processor bus 1110 and
In mindestens einer Ausführungsform kann das Computersystem 1100 die System-E/A 1122 verwenden, der ein proprietärer Hub-Schnittstellenbus ist, um den MCH 1116 mit dem E/A-Controller-Hub („ICH“) 1130 zu koppeln. In mindestens einer Ausführungsform kann der ICH 1130 direkte Verbindungen zu einigen E/A-Geräten über einen lokalen E/A-Bus bereitstellen. In mindestens einer Ausführungsform kann der lokale E/A-Bus, ohne Beschränkung darauf, einen Hochgeschwindigkeits-E/A-Bus zur Verbindung von Peripheriegeräten mit dem Speicher 1120, einem Chipsatz und dem Prozessor 1102 umfassen. Beispiele können, ohne Beschränkung darauf, einen Audiocontroller 1129, einen Firmware-Hub („Flash-BIOS“) 1128, einen drahtlosen Transceiver 1126, einen Datenspeicher 1124, einen Legacy-E/A-Controller 1123, der eine Benutzereingabeschnittstelle 1125 und eine Tastaturschnittstelle enthält, einen seriellen Erweiterungs-Port 1127, wie z.B. ein USB, und einen Netzwerkcontroller 1134 beinhalten. Der Datenspeicher 1124 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Gerät, eine Flash-Speicher-Vorrichtung oder eine andere Massenspeichervorrichtung beinhalten.In at least one embodiment, the
In mindestens einer Ausführungsform veranschaulicht
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann das System 1200, ohne Beschränkung darauf, einen Prozessor 1210 enthalten, der mit einer beliebigen Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Geräten bzw. Vorrichtungen kommunikativ gekoppelt ist. In mindestens einer Ausführungsform ist der Prozessor 1210 unter Verwendung eines Busses oder einer Schnittstelle, wie z.B. ein I2C-Bus, ein System Management-Bus („SMBus“), ein Low Pin Count-Bus („LPC“), ein Serial Peripheral Interface („SPI“), ein High Definition Audio-Bus („HDA“), ein Serial Advance Technology Attachment-Bus („SATA“), ein USB-Bus (Versionen 1, 2, 3) oder ein Universal Asynchronous Receiver/Transmitter-Bus („UART“), gekoppelt. In mindestens einer Ausführungsform veranschaulicht
In mindestens einer Ausführungsform kann
In mindestens einer Ausführungsform können andere Komponenten über die vorstehend beschriebenen Komponenten kommunikativ mit dem Prozessor 1210 verbunden sein. In mindestens einer Ausführungsform können ein Beschleunigungsmesser 1241, ein Umgebungslichtsensor („ALS“) 1242, ein Kompass 1243 und ein Gyroskop 1244 kommunikativ mit dem Sensor-Hub 1240 gekoppelt sein. In mindestens einer Ausführungsform können ein Wärmesensor 1239, ein Lüfter 1237, eine Tastatur 1236 und ein Touchpad 1230 kommunikativ mit dem EC 1235 gekoppelt sein. In mindestens einer Ausführungsform können ein Lautsprecher 1263, ein Kopfhörer 1264 und ein Mikrofon („mic“) 1265 kommunikativ mit einer Audioeinheit („audio codec and dass d amp“) 1262 gekoppelt sein, die ihrerseits kommunikativ mit dem DSP 1260 gekoppelt sein kann. In mindestens einer Ausführungsform kann die Audioeinheit 1262 beispielsweise, und ohne Beschränkung darauf, einen Audio-Kodierer/-Dekodierer („codec“) und einen Verstärker der Klasse D beinhalten. In mindestens einer Ausführungsform kann eine SIM-Karte („SIM“) 1257 kommunikativ mit der WWAN-Einheit 1256 gekoppelt sein. In mindestens einer Ausführungsform können Komponenten wie beispielsweise die WLAN-Einheit 1250 und die Bluetooth-Einheit 1252 sowie die WWAN-Einheit 1256 in einem Next Generation Form Factor („NGFF“) implementiert sein.In at least one embodiment, other components may be communicatively coupled to
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform beinhaltet das Verarbeitungssubsystem 1401 einen oder mehrere Parallelprozessor(en) 1412, der/die über einen Bus oder eine andere Kommunikationsverbindung 1413 mit dem Speicher-Hub 1405 verbunden ist/sind. In mindestens einer Ausführungsform kann die Kommunikationsverbindung 1413 eine einer beliebigen Anzahl von standardbasierten Kommunikationsverbindungstechnologien oder -protokollen sein, wie z.B., aber nicht beschränkt auf, PCIe, oder kann eine herstellerspezifische Kommunikationsschnittstelle oder eine Kommunikationsstruktur bzw. ein Kommunikations-Fabric sein. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1412 ein rechnerisch fokussiertes Parallel- oder Vektor-Verarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern umfassen kann, wie z.B. einen Prozessor mit vielen integrierten Kernen. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1412 ein Grafikverarbeitungs-Subsystem, das Pixel an eine oder mehrere Anzeigevorrichtung(en) 1410A ausgeben kann, die über den E/A-Hub 1407 gekoppelt sind. In mindestens einer Ausführungsform können ein oder mehrere Parallelprozessor(en) 1412 auch einen Anzeigecontroller und eine Anzeigeschnittstelle (nicht dargestellt) enthalten, um eine direkte Verbindung zu einer oder mehreren Anzeigevorrichtung(en) 1410B zu ermöglichen.In at least one embodiment,
In mindestens einer Ausführungsform kann eine Systemspeichereinheit 1414 mit dem E/A-Hub 1407 verbunden sein, um einen Speichermechanismus für das Rechensystem 1400 bereitzustellen. In mindestens einer Ausführungsform kann ein E/A-Switch 1416 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, der Verbindungen zwischen dem E/A-Hub 1407 und anderen Komponenten ermöglicht, wie z.B. einem Netzwerkadapter 1418 und/oder einem drahtlosen Netzwerkadapter 1419, der in eine Plattform integriert sein kann, und verschiedenen anderen Vorrichtungen, die über ein oder mehrere Add-in-Vorrichtungen 1420 hinzugefügt werden können. In mindestens einer Ausführungsform kann der Netzwerkadapter 1418 ein Ethernet-Adapter oder ein anderer kabelgebundener Netzwerkadapter sein. In mindestens einer Ausführungsform kann der drahtlose Netzwerkadapter 1419 ein oder mehrere Wi-Fi-, Bluetooth-, NFC- oder andere Netzwerkvorrichtungen umfassen, die ein oder mehrere drahtlose Funkvorrichtungen enthalten.In at least one embodiment, a
In mindestens einer Ausführungsform kann das Rechensystem 1400 weitere, nicht explizit dargestellte Komponenten enthalten, darunter USB- oder andere Portverbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die ebenfalls mit dem E/A-Hub 1407 verbunden sein können. In mindestens einer Ausführungsform können Kommunikationspfade, die verschiedene Komponenten in
In mindestens einer Ausführungsform enthalten ein oder mehrere Parallelprozessoren 1412 Schaltungen, die für die Grafik- und Videoverarbeitung optimiert sind, z. B. Videoausgangsschaltungen, und bilden eine Grafikverarbeitungseinheit („GPU“). In mindestens einer Ausführungsform enthalten ein oder mehrere Parallelprozessor(en) 1412 Schaltungen, die für die allgemeine Verarbeitung optimiert sind. In mindestens einer Ausführungsform können Komponenten des Rechensystems 1400 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung In mindestens einer Ausführungsform integrieren ein oder mehrere Parallelprozessor(en) 1412 Schaltkreise, die für Grafik- und Videoverarbeitung optimiert sind, einschließlich z.B. Videoausgabeschaltungen, und bilden eine Grafikverarbeitungseinheit („GPU“). In mindestens einer Ausführungsform integrieren ein oder mehrere Parallelprozessor(en) 1412 Schaltkreise, die für allgemeine Verarbeitung optimiert sind. In mindestens einer Ausführungsform können Komponenten des Rechensystems 1400 mit einem oder mehreren anderen Systemelementen auf einem einzigen integrierten Schaltkreis integriert sein. Zum Beispiel können in mindestens einer Ausführungsform ein oder mehrere Parallelprozessor(en) 1412, der Speicher-Hub 1405, der/die Prozessor(en) 1402 und der E/A-Hub 1407 in eine integrierte SoC-Schaltung integriert sein. In mindestens einer Ausführungsform können Komponenten des Rechensystems 1400 in ein einziges Gehäuse integriert sein, um eine System-in-Package-Konfiguration („SIP“) zu bilden. In mindestens einer Ausführungsform kann mindestens ein Teil der Komponenten des Rechensystems 1400 in ein Multi-Chip-Modul („MCM“) integriert sein, das mit anderen Multi-Chip-Modulen zu einem modularen Rechensystem zusammengeschaltet sein kann. In mindestens einer Ausführungsform sind das E/A-Subsystem 1411 und die Anzeigevorrichtungen 1410B nicht in dem Rechensystem 1400 enthalten.In at least one embodiment, one or more
In mindestens einer Ausführungsform werden ein oder mehrere in
VerarbeitungssystemeProcessing systems
Die folgenden Figuren stellen, ohne Beschränkung darauf, beispielhafte Verarbeitungssysteme dar, die zur Implementierung mindestens einer Ausführungsform verwendet werden können.The following figures illustrate, but are not limited to, example processing systems that may be used to implement at least one embodiment.
In mindestens einer Ausführungsform ist der Kernkomplex 1510 eine CPU, ist der Grafikkomplex 1540 eine GPU und ist die APU 1500 eine Verarbeitungseinheit, die, ohne Beschränkung darauf, 1510 und 1540 auf einem einzigen Chip integriert. In mindestens einer Ausführungsform können einige Aufgaben dem Kernkomplex 1510 und andere Aufgaben dem Grafikkomplex 1540 zugewiesen werden. In mindestens einer Ausführungsform ist der Kernkomplex 1510 so konfiguriert, dass er eine Hauptsteuerungssoftware ausführt, die der APU 1500 zugeordnet ist, wie z.B. ein Betriebssystem. In mindestens einer Ausführungsform ist der Kernkomplex 1510 der Hauptprozessor der APU 1500, der Operationen bzw. Betriebsabläufe der anderen Prozessoren steuert und koordiniert. In mindestens einer Ausführungsform gibt der Kernkomplex 1510 Befehle aus, die den Betrieb des Grafikkomplexes 1540 steuern. In mindestens einer Ausführungsform kann der Kernkomplex 1510 so konfiguriert sein, dass er von dem CUDA-Quellcode abgeleiteten ausführbaren Host-Code ausführt, und kann der Grafikkomplex 1540 so konfiguriert sein, dass er von dem CUDA-Quellcode abgeleiteten ausführbaren Geräte-Code ausführt.In at least one embodiment,
In mindestens einer Ausführungsform beinhaltet der Kernkomplex 1510, ohne Beschränkung darauf, Kerne 1520(1)-1520(4) und einen L3-Cache 1530. In mindestens einer Ausführungsform kann der Kernkomplex 1510, ohne Beschränkung darauf, eine beliebige Anzahl von Kernen 1520 und eine beliebige Anzahl und Art von Caches in beliebiger Kombination enthalten. In mindestens einer Ausführungsform sind die Kerne 1520 so konfiguriert, dass sie Anweisungen einer bestimmten Befehlssatzarchitektur („ISA“) ausführen. In mindestens einer Ausführungsform ist jeder Kern 1520 ein CPU-Kern.In at least one embodiment,
In mindestens einer Ausführungsform enthält jeder Kern 1520, ohne Beschränkung darauf, eine Abhol-/Dekodier-Einheit 1522, eine Ganzzahlausführungsmaschine 1524, eine Gleitkommaausführungsmaschine 1526 und einen L2-Cache 1528. In mindestens einer Ausführungsform holt die Abhol-/Dekodier-Einheit 1522 Anweisungen ab, dekodiert solche Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahlausführungsmaschine 1524 und die Gleitkommaausführungsmaschine 1526. In mindestens einer Ausführungsform kann die Abhol-/Dekodier-Einheit 1522 gleichzeitig eine Mikroanweisung an die Ganzzahlausführungsmaschine 1524 und eine andere Mikroanweisung an die Gleitkommaausführungsmaschine 1526 senden. In mindestens einer Ausführungsform führt die Ganzzahlausführungsmaschine 1524, ohne Beschränkung darauf, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkommamaschine 1526, ohne Beschränkung darauf, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Abhol-/Dekodier-Einheit 1522 Mikroanweisungen an eine einzige Ausführungsmaschine, die sowohl die Ganzzahlausführungsmaschine 1524 als auch die Gleitkommaausführungsmaschine 1526 ersetzt.In at least one embodiment, each
In mindestens einer Ausführungsform kann jeder Kern 1520(i), wobei i eine ganze Zahl ist, die eine bestimmte Instanz des Kerns 1520 repräsentiert, auf den L2-Cache 1528(i) zugreifen, der in dem Kern 1520(i) enthalten ist. In mindestens einer Ausführungsform ist jeder in dem Kernkomplex 1510(j) enthaltene Kern 1520, wobei j eine ganze Zahl ist, die eine bestimmte Instanz des Kernkomplexes 1510 repräsentiert, mit anderen in dem Kernkomplex 1510(j) enthaltenen Kernen 1520 über den in dem Kernkomplex 1510(j) enthaltenen L3-Cache 1530(j) verbunden. In mindestens einer Ausführungsform können die in dem Kernkomplex 1510(j) enthaltenen Kerne 1520, wobei j eine ganze Zahl ist, die eine bestimmte Instanz des Kernkomplexes 1510 repräsentiert, auf den gesamten L3-Cache 1530(j) zugreifen, der in dem Kernkomplex 1510(j) enthalten ist. In mindestens einer Ausführungsform kann der L3-Cache 1530, ohne Beschränkung darauf, eine beliebige Anzahl von Slices enthalten.In at least one embodiment, each core 1520(i), where i is an integer representing a particular instance of
In mindestens einer Ausführungsform kann der Grafikkomplex 1540 so konfiguriert sein, dass er Rechenoperationen hochparallel ausführt. In mindestens einer Ausführungsform ist der Grafikkomplex 1540 so konfiguriert, dass er Grafikpipelineoperationen wie beispielsweise Zeichenbefehle, Pixeloperationen, geometrische Berechnungen und andere Operationen im Zusammenhang mit dem Rendern eines Bilds auf einer Anzeige ausführt. In mindestens einer Ausführungsform ist der Grafikkomplex 1540 so konfiguriert, dass er Operationen ausführt, die nichts mit Grafik zu tun haben. In mindestens einer Ausführungsform ist der Grafikkomplex 1540 so konfiguriert, dass er sowohl grafikbezogene als auch grafikfremde Operationen ausführt.In at least one embodiment, graphics complex 1540 may be configured to perform computing operations in a highly parallel manner. In at least one embodiment, graphics complex 1540 is configured to perform graphics pipeline operations such as drawing commands, pixel operations, geometric calculations, and other operations related to rendering an image on a display. In at least one embodiment, graphics complex 1540 is configured to perform operations unrelated to graphics. In at least one embodiment, graphics complex 1540 is configured to perform both graphics-related and non-graphics operations.
In mindestens einer Ausführungsform beinhaltet der Grafikkomplex 1540, ohne Beschränkung darauf, eine beliebige Anzahl von Recheneinheiten 1550 und einen L2-Cache 1542. In mindestens einer Ausführungsform teilen sich die Recheneinheiten 1550 den L2-Cache 1542. In mindestens einer Ausführungsform ist der L2-Cache 1542 partitioniert. In mindestens einer Ausführungsform umfasst der Grafikkomplex 1540, ohne Beschränkung darauf, eine beliebige Anzahl von Recheneinheiten 1550 und eine beliebige Anzahl (einschließlich Null) und Art von Caches. In mindestens einer Ausführungsform beinhaltet der Grafikkomplex 1540, ohne Beschränkung darauf, eine beliebige Menge an dedizierter Grafikhardware.In at least one embodiment, the graphics complex 1540 includes, but is not limited to, any number of
In mindestens einer Ausführungsform beinhaltet jede Recheneinheit 1550, ohne Beschränkung darauf, eine beliebige Anzahl von SIMD-Einheiten 1552 und einen gemeinsamen Speicher 1554. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 1552 eine SIMD-Architektur und ist für die parallele Ausführung von Operationen konfiguriert. In mindestens einer Ausführungsform kann jede Recheneinheit 1550 eine beliebige Anzahl von Thread-Blöcken ausführen, aber jeder Thread-Block wird auf einer einzigen Recheneinheit 1550 ausgeführt. In mindestens einer Ausführungsform beinhaltet ein Thread-Block, ohne Beschränkung darauf, eine beliebige Anzahl von Ausführungs-Threads. In mindestens einer Ausführungsform ist eine Arbeitsgruppe bzw. eine Workgroup ein Thread-Block. In mindestens einer Ausführungsform führt jede SIMD-Einheit 1552 einen anderen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread im Warp zu einem einzigen Thread-Block gehört und so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage eines einzigen Satzes von Anweisungen verarbeitet. In mindestens einer Ausführungsform kann eine Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur bzw. eine Lane ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement bzw. Workitem ein Thread. In mindestens einer Ausführungsform ist eine Wellenfront ein Warp. In mindestens einer Ausführungsform können sich verschiedene Wellenfronten in einem Thread-Block miteinander synchronisieren und über den gemeinsamen Speicher 1554 kommunizieren.In at least one embodiment, each
In mindestens einer Ausführungsform ist die Struktur 1560 eine Systemverbindung bzw. ein System-Interconnect, die bzw. der Daten- und Steuerungs-Übertragungen zwischen dem Kernkomplex 1510, dem Grafikkomplex 1540, den E/A-Schnittstellen 1570, den Speichercontrollern 1580, dem Anzeigecontroller 1592 und der Multimedia-Engine 1594 ermöglicht. In mindestens einer Ausführungsform kann die APU 1500, ohne Beschränkung darauf, eine beliebige Menge und Art von Systemverbindungen zusätzlich zu oder anstelle des Fabric 1560 enthalten, die Daten- und Steuerungs-Übertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten ermöglicht, die intern oder extern zur APU 1500 sein können. In mindestens einer Ausführungsform sind die E/A-Schnittstellen 1570 repräsentativ für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI, PCI-Extended („PCI-X“), PCIe, Gigabit-Ethernet („GBE“), USB usw.). In mindestens einer Ausführungsform sind verschiedene Arten von Peripheriegeräten mit den E/A-Schnittstellen 1570 gekoppelt. Die Peripheriegeräte, die mit den E/A-Schnittstellen 1570 gekoppelt sind, können, ohne Beschränkung darauf, Tastaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielsteuerungen, Medienaufzeichnungsvorrichtungen, externe Speichervorrichtungen, Netzwerkschnittstellenkarten usw. beinhalten.In at least one embodiment,
In mindestens einer Ausführungsform zeigt der Anzeigecontroller AMD92 Bilder auf einer oder mehreren Anzeigevorrichtungen an, z.B. auf einer Flüssigkristallanzeige („LCD“). In mindestens einer Ausführungsform umfasst die Multimedia-Engine 1594, ohne Beschränkung darauf, eine beliebige Menge und Art von Schaltkreisen, die sich auf Multimedia beziehen, wie z.B. einen Video-Dekoder, einen Video-Enkoder, einen Bildsignalprozessor usw. In mindestens einer Ausführungsform erleichtern Speichercontroller 1580 die Datenübertragung zwischen der APU 1500 und einem einheitlichen Systemspeicher 1590. In mindestens einer Ausführungsform teilen sich der Kernkomplex 1510 und der Grafikkomplex 1540 den vereinheitlichten Systemspeicher 1590.In at least one embodiment, the AMD92 display controller displays images on one or more display devices, such as a liquid crystal display (“LCD”). In at least one embodiment, the
In mindestens einer Ausführungsform implementiert die APU 1500 ein Speicher-Subsystem, das, ohne Beschränkung darauf, eine beliebige Anzahl und Art von Speichercontrollern 1580 und Speichervorrichtungen (z.B. den gemeinsam genutzten Speicher 1554) enthält, die einer Komponente zugeordnet oder von mehreren Komponenten gemeinsam genutzt werden können. In mindestens einer Ausführungsform implementiert die APU 1500 ein Cache-Subsystem, das, ohne Beschränkung darauf, einen oder mehrere Cachespeicher (z.B. L2-Caches 1628, L3-Cache 1530 und L2-Cache 1542) beinhaltet, die jeweils für eine beliebige Anzahl von Komponenten (z.B. Kerne 1520, Kernkomplex 1510, SIMD-Einheiten 1552, Recheneinheiten 1550 und Grafikkomplex 1540) reserviert sein oder von diesen gemeinsam genutzt werden können.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform beinhaltet der Kernkomplex 1610, ohne Beschränkung darauf, Kerne 1620(1)-1620(4) und einen L3-Cache 1630. In mindestens einer Ausführungsform kann der Kernkomplex 1610, ohne Beschränkung darauf, eine beliebige Anzahl von Kernen 1620 und eine beliebige Anzahl und Art von Caches in beliebiger Kombination enthalten. In mindestens einer Ausführungsform sind die Kerne 1620 so konfiguriert, dass sie Anweisungen eines bestimmten ISA ausführen. In mindestens einer Ausführungsform ist jeder Kern 1620 ein CPU-Kern.In at least one embodiment,
In mindestens einer Ausführungsform beinhaltet jeder Kern 1620, ohne Beschränkung darauf, eine Abhol-/Dekodier-Einheit 1622, eine Ganzzahlausführungsmaschine 1624, eine Gleitkommaausführungsmaschine 1626 und einen L2-Cache 1628. In mindestens einer Ausführungsform holt die Abruf-/Dekodier-Einheit 1622 Anweisungen ab, dekodiert solche Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahlausführungs-Engine 1624 und die Gleitkommaausführungsmaschine 1626. In mindestens einer Ausführungsform kann die Abhol-/Dekodier-Einheit 1622 gleichzeitig eine Mikroanweisung an die Ganzzahlausführungsmaschine 1624 und eine andere Mikroanweisung an die Gleitkommaausführungsmaschine 1626 senden. In mindestens einer Ausführungsform führt die Ganzzahlausführungsmaschine 1624, ohne Beschränkung darauf, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkommamaschine 1626, ohne Beschränkung darauf, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Abhol-/Dekodier-Einheit 1622 Mikroanweisungen an eine einzige Ausführungsmaschine, die sowohl die Ganzzahlausführungsmaschine 1624 als auch die Gleitkommaausführungsmaschine 1626 ersetzt.In at least one embodiment, each
In mindestens einer Ausführungsform kann jeder Kern 1620(i), wobei i eine ganze Zahl ist, die eine bestimmte Instanz des Kerns 1620 repräsentiert, auf den L2-Cache 1628(i) zugreifen, der in dem Kern 1620(i) enthalten ist. In mindestens einer Ausführungsform ist jeder in dem Kernkomplex 1610(j) enthaltene Kern 1620, wobei j eine ganze Zahl ist, die eine bestimmte Instanz des Kernkomplexes 1610 repräsentiert, mit anderen Kernen 1620 in dem Kernkomplex 1610(j) über den in dem Kernkomplex 1610(j) enthaltenen L3-Cache 1630(j) verbunden. In mindestens einer Ausführungsform können die in dem Kernkomplex 1610(j) enthaltenen Kerne 1620, wobei j eine ganze Zahl ist, die eine bestimmte Instanz des Kernkomplexes 1610 repräsentiert, auf den gesamten in dem Kernkomplex 1610(j) enthaltenen L3-Cache 1630(j) zugreifen. In mindestens einer Ausführungsform kann der L3-Cache 1630, ohne Beschränkung darauf, eine beliebige Anzahl von Slices enthalten.In at least one embodiment, each core 1620(i), where i is an integer representing a particular instance of
In mindestens einer Ausführungsform ist das Fabric 1660 eine Systemverbindung, die Daten- und Steuerungs-Übertragungen über die Kernkomplexe 1610(1)-1610(N) (wobei N eine ganze Zahl größer als Null ist), E/A-Schnittstellen 1670 und Speichercontroller 1680 erleichtert. In mindestens einer Ausführungsform kann die CPU 1600, ohne Beschränkung darauf, eine beliebige Menge und Art von Systemverbindungen zusätzlich zu oder anstelle des Fabric 1660 enthalten, die Daten- und Steuerungs-Übertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtern, die intern oder extern zur CPU 1600 sein können. In mindestens einer Ausführungsform sind die E/A-Schnittstellen 1670 repräsentativ für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI , PCI-X, PCIe, GBE, USB usw.). In mindestens einer Ausführungsform sind verschiedene Arten von Peripheriegeräten mit den E/A-Schnittstellen 1670 gekoppelt. Zu den Peripheriegeräten, die mit den E/A-Schnittstellen 1670 gekoppelt sind, gehören unter anderem Bildschirme, Tastaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielsteuerungen, Medienaufzeichnungsvorrichtungen, externe Speichervorrichtungen, Netzwerkschnittstellenkarten usw.In at least one embodiment,
In mindestens einer Ausführungsform erleichtern die Speichercontroller 1680 Datenübertragungen zwischen der CPU 1600 und einem Systemspeicher 1690. In mindestens einer Ausführungsform teilen sich der Kernkomplex 1610 und der Grafikkomplex 1640 den Systemspeicher 1690. In mindestens einer Ausführungsform implementiert die CPU 1600 ein Speichersubsystem, das, ohne Beschränkung darauf, eine beliebige Anzahl und Art von Speichercontrollern 1680 und Speichervorrichtungen beinhaltet, die einer Komponente zugeordnet sein oder von mehreren Komponenten gemeinsam genutzt werden können. In mindestens einer Ausführungsform implementiert die CPU 1600 ein Cache-Subsystem, das, ohne Beschränkung darauf, einen oder mehrere Cachespeicher (z.B. L2-Caches 1628 und L3-Caches 1630) beinhaltet, die jeweils für eine beliebige Anzahl von Komponenten (z.B. Kerne 1620 und Kernkomplexe 1610) reserviert sein oder von diesen gemeinsam genutzt werden können.In at least one embodiment,
In mindestens einer Ausführungsform werden ein oder mehrere in
Ein anwendungswirksamer Adressraum 1782 innerhalb eines Systemspeichers 1714 speichert Prozesselemente 1783. In einer Ausführungsform werden die Prozesselemente 1783 im Ansprechen auf GPU-Aufrufe 1781 von Anwendungen 1780, die auf dem Prozessor 1707 ausgeführt werden, gespeichert. Ein Prozesselement 1783 enthält den Prozessstatus für die entsprechende Anwendung 1780. Ein in dem Prozesselement 1783 enthaltener Arbeits- bzw. Workdeskriptor („WD“) 1784 kann ein einzelner, von einer Anwendung angeforderter Auftrag bzw. Job sein oder einen Zeiger auf eine Warteschlange von Jobs enthalten. In mindestens einer Ausführungsform ist der WD 1784 ein Zeiger auf eine Auftragsanforderungswarteschlange in dem effektiven Adressraum 1782 der Anwendung.An application
Das Grafikbeschleunigungsmodul 1746 und/oder einzelne Grafikverarbeitungs-Engines können von allen oder einer Teilmenge von Prozessen in einem System gemeinsam genutzt werden. In mindestens einer Ausführungsform kann eine Infrastruktur zum Einrichten eines Prozessstatus und zum Senden des WD 1784 an das Grafikbeschleunigungsmodul 1746 zum Starten eines Auftrags in einer virtualisierten Umgebung enthalten sein.The
In mindestens einer Ausführungsform ist ein Dedizierter-Prozess-Programmiermodell implementierungsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 1746 oder eine individuelle Grafikverarbeitungs-Engine. Weil das Grafikbeschleunigungsmodul 1746 einem einzelnen Prozess gehört, initialisiert ein Hypervisor eine Beschleunigerintegrationsschaltung für eine besitzende Partition und initialisiert ein Betriebssystem die Beschleunigerintegrationsschaltung für einen besitzenden Prozess, wenn das Grafikbeschleunigungsmodul 1746 zugewiesen wird.In at least one embodiment, a dedicated process programming model is implementation specific. In this model, a single process has the
Im Betrieb holt eine WD-Abholeinheit 1791 in dem Beschleunigerintegrationsslice 1790 den nächsten WD 1784 ab, der eine Angabe der Arbeit enthält, die von einer oder mehreren Grafikverarbeitungsmaschinen des Grafikbeschleunigungsmoduls 1746 zu erledigen ist. Daten aus dem WD 1784 können in Registern 1745 gespeichert und von einer Speicherverwaltungseinheit („MMU“) 1739, einer Unterbrechungs- bzw. Interrupt-Verwaltungsschaltung 1747 und/oder einer Kontextverwaltungsschaltung 1748 verwendet werden, wie dargestellt. Eine Ausführungsform der MMU 1739 beinhaltet beispielsweise einen Segment-/Seitenlauf-Schaltkreis für den Zugriff auf Segment-/Seitentabellen 1786 innerhalb des virtuellen Betriebssystemadressraums 1785. Die Interrupt-Verwaltungsschaltung 1747 kann von dem Grafikbeschleunigungsmodul 1746 empfangene Interrupt-Ereignisse („INT“) 1792 verarbeiten. Bei der Durchführung von Grafikoperationen wird eine von einer Grafikverarbeitungsmaschine erzeugte effektive Adresse 1793 von der MMU 1739 in eine reale Adresse übersetzt.In operation, a WD fetch
In einer Ausführungsform wird für jede Grafikverarbeitungs-Engine und/oder jedes Grafikbeschleunigungsmodul 1746 ein gleicher Satz von Registern 1745 dupliziert und kann von einem Hypervisor oder Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in dem Beschleunigerintegrationsslice 1790 enthalten sein. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, sind in Tabelle 1 gezeigt. Tabelle 1 -Hypervisor-initialisierte Register
Beispielhafte Register, die von einem Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - Betriebssystem-initialisierte Register
In einer Ausführungsform ist jeder WD 1784 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 1746 und/oder eine bestimmte Grafikverarbeitungs-Engine. Er enthält alle Informationen, die von einer Grafikverarbeitungs-Engine benötigt werden, um Arbeit zu verrichten, oder er kann ein Zeiger auf einen Speicherplatz sein, an dem eine Anwendung eine Befehlswarteschlange von abzuschließender Arbeit eingerichtet hat.In one embodiment, each
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 1810 einen Vertex-Prozessor 1805 und einen oder mehrere Fragment-Prozessor(en) 1815A-1815N (z.B. 1815A, 1815B, 1815C, 1815D, bis 1815N-1 und 1815N). In mindestens einer Ausführungsform kann der Grafikprozessor 1810 verschiedene Shader-Programme über eine separate Logik ausführen, so dass der Vertex-Prozessor 1805 für die Ausführung von Operationen für Vertex-Shader-Programme optimiert ist, während ein oder mehrere Fragment-Prozessor(en) 1815A-1815N Fragment- (z.B. Pixel-) Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einer Ausführungsform führt der Vertex-Prozessor 1805 eine Vertex-Verarbeitungsstufe einer 3D-Grafik-Pipeline aus und erzeugt Primitive und Vertex-Daten. In mindestens einer Ausführungsform verwenden Fragmentprozessor(en) 1815A-1815N die von dem Vertexprozessor 1805 erzeugten Primitiv- und Vertexdaten, um einen Framebuffer bzw. Bildpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In mindestens einer Ausführungsform ist/sind der/die Fragmentprozessor(en) 1815A-1815N für die Ausführung von Fragment-Shader-Programmen optimiert, wie sie in einer OpenGL-API bereitgestellt sind, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie sie in einer Direct 3D-API bereitgestellt sind.In at least one embodiment,
In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 1810 zusätzlich eine oder mehrere MMU(s) 1820A-1820B, Cache(s) 1825A-1825B und Schaltungsverbindung(en) bzw. Interconnect(s) 1830A-1830B. In mindestens einer Ausführungsform sorgen eine oder mehrere MMU(s) 1820A-1820B für die Zuordnung von virtuellen zu physikalischen Adressen für den Grafikprozessor 1810, einschließlich für den Vertex-Prozessor 1805 und/oder den/die Fragment-Prozessor(en) 1815A-1815N, der/die auf in dem Speicher gespeicherte Vertex- oder Bild/TexturDaten verweisen kann/können, zusätzlich zu Vertex- oder Bild/Textur-Daten, die in einem oder mehreren Cache(s) 1825A-1825B gespeichert sind. In mindestens einer Ausführungsform können eine oder mehrere MMU(s) 1820A-1820B mit anderen MMUs innerhalb eines Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die einem oder mehreren Anwendungsprozessor(en) 1305, Bildprozessor(en) 1315 und/oder Videoprozessor(en) 1320 von
In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 1840 eine oder mehrere MMU(s) 1820A-1820B, Caches 1825A-1825B und Schaltungsverbindungen 1830A-1830B des Grafikprozessors 1810 von
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform können die FPUs 1914A-1914N Gleitkommaoperationen mit einfacher Genauigkeit (32 Bit) und halber Genauigkeit (16 Bit) durchführen, während die DPFPUs 1915A-1915N Gleitkommaoperationen mit doppelter Genauigkeit (64 Bit) durchführen. In mindestens einer Ausführungsform können die ALUs 1916A-1916N Ganzzahloperationen mit variabler Präzision bei 8-Bit-, 16-Bit- und 32-Bit-Präzision ausführen und für Operationen mit gemischter Präzision konfiguriert sein. In mindestens einer Ausführungsform können die MPUs 1917A-1917N auch für Matrixoperationen mit gemischter Genauigkeit konfiguriert sein, einschließlich Gleitkomma- und 8-Bit-Ganzzahloperationen mit halber Genauigkeit. In mindestens einer Ausführungsform können die MPUs 1917-1917N eine Vielzahl von Matrixoperationen durchführen, um CUDA-Programme zu beschleunigen, einschließlich der Unterstützung für eine beschleunigte allgemeine Matrix-zu-Matrix-Multiplikation („GEMM“). In mindestens einer Ausführungsform können die AFUs 1912A-1912N zusätzliche logische Operationen durchführen, die nicht von Gleitkomma- oder Ganzzahleinheiten unterstützt werden, einschließlich trigonometrischer Operationen (z.B. Sinus, Cosinus usw.).In at least one embodiment, the
In mindestens einer Ausführungsform umfasst die GPGPU 1930 einen Speicher 1944A-1944B, der über eine Reihe von Speichercontrollern 1942A-1942B mit den Rechenclustern 1936A-1936H verbunden ist. In mindestens einer Ausführungsform kann der Speicher 1944A-1944B verschiedene Arten von Speichervorrichtungen umfassen, darunter DRAM oder Grafik-Direktzugriffsspeicher, wie synchroner Grafik-Direktzugriffsspeicher („SGRAM“), einschließlich Grafik-Doppeldatenraten-Speicher („GDDR“).In at least one embodiment, the
In mindestens einer Ausführungsform enthalten die Rechencluster 1936A-1936H jeweils einen Satz von Grafikkernen, wie z.B. den Grafikkern 1900 von
In mindestens einer Ausführungsform können mehrere Instanzen der GPGPU 1930 so konfiguriert sein, dass sie als Rechencluster arbeiten. Die Rechencluster 1936A-1936H können beliebige technisch machbare Kommunikationstechniken zur Synchronisation und zum Datenaustausch implementieren. In mindestens einer Ausführungsform kommunizieren mehrere Instanzen der GPGPU 1930 über die Host-Schnittstelle 1932. In mindestens einer Ausführungsform enthält die GPGPU 1930 einen E/A-Hub 1939, der die GPGPU 1930 mit einer GPU-Verbindung 1940 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU 1930 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verbindung 1940 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation die zwischen mehreren Instanzen der GPGPU 1930 ermöglicht. In mindestens einer Ausführungsform koppelt die GPU-Verbindung 1940 mit einem Hochgeschwindigkeits-Interconnect, um Daten an andere GPGPUs 1930 oder Parallelprozessoren zu senden und von diesen zu empfangen. In mindestens einer Ausführungsform befinden sich mehrere Instanzen der GPGPU 1930 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, die über die Host-Schnittstelle 1932 zugänglich ist. In mindestens einer Ausführungsform kann die GPU-Verbindung 1940 so konfiguriert sein, dass sie zusätzlich oder alternativ zu der Host-Schnittstelle 1932 eine Verbindung zu einem Hostprozessor ermöglicht. In mindestens einer Ausführungsform kann die GPGPU 1930 so konfiguriert sein, dass sie ein CUDA-Programm ausführt.In at least one embodiment, multiple instances of the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform enthält der Parallelprozessor 2000 eine Parallelverarbeitungseinheit 2002. In mindestens einer Ausführungsform enthält die Parallelverarbeitungseinheit 2002 eine E/A-Einheit 2004, die die Kommunikation mit anderen Vorrichtungen ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 2002. In mindestens einer Ausführungsform kann die E/A-Einheit 2004 direkt mit anderen Vorrichtungen verbunden sein. In mindestens einer Ausführungsform ist die E/A-Einheit 2004 über eine Hub- oder Switch-Schnittstelle, wie z.B. den Speicher-Hub 1405, mit anderen Vorrichtungen verbunden. In mindestens einer Ausführungsform bilden die Verbindungen zwischen dem Speicher-Hub 1405 und der E/A-Einheit 2004 eine Kommunikationsverbindung. In mindestens einer Ausführungsform ist die E/A-Einheit 2004 mit einer Host-Schnittstelle 2006 und einer Speicherkreuzschiene 2016 verbunden, wobei die Host-Schnittstelle 2006 Befehle zur Durchführung von Verarbeitungsvorgängen und die Speicherkreuzschiene 2016 Befehle zur Durchführung von Speicheroperationen empfängt.In at least one embodiment, the
In mindestens einer Ausführungsform kann die Host-Schnittstelle 2006 dann, wenn die Host-Schnittstelle einen Befehlspuffer über die E/A-Einheit 2004 empfängt, Arbeitsoperationen zur Ausführung dieser Befehle an ein Frontend 2008 leiten. In mindestens einer Ausführungsform ist das Frontend 2008 mit einem Planer bzw. Scheduler 2010 gekoppelt, der so konfiguriert ist, dass er Befehle oder andere Arbeitselemente an ein Verarbeitungsfeld bzw. Verarbeitungs-Array 2012 verteilt. In mindestens einer Ausführungsform stellt der Scheduler 2010 sicher, dass das Verarbeitungs-Array 2012 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an das Verarbeitungs-Array 2012 verteilt werden. In mindestens einer Ausführungsform ist der Scheduler 2010 über Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. In mindestens einer Ausführungsform ist der in einem Mikrocontroller implementierte Scheduler 2010 so konfigurierbar, dass er komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchführen kann, was eine schnelle Bevorrechtigung und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungs-Array 2012 ausgeführt werden. In mindestens einer Ausführungsform kann die Hostsoftware Arbeitslasten für die Planung auf dem Verarbeitungs-Array 2012 über eine von mehreren Grafikverarbeitungs-Doorbells nachweisen. In mindestens einer Ausführungsform können die Arbeitslasten dann automatisch über das Verarbeitungs-Array 2012 durch die Logik des Schedulers 2010 in einem Mikrocontroller mit Scheduler 2010 verteilt werden.In at least one embodiment, when the host interface receives a command buffer via the I/
In mindestens einer Ausführungsform kann das Verarbeitungs-Array 2012 bis zu „N“ Cluster umfassen (z.B. Cluster 2014A, Cluster 2014B bis Cluster 2014N). In mindestens einer Ausführungsform kann jeder Cluster 2014A-2014N des Verarbeitungs-Arrays 2012 eine große Anzahl gleichzeitiger Threads ausführen. In mindestens einer Ausführungsform kann der Scheduler 2010 den Clustern 2014A-2014N des Verarbeitungs-Arrays 2012 durch Verwenden verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen, die in Abhängigkeit von der Arbeitslast variieren können, die für jede Art von Programm oder Berechnung entsteht, Arbeit zuweisen. In mindestens einer Ausführungsform kann die Planung dynamisch durch den Scheduler 2010 gehandhabt werden, oder kann teilweise durch die Compilerlogik während der Kompilierung der Programmlogik, die für die Ausführung durch das Verarbeitungs-Array 2012 konfiguriert ist, unterstützt werden. In mindestens einer Ausführungsform können verschiedene Cluster 2014A-2014N des Verarbeitungs-Arrays 2012 für die Verarbeitung verschiedener Arten von Programmen oder für die Durchführung verschiedener Arten von Berechnungen zugewiesen werden.In at least one embodiment,
In mindestens einer Ausführungsform kann das Verarbeitungs-Array 2012 so konfiguriert sein, dass es verschiedene Arten von parallelen Verarbeitungsoperationen durchführt. In mindestens einer Ausführungsform ist das Verarbeitungs-Array 2012 so konfiguriert, dass es parallele Universalrechenoperationen durchführt. Zum Beispiel kann in mindestens einer Ausführungsform das Verarbeitungs-Array 2012 Logik zur Ausführung von Verarbeitungsaufgaben enthalten, einschließlich der Filterung von Video- und/oder Audiodaten, der Durchführung von Modellierungsoperationen, einschließlich physikalischer Operationen, und der Durchführung von Datentransformationen.In at least one embodiment,
In mindestens einer Ausführungsform ist das Verarbeitungs-Array 2012 so konfiguriert, dass es parallele Grafikverarbeitungsoperationen durchführt. In mindestens einer Ausführungsform kann das Verarbeitungsarray 2012 zusätzliche Logik enthalten, um die Ausführung solcher Grafikverarbeitungsoperationen zu unterstützen, einschließlich, aber nicht beschränkt auf, Texturabtastlogik, um Texturoperationen durchzuführen, sowie Tesselationslogik und anderer Vertexverarbeitungslogik. In mindestens einer Ausführungsform kann das Verarbeitungs-Array 2012 so konfiguriert sein, dass es auf die Grafikverarbeitung bezogene Shader-Programme ausführt, wie z.B. Vertex-Shader, Tesselations-Shader, Geometrie-Shader und Pixel-Shader, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform kann die Parallelverarbeitungseinheit 2002 Daten aus dem Systemspeicher über die E/A-Einheit 2004 zur Verarbeitung übertragen. In mindestens einer Ausführungsform können die übertragenen Daten während der Verarbeitung in dem On-Chip-Speicher (z.B. einem Parallelprozessorspeicher 2022) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.In at least one embodiment,
In mindestens einer Ausführungsform kann dann, wenn die Parallelverarbeitungseinheit 2002 zur Durchführung der Grafikverarbeitung verwendet wird, der Scheduler 2010 so konfiguriert sein, dass er eine Verarbeitungslast in ungefähr gleich große Aufgaben aufteilt, um eine bessere Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 2014A-2014N des Verarbeitungsarrays 2012 zu ermöglichen. In mindestens einer Ausführungsform können Teile des Verarbeitungs-Arrays 2012 so konfiguriert sein, dass sie verschiedene Arten der Verarbeitung durchführen. Zum Beispiel kann in mindestens einer Ausführungsform ein erster Teil so konfiguriert sein, dass er ein Vertexshading und eine Topologieerzeugung durchführt, ein kann zweiter Teil so konfiguriert sein, dass er Tesselation und Geometrieshading durchführt, und kann ein dritter Teil so konfiguriert sein, dass er Pixelshading oder andere Bildschirmraumoperationen durchführt, um ein gerendertes Bild für die Anzeige zu erzeugen. In mindestens einer Ausführungsform können Zwischendaten, die von einem oder mehreren der Cluster 2014A-2014N erzeugt werden, in Puffern gespeichert werden, damit Zwischendaten zur weiteren Verarbeitung zwischen den Clustern 2014A-2014N übertragen werden können.In at least one embodiment, when
In mindestens einer Ausführungsform kann das Verarbeitungs-Array 2012 Verarbeitungsaufgaben empfangen, die über den Scheduler 2010 auszuführen sind, der Befehle zur Definition von Verarbeitungsaufgaben von dem Frontend 2008 empfängt. In mindestens einer Ausführungsform können die Verarbeitungsaufgaben Indizes der zu verarbeitenden Daten enthalten, z.B. Oberflächen-(Patch-)Daten, Primitivdaten, Vertexdaten und/oder Pixeldaten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (z.B. welches Programm auszuführen ist). In mindestens einer Ausführungsform kann der Scheduler 2010 so konfiguriert sein, dass er den Aufgaben entsprechende Indizes abruft oder Indizes von dem Frontend 2008 empfängt. In mindestens einer Ausführungsform kann das Frontend 2008 so konfiguriert sein, dass es sicherstellt, dass das Verarbeitungs-Array 2012 in einen gültigen Zustand versetzt wird, bevor eine durch eingehende Befehlspuffer (z.B. Batch-Puffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.In at least one embodiment, the
In mindestens einer Ausführungsform kann jede von einer oder mehreren Instanzen der Parallelverarbeitungseinheit 2002 mit dem Parallelprozessorspeicher 2022 gekoppelt sein. In mindestens einer Ausführungsform kann auf den Parallelprozessorspeicher 2022 über eine Speicherkreuzschiene 2016 zugegriffen werden, die Speicheranforderungen von dem Verarbeitungs-Array 2012 sowie von der E/A-Einheit 2004 empfangen kann. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2016 über eine Speicherschnittstelle 2018 auf den Parallelprozessorspeicher 2022 zugreifen. In mindestens einer Ausführungsform kann die Speicherschnittstelle 2018 mehrere Partitionseinheiten (z.B. eine Partitionseinheit 2020A, eine Partitionseinheit 2020B bis eine Partitionseinheit 2020N) beinhalten, die jeweils mit einem Teil (z.B. einer Speichereinheit) des Parallelprozessorspeichers 2022 gekoppelt sein können. In mindestens einer Ausführungsform ist eine Anzahl von Partitionseinheiten 2020A-2020N so konfiguriert, dass sie gleich einer Anzahl von Speichereinheiten ist, so dass eine erste Partitionseinheit 2020A eine entsprechende erste Speichereinheit 2024A hat, eine zweite Partitionseinheit 2020B eine entsprechende Speichereinheit 2024B hat und eine N-te Partitionseinheit 2020N eine entsprechende N-te Speichereinheit 2024N hat. In mindestens einer Ausführungsform kann die Anzahl der Partitionseinheiten 2020A-2020N nicht gleich der Anzahl der Speichereinheiten sein.In at least one embodiment, each of one or more instances of
In mindestens einer Ausführungsform können die Speichereinheiten 2024A-2024N verschiedene Arten von Speichervorrichtungen enthalten, einschließlich DRAM oder Grafik-Direktzugriffsspeicher, wie SGRAM, einschließlich GDDR-Speicher. In mindestens einer Ausführungsform können die Speichereinheiten 2024A-2024N auch 3D-Stapelspeicher enthalten, einschließlich, aber nicht beschränkt auf, Speicher mit hoher Bandbreite („HBM“). In mindestens einer Ausführungsform können Renderingziele, wie z.B. Frame-Puffer oder Textur-Maps, über die Speichereinheiten 2024A-2024N hinweg gespeichert werden, so dass die Partitionseinheiten 2020A-2020N Teile jedes Renderingziels parallel schreiben können, um die verfügbare Bandbreite des Parallelprozessorspeichers 2022 effizient zu nutzen. In mindestens einer Ausführungsform kann eine lokale Instanz des Parallelprozessorspeichers 2022 zugunsten eines einheitlichen Speicherdesigns, das den Systemspeicher in Verbindung mit dem lokalen Cachespeicher nutzt, ausgeschlossen sein.In at least one embodiment,
In mindestens einer Ausführungsform kann jeder der Cluster 2014A-2014N des Verarbeitungs-Arrays 2012 Daten verarbeiten, die in jede der Speichereinheiten 2024A-2024N in dem Parallelprozessorspeicher 2022 geschrieben werden. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2016 so konfiguriert sein, dass sie eine Ausgabe jedes Clusters 2014A-2014N an eine beliebige Partitionseinheit 2020A-2020N oder an einen anderen Cluster 2014A-2014N überträgt, der zusätzliche Verarbeitungsoperationen an einer Ausgabe durchführen kann. In mindestens einer Ausführungsform kann jeder Cluster 2014A-2014N mit der Speicherschnittstelle 2018 über die Speicherkreuzschiene 2016 kommunizieren, um von verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. In at least one embodiment, each of the clusters 2014A-2014N of the
In mindestens einer Ausführungsform hat die Speicherkreuzschiene 2016 eine Verbindung zu der Speicherschnittstelle 2018, um mit der E/A-Einheit 2004 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 2022, so dass die Verarbeitungseinheiten in den verschiedenen Clustern 2014A-2014N mit dem Systemspeicher oder einem anderen Speicher kommunizieren können, der nicht lokal zur Parallelverarbeitungseinheit 2002 ist. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2016 virtuelle Kanäle verwenden, um Verkehrsstreams zwischen Clustern 2014A-2014N und Partitionseinheiten 2020A-2020N zu trennen.In at least one embodiment, the
In mindestens einer Ausführungsform können mehrere Instanzen der Parallelverarbeitungseinheit 2002 auf einer einzigen Steckkarte bzw. Add-in-Karte bereitgestellt sein, oder es können mehrere Add-in-Karten miteinander verbunden sein. In mindestens einer Ausführungsform können verschiedene Instanzen der Parallelverarbeitungseinheit 2002 so konfiguriert sein, dass sie auch dann zusammenarbeiten, wenn die verschiedenen Instanzen eine unterschiedliche Anzahl von Prozessorkernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Zum Beispiel können in mindestens einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 2002 im Vergleich zu anderen Instanzen Gleitkommaeinheiten mit höherer Präzision enthalten. In mindestens einer Ausführungsform können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 2002 oder des Parallelprozessors 2000 enthalten, in einer Vielzahl von Konfigurationen und Formfaktoren implementiert sein, einschließlich, aber nicht beschränkt auf, Desktop-, Laptop- oder Handheld-Personal Computer, Server, Workstations, Spielkonsolen und/oder eingebettete Systeme.In at least one embodiment, multiple instances of the
In mindestens einer Ausführungsform kann der Betrieb des Verarbeitungsclusters 2094 über einen Pipeline-Manager 2032 gesteuert werden, der Verarbeitungsaufgaben auf parallele SIMT-Prozessoren verteilt. In mindestens einer Ausführungsform empfängt der Pipeline-Manager 2032 Anweisungen von dem Scheduler 2010 von
In mindestens einer Ausführungsform kann jeder Grafik-Multiprozessor 2034 innerhalb des Verarbeitungsclusters 2094 einen identischen Satz an funktioneller Ausführungslogik (z.B. arithmetische Logikeinheiten, Lade-/Speichereinheiten („LSUs“) usw.) enthalten. In mindestens einer Ausführungsform kann die funktionelle Ausführungslogik in einer Pipeline konfiguriert sein, in der neue Anweisungen ausgegeben werden können, bevor vorherige Anweisungen abgeschlossen sind. In mindestens einer Ausführungsform unterstützt die funktionelle Ausführungslogik eine Vielzahl von Operationen, darunter Ganzzahl- und Gleitkommaarithmetik, Vergleichsoperationen, boolesche Operationen, Bitverschiebung und die Berechnung verschiedener algebraischer Funktionen. In mindestens einer Ausführungsform kann dieselbe Hardware mit funktionellen Einheiten genutzt werden, um verschiedene Operationen auszuführen, und es kann eine beliebige Kombination von funktionellen Einheiten vorhanden sein.In at least one embodiment, each graphics multiprocessor 2034 within the
In mindestens einer Ausführungsform bilden die an den Verarbeitungscluster 2094 übertragenen Anweisungen einen Thread. In mindestens einer Ausführungsform ist ein Satz von Threads, die über einen Satz von Parallelverarbeitungsmaschinen ausgeführt werden, eine Thread-Gruppe. In mindestens einer Ausführungsform führt eine Thread-Gruppe ein Programm auf unterschiedlichen Eingabedaten aus. In mindestens einer Ausführungsform kann jeder Thread innerhalb einer Thread-Gruppe einer anderen Verarbeitungs-Engine innerhalb des Grafik-Multiprozessors 2034 zugewiesen sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe weniger Threads umfassen als die Anzahl der Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2034. In mindestens einer Ausführungsform können dann, wenn eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungs-Engines beinhaltet, eine oder mehrere der Verarbeitungs-Engines während der Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe auch mehr Threads als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2034 enthalten. Wenn eine Thread-Gruppe mehr Threads umfasst als die Anzahl der Verarbeitungs-Engines in dem Grafik-Multiprozessor 2034, kann die Verarbeitung in mindestens einer Ausführungsform über aufeinanderfolgende Taktzyklen hinweg durchgeführt werden. In mindestens einer Ausführungsform können mehrere Thread-Gruppen gleichzeitig auf dem Grafik-Multiprozessor 2034 ausgeführt werden.In at least one embodiment, the instructions transmitted to the
In mindestens einer Ausführungsform enthält der Grafik-Multiprozessor 2034 einen internen Cachespeicher, um Lade- und Speicheroperationen durchzuführen. In mindestens einer Ausführungsform kann der Grafik-Multiprozessor 2034 auf einen internen Cache verzichten und einen Cachespeicher (z.B. L1-Cache 2048) innerhalb des Verarbeitungsclusters 2094 verwenden. In mindestens einer Ausführungsform hat jeder Grafik-Multiprozessor 2034 auch Zugriff auf Level-2 („L2“)-Caches innerhalb von Partitionseinheiten (z.B. den Partitionseinheiten 2020A-2020N von
In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 2094 eine MMU 2045 enthalten, die so konfiguriert ist, dass sie virtuelle Adressen auf physische Adressen abbildet. In mindestens einer Ausführungsform können sich eine oder mehrere Instanzen der MMU 2045 innerhalb der Speicherschnittstelle 2018 von
In mindestens einer Ausführungsform kann der Verarbeitungscluster 2094 so konfiguriert sein, dass jeder Grafik-Multiprozessor 2034 mit einer Textureinheit 2036 gekoppelt ist, um Texturabbildungsoperationen, z.B. ein Bestimmen von Texturabtastpositionen, ein Lesen von Texturdaten und ein Filtern von Texturdaten. durchzuführen. In mindestens einer Ausführungsform werden die Texturdaten aus einem internen Textur-L1-Cache (nicht dargestellt) oder aus einem L1-Cache innerhalb des Grafik-Multiprozessors 2034 gelesen und je nach Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder dem Systemspeicher abgerufen. In mindestens einer Ausführungsform gibt jeder Grafik-Multiprozessor 2034 eine verarbeitete Aufgabe an die Datenkreuzschiene 2040 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 2094 zur weiteren Verarbeitung bereitzustellen oder um die verarbeitete Aufgabe in einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher über die Speicherkreuzschiene 2016 zu speichern. In mindestens einer Ausführungsform ist eine Pre-Raster-OperationsEinheit („preROP“) 2042 so konfiguriert, dass sie Daten von dem Grafik-Multiprozessor 2034 empfängt und Daten an ROP-Einheiten weiterleitet, die sich bei den hierin beschriebenen Partitionseinheiten (z.B. den Partitionseinheiten 2020A-2020N in
In mindestens einer Ausführungsform empfängt der Anweisungscache 2052 einen Stream bzw. Strom von auszuführenden Befehlen von dem Pipeline-Manager 2032. In mindestens einer Ausführungsform werden die Befehle in dem Anweisungscache 2052 zwischengespeichert und von der Anweisungseinheit 2054 zur Ausführung bereitgestellt. In mindestens einer Ausführungsform kann die Anweisungseinheit 2054 Anweisungen als Thread-Gruppen (z.B. Warps) versenden, wobei jeder Thread einer Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 2062 zugewiesen ist. In mindestens einer Ausführungsform kann ein Befehl durch Spezifizieren einer Adresse in einem einheitlichen Adressraum auf einen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen. In mindestens einer Ausführungsform kann die Adressabbildungseinheit 2056 verwendet werden, um Adressen in einem vereinheitlichten Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die die LSUs 2066 zugreifen können.In at least one embodiment, the
In mindestens einer Ausführungsform stellt die Registerdatei 2058 einen Satz von Registern für Funktionseinheiten des Grafik-Multiprozessors 2096 bereit. In mindestens einer Ausführungsform stellt die Registerdatei 2058 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten (z.B. GPGPU-Kerne 2062, LSUs 2066) des Grafik-Multiprozessors 2096 verbunden sind. In mindestens einer Ausführungsform ist die Registerdatei 2058 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein dedizierter Teil der Registerdatei 2058 zugeordnet ist. In mindestens einer Ausführungsform ist die Registerdatei 2058 zwischen verschiedenen Thread-Gruppen aufgeteilt, die von dem Grafik-Multiprozessor 2096 ausgeführt werden.In at least one embodiment,
In mindestens einer Ausführungsform können die GPGPU-Kerne 2062 jeweils FPUs und/oder Integer-ALUs enthalten, die zur Ausführung von Anweisungen des Grafik-Multiprozessors 2096 verwendet werden. Die GPGPU-Kerne 2062 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. In mindestens einer Ausführungsform enthält ein erster Teil der GPGPU-Kerne 2062 eine FPU mit einfacher Genauigkeit und eine Integer-ALU, während ein zweiter Teil der GPGPU-Kerne 2062 eine FPU mit doppelter Genauigkeit enthält. In mindestens einer Ausführungsform können die FPUs den IEEE 754-2008-Standard für Gleitkommaarithmetik implementieren oder Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einer Ausführungsform kann der Grafik-Multiprozessor 2096 zusätzlich eine oder mehrere Funktionseinheiten mit fester Funktion oder mit Sonderfunktion enthalten, um spezifische Funktionen wie Kopierrechteck- oder Pixelmischoperationen durchzuführen. In mindestens einer Ausführungsform können einer oder mehrere der GPGPU-Kerne 2062 auch eine Logik mit fester oder spezieller Funktion enthalten.In at least one embodiment, the
In mindestens einer Ausführungsform enthalten die GPGPU-Kerne 2062 SIMD-Logik, die in der Lage ist, einen einzigen Befehl auf mehreren Datensätzen auszuführen. In mindestens einer Ausführungsform können die GPGPU-Kerne 2062 physisch SIMD4-, SIMD8- und SIMD16-Anweisungen und logisch SIMD1-, SIMD2- und SIMD32-Anweisungen ausführen. In mindestens einer Ausführungsform können SIMD-Befehle für die GPGPU-Kerne 2062 zur Kompilierzeit von einem Shader-Compiler generiert werden oder automatisch generiert werden, wenn Programme ausgeführt werden, die für Single Program Multiple Data („SPMD“) oder SIMT-Architekturen geschrieben und kompiliert wurden. In mindestens einer Ausführungsform können mehrere Threads eines für ein SIMT-Ausführungsmodell konfigurierten Programms über eine einzige SIMD-Anweisung ausgeführt werden. Zum Beispiel können in mindestens einer Ausführungsform acht SIMT-Threads, die die gleichen oder ähnliche Operationen ausführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.In at least one embodiment, the
In mindestens einer Ausführungsform ist die Speicher- und Cache-Verbindung 2068 ein Verbindungsnetzwerk, das jede Funktionseinheit des Grafik-Multiprozessors 2096 mit der Registerdatei 2058 und dem gemeinsamen Speicher 2070 verbindet. In mindestens einer Ausführungsform ist die Speicher- und Cache-Verbindung 2068 eine Kreuzschienenverbindung, die es der LSU 2066 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher 2070 und der Registerdatei 2058 durchzuführen. In mindestens einer Ausführungsform kann die Registerdatei 2058 mit derselben Frequenz arbeiten wie die GPGPU-Kerne 2062, so dass die Datenübertragung zwischen den GPGPU-Kernen 2062 und der Registerdatei 2058 eine sehr geringe Latenz aufweist. In mindestens einer Ausführungsform kann der gemeinsame Speicher 2070 verwendet werden, um die Kommunikation zwischen Threads zu ermöglichen, die auf Funktionseinheiten innerhalb des Grafik-Multiprozessors 2096 ausgeführt werden. In mindestens einer Ausführungsform kann der Cachespeicher 2072 z.B. als Datencache verwendet werden, um Texturdaten zu cachen, die zwischen Funktionseinheiten und der Textureinheit 2036 kommuniziert werden. In mindestens einer Ausführungsform kann der gemeinsame Speicher 2070 auch als programmverwalteter Cache verwendet werden. In mindestens einer Ausführungsform können Threads, die auf den GPGPU-Kernen 2062 ausgeführt werden, zusätzlich zu den automatisch zwischengespeicherten Daten, die in dem Cachespeicher 2072 gespeichert sind, programmatisch Daten in dem gemeinsam genutzten Speicher speichern.In at least one embodiment, the memory and
In mindestens einer Ausführungsform ist ein Parallelprozessor oder eine GPGPU, wie hierin beschrieben, kommunikativ mit einem Hostprozessor/mit Kernen gekoppelt, um Grafikoperationen, Operationen des maschinellen Lernens, Musteranalyseoperationen und verschiedene Universal-GPU-Funktionen (GPGPU) zu beschleunigen. In mindestens einer Ausführungsform kann eine GPU über einen Bus oder eine andere Verbindung (z.B. eine Hochgeschwindigkeitsverbindung wie beispielsweise PCIe oder NVLink) mit dem Hostprozessor/mit Kernen kommunikativ gekoppelt sein. In mindestens einer Ausführungsform kann ein Grafikprozessor auf demselben Gehäuse oder Chip wie die Kerne integriert sein und mit den Kernen über einen Prozessorbus/einen Interconnect kommunizieren, der sich innerhalb eines Gehäuses oder eines Chips befindet. In mindestens einer Ausführungsform können Prozessorkerne unabhängig von der Art und Weise, in der ein Grafikprozessor verbunden ist, dem Grafikprozessor Arbeit in Form von Sequenzen von Befehlen/Anweisungen, die in einem WD enthalten sind, zuweisen. In mindestens einer Ausführungsform verwendet die GPU dann dedizierte Schaltkreise/Logik zur effizienten Verarbeitung dieser Befehle/Anweisungen.In at least one embodiment, a parallel processor or GPGPU, as described herein, is communicatively coupled to a host processor/cores to accelerate graphics operations, machine learning operations, pattern analysis operations, and various general purpose GPU (GPGPU) functions. In at least one embodiment, a GPU may be communicatively coupled to the host processor/cores via a bus or other connection (e.g., a high-speed connection such as PCIe or NVLink). In at least one embodiment, a graphics processor may be integrated on the same package or chip as the cores and communicate with the cores via a processor bus/interconnect located within a package or chip. In at least one embodiment, regardless of how a graphics processor is connected, processor cores may assign work to the graphics processor in the form of sequences of commands/instructions included in a WD. In at least one embodiment, the GPU then uses dedicated circuitry/logic to efficiently process these commands/instructions.
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform empfängt der Grafikprozessor 2100 Stapel von Befehlen über die Ringverbindung 2102. In mindestens einer Ausführungsform werden die eingehenden Befehle von einem Befehlsstreamer 2103 in dem Pipeline-Frontend 2104 interpretiert. In mindestens einer Ausführungsform enthält der Grafikprozessor 2100 eine skalierbare Ausführungslogik zur Durchführung der 3D-Geometrieverarbeitung und der Medienverarbeitung über den/die Grafikkern(e) 2180A-2180N. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2103 für 3D-Geometrieverarbeitungsbefehle Befehle an die Geometrie-Pipeline 2136. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2103 für mindestens einige Medienverarbeitungsbefehle Befehle an ein Video-Frontend 2134, das mit einer Medien-Engine 2137 gekoppelt ist. In mindestens einer Ausführungsform umfasst die Medien-Engine 2137 eine Video Quality Engine („VQE“) 2130 für die Video- und Bildnachbearbeitung und eine Multiformat-Kodier-/ Dekodier-Engine („MFX“) 2133 für die hardwarebeschleunigte Kodierung und Dekodierung von Mediendaten. In mindestens einer Ausführungsform erzeugen die Geometrie-Pipeline 2136 und die Medien-Engine 2137 jeweils Ausführungs-Threads für Thread-Ausführungsressourcen, die von mindestens einem Grafikkern 2180A bereitgestellt werden.In at least one embodiment, the
In mindestens einer Ausführungsform enthält der Grafikprozessor 2100 skalierbare Thread-Ausführungsressourcen mit modularen Grafikkernen 2180A-2180N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Subkerne 2150A-550N, 2160A-2160N (manchmal als Kern-Sub-Slices bezeichnet) aufweisen. In mindestens einer Ausführungsform kann der Grafikprozessor 2100 eine beliebige Anzahl von Grafikkernen 2180A bis 2180N aufweisen. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2100 einen Grafikkern 2180A mit mindestens einem ersten Subkern 2150A und einem zweiten Subkern 2160A. In mindestens einer Ausführungsform ist der Grafikprozessor 2100 ein Prozessor mit geringem Stromverbrauch und einem einzigen Subkern (z.B. dem Subkern 2150A). In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2100 mehrere Grafikkerne 2180A-2180N, die jeweils einen Satz erster Subkerne 2150A-2150N und einen Satz zweiter Subkerne 2160A-2160N umfassen. In mindestens einer Ausführungsform enthält jeder Subkern in den ersten Subkernen 2150A-2150N mindestens einen ersten Satz von Ausführungseinheiten („EUs“) 2152A-2152N und Medien-/Textur-Sampler 2154A-2154N. In mindestens einer Ausführungsform enthält jeder Subkern in den zweiten Subkernen 2160A-2160N mindestens einen zweiten Satz von Ausführungseinheiten 2162A-2162N und Samplern 2164A-2164N. In mindestens einer Ausführungsform teilt sich jeder Subkern 2150A-2150N, 2160A-2160N einen Satz von gemeinsam genutzten Ressourcen 2170A-2170N. In mindestens einer Ausführungsform umfassen die gemeinsam genutzten Ressourcen 2170 den gemeinsam genutzten Cachespeicher und die Pixeloperationslogik.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform enthält der Prozessor 2200 ein In-Order-Front-End („Front-End“) 2201 zum Abrufen von auszuführenden Anweisungen und zur Vorbereitung von Anweisungen, die später in der Prozessor-Pipeline zu verwenden sind. In mindestens einer Ausführungsform kann das Front-End 2201 mehrere Einheiten beinhalten. In mindestens einer Ausführungsform holt ein Anweisungs-Vorabrufer bzw. -Prefetcher 2226 Anweisungen aus dem Speicher und leitet sie an einen Anweisungs-Dekodierer 2228 weiter, der seinerseits Anweisungen dekodiert oder interpretiert. In mindestens einer Ausführungsform dekodiert der Anweisungs-Dekodierer 2228 beispielsweise eine empfangene Anweisung in eine oder mehrere Operationen, die als „Mikroanweisungen“ oder „Mikrooperationen“ (auch „mikro-ops“ oder „uops“ genannt) bezeichnet werden, um sie auszuführen. In mindestens einer Ausführungsform zerlegt der Anweisungs-Dekodierer 2228 die Anweisung in einen Op-Code und entsprechende Daten- und Steuerfelder, die von der Mikroarchitektur zur Ausführung von Operationen verwendet werden können. In mindestens einer Ausführungsform kann ein Trace-Cache 2230 dekodierte Uops in programmgeordnete Sequenzen oder Traces in einer Uop-Warteschlange 2234 zur Ausführung zusammenstellen. In mindestens einer Ausführungsform stellt dann, wenn der Trace-Cache 2230 auf eine komplexe Anweisung stößt, ein Mikrocode-ROM 2232 Uops bereit, die zum Abschluss einer Operation benötigt werden.In at least one embodiment,
In mindestens einer Ausführungsform können einige Anweisungen in eine einzige Mikro-Op umgewandelt werden, während andere mehrere Mikro-Ops benötigen, um den vollen Betriebsablauf abzuschließen. In mindestens einer Ausführungsform kann der Anweisungs-Dekodierer 2228 auf den Mikrocode-ROM 2232 zugreifen, wenn mehr als vier Mikro-Ops für die Ausführung einer Anweisung erforderlich sind. In mindestens einer Ausführungsform kann eine Anweisung in eine kleine Anzahl von Mikro-Ops für die Verarbeitung in dem Anweisungs-Dekodierer 2228 dekodiert werden. In mindestens einer Ausführungsform kann eine Anweisung in dem Mikrocode-ROM 2232 gespeichert werden, falls eine Anzahl von Mikro-Ops zur Ausführung der Operation benötigt wird. In mindestens einer Ausführungsform bezieht sich der Trace-Cache 2230 auf ein programmierbares Logik-Array („PLA“) als Einstiegspunkt, um einen korrekten Mikroanweisungszeiger zum Lesen von Mikrocode-Sequenzen zu bestimmen, um einen oder mehrere Anweisungen aus dem Mikrocode-ROM 2232 zu vervollständigen. In mindestens einer Ausführungsform kann das Front-End 2201 der Maschine, nachdem der Mikrocode-ROM 2232 die Sequenzierung von Mikro-Ops für eine Anweisung beendet hat, das Abrufen von Mikro-Ops aus dem Trace-Cache 2230 wieder aufnehmen.In at least one embodiment, some instructions may be converted into a single micro-op, while others may require multiple micro-ops to complete the full flow of operations. In at least one embodiment,
In mindestens einer Ausführungsform kann die Out-of-Order-Ausführungs-Engine („Out of Order Engine“) 2203 Anweisungen für die Ausführung vorbereiten. In mindestens einer Ausführungsform verfügt die Out-of-Order-Ausführungslogik über eine Reihe von Puffern, um den Fluss von Anweisungen zu glätten und neu zu ordnen, um die Leistung zu optimieren, während sie eine Pipeline durchlaufen und für die Ausführung geplant werden. Die Out-of-Order-Ausführungslogik 2203 beinhaltet, ohne darauf beschränkt zu sein, einen Allokator/Register-Umbenenner 2240, eine Speicher-Uop-Warteschlange 2242, eine Ganzzahl-/Gleitkomma-Uop-Warteschlange 2244, einen Speicher-Scheduler 2246, einen schnellen Scheduler 2202, einen langsamen/allgemeinen Gleitkomma-Scheduler („langsamer/allgemeiner FP-Scheduler“) 2204 und einen einfachen Gleitkomma-Scheduler („einfacher FPscheduler“) 2206. In mindestens einer Ausführungsform werden der schnelle Scheduler 2202, der langsame/allgemeine Gleitkomma-Scheduler 2204 und der einfache Gleitkomma-Scheduler 2206 hierin auch gemeinsam als „Uop-Scheduler 2202, 2204, 2206“ bezeichnet. Der Allocator/Register-Umbenenner 2240 weist Maschinenpuffer und Ressourcen zu, die jede Uop zur Ausführung benötigt. In mindestens einer Ausführungsform benennt der Allocator/Register-Umbenenner 2240 logische Register auf Einträge in einer Registerdatei um. In mindestens einer Ausführungsform weist der Allocator/Register-Umbenenner 2240 auch einen Eintrag für jede Uop in einer von zwei Uop-Warteschlangen zu, der Speicher-Uop-Warteschlange 2242 für Speicheroperationen und der Ganzzahl-/Gleitkomma-Uop-Warteschlange 2244 für Nicht-Speicheroperationen, und zwar vor dem Speicher-Scheduler 2246 und den Uop-Schedulern 2202, 2204, 2206. In mindestens einer Ausführungsform bestimmen die Uop-Scheduler 2202, 2204, 2206, wann eine Uop zur Ausführung bereit ist, basierend auf der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, die Uops benötigen, um ihre Operation abzuschließen. In mindestens einer Ausführungsform kann der schnelle Scheduler 2202 in jeder Hälfte des Haupttaktzyklus terminieren, während der langsame/allgemeine Gleitkomma-Scheduler 2204 und der einfache Gleitkomma-Scheduler 2206 einmal pro Hauptprozessortaktzyklus terminieren können. In mindestens einer Ausführungsform arbitrieren die Uop-Scheduler 2202, 2204, 2206 für Versende- bzw. Dispatch-Ports, um Uops für die Ausführung zu planen.In at least one embodiment, the out-of-
In mindestens einer Ausführungsform beinhaltet der Ausführungsblock 2211, ohne Beschränkung darauf, eine Ganzzahl-Registerdatei/ein Bypass-Netzwerk 2208, eine Gleitkommaregisterdatei/ein Bypass-Netzwerk („FP-Registerdatei/ein Bypass-Netzwerk“) 2210, Adresserzeugungseinheiten („AGUs“) 2212 und 2214, schnelle ALUs bzw. S-ALUSs 2216 und 2218, eine langsame ALU bzw. L-ALU 2220, eine Gleitkomma-ALU („FP“) 2222 und eine Gleitkomma-Bewegungseinheit („FP-Move“) 2224. In mindestens einer Ausführungsform werden die Ganzzahl-Registerdatei/das Bypass-Netzwerk 2208 und die Gleitkomma-Registerdatei/das Bypass-Netzwerk 2210 hierin auch als „Registerdateien 2208, 2210“ bezeichnet. In mindestens einer Ausführungsform werden die AGUs 2212 und 2214, die schnellen ALUs 2216 und 2218, die langsame ALU 2220, die Gleitkomma-ALU 2222 und die Gleitkomma-Bewegungseinheit 2224 hierin auch als „Ausführungseinheiten 2212, 2214, 2216, 2218, 2220, 2222 und 2224“ bezeichnet. In mindestens einer Ausführungsform kann ein Ausführungsblock, ohne Beschränkung darauf, eine beliebige Anzahl (einschließlich Null) und Art von Registerdateien, Bypass-Netzwerken, Adresserzeugungseinheiten und Ausführungseinheiten in beliebiger Kombination enthalten.In at least one embodiment,
In mindestens einer Ausführungsform können die Registerdateien 2208, 2210 zwischen den Uop-Schedulern 2202, 2204, 2206 und den Ausführungseinheiten 2212, 2214, 2216, 2218, 2220, 2222 und 2224 angeordnet sein. In mindestens einer Ausführungsform führt das Ganzzahl-Registerdatei/das Bypass-Netzwerk 2208 Ganzzahloperationen durch. In mindestens einer Ausführungsform führt die Gleitkommaregisterdatei/das Bypass-Netzwerk 2210 Gleitkommaoperationen durch. In mindestens einer Ausführungsform kann jede der Registerdateien 2208, 2210, ohne Beschränkung darauf, ein Bypass-Netzwerk beinhalten, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umgehen oder an neue abhängige Uops weiterleiten kann. In mindestens einer Ausführungsform können die Registerdateien 2208, 2210 Daten miteinander austauschen. In mindestens einer Ausführungsform kann das Ganzzahl-Registerdatei/das Bypass-Netzwerk 2208, ohne Beschränkung darauf, zwei separate Registerdateien beinhalten, eine Registerdatei für Daten niedriger Ordnung mit 32 Bits und eine zweite Registerdatei für Daten hoher Ordnung mit 32 Bits. In mindestens einer Ausführungsform kann die Gleitkomma-Registerdatei/das Bypass-Netzwerk 2210, ohne Beschränkung darauf, 128 Bit breite Einträge enthalten, da Gleitkomma-Befehle typischerweise Operanden mit einer Breite von 64 bis 128 Bit haben.In at least one embodiment, register
In mindestens einer Ausführungsform können die Ausführungseinheiten 2212, 2214, 2216, 2218, 2220, 2222, 2224 Anweisungen ausführen. In mindestens einer Ausführungsform speichern Registerdateien 2208, 2210 Ganzzahl- und Gleitkomma-Daten-Operandenwerte, die Mikroanweisungen ausführen müssen. In mindestens einer Ausführungsform kann der Prozessor 2200, ohne Beschränkung darauf, eine beliebige Anzahl und Kombination von Ausführungseinheiten 2212, 2214, 2216, 2218, 2220, 2222, 2224 enthalten. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2222 und die Gleitkomma-Bewegungseinheit 2224 Gleitkomma-, MMX-, SIMD-, AVX- und SSE- oder andere Operationen ausführen. In mindestens einer Ausführungsform kann die Gleitkomma-ALU 2222, ohne Beschränkung darauf, einen 64-Bit-mal-64-Bit-Gleitkomma-Teiler enthalten, um die Mikrooperationen Dividieren, Quadratwurzel und Rest auszuführen. In mindestens einer Ausführungsform können Anweisungen, die einen Gleitkommawert beinhalten, mit Gleitkomma-Hardware verarbeitet werden. In mindestens einer Ausführungsform können ALU-Operationen an die schnellen ALUs 2216, 2218 übergeben werden. In mindestens einer Ausführungsform können die schnellen ALUS 2216, 2218 schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In mindestens einer Ausführungsform gehen die meisten komplexen Ganzzahloperationen an die langsame ALU 2220, da die langsame ALU 2220, ohne Beschränkung darauf, Ganzzahl-Ausführungshardware für Operationen mit langer Latenzzeit enthalten kann, wie z.B. einen Multiplizierer, Verschiebungen, Flag-Logik und Verzweigungsverarbeitung. In mindestens einer Ausführungsform können Speicher-Lade-/Speicher-Operationen von den AGUs 2212, 2214 ausgeführt werden. In mindestens einer Ausführungsform können die schnelle ALU 2216, die schnelle ALU 2218 und die langsame ALU 2220 Ganzzahloperationen an 64-Bit-Datenoperanden durchführen. In mindestens einer Ausführungsform können die schnelle ALU 2216, die schnelle ALU 2218 und die langsame ALU 2220 so implementiert sein, dass sie eine Vielzahl von Datenbitgrößen unterstützen, einschließlich sechzehn, zweiunddreißig, 128, 256, usw. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2222 und die Gleitkomma-Bewegungseinheit („FP MOVE“) 2224 so implementiert sein, dass sie einen Bereich von Operanden mit Bits unterschiedlicher Breite unterstützen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2222 und die Gleitkomma-Bewegungseinheit 2224 mit 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Anweisungen arbeiten.In at least one embodiment,
In mindestens einer Ausführungsform versenden die Uop-Scheduler 2202, 2204, 2206 abhängige Operationen, bevor die Ausführung der übergeordneten Last beendet ist. Da in mindestens einer Ausführungsform UOPs spekulativ geplant und in dem Prozessor 2200 ausgeführt werden können, kann der Prozessor 2200 auch Logik zur Behandlung von Speicherfehlern enthalten. In mindestens einer Ausführungsform kann es dann, wenn eine Datenlast in einem Datencache fehlschlägt, abhängige Operationen in der Pipeline geben, die einen Scheduler mit vorübergehend falschen Daten verlassen haben. In mindestens einer Ausführungsform verfolgt ein Wiedergabemechanismus Anweisungen, die falsche Daten verwenden, und führt sie erneut aus. In mindestens einer Ausführungsform müssen abhängige Operationen möglicherweise erneut abgespielt werden, während unabhängige Operationen zu Ende geführt werden können. In mindestens einer Ausführungsform können Scheduler und Wiedergabemechanismen von mindestens einer Ausführungsform eines Prozessors auch so ausgelegt sein, dass sie Befehlssequenzen für Textstring-Vergleichsoperationen abfangen.In at least one embodiment,
In mindestens einer Ausführungsform kann sich der Begriff „Register“ auf prozessorinterne Speicherplätze beziehen, die als Teil von Anweisungen verwendet werden können, um Operanden zu identifizieren. In mindestens einer Ausführungsform kann es sich bei den Registern um solche handeln, die von außerhalb eines Prozessors (aus der Sicht eines Programmierers) nutzbar sein können. In mindestens einer Ausführungsform brauchen die Register nicht auf einen bestimmten Schaltungstyp beschränkt zu sein. Vielmehr kann ein Register in mindestens einer Ausführungsform Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen ausführen. In mindestens einer Ausführungsform können die hierin beschriebenen Register durch Schaltkreise innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert sein, wie z.B. dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In mindestens einer Ausführungsform speichern Ganzzahlregister 32-Bit-Ganzzahl-Daten. Eine Registerdatei von mindestens einer Ausführungsform enthält auch acht Multimedia-SIMD-Registerfür gepackte Daten.In at least one embodiment, the term “registers” may refer to processor-internal memory locations that may be used as part of instructions to identify operands. In at least one embodiment, the registers may be those that may be usable from outside a processor (from a programmer's perspective). In at least one embodiment, the registers need not be limited to a particular type of circuit. Rather, in at least one embodiment, a register may store data, provide data, and perform the functions described herein. In at least one embodiment, the registers described herein may be implemented by circuits within a processor using any number of different techniques, such as dedicated physical registers, dynamically allocated physical registers using register renaming, combinations of dedicated and dynamically allocated physical registers, etc. In In at least one embodiment, integer registers store 32-bit integer data. A register file of at least one embodiment also includes eight multimedia SIMD packed data registers.
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform repräsentieren die internen Cacheeinheiten 2304A-2304N und die gemeinsam genutzten Cacheeinheiten 2306 eine Cachespeicherhierarchie innerhalb des Prozessors 2300. In mindestens einer Ausführungsform können die Cachespeichereinheiten 2304A-2304N mindestens eine Ebene von Befehls- und Daten-Cache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Mid-Level-Cache, wie z.B. L2, L3, Ebene 4 („L4“) oder andere Cacheebenen, beinhalten, wobei eine höchste Cacheebene vor dem externen Speicher als LLC klassifiziert ist. In mindestens einer Ausführungsform hält die Cache-Kohärenzlogik die Kohärenz zwischen verschiedenen Cacheeinheiten 2306 und 2304A-2304N aufrecht.In at least one embodiment, the
In mindestens einer Ausführungsform kann der Prozessor 2300 auch einen Satz von einer oder mehreren Buscontrollereinheiten 2316 und einen Systemagent-Kern 2310 enthalten. In mindestens einer Ausführungsform verwalten eine oder mehrere Buscontrollereinheiten 2316 einen Satz von Peripheriebussen, wie z.B. einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einer Ausführungsform stellt der Systemagent-Kern 2310 Verwaltungsfunktionen für verschiedene Prozessorkomponenten bereit. In mindestens einer Ausführungsform enthält der Systemagent-Kern 2310 einen oder mehrere integrierte Speichercontroller 2314 zur Verwaltung des Zugriffs auf verschiedene externe Speichervorrichtungen (nicht gezeigt).In at least one embodiment,
In mindestens einer Ausführungsform beinhalten einer oder mehrere der Prozessorkerne 2302A-2302N Unterstützung für gleichzeitiges Multithreading. In mindestens einer Ausführungsform enthält der Systemagent-Kern 2310 Komponenten zum Koordinieren und Betreiben der Prozessorkerne 2302A-2302N während der Multithreading-Verarbeitung. In mindestens einer Ausführungsform kann der Systemagent-Kern 2310 zusätzlich eine Leistungssteuerungseinheit („PCU“) enthalten, die Logik und Komponenten zur Regelung eines oder mehrerer Leistungszustände der Prozessorkerne 2302A-2302N und des Grafikprozessors 2308 beinhaltet.In at least one embodiment, one or more of the
In mindestens einer Ausführungsform enthält der Prozessor 2300 zusätzlich einen Grafikprozessor 2308 zur Ausführung von Grafikverarbeitungsoperationen. In mindestens einer Ausführungsform ist der Grafikprozessor 2308 mit gemeinsam genutzten Cacheeinheiten 2306 und dem Systemagent-Kern 2310 gekoppelt, einschließlich eines oder mehrerer integrierter Speichercontroller 2314. In mindestens einer Ausführungsform enthält der Systemagent-Kern 2310 auch einen Anzeigecontroller 2311, um die Ausgabe des Grafikprozessors an ein oder mehrere gekoppelte Anzeigen zu steuern. In mindestens einer Ausführungsform kann der Anzeigecontroller 2311 auch ein separates Modul sein, das über mindestens eine Verbindung bzw. einen Interconnect mit dem Grafikprozessor 2308 gekoppelt ist, oder kann in den Grafikprozessor 2308 integriert sein.In at least one embodiment,
In mindestens einer Ausführungsform wird eine ringbasierte Verbindungseinheit 2312 verwendet, um interne Komponenten des Prozessors 2300 zu koppeln. In mindestens einer Ausführungsform kann auch eine alternative Verbindungseinheit verwendet werden, z.B. eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken. In mindestens einer Ausführungsform ist der Grafikprozessor 2308 über eine E/A-Verbindung 2313 mit der Ringverbindung 2312 gekoppelt.In at least one embodiment, a ring-based
In mindestens einer Ausführungsform repräsentiert die E/A-Verbindung 2313 mindestens eine von mehreren Arten von E/A-Verbindungen, einschließlich einer On-Package-E/A-Verbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2318, wie z.B. einem eDRAM-Modul, erleichtert. In mindestens einer Ausführungsform verwenden jeder der Prozessorkerne 2302A-2302N und der Grafikprozessor 2308 eingebettete Speichermodule 2318 als gemeinsame LLC.In at least one embodiment, the I/
In mindestens einer Ausführungsform sind die Prozessorkerne 2302A-2302N homogene Kerne, die eine gemeinsame Befehlssatzarchitektur ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2302A-2302N heterogen in Bezug auf die ISA, wobei ein oder mehrere Prozessorkerne 2302A-2302N einen gemeinsamen Befehlssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 2302A-23-02N eine Teilmenge eines gemeinsamen Befehlssatzes oder einen anderen Befehlssatz ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2302A-2302N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einer relativ höheren Leistungsaufnahme mit einem oder mehreren Kernen mit einer niedrigeren Leistungsaufnahme gekoppelt sind. In mindestens einer Ausführungsform kann der Prozessor 2300 auf einem oder mehreren Chips oder als integrierte SoC-Schaltung implementiert sein.In at least one embodiment,
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform beinhaltet der Festfunktionsblock 2430 eine Geometrie/Festfunktions-Pipeline 2436, die von allen Subkernen in dem Grafikprozessor 2400, z.B. in Grafikprozessor-Implementierungen mit geringerer Leistung und/oder geringerem Energieverbrauch, gemeinsam genutzt werden kann. In mindestens einer Ausführungsform beinhaltet die Geometrie/Festfunktions-Pipeline 2436 eine 3D-Festfunktions-Pipeline, eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher sowie einen Unified Return Puffer-Manager, der Unified Return Puffer verwaltet.In at least one embodiment, the fixed
In mindestens einer Ausführungsform beinhaltet der Festfunktionsblock 2430 darüber hinaus eine Grafik-SoC-Schnittstelle 2437, einen Grafik-Mikrocontroller 2438 und eine Medienpipeline 2439. Die Grafik-SoC-Schnittstelle 2437 stellt eine Schnittstelle zwischen dem Grafikkern 2400 und anderen Prozessorkernen innerhalb einer integrierten SoC-Schaltung bereit. In mindestens einer Ausführungsform ist der Grafik-Mikrocontroller 2438 ein programmierbarer Subprozessor, der so konfiguriert werden kann, dass er verschiedene Funktionen des Grafikprozessors 2400 verwaltet, einschließlich Thread-Versendung, Planung und Präemption. In mindestens einer Ausführungsform enthält die Medienpipeline 2439 Logik zur Erleichterung der Dekodierung, Kodierung, Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, einschließlich Bild- und Videodaten. In mindestens einer Ausführungsform implementiert die Medienpipeline 2439 Medienoperationen über Anforderungen an die Rechen- oder Abtastlogik innerhalb der Subkerne 2401-2401 F.In at least one embodiment, the fixed
In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2437 dem Grafikkern 2400 die Kommunikation mit Mehrzweck-Anwendungsprozessorkernen (z.B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen wie einem gemeinsam genutzten LLC-Speicher, System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2437 auch Kommunikation mit Vorrichtungen mit fester Funktion innerhalb eines SoCs ermöglichen, wie z.B. Kamera-Bildgebungs-Pipelines, und ermöglicht sie die Verwendung von und/oder implementiert globale(n) Speicheratome(n), die von einem Grafikkern 2400 und CPUs innerhalb eines SoCs gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2437 auch Energieverwaltungssteuerungen für den Grafikkern 2400 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 2400 und anderen Taktdomänen innerhalb eines SoCs ermöglichen. In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2437 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Dispatcher, die so konfiguriert sind, dass sie Befehle und Anweisungen für jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors bereitstellen. In mindestens einer Ausführungsform können Befehle und Anweisungen an die Medienpipeline 2439 gesendet werden, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und Festfunktions-Pipeline (z.B. die Geometrie- und Festfunktions-Pipeline 2436, die Geometrie- und Festfunktions-Pipeline 2414), wenn Grafikverarbeitungsoperationen durchzuführen sind.In at least one embodiment, the SoC interface 2437 enables the
In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 2438 so konfiguriert sein, dass er verschiedene Planungs- und Verwaltungsaufgaben für den Grafikkern 2400 durchführt. In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 2438 die Planung von Grafik- und/oder Rechenlasten auf verschiedenen parallelen Grafik-Engines in den Arrays 2402A-2402F, 2404A-2404F der Ausführungseinheiten (EU) in den Subkernen 2401A-2401 F durchführen. In mindestens einer Ausführungsform kann Hostsoftware, die auf einem CPU-Kern eines SoC mit Grafikkern 2400 ausgeführt wird, Arbeitslasten an eine von mehreren Grafikprozessor-Doorbells übermitteln, die einen Planungsvorgang auf einer geeigneten Grafik-Engine aufruft. In mindestens einer Ausführungsform umfassen die Planungsvorgänge ein Bestimmen, welche Arbeitslast als nächstes auszuführen ist, ein Übermitteln einer Arbeitslast an einen Befehlsstreamer, ein Vorziehen bestehender Arbeitslasten, die auf einer Engine laufen, ein Überwachen des Fortschritts einer Arbeitslast und ein Benachrichtigen der Hostsoftware, wenn eine Arbeitslast abgeschlossen ist. In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 2438 auch Stromsparzustände oder Leerlaufzustände für den Grafikkern 2400 erleichtern, indem er dem Grafikkern 2400 eine Fähigkeit bereitstellt, Register innerhalb des Grafikkerns 2400 über Stromsparzustandsübergänge hinweg unabhängig von einem Betriebssystem und/oder einer Grafiktreibersoftware auf einem System zu speichern und wiederherzustellen.In at least one embodiment,
In mindestens einer Ausführungsform kann der Grafikkern 2400 mehr oder weniger als die dargestellten Subkerne 2401A-2401 F haben, bis hin zu N modularen Subkernen. Für jeden Satz von N Subkernen kann der Grafikkern 2400 in mindestens einer Ausführungsform auch eine gemeinsam genutzte Funktionslogik 2410, einen gemeinsam genutzten Speicher und/oder Cachespeicher 2412, eine Geometrie-/ Festfunktions-Pipeline 2414 sowie eine zusätzliche Festfunktionslogik 2416 zur Beschleunigung verschiedener Grafik- und Rechenverarbeitungsvorgänge beinhalten. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 2410 Logikeinheiten (z.B. Sampler-, Mathematik- und/oder Inter-Thread-Kommunikationslogik) umfassen, die von allen N Subkernen innerhalb des Grafikkerns 2400 gemeinsam genutzt werden können. Der gemeinsam genutzte Speicher und/oder Cachespeicher 2412 kann ein LLC für N Subkerne 2401 A-2401 F innerhalb des Grafikkerns 2400 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den mehrere Subkerne zugreifen können. In mindestens einer Ausführungsform kann die Geometrie-/Festfunktions-Pipeline 2414 anstelle der Geometrie-ZFestfunktions-Pipeline 2436 innerhalb des Festfunktionsblocks 2430 enthalten sein und kann gleiche oder ähnliche Logikeinheiten beinhalten.In at least one embodiment, the
In mindestens einer Ausführungsform beinhaltet der Grafikkern 2400 zusätzliche feste Funktionslogik 2416, die verschiedene feste Funktionsbeschleunigungslogik zur Verwendung durch den Grafikkern 2400 enthalten kann. In mindestens einer Ausführungsform umfasst die zusätzliche Festfunktionslogik 2416 eine zusätzliche Geometrie-Pipeline für die Verwendung im positionsabhängigen Shading. Bei positionsabhängigem Shading existieren mindestens zwei Geometrie-Pipelines, d.h. eine vollständige Geometrie-Pipeline innerhalb der Geometrie/Festfunktions-Pipeline 2416, 2436, und eine Cull-Pipeline, bei der es sich um eine zusätzliche Geometrie-Pipeline handelt, die in der zusätzlichen Festfunktionslogik 2416 enthalten sein kann. In mindestens einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version einer vollständigen Geometrie-Pipeline. In mindestens einer Ausführungsform können eine vollständige Pipeline und eine Cull-Pipeline unterschiedliche Instanzen einer Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. In mindestens einer Ausführungsform kann positionsabhängiges Shading lange Cull-Läufe von verworfenen Dreiecken ausblenden, wodurch das Shading in einigen Fällen früher abgeschlossen werden kann. Zum Beispiel kann in mindestens einer Ausführungsform die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 2416 Positions-Shader parallel zu einer Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als eine vollständige Pipeline, da eine Cull-Pipeline ein Positionsattribut von Vertices abruft und schattiert, ohne eine Rasterung und ein Rendering von Pixeln in einen Frame-Buffer durchzuführen. In mindestens einer Ausführungsform kann eine Cull-Pipeline generierte kritische Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke gecullt sind. In mindestens einer Ausführungsform kann eine vollständige Pipeline (die in diesem Fall als eine Replay-Pipeline bezeichnet werden kann) Sichtbarkeitsinformationen verwenden, um gecullte Dreiecke zu überspringen, um nur sichtbare Dreiecke zu schattieren, die schließlich an eine Rasterisierungsphase übergeben werden.In at least one embodiment,
In mindestens einer Ausführungsform kann die zusätzliche Festfunktionslogik 2416 auch eine allgemeine Verarbeitungsbeschleunigungslogik, wie z.B. eine Festfunktions-Matrixmultiplikationslogik, zur Beschleunigung von CUDA-Programmen beinhalten.In at least one embodiment, the additional fixed-
In mindestens einer Ausführungsform enthält jeder Grafiksubkern 2401A-2401 F einen Satz von Ausführungsressourcen, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen im Ansprechen auf Anforderungen von Grafikpipeline-, Medienpipeline- oder Shader-Programmen durchzuführen. In mindestens einer Ausführungsform beinhalten die Grafiksubkerne 2401A-2401 F mehrere EU-Arrays 2402A-2402F, 2404A-2404F, Thread-Dispatch- und Inter-Thread-Kommunikationslogik („TD/IC“) 2403A-2403F, einen 3D (z.B. Textur-)- Sampler 2405A-2405F, einen Media-Sampler 2406A-2406F, einen Shader-Prozessor 2407A-2407F und gemeinsam genutzten lokalen Speicher („SLM“) 2408A-2408F. Die EU-Arrays 2402A-2402F, 2404A-2404F enthalten jeweils mehrere Ausführungseinheiten, welche GPGPUs sind, die in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienste einer Grafik-, Medien- oder Rechenoperation durchzuführen, einschließlich Grafik-, Medien- oder Rechen-Shader-Programmen. In mindestens einer Ausführungsform führt die TD/IC-Logik 2403A-2403F lokale Thread-Dispatch- und Thread-Steuerungsoperationen für Ausführungseinheiten innerhalb eines Subkerns durch und erleichtert Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Subkerns ausgeführt werden. In mindestens einer Ausführungsform kann der 3D-Sampler 2405A-2405F Textur- oder andere auf 3D-Grafik bezogene Daten in den Speicher einlesen. In mindestens einer Ausführungsform kann der 3D-Sampler Texturdaten auf der Grundlage eines konfigurierten Abtaststatus und eines Texturformats, das mit einer bestimmten Textur verbunden ist, unterschiedlich lesen. In mindestens einer Ausführungsform kann der Media-Sampler 2406A-2406F ähnliche Lesevorgänge auf der Grundlage eines Typs und eines Formats durchführen, die mit den Mediendaten verbunden sind. In mindestens einer Ausführungsform kann jeder Grafik-Subkern 2401A-2401 F abwechselnd einen vereinheitlichten 3D- und Medien-Sampler enthalten. In mindestens einer Ausführungsform können Threads, die auf Ausführungseinheiten innerhalb jedes der Subkerne 2401A-2401 F ausgeführt werden, den gemeinsamen lokalen Speicher 2408A-2408F innerhalb jedes Subkerns nutzen, damit Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher ausgeführt werden können.In at least one embodiment, each graphics subcore 2401A-2401F includes a set of execution resources that can be used to perform graphics, media, and computing operations in response to requests from graphics pipeline, media pipeline, or shader programs. In at least one embodiment, the graphics subcores 2401A-2401F include
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2500 so konfiguriert, dass sie High Performance Computing („HPC“)-, Rechenzentrums- und Machine Learning-Anwendungen beschleunigen. In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2500 für die Beschleunigung von CUDA-Programmen konfiguriert. In mindestens einer Ausführungsform beinhaltet die PPU 2500, ohne Beschränkung darauf, eine E/A-Einheit 2506, eine Frontend-Einheit 2510, eine Scheduler-Einheit 2512, eine Arbeitsverteilungseinheit 2514, einen Hub 2516, eine Kreuzschiene bzw. Crossbar („Xbar“) 2520, einen oder mehrere Universalverarbeitungscluster („GPCs“) 2518 und eine oder mehrere Partitionseinheiten („Speicherpartitionseinheiten“) 2522. In mindestens einer Ausführungsform ist die PPU 2500 mit einem Hostprozessor oder anderen PPUs 2500 über eine oder mehrere Hochgeschwindigkeits-GPU-Verbindungen („GPU-Interconnects“) 2508 verbunden. In mindestens einer Ausführungsform ist die PPU 2500 über einen Systembus oder eine Zwischenverbindung bzw. einen Interconnect 2502 mit einem Hostprozessor oder anderen Peripheriegeräten verbunden. In mindestens einer Ausführungsform ist die PPU 2500 mit einem lokalen Speicher verbunden, der ein oder mehrere Speichervorrichtungen („Speicher“) 2504 umfasst. In mindestens einer Ausführungsform beinhalten die Speichervorrichtungen 2504, ohne Beschränkung darauf, eine oder mehrere DRAM-Vorrichtungen (Dynamic Random Access Memory). In mindestens einer Ausführungsform sind eine oder mehrere DRAM-Vorrichtungen als Hochbandbreitenspeicher („HBM“)-Subsysteme konfiguriert und/oder konfigurierbar, wobei mehrere DRAM-Chips innerhalb jeder Vorrichtung gestapelt sind.In at least one embodiment, one or
In mindestens einer Ausführungsform kann sich die Hochgeschwindigkeits-GPU-Verbindung 2508 auf eine drahtgebundene Mehrspur-Kommunikations-verbindung beziehen, die von Systemen verwendet wird, um zu skalieren und die eine oder mehrere PPUs 2500 in Kombination mit einer oder mehreren CPUs umfassen, die Cache-Kohärenz zwischen PPUs 2500 und CPUs sowie CPU-Mastering unterstützen. In mindestens einer Ausführungsform werden Daten und/oder Befehle über die Hochgeschwindigkeits-GPU-Verbindung 2508 durch den Hub 2516 zu/von anderen Einheiten der PPU 2500, wie z.B. einer oder mehreren Kopiermaschinen, Videokodierern, Video-Dekodierern, Energieverwaltungs-einheiten und anderen Komponenten, die in
In mindestens einer Ausführungsform ist die E/A-Einheit 2506 so konfiguriert, dass sie Kommunikationen (z.B. Befehle, Daten) von einem Hostprozessor (in
In mindestens einer Ausführungsform dekodiert die E/A-Einheit 2506 über den Systembus 2502 empfangene Pakete. In mindestens einer Ausführungsform repräsentieren mindestens einige Pakete Befehle, die so konfiguriert sind, dass sie die PPU 2500 veranlassen, verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform sendet die E/A-Einheit 2506 dekodierte Befehle an verschiedene andere Einheiten der PPU 2500, wie durch Befehle vorgegeben. In mindestens einer Ausführungsform werden Befehle an die Frontend-Einheit 2510 und/oder an den Hub 2516 oder andere Einheiten der PPU 2500, wie z.B. eine oder mehrere Kopiermaschinen, einen Videokodierer, einen Video-Dekodierer, eine Energieverwaltungseinheit usw., (in
In mindestens einer Ausführungsform kodiert ein von dem Hostprozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 2500 Arbeitslasten zur Verarbeitung bereitstellt. In mindestens einer Ausführungsform umfasst eine Arbeitslast Anweisungen und Daten, die von diesen Anweisungen zu verarbeiten sind. In mindestens einer Ausführungsform ist der Puffer eine Region in einem Speicher, auf die sowohl ein Hostprozessor als auch die PPU 2500 zugreifen können (z.B. Lesen/Schreiben) - eine Host-Schnittstelleneinheit kann so konfiguriert sein, dass sie auf einen Puffer in einem mit dem Systembus 2502 verbundenen Systemspeicher über Speicheranforderungen zugreift, die über den Systembus 2502 von der E/A-Einheit 2506 übertragen werden. In mindestens einer Ausführungsform schreibt ein Hostprozessor einen Befehlsstrom in einen Puffer und überträgt dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 2500, so dass die Frontend-Einheit 2510 Zeiger auf einen oder mehrere Befehlsströme empfängt und einen oder mehrere Befehlsströme verwaltet, wobei sie Befehle aus den Befehlsströmen liest und Befehle an verschiedene Einheiten der PPU 2500 weiterleitet.In at least one embodiment, a program executed by the host processor encodes an instruction stream in a buffer that provides workloads to the
In mindestens einer Ausführungsform ist die Frontend-Einheit 2510 mit der Scheduler-Einheit 2512 gekoppelt, die verschiedene GPCs 2518 zur Verarbeitung von Aufgaben konfiguriert, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einer Ausführungsform ist die Scheduler-Einheit 2512 so konfiguriert, dass sie Zustandsinformationen mit Bezug zu verschiedenen Aufgaben nachverfolgt, die von der Scheduler-Einheit 2512 verwaltet werden, wobei die Zustandsinformationen angeben können, welchem der GPCs 2518 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, welche Prioritätsstufe der Aufgabe zugeordnet ist und so weiter. In mindestens einer Ausführungsform verwaltet die Scheduler-Einheit 2512 die Ausführung einer Vielzahl von Aufgaben auf einem oder mehreren GPCs 2518.In at least one embodiment, the
In mindestens einer Ausführungsform ist die Scheduler-Einheit 2512 mit der Arbeitsverteilungseinheit 2514 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 2518 versendet. In mindestens einer Ausführungsform nachverfolgt die Arbeitsverteilungseinheit 2514 eine Anzahl geplanter Aufgaben, die von der Scheduler-Einheit 2512 empfangen wurden, und verwaltet die Arbeitsverteilungseinheit 2514 einen Pool ausstehender Aufgaben und einen Pool aktiver Aufgaben für jeden GPC 2518. In mindestens einer Ausführungsform umfasst der Pool anstehender Aufgaben eine Anzahl von Slots (z.B. 32 Slots), die Aufgaben enthalten, die zur Verarbeitung durch einen bestimmten GPC 2518 zugewiesen sind; der Pool aktiver Aufgaben kann eine Anzahl von Slots (z.B. 4 Slots) für Aufgaben umfassen, die aktiv von den GPCs 2518 verarbeitet werden, so dass dann, wenn einer der GPCs 2518 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem Pool aktiver Aufgaben für den GPC 2518 entfernt wird und eine der anderen Aufgaben aus dem Pool anstehender Aufgaben ausgewählt und zur Ausführung auf dem GPC 2518 eingeplant wird. In mindestens einer Ausführungsform wird dann, wenn eine aktive Aufgabe auf dem GPC 2518 im Leerlauf ist, z.B. während auf die Auflösung einer Datenabhängigkeit gewartet wird, die aktive Aufgabe aus dem GPC 2518 entfernt und in einen Pool anstehender Aufgaben zurückgegeben, während eine andere Aufgabe im Pool anstehender Aufgaben ausgewählt und zur Ausführung auf dem GPC 2518 eingeplant wird.In at least one embodiment, the
In mindestens einer Ausführungsform kommuniziert die Arbeitsverteilungs-einheit 2514 mit einem oder mehreren GPCs 2518 über die Kreuzschiene bzw. XBar 2520. In mindestens einer Ausführungsform ist die XBar 2520 ein Interconnect- bzw. Verbindungsnetzwerk, das viele Einheiten der PPU 2500 mit anderen Einheiten der PPU 2500 koppelt und so konfiguriert sein kann, dass es die Arbeitsverteilungseinheit 2514 mit einem bestimmten GPC 2518 koppelt. In mindestens einer Ausführungsform können auch eine oder mehrere andere Einheiten der PPU 2500 über den Hub 2516 mit der XBar 2520 verbunden sein.In at least one embodiment, the
In mindestens einer Ausführungsform werden Aufgaben von der Scheduler-Einheit 2512 verwaltet und von der Arbeitsverteilungseinheit 2514 an einen der GPCs 2518 weitergeleitet. Der GPC 2518 ist so konfiguriert, dass er die Aufgabe verarbeitet und Ergebnisse erzeugt. In mindestens einer Ausführungsform können die Ergebnisse von anderen Aufgaben innerhalb des GPC 2518 verbraucht, über die XBar 2520 an einen anderen GPC 2518 weitergeleitet oder in dem Speicher 2504 gespeichert werden. In mindestens einer Ausführungsform können Ergebnisse in den Speicher 2504 über Partitionseinheiten 2522 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 2504 implementieren. In mindestens einer Ausführungsform können die Ergebnisse über die Hochgeschwindigkeits-GPU-Verbindung 2508 an eine andere PPU 2504 oder CPU übertragen werden. In mindestens einer Ausführungsform umfasst die PPU 2500, ohne Beschränkung darauf, eine Anzahl U von Partitionseinheiten 2522, die gleich der Anzahl der mit der PPU 2500 verbundenen separaten und unterschiedlichen Speichervorrichtungen 2504 ist.In at least one embodiment, tasks are managed by the
In mindestens einer Ausführungsform führt ein Hostprozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle („API“) implementiert, die es einer oder mehreren auf dem Hostprozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 2500 zu planen. In mindestens einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 2500 ausgeführt und stellt die PPU 2500 Isolierung, Dienstgüte („QoS“) und unabhängige Adressräume für mehrere Rechenanwendungen bereit. In mindestens einer Ausführungsform generiert eine Anwendung Anweisungen (z.B. in Form von API-Aufrufen), die einen Treiberkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 2500 zu generieren, und gibt der Treiberkern Aufgaben an einen oder mehrere Streams aus, die von der PPU 2500 verarbeitet werden. In mindestens einer Ausführungsform umfasst jede Aufgabe eine oder mehrere Gruppen von zusammenhängenden Threads, die als Warp bezeichnet werden können. In mindestens einer Ausführungsform umfasst ein Warp eine Vielzahl von zusammenhängenden Threads (z.B. 32 Threads), die parallel ausgeführt werden können. In mindestens einer Ausführungsform können sich kooperierende Threads auf eine Vielzahl von Threads beziehen, die Anweisungen zur Durchführung einer Aufgabe enthalten und die Daten über einen gemeinsamen Speicher austauschen.In at least one embodiment, a host processor executes a driver core that implements an application programming interface (“API”) that allows one or more applications running on the host processor to schedule operations for execution on the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform wird der Betriebsablauf des GPC 2600 von dem Pipeline-Manager 2602 gesteuert. In mindestens einer Ausführungsform verwaltet der Pipeline-Manager 2602 die Konfiguration eines oder mehrerer DPCs 2606 zur Verarbeitung von Aufgaben, die dem GPC 2600 zugewiesen sind. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2602 mindestens eine des einen oder der mehreren DPCs 2606, um mindestens einen Teil einer Grafik-Rendering-Pipeline zu implementieren. In mindestens einer Ausführungsform ist der DPC 2606 so konfiguriert, dass er ein Vertex-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor („SM“) 2614 ausführt. In mindestens einer Ausführungsform ist der Pipeline-Manager 2602 so konfiguriert, dass er von einer Arbeitsverteilungseinheit empfangene Pakete an entsprechende logische Einheiten innerhalb des GPC 2600 weiterleitet, und in mindestens einer Ausführungsform können einige Pakete an Hardwareeinheiten mit fester Funktion in dem PROP 2604 und/oder in der Raster-Engine 2608 weitergeleitet werden, während andere Pakete an die DPCs 2606 zur Verarbeitung durch eine Primitiv-Engine 2612 oder den SM 2614 weitergeleitet werden können. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2602 mindestens einen der DPCs 2606, um eine Rechenpipeline zu implementieren. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2602 mindestens einen der DPCs 2606, um mindestens einen Teil eines CUDA-Programms auszuführen.In at least one embodiment, the operation of the GPC 2600 is controlled by the
In mindestens einer Ausführungsform ist die PROP-Einheit 2604 so konfiguriert, dass sie von der Raster-Engine 2608 und den DPCs 2606 erzeugte Daten an eine Raster Operations („ROP“)-Einheit in einer Partitionseinheit weiterleitet, wie z. B. die vorstehend in Verbindung mit
In mindestens einer Ausführungsform umfasst jeder in dem GPC 2600 enthaltene DPC 2606, ohne Beschränkung darauf, einen M-Pipe-Controller („MPC“) 2610, eine Primitiv-Engine 2612, einen oder mehrere SMs 2614 und jede geeignete Kombination davon. In mindestens einer Ausführungsform steuert der MPC 2610 den Betriebsablauf des DPC 2606, indem er von dem Pipeline-Manager 2602 empfangene Pakete an entsprechende Einheiten in dem DPC 2606 weiterleitet. In mindestens einer Ausführungsform werden Pakete, die einem Vertex zugeordnet sind, an die Primitive Engine 2612 weitergeleitet, die so konfiguriert ist, dass sie Vertexattribute, die dem Vertex zugeordnet sind, aus dem Speicher abruft; demgegenüber können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 2614 übertragen werden.In at least one embodiment, each
In mindestens einer Ausführungsform umfasst der SM 2614, ohne Beschränkung darauf, einen programmierbaren Streamingprozessor, der so konfiguriert ist, dass er Aufgaben verarbeitet, die durch eine Anzahl von Threads repräsentiert werden. In mindestens einer Ausführungsform ist der SM 2614 mit mehreren Threads ausgestattet und so konfiguriert, dass er mehrere Threads (z.B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführt und eine SIMD-Architektur implementiert, bei der jeder Thread in einer Gruppe von Threads (z.B. ein Warp) so konfiguriert ist, dass er einen anderen Satz von Daten auf der Grundlage desselben Satzes von Anweisungen verarbeitet. In mindestens einer Ausführungsform führen alle Threads in einer Gruppe von Threads dieselben Anweisungen aus. In mindestens einer Ausführungsform implementiert der SM 2614 eine SIMT-Architektur, bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage desselben Satzes von Anweisungen verarbeitet, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In mindestens einer Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden Warp beibehalten, was Gleichzeitigkeit zwischen Warps und serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb eines Warps divergieren. In einer anderen Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden einzelnen Thread beibehalten, wodurch gleiche Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht wird. In mindestens einer Ausführungsform wird ein Ausführungsstatus für jeden einzelnen Thread beibehalten, und können Threads, die die gleichen Anweisungen ausführen, zur besseren Effizienz zusammengeführt und parallel ausgeführt werden. Mindestens eine Ausführungsform des SM 2614 wird in Verbindung mit
In mindestens einer Ausführungsform stellt die MMU 2618 eine Schnittstelle zwischen dem GPC 2600 und einer Speicherpartitionseinheit (z.B. der Partitionseinheit 2522 in
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann sich „kooperative Gruppen“ auf ein Programmiermodell zum Organisieren von Gruppen kommunizierender Threads beziehen, das es Entwicklern ermöglicht, Granularität auszudrücken, mit der Threads kommunizieren, und so reichhaltigere, effizientere parallele Dekompositionen zu ermöglichen. In mindestens einer Ausführungsform unterstützen kooperative Start-APIs eine Synchronisierung zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. In mindestens einer Ausführungsform bieten APIs herkömmlicher Programmiermodelle ein einziges, einfaches Konstrukt zur Synchronisierung kooperierender Threads: eine Sperre über alle Threads eines Thread-Blocks (z.B. die Funktion syncthreads( )). In mindestens einer Ausführungsform können Programmierer jedoch Gruppen von Threads mit einer kleineren Granularität als der des Thread-Blocks definieren und innerhalb definierter Gruppen synchronisieren, um höhere Leistung, Designflexibilität und Software-Wiederverwendung in Form von gemeinsamen gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einer Ausführungsform ermöglichen es kooperative Gruppen Programmierern, Gruppen von Threads explizit auf Subblock- und Multiblock-Granularität zu definieren und kollektive Operationen wie beispielsweise Synchronisation auf Threads in einer kooperativen Gruppe durchzuführen. In mindestens einer Ausführungsform ist eine Subblock-Granularität so klein wie ein einzelner Thread. In mindestens einer Ausführungsform unterstützt ein Programmiermodell eine saubere Komposition über Softwaregrenzen hinweg, so dass Bibliotheken und Utility-Funktionen innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen über Konvergenz treffen zu müssen. In mindestens einer Ausführungsform ermöglichen kooperative Gruppenprimitive neue Muster kooperativer Parallelität, einschließlich, ohne Beschränkung darauf, Produzenten-Verbraucher-Parallelität, opportunistischer Parallelität und globaler Synchronisierung über ein gesamtes Gitter von Thread-Blöcken.In at least one embodiment, "cooperative groups" may refer to a programming model for organizing groups of communicating threads, allowing developers to express granularity at which threads communicate, enabling richer, more efficient parallel decompositions. In at least one embodiment, cooperative startup APIs support synchronization between thread blocks to execute parallel algorithms. In at least one embodiment, APIs of traditional programming models provide a single, simple construct for synchronizing cooperating threads: a lock across all threads of a thread block (e.g., the syncthreads() function). However, in at least one embodiment, programmers may define groups of threads at a granularity smaller than that of the thread block and synchronize within defined groups to enable higher performance, design flexibility, and software reuse in the form of common group-wide functional interfaces. In at least one embodiment, cooperative groups enable programmers to explicitly define groups of threads at subblock and multiblock granularity and to perform collective operations such as synchronization on threads in a cooperative group. In at least one embodiment, subblock granularity is as small as a single thread. In at least one embodiment, a programming model supports clean composition across software boundaries so that libraries and utility functions can securely synchronize within their local context without making assumptions about convergence to have to. In at least one embodiment, cooperative group primitives enable new patterns of cooperative parallelism, including, but not limited to, producer-consumer parallelism, opportunistic parallelism, and global synchronization across an entire grid of thread blocks.
In mindestens einer Ausführungsform ist eine Dispatcheinheit 2706 so konfiguriert, dass sie Befehle an eine oder mehrere Funktionseinheiten überträgt, und beinhaltet die Schedulereinheit 2704, ohne Beschränkung darauf, zwei Dispatcheinheiten 2706, die es ermöglichen, dass zwei verschiedene Befehle aus demselben Warp während jedes Taktzyklus versendet werden. In mindestens einer Ausführungsform umfasst jede Schedulereinheit 2704 eine einzelne Dispatcheinheit 2706 oder zusätzliche Dispatcheinheiten 2706.In at least one embodiment, a
In mindestens einer Ausführungsform enthält jeder SM 2700, ohne Beschränkung darauf, eine Registerdatei 2708, die einen Satz von Registern für Funktionseinheiten des SM 2700 bereitstellt. In mindestens einer Ausführungsform ist die Registerdatei 2708 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein dedizierter Teil der Registerdatei 2708 zugeordnet ist. In mindestens einer Ausführungsform ist die Registerdatei 2708 zwischen verschiedenen Warps aufgeteilt, die von dem SM 2700 ausgeführt werden, und stellt die Registerdatei 2708 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten verbunden sind. In mindestens einer Ausführungsform umfasst jeder SM 2700, ohne Beschränkung darauf, eine Vielzahl von L Verarbeitungskernen 2710. In mindestens einer Ausführungsform beinhaltet der SM 2700, ohne Beschränkung darauf, eine große Anzahl (z.B. 128 oder mehr) von unterschiedlichen Verarbeitungskernen 2710. In mindestens einer Ausführungsform beinhaltet jeder Verarbeitungskern 2710, ohne Beschränkung darauf, eine voll gepipelte, einfachpräzise, doppeltpräzise und/oder gemischtpräzise Verarbeitungseinheit, die, ohne Beschränkung darauf, eine arithmetische Gleitkomma-Logikeinheit und eine arithmetische Ganzzahl-Logikeinheit umfasst. In mindestens einer Ausführungsform implementieren die Gleitkomma-Arithmetik-Logikeinheiten den Standard IEEE 754-2008 für Gleitkomma-Arithmetik. In mindestens einer Ausführungsform beinhalten die Verarbeitungskerne 2710, ohne Beschränkung darauf, 64 Gleitkommakerne mit einfacher Genauigkeit (32 Bit), 64 Ganzzahlkerne, 32 Gleitkommakerne mit doppelter Genauigkeit (64 Bit) und 8 Tensorkerne.In at least one embodiment, each
In mindestens einer Ausführungsform sind Tensorkerne so konfiguriert, dass sie Matrixoperationen durchführen. In mindestens einer Ausführungsform sind ein oder mehrere Tensorkerne in den Verarbeitungskernen 2710 enthalten. In mindestens einer Ausführungsform sind Tensorkerne so konfiguriert, dass sie eine Deep-Learning-Matrixarithmetik durchführen, wie z.B. Faltungsoperationen für das Training und die Inferenzierung neuronaler Netze. In mindestens einer Ausführungsform arbeitet jeder Tensorkern auf einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation D = A X B + C durch, wobei A, B, C und D 4x4-Matrizen sind.In at least one embodiment, tensor cores are configured to perform matrix operations. In at least one embodiment, one or more tensor cores are included in the
In mindestens einer Ausführungsform sind die Matrixmultiplikationseingänge A und B 16-Bit-Gleitkommamatrizen und sind die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen. In mindestens einer Ausführungsform arbeiten die Tensorkerne auf 16-Bit-Gleitkomma-Eingangsdaten mit 32-Bit-Gleitkomma-Akkumulation. In mindestens einer Ausführungsform verwendet die 16-Bit-Gleitkommamultiplikation 64 Operationen und ergibt ein Produkt mit voller Genauigkeit, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit anderen Zwischenprodukten für eine 4x4x4-Matrixmultiplikation akkumuliert wird. In mindestens einer Ausführungsform werden Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. In mindestens einer Ausführungsform stellt eine API, wie z.B. eine CUDA-C++ API, spezialisierte Operationen zum Laden, Multiplizieren und Akkumulieren von Matrizen und zum Speichern von Matrizen bereit, um Tensorkerne aus einem CUDA-C++ Programm heraus effizient zu nutzen. In mindestens einer Ausführungsform geht, auf der CUDA-Ebene, eine Schnittstelle auf Warp-Ebene von Matrizen der Größe 16x16 aus, die sich über alle 32 Threads eines Warps erstrecken.In at least one embodiment, the matrix multiplication inputs A and B are 16-bit floating-point matrices and the accumulation matrices C and D are 16-bit floating-point or 32-bit floating-point matrices. In at least one embodiment, the tensor cores operate on 16-bit floating-point input data with 32-bit floating-point accumulation. In at least one embodiment, 16-bit floating point multiplication uses 64 operations and yields a full precision product that is then accumulated using 32-bit floating point addition with other intermediate products for a 4x4x4 matrix multiplication. In at least one embodiment, tensor cores are used to perform much larger two-dimensional or higher-dimensional matrix operations built from these smaller elements. In at least one embodiment, an API, such as a CUDA-C++ API, provides specialized operations for loading, multiplying, accumulating, and storing matrices to efficiently utilize tensor cores from within a CUDA-C++ program. In at least one embodiment, at the CUDA level, a warp level interface assumes matrices of size 16x16 spanning all 32 threads of a warp.
In mindestens einer Ausführungsform umfasst jeder SM 2700, ohne Beschränkung darauf, M SFUs 2712, die spezielle Funktionen ausführen (z.B. Attributauswertung, reziproke Quadratwurzel und dergleichen). In mindestens einer Ausführungsform beinhalten die SFUs 2712, ohne Beschränkung darauf, eine Baumdurchlaufeinheit, die so konfiguriert ist, dass sie eine hierarchische Baumdatenstruktur durchläuft. In mindestens einer Ausführungsform beinhalten die SFUs 2712, ohne Beschränkung darauf, eine Textureinheit, die so konfiguriert ist, dass sie Texturabbildungsfilterungsoperationen durchführt. In mindestens einer Ausführungsform sind Textureinheiten so konfiguriert, dass sie Texturkarten (z.B. ein 2D-Array von Texeln) aus dem Speicher laden und die Texturkarten abtasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die von dem SM 2700 ausgeführt werden. In mindestens einer Ausführungsform werden die Texturkarten in dem gemeinsamen Speicher/L1-Cache 2718 gespeichert. In mindestens einer Ausführungsform implementieren Textureinheiten Texturoperationen, wie z.B. Filteroperationen unter Verwendung von Mip-Maps (z.B. Texturkarten mit unterschiedlichen Detailstufen). In mindestens einer Ausführungsform umfasst jeder SM 2700, ohne Beschränkung darauf, zwei Textureinheiten.In at least one embodiment, each
In mindestens einer Ausführungsform umfasst jeder SM 2700, ohne Beschränkung darauf, N LSUs 2714, die Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher/L1-Cache 2718 und der Registerdatei 2708 implementieren. In mindestens einer Ausführungsform umfasst jeder SM 2700, ohne Beschränkung darauf, ein Verbindungsnetzwerk 2716, das jede der Funktionseinheiten mit der Registerdatei 2708 und die LSU 2714 mit der Registerdatei 2708 und dem gemeinsamen Speicher/L1-Cache 2718 verbindet. In mindestens einer Ausführungsform ist das Verbindungsnetzwerk 2716 eine Kreuzschiene, die so konfiguriert werden kann, dass sie jede der Funktionseinheiten mit jedem der Register in der Registerdatei 2708 verbindet und die LSUs 2714 mit der Registerdatei 2708 und Speicherplätzen in dem gemeinsamen Speicher/L1-Cache 2718 verbindet.In at least one embodiment, each
In mindestens einer Ausführungsform ist der gemeinsam genutzte Speicher/L1-Cache 2718 ein Array von On-Chip-Speicher, der die Datenspeicherung und Kommunikation zwischen dem SM 2700 und einer Primitiv-Engine sowie zwischen Threads in dem SM 2700 ermöglicht. In mindestens einer Ausführungsform umfasst der gemeinsam genutzte Speicher/L1-Cache 2718, ohne Beschränkung darauf, 128 KB Speicherkapazität und befindet sich in einem Pfad von dem SM 2700 zu einer Partitionseinheit. In mindestens einer Ausführungsform wird der gemeinsame Speicher/L1-Cache 2718 zum Zwischenspeichern von Lese- und Schreibvorgängen verwendet. In mindestens einer Ausführungsform sind einer oder mehrere von gemeinsamem Speicher/L1-Cache 2718, L2-Cache und Arbeitsspeicher Sicherungsspeicher.In at least one embodiment, shared memory/
In mindestens einer Ausführungsform stellt die Kombination von Datencache- und Shared-Memory-Funktionalität in einem einzigen Speicherblock eine verbesserte Leistung für beide Arten von Speicherzugriffen bereit. In mindestens einer Ausführungsform wird die Kapazität von Programmen, die den gemeinsam genutzten Speicher nicht verwenden, als Cache genutzt oder ist dazu nutzbar, derart, dass beispielsweise dann, wenn der gemeinsam genutzte Speicher so konfiguriert ist, dass er die Hälfte der Kapazität nutzt, Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen können. In mindestens einer Ausführungsform ermöglicht die Integration in den gemeinsam genutzten Speicher/L1-Cache 2718, dass der gemeinsam genutzte Speicher/L1-Cache 2718 als eine Leitung mit hohem Durchsatz für Streaming-Daten fungiert und gleichzeitig einen Zugriff mit hoher Bandbreite und niedriger Latenz auf häufig wiederverwendete Daten ermöglicht. In mindestens einer Ausführungsform kann bei der Konfiguration für parallele Universalberechnungen eine einfachere Konfiguration als bei der Grafikverarbeitung verwendet werden. In mindestens einer Ausführungsform werden GPUs mit festen Funktionen umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In mindestens einer Ausführungsform und in einer Konfiguration für parallele Berechnungen für allgemeine Zwecke weist eine Arbeitsverteilungseinheit Blöcke von Threads direkt den DPCs zu und verteilt sie. In mindestens einer Ausführungsform führen Threads in einem Block dasselbe Programm aus, wobei eine eindeutige Thread-ID in einer Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 2700 zur Ausführung eines Programms und zur Durchführung von Berechnungen, der gemeinsame Speicher/L1-Cache 2718 zur Kommunikation zwischen Threads und die LSU 2714 zum Lesen und Schreiben des globalen Speichers über den gemeinsamen Speicher/L1-Cache 2718 und eine Speicherpartitionseinheit verwendet werden. In mindestens einer Ausführungsform schreibt der SM 2700, wenn er für allgemeine parallele Berechnungen konfiguriert ist, Befehle, die die Schedulereinheit 2704 verwenden kann, um neue Arbeit auf DPCs zu starten.In at least one embodiment, the combination of data cache and shared memory functionality in a single memory block provides improved performance for both types of memory accesses. In at least one embodiment, the capacity of programs that do not use the shared memory is used or can be used as a cache, such that, for example, when the shared memory is configured to use half the capacity, texture - and load/store operations can use the remaining capacity. In at least one embodiment, integration with shared memory/
In mindestens einer Ausführungsform ist die PPU in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z.B. einem drahtlosen Handheld-Gerät), einem PDA, einer Digitalkamera, einem Fahrzeug, einer kopfmontierten Anzeige, einem elektronischen Handheld-Gerät usw. enthalten oder mit diesen gekoppelt. In mindestens einer Ausführungsform ist die PPU auf einem einzigen Halbleitersubstrat verkörpert. In mindestens einer Ausführungsform ist die PPU in einem SoC zusammen mit einer oder mehreren anderen Vorrichtungen wie zusätzlichen PPUs, Speicher, einer RISC-CPU, einer MMU, einem Digital-Analog-Wandler („DAC“) und dergleichen enthalten.In at least one embodiment, the PPU is in a desktop computer, a laptop computer, a tablet computer, servers, supercomputers, a smartphone (e.g., a wireless handheld device), a PDA, a digital camera, a vehicle, a head-mounted display , a handheld electronic device, etc. In at least one embodiment, the PPU is embodied on a single semiconductor substrate. In at least one embodiment, the PPU is included in an SoC along with one or more other devices such as additional PPUs, memory, a RISC CPU, an MMU, a digital-to-analog converter (“DAC”), and the like.
In mindestens einer Ausführungsform kann die PPU auf einer Grafikkarte enthalten sein, die ein oder mehrere Speichervorrichtungen enthält. In mindestens einer Ausführungsform kann eine Grafikkarte so konfiguriert sein, dass sie mit einem PCIe-Steckplatz auf einer Hauptplatine eines Desktop-Computers verbunden werden kann. In mindestens einer Ausführungsform kann die PPU eine integrierte GPU („iGPU“) sein, die im Chipsatz der Hauptplatine enthalten ist.In at least one embodiment, the PPU may be included on a graphics card that includes one or more memory devices. In at least one embodiment, a graphics card may be configured to connect to a PCIe slot on a motherboard of a desktop computer. In at least one embodiment, the PPU may be an integrated GPU (“iGPU”) included in the motherboard chipset.
In mindestens einer Ausführungsform werden ein oder mehrere in
Software-Konstruktionen für universelles RechnenSoftware constructions for universal computing
Die folgenden Figuren zeigen, ohne Beschränkung darauf, beispielhafte Softwarekonstrukte zur Implementierung mindestens einer Ausführungsform.The following figures show, without limitation, exemplary software constructs for implementing at least one embodiment.
In mindestens einer Ausführungsform stellt ein Software-Stack 2800 einer Programmierplattform eine Ausführungsumgebung für eine Anwendung 2801 bereit. In mindestens einer Ausführungsform kann die Anwendung 2801 jede beliebige Computersoftware umfassen, die auf dem Software-Stack 2800 gestartet werden kann. In mindestens einer Ausführungsform kann die Anwendung 2801 eine Anwendung für künstliche Intelligenz („KI“)/maschinelles Lernen („ML“), eine Anwendung für Hochleistungsrechnen („HPC“), eine virtuelle Desktop-Infrastruktur („VDI“) oder einen Rechenzentrums-Arbeitslast umfassen, ist aber nicht darauf beschränkt.In at least one embodiment, a
In mindestens einer Ausführungsform laufen die Anwendung 2801 und der Software-Stack 2800 auf Hardware 2807. Die Hardware 2807 kann in mindestens einer Ausführungsform eine oder mehrere GPUs, CPUs, FPGAs, KI-Engines und/oder andere Arten von Rechenvorrichtungen umfassen, die eine Programmierplattform unterstützen. In mindestens einer Ausführungsform, wie beispielsweise bei CUDA, kann der Software-Stack 2800 herstellerspezifisch und nur mit Vorrichtungen bestimmter Hersteller kompatibel sein. In mindestens einer Ausführungsform, wie beispielsweise bei OpenCL, kann der Softwarestack 2800 mit Vorrichtungen verschiedener Hersteller verwendet werden. In mindestens einer Ausführungsform umfasst die Hardware 2807 einen Host, der mit einer oder mehreren Vorrichtungen verbunden ist, auf die zugegriffen werden kann, um Berechnungsaufgaben über API (Application Programming Interface)-Aufrufe durchzuführen. Eine Vorrichtung innerhalb der Hardware 2807 kann eine GPU, ein FPGA, eine KI-Engine oder eine andere Rechenvorrichtung (aber auch eine CPU) und dessen Speicher umfassen, im Gegensatz zu einem Host innerhalb der Hardware 2807, der in mindestens einer Ausführungsform eine CPU (aber auch eine Rechenvorrichtung) und dessen Speicher umfassen kann, aber nicht darauf beschränkt ist.In at least one embodiment, the
In mindestens einer Ausführungsform umfasst der Software-Stack 2800 einer Programmierplattform, ohne Beschränkung darauf, eine Reihe von Bibliotheken 2803, eine Laufzeit 2805 und einen Gerätekerneltreiber 2806. Jede der Bibliotheken 2803 kann in mindestens einer Ausführungsform Daten und Programmiercode enthalten, die von Computerprogrammen verwendet und während der Softwareentwicklung genutzt werden können. In mindestens einer Ausführungsform können die Bibliotheken 2803 vorgefertigten Code und Unterprogramme, Klassen, Werte, Typspezifikationen, Konfigurationsdaten, Dokumentation, Hilfsdaten und/oder Nachrichtenvorlagen enthalten, sind aber nicht darauf beschränkt. In mindestens einer Ausführungsform enthalten die Bibliotheken 2803 Funktionen, die für die Ausführung auf einer oder mehreren Vorrichtungsarten optimiert sind. In mindestens einer Ausführungsform können die Bibliotheken 2803 Funktionen zur Durchführung von mathematischen, Deep-Learning- und/oder anderen Arten von Operationen auf Vorrichtungen enthalten, sind aber nicht darauf beschränkt. In mindestens einer Ausführungsform sind Bibliotheken 2903 entsprechenden APIs 2902 zugeordnet, die eine oder mehrere APIs enthalten können, die in den Bibliotheken 2903 implementierte Funktionen offenlegen.In at least one embodiment, the
In mindestens einer Ausführungsform ist die Anwendung 2801 als Quellcode geschrieben, der in ausführbaren Code kompiliert wird, wie nachstehend in Verbindung mit
In mindestens einer Ausführungsform ist die Laufzeit 2805 als eine oder mehrere Laufzeitbibliotheken implementiert, die mit entsprechenden APIs verbunden sind, die als API(s) 2804 dargestellt sind. Eine oder mehrere solcher Laufzeitbibliotheken können in mindestens einer Ausführungsform, ohne Beschränkung darauf, Funktionen zur Speicherverwaltung, Ausführungssteuerung, Geräteverwaltung, Fehlerbehandlung und/oder Synchronisation enthalten. In mindestens einer Ausführungsform können die Speicherverwaltungsfunktionen. Ohne Beschränkung darauf, Funktionen zum Zuweisen, Freigeben und Kopieren von Gerätespeicher sowie zum Übertragen von Daten zwischen dem Hostspeicher und dem Gerätespeicher umfassen. In mindestens einer Ausführungsform können Ausführungssteuerungsfunktionen Funktionen zum Starten einer Funktion (manchmal als ein „Kernel“ bezeichnet, wenn eine Funktion eine globale Funktion ist, die von einem Host aus aufgerufen werden kann) auf einem Gerät und zum Festlegen von Attributwerten in einem Puffer, der von einer Laufzeitbibliothek für eine gegebene, auf einem Gerät auszuführende Funktion verwaltet wird, enthalten, sind aber nicht darauf beschränkt.In at least one embodiment,
In mindestens einer Ausführungsform können Laufzeitbibliotheken und entsprechende API(s) 2804 auf jede technisch machbare Weise implementiert sein. In mindestens einer Ausführungsform kann eine (oder eine beliebige Anzahl von) API(s) einen Low-Level-Satz von Funktionen für eine feinkörnige Steuerung eines Geräts bereitstellen, während eine andere (oder eine beliebige Anzahl von) API(s) einen Higher-Level-Satz solcher Funktionen bereitstellen kann. In mindestens einer Ausführungsform kann eine High-Level-Laufzeit-API auf einer Low-Level-API aufgebaut sein. In mindestens einer Ausführungsform können eine oder mehrere Laufzeit-APIs sprachspezifische APIs sein, die auf eine sprachunabhängige Laufzeit-API aufgesetzt sind.In at least one embodiment, runtime libraries and corresponding API(s) 2804 may be implemented in any technically feasible manner. In at least one embodiment, one (or any number of) API(s) may provide a low-level set of functions for fine-grained control of a device, while another (or any number of) API(s) may provide a higher-level set of functions. Level set of such functions can provide. In at least one embodiment, a high-level runtime API may be built on top of a low-level API. In at least one embodiment, one or more runtime APIs may be language-specific APIs that are layered on top of a language-independent runtime API.
In mindestens einer Ausführungsform ist der Gerätekerneltreiber 2806 so konfiguriert, dass er Kommunikation mit einem zugrunde liegenden Gerät erleichtert. In mindestens einer Ausführungsform kann der Gerätekerneltreiber 2806 Low-Level-Funktionalitäten bereitstellen, auf die sich APIs, wie z.B. die API(s) 2804, und/oder andere Software stützen. In mindestens einer Ausführungsform kann der Gerätekerneltreiber 2806 so konfiguriert sein, dass er zur Laufzeit Intermediate Representation („IR“) Code in Binärcode kompiliert. In mindestens einer Ausführungsform kann für CUDA der Gerätekerneltreiber 2806 IR-Code für parallele Thread-Ausführung („PTX“), der nicht hardwarespezifisch ist, zur Laufzeit in Binärcode für ein bestimmtes Zielgerät kompilieren (mit Zwischenspeicherung kompilierten Binärcodes), was manchmal auch als „finalisierter“ Code bezeichnet wird. Dadurch kann in mindestens einer Ausführungsform finalisierter Code auf einem Zielgerät ausgeführt werden, das möglicherweise nicht existierte, als der Quellcode ursprünglich in PTX-Code kompiliert wurde. Alternativ kann in mindestens einer Ausführungsform der Gerätequellcode offline in Binärcode kompiliert werden, ohne dass der Gerätekerneltreiber 2806 den IR-Code zur Laufzeit kompilieren muss.In at least one embodiment, the device kernel driver 2806 is configured to facilitate communication with an underlying device. In at least one embodiment, the device kernel driver 2806 may provide low-level functionality that APIs, such as the API(s) 2804, and/or other software rely on. In at least one embodiment, the device kernel driver 2806 may be configured to compile intermediate representation (“IR”) code to binary code at runtime. In at least one embodiment, for CUDA, the device kernel driver 2806 may compile parallel thread execution ("PTX") IR code that is not hardware-specific into binary code for a specific target device at runtime (cached compiled binary code), sometimes referred to as " “finalized” code is called. This allows, in at least one embodiment, finalized code to be executed on a target device that may not have existed when the source code was originally compiled into PTX code. Alternatively, in at least one embodiment, the device source code may be compiled into binary code offline without the device kernel driver 2806 having to compile the IR code at runtime.
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform können die Anwendung 2901, die CUDA-Laufzeit 2905 und der Gerätekerneltreiber 2908 ähnliche Funktionalitäten wie die Anwendung 2801, die Laufzeit 2805 bzw. der Gerätekerneltreiber 2806 ausführen, die vorstehend in Verbindung mit
In mindestens einer Ausführungsform können die CUDA-Bibliotheken 2903 mathematische Bibliotheken, Deep-Learning-Bibliotheken, Bibliotheken paralleler Algorithmen und/oder Bibliotheken für Signal-/Bild-/Videoverarbeitung beinhalten, die von parallelen Rechenanwendungen wie der Anwendung 2901 verwendet werden können, sind aber nicht darauf beschränkt. In mindestens einer Ausführungsform können die CUDA-Bibliotheken 2903 mathematische Bibliotheken wie beispielsweise eine cuBLAS-Bibliothek, die eine Implementierung von Basic Linear Algebra Subprograms („BLAS“) zur Durchführung linearer Algebraoperationen ist, eine cuFFT-Bibliothek zur Berechnung schneller Fourier-Transformationen („FFTs“) und eine cuRAND-Bibliothek zum Erzeugen von Zufallszahlen usw. beinhalten. In mindestens einer Ausführungsform können die CUDA-Bibliotheken 2903 unter anderem Deep-Learning-Bibliotheken wie eine cuDNN-Bibliothek mit Primitiven für tiefe neuronale Netzwerke und eine TensorRT-Plattform für hochleistungsfähige Deep-Learning-Inferenz umfassen.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann eine Anwendung 3001 ähnliche Funktionalitäten ausführen wie die vorstehend in Verbindung mit
In mindestens einer Ausführungsform ist der Thunk (ROCt) 3007 eine Schnittstelle 3006, die zur Interaktion mit dem zugrunde liegenden ROCm-Treiber 3008 verwendet werden kann. In mindestens einer Ausführungsform ist der ROCm-Treiber 3008 ein ROCk-Treiber, der eine Kombination aus einem AMDGPU-Treiber und einem HSA-Kerneltreiber (amdkfd) ist. In mindestens einer Ausführungsform ist der AMD-GPU-Treiber ein von AMD entwickelter Gerätekerneltreiber für GPUs, der ähnliche Funktionalitäten wie der vorstehend in Verbindung mit
In mindestens einer Ausführungsform können verschiedene Bibliotheken (nicht gezeigt) in dem ROCm-Software-Stack 3000 oberhalb der Sprachlaufzeit 3003 enthalten sein und eine ähnliche Funktionalität wie die CUDA-Bibliotheken 2903, die vorstehend in Verbindung mit
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform können die Anwendung 3101, die OpenCL-Laufzeit 3106, der Gerätekerneltreiber 3107 und die Hardware 3108 ähnliche Funktionen ausführen wie die Anwendung 2801, die Laufzeit 2805, der Gerätekerneltreiber 2806 bzw. die Hardware 2807, die vorstehend in Verbindung mit
In mindestens einer Ausführungsform definiert OpenCL eine „Plattform“, die es einem Host ermöglicht, mit dem Host verbundene Geräte zu steuern. In mindestens einer Ausführungsform stellt ein OpenCL-Framework eine Plattformschicht-API und eine Laufzeit-API, dargestellt als Plattform-API 3103 und Laufzeit-API 3105, bereit. In mindestens einer Ausführungsform verwendet die Laufzeit-API 3105 Kontexte, um die Ausführung von Kerneln auf Geräten zu verwalten. In mindestens einer Ausführungsform kann jedes identifizierte Gerät mit einem entsprechenden Kontext assoziiert sein, den die Laufzeit-API 3105 verwenden kann, um Befehlswarteschlangen, Programmobjekte und Kernelobjekte, gemeinsam genutzte Speicherobjekte usw. für dieses Gerät zu verwalten. In mindestens einer Ausführungsform stellt die Plattform-API 3103 Funktionen zur Verfügung, die es ermöglichen, Gerätekontexte zu verwenden, um Geräte auszuwählen und zu initialisieren, Arbeit über Befehlswarteschlangen an Geräte zu übermitteln und den Datentransfer zu und von Geräten zu ermöglichen, um nur einige Beispiele zu nennen. Darüber hinaus stellt das OpenCL-Framework in mindestens einer Ausführungsform verschiedene integrierte Funktionen (nicht dargestellt), darunter mathematische Funktionen, relationale Funktionen und Bildverarbeitungsfunktionen, bereit.In at least one embodiment, OpenCL defines a “platform” that allows a host to control devices connected to the host. In at least one embodiment, an OpenCL framework provides a platform layer API and a runtime API, represented as
In mindestens einer Ausführungsform ist darüber hinaus ein Compiler 3104 in dem OpenCL-Rahmenwerk 3105 enthalten. Der Quellcode kann in mindestens einer Ausführungsform offline vor der Ausführung einer Anwendung oder online während der Ausführung einer Anwendung kompiliert werden. Im Gegensatz zu CUDA und ROCm können OpenCL-Anwendungen in mindestens einer Ausführungsform online durch den Compiler 3104 kompiliert werden, der stellvertretend für eine beliebige Anzahl von Compilern steht, die zum Kompilieren von Quellcode und/oder IR-Code, wie Standard Portable Intermediate Representation („SPIR-V“) Code, in Binärcode verwendet werden können. Alternativ können in mindestens einer Ausführungsform OpenCL-Anwendungen offline kompiliert werden, bevor solche Anwendungen ausgeführt werden.In at least one embodiment, a
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann die Programmierplattform 3204 eine der vorstehend in Verbindung mit
In mindestens einer Ausführungsform stellen Bibliotheken und/oder Middlewares 3202 Implementierungen von Abstraktionen von Programmiermodellen 3204 bereit. In mindestens einer Ausführungsform enthalten solche Bibliotheken Daten und Programmiercode, die von Computerprogrammen verwendet und während der Softwareentwicklung genutzt werden können. In mindestens einer Ausführungsform umfassen solche Middlewares Software, die Anwendungen Dienste zur Verfügung stellt, die über die von der Programmierplattform 3204 verfügbaren Dienste hinausgehen. In mindestens einer Ausführungsform können die Bibliotheken und/oder Middlewares 3202 cuBLAS, cuFFT, cuRAND und andere CUDA-Bibliotheken oder rocBLAS, rocFFT, rocRAND und andere ROCm-Bibliotheken umfassen, sind aber nicht darauf beschränkt. Darüber hinaus können die Bibliotheken und/oder Middlewares 3202 in mindestens einer Ausführungsform NCCL- und ROCm Communication Collectives Library („RCCL“)-Bibliotheken, die Kommunikationsroutinen für GPUs bereitstellen, eine MIOpen-Bibliothek zur Deep-Learning-Beschleunigung und/oder eine Eigen-Bibliothek für lineare Algebra, Matrix- und Vektoroperationen, geometrische Transformationen, numerische Solver und verwandte Algorithmen umfassen.In at least one embodiment, libraries and/or
In mindestens einer Ausführungsform hängen die Anwendungsframeworks 3201 von Bibliotheken und/oder Middlewares 3202 ab. In mindestens einer Ausführungsform ist jedes der Anwendungsframeworks 3201 ein Softwareframework, das zur Implementierung einer Standardstruktur von Anwendungssoftware verwendet wird. Um auf das vorstehend besprochene KI/ML-Beispiel zurückzukommen, kann eine KI/ML-Anwendung in mindestens einer Ausführungsform unter Verwendung von eines Frameworks wie Caffe, Caffe2, TensorFlow, Keras, PyTorch oder MxNet Deep Learning Frameworks implementiert sein.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform kann der Quellcode 3300 Code in einer beliebigen, von dem Compiler 3301 unterstützten Programmiersprache enthalten, wie z.B. C++, C, Fortran usw. In mindestens einer Ausführungsform kann der Quellcode 3300 in einer Einquellen- bzw. Single-Source-Datei enthalten sein, die eine Mischung aus Host-Code und Geräte-Code enthält, wobei Positionen des Geräte-Codes darin angegeben sind. In mindestens einer Ausführungsform kann eine Single-Source-Datei eine .cu-Datei sein, die CUDA-Code enthält, oder eine .hip.cpp-Datei, die HIP-Code enthält. Alternativ kann der Quellcode 3300 in mindestens einer Ausführungsform mehrere Quellcodedateien anstelle einer einzigen Quellcodedatei beinhalten, in denen Host-Code und Geräte-Code getrennt sind.In at least one embodiment, the
In mindestens einer Ausführungsform ist der Compiler 3301 so konfiguriert, dass er den Quellcode 3300 in einen ausführbaren Host-Code 3302 zur Ausführung auf einem Host und einen ausführbaren Geräte-Code 3303 zur Ausführung auf einem Gerät kompiliert. In mindestens einer Ausführungsform führt der Compiler 3301 Operationen durch, darunter ein Parsen des Quellcodes 3300 in einen abstrakten Systembaum (AST), ein Durchführen von Optimierungen und ein Erzeugen von ausführbarem Code. In mindestens einer Ausführungsform, in der der Quellcode 3300 eine Single-Source-Datei enthält, kann der Compiler 3301 den Geräte-Code von dem Host-Code in einer solchen Single-Source-Datei trennen, den Geräte-Code und den Host-Code in den ausführbaren Geräte-Code 3303 bzw. den ausführbaren Host-Code 3302 kompilieren und den ausführbaren Geräte-Code 3303 und den ausführbaren Host-Code 3302 in einer einzigen Datei miteinander verknüpfen, wie nachstehend unter Bezugnahme auf
In mindestens einer Ausführungsform können der ausführbare Host-Code 3302 und der ausführbare Geräte-Code 3303 in jedem geeigneten Format vorliegen, z.B. als Binärcode und/oder IR-Code. Im Fall von CUDA kann der ausführbare Host-Code 3302 in mindestens einer Ausführungsform nativen Objektcode beinhalten und kann der ausführbare Geräte-Code 3303 Code in PTX-Zwischendarstellung beinhalten. Im Fall von ROCm können sowohl der ausführbare Host-Code 3302 als auch der ausführbare Geräte-Code 3303 in mindestens einer Ausführungsform einen Ziel-Binärcode enthalten.In at least one embodiment, the host executable code 3302 and the device executable code 3303 may be in any suitable format, such as binary code and/or IR code. In the case of CUDA, in at least one embodiment, the host executable code 3302 may include native object code and the device executable code 3303 may include PTX intermediate representation code. In the case of ROCm, both host executable code 3302 and device executable code 3303 may include target binary code in at least one embodiment.
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform beinhaltet der Compiler 3401 ein Compiler-Frontend 3402, einen Host-Compiler 3405, einen Geräte-Compiler 3406 und einen Linker 3409. In mindestens einer Ausführungsform ist das Compiler-Frontend 3402 so konfiguriert, dass es den Geräte-Code 3404 von dem Host-Code 3403 in dem Quellcode 3400 trennt. Geräte-Code 3404 wird von dem Gerätecompiler 3406 in ausführbaren Geräte-Code 3408 kompiliert, der, wie beschrieben wurde, in mindestens einer Ausführungsform Binärcode oder IR-Code enthalten kann. In mindestens einer Ausführungsform wird getrennt davon Host-Code 3403 von dem Host-Compiler 3405 in ausführbaren Host-Code 3407 kompiliert. In mindestens einer Ausführungsform kann für NVCC der Host-Compiler 3405, ohne darauf beschränkt zu sein, ein universeller C/C++-Compiler sein, der nativen Objektcode ausgibt, während der Geräte-Compiler 3406, ohne darauf beschränkt zu sein, ein auf einer Low Level Virtual Machine („LLVM“) basierender Compiler sein kann, der eine LLVM-Compiler-Infrastruktur aufspaltet und PTX-Code oder Binärcode ausgibt. In mindestens einer Ausführungsform können für den HCC sowohl der Host-Compiler 3405 als auch der Geräte-Compiler 3406 LLVM-basierte Compiler sein, die Ziel-Binärcode ausgeben, sind aber nicht darauf beschränkt.In at least one embodiment, the
Nach der Kompilierung des Quellcodes 3400 in einen ausführbaren Host-Code 3407 und einen ausführbaren Geräte-Code 3408 verknüpft der Linker 3409 in mindestens einer Ausführungsform den ausführbaren Host- und Geräte-Code 3407 und 3408 in einer ausführbaren Datei 3410. In mindestens einer Ausführungsform können nativer Objektcode für einen Host und PTX- oder Binärcode für ein Gerät in einer Executable and Linkable Format („ELF“)-Datei miteinander verknüpft werden, die ein Containerformat zum Speichern von Objektcode ist.After compiling the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform wird eine von dem Übersetzungswerkzeug 3501 durchgeführte Übersetzung verwendet, um den Quellcode 3500 für die Ausführung in einer anderen Umgebung als der, in der er ursprünglich ausgeführt werden sollte, zu portieren. In mindestens einer Ausführungsform kann das Übersetzungswerkzeug 3501 einen HIP-Übersetzer umfassen, der verwendet wird, um CUDA-Code, der für eine CUDA-Plattform vorgesehen ist, in HIP-Code zu „hipifizieren“, der auf einer ROCm-Plattform kompiliert und ausgeführt werden kann, ist aber nicht darauf beschränkt. In mindestens einer Ausführungsform kann die Übersetzung des Quellcodes 3500 ein Parsen des Quellcodes 3500 und ein Konvertieren von Aufrufen zu API(s), die von einem Programmiermodell (z.B. CUDA) bereitgestellt werden, in entsprechende Aufrufe zu API(s), die von einem anderen Programmiermodell (z.B. HIP) bereitgestellt werden, beinhalten, wie nachstehend in Verbindung mit den
In mindestens einer Ausführungsform werden ein oder mehrere in
KONFIGURIEREN VON GPUS FÜR UNIVERSELLES RECHNENCONFIGURING GPUS FOR UNIVERSAL COMPUTING
Die folgenden Figuren zeigen, ohne Beschränkung darauf, beispielhafte Architekturen für die Kompilierung und Ausführung von Rechen-Quellcode, in Übereinstimmung mit mindestens einer Ausführungsform.The following figures show, but are not limited to, example architectures for compiling and executing computing source code, in accordance with at least one embodiment.
In mindestens einer Ausführungsform ist der CUDA-Quellcode 3610 eine Sammlung von Menschen lesbarer Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist der CUDA-Code ein von Menschen lesbarer Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist eine CUDA-Programmiersprache eine Erweiterung der Programmiersprache C++, die, ohne Beschränkung darauf, Mechanismen zur Definition von Geräte-Code und zur Unterscheidung zwischen Geräte-Code und Host-Code beinhaltet. In mindestens einer Ausführungsform ist der Geräte-Code ein Quellcode, der nach der Kompilierung parallel auf einem Gerät ausführbar ist. In mindestens einer Ausführungsform kann ein Gerät ein Prozessor sein, der für parallele Befehlsverarbeitung optimiert ist, wie z.B. eine CUDA-fähige GPU 3690, eine GPU 36192 oder eine andere GPGPU, usw. In mindestens einer Ausführungsform ist der Host-Code ein Quellcode, der nach der Kompilierung auf einem Host ausführbar ist. In mindestens einer Ausführungsform ist ein Host ein Prozessor, der für die sequenzielle Befehlsverarbeitung optimiert ist, wie z.B. die CPU 3690.In at least one embodiment,
In mindestens einer Ausführungsform enthält der CUDA-Quellcode 3610, ohne Beschränkung darauf, eine beliebige Anzahl (einschließlich Null) von globalen Funktionen 3612, eine beliebige Anzahl (einschließlich Null) von Gerätefunktionen 3614, eine beliebige Anzahl (einschließlich Null) von Hostfunktionen 3616 und eine beliebige Anzahl (einschließlich Null) von Host/Geräte-Funktionen 3618. In mindestens einer Ausführungsform können globale Funktionen 3612, Gerätefunktionen 3614, Hostfunktionen 3616 und Host/Geräte-Funktionen 3618 in dem CUDA-Quellcode 3610 gemischt sein. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3612 auf einem Gerät ausführbar und von einem Host aus aufrufbar. In mindestens einer Ausführungsform können daher eine oder mehrere der globalen Funktionen 3612 als Einstiegspunkte zu einem Gerät dienen. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3612 ein Kernel. In mindestens einer Ausführungsform und in einer Technik, die als dynamische Parallelität bekannt ist, definiert eine oder mehrere der globalen Funktionen 3612 einen Kernel, der auf einem Gerät ausführbar ist und von einem solchen Gerät aus aufgerufen werden kann. In mindestens einer Ausführungsform wird ein Kernel während der Ausführung N (wobei N eine beliebige positive ganze Zahl ist) Mal parallel von N verschiedenen Threads auf einem Gerät ausgeführt.In at least one embodiment, the
In mindestens einer Ausführungsform wird jede von Gerätefunktionen 3614 auf einem Gerät ausgeführt und kann nur von einem solchen Gerät aus aufgerufen werden. In mindestens einer Ausführungsform wird jede von Host-Funktionen 3616 auf einem Host ausgeführt und ist nur von einem solchen Host aus aufrufbar. In mindestens einer Ausführungsform definiert jede der Host-/Geräte-Funktionen 3616 sowohl eine Host-Version einer Funktion, die auf einem Host ausführbar und nur von einem solchen Host aufrufbar ist, als auch eine Geräteversion der Funktion, die auf einem Gerät ausführbar und nur von einem solchen Gerät aufrufbar ist.In at least one embodiment, each of
In mindestens einer Ausführungsform kann der CUDA-Quellcode 3610 auch, ohne Beschränkung darauf, eine beliebige Anzahl von Aufrufen zu einer beliebigen Anzahl von Funktionen enthalten, die über eine CUDA-Laufzeit-API 3602 definiert sind. In mindestens einer Ausführungsform kann die CUDA-Laufzeit-API 3602, ohne Beschränkung darauf, eine beliebige Anzahl von Funktionen enthalten, die auf einem Host ausgeführt werden, um Gerätespeicher zuzuweisen und freizugeben, Daten zwischen Hostspeicher und Gerätespeicher zu übertragen, Systeme mit mehreren Geräten zu verwalten usw. In mindestens einer Ausführungsform kann der CUDA-Quellcode 3610 auch eine beliebige Anzahl von Aufrufen zu einer beliebigen Anzahl von Funktionen enthalten, die in einer beliebigen Anzahl von anderen CUDA-APIs angegeben sind. In mindestens einer Ausführungsform kann eine CUDA-API eine beliebige API sein, die für die Verwendung durch CUDA-Code vorgesehen ist. In mindestens einer Ausführungsform umfassen CUDA-APIs, ohne Beschränkung darauf, eine CUDA-Laufzeit-API 3602, eine CUDA-Treiber-API, APIs für eine beliebige Anzahl von CUDA-Bibliotheken, usw. In mindestens einer Ausführungsform und im Vergleich zu der CUDA-Laufzeit-API 3602 ist eine CUDA-Treiber-API eine API auf niedrigerer Ebene, die jedoch eine feinkörnigere Steuerung eines Geräts ermöglicht. In mindestens einer Ausführungsform umfassen Beispiele für CUDA-Bibliotheken, ohne Beschränkung darauf, cuBLAS, cuFFT, cuRAND, cuDNN usw.In at least one embodiment, the
In mindestens einer Ausführungsform kompiliert der CUDA-Compiler 3650 den eingegebenen CUDA-Code (z.B. den CUDA-Quellcode 3610), um den ausführbaren Host-Code 3670(1) und den ausführbaren CUDA-Geräte-Code 3684 zu erzeugen. In mindestens einer Ausführungsform ist der CUDA-Compiler 3650 ein NVCC. In mindestens einer Ausführungsform ist der ausführbare Host-Code 3670(1) eine kompilierte Version des Host-Codes, der in dem Eingabe-Quellcode enthalten ist, der auf der CPU 3690 ausführbar ist. In mindestens einer Ausführungsform kann die CPU 3690 ein beliebiger Prozessor sein, der für die sequenzielle Befehlsverarbeitung optimiert ist.In at least one embodiment, the
In mindestens einer Ausführungsform ist der ausführbare CUDA-Geräte-Code 3684 eine kompilierte Version des Geräte-Codes, der in dem Eingabe-Quellcode enthalten ist, der auf der CUDA-fähigen GPU 3694 ausführbar ist. In mindestens einer Ausführungsform umfasst der ausführbare CUDA-Geräte-Code 3684, ohne Beschränkung darauf, Binärcode. In mindestens einer Ausführungsform enthält der ausführbare CUDA-Geräte-Code 3684, ohne Beschränkung darauf, IR-Code, wie z.B. PTX-Code, der zur Laufzeit von einem Gerätetreiber weiter in Binärcode für ein bestimmtes Zielgerät (z.B. CUDA-fähige GPU 3694) kompiliert wird. In mindestens einer Ausführungsform kann der CUDA-fähige Grafikprozessor 3694 ein beliebiger Prozessor sein, der für die parallele Befehlsverarbeitung optimiert ist und CUDA unterstützt. In mindestens einer Ausführungsform wird der CUDA-fähige Grafikprozessor 3694 von der NVIDIA Corporation in Santa Clara, CA, entwickelt.In at least one embodiment, the executable
In mindestens einer Ausführungsform ist das CUDA-zu-HIP-Übersetzungswerkzeug 3620 so konfiguriert, dass es den CUDA-Quellcode 3610 in einen funktionell ähnlichen HIP-Quellcode 3630 übersetzt. In mindestens einer Ausführungsform ist der HIP-Quellcode 3630 eine Sammlung von von Menschen lesbarem Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist der HIP-Code ein von Menschen lesbarer Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist eine HIP-Programmiersprache eine Erweiterung der C++-Programmiersprache, die, ohne Beschränkung darauf, funktionell ähnliche Versionen von CUDA-Mechanismen enthält, um Geräte-Code zu definieren und zwischen Geräte-Code und Host-Code zu unterscheiden. In mindestens einer Ausführungsform kann eine HIP-Programmiersprache eine Teilmenge der Funktionalität einer CUDA-Programmiersprache enthalten. In mindestens einer Ausführungsform enthält eine HIP-Programmiersprache beispielsweise, ohne Beschränkung darauf, Mechanismen zum Definieren globaler Funktionen 3612, aber einer solchen HIP-Programmiersprache kann die Unterstützung für dynamische Parallelität fehlen, und daher können in dem HIP-Code definierte globale Funktionen 3612 nur von einem Host aus aufrufbar sein.In at least one embodiment, the CUDA to
In mindestens einer Ausführungsform enthält der HIP-Quellcode 3630, ohne Beschränkung darauf, eine beliebige Anzahl (einschließlich Null) von globalen Funktionen 3612, eine beliebige Anzahl (einschließlich Null) von Gerätefunktionen 3614, eine beliebige Anzahl (einschließlich Null) von Host-Funktionen 3616 und eine beliebige Anzahl (einschließlich Null) von Host/Geräte-Funktionen 3618. In mindestens einer Ausführungsform kann der HIP-Quellcode 3630 auch eine beliebige Anzahl von Aufrufen zu einer beliebigen Anzahl von Funktionen enthalten, die in einer HIP-Laufzeit-API 3632 angegeben sind. In mindestens einer Ausführungsform enthält die HIP-Laufzeit-API 3632, ohne Beschränkung darauf, funktionell ähnliche Versionen einer Teilmenge von Funktionen, die in der CUDA-Laufzeit-API 3602 enthalten sind. In mindestens einer Ausführungsform kann der HIP-Quellcode 3630 auch eine beliebige Anzahl von Aufrufen zu einer beliebigen Anzahl von Funktionen enthalten, die in einer beliebigen Anzahl von anderen HIP-APIs angegeben sind. In mindestens einer Ausführungsform kann eine HIP-API eine beliebige API sein, die für die Verwendung durch HIP-Code und/oder ROCm vorgesehen ist. In mindestens einer Ausführungsform umfassen HIP-APIs, ohne Beschränkung darauf, die HIP-Laufzeit-API 3632, eine HIP-Treiber-API, APIs für eine beliebige Anzahl von HIP-Bibliotheken, APIs für eine beliebige Anzahl von ROCm-Bibliotheken, usw.In at least one embodiment, the
In mindestens einer Ausführungsform konvertiert das CUDA-zu-HIP-Übersetzungswerkzeug 3620 jeden Kernel-Aufruf in dem CUDA-Code von einer CUDA-Syntax in eine HIP-Syntax und konvertiert eine beliebige Anzahl anderer CUDA-Aufrufe in dem CUDA-Code in eine beliebige Anzahl anderer funktionell ähnlicher HIP-Aufrufe. In mindestens einer Ausführungsform ist ein CUDA-Aufruf ein Aufruf einer Funktion, die in einer CUDA-API angegeben ist, und ist ein HIP-Aufruf ein Aufruf einer Funktion, die in einer HIP-API angegeben ist. In mindestens einer Ausführungsform wandelt das CUDA-zu-HIP-Übersetzungswerkzeug 3620 eine beliebige Anzahl von Aufrufen zu Funktionen, die in der CUDA-Laufzeit-API 3602 angegeben sind, in eine beliebige Anzahl von Aufrufen zu Funktionen, die in der HIP-Laufzeit-API 3632 angegeben sind, um.In at least one embodiment, the CUDA to
In mindestens einer Ausführungsform ist das CUDA-zu-HIP-Übersetzungswerkzeug 3620 ein als hipify-perl bekanntes Werkzeug, das einen textbasierten Übersetzungsprozess ausführt. In mindestens einer Ausführungsform ist das CUDA-zu-HIP-Übersetzungswerkzeug 3620 ein als hipify-clang bekanntes Werkzeug, das im Vergleich zu hipify-perl einen komplexeren und robusteren Übersetzungsprozess ausführt, der das Parsen von CUDA-Code unter Verwendung von clang (einem Compiler-Frontend) und die anschließende Übersetzung der resultierenden Symbole umfasst. In mindestens einer Ausführungsform kann die ordnungsgemäße Konvertierung von CUDA-Code in HIP-Code Modifikationen (z.B. manuelle Bearbeitungen) zusätzlich zu denjenigen, die von dem CUDA-zu-HIP-Übersetzungswerkzeug 3620 durchgeführt werden, erfordern.In at least one embodiment, the CUDA to
In mindestens einer Ausführungsform ist der HIP-Compilertreiber 3640 ein Frontend, das ein Zielgerät 3646 bestimmt und dann einen mit dem Zielgerät 3646 kompatiblen Compiler konfiguriert, um den HIP-Quellcode 3630 zu kompilieren. In mindestens einer Ausführungsform ist das Zielgerät 3646 ein Prozessor, der für die parallele Befehlsverarbeitung optimiert ist. In mindestens einer Ausführungsform kann der HIP-Compilertreiber 3640 das Zielgerät 3646 auf jede technisch machbare Weise bestimmen.In at least one embodiment, the
In mindestens einer Ausführungsform erzeugt dann, wenn das Zielgerät 3646 mit CUDA kompatibel ist (z.B. die CUDA-fähige GPU 3694), der HIP-Compilertreiber 3640 einen HIP/NVCC-Kompilierungsbefehl 3642. In mindestens einer Ausführungsform und wie in Verbindung mit
In mindestens einer Ausführungsform und im Ansprechen auf den HIP/NVCC-Kompilierungsbefehl 3642 erzeugt der CUDA-Compiler 3650 den ausführbaren Host-Code 3670(1) und den ausführbaren CUDA-Geräte-Code 3684.In at least one embodiment, and in response to the HIP/NVCC compile
In mindestens einer Ausführungsform erzeugt dann, wenn das Zielgerät 3646 nicht mit CUDA kompatibel ist, der HIP-Compilertreiber 3640 einen HIP/HCC-Kompilierungsbefehl 3644. In mindestens einer Ausführungsform und wie in Verbindung mit
Nur zu Erläuterungszwecken sind in
Ein direkter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert sein kann, ist durch gestrichelte Linien und eine Reihe von Blasen mit Bezeichnungen A1-A3 dargestellt. In mindestens einer Ausführungsform und wie in der mit A1 bezeichneten Blase dargestellt, empfängt der CUDA-Compiler 3650 den CUDA-Quellcode 3610 und einen CUDA-Kompilierbefehl 3648, der den CUDA-Compiler 3650 für die Kompilierung des CUDA-Quellcodes 3610 konfiguriert. In mindestens einer Ausführungsform ist der CUDA-Quellcode 3610, der in einem direkten CUDA-Ablauf verwendet wird, in einer CUDA-Programmiersprache geschrieben, die auf einer anderen Programmiersprache als C++ (z.B. C, Fortran, Python, Java usw.) basiert. In mindestens einer Ausführungsform und im Ansprechen auf den CUDA-Kompilierbefehl 3648 generiert der CUDA-Compiler 3650 den ausführbaren Host-Code 3670(1) und den ausführbaren CUDA-Geräte-Code 3684 (dargestellt mit der Blase mit der Bezeichnung A2). In mindestens einer Ausführungsform und wie mit der Blase mit der Bezeichnung A3 dargestellt, können der ausführbare Host-Code 3670(1) und der ausführbare CUDA-Geräte-Code 3684 auf der CPU 3690 bzw. der CUDA-fähigen GPU 3694 ausgeführt werden. In mindestens einer Ausführungsform umfasst der ausführbare CUDA-Geräte-Code 3684 Binärcode, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform enthält der ausführbare CUDA-Geräte-Code 3684, ohne darauf beschränkt zu sein, PTX-Code und wird zur Laufzeit weiter in Binärcode für ein bestimmtes Zielgerät kompiliert.A direct CUDA flow that may be implemented in at least one embodiment is shown by dashed lines and a series of bubbles labeled A1-A3. In at least one embodiment, and as shown in the bubble labeled A1, the
Ein indirekter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert sein kann, ist durch gestrichelte Linien und eine Reihe von Blasen mit der Bezeichnung B1-B6 dargestellt. In mindestens einer Ausführungsform und wie in der mit B1 gekennzeichneten Blase dargestellt, empfängt das CUDA-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610. In mindestens einer Ausführungsform und wie mit der Blase mit der Bezeichnung B2 dargestellt, übersetzt das CUDA-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610 in den HIP-Quellcode 3630. In mindestens einer Ausführungsform und wie in der mit B3 bezeichneten Blase dargestellt, empfängt der HIP-Compilertreiber 3640 den HIP-Quellcode 3630 und bestimmt, dass das Zielgerät 3646 CUDA-fähig ist.An indirect CUDA flow that may be implemented in at least one embodiment is shown by dashed lines and a series of bubbles labeled B1-B6. In at least one embodiment, and as shown in the bubble labeled B1, the CUDA-
In mindestens einer Ausführungsform und wie mit der mit B4 bezeichneten Blase dargestellt, erzeugt der HIP-Compilertreiber 3640 den HIP/NVCC-Kompilierbefehl 3642 und überträgt sowohl den HIP/NVCC-Kompilierbefehl 3642 als auch den HIP-Quellcode 3630 an den CUDA-Compiler 3650. In mindestens einer Ausführungsform und wie in Verbindung mit
Ein CUDA/HCC-Ablauf, der in mindestens einer Ausführungsform implementiert sein kann, wird durch durchgezogene Linien und eine Reihe von Blasen mit der Bezeichnung C1-C6 dargestellt. In mindestens einer Ausführungsform und wie in der Blase mit der Bezeichnung C1 dargestellt, empfängt das CUDA-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610. In mindestens einer Ausführungsform und wie mit der Blase mit der Bezeichnung C2 dargestellt, übersetzt das CUDA-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610 in den HIP-Quellcode 3630. In mindestens einer Ausführungsform und wie mit der Blase C3 dargestellt, empfängt der HIP-Compilertreiber 3640 den HIP-Quellcode 3630 und bestimmt, dass das Zielgerät 3646 nicht CUDA-fähig ist.A CUDA/HCC flow that may be implemented in at least one embodiment is represented by solid lines and a series of bubbles labeled C1-C6. In at least one embodiment, and as shown in the bubble labeled C1, the CUDA-
In mindestens einer Ausführungsform erzeugt der HIP-Compilertreiber 3640 den HIP/HCC-Kompilierbefehl 3644 und überträgt sowohl den HIP/HCC-Kompilierbefehl 3644 als auch den HIP-Quellcode 3630 an den HCC 3660 (dargestellt durch die mit C4 bezeichnete Blase). In mindestens einer Ausführungsform und wie in Verbindung mit
In mindestens einer Ausführungsform kann, nachdem der CUDA-Quellcode 3610 in HIP-Quellcode 3630 übersetzt wurde, der HIP-Compilertreiber 3640 anschließend verwendet werden, um ausführbaren Code entweder für die CUDA-fähige GPU 3694 oder die GPU 3692 zu erzeugen, ohne CUDA-HIP-Übersetzungswerkzeug 3620 erneut auszuführen. In mindestens einer Ausführungsform übersetzt das CUDA-zu-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610 in HIP-Quellcode 3630, der dann im Speicher abgelegt wird. In mindestens einer Ausführungsform konfiguriert der HIP-Compilertreiber 3640 dann den HCC 3660, um den ausführbaren Host-Code 3670(2) und den ausführbaren HCC-Geräte-Code 3682 basierend auf dem HIP-Quellcode 3630 zu erzeugen. In mindestens einer Ausführungsform konfiguriert der HIP-Compilertreiber 3640 anschließend den CUDA-Compiler 3650, um auf der Grundlage des gespeicherten HIP-Quellcodes 3630 den ausführbaren Host-Code 3670(1) und den ausführbaren CUDA-Geräte-Code 3684 zu erzeugen.In at least one embodiment, after the
In mindestens einer Ausführungsform und wie zuvor hierin in Verbindung mit
In mindestens einer Ausführungsform übersetzt das CUDA-zu-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610 in den HIP-Quellcode 3630. In mindestens einer Ausführungsform konvertiert das CUDA-zu-HIP-Übersetzungswerkzeug 3620 jeden Kernel-Aufruf in dem CUDA-Quellcode 3610 von einer CUDA-Syntax in eine HIP-Syntax und konvertiert eine beliebige Anzahl anderer CUDA-Aufrufe in dem CUDA-Quellcode 3610 in eine beliebige Anzahl anderer funktionell ähnlicher HIP-Aufrufe.In at least one embodiment, the CUDA to
In mindestens einer Ausführungsform bestimmt HIP-Compilertreiber 3640, dass das Zielgerät 3646 CUDA-fähig ist, und erzeugt den HIP/NVCC-Kompilierungsbefehl 3642. In mindestens einer Ausführungsform konfiguriert der HIP-Compilertreiber 3640 dann den CUDA-Compiler 3650 über den HIP/NVCC-Kompilierbefehl 3642, um den HIP-Quellcode 3630 zu kompilieren. In mindestens einer Ausführungsform stellt der HIP-Compilertreiber 3640 Zugriff auf einen HIP-zu-CUDA-Übersetzungsheader 3652 als Teil der Konfiguration des CUDA-Compilers 3650 bereit. In mindestens einer Ausführungsform übersetzt der HIP-zu-CUDA-Übersetzungsheader 3652 eine beliebige Anzahl von Mechanismen (z.B. Funktionen), die in einer beliebigen Anzahl von HIP-APIs spezifiziert sind, in eine beliebige Anzahl von Mechanismen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind. In mindestens einer Ausführungsform verwendet der CUDA-Compiler 3650 den HIP-zu-CUDA-Übersetzungsheader 3652 in Verbindung mit einer CUDA-Laufzeitbibliothek 3654, die der CUDA-Laufzeit-API 3602 entspricht, um den ausführbaren Host-Code 3670(1) und den ausführbaren CUDA-Geräte-Code 3684 zu erzeugen. In mindestens einer Ausführungsform können der ausführbare Host-Code 3670(1) und der ausführbare CUDA-Geräte-Code 3684 dann auf der CPU 3690 bzw. der CUDA-fähigen GPU 3694 ausgeführt werden. In mindestens einer Ausführungsform umfasst der ausführbare CUDA-Geräte-Code 3684 Binärcode, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform enthält der ausführbare CUDA-Geräte-Code 3684, ohne Beschränkung darauf, PTX-Code und wird zur Laufzeit weiter in Binärcode für ein bestimmtes Zielgerät kompiliert.In at least one embodiment,
In mindestens einer Ausführungsform und wie zuvor hierin in Verbindung mit
In mindestens einer Ausführungsform übersetzt das CUDA-zu-HIP-Übersetzungswerkzeug 3620 den CUDA-Quellcode 3610 in den HIP-Quellcode 3630. In mindestens einer Ausführungsform konvertiert das CUDA-zu-HIP-Übersetzungswerkzeug 3620 jeden Kernel-Aufruf in dem CUDA-Quellcode 3610 von einer CUDA-Syntax in eine HIP-Syntax und konvertiert eine beliebige Anzahl anderer CUDA-Aufrufe in dem Quellcode 3610 in eine beliebige Anzahl anderer funktionell ähnlicher HIP-Aufrufe.In at least one embodiment, the CUDA to
In mindestens einer Ausführungsform bestimmt der HIP-Compilertreiber 3640 anschließend, dass das Zielgerät 3646 nicht CUDA-fähig ist, und erzeugt den HIP/HCC-Kompilierbefehl 3644. In mindestens einer Ausführungsform konfiguriert der HIP-Compilertreiber 3640 dann den HCC 3660, um den HIP/HCC-Kompilierbefehl 3644 auszuführen, um den HIP-Quellcode 3630 zu kompilieren. In mindestens einer Ausführungsform konfiguriert der HIP/HCC-Kompilierbefehl 3644 den HCC 3660 so, dass er, ohne Beschränkung darauf, eine HIP/HCC-Laufzeitbibliothek 3658 und einen HCC-Header 3656 verwendet, um ausführbaren Host-Code 3670(2) und ausführbaren HCC-Geräte-Code 3682 zu erzeugen. In mindestens einer Ausführungsform entspricht die HIP/HCC-Laufzeitbibliothek 3658 der HIP-Laufzeit-API 3632. In mindestens einer Ausführungsform enthält der HCC-Header 3656, ohne Beschränkung darauf, eine beliebige Anzahl und Art von Interoperabilitätsmechanismen für HIP und HCC. In mindestens einer Ausführungsform können der ausführbare Host-Code 3670(2) und der ausführbare HCC-Geräte-Code 3682 auf der CPU 3690 bzw. der GPU 3692 ausgeführt werden.In at least one embodiment, the
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform organisiert der CUDA-Quellcode 3610 Thread-Blöcke, die einem bestimmten Kernel zugeordnet sind, in ein eindimensionales, zweidimensionales oder dreidimensionales Gitter von Thread-Blöcken. In mindestens einer Ausführungsform beinhaltet jeder Thread-Block, ohne Beschränkung darauf, eine beliebige Anzahl von Threads, und beinhaltet ein Gitter, ohne Beschränkung darauf, eine beliebige Anzahl von Thread-Blöcken.In at least one embodiment, the
In mindestens einer Ausführungsform ist ein Kernel eine Funktion in dem Geräte-Code, die unter Verwendung eines „_global_“-Deklarationsbezeichners definiert ist. In mindestens einer Ausführungsform werden die Dimension eines Gitters, das einen Kernel für einen bestimmten Kernelaufruf ausführt, und zugehörige Streams unter Verwendung einer CUDA-Kernel-Startsyntax 3710 spezifiziert. In mindestens einer Ausführungsform wird die CUDA-Kernel-Start-Syntax 3710 als „KernelName«<GridSize, BlockSize, SharedMemorySize, Stream>» (KernelArguments);“ spezifiziert. In mindestens einer Ausführungsform ist eine Ausführungskonfigurationssyntax ein „<<< ... >>>“-Konstrukt, das zwischen einem Kernelnamen („KernelName“) und einer eingeklammerten Liste von Kernelargumenten („KernelArguments“) eingefügt wird. In mindestens einer Ausführungsform umfasst die CUDA-Kernel-Startsyntax 3710, ohne Beschränkung darauf, eine CUDA-Startfunktionssyntax anstelle einer Ausführungskonfigurations-syntax.In at least one embodiment, a kernel is a function in the device code that is defined using a "_global_" declaration identifier. In at least one embodiment, the dimension of a grid executing a kernel for a particular kernel call and associated streams are specified using a CUDA
In mindestens einer Ausführungsform ist „GridSize“ von einem Typ dim3 und spezifiziert die Dimension und die Größe eines Gitters. In mindestens einer Ausführungsform ist der Typ dim3 eine CUDA-definierte Struktur, die, ohne Beschränkung darauf, vorzeichenlose Ganzzahlen x, y und z beinhaltet. In mindestens einer Ausführungsform ist z standardmäßig gleich eins, falls z nicht spezifiziert ist. In mindestens einer Ausführungsform ist y standardmäßig gleich eins, falls y nicht spezifiziert ist. In mindestens einer Ausführungsform ist die Anzahl von Thread-Blöcken in einem Gitter gleich dem Produkt aus GridSize.x, GridSize.y und GridSize.z. In mindestens einer Ausführungsform ist „BlockSize“ vom Typ dim3 und gibt die Dimension und die Größe jedes Thread-Blocks an. In mindestens einer Ausführungsform ist die Anzahl der Threads pro Thread-Block gleich dem Produkt aus BlockSize.x, BlockSize.y und BlockSize.z. In mindestens einer Ausführungsform erhält jeder Thread, der einen Kernel ausführt, eine eindeutige Thread-ID, die innerhalb des Kernels über eine eingebaute Variable (z.B. „threadldx“) zugänglich ist.In at least one embodiment, GridSize is of type dim3 and specifies the dimension and size of a grid. In at least one embodiment, type dim3 is a CUDA-defined structure that includes, but is not limited to, unsigned integers x, y, and z. In at least one embodiment, z defaults to one if z is not specified. In at least one embodiment, y defaults to one if y is not specified. In at least one embodiment, the number of thread blocks in a grid is equal to the product of GridSize.x, GridSize.y, and GridSize.z. In at least one embodiment, BlockSize is of type dim3 and indicates the dimension and size of each thread block. In at least one embodiment, the number of threads per thread block is equal to the product of BlockSize.x, BlockSize.y, and BlockSize.z. In at least one embodiment, each thread executing a kernel is assigned a unique thread ID that is accessible within the kernel via a built-in variable (e.g., "threadldx").
In mindestens einer Ausführungsform und in Bezug auf die CUDA-Kernel-Start-Syntax 3710 ist „SharedMemorySize“ ein optionales Argument, das eine Anzahl von Bytes in einem gemeinsam genutzten Speicher spezifiziert, der pro Thread-Block für einen bestimmten Kernel-Aufruf zusätzlich zu statisch zugewiesenem Speicher dynamisch zugewiesen wird. In mindestens einer Ausführungsform und in Bezug auf die CUDA-Kernel-Start-Syntax 3710 ist „SharedMemorySize“ standardmäßig auf null gesetzt. In mindestens einer Ausführungsform und in Bezug auf die CUDA-Kernel-Start-Syntax 3710 ist „Stream“ ein optionales Argument, das einen zugehörigen Stream angibt und standardmäßig auf null gesetzt ist, um einen Standardstream zu spezifizieren. In mindestens einer Ausführungsform ist ein Stream eine Folge von Befehlen (möglicherweise von verschiedenen Host-Threads ausgegeben), die der Reihe nach ausgeführt werden. In mindestens einer Ausführungsform können verschiedene Streams Befehle außerhalb der Reihe in Bezug aufeinander oder gleichzeitig ausführen.In at least one embodiment, and with respect to CUDA
In mindestens einer Ausführungsform enthält der CUDA-Quellcode 3610, ohne Beschränkung darauf, eine Kerneldefinition für einen beispielhaften Kernel „MatAdd“ und eine Hauptfunktion. In mindestens einer Ausführungsform ist die Hauptfunktion ein Host-Code, der auf einem Host ausgeführt wird und, ohne Beschränkung darauf, einen Kernelaufruf enthält, der die Ausführung des Kernels „MatAdd“ auf einem Gerät bewirkt. In mindestens einer Ausführungsform und wie gezeigt, addiert der Kernel MatAdd zwei Matrizen A und B der Größe NxN, wobei N eine positive ganze Zahl ist, und speichert das Ergebnis in einer Matrix C. In mindestens einer Ausführungsform definiert die Hauptfunktion eine Variable threadsPerBlock als 16 mal 16 und eine Variable numBlocks als N/16 mal N/16. In mindestens einer Ausführungsform spezifiziert die Hauptfunktion dann den Kernelaufruf „MatAdd<«numBlocks, threadsPerBlock»(A, B, C);“. In mindestens einer Ausführungsform und gemäß der CUDA-Kernel-Start-Syntax 3710 wird der Kernel MatAdd unter Verwendung eines Gitters von Thread-Blöcken mit einer Dimension N/16 mal N/16 ausgeführt, wobei jeder Thread-Block eine Dimension von 16 mal 16 hat. In mindestens einer Ausführungsform umfasst jeder Thread-Block 256 Threads, wird ein Gitter mit genügend Blöcken erstellt, um einen Thread pro Matrixelement zu haben, und führt jeder Thread in einem solchen Gitter den Kernel MatAdd aus, um eine paarweise Addition durchzuführen.In at least one embodiment, the
In mindestens einer Ausführungsform übersetzt das CUDA-HIP-Übersetzungswerkzeug 3620 während des Übersetzens von CUDA-Quellcode 3610 in HIP-Quellcode 3630jeden Kernelaufruf in dem CUDA-Quellcode 3610 von der CUDA-Kernel-Start-Syntax 3710 in eine HIP-Kernel-Start-Syntax 3720 und konvertiert eine beliebige Anzahl anderer CUDA-Aufrufe in dem Quellcode 3610 in eine beliebige Anzahl anderer funktionell ähnlicher HIP-Aufrufe. In mindestens einer Ausführungsform ist die HIP-Kernel-Start-Syntax 3720 als „hipLaunchKernelGGL(KernelName,GridSize, BlockSize, SharedMemorySize, Stream, KernelArguments);“ spezifiziert. In mindestens einer Ausführungsform hat jeder der Parameter KernelName, GridSize, BlockSize, ShareMemorySize, Stream und KernelArguments in der HIP-Kernel-Start-Syntax 3720 die gleiche Bedeutung wie in der CUDA-Kernel-Start-Syntax 3710 (hierin zuvor beschrieben). In mindestens einer Ausführungsform sind die Argumente SharedMemorySize und Stream in der HIP-Kernel-Startsyntax 3720 erforderlich und in der CUDA-Kernel-Startsyntax 3710 optional.In at least one embodiment, while translating
In mindestens einer Ausführungsform ist ein Teil des in
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform umfasst die GPU 3692, ohne Beschränkung darauf, eine beliebige Anzahl von programmierbaren Verarbeitungseinheiten 3820, einen Befehlsprozessor 3810, einen L2-Cache 3822, Speichercontroller 3870, DMA-Engines 3880(1), Systemspeichercontroller 3882, DMA-Engines 3880(2) und GPU-Controller 3884. In mindestens einer Ausführungsform beinhaltet jede programmierbare Verarbeitungseinheit 3820, ohne Beschränkung darauf, einen Arbeitslastverwalter 3830 und eine beliebige Anzahl von Recheneinheiten 3840. In mindestens einer Ausführungsform liest der Befehlsprozessor 3810 Befehle aus einer oder mehreren Befehlswarteschlangen (nicht dargestellt) und verteilt die Befehle an Arbeitslastverwalter 3830. In mindestens einer Ausführungsform verteilt der zugehörige Arbeitslastverwalter 3830 für jede programmierbare Verarbeitungseinheit 3820 Arbeit an in der programmierbaren Verarbeitungseinheit 3820 enthaltene Recheneinheiten 3840. In mindestens einer Ausführungsform kann jede Recheneinheit 3840 eine beliebige Anzahl von Thread-Blöcken ausführen, aber jeder Thread-Block wird auf einer einzigen Recheneinheit 3840 ausgeführt. In mindestens einer Ausführungsform ist eine Arbeitsgruppe ein Thread-Block.In at least one embodiment, the
In mindestens einer Ausführungsform beinhaltet jede Recheneinheit 3840, ohne Beschränkung darauf, eine beliebige Anzahl von SIMD-Einheiten 3850 und einen gemeinsamen Speicher 3860. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 3850 eine SIMD-Architektur und ist zur parallelen Ausführung von Operationen konfiguriert. In mindestens einer Ausführungsform beinhaltet jede SIMD-Einheit 3850, ohne Beschränkung darauf, eine Vektor-ALU 3852 und eine Vektorregisterdatei 3854. In mindestens einer Ausführungsform führt jede SIMD-Einheit 3850 einen anderen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread in dem Warp zu einem einzelnen Thread-Block gehört und so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage eines einzelnen Satzes von Anweisungen verarbeitet. In mindestens einer Ausführungsform kann Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement bzw. Workitem ein Thread. In mindestens einer Ausführungsform ist eine Wellenfront ein Thread. In mindestens einer Ausführungsform können verschiedene Wellenfronten in einem Thread-Block miteinander synchronisieren und über den gemeinsam genutzten Speicher 3860 kommunizieren.In at least one embodiment, each
In mindestens einer Ausführungsform werden programmierbare Verarbeitungseinheiten 3820 als „Shader-Engines“ bezeichnet. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3820, ohne Beschränkung darauf, eine beliebige Menge an dedizierter Grafikhardware zusätzlich zu Recheneinheiten 3840. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3820, ohne Beschränkung darauf, eine beliebige Anzahl (einschließlich null) von Geometrieprozessoren, eine beliebige Anzahl (einschließlich null) von Rasterisierern, eine beliebige Anzahl (einschließlich null) von Render-Backends, einen Arbeitslastverwalter 3830 und eine beliebige Anzahl von Recheneinheiten 3840.In at least one embodiment,
In mindestens einer Ausführungsform teilen sich die Recheneinheiten 3840 einen L2-Cache 3822. In mindestens einer Ausführungsform ist der L2-Cache 3822 partitioniert. In mindestens einer Ausführungsform ist ein GPU-Speicher 3890 für alle Recheneinheiten 3840 in der GPU 3692 zugänglich. In mindestens einer Ausführungsform erleichtern Speichercontroller 3870 und Systemspeichercontroller 3882 die Datenübertragung zwischen der GPU 3692 und einem Host, und ermöglichen die DMA-Engines 3880(1) asynchrone Speicherübertragungen zwischen der GPU 3692 und einem solchen Host. In mindestens einer Ausführungsform erleichtern Speichercontroller 3870 und GPU-Controller 3884 Datenübertragungen zwischen der GPU 3692 und anderen GPUs 3692, und ermöglichen DMA-Engines 3880(2) asynchrone Speicherübertragungen zwischen der GPU 3692 und anderen GPUs 3692.In at least one embodiment, the
In mindestens einer Ausführungsform beinhaltet die GPU 3692, ohne Beschränkung darauf, eine beliebige Anzahl und Art von Systemverbindungen, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten, die intern oder extern zur GPU 3692 sein können, hinweg erleichtern. In mindestens einer Ausführungsform beinhaltet die GPU 3692, ohne Beschränkung darauf, eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCIe), die mit einer beliebigen Anzahl und Art von Peripheriegeräten gekoppelt sind. In mindestens einer Ausführungsform kann die GPU 3692, ohne Beschränkung darauf, eine beliebige Anzahl (einschließlich Null) von Display-Engines und eine beliebige Anzahl (einschließlich Null) von Multimedia-Engines enthalten. In mindestens einer Ausführungsform implementiert die GPU 3692 ein Speicher-Subsystem, das, ohne Beschränkung darauf, eine beliebige Anzahl und eine beliebige Art von Speichercontrollern (z.B. Speichercontroller 3870 und Systemspeichercontroller 3882) und Speichervorrichtungen (z.B. gemeinsam genutzte Speicher 3860) umfasst, die einer Komponente zugeordnet oder von mehreren Komponenten gemeinsam genutzt werden können. In mindestens einer Ausführungsform implementiert die GPU 3692 ein Cache-Subsystem, das, ohne Beschränkung darauf, einen oder mehrere Cachespeicher (z.B. L2-Cache 3822) umfasst, die jeweils für eine beliebige Anzahl von Komponenten (z.B. SIMD-Einheiten 3850, Recheneinheiten 3840 und programmierbare Verarbeitungseinheiten 3820) reserviert oder von diesen gemeinsam genutzt werden können.In at least one embodiment,
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform wird das Raster 3920 auf die programmierbare Verarbeitungseinheit 3820(1) abgebildet, die, ohne Beschränkung darauf, die Recheneinheiten 3840(1)-3840(C) umfasst. In mindestens einer Ausführungsform und wie gezeigt werden (BJ * BY) Thread-Blöcke 3930 auf die Recheneinheit 3840(1) abgebildet, und werden die restlichen Thread-Blöcke 3930 auf die Recheneinheit 3840(2) abgebildet. In mindestens einer Ausführungsform kann jeder Thread-Block 3930, ohne Beschränkung darauf, eine beliebige Anzahl von Warps enthalten, und ist jeder Warp einer anderen SIMD-Einheit 3850 von
In mindestens einer Ausführungsform können Warps in einem gegebenen Thread-Block 3930 zusammen synchronisieren und über gemeinsam genutzten Speicher 3860 in der zugeordneten Recheneinheit 3840 kommunizieren. Zum Beispiel und in mindestens einer Ausführungsform können Warps in dem Thread-Block 3930(BJ,1) zusammen synchronisieren und über den gemeinsam genutzten Speicher 3860(1) kommunizieren. Zum Beispiel und in mindestens einer Ausführungsform können Warps in dem Thread-Block 3930(BJ+1,1) zusammen synchronisieren und über den gemeinsam genutzten Speicher 3860(2) kommunizieren.In at least one embodiment, warps in a given
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform wird ein DPC++-Compiler verwendet, um DPC++-Quellcode zu kompilieren, der auf verschiedenen Hardware-Zielen eingesetzt werden kann. In mindestens einer Ausführungsform wird ein DPC++-Compiler verwendet, um DPC++-Anwendungen zu erzeugen, die auf verschiedenen Hardwarezielen eingesetzt werden können, und kann ein DPC++-Kompatibilitätswerkzeug verwendet werden, um CUDA-Anwendungen in ein Multiplattformprogramm in DPC++ zu migrieren. In mindestens einer Ausführungsform umfasst ein DPC++-Basis-Toolkit einen DPC++-Compiler zum Einsatz von Anwendungen auf verschiedenen Hardwarezielen, eine DPC++-Bibliothek zur Steigerung der Produktivität und Leistung auf CPUs, GPUs und FPGAs, ein DPC++-Kompatibilitätswerkzeug zur Migration von CUDA-Anwendungen in Anwendungen für mehrere- Plattformen und eine beliebige geeignete Kombination davon.In at least one embodiment, a DPC++ compiler is used to compile DPC++ source code that can be deployed on various hardware targets. In at least one embodiment, a DPC++ compiler is used to produce DPC++ applications that can be deployed on various hardware targets, and a DPC++ compatibility tool can be used to migrate CUDA applications into a multiplatform program in DPC++. In at least one embodiment, a DPC++ base toolkit includes a DPC++ compiler for deploying applications on various hardware targets, a DPC++ library for increasing productivity and performance on CPUs, GPUs and FPGAs, a DPC++ compatibility tool for migrating CUDA applications in multi-platform applications and any suitable combination thereof.
In mindestens einer Ausführungsform wird ein DPC++-Programmiermodell verwendet, um einen oder mehrere Aspekte im Zusammenhang mit der Programmierung von CPUs und Beschleunigern zu vereinfachen, indem moderne C++-Funktionen verwendet werden, um Parallelität mit einer Programmiersprache namens Data Parallel C++ auszudrücken. Die DPC++-Programmiersprache kann zur Code-Wiederverwendung für Hosts (z.B. eine CPU) und Beschleuniger (z.B. eine GPU oder FPGA) unter Verwendung einer einzigen Quellsprache verwendet werden, wobei Ausführungs- und Speicherabhängigkeiten klar kommuniziert werden. Mappings innerhalb des DPC++-Codes können verwendet werden, um eine Anwendung auf einer Hardware oder einem Satz von Hardwaregeräten laufen zu lassen, die eine Arbeitslast am besten beschleunigen. Ein Host kann verfügbar sein, um die Entwicklung und das Debugging von Gerätecode zu vereinfachen, auch auf Plattformen, die keinen Beschleuniger zur Verfügung haben.In at least one embodiment, a DPC++ programming model is used to simplify one or more aspects related to programming CPUs and accelerators by using modern C++ functions to express parallelism with a programming language called Data Parallel C++. The DPC++ programming language can be used for code reuse for hosts (e.g. a CPU) and accelerators (e.g. a GPU or FPGA) using a single source language, clearly communicating execution and memory dependencies. Mappings within DPC++ code can be used to run an application on hardware or a set of hardware devices that best accelerate a workload. A host can be available to simplify development and debugging of device code, even on platforms that do not have an accelerator available.
In mindestens einer Ausführungsform wird der CUDA-Quellcode 4000 als Eingabe für ein DPC++-Kompatibilitätswerkzeug 4002 bereitgestellt, um für Menschen lesbares DPC++ 4004 zu erzeugen. In mindestens einer Ausführungsform enthält für Menschen lesbares DPC++ 4004 Inline-Kommentare, die vom DPC++-Kompatibilitätswerkzeug 4002 generiert werden und den Entwickler anleiten, wie und/oder wo er den DPC++-Code modifizieren muss, um die Codierung abzuschließen und auf die gewünschte Leistung 4006 abzustimmen und dadurch den DPC++-Quellcode 4008 zu erzeugen.In at least one embodiment, the
In mindestens einer Ausführungsform ist oder enthält der CUDA-Quellcode 4000 eine Sammlung von für Menschen lesbarem Quellcode in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist der CUDA-Quellcode 4000 von Menschen lesbarer Quellcode in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist eine CUDA-Programmiersprache eine Erweiterung der Programmiersprache C++, die, ohne Beschränkung darauf, Mechanismen zur Definition von Gerätecode und zur Unterscheidung zwischen Gerätecode und Hostcode enthält. In mindestens einer Ausführungsform ist Gerätecode ein Quellcode, der nach der Kompilierung auf einem Gerät (z.B. einer GPU oder einem FPGA) ausführbar ist und mehrere parallelisierbare Workflows enthalten kann, die auf einem oder mehreren Prozessorkernen eines Geräts ausgeführt werden können. In mindestens einer Ausführungsform kann ein Gerät ein Prozessor sein, der für die parallele Befehlsverarbeitung optimiert ist, z.B. eine CUDA-fähige GPU, GPU oder eine andere GPGPU usw. In mindestens einer Ausführungsform ist der Hostcode ein Quellcode, der nach der Kompilierung auf einem Host ausführbar ist. In mindestens einer Ausführungsform können ein Teil oder der gesamte Hostcode und Gerätecode parallel auf einer CPU und einer GPU/FPGA ausgeführt werden. In mindestens einer Ausführungsform ist ein Host ein Prozessor, der für sequenzielle Befehlsverarbeitung optimiert ist, wie z.B. eine CPU. Der in Verbindung mit
In mindestens einer Ausführungsform bezieht sich das DPC++-Kompatibilitätswerkzeug 4002 auf ein ausführbares Werkzeug, ein Programm, eine Anwendung oder eine beliebige andere geeignete Art von Werkzeug, das zur Erleichterung der Migration von CUDA-Quellcode 4000 zu DPC++-Quellcode 4008 verwendet wird. In mindestens einer Ausführungsform ist das DPC++-Kompatibilitätswerkzeug 4002 ein Befehlszeilen- basiertes Code-Migrationswerkzeug, das als Teil eines DPC++-Toolkits verfügbar ist und zur Portierung bestehender CUDA-Quellen auf DPC++ verwendet wird. In mindestens einer Ausführungsform konvertiert das DPC++-Kompatibilitätswerkzeug 4002 einen Teil oder den gesamten Quellcode einer CUDA-Anwendung von CUDA nach DPC++ und erzeugt eine resultierende Datei, die zumindest teilweise in DPC++ geschrieben ist und als für Menschen lesbares DPC++ 4004 bezeichnet wird. In mindestens einer Ausführungsform enthält das für Menschen lesbare DPC++ 4004 Kommentare, die von dem DPC++-Kompatibilitätswerkzeug 4002 erzeugt werden, um anzuzeigen, wo ein Benutzereingriff notwendig sein kann. In mindestens einer Ausführungsform ist ein Benutzereingriff notwendig, wenn der CUDA-Quellcode 4000 eine CUDA-API aufruft, für die es keine analoge DPC++-API gibt; andere Beispiele, bei denen ein Benutzereingriff erforderlich ist, werden später ausführlicher erörtert.In at least one embodiment,
In mindestens einer Ausführungsform umfasst ein Arbeitsablauf zum Migrieren von CUDA-Quellcode 4000 (z.B. einer Anwendung oder eines Teils davon) das Erstellen einer oder mehrerer Kompilierungsdatenbankdateien; das Migrieren von CUDA zu DPC++ unter Verwendung eines DPC++-Kompatibilitätswerkzeugs4002; das Abschließen der Migration und Überprüfen der Korrektheit, wodurch DPC++-Quellcode 4008 erzeugt wird; und das Kompilieren von DPC++-Quellcode 4008 mit einem DPC++-Compiler, um eine DPC++-Anwendung zu erzeugen. In mindestens einer Ausführungsform stellt ein Kompatibilitätswerkzeug ein Dienstprogramm bereit, das Befehle abfängt, die bei der Ausführung von Makefile verwendet werden, und sie in einer Kompilierungsdatenbankdatei speichert. In mindestens einer Ausführungsform wird eine Datei im JSON-Format gespeichert. In mindestens einer Ausführungsform wandelt ein intercept-built-Befehl den Makefile-Befehl in einen DPC-Kompatibilitätsbefehl um.In at least one embodiment, a workflow for migrating CUDA source code 4000 (e.g., an application or a portion thereof) includes creating one or more compilation database files; migrating from CUDA to DPC++ using a DPC++ compatibility tool4002; completing the migration and verifying correctness, producing
In mindestens einer Ausführungsform ist intercept-build ein Hilfsskript, das einen Build-Prozess abfängt, um Kompilierungsoptionen, Makrodefinitionen und Include-Pfade zu erfassen, und diese Daten in eine Kompilierungsdatenbankdatei schreibt. In mindestens einer Ausführungsform handelt es sich bei der Kompilierungsdatenbankdatei um eine JSON-Datei. In mindestens einer Ausführungsform analysiert das DPC++-Kompatibilitätswerkzeug 4002 eine Kompilierungsdatenbank und wendet Optionen an, wenn Eingabequellen migriert werden. In mindestens einer Ausführungsform ist die Verwendung von intercept-build optional, wird aber für Make- oder CMake-basierte Umgebungen dringend empfohlen. In mindestens einer Ausführungsform enthält eine Migrationsdatenbank Befehle, Verzeichnisse und Dateien: Der Befehl kann die erforderlichen Kompilierungsflags enthalten; das Verzeichnis kann Pfade zu Header-Dateien enthalten; die Datei kann Pfade zu CUDA-Dateien enthalten.In at least one embodiment, intercept-build is a helper script that intercepts a build process to capture compilation options, macro definitions, and include paths and writes this data to a compilation database file. In at least one embodiment, the compilation database file is a JSON file. In at least one embodiment, the
In mindestens einer Ausführungsform migriert das DPC++-Kompatibilitätswerkzeug 4002 CUDA-Code (z.B. Anwendungen), der in CUDA geschrieben wurde, nach DPC++, indem es, wo immer möglich, DPC++ generiert. In mindestens einer Ausführungsform ist das DPC++-Kompatibilitätswerkzeug 4002 als Teil eines Toolkits erhältlich. In mindestens einer Ausführungsform umfasst ein DPC++-Toolkit ein intercept-build-Werkzeug. In mindestens einer Ausführungsform erstellt ein intercept-build Werkzeug eine Kompilierungsdatenbank, die Kompilierungsbefehle zur Migration von CUDA-Dateien erfasst. In mindestens einer Ausführungsform wird eine Kompilierungsdatenbank, die von einem intercept-build-Werkzeug erzeugt wird, von dem DPC++ Kompatibilitätswerkzeug 4002 verwendet, um CUDA Code nach DPC++ zu migrieren. In mindestens einer Ausführungsform werden nicht-CUDA C++ Code und Dateien unverändert migriert. In mindestens einer Ausführungsform erzeugt das DPC++-Kompatibilitätswerkzeug 4002 für Menschen lesbares DPC++ 4004, bei dem es sich um DPC++-Code handeln kann, der in der vom DPC++-Kompatibilitätswerkzeug 4002 erzeugten Form nicht vom DPC++-Compiler kompiliert werden kann und zusätzliche Auslotung erfordert, um Teile des Codes, die nicht korrekt migriert wurden, zu überprüfen, und der manuelle Eingriffe, beispielsweise durch einen Entwickler, erfordern kann. In mindestens einer Ausführungsform bietet das DPC++-Kompatibilitätswerkzeug 4002 in den Code eingebettete Hinweise oder Werkzeuge, die dem Entwickler helfen, zusätzlichen Code, der nicht automatisch migriert werden konnte, manuell zu migrieren. In mindestens einer Ausführungsform ist die Migration eine- Zeitaktivität für eine Quelldatei, ein Projekt oder eine Anwendung.In at least one embodiment, the
In mindestens einer Ausführungsform ist das DPC++-Kompatibilitätswerkzeug 40002 in der Lage, alle Teile des CUDA-Codes erfolgreich nach DPC++ zu migrieren, und kann es lediglich einen optionalen Schritt zur manuellen Überprüfung und Abstimmung der Leistung des erzeugten DPC++-Quellcodes geben. In mindestens einer Ausführungsform erzeugt das DPC++-Kompatibilitätswerkzeug 4002 direkt DPC++-Quellcode 4008, der von einem DPC++-Compiler kompiliert wird, ohne dass ein menschliches Eingreifen zur Änderung des vom DPC++-Kompatibilitätswerkzeug 4002 erzeugten DPC++-Codes erforderlich ist oder genutzt wird. In mindestens einer Ausführungsform erzeugt das DPC++ Kompatibilitätswerkzeug kompilierbaren DPC++ Code, der optional von einem Entwickler auf Leistung, Lesbarkeit, Wartbarkeit, andere verschiedene Überlegungen oder eine Kombination davon abgestimmt werden kann.In at least one embodiment, the DPC++ compatibility tool 40002 is capable of successfully migrating all portions of CUDA code to DPC++, and there may be only an optional step to manually review and tune the performance of the generated DPC++ source code. In at least one embodiment, the
In mindestens einer Ausführungsform werden eine oder mehrere CUDA-Quelldateien zumindest teilweise mit dem DPC++-Kompatibilitätswerkzeug 4002 in DPC++-Quelldateien migriert. In mindestens einer Ausführungsform enthält der CUDA-Quellcode eine oder mehrere Header-Dateien, die auch CUDA-Header-Dateien enthalten können. In mindestens einer Ausführungsform enthält eine CUDA-Quelldatei eine <cuda.h>-Header-Datei und eine <stdio.h>-Header-Datei, die zum Drucken von Text verwendet werden kann. In mindestens einer Ausführungsform kann ein Teil einer CUDA-Quelldatei für einen Vektoradditionskern als oder mit Bezug auf geschrieben werden:
#include <cuda.h> #include <stdio.h> #define VECTOR_SIZE 256 [] global_void VectorAddKernel(float* A, float* B, float* C) { A[threadldx.x] = threadldx.x + 1.0f; B[threadldx.x] = threadldx.x + 1.0f; }C[threadldx.x] = A[threadIdx.x] + B[threadldx.x]; int main() {float *d_A, *d_B, *d_C; cudaMalloc(& d_A, VECTOR_SIZE*sizeof(float)); cudaMalloc(& d_B, VECTOR_SIZE*sizeof(float)); cudaMalloc(& d_C, VECTOR_SIZE*sizeof(float)); VectorAddKernel«<1, VECTOR_SIZE» >(d_A, d_B, d_C); float Result[VECTOR_SIZE] = { }; cudaMemcpy(Result, d_C, VECTOR_SIZE*sizeof(float), cudaMemcpyDeviceToHost); cudaFree(d_A); cudaFree(d_B); cudaFree(d_C); for (int i=0; i<VECTOR_SIZE; i++ { if(i % 16 == 0){ }}printf("\n"); printf("%f ", Ergebnis[i]); }In at least one embodiment, one or more CUDA source files are at least partially migrated to DPC++ source files using thereturn 0;
#include <cuda.h>#include<stdio.h>#define VECTOR_SIZE 256 [] global_void VectorAddKernel(float* A, float* B, float* C) { A[threadldx.x] = threadldx.x + 1.0f; B[threadldx.x] = threadldx.x + 1.0f; }C[threadldx.x] = A[threadIdx.x] + B[threadldx.x]; int main() {float *d_A, *d_B, *d_C; cudaMalloc(& d_A, VECTOR_SIZE*sizeof(float)); cudaMalloc(& d_B, VECTOR_SIZE*sizeof(float)); cudaMalloc(& d_C, VECTOR_SIZE*sizeof(float)); VectorAddKernel«<1, VECTOR_SIZE» >(d_A, d_B, d_C); float Result[VECTOR_SIZE] = { }; cudaMemcpy(Result, d_C, VECTOR_SIZE*sizeof(float), cudaMemcpyDeviceToHost); cudaFree(d_A); cudaFree(d_B); cudaFree(d_C); for (int i=0; i<VECTOR_SIZE; i++ { if(i % 16 == 0){ }}printf("\n");printf("%f",result[i]); }return 0;
In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei analysiert das DPC++-Kompatibilitätswerkzeug 4002 einen CUDA-Quellcode und ersetzt die Header-Dateien durch geeignete DPC++- und SYCL-Header-Dateien. In mindestens einer Ausführungsform enthalten die DPC++-Headerdateien Hilfsdeklarationen. In CUDA gibt es das Konzept einer Thread-ID, und dementsprechend gibt es in DPC++ oder SYCL für jedes Element einen lokalen Bezeichner.In at least one embodiment, and in conjunction with the CUDA source file presented above, the
In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei gibt es zwei Vektoren A und B, die initialisiert werden, und wird ein Vektoradditionsergebnis als Teil von VectorAddKernel() in den Vektor C gestellt. In mindestens einer Ausführungsform konvertiert das DPC++-Kompatibilitätswerkzeug 4002 CUDA-Thread-IDs, die zur Indizierung von Arbeitselementen verwendet werden, in SYCL-Standardadressierung für Arbeitselemente über eine lokale ID als Teil der Migration von CUDA-Code in DPC++-Code. In mindestens einer Ausführungsform kann der vom DPC++-Kompatibilitätswerkzeug 4002 erzeugte DPC++-Code optimiert werden, beispielsweise durch Verringerung der Dimensionalität eines nd_item, wodurch die Speicher- und/oder Prozessorauslastung erhöht wird.In at least one embodiment, and in conjunction with the CUDA source file presented above, there are two vectors A and B that are initialized and a vector addition result is placed into vector C as part of VectorAddKernel(). In at least one embodiment, the
In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei wird die Speicherzuweisung migriert. In mindestens einer Ausführungsform wird cudaMalloc() zu einem einheitlichen SYCL-Aufruf malloc_device() mit gemeinsamem Speicher migriert, dem ein Gerät und ein Kontext übergeben wird, wobei SYCL-Konzepte wie Plattform, Gerät, Kontext und Warteschlange verwendet werden. In mindestens einer Ausführungsform kann eine SYCL-Plattform mehrere Geräte haben (z.B. Host- und GPU-Geräte); kann ein Gerät mehrere Warteschlangen haben, an die Aufträge übermittelt werden können; kann jedes Gerät einen Kontext haben; und kann ein Kontext mehrere Geräte haben und gemeinsam genutzte Speicherobjekte verwalten.In at least one embodiment, and in conjunction with the CUDA source file presented above, the memory allocation is migrated. In at least one embodiment, cudaMalloc() is migrated to a unified shared memory SYCL malloc_device() call that is passed a device and a context using SYCL concepts such as platform, device, context, and queue. In at least one embodiment, a SYCL platform may have multiple devices (e.g., host and GPU devices); a device can have multiple queues to which jobs can be submitted; each device can have a context; and a context can have multiple devices and manage shared storage objects.
In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei ruft eine main()-Funktion VectorAddKernel() auf, um zwei Vektoren A und B zu addieren und das Ergebnis in Vektor C zu speichern. In mindestens einer Ausführungsform wird der CUDA-Code zum Aufrufen von VectorAddKernel() durch DPC++-Code ersetzt, um einen Kernel zur Ausführung an eine Befehlswarteschlange zu übergeben. In mindestens einer Ausführungsform übergibt ein Befehlsgruppen-Handler cgh Daten, Synchronisierung und Berechnungen, die an die Warteschlange übermittelt werden, parallel_for wird für eine Anzahl globaler Elemente und eine Anzahl von Arbeitselementen in dieser Arbeitsgruppe aufgerufen, in der VectorAddKernel() aufgerufen wird.In at least one embodiment, and in conjunction with the CUDA source file presented above, a main() function calls VectorAddKernel() to add two vectors A and B and store the result in vector C. In at least one embodiment, the CUDA code for calling VectorAddKernel() is replaced with DPC++ code to submit a kernel to a command queue for execution. In at least one embodiment, a command group handler cgh passes data, synchronization and computations submitted to the queue, parallel_for is called for a number of global elements and a number of work elements in that workgroup in which VectorAddKernel() is called.
In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei werden CUDA-Aufrufe zum Kopieren von Gerätespeicher und zum anschließenden Freigeben von Speicher für die Vektoren A, B und C in entsprechende DPC++-Aufrufe migriert. In mindestens einer Ausführungsform wird C++-Code (z.B. Standard-ISO-C++-Code zum Drucken eines Vektors von Gleitkommavariablen) unverändert migriert, ohne vom DPC++-Kompatibilitätswerkzeug 4002 geändert zu werden. In mindestens einer Ausführungsform modifiziert das DPC++-Kompatibilitätswerkzeug 4002 die CUDA-APIs für die Speichereinrichtung und/oder Host-Aufrufe, um den Kernel auf dem Beschleunigungsgerät auszuführen. In mindestens einer Ausführungsform und in Verbindung mit der oben vorgestellten CUDA-Quelldatei wird ein entsprechendes, für Menschen lesbares DPC++ 4004 (das z.B. kompiliert werden kann) als oder mit Bezug auf geschrieben:
#include <CL/sycl.hpp> #include <dpct/dpct.hpp> #define VECTOR_SIZE 256 void VectorAddKernel(float* A, float* B, float* C, {sycl::nd_item<3> item_ct1) A[item_ct1.get_local_id(2)] = item_ct1.get_local_id(2) + 1.0f; B[item_ct1.get_local_id(2)] = item_ct1.get_local_id(2) + 1.0f; C[item_ct1.get_local_id(2)] = }A[item_ct1 .get_local_id(2)] + B[item_ct1.get_local_id(2)]; int main() {float *d_A, *d_B, *d_C; d_A = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); d_B = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); d_C = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); dpct::get_default_queue_wait().submit([&](sycl::handler & cgh) { cgh.parallel_for( sycl::nd_range<3>(sycl::range<3>(1, 1, 1) * sycl::range<3>(1, 1, VECTOR_SIZE) * sycl::range<3>(1, 1, VEC- TOR_SIZE)), [=](sycl::nd_items<3> item_ct1) { }); });VectorAddKernel(d_A, d_B, d_C, item_ct1); float Result[VECTOR_SIZE] = { }; dpct::get_default_queue_wait() .memcpy(Ergebnis, d_C, VECTOR_SIZE * sizeof(float)) .wait(); sycl::free(d_A, dpct::get_default_context()); sycl::free(d_B, dpct::get_default_context()); sycl::free(d_C, dpct::get_default_context()); for (int i=0; i<VECTOR_SIZE; i++ { if(i % 16 == 0){ printf("\n"); } printf("%f ", Ergebnis[i]); } }return 0;In at least one embodiment, and in conjunction with the CUDA source file presented above, CUDA calls to copy device memory and then free memory for vectors A, B, and C are migrated into corresponding DPC++ calls. In at least one embodiment, C++ code (e.g., standard ISO C++ code for printing a vector of floating point variables) is migrated as is, without being modified by the
#include <CL/sycl.hpp>#include<dpct/dpct.hpp>#define VECTOR_SIZE 256 void VectorAddKernel(float* A, float* B, float* C, {sycl::nd_item<3> item_ct1) A[item_ct1.get_local_id(2)] = item_ct1.get_local_id(2) + 1.0f; B[item_ct1.get_local_id(2)] = item_ct1.get_local_id(2) + 1.0f; C[item_ct1.get_local_id(2)] = }A[item_ct1 .get_local_id(2)] + B[item_ct1.get_local_id(2)]; int main() {float *d_A, *d_B, *d_C; d_A = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); d_B = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); d_C = (float *)sycl::malloc_device(VECTOR_SIZE * sizeof(float), dpct::get_current_device(), dpct::get_default_context()); dpct::get_default_queue_wait().submit([&](sycl::handler & cgh) { cgh.parallel_for( sycl::nd_range<3>(sycl::range<3>(1, 1, 1) * sycl::range<3>(1, 1, VECTOR_SIZE) * sycl::range<3>(1, 1, VEC- GOAL_SIZE)), [=](sycl::nd_items<3> item_ct1) { }); });VectorAddKernel(d_A, d_B, d_C, item_ct1); float Result[VECTOR_SIZE] = { }; dpct::get_default_queue_wait() .memcpy(result, d_C, VECTOR_SIZE * sizeof(float)) .wait(); sycl::free(d_A, dpct::get_default_context()); sycl::free(d_B, dpct::get_default_context()); sycl::free(d_C, dpct::get_default_context()); for (int i=0; i<VECTOR_SIZE; i++ { if(i % 16 == 0){ printf("\n"); } printf("%f ", result[i]); } }return 0;
In mindestens einer Ausführungsform bezieht sich das für Menschen lesbare DPC++ 4004 auf die vom DPC++ Kompatibilitätswerkzeug 4002 erzeugte Ausgabe und kann auf die eine oder andere Weise optimiert werden. In mindestens einer Ausführungsform kann das vom DPC++ Kompatibilitätswerkzeug 4002 erzeugte, für Menschen lesbare DPC++ 4004 von einem Entwickler nach der Migration manuell bearbeitet werden, um es wartbarer zu machen, die Leistung zu verbessern oder andere Überlegungen anzustellen. In mindestens einer Ausführungsform kann der vom DPC++-Kompatibilitätswerkzeug 40002 generierte DPC++-Code, wie z.B. DPC++ disclosed, durch Entfernen der wiederholten Aufrufe von get_current_device() und/oder get_default_context() für jeden malloc_device()-Aufruf optimiert werden. In mindestens einer Ausführungsform verwendet der oben erzeugte DPC++-Code einen dreidimensionalen nd_range, der so umgestaltet werden kann, dass er nur eine einzige Dimension verwendet, wodurch die Speichernutzung reduziert wird. In mindestens einer Ausführungsform kann ein Entwickler den vom DPC++-Kompatibilitätswerkzeug 4002 erzeugten DPC++-Code manuell bearbeiten und die Verwendung von gemeinsam genutztem Speicher durch Accessoren ersetzen. In mindestens einer Ausführungsform verfügt das DPC++-Kompatibilitätswerkzeug 4002 über eine Option zum Ändern der Art und Weise, wie es CUDA-Code in DPC++-Code migriert. In mindestens einer Ausführungsform ist das DPC++-Kompatibilitätswerkzeug 4002 sehr ausführlich, da es eine allgemeine Vorlage für die Migration von CUDA-Code in DPC++-Code verwendet, die für eine große Anzahl von Fällen funktioniert.In at least one embodiment, the human readable DPC++ 4004 refers to the output produced by the
In mindestens einer Ausführungsform umfasst ein Arbeitsablauf für die Migration von CUDA zu DPC++ die folgenden Schritte: Vorbereitung der Migration mit Hilfe des Intercept- Build-Skripts; Durchführung der Migration von CUDA-Projekten zu DPC++ mit Hilfe des DPC++-Kompatibilitätswerkzeugs 4002; manuelle Überprüfung und Bearbeitung der migrierten Quelldateien auf Vollständigkeit und Korrektheit; und Kompilierung des endgültigen DPC++-Codes zur Erzeugung einer DPC++-Anwendung. In mindestens einer Ausführungsform kann eine manuelle Überprüfung des DPC++-Quellcodes in einem oder mehreren Szenarien erforderlich sein, einschließlich, aber nicht beschränkt auf: migrierte API gibt keinen Fehlercode zurück (CUDA-Code kann einen Fehlercode zurückgeben, der dann von der Anwendung verwendet werden kann, aber SYCL verwendet Ausnahmen, um Fehler zu melden, und verwendet daher keine Fehlercodes, um Fehler aufzudecken); CUDA-Compute-Capability-abhängige Logik wird von DPC++ nicht unterstützt; Anweisung konnte nicht entfernt werden. In mindestens einer Ausführungsform können Szenarien, in denen DPC++-Code ein manuelles Eingreifen erfordert, ohne Beschränkung Folgendes umfassen: Fehlercode-Logik, die durch (*,0)-Code ersetzt oder auskommentiert wird; äquivalente DPC++-API ist nicht verfügbar; von der CUDA-Berechnungsfähigkeit- abhängige Logik; von der Hardware- abhängige API (clock()); fehlende Funktionen, die nicht von der API unterstützt werden; Logik zur Messung der Ausführungszeit; Handhabung von- in Vektortypkonflikten; Migration der cuBLAS-API; und mehr.In at least one embodiment, a workflow for migrating from CUDA to DPC++ includes the following steps: preparing the migration using the intercept build script; Performed migration of CUDA projects to DPC++ using
In mindestens einer Ausführungsform werden ein oder mehrere in
In mindestens einer Ausführungsform verwenden eine oder mehrere von hierin beschriebenen Techniken ein oneAPI-Programmiermodell. In mindestens einer Ausführungsform bezieht sich ein oneAPI-Programmiermodell auf ein Programmiermodell zum Interagieren mit verschiedenen Rechenbeschleunigerarchitekturen. In mindestens einer Ausführungsform bezieht sich oneAPI auf eine Anwendungsprogrammierschnittstelle (API), die dazu entwickelt wurde, mit verschiedenen Rechenbeschleunigerarchitekturen zu interagieren. In mindestens einer Ausführungsform verwendet ein oneAPI-Programmiermodell eine DPC++-Programmiersprache. In mindestens einer Ausführungsform bezieht sich eine DPC++-Programmiersprache auf eine Hochsprache für Produktivität datenparalleler Programmierung. In mindestens einer Ausführungsform basiert eine DPC++-Programmiersprache zumindest teilweise auf den Programmiersprachen C und/oder C++. In mindestens einer Ausführungsform ist ein oneAPI-Programmiermodell ein Programmiermodell wie beispielsweise diejenigen, die von der Intel Corporation in Santa Clara, CA, entwickelt wurden.In at least one embodiment, one or more techniques described herein utilize a oneAPI programming model. In at least one embodiment, a oneAPI programming model refers to a programming model for interacting with various computing accelerator architectures. In at least one embodiment, oneAPI refers to an application programming interface (API) designed to interact with various computing accelerator architectures. In at least one embodiment, a oneAPI programming model uses a DPC++ programming language. In at least one embodiment, a DPC++ programming language refers to a high-level language for data parallel programming productivity. In at least one embodiment, a DPC++ programming language is based at least partially on the C and/or C++ programming languages. In at least one embodiment, a oneAPI programming model is a programming model such as those developed by Intel Corporation of Santa Clara, CA.
In mindestens einer Ausführungsform wird oneAPI und/oder ein oneAPI-Programmiermodell verwendet, um mit verschiedenen Beschleuniger-, GPU-, Prozessor- und/oder Variationen davon-Architekturen zu interagieren. In mindestens einer Ausführungsform umfasst oneAPI eine Reihe von Bibliotheken, die verschiedene Funktionalitäten implementieren. In mindestens einer Ausführungsform umfasst oneAPI mindestens eine oneAPI-DPC++-Bibliothek, eine oneAPI-Mathematik-Kernel-Bibliothek, eine oneAPI-Datenanalysebibliothek, eine oneAPI-Bibliothek für tiefe neuronale Netzwerke, eine oneAPI-Bibliothek für kollektive Kommunikation, eine oneAPI-Bibliothek für Threading-Bausteine, eine oneAPI-Bibliothek für Videoverarbeitung und/oder Variationen davon.In at least one embodiment, oneAPI and/or a oneAPI programming model is used to interface with various accelerator, GPU, processor, and/or variations thereof architectures to interact. In at least one embodiment, oneAPI includes a set of libraries that implement various functionalities. In at least one embodiment, oneAPI includes at least a oneAPI DPC++ library, a oneAPI math kernel library, a oneAPI data analysis library, a oneAPI deep neural network library, a oneAPI collective communication library, a oneAPI library for Threading building blocks, a oneAPI library for video processing and/or variations thereof.
In mindestens einer Ausführungsform ist eine oneAPI-DPC++-Bibliothek, auch als oneDPL bezeichnet, eine Bibliothek, die Algorithmen und Funktionen zur Beschleunigung der DPC++-Kernelprogrammierung implementiert. In mindestens einer Ausführungsform implementiert oneDPL eine oder mehrere Funktionen der Standard Template Library (STL). In mindestens einer Ausführungsform implementiert oneDPL eine oder mehrere parallele STL-Funktionen. In mindestens einer Ausführungsform stellt oneDPL einen Satz von Bibliotheksklassen und -funktionen wie parallele Algorithmen, Iteratoren, Funktionsobjektklassen, bereichsbasierte API und/oder Variationen davon bereit. In mindestens einer Ausführungsform implementiert oneDPL eine oder mehrere Klassen und/oder Funktionen einer C++-Standardbibliothek. In mindestens einer Ausführungsform implementiert oneDPL eine oder mehrere Zufallszahlengeneratorfunktionen.In at least one embodiment, a oneAPI DPC++ library, also referred to as oneDPL, is a library that implements algorithms and functions to accelerate DPC++ kernel programming. In at least one embodiment, oneDPL implements one or more functions of the Standard Template Library (STL). In at least one embodiment, oneDPL implements one or more parallel STL functions. In at least one embodiment, oneDPL provides a set of library classes and functions such as parallel algorithms, iterators, function object classes, scope-based API, and/or variations thereof. In at least one embodiment, oneDPL implements one or more classes and/or functions of a C++ standard library. In at least one embodiment, oneDPL implements one or more random number generator functions.
In mindestens einer Ausführungsform ist eine oneAPI-Mathematik-Kernel-Bibliothek, auch als oneMKL bezeichnet, eine Bibliothek, die verschiedene optimierte und parallelisierte Routinen für verschiedene mathematische Funktionen und/oder Operationen implementiert. In mindestens einer Ausführungsform implementiert oneMKL ein oder mehrere Basic Linear Algebra Subprograms (BLAS) und/oder Linear Algebra Package (LAPACK) Dense Linear Algebra Routines. In mindestens einer Ausführungsform implementiert oneMKL eine oder mehrere dünn besetzte BLAS-Routinen für lineare Algebra. In mindestens einer Ausführungsform implementiert oneMKL einen oder mehrere Zufallszahlengeneratoren (RNGs). In mindestens einer Ausführungsform implementiert oneMKL eine oder mehrere Vektormathematik (VM)-Routinen für mathematische Operationen mit Vektoren. In mindestens einer Ausführungsform implementiert oneMKL eine oder mehrere Fast-Fourier-Transformationsfunktionen (FFT).In at least one embodiment, a oneAPI math kernel library, also referred to as oneMKL, is a library that implements various optimized and parallelized routines for various mathematical functions and/or operations. In at least one embodiment, oneMKL implements one or more Basic Linear Algebra Subprograms (BLAS) and/or Linear Algebra Package (LAPACK) Dense Linear Algebra Routines. In at least one embodiment, oneMKL implements one or more sparse linear algebra BLAS routines. In at least one embodiment, oneMKL implements one or more random number generators (RNGs). In at least one embodiment, oneMKL implements one or more vector mathematics (VM) routines for mathematical operations on vectors. In at least one embodiment, oneMKL implements one or more Fast Fourier Transform (FFT) functions.
In mindestens einer Ausführungsform ist eine oneAPI-Datenanalysebibliothek, auch als oneDAL bezeichnet, eine Bibliothek, die verschiedene Datenanalyseanwendungen und verteilte Berechnungen implementiert. In mindestens einer Ausführungsform implementiert oneDAL verschiedene Algorithmen für die Vorverarbeitung, Transformation, Analyse, Modellierung, Validierung und Entscheidungsfindung für die Datenanalyse in Stapel-, Online- und verteilten Verarbeitungsmodi der Berechnung. In mindestens einer Ausführungsform implementiert oneDAL verschiedene C++ und/oder Java APIs und verschiedene Konnektoren zu einer oder mehreren Datenquellen. In mindestens einer Ausführungsform implementiert oneDAL DPC++ API-Erweiterungen zu einer herkömmlichen C++-Schnittstelle und ermöglicht die Verwendung von GPUs für verschiedene Algorithmen.In at least one embodiment, a oneAPI data analysis library, also referred to as oneDAL, is a library that implements various data analysis applications and distributed computation. In at least one embodiment, oneDAL implements various algorithms for preprocessing, transformation, analysis, modeling, validation, and decision making for data analysis in batch, online, and distributed processing modes of computation. In at least one embodiment, oneDAL implements various C++ and/or Java APIs and various connectors to one or more data sources. In at least one embodiment, oneDAL DPC++ implements API extensions to a traditional C++ interface and enables the use of GPUs for various algorithms.
In mindestens einer Ausführungsform ist eine oneAPI-Bibliothek für tiefe neuronale Netzwerke, auch als oneDNN bezeichnet, eine Bibliothek, die verschiedene Funktionen des tiefen Lernens implementiert. In mindestens einer Ausführungsform implementiert oneDNN verschiedene neuronale Netzwerk-, maschinelle Lern- und Deep-Learning-Funktionen, Algorithmen und/oder Variationen davon.In at least one embodiment, a oneAPI deep neural network library, also referred to as oneDNN, is a library that implements various deep learning functions. In at least one embodiment, oneDNN implements various neural network, machine learning and deep learning functions, algorithms and/or variations thereof.
In mindestens einer Ausführungsform ist eine OneAPI kollektive Kommunikationsbibliothek, auch als oneCCL bezeichnet, eine Bibliothek, die verschiedene Anwendungen für tiefes Lernen bzw. Deep Learning und maschinelles Lernen implementiert. In mindestens einer Ausführungsform baut oneCCL auf Kommunikations-Middleware auf niedrigerer Ebene auf, wie z. B. Message Passing Interface (MPI) und libfabrics. In mindestens einer Ausführungsform ermöglicht oneCCL eine Reihe von Deep-Learning-spezifischen Optimierungen, wie z. B. Priorisierung, persistente Operationen, Ausführungen außerhalb der Reihenfolge und/oder Variationen davon. In mindestens einer Ausführungsform implementiert oneCCL verschiedene CPU- und GPU-Funktionen.In at least one embodiment, a OneAPI collective communications library, also referred to as oneCCL, is a library that implements various deep learning and machine learning applications. In at least one embodiment, oneCCL is built on lower level communication middleware such as: B. Message Passing Interface (MPI) and libfabrics. In at least one embodiment, oneCCL enables a number of deep learning-specific optimizations, such as: B. Prioritization, persistent operations, out-of-order executions and/or variations thereof. In at least one embodiment, oneCCL implements various CPU and GPU functions.
In mindestens einer Ausführungsform ist eine oneAPI-Threading-Building-Blocks-Bibliothek, auch als oneTBB bezeichnet, eine Bibliothek, die verschiedene parallelisierte Prozesse für verschiedene Anwendungen implementiert. In mindestens einer Ausführungsform wird oneTBB für die aufgabenbasierte, gemeinsame parallele Programmierung auf einem Host verwendet. In mindestens einer Ausführungsform implementiert oneTBB generische parallele Algorithmen. In mindestens einer Ausführungsform implementiert oneTBB nebenläufige Container. In mindestens einer Ausführungsform implementiert oneTBB einen skalierbaren Speicherallokator. In mindestens einer Ausführungsform implementiert oneTBB einen Arbeit stehlenden Aufgabenplaner. In mindestens einer Ausführungsform implementiert oneTBB Synchronisationsprimitive auf niedriger Ebene. In mindestens einer Ausführungsform ist oneTBB compilerunabhängig und kann auf verschiedenen Prozessoren wie GPUs, PPUs, CPUs und/oder Variationen davon eingesetzt werden.In at least one embodiment, a oneAPI threading building blocks library, also referred to as oneTBB, is a library that implements various parallelized processes for various applications. In at least one embodiment, oneTBB is used for task-based, shared parallel programming on a host. In at least one embodiment, oneTBB implements generic parallel algorithms. In at least one embodiment, oneTBB implements concurrent containers. In at least one embodiment, oneTBB implements a scalable memory allocator. In at least one embodiment, oneTBB implements a work-stealing task scheduler. In at least one embodiment, oneTBB implements synchronization primitives low level. In at least one embodiment, oneTBB is compiler independent and can be used on various processors such as GPUs, PPUs, CPUs and/or variations thereof.
In mindestens einer Ausführungsform ist eine oneAPI-Videoverarbeitungsbibliothek, auch als oneVPL bezeichnet, eine Bibliothek, die zur Beschleunigung der Videoverarbeitung in einer oder mehreren Anwendungen eingesetzt wird. In mindestens einer Ausführungsform implementiert oneVPL verschiedene Videodecodierungs-, -codierungs- und -verarbeitungsfunktionen. In mindestens einer Ausführungsform implementiert oneVPL verschiedene Funktionen für Medien-Pipelines auf CPUs, GPUs und anderen Beschleunigern. In mindestens einer Ausführungsform implementiert oneVPL die Geräteerkennung und -auswahl in medienzentrierten und videoanalytischen Workloads. In mindestens einer Ausführungsform implementiert oneVPL API-Primitive für die gemeinsame Verwendung von Null-Kopie-Puffern.In at least one embodiment, a oneAPI video processing library, also referred to as oneVPL, is a library used to accelerate video processing in one or more applications. In at least one embodiment, oneVPL implements various video decoding, encoding and processing functions. In at least one embodiment, oneVPL implements various features for media pipelines on CPUs, GPUs, and other accelerators. In at least one embodiment, oneVPL implements device discovery and selection in media-centric and video analytics workloads. In at least one embodiment, oneVPL implements API primitives for sharing zero-copy buffers.
In mindestens einer Ausführungsform verwendet ein oneAPI-Programmiermodell eine DPC++-Programmiersprache. In mindestens einer Ausführungsform ist eine DPC++-Programmiersprache eine Programmiersprache, die ohne Beschränkung darauf funktional ähnliche Versionen von CUDA-Mechanismen enthält, um Gerätecode zu definieren und zwischen Gerätecode und Hostcode zu unterscheiden. In mindestens einer Ausführungsform kann eine DPC++-Programmiersprache eine Teilmenge der Funktionalität einer CUDA-Programmiersprache enthalten. In mindestens einer Ausführungsform werden eine oder mehrere CUDA-Programmiermodelloperationen unter Verwendung eines oneAPI-Programmiermodells mit einer DPC++-Programmiersprache durchgeführt.In at least one embodiment, a oneAPI programming model uses a DPC++ programming language. In at least one embodiment, a DPC++ programming language is a programming language that includes, but is not limited to, functionally similar versions of CUDA mechanisms to define device code and distinguish between device code and host code. In at least one embodiment, a DPC++ programming language may include a subset of the functionality of a CUDA programming language. In at least one embodiment, one or more CUDA programming model operations are performed using a oneAPI programming model with a DPC++ programming language.
Es wird angemerkt, dass sich hierin beschriebene Ausführungsbeispiele zwar auf ein CUDA-Programmiermodell beziehen können, hierin beschriebene Techniken jedoch mit jedem geeigneten Programmiermodell, wie HIP, oneAPI (z. B. unter Verwendung einer oneAPI-basierten Programmierung zur Durchführung oder Implementierung eines hierin offengelegten Verfahrens) und/oder Variationen davon, verwendet werden können.It is noted that while embodiments described herein may refer to a CUDA programming model, techniques described herein may be used with any suitable programming model, such as HIP, oneAPI (e.g., using oneAPI-based programming to perform or implement any disclosed herein Method) and/or variations thereof can be used.
In mindestens einer Ausführungsform können eine oder mehrere Komponenten von vorstehend offenbarten Systemen und/oder Prozessoren mit einer oder mehreren CPUs, ASICs, GPUs, FPGAs oder anderen Hardware-, Schaltkreis- oder integrierten Schaltkreiskomponenten kommunizieren, die z. B. einen Upscaler oder Upsampler zum Hochskalieren eines Bildes, einen Image Blender oder eine Image Blender-Komponente zum Überblenden, Mischen oder Zusammenfügen von Bildern, einen Sampler zum Abtasten eines Bildes (z. B., als Teil eines DSP), eine neuronale Netzwerkschaltung, die so konfiguriert ist, dass sie einen Upscaler ausführt, um ein Bild hochzuskalieren (z. B. von einem Bild mit niedriger Auflösung zu einem Bild mit hoher Auflösung), oder andere Hardware, um ein Bild, einen Rahmen oder ein Video zu modifizieren oder zu erzeugen, um seine Auflösung, Größe oder Pixel einzustellen; eine oder mehrere Komponenten von Systemen und/oder Prozessoren, die oben offenbart wurden, können Komponenten verwenden, die in dieser Offenbarung beschrieben werden, um Verfahren, Operationen oder Anweisungen auszuführen, die ein Bild erzeugen oder modifizieren.In at least one embodiment, one or more components of systems and/or processors disclosed above may communicate with one or more CPUs, ASICs, GPUs, FPGAs, or other hardware, circuitry, or integrated circuit components, e.g. B. an upscaler or upsampler for upscaling an image, an image blender or an image blender component for blending, mixing or merging images, a sampler for sampling an image (e.g., as part of a DSP), a neural network circuit , which is configured to run an upscaler to upscale an image (e.g., from a low-resolution image to a high-resolution image), or other hardware to modify an image, frame, or video or create to adjust its resolution, size or pixels; One or more components of systems and/or processors disclosed above may use components described in this disclosure to perform methods, operations, or instructions that generate or modify an image.
Mindestens eine Ausführungsform der Offenbarung kann im Hinblick auf die folgenden Abschnitte beschrieben werden:
Abschnitt 1. Prozessor, umfassend:- eine oder mehrere Schaltungen zum Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Erzeugen einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind.
- Abschnitt 2:
Prozessor nach Abschnitt 1, wobei die eine oder die mehreren Datenstrukturen zumindest eine Anzahl von Referenzen angeben, die dem Computerprogramm zugeordnet sind. - Abschnitt 3:
Prozessor nach Abschnitt 1, wobei die Informationen zumindest einen Speicherbereich umfassen. - Abschnitt 4: Prozessor nach einem der Abschnitte 1-3, wobei die eine oder die mehreren Schaltungen dazu angeordnet sind, die API zumindest teilweise auf der Grundlage eines Parameterwerts durchzuführen, der einen Ort angibt, der der einen oder den mehreren Datenstrukturen entspricht.
- Abschnitt 5: Prozessor nach einem der Abschnitte 1-4, wobei die eine oder die mehreren Schaltungen ferner dazu angeordnet sind, eine oder mehrere Funktionen auszuführen, die zumindest teilweise auf der Verwendung der Informationen durch das Computerprogramm basieren.
- Abschnitt 6: Der Prozessor nach einem der Abschnitte 1-5, wobei das Computerprogramm von einer oder mehreren Grafikverarbeitungseinheiten (GPUs) ausführbar ist.
- Abschnitt 7. System, umfassend:
- einen oder mehrere Computer mit einem oder mehreren Prozessoren zum Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Erzeugen einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind.
- Abschnitt 8: System nach Abschnitt 7, wobei der eine oder die mehreren Prozessoren ferner dazu angeordnet sind:
- Code zu erhalten, der zumindest die API angibt; und
- die API durch zumindest Ausführen des Codes durchzuführen.
- Abschnitt 9: System nach Abschnitt 7 oder 8, wobei die eine oder die mehreren Datenstrukturen eine Zählung einer oder mehrerer den Informationen zugeordneter Referenzen codieren.
- Abschnitt 10: System nach einem der Abschnitte 7-9, wobei die eine oder die mehreren Datenstrukturen eine oder mehrere Destruktorfunktionen angeben.
- Abschnitt 11: System nach einem der Abschnitte 7-10, wobei das Computerprogramm von mindestens einer oder mehreren Parallelverarbeitungseinheiten (PPUs) ausführbar ist.
- Abschnitt 12: System nach einem der Abschnitte 7-11, wobei die Informationen zumindest Eingabedaten für das Computerprogramm umfassen.
- Abschnitt 13: Maschinenlesbares Medium, auf dem ein Satz von Anweisungen gespeichert ist, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen zumindest zum:
- Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Erzeugen einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind.
- Abschnitt 14: Maschinenlesbares Medium nach Abschnitt 13, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die API zumindest teilweise auf der Grundlage eines Parameterwerts durchzuführen, der eine Anzahl von Referenzen angibt.
- Abschnitt 15: Maschinenlesbares Medium nach Abschnitt 13 oder 14, wobei die Verwendung der Informationen durch eine oder mehrere Referenzen angegeben wird, die von dem Computerprogramm verwendet werden.
- Abschnitt 16: Maschinenlesbares Medium nach einem der Abschnitte 13-15, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren durchgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die eine oder die mehreren Datenstrukturen auf der Grundlage der Verwendung der Informationen durch das Computerprogramm zu modifizieren.
- Abschnitt 17: Maschinenlesbares Medium nach einem der Abschnitte 13-16, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren durchgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die eine oder die mehreren Datenstrukturen mit einer oder mehreren Graph-Datenstrukturen zu verknüpfen.
- Abschnitt 18: Maschinenlesbares Medium nach einem der Abschnitte 13-17, wobei das Computerprogramm von einer oder mehreren universellen Grafikverarbeitungseinheiten (GPGPUs) ausführbar ist.
- Abschnitt 19. Verfahren, umfassend:
- Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Erzeugen einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung von Informationen durch ein Computerprogramm zu verwenden sind.
- Abschnitt 20: Verfahren nach Abschnitt 19, ferner umfassend ein Ausführen einer oder mehrerer Funktionen zumindest teilweise auf der Grundlage einer Anzahl von Referenzen, die von der einen oder den mehreren Datenstrukturen angegeben werden.
- Abschnitt 21: Verfahren nach Abschnitt 19 oder 20, ferner umfassend ein Durchführen der API zumindest teilweise auf der Grundlage eines oder mehrerer Parameterwerte, die eine oder mehrere Funktionen angeben.
- Abschnitt 22: Verfahren nach einem der Abschnitte 19-21, wobei die API eine Laufzeit-API ist.
- Abschnitt 23: Verfahren nach einem der Abschnitte 19-22, wobei das Computerprogramm von einer oder mehreren Zentralverarbeitungseinheiten (CPUs) ausführbar ist.
- Abschnitt 24: Verfahren nach einem der Abschnitte 19-23, ferner umfassend ein Erhalten einer oder mehrerer Statusangaben als ein Ergebnis des Durchführens der API.
- Abschnitt 25. Prozessor, umfassend:
- eine oder mehrere Schaltungen zum Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm gesteigert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 26: Prozessor nach Abschnitt 25, wobei die eine oder die mehreren Schaltungen ferner dazu angeordnet sind, einen Wert der einen oder der mehreren Datenstrukturen zu erhöhen, der eine Anzahl von Referenzen anzeigt, die dem Computerprogramm zugeordnet sind.
- Abschnitt 27: Prozessor nach Abschnitt 25 oder 26, wobei der eine oder die mehreren Schaltungen dazu angeordnet sind, die API zumindest teilweise auf der Grundlage eines Parameterwerts durchzuführen, der eine Anzahl von Referenzen angibt.
- Abschnitt 28: Prozessor nach einem der Abschnitte 25-27, wobei die Informationen einen Speicherbereich umfassen, der von dem Computerprogramm verwendet wird.
- Abschnitt 29: Prozessor nach einem der Abschnitte 25-28, wobei das Computerprogramm von einer oder mehreren Grafikverarbeitungseinheiten (GPUs) ausführbar ist.
- Abschnitt 30: Prozessor nach einem der Abschnitte 25-29, wobei die API eine Laufzeit-API ist.
- Abschnitt 31. System, umfassend:
- einen oder mehrere Computer mit einem oder mehreren Prozessoren, um eine Anwendungsprogrammierschnittstelle (API) durchzuführen zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm gesteigert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 32: System nach Abschnitt 31, wobei der eine oder die mehreren Prozessoren dazu angeordnet sind, die API zumindest teilweise auf der Grundlage eines Parameterwerts durchzuführen, der die eine oder die mehreren Datenstrukturen angibt.
- Abschnitt 33: System nach Abschnitt 31 oder 32, wobei der eine oder die mehreren Prozessoren ferner dazu angeordnet sind, die eine oder die mehreren Datenstrukturen mit einer oder mehreren Graph-Datenstrukturen zu verknüpfen.
- Abschnitt 34: System nach einem der Abschnitte 31-33, wobei die Verwendung der Informationen zumindest durch einen Satz von Referenzen angezeigt wird, die dem Computerprogramm zugeordnet sind.
- Abschnitt 35: System nach einem der Abschnitte 31-34, wobei die eine oder die mehreren Datenstrukturen eine oder mehrere Funktionen zum Freigeben von Speicher angeben.
- Abschnitt 36: System nach einem der Abschnitte 31-35, wobei das Computerprogramm von einer oder mehreren Parallelverarbeitungseinheiten (PPUs) ausführbar ist.
- Abschnitt 37. Maschinenlesbares Medium, auf dem ein Satz von Anweisungen gespeichert ist, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen zum:
- Durchführen einer Anwendungsprogrammierschnittstelle (API), um zu veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm gesteigert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 38: Maschinenlesbares Medium nach Abschnitt 37, wobei der Satz von Anweisungen ferner Anweisungen Befehle enthält, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die Verwendung der Informationen durch das Computerprogramm zu steigern, indem zumindest ein oder mehrere Werte der einen oder mehreren Datenstrukturen, die die Verwendung anzeigen, inkrementiert werden.
- Abschnitt 39: Maschinenlesbares Medium nach 37 oder 38, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, die API auf der Grundlage eines Parameterwertes durchzuführen, der eine oder mehrere Graph-Datenstrukturen angibt.
- Abschnitt 40: Maschinenlesbares Medium nach einem der Abschnitte 37-39, wobei das Computerprogramm eine oder mehrere Graph-Datenstruktur-Operationen umfasst.
- Abschnitt 41: Maschinenlesbares Medium nach einem der Abschnitte 37-40, wobei die Informationen ein oder mehrere Datenobjekte enthalten, die von dem Computerprogramm verwendet werden.
- Abschnitt 42: Maschinenlesbares Medium nach einem der Abschnitte 37-41, wobei das Computerprogramm von einer oder mehreren universellen Grafikverarbeitungseinheiten (GPGPUs) ausführbar ist.
- Abschnitt 43: Verfahren, umfassend:
- Durchführen einer Anwendungsprogrammierschnittstelle (API), um zu veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm gesteigert wird, zumindest teilweise basierend auf einer oder mehreren Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 44: Verfahren nach Abschnitt 43, ferner umfassend ein Erhalten einer oder mehrerer Statusanzeigen als ein Ergebnis der Durchführung der API.
- Abschnitt 45: Verfahren nach Abschnitt 43 oder 44, ferner umfassend:
- Erhalten von Code, der zumindest die API angibt; und
- Durchführen der API durch zumindest Veranlassen der Ausführung des Codes.
- Abschnitt 46: Verfahren nach einem der Abschnitte 43-45, ferner umfassend ein Zuordnen der einen oder der mehreren Datenstrukturen zu einer Graph-Datenstruktur, zumindest teilweise auf der Grundlage eines Parameterwerts, der die Zuordnung anzeigt.
- Abschnitt 47: Verfahren nach einem der Abschnitte 43-46, wobei die eine oder mehreren Datenstrukturen eine oder mehrere Destruktionsfunktionen angeben.
- Abschnitt 48: Verfahren nach einem der Abschnitte 43-47, wobei das Computerprogramm von einer oder mehreren zentralen Verarbeitungseinheiten (CPUs) ausführbar ist.
- Abschnitt 49. Prozessor, umfassend:
- eine oder mehrere Schaltungen zum Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 50: Prozessor nach Abschnitt 49, wobei die eine oder die mehreren Schaltungen dazu angeordnet sind, zu veranlassen, dass die Verwendung der Informationen durch das Computerprogramm reduziert wird, indem zumindest eine Anzahl von Verwendungen reduziert wird, die durch die eine oder die mehreren Datenstrukturen angezeigt wird.
- Abschnitt 51: Prozessor nach Abschnitt 49 oder 50, wobei die Verwendung der Informationen durch eine oder mehrere den Informationen zugeordnete Referenzen angezeigt wird.
- Abschnitt 52: Prozessor nach einem der Abschnitte 49-51, wobei das Computerprogramm von einer oder mehreren Parallelverarbeitungseinheiten (PPUs) ausführbar ist.
- Abschnitt 53: Prozessor nach einem der Abschnitte 49-52, wobei die eine oder die mehreren Schaltungen dazu angeordnet sind, die API zumindest teilweise auf der Grundlage eines Parameterwerts auszuführen, der die eine oder die mehreren Datenstrukturen angibt.
- Abschnitt 54: Prozessor nach einem der Abschnitte 49-53, wobei die Informationen Speicher umfassen, der von dem Computerprogramm verwendet wird.
- Abschnitt 55. System, umfassend:
- einen oder mehrere Computer mit einem oder mehreren Prozessoren zum Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm zumindest teilweise reduziert wird, auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 56: System nach Abschnitt 55, wobei der eine oder die mehreren Prozessoren dazu angeordnet sind, zu veranlassen, dass die Verwendung der Informationen durch das Computerprogramm auf der Grundlage eines Parameterwerts, der eine Anzahl von Referenzen angibt, reduziert wird.
- Abschnitt 57: System nach Abschnitt 55 oder 56, wobei die API eine Laufzeit-API ist.
- Abschnitt 58: System nach einem der Abschnitte 55-57, wobei der eine oder die mehreren Prozessoren ferner dazu angeordnet sind, eine Zählung von Referenzen, die durch die eine oder die mehreren Datenstrukturen angezeigt wird, zu dekrementieren.
- Abschnitt 59: System nach einem der Abschnitte 55-58, wobei das Computerprogramm von einer oder mehreren Grafikverarbeitungseinheiten (GPUs) ausführbar ist.
- Abschnitt 60: System nach einem der Abschnitte 55-59, wobei der eine oder die mehreren Prozessoren ferner dazu angeordnet sind, die Ausführung einer oder mehrerer Funktionen zu veranlassen, die durch die eine oder die mehreren Datenstrukturen angegeben werden.
- Abschnitt 61 Maschinenlesbares Medium, auf dem ein Satz von Anweisungen gespeichert ist, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen zumindest zum:
- Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 62: Maschinenlesbares Medium nach Abschnitt 61, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, eine oder mehrere Destruktionsfunktionen auszuführen, um zu veranlassen, dass die Verwendung der Informationen durch das Computerprogramm reduziert wird.
- Abschnitt 63: Maschinenlesbares Medium nach Abschnitt 61 oder 62, wobei die Verwendung der Informationen durch eine oder mehrere Referenzen angezeigt wird, die von dem Computerprogramm verwendet werden.
- Abschnitt 64: Maschinenlesbares Medium nach einem der Abschnitte 61-63, wobei das Computerprogramm einer oder mehreren Graph-Datenstrukturen entspricht.
- Abschnitt 65: Maschinenlesbares Medium nach einem der Abschnitte 61-64, wobei der Satz von Anweisungen ferner Anweisungen enthält, die, wenn sie von dem einen oder den mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, eine oder mehrere Statusanzeigen als ein Ergebnis der Durchführung der API zu erhalten.
- Abschnitt 66: Maschinenlesbares Medium nach einem der Abschnitte 61-65, wobei das Computerprogramm von einer oder mehreren universellen Grafikverarbeitungseinheiten (GPGPUs) ausführbar ist.
- Abschnitt 67: Verfahren, umfassend:
- Durchführen einer Anwendungsprogrammierschnittstelle (API) zum Veranlassen, dass die Verwendung von Informationen durch ein Computerprogramm reduziert wird, zumindest teilweise auf der Grundlage einer oder mehrerer Datenstrukturen, die zum Überwachen der Verwendung der Informationen verwendet werden.
- Abschnitt 68: Verfahren nach Abschnitt 67, ferner umfassend ein Reduzieren eines oder mehrerer Werte der einen oder mehreren Datenstrukturen auf der Grundlage der Verwendung der Informationen durch das Computerprogramm.
- Abschnitt 69: Verfahren nach Abschnitt 67 oder 68, wobei das Durchführen der API die Ausführung einer oder mehrerer Destruktorfunktionen veranlasst, die den Informationen zugeordnet sind.
- Abschnitt 70: Verfahren nach einem der Abschnitte 67-69, wobei die Informationen Daten enthalten, auf welchen eine oder mehrere Operationen durch das Computerprogramm durchzuführen sind.
- Abschnitt 71: Verfahren nach einem der Abschnitte 67-70, ferner umfassend ein Durchführen der API zumindest teilweise auf der Grundlage eines Parameterwerts, der Graph-Code angibt.
- Abschnitt 72: Verfahren nach einem der Abschnitte 67-71, wobei das Computerprogramm von einer oder mehreren zentralen Verarbeitungseinheiten (CPUs) ausführbar ist.
-
Section 1. Processor, comprising:- one or more circuits for performing an application programming interface (API) for generating one or more data structures to be used for monitoring the use of information by a computer program.
- Section 2: Processor according to
Section 1, wherein the one or more data structures specify at least a number of references associated with the computer program. - Section 3: Processor according to
Section 1, wherein the information includes at least one memory area. - Section 4: Processor according to any of Sections 1-3, wherein the one or more circuits are arranged to perform the API based at least in part on a parameter value indicating a location corresponding to the one or more data structures.
- Section 5: The processor of any of Sections 1-4, wherein the one or more circuits are further arranged to perform one or more functions based at least in part on the computer program's use of the information.
- Section 6: The processor according to any of Sections 1-5, wherein the computer program is executable by one or more graphics processing units (GPUs).
- Section 7. System comprising:
- one or more computers having one or more processors for performing an application programming interface (API) for generating one or more data structures to be used for monitoring the use of information by a computer program.
- Section 8: System according to Section 7, wherein the one or more processors are further arranged to:
- to obtain code that at least specifies the API; and
- to perform the API by at least executing the code.
- Section 9: System according to Section 7 or 8, wherein the one or more data structures encode a count of one or more references associated with the information.
- Section 10: The system of any of Sections 7-9, wherein the one or more data structures specify one or more destructor functions.
- Section 11: System according to any of Sections 7-10, wherein the computer program is executable by at least one or more parallel processing units (PPUs).
- Section 12: System according to any of Sections 7-11, wherein the information includes at least input data for the computer program.
- Section 13: Machine-readable medium storing a set of instructions which, when executed by one or more processors, cause the one or more processors to at least:
- Performing an application programming interface (API) to create one or more data structures to be used to monitor a computer program's use of information.
- Section 14: Machine-readable medium according to Section 13, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to perform the API based at least in part on a parameter value , which specifies a number of references.
- Section 15: Machine-readable medium referred to in Section 13 or 14, wherein the use of the information is indicated by one or more references used by the computer program.
- Section 16: The machine-readable medium of any of Sections 13-15, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to use the one or more data structures based on the computer program's use of the information.
- Section 17: The machine-readable medium of any of Sections 13-16, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to use the one or more data structures to link with one or more graph data structures.
- Section 18: Machine-readable medium according to any of Sections 13-17, wherein the computer program is executable by one or more general purpose graphics processing units (GPGPUs).
- Section 19. Proceedings comprising:
- Performing an application programming interface (API) to create one or more data structures to be used to monitor a computer program's use of information.
- Section 20: The method of Section 19, further comprising performing one or more functions based at least in part on a number of references specified by the one or more data structures.
- Section 21: Method according to Section 19 or 20, further comprising performing the API based at least in part on one or more parameter values indicating one or more functions.
- Section 22: Method according to any of Sections 19-21, wherein the API is a runtime API.
- Section 23: Method according to any of Sections 19-22, wherein the computer program is executable by one or more central processing units (CPUs).
- Section 24: The method of any of Sections 19-23, further comprising obtaining one or more statuses as a result of performing the API.
- Section 25. Processor, comprising:
- one or more circuits for performing an application programming interface (API) for causing a computer program to increase its use of information, based at least in part on one or more data structures used to monitor use of the information.
- Section 26: The processor of Section 25, wherein the one or more circuits are further arranged to increment a value of the one or more data structures indicating a number of references associated with the computer program.
- Section 27: Processor according to Section 25 or 26, wherein the one or more circuits are arranged to perform the API based at least in part on a parameter value indicating a number of references.
- Section 28: Processor according to any of Sections 25-27, wherein the information includes a memory area used by the computer program.
- Section 29: Processor according to any of Sections 25-28, wherein the computer program is executable by one or more graphics processing units (GPUs).
- Section 30: Processor according to any of Sections 25-29, wherein the API is a runtime API.
- Section 31. System comprising:
- one or more computers having one or more processors to perform an application programming interface (API) for causing the use of information by a computer program to be increased, based at least in part on one or more data structures used to monitor the use of the information .
- Section 32: The system of Section 31, wherein the one or more processors are arranged to perform the API based at least in part on a parameter value indicating the one or more data structures.
- Section 33: The system of Section 31 or 32, wherein the one or more processors are further arranged to associate the one or more data structures with one or more graph data structures.
- Section 34: The system of any of Sections 31-33, wherein use of the information is indicated by at least a set of references associated with the computer program.
- Section 35: The system of any of Sections 31-34, wherein the one or more data structures specify one or more functions for freeing memory.
- Section 36: System according to any of Sections 31-35, wherein the computer program is executable by one or more parallel processing units (PPUs).
- Section 37. Machine-readable medium storing a set of instructions which, when executed by one or more processors, cause the one or more processors to:
- Performing an application programming interface (API) to cause a computer program to increase its use of information, based at least in part on one or more data structures used to monitor use of the information.
- Section 38: Machine-readable medium as defined in Section 37, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to increase the computer program's use of the information by incrementing at least one or more values of the one or more data structures indicating usage.
- Section 39: Machine-readable medium according to 37 or 38, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to perform the API based on a parameter value, which specifies one or more graph data structures.
- Section 40: A machine-readable medium according to any one of Sections 37-39, wherein the computer program comprises one or more graph data structure operations.
- Section 41: A machine-readable medium as defined in any of Sections 37-40, wherein the information includes one or more data objects used by the computer program.
- Section 42: Machine-readable medium according to any of Sections 37-41, wherein the computer program is executable by one or more general purpose graphics processing units (GPGPUs).
- Section 43: Procedure comprising:
- Performing an application programming interface (API) to cause a computer program to increase its use of information, based at least in part on one or more data structures used to monitor use of the information.
- Section 44: Method according to Section 43, further comprising obtaining one or more status indications as a result of performing the API.
- Section 45: Procedure under Section 43 or 44, further comprising:
- Obtain code that at least specifies the API; and
- Performing the API by at least causing the code to execute.
- Section 46: The method of any of Sections 43-45, further comprising associating the one or more data structures with a graph data structure based at least in part on a parameter value indicating the association.
- Section 47: The method of any of Sections 43-46, wherein the one or more data structures specify one or more destruction functions.
- Section 48: Method according to any of Sections 43-47, wherein the computer program is executable by one or more central processing units (CPUs).
- Section 49. Processor, comprising:
- one or more circuits for performing an application programming interface (API) for causing a computer program's use of information to be reduced, based at least in part on one or more data structures used to monitor use of the information.
- Section 50: Processor according to Section 49, wherein the one or more circuits are arranged to cause the use of the information by the computer program to be reduced by reducing at least a number of uses caused by the one or more data structures is shown.
- Section 51: Processor under Section 49 or 50, wherein use of the information is indicated by one or more references associated with the information.
- Section 52: Processor according to any of Sections 49-51, wherein the computer program is executable by one or more parallel processing units (PPUs).
- Section 53: The processor of any of Sections 49-52, wherein the one or more circuits are arranged to execute the API based at least in part on a parameter value indicating the one or more data structures.
- Section 54: Processor according to any of Sections 49-53, wherein the information includes memory used by the computer program.
- Section 55. System comprising:
- one or more computers having one or more processors for performing an application programming interface (API) for causing a computer program's use of information to be at least partially reduced based on one or more data structures used to monitor use of the information.
- Section 56: The system of Section 55, wherein the one or more processors are arranged to cause the computer program's use of the information to be reduced based on a parameter value indicating a number of references.
- Section 57: System under Section 55 or 56, where the API is a runtime API.
- Section 58: The system of any of Sections 55-57, wherein the one or more processors are further arranged to decrement a count of references indicated by the one or more data structures.
- Section 59: The system of any of Sections 55-58, wherein the computer program is executable by one or more graphics processing units (GPUs).
- Section 60: The system of any of Sections 55-59, wherein the one or more processors are further arranged to cause execution of one or more functions specified by the one or more data structures.
- Section 61 Machine-readable medium storing a set of instructions which, when executed by one or more processors, cause the one or more processors to at least:
- Performing an application programming interface (API) to cause a computer program's use of information to be reduced, based at least in part on one or more data structures used to monitor use of the information.
- Section 62: A machine-readable medium as defined in Section 61, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to perform one or more destruction functions to cause: that the use of the information by the computer program is reduced.
- Section 63: Machine-readable medium referred to in Section 61 or 62, wherein the use of the information is indicated by one or more references used by the computer program.
- Section 64: A machine-readable medium as defined in any of Sections 61-63, wherein the computer program corresponds to one or more graph data structures.
- Section 65: The machine-readable medium of any of Sections 61-64, wherein the set of instructions further includes instructions that, when executed by the one or more processors, cause the one or more processors to display one or more status indicators as one Get result of executing the API.
- Section 66: A machine-readable medium as defined in any of Sections 61-65, wherein the computer program is executable by one or more general purpose graphics processing units (GPGPUs).
- Section 67: Procedure comprising:
- Performing an application programming interface (API) to cause a computer program's use of information to be reduced, based at least in part on one or more data structures used to monitor use of the information.
- Section 68: The method of Section 67, further comprising reducing one or more values of the one or more data structures based on the computer program's use of the information.
- Section 69: Method under Section 67 or 68, wherein executing the API causes one or more destructor functions associated with the information to be executed.
- Section 70: A method according to any of Sections 67-69, wherein the information includes data on which one or more operations are to be performed by the computer program.
- Section 71: The method of any of Sections 67-70, further comprising performing the API based at least in part on a parameter value indicating graph code.
- Section 72: Method according to any of Sections 67-71, wherein the computer program is executable by one or more central processing units (CPUs).
Andere Variationen sind im Sinne der Erfindung. Während die offenbarten Techniken verschiedenen Modifikationen und alternativen Konstruktionen zugänglich sind, sind bestimmte dargestellte Ausführungsformen derselben in Zeichnungen gezeigt und wurden vorstehend im Detail beschrieben. Es versteht sich jedoch, dass nicht beabsichtigt ist, die Erfindung auf eine bestimmte Form oder bestimmte Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Gedanken und den Rahmen der Erfindung fallen, wie er in den beigefügten Ansprüchen definiert ist.Other variations are within the scope of the invention. While the disclosed techniques are susceptible to various modifications and alternative constructions, certain illustrated embodiments thereof are shown in drawings and have been described in detail above. It is to be understood, however, that the invention is not intended to be limited to any particular form or forms, but on the contrary is intended to cover all modifications, alternative constructions and equivalents that fall within the spirit and scope of the invention, such as it is defined in the appended claims.
Die Verwendung der Begriffe „ein“ und „eine“ und „der“ und ähnlicher Bezeichnungen im Kontext der Beschreibung offenbarter Ausführungsformen (insbesondere im Kontext der nachfolgenden Ansprüche) ist so auszulegen, dass sie sowohl die Einzahl als auch die Mehrzahl umfasst, sofern hierin nicht anders angegeben oder durch Kontext eindeutig widerlegt, und nicht als Definition eines Begriffs. Die Begriffe „umfassend“, „mit“, „beinhaltend“ und „enthaltend“ sind, sofern nicht anders angegeben, als nicht abschließende Begriffe (d.h. „einschließlich, aber nicht beschränkt auf“) zu verstehen. Der Begriff „verbunden“ ist, wenn er unverändert bleibt und sich auf physische Verbindungen bezieht, als teilweise oder ganz in einem Bauteil enthalten, an ihm angebracht oder mit ihm verbunden zu verstehen, auch wenn etwas dazwischen liegt. Die Wiedergabe von Wertebereichen ist lediglich als ein verkürzendes Verfahren des individuellen Bezugnehmens auf jeden einzelnen Wert, der in den Bereich fällt, beabsichtigt, sofern hierin nichts anderes angegeben ist, und jeder einzelne Wert ist in die Spezifikation aufgenommen, als wäre er hierin einzeln aufgeführt. Die Verwendung des Begriffs „Menge“ (z.B. „eine Menge von Gegenständen“) oder „Teilmenge“ ist, sofern nicht anders angegeben oder durch Kontext widerlegt, als eine nicht leere Sammlung zu verstehen, die ein oder mehrere Elemente umfasst. Sofern außerdem nicht anders vermerkt oder durch Kontext widerlegt, bezeichnet der Begriff „Teilmenge“ einer entsprechenden Menge nicht notwendigerweise eine echte Teilmenge der entsprechenden Menge, sondern Teilmenge und entsprechende Menge können gleich sein.The use of the terms "a" and "an" and "the" and similar terms in the context of describing disclosed embodiments (particularly in the context of the following claims) are to be construed to include both the singular and the plural, except as used herein otherwise stated or clearly refuted by context, and not as a definition of a term. The terms “comprising”, “including”, “including” and “including” are to be construed as non-exhaustive terms (i.e. “including, but not limited to”) unless otherwise stated. The term "connected", when left unchanged and referring to physical connections, is to be understood as being partially or wholly contained in, attached to or connected to a component, even if there is something in between. The reproduction of ranges of values is intended solely as a condensed method of individually referring to each individual value that falls within the range, unless otherwise specified herein, and each individual value is incorporated into the specification as if it were individually listed herein. Use of the term "set" (e.g., "a set of items") or "subset" is to be understood, unless otherwise stated or contradicted by context, as a non-empty collection comprising one or more elements. Furthermore, unless otherwise noted or contradicted by context, the term “subset” of a corresponding set does not necessarily mean a true subset of the corresponding set, but subset and corresponding set may be the same.
Konjunktive Sprache, wie z.B. Phrasen der Form „mindestens eines von A, B und C“ oder „mindestens eines von A, B und C“, wird, sofern nicht ausdrücklich anders angegeben oder anderweitig eindeutig durch Kontext widersprochen ist, im Allgemeinen so verstanden, dass damit ausgedrückt wird, dass ein Element, ein Begriff usw. entweder A oder B oder C oder eine beliebige nicht leere Teilmenge der Menge von A und B und C sein kann. So beziehen sich z.B. in dem veranschaulichenden Beispiel einer Menge mit drei Elementen die konjunktiven Ausdrücke „mindestens eines von A, B und C“ und „mindestens eines von A, B und C“ auf eine der folgenden Mengen: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Eine solche konjunktivische Sprache soll also nicht generell bedeuten, dass bei bestimmten Ausführungsformen jeweils mindestens eines von A, mindestens eines von B und mindestens eines von C vorhanden sein muss. Darüber hinaus, sofern nicht anders angegeben oder durch Kontext widerlegt, zeigt der Begriff „Mehrzahl“ einen Zustand an, in dem er plural ist (z.B. „eine Mehrzahl von Elementen“ zeigt mehrere Elemente an). Die Anzahl der Elemente in einer Mehrzahl ist mindestens zwei, kann aber mehr sein, wenn dies entweder explizit oder durch Kontext angegeben wird. Sofern nicht anders angegeben oder aus Kontext ersichtlich ist, bedeutet „basierend auf“ „zumindest teilweise basierend auf“ und nicht „ausschließlich basierend auf“.Subjunctive language, such as phrases of the form "at least one of A, B and C" or "at least one of A, B and C", unless expressly stated otherwise or otherwise clearly contradicted by context, is generally understood to mean: that it expresses that an element, a concept, etc. can be either A or B or C or any non-empty subset of the set of A and B and C. For example, in the illustrative example of a set with three elements, the conjunctive expressions “at least one of A, B and C” and “at least one of A, B and C” refer to one of the following sets: {A}, {B} , {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Such a subjunctive language should not generally mean that in certain embodiments at least one of A, at least one of B and at least one of C must be present. Furthermore, unless otherwise stated or refuted by context, the term "plural" indicates a state in which it is plural (e.g., "a plurality of elements" indicates multiple elements). The number of elements in a plurality is at least two, but may be more if specified either explicitly or by context. Unless otherwise stated or apparent from the context, “based on” means “based at least in part on” and not “based solely on.”
Operationen hierin beschriebener Prozesse können in jeder geeigneten Reihenfolge ausgeführt werden, sofern hierin nicht anders angegeben oder durch den Kontext eindeutig widerlegt ist. In mindestens einer Ausführungsform wird ein Prozess wie die hierin beschriebenen Prozesse (oder Variationen und/oder Kombinationen derselben) unter der Steuerung eines oder mehrerer Computersysteme durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind und als Code (z.B. ausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen) implementiert sind, die gemeinsam auf einem oder mehreren Prozessoren, durch Hardware oder Kombinationen davon ausgeführt werden. In mindestens einer Ausführungsform ist der Code auf einem computerlesbaren Speichermedium gespeichert, z.B. in Form eines Computerprogramms, das eine Vielzahl von Anweisungen umfasst, die von einem oder mehreren Prozessoren ausgeführt werden können. In mindestens einer Ausführungsform ist ein computerlesbares Speichermedium ein nicht-transitorisches computerlesbares Speichermedium, das transitorische Signale (z.B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung) ausschließt, aber nicht-transitorische Datenspeicherschaltungen (z.B. Puffer, Cache und Warteschlangen) innerhalb der Transceiver von transitorischen Signalen enthält. In mindestens einer Ausführungsform ist der Code (z.B. ausführbarer Code oder Quellcode) auf einem Satz von einem oder mehreren nicht-transitorischen computerlesbaren Speichermedien gespeichert, auf denen ausführbare Anweisungen (oder ein anderer Speicher zum Speichern von ausführbaren Anweisungen) gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren eines Computersystems ausgeführt werden (d.h. als Ergebnis der Ausführung), das Computersystem veranlassen, hierin beschriebene Operationen durchzuführen. In mindestens einer Ausführungsform umfasst der Satz nicht-transitorischer computerlesbarer Speichermedien mehrere nicht-transitorische computerlesbare Speichermedien, und einem oder mehreren der einzelnen nicht-transitorischen Speichermedien der mehreren nicht-transitorischen computerlesbaren Speichermedien fehlt der gesamte Code, während die mehreren nicht-transitorischen computerlesbaren Speichermedien gemeinsam den gesamten Code speichern. In mindestens einer Ausführungsform werden ausführbare Befehle so ausgeführt, dass verschiedene Befehle von verschiedenen Prozessoren ausgeführt werden - zum Beispiel speichert ein nicht-transitorisches computerlesbares Speichermedium Befehle und führt eine zentrale Verarbeitungseinheit („CPU“) einige der Befehle aus, während eine Grafikverarbeitungseinheit („GPU“) andere Befehle ausführt. In mindestens einer Ausführungsform haben verschiedene Komponenten eines Computersystems separate Prozessoren und verschiedene Prozessoren führen verschiedene Teilmengen von Anweisungen aus.Operations of processes described herein may be performed in any appropriate order unless otherwise specified herein or clearly contradicted by the context. In at least one embodiment, a process such as the processes described herein (or variations and/or combinations thereof) is performed under the control of one or more computer systems configured with executable instructions and as code (e.g., executable instructions, one or more computer programs, or a or multiple applications) implemented together on one or more processors, hardware, or combinations thereof. In at least one embodiment, the code is stored on a computer-readable storage medium, for example in the form of a computer program that includes a plurality of instructions that can be executed by one or more processors. In at least one embodiment, a computer-readable storage medium is a non-transitory computer-readable storage medium that excludes transitory signals (e.g., a propagating transient electrical or electromagnetic transmission) but does not contains transient data storage circuits (e.g. buffers, cache and queues) within the transceivers of transient signals. In at least one embodiment, the code (e.g., executable code or source code) is stored on a set of one or more non-transitory computer-readable storage media on which executable instructions (or other memory for storing executable instructions) are stored, which when executed by one or more processors of a computer system (ie, as a result of execution), cause the computer system to perform operations described herein. In at least one embodiment, the set of non-transitory computer-readable storage media includes a plurality of non-transitory computer-readable storage media, and one or more of the individual non-transitory computer-readable storage media of the plurality of non-transitory computer-readable storage media lacks all of the code while the plurality of non-transitory computer-readable storage media are common save all the code. In at least one embodiment, executable instructions are executed such that different instructions are executed by different processors - for example, a non-transitory computer-readable storage medium stores instructions and a central processing unit ("CPU") executes some of the instructions while a graphics processing unit ("GPU") “) executes other commands. In at least one embodiment, different components of a computer system have separate processors, and different processors execute different subsets of instructions.
Dementsprechend sind in mindestens einer Ausführungsform Computersysteme so konfiguriert, dass sie einen oder mehrere Dienste implementieren, die einzeln oder gemeinsam Operationen der hierin beschriebenen Prozesse durchführen, und sind solche Computersysteme mit anwendbarer Hardware und/oder Software konfiguriert, die die Durchführung der Operationen ermöglichen. Ferner ist ein Computersystem, das mindestens eine Ausführungsform der Erfindung implementiert, eine einzelne Vorrichtung und in einer anderen Ausführungsform ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten, so dass das verteilte Computersystem die hierin beschriebenen Operationen durchführt und eine einzelne Vorrichtung nicht alle Operationen durchführt.Accordingly, in at least one embodiment, computer systems are configured to implement one or more services that individually or collectively perform operations of the processes described herein, and such computer systems are configured with applicable hardware and/or software that enable the operations to be performed. Further, a computer system that implements at least one embodiment of the invention is a single device, and in another embodiment, a distributed computer system that includes multiple devices that operate differently such that the distributed computer system performs the operations described herein and a single device does not perform all of them performs operations.
Die Verwendung von Beispielen oder beispielhaften Formulierungen (z.B. „wie beispielsweise“) dient lediglich der besseren Veranschaulichung von Ausführungsformen der Erfindung und stellt keine Beschränkung des Umfangs der Erfindung dar, sofern nicht anders angegeben ist. Keine Formulierung in der Beschreibung ist so auszulegen, dass sie ein nicht beanspruchtes Element als wesentlich für die Praxis der Erfindung anzeigend angesehen wird.The use of examples or exemplary phrases (e.g., “such as”) is intended merely to better illustrate embodiments of the invention and does not constitute a limitation on the scope of the invention unless otherwise indicated. No language in the specification should be construed as indicating any unclaimed element as essential to the practice of the invention.
Bezugnahmen, einschließlich Veröffentlichungen, Patentanmeldungen und Patenten, die hierin zitiert werden, werden hiermit durch Bezugnahme in demselben Umfang einbezogen, als ob jede Referenz einzeln und ausdrücklich als durch Bezugnahme einbezogen angegeben wäre und hierin in ihrer Gesamtheit wiedergegeben würde.References, including publications, patent applications and patents, cited herein are hereby incorporated by reference to the same extent as if each reference were individually and expressly stated to be incorporated by reference and reproduced herein in their entirety.
In der Beschreibung und den Ansprüchen können Begriffe „gekoppelt“ und „verbunden“ sowie deren Ableitungen verwendet sein. Es versteht sich, dass diese Begriffe nicht als Synonyme füreinander gedacht sind. Vielmehr kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem oder indirektem physischem oder elektrischem Kontakt zueinander stehen. „Gekoppelt“ kann auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt zueinander stehen, aber dennoch miteinander kooperieren oder interagieren.The terms “coupled” and “connected” and their derivatives may be used in the description and claims. It is understood that these terms are not intended to be synonymous with each other. Rather, in certain examples, “connected” or “coupled” may be used to indicate that two or more elements are in direct or indirect physical or electrical contact with one another. “Coupled” can also mean that two or more elements are not in direct contact with each other, but still cooperate or interact with each other.
Sofern nicht ausdrücklich anders angegeben ist, beziehen sich Begriffe wie „Verarbeitung“, „Rechnen“, „Berechnen“, „Bestimmen“ oder dergleichen in der gesamten Spezifikation auf Aktionen und/oder Prozesse eines Computers oder eines Rechensystems oder einer ähnlichen elektronischen Rechenvorrichtung, die Daten, die als physikalische, z.B. elektronische, Größen in den Registern und/oder Speichern des Rechensystems repräsentiert sind, manipulieren und/oder in andere Daten umwandeln, die in ähnlicher Weise als physikalische Größen in den Speichern, Registern oder anderen derartigen Informationsspeicher-, -übertragungs- oder -anzeigevorrichtungen des Rechensystems repräsentiert sind.Unless expressly stated otherwise, terms such as "processing", "computing", "computing", "determining" or the like throughout the specification refer to actions and/or processes of a computer or a computing system or similar electronic computing device that Manipulate and/or convert data that is represented as physical, e.g. electronic, quantities in the registers and/or memories of the computing system into other data that are represented in a similar way as physical quantities in the memories, registers or other such information storage, - transmission or display devices of the computing system are represented.
In vergleichbarer Weise kann sich der Begriff „Prozessor“ auf eine beliebige Vorrichtung oder einen Teil einer Vorrichtung beziehen, die elektronische Daten aus Registern und/oder Speichern verarbeitet und diese elektronischen Daten in andere elektronische Daten umwandelt, die in Registern und/oder Speicher gespeichert werden können. Als nicht Beschränkende Beispiele kann ein „Prozessor“ eine CPU oder eine GPU sein. Eine „Datenverarbeitungsplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hierin verwendet, können „Software“-Prozesse z.B. Software- und/oder Hardware-Entitäten umfassen, die im Laufe der Zeit Arbeit verrichten, wie z.B. Aufgaben, Threads und intelligente Agenten. Außerdem kann sich jeder Prozess auf mehrere Prozesse beziehen, um Anweisungen nacheinander oder parallel, kontinuierlich oder intermittierend auszuführen. Die Begriffe „System“ und „Verfahren“ werden hierin insofern austauschbar verwendet, als ein System eine oder mehrere Verfahren verkörpern kann und Verfahren als ein System betrachtet werden können.Similarly, the term “processor” may refer to any device or part of a device that processes electronic data from registers and/or memories and converts that electronic data into other electronic data stored in registers and/or memories can. As non-limiting examples, a “processor” may be a CPU or a GPU. A “computing platform” may include one or more processors. As used herein, "software" processes may include, for example, software and/or hardware entities that perform work over time, such as tasks, threads, and intelligent agents. Besides, everyone can Process refers to multiple processes to execute instructions sequentially or in parallel, continuously or intermittently. The terms “system” and “method” are used interchangeably herein in that a system may embody one or more methods and methods may be considered a system.
In mindestens einer Ausführungsform ist eine Arithmetik-Logik-Einheit ein Satz von kombinatorischen Logikschaltungen, die einen oder mehrere Eingänge verarbeiten, um ein Ergebnis zu erzeugen. In mindestens einer Ausführungsform wird eine Arithmetik-Logik-Einheit von einem Prozessor verwendet, um mathematische Operationen wie beispielsweise Addition, Subtraktion oder Multiplikation durchzuführen. In mindestens einer Ausführungsform wird eine Arithmetik-Logik-Einheit verwendet, um logische Operationen wie logisches UND/ODER oder XOR zu implementieren. In mindestens einer Ausführungsform ist eine Arithmetik-Logik-Einheit zustandslos und besteht aus physikalischen Schaltkomponenten wie Halbleitertransistoren, die zur Bildung logischer Gatter angeordnet sind. In mindestens einer Ausführungsform kann eine Arithmetik-Logik-Einheit intern als zustandsabhängige Logikschaltung mit einem zugehörigen Taktgeber arbeiten. In mindestens einer Ausführungsform kann eine Arithmetik-Logik-Einheit als asynchrone Logikschaltung aufgebaut sein, deren interner Zustand nicht in einem zugehörigen Registersatz gehalten wird. In mindestens einer Ausführungsform wird eine Arithmetik-Logik-Einheit von einem Prozessor verwendet, um in einem oder mehreren Registern des Prozessors gespeicherte Operanden zu kombinieren und eine Ausgabe zu erzeugen, die von dem Prozessor in einem anderen Register oder einem Speicherort gespeichert werden kann.In at least one embodiment, an arithmetic logic unit is a set of combinational logic circuits that process one or more inputs to produce a result. In at least one embodiment, an arithmetic logic unit is used by a processor to perform mathematical operations such as addition, subtraction, or multiplication. In at least one embodiment, an arithmetic logic unit is used to implement logical operations such as logical AND/OR or XOR. In at least one embodiment, an arithmetic-logic unit is stateless and consists of physical switching components such as semiconductor transistors arranged to form logic gates. In at least one embodiment, an arithmetic logic unit may operate internally as a state-dependent logic circuit with an associated clock. In at least one embodiment, an arithmetic logic unit may be constructed as an asynchronous logic circuit whose internal state is not held in an associated register set. In at least one embodiment, an arithmetic logic unit is used by a processor to combine operands stored in one or more registers of the processor and produce an output that can be stored by the processor in another register or memory location.
In mindestens einer Ausführungsform gibt der Prozessor als ein Ergebnis der Verarbeitung einer von dem Prozessor abgerufenen Anweisung einen oder mehrere Eingänge oder Operanden an eine Arithmetik-Logik-Einheit weiter, wodurch die Arithmetik-Logik-Einheit veranlasst wird, ein Ergebnis zu erzeugen, das zumindest teilweise auf einem Anweisungscode basiert, der den Eingängen der Arithmetik-Logik-Einheit bereitgestellt wird. In mindestens einer Ausführungsform basieren die von dem Prozessor an die ALU gelieferten Anweisungscodes zumindest teilweise auf der von dem Prozessor ausgeführten Anweisung. In mindestens einer Ausführungsform verarbeitet die kombinatorische Logik in der ALU die Eingänge und erzeugt einen Ausgang, der auf einen Bus innerhalb des Prozessors gelegt wird. In mindestens einer Ausführungsform wählt der Prozessor ein Zielregister, einen Speicherort, eine Ausgabevorrichtung oder einen Ausgabespeicherort auf dem Ausgangsbus aus, so dass Takten des Prozessors bewirkt, dass die von der ALU erzeugten Ergebnisse an den gewünschten Ort gesendet werden.In at least one embodiment, as a result of processing an instruction fetched by the processor, the processor passes one or more inputs or operands to an arithmetic logic unit, causing the arithmetic logic unit to produce a result that is at least based in part on an instruction code provided to the inputs of the arithmetic-logic unit. In at least one embodiment, the instruction codes provided by the processor to the ALU are based at least in part on the instruction executed by the processor. In at least one embodiment, the combinational logic in the ALU processes the inputs and produces an output that is placed on a bus within the processor. In at least one embodiment, the processor selects a destination register, a memory location, an output device, or an output storage location on the output bus so that clocking the processor causes the results generated by the ALU to be sent to the desired location.
In dem vorliegenden Dokument kann auf das Beschaffen, Erlangen, Empfangen oder Eingeben analoger oder digitaler Daten in ein Subsystem, ein Computersystem oder eine computerimplementierte Maschine Bezug genommen sein. Der Prozess des Beschaffens, Erlangens, Empfangens oder Eingebens analoger und digitaler Daten kann auf verschiedene Weise erfolgen, z.B. durch Empfangen von Daten als Parameter eines Funktionsaufrufs oder eines Aufrufs einer Anwendungsprogrammierschnittstelle. In einigen Implementierungen kann der Prozess des Erhaltens, Erlangens, Empfangens oder Eingebens von analogen oder digitalen Daten durch die Übertragung von Daten über eine serielle oder parallele Schnittstelle durchgeführt werden. In einer anderen Implementierung kann der Prozess des Erhaltens, Erlangens, Empfangens oder Eingebens von analogen oder digitalen Daten durch die Übertragung von Daten über ein Computernetzwerk von der bereitstellenden Entität zu der erlangenden Entität durchgeführt werden. Es kann auch auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Präsentieren analoger oder digitaler Daten Bezug genommen sein. In verschiedenen Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Darstellens analoger oder digitaler Daten durch die Übertragung von Daten als Eingabe- oder Ausgabeparameter eines Funktionsaufrufs, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Interprozess-Kommunikationsmechanismus erfolgen.This document may refer to obtaining, obtaining, receiving, or inputting analog or digital data into a subsystem, computer system, or computer-implemented machine. The process of obtaining, obtaining, receiving, or inputting analog and digital data can be accomplished in various ways, such as receiving data as a parameter of a function call or an application programming interface call. In some implementations, the process of obtaining, obtaining, receiving, or inputting analog or digital data may be accomplished by transmitting data over a serial or parallel interface. In another implementation, the process of obtaining, obtaining, receiving, or inputting analog or digital data may be performed by transmitting data over a computer network from the providing entity to the acquiring entity. It may also refer to providing, outputting, transmitting, sending or presenting analog or digital data. In various examples, the process of providing, outputting, transmitting, sending, or presenting analog or digital data may be accomplished by transmitting data as an input or output parameter of a function call, an application programming interface parameter, or an interprocess communication mechanism.
Obwohl die obige Diskussion Beispielimplementierungen der beschriebenen Techniken darlegt, können auch andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sollen diese in den Anwendungsbereich dieser Erfindung fallen. Obwohl vorstehend zu Diskussionszwecken spezifische Verteilungen von Verantwortlichkeiten definiert sind, können verschiedene Funktionen und Verantwortlichkeiten je nach Umständen auf unterschiedliche Weise verteilt und aufgeteilt sein.Although the above discussion presents example implementations of the techniques described, other architectures may also be used to implement the functionality described and are intended to be within the scope of this invention. Although specific distributions of responsibilities are defined above for discussion purposes, various functions and responsibilities may be distributed and divided in different ways depending on circumstances.
Auch wenn ein Gegenstand in einer Sprache beschrieben wurde, die sich auf strukturelle Merkmale und/oder methodische Handlungen bezieht, versteht sich, dass der in den beigefügten Ansprüchen beanspruchte Gegenstand nicht notwendigerweise auf bestimmte beschriebene Merkmale oder Handlungen beschränkt ist. Vielmehr werden bestimmte Merkmale und Handlungen als beispielhafte Ausführungsformen der Ansprüche offenbart.Even if subject matter has been described in language referring to structural features and/or methodological acts, it is to be understood that the subject matter claimed in the appended claims is not necessarily limited to particular features or acts described. Rather, certain features and acts are disclosed as exemplary embodiments of the claims.
ZITATE ENTHALTEN IN DER BESCHREIBUNGQUOTES INCLUDED IN THE DESCRIPTION
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of documents listed by the applicant was generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.
Zitierte PatentliteraturCited patent literature
- US 63/174999 [0001]US 63/174999 [0001]
- US 17/720231 [0001]US 17/720231 [0001]
- US 17/720234 [0001]US 17/720234 [0001]
- US 17/720236 [0001]US 17/720236 [0001]
Claims (24)
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163174999P | 2021-04-14 | 2021-04-14 | |
US63/174,999 | 2021-04-14 | ||
US17/720,231 US20220334899A1 (en) | 2021-04-14 | 2022-04-13 | Application programming interface to monitor resource usage |
US17/720,236 | 2022-04-13 | ||
US17/720,234 | 2022-04-13 | ||
US17/720,231 | 2022-04-13 | ||
US17/720,234 US20220334890A1 (en) | 2021-04-14 | 2022-04-13 | Application programming interface to indicate increased resource usage |
US17/720,236 US20220334900A1 (en) | 2021-04-14 | 2022-04-13 | Application programming interface to indicate increased resource usage |
PCT/US2022/024828 WO2022221538A1 (en) | 2021-04-14 | 2022-04-14 | Application programming interface to monitor resource usage |
Publications (1)
Publication Number | Publication Date |
---|---|
DE112022000373T5 true DE112022000373T5 (en) | 2023-10-19 |
Family
ID=83803991
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE112022000373.1T Pending DE112022000373T5 (en) | 2021-04-14 | 2022-04-14 | Application programming interface for monitoring resource usage |
Country Status (5)
Country | Link |
---|---|
JP (1) | JP2024514370A (en) |
KR (1) | KR20220143635A (en) |
CN (1) | CN115698960A (en) |
DE (1) | DE112022000373T5 (en) |
GB (1) | GB2617868A (en) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9854060B2 (en) * | 2015-09-29 | 2017-12-26 | Netapp, Inc. | Methods and systems for monitoring network storage system resources by an API server |
-
2022
- 2022-04-14 DE DE112022000373.1T patent/DE112022000373T5/en active Pending
- 2022-04-14 GB GB2207088.2A patent/GB2617868A/en active Pending
- 2022-04-14 JP JP2022526084A patent/JP2024514370A/en active Pending
- 2022-04-14 KR KR1020227016158A patent/KR20220143635A/en not_active Application Discontinuation
- 2022-04-14 CN CN202280005020.0A patent/CN115698960A/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202207088D0 (en) | 2022-06-29 |
GB2617868A (en) | 2023-10-25 |
JP2024514370A (en) | 2024-04-02 |
KR20220143635A (en) | 2022-10-25 |
CN115698960A (en) | 2023-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102021102589A1 (en) | CALCULATION GRAPH OPTIMIZATION | |
DE102021106796A1 (en) | MEMORY ERROR ISOLATION TECHNIQUES | |
DE102021104561A1 (en) | ASYNCHRONOUS DATA MOVEMENT PIPELINE | |
DE102021103492A1 (en) | APPLICATION PROGRAMMING INTERFACE TO ACCELERATE MATRIX OPERATIONS | |
DE102021104970A1 (en) | COOPERATIVE PARALLEL MEMORY ALLOCATION | |
DE102021106797A1 (en) | TECHNIQUES FOR ORCHESTRATING PHASES OF THREAD SYNCHRONIZATION | |
DE112021005433T5 (en) | METHOD FOR BALANCING THE POWER OF MULTIPLE CHIPS | |
DE112022003222T5 (en) | MULTI-ARCHITECTURE EXECUTION GRAPHS | |
DE112022002140T5 (en) | Light resampling with ray tracing and visibility in screen space | |
DE102023101893A1 (en) | GRAPH-BASED STORAGE | |
DE102022132008A1 (en) | ASYNCHRONE MEMORY DEALLOCATION | |
DE102022132013A1 (en) | APPLICATION PROGRAMMING INTERFACES FOR INTEROPERABILITY | |
DE102022131530A1 (en) | METHOD OF MODIFYING GRAPH CODE | |
DE102022131708A1 (en) | APPLICATION PROGRAMMING INTERFACE TO LIMIT MEMORY | |
DE112022001917T5 (en) | SYNCHRONIZING A GRAPH EXECUTION | |
DE112022002953T5 (en) | PARALLEL PROCESSING OF THREAD GROUPS | |
DE102022124362A1 (en) | USER CONFIGURABLE MEMORY ALLOCATION | |
DE112022000425T5 (en) | SIMULTANEOUS CODE INTRODUCTION | |
DE102022114509A1 (en) | MEMORY ALLOCATION USING GRAPHICS | |
DE112022002258T5 (en) | TENSOR MODIFICATION BASED ON RESOURCE PROCESSING | |
DE102022104253A1 (en) | Tone management using tone enhancement functions for high dynamic range imaging applications | |
DE102022107673A1 (en) | SPATIAL-TEMPORAL RESAMPLING WITH DECOUPLED SHADING AND REUSE | |
DE112021007132T5 (en) | COMPUTING THE MOVEMENT OF PIXELS BETWEEN IMAGES | |
DE112022000373T5 (en) | Application programming interface for monitoring resource usage | |
DE112022000909T5 (en) | APPLICATION PROGRAMMING INTERFACE FOR LOCALIZING INCOMPLETE GRAPHENE CODE |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed |