ES2617303T3 - Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores - Google Patents

Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores Download PDF

Info

Publication number
ES2617303T3
ES2617303T3 ES11764399.9T ES11764399T ES2617303T3 ES 2617303 T3 ES2617303 T3 ES 2617303T3 ES 11764399 T ES11764399 T ES 11764399T ES 2617303 T3 ES2617303 T3 ES 2617303T3
Authority
ES
Spain
Prior art keywords
gpu
message
memory
task
instruction
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
ES11764399.9T
Other languages
English (en)
Inventor
Alexei V. Bourd
Colin Christopher Sharp
David Rigel Garcia Garcia
Chihong Zhang
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2617303T3 publication Critical patent/ES2617303T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Image Generation (AREA)

Abstract

Un aparato que comprende: medios para colocar (24) una pluralidad de comandos en una cola de comandos (32) en respuesta a la recepción de una o más instrucciones de puesta en cola desde un proceso (20) que se está ejecutando en un dispositivo anfitrión (12), caracterizado porque la pluralidad de comandos incluye un primer comando que instruye al dispositivo anfitrión (12) para transferir datos entre un primer espacio de memoria asociado con el dispositivo anfitrión (12) y un segundo espacio de memoria asociado con una unidad de procesamiento de gráficos, GPU (14), incluyendo la pluralidad de comandos además un segundo comando que instruye al dispositivo anfitrión (12) para iniciar la ejecución de una tarea (28) en la GPU (14); y porque el aparato comprende medios para pasar (30) uno o más mensajes entre el proceso que se está ejecutando en el dispositivo anfitrión (12) y una tarea (28) que se está ejecutando en la GPU (14) mientras la tarea (28) se está ejecutando en la GPU y en respuesta a la recepción de una o más instrucciones de paso de mensajes desde el proceso (20) que se está ejecutando en el dispositivo anfitrión (12).

Description

