ES2880268T3 - Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo - Google Patents

Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo Download PDF

Info

Publication number
ES2880268T3
ES2880268T3 ES13737064T ES13737064T ES2880268T3 ES 2880268 T3 ES2880268 T3 ES 2880268T3 ES 13737064 T ES13737064 T ES 13737064T ES 13737064 T ES13737064 T ES 13737064T ES 2880268 T3 ES2880268 T3 ES 2880268T3
Authority
ES
Spain
Prior art keywords
queuing
hmq
coprocessor
queue
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
ES13737064T
Other languages
English (en)
Inventor
Kathirgamar Aingaran
William H Bridge Jr
Garret F Swart
Sumti Jairath
John G Johnson
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.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Application granted granted Critical
Publication of ES2880268T3 publication Critical patent/ES2880268T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24561Intermediate data storage techniques for performance improvement
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the program performs an interfacing function, e.g. device driver
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/082Associative directories
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • G06F13/362Handling requests for interconnection or transfer for access to common bus or bus system with centralised access control
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7889Reconfigurable logic implemented as a co-processor
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/24569Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9535Search customisation based on user profiles and personalisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/14Multichannel or multilink protocols
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Retry When Errors Occur (AREA)
  • Logic Circuits (AREA)

Abstract

Un dispositivo para facilitar la comunicación entre una pluralidad de nodos (105-1, 105-M) de un grupo de cómputo, comprendiendo el dispositivo un coprocesador (115-M) de un nodo particular (105-M) de dicha pluralidad de nodos (105-1, 105-M), comprendiendo el coprocesador (115-M): un circuito de puesta en cola; estando acoplado dicho circuito de puesta en cola a una memoria (120-M) de dicho nodo particular (105-M); siendo dicho circuito de puesta en cola un circuito cableado o un ASIC programado de manera persistente o una FPGA programada de manera persistente configurado para: recibir (520), desde otro nodo (105-1) de dicha pluralidad de nodos (105-1, 105-M), una instrucción de puesta en cola que comprende una clave con un código (210) de clave irreversible cifrada derivado de un secreto básico, en donde: la clave identifica una cola particular (300, 140-M) en dicha memoria (120-M), habiendo sido creada la clave previamente en dicho nodo particular (105-M) y enviada desde dicho nodo particular (105-M) a dicho otro nodo (105- 1), y la instrucción de puesta en cola incluye una carga útil que ha de almacenarse en la cola particular (300, 140-M); autenticar (530) la instrucción de puesta en cola, comprendiendo el desciframiento del código (210) de clave irreversible cifrada el uso de dicho secreto básico almacenado en dicho coprocesador (115-M) y la determinación de si el código (210) de clave irreversible es válido; y poner en cola (590) una entrada (332-1, 332-2) de cola, en la que se almacena dicha carga útil, en la cola particular (300, 140-M) identificada por la instrucción recibida de puesta en cola en respuesta a la recepción (520) de dicha instrucción de puesta en cola si la instrucción de puesta en cola fue autenticada con éxito.

Description

