ES3074545T3 - Compute optimizations for low precision machine learning operations - Google Patents

Compute optimizations for low precision machine learning operations

Info

Publication number
ES3074545T3
ES3074545T3 ES22204509T ES22204509T ES3074545T3 ES 3074545 T3 ES3074545 T3 ES 3074545T3 ES 22204509 T ES22204509 T ES 22204509T ES 22204509 T ES22204509 T ES 22204509T ES 3074545 T3 ES3074545 T3 ES 3074545T3
Authority
ES
Spain
Prior art keywords
graphics
memory
operations
precision
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES22204509T
Other languages
English (en)
Inventor
Elmoustapha Ould-Ahmed-Vall
Sara S Baghsorkhi
Anbang Yao
Kevin Nealis
Xiaoming Chen
Altug Koker
Abhishek R Appu
John C Weast
Mike B Macpherson
Dukhwan Kim
Linda L Hurd
Ben J Ashbaugh
Barath Lakshmanan
Liwei Ma
Joydeep Ray
Ping T Tang
Michael S Strickland
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of ES3074545T3 publication Critical patent/ES3074545T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00—General purpose image data processing
    • G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00—Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02—Addressing or allocation; Relocation
    • G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00—Digital computers in general; Data processing equipment in general
    • G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163—Interprocessor communication
    • G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00—Digital computers in general; Data processing equipment in general
    • G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163—Interprocessor communication
    • G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
    • G06F9/30014—Arithmetic instructions with variable precision
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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/30181—Instruction operation extension or modification
    • G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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/3861—Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00—Arrangements for program control, e.g. control units
    • G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46—Multiprogramming arrangements
    • G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00—Machine learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/044—Recurrent networks, e.g. Hopfield networks
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/044—Recurrent networks, e.g. Hopfield networks
    • G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/045—Combinations of networks
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00—Computing arrangements based on biological models
    • G06N3/02—Neural networks
    • G06N3/04—Architecture, e.g. interconnection topology
    • G06N3/0464—Convolutional networks [CNN, ConvNet]
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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
    • G06N3/084—Backpropagation, e.g. using gradient descent
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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
    • G06N3/0895—Weakly supervised learning, e.g. semi-supervised or self-supervised learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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
    • G06N3/09—Supervised learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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
    • G06N3/096—Transfer learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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
    • G06N3/098—Distributed learning, e.g. federated learning
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00—General purpose image data processing
    • G06T1/60—Memory management
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40—Specific encoding of data in memory or cache
    • G06F2212/401—Compressed data
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00—Three-dimensional [3D] image rendering
    • G06T15/005—General purpose rendering architectures
    • Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computer Hardware Design (AREA)
  • Neurology (AREA)
  • Nonlinear Science (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Numerical Control (AREA)
  • Feedback Control In General (AREA)
  • Image Analysis (AREA)
  • Apparatus For Radiation Diagnosis (AREA)
  • Executing Machine-Instructions (AREA)
  • Radar Systems Or Details Thereof (AREA)

Abstract

En algunas realizaciones de ejemplo, se puede proporcionar un acelerador de módulo multichip utilizable para ejecutar operaciones de procesamiento de datos tensoriales, dicho acelerador de módulo multichip comprende un módulo multichip que incluye una pila de memoria con múltiples chips de memoria y un circuito de procesador paralelo acoplado comunicativamente a la pila de memoria. El circuito de procesador paralelo comprende núcleos de procesador para ejecutar operaciones de multiplicación y acumulación de matrices, donde dichas operaciones comprenden operaciones de punto flotante; las operaciones de punto flotante son configurables para comprender operaciones de multiplicación y acumulación de matrices bidimensionales con entradas de distinta precisión; las operaciones de punto flotante comprenden una primera operación con una primera precisión y una segunda operación con una segunda precisión; y la primera operación comprende una multiplicación con al menos una entrada de punto flotante de 16 bits y la segunda operación comprende una acumulación con una entrada de punto flotante de 32 bits. También se describen sistemas relacionados, medios de almacenamiento legibles por máquina no transitorios, métodos y artículos de fabricación. (Traducción automática con Google Translate, sin valor legal)

Description

[0001] DESCRIPCIÓN
[0002] Optimizaciones de cálculo para operaciones de aprendizaje automático de baja precisión
[0003] SECTOR TÉCNICO
[0004] Las formas de realización hacen referencia en general al procesamiento de datos y, más particularmente, al procesamiento de datos por medio de una unidad de procesamiento de gráficos de propósito general.
[0005] ANTECEDENTES DE LA DESCRIPCIÓN
[0006] El procesamiento de datos de gráficos en paralelo actual incluye sistemas y métodos desarrollados para realizar operaciones específicas en datos de gráficos tales como, por ejemplo, interpolación lineal, teselación, rasterización, correlación de texturas, prueba de profundidad, etc. Tradicionalmente, los procesadores de gráficos usan unidades de cálculo de función fija para procesar datos de gráficos; sin embargo, más recientemente, porciones de procesadores de gráficos se han hecho programables, habilitando que tales procesadores soporten una variedad más amplia de operaciones para el procesamiento de datos de vértices y fragmentos.
[0007] Para aumentar aún más el rendimiento, los procesadores de gráficos habitualmente implementan técnicas de procesamiento tales como canalización, que intentan procesar, en paralelo, la mayor cantidad posible de datos de gráficos a lo largo de las diferentes partes de la canalización de gráficos. Los procesadores de gráficos paralelos con arquitecturas de múltiples hilos y única instrucción (SIMT) se diseñan para maximizar la cantidad de procesamiento paralelo en la canalización de gráficos. En una arquitectura de SIMT, grupos de hilos paralelos intentan ejecutar instrucciones de programa de manera sincronizada conjuntamente tan a menudo como sea posible para aumentar la eficiencia de procesamiento. Puede encontrarse una vista global general del software y hardware para arquitecturas SIMT enCUDA Programming, capítulo 3, páginas 37-51 (2013) de Shane Cook y/o enCUDA Handbook, A Comprehensive Guide to GPU Programming, secciones 2.6.2 a 3.1.2 (junio de 2013) de Nicholas Wilt. El documento US 2017/052857 A1 divulga un procesamiento paralelo que incluye una memoria apilada y un acelerador no lineal que implementa operaciones en operandos de coma flotante, precisión única o precisión doble.
[0008] SUMARIO DE LA INVENCIÓN
[0009] La invención se describe en las reivindicaciones independientes adjuntas. Realizaciones ventajosas se describen mediante las reivindicaciones dependientes adjuntas.
[0010] BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0011] De modo que las características de la presente invención puedan entenderse en detalle, puede obtenerse una descripción más particular de la invención haciendo referencia a las realizaciones, algunas de las cuales se han ilustrado en los dibujos adjuntos. Sin embargo, se ha de observar que los dibujos adjuntos ilustran únicamente realizaciones habituales y, por lo tanto, no han de considerarse limitantes del alcance de todas las realizaciones. LaFIG.1es un diagrama de bloques que ilustra un sistema informático configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento;
[0012] lasFIGS.2A-2Dilustran componentes de procesador paralelo, de acuerdo con una realización;
[0013] lasFIGS.3A-3Bson diagramas de bloques de multiprocesadores de gráficos, de acuerdo con las realizaciones; lasFIGS. 4A-4Filustran una arquitectura de ejemplo en la que una pluralidad de GPU se acopla comunicativamente a una pluralidad de procesadores de múltiples núcleos;
[0014] laFIG.5ilustra una canalización de procesamiento de gráficos, de acuerdo con una realización;
[0015] LaFIG.6ilustra una pila de software de aprendizaje automático, de acuerdo con una realización;
[0016] laFIG.7ilustra una unidad de procesamiento de gráficos de propósito general altamente paralela, de acuerdo con una realización;
[0017] laFIG.8ilustra un sistema informático de múltiples GPU, de acuerdo con una realización;
[0018] lasFIGS.9A-9Bilustran capas de redes neuronales profundas ejemplares;
[0019] laFIG.10ilustra una red neuronal recurrente ejemplar;
[0020] laFIG.11ilustra el entrenamiento y despliegue de una red neuronal profunda;
[0021] laFIG.12es un diagrama de bloques que ilustra un aprendizaje distribuido;
[0022] laFIG.13ilustra un sistema en un chip (SOC) de inferencia ejemplar adecuado para realizar una inferencia usando un modelo entrenado;
[0023] laFIG. 14ilustra componentes de una unidad de coma flotante de precisión dinámica, de acuerdo con una realización;
[0024] laFIG.15proporciona detalles adicionales con respecto a una unidad de coma flotante de precisión dinámica, de acuerdo con una realización;
[0025] laFIG.16ilustra asignaciones de hilos para un sistema de procesamiento de precisión dinámica, de acuerdo con una realización;
[0026] laFIG.17ilustra una lógica para realizar una operación numérica con menos precisión de la requerida, de acuerdo con una realización;
[0027] laFIG.18ilustra una vectorización en bucle para unidades SIMD, de acuerdo con una realización;
[0028] laFIG.19ilustra un sistema de procesamiento de hilos, de acuerdo con una realización;
[0029] laFIG.20ilustra una lógica para asignar hilos para su cálculo, de acuerdo con una realización;
[0030] laFIG. 21ilustra una red neuronal profunda que se puede procesar usando una lógica de cálculo proporcionada por las realizaciones descritas en el presente documento;
[0031] laFIG. 22es un diagrama de flujo de una lógica para impedir un error o una pérdida significativa de precisión cuando se realizan operaciones de baja precisión para un aprendizaje automático, de acuerdo con una realización; laFIG.23es un diagrama de bloques de un sistema de procesamiento, de acuerdo con una realización;
[0032] laFIG. 24es un diagrama de bloques de una realización de un procesador que tiene uno o más núcleos de procesador, un controlador de memoria integrado y un procesador de gráficos integrado;
[0033] laFIG.25es un diagrama de bloques de un procesador de gráficos, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador de gráficos integrado con una pluralidad de núcleos de procesamiento;
[0034] laFIG.26es un diagrama de bloques de un motor de procesamiento de gráficos de un procesador de gráficos de acuerdo con algunas realizaciones;
[0035] laFIG.27es un diagrama de bloques de un procesador de gráficos proporcionado por una realización adicional; laFIG.28ilustra la lógica de ejecución de hilos que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones;
[0036] laFIG. 29es un diagrama de bloques que ilustra unos formatos de instrucción de procesador de gráficos de acuerdo con algunas realizaciones;
[0037] laFIG.30es un diagrama de bloques de un procesador de gráficos de acuerdo con otra realización.
[0038] lasFIGS. 31A-31Bilustran un formato de comando de procesador de gráficos y secuencia de comandos, de acuerdo con algunas realizaciones;
[0039] laFIG. 32ilustra un ejemplo de arquitectura de software de gráficos para un sistema de procesamiento de datos de acuerdo con algunas realizaciones;
[0040] laFIG. 33es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo de IP, de acuerdo con una realización;
[0041] laFIG.34es un diagrama de bloques que ilustra un ejemplo de circuito integrado de sistema en un chip, de acuerdo con una realización;
[0042] laFIG. 35es un diagrama de bloques que ilustra un procesador de gráficos adicional, de acuerdo con una realización; y
[0043] laFIG. 36es un diagrama de bloques que ilustra un ejemplo de procesador de gráficos adicional de un circuito integrado de sistema en un chip, de acuerdo con una realización.
[0045] DESCRIPCIÓN DETALLADA
[0047] En algunas realizaciones, una unidad de procesamiento de gráficos (GPU) está acoplada comunicativamente a núcleos de anfitrión/de procesador para acelerar las operaciones de gráficos, las operaciones de aprendizaje automático, las operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede estar comunicativamente acoplada al procesador/núcleos de anfitrión a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede integrarse en el mismo paquete o chip que los núcleos y acoplarse comunicativamente a los núcleos a través de un bus/interconexión de procesador interno (es decir, interno al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza circuitos/lógica especializada para procesar de forma eficiente estos comandos/instrucciones.
[0049] En la siguiente descripción se exponen numerosos detalles específicos para proporcionar una comprensión más completa. Sin embargo, será evidente para los expertos en la materia que las realizaciones descritas en el presente documento pueden llevarse a la práctica sin uno o más de estos detalles específicos. En otros casos, no se han descrito características bien conocidas para evitar oscurecer los detalles de las presentes realizaciones.
[0051] Descripción general del sistema
[0053] LaFIG.1es un diagrama de bloques que ilustra un sistema informático 100 configurado para implementar uno o más aspectos de las realizaciones descritas en el presente documento. El sistema informático 100 incluye un subsistema de procesamiento 101 que tiene uno o más procesadores 102 y una memoria del sistema 104 que se comunica mediante una ruta de interconexión que puede incluir un concentrador de memoria 105. El concentrador de memoria 105 puede ser un componente separado dentro de un componente de conjunto de microprocesadores o puede estar integrado dentro del uno o más procesadores 102. El concentrador de memoria 105 se acopla con un subsistema de E/S 111 mediante un enlace de comunicación 106. El subsistema de E/S 111 incluye un concentrador de E/S 107 que puede permitir que el sistema informático 100 reciba la entrada de uno o más dispositivos de entrada 108. Además, el concentrador de E/S 107 puede permitir a un controlador de visualización, que puede estar incluido en el uno o más procesadores 102, proporcionar salidas a uno o más dispositivos de visualización 110A. En una realización, el uno o más dispositivos de visualización 110A acoplados con el concentrador de E/S 107 pueden incluir un dispositivo de visualización local, interno o integrado.
[0055] En una realización, el subsistema de procesamiento 101 incluye uno o más procesadores paralelos 112 acoplados al concentrador de memoria 105 mediante un bus u otro enlace de comunicación 113. El enlace de comunicación 113 puede ser uno de cualquier número de tecnologías o protocolos de enlace de comunicación basados en normas, tales como, aunque no de forma limitativa, PCI Express, o puede ser una interfaz de comunicaciones o tejido de comunicaciones específicos del proveedor. En una realización, el uno o más procesadores paralelos 112 forman un sistema de procesamiento paralelo o vectorial enfocado informáticamente que incluye un gran número de núcleos de procesamiento y/o agrupaciones de procesamiento, tal como un procesador de muchos núcleos integrados (MIC). En una realización, el uno o más procesadores paralelos 112 forman un subsistema de procesamiento de gráficos que puede emitir píxeles a uno del uno o más o dispositivos de visualización 110A acoplados mediante el concentrador de E/S 107. El uno o más procesadores paralelos 112 pueden incluir también un controlador de visualización y una interfaz de visualización (no mostrados) para habilitar una conexión directa a uno o más dispositivos de visualización 110B.
[0057] Dentro del subsistema de E/S 111, una unidad de almacenamiento del sistema 114 puede conectarse al concentrador de E/S 107 para proporcionar un mecanismo de almacenamiento para el sistema informático 100. Se puede usar un conmutador de E/S 116 para proporcionar un mecanismo de interfaz para habilitar conexiones entre el concentrador de E/S 107 y otros componentes, tales como un adaptador de red 118 y/o un adaptador de red inalámbrica 119 que pueden estar integrados en la plataforma, y diversos otros dispositivos que pueden añadirse mediante uno o más dispositivos complementarios 120. El adaptador de red 118 puede ser un adaptador de Ethernet u otro adaptador de red cableada. El adaptador de red inalámbrica 119 puede incluir uno o más de un dispositivo de red Wifi, Bluetooth, de comunicación de campo cercano (NFC) o de otro tipo que incluya una o más radios inalámbricas.
[0059] El sistema informático 100 puede incluir otros componentes no mostrados explícitamente, incluyendo conexiones USB u otros puertos, unidades de almacenamiento óptico, dispositivos de captura de vídeo y similares, que también pueden estar conectados al concentrador de E/S 107. Las rutas de comunicación que interconectan los diversos componentes de la FIG. 1 pueden implementarse usando cualquier protocolo adecuado, tal como protocolos basados en PCI (Interconexión de Componentes Periféricos) (por ejemplo, PCI-Express), o cualquier otra interfaz y/o protocolo de comunicación de bus o de punto a punto, tales como la interconexión de alta velocidad NV-Link, o protocolos de interconexión conocidos en la técnica.
[0061] En una realización, el uno o más procesadores paralelos 112 incorporan circuitos optimizados para procesamiento de gráficos y vídeo, incluyendo, por ejemplo, circuitos de salida de vídeo, y constituyen una unidad de procesamiento de gráficos (GPU). En otra realización, el uno o más procesadores paralelos 112 incorporan circuitos optimizados para el procesamiento de propósito general, mientras conservan la arquitectura computacional subyacente, descrita con mayor detalle en el presente documento. En otra realización más, los componentes del sistema informático 100 pueden estar integrados con uno o más de otros elementos de sistema en un único circuito integrado. Por ejemplo, el uno o más procesadores paralelos 112, el concentrador de memoria 105, el procesador o procesadores 102 y el concentrador de E/S 107 pueden integrarse en un circuito integrado de sistema en chip (SoC). Como alternativa, los componentes del sistema informático 100 pueden integrarse en un solo paquete para formar una configuración de sistema en paquete (SIP). En una realización, al menos una porción de los componentes del sistema informático 100 se puede integrar en un módulo de múltiples chips (MCM), que se puede interconectar con otros módulos de múltiples chips en un sistema informático modular.
[0063] Se apreciará que el sistema informático 100 mostrado en el presente documento es ilustrativo y que son posibles variaciones y modificaciones. La topología de conexión, incluyendo el número y la disposición de puentes, el número de procesadores 102 y el número de procesadores paralelos 112, puede modificarse como se desee. Por ejemplo, en algunas realizaciones, la memoria de sistema 104 está conectada al procesador o procesadores 102 directamente en lugar de a través de un puente, mientras que otros dispositivos se comunican con la memoria de sistema 104 mediante el concentrador de memoria 105 y el procesador o procesadores 102. En otras topologías alternativas, el procesador o procesadores paralelos 112 se conectan al concentrador de E/S 107 o directamente a uno del uno o más procesadores 102, en lugar de al concentrador de memoria 105. En otras realizaciones, el concentrador de E/S 107 y el concentrador de memoria 105 se pueden integrar en un único chip. Algunas realizaciones pueden incluir dos o más conjuntos de procesador o procesadores 102 anexados mediante múltiples zócalos, que pueden acoplarse con dos o más instancias del procesador o procesadores paralelos 112.
[0065] Algunos de los componentes particulares mostrados en el presente documento son opcionales y pueden no incluirse en todas las implementaciones del sistema informático 100. Por ejemplo, puede soportarse cualquier número de tarjetas o periféricos complementarios, o se pueden eliminar algunos componentes. Adicionalmente, algunas arquitecturas pueden usar diferente terminología para componentes similares a aquellos ilustrados en la FIG.1. Por ejemplo, el concentrador de memoria 105 se puede denominar puente norte en algunas arquitecturas, mientras que el concentrador de E/S 107 puede denominarse puente sur.
[0066] LaFIG. 2Ailustra un procesador paralelo 200, de acuerdo con una realización. Los diversos componentes del procesador paralelo 200 pueden implementarse usando uno o más dispositivos de circuito integrado, tal como procesadores programables, circuitos integrados específicos de la aplicación (ASIC) o matrices de puertas programables en campo (FPGA). El procesador paralelo 200 ilustrado es una variante del uno o más procesadores paralelos 112 mostrados en la Figura 1, de acuerdo con una realización.
[0068] En una realización, el procesador paralelo 200 incluye una unidad de procesamiento paralelo 202. La unidad de procesamiento paralelo incluye una unidad de E/S 204 que habilita la comunicación con otros dispositivos, incluyendo otras instancias de la unidad de procesamiento paralelo 202. La unidad de E/S 204 puede conectarse directamente a otros dispositivos. En una realización, la unidad de E/S 204 se conecta con otros dispositivos usando una interfaz de concentrador o de conmutador, tal como un concentrador de memoria 105. Las conexiones entre el concentrador de memoria 105 y la unidad de E/S 204 forman un enlace de comunicación 113. Dentro de la unidad de procesamiento paralelo 202, la unidad de E/S 204 se conecta con una interfaz anfitriona 206 y una barra transversal de memoria 216, donde la interfaz anfitriona 206 recibe comandos dirigidos a llevar a cabo operaciones de procesamiento y la barra transversal de memoria 216 recibe comandos dirigidos a llevar a cabo operaciones de memoria.
[0070] Cuando la interfaz anfitriona 206 recibe una memoria intermedia de comandos a través de la unidad de E/S 204, la interfaz anfitriona 206 puede dirigir operaciones de trabajo para realizar esos comandos a un extremo frontal 208. En una realización, el extremo frontal 208 se acopla con un planificador 210, que está configurado para distribuir comandos u otros elementos de trabajo a una matriz de agrupaciones de procesamiento 212. En una realización, el planificador 210 garantiza que la matriz de agrupaciones de procesamiento 212 esté configurada correctamente y en un estado válido antes de que las tareas se distribuyan a las agrupaciones de procesamiento de la matriz de agrupaciones de procesamiento 212. En una realización, el planificador 210 se implementa mediante una lógica de firmware que se ejecuta en un microcontrolador. El planificador implementado por microcontrolador 210 se puede configurar para realizar operaciones de planificación compleja y distribución de trabajo con granularidad gruesa y fina, lo que habilita dar prioridad de manera rápida y la conmutación de contexto de hilos que se ejecutan en la matriz de procesamiento 212. En una realización, el software anfitrión puede proporcionar cargas de trabajo para la planificación en la matriz de procesamiento 212 mediante uno de múltiples timbres de procesamiento de gráficos. Las cargas de trabajo, a continuación, pueden distribuirse automáticamente a través de la matriz de procesamiento 212 por la lógica del planificador 210 dentro del microcontrolador planificador.
[0072] La matriz de agrupaciones de procesamiento 212 puede incluir hasta "N" agrupaciones de procesamiento (por ejemplo, la agrupación 214A, la agrupación 214B, hasta la agrupación 214N). Cada agrupación 214A-214N de la matriz de agrupaciones de procesamiento 212 puede ejecutar un gran número de hilos concurrentes. El planificador 210 puede asignar trabajo a las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 usando diversos algoritmos de planificación y/o distribución de trabajo, que pueden variar dependiendo de la carga de trabajo que surge para cada tipo de programa o cálculo. La planificación puede manejarse dinámicamente por el planificador 210, o puede ser ayudada, en parte, por lógica de compilador durante la compilación de la lógica de programa configurada para la ejecución por la matriz de agrupaciones de procesamiento 212. En una realización, pueden asignarse diferentes agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 para procesar diferentes tipos de programas o para realizar diferentes tipos de cálculos.
[0074] El conjunto de agrupaciones de procesamiento 212 se puede configurar para llevar a cabo varios tipos de operaciones de procesamiento paralelo. En una realización, la matriz de grupo de procesamiento 212 está configurada para realizar operaciones de cálculo paralelas de propósito general. Por ejemplo, la matriz de agrupaciones de procesamiento 212 puede incluir lógica para ejecutar tareas de procesamiento que incluyen el filtrado de datos de vídeo y/o audio, la realización de operaciones de modelado, incluyendo operaciones físicas, y la realización de transformaciones de datos.
[0076] En una realización, la matriz de agrupaciones de procesamiento 212 está configurada para realizar operaciones de procesamiento de gráficos paralelo. En realizaciones en las que el procesador paralelo 200 está configurado para realizar operaciones de procesamiento de gráficos, la matriz de agrupaciones de procesamiento 212 puede incluir lógica adicional para soportar la ejecución de tales operaciones de procesamiento de gráficos, que incluyen, pero sin limitación, lógica de muestreo de textura para realizar operaciones de textura, así como lógica de teselación y otra lógica de procesamiento de vértices. Además, la matriz de agrupaciones de procesamiento 212 se puede configurar para ejecutar programas de sombreado relacionados con el procesamiento de gráficos tales como, entre otros, sombreadores de vértices, sombreadores de teselación, sombreadores de geometría y sombreadores de píxeles. La unidad de procesamiento paralelo 202 puede transferir datos desde la memoria del sistema por medio de la unidad de E/S 204 para su procesamiento. Durante el procesamiento, los datos transferidos se pueden almacenar en la memoria en chip (por ejemplo, la memoria del procesador paralelo 222) durante el procesamiento y, a continuación, escribirse de nuevo en la memoria del sistema.
[0078] En una realización, cuando se usa la unidad de procesamiento paralelo 202 para realizar el procesamiento de gráficos, el planificador 210 puede estar configurado para dividir la carga de trabajo de procesamiento en tareas de tamaño aproximadamente igual, para permitir mejor la distribución de las operaciones de procesamiento de gráficos a múltiples agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212. En algunas realizaciones, porciones de la matriz de agrupaciones de procesamiento 212 se pueden configurar para realizar diferentes tipos de procesamiento. Por ejemplo, una primera porción puede configurarse para realizar un sombreado de vértices y una generación de topología, una segunda porción puede configurarse para realizar una teselación y un sombreado de geometría, y una tercera porción puede configurarse para realizar un sombreado de píxeles u otras operaciones de espacio de pantalla, para producir una imagen representada para su visualización. Los datos intermedios producidos por una o más de las agrupaciones 214A-214N se pueden almacenar en memorias intermedias para permitir que los datos intermedios se transmitan entre agrupaciones 214A-214N para su procesamiento adicional.
[0080] Durante la operación, la matriz de agrupaciones de procesamiento 212 puede recibir tareas de procesamiento para ser ejecutadas a través del planificador 210, que recibe comandos que definen tareas de procesamiento desde el extremo frontal 208. Para las operaciones de procesamiento de gráficos, las tareas de procesamiento pueden incluir índices de datos a procesar, por ejemplo, datos de superficie (parche), datos de primitiva, datos de vértice y/o datos de píxel, así como parámetros de estado y comandos que definen cómo se van a procesar los datos (por ejemplo, qué programa se va a ejecutar). El planificador 210 puede configurarse para buscar los índices correspondientes a las tareas o puede recibir los índices desde el extremo frontal 208. El extremo frontal 208 se puede configurar para garantizar que la matriz de agrupaciones de procesamiento 212 se configura en un estado válido antes de que se inicie la carga de trabajo especificada por las memorias intermedias de comandos entrantes (por ejemplo, memorias intermedias de lotes, memorias intermedias de inserción, etc.).
[0082] Cada una de la una o más instancias de la unidad de procesamiento paralelo 202 puede acoplarse con la memoria de procesador paralelo 222. Se puede acceder a la memoria de procesador paralelo 222 por medio de la barra transversal de memoria 216, que puede recibir solicitudes de memoria de la matriz de agrupaciones de procesamiento 212 así como de la unidad de E/S 204. La barra transversal de memoria 216 puede acceder a la memoria de procesador paralelo 222 mediante una interfaz de memoria 218. La interfaz de memoria 218 puede incluir múltiples unidades de partición (por ejemplo, la unidad de partición 220A, la unidad de partición 220B, hasta la unidad de partición 220N) que se pueden acoplar cada una a una porción (por ejemplo, unidad de memoria) de la memoria de procesador paralelo 222. En una implementación, el número de unidades de partición 220A-220N está configurado para que sea igual al número de unidades de memoria, de manera que una primera unidad de partición 220A tiene una primera unidad de memoria 224A correspondiente, una segunda unidad de partición 220B tiene una unidad de memoria 224B correspondiente y una N-ésima unidad de partición 220N tiene una N-ésima unidad de memoria 224N correspondiente. En otras realizaciones, el número de unidades de partición 220A-220N puede no ser igual al número de dispositivos de memoria.
[0084] En diversas realizaciones, las unidades de memoria 224A-224N pueden incluir diversos tipos de dispositivos de memoria, que incluyen memoria de acceso aleatorio dinámica (DRAM) o memoria gráfica de acceso aleatorio, tal como una memoria gráfica de acceso aleatorio síncrona (SGRAM), que incluye una memoria gráfica de doble tasa de datos (GDDR). En una realización, las unidades de memoria 224A-224N también pueden incluir memoria 3D apilada, que incluye, pero sin limitación, memoria de ancho de banda alto (HBM). Los expertos en la materia apreciarán que la implementación específica de las unidades de memoria 224A-224N puede variar y puede seleccionarse a partir de uno de diversos diseños convencionales. Los objetivos de representación, tales como las memorias intermedias de fotogramas o los mapas de texturas, se pueden almacenar en las unidades de memoria 224A-224N, permitiendo a las unidades de partición 220A-220N escribir partes de cada objetivo de representación en paralelo para utilizar de forma eficiente el ancho de banda disponible de la memoria de procesador paralelo 222. En algunas realizaciones, se puede excluir una instancia local de la memoria de procesador paralelo 222 en favor de un diseño de memoria unificado que utiliza memoria de sistema junto con memoria caché local.
[0086] En una realización, una cualquiera de las agrupaciones 214A-214N de la matriz de agrupaciones de procesamiento 212 puede procesar datos que se escribirán en cualquiera de las unidades de memoria 224A-224N dentro de la memoria de procesador paralelo 222. La barra transversal de memoria 216 se puede configurar para transferir la salida de cada agrupación 214A-214N a cualquier unidad de partición 220A-220N o a otra agrupación 214A-214N, que puede llevar a cabo operaciones de procesamiento adicionales en la salida. Cada agrupación 214A-214N se puede comunicar con la interfaz de memoria 218 a través de la barra transversal de memoria 216 para leer o escribir en varios dispositivos de memoria externos. En una realización, la barra transversal de memoria 216 tiene una conexión a la interfaz de memoria 218 para comunicarse con la unidad de E/S 204, así como una conexión a una instancia local de la memoria de procesador en paralelo 222, lo que permite que las unidades de procesamiento dentro de las diferentes agrupaciones de procesamiento 214A a 214N se comuniquen con la memoria del sistema u otra memoria que no sea local a la unidad de procesamiento en paralelo 202. En una realización, la barra transversal de memoria 216 puede usar canales virtuales para separar flujos de tráfico entre las agrupaciones 214A-214N y las unidades de partición 220A-220N.
[0088] Aunque se ilustra una única instancia de la unidad de procesamiento paralelo 202 dentro del procesador paralelo 200, se puede incluir cualquier número de instancias de la unidad de procesamiento paralelo 202. Por ejemplo, se pueden proporcionar múltiples instancias de la unidad de procesamiento paralelo 202 en una única tarjeta de complemento, o se pueden interconectar múltiples tarjetas de complemento. Las diferentes instancias de la unidad de procesamiento paralelo 202 pueden configurarse para interoperar incluso si las diferentes instancias tienen diferentes números de núcleos de procesamiento, diferentes cantidades de memoria de procesador paralelo local y/u otras diferencias de configuración. Por ejemplo, y en una realización, algunas instancias de la unidad de procesamiento paralelo 202 pueden incluir unidades de coma flotante de mayor precisión con relación a otras instancias. Los sistemas que incorporan una o más instancias de la unidad de procesamiento paralelo 202 o el procesador paralelo 200 pueden implementarse en una diversidad de configuraciones y factores de forma, incluyendo, aunque no de forma limitativa, ordenadores de sobremesa, portátiles o personales portátiles, servidores, estaciones de trabajo, consolas de juegos y/o sistemas integrados.
[0090] LaFIG.2Bes un diagrama de bloques de una unidad de subdivisión 220, de acuerdo con una realización. En una realización, la unidad de partición 220 es una instancia de una de las unidades de partición 220A-220N de la FIG.
[0091] 2A. Como se ilustra, la unidad de partición 220 incluye una memoria caché de L2221, una interfaz de memoria intermedia de fotogramas 225 y una ROP 226 (unidad de operaciones de rasterización). La caché L2221 es una caché de lectura/escritura que está configurada para realizar operaciones de carga y almacenamiento recibidas desde la barra transversal de memoria 216 y la ROP 226. Los fallos de lectura y las solicitudes de escritura urgentes se emiten por la memoria caché de L2 221 a la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. Las actualizaciones también se pueden enviar a la memoria intermedia de fotogramas mediante la interfaz de memoria intermedia de fotogramas 225 para su procesamiento. En una realización, la interfaz de memoria intermedia de fotogramas 225 interactúa con una de las unidades de memoria en la memoria del procesador paralelo, tal como las unidades de memoria 224A-224N de la FIG.2 (por ejemplo, dentro de la memoria del procesador paralelo 222).
[0093] En las aplicaciones de gráficos, la ROP 226 es una unidad de procesamiento que realiza operaciones de rasterización, tales como estarcido, prueba z, mezcla y similares. La ROP 226 a continuación emite los datos de gráficos procesados que se almacenan en la memoria de gráficos. En algunas realizaciones, la ROP 226 incluye lógica de compresión para comprimir datos de profundidad o color que se escriben en la memoria y descomprimir datos de profundidad o color que se leen desde la memoria. La lógica de compresión puede ser una lógica de compresión sin pérdidas que hace uso de uno o más de múltiples algoritmos de compresión. El tipo de compresión que realiza la ROP 226 puede variar basándose en las características estadísticas de los datos que van a comprimirse. Por ejemplo, en una realización, la compresión de color delta se realiza en datos de profundidad y color sobre una base por tesela.
[0095] En algunas realizaciones, la ROP 226 está incluida dentro de cada agrupación de procesamiento (por ejemplo, la agrupación 214A-214N de la FIG. 2) en lugar de dentro de la unidad de partición 220. En una realización de este tipo, las solicitudes de lectura y escritura de datos de píxeles se transmiten a través de la barra transversal de memoria 216 en lugar de datos de fragmentos de píxel. Los datos de gráficos procesados pueden visualizarse en un dispositivo de visualización, tal como uno del uno o más dispositivos de visualización 110 de la FIG. 1, encaminarse para su posterior procesamiento por el procesador o procesadores 102, o encaminarse para su posterior procesamiento por una de las entidades de procesamiento dentro del procesador paralelo 200 de la FIG.
[0096] 2A.
[0098] LaFIG. 2Ces un diagrama de bloques de una agrupación de procesamiento 214 dentro de una unidad de procesamiento paralelo, de acuerdo con una realización. En una realización, la agrupación de procesamiento es una instancia de una de las agrupaciones de procesamiento 214A-214N de la FIG. 2. La agrupación de procesamiento 214 se puede configurar para ejecutar muchos hilos en paralelo, donde el término "hilo" se refiere a una instancia de un programa particular que se ejecuta sobre un conjunto particular de datos de entrada. En algunas realizaciones, se utilizan técnicas de emisión de instrucciones de instrucción única y de datos múltiples (SIMD) para soportar la ejecución en paralelo de un gran número de hilos sin proporcionar múltiples unidades de instrucción independientes. En otras realizaciones, se utilizan técnicas de instrucción única, de múltiples hilos (SIMT) para soportar la ejecución paralela de un gran número de hilos generalmente sincronizados, utilizando una unidad de instrucciones común configurada para emitir instrucciones a un conjunto de motores de procesamiento dentro de cada una de las agrupaciones de procesamiento. A diferencia de un régimen de ejecución SIMD, donde todos los motores de procesamiento ejecutan normalmente instrucciones idénticas, la ejecución SIMT permite que diferentes hilos sigan más fácilmente rutas de ejecución divergentes a través de un programa de hilos dado. Los expertos en la materia comprenderán que un régimen de procesamiento SIMD representa un subconjunto funcional de un régimen de procesamiento SIMT.
[0100] El funcionamiento de la agrupación de procesamiento 214 se puede controlar por medio de un gestor de canalizaciones 232 que distribuye las tareas de procesamiento a los procesadores paralelos SIMT. El gestor de canalizaciones 232 recibe instrucciones desde el planificador 210 de la FIG. 2 y gestiona la ejecución de estas instrucciones mediante un multiprocesador de gráficos 234 y/o una unidad de texturas 236. El multiprocesador de gráficos 234 ilustrado es un ejemplo de instancia de un procesador paralelo de SIMT. Sin embargo, se pueden incluir diversos tipos de procesadores paralelos SIMT de diferentes arquitecturas dentro de las agrupaciones de procesamiento 214. Se pueden incluir una o más instancias del multiprocesador de gráficos 234 dentro de una agrupación de procesamiento 214. El multiprocesador de gráficos 234 puede procesar datos y se puede usar una barra transversal de datos 240 para distribuir los datos procesados a uno de múltiples posibles destinos, incluyendo otras unidades de sombreador. El gestor de canalizaciones 232 puede facilitar la distribución de datos procesados especificando destinos para que los datos procesados se distribuyan a través de la barra transversal de datos 240.
[0101] Cada multiprocesador de gráficos 234 dentro de la agrupación de procesamiento 214 puede incluir un conjunto idéntico de lógica de ejecución funcional (por ejemplo, unidades aritmético-lógicas, unidades de cargaalmacenamiento, etc.). La lógica de ejecución funcional se puede configurar de manera canalizada en la que pueden emitirse nuevas instrucciones antes de que se hayan completado instrucciones previas. La lógica de ejecución funcional soporta una diversidad de operaciones que incluyen aritmética de números enteros y de coma flotante, operaciones de comparación, operaciones booleanas, desplazamiento de bits y cálculo de diversas funciones algebraicas. En una realización, puede aprovecharse el mismo hardware de unidades funcionales para realizar diferentes operaciones, y puede estar presente cualquier combinación de unidades funcionales.
[0103] Las instrucciones transmitidas a la agrupación de procesamiento 214 constituyen un hilo. Un conjunto de hilos ejecutándose a través del conjunto de motores de procesamiento paralelo es un grupo de hilos. Un grupo de hilos ejecuta el mismo programa en diferentes datos de entrada. Cada hilo dentro de un grupo de hilos se puede asignar a un motor de procesamiento diferente dentro de un multiprocesador de gráficos 234. Un grupo de hilos puede incluir menos hilos que la cantidad de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando un grupo de hilos incluye menos hilos que el número de motores de procesamiento, uno o más de los motores de procesamiento pueden estar inactivos durante los ciclos en los que se está procesando ese grupo de hilos. Un grupo de hilos también puede incluir más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234. Cuando el grupo de hilos incluye más hilos que el número de motores de procesamiento dentro del multiprocesador de gráficos 234, se puede realizar un procesamiento a lo largo de ciclos de reloj consecutivos. En una realización, múltiples grupos de hilos pueden ejecutarse concurrentemente en un multiprocesador de gráficos 234.
[0105] En una realización, el multiprocesador de gráficos 234 incluye una memoria caché interna para realizar operaciones de carga y almacenamiento. En una realización, el multiprocesador de gráficos 234 puede prescindir de una caché interna y usar una memoria caché (por ejemplo, caché L1308) dentro de la agrupación de procesamiento 214. Cada multiprocesador de gráficos 234 también tiene acceso a las cachés L2 dentro de las unidades de partición (por ejemplo, las unidades de partición 220A-220N de la FIG. 2) que se comparten entre todas las agrupaciones de procesamiento 214 y pueden usarse para transferir datos entre hilos. El multiprocesador de gráficos 234 también puede acceder a una memoria global fuera de chip, que puede incluir una o más de una memoria de procesador paralelo local y/o una memoria del sistema. Se puede usar cualquier memoria externa a la unidad de procesamiento paralelo 202 como memoria global. Las realizaciones en las que la agrupación de procesamiento 214 incluye múltiples instancias del multiprocesador de gráficos 234 pueden compartir instrucciones y datos comunes, que se pueden almacenar en la memoria caché de L1308.
[0107] Cada agrupación de procesamiento 214 puede incluir una MMU 245 (unidad de gestión de memoria) que está configurada para mapear direcciones virtuales en direcciones físicas. En otras realizaciones, una o más instancias de la MMU 245 pueden residir dentro de la interfaz de memoria 218 de la FIG.2. La MMU 245 incluye un conjunto de entradas de tabla de página (PTE) usadas para mapear una dirección virtual con una dirección física de una tesela y, opcionalmente, un índice de líneas de memoria caché. La MMU 245 puede incluir memorias intermedias de traducción anticipada (TLB) de direcciones o cachés que pueden residir dentro del multiprocesador de gráficos 234 o la caché de L1 o la agrupación de procesamiento 214. La dirección física se procesa para distribuir la localización de acceso a datos de superficie para permitir una solicitud eficiente que se intercala entre unidades de partición. El índice de línea de memoria caché puede usarse para determinar si una solicitud para una línea de caché es un acierto o fallo.
[0109] En aplicaciones gráficas e informáticas, una agrupación de procesamiento 214 puede configurarse de tal forma que cada multiprocesador de gráficos 234 se acopla a una unidad de textura 236 para realizar operaciones de mapeo de texturas, por ejemplo, determinando posiciones de muestra de texturas, leyendo datos de textura, y filtrando los datos de textura. Los datos de textura se leen de una caché interna de textura de L1 (no mostrada) o en algunas realizaciones de la caché de L1 dentro del multiprocesador de gráficos 234 y se busca en una caché de L2, memoria local de procesador paralelo, o memoria del sistema, según sea necesario. Cada multiprocesador de gráficos 234 emite las tareas procesadas a la barra transversal de datos 240 para proporcionar la tarea procesada a otra agrupación de procesamiento 214 para su procesamiento adicional o para almacenar la tarea procesada en una memoria caché de L2, memoria del procesador paralelo local o memoria del sistema a través de la barra transversal de memoria 216. Una preROP 242 (unidad de operaciones de rasterización previa) está configurada para recibir datos del multiprocesador de gráficos 234, dirigir los datos a unidades de ROP, que pueden estar ubicadas junto con unidades de partición descritas en el presente documento (por ejemplo, unidades de partición 220A-220N de la FIG. 2). La unidad de preROP 242 puede realizar optimizaciones para combinación de colores, organizar datos de color de píxeles y realizar traducciones de direcciones.
[0111] Se apreciará que la arquitectura central descrita en este documento es ilustrativa y que son posibles variaciones y modificaciones. Cualquier número de unidades de procesamiento, por ejemplo, multiprocesador de gráficos 234, unidades de textura 236, preROP 242, etc., se puede incluir dentro de una agrupación de procesamiento 214. Además, mientras que sólo se muestra una agrupación de procesamiento 214, una unidad de procesamiento paralelo según se describe en el presente documento puede incluir cualquier número de instancias de la agrupación de procesamiento 214. En una realización, cada agrupación de procesamiento 214 se puede configurar para operar de forma independiente de otras agrupaciones de procesamiento 214 utilizando unidades de procesamiento separadas y distintas, caché de L1, etc.
[0113] La FIG. 2D muestra un multiprocesador de gráficos 234, de acuerdo con una realización. En tal realización, el multiprocesador de gráficos 234 se acopla con el gestor de canalizaciones 232 de la agrupación de procesamiento 214. El multiprocesador de gráficos 234 tiene una canalización de ejecución que incluye, pero sin limitación, una caché de instrucciones 252, una unidad de instrucciones 254, una unidad de mapeo de direcciones 256, un archivo de registros 258, uno o más núcleos de unidad de procesamiento de gráficos de fin general (GPGPU) 262 y una o más unidades de carga/almacenamiento 266. Los núcleos GPGPU 262 y las unidades de carga/almacenamiento 266 están acoplados con la memoria caché 272 y la memoria compartida 270 a través de una interconexión de memoria y caché 268.
[0115] En una realización, la caché de instrucciones 252 recibe un flujo de instrucciones para ejecutar desde el gestor de canalizaciones 232. Las instrucciones se almacenan en memoria caché en la caché de instrucciones 252 y se despachan para su ejecución por la unidad de instrucciones 254. La unidad de instrucciones 254 puede despachar instrucciones como grupos de hilos (por ejemplo, urdimbres), con cada hilo del grupo de hilos asignado a una diferente unidad de ejecución dentro del núcleo de GPGPU 262. Una instrucción puede acceder a cualquiera de un espacio de direcciones local, compartido o global, especificando una dirección dentro de un espacio de direcciones unificado. La unidad de mapeo de direcciones 256 puede usarse para traducir direcciones en el espacio de direcciones unificadas a una dirección de memoria distinta que puede accederse por las unidades de carga/almacenamiento 266.
[0117] El archivo de registro 258 proporciona un conjunto de registros para las unidades funcionales del multiprocesador de gráficos 234. El archivo de registro 258 proporciona almacenamiento temporal para los operandos conectados a las rutas de datos de las unidades funcionales (por ejemplo, núcleos GPGPU 262, unidades de carga/almacenamiento 266) del multiprocesador de gráficos 234. En una realización, el archivo de registro 258 se divide entre cada una de las unidades funcionales de tal forma que a cada unidad funcional se le asigna una porción especializada del archivo de registro 258. En una realización, el archivo de registro 258 se divide entre las diferentes urdimbres que se están ejecutando por el multiprocesador de gráficos 234.
[0119] Cada uno de los núcleos GPGPU 262 puede incluir unidades de coma flotante (FPU) y/o unidades aritméticológicas (ALU) de números enteros que se utilizan para ejecutar instrucciones del multiprocesador de gráficos 234. Los núcleos GPGPU 262 pueden ser similares en arquitectura o pueden diferir en arquitectura, de acuerdo con las realizaciones. Por ejemplo, y en una realización, una primera porción de los núcleos de GPGPU 262 incluye una FPU de precisión simple y una ALU de números enteros, mientras que una segunda porción de los núcleos de GPGPU incluye una FPU de precisión doble. En una realización, las FPU pueden implementar la norma IEEE 754-2008 para aritmética de coma flotante o posibilitar aritmética de coma flotante de precisión variable. El multiprocesador de gráficos 234 puede incluir adicionalmente una o más unidades de función fija o especial para llevar a cabo funciones específicas tales como copiar rectángulos u operaciones de mezcla de píxeles. En una forma de realización, uno o más de los núcleos GPGPU también pueden incluir lógica de función fija o especial.
[0120] En una realización, los núcleos GPGPU 262 incluyen lógica SIMD capaz de realizar una única instrucción en múltiples conjuntos de datos. En una realización, los núcleos de GPGPU 262 pueden ejecutar físicamente instrucciones SIMD4, SIMD8 y SIMD16 y ejecutar lógicamente instrucciones SIMD1, SIMD2 y SIMD32. Las instrucciones de SIMD para los núcleos de GPGPU pueden generarse en tiempo de compilación por un compilador de sombreador o generase automáticamente cuando se ejecutan programas escritos y compilados para arquitecturas de único programa, múltiples datos (SPMD) o SIMT. Se pueden ejecutar múltiples hilos de un programa configurado para el modelo de ejecución SIMT mediante una única instrucción de SIMD. Por ejemplo, y en una realización, ocho hilos SIMT que realizan operaciones iguales o similares pueden ejecutarse en paralelo a través de una única unidad lógica SIMD8.
[0122] La interconexión de memoria y caché 268 es una red de interconexión que conecta cada una de las unidades funcionales del multiprocesador de gráficos 234 al archivo de registros 258 y a la memoria compartida 270. En una realización, la interconexión de memoria y caché 268 es una interconexión de barra transversal que permite que la unidad de carga/almacenamiento 266 implemente operaciones de carga y almacenamiento entre la memoria compartida 270 y el archivo de registros 258. El archivo de registro 258 puede operar a la misma frecuencia que los núcleos GPGPU 262, por lo que la transferencia de datos entre los núcleos GPGPU 262 y el archivo de registro 258 es de muy baja latencia. La memoria compartida 270 se puede utilizar para permitir la comunicación entre hilos que se ejecutan en las unidades funcionales dentro del multiprocesador de gráficos 234. La memoria caché 272 se puede usar como una memoria caché de datos, por ejemplo, para almacenar en caché datos de textura comunicados entre las unidades funcionales y la unidad de texturas 236. La memoria compartida 270 también se puede utilizar como un programa gestionado almacenado en caché. Los hilos que se ejecutan en los núcleos de GPGPU 262 pueden almacenar programáticamente datos dentro de la memoria compartida, además de los datos almacenados en caché automáticamente que se almacenan dentro de la caché 272.
[0123] LasFIGS. 3A-3Bilustran multiprocesadores de gráficos adicionales, de acuerdo con las realizaciones. Los multiprocesadores de gráficos 325, 350 ilustrados son variantes del multiprocesador de gráficos 234 de la FIG.2C. Los multiprocesadores gráficos 325, 350 ilustrados pueden configurarse como un multiprocesador de envío en continuo (SM) con capacidad de ejecución simultánea de un gran número de hilos de ejecución.
[0124] La FIG. 3A muestra un multiprocesador de gráficos 325 de acuerdo con una realización adicional. El multiprocesador de gráficos 325 incluye múltiples instancias adicionales de unidades de recurso de ejecución relativas al multiprocesador de gráficos 234 de la FIG.2D. Por ejemplo, el multiprocesador de gráficos 325 puede incluir múltiples instancias de la unidad de instrucciones 332A-332B, archivo de registro 334A-334B y unidad(es) de textura 344A-344B. El multiprocesador de gráficos 325 también incluye múltiples conjuntos de unidades de ejecución de gráficos o de cálculo (por ejemplo, el núcleo de GPGPU 336A-336B, el núcleo de GPGPU 337A-337B, el núcleo de GPGPU 338A-338B) y múltiples conjuntos de unidades de carga/almacenamiento 340A-340B. En una realización, las unidades de recurso de ejecución tienen una caché de instrucciones común 330, una memoria caché de textura y/o de datos 342 y una memoria compartida 346.
[0125] Los diversos componentes pueden comunicarse a través de un tejido de interconexión 327. En una realización, el tejido de interconexión 327 incluye uno o más conmutadores de barra transversal para habilitar la comunicación entre los diversos componentes del multiprocesador de gráficos 325. En una realización, el tejido de interconexión 327 es una capa de tejido de red de alta velocidad separada sobre la que se apila cada componente del multiprocesador de gráficos 325. Los componentes del multiprocesador de gráficos 325 se comunican con componentes remotos mediante el tejido de interconexión 327. Por ejemplo, cada uno de los núcleos GPGPU 336A-336B, 337A-337B y 3378A-338B puede comunicarse con la memoria compartida 346 a través del tejido de interconexión 327. El tejido de interconexión 327 puede arbitrar la comunicación dentro del multiprocesador de gráficos 325 para garantizar una asignación justa de ancho de banda entre los componentes.
[0126] La FIG. 3B muestra un multiprocesador de gráficos 350 de acuerdo con una realización adicional. El procesador de gráficos incluye múltiples conjuntos de recursos de ejecución 356A-356D, donde cada conjunto de recursos de ejecución incluye múltiples unidades de instrucciones, archivos de registro, núcleos de GPGPU y unidades de almacenamiento de carga, como se ilustra en la FIG. 2D y la FIG. 3A. Los recursos de ejecución 356A-356D pueden trabajar en concierto con la unidad o unidades de textura 360A-360D para operaciones de textura, mientras comparten una memoria caché de instrucciones 354, y memoria compartida 362. En una realización, los recursos de ejecución 356A a 356D pueden compartir una caché de instrucciones 354 y una memoria compartida 362, así como múltiples instancias de una memoria caché de textura y/o datos 358A-358B. Los diversos componentes pueden comunicarse mediante un tejido de interconexión 352 similar al tejido de interconexión 327 de la FIG.3A. Los expertos en la materia entenderán que la arquitectura descrita en las FIGS.1, 2A a 2D y 3A-3B es descriptiva y no limitativa en cuanto al alcance de las presentes realizaciones. Por lo tanto, las técnicas descritas en el presente documento pueden implementarse en cualquier unidad de procesamiento configurada apropiadamente, incluyendo, sin limitación, uno o más procesadores de aplicaciones móviles, una o más unidades centrales de procesamiento (CPU) de sobremesa o de servidor, incluyendo CPU de múltiples núcleos, una o más unidades de procesamiento paralelo, tales como la unidad de procesamiento paralelo 202 de la FIG. 2, así como uno o más procesadores de gráficos o unidades de procesamiento de propósito especial, sin apartarse del alcance de las realizaciones descritas en el presente documento.
[0127] En algunas realizaciones, un procesador paralelo o GPGPU, como se describe en el presente documento, está acoplado comunicativamente a núcleos anfitriones/procesador para acelerar operaciones de gráficos, operaciones de aprendizaje automático, operaciones de análisis de patrones y diversas funciones de GPU de propósito general (GPGPU). La GPU puede estar acoplada comunicativamente al procesador anfitrión/núcleos a través de un bus u otra interconexión (por ejemplo, una interconexión de alta velocidad tal como PCIe o NVLink). En otras realizaciones, la GPU puede integrarse en el mismo paquete o chip que los núcleos y acoplarse comunicativamente a los núcleos a través de un bus/interconexión de procesador interno (es decir, interno al paquete o chip). Independientemente de la manera en la que esté conectada la GPU, los núcleos del procesador pueden asignar trabajo a la GPU en forma de secuencias de comandos/instrucciones contenidas en un descriptor de trabajo. A continuación, la GPU utiliza circuitos/lógica especializada para procesar de forma eficiente estos comandos/instrucciones.
[0128] Técnicas para interconexión de GPU a procesador anfitrión
[0129] LaFIG. 4Ailustra un ejemplo de arquitectura en la que una pluralidad de GPU 410-413 están acopladas comunicativamente a una pluralidad de procesadores de múltiples núcleos 405-406 a través de enlaces de alta velocidad 440-443 (por ejemplo, buses, interconexiones de punto a punto, etc.). En una realización, los enlaces de alta velocidad 440-443 soportan un caudal de comunicación de 4 GB/s, 30 GB/s, 80 GB/s o mayor, dependiendo de la implementación. Se pueden usar diversos protocolos de interconexión, incluyendo, aunque no de forma limitativa, PCIe 4.0 o 5.0 y NVLink 2.0. Sin embargo, los principios subyacentes de la invención no se limitan a ningún protocolo o caudal de comunicación particular.
[0131] Además, y en una realización, dos o más de las GPU 410-413 están interconectadas a través de enlaces de alta velocidad 444-445, que pueden implementarse utilizando los mismos o diferentes protocolos/enlaces que los utilizados para los enlaces de alta velocidad 440-443. De manera similar, dos o más de los procesadores de múltiples núcleos 405-406 pueden estar conectados a través del enlace de alta velocidad 433, que puede ser un bus multiprocesador simétrico (SMP) que funciona a 20 GB/s, 30 GB/s, 120 GB/s o más. Como alternativa, toda la comunicación entre los diversos componentes de sistema mostrados en laFIG. 4Apuede lograrse usando los mismos protocolos/enlaces (por ejemplo, a través de un tejido de interconexión común). Sin embargo, según se ha mencionado, los principios subyacentes de la invención no se limitan a ningún tipo particular de tecnología de interconexión.
[0133] En una realización, cada procesador de múltiples núcleos 405-406 está acoplado de manera comunicativa a una memoria de procesador 401-402, mediante las interconexiones de memoria 430-431, respectivamente, y cada GPU 410-413 está acoplada de manera comunicativa a la memoria de la GPU 420-423 a través de las interconexiones de memoria de GPU 450-453, respectivamente. Las interconexiones de memoria 430-431 y 450-453 pueden utilizar las mismas tecnologías de acceso a memoria u otras diferentes. A modo de ejemplo, y no como limitación, las memorias de procesador 401-402 y las memorias de GPU 420-423 pueden ser memorias volátiles, tal como memorias de acceso aleatorio dinámicas (DRAM) (que incluyen DRAM apiladas), SDRAM DDR de gráficos (GDDR) (por ejemplo, GDDR5, GDDR6), o Memoria de Ancho de Banda Alto (HBM) y/o pueden ser memorias no volátiles, tales como 3D XPoint o Nano-Ram. En una realización, alguna porción de las memorias puede ser memoria volátil y otra porción puede ser memoria no volátil (por ejemplo, usando una jerarquía de memoria de dos niveles (2LM)).
[0135] Como se describe a continuación, aunque los diversos procesadores 405-406 y las GPU 410-413 pueden acoplarse físicamente a una memoria 401-402, 420-423 particular, respectivamente, puede implementarse una arquitectura de memoria unificada en la que el mismo espacio de direcciones de sistema virtuales (también denominado espacio de "direcciones efectivas") se distribuye entre todas las diversas memorias físicas. Por ejemplo, cada una de las memorias de procesador 401-402 puede comprender 64 GB del espacio de direcciones de memoria del sistema y cada una de las memorias de GPU 420-423 puede comprender 32 GB del espacio de direcciones de memoria del sistema (dando como resultado un total de 256 GB de memoria direccionable en este ejemplo).
[0137] LaFIG. 4Bilustra detalles adicionales para una interconexión entre un procesador de múltiples núcleos 407 y un módulo de aceleración de gráficos 446 de acuerdo con una forma de realización. El módulo de aceleración de gráficos 446 puede incluir uno o más chips de GPU integrados en una tarjeta de línea que está acoplada al procesador 407 a través del enlace de alta velocidad 440. Como alternativa, el módulo de aceleración de gráficos 446 puede integrarse en el mismo paquete o chip que el procesador 407.
[0139] El procesador 407 ilustrado incluye una pluralidad de núcleos 460A-460D, cada uno con una memoria intermedia de traducción anticipada 461A-461D y una o más cachés 462A-462D. Los núcleos pueden incluir diversos otros componentes para ejecutar instrucciones y procesar datos que no se ilustran para evitar obstaculizar los principios subyacentes de la invención (por ejemplo, unidades de búsqueda de instrucción, unidades de predicción de rama, descodificadores, unidades de ejecución, memorias intermedias de reordenación, etc.). Las caché 462A-462D pueden comprender cachés de nivel 1 (L1) y nivel 2 (L2). Además, pueden incluirse una o más cachés compartidas 426 en la jerarquía de almacenamiento en memoria caché y compartirse por conjuntos de los núcleos 460A-460D. Por ejemplo, una realización del procesador 407 incluye 24 núcleos, cada uno con su propia caché de L1, doce cachés de L2 compartidas y doce cachés de L3 compartidas. En esta realización, una de las cachés de L2 y L3 es compartida por dos núcleos adyacentes. El procesador 407 y el módulo de integración del acelerador de gráficos 446 se conectan con la memoria del sistema 441, que puede incluir las memorias del procesador 401-402
[0140] La coherencia se mantiene para datos e instrucciones almacenados en las diversas cachés 462A-462D, 456 y la memoria del sistema 441 a través de comunicación entre núcleos a través de un bus de coherencia 464. Por ejemplo, cada caché puede tener lógica/circuitos de coherencia de caché asociados con la misma para comunicarse a través del bus de coherencia 464 en respuesta a lecturas o escrituras detectadas en líneas de caché particulares. En una implementación, se implementa un protocolo de inspección de caché a través del bus de coherencia 464 para inspeccionar accesos a caché. Las técnicas de inspección/coherencia de memoria caché son bien entendidas por los expertos en la materia y no se describirán en detalle en el presente caso para evitar complicar los principios subyacentes de la invención.
[0142] En una realización, un circuito intermediario 425 acopla comunicativamente el módulo de aceleración de gráficos 446 al bus de coherencia 464, permitiendo que el módulo de aceleración de gráficos 446 participe en el protocolo de coherencia de memoria caché como un par de los núcleos. En particular, una interfaz 435 proporciona conectividad al circuito proxy 425 a través del enlace de alta velocidad 440 (por ejemplo, un bus PCIe, NVLink, etc.) y una interfaz 437 conecta el módulo de aceleración de gráficos 446 al enlace de alta velocidad 440.
[0144] En una implementación, un circuito de integración de acelerador 436 proporciona gestión de memoria caché, acceso a memoria, gestión de contexto y servicios de gestión de interrupción en nombre de una pluralidad de motores de procesamiento de gráficos 431, 432, N del módulo de aceleración de gráficos 446. Cada uno de los motores de procesamiento de gráficos 431, 432, N puede comprender una unidad de procesamiento de gráficos (GPU) separada. Como alternativa, los motores de procesamiento de gráficos 431, 432, N pueden comprender diferentes tipos de motores de procesamiento de gráficos dentro de una GPU, tales como unidades de ejecución de gráficos, motores de procesamiento de medios (por ejemplo, codificadores/descodificadores de vídeo), muestreadores y motores blit. En otras palabras, el módulo de aceleración de gráficos puede ser una GPU con una pluralidad de motores de procesamiento de gráficos 431-432, N o los motores de procesamiento de gráficos 431-432, N pueden ser GPU individuales integradas en un paquete, tarjeta de línea o chip común.
[0146] En una realización, el circuito de integración de acelerador 436 incluye una unidad de gestión de memoria (MMU) 439 para realizar diversas funciones de gestión de memoria tales como traducciones de memoria de virtual a física (también denominadas traducciones de memoria efectiva a real) y protocolos de acceso a memoria para acceder a la memoria del sistema 441. La MMU 439 también puede incluir una memoria intermedia de traducción anticipada (TLB) (no mostrada) para almacenar en memoria caché las traducciones de direcciones virtuales/efectivas a físicas/reales. En una realización, el circuito de integración de acelerador 436 incluye una unidad de extracción 491 para extraer comandos, instrucciones, descriptores de trabajo, etc., que definen operaciones que hay que realizar. En una implementación, una caché 438 almacena comandos y datos para acceso eficiente por los motores de procesamiento de gráficos 431-432, N. En una realización, los datos almacenados en caché 438 y las memorias gráficas 433-434, N se mantienen coherentes con las caché de núcleo 462A-462D, 456 y la memoria del sistema 411. Como se ha mencionado, esto puede conseguirse a través del circuito intermediario 425 que toma parte en el mecanismo de coherencia de caché en nombre de la caché 438 y las memorias 433-434, N (por ejemplo, enviando actualizaciones a la caché 438 relacionadas con modificaciones/accesos de líneas de caché en las cachés de procesador 462A-462D, 456 y recibiendo actualizaciones desde la caché 438).
[0148] Un conjunto de registros 449 almacenan datos de contexto para los hilos ejecutados por los motores de procesamiento de gráficos 431-432, N y un circuito de gestión de contexto 448 gestiona los contextos de hilo. Por ejemplo, el circuito de gestión de contexto 448 puede realizar operaciones de guardado y restauración para guardar y restaurar contextos de los diversos hilos durante conmutaciones de contexto (por ejemplo, donde se guarda un primer hilo y se almacena un segundo hilo de modo que el segundo hilo puede ejecutarse por un motor de procesamiento de gráficos). Por ejemplo, en una conmutación de contexto, el circuito de gestión de contexto 448 puede almacenar valores de registro actuales en una región designada en memoria (por ejemplo, identificada por un puntero de contexto). A continuación, puede restaurar los valores de registro cuando vuelve al contexto. En una realización, un circuito de gestión de interrupción 447 recibe y procesa interrupciones recibidas desde dispositivos de sistema.
[0150] En una implementación, la MMU 439 traduce direcciones virtuales/efectivas de un motor de procesamiento de gráficos 431 a direcciones reales/físicas en la memoria del sistema 411. Una realización del circuito de integración de acelerador 436 soporta múltiples (por ejemplo, 4, 8, 16) módulos de acelerador de gráficos 446 y/u otros dispositivos aceleradores. El módulo de acelerador de gráficos 446 puede especializarse para una única aplicación ejecutada en el procesador 407 o puede compartirse entre múltiples aplicaciones. En una realización, se presenta un entorno de ejecución de gráficos virtualizado en el que los recursos de los motores de procesamiento de gráficos 431-432, N se comparten con múltiples aplicaciones o máquinas virtuales (VM). Los recursos se pueden subdividir en "sectores" que se asignan a diferentes VM y/o aplicaciones en función de los requisitos de procesamiento y prioridades asociadas con las VM y/o aplicaciones.
[0152] Por tanto, el circuito de integración de acelerador actúa como un puente al sistema para el módulo de aceleración de gráficos 446 y proporciona servicios de traducción de direcciones y de memoria caché de sistema. Además, el circuito de integración de acelerador 436 puede proporcionar instalaciones de virtualización para que el procesador anfitrión gestione la virtualización de los motores de procesamiento de gráficos, las interrupciones y la gestión de la memoria.
[0154] Debido a que los recursos de hardware de los motores de procesamiento de gráficos 431-432, N se mapean explícitamente con el espacio de direcciones reales que ve el procesador anfitrión 407, cualquier procesador anfitrión puede direccionar estos recursos directamente utilizando un valor de dirección efectiva. Una función del circuito de integración de acelerador 436, en una realización, es la separación física de los motores de procesamiento de gráficos 431-432, N de modo que aparezcan en el sistema como unidades independientes.
[0155] Como se ha mencionado, en la realización ilustrada, una o más memorias de gráficos 433-434, M están acopladas a cada uno de los motores de procesamiento de gráficos 431-432, N, respectivamente. Las memorias de gráficos 433-434, M almacenan instrucciones y datos que procesa cada uno de los motores de procesamiento de gráficos 431-432, N. Las memorias de gráficos 433-434, M pueden ser memorias volátiles tales como DRAM (incluyendo las DRAM apiladas), memoria GDDR (por ejemplo, GDDR5, GDDR6) o HBM, y/o pueden ser memorias no volátiles tales como 3D Xpoint o Nano-Ram.
[0156] En una realización, para reducir el tráfico de datos a través del enlace de alta velocidad 440, se usan técnicas de desvío para garantizar que los datos almacenados en las memorias de gráficos 433-434, M sean datos que serán usados con mayor frecuencia por los motores de procesamiento de gráficos 431-432, N y, preferentemente, no usados por los núcleos 460A-460D (al menos no con frecuencia). De manera similar, el mecanismo de desvío intenta mantener los datos que necesitan los núcleos (y preferentemente no los motores de procesamiento de gráficos 431-432, N) dentro de las cachés 462A-462D, 456 de los núcleos y la memoria del sistema 411.
[0157] LaFIG. 4Cilustra otra realización en la que el circuito de integración de acelerador 436 está integrado dentro del procesador 407. En esta realización, los motores de procesamiento de gráficos 431-432, N se comunican directamente a través del enlace de alta velocidad 440 al circuito de integración de acelerador 436 mediante la interfaz 437 y la interfaz 435 (que, de nuevo, pueden utilizar cualquier forma de bus o protocolo de interfaz). El circuito de integración de acelerador 436 puede realizar las mismas operaciones que aquellas descritas con respecto a laFIG.4B,pero potencialmente a un caudal superior dada su proximidad cercana al bus de coherencia 462 y a las cachés 462A-462D, 426.
[0158] Una realización soporta diferentes modelos de programación que incluyen un modelo de programación de proceso especializado (sin virtualización de módulo de aceleración de gráficos) y modelos de programación compartida (con virtualización). Estos últimos pueden incluir modelos de programación que están controlados por el circuito de integración de acelerador 436 y modelos de programación que están controlados por el módulo de aceleración de gráficos 446.
[0159] En una realización del modelo de proceso especializado, los motores de procesamiento de gráficos 431-432, N están especializados a una única aplicación o proceso bajo un único sistema operativo. La única aplicación puede canalizar otras solicitudes de aplicación a los motores de gráficos 431-432, N, lo que proporciona virtualización dentro de una VM/partición.
[0160] En los modelos de programación de proceso especializados, los motores de procesamiento de gráficos 431-432, N, pueden ser compartidos por múltiples particiones de VM/aplicación. Los modelos compartidos requieren un hipervisor de sistema para virtualizar los motores de procesamiento de gráficos 431-432, N para permitir el acceso de cada sistema operativo. En los sistemas de partición única sin hipervisor, los motores de procesamiento de gráficos 431-432, N son propiedad del sistema operativo. En ambas instancias, el sistema operativo puede virtualizar los motores de procesamiento de gráficos 431-432, N para proporcionar acceso a cada proceso o aplicación.
[0161] Para el modelo de programación compartido, el módulo de aceleración de gráficos 446 o un motor de procesamiento de gráficos individual 431-432, N selecciona un elemento de proceso utilizando un manejador de proceso. En una realización, los elementos de proceso se almacenan en memoria de sistema 411 y son direccionables usando las técnicas de traducción de dirección efectivo a dirección real descritas en el presente documento. El manejador de proceso puede ser un valor específico de la implementación proporcionado al proceso anfitrión cuando registra su contexto con el motor de procesamiento de gráficos 431-432, N (es decir, cuando se llama al software del sistema para añadir el elemento del proceso a la lista enlazada de elementos del proceso). Los 16 bits inferiores del identificador del proceso pueden ser el desplazamiento del elemento del proceso dentro de la lista enlazada de elementos de proceso.
[0162] LaFIG.4Dilustra un sector de integración de acelerador 490 a modo de ejemplo. Como se utiliza en el presente documento, un "corte" comprende una porción especificada de los recursos de procesamiento del circuito de integración de acelerador 436. El espacio de direcciones efectivas de aplicación 482 dentro de la memoria del sistema 411 almacena los elementos de proceso 483. En una realización, los elementos de proceso 483 se almacenan en respuesta a invocaciones de GPU 481 desde las aplicaciones 480 ejecutadas en el procesador 407. Un elemento de proceso 483 contiene el estado del proceso para la aplicación correspondiente 480. Un descriptor de trabajo (WD) 484 contenido en el elemento de proceso 483 puede ser un solo trabajo solicitado por una aplicación o puede contener un puntero a una cola de trabajos. En este último caso, el WD 484 es un puntero a la cola de solicitud de trabajos en el espacio de direcciones de aplicación 482.
[0163] El módulo de aceleración de gráficos 446 y/o los motores de procesamiento de gráficos individuales 431-432, N pueden compartirse por todos, o por un subconjunto de los procesos en el sistema. Las realizaciones de la invención incluyen una infraestructura para configurar el estado de proceso y enviar un WD 484 a un módulo de aceleración de gráficos 446 para iniciar un trabajo en un entorno virtualizado.
[0164] En una implementación, el modelo de programación de proceso especializado es específico para la implementación. En este modelo, un único proceso es propietario del módulo de aceleración de gráficos 446 o de un motor de procesamiento de gráficos 431 individual. Dado que el módulo de aceleración de gráficos 446 es propiedad de un único proceso, el hipervisor inicializa el circuito de integración de acelerador 436 para la partición propietaria y el sistema operativo inicializa el circuito de integración de acelerador 436 para el proceso propietario en el momento en que se asigna el módulo de aceleración de gráficos 446.
[0165] En la operación, una unidad de extracción de WD 491 en el corte de integración de acelerador 490 extrae el siguiente WD 484 que incluye una indicación del trabajo que debe realizar uno de los motores de procesamiento de gráficos del módulo de aceleración de gráficos 446. Los datos del WD 484 se pueden almacenar en registros 449 y ser utilizados por la MMU 439, el circuito de gestión de interrupción 447 y/o el circuito de gestión de contexto 446, según se ilustra. Por ejemplo, una realización de la MMU 439 incluye circuitos de recorrido de segmento/página para acceder a tablas de segmento/página 486 dentro del espacio de direcciones virtuales de SO 485. El circuito de gestión de interrupción 447 puede procesar eventos de interrupción 492 recibidos desde el módulo de aceleración de gráficos 446. Cuando se realizan operaciones gráficas, una dirección efectiva 493 generada por un motor de procesamiento de gráficos 431-432, N se traduce a una dirección real por la MMU 439. En una realización, el mismo conjunto de registros 449 se duplica por cada motor de procesamiento de gráficos 431-432, N y/o módulo de aceleración de gráficos 446 y puede inicializarse por el hipervisor o sistema operativo. Cada uno de estos registros duplicados puede incluirse en un corte de integración de acelerador 490. En laTabla 1se muestran registros de ejemplo que pueden ser inicializados por el hipervisor.
[0166] Tabla 1- Re istros inicializados por hipervisor
[0168]
[0170] En laTabla 2se muestran registros de ejemplo que pueden ser inicializados por el sistema operativo.
[0171] Tabla 2- Re istros inicializados por sistema operativo
[0173]
[0175] En una realización, cada WD 484 es específico a un módulo de aceleración de gráficos particular 446 y/o al motor de procesamiento de gráficos 431-432, N. Contiene toda la información que requiere un motor de procesamiento de gráficos 431-432, N para hacer su trabajo o puede ser un puntero a una ubicación de memoria donde la aplicación ha establecido una cola de comandos de trabajo para que se complete.
[0176] LaFIG.4Eilustra detalles adicionales para una realización de un modelo compartido. Esta realización incluye un espacio de direcciones real de hipervisor 498 en el que se almacena una lista de elementos de proceso 499. El espacio de direcciones reales de hipervisor 498 es accesible a través de un hipervisor 496 que virtualiza los motores del módulo de aceleración de gráficos para el sistema operativo 495.
[0177] Los modelos de programación compartidos permiten que todos o un subconjunto de procesos de todas o un subconjunto de particiones en el sistema utilicen un módulo de aceleración de gráficos 446. Existen dos modelos de programación en los que el módulo de aceleración de gráficos 446 se comparte por múltiples procesos y particiones: uso compartido por segmento de tiempo y uso compartido directo de gráficos.
[0178] En este modelo, el hipervisor de sistema 496 es el propietario del módulo de aceleración de gráficos 446 y pone a disposición su función a todos los sistemas operativos 495. Para que un módulo de aceleración de gráficos 446 soporte una virtualización por el hipervisor de sistema 496, el módulo de aceleración de gráficos 446 puede cumplir con los siguientes requisitos: 1) Una solicitud de trabajo de una aplicación debe ser autónoma (es decir, el estado no necesita ser mantenido entre trabajos), o el módulo de aceleración de gráficos 446 debe proporcionar un mecanismo de guardado/restauración de contexto. 2) Una solicitud de trabajo de una aplicación se garantiza por el módulo de aceleración de gráficos 446 para completar en una cantidad especificada de tiempo, incluyendo cualquier fallo de traducción, o el módulo de aceleración de gráficos 446 proporciona la capacidad de adelantar el procesamiento del trabajo. 3) Debe garantizarse al módulo de aceleración de gráficos 446 la equidad entre procesos cuando opera en el modelo de programación de uso compartido directo.
[0179] En una realización, para el modelo de uso compartido, se requiere que la aplicación 480 haga una llamada de sistema del sistema operativo 495 con un tipo de módulo de aceleración de gráficos 446, un descriptor de trabajo (WD), un valor de registro de máscara de autoridad (AMR) y un puntero de área de guardado/restauración de contexto (CSRP). El tipo de módulo de aceleración de gráficos 446 describe la función de aceleración objetivo para la llamada de sistema. El tipo de módulo de aceleración de gráficos 446 puede ser un valor específico del sistema. El WD se formatea específicamente para el módulo de aceleración de gráficos 446 y puede tener la forma de un comando de módulo de aceleración de gráficos 446, un puntero de dirección efectiva a una estructura definida por el usuario, un puntero de dirección efectiva a una cola de comandos, o cualquier otra estructura de datos para describir el trabajo a llevar a cabo por el módulo de aceleración de gráficos 446. En una realización, el valor AMR es el estado de AMR a utilizar para el proceso actual. El valor pasado al sistema operativo es similar a una aplicación que establece el AMR. Si las implementaciones de circuito de integración de acelerador 436 y de módulo de aceleración de gráficos 446 no soportan un registro de anulación de máscara de autoridad de usuario (UAMOR), el sistema operativo puede aplicar el valor de UAMOR actual al valor de AMR antes de pasar el AMR en la llamada de hipervisor. El hipervisor 496 puede opcionalmente aplicar el valor actual del registro de anulación de máscara de autoridad (AMOR) antes de colocar el AMR en el elemento de proceso 483. En una realización, el CSRP es uno de los registros 449 que contienen la dirección efectiva de un área en el espacio de direcciones de la aplicación 482 para que el módulo de aceleración de gráficos 446 guarde y restaure el estado de contexto. Este puntero es opcional si no se requiere guardar el estado entre trabajos o cuando se adelanta un trabajo. El área de guardado/restauración de contexto puede estar anclada a la memoria del sistema.
[0180] Tras recibir la llamada de sistema, el sistema operativo 495 puede verificar que la aplicación 480 ha registrado y que se le ha dado la autoridad para utilizar el módulo de aceleración de gráficos 446. A continuación, el sistema operativo 495 llama al hipervisor 496 con la información mostrada en laTabla 3.
[0181] Tabla 3- Parámetros de Llamada del SO al Hipervisor
[0183]
[0185] Tras recibir la llamada del hipervisor, el hipervisor 496 verifica que el sistema operativo 495 ha registrado y se le haya otorgado autoridad para usar el módulo de aceleración de gráficos 446. El hipervisor 496 coloca entonces el elemento de proceso 483 en la lista enlazada de elementos de proceso para el tipo de módulo de aceleración de gráficos 446 correspondiente. El elemento de proceso puede incluir la información mostrada en laTabla 4.
[0186] Tabla 4- Información de Elementos de Proceso
[0188]
[0189] En una realización, el hipervisor inicializa una pluralidad de registros 449 del segmento de integración de acelerador 490.
[0191] Como se ilustra en laFIG. 4F,una realización de la invención emplea una memoria unificada direccionable mediante un espacio de direcciones de memoria virtual común usado para acceder a las memorias de procesador físico 401-402 y a las memorias de GPU 420-423. En esta implementación, las operaciones ejecutadas en las GPU 410-413 utilizan el mismo espacio de direcciones de memoria virtual/efectivo para acceder a las memorias de procesador 401-402 y viceversa, simplificando de este modo la programabilidad. En una realización, una primera porción del espacio de direcciones virtual/eficaz se asigna a la memoria de procesador 401, una segunda porción a la segunda memoria de procesador 402, una tercera porción a la memoria de GPU 420, y así sucesivamente. El espacio de memoria virtual/eficaz total (denominado, en ocasiones, el espacio de direcciones eficaces) se distribuye, por lo tanto, a través de cada una de las memorias de procesador 401-402 y las memorias de GPU 420-423, permitiendo que cualquier procesador o GPU acceda a cualquier memoria física con una dirección virtual mapeada con esa memoria.
[0193] En una realización, los circuitos de gestión de desvío/coherencia 494A-494E dentro de una o más de las MMU 439A-439E garantizan la coherencia de memoria caché entre las memorias caché de los procesadores anfitriones (por ejemplo, 405) y las GPU 410-413 e implementa técnicas de desvío que indican las memorias físicas en las que deberían almacenarse ciertos tipos de datos. Aunque se ilustran múltiples casos de circuitos de gestión de desvío/coherencia 494A-494E en laFIG.4F,los circuitos de desvío/coherencia puede implementarse dentro de la MMU de uno o más procesadores de anfitrión 405 y/o dentro del circuito de integración de acelerador 436.
[0195] Una realización permite que la memoria adjunta a la GPU 420-423 se mapee como parte de la memoria de sistema, y que se acceda usando tecnología de memoria virtual compartida (SVM), pero sin sufrir las desventajas de rendimiento típicas asociadas con la coherencia de caché de sistema completa. La capacidad de que pueda accederse a la memoria conectada a GPU 420-423 como memoria del sistema sin sobrecarga de coherencia de caché onerosa proporciona un entorno de operación beneficioso para descarga de GPU. Esta disposición permite que el software de procesador anfitrión 405 configure operandos y acceda a resultados de cálculo, sin la sobrecarga de copias de datos de DMA de E/S tradicionales. Copias tradicionales de este tipo implican llamadas de controlador, interrupciones y accesos de E/S con mapeo de memoria (MMIO) que son todas ineficientes en relación con accesos de memoria simples. Al mismo tiempo, la capacidad de acceder a la memoria conectada a GPU 420-423 sin sobrecargas de coherencia de caché puede ser crítica al tiempo de ejecución de un cálculo descargado. En casos con tráfico de memoria de escritura de envío en continuo sustancial, por ejemplo, la sobrecarga de coherencia de caché puede reducir significativamente el ancho de banda de escritura efectivo visto por una GPU 410-413. La eficiencia de configuración de operando, la eficiencia de acceso a resultados y la eficiencia de cálculo de GPU tienen en conjunto una función en la determinación de la efectividad de la descarga de GPU.
[0197] En una implementación, la selección de entre el desvío de GPU y el desvío de procesador anfitrión se acciona por una estructura de datos de seguimiento de desvío. Puede usarse una tabla de desvío, por ejemplo, que puede ser una estructura granular de página (es decir, controlada en la granularidad de una página de memoria) que incluye 1 o 2 bits por página de memoria conectada a GPU. La tabla de desvío puede implementarse en un intervalo de memoria robado de una o más memorias conectadas a GPU 420-423, con o sin una caché de desvío en la GPU 410-413 (por ejemplo, para almacenar en memoria caché entradas usadas frecuentemente/recientemente de la tabla de desvío). Como alternativa, toda la tabla de desvío puede mantenerse dentro de la GPU.
[0199] En una implementación, se accede a la entrada de tabla de desvío asociada con cada acceso a la memoria conectada a GPU 420-423 antes del acceso real a la memoria de GPU, provocando las siguientes operaciones. En primer lugar, las solicitudes locales desde la GPU 410-413 que encuentran su página en el desvío de GPU se reenvían directamente a una correspondiente memoria de GPU 420-423. Las solicitudes locales desde la GPU que encuentran su página en el desvío de anfitrión se reenvían al procesador 405 (por ejemplo, a través de un enlace de alta velocidad como se ha analizado anteriormente). En una realización, las solicitudes desde el procesador 405 que encuentran la página solicitada en el desvío de procesador anfitrión completan la petición como una lectura de memoria normal. Como alternativa, las solicitudes dirigidas a una página con desvío de GPU pueden reenviarse a la GPU 410-413. La GPU puede pasar, a continuación, la página a un desvío de procesador anfitrión si no está usando actualmente la página.
[0201] El estado de desvío de una página puede cambiarse o bien mediante un mecanismo basado en software, un mecanismo basado en software asistido por hardware o, para un conjunto limitado de casos, un mecanismo basado puramente en hardware.
[0203] Un mecanismo para cambiar el estado de desvío emplea una llamada de API (por ejemplo, OpenCL), que, a su vez, llama al controlador del dispositivo de la GPU que, a su vez, envía un mensaje (o pone en cola un descriptor de comando) a la GPU que dirige el mismo para cambiar el estado de desvío y, para algunas transiciones, realizan una operación de vaciado de caché en el anfitrión. La operación de vaciado de caché se requiere para una transición desde el desvío del procesador anfitrión 405 a desvío de GPU, pero no se requiere para la transición opuesta.
[0204] En una realización, la coherencia de caché se mantiene representando temporalmente páginas con desvío de GPU que no se pueden almacenar en memoria caché por el procesador anfitrión 405. Para acceder a estas páginas, el procesador 405 puede solicitar acceso desde la GPU 410 que puede o puede no conceder acceso inmediatamente, dependiendo de la implementación. Por lo tanto, para reducir la comunicación entre el procesador 405 y la GPU 410 es beneficioso garantizar que páginas con desvío de GPU son las que se requieren por la GPU, pero no el procesador anfitrión 405 y viceversa.
[0205] Canalización de Procesamiento de Gráficos
[0206] LaFIG. 5ilustra una canalización de procesamiento de gráficos 500, de acuerdo con una realización. En una realización, un procesador de gráficos puede implementar la canalización de procesamiento de gráficos 500 ilustrada. El procesador de gráficos puede incluirse dentro de los subsistemas de procesamiento paralelo, como se describe en el presente documento, tal como el procesador paralelo 200 de la FIG. 2, que, en una realización, es una variante del procesador o procesadores en paralelo 112 de la FIG. 1. Los diversos sistemas de procesamiento paralelo pueden implementar la canalización de procesamiento de gráficos 500 a través de una o más instancias de la unidad de procesamiento paralelo (por ejemplo, la unidad de procesamiento paralelo 202 de la FIG. 2) como se describe en el presente documento. Por ejemplo, una unidad de sombreador (por ejemplo, el multiprocesador de gráficos 234 de la FIG.3) puede configurarse para realizar las funciones de uno o más de una unidad de procesamiento de vértices 504, una unidad de procesamiento de control de teselación 508, una unidad de procesamiento de evaluación de teselación 512, una unidad de procesamiento de geometría 516 y una unidad de procesamiento de fragmentos/píxeles 524. Las funciones de ensamblador de datos 502, ensambladores de primitivas 506, 514, 518, unidad de teselación 510, rasterizador 522 y unidad de operaciones de trama 526 también pueden realizarse por otros motores de procesamiento dentro de una agrupación de procesamiento (por ejemplo, la agrupación de procesamiento 214 de la FIG.3) y una correspondiente unidad de partición (por ejemplo, la unidad de partición 220A-220N de la FIG. 2). La canalización de procesamiento de gráficos 500 también puede implementarse usando unidades de procesamiento especializadas para una o más funciones. En una realización, pueden realizarse una o más porciones de la canalización de procesamiento de gráficos 500 mediante lógica de procesamiento paralelo dentro de un procesador de propósito general (por ejemplo, una CPU). En una realización, una o más porciones de la canalización de procesamiento de gráficos 500 pueden acceder a la memoria en chip (por ejemplo, la memoria del procesador paralelo 222 como en la FIG.2) a través de una interfaz de memoria 528, que puede ser una instancia de la interfaz de memoria 218 de la FIG.2.
[0207] En una realización, el ensamblador de datos 502 es una unidad de procesamiento que recopila datos de vértice para superficies y primitivas. El ensamblador de datos 502 emite, a continuación, los datos de vértice, incluyendo los atributos de vértice, a la unidad de procesamiento de vértices 504. La unidad de procesamiento de vértices 504 es una unidad de ejecución programable que ejecuta programas de sombreador de vértices, datos de vértices de iluminación y transformación como se especifica por los programas de sombreador de vértices. La unidad de procesamiento de vértices 504 lee datos que se almacenan en memoria caché, local o de sistema para su uso en el procesamiento de los datos de vértices y puede programarse para transformar los datos de vértices desde una representación de coordenadas basada en objetos hasta un espacio de coordenadas de espacio mundial o un espacio de coordenadas de dispositivo normalizado.
[0208] Una primera instancia de un ensamblador de primitivas 506 recibe atributos de vértice desde la unidad de procesamiento de vértices 50. Las lecturas del ensamblador de primitivas 506 almacenaron atributos de vértice según sean necesarios y construye primitivas de gráficos para su procesamiento por la unidad de procesamiento de control de teselación 508. Las primitivas de gráficos incluyen triángulos, segmentos de línea, puntos, parches y así sucesivamente, según se soportan por diversas interfaces de programación de aplicación (API) de procesamiento de gráficos.
[0209] La unidad de procesamiento de control de teselación 508 trata los vértices de entrada como puntos de control para un parche geométrico. Los puntos de control se transforman desde una representación de entrada desde el parche (por ejemplo, las bases del parche) a una representación que es adecuada para su uso en evaluación de superficie por la unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de control de teselación 508 también puede calcular factores de teselación para bordes de parches geométricos. Un factor de teselación se aplica a un único borde y cuantifica un nivel dependiente de vista de detalle asociado con el borde. Una unidad de teselación 510 está configurada para recibir los factores de teselación para bordes de un parche y para teselar el parche en múltiples primitivas geométricas tales como primitivas de línea, de triángulo o cuadrilaterales, que se transmiten a una unidad de procesamiento de evaluación de teselación 512. La unidad de procesamiento de evaluación de teselación 512 opera en coordenadas parametrizadas del parche subdividido para generar una representación de superficie y atributos de vértice para cada vértice asociado con las primitivas geométricas.
[0210] Una segunda instancia de un ensamblador de primitivas 514 recibe atributos de vértice desde la unidad de procesamiento de evaluación de teselación 512, leyendo atributos de vértice almacenados según sea necesario, y construye primitivas geométricas para su procesamiento por la unidad de procesamiento de geometría 516. La unidad de procesamiento de geometría 516 es una unidad de ejecución programable que ejecuta programas de sombreador de geometría para transformar primitivas de gráficos recibidas desde el ensamblador de primitivas 514 como se especifica por los programas de sombreador de geometría. En una realización, la unidad de procesamiento de geometría 516 está programada para subdividir las primitivas de gráficos en una o más primitivas de gráficos nuevas y calcular parámetros usados para rasterizar las nuevas primitivas de gráficos.
[0212] En algunas realizaciones, la unidad de procesamiento de geometría 516 puede añadir o borrar elementos en el flujo de geometría. La unidad de procesamiento de geometría 516 emite los parámetros y vértices que especifican nuevas primitivas de gráficos al ensamblador de primitivas 518. El ensamblador de primitivas 518 recibe los parámetros y vértices de la unidad de procesamiento de geometría 516 y construye primitivas de gráficos para su procesamiento por una unidad de escalado, eliminación y recorte de ventana gráfica 520. La unidad de procesamiento de geometría 516 lee datos que se almacenan en memoria de procesador paralelo o memoria del sistema para su uso en el procesamiento de datos de geometría. La unidad de escalado, eliminación y recorte de ventana gráfica 520 realiza recorte, eliminación y escalado de ventana gráfica y emite primitivas de gráficos procesadas a un rasterizador 522.
[0214] El rasterizador 522 puede realizar eliminación de profundidad y otras optimizaciones basadas en profundidad. El rasterizador 522 también realiza conversión de exploración en las nuevas primitivas de gráficos para generar fragmentos y emitir esos fragmentos y datos de cobertura asociados a la unidad de procesamiento de fragmentos/píxeles 524. La unidad de procesamiento de fragmentos/píxeles 524 es una unidad de ejecución programable que está configurada para ejecutar programas de sombreador de fragmentos o programas de sombreador de píxeles. La unidad de procesamiento de fragmentos/píxeles 524 que transforma fragmentos o píxeles recibidos desde el rasterizador 522, como se especifica por el fragmento o programas de sombreador de píxeles. Por ejemplo, la unidad de procesamiento de fragmentos/píxeles 524 puede programarse para realizar operaciones que incluyen, pero sin limitación, mapeo de texturas, sombreado, mezcla, corrección de textura y corrección de perspectiva para producir fragmentos o píxeles sombreados que se emiten a una unidad de operaciones de trama 526. La unidad de procesamiento de fragmentos/píxeles 524 puede leer datos que se almacenan en, o bien la memoria de procesador paralelo, o bien la memoria del sistema para su uso cuando procesa los datos de fragmento. Los programas de sombreado de fragmentos o de píxeles pueden estar configurados para sombrear a granularidad de muestra, de píxel, de mosaico u otras dependiendo de la tasa de muestreo configurada para las unidades de procesamiento.
[0216] La unidad de operaciones de rasterización 526 es una unidad de procesamiento que realiza operaciones de rasterización que incluyen, pero sin limitación, estarcido, prueba z, mezcla y similares, y emite datos de píxeles como datos de gráficos procesados para que se almacenen en la memoria de gráficos (por ejemplo, la memoria de procesador paralelo 222 como en la FIG. 2, y/o la memoria de sistema 104 como en la FIG. 1, para que se visualicen en el uno o más dispositivo o dispositivos de visualización 110 o para su procesamiento adicional por uno del uno o más procesadores 102 o procesador o procesadores paralelos 112. En algunas realizaciones, la unidad de operaciones de rasterización 526 está configurada para comprimir datos z o de color que se escriben en memoria y descomprimir datos z o de color que se leen desde la memoria.
[0218] Visión General del Aprendizaje Automático
[0220] Un algoritmo de aprendizaje automático es un algoritmo que puede aprender basándose en un conjunto de datos. Los algoritmos de aprendizaje automático pueden diseñarse para modelar abstracciones de alto nivel dentro de un conjunto de datos. Por ejemplo, los algoritmos de reconocimiento de imágenes se pueden utilizar para determinar a cuál de varias categorías pertenece una entrada dada; los algoritmos de regresión pueden emitir un valor numérico dada una entrada; y los algoritmos de reconocimiento de patrones se pueden utilizar para generar texto traducido o realizar reconocimiento de texto a voz y/o voz.
[0222] Un tipo de algoritmo de aprendizaje automático a modo de ejemplo es una red neuronal. Hay muchos tipos de redes neuronales; un tipo sencillo de red neuronal es una red de realimentación prospectiva. Una red de realimentación prospectiva se puede implementar como un gráfico acíclico en el que los nodos están dispuestos en capas. Normalmente, una topología de red de realimentación prospectiva incluye una capa de entrada y una capa de salida que están separadas por al menos una capa oculta. La capa oculta transforma la entrada recibida por la capa de entrada en una representación que es útil para generar la salida en la capa de salida. Los nodos de red están completamente conectados mediante bordes a los nodos en capas adyacentes, pero no hay bordes entre nodos dentro de cada capa. Los datos recibidos en los nodos de una capa de entrada de una red de realimentación prospectiva se propagan (es decir, "se realimentan prospectivamente") a los nodos de la capa de salida mediante una función de activación que calcula los estados de los nodos de cada capa sucesiva en la red basándose en coeficientes ("pesos") asociados, respectivamente, con cada uno de los bordes que conectan las capas. Dependiendo del modelo específico que se represente mediante el algoritmo que se esté ejecutando, la salida del algoritmo de red neuronal puede adoptar diversas formas.
[0223] Antes de que pueda usarse un algoritmo de aprendizaje automático para modelar un problema particular, se entrena el algoritmo usando un conjunto de datos de entrenamiento. Entrenar una red neuronal implica seleccionar una topología de red, usar un conjunto de datos de entrenamiento que representa un problema que es modelado por la red, y ajustar los pesos hasta que el modelo de red rinde con un error mínimo para todas las instancias del conjunto de datos de entrenamiento. Por ejemplo, durante un proceso de entrenamiento de aprendizaje supervisado para una red neuronal, la salida producida por la red en respuesta a la entrada que representa una instancia en un conjunto de datos de entrenamiento se compara con la salida etiquetada "correcta" para esa instancia, se calcula una señal de error que representa la diferencia entre la salida y la salida etiquetada, y los pesos asociados con las conexiones se ajustan para minimizar ese error a medida que la señal de error se propaga hacia atrás a través de las capas de la red. La red se considera "entrenada" cuando se minimizan los errores para cada una de las salidas generadas a partir de las instancias del conjunto de datos de entrenamiento.
[0225] La precisión de un algoritmo de aprendizaje automático puede verse afectada significativamente por la calidad del conjunto de datos usado para entrenar el algoritmo. El proceso de entrenamiento puede ser computacionalmente intensivo y puede requerir una cantidad significativa de tiempo en un procesador convencional de propósito general. En consecuencia, se utiliza hardware de procesamiento paralelo para entrenar muchos tipos de algoritmos de aprendizaje automático. Esto es particularmente útil para optimizar el entrenamiento de redes neuronales, ya que los cálculos realizados para ajustar los coeficientes en las redes neuronales se prestan naturalmente a implementaciones paralelas. Específicamente, muchos algoritmos de aprendizaje automático y aplicaciones de software se han adaptado para hacer uso del hardware de procesamiento paralelo dentro de dispositivos de procesamiento de gráficos de propósito general.
[0227] LaFIG.6es un diagrama generalizado de una pila de software de aprendizaje automático 600. Una aplicación de aprendizaje automático 602 se puede configurar para entrenar una red neuronal utilizando un conjunto de datos de entrenamiento o para usar una red neuronal profunda entrenada para implementar inteligencia automática. La aplicación de aprendizaje automático 602 puede incluir una funcionalidad de entrenamiento y de inferencia para una red neuronal y/o software especializado que puede usarse para entrenar una red neuronal antes del despliegue. La aplicación de aprendizaje automático 602 puede implementar cualquier tipo de inteligencia automática incluyendo, pero sin limitación, reconocimiento de imágenes, mapeo y localización, navegación autónoma, síntesis de habla, formación de imágenes médicas o traducción de idioma.
[0229] La aceleración de hardware para la aplicación de aprendizaje automático 602 se puede habilitar a través de una estructura de aprendizaje automático 604. La estructura de aprendizaje automático 604 puede proporcionar una biblioteca de primitivas de aprendizaje automático. Las primitivas de aprendizaje automático son operaciones básicas que comúnmente realizan los algoritmos de aprendizaje automático. Sin la estructura de aprendizaje automático 604, los desarrolladores de algoritmos de aprendizaje automático tendrían que crear y optimizar la lógica computacional principal asociada con el algoritmo de aprendizaje automático, y luego volver a optimizar la lógica computacional a medida que se desarrollan nuevos procesadores paralelos. En cambio, la aplicación de aprendizaje automático se puede configurar para realizar los cálculos necesarios utilizando las primitivas proporcionadas por la estructura de aprendizaje automático 604. Las primitivas de ejemplo incluyen convoluciones de tipo tensor, funciones de activación y agrupamiento, que son operaciones computacionales que se realizan mientras se entrena una red neuronal convolucional (RNC). La estructura de aprendizaje automático 604 puede proporcionar también primitivas para implementar subprogramas de álgebra lineal básicos realizados por muchos algoritmos de aprendizaje automático, tales como operaciones matriciales y vectoriales.
[0231] La estructura de aprendizaje automático 604 puede procesar datos de entrada recibidos de la aplicación de aprendizaje automático 602 y generar la entrada apropiada para un entorno de cálculo 606. El entorno de cálculo 606 puede abstraer las instrucciones subyacentes proporcionadas al controlador GPGPU 608 para permitir que la estructura de aprendizaje automático 604 aproveche la aceleración de hardware a través del hardware GPGPU 610 sin requerir que la estructura de aprendizaje automático 604 tenga un conocimiento profundo de la arquitectura del hardware GPGPU 610. Además, el entorno de cálculo 606 puede habilitar la aceleración de hardware para la estructura de aprendizaje automático 604 en una variedad de tipos y generaciones del hardware GPGPU 610.
[0232] Aceleración de Aprendizaje Automático de GPGPU
[0234] LaFIG.7ilustra una unidad de procesamiento de gráficos de propósito general altamente paralela 700, de acuerdo con una realización. En una realización la unidad de procesamiento de propósito general (GPGPU) 700 se puede configurar para ser particularmente eficiente en el procesamiento del tipo de cargas de trabajo computacionales asociadas con el entrenamiento de redes neuronales profundas. Además, la GPGPU 700 se puede vincular directamente a otras instancias de la GPGPU para crear una agrupación de múltiples GPU para mejorar la velocidad de entrenamiento para redes neuronales particularmente profundas.
[0236] La GPGPU 700 incluye una interfaz de anfitrión 702 para habilitar una conexión con un procesador anfitrión. En una realización, la interfaz de anfitrión 702 es una interfaz PCI Express. Sin embargo, la interfaz de anfitrión también puede ser una interfaz de comunicaciones específica del proveedor o un tejido de comunicaciones. La GPGPU 700 recibe comandos desde el procesador anfitrión y usa un planificador global 704 para distribuir hilos de ejecución asociados con estos comandos a un conjunto de agrupaciones de cálculo 706A-706H. Las agrupaciones de cálculo 706A-706H comparten una memoria caché 708. La memoria caché 708 puede servir como una memoria caché de nivel superior para memorias caché dentro de las agrupaciones de cálculo 706A-706H.
[0238] La GPGPU 700 incluye la memoria 714A-714B acoplada con las agrupaciones de cálculo 706A-H mediante un conjunto de controladores de memoria 712A-712B. En diversas realizaciones, la memoria 714A-714B puede incluir diversos tipos de dispositivos de memoria, incluyendo una memoria de acceso aleatorio dinámica (DRAM) o una memoria de acceso aleatorio de gráficos, tal como una memoria de acceso aleatorio de gráficos sincrónica (SGRAM), incluyendo memoria de tasa de datos doble de gráficos (GDDR), o una memoria apilada 3D que incluye, sin limitación, una memoria de alto ancho de banda (HBM).
[0240] En una realización, cada agrupación de cálculo 706A-706H incluye un conjunto de multiprocesadores de gráficos, tal como el multiprocesador de gráficos 400 de la FIG.4A. Los multiprocesadores de gráficos de la agrupación de computación tienen múltiples tipos de unidades lógicas de coma flotante y entero que pueden realizar operaciones computacionales con un intervalo de precisiones, incluso adecuadas para cálculos de aprendizaje automático. Por ejemplo, y en una realización, al menos un subconjunto de las unidades de coma flotante en cada una de las agrupaciones de cálculo 706A-H puede estar configurado para realizar operaciones de coma flotante de 16 bits o de 32 bits, mientras que un subconjunto diferente de las unidades de coma flotante puede estar configurado para realizar operaciones de coma flotante de 64 bits.
[0242] Se pueden configurar múltiples instancias de la GPGPU 700 para que funcionen como una agrupación de cálculo. El mecanismo de comunicación usado por la agrupación de cálculo para la sincronización y el intercambio de datos varía a lo largo de las realizaciones. En una realización, las múltiples instancias de la GPGPU 700 se comunican a través de la interfaz de anfitrión 702. En una realización, la GPGPU 700 incluye un concentrador de E/S 709 que acopla la GPGPU 700 con un enlace de GPU 710 que habilita una conexión directa a otras instancias de la GPGPU. En una realización, el enlace de la GPU 710 está acoplado a un puente de GPU a GPU especializado que posibilita la comunicación y sincronización entre múltiples instancias de la GPGPU 700. En una realización, el enlace de GPU 710 se acopla con una interconexión de alta velocidad para transmitir y recibir datos a otras GPGPU o procesadores paralelos. En una realización, las múltiples instancias de la GPGPU 700 están ubicadas en sistemas de procesamiento de datos separados y se comunican mediante un dispositivo de red que es accesible mediante la interfaz de anfitrión 702. En una realización, el enlace de GPU 710 se puede configurar para habilitar una conexión a un procesador de anfitrión además de o como una alternativa a la interfaz de anfitrión 702.
[0244] Aunque la configuración ilustrada de la GPGPU 700 puede configurarse para entrenar redes neuronales, una realización proporciona una configuración alternativa de la GPGPU 700, que puede configurarse para el despliegue dentro de una plataforma de inferenciación de alto rendimiento o de baja potencia. En una configuración de inferencia, la GPGPU 700 incluye menos de las agrupaciones de cálculo 706A-H en relación con la configuración de entrenamiento. Adicionalmente, la tecnología de memoria asociada con la memoria 714A- 714B puede diferir entre las configuraciones de inferencia y entrenamiento. En una realización, la configuración de inferenciación de la GPGPU 700 puede soportar instrucciones específicas de inferenciación. Por ejemplo, una configuración de inferencia puede proporcionar soporte para una o más instrucciones de producto escalar de enteros de 8 bits, que se utilizan comúnmente durante las operaciones de inferencia para redes neuronales implementadas.
[0246] LaFIG. 8ilustra un sistema informático de múltiples GPU 800, de acuerdo con una realización. El sistema informático de múltiples GPU 800 puede incluir un procesador 802 acoplado a múltiples GPGPU 806A-806D mediante un conmutador de interfaz de anfitrión 804. El conmutador de interfaz de anfitrión 804, en una realización, es un dispositivo de conmutador de PCI Express que acopla el procesador 802 a un bus de PCI Express a través del que el procesador 802 puede comunicarse con el conjunto de GPGPU 806A-D. Cada una de las múltiples GPGPU 806A-806D puede ser una instancia de la GPGPU 700 de la FIG. 7. Las GPGPU 806A-D pueden interconectarse mediante un conjunto de enlaces de GPU a GPU de punto a punto de alta velocidad 816. Los enlaces de GPU a GPU de alta velocidad pueden conectarse a cada una de las GPGPU 806A-806D a través de un enlace de GPU dedicado, tal como el enlace de GPU 710 como en la FIG.7. Los enlaces de GPU de P2P 816 permiten la comunicación directa entre cada una de las GPGPU 806A-806D sin requerir comunicación a través del bus de interfaz de anfitrión al que está conectado el procesador 802. Con el tráfico de GPU a GPU dirigido a los enlaces de GPU de P2P, el bus de interfaz de anfitrión permanece disponible para el acceso de memoria de sistema o para comunicarse con otras instancias del sistema informático de múltiples GPU 800, por ejemplo, mediante uno o más dispositivos de red. Aunque en la realización ilustrada las GPGPU 806A-806D se conectan al procesador 802 mediante el conmutador de interfaz de anfitrión 804, en una realización, el procesador 802 incluye el soporte directo para los enlaces de GPU de P2P 816 y puede conectarse directamente a las GPGPU 806A-806D.
[0248] Implementaciones de red neuronal de aprendizaje automático
[0250] La arquitectura informática proporcionada por realizaciones descritas en el presente documento puede configurarse para realizar los tipos de procesamiento paralelo que son particularmente adecuados para entrenar y desplegar redes neuronales para un aprendizaje automático. Una red neuronal puede generalizarse como una red de funciones que tienen una relación de grafo. Como es bien sabido en la técnica, existen diversos tipos de implementaciones de redes neuronales utilizadas en el aprendizaje automático. Un tipo ejemplar de red neuronal es la red de realimentación prospectiva, como se describió anteriormente.
[0252] Un segundo tipo ilustrativo de red neuronal es la red neuronal convolucional (RNC). Una RNC es una red de realimentación prospectiva especializada para procesar datos que tienen una topología conocida, similar a una cuadrícula, tales como datos de imágenes. En consecuencia, las RNC se utilizan comúnmente para aplicaciones de visión computacional y reconocimiento de imágenes, pero también se pueden utilizar para otros tipos de reconocimiento de patrones, tal como el procesamiento del habla y el lenguaje. Los nodos en la capa de entrada de RNC están organizados en un conjunto de "filtros" (detectores de características inspirados por los campos receptivos encontrados en la retina), y la salida de cada conjunto de filtros se propaga a nodos en capas sucesivas de la red. Los cálculos para una RNC incluyen la aplicación de la operación matemática de convolución a cada filtro para producir la salida de ese filtro. La convolución es un tipo especializado de operación matemática realizada por dos funciones para producir una tercera función que es una versión modificada de una de las dos funciones originales. En la terminología de redes convolucionales, la primera función de la convolución puede denominarse entrada, mientras que la segunda función puede denominarse núcleo de convolución. La salida puede denominarse mapa de características. Por ejemplo, la entrada a una capa de convolución puede ser una matriz multidimensional de datos que define los diversos componentes de color de una imagen de entrada. El núcleo de convolución puede ser una matriz multidimensional de parámetros, donde los parámetros están adaptados por el proceso de entrenamiento para la red neuronal.
[0254] Las redes neuronales recurrentes (RNN) son una familia de redes de realimentación prospectiva que incluyen conexiones de retroalimentación entre capas. Las RNN posibilitan el modelado de datos secuenciales compartiendo datos de parámetros a través de diferentes partes de la red neuronal. La arquitectura para una RNN incluye ciclos. Los ciclos representan la influencia de un valor presente de una variable sobre su propio valor en un momento futuro, ya que al menos una parte de los datos de salida de la RNN se utiliza como retroalimentación para procesar la entrada posterior en una secuencia. Esta característica hace que las RNN sean particularmente útiles para el procesamiento de lenguaje debido a la naturaleza variable en la que pueden componerse los datos de lenguaje.
[0256] Las figuras que se describen a continuación presentan ejemplos de redes de realimentación prospectiva, RNC y RNN, así como también describen un proceso general para entrenar e implementar respectivamente cada uno de esos tipos de redes. Se entenderá que estas descripciones son ilustrativas y no restrictivas en cuanto a cualquier realización específica descrita en el presente documento y los conceptos ilustrados se pueden aplicar, en general, a las redes neuronales profundas y técnicas de aprendizaje automático en general.
[0258] Las redes neuronales ilustrativas descritas anteriormente pueden usarse para realizar un aprendizaje profundo. El aprendizaje profundo es un aprendizaje automático que usa redes neuronales profundas. Las redes neuronales profundas usadas en aprendizaje profundo son redes neuronales artificiales compuestas de múltiples capas ocultas, a diferencia de redes neuronales poco profundas que incluyen únicamente una sola capa oculta. El entrenamiento de redes neuronales más profundas es, en general, más intensivo desde el punto de vista computacional. Sin embargo, las capas ocultas adicionales de la red permiten el reconocimiento de patrones de varias etapas que da como resultado un error de salida reducido en relación con las técnicas de aprendizaje automático superficial.
[0260] Las redes neuronales profundas utilizadas en el aprendizaje profundo generalmente incluyen una red de extremo frontal para realizar el reconocimiento de características acoplada a una red de extremo posterior que representa un modelo matemático que puede realizar operaciones (por ejemplo, clasificación de objetos, reconocimiento de voz, etc.) en función de la representación de características proporcionada al modelo. Un aprendizaje profundo posibilita que se realice un aprendizaje automático sin requerir que se realice una ingeniería de características artesanal para el modelo. En cambio, las redes neuronales profundas pueden aprender características en función de la estructura estadística o la correlación dentro de los datos de entrada. Las características aprendidas se pueden proporcionar a un modelo matemático que puede mapear características detectadas a una salida. El modelo matemático utilizado por la red generalmente está especializado para la tarea específica que se va a realizar, y se utilizarán diferentes modelos para realizar diferentes tareas.
[0262] Una vez que la red neuronal está estructurada, se puede aplicar un modelo de aprendizaje a la red para entrenarla para que realice tareas específicas. El modelo de aprendizaje describe cómo ajustar los pesos dentro del modelo para reducir el error de salida de la red. La retropropagación de errores es un procedimiento común usado para entrenar redes neuronales. Se presenta un vector de entrada a la red para su procesamiento. La salida de la red se compara con la salida deseada usando una función de pérdidas y se calcula un valor de error para cada una de las neuronas en la capa de salida. Los valores de error se propagan hacia atrás hasta que cada neurona tiene un valor de error asociado que representa aproximadamente su contribución a la salida original. La red puede aprender, a continuación, de esos errores usando un algoritmo, tal como el algoritmo de descenso de gradiente estocástico, para actualizar los pesos de la red neuronal.
[0263] LasFIGS.9A-9Bilustran una red neuronal convolucional de ejemplo. La FIG.9A ilustra diversas capas dentro de una RNC. Como se muestra en la FIG. 9A, una RNC ilustrativa usada para modelar el procesamiento de imagen puede recibir la entrada 902 que describe las componentes de rojo, verde y azul (RGB) de una imagen de entrada. La entrada 902 puede procesarse mediante múltiples capas convolucionales (por ejemplo, capa convolucional 904, capa convolucional 906). La salida de las múltiples capas convolucionales puede procesarse opcionalmente por un conjunto de capas completamente conectadas 908. Las neuronas en una capa completamente conectada tienen conexiones completas con todas las activaciones en la capa anterior, como se describió anteriormente para una red de realimentación prospectiva. La salida de las capas completamente conectadas 908 puede usarse para generar un resultado de salida a partir de la red. Las activaciones dentro de las capas completamente conectadas 908 se pueden calcular utilizando la multiplicación de matrices en lugar de la convolución. No todas las implementaciones de CNN utilizan capas completamente conectadas 908. Por ejemplo, en algunas implementaciones, la capa convolucional 906 puede generar una salida para la RNC.
[0265] Las capas convolucionales están escasamente conectadas, lo que difiere de la configuración de red neuronal tradicional que se encuentra en las capas completamente conectadas 908. Las capas de red neuronal tradicionales están completamente conectadas, de manera que cada unidad de salida interacciona con cada unidad de entrada. Sin embargo, las capas convolucionales están escasamente conectadas porque la salida de la convolución de un campo es la entrada (en lugar del valor de estado respectivo de cada uno de los nodos en el campo) a los nodos de la capa posterior, como se ilustra. Los núcleos asociados con las capas convolucionales realizan operaciones de convolución, cuya salida se envía a la siguiente capa. La reducción de dimensionalidad realizada dentro de las capas convolucionales es un aspecto que permite que la RNC se escale para procesar imágenes grandes.
[0266] La FIG. 9B ilustra fases de cálculo ilustrativas dentro de una capa convolucional de una RNC. La entrada a una capa convolucional 912 de una RNC se puede procesar en tres etapas de una capa convolucional 914. Las tres etapas pueden incluir una etapa de convolución 916, una etapa de detección 918 y una etapa de agrupamiento 920. La capa de convolución 914 puede emitir, a continuación, datos a una capa convolucional sucesiva. La capa convolucional final de la red puede generar datos de mapas de características de salida o proporcionar entrada a una capa completamente conectada, por ejemplo, para generar un valor de clasificación para la entrada a la RNC.
[0267] En la fase de convolución 916 se realizan varias convoluciones en paralelo para producir un conjunto de activaciones lineales. La etapa de convolución 916 puede incluir una transformación afín, que es cualquier transformación que se pueda especificar como una transformación lineal más una traslación. Las transformaciones afines incluyen rotaciones, traslaciones, escalamiento y combinaciones de estas transformaciones. La etapa de convolución calcula la salida de funciones (por ejemplo, neuronas) que están conectadas a regiones específicas en la entrada, que se pueden determinar como la región local asociada con la neurona. Las neuronas calculan un producto escalar entre los pesos de las neuronas y la región en la entrada local a la que están conectadas las neuronas. La salida de la etapa de convolución 916 define un conjunto de activaciones lineales que se procesan por etapas sucesivas de la capa convolucional 914.
[0269] Las activaciones lineales se pueden procesar mediante una etapa de detección 918. En la etapa de detección 918, cada activación lineal es procesada por una función de activación no lineal. La función de activación no lineal aumenta las propiedades no lineales de la red global sin afectar a los campos receptivos de la capa de convolución. Pueden usarse varios tipos de funciones de activación no lineal. Un tipo particular es la unidad lineal rectificada (ReLU), que usa una función de activación definida comof(x) = máx (0,x), de manera que se fija un umbral de cero para la activación.
[0271] La etapa de agrupamiento 920 utiliza una función de agrupación que reemplaza la salida de la capa convolucional 906 con una estadística de resumen de las salidas cercanas. La función de agrupamiento puede usarse para introducir la invarianza de traslación en la red neuronal, de manera que traslaciones pequeñas en la entrada no cambian las salidas agrupadas. La invarianza a la traslación local puede ser útil en situaciones donde la presencia de una característica en los datos de entrada es más importante que la ubicación precisa de la característica. Se pueden utilizar varios tipos de funciones de agrupación durante la fase de agrupación 920, incluyendo agrupación máxima, agrupación promedio y agrupación de norma 12. Además, algunas implementaciones de RNC no incluyen una etapa de agrupamiento. En cambio, dichas implementaciones sustituyen una etapa de convolución adicional que tiene un paso aumentado en relación con las etapas de convolución anteriores.
[0273] La salida de la capa convolucional 914 puede ser procesada luego por la siguiente capa 922. La siguiente capa 922 puede ser una capa convolucional adicional o una de las capas completamente conectadas 908. Por ejemplo, la primera capa convolucional 904 de la FIG.9A puede enviar a la segunda capa convolucional 906, mientras que la segunda capa convolucional puede enviar a una primera capa de las capas completamente conectadas 908.
[0274] LaFIG. 10ilustra una red neuronal recurrente 1000 ilustrativa. En una red neuronal recurrente (RNN), el estado previo de la red influye sobre la salida del estado actual de la red. Las RNN se pueden construir de diversas maneras utilizando una variedad de funciones. El uso de las RNN generalmente gira en torno al uso de modelos matemáticos para predecir el futuro en función de una secuencia previa de entradas. Por ejemplo, puede usarse una RNN para realizar modelado de lenguaje estadístico para predecir una palabra próxima dada en una secuencia de palabras anterior. La RNN 1000 ilustrada se puede describir como que tiene una capa de entrada 1002 que recibe un vector de entrada, capas ocultas 1004 para implementar una función recurrente, un mecanismo de retroalimentación 1005 para habilitar una "memoria" de estados anteriores y una capa de salida 1006 para generar un resultado. La RNN 1000 opera basándose en pasos de tiempo. El estado de la RNN en un paso de tiempo determinado se ve influenciado en función del paso de tiempo anterior a través del mecanismo de retroalimentación 1005. Para una etapa de tiempo dada, se define el estado de las capas ocultas 1004 por el estado anterior y la entrada en la etapa de tiempo actual. Una entrada inicial (x<1>) en una primera etapa de tiempo puede ser procesada por la capa oculta 1004. Una segunda entrada (x<2>) puede ser procesada por la capa oculta 1004 usando información de estado que se determina durante el procesamiento de la entrada inicial (x<1>). Un estado dado se puede calcular comost = f(Uxt + Wst--1
), dondeUyWson matrices de parámetros. La funciónfes, en general, una no linealidad, tal como la función tangente hiperbólica (Tanh) o una variante de la función rectificadoraf(x) = máx(0,x). Sin embargo, la función matemática específica utilizada en las capas ocultas 1004 puede variar dependiendo de los detalles de implementación específicos de la RNN 1000.
[0276] Además de las redes RNC y RNN básicas descritas, pueden habilitarse variaciones en esas redes. Una variante de RNN ilustrativa es la RNN de memoria larga a corto plazo (LSTM). Las RNN LSTM son capaces de aprender dependencias a largo plazo que pueden ser necesarias para procesar secuencias más largas de lenguaje. Una variante en la RNC es una red de creencia profunda convolucional, que tiene una estructura similar a una RNC y se entrena de una manera similar a una red de creencia profunda. Una red de creencias profundas (DBN) es una red neuronal generativa que se compone de múltiples capas de variables estocásticas (aleatorias). Las DBN pueden entrenarse capa a capa usando aprendizaje no supervisado voraz. A continuación, los pesos aprendidos de la DBN pueden utilizarse para preentrenar redes neuronales determinando un conjunto inicial óptimo de pesos para la red neuronal.
[0278] LaFIG. 11ilustra el entrenamiento y despliegue de una red neuronal profunda. Una vez que se ha estructurado una red dada para una tarea, la red neuronal se entrena utilizando un conjunto de datos de entrenamiento 1102. Se han desarrollado diversas estructuras de entrenamiento 1104 para posibilitar la aceleración de hardware del proceso de entrenamiento. Por ejemplo, la estructura de aprendizaje automático 604 de la FIG. 6 se puede configurar como una estructura de entrenamiento 604. La estructura de entrenamiento 604 se puede conectar a una red neuronal no entrenada 1106 y permitir que la red neuronal no entrenada se entrene utilizando los recursos de procesamiento paralelo descritos en este documento para generar una red neuronal entrenada 1108.
[0280] Para iniciar el proceso de entrenamiento, los pesos iniciales pueden elegirse aleatoriamente o mediante un entrenamiento previo utilizando una red de creencias profundas. El ciclo de entrenamiento se puede realizar de manera supervisada o no supervisada.
[0282] El aprendizaje supervisado es un procedimiento de aprendizaje en el que se realiza un entrenamiento como una operación mediada, tal como cuando el conjunto de datos de entrenamiento 1102 incluye una entrada emparejada con la salida deseada para la entrada, o cuando el conjunto de datos de entrenamiento incluye una entrada que tiene una salida conocida, y la salida de la red neuronal se califica manualmente. La red procesa las entradas y compara las salidas resultantes contra un conjunto de salidas esperadas o deseadas. Luego, los errores se propagan hacia atrás a través del sistema. La estructura de entrenamiento 1104 puede ajustarse para ajustar los pesos que controlan la red neuronal no entrenada 1106. La estructura de entrenamiento 1104 puede proporcionar herramientas para monitorizar qué tan bien la red neuronal no entrenada 1106 está convergiendo hacia un modelo adecuado para generar respuestas correctas en función de los datos de entrada conocidos. El proceso de entrenamiento tiene lugar repetidamente a medida que se ajustan los pesos de la red para perfeccionar la salida generada por la red neuronal. El proceso de entrenamiento puede continuar hasta que la red neuronal alcanza una precisión estadísticamente deseada asociada con una red neuronal entrenada 1108. Luego, la red neuronal entrenada 1108 se puede desplegar para implementar cualquier número de operaciones de aprendizaje automático.
[0283] El aprendizaje no supervisado es un procedimiento de aprendizaje en el que la red intenta entrenarse a sí misma usando datos no etiquetados. Por lo tanto, para el aprendizaje no supervisado, el conjunto de datos de entrenamiento 1102 incluirá datos de entrada sin ningún dato de salida asociado. La red neuronal no entrenada 1106 puede aprender agrupamientos dentro de la entrada no etiquetada y puede determinar cómo las entradas individuales están relacionadas con el conjunto de datos global. El entrenamiento no supervisado se puede utilizar para generar un mapa autoorganizado, que es un tipo de red neuronal entrenada 1107 capaz de realizar operaciones útiles para reducir la dimensionalidad de los datos. El entrenamiento no supervisado también se puede utilizar para realizar la detección de anomalías, lo que permite la identificación de puntos de datos en un conjunto de datos de entrada que se desvían de los patrones normales de los datos.
[0285] También pueden emplearse variaciones al entrenamiento supervisado y no supervisado. El aprendizaje semisupervisado es una técnica en la que el conjunto de datos de entrenamiento 1102 incluye una mezcla de datos etiquetados y no etiquetados de la misma distribución. El aprendizaje incremental es una variante del aprendizaje supervisado en el que los datos de entrada se utilizan continuamente para entrenar aún más el modelo. El aprendizaje incremental permite que la red neuronal entrenada 1108 se adapte a los nuevos datos 1112 sin olvidar el conocimiento inculcado dentro de la red durante el entrenamiento inicial.
[0286] Ya sea supervisado o no supervisado, el proceso de entrenamiento para redes neuronales particularmente profundas puede ser demasiado intensivo en términos computacionales para un solo nodo de computacional. En lugar de usar un único nodo de cálculo, puede usarse una red distribuida de nodos computacionales para acelerar el proceso de entrenamiento.
[0287] LaFIG. 12es un diagrama de bloques que ilustra un aprendizaje distribuido. El aprendizaje distribuido es un modelo de entrenamiento que usa múltiples nodos informáticos distribuidos para realizar un entrenamiento supervisado o no supervisado de una red neuronal. Cada uno de los nodos computacionales distribuidos puede incluir uno o más procesadores de anfitrión y uno o más de los nodos de procesamiento de propósito general, tales como la unidad de procesamiento de gráficos de propósito general altamente paralela 700 como en la FIG. 700. Como se ha ilustrado, un aprendizaje distribuido puede realizarse con el paralelismo de modelo 1202, el paralelismo de datos 1204 o una combinación del paralelismo de modelo y de datos 1204.
[0288] En el paralelismo de modelos 1202, diferentes nodos informáticos en un sistema distribuido pueden realizar cálculos de entrenamiento para diferentes partes de una sola red. Por ejemplo, cada capa de una red neuronal puede entrenarse por un nodo de procesamiento diferente del sistema distribuido. Los beneficios del paralelismo de modelos incluyen la capacidad de escalar a modelos particularmente grandes. La división de los cálculos asociados con diferentes capas de la red neuronal posibilita el entrenamiento de redes neuronales muy grandes en las que los pesos para todas las capas no se ajustarían en la memoria de un único nodo computacional. En algunos casos, el paralelismo de modelo puede ser particularmente útil al realizar entrenamiento no supervisado de redes neuronales grandes.
[0289] En el paralelismo de datos 1204, los diferentes nodos de la red distribuida tienen una instancia completa del modelo y cada nodo recibe una porción diferente de los datos. Luego se combinan los resultados de los diferentes nodos. Aunque son posibles diferentes enfoques al paralelismo de datos, los enfoques de entrenamiento paralelo de datos requieren, todos ellos, una técnica de combinación de resultados y de sincronización de los parámetros de modelo entre cada nodo. Los enfoques ilustrativos para la combinación de datos incluyen promediado de parámetros y paralelismo de datos basado en actualizaciones. El promedio de parámetros entrena cada nodo en un subconjunto de los datos de entrenamiento y establece los parámetros globales (por ejemplo, pesos, polarizaciones) en el promedio de los parámetros de cada nodo. El promediado de parámetros usa un servidor de parámetros central que mantiene los datos de parámetro. El paralelismo de datos basado en actualizaciones es similar al promediado de parámetros excepto en que, en lugar de transferir parámetros desde los nodos al servidor de parámetros, se transfieren las actualizaciones al modelo. Además, el paralelismo de datos basado en actualizaciones se puede realizar de manera descentralizada, donde las actualizaciones se comprimen y transfieren entre nodos.
[0290] El paralelismo de modelo y de datos combinado 1206 puede implementarse, por ejemplo, en un sistema distribuido en el que cada nodo computacional incluye múltiples GPU. Cada nodo puede tener una instancia completa del modelo con GPU separadas dentro de cada nodo que se usan para entrenar diferentes porciones del modelo. El entrenamiento distribuido ha aumentado la sobrecarga en relación con el entrenamiento en una sola máquina. Sin embargo, los procesadores paralelos y las GPGPU descritas en este documento pueden implementar varias técnicas para reducir la sobrecarga del entrenamiento distribuido, incluidas técnicas para permitir la transferencia de datos de GPU a GPU de alto ancho de banda y la sincronización de datos remota acelerada.
[0291] Aplicaciones de aprendizaje automático ejemplares
[0292] El aprendizaje automático se puede aplicar para resolver una variedad de problemas tecnológicos, incluidos, entre otros, la visión informática, la conducción y navegación autónomas, el reconocimiento de voz y el procesamiento del lenguaje. La visión informática ha sido tradicionalmente una de las áreas de investigación más activas para aplicaciones de aprendizaje automático. Las aplicaciones de la visión artificial van desde la reproducción de las capacidades visuales humanas, tales como el reconocimiento de rostros, hasta la creación de nuevas categorías de capacidades visuales. Por ejemplo, las aplicaciones de visión informática pueden configurarse para reconocer ondas de sonido de las vibraciones inducidas en los objetos visibles en un vídeo. El aprendizaje automático acelerado por procesadores paralelos permite entrenar aplicaciones de visión artificial utilizando conjuntos de datos de entrenamiento significativamente más grandes que los que eran posibles anteriormente y permite implementar sistemas de inferencia utilizando procesadores paralelos de bajo consumo.
[0293] El aprendizaje automático acelerado por procesador paralelo tiene aplicaciones de conducción autónoma que incluyen reconocimiento de señales de carretera y de carril, evitación de obstáculos, navegación y control de conducción. Las técnicas de aprendizaje automático acelerado se pueden utilizar para entrenar modelos de conducción basados en conjuntos de datos que definen las respuestas adecuadas a una entrada de entrenamiento específica. Los procesadores paralelos descritos en este documento pueden permitir un entrenamiento rápido de las redes neuronales cada vez más complejas que se utilizan para soluciones de conducción autónoma y permiten la implementación de procesadores de inferencia de bajo consumo en una plataforma móvil adecuada para la integración en vehículos autónomos.
[0294] Las redes neuronales profundas aceleradas por procesadores paralelos han permitido enfoques de aprendizaje automático para el reconocimiento automático de voz (ASR). El ASR incluye la creación de una función que calcula la secuencia lingüística más probable dada una secuencia acústica de entrada. El aprendizaje automático acelerado mediante redes neuronales profundas ha permitido reemplazar los modelos ocultos de Markov (HMM) y los modelos de mezcla gaussiana (GMM) utilizados para el ASR.
[0295] El aprendizaje automático acelerado por procesador paralelo puede usarse también para acelerar el procesamiento de lenguaje natural. Los procedimientos de aprendizaje automático pueden hacer uso de algoritmos de inferencia estadística para producir modelos que sean robustos a entradas erróneas o desconocidas. Las aplicaciones de procesador de lenguaje natural ilustrativas incluyen la traducción mecánica automática entre idiomas humanos. Las plataformas de procesamiento paralelo utilizadas para el aprendizaje automático se pueden dividir en plataformas de entrenamiento y plataformas de implementación. Las plataformas de entrenamiento son generalmente altamente paralelas e incluyen optimizaciones para acelerar el entrenamiento de nodo único de múltiples GPU y el entrenamiento de múltiples nodos, múltiples GPU. Los procesadores paralelos a modo de ejemplo adecuados para el entrenamiento incluyen la unidad de procesamiento de gráficos de propósito general altamente paralela 700 de la FIG.700 y el sistema informático de múltiples GPU 800 de la FIG.800. Por el contrario, las plataformas de aprendizaje automático desplegadas incluyen, en general, procesadores paralelos de potencia inferior adecuados para su uso en productos tales como cámaras, robots autónomos y vehículos autónomos. LaFIG. 13ilustra un sistema en un chip (SOC) de inferencia 1300 de ejemplo, adecuado para realizar una inferencia usando un modelo entrenado. El SOC 1300 puede integrar componentes de procesamiento que incluyen un procesador de medios 1302, un procesador de visión 1304, una GPGPU 1306 y un procesador de múltiples núcleos 1308. El SOC 1300 puede incluir, además, una memoria en chip 1305 que puede habilitar un grupo de datos compartido en chip al que puede acceder cada uno de los componentes de procesamiento. Los componentes de procesamiento pueden optimizarse para una operación de baja potencia para posibilitar el despliegue en una diversidad de plataformas de aprendizaje automático, incluyendo vehículos autónomos y robots autónomos. Por ejemplo, una implementación del SOC 1300 se puede utilizar como parte del sistema de control principal para un vehículo autónomo. Donde el SOC 1300 está configurado para su uso en vehículos autónomos, el SOC se diseña y está configurado para cumplir con las normas de seguridad funcional relevantes de la jurisdicción de despliegue. Durante el funcionamiento, el procesador de medios 1302 y el procesador de visión 1304 pueden trabajar en conjunto para acelerar las operaciones de visión por ordenador. El procesador de medios 1302 puede posibilitar la decodificación de latencia baja de múltiples flujos de vídeo de alta resolución (por ejemplo, 4K, 8K). Las secuencias de vídeo decodificadas se pueden escribir en una memoria intermedia en la memoria en chip 1305. El procesador de visión 1304 puede luego analizar el vídeo decodificado y realizar operaciones de procesamiento preliminares en los fotogramas del vídeo decodificado en preparación para procesar los fotogramas utilizando un modelo de reconocimiento de imágenes entrenado. Por ejemplo, el procesador de visión 1304 puede acelerar las operaciones convolucionales para una RNC que se usa para realizar el reconocimiento de imagen en los datos de vídeo de alta resolución, mientras se realizan cálculos de modelo de extremo trasero por la GPGPU 1306.
[0296] El procesador de múltiples núcleos 1308 puede incluir lógica de control para ayudar con la secuenciación y sincronización de transferencias de datos y operaciones de memoria compartida realizadas por el procesador de medios 1302 y el procesador de visión 1304. El procesador de múltiples núcleos 1308 también puede funcionar como un procesador de aplicaciones para ejecutar aplicaciones de software que pueden hacer uso de la capacidad de cálculo de inferencia de la GPGPU 1306. Por ejemplo, puede implementarse al menos una porción de la lógica de navegación y de conducción en software que se ejecuta en el procesador de múltiples núcleos 1308. Dicho software puede emitir directamente cargas de trabajo computacionales a la GPGPU 1306 o las cargas de trabajo computacionales se pueden emitir al procesador de múltiples núcleos 1308, que puede descargar al menos una parte de esas operaciones a la GPGPU 1306.
[0297] La GPGPU 1306 puede incluir agrupaciones de computación tales como una configuración de baja potencia de las agrupaciones de computación 706A-706H dentro de la unidad de procesamiento de gráficos de propósito general altamente paralela 700. Las agrupaciones de cálculo dentro de la GPGPU 1306 pueden admitir instrucciones que están específicamente optimizadas para realizar cálculos de inferencia en una red neuronal entrenada. Por ejemplo, la GPGPU 1306 puede admitir instrucciones para realizar cálculos de baja precisión, tales como operaciones con vectores enteros de 8 y 4 bits.
[0298] Reducción de la exactitud de la unidad de coma flotante dinámica para operaciones de aprendizaje automático
[0299] La norma IEEE 754 de formato de coma flotante binario de precisión única especifica una representación binaria de 32 bits que tiene un signo de 1 bit, un exponente de 8 bits y una mantisa de 24 bits, de los cuales 23 bits se almacenan explícitamente. La norma IEEE 754 de formato de coma flotante binario de media precisión especifica una representación binaria de 16 bits que tiene un signo de 1 bit, un exponente de 5 bits y una mantisa de 11 bits, de los cuales 10 bits se almacenan explícitamente. Los bits implícitos de mantisa están definidos para ser uno para valores de exponente distintos de cero cuando todos los bits de exponente son cero. En la técnica se conocen unidades de coma flotante capaces de realizar operaciones aritméticas con una precisión simple y con media precisión. Por ejemplo, las unidades de coma flotante existentes pueden realizar operaciones de coma flotante de precisión simple de 32 bits (FP32) u operaciones duales de coma flotante de media precisión de 16 bits (FP16).
[0300] Las realizaciones descritas en el presente documento amplían su capacidad proporcionando soporte para la instrucción y la lógica asociada para habilitar operaciones de precisión variable. Cuando es posible, las instrucciones de coma flotante que permiten operaciones de precisión variable pueden aumentar dinámicamente el caudal realizando operaciones con menor precisión. En una realización, se proporciona un conjunto de instrucciones y de lógica asociada en la que se incrementa el caudal realizando operaciones de coma flotante con la menor precisión posible sin una pérdida de datos significativa. En una realización, se proporciona un conjunto de instrucciones y de lógica asociada en el que la lógica de coma flotante verificará los resultados de menor precisión contra los resultados realizados con mayor precisión para determinar si se ha producido una pérdida significativa de datos.
[0302] LaFIG.14ilustra componentes de una unidad de coma flotante de precisión dinámica 1400, de acuerdo con una realización. Unidad de coma flotante de precisión dinámica 1400. En una realización, la unidad de coma flotante de precisión dinámica 1400 incluye una unidad de control 1402, un conjunto de registros internos 1404, un bloque de exponente 1406 y un bloque de mantisa 1408. Además de la lógica de control de coma flotante conocida en la técnica, en una realización, la unidad de control 1402 incluye adicionalmente una lógica de rastreo de precisión 1412 y una unidad de transformación numérica 1422.
[0304] En una realización, la lógica de rastreo de precisión 1412 es una lógica de hardware configurada para rastrear un número disponible de bits de precisión para datos calculados con respecto a una precisión objetivo. La lógica de rastreo de precisión 1412 puede rastrear registros de precisión dentro del bloque del exponente 1406 y el bloque de mantisa 1408 para rastrear métricas de precisión, tales como el número mínimo de bits de precisión requeridos para almacenar valores calculados que son generados por el bloque de exponente 1406 y el bloque de mantisa 1408. En una realización, las métricas de precisión incluyen un promedio móvil de precisión numérica requerida para representar datos a lo largo de un conjunto de cálculos. En una realización, las métricas de precisión incluyen una precisión máxima requerida dentro de un conjunto de datos dado. En una realización, la unidad de coma flotante de precisión dinámica 1400 admite instrucciones para leer o restablecer los datos de registro usados por la lógica de rastreo de precisión 1412 para generar las métricas de precisión descritas en el presente documento. En una realización, la unidad de cálculo que aloja la unidad de coma flotante de precisión dinámica admite instrucciones para establecer o restablecer los datos de registro usados por la lógica de rastreo de precisión 1412. En una realización, la lógica de rastreo de precisión 1412 monitoriza un acumulador de errores 1434 en el conjunto de registros internos 1404. El acumulador de errores se puede usar para rastrear un error acumulador (por ejemplo, un error de redondeo) a través de un conjunto de operaciones de coma flotante. En una realización, la unidad de coma flotante de precisión dinámica 1400 admite un conjunto de instrucciones, incluyendo una instrucción para restablecer el acumulador de errores 1434 y una instrucción para leer el acumulador de errores 1434. En una realización, el acumulador de errores se puede restablecer en respuesta a un bit o indicador que se suministra como operando en una instrucción.
[0306] En una realización, la unidad de transformación numérica 1422 se puede usar para realizar transformaciones numéricas intermedias en los datos cuando se realizan operaciones de menor precisión para impedir o mitigar la posibilidad de desbordamiento o subdsesbordamiento mientras se realizan las operaciones. Por ejemplo, cuando se acerca a los límites de precisión de un tipo de dato dado, la unidad de transformación numérica 1422 puede realizar operaciones de multiplicación o división usando logaritmos y transformar el valor resultante mediante una exponenciación. En la Figura 22 se proporcionan detalles adicionales con respecto a la lógica de rastreo de precisión 1412 y la unidad de transformación numérica 1422.
[0308] Los registros internos 1404 incluyen un conjunto de registros de operando 1414 que almacenan valores de entrada para la unidad de coma flotante de precisión dinámica 1400. En una realización, los registros de operando 1414 incluyen dos operandos (A, B). Para los datos de entrada de coma flotante, los valores de datos de entrada se pueden dividir en porciones de exponente (EXA, EXB) y en porciones de mantisa (SIGA, SIGB). En varias realizaciones, los registros de operando 1414 no están limitados a admitir dos entradas de coma flotante. En una realización, los registros de operando 1414 incluyen tres operandos de entrada, por ejemplo, para admitir operaciones combinadas de multiplicación-suma, multiplicación-resta, multiplicación-acumulación u operaciones fusionadas relacionadas. En una realización, los registros de operando 1414 también pueden almacenar valores enteros, como en una realización en la que la unidad de coma flotante de precisión dinámica admite operaciones de enteros de 32 bits, 16 bits y 8 bits. En una realización, se puede configurar el tipo de dato específico y la precisión básica mediante una entrada en la unidad de control 1402.
[0310] En una realización, las operaciones de coma flotante se realizan con precisión dinámica usando el bloque de exponente 1406 y el bloque de mantisa 1408. En una realización, las operaciones de enteros se pueden realizar mediante el bloque de mantisa 1408. En una realización, las operaciones duales de enteros de 8 bits se pueden realizar usando el bloque de exponente 1406 y el bloque de mantisa 1408.
[0312] En una realización, el bloque de exponente 1406 incluye un comparador 1416 y un sumador de exponente de precisión dinámica 1426. El comparador determina la diferencia entre exponentes y determina el menor de los dos exponentes. Durante la suma de coma flotante, el exponente del número más pequeño se ajusta para coincidir con el exponente del número más grande. El sumador de exponente de precisión dinámica 1426 se puede usar para sumar valores de exponentes para valores FP16 o FP32. El bloque de mantisa 1408 incluye un multiplicador de precisión dinámica 1418, una unidad de desplazamiento 1428, un sumador de mantisa de precisión dinámica 1438 y un registro acumulador 1448.
[0314] En una realización, se puede especificar un tipo de dato FP16 o FP32 para una operación. Cuando se especifica FP16, la unidad de coma flotante de precisión dinámica 1400 corta la alimentación de elementos que no son necesarios para realizar operaciones FP32, mientras mantiene la lógica para rastrear la pérdida de precisión o el error (por ejemplo, mediante el acumulador de errores 1434). Por ejemplo y en una realización, el acumulador de errores 1434 se puede usar para rastrear un número de operaciones de redondeo dentro de un periodo de instrucciones. En una realización, el acumulador de errores mantiene un valor del error de redondeo total acumulado sobre un conjunto de instrucciones. La unidad de coma flotante de precisión dinámica 1400 puede habilitar la admisión de una instrucción para limpiar o leer el acumulador de errores 1434 del software. Cuando se especifica FP32, la unidad de coma flotante de precisión dinámica 1400 puede intentar realizar operaciones FP32 con una precisión FP16, mientras corta la alimentación de elementos y componentes que no sean los requeridos para realizar operaciones con una precisión FP16. Basándose en los valores de entrada o intermedios, cuando se le pide a la unidad de coma flotante de precisión dinámica 1400 que realice operaciones en FP32, la unidad de coma flotante de precisión dinámica 1400 inicialmente, puede intentar realizar operaciones en FP16 y ampliar la precisión según sea necesario hasta FP32. Cuando las operaciones FP32 se pueden realizar con una precisión FP16, se reduce la demanda de potencia por operación, lo que permite que un mayor número de elementos de cálculo se habiliten simultáneamente. Por ejemplo, limitaciones de capacidad dinámica y/o presupuesto de potencia para una configuración dada, tal como una configuración alimentada por batería o una configuración de refrigeración sólo pasiva, puede no permitir que todas las unidades de coma flotante u otros elementos de cálculo de una GPGPU se activen simultáneamente. Al reducir la potencia dinámica de un conjunto de unidades de coma flotante habilitando un cálculo de menor precisión dinámica se puede aumentar el caudal total de las unidades de cálculo de una GPGPU dentro de una envolvente de potencia dada, puesto que se puede procesar un mayor número de hilos por ciclo sin superar las limitaciones de potencia dinámica.
[0316] LaFIG.15proporciona detalles adicionales con respecto a la unidad de coma flotante de precisión dinámica 1400 de la FIG. 14, de acuerdo con una realización. En una realización, el multiplicador de precisión dinámica 1418 incluye un conjunto de memorias intermedias de entrada 1502 para almacenar datos de mantisa. En una realización, el conjunto de memorias intermedias de entrada incluye dos memorias intermedias para almacenar dos valores de entrada para una operación de multiplicación o división. Para una operación combinada (por ejemplo, multiplicación-suma, multiplicación-resta) el producto de la operación se puede sumar a una tercera entrada mediante un sumador y/o almacenarse en un registro acumulador.
[0318] En una realización, algunas configuraciones del multiplicador de precisión dinámica 1418 incluyen memorias intermedias de entrada que son entradas de 24 bits que pueden almacenar explícitamente 24 bits de datos de mantisa para entradas de coma flotante de precisión simple u 11 bits de datos de mantisa para valores de coma flotante de media precisión. En algunas configuraciones, las memorias intermedias de entrada 1502 también pueden ser memorias intermedias de 32 bits para habilitar la multiplicación de valores enteros de 32 bits. En una realización, está presente una configuración simple de las memorias intermedias de entrada 1502 que se puede seleccionar o configurar de entre una de 32 bits y una de 24 bits. En una realización, la memoria intermedia de salida 1510 se puede configurar o seleccionar de manera similar de entre 24 bits y 32 bits para habilitar selectivamente un almacenamiento de enteros de 32 bits de precisión completa o un valor de exponente de 24 bits y/u 11 bits para un número de coma flotante de 32 bits o 16 bits.
[0320] En una realización, el multiplicador de precisión dinámica 1418 incluye un multiplicador 1506 y un multiplicador de desbordamiento 1504. El multiplicador 1506 se puede configurar para realizar una operación de multiplicación o división con media precisión para un tipo de dato. Por ejemplo, el multiplicador 1506 puede realizar una operación de 11 bits para la mantisa de un valor de coma flotante FP16 y/u operación de multiplicación de 16 bits para una operación de enteros de 16 bits. El multiplicador 1506 también puede realizar una operación de multiplicación de 8 bits para un valor entero INT8. Para un valor de coma flotante de 32 bits o un valor entero de 32 bits, el multiplicador 1506 puede realizar una operación de multiplicación para una mantisa de 24 bits en 11 bits (por ejemplo, precisión FP16). El multiplicador 1506 puede, si es necesario, realizar un valor de multiplicación de 16 bits de precisión de mantisa para una mantisa FP16 de 24 bits. En una realización, la precisión requerida y resultante para una operación en un conjunto dado de entradas pueden rastrearse mediante el registro de precisión 1508. En una realización, la precisión requerida y resultante se puede representar dentro del registro de precisión 1508 mediante la pérdida de precisión que resultaría en caso de que la salida del multiplicador 1506 se emitiera mediante la memoria intermedia de salida 1510. En tal realización, el registro de precisión 1508 puede rastrear la pérdida de precisión asociada con el uso de datos de tipo de menor precisión, así como la pérdida de precisión asociada con realizar operaciones con una precisión más baja que la solicitada.
[0322] En una realización, la lógica de control asociada con el multiplicador de precisión dinámica 1418 (por ejemplo, dentro de la unidad de control 1402 de la FIG.14), puede monitorizar la pérdida de precisión asociada con realizar operaciones para operaciones de mayor precisión (por ejemplo, FP32, INT32) con una menor precisión (por ejemplo, FP16, INT16, INT8). Si la pérdida de precisión va a ser significativa, la lógica de control puede habilitar que el multiplicador de desbordamiento 1504 realice operaciones para los bits de precisión adicionales. Adicionalmente, si la lógica de control determina que se producirá un desbordamiento o subdesbordamiento basándose en las entradas actuales, se habilita el multiplicador de desbordamiento 1504 y se realiza la operación de multiplicación usando el multiplicador de desbordamiento 1504 y el multiplicador 1506.
[0324] Se realizan operaciones de control similares para el sumador de exponente de precisión dinámica 1426 y el sumador de mantisa de precisión dinámica 1438. El sumador de exponente de precisión dinámica 1426 incluye un conjunto de memorias intermedias de entrada de 8 bits que pueden almacenar datos de exponente para FP32 (8 bits) y FP16 (5 bits). Las memorias intermedias de entrada de 8 bits 1512 también almacenan un conjunto de entradas INT-8. La memoria intermedia de salida 1520 para el sumador de exponente de precisión dinámica 1426 se puede configurar de manera similar. El sumador de mantisa de precisión dinámica 1438 incluye un conjunto de memorias intermedias de entrada 1522 que se pueden seleccionar de una de un conjunto de memorias intermedias de 24 bits y 32 bits o se pueden configurar dinámicamente para almacenar datos de entrada bien en 24 bits o bien en 32 bits. En una realización, las memorias intermedias de entrada 1522 son simplemente memorias intermedias de 32 bits que también pueden almacenar datos de entrada de 24 bits. La memoria intermedia de salida 1530 para el sumador de mantisa de precisión dinámica 1438 se puede configurar de manera similar. El registro de precisión 1518 dentro del sumador de exponente de precisión dinámica 1426 y el registro de precisión 1528 dentro del sumador de mantisa de precisión dinámica 1438 se puede configurar para rastrear una pérdida de precisión para las operaciones realizadas. La lógica de control puede habilitar el sumador de desbordamiento 1514 y/o al sumador de desbordamiento 1524, según sea necesario, para impedir las condiciones de desbordamiento o subdesbordamiento o para impedir una pérdida de precisión que supere un umbral.
[0326] Volviendo a la FIG. 14, en una realización, la unidad de coma flotante de precisión dinámica 1400 puede realizar operaciones duales INT8 usando el sumador de exponente de precisión dinámica 1426 y el sumador de mantisa de precisión dinámica 1438. Por ejemplo, en lugar de inhabilitar el bloque de exponente 1406 durante operaciones de número entero, el bloque de exponente 1406 se puede configurar para realizar una operación en un primer conjunto de operandos de número entero de 8 bits mientras que el bloque de mantisa 1408 se puede configurar para realizar una operación en un segundo conjunto de operandos de 8 bits. Para habilitar la admisión de operaciones de multiplicación dual de 8 bits, multiplicación-suma dual combinada, multiplicación-resta dual combinada y/u otras operaciones basadas en multiplicaciones, en una realización, el bloque de exponente 1406 puede incluir un multiplicador 1436 adicional. El multiplicador puede ser un multiplicador fijo de 8 bits para habilitar operaciones duales de multiplicación de 8 bits simultáneas usando el bloque de exponente 1406 y el bloque de mantisa 1408.
[0328] LaFIG.16ilustra asignaciones de hilos para un sistema de procesamiento de precisión dinámica 1600, de acuerdo con una realización. En una realización, el sistema de procesamiento de precisión dinámica 1600 incluye un conjunto de unidades de coma flotante dinámicas 1608A-1608D. Las unidades de coma flotante dinámicas 1608A-1608D pueden ejecutar un conjunto de hilos de operación 1606A-1606D que pueden realizar operaciones de precisión mixta y generar datos de salida con precisiones variables. En una realización, una primera operación (por ejemplo, suma, resta, multiplicación, división, etc.) se puede realizar mediante un primer hilo de operación 1606A en una primera unidad de coma flotante dinámica 1608A, donde el primer hilo de operación 1606A acepta como entrada dos valores de coma flotante de 16 bits 1602A-1602B y envía un valor de coma flotante de 16 bits FP16. La primera operación se puede realizar como una operación dual, en la que una instrucción simple ejecutada por una GPGPU permite una operación dual de precisión mixta FP16/FP32. La segunda operación de la operación dual se puede realizar mediante un segundo hilo de operación 1606B que se realiza mediante una segunda unidad de coma flotante dinámica 1608B, que puede generar una segunda salida 1612 que es una salida de coma flotante de 32 bits. El segundo hilo de operación 1606B configura la segunda unidad de coma flotante dinámica 1608B para recibir dos valores de entrada de coma flotante de 32 bits 1603A-1603B. En una realización, la operación sobre dos operandos de coma flotante de 32 bits se puede realizar con 16 bits de precisión si la operación se puede realizar sin subdesbordamiento, desbordamiento o si no se produce una excesiva pérdida de precisión al realizar la operación con una precisión menor.
[0330] En una realización, el sistema de procesamiento de precisión dinámica 1600 puede ejecutar una instrucción simple que tenga un operando de 16 bits 1604A y un operando de 32 bits 1604B. El hilo de operación 1606C se puede ejecutar en una unidad de coma flotante dinámica 1608C. La unidad de coma flotante dinámica 1608C intentará realizar una operación de 16 bits/32 bits de precisión mixta con 16 bits de precisión a no ser que se produzca una pérdida de precisión significativa o un error. En una realización, el sistema de procesamiento de precisión dinámica 1600 también se puede configurar para realizar operaciones de enteros. Por ejemplo, se puede realizar una operación en un par de entradas de enteros de 8 bits 1605A-1605B mediante un hilo de operación 1606D con una unidad de coma flotante dinámica 1608D para generar una salida de enteros de 8 bits 1616. En una realización, la unidad de coma flotante dinámica 1608D se puede configurar para realizar operaciones duales de enteros de 8 bits en las que dos operaciones de enteros de 8 bits se pueden realizar en un único ciclo.
[0332] LaFIG. 17ilustra una lógica 1700 para realizar una operación numérica con menos precisión de la requerida, de acuerdo con una realización. En una realización, la lógica 1700 se implementa mediante un hardware integrado dentro de la unidad de coma flotante de precisión dinámica 1400 de la FIG.14. En una realización, la lógica 1700 se realiza, en parte, mediante una unidad de control 1402 dentro de la unidad de coma flotante de precisión dinámica 1400 de la FIG.14.
[0334] En una realización, la lógica 1700 puede recibir una petición para realizar una operación numérica con una primera precisión, como se muestra en el bloque 1702. La operación numérica puede ser una operación de coma flotante o una operación de número entero. La primera precisión puede ser, por ejemplo, una precisión de 32 bits. En una realización, la operación numérica puede ser una operación con la primera precisión que se realiza tras operaciones que tienen una precisión mixta. La lógica 1700 puede realizar a continuación, la operación numérica usando un número de bits asociado con una segunda precisión que es menor que la primera precisión, como se muestra en el bloque 1704. Por ejemplo y en una realización, el número de bits usado para realizar la operación puede ser un número de bits asociado con una operación de 16 bits, mientras que la primera precisión es una precisión de 32 bits. La lógica 1700 puede generar un resultado intermedio con la segunda precisión, en el bloque 1706. La lógica 1700 puede determinar a continuación, una pérdida de precisión del resultado intermedio relativo a la primera precisión. La pérdida de precisión se puede leer en un registro que almacena un indicador de pérdida de precisión que se almacena durante la operación.
[0336] La lógica 1700 puede determinar si la pérdida de precisión es menor que un umbral en el bloque 1709. En una realización, el umbral asociado con la pérdida de precisión puede ser configurable por software, aunque en algunas realizaciones se usa un umbral predeterminado por hardware. En una realización, el grado de pérdida de precisión también se puede determinar mediante la ejecución en paralelo de operaciones de precisión completa en unidades de cálculo sin usar. Los resultados de precisión reducida pueden entonces compararse con los resultados de precisión completa. Si la pérdida de precisión es menor que el umbral, la lógica 1700 puede enviar el resultado con la segunda precisión, como se muestra en el bloque 1712. Si la pérdida de precisión no es menor que el umbral, en el bloque 1709, la lógica 1700 puede calcular los bits restantes del resultado en el bloque 1710 y enviar el resultado con la primera precisión, como se muestra en el bloque 1714. El cálculo de los bits restantes en el bloque 1710 se puede realizar, en una realización, mediante unidades lógicas de desbordamiento, tal como el multiplicador de desbordamiento 1504, el sumador de desbordamiento 1514 y/o el sumador de desbordamiento 1524, como en la FIG.15.
[0338] Apilamiento vertical de operaciones para operaciones de coma flotante de 16 bits
[0340] Cuando se realizan operaciones de una única instrucción, múltiples hilos (SIMT) con menor precisión, en algunas circunstancias podría ser difícil mantener una utilización total de la lógica subyacente de una única instrucción, múltiples datos (SIMD) debido al mayor número de elementos necesarios para llenar todos los carriles SIMD. Por ejemplo, una unidad lógica SIMD configurada para una operación FP32 en registros de entrada de 128 bits puede realizar una operación simple en cuatro conjuntos de datos de entrada. Si esa unidad lógica se configura para realizar operaciones FP16 en los mismos cuatro conjuntos de datos de entrada, se puede aumentar el caudal subyacente debido a la menor precisión de la operación, pero la utilización de la SIMD se reduce a la mitad. Una solución para la infrautilización de la SIMD es realizar la operación en ocho conjuntos de datos de entrada. Sin embargo, el software que se ejecuta en las unidades lógicas podría no requerir tanto paralelismo como el que el hardware subyacente puede proporcionar.
[0342] Por ejemplo, un bucle que realiza operaciones iterativas en matrices de entrada se puede vectorizar de tal manera que cada iteración de la matriz se realice en paralelo como un hilo SIMT separado. Los hilos SIMT separados se pueden realizar en una única operación en una lógica vectorial/SIMD subyacente dentro de una unidad de cálculo. Cuando se realizan instrucciones paralelas derivadas mediante una lógica de vectorización en bucles de compilador, un bucle de menos de ocho iteraciones no llenará los ocho carriles SIMD disponibles para ejecutar los hilos generados para esas operaciones, reduciendo la utilización global de las unidades de cálculo. Adicionalmente, cuando el hardware subyacente tiene N carriles SIMD, cualquier número de iteraciones vectorizadas que no son múltiplos de N requerirán la ejecución de iteraciones restantes en una unidad SIMD que no esté llena del todo. Asimismo, la vectorización podría requerir la ejecución separada de bucles de desprendimiento antes de ejecutar el cuerpo principal de las operaciones vectorizadas.
[0344] Algunas realizaciones descritas en el presente documento pueden aumentar la utilización de SIMD apilando múltiples operaciones FP16 no relacionadas en una única unidad SIMD para su ejecución. Cuando una unidad SIMD tiene 8 carriles disponibles para su ejecución, la lógica de planificación de hilos puede despachar hilos en unidades deN/2 oN/4, y permitir que conjuntos no relacionados de hilos que van a realizar las mismas operaciones o unas compatibles compartan una única unidad SIMD. Adicionalmente, una realización habilita una planificación de carriles SIMD que permite la mezcla de grupos de hilos SMIT ensamblados dinámicamente con hilos SMID vectoriales.
[0346] LaFIG. 18ilustra una vectorización en bucle para unidades SIMD, de acuerdo con una realización. En una realización, la lógica de software puede incluir un bucle que se vectoriza automáticamente mediante un software compilador que se ejecuta en el sistema de procesamiento de datos. El bucle puede incluir un bucle de desprendimiento 1802, un bucle principal vectorizado 1804, y un bucle restante 1806. En algunas configuraciones, la vectorización en bucle es más eficiente cuando se realiza en datos que acceden a una memoria alineada. Por ejemplo, una GPGPU se puede configurar de tal manera que los accesos a la memoria vectorial se pueden realizar más eficientemente en fracciones de 64 bytes 1801A-1801F. En tal configuración, un bucle de desprendimiento 1802 incluye un subconjunto de iteraciones en bucle que se desprenden del bucle principal para habilitar que los accesos a memoria no alineada se separen del bucle principal. El bucle principal vectorizado 1804 incluye la mayoría de las iteraciones del bucle. Cada iteración del bucle principal vectorizado se puede realizar en paralelo y los accesos a memoria para cada elemento se alinean en un límite de memoria específico. El bucle restante 1806 incluye el conjunto de iteraciones que sigue al bucle principal vectorizado 1804. Las iteraciones del bucle restante 1806 generalmente pueden no realizarse en paralelo tan eficientemente como el bucle principal.
[0348] En una realización, el bucle de desprendimiento 1802 y el bucle restante 1806 también se pueden vectorizar. En una realización, cada uno del bucle de desprendimiento 1802, el bucle principal 1804 y el bucle restante 1806 se puede ejecutar en unidades FP16 SIMD8, donde se pueden realizar ocho instancias de la misma operación en paralelo. Las interacciones en bucle se pueden ejecutar en paralelo en hardware SIMD (por ejemplo, unidades FP16 SIMD8 1801A-1808C) usando una máscara de ejecución 1812, una máscara de ejecución 1814 y una máscara de ejecución 1816 que habilitan e inhabilitan, cada una, carriles SIMD para un ciclo operativo. Para el bucle de desprendimiento 1802 y el bucle restante 1806, se selecciona un subconjunto de elementos en la máscara de ejecución 1812 y la máscara de ejecución 1816. Todos los carriles se seleccionan en la máscara de ejecución 1814 del bucle principal vectorizado 1804.
[0350] En una realización, para una unidad SIMD con carriles inactivos, esta se puede configurar para realizar otras operaciones en esos carriles inactivos. Para un ciclo dado, cuando la lógica de planificación configura un conjunto de carriles inactivos para una unidad SIMD (por ejemplo, FP16 SIMD81808A, FP16 SIMD8108C), en lugar de dejar esos carriles ociosos durante un ciclo, el planificador puede apilar otros hilos SIMD de múltiples elementos o asignar hilos SIMT a los carriles SIMD, que de lo contrario, estarían ociosos
[0352] LaFIG.19ilustra un sistema de procesamiento de hilos 1900, de acuerdo con una realización. En una realización, el sistema de procesamiento de hilos 1900 incluye una unidad de cálculo SIMD, tal como una unidad de coma flotante SIMD81920 que incluye múltiples unidades de coma flotante dinámica 1922A-1922H. Dependiendo de la operación, la unidad de coma flotante SIMD81920 puede ejecutar ocho o más de las mismas operaciones o unas similares en un único ciclo. Por ejemplo y en una realización, cada una de las ocho unidades de coma flotante dinámicas 1922A-1922H puede ejecutar una operación simple con una precisión FP16. En una realización, cada una de las ocho unidades de coma flotante dinámicas 1922A-1922H puede realizar dos operaciones INT8 emparejadas en un único ciclo.
[0354] En algunas circunstancias, tal como con bucles de desprendimiento o restantes como se ha ilustrado en la FIG.
[0355] 18, no todos los carriles de una unidad de coma flotante SIMD estarán activos durante un ciclo. Para aumentar la utilización, se pueden asignar ranuras SIMD con menor granularidad, para habilitar la utilización de carriles SIMD, que de otro modo, no se usan. Por ejemplo, a la unidad de coma flotante SIMD8 1920 generalmente se le asignarían hilos u operaciones con una granularidad de ocho operaciones, donde menos de las ocho operaciones presentan una pérdida potencial de eficiencia computacional. En una realización, los carriles SIMD puede estar ocupados por un único hilo SIMD vectorial que incluye una máscara de ejecución que selecciona al menos ocho elementos o un grupo de hilos SIMT que tiene al menos ocho elementos.
[0357] Para aumentar la utilización SIMD, una realización divide ocho carriles SIMD en dos ranuras SIMD4 (por ejemplo, ranura SIMD4 1910, ranura SIMD4 1912). Las ranuras SIMD4 se pueden llenar de diversas maneras. En una realización, dos hilos SIMD separados (hilo SIMD 1902, hilo SIMD 1904) que se combinan para cubrir un total de cuadro carriles SIMD se asignan a una ranura SIMD4 (por ejemplo, ranura SIMD41910). En una realización, el grupo de hilos SIMT 1906 se puede asignar a una ranura SIMD41912. El grupo de hilos SIMT 1906 puede incluir cualquier número de hilos que sea un múltiplo de cuatro hilos (por ejemplo, 4, 8, 12, 16, etc.). Los hilos dentro del grupo de hilos SIMT 1906 se pueden procesar a razón de cuatro hilos a la vez, dependiendo el número de ciclos requeridos para procesar todos los hilos dentro del grupo de hilos SIMT 1906 del número de hilos del grupo.
[0358] LaFIG. 20ilustra una lógica 2000 para asignar hilos para su cálculo, de acuerdo con una realización. En una realización, la lógica 2000 se realiza mediante un sistema de procesamiento de hilos 1900 como en la FIG.19. En una realización, la lógica 2000 puede recibir un primer conjunto de hilos en una unidad SIMD que tiene un primer número de carriles, como se muestra en el bloque 2002. La lógica 2000 puede determinar a continuación, si el primer conjunto de hilos llena todos los carriles SIMD de la unidad SIMD, como se muestra en el bloque 2003. Si el primer conjunto de hilos incluye suficientes hilos SIMT o los hilos del primer conjunto de hilos incluyen suficientes elementos vectoriales SIMD para llenar todos los carriles SIMD, la lógica 2000 puede asignar el primer conjunto de hilos a la unidad SIMD, como se muestra en al bloque 2004.
[0360] Si el primer conjunto de hilos no llena todos los carriles SIMD, como se determina en el bloque 2003, la lógica 2000 puede asignar un primer conjunto de hilos a un segundo número de carriles que es inferior que el primer número de carriles en el bloque 2006. La asignación se puede realizar asignando un hilo SIMD a la unidad SIMD y enmascarando los carriles inactivos. La asignación también se puede realizar asignando un conjunto de hilos SIMT a la unidad SIMD. La lógica puede apilar entonces uno o más conjuntos adicionales de hilos para llenar todos los carriles SIMD, como se muestra en el bloque 2008. El conjunto adicional de hilos puede especificar carriles SIMD activos que ocupan carriles que no están ocupados por los hilos iniciales.
[0362] Sistema para habilitar una normalización y transformaciones para datos de baja precisión
[0364] Al realizar operaciones con tipos de datos de baja precisión, se debe tener cuidado de evitar el desbordamiento o subdesbordamiento de los datos durante las operaciones numéricas. Esta responsabilidad habitualmente recae sobre el científico de datos que está desarrollando el algoritmo de baja precisión. Debido a las limitaciones de la aritmética de baja precisión, se han adaptado muchas redes neuronales para usar valores binarios y/o ternarios que solo ocupan uno o dos bits por elemento. Sin embargo, existe la necesidad de unidades aritmeticológicas de coma flotante y de enteros que puedan habilitar una aritmética de baja precisión de N bits con una lógica de guarda para avisar contra o intentar impedir una pérdida de precisión significativa durante operaciones aritméticas. En una realización, las unidades de coma flotante de precisión dinámica descritas en el presente documento incluyen una lógica para avisar cuando los cálculos numéricos se acercan a los límites de los cálculos de baja de precisión.
[0365] Como se muestra en la FIG.14, una unidad de coma flotante de precisión dinámica 1400 puede incluir una lógica de rastreo de precisión 1412 y una unidad de transformación numérica 1422. En una realización, la lógica de rastreo de precisión 1412 rastrea los bits disponibles de precisión restante para datos calculados con relación a una precisión objetivo. Se pueden rastrear los bits de precisión disponibles para datos intermedios para determinar si un valor de datos intermedio que, en una realización se calcula con una precisión más alta con relación a los datos de entrada o datos de salida, se puede almacenar con una precisión de salida sin pérdida de precisión o error de redondeo significativos. Por ejemplo, y en una realización, se pueden realizar eficientemente operaciones específicas de baja precisión con una mayor precisión y la lógica de rastreo de precisión 1412 puede determinar si un resultado de un cálculo desbordaría una precisión de salida dada. En una realización, las unidades de lógica descritas en el presente documento pueden emitir información de estado que indique el grado de precisión perdida debido al error de redondeo. En una realización, las unidades de lógica pueden realizar transformaciones numéricas intermedias en los datos para impedir una pérdida de datos significativa. Las unidades de lógica pueden entonces emitir el valor transformado. En una realización, un valor de precisión completa o de precisión casi completa se puede derivar programáticamente basándose en la salida y en la información de estado proporcionada con la salida.
[0367] LaFIG. 21ilustra una red neuronal profunda 2100 que se puede procesar usando una lógica de cálculo proporcionada por las realizaciones descritas en el presente documento. La red neuronal profunda (DNN) es una red neuronal artificial que incluye múltiples capas de red neuronal 2102A-2102N. Cada capa representa un conjunto de operaciones de cálculo no lineales para realizar una extracción y transformación de características de una manera que sea congruente con las redes neuronales de aprendizaje automático descritas en el presente documento. Cada capa sucesiva usa la salida de la capa anterior como entrada. En el caso de una red neuronal convolucional, se puede usar una lógica de multiplicación y suma combinada (por ejemplo, una lógica FMA 2104A, 2104B) para calcular productos de coma entre datos de características de mapeo y filtrado para generar datos de mapa de activación que se proporcionan como entrada para una capa sucesiva.
[0369] Las redes neuronales de baja precisión se pueden implementar usando pesos binarios o ternarios en combinación con mapas de características binarias, ternarias o de N bits. Algunas redes neuronales pueden seguir beneficiándose de la precisión añadida de cálculos que usan mapas de características de N bits y filtros de N bits. En algunas implementaciones, las características de N bits y pesos para una red neuronal se pueden procesar con baja precisión sin una reducción significativa del error de salida. Sin embargo, un científico de datos que implemente una red neuronal de N bits de baja precisión (por ejemplo, FP16, INT8) generalmente debería ser consciente de los errores de redondeo o datos fuera de los límites que pueden surgir debido a cálculos sucesivos con baja precisión. En caso de que la lógica de rastreo de precisión (por ejemplo, la lógica de rastreo de precisión 1412 de la FIG. 14) en la lógica FMA 2104A-2106B determine que los datos del mapa de características o pesos se acercan a los límites de la precisión disponible del tipo de datos, la lógica FMA 2104A-2015B puede establecer un bit de estado. El bit de estado puede servir como indicador para un científico de datos, que esté desarrollando el modelo de red neuronal que está presente dentro de las capas de red neuronal 2102A-2012N, de que el modelo podría requerir una optimización o que se garantice una mayor precisión numérica.
[0371] En una realización, se puede habilitar una lógica de normalización y transformación 2106A-2106B para que realice una normalización de pesos o transformaciones numéricas en los datos del mapa de características antes de proporcionar los datos del mapa de características a la siguiente capa de la red neuronal como entrada. La aplicación de la lógica de normalización y transformación 2106A-2106B es opcional en cada fase y se puede realizar solo si son probables unas condiciones significativas de pérdida de precisión, desbordamiento o subdesbordamiento durante el procesamiento de una capa venidera. En una realización, la salida de pesos o mapas de características de una capa de una red neuronal se pueden normalizar automáticamente mediante una instancia de la lógica de normalización y transformación 2106A-2106B.
[0373] En una realización, la lógica de normalización y transformación 2106A-2016B puede usar la unidad de transformación numérica 1422 de la FIG.14 para transformar los datos del mapa de características o los datos de ponderación. La salida del mapa de características de una capa neuronal se puede basar en una salida del conjunto de datos de un conjunto de funciones. En tal realización se proporciona un conjunto específico de instrucciones de baja precisión que habilita un ajuste automático de datos de red neuronal de N bits para impedir una pérdida de precisión catastrófica. Las transformaciones o normalizaciones ilustrativas que pueden ser realizadas por la lógica de normalización y transformación 2106A-2016B incluyen la normalización de pesos en un intervalo de valores o un conjunto de transformación reversible y persistente de datos de características. En una realización, la normalización de pesos se puede realizar para comprimir el intervalo dinámico de un conjunto de pesos de filtro dentro de un intervalo predeterminado. Los datos de los pesos se pueden normalizar, por ejemplo, dentro de un intervalo [-1,1], lo que puede preservar las diferencias relativas entre valores de peso mientras se reduce la magnitud general de los valores de los pesos. En una realización, el peso de la red neuronal o los datos del mapa de características se pueden normalizar mediante el valor promedio del conjunto de datos.
[0375] En una realización, los cálculos de red neuronal que usan datos que se acercan a los límites del intervalo de ese tipo de datos se pueden transformar antes de que los datos se usen en los cálculos. Por ejemplo, una operación de multiplicación que use valores grandes que pueda tener como resultado un desbordamiento se puede realizar como una suma de logaritmos en lugar de una operación de multiplicación. Si bien tales transformaciones pueden resultar en cierto grado de pérdida de precisión, los cálculos se podrán realizar sin desbordar el número de bits adjudicados para realizar la operación. Por ejemplo, una serie de operaciones pueden presentarse como en la ecuación (1).
[0377]
[0380] Si la lógica de seguimiento de la precisión dentro de una unidad de cálculo determina que dicha operación puede desbordarse o desbordarse por defecto, la operación puede transformarse a la ecuación (2).
[0382] Se puede realizar la ecuación (2) para producir un resultado sin desencadenar un desbordamiento del tipo de datos. En una realización, la lógica de normalización y transformación 2106A-2016B puede transformar los valores de salida en valores logarítmicos para almacenar y transformar los valores mediante una exponenciación antes de usar los valores para cálculos de aprendizaje automático descritos en el presente documento.
[0384] LaFIG.22es un diagrama de flujo de una lógica 2200 para impedir un error o una pérdida significativa de precisión cuando se realizan operaciones de baja precisión para un aprendizaje automático, de acuerdo con una realización. En una realización, la lógica 2200 se puede implementar mediante una lógica de rastreo de precisión 1412 y una unidad de transformación numérica 1422 dentro de una unidad de coma flotante de precisión dinámica 1400, como en la FIG.14.
[0386] En una realización, la lógica 2200 puede calcular un mapa de activación basándose en datos de mapeo de características y filtro asociados con una capa de una red neuronal, como se muestra en el bloque 2202. La lógica 2200 puede entonces rastrear la pérdida de precisión que se produce durante el cálculo de un mapa de activación para la capa de la red neuronal. La lógica 2200 puede determinar a continuación, si la pérdida de precisión se acerca a un umbral en el bloque 2205. Si la pérdida de precisión no se acerca al umbral predeterminado o configurado en el bloque 2205, la lógica 2200 puede seguir calculando mapas de activación (y aplicando funciones de activación) para capas sucesivas hasta que se produzca y a menos que se produzca una pérdida de precisión que se aproxime a un umbral en el bloque 2205. Cuando la pérdida de precisión se acerca al umbral, la lógica 2200 puede determinar si se han habilitado transformaciones numéricas automáticas en el bloque 2207. Si se han habilitado transformaciones automáticas en el bloque 2207, por ejemplo, mediante las instrucciones usadas para realizar el conjunto de operaciones numéricas, la lógica 2200 puede transformar los datos de red neuronal para reducir errores debido a la pérdida de precisión en el bloque 2208. La lógica 2200 puede realizar cualquiera de las transformaciones numéricas descritas en el presente documento, incluyendo la normalización de datos dentro de un intervalo o mediante un valor promedio. Sin tener en cuenta sí se han habilitado transformaciones automáticas en el bloque 2207, la lógica 2200 puede emitir un estado que indique que la pérdida de precisión se acerca al umbral en el bloque 2210. El estado se puede emitir con un indicador de estado que se emite desde una unidad de cálculo como resultado de la operación realizada. Un programador puede configurar una lógica de software para responder a tal estado realizando ajustes algorítmicos en un programa de ejecución o ajustando el modelo de red neuronal usado para realizar un aprendizaje automático.
[0387] Sistema de procesamiento de gráficos ejemplar adicional
[0388] Los detalles de las realizaciones descritas anteriormente se pueden incorporar dentro de los sistemas y dispositivos de procesamiento de gráficos que se describen a continuación. Los dispositivos y el sistema de procesamiento de gráficos de laFIG. 23a laFIG. 36ilustran hardware de procesamiento de gráficos y sistemas alternativos que pueden implementar todas y cada una de las técnicas descritas anteriormente.
[0389] Descripción general del sistema de procesamiento de gráficos adicional
[0390] LaFIG.23es un diagrama de bloques de un sistema de procesamiento 2300, de acuerdo con una realización. En diversas realizaciones, el sistema 2300 incluye uno o más procesadores 2302 y uno o más procesadores de gráficos 2308, y puede ser un sistema de sobremesa de procesador único, un sistema de estación de trabajo de multiprocesador o un sistema de servidor que tiene un gran número de procesadores 2302 o núcleos de procesador 2307. En una realización, el sistema 2300 es una plataforma de procesamiento incorporada dentro de un circuito integrado de sistema en un chip (SoC) para su uso en dispositivos móviles, portátiles o integrados.
[0391] Una realización del sistema 2300 puede incluir o incorporarse dentro de: una plataforma de juegos basada en servidor, una consola de juegos, que incluye una consola de juegos y medios, una consola de juegos móvil, una consola de juegos portátil o una consola de juegos en línea. En algunas realizaciones, el sistema 2300 es un teléfono móvil, teléfono inteligente, dispositivo informático de tableta o dispositivo de internet móvil. El sistema de procesamiento de datos 2300 también puede incluir, acoplarse o integrarse en un dispositivo ponible, como un dispositivo ponible de reloj inteligente, un dispositivo de gafas inteligentes, un dispositivo de realidad aumentada o un dispositivo de realidad virtual. En algunas realizaciones, el sistema de procesamiento de datos 2300 es un dispositivo de televisión o descodificador que tiene uno o más procesadores 2302 y una interfaz gráfica generada por uno o más procesadores gráficos 2308.
[0392] En algunas realizaciones, cada uno del uno o más procesadores 2302 incluye uno o más núcleos de procesador 2307 para procesar instrucciones que, cuando se ejecutan, realizan operaciones para software de usuario y sistema. En algunas realizaciones, cada uno del uno o más núcleos de procesador 2307 está configurado para procesar un conjunto de instrucciones 2309 específico. En algunas realizaciones, el conjunto de instrucciones 2309 puede facilitar el cálculo de conjunto de instrucciones complejo (CISC), el cálculo de conjunto de instrucciones reducido (RISC) o el cálculo mediante una palabra de instrucción muy larga (VLIW). Múltiples núcleos de procesador 2307 pueden procesar cada uno un conjunto de instrucciones 2309 diferente, que puede incluir instrucciones para facilitar la emulación de otros conjuntos de instrucciones. El núcleo del procesador 2307 también puede incluir otros dispositivos de procesamiento, tales como un procesador de señales digitales (DSP).
[0393] En algunas realizaciones, el procesador 2302 incluye memoria caché 2304. Dependiendo de la arquitectura, el procesador 2302 puede tener una sola caché interna o múltiples niveles de caché interna. En algunas realizaciones, la memoria caché se comparte entre varios componentes del procesador 2302. En algunas realizaciones, el procesador 2302 también usa una memoria caché externa (por ejemplo, una memoria caché de nivel-3 (L3) o una memoria caché de último nivel (LLC)) (no mostrada), que puede estar compartida entre los núcleos de procesador 2307 usando técnicas de coherencia de caché conocidas. Adicionalmente, se incluye un archivo de registros 2306 en el procesador 2302, que puede incluir diferentes tipos de registros para almacenar diferentes tipos de datos (por ejemplo, registros de números enteros, registros de coma flotante, registros de estado y un registro de puntero a instrucción). Algunos registros pueden ser registros de propósito general, mientras que otros registros pueden ser específicos del diseño del procesador 2302.
[0394] En algunas realizaciones, el procesador 2302 está acoplado a un bus de procesador 2310 para transmitir señales de comunicación, tales como direcciones, datos o señales de control, entre el procesador 2302 y otros componentes del sistema 2300. En una realización, el sistema 2300 usa una arquitectura de sistema de 'concentrador' ilustrativa, que incluye un concentrador de controlador de memoria 2316 y un concentrador de controlador de entrada y salida (E/S) 2330. Un concentrador de controlador de memoria 2316 facilita la comunicación entre un dispositivo de memoria y otros componentes del sistema 2300, mientras que un concentrador de controlador de E/S (ICH) 2330 proporciona conexiones a los dispositivos de E/S mediante un bus de E/S local. En una realización, la lógica del concentrador de controlador de memoria 2316 está integrada dentro del procesador.
[0395] El dispositivo de memoria 2320 puede ser un dispositivo de memoria de acceso aleatorio dinámica (DRAM), un dispositivo de memoria de acceso aleatorio estática (SRAM), un dispositivo de memoria flash, un dispositivo de memoria de cambio de fase o algún otro dispositivo de memoria que tiene un rendimiento adecuado para servir como memoria de proceso. En una realización, el dispositivo de memoria 2320 puede operar como memoria de sistema para el sistema 2300, para almacenar datos 2322 e instrucciones 2321 para su uso cuando el uno o más procesadores 2302 ejecutan una aplicación o proceso. El concentrador del controlador de memoria 2316 también se acopla con un procesador gráfico externo opcional 2312, que puede comunicarse con el uno o más procesadores gráficos 2308 en los procesadores 2302 para realizar operaciones gráficas y multimedia.
[0396] En algunas realizaciones, el ICH 2330 posibilita que los periféricos se conecten al dispositivo de memoria 2320 y al procesador 2302 mediante un bus de E/S de alta velocidad. Los periféricos de E/S incluyen, pero sin limitación, un controlador de audio 2346, una interfaz de firmware 2328, un transceptor inalámbrico 2326 (por ejemplo, Wi-Fi, Bluetooth), un dispositivo de almacenamiento de datos 2324 (por ejemplo, unidad de disco duro, memoria flash, etc.), y un controlador de E/S heredado 2340 para acoplar dispositivos heredados (por ejemplo, dispositivos de sistema personal 2 (PS/2)) al sistema. Uno o más controladores de Bus Serial Universal (USB) 2342 conectan dispositivos de entrada, tales como combinaciones de teclado y ratón 2344. Un controlador de red 2334 también se puede acoplar con el ICH 2330. En algunas realizaciones, un controlador de red de alto rendimiento (no mostrado) se acopla al bus de procesador 2310. Se apreciará que el sistema 2300 mostrado es ilustrativo y no limitativo, ya que también se pueden utilizar otros tipos de sistemas de procesamiento de datos que estén configurados de manera diferente. Por ejemplo, el concentrador de controlador de E/S 2330 puede estar integrado dentro del uno o más procesadores 2302, o el concentrador de controlador de memoria 2316 y el concentrador de controlador de E/S 2330 se pueden integrar en un procesador gráfico externo discreto, tal como el procesador gráfico externo 2312.
[0397] LaFIG.24es un diagrama de bloques de una realización de un procesador 2400 que tiene uno o más núcleos de procesador 2402A-2402N, un controlador de memoria integrado 2414 y un procesador de gráficos integrado 2408. Aquellos elementos de laFIG.24que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura en el presente documento pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, pero sin limitación a esto. El procesador 2400 puede incluir núcleos adicionales, hasta el núcleo adicional 2402N incluido, representados por los recuadros de línea discontinua. Cada uno de los núcleos de procesador 2402A-2402N incluye una o más unidades de caché internas 2404A-2404N. En algunas realizaciones, cada núcleo de procesador también tiene acceso a una o más unidades almacenadas en caché compartidas 2406.
[0398] Las unidades de caché internas 2404A a 2404N y las unidades de caché compartidas 2406 representan una jerarquía de memoria caché dentro del procesador 2400. La jerarquía de memoria caché puede incluir al menos un nivel de caché de instrucciones y datos dentro de cada núcleo de procesador y uno o más niveles de caché de nivel medio compartida, tal como Nivel 2 (L2), Nivel 3 (L3), Nivel 4 (L4) u otros niveles de caché, donde el nivel más alto de caché antes de la memoria externa se clasifica como LLC. En algunas realizaciones, la lógica de coherencia de memoria caché mantiene la coherencia entre las diversas unidades de memoria caché 2406 y 2404A a 2404N.
[0399] En algunas realizaciones, el procesador 2400 también puede incluir un conjunto de una o más unidades de controlador de bus 2416 y un núcleo de agente de sistema 2410. La una o más unidades controladoras de bus 2416 gestionan un conjunto de buses periféricos, tales como uno o más buses de Interconexión de Componentes Periféricos (por ejemplo, PCI, PCI Express). El núcleo del agente del sistema 2410 proporciona funcionalidad de gestión para los distintos componentes del procesador. En algunas realizaciones, el núcleo de agente del sistema 2410 incluye uno o más controladores de memoria integrada 2414 para gestionar el acceso a varios dispositivos de memoria externa (no se muestran).
[0400] En algunas realizaciones, uno o más de los núcleos de procesador 2402A a 2402N incluyen el soporte de múltiples hilos simultáneos. En tal realización, el núcleo de agente de sistema 2410 incluye componentes para coordinar y operar los núcleos 2402A-2402N durante el procesamiento de múltiples hilos. El núcleo de agente de sistema 2410 puede incluir adicionalmente una unidad de control de potencia (PCU), que incluye una lógica y componentes para regular el estado de potencia de los núcleos de procesador 2402A-2402N y el procesador de gráficos 2408. En algunas realizaciones, el procesador 2400 incluye adicionalmente el procesador de gráficos 2408 para ejecutar operaciones de procesamiento de gráficos. En algunas realizaciones, el procesador de gráficos 2408 se acopla con el conjunto de unidades de caché compartida 2406 y el núcleo de agente de sistema 2410, incluyendo el uno o más controladores de memoria integrados 2414. En algunas realizaciones, un controlador de visualización 2411 está acoplado con el procesador de gráficos 2408 para controlar la salida de procesador de gráficos a una o más pantallas acopladas. En algunas realizaciones, el controlador de visualización 2411 puede ser un módulo separado acoplado con el procesador de gráficos mediante al menos una interconexión, o puede estar integrado dentro del procesador de gráficos 2408 o el núcleo de agente de sistema 2410.
[0401] En algunas realizaciones, se usa una unidad de interconexión basada en anillo 2412 para acoplar los componentes internos del procesador 2400. Sin embargo, puede usarse una unidad de interconexión alternativa, tal como una interconexión de punto a punto, una interconexión conmutada u otras técnicas, incluyendo técnicas bien conocidas en la técnica. En algunas realizaciones, el procesador de gráficos 2408 se acopla con la interconexión de anillo 2412 a través de un enlace de E/S 2413.
[0402] El enlace de E/S 2413 ilustrativo representa al menos una de múltiples variedades de interconexiones de E/S, incluida una interconexión de E/S en paquete que facilita la comunicación entre varios componentes del procesador y un módulo de memoria integrado de alto rendimiento 2418, tal como un módulo eDRAM. En algunas realizaciones, cada uno de los núcleos de procesador 2402A-2402N y el procesador de gráficos 2408 utilizan módulos de memoria integrada 2418 como una caché de último nivel compartida.
[0404] En algunas realizaciones, los núcleos de procesador 2402A-2402N son núcleos homogéneos que ejecutan la misma arquitectura de conjunto de instrucciones. En otra realización, los núcleos de procesador 2402A a 2402N son heterogéneos en términos de arquitectura de conjunto de instrucciones (ISA), donde uno o más de los núcleos de procesador 2402A a 2402N ejecuta un primer conjunto de instrucciones, mientras que al menos uno de los otros núcleos ejecuta un subconjunto del primer conjunto de instrucciones o un conjunto de instrucciones diferente. En una realización, los núcleos de procesador 2402A-2402N son heterogéneos en términos de microarquitectura, donde uno o más núcleos que tienen un consumo de potencia relativamente más alto se acoplan con uno o más núcleos de potencia que tienen un consumo de energía más bajo. Adicionalmente, el procesador 2400 se puede implementar en uno o más chips o como un circuito integrado de SoC que tiene los componentes ilustrados, además de otros componentes.
[0406] LaFIG.25es un diagrama de bloques de un procesador gráfico 2500, que puede ser una unidad de procesamiento de gráficos discreta, o puede ser un procesador gráfico integrado con una pluralidad de núcleos de procesamiento. En algunas realizaciones, el procesador de gráficos se comunica a través de una interfaz de E/S mapeada en memoria con registros en el procesador de gráficos y con comandos colocados en la memoria del procesador. En algunas realizaciones, el procesador de gráficos 2500 incluye una interfaz de memoria 2514 para acceder a la memoria. La interfaz de memoria 2514 puede ser una interfaz a la memoria local, a una o más caché internas, a una o más caché externas compartidas y/o a la memoria del sistema.
[0408] En algunas realizaciones, el procesador de gráficos 2500 también incluye un controlador de visualización 2502 para controlar los datos de salida de visualización a un dispositivo de visualización 2520. El controlador de visualización 2502 incluye hardware para uno o más planos de superposición para la visualización y composición de múltiples capas de elementos de interfaz de usuario o de vídeo. En algunas realizaciones, el procesador de gráficos 2500 incluye un motor de códec de vídeo 2506 para codificar, decodificar o transcodificar medios hacia, desde o entre uno o más formatos de codificación de medios, incluidos, entre otros, los formatos del Grupo de expertos en imágenes en movimiento (MPEG), tales como MPEG-2, los formatos de codificación de vídeo avanzada (AVC), tales como H.264/MPEG-4 AVC, así como los formatos 421M/VC-1 de la Sociedad de ingenieros de cine y televisión (SMPTE) y los formatos del Grupo conjunto de expertos en fotografía (JPEG), tales como JPEG y Motion JPEG (MJPEG).
[0410] En algunas realizaciones, el procesador de gráficos 2500 incluye un motor de transferencia de imágenes en bloque (BLIT) 2504 para realizar operaciones de rasterizador bidimensionales (2D), incluyendo, por ejemplo, transferencias de bloque de límite de bits. Sin embargo, en una realización, las operaciones de gráficos 2D se realizan usando uno o más componentes del motor de procesamiento de gráficos (GPE) 2510. En algunas realizaciones, el GPE 2510 es un motor de cálculo para realizar operaciones de gráficos, incluidas operaciones de gráficos tridimensionales (3D) y operaciones multimedia.
[0412] En algunas realizaciones, el GPE 310 incluye una canalización 3D 2512 para realizar operaciones en 3D, tales como representar imágenes y escenas tridimensionales usando funciones de procesamiento que actúan sobre formas de primitivas en 3D (por ejemplo, rectángulo, triángulo, etc.). La canalización 3D 2512 incluye elementos de función programable y fija que realizan diversas tareas dentro del elemento y/o generan hilos de ejecución en un subsistema 3D/de medios 2515. Si bien la canalización 3D 2512 se puede utilizar para realizar operaciones de medios, una realización de GPE 2510 también incluye una canalización de medios 2516 que se utiliza específicamente para realizar operaciones de medios, tales como postprocesamiento de vídeo y mejora de imágenes.
[0414] En algunas realizaciones, la canalización de medios 2516 incluye unidades de lógica programable o de función fija para realizar una o más operaciones de medios especializadas, tales como aceleración de decodificación de vídeo, desentrelazado de vídeo y aceleración de codificación de vídeo en lugar o en nombre del motor de códec de vídeo 2506. En algunas realizaciones, la canalización de medios 2516 incluye adicionalmente una unidad de generación de hilos para generar hilos para su ejecución en el subsistema 3D/de medios 2515. Los hilos generados realizan cálculos para las operaciones de medios en una o más unidades de ejecución de gráficos incluidas en el subsistema 3D/de medios 2515.
[0416] En algunas realizaciones, el subsistema 3D/de medios 2515 incluye una lógica para ejecutar hilos generados por la canalización 3D 2512 y la canalización de medios 2516. En una realización, las canalizaciones envían solicitudes de ejecución de hilos al subsistema de 3D/de medios 2515, que incluye una lógica de despacho de hilos para arbitrar y despachar las diversas solicitudes a recursos de ejecución de hilos disponibles. Los recursos de ejecución incluyen una serie de unidades de ejecución de gráficos para procesar los hilos 3D y de medios. En algunas realizaciones, el subsistema 3D/de medios 2515 incluye una o más caché internas para instrucciones de hilos y datos. En algunas realizaciones, el subsistema también incluye memoria compartida, que incluye registros y memoria direccionable, para compartir datos entre hilos y para almacenar datos de salida.
[0417] Ejemplo de motor de procesamiento de gráficos adicional
[0418] LaFIG. 26es un diagrama de bloques de un motor de procesamiento de gráficos 2610 de un procesador de gráficos de acuerdo con algunas realizaciones. En una realización, el motor de procesamiento de gráficos (GPE) 2610 es una versión del GPE 2510 que se muestra en laFIG. 25. Los elementos de laFIG. 26, que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura del presente documento, pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, aunque sin limitarse a ello. Por ejemplo, se ilustra la canalización de 3D 2512 y la canalización de medios 2516 de laFIG.25. La canalización de medios 2516 es opcional en algunas realizaciones del GPE 2610 y es posible que no esté incluida explícitamente dentro del GPE 2610. Por ejemplo y en al menos una realización, un procesador de medios y/o imágenes separado está acoplado al GPE 2610.
[0419] En algunas realizaciones, el GPE 2610 se acopla con o incluye un transmisor en continuo de comandos 2603, que proporciona un flujo de comandos a la canalización 3D 2512 y/o a las canalizaciones de medios 2516. En algunas realizaciones, el transmisor en continuo de comandos 2603 está acoplado a una memoria, que puede ser una memoria del sistema o una o más de memoria caché interna y memoria caché compartida. En algunas realizaciones, el transmisor en continuo de comandos 2603 recibe comandos de la memoria y envía los comandos a la canalización 3D 2512 y/o a la canalización de medios 2516. Los comandos son directivas extraídas de una memoria intermedia en anillo, que almacena comandos para la canalización 3D 2512 y la canalización de medios 2516. En una realización, la memoria intermedia de anillo puede incluir, además, memorias intermedias de comandos por lotes que almacenan lotes de múltiples comandos. Los comandos para la canalización 3D 2512 también pueden incluir referencias a datos almacenados en la memoria, tales como, entre otros, datos de vértices y geometría para la canalización 3D 2512 y/o datos de imágenes y objetos de memoria para la canalización de medios 2516. La canalización 3D 2512 y la canalización de medios 2516 procesan los comandos y datos realizando operaciones a través de la lógica dentro de las respectivas canalizaciones o despachando uno o más hilos de ejecución a una matriz de núcleos de gráficos 2614.
[0420] En varias realizaciones, la canalización 3D 2512 puede ejecutar uno o más programas de sombreado, tales como sombreadores de vértices, sombreadores de geometría, sombreadores de píxeles, sombreadores de fragmentos, sombreadores de computación u otros programas de sombreado, procesando las instrucciones y despachando hilos de ejecución a la matriz de núcleos gráficos 2614. La matriz de núcleos gráficos 2614 proporciona un bloque unificado de recursos de ejecución. La lógica de ejecución de múltiples aplicaciones (por ejemplo, unidades de ejecución) dentro de la matriz de núcleos gráficos 2614 incluye soporte para varios lenguajes de sombreador de API 3D y puede ejecutar múltiples hilos de ejecución simultáneos asociados con múltiples sombreadores.
[0421] En algunas realizaciones, la matriz de núcleos de gráficos 2614 también incluye lógica de ejecución para realizar funciones de medios, tales como procesamiento de vídeo y/o de imagen. En una realización, las unidades de ejecución incluyen, además, lógica de propósito general que es programable para realizar operaciones computacionales de uso general paralelas, además de operaciones de procesamiento de gráficos. La lógica de propósito general puede realizar operaciones de procesamiento paralelo o en conjunto con la lógica de propósito general dentro del núcleo o núcleos de procesador 2307 de laFIG. 23o el núcleo 2402A-2402N como en laFIG.
[0422] 24, o cualquier otro procesador descrito en el presente documento.
[0423] Los datos de salida generados por los hilos que se ejecutan en la matriz de núcleos de gráficos 2614 pueden generar datos en la memoria en una memoria intermedia de retorno unificada (URB) 2618. La URB 2618 puede almacenar datos para múltiples hilos. En algunas realizaciones, la URB 2618 se puede usar para enviar datos entre diferentes hilos que se ejecutan en la matriz de núcleos de gráficos 2614. En algunas realizaciones, la URB 2618 puede usarse adicionalmente para la sincronización entre hilos en la matriz de núcleos de gráficos y la lógica de función fija dentro de la lógica de función compartida 2620.
[0424] En algunas realizaciones, la matriz de núcleos de gráficos 2614 se puede escalar, de tal forma que la matriz incluye un número variable de núcleos de gráficos, cada uno de los cuales tiene un número variable de unidades de ejecución basándose en la potencia objetivo y el nivel de rendimiento del GPE 2610. En una realización, los recursos de ejecución se pueden escalar dinámicamente, de tal forma que los recursos de ejecución se pueden activar o desactivar según sea necesario.
[0425] La matriz de núcleos de gráficos 2614 se acopla con la lógica de funciones compartidas 2620 que incluye múltiples recursos que son compartidos entre los núcleos de gráficos en la matriz de núcleos de gráficos. Las funciones compartidas dentro de la lógica de funciones compartidas 2620 son unidades de lógica de hardware que proporcionan una funcionalidad complementaria especializada a la matriz de núcleos de gráficos 2614. En varias realizaciones, la lógica de función compartida 2620 incluye, entre otros, el muestreador 2621, el bloque de cálculo matemático 2622 y la lógica de comunicación entre hilos (ITC) 2623. Además, algunas realizaciones implementan una o más memorias caché 2625 dentro de la lógica de función compartida 2620. Se implementa una función compartida cuando la demanda de una función especializada dada es insuficiente para su inclusión dentro de la matriz de núcleos de gráficos 2614. En lugar de ello, se implementa una única instancia de esa función especializada como una entidad independiente en la lógica de función compartida 2620 y se comparte entre los recursos de ejecución dentro de la matriz de núcleos de gráficos 2614. El conjunto preciso de funciones que se comparten entre la matriz de núcleos gráficos 2614 y se incluyen dentro de la matriz de núcleos gráficos 2614 varía entre las realizaciones.
[0427] LaFIG.27es un diagrama de bloques de otra realización de un procesador gráfico 2700. Los elementos de laFIG.
[0428] 27, que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura del presente documento, pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, aunque sin limitarse a ello.
[0430] En algunas realizaciones, el procesador de gráficos 2700 incluye una interconexión de anillo 2702, un extremo frontal de canalización 2704, un motor de medios 2737 y núcleos de gráficos 2780A-2780N. En algunas realizaciones, la interconexión en anillo 2702 acopla el procesador de gráficos a otras unidades de procesamiento, que incluyen otros procesadores de gráficos o uno o más núcleos de procesadores de propósito general. En algunas realizaciones, el procesador de gráficos es uno de muchos procesadores integrados dentro de un sistema de procesamiento de múltiples núcleos.
[0432] En algunas realizaciones, el procesador de gráficos 2700 recibe lotes de comandos a través de la interconexión en anillo 2702. Los comandos entrantes son interpretados por un transmisor de comandos 2703 en el extremo frontal de canalización 2704. En algunas realizaciones, el procesador gráfico 2700 incluye una lógica de ejecución escalable para realizar procesamiento de geometría 3D y procesamiento de medios a través de los núcleos de gráficos 2780A-2780N. Para comandos de procesamiento de geometría 3D, el transmisor en continuo de comandos 2703 suministra comandos a la canalización de geometría 2736. Para al menos algunos comandos de procesamiento de medios, el transmisor en continuo de comandos 2703 suministra los comandos a un extremo frontal de vídeo 2734, que se acopla con un motor de medios 2737. En algunas realizaciones, el motor de medios 2737 incluye un motor de calidad de vídeo (VQE) 2730 para un procesamiento posterior de vídeo e imágenes y un motor de codificación/descodificación de múltiples formatos (MFX) 2733 para proporcionar codificación y descodificación de datos de medios acelerados por hardware. En algunas realizaciones, la canalización de geometría 2736 y el motor de medios 2737 generan cada uno hilos de ejecución para los recursos de ejecución de hilos proporcionados por al menos un núcleo de gráficos 2780A.
[0434] En algunas realizaciones, el procesador de gráficos 2700 incluye recursos de ejecución de hilos escalables que cuentan con núcleos modulares 2780A-2780N (denominados, en ocasiones, cortes de núcleo), teniendo cada uno múltiples subnúcleos 2750A-550N, 2760A-2760N (denominados, en ocasiones, subcortes de núcleo). En algunas realizaciones, el procesador de gráficos 2700 puede tener cualquier número de núcleos de gráficos 2780A a 2780N. En algunas realizaciones, el procesador de gráficos 2700 incluye un núcleo de gráficos 2780A que tiene al menos un primer subnúcleo 2750A y un segundo subnúcleo 2760A. En otras realizaciones, el procesador de gráficos es un procesador de baja potencia con un único subnúcleo (por ejemplo, 2750A). En algunas realizaciones, el procesador de gráficos 2700 incluye múltiples núcleos de gráficos 2780A-2780N, incluyendo cada uno un conjunto de primeros subnúcleos 2750A-2750N y un conjunto de segundos subnúcleos 2760A-2760N. Cada subnúcleo en el conjunto de primeros subnúcleos 2750A-2750N incluye al menos un primer conjunto de unidades de ejecución 2752A-2752N y muestreadores de medios/texturas 2754A-2754N. Cada subnúcleo en el conjunto de segundos subnúcleos 2760A-2760N incluye al menos un segundo conjunto de unidades de ejecución 2762A-2762N y muestreadores 2764A-2764N. En algunas realizaciones, cada subnúcleo 2750A-2750N, 2760A-2760N comparte un conjunto de recursos compartidos 2770A-2770N. En algunas realizaciones, los recursos compartidos incluyen memoria de caché compartida y lógica de operación de píxel. Pueden incluirse también otros recursos compartidos en las diversas realizaciones del procesador de gráficos.
[0436] Ejemplo de unidades de ejecución adicionales
[0438] LaFIG. 28ilustra lógica de ejecución de hilos 2800 que incluye una matriz de elementos de procesamiento empleados en algunas realizaciones de un GPE. Los elementos de laFIG.28, que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura del presente documento, pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, aunque sin limitarse a ello.
[0440] En algunas realizaciones, la lógica de ejecución de hilos 2800 incluye un procesador sombreador 2802, un distribuidor de hilos 2804, una memoria caché de instrucciones 2806, una matriz de unidades de ejecución escalables que incluye una pluralidad de unidades de ejecución 2808A-2808N, un muestreador 2810, una memoria caché de datos 2812 y un puerto de datos 2814. En una realización, la matriz de unidades de ejecución escalable puede escalar dinámicamente habilitando o deshabilitando una o más unidades de ejecución (por ejemplo, cualquiera de las unidades de ejecución 2808A, 2808B, 2808C, 2808D a 2808N-1 y 2808N) en función de las necesidades de cálculo de una carga de trabajo. En una realización, los componentes incluidos se interconectan por medio de una estructura de interconexión que se enlaza con cada uno de los componentes. En algunas realizaciones, la lógica de ejecución de hilos 2800 incluye una o más conexiones a la memoria, tales como la memoria del sistema o la memoria caché, a través de uno o más de memoria caché de instrucciones 2806, puerto de datos 2814, muestreador 2810 y unidades de ejecución 2808A-2808N. En algunas realizaciones, cada unidad de ejecución (por ejemplo, 2808A) es una unidad de cálculo de fin general programable autónoma que puede ejecutar múltiples hilos de hardware simultáneos mientras se procesan múltiples elementos de datos en paralelo para cada hilo. En diversas realizaciones, la matriz de unidades de ejecución 2808A-2808N es ajustable a escala para incluir cualquier número de unidades de ejecución individuales.
[0442] En algunas realizaciones, las unidades de ejecución 2808A-2808N se usan principalmente para ejecutar programas de sombreador. Un procesador de sombreado 2802 puede procesar los diversos programas de sombreado y despachar hilos de ejecución asociados con los programas de sombreado a través de un despachador de hilos 2804. En una realización, el despachador de hilos incluye lógica para arbitrar solicitudes de inicio de hilos desde las canalizaciones de gráficos y de medios e instanciar los hilos solicitados en una o más unidades de ejecución en las unidades de ejecución 2808A-2808N. Por ejemplo, la canalización de geometría (por ejemplo, 2736 de laFIG.27) puede distribuir los sombreadores de vértices, de teselación o de geometría a la lógica de ejecución de hilo 2800 (FIG. 28) para su procesamiento. En algunas realizaciones, el despachador de hilos 2804 puede procesar también hilos en tiempo de ejecución que generan solicitudes desde los programas sombreadores de ejecución.
[0444] En algunas realizaciones, las unidades de ejecución 2808A-2808N soportan un conjunto de instrucciones que incluye un soporte nativo para muchas instrucciones de sombreador de gráficos 3D convencionales, de modo que los programas sombreadores desde bibliotecas de gráficos (por ejemplo, Direct 3D y OpenGL) se ejecutan con una traducción mínima. Las unidades de ejecución soportan el procesamiento de vértices y geometría (por ejemplo, programas de vértices, programas de geometría, sombreadores de vértices), procesamiento de píxeles (por ejemplo, sombreadores de píxeles, sombreadores de fragmentos) y procesamiento de propósito general (por ejemplo, sombreadores de medios y de computación). Cada una de las unidades de ejecución 2808A-2808N es capaz de ejecutar múltiples instrucciones únicas y múltiples datos (SIMD) y la operación multihilo permite un entorno de ejecución eficiente frente a accesos a memoria de mayor latencia. Cada hilo de hardware dentro de cada unidad de ejecución tiene un archivo de registro de alto ancho de banda dedicado y un estado de hilo independiente asociado. La ejecución se realiza mediante múltiples emisiones por reloj hacia canalizaciones capaces de realizar operaciones con números enteros, de coma flotante de precisión simple y doble, capacidad de ramificación SIMD, operaciones lógicas, operaciones trascendentales y otras operaciones diversas. Mientras se esperan los datos de la memoria o una de las funciones compartidas, la lógica de dependencia dentro de las unidades de ejecución 2808A-2808N hace que un hilo en espera pase a inactividad hasta que se devuelvan los datos solicitados. Mientras el hilo en espera está inactivo, los recursos de hardware pueden dedicarse a procesar otros hilos. Por ejemplo, durante un retraso asociado con una operación de sombreado de vértices, una unidad de ejecución puede realizar operaciones para un sombreador de píxeles, sombreador de fragmentos, u otro tipo de programa de sombreado, incluyendo un sombreador de vértice diferente.
[0446] Cada unidad de ejecución en las unidades de ejecución 2808A-2808N opera sobre matrices de elementos de datos. El número de elementos de datos es el "tamaño de ejecución" o el número de canales para la instrucción. Un canal de ejecución es una unidad lógica de ejecución para el acceso a elementos de datos, el enmascaramiento y el control de flujo dentro de las instrucciones. El número de canales puede ser independiente del número de unidades aritméticológicas (ALU) o unidades de coma flotante (FPU) físicas de un procesador de gráficos particular. En algunas realizaciones, las unidades de ejecución 2808A-2808N soportan tipos de datos de números enteros y de coma flotante.
[0448] El conjunto de instrucciones de la unidad de ejecución incluye instrucciones SIMD. Los distintos elementos de datos se pueden almacenar como un tipo de datos empaquetado en un registro y la unidad de ejecución procesará los distintos elementos en función del tamaño de los datos de los elementos. Por ejemplo, cuando se opera en un vector de 256 bits de ancho, los 256 bits del vector se almacenan en un registro y la unidad de ejecución opera en el vector como cuatro elementos de datos empaquetados separados de 64 bits (elementos de datos de tamaño de palabra cuádruple (QW)), ocho elementos de datos empaquetados separados de 32 bits (elementos de datos de tamaño de palabra doble (DW)), dieciséis elementos de datos empaquetados separados de 16 bits (elementos de datos de tamaño de palabra (W)) o treinta y dos elementos de datos separados de 8 bits (elementos de datos de tamaño de byte (B)). Sin embargo, son posibles diferentes anchos de vector y tamaños de registro.
[0450] Una o más cachés de instrucciones internas (por ejemplo, 2806) están incluidas en la lógica de ejecución de hilos 2800 a las instrucciones de hilo de caché para las unidades de ejecución. En algunas realizaciones, una o más cachés de datos (por ejemplo, 2812) están incluidas en datos de hilo de caché durante la ejecución de hilo. En algunas realizaciones, se incluye un muestreador 2810 para proporcionar un muestreo de textura para operaciones 3D y muestreo de medios para operaciones de medios. En algunas realizaciones, el muestreador 2810 incluye funcionalidad de textura especializada o muestreo de medios para procesar los datos de textura o de medios durante el proceso de muestreo antes de proporcionar los datos muestreados a una unidad de ejecución.
[0452] Durante la ejecución, las canalizaciones de gráficos y de medios envían solicitudes de iniciación de hilo a la lógica de ejecución de hilos 2800 por medio de una lógica de generación y de despacho de hilos. Una vez que se ha procesado y rasterizado un grupo de objetos geométricos en datos de píxeles, se invoca la lógica del procesador de píxeles (por ejemplo, la lógica del sombreador de píxeles, la lógica del sombreador de fragmentos, etc.) dentro del procesador de sombreado 2802 para calcular más información de salida y hacer que los resultados se escriban en superficies de salida (por ejemplo, memorias intermedias de color, memorias intermedias de profundidad, memorias intermedias de patrones, etc.). En algunas realizaciones, un sombreador de píxeles o un sombreador de fragmentos calcula los valores de los diversos atributos de vértice que se van a interpolar a lo largo del objeto rasterizado. En algunas realizaciones, la lógica de procesador de píxeles dentro del procesador de sombreado 2802 ejecuta a continuación un píxel suministrado por la interfaz de programación de aplicación (API) o programa de sombreador de fragmentos. Para ejecutar el programa de sombreado, el procesador de sombreado 2802 despacha hilos a una unidad de ejecución (por ejemplo, 2808A) mediante el despachador de hilos 2804. En algunas realizaciones, el sombreador de píxeles 2802 utiliza lógica de muestreo de textura en el muestreador 2810 para acceder a datos de textura en mapas de textura almacenados en memoria. Operaciones aritméticas sobre los datos de textura y los datos de geometría de entrada calculan datos de color de píxel para cada fragmento geométrico, o descartan el procesamiento adicional de uno o más píxeles.
[0454] En algunas realizaciones, el puerto de datos 2814 proporciona un mecanismo de acceso de memoria para que la lógica de ejecución de hilos 2800 emita datos procesados a la memoria para su procesamiento en una canalización de salida de procesador de gráficos. En algunas realizaciones, el puerto de datos 2814 incluye o se acopla a la una o más memorias caché (por ejemplo, la memoria caché de datos 2812) para almacenar en caché datos para un acceso de memoria por medio del puerto de datos.
[0456] LaFIG. 29es un diagrama de bloques que ilustra unos formatos de instrucción de procesador gráfico 2900 de acuerdo con algunas realizaciones. En una o más realizaciones, las unidades de ejecución de procesador de gráficos soportan un conjunto de instrucciones que tiene instrucciones en múltiples formatos. Los recuadros con línea continua ilustran los componentes que se incluyen en general en una instrucción de unidad de ejecución, mientras que las líneas discontinuas incluyen componentes que son opcionales o que únicamente están incluidos en un subconjunto de las instrucciones. En algunas realizaciones, el formato de instrucciones 2900 descrito e ilustrado son macroinstrucciones, en el sentido de que las mismas son instrucciones suministradas a la unidad de ejecución, en contraposición a microoperaciones resultantes de la descodificación de instrucciones una vez que se ha procesado la instrucción.
[0458] En algunas realizaciones, las unidades de ejecución del procesador de gráficos soportan de forma nativa instrucciones en un formato de instrucción de 128 bits 2910. Un formato de instrucción compacta de 64 bits 2930 está disponible para algunas instrucciones basándose en la instrucción, las opciones de instrucción y el número de operandos seleccionados. El formato de instrucción de 128 bits nativo 2910 proporciona acceso a todas las opciones de instrucción, mientras que algunas opciones y operaciones están restringidas en el formato de 64 bits 2930. Las instrucciones nativas disponibles en el formato de 64 bits 2930 varían por realización. En algunas realizaciones, la instrucción está compactada en parte usando un conjunto de valores de índice en un campo de índice 2913. El hardware de la unidad de ejecución hace referencia a un conjunto de tablas de compactación basándose en los valores de índice y usa las salidas de la tabla de compactación para reconstruir una instrucción nativa en el formato de instrucción de 128 bits 2910.
[0460] Para cada formato, el código de operación de instrucción 2912 define la operación que la unidad de ejecución debe realizar. Las unidades de ejecución ejecutan cada instrucción en paralelo a lo largo de los múltiples elementos de datos de cada operando. Por ejemplo, en respuesta a una instrucción de adición, la unidad de ejecución realiza una operación de adición simultánea en cada canal de color que representa un elemento de textura o un elemento de imagen. Por defecto, la unidad de ejecución realiza cada instrucción a través de todos los canales de datos de los operandos. En algunas realizaciones, el campo de control de instrucción 2914 permite el control sobre ciertas opciones de ejecución, tal como la selección de canales (por ejemplo, predicación) y el orden de los canales de datos (por ejemplo, mezcla). Para las instrucciones en el formato de instrucción de 128 bits 2910, un campo de tamaño de ejecución 2916 limita el número de canales de datos que se ejecutarán en paralelo. En algunas realizaciones, el campo de tamaño de ejecución 2916 no está disponible para su uso en el formato de instrucción compacto de 64 bits 2930.
[0462] Algunas instrucciones de la unidad de ejecución tienen hasta tres operandos que incluyen dos operandos de origen, src0 2920, src1 2922, y un destino 2918. En algunas realizaciones, las unidades de ejecución soportan instrucciones de destino dual, donde está implicado uno de los destinos. Las instrucciones de manipulación de datos pueden tener un tercer operando fuente (por ejemplo, SRC22924), donde el código de operación de la instrucción 2912 determina el número de operandos fuente. El último operando de origen de una instrucción puede ser un valor inmediato (por ejemplo, codificado de manera fija) pasado con la instrucción.
[0464] En algunas realizaciones, el formato de instrucción de 128 bits 2910 incluye un campo de modo de acceso/dirección 2926 que especifica, por ejemplo, si se usa el modo de direccionamiento de registro directo o el modo de direccionamiento de registro indirecto. Cuando se usa el modo de direccionamiento de registro directo, la dirección de registro de uno o más operandos es proporcionada directamente por bits en la instrucción.
[0465] En algunas realizaciones, el formato de instrucción de 128 bits 2910 incluye un campo de modo de acceso/dirección 2926, que especifica un modo de dirección y/o un modo de acceso para la instrucción. En una realización, el modo de acceso se usa para definir una alineación de acceso a datos para la instrucción. Algunas realizaciones soportan modos de acceso que incluyen un modo de acceso alineado de 16 bytes y un modo de acceso alineado de 1 byte, donde la alineación de bytes del modo de acceso determina la alineación de acceso de los operandos de instrucción. Por ejemplo, cuando está en un primer modo, la instrucción puede usar direccionamiento alineado a bytes para los operandos de origen y destino y cuando está en un segundo modo, la instrucción puede usar direccionamiento alineado a 16 bytes para todos los operandos de origen y destino.
[0466] En una realización, la porción de modo de dirección del campo de modo de acceso/dirección 2926 determina si la instrucción ha de usar el direccionamiento directo o indirecto. Cuando se usa el modo de direccionamiento de registro directo, bits en la instrucción proporcionan directamente la dirección de registro de uno o más operandos. Cuando se utiliza el modo de direccionamiento de registro indirecto, la dirección de registro de uno o más operandos se puede calcular en función de un valor de registro de dirección y un campo inmediato de dirección en la instrucción.
[0467] En algunas realizaciones, las instrucciones se agrupan basándose en los campos de bits del código de operación 2912 para simplificar la descodificación de código de operación 2940. Para un código de operación de 8 bits, los bits 4, 5 y 6 permiten que la unidad de ejecución determine el tipo de código de operación. La agrupación precisa de códigos de operación que se muestra es simplemente un ejemplo. En algunas realizaciones, un grupo de código de operación de movimiento y de lógica 2942 incluye instrucciones de movimiento y de lógica de datos (por ejemplo, mover (mov), comparar (cmp)). En algunas realizaciones, el grupo de movimiento y lógica 2942 comparte los cinco bits más significativos (MSB), donde las instrucciones mover (mov) son en forma de 0000xxxxb y las instrucciones de lógica son en forma de 0001xxxxb. Un grupo de instrucciones de control de flujo 2944 (por ejemplo, llamada, salto (jmp)) incluye instrucciones en forma de 0010xxxxb (por ejemplo, 0x20). Un grupo de instrucciones misceláneas 2946 incluye una mezcla de instrucciones, incluyendo instrucciones de sincronización (por ejemplo, esperar, enviar) en la forma de 0011xxxxb (por ejemplo, 0x30). Un grupo paralelo de instrucciones matemáticas 2948 incluye instrucciones aritméticas por componentes (por ejemplo, sumar, multiplicar (mul)) en la forma de 0100xxxxb (por ejemplo, 0x40). El grupo paralelo de cálculo matemático 2948 lleva a cabo las operaciones aritméticas en paralelo a lo largo de canales de datos. El grupo matemático vectorial 2950 incluye instrucciones aritméticas (por ejemplo, dp4) en la forma de 0101xxxxb (por ejemplo, 0x50). El grupo matemático vectorial realiza operaciones aritméticas tales como cálculos de productos escalares en operandos vectoriales.
[0468] Ejemplo de canalización de gráficos adicional
[0469] LaFIG.30es un diagrama de bloques de otra realización de un procesador gráfico 3000. Los elementos de laFIG.
[0470] 30, que tienen los mismos números (o nombres) de referencia que los elementos de cualquier otra figura del presente documento, pueden operar o funcionar de cualquier manera similar a la descrita en cualquier otra parte en el presente documento, aunque sin limitarse a ello.
[0471] En algunas realizaciones, el procesador de gráficos 3000 incluye una canalización de gráficos 3020, una canalización de medios 3030, un motor de visualización 3040, una lógica de ejecución de hilos 3050 y una canalización de salida de representación 3070. En algunas realizaciones, el procesador de gráficos 3000 es un procesador de gráficos dentro de un sistema de procesamiento de múltiples núcleos que incluye uno o más núcleos de procesamiento de propósito general. El procesador de gráficos se controla por las escrituras de registro en uno o más registros de control (no mostrados) o mediante comandos emitidos al procesador de gráficos 3000 mediante una interconexión en anillo 3002. En algunas realizaciones, la interconexión de anillo 3002 acopla el procesador de gráficos 3000 a otros componentes de procesamiento, tales como otros procesadores de gráficos o procesadores de fin general. Los comandos de la interconexión de anillo 3002 son interpretados por un transmisor en continuo de comandos 3003, que suministra instrucciones a componentes individuales de la canalización de gráficos 3020 o canalización de medios 3030.
[0472] En algunas realizaciones, el transmisor de comandos 3003 dirige la operación de un extractor de vértices 3005 que lee los datos de vértices de memoria y ejecuta comandos de procesamiento de vértices proporcionados por el transmisor en continuo de comandos 3003. En algunas realizaciones, el extractor de vértices 3005 proporciona datos de vértices a un sombreador de vértices 3007, que realiza operaciones de transformación espacial de coordenadas y de iluminación en cada vértice. En algunas realizaciones, el extractor de vértices 3005 y el sombreador de vértices 3007 ejecutan instrucciones de procesamiento de vértices mediante el despacho de hilos de ejecución a las unidades de ejecución 3052A-3052B a través de un despachador de hilos 3031.
[0473] En algunas realizaciones, las unidades de ejecución 3052A-3052B son una matriz de procesadores de vectores que tienen un conjunto de instrucciones para realizar operaciones de gráficos y de medios. En algunas realizaciones, las unidades de ejecución 3052A-3052B tienen una memoria caché L1 adjunta 3051 que es específica para cada matriz o está compartida entre las matrices. La caché se puede configurar como una caché de datos, una caché de instrucciones o una única caché que se subdivide para contener datos e instrucciones en diferentes particiones.
[0475] En algunas realizaciones, la canalización de gráficos 3020 incluye componentes de teselación para realizar teselación acelerada por hardware de objetos 3D. En algunas realizaciones, un sombreador de casco programable 811 configura las operaciones de teselado. Un sombreador de dominio programable 817 proporciona una evaluación de extremo trasero de la salida de teselación. Un teselador 3013 opera en la dirección del sombreador de casco 3011 y contiene una lógica de propósito especial para generar un conjunto de objetos geométricos detallados basándose en un modelo geométrico aproximado que se proporciona como entrada a la canalización de gráficos 3020. En algunas realizaciones, si no se usa la teselación, pueden omitirse los componentes de teselación (por ejemplo, el sombreador de casco 3011, el teselador 3013 y el sombreador de dominio 3017).
[0476] En algunas realizaciones, los objetos geométricos completos pueden ser procesados por un sombreador de geometría 3019 a través de uno o más hilos despachados a las unidades de ejecución 3052A-3052B, o pueden proceder directamente al recortador 3029. En algunas realizaciones, el sombreador de geometría opera sobre objetos geométricos enteros, en lugar de vértices o parches de vértices como en etapas previas de la canalización de gráficos. Si la teselación está deshabilitada, el sombreador de geometría 3019 recibe una entrada desde el sombreador de vértices 3007. En algunas realizaciones, el sombreador de geometría 3019 es programable por un programa de sombreador de geometría para realizar teselación de geometría si las unidades de teselación están desactivadas.
[0478] Antes de la rasterización, un recortador 3029 procesa datos de vértices. El recortador 3029 puede ser un recortador de función fija o un recortador programable que tiene funciones de recorte y sombreador de geometría. En algunas realizaciones, un rasterizador y componente de prueba de profundidad 3073) en la canalización de salida de representación 3070 distribuye sombreadores de píxeles para convertir los objetos geométricos a sus representaciones por píxel. En algunas realizaciones, la lógica de sombreador de píxeles está incluida en la lógica de ejecución de hilos 3050. En algunas realizaciones, una aplicación puede omitir el componente de prueba de rasterizador y profundidad 3073 y acceder a los datos de vértices no rasterizados por medio de una unidad de salida de flujo 3023.
[0480] El procesador de gráficos 3000 tiene un bus de interconexión, un tejido de interconexión o algún otro mecanismo de interconexión que permite el paso de datos y mensajes entre los componentes principales del procesador. En algunas realizaciones, las unidades de ejecución 3052A-3052B y la caché o cachés asociadas 3051, el muestreador de texturas y medios 3054 y la caché de texturas/muestreadores 3058 se interconectan mediante un puerto de datos 3056 para realizar el acceso a la memoria y comunicarse con los componentes de la canalización de salida de renderizado del procesador. En algunas realizaciones, el muestreador 3054, las memorias caché 3051, 3058 y las unidades de ejecución 3052A-3052B tienen, cada uno, rutas de acceso de memoria separadas.
[0481] En algunas realizaciones, la canalización de salida del renderizador 3070 contiene un componente de prueba de rasterizador y profundidad 3073 que convierte objetos basados en vértices en una representación basada en píxeles asociada. En algunas realizaciones, la lógica del rasterizador incluye una unidad generadora de ventanas/enmascaradora para realizar una rasterización de triángulo y de línea de función fija. En algunas realizaciones también están disponibles una caché de representación 3078 y una caché de profundidad 3079 asociadas. Un componente de operaciones de píxel 3077 lleva a cabo operaciones basadas en píxeles sobre los datos, aunque, en algunas instancias, las operaciones de píxel asociadas con operaciones 2D (por ejemplo, transferencias de imagen de bloque de bits con mezcla) se llevan a cabo por el motor 2D 3041, o son sustituidas en el momento de la visualización por el controlador de visualización 3043 utilizando planos de visualización de superposición. En algunas realizaciones, está disponible una caché de L3 compartida 3075 para todos los componentes de gráficos, permitiendo la compartición de datos sin utilizar la memoria del sistema principal.
[0482] En algunas realizaciones, la canalización de medios de procesador de gráficos 3030 incluye un motor de medios 3037 y un extremo frontal de vídeo 3034. En algunas realizaciones, el extremo frontal de vídeo 3034 recibe comandos de canalización desde el transmisor en continuo de comandos 3003. En algunas realizaciones, la canalización de medios 3030 incluye un transmisor en continuo de comandos separado. En algunas realizaciones, el extremo frontal de vídeo 3034 procesa comandos de medios antes de enviar el comando al motor de medios 3037. En algunas realizaciones, el motor de medios 3037 incluye una funcionalidad de generación de hilos para generar hilos para su despacho a la lógica de ejecución de hilos 3050 a través del despachador de hilos 3031.
[0483] En algunas realizaciones, el procesador de gráficos 3000 incluye un motor de visualización 3040. En algunas realizaciones, el motor de visualización 3040 es externo al procesador 3000 y se acopla con el procesador de gráficos mediante el anillo de interconexión 3002, o algún otro bus o estructura de interconexión. En algunas realizaciones, el motor de visualización 3040 incluye un motor 2D 3041 y un controlador de visualización 3043. En algunas realizaciones, el motor de visualización 3040 contiene una lógica de propósito especial que puede operar independientemente de la canalización 3D. En algunas realizaciones, el controlador de visualización 3043 se acopla con un dispositivo de visualización (no mostrado), que puede ser un dispositivo de visualización integrado en sistema, como en un ordenador portátil, o un dispositivo de visualización externo adjunto mediante un conector de dispositivo de visualización.
[0485] En algunas realizaciones, la canalización de gráficos 3020 y la canalización de medios 3030 se pueden configurar para realizar operaciones basándose en múltiples interfaces de programación de gráficos y de medios y no son específicas de ninguna interfaz de programación de aplicaciones (API). En algunas realizaciones, el software de controlador para el procesador de gráficos traduce llamadas de API que son específicas de una biblioteca de medios o de gráficos particular a comandos que pueden ser procesados por el procesador de gráficos. En algunas realizaciones, se proporciona soporte para la Biblioteca de Gráficos Abierta (OpenGL), Lenguaje Informático Abierto (OpenCL) y/o API de gráficos y de cálculo Vulkan, todas ellas del grupo Khronos. En algunas realizaciones, también puede proporcionarse soporte para la biblioteca Direct3D de Microsoft Corporation. En algunas realizaciones, puede soportarse una combinación de estas bibliotecas. También se puede proporcionar soporte para la biblioteca Open Source Computer Vision (OpenCV). También se soportaría una API futura con una canalización 3D compatible si puede hacerse un mapeo desde la canalización de la API futura a la canalización del procesador de gráficos.
[0487] Programación de canalización de gráficos
[0489] LaFIG. 31Aes un diagrama de bloques que ilustra un formato de comandos de procesador de gráficos 3100 de acuerdo con algunas realizaciones. LaFIG. 31Bes un diagrama de bloques que ilustra una secuencia de comandos de procesador de gráficos 3110 de acuerdo con una realización. Los recuadros de líneas continuas de laFIG. 31Ailustran los componentes que se incluyen, en general, en un comando de gráficos, mientras que las líneas discontinuas incluyen componentes que son opcionales o que solo se incluyen en un subconjunto de los comandos de gráficos. El formato de comando de procesador gráfico 3100 a modo de ejemplo de laFIG. 31Aincluye campos de datos para identificar un cliente objetivo 3102 del comando, un código de operación del comando (código de operación) 3104 y los datos relevantes 3106 para el comando. En algunos comandos también se incluyen un subcódigo de operación 3105 y un tamaño de comando 3108.
[0491] En algunas realizaciones, el cliente 3102 especifica la unidad de cliente del dispositivo de gráficos que procesa los datos de comando. En algunas realizaciones, un analizador de comandos de procesador de gráficos examina el campo de cliente de cada comando para acondicionar el procesamiento adicional del comando y encaminar los datos de comando a la unidad de cliente apropiada. En algunas realizaciones, las unidades cliente del procesador gráfico incluyen una unidad de interfaz de memoria, una unidad de representación, una unidad 2D, una unidad 3D y una unidad multimedia. Cada unidad de cliente tiene una canalización de procesamiento correspondiente que procesa los comandos. Una vez que la unidad cliente recibe el comando, la unidad cliente lee el código de operación 3104 y, si está presente, el subcódigo de operación 3105 para determinar la operación a realizar. La unidad cliente ejecuta el comando utilizando la información del campo de datos 3106. Para algunos comandos se espera un tamaño de comando explícito 3108 para especificar el tamaño del comando. En algunas realizaciones, el analizador de comandos determina automáticamente el tamaño de al menos alguno de los comandos basándose en el código de operación del comando. En algunas realizaciones, se alinean los comandos mediante múltiplos de una palabra doble.
[0493] El diagrama de flujo en laFIG. 31Bmuestra una secuencia de comandos de procesador de gráficos 3110 de ejemplo. En algunas realizaciones, el software o firmware de un sistema de procesamiento de datos que presenta una realización de un procesador de gráficos utiliza una versión de la secuencia de comandos mostrada para establecer, ejecutar y terminar un conjunto de operaciones de gráficos. Se muestra y describe una secuencia de comandos solo a modo de ejemplo, ya que las realizaciones no están limitadas a estos comandos específicos o a esta secuencia de comandos. Además, pueden emitirse los comandos como un lote de comandos en una secuencia de comandos, de manera que el procesador de gráficos procesará la secuencia de comandos en concurrencia al menos parcialmente.
[0495] En algunas realizaciones, la secuencia de comandos de procesador de gráficos 3110 puede comenzar con un comando de vaciado de canalización 3112 para hacer que alguna canalización de gráficos activa complete los comandos actualmente pendientes para la canalización. En algunas realizaciones, la canalización de 3D 3122 y la canalización de medios 3124 no operan simultáneamente. Se realiza el vaciado de la canalización para hacer que la canalización de gráficos activa complete cualquier comando pendiente. En respuesta a un vaciado de la canalización, el analizador de comandos para el procesador de gráficos pausará el procesamiento de comandos hasta que los motores de dibujo activos completen las operaciones pendientes y se invaliden las memorias caché de lectura relevantes. Opcionalmente, cualquier dato en la memoria caché del representador que se marque como 'sucio' se puede vaciar a la memoria. En algunas realizaciones, el comando de vaciado de canalización 3112 se puede usar para la sincronización de la canalización o antes de hacer que el procesador de gráficos pase un estado de baja potencia.
[0497] En algunas realizaciones, se usa un comando de selección de canalización 3113 cuando una secuencia de comandos requiere que el procesador de gráficos conmute explícitamente entre canalizaciones. En algunas realizaciones, se requiere únicamente un comando de selección de canalización 3113 una vez dentro de un contexto de ejecución antes de emitir comandos de canalización a menos que el contexto sea emitir comandos para ambas canalizaciones. En algunas realizaciones, se requiere un comando de vaciado de canalización 3112 inmediatamente antes de una conmutación de canalización mediante el comando de selección de canalización 3113.
[0498] En algunas realizaciones, un comando de control de canalización 3114 configura una canalización de gráficos para la operación y se usa para programar la canalización 3D 3122 y la canalización de medios 3124. En algunas realizaciones, el comando de control de canalización 3114 configura el estado de canalización para la canalización activa. En una realización, se usa el comando de control de canalización 3114 para sincronización de canalización y para limpiar datos de una o más memorias de caché dentro de la canalización activa antes de procesar un lote de comandos.
[0499] En algunas realizaciones, los comandos de estado de memoria intermedia de retorno 3116 se usan para configurar un conjunto de memorias intermedias de retorno para que las respectivas canalizaciones escriban datos. Algunas operaciones de canalización requieren la asignación, selección o configuración de una o varias memorias intermedias de retorno en las que las operaciones escriben datos intermedios durante el procesamiento. En algunas realizaciones, el procesador de gráficos también usa una o más memorias intermedias de retorno para almacenar datos de salida y realizar comunicación de hilos cruzada. En algunas realizaciones, el estado de memoria intermedia de retorno 3116 incluye seleccionar el tamaño y número de memorias intermedias de retorno que usar para un conjunto de operaciones de canalización.
[0500] Los comandos restantes en la secuencia de comandos difieren en función de la canalización activa para las operaciones. Basándose en una determinación de canalización 3120, la secuencia de comandos se adapta a la canalización 3D 3122 comenzando con el estado de canalización 3D 3130 o la canalización de medios 3124 comenzando en el estado de canalización de medios 3140.
[0501] Los comandos para configurar el estado de la canalización 3D 3130 incluyen comandos de ajuste del estado 3D para el estado de la memoria intermedia de vértices, el estado del elemento de vértice, el estado de color constante, el estado de la memoria intermedia de profundidad y otras variables de estado que se han de configurar antes de que se procesen los comandos de primitivas 3D. Los valores de estos comandos se determinan al menos en parte basándose en la API 3D particular en uso. En algunas realizaciones, los comandos de estado de canalización 3D 3130 también son capaces de inhabilitar u omitir de manera selectiva determinados elementos de canalización si esos elementos no van a usarse.
[0502] En algunas realizaciones, se usa el comando de primitiva 3D 3132 para enviar primitivas 3D para su procesamiento por la canalización 3D. Los comandos y parámetros asociados que se pasan al procesador de gráficos mediante el comando de primitiva 3D 3132 se reenvían a la función de extracción de vértices en la canalización de gráficos. La función de extracción de vértices utiliza los datos del comando de primitiva 3D 3132 para generar estructuras de datos de vértice. Las estructuras de datos de vértice se almacenan en una o más memorias intermedias de retorno. En algunas realizaciones, se usa el comando de primitiva 3D 3132 para realizar operaciones de vértice en primitivas 3D mediante sombreadores de vértice. Para procesar sombreadores de vértices, la canalización 3D 3122 despacha hilos de ejecución de sombreador a unidades de ejecución de procesador de gráficos.
[0503] En algunas realizaciones, se activa la canalización 3D 3122 mediante un comando o evento de ejecución 3134. En algunas realizaciones, una escritura de registro activa la ejecución de comando. En algunas realizaciones, se activa la ejecución mediante un comando 'ir' o 'disparar' en la secuencia de comandos. En una realización, la ejecución de comando se activa usando un comando de sincronización de canalización para vaciar la secuencia de comandos a través de la canalización de gráficos. La canalización 3D realizará un procesamiento de geometría para las primitivas 3D. Una vez que se completan las operaciones, los objetos geométricos resultantes se rasterizan y el motor de píxeles colorea los píxeles resultantes. También se pueden incluir comandos adicionales para controlar el sombreado de píxeles y las operaciones de extremo posterior de píxeles para esas operaciones. En algunas realizaciones, la secuencia de comandos de procesador gráfico 3110 sigue la ruta de canalización de medios 3124 al realizar operaciones de medios. En general, el uso y manera específicos de la programación para la canalización de medios 3124 depende de las operaciones de medios o de cálculo que van a realizarse. Las operaciones de descodificación de medios específicas se pueden descargar a la canalización de medios durante la descodificación de medios. En algunas realizaciones, la canalización de medios también se puede omitir y la descodificación de medios se puede realizar en su totalidad o en parte utilizando recursos proporcionados por uno o más núcleos de procesamiento de propósito general. En una realización, la canalización de medios también incluye elementos para las operaciones de la unidad de procesador de gráficos de propósito general (GPGPU), donde se usa el procesador de gráficos para realizar operaciones vectoriales SIMD usando programas de sombreador computacionales que no están relacionados explícitamente con la representación de primitivas de gráficos.
[0504] En algunas realizaciones, la canalización de medios 3124 se configura de una manera similar a la de la canalización de 3D 3122. Un conjunto de comandos para configurar el estado de canalización de medios 3140 se despacha o coloca en una cola de comandos antes de los comandos de objeto de medios 3142. En algunas realizaciones, los comandos para el estado de canalización de medios 3140 incluyen datos para configurar los elementos de canalización de medios que se usarán para procesar los objetos de medios. Esto incluye datos para configurar la lógica de codificación y descodificación de vídeo dentro de la canalización de medios, tales como el formato de codificación o descodificación. En algunas realizaciones, los comandos para el estado de canalización de medios 3140 también soportan el uso de uno o más punteros a elementos de estado "indirecto" que contienen un lote de ajustes de estado.
[0505] En algunas realizaciones, los comandos de objetos de medios 3142 suministran punteros a objetos de medios para su procesamiento por la canalización de medios. Los objetos de medios incluyen memorias intermedias que contienen datos de vídeo que van a procesarse. En algunas realizaciones, todos los estados de canalización de medios deben ser válidos antes de emitir un comando de objeto de medios 3142. Una vez que se ha configurado el estado de la canalización y los comandos de objeto de medios 3142 se han puesto en cola, se activa la canalización de medios 3124 por medio de un comando de ejecución 3144 o un evento de ejecución equivalente (por ejemplo, una escritura de registro). La salida de la canalización de medios 3124 puede ser procesada posteriormente por operaciones proporcionadas por la canalización 3D 3122 o la canalización de medios 3124. En algunas realizaciones, las operaciones de GPGPU se configuran y ejecutan de una manera similar a las operaciones de medios.
[0506] Arquitectura de software de gráficos
[0507] LaFIG.32ilustra un ejemplo de arquitectura de software de gráficos para un sistema de procesamiento de datos 3200 de acuerdo con algunas realizaciones. En algunas realizaciones, la arquitectura de software incluye una aplicación de gráficos 3D 3210, un sistema operativo 3220 y al menos un procesador 3230. En algunas realizaciones, el procesador 3230 incluye un procesador de gráficos 3232 y uno o más núcleo o núcleos de procesador de propósito general 3234. Cada uno de la aplicación de gráficos 3210 y el sistema operativo 3220 se ejecutan en la memoria del sistema 3250 del sistema de procesamiento de datos.
[0508] En algunas realizaciones, la aplicación de gráficos 3D 3210 contiene uno o más programas de sombreador que incluyen instrucciones de sombreador 3212. Las instrucciones de lenguaje de sombreador pueden estar en un lenguaje de sombreador de alto nivel, tal como el Lenguaje de Sombreador de Alto Nivel (HLSL) o el Lenguaje de Sombreador OpenGL (GLSL). La aplicación también incluye las instrucciones ejecutables 3214 en un lenguaje máquina adecuado para su ejecución por el núcleo de procesador de propósito general 3234. La aplicación también incluye objetos de gráficos 3216 definidos por datos de vértice.
[0509] En algunas realizaciones, el sistema operativo 3220 es un sistema operativo Microsoft<®>Windows<®>de Microsoft Corporation, un sistema operativo similar a UNIX propietario o un sistema operativo similar a UNIX de código abierto que usa una variante del núcleo Linux. El sistema operativo 3220 puede soportar una API de gráficos 3222 tal como por ejemplo la API de Direct3D, la API de OpenGL o la API Vulkan. Cuando se utiliza la API Direct3D, el sistema operativo 3220 utiliza un compilador de sombreador de interfaz 3224 para compilar cualquier instrucción de sombreador 3212 en HLSL en un lenguaje de sombreador de nivel inferior. La compilación puede ser una compilación justo a tiempo (JIT) o la aplicación puede llevar a cabo una compilación previa de sombreador. En algunas realizaciones, los sombreadores de alto nivel se compilan en sombreadores de bajo nivel durante la compilación de la aplicación de gráficos 3D 3210. En algunas realizaciones, las instrucciones de sombreador 3212 se proporcionan en una forma intermedia, tal como una versión de la representación intermedia portátil convencional (SPIR) usada por la API de Vulkan.
[0510] En algunas realizaciones, el controlador de gráficos de modo de usuario 3226 contiene un compilador de sombreador de extremo trasero 3227 para convertir las instrucciones de sombreador 3212 en una representación específica de hardware. Cuando la API OpenGL está en uso, las instrucciones de sombreador 3212 en el lenguaje de alto nivel GLSL se pasan al controlador de gráficos de modo de usuario 3226 para su compilación. En algunas realizaciones, el controlador de gráficos de modo de usuario 3226 usa las funciones de modo de núcleo de sistema operativo 3228 para comunicarse con un controlador de gráficos de modo de núcleo 3229. En algunas realizaciones, el controlador de gráficos de modo de núcleo 3229 se comunica con el procesador de gráficos 3232 para despachar comandos e instrucciones.
[0511] Implementaciones de núcleo de PI
[0512] Uno o más aspectos de al menos una realización pueden implementarse por código representativo almacenado en un medio legible por máquina que representa y/o define lógica dentro de un circuito integrado tal como un procesador. Por ejemplo, el medio legible por máquina puede incluir instrucciones que representan diversa lógica dentro del procesador. Cuando las lee una máquina, las instrucciones pueden hacer que la máquina fabrique la lógica para realizar las técnicas descritas en el presente documento. Estas representaciones, conocidas como "núcleos PI", son unidades de lógica reutilizables para un circuito integrado que pueden almacenarse en un medio tangible y legible por máquina como un modelo de hardware que describe la estructura del circuito integrado. El modelo de hardware puede suministrarse a diversos clientes o instalaciones de fabricación, que cargan el modelo de hardware en máquinas de fabricación que fabrican el circuito integrado. El circuito integrado puede fabricarse de manera que el circuito realiza operaciones descritas en asociación con cualquiera de las realizaciones descritas en el presente documento.
[0514] LaFIG.33es un diagrama de bloques que ilustra un sistema de desarrollo de núcleo PI 3300 que se puede usar para fabricar un circuito integrado para realizar las operaciones de acuerdo con una realización. El sistema de desarrollo de núcleos PI 3300 puede utilizarse para generar diseños modulares y reutilizables que pueden incorporarse en un diseño más grande o utilizarse para construir un circuito integrado completo (por ejemplo, un circuito integrado SOC). Una instalación de diseño 3330 puede generar una simulación de software 3310 de un diseño de núcleo IP en un lenguaje de programación de alto nivel (por ejemplo, C/C++). La simulación de software 3310 se puede usar para diseñar, probar y verificar el comportamiento del núcleo IP usando un modelo de simulación 3312. El modelo de simulación 3312 puede incluir simulaciones funcionales, de comportamiento y/o de temporización. Luego se puede crear o sintetizar un diseño de nivel de transferencia de registro (RTL) 3315 a partir del modelo de simulación 3312. El diseño RTL 3315 es una abstracción del comportamiento del circuito integrado que modela el flujo de señales digitales entre registros de hardware, incluyendo la lógica asociada llevada a cabo utilizando las señales digitales modeladas. Además de un diseño RTL 3315, también se pueden crear, diseñar o sintetizar diseños de nivel inferior a nivel lógico o nivel de transistor. Por lo tanto, los detalles particulares del diseño inicial y la simulación pueden variar.
[0516] El diseño RTL 3315 o equivalente puede ser sintetizado adicionalmente por la instalación de diseño en un modelo de hardware 3320, que puede estar en un lenguaje de descripción de hardware (HDL) o alguna otra representación de datos de diseño físico. El HDL puede ser simulado o probado adicionalmente para verificar el diseño del núcleo PI. El diseño de núcleo PI se puede almacenar para su entrega a una instalación de fabricación de 3<os>3365 usando la memoria no volátil 3340 (por ejemplo, disco duro, memoria flash o cualquier medio de almacenamiento no volátil). Como alternativa, el diseño de núcleo PI se puede transmitir (por ejemplo, a través de Internet) a través de una conexión por cable 3350 o una conexión inalámbrica 3360. La instalación de fabricación 3365 puede entonces fabricar un circuito integrado que se basa al menos en parte en el diseño del núcleo PI. El circuito integrado fabricado puede estar configurado para realizar operaciones de acuerdo con al menos una realización descrita en el presente documento.
[0518] Circuito integrado de sistema en un chip ilustrativo
[0520] LasFIGS. 34-36ilustran circuitos integrados ilustrativos y procesadores de gráficos asociados que pueden fabricarse usando uno o más núcleos de IP, de acuerdo con diversas realizaciones descritas en el presente documento. Además de lo ilustrado, se pueden incluir otros circuitos y lógica, incluidos procesadores/núcleos gráficos adicionales, controladores de interfaz periférica o núcleos de procesador de propósito general.
[0522] LaFIG.34es un diagrama de bloques que ilustra un ejemplo de circuito integrado de sistema en un chip 3400 que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El circuito integrado 3400 ilustrativo incluye uno o más procesadores de aplicación 3405 (por ejemplo, CPU), al menos un procesador de gráficos 3410 y puede incluir adicionalmente un procesador de imágenes 3415 y/o un procesador de vídeo 3420, cualquiera de los cuales puede ser un núcleo IP modular de la misma o de múltiples instalaciones de diseño diferentes. El circuito integrado 3400 incluye una lógica de bus o de periféricos que incluye un controlador de USB 3425, un controlador de UART 3430, un controlador de SPI/SDIO 3435 y un controlador de I<2>S/I<2>C 3440. Además, el circuito integrado puede incluir un dispositivo de visualización 3445 acoplado a uno o más de un controlador de interfaz multimedia de alta definición (HDMI) 3450 y una interfaz de visualización de interfaz de procesador de industria móvil (MIPI) 3455. El almacenamiento se puede proporcionar por un subsistema de memoria flash 3460 que incluye la memoria flash y un controlador de memoria flash. La interfaz de memoria se puede proporcionar por medio de un controlador de memoria 3465 para acceso a dispositivos de memoria SDRAM o SRAM. Algunos circuitos integrados incluyen adicionalmente un motor de seguridad integrado 3470.
[0524] LaFIG. 35es un diagrama de bloques que ilustra un ejemplo de procesador gráfico 3510 de un circuito integrado de sistema en un chip que se puede fabricar usando uno o más núcleos IP, de acuerdo con una realización. El procesador de gráficos 3510 puede ser una variante del procesador de gráficos 3410 de laFIG.34.El procesador de gráficos 3510 incluye un procesador de vértices 3505 y uno o más procesadores de fragmentos 3515A a 3515N (por ejemplo, 3515A, 3515B, 3515C, 3515D, hasta 3515N-1 y 3515N). El procesador de gráficos 3510 puede ejecutar diferentes programas de sombreador a través de una lógica separada, de modo que el procesador de vértices 3505 está optimizado para ejecutar operaciones para programas de sombreador de vértices, mientras que uno o más procesadores de fragmentos 3515A-3515N ejecutan operaciones de sombreado de fragmentos (por ejemplo, píxeles) para programas de sombreador de fragmentos o píxeles. El procesador de vértices 3505 realiza la etapa de procesamiento de vértices de la canalización de gráficos 3D y genera primitivas y datos de vértices. El procesador o procesadores de fragmentos 3515A-3515N usan los datos de primitivas y de vértices generados por el procesador de vértices 3505 para producir una memoria intermedia de fotogramas que se visualiza en un dispositivo de visualización. En una realización, el procesador o procesadores de fragmentos 3515A-3515N están optimizados para ejecutar programas de sombreador de fragmentos según se proporciona en la API de OpenGL, que pueden usarse para realizar operaciones similares como un programa de sombreador de píxeles como se proporciona en la API de Direct 3D.
[0526] El procesador de gráficos 3510 incluye adicionalmente una o más unidades de gestión de memoria (MMU) 3520A-3520B, caché(s) 3525A-3525B e interconexiones de circuito) 3530A-3530B. La una o más MMU 3520A-3520B proporcionan un mapeo de direcciones virtuales a físicas para el procesador de gráficos 3510, incluyendo el procesador de vértices 3505 y/o los procesadores de fragmentos 3515A-3515N, que pueden hacer referencia a datos de vértices o de imagen/textura almacenados en memoria, además de los datos de vértices o de imagen/textura almacenados en la una o más cachés 3525A-3525B. En una realización, la una o más MMU 3520A-3520B pueden sincronizarse con otras MMU dentro del sistema, incluyendo una o más MMU asociadas con el uno o más procesadores de aplicaciones 3405, procesadores de imágenes 3415 y/o procesador de vídeo 3420 de laFIG. 34, de modo que cada procesador 3405-3420 pueda participar en un sistema de memoria virtual compartida o unificada. La una o más interconexiones de circuito 3530A-3530B habilitan la interacción del procesador de gráficos 3510 con otros núcleos de IP dentro del SoC, bien mediante un bus interno del SoC o bien mediante una conexión directa, de acuerdo con unas realizaciones.
[0528] LaFIG.36es un diagrama de bloques que ilustra un procesador gráfico 3610 a modo de ejemplo adicional de un circuito integrado de sistema en un chip que puede fabricarse usando uno o más núcleos de IP, de acuerdo con una realización. El procesador gráfico 3610 puede ser una variante del procesador gráfico 3410 de la FIG. 34. El procesador de gráficos 3610 incluye la una o más MMU 3520A-3520B, las cachés 3525A-3525B y las interconexiones de circuito 3530A-3530B del circuito integrado 3500 de la FIG.35.
[0530] El procesador de gráficos 3610 incluye uno o más núcleos de sombreador 3615A-3615N (por ejemplo, 3615A, 3615B, 3615C, 3615D, 3615E, 3615F a 3615N-1 y 3615N), lo que prevé una arquitectura de núcleo de sombreador unificada en la que un único núcleo o tipo o núcleo puede ejecutar todos los tipos de código sombreador programable, que incluyen código de programa sombreador para implementar sombreadores de vértices, sombreadores de fragmentos y/o sombreadores de cálculo. El número exacto de núcleos de sombreador presentes puede variar entre realizaciones e implementaciones. Además, el procesador de gráficos 3610 incluye un administrador de tareas entre núcleos 3605, que actúa como un despachador de hilos para despachar hilos de ejecución a uno o más núcleos de sombreador 3615A-3615N y una unidad de teselado 3618 para acelerar las operaciones de teselado para el renderizado basado en teselas, en la que las operaciones de renderizado para una escena se subdividen en el espacio de la imagen, por ejemplo para explotar la coherencia espacial local dentro de una escena o para optimizar el uso de memorias caché internas.
[0532] Las siguientes cláusulas y/o ejemplos se refieren a realizaciones específicas o a ejemplos de las mismas. Los detalles específicos de los ejemplos se pueden usar en cualquier parte de una o más realizaciones. Las diversas características de las diferentes realizaciones o ejemplos se pueden combinar de diversas formas, incluyéndose algunas características y excluyéndose otras para adaptarse a una variedad de aplicaciones diferentes. Los ejemplos pueden incluir materia objeto tal como un método, medios para realizar actos del método, al menos un medio legible por máquina que incluye instrucciones que, cuando son realizadas por una máquina, hacen que la máquina realice actos del método, o de un aparato o sistema de acuerdo con las realizaciones y los ejemplos descritos en el presente documento. Diversos componentes pueden ser un medio para realizar las operaciones o funciones descritas.
[0534] Las realizaciones descritas en el presente documento se refieren a configuraciones específicas de hardware, tales como circuitos integrados específicos de la aplicación (ASIC), configuradas para realizar ciertas operaciones o que tienen una funcionalidad predeterminada. Tales dispositivos electrónicos habitualmente incluyen un conjunto de uno o más procesadores acoplados a uno o más otros componentes, tales como uno o más dispositivos de almacenamiento (medios de almacenamiento no transitorios, legibles por máquina), dispositivos de entrada/salida de usuario (por ejemplo, un teclado, una pantalla táctil y/o una pantalla), y conexiones de red. El acoplamiento del conjunto de procesadores y otros componentes habitualmente se produce a través de uno o más buses y puentes (también denominados controladores de bus). El dispositivo de almacenamiento y las señales que portan el tráfico de red representan, respectivamente, uno o más medios de almacenamiento legibles por máquina y medios de comunicación legibles por máquina. Por lo tanto, los dispositivos de almacenamiento de un dispositivo electrónico dado habitualmente almacenan código y/o datos para su ejecución en el conjunto de uno o más procesadores de ese dispositivo electrónico.
[0536] Por supuesto, una o más partes de una realización pueden implementarse usando diferentes combinaciones de software, firmware y/o hardware. A través de toda esta descripción detallada, para los fines de explicación, se exponen numerosos detalles específicos para proporcionar un entendimiento minucioso de la presente invención. Sin embargo, será evidente para un experto en la materia que las realizaciones se pueden poner en práctica sin algunos de estos detalles específicos. En ciertas instancias, no se describieron estructuras y funciones bien conocidas con todo lujo de detalles para evitar complicar la materia objeto inventiva de las realizaciones. En consecuencia, el alcance de la invención debería evaluarse en términos de las reivindicaciones que se aportan a continuación.

