ES2552175T3 - Instrucción Encontrar Elemento Igual de Vector - Google Patents
Instrucción Encontrar Elemento Igual de Vector Download PDFInfo
- Publication number
- ES2552175T3 ES2552175T3 ES13761350.1T ES13761350T ES2552175T3 ES 2552175 T3 ES2552175 T3 ES 2552175T3 ES 13761350 T ES13761350 T ES 13761350T ES 2552175 T3 ES2552175 T3 ES 2552175T3
- Authority
- ES
- Spain
- Prior art keywords
- operand
- index
- vector
- zero
- search
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for program code execution, e.g. Java virtual machine [JVM], interpreters or emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Un método para ejecutar una instrucción máquina en una unidad central de proceso que comprende los pasos de: obtener, mediante un procesador, una instrucción máquina (310) para ejecución, la instrucción máquina que se define para ejecución de ordenador según una arquitectura de ordenador, la instrucción máquina que comprende: al menos un campo de código de operación (302a, 302b) para proporcionar un código de operación, el código de operación que identifica una operación Encontrar Elemento Igual de Vector; un campo de extensión (314) a ser usado en la designación de uno o más registros; un primer campo de registro (304) combinado con una primera parte del campo de extensión (314) para designar un primer registro, el primer registro que comprende un primer operando, el primer operando que es un operando de vector que comprende un número predefinido de elementos; un segundo campo de registro (306) combinado con una segunda parte del campo de extensión (314) para designar un segundo registro, el segundo registro que comprende un segundo operando, el segundo operando que es un operando de vector que comprende un número predefinido de elementos; un tercer campo de registro (308) combinado con una tercera parte del campo de extensión (314) para designar un tercer registro, el tercer registro que comprende un tercer operando, el tercer operando que es un operando de vector que comprende un número predefinido de elementos; un campo de máscara (310), el campo de máscara que comprende uno o más controles a ser usados durante la ejecución de la instrucción máquina; y ejecutar la instrucción máquina, caracterizada por la ejecución que comprende: determinar si el campo de máscara incluye un control de elemento cero fijado para indicar una búsqueda de un vector para un elemento cero (400); basado en el campo de máscara que incluye el control de elemento cero fijado para indicar la búsqueda del vector para un elemento cero (402), buscar el segundo operando para un elemento cero (402), la búsqueda que proporciona un índice nulo (403), el índice nulo que incluye uno de un índice de un elemento cero encontrado en la búsqueda o un tamaño del vector si no se encuentra un elemento cero; comparar cada elemento del segundo operando con cada elemento del tercer operando en paralelo (404), por igualdad, la comparación que proporciona un índice de comparación (410, 412), el índice de comparación que se basa en una dirección de la búsqueda (408) y un tamaño de los elementos del vector y que incluye uno de un índice de un elemento igual en base a la comparación que encuentra un elemento igual o un tamaño del vector en base a la comparación que encuentra elementos no iguales; y proporcionar un resultado (416, 418), el resultado basado en si se realizó (414) la búsqueda para el elemento cero, en donde el resultado incluye uno de: en base a no realizar la búsqueda del elemento cero (414), el resultado incluye el índice de comparación (416); o en base a realizar la búsqueda del elemento cero (414), el resultado incluye un mínimo del índice de comparación o el índice nulo (418).
Description
5
10
15
20
25
30
35
40
45
DESCRIPCIÓN
Instrucción Encontrar Elemento Igual de Vector Antecedentes
Un aspecto de la invención se refiere, en general, a procesamiento de texto y, en particular, a facilitar procesamiento asociado con datos de caracteres.
Un procesamiento de texto a menudo requiere la comparación de datos de caracteres, incluyendo, pero no limitado a, la comparación de cadenas de datos de caracteres. Típicamente, las instrucciones usadas para comparar datos de caracteres comparan un único octeto de datos a la vez.
Además, el procesamiento de texto a menudo requiere otros tipos de procesamiento de cadenas, incluyendo encontrar el punto de terminación (por ejemplo, el final de una cadena), determinar la longitud de los datos de caracteres, encontrar un carácter particular, etc. Las instrucciones actuales para realizar estos tipos de procesamiento tienden a ser ineficientes.
El documento US 2004/215 924 A1 describe un método de localización de un valor objetivo que incluye cargar el valor objetivo en elementos de un primer registro.
El documento EP 1296 222 A2 describe un circuito comparador de magnitud.
Breve compendio
Los defectos de la técnica anterior se superan y se proporcionan ventajas a través del suministro de un método según la reivindicación 1.
También se proporcionan un producto de programa de ordenador y un sistema de ordenador correspondientes.
Rasgos y ventajas adicionales se realizan a través de las técnicas de la presente invención. Otras realizaciones y aspectos de la invención se describen en detalle en la presente memoria y se consideran una parte de la invención
reivindicada.
Breve descripción de las diversas vistas de los dibujos
Uno o más aspectos de la presente invención se señalan particularmente y reivindican distintivamente como ejemplos en las reivindicaciones en la finalización de esta especificación. Los precedentes y otros objetivos, rasgos y ventajas de la invención son evidentes a partir de la siguiente descripción detallada tomada en conjunto con los dibujos anexos en los cuales:
La FIG. 1 representa un ejemplo de un entorno informático para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 2A representa otro ejemplo de un entorno informático para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 2B representa detalles adicionales de la memoria de la FIG. 2A, según un aspecto de la presente invención;
La FIG. 3 representa una realización de un formato de una instrucción Encontrar Elemento Igual de Vector, según un aspecto de la presente invención;
La FIG. 4 representa una realización de la lógica asociada con una instrucción Encontrar Elemento Igual de Vector, según un aspecto de la presente invención;
La FIG. 5 representa una realización de varios bloques de procesamiento para realizar la lógica de la FIG. 4, según un aspecto de la presente invención;
La FIG. 6 representa un ejemplo de un campo de registro, según un aspecto de la presente invención;
La FIG. 7 representa una realización de un formato de una instrucción Encontrar Cualquier Igual de Vector, según un aspecto de la presente invención;
La FIG. 8 representa una realización de la lógica asociada con una instrucción Encontrar Cualquier Igual de Vector, según un aspecto de la presente invención;
La FIG. 9 representa una realización de un producto de programa de ordenador que incorpora uno o más aspectos de la presente invención;
5
10
15
20
25
30
35
40
45
50
La FIG. 10 representa una realización de un sistema de ordenador central para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 11 representa un ejemplo adicional de un sistema de ordenador para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 12 representa otro ejemplo adicional de un sistema de ordenador que comprende una red de ordenadores para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 13 representa una realización de varios elementos de un sistema de ordenador para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 14A representa una realización de la unidad de ejecución del sistema de ordenador de la FIG. 13 para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 14B representa una realización de la unidad de ramal del sistema de ordenador de la FIG. 13 para incorporar y usar uno o más aspectos de la presente invención;
La FIG. 14C representa una realización de la unidad de carga/almacén del sistema de ordenador de la FIG. 13 para incorporar y usar uno o más aspectos de la presente invención; y
La FIG. 15 representa una realización de un sistema de ordenador central emulado para incorporar y usar uno o más aspectos de la presente invención.
Descripción detallada
Según un aspecto de la presente invención, se proporciona una capacidad para facilitar procesamiento de datos de caracteres, pero no limitada a, caracteres alfabéticos, en cualquier idioma; dígitos numéricos; puntuación; y/u otros símbolos. Los datos de caracteres pueden ser o no ser cadenas de datos. Asociados con datos de caracteres están estándares, ejemplos de los cuales incluyen, pero no se limitan a, ASCII (Código Estándar Americano para Intercambio de Información); Unicode, incluyendo, pero no limitado a, UTF (Formato de Transformación Unicódigo) 8; UTF16; etc.
En un ejemplo, se proporciona una instrucción Encontrar Elemento Igual que compara datos de múltiples vectores para igualdad y proporciona una indicación de igualdad, si existe la igualdad. En un ejemplo, un índice asociado con el elemento igual se almacena en un registro de vector objetivo.
Como se describe en la presente memoria, un elemento de un registro de vector (también conocido como un vector) es de uno, dos o cuatro octetos de longitud, como ejemplos; y un operando de vector es, por ejemplo, un operando SIMD (Instrucción Única, Datos Múltiples) que tiene una pluralidad de elementos. En otras realizaciones, los elementos pueden ser de otros tamaños; y un operando de vector necesita no ser SIMD y/o puede incluir un elemento.
En una realización adicional, la misma instrucción, la instrucción Encontrar Elemento Igual, también busca un vector seleccionado para elementos nulos, también conocidos como elementos cero (por ejemplo, el elemento entero es cero). Un elemento nulo o cero indica terminación de los datos de caracteres; por ejemplo, un final de una cadena de datos particular. Un resultado de la instrucción es dependiente de si se proporciona la búsqueda nula o solo la comparación.
Aún en una realización adicional, se proporciona una instrucción Encontrar Cualquier Igual de Vector que busca un vector para caracteres particulares y/o para elementos cero y devuelve una máscara o índice de octeto del carácter o elemento cero coincidente.
Una realización de un entorno informático para incorporar y usar uno o más aspectos de la presente invención se describe con referencia a la FIG. 1. Un entorno informático 100 incluye, por ejemplo, un procesador 102 (por ejemplo, una unidad central de proceso), una memoria 104 (por ejemplo, una memoria principal) y uno o más dispositivos de entrada/salida (l/O) y/o interfaces 106 acoplados entre sí a través, por ejemplo, de uno o más canales principales 108 y/u otras conexiones.
En un ejemplo, el procesador 102 se basa en la z/Architecture ofrecida por International Business Machines Corporation y es parte de un servidor, tal como el servidor del System z, que también se ofrece por International Business Machines Corporation e implementa la z/Architecture. Una realización de la z/Architecture se describe en una publicación de IBM® titulada, “z/Architecture Principies of Operation”, Publicación de IBM® N° SA22-7832-08, Novena Edición, agosto de 2010. En un ejemplo, el procesador ejecuta un sistema operativo, tal como z/OS, también ofrecido por International Business Machines Corporation. IBM®, Z/ARCHITECTURE® y Z/OS® son marcas registradas de International Business Machines Corporation, Armonk, Nueva York, EE.UU. Otros nombres usados en la presente memoria pueden ser marcas registradas, marcas comerciales o nombres de productos de International Business Machines Corporation u otras compañías.
5
10
15
20
25
30
35
40
45
50
55
En una realización adicional, el procesador 102 se basa en la Power Architecture ofrecida por International Business Machines Corporation. Una realización de la Power Architecture se describe en “Power ISA™ Versión 2.06 Revisión B”, International Business Machines Corporation, 23 de julio de 2010. POWER ARCHITECTURE® es una marca registrada de International Business Machines Corporation.
Aún en una realización adicional, el procesador 102 se basa en una arquitectura Intel ofrecida por Intel Corporation. Una realización de la arquitectura Intel se describe en “Intel® 64 and IA-32 Architectures Developer’s Manual: Vol. 2B, Instructions Set Reference, A-L”, Número de Orden 253666-041 US, diciembre de 2011 y en “Intel® 64 and IA-32 Architectures Developer’s Manual: Vol. 2B, Instructions Set Reference, M-Z”, Número de Orden 253667-041 US, diciembre de 2011. Intel® es una marca registrada de Intel Corporation, Santa Clara, California.
Otra realización de un entorno informático para incorporar y usar uno o más aspectos de la presente invención se describe con referencia a la FIG. 2A. En este ejemplo, un entorno informático 200 incluye, por ejemplo, una unidad de procesamiento central nativo 202, una memoria 204 y uno o más dispositivos de entrada/salida y/o interfaces 206 acoplados a otra vía, por ejemplo, uno o más canales principales 208 y/u otras conexiones. Como ejemplos, el entorno informático 200 puede incluir un procesador PowerPC, un servidor pSeries o un servidor xSeries ofrecidos por International Business Machines Corporation, Armonk, Nueva York; y un HP Superdome con procesadores Intel Itanium II ofrecido por Hewlett Packard Co., Palo Alto, California; y/u otras máquinas basadas en arquitecturas ofrecidas por International Business Machines Corporation, Hewlett Packard, Intel, Oracle u otros.
La unidad central de proceso nativa 202 incluye uno o más registros nativos 210, tales como uno o más registros de propósito general y/o uno o más registros de propósito especial usados durante el procesamiento dentro del entorno. Estos registros incluyen información que representa el estado del entorno en cualquier punto de tiempo particular.
Además, la unidad central de proceso nativa 202 ejecuta instrucciones y código que están almacenados en la memoria 204. En un ejemplo particular, la unidad central de proceso ejecuta un código emulador 212 almacenado en la memoria 204. Este código permite al entorno de procesamiento configurado en una arquitectura emular otra arquitectura. Por ejemplo, el código emulador 212 permite a máquinas basadas en arquitecturas distintas de la z/Architecture, tal como procesadores PowerPC, servidores pSeries, servidores xSeries, servidores HP Superdome u otros, emular la z/Architecture y ejecutar software e instrucciones desarrolladas basadas en la z/Architecture.
Detalles adicionales relativos al código emulador 212 se describen con referencia a la FIG. 2B. Las instrucciones invitadas 250 comprenden instrucciones software (por ejemplo, instrucciones máquina) que se desarrollaron para ser ejecutadas en una arquitectura distinta de la de la CPU nativa 202. Por ejemplo, las instrucciones invitadas 250 se pueden haber diseñado para ejecutar sobre un procesador z/Architecture 102, pero en su lugar, están siendo emuladas sobre la CPU nativa 202, que puede ser, por ejemplo, un procesador Intel Itanium II. En un ejemplo, el código emulador 212 incluye una unidad de búsqueda de instrucciones 252 para obtener una o más instrucciones invitadas 250 desde la memoria 204 y para proporcionar opcionalmente almacenamiento temporal local para las instrucciones obtenidas. También incluye una rutina de traducción de instrucciones 254 para determinar el tipo de instrucción invitada que se ha obtenido y para traducir la instrucción invitada en una o más instrucciones nativas correspondientes 256. Esta traducción incluye, por ejemplo, identificar la función a ser realizada por la instrucción invitada y elegir la(s) instrucción(instrucciones) nativa(s) para realizar esa función.
Además, el emulador 212 incluye una rutina de control de emulación 260 para hacer que las instrucciones nativas sean ejecutadas. La rutina de control de emulación 260 puede causar a la CPU nativa 202 ejecutar una rutina de instrucciones nativas que emulan una o más instrucciones invitadas obtenidas previamente y, a la terminación de tal ejecución, devolver el control a la rutina de búsqueda de instrucción para emular la obtención de la siguiente instrucción invitada o un grupo de instrucciones invitadas. La ejecución de instrucciones nativas 256 puede incluir datos de carga en un registro desde la memoria 204; almacenar datos de vuelta a memoria desde un registro; o realizar algún tipo de operación aritmética o lógica, como se determina por la rutina de traducción.
Cada rutina, por ejemplo, se implementa en software, que se almacena en memoria y ejecuta por la unidad central de proceso nativa 202. En otros ejemplos, una o más de las rutinas u operaciones se implementan en microprogramas, hardware, software o alguna combinación de los mismos. Los registros del procesador emulado se pueden emular usando registros 210 de la CPU nativa o usando localizaciones en la memoria 204. En las realizaciones, las instrucciones invitadas 250, las instrucciones nativas 256 y el código emulador 212 pueden residir en la misma memoria o se pueden desembolsar entre diferentes dispositivos de memoria.
Como se usa en la presente memoria, los microprogramas incluyen, por ejemplo, el microcódigo, milicódigo y/o macrocódigo del procesador. Incluyen, por ejemplo, las instrucciones a nivel de hardware y/o estructuras de datos usadas en la implementación de código máquina de mayor nivel. En una realización, incluyen, por ejemplo, código propietario que se entrega típicamente como microcódigo que incluye software de confianza o microcódigo específico al hardware subyacente y controla el acceso del sistema operativo al hardware del sistema.
En un ejemplo, una instrucción invitada 250 que se obtiene, traduce y ejecuta es una de las instrucciones descritas en la presente memoria. La instrucción, que es de una arquitectura (por ejemplo, la z/Architecture) se trae de la
5
10
15
20
25
30
35
40
45
50
memoria, traduce y representa como una secuencia de instrucción nativa 256 de otra arquitectura (por ejemplo, PowerPC, pSeries, xSeries, Intel, etc.). Entonces se ejecutan estas instrucciones nativas.
En una realización, las instrucciones descritas en la presente memoria son instrucciones de vector, que son parte de una facilidad de vector, proporcionadas según un aspecto de la presente invención. La facilidad de vector proporciona, por ejemplo, vectores dimensionados fijos que oscilan de uno a dieciséis elementos. Cada vector incluye datos sobre los que se opera por instrucciones de vector definidas en la facilidad. En una realización, si un vector está compuesto de múltiples elementos, entonces cada elemento se procesa en paralelo con los otros elementos. La terminación de instrucción no ocurre hasta que el procesamiento de todos los elementos está completo.
Como se describe en la presente memoria, las instrucciones de vector se pueden implementar como parte de varias arquitecturas, incluyendo, pero no limitado a, la z/Architecture, PowerPC, Intel, etc. Aunque una realización descrita en la presente memoria es para la z/Architecture, las instrucciones de vector y uno o más aspectos de la presente invención se pueden basar en muchas otras arquitecturas. La z/Architecture es solamente un ejemplo.
En una realización en la que la facilidad de vector se implementa como parte de la z/Architecture, para usar los registros e instrucciones de vector, un control de habilitación de vector y un control de registro en un registro de control especifico (por ejemplo, el registro de control 0) se fija a, por ejemplo, uno. Si la facilidad de vector se instala y se ejecuta una instrucción de vector sin el conjunto de controles de habilitación, se reconoce una excepción de datos. Si la facilidad de vector no se instala y se ejecuta una instrucción de vector, se reconoce una excepción de operación.
Los datos de vector aparecen en el almacenamiento, por ejemplo, en la misma secuencia de izquierda a derecha que otros formatos de datos. Los bits de un formato de datos que se numeran 0-7 constituyen el octeto en la localización de octeto de más a la izquierda (numerado más bajo) en el almacenamiento, los bits 8-15 forman el octeto en la siguiente localización secuencial y así sucesivamente. En un ejemplo adicional, los datos de vector pueden aparecer en el almacenamiento en otra secuencia, tal como de derecha a Izquierda.
Muchas de las instrucciones de vector dotadas con la facilidad de vector tienen un campo de bits especificados. Este campo, conocido como el bit de extensión de registro o RXB, incluye el bit más significativo para cada uno de los operandos designados de registro de vector. Los bits para designaciones de registro no especificadas por la instrucción van a ser reservados y fijados a cero.
En un ejemplo, el campo RXB incluye cuatro bits (por ejemplo, los bits 0-3) y los bits se definen, como sigue:
0 - Bit más significativo para la primera designación de registro de vector de la instrucción.
1 - Bit más significativo para la segunda designación de registro de vector de la instrucción, en su caso.
2 - Bit más significativo para la tercera designación de registro de vector de la instrucción, en su caso.
3 - Bit más significativo para la cuarta designación de registro de vector de la instrucción, en su caso.
Cada bit se fija a cero o uno mediante, por ejemplo, el ensamblador dependiendo del número de registro. Por ejemplo, para los registros 0-15, el bit se fija a 0; para los registros 16-31, el bit se fija a 1, etc.
En una realización, cada bit RXB es un bit de extensión para una localización particular en una Instrucción que incluye uno o más registros de vector. Por ejemplo, en una o más instrucciones de vector, el bit 0 de RXB es un bit de extensión para la localización 8-11, que se asigna, por ejemplo, a V-i; el bit 1 de RXB es un bit de extensión para la localización 12-15, que se asigna, por ejemplo, a V2; y así sucesivamente.
En una realización adicional, el campo RXB Incluye bits adicionales y más de un bit se usa como una extensión para cada vector o localización.
Una instrucción, proporcionada según un aspecto de la presente invención que incluye el campo RXB es una instrucción Encontrar Elemento Igual de Vector, un ejemplo de la cual se representa en la FIG. 3. En un ejemplo, la instrucción Encontrar Elemento Igual de Vector 300 incluye campos de código de operación 302a (por ejemplo, los bits 0-7), 302b (por ejemplo, los bits 40-47) que indican una operación Encontrar Elemento Igual de Vector; un primer campo de registro de vector 304 (por ejemplo, los bits 8-11) usado para designar un primer registro de vector (V-i); un segundo campo de registro de vector 306 (por ejemplo, los bits 12-15) usados para designar un segundo registro de vector (V2); un tercer campo de registro de vector 308 (por ejemplo, los bits 16-19) usados para designar un tercer registro de vector (V3); un primer campo de máscara (Ms) 310 (por ejemplo, los bits 24-27); un segundo campo de máscara (M4) 312 (por ejemplo, los bits 32-35); y el campo RXB 314 (por ejemplo, los bits 36-39). Cada uno de los campos 304-314, en un ejemplo, está separado y es independiente del(de los) campo(s) de código de operación. Además, en una realización, están separados y son independientes uno de otro; no obstante, en otras realizaciones, se puede combinar más de un campo. Información adicional sobre el uso de estos campos se describe más adelante.
5
10
15
20
25
30
35
40
45
50
55
En un ejemplo, los bits seleccionados (por ejemplo, los primeros dos bits) del código de operación designado por el campo de código de operación 302a especifican la longitud y formato de la instrucción. En este ejemplo particular, los bits seleccionados indican que la longitud es tres medias palabras y el formato es un registro de vector y operación de registro con un código de operación extendido. Cada uno de los campos de vector (V), junto con su bit de extensión de registro correspondiente especificado por RXB, designa un registro de vector. En particular, para registros de vector, el registro que contiene el operando se especifica usando, por ejemplo, un campo de cuatro bit del campo de registro con la adición del bit de registro de extensión de registro (RXB) como el bit más significativo. Por ejemplo, si el campo de cuatro bits es 0110 y el bit de extensión es 0, entonces el campo de cinco bits 00110 indica el número de registro 6.
El número de subíndice asociado con un campo de la instrucción indica el operando al que se aplica el campo. Por ejemplo, el número de subíndice 1 asociado con el registro de vector Vi indica el primer operando y así sucesivamente. Un operando de registro es un registro en longitud, que es, por ejemplo, de 128 bits.
El campo M4 que tiene, por ejemplo, cuatro bits, 0-3, especifica un control de tamaño de elemento en, por ejemplo, los bits 1-3. El control de tamaño de elemento especifica el tamaño de los elementos en los operandos de registro de vector. Como ejemplos, el control de tamaño de elemento especifica o bien un octeto, media palabra (por ejemplo, 2 octetos) o bien una palabra (por ejemplo, 4 octetos). Por ejemplo, un 0 indica un octeto; un 1 indica una media palabra; y un 2 indica una palabra, también conocida como, palabra completa. Si se especifica un valor reservado, se reconoce una excepción de especificación.
El campo M5, es, por ejemplo, un campo de cuatro bits, los bits 0-3, que incluye, por ejemplo:
Un campo de búsqueda de ceros (ZS, bit 2), el cual si es uno, cada elemento del segundo operando se compara con cero (o nulo). (En un ejemplo adicional, es cada elemento del tercer operando u otro operando el que se compara con cero); y
Un campo de conjunto de códigos de condición (CC, bit 3), que si es cero, el código de condición no está fijado y permanece sin cambios. Si es uno, el código de condición se fija como se especifica más adelante, como ejemplo:
0 - Si el bit de búsqueda de ceros está fijado, la comparación detectó un elemento cero en el segundo operando en un elemento con un índice menor que cualquier comparación igual.
1 - La comparación detectó una coincidencia entre el segundo y tercer operandos en algún elemento. Si el bit de búsqueda de ceros está fijado, esta coincidencia ocurrió en un elemento con un índice menor o igual que el elemento de comparación de ceros.
2--
3- Ningún elemento comparado es igual.
En la ejecución de una realización de la instrucción Encontrar Elemento Igual de Vector, procediendo en una realización de izquierda a derecha, los elementos enteros binarios sin signo del segundo operando (incluido dentro del registro designado por V2 más su bit RXB) se comparan con los elementos enteros binarios sin signo correspondientes del tercer operando (incluidos dentro del registro designado por V3 más su bit RXB). Si dos elementos son iguales, un índice de octeto del primer octeto del elemento igual de más a la izquierda se coloca en un octeto seleccionado (por ejemplo, el octeto 7) del primer operando (incluido dentro de un registro designado por Vi más su bit RXB). Los ceros se almacenan en los octetos restantes del primer operando.
Por ejemplo, si el tamaño de elemento es un octeto, entonces el índice de octeto del elemento igual de más a la izquierda se devuelve (por ejemplo, si hay 16 elementos, 0-15 y el elemento 6 es igual, entonces se devuelve el índice de octeto 6). De manera similar, si el tamaño de elemento es de media palabra y hay 8 elementos, 0-7 y ambos octetos 6 o 7 del elemento tres son iguales, entonces se devuelve el índice de octeto 6. Del mismo modo, si el tamaño de elemento es de palabra completa y hay cuatro elementos, 0-3 y todos los octetos 4-7 del elemento uno son iguales, se devuelve el índice de octeto 4.
Si no se encuentran octetos que sean iguales o cero si la se fija la búsqueda de ceros, entonces un índice igual al tamaño de vector (por ejemplo, número de bytes; por ejemplo, 16) se almacena en el octeto especificado (por ejemplo, el octeto 7) del primer operando. Los ceros se almacenan en los octetos restantes.
Si el bit de búsqueda de ceros se fija en el campo M5, entonces cada elemento en el segundo operando (o en otra realización, otro operando, tal como el operando tres) también se compara para igualdad con cero (o nulo; final de la cadena). Si se encuentra un elemento cero en el segundo operando antes de que se encuentre que cualquier otro elemento del segundo o tercer operandos sean iguales, el índice de octeto del primer octeto del elemento encontrado que sea cero se almacena en el octeto especifico (por ejemplo, el octeto 7) del primer operando y se almacenan ceros en todas las otras localizaciones de octeto. Si la marca de conjunto de códigos de condición es uno, entonces el código de condición se fija a cero.
5
10
15
20
25
30
35
40
45
50
55
En una realización, la comparación de los elementos se realiza en paralelo. Por ejemplo, si los registros de vector que se comparan son de 16 octetos de longitud, entonces se comparan en paralelo 16 octetos. Además, en una realización, la dirección de los vectores, Izquierda a derecha o derecha a Izquierda, se proporciona en un tiempo de ejecución. Por ejemplo, la Instrucción accede a un registro, control de estado u otra entidad que indica la dirección de procesamiento como o bien de izquierda a derecha o bien de derecha a izquierda, como ejemplos. En una realización, este control de dirección no se codifica como parte de la instrucción, sino que se proporciona a la instrucción en el tiempo de ejecución.
En una realización adicional, la instrucción no incluye el campo RXB. En su lugar, no se usa ninguna extensión o la extensión se proporciona de otra manera, tal como desde un control exterior de la instrucción o proporciona como parte de otro campo de la instrucción.
Detalles adicionales con respecto a una realización del procesamiento de la instrucción Encontrar Elemento Igual de Vector se describen con referencia a la FIG. 4. En un ejemplo, un procesador del entorno informático está realizando esta lógica.
Inicialmente, se hace una determinación en cuanto a si va a ser realizada una búsqueda de nulo (también conocido como elemento cero, final de la cadena, terminador, etc.), CONSULTA 400. Si va a ser realizada una búsqueda de nulo, se hace una comparación contra caracteres nulos, es decir, para elementos cero, PASO 402 y el resultado se saca al nullidx 403. Por ejemplo, si el tamaño de elemento es octetos y un elemento cero se encuentra en el octeto 5, el índice del octeto en el que se encuentra el elemento cero (por ejemplo, 5) se coloca en nullidx. De manera similar, si el tamaño de elemento es media palabra y hay 8 elementos, 0-7 y el elemento tres (es decir, los octetos 6- 7) es cero, entonces 6 (para el índice de octeto 6) se coloca en nullidx. Del mismo modo, si el tamaño de elemento es la palabra completa y hay cuatro elementos, 0-3 y el elemento uno (es decir, los octetos 4-7) es cero, entonces 4 (para el índice de octeto 4) se coloca en nullidx. SI no se encuentra ningún elemento nulo, entonces, en un ejemplo, el tamaño del vector (por ejemplo, en octetos; por ejemplo, 16) se coloca en nullidx.
Adicionalmente o si no va a ser realizada ninguna búsqueda de nulos, una pluralidad de comparaciones (por ejemplo, 16) se realizan en paralelo comparando A con B en base a una operación de comparación, PASO 404. En un ejemplo, A son los contenidos del segundo operando y B son los contenidos del tercer operando y la operación de comparación es igual.
Un resultado de la comparación se almacena en una variable 406, conocida como o bien un índice izquierdo, cmpidxl o un índice derecho, cmpldxr, dependiendo de si la búsqueda es desde la Izquierda o la derecha. Por ejemplo, si la comparación es una comparación de Igual, la búsqueda es de Izquierda a derecha y la comparación provoca una o más Igualdades, el índice asociado con el primer octeto del elemento Igual más bajo se coloca en cmpidxl. Como ejemplo, si el tamaño de elemento es octetos y hay 16 elementos en el vector (0-15) y se encuentra una igualdad en el elemento 6, entonces 6 se almacena en cmpidxl. De manera similar, si el tamaño de elemento es medias palabras y hay 8 elementos en el vector (0-7) y se encuentra una igualdad en el elemento 3 (por ejemplo, en el octeto 6 o 7), se devuelve el índice del primer octeto del elemento (octeto 6). Del mismo modo, si el tamaño del elemento es palabra completa y hay cuatro elementos (0-3) y se encuentra una igualdad en el elemento 1 (por ejemplo, en el octeto 4-7), se devuelve el índice del primer octeto del elemento (octeto 4). Si no hay comparaciones ¡guales, entonces, en una realización, cmpidxl o cmpldxr, dependiendo de la dirección de la comparación, se fija igual al tamaño del vector (por ejemplo, en octetos; por ejemplo, 16).
A partir de entonces, se hace una determinación en cuanto a si la búsqueda es desde la izquierda o la derecha, CONSULTA 408. Si la búsqueda es desde la izquierda, una variable cmpldx se fija igual a cmpidxl, PASO 410; de otro modo, cmpidx se fija igual a cmpldxr, PASO 412.
Posterior a ajustar cmpidx, se hace una determinación en cuanto a si una búsqueda fue realizada para caracteres nulos, CONSULTA 414. Si no hubo búsqueda de caracteres nulos, entonces una variable, idx, se fija, por ejemplo o el índice de comparación, cmpidx, PASO 416. Si se busca un nulo, entonces idx se fija al mínimo del índice de comparación o el índice de nulo, nullidx, PASO 418. Esto concluye el procesamiento.
Un ejemplo de lógica de bloque para el procesamiento de la FIG. 4 se representa en la FIG. 5. En este ejemplo, hay dos entradas, Vector B 500 y Vector A 502. Ambas entradas se introducen a la lógica de comparación 504, que realiza las comparaciones (por ejemplo, Igual) en paralelo. Además, una entrada, Vector A, también se introduce a la lógica de detección de ceros 506, que realiza procesamiento de nulos.
La salida de la lógica de comparación, idxL o idxR 508, se introduce a la lógica de determinación de resultado 512, así como a la salida de la lógica de detección de ceros, nullidx 510. La lógica de determinación de resultado también toma como entrada los siguientes controles: izquierda/derecha 514 que indica la dirección de la búsqueda; detección de ceros 516 que indica si el procesamiento de nulos va a ser realizado; y tamaño de elemento 518 que proporciona el tamaño de cada elemento (por ejemplo, octeto, media palabra, palabra); y produce un índice resultante 520, resultidx, que se almacena en un vector de salida 522 (por ejemplo, en el octeto 7).
Además, la lógica de determinación de resultado incluye procesamiento de código de condición 523, que opcionalmente saca un código de condición 524.
5
10
15
20
25
30
35
40
Ejemplos de seudo código para lógica de comparación 504 es como sigue:
idxL =16; idxR = 16
Para i = 0 a vectorjength Si A[i] = a B[¡] ENTONCES
idxL = i
Hecho
Para i = vectorjength hasta 0 Si A[¡] = a B[¡] ENTONCES
idxR = i
Hecho
Como se muestra, la variable idxL o idxR, dependiendo de la dirección, se inicializa al tamaño del vector (por ejemplo, en número de octetos; por ejemplo, 16). Entonces, cada elemento del Vector A se compara con un elemento correspondiente del Vector B. En un ejemplo, las comparaciones son comparaciones de octetos, así que se hace una comparación para cada uno de los 16 octetos (I). En este ejemplo, la operación de comparación es Igual y si se encuentra una Igualdad, el índice del octeto se almacena en IdxL si se busca desde la Izquierda o IdxR si se busca desde la derecha.
Un ejemplo de seudo código para lógica de detección de ceros 506 es como sigue: nullidx = 16
Para j = 0 a vectorjength Si A[j] == 0 ENTONCES nullidx =j x element_size Hecho
Como se muestra, cada elemento (j) del vector se prueba para ver si es igual a cero. Si un elemento es igual a cero, nullidx se fija igual al índice de ese elemento tantas veces el tamaño del elemento. Por ejemplo, si el tamaño del elemento es medias palabras (2 octetos) y se detecta un carácter nulo en el elemento 3, 3 se multiplica por 2 y nullidx se fija a 6, que representa el octeto 6. De manera similar, si el tamaño de elemento es la palabra completa (4 octetos) y se detecta un carácter nulo en el elemento 3, 3 se multiplica por 4 y nullidx se fija a 12.
Del mismo modo, un ejemplo de seudo código para lógica de determinación de resultado 512 es como sigue:
Si Izquierda/Derecha = Izquierda ENTONCES
cmpidx = idxL
DE OTRO MODO
cmpidx = idxR
SI zero_detect = ENCENDIDO ENTONCES resultidx = min(cmpidx, nullidx)
SI set_CC = ENCENDIDO && nullidx <= cmpidx ENTONCES CC = 0
DE OTRO MODO resultidx = cmpidx
SI element_size = octeto ENTONCES element_size_mask = ‘1111Tb SI element_s¡ze = 2octetos ENTONCES element_size_mask = ‘11110’b SI element_size = 4octetos ENTONCES element_size_mask = ‘11100’b
5
10
15
20
25
30
35
40
45
50
resultidx = resultidx & element_size_mask SI SetCC = ENCENDIDO ENTONCES SI nullidx < cmpidx ENTONCES CC = 0
DE OTRO MODO SI cmpidx < 16 ENTONCES CC = 1
DE OTRO MODO CC = 3
Como se muestra, si el control izquierda/derecha indica izquierda, entonces cmpidx se fija igual a idxL; de otro modo, cmpidx se fija igual a idxR. Además, si el indicador de detección de cero está encendido, entonces resultidx se fija igual al mínimo de cmpidx o nullidx; y si el control de conjunto de códigos de condición está encendido y cmpidx es mayor que nullidx, el código de condición se fija a cero. De otro modo, si la detección de ceros no está encendida, resultidx se fija igual a cmpidx.
Además, si el tamaño de elemento es igual a un octeto, entonces una máscara de tamaño de elemento se fija a ‘11111’; si el tamaño de elemento es igual a 2 octetos, la máscara se fija a ‘11110’ y si el tamaño de elemento es igual a 4 octetos, la máscara se fija a ‘11100’.
A partir de entonces, resultidx se fija igual a resultidx aplicando la función AND con la máscara de tamaño de elemento. Por ejemplo, si el tamaño de elemento es media palabra y el octeto 7 es resultidx, entonces resultidx = 00111 AND 11110, que proporciona 00110; así resultidx se fija igual a 6 (es decir, 00110 en binario), que es el primer octeto del elemento.
Adicionalmente, se fija opcionalmente un código de condición. Si el control de código de condición fijado de la instrucción se fija a encendido, entonces se proporciona un código de condición; de otro modo, no se fija ningún código de condición. Como ejemplos, si el control se fija a encendido, entonces si nullidx < cmpidx, el código de condición se fija a 0. De otro modo, si cmpidx <16, entonces el código de condición se fija a 1; de otro modo, el código de condición se fija a 3.
Descrito anteriormente está un ejemplo de una instrucción de vector usada para facilitar el procesamiento de datos de caracteres. Como se describe en la presente memoria, para un vector de 128 bit, la lógica de comparación solamente realiza comparaciones de 16 octetos, más que, por ejemplo, 256 comparaciones. Esto proporciona escalado para mayores vectores. Además, un control izquierda/derecha se puede proporcionar como un valor de tiempo de ejecución y no se codifica dentro de la instrucción. Aún además, el valor devuelto como el resultado es una posición de octeto, más que un índice de elemento. Además, se soportan comparaciones de 4 octetos junto con comparaciones de 1 octeto y de 2 octetos.
En una realización, hay 32 registros de vectores y otros tipos de registros pueden correlacionarse con un cuadrante de los registros de vectores. Por ejemplo, como se muestra en la FIG. 6, si hay un fichero de registro 600 que incluye 32 registros de vectores 602 y cada registro es de 128 bit de longitud, entonces los 16 registros de punto flotante 604, que son de 64 bit de longitud, pueden solapar los registros de vector. De esta manera, como ejemplo, cuando se modifica un registro de punto flotante 2, entonces también se modifica el registro de vector 2. También son posibles otras correlaciones para otros tipos de registros.
En un aspecto adicional de la invención, otra instrucción dotada con la facilidad del vector y usada según un aspecto de la presente invención es una instrucción de Encontrar Cualquier Igual de Vector, en la que todos los caracteres (o un subconjunto en otra realización) en un vector de entrada se comparan con cada carácter (o caracteres seleccionados) en otro vector de entrada. La salida se graba o bien como una máscara o bien un índice a un carácter que coincide. Esto es útil, por ejemplo, cuando se analizan sintácticamente datos de caracteres, tales como cadenas de datos. Cuando se analiza sintácticamente, una operación que se realiza es para buscar varios caracteres especiales antes de proceder al siguiente paso de análisis sintáctico. Esta instrucción permite buscar varios caracteres a la vez.
Un ejemplo de la instrucción Encontrar Cualquier Igual de Vector se representa en la FIG. 7, en la que en una realización, una instrucción Encontrar Cualquier Igual de Vector 700 incluye, por ejemplo, campos de código de operación 702a (por ejemplo, los bits 0-7), 702b (por ejemplo, los bits 40-47) que indican una operación Encontrar Cualquier Igual de Vector; un primer campo de registro de vector 704 (por ejemplo, los bits 8-11) usado para designar un primer registro de vector (V-i); un segundo campo de registro de vector 706 (por ejemplo, los bits 12-15) usado para designar un segundo registro de vector (V2); un tercer campo de registro de vector 708 (por ejemplo, bits 16-19) usado para designar un tercer registro de vector (V3); un primer campo de máscara (M5) 710 (por ejemplo, los bits 24-27); un segundo campo de máscara (M4) (por ejemplo, los bits 32-35) 712; y un campo RXB 714 (por
5
10
15
20
25
30
35
40
45
50
ejemplo, los bits 36-39). Cada uno de los campos 704-714, en un ejemplo, está separado y es Independiente del(de los) campo(s) de código de operación. Además, en una realización, están separados y son Independientes unos de otros; no obstante, en otras realizaciones, se puede combinar más de un campo. Información adicional sobre el uso de estos campos se describe más adelante.
Similar a lo anterior, en este ejemplo, los bits seleccionados (por ejemplo, los primeros dos bits) del código de operación designado por el campo de código de operación 702a especifican la longitud y formato de la Instrucción. En este ejemplo, los bits seleccionados indican que la longitud es tres medias palabras y el formato es un registro de vector - y la operación de registro con un campo de código de operación extendido. Cada uno de los campos de vector (V), junto con su bit de extensión correspondiente especificado por RXB, designa un registro de vector. En particular, para registros de vector, el registro que contiene el operando se especifica usando, por ejemplo, un campo de cuatro bits del campo de registro con la adición del bit de extensión de registro (RXB) como el bit más significativo. Por ejemplo, si el campo de cuatro bits es 0110 y el bit de extensión es 0, entonces el campo de cinco bits 00110 indica el número de registro 6.
El número de subíndice asociado con un campo de la instrucción indica el operando al que se aplica el campo. Por ejemplo, el número de subíndice 1 asociado con el registro de vector Vi indica el primer operando y así sucesivamente. Un operando de registro es un registro en longitud, que es, por ejemplo, de 128 bits.
El campo M4 que tiene, por ejemplo, cuatro bits, 0-3, especifica el control de tamaño de elemento en, por ejemplo, los bits 1-3. El control de tamaño de elemento especifica el tamaño de los elementos en los operandos de registro de vector. En un ejemplo, el control de tamaño de elemento especifica un octeto, media palabra (por ejemplo, 2 octetos) o palabra (por ejemplo, 4 octetos). Por ejemplo, un 0 indica un octeto; un 1 indica una media palabra; y un 2 indica una palabra, también conocida como una palabra completa. Si se especifica un valor reservado, se reconoce una excepción de especificación.
El campo M5 es, por ejemplo, un campo de cuatro bits, bits 0-3, que incluye, por ejemplo:
Un campo de tipo resultado (RT, bit 1), que si es cero, cada elemento resultante es una máscara de toda la gama de comparaciones sobre ese elemento. Si es uno, un índice de octeto se almacena en un octeto especificado (por ejemplo, el octeto 7) del primer operando y se almacenan ceros en todos los otros elementos;
Un campo de búsqueda de ceros (ZS, bit 2), que si es uno, cada elemento del segundo operando (u otro operando) se compara con cero; y
Un campo de conjunto de códigos de condición (CC, bit 3), que si es cero, el código de condición no se fija y permanece sin cambios. Si es uno, el código de condición se fija como sigue, en un ejemplo:
0 - Si el bit de búsqueda de ceros está fijado, no hubo coincidencias en un elemento de índice inferior distinto de cero en el segundo operando.
1 - Algunos elementos del segundo operando coinciden con al menos un elemento en el tercer operando;
2 - Todos los elementos del segundo operando coinciden con al menos un elemento en el tercer operando; y
3 - Ningún elemento del segundo operando coincide con ningún elemento en el tercer operando.
En ejecución de una realización de la instrucción Encontrar Cualquier Igual de Vector, procediendo, en un ejemplo, de izquierda a derecha, cada elemento entero binario sin signo del segundo operando (incluido dentro de un registro designado por V2 más RXB) se compara para igualdad con cada elemento entero binario sin signo del tercer operando (incluido dentro de un registro designado por V3 más RXB) y opcionalmente, cero, si la marca de búsqueda de ceros se fija en el campo M5.
Si la marca de tipo resultado en el campo M5 es cero, entonces para cada elemento en el segundo operando que coincide con cualquier elemento en el tercer operando u opcionalmente cero, las posiciones de bits del elemento correspondiente en el primer operando (incluido dentro de un registro designado por Vi más RXB) se fijan a unos; de otro modo, se fijan a cero.
Si la marca de tipo resultado en el campo M5 es uno, entonces un índice de octeto del elemento de más a la izquierda (por ejemplo, un índice de octeto del primer octeto del elemento) en el segundo operando que coincide con un elemento en el tercer operando o cero se almacena en el octeto especificado (por ejemplo, el octeto 7) del primer operando.
Si la marca de tipo resultado en el campo M5 es uno y no se encuentran octetos que sean iguales o cero si la marca de búsqueda de ceros está fijada, entonces un índice igual al tamaño del vector (por ejemplo, número de octetos; por ejemplo, 16) se almacena en el octeto especificado (por ejemplo, el octeto 7) del primer operando.
En una realización, la dirección de los vectores, izquierda a derecha o derecha a izquierda, se proporciona en el tiempo de ejecución. Por ejemplo, la instrucción accede a un registro, control de estado u otra entidad que indica la
5
10
15
20
25
30
35
40
45
50
55
dirección de procesamiento como o bien izquierda a derecha o bien derecha a izquierda, como ejemplos. En una realización, este control de dirección no se codifica como parte de la instrucción, sino que se proporciona a la instrucción en el tiempo de ejecución.
En una realización adicional, la instrucción no incluye el campo RXB. En su lugar, no se usa ninguna extensión o la extensión se proporciona de otra manera, tal como desde un control fuera de la instrucción o proporcionado como parte de otro campo de la instrucción.
Detalles adicionales con respecto a una realización de la instrucción Encontrar Cualquier Igual de Vector se describen con referencia a la FIG. 8. En un ejemplo, un procesador del entorno informático está realizando esta lógica.
Inicialmente, se inicializan variables conocidas como zeroidx 802, resultidx 804 y resultmask 806, PASO 800. Por ejemplo, zeroidx se fija igual al tamaño del segundo operando (por ejemplo, 16); resultidx se fija igual al tamaño del segundo operando (por ejemplo, 16); y resultmask se fija igual a todo ceros. Resultmask, en una realización, incluye 128 bits que corresponden a los 128 bits del segundo operando.
A partir de entonces, se carga un carácter (es decir, un elemento) desde un operando, conocido en la presente memoria como opA, que es, por ejemplo, el segundo operando de la instrucción, PASO 808. A partir de entonces, se hace una determinación en cuanto a si el campo de búsqueda de ceros se fija indicando una búsqueda de ceros y zeroidx se fija igual a 16, CONSULTA 810. Si es así, se realiza una búsqueda de ceros, PASO 812 y el resultado se saca a zeroidx 802 y resultmask 806. Por ejemplo, un índice de octeto del octeto de más a la izquierda del elemento cero se indica en zeroidx y los bits que corresponden a ese elemento en resultmask se fijan a uno. Por ejemplo, para zeroidx, si el tamaño de elemento es octetos y un elemento cero se encuentra en el octeto 5, el índice del octeto en el que se encuentra el elemento cero (por ejemplo, 5) se coloca en zeroidx. De manera similar, si el tamaño de elemento es media palabra y hay 8 elementos, 0-7 y el elemento tres (es decir, los octetos 6-7) es cero, entonces 6 (para índice de octeto 6) se coloca en zeroidx. Del mismo modo, si el tamaño de elemento es palabra completa y hay cuatro elementos, 0-3 y el elemento uno (es decir, los octetos 4-7) es cero, entonces 4 (para índice de octeto 4) se coloca en zeroidx. Si no se encuentra ningún elemento nulo, entonces, en un ejemplo, el tamaño del vector (por ejemplo, en octetos; por ejemplo, 16) se coloca en zeroidx.
A partir de entonces o si una búsqueda de ceros no va a ser realizada, entonces el carácter cargado se compara con cada carácter en un operando, conocido en la presente memoria como opB, que es, por ejemplo, el tercer operando en la instrucción, PASO 818. Si hay una coincidencia, la coincidencia se indica en resultidx 804 y resultmask 806. Por ejemplo, resultidx se fija igual al primer octeto del elemento que coincide y los bits en resultmask que corresponde al elemento se fijan iguales a uno. Como ejemplo, para resultidx, si el tamaño de elemento es octetos y hay 16 elementos en el vector (0-15) y se encuentra una igualdad en el elemento 6, entonces 6 se almacena en resultidx. De manera similar, si el tamaño de elemento es medias palabras y por lo tanto hay 8 elementos en el vector (0-7) y se encuentra una igualdad en el elemento 3 (por ejemplo, en el octeto 6 o 7), se devuelve el índice del primer octeto del elemento (octeto 6). Del mismo modo, si el tamaño de elemento es palabra completa y hay cuatro elementos (0-3) y se encuentra una igualdad en el elemento 1 (por ejemplo, en el octeto 4-7), se devuelve el índice del primer octeto del elemento (octeto 4). Si no hay comparaciones iguales, entonces, en una realización, resultidx se fija igual al tamaño del vector (por ejemplo, en octetos; por ejemplo, 16).
A partir de entonces, se hace una determinación en cuanto a si se ha alcanzado el final de opA, CONSULTA 830. Si no, cuando se aumenta la variable i, por ejemplo, en uno, PASO 832 y el procesamiento continúa con el PASO 808. De otro modo, el procesamiento continúa con la determinación de si el tipo de resultado es igual a cero, CONSULTA 834. Si el tipo de resultado es igual a cero, entonces un operando que se conoce en la presente memoria como opC, que es, por ejemplo, el primer operando de la instrucción, se fija igual a resultmask, PASO 836. De otro modo, un octeto especificado (por ejemplo, el octeto 7) de opC se fija igual al mínimo de resultidx y zeroidx (y los otros octetos se fijan a cero), PASO 838.
Posterior a colocar el resultado en opC, se hace una determinación en cuanto a si el campo de conjunto de códigos de condición indica que el código de condición va a ser fijado, CONSULTA 840. Si un campo de conjunto de códigos de condición está fijado a uno, entonces el código de condición se fija, PASO 842. Por ejemplo, el código de condición se fija a cero si el campo ZS está fijado y no hubo coincidencias en un elemento de índice inferior distinto de cero en el segundo operando; fijado a uno si algunos elementos del segundo operando coinciden con al menos un elemento en el tercer operando; fijado a 2 si todos los elementos del segundo operando coincidieron con al menos un elemento en el tercer operando; y fijado a 3 si ningún elemento del segundo operando coincide con ningún elemento en el tercer operando. De otro modo, si el campo de conjuntos de códigos de condición es igual a cero, entonces no se fija ningún código de condición.
Como se describe en la presente memoria, en una realización, se proporciona una instrucción Encontrar Cualquier Igual de Vector que es capaz de alternar entre proporcionar y no proporcionar una búsqueda de ceros y es capaz de devolver condicionalmente un índice de octeto de o bien un elemento cero o bien un elemento igual. Este índice de octeto es el primer octeto del elemento que se notifica. Si se busca un elemento cero, entonces se puede proporcionar la posición de ese elemento cero. De esta manera, se proporciona una instrucción que tiene un código
5
10
15
20
25
30
35
40
45
50
55
de operación particular en la que esa instrucción es capaz de realizar una comparación con una búsqueda de ceros o una comparación sin búsqueda de ceros.
Descritos anteriormente están ejemplos de instrucciones de vector usadas para facilitar procesamiento de datos de caracteres. Como se describe en la presente memoria, para la instrucción Encontrar Elemento Igual de Vector con vectores de 128 bits, la lógica de comparación solamente realiza comparaciones de 16 octetos, en lugar de, por ejemplo, 256 comparaciones. Esto proporciona escalado para vectores mayores. Además, o bien para la instrucción Encontrar Elemento Igual de Vector o bien Encontrar Cualquier Igual de Vector, un control de izquierda/derecha se puede proporcionar como un valor de tiempo de ejecución y no codificar dentro de la instrucción. Aún además, el valor devuelto como el resultado es una posición de octeto, en lugar de un índice de elemento. Además, se soportan comparaciones de 4 octetos junto con comparaciones de 1 octeto y 2 octetos.
Según un aspecto de la presente invención, se proporciona opcionalmente un código de condición en base a un control proporcionado con la instrucción. Permitiendo que el código de condición sea fijado, se facilita la programación de una Instrucción.
En una realización adicional, la búsqueda de ceros no es una condición, pero en su lugar, se realiza cuando se ejecuta la instrucción. En base a o en respuesta a ejecutar la instrucción, se realiza la búsqueda de ceros y, en un ejemplo, se devuelve la posición (por ejemplo, el índice de octeto) del elemento cero y/o la posición (por ejemplo, el índice de octeto) del primer elemento coincidente. En una realización, el número de comparaciones que se realizan, con independencia de la realización, para la instrucción Encontrar Elemento Igual de Vector corresponde al número de octetos del vector. Por ejemplo, si el vector que es buscado o comparado es de 16 octetos, entonces se realizan a lo sumo 16 comparaciones, por ejemplo, en paralelo. En una realización adicional, una vez que se encuentra una coincidencia o elemento cero, la comparación cesa.
En la presente memoria, se usan intercambiablemente memoria, memoria principal, almacenamiento y almacenamiento principal, a menos que se señale de otro modo explícitamente o por el contexto.
Detalles adicionales relativos a la facilidad de vector, incluyendo ejemplos de otras instrucciones, se proporcionan como parte de esta Descripción Detallada además más adelante.
Como se apreciará por un experto en la técnica, uno o más aspectos de la presente invención se pueden incorporar como un sistema, método o producto de programa de ordenador. Por consiguiente, uno o más aspectos de la presente Invención pueden tomar la forma de una realización enteramente hardware, una realización enteramente software (incluyendo microprogramas, software residente, microcódigo, etc.) o una realización que combina aspectos de software y hardware que se pueden conocer todos de manera general en la presente memoria como un “circuito”, “módulo” o “sistema”. Además, uno o más aspectos de la presente Invención pueden tomar la forma de un producto de programa de ordenador incorporado en uno o más medios legibles por ordenador que tienen un código de programa legible por ordenador incorporado en el mismo.
Se puede utilizar cualquier combinación de uno o más medios legibles por ordenador. El medio legible por ordenador puede ser un medio de almacenamiento legible por ordenador. Un medio de almacenamiento legible por ordenador puede ser, por ejemplo, pero no limitado a, un sistema, aparato o dispositivo electrónico, magnético, óptico, electromagnético, de infrarrojos o de semiconductores o cualquier combinación adecuada de los precedentes. Ejemplos más específicos (una lista no exhaustiva) del medio de almacenamiento incluyen los siguientes: una conexión eléctrica que tiene uno o más hilos, un disquete de ordenador portátil, un disco duro, una memoria de acceso aleatorio (RAM), una memoria de solo lectura (ROM), una memoria de solo lectura programable borrable (EPROM o memoria rápida), una fibra óptica, una memora de solo lectura de disco compacto portátil (CD-ROM), un dispositivo de almacenamiento óptico, un dispositivo de almacenamiento magnético o cualquier combinación adecuada de los precedentes. En el contexto de este documento, un medio de almacenamiento legible por ordenador puede ser cualquier medio tangible que pueda contener o almacenar un programa para uso por o en conexión con un sistema, aparato o dispositivo de ejecución de instrucciones.
Con referencia ahora a la FIG. 9, en un ejemplo, un producto de programa de ordenador 900 incluye, por ejemplo, uno o más medios de almacenamiento legibles por ordenador no transitorios 902 para almacenar medios o lógica de código de programa legibles por ordenador 904 en los mismos para proporcionar y facilitar uno o más aspectos de la presente invención.
Un código de programa incorporado en un medio legible por ordenador se puede transmitir usando un medio adecuado, incluyendo pero no limitado a inalámbrico, cableado, cable de fibra óptica, RF, etc. o cualquier combinación de los precedentes.
Un código de programa de ordenador para llevar a cabo operaciones para uno o más aspectos de la presente invención se puede escribir en cualquier combinación de uno o más lenguajes de programación, incluyendo un lenguaje de programación orientado a objeto, tal como Java, Smalltalk, C++ o similares y lenguajes de programación de procedimiento convencional, tales como el lenguaje de programación “C”, ensamblador o lenguajes de programación similares. El código de programa puede ejecutarse enteramente en el ordenador del usuario, parcialmente en el ordenador del usuario, como un paquete software autónomo, parcialmente en el ordenador del
5
10
15
20
25
30
35
40
45
50
55
usuario y parcialmente en un ordenador remoto o enteramente en el ordenador o servidor remoto. En este último escenario, el ordenador remoto se puede conectar al ordenador del usuario a través de cualquier tipo de red, incluyendo una red de área local (LAN) o una red de área extensa (WAN) o la conexión se puede hacer a un ordenador externo (por ejemplo, a través de Internet usando un Proveedor de Servicios de Internet).
Uno o más aspectos de la presente invención se describen en la presente memoria con referencia a ilustraciones de diagrama de flujo y/o diagramas de bloques de métodos, aparatos (sistemas) y productos de programa de ordenador según realizaciones de la invención. Se entenderá que cada bloque de las ilustraciones de diagrama de flujo y/o diagramas de bloques y combinaciones de bloques en las ilustraciones de diagrama de flujo y/o diagramas de bloques, se pueden implementar por instrucciones de programa de ordenador. Estas instrucciones de programa de ordenador se pueden proporcionar a un procesador de un ordenador de propósito general, ordenador de propósito especial u otro aparato de procesamiento de datos programable para producir una máquina, de manera que las instrucciones, que se ejecutan a través del procesador del ordenador u otro aparato de procesamiento de datos programable, crean medios para implementar las funcionalidades/actos especificados en el diagrama de flujo y/o bloque o bloques del diagramas de bloques,
Estas instrucciones de programa de ordenador también se pueden almacenar en un medio legible por ordenador que puede dirigir un ordenador, otro aparato de procesamiento de datos programable u otros dispositivos para funcionar de una manera particular, de manera que las instrucciones almacenadas en el medio legible por ordenador producen un artículo de fabricación que incluye instrucciones que implementan la función/acto especificado en el diagrama de flujo y/o bloque o bloques de diagrama de bloques.
Las instrucciones de programa de ordenador también se pueden cargar en un ordenador, otro aparato de procesamiento de datos programable u otros dispositivos para hacer que una serie de pasos operacionales sean realizados en el ordenador, otro aparato programable u otros dispositivos para producir un proceso implementado por ordenador de manera que las instrucciones que se ejecutan en el ordenador u otro aparato programable proporcionan procesos para implementar las funciones/actos especificados en el diagrama de flujo y/o bloque o bloques de diagrama de bloques.
El diagrama de flujo y los diagramas de bloques en las figuras ilustran la arquitectura, funcionalidad y operación de implementaciones posibles de sistemas, métodos y productos de programa de ordenador según varias realizaciones de uno o más aspectos de la presente invención. A este respecto, cada bloque en el diagrama de flujo o diagramas de bloques puede representar un módulo, segmento o porción de código, que comprende una o más instrucciones ejecutables para implementar la(s) función(funciones) lógica(s) especificada(s). También se debería señalar que, en algunas implementaciones alternativas, las funciones señaladas en el bloque pueden ocurrir fuera del orden señalado en las figuras. Por ejemplo, dos bloques mostrados en sucesión se pueden ejecutar, de hecho, sustancialmente concurrentemente o los bloques algunas veces se pueden ejecutar en el orden inverso, dependiendo de la funcionalidad implicada. También se señalará que cada bloque de los diagramas de bloques y/o ilustración de diagrama de flujo y combinaciones de bloques en los diagramas de bloques y/o ilustración de diagrama de flujo, se puede implementar por sistemas basados en hardware de propósito especial que realizan las funciones o actos especificados o combinaciones de instrucciones hardware y de ordenador de propósito especial.
Además de lo anterior, uno o más aspectos de la presente invención se pueden proporcionar, ofrecer, desplegar, gestionar, servir, etc. por un proveedor de servicios que ofrezca gestión de entornos de cliente. Por ejemplo, el proveedor de servicios puede crear, mantener, soportar, etc. código de ordenador y/o una infraestructura de ordenador que realiza uno o más aspectos de la presente invención para uno o más clientes. A cambio, el proveedor de servicios puede recibir un pago del cliente bajo una suscripción y/o acuerdo de tarifa, como ejemplos. Adicional o alternativamente, el proveedor de servicios puede recibir un pago de la venta de contenido de publicidad a una o más terceras partes.
En un aspecto de la presente invención, se puede desplegar una aplicación para realizar uno o más aspectos de la presente invención. Como ejemplo, el despliegue de una aplicación comprende proporcionar infraestructura de ordenador operable para realizar uno o más aspectos de la presente invención.
Como un aspecto adicional de la presente invención, se puede desplegar una infraestructura informática que comprende integrar código legible por ordenador en un sistema informático, en el que el código en combinación con el sistema informático es capaz de realizar uno o más aspectos de la presente invención.
Aún como un aspecto adicional de la presente invención, se puede proporcionar un proceso para integrar infraestructura informática que comprende integrar código legible por ordenador en un sistema de ordenador. El sistema de ordenador comprende un medio legible por ordenador, en el que el medio de ordenador comprende uno o más aspectos de la presente invención. El código en combinación con el sistema de ordenador es capaz de realizar uno o más aspectos de la presente invención.
Aunque se describieron anteriormente varias realizaciones, estas son solamente ejemplos. Por ejemplo, entornos informáticos de otras arquitecturas pueden incorporar y usar uno o más aspectos de la presente invención. Además, se pueden usar vectores de otros tamaños y se pueden hacer cambios a las instrucciones sin apartarse del espíritu
5
10
15
20
25
30
35
40
45
50
55
60
de la presente invención. Adicionalmente, se pueden usar registros distintos de los registros de vector y/o los datos pueden ser distintos de datos de caracteres, tales como datos enteros u otros tipos de datos.
Además, otros tipos de entornos informáticos pueden beneficiarse de uno o más aspectos de la presente invención. Como ejemplo, es utilizable un sistema de procesamiento de datos adecuado para almacenar y/o ejecutar código de programa que incluye al menos dos procesadores acoplados directa o indirectamente a elementos de memoria a través del canal principal del sistema. Los elementos de memoria incluyen, por ejemplo, memoria local empleada durante la ejecución real del código de programa, almacenamiento en masa y memoria caché que proporcionan almacenamiento temporal de al menos algún código de programa a fin de reducir el número de veces que el código debe ser recuperado de almacenamiento en masa durante la ejecución.
Los dispositivos de Entrada/Salida o l/O (incluyendo, pero no limitados a, teclados, visualizadores, dispositivos de puntero, DASD, cinta, CD, DVD, memorias USB y otros medios de memoria, etc.) se pueden acoplar al sistema o bien directamente o bien a través de controladores de l/O intervinientes. Los adaptadores de red también se pueden acoplar al sistema para permitir al sistema de procesamiento de datos llegar a estar acoplado a otros sistemas de procesamiento de datos o impresoras remotas o dispositivos de almacenamiento a través de redes privadas o públicas intervinientes. Módems, cable módems y tarjetas Ethernet son solo unos pocos de los tipos de adaptadores de red disponibles.
Con referencia a la FIG. 10, se representan componentes representativos de un sistema de Ordenador Central 5000 para implementar uno o más aspectos de la presente invención. El ordenador central representativo 5000 comprende una o más CPU 5001 en comunicación con memoria de ordenador (es decir, almacenamiento central) 5002, así como interfaces de l/O para almacenar dispositivos de medios 5011 y redes 5010 para comunicar con otros ordenadores o SAN y similares. La CPU 5001 es compatible con una arquitectura que tiene un conjunto de instrucciones de arquitectura y funcionalidad de arquitectura. La CPU 5001 puede tener traducción de direcciones dinámica (DAT) 5003 para transformar direcciones de programa (direcciones virtuales) en direcciones reales de memoria. Una DAT típicamente incluye un almacenador temporal de traducción anticipada de instrucciones (TLB) 5007 para almacenar en caché traducciones de manera que los accesos posteriores al bloque de memoria de ordenador 5002 no requieren el retardo de la traducción de dirección. Típicamente, una caché 5009 se emplea entre la memoria de ordenador 5002 y el procesador 5001. La caché 5009 puede ser jerárquica que tiene una caché grande disponible para más de una CPU y cachés más pequeñas, más rápidas (menor nivel) entre la caché grande y cada CPU. En algunas implementaciones, las cachés de nivel inferior se dividen para proporcionar cachés de nivel bajo separadas para traer instrucciones y accesos de datos. En una realización, una instrucción se trae de la memoria 5002 por una unidad de búsqueda de instrucción 5004 a través de una caché 5009. La instrucción se decodifica en una unidad de decodificación de instrucción 5006 y despacha (con otras instrucciones en algunas realizaciones) a la unidad o unidades de ejecución de instrucción 5008. Típicamente se emplean varias unidades de ejecución 5008, por ejemplo una unidad de ejecución aritmética, una unidad de ejecución de punto flotante y una unidad de ejecución de instrucciones de ramal. La instrucción se ejecuta por la unidad de ejecución, que accede a operandos desde registros específicos de instrucción o memoria según se necesita. Si un operando va a ser accedido (cargado o almacenado) desde la memoria 5002, una unidad de carga/almacén 5005 típicamente maneja el acceso bajo control de la instrucción que se ejecuta. Las instrucciones se pueden ejecutar en circuitos hardware o en microcódigo interno (microprogramas) o por una combinación de ambos.
Como se señala, un sistema informático incluye información en almacenamiento local (o principal), así como direccionamiento, protección y referencia y grabación de cambio. Algunos aspectos de direccionamiento incluyen el formato de direcciones, el concepto de espacios de dirección, los diversos tipos de direcciones y la manera en la que un tipo de dirección se traduce a otro tipo de dirección. Algo del almacenamiento principal incluye localizaciones de almacenamiento asignadas permanentemente. El almacenamiento principal dota al sistema con almacenamiento de datos de acceso rápido directamente direccionable. Tanto los datos como los programas van a ser cargados en el almacenamiento principal (desde dispositivos de entrada) antes de que se puedan procesar.
El almacenamiento principal puede incluir uno o más almacenamientos de almacenador temporal de acceso más rápidos, más pequeños, algunas veces llamados cachés. Una caché típicamente está asociada físicamente con una CPU o un procesador de l/O. Los efectos, excepto en el rendimiento, de la construcción física y uso de distintos medios de almacenamiento son generalmente no observables por el programa.
Las cachés separadas se pueden mantener para instrucciones y para operandos de datos. La información dentro de una caché se mantiene en octetos contiguos en un límite integral llamado un bloque de caché o línea de caché (o línea, para abreviar). Un modelo puede proporcionar una instrucción EXTRAER ATRIBUTO DE CACHÉ que devuelve el tamaño de una línea de caché en octetos. Un modelo también puede proporcionar instrucciones TRAER PREVIAMENTE DATOS y TRAER PREVIAMENTE DATOS RELATIVOS LARGOS que efectúa la búsqueda previa de almacenamiento en los datos o instrucción de caché o la liberación de datos desde la caché.
El almacenamiento se ve como una cadena de bits horizontal larga. Para la mayoría de operaciones, los accesos a almacenamiento pasan en una secuencia de izquierda a derecha. La cadena de bits se subdivide en unidades de ocho bits. Una unidad de ocho bits se llama un octeto, que es el bloque de construcción básico de todos los formatos de información. La localización de cada octeto en almacenamiento se identifica por un entero no negativo único, que
5
10
15
20
25
30
35
40
45
50
55
60
es la dirección de localización de ese octeto o, simplemente, la dirección del octeto. Las localizaciones de octeto adyacente tienen direcciones consecutivas, que comienzan con 0 en la izquierda y que proceden en una secuencia de izquierda a derecha. Las direcciones son enteros binarios sin signo y son de 24, 31 o 64 bits.
Se transmite información entre el almacenamiento y una CPU o un subsistema de canal un octeto o un grupo de octetos, a la vez. A menos que se especifique de otro modo, en, por ejemplo, la z/Architecture, un grupo de octetos en almacenamiento se direcciona por el octeto de más a la izquierda del grupo. El número de octetos en el grupo o bien está implícito o bien se especifica explícitamente por la operación a ser realizada. Cuando se usa en una operación de CPU, un grupo de octetos se llama campo. Dentro de cada grupo de octetos, en, por ejemplo, la z/Architecture, los bits se numeran en una secuencia de izquierda a derecha. En la z/Architecture, los bits de más a la izquierda se conocen algunas veces como los bits “de orden alto” y los bits de más a la derecha como los bits “de orden bajo”. Los números de bit no son direcciones de almacenamiento, no obstante. Solamente se pueden direccionar octetos. Para operar sobre bits individuales de un octeto en el almacenamiento, se accede al octeto entero. Los bits en un octeto se numeran de 0 hasta 7, de izquierda a derecha (en, por ejemplo, la z/Architecture). Los bits en una dirección se pueden numerar 8-31 o 40-63 para direcciones de 24 bits o 1-31 o 33-63 para direcciones de 31 bits; se numeran 0-63 para direcciones de 64 bits. Dentro de cualquier otro formato de longitud fija de múltiples octetos, los bits que componen el formato se numeran consecutivamente comenzando desde 0. Para propósitos de detección de errores y preferiblemente para corrección, se pueden transmitir uno o más bits de comprobación con cada octeto o con un grupo de octetos. Tales bits de comprobación se generan automáticamente por la máquina y no se pueden controlar directamente por el programa. Las capacidades de almacenamiento se expresan en número de octetos. Cuando la longitud de un campo de operando de almacenamiento está implícita por el código de operación de una instrucción, el campo se dice que tiene una longitud fija, que puede ser de uno, dos, cuatro, ocho o dieciséis octetos. Pueden estar implicados campos más grandes para algunas instrucciones. Cuando la longitud de un campo de operando de almacenamiento no está implícita sino que se expresa explícitamente, el campo se dice que tiene una longitud variable. Los operandos de longitud variable pueden variar de longitud en incrementos de un octeto (o con algunas Instrucciones, en múltiplos de dos octetos u otros múltiplos). Cuando la información se coloca en el almacenamiento, se sustituyen los contenidos de solamente aquellas localizaciones de octetos que se incluyen en el campo designado, incluso aunque la anchura del camino físico al almacenamiento pueda ser mayor que la longitud del campo que se almacena.
Ciertas unidades de información van a estar en un límite integral en el almacenamiento. Un límite se llama Integral para una unidad de información cuando su dirección de almacenamiento es un múltiplo de la longitud de la unidad en octetos. Se dan nombres especiales a los campos de 2, 4, 8 y 16 octetos en un límite Integral. Una media palabra es un grupo de dos octetos consecutivos en un límite de dos octetos y es el bloque de construcción básico de instrucciones. Una palabra es un grupo de cuatro octetos consecutivos en un límite de cuatro octetos. Una palabra doble es un grupo de ocho octetos consecutivos en un límite de ocho octetos. Una palabra cuádruple es un grupo de 16 octetos consecutivos en un límite de 16 octetos. Cuando las direcciones de almacenamiento designan medias palabras, palabras, palabras dobles y palabras cuádruples, la representación binaria de la dirección contiene uno, dos, tres o cuatro bits cero de más a la derecha, respectivamente. Las instrucciones van a estar en limites integrales de dos octetos. Los operandos de almacenamiento de la mayoría de las Instrucciones no tienen requisitos de límite de alineamiento.
En dispositivos que implementan cachés separadas para instrucciones y operandos de datos, se puede experimentar un retardo significativo si el programa almacena en una línea de caché desde la cual se traen posteriormente instrucciones, con independencia de si el almacén altera las instrucciones que se traen posteriormente.
En una realización, la invención se puede poner en práctica mediante software (algunas veces conocido como código interno con licencia, microprogramas, microcódigo, milicódigo, pico código y similares, cualquiera de los cuales sería coherente con uno o más aspectos de la presente invención). Con referencia a la FIG. 10, se puede acceder al código de programa software que incorpora uno o más aspectos de la presente Invención mediante el procesador 5001 del sistema central 5000 desde dispositivos de medios de almacenamiento a largo plazo 5011, tales como una unidad de CD-ROM, unidad de cinta o disco duro. El código de programa software se puede incorporar en cualquiera de una variedad de medios conocidos para uso con un sistema de procesamiento de datos, tal como un disquete, disco duro o CD-ROM. El código se puede distribuir en tales medios o se puede distribuir a usuarios desde la memoria de ordenador 5002 o almacenamiento de un sistema de ordenador sobre una red 5010 a otros sistemas de ordenador para uso por usuarios de tales otros sistemas.
El código de programa software incluye un sistema operativo que controla la función e interacción de los diversos componentes de ordenador y uno o más programas de aplicaciones. El código de programa está paginado normalmente desde el dispositivo de medios de almacenamiento 5011 al almacenamiento de ordenador de velocidad relativamente más alta 5002 donde está disponible para procesamiento por el procesador 5001. Las técnicas y métodos para incorporar código de programa software en memoria, en medios físicos y/o código software de distribución a través de redes es bien conocido y no ser tratará más en la presente memoria. El código de programa, cuando se crea y almacena en un medio tangible (incluyendo pero no limitado a módulos de memoria electrónicos (RAM), la memoria rápida, Discos Compactos (CD), DVD, Cinta Magnética y similares se conoce a menudo como “producto de programa de ordenador”. El medio de producto de programa de ordenador es
5
10
15
20
25
30
35
40
45
50
55
típicamente legible por un circuito de procesamiento preferiblemente en un sistema de ordenador para ejecución por el circuito de procesamiento.
La FIG. 11 ilustra un sistema hardware de estación de trabajo o servidor representativo en el que se pueden poner en práctica uno o más aspectos de la presente invención. El sistema 5020 de la FIG. 11 comprende un sistema de ordenador base representativo 5021, tal como un ordenador personal, una estación de trabajo o un servidor, incluyendo dispositivos periféricos opcionales. El sistema de ordenador base 5021 incluye uno o más procesadores 5026 y un canal principal empleado para conectar y permitir la comunicación entre el(los) procesador(es) 5026 y los otros componentes del sistema 5021 según técnicas conocidas. El canal principal conecta el procesador 5026 a la memoria 5025 y el almacenamiento a largo plazo 5027 que puede incluir un disco duro (incluyendo cualquiera de medios magnéticos, CD, DVD y Memoria Rápida por ejemplo) o una unidad de cinta por ejemplo. El sistema 5021 también pudiera incluir un adaptador de interfaz de usuario, que conecta el microprocesador 5026 a través del canal principal a uno o más dispositivos de interfaz, tales como un teclado 5024, un ratón 5023, una impresora/escáner 5030 y/u otros dispositivos de interfaz, que pueden ser cualquier dispositivo de interfaz de usuario, tal como una pantalla sensible al tacto, almohadilla de entrada digitalizada, etc. El canal principal también conecta un dispositivo de visualización 5022, tal como una pantalla o monitor LCD, al microprocesador 5026 a través de un adaptador de visualización.
El sistema 5021 puede comunicar con otros ordenadores o redes de ordenadores por medio de un adaptador de red capaz de comunicar 5028 con una red 5029. Adaptadores de red ejemplo son canales de comunicaciones, token ring, Ethernet o módem. Alternativamente, el sistema 5021 puede comunicar usando una interfaz inalámbrica, tal como una tarjeta de CDPD (datos por paquetes digitales celulares). El sistema 5021 se puede asociar con tales otros ordenadores en una Red de Área Local (LAN) o una Red de Área Extensa (WAN) o el sistema 5021 puede ser un cliente en una disposición cliente/servidor con otro ordenador, etc. Todas estas configuraciones, así como el hardware o software de comunicaciones adecuado, son conocidas en la técnica.
La FIG. 12 ilustra una red de procesamiento de datos 5040 en la que se pueden poner en práctica uno o más aspectos de la presente invención. La red de procesamiento de datos 5040 puede incluir una pluralidad de redes individuales, tales como una red inalámbrica y una red cableada, cada una de las cuales puede incluir una pluralidad de estaciones de trabajo individuales 5041, 5042, 5043, 5044. Adicionalmente, como apreciarán los expertos en la técnica, se pueden incluir una o más LAN, donde una LAN puede comprender una pluralidad de estaciones de trabajo inteligentes acopladas a un procesador central.
Aún con referencia a la FIG. 12, las redes también pueden incluir grandes ordenadores o servidores, tales como un ordenador pasarela (cliente servidor 5046) o servidor de aplicaciones (servidor remoto 5048 que puede acceder a un repositorio de datos y al que también se puede acceder directamente desde una estación de trabajo 5045). Un ordenador pasarela 5046 sirve como un punto de entrada en cada red individual. Se necesita una pasarela cuando se conecta un protocolo de interconexión con otro. La pasarela 5046 se puede acoplar preferiblemente a otra red (Internet 5047 por ejemplo) por medio de un enlace de comunicaciones. La pasarela 5046 también se puede acoplar directamente a una o más estaciones de trabajo 5041, 5042, 5043, 5044 usando un enlace de comunicaciones. El ordenador pasarela se puede implementar utilizando un servidor IBM eServer™ System z disponible en International Business Machines Corporation.
Con referencia concurrentemente a la FIG. 11 y la FIG. 12, se puede acceder a código de programación software que puede incorporar uno o más aspectos de la presente invención por el procesador 5026 del sistema 5020 desde medios de almacenamiento a largo plazo 5027, tales como una unidad de CD-ROM o disco duro. El código de programación software se puede incorporar en cualquiera de una variedad de medios conocidos para uso con un sistema de procesamiento de datos, tal como un disquete, disco duro o CD-ROM. El código se puede distribuir en tales medios o se puede distribuir a los usuarios 5050, 5051 desde la memoria o almacenamiento de un sistema de ordenador sobre una red a otros sistemas de ordenadores para uso por usuarios de tales otros sistemas.
Alternativamente, el código de programación se puede incorporar en la memoria 5025 y acceder por el procesador 5026 usando el canal principal del procesador. Tal código de programación incluye un sistema operativo que controla la función e interacción de los diversos componentes informáticos y uno o más programas de aplicaciones 5032. El código de programa se pagina normalmente desde los medios de almacenamiento 5027 a la memoria de alta velocidad 5025 donde está disponible para procesamiento por el procesador 5026. Las técnicas y métodos para incorporar código de programación software en memoria, en medios físicos y/o distribución de código software a través de redes son bien conocidos y no se tratarán más en la presente memoria. El código de programa, cuando se crea y almacena en un medio tangible (incluyendo pero no limitado a módulos de memoria electrónicos (RAM), memoria rápida, Discos Compactos (CD), DVD, Cinta Magnética y similares a menudo se conoce como un “producto de programa de ordenador”. El medio de producto de programa de ordenador típicamente es legible por un circuito de procesamiento preferiblemente en un sistema de ordenador para ejecución por el circuito de procesamiento.
La caché que está disponible más fácilmente al procesador (normalmente más rápida y más pequeña que otras cachés del procesador) es la caché más baja (L1 o nivel uno) y el almacenamiento principal (memoria principal) es la caché del nivel más alto (L3 si hay 3 niveles). La caché del nivel más bajo se divide a menudo en una caché de
5
10
15
20
25
30
35
40
45
50
55
60
instrucción (I-Caché) que mantiene instrucciones máquina a ser ejecutadas y una caché de datos (D-Caché) que mantiene operandos de datos.
Con referencia a la FIG. 13, se representa una realización de procesador ejemplar para el procesador 5026. Típicamente uno o más niveles de caché 5053 se emplean para almacenar temporalmente bloques de memoria a fin de mejorar el rendimiento del procesador. La caché 5053 es un almacenador temporal de alta velocidad que mantiene líneas de caché de datos de memoria que van a ser usadas probablemente. Las líneas de caché típicas son de 64, 128 o 256 octetos de datos de memoria. Se emplean a menudo cachés separadas para almacenar en caché instrucciones diferentes que para almacenamiento en caché de datos. La coherencia de caché (sincronización de copias de líneas en memoria y las cachés) a menudo se proporciona por varios algoritmos “de monitoreo” bien conocidos en la técnica. El almacenamiento de memoria principal 5025 de un sistema de procesador a menudo se conoce como caché. En un sistema de procesador que tiene 4 niveles de caché 5053, el almacenamiento principal 5025 algunas veces se conoce como la caché de nivel 5 (L5) dado que es típicamente más rápida y solamente mantiene una parte del almacenamiento no volátil (DASD, cinta, etc.) que está disponible para un sistema informático. El almacenamiento principal 5025 “almacena en caché” páginas de datos paginados dentro y fuera del almacenamiento principal 5025 por el sistema operativo.
Un contador de programa (contador de instrucción) 5061 hace el seguimiento de la dirección de la instrucción actual a ser ejecutada. Un contador de programa en un procesador de z/Architecture es de 64 bits y se puede truncar a 31 o 24 bits para soportar límites de direccionamiento anteriores. Un contador de programa se incorpora típicamente en una PSW (palabra de estado de programa) de un ordenador de manera que persiste durante la conmutación de contexto. De esta manera, un programa en curso, que tiene un valor de contador de programa, se puede interrumpir, por ejemplo, por el sistema operativo (conmutación de contexto desde el entorno de programa al entorno de sistema operativo). La PSW del programa mantiene el valor de contador de programa mientras que el programa no está activo y el contador de programa (en la PSW) del sistema operativo se usa mientras que se ejecuta el sistema operativo. Típicamente, el contador de programa se incrementa en una cantidad igual al número de octetos de la instrucción actual. Las instrucciones RISC (Ordenador de Juego de Instrucciones Reducido) son típicamente de longitud fija mientras que las instrucciones CISC (Ordenador de Juego de Instrucciones Complejo) son típicamente de longitud variable. Las instrucciones de la z/Architecture de IBM son instrucciones CISC que tienen una longitud de 2, 4 o 6 octetos. El contador de programa 5061 se modifica o bien por una operación de conmutación de contexto o bien por una operación tomada de ramal de una instrucción de ramal por ejemplo. En una operación de conmutación de contexto, el valor de contador de programa actual se ahorra en la palabra de estado de programa junto con otra información de estado acerca del programa que se ejecuta (tal como códigos de condición) y un nuevo valor de contador de programa se carga apuntando a una instrucción de un nuevo módulo de programa a ser ejecutado. Una operación tomada de ramal se realiza a fin de permitir al programa tomar decisiones o hacer bucle dentro del programa cargando el resultado de la instrucción de ramal en el contador de programa 5061.
Típicamente una unidad de búsqueda de instrucciones 5055 se emplea para traer instrucciones en nombre del procesador 5026. La unidad de búsqueda o bien trae las “siguientes instrucciones secuenciales”, instrucciones objetivo de instrucciones tomadas de ramal o bien primeras instrucciones de un programa a continuación de una conmutación de contexto. Las unidades de búsqueda de instrucción modernas a menudo emplean técnicas de búsqueda previas para traer previamente especulativamente instrucciones basadas en la probabilidad de que las instrucciones buscadas previamente se pudieran usar. Por ejemplo, una unidad de búsqueda puede traer 16 octetos de instrucción que incluye la siguiente instrucción secuencial y octetos adicionales de instrucciones secuenciales adicionales.
Las instrucciones traídas entonces se ejecutan por el procesador 5026. En una realización, la(s) instrucción(instrucciones) traída(s) se pasan a una unidad de despacho 5056 de la unidad de búsqueda. La unidad de despacho decodifica la(s) instrucción(instrucciones) y reenvía información acerca de la(s)
instrucción(instrucciones) decodificada(s) a unidades adecuadas 5057, 5058, 5060. Una unidad de ejecución 5057 recibirá típicamente información acerca de instrucciones aritméticas decodificadas desde la unidad de búsqueda de instrucciones 5055 y realizará operaciones aritméticas en operandos según el código de operación de la instrucción. Se proporcionan operandos a la unidad de ejecución 5057 preferiblemente o bien desde la memoria 5025, registros de arquitectura 5059 o bien a partir de un campo inmediato de la instrucción que se ejecuta. Los resultados de la ejecución, cuando se almacenan, se almacenan o bien en la memoria 5025, los registros 5059 o bien en otro hardware de máquina (tal como registros de control, registros de PSW y similares).
Un procesador 5026 típicamente tiene una o más unidades 5057, 5058, 5060 para ejecutar la función de la instrucción. Con referencia a la FIG. 14A, una unidad de ejecución 5057 puede comunicar con registros generales de arquitectura 5059, una unidad de decodificación/despacho 5056, una unidad de carga almacén 5060 y otras unidades de procesador 5065 por medio de la lógica de interfaz 5071. Una unidad de ejecución 5057 puede emplear varios circuitos de registro 5067, 5068, 5069 para mantener información en la que operará la unidad de lógica aritmética (ALU) 5066. La ALU realiza operaciones aritméticas tales como sumar, restar, multiplicar y dividir así como funciones lógicas tales como and, or y or exclusiva (XOR), rotar y desplazar. Preferiblemente la ALU soporta operaciones especializadas que son dependientes del diseño. Otros circuitos pueden proporcionar otras facilidades de arquitectura 5072 incluyendo códigos de condición y lógica de soporte de recuperación por ejemplo. Típicamente el resultado de una operación de ALU se mantiene en un circuito de registro de salida 5070 que puede reenviar el
5
10
15
20
25
30
35
40
45
50
55
60
resultado a una variedad de otras funciones de procesamiento. Hay muchas disposiciones de unidades de procesador, la presente descripción se prevé solamente para proporcionar una comprensión representativa de una realización.
Una instrucción ADD por ejemplo se ejecutaría en una unidad de ejecución 5057 que tienen funcionalidad aritmética y lógica mientras que una instrucción de punto flotante por ejemplo se ejecutaría en una ejecución de punto flotante que tiene capacidad de punto flotante especializada. Preferiblemente, una unidad de ejecución opera en operandos identificados por una instrucción realizando una función definida de código de operación en los operandos. Por ejemplo, una instrucción ADD se puede ejecutar por una unidad de ejecución 5057 en operandos encontrados en dos registros 5059 identificados por campos de registro de la instrucción.
La unidad de ejecución 5057 realiza la suma aritmética en dos operandos y almacena el resultado en un tercer operando donde el tercer operando puede ser un tercer registro o uno de los dos registros fuente. La unidad de ejecución utiliza preferiblemente una Unidad de Lógica Aritmética (ALU) 5066 que es capaz de realizar una variedad de funciones lógicas tales como Desplazar, Rotar, And, Or y XOR así como una variedad de funciones algebraicas incluyendo cualquier de sumar, restar, multiplicar, dividir. Algunas ALU 5066 se diseñan para operaciones escalares y algunas para punto flotante. Los datos pueden ser Big Endian (donde el octeto menos significativo está en la dirección de octeto más alta) o Little Endian (donde el octeto menos significativo está en la dirección de octeto más baja) dependiendo de la arquitectura. La z/Architecture de IBM es Big Endian. Los campos de signo pueden ser signo y magnitud, complemento de 1 o complemento de 2 dependiendo de la arquitectura. Un número de complemento de 2 es ventajoso por que la ALU no necesita designar una capacidad de resta dado que o bien un valor negativo o bien un valor positivo en complemento de 2 requiere solamente una suma dentro de la ALU. Los números se describen comúnmente en abreviatura, donde un campo de 12 bits define una dirección de un bloque de 4.096 octetos y se describe comúnmente como un bloque de 4Kbyte (Kilo octetos), por ejemplo.
Con referencia a la FIG. 14B, una información de instrucción de ramal para ejecutar una instrucción de ramal se envía típicamente a una unidad de ramal 5058 que a menudo emplea un algoritmo de predicción de ramal tal como una tabla de historia de ramal 5082 para predecir el resultado del ramal antes de que se completen otras operaciones condicionales. El objetivo de la instrucción de ramal actual se traerá y ejecutará especulativamente antes de que se completen las operaciones condicionales. Cuando las operaciones condicionales se completan las instrucciones de ramal ejecutadas especulativamente o bien se completan o bien se descargan en base a las condiciones de la operación condicional y el resultado especulado. Una instrucción de ramal típica puede probar los códigos de condición y ramal a una dirección objetivo si los códigos de condición cumplen el requisito de ramal de la instrucción de ramal, se puede calcular una dirección objetivo en base a varios números incluyendo unos encontrados en campos de registro o un campo inmediato de la instrucción por ejemplo. La unidad de ramal 5058 puede emplear una ALU 5074 que tiene una pluralidad de circuitos de registro de entrada 5075, 5076, 5077 y un circuito de registro de salida 5080. La unidad de ramal 5058 puede comunicar con registros generales 5059, decodificar la unidad de despacho 5057 u otros circuitos 5073, por ejemplo.
La ejecución de un grupo de instrucciones se puede interrumpir por una variedad de razones incluyendo una conmutación de contexto iniciada por un sistema operativo, una excepción de programa o error que causa una conmutación de contexto, una señal de interrupción de l/O que causa una conmutación de contexto o actividad de encadenado múltiple de una pluralidad de programas (en un entorno de encadenado múltiple), por ejemplo. Preferiblemente una acción de conmutación de contexto guarda información de estado acerca de un programa que se ejecuta actualmente y entonces carga información de estado acerca de otro programa que se invoca. Se puede guardar información de estado en registros hardware o en memoria por ejemplo. La información de estado preferiblemente comprende un valor de contador de programa que apunta a una siguiente instrucción a ser ejecutada, códigos de condición, información de traducción de memoria y contenido de registro de arquitectura. Una actividad de conmutación de contexto se puede ejercer por circuitos hardware, programas de aplicaciones, programas de sistema operativo o código de microprogramas (microcódigo, pico código o código interno con licencia (LIC)) solo o en combinación.
Un procesador accede a operandos según métodos definidos de instrucción. La instrucción puede proporcionar un operando inmediato que usa el valor de una parte de la instrucción, puede proporcionar uno o más campos de registro que apuntan explícitamente o bien a registros de propósito general o bien a registros de propósito especial (registros de punto flotante por ejemplo). La instrucción puede utilizar registros implícitos identificados por un campo de código de operación como operandos. La instrucción puede utilizar localizaciones de memoria para operandos. Una localización de memoria de un operando se puede proporcionar por un registro, un campo inmediato o una combinación de registros y campo inmediato como se ejemplifica por la facilidad de desplazamiento largo de z/Architecture en donde la instrucción define un registro base, un registro de índice y un campo inmediato (campo de desplazamiento) que se añaden juntos para proporcionar la dirección del operando en memoria por ejemplo. La localización en la presente memoria típicamente implica una localización en memoria principal (almacenamiento principal) a menos que se indique de otro modo.
Con referencia a la FIG. 14C, un procesador accede al almacenamiento usando una unidad de carga/almacén 5060. La unidad de carga/almacén 5060 puede realizar una operación de carga obteniendo la dirección del operando objetivo en memoria 5053 y cargando el operando en un registro 5059 u otra localización de memoria 5053 o puede
5
10
15
20
25
30
35
40
45
50
55
60
realizar una operación de almacén obteniendo la dirección del operando objetivo en la memoria 5053 y almacenando datos obtenidos desde un registro 5059 u otra localización de memoria 5053 en la localización de operando objetivo en la memoria 5053. La unidad de carga/almacén 5060 puede ser especulativa y puede acceder a memoria en una secuencia que está fuera de orden respecto a la secuencia de instrucciones, no obstante la unidad de carga/almacén 5060 tiene que mantener la apariencia a programas cuyas instrucciones fueron ejecutadas en orden. Una unidad de carga/almacén 5060 puede comunicar con registros generales 5059, unidad de decodificación/despacho 5056, interfaz de caché/memoria 5053 u otros elementos 5083 y comprende varios circuitos de registro, las ALU 5085 y la lógica de control 5090 para calcular direcciones de almacenamiento y proporcionar secuenciamiento de canalización para mantener las operaciones en orden. Algunas operaciones pueden estar fuera de orden pero la unidad de carga/almacén proporciona funcionalidad para hacer a las operaciones fuera de orden aparecer al programa como que se han realizado en orden, como es bien conocido en la técnica.
Preferiblemente las direcciones que “ve” un programa de aplicaciones se conocen a menudo como direcciones virtuales. Las direcciones virtuales son algunas veces conocidas como “direcciones lógicas” y “direcciones efectivas”. Las direcciones virtuales son virtuales en que se redirigen a una localización de memoria física por una de una variedad de tecnologías de traducción de direcciones dinámica (DAT) incluyendo, pero no limitado a, simplemente prefijar una dirección virtual con un valor de desplazamiento, traducir la dirección virtual a través de una o más tablas de traducción, las tablas de traducción preferiblemente que comprenden al menos una tabla de segmentos y una tabla de páginas solas o en combinación, preferiblemente, la tabla de segmentos que tiene un puntero de entrada a la tabla de páginas. En la z/Architecture, se proporciona una jerarquía de traducción que incluye una primera tabla de regiones, una segunda tabla de regiones, una tercera tabla de regiones, una tabla de segmentos y una tabla de páginas opcional. El rendimiento de la traducción de direcciones se mejora a menudo utilizando un almacenador temporal de traducción anticipada de instrucciones (TLB) que comprende entradas que correlacionan una dirección virtual con una localización de memoria física asociada. Las entradas se crean cuando la DAT traduce una dirección virtual usando las tablas de traducción. El uso posterior de la dirección virtual entonces puede utilizar la entrada del TLB rápido en lugar de los accesos de tabla de traducción secuencial lenta. El contenido del TLB se puede gestionar por una variedad de algoritmos de sustitución incluyendo LRU (Usado Menos Recientemente).
En el caso donde el procesador es un procesador de un sistema multiprocesador, cada procesador tiene responsabilidad de mantener recursos compartidos, tales como l/O, cachés, TLB y memoria, entrelazados por coherencia. Típicamente, las tecnologías “de monitoreo” se utilizarán en mantener la coherencia de caché. En un entorno de monitoreo, cada línea de caché se puede marcar como que está en cualquiera de un estado compartido, un estado exclusivo, un estado cambiado, un estado inválido y similares a fin de facilitar la compartición.
Las unidades de l/O 5054 (FIG. 13) dotan al procesador con medios para unirse a dispositivos periféricos incluyendo cinta, disco, impresoras, visualizadores y redes por ejemplo. Las unidades de l/O a menudo se presentan al programa de ordenador por controladores software. En grandes ordenadores, tales como el System z® de IBM®, los adaptadores de canal y adaptadores de sistemas abiertos son unidades de l/O del gran ordenador que proporciona las comunicaciones entre el sistema operativo y los dispositivos periféricos.
Además, otros tipos de entornos informáticos pueden beneficiarse de uno o más aspectos de la presente invención. Como ejemplo, un entorno puede incluir un emulador (por ejemplo, software u otros mecanismos de emulación), en el que una arquitectura particular (incluyendo, por ejemplo, ejecución de instrucciones, funciones de arquitectura, tales como traducción de direcciones y registros de arquitectura) o un subconjunto de la misma se emula (por ejemplo, en un sistema de ordenador nativo que tiene un procesador y una memoria). En tal entorno, una o más funciones de emulación del emulador pueden implementar uno o más aspectos de la presente invención, incluso aunque un ordenador que ejecuta el emulador pueda tener una arquitectura diferente de las capacidades que se emulan. Como ejemplo, en modo de emulación, la instrucción u operación específica que se emula se decodifica y se construye una función de emulación adecuada para implementar la instrucción u operación individual.
En un entorno de emulación, un ordenador principal incluye, por ejemplo, una memoria para almacenar instrucciones y datos; una unidad de búsqueda de instrucciones para traer instrucciones desde una memoria y, opcionalmente, proporcionar almacenamiento temporal local para la instrucción traída; una unidad de decodificación de instrucciones para recibir las instrucciones traídas y para determinar el tipo de instrucciones que se han traído; y una unidad de ejecución de instrucción para ejecutar las instrucciones. La ejecución puede incluir cargar datos en un registro desde la memoria; almacenar datos de vuelta a la memoria desde un registro; o realizar algún tipo de operación aritmética o lógica, como se determina por la unidad de decodlflcaclón. En un ejemplo, cada unidad se ¡mplementa en software. Por ejemplo, las operaciones que se realizan por las unidades se ¡mplementan como una o más subrutinas dentro del software emulador.
Más particularmente, en un gran ordenador, las Instrucciones máquina de arquitectura se usan por los programadores, normalmente hoy en día programadores de “C”, a menudo por medio de una aplicación de compilador. Estas instrucciones almacenadas en el medio de almacenamiento se pueden ejecutar nativamente en un Servidor de z/Architecture de IBM® o alternativamente en máquinas que ejecutan otras arquitecturas. Se pueden emular en los servidores de grandes ordenadores de IBM® existentes y futuros y en otras máquinas de IBM® (por
5
10
15
20
25
30
35
40
45
50
55
60
ejemplo, servidores Power Systems y Servidores System x®). Se pueden ejecutar en máquinas que ejecutan Linux de una variedad de máquinas que usan hardware fabricado por IBM®, Intel®, AMD™ y otros. Además la ejecución en ese hardware bajo una z/Architecture, se puede usar también Linux como máquinas que usan emulación por Hercules, UMX o FSI (Fundamental Software, Inc), donde la ejecución generalmente es en un modo de emulación. En el modo de emulación, el software de emulación se ejecuta por un procesador nativo para emular la arquitectura de un procesador emulado.
El procesador nativo típicamente ejecuta emulación software que comprende o bien microprogramas o bien un sistema operativo nativo para realizar emulación del procesador emulado. El software de emulación es responsable de traer y ejecutar instrucciones de la arquitectura de procesador emulado. El software de emulación mantiene un contador de programa emulado para hacer el seguimiento de límites de instrucción. El software de emulación puede traer una o más instrucciones máquina emuladas a la vez y convertir la una o más instrucciones máquina emuladas a un grupo correspondiente de instrucciones máquina nativas para ejecución por el procesador nativo. Estas instrucciones convertidas se pueden almacenar en caché de manera que se puede consumar una conversión más rápida. No obstante, el software de emulación tiene que mantener las reglas de arquitectura de la arquitectura de procesador emulada para asegurar sistemas operativos y aplicaciones escritas para la operación correcta del procesador emulado. Además, el software de emulación tiene que proporcionar recursos identificados por la arquitectura de procesador emulado incluyendo, pero no limitado a, registros de control, registros de propósito general, registros de punto flotante, función de traducción de dirección dinámica incluyendo tablas de segmentos y tablas de páginas por ejemplo, mecanismos de interrupción, mecanismos de conmutación de contexto, relojes de Hora del Día (TOÓ) e interfaces de arquitectura a subsistemas l/O de manera que un sistema operativo o un programa de aplicaciones diseñado para ejecutarse en el procesador emulado, se puede ejecutar en el procesador nativo que tiene el software de emulación.
Una instrucción específica que se emula se codifica y se llama a una subrutina para realizar la función de la instrucción individual. Una función de software de emulación que emula una función de un procesador emulado se implementa, por ejemplo, en una subrutina o controlador “C” o algún otro método de proporcionar un controlador para el hardware específico que estará dentro de la habilidad de los expertos en la técnica después de comprender la descripción de la realización preferida. Diversas patentes de emulación software y hardware incluyendo, pero no limitadas a la Concesión de Patente de EE UU. N° 5.551.013, titulada “Multiprocessor for Hardware Emulation”, de Beausoleil et al.; y la Concesión de Patente de EE.UU. N° 6.009.261, titulada “Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor”, de Scalzi et al.; y la Concesión de Patente N° 5.574.873, titulada “Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions”, de Davidian et al.; y la Concesión de Patente de EE.UU. N° 6.308.255, titulada “Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System”, de Gorishek et al.; y la Concesión de Patente de EE.UU. N° 6.463.582, titulada “Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method”, de Lethin et al.; y la Concesión de Patente de EE.UU. N° 5.790.825, titulada “Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions”, de Eric Traut; y muchas otras, ilustran una variedad de formas conocidas para lograr emulación de un formato de instrucción de arquitectura para una máquina diferente para una máquina objetivo disponible para los expertos en la técnica.
En la FIG. 15, se proporciona un ejemplo de un sistema de ordenador central emulado 5092 que emula un sistema de ordenador central 5000’ de una arquitectura central. En el sistema de ordenador central emulado 5092, el procesador central (CPU) 5091 es un procesador central emulado (o procesador central virtual) y comprende un procesador de emulación 5093 que tiene una arquitectura de conjunto de instrucciones nativas diferente de la del procesador 5091 del ordenador central 5000’. El sistema de ordenador central emulado 5092 tiene una memoria 5094 accesible al procesador emulado 5093. En la realización ejemplo, la memoria 5094 se divide en una parte de memoria de ordenador central 5096 y una parte de rutinas de emulación 5097. La memoria de ordenador central 5096 está disponible para programas del ordenador central emulado 5092 según la arquitectura de ordenador central. El procesador de emulación 5093 ejecuta instrucciones nativas de un conjunto de instrucciones de arquitectura de una arquitectura distinta de la del procesador emulado 5091, las instrucciones nativas obtenidas de la memoria de rutinas de emulación 5097 y puede acceder a una instrucción central para ejecución desde un programa en la memoria de ordenador central 5096 empleando una o más instrucciones obtenidas en una secuencia y rutina de acceso/decodificación que puede decodificar la(s) instrucción(instrucciones) accedida(s) para determinar una rutina de ejecución de instrucciones nativas para emular la función de la instrucción central accedida. Otras facilidades que se definen para la arquitectura del sistema de ordenador central 5000’ se pueden emular por rutinas de facilidades de arquitectura, incluyendo tales facilidades como registros de propósito general, registros de control, traducción de dirección dinámica y caché de procesador y soporte de subsistema de l/O, por ejemplo. Las rutinas de emulación también pueden obtener ventaja de funciones disponibles en el procesador de emulación 5093 (tales como registros generales y traducción dinámica de direcciones virtuales) para mejorar el rendimiento de las rutinas de emulación. También se pueden proporcionar hardware especial y motores fuera de carga para ayudar al procesador 5093 en la emulación de la función del ordenador central 5000’.
La terminología usada en la presente memoria es para el propósito de describir realizaciones particulares solamente y no se pretende que sea limitante de la invención. Como se usa en la presente memoria, las formas singulares “un”, “uno” y “el” se pretende que incluyan las formas plurales también, a menos que el contexto lo indique claramente de
otro modo. Además se entenderá que los términos “comprende” y/o “que comprende”, cuando se usan en esta especificación, especifican la presencia de rasgos, enteros, pasos, operaciones, elementos y/o componentes indicados, pero no excluyen la presencia o adición de uno o más de otros rasgos, enteros, pasos, operaciones, elementos, componentes y/o grupos de los mismos.
5 Las estructuras, materiales, actos y equivalentes correspondientes de todos los medios o pasos más elementos de función en las reivindicaciones de más adelante, en su caso, se pretende que incluyan cualquier estructura, material o acto para realizar la función en combinación con otros elementos reivindicados como se reivindica específicamente. La descripción de uno o más aspectos de la presente Invención se ha presentado con propósitos de ilustración y descripción, pero no se pretende que sean exhaustivos o estén limitados a la Invención en la forma 10 descrita. Muchas modificaciones y variaciones serán evidentes para los expertos en la técnica sin apartarse del alcance y espíritu de la invención. La realización se eligió y describió a fin de explicar mejor los principios de la invención y la aplicación práctica y para permitir a otros expertos en la técnica entender la Invención para diversas realizaciones con diversas modificaciones que son adecuadas al uso particular contemplado.
15
Claims (10)
- 51015202530354045REIVINDICACIONES1. Un método para ejecutar una instrucción máquina en una unidad central de proceso que comprende los pasos de:obtener, mediante un procesador, una instrucción máquina (310) para ejecución, la instrucción máquina que se define para ejecución de ordenador según una arquitectura de ordenador, la instrucción máquina que comprende:al menos un campo de código de operación (302a, 302b) para proporcionar un código de operación, el código de operación que identifica una operación Encontrar Elemento Igual de Vector;un campo de extensión (314) a ser usado en la designación de uno o más registros;un primer campo de registro (304) combinado con una primera parte del campo de extensión (314) para designar un primer registro, el primer registro que comprende un primer operando, el primer operando que es un operando de vector que comprende un número predefinido de elementos;un segundo campo de registro (306) combinado con una segunda parte del campo de extensión (314) para designar un segundo registro, el segundo registro que comprende un segundo operando, el segundo operando que es un operando de vector que comprende un número predefinido de elementos;un tercer campo de registro (308) combinado con una tercera parte del campo de extensión (314) para designar un tercer registro, el tercer registro que comprende un tercer operando, el tercer operando que es un operando de vector que comprende un número predefinido de elementos;un campo de máscara (310), el campo de máscara que comprende uno o más controles a ser usados durante la ejecución de la instrucción máquina; yejecutar la instrucción máquina, caracterizada por la ejecución que comprende:determinar si el campo de máscara incluye un control de elemento cero fijado para indicar una búsqueda de un vector para un elemento cero (400);basado en el campo de máscara que incluye el control de elemento cero fijado para indicar la búsqueda del vector para un elemento cero (402), buscar el segundo operando para un elemento cero (402), la búsqueda que proporciona un índice nulo (403), el índice nulo que incluye uno de un índice de un elemento cero encontrado en la búsqueda o un tamaño del vector si no se encuentra un elemento cero;comparar cada elemento del segundo operando con cada elemento del tercer operando en paralelo (404), por igualdad, la comparación que proporciona un índice de comparación (410, 412), el índice de comparación que se basa en una dirección de la búsqueda (408) y un tamaño de los elementos del vector y que incluye uno de un índice de un elemento igual en base a la comparación que encuentra un elemento igual o un tamaño del vector en base a la comparación que encuentra elementos no iguales; yproporcionar un resultado (416, 418), el resultado basado en si se realizó (414) la búsqueda para el elemento cero, en donde el resultado incluye uno de:en base a no realizar la búsqueda del elemento cero (414), el resultado incluye el índice de comparación (416); oen base a realizar la búsqueda del elemento cero (414), el resultado incluye un mínimo del índice de comparación o el índice nulo (418).
- 2. El método de la reivindicación 1, en donde el método además comprende:ajustar el resultado, el ajuste que comprende realizar al menos una operación en el resultado para proporcionar un resultado ajustado, el resultado ajustado que comprende un índice de octeto de un primer octeto de un elemento cero o un elemento igual en base a la búsqueda y comparación; yalmacenar el resultado en el primer operando.
- 3. El método de la reivindicación 2, en donde la instrucción máquina además comprende otro campo de máscara, el otro campo de máscara que incluye un control de tamaño de elemento, el control de tamaño de elemento que especifica un tamaño de elementos en al menos uno del primer operando, el segundo operando o el tercer operando y en donde el tamaño se usa en el ajuste.
- 4. El método de la reivindicación 1, en donde el campo de máscara comprende un control de conjunto de códigos de condición y en donde el método comprende:determinar si el control de conjunto de códigos de condición está fijado; yen base al control de conjunto de códigos de condición que está fijado, fijar un código de condición en base a la ejecución de la instrucción máquina.
- 5. El método de la reivindicación 1, en donde la ejecución comprende determinar, en el tiempo de ejecución, una dirección para la comparación, en donde la dirección es una de izquierda a derecha o derecha a izquierda y la5 determinación comprende acceder por la instrucción máquina a un control de dirección para determinar la dirección.
- 6. El método de la reivindicación 1, en donde el segundo operando y el tercer operando comprenden N octetos y en donde la comparación comprende comparar en paralelo los N octetos del segundo operando con los N octetos del tercer operando y en donde un tamaño de un elemento comprende uno de un octeto, dos octetos o cuatro octetos.
- 7. El método de la reivindicación 1, en donde el índice del elemento cero comprende un índice de octeto, el índice de 10 octeto que es un índice de un primer octeto del elemento cero.
- 8. El método de la reivindicación 1, en donde el índice del elemento desigual comprende un índice de octeto, el índice de octeto que es un índice de un octeto del elemento igual.
- 9. El método de la reivindicación 1, en donde al menos uno de la indicación de elementos no cero encontrados o la indicación de no igualdad comprende incluir en al menos uno del índice nulo o el índice de comparación un número15 que representa un tamaño del segundo operando.
- 10. Un producto de programa de ordenador que comprende un medio de almacenamiento legible por ordenador que tiene un código de programa legible por ordenador incorporado en el mismo,en donde el código de programa legible por ordenador se ejecuta en un sistema de ordenador para realizar todos los pasos de cualquiera de las reivindicaciones 1-9 del método.20 11. Un sistema de ordenador cargado con un producto de programa de ordenador según la reivindicación 10; quecomprende uno o más procesadores adaptados para realizar todos los pasos de cualquiera de las reivindicaciones 1-9 del método, mediante la ejecución del código de programa legible por ordenador de dicho producto de programa de ordenador.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US13/421,448 US9715383B2 (en) | 2012-03-15 | 2012-03-15 | Vector find element equal instruction |
| US201213421448 | 2012-03-15 | ||
| PCT/IB2013/051811 WO2013136233A1 (en) | 2012-03-15 | 2013-03-07 | Vector find element equal instruction |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2552175T3 true ES2552175T3 (es) | 2015-11-26 |
Family
ID=49158807
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES13761350.1T Active ES2552175T3 (es) | 2012-03-15 | 2013-03-07 | Instrucción Encontrar Elemento Igual de Vector |
Country Status (14)
| Country | Link |
|---|---|
| US (2) | US9715383B2 (es) |
| EP (1) | EP2758891B1 (es) |
| JP (1) | JP6238243B2 (es) |
| KR (1) | KR101606307B1 (es) |
| CN (1) | CN104169907B (es) |
| AU (1) | AU2013233993B2 (es) |
| CA (1) | CA2866883C (es) |
| DK (1) | DK2758891T3 (es) |
| ES (1) | ES2552175T3 (es) |
| IL (1) | IL232814A (es) |
| RU (1) | RU2585975C2 (es) |
| SG (1) | SG11201404824TA (es) |
| TW (1) | TWI567641B (es) |
| WO (1) | WO2013136233A1 (es) |
Families Citing this family (36)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
| US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
| US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
| US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
| US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
| US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
| US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
| US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
| US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
| US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
| US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
| US9804840B2 (en) | 2013-01-23 | 2017-10-31 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
| US9778932B2 (en) | 2013-01-23 | 2017-10-03 | International Business Machines Corporation | Vector generate mask instruction |
| US9513906B2 (en) | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
| US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
| US9471308B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
| US9891913B2 (en) * | 2014-12-23 | 2018-02-13 | Intel Corporation | Method and apparatus for performing conflict detection using vector comparison operations |
| US9703721B2 (en) | 2014-12-29 | 2017-07-11 | International Business Machines Corporation | Processing page fault exceptions in supervisory software when accessing strings and similar data structures using normal load instructions |
| US9569127B2 (en) | 2014-12-29 | 2017-02-14 | International Business Machines Corporation | Computer instructions for limiting access violation reporting when accessing strings and similar data structures |
| US9715420B2 (en) | 2015-01-21 | 2017-07-25 | International Business Machines Corporation | String dataflow error detection |
| US10282203B2 (en) * | 2015-02-05 | 2019-05-07 | Barcelona Supercomputing Center—Centro Nacional de Supercomputación | Methods and devices for discovering multiple instances of recurring values within a vector with an application to sorting |
| US10540512B2 (en) * | 2015-09-29 | 2020-01-21 | International Business Machines Corporation | Exception preserving parallel data processing of string and unstructured text |
| US10691456B2 (en) * | 2015-11-13 | 2020-06-23 | International Business Machines Corporation | Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing |
| US10691453B2 (en) | 2015-11-13 | 2020-06-23 | International Business Machines Corporation | Vector load with instruction-specified byte count less than a vector size for big and little endian processing |
| US9912478B2 (en) | 2015-12-14 | 2018-03-06 | International Business Machines Corporation | Authenticating features of virtual server system |
| CN105892995B (zh) * | 2016-03-28 | 2018-06-12 | 龙芯中科技术有限公司 | 查找负数的方法、装置及处理器 |
| EP3428792B1 (en) * | 2017-07-10 | 2022-05-04 | Arm Ltd | Testing bit values inside vector elements |
| CN107832843B (zh) * | 2017-10-30 | 2021-09-21 | 上海寒武纪信息科技有限公司 | 一种信息处理方法及相关产品 |
| US10762137B1 (en) * | 2017-11-15 | 2020-09-01 | Amazon Technologies, Inc. | Page table search engine |
| US10754789B1 (en) | 2017-11-15 | 2020-08-25 | Amazon Technologies, Inc. | Address translation for storage class memory in a system that includes virtual machines |
| US10810133B1 (en) | 2017-11-15 | 2020-10-20 | Amazon Technologies, Inc. | Address translation and address translation memory for storage class memory |
| US12094456B2 (en) | 2018-09-13 | 2024-09-17 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and system |
| CN111399905B (zh) * | 2019-01-02 | 2022-08-16 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| GB2599652B (en) * | 2020-10-06 | 2023-01-18 | Advanced Risc Mach Ltd | Masked-vector-comparison instruction |
| CN116414452B (zh) * | 2021-12-30 | 2026-06-02 | 合肥君正科技有限公司 | 一种基于simd指令的查表算法的改进方法 |
| US12032966B2 (en) * | 2022-09-30 | 2024-07-09 | Texas Instruments Incorporated | Reducing overhead in processor array searching |
Family Cites Families (96)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS62276668A (ja) | 1985-07-31 | 1987-12-01 | Nec Corp | ベクトルマスク演算制御ユニツト |
| US5073864A (en) | 1987-02-10 | 1991-12-17 | Davin Computer Corporation | Parallel string processor and method for a minicomputer |
| US5222225A (en) | 1988-10-07 | 1993-06-22 | International Business Machines Corporation | Apparatus for processing character string moves in a data processing system |
| JPH0831032B2 (ja) | 1990-08-29 | 1996-03-27 | 三菱電機株式会社 | データ処理装置 |
| US5465374A (en) | 1993-01-12 | 1995-11-07 | International Business Machines Corporation | Processor for processing data string by byte-by-byte |
| AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
| JP3637922B2 (ja) | 1993-06-14 | 2005-04-13 | アップル コンピュータ インコーポレイテッド | プロセッサにおけるさまざまな長さの文字列中のターミネーション文字を発見する方法および装置 |
| JPH0721034A (ja) | 1993-06-28 | 1995-01-24 | Fujitsu Ltd | 文字列複写処理方法 |
| US5509129A (en) | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
| US6185629B1 (en) | 1994-03-08 | 2001-02-06 | Texas Instruments Incorporated | Data transfer controller employing differing memory interface protocols dependent upon external input at predetermined time |
| US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
| WO1996010103A1 (en) | 1994-09-27 | 1996-04-04 | Nkk Corporation | Galvanized steel sheet and process for producing the same |
| US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
| US5812147A (en) | 1996-09-20 | 1998-09-22 | Silicon Graphics, Inc. | Instruction methods for performing data formatting while moving data between memory and a vector register file |
| US5931940A (en) | 1997-01-23 | 1999-08-03 | Unisys Corporation | Testing and string instructions for data stored on memory byte boundaries in a word oriented machine |
| EP1032896B1 (en) * | 1997-11-24 | 2002-03-27 | BRITISH TELECOMMUNICATIONS public limited company | Information management and key term retrieval |
| US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
| US6094695A (en) | 1998-03-11 | 2000-07-25 | Texas Instruments Incorporated | Storage buffer that dynamically adjusts boundary between two storage areas when one area is full and the other has an empty data register |
| US6334176B1 (en) | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
| US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
| US7100026B2 (en) | 2001-05-30 | 2006-08-29 | The Massachusetts Institute Of Technology | System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values |
| US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
| US6662288B1 (en) | 1998-11-27 | 2003-12-09 | Matsushita Electric Industrial Co., Ltd. | Address generating apparatus and motion vector detector |
| US6192466B1 (en) | 1999-01-21 | 2001-02-20 | International Business Machines Corporation | Pipeline control for high-frequency pipelined designs |
| US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
| US6189088B1 (en) | 1999-02-03 | 2001-02-13 | International Business Machines Corporation | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
| US6499116B1 (en) | 1999-03-31 | 2002-12-24 | International Business Machines Corp. | Performance of data stream touch events |
| US6802056B1 (en) | 1999-06-30 | 2004-10-05 | Microsoft Corporation | Translation and transformation of heterogeneous programs |
| US6381691B1 (en) | 1999-08-13 | 2002-04-30 | International Business Machines Corporation | Method and apparatus for reordering memory operations along multiple execution paths in a processor |
| US6513107B1 (en) | 1999-08-17 | 2003-01-28 | Nec Electronics, Inc. | Vector transfer system generating address error exception when vector to be transferred does not start and end on same memory page |
| US6513109B1 (en) | 1999-08-31 | 2003-01-28 | International Business Machines Corporation | Method and apparatus for implementing execution predicates in a computer processing system |
| US6820195B1 (en) | 1999-10-01 | 2004-11-16 | Hitachi, Ltd. | Aligning load/store data with big/little endian determined rotation distance control |
| US6449706B1 (en) | 1999-12-22 | 2002-09-10 | Intel Corporation | Method and apparatus for accessing unaligned data |
| JP2001236249A (ja) | 2000-02-24 | 2001-08-31 | Nec Corp | メモリ管理装置およびメモリ管理方法 |
| US6625724B1 (en) | 2000-03-28 | 2003-09-23 | Intel Corporation | Method and apparatus to support an expanded register set |
| US6349361B1 (en) | 2000-03-31 | 2002-02-19 | International Business Machines Corporation | Methods and apparatus for reordering and renaming memory references in a multiprocessor computer system |
| US6701424B1 (en) | 2000-04-07 | 2004-03-02 | Nintendo Co., Ltd. | Method and apparatus for efficient loading and storing of vectors |
| US6408383B1 (en) | 2000-05-04 | 2002-06-18 | Sun Microsystems, Inc. | Array access boundary check by executing BNDCHK instruction with comparison specifiers |
| WO2002033570A2 (en) | 2000-10-18 | 2002-04-25 | Koninklijke Philips Electronics N.V. | Digital signal processing apparatus |
| US7487330B2 (en) | 2001-05-02 | 2009-02-03 | International Business Machines Corporations | Method and apparatus for transferring control in a computer system with dynamic compilation capability |
| JP3900863B2 (ja) | 2001-06-28 | 2007-04-04 | シャープ株式会社 | データ転送制御装置、半導体記憶装置および情報機器 |
| US6839828B2 (en) | 2001-08-14 | 2005-01-04 | International Business Machines Corporation | SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode |
| US6907443B2 (en) | 2001-09-19 | 2005-06-14 | Broadcom Corporation | Magnitude comparator |
| US6570511B1 (en) | 2001-10-15 | 2003-05-27 | Unisys Corporation | Data compression method and apparatus implemented with limited length character tables and compact string code utilization |
| US7685212B2 (en) * | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
| US20100274988A1 (en) | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
| US7089371B2 (en) | 2002-02-12 | 2006-08-08 | Ip-First, Llc | Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory |
| US7441104B2 (en) | 2002-03-30 | 2008-10-21 | Hewlett-Packard Development Company, L.P. | Parallel subword instructions with distributed results |
| US7373483B2 (en) | 2002-04-02 | 2008-05-13 | Ip-First, Llc | Mechanism for extending the number of registers in a microprocessor |
| US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
| US6918010B1 (en) | 2002-10-16 | 2005-07-12 | Silicon Graphics, Inc. | Method and system for prefetching data |
| US7103754B2 (en) | 2003-03-28 | 2006-09-05 | International Business Machines Corporation | Computer instructions for having extended signed displacement fields for finding instruction operands |
| US20040215924A1 (en) | 2003-04-28 | 2004-10-28 | Collard Jean-Francois C. | Analyzing stored data |
| US7035986B2 (en) | 2003-05-12 | 2006-04-25 | International Business Machines Corporation | System and method for simultaneous access of the same line in cache storage |
| US20040250027A1 (en) | 2003-06-04 | 2004-12-09 | Heflinger Kenneth A. | Method and system for comparing multiple bytes of data to stored string segments |
| US7539714B2 (en) | 2003-06-30 | 2009-05-26 | Intel Corporation | Method, apparatus, and instruction for performing a sign operation that multiplies |
| US7610466B2 (en) | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
| US7904905B2 (en) | 2003-11-14 | 2011-03-08 | Stmicroelectronics, Inc. | System and method for efficiently executing single program multiple data (SPMD) programs |
| GB2411973B (en) | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
| US20060095713A1 (en) | 2004-11-03 | 2006-05-04 | Stexar Corporation | Clip-and-pack instruction for processor |
| JP4837305B2 (ja) | 2005-05-10 | 2011-12-14 | ルネサスエレクトロニクス株式会社 | マイクロプロセッサ及びマイクロプロセッサの制御方法 |
| US7421566B2 (en) * | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
| US20070106883A1 (en) | 2005-11-07 | 2007-05-10 | Choquette Jack H | Efficient Streaming of Un-Aligned Load/Store Instructions that Save Unused Non-Aligned Data in a Scratch Register for the Next Instruction |
| US9436468B2 (en) | 2005-11-22 | 2016-09-06 | Intel Corporation | Technique for setting a vector mask |
| US8010953B2 (en) | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
| US7565514B2 (en) * | 2006-04-28 | 2009-07-21 | Freescale Semiconductor, Inc. | Parallel condition code generation for SIMD operations |
| CN101097488B (zh) | 2006-06-30 | 2011-05-04 | 2012244安大略公司 | 从接收的文本中学习字符片段的方法及相关手持电子设备 |
| US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
| JP2008077590A (ja) | 2006-09-25 | 2008-04-03 | Toshiba Corp | データ転送装置 |
| US7536532B2 (en) | 2006-09-27 | 2009-05-19 | International Business Machines Corporation | Merge operations of data arrays based on SIMD instructions |
| US7991987B2 (en) | 2007-05-10 | 2011-08-02 | Intel Corporation | Comparing text strings |
| CN101755265A (zh) | 2007-05-21 | 2010-06-23 | 茵科瑞蒂梅尔有限公司 | 交互式消息编辑系统和方法 |
| US20090063410A1 (en) | 2007-08-29 | 2009-03-05 | Nils Haustein | Method for Performing Parallel Data Indexing Within a Data Storage System |
| US7739434B2 (en) | 2008-01-11 | 2010-06-15 | International Business Machines Corporation | Performing a configuration virtual topology change and instruction therefore |
| US7870339B2 (en) | 2008-01-11 | 2011-01-11 | International Business Machines Corporation | Extract cache attribute facility and instruction therefore |
| US7895419B2 (en) | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
| US7877582B2 (en) | 2008-01-31 | 2011-01-25 | International Business Machines Corporation | Multi-addressable register file |
| US20100031007A1 (en) | 2008-02-18 | 2010-02-04 | Sandbridge Technologies, Inc. | Method to accelerate null-terminated string operations |
| DK176835B1 (da) | 2008-03-07 | 2009-11-23 | Jala Aps | Fremgangsmåde til skanning, medium indeholdende et program til udövelse af fremgangsmåden samt system til udövelse af fremgangsmåden |
| US8386547B2 (en) | 2008-10-31 | 2013-02-26 | Intel Corporation | Instruction and logic for performing range detection |
| JP5500652B2 (ja) | 2009-02-02 | 2014-05-21 | 日本電気株式会社 | 並列比較選択演算装置、プロセッサ及び並列比較選択演算方法 |
| JP5471082B2 (ja) | 2009-06-30 | 2014-04-16 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
| US8595471B2 (en) | 2010-01-22 | 2013-11-26 | Via Technologies, Inc. | Executing repeat load string instruction with guaranteed prefetch microcode to prefetch into cache for loading up to the last value in architectural register |
| US20110314263A1 (en) | 2010-06-22 | 2011-12-22 | International Business Machines Corporation | Instructions for performing an operation on two operands and subsequently storing an original value of operand |
| US8972698B2 (en) | 2010-12-22 | 2015-03-03 | Intel Corporation | Vector conflict instructions |
| US9009447B2 (en) * | 2011-07-18 | 2015-04-14 | Oracle International Corporation | Acceleration of string comparisons using vector instructions |
| US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
| US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
| US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
| US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
| US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
| US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
| US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
| US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
| US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
| US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
-
2012
- 2012-03-15 US US13/421,448 patent/US9715383B2/en active Active
-
2013
- 2013-03-01 TW TW102107377A patent/TWI567641B/zh active
- 2013-03-03 US US13/783,339 patent/US9772843B2/en active Active
- 2013-03-07 CA CA2866883A patent/CA2866883C/en active Active
- 2013-03-07 WO PCT/IB2013/051811 patent/WO2013136233A1/en not_active Ceased
- 2013-03-07 JP JP2014561558A patent/JP6238243B2/ja active Active
- 2013-03-07 DK DK13761350.1T patent/DK2758891T3/en active
- 2013-03-07 AU AU2013233993A patent/AU2013233993B2/en active Active
- 2013-03-07 ES ES13761350.1T patent/ES2552175T3/es active Active
- 2013-03-07 EP EP13761350.1A patent/EP2758891B1/en active Active
- 2013-03-07 CN CN201380014427.0A patent/CN104169907B/zh active Active
- 2013-03-07 SG SG11201404824TA patent/SG11201404824TA/en unknown
- 2013-03-07 KR KR1020147020221A patent/KR101606307B1/ko active Active
- 2013-03-07 RU RU2014118858/08A patent/RU2585975C2/ru active
-
2014
- 2014-05-27 IL IL232814A patent/IL232814A/en active IP Right Grant
Also Published As
| Publication number | Publication date |
|---|---|
| TWI567641B (zh) | 2017-01-21 |
| AU2013233993B2 (en) | 2016-05-19 |
| CN104169907B (zh) | 2017-04-26 |
| WO2013136233A1 (en) | 2013-09-19 |
| EP2758891A1 (en) | 2014-07-30 |
| US9715383B2 (en) | 2017-07-25 |
| JP6238243B2 (ja) | 2017-11-29 |
| JP2015514245A (ja) | 2015-05-18 |
| TW201403466A (zh) | 2014-01-16 |
| US9772843B2 (en) | 2017-09-26 |
| AU2013233993A1 (en) | 2014-09-11 |
| IL232814A (en) | 2017-07-31 |
| CA2866883C (en) | 2021-01-12 |
| CN104169907A (zh) | 2014-11-26 |
| EP2758891B1 (en) | 2015-10-07 |
| RU2585975C2 (ru) | 2016-06-10 |
| US20130246752A1 (en) | 2013-09-19 |
| IL232814A0 (en) | 2014-07-31 |
| CA2866883A1 (en) | 2013-09-19 |
| US20130246757A1 (en) | 2013-09-19 |
| DK2758891T3 (en) | 2015-11-09 |
| KR20140122229A (ko) | 2014-10-17 |
| RU2014118858A (ru) | 2015-11-20 |
| KR101606307B1 (ko) | 2016-03-24 |
| SG11201404824TA (en) | 2014-09-26 |
| EP2758891A4 (en) | 2014-10-08 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2675512T3 (es) | Instrucción para calcular la distancia a un límite de memoria específico | |
| DK2758891T3 (en) | Vektorinstruktion to find identical element | |
| ES2680147T3 (es) | Instrucción para cargar datos hasta una frontera de memoria especificada indicada por la instrucción | |
| US9959118B2 (en) | Instruction to load data up to a dynamically determined memory boundary | |
| RU2598814C2 (ru) | Команда векторного типа для поиска неравнозначного элемента | |
| RU2621000C2 (ru) | Определение длины группы символьных данных, содержащей символ окончания | |
| MX2014010945A (es) | Comparacion de intervalos de series de vectores. |