5
10
15
20
25
30
35
40
45
50
55
60
65
DESCRIPCION
Tecnicas de comunicacion entre procesadores en una plataforma informatica de multiples procesadores.
Campo tecnico
La divulgacion se refiere a plataformas informaticas y, mas particularmente, a plataformas informaticas que incluyen multiples procesadores
Antecedentes
Las plataformas informaticas que incluyen multiples procesadores se utilizan para mejorar el rendimiento de las aplicaciones que tienen requisitos de alta intensidad de calculo y/o requisitos de alto caudal de datos. Una plataforma informatica de multiples procesadores puede incluir una unidad de procesamiento central (CPU) de proposito general que puede actuar como un dispositivo anfitrion y uno o mas dispositivos informaticos que la CPU anfitriona puede utilizar para descargar las prestaciones de tareas intensivas en calculo, mejorando asi el rendimiento de todo el sistema. En algunos casos, uno o mas dispositivos informaticos pueden ser disenados especificamente para procesar ciertos tipos de tareas mas eficientemente que la CPU anfitriona, lo cual puede proporcionar mejoras adicionales de rendimiento para el sistema en general. Por ejemplo, los uno o mas dispositivos informaticos pueden ser disenados especificamente para ejecutar algoritmos paralelos mas eficazmente que la CPU anfitriona.
Un tipo de dispositivo informatico que se puede utilizar en un sistema informatico de multiples procesadores es una unidad de procesamiento de graficos (GPU). Tradicionalmente, las GPU incluian hardware de funcion fija que estaba disenado especificamente para la representacion en tiempo real de graficos en 3 dimensiones (3D) para un dispositivo de visualizacion, pero no era habitualmente programable, es decir, un programa compilado no se podia descargar a la GPU y ejecutar en la GPU. Mas recientemente, sin embargo, con el desarrollo de unidades de sombreado programables, gran parte de la arquitectura de la GPU se ha desplazado a una arquitectura programable que incluye muchos elementos de procesamiento en paralelo. La arquitectura programable permite que la GPU facilite la ejecucion, no solo de las operaciones de graficos, sino tambien de tareas de calculo de proposito general de una manera sumamente paralela.
El uso de una GPU para ejecutar tareas de calculo especificas sin graficos, de proposito general, puede denominarse en el presente documento calculo de proposito general en unidades de procesamiento de graficos (GPGPU) o, de forma alternativa, calculo de GPU. En algunos casos, las GPU puede dejar disponibles interfaces de programacion de aplicaciones (API), que no son especificas para graficos, facilitando de esta manera la programacion de la GPU para la ejecucion de tareas de calculo de proposito general. Las tareas de calculo de GPU pueden incluir tareas que son intensivas en calculos y/o que incluyen un alto grado de paralelismo, por ejemplo, calculos matriciales, calculos de procesamiento de senales, algoritmos estadisticos, aplicaciones de modelado molecular, aplicaciones financieras, formacion de imagenes medicas, aplicaciones de criptoanalisis, etc.
Una GPU es solo un tipo de dispositivo informatico que se puede utilizar en una plataforma informatica de multiples procesadores, y tambien pueden utilizarse otros tipos de dispositivos informaticos ademas o en lugar de una GPU. Por ejemplo, entre otros tipos de dispositivos informaticos que pueden utilizarse en una plataforma informatica de multiples procesadores se incluyen, por ejemplo, una CPU adicional, un procesador de senales digitales (DSP), un procesador Motor de Banda Ancha Celular (Cell / BE) o cualquier otro tipo de unidad de procesamiento.
Una plataforma informatica de multiples procesadores con multiples dispositivos informaticos puede ser una plataforma homogenea o una plataforma heterogenea. En una plataforma homogenea, todos los dispositivos informaticos comparten una arquitectura comun del conjunto de instrucciones (ISA). Por el contrario, una plataforma heterogenea puede incluir dos o mas dispositivos informaticos con diferentes ISA. En general, los diferentes tipos de dispositivos informaticos pueden tener diferentes ISA, y diferentes marcas de dispositivos informaticos del mismo tipo tambien puede tener diferentes ISA.
El rendimiento de una plataforma informatica de multiples procesadores puede mejorarse aun mas mediante la utilizacion de dispositivos informaticos de multiples nucleos y/o dispositivos informaticos de muchos nucleos. Un ejemplo de un dispositivo informatico de multiples nucleos es la GPU que se ha descrito anteriormente, que contiene una unidad de sombreado programable que tiene una pluralidad de nucleos de procesamiento. Las CPU, sin embargo, tambien pueden disenarse para incluir multiples nucleos de procesamiento. En general, cualquier chip o troquel que incluye multiples nucleos de procesamiento puede considerarse como un procesador de multiples nucleos. Un nucleo de procesamiento puede referirse a una unidad de procesamiento que es capaz de ejecutar una instruccion en un determinado conjunto de datos. Por ejemplo, una sola unidad logica y aritmetica (ALU) o un procesador vectorial dentro de una GPU puede considerarse como un nucleo de procesamiento. Los procesadores de muchos nucleos se refieren en general a los procesadores de multiples nucleos que tienen un numero relativamente alto de nucleos, por ejemplo, superior a diez nucleos y, por lo general, estan disenados utilizando tecnicas diferentes a las que se utilizan para disenar procesadores de multiples nucleos con un numero menor de
5
10
15
20
25
30
35
40
45
50
55
60
65
nucleos. Los procesadores de multiples nucleos proporcionan una mejora del rendimiento al permitir que un programa de software se ejecute en paralelo, por ejemplo, al mismo tiempo, en varios nucleos en un unico chip.
Un modelo de programacion en paralelo se refiere a un modelo de programacion que esta disenado para permitir que un programa se ejecute al mismo tiempo en multiples nucleos de procesamiento. El programa puede ser un programa de multiples hilos, en cuyo caso, un solo hilo puede funcionar en cada nucleo de procesamiento. En algunos ejemplos, un unico dispositivo informatico puede incluir la totalidad de los nucleos de procesamiento utilizados para ejecutar el programa. En otros ejemplos, algunos de los nucleos de procesamiento utilizados para ejecutar el programa pueden estar situados en diferentes dispositivos informaticos del mismo tipo o de un tipo diferente.
Se puede utilizar una interfaz de programacion de aplicaciones (API) del modelo de programacion en paralelo, de plataforma informatica heterogenea, para multiples plataformas y multiples proveedores, para proporcionar una especificacion de lenguaje comun para la programacion en paralelo de una plataforma informatica heterogenea, de multiples nucleos, que incluye diferentes tipos de dispositivos informaticos potencialmente fabricados por diferentes proveedores que implementan diferentes ISA. El Lenguaje Informatico Abierto (OpenCL™) es un ejemplo de una API de programacion en paralelo, de plataforma informatica heterogenea, de multiples plataformas y multiples proveedores. Tales API pueden estar disenadas para permitir un procesamiento de datos mas generalizado en una GPU. Por ejemplo, mas alla de la exposicion de las capacidades del subsistema de sombreado ampliado mediante un lenguaje informatico, estas API pueden generalizar el flujo de datos y los trayectos de control hacia la GPU de una manera especifica sin graficos. Actualmente, sin embargo, los conjuntos de instrucciones proporcionados por tales API se basan en la arquitectura de hardware de una GPU y, por lo tanto, estan limitadas a la funcionalidad que es compatible con arquitecturas de GPU existentes.
El documento US 6618759 se refiere a las operaciones de graficos tridimensionales en un entorno en red que tiene un anfitrion cliente y un anfitrion principal. El anfitrion cliente es capaz de emitir comandos de OpenGL para ser ejecutados por un anfitrion principal de forma inmediata. La patente divulga el almacenamiento en memoria cache de comandos de graficos en modalidad inmediata, en particular, proporcionando dos tipos de comandos de graficos en modalidad inmediata, un tipo de paquete de tamano completo que incluye un campo de codigo de memoria cache, un campo de indice de tabla y un campo de datos correspondiente al comando, y un tipo de paquete truncado que incluye solo el campo de codigo de memoria cache y el campo de indice de tabla. En el caso de que el comando ya haya sido almacenado dentro del servidor principal, solo el paquete truncado se envia al anfitrion servidor y el anfitrion servidor es capaz de ejecutar el comando recuperando el campo de datos previamente almacenado en respuesta al indice de tabla suministrado en el paquete truncado.
Sumario
Esta divulgacion describe las tecnicas de comunicacion que pueden utilizarse dentro de una plataforma informatica de multiples procesadores. Las tecnicas pueden, en algunos ejemplos, proporcionar interfaces de software que pueden utilizarse para prestar soporte al paso de mensajes dentro de una plataforma informatica de multiples procesadores que inicia las tareas utilizando las colas de comandos. Las tecnicas pueden, en ejemplos adicionales, proporcionar interfaces de software que pueden utilizarse para la comunicacion entre procesadores de memoria compartida dentro de una plataforma informatica de multiples procesadores. En ejemplos adicionales, las tecnicas pueden proporcionar una unidad de procesamiento de graficos (GPU), que incluye hardware para prestar soporte al paso de mensajes y/o a la comunicacion de memoria compartida entre la GPU y una CPU anfitriona.
De acuerdo con un primer aspecto de la presente invencion, se proporciona un aparato que comprende:
medios para colocar una pluralidad de comandos en una cola de comandos en respuesta a la recepcion de una o mas instrucciones de puesta en cola desde un proceso que se esta ejecutando en un dispositivo anfitrion, incluyendo la pluralidad de comandos un primer comando que instruye al dispositivo anfitrion para transferir datos entre un primer espacio de memoria asociado con el dispositivo anfitrion y un segundo espacio de memoria asociado con una unidad de procesamiento de graficos (GPU), incluyendo la pluralidad de comandos, ademas, un segundo comando que instruye al dispositivo anfitrion para iniciar la ejecucion de una tarea en la GPU; y
medios para hacer pasar uno o mas mensajes entre el proceso que se esta ejecutando en el dispositivo anfitrion y una tarea que se esta ejecutando en la GPU, mientras la tarea se esta ejecutando en la GPU, y en respuesta a la recepcion de una o mas instrucciones de paso de mensajes desde el proceso que se esta ejecutando en el dispositivo anfitrion.
De acuerdo con un segundo aspecto de la presente invencion, se proporciona un procedimiento que comprende:
la colocacion, con una interfaz de cola de comandos que se esta ejecutando en uno o mas procesadores de un dispositivo anfitrion, de una pluralidad de comandos en una cola de comandos, en respuesta a la recepcion de una o mas instrucciones de puesta en cola desde un proceso que se esta ejecutando en el dispositivo anfitrion, incluyendo la pluralidad de comandos un primer comando que instruye al dispositivo anfitrion para transferir datos entre un
5
10
15
20
25
30
35
40
45
50
55
60
65
primer espacio de memoria asociado con el dispositivo anfitrion y un segundo espacio de memoria asociado con una unidad de procesamiento de graficos (GPU), incluyendo la pluralidad de comandos, ademas, un segundo comando que instruye al dispositivo anfitrion para iniciar la ejecucion de una tarea en la GPU; y
el paso, con una interfaz de paso de mensajes que se esta ejecutando en los uno o mas procesadores del dispositivo anfitrion, de uno o mas mensajes entre el proceso que se esta ejecutando en el dispositivo anfitrion y una tarea que se esta ejecutando en la GPU, mientras la tarea se esta ejecutando en la GPU, y en respuesta a la recepcion de una o mas instrucciones de paso de mensajes desde el proceso en ejecucion en el dispositivo anfitrion.
De acuerdo con un tercer aspecto de la presente invencion, se proporciona un medio legible por ordenador que comprende instrucciones para hacer que uno o mas procesadores lleven a cabo el procedimiento de acuerdo con el segundo aspecto de la presente invencion.
Breve descripcion de los dibujos
La FIG. 1 es un diagrama de bloques que ilustra un sistema informatico ejemplar que puede utilizarse para llevar a cabo tecnicas de paso de mensajes de acuerdo con esta divulgacion.
La FIG. 2 es un diagrama de bloques que ilustra una GPU ejemplar que puede utilizarse en el sistema informatico de la FIG. 1 de acuerdo con esta divulgacion.
La FIG. 3 es un diagrama de flujo que ilustra una tecnica ejemplar para el paso de mensajes en un entorno de plataforma de multiples procesadores de acuerdo con esta divulgacion.
La FIG. 4 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de envio emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
Las FIGs. 5 y 6 son diagramas de flujo que ilustran tecnicas ejemplares que pueden utilizarse para implementar partes de la tecnica ilustrada en la FIG. 4 de acuerdo con esta divulgacion.
La FIG. 7 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de un mensaje recibido en un dispositivo informatico, por ejemplo, una GPU, de acuerdo con esta divulgacion.
La FIG. 8 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de recepcion emitida por una tarea que se esta ejecutando en un dispositivo informatico, por ejemplo, una GPU, de acuerdo con esta divulgacion.
Las FIGs. 9 y 10 son diagramas de flujo que ilustran tecnicas ejemplares que pueden utilizarse para implementar partes de la tecnica ilustrada en la FIG. 8 de acuerdo con esta divulgacion.
La FIG. 11 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de envio emitida por un proceso que se esta ejecutando en un dispositivo informatico, por ejemplo, una GPU, de acuerdo con esta divulgacion.
Las FIGs. 12 y 13 son diagramas de flujo que ilustran tecnicas ejemplares que pueden utilizarse para implementar partes de la tecnica ilustrada en la FIG. 11 de acuerdo con esta divulgacion.
La FIG. 14 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de registro de rutina de devolucion de llamada, emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
La FIG. 15 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de una interrupcion recibida desde un dispositivo informatico de acuerdo con esta divulgacion.
Las FIGs. 16 y 17 son diagramas de flujo que ilustran tecnicas ejemplares que pueden utilizarse para implementar partes de la tecnica ilustrada en la FIG. 15 de acuerdo con esta divulgacion.
La FIG. 18 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de lectura emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
La FIG. 19 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar partes de la tecnica ilustrada en la FIG. 18 de acuerdo con esta divulgacion.
La FIG. 20 es un diagrama de bloques que ilustra un sistema informatico ejemplar que puede facilitar el uso de objetos de memoria inmediata de acuerdo con esta divulgacion.
5
10
15
20
25
30
35
40
45
50
55
60
65
La FIG. 21 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
La FIG. 22 es un diagrama de flujo que ilustra otra tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
Las FIGs. 23 a 26 son diagramas de flujo que ilustran tecnicas ejemplares para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata, de acuerdo con esta divulgacion.
La FIG. 27 es un diagrama de bloques que ilustra una GPU ejemplar que puede utilizarse en el sistema informatico de la FIG. 20 de acuerdo con esta divulgacion.
La FIG. 28 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata de acuerdo con esta divulgacion.
La FIG. 29 es un diagrama de flujo que ilustra otra tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion.
La FIG. 30 es un diagrama de flujo que ilustra como una GPU puede procesar una secuencia de instrucciones compiladas de acuerdo con una primera tecnica de compilacion de acuerdo con esta divulgacion.
La FIG. 31 es un diagrama de flujo que ilustra una tecnica ejemplar para la compilacion de codigo fuente para una tarea de acuerdo con esta divulgacion.
La FIG. 32 es un diagrama de flujo que ilustra una tecnica ejemplar que puede ser utilizada por una GPU para utilizar selectivamente los servicios de almacenamiento en memoria cache de acuerdo con esta divulgacion.
Descripcion detallada
Esta divulgacion describe las tecnicas de comunicacion que pueden utilizarse dentro de una plataforma informatica de multiples procesadores. Las tecnicas pueden, en algunos ejemplos, proporcionar interfaces de software que pueden utilizarse para prestar soporte al paso de mensajes dentro de una plataforma informatica de multiples procesadores que inicia las tareas utilizando las colas de comandos. Las tecnicas pueden, en ejemplos adicionales, proporcionar interfaces de software que pueden utilizarse para la comunicacion entre procesadores de memoria compartida dentro de una plataforma informatica de multiples procesadores. En ejemplos adicionales, las tecnicas pueden proporcionar una unidad de procesamiento de graficos (GPU) que incluye hardware para prestar soporte al paso de mensajes y/o a la comunicacion de memoria compartida entre la GPU y una CPU anfitriona.
En los ultimos anos, los procesadores que fueron disenados originalmente para el procesamiento de graficos tridimensionales en tiempo real, por ejemplo, una unidad de procesamiento de graficos (GPU), se generalizaron para realizar tareas de calculo de proposito general (GPGPU). El valor de las GPGPU se ha demostrado en parte por la adopcion de estandares para toda la industria, tales como, por ejemplo, el estandar Lenguaje Informatico Abierto (OpenCL™). OpenCL es un ejemplo de una API de programacion en paralelo de plataforma informatica heterogenea, de multiples plataformas y multiples proveedores, que puede utilizarse para ejecutar programas que tienen paralelismo a nivel de tareas y/o paralelismo a nivel de datos sobre una plataforma informatica de multiples procesadores. La API esta disenada especificamente para permitir el procesamiento de datos mas generalizado en una GPU, generalizando las vias de flujo de datos y de control de la GPU de manera especifica sin graficos. Una limitacion de este enfoque es la granularidad gruesa de la comunicacion de datos entre la CPU anfitriona y los dispositivos informaticos, por ejemplo, una GPU.
Por ejemplo, la API de OpenCL proporciona una interfaz de cola de comandos que presta soporte a la granularidad a nivel de tareas de la comunicacion entre un dispositivo anfitrion y uno o mas dispositivos informaticos. Cada cola de comandos en general mantiene los comandos que seran ejecutados por un dispositivo informatico especifico. Un proceso anfitrion que se esta ejecutando en un dispositivo anfitrion puede transferir datos entre el espacio de memoria del anfitrion y el espacio de memoria del dispositivo, mediante la colocacion de un comando en la cola de comandos que instruye al dispositivo anfitrion para realizar la transferencia de memoria. De forma similar, el proceso anfitrion puede hacer que una tarea empiece a ejecutarse en un dispositivo informatico mediante la colocacion de un comando en la cola de comandos, instruyendo al dispositivo anfitrion para ejecutar una tarea en el dispositivo informatico.
La interfaz de cola de comandos puede configurarse para proporcionar la ejecucion de comandos en orden o la ejecucion de comandos de forma desordenada. Cuando la interfaz de cola de comandos esta configurada para proporcionar la ejecucion de comandos en orden, la interfaz de cola de comandos garantiza que los comandos se
5
10
15
20
25
30
35
40
45
50
55
60
65
ejecutaran en el orden en que los comandos se colocaron en la cola de comandos y que la ejecucion de un comando posterior no comenzara hasta que el comando anterior haya finalizado su ejecucion. Por lo tanto, cuando el proceso anfitrion coloca un comando en la cola de comandos para ejecutar una tarea, la cola de comandos espera a que la tarea complete la ejecucion antes de ejecutar comandos adicionales cualesquiera que pueden ser colocados posteriormente en la cola de comandos.
En una configuracion sencilla que implica una CPU anfitriona y una GPU y una cola de comandos en orden, un sistema de comunicacion entre la CPU anfitriona y la GPU puede implicar las siguientes operaciones: (1) la CPU anfitriona prepara los datos y los coloca en la memoria accesible para la GPU; (2) la CPU anfitriona ordena a la GPU que ejecute una tarea; (3) la CPU anfitriona espera a que la GPU termine la ejecucion de la tarea; y (4) la CPU anfitriona copia los datos desde la memoria accesible para la GPU a la memoria del anfitrion. En una configuracion de este tipo, todos los datos necesarios para la ejecucion de una tarea en la GPU se transfieren a la memoria accesible para la GPU antes del inicio de la ejecucion de la tarea, y los datos producidos por la tarea que se esta ejecutando en la GPU no estan disponibles para la CPU anfitriona hasta despues de que la tarea que se esta ejecutando en la GPU complete su ejecucion. Esta tosquedad en el intercambio de datos entre una CPU anfitriona y una GPU puede impedir las implementaciones efectivas de muchas operaciones utiles para aplicaciones basadas en paralelo, tales como, por ejemplo, la transmision de mensajes entre procesos entre un proceso que se esta ejecutando en el dispositivo anfitrion y una tarea que se esta ejecutando en la GPU. Tales mensajes pueden ser utiles, por ejemplo, para permitir que una tarea que se esta ejecutando en la GPU tenga la capacidad de ejecutar una llamada a procedimiento remoto (RPC) en la CPU anfitriona.
Cuando la interfaz de cola de comandos esta configurada para proporcionar la ejecucion desordenada de los comandos, el proceso anfitrion no es capaz de controlar cuando, durante la ejecucion de una tarea en particular, se llevara a cabo la ejecucion de un comando en particular. Como tal, el modo de ejecucion desordenada para la cola de comandos tampoco permite eficazmente la implementacion del paso de mensajes entre procesos, entre un proceso que se esta ejecutando en el dispositivo anfitrion y una tarea que se esta ejecutando en la GPU.
Con respecto al modelo de memoria utilizada en OpenCL, la API define las denominadas memorias intermedias globales del CL y las imagenes globales del CL que pueden utilizarse para la comparticion de datos entre una CPU anfitriona y una GPU o para compartir datos entre multiples dispositivos informaticos de OpenCL. Sin embargo, la CPU y la GPU no pueden leer o escribir en una memoria intermedia al mismo tiempo. Habitualmente, una CPU prepara una o mas memorias intermedias que contienen datos de origen y pasa las memorias intermedias a la GPU para su procesamiento. La GPU o bien modifica estas memorias intermedias o pone resultados en otras memorias intermedias que tambien fueron asignadas por software ejecutandose en la CPU a priori con el proposito de recibir las modificaciones de datos de GPU.
Aunque los objetos de memoria en OpenCL actualmente permiten utilizar una region del espacio de memoria del anfitrion para almacenar los datos de memoria intermedia utilizados por un dispositivo informatico, la especificacion permite que los dispositivos informaticos almacenen en memoria cache estos datos para la ejecucion mas eficaz de una tarea. El dispositivo anfitrion, en general, no es capaz de invalidar inmediatamente la memoria cache del dispositivo informatico que se utiliza para almacenar en memoria cache los datos de memoria intermedia. Por lo tanto, incluso si el dispositivo anfitrion fuera a sobrescribir ciertos datos de memoria intermedia almacenados en el espacio de memoria del anfitrion, no hay garantia de que la memoria cache en el dispositivo informatico se actualice con el fin de proporcionar al dispositivo informatico acceso inmediato a los datos modificados. Ademas, dado que los resultados de los calculos realizados por el dispositivo informatico se pueden almacenar en la memoria cache del dispositivo informatico, el proceso anfitrion que se esta ejecutando en el dispositivo anfitrion no es capaz de leer ningun resultado parcial de la memoria intermedia, debido a que tales datos pueden ser invalidos debido a nuevos datos almacenados en la memoria cache del dispositivo informatico. Por lo tanto, el modelo de gestion de memoria en OpenCL no permite inmediatamente compartir datos en proceso mediante una memoria compartida.
Las tecnicas descritas en esta divulgacion pueden utilizarse, en algunos ejemplos, para superar una o mas de las limitaciones anteriormente mencionadas de la API de OpenCL. Por ejemplo, las tecnicas de esta divulgacion pueden proporcionar interfaces de software que se pueden utilizar para prestar soporte al paso de mensajes entre procesos dentro de una plataforma informatica de multiples procesadores que inicia las tareas utilizando colas de comandos de granularidad a nivel de tareas. Como otro ejemplo, las tecnicas de esta divulgacion pueden proporcionar interfaces de software que pueden utilizarse para prestar soporte al intercambio de datos en proceso mediante una memoria compartida dentro de una plataforma informatica de multiples procesadores.
En algunos ejemplos, las tecnicas de esta divulgacion pueden proporcionar una arquitectura de hardware de GPU que facilite el paso de mensajes a nivel de software. Por ejemplo, las tecnicas de esta divulgacion pueden proporcionar una arquitectura de hardware de GPU que esta configurada para prestar soporte a la ejecucion de instrucciones de paso de mensajes a nivel de software. En otros ejemplos, las tecnicas de la presente divulgacion pueden proporcionar una arquitectura de hardware de GPU que facilita la comunicacion de memoria compartida entre la GPU y una CPU anfitriona. Por ejemplo, las tecnicas de esta divulgacion pueden proporcionar una arquitectura de hardware de GPU que esta configurada para habilitar e inhabilitar de forma selectiva servicios de almacenamiento en memoria cache para un espacio de memoria compartida y/o para habilitar e inhabilitar de forma
5
10
15
20
25
30
35
40
45
50
55
60
65
selectiva un mecanismo de coherencia de memoria cache para un espacio de memoria compartida.
De acuerdo con un primer aspecto de esta divulgacion, se proporciona una interfaz de paso de mensajes que facilita la ejecucion de instrucciones de paso de mensajes entre un dispositivo anfitrion y uno o mas dispositivos informaticos durante la ejecucion de una tarea por el dispositivo informatico. El paso de mensajes puede referirse a una forma de comunicacion entre procesos, y potencialmente entre dispositivos, en la que cada uno de los procesos que se estan comunicando realiza conjuntos complementarios de operaciones para pasar con exito un mensaje. Por ejemplo, cada uno de los procesos que se comunica de acuerdo con un protocolo de paso de mensajes puede poner en practica una operacion de envio y una operacion de recepcion. Las tecnicas de paso de mensajes en la presente divulgacion pueden permitir que una CPU y un dispositivo informatico, por ejemplo, una GPU, se pasen mensajes entre si durante la ejecucion de una tarea en el dispositivo informatico. De esta manera, una plataforma informatica de multiples procesadores que implementa un esquema de comunicacion de cola de comandos de granularidad a nivel de tareas puede ser capaz de facilitar la comunicacion entre procesos y/o entre dispositivos.
En algunos ejemplos, las tecnicas de paso de mensajes descritas en esta divulgacion pueden denominarse tecnicas de "senalizacion de fuera de banda" debido a que las tecnicas pueden utilizar una interfaz distinta a la interfaz de cola de comandos, que se utiliza habitualmente en OpenCL para la comunicacion entre un dispositivo anfitrion y un dispositivo informatico, tal como, por ejemplo, una GPU. En otras palabras, las tecnicas de esta divulgacion pueden incluir una nueva interfaz de comunicacion fuera de banda que esta logicamente separada de la interfaz de cola de comandos dentro de banda, incluida dentro de OpenCL. La interfaz de comunicacion fuera de banda puede no estar sujeta a la misma granularidad a nivel de tareas a la que esta sujeta la interfaz de cola de comandos, proporcionando de ese modo una solucion a una o mas de las limitaciones descritas anteriormente con respecto a la granularidad a nivel de tareas de la cola de comandos.
Los mensajes transferidos entre la CPU y la GPU de acuerdo con las tecnicas de esta divulgacion pueden ser de cualquier tipo de mensaje. Ejemplos de diferentes tipos de mensajes incluyen senales, solicitudes de asignacion de memoria, solicitudes de des-asignacion de memoria, mensajes de notificacion, mensajes de sincronizacion, mensajes de invocacion a procedimiento remoto (por ejemplo, mensajes que son parte de una llamada a procedimiento remoto (RPC)), paquetes de datos, mensajes de informes, mensajes de mecanismo de afirmacion y mensajes de registro.
En el actual paradigma de OpenCL, todas las peticiones de una CPU anfitriona a una GPU se ponen en colas de comandos de OpenCL y se envian luego a la GPU. En particular, una aplicacion podria poner en la cola de comandos un gran numero de ejecuciones del nucleo y operaciones de memoria intermedia. Mientras tanto, si la primera tarea puesta en cola, por ejemplo, una ejecucion del nucleo, necesita, por ejemplo, solicitar la asignacion de memoria adicional de una CPU, surgen varios problemas. En primer lugar, icomo notifica la GPU a la CPU desde el interior de un nucleo en ejecucion que necesita que se produzca la asignacion de memoria? En segundo lugar, icomo notificar la CPU a la GPU la finalizacion de la asignacion de memoria y de la direccion del bloque de memoria recien asignado? Las tecnicas de interfaz de paso de mensajes de esta divulgacion, sin embargo, pueden ser capaces de resolver estos problemas al permitir que uno o mas mensajes que contienen las notificaciones y la informacion descritos anteriormente se pasen entre la CPU y la GPU.
Las tecnicas de senalizacion fuera de banda de esta divulgacion pueden utilizarse, en algunos ejemplos, para implementar la senalizacion entre una CPU anfitriona y uno o mas dispositivos informaticos, por ejemplo, dispositivos informaticos de OpenCL. La senalizacion fuera de banda puede proporcionar rapidas notificaciones de fuera de banda, por ejemplo, utilizando un mecanismo de entrega solicitada o no solicitada. En algunos ejemplos, las tecnicas de senalizacion fuera de banda pueden llevar cantidades relativamente pequenas de datos.
De acuerdo con un segundo aspecto de esta divulgacion, se proporciona una GPU que es capaz de enviar mensajes a, y recibir mensajes desde, los procesos que se estan ejecutando en procesadores distintos a la GPU. Por ejemplo, una GPU puede incluir hardware que esta configurado para implementar una o mas operaciones para enviar y recibir mensajes. En algunos ejemplos, una GPU disenada de acuerdo con esta divulgacion puede incluir uno o mas registros accesibles por anfitrion, configurados para el almacenamiento de informacion de estado y de datos, asociada con un protocolo de paso de mensajes. Los uno o mas registros pueden estar configurados para facilitar el paso de mensajes entre una tarea que se esta ejecutando en la GPU y un proceso que se esta ejecutando en un dispositivo distinto a la GPU. En ejemplos adicionales, el bloque de procesamiento de la ALU de la GPU (por ejemplo, una unidad de sombreado programable) puede estar acoplado comunicativamente a los registros accesibles por anfitrion para enviar y recibir mensajes mediante los registros accesibles por anfitrion. La GPU tambien puede disenarse para incluir varios mecanismos de sondeo y/o interrupcion para implementar tecnicas de paso de mensajes, sincronas y/o asincronas.
De acuerdo con un tercer aspecto de esta divulgacion, se proporciona una interfaz de memoria intermedia que permite crear objetos de memoria inmediata. Los objetos de memoria inmediata se pueden usar para implementar un espacio de memoria compartida no almacenable en memoria cache y/o un espacio de memoria compartida coherente con memoria cache, con el fin de compartir datos entre un proceso que se esta ejecutando en un dispositivo anfitrion y una tarea que se esta ejecutando en un dispositivo informatico, mientras la tarea se esta
5
10
15
20
25
30
35
40
45
50
55
60
65
ejecutando en el dispositivo informatico. El espacio de memoria compartida puede ser un espacio de memoria que sea accesible tanto por el dispositivo anfitrion como por un dispositivo informatico, por ejemplo, una GPU, durante la ejecucion de una tarea por el dispositivo informatico. Un espacio de memoria compartida no almacenable en memoria cache, como se usa en el presente documento, puede referirse a un espacio de memoria compartida para el cual una o mas memorias cache correspondientes en el dispositivo anfitrion y/o el dispositivo informatico, o ambos, estan inhabilitadas para el espacio de memoria. Un espacio de memoria compartida coherente con memoria cache, como se usa en el presente documento, puede referirse a un espacio de memoria compartida donde se utilizan tecnicas de coherencia de cache de memoria compartida para mantener la coherencia de memoria cache dentro de una o mas memorias cache correspondientes en uno entre el dispositivo anfitrion y/o el dispositivo informatico, o en ambos. El espacio de memoria compartida no almacenable en memoria cache y el espacio de memoria compartida coherente con memoria cache pueden permitir la comparticion de datos en cualquier momento. Los objetos de memoria inmediata pueden, en algunos ejemplos, implementarse como una memoria compartida volatil no almacenable en memoria cache y/o como una memoria compartida volatil coherente con memoria cache para el dispositivo anfitrion y el dispositivo informatico.
En algunos ejemplos, los objetos de memoria inmediata de esta divulgacion pueden estar integrados dentro de una API de programacion en paralelo, de plataforma informatica heterogenea, de multiples plataformas y multiples proveedores, que incluye un esquema de gestion de memoria de objetos de memoria. Por ejemplo, los objetos de memoria inmediatos pueden estar integrados en OpenCL como un atributo adicional de los objetos de memoria de OpenCL, por ejemplo, objetos de memoria intermedia de OpenCL o los objetos de imagen de OpenCL. En tales ejemplos, los objetos de memoria inmediatos se pueden crear mediante la modificacion de las funciones de creacion de objetos de memoria para incluir un parametro o indicador que especifica si el objeto de memoria resultante creado por la llamada a la funcion deberia ser un objeto de memoria de modalidad estandar o un objeto de memoria de modalidad inmediata. De esta manera, las tecnicas de esta divulgacion pueden permitir a los sistemas informaticos de multiples procesadores que implementan las API que incluyen esquemas de gestion de memoria de objetos de memoria, tales como OpenCL, poner en practica el intercambio de datos en proceso mediante un espacio de memoria compartida que no este sujeto a problemas de coherencia de memoria cache.
En ejemplos adicionales, los objetos de memoria inmediata de esta divulgacion pueden utilizarse para el intercambio de datos en desarrollo entre una CPU anfitriona y un dispositivo informatico de OpenCL o entre diferentes dispositivos informaticos de OpenCL. En ejemplos adicionales, los objetos de memoria inmediatos pueden contener marcadores de sincronizacion interna. En ejemplos adicionales, los objetos de memoria inmediatos se pueden usar junto con las senales fuera de banda para la sincronizacion.
De acuerdo con un cuarto aspecto de esta divulgacion, se proporciona una GPU que incluye una memoria cache correspondiente a un espacio de memoria compartida, que puede inhabilitarse de forma selectiva para determinados espacios de direcciones de memoria con el fin de proporcionar un espacio de memoria compartida no almacenable en memoria cache. Por ejemplo, la GPU puede habilitar e inhabilitar de forma selectiva los servicios de memoria cache proporcionados por una cache asociada con un espacio de memoria compartida, en respuesta a la recepcion de informacion que especifica si se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de operaciones de lectura y/o escritura con respecto al espacio de memoria compartida. En algunos ejemplos, la informacion que especifica si se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de operaciones de lectura y/o escritura con respecto al espacio de memoria compartida puede ser una instruccion de modalidad de almacenamiento en memoria cache o una instruccion de modalidad inmediata que especifica si deberia utilizarse una modalidad de memoria cache o una modalidad inmediata para ejecutar la instruccion particular. En ejemplos adicionales, la informacion que especifica si se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de las operaciones de lectura y/o escritura con respecto al espacio de memoria compartida puede ser un atributo de objeto de memoria en modalidad inmediata que especifica si una modalidad inmediata esta habilitada para el objeto de memoria.
En ejemplos adicionales, las tecnicas de esta divulgacion pueden proporcionar una GPU que incluye una modalidad de coherencia con memoria cache que puede habilitarse selectivamente para proporcionar un espacio de memoria compartida coherente con memoria cache. En algunos ejemplos, la GPU puede habilitar selectivamente una modalidad de coherencia de memoria cache para una parte de la memoria cache correspondiente al espacio de memoria compartida, en base a una o mas instrucciones recibidas desde un dispositivo anfitrion. El dispositivo anfitrion puede emitir una o mas instrucciones a la GPU para habilitar selectivamente la modalidad de coherencia de memoria cache del espacio de memoria compartida para la parte de la memoria cache correspondiente al espacio de memoria compartida tras la asignacion del espacio de memoria compartida por el dispositivo anfitrion, en base a un parametro de modalidad inmediata especificado por un proceso anfitrion.
Las tecnicas de senalizacion fuera de banda y de almacenamiento inmediato en memoria intermedia de esta divulgacion pueden proporcionar un acoplamiento de tareas mas minucioso entre una CPU anfitriona y la GPU, o entre dos dispositivos informaticos de OpenCL, en comparacion con lo que de otra manera se podria obtener utilizando solamente la interfaz de cola de comandos de OpenCL. Las tecnicas de esta divulgacion pueden permitir que una plataforma informatica de multiples procesadores lleve a cabo una diversidad de operaciones con el fin de asistir en la ejecucion eficaz de programas en paralelo y/o de multiples hilos. Por ejemplo, las tecnicas de esta
5
10
15
20
25
30
35
40
45
50
55
60
65
divulgacion pueden permitir que una tarea que esta ejecutandose en una GPU lance una RPC. Como otro ejemplo, las tecnicas de esta divulgacion pueden permitir que una tarea que se esta ejecutando en la GPU lance, mediante la CPU, otra tarea de GPU. Como un ejemplo adicional, las tecnicas de esta divulgacion pueden permitir que una tarea que se esta ejecutando en la GPU emita solicitudes de gestion de recursos, tales como, por ejemplo, las solicitudes de asignacion de memoria y/o de des-asignacion de memoria, a la CPU y/o al controlador que se esta ejecutando en la CPU. Como otro ejemplo mas, las tecnicas de esta divulgacion pueden permitir que una tarea de que se esta ejecutando en la GPU lleve a cabo comprobaciones de estado y el paso general de mensajes a una CPU, tal como, por ejemplo, la implementacion de un mecanismo de afirmacion, informes de progreso y/o registro de diagnostico.
La FIG. 1 es un diagrama de bloques que ilustra un sistema informatico ejemplar 10 de acuerdo con esta divulgacion. El sistema informatico 10 esta configurado para procesar una o mas aplicaciones de software en multiples dispositivos de procesamiento. En algunos ejemplos, las una o mas aplicaciones de software pueden incluir un proceso anfitrion, y el sistema informatico 10 puede estar configurado para ejecutar el proceso anfitrion y para distribuir la ejecucion de una o mas tareas iniciadas por el proceso anfitrion en otros dispositivos informaticos dentro del sistema informatico 10. En ejemplos adicionales, el proceso anfitrion y/o las tareas ejecutadas por el sistema informatico 10 pueden ser programados de acuerdo con un modelo de programacion en paralelo. Por ejemplo, las aplicaciones pueden incluir instrucciones que estan disenadas para aprovechar el paralelismo a nivel de tareas y/o el paralelismo a nivel de datos de los sistemas de hardware subyacentes.
El sistema informatico 10 puede ser un ordenador personal, un ordenador de sobremesa, un ordenador portatil, una estacion de trabajo de ordenador, una consola o plataforma de videojuegos, un telefono movil, tal como, por ejemplo, un telefono celular o por satelite, un telefono movil, un telefono fijo, un telefono de Internet, un dispositivo portatil como un dispositivo de videojuegos portatil o un asistente digital personal (PDA), un reproductor de medios digitales, tal como un reproductor personal de musica, un reproductor de video, un dispositivo de visualizacion, o un televisor, un decodificador de television, un servidor, un dispositivo de red intermedio, un ordenador central o cualquier otro tipo de dispositivo que procese informacion.
El sistema informatico 10 incluye un dispositivo anfitrion 12, una unidad de procesamiento de graficos (GPU) 14, una memoria 16 y una red 18 de interconexion. El dispositivo anfitrion 12 esta configurado para proporcionar una plataforma para la ejecucion de un proceso anfitrion y un modulo de tiempo de ejecucion para una API de plataforma informatica de multiples procesadores. Habitualmente, el dispositivo anfitrion 12 es una CPU de proposito general, aunque el dispositivo anfitrion 12 puede ser cualquier tipo de dispositivo capaz de ejecutar programas. El dispositivo anfitrion 12 esta acoplado comunicativamente a la GPU 14 y a la memoria 16 a traves de la red de interconexion 18. El dispositivo anfitrion 12 incluye un proceso anfitrion 20 y un modulo de tiempo de ejecucion 22, cada uno de los cuales se puede ejecutar en cualquier combinacion de uno o mas procesadores programables.
El proceso anfitrion 20 incluye un conjunto de instrucciones que forman un programa de software para su ejecucion en la plataforma de sistema informatico del sistema informatico 10. El programa de software puede estar disenado para realizar una o mas tareas especificas para un usuario final. Tales tareas pueden, en algunos ejemplos, implicar algoritmos intensivos en calculo que pueden explotar los multiples dispositivos de procesamiento y las arquitecturas paralelas proporcionadas por el sistema informatico 10.
El modulo de tiempo de ejecucion 22 puede ser un modulo de software que se esta ejecutando en el dispositivo anfitrion 12 que implementa una o mas interfaces configuradas para dar servicio a una o mas de las instrucciones contenidas en el proceso anfitrion 20. Las interfaces implementadas por el modulo de tiempo de ejecucion 22 incluyen una interfaz de cola de comandos 24 y una interfaz de paso de mensajes de anfitrion 26. En algunos ejemplos, el modulo de tiempo de ejecucion 22 puede implementar una o mas interfaces contenidas dentro de una API estandar del sistema de multiples procesadores, ademas de las interfaces descritas en esta divulgacion. En algunos ejemplos, la API estandar puede ser una API de plataforma informatica heterogenea, una API de multiples plataformas, una API de multiples proveedores, una API de programacion en paralelo, una API de programacion en paralelo a nivel de tareas y/o una API de programacion en paralelo a nivel de datos. En otros ejemplos, la API estandar puede ser la API de OpenCL. En dichos ejemplos, el modulo de tiempo de ejecucion 22 puede estar disenado para estar en conformidad con una o mas de las especificaciones de OpenCL. En ejemplos adicionales, el modulo de tiempo de ejecucion 22 puede implementarse como parte de, o ser, un programa controlador, por ejemplo, un controlador de GPU.
La interfaz de cola de comandos 24 esta configurada para recibir una o mas instrucciones de puesta en cola desde el proceso anfitrion 20 y para ejecutar las funciones especificadas por las instrucciones recibidas. En algunos ejemplos, la interfaz de cola de comandos 24 puede estar disenada de acuerdo con la especificacion de OpenCL. Por ejemplo, la interfaz de cola de comandos 24 puede implementar una o mas de las instrucciones de puesta en cola especificadas en la especificacion de OpenCL para interactuar con las colas de comandos.
De acuerdo con esta divulgacion, la interfaz de paso de mensajes de anfitrion 26 esta configurada para recibir una o mas instrucciones de paso de mensajes desde el proceso anfitrion 20 y para ejecutar las funciones especificadas por las instrucciones recibidas. En algunos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede implementarse como una extension para una API estandar existente, tal como, por ejemplo, la API de OpenCL. En
5
10
15
20
25
30
35
40
45
50
55
60
65
ejemplos adicionales, la interfaz de paso de mensajes de anfitrion 26 se puede integrar en una API estandar existente, tal como, por ejemplo, la API de OpenCL.
La GPU 14 esta configurada para ejecutar una o mas tareas en respuesta a las instrucciones recibidas desde el dispositivo anfitrion 12. La GPU 14 puede ser cualquier tipo de GPU que incluya uno o mas elementos de procesamiento programables. Por ejemplo, la GPU 14 puede incluir una o mas unidades de sombreado programables que estan configuradas para ejecutar una pluralidad de instancias de ejecucion para una tarea en paralelo. Las unidades de sombreado programables pueden incluir una unidad de sombreado de vertices, una unidad de sombreado de fragmentos, una unidad de sombreado de geometria y/o una unidad de sombreado unificada. La GPU 14 esta acoplada comunicativamente al dispositivo anfitrion 12 y a la memoria 16 a traves de la red de interconexion 18. La GPU 14 incluye una tarea 28 y una interfaz de paso de mensajes de dispositivo 30. La tarea 28 y la interfaz de paso de mensajes de dispositivo 30 se puede ejecutar en cualquier combinacion de uno o mas elementos de procesamiento programables.
La tarea 28 comprende un conjunto de instrucciones que forman una tarea para la ejecucion en un dispositivo informatico en el sistema informatico 10. En algunos ejemplos, el conjunto de instrucciones para la tarea 28 puede definirse en el proceso anfitrion 20 y, en algunos casos, compilarse mediante instrucciones incluidas en el proceso anfitrion 20 que se estan ejecutando en el dispositivo anfitrion 12. En otros ejemplos, la tarea 28 puede ser un programa de nucleo que tiene multiples instancias de ejecucion que se estan ejecutando en la GPU 14 en paralelo. En dichos ejemplos, el proceso anfitrion 20 puede definir un espacio de indices para el nucleo que correlaciona instancias de ejecucion del nucleo con respectivos elementos de procesamiento para la ejecucion de las instancias de ejecucion del nucleo, y la GPU 14 puede ejecutar las multiples instancias de ejecucion de nucleo para la tarea 28 de acuerdo con el espacio de indices definido para el nucleo.
De acuerdo con esta divulgacion, la interfaz de paso de mensajes de dispositivo 30 esta configurada para recibir una o mas instrucciones de paso de mensajes desde el proceso anfitrion 20 y para ejecutar las funciones especificadas por las instrucciones recibidas. En algunos ejemplos, la interfaz de paso de mensajes de dispositivo 30 puede implementarse como una extension de una API estandar existente. Por ejemplo, la API estandar puede ser una API de dispositivo informatico estandar, tal como, por ejemplo, la API de C de OpenCL. En ejemplos adicionales, la interfaz de paso de mensajes de dispositivo 30 puede estar integrada en una API estandar existente, tal como, por ejemplo, la API de C de OpenCL.
La memoria 16 esta configurada para almacenar datos para su uso por uno entre el dispositivo anfitrion 12 y la GPU 14, o ambos. La memoria 16 puede incluir cualquier combinacion de una o mas memorias o dispositivos de almacenamiento, volatiles o no volatiles, tales como, por ejemplo, memoria de acceso aleatorio (RAM), RAM estatica (SRAM), RAM dinamica (DRAM), memoria de solo lectura (ROM), ROM borrable y programable (EPROM), ROM borrable y programable electricamente (EEPROM), memoria flash, un medio magnetico de almacenamiento de datos o un medio de almacenamiento optico. La memoria 16 esta acoplada comunicativamente a un dispositivo anfitrion 12 y a la GPU 14 a traves de la red de interconexion 18. La memoria 16 incluye la cola de comandos 32.
La cola de comandos 32 puede ser una estructura de datos implementada en la memoria 16 que almacena y recupera los comandos recibidos desde la interfaz de cola de comandos 24. En algunos ejemplos, la cola de comandos 32 puede ser una memoria intermedia que almacena los comandos en un orden particular para su ejecucion.
La red de interconexion 18 esta configurada para facilitar la comunicacion entre el dispositivo anfitrion 12, la GPU 14 y la memoria 16. La red de interconexion 18 puede ser cualquier tipo de red de interconexion conocida en la tecnica. En el sistema informatico ejemplar 10 de la FIG. 1, la red de interconexion 18 es un bus. El bus puede incluir una o mas de cualquiera entre una variedad de estructuras de bus, tales como, por ejemplo, un bus de tercera generacion (por ejemplo, un bus HyperTransport o un bus InfiniBand), un bus de segunda generacion (por ejemplo, un bus de Puerto de Graficos Avanzado, un bus Expreso de Interconexion de Componentes Perifericos (PCIe) o un bus de Interfaz Extensible Avanzada (AXI)) o cualquier otro tipo de bus. La red de interconexion 18 esta acoplada al dispositivo anfitrion 12, la GPU 14 y la memoria 16.
Las estructuras y funcionalidades de los componentes en el sistema informatico 10 se describiran ahora con mas detalle. Como se ha expuesto anteriormente, el proceso anfitrion 20 incluye un conjunto de instrucciones. El conjunto de instrucciones puede incluir, por ejemplo, una o mas instrucciones de puesta en cola, y una o mas instrucciones de paso de mensajes de anfitrion. En ejemplos adicionales, el conjunto de instrucciones puede incluir instrucciones que especifican las tareas o nucleos que se tienen que ejecutar en la GPU 14, instrucciones que crean las colas de comandos y asocian las colas de comando con determinados dispositivos, instrucciones que compilan y vinculan programas, instrucciones que configuran parametros de nucleo , instrucciones que definen espacios de indices, instrucciones que definen un contexto de dispositivo y otras instrucciones que prestan soporte a la funcionalidad proporcionada por el proceso anfitrion 20.
El proceso anfitrion 20 puede interactuar con la interfaz de cola de comandos 24 mediante la emision de una o mas instrucciones de puesta en cola para la interfaz de cola de comandos 24, que instruyen a la interfaz de cola de
5
10
15
20
25
30
35
40
45
50
55
60
65
comandos 24 para colocar uno o mas comandos en la cola de comandos 32. Las una o mas instrucciones de puesta en cola pueden incluir instrucciones de puesta en cola de transferencias de memoria, que instruyen a la interfaz de cola de comandos 24 para poner en cola un comando de transferencia de memoria en la cola de comandos 32. Por ejemplo, las una o mas instrucciones de puesta en cola pueden incluir una instruccion para poner en cola un comando que instruye al dispositivo anfitrion 12, por ejemplo, el modulo de tiempo de ejecucion 22 que se ejecuta en el dispositivo anfitrion 12, para transferir datos entre un espacio de memoria asociado con el dispositivo anfitrion 12 y un espacio de memoria asociado con la GPU 14.
Un espacio de memoria puede estar asociado con el dispositivo anfitrion 12, si el espacio de memoria es accesible por el dispositivo anfitrion 12 durante la ejecucion del proceso anfitrion 20 por el dispositivo anfitrion 12. De manera similar, un espacio de memoria puede estar asociado con la GPU 14 si el espacio de memoria es accesible por la GPU 14 durante la ejecucion de la tarea 28 por la GPU 14. El espacio de memoria asociado con el dispositivo anfitrion 12 puede denominarse en la presente memoria espacio de memoria del anfitrion, y el espacio de memoria asociado con la GPU 14 puede denominarse en la presente memoria espacio de memoria del dispositivo. En algunos ejemplos, la memoria 16 puede incluir partes tanto del espacio de memoria del anfitrion como del espacio de memoria del dispositivo. En otros ejemplos, las partes de uno entre el espacio de memoria del anfitrion y el espacio de memoria del dispositivo, o ambos, pueden estar situadas en otros uno o mas dispositivos de memoria que no se muestran en el sistema informatico 10 de la FIG. 1.
En algunos ejemplos, el comando que instruye al dispositivo anfitrion 12 para transferir datos entre un espacio de memoria asociado con el dispositivo anfitrion 12 y un espacio de memoria asociado con la GPU 14 puede ser un comando que instruya al modulo de tiempo de ejecucion 22 para transferir los datos almacenados en una parte del espacio de memoria del anfitrion a un objeto de memoria intermedia asignado en el espacio de memoria del dispositivo. La instruccion emitida por el proceso anfitrion 20 para poner en cola un comando de este tipo puede denominarse en el presente documento una instruccion de puesta en cola de escritura de memoria intermedia. En algunos casos, la instruccion de puesta en cola de memoria intermedia de escritura puede adoptar la forma de la funcion clEnqueueWriteBujfer () especificada por la especificacion de API de OpenCL.
En ejemplos adicionales, el comando que instruye al dispositivo anfitrion 12 para transferir datos entre un espacio de memoria asociado con el dispositivo anfitrion 12 y un espacio de memoria asociado con la GPU 14 puede ser un comando que instruye al modulo de tiempo de ejecucion 22 para transferir los datos almacenados en un objeto de memoria intermedia, asignado en el espacio de memoria del dispositivo, a una parte del espacio de memoria del anfitrion. La instruccion emitida por el proceso anfitrion 20 para poner en cola un comando de este tipo puede denominarse en el presente documento una instruccion de puesta en cola de lectura de memoria intermedia. En algunos casos, la instruccion de puesta en cola de lectura de memoria intermedia puede tomar la forma de la funcion clEnqueueReadBujfer() especificada por la especificacion de API de OpenCL.
Las una o mas instrucciones de puesta en cola tambien pueden incluir instrucciones de puesta en cola de ejecucion de tareas que instruyen a la interfaz de cola de comandos 24 para poner en cola un comando de ejecucion de tareas en la cola de comandos 32. Por ejemplo, las una o mas instrucciones de puesta en cola pueden incluir una instruccion para poner en cola un comando que instruye a un dispositivo anfitrion 12, por ejemplo, el modulo de tiempo de ejecucion 22 que se ejecuta en el dispositivo anfitrion 12, para ejecutar una tarea en la GPU 14. En algunos ejemplos, el comando para ejecutar la tarea puede ser un comando para ejecutar multiples instancias de ejecucion de la tarea en una pluralidad de elementos de procesamiento en la GPU 14 en paralelo. Por ejemplo, la tarea puede ser el nucleo, y el proceso anfitrion 20 puede definir un espacio de indices para el nucleo que correlaciona instancias de ejecucion del nucleo con los respectivos elementos de procesamiento en la GPU 14 para la ejecucion de las instancias de ejecucion del nucleo. En un ejemplo de ese tipo, el comando para ejecutar una tarea puede ser un comando para ejecutar un nucleo en la GPU 14 de acuerdo con un espacio de indices definido para la GPU 14. En algunos casos, una instruccion de puesta en cola de ejecucion de tareas puede tomar la forma de la funcion clEnqueueNDRangeKernel () especificada por la API de OpenCL.
De acuerdo con esta divulgacion, el proceso anfitrion 20 tambien puede interactuar con la interfaz de paso de mensajes del anfitrion 26, emitiendo una o mas instrucciones de paso de mensajes del anfitrion a la interfaz de paso de mensajes del anfitrion 26, instruyendo a la interfaz de paso de mensajes del anfitrion 26 para pasar uno o mas mensajes entre el proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12 y la tarea 28 que se esta ejecutando en la GPU 14. Las instrucciones de paso de mensajes del anfitrion pueden ser ejecutadas por el dispositivo anfitrion 12.
Las instrucciones de paso de mensajes del anfitrion pueden, en algunos ejemplos, incluir una instruccion de envio que instruye al dispositivo anfitrion 12 para enviar los datos especificados a un dispositivo especificado. Por ejemplo, la instruccion de envio puede instruir a la interfaz de paso de mensajes del anfitrion 26 para enviar un mensaje desde el proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12 a la tarea 28 que se esta ejecutando en la GPU 14. En algunos ejemplos, la instruccion de envio puede incluir un primer parametro de entrada que especifica un dispositivo particular al cual deberia enviarse el mensaje y un segundo parametro de entrada que especifica el contenido del mensaje a enviar.
5
10
15
20
25
30
35
40
45
50
55
60
65
La instruccion de envfo puede ser o bien una instruccion de envfo bloqueante o una instruccion de envfo no bloqueante. La instruccion de envfo puede incluir, en algunos ejemplos, un tercer parametro de entrada que especifica si la instruccion de envfo es una instruccion de envfo bloqueante o una instruccion de envfo no bloqueante. Una instruccion de envfo bloqueante puede esperar hasta que se haya completado la operacion de envfo antes de volver al proceso de llamada, por ejemplo, el proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12. Una instruccion de envfo no bloqueante puede volver al proceso de llamada sin tener que esperar hasta que se complete la operacion de envfo. Por ejemplo, la instruccion de envfo no bloqueante puede devolver un asidero a la operacion de envfo particular, que posteriormente puede ser consultado por el proceso de llamada para determinar si la operacion de envfo se ha realizado con exito. Una operacion de envfo no bloqueante puede fallar y, en el caso de fallo, el proceso de llamada puede tener que emitir de nuevo la instruccion de envfo para volver a intentar la operacion de envfo.
En algunos ejemplos, la interfaz para la instruccion de envfo puede adoptar la forma siguiente:
clEnviarDatosFueraDeBanda(
cl_dispositivo *identificador_dispositivo, int datos_OOB, bool bloqueante)
donde clEnviarDatosFueraDeBanda es el identificador de instruccion, cl_dispositivo *identificador_dispositivo es un parametro de entrada que especifica un dispositivo de OpenCL particular al cual deberia enviarse el mensaje, int datos_OOB es un parametro de entrada que especifica el contenido del mensaje a enviar, y bool bloqueante es un parametro de entrada que especifica si la instruccion es una instruccion de envfo bloqueante o una instruccion de envfo no bloqueante. En el caso de una instruccion bloqueante, la instruccion puede devolver un parametro indicativo de si se completo con exito la operacion de envfo. En el caso de una instruccion no bloqueante, la instruccion puede devolver un parametro de asidero para la posterior consulta de estado por el proceso de llamada.
Las instrucciones de paso de mensajes del anfitrion pueden, en algunos ejemplos, incluir una instruccion de registro de rutina de devolucion de llamada que instruye al dispositivo anfitrion 12 para registrar una devolucion de llamada para recibir datos desde un dispositivo especificado de forma asincronica. Por ejemplo, la instruccion de registro de rutina de devolucion de llamada puede instruir a la interfaz de paso de mensajes del anfitrion 26 para invocar una rutina de devolucion de llamada en respuesta a la recepcion de una senal desde la GPU 14 que indica que la tarea que se esta ejecutando en la GPU 14 ha enviado un mensaje al proceso anfitrion 20. La instruccion de registro de rutina de devolucion de llamada puede incluir un primer parametro de entrada que especifica un dispositivo concreto para el que se deberia registrar una rutina de devolucion de llamada y un segundo parametro de entrada que especifica la ubicacion de la memoria de la rutina de devolucion de llamada.
En algunos ejemplos, la interfaz para la instruccion de registro de rutina de devolucion de llamada puede adoptar la forma siguiente:
clRegistrarDevolucionDeLlamadaDeDatosFueraDeBanda( cl_dispositivo *identificador_dispositivo, void(*) (int) punteroDevolucionDeLlamada)
donde clRegistrarDevolucionDeLlamadaDeDatosFueraDeBanda es el identificador de instruccion, cl_dispositivo *identificador_dispositivo es un parametro de entrada que especifica un dispositivo de OpenCL particular al cual deberia enviarse el mensaje, y void(*) (int) punteroDevolucionDeLlamada es un parametro de entrada que especifica la ubicacion de la memoria de la rutina de devolucion de llamada. La instruccion de registro de rutina de devolucion de llamada puede devolver un parametro indicativo de si se completo con exito la operacion de registro de rutina de devolucion de llamada.
Las instrucciones de paso de mensajes del anfitrion pueden, en algunos ejemplos, incluir una instruccion de sondeo que instruye al dispositivo anfitrion 12 para intentar leer datos de un dispositivo especificado. Por ejemplo, la instruccion de sondeo puede instruir a la interfaz de paso de mensajes del anfitrion 26 para sondear la GPU 14 para obtener informacion de estado de mensaje, indicativa de si la tarea 28 que se esta ejecutando en la GPU 14 ha enviado un mensaje. La instruccion de sondeo puede incluir un parametro de entrada que especifica un dispositivo en particular a sondear y un parametro de salida que especifica los datos obtenidos, si los hubiera, como resultado del sondeo.
En algunos ejemplos, la interfaz para la instruccion de sondeo puede adoptar la forma siguiente:
clIntentarLecturaDeDatosFueraDeBanda(
cl_dispositivo *identificador_dispositivo, int *datos_OOB)
donde ClIntentarLecturaDeDatosFueraDeBanda es el identificador de instruccion, cl_dispositivo
5
10
15
20
25
30
35
40
45
50
55
60
65
*identificador_dispositivo es un parametro de entrada que especifica un dispositivo de OpenCL particular a ser sondeado, e int *datos_OOB es un parametro de salida que especifica los datos obtenidos, si los hubiera, como resultado del sondeo. La instruccion de sondeo puede devolver un parametro indicativo de si se obtuvieron datos con exito en la operacion de sondeo.
De forma similar al proceso anfitrion 20, la tarea 28 puede incluir una o mas instrucciones de paso de mensajes de dispositivo que son ejecutadas por un dispositivo informatico. Las instrucciones de paso de mensajes de dispositivo pueden incluir una instruccion de envio que instruye a un dispositivo informatico para enviar los datos especificados al dispositivo anfitrion 12. Por ejemplo, la instruccion de envio puede instruir a la GPU 14 para enviar un mensaje desde la tarea 28 que se esta ejecutando en la GPU 14 al proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12.
La instruccion de envio puede ser o bien una instruccion de envio bloqueante o una instruccion de envio no bloqueante. La instruccion de envio puede incluir, en algunos ejemplos, un primer parametro de entrada que especifica si la instruccion de envio es una instruccion de envio bloqueante o una instruccion de envio no bloqueante. Una instruccion de envio bloqueante puede detener el proceso de llamada, por ejemplo, la tarea 28 que se esta ejecutando en la GPU 14, y esperar a que la operacion de envio se complete antes de volver al proceso de llamada. Una instruccion de envio no bloqueante puede volver al proceso de llamada sin tener que esperar hasta que se complete la operacion de envio. Por ejemplo, la instruccion de envio no bloqueante puede devolver un asidero a la operacion de envio particular, que posteriormente puede ser consultado por el proceso de llamada para determinar si la operacion de envio se ha realizado con exito. Una operacion de envio no bloqueante puede fallar y, en el caso de fallo, el proceso de llamada puede tener que emitir de nuevo la instruccion de envio para volver a intentar la operacion de envio. La instruccion de envio puede incluir un segundo parametro de entrada que especifica el contenido del mensaje a ser enviado al dispositivo anfitrion.
En algunos ejemplos, la interfaz para la instruccion de envio puede adoptar la forma siguiente:
enviar_datosoob (
bool bloqueante, int datos)
donde enviar_datosoob es el identificador de instruccion, bool bloqueante es un parametro de entrada que especifica si la instruccion es una instruccion de envio bloqueante o una instruccion de envio no bloqueante, e int datos es un parametro de entrada que especifica el contenido del mensaje a enviar. En el caso de una instruccion bloqueante, la instruccion puede devolver un parametro indicativo de si se completo con exito la operacion de envio. En el caso de una instruccion no bloqueante, la instruccion puede devolver un parametro de asidero para la posterior consulta de estado por el proceso de llamada.
Las instrucciones de paso de mensajes de dispositivo pueden, en algunos ejemplos, incluir una instruccion de recepcion que instruye a un dispositivo informatico para recibir datos desde el dispositivo anfitrion 12. Por ejemplo, la instruccion de recepcion puede instruir a la GPU 14, por ejemplo, a la interfaz de paso de mensajes de dispositivo 30, para proporcionar a la tarea 28 que se esta ejecutando en la GPU 14 un mensaje enviado a la tarea 28 desde el proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12, si esta disponible. Una instruccion de este tipo puede utilizarse para prestar soporte a un mecanismo de sondeo.
La instruccion de recepcion puede ser o una instruccion de recepcion bloqueante o una instruccion de recepcion no bloqueante. La instruccion de recepcion puede incluir, en algunos ejemplos, un parametro de entrada que especifica si la instruccion de recepcion es una instruccion de recepcion bloqueante o una instruccion de recepcion no bloqueante. Una instruccion de recepcion bloqueante puede detener el proceso de llamada, por ejemplo, la tarea 28 que se esta ejecutando en la GPU 14, y esperar hasta que un mensaje este disponible antes de volver al proceso de llamada. Una instruccion de recepcion no bloqueante puede volver al proceso de llamada sin esperar hasta que un mensaje este disponible. Por ejemplo, si un mensaje esta disponible, la instruccion de recepcion no bloqueante puede devolver el mensaje. Sin embargo, si un mensaje no esta disponible, la instruccion de recepcion no bloqueante puede fallar. En caso de fallo, el proceso de llamada puede tener que emitir de nuevo la instruccion de recepcion para volver a intentar la operacion de recepcion. La instruccion puede incluir recibir un parametro de salida que especifica los datos obtenidos, si los hubiera, como resultado de la operacion de recepcion.
En algunos ejemplos, la interfaz para la instruccion de recepcion puede adoptar la forma siguiente:
recibir_datosoob (
bool bloqueante, int datos)
donde recibir_datosoob es el identificador de instruccion, bool bloqueante es un parametro de entrada que especifica si la instruccion es una instruccion de recepcion bloqueante o una instruccion de recepcion no bloqueante, e int datos es un parametro de salida que especifica los datos obtenidos, si los hubiera, como resultado de la operacion
5
10
15
20
25
30
35
40
45
50
55
60
65
de recepcion. La instruccion puede devolver un parametro indicativo de si se completo con exito la operacion de recepcion.
La interfaz de cola de comandos 24 esta configurada para poner los comandos en la cola de comandos 32. Por ejemplo, la interfaz de cola de comandos 24 puede recibir una o mas instrucciones de puesta en cola desde el proceso anfitrion 20, y colocar uno o mas comandos en la cola de comandos 32 en respuesta a la recepcion de una o mas instrucciones de puesta en cola del proceso anfitrion 20. Las una o mas instrucciones de puesta en cola pueden incluir instrucciones de puesta en cola de ejecuciones de tareas e instrucciones de puesta en cola de transferencias de datos que instruyen a la interfaz de cola de comandos 24 para poner en cola, respectivamente, los comandos de ejecucion de tareas y los comandos de transferencia de datos.
La interfaz de cola de comandos 24 tambien esta configurada para ejecutar los comandos almacenados en la cola de comandos 32. Para los comandos de transferencia de datos, la interfaz de cola de comandos 24 puede transferir datos entre el espacio de memoria del anfitrion y el espacio de memoria del dispositivo. Por ejemplo, para un comando de memoria intermedia de escritura, la interfaz de cola de comandos 24 puede transferir los datos almacenados en una parte del espacio de memoria del anfitrion a un objeto de memoria intermedia asignado en el espacio de memoria del dispositivo. Como otro ejemplo, para un comando de memoria intermedia de lectura, la interfaz de cola de comandos 24 puede transferir los datos almacenados en un objeto de memoria intermedia asignado en el espacio de memoria del dispositivo a una parte del espacio de memoria del anfitrion. El espacio de memoria del dispositivo puede corresponder a un dispositivo al cual esta asociada la cola de comandos 32.
Para los comandos de ejecucion de tareas, la interfaz de cola de comandos 24 puede provocar el inicio de la ejecucion de la tarea en un dispositivo asociado con una cola de comandos. Por ejemplo, en el ejemplo de la FIG. 1, la cola de comandos 32 esta asociada con la GPU 14 dentro del contexto de modulo de tiempo de ejecucion 22. Por lo tanto, cuando se esta ejecutando un comando de ejecucion de tareas, la interfaz de cola de comandos 24 puede hacer que una tarea empiece a ejecutarse en la GPU 14. En algunos ejemplos, la interfaz de cola de comandos 24 puede hacer que la tarea empiece a ejecutarse en la GPU 14 mediante la colocacion de uno o mas comandos en una cola de comandos local contenida dentro de la GPU 14. En otros ejemplos, la interfaz de cola de comandos 24 puede hacer que la tarea empiece a ejecutarse en la GPU 14 mediante el envio de una o mas instrucciones a la GPU 14, instruyendo a la GPU 14 para comenzar la ejecucion de la tarea. La interfaz de cola de comandos 24 puede utilizar la red de interconexion 18 para comunicarse con la GPU 14, la memoria 16 y los espacios de memoria del anfitrion y del dispositivo.
En algunos ejemplos, la interfaz de cola de comandos 24 puede ejecutar los comandos en orden. En dichos ejemplos, si un primer comando se pone en cola antes de un segundo comando, la ejecucion del segundo comando comienza despues de que el primer comando haya finalizado su ejecucion. En ejemplos adicionales, la interfaz de cola de comandos 24 puede ejecutar los comandos de forma desordenada. En dichos ejemplos, si un primer comando se pone en cola antes de un segundo comando, la ejecucion del segundo comando no necesariamente empieza despues de que el primer comando haya finalizado su ejecucion.
La interfaz de paso de mensajes del anfitrion 26 esta configurada para ejecutar una o mas instrucciones de paso de mensajes recibidas desde el proceso anfitrion 20. Por ejemplo, en respuesta a la recepcion de una o mas instrucciones de paso de mensajes desde el proceso anfitrion 20, la interfaz de paso de mensajes del anfitrion 26 puede pasar uno o mas mensajes entre el proceso anfitrion 20 que se estan ejecutando en el dispositivo anfitrion 12 y la tarea 28 que se esta ejecutando en la GPU 14 mientras la tarea 28 se esta ejecutando en la GPU 14. En algunos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede ejecutar una o mas instrucciones de paso de mensajes sin colocar ningun comando en cola de comandos 32.
De acuerdo con un primer ejemplo, en respuesta a la recepcion de una instruccion de envio desde el proceso anfitrion 20, la interfaz de paso de mensajes del anfitrion 26 puede enviar un mensaje desde el proceso anfitrion 20 a la tarea 28 mientras la tarea 28 se esta ejecutando en la GPU 14. Por ejemplo, la interfaz de paso de mensajes del anfitrion 26 puede componer un mensaje saliente en base a los datos de mensajes contenidos dentro de la instruccion de envio, y transferir el mensaje saliente, a traves de la red de interconexion 18, a un dispositivo especificado en la instruccion de envio, por ejemplo, la GPU 14, para su entrega a una tarea que se esta ejecutando en el dispositivo especificado, por ejemplo, la tarea 28.
De acuerdo con un segundo ejemplo, en respuesta a la recepcion de una instruccion de registro de rutina de devolucion de llamada del proceso anfitrion 20, la interfaz de paso de mensajes del anfitrion 26 puede asociar la rutina de devolucion de llamada especificada en la instruccion con una senal desde el dispositivo especificado en la instruccion, por ejemplo, la GPU 14, lo cual indica que la tarea, por ejemplo, la tarea 28, que se esta ejecutando en el dispositivo especificado ha enviado un mensaje. En algunos ejemplos, la senal desde el dispositivo puede ser una senal de interrupcion. La senal de interrupcion, en algunos ejemplos, puede administrarse mediante una linea de senal de interrupcion dedicada. En respuesta a la recepcion de la senal desde el dispositivo especificado que indica que la tarea que se esta ejecutando en el dispositivo ha enviado un mensaje, la interfaz de paso de mensajes del anfitrion 26 puede iniciar la ejecucion de la rutina de devolucion de llamada especificada en la instruccion de registro de rutina de devolucion de llamada. La rutina de devolucion de llamada puede obtener el mensaje enviado por la
5
10
15
20
25
30
35
40
45
50
55
60
65
tarea, por ejemplo, la tarea 28, desde el dispositivo especificado, por ejemplo, la GPU 14, y devolver el mensaje al proceso anfitrion 20 para su posterior procesamiento.
De acuerdo con un tercer ejemplo, en respuesta a la recepcion de una instruccion de sondeo, la interfaz de paso de mensajes del anfitrion 26 puede sondear el dispositivo especificado en la instruccion, por ejemplo, la GPU 14, para obtener informacion sobre el estado del mensaje. La interfaz de paso de mensajes del anfitrion 26 puede utilizar la red de interconexion 18 u otra via de comunicacion basada en hardware para sondear el dispositivo. Si la informacion de estado de mensaje indica que una tarea, por ejemplo, la tarea 28, que se esta ejecutando en el dispositivo especificado, por ejemplo, la GPU 14, ha enviado el mensaje, la interfaz de paso de mensajes del anfitrion 26 puede obtener el mensaje desde el dispositivo especificado y devolver el mensaje al proceso anfitrion 20 para su posterior procesamiento.
La interfaz de paso de mensajes de dispositivo 30 esta configurada para ejecutar una o mas instrucciones de paso de mensajes de dispositivo recibidas desde la tarea 28. Por ejemplo, en respuesta a la recepcion de una o mas instrucciones de paso de mensajes de dispositivo desde la tarea 28, la interfaz de paso de mensajes de dispositivo 30 puede pasar uno o mas mensajes entre la tarea 28 que se esta ejecutando en la GPU 14 y el proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12 mientras la tarea 28 se esta ejecutando en la GPU 14.
De acuerdo con un primer ejemplo, en respuesta a la recepcion de una instruccion de envio, la interfaz de paso de mensajes de dispositivo 30 puede enviar un mensaje desde la tarea 28 que se esta ejecutando en la GPU 14 al proceso anfitrion 20 que se esta ejecutando en el dispositivo anfitrion 12. Por ejemplo, la interfaz de paso de mensajes de dispositivo 30 puede componer un mensaje saliente sobre la base de datos de mensajes contenidos dentro de la instruccion de envio, y transferir el mensaje saliente, a traves de la red de interconexion 18, al dispositivo anfitrion 12 para su entrega al proceso anfitrion 20.
De acuerdo con un segundo ejemplo, en respuesta a la recepcion de una instruccion de recepcion desde la tarea 28, la interfaz de paso de mensajes de dispositivo 30 puede determinar si un mensaje del proceso anfitrion 20 esta disponible. En algunos ejemplos, la interfaz de paso de mensajes de dispositivo 30 puede comprobar uno o mas registros accesibles por el anfitrion para determinar si un mensaje esta disponible. Si un mensaje del proceso anfitrion 20 esta disponible, la interfaz de paso de mensajes de dispositivo 30 puede proporcionar el mensaje a la tarea 28.
Aunque la interfaz de cola de comandos 24 y la interfaz de paso de mensajes del anfitrion 26 se ilustran como componentes que son independientes del proceso anfitrion en la FIG. 1, en algunos ejemplos, la funcionalidad de una entre la interfaz de cola de comandos 24 y la interfaz de paso de mensajes del anfitrion 26, o ambas, pueden compilarse parcialmente y/o completamente en el proceso anfitrion 20. De manera similar, en algunos ejemplos, la funcionalidad de la interfaz de paso de mensajes de dispositivo 30 puede compilarse parcialmente y/o completamente en la tarea 28.
Para facilitar la ilustracion, el sistema informatico ejemplar 10 ilustrado en la FIG. 1 describe las tecnicas de paso de mensajes de esta divulgacion usando la GPU 14 como un dispositivo informatico. Deberia reconocerse, sin embargo, que las tecnicas de esta divulgacion pueden ser aplicadas a sistemas informaticos de multiples procesadores que tienen dispositivos informaticos distintos a una GPU, ademas o en lugar de la GPU 14. En algunos ejemplos, los dispositivos informaticos pueden ser dispositivos informaticos de OpenCL. Un dispositivo informatico de OpenCL incluye una o mas unidades informaticas. Cada una de las unidades informaticas incluye uno o mas elementos de procesamiento. Por ejemplo, una unidad informatica puede ser un grupo de elementos de procesamiento, por ejemplo, ALU, que tiene una memoria compartida en chip que puede ser utilizada por todos los elementos de procesamiento en la unidad informatica. Un elemento de trabajo puede ser una entre una pluralidad de ejecuciones paralelas de un nucleo o tarea invocada en un dispositivo informatico de OpenCL por un comando colocado en una cola de comandos. Cada elemento de trabajo puede ejecutarse en un elemento de procesamiento individual en una unidad informatica en paralelo con otros elementos de trabajo que se estan ejecutando en otros elementos de procesamiento. Un grupo de trabajo puede ser una coleccion de uno o mas elementos de trabajo que se procesan en una unica unidad informatica dentro del dispositivo informatico como parte de un unico comando de ejecucion de nucleo. Un servidor de OpenCL puede ser una CPU central de la plataforma que se utiliza para ejecutar la capa de tiempo de ejecucion de OpenCL.
La API de OpenCL puede proporcionar un conjunto comun de interfaces para la interaccion entre el dispositivo anfitrion y los diferentes tipos de dispositivos informaticos. Por ejemplo, la API de OpenCL puede proporcionar una interfaz comun para la interaccion entre un dispositivo anfitrion y un dispositivo informatico de GPU, y el dispositivo anfitrion y un dispositivo informatico que no sea una GPU. La API de OpenCL permite que el servidor utilice una interfaz comun para ejecutar tareas (por ejemplo, nucleos de OpenCL) en los distintos dispositivos informaticos. En algunos ejemplos, las tareas pueden ser tareas de calculo de proposito general, y la API de OpenCL puede permitir que el anfitrion haga que la tarea informatica de proposito general se ejecute en un dispositivo informatico de GPU.
El sistema informatico ejemplar 10 mostrado en la FIG. 1 ilustra una infraestructura y tecnicas para facilitar el paso de mensajes y/o la senalizacion fuera de banda entre un dispositivo anfitrion y un dispositivo informatico. En otros
5
10
15
20
25
30
35
40
45
50
55
60
65
sistemas informaticos ejemplares, sin embargo, las tecnicas pueden extenderse inmediatamente para proporcionar el paso de mensajes en proceso entre diferentes dispositivos informaticos (por ejemplo, dispositivos informaticos de OpenCL) en un sistema informatico que tiene mas de un dispositivo informatico. En dichos ejemplos, pueden conectarse una o mas lineas de interrupcion entre diferentes dispositivos informaticos.
La FIG. 2 es un diagrama de bloques que ilustra una GPU ejemplar 40 que puede utilizarse en el sistema informatico 10 de la FIG. 1 de acuerdo con esta divulgacion. En algunos ejemplos, la GPU 40 puede utilizarse para implementar la GPU 14 ilustrada en la FIG. 1. La GPU 40 incluye un bloque de procesamiento de GPU 42, registros de GPU accesibles por el anfitrion 44 y un controlador de bus 46. La GPU 40 puede estar acoplada comunicativamente a otros uno o mas dispositivos anfitriones o dispositivos informaticos a traves de la red de interconexion 18.
El bloque de procesamiento de la GPU 42 esta configurado para ejecutar las tareas y para facilitar el paso de mensajes entre las tareas que se estan ejecutando en el bloque de procesamiento de la GPU 42 y los procesos que se estan ejecutando en otros dispositivos anfitriones o informaticos. El bloque de procesamiento de la GPU 42 esta acoplado comunicativamente a los registros de GPU accesibles por el anfitrion 44, por ejemplo, mediante una o mas lineas de control y/o datos. En algunos ejemplos, el bloque de procesamiento de la GPU 42 puede denominarse un bloque de unidad logica y aritmetica (ALU). El bloque de procesamiento de la GPU 42 incluye una tarea 48, un modulo de paso de mensajes 50, un registro de datos entrantes 52 y un registro de datos salientes 54.
Los registros de GPU accesibles por el anfitrion 44 estan configurados para almacenar datos que pueden comunicarse hacia o desde un dispositivo anfitrion. Los registros de GPU accesibles por el anfitrion 44 incluyen un registro de estado de mensajes 56, un registro de recuento de mensajes 58, un registro de mensajes entrantes 60, un registro de mensajes salientes 62, un registro de estado de interrupcion 64 y un registro de confirmacion de interrupcion 66. Cada uno de los registros de GPU accesibles por el anfitrion 44 puede ser accesible mediante un dispositivo anfitrion, por ejemplo, el dispositivo anfitrion 12 en la FIG. 1. En algunos ejemplos, los registros de GPU accesibles por el anfitrion 44 pueden ser registros correlacionados con memoria, es decir, registros que estan correlacionados con, y direccionables en, el espacio de memoria de un dispositivo anfitrion. En otros ejemplos, los registros de GPU accesibles por el anfitrion 44 pueden ser registros correlacionados con entrada / salida (correlacionados con E/S), es decir, registros correlacionados con el espacio de E/S de un dispositivo anfitrion. Los registros de GPU accesibles por el anfitrion 44 estan acoplados comunicativamente al bloque de procesamiento de la GPU 42 mediante una o mas lineas de control y/o datos. Los registros de GPU accesibles por el anfitrion 44 tambien estan acoplados comunicativamente al controlador de bus 46 a traves de la red de interconexion 18.
La tarea 48 puede ejecutarse en uno o mas procesadores programables. En algunos ejemplos, el bloque de procesamiento de la GPU 42 puede incluir multiples procesadores o elementos de procesamiento configurados para ejecutar multiples instancias de ejecucion de la tarea 48. La tarea 48 puede ser esencialmente similar a la tarea 28 descrita anteriormente con respecto a la FIG. 1, y por lo tanto no se describira con mas detalle.
El modulo de paso de mensajes 50 esta configurado para controlar las operaciones de paso de mensajes realizadas por la GPU 40. El modulo de paso de mensajes 50 puede implementarse en hardware, software, firmware o cualquier combinacion de los mismos. En algunos ejemplos, si una parte de, o toda, la funcionalidad del modulo de paso de mensajes 50 se implementa en software, las instrucciones de software para dicha implementacion se pueden incluir dentro del mismo archivo ejecutable que el archivo ejecutable que contiene instrucciones de software para la tarea 48. El modulo de paso de mensajes 50 esta acoplado comunicativamente a la tarea 48, el modulo de paso de mensajes 50, el registro de datos entrantes 52 y el registro de datos salientes 54.
El modulo de paso de mensajes 50 puede pasar uno o mas mensajes, mediante los registros de GPU accesibles por el anfitrion 44, entre la tarea 48 que se esta ejecutando en uno o mas procesadores y un proceso que se esta ejecutando en un dispositivo anfitrion, mientras la tarea 48 se esta ejecutando en uno o mas procesadores, y en respuesta a la recepcion de una o mas instrucciones de paso de mensajes desde la tarea 48. En algunos ejemplos, las una o mas instrucciones de paso de mensajes pueden incluir una instruccion de envio que instruye al modulo de paso de mensajes 50 para enviar un mensaje desde la tarea 48 a un proceso que se esta ejecutando en un dispositivo anfitrion. En tales ejemplos, el modulo de paso de mensajes 50 puede almacenar datos de mensajes asociados con el mensaje en uno de los registros de GPU accesibles por el anfitrion 44. En ejemplos adicionales, las una o mas instrucciones de paso de mensajes pueden incluir una instruccion de recepcion que instruye al modulo de paso de mensajes 50 para proporcionar a la tarea 48 un mensaje enviado a la tarea 48 desde un proceso que se esta ejecutando en un dispositivo anfitrion, si esta disponible. En tales ejemplos, el modulo de paso de mensajes 50 puede obtener datos de mensajes asociados con el mensaje desde uno o mas de los registros de GPU accesibles por el anfitrion 44.
El registro de datos entrantes 52, en el ejemplo de la FIG. 2, es un registro de hardware que almacena los datos entrantes recibidos desde un dispositivo externo mediante un registro de mensajes entrantes 60. El registro de datos entrantes 52 tambien puede almacenar un bit de estado que indica si los datos en un registro de datos entrantes 52 se han consumido y/o si los datos en el registro de datos entrantes 52 estan disponibles para su lectura. El registro de datos entrantes 52 esta acoplado comunicativamente al registro de mensajes entrantes 60 mediante una o mas lineas de datos. En algunos ejemplos, el numero de lineas de datos puede ser igual al numero de bits en el registro
5
10
15
20
25
30
35
40
45
50
55
60
65
de datos entrantes 52, los cuales pueden ser ambos iguales al numero de bits en el mensaje. En otros ejemplos, el numero de bits puede ser de 32 bits. En algunos ejemplos, el bloque de procesamiento de la GPU 42 puede implementar una memoria intermedia interna del tipo ‘primero en entrar, primero en salir’ (FIFO) para almacenar una pluralidad de mensajes entrantes recibidos desde el registro de datos entrantes 52.
El registro de datos salientes 54, en el ejemplo de la FIG. 2, es un registro de hardware que almacena los datos salientes recibidos desde una o mas instrucciones de paso de mensajes emitidas por la tarea 48. El registro de datos salientes 54 esta acoplado comunicativamente al registro de mensajes salientes 62 mediante una o mas lineas de datos. En algunos ejemplos, el numero de lineas de datos puede ser igual al numero de bits en el registro de datos salientes 54, los cuales pueden ser ambos iguales al numero de bits en el mensaje. En algunos ejemplos, el registro de datos salientes 54 y el registro de mensajes salientes 62 pueden estar configurados de tal manera que, cuando el modulo de paso de mensajes 50 escribe datos en el registro de datos salientes 54, el registro de mensajes salientes 62 se actualiza automaticamente con los datos escritos en el registro de datos salientes 54. En algunos ejemplos, el bloque de procesamiento de la GPU 42 puede implementar una memoria intermedia del tipo ‘primero en entrar, primero en salir’ (FIFO) para almacenar una pluralidad de mensajes salientes a escribir en el registro de datos salientes 54.
El registro de estado de mensajes 56, en el ejemplo de la FIG. 2, esta configurado para almacenar datos indicativos de si un mensaje entrante fue aceptado por la GPU 40. El registro de estado de mensajes 56 puede ser utilizado por un dispositivo anfitrion para determinar si un mensaje fue transmitido con exito y, en algunos ejemplos, para implementar un mecanismo de retroceso y/o desborde. Despues de aceptar un mensaje entrante, el modulo de paso de mensajes 50 puede fijar el registro de estado de mensajes 56 en un valor particular, lo cual indica que el mensaje entrante fue aceptado.
El registro de recuento de mensajes 58, en el ejemplo de la FIG. 2, esta configurado para almacenar datos indicativos de si el registro de mensajes entrantes 60 contiene un mensaje entrante. En algunos ejemplos, el registro de recuento de mensajes 58 puede enviar una senal al modulo de paso de mensajes 50 para indicar la llegada de mensajes cuando el registro de recuento de mensajes 58 ha sido incrementado por un dispositivo anfitrion. En algunos casos, la senal puede ser una linea de pulso de 1 bit. En ejemplos adicionales, el modulo de paso de mensajes 50 puede disminuir el registro de recuento de mensajes 58 despues de leer el mensaje procedente del registro de datos entrantes 52.
El registro de mensajes entrantes 60, en el ejemplo de la FIG. 2, esta configurado para almacenar datos de mensajes entrantes. Por ejemplo, un dispositivo anfitrion puede colocar datos de mensajes entrantes en el registro de mensajes entrantes 60 con el fin de enviar un mensaje a la tarea 48. El registro de mensajes entrantes 60 esta acoplado comunicativamente al registro de datos entrantes 52.
El registro de mensajes salientes 62, en el ejemplo de la FIG. 2, esta configurado para almacenar datos de mensajes salientes recibidos desde el registro de datos salientes 54. El registro de mensajes salientes 62 puede actualizar automaticamente los datos del registro de mensajes salientes 62 para corresponderse con el registro de datos salientes 54 cuando se escriban los nuevos datos en el registro de datos salientes 54. En algunos ejemplos, el modulo de paso de mensajes 50 puede generar una senal de interrupcion en respuesta a un mensaje saliente que se escribe en el registro de mensajes salientes 62. La senal de interrupcion puede enviarse a un dispositivo anfitrion e indicar que el modulo de paso de mensajes 50 ha enviado un mensaje.
El registro de estado de interrupcion 64, en el ejemplo de la FIG. 2, esta configurado para almacenar un bit de estado indicativo de si un mensaje saliente se ha escrito en el registro de mensajes salientes 62. Por ejemplo, el registro de estado de interrupcion 64 y el registro de mensajes salientes 62 pueden estar configurados de tal manera que un bit de estado en el registro de estado de interrupcion 64 se active cuando un mensaje saliente se escribe en el registro de mensajes salientes 62. El bit de estado puede permitir que un proceso que se esta ejecutando en un dispositivo anfitrion sondee la GPU 40 para ver si hay un mensaje disponible.
El registro de confirmacion de interrupcion 66, en el ejemplo de la FIG. 2, esta configurado para almacenar un bit de confirmacion indicativo de si el dispositivo anfitrion ha leido el mensaje saliente almacenado en el registro de mensajes salientes 62. Por ejemplo, el registro de mensajes salientes 62 y el registro de confirmacion de interrupcion 66 pueden estar configurados de tal manera que, cuando un mensaje saliente se escribe en el registro de mensajes salientes 62, se activa el bit de confirmacion en el registro de confirmacion de interrupcion 66. En tal ejemplo, despues de que un dispositivo anfitrion lea el registro de mensajes salientes 62, el dispositivo anfitrion puede borrar el bit de confirmacion indicando de este modo que el dispositivo anfitrion ha leido el mensaje saliente y que un nuevo mensaje saliente puede escribirse en el registro de mensajes salientes 62. El bit de confirmacion puede utilizarse para implementar un esquema de control de flujo para datos de mensajes salientes.
El controlador de bus 46, en el ejemplo de la FIG. 2, esta configurado para permitir a dispositivos externos acceder a los registros de GPU accesibles por el anfitrion 44 a traves de la red de interconexion 18. Por ejemplo, el controlador del bus 46 puede multiplexar y demultiplexar senales de bus y realizar diversas operaciones de recepcion y transmision especificadas por las senales del bus. El controlador de bus 46 puede funcionar de acuerdo con uno o
5
10
15
20
25
30
35
40
45
50
55
60
65
mas estandares de buses publicos o de propiedad industrial.
A continuacion se describiran diversas tecnicas para el paso de mensajes en los sistemas informaticos de multiples procesadores, de acuerdo con ciertos aspectos de esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica las tecnicas ejemplares mostradas en las FIGs. 3 a 19 Para facilitar la explicacion, las tecnicas pueden describirse con respecto a los componentes del sistema informatico ejemplar 10 que se muestra en la FIG. 1, pero se deberia entender que las tecnicas pueden realizarse en otros sistemas con los mismos, o diferentes, componentes en la misma configuracion o en una diferente. En ejemplos adicionales, pueden describirse algunas de las tecnicas mostradas en las FIGs. 3 a 19 con respecto a componentes especificos de la GPU 40 de la FIG. 2. Una vez mas, se deberia entender que la FIG. 2 es solo un ejemplo de una GPU que puede ser capaz de implementar las tecnicas de esta divulgacion, y que tales tecnicas pueden ser realizadas por otras GPU con los mismos, o diferentes, componentes en la misma configuracion o una diferente.
La FIG. 3 ilustra una tecnica ejemplar para el paso de mensajes en un entorno de plataforma de multiples procesadores de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 3. La interfaz de cola de comandos 24 coloca un comando de transferencia de memoria en la cola de comandos 32 (70). La interfaz de cola de comandos 24 coloca un comando de ejecucion de tareas en la cola de comandos 32 (72). La interfaz de cola de comandos 24 ejecuta el comando de ejecucion de tareas para iniciar la ejecucion de la tarea en la GPU 14 (74). La interfaz de paso de mensajes del anfitrion 26 pasa uno o mas mensajes entre el dispositivo anfitrion 12 y la GPU 14 mientras la tarea 28 se esta ejecutando en la GPU 14 (76). Por ejemplo, la interfaz de paso de mensajes del anfitrion 26 puede pasar un mensaje a la GPU 14 que se origina a partir de una o mas instrucciones de envio emitidas por el proceso anfitrion 20. Las una o mas instrucciones de envio pueden especificar que la GPU 14, o una tarea que se esta ejecutando en la GPU 14, es el destino para el mensaje.
La FIG. 4 muestra una tecnica ejemplar para la ejecucion de una instruccion de envio emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 4. La interfaz de paso de mensajes del anfitrion 26 recibe una instruccion de envio desde el proceso anfitrion 20 (78). La interfaz de paso de mensajes del anfitrion 26 genera un mensaje saliente en base a los datos de mensajes contenidos en la instruccion de envio (80). En algunos ejemplos, el mensaje saliente puede ser identico a los datos de mensajes contenidos en la instruccion de envio. En ejemplos adicionales, la interfaz de paso de mensajes del anfitrion 26 puede anexar uno o mas elementos de informacion de cabecera y/o informacion de encaminamiento a los datos de mensajes contenidos en la instruccion de envio para generar el mensaje saliente. En otros ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede realizar una o mas operaciones de codificacion o de transformacion en los datos de mensajes contenidos en la instruccion de envio para generar el mensaje saliente. La interfaz de paso de mensajes del anfitrion 26 puede enviar el mensaje saliente a la GPU 14 (82).
La interfaz de paso de mensajes del anfitrion 26 puede determinar si la instruccion de envio es una instruccion bloqueante o una instruccion no bloqueante (84). En algunos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede tomar la determinacion de si la instruccion de envio es una instruccion bloqueante o no bloqueante, en base a un parametro de entrada especificado en la instruccion de envio. En otros ejemplos, pueden utilizarse dos tipos diferentes de instrucciones de envio, y la interfaz de paso de mensajes del anfitrion 26 puede tomar la determinacion de si la instruccion de envio es una instruccion bloqueante o no bloqueante, en base al tipo de instruccion, por ejemplo, el codigo de operacion (codeop) de la instruccion. Si la interfaz de paso de mensajes del anfitrion 26 determina que la instruccion de envio es una instruccion no bloqueante, la interfaz de paso de mensajes del anfitrion 26 puede devolver un asidero al proceso de llamada (86). El asidero puede permitir que el proceso de llamada consulte el asidero para determinar si el mensaje ha sido enviado con exito en un momento posterior. Si la consulta posterior indica que el envio ha fallado, el proceso de llamada puede tener que emitir una instruccion de envio posterior para volver a intentar la operacion de envio. En algunos ejemplos, el proceso de llamada puede implementar una rutina de retroceso o un mecanismo de desborde en respuesta a una operacion de envio fallida.
Si la interfaz de paso de mensajes del anfitrion 26 determina que la instruccion de envio es una instruccion bloqueante, la interfaz de paso de mensajes del anfitrion 26 puede determinar si el mensaje saliente fue recibido con exito por la GPU 14 (88). Si la interfaz de paso de mensajes del anfitrion 26 determina que el mensaje saliente se ha recibido con exito, la interfaz de paso de mensajes del anfitrion 26 puede devolver un valor al proceso de llamada indicando que el mensaje contenido en la instruccion de envio se ha enviado con exito (90). De lo contrario, si la interfaz de paso de mensajes del anfitrion 26 determina que el mensaje saliente no se ha recibido con exito, la interfaz de paso de mensajes del anfitrion 26 puede proceder a procesar el bloque 82 y volver a enviar el mensaje saliente a la GPU 14. La instruccion de bloqueo puede completarse, en algunos ejemplos, cuando la interfaz de paso de mensajes del anfitrion 26 determina que el mensaje fue recibido con exito o que se ha alcanzado un numero de umbral de intentos de entrega sin exito.
La FIG. 5 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de proceso 82 en la FIG. 4 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en
5
10
15
20
25
30
35
40
45
50
55
60
65
la FIG. 5. La interfaz de paso de mensajes del anfitrion 26 puede colocar o almacenar el mensaje saliente en el registro de mensajes entrantes 60 de la GPU 40 (92). La interfaz de paso de mensajes del anfitrion 26 puede incrementar el registro de recuento de mensajes 58 de la GPU 40 para indicar al modulo de paso de mensajes 50 en la GPU 14 que un nuevo mensaje ha llegado (94). En algunos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede utilizar hardware de registro correlacionado con memoria y/o hardware de registro correlacionado con E/S, conocido en la tecnica, para llevar a cabo uno o mas de los bloques de procesos 92 y 94.
La FIG. 6 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de decision 88 en la FIG. 4 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 6. La interfaz de paso de mensajes del anfitrion 26 puede comprobar un bit de estado en el registro de estado de mensajes 56 de la GPU 40 (96). La interfaz de paso de mensajes del anfitrion 26 puede determinar si el mensaje enviado fue aceptado por la GPU 14, en base al bit de estado en el registro de estado de mensajes 56 (98). Si el bit de estado indica que el mensaje enviado fue aceptado por la GPU 14, la interfaz de paso de mensajes del anfitrion 26 puede determinar que el mensaje saliente se ha recibido con exito (100). Por otro lado, si el bit de estado indica que el mensaje enviado no fue aceptado por la GPU 14, la interfaz de paso de mensajes del anfitrion 26 puede determinar que el mensaje saliente no se ha recibido con exito (102).
La FIG. 7 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de un mensaje recibido en un dispositivo informatico, tal como, por ejemplo, una GPU. En algunos ejemplos, la GPU 40 de la FIG. 2 puede utilizarse para poner en practica la tecnica ejemplar que se muestra en la FIG. 7. El modulo de paso de mensajes 50 en la GPU 40 recibe una senal de llegada de mensaje (104). Por ejemplo, el registro de recuento de mensajes 58 puede estar configurado de tal manera que cada vez que un dispositivo anfitrion incrementa un registro de recuento de mensajes 58, se envia un pulso de llegada de mensaje al modulo de paso de mensajes 50. El modulo de paso de mensajes 50 puede hacer que los datos almacenados en el registro de mensajes entrantes 60 sean transferidos al registro de datos entrantes 52 (106). Por ejemplo, el modulo de paso de mensajes 50 puede emitir una senal de control al registro de datos entrantes 52, haciendo que el registro de datos entrantes 52 sobrescriba los datos actuales almacenados en el registro de datos entrantes 52 con los datos almacenados en el registro de mensajes entrantes 60. El modulo de paso de mensajes 50 puede activar el bit de estado en el registro de datos entrantes 52 para indicar que los datos estan disponibles en el registro de datos entrantes 52, por ejemplo, no estan consumidos (108). El modulo de paso de mensajes 50 puede activar un bit de estado en el registro de estado de mensajes 56 para indicar que el mensaje entrante ha sido aceptado por la GPU 40 (110).
La FIG. 8 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de recepcion emitida por una tarea que se esta ejecutando en un dispositivo informatico de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 8. La interfaz de paso de mensajes de dispositivo 30 recibe una instruccion de recepcion desde la tarea 28 (112). La interfaz de paso de mensajes de dispositivo 30 determina si un mensaje esta disponible a partir de un dispositivo anfitrion (114).
Si el modulo de paso de mensajes 50 determina que el mensaje no esta disponible, el modulo de paso de mensajes
50 puede determinar si la instruccion de recepcion es una instruccion de recepcion bloqueante o una instruccion de recepcion no bloqueante (116). En algunos ejemplos, el modulo de paso de mensajes 50 puede tomar la determinacion de si la instruccion de recepcion es una instruccion bloqueante o no bloqueante, en base a un parametro de entrada especificado en la instruccion de recepcion. En otros ejemplos, pueden utilizarse dos tipos diferentes de instrucciones de recepcion, y el modulo de paso de mensajes 50 pueden tomar la determinacion de si la instruccion de recepcion es una instruccion bloqueante o no bloqueante, en base al tipo de instruccion, por ejemplo, el codigo de operacion (codeop) de la instruccion. Si el modulo de paso de mensajes 50 determina que la instruccion de recepcion es una instruccion bloqueante, el modulo de paso de mensajes 50 puede volver al bloque de decision 114 para determinar si un mensaje entrante esta disponible. De lo contrario, si el modulo de paso de mensajes 50 determina que la instruccion es una instruccion no bloqueante, el modulo de paso de mensajes 50 puede devolver un valor al proceso de llamada indicando que la instruccion de recepcion ha fallado (118).
51 el modulo de paso de mensajes 50 determina que un mensaje esta disponible en el dispositivo anfitrion, el modulo de paso de mensajes 50 puede devolver los datos de mensajes al proceso de llamada (120). El modulo de paso de mensajes 50 determina si los datos de mensajes deberian ser marcados como consumidos (122). El modulo de paso de mensajes 50 puede determinar si los datos deberian marcarse como consumidos en base a una o mas modalidades de consumo. En algunos ejemplos, la modalidad de consumo puede estar senalada por cable a la GPU 14. En otros ejemplos, la modalidad de consumo puede ser programable mediante la tarea 28 y/o el proceso anfitrion 20. Por ejemplo, una instruccion de envio y/o recepcion en la tarea 28 o el proceso anfitrion 20 puede contener un parametro que especifica una modalidad de consumo particular. Por ejemplo, una modalidad de consumo puede especificar que los datos de mensajes deberian marcarse como consumidos cuando al menos una instancia de ejecucion de la tarea ha leido los datos. Como otro ejemplo, una modalidad de consumo puede especificar que los datos de mensajes deberian marcarse como consumidos cuando al menos un numero de umbral de instancias de ejecucion de la tarea han leido los datos.
5
10
15
20
25
30
35
40
45
50
55
60
65
Si el modulo de paso de mensajes 50 determina que los datos de mensajes deberian marcarse como consumidos, el modulo de paso de mensajes 50 puede borrar los datos de mensajes (124). Por ejemplo, el modulo de paso de mensajes 50 puede borrar un bit de estado en el registro de datos entrantes 52. Por otro lado, si el modulo de paso de mensajes 50 determina que los datos de mensajes no deberian marcarse como consumidos, el modulo de paso de mensajes 50 puede mantener los datos de mensajes (126). Por ejemplo, el modulo de paso de mensajes 50 puede no borrar el bit de estado en el registro de datos entrantes 52.
La FIG. 9 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de decision 114 en la FIG. 8 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 9. El modulo de paso de mensajes 50 puede leer un bit de estado en el registro de datos entrantes 52 de la GPU 40 (128). El modulo de paso de mensajes 50 puede determinar si se ha activado el bit de estado (130). Si se ha activado el bit de estado en el registro de datos entrantes 52, el modulo de paso de mensajes 50 puede determinar que el mensaje entrante esta disponible (132). Por otro lado, si el bit de estado en el registro de datos entrantes 52 no esta activado, el modulo de paso de mensajes 50 puede determinar que el mensaje entrante no esta disponible (134).
La FIG. 10 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de proceso 120 en la FIG. 8 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 10. El modulo de paso de mensajes 50 puede recuperar los datos de mensajes entrantes a partir del registro de datos entrantes 52 en la GPU 40 (136). El modulo de paso de mensajes 50 puede generar datos de mensajes de retorno para la tarea 48 en base a los datos de mensajes recuperados desde el registro de datos entrantes 52 (138). En algunos ejemplos, los datos de mensajes devueltos pueden ser identicos a los datos de mensajes contenidos en el registro de datos entrantes 52. En ejemplos adicionales, el modulo de paso de mensajes 50 puede eliminar uno o mas elementos de informacion de cabecera y/o informacion de encaminamiento, a partir de los datos de mensajes contenidos en el registro de datos entrantes 52, para generar los datos de mensajes de retorno. En ejemplos adicionales, el modulo de paso de mensajes 50 puede realizar una o mas operaciones de decodificacion o de transformacion de los datos de mensajes contenidos en el registro de datos entrantes 52 para generar los datos de mensajes de retorno. El modulo de paso de mensajes 50 proporciona los datos de mensajes a la tarea 48 (140).
La FIG. 11 muestra una tecnica ejemplar para la ejecucion de una instruccion de envio emitida por un proceso que se esta ejecutando en un dispositivo informatico, por ejemplo, la GPU 14, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 11. El modulo de paso de mensajes 50 recibe una instruccion de envio desde la tarea 28 (142). El modulo de paso de mensajes 50 genera un mensaje saliente en base a datos de mensajes contenidos en la instruccion de envio (144). En algunos ejemplos, el mensaje saliente puede ser identico a los datos de mensajes contenidos en la instruccion de envio. En ejemplos adicionales, el modulo de paso de mensajes 50 puede anexar uno o mas elementos de informacion de cabecera y/o informacion de encaminamiento a los datos de mensajes contenidos en la instruccion de envio para generar el mensaje saliente. En otros ejemplos, el modulo de paso de mensajes 50 puede realizar una o mas operaciones de codificacion o de transformacion en los datos de mensajes contenidos en la instruccion de envio para generar el mensaje saliente. El modulo de paso de mensajes 50 puede enviar el mensaje saliente al dispositivo anfitrion 12 (146).
El modulo de paso de mensajes 50 puede determinar si la instruccion de envio es una instruccion bloqueante o una instruccion no bloqueante (148). En algunos ejemplos, el modulo de paso de mensajes 50 puede tomar la determinacion de si la instruccion de envio es una instruccion bloqueante o no bloqueante, en base a un parametro de entrada especificado en la instruccion de envio. En otros ejemplos, pueden utilizarse dos tipos diferentes de instrucciones de envio, y el modulo de paso de mensajes 50 pueden tomar la determinacion de si la instruccion de envio es una instruccion bloqueante o no bloqueante, en base al tipo de instruccion, por ejemplo, el codigo de operacion (codeop) de la instruccion. Si el modulo de paso de mensajes 50 determina que la instruccion de envio es una instruccion no bloqueante, el modulo de paso de mensajes 50 puede devolver un asidero al proceso de llamada, por ejemplo, la tarea 28 (150). El asidero puede permitir que el proceso de llamada consulte el asidero para determinar si el mensaje ha sido enviado con exito en un momento posterior. Si la consulta posterior indica que la operacion de envio fallo, el proceso de llamada puede tener que emitir una instruccion de envio posterior para volver a intentar la operacion de envio.
Si el modulo de paso de mensajes 50 determina que la instruccion de envio es una instruccion bloqueante, el modulo de paso de mensajes 50 puede determinar si el mensaje saliente ha sido recibido con exito por el dispositivo anfitrion 12 (152). Por ejemplo, el modulo de paso de mensajes 50 puede sondear un registro de estado contenido dentro del dispositivo anfitrion 12, que indica si el mensaje fue aceptado. Si el modulo de paso de mensajes 50 determina que el mensaje saliente se ha recibido con exito, el modulo de paso de mensajes 50 puede devolver un valor al proceso de llamada que indica que el mensaje contenido en la instruccion de envio ha sido enviado con exito (154). De lo contrario, si el modulo de paso de mensajes 50 determina que el mensaje saliente no se ha recibido con exito, el modulo de paso de mensajes 50 puede proceder a procesar el bloque 146 y re-enviar el mensaje saliente al dispositivo anfitrion 12. La instruccion bloqueante se puede completar, en algunos ejemplos, cuando el modulo de
5
10
15
20
25
30
35
40
45
50
55
60
65
paso de mensajes 50 determina que el mensaje fue recibido con exito o se ha alcanzado un numero de umbral de intentos de entrega sin exito.
La FIG. 12 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de proceso 146 en la FIG. 11 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 12. El modulo de paso de mensajes 50 puede colocar o almacenar el mensaje saliente en el registro de datos salientes 54 (156). El registro de mensajes salientes 62 puede actualizar los datos en el registro de mensajes salientes 62 para corresponderse con el registro de datos salientes 54, en respuesta a los nuevos datos que se colocan en el registro de datos salientes 54 (158). El modulo de paso de mensajes 50 puede generar y enviar una senal de interrupcion al dispositivo anfitrion 12 indicando que hay un mensaje disponible proveniente de la tarea 28 de la GPU 40 (160).
La FIG. 13 es otra tecnica ejemplar que puede utilizarse para implementar el bloque de proceso 146 de la FIG. 11 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 13. El modulo de paso de mensajes 50 puede colocar o almacenar el mensaje saliente en el registro de datos salientes 54 (162). El registro de mensajes salientes 62 puede actualizar los datos en el registro de mensajes salientes 62 para corresponderse con el registro de datos salientes 54, en respuesta a los nuevos datos que se colocan en el registro de datos salientes 54 (164). El modulo de paso de mensajes 50 puede activar un bit de estado en el registro de estado de interrupcion 64 para indicar que hay un mensaje disponible de la tarea 28 de la GPU 40. Puede activarse el bit de estado para permitir que el dispositivo anfitrion 12 sondee la GPU 40 para determinar si un mensaje esta disponible (166).
La FIG. 14 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de registro de rutina de devolucion de llamada, emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 14. La interfaz de paso de mensajes del anfitrion 26 recibe una instruccion de registro de rutina de devolucion de llamada desde el proceso anfitrion 20 (168). La interfaz de paso de mensajes del anfitrion 26 asocia la rutina de devolucion de llamada, especificada en la instruccion de registro de rutina de devolucion de llamada, con una senal de interrupcion desde un dispositivo especificado en la instruccion, por ejemplo, la GPU 14 (170). En algunos ejemplos, la senal de interrupcion puede ser indicativa de que una tarea que se esta ejecutando en el dispositivo especificado, por ejemplo, la tarea 28 que se esta ejecutando en la GPU 14, ha enviado un mensaje. La senal de interrupcion, en algunos ejemplos, puede entregarse mediante una linea de senal de interrupcion dedicada que esta acoplada entre el dispositivo anfitrion 12 y la GPU 14. En otros ejemplos, la senal de interrupcion puede ser indicativa de otros sucesos, ademas de la tarea 28 que envia un mensaje. En dichos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede realizar un procesamiento adicional despues de recibir la senal de interrupcion, para determinar cual de los multiples sucesos esta representado por la senal.
La interfaz de paso de mensajes del anfitrion 26 determina si la rutina de devolucion de llamada se asocio con exito con la senal de interrupcion (172). Si la rutina de devolucion de llamada se asocio con exito con la senal de interrupcion, la interfaz de paso de mensajes del anfitrion 26 puede devolver un valor al proceso de llamada, que indica que la operacion de registro de rutina de devolucion de llamada se completo con exito (174). De lo contrario, si la rutina de devolucion de llamada no se asocio con exito con la senal de interrupcion, por ejemplo, se produjo un error, la interfaz de paso de mensajes del anfitrion 26 puede devolver un valor al proceso de llamada que indica que la operacion de registro de rutina de devolucion de llamada ha fallado (176).
La FIG. 15 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de una interrupcion recibida desde un dispositivo informatico de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 15. La interfaz de paso de mensajes del anfitrion 26 recibe una senal de interrupcion desde un dispositivo informatico, por ejemplo, la GPU 14. (178). La interfaz de paso de mensajes del anfitrion 26 determina si se envio la senal de interrupcion en respuesta a un suceso de recepcion de mensajes (180). En otras palabras, la interfaz de paso de mensajes del anfitrion 26 puede determinar si la senal de interrupcion indica que una tarea que se esta ejecutando en el dispositivo, por ejemplo, la tarea 28 que se esta ejecutando en la GPU 14, ha enviado un mensaje.
En algunos ejemplos, la senal de interrupcion puede ser una senal de interrupcion dedicada que senaliza sucesos de recepcion de mensajes y ningun otro suceso. En tales ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede determinar que se envio la senal de interrupcion en respuesta a un suceso de recepcion de mensaje, en virtud de la recepcion de la propia senal de interrupcion, y que no es necesario realizar ninguna otra operacion. En ejemplos en los que la senal de interrupcion senaliza una pluralidad de posibles sucesos, la interfaz de paso de mensajes del anfitrion 26 tal vez necesite consultar el dispositivo informatico para determinar que suceso se ha senalizado.
Si la interfaz de paso de mensajes del anfitrion 26 determina que no se envio la senal de interrupcion en respuesta a un suceso de recepcion de mensaje, la interfaz de paso de mensajes del anfitrion 26 puede comprobar si hay otros
5
10
15
20
25
30
35
40
45
50
55
60
65
tipos de sucesos (182). De lo contrario, si la interfaz de paso de mensajes del anfitrion 26 determina que se envio la senal de interrupcion en respuesta a un suceso de recepcion de mensajes, la interfaz de paso de mensajes del anfitrion 26 puede ejecutar la rutina de devolucion de llamada asociada con el dispositivo desde el que se recibio el mensaje (184).
La FIG. 16 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de decision 180 en la FIG. 15 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 16. La interfaz de paso de mensajes del anfitrion 26 puede leer el registro de estado de interrupcion 64 en la GPU 40 (186). La interfaz de paso de mensajes del anfitrion 26 puede determinar si un bit de estado en el registro de estado de interrupcion 64 indica que un nuevo mensaje esta disponible para el dispositivo anfitrion (188). Por ejemplo, el modulo de paso de mensajes 50 puede activar el bit de estado en el registro de estado de interrupcion 64 cuando un mensaje esta disponible, y la interfaz de paso de mensajes del anfitrion 26 puede sondear el registro de estado de interrupcion 64 para determinar si se activa el bit de estado con el fin de determinar si un nuevo mensaje esta disponible para el dispositivo anfitrion. Si el bit de estado indica que un nuevo mensaje esta disponible para el dispositivo anfitrion, la interfaz de paso de mensajes del anfitrion 26 puede determinar que se ha enviado la senal de interrupcion en respuesta a un suceso de recepcion de mensaje (190). Por otro lado, si el bit de estado indica que un nuevo mensaje no esta disponible para el dispositivo anfitrion, la interfaz de paso de mensajes del anfitrion 26 puede determinar que no se ha enviado la senal de interrupcion en respuesta a un suceso de recepcion de mensaje (192).
La FIG. 17 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de proceso 184 en la FIG. 15 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 17. La interfaz de paso de mensajes del anfitrion 26 puede recuperar el mensaje desde el registro de mensajes salientes 62 en la GPU 40 (194). La interfaz de paso de mensajes del anfitrion 26 puede borrar un bit de confirmacion en el registro de confirmacion de interrupcion 66 (196). El borrado del bit de confirmacion puede facilitar el control del flujo de la GPU 40. Por ejemplo, la GPU 40 puede activar el bit de confirmacion en el registro de confirmacion de interrupcion 66 cuando se escribe un mensaje saliente en el registro de mensajes salientes 62, y esperar hasta que el bit de confirmacion se haya borrado antes de escribir datos adicionales en el registro de mensajes salientes 62.
La FIG. 18 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de lectura emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 para poner en practica la tecnica ejemplar que se muestra en la FIG. 18. La interfaz de paso de mensajes del anfitrion 26 recibe una instruccion de lectura que especifica un dispositivo en particular, del cual leer los datos (198). La interfaz de paso de mensajes principal 26 sondea el dispositivo especificado en la instruccion de lectura (200). La interfaz de paso de mensajes del anfitrion 26 determina si un mensaje esta disponible en el dispositivo especificado en la instruccion de recepcion, en base a los datos de sondeo recibidos desde la operacion de sondeo (202). Si la interfaz de paso de mensajes del anfitrion 26 determina que un mensaje esta disponible en el dispositivo especificado en la instruccion de recepcion, la interfaz de paso de mensajes del anfitrion 26 puede recuperar el mensaje desde el dispositivo especificado en la instruccion de lectura (204). En algunos ejemplos, la interfaz de paso de mensajes del anfitrion 26 puede recuperar el mensaje desde un registro en el dispositivo que sea accesible para el dispositivo anfitrion 12, por ejemplo, el registro de mensajes salientes en la GPU 62 40. La interfaz de paso de mensajes del anfitrion 26 puede devolver los datos de mensajes al proceso llamante, por ejemplo, el proceso anfitrion 20 (206). Si la interfaz de paso de mensajes del anfitrion 26 determina que un mensaje no esta disponible en el dispositivo especificado en la instruccion de recepcion, la interfaz de paso de mensajes del anfitrion 26 puede devolver un valor que indica que la instruccion de lectura fallo (208). El proceso llamante tal vez necesite emitir de nuevo la instruccion de lectura para volver a intentar la operacion de lectura.
La FIG. 19 es un diagrama de flujo que ilustra una tecnica ejemplar que puede utilizarse para implementar el bloque de decision 202 en la FIG. 18 de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 10 de la FIG. 1 y/o la GPU 40 de la FIG. 2 para poner en practica la tecnica ejemplar que se muestra en la FIG. 19. La interfaz de paso de mensajes del anfitrion 26 puede leer el registro de estado de interrupcion 64 en la GPU 40 (210). La interfaz de paso de mensajes del anfitrion 26 puede determinar si un bit de estado en el registro de estado de interrupcion 64 indica que un nuevo mensaje esta disponible para el dispositivo anfitrion (212). Por ejemplo, el modulo de paso de mensajes 50 puede activar el bit de estado en el registro de estado de interrupcion 64 cuando un mensaje esta disponible, y la interfaz de paso de mensajes del anfitrion 26 puede sondear el registro de estado de interrupcion 64 para determinar si esta activado el bit de estado, con el fin de determinar si un nuevo mensaje esta disponible para el dispositivo anfitrion. Si esta activado el bit de estado, la interfaz de paso de mensajes del anfitrion 26 puede determinar que un mensaje esta disponible (214). Por otro lado, si el bit de estado no esta activado, la interfaz de paso de mensajes del anfitrion 26 puede determinar que el mensaje no esta disponible (216).
Aunque las tecnicas de paso de mensajes implementadas por la interfaz de paso de mensajes del anfitrion 26 y la interfaz de paso de mensajes de dispositivo 30 se han descrito anteriormente como proporcionando senalizacion
5
10
15
20
25
30
35
40
45
50
55
60
65
fuera de banda entre el dispositivo anfitrion 12 y la GPU 14, en otros sistemas ejemplares pueden utilizarse otras tecnicas para proporcionar senalizacion fuera de banda. Por ejemplo, se puede definir una cola especial de alta prioridad, en algunos ejemplos, que puede utilizarse para el envio de mensajes fuera de banda.
La FIG. 20 es un diagrama de bloques que ilustra un sistema informatico ejemplar 310 que puede facilitar el uso de objetos de memoria inmediata de acuerdo con esta divulgacion. El sistema informatico 310 esta configurado para procesar una o mas aplicaciones de software en multiples dispositivos de procesamiento. En algunos ejemplos, las una o mas aplicaciones pueden incluir un proceso anfitrion, y el sistema informatico 310 puede estar configurado para ejecutar el proceso anfitrion y para distribuir la ejecucion de una o mas tareas iniciadas por el proceso anfitrion en otros dispositivos informaticos dentro del sistema informatico 310. En otros ejemplos, el proceso anfitrion y/o las tareas ejecutadas por el sistema informatico 310 pueden ser programados de acuerdo con un modelo de programacion en paralelo. Por ejemplo, las aplicaciones pueden incluir instrucciones que estan disenadas para aprovechar el paralelismo a nivel de tareas y/o el paralelismo a nivel de datos de los sistemas de hardware subyacentes.
El sistema informatico 310 puede comprender un ordenador personal, un ordenador de sobremesa, un ordenador portatil, una estacion de trabajo de ordenador, una consola o una plataforma de videojuegos, un telefono movil, tal como, por ejemplo, un telefono celular o por satelite, un telefono movil, un telefono fijo, un telefono de Internet, un dispositivo de mano como un dispositivo de videojuegos portatil o un asistente digital personal (PDA), un reproductor de medios digitales, tal como un reproductor personal de musica, un reproductor de video, un dispositivo de visualizacion, o un televisor, un decodificador de television, un servidor, un dispositivo de red intermedia, un ordenador central o cualquier otro tipo de dispositivo que procesa informacion.
El sistema informatico 310 incluye un dispositivo anfitrion 312, una GPU 314, una memoria 316 y una red de interconexion 318. El dispositivo anfitrion 312 esta configurado para proporcionar una plataforma para la ejecucion de un proceso anfitrion y un modulo de tiempo de ejecucion para una API de la plataforma informatica de multiples procesadores. Habitualmente, el dispositivo anfitrion 312 es una CPU de proposito general, aunque el dispositivo anfitrion 12 puede ser cualquier tipo de dispositivo capaz de ejecutar programas. El dispositivo anfitrion 12 esta acoplado comunicativamente a la GPU 314 y a la memoria 316 a traves de la red de interconexion 318. El dispositivo anfitrion 312 incluye un proceso anfitrion 320, un modulo de tiempo de ejecucion 322, una memoria cache del anfitrion 324 y un modulo de control de memoria cache del anfitrion. El proceso anfitrion 320 y el modulo de tiempo de ejecucion 322 se pueden ejecutar en cualquier combinacion de uno o mas procesadores programables.
El proceso anfitrion 320 incluye un conjunto de instrucciones que forman un programa de software para su ejecucion en la plataforma del sistema informatico 310. El programa de software puede estar disenado para realizar una o mas tareas especificas para un usuario final. Tales tareas pueden, en algunos ejemplos, implicar algoritmos intensivos en calculo, que pueden explotar los multiples dispositivos de procesamiento y arquitecturas paralelas proporcionados por el sistema informatico 310.
El modulo de tiempo de ejecucion 322 puede ser un modulo de software que implementa una o mas interfaces configuradas para dar servicio a una o mas de las instrucciones contenidas en el proceso anfitrion 320. Las interfaces implementadas por el modulo de tiempo de ejecucion 322 incluyen la interfaz de memoria intermedia 328. En algunos ejemplos, el modulo de tiempo de ejecucion 322 puede implementar una o mas entre la interfaz de cola de comandos 24 mostrada en la FIG. 1 y/o la interfaz de paso de mensajes del anfitrion 26 mostrada en la FIG. 1, ademas de la interfaz de memoria intermedia 328. En ejemplos adicionales, el modulo de tiempo de ejecucion 322 puede implementar una o mas interfaces contenidas dentro de una API estandar dentro del sistema de multiples procesadores, ademas de las interfaces descritas en esta divulgacion. En algunos ejemplos, la API estandar puede ser una API de plataforma informatica heterogenea, una API de multiples plataformas, una API de multiples proveedores, una API de programacion en paralelo, una API de programacion en paralelo a nivel de tareas y/o una API de programacion en paralelo a nivel de datos. En otros ejemplos, la API estandar puede ser la API de OpenCL. En tales ejemplos, el modulo de tiempo de ejecucion 322 puede estar disenado para estar en conformidad con una o mas de las especificaciones de OpenCL. En ejemplos adicionales, el modulo de tiempo de ejecucion 322 se puede implementar como parte de, o ser, un programa controlador, por ejemplo, un controlador de GPU.
La interfaz de memoria intermedia 328 esta configurada para recibir una o mas instrucciones de creacion de objetos de memoria desde el proceso anfitrion 20 y para ejecutar las funciones especificadas por las instrucciones recibidas. En algunos ejemplos, la interfaz de memoria intermedia 328 puede implementarse como una extension para una API estandar existente, tal como, por ejemplo, la API de OpenCL. En ejemplos adicionales, la interfaz de cola de comandos 24 puede estar integrada en una API estandar existente, tal como, por ejemplo, la API de OpenCL.
La memoria cache del anfitrion 324 esta configurada para almacenar datos para su uso por parte de los procesos que se estan ejecutando dentro del dispositivo anfitrion 312. En algunos ejemplos, el espacio de memoria asociado a los datos almacenados en la memoria cache del anfitrion 324 puede superponerse con una parte del espacio de memoria en la memoria 316. La memoria cache del anfitrion 324 puede ser cualquier tipo de memoria cache conocida en la tecnica. Por ejemplo, la memoria cache del anfitrion 324 puede incluir cualquier combinacion de niveles de memoria cache (por ejemplo, LI, L2, etc.) y/o esquemas de correlacion (por ejemplo, correlacion directa,
5
10
15
20
25
30
35
40
45
50
55
60
65
totalmente asociativa, asociativa por conjuntos, etc.). El modulo de control de la memoria cache del anfitrion 326 esta configurado para controlar el funcionamiento de la memoria cache del anfitrion 324.
La GPU 314 esta configurada para ejecutar una o mas tareas en respuesta a las instrucciones recibidas desde el dispositivo anfitrion 312. La GPU 314 puede ser cualquier tipo de GPU que incluya uno o mas procesadores o elementos de procesamiento programables. Por ejemplo, la GPU 314 puede incluir una o mas unidades de sombreado programables que estan configuradas para ejecutar una pluralidad de instancias de ejecucion para una tarea en paralelo. Las unidades de sombreado programables pueden incluir una unidad de sombreado de vertices, una unidad de sombreado de fragmentos, una unidad de sombreado de geometria y/o una unidad de sombreado unificada. La GPU 314 esta acoplada comunicativamente al dispositivo anfitrion 312 y a la memoria 316 a traves de la red de interconexion 318. La GPU 314 incluye una tarea 330, una memoria cache de GPU 332 y un modulo de control de memoria cache de GPU 334. La tarea 330 puede ejecutarse en cualquier combinacion de uno o mas elementos de procesamiento programables.
La tarea 330 comprende un conjunto de instrucciones que forman una tarea para la ejecucion en un dispositivo informatico en un sistema informatico 310. En algunos ejemplos, el conjunto de instrucciones para la tarea 330 puede definirse en el proceso anfitrion 320 y, en algunos casos, compilarse mediante las instrucciones incluidas en el proceso anfitrion 320. En ejemplos adicionales, la tarea 330 puede ser un programa de nucleo que tiene multiples instancias de ejecucion que se estan ejecutando en la GPU 314 en paralelo. En dichos ejemplos, el proceso anfitrion 320 puede definir un espacio de indices para el nucleo que correlaciona instancias de ejecucion del nucleo con los respectivos elementos de procesamiento para la ejecucion de las instancias de ejecucion de nucleo, y la GPU 314 puede ejecutar las multiples instancias de ejecucion de nucleo para la tarea 330 de acuerdo con el espacio de indices definido para el nucleo.
La memoria cache de GPU 332 esta configurada para almacenar datos para su uso por parte de las tareas que se ejecutan dentro de la GPU 314. En algunos ejemplos, el espacio de memoria asociado a los datos almacenados en la memoria cache de GPU 332 puede superponerse con una parte del espacio de memoria en la memoria 316. La memoria cache de GPU 332 puede ser cualquier tipo de memoria cache conocida en la tecnica. Por ejemplo, la memoria cache de GPU 332 puede incluir cualquier combinacion de niveles de memoria cache (por ejemplo, LI, L2, etc.) y/o esquemas de correlacion (por ejemplo, correlacion directa, totalmente asociativa, asociativa por conjuntos, etc.). El modulo de control de memoria cache de GPU 334 esta configurado para controlar el funcionamiento de la memoria cache de GPU 332.
La memoria 316 esta configurada para almacenar datos para su uso por uno entre el dispositivo anfitrion 312 y la GPU 314, o ambos. La memoria 316 puede incluir cualquier combinacion de una o mas memorias o dispositivos de almacenamiento volatiles o no volatiles, tales como, por ejemplo, memoria de acceso aleatorio (RAM), RAM estatica (SRAM), RAM dinamica (DRAM), memoria de solo lectura (ROM), ROM borrable y programable (EPROM), ROM borrable y programable electricamente (EEPROM), memoria flash, un medio magnetico de almacenamiento de datos o un medio de almacenamiento optico. La memoria 316 esta acoplada comunicativamente al dispositivo anfitrion 312 y a la GPU 314 a traves de la red de interconexion 318. La memoria 316 incluye el espacio de memoria compartida 336. El espacio de memoria compartida 336 puede ser un espacio de memoria que es accesible tanto por el dispositivo anfitrion 312 como por la GPU 314.
La red de interconexion 318 esta configurada para facilitar la comunicacion entre el dispositivo anfitrion 312, la GPU 314 y la memoria 316. La red de interconexion 318 puede ser cualquier tipo de red de interconexion conocida en la tecnica. En el sistema informatico ejemplar 310 de la FIG. 20, la red de interconexion 318 es un bus. El bus puede incluir uno o mas de cualquiera entre una diversidad de estructuras de bus, tales como, por ejemplo, un bus de tercera generacion (por ejemplo, un bus HyperTransport o un bus InfiniBand), un bus de segunda generacion (por ejemplo, un bus de Puerto de Graficos Avanzado, un bus Expreso de Interconexion de Componentes Perifericos (Pcie) o un bus de Interfaz Extensible Avanzada (AXI)) o cualquier otro tipo de bus. La red de interconexion 318 esta acoplada al dispositivo anfitrion 312, la GPU 314 y la memoria 316.
Las estructuras y funcionalidades de los componentes en el sistema informatico 310 se describiran ahora con mas detalle. Como se ha expuesto anteriormente, el proceso anfitrion 320 incluye un conjunto de instrucciones. El conjunto de instrucciones puede incluir, por ejemplo, una o mas instrucciones de creacion de objetos de memoria. En ejemplos adicionales, el conjunto de instrucciones puede incluir instrucciones que especifican las tareas o nucleos que se tienen que ejecutar en la GPU 314, instrucciones que crean colas de comandos y que asocian las colas de comandos con determinados dispositivos, instrucciones que compilan y vinculan programas, instrucciones que configuran parametros de nucleo , instrucciones que definen espacios de indices, instrucciones que definen un contexto de dispositivo, instrucciones de puesta en cola, instrucciones de paso de mensajes y otras instrucciones que prestan soporte a la funcionalidad proporcionada por el proceso anfitrion 320.
De acuerdo con esta divulgacion, el proceso anfitrion 320 puede interactuar con la interfaz de memoria intermedia 328 mediante la emision de una o mas instrucciones de creacion de objetos de memoria para la interfaz de memoria intermedia 328, instruyendo a la interfaz de memoria intermedia 328 para crear un objeto de memoria basado en la informacion contenida en la instruccion que especifica si una modalidad inmediata esta habilitada para el objeto de
5
10
15
20
25
30
35
40
45
50
55
60
65
memoria. Como se usa en el presente documento, un objeto de memoria puede referirse a un objeto de software que representa una region del espacio de memoria accesible por la GPU 314. En algunos ejemplos, la region del espacio de memoria tambien puede ser accesible por el dispositivo anfitrion 312. Un objeto de memoria puede incluir los datos contenidos en el espacio de memoria asociado con el objeto de memoria. El objeto de memoria puede incluir ademas una o mas caracteristicas asociadas con el espacio de memoria. En algunos ejemplos, un objeto de memoria puede incluir un asidero para una region de recuento de referencia de la memoria global, por ejemplo, la memoria 316.
Los objetos de memoria pueden incluir objetos de memoria intermedia y objetos de imagen. Un objeto de memoria intermedia puede ser un objeto de memoria que almacena una coleccion unidimensional de octetos. La coleccion unidimensional de octetos pueden ser los datos asociados con el objeto de memoria. Un objeto de memoria intermedia tambien puede incluir informacion tal como, por ejemplo, el tamano del espacio de memoria asociado con el objeto de memoria intermedia, en octetos, la informacion de uso para el objeto de memoria intermedia y la region del espacio de memoria asignado para el objeto de memoria intermedia. Un objeto de imagen almacena una matriz bidimensional o tridimensional de datos, tales como, por ejemplo, una textura, una memoria intermedia de trama o una imagen. Un objeto de imagen tambien puede incluir informacion tal como, por ejemplo, las dimensiones de la imagen, una descripcion de cada elemento en la imagen, la informacion de uso para el objeto de la imagen y la region del espacio de memoria asignado para el objeto de la imagen.
De acuerdo con algunos aspectos de esta divulgacion, las instrucciones de creacion de objetos de memoria pueden incluir un parametro de entrada que especifica si una modalidad inmediata deberia ser habilitada para el objeto de memoria a crear. Como se ha expuesto en mas detalle en el presente documento, cuando se habilita la modalidad inmediata, el objeto de memoria puede implementarse como una memoria compartida no almacenable en memoria cache y/o como una memoria compartida coherente con memoria cache. Cuando la modalidad inmediata esta inhabilitada, el objeto de memoria puede no implementarse necesariamente como una memoria compartida no almacenable en memoria cache, o como una memoria compartida coherente con memoria cache.
En algunos ejemplos, el objeto de memoria puede incluir un atributo de modalidad inmediata que sea indicativo de si el objeto de memoria es un objeto de memoria en modalidad inmediata. En tales ejemplos, la interfaz de memoria intermedia 328 puede estar configurada para fijar el atributo de modalidad inmediata, para el objeto de memoria que tiene que crearse, en un valor indicativo de si la modalidad inmediata esta habilitada para el objeto de memoria, en base a la informacion que especifica si la modalidad inmediata deberia ser habilitada para el objeto de memoria. El atributo de modalidad inmediata del objeto de memoria puede ser utilizado por el sistema informatico 310 para determinar si implementa o no el objeto de memoria como una memoria compartida no almacenable en memoria cache y/o como una memoria compartida coherente con memoria cache.
Las instrucciones de creacion de objetos de memoria pueden, en algunos ejemplos, incluir una instruccion de creacion de objetos de memoria intermedia que instruye a la interfaz de memoria intermedia 328 para crear un objeto de memoria intermedia en base a la informacion contenida en la instruccion que especifica si una modalidad inmediata esta habilitada para el objeto de memoria intermedia. Las instrucciones de creacion de objetos de memoria pueden, en ejemplos adicionales, incluir una instruccion de creacion de objetos de imagen que instruye a la interfaz de memoria intermedia 328 para crear un objeto de imagen basandose en la informacion contenida en la instruccion que especifica si una modalidad inmediata esta habilitada para el objeto de la imagen.
En algunos ejemplos, la interfaz para la instruccion de creacion de objetos de memoria intermedia puede adoptar la forma siguiente:
cl_mem clCrearMemoriaIntermedia ( cl_context contexto, cl_mem_flags indicadores, size_t tamano, void *puntero_anfitrion, cl_int *dev_coderror)
donde clCrearMemoriaIntermedia es el identificador de la instruccion, cl_context contexto es un contexto valido, por ejemplo, un contexto de OpenCL, que se utiliza para crear el objeto de memoria intermedia, cl_mem_flags indicadores es un campo de bits que se utiliza para especificar la informacion de asignacion y uso para el objeto de memoria intermedia, size_t tamano es un parametro que especifica el tamano en octetos del objeto de memoria intermedia a ser asignado, void *puntero_anfitrion es un puntero para los datos de la memoria intermedia que pueden ser ya asignados por la aplicacion, y cl_int *dev_coderror devuelve uno o mas codigos de error. La instruccion puede devolver el objeto de memoria intermedia creado como un objeto de memoria cl_mem. En este ejemplo, el parametro de entrada que especifica si una modalidad inmediata deberia ser habilitada para el objeto de la imagen puede ser, por ejemplo, un indicador CL_INMEDIATO que se especifica en el campo cl_mem_flags indicadores.
En otros ejemplos, la interfaz para la instruccion de creacion de objetos de imagen puede adoptar la forma siguiente:
5
10
15
20
25
30
35
40
45
50
55
60
65
cl_mem clCrearImagen2D ( cl_context contexto, cl_mem_flags indicadores, const cl_image_format *formato_imagen, size_t ancho_imagen, size_t altura_imagen, size_t paso_linea_imagen, void *puntero_anfitrion, cl_int *dev_coderror)
donde clCrearImagen2D es el identificador de la instruccion, cl_context contexto es un contexto valido, por ejemplo, un contexto de OpenCL, que se utiliza para crear el objeto de memoria intermedia, cl_mem_flags indicadores es un campo de bits que se utiliza para especificar la informacion de la asignacion y la utilizacion de la imagen del objeto, const cl_image_format *formato_imagen apunta a una estructura que describe las propiedades de formato de la imagen que debe asignarse, size_t ancho_imagen es el ancho de la imagen en pixeles, size_t altura_imagen es la altura de la imagen en pixeles, size_t paso_linea_imagen es el paso de la linea de escaneo en octetos, void *puntero_anfitrion es un puntero a los datos de imagen que ya pueden ser asignados por la aplicacion y cl_int *dev_coderror devuelve uno o mas codigos de error. La instruccion puede devolver el objeto de imagen creado como un objeto de memoria cl_mem. En este ejemplo, el parametro de entrada que especifica si una modalidad inmediata deberia ser habilitada para el objeto de la imagen puede ser, por ejemplo, un indicador CL_INMEDIATO que se especifica en el campo cl_mem_flags indicadores.
En algunos ejemplos, las interfaces de creacion de objetos de memoria pueden estar configuradas para permitir solo un atributo de SOLO_ESCRITURA o un atributo de SOLO_LECTURA en terminos de atributos de lectura / escritura. En otras palabras, en tales ejemplos, la interfaz de memoria intermedia 328 puede no admitir un atributo de LECTURA_ESCRITURA. Las imagenes de CL no inmediatas pueden tener ya una caracteristica tal, proporcionada por la especificacion de OpenCL. No permitir el atributo LECTURA_ESCRITURA puede reducir la complejidad en el mantenimiento de la coherencia de la memoria cache.
De acuerdo con esta divulgacion, la interfaz de memoria intermedia 328 esta configurada para recibir una instruccion que especifica si una modalidad inmediata debe ser habilitada para el espacio de memoria compartida 336, que es accesible tanto por el dispositivo anfitrion 312 como por la GPU 314, y para habilitar selectivamente la modalidad inmediata para el espacio de memoria compartida 336, en base a la instruccion recibida que especifica si la modalidad inmediata deberia ser habilitada para el espacio de memoria compartida 336. Por ejemplo, la interfaz de memoria intermedia 328 puede habilitar la modalidad inmediata para el espacio de memoria compartida 336 si la instruccion especifica que la modalidad inmediata deberia ser habilitada para el espacio de memoria compartida 336, e inhabilitar la modalidad inmediata para el espacio de memoria compartida 336 si la instruccion especifica que la modalidad inmediata deberia ser inhabilitada para el espacio de memoria compartida 336. La instruccion puede ser, por ejemplo, una entre una instruccion de creacion de objetos de memoria, una instruccion de creaciones de objetos de memoria intermedia o una instruccion de creacion de objetos de imagen. El espacio de memoria compartida 336 puede corresponder, por ejemplo, a un objeto de memoria, un objeto de memoria intermedia o un objeto de imagen.
En algunos ejemplos, cuando la interfaz de memoria intermedia 328 habilita la modalidad inmediata para el espacio de memoria compartida 336, la interfaz de memoria intermedia 328 puede hacer que los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 se inhabiliten. De manera similar, cuando la interfaz de memoria intermedia 328 inhabilita la modalidad inmediata para el espacio de memoria compartida 336, la interfaz de memoria intermedia 328 puede hacer que los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 sean habilitados para el espacio de memoria compartida 336. Los servicios de almacenamiento en memoria cache pueden ser realizados por una entre la memoria cache del anfitrion 324 y la memoria cache de la GPU 332, o ambas. Los servicios de almacenamiento en memoria cache, como se usan en el presente documento, pueden referirse a los servicios que habitualmente son llevados a cabo por una memoria cache, como se conoce en la tecnica.
En ejemplos adicionales, la interfaz de memoria intermedia 328 puede habilitar e inhabilitar la modalidad inmediata para el espacio de la memoria compartida 336, mediante la fijacion de un atributo de modalidad inmediata, asociado con el espacio de memoria compartida 336, en un valor indicativo de si la modalidad inmediata esta habilitada para el espacio de memoria compartida. Por ejemplo, la interfaz de memoria intermedia 328 puede habilitar la modalidad inmediata para el espacio de memoria compartida 336 mediante la fijacion de un atributo de modalidad inmediata, asociado con el espacio de memoria compartida 336, en un valor que indica que la modalidad inmediata esta habilitada para el espacio de memoria compartida 336, por ejemplo, atributo de modalidad inmediata = verdadero. De manera similar, la interfaz de memoria intermedia 328 puede inhabilitar la modalidad inmediata para el espacio de memoria compartida 336 fijando el atributo de modalidad inmediata, asociado con el espacio de la memoria compartida 336, en un valor que indica que la modalidad inmediata esta inhabilitada para el espacio de memoria compartida 336, por ejemplo, atributo de modalidad inmediata = falso. El atributo de modalidad inmediata puede, en
5
10
15
20
25
30
35
40
45
50
55
60
65
algunos casos, ser una variable global, por ejemplo, una variable booleana, accesible por la tarea 330 que se esta ejecutando en la GPU 314. En algunos ejemplos, el atributo de modalidad inmediata puede ser almacenado dentro del espacio de memoria compartida 336. En otros ejemplos, el atributo de modalidad inmediata se puede almacenar en una ubicacion accesible por la tarea 330 que se esta ejecutando en la GPU 314, en lugar del espacio de memoria compartida 336. En los casos en que el espacio de memoria compartida 336 es parte de un objeto de memoria, el atributo de modalidad inmediata puede ser almacenado en una ubicacion del espacio de memoria donde se almacenan los otros atributos del objeto de memoria.
En ejemplos en los que la interfaz de memoria intermedia 328 habilita e inhabilita la modalidad inmediata para el espacio de memoria compartida 336 mediante la activacion de un atributo de modalidad inmediata asociado con el espacio de memoria compartida 336, el codigo fuente de la tarea 330 puede, en algunos casos, ser compilado de tal manera que, antes de la realizacion de una lectura o escritura en memoria con respecto al espacio de memoria compartida 336, la tarea 330 acceda al atributo de modalidad inmediata asociado con el espacio de memoria compartida 336, y determine si una modalidad inmediata esta habilitada para el espacio de memoria compartida 336 en base al atributo de modalidad inmediata para espacio de memoria compartida 336. Si la modalidad inmediata esta habilitada para el espacio de memoria compartida 336, a continuacion la tarea 330 puede programarse para ejecutar una instruccion de lectura o escritura en modalidad inmediata, para leer datos de, o escribir datos en, el espacio de memoria compartida 336. Por otro lado, si la modalidad inmediata no esta habilitada para el espacio de memoria compartida, a continuacion la tarea 330 puede programarse para ejecutar una instruccion de lectura o escritura en modalidad de almacenamiento en memoria cache, por ejemplo, una instruccion de lectura o escritura en memoria cache, para leer datos de, o escribir datos en, el espacio de memoria compartida 336.
Las instrucciones de escritura y lectura en modalidad inmediata pueden, por ejemplo, llevar a cabo las operaciones de lectura y escritura, respectivamente, sin necesidad de utilizar los servicios de almacenamiento en memoria cache. Por ejemplo, la instruccion de lectura en modalidad inmediata puede hacer que la memoria cache sea invalidada antes de realizar la operacion de lectura y/o puede pasar por alto la memoria cache cuando se realiza la operacion de lectura. La instruccion de escritura en modalidad inmediata, por ejemplo, puede hacer que la memoria cache realice una re-escritura inmediata cuando se realiza la operacion de escritura y/o puede pasar por alto la memoria cache cuando se realiza la operacion de escritura. Las instrucciones de lectura y escritura en memoria cache pueden, por ejemplo, ejecutar operaciones de lectura y escritura, respectivamente, utilizando los servicios de almacenamiento de una de ellas, o ambas, de la cache de GPU 332.
En casos adicionales, el compilador para la tarea 330 puede tener acceso a informacion, al compilar el codigo fuente de la tarea 330, indicativa de si la modalidad inmediata esta habilitada para el espacio de memoria compartida 336. Por ejemplo, el codigo fuente de la tarea 330, por ejemplo, el codigo fuente del nucleo, puede incluir un indicador indicativo de si la modalidad inmediata esta habilitada para un objeto de memoria utilizado por la tarea 330 y asociado con el espacio de memoria compartido 336. En algunos ejemplos, el indicador puede tomar la forma de un calificador de atributo de OpenCL, tal como, por ejemplo, un calificador de atributo _cl_immediate. Si la modalidad inmediata esta habilitada para el objeto de memoria asociado con el espacio de memoria compartida 336, entonces el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya instrucciones de lectura y/o escritura en modalidad inmediata para las operaciones de lectura o escritura que tienen lugar con respecto al espacio de memoria compartida 336. De lo contrario, si la modalidad inmediata no esta habilitada para el objeto de memoria asociado con el espacio de memoria compartida 336, a continuacion, el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 no incluya instrucciones de lectura y/o escritura en modalidad inmediata para las operaciones de lectura o escritura que se realizan con respecto al espacio de memoria compartida 336. Por ejemplo, el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya instrucciones de lectura y/o escritura en memoria cache para las operaciones de lectura o escritura que se realizan con respecto al espacio de memoria compartida 336.
En otros ejemplos, la interfaz de memoria intermedia 328 puede habilitar e inhabilitar la modalidad inmediata para el espacio de memoria compartida 336 habilitando e inhabilitando las prestaciones de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 mediante al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314. Por ejemplo, la interfaz de memoria intermedia 328 puede habilitar la modalidad inmediata para el espacio de memoria compartida 336 inhabilitando las prestaciones de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 mediante al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314. De forma similar, la interfaz de memoria intermedia 328 puede inhabilitar la modalidad inmediata para el espacio de memoria compartida 336 al permitir la prestacion de servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 por al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314.
En tales ejemplos, la interfaz de memoria intermedia 328 puede habilitar e inhabilitar las prestaciones de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 mediante la configuracion de un modulo de control de memoria cache basado en hardware y/o una unidad de gestion de memoria basada en hardware, asociada con la memoria cache que realiza los servicios de almacenamiento en
5
10
15
20
25
30
35
40
45
50
55
60
65
memoria cache para el espacio de memoria compartida 336. Por ejemplo, para hacer posible la prestacion de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 por parte de la memoria cache del anfitrion 324, la interfaz de memoria intermedia 328 puede configurar el modulo de control de la memoria cache del anfitrion 326 de tal manera que los servicios de almacenamiento en memoria cache sean proporcionados por la memoria cache del anfitrion 324 para el espacio de memoria compartida 336. Para inhabilitar la prestacion de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 por parte de la memoria cache del anfitrion 324, la interfaz de memoria intermedia 328 puede, por ejemplo, configurar el modulo de control de memoria cache del anfitrion 326 de tal manera que los servicios de almacenamiento en memoria cache no sean proporcionados por la memoria cache del anfitrion 324 para el espacio de memoria compartida 336. De forma similar, para habilitar la prestacion de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 mediante la memoria cache de GPU 332, la interfaz de memoria intermedia 328 puede, por ejemplo, configurar el modulo de control de memoria cache de GPU 334 de tal manera que los servicios de almacenamiento en memoria cache sean proporcionados por la memoria cache del anfitrion 324 para el espacio de memoria compartida 336. Para inhabilitar la prestacion de los servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 mediante la memoria cache de GPU 332, la interfaz de memoria intermedia 328 puede, por ejemplo, configurar el modulo de control de memoria cache de GPU 334 de tal manera que los servicios de almacenamiento en memoria cache no sean proporcionados por la memoria cache de GPU 332 para el espacio de memoria compartida 336.
En algunos ejemplos, la interfaz de memoria intermedia 328 puede configurar uno entre el modulo de control de memoria cache del anfitrion 326 y el modulo de control de memoria cache de GPU 334, o ambos, mediante la fijacion de uno o mas indicadores inmediatos basados en hardware, asociados con el espacio de memoria compartida 336, en un valor indicativo de si deberian proporcionarse servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336. Los uno o mas indicadores inmediatos basados en hardware pueden ser, en algunos ejemplos, uno o mas registros. En ejemplos adicionales, los indicadores inmediatos basados en hardware pueden ser parte de una tabla de indicadores inmediatos donde cada indicador inmediato en la tabla de indicadores inmediatos corresponde a un espacio de direcciones en particular dentro de la memoria 316. En cualquier caso, cuando los uno o mas indicadores inmediatos asociados con el espacio de memoria compartida 336 se fijan en valores que indican que deberian proporcionarse servicios de almacenamiento en memoria cache, el modulo de control de memoria cache del anfitrion 326 y/o el modulo de control de memoria cache de GPU 334 pueden proporcionar servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336 utilizando la cache del anfitrion 324 y/o la cache de GPU 332. De forma similar, cuando los uno o mas indicadores asociados con el espacio de memoria compartida 336 se fijan en valores que indican que no deberian proporcionarse servicios de almacenamiento en memoria cache, el modulo de control de memoria cache del anfitrion 326 y/o el modulo de control de memoria cache de GPU 334 no pueden proporcionar servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336.
En tales ejemplos, el modulo de control de memoria cache de GPU 334 puede estar configurado para procesar instrucciones de lectura y/o instrucciones de escritura para direcciones de memoria dentro del espacio de direcciones de la memoria 316. Las instrucciones de lectura y escritura pueden ser emitidas al modulo de control de memoria cache de GPU 334, por ejemplo, mediante la tarea 330 que se esta ejecutando en la GPU 314. En respuesta a la recepcion de una instruccion de lectura o escritura para leer datos de, o escribir datos en, una ubicacion de memoria dentro de un espacio de direcciones concreto de la memoria 316, el modulo de control de memoria cache de GPU 334 puede identificar un indicador basado en hardware, asociado con el espacio de direcciones, y determinar si se utilizan los servicios de almacenamiento en memoria cache de la memoria cache de GPU 332 al procesar la instruccion de lectura o escritura en base al valor del indicador basado en hardware. Si el modulo de control de memoria cache de GPU 334 determina utilizar los servicios de almacenamiento en memoria cache de la memoria cache de GPU 332, entonces el modulo de control de memoria cache de GPU 334 puede, por ejemplo, tratar de leer los datos de la memoria cache de GPU 332 si los datos son validos y/o escribir datos en la memoria cache de GPU 332. Si el modulo de control de memoria cache de GPU 334 determina no utilizar los servicios de almacenamiento en memoria cache de la memoria cache de GPU 332, a continuacion, el modulo de control de memoria cache de GPU 334 puede, en algunos ejemplos, pasar por alto la memoria cache de GPU 332 y leer datos de, o escribir datos directamente en, la memoria 316. En ejemplos adicionales, si el modulo de control de memoria cache de GPU 334 determina no utilizar los servicios de almacenamiento en memoria cache de la memoria cache de GPU 332, entonces el modulo de control de memoria cache de GPU 334 puede invalidar una parte de la memoria cache 332 asociada con el espacio de direcciones antes de ejecutar una instruccion de lectura y/o llevar a cabo una tecnica de re-escritura en memoria cache o escritura simultanea en memoria cache cuando se ejecuta una instruccion de escritura. El modulo de control de memoria cache del anfitrion 334 puede funcionar de una manera similar con respecto a la memoria cache del anfitrion 324 en respuesta a las instrucciones de lectura y escritura recibidas desde el proceso anfitrion 320 que se esta ejecutando en el dispositivo anfitrion 312.
En ejemplos adicionales, la interfaz de memoria intermedia 328 puede habilitar e inhabilitar la modalidad inmediata para el espacio de memoria compartida 336, habilitando e inhabilitando una modalidad de coherencia de memoria cache de la memoria compartida para al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314. Por ejemplo, para habilitar la modalidad inmediata para el espacio de memoria compartida 336, la interfaz de memoria intermedia 328 puede habilitar la modalidad de
5
10
15
20
25
30
35
40
45
50
55
60
65
coherencia de memoria cache de la memoria compartida para al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314. De forma similar, para inhabilitar la modalidad inmediata para el espacio de memoria compartida 336, la interfaz de memoria intermedia 328 puede inhabilitar la modalidad de coherencia de memoria cache de la memoria compartida para al menos una entre la memoria cache del anfitrion 324 en el dispositivo anfitrion 312 y la memoria cache de GPU 332 en la GPU 314. En tales ejemplos, la interfaz de memoria intermedia 328 puede, en algunos casos, habilitar una modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache del anfitrion 324, mediante la configuracion de uno entre el modulo de control de memoria cache del anfitrion 326 y el modulo de control de memoria cache de GPU 334, o ambos, para habilitar la modalidad de coherencia de memoria cache de la memoria compartida e inhabilitar la modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache del anfitrion 324, mediante la configuracion de uno entre el modulo de control de memoria cache del anfitrion 326 y el modulo de control de memoria cache de GPU 334, o ambos, para inhabilitar la modalidad de coherencia de memoria cache de la memoria compartida.
Cuando se habilita una modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache del anfitrion 324, el modulo de control de memoria cache principal 326 puede llevar a cabo tecnicas de coherencia de memoria cache de la memoria compartida con respecto al espacio de memoria compartida 336, de acuerdo con procedimientos conocidos. Cuando la modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache del anfitrion 324 esta inhabilitada, la memoria cache del anfitrion 324 no puede realizar las tecnicas de coherencia de memoria cache de la memoria compartida con respecto al espacio de memoria compartida 336. De forma similar, cuando se habilita una modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache de GPU 332, el modulo de control de memoria cache de GPU 334 puede llevar a cabo tecnicas de coherencia de memoria cache de la memoria compartida con respecto al espacio de memoria compartida 336, de acuerdo con procedimientos conocidos. Cuando la modalidad de coherencia de memoria cache de la memoria compartida para la memoria cache de GPU 332 esta inhabilitada, el modulo de control de memoria cache de GPU 334 no puede realizar las tecnicas de coherencia de memoria cache de la memoria compartida con respecto al espacio de memoria compartida 336.
Para facilitar la ilustracion, el sistema informatico ejemplar 310 ilustrado en la FIG. 20 describe las tecnicas de almacenamiento inmediato en memoria intermedia de esta divulgacion usando la GPU 314 como un dispositivo informatico. Deberia reconocerse que las tecnicas de esta divulgacion pueden ser aplicadas a sistemas informaticos de multiples procesadores que tienen dispositivos informaticos distintos a una GPU, ademas o en lugar de la GPU 314. En algunos ejemplos, los dispositivos informaticos en el sistema informatico 310 pueden ser dispositivos informaticos de Open CL. Ademas, el sistema informatico ejemplar 310 mostrado en la FIG. 20 ilustra una infraestructura y tecnicas para la implementacion de objetos de memoria inmediata que facilitan la comparticion de datos en proceso entre un dispositivo anfitrion y un dispositivo informatico. En otros sistemas informaticos ejemplares, sin embargo, las tecnicas pueden extenderse inmediatamente para proporcionar la comparticion de datos en proceso entre diferentes dispositivos informaticos (por ejemplo, dispositivos informaticos de OpenCL) en un sistema informatico que tiene mas de un dispositivo informatico. En dichos ejemplos, pueden conectarse una o mas lineas de interrupcion entre diferentes dispositivos informaticos.
La FIG. 21 es un diagrama de flujo que ilustra una tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria, emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 21. La instruccion de creacion de objetos de memoria puede ser una instruccion de creacion de objetos de memoria intermedia o una instruccion de creacion de objetos de imagen. La interfaz de memoria intermedia 328 recibe una instruccion de creacion de objetos de memoria (340). La interfaz de memoria intermedia 328 determina si las instrucciones de creacion de objetos de memoria especifican que la modalidad inmediata deberia ser habilitada para el objeto de memoria (342). Por ejemplo, la interfaz de memoria intermedia 328 puede determinar si un parametro de indicador inmediato esta incluido en una lista de parametros para la instruccion de creacion de objetos de memoria.
Si la interfaz de memoria intermedia 328 determina que la instruccion de creacion de objetos de memoria no especifica que la modalidad inmediata deberia ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 puede asignar un espacio de memoria compartida 336 al objeto de memoria que se creara (344), hacer que la prestacion de los servicios de almacenamiento en memoria cache, mediante una entre la memoria cache del anfitrion 324 y la memoria cache de GPU 332, o ambas, este habilitada para el espacio de memoria compartida 336 (346), y devolver una referencia al objeto de memoria creado (348). La instruccion de creacion de objetos de memoria puede especificar que la modalidad inmediata no se deberia habilitar, por ejemplo, no incluyendo un parametro de indicador inmediato, o especificando con otro valor de parametro que la modalidad inmediata no deberia ser habilitada. Por el contrario, si la interfaz de memoria intermedia 328 determina que la instruccion de creacion del objetos de memoria especifica que la modalidad inmediata deberia ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 puede asignar un espacio de memoria compartida 336 para el objeto de memoria que debe crearse (350 ), hacer que la prestacion de los servicios de almacenamiento en memoria cache, mediante una entre la memoria cache del anfitrion 324 y la memoria cache de GPU 332, o ambas, sea inhabilitada para el espacio de memoria compartida 336 (352), y devolver una referencia al
5
10
15
20
25
30
35
40
45
50
55
60
65
objeto de memoria creado (354). La instruccion de creacion de objetos de memoria puede especificar que la modalidad inmediata deberfa ser habilitada, por ejemplo, incluyendo un parametro de indicador inmediato, o especificando con otro valor de parametro que la modalidad inmediata deberfa estar habilitada.
En algunos ejemplos, la interfaz de memoria intermedia 328 puede hacer que la prestacion de los servicios de almacenamiento en memoria cache sea habilitada para el espacio de memoria compartida 336, mediante la fijacion de un atributo de modalidad inmediata del objeto de memoria asociado con el espacio de memoria compartida 336, en un valor que indica que deberfan proporcionarse servicios de almacenamiento en memoria cache para el objeto de memoria asociado con el espacio de memoria compartida 336. Analogamente, la interfaz de memoria intermedia 328 puede hacer que la prestacion de los servicios de almacenamiento en memoria cache sea inhabilitada para el espacio de memoria compartida 336, fijando el atributo de modalidad inmediata del objeto de memoria asociado con el espacio de memoria compartida 336, en un valor que indica que no deberfan proporcionarse servicios de almacenamiento en memoria cache para el objeto de memoria asociado con el espacio de memoria compartida 336. El objeto de memoria devuelto puede incluir el atributo de modalidad inmediata. En tales ejemplos, el atributo de modalidad inmediata para el objeto de memoria puede ser accesible por parte de uno entre el proceso anfitrion 320 que se esta ejecutando en el dispositivo anfitrion 312 y la tarea 330 que se esta ejecutando en la GPU 314, o ambos. El proceso anfitrion 320 y/o la tarea 330 pueden determinar si se utilizan los servicios de almacenamiento en memoria cache al ejecutar instrucciones de lectura y escritura particulares con respecto al espacio de memoria compartida 336, en base al atributo de modalidad inmediata del objeto de memoria asociado con el espacio de memoria compartida 336.
En otros ejemplos, la interfaz de memoria intermedia 328 puede hacer que la prestacion de los servicios de almacenamiento en memoria cache sea habilitada para el espacio de memoria compartida 336, mediante la configuracion de uno o mas indicadores inmediatos, basados en hardware, asociados al espacio de memoria compartida 336, en un valor que indica que deberfan proporcionarse servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336. Analogamente, la interfaz de memoria intermedia 328 puede hacer que la prestacion de los servicios de almacenamiento en memoria cache sea inhabilitada para el espacio de memoria compartida 336, mediante la configuracion de uno o mas indicadores inmediatos, basados en hardware, asociados al espacio de memoria compartida 336, en un valor que indica que no deberfan proporcionarse servicios de almacenamiento en memoria cache para el espacio de memoria compartida 336. Uno o mas indicadores inmediatos basados en hardware pueden estar situados en uno o mas entre el modulo de control de memoria cache del anfitrion 326 y un modulo control de memoria cache de GPU 334 u otra unidad de gestion de memoria local o global (no mostrada).
En ejemplos adicionales, la interfaz de memoria intermedia 328 puede devolver el objeto de memoria al proceso llamante, por ejemplo, el proceso anfitrion 320, antes de la asignacion del espacio de memoria ffsica en la memoria 316 para almacenar los datos. En tales ejemplos, la interfaz de memoria intermedia 328 puede incluir el atributo de modalidad inmediata en el objeto de memoria devuelto.
Entonces, cuando la memoria 316 se asigna en un momento posterior para el objeto de memoria, la interfaz de memoria intermedia 328 u otro modulo puede configurar los uno o mas indicadores inmediatos basados en hardware, en base al atributo de modalidad inmediata del objeto de memoria.
La FIG. 22 es un diagrama de flujo que ilustra otra tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria, emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 22. La instruccion de creacion de objetos de memoria puede ser una instruccion de creacion de objetos de memoria intermedia o una instruccion de creacion de objetos de imagen. La interfaz de memoria intermedia 328 recibe una instruccion de creacion de objetos de memoria (356). La interfaz de memoria intermedia 328 determina si la instruccion de creacion de objetos de memoria especifica que la modalidad inmediata deberfa ser habilitada para el objeto de memoria (358). Por ejemplo, la interfaz de memoria intermedia 328 puede determinar si un parametro de indicador inmediato esta incluido en una lista de parametros para la instruccion de creacion de objetos de memoria.
Si la interfaz de memoria intermedia 328 determina que la instruccion de creacion de objetos de memoria no especifica que la modalidad inmediata deberfa ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 puede asignar un espacio de memoria compartida 336 para el objeto de memoria que va a ser creado (360), inhabilitar una modalidad de coherencia de memoria cache de la memoria compartida para el espacio de memoria compartida 336 (362), y devolver una referencia al objeto de memoria creado (364). Por el contrario, si la interfaz de memoria intermedia 328 determina que la instruccion de creacion de objetos de memoria especifica que la modalidad inmediata deberfa ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 puede asignar un espacio de memoria compartida 336 para el objeto de memoria que va a ser creado (366), habilitar una modalidad de coherencia de memoria cache de la memoria compartida para el espacio de memoria compartida 336 (368), y devolver una referencia al objeto de memoria creado (370).
En algunos ejemplos, la interfaz de memoria intermedia 328 puede devolver el objeto de memoria al proceso
5
10
15
20
25
30
35
40
45
50
55
60
65
llamante, por ejemplo, el proceso anfitrion 320, antes de la asignacion del espacio de memoria fisica en la memoria 316 para almacenar los datos. En tales ejemplos, la interfaz de memoria intermedia 328 puede incluir el atributo de modalidad inmediata en el objeto de memoria devuelto. Entonces, cuando la memoria 316 se asigna en un momento posterior para el objeto de memoria, la interfaz de memoria intermedia 328 u otro modulo puede habilitar o inhabilitar la modalidad de coherencia de memoria cache del espacio de memoria compartida, en base al atributo de modalidad inmediata del objeto de memoria.
Las FIGs. 23 a 28 ilustran tecnicas ejemplares que una GPU puede utilizar para procesar las instrucciones de carga y almacenamiento en la modalidad inmediata y en la modalidad de memoria cache, de acuerdo con esta divulgacion. Como se ha expuesto anteriormente, el codigo fuente para la tarea 330 puede, en algunos ejemplos, compilarse de forma que el codigo compilado pueda incluir tanto las instrucciones en la modalidad de memoria cache como las instrucciones en la modalidad inmediata, con el fin de prestar soporte tanto a los objetos de memoria inmediata como a los objetos en memoria cache. Las instrucciones en modalidad de memoria cache pueden ejecutar operaciones de lectura y escritura con respecto a una memoria, utilizando los servicios de almacenamiento en memoria cache de una memoria cache asociada con la memoria subyacente, y las instrucciones de modalidad inmediata pueden ejecutar operaciones de lectura y escritura con respecto a una memoria sin necesidad de utilizar servicios de almacenamiento en memoria cache de una memoria cache asociada con la memoria subyacente. Las instrucciones en modalidad de memoria cache pueden denominarse, de forma alternativa en el presente documento, instrucciones de modalidad no inmediata. Las instrucciones de carga y almacenamiento pueden, de forma alternativa, denominarse en el presente documento instrucciones de lectura y escritura, respectivamente.
En algunos ejemplos, la version en modalidad de memoria cache de una instruccion de carga o almacenamiento y la version en modalidad inmediata de la instruccion de carga o almacenamiento pueden ser instrucciones diferentes, por ejemplo, teniendo cada una un codigo de operacion, es decir, codeop, diferente. En ejemplos adicionales, la version en modalidad de memoria cache de una instruccion de carga o almacenamiento y la version en modalidad inmediata de la instruccion de carga o almacenamiento pueden ser la misma instruccion, por ejemplo, teniendo las dos el mismo codigo de operacion. En tales ejemplos, un parametro proporcionado con la instruccion puede especificar si la instruccion es en modalidad de memoria cache o en modalidad inmediata.
La FIG. 23 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 23. En el ejemplo de la FIG. 23, la modalidad inmediata se denomina una modalidad de omision de memoria cache, y las instrucciones en la modalidad inmediata se corresponden con las instrucciones en la modalidad de omision de memoria cache. El modulo de control de memoria cache de GPU 334 recibe una instruccion de carga que especifica una ubicacion de memoria y si esta habilitada una modalidad de omision de memoria cache (372). El modulo de control de memoria cache de GPU 334 determina si la instruccion de carga especifica que la modalidad de omision de memoria cache esta habilitada (374). En algunos casos, el modulo de control de memoria cache de GPU 334 puede determinar si la instruccion de carga especifica que la modalidad de omision de la memoria cache esta habilitada, en base al tipo de instruccion, por ejemplo, el codigo de operacion de la instruccion. En casos adicionales, el modulo de control de memoria cache de GPU 334 puede determinar si la instruccion de carga especifica que la modalidad de omision de memoria cache esta habilitada, en base a un parametro incluido con la instruccion de carga, que es indicativo de si la modalidad de omision de memoria cache esta habilitada. Si el modulo de control de memoria cache de GPU 334 determina que la modalidad de omision de memoria cache no esta habilitada, entonces el modulo de control de memoria cache de GPU 334 recupera los datos desde una memoria cache, por ejemplo, la memoria cache de GPU 332, en una ubicacion de memoria cache asociada a la ubicacion de memoria especificada en la instruccion de carga (376). Por otra parte, si el modulo de control de memoria cache de GPU 334 determina que la modalidad de omision de memoria cache esta habilitada, entonces el modulo de control de memoria cache de GPU 334 recupera los datos desde una memoria, por ejemplo, el espacio de memoria compartida 336, en la ubicacion de memoria especificada en la instruccion de carga (378).
La FIG. 24 es un diagrama de flujo que ilustra otra tecnica ejemplar para el procesamiento de instrucciones en la modalidad de memoria cache y en la modalidad inmediata, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 24. En el ejemplo de la FIG. 24, la modalidad inmediata se denomina modalidad de omision de memoria cache, y las instrucciones en la modalidad inmediata se corresponden con las instrucciones en la modalidad de omision de memoria cache. El modulo de control de memoria cache de GPU 334 recibe una instruccion de almacenamiento que especifica una ubicacion de memoria, datos para almacenar y si una modalidad de omision de memoria cache esta habilitada (380). El modulo de control de memoria cache de GPU 334 determina si la instruccion de almacenamiento especifica que la modalidad de omision de memoria cache esta habilitada (382). En algunos casos, el modulo de control de memoria cache de GPU 334 puede determinar si la instruccion de almacenamiento especifica que la modalidad de omision de memoria cache se habilita, en funcion del tipo de instruccion, por ejemplo, el codigo de operacion de la instruccion. En casos adicionales, el modulo de control de memoria cache de GPU 334 puede determinar si la instruccion de almacenamiento especifica que la modalidad de omision de memoria cache esta habilitada, en base a un parametro, incluido con la instruccion de carga, que es indicativo de si la modalidad de omision de memoria cache esta habilitada. Si el modulo de control de memoria cache de GPU 334 determina que la
5
10
15
20
25
30
35
40
45
50
55
60
65
modalidad de omision de memoria cache no esta habilitada, entonces el modulo de control de memoria cache de GPU 334 almacena los datos especificados en la instruccion de almacenamiento en una memoria cache, por ejemplo, la memoria cache de GPU 332, en una ubicacion de memoria cache asociada a la ubicacion de memoria especificada en la instruccion de almacenamiento (384). Por otra parte, si el modulo de control de memoria cache de GPU 334 determina que la modalidad de omision de memoria cache esta habilitada, entonces el modulo de control de memoria cache de GPU 334 almacena los datos especificados en la instruccion de almacenamiento en una memoria, por ejemplo, el espacio de memoria compartida 336, en la ubicacion de memoria especificada en la instruccion de almacenamiento (386).
La FIG. 25 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 25. El modulo de control de memoria cache de GPU 334 recibe una instruccion de almacenamiento que especifica una ubicacion de memoria, datos para almacenar y si una modalidad inmediata esta habilitada (388). El modulo de control de memoria cache de GPU 334 almacena los datos especificados en la instruccion de almacenamiento en una memoria cache, por ejemplo, la memoria cache de GPU 332, en una ubicacion de memoria cache asociada a la ubicacion de memoria especificada en la instruccion de almacenamiento (390). El modulo de control de memoria cache de GPU 334 determina si la modalidad inmediata esta habilitada en base a la informacion de la instruccion de almacenamiento que especifica si la modalidad inmediata esta habilitada (392). La informacion que especifica si la modalidad inmediata esta habilitada puede ser, en algunos ejemplos, el tipo de instruccion, por ejemplo, el codigo de operacion para la instruccion y/o un parametro incluido en la instruccion que especifica si la modalidad inmediata esta habilitada para la instruccion. Si la modalidad inmediata no esta habilitada, el modulo de control de memoria cache de GPU 334 no lleva a cabo una operacion inmediata de re-escritura en memoria cache (394). Por otro lado, si la modalidad inmediata esta habilitada, el modulo de control de memoria cache de GPU 334 realiza una operacion inmediata de re-escritura en memoria cache (396).
La FIG. 26 es un diagrama de flujo que ilustra otra tecnica ejemplar para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 26. El modulo de control de memoria cache de GPU 334 recibe una instruccion de carga que especifica una ubicacion de memoria y si una modalidad inmediata esta habilitada (398). El modulo de control de memoria cache de GPU 334 determina si la modalidad inmediata esta habilitada en base a la informacion de la instruccion de carga que especifica si la modalidad inmediata esta habilitada (400). La informacion que especifica si la modalidad inmediata esta habilitada puede ser, en algunos ejemplos, el tipo de instruccion, por ejemplo, el codigo de operacion para la instruccion y/o un parametro incluido en la instruccion que especifica si la modalidad inmediata esta habilitada para la instruccion. Si la modalidad inmediata no esta habilitada, el modulo de control de memoria cache de GPU 334 no vacia e invalida la memoria cache (402). El modulo de control de memoria cache de GPU 334 recupera los datos especificados en la instruccion de carga, ya sea desde una memoria cache, por ejemplo, la memoria cache de GPU 332, si los datos estan disponibles en la memoria cache o bien, si los datos no estan disponibles en la memoria cache, desde la memoria subyacente (404). Si la modalidad inmediata esta habilitada, el modulo de control de memoria cache de GPU 334 vacia e invalida la memoria cache (406). El modulo de control de memoria cache de GPU 334 recupera los datos especificados en la instruccion de carga desde la memoria subyacente (408). La memoria cache no devuelve los datos, ya que la memoria cache se ha vaciado e invalidado.
La FIG. 27 es un diagrama de bloques que ilustra una GPU ejemplar 420 que puede utilizarse en el sistema informatico 310 de la FIG. 20 de acuerdo con esta divulgacion. En algunos ejemplos, la GPU 420 puede utilizarse para implementar la GPU 314 ilustrada en la FIG. 20. La GPU 420 incluye un modulo de procesamiento de GPU 422, un modulo de control de memoria cache de GPU 424, una memoria cache de GPU 426, un bus de memoria cache 428 y un bus de omision 430. El modulo de procesamiento de GPU 422 esta acoplado comunicativamente al modulo de control de memoria cache de GPU 424 mediante el bus de memoria cache 428. El modulo de procesamiento de GPU 422 tambien esta acoplado comunicativamente a la memoria 316 mediante el bus de omision 430. El modulo de control de memoria cache de GPU 424 y la memoria cache de GPU 426 son esencialmente similares al modulo de control de memoria cache de GPU 334 y a la memoria cache de GPU 332 en la FIG. 20, y no se describiran con mas detalle. El modulo de procesamiento de GPU 422 incluye un elemento de procesamiento 432 y un controlador de bus 434. El elemento de procesamiento 432 esta configurado para emitir instrucciones de carga y almacenamiento al controlador de bus 434.
El controlador de bus 434 puede estar configurado para remitir instrucciones de carga y almacenamiento a ubicaciones adecuadas mediante el bus de memoria cache 428 y el bus de omision 430. El controlador de bus 434 puede estar configurado para funcionar en una modalidad inmediata o una modalidad no inmediata, en base a informacion de la instruccion de carga o almacenamiento que es indicativa de si la instruccion es una instruccion de modalidad inmediata o de modalidad de memoria cache. Cuando el controlador de bus 434 esta configurado para funcionar en una modalidad no inmediata, es decir, una modalidad de memoria cache, el controlador de bus 434 puede usar el bus de memoria cache 428 para enviar instrucciones de carga y almacenamiento al modulo de control de memoria cache de GPU 424, para su ejecucion. Por otro lado, cuando el controlador de bus 434 esta configurado para funcionar en una modalidad inmediata, el controlador de bus 434 puede usar el bus de omision 430 para remitir
5
10
15
20
25
30
35
40
45
50
55
60
65
instrucciones de carga y almacenamiento a la memoria 316, para su ejecucion.
La FIG. 28 es un diagrama de flujo que ilustra una tecnica ejemplar para el procesamiento de instrucciones en modalidad de memoria cache y en modalidad inmediata, de acuerdo con esta divulgacion. En algunos ejemplos, se puede utilizar la GPU 420 de la FIG. 27 para implementar la tecnica ejemplar que se muestra en la FIG. 28. El controlador de bus 434 recibe una instruccion de carga o almacenamiento (440). El controlador de bus 434 determina si la modalidad inmediata esta habilitada, en base a la informacion de la instruccion de carga o almacenamiento que especifica si la modalidad inmediata esta habilitada (442). La informacion que especifica si la modalidad inmediata esta habilitada puede ser, en algunos ejemplos, el tipo de instruccion, por ejemplo, el codigo de operacion para la instruccion y/o un parametro incluido en la instruccion que especifica si la modalidad inmediata esta habilitada para la instruccion. Si el controlador de bus 434 determina que la modalidad inmediata no esta habilitada, entonces el controlador de bus 434 utiliza el bus de memoria cache 428 para enviar la instruccion recibida al modulo de control de memoria cache de GPU 424 (444). De lo contrario, si el controlador de bus 434 determina que la modalidad inmediata esta habilitada, entonces el controlador de bus 434 utiliza el bus de omision 430 para remitir la instruccion recibida a la memoria 316 (446).
La FIG. 29 es un diagrama de flujo que ilustra otra tecnica ejemplar para la ejecucion de una instruccion de creacion de objetos de memoria, emitida por un proceso que se esta ejecutando en un dispositivo anfitrion, de acuerdo con esta divulgacion. En algunos ejemplos, puede utilizarse el sistema informatico 310 de la FIG. 20 para implementar la tecnica ejemplar que se muestra en la FIG. 29. La instruccion de creacion de objetos de memoria puede ser una instruccion de creacion de objetos de memoria intermedia o una instruccion de creacion de objetos de imagen. La interfaz de memoria intermedia 328 recibe una instruccion de creacion de objetos de memoria (448). La interfaz de memoria intermedia 328 determina si la instruccion de creacion de objetos de memoria especifica que la modalidad inmediata deberia ser habilitada para el objeto de memoria (450). Por ejemplo, la interfaz de memoria intermedia 328 puede determinar si un parametro de indicador inmediato esta incluido en una lista de parametros para la instruccion de creacion de objetos de memoria.
Si la interfaz de memoria intermedia 328 determina que la instruccion de creacion de objetos de memoria no especifica que la modalidad inmediata deberia ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 fija un atributo de modalidad inmediata para el objeto de memoria creado en un valor indicativo de que la modalidad inmediata no esta permitida, por ejemplo, "falso" (452). Por otra parte, si la interfaz de memoria intermedia 328 determina que la instruccion de creacion de objetos de memoria especifica que la modalidad inmediata deberia ser habilitada para el objeto de memoria, entonces la interfaz de memoria intermedia 328 fija un atributo de modalidad inmediata para el objeto de memoria creado en un valor indicativo de que la modalidad inmediata esta habilitada, por ejemplo, "verdadero" (454). El atributo de modalidad inmediata del objeto de memoria puede ser utilizado por el dispositivo anfitrion 312 y/o la GPU 314, en algunos ejemplos, para determinar si se ejecutan las operaciones de lectura y escritura en la modalidad inmediata o la modalidad de memoria cache al acceder a datos almacenados en un objeto de memoria particular.
En algunos ejemplos, el proceso anfitrion 320 y/o la tarea 330 pueden desear programar algunos objetos de memoria para que sean objetos de memoria inmediata, y otros objetos para que sean objetos de memoria en memoria cache, es decir, objetos de memoria no inmediata. Las tecnicas de esta divulgacion pueden, en algunos ejemplos, incluir tecnicas de compilacion especializadas que permiten que una tarea compilada 330 realice operaciones de lectura y escritura con respecto tanto a los objetos de memoria cache como a los objetos de memoria inmediata. Una primera tecnica ejemplar de compilacion puede compilar una operacion de lectura o una operacion de escritura dada en una secuencia de instrucciones. La secuencia de instrucciones puede comprobar el valor de un atributo de modalidad inmediata para un objeto de memoria a leer o escribir, y determinar si se ejecuta una instruccion en modalidad de memoria cache o una instruccion en modalidad inmediata, en base al valor del atributo de modalidad inmediata. Una segunda tecnica ejemplar de compilacion puede utilizar informacion en el codigo fuente que es indicativa de si el objeto de memoria es un objeto de modalidad inmediata, para seleccionar instrucciones en modalidad de memoria cache o instrucciones en modalidad inmediata, para su uso en el codigo compilado para acceder al objeto de memoria.
De acuerdo con la primera tecnica ejemplar de compilacion, un compilador puede compilar codigo fuente para la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya una secuencia de lectura de acuerdo con el siguiente pseudo-codigo ejemplar:
si ( esInmediata ) {
lectura_inmediata (...)
}
si no {
lectura_en_memoria_cache (...)
}
donde "esInmediata" representa un atributo booleano de modalidad inmediata para un objeto de memoria desde el cual se leeran datos, "lectura_inmediata (...)" representa una instruccion de lectura en modalidad inmediata y
5
10
15
20
25
30
35
40
45
50
55
60
65
"lectura_en_memoria_cache (...)" representa una instruccion de lectura en modalidad de memoria cache.
El modulo de control de memoria cache de GPU 334 puede procesar la instruccion lectura_inmediata (...) mediante, por ejemplo, la invalidacion de la memoria cache de GPU 332, si se utiliza, antes de leer los datos de la memoria cache de GPU 332. El modulo de control de memoria cache de GPU 334 puede procesar la instruccion lectura_en_memoria_cache (...) mediante, por ejemplo, la lectura de datos de la memoria cache de GPU 332 de una forma normal, por ejemplo, sin invalidar la memoria cache antes de realizar la lectura.
De acuerdo con la primera tecnica ejemplar de compilacion, un compilador puede compilar el codigo fuente para la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya una secuencia de escritura de acuerdo con el siguiente pseudo-codigo ejemplar:
si ( esInmediata ) {
escritura_inmediata (...)
}
si no {
escritura_en_memoria_cache (...)
}
donde "esInmediata" representa un atributo booleano de modalidad inmediata para un objeto de memoria en el que se escribiran datos, "escritura_inmediata (...) " representa una instruccion de escritura en modalidad inmediata, y "escritura_en_memoria_cache (...) " representa una instruccion de escritura en modalidad de memoria cache.
El modulo de control de memoria cache de GPU 334 puede procesar la instruccion escritura_inmediata (...), en algunos ejemplos, mediante el uso de una modalidad de escritura simultanea para la memoria cache de GPU 332, si se utiliza una memoria cache. En ejemplos adicionales, el modulo de control de memoria cache de GPU 334 puede procesar la instruccion escritura_inmediata (...) escribiendo datos en la memoria cache de GPU 332 si se utiliza una memoria cache, y realizando un vaciado de memoria cache para la memoria cache de GPU 332 en respuesta a la escritura de los datos en la memoria cache de GPU 332. El modulo de control de memoria cache de GPU 334 puede procesar la instruccion escritura_en_memoria_cache (...) escribiendo datos en la memoria cache de GPU 332 de una forma normal, por ejemplo, sin utilizar una modalidad de escritura simultanea y/o sin vaciar la memoria cache en respuesta a la operacion de escritura.
La FIG. 30 es un diagrama de flujo que ilustra como una GPU puede procesar una secuencia de instrucciones compiladas de acuerdo con la primera tecnica de compilacion descrita anteriormente. En algunos ejemplos, se puede usar la tecnica ilustrada en la FIG. 30 para implementar el pseudo-codigo ejemplar proporcionado anteriormente para las secuencias de lectura y escritura. La tarea 330 comienza una secuencia de lectura o una secuencia de escritura (456). Por ejemplo, la tarea 330 puede comenzar la secuencia de lectura o la secuencia de escritura cuando la tarea 330 llega a un punto en la ejecucion de la tarea 330 donde deberia producirse una instruccion de lectura o escritura para un objeto de memoria particular. La tarea 330 accede al atributo de modalidad inmediata, asociado con el objeto de memoria del cual se leeran los datos o en el cual se escribiran los datos (458). La tarea 330 determina si el atributo para el objeto de memoria se fija en un valor que indica que la modalidad inmediata esta habilitada, por ejemplo, "verdadero" (460). Si la tarea 330 determina que el atributo para el objeto de memoria se fija en un valor indicativo de que la modalidad inmediata no esta habilitada, entonces la tarea 330 realiza una operacion de lectura o escritura en memoria cache para el objeto de memoria utilizando una instruccion de lectura o escritura en memoria cache (462). De lo contrario, si la tarea 330 determina que el atributo para el objeto de memoria se fija en un valor que indica que la modalidad inmediata esta habilitada, entonces la tarea 330 realiza una operacion de lectura o escritura inmediata para el objeto de memoria utilizando una instruccion de lectura o escritura inmediata (464).
De acuerdo con la segunda tecnica ejemplar de compilacion, al compilar el codigo fuente, el compilador puede tener acceso a la informacion indicativa de si la modalidad inmediata esta habilitada para un objeto de memoria particular del cual lea o en el cual escriba la tarea 330. El compilador puede utilizar esta informacion para compilar el codigo fuente para la tarea 330, para seleccionar entre las instrucciones de lectura y escritura en modalidad de memoria cache y las instrucciones de lectura y escritura en modalidad inmediata cuando la tarea 330 lee de, o escribe en, el objeto de memoria particular.
En algunos ejemplos, la informacion indicativa de si la modalidad inmediata esta habilitada para un objeto de memoria particular puede ser un atributo de tiempo de compilacion, indicativo de si la modalidad inmediata esta habilitada para uno o mas objetos de memoria a los que accede el codigo fuente para la tarea 330. Por ejemplo, el codigo fuente para la tarea 330, por ejemplo, el codigo fuente del nucleo, puede incluir un atributo de tiempo de compilacion indicativo de si la modalidad inmediata esta habilitada para uno o mas objetos de memoria utilizados por la tarea 330. El atributo de tiempo de compilacion puede, en algunos casos, tomar la forma de un calificador de atributo de OpenCL, tal como, por ejemplo, _cl_immediate. El calificador de atributo puede estar asociado con uno o mas objetos de memoria particulares y/o una o mas variables que se almacenan dentro de los uno o mas objetos de memoria. Cuando el calificador de atributo esta asociado con un objeto de memoria particular, el compilador puede
5
10
15
20
25
30
35
40
45
50
55
60
65
determinar que la modalidad inmediata esta habilitada para el objeto de memoria. De forma similar, cuando el calificador de atributo no esta asociado con un objeto de memoria particular, el compilador puede determinar que la modalidad inmediata no esta habilitada para el objeto de memoria. Usar un atributo de este tipo puede reducir el trabajo para el compilador y reducir potencialmente el tamano del nucleo. En algunos ejemplos, las aplicaciones de software pueden limitar el uso de memorias intermedias inmediatas para los casos en que se necesitan tales memorias intermedias. En tales ejemplos, la decision de utilizar o no memorias intermedias inmediatas puede ser una decision en tiempo de compilacion.
Si el atributo de tiempo de compilacion indica que la modalidad inmediata esta habilitada para el objeto de memoria asociado con el espacio de memoria compartida 336, entonces el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya instrucciones de lectura y/o escritura en modalidad inmediata para operaciones de lectura o escritura que se realizan con respecto al espacio de memoria compartida 336. De lo contrario, si la modalidad inmediata no esta habilitada para el objeto de memoria asociado con el espacio de memoria compartida 336, a continuacion, el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 no incluya instrucciones de lectura y/o escritura en modalidad inmediata para las operaciones de lectura o escritura que se realizan con respecto al espacio de memoria compartida 336. Por ejemplo, el compilador puede compilar la tarea 330 de tal manera que el codigo compilado para la tarea 330 incluya instrucciones de lectura y/o escritura en memoria cache para las operaciones de lectura o escritura que se realizan con respecto al espacio de memoria compartida 336.
La FIG. 31 es un diagrama de flujo que ilustra una tecnica ejemplar para la compilacion de codigo fuente para una tarea de acuerdo con esta divulgacion. El codigo resultante, compilado utilizando las tecnicas en la FIG. 31 puede, en algunos ejemplos, corresponder a la tarea 330 en la FIG. 20. En la tecnica ejemplar de la FIG. 31, la tarea 330 se denomina un nucleo. El compilador procesa un argumento del nucleo que es implementado por un objeto de memoria (466).
El compilador determina si el objeto de memoria es un objeto de memoria en modalidad inmediata (468). En algunos ejemplos, el compilador puede determinar si el objeto de memoria es un objeto de memoria en modalidad inmediata en base a la informacion incluida en el codigo fuente del nucleo, por ejemplo, un atributo de tiempo de compilacion asociado con el argumento de nucleo. Si el compilador determina que el objeto de memoria no es un objeto de memoria en modalidad inmediata, entonces el compilador compila las operaciones de lectura y las operaciones de escritura asociadas con el argumento de nucleo particular usando instrucciones de lectura y escritura en memoria cache (470). Por otro lado, si el compilador determina que el objeto de memoria es un objeto de memoria en la modalidad inmediata, entonces el compilador compila las operaciones de lectura y las operaciones de escritura asociadas con el argumento de nucleo particular usando las instrucciones de lectura y escritura en modalidad inmediata (472).
La FIG. 32 es un diagrama de flujo que ilustra una tecnica ejemplar que puede ser utilizada por una GPU para utilizar selectivamente los servicios de almacenamiento en memoria cache de acuerdo con esta divulgacion. Por ejemplo, las tecnicas pueden permitir que una GPU utilice selectivamente una memoria cache de GPU asociada con una memoria para ejecutar al menos una entre una operacion de lectura y una operacion de escritura, con respecto a un espacio de memoria de la memoria, en respuesta a la recepcion de informacion que especifica si se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de al menos una de las operaciones de lectura y las operaciones de escritura con respecto al espacio de memoria. En algunos ejemplos, la GPU 314 ilustrada en la FIG. 20 y/o la GPU 420 ilustrada en la FIG. 27 pueden utilizarse para implementar las tecnicas ilustradas en la FIG. 32.
La GPU 314 recibe al menos una entre una instruccion de lectura y una instruccion de escritura para procesar (474). La instruccion recibida puede instruir a la GPU 314 para ejecutar al menos una entre una operacion de lectura y una operacion de escritura, con respecto a un espacio de memoria de una memoria. La GPU 314 recibe informacion de la modalidad de memoria cache que especifica si los servicios de almacenamiento en memoria cache se deberian utilizar para la ejecucion de al menos una entre las operaciones de lectura y las operaciones de escritura, con respecto al espacio de memoria (476). En algunos ejemplos, la informacion de modalidad de memoria cache puede estar incluida dentro de la instruccion recibida. En ejemplos adicionales, la informacion de modalidad de memoria cache puede ser un atributo de modalidad inmediata de un objeto de memoria asociado con el espacio de memoria. La GPU 314 determina si se utilizan los servicios de almacenamiento en memoria cache en base a la informacion de modalidad de memoria cache (478). En respuesta a la recepcion de informacion que especifica que se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de la instruccion recibida, la GPU 314 puede utilizar los servicios de almacenamiento en memoria cache para ejecutar la instruccion recibida (480). En respuesta a la recepcion de informacion que especifica que no se deberian utilizar los servicios de almacenamiento en memoria cache para la ejecucion de la instruccion recibida, la GPU 314 puede no utilizar los servicios de almacenamiento en memoria cache para ejecutar la instruccion recibida (482). En algunos ejemplos, la GPU 314 puede utilizar una o mas de las tecnicas ilustradas en las FIGs. 23 a 28 y 30 para implementar uno o mas entre el cuadro de decision 478 y los cuadros de proceso 480 y 482. En algunos casos, un modulo de control de memoria cache de GPU o una unidad de gestion de memoria, por ejemplo, el modulo de control de memoria cache de GPU 334 que se ilustra en la FIG. 20, puede utilizarse para implementar las tecnicas mostradas en la FIG. 32. En casos
5
10
15
20
25
30
35
40
45
50
55
60
65
adicionales, un controlador de bus, por ejemplo, el controlador de bus 434 que se ilustra en la FIG. 27, puede utilizarse para implementar las tecnicas mostradas en la FIG. 32.
En algunos ejemplos, con el fin de implementar los objetos de memoria inmediata, puede disenarse una ALU de GPU para ejecutar una instruccion de ALU que invalida la memoria cache de la memoria global y/o una parte especifica de la memoria cache de la memoria global, especificada en la instruccion. En general, el dispositivo anfitrion 312 puede utilizar las capacidades de CPU existentes para implementar los objetos de memoria inmediata.
Varios casos de uso para las tecnicas de senalizacion fuera de banda, descritas en esta divulgacion, por ejemplo, las tecnicas de paso de mensajes descritas en el presente documento, y los objetos de memoria inmediata descritos en esta divulgacion, ahora seran expuestos en mas detalle. De acuerdo con un primer caso de uso, la senalizacion fuera de banda se puede utilizar como una caracteristica independiente sin usar necesariamente objetos de memoria inmediata, ademas de las tecnicas de senalizacion fuera de banda. La senalizacion fuera de banda se puede usar para la sincronizacion y para pasar una cantidad relativamente pequena de datos de forma rapida. En algunos ejemplos, la senalizacion fuera de banda puede tener una latencia mas baja que los objetos de memoria inmediata, pero tener un ancho de banda mas bajo que los objetos de memoria inmediata.
La senalizacion fuera de banda tambien se puede usar de acuerdo con el primer caso de uso para las operaciones de asignacion de memoria. Por ejemplo, una GPU puede utilizar la senalizacion fuera de banda para solicitar que la CPU anfitriona asigne una nueva memoria intermedia. La GPU puede tambien utilizar la senalizacion fuera de banda para especificar a la CPU anfitriona una longitud de memoria intermedia solicitada. Como otro ejemplo, una CPU puede utilizar la senalizacion fuera de banda despues de la asignacion de una memoria intermedia para enviar un puntero a la GPU que especifica una ubicacion de memoria para la memoria intermedia.
La senalizacion fuera de banda tambien se puede usar de acuerdo con el primer caso de uso para llamadas a procedimientos remotos donde se va a intercambiar una pequena cantidad de datos. Por ejemplo, en un caso en el que un nucleo que se esta ejecutando en una unidad de calculo dentro de un dispositivo informatico utiliza una RPC para lanzar otro nucleo en otra unidad de calculo, ya sea en el mismo dispositivo informatico o en otro dispositivo informatico, los datos de la RPC podrian almacenarse en la memoria local de la unidad de calculo de lanzamiento. Las tecnicas de senalizacion fuera de banda de esta divulgacion pueden utilizarse para transferir los datos desde la memoria local de la unidad de calculo de lanzamiento a la memoria local de la unidad de calculo que ejecuta el nucleo recien lanzado.
La senalizacion fuera de banda tambien se puede usar de acuerdo con el primer caso de uso para la notificacion de avances. Por ejemplo, una GPU puede utilizar la senalizacion fuera de banda para informar del porcentaje de avance de la tarea actual a la CPU anfitriona.
La senalizacion fuera de banda tambien se puede usar de acuerdo con el primer caso de uso para la notificacion de errores. Por ejemplo, una GPU puede utilizar la senalizacion fuera de banda para notificar un codigo de error a la CPU anfitriona.
La senalizacion fuera de banda tambien se puede usar de acuerdo con el primer caso de uso para facilitar los cambios de contexto. Por ejemplo, una CPU anfitriona puede utilizar la senalizacion fuera de banda para solicitar que una GPU guarde un estado para prepararse para un cambio de contexto
De acuerdo con un segundo caso de uso, los objetos de memoria inmediata se pueden usar como una caracteristica independiente sin usar necesariamente la senalizacion fuera de banda, ademas de los objetos de memoria inmediata. Por ejemplo, las memorias intermedias inmediatas se pueden utilizar para llevar a cabo el intercambio de una cantidad relativamente grande de datos. Las memorias intermedias inmediatas pueden contener no solo datos, sino tambien marcadores de sincronizacion. En este caso, un productor de datos puede primero escribir datos en la memoria intermedia, y a continuacion escribir un marcador de sincronizacion que indica la disposicion y/o la ubicacion de los datos a un consumidor. El consumidor busca unos datos de sincronizacion en una ubicacion decidida a priori, tal como, por ejemplo, en la seccion de cabecera de la memoria intermedia mediante el sondeo de esta ubicacion de memoria. Una vez obtenido el marcador de sincronizacion, el consumidor lee los datos. Pueden aplicarse tecnicas similares a los objetos de imagenes inmediatos.
Pueden emplearse multiples protocolos de sincronizacion para estas tecnicas. Por ejemplo, los marcadores de sincronizacion pueden estar integrados dentro de la memoria intermedia de datos, o pueden estar situados en memorias intermedias separadas. Tales tecnicas se pueden aplicar a la transmision de datos comprimidos que se comprimen utilizando esquemas de codificacion de longitud variable o de codificacion de longitud de racha.
De acuerdo con un tercer caso de uso, se pueden usar objetos de memoria inmediata conjuntamente con la senalizacion fuera de banda, por ejemplo, para llevar a cabo el intercambio de una cantidad relativamente grande de datos. En este caso, se puede usar la senalizacion fuera de banda para la sincronizacion mientras los objetos de memoria inmediata almacenan los datos. Por ejemplo, un productor de datos puede colocar datos en una memoria intermedia inmediata y notificar a un consumidor sobre la disposicion y la ubicacion y/o el tamano de los datos
5
10
15
20
25
30
35
40
45
50
55
60
65
utilizando la senalizacion fuera de banda. En un escenario controlado por flujo, el consumidor lee los datos y notifica al productor que la memoria intermedia puede reutilizarse. La notificacion tambien puede realizarse utilizando la senalizacion fuera de banda. Tales tecnicas se pueden utilizar en los algoritmos que requieren transporte canalizado de datos controlado por flujo. Para una CPU anfitriona y una GPU, tales tecnicas se pueden utilizar, por ejemplo, para el registro de diagnosticos. Para multiples dispositivos informaticos de OpenCL, estas tecnicas se pueden utilizar para conectar varios dispositivos en un canal de datos controlado por flujo asincrono. Esto puede permitir a la aplicacion dividirse en bloques que son mas adecuados para cada CPU o GPU, poner en marcha diversas etapas de procesamiento canalizado en varios dispositivos y/o descargar la mayoria, o incluso la totalidad, de la sincronizacion de datos desde una CPU anfitriona.
En algunos ejemplos, las tecnicas de esta divulgacion pueden proporcionar una interfaz de paso de mensajes que facilita el envio y recepcion de mensajes entre un proceso que se esta ejecutando en un dispositivo anfitrion y una tarea que se esta ejecutando en un dispositivo informatico para una plataforma informatica de multiples procesadores que inicia tareas usando las colas de comandos. El dispositivo informatico puede, en algunos casos, ser una GPU. En casos adicionales, el dispositivo informatico puede ser cualquier tipo de dispositivo informatico definido por una API de plataforma informatica heterogenea, de multiples plataformas y multiples proveedores.
En ejemplos adicionales, las tecnicas de esta divulgacion pueden proporcionar una GPU que incluye uno o mas registros que son accesibles por un dispositivo anfitrion. Los uno o mas registros pueden estar configurados para facilitar el paso de mensajes entre una tarea que se esta ejecutando en la GPU y un proceso que se esta ejecutando en un dispositivo distinto a la GPU.
En ejemplos adicionales, las tecnicas de esta divulgacion pueden proporcionar una interfaz de memoria intermedia que permite la creacion de los objetos de memoria inmediata. Los objetos de memoria inmediata se pueden usar para implementar un espacio de memoria compartida no almacenable en memoria cache y/o un espacio de memoria compartida coherente con memoria cache, con el fin de compartir datos entre un proceso que se esta ejecutando en un dispositivo anfitrion y una tarea que se esta ejecutando en un dispositivo informatico, mientras la tarea se esta ejecutando en el dispositivo informatico. El dispositivo informatico puede, en algunos casos, ser una unidad de procesamiento de graficos (GPU). En otros casos, el dispositivo informatico puede ser cualquier tipo de dispositivo informatico definido por una API de plataforma informatica heterogenea, de multiples plataformas y multiples proveedores.
En otros ejemplos, las tecnicas de la presente divulgacion pueden proporcionar una GPU que incluya una memoria cache para un espacio de memoria compartida que pueda inhabilitarse selectivamente para proporcionar un espacio de memoria compartida no almacenable en memoria cache. En ejemplos adicionales, las tecnicas de la presente divulgacion pueden proporcionar una GPU que incluya una modalidad de coherencia de memoria cache que pueda habilitarse selectivamente para proporcionar un espacio de memoria compartida coherente con memoria cache.
Las tecnicas descritas en esta divulgacion pueden implementarse, al menos en parte, en hardware, software, firmware o cualquier combinacion de los mismos. Por ejemplo, varios aspectos de las tecnicas descritas pueden implementarse dentro de uno o mas procesadores, incluyendo uno o mas microprocesadores, procesadores de senales digitales (DSP), circuitos integrados especificos de la aplicacion (ASIC), formaciones de compuertas logicas programables en el terreno (FPGA), o cualquier otro sistema de circuitos de logica integrada o discreta equivalente, asi como en cualquier combinacion de tales componentes. El termino "procesador" o "sistema de circuitos de procesamiento" puede referirse en general a cualquiera de los sistemas de circuitos logicos anteriores, en solitario o en combinacion con otros sistemas de circuitos logicos, o cualquier otro sistema de circuitos equivalente, tal como hardware discreto que lleve a cabo el procesamiento.
Tales hardware, software y firmware puede implementarse dentro del mismo dispositivo o dentro de dispositivos independientes para prestar soporte a las diversas operaciones y funciones descritas en esta divulgacion. Ademas, cualquiera de las unidades, modulos o componentes descritos se puede implementar en conjunto o por separado como dispositivos logicos discretos pero interoperables. La representacion de diferentes funciones como modulos o unidades esta concebida para destacar diferentes aspectos funcionales y no implica necesariamente que tales modulos o unidades deban ser realizados por componentes de hardware o software independientes. Por el contrario, la funcionalidad asociada con uno o mas modulos o unidades puede ser realizada por componentes de hardware, firmware y/o software independientes o integrados dentro de los componentes comunes o independientes de hardware o software.
Las tecnicas descritas en la presente divulgacion tambien se pueden almacenar, realizar o codificar en un medio legible por ordenador, tal como un medio de almacenamiento legible por ordenador que almacena instrucciones. Las instrucciones integradas o codificadas en un medio legible por ordenador pueden hacer que uno o mas procesadores lleven a cabo las tecnicas descritas en el presente documento, por ejemplo, cuando las instrucciones son ejecutadas mediante los uno o mas procesadores. Los medios de almacenamiento legibles por ordenador pueden incluir memoria de acceso aleatorio (RAM), memoria de solo lectura (ROM), memoria de solo lectura programable (PROM), memoria de solo lectura programable y borrable (EPROM), memoria de solo lectura programable y borrable electronicamente (EEPROM), memoria flash, un disco duro, un CD-ROM, un disquete, un
casete, medios magneticos, medios opticos u otros medios de almacenamiento legibles por ordenador que sean tangibles.
Entre los medios legibles por ordenador pueden incluirse medios de almacenamiento legibles por ordenador, los 5 cuales corresponden a un medio de almacenamiento tangible, tal como los enumerados anteriormente. Los medios legibles por ordenador tambien pueden comprender medios de comunicacion que incluyen cualquier medio que facilite la transferencia de un programa informatico desde un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicacion. De esta manera, la frase "medios legibles por ordenador" puede corresponder, en general, a (1) medios de almacenamiento legibles por ordenador tangibles que sean no transitorios, y (2) un medio de 10 comunicacion legible por ordenador no tangible tal como una senal transitoria u onda portadora.