DESCRIPCIÓN
Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo
La presente solicitud reivindica prioridad con respecto a la solicitud de patente estadounidense n° 13/783.307, presentada el 27 de febrero de 2013, que reivindica prioridad con respecto a la solicitud provisional estadounidense n° 61/709.142, presentada el 2 de octubre de 2012.
Campo de la invención
La presente invención versa sobre el uso de circuitos especializados para enviar y recibir mensajes de uno o más nodos en un grupo de cómputo.
Antecedentes
Los sistemas de bases de datos distribuyen porciones de una base de datos entre varios nodos en un grupo para mejorar el rendimiento y aportar escalabilidad. Los grupos se configuran en una de dos maneras: como grupos de memoria coherente o como grupos de cómputo.
Los nodos de un grupo de memoria coherente comparten memoria física. Compartir memoria física permite a cada nodo del grupo comunicarse muy rápidamente. Enviando y recibiendo mensajes entre dos nodos en un grupo de memoria compartida, un nodo escribirá datos a la memoria compartida y el otro nodo leerá los datos de la memoria compartida. Desgraciadamente, los grupos de memoria coherente son muy costosos de construir y hay un límite de tamaño de la memoria compartida que puede estar almacenada en un grupo de memoria coherente.
Los nodos de un grupo de cómputo no comparten memoria física. La comunicación entre los nodos de un grupo de cómputo puede llevarse a cabo a través de mensajes habitualmente distribuidos en un subsistema de E/S. Un subsistema de E/S puede incluir un enlace de E/S, un mecanismo de sincronización y un hilo servidor en el nodo receptor para procesar los mensajes entrantes. Además, puede ser necesario que los nodos de cómputo reensamblen los mensajes entrantes y almacenen los mensajes reensamblados en la memoria principal de un nodo. Tal subsistema de E/S incurre en una penalización de rendimiento que aumenta la latencia de los mensajes y limita el caudal de procesamiento de mensajes.
Brewer et al.: “Remote Queues: Exposing Message Queues for Optimization and Atomicity”, 7th annual ACM Symposium on Parallel Algorithms and Architectures, Santa Bárbara, 7 de julio de 1995, vol. Simp. 6, páginas 42-53, da a conocer una pluralidad de nodos en una red, teniendo cada nodo un procesador de cómputo que está soportado por un procesador de mensajes. Cuando ha de despacharse un mensaje, el procesador de cómputo de un nodo de despacho solicita al procesador de mensajes del nodo de despacho que transmita el mensaje al procesador de mensajes de un nodo receptor que pone en cola el mensaje recibido. En respuesta a una solicitud de interrogación del procesador de cómputo del nodo receptor, el procesador de mensajes del nodo receptor extrae de la cola el mensaje recibido y proporciona el mensaje al procesador de cómputo.
El documento EP 2423843 A1 versa sobre la configuración o programación de una FPGA. El documento menciona técnicas convencionales para configurar o programar una FPGA que incluyen cifrar los datos de configuración y almacenar los datos cifrados en una unidad de memoria dentro de la FPGA o en un dispositivo de almacenamiento externo conectado operativamente con la FPGA. El documento divulga, además, el uso de un protocolo complejo de Menezes-Qu-Vanstone de curvas elípticas (protocolo EC-MQV, por sus siglas en inglés) como protocolo de acuerdo de claves para calcular una clave de sesión.
Los planteamientos descritos en esta sección son planteamientos que podrían seguirse, pero no necesariamente planteamientos que se hayan concebido o seguido con anterioridad. Por lo tanto, a no ser que se indique algo distinto, no debería suponerse que cualquiera de los planteamientos descritos en esta sección pueda ser considerado técnica anterior meramente en virtud de su inclusión en esta sección.
Sumario de la invención
La invención está definida por las reivindicaciones independientes, teniendo debidamente en cuenta cualquier elemento que sea equivalente a un elemento especificado en las reivindicaciones. Las reivindicaciones dependientes se refieren a características opcionales de algunos elementos de la invención.
Breve descripción de los dibujos
La presente invención está ilustrada a título de ejemplo, y no de limitación, en las figuras de los dibujos adjuntos, y en las cuales números de referencia semejantes se refieren a elementos similares y en las cuales:
la Figura 1 es un diagrama de bloques que ilustra un nodo en un sistema de múltiples HMQ que emplea un coprocesador de HMQ para recibir mensajes de otros nodos del grupo de cómputo, según una realización de la invención;
la Figura 2 es un diagrama de bloques de una RKEY de HMQ, según una realización;
la Figura 3 es un diagrama de bloques de una cola de mensajería en soporte físico, según una realización de la invención;
la Figura 4 es un diagrama de flujo que ilustra la inicialización de una HMQ, según una realización;
la Figura 5 es un diagrama de flujo que ilustra la autenticación de una instrucción, según una realización;
la Figura 6 es un diagrama de flujo que ilustra la puesta en cola de forma atómica de un mensaje en una HMQ, según una realización;
la Figura 7 es un diagrama de flujo que ilustra la lectura de un mensaje almacenado en una entrada particular y la extracción de la entrada de la cola, según una realización;
la Figura 8 ilustra un sistema informático en el que se puede implementar una realización.
Descripción detallada
En la siguiente descripción, con fines explicativos, se presentan numerosos detalles específicos para proporcionar una comprensión cabal de la presente invención. Sin embargo, será evidente que la presente invención puede ser puesta en práctica sin estos detalles específicos. En otros casos, se presentan estructuras y dispositivos muy conocidos en forma de diagrama de bloques para evitar ofuscar innecesariamente la presente invención.
Visión general
La comunicación entre nodos en un grupo de cómputo que no comparten memoria física se lleva a cabo pasando mensajes a través de un subsistema de E/S. La tara para cada nodo que usa el subsistema de E/S es elevada. Cada nodo puede incluir un mecanismo de sincronización, un hilo en el nodo receptor preparado para recibir conexiones y otros hilos para procesar y reensamblar mensajes. Frecuentemente, un nodo receptor también mantiene una cola separada en memoria para cada nodo en el subsistema de E/S que envía mensajes al nodo receptor. Tal tara conlleva una penalización del rendimiento, que aumenta la latencia y limita el caudal de procesamiento de mensajes.
Se presenta un sistema eficiente para el envío y la recepción de mensajes entre nodos en un grupo de cómputo al que se denomina en el presente documento sistema de múltiples HMQ. El sistema de múltiples HMQ proporciona funcionalidad para las copias de memoria y el paso de mensajes. Cada nodo en el sistema de múltiples HMQ incluye una cola de mensajes en soporte físico (“HMQ”, por sus siglas en inglés), un coprocesador de colas de mensajes en soporte físico (“coprocesador de HMQ”) y un enlace de comunicaciones que conecta cada coprocesador de HMQ a los otros coprocesadores de HMQ en el sistema de múltiples HMQ.
Una HMQ comprende una cabecera y una carga útil. La cabecera en una HMQ comprende metadatos relativos al estado de la HMQ y punteros en entradas o direcciones particulares de la carga útil. El coprocesador de HMQ almacena entradas de la carga útil en función de las instrucciones que recibe el coprocesador de HMQ. Cada entrada de la carga útil también puede contener indicadores relativos al estado de esa entrada particular.
Los coprocesadores de HMQ envían instrucciones a otros coprocesadores de HMQ y reciben instrucciones procedentes de los mismos. El coprocesador receptor de HMQ asigna una entrada en la HMQ diana incrementando atómicamente un puntero de asignación en la cabecera de la HMQ. La entrada asignada se llena con un mensaje entrante y se pone un indicador especial de finalización en la entrada. El coprocesador de HMQ es capaz de enviar, recibir, autenticar, pone en cola, sincronizar y reensamblar mensajes entrantes sin intervención adicional de soporte lógico.
Gracias al coprocesador de HMQ, los mensajes en el sistema de múltiples HMQ se intercambian a una velocidad mayor y con menor latencia. Una mensajería más rápida permite un mayor rendimiento del sistema de múltiples HMQ y del grupo de cómputo. Además, la HMQ puede reducir el consumo de memoria en comparación con las aplicaciones genéricas de mensajería al almacenar mensajes de múltiples procedencias en la misma HMQ, eliminando la necesidad de colas por procedencia.
El coprocesador de HMQ
Los coprocesadores de HMQ son circuitos especializados. La expresión “circuitos especializados” se refiere a circuitos digitales que realizan un conjunto de funciones y que bien están cableados para realizar el conjunto de funciones o bien están programados de forma persistente para realizar el conjunto de funciones. Los circuitos programados de forma persistente incluyen circuitos integrados para aplicaciones específicas (ASIC, por sus siglas en inglés) o matrices de puertas programables in situ (FPGA, por sus siglas en inglés) electrónicos digitales. Los circuitos especializados no incluyen un procesador de uso general que esté configurado para realizar funciones ejecutando un conjunto de instrucciones o programa de soporte lógico que pueda residir en la memoria.
En cambio, la expresión “soporte lógico” se refiere a un conjunto de instrucciones o a un programa ejecutado por circuitos digitales que llevan a cabo un conjunto expansivo de funciones en un procesador de uso general. Un soporte lógico no está ni cableado ni programado de forma persistente para realizar funciones específicas. Aunque puede usarse un soporte lógico para implementar una funcionalidad expansiva, el soporte lógico normalmente se ejecuta con más lentitud y requiere más tara que las funciones realizadas por circuitos especializados. Por conveniencia de la expresión, cuando se dice que un soporte lógico realiza una acción, se están ejecutando instrucciones en un procesador de uso general para llevar a cabo la acción.
Los coprocesadores de HMQ procesan un conjunto limitado de instrucciones. Por ejemplo, un coprocesador de HMQ puede procesar, sin limitación de ningún tipo, las siguientes instrucciones sin ejecutar un soporte lógico: Copiar, Copiar y señalizar, Llenar, Almacenar, Suma atómica, O atómica, Envío atómico de mensajes sin solicitud, Interrumpir, Sincronizar y Ausencia de operación.
Los coprocesadores de HMQ envían instrucciones a otros coprocesadores de HMQ, y reciben instrucciones de los mismos, sin la ayuda de soporte lógico. Por ejemplo, un primer coprocesador de HMQ puede ordenar a un segundo coprocesador de HMQ que almacene un mensaje. El segundo coprocesador de HMQ autentica la orden, asigna una entrada en la HMQ diana, y almacena la carga útil en la HMQ diana. La entrada asignada se llena con el mensaje entrante asociado con una instrucción y se pone un indicador especial de finalización en la entrada. El coprocesador de HMQ lleva a cabo estas operaciones sin ayuda de soporte lógico.
Como se describe en el presente documento, el coprocesador de HMQ puede, sin limitación de ningún tipo, enviar instrucciones a otros coprocesadores de HMQ, recibir instrucciones de otros coprocesadores de HMQ, autenticar las instrucciones recibidas, poner entradas en cola en una HMQ, sincronizar los mensajes recibidos, reensamblar los mensajes entrantes y notificar errores, sin intervención del soporte lógico.
El sistema de múltiples HMQ
La Figura 1 es un diagrama de bloques que ilustra un sistema 100 de múltiples HMQ, según una realización. El sistema de múltiples HMQ mueve datos de una ubicación de memoria a otra ubicación de memoria. Por ejemplo, el coprocesador 115-1 de HMQ puede ordenar al coprocesador 115-M que almacene un mensaje en memoria 120-M en el nodo 105-M. En la realización ilustrada en la Figura 1, el sistema 100 de múltiples HMQ incluye, sin limitación de ningún tipo, los nodos 105-1 a 105-M (colectivamente, “nodos 105”), incluyendo los nodos 105 los coprocesadores 115-1 a 115-M de HMQ (colectivamente, “coprocesadores 115 de HMQ”), respectivamente.
En la realización ilustrada en la Figura 1, los coprocesadores 115 de HMQ están situados en los propios chips de los procesadores 110-1 a 110-M (colectivamente, “procesadores 110”), respectivamente. En otra realización, los coprocesadores 115 de HMQ son núcleos situados en los procesadores 110, respectivamente. El coprocesador 115 de HMQ puede estar situado en la misma placa — pero no en el mismo chip— que los procesadores 115, respectivamente. Alternativamente, los coprocesadores 115 de HMQ pueden estar situados en otro lugar y estar meramente acoplados comunicativamente con los procesadores 110, respectivamente.
El coprocesador 115-1 de HMQ está acoplado comunicativamente con: el bus 150-1; la memoria 120-1; el soporte lógico 130-1; la HMQ 140-1; y otros coprocesadores 115 de HMQ. Cada una de las HMQ 140-1 a 140-M (colectivamente, “HMQ 140”) es una instancia de la HMQ 300. Además, los coprocesadores 115 de HMQ están conmutativamente acoplados a través de los enlaces 160-1 a 160-M (denominados colectivamente “enlaces 160”), respectivamente, y del conmutador 170. Sin embargo, en otras realizaciones, los coprocesadores de HMQ pueden estar directamente conectados o acoplados comunicativamente a través de otros medios, conocidos por los expertos en la técnica.
Como se ha expuesto anteriormente, el soporte lógico 130-1 a 130-M, colectivamente 130, se refiere a un conjunto de instrucciones o programa almacenado en nodos 105, respectivamente, y ejecutado en procesadores 110 de uso general, respectivamente. El soporte lógico 130-1 a 130-M (colectivamente, “soporte lógico 130”), no está cableado o programado de forma persistente para llevar a cabo funciones específicas. Por conveniencia de la expresión, cuando se dice que el soporte lógico 130 realiza una acción, se están ejecutando instrucciones que comprenden el soporte lógico 130 en un procesador 110, respectivamente, para realizar la acción.
Claves de acceso remoto a HMQ (“RKEY de HMQ”)
El coprocesador de HMQ puede no estar limitado por un sistema operativo y puede tener un acceso ilimitado a la memoria. Puede enviarse una RKEY de HMQ con cada instrucción y designar a qué HMQ debería acceder un coprocesador de HMQ. Además, una RKEY de HMQ puede incluir la ubicación y el tamaño de la memoria asignada para la correspondiente HMQ, y restringir que el coprocesador de HMQ acceda a memoria asignada para la HMQ. Por tanto, es importante garantizar que una RKEY de HMQ sea válida y que no ha sido falsificada o alterada. Para garantizar que el coprocesador de HMQ escribe en un espacio autorizado en memoria, el coprocesador de HMQ valida la RKEY de HMQ enviada con cada instrucción. Por ejemplo, puede crearse una RKEY de HMQ para cada HMQ en cada nodo del sistema de múltiples HMQ. Cada una de las múltiples HMQ asignadas en el mismo nodo puede tener una RKEY única de HMQ, que designa a la HMQ particular a la que debería acceder el coprocesador de HMQ para una instrucción dada.
La Figura 2 es un diagrama de bloques de la RKEY 200 de HMQ, según una realización. La RKEY 200 puede incluir, sin limitación de ningún tipo, la clave irreversible 210, el tamaño 220, la dirección 230 y permisos 240.
La RKEY 200 de HMQ comprende un certificado otorgado por el propietario de un bloque de memoria física a un usuario remoto. Por ejemplo, usando la realización ilustrada en la Figura 1, el soporte lógico 130-M puede autorizar que el nodo 105-1 acceda a un bloque específico en la memoria 120-M enviando al nodo 105-1 una instancia de la RKEY 200 de HMQ, generada por el soporte lógico 130-M. Cuando el coprocesador 115-1 de HMQ envía una instrucción al coprocesador 115-M de HMQ, el coprocesador 115-1 de HMQ también puede enviar una copia de la anterior instancia recibida de la RKEY 200 de HMQ. El coprocesador 115-M de HMQ puede validar la RKEY de HMQ para garantizar que la instrucción no fue enviada desde un coprocesador autorizado de HMQ y que está siendo almacenada en una memoria debidamente asignada. Alternativamente, el soporte lógico 130-1 puede enviar una instrucción al coprocesador 115-M de HMQ directamente, o a través del coprocesador 115-1 de HMQ. El tamaño de la RKEY de HMQ puede tener una longitud de 16 bytes; sin embargo, no se requiere que la RKEY de HMQ tenga una longitud de 16 bytes. Puede ser preferible una RKEy de HMQ menor para reducir el espacio ocupado en memoria y la congestión de la red; sin embargo, una RKEY de HMQ mayor puede permitir una clave irreversible mayor y más segura.
La clave irreversible 210 es una clave irreversible cifrada derivada de un secreto básico. La clave irreversible 210 también puede derivarse, sin limitación de ningún tipo, de los parámetros: tamaño 220, dirección 230 y permisos 240. Cada uno de los coprocesadores 115 de HMQ contiene el secreto básico, generado por el soporte lógico 130-1 a 130-M, respectivamente, para descifrar la irreversible 210 tras la recepción de una instancia de la RKEY 200 de HMQ. También pueden implementarse otros modelos de seguridad que usen cifrado por clave pública/clave privada, claves irreversibles, semillas, secretos o códigos.
El tamaño 220 es el tamaño de la región a la que una RKEY de HMQ está autorizada a acceder. La dirección 230 contiene la dirección física de la región a la que el generador de RKEY de HMQ (por ejemplo, el soporte lógico 140-M) está autorizado a acceder. Alternativamente, la dirección 230 puede contener solamente un número que identifica una HMQ específica en memoria, sin que sea la dirección de memoria de la HMQ. Además, la RKEY 200 de HMQ puede identificar bloques de control del coprocesador
Figure imgf000005_0001
por sus siglas en inglés) de HMQ en lugar de una dirección de destino.
Los permisos 240 son los permisos que se dan al presentador (por ejemplo, el coprocesador 115-1 de HMQ). Por ejemplo, la RKEY de HMQ puede dar permiso para escribir un mensaje en una HMQ específica, pero no para leer de la HMQ. En una realización, los permisos 240 pueden incluir, sin limitación de ningún tipo, la capacidad de lectura y escritura y la actualización de la memoria intermedia.
La cola de mensajes en soporte físico (“HMQ”)
La Figura 3 es un diagrama de bloques de una HMQ 300, según una realización. La HMQ 300 comprende una cabecera 310 y una carga útil 330. Aunque la Figura 3 ilustra una realización, otras realizaciones pueden omitir, reordenar, modificar cualquiera de los elementos mostrados y/o añadir a los mismos. La cabecera 310 comprende metadatos relativos al estado de la HMQ 300 y apunta a direcciones particulares dentro de la carga útil 330. La cabecera 310 puede incluir, sin limitación de ningún tipo, el tamaño de la carga útil 330, el número de entadas 332-1 a 332-N (denominadas colectivamente entradas 332) y el tamaño de cada entrada 332-1 a 332-N. La cabecera 310 también puede incluir, sin limitación de ningún tipo, un indicador 311 de habilitación, un indicador 312 de falta de preparación, un indicador 313 de error, un campo reservado 314, un área 315 de destinatario y un indicador 316 de interrupción. La cabecera 310 también puede incluir, sin limitación de ningún tipo, un puntero principal 320 y un puntero 322 de asignación. Por ejemplo, cada una de las HMQ 140 es una instancia de la HMQ 300. Cada uno de los coprocesadores 115 de h Mq y del soporte lógico 130-1 a 130-M, que asignan instancias de la HMQ 300, tiene acceso, respectivamente, a las HMQ 140.
El tamaño de las entradas es el tamaño de cada una de las entradas 332. En una realización, tamaño de la entrada es 64 bytes. Alternativamente, el tamaño de la entrada puede ser una potencia de dos; sin embargo, también pueden ser adecuados otros tamaños. Además, el tamaño de la carga útil y el tamaño de la entrada, almacenados en la cabecera 310, es de cuatro bytes cada uno de ambos. En otra realización, el tamaño de la entrada puede ser cero para indicar que las entradas 332 pueden ser de cualquier tamaño.
El indicador 311 de habilitación designa si una instancia de HMQ 300 está habilitada o inhabilitada. En una realización, el indicador 311 de habilitación es de un byte. Por ejemplo, si el indicador 311 de habilitación está puesto a cero, entonces la HMQ 300 está inhabilitada, pero, si no, la HMQ 300 está habilitada.
El indicador 312 de falta de preparación se copia al primer byte de una entrada particular para indicar que la entrada particular no es válida. En una realización, el indicador 312 de falta de preparación es de un byte. Por ejemplo, si se recibe una instrucción de almacenar un mensaje que supera la longitud de la entrada 332-1, entonces el valor almacenado en el indicador 312 de falta de preparación se copia al primer byte de la entrada 332-1, indicando que la entrada no es válida.
El indicador 313 de error se copia al primer byte de la entrada para indicar que hubo un error en el procesamiento de una instrucción. En una realización, el indicador 313 de errores de un byte. Por ejemplo, si la HMQ 140-1 está llena, el coprocesador 115-1 de HMQ puede poner el indicador 313 de error a 1 para indicar que no puede poner en cola ningún mensaje nuevo.
El campo reservado 314 almacena el desplazamiento entre la cabecera 310 y la carga útil 330. En una realización, el campo reservado 314 es de cuatro bytes y es cero si no hay desplazamiento alguno entre la cabecera 310 y la carga útil 330. Alternativamente, el campo reservado 314 es un puntero a la carga útil 330. Por ejemplo, si la cabecera 310 y la carga útil 330 no fueran contiguas, el campo reservado 314 puede comprender la dirección de la carga útil 330 en la memoria 120-1.
El área 315 de destinatario está disponible para ser usada por un procesador de HMQ en el mismo nodo. En una realización, el área 315 de destinatario es de 32 bytes. Por ejemplo, el coprocesador 115-1 de HMQ puede usar el área 315 de destinatario para reensamblar fragmentos de 16 bytes de un mensaje (presentado con mayor detalle infra).
El indicador 316 de interrupción indica si debería generar una interrupción tras un envío de una entrada sin solicitud realizado con éxito. En una realización, el indicador 316 de interrupción es un solo bit y está puesto a cero para indicar que debería generarse una interrupción tras envío de una entrada sin solicitud realizado con éxito. Por ejemplo, cuando el coprocesador 115-1 de HMQ escribe con éxito la entada 332-1 en la carga útil 330, el coprocesador 115-1 de HMQ envía una interrupción al procesador 110-1.
El puntero principal 320 es un puntero actualizado atómicamente y apunta a la siguiente entrada de la carga útil 330 que está lista para ser leída. En una realización, el puntero principal 320 es un múltiplo de 64 bytes y está desplazado con respecto al final de la cabecera 310. Por ejemplo, si el puntero principal 320 tiene un valor de cero, entonces el puntero principal 320 está apuntando efectivamente a la entrada 332-1 de la carga útil 330.
El puntero 322 de asignación es un puntero actualizado atómicamente. En una realización, el puntero 322 de asignación es un múltiplo de 64 bytes y está desplazado con respecto al final de la cabecera 310. Por ejemplo, si el puntero 322 de asignación tiene un valor de cero, entonces el puntero 322 de asignación está apuntando efectivamente a la entrada 332-1 de la carga útil 330. Si el puntero principal 320 es igual al puntero 322 de asignación, la carga útil 330 se considera vacía. Sin embargo, si el puntero principal 320 menos el puntero 322 de asignación es igual a uno, entonces la carga útil 330 se considera llena.
Además, en otras realizaciones, la cabecera 310 puede incluir otros indicadores o valores necesarios para realizar eficientemente las funciones descritas en el presente documento. Los indicadores y los punteros pueden almacenarse en uno o más bits, campos de bits o bytes.
Según la realización de la Figura 3, la carga útil 330 incluye, sin limitación de ningún tipo, las entradas 332, cada una de las cuales contiene indicadores 334-1 a 334-N de señal (denominados colectivamente “ indicadores 334 de señal”), respectivamente. Cada entrada de las entradas 332 puede ser de un tamaño fijo, y la suma del tamaño de las entradas 332 puede ser igual al tamaño de la carga útil almacenado en la cabecera 310. Por ejemplo, en la realización de la Figura 3, cada una de las entradas 332 tiene una longitud de 64 bytes, y el tamaño de la carga útil 330 es 64 veces N bytes.
Los indicadores 334 de señal pueden usarse para indicar que no se han leído entradas particulares 332; que hubo un error escribiendo la entrada; o que la entrada no está lista. Por ejemplo, la entrada 332-1 en la HMQ 140-1 puede ser el último byte de la entrada 332-1 y puede estar puesta a uno para indicar que hay un mensaje válido almacenado en la entrada 332-1, pero que no ha sido leído. En una realización, los indicadores 334 de señal se almacenan en el último byte en cada una de las entradas 332, respectivamente. En otra realización, los indicadores 334 de señal son el primer byte en cada una de las entradas 332, respectivamente.
Inicialización de la HMQ
La Figura 4 es un diagrama de flujo que ilustra la inicialización de una HMQ, según una realización. Aunque la Figura 4 ilustra etapas ejemplares según una realización, otras realizaciones pueden omitir, reordenar, modificar cualquiera de las etapas mostradas y/o añadir a las mismas. Aunque esta realización describe la inicialización de una HMQ por el soporte lógico para recibir atómicamente mensajes de múltiples nodos en un sistema de múltiples HMQ, otras realizaciones pueden incluir muchas otras etapas en función de la aplicación y del dispositivo.
Como se muestra en la Figura 4, usando la realización ilustrada en la Figura 1 como ejemplo, en la etapa 410, el soporte lógico 130-1 asigna la HMQ 140-1, que es una instancia de la HMQ 300. Por ejemplo, la asignación de la HMQ 140-1 comprende asignar la cabecera 310 y la carga útil 330 de manera contigua. Sin embargo, en otras realizaciones, la cabecera 310 y la carga útil 330 pueden no ser contiguas.
En la etapa 420, el soporte lógico 130-1 inicializa la cabecera 310 de la HMQ 140-1. Por ejemplo, la inicialización de la cabecera 310 puede incluir, sin limitación de ningún tipo, poner el indicador 311 de habilitación a uno, poner el indicador 312 de falta de preparación a uno, poner el indicador 313 de error a cero, poner el campo reservado 314 a uno, asignar 32 bytes para el área 315 de destinatario, poner el indicador 316 de interrupción a cero, poner el puntero principal 320 a cero y configurar el puntero 322 de asignación.
En la etapa 430, el soporte lógico 130-1 crea una instancia de la RKEY 200 de HMQ. La creación de una instancia de la RKEY 200 de HMQ puede incluir, sin limitación de ningún tipo, el soporte lógico 130-1; configurar el tamaño 220 para que sea el tamaño de la carga útil 330, asignado en la etapa 410; designar que la dirección 230 sea la dirección de la carga útil 330. La etapa 430 puede incluir además, sin limitación de ningún tipo, generar un secreto básico; almacenar el secreto básico en el coprocesador 115-1 de HMQ; y generar una clave irreversible 210 en función del secreto básico, del tamaño 220, de la dirección 230 y de los permisos 240.
En la etapa 440, el soporte lógico 130-1 envía una instancia de la RKEY 200 de HMQ, creada a partir de la etapa 430, a todos los nodos 105 del sistema 100 de múltiples HMQ, que autoriza a los nodos 105 a enviar instrucciones al coprocesador 115-1 de HMQ y a almacenar datos en la HMQ 140-1.
En la etapa 450, los indicadores 334 de señal pueden ser configurados para indicar que el coprocesador de HMQ puede escribir en cada entrada respectiva. Por ejemplo, la puesta de los indicadores 334 de señal a cero puede indicar al coprocesador 115-1 de HMQ que el coprocesador de HMQ es libre de empezar a escribir en las respectivas entradas 332 en la HMQ 140-1.
Autenticación de instrucciones en un sistema de múltiples HMQ
La Figura 5 es un diagrama de flujo que ilustra la autenticación de una instrucción, según una realización, usando el sistema 100 de múltiples HMQ como ejemplo.
En la etapa 510 de la Figura 5, el coprocesador 115-1 de HMQ envía al coprocesador 115-M de HMQ una instrucción y una copia de una RKEY de HMQ que el nodo 105-1 recibió del soporte lógico 130-M durante la inicialización de la HMQ 140-M. En la etapa 520, el coprocesador 115-M de HMQ recibe la instrucción y la RKEY de HMQ procedentes de la etapa 510. El coprocesador 115-1 de HMQ puede iniciar el envío de una instrucción. Además, el coprocesador 115-M de HMQ puede ser el coprocesador de HMQ tanto emisor como receptor.
En la etapa 530 de la Figura 5, el coprocesador 115-M de HMQ valida la RKEY de HMQ enviada por el coprocesador 115-1 de HMQ. Dado que la RKEY de HMQ está cifrada en función de la dirección 230, una RKEY de Hm Q puede ser válida si la dirección 230 no ha sido alterada. Por ejemplo, como se ha expuesto anteriormente, el coprocesador 115-M de HMQ tiene una copia del secreto básico, que fue generado por el soporte lógico 130-M durante la inicialización de la HMQ 140-M (etapa 430). El coprocesador 115-M de HMQ descifra la clave irreversible 210 de la RKEY de HMQ. Si la clave irreversible 210 es válida, entonces la dirección 230 es válida, y el coprocesador 115-M de HMQ prosigue a la etapa 540; sin no, el coprocesador 115-M de HMQ prosigue a la etapa 595.
En la etapa 540 de la Figura 5, para impedir que se escriba un mensaje que comience dentro de los límites de la HMQ 140-M asignada, pero termina fuera de los límites de la HMQ 140-M asignada, el coprocesador 115-M de HMQ realiza una comprobación para garantizar que el tamaño del mensaje no supere el tamaño 220 de la RKEY de HMQ. Si el tamaño del mensaje que ha de escribirse supera el tamaño 220 de la RKEY de HMQ, entonces el coprocesador 115-M de HMQ aborta, y prosigue a la etapa 595; si no, el coprocesador de HMQ prosigue a la etapa 590. Como se ha descrito anteriormente, el coprocesador 115-M de HMQ no está limitado por un sistema operativo y no hay restricción en cuanto adónde
puede tener un acceso ilimitado a la memoria en la memoria 120-M puede escribir el coprocesador 115-M de HMQ. Por ejemplo, los coprocesadores 115 de HMQ pueden abortar tal instrucción para impedir una escritura no autorizada en la memoria 120-1.
En la etapa 590 de la Figura 5, el coprocesador 115-M de HMQ pone en cola la entrada 332-1 en función de la instrucción recibida por el procesador 115-M de HMQ. Por ejemplo, el coprocesador 115-M de HMQ puede usar el procedimiento de puesta en cola ilustrado en la Figura 6.
En la etapa 595 de la Figura 5, el coprocesador 115-M de HMQ rechaza la instrucción y devuelve un error al coprocesador 115-1 de HMQ. En otra realización, el coprocesador 115-M de HMQ puede simplemente rechazar la instrucción y no devolver ningún error al coprocesador 115-1 de HMQ.
Puesta de mensajes en cola en la HMQ
Cuando el coprocesador 115-M de HMQ recibe una instrucción para poner en cola de manera atómica un mensaje en la HMQ 140-M, el coprocesador 115-M de HMQ introduce atómicamente el mensaje en la HMQ 140-M, que está designada en la RKEY de HMQ enviada con la instrucción. El mensaje es almacenado atómicamente manteniendo el puntero 322 de asignación atómica.
La Figura 6 es un diagrama de flujo que ilustra una puesta en cola de manera atómica de un mensaje en la HMQ 140-M, según una realización. Aunque la Figura 6 ilustra etapas ejemplares según una realización, otras realizaciones pueden omitir, reordenar, modificar cualquiera de las etapas mostradas y/o añadir a las mismas. Aunque esta realización describe la puesta en cola de manera atómica de un mensaje en una HMQ, otras realizaciones pueden incluir muchas otras etapas en función de la aplicación y del dispositivo.
En la etapa 600 de la Figura 6, continuando con el ejemplo anterior en lo que antecede el coprocesador 115-M de HMQ recibe y autentica una instrucción para poner en cola de manera atómica un mensaje en la HMQ 140-M.
En la etapa 610, el coprocesador 115-M de HMQ determina si la HMQ 140-M está llena. El coprocesador 115-M de HMQ determina que la HMQ 140-M designada está llena en función del puntero principal 320, del puntero 322 de asignación y del tamaño de una entrada en la HMQ 140-M. Si la HMQ 140-M está llena, el coprocesador 115-M de HMQ prosigue a la rama afirmativa, etapa 695, y, si no, el coprocesador 115-M de HMQ prosigue a la rama negativa, etapa 620. En una realización, si el puntero 322 de asignación es igual a la cantidad del puntero principal 320 menos el tamaño de una entrada, entonces la HMQ 140-M está llena. En otra realización, el puntero principal 320 y el puntero 322 de asignación son múltiplos del tamaño de la entrada; así, si el puntero principal 320 menos el puntero 322 de asignación es igual a uno, entonces la HMQ 140-M está llena. Obsérvese que, en la realización descrita en la Figura 3, las entradas 332 son del mismo tamaño fijo; sin embargo, en otras realizaciones, el tamaño de las entradas 332 puede no ser igual o de tamaño fijo.
En la etapa 620, el coprocesador 115-M de HMQ actualiza el puntero 322 de asignación atómica para que apunte a la siguiente entrada de la carga útil 330. Por ejemplo, si el puntero 322 de asignación almacena un múltiplo del tamaño de la entrada, entonces el puntero 322 de asignación simplemente se incrementa en uno, módulo el número de entradas 332 en la carga útil 330.
En la etapa 630, el coprocesador 115-M de HMQ ejecuta la instrucción para poner en cola de manera atómica un mensaje almacenando el mensaje en la entrada 332-1, a la que apunta el puntero 322 de asignación atómica. Por ejemplo, el coprocesador 115-M de HMQ puede inicializar la entrada 332-1 configurando el indicador 334-1 de señal para que indique que la entrada 332-1 no está lista para ser leída. Después de escribir el mensaje en la entrada 332­ 1, el coprocesador 115-M de HMQ puede poner a cero el indicador 224-1 de señal, para indicar que la entrada 332-1 está completa y que el coprocesador 115-M de HMQ ya no escribe en ella. El coprocesador 115-M de HMQ, prosigue entonces a la etapa 640.
En la etapa 640, el coprocesador 115-M de HMQ determina si está puesto el indicador 316 de interrupción. Entonces, si lo está, el coprocesador 115-M de HMQ prosigue a la etapa 650. En la etapa 650, el coprocesador 115-M de HMQ envía una interrupción al sistema operativo en el nodo 105-M que indica que se puesto en cola un nuevo mensaje. Por ejemplo, el coprocesador 115-M de HMQ envía al procesador 110-M una interrupción con el valor almacenado en el indicador 316 de interrupción. Además, el coprocesador 115-M de HMQ puede escribir en la memoria intermedia L3 en el procesador 110-M, indicando que se ha puesto en cola un mensaje.
El coprocesador 115-M de HMQ prosigue a la etapa 690 si, en la etapa 640, la interrupción no está puesta, o después de la etapa 650. En la etapa 690, el coprocesador de HMQ da aviso al remitente — por ejemplo, el coprocesador 115­ 1 de HMQ— de que la instrucción recibida ha sido ejecutada. En otra realización, en la etapa 690, el coprocesador 115-M de HMQ no envía ningún aviso al remitente — por ejemplo, el coprocesador 115-1 de HMQ— , sino que, en vez de ello, el coprocesador 115-M de HMQ meramente aguarda a recibir otra instrucción.
En la etapa 695, el coprocesador 115-M de HMQ no ejecuta una instrucción para almacenar un mensaje en la HMQ 140-M y devuelve un error al remitente —por ejemplo, el coprocesador 115-1 de HMQ—. En otra realización, el coprocesador 115-M de HMQ no devuelve un error al coprocesador 115-1 de HMQ, sino que, en vez de ello, meramente rechaza la instrucción recibida y aguarda a recibir una nueva instrucción. En otra realización adicional, el coprocesador 115-M de HMQ aguarda una cantidad de tiempo particular y vuelve a intentar almacenar la instrucción recibida del coprocesador 115-1 de HMQ, volviendo a la etapa 610.
Extracción de una entrada de una HMQ
La Figura 7 es un diagrama de flujo que ilustra la lectura de un mensaje almacenado en una entrada particular y la extracción de la entrada de la cola, según una realización. Aunque la Figura 7 ilustra etapas ejemplares según una realización, otras realizaciones pueden omitir, reordenar, modificar cualquiera de las etapas mostradas y/o añadir a las mismas. Aunque esta realización describe la lectura de un mensaje almacenado en una entrada particular y la extracción de la entrada de la cola, otras realizaciones pueden incluir muchas otras etapas en función de la aplicación y del dispositivo.
En la etapa 700 de la Figura 7, continuando a partir del ejemplo anterior, el soporte lógico 130-M recibe una interrupción que indica que ha sido puesta en cola una entrada 332-1. En otra realización, el soporte lógico 130-M interroga al coprocesador 115-M de HMQ para determinar si se ha puesto en cola una nueva entrada. Si el coprocesador 115-M de HMQ está vacío, el soporte lógico 130-M puede no intentar leer una entrada.
En la etapa 710 de la Figura 7, el soporte lógico 130-M verifica el indicador 334-1 de señal de la entrada 332-1 a la que apunta el puntero principal 320, para garantizar que el mensaje almacenado en la entrada 332-1 está listo para ser leído. Si la entrada 332-1 está lista para ser leída, entonces el soporte lógico 130-M prosigue a la rama afirmativa, etapa 720; si no, el soporte lógico 130-M prosigue a la rama negativa, etapa 795. En otra realización, la memoria intermedia L3 en el procesador 110-M puede contener la dirección de la entrada lista para ser leída.
En la etapa 720 de la Figura 7, el mensaje en la entrada 332-1 es leído por el soporte lógico 130. El soporte lógico prosigue a continuación a la etapa 790. Por ejemplo, el soporte lógico 130 puede copiar la entrada 332-1 a otro lugar en la memoria, o en un fichero, o en una interfaz de conexión de fichero.
En la etapa 790 de la Figura 7, el soporte lógico 130-M actualiza el puntero principal 320 para que apunte a la siguiente entrada de la carga útil 330. Por ejemplo, si el puntero principal 320 es un múltiplo del tamaño de la entrada, entonces el puntero principal 320 se incrementa en uno, módulo el número de entradas 332 en la carga útil 330. En otra realización, el soporte lógico 130-M actualiza atómicamente el puntero principal 320 a la dirección de la siguiente entrada de la carga útil 330. El soporte lógico 130-M también puede actualizar el indicador 334-1 de señal para que indique que la entrada 332-1 fue leída y está libre.
En la etapa 795, el soporte lógico 130-M puede detener su intento de lectura de la entrada 332-1 a la que apunta el puntero principal 320. En otra realización, el soporte lógico 130-M puede volver a la etapa 710. Alternativamente, el soporte lógico 130-M puede aguardar una cantidad de tiempo particular y volver a la etapa 710.
Sincronización de los mensajes recibidos
Las instrucciones enviadas a un coprocesador de HMQ pueden ser sincronizadas. Por ejemplo, el coprocesador 115-M de HMQ puede notificar al coprocesador 115-1 de HMQ que la instrucción que el coprocesador 115-1 de HMQ envió se ejecutó con éxito, y puede terminar la conexión entre los coprocesadores 115-1 y 115-M de HMQ una vez que la instrucción ha sido ejecutada.
Las instrucciones pueden ser procesadas en serie por el coprocesador 115-M de HMQ. Por ejemplo, las instrucciones que se reciben mientras el coprocesador 115-M de HMQ está ocupado pueden ser puestas en cola para su ejecución subsiguiente. Por ejemplo, el coprocesador de HMQ puede tener un indicador de serie, que, si está puesto a uno, ejecute las instrucciones en serie.
Las instrucciones también pueden ser obligadas a ser ejecutadas de forma condicional tras la finalización de una instrucción previa con éxito. En consecuencia, cada instrucción puede tener un indicador condicional. Por ejemplo, si una segunda instrucción es condicional con respecto a una primera instrucción, el indicador condicional de la segunda instrucción puede ser configurado de modo que la segunda instrucción pueda ser ejecutada si la primera instrucción se ejecuta sin errores.
Reensamblaje de mensajes
Para evitar la congestión del sistema de múltiples HMQ, se puede segmentar un mensaje asociado con una instrucción. El coprocesador receptor de HMQ puede reensamblar el mensaje antes de ejecutar la instrucción. Obsérvese que el receptor puede recibir los fragmentos en un orden diferente de aquel en el que se enviaron los fragmentos. Así, el coprocesador de HMQ puede no meramente reensamblar los fragmentos para una instrucción y un mensaje particulares, sino que también puede ordenar los fragmentos antes del reensamblaje. En una realización, la porción del mensaje puede ser segmentada en fragmentos. Alternativamente, tanto la instrucción como el mensaje pueden ser segmentados en fragmentos.
Por ejemplo, usando la realización ilustrada en la Figura 1, el coprocesador 115-1 de HMQ puede enviar una instrucción al coprocesador 115-M de HMQ con un mensaje que tiene 128 bytes. En vez de enviar todo el mensaje de 128 bytes de una sola vez, el coprocesador 115-1 de HMQ segmenta el mensaje en fragmentos de 16 bytes, asigna a cada fragmento un número, y envía cada fragmento numerado al coprocesador 115-M de HMQ. El coprocesador 115-M de HMQ reensambla los fragmentos numerados en orden en función del número de los fragmentos, y luego ejecuta la instrucción recibida y almacena el mensaje reensamblado acompañante.
Notificación de errores
Un coprocesador receptor de HMQ puede estar configurado para generar errores particulares, o devolver errores particulares a un coprocesador remitente de HMQ. Por ejemplo, si se produce un error mientras el coprocesador 115-M de HMQ está procesando una instrucción enviada desde el coprocesador 115-1 de HMQ, entonces el coprocesador 115-M de HMQ puede generar uno o más errores particulares, y también puede devolver los uno o más errores al coprocesador 115-1 de HMQ.
Un coprocesador de HMQ puede generar errores incluyendo, sin limitación alguna, la validación de la RKEY de HMQ; una cola que cruza un límite de página o una región de la RKEY de HMQ; el tamaño de un mensaje no es igual al tamaño de la entrada especificado en la cabecera 310; el indicador 311 de habilitación está puesto a cero o no coincide con un valor previsto; el tamaño del mensaje no es una potencia de dos; el tamaño de la carga útil 330 no es un múltiplo del tamaño del mensaje; el puntero 322 de asignación no se encuentra en el intervalo de cero a número de entradas 332; o la HMQ 300, o específicamente la carga útil 330, está llena. Además, si se genera un error mientras se intenta escribir en la entrada 332-1, puede escribir en el indicador 334-1 de señal un valor que represente un error particular. Además, también se puede poner el indicador 313 de error si se genera un error.
Descripción general del soporte físico
Según una realización, las técnicas descritas en el presente documento son implementadas por uno o más dispositivos informáticos de uso especial. Los dispositivos informáticos de uso especial pueden estar cableados para llevar a cabo las técnicas, o pueden incluir digital dispositivos electrónicos tales como uno o más circuitos integrados para aplicaciones específicas (ASIC) o matrices de puertas programables in situ (FPGA) que están programados de forma persistente para llevar a cabo las técnicas, o pueden incluir uno o más procesadores de soporte físico de uso general programados para llevar a cabo las técnicas de acuerdo con instrucciones de programa en soporte lógico inalterable, memoria, otro almacenamiento o una combinación de los mismos. Tales dispositivos informáticos de uso especial también pueden combinar lógica cableada hecha a medida, ASIC o FPGA con programación a medida para lograr las técnicas. Los dispositivos informáticos de uso especial pueden ser sistemas de ordenadores de sobremesa, sistemas de ordenadores portátiles, dispositivos de mano, dispositivos de red o cualquier otro dispositivo que incorpore lógica cableada y/o programada para implementar las técnicas.
Por ejemplo, la Figura 8 es un diagrama de bloques que ilustra un sistema informático 800 en el que puede implementarse una realización de la invención. El sistema informático 800 incluye un bus 802 u otro mecanismo de comunicación para comunicar información, y un procesador 804 de soporte físico de acoplado con el bus 802 para procesar información. El procesador 804 de soporte físico puede ser, por ejemplo, un microprocesador de uso general.
El sistema informático 800 también incluye una memoria principal 806, tal como una memoria de acceso aleatorio (RAM, por sus siglas en inglés) u otro dispositivo de almacenamiento dinámico, acoplado al bus 802 para almacenar información e instrucciones que ha de ejecutar el procesador 804. La memoria principal 806 también puede ser usada para almacenar variables temporales u otra información intermedia durante la ejecución de las instrucciones que han de ser ejecutadas por el procesador 804. Tales instrucciones, cuando están almacenadas en un soporte de almacenamiento no transitorio accesible al procesador 804, convierten el sistema informático 800 en una máquina de uso especial que está hecha a medida para llevar a cabo las operaciones especificadas en las instrucciones.
El sistema informático 800 incluye, además, una memoria 808 de solo lectura (ROM, por sus siglas en inglés) u otro dispositivo de almacenamiento estático acoplado al bus 802 para almacenar información estática e instrucciones para el procesador 804. Se proporciona un dispositivo 810 de almacenamiento, tal como un disco magnético, un disco óptico o una unidad de estado sólido y se lo acopla al bus 802 para almacenar información e instrucciones.
El sistema informático 800 puede estar acoplado a través del bus 802 a un dispositivo 812 de visualización, tal como un tubo de rayos catódicos (CRT, por sus siglas en inglés), para mostrar información un usuario del ordenador. Hay un dispositivo 814 de entrada, que incluye claves alfanuméricas y otras, acoplado al bus 802 para comunicar información e indicar selecciones al procesador 804. Otro tipo de dispositivo de entrada de usuario es un control 816 del cursor, tal como un ratón, una bola de mando o teclas de dirección del cursor para comunicar información de dirección e indicar selecciones al procesador 804 y para controlar el movimiento del cursor en el dispositivo 812 de visualización. Este dispositivo de entrada normalmente tiene dos grados de libertad en dos ejes: un primer eje (por ejemplo, x) y un segundo eje (por ejemplo, y), que permite al dispositivo especificar posiciones en un plano.
El sistema informático 800 puede implementar las técnicas descritas en el presente documento usando lógica cableada hecha a medida, uno o más ASIC o FPGA, soporte lógico inalterable y/o lógica de programa que, en combinación con el sistema informático, hacen o programan el sistema informático 800 sea una máquina de uso especial. Según una realización, las técnicas del presente documento son efectuadas por el sistema informático 800 en respuesta a la ejecución por parte del procesador 804 de una o más secuencias de una o más instrucciones contenidas en la memoria principal 806. Tales instrucciones pueden ser leídas y puestas en la memoria principal 806 a partir de otro soporte de almacenamiento, tal como el dispositivo 810 de almacenamiento. La ejecución de las secuencias de instrucciones contenidas en la memoria principal 806 hace que el procesador 804 realice las etapas de proceso descritas en el presente documento. En realizaciones alternativas, pueden usarse circuitos cableados en lugar de instrucciones de soporte lógico o en combinación con las mismas.
La expresión “soportes de almacenamiento” usada en el presente documento se refiere a cualquier soporte no transitorio que almacene datos y/o instrucciones que hagan que una máquina opere de una forma específica. Tales soportes de almacenamiento comprenden soportes no volátiles y/o soportes volátiles. Los soportes no volátiles incluyen, por ejemplo, discos ópticos, discos magnéticos o unidades de estado sólido, como el dispositivo 810 de almacenamiento. Los soportes volátiles incluyen memoria dinámica, como la memoria principal 806. Formas comunes de soportes de almacenamiento incluyen, por ejemplo, un disquete, un disco flexible, un disco duro, una unidad de estado sólido, una cinta magnética o cualquier otro soporte magnético de almacenamiento de datos, un CD-ROM, cualquier otro soporte óptico de almacenamiento de datos, cualquier soporte físico con patrones de agujeros, una RAM, una PROM y una EPROM, una FLASH-EPROM, NVRAM y cualquier otro chip o cartucho de memoria.
Los soportes de almacenamiento son distintos de los soportes de transmisión, pero pueden ser usados en conjunción con los mismos. Los soportes de transmisión participan en la transferencia de información entre soportes de almacenamiento. Por ejemplo, los soportes de transmisión incluyen cables coaxiales, hilo de cobre y fibra óptica, incluyendo los hilos que comprenden el bus 802. Los soportes de transmisión también pueden adoptar la forma de ondas acústicas o lumínicas, tales como las generadas durante las comunicaciones de datos por ondas de radio e infrarrojos.
Puede haber implicadas formas diversas de soportes para el transporte de una o más secuencias de una o más instrucciones al procesador 804 para su ejecución. Por ejemplo, las instrucciones pueden estar inicialmente transportadas en un disco magnético o una unidad de estado sólido de un ordenador remoto. El ordenador remoto puede cargar las instrucciones en su memoria dinámica y enviar las instrucciones por una línea telefónica usando un módem. Un módem local al sistema informático 800 puede recibir los datos por la línea telefónica y usar un transmisor infrarrojo para convertir los datos en una señal infrarroja. Un detector infrarrojo puede recibir los datos transportados en la señal infrarroja y circuitos apropiados pueden poner los datos en el bus 802. El bus 802 transporta los datos a la memoria principal 806, desde la cual el procesador 804 recupera y ejecuta las instrucciones. Las instrucciones recibidas por la memoria principal 806 pueden almacenarse opcionalmente en el dispositivo 810 de almacenamiento ya sea antes o después de su ejecución por el procesador 804.
El sistema informático 800 también incluya una interfaz 818 de comunicaciones acoplada al bus 802. La interfaz 818 de comunicaciones proporciona un acoplamiento bidireccional de comunicaciones de datos con un enlace 820 de red que está conectado a una red local 822. Por ejemplo, la interfaz 818 de comunicaciones puede ser una tarjeta de red digital de servicios integrados (RDSI), un módem de cable, un módem de satélite o un módem para proporcionar una conexión de comunicación de datos a un correspondiente tipo de línea telefónica. Como ejemplo adicional, la interfaz 818 de comunicaciones puede ser una tarjeta de red de área local (LAN, por sus siglas en inglés) para proporcionar una conexión de comunicación de datos a una LAN compatible. También pueden implementarse enlaces inalámbricos. En cualquier implementación de ese tipo, la interfaz 818 de comunicaciones envía y recibe señales eléctricas, electromagnéticas u ópticas que transportan flujos de datos digitales que representan diversos tipos de información.
El enlace 820 de red normalmente proporciona a otros dispositivos de datos una comunicación de datos a través de una o más redes. Por ejemplo, el enlace 820 de red puede proporcionar una conexión a través de la red local 822 a un ordenador central 824 o a equipos de red operados por un proveedor 826 de servicios de Internet (ISP, por sus siglas en inglés). El ISP 826, a su vez, proporciona servicios de comunicaciones de datos a través de la red mundial de comunicaciones de paquetes de datos ahora comúnmente denominada “Internet” 828. Tanto la red local 822 como Internet 828 usan señales eléctricas, electromagnéticas u ópticas que transportan flujos de datos digitales. Las señales a través de las diversas redes y las señales en el enlace 820 de red y a través de la interfaz 818 de comunicaciones, que transportan los datos digitales hacia y desde el sistema informático 800, son ejemplos de soportes de transmisión.
El sistema informático 800 puede enviar mensajes y recibir datos, incluyendo código de programa, a través de la red o las redes, del enlace 820 de red y de la interfaz 818 de comunicaciones. En el ejemplo de Internet, un servidor 830 podría transmitir un código solicitado para un programa de aplicación a través de Internet 828, de un ISP 826, de la red local 822 y de la interfaz 818 de comunicaciones.
El código recibido puede ser ejecutado por el procesador 804 cuando es recibido, y/o ser almacenado en el dispositivo 810 de almacenamiento y otro almacenamiento no volátil para su ejecución posterior.
En la memoria descriptiva precedente, se han descrito realizaciones de la invención con referencia a numerosos detalles específicos que pueden variar de una implementación a otra. En consecuencia, la memoria descriptiva y los dibujos han de ser considerados en un sentido ilustrativo, no restrictivo. El único indicador exclusivo del alcance de la invención, y que los solicitantes pretenden que sea el alcance de la invención, es el alcance literal y equivalente del pliego de reivindicaciones que emanan de esta solicitud, en la forma específica en la que se presentan tales reivindicaciones, incluyendo cualquier corrección subsiguiente.

