ES2929626T3 - Arquitectura de computación paralela de propósito general - Google Patents

Arquitectura de computación paralela de propósito general Download PDF

Info

Publication number
ES2929626T3
ES2929626T3 ES16797170T ES16797170T ES2929626T3 ES 2929626 T3 ES2929626 T3 ES 2929626T3 ES 16797170 T ES16797170 T ES 16797170T ES 16797170 T ES16797170 T ES 16797170T ES 2929626 T3 ES2929626 T3 ES 2929626T3
Authority
ES
Spain
Prior art keywords
coprocessors
soma
core
computing
cores
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
ES16797170T
Other languages
English (en)
Inventor
Paul Burchard
Ulrich Drepper
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.)
Goldman Sachs and Co LLC
Original Assignee
Goldman Sachs and Co LLC
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 Goldman Sachs and Co LLC filed Critical Goldman Sachs and Co LLC
Application granted granted Critical
Publication of ES2929626T3 publication Critical patent/ES2929626T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Jib Cranes (AREA)
  • Epoxy Resins (AREA)
  • Forklifts And Lifting Vehicles (AREA)
  • Stored Programmes (AREA)
  • Nuclear Medicine (AREA)

Abstract

Un aparato incluye múltiples núcleos de computación paralelos (102), donde cada núcleo de computación (102) está configurado para realizar una o más operaciones de procesamiento y generar datos de entrada. el aparato tambien incluye multiples coprocesadores paralelos (112) asociados con cada nucleo de computacion (102). El aparato incluye además múltiples líneas de comunicación (122, 124) configuradas para transportar los datos de entrada desde cada núcleo informático (102) a uno designado de los coprocesadores (112) asociado con cada uno de los núcleos informáticos (102), donde los coprocesadores (112) están configurados para procesar los datos de entrada y generar datos de salida. Además, el aparato incluye múltiples circuitos reductores (115), donde cada núcleo de cómputo (102) está asociado con uno de los circuitos reductores (115). Cada circuito reductor (115) está configurado para recibir los datos de salida de cada uno de los coprocesadores (112) del núcleo informático asociado (102), para aplicar una o más funciones a los datos de salida y para proporcionar uno o más resultados al núcleo informático asociado (102). (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Arquitectura de computación paralela de propósito general
CAMPO TÉCNICO
Esta divulgación se refiere de manera general a arquitecturas de hardware para dispositivos de computación y sistemas de computación. Más específicamente, esta divulgación se refiere a una arquitectura de computación paralela de propósito general, que puede admitir funciones de computación avanzadas como las que se usan en la inteligencia artificial.
ANTECEDENTES
El cerebro humano es un sistema masivamente paralelo que típicamente contiene alrededor de 100 mil millones de neuronas conectadas por un cuatrillón de sinapsis. Idealmente, simular el funcionamiento del cerebro humano podría respaldar funciones de computación avanzadas como la inteligencia artificial. Sin embargo, los intentos convencionales de simular el cerebro humano o diseñar sistemas de computación que rivalicen con las capacidades del cerebro humano han sido generalmente inadecuados por varias razones, como no coincidir sustancialmente con la conectividad o la estructura tridimensional del cerebro.
El documento "Larrabee: A Many-Core x86 Architecture for Visual Computing" se refiere al uso de múltiples núcleos de CPU x85 en orden que se aumentan a través de una unidad de procesamiento de vector amplio que aumenta el rendimiento en cargas de trabajo altamente paralelas.
La Solicitud de Patente US2011/296137 A1 se refiere a la realización de operaciones de reducción deterministas en ordenadores paralelos que comprenden hacer seguimiento de la recepción de los datos de contribución de cada procesador.
El documento "Toward hardware building blocks for software-only real-time video processing: The MOVIE approach" se refiere a facilitar el desarrollo de soluciones solo de software para aplicaciones de procesamiento de video en tiempo real. El chip fabricado puede verse como un elemento básico para el procesamiento de datos múltiples de una sola instrucción, y su arquitectura está diseñada para facilitar la programación de lenguaje de alto nivel. El componente básico de la arquitectura asocia un subarreglo de procesadores de computación con un procesador de I/O.
SUMARIO
De acuerdo con la invención, proporcionamos un aparato con múltiples núcleos de computación de acuerdo con la reivindicación 1 y un método que comprende generar datos de entrada usando múltiples núcleos de computación paralelos de acuerdo con la reivindicación 11. Las características opcionales se enumeran en las reivindicaciones dependientes.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Para una comprensión más completa de esta divulgación y sus características, se hace referencia ahora a la siguiente descripción, tomada junto con los dibujos acompañantes, en los que:
Las FIGURAS 1A a 1C ilustran una arquitectura de computación paralela de propósito general de ejemplo de acuerdo con esta divulgación;
Las FIGURAS 2 y 3 ilustran comunicaciones de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación;
Las FIGURAS 4 y 5 ilustran la funcionalidad del coprocesador de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación;
La FIGURA 6 ilustra un coprocesador programable y funcionalidad de reducción de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación;
Las FIGURAS 7 y 8 ilustran sistemas de computación de ejemplo que usan una arquitectura de computación paralela de propósito general de acuerdo con esta divulgación; y
La FIGURA 9 ilustra un método de ejemplo para soportar funciones de computación avanzadas usando una arquitectura de computación paralela de propósito general de acuerdo con esta divulgación.
DESCRIPCIÓN DETALLADA
Las FIGURAS 1A a 9, analizadas a continuación, y las varias realizaciones usadas para describir los principios de la presente invención en este documento de patente son solamente a modo de ilustración y no debe interpretarse de ninguna manera que limitan el alcance de la invención. Los expertos en la técnica comprenderán que los principios de la invención pueden implementarse en cualquier tipo de dispositivo o sistema adecuadamente dispuesto.
Como se ha indicado con anterioridad, el cerebro humano es un sistema masivamente paralelo que típicamente contiene alrededor de 100 mil millones de neuronas conectadas por un cuatrillón de sinapsis. Las sinapsis apoyan el transporte de señales entre las neuronas. El cerebro humano está estructurado de manera muy diferente a las máquinas de Turing clásicas. Simular el cerebro humano usando una máquina de Turing clásica no es práctico dada la gran cantidad de neuronas y sinapsis que se encuentran típicamente en el cerebro humano.
Aunque la inteligencia humana tiene muchos componentes, un componente clave es la reducción dimensional, que se refiere al proceso de recibir una gran cantidad (ancho de banda alto) de entradas sensoriales y reducir la información a una cantidad menor (ancho de banda bajo) de conceptos descriptivos. Matemáticamente, esta reducción podría lograrse usando varias formas de análisis factorial iterado. Las varias formas de análisis factorial tienden a tener varias características en común. Por ejemplo, en un modo de operación al que se hace referencia como "modo explicativo directo", los análisis factoriales realizan un cálculo simple en una gran cantidad de entradas, acumulan una suma y realizan un cálculo posiblemente más complejo en la salida. En otro modo de operación al que se hace referencia como "modo de aprendizaje hacia atrás", los análisis factoriales modifican el cálculo simple de las entradas mediante algún cálculo simple en la salida y la entrada correspondiente. Aunque estos cálculos tienden a ser simples, el abanico de entrada (que se refiere a la cantidad de entradas) y el abanico de salida (que se refiere a la cantidad de destinos a los que se proporciona una salida) pueden ser decenas de miles.
El diseño de sistemas que incluso pueden rivalizar de alguna manera con las habilidades del cerebro humano generalmente ha sido inadecuado por varias razones. Por ejemplo, dicho abanico de entrada y abanico de salida tan enorme no puede mapearse prácticamente en un circuito bidimensional (2D), lo que ha mantenido a arquitecturas de computación tan altamente conectadas fuera de la corriente principal. Para diseñar dispositivos de computación que rivalicen con las capacidades del cerebro humano, se necesita una arquitectura de hardware con más ancho de banda de comunicación. Esta divulgación describe varias arquitecturas de hardware “conexionista” de propósito general nuevas que incluyen una serie de núcleos de procesamiento altamente interconectados. Entre otras cosas, estas arquitecturas de hardware pueden acelerar una amplia clase de algoritmos en aprendizaje automático, computación científica, videojuegos y otras áreas. En algunas realizaciones, estas arquitecturas pueden fabricarse a un coste razonable usando técnicas modernas como técnicas de circuitos integrados tridimensionales (3D).
Las FIGURAS 1A a 1C ilustran una arquitectura de computación paralela de propósito general de ejemplo de acuerdo con esta divulgación. En particular, las FIGURAS 1A a 1C ilustran una estructura multinivel de ejemplo que proporciona una arquitectura de hardware con ancho de banda de comunicación alto. Los diferentes niveles de la estructura realizan diferentes funciones como se describe a continuación.
La FIGURA 1A ilustra un primer nivel 100 de la arquitectura de hardware. Este nivel 100 incluye múltiples núcleos de computación o de procesamiento 102, a los que se hace referencia como núcleos soma. En su forma mínima, cada núcleo soma 102 puede recibir una o más señales de datos, realizar algún tipo de procesamiento y transmitir una o más señales de entrada. La estructura incluida en cada núcleo soma 102 para realizar operaciones de procesamiento puede variar desde un núcleo de procesamiento muy simple hasta un núcleo de procesamiento muy complejo. Por ejemplo, la unidad de procesamiento en cada núcleo soma 102 podría ser un núcleo de computación relativamente simple, como una unidad aritmética de instrucción única, datos múltiples (SIMD) de propósito general. Los núcleos soma 102 también podrían representar núcleos de procesamiento completos, como los de ARM, INTEL u otros fabricantes de procesadores informáticos. En algunas realizaciones, el grupo de núcleos soma 102 podría implementarse usando diseños de procesadores de "muchos núcleos" existentes. Sin embargo, para implementar los núcleos soma 102 podría usarse cualquier núcleo de computación adecuado. Aunque la arquitectura de hardware aquí incluye dieciséis núcleos soma 102, en la arquitectura de hardware podría admitirse cualquier número de núcleos soma 102. En realizaciones particulares, todos los núcleos soma 102 aquí podrían implementarse dentro de un único chip de circuito integrado al que se hace referencia como procesador. Además, cabe señalar que los núcleos soma 102 pueden ser homogéneos o no.
Cada núcleo soma 102 incluye un circuitería de procesamiento 104 y por lo menos un dispositivo de memoria 106. La circuitería de procesamiento 104 generalmente denota un circuito usado para realizar algún tipo de procesamiento dentro del núcleo soma 102. Como se ha indicado con anterioridad, el procesamiento podría ser simple o complejo, y la circuitería de procesamiento 104 puede variar dependiendo del procesamiento específico a realizar. El dispositivo de memoria 106 generalmente denota cualquier dispositivo adecuado de almacenamiento y recuperación, como uno o más registros, para almacenar datos usados, generados o recibidos por el núcleo soma 102. En la FIGURA 1A, aunque se muestra el dispositivo de memoria 106 incorporado dentro de un núcleo soma 102, cada dispositivo de memoria 106 podría estar localizado en su totalidad o en parte en cualquier otra posición adecuada accesible para un núcleo soma 102.
La FIGURA 1B ilustra un segundo nivel 110 de la arquitectura de hardware, que está asociado con el primer nivel 100 de la arquitectura de hardware. El segundo nivel 110 incluye una serie de coprocesadores 112 (a los que se hace referencia como coprocesadores de sinapsis) asociados con cada núcleo soma 102. Los coprocesadores de sinapsis 112 generalmente procesan datos de entrada transmitidos a través de líneas de señal (analizadas a continuación) entre los núcleos soma 102. Cada núcleo soma 102 podría asociarse con múltiples coprocesadores de sinapsis 112. Como ejemplo, para cada núcleo soma 102 en un grupo de N núcleos soma, podrían proporcionarse hasta N coprocesadores de sinapsis 112 y usarse para admitir comunicaciones desde los núcleos soma 102 en el grupo (incluido él mismo) a ese núcleo soma 102. En algunas realizaciones, cada núcleo soma 102 está acoplado comunicativamente a un coprocesador de sinapsis 112 para cada uno de los núcleos soma 102 en el grupo. En otras palabras, cada núcleo soma 102 puede acoplarse comunicativamente a todos los N núcleos soma 102. Los coprocesadores 112 de sinapsis de un núcleo soma 102 "local" o "anfitrión" se usan, por lo tanto, para recibir y procesar los datos de entrada entrantes de todos los núcleos soma 102. (incluido él mismo). Esto permite efectivamente en algunas realizaciones que todos los N coprocesadores de sinapsis 112 para cada núcleo soma 102 reciban datos de entrada de todos los N núcleos soma 102 en paralelo. Tener en cuenta que cada núcleo soma 102 puede incluir típicamente el mismo número de coprocesadores de sinapsis 112, aunque podrían usarse otras realizaciones.
Cada coprocesador de sinapsis 112 incluye cualquier estructura adecuada que admita el procesamiento de datos de entrada entrantes para un núcleo soma 102. Los coprocesadores de sinapsis 112 podrían tener capacidades limitadas y podrían ser reprogramables. En algunas realizaciones, cada coprocesador de sinapsis 112 incluye una unidad aritmética programable o de otro tipo 113 y por lo menos un dispositivo de memoria 114. La unidad aritmética 113 denota cualquier estructura adecuada configurada para ejecutar una o más secuencias de instrucciones para admitir varias funciones en la arquitectura de hardware. Los ejemplos de estas funciones incluyen la recepción y el procesamiento de datos en una secuencia específica, la realización de una operación aritmética en una entrada recibida y los parámetros almacenados, o el envío de valores. El dispositivo de memoria 114 generalmente denota cualquier dispositivo adecuado de almacenamiento y recuperación, como uno o más registros, para almacenar datos usados, generados o recibidos por el coprocesador de sinapsis 112. En la FIGURA 1B, aunque el dispositivo de memoria 114 se muestra incorporado dentro de un coprocesador de sinapsis 112, cada dispositivo de memoria 114 podría estar localizado en su totalidad o en parte en cualquier otra posición adecuada accesible para un coprocesador de sinapsis 112.
El segundo nivel 110 de la arquitectura de hardware también incluye varios circuitos reductores o "reductores" 115. En algunas realizaciones, podría haber un reductor 115 para cada núcleo soma 102. Cada reductor 115 recibe datos de salida producidos por todos los coprocesadores de sinapsis 112 asociados con uno de los núcleos soma 102, procesa los datos de salida recibidos de alguna manera y pasa el resultado o los resultados del procesamiento al núcleo soma local 102. Por ejemplo, cada reductor 115 podría sumar o acumular de otor modo valores de datos de salida recibidos., identificar un valor mínimo o máximo de datos de salida recibidos, o realizar alguna otra operación de procesamiento. De esta manera, cada reductor 115 procesa los datos de salida para un núcleo soma 102 y reduce la cantidad de datos proporcionados a ese núcleo soma 102.
Cada reductor 115 incluye cualquier estructura adecuada para procesar múltiples valores de salida. En algunas realizaciones, cada reductor 115 incluye circuitería de procesamiento 116 y por lo menos un dispositivo de memoria 117. La circuitería de procesamiento 116 generalmente denota circuitería usada para realizar algún tipo de procesamiento dentro del reductor 115 y, a menudo, es mucho más especializada que la circuitería de procesamiento 104 de los núcleos soma 102. Por ejemplo, la circuitería de procesamiento 116 podría incluir un árbol sumador formado por acumuladores usados para sumar todos los valores de salida de los coprocesadores de sinapsis 112 asociados con un núcleo soma 102. El dispositivo de memoria 117 generalmente denota cualquier dispositivo de almacenamiento y de recuperación adecuado, como uno o más registros, para almacenar datos usados, generados o recibidos por el reductor 115. En la FIGURA 1B, aunque el dispositivo de memoria 117 se muestra incorporado dentro de un reductor 115, cada dispositivo de memoria 117 podría estar localizado en su totalidad o en parte en cualquier otra posición adecuada accesible a un reductor 115.
La FIGURA 1C ilustra un tercer nivel 120 de la arquitectura de hardware, que está asociado con el primer y el segundo niveles 100 y 110 de la arquitectura de hardware aquí. El tercer nivel 120 incluye múltiples líneas de señal 122 y 124 que acoplan comunicativamente los núcleos soma 102, admitiendo por tanto el transporte de señales hacia, desde y entre los núcleos soma 102. En algunas realizaciones, los núcleos soma 102 están completamente conectados en el sentido de que cada núcleo soma 102 en un grupo puede comunicarse directamente con todos los demás núcleos soma 102 del mismo grupo a través de las líneas de señal 122 y 124 y la configuración apropiada de los coprocesadores de sinapsis 112. Sin embargo, también podría admitirse una conectividad inferior a la total dentro de la arquitectura de hardware.
Hay que tener en cuenta que el diseño físico de las líneas de señal 122 y 124 en la FIGURA 1C es solo para ilustración y no necesita representar la disposición física real de las líneas de señal en la arquitectura de hardware. Por ejemplo, hay varias maneras de diseñar una red entre los núcleos soma 102, que pueden admitir la comunicación directa entre todos los núcleos soma 102 o no. Por lo tanto, las líneas de señal 122 y 124 podrían disponerse para admitir cualquier ruta de comunicación deseada en la arquitectura de hardware.
Durante el funcionamiento, cada núcleo soma 102 opera para ejecutar las instrucciones deseadas y procesar los datos, incluyendo posiblemente los datos recibidos de su reductor 115 u otra fuente o fuentes. Cada núcleo soma 102 puede proporcionar los resultados de sus operaciones de procesamiento a otros núcleos soma 102 (y posiblemente a sí mismo) como datos de entrada, y cada núcleo soma 102 podría recibir los datos de entrada generados por las operaciones de procesamiento de otros núcleos soma a través de sus coprocesadores de sinapsis 112. Los coprocesadores de sinapsis 112 para cada núcleo soma 102 pueden realizar las operaciones de procesamiento deseadas en los datos de entrada, y los datos de salida de los coprocesadores de sinapsis 112 pueden ser procesados adicionalmente por el reductor 115 para cada núcleo soma 102. Los resultados de los reductores 115 se proporcionan a los núcleos soma locales/anfitriones 102, que pueden usar los datos para realizar operaciones de procesamiento adicionales.
Se admiten múltiples canales en cada comunicación desde un núcleo soma 102 a los procesadores de sinapsis conectados 112, donde cada canal está asociado con diferentes operaciones de procesamiento. Cada coprocesador de sinapsis 112 recibe datos de entrada a través de múltiples canales desde un núcleo soma 102, y los coprocesadores de sinapsis 112 conectados a ese núcleo soma 112 realizan diferentes operaciones de procesamiento dependiendo de los canales utilizados para los datos de entrada. Además, cada reductor 115 recibe datos de salida de sus coprocesadores de sinapsis asociados 112 a través de múltiples canales, y el reductor 115 realiza diferentes operaciones de procesamiento dependiendo del canal del que el procesador de sinapsis 112 recibió los datos de salida. Los canales podrían indicar canales físicos reales (como cuando los datos se envían a través de diferentes líneas de señal) o canales lógicos (como cuando los datos se envían a través de una línea de señal común con diferentes identificadores de canal). En diferentes realizaciones, diferentes registros u otras ubicaciones de memoria en los núcleos soma 102, los coprocesadores de sinapsis 112 y los reductores 115 podrían usarse para almacenar diferentes datos y diferentes instrucciones de programación. Esto permite que la arquitectura de hardware soporte la concurrencia u otros tipos de operaciones de programación.
Como se ha indicado anteriormente, el dispositivo de memoria 114 de cada coprocesador de sinapsis 112 puede incluir una serie de registros. En algunas realizaciones, los registros pueden incluir registros asociados con cada posible socio de conexión (cada núcleo soma 102) y se usan para contener datos de entrada entrantes para los canales de cada socio de conexión. Los registros también podrían incluir registros locales usados para contener valores de parámetros y otros valores usados durante la ejecución de instrucciones de programación. En realizaciones particulares, las operaciones de procesamiento de los coprocesadores de sinapsis 112 se describen usando una o más instrucciones ejecutadas en respuesta a los datos de entrada entrantes, y no hay bucles de comando en los coprocesadores de sinapsis 112.
Cada núcleo soma 102 podría controlar individualmente la instalación de instrucciones de programa en sus coprocesadores de sinapsis 112, y pueden proporcionarse diferentes instrucciones de programa para diferentes canales. Por ejemplo, podría haber una instrucción que haga que un núcleo soma 102 cargue el mismo programa en algunos o todos sus coprocesadores 112 de sinapsis. También podría haber instrucciones que hagan que el núcleo soma 102 cargue registros de parámetros de sus coprocesadores de sinapsis 112, a menudo con valores diferentes. Tener en cuenta que un núcleo soma 102 podría cargar todos estos datos desde un área de memoria dada que es lo suficientemente grande como para contener valores para todos los registros de todos los coprocesadores de sinapsis 112 del núcleo soma. Se podría permitir que cada núcleo soma 102 lea los registros de parámetros individuales de sus coprocesadores de sinapsis 112 pero no los valores de los registros por canal. En cambio, los valores en los registros por canal pueden ser procesados por los procesadores de sinapsis 112 y/o ser alimentados al reductor asociado 115, que puede ser programado por el núcleo soma local/anfitrión 102 para operar en los datos recibidos para cada canal apropiadamente. Las entradas a cada reductor 115 pueden representar los valores de salida de todos los coprocesadores de sinapsis 112 para el núcleo soma 102 asociado en un canal específico.
Cada núcleo soma 102 podría admitir varias instrucciones nuevas para facilitar el uso de los coprocesadores de sinapsis 112 y los reductores 115 como se ha descrito anteriormente. Por ejemplo, cada núcleo soma 102 podría admitir instrucciones para enviar un elemento de datos de entrada a (un canal específico de) todos los núcleos soma 102, para enviar datos de entrada a un canal específico de sus propios coprocesadores sinápticos 112, para recibir resultados de su propio reductor 115, para instalar o seleccionar programas u otras instrucciones en sus coprocesadores de sinapsis 112 y reductor 115, y para almacenar datos en los registros de parámetros de los coprocesadores de sinapsis 112. A continuación se proporcionan detalles adicionales de instrucciones de ejemplo admitidas en la arquitectura de hardware.
En algunas realizaciones, la arquitectura de hardware que se muestra en las FIGURAS 1A a 1C podría implementarse dentro de un único chip de circuito integrado. El chip de circuito integrado podría fabricarse de cualquier manera adecuada, como usando técnicas de fabricación de larga data como Silicon-on-Insulator (SOI) o técnicas desarrolladas más recientemente como técnicas de fabricación de circuitos integrados tridimensionales. Si es necesario o lo desea, varias instancias de la arquitectura de hardware que se muestra en las FIGURAS 1A a 1Cpodrían acoplarse y utilizarse para ampliar el número de núcleos soma 102 disponibles para su uso. Por ejemplo, múltiples chips de circuitos integrados podrían acoplarse comunicativamente para proporcionar cualquier número deseado de núcleos soma 102, como acoplando las líneas de señal 122 y 124 de cada instancia de la arquitectura de hardware usando una o más conexiones de alta velocidad.
Además, en algunas realizaciones, cada núcleo soma 102 podría configurarse para realizar una función específica o una combinación de funciones para proporcionar la funcionalidad deseada en la arquitectura de hardware. En otras realizaciones, cada núcleo soma 102 podría programarse para que la función o funciones de los núcleos soma 102 puedan definirse y puedan cambiarse con el tiempo o según se desee. De manera similar, en algunas realizaciones, cada coprocesador de sinapsis 112 y reductor 115 podría configurarse para realizar una función específica o una combinación de funciones para proporcionar la funcionalidad deseada en la arquitectura de hardware. En otras realizaciones, cada coprocesador de sinapsis 112 y reductor 115 podría programarse de tal manera que la función o funciones de los coprocesadores de sinapsis 112 y el reductor 115 puedan definirse y puedan cambiar con el tiempo o según se desee.
Tener en cuenta que el procesamiento realizado por los núcleos soma 102 puede producirse en paralelo y que el procesamiento realizado por los coprocesadores de sinapsis 112 y los reductores 115 para cada núcleo soma 102 también puede producirse en paralelo. De esta manera, cada núcleo soma 102 puede comunicarse a través de múltiples líneas de señal 122 y 124 al mismo tiempo dada una infraestructura de comunicación suficiente entre los núcleos soma 102. Dado un número adecuado de núcleos soma 102, los coprocesadores de sinapsis 112, reductores 115 y líneas de señal 122 y 124, esta arquitectura de hardware puede admitir una gran cantidad de conexiones de comunicaciones entre núcleos informáticos, y todas esas conexiones de comunicaciones pueden estar disponibles para su uso al mismo tiempo. Como resultado, este diseño representa una arquitectura de hardware con más ancho de banda de comunicación.
Aunque las FIGURAS 1A a 1C ilustran un ejemplo de una arquitectura de computación paralela de propósito general, pueden realizarse varios cambios en la arquitectura de hardware mostrada en las FIGURAS 1A a 1C. Por ejemplo, una arquitectura de hardware podría admitir cualquier cantidad adecuada de núcleos soma, junto con una cantidad adecuada de coprocesadores y reductores de sinapsis. Además, cada núcleo soma, coprocesador de sinapsis y reductor podría implementarse de cualquier otra manera adecuada, como usando recursos de computación compartidos para los núcleos soma o los coprocesadores de sinapsis o usando múltiples reductores que permiten realizar más de una operación concurrentemente. Además, podrían combinarse varios componentes en las FIGURAS 1A a 1C, subdividirse aún más, reorganizarse u omitirse y podrían añadirse componentes adicionales de acuerdo con las necesidades particulares. Como ejemplos particulares, es posible que no sea necesario usar uno o más núcleos soma 102 junto con un reductor 115.
Las FIGURAS 2 y 3 ilustran comunicaciones de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación. Como se muestra en la FIGURA 2, cada núcleo soma 102 puede tener coprocesadores de sinapsis 112 que reciben datos de entrada de todos los núcleos soma 102 (incluyendo él mismo). Este mismo patrón puede repetirse para todos los núcleos soma 102 en un grupo de núcleos soma 102. Pueden usarse las líneas de señal 122 y 124 descritas anteriormente para acoplar cada núcleo soma 102 a un coprocesador de sinapsis 112 de todos los núcleos soma 102 de una manera adecuada para admitir estas comunicaciones.
Cuando hay N núcleos soma 102, cada núcleo soma 102 podría estar provisto de N coprocesadores de sinapsis 112 (un coprocesador de sinapsis 112 por núcleo soma 102 incluyéndose a sí mismo). Cada núcleo soma 102 puede transmitir información a todos los núcleos soma 102, y cada núcleo soma 102 puede recibir información de todos los demás núcleos soma 102 a través de sus coprocesadores de sinapsis 112. Efectivamente, en algunas realizaciones, los N coprocesadores de sinapsis 112 para cada uno de los N núcleos soma 102 pueden admitir N redes de comunicación independientes entre los núcleos soma 102.
La FIGURA 3 ilustra un ejemplo específico de dos de las redes de comunicación independientes entre núcleos soma. Como se muestra en la FIGURA 3, un núcleo soma 102a puede transmitir datos de entrada a un coprocesador de sinapsis 112 de cada núcleo soma 102 en el sistema. De manera similar, otro núcleo soma 102b puede transmitir datos a un coprocesador de sinapsis 112 de cada núcleo soma 102 en el sistema. La transmisión por los núcleos soma 102a y 102b puede, en algunas realizaciones, producirse simultáneamente. Como resultado, N núcleos soma 102 pueden participar en N transmisiones de datos simultáneamente.
Tener en cuenta que aunque aquí se muestra la transmisión como si se produjese en serie desde un núcleo soma al siguiente en filas y columnas, esto es solo para facilitar la ilustración. Cada coprocesador de sinapsis 112 que está transmitiendo datos podría, alternativamente, transmitir los datos directamente a los coprocesadores de sinapsis 112 de todos los núcleos soma 102 a través de las líneas de señal 122 y 124. Por supuesto, si es necesario o si se desea, también es posible permitir que múltiples núcleos soma 102 transmitan sobre las mismas líneas de señal 122 y 124, como con algún tipo de direccionamiento o mecanismo de contención en el lugar.
Aunque las FIGURAS 2 y 3 ilustran ejemplos de comunicaciones en la arquitectura de computación de las FIGURAS 1A a 1C, pueden realizarse varios cambios en las FIGURAS 2 y 3. Por ejemplo, una arquitectura de hardware podría admitir cualquier cantidad adecuada de núcleos soma, junto con una cantidad adecuada de coprocesadores de sinapsis. Además, varios componentes en las FIGURAS 2 y 3 podrían combinarse, subdividirse adicionalmente, reorganizarse u omitirse y podrían añadirse componentes adicionales de acuerdo con las necesidades particulares. Además, podría admitirse cualquier comunicación adecuada entre los núcleos soma 102.
Las FIGURAS 4 y 5 ilustran la funcionalidad del coprocesador de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación. En particular, las FIGURAS 4 y 5 ilustran mecanismos de ejemplo para implementar los coprocesadores de sinapsis 112 descritos anteriormente. Tener en cuenta que estas implementaciones de ejemplo son solo para ilustración y que los coprocesadores de sinapsis 112 podrían implementarse de otras maneras.
Como se muestra en la FIGURA 4, puede implementarse un coprocesador de sinapsis 112 para el j -és¡mo núcleo soma 102 usando la unidad aritmética 113 descrita anteriormente. La unidad aritmética 113 realiza uno o más cálculos deseados usando los datos de entrada entrantes recibidos del ¡-ésimo núcleo soma 102. La unidad aritmética 113 luego envía los datos de salida resultantes a un reductor 115 asociado con el j -és¡mo núcleo soma 102. El reductor 115 puede procesar las salidas de múltiples unidades aritméticas 113 de múltiples coprocesadores de sinapsis 112 asociados con el j -ésimo núcleo soma 102 y proporcionar los resultados al j -és¡m° núcleo soma 102.
La operación u operaciones realizadas por la unidad aritmética 113 en la FIGURA 4 podrían definirse o controlarse usando un programa (9) 402, y el programa 402 opera usando uno o más parámetros 404. El programa 402 y el parámetro o parámetros 404 pueden almacenarse dentro del dispositivo de memoria 114 u otra localización u localizaciones. El uno o más parámetros 404 pueden ser establecidos o controlados por el coprocesador de sinapsis 112, por el núcleo soma asociado 102, o de cualquier otra manera adecuada. Las operaciones de ejemplo que podrían ser realizadas por la unidad aritmética 113 pueden incluir valores de suma, resta o multiplicación; generar un valor constante a través de todos los coprocesadores de sinapsis 112 asociados con un núcleo soma 102; emitir un identificador para el coprocesador de sinapsis 112; seleccionar uno de múltiples valores en base a un valor de prueba; o calcular el signo o la raíz cuadrada inversa de un valor.
Como se muestra en la FIGURA 5, puede haber múltiples operaciones o conjuntos de operaciones realizadas dentro de la arquitectura de hardware. El coprocesador de sinapsis 112 puede usar un valor de "identificador de canal" para identificar cuál de los múltiples programas seleccionables (9) 502 debe ejecutar la unidad aritmética 113 en los datos entrantes. El "identificador de canal" también puede usarse para controlar qué parámetro o parámetros 504 usa la unidad aritmética 113 y dónde se envían los resultados generados por la unidad aritmética 113. Los programas 502 y los parámetros 504 seleccionables podrían almacenarse en el dispositivo de memoria 114 del coprocesador de sinapsis 112 o en otras localizaciones.
En algunas realizaciones, cada una de las unidades aritméticas 113 y los reductores 115 podrían implementarse de manera canalizada, y los datos entrantes podrían indicar valores escalares o vectores de valores pequeños. En estas realizaciones, podrían recibirse múltiples valores escalares o por lo menos un vector de valores desde el ¡-és¡mo núcleo soma 102, y la unidad aritmética 113 podría aplicar un único programa 502 o diferentes programas 502 a los valores para producir una secuencia de valores de salida. La secuencia de valores de salida podría proporcionarse al reductor 115 para su procesamiento adicional.
Aunque las FIGURAS 4 y 5 ilustran ejemplos de la funcionalidad del coprocesador en la arquitectura de computación de las FIGURAS 1A a 1C, pueden realizarse varios cambios en las FIGURAS 4 y 5. Por ejemplo, cada coprocesador de sinapsis 112 podría implementarse de cualquier otra manera definida o reconfigurable.
La FIGURA 6 ilustra un coprocesador programable y funcionalidad de reducción de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C de acuerdo con esta divulgación. En particular, la FIGURA 6 ilustra un mecanismo de ejemplo para controlar la programación de los coprocesadores de sinapsis 112 y los reductores 115 descritos anteriormente.
Como se muestra en la FIGURA 6, un reductor 115 está configurado para recibir los datos de salida de múltiples coprocesadores de sinapsis 112 asociados con un núcleo soma 102. El reductor 115 realiza luego por lo menos una operación (identificada por V) usando las salidas de los coprocesadores de sinapsis 112 para generar por lo menos una resultado que se proporciona al núcleo soma asociado 102. El uno o más cálculos realizados por el reductor 115 podrían incluir cualquier operación adecuada realizada usando las salidas de múltiples coprocesadores de sinapsis 112. En algunas realizaciones, el reductor 115 podría ejecutar una o más secuencias de instrucciones para admitir varias funciones en la arquitectura del hardware. Por ejemplo, después de recibir datos de los coprocesadores 112 del núcleo soma asociado 102 en paralelo, el reductor podría realizar una operación programable en los datos recibidos y transmitir el resultado o resultados al núcleo soma asociado 102. Las operaciones de ejemplo pueden incluir sumar o multiplicar las salidas de los coprocesadores de sinapsis 112, identificar una salida mínima o máxima desde los coprocesadores de sinapsis 112, o seleccionar un valor del coprocesador de sinapsis específico como la salida.
En esta estructura puede usarse un dispositivo de memoria 602 para almacenar uno o más programas (9) ejecutados por los coprocesadores de sinapsis 112. También puede usarse el dispositivo de memoria 602 para almacenar uno o más programas (^ ) ejecutados por el reductor 115. El dispositivo de memoria 602 representa cualquier dispositivo o dispositivos de almacenamiento y recuperación volátiles o no volátiles adecuados, como parte de una o más de las memorias 106, 114, 117.
Aunque la FIGURA 6 ilustra un coprocesador programable y funcionalidad de reducción de ejemplo en la arquitectura de computación de las FIGURAS 1A a 1C, pueden realizarse varios cambios en la FIGURA 6. Por ejemplo, una arquitectura de hardware podría admitir cualquier cantidad adecuada de núcleos soma, junto con una cantidad adecuada de coprocesadores de sinapsis y reductores. Además, varios componentes en la FIGURA 6 podrían combinarse, subdividirse adicionalmente, reorganizarse u omitirse y podrían añadirse componentes adicionales de acuerdo con las necesidades particulares.
Las FIGURAS 7 y 8 ilustran sistemas de computación de ejemplo que usan una arquitectura de computación paralela de propósito general de acuerdo con esta divulgación. Como se muestra en la FIGURA 7, un sistema de computación 700 incluye por lo menos un procesador 702, por lo menos un dispositivo de almacenamiento 704, por lo menos una unidad de comunicaciones 706 y por lo menos una unidad de entrada/salida (I/O) 708.
El procesador 702 podría denotar un chip de circuito integrado que incorpora los núcleos soma 102, los coprocesadores de sinapsis 112, los reductores 115 y las líneas de señal 122 y 124 descritos anteriormente. El procesador 702 ejecuta instrucciones, como las que pueden cargarse en un dispositivo de memoria 710 y luego cargarse en los registros u otras memorias de los núcleos soma 102, los coprocesadores de sinapsis 112 y los reductores 115. El procesador 702 puede incluir cualquier cantidad adecuada de núcleos soma 102, coprocesadores de sinapsis 112, reductores 115 y líneas de señal 122 y 124.
El dispositivo de memoria 710 y un almacenamiento persistente 712 son ejemplos de dispositivos de almacenamiento 704, que representan cualquier estructura capaz de almacenar y facilitar la recuperación de información (como datos, código de programa y/u otra información adecuada en una base temporal o permanente). El dispositivo de memoria 710 puede representar una memoria de acceso aleatorio o cualquier otro dispositivo de almacenamiento volátil o no volátil adecuado. El almacenamiento persistente 712 puede contener uno o más componentes o dispositivos que admiten el almacenamiento de datos a largo plazo, como una memoria de solo lectura, un disco duro, una memoria flash o un disco óptico.
La unidad de comunicaciones 706 admite comunicaciones con otros sistemas o dispositivos. Por ejemplo, la unidad de comunicaciones 706 podría incluir una tarjeta de interfaz de red o un transceptor inalámbrico que facilite las comunicaciones a través de una red cableada o inalámbrica. La unidad de comunicaciones 706 puede admitir comunicaciones a través de cualquier enlace de comunicación físico o inalámbrico adecuado.
La unidad de I/O 708 permite la entrada y salida de datos. Por ejemplo, la unidad de I/O 708 puede proporcionar una conexión para la entrada del usuario a través de un teclado, ratón, teclado numérico, pantalla táctil u otro dispositivo de entrada adecuado. La unidad de I/O 708 también puede enviar la salida a una pantalla, impresora u otro dispositivo de salida adecuado.
Si es necesario o si se desea, podrían acoplarse varios casos de la arquitectura de hardware que se muestra en las FIGURAS 1A a 1C y usarse para ampliar el número de núcleos soma 102 disponibles para su uso. Por ejemplo, podrían acoplarse comunicativamente múltiples chips de circuitos integrados para proporcionar cualquier cantidad deseada de núcleos soma 102. Un ejemplo de esto se muestra en la FIGURA 8, donde podría usarse una disposición de multiprocesador 800 en el sistema de computación 700 como el procesador 702 o en otro sistema de computación. Aquí la disposición multiprocesador 800 incluye por lo menos dos procesadores acoplados por al menos una conexión de alta velocidad. En este ejemplo, cuatro procesadores 802-808 están acoplados por cuatro conexiones de alta velocidad 810 en un anillo, aunque podría usarse cualquier otro número y disposición adecuados de procesadores y conexiones de alta velocidad.
Cada conexión de alta velocidad 810 puede admitir cualquier ruta de comunicación adecuada para acoplar múltiples casos de la arquitectura de hardware mostrada en las FIGURAS 1A a 1C. Por ejemplo, cada conexión de alta velocidad 810 puede acoplarse comunicativamente al tercer nivel 120 de cada caso de la arquitectura de hardware para que la conexión de alta velocidad 810 admita el transporte de señales entre las líneas de señal 122 y/o 124 de los casos de hardware. Cada conexión de alta velocidad 810 incluye cualquier estructura adecuada para transportar señales entre casos de hardware, como entre múltiples chips de circuitos integrados.
Podrían usarse varios tipos de conexiones de alta velocidad 810 para admitir una arquitectura multiprocesador. Por ejemplo, cada conexión de alta velocidad 810 podría implementarse usando una conexión fotónica entre dos chips de circuitos integrados. Como otro ejemplo, los propios chips de circuitos integrados podrían admitir un empaquetado de "colcha", donde cada chip de circuito integrado incluye conexiones eléctricas a lo largo de por lo menos un lado y los chips de circuitos integrados están montados de tal manera que las conexiones eléctricas en diferentes chips contacten entre sí. Tener en cuenta, sin embargo, que también podría usarse cualquier otra conexión de alta velocidad 810 o una adicional.
Aunque las FIGURAS 7 y 8 ilustran ejemplos de sistemas de computación que usan una arquitectura de computación paralela de propósito general, pueden hacerse varios cambios a las FIGURAS 7 y 8. Por ejemplo, la arquitectura de hardware que se muestra en las FIGURAS 1A a 1C podría usarse en cualquier otro sistema adecuado para realizar cualquier función adecuada.
La FIGURA 9 ilustra un método de ejemplo 900 para admitir funciones de computación avanzadas usando una arquitectura de computación paralela de propósito general de acuerdo con esta divulgación. Para facilitar la explicación, el método 900 se describe con respecto a la arquitectura de hardware mostrada en las FIGURAS 1A a 1C. Sin embargo, el método 900 podría usarse con cualquier otra arquitectura de hardware adecuada.
Como se muestra en la FIGURA 9, las operaciones de procesamiento se ejecutan usando múltiples núcleos de computación paralelos en el paso 902. Esto podría incluir, por ejemplo, los núcleos soma 102 en uno o más procesadores que ejecutan instrucciones para realizar cualquiera de una amplia variedad de cálculos. Las operaciones de procesamiento podrían denotar operaciones simplistas realizadas por núcleos soma 102 de SIMD hasta operaciones complejas realizadas por núcleos soma 102 de procesador completo. Tener en cuenta que las operaciones mostradas en la FIGURA 9 pueden ejecutarse en orden debido a las dependencias de las operaciones. Pueden realizarse múltiples cadenas independientes de las mismas operaciones concurrentemente y las operaciones de comunicación y sinapsis/reductor pueden realizarse en paralelo usando el direccionamiento de canal como se ha descrito anteriormente.
Los resultados del procesamiento de cada núcleo de computación se publican en otros núcleos de computación en el paso 904. Esto podría incluir, por ejemplo, que cada núcleo soma 102 proporcione sus resultados de procesamiento a través de las líneas de señal 122 y 124 a un coprocesador de sinapsis 112 de cada núcleo soma 102. En algunas realizaciones, esto da como resultado que los coprocesadores de sinapsis 112 para cada núcleo soma 102 reciban los resultados del procesamiento de todos los núcleos soma 102.
Para cada núcleo de computación, los resultados de procesamiento de los núcleos de computación se procesan en el paso 906 y se reducen en el paso 908. Esto podría incluir, por ejemplo, los coprocesadores de sinapsis 112 asociados con cada núcleo soma 102 que realizan algún tipo de procesamiento en los resultados de procesamiento de todos los núcleos soma 102. A continuación se describen ejemplos específicos de los tipos de operaciones que podría realizar la unidad aritmética 113 de los coprocesadores de sinapsis 112. Esto también podría incluir el reductor 115 para cada núcleo soma 102 procesando las salidas de los coprocesadores de sinapsis 112 para ese núcleo soma 102. A continuación se describen ejemplos específicos de los tipos de operaciones que podría realizar el reductor 115. Tener en cuenta que las operaciones realizadas por los coprocesadores de sinapsis 112 y los reductores 115 podrían controlarse y pueden variar, como cuando se usan diferentes programas 9 y ^ para diferentes canales de datos.
Los resultados reducidos se proporcionan a los núcleos de computación en el paso 910. Esto podría incluir, por ejemplo, que los reductores 115 proporcionen salidas a sus núcleos soma 102 asociados. En este punto, el método 900 podría repetirse, con los núcleos de computación usando los resultados reducidos durante la ejecución adicional de las operaciones de procesamiento. Alternativamente, el método 900 podría finalizar y repetirse más tarde con nuevos datos.
Aunque la FIGURA 9 ilustra un ejemplo de un método 900 para admitir funciones de computación avanzadas usando una arquitectura de computación paralela de propósito general, pueden realizarse varios cambios en la FIGURA 9. Por ejemplo, aunque se muestra como una serie de pasos, varios pasos en la FIGURA 9 podrían superponerse, producirse en paralelo, producirse en un orden diferente o producirse cualquier número de veces.
En algunas de las realizaciones descritas anteriormente, cada núcleo soma 102 puede programar sus coprocesadores de sinapsis 112 para ejecutar por lo menos un programa 9, y los programas 9 pueden ejecutarse tan pronto como lleguen los datos entrantes. El reductor 115 para un núcleo soma 102 ejecuta por lo menos un programa ^ usando los resultados del programa 9 de todos los coprocesadores 112 de sinapsis para ese núcleo soma 102. En realizaciones particulares, cada programa 9 puede ejecutar a menudo en un tiempo O(1) dado un tamaño de vector fijo y sin bucles, y el programa ^ a menudo puede ejecutarse en tiempo O (log N). Además, en realizaciones particulares, el procesamiento colectivo realizado por los coprocesadores de sinapsis 112 y el reductor 115 para cada núcleo soma 102 podría expresarse como:
Figure imgf000009_0001
( l )
Aquí, i denota la identidad de un núcleo soma 102 emisor (o la identidad de un núcleo soma 102 más un identificador de grupo soma del núcleo soma 102), y N denota el número de núcleos soma 102 (o el número de núcleos soma 102 veces el número de grupos de soma). Además, j denota un identificador de canal, y p denota uno o más parámetros (como los parámetros 402 o 502) usados en los coprocesadores de sinapsis 112 (como variables de estado o locales, que pueden ser específicas del canal o no). Además, Xi denota la salida del i-ésimo núcleo soma 102, e yj denota la salida proporcionada por un reductor 115 como resultado al núcleo soma 102 en el canal j. Además, j denota la función realizada por los coprocesadores de sinapsis 112 para el j -ésimo canal usando los datos entrantes y posiblemente los parámetros p, y V() denota la función realizada por el reductor 115 para el núcleo soma 102 local usando las salidas de los coprocesadores de sinapsis 112.
Los ejemplos de las funciones q>j () podrían incluir:
r = x * a b
r - x l y f a b
r - mcix(x,c)
r -m in(x,c)
r = seleccionar (x,a,b)
r - índice
Aquí, a, b, c y r podrían denotar nombres de registros en un coprocesador de sinapsis 112, y x podría denotar un valor de entrada desde un núcleo soma 102 (aunque también podría usarse otro registro del coprocesador de sinapsis 112 en su lugar). La operación de seleccionar prueba la condición en el primer parámetro (por ejemplo, realizando una prueba simple distinta de cero) y devuelve o el segundo parámetro o el tercer parámetro en base al resultado de la prueba. La operación de índice puede ser específica de una implementación con múltiples grupos soma. Cada grupo soma podría incluir el mismo número de núcleos soma 102. A continuación se proporcionan más detalles de los grupos soma. En algunas realizaciones, ninguna de las funciones implementadas por los coprocesadores de sinapsis 112 implica bucles.
Los ejemplos de las funciones V () podrían incluir:
v -suma( r j i ])
v = mox( r [ i ])
v = min( r [ i ])
Aquí, v denota la salida de un reductor 115 proporcionado a un núcleo soma 102, y r[i] denota las entradas recibidas por el reductor 115 de los coprocesadores de sinapsis 112 (en una implementación con múltiples grupos soma podrían obtenerse múltiples valores del mismo coprocesador de sinapsis 112). Cada una de las funciones max y min podría devolver tanto (i) el valor máximo o mínimo como (ii) el valor de índice i del coprocesador de sinapsis 112 que proporcionó el valor máximo o mínimo. El resultado de la función V () podría ponerse a disposición del núcleo soma 102 usando uno o más registros.
En estas realizaciones, los coprocesadores de sinapsis 112 podrían no estar programados con un programa tradicional que se ejecuta en un bucle y que recupera activamente (y si es necesario espera) la entrada. En su lugar, cada canal puede asociarse con un programa 9, y el programa 9 puede marcarse como ejecutable cuando llegan datos para el canal y, finalmente, ejecutarse cuando estén disponibles los recursos de cálculo. Cuando finalizan todos los programas 9 del coprocesador de sinapsis, puede calcularse el resultado del programa de reducción V. El cálculo del resultado por parte del programa de reducción V podría comenzar tan pronto como esté disponible un número mínimo de resultados del coprocesador de sinapsis, con advertencias como la que se menciona a continuación. Los resultados del programa de reducción V pueden guardarse en registros por canal. Cuando un núcleo soma 102 emite una instrucción para leer un resultado de reducción, el reductor 115 puede entonces estar listo para producir el siguiente resultado de reducción para ese canal. Hasta entonces, la operación del reductor 115 para ese canal podría estar bloqueada.
Si se desea pueden abstraerse la asignación de registros en los coprocesadores de sinapsis 112 y los reductores 115 y la asignación de canales. Por ejemplo, en lugar de hacer referencia a un índice absoluto para cada uno de estos recursos en una especificación de programa, podría usarse un mecanismo de asignación para lograr el equivalente a la ejecución de múltiples programas. Por ejemplo, cuando se carga un programa (incluyendo los programas 9 y V), pueden elegirse los registros reales usados entre los registros disponibles de un archivo de registro y puede seleccionarse un canal disponible. No es necesario crear una concurrencia explícita ya que el programa se solicita en base a los datos entrantes. Tras finalizar el programa, los recursos usados en términos de registros y canales pueden volver a estar disponibles. Las instrucciones reales ejecutadas por los coprocesadores de sinapsis 112 y los reductores 115 no tienen que saber nada de esto. Más bien, las instrucciones del código del programa cargado podrían usar índices o números de registro absolutos, y la abstracción puede producirse a un nivel superior donde la carga del programa por parte del núcleo soma 102 está precedida por la generación o reescritura del código apropiado en base a las necesidades del programa y los recursos disponibles.
Una advertencia de ejemplo para el cálculo de un resultado por un programa de reducción ^ que comienza tan pronto como está disponible una cantidad mínima de resultados del coprocesador de sinapsis es la siguiente. Dependiendo de la operación y posiblemente del tipo de datos, la arquitectura de hardware podría admitir un modo que puede acelerar significativamente la ejecución del programa ^ a expensas de la repetibilidad al no seguir un orden específico de operaciones. Por ejemplo, las operaciones de punto flotante no siguen las reglas de asociatividad debido a la posibilidad de cancelación. Un ejemplo específico de esto es cuando las sumas de punto flotante deben realizarse en el mismo orden para garantizar que se produzca exactamente el mismo resultado cada vez. Esto podría crear ralentizaciones en los casos en que un valor de entrada aún no está disponible mientras que otros valores de entrada posteriores en el orden de las operaciones están disponibles. El reductor 115 podría programarse o para esperar a los valores de entrada para que se mantenga siempre el orden de la operación (lo que da como resultado ralentizaciones), o el reductor 115 podría programarse para realizar las sumas fuera del orden (permitiendo obtener resultados más rápidamente pero con potencialmente menos repetibilidad).
Como se ha indicado anteriormente, una implementación de la arquitectura de hardware puede incluir más de un grupo de núcleos soma 102. Tal enfoque podría implementar los grupos soma en un único circuito integrado, o podrían implementarse diferentes grupos soma como circuitos integrados separados (y los circuitos integrados pueden acoplarse entre sí, como con conexiones eléctricas u ópticas). Varios tipos de programas (incluyendo los que se analizan con más detalle a continuación) pueden acelerarse significativamente con este tipo de arquitectura de hardware si puede mapearse un conjunto de datos completo a los núcleos soma 102.
Para facilitar soluciones con múltiples grupos soma, algunos recursos y operaciones pueden duplicarse dependiendo del número de socios de comunicación de cada coprocesador de sinapsis 112. Por ejemplo, en un modelo simple, cada coprocesador de sinapsis 112 podría recibir resultados de exactamente un núcleo soma 102. En una solución con múltiples grupos de soma, cada coprocesador de sinapsis 112 podría recibir resultados de un núcleo soma 102 por grupo de soma. En los programas de coprocesador de sinapsis, esto puede expresarse como en una implementación con un único grupo soma si los recursos relacionados con las transferencias de datos (como un registro para almacenar los datos transmitidos y un registro para almacenar un resultado) están duplicados. Por lo tanto, puede implementarse un único procesador para trabajar con hasta S grupos soma en caso de que haya S duplicados para cada registro del coprocesador de sinapsis. Para habilitar los parámetros de grupo por soma, puede ser útil o necesario proporcionar acceso al número de grupo soma que es la fuente de los datos. Esto podría lograrse usando la operación de índice descrita anteriormente, que devuelve el número de grupo soma además del índice de núcleo soma usado para una comunicación específica.
La implementación de múltiples grupos soma, si están separados físicamente, podría lograrse de cualquier manera adecuada, como acoplando múltiples circuitos integrados usando interconexiones fotónicas u otras interconexiones de alta velocidad. En los casos en que cada núcleo soma 102 escribe sus resultados en un bus dedicado, pueden conectarse los buses respectivos de los diferentes núcleos soma 102 en cada grupo soma, lo que cambia cada bus de un bus de comunicación 1:N a un bus S:N. Esto se puede permitir, por ejemplo, si los datos transmitidos llevan una dirección completa, como en la forma más general [ID de grupo de soma, ID de soma, ID de canal], lo que permite que los datos se enruten en base a un grupo soma siempre que pueda garantizarse que un coprocesador de sinapsis 112 en cada núcleo soma 102 en cada grupo soma reciba los datos.
Además, hay una serie de enfoques posibles para implementar la red o redes usadas para acoplar los núcleos soma 102 a los coprocesadores de sinapsis 112 usando las líneas de señal 122 y 124. Por ejemplo, como se ha descrito anteriormente, cada una de las N redes independientes puede tener uno de los N núcleos soma 102 como fuente y conectan ese núcleo soma 102 a N coprocesadores 112 de sinapsis (uno de cada núcleo soma 102). Aunque una red dedicada para cada salida de cada núcleo soma 102 minimizaría la posible contención en las transferencias de datos, significa que los recursos no se usan cuando no se producen transmisiones. Idealmente, todos los núcleos soma 102 funcionan al unísono y transmiten datos aproximadamente al mismo tiempo, lo que podría manejarse bien solo con líneas de señal dedicadas. En realidad, los núcleos soma 102 pueden perder la sincronización debido a varios factores, como efectos insignificantes en la ejecución mientras se esperan recursos o diferentes decisiones dinámicas, como predicciones de bifurcación. En ese caso, las transmisiones no se producirían exactamente al mismo tiempo. Como los datos transmitidos suelen ser pequeños, el uso de una (o un pequeño número) de redes para conectar los núcleos soma 102 podría ser suficiente sin ralentizaciones significativas, y proporcionaría una mejor utilización de los recursos. Tener en cuenta que en la dirección [ID de grupo de soma, ID de soma, ID de canal] descrita anteriormente, la ID de soma puede abandonarse si cada núcleo soma 102 por grupo soma tiene su propia red dedicada que lo conecta a un coprocesador de sinapsis 112 en cada núcleo soma 102. Otra implementación de la red de conexión podría tener una única red por grupo soma, y todos los paquetes de datos tienen direcciones completas asignadas a los mismos.
Hay varias maneras de crear redes entre los núcleos soma 102. Una posibilidad es enviar todos los paquetes de datos desde un punto de partida central a cada receptor. Desde este punto de partida, los paquetes de datos también pueden enviarse fácilmente a otros grupos soma. Las ventajas de este enfoque incluyen la entrega directa, alto rendimiento (sin conflictos con las transmisiones a diferentes objetivos) y baja latencia. Un inconveniente es el alto coste, especialmente con una red por soma o por grupo de somas.
Otro enfoque sería proporcionar conexiones punto a punto con un conjunto limitado de núcleos soma 102 y hacer que los receptores distribuyan más los paquetes de datos. Los receptores pueden conectarse a diferentes subconjuntos de los núcleos soma 102, y estos subconjuntos pueden seleccionarse para asegurarse que todos los núcleos soma 102 estén conectados. Idealmente, los subconjuntos pueden seleccionarse para reducir o minimizar el "diámetro" de la red, donde el diámetro de una red se refiere a la distancia máxima (el número de núcleos soma 102 que deben atravesarse para alcanzar un objetivo) entre dos núcleos 102. Dado un límite superior fijo en el número de conexiones por núcleo soma 102, una arquitectura de hipercubo de ese grado podría minimizar el diámetro.
Para garantizar que todos los núcleos soma 102 reciban datos y distribuyan transmisiones a través de tantas conexiones individuales como sea posible, podrían usarse varios enfoques. Por ejemplo, los algoritmos bien conocidos pueden tener en cuenta el índice de un núcleo soma 102 emisor y el enlace del que se recibieron los datos. En esos casos, los datos de cada núcleo soma 102 pueden enviarse en un patrón fijo, pero el patrón puede ser diferente para los núcleos soma 102 individuales, maximizando la utilización de las conexiones. Este enfoque también permite la eliminación de una localización de partida central para cada red, ya que cada núcleo soma 102 podría simplemente comunicarse con vecinos seleccionados y los vecinos podrían reenviar datos si fuese necesario. Uno o más núcleos soma 102 en una red podrían ser responsables de enviar datos a otros grupos soma, y diferentes grupos soma 102 pueden ser responsables de las comunicaciones con diferentes grupos soma.
También pueden usarse algoritmos dinámicos. Por ejemplo, cada paquete recibido puede reenviarse desde un núcleo soma 102 a todos los colindantes (excepto el núcleo soma 102 que envía el paquete). Cada núcleo soma 102 colindante podría entonces realizar un seguimiento de si ya ha visto el paquete. Si es así, el paquete simplemente puede descartarse. Si no, el coprocesador de sinapsis 112 para el núcleo soma 102 colindante recibe y reenvía el paquete. Una ventaja de este enfoque es que la red puede inundarse por completo más rápidamente. Otra ventaja de este enfoque es que la integración de varios grupos soma en el diseño es más sencilla. Cambiar una arquitectura de bus 1:N (que nunca tiene que comprobar los conflictos del remitente) a una arquitectura S:N puede ser un gran paso. Si un núcleo soma 102 de un grupo soma reenvía un paquete a otro núcleo soma 102 en otro grupo soma, este último puede considerar el paquete similar a como consideraría cualquier otro paquete entrante. De hecho, el enlace del núcleo inter-soma puede considerarse como conexiones de grupo inter-soma intra-soma normales.
Como se ha indicado anteriormente, pueden usarse una serie de instrucciones nuevas para facilitar el uso de los coprocesadores de sinapsis 112 y los reductores 115. Estas instrucciones incluyen instrucciones ejecutadas por los núcleos soma 102, así como instrucciones proporcionadas y ejecutadas por los coprocesadores de sinapsis 112 y los reductores 115. A continuación se presentan ejemplos de los tipos de nuevas instrucciones que pueden usarse para admitir las nuevas arquitecturas de hardware. Tener en cuenta que, aunque a continuación se describen instrucciones específicas, pueden admitirse otras instrucciones o instrucciones adicionales en una arquitectura de hardware según sea necesario o se desee.
La Tabla 1 ilustra instrucciones de ejemplo que podrían ser ejecutadas por un núcleo soma 102 y los coprocesadores de sinapsis. En la Tabla 1, oreg indica un registro de núcleo soma (como en el dispositivo de memoria 106) e yreg denota un registro de coprocesador de sinapsis (como en el dispositivo de memoria 114).
Tabla 1
Figure imgf000012_0001
continuación
Figure imgf000013_0001
La Tabla 2 ilustra operaciones de ejemplo que podrían ser ejecutadas por un reductor 115. Las operaciones de reducción podrían tomar muchos ciclos logarítmicamente, por lo que las operaciones de reducción podrían beneficiarse de canalizar múltiples de tal es operaciones en diferentes niveles de árbol.
Tabla 2
Figure imgf000013_0002
En algunas realizaciones, cada coprocesador de sinapsis 112 puede realizar operaciones SIMD. Cada núcleo soma 102 puede cargar, antes de las comunicaciones de datos en un canal específico, secuencias de instrucciones para ese canal en un coprocesador de sinapsis 112 local. Además, cada núcleo soma 102 puede cargar secuencias de instrucciones para ese canal en todos sus coprocesadores de sinapsis 112 por emisión. El núcleo soma 102 puede además programar en el reductor 115 la operación que debería realizarse una vez que los datos de entrada necesarios estén disponibles. La Tabla 3 ilustra ejemplos de los tipos de instrucciones que podrían cargarse en los coprocesadores 112 de sinapsis para su ejecución.
Tabla 3
Figure imgf000013_0003
Las arquitecturas de hardware descritas anteriormente pueden acelerar una amplia clase de algoritmos en aprendizaje automático, computación científica, videojuegos y otras áreas. En base a los tipos de instrucciones anteriores, a continuación se describe cómo pueden acelerarse y resolverse seis tipos de problemas de ejemplo usando las arquitecturas de hardware descritas en este documento de patente.
Como primer ejemplo, un algoritmo usado en el aprendizaje profundo que puede ser acelerado por las arquitecturas propuestas es la codificación dispersa. En su forma más simple, la codificación dispersa toma un vector de entrada normalizado x con ||x|| = 1 y calcula un vector de salida disperso normalizado y que minimiza la energía e, que se define como:
Figure imgf000014_0001
Aquí, F es una matriz factorial y ||y|| = 1. Además, Hyllí1 denota una suma de los valores absolutos de las entradas en y, y A es una constante que controla la dispersión de la salida. En el modo de aprendizaje no supervisado, la matriz de factores F se elige para minimizar la suma E de las energías a través de un conjunto de entradas de entrenamiento x¡. Una manera de lograr ambas minimizaciones es el descenso de gradiente, con los gradientes negativos definidos como:
^ y E ^ - f y . - F x J Ásgn yt (3)
Figure imgf000014_0002
seguido de la imposición de las restricciones ||yi|| = 1. Aquí, sgn y denota un vector de signos de las entradas en y.
Para calcular (y - Fx), las entradas de entrenamiento x y las salidas y pueden residir en una memoria soma local o virtual compartida. Las entradas de la matriz factorial F (que no es dispersa) pueden residir en registros de los coprocesadores de sinapsis 112. Específicamente, la entrada Fjk de la matriz factorial F puede residir en un registro del krésimo coprocesador de sinapsis 112 para el j -ésimo núcleo soma 102. Las instrucciones SIMD transmitidas por los núcleos soma 102 a sus coprocesadores de sinapsis 112 pueden usar direccionamiento relativo de tal manera que, simultáneamente a través de los núcleos soma 102, el k-ésimo núcleo soma 102 puede transmitir la entrada de entrada xk al k-ésimo coprocesador de sinapsis 112 del j -ésimo núcleo soma 102. El k-ésimo coprocesador de sinapsis del j -ésimo núcleo soma 102 en modo SIMD realiza la multiplicación Fjkxk, que luego se suma en tiempo logarítmico por el reductor 115 del j -ésimo núcleo soma 102 a través de los coprocesadores de sinapsis 112 de ese núcleo soma para producir (Fx) y por lo tanto la j -ésima entrada (y-Fx)j.
Para calcular el descenso del gradiente para F, la entrada Fjk se incrementa proporcionalmente a (y-Fx)/xk. El j-és¡mo núcleo soma 102 acaba de calcular (y-Fx)j, y su k-ésimo coprocesador de sinapsis 112 ha recibido el valor xk más reciente y lo ha almacenado en un registro del coprocesador de sinapsis 112. Por tanto, el j -ésimo núcleo soma 102 transmite (y-Fx) a su k-ésimo coprocesador de sinapsis 112, que luego en forma SIMD multiplica el resultado por el valor xk almacenado y suma un múltiplo de ese valor al valor de Fjk almacenado en ese coprocesador de sinapsis 112.
Para expresar esto en pseudocódigo, puesto que los núcleos soma 102 son núcleos de instrucción múltiple, de datos múltiples (MIMD), se adopta una convención en la que i representa el índice del núcleo soma 102 en el que se coloca la instrucción. Debido a MIMD, las instrucciones pueden ser parametrizadas por i. Por el contrario, como los coprocesadores de sinapsis 112 podrían ser núcleos SIMD, los núcleos soma 102 pueden transmitir la misma secuencia de instrucciones a todos sus coprocesadores de sinapsis 112. Para mayor claridad, los registros están etiquetados con nombres de variables en lugar de números de registro. Dadas estas convenciones, el problema de la codificación dispersa para el aprendizaje profundo puede resolverse usando la arquitectura de hardware de la siguiente manera.
send x —»cid1
synapse cid1 {
recv — x
multiply F x — y'
return y'
} reduce add recv cid1 — y'
y - y' — dy
store dy — cid2
synapse cid2 {
recv — dy
multiply dy x — dF
multiply dF -e — dF
add F dF — F
}
Como segundo ejemplo, otro algoritmo usado en el aprendizaje profundo que puede ser acelerado por las arquitecturas propuestas implica máquinas de Boltzmann restringidas. En este tipo de red, un vector de entrada x de valor {-1,1} y un vector de salida y pueden relacionarse probabilísticamente mediante una distribución de Boltzmann de la siguiente manera:
e - E ( x . y )
P(x,y) = —¿ - (5)
Aquí, Z es una función de partición y la energía E(x,y) en su forma más simple puede expresarse como:
Figure imgf000015_0001
Esta red está "restringida" en el sentido de que las salidas son condicionalmente independientes dadas las entradas y viceversa. Esto significa que, dadas las entradas, las salidas pueden muestrearse independientemente con una probabilidad expresada como:
Figure imgf000015_0002
donde a(x) es una función logística. El algoritmo de entrenamiento no supervisado de divergencia contrastiva para esta red toma un gradiente para un acoplamiento F que es:
VF = y'®x'-y ® x (8)
donde x es una entrada de entrenamiento, y se muestrea a partir de x como se ha explicado anteriormente, x' se muestrea de y e y' se muestrea de x'.
Para implementar este problema, las entradas de entrenamiento xk y las salidas y pueden residir en una memoria soma local o virtual compartida. Los acoplamientos Fjk pueden residir en registros de los coprocesadores de sinapsis 112. Específicamente, cada acoplamiento Fjk puede residir en un registro del krésimo coprocesador de sinapsis 112 del j -ésimo núcleo soma 102. Para explicar cómo se acelera este algoritmo, se explica primero el paso de muestreo. Dado un vector de entrada x , a través de la comunicación SIMD simultáneamente a través de los núcleos soma 102, el k-ésimo núcleo soma 102 transmite la entrada de entrada xk al k-ésimo coprocesador de sinapsis del 112 j -ésimo núcleo soma 102. El k-ésimo coprocesador de sinapsis 112 del j -ésimo núcleo soma 102 realiza luego, en modo SIMD, la multiplicación Fjkxk que luego se suma en tiempo logarítmico por el reductor 115 del j -ésimo núcleo soma 102 a través de los coprocesadores de sinapsis 112 de ese núcleo soma para proporcionar lkFjkxk. El j -ésimo núcleo soma 102 calcula luego la función logística de esta suma y la usa como una probabilidad para muestrear aleatoriamente y de { -1,1 }.
A continuación, se produce el cálculo del gradiente. Comenzando con la entrada de entrenamiento x, se realiza el paso de muestreo como se ha descrito anteriormente tres veces para proporcionar y en el j -ésimo núcleo soma 102, x' en el k-ésimo núcleo soma 102 e y' en el j -ésimo núcleo soma 102. El j -ésimo núcleo soma 102 transmite y e (y ) a todos sus coprocesadores de sinapsis 112 para almacenarlos en registros ahí. Luego, se usa la comunicación de ancho de banda grande para transmitir simultáneamente (x')k desde el k-ésimo núcleo soma 102 al k-ésimo coprocesador de sinapsis 112 de cada núcleo soma 102. Finalmente, el k-ésimo coprocesador de sinapsis 112 del j -ésimo núcleo soma 102 calcula (y'y(x')k- yxk y resta un múltiplo de esto del valor Fjk que mantiene.
En pseudocódigo, el algoritmo de muestreo directo puede expresarse como:
send x ^ cid
synapse cid {
recv ^ x
multiply F x ^ y’
return y'
} reduce add
recv cid ^ y'
°(y’) ^ p
if(rand() < p) then y = 1 else y = -1 endif
El muestreo inverso puede ser análogo. Dado el muestreo, el algoritmo de gradiente puede expresarse como:
forward sample x ^ y (keep x in synapse register)
backward sample y ^ x' (keep y in synapse register)
forward sample x' ^ y' (keep x' in synapse register)
store y' ^ cid2
synapse cid2 {
recv ^ y'
multiply y' x' ^ yx'
multiply y x -1 ^ yx
add yx' yx ^ dF
multiply dF -e ^ dF
add F dF ^ F
}
Como tercer ejemplo, un método diferente de aprendizaje automático que puede beneficiarse de una mejor comunicación es el agrupamiento jerárquico. El método de agrupamiento jerárquico más simple comienza con cada elemento en su propio grupo. Luego, en cada nivel de jerarquía, el método de agrupamiento jerárquico agrupa los dos grupos separados por la distancia mínima más pequeña en un solo grupo.
El primer paso de un método de agrupamiento jerárquico mejorado implica calcular una matriz inicial de distancias entre los agrupamientos. Cada núcleo soma 102 activo puede representar un grupo, y sus coprocesadores de sinapsis 112 pueden almacenar las distancias al cuadrado a otros grupos. En una primera iteración, cada grupo es un único elemento, por lo que cada núcleo soma 102 activo transmite las coordenadas de su elemento a los coprocesadores de sinapsis 112 correspondientes de los otros núcleos soma 102, y sus coprocesadores de sinapsis 112 calculan en paralelo las distancias al cuadrado de los otros elementos a su propio elemento. El segundo paso del método de agrupamiento jerárquico mejorado implica encontrar la distancia mínima al cuadrado entre los agrupamientos. Cada núcleo soma 102 (a través de su reductor 115) reduce las distancias al cuadrado de sus propios coprocesadores de sinapsis usando la operación mínima, y cada núcleo soma 102 emite este número a todos los núcleos soma 102, que reducen de nuevo los valores (a través de sus reductores 115) con una operación mínima. La segunda operación mínima produce en todos los núcleos soma 102 el mismo resultado, suponiendo que haya un desempate predecible en casos de valores iguales (como seleccionar el valor del núcleo de sinapsis de índice más bajo). Una alternativa es realizar la segunda operación mínima en un núcleo soma 102 y transmitir el resultado a todos los demás núcleos soma 102.
El tercer paso del método de agrupamiento jerárquico mejorado implica encontrar los dos agrupamientos que están separados por esta distancia mínima. El núcleo soma 102 correspondiente al mejor grupo calcula la distancia mínima a un núcleo soma 102 que no sea él mismo, y este siguiente mejor grupo se transmite luego de vuelta a todos los núcleos soma 102. El cuarto paso del método de agrupamiento jerárquico mejorado implica combinar los dos grupos elegidos en un único grupo. Cada núcleo soma 102 toma el mínimo de sus distancias al mejor y al mejor grupo siguiente, almacena la distancia mínima de vuelta en el coprocesador de sinapsis 112 correspondiente al mejor grupo y transmite la distancia mínima en el canal de este núcleo soma. El núcleo soma 102 correspondiente al mejor grupo hace que todos sus coprocesadores de sinapsis 112 reemplacen sus distancias con las de transmisión. Finalmente, el mejor núcleo soma 102 siguiente y sus coprocesadores de sinapsis 112 correspondientes se eliminan del cálculo. Luego se repiten los pasos del segundo al cuarto hasta que haya un solo grupo.
En pseudocódigo, el primer paso para calcular la matriz de distancia al cuadrado (que se repite para cada coordenada) puede expresarse como:
send -x ^ cid
synapse cid {
recv ^ x'
add x x' ^ dx // x is the local cluster's coordinate
multiply dx dx ^ dx
add dist dx ^ dist
return dist
} reduce min
recv cid ^ mindist
El segundo paso para encontrar la distancia mínima entre grupos puede expresarse como:
send mindist ^ cid2
synapse cid2 {
recv ^ mindist ; id ^ cluster
return mindist, cluster
} reduce min
recv cid2 ^ allmindst, mincluster
El tercer paso de encontrar los dos grupos separados por la distancia mínima puede expresarse como:
if(mincluster == id) then
store -mincluster ^ cid3
synapse cid3 {
recv ^ mincluster
id ^ cluster
add cluster mincluster ^ notmin
if notmin then dist else ~ ^ mindist
return mindist, cluster
} reduce min
recv cid3 ^ dummy, nextcluster
send nextcluster ^ cid4
else
send 0 ^ cid4
endif
synapse id {
recv ^ nextcluster
} reduce one mincluster
recv cid5 ^ nextcluster
store -mincluster ^ cid6
synapse cid6 {
recv ^ mincluster
id ^ cluster
add cluster mincluster ^ notmin
return dist
} reduce one mincluster
recv cid6 ^ mindist
store -nextcluster ^ cid7
synapse cid7 {
recv ^ nextcluster
add cluster nextcluster ^ notnext
return dist
} reduce one nextcluster
recv cid7 ^ nextdist
mindist = min(mindist, nextdist)
El cuarto paso de combinar los dos grupos más cercanos (y desactivar uno de ellos) puede expresarse como:
store mindist ^ cid8
synapse cid8 {
recv ^ mindist
if notmin then dist else mindist ^ dist
if notnext then dist else ~ ^ dist
}
send mindist ^ cid9
if(mincluster == id) then
synapse cid9 { recv ^ dist}
elif(nextcluster == id) then
synapse cid9 { recv ^ dummy; ~ ^ dist}
else
synapse cid9 { recv ^ dummy }
endif
Como cuarto ejemplo, otro método de aprendizaje automático popular implica redes bayesianas, que descomponen una función de probabilidad conjunta complicada de muchas variables en un producto de probabilidades condicionales, cada una de las cuales implica solo una pequeña cantidad de variables (hasta el grado de entrada de la red). El problema entonces es calcular la distribución marginal de cada variable. En una arquitectura en serie estándar, esto puede lograrse usando el algoritmo de propagación de creencias, que lleva un tiempo proporcional a:
Variables x Grado de entrada x 2Grado Ae entmda (9)
Este algoritmo calcula iterativamente el número anterior de productos y luego calcula sumas de Variables x de grado de entrada de 2Gradodeentrada de tales productos cada uno.
Usando las nuevas arquitecturas de hardware, esto puede lograrse en tiempo constante siempre que haya núcleos soma 102 y coprocesadores de sinapsis 112 adecuados. El abanico de entrada en cualquier núcleo soma 102 es solo 2grado de entrada, por lo que no satura las comunicaciones. Para calcular los productos, se puede o acumular sumas de registros (donde las operaciones exp y log se realizan en los núcleos soma 102) o expandir los métodos de acumulación disponibles del reductor 115 para incluir productos además de sumas.
Como quinto ejemplo, otras aplicaciones no relacionadas con la inteligencia artificial que podrían acelerarse con las arquitecturas incluyen la simulación molecular y la realidad virtual. Para estas aplicaciones, se supone que los coprocesadores de sinapsis 112 tienen hardware para una operación de raíz cuadrada recíproca
Figure imgf000018_0001
además de la multiplicación y la suma. El paso costoso en ambas aplicaciones es similar. Centrándonos en la simulación molecular, se trata del cálculo del potencial de Coulomb:
Figure imgf000018_0002
donde qj es la j-ésima carga y rjk es la distancia entre la j-ésima y la k-ésima carga. La comunicación de ancho de banda grande se encarga de transmitir simultáneamente las coordenadas de la k-ésima carga desde el k-ésimo núcleo soma 102 al k-ésimo coprocesador de sinapsis del j -ésimo núcleo soma 102 a través de todos los j y k. En cada coprocesador de sinapsis 112, se usan sumas y multiplicaciones para calcular rjk2 y luego se usa la raíz cuadrada recíproca para calcular 1/rjk. Finalmente, la suma es calculada por el j -ésimo núcleo soma 102 usando un acumulador (el reductor 115) a través de sus coprocesadores de sinapsis 112.
Como sexto ejemplo, otra clase de algoritmos que pueden acelerarse de tiempo cuadrático a tiempo constante mediante las arquitecturas propuestas implica algoritmos geométricos, como los algoritmos de casco convexo. Es posible que estos algoritmos no requieran las capacidades no lineales de las arquitecturas propuestas y solamente se basen en las capacidades de procesamiento matricial de las arquitecturas propuestas. Se ha demostrado que un paso clave de estos algoritmos en grandes dimensiones es el cálculo de determinantes dinámicos. Este cálculo puede realizarse en serie en tiempo cuadrático mediante multiplicaciones de matricesvectores. Sin embargo, estas multiplicaciones pueden reducirse a tiempo constante usando las arquitecturas propuestas.
Tener en cuenta que estos ejemplos se proporcionan anteriormente simplemente para demostrar cómo pueden resolverse soluciones particulares a problemas particulares usando las arquitecturas de hardware descritas en este documento de patente. Por supuesto, las arquitecturas de hardware podrían usarse para realizar otras funciones. Además, los problemas particulares descritos anteriormente podrían resolverse usando otras soluciones implementadas usando las arquitecturas de hardware.
Las arquitecturas de hardware y las instrucciones/operaciones asociadas descritas en este documento de patente pueden proporcionar varias ventajas sobre los enfoques anteriores, dependiendo de la implementación. Por ejemplo, esta divulgación proporciona arquitecturas de hardware que (si se implementan con un número adecuado de componentes) permiten que las arquitecturas compitan con las capacidades del cerebro humano. Además, las funcionalidades de las arquitecturas de hardware pueden usarse para mejorar otros campos de la computación, como la inteligencia artificial, el aprendizaje profundo, la simulación molecular y la realidad virtual.
En algunas realizaciones, varias funciones descritas en este documento de patente son implementadas o respaldadas por un programa informático que se forma a partir de un código de programa legible por ordenador y que se incorpora en un medio legible por ordenador. La frase "código de programa legible por ordenador" incluye cualquier tipo de código informático, incluyendo el código fuente, el código objeto y el código ejecutable. La frase "medio legible por ordenador" incluye cualquier tipo de medio al que pueda acceder un ordenador, como la memoria de solo lectura (ROM), la memoria de acceso aleatorio (RAM), una unidad de disco duro, un disco compacto (CD), un disco de video digital (DVD), o cualquier otro tipo de memoria. Un medio legible por ordenador "no transitorio" excluye los enlaces de comunicación alámbricos, inalámbricos, ópticos u otros que transportan señales eléctricas o de otro tipo transitorias.
Puede ser ventajoso establecer definiciones de ciertas palabras y frases usadas a lo largo de este documento de patente. Los términos "aplicación" y "programa" se refieren a uno o más programas informáticos, componentes de software, conjuntos de instrucciones, procedimientos, funciones, objetos, clases, casos, datos relacionados o una parte de los mismos adaptados para su implementación en un código informático adecuado (incluyendo el código fuente, el código objeto o el código ejecutable). El término "comunicar", así como derivados del mismo, abarca tanto la comunicación directa como la indirecta. Los términos "incluir' y "comprender', así como derivados de los mismos, significan la inclusión sin limitación. El término "o" es inclusivo, lo que significa y/o. La frase "asociado con", así como los derivados del mismo, puede significar incluir, estar incluido dentro, interconectar con, contener, estar contenido dentro, conectar a o con, emparejar a o con, ser comunicable con, cooperar con, intercalar, yuxtaponer, estar próximo a, estar unido a o con, tener, tener una propiedad de, tener una relación con, o similares. La frase "por lo menos uno de", cuando se usa con una lista de elementos, significa que pueden usarse diferentes combinaciones de uno o más de los elementos enumerados y que solo puede ser necesario un elemento de la lista. Por ejemplo, "por lo menos uno de: A, B y C" incluye cualquiera de las siguientes combinaciones: A, B, C, A y B, A y C, B y C, y A y B y C.
Aunque esta divulgación ha descrito ciertas realizaciones y métodos generalmente asociados, las alteraciones y permutaciones de estas realizaciones y métodos serán evidentes para los expertos en la técnica. Por consiguiente, la descripción anterior de realizaciones de ejemplo no define ni restringe esta divulgación. También son posibles otros cambios, sustituciones y alteraciones sin apartarse del alcance de la invención, tal como se define en las reivindicaciones siguientes.

Claims (17)

REIVINDICACIONES
1. Un aparato (110) que comprende:
múltiples núcleos de computación paralelos (102), cada núcleo de computación (102) configurado para realizar una o más operaciones de procesamiento y generar datos de entrada;
múltiples conjuntos de coprocesadores paralelos (112), cada núcleo de computación (102) asociado con uno diferente de los conjuntos, cada núcleo de computación (102) configurado para proporcionar los datos de entrada generados por ese núcleo de computación (102) a uno de los coprocesadores (112) en cada uno de los conjuntos, los coprocesadores (112) en cada conjunto configurados para procesar los datos de entrada y generar datos de salida; y
múltiples circuitos reductores (115), cada circuito reductor (115) asociado con uno diferente de los núcleos de computación (102) y uno diferente de los conjuntos de coprocesadores (112), cada circuito reductor (115) configurado para recibir los datos de salida de cada uno de los coprocesadores (112) del conjunto asociado, para aplicar una o más funciones a los datos de salida, y proporcionar uno o más resultados al núcleo de computación asociado (102);
en donde los núcleos de computación (102), los coprocesadores (112) y los circuitos reductores (115) están configurados para comunicarse a través de múltiples canales; y
en donde los coprocesadores (112) y los circuitos reductores (115) están configurados para variar las operaciones realizadas por los coprocesadores (112) y los circuitos reductores (115) en base al canal por el que se reciben los datos de entrada específicos.
2. El aparato de la reivindicación 1, que comprende además múltiples líneas de comunicación (122, 124) y en donde los núcleos de computación (102), los coprocesadores (112), los circuitos reductores (115) y las líneas de comunicación (122, 124) están localizados en múltiples capas de un chip de circuito integrado.
3. El aparato de la reivindicación 1, en donde los núcleos de computación (102) están completamente conectados porque cada núcleo de computación (102) es capaz de comunicarse directamente con todos los demás núcleos de computación (102) a través de múltiples líneas de comunicación (122, 124) y los coprocesadores (112).
4. El aparato de la reivindicación 1, en donde cada uno de los núcleos de computación (102) está configurado para ejecutar instrucciones que admiten por lo menos uno de:
operaciones de envío de baja latencia a través de líneas de comunicación (122, 124);
enviar datos de entrada al conjunto asociado de coprocesadores (112) del núcleo de computación; y programar los coprocesadores (112) asociados del núcleo de computación.
5. El aparato de la reivindicación 1, en donde cada uno de los coprocesadores (112) está configurado para ejecutar instrucciones que admiten por lo menos uno de:
recibir y procesar datos de entrada en una secuencia específica;
realizar una o más operaciones programables en datos de entrada recibidos y parámetros almacenados; y enviar datos de salida a un circuito reductor (115), y opcional o preferiblemente,
en donde la una o más operaciones programables incluyen una o más de: suma, multiplicación, mínimo, máximo, raíz cuadrada inversa, selección de un valor en base a un valor de prueba y salida de un identificador de coprocesador único.
6. El aparato de la reivindicación 1, donde cada uno de los circuitos reductores (115) está configurado para ejecutar instrucciones que admiten por lo menos uno de:
recibir datos de salida de los coprocesadores (112) del conjunto asociado en paralelo;
realizar una o más operaciones programables en los datos de salida recibidos; y
enviar uno o más resultados al núcleo de computación (102) asociado, y opcional o preferiblemente, en donde una o más operaciones programables incluyen una o más de: suma, mínimo, máximo y selección de un valor.
7. El aparato de la reivindicación 1, que comprende además múltiples líneas de comunicación (122, 124) y en donde los coprocesadores (112) y las líneas de comunicación (122, 124) forman múltiples canales de comunicación entre los núcleos de computación (102).
8. El aparato de la reivindicación 1, en donde el resultado de cada circuito reductor (115) se define como:
Figure imgf000020_0001
dónde:
y denota el resultado del circuito reductor (115) asociado a un núcleo de computación específico j;
Vj denota una función realizada por el circuito reductor (115) asociado con el núcleo de computación específico j; 0 j denota una función realizada por los coprocesadores (112) asociados con el núcleo de computación específico j ;
Xi indica una entrada generada por un i-ési^ núcleo de computación (102);
pij denota una o más variables de estado o locales; y
N denota una cantidad de núcleos de computación y, opcional o preferiblemente,
en donde Vj y 0 j representan funciones seleccionables del circuito reductor (115) y los coprocesadores (112), respectivamente.
9. El aparato de la reivindicación 1, en donde:
los núcleos de computación (102) forman un primer grupo de núcleos de computación;
el aparato comprende además por lo menos un grupo adicional de núcleos de computación; y
los coprocesadores (112) están configurados para recibir datos de entrada desde por lo menos un grupo adicional de núcleos de computación.
10. Un sistema que comprende:
múltiples dispositivos de circuitos integrados, cada dispositivo de circuito integrado comprendiendo un aparato (110) de acuerdo con cualquiera de las reivindicaciones 1 a 9; y
por lo menos una conexión de alta velocidad que acopla por lo menos algunas de las múltiples líneas de comunicación (122, 124) en los dispositivos de circuito integrado.
11. Un método que comprende:
generar datos de entrada usando múltiples núcleos de computación paralelos (102), cada núcleo de computación (102) configurado para realizar una o más operaciones de procesamiento, y cada uno de los núcleos de computación (102) asociado con un conjunto diferente de múltiples conjuntos de coprocesadores paralelos (112); para cada núcleo de computación (102), proporcionar los datos de entrada de ese núcleo de computación (102) a uno de los coprocesadores (112) en cada uno de los conjuntos, los coprocesadores (112) en cada conjunto configurados para procesar los datos de entrada y generar salida datos; y
reducir los datos de salida usando múltiples circuitos reductores (115), cada circuito reductor (115) asociado con uno diferente de los núcleos de computación (102) y uno diferente de los conjuntos de coprocesadores (112), cada circuito reductor (115) configurado para recibir los datos de salida de cada uno de los coprocesadores (112) del conjunto asociado, aplicar una o más funciones a los datos de salida y proporcionar uno o más resultados al núcleo de cómputo (102) asociado;
en donde los núcleos de computación (102), los coprocesadores (112) y los circuitos reductores (115) se comunican a través de múltiples canales; y
en donde el procesamiento de los datos de entrada y la reducción de los datos de salida varían en base al canal por el que se reciben los datos de entrada específicos.
12. El método de la reivindicación 11, en donde múltiples líneas de comunicación (122, 124) transportan los datos de entrada desde los núcleos de computación (102) a los coprocesadores (112).
13. El método de la reivindicación 11, que comprende además el uso de cada uno de los núcleos de computación (102) para ejecutar instrucciones que admiten por lo menos uno de:
operaciones de envío de baja latencia a través de líneas de comunicación (122, 124);
enviar datos de entrada al conjunto asociado de coprocesadores (112) del núcleo de computación; y programar el conjunto asociado de coprocesadores (112) del núcleo de computación.
14. El método de la reivindicación 11, que comprende además usar cada uno de los coprocesadores (112) para ejecutar instrucciones que admiten por lo menos uno de:
recibir y procesar datos de entrada en una secuencia específica;
realizar una o más operaciones programables en datos de entrada recibidos y parámetros almacenados; y enviar datos de salida a un circuito reductor (115), y opcional o preferiblemente,
en donde la una o más operaciones programables incluyen una o más de: suma, multiplicación, mínimo, máximo, raíz cuadrada inversa, selección de un valor en base a un valor de prueba y salida de un identificador de coprocesador único.
15. El método de la reivindicación 11, que comprende además usar cada uno de los circuitos reductores (115) para ejecutar instrucciones que admiten por lo menos uno de:
recibir datos de salida desde los coprocesadores (112) del conjunto asociado en paralelo;
realizar una o más operaciones programables en los datos de salida recibidos; y
enviar uno o más resultados al núcleo de computación (102) asociado, y opcional o preferiblemente, en donde una o más operaciones programables incluyen una o más de: suma, mínimo, máximo y selección de un valor.
16. El método de la reivindicación 11, en donde un resultado de cada reducción de los datos de salida de los coprocesadores (112) asociados con uno de los núcleos de computación (102) se define como:
Figure imgf000022_0001
dónde:
y denota el resultado de la reducción asociada con un núcleo de computación específico j;
0j denota una función realizada durante la reducción asociada con el núcleo de computación específico j;
0 j denota una función realizada por los coprocesadores (112) asociados con el núcleo de computación específico j ;
Xi indica una entrada de un r ésimo núcleo de computación (102);
pij denota una o más variables de estado o locales; y
N denota un número de núcleos de computación (102).
17. El método de la reivindicación 11, en donde:
los núcleos de computación (102) y su conjunto asociado de coprocesadores (112) se dividen en grupos; y el conjunto de coprocesadores (112) asociados con cada núcleo de computación (102) recibe datos de entrada desde los núcleos de computación (102) en uno o más de los grupos.
ES16797170T 2015-05-21 2016-05-17 Arquitectura de computación paralela de propósito general Active ES2929626T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201562165052P 2015-05-21 2015-05-21
US201562173866P 2015-06-10 2015-06-10
PCT/US2016/032934 WO2016187232A1 (en) 2015-05-21 2016-05-17 General-purpose parallel computing architecture

Publications (1)

Publication Number Publication Date
ES2929626T3 true ES2929626T3 (es) 2022-11-30

Family

ID=57320620

Family Applications (1)

Application Number Title Priority Date Filing Date
ES16797170T Active ES2929626T3 (es) 2015-05-21 2016-05-17 Arquitectura de computación paralela de propósito general

Country Status (10)

Country Link
US (2) US10108580B2 (es)
EP (1) EP3298486B1 (es)
JP (3) JP6816027B2 (es)
CN (2) CN113641627A (es)
AU (3) AU2016264100B2 (es)
CA (1) CA2984155A1 (es)
ES (1) ES2929626T3 (es)
HK (1) HK1252999A1 (es)
TW (3) TWI747426B (es)
WO (1) WO2016187232A1 (es)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10366325B2 (en) * 2011-12-07 2019-07-30 Paul Burchard Sparse neural control
US11449452B2 (en) 2015-05-21 2022-09-20 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
JP6816027B2 (ja) 2015-05-21 2021-01-20 ゴールドマン サックス アンド カンパニー エルエルシー 多目的の並列処理アーキテクチャ
JP2018160180A (ja) * 2017-03-23 2018-10-11 富士通株式会社 情報処理システム、情報処理装置および情報処理システムの制御方法
CN110720095A (zh) * 2017-04-06 2020-01-21 高盛有限责任公司 通用并行计算架构
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
GB201904267D0 (en) * 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with multiple embedded rings
CN110516332B (zh) * 2019-08-15 2021-06-11 浪潮电子信息产业股份有限公司 并行计算结果的过滤方法及系统
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
WO2023171278A1 (ja) * 2022-03-09 2023-09-14 株式会社エヌエスアイテクス 演算装置及び演算方法
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
TW202416129A (zh) * 2022-10-10 2024-04-16 大陸商華為技術有限公司 資料處理方法及裝置、處理器、網路設備

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6112287A (en) * 1993-03-01 2000-08-29 Busless Computers Sarl Shared memory multiprocessor system using a set of serial links as processors-memory switch
US4965717A (en) 1988-12-09 1990-10-23 Tandem Computers Incorporated Multiple processor system having shared memory with private-write capability
EP0377221B1 (en) * 1988-12-29 1996-11-20 Sharp Kabushiki Kaisha Neuro-computer
US5247613A (en) * 1990-05-08 1993-09-21 Thinking Machines Corporation Massively parallel processor including transpose arrangement for serially transmitting bits of data words stored in parallel
JPH05242065A (ja) * 1992-02-28 1993-09-21 Hitachi Ltd 情報処理装置及びシステム
JP2561028B2 (ja) * 1994-05-26 1996-12-04 日本電気株式会社 サイドローブキャンセラ
US6023753A (en) * 1997-06-30 2000-02-08 Billion Of Operations Per Second, Inc. Manifold array processor
US6389404B1 (en) * 1998-12-30 2002-05-14 Irvine Sensors Corporation Neural processing module with input architectures that make maximal use of a weighted synapse array
US6588008B1 (en) * 2000-04-11 2003-07-01 International Business Machines Corporation Assembler tool for processor-coprocessor computer systems
US6829697B1 (en) * 2000-09-06 2004-12-07 International Business Machines Corporation Multiple logical interfaces to a shared coprocessor resource
DE10061998A1 (de) * 2000-12-13 2002-07-18 Infineon Technologies Ag Kryptographieprozessor
US6839808B2 (en) * 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
GB2378271B (en) * 2001-07-30 2004-12-29 Advanced Risc Mach Ltd Handling of coprocessor instructions in a data processing apparatus
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7612443B1 (en) 2003-09-04 2009-11-03 University Of Notre Dame Du Lac Inter-chip communication
US9292904B2 (en) * 2004-01-16 2016-03-22 Nvidia Corporation Video image processing with parallel processing
US20060179273A1 (en) 2005-02-09 2006-08-10 Advanced Micro Devices, Inc. Data processor adapted for efficient digital signal processing and method therefor
US7500083B2 (en) * 2005-08-15 2009-03-03 Silicon Informatics Accelerated processing with scheduling to configured coprocessor for molecular data type by service and control coprocessor upon analysis of software code
US20070204268A1 (en) 2006-02-27 2007-08-30 Red. Hat, Inc. Methods and systems for scheduling processes in a multi-core processor environment
JP5242065B2 (ja) 2007-02-22 2013-07-24 三菱重工環境・化学エンジニアリング株式会社 間接加熱式キルン
US8136071B2 (en) * 2007-09-12 2012-03-13 Neal Solomon Three dimensional integrated circuits and methods of fabrication
US8046727B2 (en) * 2007-09-12 2011-10-25 Neal Solomon IP cores in reconfigurable three dimensional integrated circuits
US7941637B2 (en) * 2008-04-15 2011-05-10 Freescale Semiconductor, Inc. Groups of serially coupled processor cores propagating memory write packet while maintaining coherency within each group towards a switch coupled to memory partitions
US8374986B2 (en) * 2008-05-15 2013-02-12 Exegy Incorporated Method and system for accelerated stream processing
US9063783B2 (en) 2008-11-24 2015-06-23 Red Hat, Inc. Coordinating parallel execution of processes using agents
WO2011091323A1 (en) * 2010-01-21 2011-07-28 Qst Holdings, Llc A method and apparatus for a general-purpose, multiple-core system for implementing stream-based computations
US8492886B2 (en) * 2010-02-16 2013-07-23 Monolithic 3D Inc 3D integrated circuit with logic
JP5776688B2 (ja) * 2010-04-30 2015-09-09 日本電気株式会社 情報処理装置及びタスク切り替え方法
US8949577B2 (en) * 2010-05-28 2015-02-03 International Business Machines Corporation Performing a deterministic reduction operation in a parallel computer
US20110314256A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Data Parallel Programming Model
US8359453B2 (en) 2010-09-13 2013-01-22 International Business Machines Corporation Real address accessing in a coprocessor executing on behalf of an unprivileged process
US8965834B2 (en) 2011-12-07 2015-02-24 Extendabrain Corporation Particle methods for nonlinear control
US20130304990A1 (en) 2012-05-08 2013-11-14 International Business Machines Corporation Dynamic Control of Cache Injection Based on Write Data Type
US9292569B2 (en) * 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
US9367357B2 (en) * 2013-01-18 2016-06-14 Nec Corporation Simultaneous scheduling of processes and offloading computation on many-core coprocessors
US9146777B2 (en) * 2013-01-25 2015-09-29 Swarm Technology Llc Parallel processing with solidarity cells by proactively retrieving from a task pool a matching task for the solidarity cell to process
BR112015017867A2 (pt) 2013-02-28 2018-12-18 Intel Corp aproveitamento de um mecanismo de enumeração e/ou configuração de um protocolo de interconexão para um protocolo de interconexão diferente
JP5660149B2 (ja) 2013-03-04 2015-01-28 日本電気株式会社 情報処理装置、ジョブスケジューリング方法およびジョブスケジューリングプログラム
US9497106B2 (en) * 2013-04-06 2016-11-15 Citrix Systems, Inc. Systems and methods for synchronizing MSS and PMTU in Ncore and cluster systems
US9606801B2 (en) * 2013-09-06 2017-03-28 Huawei Technologies Co., Ltd. Method and apparatus for asynchronous processor based on clock delay adjustment
CN104391821A (zh) * 2014-11-20 2015-03-04 天津大学 一种多核共享simd协处理器的系统级模型构建方法
US11449452B2 (en) 2015-05-21 2022-09-20 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
JP6816027B2 (ja) 2015-05-21 2021-01-20 ゴールドマン サックス アンド カンパニー エルエルシー 多目的の並列処理アーキテクチャ
US10210134B2 (en) 2015-05-21 2019-02-19 Goldman Sachs & Co. LLC General-purpose parallel computing architecture

Also Published As

Publication number Publication date
TW202201241A (zh) 2022-01-01
AU2021229205B2 (en) 2021-10-21
HK1252999A1 (zh) 2019-06-06
TWI792557B (zh) 2023-02-11
TWI704465B (zh) 2020-09-11
US20190026248A1 (en) 2019-01-24
CN107636638A (zh) 2018-01-26
AU2021229205A1 (en) 2021-10-07
EP3298486B1 (en) 2022-08-24
CN107636638B (zh) 2021-10-26
US20160342568A1 (en) 2016-11-24
JP2018518753A (ja) 2018-07-12
JP6816027B2 (ja) 2021-01-20
EP3298486A1 (en) 2018-03-28
WO2016187232A1 (en) 2016-11-24
EP3298486A4 (en) 2019-01-16
JP2021057076A (ja) 2021-04-08
JP2022046557A (ja) 2022-03-23
AU2020201520C1 (en) 2022-01-06
AU2020201520B2 (en) 2021-09-09
TWI747426B (zh) 2021-11-21
AU2016264100B2 (en) 2020-01-02
CA2984155A1 (en) 2016-11-24
US10810156B2 (en) 2020-10-20
JP7335312B2 (ja) 2023-08-29
CN113641627A (zh) 2021-11-12
TW201706870A (zh) 2017-02-16
TW202044059A (zh) 2020-12-01
US10108580B2 (en) 2018-10-23
AU2020201520A1 (en) 2020-03-19
AU2016264100A1 (en) 2017-11-09
JP6997285B2 (ja) 2022-01-17

Similar Documents

Publication Publication Date Title
ES2929626T3 (es) Arquitectura de computación paralela de propósito general
US11449452B2 (en) General-purpose parallel computing architecture
JP2023015205A (ja) 汎用並列コンピューティングアーキテクチャ
IJzerman et al. AivoTTA: An energy efficient programmable accelerator for CNN-based object recognition
US20220383080A1 (en) Parallel processing in a spiking neural network
Bowler et al. Physics on parallel computers Part 1: The new technology
Pechanek et al. An introduction to an array memory processor for application specific acceleration
Franz Multi-population PSO-GA hybrid techniques: integration, topologies, and parallel composition