Claims (12)

  1. REIVINDICACIONES
    1. Un aparato que comprende:
    5 medios para colocar (24) una pluralidad de comandos en una cola de comandos (32) en respuesta a la
    recepcion de una o mas instrucciones de puesta en cola desde un proceso (20) que se esta ejecutando en un dispositivo anfitrion (12),
    caracterizado porque la pluralidad de comandos incluye un primer comando que instruye al dispositivo anfitrion (12) para transferir datos entre un primer espacio de memoria asociado con el dispositivo anfitrion 10 (12) y un segundo espacio de memoria asociado con una unidad de procesamiento de graficos, GPU (14),
    incluyendo la pluralidad de comandos ademas un segundo comando que instruye al dispositivo anfitrion (12) para iniciar la ejecucion de una tarea (28) en la GPU (14); y
    porque el aparato comprende medios para pasar (30) uno o mas mensajes entre el proceso que se esta ejecutando en el dispositivo anfitrion (12) y una tarea (28) que se esta ejecutando en la GPU (14) mientras la 15 tarea (28) se esta ejecutando en la GPU y en respuesta a la recepcion de una o mas instrucciones de paso
    de mensajes desde el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12).
  2. 2. El aparato de la reivindicacion 1, que comprende ademas uno o mas procesadores,
    20 en el que los medios para colocar (24) la pluralidad de comandos en la cola de comandos (32) comprenden
    una interfaz de cola de comandos (24) que se esta ejecutando en los uno o mas procesadores, y configurada para colocar la pluralidad de comandos en la cola de comandos (32) en respuesta a la recepcion de las una o mas instrucciones de puesta en cola desde el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12), y
    25 en el que el medio para pasar (30) uno o mas mensajes comprende una interfaz de paso de mensajes (30)
    que se esta ejecutando en los uno o mas procesadores, y configurada para pasar los uno o mas mensajes entre el proceso que se esta ejecutando en el dispositivo anfitrion (12) y la tarea (28) que se esta ejecutando en la GPU (14) mientras la tarea (28) se esta ejecutando en la GPU (14) y en respuesta a la recepcion de las una o mas instrucciones de paso de mensajes desde el proceso (20) que se esta ejecutando en el dispositivo 30 anfitrion (12).
  3. 3. El aparato de la reivindicacion 2,
    en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de envio que 35 instruye a la interfaz de paso de mensajes para enviar un mensaje desde el proceso (20) que se esta
    ejecutando en el dispositivo anfitrion (12) a la tarea (28) que se esta ejecutando en la GPU (14), y en el que la interfaz de paso de mensajes (30) esta configurada ademas para enviar, en respuesta a la recepcion de la instruccion de envio, el mensaje desde el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12) a la tarea (28) que se esta ejecutando en la GPU (14), mientras la tarea (28) se esta 40 ejecutando en la GPU (14).
  4. 4. El aparato de la reivindicacion 2,
    en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de registro de rutina 45 de devolucion de llamada, que instruye a la interfaz de paso de mensajes (30) para invocar una rutina de
    devolucion de llamada en respuesta a la recepcion de una senal desde la GPU (14) que indica que la tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje, y
    en el que la interfaz de paso de mensajes (30) esta configurada ademas para iniciar la ejecucion de la rutina de devolucion de llamada especificada en la instruccion de registro de rutina de devolucion de llamada, en 50 respuesta a la recepcion de la senal desde la GPU (14) que indica que la tarea (28) que se esta ejecutando
    en la GPU (14) ha enviado un mensaje.
  5. 5. El aparato de la reivindicacion 2,
    55 en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de sondeo que
    instruye a la interfaz de paso de mensajes para sondear la GPU (14), para obtener informacion de estado de mensaje, indicativa de si una tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje, y en el que la interfaz de paso de mensajes (30) esta ademas configurada para sondear la GPU (14), para obtener la informacion de estado de mensaje en respuesta a la recepcion de la instruccion de sondeo y, si la 60 informacion de estado de mensaje indica que la tarea (28) que se esta ejecutando en la GPU (14) ha enviado
    un mensaje, obtener el mensaje desde la GPU (14).
  6. 6. El aparato de la reivindicacion 2, en el que la interfaz de paso de mensajes (30) esta configurada ademas para ejecutar las una o mas instrucciones de paso de mensajes sin colocar ningun comando en la cola de
    65 comandos (32).
    5
    10
    15
    20
    25
    30
    35
    40
    45
    50
    55
  7. 7. Un procedimiento que comprende:
    la colocacion (70, 72), con una interfaz de cola de comandos (24) que se esta ejecutando en uno o mas procesadores de un dispositivo anfitrion (12), de una pluralidad de comandos en una cola de comandos (32), en respuesta a la recepcion de una o mas instrucciones de puesta en cola desde un proceso (20) que se esta ejecutando en el dispositivo anfitrion (12),
    caracterizado porque la pluralidad de comandos incluye un primer comando que instruye al dispositivo principal (12) para transferir datos entre un primer espacio de memoria asociado con el dispositivo anfitrion (12) y un segundo espacio de memoria asociado con una unidad de procesamiento de graficos, GPU (14), incluyendo la pluralidad de comandos ademas un segundo comando que instruye al dispositivo anfitrion (12) para iniciar la ejecucion de una tarea (28) en la GPU (14); y
    porque el procedimiento comprende el paso (76), con una interfaz de paso de mensajes (30) que se esta ejecutando en los uno o mas procesadores del dispositivo anfitrion (12), de uno o mas mensajes entre el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12) y una tarea (28) que se esta ejecutando en la GPU (14), mientras la tarea (28) se esta ejecutando en la GPU (14) y en respuesta a la recepcion de una o mas instrucciones de paso de mensajes desde el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12).
  8. 8. El procedimiento de la reivindicacion 7,
    en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de envio que instruye a la interfaz de paso de mensajes (30) para enviar un mensaje desde el proceso (20) que se esta ejecutando en el dispositivo anfitrion (12) a la tarea (28) que se esta ejecutando en la GPU (14), y en el que el procedimiento comprende ademas el envio, con la interfaz de paso de mensajes, del mensaje desde el proceso que se esta ejecutando en el dispositivo anfitrion (12) a la tarea (28) que se esta ejecutando en la GPU (14), mientras la tarea (28) se esta ejecutando en la GPU (14) y en respuesta a la recepcion de la instruccion de envio.
  9. 9. El procedimiento de la reivindicacion 7,
    en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de registro de rutina de devolucion de llamada que instruye a la interfaz de paso de mensajes (30) para invocar una rutina de devolucion de llamada en respuesta a la recepcion de una senal desde la GPU (14) que indica que la tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje, y
    en el que el procedimiento comprende ademas iniciar la ejecucion de la rutina de devolucion de llamada especificada en la instruccion de registro de rutina de devolucion de llamada, en respuesta a la recepcion de la senal desde la GPU (14), indicando que la tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje.
  10. 10. El procedimiento de la reivindicacion 7,
    en el que las una o mas instrucciones de paso de mensajes comprenden una instruccion de sondeo que instruye a la interfaz de paso de mensajes (30) para sondear la GPU (14) para obtener informacion de estado de mensaje, indicativa de si la tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje, y en el que el procedimiento comprende ademas:
    el sondeo, con la interfaz de paso de mensajes (30), de la GPU (14) para obtener la informacion de estado de mensaje en respuesta a la recepcion de la instruccion de sondeo; y
    si la informacion de estado de mensaje indica que la tarea (28) que se esta ejecutando en la GPU (14) ha enviado un mensaje, la obtencion del mensaje desde la GPU (14).
  11. 11. El procedimiento de la reivindicacion 7, que comprende ademas:
    la ejecucion, con la interfaz de paso de mensajes (30), de las una o mas instrucciones de paso de mensajes sin colocar ningun comando en cola de comandos (32).
  12. 12. Un medio legible por ordenador que comprende instrucciones que hacen que uno o mas procesadores realicen el procedimiento de cualquiera de las reivindicaciones 7 a 11.