Claims (15)

REIVINDICACIONES
1. Un dispositivo para facilitar la comunicación entre una pluralidad de nodos (105-1, 105-M) de un grupo de cómputo, comprendiendo el dispositivo un coprocesador (115-M) de un nodo particular (105-M) de dicha pluralidad de nodos (105-1, 105-M), comprendiendo el coprocesador (115-M):
un circuito de puesta en cola;
estando acoplado dicho circuito de puesta en cola a una memoria (120-M) de dicho nodo particular (105-M);
siendo dicho circuito de puesta en cola un circuito cableado o un ASIC programado de manera persistente o una FPGA programada de manera persistente configurado para:
recibir (520), desde otro nodo (105-1) de dicha pluralidad de nodos (105-1, 105-M), una instrucción de puesta en cola que comprende una clave con un código (210) de clave irreversible cifrada derivado de un secreto básico, en donde:
la clave identifica una cola particular (300, 140-M) en dicha memoria (120-M), habiendo sido creada la clave previamente en dicho nodo particular (105-M) y enviada desde dicho nodo particular (105-M) a dicho otro nodo (105­ 1), y
la instrucción de puesta en cola incluye una carga útil que ha de almacenarse en la cola particular (300, 140-M);
autenticar (530) la instrucción de puesta en cola, comprendiendo el desciframiento del código (210) de clave irreversible cifrada el uso de dicho secreto básico almacenado en dicho coprocesador (115-M) y la determinación de si el código (210) de clave irreversible es válido; y
poner en cola (590) una entrada (332-1, 332-2) de cola, en la que se almacena dicha carga útil, en la cola particular (300, 140-M) identificada por la instrucción recibida de puesta en cola en respuesta a la recepción (520) de dicha instrucción de puesta en cola si la instrucción de puesta en cola fue autenticada con éxito.
2. El dispositivo de la Reivindicación 1, incluyendo dicho dispositivo un chip de circuitos integrados que incluye, separado de dicho circuito de puesta en cola, un procesador (110-M), estando acoplado dicho procesador (110-M) a dicho circuito de puesta en cola.
3. El dispositivo de la Reivindicación 1 o la Reivindicación 2 en donde dicho circuito de puesta en cola está configurado, además, para ejecutar en serie instrucciones de puesta en cola.
4. El dispositivo de cualquiera de las Reivindicaciones 1-3 en donde dicha carga útil incluida en dicha instrucción de puesta en cola se recibe en una pluralidad de fragmentos, y estando configurado además dicho circuito de puesta en cola para reensamblar dicha pluralidad de fragmentos en respuesta a la recepción de dicha instrucción de puesta en cola y dicha pluralidad de fragmentos.
5. El dispositivo de la Reivindicación 4 en donde dicha pluralidad de fragmentos se recibió en un orden diferente en el que se envió dicha pluralidad de fragmentos.
6. El dispositivo de cualquiera de las Reivindicaciones 1-5 en donde un código válido (210) de clave irreversible indica que la identificación de la cola particular (300, 140-M) por la clave es válida.
7. Un procedimiento para facilitar la comunicación entre una pluralidad de nodos (105-1, 105-M) de un grupo de cómputo, en donde un nodo particular (105-M) de dicha pluralidad de nodos (105-1, 105-M) comprende un coprocesador (115-M), incluyendo el procedimiento:
transmitir, desde otro nodo (105-1) de dicha pluralidad de nodos (105-1, 105-M), una instrucción particular de puesta en cola a un circuito de puesta en cola de dicho coprocesador (115-M) de dicho nodo particular (105-M), la instrucción particular de puesta en cola, que es una instrucción de puesta en cola de una entrada (332-1, 332-N) de cola en una cola particular (300, 140-M) almacenada en una memoria (120-M) de dicho nodo particular (105-M), estando acoplada dicha memoria (120-M) a dicho circuito de puesta en cola, identificando dicha instrucción particular de puesta en cola dicha cola particular (300, 140-M);
en donde dicho circuito de puesta en cola es un circuito cableado o un ASIC programado de manera persistente o una FPGA programada de manera persistente configurado para:
recibir (520), desde dicho otro nodo (105-1) de dicha pluralidad de nodos (105-1, 105-M), dicha instrucción particular de puesta en cola que comprende una clave con un código (210) de clave irreversible cifrada derivado de un secreto básico, en donde:
la clave identifica una cola particular (300, 140-M) en dicha memoria (120-M), habiendo sido creada la clave previamente en dicho nodo particular (105-M) y enviada desde dicho nodo particular (105-M) a dicho otro nodo (105­ 1), y
la instrucción de puesta en cola incluye una carga útil que ha de almacenarse en la cola particular (300, 140-M);
autenticar (530) la instrucción de puesta en cola, comprendiendo el desciframiento del código (210) de clave irreversible cifrada el uso de dicho secreto básico almacenado en dicho coprocesador (115-M) y la determinación de si el código (210) de clave irreversible es válido; y
en respuesta a la recepción de la instrucción de puesta en cola, poner en cola (590) una entrada de cola, en la que se almacena dicha carga útil, en la cola particular (300, 140-M) identificada por la instrucción recibida de puesta en cola si la instrucción de puesta en cola fue autenticada con éxito.
8. El procedimiento de la Reivindicación 7 en donde dicho circuito de puesta en cola está situado en un chip de circuitos integrados que incluye, separado de dicho circuito de puesta en cola, un procesador (110-M), estando acoplado dicho procesador (110-M) a dicho circuito de puesta en cola.
9. El procedimiento de la Reivindicación 7 o la Reivindicación 8 que, además, comprende la recepción (700) de una interrupción en respuesta a la puesta en cola de dicha entrada (332-1, 332-N) de cola.
10. El procedimiento de cualquiera de las Reivindicaciones 7-9 que, además, comprende extraer una entrada (332-1, 332-N) de cola de dicha cola particular (300, 140-M).
11. El procedimiento de la Reivindicación 10 en donde extraer una entrada (332-1, 332-N) de cola de dicha cola particular (300, 140-M) comprende establecer un valor (334-1, 334-N) en dicha entrada (332-1, 332-N) de cola para indicar que la entrada (332-1, 332-N) de cola ha sido leída.
12. El procedimiento de la Reivindicación 10 en donde extraer una entrada (332-1, 332-N) de cola de dicha cola (300, 140-M) comprende establecer atómicamente (790) un puntero para que apunte a una entrada (332-1, 332-N) de cola que no ha sido leída.
13. El procedimiento de la Reivindicación 10 en donde extraer una entrada (332-1, 332-N) de cola de dicha cola particular (300, 140-M) comprende copiar dicha entrada (332-1, 332-N) de cola en memoria (120-M).
14. El procedimiento de cualquiera de las Reivindicaciones 7-13 en donde un código válido (210) de clave irreversible indica que la identificación de la cola particular (300, 140-M) por la clave es válida.
15. Un sistema que comprende medios para llevar a cabo el procedimiento mencionado en una cualquiera de las Reivindicaciones 7-14.
ES13737064T 2012-10-02 2013-06-27 Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo Active ES2880268T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261709142P 2012-10-02 2012-10-02
US13/778,307 US9158810B2 (en) 2012-10-02 2013-02-27 Hardware message queues for intra-cluster communication
PCT/US2013/048110 WO2014055145A1 (en) 2012-10-02 2013-06-27 Hardware message queues for intra-cluster communication