Claims (15)

1. REIVINDICACIONES
1. Un acelerador de módulos de múltiples chips utilizable para ejecutar operaciones de procesamiento de datos de tensor, comprendiendo el acelerador de módulos de múltiples chips:
un módulo de múltiples chips, MCM, que comprende:
una pila de memoria (105, 708) que incluye múltiples matrices de memoria (714A, 714B); y
circuitos de procesador paralelo (113) acoplada comunicativamente a la pila de memoria (105, 708), comprendiendo los circuitos de procesador paralelo (113) núcleos multiprocesadores (112, 200, 706A-706H) configurados para ejecutar multiplicación de matriz y operaciones de acumulación;
en el que:
las operaciones de multiplicación y acumulación de matriz comprenden operaciones de coma flotante; caracterizado por que
las operaciones de coma flotante pueden configurarse de modo que comprendan operaciones de multiplicación de matriz bidimensional y acumulación que implican entradas que tienen diferentes precisiones de coma flotante; las operaciones de coma flotante comprenden una primera operación con una primera precisión y una segunda operación con una segunda precisión; y
la primera operación comprende una multiplicación que tiene al menos una entrada de coma flotante de 16 bits y la segunda operación comprende un acumulado que tiene una entrada de coma flotante de 32 bits.
2. El acelerador de módulos de múltiples chips de la reivindicación 1, en el que la pila de memoria (105, 708) comprende una memoria de alto ancho de banda.
3. El acelerador de módulos de múltiples chips de la reivindicación 1 o 2, en el que la pila de memoria (105, 708) está comprendida en el mismo paquete físico que los circuitos de procesador paralelos (113).
4. El acelerador de módulos de múltiples chips de una cualquiera de las reivindicaciones 1 a 3, en el que la primera operación es a una precisión de 16 bits, y la segunda operación es a una precisión de 32 bits.
5. El acelerador de módulos de múltiples chips de una cualquiera de las reivindicaciones 1 a 4, en el que la primera operación implica dos o más entradas de coma flotante de 16 bits.
6. El acelerador de módulos de múltiples chips de una cualquiera de las reivindicaciones 1 a 5, en el que: el acelerador de módulos de múltiples chips debe estar acoplado comunicativamente a al menos una agrupación de aceleradores; y
la agrupación de aceleradores comprende procesadores paralelos idénticos acoplados comunicativamente entre sí.
7. El acelerador de módulos de múltiples chips de una cualquiera de las reivindicaciones 1 a 6, en el que: los núcleos multiprocesadores (112, 200, 706A-706H) deben utilizar un espacio de memoria unificado asociado con la pila de memoria (105, 708).
8. Una agrupación de aceleradores que comprende:
procesadores paralelos idénticos acoplados comunicativamente entre sí; y
el acelerador de módulo de múltiples chips, MCM, de una cualquiera de las reivindicaciones 1 a 7, que está acoplado comunicativamente a los procesadores paralelos idénticos.
9. Un método implementado usando un acelerador de módulos de múltiples chips, comprendiendo el acelerador de módulos de múltiples chips una pila de memoria (105, 708) y unos circuitos de procesador paralelos (113), estando los circuitos de procesador paralelos (113) acoplados comunicativamente a la pila de memoria (105, 708), incluyendo la pila de memoria (105, 708) múltiples matrices de memoria, comprendiendo los circuitos de procesador paralelos (113) núcleos multiprocesadores (112, 200, 706A-706H), comprendiendo el método: ejecutar, mediante los núcleos de multiprocesador (112, 200, 706A-706H), operaciones de multiplicación de matrices y acumulación;
en el que:
las operaciones de multiplicación y acumulación de matrices comprenden operaciones de coma flotante; las operaciones de coma flotante pueden configurarse de modo que comprendan operaciones de multiplicación de matriz bidimensional y acumulación que implican entradas que tienen diferentes precisiones de coma flotante; las operaciones de coma flotante comprenden una primera operación con una primera precisión y una segunda operación con una segunda precisión; y
la primera operación comprende una multiplicación que tiene al menos una entrada de coma flotante de 16 bits y la segunda operación comprende un acumulado que tiene una entrada de coma flotante de 32 bits.
10. El método de la reivindicación 9, en el que la pila de memoria (105, 708) comprende una memoria de alto ancho de banda, o en el que la pila de memoria (105, 708) está comprendida en el mismo paquete físico que los circuitos de procesador paralelos (113).
11. El método de la reivindicación 9 o 10, en el que la primera operación es a una precisión de 16 bits, y la segunda operación es a una precisión de 32 bits.
12. El método de una cualquiera de las reivindicaciones 9 a 11, en el que la primera operación implica dos o más entradas de coma flotante de 16 bits.
13. El método de una cualquiera de las reivindicaciones 9 a 12, en el que:
el acelerador de módulos de múltiples chips debe estar acoplado comunicativamente a al menos una agrupación de aceleradores; y
la agrupación de aceleradores comprende procesadores paralelos idénticos acoplados comunicativamente entre sí.
14. El método de una cualquiera de las reivindicaciones 9 a 13, en el que:
los núcleos multiprocesadores (112, 200, 706A-706H) deben utilizar un espacio de memoria unificado asociado con la pila de memoria (105, 708).
15. Al menos un medio de almacenamiento legible por máquina no transitorio que almacena instrucciones para ser ejecutadas por al menos una máquina asociada con un acelerador de módulos de múltiples chips, comprendiendo el acelerador de módulos de múltiples chips una pila de memoria (105, 708) y circuitos de procesador paralelos (113), estando el circuito de procesador paralelo acoplado comunicativamente a la pila de memoria (105, 708), incluyendo la pila de memoria (105, 708) múltiples matrices de memoria, comprendiendo los circuitos de procesador paralelos (113) núcleos multiprocesadores (112, 200, 706A-706H), las instrucciones cuando se ejecutan por la al menos una máquina, haciendo que los núcleos multiprocesadores (112, 200, 706A-706H) realicen cualquier método de las reivindicaciones 9 a 14.
ES22204509T 2017-04-28 2018-03-26 Compute optimizations for low precision machine learning operations Active ES3074545T3 (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US15/581,167 US10726514B2 (en) 2017-04-28 2017-04-28 Compute optimizations for low precision machine learning operations

Publications (1)

Publication Number Publication Date
ES3074545T3 true ES3074545T3 (en) 2026-07-21

Family

ID=61965680

Family Applications (5)

Application Number Title Priority Date Filing Date
ES22204509T Active ES3074545T3 (en) 2017-04-28 2018-03-26 Compute optimizations for low precision machine learning operations
ES22197260T Active ES3033526T3 (en) 2017-04-28 2018-03-26 Compute optimizations for low precision machine learning operations
ES18164092T Active ES2926704T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión
ES19182892T Active ES2865201T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión
ES22175421T Active ES2973431T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión

Family Applications After (4)

Application Number Title Priority Date Filing Date
ES22197260T Active ES3033526T3 (en) 2017-04-28 2018-03-26 Compute optimizations for low precision machine learning operations
ES18164092T Active ES2926704T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión
ES19182892T Active ES2865201T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión
ES22175421T Active ES2973431T3 (es) 2017-04-28 2018-03-26 Optimización de cálculos para operaciones de aprendizaje automático de baja precisión

Country Status (8)

Country Link
US (10) US10726514B2 (es)
EP (6) EP4160413B1 (es)
CN (9) CN112330523B (es)
DK (2) DK4141674T3 (es)
ES (5) ES3074545T3 (es)
FI (2) FI4141674T3 (es)
PL (6) PL3792761T3 (es)
TW (7) TWI899647B (es)

Families Citing this family (150)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10142137B2 (en) 2017-03-02 2018-11-27 Micron Technology, Inc. Wireless devices and systems including examples of full duplex transmission
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11842280B2 (en) * 2017-05-05 2023-12-12 Nvidia Corporation Loss-scaling for deep neural network training with reduced precision
CN110447010B (zh) 2017-05-17 2023-09-26 谷歌有限责任公司 在硬件中执行矩阵乘法
US11941516B2 (en) * 2017-08-31 2024-03-26 Micron Technology, Inc. Cooperative learning neural networks and systems
US10554375B2 (en) 2017-09-11 2020-02-04 Micron Technology, Inc. Full duplex device-to-device cooperative communication
US11360934B1 (en) * 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
US10902318B2 (en) 2017-11-06 2021-01-26 Neuralmagic Inc. Methods and systems for improved transforms in convolutional neural networks
KR102792549B1 (ko) 2017-11-09 2025-04-08 삼성전자주식회사 뉴럴 네트워크 연산을 위한 전처리 장치 및 방법
US20190156214A1 (en) 2017-11-18 2019-05-23 Neuralmagic Inc. Systems and methods for exchange of data in distributed training of machine learning algorithms
US10936942B2 (en) * 2017-11-21 2021-03-02 Google Llc Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies
US11373088B2 (en) * 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
US11206050B2 (en) 2018-02-06 2021-12-21 Micron Technology, Inc. Self interference noise cancellation to support multiple frequency bands
JP7056225B2 (ja) * 2018-02-26 2022-04-19 富士通株式会社 演算処理装置、情報処理装置、情報処理方法、およびプログラム
US11100041B2 (en) * 2018-03-09 2021-08-24 Microsoft Technology Licensing, Llc Techniques for tracking independent hardware graphics processing unit (GPU) performance
US11514306B1 (en) * 2018-03-14 2022-11-29 Meta Platforms, Inc. Static memory allocation in neural networks
US12425605B2 (en) * 2018-03-21 2025-09-23 Nvidia Corporation Image in-painting for irregular holes using partial convolutions
US10678508B2 (en) 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
US11593633B2 (en) * 2018-04-13 2023-02-28 Microsoft Technology Licensing, Llc Systems, methods, and computer-readable media for improved real-time audio processing
WO2019222467A1 (en) 2018-05-17 2019-11-21 Niantic, Inc. Self-supervised training of a depth estimation system
GB2574372B (en) * 2018-05-21 2021-08-11 Imagination Tech Ltd Implementing Traditional Computer Vision Algorithms As Neural Networks
US11216732B2 (en) 2018-05-31 2022-01-04 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US10963787B2 (en) * 2018-05-31 2021-03-30 Neuralmagic Inc. Systems and methods for generation of sparse code for convolutional neural networks
US11449363B2 (en) 2018-05-31 2022-09-20 Neuralmagic Inc. Systems and methods for improved neural network execution
US10832133B2 (en) 2018-05-31 2020-11-10 Neuralmagic Inc. System and method of executing neural networks
US10769310B2 (en) * 2018-07-20 2020-09-08 Nxp B.V. Method for making a machine learning model more difficult to copy
US20200034699A1 (en) * 2018-07-24 2020-01-30 SK Hynix Inc. Accelerating appratus of neural network and operating method thereof
US12443833B2 (en) 2018-08-27 2025-10-14 Red Hat, Inc. Systems and methods for neural network convolutional layer matrix multiplication using cache memory
US12340300B1 (en) 2018-09-14 2025-06-24 Groq, Inc. Streaming processor architecture
US11455370B2 (en) 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
US11468291B2 (en) 2018-09-28 2022-10-11 Nxp B.V. Method for protecting a machine learning ensemble from copying
WO2020072274A1 (en) 2018-10-01 2020-04-09 Neuralmagic Inc. Systems and methods for neural network pruning with accuracy preservation
US12182687B2 (en) * 2018-10-11 2024-12-31 International Business Machines Corporation Data representation for dynamic precision in neural network cores
US12699899B1 (en) * 2018-10-16 2026-08-04 Red Hat, Inc. Systems and methods for generation of sparse-dense matrix multiplication code for neural network and other applications
US11366663B2 (en) * 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US12169782B2 (en) * 2018-11-12 2024-12-17 Advanced Micro Devices, Inc. Dynamic precision scaling at epoch granularity in neural networks
US12014273B2 (en) * 2018-12-12 2024-06-18 Kneron (Taiwan) Co., Ltd. Low precision and coarse-to-fine dynamic fixed-point quantization design in convolution neural network
US10970045B2 (en) * 2018-12-17 2021-04-06 Samsung Electronics Co., Ltd. Apparatus and method for high-precision compute of log1p( )
US11544559B2 (en) 2019-01-08 2023-01-03 Neuralmagic Inc. System and method for executing convolution in a neural network
US10963219B2 (en) 2019-02-06 2021-03-30 International Business Machines Corporation Hybrid floating point representation for deep learning acceleration
US11562214B2 (en) * 2019-03-14 2023-01-24 Baidu Usa Llc Methods for improving AI engine MAC utilization
US11475308B2 (en) 2019-03-15 2022-10-18 Samsung Electronics Co., Ltd. Jointly pruning and quantizing deep neural networks
JP7408671B2 (ja) 2019-03-15 2024-01-05 インテル コーポレイション シストリックアレイに対するブロックスパース演算のためのアーキテクチャ
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
CN113396401A (zh) 2019-03-15 2021-09-14 英特尔公司 多贴片存储器管理
US12182035B2 (en) 2019-03-15 2024-12-31 Intel Corporation Systems and methods for cache optimization
US11768664B2 (en) * 2019-03-15 2023-09-26 Advanced Micro Devices, Inc. Processing unit with mixed precision operations
CN111709513B (zh) * 2019-03-18 2023-06-09 百度在线网络技术(北京)有限公司 长短期记忆网络lstm的训练系统、方法及电子设备
US11044462B2 (en) * 2019-05-02 2021-06-22 Niantic, Inc. Self-supervised training of a depth estimation model using depth hints
US10931602B1 (en) 2019-05-10 2021-02-23 Innovium, Inc. Egress-based compute architecture for network switches in distributed artificial intelligence and other applications
US11328222B1 (en) 2019-05-10 2022-05-10 Innovium, Inc. Network switch with integrated gradient aggregation for distributed machine learning
US11099902B1 (en) 2019-05-10 2021-08-24 Innovium, Inc. Parallelized ingress compute architecture for network switches in distributed artificial intelligence and other applications
US10931588B1 (en) * 2019-05-10 2021-02-23 Innovium, Inc. Network switch with integrated compute subsystem for distributed artificial intelligence and other applications
US11301167B2 (en) * 2019-05-16 2022-04-12 Intel Corporation Technologies for providing multiple tier memory media management
US11531898B2 (en) 2019-05-16 2022-12-20 International Business Machines Corporation Training of artificial neural networks
US11120602B2 (en) * 2019-06-03 2021-09-14 Microsoft Technology Licensing, Llc Acceleration of shader programs by compiler precision selection
US11693626B2 (en) * 2019-06-18 2023-07-04 Cirrus Logic, Inc. Variable accuracy computing system
TWI701612B (zh) * 2019-06-19 2020-08-11 創鑫智慧股份有限公司 用於神經網路中激勵函數的電路系統及其處理方法
US11507349B2 (en) * 2019-06-26 2022-11-22 Microsoft Technology Licensing, Llc Neural processing element with single instruction multiple data (SIMD) compute lanes
TWI702615B (zh) * 2019-07-26 2020-08-21 長佳智能股份有限公司 視網膜病變評估模型建立方法及系統
US10956776B2 (en) 2019-08-06 2021-03-23 Alibaba Group Holding Limited 2D convolutional accelerator that generates 3D results
WO2021026225A1 (en) 2019-08-08 2021-02-11 Neuralmagic Inc. System and method of accelerating execution of a neural network
CN112394997A (zh) * 2019-08-13 2021-02-23 上海寒武纪信息科技有限公司 八位整形转半精度浮点指令处理装置、方法及相关产品
JP7317630B2 (ja) * 2019-08-14 2023-07-31 キヤノン株式会社 画像処理装置、画像処理方法、及びプログラム
CN110598172B (zh) * 2019-08-22 2022-10-25 瑞芯微电子股份有限公司 一种基于csa加法器的卷积运算方法和电路
US11057318B1 (en) 2019-08-27 2021-07-06 Innovium, Inc. Distributed artificial intelligence extension modules for network switches
US10979097B2 (en) 2019-09-05 2021-04-13 Micron Technology, Inc. Wireless devices and systems including examples of full duplex transmission using neural networks or recurrent neural networks
EP3792752A1 (en) * 2019-09-11 2021-03-17 Nokia Solutions and Networks Oy Arithmetic unit
US12602201B1 (en) * 2019-09-16 2026-04-14 Nvidia Corporation Processor and system to use mixed precision hardware on floating point operations
WO2021061625A1 (en) * 2019-09-23 2021-04-01 Lightmatter, Inc. Quantized inputs for machine learning models
US12400137B1 (en) * 2019-09-30 2025-08-26 Amazon Technologies, Inc. Bidirectional network on a data-flow centric processor
CN110765111B (zh) * 2019-10-28 2023-03-31 深圳市商汤科技有限公司 存储和读取方法、装置、电子设备和存储介质
EP3817236B1 (en) 2019-11-04 2024-10-16 Samsung Electronics Co., Ltd. Neural network data processing method and apparatus
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US10996960B1 (en) * 2019-11-22 2021-05-04 Blaize, Inc. Iterating single instruction, multiple-data (SIMD) instructions
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations
US11237827B2 (en) * 2019-11-26 2022-02-01 Advanced Micro Devices, Inc. Arithemetic logic unit register sequencing
WO2021108031A1 (en) * 2019-11-26 2021-06-03 Mythic, Inc. Systems and methods for implementing operational transformations for restricted computations of a mixed-signal integrated circuit
EP4066170A4 (en) 2019-11-26 2024-01-17 Groq, Inc. Loading operands and outputting results from a multi-dimensional array using only a single side
US11216184B2 (en) * 2019-12-06 2022-01-04 Western Digital Technologies, Inc. Non-volatile memory with on-chip principal component analysis for generating low dimensional outputs for machine learning
US11188328B2 (en) 2019-12-12 2021-11-30 International Business Machines Corporation Compute array of a processor with mixed-precision numerical linear algebra support
US12566958B2 (en) 2020-01-14 2026-03-03 Red Hat, Inc. System and method of training a neural network
CN115104108B (zh) * 2020-03-05 2025-11-11 华为云计算技术有限公司 用于分布式系统推理的深度学习模型的划分和位宽分配的方法和系统
US12039432B2 (en) * 2020-03-18 2024-07-16 Infineon Technologies Ag Artificial neural network activation function
EP4128234A4 (en) * 2020-03-30 2024-06-26 Rambus Inc. STACKED CHIP NEURAL NETWORK WITH INTEGRATED HIGH-BANDWIDTH MEMORY
US12645911B1 (en) 2020-04-14 2026-06-02 Red Hat, Inc. System and method of executing neural networks using compression and tensor columns
US11258473B2 (en) 2020-04-14 2022-02-22 Micron Technology, Inc. Self interference noise cancellation to support multiple frequency bands with neural networks or recurrent neural networks
US12670370B1 (en) 2020-04-22 2026-06-30 Red Hat, Inc. Systems and methods for activation sparse and kernel sparse general matrix multiplication in neural networks
CN113571087B (zh) * 2020-04-29 2023-07-28 宏达国际电子股份有限公司 依据音频信号产生动作的方法及电子装置
TWI747258B (zh) * 2020-04-29 2021-11-21 宏達國際電子股份有限公司 依據音訊訊號產生動作的方法及電子裝置
US11321891B2 (en) 2020-04-29 2022-05-03 Htc Corporation Method for generating action according to audio signal and electronic device
US11475533B2 (en) * 2020-05-18 2022-10-18 Qualcomm Incorporated GPR optimization in a GPU based on a GPR release mechanism
US12530573B1 (en) 2020-05-19 2026-01-20 Red Hat, Inc. Efficient execution of group-sparsified neural networks
US12002145B2 (en) 2020-08-17 2024-06-04 Intel Corporation Apparatus and method for efficient graphics processing including ray tracing
WO2022040342A1 (en) * 2020-08-18 2022-02-24 Grid.ai, Inc. Modularized model interaction system and method
KR20230051664A (ko) * 2020-08-19 2023-04-18 메타 플랫폼스, 인크. 채널 제약 하드웨어 가속기에 의해 구현되는 신경망을 사용하여 이미지 향상을 수행하기 위한 시스템 및 방법
US10970619B1 (en) * 2020-08-21 2021-04-06 Moffett Technologies Co., Limited Method and system for hierarchical weight-sparse convolution processing
US11204765B1 (en) * 2020-08-26 2021-12-21 Qualcomm Incorporated Deferred GPR allocation for texture/load instruction block
WO2022048288A1 (zh) * 2020-09-07 2022-03-10 中国石油化工股份有限公司 基于地质特征约束的储层参数预测方法、装置和存储介质
US12386683B2 (en) * 2020-09-08 2025-08-12 Technion Research And Development Foundation Ltd. Non-blocking simultaneous multithreading (NB-SMT)
US11175957B1 (en) 2020-09-22 2021-11-16 International Business Machines Corporation Hardware accelerator for executing a computation task
US11941395B2 (en) * 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
CN112241509B (zh) 2020-09-29 2024-03-12 格兰菲智能科技有限公司 图形处理器及其加速方法
US11556757B1 (en) 2020-12-10 2023-01-17 Neuralmagic Ltd. System and method of executing deep tensor columns in neural networks
CN114661632A (zh) 2020-12-22 2022-06-24 三星电子株式会社 在系统高速缓存中分配特征图的神经网络加速方法和系统
US12198038B2 (en) * 2020-12-31 2025-01-14 Deepx Co., Ltd. Method for artificial neural network and neural processing unit
US20220358375A1 (en) * 2021-05-04 2022-11-10 International Business Machines Corporation Inference of machine learning models
CN113190352B (zh) * 2021-05-12 2024-02-06 北京中科通量科技有限公司 一种面向通用cpu的深度学习计算加速方法及系统
US20220365783A1 (en) * 2021-05-13 2022-11-17 Nvidia Corporation Matrix multiplication and accumulation operations on compressed matrices
US20220365750A1 (en) * 2021-05-14 2022-11-17 Nvidia Corporation Datatype conversion technique
US11899589B2 (en) * 2021-06-22 2024-02-13 Samsung Electronics Co., Ltd. Systems, methods, and devices for bias mode management in memory systems
US20210397999A1 (en) * 2021-06-25 2021-12-23 Intel Corporation Methods and apparatus to offload execution of a portion of a machine learning model
US12197773B2 (en) * 2021-08-16 2025-01-14 Samsung Electronics Co., Ltd. Accelerator to reduce data dimensionality and associated systems and methods
EP4392899A1 (en) * 2021-08-25 2024-07-03 Dolby Laboratories Licensing Corporation Multi-level latent fusion in neural networks for image and video coding
US20230065528A1 (en) * 2021-08-31 2023-03-02 Samsung Electronics Co., Ltd. Apparatus and method with multi-format data support
US20230086275A1 (en) * 2021-09-22 2023-03-23 Intel Corporation Emulation of floating point calculation
WO2023062456A1 (en) * 2021-10-14 2023-04-20 Braingines SA Dynamic, low-latency, dependency-aware scheduling on simd-like devices for processing of recurring and non-recurring executions of time-series data
US11960982B1 (en) 2021-10-21 2024-04-16 Neuralmagic, Inc. System and method of determining and executing deep tensor columns in neural networks
WO2023075372A1 (ko) * 2021-10-26 2023-05-04 삼성전자 주식회사 심층 신경망 연산을 수행하는 방법 및 전자 장치
US20230132070A1 (en) * 2021-10-27 2023-04-27 International Business Machines Corporation Features for black-box machine-learning models
US12675679B2 (en) 2021-11-03 2026-07-07 Apple Inc. Crossbar circuit for unaligned memory access in neural network processor
US20230237011A1 (en) * 2022-01-21 2023-07-27 Nvidia Corporation Mapping logical and physical processors and logical and physical memory
US12620051B2 (en) 2022-03-18 2026-05-05 Intel Corporation Apparatus and method for biased BVH traversal path
US12517735B2 (en) * 2022-03-18 2026-01-06 Intel Corporation Apparatus and method for scheduling inference tasks
US12488530B2 (en) 2022-03-18 2025-12-02 Intel Corporation Apparatus and method for acceleration data structure re-braiding with camera position
US12561753B2 (en) 2022-03-18 2026-02-24 Intel Corporation Node prefetching in a wide BVH traversal with a stack
US12499606B2 (en) 2022-03-18 2025-12-16 Intel Corporation Apparatus and method for accelerating BVH builds by merging bounding boxes
US11935175B2 (en) * 2022-04-07 2024-03-19 Huawei Technologies Co., Ltd. Apparatus, method, and computer-readable medium for image processing using variable-precision shading
GB2619001B (en) * 2022-05-16 2024-08-21 Advanced Risc Mach Ltd Method and processing unit for generating an output feature map
TWI819645B (zh) * 2022-06-08 2023-10-21 緯創資通股份有限公司 更新神經網路模型的方法和電子裝置
CN115393167A (zh) * 2022-08-20 2022-11-25 西安翔腾微电子科技有限公司 一种图形处理器中双精度数据舍位计算结构及其计算方法
US12399713B2 (en) 2022-09-29 2025-08-26 Tenstorrent Ai Ulc Multiplication hardware block with adaptive fidelity control system
TWI845081B (zh) * 2022-12-21 2024-06-11 國立成功大學 圖形處理器
TWI842389B (zh) * 2023-02-13 2024-05-11 瑞昱半導體股份有限公司 訓練系統、訓練方法以及辨識系統
US12518340B2 (en) * 2023-02-14 2026-01-06 Apple Inc. Geometry kick distribution in graphics processor
CN116129249B (zh) * 2023-04-04 2023-07-07 上海燧原科技有限公司 一种图像处理方法、装置、电子设备和存储介质
CN116643796A (zh) * 2023-05-17 2023-08-25 阿里巴巴(中国)有限公司 混合精度运算的处理方法以及指令处理装置
WO2025062169A1 (en) 2023-09-19 2025-03-27 Synthara Ag In-memory computer
KR102800580B1 (ko) * 2023-12-26 2025-04-28 쿠팡 주식회사 대상 프로그램을 테스트하는 방법, 장치 및 기록매체
TWI889394B (zh) * 2024-06-18 2025-07-01 大陸商星宸科技股份有限公司 影像處理裝置及影像處理方法
TWI888194B (zh) * 2024-06-25 2025-06-21 瑞昱半導體股份有限公司 深度學習加速器與深度學習加速方法
CN119336492B (zh) * 2024-09-25 2025-09-09 西安热工研究院有限公司 可信度量进程控制cpu负载的方法、装置、设备和存储介质
CN119902873B (zh) * 2025-01-09 2025-10-21 山东浪潮科学研究院有限公司 一种gpgpu分支指令的simt堆栈及线程调度优化方法、装置、介质和gpgpu架构

Family Cites Families (113)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4484259A (en) * 1980-02-13 1984-11-20 Intel Corporation Fraction bus for use in a numeric data processor
WO1990000287A1 (en) * 1988-07-01 1990-01-11 Morton Steven G Intelligent floating-point memory
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
JPH0991118A (ja) * 1995-09-27 1997-04-04 Hitachi Ltd 浮動小数点演算装置
US6331856B1 (en) * 1995-11-22 2001-12-18 Nintendo Co., Ltd. Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing
CN100356316C (zh) * 1996-11-29 2007-12-19 松下电器产业株式会社 用来解码并执行指令的处理器
US6718457B2 (en) 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
US7493470B1 (en) * 2001-12-07 2009-02-17 Arc International, Plc Processor apparatus and methods optimized for control applications
US7418606B2 (en) 2003-09-18 2008-08-26 Nvidia Corporation High quality and high performance three-dimensional graphics architecture for portable handheld devices
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
JP2006065633A (ja) * 2004-08-27 2006-03-09 Sony Computer Entertainment Inc 演算方法および装置
US20060101244A1 (en) * 2004-11-10 2006-05-11 Nvidia Corporation Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US7720900B2 (en) 2005-09-09 2010-05-18 International Business Machines Corporation Fused multiply add split for multiple precision arithmetic
US9146706B2 (en) * 2006-05-05 2015-09-29 Qualcomm Incorporated Controlled-precision iterative arithmetic logic unit
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
EP3413198A1 (en) * 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8106914B2 (en) * 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US8694250B2 (en) * 2008-01-09 2014-04-08 Trimble Navigation Limited Processing multi-GNSS data from mixed-type receivers
CN101334766B (zh) * 2008-06-30 2011-05-11 东软飞利浦医疗设备系统有限责任公司 一种并行微处理器及其实现方法
US8150902B2 (en) * 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
US9104510B1 (en) * 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit
US8615541B2 (en) * 2009-09-23 2013-12-24 Nvidia Corporation Extended-precision integer arithmetic and logical instructions
US8522000B2 (en) 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8713294B2 (en) * 2009-11-13 2014-04-29 International Business Machines Corporation Heap/stack guard pages using a wakeup unit
US8464026B2 (en) * 2010-02-17 2013-06-11 International Business Machines Corporation Method and apparatus for computing massive spatio-temporal correlations using a hybrid CPU-GPU approach
US20110283059A1 (en) 2010-05-11 2011-11-17 Progeniq Pte Ltd Techniques for accelerating computations using field programmable gate array processors
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
US8582373B2 (en) * 2010-08-31 2013-11-12 Micron Technology, Inc. Buffer die in stacks of memory dies and methods
US8493089B2 (en) * 2011-04-06 2013-07-23 International Business Machines Corporation Programmable logic circuit using three-dimensional stacking techniques
FR2974645A1 (fr) 2011-04-28 2012-11-02 Kalray Operateur de multiplication et addition fusionnees a precision mixte
CN102156637A (zh) * 2011-05-04 2011-08-17 中国人民解放军国防科学技术大学 向量交叉多线程处理方法及向量交叉多线程微处理器
US9529712B2 (en) * 2011-07-26 2016-12-27 Nvidia Corporation Techniques for balancing accesses to memory having different memory types
CN102750663A (zh) * 2011-08-26 2012-10-24 新奥特(北京)视频技术有限公司 一种基于gpu的地理信息数据处理的方法、设备和系统
US8630375B2 (en) 2011-08-29 2014-01-14 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for received signal processing in a multi-stage receiver
BR112014005794A2 (pt) * 2011-09-15 2017-03-28 Exxonmobil Upstream Res Co operações matriciais e vetoriais otimizadas em algoritmos de instrução limitada que executam cálculos de equação de estado
US9830158B2 (en) * 2011-11-04 2017-11-28 Nvidia Corporation Speculative execution and rollback
WO2013095338A1 (en) * 2011-12-19 2013-06-27 Intel Corporation Simd integer multiply-accumulate instruction for multi-precision arithmetic
WO2013095508A1 (en) 2011-12-22 2013-06-27 Intel Corporation Speculative cache modification
WO2013095554A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of consecutive integers in numerical order
US9507593B2 (en) * 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
WO2013101018A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Dot product processors, methods, systems, and instructions
US8984042B2 (en) * 2012-02-09 2015-03-17 International Business Machines Corporation Mixed precision estimate instruction computing narrow precision result for wide precision inputs
US9693714B2 (en) 2012-02-10 2017-07-04 Senseonics, Incorporated Digital ASIC sensor platform
US10007527B2 (en) 2012-03-05 2018-06-26 Nvidia Corporation Uniform load processing for parallel thread sub-sets
CN102750127B (zh) * 2012-06-12 2015-06-24 清华大学 一种协处理器
US9257364B2 (en) * 2012-06-27 2016-02-09 Intel Corporation Integrated heat spreader that maximizes heat transfer from a multi-chip package
US8922243B2 (en) * 2012-12-23 2014-12-30 Advanced Micro Devices, Inc. Die-stacked memory device with reconfigurable logic
US9047171B2 (en) * 2012-09-29 2015-06-02 Intel Corporation Differentiating cache reliability to reduce minimum on-die voltage
US9189399B2 (en) 2012-11-21 2015-11-17 Advanced Micro Devices, Inc. Stack cache management and coherence techniques
US9111393B2 (en) * 2012-11-26 2015-08-18 Nvidia Corporation System, method, and computer program product for sampling a hierarchical depth map
US9292414B2 (en) * 2012-11-26 2016-03-22 Nvidia Corporation System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU
US20140173606A1 (en) * 2012-12-19 2014-06-19 Nvidia Corporation Streaming processing of short read alignment algorithms
US9135185B2 (en) * 2012-12-23 2015-09-15 Advanced Micro Devices, Inc. Die-stacked memory device providing data translation
US9478066B2 (en) * 2013-03-14 2016-10-25 Nvidia Corporation Consistent vertex snapping for variable resolution rendering
US9430418B2 (en) * 2013-03-15 2016-08-30 International Business Machines Corporation Synchronization and order detection in a memory system
US9136987B2 (en) 2013-03-15 2015-09-15 International Business Machines Corporation Replay suspension in a memory system
US20140281366A1 (en) 2013-03-15 2014-09-18 Cognitive Electronics, Inc. Address translation in a system using memory striping
US9535778B2 (en) * 2013-03-15 2017-01-03 International Business Machines Corporation Reestablishing synchronization in a memory system
EP3005078A2 (en) 2013-05-24 2016-04-13 Coherent Logix Incorporated Memory-network processor with programmable optimizations
US9305388B2 (en) * 2013-08-23 2016-04-05 Nvidia Corporation Bit-count texture format
US9633409B2 (en) 2013-08-26 2017-04-25 Apple Inc. GPU predication
CN104598200A (zh) * 2013-11-01 2015-05-06 新昌县冠阳技术开发有限公司 一种计算机图像处理系统
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
CN103677741A (zh) * 2013-12-30 2014-03-26 南京大学 基于ncs算法的成像方法以及混合精度浮点协处理器
GB2523341A (en) * 2014-02-20 2015-08-26 Ibm Iterative refinement apparatus
CN103984522B (zh) * 2014-05-27 2018-04-13 中国人民解放军国防科学技术大学 Gpdsp中定点和浮点混合除法的实现方法
US9619205B1 (en) * 2014-06-04 2017-04-11 Cadence Design Systems, Inc. System and method for performing floating point operations in a processor that includes fixed point operations
US9898795B2 (en) * 2014-06-19 2018-02-20 Vmware, Inc. Host-based heterogeneous multi-GPU assignment
KR102192956B1 (ko) * 2014-06-23 2020-12-18 삼성전자주식회사 디스플레이 장치 및 그 제어 방법
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US20160026912A1 (en) * 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
JP6012674B2 (ja) 2014-07-25 2016-10-25 京セラドキュメントソリューションズ株式会社 画像形成装置
US9454497B2 (en) 2014-08-15 2016-09-27 Intel Corporation Technologies for secure inter-virtual-machine shared memory communication
US9645792B2 (en) 2014-08-18 2017-05-09 Qualcomm Incorporated Emulation of fused multiply-add operations
EP3183653B1 (en) * 2014-08-20 2026-06-03 Landmark Graphics Corporation Optimizing computer hardware resource utilization when processing variable precision data
US10032244B2 (en) 2014-08-21 2018-07-24 Intel Corporation Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU)
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US10235338B2 (en) * 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
US9582201B2 (en) * 2014-09-26 2017-02-28 Western Digital Technologies, Inc. Multi-tier scheme for logical storage management
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing
US10636336B2 (en) * 2015-04-17 2020-04-28 Nvidia Corporation Mixed primary display with spatially modulated backlight
US10796397B2 (en) * 2015-06-12 2020-10-06 Intel Corporation Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices
US9846623B2 (en) * 2015-08-20 2017-12-19 Qsigma, Inc. Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems
US20170083827A1 (en) * 2015-09-23 2017-03-23 Qualcomm Incorporated Data-Driven Accelerator For Machine Learning And Raw Data Analysis
US10423411B2 (en) * 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US10776690B2 (en) * 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
US10474627B2 (en) 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
CN106570559A (zh) * 2015-10-09 2017-04-19 阿里巴巴集团控股有限公司 一种基于神经网络的数据处理方法和装置
US9817662B2 (en) * 2015-10-24 2017-11-14 Alan A Jorgensen Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
CN105335127A (zh) * 2015-10-29 2016-02-17 中国人民解放军国防科学技术大学 Gpdsp中支持浮点除法的标量运算单元结构
US9703531B2 (en) * 2015-11-12 2017-07-11 Arm Limited Multiplication of first and second operands using redundant representation
US10318008B2 (en) * 2015-12-15 2019-06-11 Purdue Research Foundation Method and system for hand pose detection
US9715373B2 (en) * 2015-12-18 2017-07-25 International Business Machines Corporation Dynamic recompilation techniques for machine learning programs
US20170214930A1 (en) * 2016-01-26 2017-07-27 Sandia Corporation Gpu-assisted lossless data compression
US11676024B2 (en) 2016-02-24 2023-06-13 Sri International Low precision neural networks using subband decomposition
US9831148B2 (en) * 2016-03-11 2017-11-28 Taiwan Semiconductor Manufacturing Company, Ltd. Integrated fan-out package including voltage regulators and methods forming same
EP3452960A1 (en) 2016-05-04 2019-03-13 Google LLC Augmenting neural networks with external memory using reinforcement learning
CN107526709A (zh) 2016-06-15 2017-12-29 辉达公司 使用低精度格式的张量处理
US10083347B2 (en) 2016-07-29 2018-09-25 NTech lab LLC Face identification using artificial neural network
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10114613B2 (en) * 2016-09-07 2018-10-30 International Business Machines Corporation Mixed-precision memcomputing system
US10141938B2 (en) * 2016-09-21 2018-11-27 Xilinx, Inc. Stacked columnar integrated circuits
US10296292B2 (en) * 2016-10-20 2019-05-21 Advanced Micro Devices, Inc. Dynamic variable precision computation
US10417140B2 (en) 2017-02-24 2019-09-17 Advanced Micro Devices, Inc. Streaming translation lookaside buffer
US10282309B2 (en) 2017-02-24 2019-05-07 Advanced Micro Devices, Inc. Per-page control of physical address space distribution among memory modules
US10595039B2 (en) 2017-03-31 2020-03-17 Nvidia Corporation System and method for content and motion controlled action video generation
US10424069B2 (en) 2017-04-07 2019-09-24 Nvidia Corporation System and method for optical flow estimation
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10643297B2 (en) * 2017-05-05 2020-05-05 Intel Corporation Dynamic precision management for integer deep learning primitives
US10339067B2 (en) * 2017-06-19 2019-07-02 Advanced Micro Devices, Inc. Mechanism for reducing page migration overhead in memory systems
CN118674603A (zh) * 2023-03-16 2024-09-20 英特尔公司 经由时间感知机器学习模型的基于时间的帧生成