ES11764399.9T 2010-09-20 2011-09-19 Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores Active ES2617303T3 (es)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US38457110P 2010-09-20 2010-09-20
US384571P 2010-09-20
US201161515182P 2011-08-04 2011-08-04
US201161515182P 2011-08-04
US13/235,266 US8937622B2 (en) 2010-09-20 2011-09-16 Inter-processor communication techniques in a multiple-processor computing platform
US13/235,236 US9645866B2 (en) 2010-09-20 2011-09-16 Inter-processor communication techniques in a multiple-processor computing platform
US201113235236 2011-09-16
US201113235266 2011-09-16
PCT/US2011/052196 WO2012040121A1 (en) 2010-09-20 2011-09-19 Inter-processor communication techniques in a multiple-processor computing platform

Publications (1)

Publication Number Publication Date
ES2617303T3 true ES2617303T3 (es) 2017-06-16

Family

ID=45817338

Family Applications (1)

Application Number Title Priority Date Filing Date
ES11764399.9T Active ES2617303T3 (es) 2010-09-20 2011-09-19 Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores

Country Status (10)

Country Link
US (3) US9645866B2 (es)
EP (2) EP2619965A1 (es)
JP (2) JP5738998B2 (es)
KR (2) KR101564816B1 (es)
CN (2) CN103119912B (es)
BR (1) BR112013006488A2 (es)
ES (1) ES2617303T3 (es)
HU (1) HUE033041T2 (es)
IN (1) IN2013MN00405A (es)
WO (2) WO2012040121A1 (es)