Publications (1)

Publication Number Publication Date
ES2880268T3 true ES2880268T3 (es) 2021-11-24

Family

ID=50386190

Family Applications (1)

Application Number Title Priority Date Filing Date
ES13737064T Active ES2880268T3 (es) 2012-10-02 2013-06-27 Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo

Country Status (6)

Country Link
US (10) US9292569B2 (es)
EP (6) EP2904513B1 (es)
JP (1) JP6320393B2 (es)
CN (7) CN104662538B (es)
ES (1) ES2880268T3 (es)
WO (6) WO2014055137A1 (es)

Families Citing this family (139)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9021224B2 (en) * 2011-06-30 2015-04-28 Hitachi, Ltd. Method and apparatus for enhanced computer security
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
EP2788901A1 (en) 2011-12-08 2014-10-15 Oracle International Corporation Techniques for maintaining column vectors of relational data within volatile memory
US9342314B2 (en) 2011-12-08 2016-05-17 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
US10157060B2 (en) 2011-12-29 2018-12-18 Intel Corporation Method, device and system for control signaling in a data path module of a data stream processing engine
US9087095B2 (en) * 2012-06-21 2015-07-21 International Business Machines Corporation Processing columns in a database accelerator while preserving row-based architecture
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
US10102028B2 (en) 2013-03-12 2018-10-16 Sas Institute Inc. Delivery acknowledgment in event stream processing
US9679084B2 (en) 2013-03-14 2017-06-13 Oracle International Corporation Memory sharing across distributed nodes
EP2973139B1 (en) * 2013-03-15 2020-04-22 Intel Corporation Security co-processor boot performance
US10108539B2 (en) 2013-06-13 2018-10-23 International Business Machines Corporation Allocation of distributed data structures
US20160210237A1 (en) * 2013-07-30 2016-07-21 Nec Corporation Storage device, data access method, and program recording medium
US9836519B2 (en) 2013-09-20 2017-12-05 Oracle International Corporation Densely grouping dimensional data
US9990398B2 (en) * 2013-09-20 2018-06-05 Oracle International Corporation Inferring dimensional metadata from content of a query
US9740718B2 (en) 2013-09-20 2017-08-22 Oracle International Corporation Aggregating dimensional data using dense containers
US9378232B2 (en) 2013-09-21 2016-06-28 Oracle International Corporation Framework for numa affinitized parallel query on in-memory objects within the RDBMS
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
WO2015065449A1 (en) * 2013-10-31 2015-05-07 Hewlett-Packard Development Company, L.P. Cache controller for non-volatile memory
US20150161678A1 (en) * 2013-12-05 2015-06-11 Turn Inc. Dynamic ordering of online advertisement software steps
US9313029B2 (en) * 2013-12-15 2016-04-12 Cavium, Inc. Virtualized network interface for remote direct memory access over converged ethernet
US9306916B2 (en) * 2013-12-25 2016-04-05 Cavium, Inc. System and a method for a remote direct memory access over converged ethernet
US9898414B2 (en) 2014-03-28 2018-02-20 Oracle International Corporation Memory corruption detection support for distributed shared memory applications
DE102014207476A1 (de) * 2014-04-17 2015-10-22 Robert Bosch Gmbh Verfahren zur Auswahl einer von mehreren Warteschlangen
US9715345B2 (en) * 2014-04-25 2017-07-25 Micron Technology, Inc. Apparatuses and methods for memory management
US10838893B2 (en) * 2014-05-30 2020-11-17 Apple Inc. Methods for mitigating system interrupts for an electronic device
US9122651B1 (en) 2014-06-06 2015-09-01 Sas Institute Inc. Computer system to support failover in an event stream processing system
US9356986B2 (en) * 2014-08-08 2016-05-31 Sas Institute Inc. Distributed stream processing
WO2016064397A1 (en) * 2014-10-23 2016-04-28 Hewlett Packard Enterprise Development Lp Admissions control of a device
WO2016068942A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Encryption for transactions in a memory fabric
WO2016068941A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Secure transactions in a memory fabric
US9678812B2 (en) 2014-12-22 2017-06-13 International Business Machines Corporation Addressing for inter-thread push communication
US9766890B2 (en) * 2014-12-23 2017-09-19 International Business Machines Corporation Non-serialized push instruction for pushing a message payload from a sending thread to a receiving thread
US10255336B2 (en) 2015-05-07 2019-04-09 Datometry, Inc. Method and system for transparent interoperability between applications and data management systems
US9749319B2 (en) * 2015-05-20 2017-08-29 Google Inc. Address validation using signatures
US11449452B2 (en) 2015-05-21 2022-09-20 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
CN113641627A (zh) * 2015-05-21 2021-11-12 高盛有限责任公司 通用并行计算架构
US10025823B2 (en) 2015-05-29 2018-07-17 Oracle International Corporation Techniques for evaluating query predicates during in-memory table scans
US10594779B2 (en) 2015-08-27 2020-03-17 Datometry, Inc. Method and system for workload management for data management systems
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
JP6515771B2 (ja) * 2015-10-07 2019-05-22 富士通コネクテッドテクノロジーズ株式会社 並列処理装置及び並列処理方法
US9823871B2 (en) 2015-10-09 2017-11-21 Oracle International Corporation Performance of coprocessor assisted memset() through heterogeneous computing
US10678792B2 (en) 2015-10-23 2020-06-09 Oracle International Corporation Parallel execution of queries with a recursive clause
US10642831B2 (en) 2015-10-23 2020-05-05 Oracle International Corporation Static data caching for queries with a clause that requires multiple iterations to execute
US10783142B2 (en) 2015-10-23 2020-09-22 Oracle International Corporation Efficient data retrieval in staged use of in-memory cursor duration temporary tables
CN105426271B (zh) * 2015-12-22 2018-09-21 华为技术有限公司 对分布式存储系统的锁管理的方法和装置
US10146681B2 (en) * 2015-12-24 2018-12-04 Intel Corporation Non-uniform memory access latency adaptations to achieve bandwidth quality of service
CN105677812A (zh) * 2015-12-31 2016-06-15 华为技术有限公司 一种数据查询方法及数据查询装置
US10402425B2 (en) 2016-03-18 2019-09-03 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors
US10061832B2 (en) 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US10055358B2 (en) 2016-03-18 2018-08-21 Oracle International Corporation Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10853125B2 (en) * 2016-08-19 2020-12-01 Oracle International Corporation Resource efficient acceleration of datastream analytics processing using an analytics accelerator
CN106354480B (zh) * 2016-08-24 2019-01-29 长沙中部芯空微电子研究所有限公司 一种mpp型异构高速mcu系统
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10558659B2 (en) 2016-09-16 2020-02-11 Oracle International Corporation Techniques for dictionary based join and aggregation
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10606487B2 (en) * 2017-03-17 2020-03-31 International Business Machines Corporation Partitioned memory with locally aggregated copy pools
US12105716B2 (en) * 2017-06-23 2024-10-01 Xilinx, Inc. Parallel compute offload to database accelerator
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
CN107835203B (zh) * 2017-08-09 2020-07-10 平安壹钱包电子商务有限公司 消息分组投递的方法、装置、存储介质及终端
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US10445098B2 (en) * 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10664396B2 (en) * 2017-10-04 2020-05-26 Intel Corporation Systems, methods and apparatus for fabric delta merge operations to enhance NVMeoF stream writes
CN107766526B (zh) * 2017-10-26 2020-04-28 中国人民银行清算总中心 数据库访问方法、装置及系统
CN107886692B (zh) * 2017-10-30 2020-08-25 皖西学院 一种生物工程用传感器LoRa无线网络通讯系统
US10452547B2 (en) 2017-12-29 2019-10-22 Oracle International Corporation Fault-tolerant cache coherence over a lossy network
US10467139B2 (en) 2017-12-29 2019-11-05 Oracle International Corporation Fault-tolerant cache coherence over a lossy network
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
CN110110004B (zh) * 2018-01-30 2023-05-30 腾讯科技(深圳)有限公司 一种数据操作方法、装置和存储介质
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US10649777B2 (en) * 2018-05-14 2020-05-12 International Business Machines Corporation Hardware-based data prefetching based on loop-unrolled instructions
CN108776934B (zh) * 2018-05-15 2022-06-07 中国平安人寿保险股份有限公司 分布式数据计算方法、装置、计算机设备及可读存储介质
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10459866B1 (en) 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
EP3846026A4 (en) * 2018-09-21 2021-11-03 Huawei Technologies Co., Ltd. DATA EXTRACTION PROCESS AND DEVICE
CN111399905B (zh) * 2019-01-02 2022-08-16 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
JP7146611B2 (ja) * 2018-12-18 2022-10-04 株式会社日立製作所 カラムストアデータベースシステム及びデータベース処理高速化方法
US11294869B1 (en) * 2018-12-19 2022-04-05 Datometry, Inc. Expressing complexity of migration to a database candidate
US11204898B1 (en) 2018-12-19 2021-12-21 Datometry, Inc. Reconstructing database sessions from a query log
US11403291B1 (en) 2018-12-20 2022-08-02 Datometry, Inc. Static emulation of database queries for migration to a different database
CN113168147B (zh) * 2018-12-29 2024-07-09 阿里巴巴集团控股有限公司 使用硬件加速高效地扫描数据库的系统和方法
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US11487674B2 (en) * 2019-04-17 2022-11-01 Rankin Labs, Llc Virtual memory pool within a network which is accessible from multiple platforms
CN110113395B (zh) * 2019-04-19 2021-11-09 新华三云计算技术有限公司 共享文件系统维护方法及装置
US11372773B2 (en) 2019-05-28 2022-06-28 Rankin Labs, Llc Supporting a virtual memory area at a remote computing machine
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US20220245150A1 (en) * 2019-07-31 2022-08-04 Sindice Limited T/A Siren Semantic caching of semi-join operators in shared-nothing and log-structured databases
US11222018B2 (en) 2019-09-09 2022-01-11 Oracle International Corporation Cache conscious techniques for generation of quasi-dense grouping codes of compressed columnar data in relational database systems
US12118041B2 (en) * 2019-10-13 2024-10-15 Thoughtspot, Inc. Query execution on compressed in-memory data
CN111061760B (zh) * 2019-10-30 2020-12-15 中科驭数(北京)科技有限公司 关系型数据库管理系统中的窗口聚合方法、查询方法及装置
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US12086080B2 (en) 2020-09-26 2024-09-10 Intel Corporation Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
US11755355B2 (en) 2020-11-25 2023-09-12 Nxp Usa, Inc. Systems and methods for assigning domain identifiers to remote peripheral devices using a hypervisor
US20220166762A1 (en) * 2020-11-25 2022-05-26 Microsoft Technology Licensing, Llc Integrated circuit for obtaining enhanced privileges for a network-based resource and performing actions in accordance therewith
JP7777138B2 (ja) 2020-12-31 2025-11-27 アナログ ディヴァイスィズ インク エッジデバイスのための鍵無効化
US11741073B2 (en) 2021-06-01 2023-08-29 Alibaba Singapore Holding Private Limited Granularly timestamped concurrency control for key-value store
US11829291B2 (en) 2021-06-01 2023-11-28 Alibaba Singapore Holding Private Limited Garbage collection of tree structure with page mappings
US12373440B2 (en) * 2021-06-01 2025-07-29 Alibaba Innovation Private Limited High-performance key-value store
US11755427B2 (en) 2021-06-01 2023-09-12 Alibaba Singapore Holding Private Limited Fast recovery and replication of key-value stores
CN113342480B (zh) * 2021-06-23 2022-02-22 海光信息技术股份有限公司 一种事务处理系统、事务处理方法及主机系统
CN113420033B (zh) * 2021-08-17 2021-12-07 北京奥星贝斯科技有限公司 分布式数据库的表数据查询方法、表数据查询装置及系统
US12056048B2 (en) 2021-11-11 2024-08-06 Samsung Electronics Co., Ltd. System and method for management of electronic memory
US12462070B2 (en) * 2021-12-28 2025-11-04 Ati Technologies Ulc Software assisted acceleration in cryptographic queue processing
US11927634B2 (en) 2022-04-01 2024-03-12 Samsung Electronics Co., Ltd Systems and methods for database scan acceleration
US20230359624A1 (en) * 2022-05-09 2023-11-09 Samsung Electronics Co., Ltd. Systems and methods for processing database queries via a computational storage device
US12554507B2 (en) 2023-04-11 2026-02-17 Samsung Electronics Co., Ltd. Systems and methods for processing formatted data in computational storage
US12353916B2 (en) 2023-04-11 2025-07-08 Samsung Electronics Co., Ltd. Systems and methods for processing functions in computational storage
US20250291940A1 (en) * 2024-03-15 2025-09-18 Intel Corporation Apparatus and method for trusted access to expansion memory by multiple potentially heterogeneous compute nodes