Also Published As

Publication number Publication date
PL4141674T3 (pl) 2025-08-11
US20230401668A1 (en) 2023-12-14
CN115082283A (zh) 2022-09-20
EP4160413A1 (en) 2023-04-05
US20180315159A1 (en) 2018-11-01
EP3396547B1 (en) 2022-07-27
PL3594813T3 (pl) 2021-06-28
US20220245753A1 (en) 2022-08-04
PL3396547T3 (pl) 2022-11-14
CN120410832A (zh) 2025-08-01
US11468541B2 (en) 2022-10-11
CN108805791A (zh) 2018-11-13
US10726514B2 (en) 2020-07-28
US20230061670A1 (en) 2023-03-02
TW201842478A (zh) 2018-12-01
EP4141674A1 (en) 2023-03-01
ES2865201T3 (es) 2021-10-15
TWI787692B (zh) 2022-12-21
CN116414455B (zh) 2026-07-03
TWI781142B (zh) 2022-10-21
CN110737470B (zh) 2023-06-16
ES2926704T3 (es) 2022-10-27
EP3594813A1 (en) 2020-01-15
CN110349075B (zh) 2020-10-20
CN113496457B (zh) 2025-03-28
PL4099168T3 (pl) 2024-04-08
US20230061331A1 (en) 2023-03-02
CN112330523A (zh) 2021-02-05
US20190304053A1 (en) 2019-10-03
CN110737470A (zh) 2020-01-31
CN108805791B (zh) 2024-11-12
TWI803357B (zh) 2023-05-21
CN110349075A (zh) 2019-10-18
EP3396547A3 (en) 2018-11-28
US10853906B2 (en) 2020-12-01
PL3792761T3 (pl) 2025-11-17
TW202601549A (zh) 2026-01-01
EP4099168B1 (en) 2023-11-22
EP3594813B1 (en) 2021-01-13
CN119440633A (zh) 2025-02-14
EP4160413C0 (en) 2026-04-08
EP3396547A2 (en) 2018-10-31
US20200364823A1 (en) 2020-11-19
CN116414455A (zh) 2023-07-11
CN112330523B (zh) 2025-05-27
TWI819861B (zh) 2023-10-21
PL4160413T3 (pl) 2026-08-10
TWI682357B (zh) 2020-01-11
TW202305736A (zh) 2023-02-01
TWI899647B (zh) 2025-10-01
EP4141674B1 (en) 2025-04-09
TW202403659A (zh) 2024-01-16
US20190206020A1 (en) 2019-07-04
US10242423B2 (en) 2019-03-26
DK4099168T3 (da) 2024-02-12
TW201935408A (zh) 2019-09-01
ES3033526T3 (en) 2025-08-05
US11948224B2 (en) 2024-04-02
US12148063B2 (en) 2024-11-19
US20180315157A1 (en) 2018-11-01
FI4141674T3 (fi) 2025-07-10
CN113496457A (zh) 2021-10-12
EP4099168A1 (en) 2022-12-07
CN115082283B (zh) 2025-09-12
EP4160413B1 (en) 2026-04-08
US11138686B2 (en) 2021-10-05
US20250117874A1 (en) 2025-04-10
US11308574B2 (en) 2022-04-19
EP3792761B1 (en) 2025-07-02
ES2973431T3 (es) 2024-06-20
TW202238509A (zh) 2022-10-01
DK4141674T3 (da) 2025-06-30
EP3792761A1 (en) 2021-03-17
FI4099168T3 (fi) 2024-02-06
TW202123166A (zh) 2021-06-16
US12373911B2 (en) 2025-07-29