DE102022108711A1 - Techniken zur kombination von operationen - Google Patents
Techniken zur kombination von operationen Download PDFInfo
- Publication number
- DE102022108711A1 DE102022108711A1 DE102022108711.5A DE102022108711A DE102022108711A1 DE 102022108711 A1 DE102022108711 A1 DE 102022108711A1 DE 102022108711 A DE102022108711 A DE 102022108711A DE 102022108711 A1 DE102022108711 A1 DE 102022108711A1
- Authority
- DE
- Germany
- Prior art keywords
- operations
- dependent reduction
- processor
- reduction operations
- vehicle
- 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
- 238000000034 method Methods 0.000 title claims abstract description 281
- 230000009467 reduction Effects 0.000 claims abstract description 389
- 230000001419 dependent effect Effects 0.000 claims abstract description 225
- 230000015654 memory Effects 0.000 claims description 507
- 238000012545 processing Methods 0.000 claims description 416
- 238000009795 derivation Methods 0.000 claims description 282
- 238000013528 artificial neural network Methods 0.000 claims description 217
- 238000004590 computer program Methods 0.000 claims description 133
- 238000010586 diagram Methods 0.000 claims description 97
- 238000004422 calculation algorithm Methods 0.000 claims description 68
- 230000009471 action Effects 0.000 claims description 14
- 238000012549 training Methods 0.000 description 377
- 230000006870 function Effects 0.000 description 150
- 238000013135 deep learning Methods 0.000 description 148
- 238000010801 machine learning Methods 0.000 description 125
- 230000008569 process Effects 0.000 description 116
- 238000003860 storage Methods 0.000 description 91
- 238000007667 floating Methods 0.000 description 72
- 210000002569 neuron Anatomy 0.000 description 66
- 238000004891 communication Methods 0.000 description 64
- 238000003384 imaging method Methods 0.000 description 60
- 238000005192 partition Methods 0.000 description 55
- 238000013473 artificial intelligence Methods 0.000 description 54
- 230000000977 initiatory effect Effects 0.000 description 53
- 238000001514 detection method Methods 0.000 description 46
- 238000005227 gel permeation chromatography Methods 0.000 description 42
- 239000000872 buffer Substances 0.000 description 40
- 238000007726 management method Methods 0.000 description 39
- 238000013500 data storage Methods 0.000 description 34
- 238000012800 visualization Methods 0.000 description 32
- 230000000875 corresponding effect Effects 0.000 description 30
- 125000000914 phenoxymethylpenicillanyl group Chemical group CC1(S[C@H]2N([C@H]1C(=O)*)C([C@H]2NC(COC2=CC=CC=C2)=O)=O)C 0.000 description 30
- 229920002451 polyvinyl alcohol Polymers 0.000 description 30
- 235000019422 polyvinyl alcohol Nutrition 0.000 description 30
- 230000002093 peripheral effect Effects 0.000 description 28
- 239000011800 void material Substances 0.000 description 28
- 238000013527 convolutional neural network Methods 0.000 description 26
- 239000012634 fragment Substances 0.000 description 26
- 102100034112 Alkyldihydroxyacetonephosphate synthase, peroxisomal Human genes 0.000 description 23
- 101000799143 Homo sapiens Alkyldihydroxyacetonephosphate synthase, peroxisomal Proteins 0.000 description 23
- 238000000848 angular dependent Auger electron spectroscopy Methods 0.000 description 23
- 230000011218 segmentation Effects 0.000 description 23
- 238000004458 analytical method Methods 0.000 description 19
- 239000011159 matrix material Substances 0.000 description 19
- 238000013519 translation Methods 0.000 description 19
- 230000014616 translation Effects 0.000 description 19
- 238000009826 distribution Methods 0.000 description 18
- 238000009877 rendering Methods 0.000 description 18
- 210000000225 synapse Anatomy 0.000 description 18
- 238000007792 addition Methods 0.000 description 16
- 230000010354 integration Effects 0.000 description 16
- 239000000047 product Substances 0.000 description 16
- 230000001133 acceleration Effects 0.000 description 15
- 238000012384 transportation and delivery Methods 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 14
- 238000012163 sequencing technique Methods 0.000 description 14
- 238000012546 transfer Methods 0.000 description 14
- 238000013507 mapping Methods 0.000 description 13
- 238000010606 normalization Methods 0.000 description 13
- 210000000056 organ Anatomy 0.000 description 13
- 230000004913 activation Effects 0.000 description 12
- 238000001994 activation Methods 0.000 description 12
- 230000002829 reductive effect Effects 0.000 description 12
- 238000004364 calculation method Methods 0.000 description 11
- 230000000670 limiting effect Effects 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 11
- 238000002604 ultrasonography Methods 0.000 description 11
- 238000003491 array Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 10
- 230000033001 locomotion Effects 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 9
- 238000002595 magnetic resonance imaging Methods 0.000 description 9
- 239000003795 chemical substances by application Substances 0.000 description 8
- 239000012528 membrane Substances 0.000 description 8
- 230000004044 response Effects 0.000 description 8
- 238000000638 solvent extraction Methods 0.000 description 8
- 230000001360 synchronised effect Effects 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 230000001976 improved effect Effects 0.000 description 7
- 239000004065 semiconductor Substances 0.000 description 7
- 230000000007 visual effect Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 238000012805 post-processing Methods 0.000 description 6
- 238000007781 pre-processing Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000003190 augmentative effect Effects 0.000 description 5
- 230000033228 biological regulation Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000018109 developmental process Effects 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 230000004927 fusion Effects 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 238000002156 mixing Methods 0.000 description 5
- 239000000203 mixture Substances 0.000 description 5
- 238000012544 monitoring process Methods 0.000 description 5
- 230000008447 perception Effects 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 230000003044 adaptive effect Effects 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000013439 planning Methods 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000008093 supporting effect Effects 0.000 description 4
- 241000269400 Sirenidae Species 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000002591 computed tomography Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000001816 cooling Methods 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000003745 diagnosis Methods 0.000 description 3
- 238000002059 diagnostic imaging Methods 0.000 description 3
- 239000000446 fuel Substances 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 238000002372 labelling Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000003921 oil Substances 0.000 description 3
- 229920001690 polydopamine Polymers 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 230000000306 recurrent effect Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000004043 responsiveness Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 229920002803 thermoplastic polyurethane Polymers 0.000 description 3
- 210000002370 ICC Anatomy 0.000 description 2
- 238000012884 algebraic function Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000004397 blinking Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000001149 cognitive effect Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 238000011960 computer-aided design Methods 0.000 description 2
- 230000001276 controlling effect Effects 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
- 238000013136 deep learning model Methods 0.000 description 2
- 238000002592 echocardiography Methods 0.000 description 2
- 230000002708 enhancing effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000001815 facial effect Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000010988 intraclass correlation coefficient Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000001242 postsynaptic effect Effects 0.000 description 2
- 210000005215 presynaptic neuron Anatomy 0.000 description 2
- 108090000623 proteins and genes Proteins 0.000 description 2
- 230000005855 radiation Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000010200 validation analysis Methods 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
- 241001136792 Alle Species 0.000 description 1
- 101100248200 Arabidopsis thaliana RGGB gene Proteins 0.000 description 1
- 238000012935 Averaging Methods 0.000 description 1
- 239000010752 BS 2869 Class D Substances 0.000 description 1
- 206010008263 Cervical dysplasia Diseases 0.000 description 1
- 208000032544 Cicatrix Diseases 0.000 description 1
- 101100481876 Danio rerio pbk gene Proteins 0.000 description 1
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- 101100481878 Mus musculus Pbk gene Proteins 0.000 description 1
- 206010028980 Neoplasm Diseases 0.000 description 1
- 241000492493 Oxymeris Species 0.000 description 1
- 206010034960 Photophobia Diseases 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
- 210000003484 anatomy Anatomy 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 238000002485 combustion reaction Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000012517 data analytics Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000004980 dosimetry Methods 0.000 description 1
- 229940079593 drug Drugs 0.000 description 1
- 239000003814 drug Substances 0.000 description 1
- 238000007876 drug discovery Methods 0.000 description 1
- 238000002091 elastography Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000005669 field effect Effects 0.000 description 1
- 238000004374 forensic analysis Methods 0.000 description 1
- 230000007614 genetic variation Effects 0.000 description 1
- 238000011331 genomic analysis Methods 0.000 description 1
- 230000009546 growth abnormality Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 208000013469 light sensitivity Diseases 0.000 description 1
- 238000012417 linear regression Methods 0.000 description 1
- 239000007788 liquid Substances 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000007477 logistic regression Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 239000006249 magnetic particle Substances 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012900 molecular simulation Methods 0.000 description 1
- 230000035772 mutation Effects 0.000 description 1
- 208000010125 myocardial infarction Diseases 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000002610 neuroimaging Methods 0.000 description 1
- 238000009206 nuclear medicine Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 238000010926 purge Methods 0.000 description 1
- 238000011002 quantification Methods 0.000 description 1
- 238000002601 radiography Methods 0.000 description 1
- 238000007637 random forest analysis Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000002310 reflectometry Methods 0.000 description 1
- 230000036279 refractory period Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 231100000241 scar Toxicity 0.000 description 1
- 230000037387 scars Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 238000004611 spectroscopical analysis Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000003325 tomography Methods 0.000 description 1
- 238000012876 topography Methods 0.000 description 1
- 238000013526 transfer learning Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000004148 unit process 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/40—Transformation of program code
- G06F8/41—Compilation
-
- 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- 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/443—Optimisation
-
- 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/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4436—Exlining; Procedural abstraction
-
- 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
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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 or 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 or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; 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 or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- G—PHYSICS
- G06—COMPUTING; 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 or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V20/00—Scenes; Scene-specific elements
- G06V20/50—Context or environment of the image
- G06V20/56—Context or environment of the image exterior to a vehicle by using sensors mounted on the vehicle
- G06V20/58—Recognition of moving objects or obstacles, e.g. vehicles or pedestrians; Recognition of traffic objects, e.g. traffic signs, traffic lights or roads
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Multimedia (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Neurology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Devices For Executing Special Programs (AREA)
- Image Analysis (AREA)
Abstract
Geräte, Systeme und Techniken, um Operationen zu kombinieren. In mindestens einer Ausführungsform veranlasst ein Prozessor, dass zwei oder mehr abhängige Reduktionsoperationen in einem Software-Kernel kombiniert werden.
Description
- GEBIET
- Mindestens eine Ausführungsform bezieht sich auf Verarbeitungsressourcen, die zum Durchführen und Erleichtern von künstlicher Intelligenz verwendet werden. Zum Beispiel bezieht sich mindestens eine Ausführungsform auf Prozessoren oder Rechensysteme, die zum Durchführen von Training und/oder Ableiten unter Verwendung neuronaler Netze gemäß verschiedener hierin beschriebener neuer Techniken verwendet werden..
- ALLGEMEINER STAND DER TECHNIK
- Das Training neuronaler Netze und/oder die Ableitung unter Verwendung neuronaler Netze kann erhebliche Speicher-, Zeit- oder Rechenressourcen beanspruchen. Der Speicher-, Zeit- oder Rechenaufwand für das Training neuronaler Netze und/oder die Ableitung unter Verwendung neuronaler Netze kann verbessert werden.
- Figurenliste
-
-
1 ist ein Blockdiagramm, das ein System zum Kombinieren von Operationen veranschaulicht, gemäß mindestens einer Ausführungsform; -
2 ist ein Blockdiagramm, das Diagramme von Operationen veranschaulicht, gemäß mindestens einer Ausführungsform; -
3 ist ein Blockdiagramm, das ein System zum Ausführen von Anweisungen veranschaulicht, die kombinierte Operationen einschließen, gemäß mindestens einer Ausführungsform; -
4 ist ein Flussdiagramm einer Technik zum Erzeugen von Anweisungen, die kombinierte Operationen einschließen, gemäß mindestens einer Ausführungsform; -
5 ist ein Flussdiagramm einer Technik zum Kombinieren von Operationen gemäß mindestens einer Ausführungsform; -
6 ist ein Flussdiagramm einer Technik zum Erzeugen von Anweisungen, die kombinierte Operationen einschließen, gemäß mindestens einer Ausführungsform; -
7A veranschaulicht Ableitungs- und/oder Trainingslogik gemäß mindestens einer Ausführungsform; -
7B veranschaulicht Ableitungs- und/oder Trainingslogik gemäß mindestens einer Ausführungsform; -
8 veranschaulicht das Training und den Einsatz eines neuronalen Netzes gemäß mindestens einer Ausführungsform; -
9 veranschaulicht gemäß mindestens einer Ausführungsform ein Beispiel für ein Rechenzentrumssystem; -
10A veranschaulicht ein Beispiel für ein autonomes Fahrzeug gemäß mindestens einer Ausführungsform; -
10B veranschaulicht ein Beispiel für Kamerapositionen und Sichtfelder für das autonome Fahrzeug von10A gemäß mindestens einer Ausführungsform; -
10C ist ein Blockdiagramm, das eine beispielhafte Systemarchitektur für das autonome Fahrzeug von10A gemäß mindestens einer Ausführungsform veranschaulicht; -
10D ist ein Diagramm, das ein System zur Kommunikation zwischen Cloud-basierten Servern und dem autonomen Fahrzeug von10A gemäß mindestens einer Ausführungsform veranschaulicht; -
11 ist ein Blockdiagramm, das ein Computersystem gemäß mindestens einer Ausführungsform veranschaulicht; -
12 ist ein Blockdiagramm, das ein Computersystem gemäß mindestens einer Ausführungsform veranschaulicht; -
13 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
14 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
15A veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
15B veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
15C veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
15D veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
15E und15F veranschaulichen ein gemeinsames Programmiermodell gemäß mindestens einer Ausführungsform; -
16 veranschaulicht beispielhafte integrierte Schaltungen und verbundene Grafikprozessoren gemäß mindestens einer Ausführungsform; - die
17A-17B veranschaulichen beispielhafte integrierte Schaltungen und verbundene Grafikprozessoren gemäß mindestens einer Ausführungsform; - die
18A-18B veranschaulichen zusätzliche beispielhafte Grafikprozessorlogik gemäß mindestens einer Ausführungsform; -
19 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform; -
20A veranschaulicht einen Parallelprozessor gemäß mindestens einer Ausführungsform; -
20B veranschaulicht eine Partitionseinheit gemäß mindestens einer Ausführungsform; -
20C veranschaulicht einen Verarbeitungscluster gemäß mindestens einer Ausführungsform; -
20D veranschaulicht einen Grafikmultiprozessor gemäß mindestens einer Ausführungsform; -
21 veranschaulicht ein System mit Multigrafikverarbeitungseinheit (graphics processing unit - GPU) gemäß mindestens einer Ausführungsform; -
22 veranschaulicht einen Grafikprozessor gemäß mindestens einer Ausführungsform; -
23 ist ein Blockdiagramm, das eine Prozessor-Mikroarchitektur für einen Prozessor veranschaulicht, gemäß mindestens einer Ausführungsform; -
24 veranschaulicht einen Deep-Learning-Anwendungsprozessor gemäß mindestens einer Ausführungsform; -
25 ist ein Blockdiagramm, das einen beispielhaften neuromorphen Prozessor veranschaulicht, gemäß mindestens einer Ausführungsform; -
26 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehrerer Ausführungsformen; -
27 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehrerer Ausführungsformen; -
28 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehrerer Ausführungsformen; -
29 ist ein Blockdiagramm einer Grafikverarbeitungsengine eines Grafikprozessors gemäß mindestens einer Ausführungsform; -
30 ist ein Blockdiagramm von mindestens Abschnitte eines Grafikprozessorkerns gemäß mindestens einer Ausführungsform; -
31A-31B veranschaulichen eine Thread-Ausführungslogik, die ein Array von Verarbeitungselementen eines Grafikprozessorkerns gemäß mindestens einer Ausführungsform einschließt; -
32 veranschaulicht eine Parallelverarbeitungseinheit (parallel processing unit - „PPU“) gemäß mindestens einer Ausführungsform; -
33 veranschaulicht einen allgemeinen Verarbeitungscluster (general processing cluster - „GPC“) gemäß mindestens einer Ausführungsform; -
34 veranschaulicht eine Speicherpartitionseinheit einer Parallelverarbeitungseinheit („PPU“) gemäß mindestens einer Ausführungsform; -
35 veranschaulicht einen Streaming-Multiprozessor gemäß mindestens einer Ausführungsform; -
36 ist ein beispielhaftes Datenflussdiagramm für eine fortschrittliche Rechenpipeline gemäß mindestens einer Ausführungsform; -
37 ist ein Systemdiagramm für ein beispielhaftes System zum Trainieren, Anpassen, Instanziieren und Umsetzen von Modellen des maschinellen Lernens in einer fortschrittlichen Rechenpipeline gemäß mindestens einer Ausführungsform; -
38 veranschaulicht eine fortgeschrittene Rechenpipeline 3710A zum Verarbeiten von Bildgebungsdaten gemäß mindestens einer Ausführungsform; -
39A schließt ein beispielhaftes Datenflussdiagramm eines virtuellen Instruments ein, das eine Ultraschallvorrichtung unterstützt, gemäß mindestens einer Ausführungsform; -
39B schließt ein beispielhaftes Datenflussdiagramm eines virtuellen Instruments ein, das einen CT-Scanner unterstützt, gemäß mindestens einer Ausführungsform; -
40A veranschaulicht ein Datenflussdiagramm für einen Prozess zum Trainieren eines Modells des maschinellen Lernens gemäß mindestens einer Ausführungsform; und -
40B ist eine beispielhafte Darstellung einer Client-Server-Architektur zum Verbessern von Anmerkungswerkzeugen mit vortrainierten Anmerkungsmodellen gemäß mindestens einer Ausführungsform. - DETAILLIERTE BESCHREIBUNG
-
1 ist ein Blockdiagramm, das ein System 100 zum Kombinieren von Operationen gemäß mindestens einer Ausführungsform veranschaulicht. In mindestens einer Ausführungsform verwendet ein Deep Learning (DL)Compiler 102 eine Darstellung eines Computerprogramms 104, um einen Code 106 zu erzeugen, der Operationen kombiniert, die in der Darstellung des Computerprogramms 104 dargestellt sind. In mindestens einer Ausführungsform ist der DL-Compiler 102 ein Computerprogramm, das auf einem Prozessor (z. B. einer CPU) läuft und über eine Anwendungsprogrammierschnittstelle (API) zugänglich ist. In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 Anweisungen ein, die auf einer Vorrichtung (z. B. einer parallelen Verarbeitungseinheit (PPU) wie einer Grafikverarbeitungseinheit (GPU)) von einem Host (z. B. einem Computersystem mit einer CPU) gestartet werden. In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 Operationen ein, die ein neuronales Netz, wie z. B. ein konvolutives neuronales Netz (CNN), und/oder ein rekurrentes neuronales Netz (RNN) verwenden. In mindestens einer Ausführungsform ist die Darstellung des Computerprogramms 104 eine Darstellung in Form eines Diagramms. - In mindestens einer Ausführungsform schließt der Code 106 Anweisungen ein, die auf einer Vorrichtung (z. B. einer PPU, GPU oder einer anderen geeigneten Beschleunigungsvorrichtung) von einem Host (z. B. einem Computersystem mit einer CPU) gestartet werden. In mindestens einer Ausführungsform schließt der Code 106 einen oder mehrere Software-Kernel ein, die auf einer Vorrichtung gestartet werden. In mindestens einer Ausführungsform ist der Code 106 ein Quellcode (z. B. für eine parallele Verarbeitungsplattform wie Compute Unified Device Architecture (CUDA)). In mindestens einer Ausführungsform schließt der Code 106 einen Software-Kernel ein (z. B. einen Software-Kernel, der auf einer parallelen Verarbeitungsvorrichtung wie einem CUDA-Kernel gestartet wird), der zwei oder mehr abhängige Reduktionsoperationen aus der Darstellung des Computerprogramms 104 kombiniert. In mindestens einer Ausführungsform schließt der Code 106 zusätzliche Operationen (z. B. elementweise Operationen, Kopieroperationen und/oder andere geeignete Operationen) ein, die in einem Software-Kernel mit zwei oder mehr abhängigen Reduktionsoperationen kombiniert sind.
- In mindestens einer Ausführungsform ist eine Reduktionsoperation eine Operation, die Berechnungen einschließt und eine Ausgabe mit einer Anzahl von Dimensionen erzeugt, die kleiner ist als eine Anzahl von Dimensionen einer Eingabe. In mindestens einer Ausführungsform führt eine Reduktionsoperation eine Berechnung unter Verwendung von Elementen entlang einer Achse eines Eingabetensors durch (z. B. Summe, Produkt, Mittelwert, Minimum (Min), Maximum (Max) oder eine andere geeignete Operation), so dass der durch die Reduktionsoperation erzeugte Ausgabetensor nach dem Durchführen der Berechnung eine verringerte Anzahl von Dimensionen im Vergleich zum Eingabetensor aufweist (z. B. so, dass ein zweidimensionaler (2D) Eingabemittel dazu führt, dass ein eindimensionaler (1D) Tensor erzeugt wird). In mindestens einer Ausführungsform schließt die Reduktionsoperation auch Operationen ein, die ein Berechnen und Erzeugen eines Ausgabetensors mit einer Anzahl von Elementen entlang einer Dimension einschließen, die kleiner ist als eine Anzahl von Elementen entlang derselben Dimension des Eingabetensors (z. B. topk, das eine Ausgabe mit k höchsten Werten entlang der Achse erzeugt). In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Operationen einen Fall ein, in dem eine erste Reduktionsoperation von einer zweiten Reduktionsoperation abhängig ist. In mindestens einer Ausführungsform ist eine erste Reduktionsoperation von einer zweiten Reduktionsoperation abhängig, wenn die erste Reduktionsoperation eine Ausgabe der zweiten Reduktionsoperation als Eingabe verwendet, entweder direkt oder indirekt (z. B. mit einer oder mehreren dazwischenliegenden Operationen wie elementweise oder Kopieroperationen). In mindestens einer Ausführungsform wird eine Operation durch y[n1, n2, n3, ..., 1, 1, 1, ...] = reduce (x[n1, n2, n3, ..., r1, r2, r3, ...]) dargestellt, wobei r1, r2, r3, ... zu reduzierende Achsen sind.
- In mindestens einer Ausführungsform werden die elementweisen Operationen auch als punktweise Operationen bezeichnet. In mindestens einer Ausführungsform können die elementweisen Operationen eine beliebige Anzahl von Eingaben einschließen (z. B. unär, binär, ternär oder eine beliebige andere Anzahl von Eingaben). In mindestens einer Ausführungsform schließen die elementweisen Operationen Operationen wie add, sub, rectified linear unit (relu) activation function, hyperbolic tangent (tanh), select oder jede andere geeignete elementweise Operation ein (z. B. eine Operation, die eine Berechnung elementweise auf einem oder mehreren Eingabetensoren durchführt). In mindestens einer Ausführungsform werden die Kopieroperationen auch als Speicheroperationen bezeichnet. In mindestens einer Ausführungsform umfassen Kopieroperationen das Kopieren von Daten aus einem oder mehreren Eingabepuffern in einen oder mehrere Ausgabepuffer, wobei jedoch keine Berechnungen mit den kopierten Daten durchgeführt werden. In mindestens einer Ausführungsform schließen Kopieroperationen Operationen wie Umformen, Replizieren, Transponieren, Zusammenfügen, Teilen, Umkehren, Quetschen, Erweitern, Sammeln, Scheiben oder jede andere geeignete Kopieroperation ein. In mindestens einer Ausführungsform erzeugen einige Kopieroperationen einen Ausgabetensor mit einer Anzahl von Dimensionen, die geringer ist als die Anzahl von Dimensionen eines Eingabetensors, und/oder erzeugen einen Ausgabetensor mit einer Anzahl von Elementen entlang einer Achse, die geringer ist als die Anzahl von Elementen entlang derselben Achse des Eingabetensors, aber die Kopieroperation wird nicht als Reduktionsoperation betrachtet, zumindest aus dem Grund, dass der Ausgabetensor durch Kopieren von Elementen aus dem Eingabetensor erzeugt wird, ohne dass eine Berechnung mit Elementen des Eingabetensors durchgeführt wird.
- In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 Kombinationen von Reduktionsoperationen, elementweisen Operationen und/oder Kopieroperationen ein. In mindestens einer Ausführungsform sind Kopieroperationen mit anderen Arten von Operationen in das Diagramm eingestreut. In mindestens einer Ausführungsform, wenn Kopieroperationen mit anderen Operationen kombiniert werden, werden die Operationen durch skalare Berechnungen ohne Speicherzugriff implementiert. In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 auch Operationen höheren Grades ein, wie z. B. Matrix-Vektor-Multiplikationsoperationen, Softmax-Operationen, Batch-Normalisierungsoperationen (Batchnorm) und/oder jede andere geeignete Operation höheren Grades. In mindestens einer Ausführungsform handelt es sich bei der Darstellung des Computerprogramms 104 um eine Darstellung eines Abschnitts eines Computerprogramms. In mindestens einer Ausführungsform ist die Darstellung des Computerprogramms 104 ein Diagramm (z. B. ein gerichteter azyklischer Graph (DAG)). In mindestens einer Ausführungsform handelt es sich bei der Darstellung des Computerprogramms 104 um einen DAG, G, der die Datenflussabhängigkeiten zwischen Operationen ausdrückt. In mindestens einer Ausführungsform kann das Diagramm G eine beliebige Anzahl von Reduktionen, Matrix-Vektor-Multiplikationen, elementweisen und Speicheroperationen enthalten. In mindestens einer Ausführungsform ist die Darstellung des Computerprogramms 104 ein Untergraph eines größeren Diagramms. In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 Aspekte ein, die sich auf das folgende Pseudocode-Diagramm beziehen:
ten_74 = ten_73 + input_82; ten_75 = ten_74 + ten_19; ten_76 = mittel (ten_75, std::vector<int>{1}); ten_77 = ten_75 - ten_76; ten_78 = ten_77 * ten_77; ten_79 = mittel (ten_78, std::vector<int>{1}); ten_80 = ten_79 + input_84; ten_81 = sqrt (ten_80); ten_82 = static_cast<float>(1) / ten_81; ten_83 = ten_82 * input_72; ten_84 = ten_75 * ten_83; ten_85 = ten_76 * ten_83; ten_86 = input_112 - ten_85; ten_87 = ten_84 + ten_86;
In mindestens einer Ausführungsform stellt das obige Pseudocode Diagramm Operationen dar, die restliche Additions- + Schichtnormalisierungsschichten (Layernorm) in bidirektionalen Encoderdarstellungen von Transformatoren (BERT) bilden. In mindestens einer Ausführungsform schließt das obige Pseudocode-Diagramm zwei Reduktionen (Mittelwert) und 12 elementweise Operationen ein.
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 eine modifizierte Darstellung des Computerprogramms 108 basierend, zumindest teilweise, auf der Darstellung des Computerprogramms 104. In mindestens einer Ausführungsform erzeugt ein Rewriter 110 des DL-Compilers 102 eine modifizierte Darstellung des Computerprogramms 108. In mindestens einer Ausführungsform modifiziert der Rewriter 110 die Darstellung des Computerprogramms 104, um eine Darstellung bestimmter Operationen höheren Grades in eine oder mehrere andere Arten von Operationen zu verändern. In mindestens einer Ausführungsform wird die Veränderung von Operationen höheren Grades in andere Arten von Operationen als Herabsetzung von Operationen höheren Grades bezeichnet. In mindestens einer Ausführungsform ersetzt der Rewriter 110 die Operationen der Matrix-Vektor-Multiplikation (z. B. die allgemeine Matrix-Vektor-Multiplikation (GEMV)) durch eine Umformungsoperation, eine elementweise Multiplikationsoperation und eine Summenreduktionsoperation. In mindestens einer Ausführungsform wird die für die GEMV-Operation verwendete Matrix als Datensatz bezeichnet. In mindestens einer Ausführungsform schließt die modifizierte Darstellung des Computerprogramms 108 diese Umformungs-, elementweisen Multiplikations- und Summenreduktionsoperationen anstelle der Matrix-Vektor-Multiplikationsoperationen ein, die in der Darstellung des Computerprogramms 104 vorhanden waren. In mindestens einer Ausführungsform werden die Operationen, die von Rewriter 110 verwendet werden, um eine Operation höheren Grades zu ersetzen, als ein Satz von Ersatzoperationen bezeichnet. In mindestens einer Ausführungsform schreibt der Rewriter 110 andere Arten von Operationen höheren Grades um und führt eine ähnliche Ersetzung durch (z. B. die Herabsetzung einer Softmax-Operation auf eine Max-Reduktions-Operation, eine Subtraktions-Operation, eine Exponential-Operation, eine Summen-Reduktions-Operation und eine Divisions-Operation, die in der modifizierten Darstellung des Computerprogramms 108 anstelle der Softmax-Operation verwendet werden, die in der Darstellung des Computerprogramms 104 vorhanden war). In mindestens einer Ausführungsform reduziert der Rewriter 110 Operationen höheren Grades auf punktweise Operationen und Reduktionsoperationen. In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms 104 keine Operationen höheren Grades ein und die modifizierte Darstellung des Computerprogramms 108 entspricht der Darstellung des Computerprogramms 104. In mindestens einer Ausführungsform, wenn die Darstellung des Computerprogramms 104 eine Operation einschließt, die der DL-Compiler 102 nicht mit anderen Operationen kombinieren kann, schreibt der Rewriter 110 die Darstellung des Computerprogramms 104 in eine Vielzahl modifizierter Darstellungen des Computerprogramms 108 um, so dass die nicht unterstützten Operationen in einen Teilgraphen getrennt werden und die unterstützten Operationen in einen oder mehrere Teilgraphen zur Kombination in einen oder mehrere Software-Kerne eingeschlossen werden.
In mindestens einer Ausführungsform wird das Ersetzen von Matrix-Vektor-Multiplikationsoperationen (z. B. durch Rewriter 110) durch eine Umformungsoperation, eine elementweise Multiplikation und eine Summenreduktionsoperation durchgeführt, zumindest teilweise bezogen auf den folgenden Pseudocode:
Eingabe: Operation DAG, G Für jede Operation op in G If op is c = gemv (a,b) remove c = gemv (a, b) from G insert r = reshape (b, [1, k]) in G insert m = mul (a, r) in G insert c = sum (m, axis = 1) in G End if End for
In mindestens einer Ausführungsform werden Matrix-Vektor-Multiplikationen (GEMV) im obigen Pseudocode durch gemv (a, b) dargestellt, wobei a eine m x k-Matrix und b ein Vektor der Länge k ist. In mindestens einer Ausführungsform kann die Technik des obigen Pseudocodes auch für gestapelte Matrix-Vektor-Multiplikationen aufgebracht werden, wird aber der Einfachheit halber auf einen einzelnen Stapel bezogen gezeigt.
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 einen Plan 112. In mindestens einer Ausführungsform erzeugt der DL-Compiler einen Plan 112, der zumindest teilweise auf einer modifizierten Darstellung des Computerprogramms 108 basiert. In mindestens einer Ausführungsform erzeugt ein Scheduler 114 des DL-Compilers 102 den Plan 112. In mindestens einer Ausführungsform ist der Plan 112 eine Datenstruktur, die die Knoten eines Diagramms der Eingabe (z. B. die modifizierte Darstellung des Computerprogramms 108) in Schritten gruppiert und angibt, welche Knoten in jedem Schritt Reduktionen, Prolog-, Epilog- und Restoperationen sind. In mindestens einer Ausführungsform erzeugt der Scheduler 114 den Plan 112 zumindest teilweise basierend auf der modifizierten Darstellung des Computerprogramms 108. In mindestens einer Ausführungsform weist der Scheduler 114 den Schritten Operationen in der modifizierten Darstellung des Computerprogramms 108 (z. B. eine modifizierte DAG) zu. In mindestens einer Ausführungsform schließt jeder Schritt eine oder mehrere Reduktionsoperationen ein. In mindestens einer Ausführungsform schließen ein oder mehrere Schritte zwei oder mehr abhängige Reduktionsoperationen ein. In mindestens einer Ausführungsform werden die Schritte als Schritt[i] für jede Schrittnummer i dargestellt. In mindestens einer Ausführungsform weist jeder Schritt einen Prolog auf, der elementweise und/oder Speicheroperationen einschließt, von denen Reduktionen abhängen. In mindestens einer Ausführungsform sind Epilog-Operationen elementweise und/oder Speicheroperationen, die von Kürzungen in einem bestimmten Schritt abhängig sind. In mindestens einer Ausführungsform führt der Scheduler 114 eine Rückwärtsanalyse des Diagramms durch, um Prologoperationen zu finden, und eine Vorwärtsanalyse des Diagramms, um Epilogoperationen zu finden. In mindestens einer Ausführungsform schließt die modifizierte Darstellung des Computerprogramms 108 Operationen ein, die nichts mit Reduktionen zu tun haben. In mindestens einer Ausführungsform werden Operationen, die nichts mit Reduktionen zu tun haben, als Restoperationen gekennzeichnet.
In mindestens einer Ausführungsform wird mindestens ein Aspekt des Erzeugens von Plan 112 (z. B. durch Planer 114) durch mindestens einen Aspekt des folgenden Pseudocodes beschrieben:
Eingabe: Operation DAG, G i = 0; While (alle Reduktionen sind nicht eingeplant) step[i] = next_step(); // reduction nodes in step[i] prolog[i] = compute_prolog(step[i]); epilogue[i] = compute_epilogue (step[i]); Mark nodes in step[i], prolog[i], and epilogue[i] as visited; i++; End While Verbleibende nicht besuchte Operationen in der DAG als Restoperationen markieren
In mindestens einer Ausführungsform durchläuft die Funktion next_step in jeder Iteration das Diagramm G und gibt eine Menge von nicht besuchten Reduktionsoperationen zurück, die nicht von anderen nicht besuchten Reduktionsoperationen abhängig sind. In mindestens einer Ausführungsform führt die Funktion compute_prolog eine Rückwärtsanalyse des Diagramms durch, beginnend mit den Reduktionsoperationen in Schritt[i]. In mindestens einer Ausführungsform gibt compute_prolog die Menge der nicht besuchten elementweisen Operationen und Speicheroperationen zurück, von denen die Reduktionen in Schritt[i] abhängig sind. In mindestens einer Ausführungsform führt compute_epilogue in ähnlicher Weise eine Vorwärtsanalyse des Diagramms durch und gibt die Menge der nicht besuchten elementweisen Operationen und Speicheroperationen zurück, die von den Kürzungen in Schritt[i] abhängen. In mindestens einer Ausführungsform werden in jeder Iteration die Knoten in Schritt[i], Prolog[i] und Epilog[i] als besucht markiert. In mindestens einer Ausführungsform endet die Schleife, wenn es keine unbesuchten Reduktionen in G gibt.
In mindestens einer Ausführungsform schließt das Erzeugen des Plans 112 das Durchführen mindestens eines Aspekts ein, der sich auf 2 bezieht.
In mindestens einer Ausführungsform führt der DL-Compiler 102 eine Wiederverwendungsanalyse durch, um Daten zu identifizieren, die in mehreren Schritten im Plan 112 wiederverwendet werden. In mindestens einer Ausführungsform führt der Scheduler 114 eine Wiederverwendungsanalyse durch. In mindestens einer Ausführungsform schließt das Durchführen der Wiederverwendungsanalyse das Markieren von Daten als lokal oder gemeinsam genutzt ein, basierend zumindest teilweise darauf, ob die Daten von einem einzelnen Thread oder mehreren Threads wiederverwendet werden. In mindestens einer Ausführungsform ermöglicht die Kennzeichnung von Daten als lokal oder gemeinsam genutzt die Zuweisung von gemeinsam genutztem Speicher und/oder Registern während der Codeerzeugung, um redundante Zugriffe auf den globalen Speicher zu vermeiden.
In mindestens einer Ausführungsform kann das oben besprochene Diagramm der Restaddition + Schichtnormalisierung für BERT nach der Analyse des Einplanens und der Wiederverwendung in Bezug auf den nachstehenden Pseudocode beschrieben werden, um die Analyse des Einplanens und der Wiederverwendung zu veranschaulichen:
ten_74 = ten_73 + input_82; // Schritt 0 Prolog ten_75 = ten_74 + ten_19; //Schritt 0 Prolog ten_76 = mean (ten_75, std::vector<int>{1}); // Schritt 0 Reduzierung ten_77 = ten_75 - ten_76; // Schritt 1 Prolog, ten_75 wiederverwendet aus Prolog 0 ten_78 = ten_77 * ten_77; // Schritt 1 Prolog ten_79 = mean (ten_78, std::vector<int>{1});// Schritt 1 Reduktion ten_80 = ten_79 + input_84; // Schritt 1 Epilog ten_81 = sqrt (ten_80); // Schritt 1 Epilog ten_82 = static_cast<float>(1) / ten_81; // Schritt 1 Epilog ten_83 = ten_82 * input_72; // Schritt 1 Epilog ten_84 = ten_75 * ten_83; // Schritt 1 Epilog, ten_75 wiederverwendet aus Prolog 0 ten_85 = ten_76 * ten_83; //Schritt 1 Epilog, ten_76 wiederverwendet ab Schritt 0 ten_86 = input_112 - ten_85; // Schritt 1 Epilog ten_87 = ten_84 + ten_86; // Schritt 1 Epilog
In mindestens einer Ausführungsform des obigen Pseudocodes wird ten_75, das im Prolog von Schritt 0 berechnet wurde, im Prolog und Epilog von Schritt 1 verwendet. In mindestens einer Ausführungsform werden seine Neuberechnung und die damit verbundenen redundanten Lesevorgänge aus dem globalen Speicher vermieden, indem sie in einem Array zwischengespeichert werden.
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 den Code 106, der zumindest teilweise auf dem Plan 112 basiert. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 den Code 106 zumindest teilweise basierend auf dem Plan 112 und der modifizierten Darstellung des Computerprogramms 108. In mindestens einer Ausführungsform erzeugt ein Codegenerator 116 des DL-Compilers 102 den Code 106. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 Koordinaten für Tensoren, die in der modifizierten Darstellung des Computerprogramms 108 verwendet werden. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 logische Koordinaten (z. B. Indizes von Elementen in Tensoren) für Eingabe- und Ausgabe-Tensoren. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 physische Koordinaten (z. B. Thread-Zuweisungen für Elemente von Tensoren) für Eingabe- und Ausgabe-Tensoren. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 physische Koordinaten, die zumindest teilweise auf erzeugten logischen Koordinaten basieren. In mindestens einer Ausführungsform erzeugt der Codegenerator 116 logische und/oder physische Koordinaten. In mindestens einer Ausführungsform erzeugt eine andere Komponente des DL-Compilers 102 anstelle des Codegenerators 116 oder zusätzlich zu diesem mindestens einen Aspekt der logischen und/oder physischen Koordinaten.
In mindestens einer Ausführungsform führt der DL-Compiler 102 die Koordinatenerzeugung vor der Erzeugung des Codes 106 durch. In mindestens einer Ausführungsform verknüpft die Koordinatenerzeugung die Codeerzeugung für verschiedene Schritte in Plan 112 (z. B. wird ein Kernel, der Knoten aus verschiedenen Schritten einschließt, zumindest teilweise basierend auf den erzeugten Koordinaten erzeugt). In mindestens einer Ausführungsform schließt die Erzeugung von logischen Koordinaten die Weitergabe von logischen Koordinaten durch das Diagramm ein. In mindestens einer Ausführungsform, wenn mehrere Operationen in einen einzigen Kern fusioniert werden, stellt die Codeerzeugung (z. B. durch den Codegenerator 116) sicher, dass für jede Operation die richtigen Koordinaten verwendet werden. In mindestens einer Ausführungsform wird das Kombinieren von Operationen als fusionierte Operationen und/oder fusionierte Operationen als fusionierte Operationen bezeichnet. In mindestens einer Ausführungsform stellt der Codegenerator 116 sicher, dass für jede Operation korrekte Koordinaten verwendet werden, basierend zumindest teilweise auf einer symbolischen Fortpflanzung von Koordinaten durch ein Diagramm (z. B. eine modifizierte Darstellung des Computerprogramms 108). In mindestens einer Ausführungsform verwendet der Codegenerator 116 einen Satz von Regeln, um die Koordinaten der Eingabe-Tensoren aus den Koordinaten des Ausgabe-Tensors zu berechnen. Zum Beispiel werden zum Beispiel in mindestens einer Ausführungsform die Koordinaten des Eingabetensors T1 einer Transponierungsoperation aus den Koordinaten des Ausgabetensors T2 berechnet, wobei T2 = transponiert (T1, perm) ist, wie im folgenden Pseudocode beschrieben:
für i = 0 bis T2.crds.size() crds[perm[i]] = T2.crds[i]; // Koordinaten permutieren T1.crds = T1.crds U crds; // Vereinigung
In mindestens einer Ausführungsform, bezogen auf die Operation Transposition und den obigen Pseudocode, ist perm ein Array, das die Permutation der Achsen für die Operation Transposition enthält. In mindestens einer Ausführungsform verwendet der Codegenerator 116 einen Satz von Regeln, um Koordinaten zu erzeugen, wobei bestimmte Regeln im Regelsatz bestimmten Operationstypen entsprechen, so dass der Codegenerator 116 bei der Weitergabe von Koordinaten durch das Diagramm Regeln verwendet, die jedem bestimmten Knotenoperationstyp zugeordnet sind.
In mindestens einer Ausführungsform werden die Regeln zum Berechnen der Koordinaten des Eingabetensors aus den Koordinaten des Ausgabetensors auf das Diagramm angewendet, beginnend bei den Ausgängen, und führen eine Rückwärtspropagation entlang des Diagramms durch. In mindestens einer Ausführungsform werden die Koordinaten für jeden der Ausgangstensoren mit eindeutigen Symbolen initialisiert. In mindestens einer Ausführungsform werden zum Beispiel die Koordinaten eines 3-dimensionalen Tensors auf (i1, i2, i3) gesetzt, wobei i1, i2, i3 eindeutige Symbole sind. In mindestens einer Ausführungsform, wenn die Propagierung eine Reduktionsoperation erreicht (z. B, y[n1, n2, n3, ..., 1, 1, 1...] = reduce(x[n1, n2, n3, ..., r1, r2, r3,...])), werden die Koordinaten nicht direkt von der Ausgabe zur Eingabe propagiert, weil der Koordinatenraum der Eingabe (n1, n2, n3, ..., r1, r2, r3, ...) größer ist als der der Ausgabe (n1, n2, n3,...). In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 (z. B. mit Hilfe des Codegenerators 116) für die Reduktionsoperationen neue Symbole zur Darstellung der Koordinaten dieser Achsen (r1, r2, r3, ...) und setzt den Propagierungsalgorithmus fort. In mindestens einer Ausführungsform bezieht sich die Operation ‚reduce‘ bei der Reduktionsoperation y[n1, n2, n3, ..., 1, 1, 1...] = reduce(x[n1, n2, n3, ..., r1, r2, r3, ...])) allgemein auf eine Reduktionsoperation (z. B. Mittelwert, Summe, Produkt, min, max).
In mindestens einer Ausführungsform führt der DL-Compiler 102 (z. B. unter Verwendung des Codegenerators 116) die Abbildung von logischen auf physische Koordinaten durch, die zumindest teilweise auf den propagierten logischen Koordinaten basiert. In mindestens einer Ausführungsform werden die Koordinaten i1, i2, ... in einem Tensorzugriff t[i1, i2, ...] auf physische Koordinaten (z. B. Threads) abgebildet. In mindestens einer Ausführungsform wird die Abbildung von logischen auf physische Koordinaten zumindest teilweise basierend auf einer Funktion eines Thread-Index (z. B. threadldx.x), eines Thread-Block-Index (z. B. blockldx.x) und eines Schleifen-Index J durchgeführt. In mindestens einer Ausführungsform entspricht der Schleifen-Index einer Schleife zum Berechnen von Prolog-, Epilog- oder Restoperationen. In mindestens einer Ausführungsform, zum Beispiel, wenn die Eingabegröße einer Reduktion N beträgt und T Threads an der Reduktion arbeiten, erzeugt DL Compiler 102 eine Prologschleife mit (N + T - 1) Iterationen. In mindestens einer Ausführungsform gilt Ähnliches: Wenn die Größe eines Epilog-Ergebnisses M ist und T Threads an seiner Berechnung arbeiten, laufen Epilog-Schleifen für (M + T - 1) Iterationen.
In mindestens einer Ausführungsform identifiziert die logisch/physische Karte, welcher Thread jedes bestimmte Element in jeder Iteration berechnet. In mindestens einer Ausführungsform führt der DL-Compiler 102 die logische auf die physische Karte durch, indem er mit der Zuordnung von Koordinaten für Reduktionsoperationen beginnt. In mindestens einer Ausführungsform definiert der DL-Compiler 102 eine zweidimensionale physische Koordinate (X, Y), wobei die erste Koordinate X eine Reduktion identifiziert und die zweite Koordinate Y ein Element innerhalb einer Reduktion identifiziert. In mindestens einer Ausführungsform ist die zweidimensionale physische Koordinate für die Blockreduktion definiert als (X, Y) = (blockldx.x, threadldx.x + J), wobei J der Schleifenindex ist.
In mindestens einer Ausführungsform wird für die Reduktionsoperation y[n1, n2, n3, ..., 1, 1, 1...] = reduce(x[n1, n2, n3, ..., r1, r2, r3,...])), ordnet DL Compiler 102 die erste Koordinate der physikalischen Koordinate X den Achsen ohne Reduktion (n1, n2, n3, ...) zu und ordnet die zweite Koordinate Y der physikalischen Koordinate den Achsen mit Reduktion (r1, r2, r3, ...) zu. In mindestens einer Ausführungsform haben alle Operationen, die mit Reduktionen verbunden sind, physikalische Koordinaten, sobald diese Koordinaten zugewiesen sind. In mindestens einer Ausführungsform wird eine eindimensionale Koordinate (X oder Y) mittels Division und Modulo-Operationen auf n-dimensionale Koordinaten ((n1, n2, ...) oder (r1, r2, ...)) abgebildet.
In mindestens einer Ausführungsform werden bei Restoperationen an dieser Stelle keine Koordinaten abgebildet, da sie nicht mit Reduktionen verbunden sind. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 Koordinaten für Restoperationen, indem er die zweidimensionale physikalische Koordinate (X, Y) linearisiert und die linearisierte Koordinate auf die Achsen (i1, i2, i3, ...) der Restoperationen abbildet. In mindestens einer Ausführungsform ist die linearisierte Koordinate für die Blockverkleinerung zum Beispiel blockldx.x * blockDim.x + threadldx.x + J.
In mindestens einer Ausführungsform erzeugt der Codegenerator 116 den Code 106 zumindest teilweise auf der Grundlage der modifizierten Darstellung des Computerprogramms 108 und des Plans 112. In mindestens einer Ausführungsform iteriert der Codegenerator 116 durch verschiedene Schritte im Plan 112 und erzeugt Code für jeden dieser Schritte. In mindestens einer Ausführungsform erzeugt der Codegenerator 116 bei der Erzeugung des Codes für jede Operation einen Code zum Berechnen der physischen Koordinaten jedes Tensors (z. B. aus der Koordinatenerzeugung). In mindestens einer Ausführungsform verwendet der Codegenerator 116 eine Funktion (z. B. mit der Bezeichnung gen_code), die den Code für eine Operation im Diagramm (z. B. die modifizierte Darstellung des Computerprogramms 108) für einen bestimmten Koordinatensatz erzeugt, indem er das Diagramm in Rückwärtsrichtung durchläuft.
In mindestens einer Ausführungsform erzeugt der Codegenerator 116 für jeden Schritt eine Schleife für den Prolog. In mindestens einer Ausführungsform berechnet die Schleife die Eingaben für die Reduktion und führt auch eine teilweise registerinterne Reduktion durch. In mindestens einer Ausführungsform verwendet der Codegenerator 116 eine weitere Schleife, um die Ergebnisse der Epilog- und Restoperationen zu berechnen und in ein Diagramm zu schreiben.
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 den Code 106, der zumindest teilweise auf dem Plan 112 basiert. In mindestens einer Ausführungsform werden ein oder mehrere Aspekte der Codeerzeugung (z. B. durch den Codegenerator 116 des DL-Compilers 102) durch einen oder mehrere Aspekte des folgenden Pseudocodes beschrieben:
Für jede Operation, die über Schritte hinweg wiederverwendet wird Zuweisung von gemeinsamem Speicher/Register-Array zum Zwischenspeichern von Werten zwischen den Verwendungen End for
Für jeden Schritt s im Plan Startschleife erzeugen, um die Eingabe für die Reduktion zu lesen bc = gen_coordinates (non_red_index, {baxes}) // Koordinaten für nicht reduzierte Achsen rc = gen_coordinates (red_index, {raxes}) // Koordinaten für die Reduktionsachsen Für jede Reduktion r im Schritt s gen_code (r, {bc, rc}) // Dies erzeugt den Code zum Berechnen der Eingabe für die Reduktion End for Endschleife erzeugen Code erzeugen, um die Reduktion durchzuführen Erzeugt das Schreiben der Reduktion in die Ausgabe End for Startschleife erzeugen, um Epilog/Restoperationen zu berechnen Für jede Ausgabe o im Epilog gen_code (o, {bc, rc}) // Dies erzeugt Code für Epilog Operationen End for Linearisieren von non_red_index und red_index zu einem linearen Index, i c = gen_coordinates (i, {Achsen}) Für rop in residual_ops gen_code (rop, c); End For Endschleife erzeugen
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 den Code 106 (z. B. unter Verwendung des Codegenerators 116), der zumindest teilweise auf den erzeugten Koordinaten für Tensoren von zwei oder mehr abhängigen Operationen in der modifizierten Darstellung des Computerprogramms 108 basiert, wobei zwei oder mehr abhängige Operationen in den Code 106 kombiniert werden (z. B. in einen einzigen Softwarekern). In mindestens einer Ausführungsform kombiniert der DL-Compiler 102 eine oder mehrere andere Operationen (z. B. elementweise Operationen, Kopieroperationen und/oder zusätzliche Reduktionsoperationen) mit zwei oder mehreren abhängigen Reduktionsoperationen im Code 106 (z. B. in einem einzigen Software-Kernel).
In mindestens einer Ausführungsform wählt der DL-Compiler 102 einen Reduktionsalgorithmus (z. B. zur Erzielung einer hohen Speichereffizienz und/oder einer hohen Insasse) basierend auf einem oder mehreren Graden von Reduktionsachsen, Dimensionen von Nicht-Reduktionsachsen und/oder einem vorgegebenen maximalen Insassengrad aus. In mindestens einer Ausführungsform wählt der DL-Compiler 102 (z. B. unter Verwendung des Codegenerators 116) einen Warp-Reduktionsalgorithmus, einen Block-Reduktionsalgorithmus, einen Kachel-Reduktionsalgorithmus oder einen Split-K-Reduktionsalgorithmus aus. In mindestens einer Ausführungsform bezieht sich ein Warp auf eine Sammlung oder Gruppe von Threads. In mindestens einer Ausführungsform schließt ein Warp eine vordefinierte Anzahl von Threads ein (z. B. 32 Threads oder jede andere geeignete Anzahl von Threads, die von einer bestimmten PPU- oder GPU-Hardwarearchitektur gehalten wird).
In mindestens einer Ausführungsform wird bei einem Warp-Reduktionsalgorithmus jede Reduktion von einem Warp durchgeführt, und der Codegenerator 116 erzeugt so viele Warps wie Reduktionen vorhanden sind. In mindestens einer Ausführungsform, zum Beispiel, für eine Summenreduktion X[1, b, 1, d] = sum(Y[a, b, c, d], Achsen = {0, 2}), die die Achsen {0, 2} reduziert, reduziert jeder Warp a*c Elemente und die Gesamtzahl der Warps ist b*d. In mindestens einer Ausführungsform wählt der Codegenerator 116 einen Warp-Reduktionsalgorithmus aus, wenn die Größe der einzelnen Reduktion klein genug ist, um von einem einzigen Thread durchgeführt zu werden, und es genügend unabhängige Reduktionen gibt, um eine vollständige Insasse zu erreichen.
In mindestens einer Ausführungsform wird beim Blockreduktionsalgorithmus jede Reduktion von einem Thread-Block durchgeführt, und der Codegenerator 116 erzeugt so viele Thread-Blöcke wie Reduktionen vorhanden sind. In mindestens einer Ausführungsform, bei der Blockreduzierung für das oben beschriebene Beispiel der Summenreduzierung, reduziert ein Thread-Block a*c Elemente und die Gesamtzahl der Thread-Blöcke ist b*d. In mindestens einer Ausführungsform wählt der Codegenerator 116 den Blockreduzierungsalgorithmus aus, wenn genügend unabhängige Reduzierungen vorhanden sind, um eine vollständige Insasse zu erreichen.
In mindestens einer Ausführungsform führt jeder Thread-Block bei der gekachelten Reduktion mehrere Reduktionen durch, um eine Zusammenführung zu erreichen (z. B. wenn die Reduktionsachsen im Speicher nicht zusammenhängend sind). In mindestens einer Ausführungsform erzeugt der Codegenerator 116 eine gekachelte Reduktion, wenn die Reduktionsachsen im Speicher nicht zusammenhängend sind. In mindestens einer Ausführungsform teilt der Codegenerator 116 bei der Split-k-Reduktion eine Reduktion auf mehrere Thread-Blöcke auf, wenn die Anzahl der unabhängigen Reduktionen nicht hoch genug ist, um eine vollständige Insasse zu erreichen. In mindestens einer Ausführungsform wählt der Codegenerator 116 die Split-k-Reduktion aus, wenn die Anzahl der unabhängigen Reduktionen nicht hoch genug ist, um eine vollständige Belegung zu erreichen.
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 (z. B. unter Verwendung des Codegenerators 116) den Code 106 zumindest teilweise basierend auf einem ausgewählten Reduktionsalgorithmus. In mindestens einer Ausführungsform berechnet der DL-Compiler 102 (z. B. unter Verwendung des Codegenerators 116) die Gitter- und Blockdimensionen für den Kernel-Start basierend zumindest teilweise auf dem ausgewählten Algorithmus (z. B. Warp-Reduktion, Block-Reduktion, Kachel-Reduktion, Split-k-Reduktion oder einem anderen geeigneten Algorithmus) und den Dimensionen der Reduktionsoperationen. In mindestens einer Ausführungsform ist der Reduktionsalgorithmus vorgegeben und/oder der DL-Compiler 102 wählt den Reduktionsalgorithmus nicht aus.
In mindestens einer Ausführungsform werden während der Codeerzeugung (z. B. durch den Codegenerator 116) Operanden, die als wiederverwendbar identifiziert wurden, zumindest teilweise basierend auf dem Ergebnis der Wiederverwendungsanalyse in Registern oder im gemeinsamen Speicher gespeichert. In mindestens einer Ausführungsform wird bei der Verwendung eines Operanden, der bereits berechnet oder verwendet wurde, der im Cache gespeicherte Wert wiederverwendet, anstatt ihn neu zu berechnen.
In mindestens einer Ausführungsform kann ein erzeugter Kernel für ein Restaddition + Schichtnormalisiertungs-Diagramm (z. B. das oben beschriebene Restaddition + Schichtnormalisiertungs-Diagramm für BERT) bezogen auf Codeschnipsel aus dem erzeugten Kernel in Pseudocode unten beschrieben werden:
extern "C"_global_ void_myl_bb0_2_AddAddMeaSubMulMeaAddSqrDivMulMulMulSubAdd( half* _v1, half* _v2, half* _v3, half* _v4, half* _v5, half* _v6, half* _v7) { _shared_half_v8[1]; _shared_half_v9[1]; half_v10[8]; void*_v11[10]; _v11[0] = _v1; _v11[1] = _v2; _v11[2] = _v3; _v11[3] = _v4; _v11[4] = _v5; _v11[5] = _v6; _v11[6] = _v7; _v11[7] = _v8; _v11[8] = _v9; _v11[9] = _v10; block_reduce<1>(_v11); // Blockverkleinerung entsprechend dem ersten Mittelwert _syncthreads(); block_reduce<2>(_v11); // Blockverkleinerung entsprechend dem zweiten Mittelwert }
In mindestens einer Ausführungsform, bezogen auf den obigen Pseudocode, erzeugt der Codegenerator 116 einen Kernel mit 7 Eingabe/Ausgabe-Argumenten. In mindestens einer Ausführungsform entsprechen diese Argumente den Tensoren im Diagramm der Eingabe. In mindestens einer Ausführungsform schließt der Kernel selbst zwei Aufrufe zur Blockreduktion ein, um zwei Mittelwertoperationen im Diagramm durchzuführen, wobei die Implementierung von block_reduce der Einfachheit und Klarheit halber nicht gezeigt wird.
In mindestens einer Ausführungsform erzeugt der Codegenerator 116 auch Vorrichtungsfunktionen, die dem Prolog und dem Epilog der Schritte in Plan 112 entsprechen. In mindestens einer Ausführungsform erzeugt der Codegenerator 116 in Bezug auf das Diagramm der Restaddition + Schichtnormalisierung (z. B. das oben beschriebene Diagramm der Restaddition + Schichtnormalisierung für BERT) 4 Vorrichtungsfunktionen, die dem Prolog und Epilog von Schritt 0 und Schritt 1 entsprechen. In mindestens einer Ausführungsform werden diese Vorrichtung-Funktionen von der Funktion block_reduce aufgerufen. In mindestens einer Ausführungsform können die erzeugten Vorrichtungsfunktionen bezogen auf die Ausschnitte der erzeugten Vorrichtungsfunktion, die dem Prolog 0 entsprechen, im folgenden Pseudocode beschrieben werden:
_device_vtype<half,8,16> prolog0 (void **live_inouts, int index){ // Lasten vektorisiert um 8 vtype<half,8,16> _v24; if (true && (_v23 < 128) && (_v22 < 128)) { _v24 = _v12[0 + (_v23 * 1) + (_v22 * 128)]; } vtype<half,8,16> _v25; if (true && (_v23 < 128)) { _v25 = _v13[0 + (_v23 * 1)]; } // Arithmetik der Vektortypen vtype<half,8,16> _v28; _v28.values[0] = _v26.values[0] + _v27.values[0]; ... _v28.values[7] = _v26.values[7] + _v27.values[7]; // Für spätere Verwendung im Register speichern _v21 [(index - threadldx.x) / 128] = _v28; return _v28; }
In mindestens einer Ausführungsform, bezogen auf den obigen Pseudocode, werden Ladungen aus dem globalen Speicher um 8 vektorisiert. In mindestens einer Ausführungsform stellt vtype<half,8,16> einen Vektor-Datentyp mit 8 Elementen vom Typ Gleitkomma mit halber Genauigkeit und einer Speicherausrichtung von 16 dar. In mindestens einer Ausführungsform wird der Wert von ten_75 im Diagramm (z. B. das oben besprochene Restadditions- + Schichtnormalisierungsdiagramm für BERT) in Registern zur späteren Wiederverwendung durch die Anweisung _v21 [(index - threadldx.x) / 128] = _v28 zwischengespeichert.
In mindestens einer Ausführungsform speichert der Epilog für Schritt 0 (z. B. aus dem oben besprochenen Plan 112 für die Restaddition + das Diagramm zur Schichtnormalisierung für BERT) das Ergebnis der Reduktion im gemeinsamen Speicher, wie im folgenden Pseudocode gezeigt:
_device_ void epilog0 (void **live_inouts, int index, half val){ // Ergebnis im gemeinsamen Speicher speichern _v37[0] = val; }
In mindestens einer Ausführungsform berechnet der Prolog für Schritt 1 (z. B. aus dem oben besprochenen Plan 112 für die Restaddition + Schichtnormalisierung für BERT) die Eingabe für den zweiten Mittelwert, und der Wert von ten_75 wird aus dem Register Array gelesen, anstatt in den globalen Speicher zu gehen (z. B. wie im Pseudocode unten gezeigt):
_device_vtype<half,8,16> prolog1 (void **live_inouts, int index){ vtype<half,8,16> _v53; //_v50 zeigt auf ein Array und _v49 auf eine gemeinsame Position im Speicher _v53.values[0] = _v21 [(index - threadldx.x) / 128].values[0] -_v37[0]; ... _v53.values[7] = _v21 [(index - threadldx.x) / 128].values[7] -_v37[0]) ... return_v54; }
In mindestens einer Ausführungsform berechnet der Epilog für Schritt 1 (z. B. aus dem oben besprochenen Plan 112 für das Diagramm Restaddition + Schichtnormalisierung für BERT) in ähnlicher Weise das Endergebnis und schreibt das Endergebnis in den globalen Speicher (z. B. wie im Pseudocode unten gezeigt):
template<>_device_void epilog1(void **live_inouts, int index, half val){ vtype<half,8,16> _v78; _v78.values[0] =_v63[0] * v75.values[0]; ... _v78.values[7] = _v63[0] * _v75.values[7]; vtype<half,8,16> _v80; _v80.values[0] = _v76.values[0] + _v79.values[0]; ... _v80.values[7] = _v76.values[7] + _v79.values[7]; // Vektorisiertes Schreiben in den globalen Speicher if (true && (_v68 < 128) && (_v67 < 128)) { _v61[0 + (_v68*1) + (_v67 * 128)] = _v80; } }
In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 vektorisierten Code für eine oder mehrere Anweisungen des Codes 106. In mindestens einer Ausführungsform führt der Codegenerator 116 die Vektorisierung während der Erzeugung des Codes 106 durch. In mindestens einer Ausführungsform ist die Vektorisierung von globalen Speicherzugriffen eine Optimierung, die eine Leistungsverbesserung bereitstellt, insbesondere für Kernel mit begrenzter Bandbreite. In mindestens einer Ausführungsform erzeugt der Codegenerator 116 vektorisierten Code für ein fusioniertes Deep Learning Diagramm mit Reduktionen, arithmetischen Operationen (z. B. elementweisen Operationen) und Speicheroperationen. In mindestens einer Ausführungsform berechnet der Codegenerator 116 eine Vektorbreite (z. B. die Anzahl der Single Instruction Multiple Data (Simd) Lanes), die zumindest teilweise auf der Speichereffizienz und/oder der Insasse basiert, und erzeugt einen vektorisierten Code für ein fusioniertes Diagramm. In mindestens einer Ausführungsform erfolgen die globalen Speicherzugriffe im Kernel in Prolog-, Epilog- und/oder Restoperationen im Diagramm. In mindestens einer Ausführungsform wird, wenn das Diagramm einen leeren Prolog oder Epilog aufweist, die Eingabe und Ausgabe der Reduktionsoperation gelesen und in den globalen Speicher geschrieben.
In mindestens einer Ausführungsform erzeugt der Codegenerator 116 vektorisierten Code basierend auf dem Berechnen einer Vektorbreite für einen bestimmten Kernel und dem Auswählen einer Vektorisierungsachse für jeden Tensor, in mindestens einer Ausführungsform auf dem Speicherlayout, der Ausrichtung, dem Padding und/oder anderen Parametern. In mindestens einer Ausführungsform prüft der Codegenerator 116 die Vektorisierbarkeit jedes Tensorspeicherzugriffs, indem er eine Rückwärtsanalyse des Diagramms durchführt, die bei jedem der Diagrammausgänge beginnt. In mindestens einer Ausführungsform schließt die Analyse des rückwärtsgerichteten Diagramms das Abbilden der Achsen des Eingabe-Tensors auf die Achsen des Ausgabe-Tensors ein. In mindestens einer Ausführungsform kann das Erzeugen von vektorisiertem Code ferner in Bezug auf eine beispielhafte Operation, X[2, 1024, 3, 4] = reshape (Y[2, 2, 512, 3, 4]), diskutiert werden. In mindestens einer Ausführungsform bildet der Codegenerator 116 bei der Analyse der Vektorisierbarkeit der Achse 2 (z. B. der Länge 512) in Y diese auf die Achse 1 (z. B. der Länge 1024) in X ab. In mindestens einer Ausführungsform markiert der Codegenerator 116 das Diagramm (z. B. die DAG) als nicht vektorisierbar, wenn der Codegenerator 116 feststellt, dass Operationen und/oder Speicherabbildungen nicht vektorisierbar sind. In mindestens einer Ausführungsform berechnet der Codegenerator 116 Informationen (z. B. zu vektorisierende Tensorzugriffe, vektorisierte Achsen, Vektorbreite), die während der Codegenerierung (z. B. von Code 106) verwendet werden, um vektorisierten Code (z. B. vektorisierten CUDA-Code) zu erzeugen. In mindestens einer Ausführungsform kann die Vektorisierung (z. B. durch den Codegenerator 116) ferner in Bezug auf den folgenden Pseudocode beschrieben werden:
In mindestens einer Ausführungsform für den obigen Pseudocode sind die Eingaben in den Schichtnormalisierungskern ten_73, input_82, ten_19, input_84, input_72 und input_112. In mindestens einer Ausführungsform ist die einzige Ausgabe des Kernels ten_87. In mindestens einer Ausführungsform sind die Dimensionen der Eingabe/Ausgabe-Tensoren wie im Pseudocode gezeigt. In mindestens einer Ausführungsform werden nach dem Aufbringen der Vektorisierung alle Speicherzugriffe mit Ausnahme von input_84 mit 8 vektorisiert. In mindestens einer Ausführungsform weist input_84 nur ein Element auf und wird daher übertragen.
In mindestens einer Ausführungsform erzeugt der Deep Learning Compiler 102, auch wenn er als Compiler bezeichnet wird, den Code 106 (z. B. mit dem Codegenerator 116), aber er erzeugt keinen Laufzeitcode, der ausreicht, um ein Computerprogramm auszuführen, das der Darstellung eines Computerprogramms 104 entspricht. In mindestens einer Ausführungsform wird die Darstellung eines Computerprogramms 104 von einem Deep Learning Framework (z. B. TensorFlow oder PyTorch) erzeugt. In mindestens einer Ausführungsform handelt es sich bei der Darstellung des Computerprogramms 104 um ein Diagramm. In mindestens einer Ausführungsform arbeiten der Rewriter 110, der Scheduler 114 und/oder der Codegenerator 116 über eine gemeinsame API. In mindestens einer Ausführungsform erzeugt ein Compiler und/oder Interpreter 118 Laufzeitcode 120, der zumindest teilweise auf dem Code 106 basiert. In mindestens einer Ausführungsform erzeugt der Compiler/Interpreter 118 den Laufzeitcode 120 zumindest teilweise basierend auf anderen Eingaben 122 (z. B. Abschnitte eines Computerprogramms, die nicht durch ein Diagramm eines neuronalen Netzes dargestellt werden), zusätzlich zum Code 106. In mindestens einer Ausführungsform erzeugt DL-Compiler 102 Laufzeitcode 120 (z. B. durch Integration von Compiler/Interpreter 118 in DL-Compiler 102). In mindestens einer Ausführungsform wird der Laufzeitcode 120 und/oder der Code 106 für die spätere Verwendung gespeichert (z. B. in einem Speicher und/oder einer dauerhaften Speichervorrichtung). In mindestens einer Ausführungsform wird der Laufzeitcode 120 und/oder der Code 106 kurz nach der Erzeugung verwendet (z. B. just in time für die Ausführung kompiliert). In mindestens einer Ausführungsform sind Rewriter 110, Scheduler 114, Codegenerator 116 und Compiler/Interpreter 118 (z. B. als Compiler) in einen vereinigten Compiler integriert, der die auf Rewriter 110, Scheduler 114, Codegenerator 116 und Compiler/Interpreter 118 bezogenen Operationen durchführt, um Laufzeitcode 120 zu einem Kompilierzeitpunkt zu erzeugen. In mindestens einer Ausführungsform ist der kombinierte Compiler über eine API zugänglich.
In mindestens einer Ausführungsform handelt es sich bei der Darstellung eines Computerprogramms 104 um strukturierte Daten (z. B. Daten gemäß einem vorgegebenen Format und/oder einer vorgegebenen Syntax), die ein vollständiges Computerprogramm darstellen. In mindestens einer Ausführungsform handelt es sich bei der Darstellung eines Computerprogramms 104 um strukturierte Daten, die einen Abschnitt eines Computerprogramms und nicht ein ganzes Computerprogramm darstellen, wobei die Darstellung einen gerichteten azyklischen Graphen (DAG) definieren kann, um eine Verwendung von Tensordaten in einem Deep Learning neuronalen Netz anzuzeigen. In mindestens einer Ausführungsform stellt jeder Knoten des DAG eine Operation dar, die eine Tensor-Ausgabe erzeugt, und jede Kante stellt eine Tensor-Produzent-Verbraucher Relation dar. In mindestens einer Ausführungsform startet ein Client, der das System 100 verwendet (z. B. eine Anwendung, die das System 100 zum Kompilieren und/oder Ausführen eines Deep Learning neuronalen Netzes zum Trainieren und/oder Ableiten verwendet), Anweisungen in einem Software-Kernel, der zwei oder mehr abhängige Reduktionsoperationen kombiniert, die zumindest teilweise auf dem Code 106 basieren.
In mindestens einer Ausführungsform kann der DL-Compiler 102 vollautomatisch Operationen aus einer Vielzahl von DL-Schichten fusionieren (z. B. kombinieren), einschließlich beliebiger Kombinationen von Reduktionen, Matrix-Vektor-Multiplikationen, elementweisen Operationen und Speicheroperationen in einem einzigen Kernel (z. B. aus Code 106). In mindestens einer Ausführungsform ist der DL-Compiler 102 nicht durch die Struktur des Graphen begrenzt und kann beliebige Diagramme verarbeiten, was Leistungsvorteile gegenüber herkömmlichen Techniken bereitstellt, die eine auf bestimmten Mustern basierende Prolog- oder Epilog-Fusion durchführen und keine beliebigen Diagramme oder Diagramme mit abhängigen Reduktionsoperationen verarbeiten können. In mindestens einer Ausführungsform ermöglicht die Technik des DL-Compilers 102 die Optimierung und Erzeugung eines einzelnen Kerns für eine DAG mit Reduktionen, Matrix-Vektor-Multiplikationen, elementweisen Operationen und Speicheroperationen, was einen erheblichen Abschnitt aller Operationen in DL-Netzen abdeckt. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 einen einzigen Software-Kernel für ein ganzes Diagramm, wenn der Graph aus Operationen besteht, die eine oder mehrere Reduktionen, Matrix-Vektor-Multiplikationen, elementweise Operationen und Speicheroperationen einschließen. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 einen Code (z. B. Code 106), der Leistungsvorteile (z. B. eine verringerte Laufzeit) gegenüber herkömmlichen Techniken bereitstellt.
In mindestens einer Ausführungsform schließt das erste Diagramm 202 sechs Eingaben in1, in2, in3, in4, in5 und in6 ein, die von verschiedenen Knoten des ersten Diagramms 202 verwendet werden. In mindestens einer Ausführungsform schließt das erste Diagramm 202 einen Ausgang ein, der mit out bezeichnet ist. In mindestens einer Ausführungsform schließt das erste Diagramm 202 eine Operation (op) der Addition (add) 206, eine Operation (op) der Addition 208, eine Operation (op) des Mittelwerts 210, eine Operation (op) der Subtraktion (sub) 212, eine Operation (op) der Multiplikation (mul) 214, eine Operation (op) des Mittelwerts 216, eine Operation (op) der Addition 218 ein, ein Quadratwurzel-(sqrt)-Op 220 , ein Reziprok-(recip)-Op 224, ein Mul-Op 226, ein Mul-Op 228, ein Mul-Op 230, ein Sub-Op 232 und ein Add-Op 234, die, wie gezeigt, in Bezug auf einander und die Eingaben in1, in2, in3, in4, in5 und in6 angeordnet sind. In mindestens einer Ausführungsform sind die Operationen des ersten Diagramms 202 den Operationsnummern für das Einplanen wie folgt zugeordnet: add op 206 :1, add op 208: 2, mittelwert op 210: 3, sub op 212: 4, mul op 214: 4, mittelwert op 216: 5, add op 218: 6, sqrt op 220: 7, recip op 224: 8, mul op 226: 9, mul op 228: 10, mul op 230: 12, sub op 232: 13, add op 234: 14.
In mindestens einer Ausführungsform schließt das erste Diagramm 202 eine erste Partition 236, eine zweite Partition 238 und eine dritte Partition 240 ein. In mindestens einer Ausführungsform wird ein Plan für alle Operationen in einer Partition erzeugt. In mindestens einer Ausführungsform weist der Scheduler 114 von 1 den Partitionen Knoten zu (z. B. führt er eine Partitionierung des Diagramms durch). In mindestens einer Ausführungsform wird die Partitionierung des Diagramms von einer anderen Komponente des DL-Compilers 102 anstelle von oder zusätzlich zu Scheduler 114 durchgeführt. In mindestens einer Ausführungsform schließt das Erzeugen eines Plans das Ordnen von Reduktionsknoten in einem DAG (z. B. dem ersten Diagramm 202) basierend auf einer Abhängigkeit ein. In mindestens einer Ausführungsform werden zwei Reduktionen, die keine Abhängigkeit voneinander aufweisen, zu einer Gruppe zusammengefasst. In mindestens einer Ausführungsform werden dann die verbleibenden punktweisen und kopierenden Operationen als Prolog oder Epilog von Reduktionen markiert. In mindestens einer Ausführungsform geht die Planung davon aus, dass das Ergebnis der ersten Berechnung gespeichert und für die zweite Operation wiederverwendet wird. In mindestens einer Ausführungsform wird der Plan unter Verwendung einer Erweiterung der Listenplanung erstellt. In mindestens einer Ausführungsform wird ein Plan für das erste Diagramm 202 in Bezug auf den folgenden Pseudocode beschrieben:
- 1) REDUKTIONEN = {3}, PROLOG = {1, 2}
- 2) REDUKTIONEN = {6}, PROLOG = {4, 5}, EPILOG = {7, 8, 9, 10, 11, 12, 13, 14}
In mindestens einer Ausführungsform schließt das zweite Diagramm 204 sechs Eingaben in1, in2, in3, in4, in5 und in6 ein, die von verschiedenen Knoten des zweiten Diagramms 204 verwendet werden. In mindestens einer Ausführungsform schließt das zweite Diagramm 204 einen Ausgang ein, der mit out bezeichnet ist. In mindestens einer Ausführungsform schließt das zweite Diagramm 204 eine Add-Op 242, eine Add-Op 244, eine Mittelwert-Op 246, eine Mul-Op 248, eine durchschnittlichen Op 250, eine Mul-Op 252, eine Sub-Op 254, eine Add-Op 256, eine Sqrt-Op 258, eine Rezip-Op 260, eine Mul-Op 262, eine Mul-Op 264, eine Mul-Op 266, eine Sub-Op 268 und eine Add-Op 270 ein, die, wie gezeigt, aufeinander bezogen sind, sowie Eingaben in1, in2, in3, in4, in5 und in6. In mindestens einer Ausführungsform sind den Operationen des zweiten Diagramms 204 folgende Operationsnummern zum Einplanen zugeordnet: add op 242: 1, add op 244: 2, mittelwert op 246: 3, mul op 248: 4, mittelwert op 250: 5, mul op 252: 6, sub op 254: 7, add op 256: 8, sqrt op 258: 9, recip op 260: 10, mul op 262: 11, mul op 264: 12, mul op 266: 13, sub op 268: 14, add op 270: 15.
In mindestens einer Ausführungsform schließt das zweite Diagramm 204 eine erste Partition 272, eine zweite Partition 274 und eine dritte Partition 276 ein. In mindestens einer Ausführungsform wird ein Plan für alle Operationen in einer Partition erzeugt. In mindestens einer Ausführungsform schließt das Erzeugen eines Plans das Ordnen von Reduktionsknoten in einem DAG (z. B. dem zweiten Diagramm 204) basierend zumindest teilweise auf Abhängigkeit ein. In mindestens einer Ausführungsform werden zwei Reduktionen, die keine Abhängigkeit voneinander aufweisen, zu einer Gruppe zusammengefasst. In mindestens einer Ausführungsform werden dann die verbleibenden punktuellen und kopierenden Operationen als Prolog oder Epilog von Reduktionen markiert. In mindestens einer Ausführungsform geht die Planung davon aus, dass das Ergebnis der ersten Berechnung gespeichert und für die zweite Operation wiederverwendet wird. In mindestens einer Ausführungsform wird der Plan unter Verwendung einer Erweiterung der Listenplanung erstellt. In mindestens einer Ausführungsform wird ein Plan für das zweite Diagramm 204 in Bezug auf den folgenden Pseudocode beschrieben:
- 1) REDUKTIONEN = {3, 5}, PROLOG = {1, 2, 4}, EPILOG = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
In mindestens einer Ausführungsform impliziert der obige Pseudocode, dass die Reduktionsknoten 3 und 5 gleichzeitig ausgeführt werden und die übrigen Operationen ihren Prolog oder Epilog bilden.
In mindestens einer Ausführungsform werden vor dem Erzeugen von Code für fusionierte Operationen (z. B. mit dem Codegenerator 116 von 1 ) Operationen identifiziert, die explizit in Registern oder im gemeinsamen Speicher gespeichert werden sollen (z. B. mit dem DL-Compiler 102 von 1 ). In mindestens einer Ausführungsform könnte ein Thread, wenn ein Diagramm Reduktionen einschließt, mehrere Werte aus einem Eingabetensor lesen und sie so reduzieren, dass nur der letzte reduzierte Wert in einem Register vorhanden ist. In mindestens einer Ausführungsform kann dies ferner anhand eines Beispiels erläutert werden, bei dem die Länge einer Reduktionsachse 1024 beträgt und unter der Annahme einer Thread-Blockgröße von 256 jeder Thread 4 Werte aus dem globalen Speicher liest, eine Reihe von punktweisen Operationen durchführt und dann die gelesenen 4 Werte auf einen reduziert. In mindestens einer Ausführungsform wird eines der Zwischenergebnisse, wenn es von einer späteren Operation benötigt wird, explizit zwischengespeichert. In mindestens einer Ausführungsform wird zum Beispiel, bezogen auf das erste Diagramm 202, der Knoten 2 als Teil des Prologs des Reduktionsknotens 3 berechnet. In mindestens einer Ausführungsform wird das Ergebnis, da es von beiden Knoten 4 und 12 verwendet wird, in Registern gespeichert, um eine Neuberechnung und zusätzliche globale Speicherzugriffe zu vermeiden. In mindestens einer Ausführungsform wird diese Information aus dem Plan abgeleitet (z. B. aus dem Plan 112 in 1 ). In mindestens einer Ausführungsform wird das Ergebnis einer Reduktion im gemeinsamen Speicher zwischengespeichert, wenn es eine oder mehrere abhängige Operationen in derselben Partition gibt. In mindestens einer Ausführungsform, zum Beispiel bezogen auf das erste Diagramm 202, wird das Ergebnis des Reduktionsknotens 3 im gemeinsamen Speicher gespeichert, da es später von den Knoten 11 und 13 verwendet wird.
In mindestens einer Ausführungsform definiert der Codegenerator 116 von 1 einen gemeinsamen Speicher und Register. In mindestens einer Ausführungsform ermöglicht dies, dass Read_Input/Write_Output-Funktionen Zwischenergebnisse aus einem gemeinsam genutzten Speicher und/oder Registern anstelle eines globalen Speichers lesen/schreiben. In mindestens einer Ausführungsform wird der für das erste Diagramm 202 erzeugte Code (z. B. durch den DL-Compiler 102 von 1 zur Erzeugung des Codes 106 unter Verwendung des Codegenerators 116) in Bezug auf den folgenden Pseudocode beschrieben, wobei der Kern 6 Eingaben und eine Ausgabe einschließt:
1. _global_ void fused_kernel_1 (float* in1, float* in2, float* in3, float*in4, float* in5, float* in6, float* out) { 2. 3. float reg[VPT]; // VPT is number of values read per thread 4. _shared float shmem; 5. 6. void*inout_ptrs[9]; 7. inout_ptrs[0] = in1; 8. inout_ptrs[1] = in2; ... 9. inout_ptrs[7] = reg; 10. inout_ptrs[8] = &shmem; 11. 12. block_reduce<float, SumOp, 0, ...>(inout_ptrs); // Tld = 0 13. 14. _syncthreads(); 15. 16. block_reduce<float, SumOp, 1, ...>(inout_ptrs); // Tld = 1 17.}
In mindestens einer Ausführungsform schließt der Kern des obigen Pseudocodes ein Array von Registern ein, um das Ergebnis von Knoten 2 (add) zu speichern, und eine gemeinsame Variable shmem, um das Ergebnis von Knoten 3 (Durchschnitt) zu speichern. In mindestens einer Ausführungsform berechnet der block_reduce-Aufruf in Zeile 12 den Mittelwert und führt auch Operationen durch, die Teil des Prologs des Mittelwerts sind (z. B. die Knoten 1 und 2). In mindestens einer Ausführungsform speichert block_reduce auch das Ergebnis von Knoten 2 in reg und das Ergebnis von Knoten 3 in shmem. In mindestens einer Ausführungsform führt der Aufruf von block_reduce in Zeile 16 die übrigen Operationen im ersten Diagramm 202 von Knoten 4 bis 14 durch. In mindestens einer Ausführungsform bilden die Knoten 4 und 5 den Prolog der Reduktion und die Knoten 7-14 den Epilog der Reduktion. In mindestens einer Ausführungsform stellt das Fusionieren (Kombinieren) von Knoten des ersten Diagramms 202 in einen einzigen Kern mehrere Vorteile bereit, einschließlich eines geringeren Overheads beim Start des Kerns, der Vermeidung von Lese- und Schreibzugriffen auf den globalen Speicher, wenn das Ergebnis von Knoten 2 klein genug ist, um in Register zu passen, und der Möglichkeit, das Ergebnis von Reduktionen (Knoten 3 und 6) im gemeinsamen Speicher zu speichern, anstatt es in den globalen Speicher zu schreiben und von dort zurückzulesen.
In mindestens einer Ausführungsform ist der erzeugte Code für die Prolog-Funktion von block_reduce in Zeile 12 als Pseudocode unten gezeigt:
template<> _device_ float read_input<float, 0>(void **live_inouts, int index, int i){ // i ist die Aufrufnummer, die bei jedem Aufruf erhöht wird float* v1 = (float*)live_inouts[0]; // in1 float* v2 = (float*)live_inouts[1]; // in2 float* v3 = (float*)live_inouts[2]; // in3 float* reg = (float*)live_inouts[7]; // Array, um Werte zu speichern int v4 = ((blockldx.x)/1)%33; // Achse 1 Koordinate int v5 = ((blockldx.x)/33)%29; // Achse 2 Koordinate float v6 = v1[v12*157+v13*5181+index]; float v7 = v2[v12*157+v13*5181+index]; float v8 = v3[v12*157+v13*5181+index]; float v9 = v6 + v7; float v10 = v8 + v10; reg[i] = v10; return v10; }
In mindestens einer Ausführungsform, bezogen auf den obigen Pseudocode, speichert der Pseudocode zusätzlich zum Durchführen von zwei Additionen im Prolog auch das Ergebnis des Knotens 2 in den Registern „reg“. Die read_input-Funktion und die write-output-Funktionen für block_reduce in Zeile 16 rufen das Ergebnis des Knotens 2 von „reg“ ab.
In mindestens einer Ausführungsform wird der für das zweite Diagramm 204 erzeugte Code (z. B. durch den DL-Compiler 102 von 1 zur Erzeugung von Code 106 unter Verwendung des Codegenerators 116) bezogen auf den folgenden Pseudocode beschrieben:
1. _global_ void fused_kernel_2(float* in1, float* in2, float* in3, float* in4, float* in5, float* in6, float* out) { 2. 3. float reg[VPT]; 4. _shared_pair<float,float> shmem; 5. 6. void *inout_ptrs[9]; 7. inout_ptrs[0] = in1; 8. inout_ptrs[1] = in2; 9. .... 10. inout_ptrs[7] = reg; 11. inout_ptrs[8] = &shmem; 12. 13. block_reduce(inout_ptrs); 14.}
In mindestens einer Ausführungsform, bezogen auf den obigen Pseudocode, operiert block_reduce auf einem Paar von Float-Werten, um den Mittelwert der Knoten 3 und 5 zu berechnen. In mindestens einer Ausführungsform bietet das Kombinieren (Fusionieren) des zweiten Diagramms 204 und das Erzeugen von Code für einen einzigen Kern ähnliche Vorteile wie die, die in Bezug auf das erste Diagramm 202 erörtert wurden, und darüber hinaus können zwei Reduktionen (Knoten 3 und 5) ohne Abhängigkeit voneinander parallel berechnet werden, und es kann eine Reduktion des Typenpaars <T,T> anstelle von zwei getrennten Reduktionen des Typs T durchgeführt werden. In mindestens einer Ausführungsform erzeugt der DL-Compiler 102 von 1 Code in einem einzigen Kern sowohl für abhängige (z. B. das erste Diagramm 202) als auch für unabhängige Reduktionsoperationen (z. B. das zweite Diagramm 204). In mindestens einer Ausführungsform werden durch das Kombinieren von Operationen aus Eingabediagrammen, die zwei oder mehr abhängige Reduktionsoperationen (z. B. erstes Diagramm 202) einschließen, die Zugriffe auf den globalen Speicher reduziert und Leistungsverbesserungen im Vergleich zu herkömmlichen Ansätzen bereitgestellt.
In mindestens einer Ausführungsform gilt allgemein, dass bei einer Fusion von Knoten n1 und n2, wenn eine Kante n1 -> n2 im Diagramm der Eingabe existiert, wobei n1 eine Reduktionsoperation und n2 eine punktweise Operation ist, die Fusion für diese Knoten erlaubt ist. In mindestens einer Ausführungsform erlaubt dies die Fusion von punktweisen Operationen zu einem Epilog von Reduktionen. In mindestens einer Ausführungsform wird eine Blockreduktion verwendet (z. B. für das BERT-Modell). In mindestens einer Ausführungsform wird bei der Blockreduktion die Reduktion eines Stapels von einem einzigen kooperativen Thread Array (CTA) (z. B. einem Thread-Block) unter Verwendung eines gemeinsamen Speichers durchgeführt. In mindestens einer Ausführungsform wird eine Beispielimplementierung der Blockreduzierung durch den folgenden Pseudocode veranschaulicht:
template <typename T, typename TOp, unsigned Tld, unsigned TSz, unsigned TBlksz, unsigned TNouts> _device_ void block_reduce(void **live_inouts) { _shared_ T shmem[TBlksz]; int tid = threadldx.x; T val = TOp::identity(); for (int i = threadldx.x; i < TSz; i += TBIksz) { T current = read_input<Tld, T>(live_inouts, i); val = TOp::op(val, current); } shmem[tid] = val; #pragma unroll for (int i = TBlksz/2; i > 0; i »= 1) { syncthreads(); if (tid < i) { shmem[tid] = val = TOp::op(val, shmem[tid + i]); } } _syncthreads(); for (int i = 0; i < TNouts; i += TBIksz) { write_output<ID, T>(live_inouts, shmem[0]); } }
In mindestens einer Ausführungsform, bezogen auf den obigen Pseudocode, sind die Schablonenparameter für die Funktion der Datentyp T, die Reduktionsoperation Top (sum, prod, min, max, ...), ein eindeutiger Identifikator Tld, die Gesamtgröße der Reduktionsachsen TSz, die Anzahl der Threads pro Block TBlksy und die Anzahl der Ausgabeelemente TNouts. In mindestens einer Ausführungsform werden die Funktionen read_input und write_output vom DL-Compiler 102 von 1 erzeugt und schließen das Lesen/Schreiben von Eingabe/Ausgabe-Tensoren und fusionierte punktuelle Operationen ein. In mindestens einer Ausführungsform erlaubt die Blockreduktion eine beliebige Anzahl von Threads und Ausgabeproben, was eine allgemeine Epilog-Fusion ermöglicht. In mindestens einer Ausführungsform wird bei einer Reduktion ohne Epilog-Fusion TNouts auf eins gesetzt, was bedeutet, dass ein Thread (z. B. mit tid=0) das Ergebnis in den globalen Speicher schreibt. In mindestens einer Ausführungsform, wenn eine punktuelle Operation der Größe Tsz (z. B. dieselbe Größe wie die Eingabe der Reduktion) mit dem Epilog fusioniert wird, ist TNouts = Tsz, und alle Threads nehmen an der Berechnung des Epilogs teil.
In mindestens einer Ausführungsform startet der Host 302 Operationen und/oder Anweisungen, die auf der Vorrichtung 304 durchgeführt werden sollen (z. B. durch das Starten von Rahmenanweisungen für die parallele Verarbeitung, wie Compute Unified Device Architecture (CUDA)-Kernel). In mindestens einer Ausführungsform startet ein Executor (aus Gründen der Übersichtlichkeit nicht gezeigt), der auf dem Host 302 läuft, Anweisungen, die kombinierte Operationen einschließen (z. B. als Software-Kernel wie Code 106 oder Laufzeitcode 120 von 1 ). In mindestens einer Ausführungsform läuft der Executor auf einer CPU (z. B. Prozessor 306) und startet Anweisungen (z. B. als Kernel) auf einer parallelen Verarbeitungseinheit (z. B. einer GPU). In mindestens einer Ausführungsform ist der Executor eine virtuelle Maschine, die auf dem Prozessor 306 (z. B. einer CPU) läuft.
In mindestens einer Ausführungsform weist der Prozessor 310 der Vorrichtung 304 einen oder mehrere Schaltkreise auf, um einen oder mehrere Anweisungen in einem Software-Kernel durchzuführen, die zwei oder mehr abhängige Reduktionsoperationen einschließen, wobei die abhängigen Reduktionsoperationen von einem Compiler (z. B. dem DL-Compiler 102 von 1 ) im Software-Kernel kombiniert wurden. In mindestens einer Ausführungsform schließt das System 300 einen oder mehrere Speicher ein (z. B. den Speicher 308 vor dem Kernel-Startbefehl und den Speicher 312 nach dem Kernel-Startbefehl, während die Vorrichtung 304 Anweisungen durchführt), um einen Software-Kernel zu speichern, der zwei oder mehr abhängige Reduktionsoperationen einschließt, die von einem Compiler (z. B. DL-Compiler 102 von 1 ) zu einem Software-Kernel kombiniert wurden. In mindestens einer Ausführungsform ist der Prozessor 310 Teil einer PPU, und eine oder mehrere Schaltungen des Prozessors 310 sollen eine oder mehrere Anweisungen durchführen, die kombinierte Operationen einschließen, nachdem sie einen Kernel-Startbefehl von einem Host-Computersystem (z. B. Host 302) empfangen haben.
In mindestens einer Ausführungsform schließt der Prozessor 306 eine oder mehrere Schaltungen ein, um (z. B. unter Verwendung des DL-Compilers 102 von 1 ) zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel (z. B. Code 106 von 1 ) zu kombinieren. In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation ein, und ein oder mehrere Schaltkreise des Prozessors 306 bewirken, dass Koordinaten für ein oder mehrere Elemente von Eingabetensoren für die zweite Reduktionsoperation erzeugt werden, und bewirken, dass zwei oder mehr abhängige Reduktionsoperationen kombiniert werden, zumindest teilweise basierend auf den erzeugten Koordinaten. In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Reduktionsoperationen zwei oder mehr Operationen ein, nämlich eine Mittelwertoperation, eine Summenoperation, eine Produktoperation, eine Min-Operation oder eine Max-Operation. In mindestens einer Ausführungsform bewirken ein oder mehrere Schaltkreise des Prozessors 306, dass ein oder mehrere Threads Elementen von Tensoren zugewiesen werden, die von zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und dass zwei oder mehrere abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert werden, der zumindest teilweise auf einem oder mehreren zugewiesenen Threads basiert. In mindestens einer Ausführungsform veranlassen ein oder mehrere Schaltkreise des Prozessors 306, dass eine oder mehrere Multiplikationsoperationen zwischen einem Vektor und einer Datenmenge (z. B. eine GEMV-Operation zwischen einem Vektor und einer Matrix, wobei die Matrix eine Datenmenge ist) durch einen Satz von Ersetzungsoperationen (z. B. eine Umformungsoperation, eine elementweise Multiplikationsoperation und eine Summenreduktionsoperation) ersetzt werden und veranlassen, dass zwei oder mehrere abhängige Reduktionsoperationen mit dem Satz von Ersetzungsoperationen im Softwarekern kombiniert werden. In mindestens einer Ausführungsform schließen die vereinigten zwei oder mehr abhängigen Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation ein, und der Software-Kernel ist auf einer parallelen Verarbeitungsvorrichtung (z. B. der Vorrichtung 304) durchzuführen.
In mindestens einer Ausführungsform schließt der Prozessor 310 einen oder mehrere Schaltkreise zum Durchführen eines Softwarekerns (z. B. Code 106 von 1 ) ein, der zwei oder mehr abhängige Reduktionsoperationen einschließt. In mindestens einer Ausführungsform wurden zwei oder mehr vom Prozessor 310 durchgeführte abhängige Reduktionsoperationen von einem Compiler (z. B. DL-Compiler 102 von 1 ) zu einem Software-Kernel kombiniert, der zumindest teilweise auf Koordinaten für einen Tensor basiert, der von einer oder mehreren Reduktionsoperationen der vereinigten zwei oder mehr abhängigen Reduktionsoperationen verwendet wird. In mindestens einer Ausführungsform wurden zwei oder mehr abhängige Reduktionsoperationen, die von Prozessor 310 durchgeführt wurden, von einem Compiler (z. B. DL-Compiler 102 von 1 ) mit einer oder mehreren elementweisen Operationen zu einem Softwarekern kombiniert. In mindestens einer Ausführungsform wurden zwei oder mehr vom Prozessor 310 durchgeführte abhängige Reduktionsoperationen von einem Compiler (z. B. DL-Compiler 102 von 1 ) mit einer oder mehreren Kopieroperationen zu einem Software-Kernel kombiniert. In mindestens einer Ausführungsform schließen zwei oder mehr vom Prozessor 310 durchgeführte abhängige Reduktionsoperationen zwei oder mehr Operationen ein, nämlich eine Mittelwertoperation, eine Summenoperation, eine Produktoperation, eine Min-Operation oder eine Max-Operation. In mindestens einer Ausführungsform sollen eine oder mehrere Schaltungen des Prozessors 310 einen Software-Kernel durchführen, nachdem sie einen Kernel-Startbefehl von einem Host-Computersystem (z. B. Host 302) empfangen haben.
In mindestens einer Ausführungsform führt der Prozessor 310 einen Satz von Anweisungen durch (z. B. von einem nicht-transitorischen maschinenlesbaren Medium). In mindestens einer Ausführungsform veranlasst ein Satz von Anweisungen, wenn er von dem Prozessor 310 ausgeführt wird, den Prozessor 310, zumindest einen Software-Kernel (z. B. den Code 106 von 1 ) durchzuführen, der zwei oder mehr abhängige Reduktionsoperationen einschließt, die von einem Compiler (z. B. DL-Compiler 102 von 1 ) zu einem Software-Kernel kombiniert wurden. In mindestens einer Ausführungsform wurden zwei oder mehr abhängige Reduktionsoperationen von einem Compiler mit einer oder mehreren elementweisen Operationen oder einer Kopieroperationen zu einem Software-Kernel kombiniert. In mindestens einer Ausführungsform schließt der Software-Kernel parallel auszuführende Befehle ein, und zwei oder mehr abhängige Reduktionsoperationen wurden von einem Compiler in den Software-Kernel kombiniert, basierend zumindest teilweise auf einer Vielzahl von Threads, die einem oder mehreren Tensoren zugeordnet sind, die von einer oder mehreren der zwei oder mehr abhängigen Reduktionsoperationen verwendet werden, wobei die Vielzahl von Threads eine oder mehrere Operationen parallel durchführen soll. In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Operationen zwei oder mehr Operationen ein, nämlich eine Mittelwertoperation, eine Summenoperation, eine Produktoperation, eine Min-Operation oder eine Max-Operation. In mindestens einer Ausführungsform wird der Software-Kernel auf einer parallelen Verarbeitungseinheit oder einer Grafikverarbeitungseinheit (z. B. Vorrichtung 304) durchgeführt.
In mindestens einer Ausführungsform schließt das System 300 einen oder mehrere Prozessoren (z. B. den Prozessor 306) ein, um zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel zu kombinieren, und einen oder mehrere Speicher (z. B. den Speicher 308), um den Software-Kernel zu speichern. In mindestens einer Ausführungsform kombinieren ein oder mehrere Prozessoren zwei oder mehrere abhängige Reduktionsoperationen mit einer oder mehreren elementweisen Operationen und einer Kopieroperation zu einem Software-Kernel. In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation ein, und der Software-Kernel schließt Anweisungen ein, die parallel auf einer parallelen Verarbeitungseinheit (z. B. Vorrichtung 304) durchgeführt werden. In mindestens einer Ausführungsform implementiert der Software-Kernel einen Abschnitt einer Ableitungsoperation unter Verwendung eines neuronalen Netzes. In mindestens einer Ausführungsform schließt der Software-Kernel Anweisungen ein, die parallel durchgeführt werden sollen, ein oder mehrere Prozessoren (z. B. Prozessor 306) sind ein erster oder mehrere Prozessoren, das System schließt ferner einen zweiten oder mehrere Prozessoren (z. B. Prozessor 310) ein, und der erste oder die mehreren Prozessoren sollen den Software-Kernel zur Ausführung durch den zweiten oder die mehreren Prozessoren starten. In mindestens einer Ausführungsform sollen ein oder mehrere Prozessoren (z. B. Prozessor 306) einen Plan (z. B. Plan 112 von 1 ) erzeugen, der zumindest teilweise auf einer Darstellung eines Computerprogramms (z. B. modifizierte Darstellung des Computerprogramms 108 von 1 ) basiert, das zwei oder mehr abhängige Operationen zur Datenreduzierung enthält, wiederverwendete Daten zumindest teilweise auf der Grundlage des Plans identifizieren und zwei oder mehr abhängige Operationen zur Datenreduzierung in einem Softwarekern kombinieren, der zumindest teilweise auf wiederverwendeten Daten basiert.
In mindestens einer Ausführungsform schließt die Technik 400 in einem Block 402 das Identifizieren einer Darstellung eines Satzes von Anweisungen (z. B. die Darstellung des Computerprogramms 104 von 1 ) ein. In mindestens einer Ausführungsform schließt die Darstellung des Befehlssatzes zwei oder mehr abhängige Operationen zur Reduzierung ein. In mindestens einer Ausführungsform schließt die Technik 400 in einem Block 404 kombinierte Operationen ein (z. B. unter Verwendung des DL-Compilers 102 aus 1 ). In mindestens einer Ausführungsform schließt die Kombination von Operationen in Block 404 das Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen ein.
In mindestens einer Ausführungsform schließt die Technik 400 in einem Block 406 das Erzeugen von Anweisungen ein (z. B. Code 106 und/oder Laufzeitcode 120 von 1 ). In mindestens einer Ausführungsform schließt das Erzeugen von Anweisungen in Block 406 das Kombinieren von zwei oder mehr abhängigen Operationen zu einem einzigen Software-Kernel ein. In mindestens einer Ausführungsform schließt der einzelne Software-Kernel eine oder mehrere zusätzliche Operationen ein (z. B. eine oder mehrere elementweise, speicherbezogene und/oder zusätzliche Reduktionsoperationen). In mindestens einer Ausführungsform, in einem Block 408, schließt die Technik 400 das Durchführen anderer Maßnahmen ein. In mindestens einer Ausführungsform schließt das Durchführen anderer Maßnahmen in Block 408 die Rückkehr zu Block 402 ein, um eine zusätzliche Darstellung eines Satzes von Anweisungen zu identifizieren.
In mindestens einer Ausführungsform wird die Technik 400 zumindest teilweise durch das Durchführen eines Satzes von Befehlen (z. B. von einem nicht-transitorischen maschinenlesbaren Medium) unter Verwendung eines oder mehrerer Prozessoren (z. B. des Hosts 302 von 3 oder eines anderen geeigneten Prozessors, wie hier gezeigt oder beschrieben) durchgeführt. In mindestens einer Ausführungsform schließt die Technik 400 das Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen in einen Software-Kernel ein. In mindestens einer Ausführungsform schließt die Technik 400 das Erzeugen von Koordinaten für ein oder mehrere Elemente eines oder mehrerer Tensoren ein, die von einer oder mehreren von zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und das Kombinieren von zwei oder mehreren abhängigen Reduktionsoperationen basierend, zumindest teilweise, auf den erzeugten Koordinaten. In mindestens einer Ausführungsform schließen zwei oder mehr abhängige Reduktionsoperationen zwei oder mehr Operationen ein, nämlich eine Mittelwertoperation, eine Summenoperation, eine Produktoperation, eine Min-Operation oder eine Max-Operation. In mindestens einer Ausführungsform schließt die Technik 400 das Ersetzen einer ersten Operation (z. B. einer Operation hohen Grades wie einer GEMV-Operation oder einer Softmax-Operation) durch einen Satz von Ersatzoperationen ein (z. B. unter Verwendung des Rewriters 110 von 1 ) und das Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen zu einem Software-Kern mit einem Satz von Ersatzoperationen. In mindestens einer Ausführungsform schließt die Technik 400 das Zuweisen von einem oder mehreren Threads zu Elementen eines oder mehrerer Tensoren ein, die von einer oder mehreren von zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, wobei das Kombinieren von zwei oder mehreren abhängigen Reduktionsoperationen zu einem Software-Kernel zumindest teilweise auf einem oder mehreren zugewiesenen Threads basiert und der Software-Kernel Anweisungen einschließt, die unter Verwendung eines oder mehrerer zugewiesener Threads parallel durchgeführt werden. In mindestens einer Ausführungsform schließt die Technik 400 das Auswählen eines Reduktionsalgorithmus ein, wobei das Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen zu einem Software-Kernel zumindest teilweise auf einem ausgewählten Reduktionsalgorithmus basiert. In mindestens einer Ausführungsform wird der Software-Kernel auf einer parallelen Verarbeitungseinheit oder einer Grafikverarbeitungseinheit (z. B. der Vorrichtung 304 in 3 ) durchgeführt.
In mindestens einer Ausführungsform schließt die Technik 500 in einem Block 502 das Umschreiben von Operationen höheren Grades ein (z. B. unter Verwendung des Rewriters 110 von 1 ). In mindestens einer Ausführungsform schließt das Umschreiben von Operationen höheren Grades in Block 502 das Erzeugen einer modifizierten Darstellung des Computerprogramms ein (z. B. eine modifizierte Darstellung des Computerprogramms 108). In mindestens einer Ausführungsform schließt das Umschreiben von Operationen höheren Grades das Ersetzen von Operationen der Matrix-Vektor-Multiplikation (GEMV) ein. In mindestens einer Ausführungsform schließt das Umschreiben von Operationen höheren Grades das Ersetzen von GEMV-Operationen durch eine Umformungsoperation, eine elementweise Multiplikation und eine Summenreduktionsoperation ein. In mindestens einer Ausführungsform schließt das Umschreiben von Operationen höheren Grades in Block 502 das Ersetzen von Softmax-Operationen durch eine Max-Reduktionsoperation, eine Exponentialoperation, eine Summenreduktionsoperation und eine Divisionsoperation ein. In mindestens einer Ausführungsform schließt das Umschreiben von Operationen höheren Grades in Block 502 das Ersetzen einer anderen Art von Operationen höheren Grades ein (z. B. eine Stapelnormalisierungsoperation oder eine andere geeignete Operation). In mindestens einer Ausführungsform schließt die Darstellung des Computerprogramms (z. B. die Darstellung des Computerprogramms 104) keine Operationen höheren Grades ein, und das Umschreiben von Operationen höheren Grades in Block 502 wird nicht durchgeführt (z. B. ist die modifizierte Darstellung des Computerprogramms 108 dieselbe wie die Darstellung des Computerprogramms 104, da keine Ersetzungen durch den Rewriter 110 durchgeführt wurden).
In mindestens einer Ausführungsform umfasst die Technik 500 in einem Block 504 die Erzeugung eines Plans (z. B. Plan 112 aus 1 ). In mindestens einer Ausführungsform umfasst die Erstellung des Plans die Zuordnung von Knoten eines Eingabegraphen zu Schritten. In mindestens einer Ausführungsform umfasst die Erstellung des Plans die Angabe, ob jeder Knoten in einem bestimmten Schritt Teil eines Prologs, Epilogs, Rests oder einer Reduktionsoperation ist. In mindestens einer Ausführungsform umfasst die Generierung des Plans die Speicherung von Angaben zur Schritt- und Knotenkategorisierung in einer Datenstruktur zur späteren Verwendung während der Codegenerierung.
In mindestens einer Ausführungsform umfasst die Technik 500 in einem Block 506 die Erzeugung von Koordinaten. In mindestens einer Ausführungsform umfasst die Erzeugung von Koordinaten die Zuweisung eines symbolischen Wertes zu einer Ausgabe. In mindestens einer Ausführungsform umfasst die Technik 500 in einem Block 508 die Weitergabe von Koordinaten. In mindestens einer Ausführungsform umfasst die Weitergabe von Koordinaten die Weitergabe von symbolischen Werten rückwärts durch einen Graphen. In mindestens einer Ausführungsform umfasst die Weitergabe von Koordinaten die Verwendung bestimmter Regeln für bestimmte Operationstypen zur Weitergabe von Koordinaten. In mindestens einer Ausführungsform umfasst die Weitergabe von Koordinaten die Weitergabe von Koordinaten von Tensoren, die von Reduktionsoperationen verwendet werden. In mindestens einer Ausführungsform umfasst die Technik 500 in einem Block 510 die Zuweisung von Threads. In mindestens einer Ausführungsform schließt das Zuweisen von Threads das Abbilden von Threads auf logische Koordinaten ein. In mindestens einer Ausführungsform wird das Zuweisen von Threads als Erzeugen und/oder Zuweisen von physischen Koordinaten bezeichnet. In mindestens einer Ausführungsform schließt die Technik 500 in einem Block 512 das Durchführen anderer Maßnahmen ein.
In mindestens einer Ausführungsform schließt die Technik 600 in einem Block 602 das Auswählen eines Reduktionsalgorithmus ein. In mindestens einer Ausführungsform schließt die Auswahl eines Reduktionsalgorithmus das Auswählen eines Warp-Reduktionsalgorithmus, eines Block-Reduktionsalgorithmus, eines Kachel-Reduktionsalgorithmus, eines Split-K-Reduktionsalgorithmus oder eines anderen geeigneten Reduktionsalgorithmus ein. In mindestens einer Ausführungsform basiert die Auswahl des Verkleinerungsalgorithmus zumindest teilweise darauf, ob es eine ausreichende Anzahl unabhängiger Operationen gibt, um eine vollständige Belegung zu erreichen. In mindestens einer Ausführungsform basiert die Auswahl des Reduktionsalgorithmus zumindest teilweise darauf, ob die Reduktionsachse im Speicher zusammenhängend ist. In mindestens einer Ausführungsform ist der Reduktionsalgorithmus vorgegeben, und das Auswählen eines Reduktionsalgorithmus in Block 602 wird nicht durchgeführt.
In mindestens einer Ausführungsform schließt die Technik 600 in einem Block 604 die Analyse von Vektorisierungsmöglichkeiten ein. In mindestens einer Ausführungsform schließt das Analysieren von Vektorisierungsmöglichkeiten das Berechnen einer Vektorbreite für einen bestimmten Kernel ein. In mindestens einer Ausführungsform schließt das Analysieren von Vektorisierungsmöglichkeiten das Auswählen einer Vektorisierungsachse für jeden Tensor basierend auf Speicherlayout, Ausrichtung, Auffüllen und/oder anderen Parametern ein. In mindestens einer Ausführungsform schließt die Analyse der Vektorisierungsmöglichkeiten die Überprüfung der Vektorisierbarkeit jedes Tensorspeicherzugriffs ein, indem eine Rückwärtsanalyse des Diagramms durchgeführt wird, die bei jedem der Diagrammausgänge beginnt. In mindestens einer Ausführungsform schließt die Analyse der Vektorisierungsmöglichkeiten das Abbilden der Achsen im Eingabe-Tensor auf die Achsen im Ausgabe-Tensor ein, während die Analyse des rückwärtsgerichteten Diagramms durchgeführt wird.
In mindestens einer Ausführungsform schließt die Technik 600 in Block 606 das Erzeugen von Anweisungen ein (z. B. Code 106, der vom Codegenerator 116 in 1 erzeugt wurde). In mindestens einer Ausführungsform basiert das Erzeugen von Anweisungen in Block 606 zumindest teilweise auf einem ausgewählten Reduktionsalgorithmus und/oder auf analysierten Vektorisierungsmöglichkeiten. In mindestens einer Ausführungsform basiert das Erzeugen von Anweisungen zumindest teilweise auf einer modifizierten Darstellung des Computerprogramms (z. B. erzeugt in Block 502 von 5 ) und des Plans (z. B. erzeugt in Block 504 von 5 ). In mindestens einer Ausführungsform, in Block 608, schließt die Technik 600 das Durchführen anderer Maßnahmen ein.
INFERENZ- UND TRAININGSLOGIK
In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 ohne Einschränkung Folgendes beinhalten: Code- und/oder Datenspeicher 701, um Gewichtung und/oder Eingabe-/Ausgabedaten und/oder andere Parameter vorwärtsgerichtet zu speichern und/oder auszugeben, um Neuronen oder Schichten eines neuronalen Netzes zu konfigurieren, das in Aspekten einer oder mehrerer Ausführungsformen trainiert und/oder zum Ableiten verwendet wird. In mindestens einer Ausführungsform kann die Trainingslogik 715 einen Code- und/oder Datenspeicher 701 beinhalten oder mit diesem gekoppelt sein, um Diagrammcode oder andere Software zu speichern, um die Zeitsteuerung und/oder die Reihenfolge zu steuern, in der Gewichtungsinformationen und/oder Informationen zu anderen Parametern gespeichert werden sollen, um Logik zu konfigurieren, die Ganzzahl- und/oder Gleitkommaeinheiten (zusammen arithmetische Logikeinheiten (arithmetic logic units - ALUs)) beinhalten. In mindestens einer Ausführungsform lädt Code, wie etwa Diagrammcode, Gewichtungsinformationen oder Informationen zu anderen Parametern in Prozessor-ALUs auf Grundlage der Architektur eines neuronalen Netzes, dem dieser Code entspricht. In mindestens einer Ausführungsform speichert der Code- und/oder Datenspeicher 701 Gewichtungsparameter und/oder Eingabe-/Ausgabedaten jeder Schicht eines neuronalen Netzes, das trainiert oder in Verbindung mit einer oder mehreren Ausführungsformen während der Vorwärtspropagation von Eingabe-/Ausgabedaten und/oder Gewichtsparametern während des Trainings und/oder dem Ableiten unter Verwendung von Aspekten einer oder mehrerer Ausführungsformen verwendet wird. In mindestens einer Ausführungsform kann ein beliebiger Teil des Code- und/oder Datenspeichers 701 in einem anderen chipinternen oder chipexternen Datenspeicher beinhaltet sein, was einen L1-, L2- oder L3-Zwischenspeicher oder Systemspeicher eines Prozessors beinhaltet.
In mindestens einer Ausführungsform kann jeder Abschnitt der Code- und/oder Datenspeicherung 701 intern oder extern zu einem oder mehreren Prozessoren oder anderen Hardware-Logikvorrichtungen oder -Schaltungen sein. In mindestens einer Ausführungsform kann der Code und/oder die Code- und/oder Datenspeicherung 701 ein Cache-Speicher, ein dynamischer zufällig adressierbarer Speicher („DRAM“), ein statischer zufällig adressierbarer Speicher („SRAM“), ein nichtflüchtiger Speicher (z. B. ein Flash-Speicher) oder ein anderer Speicher sein. In mindestens einer Ausführungsform kann die Wahl, ob der Code und/oder die Code- und/oder Datenspeicherung 701 intern oder extern zum Beispiel zu einem Prozessor ist oder DRAM, SRAM, Flash oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip oder außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Ableitungsfunktionen, der Stapelgröße der beim Ableiten und/oder Trainieren eines neuronalen Netzes verwendeten Daten oder einer Kombination dieser Faktoren abhängen.
In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 ohne Einschränkung eine Code- und/oder Datenspeicherung 705 einschließen, um Rückwärts- und/oder Ausgangsgewichts- und/oder Eingabe/AusgabeDaten zu speichern, die Neuronen oder Schichten eines neuronalen Netzes entsprechen, das für die Ableitung in Aspekten einer oder mehrerer Ausführungsformen trainiert und/oder verwendet wird. In mindestens einer Ausführungsform speichert die Code- und/oder Datenspeicherung 705 Gewichtungsparameter und/oder Eingabe/AusgabeDaten jeder Schicht eines neuronalen Netzes, das in Verbindung mit einer oder mehreren Ausführungsformen während der Rückwärtspropagation von Eingabe/Ausgabe-Daten und/oder Gewichtungsparametern während des Trainings und/oder der Ableitung unter Verwendung von Aspekten einer oder mehrerer Ausführungsformen trainiert oder verwendet wird. In mindestens einer Ausführungsform kann die Trainingslogik 715 einen Code und/oder eine Datenspeicherung 705 einschließen oder mit dieser gekoppelt sein, um einen Diagrammcode oder eine andere Software zu speichern, die das Timing und/oder die Reihenfolge steuert, in der Gewichts- und/oder andere Parameterinformationen geladen werden, um die Logik zu konfigurieren, einschließlich Ganzzahl- und/oder Gleitkommaeinheiten (zusammenfassend als arithmetische Logikeinheiten (ALUs) bezeichnet).
In mindestens einer Ausführungsform bewirkt ein Code, wie z. B. ein Diagramm-Code, das Laden von Gewichtungs- oder anderen Parameterinformationen in Prozessor-ALUs basierend auf einer Architektur eines neuronalen Netzes, dem dieser Code entspricht. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Codes und/oder der Speicherung von Daten 705 in einen anderen On-Chip- oder Off-Chip-Datenspeicher, einschließlich des L1-, L2- oder L3-Caches eines Prozessors oder des Systemspeichers, eingeschlossen werden. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Codes und/oder der Speicherung 705 intern oder extern zu einem oder mehreren Prozessoren oder anderen Hardware-Logikvorrichtungen oder - Schaltungen sein. In mindestens einer Ausführungsform kann es sich bei der Code- und/oder Datenspeicherung 705 um Cache-Speicher, DRAM, SRAM, nichtflüchtigen Speicher (z. B. Flash-Speicher) oder andere Speicher handeln. In mindestens einer Ausführungsform kann die Wahl, ob der Code- und/oder Datenspeicher 705 intern oder extern zu einem Prozessor ist oder DRAM, SRAM, Flash-Speicher oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip oder außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Ableitungsfunktionen, der Stapelgröße der beim Ableiten und/oder Trainieren eines neuronalen Netzes verwendeten Daten oder einer Kombination dieser Faktoren abhängen.
In mindestens einer Ausführungsform können die Code- und/oder Datenspeicherung 701 und die Code- und/oder Datenspeicherung 705 getrennte Speicherstrukturen sein. In mindestens einer Ausführungsform können Code- und/oder Datenspeicher 701 und Code- und/oder Datenspeicher 705 eine vereinigte Speicherstruktur sein. In mindestens einer Ausführungsform können der Code- und/oder Datenspeicher 701 und der Code- und/oder Datenspeicher 705 teilweise kombiniert und teilweise getrennt sein. In mindestens einer Ausführungsform kann jeder Abschnitt des Code- und/oder Datenspeichers 701 und des Code- und/oder Datenspeichers 705 in einen anderen On-Chip- oder Off-Chip-Datenspeicher, einschließlich des L1-, L2- oder L3-Caches eines Prozessors oder des Systemspeichers, eingeschlossen sein.
In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 ohne Einschränkung eine oder mehrere arithmetische Logikeinheit(en) („ALU(s)“) 710, einschließlich Ganzzahl- und/oder Gleitkommaeinheiten, einschließen, um logische und/oder mathematische Operationen durchzuführen, die zumindest teilweise auf einem Trainings- und/oder Ableitungscode basieren oder von diesem angegeben werden (z. B, Diagramm-Code), deren Ergebnis in einem Aktivierungsspeicher 720 gespeicherte Aktivierungen (z. B. Ausgabewerte von Schichten oder Neuronen innerhalb eines neuronalen Netzes) erzeugen kann, die Funktionen von Eingabe/Ausgabe- und/oder Gewichtungsparameterdaten sind, die in Code- und/oder Datenspeicher 701 und/oder Code- und/oder Datenspeicher 705 gespeichert sind. In mindestens einer Ausführungsform werden die in dem Aktivierungsspeicher 720 gespeicherten Aktivierungen gemäß linearer algebraischer und/oder matrixbasierter Mathematik erzeugt, die von der/den ALU(s) 710 als Reaktion auf das Durchführen von Befehlen oder anderem Code durchgeführt wird, wobei die in dem Code und/oder Datenspeicher 705 und/oder Datenspeicher 701 gespeicherten Gewichtungswerte als Operanden zusammen mit anderen Werten, wie z. B. Vorspannungswerten, Gradienteninformationen, Impulswerten oder anderen Parametern oder Hyperparametern, verwendet werden, von denen jeder oder alle in dem Code und/oder Datenspeicher 705 oder dem Code und/oder Datenspeicher 701 oder einem anderen Speicher auf oder außerhalb des Chips gespeichert sein können.
In mindestens einer Ausführungsform sind die ALU(s) 710 in einem oder mehreren Prozessoren oder anderen Hardware-Logikgeräten oder -Schaltungen enthalten, während in einer anderen Ausführungsform die ALU(s) 710 außerhalb eines Prozessors oder eines anderen Hardware-Logikgeräts oder einer Schaltung sein können, die sie verwenden (z. B. ein Co-Prozessor). In mindestens einer Ausführungsform können die ALUs 710 in den Ausführungseinheiten eines Prozessors oder in einer Bank von ALUs enthalten sein, auf die die Ausführungseinheiten eines Prozessors zugreifen können, und zwar entweder innerhalb desselben Prozessors oder verteilt auf verschiedene Prozessoren unterschiedlichen Typs (z. B. zentrale Verarbeitungseinheiten, Grafikverarbeitungseinheiten, feste Funktionseinheiten usw.). In mindestens einer Ausführungsform können sich der Code- und/oder Datenspeicher 701, der Code- und/oder Datenspeicher 705 und der Aktivierungsspeicher 720 einen Prozessor oder eine andere Hardware-Logikeinheit oder -Schaltung teilen, während sie sich in einer anderen Ausführungsform in verschiedenen Prozessoren oder anderen Hardware-Logikeinheiten oder -Schaltungen oder in einer Kombination aus gleichen und verschiedenen Prozessoren oder anderen Hardware-Logikeinheiten oder -Schaltungen befinden können. In mindestens einer Ausführungsform kann ein beliebiger Teil des Aktivierungsspeichers 720 in einen anderen On-Chip- oder Off-Chip-Datenspeicher integriert werden, einschließlich des L1-, L2- oder L3-Cache oder des Systemspeichers eines Prozessors. Darüber hinaus kann der Inferenz- und/oder Trainingscode zusammen mit anderem Code gespeichert werden, auf den ein Prozessor oder eine andere Hardwarelogik oder -schaltung zugreifen kann und der mit Hilfe der Abruf-, Dekodier-, Planungs-, Ausführungs-, Ausscheidungs- und/oder anderen logischen Schaltungen des Prozessors abgerufen und/oder verarbeitet wird.
In mindestens einer Ausführungsform kann der Aktivierungsspeicher 720 ein Cache-Speicher, DRAM, SRAM, nichtflüchtiger Speicher (z. B. Flash-Speicher) oder ein anderer Speicher sein. In mindestens einer Ausführungsform kann sich der Aktivierungsspeicher 720 vollständig oder teilweise innerhalb oder außerhalb eines oder mehrerer Prozessoren oder anderer logischer Schaltungen befinden. In mindestens einer Ausführungsform kann die Wahl, ob der Aktivierungsspeicher 720 beispielsweise innerhalb oder außerhalb eines Prozessors liegt oder DRAM, SRAM, Flash-Speicher oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip oder außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Ableitungsfunktionen, der Stapelgröße der beim Ableiten und/oder Trainieren eines neuronalen Netzes verwendeten Daten oder einer Kombination dieser Faktoren abhängen.
In mindestens einer Ausführungsform kann die in 7A veranschaulichte Ableitungs- und/oder Trainingslogik 715 in Verbindung mit einem anwendungsspezifischen integrierten Schaltkreis („ASIC“) verwendet werden, wie z. B. einer TensorFlow® Processing Unit von Google, einer Inferenzverarbeitungseinheit (IPU) von Graphcore™ oder einem Nervana®-Prozessor (z. B. „Lake Crest“) von Intel Corp. In mindestens einer Ausführungsform kann die in 7A dargestellte Ableitungs- und/oder Trainingslogik 715 in Verbindung mit Hardware der zentralen Verarbeitungseinheit („CPU“), der Grafikverarbeitungseinheit („GPU“) oder anderer Hardware, wie z. B. feldprogrammierbaren Gate Arrays („FPGAs“), verwendet werden.
In mindestens einer Ausführungsform entsprechen die Code- und/oder Datenspeicher 701 und 705 und die entsprechende Rechen-Hardware 702 und 706 jeweils verschiedenen Schichten eines neuronalen Netzes, so dass die resultierende Aktivierung aus einem Speicher-/Rechenpaar 701/702 aus Code- und/oder Datenspeicher 701 und Rechen-Hardware 702 als Eingabe für ein nächstes Speicher-/Rechenpaar 705/706 aus Code- und/oder Datenspeicher 705 und Rechen-Hardware 706 bereitgestellt wird, um eine konzeptionelle Organisation eines neuronalen Netzes widerzuspiegeln. In mindestens einer Ausführungsform kann jedes der Speicher-/Rechenpaare 701/702 und 705/706 mehr als einer Schicht des neuronalen Netzes entsprechen. In mindestens einer Ausführungsform können zusätzliche Speicher-/Berechnungspaare (nicht gezeigt) im Anschluss an oder parallel zu den Speicher-/Berechnungspaaren 701/702 und 705/706 in die Ableitungs- und/oder Trainingslogik 715 eingeschlossen sein.
TRAINING UND EINSATZ NEURONALER NETZE
In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 806 unter Verwendung von überwachtem Lernen trainiert, wobei der Trainingsdatensatz 802 eine Eingabe, die mit einer gewünschten Ausgabe für eine Eingabe gepaart ist, aufweist, oder wobei der Trainingsdatensatz 802 eine Eingabe mit einer bekannten Ausgabe einschließt und eine Ausgabe des neuronalen Netzes 806 manuell eingestuft wird. In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 806 auf überwachte Weise trainiert und verarbeitet Eingaben aus dem Trainingsdatensatz 802 und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. In mindestens einer Ausführungsform werden die Fehler dann durch das untrainierte neuronale Netz 806 zurückverfolgt. In mindestens einer Ausführungsform passt der Trainingsrahmen 804 die Gewichte an, die das untrainierte neuronale Netz 806 steuern. In mindestens einer Ausführungsform schließt der Trainingsrahmen 804 Werkzeuge ein, um zu überwachen, wie gut das untrainierte neuronale Netz 806 zu einem Modell konvergiert, wie z. B. dem trainierten neuronalen Netz 808, das geeignet ist, basierend auf Eingabedaten, wie z. B. einem neuen Datensatz 812, korrekte Antworten zu erzeugen, wie z. B. im Ergebnis 814. In mindestens einer Ausführungsform trainiert der Trainingsrahmen 804 das untrainierte neuronale Netz 806 wiederholt, während er die Gewichte anpasst, um eine Ausgabe des untrainierten neuronalen Netzes 806 unter Verwendung einer Verlustfunktion und eines Anpassungsalgorithmus wie dem stochastischen Gradientenabstieg zu verfeinern. In mindestens einer Ausführungsform trainiert der Trainingsrahmen 804 das untrainierte neuronale Netz 806 so lange, bis das untrainierte neuronale Netz 806 eine gewünschte Genauigkeit erreicht. In mindestens einer Ausführungsform kann das trainierte neuronale Netz 808 dann eingesetzt werden, um eine beliebige Anzahl von Operationen des maschinellen Lernens zu implementieren.
In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 806 durch unüberwachtes Lernen trainiert, wobei das untrainierte neuronale Netz 806 versucht, sich selbst mit unmarkierten Daten zu trainieren. In mindestens einer Ausführungsform schließt der Trainingsdatensatz 802 des unüberwachten Lernens Eingabedaten ohne zugeordnete Ausgabedaten oder „Grundwahrheitsdaten“ ein. In mindestens einer Ausführungsform kann das untrainierte neuronale Netz 806 Gruppierungen innerhalb des Trainingsdatensatzes 802 lernen und bestimmen, wie einzelne Eingaben sich auf den untrainierten Datensatz 802 beziehen. In mindestens einer Ausführungsform kann das unüberwachte Training dazu verwendet werden, eine selbstorganisierende Karte im trainierten neuronalen Netz 808 zu erzeugen, die in der Lage ist, Operationen durchzuführen, die bei der Reduzierung der Dimensionalität des neuen Datensatzes 812 nützlich sind. In mindestens einer Ausführungsform kann das unüberwachte Training auch dazu verwendet werden, eine Anomalieerkennung durchzuführen, die es ermöglicht, Datenpunkte im neuen Datensatz 812 zu identifizieren, die von den normalen Mustern des neuen Datensatzes 812 abweichen.
In mindestens einer Ausführungsform kann halbüberwachtes Lernen verwendet werden, d. h. eine Technik, bei der der Trainingsdatensatz 802 eine Mischung aus gelabelten und nicht gelabelten Daten einschließt. In mindestens einer Ausführungsform kann der Trainingsrahmen 804 verwendet werden, um inkrementelles Lernen durchzuführen, z. B. durch übertragene Lerntechniken. In mindestens einer Ausführungsform ermöglicht das inkrementelle Lernen dem trainierten neuronalen Netz 808, sich an einen neuen Datensatz 812 anzupassen, ohne das Wissen zu vergessen, das dem trainierten neuronalen Netz 808 während des anfänglichen Trainings eingeflößt wurde.
RECHENZENTRUM
In mindestens einer Ausführungsform kann, wie in 9 gezeigt, die Rechenzentrumsinfrastrukturschicht 910 einen Ressourcenorchestrierer 912, gruppierte Berechnungsressourcen 914 und Knotenberechnungsressourcen („Knoten-CRs“) 916(1)-916(N) beinhalten, wobei „N“ eine beliebige ganze positive Zahl darstellt. In mindestens einer Ausführungsform können die Knoten-CRs 916(1)-916(N) eine beliebige Anzahl von Zentralverarbeitungseinheiten („CPUs“) oder andere Prozessoren (die Beschleuniger, feldprogrammierbare Gatearrays (FPGAs), Grafikprozessoren usw.), Arbeitsspeichervorrichtungen 918(1)-918(N) (z. B. dynamischer Nur-Lese-Speicher), Datenspeichervorrichtungen (z. B. Festkörper- oder Festplattenlaufwerke), Netz-Ein-/Ausgabevorrichtungen („NW E/A“), Netz-Switches, virtuellen Maschinen („VMs“), Leistungsmodulen und Kühlmodule usw. beinhalten, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform können ein oder mehrere Knoten-CRs von den Knoten-CRs 916(1)-916(N) ein Server sein, der eine oder mehrere der vorstehend erwähnten Berechnungsressourcen aufweist.
In mindestens einer Ausführungsform können gruppierte Berechnungsressourcen 914 getrennte Gruppierungen von Knoten-CRs beinhalten, die in einem oder mehreren Racks (nicht gezeigt) untergebracht sind, oder vielen Racks, die in Rechenzentren an verschiedenen geografischen Standorten (ebenfalls nicht gezeigt) untergebracht sind. Getrennte Gruppierungen von Knoten-CRs innerhalb gruppierter Berechnungsressourcen 914 können gruppierte Rechen-, Netz-, Arbeitsspeicher- oder Datenspeicherressourcen beinhalten, die konfiguriert oder zugewiesen sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-CRs, die CPUs oder Prozessoren beinhalten, innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen zum Unterstützen einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks auch eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und Netz-Switches in beliebiger Kombination beinhalten.
In mindestens einer Ausführungsform kann der Ressourcenorchestrierer 912 einen oder mehrere Knoten-CRs 916(1)-916(N) und/oder gruppierte Berechnungsressourcen 914 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrierer 912 eine Softwaredesigninfrastruktur-(„SDI“-)Verwaltungsinstanz für das Rechenzentrum 900 beinhalten. In mindestens einer Ausführungsform kann der Ressourcenorchestrierer 712 Hardware, Software oder eine Kombination davon beinhalten.
In mindestens einer Ausführungsform beinhaltet, wie in 9 gezeigt, die Frameworkschicht 920 einen Aufgabenplaner 922, einen Konfigurationsverwalter 924, einen Ressourcenverwalter 926 und ein verteiltes Dateisystem 928. In mindestens einer Ausführungsform kann die Frameworkschicht 920 ein Framework beinhalten, um Software 932 der Softwareschicht 930 und/oder eine oder mehrere Anwendung(en) 942 der Anwendungsschicht 940 zu unterstützen. In mindestens einer Ausführungsform kann/können die Software 932 oder die Anwendung(en) 942 jeweils webbasierte Dienstsoftware oder -anwendungen beinhalten, wie etwa diejenigen, die von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt sind. In mindestens einer Ausführungsform kann die Frameworkschicht 920 eine Art von freiem und Open-Source-Software-Webanwendungs-Framework sein, ohne darauf beschränkt zu sein, wie etwa Apache Spark™ (im Folgenden „Spark“), welches das verteilte Dateisystem 928 für umfangreiche Datenverarbeitungen (z. B. „Big Data“) nutzen kann. In mindestens einer Ausführungsform kann der Aufgabenplaner 922 einen Spark-Treiber beinhalten, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 900 unterstützt werden. In mindestens einer Ausführungsform kann der Konfigurationsverwalter 924 in der Lage sein, unterschiedliche Schichten zu konfigurieren, wie etwa die Softwareschicht 930 und die Frameworkschicht 920, was Spark und das verteilte Dateisystem 928 zum Unterstützen einer umfangreicher Datenverarbeitung beinhaltet. In mindestens einer Ausführungsform kann der Ressourcenverwalter 926 in der Lage sein, geclusterte oder gruppierte Berechnungsressourcen zu verwalten, die dem verteilten Dateisystem 928 und dem Aufgabenplaner 922 zur Unterstützung zugeordnet oder zugewiesen sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Berechnungsressourcen eine gruppierte Berechnungsressource 914 auf der Rechenzentrumsinfrastrukturschicht 910 beinhalten. In mindestens einer Ausführungsform kann sich der Ressourcenverwalter 926 mit dem Ressourcenorchestrierer 912 koordinieren, um diese zugeordneten oder zugewiesenen Berechnungsressourcen zu verwalten.
In mindestens einer Ausführungsform kann die in der Softwareschicht 930 beinhaltete Software 932 Software beinhalten, die von mindestens Teilen der Knoten-CRs 916(1)-916(N), gruppierten Berechnungsressourcen 914 und/oder dem verteilten Dateisystem 928 der Frameworkschicht 920 verwendet wird Eine oder mehrere Arten von Software können Internet-Webseiten-Suchsoftware, E-Mail-Virenscan-Software, Datenbanksoftware und Streaming-Video-Content-Software beinhalten, ohne darauf beschränkt zu sein.
In mindestens einer Ausführungsform kann/können die Anwendung(en) 942, die in der Anwendungsschicht 940 enthalten ist/sind, eine oder mehrere Arten von Anwendungen beinhalten, die von mindestens Teilen der Knoten-CRs 916(1)-916(N), gruppierten Berechnungsressourcen 914 und/oder dem verteilten Dateisystem 928 der Frameworkschicht 920 verwendet werden. Eine oder mehrere Arten von Anwendungen können eine beliebige Anzahl einer Genomikanwendung, einer kognitiven Rechenanwendung und einer maschinellen Lernanwendung umfassen, die Trainings- oder Ableitungssoftware beinhaltet, Framework-Software des maschinellen Lernens (z. B. PyTorch, TensorFlow, Caffe usw.) oder andere maschinelle Lernanwendungen beinhalten, ohne darauf beschränkt zu sein, die in Verbindung mit einer oder mehreren Ausführungsformen verwendet werden.
In mindestens einer Ausführungsform können Konfigurationsverwalter 924, Ressourcenverwalter 926 und Ressourcenorchestrierer 912 eine beliebige Anzahl und Art von selbstmodifizierenden Handlungen auf Grundlage einer beliebigen Menge und Art von Daten umsetzen, die auf jede technisch machbare Weise erfasst werden. In mindestens einer Ausführungsform können selbstmodifizierende Handlungen einen Rechenzentrumsbetreiber des Rechenzentrums 900 davon befreien, möglicherweise schlechte Konfigurationsentscheidungen zu treffen, und möglicherweise vermeiden, dass Teile eines Rechenzentrums nicht ausgelastet und/oder leistungsschwach sind.
In mindestens einer Ausführungsform kann das Rechenzentrum 900 Werkzeuge, Dienste, Software oder andere Ressourcen beinhalten, um ein oder mehrere Modelle des maschinellen Lernens zu trainieren oder Informationen unter Verwendung eines oder mehrerer Modelle des maschinellen Lernens gemäß einer oder mehreren in dieser Schrift beschriebenen Ausführungsformen vorherzusagen oder abzuleiten. Zum Beispiel kann in mindestens einer Ausführungsform ein Modell des maschinellen Lernens durch das Berechnen von Gewichtungsparametern gemäß einer neuronalen Netzarchitektur unter Verwendung von Software und Berechnungsressourcen trainiert werden, die vorstehend im Hinblick auf das Rechenzentrum 900 beschrieben wurden. In mindestens einer Ausführungsform können trainierte Modelle maschinellen Lernens verwendet werden, die einem oder mehreren neuronalen Netzen entsprechen, um Informationen unter Verwendung der vorstehend beschriebenen Ressourcen in Bezug auf das Rechenzentrum 900 durch das Verwenden von Gewichtungsparameters abzuleiten oder vorherzusagen, die durch eine oder mehrere in dieser Schrift beschriebene Trainingsmethoden berechnet wurden.
In mindestens einer Ausführungsform kann das Rechenzentrum CPUs, anwendungsspezifische integrierte Schaltkreise (ASICs), GPUs, FPGAs oder andere Hardware verwenden, um das Training und/oder die Ableitung unter Verwendung der vorstehend beschriebenen Ressourcen durchzuführen. Darüber hinaus können eine oder mehrere vorstehend beschriebene Software- und/oder Hardwareressourcen als ein Dienst konfiguriert sein, um Benutzern zu ermöglichen, zu trainieren oder das Ableiten von Informationen durchzuführen, wie etwa Bilderfassung, Spracherfassung oder andere Dienste der künstlichen Intelligenz.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 9 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 9 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen und/oder Anweisungen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen und/oder Befehle zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist.
AUTONOMES FAHRZEUG
Autonome Fahrzeuge können in Form von Automatisierungsgraden beschrieben werden, die von der National Highway Traffic Safety Administration („NHTSA“), einer Abteilung des US-Verkehrsministeriums, und der Society of Automotive Engineers („SAE“) „Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles“ (z. B. Standard Nr. J 3016-201806 , veröffentlicht am 15. Juni 2018, Standard Nr. J 3016-201609 , veröffentlicht am 30. September 2016, sowie frühere und zukünftige Versionen dieses Standards) definiert werden. Gemäß mindestens einer Ausführungsform kann das Fahrzeug 1000 in der Lage sein, gemäß einem oder mehreren der Grade 1 bis 5 der autonomen Fahrstufen zu funktionieren. Zum Beispiel kann das Fahrzeug 1000 in mindestens einer Ausführungsform in der Lage sein, bedingt automatisiert (Grad 3), hochautomatisiert (Grad 4) und/oder vollständig automatisiert (Grad 5) zu fahren, je nach Ausführungsform.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ohne Einschränkung Komponenten wie ein Fahrgestell, eine Fahrzeugkarosserie, Räder (z. B. 2, 4, 6, 8, 18 usw.), Reifen, Achsen und andere Komponenten eines Fahrzeugs einschließen. In mindestens einer Ausführungsform kann das Fahrzeug 1000 ohne Einschränkung ein Antriebssystem 1050 einschließen, wie z. B. einen Verbrennungsmotor, ein Hybrid-Elektrizitätskraftwerk, einen vollelektrischen Motor und/oder einen anderen Antriebssystemtyp. In mindestens einer Ausführungsform kann das System 1050 mit einem Antriebsstrang des Fahrzeugs 1000 verbunden sein, der ohne Einschränkung ein Getriebe einschließen kann, um den Antrieb des Fahrzeugs 1000 zu ermöglichen. In mindestens einer Ausführungsform kann das System 1050 durch das Empfangen von Signalen von einer Drosselklappe/einem Beschleuniger(n) 1052 gesteuert werden.
In mindestens einer Ausführungsform wird ein Lenksystem 1054, das ohne Einschränkung ein Lenkrad einschließen kann, verwendet, um das Fahrzeug 1000 zu lenken (z. B. entlang eines gewünschten Weges oder einer Route), wenn das Antriebssystem 1050 in Betrieb ist (z. B. wenn das Fahrzeug 1000 in Bewegung ist). In mindestens einer Ausführungsform kann das Lenksystem 1054 Signale von dem/den Lenkaktuator(en) 1056 empfangen. In mindestens einer Ausführungsform kann ein Lenkrad optional sein, damit die volle Automatisierung (Grad 5) funktioniert. In mindestens einer Ausführungsform kann ein Bremssensorsystem 1046 verwendet werden, um die Fahrzeugbremsen als Reaktion auf empfangene Signale von Bremsaktuator(en) 1048 und/oder Bremssensoren zu bedienen.
In mindestens einer Ausführungsform liefern die Controller 1036, die ohne Einschränkung ein oder mehrere System-on-Chips („SoCs“) (in 10A nicht gezeigt) und/oder Grafikverarbeitungseinheiten („GPU(s)“) einschließen können, Signale (z. B. stellvertretend für Befehle) an eine oder mehrere Komponenten und/oder Systeme des Fahrzeugs 1000. In mindestens einer Ausführungsform kann der/die Controller 1036 beispielsweise Signale zur Bedienung der Fahrzeugbremsen über den/die Bremsaktuator(en) 1048, zur Bedienung des Lenksystems 1054 über den/die Lenkaktuator(en) 1056 und zur Bedienung des Antriebssystems 1050 über den/die Beschleuniger 1052 senden. In mindestens einer Ausführungsform kann (können) der (die) Controller 1036 eine oder mehrere fahrzeuginterne (z. B. integrierte) Rechenvorrichtungen einschließen, die Sensorsignale verarbeiten und Operationsbefehle (z. B. Signale, die Befehle darstellen) ausgeben, um autonomes Fahren zu ermöglichen und/oder einen menschlichen Fahrer beim Führen des Fahrzeugs 1000 zu unterstützen. In mindestens einer Ausführungsform kann (können) die Controller 1036 einen ersten Controller für autonome Fahrfunktionen, einen zweiten Controller für funktionale Sicherheitsfunktionen, einen dritten Controller für Funktionen der künstlichen Intelligenz (z. B. Computer Vision), einen vierten Controller für Infotainment-Funktionen, einen fünften Controller für Redundanz in Notfällen und/oder andere Controller einschließen. In mindestens einer Ausführungsform kann ein einziger Controller zwei oder mehr der oben genannten Funktionalitäten übernehmen, zwei oder mehr Controller können eine einzige Funktionalität übernehmen und/oder eine beliebige Kombination davon.
In mindestens einer Ausführungsform stellt (stellen) der (die) Controller 1036 Signale zur Steuerung einer oder mehrerer Komponenten und/oder Systeme des Fahrzeugs 1000 in Reaktion auf Sensordaten bereit, die von einem oder mehreren Sensoren (z. B. Sensoreingaben) empfangen werden. In mindestens einer Ausführungsform können Sensordaten beispielsweise und ohne Einschränkung empfangen werden von: GNSS-Sensor(en) 1058 (z. B. Global Positioning System-Sensor(en)), RADAR-Sensor(en) 1060, Ultraschallsensor(en) 1062, LIDAR-Sensor(en) 1064, Inertial Measurement Unit („IMU“)-Sensor(en) 1066 (z, Beschleunigungsmesser, Gyroskop(e), Magnetkompass oder Magnetkompasse, Magnetometer usw.), Mikrofon(e) 1096, Stereokamera(s) 1068, Weitwinkelkamera(s) 1070 (z. B, Fischaugenkameras), Infrarotkamera(n) 1072, Rundumkamera(n) 1074 (z. B. 360-Grad-Kameras), Langstreckenkameras (nicht in 10A gezeigt), Mittelstreckenkamera(n) (nicht in 10A gezeigt), Geschwindigkeitssensor(en) 1044 (z. B. zur Messung der Geschwindigkeit des Fahrzeugs 1000), Vibrationssensor(en) 1042, Lenksensor(en) 1040, Bremssensor(en) (z. B. als Teil des Bremssensorsystems 1046), und/oder andere Sensorarten.
In mindestens einer Ausführungsform können ein oder mehrere Controller 1036 Eingaben (z. B. in Form von Eingabedaten) von einem Kombiinstrument 1032 des Fahrzeugs 1000 empfangen und Ausgaben (z. B. in Form von Ausgabedaten, Anzeigedaten usw.) über eine Anzeige 1034 der Mensch-Maschine-Schnittstelle („HMI“), einen akustischen Signalgeber, einen Lautsprecher und/oder über andere Komponenten des Fahrzeugs 1000 bereitgestellt werden. In mindestens einer Ausführungsform können die Ausgaben Informationen wie Fahrzeuggeschwindigkeit, Geschwindigkeit, Zeit, Kartendaten (z. B. eine hochauflösende Karte (in 10A nicht gezeigt)), Positionsdaten (z. B. die Position des Fahrzeugs 1000, z. B. auf einer Karte), Richtung, Position anderer Fahrzeuge (z. B. ein Belegungsgitter), Informationen über Aufgaben und den Status von Aufgaben, wie sie durch die Controller 1036 wahrgenommen werden, usw. einschließen. Die HMI-Anzeige 1034 kann zum Beispiel in mindestens einer Ausführungsform Informationen über die Anwesenheit eines oder mehrerer Objekte (z. B. ein Straßenschild, ein Warnschild, eine Ampelschaltung usw.) und/oder Informationen über Fahrmanöver anzeigen, die das Fahrzeug durchgeführt hat, gerade durchführt oder durchführen wird (z. B. jetzt die Spur wechseln, in zwei Meilen die Ausfahrt 34B nehmen usw.).
In mindestens einer Ausführungsform schließt das Fahrzeug 1000 ferner eine Netzschnittstelle 1024 ein, die drahtlose Antenne(n) 1026 und/oder Modem(e) zur Kommunikation über ein oder mehrere Netze verwenden kann. Zum Beispiel kann die Netzschnittstelle 1024 in mindestens einer Ausführungsform in der Lage sein, über Long-Term Evolution („LTE“), Wideband Code Division Multiple Access („WCDMA“), Universal Mobile Telecommunications System („UMTS“), Global System for Mobile communication („GSM“), IMT-CDMA Multi-Carrier („CDMA2000“) Netze usw. zu kommunizieren. In mindestens einer Ausführungsform kann/können die drahtlose(n) Antenne(n) 1026 auch die Kommunikation zwischen Aufgaben in der Umgebung (z. B. Fahrzeuge, mobile Vorrichtungen usw.) ermöglichen, wobei lokale Netze wie Bluetooth, Bluetooth Low Energy („LE“), Z-Wave, ZigBee usw. und/oder Weitverkehrsnetze mit niedrigem Energieverbrauch („LPWANs“) wie LoRaWAN, SigFox usw. verwendet werden.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 10A für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine Komponente, die auf 10A gezeigt oder beschrieben ist, verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 des Fahrzeugs 1000 (bezogen auf 10C als Teil der CPU(s) 1006 und GPU(s) 1008) mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik 715 mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform schließt das Fahrzeug 1000 ein Computer-Vision-System ein, das einen oder mehrere Prozessoren einschließt, um ein oder mehrere Aufgaben zu identifizieren, die zumindest teilweise auf dem Durchführen einer oder mehrerer Ableitungsoperationen unter Verwendung von zwei oder mehreren abhängigen Reduktionsoperationen basieren, die von einem Compiler zu einem Software-Kernel (z. B. Code 106 oder Laufzeitcode 120 von 1 ) kombiniert werden, wie in Bezug auf eine oder mehrere der 1-6 beschrieben. In mindestens einer Ausführungsform schließt das Fahrzeug 1000 ein oder mehrere Antriebssysteme, ein Richtungssteuerungssystem und ein Benachrichtigungssystem für den Fahrzeugführer ein, um eine oder mehrere Maßnahmen (z. B. Beschleunigen, Bremsen, Lenken, Warnmeldungen) basierend auf einem oder mehreren identifizierten Objekten durchzuführen.
In mindestens einer Ausführungsform können Kameratypen für Kameras digitale Kameras einschließen, die für die Verwendung mit Komponenten und/oder Systemen des Fahrzeugs 1000 angepasst werden können, sind aber nicht darauf beschränkt. In mindestens einer Ausführungsform kann/können die Kamera(s) auf dem automobilen Sicherheitsintegritätsgrad („ASIL“) B und/oder auf einem weiteren ASIL-Grad betrieben werden. In mindestens einer Ausführungsform können die Kameratypen je nach Ausführungsform jede beliebige Bildaufnahmegeschwindigkeit erreichen, z. B. 60 Bilder pro Sekunde (fps), 1220 fps, 240 fps usw.. In mindestens einer weiteren Ausführungsform können die Kameras Rolling Shutter, Global Shutter, einen anderen Verschlusstyp oder eine Kombination davon verwenden. In mindestens einer Ausführungsform kann das Farbfilterarray ein Rot-Klar-Klar-Klar („RCCC“) Farbfilterarray, ein Rot-Klar-Klar-Blau („RCCB“) Farbfilterarray, ein Rot-Blau-Grün-Klar („RBGC“) Farbfilterarray, ein Foveon X3 Farbfilterarray, ein Bayer Sensoren („RGGB“) Farbfilterarray, ein Monochrom Sensor Farbfilterarray, und/oder eine weitere Art von Farbfilterarray einschließen. In mindestens einer Ausführungsform können zur Erhöhung der Lichtempfindlichkeit Clear-Pixel-Kameras, wie z. B. Kameras mit einem RCCC, einem RCCB und/oder einem RBGC Farbfilterarray, verwendet werden.
In mindestens einer Ausführungsform können eine oder mehrere Kameras verwendet werden, um Funktionen fortgeschrittener Fahrerassistenzsysteme („ADAS“) durchzuführen (z. B. als Teil eines redundanten oder ausfallsicheren Designs). Zum Beispiel kann in mindestens einer Ausführungsform eine Multifunktions-Monokamera installiert werden, um Funktionen wie Spurhalteassistent, Verkehrszeichenassistent und intelligente Scheinwerfersteuerung bereitzustellen. In mindestens einer Ausführungsform können eine oder mehrere der Kameras (z. B. alle Kameras) gleichzeitig Bildgeberdaten (z. B. Video) aufzeichnen und bereitstellen.
In mindestens einer Ausführungsform können eine oder mehrere Kameras in einer Halterung befestigt werden, z. B. in einer speziell ausgelegten (dreidimensionalen („3D“) gedruckten) Halterung, um Streulicht und Reflexionen aus dem Inneren des Fahrzeugs 1000 (z. B. Reflexionen vom Armaturenbrett, die sich in den Außenspiegeln der Windschutzscheibe spiegeln) auszuschalten, die die Fähigkeit der Kamera zur Erfassung von Bilddaten beeinträchtigen könnten. In mindestens einer Ausführungsform können die Außenspiegel so in 3D gedruckt werden, dass die Kameramontageplatte mit der Form eines Außenspiegels übereinstimmt. In mindestens einer Ausführungsform können die Kamera(s) in die Außenspiegel integriert werden. In mindestens einer Ausführungsform können die Kamera(s) für Seitenkameras auch in vier Säulen an jeder Ecke der Kabine integriert sein.
In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte einer Umgebung vor dem Fahrzeug 1000 einschließt (z. B. nach vorne gerichtete Kameras), für die Insassensicht verwendet werden, um dabei zu helfen, nach vorne gerichtete Pfade und Hindernisse zu identifizieren, und um mit Hilfe eines oder mehrerer Controller 1036 und/oder Steuer-SoCs Informationen bereitzustellen, die für die Erzeugung eines Gitters und/oder das Bestimmen bevorzugter Fahrzeugpfade entscheidend sind. In mindestens einer Ausführungsform können nach vorne gerichtete Kameras verwendet werden, um viele ähnliche ADAS-Funktionen wie LIDAR durchzuführen, einschließlich, ohne Einschränkung, Notbremsung, Fußgängererkennung und Kollisionsvermeidung. In mindestens einer Ausführungsform können nach vorne gerichtete Kameras auch für ADAS-Funktionen und -Systeme verwendet werden, einschließlich, aber nicht beschränkt auf Spurverlassenswarnungen („LDW“), autonome Geschwindigkeitsregelung („ACC“) und/oder andere Funktionen wie Verkehrszeichenerkennung.
In mindestens einer Ausführungsform kann eine Vielzahl von Kameras in einer nach vorne gerichteten Konfiguration verwendet werden, zum Beispiel eine monokulare Kameraplattform, die einen CMOS („Complementary Metal Oxide Semiconductor“) Farbbildgeber einschließt. In mindestens einer Ausführungsform kann eine Weitwinkelkamera 1070 verwendet werden, um Aufgaben wahrzunehmen, die von der Peripherie aus in den Blick kommen (z. B. Fußgänger, kreuzende Verkehrsteilnehmer oder Fahrräder). Obwohl in 10B nur eine Weitwinkelkamera 1070 veranschaulicht ist, kann in anderen Ausführungsformen eine beliebige Anzahl (einschließlich Null) von Weitwinkelkameras am Fahrzeug 1000 vorhanden sein. In mindestens einer Ausführungsform kann eine beliebige Anzahl von Weitwinkelkamera(s) 1098 (z. B. ein Weitwinkel-Stereokamerapaar) zur tiefenbasierten Objekterkennung verwendet werden, insbesondere für Objekte, für die noch kein neuronales Netz trainiert wurde. In mindestens einer Ausführungsform können die Weitwinkelkamera(s) 1098 auch zur Objekterkennung und -klassifizierung sowie zur grundlegenden Objektverfolgung eingesetzt werden.
In mindestens einer Ausführungsform kann auch eine beliebige Anzahl von Stereokameras 1068 in einer nach vorne gerichteten Konfiguration eingeschlossen sein. In mindestens einer Ausführungsform kann eine oder mehrere der Stereokamera(s) 1068 einen integrierten Controller einschließen, die eine skalierbare Verarbeitungseinheit umfasst, die eine programmierbare Logik („FPGA“) und einen Multicore-Mikroprozessor mit einer integrierten Controller Area Network („CAN“) oder Ethernet-Schnittstelle auf einem einzigen Chip bereitstellt. In mindestens einer Ausführungsform kann eine solche Einheit verwendet werden, um eine 3D-Karte der Umgebung des Fahrzeugs 1000 zu erzeugen, die eine Abstandsschätzung für alle Punkte in einem Bild einschließt. In mindestens einer Ausführungsform kann eine oder mehrere der Stereokamera(s) 1068 ohne Einschränkung einen oder mehrere kompakte Stereosicht-Sensoren einschließen, die ohne Einschränkung zwei Kameralinsen (je eine links und rechts) und einen Bildverarbeitungs-Chip einschließen können, der den Abstand zwischen Fahrzeug 1000 und Target Aufgabe misst und die erzeugten Informationen (z. B. Metadaten) verwendet, um autonome Notbrems- und Spurhaltewarnfunktionen zu aktivieren. In mindestens einer Ausführungsform können auch andere Arten von Stereokameras 1068 zusätzlich oder alternativ zu den hier beschriebenen verwendet werden.
In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte der Umgebung seitlich des Fahrzeugs 1000 einschließt (z. B. Seitenkameras), für die Rundumsicht verwendet werden und Informationen bereitstellen, die zum Erstellen und Aktualisieren eines Belegungsgitters sowie zum Erzeugen von Kollisionswarnungen bei Seitenaufprall verwendet werden. Zum Beispiel könnten in mindestens einer Ausführungsform Rundumkamera(s) 1074 (z. B. vier Rundumkameras, wie in 10B veranschaulicht) am Fahrzeug 1000 angebracht sein. In mindestens einer Ausführungsform kann (können) die Rundumkamera(s) 1074 ohne Einschränkung eine beliebige Anzahl und Kombination von Weitwinkelkameras, Fischaugenkameras, 360-Grad-Kameras und/oder ähnlichen Kameras einschließen. Zum Beispiel können in mindestens einer Ausführungsform vier Fischaugenkameras an der Vorderseite, am Heck und an den Seiten des Fahrzeugs 1000 angebracht sein. In mindestens einer Ausführungsform kann das Fahrzeug 1000 drei Rundumkamera(s) 1074 (z. B. links, rechts und hinten) verwenden und eine oder mehrere andere Kamera(s) (z. B. eine nach vorne gerichtete Kamera) als vierte Rundumkamera einsetzen.
In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte der Umgebung hinter dem Fahrzeug 1000 einschließt (z. B. Rückfahrkameras), für Einparkhilfe, Rundumsicht, Heckkollisionswarnungen und das Erstellen und Aktualisieren eines Belegungsgitters verwendet werden. In mindestens einer Ausführungsform kann eine Vielzahl von Kameras verwendet werden, einschließlich, aber nicht beschränkt auf Kameras, die auch als nach vorne gerichtete Kamera(s) geeignet sind (z. B. Kameras mit großer Reichweite 1098 und/oder Kameras mit mittlerer Reichweite 1076, Stereokamera(s) 1068, Infrarotkamera(s) 1072 usw.), wie hier beschrieben.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 10B für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine Komponente, die auf 10B gezeigt oder beschrieben ist, verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 des Fahrzeugs 1000 (bezogen auf 10C als Teil der CPU(s) 1006 und GPU(s) 1008) mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er in Bezug auf eine oder mehrere der 1-6 beschrieben ist.
In mindestens einer Ausführungsform können zusätzlich zu oder alternativ zu CAN auch FlexRay- und/oder Ethernet-Protokolle verwendet werden. In mindestens einer Ausführungsform kann es eine beliebige Anzahl von Bussen geben, die den Bus 1002 bilden, was ohne Einschränkung null oder mehr CAN-Busse, null oder mehr FlexRay-Busse, null oder mehr Ethernet-Busse und/oder null oder mehr andere Arten von Bussen mit unterschiedlichen Protokollen einschließen kann. In mindestens einer Ausführungsform können zwei oder mehr Busse verwendet werden, um unterschiedliche Funktionen durchzuführen und/oder für Redundanz zu sorgen. Zum Beispiel kann ein erster Bus für die Funktion der Kollisionsvermeidung und ein zweiter Bus für die Steuerung der Betätigung verwendet werden. In mindestens einer Ausführungsform kann jeder Bus des Busses 1002 mit einer beliebigen Komponente des Fahrzeugs 1000 kommunizieren, und zwei oder mehr Busse des Busses 1002 können mit entsprechenden Komponenten kommunizieren. In mindestens einer Ausführungsform kann jedes von einer beliebigen Anzahl von System(en) auf Chip(s) („SoC(s)“) 1004 (wie SoC 1004(A) und SoC 1004(B)), jeder der Controller 1036 und/oder jeder Computer innerhalb des Fahrzeugs Zugriff auf dieselben Eingabedaten (z. B. Eingaben von Sensoren des Fahrzeugs 1000) aufweisen und mit einem gemeinsamen Bus, wie dem CAN-Bus, verbunden sein.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 einen oder mehrere Controller 1036 einschließen, wie sie hier in Bezug auf 10A beschrieben sind. In mindestens einer Ausführungsform können die Controller 1036 für eine Vielzahl von Funktionen verwendet werden. In mindestens einer Ausführungsform kann (können) die Controller 1036 mit verschiedenen anderen Komponenten und Systemen des Fahrzeugs 1000 gekoppelt sein und für die Steuerung des Fahrzeugs 1000, die künstliche Intelligenz des Fahrzeugs 1000, das Infotainment des Fahrzeugs 1000 und/oder andere Funktionen verwendet werden.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 eine beliebige Anzahl von SoCs 1004 einschließen. In mindestens einer Ausführungsform kann jeder der SoCs 1004 ohne Einschränkung zentrale Verarbeitungseinheiten („CPU(s)“) 1006, Grafikverarbeitungseinheiten („GPU(s)“) 1008, Prozessor(en) 1010, Cache(s) 1012, Beschleuniger 1014, Datenspeicher 1016 und/oder andere nicht veranschaulichte Komponenten und Merkmale einschließen. In mindestens einer Ausführungsform können SoC(s) 1004 zur Steuerung des Fahrzeugs 1000 in einer Vielzahl von Plattformen und Systemen verwendet werden. Zum Beispiel können in mindestens einer Ausführungsform SoC(s) 1004 in einem System (z. B. dem System von Fahrzeug 1000) mit einer High Definition („HD“)-Karte 1022 kombiniert werden, die über die Netzschnittstelle 1024 von einem oder mehreren Servern (in 10C nicht gezeigt) Aktualisierungen und/oder Updates der Karte erhalten kann.
In mindestens einer Ausführungsform können die CPU(s) 1006 einen CPU-Cluster oder CPU-Komplex (hier alternativ als „CCPLEX“ bezeichnet) einschließen. In mindestens einer Ausführungsform kann (können) die CPU(s) 1006 mehrere Kerne und/oder Caches des Grades zwei („L2“) einschließen. In mindestens einer Ausführungsform kann (können) die CPU(s) 1006 beispielsweise acht Kerne in einer kohärenten Multiprozessorkonfiguration einschließen. In mindestens einer Ausführungsform kann (können) die CPU(s) 1006 vier Dual-Core-Cluster einschließen, wobei jeder Cluster einen dedizierten L2-Cache (z. B. einen 2 Megabyte (MB) L2-Cache) aufweist, In mindestens einer Ausführungsform kann (können) die CPU(s) 1006 (z. B. CCPLEX) so konfiguriert sein, dass sie gleichzeitige Cluster-Operationen unterstützen, so dass jede beliebige Kombination von Clustern der CPU(s) 1006 zu jedem beliebigen Zeitpunkt aktiv sein kann.
In mindestens einer Ausführungsform kann eine oder mehrere der CPU(s) 1006 Fähigkeiten zur Energieverwaltung implementieren, die ohne Einschränkung eine oder mehrere der folgenden Funktionen einschließen: einzelne Hardwareblöcke können im Leerlauf automatisch getaktet werden, um dynamischen Strom zu sparen; jeder Kerntakt kann getaktet werden, wenn ein solcher Kern aufgrund der Ausführung von Wait for Interrupt („WFI“)/Wait for Event („WFE“)-Befehlen nicht aktiv Befehle ausführt; jeder Kern kann unabhängig stromgeführt sein; jeder Kerncluster kann unabhängig getaktet sein, wenn alle Kerne getaktet oder stromgeführt sind; und/oder jeder Kerncluster kann unabhängig stromgeführt sein, wenn alle Kerne stromgeführt sind. In mindestens einer Ausführungsform kann (können) die CPU(s) 1006 ferner einen verbesserten Algorithmus für die Verwaltung von Energiezuständen implementieren, bei dem die zulässigen Energiezustände und die erwarteten Aufwachzeiten festgelegt werden und die Hardware/der Mikrocode bestimmt, welcher Energiezustand für den Kern, den Cluster und CCPLEX am besten einzudringen ist. In mindestens einer Ausführungsform können die verarbeitenden Kerne vereinfachte Sequenzen für den Eintritt in den Energiezustand in Software unterstützen, wobei die Arbeit an den Mikrocode ausgelagert wird.
In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 eine integrierte GPU (hier alternativ als „iGPU“ bezeichnet) einschließen. In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 programmierbar sein und für parallele Arbeitslasten effizient sein. In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 einen erweiterten Tensor-Befehlssatz verwenden. In mindestens einer Ausführungsform kann (können) GPU(s) 1008 einen oder mehrere Streaming-Mikroprozessoren einschließen, wobei jeder Streaming-Mikroprozessor einen L1-Cache (z. B. einen L1-Cache mit einer Speicherkapazität von mindestens 96 KB) einschließen kann und zwei oder mehr Streaming-Mikroprozessoren sich einen L2-Cache (z. B. einen L2-Cache mit einer Speicherkapazität von 512 KB) teilen können. In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 mindestens acht Streaming-Mikroprozessoren einschließen. In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 eine oder mehrere Programmierschnittstellen (API(s)) zum Berechnen von Anwendungen verwenden. In mindestens einer Ausführungsform kann (können) die GPU(s) 1008 eine oder mehrere Plattformen für paralleles Berechnen und/oder Programmiermodelle (z. B. das CUDA-Modell von NVIDIA) verwenden.
In mindestens einer Ausführungsform kann eine oder mehrere der GPU(s) 1008 für die beste Leistung in automobilen und eingebetteten Anwendungsfällen optimiert sein. Zum Beispiel könnte(n) in mindestens einer Ausführungsform die GPU(s) 1008 auf Fin-Feld-Effekt-Transistor-Schaltungen („FinFET“) hergestellt werden. In mindestens einer Ausführungsform kann jeder Streaming-Mikroprozessor eine Anzahl von in mehrere Blöcke unterteilten, gemischt-präzisen Verarbeitungskernen enthalten. Zum Beispiel könnten 64 PF32-Kerne und 32 PF64-Kerne in vier Verarbeitungsblöcke unterteilt werden. In mindestens einer Ausführungsform könnten jedem Verarbeitungsblock 16 FP32-Kerne, 8 FP64-Kerne, 16 INT32-Kerne, zwei NVIDIA Tensor-Kerne mit gemischter Genauigkeit für Deep Learning-Matrixarithmetik, ein Level Zero („L0“) Befehls-Cache, ein Warp-Scheduler, eine Dispatch-Einheit und/oder eine 64 KB große Registerdatei zugewiesen werden. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren unabhängige parallele Ganzzahl- und Gleitkommadatenpfade einschließen, um eine effiziente Ausführung von Arbeitslasten mit einer Mischung aus Berechnungen und Adressierungsberechnungen bereitzustellen. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren eine unabhängige Fähigkeit zum Einplanen von Threads einschließen, um eine feinkörnigere Synchronisierung und Zusammenarbeit zwischen parallelen Threads zu ermöglichen. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren eine kombinierte L1-Datencache- und Speichereinheit-Einheit einschließen, um die Leistung zu verbessern und gleichzeitig die Programmierung zu vereinfachen.
In mindestens einer Ausführungsform kann eine oder mehrere der GPU(s) 1008 einen Speicher mit hoher Bandbreite („HBM“) und/oder ein 16 GB HBM2 Speicher-Subsystem einschließen, um in einigen Beispielen eine Peak-Speicherbandbreite von etwa 900 GB/Sekunde bereitzustellen. In mindestens einer Ausführungsform kann zusätzlich oder alternativ zum HBM-Speicher ein synchroner Grafik-Direktzugriffsspeicher („SGRAM“) verwendet werden, wie z. B. ein synchroner Grafik-Doppeldatenraten-Direktzugriffsspeicher vom Typ fünf („GDDR5“).
In mindestens einer Ausführungsform können die GPU(s) 1008 die Unified Memory-Technologie einschließen. In mindestens einer Ausführungsform kann die Unterstützung von Adressübersetzungsdiensten („ATS“) verwendet werden, damit die GPU(s) 1008 direkt auf Seitentabellen der CPU(s) 1006 zugreifen kann. In mindestens einer Ausführungsform kann eine Adressübersetzungsanforderung an die CPU(s) 1006 übertragen werden, wenn bei einer GPU von GPU(s) 1008 der Speicherverwaltungseinheit („MMU“) ein Fehler auftritt. In mindestens einer Ausführungsform kann 2 CPU der CPU(s) 1006 in ihren Seitentabellen nach einer virtuellphysikalischen Abbildung für eine Adresse suchen und die Übersetzung zurück an die GPU(s) 1008 übertragen. In mindestens einer Ausführungsform kann die Unified-Memory-Technologie einen einzigen einheitlichen virtuellen Adressraum für den Speicher sowohl der CPU(s) 1006 als auch der GPU(s) 1008 ermöglichen, wodurch die Programmierung der GPU(s) 1008 und der Anschluss von Anwendungen an die GPU(s) 1008 vereinfacht wird.
In mindestens einer Ausführungsform kann die GPU(s) 1008 eine beliebige Anzahl von Zugriffszählern einschließen, die die Häufigkeit des Zugriffs der GPU(s) 1008 auf den Speicher anderer Prozessoren verfolgen können. In mindestens einer Ausführungsform können Zugriffszähler dazu beitragen, dass Speicherseiten in den physischen Speicher eines Prozessors verschoben werden, der am häufigsten auf Seiten zugreift, wodurch die Effizienz von Speicherbereichen, die von Prozessoren gemeinsam genutzt werden, verbessert wird.
In mindestens einer Ausführungsform kann einer oder mehrere der SoC(s) 1004 eine beliebige Anzahl von Cache(s) 1012 einschließen, einschließlich der hierin beschriebenen. Zum Beispiel könnte(n) der (die) Cache(s) 1012 in mindestens einer Ausführungsform einen Cache des Grades drei („L3“) einschließen, der sowohl der (den) CPU(s) 1006 als auch der (den) GPU(s) 1008 zur Verfügung steht (z. B. an die CPU(s) 1006 und die GPU(s) 1008 angeschlossen ist). In mindestens einer Ausführungsform kann (können) der (die) Cache(s) 1012 einen Write-Back-Cache einschließen, der die Zustände der Zeilen verfolgen kann, z. B. durch Verwendung eines Cache-Kohärenzprotokolls (z. B. MEI, MESI, MSI usw.). In mindestens einer Ausführungsform kann ein L3-Cache je nach Ausführungsform 4 MB Speicher oder mehr einschließen, obwohl auch kleinere Cache-Größen verwendet werden können.
In mindestens einer Ausführungsform kann einer oder mehrere der SoC(s) 1004 einen oder mehrere Beschleuniger 1014 (z. B. Hardware-Beschleuniger, Software-Beschleuniger oder eine Kombination davon) einschließen. In mindestens einer Ausführungsform kann (können) der (die) SoC(s) 1004 einen Hardware-Beschleunigungs-Cluster einschließen, der optimierte Hardware-Beschleuniger und/oder einen großen On-Chip-Speicher schließen kann. In mindestens einer Ausführungsform kann ein großer On-Chip-Speicher (z. B. 4 MB SRAM) einen Hardware-Beschleunigungscluster in die Lage versetzen, neuronale Netze und andere Berechnungen zu beschleunigen. In mindestens einer Ausführungsform kann ein Hardware-Beschleunigungscluster zur Ergänzung der GPU(s) 1008 und zur Entlastung einiger Aufgaben der GPU(s) 1008 verwendet werden (z. B. um mehr Zyklen der GPU(s) 1008 für das Durchführen anderer Aufgaben freizugeben). In mindestens einer Ausführungsform könnte(n) der/die Beschleuniger 1014 für Target-Workloads (z. B. Wahrnehmung, konvolutive neuronale Netze („CNNs“), rekurrente neuronale Netze („RNNs“) usw.) verwendet werden, die stabil genug sind, um für eine Beschleunigung in Frage zu kommen. In mindestens einer Ausführungsform kann ein CNN ein auf Regionen basierendes oder regionales Faltungsneuronales Netz („RCNN“) und Fast RCNN (z. B. wie es für die Objekterkennung verwendet wird) oder eine andere Art von CNN einschließen.
In mindestens einer Ausführungsform können der oder die Beschleuniger 1014 (z. B. Hardware-Beschleunigungscluster) einen oder mehrere Deep Learning-Beschleuniger („DLA“) einschließen. In mindestens einer Ausführungsform kann (können) der (die) DLA(s) ohne Einschränkung eine oder mehrere Tensor Processing Units („TPUs“) einschließen, die so konfiguriert sein können, dass sie zusätzliche zehn Billionen Operationen pro Sekunde für Deep Learning-Anwendungen und Ableitungen bereitstellen. In mindestens einer Ausführungsform können TPUs Beschleuniger sein, die so konfiguriert und optimiert sind, dass sie Bildverarbeitungsfunktionen (z. B. für CNNs, RCNNs usw.) durchführen. In mindestens einer Ausführungsform können DLA(s) ferner für einen bestimmten Satz von Typen neuronaler Netze und Gleitkommaoperationen sowie für Ableitungen optimiert sein. In mindestens einer Ausführungsform kann das Design von DLA(s) mehr Leistung pro Millimeter bereitstellen als ein typischer Allzweck-GPU und übertrifft die Leistung einer CPU in der Regel bei weitem. In mindestens einer Ausführungsform kann (können) die TPU(s) mehrere Funktionen durchführen, einschließlich einer Faltungsfunktion für eine einzige Instanz, die zum Beispiel INT8-, INT16- und FP16-Datentypen sowohl für Merkmale als auch für Gewichte sowie Postprozessorfunktionen einschließt. In mindestens einer Ausführungsform können DLA(s) schnell und effizient neuronale Netze, insbesondere CNNs, auf verarbeiteten oder unverarbeiteten Daten für eine Vielzahl von Aufgaben ausführen, einschließlich, zum Beispiel und ohne Einschränkung: ein CNN für die Identifizierung und Erkennung von Objekten unter Bezugnahme auf Daten von Kamerasensoren; ein CNN für die Abstandsschätzung unter Bezugnahme auf Daten von Kamerasensoren; ein CNN für die Erkennung und Identifizierung von Einsatzfahrzeugen und die Erkennung unter Bezugnahme auf Daten von Mikrofonen; ein CNN für die Gesichtserkennung und die Identifizierung von Fahrzeugbesitzern unter Bezugnahme auf Daten von Kamerasensoren; und/oder ein CNN für sicherheitsbezogene Ereignisse.
In mindestens einer Ausführungsform können DLA(s) jede Funktion der GPU(s) 1008 durchführen, und durch die Verwendung eines Ableitungsbeschleunigers kann ein Designer beispielsweise entweder DLA(s) oder GPU(s) 1008 für jede Funktion ansteuern. Zum Beispiel kann ein Designer in mindestens einer Ausführungsform die Verarbeitung von CNNs und Gleitkommaoperationen auf DLA(s) konzentrieren und andere Funktionen der GPU(s) 1008 und/oder dem/den Beschleuniger(n) 1014 überlassen.
In mindestens einer Ausführungsform kann der (die) Beschleuniger 1014 einen programmierbaren Bildverarbeitungsbeschleuniger („PVA“) einschließen, der hier auch als Computer Vision Accelerator bezeichnet werden kann. In mindestens einer Ausführungsform kann der PVA so ausgelegt und konfiguriert sein, dass er Computer-Vision-Algorithmen für fortgeschrittene Fahrerassistenzsysteme („ADAS“) 1038, autonomes Fahren, Augmented Reality („AR“)-Anwendungen und/oder Virtual Reality („VR“)-Anwendungen beschleunigt. In mindestens einer Ausführungsform kann die PVA ein Gleichgewicht zwischen Leistung und Flexibilität bereitstellen. Zum Beispiel kann in mindestens einer Ausführungsform jede PVA zum Beispiel und ohne Einschränkung eine beliebige Anzahl von Rechenkernen mit reduziertem Befehlssatz („RISC“), direkten Speicherzugriff („DMA“) und/oder eine beliebige Anzahl von Vektorprozessoren einschließen.
In mindestens einer Ausführungsform können die RISC-Kerne mit Bildsensoren (z. B. den Bildsensoren der hier beschriebenen Kameras), Bildsignalprozessoren usw. interagieren. In mindestens einer Ausführungsform kann jeder RISC-Kern eine beliebige Menge an Speicher einschließen. In mindestens einer Ausführungsform können die RISC-Kerne je nach Ausführungsform eine Reihe von Protokollen verwenden. In mindestens einer Ausführungsform können RISC-Kerne ein Echtzeit-Betriebssystem („RTOS“) ausführen. In mindestens einer Ausführungsform können RISC-Cores mit einer oder mehreren integrierten Schaltkreisvorrichtungen, anwendungsspezifischen integrierten Schaltkreisen („ASICs“) und/oder Speichervorrichtungen implementiert werden. Zum Beispiel könnten RISC-Cores in mindestens einer Ausführungsform einen Anweisungs-Cache und/oder einen eng gekoppelten RAM einschließen.
In mindestens einer Ausführungsform kann DMA Komponenten der PVA ermöglichen, unabhängig von der/den CPU(s) 1006 auf den Systemspeicher zuzugreifen. In mindestens einer Ausführungsform kann DMA eine beliebige Anzahl von Funktionen unterstützen, die der Optimierung einer PVA dienen, einschließlich, aber nicht beschränkt auf das Halten von mehrdimensionaler Adressierung und/oder zirkulärer Adressierung. In mindestens einer Ausführungsform kann DMA bis zu sechs oder mehr Dimensionen der Adressierung unterstützen, die ohne Einschränkung Blockbreite, Blockhöhe, Blocktiefe, horizontale Blockschritte, vertikale Blockschritte und/oder Tiefenschritte einschließen können.
In mindestens einer Ausführungsform können Vektorprozessoren programmierbare Prozessoren sein, die so ausgelegt sein können, dass sie die Programmierung für Computer-Vision-Algorithmen effizient und flexibel ausführen und Signalverarbeitungsfunktionen bereitstellen. In mindestens einer Ausführungsform kann eine PVA einen PVA-Kern und zwei Partitionen des vektorverarbeitenden Subsystems einschließen. In mindestens einer Ausführungsform kann ein PVA-Kern ein Prozessor-Subsystem, DMA Engine(s) (z. B. zwei DMA Engines) und/oder andere Peripheriegeräte einschließen. In mindestens einer Ausführungsform kann ein Vektorverarbeitungs-Subsystem als primäre Engine einer PVA arbeiten und eine Vektorverarbeitungseinheit („VPU“), einen Befehlscache und/oder einen Vektorspeicher (z. B. „VMEM“) einschließen. In mindestens einer Ausführungsform kann der VPU-Kern einen digitalen Signalprozessor einschließen, wie zum Beispiel einen digitalen Signalprozessor mit einer einzigen Anweisung, mehreren Daten („SIMD“) und sehr langen Anweisungsworten („VLIW“). In mindestens einer Ausführungsform kann eine Kombination aus SIMD und VLIW den Durchsatz und die Geschwindigkeit erhöhen.
In mindestens einer Ausführungsform kann jeder der Vektorprozessoren einen Anweisungs-Cache einschließen und mit einem dedizierten Speicher verbunden sein. Daher kann in mindestens einer Ausführungsform jeder Vektorprozessor so konfiguriert sein, dass er unabhängig von anderen Vektorprozessoren ausgeführt wird. In mindestens einer Ausführungsform können Vektorprozessoren, die in einer bestimmten PVA eingeschlossen sind, so konfiguriert sein, dass sie Datenparallelität verwenden. Zum Beispiel kann in mindestens einer Ausführungsform eine Vielzahl von Vektorprozessoren, die in eine einzige PVA eingeschlossen sind, einen gemeinsamen Computer-Vision-Algorithmus ausführen, jedoch für verschiedene Regionen eines Bildes. In mindestens einer Ausführungsform können Vektorprozessoren, die in eine bestimmte PVA eingeschlossen sind, gleichzeitig verschiedene Computer-Vision-Algorithmen auf einem Bild ausführen oder sogar verschiedene Algorithmen auf aufeinanderfolgenden Bildern oder Abschnitten eines Bildes ausführen. In mindestens einer Ausführungsform kann unter anderem eine beliebige Anzahl von PVAs in einem Hardware-Beschleunigungscluster eingeschlossen sein und eine beliebige Anzahl von Vektorprozessoren in jeder PVA. In mindestens einer Ausführungsform kann die PVA einen zusätzlichen Speicher mit Fehlerkorrekturcode („ECC“) einschließen, um die Sicherheit des Systems insgesamt zu erhöhen.
In mindestens einer Ausführungsform kann der/die Beschleuniger 1014 ein Computer Vision Netz auf dem Chip und einen statischen Direktzugriffsspeicher („SRAM“) einschließen, um einen SRAM mit hoher Bandbreite und geringer Latenz für den/die Beschleuniger 1014 bereitzustellen. In mindestens einer Ausführungsform kann der On-Chip-Speicher mindestens 4 MB SRAM umfassen, der zum Beispiel und ohne Einschränkung acht feldkonfigurierbare Speicherblöcke einschließt, auf die sowohl ein PVA als auch ein DLA zugreifen kann. In mindestens einer Ausführungsform kann jedes Paar von Speicherblöcken eine fortgeschrittene Peripheriebus-Schnittstelle („APB“), Konfigurationsschaltungen, einen Controller und einen Multiplexer einschließen. In mindestens einer Ausführungsform kann jeder beliebige Speichertyp verwendet werden. In mindestens einer Ausführungsform können eine PVA und eine DLA über einen Backbone auf den Speicher zugreifen, der einer PVA und einer DLA einen Hochgeschwindigkeitszugriff auf den Speicher bereitstellt. In mindestens einer Ausführungsform kann ein Backbone ein Computer Vision Netz auf dem Chip einschließen, das eine PVA und eine DLA mit dem Speicher verbindet (z. B. mit APB).
In mindestens einer Ausführungsform kann ein Computer Vision Netz auf dem Chip eine Schnittstelle einschließen, die vor der Übertragung von Steuersignalen/Adressen/Daten bestimmt, dass sowohl eine PVA als auch eine DLA einsatzbereite und gültige Signale bereitstellen. In mindestens einer Ausführungsform kann eine Schnittstelle getrennte Phasen und getrennte Kanäle für die Übertragung von Steuersignalen/Adressen/Daten sowie eine Burst-Kommunikation für die kontinuierliche Datenübertragung bereitstellen. In mindestens einer Ausführungsform kann eine Schnittstelle den Standards der International Organization for Standardization („ISO“) 26262 oder der International Electrotechnical Commission („IEC“) 61508 entsprechen, obwohl auch andere Standards und Protokolle verwendet werden können.
In mindestens einer Ausführungsform kann einer oder mehrere der SoC(s) 1004 einen Hardware-Beschleuniger für Echtzeit-Raytracing einschließen. In mindestens einer Ausführungsform kann der Hardware-Beschleuniger für Echtzeit-Raytracing dazu verwendet werden, schnell und effizient Positionen und Ausdehnungen von Aufgaben (z. B. innerhalb eines Weltmodells) zu bestimmen, Echtzeit-Visualisierungssimulationen zu erzeugen, RADAR-Signale zu interpretieren, die Ausbreitung von Schall zu synthetisieren und/oder zu analysieren, SONAR-Systeme zu simulieren, die Ausbreitung von Wellen im Allgemeinen zu simulieren, LIDAR-Daten für Lokalisierungszwecke und/oder andere Funktionen zu vergleichen und/oder für andere Zwecke zu verwenden.
In mindestens einer Ausführungsform kann der/die Beschleuniger 1014 ein breites Array an Verwendungsmöglichkeiten für das autonome Fahren aufweisen. In mindestens einer Ausführungsform kann ein PVA für wichtige Verarbeitungsschritte in ADAS und autonomen Fahrzeugen verwendet werden. In mindestens einer Ausführungsform sind die Fähigkeiten einer PVA gut auf algorithmische Domänen abgestimmt, die eine vorhersagbare Verarbeitung bei geringem Stromverbrauch und niedriger Latenz benötigen. Mit anderen Worten, eine PVA führt gut halbdichte oder dichte reguläre Berechnungen durch, selbst bei kleinen Datensätzen, die vorhersehbare Laufzeiten mit geringer Latenz und geringem Stromverbrauch erfordern. In mindestens einer Ausführungsform, wie z. B. in Fahrzeug 1000, könnten PVAs so ausgelegt sein, dass sie klassische Computer-Vision-Algorithmen ausführen, da sie bei der Erkennung von Objekten und der Operation von ganzzahligen Rechenoperationen effizient sind.
Zum Beispiel wird gemäß mindestens einer Ausführungsform der Technologie eine PVA verwendet, um Computer-Stereo-Vision durchzuführen. In mindestens einer Ausführungsform kann in einigen Beispielen ein auf semiglobalem Abgleich basierender Algorithmus verwendet werden, wobei dies nicht als Einschränkung gedacht ist. In mindestens einer Ausführungsform verwenden Anwendungen für das autonome Fahren der Grade 3-5 die Bewegungsabschätzung/den Stereoabgleich on-the-fly (z. B. Struktur aus Bewegung, Fußgängererkennung, Fahrspurerkennung usw.). In mindestens einer Ausführungsform kann eine PVA Computer-Stereo-Vision-Funktionen für Eingaben von zwei monokularen Kameras durchführen.
In mindestens einer Ausführungsform kann eine PVA verwendet werden, um einen dichten optischen Fluss durchzuführen. Zum Beispiel könnte eine PVA in mindestens einer Ausführungsform RADAR-Rohdaten verarbeiten (z. B. mit einer 4D Fast Fourier Transformation), um verarbeitete RADAR-Daten bereitzustellen. In mindestens einer Ausführungsform wird eine PVA für die Flugzeittiefenverarbeitung verwendet, indem sie Flugzeit-Rohdaten verarbeitet, um zum Beispiel verarbeitete Flugzeitdaten bereitzustellen.
In mindestens einer Ausführungsform kann ein DLA verwendet werden, um jede Art von Netz zu betreiben, um die Kontrolle und die Fahrsicherheit zu verbessern, einschließlich zum Beispiel und ohne Einschränkung ein neuronales Netz, das ein Maß für das Vertrauen für jede Objekterkennung ausgibt. In mindestens einer Ausführungsform kann die Konfidenz als Wahrscheinlichkeit dargestellt oder interpretiert werden, oder als Bereitstellen einer relativen „Gewichtung“ jeder Erkennung im Vergleich zu anderen Erkennungen. In mindestens einer Ausführungsform ermöglicht ein Vertrauensmaß dem System, weitere Entscheidungen darüber zu treffen, welche Erkennungen als echte positive Erkennungen und nicht als falsch positive Erkennungen betrachtet werden sollten. In mindestens einer Ausführungsform kann ein System einen Schwellenwert für die Konfidenz festlegen und nur Erkennungen, die den Schwellenwert überschreiten, als echte positive Erkennungen betrachten. In einer Ausführungsform, in der ein automatisches Notbremssystem („AEB“) verwendet wird, würden falsch positive Erkennungen dazu führen, dass das Fahrzeug automatisch eine Notbremsung durchführt, was natürlich unerwünscht ist. In mindestens einer Ausführungsform können sehr sichere Erkennungen als Auslöser für AEB betrachtet werden. In mindestens einer Ausführungsform kann ein DLA ein neuronales Netz zur Regression des Konfidenzwertes einsetzen. In mindestens einer Ausführungsform kann das neuronale Netz als Eingabe mindestens eine Teilmenge von Parametern verwenden, wie z. B. die Abmessungen der Begrenzungsbox, die (z. B. von einem anderen Teilsystem) erhaltene Bodenschätzung, die Ausgabe des/der IMU-Sensors/en 1066, die mit der Ausrichtung des Fahrzeugs 1000 korreliert, den Abstand und die 3D-Positionsschätzungen der Aufgabe, die vom neuronalen Netz und/oder anderen Sensoren (z. B. LIDAR-Sensor/en 1064 oder RADAR-Sensor/en 1060) erhalten wurden, und andere.
In mindestens einer Ausführungsform kann ein oder mehrere SoC(s) 1004 den/die Datenspeicher 1016 (z. B. Speicher) einschließen. In mindestens einer Ausführungsform kann es sich bei dem/den Datenspeicher(n) 1016 um einen On-Chip-Speicher des/der SoC(s) 1004 handeln, in dem neuronale Netze gespeichert werden können, die auf der/den GPU(s) 1008 und/oder einer DLA ausgeführt werden. In mindestens einer Ausführungsform kann (können) der (die) Datenspeicher 1016 groß genug sein, um mehrere Instanzen neuronaler Netze zur Redundanz und Sicherheit zu speichern. In mindestens einer Ausführungsform kann/können der/die Datenspeicher 1016 L2 oder L3 Cache(s) umfassen.
In mindestens einer Ausführungsform kann ein oder mehrere SoC(s) 1004 eine beliebige Anzahl von Prozessor(en) 1010 (z. B. eingebettete Prozessoren) einschließen. In mindestens einer Ausführungsform kann (können) der (die) Prozessor(en) 1010 einen Boot- und Energieverwaltungsprozessor einschließen, bei dem es sich um einen dedizierten Prozessor und ein Subsystem handeln kann, der (die) die Boot-Energieversorgung und die Verwaltungsfunktionen sowie die damit verbundene Sicherheitsdurchsetzung übernimmt. In mindestens einer Ausführungsform kann ein Boot- und Energieverwaltungsprozessor Teil einer Boot-Sequenz von SoC(s) 1004 sein und Laufzeit-Energieverwaltungsdienste bereitstellen. In mindestens einer Ausführungsform kann ein Boot- und Energieverwaltungsprozessor die Takt- und Spannungsprogrammierung, die Unterstützung bei Übergängen des Systems in einen Zustand mit geringem Stromverbrauch, die Verwaltung der Thermik und der Temperatursensoren des SoC(s) 1004 und/oder die Verwaltung der Energiezustände des SoC(s) 1004 bereitstellen. In mindestens einer Ausführungsform kann jeder Temperatursensor als Ringoszillator implementiert sein, dessen Ausgangsfrequenz proportional zur Temperatur ist, und SoC(s) 1004 kann Ringoszillatoren verwenden, um die Temperaturen von CPU(s) 1006, GPU(s) 1008 und/oder Beschleuniger(n) 1014 zu erkennen. Wenn in mindestens einer Ausführungsform bestimmt wird, dass die Temperaturen einen Schwellenwert überschreiten, kann ein Boot- und Energieverwaltungsprozessor in eine Temperaturfehlerroutine eindringen und die SoC(s) 1004 in einen Zustand mit geringerer Leistung versetzen und/oder das Fahrzeug 1000 in einen Chauffeur-zu-sicherem-Halt-Modus versetzen (z. B. das Fahrzeug 1000 zu einem sicheren Halt bringen).
In mindestens einer Ausführungsform kann (können) der (die) Prozessor(en) 1010 ferner eine Reihe von eingebetteten Prozessoren einschließen, die als Audioverarbeitungsengine dienen können, bei der es sich um ein Audio-Subsystem handeln kann, das eine vollständige Hardwareunterstützung für Mehrkanal-Audio über mehrere Schnittstellen und eine breite und flexible Palette von Audio-E/A-Schnittstellen ermöglicht. In mindestens einer Ausführungsform ist eine Audio Processing Engine ein dedizierter Prozessorkern mit einem digitalen Signalprozessor mit dediziertem RAM.
In mindestens einer Ausführungsform kann der/die Prozessor(en) 1010 ferner eine „always on“-Prozessorengine einschließen, die die notwendigen Hardware-Funktionen bereitstellt, um eine stromsparende Sensorverwaltung und Wake-Use-Cases zu unterstützen. In mindestens einer Ausführungsform kann eine „always on“-Prozessorengine ohne Einschränkung einen Prozessorkern, ein eng gekoppeltes RAM, unterstützende Peripheriegeräte (z. B. Timer und Interrupt-Controller), verschiedene E/A-Controller-Peripheriegeräte und eine Routing-Logik einschließen.
In mindestens einer Ausführungsform kann der/die Prozessor(en) 1010 ferner eine Safety Cluster Engine einschließen, die ohne Einschränkung ein dediziertes Prozessor-Subsystem einschließt, um die Sicherheitsverwaltung für automobile Anwendungen zu übernehmen. In mindestens einer Ausführungsform kann eine Safety Cluster Engine ohne Einschränkung zwei oder mehr Prozessorkerne, ein eng gekoppeltes RAM, unterstützende Peripheriegeräte (z. B. Timer, einen Interrupt-Controller usw.) und/oder eine Routing-Logik einschließen. In einem Sicherheitsmodus können zwei oder mehr Kerne in mindestens einer Ausführungsform in einem Lockstep-Modus arbeiten und als ein einziger Kern mit einer Vergleichslogik funktionieren, um etwaige Unterschiede zwischen ihren Operationen zu erkennen. In mindestens einer Ausführungsform kann (können) der (die) Prozessor(en) 1010 ferner eine Echtzeit-Kamera Engine einschließen, die ohne Einschränkung ein dediziertes Prozessor-Subsystem für die Verwaltung der Echtzeit-Kamera einschließen kann. In mindestens einer Ausführungsform kann (können) der (die) Prozessor(en) 1010 ferner einen Signalprozessor mit hohem Dynamikbereich einschließen, der ohne Einschränkung einen Bildsignalprozessor einschließt, der eine Hardware Engine ist, die Teil einer Kameraverarbeitungspipeline ist.
In mindestens einer Ausführungsform kann (können) der (die) Prozessor(en) 1010 einen Videobildkompositor einschließen, der ein Verarbeitungsblock sein kann (z. B. auf einem Mikroprozessor implementiert), der Videonachbearbeitungsfunktionen implementiert, die von einer Videowiedergabeanwendung benötigt werden, um ein endgültiges Bild für ein Player-Fenster zu erzeugen. In mindestens einer Ausführungsform kann ein Videobildkompositor eine Korrektur der Verzerrung der Linse an der/den Weitwinkelkamera(s) 1070, der/den Rundumkamera(s) 1074 und/oder an den Sensoren der Überwachungskamera(s) in der Kabine durchführen. In mindestens einer Ausführungsform werden der oder die Kamerasensoren für die Überwachung in der Kabine vorzugsweise von einem neuronalen Netz überwacht, das auf einer weiteren Instanz des SoC 1004 läuft und so konfiguriert ist, dass es Ereignisse in der Kabine identifiziert und entsprechend reagiert. In mindestens einer Ausführungsform kann ein System im Fahrzeuginneren ohne Einschränkung Lippenlesen durchführen, um den Mobilfunkdienst zu aktivieren und einen Anruf zu tätigen, E-Mails zu diktieren, das Fahrtziel zu ändern, das Infotainmentsystem und die Einstellungen des Fahrzeugs zu aktivieren oder zu verändern oder sprachgesteuertes Surfen im Internet bereitzustellen. In mindestens einer Ausführungsform stehen dem Fahrer bestimmte Funktionen zur Verfügung, wenn ein Fahrzeug in einem autonomen Modus betrieben wird, und sind ansonsten deaktiviert.
In mindestens einer Ausführungsform kann ein Videobildkompositor eine verbesserte zeitliche Rauschunterdrückung sowohl für die räumliche als auch für die zeitliche Rauschunterdrückung einschließen. Zum Beispiel gewichtet die Rauschunterdrückung in mindestens einer Ausführungsform bei Bewegung in einem Video die räumlichen Informationen entsprechend und verringert die Gewichtung der Informationen, die von benachbarten Bildern bereitgestellt werden. In mindestens einer Ausführungsform, in der ein Bild oder ein Abschnitt eines Bildes keine Bewegung einschließt, kann die vom Videobildkompositor durchgeführte zeitliche Rauschunterdrückung Informationen aus einem früheren Bild verwenden, um das Rauschen in einem aktuellen Bild zu reduzieren.
In mindestens einer Ausführungsform kann ein Videobildkompositor auch so konfiguriert sein, dass er eine Stereorektifizierung an eingegebenen Stereo-Linsenbildern durchführt. In mindestens einer Ausführungsform kann ein Videobildkompositor ferner für die Zusammensetzung der Benutzeroberfläche verwendet werden, wenn ein Desktop des Betriebssystems in Betrieb ist und die GPU(s) 1008 nicht ständig neue Oberflächen rendern müssen. In mindestens einer Ausführungsform kann ein Videobildkompositor verwendet werden, um die GPU(s) 1008 zu entlasten und so die Leistung und Reaktionsfähigkeit zu verbessern, wenn die GPU(s) 1008 eingeschaltet und aktiv sind und 3D-Rendering durchführen.
In mindestens einer Ausführungsform kann ein oder mehrere SoC(s) 1004 ferner eine serielle MIPI-Kameraschnittstelle zum Empfangen von Video und Eingaben von Kameras, eine Hochgeschwindigkeitsschnittstelle und/oder einen Videoeingabeblock einschließen, der für eine Kamera und damit verbundene Pixeleingabefunktionen verwendet werden kann. In mindestens einer Ausführungsform können einer oder mehrere der SoC(s) 1004 ferner einen oder mehrere Eingabe/Ausgabe-Controller einschließen, die durch Software gesteuert werden können und zum Empfangen von E/A-Signalen verwendet werden können, die nicht an eine bestimmte Rolle gebunden sind.
In mindestens einer Ausführungsform kann ein oder mehrere SoC(s) 1004 ferner eine breite Palette von Peripherieschnittstellen einschließen, um die Kommunikation mit Peripheriegeräten, Audio-Kodierern/Dekodierern („Codecs“), der Energieverwaltung und/oder anderen Vorrichtungen zu ermöglichen. In mindestens einer Ausführungsform können SoC(s) 1004 verwendet werden, um Daten von Kameras (z. B. über Gigabit Multimedia Serial Link und Ethernet-Kanäle), Sensoren (z. B, LIDAR-Sensor(en) 1064, RADAR-Sensor(en) 1060 usw., die über Ethernet-Kanäle angeschlossen sein können), Daten vom Bus 1002 (z. B. Geschwindigkeit des Fahrzeugs 1000, Lenkradposition usw.), Daten von GNSS-Sensor(en) 1058 (z. B. über einen Ethernet-Bus oder einen CAN-Bus angeschlossen) usw. In mindestens einer Ausführungsform können ein oder mehrere SoC von SoC(s) 1004 ferner dedizierte Hochleistungs-Controller für die Massenspeicherung einschließen, die ihre eigenen DMA-Engines schließen und dazu verwendet werden können, die CPU(s) 1006 von Routineaufgaben der Datenverwaltung zu entlasten.
In mindestens einer Ausführungsform kann (können) der (die) SoC(s) 1004 eine End-to-End-Plattform mit einer flexiblen Architektur sein, die die Automatisierungsstufen 3-5 abdeckt und dadurch eine umfassende funktionale Sicherheitsarchitektur bereitstellt, die Computer-Vision- und ADAS-Techniken für Diversität und Redundanz nutzt und eine Plattform für einen flexiblen, zuverlässigen Fahrsoftware-Stack bereitstellt, zusammen mit Deep Learning-Tools. In mindestens einer Ausführungsform können die SoC(s) 1004 schneller, zuverlässiger und sogar energie- und platzsparender sein als herkömmliche Systeme. Zum Beispiel kann in mindestens einer Ausführungsform der/die Beschleuniger 1014, wenn er/sie mit der/den CPU(s) 1006, der/den GPU(s) 1008 und dem/den Datenspeicher(n) 1016 kombiniert ist/sind, eine schnelle, effiziente Plattform für autonome Fahrzeuge der Grade 3-5 bereitstellen.
In mindestens einer Ausführungsform können Computer-Vision-Algorithmen auf CPUs ausgeführt werden, die mit einer Hochsprachenprogrammierung, wie z. B. C, konfiguriert werden können, um eine Vielzahl von Verarbeitungsalgorithmen für eine Vielzahl von visuellen Daten auszuführen. In mindestens einer Ausführungsform sind CPUs jedoch oft nicht in der Lage, die Leistungsanforderungen vieler Computer Vision Anwendungen zu erfüllen, beispielsweise in Bezug auf die Ausführungszeit und den Stromverbrauch. In mindestens einer Ausführungsform sind viele CPUs nicht in der Lage, komplexe Algorithmen zur Objekterkennung in Echtzeit auszuführen, die in fahrzeuginternen ADAS-Anwendungen und in praktischen autonomen Fahrzeugen der Stufen 3-5 verwendet werden.
Die hier beschriebenen Ausführungsformen ermöglichen es, mehrere neuronale Netze gleichzeitig und/oder nacheinander durchzuführen und die Ergebnisse miteinander zu kombinieren, um die Funktionalität des autonomen Fahrens der Grade 3-5 zu ermöglichen. Zum Beispiel kann in mindestens einer Ausführungsform ein CNN, das auf einem DLA oder einer diskreten GPU (z. B. GPU(s) 1020) ausgeführt wird, eine Text- und Worterkennung aufweisen, die das Lesen und Verstehen von Verkehrsschildern ermöglicht, einschließlich Schildern, für die ein neuronales Netz nicht speziell trainiert wurde. In mindestens einer Ausführungsform kann ein DLA ferner ein neuronales Netz einschließen, das in der Lage ist, ein Zeichen zu identifizieren, zu interpretieren und ein semantisches Verständnis bereitzustellen und dieses semantische Verständnis an Wegplanungsmodule weiterzugeben, die auf einem CPU-Komplex laufen.
In mindestens einer Ausführungsform können mehrere neuronale Netze gleichzeitig laufen, wie beim Fahren der Grade 3, 4 oder 5. Zum Beispiel kann in mindestens einer Ausführungsform ein Warnschild mit der Aufschrift „Vorsicht: Blinkende Lichter weisen auf Vereisung hin“ zusammen mit einem elektrischen Licht unabhängig oder gemeinsam von mehreren neuronalen Netzen interpretiert werden. In mindestens einer Ausführungsform kann ein solches Warnschild selbst von einem ersten eingesetzten neuronalen Netz (z. B. einem trainierten neuronalen Netz) als Verkehrszeichen identifiziert werden. Der Text „Blinkende Lichter deuten auf Glatteis hin“ kann von einem zweiten eingesetzten neuronalen Netz interpretiert werden, das die Wegplanungssoftware eines Fahrzeugs (die vorzugsweise auf einem CPU-Komplex ausgeführt wird) darüber informiert, dass, wenn blinkende Lichter erkannt werden, Glatteis vorliegt. In mindestens einer Ausführungsform kann ein Blinklicht identifiziert werden, indem ein drittes neuronales Netz über mehrere Bilder hinweg betrieben wird, das die Wegplanungssoftware eines Fahrzeugs über die Anwesenheit (oder das Fehlen) von Blinklichtern informiert. In mindestens einer Ausführungsform können alle drei neuronalen Netze gleichzeitig laufen, z. B. innerhalb einer DLA und/oder auf GPU(s) 1008.
In mindestens einer Ausführungsform kann ein CNN zur Gesichtserkennung und zur Identifizierung des Fahrzeugbesitzers Daten von Kamerasensoren verwenden, um die Anwesenheit eines autorisierten Fahrers und/oder Besitzers des Fahrzeugs 1000 zu identifizieren. In mindestens einer Ausführungsform kann eine Engine zur Verarbeitung von Sensoren, die immer eingeschaltet sind, verwendet werden, um ein Fahrzeug zu entsperren, wenn sich ein Besitzer der Fahrertür nähert und das Licht einschaltet, und in einem Sicherheitsmodus, um das Fahrzeug zu deaktivieren, wenn der Besitzer das Fahrzeug verlässt. Auf diese Weise stellen die SoC(s) 1004 Sicherheit gegen Diebstahl und/oder Carjacking bereit.
In mindestens einer Ausführungsform kann ein CNN zur Erkennung und Identifizierung von Einsatzfahrzeugen Daten von Mikrofonen 1096 verwenden, um Sirenen von Einsatzfahrzeugen zu erkennen und zu identifizieren. In mindestens einer Ausführungsform verwenden die SoC(s) 1004 ein CNN zur Klassifizierung von Umwelt- und Stadtgeräuschen sowie zur Klassifizierung visueller Daten. In mindestens einer Ausführungsform wird ein CNN, das auf einem DLA läuft, darauf trainiert, eine relative Annäherungsgeschwindigkeit eines Einsatzfahrzeugs zu identifizieren (z. B. unter Verwendung eines Dopplereffekts). In mindestens einer Ausführungsform kann ein CNN auch so trainiert werden, dass es Einsatzfahrzeuge identifiziert, die spezifisch für eine lokale Fläche sind, in der ein Fahrzeug operiert, wie von GNSS-Sensor(en) 1058 identifiziert. In mindestens einer Ausführungsform wird ein CNN bei Betrieb in Europa versuchen, europäische Sirenen zu erkennen, und bei Betrieb in Nordamerika wird ein CNN versuchen, nur nordamerikanische Sirenen zu identifizieren. In mindestens einer Ausführungsform kann ein Steuerprogramm, sobald ein Einsatzfahrzeug erkannt wird, dazu verwendet werden, eine Sicherheitsroutine für Einsatzfahrzeuge auszuführen, ein Fahrzeug abzubremsen, an den Straßenrand zu fahren, ein Fahrzeug zu parken und/oder ein Fahrzeug im Leerlauf laufen zu lassen, und zwar mit Hilfe des/der Ultraschallsensors/en 1062, bis die Einsatzfahrzeuge passieren.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 eine oder mehrere CPU(s) 1018 (z. B. diskrete CPU(s) oder dCPU(s)) einschließen, die über eine Hochgeschwindigkeitsverbindung (z. B. PCle) mit dem/den SoC(s) 1004 gekoppelt sein können. In mindestens einer Ausführungsform kann (können) die CPU(s) 1018 zum Beispiel einen X86-Prozessor einschließen. Die CPU(s) 1018 kann/können verwendet werden, um eine Vielzahl von Funktionen durchzuführen, einschließlich der Schlichtung potenziell inkonsistenter Ergebnisse zwischen ADAS-Sensoren und SoC(s) 1004 und/oder der Überwachung von Status und Zustand des/der Controller(s) 1036 und/oder eines Infotainment-Systems auf einem Chip („Infotainment SoC“) 1030, zum Beispiel.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 GPU(s) 1020 (z. B. diskrete GPU(s) oder dGPU(s)) einschließen, die über eine Hochgeschwindigkeitsverbindung (z. B. NVIDIAs NVLINK-Kanal) mit dem/den SoC(s) 1004 verbunden sein können. In mindestens einer Ausführungsform kann (können) GPU(s) 1020 zusätzliche Funktionen der künstlichen Intelligenz bereitstellen, z. B. durch Ausführen redundanter und/oder unterschiedlicher neuronaler Netze, und kann (können) verwendet werden, um neuronale Netze zu trainieren und/oder zu aktualisieren, die zumindest teilweise auf Eingaben (z. B. Sensordaten) von Sensoren eines Fahrzeugs 1000 basieren.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner eine Netzschnittstelle 1024 einschließen, die ohne Einschränkung eine oder mehrere drahtlose Antennen 1026 (z. B. eine oder mehrere drahtlose Antennen für verschiedene Kommunikationsprotokolle, wie eine Mobilfunkantenne, eine Bluetooth-Antenne usw.) einschließen kann. In mindestens einer Ausführungsform kann die Netzschnittstelle 1024 verwendet werden, um eine drahtlose Verbindung zu Internet Cloud-Diensten (z. B. mit Server(n) und/oder anderen Netzvorrichtungen), mit anderen Fahrzeugen und/oder mit Rechenvorrichtungen (z. B. Rechenvorrichtungen von Passagieren) zu ermöglichen. In mindestens einer Ausführungsform kann zur Kommunikation mit anderen Fahrzeugen eine direkte Verbindung zwischen dem Fahrzeug 100 und einem anderen Fahrzeug und/oder eine indirekte Verbindung hergestellt werden (z. B. über Netze und das Internet). In mindestens einer Ausführungsform können direkte Verbindungen über eine Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung bereitgestellt werden. In mindestens einer Ausführungsform kann eine Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung dem Fahrzeug 1000 Informationen über Fahrzeuge in der Nähe des Fahrzeugs 1000 bereitstellen (z. B. Fahrzeuge vor, auf einer Seite und/oder hinter dem Fahrzeug 1000). In mindestens einer Ausführungsform kann eine solche Funktionalität Teil einer kooperativen adaptiven Geschwindigkeitsregelungsfunktion von Fahrzeug 1000 sein.
In mindestens einer Ausführungsform kann die Netzschnittstelle 1024 einen SoC einschließen, der eine Modulations- und Demodulationsfunktionalität bereitstellt und es dem/den Controller(n) 1036 ermöglicht, über drahtlose Netze zu kommunizieren. In mindestens einer Ausführungsform kann die Netzschnittstelle 1024 ein Funkfrequenz-Frontend für die Aufwärtskonvertierung von Basisband auf Funkfrequenz und die Abwärtskonvertierung von Funkfrequenz auf Basisband einschließen. In mindestens einer Ausführungsform können die Frequenzumwandlungen auf jede technisch mögliche Weise durchgeführt werden. Zum Beispiel können Frequenzumwandlungen durch bekannte Verfahren und/oder unter Verwendung von Superheterodyn-Verfahren durchgeführt werden. In mindestens einer Ausführungsform kann die Radiofrequenz-Front-End-Funktionalität von einem getrennten Chip bereitgestellt werden. In mindestens einer Ausführungsform können die Netzschnittstellen drahtlose Funktionen für die Kommunikation über LTE, WCDMA, UMTS, GSM, CDMA2000, Bluetooth, Bluetooth LE, Wi-Fi, Z-Wave, ZigBee, LoRaWAN und/oder andere drahtlose Protokolle einschließen.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner einen oder mehrere Datenspeicher 1028 einschließen, die ohne Einschränkung eine Speicherung außerhalb des Chips (z. B. außerhalb der SoC(s) 1004) einschließen können. In mindestens einer Ausführungsform kann (können) der (die) Datenspeicher 1028 ohne Einschränkung ein oder mehrere Speicherelemente einschließen, darunter RAM, SRAM, dynamischer Direktzugriffsspeicher („DRAM“), Video-Direktzugriffsspeicher („VRAM“), Flash-Speicher, Festplatten und/oder andere Komponenten und/oder Vorrichtungen, die mindestens ein Datenbit speichern können.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner GNSS-Sensor(en) 1058 (z. B. GPS- und/oder unterstützte GPS-Sensoren) einschließen, die bei der Kartierung, der Wahrnehmung, der Erzeugung von Insassengittern und/oder der Wegplanung funktionieren. In mindestens einer Ausführungsform kann eine beliebige Anzahl von GNSS-Sensor(en) 1058 verwendet werden, zum Beispiel und ohne Einschränkung ein GPS, das einen USB-Anschluss mit einer Ethernet-zu-Seriell-Brücke (z. B. RS-232) einschließt.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner einen oder mehrere RADAR-Sensoren 1060 einschließen. In mindestens einer Ausführungsform kann (können) der (die) RADAR-Sensor(en) 1060 von Fahrzeug 1000 zur Fahrzeugerkennung über große Entfernungen verwendet werden, selbst bei Dunkelheit und/oder schlechten Wetterbedingungen. In mindestens einer Ausführungsform kann der RADAR-Sensor bzw. können die RADAR-Sensoren 1060 einen CAN-Bus und/oder Bus 1002 (z. B. zur Übertragung von durch den RADAR-Sensor bzw. die RADAR-Sensoren 1060 erzeugten Daten) zur Steuerung und zum Zugriff auf Objektverfolgungsdaten verwenden, wobei in einigen Beispielen der Zugriff auf Rohdaten über Ethernet-Kanäle erfolgt. In mindestens einer Ausführungsform kann eine breite Palette von RADAR-Sensortypen verwendet werden. Zum Beispiel und ohne Einschränkung können RADAR-Sensor(en) 1060 für die Verwendung von Front-, Heck- und Seiten-RADAR geeignet sein. In mindestens einer Ausführungsform ist einer oder mehrere der RADAR-Sensoren 1060 ein Puls-Doppler-RADAR-Sensor.
In mindestens einer Ausführungsform kann (können) der (die) RADAR-Sensor(en) 1060 verschiedene Konfigurationen einschließen, z. B. große Reichweite mit engem Sichtfeld, kleine Reichweite mit breitem Sichtfeld, seitliche Abdeckung mit kurzer Reichweite usw. In mindestens einer Ausführungsform kann RADAR mit großer Reichweite für die adaptive Geschwindigkeitsregelung verwendet werden. In mindestens einer Ausführungsform können RADAR-Systeme mit großer Reichweite ein breites Sichtfeld bereitstellen, das durch zwei oder mehr unabhängige Abtastungen realisiert wird, z. B. innerhalb eines Bereichs von 250 m (Meter). In mindestens einer Ausführungsform kann/können der/die RADAR-Sensor(en) 1060 dabei helfen, zwischen statischen und sich bewegenden Aufgaben zu unterscheiden, und kann/können vom ADAS-System 1038 für den Notbremsassistenten und die Vorwärtskollisionswarnung verwendet werden. In mindestens einer Ausführungsform kann (können) der (die) Sensor(en) 1060, der (die) in ein RADAR-System mit großer Reichweite eingeschlossen ist (sind), ohne Einschränkung ein monostatisches multimodales RADAR mit mehreren (z. B. sechs oder mehr) festen RADAR-Antennen und einer Hochgeschwindigkeits-CAN- und FlexRay-Schnittstelle umfassen. In mindestens einer Ausführungsform mit sechs Antennen können vier Antennen in der Mitte einen fokussierten Strahl erzeugen, der darauf ausgelegt ist, die Umgebung des Fahrzeugs 1000 bei höheren Geschwindigkeiten mit minimalen Störungen durch den Verkehr auf den angrenzenden Fahrspuren zu erfassen. In mindestens einer Ausführungsform können zwei weitere Antennen das Sichtfeld erweitern, so dass es möglich ist, Fahrzeuge, die in eine Fahrspur des Fahrzeugs 1000 eindringen oder diese verlassen, schnell zu erkennen.
In mindestens einer Ausführungsform können RADAR-Systeme mit mittlerer Reichweite zum Beispiel eine Reichweite von bis zu 160 m (vorne) oder 80 m (hinten) und ein Sichtfeld von bis zu 42 Grad (vorne) oder 150 Grad (hinten) einschließen. In mindestens einer Ausführungsform können RADAR-Systeme mit geringer Reichweite ohne Einschränkung eine beliebige Anzahl von RADAR-Sensoren 1060 einschließen, die für die Installation an beiden Enden eines hinteren Stoßfängers ausgelegt sind. In mindestens einer Ausführungsform kann ein RADAR-Sensorsystem, das an beiden Enden eines hinteren Stoßfängers installiert ist, zwei Strahlen erzeugen, die den toten Winkel in Richtung Heck und neben dem Fahrzeug ständig überwachen. In mindestens einer Ausführungsform können RADAR-Systeme mit kurzer Reichweite im ADAS-System 1038 zur Erkennung des toten Winkels und/oder zur Unterstützung bei Spurveränderungen eingesetzt werden.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner Ultraschallsensor(en) 1062 einschließen. In mindestens einer Ausführungsform kann (können) der (die) Ultraschallsensor(en) 1062, der (die) an einer vorderen, hinteren und/oder seitlichen Position des Fahrzeugs 1000 positioniert sein kann (können), zur Einparkhilfe und/oder zum Erstellen und Aktualisieren eines Gitters für die Insassen verwendet werden. In mindestens einer Ausführungsform kann eine Vielzahl von Ultraschallsensoren 1062 verwendet werden, und unterschiedliche Ultraschallsensoren 1062 können für unterschiedliche Erkennungsbereiche (z. B. 2,5 m, 4 m) eingesetzt werden. In mindestens einer Ausführungsform kann (können) der (die) Ultraschallsensor(en) 1062 in funktionalen Sicherheitsgraden von ASIL B funktionieren.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 den/die LIDAR-Sensor(en) 1064 einschließen. In mindestens einer Ausführungsform kann (können) der (die) LIDAR-Sensor(en) 1064 für die Erkennung von Aufgaben und Fußgängern, Notbremsungen, Kollisionsvermeidung und/oder andere Funktionen verwendet werden. In mindestens einer Ausführungsform kann (können) der (die) LIDAR-Sensor(en) 1064 auf dem funktionalen Sicherheitsgrad ASIL B funktionieren. In mindestens einer Ausführungsform kann das Fahrzeug 1000 mehrere LIDAR-Sensoren 1064 (z. B. zwei, vier, sechs usw.) einschließen, die einen Ethernet-Kanal nutzen können (z. B. um Daten für einen Gigabit Ethernet Switch bereitzustellen).
In mindestens einer Ausführungsform kann/können der/die LIDAR-Sensor(en) 1064 eine Liste von Aufgaben und deren Abständen für ein 360-Grad-Sichtfeld bereitstellen. In mindestens einer Ausführungsform kann (können) der (die) handelsübliche(n) LIDAR-Sensor(en) 1064 eine beworbene Reichweite von etwa 100 m aufweisen, mit einer Genauigkeit von 2 cm bis 3 cm und mit Unterstützung für eine 100 Mbps Ethernet-Verbindung, zum Beispiel. In mindestens einer Ausführungsform können ein oder mehrere nicht vorspringende LIDAR-Sensoren verwendet werden. In einer solchen Ausführungsform kann der/die LIDAR-Sensor(en) 1064 eine kleine Vorrichtung einschließen, die in eine Front-, Heck-, Seiten- und/oder Eckposition des Fahrzeugs 1000 eingebettet werden kann. In mindestens einer Ausführungsform kann (können) der (die) LIDAR-Sensor(en) 1064 in einer solchen Ausführungsform ein horizontales Sichtfeld von bis zu 120 Grad und ein vertikales Sichtfeld von bis zu 35 Grad bereitstellen, mit einer Reichweite von 200 m selbst für Aufgaben mit geringer Reflektivität. In mindestens einer Ausführungsform können der oder die an der Vorderseite befestigten LIDAR-Sensoren 1064 für ein horizontales Sichtfeld zwischen 45 Grad und 135 Grad konfiguriert sein.
In mindestens einer Ausführungsform können auch LIDAR-Technologien, wie z. B. 3D-Flash-LIDAR, verwendet werden. In mindestens einer Ausführungsform verwendet 3D Flash LIDAR einen Laserblitz als Übertragungsquelle, um die Umgebung von Fahrzeug 1000 bis zu einer Entfernung von etwa 200 m zu beleuchten. In mindestens einer Ausführungsform schließt eine Flash LIDAR-Einheit ohne Einschränkung einen Rezeptor ein, der die Laufzeit des Laserpulses und das reflektierte Licht an jedem Pixel aufzeichnet, was wiederum einer Entfernung von Fahrzeug 1000 zu Aufgaben entspricht. In mindestens einer Ausführungsform kann Flash-LIDAR es ermöglichen, mit jedem Laserblitz hochgenaue und verzerrungsfreie Bilder der Umgebung zu erzeugen. In mindestens einer Ausführungsform können vier Flash-LIDAR-Sensoren eingesetzt werden, einer auf jeder Seite des Fahrzeugs 1000. In mindestens einer Ausführungsform schließen 3D-Blitz-LIDAR-Systeme ohne Einschränkung eine 3D-Array-LIDAR-Festkörperkamera ein, die außer einem Gebläse keine beweglichen Teile enthält (z. B. eine nicht scannende LIDAR-Vorrichtung). In mindestens einer Ausführungsform kann die Flash-LIDAR-Vorrichtung einen 5-Nanosekunden-Laserimpuls der Klasse I (augensicher) pro Bild verwenden und das reflektierte Laserlicht als 3D-Punkt-Cloud und koregistrierte Intensitätsdaten erfassen.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner einen oder mehrere IMU-Sensoren 1066 einschließen. In mindestens einer Ausführungsform befindet sich der IMU-Sensor bzw. die IMU-Sensoren 1066 in der Mitte der Hinterachse des Fahrzeugs 1000. In mindestens einer Ausführungsform kann (können) der (die) IMU-Sensor(en) 1066 zum Beispiel und ohne Einschränkung einen oder mehrere Beschleunigungsmesser, Magnetometer, Gyroskop(e), einen Magnetkompass, Magnetkompasse und/oder andere Sensortypen einschließen. In mindestens einer Ausführungsform, z. B. in sechsachsigen Anwendungen, können der oder die IMU-Sensoren 1066 ohne Einschränkung Beschleunigungsmesser und Gyroskope einschließen. In mindestens einer Ausführungsform, wie z. B. in neunachsigen Anwendungen, kann/können der/die IMU-Sensor(en) 1066 ohne Einschränkung Beschleunigungsmesser, Gyroskope und Magnetometer einschließen.
In mindestens einer Ausführungsform kann (können) der (die) IMU-Sensor(en) 1066 als ein miniaturisiertes, hochleistungsfähiges GPS-gestütztes Trägheitsnavigationssystem („GPS/INS“) implementiert werden, das mikroelektromechanische Systeme („MEMS“) Trägheitssensoren, einen hochempfindlichen GPS-Empfänger und fortgeschrittene Kalman-Filteralgorithmen kombiniert, um Schätzungen von Position, Geschwindigkeit und Lage bereitzustellen. In mindestens einer Ausführungsform können IMU-Sensor(en) 1066 das Fahrzeug 1000 in die Lage versetzen, seinen Kurs zu schätzen, ohne dass eine Eingabe von einem Magnetsensor erforderlich ist, indem Veränderungen der Geschwindigkeit von einem GPS direkt mit dem/den IMU-Sensor(en) 1066 beobachtet und korreliert werden. In mindestens einer Ausführungsform können IMU-Sensor(en) 1066 und GNSS-Sensor(en) 1058 in einer einzigen integrierten Einheit kombiniert werden.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 das/die Mikrofon(e) 1096 einschließen, die im und/oder um das Fahrzeug 1000 herum angebracht sind. In mindestens einer Ausführungsform kann (können) das (die) Mikrofon(e) 1096 unter anderem für die Erkennung und Identifizierung von Einsatzfahrzeugen verwendet werden.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner eine beliebige Anzahl von Kameratypen einschließen, darunter Stereokamera(s) 1068, Weitwinkelkamera(s) 1070, Infrarotkamera(s) 1072, Rundumkamera(s) 1074, Weitbereichskamera(s) 1098, Mittelbereichskamera(s) 1076 und/oder andere Kameratypen. In mindestens einer Ausführungsform können Kameras verwendet werden, um Bilddaten rund um den gesamten Umfang des Fahrzeugs 1000 zu erfassen. In mindestens einer Ausführungsform hängt es vom Fahrzeug 1000 ab, welche Arten von Kameras verwendet werden. In mindestens einer Ausführungsform kann eine beliebige Kombination von Kameratypen verwendet werden, um die erforderliche Abdeckung um das Fahrzeug 1000 bereitzustellen. In mindestens einer Ausführungsform kann die Anzahl der eingesetzten Kameras je nach Ausführungsform unterschiedlich sein. Zum Beispiel könnte das Fahrzeug 1000 in mindestens einer Ausführungsform sechs Kameras, sieben Kameras, zehn Kameras, zwölf Kameras oder eine andere Anzahl von Kameras einschließen. In mindestens einer Ausführungsform können die Kameras, zum Beispiel und ohne Einschränkung, Gigabit Multimedia Serial Link („GMSL“) und/oder Gigabit Ethernet-Kommunikation unterstützen. In mindestens einer Ausführungsform kann jede Kamera so beschaffen sein, wie es zuvor hier bezogen auf 10A und 10B beschrieben wurde.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner einen oder mehrere Vibrationssensoren 1042 einschließen. In mindestens einer Ausführungsform kann (können) der (die) Vibrationssensor(en) 1042 Vibrationen von Komponenten des Fahrzeugs 1000, wie z. B. der Achse(n), messen. Zum Beispiel kann in mindestens einer Ausführungsform eine Veränderung der Vibrationen auf eine Veränderung der Straßenoberfläche hinweisen. In mindestens einer Ausführungsform, wenn zwei oder mehr Vibrationssensoren 1042 verwendet werden, können Unterschiede zwischen den Vibrationen verwendet werden, um die Reibung oder den Schlupf der Straßenoberfläche zu bestimmen (z. B. wenn ein Unterschied in der Vibration zwischen einer angetriebenen Achse und einer frei drehenden Achse besteht).
In mindestens einer Ausführungsform kann das Fahrzeug 1000 das ADAS-System 1038 einschließen. In mindestens einer Ausführungsform kann das ADAS-System 1038 in einigen Beispielen ohne Einschränkung einen SoC einschließen. In mindestens einer Ausführungsform kann das ADAS-System 1038 ohne Einschränkung eine beliebige Anzahl und Kombination aus einem autonomen/adaptiven/automatischen Geschwindigkeitsregelsystem („ACC“), einem kooperativen adaptiven Geschwindigkeitsregelsystem („CACC“), einem Vorwärts-Crash-Warnsystem („FCW“), einem automatischen Notbremssystem („AEB“) einschließen, ein Spurhalteassistent („LKA“), ein Toter-Winkel-Warner („BSW“), ein Querverkehrswarner („RCTW“), ein Kollisionswarnsystem („CW”), ein Spurenzentrierungssystem („LC“) und/oder andere Systeme, Merkmale und/oder Funktionen.
In mindestens einer Ausführungsform kann das ACC-System RADAR-Sensor(en) 1060, LIDAR-Sensor(en) 1064 und/oder eine beliebige Anzahl von Kameras verwenden. In mindestens einer Ausführungsform kann das ACC System ein ACC System in Längsrichtung und/oder ein ACC System in Querrichtung einschließen. In mindestens einer Ausführungsform überwacht und steuert ein ACC-System in Längsrichtung den Abstand zu einem anderen Fahrzeug unmittelbar vor Fahrzeug 1000 und passt die Geschwindigkeit von Fahrzeug 1000 automatisch an, um einen sicheren Abstand zu vorausfahrenden Fahrzeugen einzuhalten. In mindestens einer Ausführungsform führt ein seitliches ACC System den Abstand durch und rät dem Fahrzeug 1000, die Spur zu verändern, wenn dies erforderlich ist. In mindestens einer Ausführungsform steht ein seitliches ACC in Relation zu anderen ADAS-Anwendungen, wie LC und CW.
In mindestens einer Ausführungsform nutzt ein CACC-System Informationen von anderen Fahrzeugen, die über die Netzschnittstelle 1024 und/oder die Funkantenne(n) 1026 von anderen Fahrzeugen über eine drahtlose Verbindung oder indirekt über eine Netzverbindung (z. B. über das Internet) empfangen werden können. In mindestens einer Ausführungsform können direkte Verbindungen durch eine Fahrzeug-zu-Fahrzeug („V2V“) Kommunikationsverbindung bereitgestellt werden, während indirekte Verbindungen durch eine Infrastruktur-zu-Fahrzeug („I2V“) Kommunikationsverbindung bereitgestellt werden können. Im Allgemeinen stellt die V2V-Kommunikation Informationen über unmittelbar vorausfahrende Fahrzeuge bereit (z. B. Fahrzeuge, die sich unmittelbar vor und auf derselben Spur wie Fahrzeug 1000 befinden), während die I2V-Kommunikation Informationen über den weiter vorausfahrenden Verkehr bereitstellt. In mindestens einer Ausführungsform kann ein CACC-System eine oder beide I2V- und V2V-Informationsquellen einschließen. In mindestens einer Ausführungsform kann ein CACC-System angesichts der Informationen über Fahrzeuge vor Fahrzeug 1000 zuverlässiger sein und hat das Potenzial, den Verkehrsfluss gleichmäßig zu verbessern und Staus auf der Straße zu reduzieren.
In mindestens einer Ausführungsform ist ein FCW System so ausgelegt, dass es einen Fahrer vor einer Gefahr warnt, so dass dieser korrigierende Maßnahmen ergreifen kann. In mindestens einer Ausführungsform verwendet ein FCW-System eine nach vorne gerichtete Kamera und/oder RADAR-Sensor(en) 1060, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, der elektrisch gekoppelt ist, um dem Fahrer Feedback bereitzustellen, wie z. B. eine Anzeige, einen Lautsprecher und/oder eine vibrierende Komponente. In mindestens einer Ausführungsform kann ein FCW-System eine Warnung bereitstellen, z. B. in Form eines Tons, einer visuellen Warnung, einer Vibration und/oder eines schnellen Bremsimpulses.
In mindestens einer Ausführungsform erkennt ein AEB-System eine drohende Vorwärtskollision mit einem anderen Fahrzeug oder einer anderen Aufgabe und kann automatisch Bremsen aufbringen, wenn ein Fahrer nicht innerhalb eines bestimmten Zeit- oder Abstandsparameters korrigierende Maßnahmen ergreift. In mindestens einer Ausführungsform kann das AEB-System die nach vorne gerichtete(n) Kamera(s) und/oder RADAR-Sensor(en) 1060 verwenden, die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC verbunden sind. In mindestens einer Ausführungsform wird ein AEB-System, wenn es eine Gefahr erkennt, typischerweise zunächst den Fahrer warnen, damit dieser korrigierende Maßnahmen ergreift, um eine Kollision zu vermeiden. Wenn der Fahrer keine korrigierenden Maßnahmen ergreift, kann das AEB-System automatisch die Bremsen anwenden, um die Auswirkungen einer vorhergesagten Kollision zu verhindern oder zumindest abzumildern. In mindestens einer Ausführungsform kann ein AEB-System Techniken wie die dynamische Bremsunterstützung und/oder die crashsichere Bremsung einschließen.
In mindestens einer Ausführungsform stellt ein LDW System visuelle, akustische und/oder taktile Warnungen bereit, wie z. B. Lenkrad- oder Sitzvibrationen, um den Fahrer zu warnen, wenn das Fahrzeug 1000 die Fahrbahnmarkierungen überquert. In mindestens einer Ausführungsform wird ein LDW System nicht aktiviert, wenn der Fahrer ein absichtliches Verlassen der Fahrspur anzeigt, z. B. durch Betätigen eines Blinkers. In mindestens einer Ausführungsform kann ein LDW-System nach vorne gerichtete Kameras verwenden, die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC verbunden sind, der elektrisch gekoppelt ist, um ein Feedback für den Fahrer bereitzustellen, wie z. B. eine Anzeige, einen Lautsprecher und/oder eine vibrierende Komponente. In mindestens einer Ausführungsform ist ein LKA System eine Variante eines LDW Systems. In mindestens einer Ausführungsform stellt ein LKA-System Eingaben in die Lenkung oder eine Bremsung bereit, um das Fahrzeug 1000 zu korrigieren, wenn das Fahrzeug 1000 beginnt, seine Fahrspur zu verlassen.
In mindestens einer Ausführungsform erkennt und warnt ein BSW-System den Fahrer vor Fahrzeugen im toten Winkel des Fahrzeugs. In mindestens einer Ausführungsform kann ein BSW-System eine visuelle, akustische und/oder taktile Warnmeldung bereitstellen, um darauf hinzuweisen, dass das Zusammenführen oder Verändern der Fahrspur unsicher ist. In mindestens einer Ausführungsform kann ein BSW-System eine zusätzliche Warnung bereitstellen, wenn ein Fahrer einen Blinker setzt. In mindestens einer Ausführungsform kann ein BSW-System (eine) nach hinten gerichtete Kamera(s) und/oder RADAR-Sensor(en) 1060 verwenden, die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, der elektrisch mit dem Feedback des Fahrers gekoppelt ist, wie z. B. einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente.
In mindestens einer Ausführungsform kann ein RCTW-System eine visuelle, akustische und/oder taktile Benachrichtigung bereitstellen, wenn beim Rückwärtsfahren des Fahrzeugs 1000 eine Aufgabe außerhalb des Bereichs der Heckkamera erkannt wird. In mindestens einer Ausführungsform schließt ein RCTW System ein AEB System ein, um sicherzustellen, dass die Fahrzeugbremsen angewendet werden, um einen Unfall zu vermeiden. In mindestens einer Ausführungsform kann ein RCTW-System einen oder mehrere nach hinten gerichtete(n) RADAR-Sensor(en) 1060 verwenden, der/die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt ist/sind, der/die elektrisch gekoppelt ist/sind, um ein Feedback für den Fahrer bereitzustellen, wie z. B. eine Anzeige, einen Lautsprecher und/oder eine vibrierende Komponente.
Gemäß mindestens einer Ausführungsform kann es bei herkömmlichen ADAS-Systemen zu falsch positiven Ergebnissen kommen, die für den Fahrer zwar ärgerlich und ablenkend sein können, aber in der Regel nicht katastrophal sind, da herkömmliche ADAS-Systeme den Fahrer warnen und ihm die Möglichkeit geben, zu entscheiden, ob ein Sicherheitszustand wirklich vorliegt und entsprechend zu handeln. In mindestens einer Ausführungsform entscheidet das Fahrzeug 1000 bei widersprüchlichen Ergebnissen selbst, ob es das Ergebnis eines primären oder eines sekundären Rechners (z. B. eines ersten Controllers oder eines zweiten Controllers der Controller 1036) beachtet. Zum Beispiel kann in mindestens einer Ausführungsform das ADAS-System 1038 ein Backup- und/oder Sekundärcomputer sein, der Wahrnehmungsinformationen für ein Rationalitätsmodul des Backup-Computers bereitstellt. In mindestens einer Ausführungsform kann ein Backup-Computer Rationalität Monitor redundante diverse Software auf Hardware-Komponenten laufen lassen, um Fehler in der Wahrnehmung und dynamische Fahraufgaben zu erkennen. In mindestens einer Ausführungsform können die Ausgaben des ADAS-Systems 1038 einer Kontroll-MCU bereitgestellt werden. In mindestens einer Ausführungsform bestimmt eine Kontroll-MCU bei Konflikten zwischen den Ausgaben eines Primärrechners und denen eines Sekundärrechners, wie der Konflikt zu lösen ist, um eine sichere Operation zu gewährleisten.
In mindestens einer Ausführungsform kann ein primärer Computer so konfiguriert sein, dass er einer Kontroll-MCU eine Auswertung bereitstellt, die das Vertrauen des primären Computers in ein bestimmtes Ergebnis angibt. In mindestens einer Ausführungsform kann die Kontroll-MCU, wenn diese Auswertung einen Schwellenwert überschreitet, der Anweisung des primären Computers folgen, unabhängig davon, ob der sekundäre Computer ein widersprüchliches oder inkonsistentes Ergebnis bereitstellt. In mindestens einer Ausführungsform kann eine Kontroll-MCU in Fällen, in denen eine Konfidenzauswertung einen Schwellenwert nicht erreicht und in denen primäre und sekundäre Computer unterschiedliche Ergebnisse anzeigen (z. B. einen Konflikt), zwischen den Computern vermitteln, um ein angemessenes Resultat zu bestimmen.
In mindestens einer Ausführungsform kann eine Kontroll-MCU so konfiguriert sein, dass sie ein neuronales Netz bzw. neuronale Netze ausführt, das bzw. die trainiert und so konfiguriert ist bzw. sind, dass es bzw. sie zumindest teilweise basierend auf den Ergebnissen eines primären Computers und den Ergebnissen eines sekundären Computers die Bedingungen bestimmt bzw. bestimmen, unter denen der sekundäre Computer einen Fehlalarm bereitstellt. In mindestens einer Ausführungsform können neuronale Netze in einer Kontroll-MCU lernen, wann der Ausgabe eines sekundären Computers vertraut werden kann und wann nicht. Zum Beispiel kann in mindestens einer Ausführungsform, wenn es sich bei dem sekundären Computer um ein RADAR-basiertes FCW-System handelt, ein neuronales Netz bzw. neuronale Netze in dieser Kontroll-MCU lernen, wenn ein FCW-System metallische Aufgaben identifiziert, die in Wirklichkeit keine Gefahren darstellen, wie z. B. ein Abflussgitter oder eine Abdeckung eines Gullyschachts, die einen Alarm auslösen. In mindestens einer Ausführungsform, wenn ein sekundärer Computer ein kamerabasiertes LDW-System ist, kann ein neuronales Netz in einer Kontroll-MCU lernen, das LDW-System außer Kraft zu setzen, wenn Radfahrer oder Fußgänger anwesend sind und ein Verlassen der Fahrspur in der Tat das sicherste Manöver ist. In mindestens einer Ausführungsform kann eine Kontroll-MCU mindestens eine DLA oder eine GPU einschließen, die für die Ausführung neuronaler Netze mit zugehörigem Speicher geeignet ist. In mindestens einer Ausführungsform kann eine Kontroll-MCU eine Komponente von SoC(s) 1004 umfassen und/oder als solche eingeschlossen sein.
In mindestens einer Ausführungsform kann das ADAS-System 1038 einen sekundären Computer einschließen, der die ADAS-Funktionalität nach den traditionellen Regeln der Computer Vision durchführt. In mindestens einer Ausführungsform kann dieser sekundäre Computer klassische Regeln des Computersehens verwenden (wenndann), und die Anwesenheit eines neuronalen Netzes (von neuronalen Netzen) in einer Kontroll-MCU kann die Zuverlässigkeit, Sicherheit und Leistung verbessern. Zum Beispiel macht in mindestens einer Ausführungsform die unterschiedliche Implementierung und die absichtliche Nicht-Identität ein Gesamtsystem fehlertoleranter, insbesondere gegenüber Fehlern, die durch die Funktionalität der Software (oder der Software-Hardware-Schnittstelle) verursacht werden. Zum Beispiel kann in mindestens einer Ausführungsform eine Kontroll-MCU, wenn ein Softwarefehler in der auf einem primären Computer laufenden Software auftritt und ein nicht-identischer Softwarecode, der auf einem sekundären Computer läuft, ein konsistentes Gesamtergebnis aufweist, ein größeres Vertrauen haben, dass das Gesamtergebnis korrekt ist und ein Fehler in der Software oder Hardware auf diesem primären Computer keinen wesentlichen Fehler verursacht.
In mindestens einer Ausführungsform kann eine Ausgabe des ADAS-Systems 1038 in den Wahrnehmungsblock und/oder den Block für dynamische Fahraufgaben eines Primärrechners eingespeist werden. Zum Beispiel kann in mindestens einer Ausführungsform ein Wahrnehmungsblock, wenn das ADAS-System 1038 eine Vorwärtscrash-Warnung aufgrund einer unmittelbar vorausliegenden Aufgabe anzeigt, diese Information bei der Identifizierung von Aufgaben verwenden. In mindestens einer Ausführungsform kann ein sekundärer Computer ein eigenes neuronales Netz aufweisen, das trainiert ist und so das Risiko von Fehlalarmen reduziert, wie hier beschrieben.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner ein Infotainment-SoC 1030 (z. B. ein bordeigenes Infotainment System (IVI)) einschließen. Obwohl als SoC veranschaulicht und beschrieben, kann das Infotainment System SoC 1030 in mindestens einer Ausführungsform kein SoC sein und kann ohne Einschränkung zwei oder mehr diskrete Komponenten einschließen. In mindestens einer Ausführungsform kann der Infotainment-SoC 1030 ohne Einschränkung eine Kombination aus Hardware und Software einschließen, die verwendet werden kann, um Audio (z. B. Musik, einen persönlichen digitalen Assistenten, Navigationsanweisungen, Nachrichten, Radio usw.), Video (z. B. Fernsehen, Filme, Streaming usw.), Telefon (z. B, Freisprecheinrichtung), Netzverbindung (z. B. LTE, WiFi usw.) und/oder Informationsdienste (z. B. Navigationssysteme, Einparkhilfe, ein Radiodatensystem, fahrzeugbezogene Informationen wie Kraftstoffstand, zurückgelegter Gesamtabstand, Bremskraftstoffstand, Ölstand, Tür öffnen/schließen, Luftfilterinformationen usw.) auf Fahrzeug 1000 beziehen. Zum Beispiel könnte der Infotainment-SoC 1030 Radios, Plattenspieler, Navigationssysteme, Videoplayer, USB- und Bluetooth-Konnektivität, Carputer, In-Car-Entertainment, WiFi, Audiobedienung am Lenkrad, Freisprecheinrichtung, ein Heads-up-Display („HUD“), HMI-Display 1034, eine Telematikvorrichtung, eine Platte (z. B. zum Steuern und/oder zur Interaktion mit verschiedenen Komponenten, Funktionen und/oder Systemen) und/oder andere Komponenten einschließen. In mindestens einer Ausführungsform kann der Infotainment-SoC 1030 ferner dazu verwendet werden, dem/den Benutzer(n) des Fahrzeugs 1000 Informationen (z. B. visuell und/oder akustisch) bereitzustellen, wie z. B. Informationen vom ADAS-System 1038, Informationen zum autonomen Fahren wie geplante Fahrzeugmanöver, Trajektorien, Umgebungsinformationen (z. B. Kreuzungsinformationen, Fahrzeuginformationen, Straßeninformationen usw.) und/oder andere Informationen.
In mindestens einer Ausführungsform kann der Infotainment-SoC 1030 eine beliebige Menge und Art von GPU-Funktionalität einschließen. In mindestens einer Ausführungsform kann der Infotainment-SoC 1030 über den Bus 1002 mit anderen Vorrichtungen, Systemen und/oder Komponenten des Fahrzeugs 1000 kommunizieren. In mindestens einer Ausführungsform kann der Infotainment-SoC 1030 mit einer Kontroll-MCU gekoppelt sein, so dass eine GPU eines Infotainment-Systems einige Selbstfahrfunktionen durchführt, falls der/die primäre(n) Controller 1036 (z. B. Primär- und/oder Backup-Computer von Fahrzeug 1000) ausfallen. In mindestens einer Ausführungsform kann das Infotainment-SoC 1030 das Fahrzeug 1000 in einen Chauffeur-zu-Safe-Stop-Modus versetzen, wie hier beschrieben.
In mindestens einer Ausführungsform kann das Fahrzeug 1000 ferner ein Kombiinstrument 1032 (z. B. ein digitales Armaturenbrett, ein elektronisches Kombiinstrument, eine digitale Instrumententafel usw.) einschließen. In mindestens einer Ausführungsform kann das Kombiinstrument 1032 ohne Einschränkung eine Steuerung und/oder einen Supercomputer (z. B. eine diskrete Steuerung oder einen Supercomputer) einschließen. In mindestens einer Ausführungsform kann das Kombiinstrument 1032 ohne Einschränkung eine beliebige Anzahl und Kombination von Instrumenten einschließen, wie z. B. Tachometer, Kraftstoffstand, Öldruck, Drehzahlmesser, Kilometerzähler, Blinker, Schaltstellungsanzeige, Sicherheitsgurt-Warnleuchte(n), Handbrems-Warnleuchte(n), Motor-Fehlfunktionsleuchte(n), Informationen über zusätzliche Rückhaltesysteme (z. B. Airbag), Beleuchtungssteuerungen, Sicherheitssystemsteuerungen, Navigationsinformationen usw. In einigen Beispielen können Informationen vom Infotainment SoC 1030 und dem Kombiinstrument 1032 angezeigt und/oder gemeinsam genutzt werden. In mindestens einer Ausführungsform kann das Kombiinstrument 1032 in den Infotainment-SoC 1030 eingeschlossen sein oder umgekehrt.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 10C für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 10C gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen kombiniert, wie sie auf eine oder mehrere der 1-6 bezogen sind.
In mindestens einer Ausführungsform können Server 1078 über Netz(e) 1090 und von Fahrzeugen Bildgebungsdaten empfangen, die unerwartete oder veränderte Straßenzustände zeigen, wie z. B. kürzlich begonnene Straßenbauarbeiten. In mindestens einer Ausführungsform kann (können) der (die) Server 1078 über das (die) Netz(e) 1090 und an die Fahrzeuge aktualisierte oder andere neuronale Netze 1092 und/oder Karteninformationen 1094 übertragen, einschließlich, ohne Einschränkung, Informationen über den Verkehr und die Straßenbedingungen. In mindestens einer Ausführungsform können die Aktualisierungen der Karteninformationen 1094 ohne Einschränkung Aktualisierungen für die HD-Karte 1022 einschließen, z. B. Informationen über Baustellen, Schlaglöcher, Umleitungen, Überschwemmungen und/oder andere Hindernisse. In mindestens einer Ausführungsform können die neuronalen Netze 1092 und/oder die Karteninformationen 1094 aus neuem Training und/oder Erfahrungen resultieren, die in den von einer beliebigen Anzahl von Fahrzeugen in einer Umgebung empfangenen Daten repräsentiert sind und/oder zumindest teilweise auf einem in einem Datenzentrum durchgeführten Training basieren (z. B. unter Verwendung von Server(n) 1078 und/oder anderen Servern).
In mindestens einer Ausführungsform kann/können der/die Server 1078 verwendet werden, um maschinelle Lernmodelle (z. B. neuronale Netze) zu trainieren, die zumindest teilweise auf Trainingsdaten basieren. In mindestens einer Ausführungsform können die Trainingsdaten von Fahrzeugen erzeugt werden und/oder in einer Simulation (z. B. mit einer Game Engine) erzeugt werden. In mindestens einer Ausführungsform wird eine beliebige Menge von Trainingsdaten markiert (z. B. wenn das zugeordnete neuronale Netz von überwachtem Lernen profitiert) und/oder einer anderen Vorverarbeitung unterzogen. In mindestens einer Ausführungsform wird eine beliebige Menge von Trainingsdaten nicht markiert und/oder vorverarbeitet (z. B. wenn das zugeordnete neuronale Netz kein überwachtes Lernen benötigt). In mindestens einer Ausführungsform können die maschinellen Lernmodelle, sobald sie trainiert sind, von den Fahrzeugen verwendet werden (z. B. über das/die Netz(e) 1090 an die Fahrzeuge übertragen) und/oder die maschinellen Lernmodelle können von dem/den Server(n) 1078 zur Fernüberwachung der Fahrzeuge verwendet werden.
In mindestens einer Ausführungsform kann (können) der (die) Server 1078 Daten von Fahrzeugen empfangen und Daten auf aktuelle neuronale Netze für intelligente Ableitungen in Echtzeit aufbringen. In mindestens einer Ausführungsform können der oder die Server 1078 Deep Learning Supercomputer und/oder dedizierte Kl-Computer mit GPU(s) 1084 einschließen, wie z. B. die von NVIDIA entwickelten DGX und DGX Station Maschinen. In mindestens einer Ausführungsform kann der/die Server 1078 jedoch auch eine Deep Learning-Infrastruktur einschließen, die CPU-betriebene Rechenzentren nutzt.
In mindestens einer Ausführungsform kann die Deep Learning-Infrastruktur des/der Server(s) 1078 zu schneller Ableitung in Echtzeit fähig sein und diese Fähigkeit nutzen, um den Zustand von Prozessoren, Software und/oder zugehöriger Hardware im Fahrzeug 1000 zu bewerten und zu überprüfen. Zum Beispiel kann die Deep Learning-Infrastruktur in mindestens einer Ausführungsform periodische Aktualisierungen vom Fahrzeug 1000 empfangen, wie z. B. eine Sequenz von Bildern und/oder Aufgaben, die das Fahrzeug 1000 in dieser Sequenz von Bildern (z. B. über Computer Vision und/oder andere Techniken zur Klassifizierung von Objekten durch maschinelles Lernen) vorweisen kann. In mindestens einer Ausführungsform kann die Deep Learning-Infrastruktur ihr eigenes neuronales Netz laufen lassen, um Objekte zu identifizieren und sie mit den von Fahrzeug 1000 identifizierten Aufgaben zu vergleichen. Wenn die Ergebnisse nicht abgleichen und die Deep Learning-Infrastruktur zu dem Schluss kommt, dass die KI in Fahrzeug 1000 eine Fehlfunktion aufweist, kann der/die Server 1078 ein Signal an Fahrzeug 1000 übertragen, das einen ausfallsicheren Computer von Fahrzeug 1000 anweist, die Kontrolle zu übernehmen, die Passagiere zu benachrichtigen und ein sicheres Parkmanöver durchzuführen.
In mindestens einer Ausführungsform kann (können) der (die) Server 1078 GPU(s) 1084 und einen oder mehrere programmierbare Beschleuniger für Ableitungen (z. B. die TensorRT 3-Vorrichtungen von NVIDIA) einschließen. In mindestens einer Ausführungsform kann eine Kombination aus GPU-gesteuerten Servern und Ableitungsbeschleunigern eine Reaktionsfähigkeit in Echtzeit möglich machen. In mindestens einer Ausführungsform, z. B. wenn die Leistung weniger kritisch ist, können für die Ableitung auch Server mit CPUs, FPGAs und anderen Prozessoren verwendet werden. In mindestens einer Ausführungsform werden die Hardwarestruktur(en) 715 verwendet, um eine oder mehrere Ausführungsformen durchzuführen. Einzelheiten zu der/den Hardwarestruktur(en) 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt.
COMPUTERSYSTEME
Ausführungsformen können in anderen Vorrichtungen verwendet werden, wie etwa Handheld-Vorrichtungen und eingebetteten Anwendungen. Einige Beispiele für tragbare Vorrichtungen sind Mobiltelefone, Internetprotokoll-Vorrichtungen, Digitalkameras, persönliche digitale Assistenten (personal digital assistants - „PDAs“) und tragbare PCs. In mindestens einer Ausführungsform können eingebettete Anwendungen eine Mikrosteuerung, einen digitalen Signalprozessor („DSP“), ein System-on-a-Chip, Netzcomputer („NetPCs“), Set-Top-Boxen, Netz-Hubs, ein Weitverkehrsnetz-(wide area network - „WAN“-)Switches oder ein beliebiges anderes System beinhalten, das eine oder mehrere Anweisungen gemäß mindestens einer Ausführungsform ausführen kann.
In mindestens einer Ausführungsform kann das Computersystem 1100 ohne Einschränkung einen Prozessor 1102 beinhalten, der ohne Einschränkung eine oder mehrere Ausführungseinheiten 1108 beinhalten kann, um ein Training und/oder eine Ableitung für ein Modell maschinellen Lernens gemäß in dieser Schrift beschriebenen Methoden durchzuführen. In mindestens einer Ausführungsform ist das Computersystem 1100 ein Desktop mit einem einzigen Prozessor oder ein Serversystem, aber in einer weiteren Ausführungsform kann das Computersystem 1100 ein Mehrprozessorsystem sein. In mindestens einer Ausführungsform kann der Prozessor 1102 ohne Einschränkung Folgendes beinhalten: einen Mikroprozessor eines Computers mit komplexem Anweisungssatz (complex instruction set computer - „CISC“), einen Mikroprozessor zum Berechnen mit reduziertem Anweisungssatz (reduced instruction set computing - „RISC“), einen Mikroprozessor mit sehr langen Anweisungsworten (very long instruction word - „VLIW“), einen Prozessor, der eine Kombination von Anweisungssätzen umsetzt, oder eine beliebige andere Prozessorvorrichtung, wie etwa ein digitaler Signalprozessor. In mindestens einer Ausführungsform kann der Prozessor 1102 an einen Prozessorbus 1110 gekoppelt sein, der Datensignale zwischen dem Prozessor 1102 und anderen Komponenten im Computersystem 1100 übermitteln kann.
In mindestens einer Ausführungsform kann der Prozessor 1102 ohne Einschränkung einen internen schnellen Pufferspeicher(„Zwischenspeicher“) der Ebene 1 („L1“) 1104 beinhalten. In mindestens einer Ausführungsform kann der Prozessor 1102 einen einzelnen internen Zwischenspeicher oder mehrere Ebenen des internen Zwischenspeichers aufweisen. In mindestens einer Ausführungsform kann sich der schnelle Pufferspeicher außerhalb des Prozessors 1102 befinden. Andere Ausführungsformen können auch eine Kombination von sowohl internen als auch externen Zwischenspeichern abhängig von einer bestimmten Umsetzung und Anforderungen beinhalten. In mindestens einer Ausführungsform kann die Registerdatei 1106 verschiedene Arten von Daten in verschiedenen Registern speichern, die ohne Einschränkung ein Ganzzahlregister, Gleitkommaregister, Statusregister und Anweisungsverweisregister beinhalten.
In mindestens einer Ausführungsform befindet sich die Ausführungseinheit 1108, die ohne Einschränkung eine Logik zum Durchführen von Ganzzahl- und Gleitkommaoperationen beinhaltet, ebenfalls im Prozessor 1102. In mindestens einer Ausführungsform kann der Prozessor 1102 außerdem einen Mikrocode-(„ucode“-)Nur-Lese-Speicher („ROM“) beinhalten, der Mikrocode für bestimmte Makrobefehle speichert. In mindestens einer Ausführungsform kann die Ausführungseinheit 1108 Logik beinhalten, um einen gepackten Anweisungssatz 1109 zu handhaben. In mindestens einer Ausführungsform können Operationen, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung von gepackten Daten in einem Allzweckprozessor 1102 durch das Beinhalten des gepackten Anweisungssatzes 1109 in einen Anweisungssatz eines Allzweckprozessors 1102 durchgeführt werden, zusammen mit einer zugehörigen Schaltung, um Befehle auszuführen. In einer oder mehreren Ausführungsformen können viele Multimediaanwendungen beschleunigt und effizienter durch das Verwenden der vollen Breite des Datenbusses eines Prozessors zum Ausführen von Operationen an gepackten Daten ausgeführt werden, wodurch die Notwendigkeit beseitigt werden kann, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen ein Datenelement nach dem anderen durchzuführen.
In mindestens einer Ausführungsform kann die Ausführungseinheit 1108 auch in Mikrosteuerungen, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Arten von Logikschaltungen verwendet werden. In mindestens einer Ausführungsform kann das Computersystem 1100 ohne Einschränkung einen Speicher 1120 beinhalten. In mindestens einer Ausführungsform kann der Speicher 1120 als ein dynamischer Direktzugriffsspeicher (Dynamic Random Access Memory - „DRAM“), ein statischer Direktzugriffsspeicher (Static Random Access Memory - „SRAM“), eine Flash-Speichervorrichtung oder eine andere Speichervorrichtung umgesetzt sein. In mindestens einer Ausführungsform kann der Speicher 1120 Anweisung(en) 1119 und/oder Daten 1121 speichern, die durch Datensignale dargestellt sind, die durch den Prozessor 1102 ausgeführt werden können.
In mindestens einer Ausführungsform kann der Systemlogikchip an den Prozessorbus 1110 und den Speicher 1120 gekoppelt sein. In mindestens einer Ausführungsform kann der Systemlogikchip ohne Einschränkung einen Speichersteuerungshub (memory controller hub - „MCH“) 1116 beinhalten, und der Prozessor 1102 kann mit dem MCH 1116 über den Prozessorbus 1110 kommunizieren. In mindestens einer Ausführungsform kann der MCH 1116 einen Speicherpfad mit hoher Bandbreite 1118 zum Speicher 1120 zur Anweisungs- 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 im 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 Grafikport zum Koppeln an eine Grafiksteuerung bereitstellen. In mindestens einer Ausführungsform kann der MCH 1116 über einen Speicherpfad mit hoher Bandbreite 1118 an den Speicher 1120 gekoppelt sein und die Grafik-/Videokarte 1112 kann an den MCH 1116 über eine Verbindung eines beschleunigten Grafikports (Accelerated Graphics Port - „AGP“) 1114 gekoppelt sein.
In mindestens einer Ausführungsform kann das Computersystem 1100 die System-E/A 1122 verwenden, die ein proprietärer Hubschnittstellenbus ist, um den MCH 1116 an den E/A-Steuerungshub (I/O controller hub - „ICH“) 1130 zu koppeln. In mindestens einer Ausführungsform kann der ICH 1130 über einen lokalen E/A-Bus direkte Verbindungen zu einigen E/A-Vorrichtungen bereitstellen. In mindestens einer Ausführungsform kann der lokale E/A-Bus ohne Einschränkung einen Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 1120, dem Chipsatz und dem Prozessor 1102 beinhalten. Beispiele können ohne Einschränkung eine Audiosteuerung 1129, einen Firmware-Hub („Flash-BIOS“) 1128, einen drahtlosen Sendeempfänger 1126, einen Datenspeicher 1124, eine Alt-E/A-Steuerung 1123, die Benutzereingabe- und Tastaturschnittstellen 1125 beinhaltet, einen seriellen Erweiterungsport 1127, wie etwa universellen seriellen Bus („USB“), und eine Netzsteuerung 1134 beinhalten. Der Datenspeicher 1124 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, ein Flash-Speichervorrichtung oder eine andere Massenspeichervorrichtung umfassen.
In mindestens einer Ausführungsform veranschaulicht 11 ein System, das miteinander verbundene Hardwarevorrichtungen oder „Chips“ beinhaltet, wohingegen in anderen Ausführungsformen 11 ein beispielhaftes System auf einem Chip („SoC“) veranschaulichen kann. In mindestens einer Ausführungsform können die in 11 veranschaulichten Vorrichtungen mit proprietären Verbindungen, standardisierten Verbindungen (z. B. PCle) oder einer Kombination davon verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten des Computersystems 1100 unter Verwendung von Compute-Express-Link-(CXL-)Verbindungen miteinander verbunden.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 11 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 11 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen kombiniert, wie sie auf eine oder mehrere der 1-6 bezogen sind. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen kombiniert, wie sie auf eine oder mehrere der 1-6 bezogen sind. In mindestens einer Ausführungsform wird der Prozessor 1102 und/oder andere Komponenten des Rechensystems 1100 von 11 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit den 1-6 beschrieben sind.
In mindestens einer Ausführungsform kann das System 1200 ohne Einschränkung einen Prozessor 1210 beinhalten, der kommunikativ an eine beliebige geeignete Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Vorrichtungen gekoppelt ist. In mindestens einer Ausführungsform ist der Prozessor 1210 unter Verwendung eines Busses oder einer Schnittstelle gekoppelt, wie etwa eines I2C-Busses, eines Systemverwaltungsbusses (System Management Bus - „SMBus“), eines Busses mit geringer Pin-Anzahl (Low Pin Count - LPC), einer seriellen Peripherieschnittstelle (Serial Peripheral Interface - „SPI“), eines High-Definition-Audio-(„HDA“-)Busses, eines Serial-Advance-Technology-Attachment-(„SATA“-)Busses, eines universellen seriellen Busses („USB“) (Versionen 1, 2, 3) oder eines Busses eines universellen asynchronen Empfänger/Senders (Universal Asynchronous Receiver/Transmitter - „UART“). In mindestens einer Ausführungsform veranschaulicht 12 ein System, das miteinander verbundene Hardwarevorrichtungen oder „Chips“ beinhaltet, wohingegen in anderen Ausführungsformen 12 ein beispielhaftes System auf einem Chip („SoC“) veranschaulichen kann. In mindestens einer Ausführungsform können die in 12 veranschaulichten Vorrichtungen mit proprietären Verbindungen, standardisierten Verbindungen (z. B. PCle) oder einer Kombination davon verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten der 12 unter Verwendung von Compute-Express-Link-(CXL-)Verbindungen miteinander verbunden.
In mindestens einer Ausführungsform kann 12 Folgendes beinhalten: ein Display 1224, einen Touchscreen 1225, ein Touchpad 1230, eine Nahfeldkommunikationseinheit (Near Field Communications - „NFC“) 1245, einen Sensorhub 1240, einen Wärmesensor 1246, einen Express-Chipsatz („EC“) 1235, ein Trusted-Platform-Modul („TPM“) 1238, BIOS-/Firmware-/Flash-Speicher („BIOS, FW Flash“) 1222, ein DSP 1260, ein Laufwerk 1220, wie etwa ein Festkörperlaufwerk (Solid State Disk - „SSD“) oder ein Festplattenlaufwerk (Hard Disk Drive - „HDD“), eine drahtlose lokale Netzeinheit (local area network - „WLAN“) 1250, eine Bluetooth-Einheit 1252, eine drahtlose Weitbereichsnetzeinheit (Wireless Wide Area Network - „WWAN“) 1256, ein globales Positionsbestimmungssystem (GPS) 1255, eine Kamera („USB 3.0-Kamera“) 1254, wie etwa eine USB 3.0-Kamera und/oder eine Speichereinheit mit doppelter Datenrate bei niedriger Leistung (Low Power Double Data Rate - „LPDDR“) („LPDDR3“) 1215, die zum Beispiel im LPDDR3-Standard umgesetzt ist. Diese Komponenten können jeweils auf beliebige geeignete Weise umgesetzt sein.
In mindestens einer Ausführungsform können andere Komponenten kommunikativ an den Prozessor 1210 durch die vorstehend erörterten Komponenten gekoppelt sein. In mindestens einer Ausführungsform können ein Beschleunigungsmesser 1241, Umgebungslichtsensor (Ambient Light Sensor - „ALS“) 1242, ein Kompass 1243 und ein Gyroskop 1244 kommunikativ an den Sensorhub 1240 gekoppelt sein. In mindestens einer Ausführungsform können der Wärmesensor 1239, ein Lüfter 1237, eine Tastatur 1236 und ein Touchpad 1230 kommunikativ an den EC 1235 gekoppelt sein. In mindestens einer Ausführungsform können der Lautsprecher 1263, die Kopfhörer 1264 und das Mikrofon („mic“) 1265 kommunikativ an eine Audioeinheit („Audiocodec und Klasse-d-Verstärker“) 1262 gekoppelt sein, die wiederum kommunikativ an den DSP 1260 gekoppelt sein kann. In mindestens einer Ausführungsform kann die Audioeinheit 1262 zum Beispiel und ohne Einschränkung einen Audiokodierer/-dekodierer („Codec“) und einen Klasse-D-Verstärker beinhalten. In mindestens einer Ausführungsform kann die SIM-Karte („SIM“) 1257 kommunikativ an die WWAN-Einheit 1256 gekoppelt sein. In mindestens einer Ausführungsform können Komponenten wie die WLAN-Einheit 1250 und die Bluetooth-Einheit 1252 sowie die WWAN-Einheit 1256 in einem Formfaktor der nächsten Generation (Next Generation Form Factor - „NGFF“) umgesetzt sein.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 im System der 12 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 12 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen kombiniert, wie sie auf eine oder mehrere der 1-6 bezogen sind. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen kombiniert, wie sie auf eine oder mehrere der bezogen sind. In mindestens einer Ausführungsform wird das System 1200 und/oder der Prozessor 1210 von 12 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform umfasst das Computersystem 1300 ohne Einschränkung mindestens eine Zentralverarbeitungseinheit („CPU“) 1302, die mit einem Kommunikationsbus 1310 verbunden ist, der unter Verwendung eines beliebigen geeigneten Protokolls umgesetzt ist, wie etwa PCI („Peripheral Component Interconnect“), Peripheral Component Interconnect Express („PCI-Express“), AGP („Accelerated Graphics Port“), HyperTransport oder einem beliebigen anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll. In mindestens einer Ausführungsform beinhaltet das Computersystem 1300 ohne Einschränkung einen Hauptspeicher 1304 und eine Steuerlogik (z. B. umgesetzt als Hardware, Software oder eine Kombination davon) und Daten werden im Hauptspeicher 1304 gespeichert, der die Form eines Direktzugriffsspeichers (random access memory - „RAM“) annehmen kann. In mindestens einer Ausführungsform stellt ein Netzschnittstellenteilsystem („Netzschnittstelle“) 1322 eine Schnittstelle zu anderen Computervorrichtungen und Netzen zum Empfangen von Daten von anderen Systemen und Übermitteln von Daten von dem Computersystem 1300 an anderen Systemen bereit.
In mindestens einer Ausführungsform beinhaltet das Computersystem 1300 in mindestens einer Ausführungsform ohne Einschränkung Eingabevorrichtungen 1308, ein Parallelverarbeitungssystem 1312 und Anzeigevorrichtungen 1306, die unter Verwendung einer herkömmlichen Kathodenstrahlröhre (cathode ray tube - „CRT“), Flüssigkristallanzeige (liquid crystal display - „LCD“), Leuchtdiode (light emitting diode - „LED“), Plasmaanzeige oder anderen geeigneten Anzeigetechnologien umgesetzt sein können. In mindestens einer Ausführungsform wird eine Benutzereingabe von Eingabevorrichtungen 1308 empfangen, wie etwa Tastatur, Maus, Touchpad, Mikrofon und mehr. In mindestens einer Ausführungsform kann sich jedes der vorstehenden Module auf einer einzigen Halbleiterplattform befinden, um ein Verarbeitungssystem zu bilden.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System 13 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 13 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird das Rechensystem 1300 und/oder mindestens eine PPU 1314 von 13 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform beinhaltet der USB-Stick 1420 ohne Einschränkung eine Verarbeitungseinheit 1430, eine USB-Schnittstelle 1440 und eine USB-Schnittstellenlogik 1450. In mindestens einer Ausführungsform kann die Verarbeitungseinheit 1430 ein beliebiges Befehlsausführungssystem, ein- Gerät oder eine Vorrichtung sein, die Befehle ausführen kann. In mindestens einer Ausführungsform kann die Verarbeitungseinheit 1430 ohne Einschränkung eine beliebige Anzahl und Art von Verarbeitungskernen (nicht gezeigt) beinhalten. In mindestens einer Ausführungsform umfasst der Verarbeitungskern 1430 eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit - „ASIC“), die optimiert ist, um jede Menge und Art von Operationen durchzuführen, die mit maschinellem Lernen verbunden sind. Zum Beispiel ist in mindestens einer Ausführungsform der Verarbeitungskern 1430 eine Tensor-Verarbeitungseinheit (tensor processing unit - „TPC“), die optimiert ist, um Ableitungsoperationen des maschinellen Lernens durchzuführen. In mindestens einer Ausführungsform ist der Verarbeitungskern 1430 eine Bildverarbeitungseinheit (vision processing unit - „VPU“), die optimiert ist, um Operationen maschinelles Sehen und der Ableitung durch maschinelles Lernen durchzuführen.
In mindestens einer Ausführungsform kann die USB-Schnittstelle 1440 eine beliebige Art von USB-Stecker oder USB-Buchse sein. Zum Beispiel ist in mindestens einer Ausführungsform die USB-Schnittstelle 1440 eine USB-3.0-Typ-C-Buchse für Daten und Leistung. In mindestens einer Ausführungsform ist die USB-Schnittstelle 1440 ein USB-3.0-Typ-A-Anschluss. In mindestens einer Ausführungsform kann die USB-Schnittstellenlogik 1450 eine beliebige Menge und eine beliebige Art von Logik beinhalten, die es der Verarbeitungseinheit 1430 ermöglicht, mit Vorrichtungen (z. B. dem Computer 1410) über den USB-Anschluss 1440 eine Schnittstelle zu bilden.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 im System der 14 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 14 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird die Verarbeitungseinheit 1430 von 14 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
Zusätzlich und in mindestens einer Ausführungsform sind zwei oder mehr GPUs 1510 über Hochgeschwindigkeitsverbindungen 1529(1)-1529(2) miteinander verbunden, die unter Verwendung ähnlicher oder anderer Protokolle/Links als die für Hochgeschwindigkeitsverbindungen 1540(1)-1540(N) verwendeten implementiert werden können. In ähnlicher Weise können zwei oder mehr der Multi-Core-Prozessoren 1505 über eine Hochgeschwindigkeitsverbindung 1528 verbunden sein, bei der es sich um symmetrische Multiprozessor (SMP)-Busse handeln kann, die mit 20 GB/s, 30 GB/s, 120 GB/s oder mehr arbeiten. Alternativ kann die gesamte Kommunikation zwischen den verschiedenen in 15A gezeigten Komponenten des Systems über ähnliche Protokolle/Links erfolgen (z. B. über eine gemeinsame Verbindungsstruktur).
In mindestens einer Ausführungsform ist jeder Multi-Core-Prozessor 1505 über Speicherverbindungen 1526(1)-1526(M) kommunikativ mit einem Prozessorspeicher 1501 (1)-1501 (M) verbunden, und jede GPU 1510(1)-1510(N) ist über GPU-Speicherverbindungen 1550(1)-1550(N) kommunikativ mit dem GPU-Speicher 1520(1)-1520(N) verbunden. In mindestens einer Ausführungsform können die Speicherverbindungen 1526 und 1550 ähnliche oder unterschiedliche Speicherzugriffstechnologien verwenden. Zum Beispiel und ohne Einschränkung können die Prozessorspeicher 1501(1)-1501(M) und die GPU-Speicher 1520 flüchtige Speicher wie dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder High Bandwidth Memory (HBM) sein und/oder nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram. In mindestens einer Ausführungsform kann ein Abschnitt des Prozessorspeichers 1501 ein flüchtiger Speicher und ein anderer Abschnitt ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer zweistufigen Speicherhierarchie (2LM)).
Wie hier beschrieben, können verschiedene Multi-Core-Prozessoren 1505 und GPUs 1510 zwar physisch mit einem bestimmten Speicher 1501 bzw. 1520 gekoppelt sein, und/oder es kann eine einheitliche Speicherarchitektur implementiert werden, bei der ein virtueller Systemadressraum (auch als „effektiver Adressraum“ bezeichnet) auf verschiedene physische Speicher verteilt ist. Zum Beispiel können die Prozessorspeicher 1501(1)-1501(M) jeweils 64 GB Systemadressraum umfassen und die GPU-Speicher 1520(1)-1520(N) jeweils 32 GB Systemadressraum, so dass sich bei M=2 und N=4 insgesamt 256 GB adressierbarer Speicher ergeben. Andere Werte für N und M sind möglich.
In mindestens einer Ausführungsform schließt der Prozessor 1507 eine Vielzahl von Kernen 1560A-1560D ein, jeder mit einem Translation Lookaside Buffer („TLB“) 1561A-1561D und einem oder mehreren Caches 1562A-1562D. In mindestens einer Ausführungsform können die Kerne 1560A-1560D verschiedene andere Komponenten zur Ausführung einer Anweisung und zur Verarbeitung von Daten einschließen, die nicht veranschaulicht sind. In mindestens einer Ausführungsform können die Caches 1562A-1562D Level 1 (L1) und Level 2 (L2) Caches umfassen. Darüber hinaus können ein oder mehrere gemeinsam genutzte Caches 1556 in die Caches 1562A-1562D eingeschlossen sein und von mehreren Kernen 1560A-1560D gemeinsam genutzt werden. Zum Beispiel schließt eine Ausführungsform des Prozessors 1507 24 Kerne ein, jeder mit seinem eigenen L1-Cache, zwölf gemeinsam genutzten L2-Caches und zwölf gemeinsam genutzten L3-Caches. In dieser Ausführungsform werden ein oder mehrere L2 und L3 Caches von zwei benachbarten Kernen gemeinsam genutzt. In mindestens einer Ausführungsform sind der Prozessor 1507 und das Grafikbeschleunigungsmodul 1546 mit dem Systemspeicher 1514 verbunden, der die Prozessorspeicher 1501(1)-1501(M) von 15A einschließen kann.
In mindestens einer Ausführungsform wird die Kohärenz von Daten und Befehlen, die in verschiedenen Caches 1562A-1562D, 1556 und im Systemspeicher 1514 gespeichert sind, über eine Inter-Core-Kommunikation über einen Kohärenzbus 1564 aufrechterhalten. Zum Beispiel kann in mindestens einer Ausführungsform jeder Cache eine Cache-Kohärenzlogik/Schaltung aufweisen, die ihm zugeordnet ist, um als Reaktion auf erkannte Lese- oder Schreibvorgänge in bestimmten Cache-Zeilen über den Kohärenzbus 1564 zu kommunizieren. In mindestens einer Ausführungsform wird ein Cache-Snooping-Protokoll über den Kohärenzbus 1564 implementiert, um Cache-Zugriffe auszuspähen.
In mindestens einer Ausführungsform koppelt eine Proxy-Schaltung 1525 das Grafikbeschleunigungsmodul 1546 kommunikativ an den Kohärenzbus 1564, so dass das Grafikbeschleunigungsmodul 1546 an einem Cache-Kohärenzprotokoll als Peer der Kerne 1560A-1560D teilnehmen kann. In mindestens einer Ausführungsform stellt eine Schnittstelle 1535 eine Verbindung zur Proxy-Schaltung 1525 über die Hochgeschwindigkeitsverbindung 1540 bereit und eine Schnittstelle 1537 verbindet das Grafikbeschleunigungsmodul 1546 mit der Hochgeschwindigkeitsverbindung 1540.
In mindestens einer Ausführungsform stellt eine Beschleuniger-Integrationsschaltung 1536 Dienste für die Cache-Verwaltung, den Speicherzugriff, die Kontextverwaltung und die Interrupt-Verwaltung im Namen einer Vielzahl von Grafikverarbeitungsengines 1531(1)-1531(N) des Grafikbeschleunigungsmoduls 1546 bereit. In mindestens einer Ausführungsform können die grafikverarbeitenden Engines 1531(1)-1531(N) jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. In mindestens einer Ausführungsform können die Grafikverarbeitungsengines 1531(1)-1531(N) alternativ verschiedene Arten von Grafikverarbeitungsengines innerhalb einer GPU umfassen, wie z. B. Grafikausführungseinheiten, Medienverarbeitungsengines (z. B. Video-Encoder/Decoder), Sampler und Blit-Engines. In mindestens einer Ausführungsform kann das Grafikbeschleunigungsmodul 1546 ein Grafikprozessor (GPU) mit einer Vielzahl von Grafikverarbeitungsengines 1531(1)-1531(N) sein oder die Grafikverarbeitungsengines 1531(1)-1531(N) können einzelne GPUs sein, die auf einem gemeinsamen Gehäuse, einer Linecard oder einem Chip integriert sind.
In mindestens einer Ausführungsform schließt die Beschleuniger-Integrationsschaltung 1536 eine Speicherverwaltungseinheit (MMU) 1539 zum Durchführen verschiedener Speicherverwaltungsfunktionen ein, wie z. B. Übersetzungen von virtuellem in physischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle für den Zugriff auf den Systemspeicher 1514. In mindestens einer Ausführungsform kann die MMU 1539 auch einen Translations-Lookaside-Buffer (TLB) (nicht gezeigt) einschließen, um Übersetzungen von virtuellen/effektiven in physische/reale Adressen zwischenzuspeichern. In mindestens einer Ausführungsform kann ein Cache 1538 Befehle und Daten für den effizienten Zugriff der Grafikverarbeitungsengines 1531(1)-1531(N) speichern. In mindestens einer Ausführungsform werden die im Cache 1538 und in den Grafikspeichern 1533(1)-1533(M) gespeicherten Daten mit den Kern-Caches 1562A-1562D, 1556 und dem Systemspeicher 1514 kohärent gehalten, möglicherweise unter Verwendung einer Abrufeinheit 1544. Wie bereits erwähnt, kann dies über eine Proxy-Schaltung 1525 im Namen des Cache 1538 und der Speicher 1533(1)-1533(M) erfolgen (z. B. das Senden von Aktualisierungen an den Cache 1538 in Relation zu Modifikationen/Zugriffen auf Cache-Zeilen in den Prozessor-Caches 1562A-1562D, 1556 und das Empfangen von Aktualisierungen vom Cache 1538).
In mindestens einer Ausführungsform speichert ein Satz von Registern 1545 Kontextdaten für Threads, die von den Grafikverarbeitungsengines 1531(1)-1531(N) ausgeführt werden, und eine Schaltung zur Kontextverwaltung 1548 verwaltet Thread-Kontexte. Zum Beispiel kann die Verwaltung 1548 Operationen zum Speichern und Wiederherstellen durchführen, um die Kontexte verschiedener Threads während des Umschaltens von Kontexten zu speichern und wiederherzustellen (z. B. wenn ein erster Thread gespeichert und ein zweiter Thread gespeichert wird, so dass ein zweiter Thread von einer Grafikverarbeitungsmaschine ausgeführt werden kann). Zum Beispiel kann die Schaltung zur Verwaltung des Kontexts 1548 bei einem Switch die aktuellen Registerwerte in einer bestimmten Region im Speicher speichern (z. B. identifiziert durch einen Kontextzeiger). Bei der Rückkehr zu einem Kontext können die Registerwerte dann wiederhergestellt werden. In mindestens einer Ausführungsform empfängt und verarbeitet eine Interrupt-Verwaltungsschaltung 1547 von Systemvorrichtungen empfangene Interrupts.
In mindestens einer Ausführungsform werden virtuelle/effektive Adressen von einer Graphics Processing Engine 1531 durch die MMU 1539 in reale/physische Adressen im Systemspeicher 1514 übersetzt. In mindestens einer Ausführungsform hält die Beschleunigerintegrationsschaltung 1536 mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 1546 und/oder andere Beschleunigervorrichtungen. In mindestens einer Ausführungsform kann das Grafikbeschleunigermodul 1546 für eine einzige Anwendung bestimmt sein, die auf dem Prozessor 1507 ausgeführt wird, oder es kann von mehreren Anwendungen gemeinsam genutzt werden. In mindestens einer Ausführungsform wird eine virtualisierte Grafikausführungsumgebung dargestellt, in der die Ressourcen der Grafikverarbeitungsengines 1531(1)-1531(N) von mehreren Anwendungen oder virtuellen Maschinen (VMs) gemeinsam genutzt werden. In mindestens einer Ausführungsform können die Ressourcen in „Scheiben“ unterteilt werden, die basierend auf den Verarbeitungsanforderungen und den den VMs und/oder Anwendungen zugeordneten Prioritäten verschiedenen VMs und/oder Anwendungen zugewiesen werden.
In mindestens einer Ausführungsform führt die Beschleuniger-Integrationsschaltung 1536 als Brücke zu einem System für das Grafikbeschleunigungsmodul 1546 durch und stellt Adressübersetzungs- und Systemspeicher-Cache-Dienste bereit. Darüber hinaus kann die Beschleuniger-Integrationsschaltung 1536 in mindestens einer Ausführungsform Virtualisierungsmöglichkeiten für einen Host-Prozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungsengines 1531(1)-1531(N), Interrupts und die Verwaltung des Speichers zu verwalten.
Da in mindestens einer Ausführungsform die Hardwareressourcen der grafikverarbeitenden Engines 1531(1)-1531(N) explizit auf einen realen Adressraum abgebildet werden, den der Host-Prozessor 1507 sieht, kann jeder Host-Prozessor diese Ressourcen direkt über einen effektiven Adresswert adressieren. In mindestens einer Ausführungsform besteht eine Funktion der Beschleuniger-Integrationsschaltung 1536 in der physischen Trennung der Grafikverarbeitungsengines 1531(1)-1531(N), so dass sie für ein System als unabhängige Einheiten erscheinen.
In mindestens einer Ausführungsform sind ein oder mehrere Grafikspeicher 1533(1)-1533(M) mit jeder der grafikverarbeitenden Engines 1531(1)-1531(N) verbunden, wobei N=M ist. In mindestens einer Ausführungsform speichern die Grafikspeicher 1533(1)-1533(M) Anweisungen und Daten, die von jeder der grafikverarbeitenden Engines 1531(1)-1531(N) verarbeitet werden. In mindestens einer Ausführungsform kann es sich bei den Grafikspeichern 1533(1)-1533(M) um flüchtige Speicher wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (z. B. GDDR5, GDDR6) oder HBM und/oder um nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram handeln.
In mindestens einer Ausführungsform können zur Reduzierung des Datenverkehrs über die Hochgeschwindigkeitsverbindung 1540 Vorspanntechniken verwendet werden, um sicherzustellen, dass die in den Grafikspeichern 1533(1)-1533(M) gespeicherten Daten von den Grafikverarbeitungsengines 1531(1)-1531(N) am häufigsten und von den Kernen 1560A-1560D vorzugsweise nicht (zumindest nicht häufig) verwendet werden. In mindestens einer Ausführungsform versucht ein Vorspannen-Mechanismus, die von den Kernen (und vorzugsweise nicht von den Grafikverarbeitungsengines 1531(1)-1531(N)) benötigten Daten in den Caches 1562A-1562D, 1556 und im Systemspeicher 1514 zu halten.
In mindestens einer Ausführungsform sind die Grafikverarbeitungsengines 1531(1)-1531(N) für eine einzige Anwendung oder einen einzigen Prozess unter einem einzigen Betriebssystem vorgesehen. In mindestens einer Ausführungsform kann eine einzelne Anwendung Anfragen anderer Anwendungen an die grafikverarbeitenden Engines 1531(1)-1531(N) weiterleiten und so eine Virtualisierung innerhalb einer VM/Partition bereitstellen.
In mindestens einer Ausführungsform können die Grafikverarbeitungsengines 1531(1)-1531(N) von mehreren VM-/Anwendungspartitionen gemeinsam genutzt werden. In mindestens einer Ausführungsform können gemeinsam genutzte Modelle einen System-Hypervisor verwenden, um die Grafikverarbeitungsengines 1531(1)-1531(N) zu virtualisieren und den Zugriff durch jedes Betriebssystem zu ermöglichen. In mindestens einer Ausführungsform gehören die Grafikverarbeitungsengines 1531(1)-1531(N) bei Systemen mit einer Partition ohne Hypervisor einem Betriebssystem. In mindestens einer Ausführungsform kann ein Betriebssystem die Grafikverarbeitungsengines 1531(1)-1531(N) virtualisieren, um den Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
In mindestens einer Ausführungsform wählt das Grafikbeschleunigungsmodul 1546 oder eine einzelne Grafikverarbeitungsengine 1531 (1)-1531(N) ein Prozesselement über ein Prozesshandle aus. In mindestens einer Ausführungsform sind die Prozesselemente im Systemspeicher 1514 gespeichert und können mit Hilfe einer hier beschriebenen Übersetzungstechnik von effektiven Adressen in reale Adressen adressiert werden. In mindestens einer Ausführungsform kann ein Prozesshandle ein implementierungsspezifischer Wert sein, der einem Hostprozess bereitgestellt wird, wenn er seinen Kontext bei der Grafikverarbeitungsengine 1531(1)-1531(N) registriert (d. h. wenn er die Systemsoftware aufruft, um ein Prozesselement zu einer verknüpften Prozesselementliste hinzuzufügen). In mindestens einer Ausführungsform können die unteren 16 Bits eines Prozesshandles ein Versatz eines Prozesselements innerhalb einer verknüpften Prozesselementliste sein.
In mindestens einer Ausführungsform können das Grafikbeschleunigungsmodul 1546 und/oder einzelne Grafikverarbeitungsengines 1531(1)-1531(N) von allen oder einer Teilmenge der Prozesse in einem System gemeinsam genutzt werden. In mindestens einer Ausführungsform kann eine Infrastruktur zum Einrichten von Prozesszuständen und zum Senden eines WD 1584 an ein Grafikbeschleunigungsmodul 1546 zum Starten eines Auftrags in einer virtualisierten Umgebung eingeschlossen sein.
In mindestens einer Ausführungsform ist ein Programmiermodell für dedizierte Prozesse implementierungsspezifisch. In mindestens einer Ausführungsform besitzt in diesem Modell ein einzelner Prozess das Grafikbeschleunigungsmodul 1546 oder eine individuelle Grafikverarbeitungsengine 1531. In mindestens einer Ausführungsform, wenn das Grafikbeschleunigungsmodul 1546 einem einzelnen Prozess gehört, initialisiert ein Hypervisor die Beschleuniger-Integrationsschaltung 1536 für eine besitzende Partition und ein Betriebssystem initialisiert die Beschleuniger-Integrationsschaltung 1536 für einen besitzenden Prozess, wenn das Grafikbeschleunigungsmodul 1546 zugewiesen wird.
In mindestens einer Ausführungsform holt eine WD-Abrufeinheit 1591 in der Scheibe 1590 der Beschleunigerintegration die nächste WD 1584 ab, die eine Angabe über die Arbeit einschließt, die von einer oder mehreren Grafikverarbeitungsengines des Grafikbeschleunigungsmoduls 1546 zu leisten ist. In mindestens einer Ausführungsform können die Daten von WD 1584 in Registern 1545 gespeichert und von der MMU 1539, der Interrupt-Verwaltungsschaltung 1547 und/oder der Kontextverwaltungsschaltung 1548 verwendet werden, wie veranschaulicht. Zum Beispiel schließt eine Ausführungsform der MMU 1539 eine Segment-/Seitenlaufschaltung für den Zugriff auf Segment-/Seitentabellen 1586 innerhalb eines virtuellen OS-Adressraums 1585 ein. In mindestens einer Ausführungsform kann die Interrupt-Verwaltungsschaltung 1547 die vom Grafikbeschleunigungsmodul 1546 empfangenen Interrupt-Ereignisse 1592 verarbeiten. In mindestens einer Ausführungsform wird beim Durchführen von grafischen Operationen eine von einer Grafikverarbeitungsengine 1531(1)-1531(N) erzeugte effektive Adresse 1593 von der MMU 1539 in eine reale Adresse übersetzt.
In mindestens einer Ausführungsform sind die Register 1545 für jede Grafikverarbeitungsengine 1531(1)-1531(N) und/oder jedes Grafikbeschleunigungsmodul 1546 dupliziert und können von einem Hypervisor oder einem Betriebssystem initialisiert werden. In mindestens einer Ausführungsform kann jedes dieser duplizierten Register in eine Scheibe zur Integration des Beschleunigers 1590 eingeschlossen werden. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, sind in Tabelle 1 gezeigt. Tabelle 1 - durch Hypervisor initialisierte Register
Register # | Beschreibung |
1 | Slice-Steuerregister |
2 | Geplanter Prozess-Bereichszeiger für reale Adresse (RA) |
3 | Autoritätsmasken-Überschreibungsregister |
4 | Unterbrechungsvektor-Tabelleneintragsversatz |
5 | Unterbrechungsvektor-Tabelleneintragsbegrenzung |
6 | Zustandsregister |
7 | Logische Partitions-ID |
8 | Hypervisor-Beschleunigernutzungsaufzeichnungszeiger für reale Adresse (RA) |
9 | Speicherbeschreibungsregister |
Beispielhafte Register, die durch ein Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - durch Betriebssystem initialisierte Register
1 | Prozess- und Thread-Identifikation |
2 | Kontext-Sicherungs-/-Wiederherstellungszeiger für effektive Adresse (EA) |
3 | Beschleunigernutzungsaufzeichnungszeiger für virtuelle Adresse (VA) |
4 | Speichersegmenttabellenzeiger für virtuelle Adresse (VA) |
5 | Autoritätsmaske |
6 | Arbeitsdeskriptor |
In mindestens einer Ausführungsform ist jedes WD 1584 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 1546 und/oder die Grafikverarbeitungsengines 1531(1)-1531(N). In mindestens einer Ausführungsform enthält er alle Informationen, die eine Grafikverarbeitungsengine 1531(1)-1531(N) benötigt, um Arbeit zu verrichten, oder er kann ein Zeiger auf eine Position im Speicher sein, an der eine Anwendung eine Befehlswarteschlange von zu verrichtender Arbeit eingerichtet hat.
In mindestens einer Ausführungsform erlauben gemeinsame Programmiermodelle allen oder einer Teilmenge von Prozessen aus allen oder einer Teilmenge von Partitionen in einem System, ein Grafikbeschleunigungsmodul 1546 zu verwenden. In mindestens einer Ausführungsform gibt es zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 1546 von mehreren Prozessen und Partitionen gemeinsam genutzt wird, nämlich die zeitlich geteilte und die grafisch gerichtete gemeinsame Nutzung.
In diesem Modell gehört dem Systemhypervisor 1596 das Grafikbeschleunigungsmodul 1546 und er stellt seine Funktion allen Betriebssystemen 1595 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 1546 die Virtualisierung durch den Systemhypervisor 1596 unterstützt, kann das Grafikbeschleunigungsmodul 1546 Folgendes beachten: 1) Die Aufgabenanforderung einer Anwendung muss autonom sein (d. h. der Status muss zwischen den Aufträgen nicht aufrechterhalten werden) oder das Grafikbeschleunigungsmodul 1546 muss einen Kontextsicherungs- und -wiederherstellungsmechanismus bereitstellen. 2) Das Grafikbeschleunigungsmodul 1546 garantiert, dass eine Aufgabenanforderung einer Anwendung in einer bestimmten Zeit abgeschlossen wird, was etwaige Übersetzungsfehler beinhaltet, oder das Grafikbeschleunigungsmodul 1546 stellt eine Fähigkeit bereit, einer Verarbeitung einer Aufgabe zuvorzukommen. 3) Dem Grafikbeschleunigungsmodul 1546 muss die Fairness zwischen den Prozessen garantiert werden, wenn es in einem geleiteten gemeinsam genutzten Programmiermodell betrieben wird.
In mindestens einer Ausführungsform ist die Anwendung 1580 erforderlich, um einen Systemaufruf des Betriebssystems 1595 mit einer Art eines Grafikbeschleunigungsmoduls, einem Arbeitsdeskriptor (WD), einem Berechtigungsmaskenregisterwert (authority mask register - AMR) und einem Kontextsicherungs-/-wiederherstellungsbereichsverweis (context save/restore area pointer - CSRP) durchzuführen. In mindestens einer Ausführungsform beschreibt die Art des Grafikbeschleunigungsmoduls eine gezielte Beschleunigungsfunktion für einen Systemaufruf. In mindestens einer Ausführungsform kann die Art des Grafikbeschleunigungsmoduls ein systemspezifischer Wert sein. In mindestens einer Ausführungsform ist der WD speziell für das Grafikbeschleunigungsmodul 1546 formatiert und kann in Form eines Befehls des Grafikbeschleunigungsmoduls 1546, eines effektiven Adressverweises auf eine benutzerdefinierte Struktur, eines effektiven Adressverweises auf eine Warteschlange von Befehlen, oder eine beliebige andere Datenstruktur vorliegen, um die vom Grafikbeschleunigungsmodul 1546 auszuführende Arbeit zu beschreiben.
In einer Ausführungsform ist ein AMR-Wert ein AMR-Zustand, der für einen aktuellen Prozess zu verwenden ist. In mindestens einer Ausführungsform ähnelt ein an ein Betriebssystem übergebener Wert einer Anwendung, die einen AMR festlegt. Wenn Umsetzungen der Beschleunigerintegrationsschaltung 1536 und des Grafikbeschleunigungsmoduls 1546 ein Benutzerberechtigungsmaskenüberschreibungsregister (User Authority Mask Override Register - UAMOR) nicht unterstützen, kann ein Betriebssystem einen aktuellen UAMOR-Wert auf einen AMR-Wert anwenden, bevor ein AMR in einem Hypervisor-Aufruf übergeben wird. Der Hypervisor 1596 kann wahlweise einen aktuellen Wert des Berechtigungsmaskenüberschreibungsregisters (Authority Mask Override Register - AMOR) anwenden, bevor ein AMR in dem Prozesselement 1583 platziert wird. In mindestens einer Ausführungsform ist der CSRP eines der Register 1545, das eine effektive Adresse eines Bereichs im effektiven Adressbereich 1582 einer Anwendung enthält, damit das Grafikbeschleunigungsmodul 1546 den Kontextzustand speichert und wiederherstellt. Dieser Verweis ist optional, wenn kein Status zwischen Aufgaben gespeichert werden muss oder wenn eine Aufgabe vorzeitig beendet wird. In mindestens einer Ausführungsform kann der Kontextsicherungs-/-wiederherstellungsbereich ein fixierter Systemspeicher sein.
Beim Empfang eines Systemaufrufs kann das Betriebssystem 1595 überprüfen, ob die Anwendung 1580 registriert wurde und die Berechtigung erhalten hat, das Grafikbeschleunigungsmodul 1546 zu verwenden. Das Betriebssystem 1595 ruft dann den Hypervisor 1596 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - Parameter für Aufrufe vom Betriebssystem an den Hypervisor
Parameter # | Beschreibung |
1 | Ein Arbeitsdeskriptor (WD) |
2 | Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert) |
3 | Ein Kontext-Sicherungs-/-Wiederherstellungsbereichszeiger (CSRP) für effektive Adresse (EA) |
4 | Eine Prozess-ID (PID) und optionale Thread-ID (TID) |
5 | Ein Beschleunigernutzungsaufzeichnungszeiger (AURP) für virtuelle Adresse (VA) |
6 | Ein Speichersegmenttabellenzeiger (SSTP) für virtuelle Adresse |
7 | Eine logische Unterbrechungsdienstnummer (logical interrupt service number - LISN) |
Beim Empfang eines Hypervisor-Aufrufs überprüft der Hypervisor 1596, ob sich das Betriebssystem 1595 registriert hat und ihm die Berechtigung erteilt wurde, das Grafikbeschleunigungsmodul 1546 zu verwenden. Der Hypervisor 1596 setzt dann das Prozesselement 1583 in eine verlinkte Prozesselementliste für eine entsprechende Art des Grafikbeschleunigungsmoduls 1546. Ein Prozesselement kann die in Tabelle 4 gezeigten Informationen beinhalten. Tabelle 4 - Prozesselementeinformationen
1 | Ein Arbeitsdeskriptor (WD) |
2 | Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert). |
3 | Ein Kontext-Sicherungs-/-Wiederherstellungsbereichszeiger (CSRP) für effektive Adresse (EA) |
4 | Eine Prozess-ID (PID) und optionale Thread-ID (TID) |
5 | Ein Beschleunigernutzungsaufzeichnungszeiger (AURP) für virtuelle Adresse (VA) |
6 | Ein Speichersegmenttabellenzeiger (SSTP) für virtuelle Adresse |
7 | Eine logische Unterbrechungsdienstnummer (logical interrupt service number- LISN) |
8 | Unterbrechungsvektortabelle, abgeleitet aus Hypervisor-Aufrufparametern |
9 | Ein Zustandsregister(SR)-Wert |
10 | Ein Wert für eine logische Partition-ID (LPID) |
11 | Ein Hypervisor-Beschleunigernutzungsaufzeichnungszeiger für reale Adresse (RA) |
12 | Speicherdeskriptorregister (SDR) |
In mindestens einer Ausführungsform initialisiert der Hypervisor eine Vielzahl von Registern 1545 von Beschleunigerintegrations-Slices 1590.
Wie in 15F veranschaulicht, wird in mindestens einer Ausführungsform ein einheitlicher Speicher verwendet, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der für den Zugriff auf die physischen Prozessorspeicher 1501(1)-1501(N) und die GPU-Speicher 1520(1)-1520(N) verwendet wird. In dieser Implementierung nutzen Operationen, die auf den GPUs 1510(1)-1510(N) ausgeführt werden, denselben virtuellen/effektiven Speicheradressraum für den Zugriff auf die Prozessorspeicher 1501(1)-1501(M) und umgekehrt, was die Programmierbarkeit vereinfacht. In mindestens einer Ausführungsform wird ein erster Abschnitt eines virtuellen/effektiven Adressraums dem Prozessorspeicher 1501(1) zugewiesen, ein zweiter Abschnitt dem zweiten Prozessorspeicher 1501(N), ein dritter Abschnitt dem GPU-Speicher 1520(1) und so weiter. In mindestens einer Ausführungsform wird dadurch ein gesamter virtueller/effektiver Speicherraum (manchmal auch als effektiver Adressraum bezeichnet) über jeden der Prozessorspeicher 1501 und GPU-Speicher 1520 verteilt, so dass jeder Prozessor oder jede GPU auf jeden physischen Speicher mit einer auf diesen Speicher abgebildeten virtuellen Adresse zugreifen kann.
In mindestens einer Ausführungsform sorgt die Verwaltung der Vorspannung/Kohärenz 1594A-1594E in einer oder mehreren MMUs 1539A-1539E für die Cache-Kohärenz zwischen den Caches eines oder mehrerer Host-Prozessoren (z. B. 1505) und GPUs 1510 und implementiert Vorspanntechniken, die angeben, in welchen physischen Speichern bestimmte Datentypen gespeichert werden sollten. In mindestens einer Ausführungsform, während mehrere Instanzen der Verwaltung der Vorspannung/Kohärenz 1594A-1594E in 15F veranschaulicht sind, kann die Schaltung für die Vorspannung/Kohärenz in einer MMU eines oder mehrerer Host-Prozessoren 1505 und/oder in der Integrationsschaltung des Beschleunigers 1536 implementiert sein.
Eine Ausführungsform ermöglicht es, die GPU-Speicher 1520 als Teil des Systemspeichers abzubilden und mit Hilfe der SVM-Technologie (Shared Virtual Memory) darauf zuzugreifen, ohne dabei Leistungsnachteile zu erleiden, die mit einer vollständigen System-Cache-Kohärenz verbunden sind. In mindestens einer Ausführungsform wird durch die Möglichkeit, auf die GPU-Speicher 1520 als Systemspeicher ohne lästigen Cache-Kohärenz-Overhead zuzugreifen, eine vorteilhafte Betriebsumgebung für GPU-Offload bereitgestellt. In mindestens einer Ausführungsform erlaubt diese Anordnung der Software des Host-Prozessors 1505, Operanden einzustellen und auf Berechnungsergebnisse zuzugreifen, ohne den Overhead traditioneller E/A-DMA-Datenkopien. In mindestens einer Ausführungsform sind solche herkömmlichen Kopien mit Treiberaufrufen, Unterbrechungen und speicherabgebildeten E/A-Zugriffen (MMIO) verbunden, die alle relativ zu einfachen Speicherzugriffen ineffizient sind. In mindestens einer Ausführungsform kann die Fähigkeit, auf GPU-Speicher 1520 ohne Cache-Kohärenz-Overheads zuzugreifen, entscheidend für die Ausführungszeit einer ausgelagerten Berechnung sein. In mindestens einer Ausführungsform kann der Cache-Kohärenz-Overhead zum Beispiel in Fällen mit erheblichem Streaming-Schreibspeicherverkehr die effektive Schreibbandbreite für eine GPU 1510 erheblich reduzieren. In mindestens einer Ausführungsform können die Effizienz des Operandenaufbaus, die Effizienz des Ergebniszugriffs und die Effizienz des Berechnens durch die GPU eine Rolle beim Bestimmen der Effektivität eines GPU-Offloads spielen.
In mindestens einer Ausführungsform wird die Auswahl der GPU-Vorspannung und der Host-Prozessor-Vorspannung durch eine Bias-Tracker-Datenstruktur gesteuert. In mindestens einer Ausführungsform kann zum Beispiel eine Vorspanntabelle verwendet werden, die eine seitengranulare Struktur sein kann (z. B. gesteuert durch die Granularität einer Speicherseite), die 1 oder 2 Bits pro GPU-angeschlossene Speicherseite einschließt. In mindestens einer Ausführungsform kann eine Bias-Tabelle in einem gestohlenen Speicherbereich eines oder mehrerer GPU-Speicher 1520 implementiert werden, mit oder ohne Bias-Cache in einer GPU 1510 (z. B. um häufig/kürzlich verwendete Einträge einer Bias-Tabelle zu cachen). Alternativ dazu kann in mindestens einer Ausführungsform eine gesamte Vorspanntabelle in einer GPU vorgehalten werden.
In mindestens einer Ausführungsform wird vor dem eigentlichen Zugriff auf einen GPU-Speicher auf einen jedem Zugriff auf einen GPU-Anschlussspeicher 1520 zugeordneten Bias-Tabelleneintrag zugegriffen, was folgende Operationen auslöst. In mindestens einer Ausführungsform werden lokale Anfragen von einer GPU 1510, die ihre Seite in GPU bias finden, direkt an einen entsprechenden GPU-Speicher 1520 weitergeleitet. In mindestens einer Ausführungsform werden lokale Anfragen von einer GPU, die ihre Seite in der Host-Vorspannung finden, an den Prozessor 1505 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, wie hier beschrieben). In mindestens einer Ausführungsform schließen Anfragen des Prozessors 1505, die eine angeforderte Seite in der Vorspannung des Host-Prozessors finden, eine Anfrage wie eine normale Speicherlesung ab. Alternativ dazu können Anfragen, die an eine GPU-gespannte Seite gerichtet sind, an eine GPU 1510 weitergeleitet werden. In mindestens einer Ausführungsform kann eine GPU dann eine Seite in einen Host-Prozessor-Bias überführen, wenn sie die Seite gerade nicht verwendet. In mindestens einer Ausführungsform kann der Zustand einer Seite entweder durch einen softwarebasierten Mechanismus, einen hardwareunterstützten softwarebasierten Mechanismus oder, für eine begrenzte Anzahl von Fällen, durch einen rein hardwarebasierten Mechanismus verändert werden.
In mindestens einer Ausführungsform verwendet ein Mechanismus zur Veränderung des Vorspannungszustands einen API-Aufruf (z. B. OpenCL), der wiederum den Gerätetreiber einer GPU aufruft, der seinerseits eine Nachricht (oder einen Befehlsdeskriptor) an eine GPU sendet, um ihn anzuweisen, einen Vorspannungszustand zu verändern und bei einigen Übergängen eine Operation zum Durchführen eines Cache-Flushes in einem Host durchzuführen. In mindestens einer Ausführungsform wird eine Operation zum Leeren des Caches für den Übergang von der Vorspannung des Host-Prozessors 1505 zur Vorspannung der GPU verwendet, nicht aber für den entgegengesetzten Übergang.
In mindestens einer Ausführungsform wird die Cache-Kohärenz aufrechterhalten, indem GPU-vorgespannte Seiten vom Host-Prozessor 1505 vorübergehend nicht gecacht werden können. In mindestens einer Ausführungsform kann der Prozessor 1505, um auf diese Seiten zuzugreifen, den Zugriff von der GPU 1510 anfordern, die den Zugriff sofort gewähren kann oder auch nicht. In mindestens einer Ausführungsform ist es daher zur Verringerung der Kommunikation zwischen Prozessor 1505 und GPU 1510 vorteilhaft, dafür zu sorgen, dass GPU-gespannte Seiten diejenigen sind, die von einer GPU, aber nicht vom Host-Prozessor 1505 benötigt werden und umgekehrt.
Hardware-Struktur(en) 715 werden verwendet, um eine oder mehrere Ausführungsformen durchzuführen. Einzelheiten zu Hardware-Struktur(en) 715 können hier in Verbindung mit 7A und/oder 7B bereitgestellt werden..
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 in der integrierten Schaltung 1600 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 16 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird die integrierte Schaltung 1600 von 16 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt der Grafikprozessor 1710 einen Scheitelpunktprozessor 1705 und einen oder mehrere Fragmentprozessor(en) 1715A-1715N (z. B. 1715A, 1715B, 1715C, 1715D, bis 1715N-1 und 1715N) ein. In mindestens einer Ausführungsform kann der Grafikprozessor 1710 verschiedene Shader-Programme über eine getrennte Logik ausführen, so dass der Scheitelpunkt-Prozessor 1705 für die Ausführung von Operationen für Scheitelpunkt-Shader-Programme optimiert ist, während ein oder mehrere Fragment-Prozessor(en) 1715A-1715N Fragment- (z. B. Pixel-) Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einer Ausführungsform führt der Scheitelpunktprozessor 1705 eine Scheitelpunktverarbeitungsstufe einer 3D-Grafikpipeline durch und erzeugt Scheitelpunkte und Scheiteldaten. In mindestens einer Ausführungsform verwenden der oder die Fragmentprozessoren 1715A-1715N die vom Scheitelpunktprozessor 1705 erzeugten Primitiv- und Scheitelpunktdaten, um einen Framebuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In mindestens einer Ausführungsform ist/sind der/die Fragmentprozessor(en) 1715A-1715N so optimiert, dass er/sie Fragment-Shader-Programme ausführen kann/können, wie sie in einer OpenGL API bereitgestellt werden, mit denen ähnliche Operationen wie mit einem Pixel-Shader-Programm durchgeführt werden können, wie sie in einer Direct 3D API bereitgestellt werden.
In mindestens einer Ausführungsform schließt der Grafikprozessor 1710 zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1720A-1720B, einen oder mehrere Cache(s) 1725A-1725B und eine oder mehrere Schaltkreisverbindungen 1730A-1730B ein. In mindestens einer Ausführungsform stellt/stellen eine oder mehrere MMU(s) 1720A-1720B die Abbildung von virtuellen auf physische Adressen für den Grafikprozessor 1710 bereit, einschließlich für den Scheitelpunktprozessor 1705 und/oder den/die Fragmentprozessor(en) 1715A-1715N, der/die zusätzlich zu den in einem oder mehreren Cache(s) 1725A-1725B gespeicherten Scheitelpunkt- oder Bild-/Texturdaten auf im Speicher gespeicherte Karten verweisen kann/können. In mindestens einer Ausführungsform können eine oder mehrere MMU(s) 1720A-1720B mit anderen MMUs innerhalb eines Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die einem oder mehreren Anwendungsprozessoren 1605, Bildprozessoren 1615 und/oder Videoprozessoren 1620 von 16 zugeordnet sind, so dass jeder Prozessor 1605-1620 an einem gemeinsamen oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. In mindestens einer Ausführungsform ermöglichen eine oder mehrere Schaltkreisverbindung(en) 1730A-1730B dem Grafikprozessor 1710, sich mit anderen IP-Cores innerhalb des SoC zu verbinden, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
In mindestens einer Ausführungsform schließt der Grafikprozessor 1740 einen oder mehrere Shader-Kern(e) 1755A-1755N (z. B, 1755A, 1755B, 1755C, 1755D, 1755E, 1755F, bis 1755N-1 und 1755N), wie in 17B gezeigt, die eine einheitliche Shader-Kern-Architektur bereitstellt, bei der ein einziger Kern oder Typ oder Kern alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zur Implementierung von Scheitelpunkten, Fragment-Shadern und/oder Rechen-Shadern. In mindestens einer Ausführungsform kann die Anzahl der Shader-Kerne variieren. In mindestens einer Ausführungsform schließt der Grafikprozessor 1740 einen Inter-Core-Taskmanager 1745 ein, der als Thread-Abfertiger fungiert, um Ausführungs-Threads an einen oder mehrere Shader-Kerne 1755A-1755N und eine Tiling-Einheit 1758 zu verteilen, um Tiling-Operationen für kachelbasiertes Rendering zu beschleunigen, bei denen Rendering-Operationen für eine Szene im Bildraum unterteilt werden, um zum Beispiel die lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Nutzung interner Caches zu optimieren.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 in der integrierten Schaltung 17A und/oder 17B für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 17A und/oder 17B gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der Grafikprozessor 1710 von 17A und/oder der Grafikprozessor 1740 von 17B verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt der Grafikkern 1800 einen gemeinsam genutzten Anweisungs-Cache 1802, eine Textureinheit 1818 und einen Cache/Speicher 1820 ein, die den Ausführungsressourcen innerhalb des Grafikkerns 1800 gemeinsam sind. In mindestens einer Ausführungsform kann der Grafikkern 1800 mehrere Scheiben 1801A-1801N oder eine Partition für jeden Kern einschließen, und ein Grafikprozessor kann mehrere Instanzen des Grafikkerns 1800 einschließen. In mindestens einer Ausführungsform können die Scheiben 1801A-1801N eine Unterstützungslogik einschließen, die einen lokalen Anweisungs-Cache 1804A-1804N, einen Thread-Abfertiger 1806A-1806N, einen Threadplaner 1808A-1808N und einen Satz von Registern 1810A-1810N umfasst. In mindestens einer Ausführungsform können die Scheiben 1801A-1801N einen Satz zusätzlicher Funktionseinheiten (AFUs 1812A-1812N), Gleitkommaeinheiten (FPUs 1814A-1814N), ganzzahlige arithmetische Logikeinheiten (ALUs 1816A-1816N), Adressberechnungseinheiten (ACUs 1813A-1813N), doppeltgenaue Gleitkommaeinheiten (DPFPUs 1815A-1815N) und Matrixverarbeitungseinheiten (MPUs 1817A-1817N) einschließen.
In mindestens einer Ausführungsform können die FPUs 1814A-1814N Gleitkommaoperationen mit einfacher Genauigkeit (32 Bit) und halber Genauigkeit (16 Bit) durchführen, während die DPFPUs 1815A-1815N Gleitkommaoperationen mit doppelter Genauigkeit (64 Bit) durchführen. In mindestens einer Ausführungsform können die ALUs 1816A-1816N Integer-Operationen mit variabler Präzision bei 8-Bit-, 16-Bit- und 32-Bit-Präzision durchführen und können für Operationen mit gemischter Präzision konfiguriert werden. In mindestens einer Ausführungsform können die MPUs 1817A-1817N auch für Matrixoperationen mit gemischter Genauigkeit konfiguriert werden, die Gleitkomma- und 8-Bit-Ganzzahloperationen mit halber Genauigkeit einschließen. In mindestens einer Ausführungsform können die MPUs 1817-1817N eine Vielzahl von Matrixoperationen durchführen, um Anwendungen des maschinellen Lernens zu beschleunigen, einschließlich der Unterstützung für eine beschleunigte allgemeine Matrix-Matrix-Multiplikation (GEMM). In mindestens einer Ausführungsform können die AFUs 1812A-1812N zusätzliche logische Operationen durchführen, die von Gleitkomma- oder Ganzzahl-Einheiten nicht unterstützt werden, einschließlich trigonometrischer Operationen (z. B. Sinus, Kosinus usw.).
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im Grafikkern 1800 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 18A gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der Grafikkern 1800 von 18A verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt die GPGPU 1830 den Speicher 1844A-1844B ein, der über eine Reihe von Speicher-Controllern 1842A-1842B mit den Rechen-Clustern 1836A-1836H verbunden ist. In mindestens einer Ausführungsform kann der Speicher 1844A-1844B verschiedene Arten von Speichervorrichtungen einschließen, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafik-Direktzugriffsspeichers, wie z. B. eines synchronen Grafik-Direktzugriffsspeichers (SGRAM), einschließlich eines Grafik-Doppeldatenraten-Speichers (GDDR).
In mindestens einer Ausführungsform schließen die Rechen-Cluster 1836A-1836H jeweils einen Satz von Grafikkernen ein, wie z. B. den Grafikkern 1800 von 18A , der mehrere Arten von Ganzzahl- und Gleitkomma-Logikeinheiten einschließen kann, die Rechenoperationen mit einer Reihe von Genauigkeiten durchführen können, die auch für maschinelle Lernberechnungen geeignet sind. Zum Beispiel kann in mindestens einer Ausführungsform mindestens eine Teilmenge der Gleitkomma-Einheiten in jedem der Rechen-Cluster 1836A-1836H so konfiguriert werden, dass sie 16-Bit- oder 32-Bit-Gleitkomma-Operationen durchführt, während eine andere Teilmenge der Gleitkomma-Einheiten so konfiguriert werden kann, dass sie 64-Bit-Gleitkomma-Operationen durchführt.
In mindestens einer Ausführungsform können mehrere Instanzen der GPGPU 1830 für die Operation als Rechen-Cluster konfiguriert werden. In mindestens einer Ausführungsform variiert die von den Rechen-Clustern 1836A-1836H für die Synchronisation und den Datenaustausch verwendete Kommunikation. In mindestens einer Ausführungsform kommunizieren mehrere Instanzen der GPGPU 1830 über die Host-Schnittstelle 1832. In mindestens einer Ausführungsform schließt die GPGPU 1830 einen E/A-Hub 1839 ein, der die GPGPU 1830 mit einem GPU-Link 1840 verbindet, der eine direkte Verbindung zu anderen Instanzen der GPGPU 1830 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verbindung 1840 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 1830 ermöglicht. In mindestens einer Ausführungsform ist GPU-Link 1840 mit einer Hochgeschwindigkeitsverbindung gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu übertragen und zu empfangen. In mindestens einer Ausführungsform befinden sich mehrere Instanzen der GPGPU 1830 in getrennten Systemen zur Datenverarbeitung und kommunizieren über eine Netz-Vorrichtung, die über die Host-Schnittstelle 1832 zugänglich ist. In mindestens einer Ausführungsform kann GPU-Link 1840 so konfiguriert sein, dass eine Verbindung zu einem Host-Prozessor zusätzlich oder alternativ zur Host-Schnittstelle 1832 möglich ist.
In mindestens einer Ausführungsform kann die GPGPU 1830 so konfiguriert sein, dass sie neuronale Netze trainiert. In mindestens einer Ausführungsform kann die GPGPU 1830 innerhalb einer Ableitungsplattform verwendet werden. In mindestens einer Ausführungsform, in der GPGPU 1830 für die Ableitung verwendet wird, kann GPGPU 1830 relativ zu dem Fall, dass GPGPU 1830 für das Training eines neuronalen Netzes verwendet wird, weniger Rechen-Cluster 1836A-1836H einschließen. In mindestens einer Ausführungsform kann sich die dem Speicher 1844A-1844B zugeordnete Speichertechnologie zwischen Ableitungs- und Trainingskonfigurationen unterscheiden, wobei den Trainingskonfigurationen Speichertechnologien mit höherer Bandbreite gewidmet sind. In mindestens einer Ausführungsform kann eine Inferenzkonfiguration der GPGPU 1830 das Ableiten spezifischer Anweisungen halten. Zum Beispiel kann in mindestens einer Ausführungsform eine Ableitungskonfiguration Unterstützung für eine oder mehrere 8-Bit-lnteger-Punktprodukt-Anweisungen bereitstellen, die bei Ableitungsoperationen für eingesetzte neuronale Netze verwendet werden können.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 in der GPGPU 1830 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 18B gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird die GPGPU 1830 von FIG. @12!B verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt das Verarbeitungs-Subsystem 1901 einen oder mehrere parallele(n) Prozessor(en) 1912 ein, die über einen Bus oder eine andere Kommunikationsverbindung 1913 mit dem Speicher-Hub 1905 verbunden sind. In mindestens einer Ausführungsform kann die Kommunikationsverbindung 1913 auf einer beliebigen Anzahl von standardbasierten Kommunikationsverbindungstechnologien oder -protokollen basieren, wie z. B. PCI Express, oder eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform bilden ein oder mehrere parallele(r) Prozessor(en) 1912 ein rechnerisch fokussiertes paralleles oder vektorielles Verarbeitungssystem, das eine große Anzahl von Rechenkernen und/oder Verarbeitungsclustern einschließen kann, wie z. B. einen Prozessor mit vielen integrierten Kernen (MIC). In mindestens einer Ausführungsform bilden einige oder alle Parallelprozessor(en) 1912 ein Grafikverarbeitungssubsystem, das Pixel an eine oder mehrere Anzeigevorrichtung(en) 1910A ausgeben kann, die über den E/A-Hub 1907 gekoppelt sind. In mindestens einer Ausführungsform kann (können) der (die) Parallelprozessor(en) 1912 auch eine Anzeigesteuereinheit und eine Anzeigeschnittstelle (nicht gezeigt) einschließen, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtung(en) 1910B zu ermöglichen.
In mindestens einer Ausführungsform kann eine Systemspeichereinheit 1914 mit dem E/A-Hub 1907 verbunden werden, um eine Speicherung für das Rechensystem 1900 bereitzustellen. In mindestens einer Ausführungsform kann ein E/A-Switch 1916 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, der Verbindungen zwischen dem E/A-Hub 1907 und anderen Komponenten ermöglicht, wie z. B. einem Netzadapter 1918 und/oder einem drahtlosen Netzadapter 1919, der in die Plattform integriert werden kann, und verschiedenen anderen Komponenten, die über eine oder mehrere Add-in-Vorrichtung(en) 1920 hinzugefügt werden können. In mindestens einer Ausführungsform kann der Netzadapter 1918 ein Ethernet-Adapter oder ein anderer kabelgebundener Netzadapter sein. In mindestens einer Ausführungsform kann der drahtlose Netzadapter 1919 eine oder mehrere der folgenden Vorrichtungen einschließen: Wi-Fi, Bluetooth, Near Field Communication (NFC) oder ein anderes drahtloses Gerät, das ein oder mehrere drahtlose Funkgeräte enthält.
In mindestens einer Ausführungsform kann das Rechensystem 1900 weitere, nicht explizit gezeigte Komponenten einschließen, einschließlich USB- oder andere Anschlussverbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die ebenfalls mit dem E/A-Hub 1907 verbunden sein können. In mindestens einer Ausführungsform können die Kommunikationspfade, die die verschiedenen Komponenten in 19 miteinander verbinden, unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie z. B. auf PCI (Peripheral Component Interconnect) basierende Protokolle (z. B. PCI-Express) oder andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokolle, wie z. B. NV-Link High-Speed-Interconnect oder Interconnect-Protokolle.
In mindestens einer Ausführungsform enthält der Parallelprozessor 1912 eine für die Grafik- und Videoverarbeitung optimierte Schaltung, die zum Beispiel eine Videoausgabeschaltung einschließt und eine Grafikverarbeitungseinheit (GPU) darstellt. In mindestens einer Ausführungsform enthalten der/die Parallelprozessor(en) 1912 Schaltkreise, die für die allgemeine Verarbeitung optimiert sind. In mindestens einer Ausführungsform können Komponenten des Rechensystems 1900 mit einem oder mehreren anderen Systemelementen auf einem einzigen integrierten Schaltkreis integriert sein. Zum Beispiel können in mindestens einer Ausführungsform der Parallelprozessor 1912, der Speicher-Hub 1905, der Prozessor (die Prozessoren) 1902 und der E/A-Hub 1907 in eine integrierte Schaltung für ein System auf einem Chip (SoC) integriert werden. In mindestens einer Ausführungsform können Komponenten des Rechensystems 1900 in ein einziges Gehäuse integriert werden, um eine System-in-Package-Konfiguration (SIP) zu bilden. In mindestens einer Ausführungsform kann zumindest ein Abschnitt der Komponenten des Rechensystems 1900 in ein Multi-Chip-Modul (MCM) integriert werden, das mit anderen Multi-Chip-Modulen zu einem modularen Rechensystem zusammengeschaltet werden kann.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann die Ableitungs- und/oder Trainingslogik 715 im System FIG. 1900 für Ableitungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtungsparametern basieren, die unter Verwendung von Trainingsoperationen neuronaler Netze, Funktionen und/oder Architekturen neuronaler Netze oder hierin beschriebenen Anwendungsfällen neuronaler Netze berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 19 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird das System 1900 von 19 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
PROZESSOREN
In mindestens einer Ausführungsform beinhaltet der Parallelprozessor 2000 eine Parallelverarbeitungseinheit 2002. In mindestens einer Ausführungsform beinhaltet die Parallelverarbeitungseinheit 2002 eine E/A-Einheit 2004, welche die Kommunikation mit anderen Vorrichtungen ermöglicht, was andere Instanzen der Parallelverarbeitungseinheit 2002 beinhaltet. In mindestens einer Ausführungsform kann die E/A-Einheit 2004 direkt mit anderen Vorrichtungen verbunden sein. In mindestens einer Ausführungsform verbindet sich die E/A-Einheit 2004 mit anderen Vorrichtungen über die Verwendung einer Hub- oder Switch-Schnittstelle, wie etwa dem Speicher-Hub 2005. In mindestens einer Ausführungsform bilden Verbindungen zwischen dem Speicher-Hub 2005 und der E/A-Einheit 2004 eine Kommunikationsverbindung 2013. In mindestens einer Ausführungsform ist die E/A-Einheit 2004 mit einer Hostschnittstelle 2006 und einer Speicher-Crossbar 2016 verbunden, wobei die Hostschnittstelle 2006 Befehle empfängt, die auf die Ausführung von Verarbeitungsoperationen gerichtet sind, und die Speicher-Crossbar 2016 Befehle empfängt, die auf die Ausführung von Speicheroperationen gerichtet sind.
In mindestens einer Ausführungsform kann die Hostschnittstelle 2006, wenn die Hostschnittstelle 2006 einen Befehlspuffer über die E/A-Einheit 2004 empfängt, Arbeitsoperationen anweisen, um diese Befehle an einem Front-End 2008 auszuführen. In mindestens einer Ausführungsform ist das Front-End 2008 mit einem Planer 2010 gekoppelt, der dazu konfiguriert ist, Befehle oder andere Arbeitselemente an ein Verarbeitungsclusterarray 2012 zu verteilen. In mindestens einer Ausführungsform stellt der Planer 2010 sicher, dass das Verarbeitungsclusterarray 2012 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an das Verarbeitungsclusterarray 2012 verteilt werden. In mindestens einer Ausführungsform wird der Planer 2010 über eine Firmware-Logik umgesetzt, die auf einer Mikrosteuerung ausgeführt wird. In mindestens einer Ausführungsform ist der durch eine Mikrosteuerung umgesetzte Planer 2010 konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorbelegung und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungsarray 2012 ausgeführt werden. In mindestens einer Ausführungsform kann die Host-Software Arbeitslasten zum Planen auf dem Verarbeitungsarray 2012 über eine von mehreren Doorbells für die Grafikverarbeitung nachweisen. In mindestens einer Ausführungsform können Arbeitslasten dann durch die Logik des Planers 2010 innerhalb einer Mikrosteuerung, die den Planer 2010 beinhaltet, automatisch über das Verarbeitungsarray 2012 verteilt werden.
In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2012 bis zu „N“ Verarbeitungscluster beinhalten (z. B. Cluster 2014A, Cluster 2014B bis Cluster 2014N), wobei „N“ eine positive ganze Zahl darstellt (die eine andere ganze Zahl „N“ sein kann als die von anderen Figuren). In mindestens einer Ausführungsform kann jeder Cluster 2014A-2014N des Verarbeitungsclusterarrays 2012 eine große Anzahl gleichzeitiger Threads ausführen. In mindestens einer Ausführungsform kann der Planer 2010 den Clustern 2014A-2014N des Verarbeitungsclusterarrays 2012 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen Arbeit zuweisen, die abhängig von der für jede Art von Programm oder Berechnung entstehenden Arbeitslasten variieren können. In mindestens einer Ausführungsform kann die Planung dynamisch durch den Planer 2010 gehandhabt werden oder kann teilweise durch die Compilerlogik während der Kompilierung der Programmlogik unterstützt werden, die für die Ausführung durch das Verarbeitungsclusterarray 2012 konfiguriert ist. In mindestens einer Ausführungsform können unterschiedliche Cluster 2014A-2014N des Verarbeitungsclusterarrays 2012 zum Verarbeiten unterschiedlicher Arten von Programmen oder zum Durchführen unterschiedlicher Arten von Berechnungen zugewiesen werden.
In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2012 dazu konfiguriert sein, verschiedene Arten von Parallelverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform ist das Verarbeitungsclusterarray 2012 dazu konfiguriert, universelle Parallelrechenoperationen durchzuführen. Zum Beispiel kann das Verarbeitungsclusterarray 2012 in mindestens einer Ausführungsform Logik zum Ausführen von Verarbeitungsaufgaben beinhalten, was das Filtern von Video- und/oder Audiodaten, das Durchführen von Modellierungsoperationen, was Physikoperationen beinhaltet, und das Durchführen von Datentransformationen beinhaltet.
In mindestens einer Ausführungsform ist das Verarbeitungsclusterarray 2012 dazu konfiguriert, parallele Grafikverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2012 zusätzliche Logik beinhalten, um die Ausführung derartiger Grafikverarbeitungsoperationen zu unterstützen, was Texturabtastlogik, um Texturoperationen durchzuführen, sowie Tessellationslogik und andere Scheitelpunktverarbeitungslogik beinhaltet, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2012 dazu konfiguriert sein, grafikverarbeitungsbezogene Shader-Programme auszuführen, wie etwa aber jedoch nicht beschränkt auf Scheitelpunkt-Shader, Tessellation-Shader, Geometrie-Shader und Pixel-Shader. In mindestens einer Ausführungsform kann die Parallelverarbeitungseinheit 2002 Daten vom Systemspeicher zur Verarbeitung über die E/A-Einheit 2004 übertragen. In mindestens einer Ausführungsform können während der Verarbeitung übertragene Daten während der Verarbeitung im On-Chip-Speicher (z. B. Parallelprozessorspeicher 2022) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
In mindestens einer Ausführungsform kann, wenn die Parallelverarbeitungseinheit 2002 verwendet wird, um eine Grafikverarbeitung durchzuführen, der Planer 2010 dazu konfiguriert sein, eine Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um bessere eine Verteilung von Grafikverarbeitungsoperationen auf mehrere Cluster 2014A-2014N des Verarbeitungsclusterarrays 2012 zu ermöglichen. In mindestens einer Ausführungsform können Teile des Verarbeitungsclusterarrays 2012 dazu konfiguriert sein, unterschiedliche Verarbeitungsarten durchzuführen. Zum Beispiel kann in mindestens einer Ausführungsform ein erster Teil dazu konfiguriert sein, Scheitelpunkt-Shading und Topologieerzeugung durchzuführen, ein zweiter Teil kann dazu konfiguriert sein, Tessellation und Geometrie-Shading durchzuführen, und ein dritter Teil dazu kann konfiguriert sein, Pixel-Shading oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild zur 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, um zu ermöglichen, dass Zwischendaten zwischen den Clustern 2014A-2014N zur weiteren Verarbeitung übermittelt werden.
In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2012 über den Planer 2010 auszuführende Verarbeitungsaufgaben empfangen, der Verarbeitungsaufgaben definierende Befehle vom Front-End 2008 empfängt. In mindestens einer Ausführungsform können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten beinhalten, z. B. Oberflächen-(Patch-)Daten, Primitivdaten, Scheitelpunkt-Daten und/oder Pixeldaten sowie Zustandsparameter und Befehle, die definieren, wie Daten verarbeitet werden sollen (z. B. welches Programm ausgeführt werden soll). In mindestens einer Ausführungsform kann der Planer 2010 dazu konfiguriert sein, Indizes abzurufen, die Aufgaben entsprechen, oder kann Indizes vom Front-End 2008 empfangen. In mindestens einer Ausführungsform kann das Front-End 2008 dazu konfiguriert sein, sicherzustellen, dass das Verarbeitungsclusterarray 2012 in einen gültigen Zustand konfiguriert ist, bevor eine durch eingehende Befehlspuffer (z. B. Stapelpuffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
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 die Speicher-Crossbar 2016 zugegriffen werden, die Speicheranforderungen von dem Verarbeitungsclusterarray 2012 sowie der E/A-Einheit 2004 empfangen kann. In mindestens einer Ausführungsform kann die Speicher-Crossbar 2016 über eine Speicherschnittstelle 2018 auf den Parallelprozessorspeicher 2022 zugreifen. In mindestens einer Ausführungsform kann die Speicherschnittstelle 2018 mehrere Partitionseinheiten (z. B. Partitionseinheit 2020A, Partitionseinheit 2020B bis Partitionseinheit 2020N) beinhalten, die jeweils an einen Teil (z. B. Speichereinheit) des Parallelprozessorspeichers 2022 koppeln können. In mindestens einer Ausführungsform ist eine Anzahl von Partitionseinheiten 2020A-2020N dazu konfiguriert, derartig gleich einer Anzahl von Speichereinheiten zu sein, dass eine erste Partitionseinheit 2020A eine entsprechende erste Speichereinheit 2024A aufweist, eine zweite Partitionseinheit 2020B eine entsprechende Speichereinheit 2024B aufweist und eine N-te Partitionseinheit 2020N eine entsprechende N-te Speichereinheit 2024N aufweist. In mindestens einer Ausführungsform ist eine Anzahl von Partitionseinheiten 2020A-2020N möglicherweise nicht gleich einer Anzahl von Speichervorrichtungen.
In mindestens einer Ausführungsform können die Speichereinheiten 2024A-2024N verschiedene Arten von Speichervorrichtungen umfassen, die dynamischen Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie etwa synchronen Grafik-Direktzugriffsspeicher (SGRAM) beinhalten, der Grafik-Doppeldatenraten-(GDDR-)Speicher beinhaltet. In mindestens einer Ausführungsform können die Speichereinheiten 2024A-2024N auch 3D-Stapelspeicher beinhalten, was Speicher mit hoher Bandbreite (high bandwidth memory - HBM) beinhaltet, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform können Renderziele, wie etwa Bildspeicher oder Texturkarten, über die Speichereinheiten 2024A-2024N gespeichert werden, was es den Partitionseinheiten 2020A-2020N ermöglicht, Teile jedes Renderziels parallel zu schreiben, 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 ausgeschlossen werden, das Systemspeicher in Verbindung mit lokalem schnellem Pufferspeicher nutzt.
In mindestens einer Ausführungsform kann jeder der Cluster 2014A-2014N des Verarbeitungsclusterarrays 2012 Daten verarbeiten, die in eine der Speichereinheiten 2024A-2024N innerhalb des Parallelprozessorspeichers 2022 geschrieben werden. In mindestens einer Ausführungsform kann die Speicher-Crossbar 2016 dazu konfiguriert sein, eine Ausgabe jedes Clusters 2014A-2014N an eine beliebige Partitionseinheit 2020A-2020N oder an einen anderen Cluster 2014A-2014N zu übertragen, die zusätzliche Verarbeitungsoperationen an einer Ausgabe durchführen können. In mindestens einer Ausführungsform kann jeder Cluster 2014A-2014N mit der Speicherschnittstelle 2018 über die Speicher-Crossbar 2016 kommunizieren, um von verschiedenen externen Speichervorrichtungen zu lesen oder in sie zu schreiben. In mindestens einer Ausführungsform weist die Speicher-Crossbar 2016 eine Verbindung zur Speicherschnittstelle 2018 auf, um mit der E/A-Einheit 2004 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 2022, wodurch Verarbeitungseinheiten innerhalb unterschiedlicher Verarbeitungscluster 2014A-2014N ermöglicht werden, um mit dem Systemspeicher oder einem anderen Speicher zu kommunizieren, der nicht lokal für die Parallelverarbeitungseinheit 2002 ist. In mindestens einer Ausführungsform kann die Speicher-Crossbar 2016 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den Clustern 2014A-2014N und den Partitionseinheiten 2020A-2020N zu trennen.
In mindestens einer Ausführungsform können mehrere Instanzen der Parallelverarbeitungseinheit 2002 auf einer einzelnen Erweiterungskarte bereitgestellt sein oder es können mehrere Erweiterungskarten miteinander verbunden sein. In mindestens einer Ausführungsform können unterschiedliche Instanzen der Parallelverarbeitungseinheit 2002 dazu konfiguriert sein, zusammenzuarbeiten, selbst wenn unterschiedliche Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Zum Beispiel können in mindestens einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 2002 Gleitkommaeinheiten mit höherer Genauigkeit in Bezug auf andere Instanzen beinhalten. In mindestens einer Ausführungsform können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 2002 oder des parallelen Prozessors 2000 einschließen, in einer Reihe von Konfigurationen und Formfaktoren umgesetzt sein, was Desktop-, Laptop- oder Handheld-Personalcomputer, Server, Workstations, Spielekonsolen und/oder eingebettete Systeme beinhaltet, ohne darauf beschränkt zu sein.
In mindestens einer Ausführungsform ist die ROP 2026 eine Verarbeitungseinheit, die Rasteroperationen, wie etwa Schablone, Z-Test, Mischen und so weiter, durchführt. In mindestens einer Ausführungsform gibt die ROP 2026 dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert sind. In mindestens einer Ausführungsform beinhaltet die ROP 2026 Komprimierungslogik zum Komprimieren von Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, und zum Dekomprimieren von Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden. In mindestens einer Ausführungsform kann die Komprimierungslogik eine verlustfreie Komprimierungslogik sein, die einen oder mehrere von mehreren Komprimierungsalgorithmen verwendet. Die von der ROP 2026 durchgeführte Komprimierungslogik kann auf Grundlage von statistischen Eigenschaften der zu komprimierenden Daten variieren. Zum Beispiel wird in mindestens einer Ausführungsform eine Delta-Farbkompression an Tiefen- und Farbdaten pro Kachel durchgeführt.
In mindestens einer Ausführungsform ist die ROP 2026 in jedem Verarbeitungscluster (z. B. Cluster 2014A-2014N in 20A ) anstelle der Partitionseinheit 2020 eingeschlossen. In mindestens einer Ausführungsform werden Lese- und Schreibanfragen für Pixeldaten über die Speicher-Crossbar 2016 anstelle von Pixelfragmentdaten übertragen. In mindestens einer Ausführungsform können verarbeitete Grafikdaten auf einer Anzeigevorrichtung, wie z. B. einer oder mehreren Anzeigevorrichtung(en) 1910 von 19 , zur weiteren Verarbeitung durch Prozessor(en) 1902 oder zur weiteren Verarbeitung durch eine der Verarbeitungseinheiten innerhalb des Parallelprozessors 2000 von 20A weitergeleitet werden.
In mindestens einer Ausführungsform kann der Betrieb des Verarbeitungsclusters 2014 über einen Pipelineverwalter 2032 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. In mindestens einer Ausführungsform empfängt der Pipeline-Verwalter 2032 Anweisungen von dem Planer 2010 aus 20A und verwaltet die Ausführung dieser Anweisungen über einen Grafikmultiprozessor 2034 und/oder eine Textureinheit 2036. In mindestens einer Ausführungsform ist der Grafikmultiprozessor 2034 eine beispielhafte Instanz eines SIMT-Parallelprozessors. In mindestens einer Ausführungsform können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen innerhalb des Verarbeitungsclusters 2014 beinhaltet sein. In mindestens einer Ausführungsform können eine oder mehrere Instanzen des Grafikmultiprozessors 2034 innerhalb eines Verarbeitungsclusters 2014 beinhaltet sein. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2034 Daten verarbeiten und eine Daten-Crossbar 2040 kann verwendet werden, um verarbeitete Daten an eines von mehreren möglichen Zielen zu verteilen, was andere Shader-Einheiten beinhaltet. In mindestens einer Ausführungsform kann der Pipeline-Verwalter 2032 die Verteilung verarbeiteter Daten durch das Festlegen der Ziele für zu verteilende verarbeitete Daten über die Daten-Crossbar 2040 erleichtern.
In mindestens einer Ausführungsform kann jeder Grafikmultiprozessor 2034 innerhalb des Verarbeitungsclusters 2014 einen identischen Satz von funktioneller Ausführungslogik (z. B. arithmetische Logikeinheiten, Lade-Speicher-Einheiten usw.) beinhalten. In mindestens einer Ausführungsform kann eine funktionelle Ausführungslogik in einer Pipeline-Weise 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 Vielfalt von Vorgängen, darunter Ganzzahl- und Gleitkommaarithmetik, Vergleichsvorgänge, boolesche Vorgänge, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. In mindestens einer Ausführungsform kann dieselbe Hardware der funktionellen Einheit genutzt werden, um unterschiedliche Operationen durchzuführen, und es kann eine beliebige Kombination von funktionellen Einheiten vorhanden sein.
In mindestens einer Ausführungsform bilden Anweisungen, die an den Verarbeitungscluster 2014 übermittelt werden, einen Thread. In mindestens einer Ausführungsform ist ein Satz von Threads, die über einen Satz von Parallelverarbeitungsengines ausgeführt werden, eine Thread-Gruppe. In mindestens einer Ausführungsform führt die Thread-Gruppe ein Programm mit unterschiedlichen Eingabedaten aus. In mindestens einer Ausführungsform kann jeder Thread innerhalb einer Thread-Gruppe einer anderen Verarbeitungsengine innerhalb eines Grafikmultiprozessors 2034 zugewiesen werden. In mindestens einer Ausführungsform kann eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungsengines innerhalb des Grafikmultiprozessors 2034 beinhalten. In mindestens einer Ausführungsform können, wenn eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungsengines beinhaltet, eine oder mehrere Verarbeitungsengines während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, inaktiv sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe außerdem mehr Threads als eine Anzahl von Verarbeitungsengines innerhalb des Grafikmultiprozessors 2034 beinhalten. In mindestens einer Ausführungsform kann die Verarbeitung, wenn eine Thread-Gruppe mehr Threads als Verarbeitungsengines innerhalb des Grafikmultiprozessors 2034 beinhaltet, über aufeinanderfolgende Taktzyklen durchgeführt werden. In mindestens einer Ausführungsform können mehrere Thread-Gruppen gleichzeitig auf einem Grafikmultiprozessor 2034 ausgeführt werden.
In mindestens einer Ausführungsform beinhaltet der Grafikmultiprozessor 2034 einen internen schnellen Pufferspeicher, um Lade- und Speicheroperationen durchzuführen. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2034 auf einen internen Zwischenspeicher verzichten und einen schnellen Pufferspeicher (z. B. L1-Zwischenspeicher 2048) innerhalb des Verarbeitungsclusters 2014 verwenden. In mindestens einer Ausführungsform hat jeder Grafikmultiprozessor 2034 auch Zugriff auf L2-Zwischenspeicher innerhalb von Partitionseinheiten (z. B. die Partitionseinheiten 2020A-2020N aus 20A ), die von allen Verarbeitungsclustern 2014 gemeinsam genutzt werden, und kann verwendet werden, um Daten zwischen Threads zu übertragen. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2034 auch auf den chipexternen globalen Speicher zugreifen, der einen oder mehrere von dem lokalen Parallelprozessorspeicher und/oder Systemspeicher beinhalten kann. In mindestens einer Ausführungsform kann jeder beliebige Speicher außerhalb der Parallelverarbeitungseinheit 2002 als globaler Speicher verwendet werden. In mindestens einer Ausführungsform beinhaltet der Verarbeitungscluster 2014 mehrere Instanzen des Grafikmultiprozessors 2034, der gemeinsame Anweisungen und Daten gemeinsam nutzen kann, die im L1-Zwischenspeicher 2048 gespeichert sein können.
In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 2014 eine Speicherverwaltungseinheit („MMU“) 2045 beinhalten, die dazu konfiguriert ist, virtuelle Adressen physischen Adressen zuzuordnen. In mindestens einer Ausführungsform können sich eine oder mehrere Instanzen der MMU 2045 innerhalb der Speicherschnittstelle 2018 aus 20A befinden. In mindestens einer Ausführungsform beinhaltet die MMU 2045 einen Satz von Seitentabelleneinträgen (page table entries - PTEs), die verwendet werden, um eine virtuelle Adresse einer physischen Adresse einer Kachel und optional einem Zwischenspeicherzeilenindex zuzuordnen. In mindestens einer Ausführungsform kann die MMU 2045 Adressübersetzungspuffer (TLB) oder Zwischenspeicher beinhalten, die sich innerhalb des Grafikmultiprozessors 2034 oder des L1-Zwischenspeichers oder des Verarbeitungsclusters 2014 befinden können. In mindestens einer Ausführungsform wird die physische Adresse verarbeitet, um den Oberflächendatenzugriffsstandort zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten zu ermöglichen. In mindestens einer Ausführungsform kann der Zwischenspeicherzeilenindex verwendet werden, um zu bestimmen, ob eine Anforderung nach einer Zwischenspeicherzeile ein Treffer oder ein Fehler ist.
In mindestens einer Ausführungsform kann ein Verarbeitungscluster 2014 derartig konfiguriert sein, dass jeder Grafikmultiprozessor 2034 an eine Textureinheit 2036 zum Durchführen von Texturzuordnungsoperationen gekoppelt ist, z. B. zum Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern von Texturdaten. In mindestens einer Ausführungsform werden Texturdaten aus einem internen Textur-L1-Zwischenspeicher (nicht gezeigt) oder aus einem L1-Zwischenspeicher innerhalb des Grafikmultiprozessors 2034 gelesen und nach Bedarf aus einem L2-Zwischenspeicher, einem lokalen Parallelprozessorspeicher oder Systemspeicher abgerufen. In mindestens einer Ausführungsform gibt jeder Grafikmultiprozessor 2034 verarbeitete Aufgaben an die Daten-Crossbar 2040 aus, um verarbeitete Aufgaben einem anderen Verarbeitungs-Cluster 2014 zur weiteren Verarbeitung bereitzustellen oder verarbeitete Aufgaben in einem L2-Zwischenspeicher, einem lokalen Parallelprozessorspeicher oder Systemspeicher über die Speicher-Crossbar2016 zu speichern. In mindestens einer Ausführungsform ist preROP 2042 (preraster operations unit - Vorrasteroperationseinheit) dazu konfiguriert, Daten vom Grafikmultiprozessor 2034 zu empfangen, um Daten an ROP-Einheiten zu leiten, die sich bei Partitionseinheiten befinden können, wie in dieser Schrift beschrieben (z. B. die Partitionseinheiten 2020A-2020N aus 20A ). In mindestens einer Ausführungsform kann die PreROP-2042-Einheit Optimierungen für die Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 in dem Grafikverarbeitungscluster 2014 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 20A , 20B und/oder 20C gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der Parallelprozessor 2000 von 20A verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit den 1-6 beschrieben sind.
In mindestens einer Ausführungsform empfängt der Anweisungszwischenspeicher 2052 einen Strom von Anweisungen zur Ausführung vom Pipeline-Verwalter 2032. In mindestens einer Ausführungsform werden Anweisungen im Anweisungszwischenspeicher 2052 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 2054 gesendet. In mindestens einer Ausführungsform kann die Anweisungseinheit 2054 Anweisungen als Thread-Gruppen (z. B. Warps) versenden, wobei jede Thread-Gruppe einer anderen Ausführungseinheit innerhalb des einen oder der mehreren GPGPU-Kerne 2062 zugewiesen ist. In mindestens einer Ausführungsform kann ein Befehl auf einen lokalen, gemeinsam genutzten oder globalen Adressbereich durch das Festlegen einer Adresse innerhalb eines einheitlichen Adressbereichs zugreifen. In mindestens einer Ausführungsform kann die Adresszuordnungseinheit 2056 verwendet werden, um Adressen in einem einheitlichen Adressbereich in eine eindeutige Speicheradresse zu übersetzen, auf die durch die Lade-/Speichereinheit(en) 2066 zugegriffen werden kann.
In mindestens einer Ausführungsform stellt die Registerdatei 2058 einen Satz von Registern für die Funktionseinheiten des Grafikmultiprozessors 2034 bereit. In mindestens einer Ausführungsform stellt die Registerdatei 2058 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von funktionellen Einheiten (z. B. GPGPU-Kernen 2062, Lade-/Speichereinheit(en) 2066) des Grafikmultiprozessors 2034 verbunden sind. In mindestens einer Ausführungsform wird die Registerdatei 2058 derartig zwischen jeder der funktionellen Einheiten aufgeteilt, dass jeder funktionellen Einheit ein dedizierter Teil der Registerdatei 2058 zugewiesen wird. In mindestens einer Ausführungsform ist die Registerdatei 2058 auf unterschiedliche Warps aufgeteilt, die vom Grafikmultiprozessor 2034 ausgeführt werden.
In mindestens einer Ausführungsform können die GPGPU-Kerne 2062 jeweils Gleitkommaeinheiten (FPUs) und/oder Ganzzahlarithmetiklogikeinheiten (ALUs) beinhalten, die verwendet werden, um Anweisungen des Grafikmultiprozessors 2034 auszuführen. GPGPU-Kerne 2062 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. In mindestens einer Ausführungsform beinhaltet ein erster Teil von GPGPU-Kernen 2062 eine FPU mit einfacher Genauigkeit und eine ganzzahlige ALU, während ein zweiter Teil von GPGPU-Kernen eine FPU mit doppelter Genauigkeit beinhaltet. In mindestens einer Ausführungsform können FPUs den Standard IEEE 754-2008 für Gleitkommaarithmetik umsetzen oder Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2034 zusätzlich eine oder mehrere feste Funktions- oder Spezialfunktionseinheiten beinhalten, um konkrete Funktionen, wie etwa Kopierrechteck- oder Pixelmischoperationen, auszuführen. In mindestens einer Ausführungsform können einer oder mehrere der GPGPU-Kerne 2062 auch feste oder Spezialfunktionslogik beinhalten.
In mindestens einer Ausführungsform beinhalten die GPGPU-Kerne 2062 eine SIMD-Logik, die in der Lage ist, eine einzelne Anweisung an mehreren Datensätzen auszuführen. In mindestens einer Ausführungsform können die GPGPU-Kerne 2062 SIMD4-, SIMD8- und SIMD16-Anweisungen physisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. In mindestens einer Ausführungsform können SIMD-Anweisungen für GPGPU-Kerne zur Kompilierzeit von einem Shader-Compiler erzeugt werden oder automatisch erzeugt werden, wenn Programme ausgeführt und kompiliert werden, die für Einzelprogramm-Mehrfachdaten-(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 einzelne SIMD-Anweisung ausgeführt werden. Zum Beispiel können in mindestens einer Ausführungsform acht SIMT-Threads, die gleiche oder ähnliche Operationen ausführen, über eine einzige SIMD8-Logikeinheit parallel ausgeführt werden.
In mindestens einer Ausführungsform ist die Speicher- und Zwischenspeicher-Verbindung 2068 ein Verbindungsnetz, das jede funktionelle Einheit des Grafikmultiprozessors 2034 mit der Registerdatei 2058 und mit dem gemeinsam genutzten Speicher 2070 verbindet. In mindestens einer Ausführungsform ist die Speicher- und Zwischenspeicher-Verbindung 2068 eine Crossbar-Verbindung, die es der Lade-/Speichereinheit 2066 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 2070 und der Registerdatei 2058 umzusetzen. In mindestens einer Ausführungsform kann die Registerdatei 2058 mit derselben Frequenz wie die GPGPU-Kerne 2062 arbeiten, wodurch die Datenübertragung zwischen den GPGPU-Kernen 2062 und der Registerdatei 2058 eine sehr geringe Latenzzeit hat. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 2070 verwendet werden, um eine Kommunikation zwischen Threads zu ermöglichen, die auf funktionellen Einheiten innerhalb des Grafikmultiprozessors 2034 ausgeführt werden. In mindestens einer Ausführungsform kann der schnelle Pufferspeicher 2072 zum Beispiel als Datenzwischenspeicher verwendet werden, um zwischen funktionellen Einheiten und der Textureinheit 2036 kommunizierte Texturdaten zwischenzuspeichern. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 2070 auch als programmverwalteter Zwischenspeicher verwendet werden. In mindestens einer Ausführungsform können Threads, die auf GPGPU-Kernen 2062 ausgeführt werden, zusätzlich zu automatisch zwischengespeicherten Daten, die im schnellen Pufferspeicher 2072 gespeichert sind, programmgesteuert Daten innerhalb des gemeinsam genutzten Speichers speichern.
In mindestens einer Ausführungsform ist ein Parallelprozessor oder eine GPGPU, wie in dieser Schrift beschrieben, kommunikativ an Host-/Prozessorkerne gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Allzweck-GPU-(GPGPU)-Funktionen zu beschleunigen. In mindestens einer Ausführungsform kann die GPU kommunikativ über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung, wie etwa PCle oder NVLink) an Hostprozessor/Kerne gekoppelt sein. In mindestens einer Ausführungsform kann die GPU in demselben Gehäuse oder Chip wie Kerne integriert sein und kommunikativ über einen internen Prozessorbus/eine interne Verbindung (d. h. innerhalb des Gehäuses oder Chips) an die Kerne gekoppelt sein. In mindestens einer Ausführungsform können Prozessorkerne ungeachtet der Art und Weise, in der die GPU verbunden ist, der GPU Arbeit in Form von Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. In mindestens einer Ausführungsform verwendet die GPU dann eine dedizierte Schaltung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 in dem Grafikmultiprozessor 2034 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 20D gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der Grafikmultiprozessor 2034 von 20D verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 in dem Multi-GPU-Computersystem 2100 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 21 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird das computerimplementierte Rechensystem 2100 von 21 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform empfängt der Grafikprozessor 2200 Stapel von Befehlen über die Ringverbindung 2202. In mindestens einer Ausführungsform werden eingehende Befehle von einem Befehlsstreamer 2203 im Pipeline-Front-End 2204 interpretiert. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2200 eine skalierbare Ausführungslogik, um eine 3D-Geometrieverarbeitung und eine Medienverarbeitung über einen oder mehrere Grafikkerne 2280A-2280N durchzuführen. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2203 für 3D-Geometrieverarbeitungsbefehle Befehle an die Geometriepipeline 2236. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2203 für mindestens einige Medienverarbeitungsbefehle Befehle an ein Video-Front-End 2234, das mit einer Medienengine 2237 gekoppelt ist. In mindestens einer Ausführungsform beinhaltet die Medienengine 2237 eine Videoqualitätsengine (VQE) 2230 für die Video- und Bildnachbearbeitung und eine Mehrformat-Kodierungs-/Dekodierungs-(MFX) 2233 engine, um eine hardwarebeschleunigte Mediendatenkodierung und -dekodierung bereitzustellen. In mindestens einer Ausführungsform erzeugen die Geometriepipeline 2236 und die Medienengine 2237 jeweils Ausführungs-Threads für Thread-Ausführungsressourcen, die von mindestens einem Grafikkern 2280 bereitgestellt werden.
In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2200 skalierbare Thread-Ausführungsressourcen mit modularen Kernen 2280A-2280N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Teilkerne 2250A-50N, 2260A-2260N (manchmal als Kern-Teil-Slices bezeichnet) aufweisen. In mindestens einer Ausführungsform kann der Grafikprozessor 2200 eine beliebige Anzahl von Grafikkernen 2280A aufweisen. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2200 einen Grafikkern 2280A, der mindestens einen ersten Teilkern 2250A und einen zweiten Teilkern 2260A aufweist. In mindestens einer Ausführungsform ist der Grafikprozessor 2200 ein Niedrigenergieprozessor mit einem einzelnen Teilkern (z. B. 2250A). In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2200 mehrere Grafikkerne 2280A-2280N, von denen jeder einen Satz von ersten Teilkernen 2250A-2250N und einen Satz von zweiten Teilkernen 2260A-2260N beinhaltet. In mindestens einer Ausführungsform beinhaltet jeder Teilkern in den ersten Teilkernen 2250A-2250N mindestens einen ersten Satz von Ausführungseinheiten 2252A-2252N und Medien-/Textur-Abtaster 2254A-2254N. In mindestens einer Ausführungsform beinhaltet jeder Teilkern in den zweiten Teilkernen 2260A-2260N mindestens einen zweiten Satz von Ausführungseinheiten 2262A-2262N und Abtastern 2264A-2264N. In mindestens einer Ausführungsform teilt sich jeder Teilkern 2250A-2250N, 2260A-2260N einen Satz gemeinsam genutzter Ressourcen 2270A-2270N. In mindestens einer Ausführungsform beinhalten gemeinsam genutzte Ressourcen gemeinsam genutzte(n) schnellen Pufferspeicher und Pixeloperationslogik.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 715 in dem Prozessor 2200 zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
In mindestens einer Ausführungsform wird mindestens eine auf 22 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der Grafikprozessor 2200 von 22 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform beinhaltet der Prozessor 2300 ein reihenfolgengetreues Front-End („Front-End“) 2301, um auszuführende Anweisungen abzurufen und Anweisungen vorzubereiten, die später in der Prozessorpipeline verwendet werden sollen. In mindestens einer Ausführungsform kann das Front-End 2301 mehrere Einheiten beinhalten. In mindestens einer Ausführungsform ruft ein Anweisungsvorabrufer 2326 Anweisungen aus dem Speicher ab und führt einem Anweisungsdekodierer 2328 Anweisungen zu, der wiederum Anweisungen dekodiert oder interpretiert. Zum Beispiel dekodiert der Anweisungsdekodierer 2328 in mindestens einer Ausführungsform eine empfangene Anweisung in eine oder mehrere Operationen, die als „Mikroanweisungen“ oder „Mikrooperationen“ (auch als „Mikroops“ oder „uops“ bezeichnet) bezeichnet werden, welche diese Maschine ausführen kann. In mindestens einer Ausführungsform zerlegt der Anweisungsdekodierer 2328 die Anweisung in einen Operationscode und entsprechende Daten- und Steuerfelder, die möglicherweise von der Mikroarchitektur verwendet werden, um Operationen gemäß mindestens einer Ausführungsform durchzuführen. In mindestens einer Ausführungsform kann ein Ablaufverfolgungszwischenspeicher 2330 dekodierte uops in programmgeordnete Sequenzen oder Ablaufverfolgungen in einer uop-Warteschlange 2334 zur Ausführung zusammenstellen. In mindestens einer Ausführungsform stellt ein Mikrocode-ROM 2332 uops bereit, die benötigt werden, um die Operation abzuschließen, wenn der Ablaufverfolgungszwischenspeicher 2330 auf eine komplexe Anweisung trifft.
In mindestens einer Ausführungsform können einige Befehle in eine einzelne Mikroop umgewandelt werden, wohingegen andere mehrere Mikroops benötigen, um den vollständigen Betrieb abzuschließen. In mindestens einer Ausführungsform kann der Anweisungsdekodierer 2328 auf den Mikrocode-ROM 2332 zugreifen, um eine Anweisung auszuführen, wenn mehr als vier Mikroops benötigt werden, um eine Anweisung abzuschließen. In mindestens einer Ausführungsform kann eine Anweisung in eine kleine Anzahl von Mikroops zur Verarbeitung am Anweisungsdekodierer 2328 dekodiert werden. In mindestens einer Ausführungsform kann eine Anweisung im Mikrocode-ROM 2332 gespeichert werden, falls eine Anzahl von Mikroops benötigt wird, um den Betrieb durchzuführen. In mindestens einer Ausführungsform bezieht sich der Ablaufverfolgungszwischenspeicher 2330 auf ein programmierbares Logikarray („PLA“) für den Eintrittspunkt, um einen korrekten Mikroanweisungsverweis zum Lesen von Mikrocodesequenzen zu bestimmen, um eine oder mehrere Anweisungen aus dem Mikrocode-ROM 2332 gemäß mindestens einer Ausführungsform abzuschließen. In mindestens einer Ausführungsform kann das Front-End 2301 der Maschine, nachdem der Mikrocode-ROM 2332 die Sequenzierung von Mikroops für eine Anweisung beendet hat, das Abrufen von Mikroops aus dem Ablaufverfolgungszwischenspeicher 2330 wieder aufnehmen.
In mindestens einer Ausführungsform kann die Engine zur Ausführung außerhalb der Reihenfolge („out-of-order-Engine“) 2303 Anweisungen zur Ausführung vorbereiten. In mindestens einer Ausführungsform weist die Logik für die Ausführung außerhalb der Reihenfolge eine Anzahl von Puffern auf, um den Ablauf von Anweisungen zu glätten und neu zu ordnen, um die Leistung zu optimieren, wenn sie in die Pipeline übergehen und für die Ausführung geplant werden. In mindestens einer Ausführungsform beinhaltet die Engine zur Ausführung außerhalb der Reihenfolge 2303 ohne Einschränkung einen Zuordner/Registerumbenenner 2340, eine Speicher-uop-Warteschlange 2342, eine Ganzzahl-/Gleitkomma-uop-Warteschlange 2344, einen Speicherplaner 2346, einen schnellen Planer 2302, einen langsamen/allgemeinen Gleitkomma-Planer („langsamer/allgemeiner FP-Planer“) 2304 und einen einfachen Gleitkomma-Planer („einfacher FP-Planer“) 2306. In mindestens einer Ausführungsform werden der schnelle Planer 2302, der langsame/allgemeine Gleitkomma-Planer 2304 und der einfache Gleitkomma-Planer 2306 in dieser Schrift auch gemeinsam als „uop-Planer 2302, 2304, 2306“ bezeichnet. In mindestens einer Ausführungsform weist der Zuordner/Registerumbenenner 2340 Maschinenpuffer und Ressourcen zu, die jede uop benötigt, um ausgeführt zu werden. In mindestens einer Ausführungsform benennt der Zuordner/Registerumbenenner 2340 logische Register auf Einträge in einer Registerdatei um. In mindestens einer Ausführungsform weist der Zuordner/Registerumbenenner 2340 auch einen Eintrag für jede uop in einer von zwei uop-Warteschlangen, der Speicheruop-Warteschlange 2342 für Speicheroperationen und der Ganzzahl-/Fließkomma-uop-Warteschlange 2344 für Nicht-Speicheroperationen vor dem Speicherplaner 2346 und den uop-Planern 2302, 2304, 2306 zu. In mindestens einer Ausführungsform bestimmen die uop-Planer 2302, 2304, 2306 auf Grundlage der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit von Ausführungsressourcen, die uops benötigen, um ihre Operation abzuschließen, wann eine uop zur Ausführung bereit ist. In mindestens einer Ausführungsform kann der schnelle Planer 2302 von mindestens einer Ausführungsform auf jede Hälfte des Haupttaktzyklus planen, während der langsame/allgemeine Gleitkomma-Planer 2304 und der einfache Gleitkomma-Planer 2306 einmal pro Hauptprozessortaktzyklus planen können. In mindestens einer Ausführungsform vermitteln die uop-Planer 2302, 2304, 2306 für Versandports, um uops für die Ausführung zu planen.
In mindestens einer Ausführungsform beinhaltet der Ausführungsblock 2311 ohne Einschränkung eine Ganzzahlregisterdatei/ein Umgehungsnetz 2308, eine Gleitkommaregisterdatei/ein Umgehungsnetz („FP-Registerdatei/Umgehungsnetz“) 2310, Adresserzeugungseinheiten (address generation units - „AGUs“) 2312 und 2314, schnelle arithmetische Logikeinheiten (ALUs) („schnelle ALUs“) 2316 und 2318, eine langsame arithmetische Logikeinheit („langsame ALU“) 2320, eine Gleitkomma-ALU („FP“) 2322 und eine Gleitkommabewegungseinheit („FP-Bewegung“) 2324. In mindestens einer Ausführungsform werden die Ganzzahlregisterdatei/das Umgehungsnetz 2308 und Gleitkommaregisterdatei/Umgehungsnetz 2310 in dieser Schrift auch als „Registerdateien 2308, 2310“ bezeichnet. In mindestens einer Ausführungsform werden AGUs 2312 und 2314, schnelle ALUs 2316 und 2318, die langsame ALU 2320, die Gleitkomma-ALU 2322 und die Gleitkommabewegungseinheit 2324 in dieser Schrift auch als „Ausführungseinheiten 2312, 2314, 2316, 2318, 2320, 2322 und 2324“ bezeichnet. In mindestens einer Ausführungsform kann der Ausführungsblock 2311 ohne Einschränkung eine beliebige Anzahl (die Null beinhaltet) und eine beliebige Art von Registerdatei, Umgehungsnetz, Adresserzeugungseinheit und Ausführungseinheit in beliebiger Kombination beinhalten.
In mindestens einer Ausführungsform können die Registerdateien 2308, 2310 zwischen den uop-Planern 2302, 2304, 2306 und den Ausführungseinheiten 2312, 2314, 2316, 2318, 2320, 2322 und 2324 angeordnet sein. In mindestens einer Ausführungsform führt das Ganzzahlregisterdatei/Umgehungsnetz 2308 Ganzzahloperationen durch. In mindestens einer Ausführungsform führt das Gleitkommaregisterdatei/Umgehungsnetz 2310 Gleitkommaoperationen durch. In mindestens einer Ausführungsform kann jede der Registerdateien 2308, 2310 ohne Einschränkung ein Umgehungsnetz beinhalten, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, an neue abhängige uops umleiten oder weiterleiten kann. In mindestens einer Ausführungsform können die Registerdateien 2308, 2310 Daten miteinander austauschen. In mindestens einer Ausführungsform kann das Ganzzahlregisterdatei/Umgehungsnetz 2308 ohne Einschränkung zwei getrennte Registerdateien beinhalten, eine Registerdatei für niederwertige zweiunddreißig Datenbits und eine zweite Registerdatei für höherwertige zweiunddreißig Datenbits. In mindestens einer Ausführungsform kann das Gleitkommaregisterdatei/Bypassnetz 2310 ohne Einschränkung 128 Bit breite Einträge beinhalten, da Gleitkommabefehle typischerweise Operanden von 64 bis 128 Bit Breite aufweisen.
In mindestens einer Ausführungsform können die Ausführungseinheiten 2312, 2314, 2316, 2318, 2320, 2322, 2324 Anweisungen ausführen. In mindestens einer Ausführungsform speichern die Registerdateien 2308, 2310 Ganzzahl- und Gleitkomma-Datenoperandenwerte, die Mikroanweisungen ausführen müssen. In mindestens einer Ausführungsform kann der Prozessor 2300 ohne Einschränkung eine beliebige Anzahl und Kombination von Ausführungseinheiten 2312, 2314, 2316, 2318, 2320, 2322, 2324 beinhalten. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2322 und die Gleitkomma-Bewegungseinheit 2324 Gleitkomma-, MMX-, SIMD-, AVX- und SSE-Operationen oder andere Operationen ausführen, was spezialisierte Anweisungen zum maschinellen Lernen beinhaltet. In mindestens einer Ausführungsform kann die Gleitkomma-ALU 2322 ohne Einschränkung einen 64-Bit-mal-64-Bit-Gleitkommateiler beinhalten, um Divisions-, Quadratwurzel- und Rest-Mikroops auszuführen. In mindestens einer Ausführungsform können Anweisungen, die einen Gleitkommawert einschließen, mit Gleitkomma-Hardware gehandhabt werden. In mindestens einer Ausführungsform können ALU-Operationen an schnelle ALUs 2316, 2318 weitergegeben werden. In mindestens einer Ausführungsform können schnelle ALUs 2316, 2318 schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In mindestens einer Ausführungsform gehen die meisten komplexen Ganzzahloperationen zur langsamen ALU 2320, da die langsame ALU 2320 ohne Einschränkung Ganzzahlausführungshardware für Operationen mit langer Latenzzeit beinhalten kann, wie etwa eine Multiplikation, Verschiebungen, Kennzeichenlogik und Verzweigungsverarbeitung. In mindestens einer Ausführungsform können Speicherlade/-speicheroperationen von AGUS 2312, 2314 ausgeführt werden. In mindestens einer Ausführungsform können die schnelle ALU 2316, die schnelle ALU 2318 und die langsame ALU 2320 Ganzzahloperationen an 64-Bit-Datenoperanden ausführen. In mindestens eine Ausführungsform können die schnelle ALU 2316, die schnelle ALU 2318 und die langsame ALU 2320 umgesetzt sein, um eine Reihe von Datenbitgrößen zu unterstützen, die sechzehn, zweiunddreißig, 128, 256, usw. beinhalten. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2322 und die Gleitkomma-Bewegungseinheit 2324 umgesetzt sein, um einen Bereich von Operanden mit Bits verschiedener Breiten zu unterstützen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2322 und die Gleitkomma-Bewegungseinheit 2324 an 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Anweisungen arbeiten.
In mindestens einer Ausführungsform verteilen die uop-Planer 2302, 2304, 2306 abhängige Operationen, bevor die Ausführung der übergeordneten Last beendet ist. In mindestens einer Ausführungsform kann der Prozessor 2300, da uops spekulativ geplant und im Prozessor 2300 ausgeführt werden können, auch eine Logik beinhalten, um Speicherfehler zu handhaben. In mindestens einer Ausführungsform kann es, wenn ein Datenladen im Datenzwischenspeicher fehlschlägt, abhängige Operationen im Flug in der Pipeline geben, die den Planer 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 wiederholt werden und es unabhängige wird möglicherweise ermöglicht, dass sie abgeschlossen werden. In mindestens einer Ausführungsform können die Planer und der Wiedergabemechanismus mindestens einer Ausführungsform eines Prozessors auch so ausgelegt sein, dass sie Anweisungssequenzen für Zeichenkettenvergleichsoperationen abfangen.
In mindestens einer Ausführungsform kann sich der Ausdruck „Register“ auf Speicherorte des integrierten Prozessors beziehen, die als Teil von Anweisungen verwendet werden können, um Operanden zu identifizieren. In mindestens einer Ausführungsform können Register derartige sein, die von außerhalb des Prozessors (aus der Perspektive eines Programmierers) verwendet werden können. In mindestens einer Ausführungsform sind Register möglicherweise nicht auf eine bestimmte Schaltungsart beschränkt. Vielmehr kann ein Register in mindestens einer Ausführungsform Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen durchführen. In mindestens einer Ausführungsform können die hierin beschriebenen Register durch Schaltungen innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl unterschiedlicher Techniken implementiert werden, wie etwa dedizierter physischer Register, dynamisch zugewiesener physischer Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In mindestens einer Ausführungsform speichern Integerregister 32-Bit-Integerdaten. Eine Registerdatei von mindestens einer Ausführungsform enthält außerdem acht Multimedia-SIMD-Register für gepackte Daten.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Teile der oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Ausführungsblock 2311 und andere gezeigte oder nichtgezeigte Speicher oder Register integriert sein. Zum Beispiel können in mindestens einer Ausführungsform in dieser Schrift beschriebene Trainings- und/oder Ableitungsmethoden eine oder mehrere der im Ausführungsblock 2311 veranschaulichten ALUs verwenden. Darüber hinaus können Gewichtungsparameter in chipinternen oder chipexternen Speicher und/oder Registern (gezeigt oder nichtgezeigt) gespeichert werden, die ALUs des Ausführungsblocks 2311 konfigurieren, um einen oder mehrere Algorithmen maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder in dieser Schrift beschriebene Trainingsmethoden auszuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 23 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der Prozessor 2300 von 23 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform können Verarbeitungscluster 2410 Deep-Learning-Operationen, was Ableitungs- oder Vorhersageoperationen beinhaltet, auf Grundlage von Gewichtungsparametern durchführen, die eine oder mehrere Trainingsmethoden berechnet haben, was die in dieser Schrift Beschriebenen beinhaltet. In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 2410 ohne Einschränkung eine beliebige Anzahl und Art von Prozessoren beinhalten. In mindestens einer Ausführungsform kann der Deep-Learning-Anwendungsprozessor 2400 eine beliebige Anzahl und Art von Verarbeitungsclustern 2400 beinhalten. In mindestens einer Ausführungsform sind die Inter-Chip-Links 2420 bidirektional. In mindestens einer Ausführungsform ermöglichen die Inter-Chip-Links 2420 und die Inter-Chip-Steuerung 2430 mehreren Deep-Learning-Anwendungsprozessoren 2400 den Austausch von Informationen, die Aktivierungsinformationen beinhalten, die sich aus der Ausführung eines oder mehrerer Algorithmen des maschinellen Lernens ergeben, die in einem oder mehreren neuronalen Netzen verkörpert sind. In mindestens einer Ausführungsform kann der Deep-Learning-Anwendungsprozessor 2400 eine beliebige Anzahl (die Null beinhaltet) und Art von ICLs 2420 und ICCs 2430 beinhalten.
In mindestens einer Ausführungsform stellen HBM2s 2440 insgesamt 32 Gigabyte (GB) Speicher bereit. HBM2 2440(i) ist sowohl der Speichersteuerung 2442(i) als auch HBM PHY 2444(i) zugeordnet, wobei „i“ eine beliebige ganze Zahl ist. In mindestens einer Ausführungsform kann eine beliebige Anzahl von HBM2s 2440 eine beliebige Art und Gesamtmenge von Speicher mit hoher Bandbreite bereitstellen und kann einer beliebigen Anzahl (die Null beinhaltet) und Art von Speichersteuerungen 2442 und HBM-PHYs 2444 zugeordnet sein. In mindestens einer Ausführungsform können SPI, 12C, GPIO 2460, PCIe-Steuerung und DMA 2470 und/oder PCle 2480 durch eine beliebige Anzahl und Art von Blöcken ersetzt werden, die eine beliebige Anzahl und Art von Kommunikationsstandards auf eine beliebige technisch machbare Weise ermöglichen.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor 2400 verwendet, um ein Modell maschinellen Lernens, wie etwa ein neuronales Netz, zu trainieren, um dem Deep-Learning-Anwendungsprozessor 2400 bereitgestellte Informationen vorherzusagen oder abzuleiten. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor 2400 verwendet, um Informationen auf Grundlage eines trainierten Modells maschinellen Lernens (z. B. neuronales Netz) abzuleiten oder vorherzusagen, das von einem anderen Prozessor oder System oder von dem Deep-Learning-Anwendungsprozessor 2400 trainiert wurde. In mindestens einer Ausführungsform kann der Prozessor 2400 verwendet werden, um einen oder mehrere in dieser Schrift beschriebene Anwendungsfälle für neuronale Netze durchzuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 24 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der Deep Learning Anwendungsprozessor 2400 von 24 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform können die Neuronen 2502 und die Synapsen 2508 derartig miteinander verbunden sein, dass der neuromorphe Prozessor 2500 betrieben wird, um von dem neuromorphen Prozessor 2500 empfangene Informationen zu verarbeiten oder zu analysieren. In mindestens einer Ausführungsform können die Neuronen 2502 einen Ausgangsimpuls (oder „Feuer“ oder „Spitze“) übermitteln, wenn durch den Neuroneneingang 2504 empfangene Eingaben einen Schwellenwert überschreiten. In mindestens einer Ausführungsform können die Neuronen 2502 an den Neuroneneingängen 2504 empfangene Signale summieren oder integrieren. Zum Beispiel können die Neuronen 2502 in mindestens einer Ausführungsform als undichte integrate-and-fire-Neuronen umgesetzt sein, wobei, wenn eine Summe (als ein „Membranpotential“ bezeichnet) einen Schwellenwert überschreitet, das Neuron 2502 eine Ausgabe (oder „Feuer“) unter Verwendung einer Übertragungsfunktion überschreitet, wie etwa einer Sigmoid- oder Schwellenfunktion. In mindestens einer Ausführungsform kann ein undichtes integrate-and-fire-Neuron Signale, die an Neuroneneingängen 2504 empfangen werden, zu einem Membranpotential summieren und kann auch einen Abklingfaktor (oder Leck) anwenden, um ein Membranpotential zu verringern. In mindestens einer Ausführungsform kann ein undichtes integrate-and-fire-Neuron feuern, wenn mehrere Eingangssignale an den Neuroneneingängen 2504 schnell genug empfangen werden, um einen Schwellenwert zu überschreiten (d. h. bevor ein Membranpotential zu weit abfällt, um zu feuern). In mindestens einer Ausführungsform können die Neuronen 2502 unter Verwendung von Schaltungen oder Logik umgesetzt sein, die Eingaben empfangen, Eingaben in ein Membranpotential integrieren und ein Membranpotential abklingen lassen. In mindestens einer Ausführungsform können Eingaben gemittelt werden oder es kann eine beliebige andere geeignete Übertragungsfunktion verwendet werden. Darüber hinaus können die Neuronen 2502 in mindestens einer Ausführungsform ohne Einschränkung Vergleicherschaltungen oder Logik beinhalten, die eine Ausgangsspitze am Neuronenausgang 2506 erzeugen, wenn das Ergebnis des Anwendens einer Übertragungsfunktion auf den Neuroneneingang 2504 einen Schwellenwert überschreitet. In mindestens einer Ausführungsform kann das Neuron 2502, sobald es feuert, zuvor empfangene Eingabeinformationen ignorieren, indem es zum Beispiel ein Membranpotential auf 0 oder einen anderen geeigneten Standardwert zurücksetzt. In mindestens einer Ausführungsform kann das Neuron 2502 nach einem geeigneten Zeitraum (oder Refraktärzeitraum) den normalen Betrieb wieder aufnehmen, sobald das Membranpotential auf 0 zurückgesetzt ist.
In mindestens einer Ausführungsform können die Neuronen 2502 durch Synapsen 2508 miteinander verbunden sein. In mindestens einer Ausführungsform können die Synapsen 2508 arbeiten, um Signale von einem Ausgang eines ersten Neurons 2502 an einen Eingang eines zweiten Neurons 2502 zu übermitteln. In mindestens einer Ausführungsform können die Neuronen 2502 Informationen über mehr als eine Instanz der Synapse 2508 übermitteln. In mindestens einer Ausführungsform können eine oder mehrere Instanzen der Neuronenausgabe 2506 über eine Instanz der Synapse 2508 mit einer Instanz der Neuroneneingabe 2504 in demselben Neuron 2502 verbunden sein. In mindestens einer Ausführungsform kann eine Instanz des Neurons 2502, die eine über eine Instanz der Synapse 2508 zu übermittelnde Ausgabe erzeugt, in Bezug auf diese Instanz der Synapse 2508 als ein „präsynaptisches Neuron“ bezeichnet werden. In mindestens einer Ausführungsform kann eine Instanz des Neurons 2502, die eine über eine Instanz der Synapse 2508 übermittelte Eingabe empfängt, in Bezug auf diese Instanz der Synapse 2508 als ein „postsynaptisches Neuron“ bezeichnet werden. Da eine Instanz des Neurons 2502 Eingaben von einer oder mehreren Instanzen der Synapse 2508 empfangen kann und auch Ausgaben über eine oder mehrere Instanzen der Synapse 2508 übermitteln kann, kann eine einzelne Instanz des Neurons 2502 daher sowohl ein „präsynaptisches Neuron“ als auch sein „postsynaptisches Neuron“ in Bezug auf verschiedene Instanzen von Synapsen 2508 in mindestens einer Ausführungsform sein.
In mindestens einer Ausführungsform können die Neuronen 2502 in einer oder mehreren Schichten organisiert sein. Jede Instanz des Neurons 2502 kann einen Neuronenausgang 2506 aufweisen, der durch eine oder mehrere Synapsen 2508 zu einem oder mehreren Neuroneneingängen 2504 auffächern kann. In mindestens einer Ausführungsform können Neuronenausgänge 2506 von Neuronen 2502 in einer ersten Schicht 2510 mit Neuroneneingängen 2504 von Neuronen 2502 in einer zweiten Schicht 2512 verbunden sein. In mindestens einer Ausführungsform kann die Schicht 2510 als eine „vorwärtsgekoppelte Schicht“ bezeichnet werden. In mindestens einer Ausführungsform kann jede Instanz des Neurons 2502 in einer Instanz der ersten Schicht 2510 zu jeder Instanz des Neurons 2502 in der zweiten Schicht 2512 auffächern. In mindestens einer Ausführungsform kann die erste Schicht 2510 als eine „vollständig verbundene vorwärtsgekoppelte Schicht“ bezeichnet werden. In mindestens einer Ausführungsform kann jede Instanz des Neurons 2502 in einer Instanz der zweiten Schicht 2512 auf weniger als alle Instanzen des Neurons 2502 in einer dritten Schicht 2514 auffächern. In mindestens einer Ausführungsform kann die zweite Schicht 2512 als „kaum verbundene vorwärtsgekoppelte Schicht“ bezeichnet sein. In mindestens einer Ausführungsform können sich Neuronen 2502 in der zweiten Schicht 2512 zu Neuronen 2502 in mehreren anderen Schichten auffächern, was zu Neuronen 2502 in (derselben) zweiten Schicht 2512 beinhaltet. In mindestens einer Ausführungsform kann die zweite Schicht 2512 als „wiederkehrende Schicht“ bezeichnet sein. In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2500 ohne Einschränkung eine beliebige geeignete Kombination von wiederkehrenden Schichten und vorwärtsgekoppelten Schichten beinhalten, die ohne Einschränkung sowohl kaum verbundene vorwärtsgekoppelte Schichten als auch vollständig verbundene vorwärtsgekoppelte Schichten beinhalten.
In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2500 ohne Einschränkung eine rekonfigurierbare Verbindungsarchitektur oder dedizierte fest verdrahtete Verbindungen beinhalten, um die Synapse 2508 mit den Neuronen 2502 zu verbinden. In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2500 ohne Einschränkung eine Schaltung oder Logik beinhalten, die es Synapsen ermöglicht, unterschiedlichen Neuronen 2502 nach Bedarf auf Grundlage der Topologie des neuronalen Netzes und dem Eingangs-/Ausgangslastfaktor von Neuronen zugewiesen zu werden. Zum Beispiel können die Synapsen 2508 in mindestens einer Ausführungsform mit Neuronen 2502 unter Verwendung einer Verbindungsstruktur, wie etwa Network-on-Chip, oder mit dedizierten Verbindungen verbunden sein. In mindestens einer Ausführungsform können Synapsenverbindungen und Komponenten davon unter Verwendung von Schaltungen oder Logik umgesetzt sein.
In mindestens einer Ausführungsform wird mindestens eine auf 25 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der neuromorphe Prozessor 2500 von 25 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform kann das System 2600 eine serverbasierte Spielplattform, eine Spielkonsole, die eine Spiel- und Medienkonsole beinhaltet, eine mobile Spielkonsole, eine Handheld-Spielekonsole oder eine Online-Spielekonsole beinhalten oder darin integriert sein. In mindestens einer Ausführungsform ist das System 2600 ein Mobiltelefon, ein Smartphone, eine Tablet-Rechenvorrichtung oder eine mobile Internetvorrichtung. In mindestens einer Ausführungsform kann das Verarbeitungssystem 2600 auch eine tragbare Vorrichtung, wie etwa eine tragbare Smartwatch-Vorrichtung, eine intelligente Brillenvorrichtung, eine Augmented-Reality-Vorrichtung oder eine Virtual-Reality-Vorrichtung beinhalten, mit dieser gekoppelt oder darin integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 2600 ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung, die einen oder mehrere Prozessoren 2602 beinhaltet, und eine grafische Schnittstelle, die von einem oder mehreren Grafikprozessoren 2608 erzeugt wird.
In mindestens einer Ausführungsform beinhalten ein oder mehrere Prozessoren 2602 jeweils einen oder mehrere Prozessorkerne 2607, um Anweisungen zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- und Benutzersoftware ausführen. In mindestens einer Ausführungsform ist jeder von einem oder mehreren Prozessorkernen 2607 dazu konfiguriert, einen konkreten Anweisungssatz 2609 zu verarbeiten. In mindestens einer Ausführungsform kann der Anweisungssatz 2609 das Berechnen mit komplexem Anweisungssatz (Complex Instruction Set Computing - CISC), das Berechnen mit verringertem Anweisungssatz (Reduced Instruction Set Computing - RISC) oder das Berechnen über ein sehr langes Anweisungswort (Very Long Instruction Word - VLIW) erleichtern. In mindestens einer Ausführungsform können die Prozessorkerne 2607 jeweils einen anderen Anweisungssatz 2609 verarbeiten, der Anweisungen beinhalten kann, um die Emulation anderer Anweisungssätze zu erleichtern. In mindestens einer Ausführungsform kann der Prozessorkern 2607 auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen digitalen Signalprozessor (DSP).
In mindestens einer Ausführungsform beinhaltet der Prozessor 2602 einen schnellen Pufferspeicher 2604. In mindestens einer Ausführungsform kann der Prozessor 2602 einen einzelnen internen Zwischenspeicher oder mehrere Ebenen des internen Zwischenspeichers aufweisen. In mindestens einer Ausführungsform wird der schnelle Pufferspeicher von verschiedenen Komponenten des Prozessors 2602 gemeinsam genutzt. In mindestens einer Ausführungsform verwendet der Prozessor 2602 außerdem einen externen Zwischenspeicher (z. B. einen Level-3-(L3-)Zwischenspeicher oder Last-Level-Zwischenspeicher (LLC)) (nicht gezeigt), der von den Prozessorkernen 2607 unter Verwendung bekannter Zwischenspeicher-Kohärenzmethoden gemeinsam genutzt werden kann. In mindestens einer Ausführungsform ist die Registerdatei 2606 zusätzlich im Prozessor 2602 beinhaltet, der unterschiedliche Arten von Registern zum Speichern verschiedener Arten von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungsverweisregister) beinhalten kann. In mindestens einer Ausführungsform kann die Registerdatei 2606 Allzweckregister oder andere Register beinhalten.
In mindestens einer Ausführungsform sind ein oder mehrere Prozessoren 2602 mit einem oder mehreren Schnittstellenbussen 2610 gekoppelt, um Kommunikationssignale, wie etwa Adress-, Daten- oder Steuersignale, zwischen dem Prozessor 2602 und anderen Komponenten im System 2600 zu übermitteln. In mindestens einer Ausführungsform kann der Schnittstellenbus 2610 in einer Ausführungsform ein Prozessorbus sein, wie etwa eine Version eines Mediendirektsschnittstellen-(Direct Media Interface - DMI-)Busses. In mindestens einer Ausführungsform ist die Schnittstelle 2610 nicht auf einen DMI-Bus beschränkt und kann einen oder mehrere Peripheriegerätekomponentenverbindungsbusse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In mindestens einer Ausführungsform beinhalten Prozessor(en) 2602 eine integrierte Speichersteuerung 2616 und einen Plattformsteuerungshub 2630. In mindestens einer Ausführungsform erleichtert der Speichersteuerung 2616 die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 2600, während der Plattformsteuerungshub (platform controller hub - PCH) 2630 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
In mindestens einer Ausführungsform kann die Speichervorrichtung 2620 ein dynamischer Direktzugriffsspeicher (DRAM), ein statischer Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung sein, die eine geeignete Leistung aufweist, um als Prozessspeicher zu dienen. In mindestens einer Ausführungsform kann die Speichervorrichtung 2620 als Systemspeicher für das System 2600 arbeiten, um Daten 2622 und Anweisungen 2621 zur Verwendung zu speichern, wenn ein oder mehrere Prozessoren 2602 eine Anwendung oder einen Prozess ausführen. In mindestens einer Ausführungsform ist die Speichersteuerung 2616 auch mit einem optionalen externen Grafikprozessor 2612 gekoppelt, der mit einem oder mehreren Grafikprozessoren 2608 in den Prozessoren 2602 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Anzeigevorrichtung 2611 mit Prozessor(en) 2602 verbunden sein. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 2611 eine oder mehrere von einer internen Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung, oder einer externen Anzeigevorrichtung beinhalten, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 2611 eine am Kopf befestigte Anzeige (head mounted display - HMD) beinhalten, wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in Virtual-Reality-(VR-)Anwendungen oder Augmented-Reality-(AR-)Anwendungen.
In mindestens einer Ausführungsform ermöglicht der Plattformsteuerungshub 2630 den Peripheriegeräten, sich über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 2620 und dem Prozessor 2602 zu verbinden. In mindestens einer Ausführungsform beinhalten E/A-Peripheriegeräte, ohne darauf beschränkt zu sein, eine Audiosteuerung 2646, eine Netzsteuerung 2634, eine Firmwareschnittstelle 2628, einen drahtlosen Sendeempfänger2626, Berührungssensoren 2625, eine Datenspeichervorrichtung 2624 (z. B. Festplatte, Flash-Speicher usw.). In mindestens einer Ausführungsform kann sich die Datenspeichervorrichtung 2624 über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriegerätebus verbinden, wie etwa einen Peripheriegerätekomponentenverbindungsbus (z. B. PCI, PCI Express). In mindestens einer Ausführungsform können die Berührungssensoren 2625 Berührungsbildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. In mindestens einer Ausführungsform kann der drahtlose Sendeempfänger2626 ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilfunknetz-Sendeempfänger wie etwa ein 3G-, 4G- oder Long Term Evolution (LTE)-Sendeempfänger sein. In mindestens einer Ausführungsform ermöglicht die Firmwareschnittstelle 2628 die Kommunikation mit der System-Firmware und kann zum Beispiel eine einheitliche erweiterbare Firmwareschnittstelle (unified extensible firmware interface - UEFI) sein. In mindestens einer Ausführungsform kann der Netzsteuerung 2634 eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In mindestens einer Ausführungsform ist eine Hochleistungsnetzsteuerung (nicht gezeigt) mit dem Schnittstellenbus 2610 gekoppelt. In mindestens einer Ausführungsform ist die Audiosteuerung 2646 eine Mehrkanal-Audiosteuerung mit hoher Auflösung. In mindestens einer Ausführungsform beinhaltet das System 2600 eine optionale Alt-E/A-Steuerung 2640 zum Koppeln von Alt-Vorrichtungen (z. B. Personal System 2 (PS/2)) an das System 2600. In mindestens einer Ausführungsform kann der Plattformsteuerungshub 2630 auch mit einer oder mehreren universellen seriellen Bus-(USB-)Steuerungen 2642 verbunden sein, um Eingabevorrichtungen zu verbinden, wie etwa Kombinationen aus Tastatur und Maus 2643, eine Kamera 2644 oder andere USB-Eingabevorrichtungen.
In mindestens einer Ausführungsform kann eine Instanz der Speichersteuerung 2616 und des Plattformsteuerungshubs 2630 in einen diskreten externen Grafikprozessor, wie etwa den externen Grafikprozessor 2612, integriert sein. In mindestens einer Ausführungsform können sich der Plattformsteuerungshub 2630 und/oder die Speichersteuerung 2616 außerhalb eines oder mehrerer Prozessoren 2602 befinden. Zum Beispiel kann das System 2600 in mindestens einer Ausführungsform eine externe Speichersteuerung 2616 und einen Plattformsteuerungshub 2630 beinhalten, die als Speichersteuerungshub und Peripheriegerätesteuerungshub innerhalb eines Systemchipsatzes konfiguriert sein können, der mit Prozessor(en) 2602 kommuniziert.
Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen verknüpft sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 715 werden nachfolgend in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Teile der oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Grafikprozessor 2608 integriert sein. Zum Beispiel können in mindestens einer Ausführungsform in dieser Schrift beschriebene Trainings- und/oder Ableitungsmethoden eine oder mehrere der im Grafikprozessor 3D realisierten ALUs verwenden. Darüber hinaus können in mindestens einer Ausführungsform in dieser Schrift beschriebene Ableitung- und/oder Trainingsoperationen unter Verwendung einer anderen Logik als der in den 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternen oder chipexternen Speicher und/oder Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 2608 konfigurieren, um einen oder mehrere Algorithmen maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder in dieser Schrift beschriebene Trainingsmethoden auszuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 26 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird das System 2600 von 26 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform stellen die Einheiten des internen Zwischenspeichers 2704A-2704N und die Einheiten des gemeinsam genutzten Zwischenspeichers 2706 eine Zwischenspeicherspeicherhierarchie innerhalb des Prozessors 2700 dar. In mindestens einer Ausführungsform können die Einheiten des schnellen Pufferspeichers 2704A-2704N mindestens eine Ebene des Anweisungs- und Datenzwischenspeichers innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen eines gemeinsam genutzten Zwischenspeichers der mittleren Ebene beinhalten, wie etwa eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Zwischenspeicherebenen, wobei die höchste Zwischenspeicherebene vor dem externen Speicher als eine LLC klassifiziert ist. In mindestens einer Ausführungsform hält die Zwischenspeicher-Kohärenzlogik die Kohärenz zwischen verschiedenen Zwischenspeichereinheiten 2706 und 2704A-2704N aufrecht.
In mindestens einer Ausführungsform kann der Prozessor 2700 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 2716 und einem Systemagentenkern 2710 beinhalten. In mindestens einer Ausführungsform verwalten eine oder mehrere Bussteuerungseinheiten 2716 einen Satz von Peripheriegerätebussen, wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einer Ausführungsform stellt der Systemagentenkern 2710 Verwaltungsfunktionen für verschiedene Prozessorkomponenten bereit. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 2710 eine oder mehrere integrierte Speichersteuerungen 2714, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
In mindestens einer Ausführungsform beinhalten einer oder mehrere der Prozessorkerne 2702A-2702N Unterstützung für simultanes Multithreading. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 2710 Komponenten zum Koordinieren und Betreiben der Kerne 2702A - 2702N während der Multithread-Verarbeitung. In mindestens einer Ausführungsform kann der Systemagentenkern 2710 zusätzlich eine Leistungssteuereinheit (PCU) beinhalten, die Logik und Komponenten beinhaltet, um einen oder mehrere Leistungszustände der Prozessorkerne 2702A-2702N und des Grafikprozessors 2708 zu regulieren.
In mindestens einer Ausführungsform beinhaltet der Prozessor 2700 zusätzlich den Grafikprozessor 2708, um Grafikverarbeitungsoperationen auszuführen. In mindestens einer Ausführungsform ist der Grafikprozessor 2708 mit Einheiten des gemeinsam genutzten Zwischenspeichers 2706 und dem Systemagentenkern 2710 gekoppelt, was eine oder mehrere integrierte Speichersteuerungen 2714 beinhaltet. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 2710 außerdem eine Anzeigesteuerung 2711, um die Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu lenken. In mindestens einer Ausführungsform kann die Anzeigesteuerung 2711 auch ein getrenntes Modul sein, das über mindestens eine Verbindung mit dem Grafikprozessor 2708 gekoppelt ist, oder kann innerhalb des Grafikprozessors 2708 integriert sein.
In mindestens einer Ausführungsform wird eine ringbasierte Verbindungseinheit 2712 verwendet, um interne Komponenten des Prozessors 2700 zu koppeln. In mindestens einer Ausführungsform kann eine alternative Verbindungseinheit verwendet werden, wie etwa eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Methoden. In mindestens einer Ausführungsform ist der Grafikprozessor 2708 über eine E/A-Verbindung 2713 mit der Ringverbindung 2712 gekoppelt.
In mindestens einer Ausführungsform stellt die E/A-Verbindung 2713 mindestens eine von mehreren Arten von E/A-Verbindungen dar, was eine E/A-Verbindung auf dem Gehäuse beinhaltet, welche die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2718 erleichtert, wie etwa als eDRAM-Modul. In mindestens einer Ausführungsform verwenden jeder der Prozessorkerne 2702A-2702N und der Grafikprozessor 2708 eingebettete Speichermodule 2718 als gemeinsam genutzten Zwischenspeicher der letzten Ebene.
In mindestens einer Ausführungsform sind die Prozessorkerne 2702A-2702N homogene Kerne, die eine gemeinsame Anweisungssatzarchitektur ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2702A-2702N im Hinblick auf die Anweisungssatzarchitektur (instruction set architecture - ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 2702A-2702N einen gemeinsamen Anweisungssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 2702A-2702N eine Teilmenge eines gemeinsamen Anweisungssatzes oder einen anderen Anweisungssatz ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2702A-2702N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die einen verhältnismäßig höheren Leistungsverbrauch aufweisen, mit einem oder mehreren Leistungskernen gekoppelt sind, die einen geringeren Leistungsverbrauch aufweisen. In mindestens einer Ausführungsform kann der Prozessor 2700 auf einem oder mehreren Chips oder als integrierter SoC-Schaltkreis umgesetzt sein.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Grafikprozessor 2708 integriert sein. Zum Beispiel können in mindestens einer Ausführungsform die hier beschriebenen Trainings- und/oder Ableitungsmethoden eine oder mehrere ALUs in einer 3D-Pipeline, Grafikkern(e) 2702, gemeinsam genutzte Funktionslogik oder andere Logik in 27 verwenden. Außerdem können in mindestens einer Ausführungsform die hier beschriebenen Ableitungs- und/oder Trainingsoperationen mit einer anderen als der in 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder in (gezeigten oder nicht gezeigten) Registern gespeichert werden, die die ALUs des Prozessors 2700 so konfigurieren, dass sie einen oder mehrere der hier beschriebenen maschinellen Lernalgorithmen, neuronalen Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchführen.
In mindestens einer Ausführungsform wird mindestens eine auf 27 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der Prozessor 2700 von 27 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt der Grafikprozessor 2800 auch eine Kontrolle der Anzeige 2802 ein, um Anzeigeausgangsdaten an eine Anzeigevorrichtung 2820 zu steuern. In mindestens einer Ausführungsform schließt die Anzeigesteuereinheit 2802 Hardware für eine oder mehrere Überlagerungsebenen für die Anzeigevorrichtung 2820 und die Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen ein. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 2820 eine interne oder externe Anzeigevorrichtung sein. In mindestens einer Ausführungsform ist die Anzeigevorrichtung 2820 eine am Kopf befestigte Anzeigevorrichtung, wie z. B. eine Virtual Reality (VR) Anzeigevorrichtung oder eine Augmented Reality (AR) Anzeigevorrichtung. In mindestens einer Ausführungsform schließt der Grafikprozessor 2800 eine Video Codec Engine 2806 ein, um Medien in, aus oder zwischen einem oder mehreren Medienkodierformaten zu kodieren, zu dekodieren oder zu transkodieren, einschließlich, aber nicht beschränkt auf Moving Picture Experts Group (MPEG) Formate wie MPEG-2, Advanced Video Coding (AVC) Formate wie H.264 /MPEG-4 AVC, sowie die Society of Motion Picture & Television Engineers (SMPTE) 421 M/VC-1 und Joint Photographic Experts Group (JPEG) Formate wie JPEG und Motion JPEG (MJPEG).
In mindestens einer Ausführungsform schließt der Grafikprozessor 2800 eine BLIT-Engine (Block Image Transfer) 2804 ein, um zweidimensionale (2D) Rasterisierungsoperationen durchzuführen, zum Beispiel die Übertragung von Blöcken mit Bitgrenzen. In mindestens einer Ausführungsform werden 2D-Grafikoperationen jedoch mit einer oder mehreren Komponenten einer Graphics Processing Engine (GPE) 2810 durchgeführt. In mindestens einer Ausführungsform ist die GPE 2810 eine Berechnungsengine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
In mindestens einer Ausführungsform schließt GPE 2810 eine 3D-Pipeline 2812 zum Durchführen von 3D-Operationen ein, wie z. B. das Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. In mindestens einer Ausführungsform schließt die 3D-Pipeline 2812 programmierbare und feste Funktionselemente ein, die verschiedene Aufgaben ausführen und/oder Ausführungs-Threads in ein 3D/Media-Subsystem 2815 einschleusen. Während die 3D-Pipeline 2812 zum Durchführen von Medienoperationen verwendet werden kann, schließt die GPE 2810 in mindestens einer Ausführungsform auch eine Medien-Pipeline 2816 ein, die zum Durchführen von Medienoperationen, wie z. B. Videonachbearbeitung und Bildverbesserung, verwendet wird.
In mindestens einer Ausführungsform schließt die Medien-Pipeline 2816 Einheiten mit fester Funktion oder programmierbarer Logik ein, um eine oder mehrere spezialisierte Medienoperationen durchzuführen, wie z. B. Videodekodierbeschleunigung, Video-De-Interlacing und Videokodierbeschleunigung anstelle oder im Auftrag der Video Codec Engine 2806. In mindestens einer Ausführungsform schließt die Medien-Pipeline 2816 zusätzlich eine Thread-Spawning-Einheit ein, um Threads zur Ausführung im 3D/Media-Subsystem 2815 auszuführen. In mindestens einer Ausführungsform führen die gespawnten Threads Berechnungen für Medienoperationen auf einer oder mehreren Grafikausführungseinheiten aus, die in das 3D/Media-Subsystem 2815 eingeschlossen sind.
In mindestens einer Ausführungsform schließt das 3D/Media-Subsystem 2815 eine Logik zum Ausführen von Threads ein, die von der 3D-Pipeline 2812 und der Media-Pipeline 2816 erzeugt werden. In mindestens einer Ausführungsform senden die 3D-Pipeline 2812 und die Media-Pipeline 2816 Thread-Ausführungsanfragen an das 3D/Media-Subsystem 2815, das eine Thread-Abfertiger-Logik einschließt, um die verschiedenen Anfragen an verfügbare Thread-Ausführungsressourcen zu vermitteln und zu verteilen. In mindestens einer Ausführungsform schließen die Ausführungsressourcen ein Array von Grafikausführungseinheiten ein, um 3D- und Medien-Threads zu verarbeiten. In mindestens einer Ausführungsform schließt das 3D/Media-Subsystem 2815 einen oder mehrere interne Caches für Thread-Anweisungen und Daten ein. In mindestens einer Ausführungsform schließt das Subsystem 2815 auch einen gemeinsam genutzten Speicher ein, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Grafikprozessor 2800 integriert sein. Zum Beispiel können in mindestens einer Ausführungsform die hier beschriebenen Trainings- und/oder Ableitungsmethoden eine oder mehrere der in der 3D-Pipeline 2812 verkörperten ALUs verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hier beschriebenen Ableitungs- und/oder Trainingsoperationen unter Verwendung einer anderen als der in den 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder in (gezeigten oder nicht gezeigten) Registern gespeichert werden, die ALUs des Grafikprozessors 2800 konfigurieren, um einen oder mehrere hier beschriebene maschinelle Lernalgorithmen, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 28 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird der Grafikprozessor 2800 von 28 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform ist GPE 2910 mit einem Befehlsstreamer 2903 gekoppelt oder schließt diesen ein, der einen Befehlsstrom für eine 3D-Pipeline 2912 und/oder eine Medienpipeline 2916 bereitstellt. In mindestens einer Ausführungsform ist der Befehlsstreamer 2903 mit einem Speicher gekoppelt, bei dem es sich um einen Systemspeicher oder um einen oder mehrere interne Cache-Speicher und gemeinsam genutzte Cache-Speicher handeln kann. In mindestens einer Ausführungsform empfängt der Command Streamer 2903 Befehle aus dem Speicher und sendet sie an die 3D-Pipeline 2912 und/oder die Media Pipeline 2916. In mindestens einer Ausführungsform handelt es sich bei den Befehlen um Anweisungen, Primitive oder Mikrooperationen, die aus einem Ringpuffer abgerufen werden, in dem Befehle für die 3D-Pipeline 2912 und die Media-Pipeline 2916 gespeichert sind. In mindestens einer Ausführungsform kann ein Ringpuffer zusätzlich Batch-Befehlspuffer einschließen, die Stapel von mehreren Befehlen speichern. In mindestens einer Ausführungsform können die Befehle für die 3D-Pipeline 2912 auch Verweise auf im Speicher gespeicherte Daten einschließen, wie z. B. Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 2912 und/oder Bilddaten und Speicheraufgaben für die Medien-Pipeline 2916, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform verarbeiten die 3D-Pipeline 2912 und die Medien-Pipeline 2916 Befehle und Daten, indem sie Operationen ausführen oder einen oder mehrere Ausführungs-Threads an ein Grafikkern-Array 2914 weiterleiten. In mindestens einer Ausführungsform schließt das Grafikkern-Array 2914 einen oder mehrere Blöcke von Grafikkernen ein (z. B. Grafikkern(e) 2915A, Grafikkern(e) 2915B), wobei jeder Block einen oder mehrere Grafikkerne einschließt. In mindestens einer Ausführungsform schließt jeder Grafikkern einen Satz von Grafikausführungsressourcen ein, der eine allgemeine und eine grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie eine Texturverarbeitungslogik mit fester Funktion und/oder eine Logik zur Beschleunigung des maschinellen Lernens und der künstlichen Intelligenz, einschließlich der Ableitungs- und/oder Trainingslogik 715 in 7A und 7B , einschließt.
In mindestens einer Ausführungsform schließt die 3D-Pipeline 2912 eine fest funktionierende und programmierbare Logik ein, um ein oder mehrere Shader-Programme wie Scheitelpunkt-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Compute-Shader oder andere Shader-Programme zu verarbeiten, indem Anweisungen verarbeitet und Ausführungs-Threads an das Grafikkern-Array 2914 weitergeleitet werden. In mindestens einer Ausführungsform stellt das Grafikkern-Array 2914 einen einheitlichen Block von Ausführungsressourcen für die Verarbeitung von Shader-Programmen bereit. In mindestens einer Ausführungsform schließt eine Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) in den Grafikkernen 2915A-2915B des Grafikkern-Arrays 2914 die Unterstützung für verschiedene 3D-API-Shader-Sprachen ein und kann mehrere gleichzeitige, mehreren Shadern zugeordnete Ausführungs-Threads ausführen.
In mindestens einer Ausführungsform schließt das Grafikkern-Array 2914 auch eine Ausführungslogik zum Durchführen von Medienfunktionen ein, wie z. B. Video- und/oder Bildverarbeitung. In mindestens einer Ausführungsform schließen die Ausführungseinheiten zusätzlich eine Mehrzwecklogik ein, die so programmiert werden kann, dass sie zusätzlich zu den Grafikverarbeitungsoperationen parallele Rechenoperationen für allgemeine Zwecke durchführt.
In mindestens einer Ausführungsform können Ausgabedaten, die von Threads erzeugt werden, die auf dem Grafikkern Array 2914 ausgeführt werden, an den Speicher in einem Unified Return Buffer (URB) 2918 ausgegeben werden. In mindestens einer Ausführungsform kann der URB 2918 Daten für mehrere Threads speichern. In mindestens einer Ausführungsform kann der URB 2918 verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkern-Array 2914 ausgeführt werden. In mindestens einer Ausführungsform kann URB 2918 zusätzlich für die Synchronisation zwischen Threads auf dem Grafikkern-Array 2914 und der festen Funktionslogik innerhalb der gemeinsamen Funktionslogik 2920 verwendet werden.
In mindestens einer Ausführungsform ist das Grafikkern-Array 2914 skalierbar, so dass das Grafikkern-Array 2914 eine variable Anzahl von Grafikkernen einschließt, die jeweils eine variable Anzahl von Ausführungseinheiten basierend auf einem Target-Leistungsgrad von GPE 2910 aufweisen. In mindestens einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, so dass die Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
In mindestens einer Ausführungsform ist das Grafikkern Array 2914 mit einer gemeinsam genutzten Funktionslogik 2920 gekoppelt, die mehrere Ressourcen einschließt, die von den Grafikkernen im Grafikkern Array 2914 gemeinsam genutzt werden. In mindestens einer Ausführungsform sind die von der gemeinsam genutzten Funktionslogik 2920 durchgeführten Funktionen in Hardware-Logikeinheiten verkörpert, die spezielle Zusatzfunktionen für das Grafikkern-Array 2914 bereitstellen. In mindestens einer Ausführungsform schließt die gemeinsame Funktionslogik 2920 eine Sampler-Einheit 2921, eine Mathematikeinheit 2922 und eine Inter-Thread-Kommunikationslogik (ITC) 2923 ein, ist aber nicht darauf beschränkt. In mindestens einer Ausführungsform sind ein oder mehrere Cache(s) 2925 in die gemeinsame Funktionslogik 2920 eingeschlossen oder mit ihr gekoppelt.
In mindestens einer Ausführungsform wird eine gemeinsam genutzte Funktion verwendet, wenn die Nachfrage nach einer speziellen Funktion nicht ausreicht, um sie in das Grafikkern Array 2914 aufzunehmen. In mindestens einer Ausführungsform wird eine einzelne Instanziierung einer spezialisierten Funktion in der gemeinsam genutzten Funktionslogik 2920 verwendet und mit anderen Ausführungsressourcen im Grafikkern-Array 2914 geteilt. In mindestens einer Ausführungsform können bestimmte gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 2920, die vom Grafikkern-Array 2914 intensiv genutzt werden, in die gemeinsam genutzte Funktionslogik 2926 innerhalb des Grafikkern-Arrays 2914 eingeschlossen werden. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 2926 im Grafik-Core Array 2914 einen Teil oder die gesamte Logik der gemeinsam genutzten Funktionslogik 2920 einschließen. In mindestens einer Ausführungsform können alle Logikelemente der gemeinsam genutzten Funktionslogik 2920 in der gemeinsam genutzten Funktionslogik 2926 des Grafikkern-Arrays 2914 dupliziert werden. In mindestens einer Ausführungsform wird die gemeinsam genutzte Funktionslogik 2920 zugunsten der gemeinsam genutzten Funktionslogik 2926 im Grafikkern-Array 2914 ausgeschlossen.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Grafikprozessor 2910 integriert sein. Zum Beispiel können in mindestens einer Ausführungsform die hier beschriebenen Trainings- und/oder Ableitungsmethoden eine oder mehrere der in der 3D-Pipeline 2912 enthaltenen ALUs, den/die Grafikkern(e) 2915, die gemeinsam genutzte Funktionslogik 2926, die gemeinsam genutzte Funktionslogik 2920 oder andere Logik in 29 verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hier beschriebenen Ableitungs- und/oder Trainingsoperationen mit einer anderen als der in 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder in (gezeigten oder nicht gezeigten) Registern gespeichert werden, die die ALUs des Grafikprozessors 2910 so konfigurieren, dass sie einen oder mehrere der hier beschriebenen maschinellen Lernalgorithmen, neuronalen Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchführen.
In mindestens einer Ausführungsform wird mindestens eine auf 29 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Computerdarstellung (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, die zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird die Grafikverarbeitungsengine 2910 von 29 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform schließt der Festfunktionsblock 3030 eine Geometrie- und Festfunktionspipeline 3036 ein, die von allen Unterkernen im Grafikprozessor 3000 gemeinsam genutzt werden kann, zum Beispiel in Grafikprozessor-Implementierungen mit geringerer Leistung und/oder geringerem Energieverbrauch. In mindestens einer Ausführungsform schließt die Geometrie- und Festfunktionspipeline 3036 eine 3D-Festfunktionspipeline, eine Video-Front-End-Einheit, einen Thread-Spawner und Thread-Abfertiger sowie einen Unified-Return-Puffer-Manager ein, der Unified-Return-Puffer verwaltet.
In mindestens einer Ausführungsform schließt der feste Funktionsblock 3030 auch eine Grafik-SoC-Schnittstelle 3037, eine Grafik-Mikrosteuerung 3038 und eine Medienpipeline 3039 ein. In mindestens einer Ausführungsform stellt die Grafik-SoC-Schnittstelle 3037 eine Schnittstelle zwischen dem Grafikkern 3000 und anderen Prozessorkernen innerhalb eines integrierten System-on-Chip-Schaltkreises bereit. In mindestens einer Ausführungsform ist die grafische Mikrosteuerung 3038 ein programmierbarer Subprozessor, der so konfiguriert werden kann, dass er verschiedene Funktionen des Grafikprozessors 3000 verwaltet, einschließlich Thread Dispatch, Einplanen und Preemption. In mindestens einer Ausführungsform schließt die Medien-Pipeline 3039 eine Logik ein, die das Dekodieren, Kodieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, erleichtert. In mindestens einer Ausführungsform implementiert die Medien-Pipeline 3039 Medienoperationen über Anfragen an die Rechen- oder Abtastlogik innerhalb der Sub-Cores 3001A-3001 F.
In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 3037 dem Grafikkern 3000 die Kommunikation mit Mehrzweck-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoCs, einschließlich Elementen der Speicherhierarchie wie einem gemeinsam genutzten Cache-Speicher auf dem letzten Grad, System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 3037 auch die Kommunikation mit festen Vorrichtungen innerhalb eines SoCs ermöglichen, wie z. B. Kamera-Bildgeber-Pipelines, und ermöglicht die Nutzung und/oder Implementierung globaler Speicher-Atomik, die von Grafikkern 3000 und CPUs innerhalb eines SoCs gemeinsam genutzt werden kann. In mindestens einer Ausführungsform kann die Grafik-SoC-Schnittstelle 3037 auch die Steuerung der Energieverwaltung für den Grafikprozessorkern 3000 implementieren und eine Schnittstelle zwischen einer Domäne des Grafikprozessorkerns 3000 und anderen Domänen innerhalb eines SoCs ermöglichen. In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 3037 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Abfertiger, die so konfiguriert sind, dass sie Befehle und Anweisungen für jeden einzelnen oder mehrere Grafikkerne innerhalb eines Grafikprozessors bereitstellen. In mindestens einer Ausführungsform können Befehle und Anweisungen an die Medienpipeline 3039 gesendet werden, wenn Medienoperationen durchgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (z. B. Geometrie- und Festfunktionspipeline 3036 und/oder eine Geometrie- und Festfunktionspipeline 3014), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen.
In mindestens einer Ausführungsform kann die grafische Mikrosteuerung 3038 so konfiguriert werden, dass sie verschiedene Planungs- und Verwaltungsaufgaben für den Grafikkern 3000 durchführt. In mindestens einer Ausführungsform kann die grafische Mikrosteuerung 3038 die Planung von Grafik- und/oder Rechenaufgaben auf verschiedenen parallelen Grafikengines in den Arrays 3002A-3002F, 3004A-3004F der Ausführungseinheiten (EU) in den Sub-Cores 3001A-3001 F durchführen. In mindestens einer Ausführungsform kann die Hostsoftware, die auf einem CPU-Kern eines SoC ausgeführt wird, der den Grafikkern 3000 einschließt, Arbeitslasten an einen von mehreren Grafikprozessorpfaden übergeben, der eine Operation zum Einplanen auf einer geeigneten Grafik Engine aufruft. In mindestens einer Ausführungsform schließen die Operationen zum Einplanen das Bestimmen der als nächstes auszuführenden Arbeitslast, das Übergeben einer Arbeitslast an einen Befehlsstreamer, das Vorziehen bestehender Arbeitslasten auf einer Engine, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Hostsoftware, wenn eine Arbeitslast abgeschlossen ist, ein. In mindestens einer Ausführungsform kann die grafische Mikrosteuerung 3038 auch Zustände mit geringer Leistung oder Leerlauf für den Grafikkern 3000 ermöglichen, indem sie dem Grafikkern 3000 die Fähigkeit bereitstellt, Register innerhalb des Grafikkerns 3000 über Zustandsübergänge mit geringer Leistung unabhängig von einem Betriebssystem und/oder einer Grafiktreibersoftware in einem System zu speichern und wiederherzustellen.
In mindestens einer Ausführungsform kann der Grafikkern 3000 mehr oder weniger als die veranschaulichten Unterkerne 3001A-3001 F aufweisen, bis zu N modulare Unterkerne. In mindestens einer Ausführungsform kann der Grafikkern 3000 für jeden Satz von N Unterkernen auch eine gemeinsam genutzte Funktionslogik 3010, einen gemeinsam genutzten und/oder Cache-Speicher 3012, eine Geometrie-/Festfunktions-Pipeline 3014 sowie eine zusätzliche Festfunktionslogik 3016 zur Beschleunigung verschiedener Grafik- und Rechenoperationen einschließen. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 3010 logische Einheiten (z. B. Sampler-, Mathematik- und/oder Inter-Thread-Kommunikationslogik) einschließen, die von allen N Sub-Cores innerhalb des Grafikkerns 3000 gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann der gemeinsam genutzte und/oder Cache-Speicher 3012 ein Cache letzten Grades für N Sub-Cores 3001A-3001F innerhalb des Grafikkerns 3000 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den mehrere Sub-Cores zugreifen können. In mindestens einer Ausführungsform kann die Geometrie-/Festfunktionspipeline 3014 anstelle der Geometrie-/Festfunktionspipeline 3036 in den Festfunktionsblock 3030 eingeschlossen werden und kann ähnliche logische Einheiten einschließen.
In mindestens einer Ausführungsform schließt der Grafikkern 3000 eine zusätzliche Logik für feste Funktionen 3016 ein, die verschiedene Logiken zur Beschleunigung fester Funktionen zur Verwendung durch den Grafikkern 3000 einschließen kann. In mindestens einer Ausführungsform schließt die zusätzliche feste Funktionslogik 3016 eine zusätzliche Geometrie-Pipeline für die Verwendung im positionsabhängigen Shading ein. Bei der positionsabhängigen Schattierung gibt es mindestens zwei Geometrie-Pipelines, nämlich eine vollständige Geometrie-Pipeline innerhalb der Geometrie- und Festfunktions-Pipelines 3014, 3036 und eine Cull-Pipeline, eine zusätzliche Geometrie-Pipeline, die in die zusätzliche Festfunktionslogik 3016 eingeschlossen sein kann. In mindestens einer Ausführungsform ist eine 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 verschiedene Instanzen einer Anwendung ausführen, wobei jede Instanz einen getrennten Kontext aufweist. In mindestens einer Ausführungsform kann die positionsabhängige Schattierung lange Cull-Läufe von verworfenen Dreiecken ausblenden, so dass die Schattierung 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 festen Funktionslogik 3016 Positions-Shader parallel zu einer Hauptanwendung ausführen und erzeugt kritische Ergebnisse im Allgemeinen schneller als eine vollständige Pipeline, da eine Cull-Pipeline Positionsattribute von Scheitelpunkten abruft und schattiert, ohne eine Rasterung und ein Rendering von Pixeln in einem Bildpuffer durchzuführen. In mindestens einer Ausführungsform kann eine Cull-Pipeline die erzeugten kritischen Ergebnisse verwenden, um die Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, unabhängig davon, ob diese Dreiecke gecullt werden. In mindestens einer Ausführungsform kann eine vollständige Pipeline (die in diesem Fall als Replay-Pipeline bezeichnet werden kann) die Sichtbarkeitsinformationen verwenden, um die ausgemergelten Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die schließlich an eine Rasterisierungsphase weitergegeben werden.
In mindestens einer Ausführungsform kann die zusätzliche feste Funktionslogik 3016 auch eine Logik zur Beschleunigung des maschinellen Lernens einschließen, wie z. B. eine Logik zur Matrixmultiplikation mit fester Funktion, für Implementierungen, die Optimierungen für das Training oder die Ableitung von maschinellem Lernen einschließen.
In mindestens einer Ausführungsform schließt jeder Grafik-Sub-Core 3001A-3001 F eine Reihe von Ausführungsressourcen ein, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anfragen von Grafik-Pipeline-, Medien-Pipeline- oder Shader-Programmen auszuführen. In mindestens einer Ausführungsform schließen die Grafik-Sub-Cores 3001A-3001F mehrere EU-Arrays 3002A-3002F, 3004A-3004F, eine TD/IC-Logik (Thread Dispatch and Inter-Thread Communication) 3003A-3003F, einen 3D-Sampler (z. B. für Texturen) 3005A-3005F, einen Media-Sampler 3006A-3006F, einen Shader-Prozessor 3007A-3007F und einen gemeinsamen lokalen Speicher (SLM) 3008A-3008F ein. In mindestens einer Ausführungsform schließen die EU-Arrays 3002A-3002F, 3004A-3004F jeweils mehrere Ausführungseinheiten ein, bei denen es sich um universelle Grafikverarbeitungseinheiten handelt, die in der Lage sind, logische Gleitkomma- und Ganzzahl-/Fixpunkt-Operationen im Dienste einer Grafik-, Medien- oder Berechnen-Operation durchzuführen, einschließlich Grafik-, Medien- oder Rechenshader-Programmen. In mindestens einer Ausführungsform führt die TD/IC-Logik 3003A-3003F lokale Thread-Dispatch- und Thread-Steuerungsoperationen für Ausführungseinheiten innerhalb eines Unterkerns durch und erleichtert die Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Unterkerns ausgeführt werden. In mindestens einer Ausführungsform können die 3D-Sampler 3005A-3005F Textur- oder andere 3D-Grafikdaten in den Speicher einlesen. In mindestens einer Ausführungsform können 3D-Sampler Texturdaten basierend auf einem konfigurierten Zustand und einem einer bestimmten Textur zugeordneten Texturformat unterschiedlich lesen. In mindestens einer Ausführungsform können die Medien-Sampler 3006A-3006F ähnliche Operationen basierend auf einem Typ und einem Format durchführen, die den Mediendaten zugeordnet sind. In mindestens einer Ausführungsform kann jeder Grafik-Sub-Core 3001A-3001 F abwechselnd einen vereinheitlichten 3D- und Medien-Sampler einschließen. In mindestens einer Ausführungsform können Threads, die auf Ausführungseinheiten in jedem der Sub-Cores 3001A-3001 F ausgeführt werden, den gemeinsamen lokalen Speicher 3008A-3008F in jedem Sub-Core nutzen, damit Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, einen gemeinsamen Pool von On-Chip-Speicher nutzen können.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte oder die gesamte Ableitungs- und/oder Trainingslogik 715 in den Grafikprozessor 3000 integriert sein. Zum Beispiel können in mindestens einer Ausführungsform die hier beschriebenen Trainings- und/oder Ableitungsmethoden eine oder mehrere der ALUs verwenden, die in einer 3D-Pipeline, einer Grafik-Mikrosteuerung 3038, einer Geometrie- und Festfunktions-Pipeline 3014 und 3036 oder einer anderen Logik in 30 enthalten sind. Darüber hinaus können in mindestens einer Ausführungsform die hier beschriebenen Ableitungs- und/oder Trainingsoperationen mit einer anderen als der in 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder in (gezeigten oder nicht gezeigten) Registern gespeichert werden, die die ALUs des Grafikprozessors 3000 so konfigurieren, dass sie einen oder mehrere der hier beschriebenen maschinellen Lernalgorithmen, neuronalen Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchführen.
In mindestens einer Ausführungsform wird mindestens eine auf 30 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der Grafikprozessorkern 3000 von 30 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind..
Wie in 31A veranschaulicht, schließt die Thread-Ausführungslogik 3100 in mindestens einer Ausführungsform einen Shader-Prozessor 3102, einen Thread-Abfertiger 3104, einen Anweisungs-Cache 3106, ein skalierbares Array von Ausführungseinheiten mit einer Vielzahl von Ausführungseinheiten 3107A-3107N und 3108A-3108N, einen Sampler 3110, einen Daten-Cache 3112 und einen Datenanschluss 3114 ein. In mindestens einer Ausführungsform kann ein skalierbares Array von Ausführungseinheiten dynamisch skaliert werden, indem eine oder mehrere Ausführungseinheiten (z. B. eine der Ausführungseinheiten 3108A-N oder 3107A-N) basierend auf den Berechnungsanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In mindestens einer Ausführungsform sind die skalierbaren Ausführungseinheiten über eine Verbindungsstruktur miteinander verbunden, die eine Verbindung zu jeder Ausführungseinheit herstellt. In mindestens einer Ausführungsform schließt die Thread-Ausführungslogik 3100 eine oder mehrere Verbindungen zum Speicher ein, z. B. zum Systemspeicher oder Cache-Speicher, und zwar über einen oder mehrere der folgenden Elemente: Befehls-Cache 3106, Datenanschluss 3114, Sampler 3110 und Ausführungseinheiten 3107 oder 3108. In mindestens einer Ausführungsform ist jede Ausführungseinheit (z. B. 3107A) eine eigenständige programmierbare Mehrzweck-Recheneinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen und dabei mehrere Datenelemente für jeden Thread parallel zu verarbeiten. In mindestens einer Ausführungsform ist das Array der Ausführungseinheiten 3107 und/oder 3108 so skalierbar, dass es eine beliebige Anzahl einzelner Ausführungseinheiten einschließt.
In mindestens einer Ausführungsform werden die Ausführungseinheiten 3107 und/oder 3108 hauptsächlich zum Ausführen von Shader-Programmen verwendet. In mindestens einer Ausführungsform kann der Shader-Prozessor 3102 verschiedene Shader-Programme verarbeiten und über einen Thread-Abfertiger 3104 den Shader-Programmen zugeordnete Ausführungs-Threads zuweisen. In mindestens einer Ausführungsform schließt der Thread-Abfertiger 3104 eine Logik ein, um Anfragen zur Einleitung von Threads von Grafik- und Medienpipelines zu vermitteln und angeforderte Threads auf einer oder mehreren Ausführungseinheiten in Ausführungseinheiten 3107 und/oder 3108 auszuführen. Zum Beispiel kann in mindestens einer Ausführungsform eine Geometrie-Pipeline Scheitelpunkte, Tesselierung oder Geometrie-Shader an die Thread-Ausführungslogik zur Verarbeitung weiterleiten. In mindestens einer Ausführungsform kann der Thread-Abfertiger 3104 auch Thread-Spawning-Anforderungen zur Laufzeit von ausgeführten Shader-Programmen verarbeiten.
In mindestens einer Ausführungsform unterstützen die Ausführungseinheiten 3107 und/oder 3108 einen Befehlssatz, der eine native Unterstützung für viele Standard- 3D-Grafik-Shader-Befehle einschließt, so dass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. In mindestens einer Ausführungsform unterstützen die Ausführungseinheiten die Scheitelpunkt- und Geometrieverarbeitung (z. B. Scheitelpunktprogramme, Geometrieprogramme und/oder Scheitelpunkt-Shader), die Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und die allgemeine Verarbeitung (z. B. Compute- und Media-Shader). In mindestens einer Ausführungsform ist jede der Ausführungseinheiten 3107 und/oder 3108, die eine oder mehrere arithmetische Logikeinheiten (ALUs) einschließen, in der Lage, SIMD (Single Instruction Multiple Data) auszuführen, und die Multi-Thread Operation ermöglicht eine effiziente Ausführungsumgebung trotz höherer Latenz bei Speicherzugriffen. In mindestens einer Ausführungsform weist jeder Hardware-Thread innerhalb jeder Ausführungseinheit eine eigene Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen Thread-Zustand auf. In mindestens einer Ausführungsform erfolgt die Ausführung in Pipelines, die Ganzzahl-, Gleitkomma- und Doppelpräzisionsoperationen, SIMD-Verzweigungsfähigkeit, logische Operationen, transzendentale Operationen und andere verschiedene Operationen ausführen können. In mindestens einer Ausführungsform bewirkt die Abhängigkeitslogik in den Ausführungseinheiten 3107 und/oder 3108, dass ein wartender Thread in den Ruhezustand versetzt wird, bis die angeforderten Daten zurückgegeben wurden, während er auf Daten aus dem Speicher oder einer der gemeinsamen Funktionen wartet. In mindestens einer Ausführungsform können, während ein wartender Thread schläft, Hardwareressourcen für die Verarbeitung anderer Threads verwendet werden. Zum Beispiel kann in mindestens einer Ausführungsform eine Ausführungseinheit während einer Verzögerung, die einer Scheitelpunkt-Shader Operation zugeordnet ist, Operationen für einen Pixel-Shader, Fragment-Shader oder eine andere Art von Shader-Programm, einschließlich eines anderen Scheitelpunkt-Shaders, ausführen.
In mindestens einer Ausführungsform führt jede Ausführungseinheit in den Ausführungseinheiten 3107 und/oder 3108 Operationen für Arrays von Datenelementen aus. In mindestens einer Ausführungsform ist eine Anzahl von Datenelementen eine „Ausführungsgröße“ oder eine Anzahl von Kanälen für eine Anweisung. In mindestens einer Ausführungsform ist ein Ausführungskanal eine logische Ausführungseinheit für den Zugriff auf Datenelemente, die Maskierung und die Flusssteuerung innerhalb von Anweisungen. In mindestens einer Ausführungsform kann die Anzahl der Kanäle unabhängig von der Anzahl der physischen arithmetischen Logikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) eines bestimmten Grafikprozessors sein. In mindestens einer Ausführungsform unterstützen die Ausführungseinheiten 3107 und/oder 3108 Ganzzahl- und Gleitkomma-Datentypen.
In mindestens einer Ausführungsform schließt ein Befehlssatz der Ausführungseinheit SIMD-Befehle ein. In mindestens einer Ausführungsform können verschiedene Datenelemente als gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit verarbeitet verschiedene Elemente basierend auf der Datengröße der Elemente. Zum Beispiel werden in mindestens einer Ausführungsform bei der Operation eines 256 Bit breiten Vektors 256 Bits eines Vektors in einem Register gespeichert und eine Ausführungseinheit führt einen Vektor als vier getrennte gepackte 64-Bit-Datenelemente (Datenelemente der Größe Quad-Word (QW)), acht getrennte gepackte 32-Bit-Datenelemente (Datenelemente der Größe Double Word (DW)), sechzehn getrennte gepackte 16-Bit-Datenelemente (Datenelemente der Größe Word (W)) oder zweiunddreißig getrennte 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)) aus. In mindestens einer Ausführungsform sind jedoch auch andere Vektorbreiten und Registergrößen möglich.
In mindestens einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 3109A-3109N kombiniert werden, die eine gemeinsame Thread-Steuerungslogik (3111A-3111N) für fusionierte EUs aufweist, wie z. B. die Ausführungseinheit 3107A, die mit der Ausführungseinheit 3108A zur fusionierten Ausführungseinheit 3109A fusioniert ist. In mindestens einer Ausführungsform können mehrere EUs zu einer EU-Gruppe fusioniert werden. In mindestens einer Ausführungsform kann jede EU in einer fusionierten EU-Gruppe so konfiguriert werden, dass sie einen separaten SIMD-Hardware-Thread ausführt, wobei die Anzahl der EUs in einer fusionierten EU-Gruppe gemäß verschiedener Ausführungsformen variieren kann. In mindestens einer Ausführungsform können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, aber nicht beschränkt auf SIMD8, SIMD16 und SIMD32. In mindestens einer Ausführungsform schließt jede fusionierte Grafikausführungseinheit 3109A-3109N mindestens zwei Ausführungseinheiten ein. Zum Beispiel schließt in mindestens einer Ausführungsform die fusionierte Ausführungseinheit 3109A eine erste EU 3107A, eine zweite EU 3108A und eine Thread-Steuerlogik 3111A ein, die der ersten EU 3107A und der zweiten EU 3108A gemeinsam ist. In mindestens einer Ausführungsform steuert die Thread-Steuerlogik 3111A Threads, die auf der fusionierten Grafikausführungseinheit 3109A ausgeführt werden, so dass jede EU innerhalb der fusionierten Ausführungseinheiten 3109A-3109N unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt werden kann.
In mindestens einer Ausführungsform sind ein oder mehrere interne Anweisungs-Caches (z. B. 3106) in die Thread-Ausführungslogik 3100 eingeschlossen, um Thread-Anweisungen für Ausführungseinheiten zwischenzuspeichern. In mindestens einer Ausführungsform sind ein oder mehrere Daten-Caches (z. B. 3112) eingeschlossen, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In mindestens einer Ausführungsform ist der Sampler 3110 eingeschlossen, um Texturproben für 3D Operationen und Medienproben für Medienoperationen bereitzustellen. In mindestens einer Ausführungsform schließt der Sampler 3110 eine spezielle Textur- oder Mediensampling-Funktionalität ein, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die gesampelten Daten einer Ausführungseinheit bereitgestellt werden.
In mindestens einer Ausführungsform senden Grafik- und Medienpipelines während der Ausführung Anforderungen zur Einleitung von Threads an die Thread-Ausführungslogik 3100 über die Thread-Spawning- und Dispatch-Logik. In mindestens einer Ausführungsform wird, sobald eine Gruppe geometrischer Aufgaben verarbeitet und in Pixeldaten gerastert wurde, die Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) im Shader-Prozessor 3102 aufgerufen, um ferner Ausgabeinformationen zu berechnen und die Ergebnisse in Ausgabeflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) zu schreiben. In mindestens einer Ausführungsform berechnet ein Pixel-Shader oder ein Fragment-Shader die Werte verschiedener Scheitelpunkt-Attribute, die über eine gerasterte Aufgabe interpoliert werden sollen. In mindestens einer Ausführungsform führt die Pixelprozessor-Logik im Shader-Prozessor 3102 dann ein über die API (Application Programming Interface) bereitgestelltes Pixel- oder Fragment-Shader-Programm aus. In mindestens einer Ausführungsform führt der Shader-Prozessor 3102 zur Ausführung eines Shader-Programms Threads über den Thread-Abfertiger 3104 an eine Ausführungseinheit (z. B. 3108A) aus. In mindestens einer Ausführungsform verwendet der Shader-Prozessor 3102 die Texturabtastlogik im Sampler 3110, um auf Texturdaten in den im Speicher abgelegten Texturkarten zuzugreifen. In mindestens einer Ausführungsform berechnen arithmetische Operationen auf Texturdaten und Eingabegeometriedaten Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von der weiteren Verarbeitung.
In mindestens einer Ausführungsform stellt der Speicheranschluss 3114 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 3100 bereit, um verarbeitete Daten zur weiteren Verarbeitung in einer Grafikprozessor-Ausgabepipeline in den Speicher auszugeben. In mindestens einer Ausführungsform schließt der Datenanschluss 3114 einen oder mehrere Cache-Speicher (z. B. den Daten-Cache 3112) ein oder ist mit diesen gekoppelt, um Daten für den Speicherzugriff über einen Datenanschluss zu cachen.
Wie in 31B veranschaulicht, kann eine Grafikausführungseinheit 3108 in mindestens einer Ausführungsform eine Anweisungsabrufeinheit 3137, ein allgemeines Registerdateiarray (GRF) 3124, ein architektonisches Registerdateiarray (ARF) 3126, einen Thread-Arbiter 3122, eine Sendeeinheit 3130, eine Verzweigungseinheit 3132, einen Satz SIMD-Gleitkommaeinheiten (FPUs) 3134 und einen Satz dedizierter ganzzahliger SIMD-ALUs 3135 einschließen. In mindestens einer Ausführungsform schließen GRF 3124 und ARF 3126 einen Satz allgemeiner Registerdateien und Architekturregisterdateien ein, die jedem gleichzeitigen Hardware-Thread zugeordnet sind, der in der Grafikausführungseinheit 3108 aktiv sein kann. In mindestens einer Ausführungsform wird der architektonische Zustand pro Thread in ARF 3126 verwaltet, während die während der Thread-Ausführung verwendeten Daten in GRF 3124 gespeichert werden. In mindestens einer Ausführungsform kann der Zustand der Ausführung jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, in Thread-spezifischen Registern im ARF 3126 gehalten werden.
In mindestens einer Ausführungsform weist die Grafikausführungseinheit 3108 eine Architektur auf, die eine Kombination aus Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. In mindestens einer Ausführungsform weist die Architektur eine modulare Konfiguration auf, die zur Designzeit basierend auf einer Target-Anzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die Logik aufgeteilt werden, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird.
In mindestens einer Ausführungsform kann die grafische Ausführungseinheit 3108 mehrere Anweisungen gemeinsam ausführen, wobei es sich um unterschiedliche Anweisungen handeln kann. In mindestens einer Ausführungsform kann der Thread Arbiter 3122 der grafischen Ausführungseinheit 3108 Anweisungen an eine der Sendeeinheiten 3130, die Verzweigungseinheit 3132 oder die SIMD FPU(s) 3134 zur Ausführung weiterleiten. In mindestens einer Ausführungsform kann jeder Ausführungsthread auf 128 Allzweckregister innerhalb des GRF 3124 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als SIMD 8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In mindestens einer Ausführungsform hat jeder Ausführungseinheitsthread Zugriff auf 4 Kilobyte innerhalb des GRF 3124, obwohl Ausführungsformen nicht so beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. In mindestens einer Ausführungsform können bis zu sieben Threads gleichzeitig ausgeführt werden, wobei die Anzahl der Threads pro Ausführungseinheit gemäß den Ausführungsformen auch variieren kann. In mindestens einer Ausführungsform, in der sieben Threads auf 4 Kilobytes zugreifen können, kann der GRF 3124 insgesamt 28 Kilobytes speichern. In mindestens einer Ausführungsform können flexible Adressierungsmodi erlauben, dass Register gemeinsam adressiert werden, um effektiv breitere Register zu bilden oder um geschichtete rechteckige Blockdatenstrukturen darzustellen.
In mindestens einer Ausführungsform werden Speicheroperationen, Sampler-Operationen und andere Systemkommunikationen mit längerer Latenzzeit über „Sende“-Befehle abgewickelt, die durch Nachrichtenübermittlung an die Sendeeinheit 3130 ausgeführt werden. In mindestens einer Ausführungsform werden Verzweigungsbefehle an die Verzweigungseinheit 3132 gesendet, um SIMD-Divergenz und eventuelle Konvergenz zu erleichtern..
In mindestens einer Ausführungsform schließt die Grafikausführungseinheit 3108 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 3134 ein, um Gleitkommaoperationen durchzuführen. In mindestens einer Ausführungsform unterstützen die FPU(s) 3134 auch das Berechnen von Ganzzahlen. In mindestens einer Ausführungsform kann (können) die FPU(s) 3134 bis zu M Anzahl von 32-Bit-Gleitkomma- (oder Ganzzahl-) Operationen SIMD ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkomma-Operationen SIMD ausführen. In mindestens einer Ausführungsform stellt mindestens eine FPU erweiterte mathematische Fähigkeiten bereit, um transzendentale mathematische Funktionen mit hohem Durchsatz und 64-Bit-Gleitkommaoperationen mit doppelter Genauigkeit zu unterstützen. In mindestens einer Ausführungsform ist auch eine Reihe von 8-Bit-Integer-SIMD-ALUs 3135 vorhanden, die speziell für das Durchführen von Operationen optimiert sein können, die maschinellen Berechnungen zuzuordnen sind.
In mindestens einer Ausführungsform können Arrays aus mehreren Instanzen der Grafikausführungseinheit 3108 in einer Grafik-Sub-Core-Gruppierung (z. B. einer Sub-Scheibe) instanziiert werden. In mindestens einer Ausführungsform kann die Ausführungseinheit 3108 Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. In mindestens einer Ausführungsform wird jeder Thread, der von der Grafikausführungseinheit 3108 ausgeführt wird, in einem anderen Kanal ausgeführt.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte oder die gesamte Ableitungs- und/oder Trainingslogik 715 in die Thread-Ausführungslogik 3100 integriert werden. Darüber hinaus können in mindestens einer Ausführungsform die hier beschriebenen Ableitungs- und/oder Trainingsoperationen mit einer anderen als der in den 7A oder 7B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die den ALU-Thread der Ausführungslogik 3100 so konfigurieren, dass er einen oder mehrere der hier beschriebenen maschinellen Lernalgorithmen, neuronalen Netzarchitekturen, Anwendungsfälle oder Trainingstechniken ausführt.
In mindestens einer Ausführungsform wird mindestens eine auf 31A und/oder 31B gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen in 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf einer oder mehreren der 1-6 beschrieben ist. In mindestens einer Ausführungsform wird die Thread-Ausführungslogik 3100 von 31A und/oder die Grafikausführungseinheit 3108 von 31B verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform sind eine oder mehrere PPUs 3200 so konfiguriert, dass sie Anwendungen für High Performance Computing („HPC“), Rechenzentren und maschinelles Lernen beschleunigen. In mindestens einer Ausführungsform ist die PPU 3200 so konfiguriert, dass sie Deep Learning-Systeme und -Anwendungen beschleunigt, einschließlich der folgenden, nicht einschränkenden Beispiele: autonome Fahrzeugplattformen, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalyse, Molekularsimulationen, Arzneimittelentdeckung, Krankheitsdiagnose, Wettervorhersage, Big Data Analytics, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung und personalisierte Benutzerempfehlungen und mehr.
In mindestens einer Ausführungsform schließt die PPU 3200 unter anderem eine Eingabe/Ausgabe-Einheit 3206, eine Front-End-Einheit 3210, eine Scheduler-Einheit 3212, eine Arbeitsverteilungseinheit 3214, einen Hub 3216, eine Crossbar („XBar“) 3220, einen oder mehrere allgemeine Verarbeitungscluster („GPCs“) 3218 und eine oder mehrere Partitionseinheiten („Speicherpartitionseinheiten“) 3222 ein. In mindestens einer Ausführungsform ist die PPU 3200 mit einem Host-Prozessor oder anderen PPUs 3200 über eine oder mehrere Hochgeschwindigkeits-GPU-Verbindungen („GPU-Verbindungen“) 3208 verbunden. In mindestens einer Ausführungsform ist die PPU 3200 mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über einen Systembus 3202 verbunden. In mindestens einer Ausführungsform ist die PPU 3200 mit einem lokalen Speicher verbunden, der eine oder mehrere Speichervorrichtungen („Speicher“) 3204 umfasst. In mindestens einer Ausführungsform schließen die Speichervorrichtungen 3204 ohne Einschränkung eine oder mehrere dynamische Direktzugriffsspeicher („DRAM“) -Vorrichtungen ein. In mindestens einer Ausführungsform sind eine oder mehrere DRAM-Vorrichtungen als High-Bandwidth Memory („HBM“)-Subsysteme konfiguriert und/oder konfigurierbar, wobei in jeder Vorrichtung mehrere DRAM-Dies gestapelt sind.
In mindestens einer Ausführungsform kann sich die Hochgeschwindigkeits-GPU-Verbindung 3208 auf eine drahtbasierte Multi-Lane-Kommunikationsverbindung beziehen, die von Systemen verwendet wird, die skalierbar sind und eine oder mehrere PPUs 3200 mit einer oder mehreren zentralen Verarbeitungseinheiten („CPUs“) kombiniert einschließen, die Cache-Kohärenz zwischen den PPUs 3200 und den CPUs sowie das CPU-Mastering unterstützen. In mindestens einer Ausführungsform werden Daten und/oder Befehle von der Hochgeschwindigkeits-GPU-Verbindung 3208 über den Hub 3216 zu/von anderen Einheiten der PPU 3200 übertragen, wie z. B. einer oder mehreren Kopierengines, Video-Encodern, Video-Decodern, Energieverwaltungseinheiten und anderen Einheiten, die in 32 möglicherweise nicht explizit veranschaulicht sind.
In mindestens einer Ausführungsform ist die E/A-Einheit 3206 so konfiguriert, dass sie Kommunikationen (z. B. Befehle, Daten) von einem Host-Prozessor (in 32 nicht dargestellt) über den Systembus 3202 überträgt und empfängt. In mindestens einer Ausführungsform kommuniziert die E/A-Einheit 3206 mit dem Host-Prozessor direkt über den Systembus 3202 oder über eine oder mehrere zwischengeschaltete Vorrichtungen, wie z. B. eine Speicherbrücke. In mindestens einer Ausführungsform kann die E/A-Einheit 3206 über den Systembus 3202 mit einem oder mehreren anderen Prozessoren, wie einer oder mehreren PPUs 3200, kommunizieren. In mindestens einer Ausführungsform implementiert die E/A-Einheit 3206 eine Peripheral Component Interconnect Express („PCle“) Schnittstelle für die Kommunikation über einen PCIe-Bus. In mindestens einer Ausführungsform implementiert die E/A-Einheit 3206 Schnittstellen für die Kommunikation mit externen Vorrichtungen.
In mindestens einer Ausführungsform dekodiert die E/A-Einheit 3206 Pakete, die über den Systembus 3202 empfangen werden. In mindestens einer Ausführungsform stellen mindestens einige Pakete Befehle dar, die so konfiguriert sind, dass sie die PPU 3200 veranlassen, verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform überträgt die E/A-Einheit 3206 dekodierte Befehle an verschiedene andere Einheiten der PPU 3200, wie von den Befehlen vorgegeben. In mindestens einer Ausführungsform werden die Befehle an die Front-End-Einheit 3210 und/oder an den Hub 3216 oder andere Einheiten der PPU 3200 übertragen, wie z. B. eine oder mehrere Kopierengines, einen Video-Encoder, einen Video-Decoder, eine Energieverwaltungseinheit usw. (in 32 nicht explizit veranschaulicht). In mindestens einer Ausführungsform ist die E/A-Einheit 3206 so konfiguriert, dass sie die Kommunikation zwischen und unter verschiedenen logischen Einheiten der PPU 3200 leitet..
In mindestens einer Ausführungsform kodiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 3200 Workloads zur Verarbeitung bereitstellt. In mindestens einer Ausführungsform umfasst eine Arbeitslast Anweisungen und Daten, die von diesen Anweisungen verarbeitet werden sollen. In mindestens einer Ausführungsform ist ein Puffer eine Region in einem Speicher, auf die sowohl ein Host-Prozessor als auch die PPU 3200 zugreifen können (z. B. lesen/schreiben). Eine Host-Schnittstelleneinheit kann so konfiguriert sein, dass sie über Speicheranforderungen, die von der E/A-Einheit 3206 über den Systembus 3202 übertragen werden, auf diesen Puffer in einem mit dem Systembus 3202 verbundenen Systemspeicher zugreift. In mindestens einer Ausführungsform schreibt ein Host-Prozessor einen Befehlsstrom in einen Puffer und überträgt dann einen Zeiger auf den Beginn eines Befehlsstroms an die PPU 3200, so dass die Front-End-Einheit 3210 Zeiger auf einen oder mehrere Befehlsströme empfängt und einen oder mehrere Befehlsströme verwaltet, indem sie Befehle aus den Befehlsströmen liest und Befehle an verschiedene Einheiten der PPU 3200 weiterleitet.
In mindestens einer Ausführungsform ist die Front-End-Einheit 3210 mit der Scheduler-Einheit 3212 gekoppelt, die verschiedene GPCs 3218 für die Verarbeitung von Aufgaben konfiguriert, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einer Ausführungsform ist die Scheduler-Einheit 3212 so konfiguriert, dass sie Zustandsinformationen in Bezug auf verschiedene, von der Scheduler-Einheit 3212 verwaltete Aufgaben verfolgt, wobei die Zustandsinformationen angeben können, welchem der GPCs 3218 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, welcher Prioritätsgrad der Aufgabe zugeordnet ist und so weiter. In mindestens einer Ausführungsform verwaltet die Scheduler-Einheit 3212 die Ausführung einer Vielzahl von Aufgaben auf einem oder mehreren der GPCs 3218.
In mindestens einer Ausführungsform ist die Scheduler-Einheit 3212 mit der Arbeitsverteilungseinheit 3214 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 3218 verteilt. In mindestens einer Ausführungsform verfolgt die Arbeitsverteilungseinheit 3214 eine Anzahl von geplanten Aufgaben, die von der Scheduler-Einheit 3212 empfangen wurden, und die Arbeitsverteilungseinheit 3214 verwaltet einen Pool ausstehender Aufgaben und einen Pool aktiver Aufgaben für jeden der GPCs 3218. In mindestens einer Ausführungsform umfasst der Pending Task Pool eine Anzahl von Steckplätzen (z. B. 32 Steckplätze), die Aufgaben enthalten, die einem bestimmten GPC 3218 zur Verarbeitung zugewiesen sind; ein Active Task Pool kann eine Anzahl von Steckplätzen (z. B, 4 Steckplätze) für Aufgaben, die aktiv von den GPCs 3218 verarbeitet werden, so dass, wenn einer der GPCs 3218 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem aktiven Aufgabenpool für den GPC 3218 entfernt wird und eine andere Aufgabe aus einem anhängigen Aufgabenpool ausgewählt und zur Ausführung auf dem GPC 3218 eingeplant wird. In mindestens einer weiteren Ausführungsform wird, wenn eine aktive Aufgabe auf dem GPC 3218 im Leerlauf ist, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, diese aktive Aufgabe aus dem GPC 3218 verdrängt und in den Pending Task Pool zurückgeführt, während eine andere Aufgabe in diesem Pending Task Pool ausgewählt und für die Ausführung auf dem GPC 3218 eingeplant wird.
In mindestens einer Ausführungsform kommuniziert die Arbeitsverteilungseinheit 3214 mit einem oder mehreren GPCs 3218 über die XBar 3220. In mindestens einer Ausführungsform ist die XBar 3220 ein Netz, das viele Einheiten der PPU 3200 mit anderen Einheiten der PPU 3200 verbindet und so konfiguriert werden kann, dass es die Arbeitsverteilungseinheit 3214 mit einem bestimmten GPC 3218 verbindet. In mindestens einer Ausführungsform können auch eine oder mehrere andere Einheiten der PPU 3200 über den Hub 3216 mit der XBar 3220 verbunden sein.
In mindestens einer Ausführungsform werden die Aufgaben von der Scheduler-Einheit 3212 verwaltet und von der Arbeitsverteilungseinheit 3214 an einen der GPCs 3218 weitergeleitet. In mindestens einer Ausführungsform ist der GPC 3218 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 3218 verbraucht, über die XBar 3220 an einen anderen GPC 3218 weitergeleitet oder im Speicher 3204 gespeichert werden. In mindestens einer Ausführungsform können die Ergebnisse über Partitionseinheiten 3222 in den Speicher 3204 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 3204 implementieren. In mindestens einer weiteren Ausführungsform können die Ergebnisse über eine Hochgeschwindigkeits-GPU-Verbindung 3208 an eine andere PPU oder CPU übertragen werden. In mindestens einer Ausführungsform schließt die PPU 3200 ohne Einschränkung eine Anzahl U von Partitionseinheiten 3222 ein, die einer Anzahl von getrennten und unterschiedlichen Speichervorrichtungen 3204 entspricht, die mit der PPU 3200 verbunden sind, wie hier in Verbindung mit 34 näher beschrieben.
In mindestens einer Ausführungsform führt ein Hostprozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle („API“) implementiert, die es einer oder mehreren Anwendungen, die auf einem Hostprozessor ausgeführt werden, ermöglicht, Operationen zur Ausführung auf der PPU 3200 einzuplanen. In mindestens einer Ausführungsform werden mehrere Anwendungen gleichzeitig von der PPU 3200 ausgeführt und die PPU 3200 stellt Isolierung, Dienstgüte („QoS“) und unabhängige Adressräume für mehrere Anwendungen bereit. In mindestens einer Ausführungsform erzeugt eine Anwendung Anweisungen (z. B. in Form von API-Aufrufen), die einen Treiberkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch PPU 3200 zu erzeugen, und dieser Treiberkern gibt Aufgaben an einen oder mehrere Streams aus, die von PPU 3200 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 zum Durchführen von Aufgaben einschließen und die Daten über einen gemeinsamen Speicher austauschen. In mindestens einer Ausführungsform werden Threads und kooperierende Threads in Verbindung mit 34 ausführlicher beschrieben.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform wird der Deep Learning-Anwendungsprozessor verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netz, zu trainieren, um der PPU 3200 bereitgestellte Informationen vorherzusagen oder abzuleiten. In mindestens einer Ausführungsform wird der Deep Learning-Anwendungsprozessor verwendet, um basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netz), das von einem anderen Prozessor oder System oder von der PPU 3200 trainiert wurde, Informationen abzuleiten oder vorherzusagen. In mindestens einer Ausführungsform kann die PPU 3200 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 32 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird die parallele Verarbeitungseinheit 3200 von 32 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform wird die Operation des GPC 3300 durch die Pipeline-Verwaltung 3302 gesteuert. In mindestens einer Ausführungsform verwaltet der Pipeline-Manager 3302 die Konfiguration eines oder mehrerer DPCs 3306 zur Verarbeitung der dem GPC 3300 zugewiesenen Aufgaben. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 3302 mindestens einen von einem oder mehreren DPCs 3306, um mindestens einen Abschnitt einer Grafik-Rendering-Pipeline zu implementieren. In mindestens einer Ausführungsform ist DPC 3306 so konfiguriert, dass er ein Scheitelpunkt-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor („SM“) 3314 ausführt. In mindestens einer Ausführungsform ist der Pipeline-Manager 3302 so konfiguriert, dass er die von einer Arbeitsverteilungseinheit empfangenen Pakete an die entsprechenden logischen Einheiten innerhalb des GPC 3300 weiterleitet. Einige Pakete können an Hardwareeinheiten mit fester Funktion im preROP 3304 und/oder der Raster Engine 3308 weitergeleitet werden, während andere Pakete an die DPCs 3306 zur Verarbeitung durch eine Primitive Engine 3312 oder SM 3314 weitergeleitet werden können. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 3302 mindestens einen der DPCs 3306 für die Implementierung eines neuronalen Netzmodells und/oder einer Rechen-Pipeline.
In mindestens einer Ausführungsform ist die preROP-Einheit 3304 so konfiguriert, dass sie die von der Raster Engine 3308 und den DPCs 3306 erzeugten Daten an eine Raster Operations („ROP“)-Einheit in der Partitionseinheit 3222 weiterleitet, die oben in Verbindung mit 32 näher beschrieben ist. In mindestens einer Ausführungsform ist die preROP-Einheit 3304 so konfiguriert, dass sie Optimierungen für die Farbmischung durchführt, Pixeldaten organisiert, Adressübersetzungen durchführt und vieles mehr. In mindestens einer Ausführungsform schließt die Raster Engine 3308 ohne Einschränkung eine Reihe von Hardware-Einheiten mit fester Funktion ein, die so konfiguriert sind, dass sie verschiedene Rasteroperationen durchführen, und die Raster Engine 3308 schließt ohne Einschränkung eine Setup-Engine, eine Grobrasterengine, eine Culling-Engine, eine Clippingengine, eine Feinrasterengine, eine Tile Coalescing-Engine und jede geeignete Kombination davon ein. In mindestens einer Ausführungsform empfängt die Setup Engine transformierte Scheitelpunkte und erzeugt Ebenengleichungen, die einer durch Scheitelpunkte definierten geometrischen Primitive zugeordnet sind; die Ebenengleichungen werden an eine Grobraster Engine übertragen, um Abdeckungsinformationen (z. B. eine x-, y-Abdeckungsmaske für eine Kachel) für die Primitive zu erzeugen; die Ausgabe einer Grobraster Engine wird an eine Culling Engine übertragen, in der Fragmente, die einer Primitive zugeordnet sind und einen z-Test nicht bestehen, aussortiert werden, und an eine Clipping Engine übertragen, in der Fragmente, die außerhalb eines Sichtkegelstumpfes liegen, abgeschnitten werden. In mindestens einer Ausführungsform werden die Fragmente, die das Clipping und die Auslese überstehen, an eine Feinrasterengine weitergeleitet, um Attribute für Pixelfragmente basierend auf Ebenengleichungen zu erzeugen, die von einer Setup Engine erzeugt werden. In mindestens einer Ausführungsform umfasst die Ausgabe der Raster Engine 3308 Fragmente, die von einer geeigneten Instanz verarbeitet werden, z. B. von einem Fragment Shader, der in DPC 3306 implementiert ist.
In mindestens einer Ausführungsform umfasst jeder DPC 3306, der in GPC 3300 eingeschlossen ist, ohne Einschränkung einen M-Pipe Controller („MPC“) 3310; eine primitive Engine 3312; einen oder mehrere SMs 3314; und jede geeignete Kombination davon. In mindestens einer Ausführungsform steuert der MPC 3310 die Operation des DPC 3306, indem er die vom Pipeline Manager 3302 empfangenen Pakete an die entsprechenden Einheiten im DPC 3306 weiterleitet. In mindestens einer Ausführungsform werden Pakete, die einem Scheitelpunkt zugeordnet sind, an die Primitive Engine 3312 weitergeleitet, die so konfiguriert ist, dass sie Scheitelpunktattribute, die einem Scheitelpunkt zugeordnet sind, aus dem Speicher abruft; im Gegensatz dazu können Pakete, die einem Shader-Programm zugeordnet sind, an SM 3314 übertragen werden.
In mindestens einer Ausführungsform umfasst SM 3314 ohne Einschränkung einen programmierbaren Streaming-Prozessor, der so konfiguriert ist, dass er Aufgaben verarbeitet, die durch eine Anzahl von Threads repräsentiert werden. In mindestens einer Ausführungsform ist SM 3314 multithreading-fähig und so konfiguriert, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführt und eine Single-Instruction, Multiple-Data („SIMD“)-Architektur implementiert, bei der jeder Thread in einer Gruppe von Threads (z. B. ein Warp) so konfiguriert ist, dass er einen unterschiedlichen Satz von Daten basierend auf demselben Satz von Anweisungen verarbeitet. In mindestens einer Ausführungsform führen alle Threads in einer Gruppe von Threads einen gemeinsamen Satz von Anweisungen aus. In mindestens einer Ausführungsform implementiert SM 3314 eine Single-Instruction, Multiple Thread („SIMT“)-Architektur, bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er basierend auf diesem gemeinsamen Satz von Anweisungen einen unterschiedlichen Satz von Daten verarbeitet, wobei jedoch einzelne Threads in einer Gruppe von Threads während der Ausführung divergieren dürfen. In mindestens einer Ausführungsform werden für jeden Warp ein Programmzähler, ein Aufrufstapel und der Zustand der Ausführung beibehalten, was die Gleichzeitigkeit zwischen Warps und die serielle Ausführung innerhalb von Warps ermöglicht, wenn die Threads innerhalb eines Warps divergieren. In einer weiteren Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden einzelnen Thread verwaltet, so dass die Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht wird. In mindestens einer Ausführungsform wird der Zustand der Ausführung für jeden einzelnen Thread beibehalten und Threads, die gemeinsame Anweisungen ausführen, können zur besseren Effizienz zusammengeführt und parallel ausgeführt werden. Mindestens eine Ausführungsform von SM 3314 wird hier näher beschrieben.
In mindestens einer Ausführungsform stellt die MMU 3318 eine Schnittstelle zwischen dem GPC 3300 und einer Speicherpartitionierungseinheit (z. B. der Partitionierungseinheit 3222 in 32 ) bereit, und die MMU 3318 sorgt für die Übersetzung virtueller Adressen in physische Adressen, den Speicherschutz und die Arbitrierung von Speicheranforderungen. In mindestens einer Ausführungsform stellt die MMU 3318 einen oder mehrere Translation-Lookaside-Buffer („TLBs“) bereit, um die Übersetzung von virtuellen Adressen in physische Adressen im Speicher durchzuführen.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform wird ein Deep Learning-Anwendungsprozessor verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netz, zu trainieren, um dem GPC 3300 bereitgestellte Informationen vorherzusagen oder abzuleiten. In mindestens einer Ausführungsform wird GPC 3300 verwendet, um Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netz), das von einem anderen Prozessor oder System oder von GPC 3300 trainiert wurde, abzuleiten oder vorherzusagen. In mindestens einer Ausführungsform kann GPC 3300 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 33 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird der allgemeine Verarbeitungscluster 3300 von 33 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
In mindestens einer Ausführungsform implementiert die Speicherschnittstelle 3406 eine Speicherschnittstelle für Speicher mit hoher Bandbreite der zweiten Generation („HBM2“) und Y entspricht der Hälfte von U. In mindestens einer Ausführungsform befinden sich HBM2-Speicherstapel auf einem physischen Gehäuse mit einer PPU, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen erhebliche Energie- und Flächeneinsparungen bereitstellt. In mindestens einer Ausführungsform schließt jeder HBM2-Stapel ohne Einschränkung vier Speicherchips mit Y=4 ein, wobei jeder HBM2-Stapel zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit schließt. In mindestens einer Ausführungsform hält dieser Speicher den Single-Error Correcting Double-Error Detecting („SECDED“) Error Correction Code („ECC“) zum Schutz der Daten. In mindestens einer Ausführungsform kann ECC eine höhere Zuverlässigkeit für berechnende Anwendungen bereitstellen, die empfindlich auf Datenkorruption reagieren.
In mindestens einer Ausführungsform implementiert die PPU eine mehrstufige Speicherhierarchie. In mindestens einer Ausführungsform unterstützt die Speicherpartitionierungseinheit 3400 einen einheitlichen Speicher, um einen einzigen einheitlichen virtuellen Adressraum für die zentrale Verarbeitungseinheit („CPU“) und den PPU-Speicher bereitzustellen und die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen zu ermöglichen. In mindestens einer Ausführungsform wird die Häufigkeit von Zugriffen einer PPU auf einen Speicher, der sich auf anderen Prozessoren befindet, verfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der PPU verschoben werden, die häufiger auf Seiten zugreift. In mindestens einer Ausführungsform hält die Hochgeschwindigkeits-GPU-Verbindung 3208 Adressübersetzungsdienste bereit, die es der PPU ermöglichen, direkt auf die Seitentabellen der CPU zuzugreifen und den vollen Zugriff auf den CPU-Speicher durch eine PPU bereitzustellen.
In mindestens einer Ausführungsform übertragen Copy Engines Daten zwischen mehreren PPUs oder zwischen PPUs und CPUs. In mindestens einer Ausführungsform können Kopierengines Seitenfehler für Adressen erzeugen, die nicht in Seitentabellen abgebildet sind, und die Speicherpartitionierungseinheit 3400 bearbeitet dann die Seitenfehler, indem sie die Adressen in die Seitentabelle abbildet, woraufhin die Kopierengine eine Übertragung durchführt. In mindestens einer Ausführungsform ist der Speicher für mehrere Operationen der Copy Engine zwischen mehreren Prozessoren gepinnt (d. h. nicht auslagerbar), was den verfügbaren Speicher erheblich reduziert. In mindestens einer Ausführungsform können mit Hardware Page Faulting Adressen an Copy Engines weitergegeben werden, ohne Rücksicht darauf, ob Speicherseiten resident sind, und ein Kopiervorgang ist transparent.
Gemäß mindestens einer Ausführungsform werden Daten aus dem Speicher 3204 von 32 oder einem anderen Systemspeicher von der Speicherpartitionseinheit 3400 abgerufen und im L2-Cache 3404 gespeichert, der sich auf dem Chip befindet und von verschiedenen GPCs gemeinsam genutzt wird. In mindestens einer Ausführungsform schließt jede Speicherpartitionseinheit 3400 ohne Einschränkung mindestens einen Abschnitt des L2-Cache ein, der einer entsprechenden Speichervorrichtung zugeordnet ist. In mindestens einer Ausführungsform sind Caches niedrigeren Grades in verschiedenen Einheiten innerhalb der GPCs implementiert. In mindestens einer Ausführungsform kann jeder der SMs 3314 in 33 einen Cache des Grades 1 („L1“) implementieren, wobei dieser L1-Cache ein privater Speicher ist, der einem bestimmten SM 3314 zugeordnet ist, und Daten aus dem L2-Cache 3404 abgerufen und in jedem L1-Cache zur Verarbeitung in funktionalen Einheiten der SMs 3314 gespeichert werden. In mindestens einer Ausführungsform ist der L2-Cache 3404 mit der Speicherschnittstelle 3406 und der in 32 gezeigten XBar 3220 verbunden.
Die ROP-Einheit 3402 führt in mindestens einer Ausführungsform grafische Rasteroperationen durch, die sich auf die Pixelfarbe beziehen, wie z. B. Farbkompression, Pixel-Blending und mehr. In mindestens einer Ausführungsform führt die ROP-Einheit 3402 in Verbindung mit der Raster Engine 3308 eine Tiefenprüfung durch, wobei sie eine Tiefe für eine einem Pixelfragment zugeordnete Position von einer Culling Engine der Raster Engine 3308 empfängt. In mindestens einer Ausführungsform wird die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine einem Fragment zugeordnete Position der Probe getestet. In mindestens einer Ausführungsform aktualisiert die ROP-Einheit 3402 den Tiefenpuffer und überträgt das Ergebnis der Tiefenprüfung an die Raster Engine 3308, wenn das Fragment die Tiefenprüfung für diese Position besteht. Es wird beachtet, dass die Anzahl der Partitionierungseinheiten 3400 sich von der Anzahl der GPCs unterscheiden kann und daher kann jede ROP-Einheit 3402 in mindestens einer Ausführungsform mit jedem GPC gekoppelt sein. In mindestens einer Ausführungsform verfolgt die ROP-Einheit 3402 die von verschiedenen GPCs empfangenen Pakete und bestimmt, ob ein von der ROP-Einheit 3402 erzeugtes Ergebnis über die XBar 3220 weitergeleitet werden soll.
In mindestens einer Ausführungsform verteilt eine Arbeitsverteilungseinheit Aufgaben zur Ausführung auf allgemeinen Verarbeitungsclustern („GPCs“) von parallelen Verarbeitungseinheiten („PPUs“), und jede Aufgabe wird einem bestimmten Datenverarbeitungscluster („DPC“) innerhalb eines GPCs zugewiesen, und wenn eine Aufgabe einem Shader-Programm zugeordnet ist, wird diese Aufgabe einem der SMs 3500 zugewiesen. In mindestens einer Ausführungsform empfängt die Scheduler-Einheit 3504 Aufgaben von einer Arbeitsverteilungseinheit und verwaltet die Befehlsplanung für einen oder mehrere Thread-Blöcke, die einem SM 3500 zugewiesen sind. In mindestens einer Ausführungsform plant die Scheduler-Einheit 3504 Thread-Blöcke zur Ausführung als Warps von parallelen Threads ein, wobei jedem Thread-Block mindestens ein Warp zugewiesen wird. In mindestens einer Ausführungsform führt jeder Warp Threads aus. In mindestens einer Ausführungsform verwaltet die Scheduler-Einheit 3504 eine Vielzahl verschiedener Thread-Blöcke, indem sie den verschiedenen Thread-Blöcken Warps zuweist und dann während jedes Taktzyklus Anweisungen aus einer Vielzahl verschiedener kooperativer Gruppen an verschiedene Funktionseinheiten (z. B. Verarbeitungskerne 3510, SFUs 3512 und LSUs 3514) verteilt.
In mindestens einer Ausführungsform können sich kooperative Gruppen auf ein Programmiermodell für die Organisation von Gruppen kommunizierender Threads beziehen, das es den Entwicklern erlaubt, die Granularität auszudrücken, mit der Threads kommunizieren, und so eine reichhaltigere, effizientere parallele Dekomposition zu ermöglichen. In mindestens einer Ausführungsform unterstützen kooperative Start-APIs die Synchronisierung zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. In mindestens einer Ausführungsform stellen Anwendungen herkömmlicher Programmiermodelle ein einziges, einfaches Konstrukt für die Synchronisierung kooperierender Threads bereit: eine Barriere über alle Threads eines Threadblocks (z. B. die Funktion syncthreads( )). In mindestens einer Ausführungsform können Programmierer jedoch Gruppen von Threads mit einer geringeren Granularität als der des Thread-Blocks definieren und innerhalb der definierten Gruppen synchronisieren, um eine höhere Leistung, Design-Flexibilität und Software-Wiederverwendung in Form von gemeinsamen gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einer Ausführungsform ermöglicht es Cooperative Groups Programmierern, Gruppen von Threads explizit auf Sub-Block- (d. h. so klein wie ein einzelner Thread) und Multi-Block-Granularität zu definieren und kollektive Operationen wie die Synchronisierung auf Threads in einer kooperativen Gruppe durchzuführen. In mindestens einer Ausführungsform hält dieses Programmiermodell eine fehlerfreie Zusammensetzung über Softwaregrenzen hinweg, so dass Bibliotheken und Dienstprogramme innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen über die Konvergenz aufweisen zu müssen. In mindestens einer Ausführungsform ermöglichen die Primitive für kooperative Gruppen neue Muster kooperativer Parallelität, einschließlich, ohne Einschränkung, Producer-Consumer-Parallelität, opportunistischer Parallelität und globaler Synchronisierung über ein ganzes Gitter von Thread-Blöcken..
In mindestens einer Ausführungsform ist eine Versandeinheit 3506 so konfiguriert, dass sie Befehle an eine oder mehrere funktionale Einheiten und die Scheduler-Einheit 3504 überträgt, und schließt ohne Einschränkung zwei Versandeinheiten 3506 ein, die es ermöglichen, dass zwei verschiedene Befehle aus einem gemeinsamen Warp während jedes Taktzyklus versandt werden. In mindestens einer Ausführungsform schließt jede Scheduler-Einheit 3504 eine einzelne Versandeinheit 3506 oder zusätzliche Versandeinheiten 3506 ein.
In mindestens einer Ausführungsform schließt jeder SM 3500 ohne Einschränkung eine Registerdatei 3508 ein, die einen Satz von Registern für funktionale Einheiten des SM 3500 bereitstellt. In mindestens einer Ausführungsform ist die Registerdatei 3508 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein eigener Abschnitt der Registerdatei 3508 zugewiesen ist. In mindestens einer Ausführungsform ist die Registerdatei 3508 auf verschiedene Warps aufgeteilt, die von SM 3500 ausgeführt werden, und die Registerdatei 3508 stellt eine temporäre Speicherung für Operanden bereit, die mit Datenpfaden von Funktionseinheiten verbunden sind. In mindestens einer Ausführungsform umfasst jedes SM 3500 ohne Einschränkung eine Vielzahl von L Verarbeitungskernen 3510, wobei L eine positive ganze Zahl ist. In mindestens einer Ausführungsform schließt SM 3500 ohne Einschränkung eine große Anzahl (z. B. 128 oder mehr) verschiedener Verarbeitungskerne 3510 ein. In mindestens einer Ausführungsform schließt jeder Verarbeitungskern 3510 ohne Einschränkung eine Vollpipeline-, Einzelpräzisions-, Doppelpräzisions- und/oder gemischte Präzisionsverarbeitungseinheit ein, die ohne Einschränkung eine arithmetische Gleitkomma-Logikeinheit und eine arithmetische Ganzzahl-Logikeinheit schließt. In mindestens einer Ausführungsform implementieren die arithmetischen Logikeinheiten für Gleitkommaberechnungen den IEEE 754-2008 Standard für Gleitkommaberechnungen. In mindestens einer Ausführungsform schließen die verarbeitenden Kerne 3510 ohne Einschränkung 64 Gleitkomma-Kerne mit einfacher Genauigkeit (32 Bit), 64 Ganzzahl-Kerne, 32 Gleitkomma-Kerne mit doppelter Genauigkeit (64 Bit) und 8 Tensor-Kerne ein.
Tensorkerne sind so konfiguriert, dass sie gemäß mindestens einer Ausführungsform Matrixoperationen durchführen können. In mindestens einer Ausführungsform sind ein oder mehrere Tensorkerne in die Verarbeitungskerne 3510 eingeschlossen. In mindestens einer Ausführungsform sind die Tensorkerne so konfiguriert, dass sie Deep Learning-Matrixarithmetik durchführen, wie z. B. Faltungsoperationen für das Training und die Ableitung neuronaler Netze. In mindestens einer Ausführungsform arbeitet jeder Tensorkern mit einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation durch, D = A X B + C, wobei A, B, C und D 4x4-Matrizen sind.
In mindestens einer Ausführungsform sind die Eingaben für die Matrixmultiplikation A und B 16-Bit-Gleitkommamatrizen und die Akkumulationsmatrizen C und D sind 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen. In mindestens einer Ausführungsform arbeiten Tensorkerne mit 16-Bit-Gleitkomma-Eingabedaten mit 32-Bit-Gleitkomma-Akkumulation. In mindestens einer Ausführungsform verwendet die 16-Bit-Gleitkommamultiplikation 64 Operationen und führt zu einem Produkt mit voller Genauigkeit, das dann mit einer 32-Bit-Gleitkommaaddition mit anderen Zwischenprodukten zu einer 4x4x4-Matrixmultiplikation akkumuliert wird. In mindestens einer Ausführungsform werden Tensor-Cores 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 9 C++ API, spezialisierte Operationen zum Laden, Multiplizieren und Akkumulieren von Matrizen und zum Speichern von Matrizen zur Verfügung, um Tensorkerne in einem CUDA-C++ Programm effizient zu nutzen. In mindestens einer Ausführungsform auf CUDA-Grad geht eine Schnittstelle auf Warp-Ebene von Matrizen der Größe 16x16 aus, die sich über alle 32 Threads des Warp erstrecken.
In mindestens einer Ausführungsform umfasst jeder SM 3500 ohne Einschränkung M SFUs 3512, die spezielle Funktionen durchführen (z. B. Attributbewertung, reziproke Quadratwurzel und ähnliches). In mindestens einer Ausführungsform schließen die SFUs 3512 ohne Einschränkung eine Tree Traversal Unit ein, die so konfiguriert ist, dass sie eine hierarchische Baumdatenstruktur durchläuft. In mindestens einer Ausführungsform schließen die SFUs 3512 ohne Einschränkung eine Textureinheit ein, die so konfiguriert ist, dass sie Operationen zur Filterung der Texturkarte durchführt. In mindestens einer Ausführungsform sind die Textureinheiten so konfiguriert, dass sie Texturkarten (z. B. ein 2D Array von Texeln) aus dem Speicher laden und Texturkarten abbilden, um abgetastete Texturwerte für die Verwendung in von SM 3500 ausgeführten Shader-Programmen zu erzeugen. In mindestens einer Ausführungsform werden die Texturkarten im gemeinsamen Speicher/L1-Cache 3518 abgelegt. In mindestens einer Ausführungsform implementieren Textureinheiten Texturoperationen wie z. B. Filteroperationen unter Verwendung von Mip-Maps (z. B. Texturkarten mit unterschiedlichem Detailgrad), gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform schließt jedes SM 3500 ohne Einschränkung zwei Textureinheiten ein.
Jeder SM 3500 umfasst, ohne Einschränkung, N LSUs 3514, die in mindestens einer Ausführungsform Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher/L1-Cache 3518 und der Registerdatei 3508 durchführen. Das Netz 3516 verbindet in mindestens einer Ausführungsform jede funktionale Einheit mit der Registerdatei 3508 und die LSU 3514 mit der Registerdatei 3508 und dem gemeinsamen Speicher/L1-Cache 3518. In mindestens einer Ausführungsform ist das Netz 3516 eine Crossbar, die so konfiguriert werden kann, dass sie beliebige Funktionseinheiten mit beliebigen Registern in der Registerdatei 3508 verbindet und LSUs 3514 mit der Registerdatei 3508 und Speicherpositionen im gemeinsamen Speicher/L1-Cache 3518 verbindet.
In mindestens einer Ausführungsform ist der gemeinsam genutzte Speicher/L1-Cache 3518 ein Array von On-Chip-Speicher, der die Speicherung von Daten und die Kommunikation zwischen SM 3500 und der primitiven Engine sowie zwischen Threads in SM 3500 ermöglicht. In mindestens einer Ausführungsform umfasst der gemeinsame Speicher/L1-Cache 3518 ohne Einschränkung 128 KB Speicherkapazität und befindet sich in einem Pfad von SM 3500 zu einer Partitionseinheit. In mindestens einer Ausführungsform wird der gemeinsame Speicher/L1-Cache 3518 zum Zwischenspeichern von Lese- und Schreibvorgängen verwendet. In mindestens einer Ausführungsform sind einer oder mehrere der Komponenten Shared Memory/L1 Cache 3518, L2 Cache und Arbeitsspeicher Backing Stores.
Die Kombination von Datencache und gemeinsamem Speicher in einem einzigen Speicherblock stellt in mindestens einer Ausführungsform 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 nutzen, als Cache genutzt oder ist für diese nutzbar, z. B. wenn der gemeinsam genutzte Speicher so konfiguriert ist, dass er die Hälfte einer Kapazität nutzt, und Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen können. Durch die Integration in den gemeinsam genutzten Speicher/L1-Cache 3518 kann der gemeinsam genutzte Speicher/L1-Cache 3518 gemäß mindestens einer Ausführungsform als durchsatzstarke Leitung für Streaming-Daten funktionieren und gleichzeitig einen Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenz bereitstellen. In mindestens einer Ausführungsform kann bei der Konfiguration für paralleles Berechnen für allgemeine Zwecke eine einfachere Konfiguration als bei der Grafikverarbeitung verwendet werden. In mindestens einer Ausführungsform werden Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In mindestens einer Ausführungsform weist eine Arbeitsverteilungseinheit in einer Konfiguration für parallele Berechnungen Blöcke von Threads direkt den DPCs zu und verteilt sie. In mindestens einer Ausführungsform führen Threads in einem Block ein gemeinsames Programm aus, wobei eine eindeutige Thread-ID bei der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt. Dabei wird SM 3500 verwendet, um das Programm auszuführen und Berechnungen durchzuführen, gemeinsamer Speicher/L1-Cache 3518, um zwischen den Threads zu kommunizieren, und LSU 3514, um den globalen Speicher über den gemeinsamen Speicher/L1-Cache 3518 und die Speicherpartitionseinheit zu lesen und zu schreiben. In mindestens einer Ausführungsform, wenn sie für allgemeines paralleles Berechnen konfiguriert ist, schreibt SM 3500 Befehle, die die Scheduler-Einheit 3504 verwenden kann, um neue Arbeit auf DPCs zu starten.
In mindestens einer Ausführungsform ist eine PPU in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einem drahtlosen, handgehaltenen Gerät), einem persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, einem Fahrzeug, einem am Kopf befestigten Display, einer handgehaltenen elektronischen Vorrichtung und mehr eingeschlossen oder mit diesen gekoppelt. In mindestens einer Ausführungsform ist ein PPU auf einem einzigen Halbleitersubstrat untergebracht. In mindestens einer Ausführungsform ist eine PPU in ein System-on-a-Chip („SoC“) eingeschlossen, zusammen mit einer oder mehreren anderen Vorrichtungen wie zusätzlichen PPUs, Speicher, einem Rechner mit reduziertem Befehlssatz (reduced instruction set computer, „RISC“), einer Speicherverwaltungseinheit („MMU“), einem Digital-Analog-Wandler („DAC“) und dergleichen.
In mindestens einer Ausführungsform kann eine PPU in eine Grafikkarte eingeschlossen sein, die eine oder mehrere Speichervorrichtungen enthält. In mindestens einer Ausführungsform kann diese Grafikkarte so konfiguriert sein, dass sie mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden werden kann. In mindestens einer Ausführungsform kann diese PPU eine integrierte Grafikverarbeitungseinheit („iGPU“) sein, die in den Chipsatz einer Hauptplatine eingeschlossen ist.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt. In mindestens einer Ausführungsform wird ein Deep Learning-Anwendungsprozessor verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netz, zu trainieren, um die dem SM 3500 bereitgestellten Informationen vorherzusagen oder abzuleiten. In mindestens einer Ausführungsform wird SM 3500 verwendet, um Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netz), das von einem anderen Prozessor oder System oder von SM 3500 trainiert wurde, abzuleiten oder vorherzusagen. In mindestens einer Ausführungsform kann SM 3500 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
In mindestens einer Ausführungsform wird mindestens eine auf 35 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt die Ableitungs- und/oder Trainingslogik 715 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert die Ableitungs- und/oder Trainingslogik 715 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt die Ableitungs- und/oder Trainingslogik mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er auf eine oder mehrere der 1-6 bezogen ist. In mindestens einer Ausführungsform wird SM 3500 von 35 verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind.
Ausführungsformen sind offenbart in Bezug auf eine virtualisierte Rechenplattform für fortgeschrittenes Berechnen, wie z. B. Ableitung und Verarbeitung von Bildern in medizinischen Anwendungen. Ohne Einschränkung können die Ausführungsformen Radiographie, Magnetresonanztomographie (MRI), Nuklearmedizin, Ultraschall, Sonographie, Elastographie, photoakustische Bildgebung, Tomographie, Echokardiographie, funktionelle Nahinfrarotspektroskopie und magnetische Partikel-Bildgebung oder eine Kombination davon einschließen. In mindestens einer Ausführungsform können eine virtualisierte Rechenplattform und die hierin beschriebenen Prozesse zusätzlich oder alternativ, ohne Einschränkung, in der forensischen Analyse, der Erkennung und Bildgebung unter der Oberfläche (z. B. Ölexploration, Archäologie, Paläontologie usw.), der Topographie, der Ozeanographie, der Geologie, der Osteologie, der Meteorologie, der intelligenten Verfolgung und Überwachung von Flächen oder Objekten, der Verarbeitung von Sensordaten (z. B. RADAR, SONAR, LIDAR usw.) und/oder der Genomik und Gensequenzierung verwendet werden.
Unter Bezugnahme auf 36 ist 36 ein beispielhaftes Datenflussdiagramm für einen Prozess 3600 zum Erzeugen und Einsetzen einer Bildverarbeitungs- und Ableitungspipeline gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Prozess 3600 zur Verwendung mit Bildgebungsvorrichtungen, Verarbeitungsvorrichtungen, Genomikvorrichtungen, Gensequenzierungsvorrichtungen, Radiologievorrichtungen und/oder anderen Vorrichtungstypen in einer oder mehreren Einrichtungen 3602 eingesetzt werden, z. B. in medizinischen Einrichtungen, Krankenhäusern, Gesundheitsinstituten, Kliniken, Forschungs- oder Diagnoselabors usw. In mindestens einer Ausführungsform kann der Prozess 3600 eingesetzt werden, um eine genomische Analyse und Ableitung von Sequenzierungsdaten durchzuführen. Beispiele für genomische Analysen, die mit den hier beschriebenen Systemen und Prozessen durchgeführt werden können, schließen ohne Einschränkung Variantenaufrufe, Mutationserkennung und die Quantifizierung der Genexpression ein.
In mindestens einer Ausführungsform kann der Prozess 3600 in einem Trainingssystem 3604 und/oder einem Auslösungssystem 3606 ausgeführt werden. In mindestens einer Ausführungsform kann das Trainingssystem 3604 verwendet werden, um das Training, die Aufgabe und die Implementierung von Modellen des maschinellen Lernens (z. B. neuronale Netze, Objekterkennungsalgorithmen, Computer-Vision-Algorithmen usw.) zur Verwendung im Auslösungssystem 3606 durchzuführen. In mindestens einer Ausführungsform kann das Auslösungssystem 3606 so konfiguriert sein, dass es Verarbeitungs- und Rechenressourcen in eine verteilte Rechenumgebung verlagert, um die Infrastrukturanforderungen in der Einrichtung 3602 zu reduzieren. In mindestens einer Ausführungsform kann das Auslösungssystem 3606 eine optimierte Plattform zum Auswählen, Anpassen und Implementieren von virtuellen Instrumenten zur Verwendung mit Bildgebern (z. B. MRI, CT-Scan, Röntgen, Ultraschall usw.) oder Sequenzierungsvorrichtungen in der Einrichtung 3602 bereitstellen. In mindestens einer Ausführungsform können virtuelle Instrumente softwaredefinierte Anwendungen zum Durchführen einer oder mehrerer Operationen in Bezug auf Bildgebungsdaten einschließen, die von Bildgebungsvorrichtungen, Sequenzierungsvorrichtungen, Radiologievorrichtungen und/oder anderen Gerätetypen erzeugt werden. In mindestens einer Ausführungsform können eine oder mehrere Anwendungen in einer Pipeline Dienste (z. B. Ableitung, Visualisierung, Berechnung, KI usw.) des Auslösungssystems 3606 während der Ausführung von Anwendungen nutzen oder in Anspruch nehmen.
In mindestens einer Ausführungsform können einige der Anwendungen, die in fortgeschrittenen Verarbeitungs- und Ableitungspipelines verwendet werden, maschinelle Lernmodelle oder andere KI verwenden, um einen oder mehrere Schritte der Verarbeitung durchzuführen. In mindestens einer Ausführungsform können maschinelle Lernmodelle in der Einrichtung 3602 unter Verwendung von Daten 3608 (z. B. Bildgebungsdaten) trainiert werden, die in der Einrichtung 3602 erzeugt wurden (und auf einem oder mehreren PACS-Servern (Picture Archiving and Communication System) in der Einrichtung 3602 gespeichert sind), sie können unter Verwendung von Bildgebungs- oder Sequenzierungsdaten 3608 aus einer oder mehreren anderen Einrichtungen (z. B. einem anderen Krankenhaus, Labor, einer anderen Klinik usw.) trainiert werden, oder eine Kombination davon. In mindestens einer Ausführungsform kann das Trainingssystem 3604 dazu verwendet werden, Anwendungen, Dienste und/oder andere Ressourcen bereitzustellen, um funktionierende, einsatzfähige maschinelle Lernmodelle für das Auslösungssystem 3606 zu erzeugen.
In mindestens einer Ausführungsform kann eine Modellregistrierung 3624 durch eine Speicherung von Objekten unterstützt werden, die die Versionierung und die Metadaten von Objekten halten kann. In mindestens einer Ausführungsform kann der Zugriff auf die Speicherung von Objekten beispielsweise über eine Cloud-Speicher (z. B. eine Cloud 3726 von 37 ) erfolgen, die mit der Programmierschnittstelle (API) einer Cloud-Plattform kompatibel ist. In mindestens einer Ausführungsform können maschinelle Lernmodelle in der Modellregistrierung 3624 von Entwicklern oder Partnern eines Systems, das mit einer API interagiert, hochgeladen, aufgelistet, geändert oder gelöscht werden. In mindestens einer Ausführungsform kann eine API den Zugriff auf Verfahren bereitstellen, die es Nutzern mit entsprechenden Berechtigungsnachweisen ermöglichen, Modelle Anwendungen zuzuordnen, so dass Modelle als Teil der Ausführung von containerisierten Instanziierungen von Anwendungen ausgeführt werden können.
In mindestens einer Ausführungsform kann eine Trainingspipeline 3704 (37 ) ein Szenario einschließen, in dem die Einrichtung 3602 ihr eigenes maschinelles Lernmodell trainiert oder ein bestehendes maschinelles Lernmodell aufweist, das optimiert oder aktualisiert werden muss. In mindestens einer Ausführungsform können Bildgebungsdaten 3608 empfangen werden, die von Bildgebungsvorrichtung(en), Sequenzierungsvorrichtungen und/oder anderen Gerätetypen erzeugt wurden. In mindestens einer Ausführungsform kann, sobald die Bildgebungsdaten 3608 empfangen wurden, die KI-gestützte Kommentierung 3610 verwendet werden, um die Erzeugung von Kommentaren zu unterstützen, die den Bildgebungsdaten 3608 entsprechen und als Basisdaten für ein maschinelles Lernmodell verwendet werden sollen. In mindestens einer Ausführungsform kann die KI-unterstützte Annotation 3610 ein oder mehrere maschinelle Lernmodelle (z. B. Faltungsneuronale Netze (CNNs)) einschließen, die darauf trainiert werden können, Annotationen zu erzeugen, die bestimmten Arten von Bildgebungsdaten 3608 (z. B. von bestimmten Vorrichtungen) und/oder bestimmten Arten von Anomalien in Bildgebungsdaten 3608 entsprechen. In mindestens einer Ausführungsform können die Kl-gestützten Anmerkungen 3610 dann direkt verwendet oder mit Hilfe eines Anmerkungswerkzeugs (z. B. von einem Forscher, einem Kliniker, einem Arzt, einem Wissenschaftler usw.) angepasst oder feinabgestimmt werden, um Basisdaten zu erzeugen. In mindestens einer Ausführungsform können in einigen Beispielen beschriftete Klinikdaten 3612 (z. B. Anmerkungen, die von einem Kliniker, Arzt, Wissenschaftler, Techniker usw. bereitgestellt werden) als Basisdaten für das Training eines maschinellen Lernmodells verwendet werden. In mindestens einer Ausführungsform können KI-unterstützte Anmerkungen 3610, beschriftete Klinikdaten 3612 oder eine Kombination davon als Basisdaten für das Training eines maschinellen Lernmodells verwendet werden. In mindestens einer Ausführungsform kann ein trainiertes maschinelles Lernmodell als Ausgabemodell 3616 bezeichnet werden und vom Auslösungssystem 3606, wie hier beschrieben, verwendet werden.
In mindestens einer Ausführungsform kann die Trainingspipeline 3704 (37 ) ein Szenario einschließen, in dem die Einrichtung 3602 ein maschinelles Lernmodell zur Verwendung beim Durchführen einer oder mehrerer Verarbeitungsaufgaben für eine oder mehrere Anwendungen im Ausführungssystem 3606 benötigt, aber die Einrichtung 3602 möglicherweise derzeit kein solches maschinelles Lernmodell aufweist (oder kein Modell hat, das für solche Zwecke optimiert, effizient oder effektiv ist). In mindestens einer Ausführungsform kann ein vorhandenes maschinelles Lernmodell aus der Modellregistrierung 3624 ausgewählt werden. In mindestens einer Ausführungsform kann die Modellregistrierung 3624 Modelle für maschinelles Lernen einschließen, die für das Durchführen einer Vielzahl verschiedener Ableitungen von Bildgebungsdaten trainiert wurden. In mindestens einer Ausführungsform können die maschinellen Lernmodelle in der Modellregistrierung 3624 auf Bildgebungsdaten von anderen Einrichtungen als der Einrichtung 3602 (z. B. Einrichtungen, die sich an einem anderen Ort befinden) trainiert worden sein. In mindestens einer Ausführungsform können die maschinellen Lernmodelle auf Bildgebungsdaten von einem Standort, zwei Standorten oder einer beliebigen Anzahl von Standorten trainiert worden sein. In mindestens einer Ausführungsform kann das Training mit Bildgebungsdaten eines bestimmten Standorts an diesem Standort oder zumindest in einer Weise erfolgen, die die Vertraulichkeit der Bildgebungsdaten schützt oder die Übertragung von Bildgebungsdaten außerhalb des Standorts einschränkt (z. B. zur Einhaltung von HIPAA-Vorschriften, Datenschutzbestimmungen usw.). In mindestens einer Ausführungsform kann ein maschinelles Lernmodell, sobald es an einem Ort trainiert - oder teilweise trainiert - wurde, der Modellregistrierung 3624 hinzugefügt werden. In mindestens einer Ausführungsform kann ein maschinelles Lernmodell dann an einer beliebigen Anzahl von anderen Einrichtungen neu trainiert oder aktualisiert werden, und ein neu trainiertes oder aktualisiertes Modell kann in der Modellregistrierung 3624 zur Verfügung gestellt werden. In mindestens einer Ausführungsform kann dann ein maschinelles Lernmodell aus der Modellregistrierung 3624 ausgewählt - und als Ausgabemodell 3616 bezeichnet - werden und im Auslösungssystem 3606 verwendet werden, um eine oder mehrere Verarbeitungsaufgaben für eine oder mehrere Anwendungen eines Auslösungssystems durchzuführen.
In mindestens einer Ausführungsform kann die Trainingspipeline 3704 (37 ) in einem Szenario verwendet werden, das die Einrichtung 3602 einschließt, die ein maschinelles Lernmodell zum Durchführen einer oder mehrerer Verarbeitungsaufgaben für eine oder mehrere Anwendungen im Auslösungssystem 3606 benötigt, aber die Einrichtung 3602 weist möglicherweise derzeit kein solches maschinelles Lernmodell auf (oder verfügt nicht über ein Modell, das für diese Zwecke optimiert, effizient oder effektiv ist). In mindestens einer Ausführungsform ist ein aus dem Modellregister 3624 ausgewähltes maschinelles Lernmodell möglicherweise nicht auf die in der Einrichtung 3602 erzeugten Bildgebungsdaten 3608 abgestimmt oder optimiert, und zwar aufgrund von Unterschieden in den Populationen, genetischen Variationen, der Robustheit der zum Trainieren eines maschinellen Lernmodells verwendeten Trainingsdaten, der Vielfalt der Anomalien in den Trainingsdaten und/oder anderer Probleme mit den Trainingsdaten. In mindestens einer Ausführungsform kann die KI-gestützte Annotation 3610 dazu verwendet werden, Annotationen zu erzeugen, die den Bildgebungsdaten 3608 entsprechen und als Basisdaten für das Training oder die Aktualisierung eines maschinellen Lernmodells verwendet werden. In mindestens einer Ausführungsform können beschriftete Klinikdaten 3612 (z. B. Anmerkungen, die von einem Kliniker, Arzt, Wissenschaftler usw. bereitgestellt wurden) als Grundwahrheitsdaten für das Training eines maschinellen Lernmodells verwendet werden. In mindestens einer Ausführungsform kann das Umlernen oder Aktualisieren eines maschinellen Lernmodells als Modelltraining 3614 bezeichnet werden. In mindestens einer Ausführungsform kann die Modellschulung 3614 - z. B. KI-gestützte Anmerkungen 3610, beschriftete Klinikdaten 3612 oder eine Kombination davon - als Grundwahrheitsdaten für das Umlernen oder Aktualisieren eines maschinellen Lernmodells verwendet werden.
In mindestens einer Ausführungsform kann das Auslösungssystem 3606 Software 3618, Dienste 3620, Hardware 3622 und/oder andere Komponenten, Merkmale und Funktionen einschließen. In mindestens einer Ausführungsform kann das Auslösungssystem 3606 einen Software-„Stack“ einschließen, so dass die Software 3618 auf den Diensten 3620 aufbaut und die Dienste 3620 nutzen kann, um einige oder alle Verarbeitungsaufgaben auszuführen, und die Dienste 3620 und die Software 3618 können auf der Hardware 3622 aufgebaut sein und die Hardware 3622 nutzen, um Verarbeitungs-, Speicher- und/oder andere Rechenaufgaben des Auslösungssystems 3606 auszuführen.
In mindestens einer Ausführungsform kann die Software 3618 eine beliebige Anzahl von verschiedenen Behältern einschließen, wobei jeder Behälter eine Instanziierung einer Anwendung ausführen kann. In mindestens einer Ausführungsform kann jede Anwendung eine oder mehrere Verarbeitungsaufgaben in einer fortgeschrittenen Verarbeitungs- und Ableitungspipeline durchführen (z. B. Ableitung, Objekterkennung, Merkmalserkennung, Segmentierung, Bildverbesserung, Kalibrierung usw.). In mindestens einer Ausführungsform kann es für jede Art von Bildgebern (z. B. CT, MRI, Röntgen, Ultraschall, Sonographie, Echokardiographie usw.), Sequenzierungsvorrichtungen, Radiologievorrichtungen, Genomikvorrichtungen usw. eine beliebige Anzahl von Behältern geben, die eine Datenverarbeitungsaufgabe bezogen auf die von einer Vorrichtung erzeugten Bildgebungsdaten 3608 (oder andere Datentypen, wie die hier beschriebenen) durchführen können. In mindestens einer Ausführungsform kann eine fortgeschrittene Verarbeitungs- und Ableitungspipeline basierend auf der Auswahl verschiedener Behälter, die für die Verarbeitung von Bildgebungsdaten 3608 erwünscht oder erforderlich sind, definiert werden, zusätzlich zu den Behältern, die Bildgebungsdaten zur Verwendung durch jeden Behälter und/oder zur Verwendung durch die Einrichtung 3602 nach der Verarbeitung durch eine Pipeline empfangen und konfigurieren (z. B, um die Ausgaben in einen verwendbaren Datentyp umzuwandeln, wie z. B. DICOM-Daten (Digital Imaging and Communications in Medicine), RIS-Daten (Radiology Information System), CIS-Daten (Clinical Information System), RPC-Daten (Remote Procedure Call), Daten, die im Wesentlichen mit einer REST-Schnittstelle (Representation State Transfer) übereinstimmen, Daten, die im Wesentlichen mit einer dateibasierten Schnittstelle übereinstimmen, und/oder Rohdaten, zur Speicherung und Anzeige in der Einrichtung 3602). In mindestens einer Ausführungsform kann eine Kombination von Behältern innerhalb der Software 3618 (z. B. die eine Pipeline bilden) als virtuelles Instrument bezeichnet werden (wie hierin ausführlicher beschrieben), und ein virtuelles Instrument kann Dienste 3620 und Hardware 3622 nutzen, um einige oder alle Verarbeitungsaufgaben von in Behältern instanziierten Anwendungen auszuführen.
In mindestens einer Ausführungsform kann eine Datenverarbeitungspipeline Eingabedaten (z. B. Bildgebungsdaten 3608) in einem DICOM-, RIS-, CIS-, RESTkonformen, RPC-, Roh- und/oder anderen Format als Antwort auf eine Abführungsform empfangen (z. B. eine Anfrage von einem Benutzer des Auslösungssystems 3606, wie einem Kliniker, einem Arzt, einem Radiologen usw.). In mindestens einer Ausführungsform können die Eingabedaten ein oder mehrere Bilder, Videos und/oder andere Datendarstellungen darstellen, die von einer oder mehreren Bildgebungsvorrichtungen, Sequenzierungsvorrichtungen, Radiologievorrichtungen, Genomikvorrichtungen und/oder anderen Vorrichtungstypen erzeugt wurden. In mindestens einer Ausführungsform können die Daten als Teil der Datenverarbeitungspipeline vorverarbeitet werden, um die Daten für die Verarbeitung durch eine oder mehrere Anwendungen herzustellen. In mindestens einer Ausführungsform kann eine Nachverarbeitung an einer Ausgabe einer oder mehrerer Ableitungsaufgaben oder anderer Verarbeitungsaufgaben einer Pipeline durchgeführt werden, um Ausgabedaten für eine nächste Anwendung herzustellen und/oder Ausgabedaten für die Herstellung und/oder Verwendung durch einen Benutzer (z. B. als Antwort auf eine Ableitungsanfrage) vorzubereiten. In mindestens einer Ausführungsform können Ableitungsaufgaben von einem oder mehreren maschinellen Lernmodellen durchgeführt werden, wie z. B. trainierte oder eingesetzte neuronale Netze, die Ausgabemodelle 3616 des Trainingssystems 3604 einschließen können.
In mindestens einer Ausführungsform können die Aufgaben der Datenverarbeitungs-Pipeline in einem oder mehreren Behältern gekapselt sein, die jeweils eine diskrete, voll funktionsfähige Instanziierung einer Anwendung und einer virtualisierten Rechenumgebung darstellen, die in der Lage ist, maschinelle Lernmodelle zu referenzieren. In mindestens einer Ausführungsform können Behälter oder Anwendungen in einer privaten (z. B. zugangsbeschränkten) Fläche einer Containerregistrierung (hierin ausführlicher beschrieben) veröffentlicht werden, und trainierte oder eingesetzte Modelle können in der Modellregistrierung 3624 gespeichert und einer oder mehreren Anwendungen zugeordnet werden. In mindestens einer Ausführungsform können Bilder von Anwendungen (z. B. Bilder von Behältern) in einer Behälterregistrierung verfügbar sein, und sobald sie von einem Benutzer aus einer Behälterregistrierung für die Bereitstellung in einer Pipeline ausgewählt wurden, kann ein Bild verwendet werden, um einen Behälter für eine Instanziierung einer Anwendung zur Verwendung durch ein System des Benutzers zu erzeugen.
In mindestens einer Ausführungsform können Entwickler (z. B. Softwareentwickler, Kliniker, Ärzte usw.) Anwendungen (z. B. in Form von Behältern) zum Durchführen von Bildverarbeitungen und/oder Ableitungen für bereitgestellte Daten entwickeln, veröffentlichen und speichern. In mindestens einer Ausführungsform kann die Entwicklung, Veröffentlichung und/oder Speicherung mit Hilfe eines Software Development Kits (SDK) durchgeführt werden, das einem System zugeordnet ist (z. B. um sicherzustellen, dass eine entwickelte Anwendung und/oder ein entwickelter Behälter mit einem System konform oder kompatibel ist). In mindestens einer Ausführungsform kann eine entwickelte Anwendung lokal (z. B. in einer ersten Einrichtung, mit Daten aus einer ersten Einrichtung) mit einem SDK getestet werden, das zumindest einige der Dienste 3620 als System (z. B. System 3700 von 37 ) unterstützen kann. In mindestens einer Ausführungsform kann ein Entwickler aufgrund der Tatsache, dass DICOM-Aufgaben zwischen einem und Hunderten von Bildern oder anderen Datentypen enthalten können, für die Verwaltung (z. B. das Festlegen von Konstrukten, das Herstellen von Vorverarbeitungen in einer Anwendung usw.) der Extraktion und Herstellung der eingehenden DICOM-Daten verantwortlich sein. In mindestens einer Ausführungsform kann eine Anwendung nach der Validierung durch das System 3700 (z. B. im Hinblick auf Genauigkeit, Sicherheit, Patientendaten usw.) in einem Behälterregister zur Auswahl und/oder Implementierung durch einen Benutzer (z. B. ein Krankenhaus, eine Klinik, ein Labor, einen Gesundheitsdienstleister usw.) bereitgestellt werden, um eine oder mehrere Verarbeitungsaufgaben in Bezug auf die Daten in einer Einrichtung (z. B. einer zweiten Einrichtung) eines Benutzers durchzuführen.
In mindestens einer Ausführungsform können Entwickler dann Anwendungen oder Behälter über ein Netz für den Zugriff und die Nutzung durch Benutzer eines Systems (z. B. System 3700 von 37 ) freigeben. In mindestens einer Ausführungsform können fertige und validierte Anwendungen oder Behälter in einem Behälterregister gespeichert werden, und die zugehörigen Modelle für maschinelles Lernen können im Modellregister 3624 gespeichert werden. In mindestens einer Ausführungsform kann eine anfragende Stelle (z. B. ein Benutzer in einer medizinischen Einrichtung), die eine Ableitungs- oder Bildverarbeitungsanforderung bereitstellt, eine Behälterregistrierung und/oder Modellregistrierung 3624 nach einer Anwendung, einem Behälter, einem Datensatz, einem maschinellen Lernmodell usw. durchsuchen, eine gewünschte Kombination von Elementen für die Aufnahme in die Datenverarbeitungspipeline auswählen und eine Bildverarbeitungsanforderung stellen. In mindestens einer Ausführungsform kann eine Anfrage Eingabedaten (und in einigen Beispielen zugehörige Patientendaten) einschließen, die zum Durchführen einer Anfrage erforderlich sind, und/oder eine Auswahl von Anwendungen und/oder maschinellen Lernmodellen auswählen, die beim Verarbeiten einer Anfrage ausgeführt werden sollen. In mindestens einer Ausführungsform kann eine Anfrage dann an eine oder mehrere Komponenten des Auslösungssystems 3606 (z. B. eine Cloud) weitergeleitet werden, um die Verarbeitung der Datenverarbeitungspipeline durchzuführen. In mindestens einer Ausführungsform kann die Verarbeitung durch das Auslösungssystem 3606 die Referenzierung ausgewählter Elemente (z. B. Anwendungen, Behälter, Modelle usw.) aus einer Behälter- und/oder Modellregistrierung 3624 einschließen. In mindestens einer Ausführungsform können die von einer Pipeline erzeugten Ergebnisse an einen Benutzer zurückgegeben werden (z. B. zur Anzeige in einer Anwendungssuite, die auf einer lokalen Workstation oder einem Terminal vor Ort ausgeführt wird). In mindestens einer Ausführungsform kann ein Radiologe Ergebnisse von einer Datenverarbeitungspipeline empfangen, die eine beliebige Anzahl von Anwendungen und/oder Behältern umfasst, wobei die Ergebnisse die Erkennung von Anomalien in Röntgenaufnahmen, CT-Abtastungen, MRIs usw. einschließen können.
In mindestens einer Ausführungsform können zur Unterstützung der Verarbeitung oder Ausführung von Anwendungen oder Behältern in Pipelines die Dienste 3620 genutzt werden. In mindestens einer Ausführungsform können die Dienste 3620 Berechnungsdienste, Dienste für künstliche Intelligenz (Kl), Visualisierungsdienste und/oder andere Diensttypen einschließen. In mindestens einer Ausführungsform können die Dienste 3620 Funktionen bereitstellen, die einer oder mehreren Anwendungen in der Software 3618 gemeinsam sind, so dass die Funktionen zu einem Dienst abstrahiert werden können, der von Anwendungen aufgerufen oder genutzt werden kann. In mindestens einer Ausführungsform kann die von den Diensten 3620 bereitgestellte Funktionalität dynamisch und effizienter ablaufen und gleichzeitig gut skalieren, indem Anwendungen Daten parallel verarbeiten können (z. B. über eine parallele Rechenplattform 3730 (37 )). In mindestens einer Ausführungsform muss nicht jede Anwendung, die dieselbe von einem Dienst 3620 angebotene Funktionalität nutzt, eine eigene Instanz des Dienstes 3620 aufweisen, sondern der Dienst 3620 kann auch von verschiedenen Anwendungen gemeinsam genutzt werden. In mindestens einer Ausführungsform können die Dienste einen Ableitungsserver oder eine Engine einschließen, der bzw. die zum Ausführen von Erkennungs- oder Segmentierungsaufgaben verwendet werden kann (zum Beispiel). In mindestens einer Ausführungsform kann ein Modelltrainingsdienst eingeschlossen sein, der das Training und/oder die Umschulung von Maschinenlernmodellen bereitstellt. In mindestens einer Ausführungsform kann ferner ein Datenerweiterungsdienst eingeschlossen sein, der eine GPU-beschleunigte Datenextraktion (z. B. DICOM, RIS, CIS, REST-konform, RPC, Rohdaten usw.), Größenänderung, Skalierung und/oder andere Erweiterungen bereitstellt. In mindestens einer Ausführungsform kann ein Visualisierungsdienst verwendet werden, der Bildwiedergabeeffekte hinzufügt - wie Raytracing, Rasterung, Rauschunterdrückung, Schärfung usw. - um zweidimensionalen (2D) und/oder dreidimensionalen (3D) Modellen mehr Realismus zu verleihen. In mindestens einer Ausführungsform können Dienste für virtuelle Instrumente bereitgestellt werden, die Strahlformung, Segmentierung, Ableitung, Bildgeber und/oder Unterstützung für andere Anwendungen innerhalb von Pipelines virtueller Instrumente bereitstellen.
In mindestens einer Ausführungsform, in der ein Dienst 3620 einen KI-Dienst (z. B. einen Ableitungsdienst) einschließt, können ein oder mehrere maschinelle Lernmodelle, die einer Anwendung zur Erkennung von Anomalien (z. B. Tumoren, Wachstumsanomalien, Narben usw.) zugeordnet sind, ausgeführt werden, indem ein Ableitungsdienst (z. B. ein Ableitungsserver) aufgerufen wird (z. B. als API-Aufruf), um maschinelle Lernmodelle oder deren Verarbeitung als Teil der Anwendungsausführung auszuführen. In mindestens einer Ausführungsform, in der eine weitere Anwendung ein oder mehrere maschinelle Lernmodelle für Segmentierungsaufgaben einschließt, kann eine Anwendung einen Ableitungsdienst aufrufen, um maschinelle Lernmodelle auszuführen, um eine oder mehrere der mit Segmentierungsaufgaben zugeordneten Operationen durchzuführen. In mindestens einer Ausführungsform kann die Software 3618, die eine fortgeschrittene Verarbeitungs- und Ableitungspipeline implementiert, die eine Segmentierungsanwendung und eine Anwendung zur Erkennung von Anomalien einschließt, rationalisiert werden, da jede Anwendung denselben Ableitungsdienst aufrufen kann, um eine oder mehrere Ableitungsaufgaben durchzuführen.
In mindestens einer Ausführungsform kann die Hardware 3622 GPUs, CPUs, Grafikkarten, ein Kl/Deep Learning-System (z. B. einen Kl-Supercomputer wie das DGX-Supercomputersystem von NVIDIA), eine Cloud-Plattform oder eine Kombination davon einschließen. In mindestens einer Ausführungsform können verschiedene Arten von Hardware 3622 verwendet werden, um eine effiziente, zweckgebundene Unterstützung für Software 3618 und Dienste 3620 im Auslösungssystem 3606 bereitzustellen. In mindestens einer Ausführungsform kann die GPU-Verarbeitung für die Verarbeitung vor Ort (z. B. in der Einrichtung 3602), in einem Kl/Deep Learning-System, in einem Cloud-System und/oder in anderen Verarbeitungskomponenten des Auslösungssystems 3606 implementiert werden, um die Effizienz, Genauigkeit und Wirksamkeit der Bildverarbeitung, der Bildrekonstruktion, der Segmentierung, der MRI-Untersuchungen, der Erkennung von Schlaganfällen oder Herzinfarkten (z. B. in Echtzeit), der Bildqualität beim Rendern usw. zu verbessern. In mindestens einer Ausführungsform kann eine Einrichtung Bildgebungsvorrichtungen, Genomikvorrichtungen, Sequenzierungsvorrichtungen und/oder andere Vorrichtungstypen vor Ort einschließen, die GPUs nutzen können, um Bildgebungsdaten zu erzeugen, die für die Anatomie eines Subjekts repräsentativ sind.
In mindestens einer Ausführungsform können die Software 3618 und/oder die Dienste 3620 für die GPU-Verarbeitung in Bezug auf Deep Learning, maschinelles Lernen und/oder Hochleistungsrechnen optimiert sein, als nicht einschränkende Beispiele. In mindestens einer Ausführungsform kann zumindest ein Teil der Rechenumgebung des Auslösungssystems 3606 und/oder des Trainingssystems 3604 in einem Rechenzentrum auf einem oder mehreren Supercomputern oder Hochleistungsrechnersystemen mit GPU-optimierter Software (z. B. der Hardware- und Softwarekombination des DGX-Systems von NVIDIA) ausgeführt werden. In mindestens einer Ausführungsform können die Rechenzentren den Bestimmungen des HIPAA entsprechen, so dass der Empfang, die Verarbeitung und die Übertragung von Bildgebungsdaten und/oder anderen Patientendaten sicher gehandhabt wird, bezogen auf die Privatsphäre der Patientendaten. In mindestens einer Ausführungsform kann die Hardware 3622 eine beliebige Anzahl von Grafikprozessoren (GPUs) einschließen, die eine parallele Verarbeitung von Daten durchführen können, wie hier beschrieben. In mindestens einer Ausführungsform kann die Cloud-Plattform ferner eine GPU-Verarbeitung für die GPU-optimierte Ausführung von Deep Learning-Aufgaben, maschinellen Lernaufgaben oder anderen Rechenaufgaben einschließen. In mindestens einer Ausführungsform kann die Cloud-Plattform (z. B. NVIDIAs NGC) unter Verwendung eines oder mehrerer Kl/Deep Learning-Supercomputer und/oder GPU-optimierter Software (z. B. wie auf NVIDIAs DGX-Systemen bereitgestellt) als Hardware-Abstraktions- und Skalierungsplattform ausgeführt werden. In mindestens einer Ausführungsform kann die Cloud-Plattform ein System zum Clustering von Behältern für Anwendungen oder ein Orchestrierungssystem (z. B. KUBERNETES) auf mehreren GPUs integrieren, um nahtlose Skalierung und Lastausgleich zu ermöglichen.
In mindestens einer Ausführungsform wird mindestens eine auf 36 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt das Trainingssystem 3604 und/oder das Auslösungssystem 3606 mindestens einen der in 1 beschriebenen Aspekte ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert das Trainingssystem 3604 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen beschrieben. In mindestens einer Ausführungsform führt das Auslösungssystem 3606 mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie er in Bezug auf eine oder mehrere der 1-6 beschrieben ist.
In mindestens einer Ausführungsform kann das System 3700 (z. B. das Trainingssystem 3604 und/oder das Auslösungssystem 3606) in einer Rechenumgebung (z. B. unter Verwendung der Cloud 3726) implementiert sein. In mindestens einer Ausführungsform kann das System 3700 lokal, bezogen auf eine Einrichtung des Gesundheitswesens, oder als Kombination von sowohl Cloud- als auch lokalen Rechenressourcen implementiert sein. In mindestens einer Ausführungsform, in der das Berechnen in der Cloud implementiert ist, können Patientendaten von einer oder mehreren Komponenten des Systems 3700 abgetrennt oder von diesen nicht verarbeitet werden, wodurch die Verarbeitung nicht mit dem HIPAA und/oder anderen Vorschriften oder Gesetzen zum Umgang mit Daten und zum Schutz der Privatsphäre vereinbar wäre. In mindestens einer Ausführungsform kann der Zugriff auf APIs in der Cloud 3726 durch festgelegte Sicherheitsmaßnahmen oder -protokolle auf autorisierte Benutzer beschränkt werden. In mindestens einer Ausführungsform kann ein Sicherheitsprotokoll Web-Tokens einschließen, die von einem Authentifizierungsdienst (z. B. AuthN, AuthZ, Gluecon usw.) signiert und mit einer entsprechenden Autorisierung versehen sein können. In mindestens einer Ausführungsform können APIs von virtuellen Instrumenten (wie hier beschrieben) oder anderen Instanzen des Systems 3700 auf eine Reihe von öffentlichen IPs beschränkt werden, die für die Interaktion überprüft oder autorisiert worden sind.
In mindestens einer Ausführungsform können verschiedene Komponenten des Systems 3700 über eine Vielzahl verschiedener Netztypen, einschließlich, aber nicht beschränkt auf lokale Netze (LANs) und/oder Weitverkehrsnetze (WANs), über verdrahtete und/oder drahtlose Kommunikationsprotokolle miteinander kommunizieren. In mindestens einer Ausführungsform kann die Kommunikation zwischen Einrichtungen und Komponenten des Systems 3700 (z. B. zum Übertragen von Ableitungsanfragen, zum Empfangen von Ergebnissen von Ableitungsanfragen usw.) über einen Datenbus oder Datenbusse, drahtlose Datenprotokolle (Wi-Fi), drahtgebundene Datenprotokolle (z. B. Ethernet) usw. erfolgen.
In mindestens einer Ausführungsform kann das System 3604 Trainings-Pipelines 3704 ausführen, ähnlich denen, die hier bezogen auf 36 beschrieben sind. In mindestens einer Ausführungsform, in der ein oder mehrere Modelle des maschinellen Lernens in den Auslösungssystemen 3710 vom Auslösungssystem 3606 verwendet werden sollen, können die Trainingspipelines 3704 verwendet werden, um ein oder mehrere (z. B. vortrainierte) Modelle zu trainieren oder neu zu trainieren und/oder ein oder mehrere vortrainierte Modelle 3706 zu implementieren (z. B. ohne das Bedürfnis nach einem neuen Training oder einer Aktualisierung). In mindestens einer Ausführungsform können als Ergebnis der Trainings-Pipelines 3704 Ausgabemodell(e) 3616 erzeugt werden. In mindestens einer Ausführungsform können die Trainings-Pipelines 3704 eine beliebige Anzahl von Verarbeitungsschritten einschließen, wie z. B. die Umwandlung oder Anpassung von Bildgebungsdaten (oder anderen Eingabedaten), die Verwendung des DICOM-Adapters 3702A, um DICOM-Bilder in ein anderes Format umzuwandeln, das für die Verarbeitung durch entsprechende maschinelle Lernmodelle geeignet ist, wie z. B. das Format der Neuroimaging Informatics Technology Initiative (NIfTI)), die KI-gestützte Annotation 3610, die Beschriftung oder Annotation von Bildgebungsdaten 3608, um beschriftete Klinikdaten 3612 zu erzeugen, die Modellauswahl aus einer Modellregistrierung, das Modelltraining 3614, das Training, die Umschulung oder die Aktualisierung von Modellen und/oder andere Verarbeitungsschritte. In mindestens einer Ausführungsform können für verschiedene maschinelle Lernmodelle, die vom Auslösungssystem 3606 verwendet werden, verschiedene Trainingspipelines 3704 verwendet werden. In mindestens einer Ausführungsform kann für ein erstes maschinelles Lernmodell eine Trainingspipeline 3704 verwendet werden, die einem ersten, auf 36 bezogenen Beispiel entspricht, für ein zweites maschinelles Lernmodell eine Trainingspipeline 3704, die einem zweiten, auf 36 bezogenen Beispiel entspricht, und für ein drittes maschinelles Lernmodell eine Trainingspipeline 3704, die einem dritten, auf 36 bezogenen Beispiel entspricht. In mindestens einer Ausführungsform kann jede beliebige Kombination von Aufgaben innerhalb des Trainingssystems 3604 verwendet werden, je nachdem, was für das jeweilige maschinelle Lernmodell erforderlich ist. In mindestens einer Ausführungsform können eines oder mehrere der maschinellen Lernmodelle bereits trainiert und einsatzbereit sein, so dass die maschinellen Lernmodelle nicht mehr vom Trainingssystem 3604 verarbeitet werden müssen, sondern vom Auslösungssystem 3606 implementiert werden können.
In mindestens einer Ausführungsform können das (die) Ausgabemodell(e) 3616 und/oder das (die) vortrainierte(n) Modell(e) 3706 alle Arten von maschinellen Lernmodellen einschließen, je nach Implementierung oder Ausführungsform. In mindestens einer Ausführungsform und ohne Einschränkung können die vom System 3700 verwendeten maschinellen Lernmodelle maschinelle Lernmodelle einschließen, die lineare Regression, logistische Regression, Entscheidungsbäume, Support-Vektor-Maschinen (SVM), Naive Bayes, k-nearest neighbor (Knn), K-Mittel-Clustering, Random Forest, Algorithmen zur Dimensionalitätsreduktion, Gradient-Boosting-Algorithmen, neuronale Netze (z. B, Autokodierer, Faltungsalgorithmen, rekurrente Algorithmen, Perceptrons, Long/Short Term Memory (LSTM), Hopfield, Boltzmann, Deep Belief, Deconvolutional, Generative Adversarial, Liquid State Machine usw.) und/oder andere Arten von Machine Learning Modellen.
In mindestens einer Ausführungsform können die Trainingspipelines 3704 Klgestützte Annotationen einschließen, wie hierin ausführlicher beschrieben, bezogen auf mindestens 40B . In mindestens einer Ausführungsform können beschriftete Klinikdaten 3612 (z. B. herkömmliche Annotationen) durch eine beliebige Anzahl von Techniken erzeugt werden. In mindestens einer Ausführungsform können Beschriftungen oder andere Anmerkungen in einem Zeichenprogramm (z. B. einem Anmerkungsprogramm), einem Programm für computergestütztes Design (CAD), einem Beschriftungsprogramm, einer anderen Art von Programm, das für die Erzeugung von Anmerkungen oder Beschriftungen für die Grundwahrheit geeignet ist, erzeugt werden und/oder in einigen Beispielen von Hand gezeichnet werden. In mindestens einer Ausführungsform können die Wahrheitsdaten synthetisch erzeugt (z. B. anhand von Computermodellen oder Renderings), real erzeugt (z. B. anhand von realen Daten ausgelegt und erstellt), maschinell automatisiert (z. B. unter Verwendung von Merkmalsanalyse und Lernen, um Merkmale aus den Daten zu extrahieren und dann Beschriftungen zu erzeugen), von Menschen beschriftet (z. B. legt ein Beschriftungsexperte die Position der Beschriftungen fest) und/oder eine Kombination davon sein. In mindestens einer Ausführungsform kann es für jede Instanz von Bildgebungsdaten 3608 (oder anderen Datentypen, die von maschinellen Lernmodellen verwendet werden) entsprechende Grundwahrheitsdaten geben, die vom Trainingssystem 3604 erzeugt werden. In mindestens einer Ausführungsform kann die KI-gestützte Annotation als Teil der Einsatzpipelines 3710 durchgeführt werden, entweder zusätzlich zu oder anstelle der Kl-gestützten Annotation, die in den Trainingspipelines 3704 eingeschlossen ist. In mindestens einer Ausführungsform kann das System 3700 eine mehrschichtige Plattform einschließen, die eine Softwareschicht (z. B. Software 3618) mit diagnostischen Anwendungen (oder anderen Anwendungstypen) einschließt, die eine oder mehrere medizinische Bildgeber- und Diagnosefunktionen durchführen können. In mindestens einer Ausführungsform kann das System 3700 kommunikativ mit (z. B. über verschlüsselte Verbindungen) PACS-Server-Netzen einer oder mehrerer Einrichtungen verbunden sein. In mindestens einer Ausführungsform kann das System 3700 so konfiguriert sein, dass es auf Daten (z. B. DICOM-Daten, RIS-Daten, Rohdaten, CIS-Daten, REST-konforme Daten, RPC-Daten, Rohdaten usw.) von PACS-Servern zugreift und diese referenziert über einen DICOM-Adapter 3702 oder einen anderen Datentypadapter wie RIS, CIS, REST-konforme Daten, RPC, Rohdaten usw.), um Operationen wie das Trainieren von maschinellen Lernmodellen, den Einsatz von maschinellen Lernmodellen, die Bildverarbeitung, Ableitungen und/oder andere Operationen durchzuführen.
In mindestens einer Ausführungsform kann eine software-schicht als sichere, verschlüsselte und/oder authentifizierte API implementiert werden, über die Anwendungen oder Behälter aus einer oder mehreren externen Umgebungen (z. B. der Einrichtung 3602) aufgerufen werden können. In mindestens einer Ausführungsform können Anwendungen dann einen oder mehrere Dienste 3620 zum Durchführen von Berechnungs-, Kl- oder Visualisierungsaufgaben, die den jeweiligen Anwendungen zugeordnet sind, aufrufen oder ausführen, und die Software 3618 und/oder die Dienste 3620 können die Hardware 3622 nutzen, um die Verarbeitungsaufgaben auf effektive und effiziente Weise durchzuführen.
In mindestens einer Ausführungsform kann das Auslösungssystem 3606 Ausführungspipelines 3710 ausführen. In mindestens einer Ausführungsform können die Bereitstellungspipelines 3710 eine beliebige Anzahl von Anwendungen einschließen, die sequentiell, nicht-sequentiell oder auf andere Weise auf Bildgebungsdaten (und/oder andere Datentypen) angewendet werden können, die von Bildgebungsvorrichtungen, Sequenzierungsvorrichtungen, Genomikvorrichtungen usw. erzeugt werden. - einschließlich KI-gestützter Annotation, wie oben beschrieben. In mindestens einer Ausführungsform, wie hier beschrieben, kann eine Einsatzpipeline 3710 für eine einzelne Vorrichtung als virtuelles Instrument für eine Vorrichtung bezeichnet werden (z. B. ein virtuelles Ultraschallinstrument, ein virtuelles CT-Abtastungsinstrument, ein virtuelles Sequenzierungsinstrument usw.). In mindestens einer Ausführungsform kann es für eine einzelne Vorrichtung mehr als eine Einsatzpipeline 3710 geben, je nachdem, welche Informationen aus den von einer Vorrichtung erzeugten Daten gewünscht werden. In mindestens einer Ausführungsform kann es eine erste Einsatzpipeline 3710 geben, wenn die Erkennung von Anomalien von einem MRI-Gerät gewünscht wird, und eine zweite Einsatzpipeline 3710, wenn eine Bildverbesserung von der Ausgabe eines MRI-Geräts gewünscht wird.
In mindestens einer Ausführungsform können die für die Einsatzpipelines 3710 verfügbaren Anwendungen jede Anwendung einschließen, die zum Durchführen von Verarbeitungsaufgaben für Bildgebungsdaten oder andere Daten von Vorrichtungen verwendet werden kann. In mindestens einer Ausführungsform können verschiedene Anwendungen für die Bildverbesserung, Segmentierung, Rekonstruktion, Anomalieerkennung, Objekterkennung, Merkmalserkennung, Behandlungsplanung, Dosimetrie, Strahlenplanung (oder andere Strahlenbehandlungsverfahren) und/oder andere Analyse-, Bildverarbeitungs- oder Ableitungsaufgaben zuständig sein. In mindestens einer Ausführungsform kann das Auslösungssystem 3606 Konstrukte für jede der Anwendungen definieren, so dass die Benutzer des Auslösungssystems 3606 (z. B. medizinische Einrichtungen, Labore, Kliniken usw.) die Konstrukte verstehen und die Anwendungen für die Implementierung in ihrer jeweiligen Einrichtung anpassen können. In mindestens einer Ausführungsform kann eine Anwendung zur Bildrekonstruktion für die Aufnahme in die Bereitstellungspipeline 3710 ausgewählt werden, aber der von einer Bildgebungsvorrichtung erzeugte Datentyp kann sich von einem in einer Anwendung verwendeten Datentyp unterscheiden. In mindestens einer Ausführungsform kann der DICOM-Adapter 3702B (und/oder ein DICOM-Leser) oder ein anderer Datentyp-Adapter oder -Leser (z. B. RIS, CIS, REST-konform, RPC, raw usw.) in der Ausführungspipeline 3710 verwendet werden, um Daten in eine Form umzuwandeln, die von einer Anwendung im Auslösungssystem 3606 verwendet werden kann. In mindestens einer Ausführungsform kann der Zugriff auf DICOM-, RIS-, CIS-, REST-konforme, RPC-, Rohdaten- und/oder andere Datentypbibliotheken akkumuliert und vorverarbeitet werden, einschließlich der Dekodierung, Extraktion und/oder des Durchführens von Faltungen, Farbkorrekturen, Schärfe, Gamma und/oder anderen Erweiterungen der Daten. In mindestens einer Ausführungsform können DICOM-, RIS-, CIS-, REST-konforme, RPC- und/oder Rohdaten ungeordnet sein und es kann ein Vorlauf ausgeführt werden, um die gesammelten Daten zu organisieren oder zu sortieren. In mindestens einer Ausführungsform kann zur Beschleunigung dieser Operationen eine Datenerweiterungsbibliothek (z. B. als einer der Dienste 3620) verwendet werden, da verschiedene Anwendungen gemeinsame Bildoperationen nutzen können. In mindestens einer Ausführungsform kann zur Vermeidung von Engpässen bei konventionellen Verarbeitungsansätzen, die sich auf die CPU-Verarbeitung stützen, eine parallele Rechenplattform 3730 zur GPU-Beschleunigung dieser Verarbeitungsaufgaben verwendet werden.
In mindestens einer Ausführungsform kann eine Anwendung zur Bildrekonstruktion eine Verarbeitungsaufgabe einschließen, die die Verwendung eines maschinellen Lernmodells einschließt. In mindestens einer Ausführungsform kann ein Benutzer sein eigenes maschinelles Lernmodell verwenden oder ein maschinelles Lernmodell aus der Modellregistrierung 3624 auswählen. In mindestens einer Ausführungsform kann ein Benutzer sein eigenes maschinelles Lernmodell implementieren oder ein maschinelles Lernmodell auswählen, das in eine Anwendung zum Durchführen einer Verarbeitungsaufgabe einbezogen wird. In mindestens einer Ausführungsform sind Anwendungen auswählbar und anpassbar, und durch die Definition von Konstrukten von Anwendungen wird die Bereitstellung und Implementierung von Anwendungen für einen bestimmten Benutzer als eine nahtlosere Benutzererfahrung dargestellt. In mindestens einer Ausführungsform können die Ausführungspipelines 3710 durch die Nutzung anderer Merkmale des Systems 3700 - wie etwa der Dienste 3620 und der Hardware 3622 - noch benutzerfreundlicher sein, eine einfachere Integration bereitstellen und genauere, effizientere und zeitgerechtere Ergebnisse liefern.
In mindestens einer Ausführungsform kann das Auslösungssystem 3606 eine Benutzerschnittstelle 3714 (z. B. eine grafische Benutzerschnittstelle, eine Webschnittstelle usw.) einschließen, die dazu verwendet werden kann, Anwendungen für die Aufnahme in die Auslösungspipeline(s) 3710 auszuwählen, Anwendungen anzuordnen, Anwendungen oder Parameter oder Konstrukte davon zu modifizieren oder zu verändern, die Auslösungspipeline(s) 3710 während der Einrichtung und/oder der Auslösung zu verwenden und mit ihr zu interagieren und/oder anderweitig mit dem Auslösungssystem 3606 zu interagieren. In mindestens einer Ausführungsform, die jedoch nicht auf das Auslösungssystem 3604 bezogen ist, kann die Benutzerschnittstelle 3714 (oder eine andere Benutzerschnittstelle) zum Auswählen von Modellen für die Verwendung im Auslösungssystem 3606, zum Auswählen von Modellen für das Training oder die Umschulung im Auslösungssystem 3604 und/oder für eine andere Interaktion mit dem Auslösungssystem 3604 verwendet werden.
In mindestens einer Ausführungsform kann der Pipeline-Manager 3712 zusätzlich zu einem Anwendungsorchestrierungssystem 3728 verwendet werden, um die Interaktion zwischen Anwendungen oder Behältern der Auslösungssystem(e) 3710 und Diensten 3620 und/oder Hardware 3622 zu verwalten. In mindestens einer Ausführungsform kann der Pipeline-Manager so konfiguriert sein, dass er Interaktionen von Anwendung zu Anwendung, von Anwendung zu Dienst 3620 und/oder von Anwendung oder Dienst zu Hardware 3622 erleichtert. Obwohl in mindestens einer Ausführungsform veranschaulicht wird, dass der Pipeline-Manager 3712 in die Software 3618 eingeschlossen ist, ist dies nicht als Einschränkung zu verstehen, und in einigen Beispielen (z. B. wie in 38 veranschaulicht) kann der Pipeline-Manager 3712 in die Dienste 3620 eingeschlossen sein. In mindestens einer Ausführungsform kann das System für die Anwendungsorchestrierung 3728 (z. B. Kubernetes, DOCKER usw.) ein System für die Containerorchestrierung einschließen, das Anwendungen als logische Einheiten für die Koordination, Verwaltung, Skalierung und Bereitstellung in Behältern zusammenfassen kann. In mindestens einer Ausführungsform kann durch die Zuordnung von Anwendungen aus der/den Bereitstellungspipeline(s) 3710 (z. B. eine Rekonstruktionsanwendung, eine Segmentierungsanwendung usw.) zu einzelnen Behältern jede Anwendung in einer in sich geschlossenen Umgebung (z. B. auf Kernel-Ebene) ausgeführt werden, um die Geschwindigkeit und Effizienz zu erhöhen.
In mindestens einer Ausführungsform kann jede Anwendung und/oder jeder Behälter (oder ein Bild davon) individuell entwickelt, modifiziert und eingesetzt werden (z. B. kann ein erster Benutzer oder Entwickler eine erste Anwendung entwickeln, modifizieren und einsetzen und ein zweiter Benutzer oder Entwickler kann eine zweite Anwendung getrennt von einem ersten Benutzer oder Entwickler entwickeln, modifizieren und einsetzen), was es ermöglicht, sich auf eine Aufgabe einer einzelnen Anwendung und/oder eines einzelnen Behälters zu konzentrieren, ohne durch Aufgaben einer anderen Anwendung oder eines anderen Behälters behindert zu werden. In mindestens einer Ausführungsform kann die Kommunikation und Zusammenarbeit zwischen verschiedenen Behältern oder Anwendungen durch den Pipeline-Manager 3712 und das System zur Anwendungsorchestrierung 3728 unterstützt werden. In mindestens einer Ausführungsform kann das System zur Anwendungsorchestrierung 3728 und/oder der Pipeline-Manager 3712 die Kommunikation unter und zwischen den einzelnen Anwendungen oder Containern sowie die gemeinsame Nutzung von Ressourcen unter und zwischen ihnen erleichtern, solange die erwartete Eingabe und/oder Ausgabe jedes Containers oder jeder Anwendung einem System bekannt ist (z. B. basierend auf den Konstrukten der Anwendungen oder Container). In mindestens einer Ausführungsform kann das System zur Anwendungsorchestrierung 3728, da eine oder mehrere Anwendungen oder Behälter in der/den Ausführungspipeline(s) 3710 dieselben Dienste und Ressourcen gemeinsam nutzen können, die gemeinsame Nutzung von Diensten oder Ressourcen zwischen und unter verschiedenen Anwendungen oder Behältern orchestrieren, ausgleichen und bestimmen. In mindestens einer Ausführungsform kann ein Scheduler verwendet werden, um den Ressourcenbedarf von Anwendungen oder Behältern, die aktuelle oder geplante Nutzung dieser Ressourcen und die Ressourcenverfügbarkeit zu verfolgen. In mindestens einer Ausführungsform kann ein Scheduler auf diese Weise den verschiedenen Anwendungen Ressourcen zuweisen und die Ressourcen unter Berücksichtigung der Anforderungen und der Verfügbarkeit eines Systems zwischen den Anwendungen und untereinander verteilen. In einigen Beispielen kann ein Scheduler (und/oder eine andere Komponente des AnwendungsOrchestrierungssystems 3728) die Ressourcenverfügbarkeit und -verteilung basierend auf den einem System auferlegten Beschränkungen (z. B. Benutzerbeschränkungen) bestimmen, wie z. B. Dienstgüte (QoS), Dringlichkeit des Bedarfs an Datenausgaben (z. B. um zu bestimmen, ob eine Echtzeitverarbeitung oder eine verzögerte Verarbeitung ausgeführt werden soll), usw.
In mindestens einer Ausführungsform können die von Anwendungen oder Behältern im Auslösungssystem 3606 genutzten und gemeinsam genutzten Dienste 3620 Berechnungsdienste 3716, KI-Dienste 3718, Visualisierungsdienste 3720 und/oder andere Diensttypen einschließen. In mindestens einer Ausführungsform können Anwendungen einen oder mehrere der Dienste 3620 aufrufen (z. B. ausführen), um Operationen für eine Anwendung zu verarbeiten. In mindestens einer Ausführungsform können die Rechendienste 3716 von Anwendungen genutzt werden, um Supercomputing- oder andere High-Performance-Computing (HPC)-Aufgaben durchzuführen. In mindestens einer Ausführungsform kann/können der/die Rechendienst(e) 3716 genutzt werden, um eine parallele Verarbeitung durchzuführen (z. B. unter Verwendung einer parallelen Rechenplattform 3730), um Daten durch eine oder mehrere Anwendungen und/oder eine oder mehrere Aufgaben einer einzelnen Anwendung im Wesentlichen gleichzeitig zu verarbeiten. In mindestens einer Ausführungsform kann die parallele Rechenplattform 3730 (z. B. CUDA von NVIDIA) allgemeines Berechnen auf GPUs (GPGPU) (z. B. GPUs 3722) ermöglichen. In mindestens einer Ausführungsform kann eine software-schicht der Plattform für paralleles Berechnen 3730 den Zugriff auf virtuelle Anweisungssätze und parallele Berechnungselemente von GPUs bereitstellen, um Rechenkerne auszuführen. In mindestens einer Ausführungsform kann die Plattform für paralleles Berechnen 3730 einen Speicher einschließen, und in einigen Ausführungsformen kann ein Speicher zwischen mehreren Behältern und/oder zwischen verschiedenen Verarbeitungsaufgaben innerhalb eines einzelnen Behälters gemeinsam genutzt werden. In mindestens einer Ausführungsform können für mehrere Behälter und/oder für mehrere Prozesse innerhalb eines Behälters IPC-Aufrufe erzeugt werden, um dieselben Daten aus einem gemeinsam genutzten Speichersegment der parallelen Rechenplattform 3730 zu verwenden (z. B. wenn mehrere verschiedene Stufen einer Anwendung oder mehrere Anwendungen dieselben Informationen verarbeiten). In mindestens einer Ausführungsform können dieselben Daten an derselben Position eines Speichers für eine beliebige Anzahl von Verarbeitungsaufgaben (z. B. zur gleichen Zeit, zu verschiedenen Zeiten usw.) verwendet werden, anstatt eine Kopie der Daten zu erstellen und die Daten an verschiedene Positionen im Speicher zu verschieben (z. B. eine Lese-/Schreiboperation). In mindestens einer Ausführungsform kann die Information über die neue Position der Daten, die als Ergebnis der Verarbeitung erzeugt wurden, gespeichert und von verschiedenen Anwendungen gemeinsam genutzt werden. In mindestens einer Ausführungsform kann die Position von Daten und die Position von aktualisierten oder geänderten Daten Teil einer Definition sein, wie eine Nutzlast innerhalb von Behältern zu verstehen ist.
In mindestens einer Ausführungsform können die KI-Dienste 3718 genutzt werden, um Ableitungen für die Ausführung von maschinellen Lernmodellen durchzuführen, die Anwendungen zugeordnet sind (z. B. mit der Aufgabe, eine oder mehrere Verarbeitungsaufgaben einer Anwendung durchzuführen). In mindestens einer Ausführungsform können die KI-Dienste 3718 das KI-System 3724 nutzen, um maschinelle Lernmodelle (z. B. neuronale Netze wie CNNs) für Segmentierung, Rekonstruktion, Objekterkennung, Merkmalserkennung, Klassifizierung und/oder andere Ableitungsaufgaben auszuführen. In mindestens einer Ausführungsform können Anwendungen der Ausführungsform(en) 3710 eines oder mehrere der Ausgabemodelle 3616 aus dem Trainingssystem 3604 und/oder andere Modelle von Anwendungen verwenden, um Ableitungen auf Bildgebungsdaten (z. B. DICOM-Daten, RIS-Daten, CIS-Daten, REST-konforme Daten, RPC-Daten, Rohdaten usw.) durchzuführen. In mindestens einer Ausführungsform können zwei oder mehr Beispiele für die Ableitung unter Verwendung des Anwendungsorchestrierungssystems 3728 (z. B. eines Schedulers) verfügbar sein. In mindestens einer Ausführungsform kann eine erste Kategorie einen Pfad mit hoher Priorität/geringer Latenz einschließen, über den höhere Servicegrad-Vereinbarungen erreicht werden können, z. B. für das Durchführen von Ableitungen bei dringenden Anfragen während eines Notfalls oder für einen Radiologen während der Diagnose. In mindestens einer Ausführungsform kann eine zweite Kategorie einen Pfad mit Standardpriorität einschließen, der für Anfragen verwendet werden kann, die nicht dringend sind oder bei denen die Analyse zu einem späteren Zeitpunkt durchgeführt werden kann. In mindestens einer Ausführungsform kann das System zur Anwendungsorchestrierung 3728 Ressourcen (z. B. Dienste 3620 und/oder Hardware 3622) basierend auf Prioritätspfaden für verschiedene Ableitungsaufgaben der Kl-Dienste 3718 verteilen.
In mindestens einer Ausführungsform kann eine gemeinsam genutzte Speicherung an die KI-Dienste 3718 im System 3700 befestigt werden. In mindestens einer Ausführungsform kann die gemeinsam genutzte Speicherung als Cache (oder eine andere Art von Speichervorrichtung) fungieren und dazu verwendet werden, Ableitungsanfragen von Anwendungen zu verarbeiten. In mindestens einer Ausführungsform kann eine Ableitungsanfrage von einer Reihe von API-Instanzen des Auslösungssystems 3606 empfangen werden, und eine oder mehrere Instanzen können ausgewählt werden (z. B. zur optimalen Anpassung, zum Lastausgleich usw.), um eine Anfrage zu verarbeiten. In mindestens einer Ausführungsform kann zur Verarbeitung einer Anfrage eine Anfrage in eine Datenbank eingedrungen sein, ein Modell für maschinelles Lernen kann sich in der Modellregistrierung 3624 befinden, wenn es sich nicht bereits in einem Cache befindet, ein Validierungsschritt kann sicherstellen, dass ein geeignetes Modell für maschinelles Lernen in einen Cache (z. B. eine gemeinsame Speicherung) geladen wird, und/oder eine Kopie eines Modells kann in einem Cache gespeichert werden. In mindestens einer Ausführungsform kann ein Planer (z. B. der Pipeline-Manager 3712) verwendet werden, um eine Anwendung zu starten, auf die in einer Anfrage verwiesen wird, wenn eine Anwendung noch nicht läuft oder wenn es nicht genügend Instanzen einer Anwendung gibt. In mindestens einer Ausführungsform kann ein Ableitungsserver gestartet werden, wenn er noch nicht zum Ausführen eines Modells gestartet ist. In mindestens einer Ausführungsform kann eine beliebige Anzahl von Ableitungsservern pro Modell gestartet werden. In mindestens einer Ausführungsform können in einem Pull-Modell, in dem die Ableitungsserver geclustert sind, die Modelle zwischengespeichert werden, wenn ein Lastausgleich vorteilhaft ist. In mindestens einer Ausführungsform können Ableitungsserver statisch in entsprechende, verteilte Server geladen werden.
In mindestens einer Ausführungsform kann die Ableitung mit Hilfe eines Inferenzservers durchgeführt werden, der in einem Behälter läuft. In mindestens einer Ausführungsform kann eine Instanz eines Ableitungs-Servers einem Modell (und gegebenenfalls einer Vielzahl von Versionen eines Modells) zugeordnet sein. In mindestens einer Ausführungsform kann eine neue Instanz eines Inferenzservers geladen werden, wenn eine Anfrage zum Durchführen von Ableitungen für ein Modell empfangen wird und diese Instanz noch nicht vorhanden ist. In mindestens einer Ausführungsform kann beim Starten eines Inferenzservers ein Modell an einen Inferenzserver übergeben werden, so dass ein und derselbe Behälter zur Bedienung verschiedener Modelle verwendet werden kann, solange der Inferenzserver als eine andere Instanz läuft.
In mindestens einer Ausführungsform kann während der Ausführung einer Anwendung eine Ableitungsanforderung für eine bestimmte Anwendung empfangen werden, und ein Behälter (z. B. der eine Instanz eines Ableitungs-Servers beherbergt) kann geladen werden (falls noch nicht geschehen), und es kann eine Startprozedur aufgerufen werden. In mindestens einer Ausführungsform kann die Vorverarbeitungslogik in einem Behälter die eingehenden Daten laden, dekodieren und/oder zusätzliche Vorverarbeitungen durchführen (z. B. unter Verwendung von CPU(s) und/oder GPU(s)). In mindestens einer Ausführungsform kann ein Behälter, sobald die Daten für die Ableitung hergestellt sind, die Ableitung nach Bedarf an den Daten durchführen. In mindestens einer Ausführungsform kann dies einen einzigen Ableitungsaufruf für ein Bild (z. B. ein Handröntgenbild) einschließen oder eine Ableitung für Hunderte von Bildern (z. B. ein Brust-CT) erfordern. In mindestens einer Ausführungsform kann eine Anwendung die Ergebnisse vor der Fertigstellung zusammenfassen, was ohne Einschränkung einen einzelnen Konfidenzgrad, eine Segmentierung auf Pixelebene, eine Segmentierung auf Voxel-Ebene, das Erzeugen einer Visualisierung oder das Erzeugen von Text zur Zusammenfassung der Ergebnisse einschließen kann. In mindestens einer Ausführungsform können verschiedenen Modellen oder Anwendungen unterschiedliche Prioritäten zugewiesen werden. Zum Beispiel können einige Modelle eine Echtzeitpriorität (TAT weniger als eine Minute) aufweisen, während andere eine niedrigere Priorität haben (z. B. TAT weniger als 10 Minuten). In mindestens einer Ausführungsform kann die Ausführungszeit des Modells von der anfragenden Institution oder Einrichtung aus gemessen werden und kann die Zeit für die Durchquerung des Netzes des Partners sowie die Ausführung über einen Ableitungsdienst einschließen.
In mindestens einer Ausführungsform kann die Übertragung von Anfragen zwischen den Diensten 3620 und den Ableitungsanwendungen hinter einem Software Development Kit (SDK) verborgen sein, und ein robuster Transport kann über eine Warteschlange bereitgestellt werden. In mindestens einer Ausführungsform wird eine Anfrage über eine API für eine individuelle Anwendung/Mieter-ID-Kombination in eine Warteschlange gestellt, und ein SDK zieht eine Anfrage aus einer Warteschlange und gibt eine Anfrage an eine Anwendung weiter. In mindestens einer Ausführungsform kann der Name einer Warteschlange in einer Umgebung bereitgestellt werden, aus der ein SDK sie abruft. In mindestens einer Ausführungsform kann die asynchrone Kommunikation über eine Warteschlange nützlich sein, da sie es jeder Instanz einer Anwendung ermöglicht, die Arbeit aufzunehmen, sobald sie verfügbar ist. In mindestens einer Ausführungsform können die Ergebnisse über eine Warteschlange zurück übertragen werden, um sicherzustellen, dass keine Daten verloren gehen. In mindestens einer Ausführungsform können Warteschlangen auch eine Segmentierung der Arbeit bereitstellen, da die Arbeit mit der höchsten Priorität an eine Warteschlange mit den meisten angeschlossenen Instanzen einer Anwendung gehen kann, während die Arbeit mit der niedrigsten Priorität an eine Warteschlange mit einer einzigen angeschlossenen Instanz gehen kann, die die Aufgaben in der empfangenen Reihenfolge verarbeitet. In mindestens einer Ausführungsform kann eine Anwendung auf einer GPU-beschleunigten Instanz laufen, die in der Cloud 3726 erzeugt wird, und ein Ableitungsdienst kann die Ableitung auf einer GPU durchführen.
In mindestens einer Ausführungsform können Visualisierungsdienste 3720 genutzt werden, um Visualisierungen für die Anzeige der Ausgaben von Anwendungen und/oder der Bereitstellungspipeline(s) 3710 zu erzeugen. In mindestens einer Ausführungsform können GPUs 3722 von Visualisierungsdiensten 3720 genutzt werden, um Visualisierungen zu erzeugen. In mindestens einer Ausführungsform können Rendering-Effekte, wie z. B. Raytracing, von den Visualisierungsdiensten 3720 implementiert werden, um eine höhere Qualität der Visualisierungen zu erzeugen. In mindestens einer Ausführungsform können die Visualisierungen ohne Einschränkung 2D-Bildwiedergaben, 3D-Volumenwiedergaben, 3D-Volumenrekonstruktionen, 2D-tomographische Scheiben, Virtual-Reality-Anzeigen, Augmented-Reality-Anzeigen usw. einschließen. In mindestens einer Ausführungsform können virtualisierte Umgebungen verwendet werden, um eine virtuelle interaktive Anzeige oder Umgebung (z. B. eine virtuelle Umgebung) für die Interaktion durch Benutzer eines Systems (z. B. Ärzte, Krankenschwestern, Radiologen usw.) zu erzeugen. In mindestens einer Ausführungsform können die Visualisierungsdienste 3720 einen internen Visualisierer, einen Bildgeber und/oder andere Rendering- oder Bildverarbeitungsfähigkeiten oder - funktionen (z. B. Raytracing, Rasterung, interne Optik usw.) einschließen.
In mindestens einer Ausführungsform kann die Hardware 3622 GPUs 3722, ein KI-System 3724, eine Cloud 3726 und/oder jede andere Hardware einschließen, die zum Ausführen des Trainingssystems 3604 und/oder des Auslösungssystems 3606 verwendet wird. In mindestens einer Ausführungsform können die GPUs 3722 (z. B. NVIDIAs TESLA und/oder QUADRO GPUs) eine beliebige Anzahl von GPUs einschließen, die zum Ausführen von Verarbeitungsaufgaben von Berechnungsdiensten 3716, KI-Diensten 3718, Visualisierungsdiensten 3720, anderen Diensten und/oder beliebigen Merkmalen oder Funktionen der Software 3618 verwendet werden können. Zum Beispiel können in Bezug auf die KI-Dienste 3718 GPUs 3722 verwendet werden, um Bildgebungsdaten (oder andere Datentypen, die von maschinellen Lernmodellen verwendet werden) vorzuverarbeiten, die Ausgaben von maschinellen Lernmodellen nachzubearbeiten und/oder Ableitungen durchzuführen (z. B. um maschinelle Lernmodelle auszuführen). In mindestens einer Ausführungsform können die Cloud 3726, das KI-System 3724 und/oder andere Komponenten des Systems 3700 GPUs 3722 verwenden. In mindestens einer Ausführungsform kann die Cloud 3726 eine GPU-optimierte Plattform für Deep Learning-Aufgaben einschließen. In mindestens einer Ausführungsform kann das KI-System 3724 GPUs verwenden, und die Cloud 3726 - oder zumindest ein Abschnitt, der mit Deep Learning oder Ableitung beauftragt ist - kann unter Verwendung eines oder mehrerer KI-Systeme 3724 ausgeführt werden. Obwohl die Hardware 3622 als diskrete Komponenten veranschaulicht wird, ist dies nicht als Einschränkung zu verstehen, und jede Komponente der Hardware 3622 kann mit jeder anderen Komponente der Hardware 3622 kombiniert oder von ihr genutzt werden.
In mindestens einer Ausführungsform kann das KI-System 3724 ein speziell entwickeltes Rechensystem (z. B. einen Supercomputer oder einen HPC) einschließen, das für Ableitungen, Deep Learning, maschinelles Lernen und/oder andere Aufgaben der künstlichen Intelligenz konfiguriert ist. In mindestens einer Ausführungsform kann das Kl-System 3724 (z. B. der DGX von NVIDIA) GPU-optimierte Software (z. B. einen Software-Stack) einschließen, die mit einer Vielzahl von GPUs 3722 ausgeführt werden kann, zusätzlich zu CPUs, RAM, Speicherung und/oder anderen Komponenten, Merkmalen oder Funktionen. In mindestens einer Ausführungsform können ein oder mehrere Kl-Systeme 3724 in der Cloud 3726 (z. B. in einem Rechenzentrum) implementiert werden, um einige oder alle KI-basierten Verarbeitungsaufgaben des Systems 3700 durchzuführen.
In mindestens einer Ausführungsform kann die Cloud 3726 eine GPUbeschleunigte Infrastruktur (z. B. NGC von NVIDIA) einschließen, die eine GPU-optimierte Plattform zum Ausführen von Verarbeitungsaufgaben des Systems 3700 bereitstellt. In mindestens einer Ausführungsform kann die Cloud 3726 ein oder mehrere KI-Systeme 3724 zum Durchführen einer oder mehrerer KI-basierter Aufgaben des Systems 3700 einschließen (z. B. als Hardwareabstraktions- und Skalierungsplattform). In mindestens einer Ausführungsform kann die Cloud 3726 mit dem System 3728 zur Anwendungsorchestrierung integriert werden, das mehrere GPUs nutzt, um eine nahtlose Skalierung und einen Lastausgleich zwischen und unter den Anwendungen und Diensten 3620 zu ermöglichen. In mindestens einer Ausführungsform kann die Cloud 3726 damit beauftragt werden, mindestens einige der Dienste 3620 des Systems 3700 auszuführen, einschließlich der hier beschriebenen Berechnungsdienste 3716, Kl-Dienste 3718 und/oder Visualisierungsdienste 3720. In mindestens einer Ausführungsform kann die Cloud 3726 kleine und große Ableitungen durchführen (z. B. NVIDIAs TENSOR RT), eine beschleunigte parallele Berechungs-API und -Plattform 3730 bereitstellen (z. B. NVIDIAs CUDA), ein System zur Anwendungsorchestrierung 3728 ausführen (z. B, KUBERNETES), eine Grafik-Rendering-API und -Plattform bereitstellen (z. B. für Raytracing, 2D-Grafik, 3D-Grafik und/oder andere Rendering-Techniken, um qualitativ hochwertigere Kinofilme zu erzeugen) und/oder andere Funktionen für das System 3700 bereitstellen.
In mindestens einer Ausführungsform kann die Cloud 3726 in dem Bestreben, die Vertraulichkeit der Patientendaten zu wahren (z. B. wenn Patientendaten oder - aufzeichnungen außerhalb der eigenen Räumlichkeiten verwendet werden sollen), ein Register einschließen - wie z. B. ein Deep Learning Behälter-Register. In mindestens einer Ausführungsform kann eine Registry Behälter für Instanziierungen von Anwendungen speichern, die Vorverarbeitungen, Nachverarbeitungen oder andere Verarbeitungen von Patientendaten durchführen. In mindestens einer Ausführungsform kann die Cloud 3726 Daten empfangen, die sowohl Patientendaten als auch Sensordaten in Behältern einschließen, die angeforderte Verarbeitung nur für die Sensordaten in diesen Behältern durchführen und dann eine resultierende Ausgabe und/oder Visualisierungen an geeignete Parteien und/oder Vorrichtungen (z. B. medizinische Vor-Ort-Vorrichtungen, die zur Visualisierung oder Diagnose verwendet werden) weiterleiten, ohne dass die Patientendaten extrahiert, gespeichert oder anderweitig zugänglich gemacht werden müssen. In mindestens einer Ausführungsform wird die Vertraulichkeit der Patientendaten in Übereinstimmung mit dem HIPAA und/oder anderen Datenschutzbestimmungen gewahrt.
In mindestens einer Ausführungsform wird mindestens eine auf 37 gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt das Trainingssystem 3704 und/oder das Auslösungssystem 3706 mindestens einen auf 1 bezogenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform trainiert das Trainingssystem 3704 mindestens ein untrainiertes oder teilweise trainiertes neuronales Netz unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ), das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie auf eine oder mehrere der 1-6 bezogen. In mindestens einer Ausführungsform führt das Auslösungssystem 3706 mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie dies bezogen auf eine oder mehrere der 1-6 beschrieben ist. In mindestens einer Ausführungsform schließt mindestens eine Komponente der Hardware 3722 mindestens einen auf 1 bezogenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116).
In mindestens einer Ausführungsform kann die Ausführungspipeline 3710A von 38 einen CT-Scanner 3802 einschließen, der Bildgebungsdaten eines Patienten oder Subjekts erzeugt. In mindestens einer Ausführungsform können die Bildgebungsdaten des CT-Scanners 3802 auf einem oder mehreren PACS-Servern 3804 gespeichert werden, die einer Einrichtung zugeordnet sind, in der sich der CT-Scanner 3802 befindet. In mindestens einer Ausführungsform kann (können) der (die) PACS-Server 3804 Software- und/oder Hardware-Komponenten einschließen, die direkt mit den Bildgebern (z. B. dem CT-Scanner 3802) in einer Einrichtung zusammenarbeiten können. In mindestens einer Ausführungsform kann der DICOM-Adapter 3702B das Senden und Empfangen von DICOM-Aufgaben unter Verwendung von DICOM-Protokollen ermöglichen. In mindestens einer Ausführungsform kann der DICOM-Adapter 3702B bei der Herstellung oder Konfiguration von DICOM-Daten von PACS-Server(n) 3804 für die Verwendung durch die Bereitstellungspipeline 3710A helfen. In mindestens einer Ausführungsform kann der Pipeline-Manager 3712 nach der Verarbeitung der DICOM-Daten über den DICOM-Adapter 3702B die Daten an die Bereitstellungspipeline 3710A weiterleiten. In mindestens einer Ausführungsform kann der DICOM-Leser 3806 Bilddateien und alle zugeordneten Metadaten aus DICOM-Daten extrahieren (z. B. Sinogramm-Rohdaten, wie in der Visualisierung 3816A veranschaulicht). In mindestens einer Ausführungsform können die extrahierten Arbeitsdateien in einem Cache gespeichert werden, damit sie von anderen Anwendungen in der Bereitstellungspipeline 3710A schneller verarbeitet werden können. In mindestens einer Ausführungsform kann, sobald das DICOM-Lesegerät 3806 die Extraktion und/oder Speicherung der Daten beendet hat, ein Signal der Fertigstellung an die Pipeline-Verwaltung 3712 übermittelt werden. In mindestens einer Ausführungsform kann der Pipeline-Manager 3712 dann eine oder mehrere andere Anwendungen oder Behälter in der Bereitstellungspipeline 3710A einleiten oder aufrufen.
In mindestens einer Ausführungsform kann die Anwendung CT-Rekonstruktion 3808 und/oder der Behälter ausgeführt werden, sobald Daten (z. B. Sinogramm-Rohdaten) zur Verarbeitung durch die Anwendung CT-Rekonstruktion 3808 verfügbar sind. In mindestens einer Ausführungsform kann die CT-Rekonstruktion 3808 Sinogramm-Rohdaten aus einem Cache lesen, eine Bilddatei aus Sinogramm-Rohdaten rekonstruieren (z. B. wie in der Visualisierung 3816B veranschaulicht) und die resultierende Bilddatei in einem Cache speichern. In mindestens einer Ausführungsform kann dem Pipeline-Manager 3712 bei Abschluss der Rekonstruktion signalisiert werden, dass die Rekonstruktion abgeschlossen ist. In mindestens einer Ausführungsform kann, sobald die Rekonstruktion abgeschlossen ist und eine rekonstruierte Bilddatei in einem Cache (oder einer anderen Vorrichtung) gespeichert ist, die Anwendung und/oder der Behälter für die Organsegmentierung 3810 vom Pipeline-Manager 3712 ausgelöst werden. In mindestens einer Ausführungsform kann die Anwendung und/oder der Behälter der Organsegmentierung 3810 eine Bilddatei aus einem Cache lesen, eine Bilddatei normalisieren oder in ein für die Ableitung geeignetes Format umwandeln (z. B. eine Bilddatei in eine Eingabeauflösung eines maschinellen Lernmodells umwandeln) und die Ableitung gegen ein normalisiertes Bild durchführen. In mindestens einer Ausführungsform kann die Anwendung Organsegmentierung 3810 und/oder der Behälter auf Dienste 3620 zurückgreifen, um die Ableitung auf einem normalisierten Bild durchzuführen, und der Pipeline-Manager 3712 und/oder das System zur Anwendungsorchestrierung 3728 kann die Nutzung der Dienste 3620 durch die Anwendung Organsegmentierung 3810 und/oder den Behälter erleichtern. In mindestens einer Ausführungsform kann die Anwendung und/oder der Behälter der Organsegmentierung 3810 beispielsweise die KI-Dienste 3718 nutzen, um eine Ableitung auf einem normalisierten Bild durchzuführen, und die KI-Dienste 3718 können die Hardware 3622 (z. B. das KI-System 3724) nutzen, um die KI-Dienste 3718 auszuführen. In mindestens einer Ausführungsform kann das Ergebnis einer Ableitung eine Maskendatei sein (z. B. wie in der Visualisierung 3816C veranschaulicht), die in einem Cache (oder einer anderen Speichervorrichtung) gespeichert werden kann.
In mindestens einer Ausführungsform kann, sobald Anwendungen, die DICOM-Daten und/oder aus DICOM-Daten extrahierte Daten verarbeiten, die Verarbeitung abgeschlossen haben, ein Signal für den Pipeline-Manager 3712 erzeugt werden. In mindestens einer Ausführungsform kann der Pipeline-Manager 3712 dann den DICOM-Writer 3812 ausführen, um die Ergebnisse aus einem Cache (oder einer anderen Speichervorrichtung) zu lesen und die Ergebnisse in ein DICOM-Format (z. B. als DICOM-Ausgabe 3814) zu verpacken, damit sie von den Benutzern in einer Einrichtung, die eine Anfrage erzeugt haben, verwendet werden können. In mindestens einer Ausführungsform kann die DICOM-Ausgabe 3814 dann an den DICOM-Adapter 3702B übertragen werden, um die DICOM-Ausgabe 3814 für die Speicherung auf dem/den PACS-Server(n) 3804 herzustellen (z. B. zur Ansicht durch einen DICOM-Viewer in einer Einrichtung). In mindestens einer Ausführungsform können als Reaktion auf eine Anforderung zur Rekonstruktion und Segmentierung Visualisierungen 3816B und 3816C erzeugt werden, die einem Benutzer für Diagnosen, Forschung und/oder andere Zwecke zur Verfügung stehen.
Obwohl als aufeinanderfolgende Anwendung in der Bereitstellungspipeline 3710A veranschaulicht, können die Anwendungen CT-Rekonstruktion 3808 und Organsegmentierung 3810 in mindestens einer Ausführungsform parallel verarbeitet werden. In mindestens einer weiteren Ausführungsform, in der die Anwendungen keine Abhängigkeiten voneinander aufweisen und die Daten für jede Anwendung verfügbar sind (z. B. nachdem der DICOM-Leser 3806 die Daten extrahiert hat), können die Anwendungen gleichzeitig, im Wesentlichen gleichzeitig oder mit einer gewissen Überlappung ausgeführt werden. In mindestens einer Ausführungsform, in der zwei oder mehr Anwendungen ähnliche Dienste 3620 benötigen, kann ein Planer des Systems 3700 für den Lastausgleich und die Verteilung von Rechen- oder Verarbeitungsressourcen zwischen und unter den verschiedenen Anwendungen verwendet werden. In mindestens einer Ausführungsform kann in einigen Ausführungsformen die parallele Rechenplattform 3730 verwendet werden, um die parallele Verarbeitung von Anwendungen durchzuführen, um die Laufzeit der Deployment-Pipeline 3710A zu verkürzen und Ergebnisse in Echtzeit bereitzustellen.
In mindestens einer Ausführungsform und unter Bezugnahme auf die 39A-39B kann das Auslösungssystem 3606 als ein oder mehrere virtuelle Instrumente implementiert werden, um verschiedene Funktionalitäten - wie Bildverarbeitung, Segmentierung, Verbesserung, Kl, Visualisierung und Ableitung - mit Bildgebern (z. B. CT-Scannern, Röntgengeräten, MRI-Geräten usw.), Sequenzierungsvorrichtungen, Genomikvorrichtungen und/oder anderen Gerätetypen durchzuführen. In mindestens einer Ausführungsform kann das System 3700 die Erstellung und Bereitstellung virtueller Instrumente ermöglichen, die eine softwaredefinierte Bereitstellungspipeline 3710 einschließen können, die von einem oder mehreren Geräten erzeugte rohe/unverarbeitete Eingabedaten empfangen und verarbeitete/rekonstruierte Daten ausgeben kann. In mindestens einer Ausführungsform können Bereitstellungspipelines 3710 (z. B. 3710A und 3710B), die virtuelle Instrumente darstellen, Intelligenz in eine Pipeline implementieren, z. B. durch die Nutzung von Modellen für maschinelles Lernen, um einem System containerisierte Ableitungsunterstützung bereitzustellen. In mindestens einer Ausführungsform können virtuelle Instrumente eine beliebige Anzahl von Behältern ausführen, von denen jeder Instanzen von Anwendungen einschließt. In mindestens einer Ausführungsform, z. B. wenn Echtzeitverarbeitung erwünscht ist, können Bereitstellungspipelines 3710, die virtuelle Instrumente repräsentieren, statisch sein (z. B. können Behälter und/oder Anwendungen festgelegt werden), während in anderen Beispielen Behälter und/oder Anwendungen für virtuelle Instrumente aus einem Pool von Anwendungen oder Ressourcen (z. B. innerhalb einer Behälterregistrierung) ausgewählt werden können (z. B. auf einer Basis pro Anforderung).
In mindestens einer Ausführungsform kann das System 3700 als ein oder mehrere virtuelle Instrumente vor Ort in einer Einrichtung instanziiert oder ausgeführt werden, beispielsweise in einem Rechensystem, das neben einer radiologischen Maschine, einer Bildgebungsvorrichtung und/oder einem anderen Gerätetyp in einer Einrichtung aufgestellt ist oder anderweitig mit diesen kommuniziert. In mindestens einer Ausführungsform kann eine Vor-Ort-Installation jedoch in einem Rechensystem einer Vorrichtung selbst (z. B. einem in eine Bildgebungsvorrichtung integrierten Rechensystem), in einem lokalen Rechenzentrum (z. B. einem Rechenzentrum vor Ort) und/oder in einer Cloud-Umgebung (z. B. in der Cloud 3726) instanziiert oder ausgeführt werden. In mindestens einer Ausführungsform kann das Auslösungssystem 3606, das als virtuelles Instrument arbeitet, in einigen Beispielen von einem Supercomputer oder einem anderen HPC-System instanziiert werden. In mindestens einer Ausführungsform kann die Installation vor Ort die Nutzung hoher Bandbreiten (z. B. über lokale Kommunikationsschnittstellen mit höherem Durchsatz, wie RF over Ethernet) für die Echtzeitverarbeitung ermöglichen. In mindestens einer Ausführungsform kann die Verarbeitung in Echtzeit oder nahezu in Echtzeit besonders nützlich sein, wenn ein virtuelles Instrument ein Ultraschallgerät oder eine andere Bildgebungsmodalität unterstützt, bei der sofortige Visualisierungen erwartet oder für genaue Diagnosen und Analysen benötigt werden. In mindestens einer Ausführungsform kann eine Cloud-Computing-Architektur in der Lage sein, dynamisches Bursting zu einem Cloud-Computing-Service-Provider oder einem anderen Rechen-Cluster durchzuführen, wenn die lokale Nachfrage die vor Ort vorhandene Kapazität oder Fähigkeit übersteigt. In mindestens einer Ausführungsform kann eine Cloud-Architektur, wenn sie implementiert ist, für das Training von neuronalen Netzen oder anderen maschinellen Lernmodellen abgestimmt werden, wie hierin beschrieben, bezogen auf das Trainingssystem 3604. In mindestens einer Ausführungsform können maschinelle Lernmodelle mit Hilfe von Trainingspipelines kontinuierlich lernen und verbessert werden, wenn sie zusätzliche Daten von den von ihnen unterstützten Vorrichtungen verarbeiten. In mindestens einer Ausführungsform können virtuelle Instrumente kontinuierlich verbessert werden, indem zusätzliche Daten, neue Daten, bestehende maschinelle Lernmodelle und/oder neue oder aktualisierte maschinelle Lernmodelle verwendet werden.
In mindestens einer Ausführungsform kann ein Rechensystem einen Teil oder die gesamte hier beschriebene Hardware 3622 einschließen, und die Hardware 3622 kann auf verschiedene Arten verteilt werden, z. B. innerhalb einer Vorrichtung, als Teil einer Rechenvorrichtung, die mit einer Vorrichtung gekoppelt ist und sich in deren Nähe befindet, in einem lokalen Rechenzentrum in einer Einrichtung und/oder in der Cloud 3726. In mindestens einer Ausführungsform, da das Auslösungssystem 3606 und die zugehörigen Anwendungen oder Behälter in Software erstellt werden (z. B. als diskrete containerisierte Instanziierungen von Anwendungen), können das Verhalten, die Operation und die Konfiguration virtueller Instrumente sowie die von den virtuellen Instrumenten erzeugten Ausgaben nach Wunsch modifiziert oder angepasst werden, ohne dass die Rohausgabe eines von einem virtuellen Instrument unterstützten Geräts verändert oder angepasst werden muss.
In mindestens einer Ausführungsform wird mindestens eine Komponente, die auf 38 gezeigt oder beschrieben ist, verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt mindestens eine auf 38 gezeigte oder beschriebene Komponente mindestens einen auf 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform führt mindestens eine in 38 gezeigte oder beschriebene Komponente mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, die zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie in Bezug auf eine oder mehrere der 1-6 beschrieben.
In mindestens einer Ausführungsform kann der Prozess 3900 den Empfang von Bildgebungsdaten von einer Ultraschallvorrichtung 3902 einschließen. In mindestens einer Ausführungsform können die Bildgebungsdaten auf einem oder mehreren PACS-Servern in einem DICOM-Format (oder einem anderen Format, wie z. B. RIS, CIS, REST-konform, RPC, Rohdaten usw.) gespeichert sein und vom System 3700 zur Verarbeitung durch die Ausführungsform 3710 empfangen werden, die als virtuelles Instrument (z. B. ein virtueller Ultraschall) für die Ultraschallvorrichtung 3902 ausgewählt oder angepasst wurde. In mindestens einer Ausführungsform können die Bildgebungsdaten direkt von einer Bildgebungsvorrichtung (z. B. der Ultraschallvorrichtung 3902) empfangen und von einem virtuellen Instrument verarbeitet werden. In mindestens einer Ausführungsform kann ein Wandler oder ein anderer Signalwandler, der kommunikativ zwischen einer Bildgebungsvorrichtung und einem virtuellen Instrument gekoppelt ist, von einer Bildgebungsvorrichtung erzeugte Signaldaten in Bilddaten umwandeln, die von einem virtuellen Instrument verarbeitet werden können. In mindestens einer Ausführungsform können Rohdaten und/oder Bildgebungsdaten auf das DICOM-Lesegerät 3806 aufgebracht werden, um Daten zur Verwendung durch Anwendungen oder Behälter der Bereitstellungspipeline 3710B zu extrahieren. In mindestens einer Ausführungsform kann das DICOM-Lesegerät 3806 die Datenerweiterungsbibliothek 3914 (z. B. DALI von NVIDIA) als Dienst 3620 (z. B. als einer der Berechnungsdienste 3716) nutzen, um Daten zu extrahieren, in der Größe zu verändern, neu zu skalieren und/oder anderweitig für die Verwendung durch Anwendungen oder Behälter herzustellen.
In mindestens einer Ausführungsform kann nach der Herstellung der Daten eine Anwendung und/oder ein Behälter 3906 ausgeführt werden, um die Daten der Ultraschallvorrichtung 3902 in eine Bilddatei zu rekonstruieren. In mindestens einer Ausführungsform kann nach der Rekonstruktion 3906 oder gleichzeitig mit der Rekonstruktion 3906 eine Anwendung und/oder ein Behälter zur Erkennung 3908 für die Erkennung von Anomalien, Aufgaben zur Erkennung von Objekten, Merkmalen und/oder anderen Aufgaben zur Erkennung in Relation zu den Daten ausgeführt werden. In mindestens einer Ausführungsform kann eine während der Rekonstruktion 3906 erzeugte Bilddatei während der Erkennung 3908 verwendet werden, um Anomalien, Aufgaben, Merkmale usw. zu identifizieren. In mindestens einer Ausführungsform kann die Anwendung zur Erkennung 3908 eine Ableitungsengine 3916 (z. B. als einer der Kl-Dienste 3718) nutzen, um Ableitungen auf Daten durchzuführen, um Erkennungen zu erzeugen. In mindestens einer Ausführungsform können ein oder mehrere maschinelle Lernmodelle (z. B. aus dem Trainingssystem 3604) von der Anwendung Erkennung 3908 ausgeführt oder aufgerufen werden.
In mindestens einer Ausführungsform können nach Abschluss der Rekonstruktion 3906 und/oder der Erkennung 3908 die von diesen Anwendungen und/oder Behältern ausgegebenen Daten verwendet werden, um Visualisierungen 3910 zu erzeugen, wie z. B. die Visualisierung 3912 (z. B. eine Graustufenausgabe), die auf einer Workstation oder einem Anzeigeterminal angezeigt wird. In mindestens einer Ausführungsform kann die Visualisierung es einem Techniker oder einem anderen Benutzer ermöglichen, die Ergebnisse der Einsatzpipeline 3710B in Bezug auf die Ultraschallvorrichtung 3902 zu visualisieren. In mindestens einer Ausführungsform kann die Visualisierung 3910 durch den Einsatz einer Komponente 3918 des Systems 3700 (z. B. einen der Visualisierungsdienste 3720) ausgeführt werden. In mindestens einer Ausführungsform kann die Renderkomponente 3918 einen 2D-, OpenGL- oder Raytracing-Dienst ausführen, um die Visualisierung 3912 zu erzeugen.
In mindestens einer Ausführungsform wird mindestens eine auf 39A gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt mindestens eine auf 39A gezeigte oder beschriebene Komponente mindestens einen auf 1 beschriebenen Aspekt ein und/oder führtihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform führt mindestens eine auf 39A gezeigte oder beschriebene Komponente mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, die zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie in Bezug auf eine oder mehrere der 1-6 beschrieben.
In mindestens einer Ausführungsform kann der Prozess 3920 den CT-Scanner 3922 einschließen, der Rohdaten erzeugt, die vom DICOM-Lesegerät 3806 empfangen werden können (z. B. direkt, über einen PACS-Server 3804, nach der Verarbeitung usw.). In mindestens einer Ausführungsform kann ein virtueller CT (instanziiert durch die Bereitstellungspipeline 3710C) eine erste Echtzeitpipeline zur Überwachung eines Patienten (z. B. Erkennung von Patientenbewegungen KI 3926) und/oder zur Anpassung oder Optimierung der Belichtung des CT-Scanners 3922 (z. B. unter Verwendung der Belichtungssteuerung KI 3924) einschließen. In mindestens einer Ausführungsform können eine oder mehrere der Anwendungen (z. B. 3924 und 3926) einen Dienst 3620 nutzen, wie z. B. KI-Dienst(e) 3718. In mindestens einer Ausführungsform können die Ausgaben der Kl-Anwendung 3924 (oder des Behälters) zur Kontrolle der Belichtung und/oder der Kl-Anwendung 3926 (oder des Behälters) zur Erkennung von Patientenbewegungen als Feedback an den CT-Scanner 3922 und/oder einen Techniker verwendet werden, um die Belichtung (oder andere Einstellungen des CT-Scanners 3922) anzupassen und/oder einen Patienten darüber zu informieren, sich weniger zu bewegen.
In mindestens einer Ausführungsform kann die Bereitstellungspipeline 3710C eine Nicht-Echtzeit-Pipeline zur Analyse von Daten einschließen, die vom CT-Scanner 3922 erzeugt wurden. In mindestens einer Ausführungsform kann eine zweite Pipeline die Anwendung und/oder den Behälter für die CT-Rekonstruktion 3808, die Anwendung und/oder den Behälter für die Groberkennung KI 3928, die Anwendung und/oder den Behälter für die Feinerkennung KI 3932 (z. B. wenn bestimmte Ergebnisse von der Groberkennung KI 3928 erkannt werden), die Anwendung und/oder den Behälter für die Visualisierung 3930 und die Anwendung und/oder den Behälter für den DICOM-Writer 3812 (und/oder einen anderen Datentyp, wie RIS, CIS, REST-konform, RPC, raw usw.) einschließen. In mindestens einer Ausführungsform können die vom CT-Scanner 3922 erzeugten Rohdaten durch die Pipelines der Deployment-Pipeline 3710C (instanziiert als virtuelles CT-Instrument) geleitet werden, um Ergebnisse zu erzeugen. In mindestens einer Ausführungsform können die Ergebnisse vom DICOM-Writer 3812 zur Anzeige übertragen und/oder auf dem/den PACS-Server(n) 3804 zum späteren Abrufen, Analysieren oder Anzeigen durch einen Techniker, Arzt oder anderen Benutzer gespeichert werden.
In mindestens einer Ausführungsform wird mindestens eine auf 39B gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt mindestens eine auf 39B gezeigte oder beschriebene Komponente mindestens einen auf 1 beschriebenen Aspekt ein und/oder führtihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform führt mindestens eine auf 39B gezeigte oder beschriebene Komponente mindestens eine Ableitungsoperation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, die zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie in Bezug auf eine oder mehrere der 1-6 beschrieben.
In mindestens einer Ausführungsform kann das Modelltraining 3614 das erneute Trainieren oder Aktualisieren eines Ausgangsmodells 4004 (z. B. eines vorab trainierten Modells) unter Verwendung neuer Trainingsdaten (z. B. neuer Eingabedaten, wie des Kundendatensatzes 4006, und/oder neuer, den Eingabedaten zugeordneter Wahrheitsdaten) einschließen. In mindestens einer Ausführungsform kann zum erneuten Trainieren oder Aktualisieren des Ausgangsmodells 4004 die Ausgangs- oder Verlustschicht(en) des Ausgangsmodells 4004 zurückgesetzt oder gelöscht und/oder durch eine aktualisierte oder neue Ausgangs- oder Verlustschicht(en) ersetzt werden. In mindestens einer Ausführungsform kann das anfängliche Modell 4004 bereits fein abgestimmte Parameter (z. B. Gewichte und/oder Vorspannungen) aufweisen, die vom vorherigen Training übrig geblieben sind, so dass das Training oder die Umschulung 3614 nicht so lange dauert oder so viel Verarbeitung erfordert wie das Training eines Modells von Grund auf. In mindestens einer Ausführungsform können während des Modelltrainings 3614 durch Zurücksetzen oder Ersetzen der Ausgangs- oder Verlustschicht(en) des Ausgangsmodells 4004 die Parameter aktualisiert und für einen neuen Datensatz neu abgestimmt werden, basierend auf Verlustberechnungen, die der Genauigkeit der Ausgangs- oder Verlustschicht(en) beim Erzeugen von Vorhersagen für einen neuen Kundendatensatz 4006 (z. B. Bildgeberdaten 3608 von 36 ) zugeordnet sind.
In mindestens einer Ausführungsform können vortrainierte Modelle 3706 in einem Datenspeicher oder einer Registrierung gespeichert werden (z. B. in der Modellregistrierung 3624 von 36 ). In mindestens einer Ausführungsform können die vortrainierten Modelle 3706 zumindest teilweise in einer oder mehreren anderen Einrichtungen als der Einrichtung, die den Prozess 4000 ausführt, trainiert worden sein. In mindestens einer Ausführungsform können die vortrainierten Modelle 3706 zum Schutz der Privatsphäre und der Rechte von Patienten, Subjekten oder Kunden verschiedener Einrichtungen vor Ort mit vor Ort erzeugten Kunden- oder Patientendaten trainiert worden sein. In mindestens einer Ausführungsform können die vortrainierten Modelle 3706 mit Hilfe der Cloud 3726 und/oder anderer Hardware 3622 trainiert werden, aber vertrauliche, datenschutzrechtlich geschützte Patientendaten dürfen nicht an Komponenten der Cloud 3726 (oder anderer außer Haus befindlicher Hardware) übertragen werden, von diesen genutzt werden oder für diese zugänglich sein. In mindestens einer weiteren Ausführungsform, in der ein vortrainiertes Modell 3706 mit Patientendaten von mehr als einer Einrichtung trainiert wird, kann das vortrainierte Modell 3706 individuell für jede Einrichtung trainiert worden sein, bevor es mit Patienten- oder Kundendaten einer anderen Einrichtung trainiert wird. In mindestens einer Ausführungsform, z. B. wenn Kunden- oder Patientendaten aus Datenschutzgründen freigegeben wurden (z. B. durch eine Verzichtserklärung, für experimentelle Zwecke usw.) oder wenn Kunden- oder Patientendaten in einen öffentlichen Datensatz eingeschlossen sind, können Kunden- oder Patientendaten aus einer beliebigen Anzahl von Einrichtungen verwendet werden, um das vortrainierte Modell 3706 vor Ort und/oder außerhalb der Einrichtung zu trainieren, z. B. in einem Rechenzentrum oder einer anderen Cloud-Computing-Infrastruktur.
In mindestens einer Ausführungsform kann ein Benutzer bei der Auswahl von Anwendungen für die Verwendung in Bereitstellungspipelines 3710 auch Modelle für maschinelles Lernen auswählen, die für bestimmte Anwendungen verwendet werden sollen. In mindestens einer Ausführungsform kann ein Benutzer kein Modell zur Verwendung aufweisen, so dass er ein vortrainiertes Modell 3706 zur Verwendung mit einer Anwendung auswählen kann. In mindestens einer Ausführungsform ist das vortrainierte Modell 3706 möglicherweise nicht dafür optimiert, genaue Ergebnisse für den Kundendatensatz 4006 einer Einrichtung eines Benutzers zu erzeugen (z. B. basierend auf der Vielfalt der Patienten, der Demografie, den Arten der verwendeten medizinischen Bildgebungsvorrichtungen usw.). In mindestens einer Ausführungsform kann das vortrainierte Modell 3706 vor der Bereitstellung in der Bereitstellungspipeline 3710 zur Verwendung mit einer oder mehreren Anwendungen aktualisiert, neu trainiert und/oder für die Verwendung in einer entsprechenden Einrichtung feinabgestimmt werden.
In mindestens einer Ausführungsform kann ein Benutzer das vorverarbeitete Modell 3706 auswählen, das aktualisiert, neu trainiert und/oder feinabgestimmt werden soll, und das vorverarbeitete Modell 3706 kann als Ausgangsmodell 4004 für das Trainingssystem 3604 innerhalb des Prozesses 4000 bezeichnet werden. In mindestens einer Ausführungsform kann der Kundendatensatz 4006 (z. B. Bildgebungsdaten, Genomikdaten, Sequenzierungsdaten oder andere Datentypen, die von Vorrichtungen in einer Einrichtung erzeugt werden) verwendet werden, um das Modelltraining 3614 (das ohne Einschränkung das Transferlernen einschließen kann) am Ausgangsmodell 4004 durchzuführen, um ein verfeinertes Modell 4012 zu erzeugen. In mindestens einer Ausführungsform können vom Trainingssystem 3604 Grundwahrheitsdaten erzeugt werden, die dem Kundendatensatz 4006 entsprechen. In mindestens einer Ausführungsform können die Grundwahrheitsdaten zumindest teilweise von Klinikern, Wissenschaftlern, Ärzten, Praktikern in einer Einrichtung erzeugt werden (z. B. als beschriftete Klinikdaten 3612 in 36 ).
In mindestens einer Ausführungsform kann die KI-gestützte Annotation 3610 in einigen Beispielen verwendet werden, um Basisdaten zu erzeugen. In mindestens einer Ausführungsform kann die KI-unterstützte Annotation 3610 (z. B. unter Verwendung eines KI-unterstützten Annotations-SDKs) maschinelle Lernmodelle (z. B. neuronale Netze) nutzen, um vorgeschlagene oder vorhergesagte Grundwahrheitsdaten für einen Kundendatensatz zu erzeugen. In mindestens einer Ausführungsform kann der Benutzer 4010 Annotationswerkzeuge innerhalb einer Benutzeroberfläche (einer grafischen Benutzeroberfläche (GUI)) auf der Rechenvorrichtung 4008 verwenden.
In mindestens einer Ausführungsform kann der Benutzer 4010 über die Rechenvorrichtung 4008 mit einer grafischen Benutzeroberfläche interagieren, um Anmerkungen oder automatische Anmerkungen zu bearbeiten oder fein abzustimmen. In mindestens einer Ausführungsform kann eine Polygonbearbeitungsfunktion verwendet werden, um Scheitelpunkte eines Polygons an genauere oder feiner abgestimmte Positionen zu verschieben.
In mindestens einer Ausführungsform können, sobald der Kundendatensatz 4006 Grundwahrheitsdaten aufweist, Grundwahrheitsdaten (z. B. aus Kl-unterstützten Annotationen, manuellen Beschriftungen usw.) während des Modelltrainings 3614 verwendet werden, um ein verfeinertes Modell 4012 zu erzeugen. In mindestens einer Ausführungsform kann der Kundendatensatz 4006 beliebig oft auf das Ausgangsmodell 4004 aufgebracht werden, und die Basisdaten können zur Aktualisierung der Parameter des Ausgangsmodells 4004 verwendet werden, bis ein akzeptabler Grad an Genauigkeit für das verfeinerte Modell 4012 erreicht ist. In mindestens einer Ausführungsform kann das verfeinerte Modell 4012, sobald das verfeinerte Modell 4012 erzeugt ist, in einer oder mehreren Einsatzpipelines 3710 in einer Einrichtung zum Durchführen einer oder mehrerer Verarbeitungsaufgaben in Bezug auf medizinische Bildgebungsdaten eingesetzt werden.
In mindestens einer weiteren Ausführungsform kann das verfeinerte Modell 4012 zu den vortrainierten Modellen 3706 in der Modellregistrierung 3624 hochgeladen werden, um von einer anderen Einrichtung ausgewählt zu werden. In mindestens einer Ausführungsform kann dieser Prozess in einer beliebigen Anzahl von Einrichtungen abgeschlossen werden, so dass das verfeinerte Modell 4012 beliebig oft an neuen Datensätzen verfeinert werden kann, um ein universelleres Modell zu erzeugen.
In mindestens einer Ausführungsform wird mindestens eine auf 40A gezeigte oder beschriebene Komponente verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt mindestens eine auf 40A gezeigte oder beschriebene Komponente mindestens einen auf 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform führt mindestens eine in 40A gezeigte oder beschriebene Komponente (z. B. eine oder mehrere Komponenten des Modelltrainingsystems 4004) mindestens eine Operation unter Verwendung einer Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) durch, das zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel kombiniert, wie in einer oder mehreren der 1-6 beschrieben.
Die Ableitungs- und/oder Trainingslogik 715 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die einer oder mehreren Ausführungsformen zugeordnet sind. Einzelheiten zur Ableitungs- und/oder Trainingslogik 715 werden hier in Verbindung mit den 7A und/oder 7B bereitgestellt.
In mindestens einer Ausführungsform wird mindestens eine Komponente, die auf 40B gezeigt oder beschrieben ist, verwendet, um Techniken und/oder Funktionen zu implementieren, die im Zusammenhang mit 1-6 beschrieben sind. In mindestens einer Ausführungsform schließt mindestens eine auf 40B gezeigte oder beschriebene Komponente mindestens einen auf 1 beschriebenen Aspekt ein und/oder führt ihn aus (z. B. Deep Learning Compiler 102, Scheduler 114, Codegenerator 116). In mindestens einer Ausführungsform führt mindestens eine in 40B gezeigte oder beschriebene Komponente (z. B. das Kl-gestützte Annotationswerkzeug 4036 und/oder der Annotationsassistenzserver 4040) mindestens eine Inferenzoperation durch, die eine Darstellung eines Computerprogramms (z. B. Code 106 oder Laufzeitcode 120 von 1 ) verwendet, das zwei oder mehr abhängige Reduktionsoperationen zu einem Softwarekern kombiniert, wie in einer oder mehreren der 1-6 beschrieben.
Mindestens eine Ausführungsform der Offenbarung kann im Hinblick auf die folgenden Absätze beschrieben werden:
- 1. Prozessor, umfassend: eine oder mehrere Schaltungen, um zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel zu kombinieren.
- 2. Prozessor nach Absatz 1, wobei die zwei oder mehr abhängigen Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation einschließen und die eine oder mehr Schaltungen bewirken, dass Koordinaten für einen oder Elemente von Eingabetensoren für die zweite Reduktionsoperation erzeugt werden, und bewirken, dass die zwei oder mehr abhängigen Reduktionsoperationen kombiniert werden, zumindest teilweise basierend auf den erzeugten Koordinaten.
- 3. Prozessor nach einem der Absätze 1-2, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Durchschnittsoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 4. Prozessor nach einem der Absätze 1-3, wobei der eine oder die mehreren Schaltkreise bewirken, dass ein oder mehrere Threads Elementen von Tensoren zugewiesen werden, die von den zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und bewirken, dass die zwei oder mehreren abhängigen Reduktionsoperationen in dem Software-Kernel kombiniert werden, basierend zumindest teilweise auf dem einen oder den mehreren zugewiesenen Threads.
- 5. Prozessor nach einem der Absätze 1-4, wobei der eine oder die mehreren Schaltkreise bewirken, dass eine oder mehrere Multiplikationsoperationen zwischen einem Vektor und einem Datensatz durch einen Satz von Ersetzungsoperationen ersetzt werden, und bewirken, dass die zwei oder mehreren abhängigen Reduktionsoperationen mit dem Satz von Ersetzungsoperationen in dem Software-Kernel kombiniert werden.
- 6. Prozessor nach einem der Absätze 1-5, wobei die zwei oder mehr abhängigen Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation einschließen und der Software-Kernel auf einer Parallelverarbeitungseinheit durchzuführen ist.
- 7. Prozessor, umfassend: eine oder mehrere Schaltungen zum Durchführen eines Software-Kernels, umfassend zwei oder mehr abhängige Reduktionsoperationen.
- 8. Prozessor nach Absatz 7, wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler in den Software-Kernel kombiniert wurden, der zumindest teilweise auf Koordinaten für einen Tensor basiert, der von einer oder mehreren Reduktionsoperationen der zwei oder mehr abhängigen Reduktionsoperationen verwendet wird.
- 9. Prozessor nach einem der Absätze 7-8, wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler mit einer oder mehreren elementweisen Operationen in dem Software-Kernel kombiniert wurden.
- 10. Prozessor nach einem der Absätze 7-9, wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler mit einer oder mehreren Kopieroperationen in dem Software-Kernel kombiniert wurden.
- 11. Prozessor nach einem der Absätze 7-10, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 12. Prozessor nach einem der Absätze 7-11, wobei der eine oder die mehreren Schaltkreise den Software-Kernel durchführen sollen, nachdem sie einen Kernel-Startbefehl von einem Host-Computersystem empfangen haben.
- 13. Maschinenlesbares Medium, auf dem ein Satz von Befehlen gespeichert ist, die, wenn sie von einem Prozessor durchgeführt werden, den Prozessor mindestens zu Folgendem veranlassen:
- Durchführen eines Software-Kernels, der zwei oder mehr abhängige Reduktionsoperationen umfasst.
- 14. Maschinenlesbares Medium nach Absatz 13, wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler in den Software-Kernel kombiniert wurden.
- 15. Maschinenlesbares Medium nach einem der Absätze 13-14, wobei die zwei oder mehr abhängigen Reduktionsoperationen von einem Compiler mit einer oder mehreren elementweisen Operationen oder einer Kopieroperationen in dem Software-Kernel kombiniert wurden.
- 16. Maschinenlesbares Medium nach einem der Absätze 13-15, wobei der Software-Kernel parallel durchzuführende Anweisungen einschließt und die zwei oder mehr abhängigen Reduktionsoperationen von einem Compiler in den Software-Kernel kombiniert wurden, basierend zumindest teilweise auf einer Vielzahl von Threads, die einem oder mehreren Tensoren zugeordnet sind, die von einer oder mehreren der zwei oder mehr abhängigen Reduktionsoperationen verwendet werden, wobei die Vielzahl von Threads eine oder mehrere Operationen parallel durchführen soll.
- 17. Maschinenlesbares Medium nach einem der Absätze 13-16, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 18. Maschinenlesbares Medium nach einem der Absätze 13-17, wobei der Software-Kernel auf einer Parallelverarbeitungseinheit oder einer Grafikverarbeitungseinheit durchgeführt werden soll.
- 19. Verfahren, umfassend: Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen in einem Software-Kernel.
- 20. Verfahren nach Absatz 19 ferner umfassend das Erzeugen von Koordinaten für ein oder mehrere Elemente eines oder mehrerer Tensoren, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und das Kombinieren der zwei oder mehreren abhängigen Reduktionsoperationen basierend, zumindest teilweise, auf den erzeugten Koordinaten.
- 21. Verfahren nach einem der Absätze 19-20, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 22. Verfahren nach einem der Absätze 19-21 ferner umfassend das Ersetzen einer ersten Operation durch einen Satz von Ersatzoperationen und das Kombinieren der zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel mit dem Satz von Ersatzoperationen.
- 23. Verfahren nach einem der Absätze 19-22, ferner umfassend das Zuweisen eines oder mehrerer Threads zu Elementen eines oder mehrerer Tensoren, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, wobei das Kombinieren der zwei oder mehreren abhängigen Reduktionsoperationen in den Software-Kernel zumindest teilweise auf dem zugewiesenen einen oder den mehreren Threads basiert und der Software-Kernel Anweisungen einschließt, die unter Verwendung des zugewiesenen einen oder der mehreren Threads parallel durchgeführt werden.
- 24. Verfahren nach einem der Absätze 19-23, ferner umfassend das Auswählen eines Reduktionsalgorithmus, wobei das Kombinieren der zwei oder mehr abhängigen Reduktionsoperationen in dem Software-Kernel zumindest teilweise auf dem ausgewählten Reduktionsalgorithmus basiert.
- 25. System, umfassend:
- einen oder mehrere Prozessoren, um zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel zu kombinieren; und
- einen oder mehrere Speicher, um den Software-Kernel zu speichern.
- 26. System nach Absatz 25, wobei der eine oder die mehreren Prozessoren die zwei oder mehr abhängigen Reduktionsoperationen mit einer oder mehreren von einer elementweisen Operation und einer Kopieroperation in den Software-Kernel kombinieren sollen.
- 27. System nach einem der Absätze 25-26, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperationion, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen und der Software-Kernel Befehle einschließt, die parallel auf einer parallelen Verarbeitungseinheit durchgeführt werden sollen.
- 28. System nach einem der Absätze 25-27, wobei der Software-Kernel einen Abschnitt einer Ableitungsoperation unter Verwendung eines neuronalen Netzes implementiert.
- 29. System nach einem der Absätze 25-28, wobei der Software-Kernel Anweisungen einschließt, die parallel durchgeführt werden sollen, der eine oder die mehreren Prozessoren ein erster oder mehrere Prozessoren sind, das System ferner einen zweiten oder mehrere Prozessoren umfasst und der erste oder die mehreren Prozessoren den Software-Kernel zur Ausführung durch den zweiten oder die mehreren Prozessoren starten sollen.
- 30. System nach einem der Absätze 25-29, wobei der eine oder die mehreren Prozessoren einen Plan erzeugen, der zumindest teilweise auf einer Darstellung eines Computerprogramms basiert, das die zwei oder mehr abhängigen Reduktionsoperationen enthält, wiederverwendete Daten zumindest teilweise basierend auf dem Plans identifizieren und die zwei oder mehr abhängigen Reduktionsoperationen zumindest teilweise auf der Grundlage der wiederverwendeten Daten in den Software-Kernel kombinieren sollen.
- 31. Fahrzeug, umfassend:
- ein Computer-Vision-System, das einen oder mehrere Prozessoren einschließt, um eine oder mehrere Aufgaben zu identifizieren, basierend, zumindest teilweise, auf dem Durchführen einer oder mehrerer Ableitungsoperationen unter Verwendung von zwei oder mehreren abhängigen Reduktionsoperationen, die durch einen Compiler zu einem Software-Kernel kombiniert werden; und
- eines oder mehrere von einem Antriebssystem, einem Richtungssteuerungssystem und einem Benachrichtigungssystem für den Fahrzeugführer, um eine oder mehrere Maßnahmen durchzuführen, die zumindest teilweise auf dem identifizierten einen oder mehreren Objekten basieren.
- 32. Fahrzeug nach Absatz 31, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 33. Fahrzeug nach einem der Absätze 31-32, wobei die zwei oder mehr abhängigen Reduktionsoperationen durch den Compiler in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf Koordinaten für einen Tensor, der von einer oder mehreren Reduktionsoperationen der zwei oder mehr abhängigen Reduktionsoperationen verwendet wird.
- 34. Fahrzeug nach einem der Absätze 31-33, wobei die zwei oder mehr abhängigen Reduktionsoperationen vom Compiler mit einer oder mehreren elementweisen Operationen und einer oder mehreren Kopieroperationen in den Software-Kernel kombiniert wurden.
- 35. Fahrzeug nach einem der Absätze 31-34, wobei die zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf einem oder mehreren Threads, die Elementen von Tensoren zugeordnet sind, die von den zwei oder mehr abhängigen Reduktionsoperationen verwendet werden.
- 36. Fahrzeug nach einem der Absätze 31-35, wobei die zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf einem Eingabe-Diagramm, das Operationen unter Verwendung eines neuronalen Netzes darstellt.
- 37. Maschinenlesbares Medium, das einen Satz von Anweisungen aufweist, die, wenn sie von einem Prozessor durchgeführt werden, den Prozessor veranlassen, mindestens:
- zwei oder mehr abhängige Operationen zu einem Software-Kernel zu kombinieren.
- 38. Maschinenlesbares Medium nach Absatz 37, wobei die Anweisungen, die, wenn sie von dem Prozessor durchgeführt werden, den Prozessor ferner veranlassen, Koordinaten für ein oder mehrere Elemente eines oder mehrerer Tensoren zu erzeugen, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und die zwei oder mehreren abhängigen Reduktionsoperationen zumindest teilweise basierend auf den erzeugten Koordinaten zu kombinieren.
- 39. Maschinenlesbares Medium nach einem der Absätze 37-38, wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen.
- 40. Maschinenlesbares Medium nach einem der Absätze 37-39, wobei die Anweisungen, die, wenn sie vom Prozessor durchgeführt werden, den Prozessor ferner veranlassen, eine erste Operation durch einen Satz von Ersatzoperationen zu ersetzen und die zwei oder mehr abhängigen Reduktionsoperationen mit dem Satz von Ersatzoperationen in den Software-Kernel zu kombinieren.
- 41. Maschinenlesbares Medium nach einem der Absätze 37-40, wobei die Befehle, die, wenn sie vom Prozessor durchgeführt werden, den Prozessor ferner veranlassen, Elementen eines oder mehrerer Tensoren, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, einen oder mehrere Threads zuzuweisen und die zwei oder mehreren abhängigen Reduktionsoperationen in den Software-Kernel zu kombinieren, der zumindest teilweise auf dem zugewiesenen einen oder den mehreren Threads basiert, wobei der Software-Kernel Befehle einschließt, die unter Verwendung des zugewiesenen einen oder der mehreren Threads parallel durchzuführen sind.
- 42. Maschinenlesbares Medium nach einem der Absätze 37-41, wobei der Software-Kernel auf einer parallelen Verarbeitungseinheit oder einer Grafikverarbeitungseinheit durchgeführt werden soll.
- 43. Maschinenlesbares Medium nach einem der Absätze 37-42, wobei die Anweisungen, die, wenn sie von dem Prozessor durchgeführt werden, den Prozessor ferner veranlassen, einen Reduktionsalgorithmus auszuwählen und die zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel zu kombinieren, der zumindest teilweise auf dem ausgewählten Reduktionsalgorithmus basiert.
In mindestens einer Ausführungsform kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung oder einen Chip beziehen. In mindestens einer Ausführungsform können Multi-Chip-Module mit erhöhter Mehrfachkonnektivität verwendet werden, die eine Operation auf dem Chip simulieren und wesentliche Verbesserungen gegenüber der Verwendung einer herkömmlichen zentralen Verarbeitungseinheit („CPU“) und einer Bus-Implementierung bieten. In mindestens einer Ausführungsform können verschiedene Module auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen je nach Wunsch des Benutzers untergebracht werden.
In mindestens einer Ausführungsform, die sich auf 13 bezieht, sind Computerprogramme in Form von maschinenlesbarem, ausführbarem Code oder computergesteuerten logischen Algorithmen im Hauptspeicher 1304 und/oder in einer sekundären Speicherung abgelegt. Computerprogramme, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, ermöglichen es dem System 1300, verschiedene Funktionen gemäß mindestens einer Ausführungsform durchzuführen. In mindestens einer Ausführungsform sind der Speicher 1304, die Speicherung und/oder jede andere Speicherung mögliche Beispiele für computerlesbare Medien. In mindestens einer Ausführungsform kann sich die sekundäre Speicherung auf jede geeignete Speichervorrichtung oder jedes geeignete System beziehen, wie z. B. ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein DVD-Laufwerk, ein Aufnahmegerät, einen USB-Flash-Speicher usw. darstellt. In mindestens einer Ausführungsform wird die Architektur und/oder Funktionalität verschiedener vorhergehender Figuren im Zusammenhang mit der CPU 1302, dem Parallelverarbeitungssystem 1312, einem integrierten Schaltkreis, der mindestens einen Abschnitt der Fähigkeiten beider CPU 1302, des Parallelverarbeitungssystems 1312, eines Chipsatzes (z. B. einer Gruppe integrierter Schaltkreise, die so ausgelegt sind, dass sie als Einheit arbeiten und verkauft werden, um verwandte Funktionen usw. durchzuführen), und/oder einer beliebigen geeigneten Kombination integrierter Schaltkreise umgesetzt.
In mindestens einer Ausführungsform wird die Architektur und/oder Funktionalität der verschiedenen vorhergehenden Figuren im Rahmen eines allgemeinen Computersystems, eines Leiterplattensystems, eines Spielkonsolensystems für Unterhaltungszwecke, eines anwendungsspezifischen Systems usw. umgesetzt. In mindestens einer Ausführungsform kann das Computersystem 1300 die Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, eines Servers, eines Supercomputers, eines Smartphones (z. B. eines drahtlosen, handgehaltenen Geräts), eines persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, eines Fahrzeugs, eines am Kopf befestigten Displays, eines elektronischen Geräts, einer mobilen Vorrichtung, eines Fernsehgeräts, einer Workstation, einer Spielkonsole, eines eingebetteten Systems und/oder einer anderen Art von Logik haben.
In mindestens einer Ausführungsform schließt das Parallelverarbeitungssystem 1312 ohne Einschränkung eine Vielzahl von Parallelverarbeitungseinheiten („PPUs“) 1314 und zugehörige Speicher 1316 ein. In mindestens einer Ausführungsform sind die PPUs 1314 über eine Zwischenverbindung 1318 und einen Switch 1320 oder Multiplexer mit einem Host-Prozessor oder anderen peripheren Vorrichtungen verbunden. In mindestens einer Ausführungsform verteilt das parallele Verarbeitungssystem 1312 Rechenaufgaben auf die PPUs 1314, die parallelisierbar sein können - zum Beispiel als Teil der Verteilung von Rechenaufgaben auf mehrere Thread-Blöcke der Grafikverarbeitungseinheit („GPU“). In mindestens einer Ausführungsform wird der Speicher gemeinsam genutzt und ist für einige oder alle PPUs 1314 zugänglich (z. B. für Lese- und/oder Schreibzugriffe), obwohl ein solcher gemeinsam genutzter Speicher in Relation zu der Nutzung von lokalem Speicher und Registern, die in einer PPU 1314 resident sind, Leistungseinbußen mit sich bringen kann. In mindestens einer Ausführungsform wird die Operation der PPUs 1314 durch die Verwendung eines Befehls wie syncthreads() synchronisiert, wobei alle Threads in einem Block (z. B. über mehrere PPUs 1314 ausgeführt) einen bestimmten Punkt der Codeausführung erreichen müssen, bevor sie fortfahren.
Andere Variationen sind im Sinne der vorliegenden Offenbarung. Obwohl die offenbaren Techniken verschiedene Modifikationen und alternative Konstruktionen zulassen, sind bestimmte Ausführungsformen davon in den Zeichnungen gezeigt und oben im Detail beschrieben worden. Es ist jedoch nicht beabsichtigt, die Offenbarung auf eine bestimmte Form oder bestimmte Formen zu beschränken, sondern es sollen vielmehr alle Modifikationen, alternativen Konstruktionen und Äquivalente abgedeckt werden, die in den Geist und den Umfang der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
Die Verwendung der Begriffe „ein“ und „ein“ und „der“ und ähnlicher Bezeichnungen im Zusammenhang mit der Beschreibung offenbarer Ausführungsformen (insbesondere im Zusammenhang mit den folgenden Ansprüchen) ist so zu verstehen, dass sie sowohl die Einzahl als auch die Mehrzahl abdeckt, sofern hier nicht anders angegeben oder durch den Kontext eindeutig widerlegt, und nicht als Definition eines Begriffs. Die Begriffe „umfassend“, „mit“, „einschließend“ und „enthaltend“ sind, sofern nicht anders angegeben, als offene Begriffe zu verstehen (im Sinne von „einschließend, aber nicht beschränkt auf“). Der Begriff „verbunden“ ist, wenn er unverändert bleibt und sich auf physische Verbindungen bezieht, so zu verstehen, dass er teilweise oder vollständig in einem Behälter enthalten, an ihm befestigt oder mit ihm verbunden ist, auch wenn etwas dazwischen liegt. Die Angabe von Wertebereichen dient lediglich als kurzes Verfahren, um jeden getrennten Wert, der in den Bereich fällt, einzeln zu bezeichnen, sofern hier nichts anderes angegeben ist, und jeder getrennte Wert wird in die Spezifikation aufgenommen, als ob er hier einzeln aufgeführt wäre. In mindestens einer Ausführungsform ist die Verwendung des Begriffs „Menge“ (z. B. „eine Menge von Gegenständen“) oder „Teilmenge“, sofern nicht anders angegeben oder durch den Kontext widerlegt, als eine nicht leere Sammlung zu verstehen, die ein oder mehrere Mitglieder umfasst. Ferner bezeichnet der Begriff „Teilmenge“ einer entsprechenden Menge, sofern nicht anders vermerkt oder durch den Kontext widerlegt, nicht notwendigerweise eine echte Teilmenge der entsprechenden Menge, sondern Teilmenge und entsprechende Menge können gleich sein.
Konjunktivische Ausdrücke, wie z. B. Sätze der Form „mindestens eines von A, B und C“ oder „mindestens eines von A, B und C“, werden, sofern nicht ausdrücklich anders vermerkt oder durch den Kontext eindeutig widerlegt, mit dem Kontext so verstanden, wie sie im Allgemeinen verwendet werden, um darzustellen, dass ein Gegenstand, Begriff usw., entweder A oder B oder C oder eine beliebige nicht leere Teilmenge der Menge von A und B und C sein kann. Zum Beispiel beziehen sich in dem veranschaulichenden Beispiel einer Menge mit drei Mitgliedern 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}. Diese konjunktivische Sprache soll also nicht generell bedeuten, dass in bestimmten Ausführungsformen jeweils mindestens eines von A, mindestens eines von B und mindestens eines von C vorhanden sein muss. Außerdem bedeutet der Begriff „Vielzahl“, sofern nicht anders vermerkt oder durch den Kontext widerlegt, einen Zustand der Mehrzahl (z. B. „eine Vielzahl von Artikeln“ bedeutet mehrere Artikel). In mindestens einer Ausführungsform beträgt die Anzahl der Gegenstände in einer Vielzahl mindestens zwei, kann aber auch mehr sein, wenn dies entweder explizit oder durch den Kontext angegeben wird. Ferner bedeutet die Formulierung „basierend auf“, sofern nicht anders angegeben oder aus dem Kontext ersichtlich, „zumindest teilweise basierend auf“ und nicht „ausschließlich basierend auf“.
Die Operationen der hier beschriebenen Prozesse können in jeder geeigneten Reihenfolge durchgeführt werden, sofern dies hier nicht anders angegeben ist oder sich aus dem Kontext eindeutig ergibt. In mindestens einer Ausführungsform wird ein Prozess wie die hier beschriebenen Prozesse (oder Variationen und/oder Kombinationen davon) unter der Kontrolle eines oder mehrerer Computersysteme verarbeitet, die mit ausführbaren Anweisungen konfiguriert 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, zum Beispiel 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 handelt es sich bei dem computerlesbaren Speichermedium um ein nicht-transitorisches computerlesbares Speichermedium, das transitorische Signale (z. B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung) ausschließt, aber nicht-transitorische Schaltkreise zur Speicherung von Daten (z. B. Puffer, Cache und Warteschlangen) innerhalb von Transceivern für transitorische Signale einschließt. In mindestens einer Ausführungsform ist Code (z. B. ausführbarer Code oder Quellcode) auf einem Satz von einem oder mehreren nicht transitorischen, computerlesbaren Speichermedien gespeichert, die ausführbare Anweisungen (oder einen anderen Speicher zum Speichern von ausführbaren Anweisungen) darauf aufweisen, die, wenn sie von einem oder mehreren Prozessoren eines Computersystems ausgeführt werden (d. h. als Ergebnis der Ausführung), das Computersystem veranlassen, die hierin beschriebenen Operationen durchzuführen. In mindestens einer Ausführungsform umfasst der Satz nicht-transitorischer computerlesbarer Speichermedien mehrere nicht-transitorische computerlesbare Speichermedien, und auf einem oder mehreren der einzelnen nichttransitorischen Speichermedien mehrerer nicht-transitorischer computerlesbarer Speichermedien fehlt der gesamte Code, während mehrere nicht-transitorische computerlesbare Speichermedien gemeinsam den gesamten Code speichern. In mindestens einer Ausführungsform werden ausführbare Anweisungen so ausgeführt, dass verschiedene Anweisungen von verschiedenen Prozessoren ausgeführt werden - zum Beispiel speichert ein nicht-transitorisches computerlesbares Speichermedium Anweisungen und eine zentrale Verarbeitungseinheit („CPU“) führt einige Anweisungen aus, während eine Grafikverarbeitungseinheit („GPU“) andere Anweisungen ausführt. In mindestens einer Ausführungsform weisen verschiedene Komponenten eines Rechensystems getrennte Prozessoren auf und verschiedene Prozessoren führen verschiedene Teilmengen von Anweisungen aus.
In mindestens einer Ausführungsform ist eine arithmetische Logikeinheit ein Satz kombinierter logischer Schaltungen, die eine oder mehrere Eingaben verarbeiten, um ein Ergebnis zu erzeugen. In mindestens einer Ausführungsform wird eine arithmetische Logikeinheit von einem Prozessor verwendet, um mathematische Operationen wie Addition, Subtraktion oder Multiplikation durchzuführen. In mindestens einer Ausführungsform wird eine arithmetische Logikeinheit verwendet, um logische Operationen wie logisches AND/OR oder XOR zu implementieren. In mindestens einer Ausführungsform ist eine arithmetische Logikeinheit zustandslos und besteht aus physischen Switch-Komponenten wie Halbleitertransistoren, die so angeordnet sind, dass sie logische Gatter bilden. In mindestens einer Ausführungsform kann eine arithmetische Logikeinheit intern als zustandsabhängige Logikschaltung mit einer zugeordneten Uhr arbeiten. In mindestens einer Ausführungsform kann eine arithmetische Logikeinheit als asynchrone Logikschaltung mit einem internen Zustand aufgebaut sein, der nicht in einem zugeordneten Registersatz gehalten wird. In mindestens einer Ausführungsform wird eine arithmetische Logikeinheit von einem Prozessor verwendet, um Operanden zu kombinieren, die in einem oder mehreren Registern des Prozessors gespeichert sind, und eine Ausgabe zu erzeugen, die vom Prozessor in einem anderen Register oder einer Speicherposition gespeichert werden kann.
In mindestens einer Ausführungsform gibt der Prozessor als Ergebnis der Verarbeitung eines vom Prozessor abgerufenen Befehls eine oder mehrere Eingaben oder Operanden an eine arithmetische Logikeinheit weiter, so dass die arithmetische Logikeinheit ein Ergebnis erzeugt, das zumindest teilweise auf einem Befehlscode basiert, der den Eingaben der arithmetischen Logikeinheit bereitgestellt wird. In mindestens einer Ausführungsform basieren die vom Prozessor an die ALU bereitgestellten Befehlscodes zumindest teilweise auf dem vom Prozessor ausgeführten Befehl. In mindestens einer Ausführungsform verarbeitet die kombinatorische Logik in der ALU die Eingaben und erzeugt eine Ausgabe, die auf einen Bus innerhalb des Prozessors gelegt wird. In mindestens einer Ausführungsform wählt der Prozessor ein Zielregister, eine Speicherposition, eine Speichervorrichtung oder eine Ausgangsspeicherposition auf dem Ausgangsbus aus, so dass das Takten des Prozessors bewirkt, dass die von der ALU erzeugten Ergebnisse an die gewünschte Position gesendet werden.
Im Rahmen dieser Anwendung wird der Begriff arithmetische Logikeinheit (ALU) für jede logische Rechenschaltung verwendet, die Operanden verarbeitet, um ein Ergebnis zu erzeugen. Zum Beispiel kann sich der Begriff ALU im vorliegenden Dokument auf eine Gleitkommaeinheit, einen DSP, einen Tensorkern, einen Shaderkern, einen Koprozessor oder eine CPU beziehen.
Dementsprechend sind in mindestens einer Ausführungsform Rechensysteme so konfiguriert, dass sie einen oder mehrere Dienste implementieren, die einzeln oder gemeinsam Operationen der hierin beschriebenen Prozesse durchführen, und solche Rechensysteme sind mit geeigneter Hardware und/oder Software konfiguriert, die die Durchführung der Operationen ermöglichen. Ferner ist ein Computersystem, das mindestens eine Ausführungsform der vorliegenden Offenbarung implementiert, eine einzelne Vorrichtung und in einer weiteren Ausführungsform ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten, so dass ein verteiltes Computersystem die hierin beschriebenen Operationen durchführt und dass eine einzelne Vorrichtung nicht alle Operationen durchführt.
Die Verwendung aller hier bereitgestellten Beispiele oder beispielhaften Ausdrücke (z. B. „wie“) dient lediglich der besseren Veranschaulichung der Ausführungsformen der Offenbarung und stellt keine Einschränkung des Umfangs der Offenbarung dar, sofern nichts anderes behauptet wird. Keine Formulierung in der Spezifikation sollte so ausgelegt werden, dass sie ein nicht beanspruchtes Element als wesentlich für die Praxis der Offenbarung bezeichnet.
Alle Referenzen, einschließlich Veröffentlichungen, Patentanmeldungen und Patente, die hierin zitiert werden, werden hiermit durch Bezugnahme in demselben Umfang eingeschlossen, als ob jede Referenz einzeln und ausdrücklich als durch Bezugnahme eingeschlossen angegeben wäre und hier in ihrer Gesamtheit wiedergegeben würde.
In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ sowie ihre Ableitungen verwendet werden. Es sollte verstanden werden, dass diese Begriffe nicht als Synonyme füreinander zu verstehen sind. Vielmehr kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem oder indirektem physischen oder elektrischen Kontakt zueinander stehen. „Gekoppelt“ kann auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt zueinander stehen, aber dennoch miteinander kooperieren oder interagieren.
Sofern nicht ausdrücklich anders angegeben, beziehen sich Begriffe wie „Verarbeitung“, „Berechnen“, „Berechnen“, „Bestimmen“ o.ä. in der gesamten Spezifikation auf Maßnahmen und/oder Prozesse eines Computers oder eines Rechensystems oder einer ähnlichen elektronischen Rechenvorrichtung, die Daten, die als physische, z. B. elektronische, Größen in den Registern und/oder Speichern des Rechensystems dargestellt werden, manipulieren und/oder in andere Daten umwandeln, die in ähnlicher Weise als physische Größen in den Speichern, Registern oder anderen derartigen Geräten zur Speicherung, Übertragung oder Anzeige von Informationen des Rechensystems dargestellt werden.
In ähnlicher Weise kann sich der Begriff „Prozessor“ auf eine Vorrichtung oder einen Abschnitt einer Vorrichtung beziehen, die elektronische Daten aus Registern und/oder Speichern verarbeitet und diese elektronischen Daten in andere elektronische Daten transformiert, die in Registern und/oder Speichern gespeichert werden können. Als nicht einschränkende Beispiele kann ein „Prozessor“ eine CPU oder eine GPU sein. Eine „Rechenplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hierin verwendet, können „Software“-Prozesse zum Beispiel Software- und/oder Hardwareeinheiten einschließen, die im Laufe der Zeit Arbeit durchführen, wie z. B. Aufgaben, Threads und intelligente Agenten. Außerdem kann sich jeder Prozess auf mehrere Prozesse beziehen, um Anweisungen in Sequenz oder parallel, kontinuierlich oder intermittierend auszuführen. In mindestens einer Ausführungsform werden die Begriffe „System“ und „Verfahren“ hier austauschbar verwendet, da ein System ein oder mehrere Verfahren umfassen kann und Verfahren als System betrachtet werden können.
Im vorliegenden Dokument kann auf das Erhalten, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten in ein Subsystem, ein Rechensystem oder eine computerimplementierte Maschine Bezug genommen werden. In mindestens einer Ausführungsform kann das Beschaffen, Erfassen, Empfangen oder Eingeben von analogen und digitalen Daten auf verschiedene Weise erfolgen, z. B. durch Empfangen von Daten als Parameter eines Funktionsaufrufs oder eines Aufrufs einer Anwendungsprogrammierschnittstelle. In mindestens einer Ausführungsform können Prozesse zum Erhalten, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten durch die Übertragung von Daten über eine serielle oder parallele Schnittstelle durchgeführt werden. In mindestens einer Ausführungsform können Prozesse zum Erhalten, Erfassen, Empfangen oder Eingeben analoger oder digitaler Daten durch die Übertragung von Daten über ein Netz von einer bereitstellenden zu einer erfassenden Einheit durchgeführt werden. In mindestens einer Ausführungsform kann auch auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Präsentieren analoger oder digitaler Daten Bezug genommen werden. In verschiedenen Beispielen können Prozesse des Bereitstellens, Ausgebens, Übertragens, Sendens oder Präsentierens analoger oder digitaler Daten durch die Übertragung von Daten als Eingabe- oder Ausgabeparameter eines Funktionsaufrufs, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Interprozess-Kommunikationsmechanismus durchgeführt werden.
Obwohl die hierin enthaltenen Beschreibungen Beispielimplementierungen der beschriebenen Techniken darstellen, können auch andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sie sind im Rahmen dieser Offenbarung zu verstehen. Des Weiteren können, obwohl oben zu Beschreibungszwecken spezifische Verteilungen von Verantwortlichkeiten definiert sind, verschiedene Funktionen und Verantwortlichkeiten je nach den Umständen auf unterschiedliche Weise verteilt und aufgeteilt werden.
Obwohl der Gegenstand in einer Sprache beschrieben wurde, die spezifisch für strukturelle Merkmale und/oder methodische Handlungen ist, ist es zu verstehen, dass der in den beigefügten Ansprüchen beanspruchte Gegenstand nicht notwendigerweise auf die beschriebenen spezifischen Merkmale oder Handlungen beschränkt ist. Vielmehr sind die spezifischen Merkmale und Handlungen als beispielhafte Formen der Umsetzung der Ansprüche offenbart.
ZITATE ENTHALTEN IN DER BESCHREIBUNG
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
Zitierte Patentliteratur
- JP 3016201806 [0113]
- JP 3016201609 [0113]
Claims (36)
- Prozessor, umfassend: einen oder mehrere Schaltkreise, um zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel zu kombinieren.
- Prozessor nach
Anspruch 1 , wobei die zwei oder mehr abhängigen Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation einschließen und die eine oder mehr Schaltungen bewirken, dass Koordinaten für einen oder Elemente von Eingabetensoren für die zweite Reduktionsoperation erzeugt werden, und bewirken, dass die zwei oder mehr abhängigen Reduktionsoperationen kombiniert werden, zumindest teilweise basierend auf den erzeugten Koordinaten. - Prozessor nach
Anspruch 1 oder2 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen. - Prozessor nach einem der vorhergehenden Ansprüche, wobei der eine oder die mehreren Schaltkreise bewirken, dass ein oder mehrere Threads Elementen von Tensoren zugewiesen werden, die von den zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und bewirken, dass die zwei oder mehreren abhängigen Reduktionsoperationen in dem Software-Kernel kombiniert werden, basierend zumindest teilweise auf dem einen oder den mehreren zugewiesenen Threads.
- Prozessor nach einem der vorhergehenden Ansprüche, wobei der eine oder die mehreren Schaltkreise bewirken, dass eine oder mehrere Multiplikationsoperationen zwischen einem Vektor und einem Datensatz durch einen Satz von Ersetzungsoperationen ersetzt werden, und bewirken, dass die zwei oder mehreren abhängigen Reduktionsoperationen mit dem Satz von Ersetzungsoperationen in dem Software-Kernel kombiniert werden.
- Prozessor nach einem der vorhergehenden Ansprüche, wobei die zwei oder mehr abhängigen Reduktionsoperationen eine erste Reduktionsoperation und eine von der ersten Reduktionsoperation abhängige zweite Reduktionsoperation einschließen und der Software-Kernel auf einer Parallelverarbeitungseinheit durchzuführen ist.
- Prozessor, umfassend: einen oder mehrere Schaltkreise zum Durchführen eines Software-Kernels, umfassend zwei oder mehr abhängige Reduktionsoperationen.
- Prozessor nach
Anspruch 7 , wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler in den Software-Kernel kombiniert wurden, der zumindest teilweise auf Koordinaten für einen Tensor basiert, der von einer oder mehreren Reduktionsoperationen der zwei oder mehr abhängigen Reduktionsoperationen verwendet wird. - Prozessor nach
Anspruch 7 oder8 , wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler mit einer oder mehreren elementweisen Operationen in dem Software-Kernel kombiniert wurden. - Prozessor nach einem der
Ansprüche 7 bis9 , wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler mit einer oder mehreren Kopieroperationen in dem Software-Kernel kombiniert wurden. - Prozessor nach einem der
Ansprüche 7 bis10 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperationion, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen. - Prozessor nach einem der
Ansprüche 7 bis11 , wobei der eine oder die mehreren Schaltkreise den Software-Kernel durchführen sollen, nachdem sie einen Kernel-Startbefehl von einem Host-Computersystem empfangen haben. - Maschinenlesbares Medium, auf dem ein Satz von Befehlen gespeichert ist, die, wenn sie von einem Prozessor durchgeführt werden, den Prozessor mindestens zu Folgendem veranlassen: Durchführen eines Software-Kernels, der zwei oder mehr abhängige Reduktionsoperationen umfasst.
- Maschinenlesbares Medium nach
Anspruch 13 , wobei die zwei oder mehr abhängigen Reduktionsoperationen durch einen Compiler in den Software-Kernel kombiniert wurden. - Maschinenlesbares Medium nach
Anspruch 13 oder14 , wobei die zwei oder mehr abhängigen Reduktionsoperationen von einem Compiler mit einer oder mehreren elementweisen Operationen oder einer Kopieroperationen in dem Software-Kernel kombiniert wurden. - Maschinenlesbares Medium nach einem der
Ansprüche 13 bis15 , wobei der Software-Kernel parallel durchzuführende Anweisungen einschließt und die zwei oder mehr abhängigen Reduktionsoperationen von einem Compiler in den Software-Kernel kombiniert wurden, basierend zumindest teilweise auf einer Vielzahl von Threads, die einem oder mehreren Tensoren zugeordnet sind, die von einer oder mehreren der zwei oder mehr abhängigen Reduktionsoperationen verwendet werden, wobei die Vielzahl von Threads eine oder mehrere Operationen parallel durchführen soll. - Maschinenlesbares Medium nach einem der
Ansprüche 13 bis16 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen. - Maschinenlesbares Medium nach einem der
Ansprüche 13 bis17 , wobei der Software-Kernel auf einer Parallelverarbeitungseinheit oder einer Grafikverarbeitungseinheit durchgeführt werden soll. - Verfahren, umfassend: Kombinieren von zwei oder mehr abhängigen Reduktionsoperationen in einem Software-Kernel.
- Verfahren nach
Anspruch 19 ferner umfassend das Erzeugen von Koordinaten für ein oder mehrere Elemente eines oder mehrerer Tensoren, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, und das Kombinieren der zwei oder mehreren abhängigen Reduktionsoperationen basierend, zumindest teilweise, auf den erzeugten Koordinaten. - Verfahren nach
Anspruch 19 oder20 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperationion, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen. - Verfahren nach einem der
Ansprüche 19 bis21 , ferner umfassend das Ersetzen einer ersten Operation durch einen Satz von Ersatzoperationen und das Kombinieren der zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel mit dem Satz von Ersatzoperationen. - Verfahren nach einem der
Ansprüche 19 bis22 , ferner umfassend das Zuweisen eines oder mehrerer Threads zu Elementen eines oder mehrerer Tensoren, die von einer oder mehreren der zwei oder mehreren abhängigen Reduktionsoperationen verwendet werden, wobei das Kombinieren der zwei oder mehreren abhängigen Reduktionsoperationen in den Software-Kernel zumindest teilweise auf dem zugewiesenen einen oder den mehreren Threads basiert und der Software-Kernel Anweisungen einschließt, die unter Verwendung des zugewiesenen einen oder der mehreren Threads parallel durchgeführt werden. - Verfahren nach einem der
Ansprüche 19 bis23 , ferner umfassend das Auswählen eines Reduktionsalgorithmus, wobei das Kombinieren der zwei oder mehr abhängigen Reduktionsoperationen in dem Software-Kernel zumindest teilweise auf dem ausgewählten Reduktionsalgorithmus basiert. - System, umfassend: einen oder mehrere Prozessoren, um zwei oder mehr abhängige Reduktionsoperationen zu einem Software-Kernel zu kombinieren; und einen oder mehrere Speicher, um den Software-Kernel zu speichern.
- System nach
Anspruch 25 , wobei der eine oder die mehreren Prozessoren die zwei oder mehr abhängigen Reduktionsoperationen mit einer oder mehreren von einer elementweisen Operation und einer Kopieroperation in den Software-Kernel kombinieren sollen. - System nach
Anspruch 25 oder26 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen und der Software-Kernel Befehle einschließt, die parallel auf einer parallelen Verarbeitungseinheit durchgeführt werden sollen. - System nach einem der
Ansprüche 25 bis27 , wobei der Software-Kernel einen Abschnitt einer Ableitungsoperation unter Verwendung eines neuronalen Netzes implementiert. - System nach einem der
Ansprüche 25 bis28 , wobei der Software-Kernel Anweisungen einschließt, die parallel durchgeführt werden sollen, der eine oder die mehreren Prozessoren ein erster oder mehrere Prozessoren sind, das System ferner einen zweiten oder mehrere Prozessoren umfasst und der erste oder die mehreren Prozessoren den Software-Kernel zur Ausführung durch den zweiten oder die mehreren Prozessoren starten sollen. - System nach einem der
Ansprüche 25 bis29 , wobei der eine oder die mehreren Prozessoren einen Plan erzeugen, der zumindest teilweise auf einer Darstellung eines Computerprogramms basiert, das die zwei oder mehr abhängigen Reduktionsoperationen enthält, wiederverwendete Daten zumindest teilweise basierend auf dem Plans identifizieren und die zwei oder mehr abhängigen Reduktionsoperationen zumindest teilweise auf der Grundlage der wiederverwendeten Daten in den Software-Kernel kombinieren sollen. - Fahrzeug, umfassend: ein Computer-Vision-System, das einen oder mehrere Prozessoren einschließt, um eine oder mehrere Aufgaben zu identifizieren, basierend, zumindest teilweise, auf dem Durchführen einer oder mehrerer Ableitungsoperationen unter Verwendung von zwei oder mehreren abhängigen Reduktionsoperationen, die durch einen Compiler zu einem Software-Kernel kombiniert werden; und eines oder mehrere von einem Antriebssystem, einem Richtungssteuerungssystem und einem Benachrichtigungssystem für den Fahrzeugführer, um eine oder mehrere Maßnahmen durchzuführen, die zumindest teilweise auf dem identifizierten einen oder mehreren Objekten basieren.
- Fahrzeug nach
Anspruch 31 , wobei die zwei oder mehr abhängigen Reduktionsoperationen zwei oder mehr von einer Mittelwertoperation, einer Summenoperation, einer Produktoperation, einer Min-Operation oder einer Max-Operation einschließen. - Fahrzeug nach
Anspruch 31 oder32 , wobei die zwei oder mehr abhängigen Reduktionsoperationen durch den Compiler in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf Koordinaten für einen Tensor, der von einer oder mehreren Reduktionsoperationen der zwei oder mehr abhängigen Reduktionsoperationen verwendet wird. - Fahrzeug nach einem der
Ansprüche 31 bis33 , wobei die zwei oder mehr abhängigen Reduktionsoperationen vom Compiler mit einer oder mehreren elementweisen Operationen und einer oder mehreren Kopieroperationen in den Software-Kernel kombiniert wurden. - Fahrzeug nach einem der
Ansprüche 31 bis34 , wobei die zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf einem oder mehreren Threads, die Elementen von Tensoren zugeordnet sind, die von den zwei oder mehr abhängigen Reduktionsoperationen verwendet werden. - Fahrzeug nach einem der
Ansprüche 31 bis35 , wobei die zwei oder mehr abhängigen Reduktionsoperationen in den Software-Kernel kombiniert wurden, basierend, zumindest teilweise, auf einem Eingabe-Diagramm, das Operationen unter Verwendung eines neuronalen Netzes darstellt.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/240,660 | 2021-04-26 | ||
US17/240,660 US20220350683A1 (en) | 2021-04-26 | 2021-04-26 | Techniques for combining operations |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102022108711A1 true DE102022108711A1 (de) | 2022-10-27 |
Family
ID=81851861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102022108711.5A Pending DE102022108711A1 (de) | 2021-04-26 | 2022-04-11 | Techniken zur kombination von operationen |
Country Status (7)
Country | Link |
---|---|
US (1) | US20220350683A1 (de) |
JP (1) | JP2022168852A (de) |
KR (1) | KR20220149800A (de) |
CN (1) | CN115248689A (de) |
AU (2) | AU2022202702A1 (de) |
DE (1) | DE102022108711A1 (de) |
GB (1) | GB2609701B (de) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102018129813A1 (de) * | 2018-11-26 | 2020-05-28 | Beckhoff Automation Gmbh | Datenübertragungsverfahren und Automatisierungskommunikationsnetzwerk |
US20220414455A1 (en) * | 2021-06-29 | 2022-12-29 | Nvidia Corporation | Techniques for combining operations |
US11995420B2 (en) * | 2021-08-19 | 2024-05-28 | Red Hat, Inc. | Generating a build process for building software in a target environment |
WO2024106294A1 (ja) * | 2022-11-14 | 2024-05-23 | ソフトバンクグループ株式会社 | 情報処理装置、プログラム及び情報処理システム |
US20240220314A1 (en) * | 2022-12-30 | 2024-07-04 | Advanced Micro Devices, Inc. | Data dependency-aware scheduling |
US20240256285A1 (en) * | 2023-01-31 | 2024-08-01 | Microsoft Technology Licensing, Llc | Parallelizing multi-phase kernels with cross-phase dependency on heterogenous hardware |
KR102715702B1 (ko) * | 2023-03-30 | 2024-10-11 | 주식회사 딥이티 | 인공지능 모델에 대한 연산 및 메모리 최적화 장치 및 방법 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016201806A (ja) | 2011-11-10 | 2016-12-01 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | チャージポンプのノード電圧レベルを安定させるシステムおよび方法 |
JP2016201609A (ja) | 2015-04-08 | 2016-12-01 | 日本電気通信システム株式会社 | 加入者端末装置、通信サービス提供システム、通信制御方法、及び、通信制御プログラム |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10332320B2 (en) * | 2017-04-17 | 2019-06-25 | Intel Corporation | Autonomous vehicle advanced sensing and response |
US11294949B2 (en) * | 2018-09-04 | 2022-04-05 | Toyota Connected North America, Inc. | Systems and methods for querying a distributed inventory of visual data |
US10761821B1 (en) * | 2019-03-27 | 2020-09-01 | Sap Se | Object oriented programming model for graphics processing units (GPUS) |
US11500959B2 (en) * | 2019-08-16 | 2022-11-15 | Google Llc | Multiple output fusion for operations performed in a multi-dimensional array of processing units |
US20210089873A1 (en) * | 2019-09-24 | 2021-03-25 | Alibaba Group Holding Limited | Apparatus and system for execution of neural network |
US10901715B1 (en) * | 2019-09-26 | 2021-01-26 | Jonathan RAIMAN | Lazy compilation and kernel fusion in dynamic computation graphs |
US20210103433A1 (en) * | 2019-10-02 | 2021-04-08 | Nvidia Corporation | Kernel fusion for machine learning |
US20220335287A1 (en) * | 2021-04-19 | 2022-10-20 | Nvidia Corporation | Systems and methods for dynamically updating a neural network having a plurality of kernels |
-
2021
- 2021-04-26 US US17/240,660 patent/US20220350683A1/en active Pending
-
2022
- 2022-04-11 DE DE102022108711.5A patent/DE102022108711A1/de active Pending
- 2022-04-23 AU AU2022202702A patent/AU2022202702A1/en not_active Abandoned
- 2022-04-24 CN CN202210436004.9A patent/CN115248689A/zh active Pending
- 2022-04-25 JP JP2022071429A patent/JP2022168852A/ja active Pending
- 2022-04-26 KR KR1020220051195A patent/KR20220149800A/ko unknown
- 2022-04-26 GB GB2206042.0A patent/GB2609701B/en active Active
-
2024
- 2024-03-08 AU AU2024201579A patent/AU2024201579A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016201806A (ja) | 2011-11-10 | 2016-12-01 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | チャージポンプのノード電圧レベルを安定させるシステムおよび方法 |
JP2016201609A (ja) | 2015-04-08 | 2016-12-01 | 日本電気通信システム株式会社 | 加入者端末装置、通信サービス提供システム、通信制御方法、及び、通信制御プログラム |
Also Published As
Publication number | Publication date |
---|---|
GB202206042D0 (en) | 2022-06-08 |
CN115248689A (zh) | 2022-10-28 |
AU2022202702A1 (en) | 2022-11-10 |
US20220350683A1 (en) | 2022-11-03 |
JP2022168852A (ja) | 2022-11-08 |
GB2609701A (en) | 2023-02-15 |
AU2024201579A1 (en) | 2024-03-28 |
GB2609701B (en) | 2024-03-06 |
KR20220149800A (ko) | 2022-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102021103272A1 (de) | Robotersteuerung unter Verwendung von Deep Learning | |
DE112020005364T5 (de) | Api für rekurrente neuronale netze | |
DE102021124008A1 (de) | Training eines neuronalen netzes unter verwendung robuster temporaler ensemblebildung | |
DE102021122617A1 (de) | Globales föderiertes training für neuronale netze | |
DE112021001164T5 (de) | Dynamischer lastausgleich von operationen für deeplearning- analysen in echtzeit | |
DE102022110000A1 (de) | Dynamische gewichtsaktualisierungen für neuronale netzwerke | |
DE112021005717T5 (de) | Modell zum maschinellen Lernen für die Aufgaben- und Bewegungsplanung | |
DE102021113105A1 (de) | Techniken zum modifizieren und trainieren eines neuronalen netzwerks | |
DE112021002945T5 (de) | Kontextbezogene Bildübersetzung mit Hilfe neuronaler Netze | |
DE112021001835T5 (de) | Beschriften von bildern mit einem neuronalen netz | |
DE102022114796A1 (de) | Pretraining-framework für neuronale netzwerke | |
DE112021001102T5 (de) | Hybride quantisierung von neuronalen netzen für edge-computing-anwendungen | |
DE112021003301T5 (de) | Techniken zur klassifikation mit neuronalen netzen | |
DE102022124368A1 (de) | Sichere ausführung für mehrprozessoreinrichtungen mittels vertrauenswürdiger ausführungsumgebungen | |
DE112021001461T5 (de) | Verbesserte objektidentifizierung mittels eines oder mehrerer neuronaler netze | |
DE102021132071A1 (de) | Scheduler für neuronales netz | |
DE112021001807T5 (de) | Beschleunigtes Training für neuronale Netzmodelle | |
DE112021000953T5 (de) | Erzeugung von kennzeichen mittels neuronaler netze | |
DE102021110778A1 (de) | Inhaltsverwaltung unter verwendung eines oder mehrerer neuronaler netzwerke | |
DE112021001946T5 (de) | Attribut-bewusste bildgeneration unter verwendung von neuronalen netzwerken | |
DE102022108711A1 (de) | Techniken zur kombination von operationen | |
DE102021131760A1 (de) | Anwendungsprogrammierschnittstelle für berechnungen einesneuronalen netzes | |
DE102022108420A1 (de) | Kernelerzeugung für neuronale netzwerke | |
DE112022004942T5 (de) | Techniken zum Inferieren von Informationen | |
DE102022109521A1 (de) | Techniken zur Parallelausführung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R082 | Change of representative |
Representative=s name: BARDEHLE PAGENBERG PARTNERSCHAFT MBB PATENTANW, DE |