Family Cites Families (138)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE34052E (en) 1984-05-31 1992-09-01 International Business Machines Corporation Data processing system with CPU register to register data transfers overlapped with data transfer to and from main storage
US4817140A (en) 1986-11-05 1989-03-28 International Business Machines Corp. Software protection system using a single-key cryptosystem, a hardware-based authorization system and a secure coprocessor
US5133053A (en) 1987-02-13 1992-07-21 International Business Machines Corporation Interprocess communication queue location transparency
US5604899A (en) 1990-05-21 1997-02-18 Financial Systems Technology Pty. Ltd. Data relationships processor with unlimited expansion capability
US5423010A (en) 1992-01-24 1995-06-06 C-Cube Microsystems Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words
US5483624A (en) * 1992-03-27 1996-01-09 Monarch Marking Systems, Inc. Programmable hand held labeler
JPH0619785A (ja) * 1992-03-27 1994-01-28 Matsushita Electric Ind Co Ltd 分散共有仮想メモリーとその構成方法
DE69424597T2 (de) 1993-06-17 2001-03-01 Sun Microsystems, Inc. Erweiterbares Dateiensystem
US5581705A (en) * 1993-12-13 1996-12-03 Cray Research, Inc. Messaging facility with hardware tail pointer and software implemented head pointer message queue for distributed memory massively parallel processing system
US5564056A (en) * 1994-03-01 1996-10-08 Intel Corporation Method and apparatus for zero extension and bit shifting to preserve register parameters in a microprocessor utilizing register renaming
DE19515020A1 (de) * 1994-07-01 1996-01-04 Hewlett Packard Co Verfahren und Vorrichtung zum Optimieren von Abfragen mit Gruppieren-nach-Operatoren
JP3518034B2 (ja) 1995-03-30 2004-04-12 三菱電機株式会社 ソート方法並びにソート処理装置並びにデータ処理装置
US5684977A (en) 1995-03-31 1997-11-04 Sun Microsystems, Inc. Writeback cancellation processing system for use in a packet switched cache coherent multiprocessor system
CA2146171C (en) 1995-04-03 2000-01-11 Bernhard Schiefer Method for estimating cardinalities for query processing in a relational database management system
KR0175499B1 (ko) * 1996-09-11 1999-04-01 양승택 다중태그 구조의 계층 상호연결망에서의 브로드캐스트 전송방법
JPH10154160A (ja) * 1996-09-25 1998-06-09 Sharp Corp 並列データ検索処理装置
US6148377A (en) 1996-11-22 2000-11-14 Mangosoft Corporation Shared memory computer networks
JPH10232788A (ja) * 1996-12-17 1998-09-02 Fujitsu Ltd 信号処理装置及びソフトウェア
US6151688A (en) 1997-02-21 2000-11-21 Novell, Inc. Resource management in a clustered computer system
US5822748A (en) * 1997-02-28 1998-10-13 Oracle Corporation Group by and distinct sort elimination using cost-based optimization
US6047081A (en) 1997-10-24 2000-04-04 Imation Corp. Image processing software system having configurable communication pipelines
US6292705B1 (en) 1998-09-29 2001-09-18 Conexant Systems, Inc. Method and apparatus for address transfers, system serialization, and centralized cache and transaction control, in a symetric multiprocessor system
US20010049780A1 (en) 1998-03-27 2001-12-06 Shreekant Thakkar Method and apparatus for performing integer operations in response to a result of a floating point operation
US6230240B1 (en) 1998-06-23 2001-05-08 Hewlett-Packard Company Storage management system and auto-RAID transaction manager for coherent memory map across hot plug interface
EP1046100A1 (en) 1998-08-06 2000-10-25 Trimedia Technologies, Inc. Data processor and method of processing data
JP3583657B2 (ja) 1998-09-30 2004-11-04 株式会社東芝 中継装置及び通信装置
US6633891B1 (en) 1998-11-24 2003-10-14 Oracle International Corporation Managing replacement of data in a cache on a node based on caches of other nodes
US6434545B1 (en) * 1998-12-16 2002-08-13 Microsoft Corporation Graphical query analyzer
JP2000261674A (ja) 1999-03-09 2000-09-22 Fujitsu Ltd 画像伸長装置
US6295571B1 (en) 1999-03-19 2001-09-25 Times N Systems, Inc. Shared memory apparatus and method for multiprocessor systems
US6826522B1 (en) 1999-06-21 2004-11-30 Pts Corporation Methods and apparatus for improved efficiency in pipeline simulation and emulation
US6349310B1 (en) 1999-07-06 2002-02-19 Compaq Computer Corporation Database management system and method for accessing rows in a partitioned table
US6671797B1 (en) 2000-02-18 2003-12-30 Texas Instruments Incorporated Microprocessor with expand instruction for forming a mask from one bit
US6697919B2 (en) 2000-06-10 2004-02-24 Hewlett-Packard Development Company, L.P. System and method for limited fanout daisy chaining of cache invalidation requests in a shared-memory multiprocessor system
US7383424B1 (en) * 2000-06-15 2008-06-03 Hewlett-Packard Development Company, L.P. Computer architecture containing processor and decoupled coprocessor
JP2004507835A (ja) 2000-08-14 2004-03-11 リー,ジャエ−ハク 多機能pda
US6898693B1 (en) * 2000-11-02 2005-05-24 Intel Corporation Hardware loops
US6917987B2 (en) * 2001-03-26 2005-07-12 Intel Corporation Methodology and mechanism for remote key validation for NGIO/InfiniBand™ applications
US6745174B2 (en) 2001-03-29 2004-06-01 Hewlett-Packard Development Company, L.P. Method of executing before-triggers in an active database
US7013353B2 (en) 2001-03-30 2006-03-14 Intel Corporation Host-fabric adapter having an efficient multi-tasking pipelined instruction execution micro-controller subsystem
US20020188830A1 (en) 2001-06-01 2002-12-12 Brian Boles Bit replacement and extraction instructions
US6789143B2 (en) 2001-09-24 2004-09-07 International Business Machines Corporation Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries
US6748499B2 (en) * 2001-11-15 2004-06-08 International Business Machines Corporation Sharing memory tables between host channel adapters
US6854032B2 (en) * 2001-12-04 2005-02-08 Sun Microsystems, Inc. System for accessing a region of memory using remote address translation and using a memory window table and a memory region table
US6757790B2 (en) * 2002-02-19 2004-06-29 Emc Corporation Distributed, scalable data storage facility with cache memory
JP2003308334A (ja) * 2002-04-15 2003-10-31 Nippon Telegr & Teleph Corp <Ntt> 情報検索方法及び装置、情報検索プログラム、情報検索プログラムを記録した記録媒体
US7249118B2 (en) 2002-05-17 2007-07-24 Aleri, Inc. Database system and methods
US7197647B1 (en) 2002-09-30 2007-03-27 Carnegie Mellon University Method of securing programmable logic configuration data
US6842848B2 (en) 2002-10-11 2005-01-11 Sandbridge Technologies, Inc. Method and apparatus for token triggered multithreading
US20060098649A1 (en) * 2004-11-10 2006-05-11 Trusted Network Technologies, Inc. System, apparatuses, methods, and computer-readable media for determining security realm identity before permitting network connection
US7730292B2 (en) 2003-03-31 2010-06-01 Hewlett-Packard Development Company, L.P. Parallel subword instructions for directing results to selected subword locations of data processor result register
US20040260182A1 (en) 2003-06-23 2004-12-23 Zuluaga Andres F. Intraluminal spectroscope with wall contacting probe
US7006021B1 (en) * 2003-06-27 2006-02-28 Cypress Semiconductor Corp. Low power serializer circuit and method
US7047252B2 (en) 2003-12-02 2006-05-16 Oracle International Corporation Complex computation across heterogenous computer systems
US7664938B1 (en) 2004-01-07 2010-02-16 Xambala Corporation Semantic processor systems and methods
US7698552B2 (en) * 2004-06-03 2010-04-13 Intel Corporation Launching a secure kernel in a multiprocessor system
JP2006004274A (ja) * 2004-06-18 2006-01-05 Nippon Telegr & Teleph Corp <Ntt> 対話処理装置、対話処理方法及び対話処理プログラム
US7516121B2 (en) * 2004-06-23 2009-04-07 Oracle International Corporation Efficient evaluation of queries using translation
US20060075236A1 (en) * 2004-09-30 2006-04-06 Marek James A Method and apparatus for high assurance processing
US20060095690A1 (en) 2004-10-29 2006-05-04 International Business Machines Corporation System, method, and storage medium for shared key index space for memory regions
US7814104B2 (en) 2005-05-04 2010-10-12 Oracle International Corporation Techniques for partition pruning
US7725595B1 (en) * 2005-05-24 2010-05-25 The United States Of America As Represented By The Secretary Of The Navy Embedded communications system and method
US7877379B2 (en) * 2005-09-30 2011-01-25 Oracle International Corporation Delaying evaluation of expensive expressions in a query
US8817029B2 (en) 2005-10-26 2014-08-26 Via Technologies, Inc. GPU pipeline synchronization and control system and method
GB0524720D0 (en) * 2005-12-05 2006-01-11 Imec Inter Uni Micro Electr Ultra low power ASIP architecture II
US7861060B1 (en) 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US8024797B2 (en) * 2005-12-21 2011-09-20 Intel Corporation Method, apparatus and system for performing access control and intrusion detection on encrypted data
US8255922B1 (en) * 2006-01-09 2012-08-28 Oracle America, Inc. Mechanism for enabling multiple processes to share physical memory
US8049760B2 (en) 2006-02-06 2011-11-01 Via Technologies, Inc. System and method for vector computations in arithmetic logic units (ALUs)
US20080010417A1 (en) * 2006-04-28 2008-01-10 Zeffer Hakan E Read/Write Permission Bit Support for Efficient Hardware to Software Handover
US7509460B2 (en) * 2006-05-04 2009-03-24 Sun Microsystems, Inc. DRAM remote access cache in local memory in a distributed shared memory system
US7783862B2 (en) 2006-08-07 2010-08-24 International Characters, Inc. Method and apparatus for an inductive doubling architecture
US20080065835A1 (en) * 2006-09-11 2008-03-13 Sun Microsystems, Inc. Offloading operations for maintaining data coherence across a plurality of nodes
US8533216B2 (en) 2006-10-30 2013-09-10 Teradata Us, Inc. Database system workload management method and system
US7660793B2 (en) 2006-11-13 2010-02-09 Exegy Incorporated Method and system for high performance integration, processing and searching of structured and unstructured data using coprocessors
JP5379693B2 (ja) * 2006-11-13 2013-12-25 アイ・ピー・リザブワー・エル・エル・シー コプロセッサを使った構造化データおよび非構造化データの高性能の統合、処理および探索の方法およびシステム
US20080162876A1 (en) 2006-12-28 2008-07-03 International Business Machines Corporation dedicated hardware processor for structured query language (sql) transactions
US8504791B2 (en) 2007-01-26 2013-08-06 Hicamp Systems, Inc. Hierarchical immutable content-addressable memory coprocessor
US7792822B2 (en) * 2007-03-02 2010-09-07 Microsoft Corporation Systems and methods for modeling partitioned tables as logical indexes
US8032499B2 (en) 2007-05-21 2011-10-04 Sap Ag Compression of tables based on occurrence of values
US7769729B2 (en) 2007-05-21 2010-08-03 Sap Ag Block compression of tables with repeated values
US20090037700A1 (en) 2007-07-30 2009-02-05 Clear Falls Pty Ltd Method and system for reactively assigning computational threads of control between processors
US7882210B2 (en) 2007-08-02 2011-02-01 Sap Ag Dynamic agent formation for efficient data provisioning
WO2009031303A1 (ja) * 2007-09-05 2009-03-12 Tohoku University 固体撮像素子及び撮影装置
US20090070786A1 (en) 2007-09-11 2009-03-12 Bea Systems, Inc. Xml-based event processing networks for event server
HUE042697T2 (hu) 2007-09-24 2019-07-29 Hasso Plattner Inst Fuer Digital Engineering Ggmbh ETL kisebb nulla redundancia rendszer és eljárás OLTP adatok jelentésére
CN100495404C (zh) * 2007-11-22 2009-06-03 中国人民解放军国防科学技术大学 基于流处理的生物序列数据库搜索多层次加速方法
US7991794B2 (en) 2007-12-18 2011-08-02 Oracle International Corporation Pipelining operations involving DML and query
CN101227689B (zh) * 2007-12-27 2011-01-19 华为技术有限公司 信息上报方法及装置
US7769726B2 (en) 2007-12-31 2010-08-03 Sap, Ag Method for verification of data and metadata in a data repository
US8258952B2 (en) * 2008-03-14 2012-09-04 The Invention Science Fund I, Llc System for treating at least one plant including a treatment apparatus and an electronic tag interrogator
US8229945B2 (en) 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
US8732386B2 (en) * 2008-03-20 2014-05-20 Sandisk Enterprise IP LLC. Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory
US20090289861A1 (en) * 2008-05-20 2009-11-26 Infineon Technologies Ag Radio frequency communication devices and methods
JP2010003266A (ja) * 2008-06-23 2010-01-07 Nippon Telegr & Teleph Corp <Ntt> クエリ生成装置及び方法及びプログラム及びコンピュータ読取可能な記録媒体
US8271564B2 (en) * 2008-07-14 2012-09-18 Symbol Technologies, Inc. Lookup table arrangement and related management method for accommodating concurrent processors
US8626725B2 (en) * 2008-07-31 2014-01-07 Microsoft Corporation Efficient large-scale processing of column based data encoded structures
US8108361B2 (en) 2008-07-31 2012-01-31 Microsoft Corporation Efficient column based data encoding for large-scale data storage
US8275815B2 (en) 2008-08-25 2012-09-25 International Business Machines Corporation Transactional processing for clustered file systems
US20100088309A1 (en) * 2008-10-05 2010-04-08 Microsoft Corporation Efficient large-scale joining for querying of column based data encoded structures
US8725707B2 (en) 2009-03-26 2014-05-13 Hewlett-Packard Development Company, L.P. Data continuous SQL process
US8935223B2 (en) 2009-04-30 2015-01-13 Oracle International Corporation Structure of hierarchical compressed data structure for tabular data
US8285709B2 (en) 2009-05-12 2012-10-09 Teradata Us, Inc. High-concurrency query operator and method
US9304767B2 (en) * 2009-06-02 2016-04-05 Oracle America, Inc. Single cycle data movement between general purpose and floating-point registers
US8789173B2 (en) * 2009-09-03 2014-07-22 Juniper Networks, Inc. Protecting against distributed network flood attacks
US8356185B2 (en) * 2009-10-08 2013-01-15 Oracle America, Inc. Apparatus and method for local operand bypassing for cryptographic instructions
US8832142B2 (en) 2010-08-30 2014-09-09 Oracle International Corporation Query and exadata support for hybrid columnar compressed data
US8270967B1 (en) * 2010-02-09 2012-09-18 Sprint Spectrum, L.P. Overriding a most-recently-used (MRU) table for system acquisition
US20110196900A1 (en) * 2010-02-09 2011-08-11 Alexandre Drobychev Storage of Data In A Distributed Storage System
US8856593B2 (en) * 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8516268B2 (en) 2010-08-23 2013-08-20 Raytheon Company Secure field-programmable gate array (FPGA) architecture
CN101944077B (zh) * 2010-09-02 2011-10-19 东莞市泰斗微电子科技有限公司 一种主处理器和协处理器之间的通讯接口及其控制方法
CN201804331U (zh) * 2010-09-21 2011-04-20 北京同有飞骥科技股份有限公司 一种基于协处理器的重复数据删除系统
US8260803B2 (en) * 2010-09-23 2012-09-04 Hewlett-Packard Development Company, L.P. System and method for data stream processing
US8938644B2 (en) 2010-12-03 2015-01-20 Teradata Us, Inc. Query execution plan revision for error recovery
US8972746B2 (en) 2010-12-17 2015-03-03 Intel Corporation Technique for supporting multiple secure enclaves
FR2969156B1 (fr) 2010-12-21 2013-02-08 Chryso Polymere comportant une fonction hydrolysable utilisable comme fluidifiant
US8996463B2 (en) 2012-07-26 2015-03-31 Mongodb, Inc. Aggregation framework system architecture and method
US8666970B2 (en) 2011-01-20 2014-03-04 Accenture Global Services Limited Query plan enhancement
JP5971635B2 (ja) * 2011-01-25 2016-08-17 エヌエックスピー カナダ インコーポレイテッド ベクトルユニット共有の装置および方法
US20120303633A1 (en) 2011-05-26 2012-11-29 International Business Machines Corporation Systems and methods for querying column oriented databases
CN102184365B (zh) * 2011-06-07 2013-05-29 郑州信大捷安信息技术股份有限公司 基于SoC芯片外部数据安全存储系统及存取控制方法
US8756363B2 (en) 2011-07-07 2014-06-17 Oracle International Corporation Efficient storage of memory version data
US8572441B2 (en) 2011-08-05 2013-10-29 Oracle International Corporation Maximizing encodings of version control bits for memory corruption detection
US8601473B1 (en) * 2011-08-10 2013-12-03 Nutanix, Inc. Architecture for managing I/O and storage for a virtualization environment
US9342314B2 (en) 2011-12-08 2016-05-17 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors
EP2788901A1 (en) 2011-12-08 2014-10-15 Oracle International Corporation Techniques for maintaining column vectors of relational data within volatile memory
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
CN104126166A (zh) 2011-12-23 2014-10-29 英特尔公司 用于执行使用掩码的向量打包一元编码的系统、装置和方法
CN104094218B (zh) 2011-12-23 2017-08-29 英特尔公司 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
WO2014033606A2 (en) 2012-08-31 2014-03-06 Pradeep Varma Systems and methods of memory and access management
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
US8954391B2 (en) * 2012-10-15 2015-02-10 Oracle International Corporation System and method for supporting transient partition consistency in a distributed data grid
US9043559B2 (en) 2012-10-23 2015-05-26 Oracle International Corporation Block memory engine with memory corruption detection
US9244829B2 (en) 2012-12-20 2016-01-26 Oracle International Corporation Method and system for efficient memory region deallocation
US9471590B2 (en) * 2013-02-12 2016-10-18 Atlantis Computing, Inc. Method and apparatus for replicating virtual machine images using deduplication metadata
US9898414B2 (en) 2014-03-28 2018-02-20 Oracle International Corporation Memory corruption detection support for distributed shared memory applications