Families Citing this family (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101332840B1 (ko) * 2012-01-05 2013-11-27 서울대학교산학협력단 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법
US9645866B2 (en) 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US9239793B2 (en) * 2011-12-13 2016-01-19 Ati Technologies Ulc Mechanism for using a GPU controller for preloading caches
US9170820B2 (en) * 2011-12-15 2015-10-27 Advanced Micro Devices, Inc. Syscall mechanism for processor to processor calls
JP5238876B2 (ja) * 2011-12-27 2013-07-17 株式会社東芝 情報処理装置及び情報処理方法
US8943516B2 (en) * 2012-05-31 2015-01-27 International Business Machines Corporation Mechanism for optimized intra-die inter-nodelet messaging communication
US9495718B2 (en) * 2012-06-08 2016-11-15 Advanced Micro Devices, Inc. System and method for providing low latency to applications using heterogeneous processors
US8869176B2 (en) 2012-11-09 2014-10-21 Qualcomm Incorporated Exposing host operating system services to an auxillary processor
US20140149528A1 (en) * 2012-11-29 2014-05-29 Nvidia Corporation Mpi communication of gpu buffers
KR102030733B1 (ko) 2013-01-02 2019-10-10 삼성전자주식회사 메모리 시스템 및 이의 구동 방법
US20140208134A1 (en) * 2013-01-21 2014-07-24 Texas Instruments Incorporated Host controller interface for universal serial bus (usb) power delivery
US9086813B2 (en) * 2013-03-15 2015-07-21 Qualcomm Incorporated Method and apparatus to save and restore system memory management unit (MMU) contexts
US9563561B2 (en) * 2013-06-25 2017-02-07 Intel Corporation Initiation of cache flushes and invalidations on graphics processors
CN103353851A (zh) * 2013-07-01 2013-10-16 华为技术有限公司 一种管理任务的方法和设备
US20150149745A1 (en) * 2013-11-25 2015-05-28 Markus Eble Parallelization with controlled data sharing
US20160292009A1 (en) * 2013-12-20 2016-10-06 David Kaplan Execution offloading through syscall trap interface
EP3092560B1 (en) * 2014-01-06 2019-05-08 Johnson Controls Technology Company Vehicle with multiple user interface operating domains
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
KR102100161B1 (ko) * 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
US10055342B2 (en) * 2014-03-19 2018-08-21 Qualcomm Incorporated Hardware-based atomic operations for supporting inter-task communication
US20160179668A1 (en) * 2014-05-28 2016-06-23 Mediatek Inc. Computing system with reduced data exchange overhead and related data exchange method thereof
WO2016068999A1 (en) * 2014-10-31 2016-05-06 Hewlett Packard Enterprise Development Lp Integrated heterogeneous processing units
GB2533768B (en) * 2014-12-19 2021-07-21 Advanced Risc Mach Ltd Cleaning a write-back cache
JP2016208105A (ja) * 2015-04-16 2016-12-08 日本電信電話株式会社 通信装置、通信方法、及びプログラム
JP6338152B2 (ja) * 2015-04-16 2018-06-06 日本電信電話株式会社 通信装置、通信方法、及びプログラム
US9996487B2 (en) * 2015-06-26 2018-06-12 Intel Corporation Coherent fabric interconnect for use in multiple topologies
US10776690B2 (en) 2015-10-08 2020-09-15 Via Alliance Semiconductor Co., Ltd. Neural network unit with plurality of selectable output functions
US10725934B2 (en) 2015-10-08 2020-07-28 Shanghai Zhaoxin Semiconductor Co., Ltd. Processor with selective data storage (of accelerator) operable as either victim cache data storage or accelerator memory and having victim cache tags in lower level cache wherein evicted cache line is stored in said data storage when said data storage is in a first mode and said cache line is stored in system memory rather then said data store when said data storage is in a second mode
US11216720B2 (en) 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US11226840B2 (en) 2015-10-08 2022-01-18 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
US10380481B2 (en) 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US11029949B2 (en) 2015-10-08 2021-06-08 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit
US10664751B2 (en) * 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
US11221872B2 (en) 2015-10-08 2022-01-11 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that interrupts processing core upon condition
US10228911B2 (en) 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10474627B2 (en) 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
US9965417B1 (en) * 2016-01-13 2018-05-08 Xilinx, Inc. Use of interrupt memory for communication via PCIe communication fabric
KR101842764B1 (ko) * 2016-03-18 2018-03-28 연세대학교 산학협력단 하드웨어 가속기와 호스트 시스템 사이의 데이터 일관성 유지 장치 및 방법
JP6146508B1 (ja) 2016-03-31 2017-06-14 日本電気株式会社 同期処理ユニット、デバイス、システムおよび方法
KR102589298B1 (ko) * 2016-05-11 2023-10-13 삼성전자주식회사 그래픽스 프로세싱 장치 및, 그래픽스 프로세싱 장치에서 캐시 바이패스를 제어하는 방법
CN106127673B (zh) * 2016-07-19 2019-02-12 腾讯科技(深圳)有限公司 一种视频处理方法、装置及计算机设备
US10152243B2 (en) 2016-09-15 2018-12-11 Qualcomm Incorporated Managing data flow in heterogeneous computing
US10248565B2 (en) * 2016-09-19 2019-04-02 Qualcomm Incorporated Hybrid input/output coherent write
US10936533B2 (en) * 2016-10-18 2021-03-02 Advanced Micro Devices, Inc. GPU remote communication with triggered operations
US10417560B2 (en) 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
US10430706B2 (en) 2016-12-01 2019-10-01 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either last level cache slice or neural network unit memory
US10423876B2 (en) 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US10438115B2 (en) 2016-12-01 2019-10-08 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions
US10395165B2 (en) 2016-12-01 2019-08-27 Via Alliance Semiconductor Co., Ltd Neural network unit with neural memory and array of neural processing units that collectively perform multi-word distance rotates of row of data received from neural memory
US10515302B2 (en) 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
KR102576707B1 (ko) 2016-12-26 2023-09-08 삼성전자주식회사 전자 시스템 및 그 동작 방법
US10565492B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10565494B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10140574B2 (en) 2016-12-31 2018-11-27 Via Alliance Semiconductor Co., Ltd Neural network unit with segmentable array width rotator and re-shapeable weight memory to match segment width to provide common weights to multiple rotator segments
US10586148B2 (en) 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10331532B2 (en) * 2017-01-19 2019-06-25 Qualcomm Incorporated Periodic non-intrusive diagnosis of lockstep systems
JP2018165913A (ja) * 2017-03-28 2018-10-25 富士通株式会社 演算処理装置、情報処理装置、及び演算処理装置の制御方法
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10373285B2 (en) * 2017-04-09 2019-08-06 Intel Corporation Coarse grain coherency
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
JP7032631B2 (ja) * 2017-07-04 2022-03-09 富士通株式会社 送受信システム、送受信システムの制御方法、及び送信装置
JP6907787B2 (ja) * 2017-07-28 2021-07-21 富士通株式会社 情報処理装置および情報処理方法
KR102403379B1 (ko) * 2017-09-12 2022-06-02 주식회사 코코링크 다중 gpu간 데이터 공유 방법
US10303384B1 (en) * 2017-11-28 2019-05-28 Western Digital Technologies, Inc. Task readiness for queued storage tasks
KR102442921B1 (ko) 2017-12-11 2022-09-13 삼성전자주식회사 디지털 시그널 프로세서(dsp)의 태스크 관리 효율을 높일 수 있는 전자 장치
KR102533241B1 (ko) 2018-01-25 2023-05-16 삼성전자주식회사 적응적으로 캐시 일관성을 제어하도록 구성된 이종 컴퓨팅 시스템
US10671460B2 (en) * 2018-02-05 2020-06-02 Micron Technology, Inc. Memory access communications through message passing interface implemented in memory systems
US10776281B2 (en) * 2018-10-04 2020-09-15 International Business Machines Corporation Snoop invalidate filter for distributed memory management unit to reduce snoop invalidate latency
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US10628342B1 (en) * 2018-12-20 2020-04-21 Dell Products, L.P. System and method for accelerating performance of non-volatile memory RAID stacks
CN111381958B (zh) * 2018-12-29 2022-12-09 上海寒武纪信息科技有限公司 通信装置、神经网络处理芯片、组合装置和电子设备
KR20200083048A (ko) * 2018-12-31 2020-07-08 삼성전자주식회사 폴링 시간을 예측하는 뉴럴 네트워크 시스템 및 이를 이용한 뉴럴 네트워크 모델 처리 방법
US20200342109A1 (en) * 2019-04-29 2020-10-29 Hewlett Packard Enterprise Development Lp Baseboard management controller to convey data
US11256423B2 (en) * 2019-10-14 2022-02-22 Western Digital Technologies, Inc. Efficiently identifying command readiness based on system state and data spread in multi queue depth environment
JP2021149549A (ja) * 2020-03-19 2021-09-27 キオクシア株式会社 ストレージ装置およびアドレス変換テーブルのキャッシュ制御方法
US20210311897A1 (en) 2020-04-06 2021-10-07 Samsung Electronics Co., Ltd. Memory with cache-coherent interconnect
US20210373951A1 (en) * 2020-05-28 2021-12-02 Samsung Electronics Co., Ltd. Systems and methods for composable coherent devices
CN111897653A (zh) * 2020-07-30 2020-11-06 云知声智能科技股份有限公司 一种协同计算方法、装置、系统及介质
CN112100169B (zh) * 2020-08-05 2021-09-21 中科驭数(北京)科技有限公司 数据库交互数据编码方法及装置
CN112416851B (zh) * 2020-11-30 2023-07-18 中国人民解放军国防科技大学 一种可扩展的多核片上共享存储器
US11861758B2 (en) * 2021-03-12 2024-01-02 Nvidia Corporation Packet processing acceleration using parallel processing
CN115934385B (zh) * 2023-02-08 2023-05-23 苏州浪潮智能科技有限公司 一种多核核间通信方法、系统、设备及存储介质

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6242247A (ja) 1985-08-20 1987-02-24 Fujitsu Ltd キヤツシユメモリ制御方式
JP2736352B2 (ja) 1988-11-21 1998-04-02 日本電信電話株式会社 マルチプロセッサシステムにおけるキャッシュメモリ制御方法
JPH03127146A (ja) 1989-10-12 1991-05-30 Koufu Nippon Denki Kk 情報処理装置
JP3056606B2 (ja) 1993-02-17 2000-06-26 住友重機械工業株式会社 液状放射性薬剤小分け装置
US5604909A (en) 1993-12-15 1997-02-18 Silicon Graphics Computer Systems, Inc. Apparatus for processing instructions in a computing system
JPH0950399A (ja) 1995-08-10 1997-02-18 Fujitsu Ltd 多次元空間に配列されたデータの処理に適したキャッシュメモリシステム
US5854637A (en) 1995-08-17 1998-12-29 Intel Corporation Method and apparatus for managing access to a computer system memory shared by a graphics controller and a memory controller
US6088740A (en) 1997-08-05 2000-07-11 Adaptec, Inc. Command queuing system for a hardware accelerated command interpreter engine
US6212667B1 (en) * 1998-07-30 2001-04-03 International Business Machines Corporation Integrated circuit test coverage evaluation and adjustment mechanism and method
US6618759B1 (en) * 2000-01-31 2003-09-09 Hewlett-Packard Development Company, L.P. Immediate mode computer graphics command caching
US6801208B2 (en) * 2000-12-27 2004-10-05 Intel Corporation System and method for cache sharing
WO2003052586A2 (en) 2001-12-14 2003-06-26 Koninklijke Philips Electronics N.V. Data processing system having multiple processors
US6891543B2 (en) 2002-05-08 2005-05-10 Intel Corporation Method and system for optimally sharing memory between a host processor and graphics processor
US7958144B2 (en) 2002-08-30 2011-06-07 Boss Logic, Llc System and method for secure reciprocal exchange of data
EP1623330A2 (en) 2003-05-07 2006-02-08 Koninklijke Philips Electronics N.V. Processing system and method for transmitting data
US7015915B1 (en) 2003-08-12 2006-03-21 Nvidia Corporation Programming multiple chips from a command buffer
GB0319697D0 (en) 2003-08-21 2003-09-24 Falanx Microsystems As Method of and apparatus for differential encoding and decoding
TW200517825A (en) 2003-11-28 2005-06-01 First Int Computer Inc Over-clocking method used in VGA card and its application method for computer system
US7310722B2 (en) 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
GB2409303B (en) 2003-12-18 2006-10-18 Advanced Risc Mach Ltd Inter-processor communication mechanism
US7023445B1 (en) 2004-04-12 2006-04-04 Advanced Micro Devices, Inc. CPU and graphics unit with shared cache
US7305524B2 (en) * 2004-10-08 2007-12-04 International Business Machines Corporation Snoop filter directory mechanism in coherency shared memory system
US7302528B2 (en) * 2004-11-19 2007-11-27 Intel Corporation Caching bypass
US7583268B2 (en) 2005-11-10 2009-09-01 Via Technologies, Inc. Graphics pipeline precise interrupt method and apparatus
US8212832B2 (en) 2005-12-08 2012-07-03 Ati Technologies Ulc Method and apparatus with dynamic graphics surface memory allocation
US7526634B1 (en) 2005-12-19 2009-04-28 Nvidia Corporation Counter-based delay of dependent thread group execution
US7353991B2 (en) 2006-02-21 2008-04-08 David Benjamin Esplin System and method for managing wireless point-of-sale transactions
US7814486B2 (en) 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
JP2008140078A (ja) 2006-11-30 2008-06-19 Toshiba Corp バスブリッジ装置、情報処理装置、およびデータ転送制御方法
JP5101128B2 (ja) 2007-02-21 2012-12-19 株式会社東芝 メモリ管理システム
US8031194B2 (en) * 2007-11-09 2011-10-04 Vivante Corporation Intelligent configurable graphics bandwidth modulator
US9035959B2 (en) 2008-03-28 2015-05-19 Intel Corporation Technique to share information among different cache coherency domains
EP2141651B1 (en) 2008-04-08 2018-06-13 Avid Technology, Inc. Framework to integrate and abstract processing of multiple hardware domains, data types and format
GB2462860B (en) 2008-08-22 2012-05-16 Advanced Risc Mach Ltd Apparatus and method for communicating between a central processing unit and a graphics processing unit
US8675000B2 (en) 2008-11-07 2014-03-18 Google, Inc. Command buffers for web-based graphics rendering
US20100123717A1 (en) 2008-11-20 2010-05-20 Via Technologies, Inc. Dynamic Scheduling in a Graphics Processor
US8589629B2 (en) * 2009-03-27 2013-11-19 Advanced Micro Devices, Inc. Method for way allocation and way locking in a cache
US9354944B2 (en) 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US8400458B2 (en) * 2009-09-09 2013-03-19 Hewlett-Packard Development Company, L.P. Method and system for blocking data on a GPU
US8859133B2 (en) 2010-08-17 2014-10-14 GM Global Technology Operations LLC Repeating frame battery with compression joining of cell tabs to welded connection terminals
US9645866B2 (en) 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform

Also Published As

Publication number Publication date
KR101564815B1 (ko) 2015-10-30
US9626234B2 (en) 2017-04-18
EP2619666A1 (en) 2013-07-31
JP5738998B2 (ja) 2015-06-24
KR101564816B1 (ko) 2015-10-30
CN103119912A (zh) 2013-05-22
BR112013006488A2 (pt) 2016-07-26
JP2013546035A (ja) 2013-12-26
US20120069029A1 (en) 2012-03-22
US8937622B2 (en) 2015-01-20
HUE033041T2 (hu) 2017-11-28
CN103109274A (zh) 2013-05-15
US20120069035A1 (en) 2012-03-22
KR20130094322A (ko) 2013-08-23
WO2012040122A1 (en) 2012-03-29
JP5815712B2 (ja) 2015-11-17
EP2619666B1 (en) 2016-11-23
JP2013537993A (ja) 2013-10-07
KR20130060337A (ko) 2013-06-07
US9645866B2 (en) 2017-05-09
IN2013MN00405A (es) 2015-05-29
WO2012040121A1 (en) 2012-03-29
CN103119912B (zh) 2016-06-01
US20150097849A1 (en) 2015-04-09
EP2619965A1 (en) 2013-07-31
CN103109274B (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
ES2617303T3 (es) Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores
JP6649267B2 (ja) タスク間通信をサポートするためのハードウェアベースのアトミック動作
US9946666B2 (en) Coalescing texture access and load/store operations
TWI531974B (zh) 管理巢狀執行串流的方法和系統
CN102648449A (zh) 用于并行处理单元的陷阱处理器架构
EP3726382A1 (en) Deep learning thread communication
US8943516B2 (en) Mechanism for optimized intra-die inter-nodelet messaging communication
CN117546149A (zh) 用于执行共享存储器操作的系统、装置和方法
US20100161914A1 (en) Autonomous memory subsystems in computing platforms
CN103455361A (zh) 一种在64位操作系统下调用32位解码库的设计方法
US10802828B1 (en) Instruction memory
US8593472B1 (en) System and method for accessing a frame buffer via a storage driver
US9378139B2 (en) System, method, and computer program product for low latency scheduling and launch of memory defined tasks
CN118057442A (zh) 图修改