Also Published As

Publication number Publication date
CN104662538B (zh) 2018-05-18
US20140095748A1 (en) 2014-04-03
US9063974B2 (en) 2015-06-23
CN104704491B (zh) 2018-04-10
EP2904500A1 (en) 2015-08-12
EP2904514B1 (en) 2020-03-25
US20140095805A1 (en) 2014-04-03
CN104704491A (zh) 2015-06-10
US10055224B2 (en) 2018-08-21
WO2014055526A1 (en) 2014-04-10
US9542443B2 (en) 2017-01-10
EP2904499B1 (en) 2020-04-22
CN104769591A (zh) 2015-07-08
WO2014055138A1 (en) 2014-04-10
CN108664596B (zh) 2021-07-27
EP2904513A1 (en) 2015-08-12
CN104662534B (zh) 2018-05-25
US20150261871A1 (en) 2015-09-17
US9400821B2 (en) 2016-07-26
EP2904514A1 (en) 2015-08-12
EP2904515A1 (en) 2015-08-12
JP2015535999A (ja) 2015-12-17
US20150026434A1 (en) 2015-01-22
US9372813B2 (en) 2016-06-21
US9251272B2 (en) 2016-02-02
CN104769561B (zh) 2018-01-12
CN104662534A (zh) 2015-05-27
US9557997B2 (en) 2017-01-31
US20140095810A1 (en) 2014-04-03
US9158810B2 (en) 2015-10-13
US20140095468A1 (en) 2014-04-03
CN104662538A (zh) 2015-05-27
US20140095534A1 (en) 2014-04-03
CN104769591B (zh) 2018-08-03
EP2904515B1 (en) 2021-05-12
WO2014055137A1 (en) 2014-04-10
WO2014055145A1 (en) 2014-04-10
US20160098364A1 (en) 2016-04-07
CN108664596A (zh) 2018-10-16
EP2904513B1 (en) 2021-04-07
US9292569B2 (en) 2016-03-22
US20140095651A1 (en) 2014-04-03
WO2014055443A1 (en) 2014-04-10
CN104769561A (zh) 2015-07-08
JP6320393B2 (ja) 2018-05-09
US10223116B2 (en) 2019-03-05
US20140096145A1 (en) 2014-04-03
WO2014055512A1 (en) 2014-04-10
CN104756091B (zh) 2018-02-23
EP2904500B1 (en) 2020-08-19
CN104756091A (zh) 2015-07-01
EP2904499A1 (en) 2015-08-12
EP2904521A1 (en) 2015-08-12
EP2904521B1 (en) 2018-10-24

Similar Documents

Publication Publication Date Title
ES2880268T3 (es) Colas de mensajes en soporte físico para una comunicación dentro de un grupo de cómputo
US11138132B2 (en) Technologies for secure I/O with accelerator devices
US11269786B2 (en) Memory data protection based on authenticated encryption
US10142101B2 (en) Hardware enforced one-way cryptography
US8953792B2 (en) Combining key control information in common cryptographic architecture services
US10284372B2 (en) Method and system for secure management of computer applications
CN111971674A (zh) 加密货币钱包及加密货币账户管理
US20160261404A1 (en) Methods and systems for obfuscating data and computations defined in a secure distributed transaction ledger
CA2902291A1 (en) Systems, methods and apparatuses for using a secure non-volatile storage with a computer processor
CN114391239B (zh) 对抗共存攻击的系统和方法
WO2001061912A1 (en) Packet processor
CN110287654A (zh) 使用硬件信任根的媒体客户端装置鉴权
CN102411694B (zh) 加密装置及存储器系统
US10715332B2 (en) Encryption for transactions in a memory fabric
CN115516454B (zh) 硬件安全模块和系统
CN108769010A (zh) 节点受邀注册的方法和装置
CN113940027B (zh) 用于加速证书提供的系统和方法
US11881940B2 (en) Method and system for providing secure message
US20170213054A1 (en) Secure transactions in a memory fabric
US11494520B2 (en) Reconfigurable device bitstream key authentication
WO2020000491A1 (zh) 一种文件存储方法、装置及存储介质
CA3036118A1 (en) Padding for creating a message digest
JP2021090151A (ja) ストレージシステムおよびストレージシステムのデータ保護方法
US11042610B1 (en) Enabling integrity and authenticity of design data
CN116134421A (zh) 向多瓦片处理系统流式传输数据