ES2527937T3 - Procesador programable y método con operaciones amplias - Google Patents

Procesador programable y método con operaciones amplias Download PDF

Info

Publication number
ES2527937T3
ES2527937T3 ES10191073.5T ES10191073T ES2527937T3 ES 2527937 T3 ES2527937 T3 ES 2527937T3 ES 10191073 T ES10191073 T ES 10191073T ES 2527937 T3 ES2527937 T3 ES 2527937T3
Authority
ES
Spain
Prior art keywords
operand
broad
storage
instruction
results
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.)
Expired - Lifetime
Application number
ES10191073.5T
Other languages
English (en)
Inventor
Craig Hansen
John Moussouris
Alexia Massalin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microunity Systems Engineering Inc
Original Assignee
Microunity Systems Engineering Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microunity Systems Engineering Inc filed Critical Microunity Systems Engineering Inc
Application granted granted Critical
Publication of ES2527937T3 publication Critical patent/ES2527937T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/392Floor-planning or layout, e.g. partitioning or placement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/398Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/158Finite field arithmetic processing
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/41Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors
    • H03M13/4161Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors implementing path management
    • H03M13/4169Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors implementing path management using traceback
    • GPHYSICS
    • G03PHOTOGRAPHY; CINEMATOGRAPHY; ANALOGOUS TECHNIQUES USING WAVES OTHER THAN OPTICAL WAVES; ELECTROGRAPHY; HOLOGRAPHY
    • G03FPHOTOMECHANICAL PRODUCTION OF TEXTURED OR PATTERNED SURFACES, e.g. FOR PRINTING, FOR PROCESSING OF SEMICONDUCTOR DEVICES; MATERIALS THEREFOR; ORIGINALS THEREFOR; APPARATUS SPECIALLY ADAPTED THEREFOR
    • G03F1/00Originals for photomechanical production of textured or patterned surfaces, e.g., masks, photo-masks, reticles; Mask blanks or pellicles therefor; Containers specially adapted therefor; Preparation thereof
    • G03F1/36Masks having proximity correction features; Preparation thereof, e.g. optical proximity correction [OPC] design processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2119/00Details relating to the type or aim of the analysis or the optimisation
    • G06F2119/18Manufacturability analysis or optimisation for manufacturability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Multimedia (AREA)
  • Architecture (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

Un procesador, que comprende: un primer camino de datos (137, 714 y 715) que tiene una primera anchura de bits; un segundo camino de datos (entre 136 y 149; 714 y 720n) que tiene una segunda anchura de bits mayor que la primera anchura de bits; una serie de terceros caminos de datos (155 a 158; 720A y 740) que tienen una anchura de bits combinada menor que la segunda anchura de bits; un primer almacenamiento de operando amplio (136, 714) acoplado al primer camino de datos y al segundo camino de datos para almacenar un primer operando amplio recibido sobre el primer camino de datos, teniendo el primer operando amplio un tamaño con un número de bits mayor que la primera anchura de bits; un segundo almacenamiento de operando amplio (134, 714) acoplado al primer camino de datos y al segundo camino de datos para almacenar un segundo operando amplio recibido sobre el primer camino de datos, teniendo el segundo operando amplio un tamaño con un número de bits mayor que la primera anchura de bits; un archivo de registros (720A a 720n) que incluye registros que tienen la primera anchura de bits, estando conectado el archivo de registros al primer camino de datos y a los terceros caminos de datos, e incluyendo almacenamiento (710) para un primer especificador de operando amplio que especifica una dirección de primer operando amplio y un segundo especificador de operando amplio que especifica una dirección del segundo operando amplio; una unidad funcional (149, 740) que puede iniciar instrucciones, la unidad funcional estando acoplada mediante el segundo camino de datos al primer almacenamiento de operando amplio y estando acoplada mediante los terceros caminos de datos al archivo de registros; y en el que la unidad funcional está dispuesta para ejecutar una instrucción de rebanada de transformada de Fourier amplia que contiene campos de instrucción que especifican (i) un primer registro de operando amplio (710) para provocar la recuperación del primer operando amplio para su almacenamiento en el primer almacenamiento de operando amplio, (ii) un segundo registro de operando amplio (710) para provocar la recuperación del segundo operando amplio para su almacenamiento en el segundo almacenamiento de operando amplio, (iii) por lo menos un registro de operando de control en forma de un registro general en el archivo de registros que almacena un operando de control y especifica parámetros de control de precisión y de extracción, y (iv) un registro de resultados (745) en el archivo de registros, y en el que la instrucción de rebanada de transformada de Fourier amplia está configurada para provocar que la unidad funcional (i) tome el primer operando amplio del primer almacenamiento de operando amplio, (ii) tome el segundo operando amplio del segundo almacenamiento de operando amplio, (iii) lleve a cabo multiplicaciones complejas paralelas de subconjuntos de elementos de datos del primer operando amplio, por subconjuntos de elementos de datos del segundo operando amplio para producir primeros resultados, (iv) lleve a cabo operaciones de mariposa paralelas y operaciones de extracción paralelas sobre subconjuntos de los primeros resultados para proporcionar de ese modo segundos resultados; en el que el resultado escalar de la instrucción de rebanada de transformada de Fourier amplia contiene información a partir de la cual se puede determinar la posición del bit más significativo de los segundos resultados; en el que la posición del bit más significativo del segundo resultado es: calculada mediante una serie de operaciones booleanas sobre subconjuntos paralelos de los segundos resultados, produciendo resultados booleanos vectoriales, y reduciendo además los resultados booleanos vectoriales a un valor booleano escalar, seguido por una determinación de la posición del bit más significativo del valor booleano escalar; y colocado en el registro general para proporcionar un parámetro de escala para su utilización en la fase subsiguiente de la instrucción de rebanada de transformada de Fourier amplia.

Description

DESCRIPCIÓN
Procesador programable y método con operaciones amplias
Campo de la invención 5
[0001] La presente invención se refiere a arquitecturas de procesador de propósito general, y en particular se refiere a arquitecturas de operandos amplios.
ANTECEDENTES DE LA INVENCIÓN 10
[0002] Los productos de comunicaciones requieren un mayor rendimiento computacional para procesar señales digitales en software en tiempo real. Los incrementos del rendimiento han pasado por mejoras en la tecnología de procesos y por mejoras en el diseño de los microprocesadores. Un mayor paralelismo, mayores frecuencias de reloj, mayores densidades, acoplados con herramientas de diseño mejoradas y compiladores los han hecho más 15 prácticos. Sin embargo, muchas de estas mejoras suponen una sobrecarga adicional en memoria y latencia, debido a la ausencia del ancho de banda necesario que está estrechamente acoplado con las unidades computacionales.
[0003] El nivel de rendimiento de un procesador, y en particular de un procesador de propósito general, se puede estimar a partir de varios de una serie de factores independientes: frecuencia de reloj, puertas por reloj, número de 20 operandos, anchura del camino de operandos y de datos, y división del camino de operandos y de datos. La frecuencia de reloj está influida en gran parte por la elección de la tecnología lógica y de circuitos, pero está influida asimismo por el número de puertas por reloj. Las puertas por reloj consisten en cuántas puertas en una segmentación pueden cambiar de estado en un solo ciclo de reloj. Esto se puede reducir al introducir cerrojos en el camino de datos: cuando se reduce el número de puertas entre cerrojos, es posible un reloj más rápido. Sin 25 embargo, los cerrojos adicionales producen una mayor longitud de segmentación, y por lo tanto tienen el coste de una mayor latencia de instrucciones. El número de operandos es sencillo; por ejemplo, sumando con técnicas de ahorro de acarreo, se pueden sumar juntos tres valores con poco más retardo del necesario para sumar dos valores. La anchura del camino de operandos y de datos define cuántos datos se pueden procesar a la vez; caminos de datos más amplios pueden realizar funciones más complejas, pero en general esto supone un mayor coste de 30 implementación. La división de los caminos de operandos y de datos se refiere a la utilización eficiente del camino de datos cuando se aumenta la anchura, con el objetivo de mantener sustancialmente el uso máximo.
[0004] La última división del camino de factores, operandos y datos se trata extensivamente en las patentes U.S.A. asignadas en común con la presente, de números 5 742 840, 5 794 060, 5 794 061, 5 809 321 y 5 822 603, que 35 describen sistemas y métodos para mejorar la utilización de un procesador de propósito general añadiendo clases de instrucciones. Estas clases de instrucciones utilizan los contenidos de registros de propósito general como fuentes de caminos de datos, dividen los operandos en símbolos de un tamaño especificado, realizan operaciones en paralelo, concatenan los resultados y colocan los resultados concatenados en un registro de propósito general. Éstas patentes, la totalidad de las cuales están asignadas al mismo cesionario de la presente invención, muestran 40 un microprocesador de propósito general que se ha optimizado para procesar y transmitir flujos de datos multimedia mediante un paralelismo significativo.
[0005] Si bien las patentes anteriores han ofrecido mejoras significativas en la utilización y el rendimiento de un microprocesador de propósito general, en particular para manejar comunicaciones de banda ancha tales como flujos 45 de datos multimedia, son posibles otras mejoras.
[0006] Muchos procesadores de propósito general tienen registros generales para almacenar operandos para instrucciones, haciéndose coincidir la anchura del registro con el tamaño del camino de datos. Los diseños de los procesadores limitan, en general, el número de registros accesibles por instrucción, debido a que el hardware para 50 acceder a estos registros es relativamente costoso en términos de energía y superficie. Mientras que el número de registros accesibles varía entre los diseños de procesadores, a menudo está limitado a dos, tres o cuatro registros por instrucción cuando dichas instrucciones están diseñadas para funcionar en un solo ciclo de reloj del procesador o en un solo flujo de segmentación. Algunos procesadores, tales como el Motorola 68000, tienen instrucciones para guardar y reestablecer un número ilimitado de registros, pero requieren múltiples ciclos para realizar dicha 55 instrucción.
[0007] El Motorola 68000 intenta asimismo superar un camino de datos estrecho combinado con un archivo de registros estrecho tomando múltiples ciclos o flujos de segmentación para realizar una instrucción, y emulando de ese modo un camino de datos más amplio. Sin embargo, dichas técnicas de precisión múltiple ofrecen solamente 60 una mejora marginal, en vista de los ciclos de reloj adicionales requeridos. Por lo tanto, la anchura y el número accesible de los registros de propósito general limita fundamentalmente la cantidad de procesamiento que puede ser realizado mediante una única instrucción en una máquina basada en registros.
[0008] Los procesadores existentes pueden proporcionar instrucciones que aceptan operandos, para las que se 65 leen uno o varios operandos desde un sistema de memoria de un procesador de propósito general. Sin embargo,
dado que estos operandos de memoria están especificados generalmente mediante operandos de registro, y el camino de datos del sistema de memoria no es más amplio que el camino de datos del procesador, no se mejora la anchura y el número accesible de operandos de propósito general por ciclo de instrucción o flujo de segmentación.
[0009] El número de operandos de registro de propósito general accesibles por instrucción está limitado 5 generalmente por la complejidad lógica y el tamaño de las instrucciones. Por ejemplo, se podrían implementar ciertas funciones deseables pero complejas, especificando un número mayor de registros de propósito general, pero habría que haber añadido una cantidad sustancial de lógica adicional a un diseño convencional, para permitir la lectura y omisión simultáneas de los valores de registro. Si bien en algunos diseños de la técnica anterior se han utilizado registros dedicados para aumentar el número o el tamaño de resultados u operandos fuente, instrucciones 10 explícitas cargan o almacenan valores en estos registros dedicados, y se requieren instrucciones adicionales para guardar y reestablecer estos registros tras un cambio de contexto del procesador.
[0010] El tamaño de un resultado de la unidad de ejecución puede estar limitado al de un registro general, de manera que no se requiere un almacenamiento dedicado u otro especial para el resultado. Especificar un gran 15 número de registros de propósito general como un resultado, requeriría análogamente añadir una cantidad sustancial de lógica adicional a un diseño convencional, para permitir la escritura y omisión simultáneas de los valores de registro.
[0011] Cuando el tamaño de un resultado de la unidad de ejecución está limitado, éste puede limitar la cantidad de 20 computación que puede ser gestionada razonablemente por una sola instrucción. Como consecuencia, es necesario implementar los algoritmos como una serie de etapas de una sola instrucción, en las que todos los resultados intermedios se pueden representar dentro de los límites. Eliminando este límite, se pueden desarrollar conjuntos de instrucciones en los que un componente mayor de un algoritmo se implementa como una sola instrucción, y la representación de los resultados intermedios deja de estar limitada en tamaño. Además, no es necesario que 25 algunos de estos resultados intermedios se retengan tras la finalización del componente mayor de un algoritmo, de manera que un procesador liberado de estas limitaciones puede mejorar el rendimiento y reducir la potencia de funcionamiento al no almacenar y recuperar estos resultados desde el archivo de registros generales. Cuando los resultados intermedios no se retienen en el archivo de registros generales, los conjuntos de instrucciones del procesador y los algoritmos implementados tampoco están limitados por el tamaño del archivo de registros 30 generales.
[0012] Por lo tanto, ha existido la necesidad de un sistema de procesador que pueda manejar eficientemente operandos y resultados de mayor anchura que el sistema de memoria o cualquier registro de propósito general accesible. Existe asimismo la necesidad de un sistema de procesador que pueda manejar eficientemente operandos 35 y resultados de mayor tamaño global que todo el archivo de registros generales.
[0013] El documento WO 00/23875 describe un procesador de propósito general que puede ejecutar una instrucción de matriz de multiplicación amplia que toma de un registro general una dirección para recuperar de la memoria un operando grande (amplio), recuperar de un registro general un segundo operando, realizar un grupo de 40 operaciones sobre bits divididos en los operandos, y concatenar juntos los resultados, colocando el resultado en un registro general.
[0014] Un documento de Pitsianis NP y otros, titulado "High-performance FFT implementation on the BOPS ManArray parallel DSP", publicado en los documentos de Advanced Signal Processing Algorithms, Architectures, 45 and Implementations 1X, 19 al 21 de julio de 1999, conferencia SPIE, volumen 3807, páginas 164 a 171, describe una implementación de alto rendimiento de un algoritmo de FFT que, para poner de manifiesto el paralelismo inherente a un algoritmo FFT, utiliza una factorización de la matriz DFT en productos de Kronecker, permutación y matrices diagonales.
50
[0015] La patente U.S.A. asignada en común y relacionada, número 6 295 599, describe en detalle un método y un sistema para mejorar el rendimiento de procesadores de propósito general expandiendo por lo menos un operando fuente de hasta una anchura mayor que cualquiera de la anchura del registro de propósito general o la anchura del camino de datos. Se pueden conseguir mejoras adicionales en el rendimiento mediante
55
RESUMEN DE LA INVENCIÓN
[0016] Un aspecto de la invención da a conocer un procesador tal como el definido en la reivindicación 1. Un segundo aspecto de la invención da a conocer un método tal como el definido en la reivindicación 25. Las realizaciones de la invención se exponen en las reivindicaciones dependientes. 60
BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0017]
65
La figura 1 es un diagrama a nivel de sistema que muestra los bloques funcionales de un procesador de propósito
general.
La figura 2 es una representación matricial de una multiplicación de matriz amplia.
La figura 3 es otra representación de una multiplicación de matriz amplia. 5
La figura 4 es un diagrama a nivel de sistema que muestra los bloques funcionales de un sistema que incorpora un procesador de multihilos simultáneos y acceso desacoplado de la ejecución.
La figura 5 muestra un operando amplio. 10
La figura 6 muestra un enfoque para la descodificación del especificador.
La figura 7 muestra un bloque operacional a partir de una unidad de función amplia.
15
La figura 8 muestra, en forma de diagrama de flujo, la función de control de microcaché amplia.
La figura 9 nuestra estructuras de datos de microcaché amplia.
Las figuras 10 y 11 muestran un control de microcaché amplia. 20
Las figuras 12A a 12D muestran una instrucción de Galois de matriz de multiplicación amplia.
Las figuras 13A a 13G muestran una instrucción de extracción de conjunto in situ.
25
Las figuras 14A a 14J muestran una instrucción de extracción de conjunto.
Las figuras 15A a 15C muestran una instrucción booleana de grupo.
Las figuras 16A a 16C muestran instrucciones de suma de grupo. 30
Las figuras 17A a 17C muestran instrucciones de establecimiento de grupo e instrucciones de resta del grupo.
Las figuras 18A a 18C muestran instrucciones de convolución de conjunto, división de conjunto, multiplicación de conjunto y suma de multiplicaciones de conjunto. 35
La figura 19 muestra funciones a modo de ejemplo que se definen para su utilización dentro de las definiciones detalladas de instrucciones, en otras secciones.
Las figuras 20A a 20C muestran instrucciones suma con coma flotante de conjunto, división con coma flotante de 40 conjunto y multiplicación con coma flotante de conjunto.
Las figuras 21A a 21C muestran instrucciones de resta con coma flotante de conjunto.
Las figuras 22A a 22D muestran instrucciones de compresión, expansión, rotación y desplazamiento de barras 45 cruzadas.
Las figuras 23A a 23D muestran instrucciones de extracción.
Las figuras 24A a 24B muestran instrucciones de Galois de solución amplia. 50
Las figuras 25A a 25B muestran instrucciones de rebanada de transformada amplia, de acuerdo con una realización a modo de ejemplo de la presente invención.
Las figuras 26A a 26K muestran instrucciones de extracción convolución amplia. 55
La figura 27 muestra transferencias entre memorias de operandos amplios.
DESCRIPCIÓN DETALLADA DE LA INVENCIÓN 60 Distribución del procesador
[0018] Haciendo referencia en primer lugar a la figura 1, se muestra en la misma un procesador de propósito general en forma de diagrama de bloques. En la figura 1, se muestran cuatro copias de una unidad de acceso, cada una con una cola de recuperación de instrucciones de acceso cola-A 101 a 104. Cada cola de recuperación de 65 instrucciones de acceso, cola-A 101 a 104 está acoplada a un archivo de registros de acceso AR 105 a 108, estando
acoplados cada uno de estos a dos unidades funcionales de acceso A 109 a 116. En una realización habitual, cada hilo del procesador puede tener del orden de sesenta y cuatro registros de propósito general (por ejemplo, los AR 105 a 108 y ER 125 a 128). Las unidades de acceso funcionan independientemente para cuatro hilos simultáneos de ejecución, y cada una calcula el flujo de control del programa realizando instrucciones aritméticas y de ramificación, y accede a la memoria realizando instrucciones de carga y almacenamiento. Estas unidades de acceso 5 proporcionan asimismo especificadores de operandos amplios para instrucciones de operandos amplios. Estas ocho unidades funcionales de acceso A 109 a 116 producen resultados para archivos de registros de acceso AR 105 a 108, y direcciones de memoria para un sistema de memoria compartido 117 a 120.
[0019] En una realización, la jerarquía de memoria incluye memoria de datos e instrucciones en chip, cachés de 10 instrucciones y datos, una instalación de memoria virtual e interfaces a dispositivos externos. En la figura 1, el sistema de memoria se compone de una memoria combinada caché y de nicho 117, una interfaz de bus externo 118, y, externamente al dispositivo, una caché secundaria 119 y un sistema de memoria principal con dispositivos E/S 120. Los contenidos de memoria recuperados del sistema de memoria 117 a 120 se combinan con instrucciones de ejecución no realizadas por la unidad de acceso, y se introducen en las cuatro colas de instrucción de ejecución 15 colas-E 121 a 124. Para instrucciones amplias, los contenidos de memoria recuperados del sistema de memoria 117 a 120 se proporcionan asimismo a microcachés de operandos amplios 132 a 136 mediante el bus 137. Los datos de memoria e instrucciones de la cola-E 121 a 124 se presentan a archivos de registros de ejecución 125 a 128, que recuperan operandos fuente de archivo de registros de ejecución. Las instrucciones se acoplan a la unidad de arbitraje de las unidades de ejecución Arbitraje 131, que selecciona qué instrucciones de los cuatro hilos se tienen 20 que encaminar a las unidades funcionales de ejecución disponibles E 141 y 149, X 142 y 148, G 143 a 144 y 146 a 147 y T 145. Cada una de las unidades funcionales de ejecución E 141 y 149, las unidades funcionales de ejecución X 142 y 148 y la unidades funcionales de ejecución T 145 contiene una microcaché de operandos amplios 132 a 136, cada una de las cuales está acoplada al sistema de memoria 117 mediante el bus 137.
25
[0020] Las unidades funcionales de ejecución G 143 a 144 y 146 a 147 son unidades aritméticas y lógicas de grupos que realizan instrucciones aritméticas y lógicas simples, incluyendo operaciones de grupos en las que los operandos de fuentes y de resultado representan un grupo de valores de un tamaño de símbolo especificado, que se dividen y se manejan por separado, concatenándose juntos los resultados. En una realización preferida actualmente, el camino de datos tiene 128 bits de amplitud, aunque la presente invención no desea limitarse a ningún tamaño 30 específico del camino de datos.
[0021] Las unidades funcionales de ejecución X 142 y 148 son unidades de conmutador de barras cruzadas que realizan instrucciones de conmutación de barras cruzadas. Las unidades de conmutación de barras cruzadas 142 y 148 realizan operaciones de manipulación de datos en el flujo de datos proporcionado sobre los buses de operandos 35 fuente del camino de datos 151 a 158, incluyendo transacciones, aleatorizaciones, desplazamientos, expansiones, compresiones, mezclas, permutaciones e inversiones, más las operaciones amplias descritas en adelante. En un elemento clave de un primer aspecto de la invención, por lo menos una de dichas operaciones será expandida a una anchura mayor que la anchura del camino de registros generales y de datos.
40
[0022] Las unidades funcionales de ejecución E 141 y 149 son unidades de conjunto que realizan instrucciones de conjunto utilizando un multiplicador matricial grande, que incluye multiplicación de grupos o de vectores y multiplicación de matrices, de operandos divididos desde los buses 151 a 158 de operandos fuente del camino de datos, y tratados como valores enteros, de coma flotante, polinómicos o de campos de Galois. Las instrucciones de multiplicación de matrices y otras operaciones utilizan un operando amplio cargado en la microcaché de operandos 45 amplios 132 y 136.
[0023] La unidad funcional de ejecución T 145 es una unidad de traducción que realiza operaciones de búsqueda en tablas, sobre un grupo de operandos divididos desde un operando de registro, y concatena el resultado. La instrucción de traducción amplia utiliza un operando amplio cargado en la microcaché de operandos amplios 134. 50
[0024] Las unidades funcionales de ejecución E 141, 149, las unidades funcionales de ejecución X 142, 148 y la unidad funcional de ejecución T contienen, cada una, un almacenamiento dedicado para permitir el almacenamiento de operandos fuente que incluyen operandos amplios, tal como se describe más adelante. El almacenamiento dedicado 132 a 136, que se puede considerar como una microcaché amplia, tiene habitualmente una anchura que 55 es un múltiplo de la anchura de los operandos del camino de datos relacionados con los buses 151 a 158 de operandos fuente del camino de datos. De este modo, si la anchura del camino de datos 151 a 158 es de 128 bits, el almacenamiento dedicado 132 a 136 puede tener una anchura de 256, 512, 1024 ó 2048 bits. Los operandos que utilizan toda la anchura del almacenamiento dedicado se denominan en el presente documento operandos amplios, aunque no es necesario en todos los casos que un operando amplio utilice íntegramente la anchura del 60 almacenamiento dedicado; es suficiente que el operando amplio utilice una parte mayor que la anchura del camino de datos de memoria de la salida del sistema de memoria a 117 a 120 y del camino de datos de la unidad funcional de la entrada de las unidades funcionales de ejecución 141 a 149, aunque no necesariamente mayor que la anchura de los dos combinados. Debido a que la anchura del almacenamiento dedicado 132 a 136 es mayor que la anchura del bus 137 de operandos de memoria, se cargan secuencialmente partes de los operandos amplios en el 65 almacenamiento dedicado 132 a 136. Sin embargo, una vez cargados, a continuación los operandos amplios
pueden ser utilizados sustancialmente al mismo tiempo. Se puede observar que las unidades funcionales 141 a 149 y los registros de ejecución asociados 125 a 128 forman una unidad funcional de datos, cuyos elementos exactos pueden variar con la implementación.
[0025] Los operandos fuente del archivo de registros de ejecución 125 a 128 se acoplan a las unidades de 5 ejecución 141 a 145 utilizando buses 151 a 154 de operandos fuente, y a las unidades de ejecución 145 a 149 utilizando buses 155 a 158 de operandos fuente. Los operandos resultado de unidades de función, procedentes de las unidades de ejecución 141 a 145, se acoplan al archivo de registros de ejecución ER 125 a 128 utilizando el bus de resultados 161, y los operandos de resultado de unidades de función, procedentes de las unidades de ejecución 145 a 149, se acoplan al archivo de registros de ejecución utilizando el bus de resultados 162. 10
Matriz de multiplicación amplia
[0026] Los operandos amplios proporcionan la capacidad de ejecutar instrucciones complejas, tales como la instrucción de matriz de multiplicación amplia mostrada en la figura 2, que se puede apreciar asimismo en una forma 15 alternativa en la figura 3. Tal como se puede apreciar por las figuras 2 y 3, un operando amplio permite, por ejemplo, la multiplicación matricial de varias formas y tamaños que exceden la anchura del camino de datos. El ejemplo de la figura 2 involucra una matriz especificada por el registro rc que tiene 128*64/tamaño bits (512 bits en este ejemplo), multiplicada por un vector contenido en el registro rb que tiene 128 bits, para proporcionar un resultado, colocado en el registro rd, de 128 bits. 20
[0027] La notación utilizada en la figura 2 y siguientes figuras similares muestra una multiplicación como un área sombreada en la intersección de dos operandos proyectados en las dimensiones horizontal y vertical. Un nodo de sumación se muestra como un segmento de línea que conecta puntos en negrita en la posición de los productos de multiplicador que se suman. Los productos que se restan en el nodo de sumación se indican con un símbolo menos 25 en el interior del área sombreada.
[0028] Cuando la instrucción aplica a valores de coma flotante, las multiplicaciones y las sumaciones mostradas son multiplicaciones y sumaciones de coma flotante. Una realización a modo de ejemplo puede realizar estas operaciones sin redondear los resultados intermedios, calculando por lo tanto el resultado final como si se hubiera 30 calculado con precisión infinita, y redondeando a continuación solamente una vez.
[0029] Se puede apreciar que una realización a modo de ejemplo de los multiplicadores puede calcular el producto en modo de ahorro de acarreo, y puede codificar el multiplicador rb utilizando codificación de Booth para minimizar el área y el retardo del circuito. Se puede apreciar que una realización a modo de ejemplo de dichos nodos de 35 sumación puede llevar a cabo la sumación de los productos en cualquier orden, prestando especial atención a minimizar el retardo de computación, tal como realizando las sumas en un árbol binario o de una base mayor, y puede utilizar sumadores con ahorro de acarreo para realizar la suma a efectos de minimizar el retardo de la sumación. Se puede apreciar asimismo que una realización a modo de ejemplo puede llevar a cabo la sumación utilizando la precisión intermedia suficiente para que no se produzcan desbordamientos de punto fijo o de coma 40 flotante en los resultados intermedios.
[0030] Se puede utilizar una comparación de las figuras 2 y 3 para aclarar la relación entre la notación utilizada en la figura 2 y la notación esquemática más convencional de la figura 3, dado que se muestra la misma operación en estas dos figuras. 45
Operando amplio
[0031] Los operandos que son sustancialmente mayores que la anchura del camino de datos del procesador se proporcionan utilizando el registro de propósito general para especificar un especificador de memoria desde el que 50 se puede leer, en el almacenamiento dedicado, datos de más de una, y en algunas realizaciones de varias, anchuras del camino de datos. El especificador de memoria incluye habitualmente la dirección de memoria junto con el tamaño y la forma de la matriz de datos sobre la que se está operando. El especificador de memoria o el especificador del operando amplio se pueden apreciar mejor en la figura 5, en la que se ve que un especificador 500 es una dirección, más un campo representativo del tamaño/2 y un campo adicional representativo de la anchura/2, 55 donde el tamaño es el producto de la profundidad por la anchura de los datos. La dirección está alineada a un tamaño específico, por ejemplo sesenta y cuatro octetos, de manera que una serie de los bits de orden bajo (por ejemplo, seis bits) son cero. De este modo, se puede ver que el especificador 500 comprende un primer campo 505 para la dirección, más dos índices de campo 510 dentro de los seis bits de orden bajo, para indicar tamaño y anchura. 60
Descodificación del especificador
[0032] La descodificación del especificador 500 se puede apreciar mejor en la figura 6, para un especificador dado 600 que se compone de un campo de dirección 605 junto con un campo 610 que comprende varios bits de orden 65 bajo. Mediante una serie de operaciones aritméticas mostradas en las etapas 615 y 620, se desarrolla la parte del
campo 610 representativa de anchura/2. En una serie similar de etapas mostrada en 625 y 630, se descodifica el valor de t, que se puede utilizar a continuación para descodificar tanto el tamaño como la dirección. La parte del campo 610 representativa de tamaño/2 se descodifica tal como se muestra en las etapas 635 y 640, mientras que la dirección se descodifica de manera similar a las etapas 645 y 650.
5
Unidad de función amplia
[0033] La unidad de función amplia se puede apreciar mejor en la figura 7, en la que se proporciona un número de registro 700 a un verificador de operandos 705. El especificador de operandos amplios 710 comunica con el verificador de operandos 705 y asimismo con la dirección de memoria 715 que tiene una anchura de memoria 10 definida. La dirección de memoria incluye una serie de n operandos de registro 720A, que se acumulan en una parte de almacenamiento dedicado 714 de una unidad funcional de datos 725. En la realización a modo de ejemplo mostrada en la figura 7, se puede ver que el almacenamiento dedicado 714 tiene una anchura igual a ocho anchuras del camino de datos, de tal modo que ocho porciones 730A-H del operando amplio se cargan secuencialmente en el almacenamiento dedicado para formar el operando amplio. Aunque en la figura 7 se muestran ocho porciones, la 15 presente invención no se limita a ocho ni a ningún otro múltiplo específico de anchuras del camino de datos. Una vez que las porciones 730A-H del operando amplio se cargan secuencialmente, pueden ser utilizadas como un único operando amplio 735 por el elemento funcional 740, que puede ser cualquier elemento o elementos de la figura 1 conectados al mismo. A continuación, el resultado del operando amplio se proporciona a un registro de resultados 745, que en una realización actualmente preferida tiene la misma anchura que la anchura de la memoria. 20
[0034] Una vez que el operando amplio se ha cargado satisfactoriamente en el almacenamiento dedicado 714, se puede apreciar un segundo aspecto de la presente invención. La ejecución posterior de esta instrucción o de otras instrucciones similares que especifican la misma dirección de memoria, puede leer el almacenamiento dedicado para obtener el valor del operando bajo condiciones específicas que determinan si el operando de memoria ha sido 25 modificado por instrucciones intermedias. Asumiendo que se satisfacen estas condiciones, el operando de memoria recuperado del almacenamiento dedicado se combina con uno o varios operandos de registro en la unidad funcional, produciendo un resultado. En algunas realizaciones, el tamaño del resultado está limitado al de un registro general, de manera que no se requiere un almacenamiento dedicado similar para el resultado. Sin embargo, en algunas realizaciones diferentes, el resultado puede ser un operando amplio, para mejorar adicionalmente el rendimiento. 30
[0035] Para permitir que el valor del operando amplio sea direccionado mediante instrucciones posteriores especificando la misma dirección de memoria, se tienen que comprobar y confirmar varias condiciones.
[0036] Estas condiciones incluyen: 35
Cada instrucción de almacenamiento de memoria comprueba la dirección de memoria frente a las direcciones de memoria registradas para el almacenamiento dedicado. Cualquier coincidencia provoca que el almacenamiento se marque como no valido, dado que una instrucción de almacenamiento de memoria dirigida a alguna dirección de memoria almacenada en el almacenamiento dedicado 714 significa que se han sobrescrito datos. 40
[0037] Se registra el número de registro utilizado para direccionar el almacenamiento. Si no se ha escrito ninguna instrucción intermedia en el registro, y se utiliza el mismo registro en la instrucción posterior, el almacenamiento es válido (salvo que se haya marcado como no valido mediante la regla #1).
45
[0038] Si el registro ha sido modificado o se utiliza un número de registro diferente, el valor del registro se lee y se compara con la dirección registrada para el almacenamiento dedicado. Esto utiliza más recursos que #1 debido a la necesidad de recuperar los contenidos del registro, y debido a que la anchura del registro es mayor que la del propio número del registro. Si la dirección coincide, el almacenamiento es válido. El nuevo número de registro se registra para el almacenamiento dedicado. 50
[0039] Si no se satisfacen las condiciones #2 ó #3, se utilizan los contenidos del registro para dirigirse a la memoria del procesador de propósito general y cargar el almacenamiento dedicado. Si el almacenamiento dedicado está ya totalmente cargado, es necesario descartar (sacrificar) una porción del almacenamiento dedicado para dejar espacio para el nuevo valor. A continuación se realiza la instrucción utilizando el almacenamiento dedicado recién 55 actualizado. La dirección y el número de registro se registra para el almacenamiento dedicado.
[0040] Al comprobar las condiciones anteriores, se elimina la necesidad de guardar y restablecer el almacenamiento dedicado. Además, si se varía el contexto del procesador y el nuevo contexto no utiliza instrucciones amplias que hacen referencia al mismo almacenamiento dedicado, cuando se restablece el contexto 60 original, se permite utilizar los contenidos del almacenamiento dedicado sin refrescar el valor desde la memoria, utilizando la regla de verificación #3. Debido a que los valores en el almacenamiento dedicado se leen desde la memoria y no se modifican directamente realizando operaciones amplias, los valores se pueden desechar en cualquier momento sin guardar los resultados en la memoria general. Esta propiedad simplifica la implementación de la regla #4 anterior. 65
[0041] Una realización alternativa de la presente invención puede sustituir la anterior regla #1 con la regla siguiente:
1a. Cada instrucción de almacenamiento de memoria comprueba la dirección de memoria frente a las direcciones de memoria registradas para el almacenamiento dedicado. Cualquier coincidencia provoca que se actualice el 5 almacenamiento dedicado, así como la memoria general.
[0042] Mediante la utilización de la anterior regla 1.a, las instrucciones de almacenamiento en memoria pueden modificar el almacenamiento dedicado, actualizando solamente la pieza del almacenamiento dedicado que ha cambiado, dejando intacto el resto. Continuando con la actualización de la memoria general, sigue siendo cierto que 10 los contenidos de la memoria dedicada se pueden desechar en cualquier momento sin guardar los resultados en la memoria general. Esta regla #4 no se complica mediante esta opción. La ventaja de esta realización alternativa es que no es necesario desechar (invalidar) el almacenamiento dedicado mediante operaciones de almacenamiento en memoria.
15
Estructuras de datos de microcaché amplia
[0043] Haciendo referencia a continuación a la figura 9, se puede apreciar mejor una disposición a modo de ejemplo de las estructuras de datos de la microcaché amplia o almacenamiento dedicado 114. Se puede ver que los contenidos de la microcaché amplia, wmc.c, forman una serie de anchuras del camino de datos 900A-n, aunque en 20 el ejemplo mostrado el número es de ocho. La dirección física, wmc.pa, se muestra como 64 bits en el ejemplo mostrado, si bien la invención no se limita a una anchura específica. El tamaño de los contenidos, wmc.size, se proporciona asimismo en un campo que se muestra como de 10 bits en una realización a modo de ejemplo. Se incluye asimismo en la estructura de datos un indicador de "contenido válido", wmc.cv, de un bit, junto con un campo de dos bits para el último hilo utilizado, o wmc.th. Además, en una realización a modo de ejemplo se proporciona un 25 campo de seis bits para el último registro utilizado, wmc.reg. Adicionalmente, se puede disponer un indicador de un bit para registro e hilo válido, o wmc.rtv.
Control de microcaché amplia – software
30
[0044] El proceso mediante el que la microcaché se escribe inicialmente con un operando amplio, y a continuación se verifica como válida para las operaciones posteriores, se puede apreciar mejor en la figura 8. El proceso comienza en 800, y avanza a la etapa 805 en la que se realiza una verificación de los contenidos del registro frente al valor almacenado wmc.rc. Si es correcta, se realiza una comprobación en la etapa 810 para verificar el hilo. Si es correcta, el proceso avanza a continuación a la etapa 815 para verificar si el registro y el hilo son válidos. Si la etapa 35 815 indica correcto, se realiza una comprobación en la etapa 820 para verificar si los contenidos son válidos. Si todas las etapas 805 a 820 indican correcto, la instrucción posterior puede utilizar el operando amplio existente tal como se muestra en la etapa 825, después de lo cual el proceso finaliza. Sin embargo, si alguna de las etapas 805 a 820 indica falso, el proceso se bifurca a la etapa 830, donde se establece el contenido, la dirección física y el tamaño. Dado que las etapas 805 a 820 conducen todas a alguna de las etapas 825 u 830, las etapas 805 a 820 se 40 pueden realizar en cualquier orden o simultáneamente, sin alterar el proceso. El proceso avanza a continuación a la etapa 835, donde se comprueba el tamaño. Esta comprobación asegura básicamente que el tamaño de la unidad de traducción es mayor o igual que el tamaño del operando amplio, de tal modo que una dirección física puede sustituir directamente la utilización de una dirección virtual. La cuestión es que, en algunas realizaciones, los operandos amplios pueden ser mayores que la zona mínima que es capaz de mapear el sistema de memoria virtual. Como 45 resultado, sería posible que un único rango de direcciones virtuales contiguas fuera mapeado a múltiples rangos de direcciones físicas disjuntas, complicando la tarea de comparar direcciones físicas. Determinando el tamaño del operando amplio y comparando este tamaño con el tamaño de la zona de mapeo de direcciones virtuales a la que se hace referencia, si el operando amplio es mayor que la zona de mapeo la instrucción se aborta con una interrupción de excepción. Esto garantiza el funcionamiento seguro del procesador. El software puede volver a mapear la zona 50 utilizando un mapa de mayor tamaño para continuar la ejecución, si se desea. Por lo tanto, si se notifica el tamaño como inaceptable en la etapa 835, se genera una excepción en la etapa 840. Si el tamaño es aceptable, el proceso avanza a la etapa 845, donde se comprueba la dirección física. Si la comprobación indica que es satisfactoria, el proceso avanza a la etapa 850, donde se realiza una comprobación del indicador de contenido válido. Si alguna comprobación en las etapas 845 ú 850 indica falso, el proceso se bifurca y se escribe contenido nuevo en el 55 almacenamiento dedicado 114, ajustándose en consecuencia los campos del mismo. Si la comprobación de la etapa 850 indica verdadero, o si se ha escrito contenido nuevo en la etapa 855, el proceso avanza a la etapa 860, en la que se configuran los campos adecuados para indicar la validez de los datos, después de lo cual se puede llevar a cabo la función solicitada, en la etapa 825. A continuación, el proceso finaliza.
60
Control de microcaché amplia – hardware
[0045] Haciendo referencia a continuación a las figuras 10 y 11, que muestran juntas el funcionamiento del controlador de la microcaché desde el punto de vista del hardware, se puede comprender mejor el funcionamiento del controlador de la microcaché. En la implementación del hardware, resulta evidente que las condiciones que se 65 indican como etapas secuenciales en las anteriores figuras 8 y 9 se pueden llevar a cabo en paralelo, reduciendo el
retardo para dicha verificación de operando amplio. Además, se puede incluir una copia del hardware indicado para cada microcaché amplia, y de ese modo la totalidad de dichas microcachés, a las que se puede hacer referencia alternativamente mediante una instrucción, se pueden verificar en paralelo. Se considera que no es necesaria ninguna discusión adicional de las figuras 10 y 11 en vista de la discusión extensiva de las anteriores figuras 8 y 9.
5
[0046] Existen varias alternativas al enfoque anterior para la utilización de los operandos amplios, incluyendo una implementación en la que una única instrucción puede aceptar dos operandos amplios, la división de los operandos en símbolos, multiplicar juntos símbolos correspondientes, y sumar los productos para producir un único valor escalar o un vector de valores divididos de la anchura del archivo de registros, posiblemente después de la extracción de una parte de las sumas. Dicha instrucción puede ser valiosa para la detección de movimiento o la 10 estimación de movimiento en la compresión de video. Una mejora adicional de dicha instrucción puede actualizar incrementalmente el almacenamiento dedicado si la dirección de un operando amplio está dentro del intervalo de operandos amplios especificados anteriormente en el almacenamiento dedicado, mediante cargar solamente la parte que no está ya dentro del intervalo y desplazar según se requiera la parte comprendida en el intervalo. Dicha mejora permite que el funcionamiento se realice sobre una "ventana móvil" de posibles valores. En una instrucción 15 semejante, un operando amplio está alineado y suministra la información de tamaño y forma, mientras que el segundo operando amplio, actualizado incrementalmente, no está alineado.
[0047] La siguiente tabla muestra la notación aritmética y descriptiva utilizada en el pseudocódigo de las figuras a las que se hace referencia a continuación: 20
x + y
suma de dos complementos, de x e y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x - y
resta de dos complementos, de y respecto de x. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x * y
multiplicación de dos complementos, de x e y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x / y
división de dos complementos, de x por y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x & y
operación bit a bit AND, de x e y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x | y
operación bit a bit OR, de x e y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
x ^ y
operación bit a bit OR exclusiva, de x e y. El resultado tiene el mismo tamaño que los operandos, y los operandos tienen que tener el mismo tamaño.
~x
inversión bit a bit de x. El resultado tiene mismo tamaño que el operando.
x = y
comparación de la igualdad de dos complementos, entre x e y. El resultado es un solo bit, y los operandos tienen que ser del mismo tamaño.
x ≠ y
comparación de la desigualdad de dos complementos, entre x e y. El resultado es un solo bit, y los operandos tienen que ser del mismo tamaño.
x < y
comparación de menor que, de dos complementos, entre x e y. El resultado es un solo bit, y los operandos tienen que ser del mismo tamaño.
x ≥ y
comparación de mayor o igual que, de dos complementos, entre x e y. El resultado es un solo bit, y los operandos tienen que ser del mismo tamaño.
√x
raíz cuadrada con coma flotante, de x.
x || y
concatenación del campo de bits x a la izquierda del campo de bits y.
xy
dígito binario x repetido, concatenado y veces. el tamaño del resultado es y.
xy
extracción del bit y (utilizando numeración de bits con comienzo por el extremo bajo) del valor x. El resultado es un solo bit.
xy..z
extracción del campo de bits formado por los bits y hasta z del valor x. El tamaño de los resultados es de - z+1; si z > y, el resultado es una cadena vacía.
x?y:z
valor de y, si x es cierto, de lo contrario valor de z. El valor de x es de un solo bit.
x ← y
asignación bit a bit, de x al valor de y.
x.y
campo secundario del campo de bits estructurado x.
Sn
formato de datos binarios de dos complementos, con signo, de n octetos.
Un
formato de datos binarios sin signo, de n octetos.
Fn
formato de datos con coma flotante, de n octetos.
Operaciones amplias
[0048] Los ejemplos particulares de operaciones amplias incluyen Galois de matriz de multiplicación amplia. Si 25 bien la discusión siguiente se centra en tamaños particulares para las instrucciones a modo de ejemplo, se apreciará que la invención no se limita a una anchura particular.
Galois de matriz de multiplicación amplia
[0049] En las figuras 12A a 12D se muestra una realización a modo de ejemplo de la instrucción de Galois de matriz de multiplicación amplia. En una realización a modo de ejemplo, la instrucción de Galois de matriz de multiplicación amplia realiza una multiplicación de matrices de la misma forma que anteriormente, excepto en que las multiplicaciones y sumas se realizan en aritmética de campos de Galois. Se puede especificar un tamaño de 8 bits 5 dentro de la instrucción. Los contenidos de un registro general especifican el polinomio con el que llevar a cabo la operación del resto en campos de Galois. La naturaleza de la multiplicación de matrices es nueva y se describe en detalle a continuación.
[0050] En una realización a modo de ejemplo, estas instrucciones toman una dirección desde un registro general 10 para recuperar de la memoria un operando grande, un segundo y tercer operandos desde los registros generales, realizan un grupo de operaciones en divisiones de bits en los operandos, y concatenan juntos los resultados, colocando el resultado en un registro general. En la figura 12A se muestra una realización a modo de ejemplo del formato 1810 de la instrucción de Galois de matriz de multiplicación amplia.
15
[0051] En la figura 12B se muestra una realización a modo de ejemplo del esquema 1830 de la instrucción de Galois de matriz de multiplicación amplia. En una realización a modo de ejemplo, los contenidos de un registro re se utilizan como dirección virtual, y se carga desde la memoria un valor de un tamaño específico. Un segundo y un tercer valores son los contenidos de los registros de rd y rb. Los valores se dividen en grupos de operandos del tamaño especificado. Los segundos valores se multiplican como polinomios por el primer valor, produciendo un 20 resultado que se reduce al campo de Galois especificado por el tercer valor, produciendo un grupo de valores de resultado. El grupo de valores de resultado se concatena y se coloca en el registro ra.
[0052] En una realización a modo de ejemplo, la instrucción de octetos de Galois de matriz de multiplicación amplia (W.MUL.MAT.G.8) realiza una multiplicación matricial dividida de hasta 16 384 bits, es decir 128 x 128 bits. 25 La anchura de la matriz se puede limitar a 128, 64, 32 ó 16 bits, pero sin ser menor que el doble del tamaño de grupo de 8 bits, añadiendo la mitad del tamaño deseado en octetos al operando de dirección virtual: 8, 4, 2 ó 1. La matriz se puede limitar verticalmente a 128, 64, 32 ó 16 bits, pero sin ser menor que el doble del tamaño del grupo de 8 bits, añadiendo la mitad del tamaño de operando de memoria deseado en octetos, al operando de dirección virtual. 30
[0053] En una realización a modo de ejemplo, la dirección virtual tiene que estar alineada a 256 octetos, o bien ser la suma de una dirección alineada y la mitad del tamaño del operando de memoria en octetos y/o la mitad del tamaño del resultado en octetos. Una dirección alineada tiene que ser un múltiplo exacto del tamaño expresado en octetos. Si la dirección no es válida se produce una excepción de "acceso denegado por dirección virtual". 35
[0054] Tal como se muestra en la figura 12B, una realización a modo de ejemplo de una instrucción de octetos de Galois de matriz de multiplicación amplia (W.MUL.MAT.G.8) multiplica la memoria [m255 m254 ... m1 m0] por el vector [ponmlkjihgfedcba], reduciendo el módulo polinómico [q] del resultado, proporcionando los productos [(pm255 + om247 + ... + bm31 + am15 mod q) (pm254 + om246 + ... + bm30 + am14 mod q) ... (pm248 + om240 + ... + bm16 40 + am0 mod q)].
[0055] En la figura 12C se muestra una realización a modo de ejemplo del pseudocódigo 1860 de la instrucción de Galois de matriz de multiplicación amplia. En la figura 12D se muestra una realización a modo de ejemplo de las excepciones 1890 de la instrucción de Galois de matriz de multiplicación amplia. 45
Operandos de memoria de ordenación convencional de octetos con comienzo por el extremo bajo o bien con comienzo por el extremo alto
[0056] Se facilitan operandos de memoria de ordenaciones de octetos convencionales con comienzo por el 50 extremo bajo o bien con comienzo por el extremo alto. Por consiguiente, todas las instrucciones de operandos amplios se especifican en dos formas, una para ordenación de octetos con comienzo por el extremo bajo y una para ordenación de octetos con comienzo por el extremo alto, tal como se especifica mediante una parte de la instrucción. El orden de los octetos especifica al sistema de memoria el orden en el que entregar los octetos dentro de unidades de la anchura del camino de datos (128 bits), así como el orden para colocar múltiples palabras de memoria (128 55 bits) dentro de un operando amplio mayor.
Extracción de una parte de orden superior de un producto o suma de productos de multiplicador
[0057] La extracción de una parte de orden superior de un producto o suma de productos de multiplicador, es una 60 manera de utilizar eficientemente una matriz grande de multiplicadores. La patente U.S.A. 5 742 840 y la patente U.S.A. 5 953 241 relacionadas describen un sistema y un método para mejorar la utilización de una serie de multiplicadores, añadiendo clases específicas de instrucciones a un procesador de propósito general. Esto aborda el problema de realizar la máxima utilización de una matriz grande de multiplicadores que se utiliza totalmente para aritmética de gran precisión - por ejemplo un multiplicador de 64 x 64 bits se utiliza por completo mediante una 65 multiplicación de 64 bits por 64 bits, pero se utiliza solamente una cuarta parte para una multiplicación de 32 bits por
32 bits) para (en relación con la anchura de datos del multiplicador y los registros) operaciones aritméticas de baja precisión. En particular, se especifican operaciones que realizan multiplicaciones de precisión muy baja que se combinan (suman) juntas de varias maneras. Una de las consideraciones de anulación en la selección del conjunto de operaciones es una limitación del tamaño del operando de resultado. En una realización a modo de ejemplo, por ejemplo, ese tamaño se puede limitar al orden de 128 bits, o de un único registro, aunque no existe una necesidad 5 de limitación específica del tamaño.
[0058] El tamaño de un resultado de multiplicación, un producto, es generalmente la suma de los tamaños de los operandos, de los multiplicandos y del multiplicador. Por consiguiente, las instrucciones de multiplicación especifican operaciones en las que el tamaño del resultado es el doble del tamaño de operandos de entrada de idéntico tamaño. 10 Para nuestro diseño de la técnica anterior, por ejemplo, una instrucción de multiplicación acepta dos fuentes de registro de 64 bits y produce un único resultado de un par de registros de 128 bits, utilizando una matriz entera de 64 x 64 multiplicadores para símbolos de 64 bits, o la mitad de la matriz de multiplicadores para pares de símbolos de 32 bits, o una cuarta parte de la matriz multiplicadora para cuádruplas de símbolos de 16 bits. Para todos estos casos, se debe observar que se combinan dos fuentes de registro de 64 bits, produciendo un resultado de 128 bits. 15
[0059] En algunas de las operaciones, incluyendo multiplicaciones complejas, convolución, y multiplicación de matrices, se suman juntos productos de multiplicadores de baja precisión. Las sumas incrementan más la precisión requerida. La suma de dos productos requiere un bit adicional de precisión; sumar cuatro productos requiere dos, sumar ocho productos requiere tres, sumar dieciséis productos requiere cuatro. En algunos diseños anteriores, se 20 pierde parte de esta precisión, lo que requiere escalar los operandos multiplicadores para evitar desbordamiento, reduciendo adicionalmente la precisión del resultado.
[0060] La utilización de los pares de registros crea una complejidad no deseable, porque tanto el par de registros como los valores individuales de los registros tienen que ser omitidos en las instrucciones subsiguientes. Como 25 resultado, con las técnicas de la técnica anterior solamente la mitad de los valores del registro de 128 bits de operando fuente se podrían utilizar para producir un resultado de 128 bits de un solo registro.
[0061] Una parte de orden superior del producto o suma de productos de multiplicador es extraída, ajustada por una cantidad de desplazamiento dinámica procedente de un registro general o de un ajuste especificado como parte 30 de la instrucción, y redondeada mediante un valor de control a partir de un registro o parte de instrucción como redondeo al entero/par más cercano, hacia cero, techo o piso. Los desbordamientos se tratan limitando el resultado a los valores máximo y mínimo que se pueden representar con precisión en el resultado de salida.
Extracción controlada por un registro 35
[0062] Cuando la extracción está controlada por un registro, el tamaño del resultado se puede especificar, lo que permite el redondeo y la limitación a un número menor de bits que pueden caber en el resultado. Esto permite escalar el resultado para su utilización en operaciones posteriores sin preocuparse del desbordamiento o el redondeo, mejorando el rendimiento. 40
[0063] Cuando la extracción está controlada por un registro, un único valor de registro define el tamaño de los operandos, la cantidad de desplazamiento y el tamaño del resultado, y el control de redondeo. Colocando toda esta información de control en un único registro, se reduce el tamaño de la instrucción respecto del número de bits que dicha instrucción requeriría de otro modo, mejorando el rendimiento e incrementando la flexibilidad del procesador. 45
[0064] Las instrucciones particulares son extracción convolución de conjunto, extracción multiplicación de conjunto, extracción multiplicación suma de conjunto y extracción suma escalar de conjunto.
Extracción de conjunto in situ 50
[0065] Las figuras 13A a 13G muestran una instrucción de extracción de conjunto in situ. En una realización a modo de ejemplo, varias de estas instrucciones (extracción convolución de conjunto, extracción multiplicación suma de conjunto) están disponibles habitualmente solamente en formas en las que la extracción se especifica como parte de la instrucción. Una alternativa puede incorporar formas de operaciones en las que el tamaño del operando, la 55 cantidad de desplazamiento y el redondeo pueden estar controlados por los contenidos de un registro general (tal como lo están en la instrucción de extracción multiplicación de conjunto). La definición de esa clase de instrucción para extracción convolución de conjunto, y extracción multiplicación suma de conjunto requeriría cuatro registros fuente, lo que incrementa la complejidad al requerir puertos adicionales de lectura de registros generales.
60
[0066] Estas operaciones toman operandos desde cuatro registros, realizan operaciones sobre divisiones de bits en los operandos, y colocan los resultados concatenados en un cuarto registro. En la figura 13A se muestra una realización a modo de ejemplo del formato y de los códigos de operación 1910 de la instrucción de extracción de conjunto in situ.
65
[0067] Los esquemas 1930, 1945, 1960 y 1975 de la instrucción de extracción de conjunto in situ se muestran en
las figuras 3C, 13D, 13E y 13F. En una realización a modo de ejemplo, se recuperan los contenidos de los registros rd, rc, rb y ra. La operación especificada se lleva a cabo sobre estos operandos. El resultado se coloca en el registro rd.
[0068] En una realización a modo de ejemplo, para la instrucción E.CON.X, se concatenan los contenidos de los 5 registros rd y rc, como c∥d, y se utilizan como un primer valor. Un segundo valor consisten los contenidos del registro rb. Los valores se dividen en grupos de operandos del tamaño especificado y se convolucionan, produciendo un grupo de valores. El grupo de valores es redondeado, limitado y extraído tal como se especifica, produciendo un grupo de resultados de tamaño especificado. El grupo de resultados es concatenado y colocado en el registro rd. 10
[0069] Para la instrucción E.MUL.ADD.X, los contenidos de los registros rc y rb se dividen en grupos de operandos del tamaño especificado y se multiplican, produciendo un grupo de valores a los que se suman los contenidos divididos extendidos del registro rd. El grupo de valores es redondeado, limitado y extraído tal como se especifica, proporcionando un grupo de resultados de tamaño especificado. El grupo de resultados es concatenado y colocado 15 en el registro rd.
[0070] Tal como se muestra en la figura 13B, los bits 31..0 de los contenidos del registro ra especifican varios parámetros que controlan la manera en que se extraen los datos y, para ciertas operaciones, la manera en que se lleva a cabo la operación. La posición de los campos de control permite que la posición de la fuente se sume a un 20 valor de control fijo para computación dinámica, y permite que los 16 bits inferiores del campo de control se configuren para alguno de los casos de extracción más simples, mediante una única instrucción GCOPYI.128. Los campos de control están dispuestos además de tal modo que es si solamente los 8 bits de orden bajo son distintos de cero, se realiza una extracción de 128 bits con truncado y sin redondeo.
25
[0071] La siguiente tabla describe el significado de cada etiqueta:
etiqueta
bits significado
fsize
8 tamaño del campo
dpos
8 posición de destino
x
1 resultado extendido vs. tamaño de grupo
s
1 con signo vs. sin signo
n
1 multiplicación compleja vs. real
m
1 multiplicación de signo mezclado vs. mismo signo
l
1 límite: saturación vs. truncado
rnd
2 redondeo
gssp
9 tamaño del grupo y posición de la fuente
[0072] En una realización a modo de ejemplo, el campo gssp de 9 bits codifica tanto el tamaño del grupo, gsize, como la posición de la fuente, spos, de acuerdo con la fórmula gssp = 512 - 4*gsize + spos. El tamaño del grupo, 30 gsize, es una potencia de dos comprendida en el intervalo de 1..128. La posición de la fuente, spos, está comprendida en el intervalo de 0..(2*gsize) - 1.
[0073] En una realización a modo de ejemplo, los valores en los campos x, s, n, m, l y rnd tienen el siguiente significado: 35
valores
x s n m l rnd
0
grupo sin signo real mismo signo truncado F
1
extendido con signo complejo signo mezclado saturar Z
2
N
3
C
Extracción multiplicación suma de conjunto
[0074] Tal como se muestra en la figura 13C una instrucción de extracción multiplicación suma de conjunto 40 dobletes (E.MULADDX) multiplica el vector rc [h g f e d c b a] por el vector rb [p o n m l k j i], y suma el vector rd [x w v u t s r q], proporcionando el vector resultado rd [hp+x go+w fn+v em+u dl+t ck+s bj+r ai+q], redondeado y limitado tal como se especifica mediante ra31..0.
[0075] Tal como se muestra en la figura 13D, una instrucción de extracción multiplicación suma de conjunto 45 dobletes complejos (E.MUL.X con n activado) multiplica el vector operando rc [h g f e d c b a] por el vector operando rb [p o n m l k j i], proporcionando el vector resultado rd [gp + ho go - hp en + fm em - fn cl + dk ck - dl aj + bi ai - bj], redondeado y limitado tal como se especifica mediante ra31..0. Se debe observar que esta instrucción prefiere una organización de números complejos en la que la parte real esté situada a la derecha (menor precisión) de la parte
imaginaria.
Extracción convolución de conjunto
[0076] Tal como se muestra en la figura 13E, una instrucción de extracción convolución de conjunto dobletes 5 (ECON.X con n = 0) convoluciona el vector rc ∥ rd [x w v u t s r q p o n m l kj i] con el vector rb [h g f e d c b a], proporcionando el vector de productos rd
[ax + bw + cv + du + et + fs + gr + hq ... as + br + cq + dp + eo + fn + gm + hl ar + bq + cp + do + en + fm + gl + hk aq + bp + co + dn + em + fl + gk + hj], redondeado y limitado tal como se especifica por ra31..0. 10
[0077] Tal como se muestra en la figura 13F, una instrucción de extracción convolución de conjunto dobletes complejos (ECON.X con n=1) convoluciona el vector rd ∥ rc [x w v u t s r q p o n m l k j i] con el vector rb [h g f e d c b a], proporcionando el vector de productos rd
15
[0078] [ax + bw + cv + du + et + fs + gr + hq ... as - bt + cq - dr + eo - fp + gm - hn ar + bq + cp + do + en + fm + gl + hk aq - br + co - dp + em - fn + gk + hl], redondeado y limitado tal como se especifica por ra31..0.
[0079] El pseudocódigo 1990 de la instrucción de extracción de conjunto in situ se muestra en la figura 13G. Puede no haber excepciones para la instrucción de extracción de conjunto in situ. 20
Extracción de conjunto
[0080] En las figuras 14A a 14J se muestra una instrucción de extracción de conjunto. Estas operaciones toman operandos de tres registros, realizan las operaciones sobre divisiones de bits en los operandos, y colocan los 25 resultados concatenados en un cuarto registro. El formato y los códigos de operación 2010 de la instrucción de extracción conjunto se muestran en la figura 14A.
[0081] En las figuras 14C, 14D, 14E, 20F, 20G, 20H y 20I se muestra a un esquema 2020, 2030, 2040, 2050, 2060, 2070 y 2080 de la instrucción de extracción de conjunto in situ. Los contenidos de los registros rd, rc y rb son 30 recuperados. La operación especificada se lleva a cabo sobre estos operandos. El resultado se coloca en el registro ra.
[0082] Tal como se muestra en la figura 14B, los bits 31..0 de los contenidos del registro rb especifican varios parámetros que controlan la manera en que se extraen los datos y, para ciertas operaciones, la manera en que se 35 lleva a cabo la operación. La posición de los campos de control permite que la posición de la fuente se sume a un valor de control fijo para computación dinámica, y permite que los 16 bits inferiores del campo de control se configuren para alguno de los casos de extracción más simples, mediante una única instrucción GCOPYI.128. Los campos de control están dispuestos además de tal modo que es si solamente los 8 bits de orden bajo son distintos de cero, se realiza una extracción de 128 bits con truncado y sin redondeo. 40
[0083] La siguiente tabla describe el significado de cada etiqueta:
etiqueta
bits significado
fsize
8 tamaño del campo
dpos
8 posición de destino
x
1 resultado extendido vs. tamaño de grupo
s
1 con signo vs. sin signo
n
1 multiplicación compleja vs. real
m
1 fusionar vs. extraer, o multiplicación de signo mezclado vs. mismo signo
l
1 límite: saturación vs. truncado
rnd
2 redondeo
gssp
9 tamaño del grupo y posición de la fuente
[0084] El campo gssp de 9 bits codifica tanto el tamaño del grupo, gsize, como la posición de la fuente, spos, de 45 acuerdo con la fórmula gssp = 512 4*gsize + spos. El tamaño del grupo, gsize, es una potencia de dos comprendida en el intervalo de 1..128. La posición de la fuente, spos, está comprendida en el intervalo de 0..(2*gsize) - 1.
[0085] Los valores en los campos x, s, n, m, l y rnd tienen el significado siguiente:
50
valores
x s n m l rnd
0
grupo sin signo real extraer/mismo signo truncado F
1
extendido con signo complejo fusionar/signo mezclado saturar Z
2
N
3
C
[0086] Para la instrucción E.SCAL.ADD.X, los bits 127..64 de los contenidos del registro rb especifican los multiplicadores para los multiplicandos en los registros rd y rc. Específicamente, los bits 64 + 2*gsize-1 .. 64 + gsize consisten en el multiplicador para los contenidos del registro rd, y los bits 64 + gsize-1 .. 64 consisten en el multiplicador para los contenidos del registro rc. 5
Extracción multiplicación de conjunto
[0087] Tal como se muestra en la figura 14C, una instrucción de extracción multiplicación de conjunto dobletes (E.MULX) multiplica el vector rd [h g f e d c b a] por el vector rc [p o n m l kj i], proporcionando el vector de resultado 10 ra [hp go fn em dl ck bj ai], redondeado y limitado tal como se especifica mediante rb31.. 0.
[0088] Tal como se muestra en la figura 14D, una instrucción de extracción multiplicación de conjunto dobletes complejos (E.MUL.X con n activado) multiplica el vector rd [h g f e d c b a] por el vector rc [p o n m l k j i], proporcionando el vector de resultado ra [gp + ho go - hp en + fm em - fn cl + dk ck - dl aj + bi ai - bj], redondeado y 15 limitado tal como se especifica mediante rb31..0. Se debe observar que esta instrucción prefiere una organización de números complejos en la que la parte real esté situada a la derecha (menor precisión) de la parte imaginaria.
Extracción suma escalar de conjunto
20
[0089] La instrucción de extracción suma escalar de conjunto, combina la información de control de extracción en un registro, con dos valores que se utilizan como multiplicadores escalares para los contenidos de dos multiplicandos vectoriales.
[0090] Esta combinación reduce el número de registros que serían necesarios en otro caso, o el número de bits 25 que de lo contrario requeriría la instrucción, mejorando el rendimiento. Otra ventaja de la presente invención es que la operación combinada se puede llevar a cabo mediante una realización a modo de ejemplo con la suficiente precisión interna en el nodo de sumación como para que no se produzca redondeo o desbordamiento intermedio, mejorando la precisión sobre la operación de la técnica anterior, en la que era necesario llevar a cabo más de una instrucción para este cálculo. 30
[0091] Tal como se muestra en la figura 14E, una instrucción de extracción de suma escalar de conjunto dobletes (E.SCAL.ADD.X) multiplica el vector rd [h g f e d c b a] por rb95.80 [r] y suma el producto al producto del vector rc [p o n m l k j i] por rb79..64 [q], proporcionando el resultado [hr + pq gr + oq fr + nq er + mq dr + lq cr + kq br + jq ar + iq], redondeado y limitado tal como se especifica por rb31.. 0. 35
[0092] Tal como se muestra en la figura 14F, una instrucción de extracción suma escalar de conjunto dobletes complejos (E.SCLADD.X con n activado) multiplica el vector rd [h g fe d c b a] por rb127..96 [t s] y suma el producto, al producto del vector rc [p o n m l k j i] por rb95..64 [r q], proporcionando el resultado [hs + gt + pq + or gs-ht + oq - pr fs + et + nq + mr es - ft + mq - nr ds + ct + lq + kr cs - dt + kq - lr bs + at + jq + ir as - bt + iq - jr], redondeado y limitado 40 tal como se especifica mediante rb31.. 0.
Extracción de conjunto
[0093] Tal como se muestra en la figura 14G, para la instrucción E.EXTRACT, cuando m=0 y x=0, los parámetros 45 especificados por los contenidos del registro rb se interpretan para seleccionar campos de símbolos de doble tamaño de los contenidos concatenados de los registros rd y rc, extrayendo valores que son concatenados y colocados en el registro ra.
[0094] Tal como se muestra en la figura 14H, para una extracción fusión de conjunto (E.EXTRACT cuando m=1), 50 los parámetros especificados por los contenidos del registro rb se interpretan para fusionar campos a partir de símbolos de los contenidos del registro rd con los contenidos del registro rc. Los resultados son concatenados y colocados en el registro ra. El campo x no tiene ningún efecto cuando m=1.
[0095] Tal como se muestra en la figura 14I, para una extracción expansión de conjunto (E.EXTRACT cuando m=0 55 y x=1), los parámetros especificados por los contenidos del registro rb se interpretan para extraer campos de símbolos de los contenidos del registro rd. Los resultados son concatenados y colocados en el registro ra. Se debe observar que no se utiliza el valor de rc.
[0096] En la figura 14J se muestra el pseudocódigo 2090 de la instrucción de extracción de conjunto. No existen 60 excepciones para la instrucción de extracción de conjunto.
Reducción de puertos de lectura de registros
[0097] Es posible reducir el número de puntos de lectura de registro necesarios para la implementación de 65 instrucciones en las que el tamaño, el desplazamiento y el redondeo de los operandos están controlados por un
registro. El valor del registro de control de extracción puede ser recuperado utilizando un ciclo adicional de una ejecución inicial, y retenido dentro de la unidad funcional o cerca de la misma para ejecuciones subsiguientes, reduciendo de este modo la cantidad de hardware necesario para la implementación con una pequeña penalización adicional sobre el rendimiento. El valor retenido se marcaría como no válido, provocando una nueva recuperación del registro de control extraído, mediante instrucciones que modifican el registro o, alternativamente, el valor retenido 5 se puede actualizar mediante dicha operación. Una nueva recuperación del registro del control de la extracción sería necesaria asimismo si se especificara un número de registro diferente en una ejecución posterior. Debería resultar evidente que las propiedades de las anteriores dos realizaciones alternativas se pueden combinar.
Aritmética de campos de Galois 10
[0098] En la aritmética de campos de Galois, las multiplicaciones se llevan a cabo mediante una multiplicación polinómica binaria inicial (multiplicaciones binarias sin signo con acarreos suprimidos), seguida por una operación de modulo polinómico/resto (división binaria sin signo con acarreos suprimidos). La operación de resto es relativamente costosa en superficie y retardo. En la aritmética de campos de Galois, la suma se lleva a cabo mediante la adición 15 binaria con acarreos suprimidos o, de manera equivalente, una operación OR exclusiva bit a bit. Se puede llevar a cabo una multiplicación de matrices utilizando aritmética de campos de Galois, donde las multiplicaciones y las sumas son multiplicaciones y sumas de campos de Galois.
[0099] Utilizando métodos de la técnica anterior, la multiplicación de un vector de 16 octetos por una matriz de 16 x 20 16 octetos se puede realizar como 256 multiplicaciones de campos de Galois de 8 bits y 16* 15=240 sumas de campos de Galois de 8 bits. En las 256 multiplicaciones de campos de Galois están incluidas 256 multiplicaciones polinómicas y 256 operaciones de resto polinómico.
[0100] El cálculo total se reduce significativamente llevando a cabo 256 multiplicaciones polinómicas, 240 sumas 25 polinómicas 16 bits y 16 operaciones de resto polinómico. Se debe observar que el coste de las sumas polinómicas se ha duplicado en comparación con las sumas de campos de Galois, dado que estas son ahora operaciones de 16 bits en lugar de operaciones de 8 bits, pero el coste de las funciones de resto polinómico se ha reducido en un factor de 16. En conjunto, esto constituye una solución favorable, dado que el coste de la suma es mucho menor que el coste del resto. 30
Acceso desacoplado de los segmentos de ejecución y multihilos simultáneos
[0101] Tal como se muestra mejor en la figura 4, la presente invención utiliza un acceso desacoplado respecto de las segmentaciones de ejecución y multihilos simultáneos, de una manera única. Las segmentaciones multihilos 35 simultáneas se han utilizado en la técnica anterior para mejorar la utilización de las unidades de camino de datos permitiendo que se emitan instrucciones desde uno de varios hilos de ejecución a cada unidad funcional (por ejemplo Dean M. Tullsen, Susan J. Eggers, y Henry M. Levy, "Simultaneous Multithreading: Maximizing On Chip Parallelism," Proceedings of the 22nd Annual International Symposium on Computer Architecture, Santa Margherita Ligure, Italia, junio de 1995). 40
[0102] El acceso desacoplado respecto de las segmentaciones de ejecución se ha utilizado en la técnica anterior para mejorar la utilización de las unidades de camino de datos de ejecución, mediante almacenar en memoria tampón resultados procedentes de una unidad de acceso, que calcula direcciones para una unidad de memoria que, a su vez, recupera de la memoria los elementos solicitados, y presentarlos a continuación a una unidad de ejecución 45 (por ejemplo, J. E. Smith, "Decoupled Access/Execute Computer Architectures", Proceedings of the Ninth Annual International Symposium on Computer Architecture, Austin, Tejas (26 a 29 de abril de 1982), páginas 112 a 119).
[0103] En comparación con las segmentaciones convencionales, la técnica anterior de Eggers utilizada en el ciclo de segmentación adicional antes de las instrucciones podría ser emitida para unidades funcionales, el ciclo adicional 50 siendo necesario para determinar a qué hilos se debería permitir emitir instrucciones. Por consiguiente, en relación con las segmentaciones convencionales, el diseño de la técnica anterior tenía un retardo adicional, incluyendo un retardo dependiente de las ramificaciones.
[0104] En el presente documento se describen unidades de camino de datos de acceso, con archivos de registros 55 asociados, para cada hilo de ejecución. Estas unidades de acceso producen direcciones, que se agregan juntas a una unidad de memoria común, que recupera todas las direcciones y coloca los contenidos de la memoria en una o varias memorias tampón. Las instrucciones para las unidades de ejecución, que se comparten en grados variables entre los hilos, son asimismo almacenadas en memoria tampón para su ejecución posterior. Las unidades de ejecución llevan a cabo a continuación operaciones desde todos los hilos activos utilizando unidades de camino de 60 datos funcionales que son compartidas.
[0105] Para las instrucciones llevadas a cabo por las unidades de ejecución, el ciclo adicional requerido por los diseños multihilo simultáneos de la técnica anterior se solapa con el tiempo de acceso a los datos de memoria del acceso desacoplado de la técnica anterior, de los ciclos de ejecución, de tal modo que las unidades funcionales no 65 incurren en ningún retardo adicional para planificar recursos. Para las instrucciones llevadas a cabo por las unidades
de acceso, al utilizar unidades de acceso individuales para cada hilo se elimina asimismo el ciclo adicional para planificar recursos compartidos.
[0106] Ésta constituye una solución favorable debido a que, si bien los hilos no comparten las unidades funcionales de acceso, estas unidades son relativamente pequeñas en comparación con las unidades funcionales de 5 ejecución, que son compartidas por los hilos.
[0107] En relación con la compartición de unidades de ejecución, la presente invención utiliza varias clases diferentes de unidades funcionales para la unidad de ejecución, con coste, utilización y rendimiento variables. En particular, las unidades G, que llevan a cabo operaciones simples de suma y bit a bit, son relativamente costosas (en 10 superficie y potencia) en comparación con las otras unidades, y su utilización es relativamente alta. Por consiguiente, el diseño utiliza cuatro de dichas unidades, donde cada unidad puede estar compartida entre dos hilos. La unidad X, que lleva a cabo una clase extensa de funciones de conmutación de datos, es más costosa y menos utilizada, de manera que se disponen dos unidades que se comparten, cada una, entre dos hilos. La unidad T, que lleva a cabo la instrucción de traducción amplia, es costosa y de utilización reducida, de manera que la única unidad 15 se comparte entre la totalidad de los cuatro hilos. La unidad E, que lleva a cabo la clase de instrucciones de conjunto, es muy costosa en superficie y potencia en comparación con las otras unidades funcionales, pero su utilización es relativamente alta, de manera que se disponen dos de dichas unidades, estando cada unidad compartida por dos hilos.
20
[0108] En la figura 4, se muestran cuatro copias de una unidad de acceso, cada una con una cola de recuperación de instrucciones de acceso cola-A 401 a 404, acoplada a un archivo de registros de acceso AR 405 a 408, cada uno de los cuales está acoplado, a su vez, a dos unidades funcionales de acceso A 409 a 416. Las unidades de acceso funcionan independientemente para cuatro hilos simultáneos de ejecución. Estas ocho unidades funcionales de acceso A 409 a 416 producen resultados para archivos de registros de acceso AR 405 a 408, y direcciones para un 25 sistema de memoria compartido 417. Los contenidos de memoria recuperados del sistema de memoria 417 se combinan con instrucciones de ejecución no realizadas por la unidad de acceso, y se introducen en las cuatro colas de instrucción de ejecución E-colas 421 a 424. Los datos de memoria e instrucciones de la cola-E 421 a 424 se presentan a archivos de registros de ejecución 425 a 428, que recuperan operandos fuente de archivo de registros de ejecución. Las instrucciones se acoplan a la unidad de arbitraje de las unidades de ejecución Arbitraje 431, que 30 selecciona qué instrucciones de los cuatro hilos tienen que ser encaminadas a las unidades de ejecución disponibles E 441 y 449, X 442 y 448, G 443 a 444 y 446 a 447 y T 445. Los operandos fuente del archivo de registros de ejecución ER 425 a 428 se acoplan las unidades de ejecución 441 a 445 utilizando buses de operandos fuente 451 a 454, y a las unidades de ejecución 445 a 449 utilizando buses de operandos fuente 455 a 458. Los operandos de resultado de unidades de función, procedentes de las unidades de ejecución 441 a 445 se acoplan al archivo de 35 registros de ejecución utilizando el bus de resultados 461, y los operandos de resultado de unidades de función, procedentes de las unidades de ejecución 445 a 449 se acoplan al archivo de registros de ejecución utilizando el bus de resultados 462.
Suma de grupos 40
[0109] La figura 16A presenta varios ejemplos de instrucciones de suma de grupos que alojan los diferentes tamaños de operandos, tales como un octeto (8 bits), un doblete (16 bits), una cuádrupla (32 bits), una 8-tupla (64 bits) y una 16-tupla (128 bits). Las figuras 16B y 16C muestran una realización a modo de ejemplo de un formato y códigos de operación que pueden ser utilizados para llevar a cabo las diversas instrucciones de suma de grupos 45 mostradas en la figura 16A. Tal como se muestra en las figuras 16B y 16C en esta realización a modo de ejemplo, los contenidos de los registros rc y rb se dividen en grupos de operando del tamaño especificado y se suman y, si se especifica, se verifica su desbordamiento o se limitan, proporcionando un grupo de resultados, cada uno de los cuales tiene el tamaño especificado. El grupo de resultados es concatenado y colocado en el registro rd. Si bien en este caso y en otros de la presente descripción se describe la utilización de dos registros de operandos y un registro 50 de resultado diferente, pueden ser implementadas asimismo otras disposiciones, tal como la utilización de valores inmediatos.
[0110] Por ejemplo, si el tamaño de operando especificado es un octeto (8 bits), y cada registro tiene 128 bits de amplitud, entonces el contenido de cada registro se puede dividir en 16 operandos individuales, y pueden tener lugar 55 16 operaciones de suma individuales diferentes, como resultado de una única instrucción de suma de grupo. Otras instrucciones que involucran grupos de operandos pueden llevar a cabo operaciones de grupo de manera similar.
Establecimiento de grupo y resta de grupo
60
[0111] Análogamente, la figura 17A presenta varios ejemplos de instrucciones de establecimiento de grupo e instrucciones de resta de grupo que alojan diferentes tamaños de operando. Las figuras 17B y 17C muestran una realización a modo de ejemplo de un formato y códigos de operación que pueden ser utilizados para llevar a cabo diversas instrucciones de establecimiento de grupo e instrucciones de resta del grupo. Tal como se muestra en las figuras 17B y 17C, los contenidos de los registros rc y rb están divididos en grupos de operandos del tamaño 65 especificado, y para las instrucciones de establecimiento de grupo se comparan para una condición aritmética
especificada, o para instrucciones de resta de grupo se restan y, si se especifica, se verifica su desbordamiento o se limitan, proporcionando un grupo de resultados, cada uno de los cuales tiene el tamaño especificado. El grupo de resultados es concatenado y colocado en el registro rd.
Convolución, división, multiplicación, suma de multiplicaciones de conjunto 5
[0112] Están disponibles asimismo otras operaciones de grupo de punto fijo. La figura 18A representa varios ejemplos de instrucciones de convolución de conjunto, división de conjunto, multiplicación de conjunto y suma de multiplicaciones de conjunto, que alojan diferentes tamaños de operandos. Las figuras 18B y 18C muestran una realización a modo de ejemplo de un formato y códigos de operación que pueden ser utilizados para llevar a cabo 10 las diversas instrucciones de convolución de conjunto, división de conjunto, multiplicación de conjunto y suma de multiplicaciones de conjunto. Tal como se muestra en la figura 18B y 18C, en esta realización a modo de ejemplo, los contenidos de los registros rc y rb son divididos en grupos de operandos del tamaño especificado y convolucionados o divididos o multiplicados, proporcionando un grupo de resultados, o multiplicados y sumados en un único resultado. El grupo de resultados es concatenado y colocado, o el resultado único es colocado, en el 15 registro rd.
Suma, división, multiplicación y resta de conjunto con coma flotante
[0113] De acuerdo con una realización de la invención, el procesador maneja asimismo diversas operaciones de 20 grupo con coma flotante que alojan diferentes tamaños de operandos. En este caso, los diferentes tamaños de operandos pueden representar operandos con coma flotante de precisiones diferentes, tal como precisión media (16 bits), precisión simple (32 bits), precisión doble (64 bits) y precisión cuádruple (128 bits). La figura 19 muestra funciones a modo de ejemplo están definidas para su utilización dentro de las definiciones de instrucción detalladas en otras secciones y figuras. En las funciones presentadas en la figura 19, un formato interno representa valores con 25 coma flotante con precisión infinita como una estructura de cuatro elementos que consiste en (1) s (bit de signo): 0 para positivo, 1 para negativo, (2) t (tipo): NORM, ZERO, SNAN, QNAN, INFINITY, (3) e (exponente) y (4) f: (fracción). La interpretación matemática de un valor normal coloca el punto binario en las unidades de la fracción, ajustado por el exponente: (-1)^s*(2^e)*f. La función F transforma un valor con coma flotante IEEE empaquetado al formato interno. La función PackF transforma un formato interno de nuevo al formato de coma flotante IEEE, con 30 control de redondeo y excepciones.
[0114] Las figuras 20A y 21A presentan varios ejemplos de instrucciones de suma, división, multiplicación y resta con coma flotante de conjunto. Las figuras 20B a C y 21B a C muestran una realización a modo de ejemplo de formatos y códigos de operación que pueden ser utilizados para llevar a cabo las diversas instrucciones de suma, 35 división, multiplicación y resta con coma flotante de conjunto. En estos ejemplos, las instrucciones de conjunto de suma, división y multiplicación con coma flotante se han identificado como "EnsembleFloatingPoint". Asimismo, las instrucciones de conjunto de resta con coma flotante se han identificado como "EnsembleReversedFloatingPoint". Tal como se muestra en las figuras 20B a C y 21B a C, en esta realización a modo de ejemplo, los contenidos de los registros rc y rb se dividen en grupos de operandos del tamaño especificado, y se lleva a cabo la operación de grupo 40 especificado, proporcionando un grupo de resultados. El grupo de resultados se concatena y se coloca en el registro rd.
[0115] En la presente realización, la operación se redondea utilizando la opción especificada de redondear, o utilizando redondear al más próximo, si no se especifica. Si se especifica una opción de redondeo, la operación 45 presenta una excepción de coma flotante si se produce una operación no válida de coma flotante, división por cero, desbordamiento o subdesbordamiento o, cuando se especifica, si el resultado es inexacto. Si no se especifica una opción de redondeo, no se presentan excepciones de coma flotante, y se manejan de acuerdo con las normas por defecto de IEEE 754.
50
Realización de una operación booleana bit a bit de tres entradas en una única instrucción (booleana de grupo)
[0116] Se da a conocer un sistema y un método para la realización de una operación Booleana bit a bit de tres entradas en una única instrucción. Se utiliza un método nuevo para codificar los ocho posibles estados de salida de 55 dicha operación en solamente siete bits, y se descodifican estos siete bits de nuevo en los ocho estados.
[0117] En las figuras 15A a 15C se muestra una instrucción Booleana de grupo. En una realización a modo de ejemplo, estas operaciones toman operandos de tres registros, realizan operaciones booleanas sobre bits correspondientes en los operandos, y colocan los resultados concatenados en el tercer registro. En la figura 15A se 60 muestra un formato 2310 de la instrucción booleana de grupo.
[0118] En la figura 15B se muestra un procedimiento 2320 de la instrucción booleana de grupo. Se toman tres valores de los contenidos de los registros rd, rc y rb. Los campos ih e il especifican una función de tres bits, que produce un resultado de un solo bit. La función especificada se evalúa para cada posición de bit, y los resultados se 65 concatenan y se colocan en el registro rd. El registro rd es tanto una fuente como un destino de esta instrucción.
[0119] La función se especifica mediante ocho bits, que proporcionan el resultado para cada posible valor de los tres bits fuente en cada posición de bit:
d
1 1 1 1 0 0 0 0
c
1 1 0 0 1 1 0 0
b
1 0 1 0 1 0 1 0
f(d,c,b)
f7 f6 f5 f4 f3 f2 f1 f0
5
[0120] Una función se puede modificar reordenando los bits del valor inmediato. La tabla siguiente muestra cómo el reordenamiento del valor inmediato f7.0 puede reordenar los operandos d, c, b para la misma función.
operación
inmediato
f(d,c,b)
f7 f6 f5 f4 f3 f2 f1 f0
f(c,d,b)
f7 f6 f3 f2 f5 f4 f1 f0
f(d,b,c)
f7 f5 f6 f4 f3 f1 f2f0
f(b,c,d)
f7 f3f5 f1 f6f2f4f0
f(c,b,d)
f7 f5 f3 f1 f6 f4 f2f0
f(b,d,c)
f7 f3 f6 f2 f5 f1 f4 f0
[0121] Utilizando este reordenamiento, una operación de la forma: b = f(d, c, b) puede ser decodificada en la forma 10 lícita: b = f(b, d, c). Por ejemplo, la función de: b=f(d, c, b)=d?c:b no se puede codificar, pero la función equivalente: d=c?b:d se puede determinar reordenando el código para d=f(d, c, b)=d?c: b, que es 11001010, de acuerdo con la norma para f(d, c, b) => f(c, b, d), al código 11011000.
Codificación 15
[0122] Algunas características especiales de este reordenamiento constituyen la base del modo en que ocho bits de especificación de la función se comprimen en siete bits inmediatos, en esta instrucción. Tal como se ve en la tabla anterior, en el caso general, un reordenamiento de operandos desde f(d,c,b) hasta f(d,b,c) (intercambiando rc y rb) requiere intercambiar los valores de f6 y f5 y los valores de f2 y f1. 20
[0123] Entre las 256 posibles funciones que puede llevar a cabo esta instrucción, una cuarta parte de las mismas (64 funciones) permanecen inalteradas mediante este reordenamiento. Estas funciones tienen la propiedad de que f6 = f5 y f2 = f1. Los valores de rc y rb (se debe observar que rc y rb son especificadores de registros, no los contenidos de los registros) se pueden intercambiar libremente, y por lo tanto están ordenados en orden ascendente o 25 descendente para indicar el valor de f2. (Se produce un caso especial cuando rc = rb, de manera que el ordenamiento de rc y rb no puede contener información. Sin embargo, dado que en este caso solamente pueden resultar los valores f7, f4, f3 y f0, no es necesario codificar f6, f5, f2 y f1 para este caso, de manera que no se requiere ningún tratamiento especial.) Estas funciones se codifican por los valores de f7, f6, f4, f3 y f0 en el campo intermedio y f2 en función de si rc > rb, utilizando por lo tanto 32 valores intermedios para 64 funciones. 30
[0124] Otra cuarta parte de las funciones tienen f6 = 1 y f5 = 0. Estas funciones se registran intercambiando rc y rb, f6 y f5, f2 y f1. Éstas comparten la misma codificación que la cuarta parte de las funciones en las que f6 = 0 y f5 = 1, y se codifican mediante los valores f7, f4, f3, f2, f1 y f0 en el campo intermedio inmediato, utilizando por lo tanto 64 valores intermedios para 128 funciones. 35
[0125] La cuarta parte restante de las funciones tienen f6 = f5 y f2 ≠ f1. La mitad de éstas, en las que f2 = 1 y f1 = 0, se registran intercambiando rc y rb, f6 y f5, f2 y f1. Éstas comparten entonces la misma codificación de las ocho de las funciones en las que f2 = 0 y f1 = 1, y se codifican mediante los valores f7, f6, f4, f3 y f0 en el campo inmediato, utilizando por lo tanto 32 valores inmediatos para 64 funciones. 40
[0126] La codificación de funciones se resume mediante la tabla siguiente:
f7
f6 f5 f4 f3 f2 f1 f0 trc>trb ih il5 il4 il3 il2 il1 il0 rc rb
f6 f2 f2 0 0 f6 f7 f4 f3 f0 trc trb
f6 f2 ~f2 0 0 f6 f7 f4 f3 f0 trb trc
f6 0 1 0 1 f6 f7 f4 f3 f0 trc trb
f6 1 0 0 1 f6 f7 f4 f3 f0 trb trc
0 1 1 f2 f1 f7 f4 f3 f0 trc trb
1 0 1 f1 f2 f7 f4 f3 f0 trb trc
[0127] La descodificación de funciones se resume en mediante la tabla siguiente: 45
ih
il5 il4 il3 il2 il1 il0 rc>rb f7 f6 f5 f4 f3 f2 f1 f0
0
0
0 il3 il4 il4 il2 il1 0 0 il0
0
0
1 il3 il4 il4 il2 il1 1 1 il0
0
1 il3 il4 il4 il2 il1 0 1 il0
1
il3 0 1 il2 il1 il5 il4 il0
[0128] Por la discusión anterior, se puede apreciar que un compilador o ensamblador que produce la instrucción codificada lleva a cabo las etapas anteriores para codificar la instrucción, comparando los valores f6 y f5 y los valores f2 y fl del campo inmediato para determinar cuál de los diversos medios de codificación del campo inmediato debe ser utilizado, y que la colocación de los especificadores del registro trb y trc en la instrucción codificada 5 depende de los valores de f2 (o fl) y f6 (o f5).
[0129] El pseudocódigo 2330 de la instrucción booleana de grupo se muestra en la figura 15C. A partir del código se puede apreciar que una realización a modo de ejemplo de un circuito que descodifica esta instrucción produce los valores f2 y f1, cuando los bits inmediatos ih e il5 son cero, mediante la comparación aritmética de los 10 especificadores de registro rc y rb, produciendo un valor de uno (1) para f2 y f1 cuando rc > rb. No existen excepciones para la instrucción booleana de grupo.
Compresión, expansión, rotación y desplazamiento de barras cruzadas
15
[0130] Las unidades de conmutación de barras cruzadas, tales como las unidades 142 y 148 llevan a cabo operaciones de manipulación de datos, tal como se ha descrito anteriormente. Tal como se muestra en la figura 22A, dichas operaciones de manipulación de datos pueden incluir varios ejemplos de operaciones de compresión de barras cruzadas, expansión de barras cruzadas, rotación de barras cruzadas y desplazamiento de barras cruzadas. Las figuras 22B y 22C muestran una realización a modo de ejemplo de un formato y códigos de operación que 20 pueden ser utilizados para llevar a cabo las diversas instrucciones de compresión de barras cruzadas, rotación de barras cruzadas, expansión de barras cruzadas y desplazamiento de barras cruzadas. Tal como se muestra en las figuras 22B y 22C. Los contenidos del registro rc son divididos en grupos de operandos del tamaño especificado, y comprimidos, expandidos, rotados o desplazados en la cantidad especificada mediante una parte de los contenidos del registro rb, proporcionando un grupo de resultados. El grupo de resultados es concatenado y colocado en el 25 registro rd.
[0131] Varias operaciones de compresión de grupo puedan convertir grupos de operandos, desde datos de mayor precisión a datos de menor precisión. Se puede seleccionar un subcampo de cada campo de bits, de la mitad de tamaño, arbitrario, para que se muestre en el resultado. Por ejemplo, la figura 22D muestra una operación 30 X.COMPRESS rd = rc, 16, 4, que lleva a cabo una selección de bits 19..4 de cada cuádrupla en una 16-tupla. Varias operaciones de desplazamiento del grupo pueden permitir el desplazamiento de grupos de operandos en un número especificado de bits, en un sentido especificado, tal como desplazamiento a la derecha o desplazamiento a la izquierda. Tal como se puede ver en la figura 22C, cierto grupo de instrucciones de desplazamiento a la izquierda de grupo pueden involucrar asimismo borrar (poner a cero) los bits vacíos de orden bajo asociados con el 35 desplazamiento, para cada operando. Cierto grupo de instrucciones de desplazamiento a la derecha de grupo puede involucrar borrar (poner a cero) los bits vacíos de orden alto asociados con el desplazamiento, para cada operando. Además, ciertas instrucciones de desplazamiento a la derecha de grupo pueden involucrar rellenar bits vacíos de orden alto asociados con el desplazamiento, con copias del bit de signo, para cada operando.
40
Extracción
[0132] Las operaciones de manipulación de datos pueden incluir asimismo una instrucción de extracción de barras cruzadas. Las figuras 23A y 23B muestran una realización a modo de ejemplo de un formato y códigos de operación que pueden ser utilizados para llevar a cabo la instrucción de extracción de barras cruzadas. Tal como se muestra 45 en las figuras 23A y 23B, se recuperan los contenidos de los registros rd, rc y rb. La operación especificada se lleva a cabo sobre estos operandos. El resultado se coloca en el registro ra.
[0133] La instrucción de extracción de barras cruzadas permite que se extraigan bits de operandos diferentes, de varias maneras. Específicamente, los bits 31..0 de los contenidos del registro rb especifican varios parámetros que 50 controlan la manera mediante la que se extraen datos, y para ciertas operaciones, la manera mediante la que se lleva a cabo la operación. La posición de los campos de control permite que la posición de la fuente se sume a un valor de control fijo para computación dinámica, y permite que los 16 bits inferiores del campo de control se configuren para alguno de los casos de extracción más simples, mediante una única instrucción GCOPYI.128 (ver el apéndice). Los campos de control están dispuestos además de tal modo que es si solamente los 8 bits de orden bajo 55 son distintos de cero, se realiza una extracción de 128 bits con truncado y sin redondeo.
[0134] La siguiente tabla describe el significado de cada etiqueta:
etiqueta
bits significado
fsize
8 tamaño del campo
dpos
8 posición de destino
x
1 reservado
s
1 con signo vs. sin signo
n
1 reservado
m
1 fusión vs. extracción
l
1 reservado
rnd
2 reservado
gssp
9 tamaño del grupo y posición de la fuente
5
[0135] El campo gssp de 9 bits codifica tanto el tamaño del grupo, gsize, como la posición de la fuente, spos, de acuerdo con la fórmula gssp = 512 -4*gsize + spos. El tamaño del grupo, gsize, es una potencia de dos comprendida en el intervalo de 1..128. La posición de la fuente, spos, está comprendida en el intervalo de 0..(2*gsize) - 1.
10
[0136] Los valores en los campos s, n, m, I y rnd tienen el siguiente significado:
valores
s n m l rnd
0
sin signo extracción
1
con signo fusión
2
3
[0137] Tal como se muestra en la figura 23C para la instrucción X.EXTRACT, cuando, m = 0, se interpreta que los parámetros seleccionan campos de los contenidos concatenados de los registros rd y rc, extrayendo valores que 15 están concatenados y colocados en el registro ra. Tal como se muestra en la figura 23D, para una fusión extracción de barras cruzadas (X.EXTRACT cuando m=1), se interpreta que los parámetros fusionan campos de los contenidos del registro rd con los contenidos del registro rc. Los resultados se concatenan y se colocan en el registro ra.
Galois de resolución amplia 20
[0138] En las figuras 24A a 24B se muestra una instrucción de Galois de resolución amplia. La figura 24A muestra un método y un aparato para resolver ecuaciones iterativamente. La operación particular descrita es un resolutor amplio para la clase de ecuaciones de congruencia polinómica de Galois L*S = W (mod z**2T), donde S, L y W son polinomios en un campo de Galois, tal como GF(256) de grado 2T, T + 1 y T respectivamente. La solución de este 25 problema es una etapa computacional central de ciertos códigos de corrección de errores, tales como códigos de Reed-Solomon, que corrigen óptimamente hasta T errores que en un bloque de símbolos a efectos debe proporcionar un medio de almacenamiento o de comunicación digital más fiable. Se pueden obtener detalles adicionales de las matemáticas que sustentan esta implementación en el documento de Sarwate, Dilip V. y Shanbhag, Naresh R., "High-Speed Architectures for Reed-Solomon Decoders", revisado el 7 de junio de 2000, 30 presentado a IEEE Trans VLSI Systems, accesible en
http://icims.csl.uiuc.edu/~shanbhag/vips/publications/bma.pdf
.
[0139] El aparato de la figura 24A contiene placas de memoria, multiplicadores de Galois, sumadores de Galois, multiplexores y circuitos de control que están ya contenidos en las realizaciones a modo de ejemplo a las que se hace referencia en la presente invención. Tal como se puede apreciar en la descripción de la instrucción de Galois 35 de multiplicación de matriz ampliada, la etapa del resto polinómico asociada habitualmente con la multiplicación de Galois se puede desplazar a continuación de la suma de Galois sustituyendo las etapas de resto y suma con una etapa de suma polinómica y resto.
[0140] Este aparato lee y escribe, en las placas de memoria incorporadas, múltiples etapas de iteraciones 40 sucesivas, tal como se especifica mediante el bloqueo de control de iteraciones dispuesto a la izquierda. Cada placa de memoria se carga inicialmente con el polinomio S, y cuando se han completado 2T iteraciones (en el ejemplo mostrado, T=4), la placa de memoria superior contiene los polinomios de solución deseados L y W. El bloque de código de la figura 24B describe detalles de la operación del aparato de la figura 24A, utilizando notación de lenguaje C. 45
[0141] Se pueden desarrollar códigos y aparatos similares para resolutores de ecuaciones iterativas de
multiplicación escalar-suma en otros dominios matemáticos, tales como enteros y números con coma flotante de varios tamaños, y para operandos matriciales de propiedades particulares, tales como matrices definidas positivas, o matrices simétricas, o matrices triangulares superiores o inferiores.
Rebanada de transformada amplia 5
[0142] En las figuras 25A a 25B se muestra una realización a modo de ejemplo de la instrucción de rebanada de transformada amplia. La figura 25A muestra un método y un aparato para un cálculo extremadamente rápido de transformadas, tales como la transformada de Fourier, que se requiere para comunicaciones en el dominio de frecuencias, análisis de imágenes, etc. En este aparato, se muestra una matriz 4 x 4 de 16 multiplicadores 10 complejos, cada uno adyacente a una primera caché de operandos amplios. Una segunda caché de operando amplio o matriz de memorias de coeficientes incorporada suministra operandos que se multiplican por los multiplicadores con el acceso de datos de la caché incorporada amplia. Los productos resultantes se suministran a placas de transformadas atómicas - en esta realización preferida, unidades de mariposa de base-4 o base-2. Estas unidades reciben los productos desde una fila o columna de multiplicadores, y depositan resultados con un paso 15 especificado e inversión digital, de nuevo en la primera caché de operandos amplios.
[0143] Un registro general ra contiene tanto la dirección del primer operando amplio como especificadores de tamaño y forma, y un segundo registro general rb contiene tanto la dirección del segundo operando amplio como especificadores de tamaño y forma. 20
[0144] Un registro general adicional rc especifica parámetros adicionales, tales como parámetros de precisión, de extracción de resultados (tal como en las diversas instrucciones de extracción descritas en el presente documento).
[0145] En una realización alternativa, el segundo operando de memoria puede estar situado junto al primer 25 operando de memoria en una memoria ampliada, utilizando un direccionamiento de memoria distintivo para obtener cualquiera del primero o el segundo operandos de memoria.
[0146] En una realización alternativa, los resultados se depositan en una tercera memoria caché de operandos amplios. Este tercer operando de memoria se puede combinar con el primer operando de memoria, de nuevo 30 utilizando direccionamiento de memoria distintivo. Renombrando las etiquetas de caché de operandos amplios, la tercera memoria puede alternar posiciones de almacenamiento con la primera memoria. De este modo, tras la finalización de la instrucción de rebanada de transformada amplia, se renombran las etiquetas de caché de operandos amplios de manera que el resultado aparece en una posición especificada por el primer operando de memoria. Esta alternancia permite la especificación de etapas de transformada no in situ, y permite que la operación 35 se aborte y reinicie a continuación, si es necesario como resultado de la interrupción del flujo de ejecución.
[0147] El bloque de código de la figura 25B describe los detalles de la operación del aparato de la figura 25A, utilizando notación de lenguaje C. Se pueden desarrollar códigos y aparatos similares para otras transformadas y otros dominios matemáticos, tales como polinomios, campos de Galois, y números de varios tamaños enteros, y 40 reales y complejos con coma flotante,
[0148] La instrucción de rebanada de transformada amplia calcula asimismo la posición del bit más significativo de todos los elementos resultantes, devolviendo dicho valor como un resultado escalar de la instrucción a colocar en el registro general rc. Éste es el mismo operando en el que se coloca la información de control de extracción y otra. 45 Notablemente, está localización del bit más significativo se calcula mediante una serie de operaciones booleanas sobre subconjuntos paralelos de los elementos resultantes, que produce resultados booleanos vectoriales y, al término de la operación, mediante una reducción del vector de resultados booleanos a un valor booleano escalar, seguida por la determinación del bit más significativo del valor booleano escalar.
50
[0149] Añadiendo los valores que representan el control de extracción y otra información a esta posición del bit más significativo, se obtiene un parámetro de escala adecuado, para su utilización en la fase posterior de la instrucción de rebanada de transformada amplia. Acumulando la información del bit más significativo, se puede obtener un valor de escala global para toda la transformada, y los resultados de la transformada se mantienen con precisión adicional sobre el de los esquemas de escala fija de la técnica anterior. 55
Extracción convolución amplia
[0150] Las figuras 26A a 26K muestran una instrucción de extracción convolución amplia. Un método y un aparato similares se pueden aplicar al filtrado digital mediante métodos de convolución de 1-D o 2-D, o a la estimación del 60 movimiento mediante el método de correlación 1-D o 2-D. La misma operación puede ser utilizada para correlación, dado que la correlación se puede calcular invirtiendo el orden del patrón 1-D o 2-D y realizando una convolución. Por lo tanto, la instrucción de convolución descrita en el presente documento puede ser utilizada para correlación, o se puede construir una instrucción de extracción correlación amplia que es similar a la instrucción de convolución descrita en el presente documento, excepto en que el orden del bloque de operandos de coeficientes se invierte en 65 1-D o 2-D.
[0151] Los coeficientes del filtro digital o un bloque de plantilla de estimación se almacenan en una memoria de operandos amplios, y los datos de imagen se almacenan en una segunda memoria de operandos amplios. Una sola fila o columna de datos de imagen puede ser desplazada en la matriz de la imagen, con un desplazamiento correspondiente, de la relación de las posiciones de los datos de la imagen con respecto al bloque de plantilla y los 5 multiplicadores. Mediante este método de actualizar parcialmente y desplazar los datos a la segunda memoria incorporada, la correlación de la plantilla frente a la imagen se puede calcular con un ancho de banda eficaz muy mejorado para la matriz multiplicadora. Se debe observar que en la presente realización, en lugar de desplazar la matriz, se utiliza direccionamiento circular, y se especifica una cantidad o posición inicial del desplazamiento, como parámetro de la instrucción. 10
[0152] Las figuras 26A y 26B muestran un formato y códigos de operación que pueden ser utilizados para realizar la instrucción de extracción convolución amplia. Tal como se muestra en las figuras 26A y 26B, en esta realización a modo de ejemplo, los contenidos de los registros generales rc y rd se utilizan como especificadores de operandos amplios. Estos especificadores determinan las direcciones virtuales, el tamaño de los operandos amplios y la forma 15 para los operandos amplios. Utilizando las direcciones virtuales y los tamaños de operandos, un primer y un segundo valores del tamaño especificado se cargan desde la memoria. El tamaño del grupo y otros parámetros se especifican a partir de los contenidos del registro general rb. Los valores se dividen en grupos de operandos del tamaño y de la forma especificados y se convolucionan, produciendo un grupo de valores. El grupo de valores se redondea, y se limita según se especifica, produciendo un grupo de resultados que tiene el tamaño especificado. El 20 grupo de resultados se concatena y se coloca en el registro general ra.
[0153] Las instrucciones de extracción convolución amplia (W.CONVOLVE.X.B, W.CONVOLVE.X.L) realizan una multiplicación matricial dividida de un tamaño máximo limitado solamente por la extensión de los operandos de memoria, no por el tamaño del camino de datos. La extensión, el tamaño y la forma de los parámetros de los 25 operandos de memoria se especifican siempre como potencias de dos; parámetros adicionales pueden limitar la extensión de los operandos válidos dentro de la zona de una potencia de dos.
[0154] Tal como se muestra en la figura 26C, cada uno de los especificadores de operandos amplios especifica una extensión de un operando de memoria sumando la mitad de la extensión deseada del operando de memoria, en 30 octetos, a los especificadores. Cada uno de los especificadores de operandos amplios especifica una forma de operando de memoria sumando un cuarto de la anchura deseada, en octetos, a los especificadores. Las alturas de cada uno de los operandos de memoria se pueden deducir dividiendo la extensión del operando por la anchura del operando. Los vectores unidimensionales se representan como matrices con una altura de uno y con anchura igual a la extensión. En una realización alternativa, algunas de las especificaciones del presente documento pueden estar 35 incluidas como parte de la instrucción.
[0155] La instrucción de extracción convolución amplia permite calcular de varias maneras los bits a extraer del grupo de valores. Por ejemplo, los bits 31..0 de los contenidos del registro general rb especifican varios parámetros que controlan la manera en que son extraídos los datos. La posición y los valores por defecto de los campos de 40 control permiten que la posición de la fuente se sume a un valor de control fijo para cálculo dinámico, y permiten que los 16 bits inferiores del campo de control se configuren para alguno de los casos más simples mediante una única instrucción GCOPYI, pudiendo estar incluidas algunas de las especificaciones del presente documento como parte de dicha instrucción.
45
[0156] La siguiente tabla describe el significado de cada etiqueta:
etiqueta
bits significado
fsize
8 tamaño del campo
dpos
8 posición de destino
x
1 resultado extendido vs. tamaño de grupo
s
1 con signo vs. sin signo
n
1 multiplicación compleja vs. real
m
1 multiplicación con signo mezclado vs. mismo signo
l
1 saturación vs. truncado
rnd
2 redondeo
gssp
9 tamaño del grupo y posición de la fuente
50
[0157] El campo gssp de 9 bits codifica tanto el tamaño del grupo, gsize, como la posición de la fuente, spos, de acuerdo con la fórmula gssp = 512 -4*gsize + spos. El tamaño del grupo, gsize, es una potencia de dos comprendida
en el intervalo de 1..128. La posición de la fuente, spos, está comprendida en el intervalo de 0..(2*gsize) - 1.
[0158] Los valores en los campos x, s, n, m, l y rnd tienen el significado siguiente:
valores
x s n m l rnd
0
grupo sin signo real mismo signo truncado F
1
extendido con signo complejo signo mezclado saturar Z
2
N
3
C
5
[0159] Los bits 95..32 de los contenidos del registro general rb especifican varios parámetros que controlan la selección de divisiones de los operandos de memoria. La posición y los valores por defecto de los campos de control permiten que el campo de longitud de ceros del multiplicador valga cero por defecto, y que el cálculo del campo de posición del origen del multiplicando fluctúe sin desbordar ningún otro campo utilizando aritmética de 32 bits.
10
[0160] La siguiente tabla describe el significado de cada etiqueta:
etiqueta
bits significado
mpos
32 posición de origen del multiplicando
mzero
32 longitud de ceros del multiplicador
15
[0161] El campo mpos de 32 bits codifica la posición tanto horizontal como vertical del origen del multiplicando, que es la posición del elemento multiplicando en que el elemento cero-ésimo del multiplicador se combina para producir el elemento 0-ésimo del resultado. Valores variables en este campo permiten calcular diversos resultados sin cambios en los dos operandos amplios. El campo mpos está a un desplazamiento de un octeto desde el comienzo del operando del multiplicando. 20
[0162] El campo mzero de 32 bits codifica una parte del operando multiplicador que tiene valor cero, y que se puede omitir del cálculo de multiplicación y de suma. Las implementaciones pueden utilizar un valor distinto de cero en este campo, para reducir el tiempo y/o la potencia para la realización de la instrucción, o pueden ignorar el contenido de este campo. La implementación puede presumir un valor cero para el operando de multiplicador en los 25 bits dmsize-1..dmsize-(mzero*8), y saltarse la multiplicación de cualquier multiplicador obtenido en este intervalo de bits. El campo mzero está a un desplazamiento de un octeto desde el final del operando multiplicador.
[0163] Las direcciones virtuales de los operandos amplios tienen que estar alineadas, es decir, las direcciones de octeto tienen que ser un múltiplo exacto de la extensión del operando expresada en octetos. Si las direcciones no 30 están alineadas, las direcciones virtuales no se pueden codificar en un especificador válido. Algunos especificadores no válidos provocan una extensión de "límite de operando".
[0164] El redondeo Z (cero) no se define para operaciones de extracción sin signo, de manera que se sustituye por el redondeo F (piso), que redondeará adecuadamente hacia abajo los resultados sin signo. 35
[0165] Una implementación puede limitar la extensión de los operandos debido a límites en la memoria de operandos o en la caché, o debido al número de valores que se pueden sumar con precisión, y provocar de ese modo una excepción ReservedInstruction.
40
[0166] Tal como se muestra en las figuras 26D y 26E, como un ejemplo con valores de registro específicos, una instrucción de extracción convolución amplia dobletes (W.CONVOLVE.X.B o W.CONVOLVE.X.L), con inicio en rb = 24, convoluciona el vector de memoria rc [c31 c30.. c1 c0] con el vector de memoria rd [d15 d14 ... d1 d0], proporcionando los productos [c16d15 + c17d14 + ... + c30d1 + c31d0 cl5d15 + c16dl4 + ... + c29dl + c30d0 ... c10d15 + c11d14 + ... + c24d1 + c25d0 c9d15 + c10d14 + ... + c23d1 + c24d0], redondeados y limitados tal como se 45 especifica mediante los contenidos del registro general rb. Los valores c8...c0 no se utilizan en el cálculo y pueden ser cualquier valor.
[0167] Tal como se muestra en las figuras 26F y 26G, como un ejemplo con valores de registro específicos, una instrucción de extracción convolución amplia dobletes (W.CONVOLVE.X.L), con mpos en rb = 8 y mzero en rb = 48 50 (de manera que longitud = (512-mzero)*dmsize/512 = 13), convoluciona el vector de memoria rc [c31 c30.. c1 c0] con el vector de memoria rd [d15 d14 ... d1 d0], produciendo los productos [c3d12 + c4d11 + ... + c14d1 + c15d0 c2d12 + c3d11 + ... + c13d1 + c14d0 ... c29d12 + c30d11 + ... + c8d1 + c9d0 c28d12 + c29d11 + ... + c7d1 + c8d0], redondeados y limitados tal como se especifica. En este caso, la posición de inicio está situada de manera que el
rango útil de valores fluctúa por debajo de c0, hasta c31...28. Los valores c27...c16 no se utilizan en el cálculo y pueden ser cualquier valor. El parámetro de longitud está fijado en 13, de manera que los valores d15...d13 tienen que ser cero.
[0168] Tal como se muestra en las figuras 26H y 26I, como un ejemplo con valores de registro específicos, una 5 instrucción de extracción convolución amplia dobletes bidimensional (W.CONVOLVE.X.B ó W.CONVOLVE.X.L), con mpos en rb = 24 y vsize en rc y rd = 4, convoluciona el vector de memoria rc [c127 c126 ... c31 c30 ... c1 c0] con el vector de memoria rd [d63 d62 ... d15 d14 ... d1 d0], produciendo los productos [c113d63 + c112d62 + ... + c16d15 + c17d14 + ... + c30d1 + c31d0 c112d63 + c111d62 + ... + c15d15 + c16d14 + ... + c29d1 + c30d0 ... c107d63 + c106d62 + ... + c10d15 + c11d14 + ... + c24d1 + c25d0 c106d63 + c105d62 + ... + c9d15 + c10d14 + ... + c23d1 + 10 c24d0], redondeados y limitados tal como se especifica por los contenidos del registro general rb.
[0169] Tal como se muestra en las figuras 26J y 26K, con un ejemplo con valores de registro específicos, una instrucción de extracción convolución amplia dobletes complejos (W.CONVOLVE.X.B o W.CONVOLVE.X.L con n configurado en rb), con mpos en rb = 12, convoluciona el vector de memoria rc [c15 c14.. c1 c0] con el vector de 15 memoria rd [d7 d6 ... d1 d0], produciendo los productos [c8d7 + c9d6 + ... + c16d1 + c15d0 c7d7 + c8d6 + ... + c13d1 + c14d0 c6d7 + c7d6 + ... + c12d1 + c13d0 c5d7 + c6d6 + ... + c11d1 + c12d0], redondeados y limitados tal como se especifica mediante los contenidos del registro general rb.
Coma flotante de convolución amplia 20
[0170] Una inserción de coma flotante de convolución amplia funciona de manera similar a la instrucción de extracción convolución amplia descrita anteriormente, excepto en que las multiplicaciones y sumas de los operandos se llevan a cabo utilizando aritmética de coma flotante. La representación de los productos de multiplicación y de las sumas intermedias en una realización a modo de ejemplo se lleva a cabo sin redondeo con precisión esencialmente 25 no limitada, con los resultados finales sujetos a un redondeo simple a la precisión del operando de resultado. En una realización alternativa, los productos y las sumas se calculan con precisión extendida, pero limitada. En otra realización alternativa, los productos y las sumas se calculan con precisión limitada al tamaño de los operandos.
[0171] La instrucción de coma flotante de convolución amplia en una realización a modo de ejemplo puede utilizar 30 el mismo formato para los campos de registro general rb en la instrucción de extracción convolución amplia, excepto para campos que no son aplicables a la aritmética de coma flotante. Por ejemplo, los campos fsize, dpos, s, m y I, y el parámetro spos del campo gssp se pueden ignorar para esta instrucción. En una realización alternativa, parte de la información restante se puede especificar dentro de la instrucción, tal como el parámetro gsize o el parámetro n, o se pueden fijar los valores especificados, de manera que el parámetro de redondeo se puede fijar a redondeo al más 35 próximo. En una realización alternativa, los campos restantes se pueden reordenar, por ejemplo, si todos menos el campo mpos están contenidos dentro de la instrucción o se ignoran, el campo mpos solamente por estar contenido en la parte menos significativa de los contenidos del registro general rb.
Descodificación amplia 40
[0172] Otra categoría de operaciones amplias mejoradas es útil para corrección de errores por medio de descodificación de Viterbi o turbo. En este caso, las placas de memoria incorporada se utilizan para contener métricas de estado y dígitos de decisión pre-rastreo. Una matriz de unidades de suma-comparación-intercambio o log-MAP reciben un pequeño número de métricas de ramificación, tal como 128 bits procedentes desde un registro 45 externo en la realización preferida por los inventores. A continuación esta matriz lee, recalcula y actualiza las entradas de memoria de métricas de estado que, para muchos códigos prácticos, son mucho mayores. Una serie de dígitos de decisión, habitualmente de 4 bits cada uno con un método de pre-rastreo en base 16, se acumulan en una segunda memoria de rastreo. Los cálculos de la matriz y las actualizaciones de la métrica de estado se llevan a cabo de manera interactiva durante una serie especificada de ciclos. A continuación, una segunda operación iterativa 50 recorre la memoria de rastreo para resolver el camino más probable a través de la malla de estados.
Booleana amplia
[0173] Otra categoría de operaciones amplias mejoradas son las operaciones booleanas amplias, que involucran 55 un conjunto de tablas de consulta pequeñas (LUTs, small look up tables), habitualmente con 8 ó 16 entradas, cada una especificada mediante 3 ó 4 bits de dirección de entrada, interconectadas con multiplexores y cerrojos próximos. El control de las entradas LUT, selecciones de multiplexores y activaciones de relojes de cerrojo está especificado mediante una memoria caché amplia incorporada. Esta estructura proporciona un medio para disponer una placa de matriz de puertas programable in situ, que realiza operaciones iterativas sobre operandos proporcionados por los 60 registros de un microprocesador de propósito general. Estas operaciones pueden iterar sobre múltiples ciclos, llevando a cabo operaciones lógicas especificables aleatoriamente que actualizan tanto los cerrojos internos como la propia placa de memoria.
Transferencias entre memorias de operandos amplios 65
[0174] El método y el aparato descritos en el presente documento son ampliamente aplicables al problema de aumentar el ancho de banda eficaz de unidades funcionales de microprocesador hasta aproximadamente lo que se alcanza en los circuitos integrados de aplicación específica (ASICs, application-specific integrated circuits). Cuando están presentes al mismo tiempo dos o más unidades funcionales que pueden manejar operandos amplios, se produce el problema de transferir datos desde una unidad funcional que los está produciendo en memoria 5 incorporada, y a través del sistema de memoria o en torno al mismo, hasta una segunda unidad funcional que puede asimismo manejar operandos amplios, que tiene que consumir dichos datos después de cargarlos en su memoria de operandos amplios. Copiar explícitamente los datos desde una localización de memoria a la otra conseguiría dicha transferencia, pero la sobrecarga involucrada reduciría la eficacia del procesador en general.
10
[0175] La figura 27 describe un método y un aparato para resolver este problema de transferencia entre dos o más unidades, con sobrecarga reducida. Las matrices de memoria incorporada funcionan como cachés que retienen copias locales de datos que están presentes conceptualmente en un único espacio global de memoria. Un controlador de coherencia de cachés monitoriza los flujos de direcciones de las actividades de las cachés, y utiliza uno de los protocolos de coherencia, tal como MOESI o MESI, para mantener la consistencia con un estándar 15 especificado. Mediante la iniciación adecuada del controlador de coherencia de cachés, un software que se ejecuta en el microprocesador de propósito general puede permitir que se produzca en segundo plano una transferencia de datos entre unidades amplias, solapada con el cálculo en las unidades amplias, reduciendo la sobrecarga de cargas explícitas y almacenamientos.
20
Conclusión
[0176] Los expertos en la materia reconocerán, dadas las explicaciones del presente documento, que existen numerosas alternativas que no se salen de la invención. Por lo tanto, se prevé que la invención no está limitada por la descripción anterior, sino solamente por las reivindicaciones adjuntas. 25

Claims (30)

  1. REIVINDICACIONES
    1. Un procesador, que comprende:
    un primer camino de datos (137, 714 y 715) que tiene una primera anchura de bits; 5
    un segundo camino de datos (entre 136 y 149; 714 y 720n) que tiene una segunda anchura de bits mayor que la primera anchura de bits;
    una serie de terceros caminos de datos (155 a 158; 720A y 740) que tienen una anchura de bits combinada menor 10 que la segunda anchura de bits;
    un primer almacenamiento de operando amplio (136, 714) acoplado al primer camino de datos y al segundo camino de datos para almacenar un primer operando amplio recibido sobre el primer camino de datos, teniendo el primer operando amplio un tamaño con un número de bits mayor que la primera anchura de bits; 15
    un segundo almacenamiento de operando amplio (134, 714) acoplado al primer camino de datos y al segundo camino de datos para almacenar un segundo operando amplio recibido sobre el primer camino de datos, teniendo el segundo operando amplio un tamaño con un número de bits mayor que la primera anchura de bits;
    20
    un archivo de registros (720A a 720n) que incluye registros que tienen la primera anchura de bits, estando conectado el archivo de registros al primer camino de datos y a los terceros caminos de datos, e incluyendo almacenamiento (710) para un primer especificador de operando amplio que especifica una dirección de primer operando amplio y un segundo especificador de operando amplio que especifica una dirección del segundo operando amplio; 25
    una unidad funcional (149, 740) que puede iniciar instrucciones, la unidad funcional estando acoplada mediante el segundo camino de datos al primer almacenamiento de operando amplio y estando acoplada mediante los terceros caminos de datos al archivo de registros; y
    30
    en el que la unidad funcional está dispuesta para ejecutar una instrucción de rebanada de transformada de Fourier amplia que contiene campos de instrucción que especifican (i) un primer registro de operando amplio (710) para provocar la recuperación del primer operando amplio para su almacenamiento en el primer almacenamiento de operando amplio, (ii) un segundo registro de operando amplio (710) para provocar la recuperación del segundo operando amplio para su almacenamiento en el segundo almacenamiento de operando amplio, (iii) por lo menos un 35 registro de operando de control en forma de un registro general en el archivo de registros que almacena un operando de control y especifica parámetros de control de precisión y de extracción, y (iv) un registro de resultados (745) en el archivo de registros, y
    en el que la instrucción de rebanada de transformada de Fourier amplia está configurada para provocar que la 40 unidad funcional (i) tome el primer operando amplio del primer almacenamiento de operando amplio, (ii) tome el segundo operando amplio del segundo almacenamiento de operando amplio, (iii) lleve a cabo multiplicaciones complejas paralelas de subconjuntos de elementos de datos del primer operando amplio, por subconjuntos de elementos de datos del segundo operando amplio para producir primeros resultados, (iv) lleve a cabo operaciones de mariposa paralelas y operaciones de extracción paralelas sobre subconjuntos de los primeros resultados para 45 proporcionar de ese modo segundos resultados;
    en el que el resultado escalar de la instrucción de rebanada de transformada de Fourier amplia contiene información a partir de la cual se puede determinar la posición del bit más significativo de los segundos resultados;
    50
    en el que la posición del bit más significativo del segundo resultado es:
    calculada mediante una serie de operaciones booleanas sobre subconjuntos paralelos de los segundos resultados, produciendo resultados booleanos vectoriales, y reduciendo además los resultados booleanos vectoriales a un valor booleano escalar, seguido por una determinación de la posición del bit más significativo del valor booleano escalar; y 55
    colocado en el registro general para proporcionar un parámetro de escala para su utilización en la fase subsiguiente de la instrucción de rebanada de transformada de Fourier amplia.
  2. 2. Un procesador acorde con la reivindicación 1, en el que cuando se lleva a cabo una operación 60 posterior de especificación de un operando amplio, el procesador determina si el operando amplio está ya almacenado en el almacenamiento de operando amplio y, en caso afirmativo, el procesador reutiliza el operando amplio de almacenamiento de operando amplio en la operación posterior.
  3. 3. Un procesador acorde con cualquiera de las reivindicaciones anteriores, en el que cuando se ejecuta 65 una única instrucción que contiene campos de instrucción que especifican un registro de operando amplio, el
    procesador hace referencia a un único registro que especifica tanto la dirección como el tamaño del operando amplio.
  4. 4. Un procesador acorde con cualquiera de las reivindicaciones anteriores, en el que la unidad funcional es operativa asimismo para ejecutar una única instrucción booleana amplia que contiene campos de instrucción que 5 especifican (i) un registro de operando amplio (710) para provocar la recuperación del operando amplio para su almacenamiento en el almacenamiento de operando amplio, (ii) por lo menos un registro de operando fuente en el archivo de registros que almacena un operando fuente, y (iii) un registro de resultados (745) en el archivo de registros, provocando la única instrucción que la unidad funcional lleve a cabo operaciones que involucran un conjunto de tablas de consulta interconectadas con multiplexores y cerrojos, en el que los contenidos de las tablas 10 de consulta y el control de los multiplexores y de los cerrojos se especifican mediante información en el almacenamiento de operando amplio, provocando de ese modo que una placa de una matriz de puertas programables in situ realice operaciones sobre dicho por lo menos un operando fuente, produciendo resultados a colocar en el registro de resultados.
    15
  5. 5. Un procesador acorde con la reivindicación 4, en el que la unidad funcional lleva a cabo operaciones iterativas sobre múltiples ciclos que actualizan cerrojos internos representados por información en el almacenamiento de operando amplio.
  6. 6. Un procesador acorde con cualquiera de las reivindicaciones anteriores, en el que la unidad funcional 20 es operativa asimismo para ejecutar una única instrucción de Galois de resolución amplia que especifica un registro de operando amplio para provocar la recuperación del operando amplio para su almacenamiento en el almacenamiento de operando amplio, realizando la unidad funcional operaciones iterativas de multiplicación-suma sobre elementos concatenados del operando amplio contenido en el almacenamiento de operando amplio a efectos de resolver un sistema de ecuaciones, produciendo un resultado que tiene una anchura de bits mayor que la primera 25 anchura de bits, para su almacenamiento en el almacenamiento de operando amplio.
  7. 7. Un procesador acorde con la reivindicación 6, en el que los elementos concatenados comprenden valores de campos de Galois y las operaciones de multiplicación-suma son operaciones de multiplicación-suma de campos de Galois. 30
  8. 8. Un procesador acorde con la reivindicación 6 ó 7, en el que los elementos concatenados comprenden operandos enteros y las operaciones de multiplicación-suma son operaciones de multiplicación-suma de enteros.
  9. 9. Un procesador acorde con la reivindicación 6, 7 ó 8, en el que los elementos concatenados 35 comprenden valores con coma flotante y las operaciones de multiplicación-suma son operaciones de multiplicación-suma con coma flotante.
  10. 10. Un procesador acorde con cualquiera de las reivindicaciones 6 a 9, en el que los elementos concatenados comprenden una matriz definida positiva. 40
  11. 11. Un operador acorde con cualquiera de las reivindicaciones 6 a 10, en el que los elementos concatenados comprenden una matriz simétrica.
  12. 12. Un procesador acorde con cualquiera de las reivindicaciones 6 a 11, en el que los elementos 45 concatenados comprenden una matriz triangular superior o una matriz triangular inferior.
  13. 13. Un procesador acorde con cualquiera de las reivindicaciones 1 a 5, en el que la unidad funcional puede asimismo iniciar una instrucción de Galois de resolución amplia y en el que el operando amplio contiene métricas de estado de corrección de errores que se actualizan iterativamente y se recorren a continuación para resolver un 50 camino más probable, y el camino más probable es un resultado de la instrucción.
  14. 14. Un procesador acorde con la reivindicación 13, en el que el camino más probable es un resultado devuelto a un registro en el archivo de registros.
    55
  15. 15. Un procesador acorde con la reivindicación 13 ó 14, en el que la instrucción produce métricas de estado actualizadas.
  16. 16. Un procesador acorde con cualquiera de las reivindicaciones anteriores, en el que la unidad funcional puede asimismo ejecutar una instrucción de descodificación amplia para llevar a cabo corrección de errores por 60 medio de descodificación Viterbi o turbo especificando (i) un registro del archivo de registros que proporciona una serie de métricas de ramificación de corrección de errores; (ii) un registro que contiene un especificador de operando amplio que especifica un operando amplio que contiene métricas de estado de corrección de errores, en el que las métricas de estado se actualizan iterativamente utilizando la serie de métricas de ramificación, y las métricas de estado se recorren a continuación para resolver un camino más probable, como resultado de la instrucción. 65
  17. 17. Un procesador acorde con la reivindicación 16, en el que el camino más probable es un resultado devuelto a un registro en el archivo de registros.
  18. 18. Un procesador acorde con la reivindicación 16 ó 17, en el que la instrucción produce métricas de estado actualizadas del operando amplio para su almacenamiento en el almacenamiento de operando amplio. 5
  19. 19. Un procesador acorde con la reivindicación 1, en el que la parte extraída de los segundos resultados se coloca en el registro de resultados.
  20. 20. Un procesador acorde con la reivindicación 1, en el que la parte extraída de los segundos resultados 10 se coloca en un registro de operando amplio.
  21. 21. Un procesador acorde con la reivindicación 1, en el que los segundos resultados se almacenan en el primer almacenamiento de operando amplio o en un tercer almacenamiento de operando amplio.
    15
  22. 22. Un procesador acorde con la reivindicación 1, en el que el resultado escalar se coloca en un registro o en uno de dicho por lo menos un registro de operando de control en el archivo de registros.
  23. 23. Un sistema de procesamiento de datos que comprende:
    20
    un procesador acorde con cualquiera de las reivindicaciones anteriores, siendo el procesador un solo circuito integrado;
    la memoria principal (120) externa a dicho único circuito integrado; y
    25
    un bus acoplado a la memoria principal, incluyendo el procesador una interfaz de bus que acopla el procesador al bus.
  24. 24. Un método de funcionamiento de un aparato que incluye un primer camino de datos que tiene una primera anchura de bits, un segundo camino de datos que tiene una segunda anchura de bits mayor que la primera 30 anchura de bits, una serie de terceros caminos de datos que tienen una anchura de bits combinada menor que la segunda anchura de bits, un primer almacenamiento de operando amplio acoplado al primer camino de datos y al segundo camino de datos para almacenar un primer operando amplio recibido sobre el primer camino de datos, teniendo el primer operando amplio un tamaño con un número de bits mayor que la primera anchura de bits, un segundo almacenamiento de operando amplio acoplado al primer camino de datos y al segundo camino de datos 35 para almacenar un segundo operando amplio recibido sobre el primer camino de datos, teniendo el segundo operando amplio un tamaño con un número de bits mayor que la primera anchura de bits, un archivo de registros incluyendo registros que tienen la primera anchura de bits, estando conectado el archivo de registros al primer camino de datos y a los terceros caminos de datos, e incluyendo un primer almacenamiento para un primer especificador de operando amplio que especifica la dirección del primer operando amplio, e incluyendo un segundo 40 almacenamiento para un segundo especificador de operando amplio que especifica una dirección del segundo operando amplio, y una unidad funcional que puede iniciar instrucciones, estando la unidad funcional acoplada mediante el segundo camino de datos al primer almacenamiento de operando amplio y acoplada mediante los terceros caminos de datos al archivo de registros, comprendiendo el método:
    45
    ejecutar una sola instrucción de rebanada de transformada de Fourier amplia que contiene campos de instrucción que especifican (i) un primer registro de operando amplio (710) para provocar la recuperación del primer operando amplio para su almacenamiento en el primer almacenamiento de operando amplio, (ii) un segundo registro de operando amplio (710) para provocar la recuperación del segundo operando amplio para su almacenamiento en el segundo almacenamiento de operando amplio, (iii) por lo menos un registro de operando de control en la forma de 50 un registro general en el archivo de registros que almacena un operando de control y especifica parámetros de control de precisión y de extracción, y (iv) un registro de resultados (745) en el archivo de registros, y
    en el que la instrucción de rebanada de transformada de Fourier amplia provoca que la unidad funcional (i) tome el primer operando amplio del primer almacenamiento de operando amplio, (ii) tome el segundo operando amplio del 55 segundo almacenamiento de operando amplio, (iii) lleve a cabo multiplicaciones complejas paralelas de subconjuntos de elementos de datos del primer operando amplio por subconjuntos de elementos de datos del segundo operando amplio para producir primeros resultados, (iv) lleve a cabo operaciones de mariposa paralelas y operaciones de extracción paralelas sobre subconjuntos de los primeros resultados para proporcionar de ese modo segundos resultados; 60
    en el que el resultado escalar de la instrucción de rebanada de transformada de Fourier amplia contiene información a partir de la cual se puede determinar la posición del bit más significativo de los segundos resultados;
    en el que la posición del bit más significativo del segundo resultado es: 65
    calculada mediante una serie de operaciones booleanas sobre subconjuntos paralelos de los segundos resultados, produciendo resultados booleanos vectoriales, y reduciendo además los resultados booleanos vectoriales a un valor booleano escalar, seguido por una determinación de la posición del bit más significativo del valor booleano escalar; y
    colocado en el registro general para proporcionar un parámetro de escala para su utilización en la subsiguiente 5 instrucción de rebanada de transformada de Fourier amplia.
  25. 25. Un método acorde con la reivindicación 24, en el que cuando se lleva a cabo una operación posterior de especificación de un operando amplio, el método comprende además:
    10
    determinar si el operando amplio está ya almacenado en el almacenamiento de operando amplio; y
    si el operando amplio está ya almacenado dentro del almacenamiento de operando amplio, reutilizar entonces el operando amplio del almacenamiento de operando amplio en la operación posterior.
    15
  26. 26. Un método acorde con la reivindicación 24 ó 25, en el que la etapa de ejecutar una única instrucción que contiene campos de instrucción que especifican un registro de operando amplio comprende además hacer referencia a un único registro que especifica tanto la dirección como el tamaño del operando amplio.
  27. 27. Un método acorde con la reivindicación 24, que comprende además almacenar los segundos 20 resultados en el primer almacenamiento de operando amplio o en un tercer almacenamiento de operando amplio.
  28. 28. Un método acorde con la reivindicación 24, en el que se puede determinar el resultado escalar para la determinación del bit más significativo del mayor de los terceros resultados.
    25
  29. 29. Un procesador acorde con la reivindicación 24, en el que el resultado escalar se coloca en un registro o en uno de dicho por lo menos un registro de operando de control en el archivo de registros.
  30. 30. Un medio legible por ordenador que tiene código legible por ordenador en el mismo, para provocar que un procesador lleve a cabo el método acorde con cualquiera de las reivindicaciones 1 a 23. 30
ES10191073.5T 2003-07-10 2004-07-12 Procesador programable y método con operaciones amplias Expired - Lifetime ES2527937T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US616303 2003-07-10
US10/616,303 US7301541B2 (en) 1995-08-16 2003-12-19 Programmable processor and method with wide operations

Publications (1)

Publication Number Publication Date
ES2527937T3 true ES2527937T3 (es) 2015-02-02

Family

ID=34079658

Family Applications (1)

Application Number Title Priority Date Filing Date
ES10191073.5T Expired - Lifetime ES2527937T3 (es) 2003-07-10 2004-07-12 Procesador programable y método con operaciones amplias

Country Status (6)

Country Link
US (10) US7301541B2 (es)
EP (5) EP2226726A3 (es)
JP (1) JP5005342B2 (es)
CA (2) CA2573292C (es)
ES (1) ES2527937T3 (es)
WO (1) WO2005008410A2 (es)

Families Citing this family (364)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
ATE557343T1 (de) * 1998-08-24 2012-05-15 Microunity Systems Eng Prozessor und verfahren zur durchführung eines breitschaltungsbefehls mit breitem operand
US7242414B1 (en) * 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
US7346643B1 (en) 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US7500240B2 (en) * 2002-01-15 2009-03-03 Intel Corporation Apparatus and method for scheduling threads in multi-threading processors
US8094723B2 (en) * 2003-12-31 2012-01-10 Intel Corporation Motion estimation sum of all differences (SAD) array having reduced semiconductor die area consumption
US7373466B1 (en) * 2004-04-07 2008-05-13 Advanced Micro Devices, Inc. Method and apparatus for filtering memory write snoop activity in a distributed shared memory computer
US8301788B2 (en) * 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US8560475B2 (en) 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
US7606309B2 (en) * 2004-09-30 2009-10-20 Intel Corporation Motion estimation for video processing using 2-D (spatial) convolution
US8225104B1 (en) * 2005-10-06 2012-07-17 Symantec Corporation Data access security
US7958436B2 (en) 2005-12-23 2011-06-07 Intel Corporation Performing a cyclic redundancy checksum operation responsive to a user-level instruction
US7872657B1 (en) * 2006-06-16 2011-01-18 Nvidia Corporation Memory addressing scheme using partition strides
EP1870829B1 (en) * 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
US20100306209A1 (en) * 2006-07-22 2010-12-02 Tien-Fu Chen Pattern matcher and its matching method
US7779016B2 (en) * 2006-09-14 2010-08-17 International Business Machines Corporation Parallel execution of operations for a partitioned binary radix tree on a parallel computer
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US8656448B2 (en) * 2006-10-26 2014-02-18 International Business Machines Corporation Providing policy-based application services to an application running on a computing system
US8713582B2 (en) * 2006-10-26 2014-04-29 International Business Machines Corporation Providing policy-based operating system services in an operating system on a computing system
US8032899B2 (en) 2006-10-26 2011-10-04 International Business Machines Corporation Providing policy-based operating system services in a hypervisor on a computing system
US7721077B2 (en) * 2006-12-11 2010-05-18 Intel Corporation Performing endian conversion
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8019977B2 (en) * 2007-05-14 2011-09-13 Apple Inc. Generating predicate values during vector processing
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US8060728B2 (en) * 2007-05-14 2011-11-15 Apple Inc. Generating stop indicators during vector processing
US8176355B2 (en) * 2007-06-07 2012-05-08 International Business Machines Corporation Recovery from hardware access errors
US7958274B2 (en) * 2007-06-18 2011-06-07 International Business Machines Corporation Heuristic status polling
US8296430B2 (en) 2007-06-18 2012-10-23 International Business Machines Corporation Administering an epoch initiated for remote memory access
US9065839B2 (en) 2007-10-02 2015-06-23 International Business Machines Corporation Minimally buffered data transfers between nodes in a data communications network
US8819217B2 (en) * 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US8180803B2 (en) * 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US7949683B2 (en) * 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US7984450B2 (en) * 2007-11-28 2011-07-19 International Business Machines Corporation Dispatching packets on a global combining network of a parallel computer
US8515052B2 (en) * 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US8146064B2 (en) * 2008-04-04 2012-03-27 International Business Machines Corporation Dynamically controlling a prefetching range of a software controlled cache
US8239841B2 (en) 2008-04-04 2012-08-07 International Business Machines Corporation Prefetching irregular data references for software controlled caches
US8285670B2 (en) * 2008-07-22 2012-10-09 International Business Machines Corporation Dynamically maintaining coherency within live ranges of direct buffers
US7895260B2 (en) * 2008-07-28 2011-02-22 International Business Machines Corporation Processing data access requests among a plurality of compute nodes
US8271832B2 (en) * 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8464031B2 (en) 2008-08-15 2013-06-11 Apple Inc. Running unary operation instructions for processing vectors
US8447956B2 (en) 2008-08-15 2013-05-21 Apple Inc. Running subtract and running divide instructions for processing vectors
US20100325399A1 (en) * 2008-08-15 2010-12-23 Apple Inc. Vector test instruction for processing vectors
US8504806B2 (en) 2008-08-15 2013-08-06 Apple Inc. Instruction for comparing active vector elements to preceding active elements to determine value differences
US8862932B2 (en) 2008-08-15 2014-10-14 Apple Inc. Read XF instruction for processing vectors
US9110683B2 (en) 2008-08-15 2015-08-18 Apple Inc. Predicting branches for vector partitioning loops when processing vector instructions
US8938642B2 (en) 2008-08-15 2015-01-20 Apple Inc. Confirm instruction for processing vectors
US8484443B2 (en) 2008-08-15 2013-07-09 Apple Inc. Running multiply-accumulate instructions for processing vectors
US9009528B2 (en) 2008-08-15 2015-04-14 Apple Inc. Scalar readXF instruction for processing vectors
US8650383B2 (en) * 2008-08-15 2014-02-11 Apple Inc. Vector processing with predicate vector for setting element values based on key element position by executing remaining instruction
US9182959B2 (en) 2008-08-15 2015-11-10 Apple Inc. Predicate count and segment count instructions for processing vectors
US8959316B2 (en) * 2008-08-15 2015-02-17 Apple Inc. Actual instruction and actual-fault instructions for processing vectors
US8417921B2 (en) * 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US8984262B2 (en) * 2008-08-15 2015-03-17 Apple Inc. Generate predicates instruction for processing vectors
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US8793472B2 (en) 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US9335980B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
US9342304B2 (en) 2008-08-15 2016-05-17 Apple Inc. Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture
US9317283B2 (en) 2008-08-15 2016-04-19 Apple Inc. Running shift for divide instructions for processing vectors
US9335997B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US20110035568A1 (en) * 2008-08-15 2011-02-10 Apple Inc. Select first and select last instructions for processing vectors
US8745360B2 (en) * 2008-09-24 2014-06-03 Apple Inc. Generating predicate values based on conditional data dependency in vector processors
US8181001B2 (en) * 2008-09-24 2012-05-15 Apple Inc. Conditional data-dependency resolution in vector processors
US8176299B2 (en) * 2008-09-24 2012-05-08 Apple Inc. Generating stop indicators based on conditional data dependency in vector processors
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US8161090B2 (en) * 2008-12-05 2012-04-17 Crossfield Technology LLC Floating-point fused add-subtract unit
US20100199067A1 (en) * 2009-02-02 2010-08-05 International Business Machines Corporation Split Vector Loads and Stores with Stride Separated Words
US20100250850A1 (en) * 2009-03-25 2010-09-30 Faraday Technology Corp. Processor and method for executing load operation and store operation thereof
US8156264B2 (en) * 2009-04-03 2012-04-10 Analog Devices, Inc. Digital output sensor FIFO buffer with single port memory
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8577950B2 (en) * 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US9003170B2 (en) * 2009-12-22 2015-04-07 Intel Corporation Bit range isolation instructions, methods, and apparatus
US8856759B2 (en) * 2010-02-01 2014-10-07 Bull Hn Information Systems Inc. Method and apparatus providing COBOL decimal type arithmetic functions with improved performance
US8365186B2 (en) 2010-04-14 2013-01-29 International Business Machines Corporation Runtime optimization of an application executing on a parallel computer
US9600281B2 (en) 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
US8504730B2 (en) 2010-07-30 2013-08-06 International Business Machines Corporation Administering connection identifiers for collective operations in a parallel computer
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US8972821B2 (en) * 2010-12-23 2015-03-03 Texas Instruments Incorporated Encode and multiplex, register, and decode and error correction circuitry
US8565120B2 (en) 2011-01-05 2013-10-22 International Business Machines Corporation Locality mapping in a distributed processing system
US9317637B2 (en) 2011-01-14 2016-04-19 International Business Machines Corporation Distributed hardware device simulation
US8336017B2 (en) * 2011-01-19 2012-12-18 Algotochip Corporation Architecture optimizer
RU2458384C1 (ru) * 2011-02-17 2012-08-10 Федеральное государственное военное образовательное учреждение высшего профессионального образования "Военный авиационный инженерный университет" (г. Воронеж) Министерства обороны Российской Федерации Устройство для контроля эвм
US9037564B2 (en) 2011-04-29 2015-05-19 Stephen Lesavich Method and system for electronic content storage and retrieval with galois fields on cloud computing networks
US9361479B2 (en) 2011-04-29 2016-06-07 Stephen Lesavich Method and system for electronic content storage and retrieval using Galois fields and geometric shapes on cloud computing networks
US9569771B2 (en) 2011-04-29 2017-02-14 Stephen Lesavich Method and system for storage and retrieval of blockchain blocks using galois fields
US9137250B2 (en) 2011-04-29 2015-09-15 Stephen Lesavich Method and system for electronic content storage and retrieval using galois fields and information entropy on cloud computing networks
US8689228B2 (en) 2011-07-19 2014-04-01 International Business Machines Corporation Identifying data communications algorithms of all other tasks in a single collective operation in a distributed processing system
US20130027416A1 (en) * 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
US9250948B2 (en) 2011-09-13 2016-02-02 International Business Machines Corporation Establishing a group of endpoints in a parallel computer
US8966461B2 (en) * 2011-09-29 2015-02-24 Advanced Micro Devices, Inc. Vector width-aware synchronization-elision for vector processors
CN103959240B (zh) * 2011-12-15 2017-05-17 英特尔公司 使用混洗表和掩码存储表经由矢量指令优化程序循环的方法
WO2013095493A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Instructions to perform groestl hashing
CN103975302B (zh) * 2011-12-22 2017-10-27 英特尔公司 矩阵乘法累加指令
CN104081337B (zh) * 2011-12-23 2017-11-07 英特尔公司 用于响应于单个指令来执行横向部分求和的系统、装置和方法
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US10437602B2 (en) * 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9323532B2 (en) 2012-07-18 2016-04-26 International Business Machines Corporation Predicting register pairs
US9323529B2 (en) 2012-07-18 2016-04-26 International Business Machines Corporation Reducing register read ports for register pairs
US9298459B2 (en) * 2012-07-18 2016-03-29 International Business Machines Corporation Managing register pairing
JP6011194B2 (ja) * 2012-09-21 2016-10-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20140101412A1 (en) * 2012-10-04 2014-04-10 Ricardo Ramirez Speculative privilege elevation
US9411558B2 (en) 2012-10-20 2016-08-09 Luke Hutchison Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing
US9646105B2 (en) * 2012-11-08 2017-05-09 Texas Instruments Incorporated Reduced complexity hashing
US8880829B2 (en) * 2012-11-19 2014-11-04 Qualcomm Innovation Center, Inc. Method and apparatus for efficient, low-latency, streaming memory copies
US9760966B2 (en) * 2013-01-08 2017-09-12 Nvidia Corporation Parallel processor with integrated correlation and convolution engine
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate 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
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9158667B2 (en) 2013-03-04 2015-10-13 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
JP2014215914A (ja) * 2013-04-26 2014-11-17 株式会社東芝 端末装置、情報処理方法及び情報処理プログラム
GB2514611A (en) * 2013-05-31 2014-12-03 Ibm Storage integrity validator
US8964496B2 (en) 2013-07-26 2015-02-24 Micron Technology, Inc. Apparatuses and methods for performing compare operations using sensing circuitry
US8971124B1 (en) 2013-08-08 2015-03-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9459869B2 (en) * 2013-08-20 2016-10-04 Apple Inc. Intelligent caching for an operand cache
US9652233B2 (en) * 2013-08-20 2017-05-16 Apple Inc. Hint values for use with an operand cache
US9153305B2 (en) 2013-08-30 2015-10-06 Micron Technology, Inc. Independently addressable memory array address spaces
JP2015049832A (ja) * 2013-09-04 2015-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム
US9501796B2 (en) 2013-09-18 2016-11-22 Chicago Mercantile Exchange Inc. Dataset intersection determination
US9019785B2 (en) 2013-09-19 2015-04-28 Micron Technology, Inc. Data shifting via a number of isolation devices
US9449675B2 (en) 2013-10-31 2016-09-20 Micron Technology, Inc. Apparatuses and methods for identifying an extremum value stored in an array of memory cells
US9430191B2 (en) 2013-11-08 2016-08-30 Micron Technology, Inc. Division operations for memory
US9934856B2 (en) 2014-03-31 2018-04-03 Micron Technology, Inc. Apparatuses and methods for comparing data patterns in memory
WO2015183834A1 (en) 2014-05-27 2015-12-03 Rambus Inc. Memory module with reduced read/write turnaround overhead
US9449674B2 (en) 2014-06-05 2016-09-20 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9779019B2 (en) 2014-06-05 2017-10-03 Micron Technology, Inc. Data storage layout
US9704540B2 (en) 2014-06-05 2017-07-11 Micron Technology, Inc. Apparatuses and methods for parity determination using sensing circuitry
US9496023B2 (en) 2014-06-05 2016-11-15 Micron Technology, Inc. Comparison operations on logical representations of values in memory
US9711206B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9455020B2 (en) 2014-06-05 2016-09-27 Micron Technology, Inc. Apparatuses and methods for performing an exclusive or operation using sensing circuitry
US10074407B2 (en) 2014-06-05 2018-09-11 Micron Technology, Inc. Apparatuses and methods for performing invert operations using sensing circuitry
US9786335B2 (en) 2014-06-05 2017-10-10 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9711207B2 (en) 2014-06-05 2017-07-18 Micron Technology, Inc. Performing logical operations using sensing circuitry
US9910787B2 (en) 2014-06-05 2018-03-06 Micron Technology, Inc. Virtual address table
US9830999B2 (en) 2014-06-05 2017-11-28 Micron Technology, Inc. Comparison operations in memory
US9785565B2 (en) * 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
GB2522290B (en) * 2014-07-14 2015-12-09 Imagination Tech Ltd Running a 32-bit operating system on a 64-bit machine
US20160026484A1 (en) * 2014-07-25 2016-01-28 Soft Machines, Inc. System converter that executes a just in time optimizer for executing code from a guest image
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture
US10353680B2 (en) 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
EP3171277B1 (en) 2014-08-12 2021-03-03 Huawei Technologies Co. Ltd. Method for managing files, distributed storage system and management node
US9898252B2 (en) 2014-09-03 2018-02-20 Micron Technology, Inc. Multiplication operations in memory
US10068652B2 (en) 2014-09-03 2018-09-04 Micron Technology, Inc. Apparatuses and methods for determining population count
US9747961B2 (en) 2014-09-03 2017-08-29 Micron Technology, Inc. Division operations in memory
US9589602B2 (en) 2014-09-03 2017-03-07 Micron Technology, Inc. Comparison operations in memory
US9904515B2 (en) 2014-09-03 2018-02-27 Micron Technology, Inc. Multiplication operations in memory
US9847110B2 (en) 2014-09-03 2017-12-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in multiple columns of an array corresponding to digits of a vector
US9740607B2 (en) 2014-09-03 2017-08-22 Micron Technology, Inc. Swap operations in memory
US9715386B2 (en) 2014-09-29 2017-07-25 Apple Inc. Conditional stop instruction with accurate dependency detection
US9836218B2 (en) 2014-10-03 2017-12-05 Micron Technology, Inc. Computing reduction and prefix sum operations in memory
US9940026B2 (en) 2014-10-03 2018-04-10 Micron Technology, Inc. Multidimensional contiguous memory allocation
US10163467B2 (en) 2014-10-16 2018-12-25 Micron Technology, Inc. Multiple endianness compatibility
US10147480B2 (en) 2014-10-24 2018-12-04 Micron Technology, Inc. Sort operation in memory
US9779784B2 (en) 2014-10-29 2017-10-03 Micron Technology, Inc. Apparatuses and methods for performing logical operations using sensing circuitry
US9292639B1 (en) * 2014-10-30 2016-03-22 Cadence Design Systems Inc. Method and system for providing additional look-up tables
US9292640B1 (en) * 2014-10-30 2016-03-22 Cadence Design Systems Inc. Method and system for dynamic selection of a memory read port
US9612841B1 (en) * 2014-11-02 2017-04-04 Netronome Systems, Inc. Slice-based intelligent packet data register file
US9519484B1 (en) * 2014-11-02 2016-12-13 Netronome Systems, Inc. Picoengine instruction that controls an intelligent packet data register file prefetch function
US10073635B2 (en) 2014-12-01 2018-09-11 Micron Technology, Inc. Multiple endianness compatibility
US9747960B2 (en) 2014-12-01 2017-08-29 Micron Technology, Inc. Apparatuses and methods for converting a mask to an index
US9696992B2 (en) * 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US10061590B2 (en) 2015-01-07 2018-08-28 Micron Technology, Inc. Generating and executing a control flow
US10032493B2 (en) 2015-01-07 2018-07-24 Micron Technology, Inc. Longest element length determination in memory
US9583163B2 (en) 2015-02-03 2017-02-28 Micron Technology, Inc. Loop structure for operations in memory
CN107408404B (zh) 2015-02-06 2021-02-12 美光科技公司 用于存储器装置的设备及方法以作为程序指令的存储
CN107408405B (zh) 2015-02-06 2021-03-05 美光科技公司 用于并行写入到多个存储器装置位置的设备及方法
WO2016126472A1 (en) 2015-02-06 2016-08-11 Micron Technology, Inc. Apparatuses and methods for scatter and gather
US10522212B2 (en) 2015-03-10 2019-12-31 Micron Technology, Inc. Apparatuses and methods for shift decisions
US9741399B2 (en) 2015-03-11 2017-08-22 Micron Technology, Inc. Data shift by elements of a vector in memory
US9898253B2 (en) 2015-03-11 2018-02-20 Micron Technology, Inc. Division operations on variable length elements in memory
US10365851B2 (en) 2015-03-12 2019-07-30 Micron Technology, Inc. Apparatuses and methods for data movement
US10146537B2 (en) 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10049054B2 (en) 2015-04-01 2018-08-14 Micron Technology, Inc. Virtual register file
US10140104B2 (en) 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
US9959923B2 (en) 2015-04-16 2018-05-01 Micron Technology, Inc. Apparatuses and methods to reverse data stored in memory
US10073786B2 (en) 2015-05-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for compute enabled cache
US9704541B2 (en) 2015-06-12 2017-07-11 Micron Technology, Inc. Simulating access lines
US9588952B2 (en) * 2015-06-22 2017-03-07 International Business Machines Corporation Collaboratively reconstituting tables
US9921777B2 (en) 2015-06-22 2018-03-20 Micron Technology, Inc. Apparatuses and methods for data transfer from sensing circuitry to a controller
US9710281B2 (en) * 2015-07-30 2017-07-18 International Business Machines Corporation Register comparison for operand store compare (OSC) prediction
US9996479B2 (en) 2015-08-17 2018-06-12 Micron Technology, Inc. Encryption of executables in computational memory
US9747189B2 (en) 2015-11-12 2017-08-29 International Business Machines Corporation Breakpoint for predicted tuple processing time in a streaming environment
US10936713B2 (en) * 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
FR3045892B1 (fr) * 2015-12-21 2018-06-22 Commissariat A L'energie Atomique Et Aux Energies Alternatives Circuit neuronal optimise, architecture et procede pour l'execution des reseaux de neurones.
US9905276B2 (en) 2015-12-21 2018-02-27 Micron Technology, Inc. Control of sensing components in association with performing operations
US9952925B2 (en) 2016-01-06 2018-04-24 Micron Technology, Inc. Error code calculation on sensing circuitry
US10048888B2 (en) 2016-02-10 2018-08-14 Micron Technology, Inc. Apparatuses and methods for partitioned parallel data movement
US10146652B2 (en) * 2016-02-11 2018-12-04 International Business Machines Corporation Resilient distributed storage system
US10372334B2 (en) 2016-02-11 2019-08-06 International Business Machines Corporation Reclaiming free space in a storage system
US9892767B2 (en) 2016-02-12 2018-02-13 Micron Technology, Inc. Data gathering in memory
US9971541B2 (en) 2016-02-17 2018-05-15 Micron Technology, Inc. Apparatuses and methods for data movement
US9899070B2 (en) 2016-02-19 2018-02-20 Micron Technology, Inc. Modified decode for corner turn
US10956439B2 (en) 2016-02-19 2021-03-23 Micron Technology, Inc. Data transfer with a bit vector operation device
US9697876B1 (en) 2016-03-01 2017-07-04 Micron Technology, Inc. Vertical bit vector shift in memory
US9983875B2 (en) 2016-03-04 2018-05-29 International Business Machines Corporation Operation of a multi-slice processor preventing early dependent instruction wakeup
US10262721B2 (en) 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
US9997232B2 (en) 2016-03-10 2018-06-12 Micron Technology, Inc. Processing in memory (PIM) capable memory device having sensing circuitry performing logic operations
US10379772B2 (en) 2016-03-16 2019-08-13 Micron Technology, Inc. Apparatuses and methods for operations using compressed and decompressed data
US9910637B2 (en) 2016-03-17 2018-03-06 Micron Technology, Inc. Signed division in memory
US10388393B2 (en) 2016-03-22 2019-08-20 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10120740B2 (en) 2016-03-22 2018-11-06 Micron Technology, Inc. Apparatus and methods for debugging on a memory device
US11074988B2 (en) 2016-03-22 2021-07-27 Micron Technology, Inc. Apparatus and methods for debugging on a host and memory device
US10037211B2 (en) 2016-03-22 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor with an expanded merge fetching queue
US10346174B2 (en) 2016-03-24 2019-07-09 International Business Machines Corporation Operation of a multi-slice processor with dynamic canceling of partial loads
US10977033B2 (en) 2016-03-25 2021-04-13 Micron Technology, Inc. Mask patterns generated in memory from seed vectors
US10474581B2 (en) 2016-03-25 2019-11-12 Micron Technology, Inc. Apparatuses and methods for cache operations
US10074416B2 (en) 2016-03-28 2018-09-11 Micron Technology, Inc. Apparatuses and methods for data movement
US10430244B2 (en) 2016-03-28 2019-10-01 Micron Technology, Inc. Apparatuses and methods to determine timing of operations
US10453502B2 (en) 2016-04-04 2019-10-22 Micron Technology, Inc. Memory bank power coordination including concurrently performing a memory operation in a selected number of memory regions
US10607665B2 (en) 2016-04-07 2020-03-31 Micron Technology, Inc. Span mask generation
US10331601B2 (en) * 2016-04-15 2019-06-25 Infinera Corporation Systems, apparatus, and methods for efficient space to time conversion of OTU multiplexed signal
US10761854B2 (en) 2016-04-19 2020-09-01 International Business Machines Corporation Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor
US9818459B2 (en) 2016-04-19 2017-11-14 Micron Technology, Inc. Invert operations using sensing circuitry
US9659605B1 (en) 2016-04-20 2017-05-23 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US10153008B2 (en) 2016-04-20 2018-12-11 Micron Technology, Inc. Apparatuses and methods for performing corner turn operations using sensing circuitry
US10037229B2 (en) 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US10042608B2 (en) 2016-05-11 2018-08-07 Micron Technology, Inc. Signed division in memory
US9659610B1 (en) 2016-05-18 2017-05-23 Micron Technology, Inc. Apparatuses and methods for shifting data
US10049707B2 (en) 2016-06-03 2018-08-14 Micron Technology, Inc. Shifting data
US9934033B2 (en) * 2016-06-13 2018-04-03 International Business Machines Corporation Operation of a multi-slice processor implementing simultaneous two-target loads and stores
US10387046B2 (en) 2016-06-22 2019-08-20 Micron Technology, Inc. Bank to bank data transfer
US10042647B2 (en) 2016-06-27 2018-08-07 International Business Machines Corporation Managing a divided load reorder queue
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10037785B2 (en) 2016-07-08 2018-07-31 Micron Technology, Inc. Scan chain operation in sensing circuitry
US10388360B2 (en) 2016-07-19 2019-08-20 Micron Technology, Inc. Utilization of data stored in an edge section of an array
US10387299B2 (en) 2016-07-20 2019-08-20 Micron Technology, Inc. Apparatuses and methods for transferring data
US10733089B2 (en) 2016-07-20 2020-08-04 Micron Technology, Inc. Apparatuses and methods for write address tracking
US9972367B2 (en) 2016-07-21 2018-05-15 Micron Technology, Inc. Shifting data in sensing circuitry
US9767864B1 (en) 2016-07-21 2017-09-19 Micron Technology, Inc. Apparatuses and methods for storing a data value in a sensing circuitry element
US10303632B2 (en) 2016-07-26 2019-05-28 Micron Technology, Inc. Accessing status information
US10468087B2 (en) 2016-07-28 2019-11-05 Micron Technology, Inc. Apparatuses and methods for operations in a self-refresh state
US9990181B2 (en) 2016-08-03 2018-06-05 Micron Technology, Inc. Apparatuses and methods for random number generation
US10318419B2 (en) 2016-08-08 2019-06-11 International Business Machines Corporation Flush avoidance in a load store unit
US20190303743A1 (en) * 2016-08-13 2019-10-03 Intel Corporation Apparatuses, methods, and systems for neural networks
US11029951B2 (en) 2016-08-15 2021-06-08 Micron Technology, Inc. Smallest or largest value element determination
US10606587B2 (en) 2016-08-24 2020-03-31 Micron Technology, Inc. Apparatus and methods related to microcode instructions indicating instruction types
US10466928B2 (en) 2016-09-15 2019-11-05 Micron Technology, Inc. Updating a register in memory
US10387058B2 (en) 2016-09-29 2019-08-20 Micron Technology, Inc. Apparatuses and methods to change data category values
US10014034B2 (en) 2016-10-06 2018-07-03 Micron Technology, Inc. Shifting data in sensing circuitry
US10529409B2 (en) 2016-10-13 2020-01-07 Micron Technology, Inc. Apparatuses and methods to perform logical operations using sensing circuitry
US9805772B1 (en) 2016-10-20 2017-10-31 Micron Technology, Inc. Apparatuses and methods to selectively perform logical operations
US10373666B2 (en) 2016-11-08 2019-08-06 Micron Technology, Inc. Apparatuses and methods for compute components formed over an array of memory cells
US10423353B2 (en) 2016-11-11 2019-09-24 Micron Technology, Inc. Apparatuses and methods for memory alignment
US9761300B1 (en) 2016-11-22 2017-09-12 Micron Technology, Inc. Data shift apparatuses and methods
US10303612B2 (en) * 2016-12-30 2019-05-28 Intel Corporation Power and performance-efficient cache design for a memory encryption engine
US10275391B2 (en) 2017-01-23 2019-04-30 International Business Machines Corporation Combining of several execution units to compute a single wide scalar result
US10402340B2 (en) 2017-02-21 2019-09-03 Micron Technology, Inc. Memory array page table walk
US10403352B2 (en) 2017-02-22 2019-09-03 Micron Technology, Inc. Apparatuses and methods for compute in data path
US10268389B2 (en) 2017-02-22 2019-04-23 Micron Technology, Inc. Apparatuses and methods for in-memory operations
TWI731044B (zh) * 2017-03-10 2021-06-21 張錦本 應用256位元之雙碼錯誤檢測裝置及方法
WO2018174931A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and appartus for tile configuration
US10838899B2 (en) 2017-03-21 2020-11-17 Micron Technology, Inc. Apparatuses and methods for in-memory data switching networks
US10185674B2 (en) 2017-03-22 2019-01-22 Micron Technology, Inc. Apparatus and methods for in data path compute operations
US11222260B2 (en) 2017-03-22 2022-01-11 Micron Technology, Inc. Apparatuses and methods for operating neural networks
US10049721B1 (en) 2017-03-27 2018-08-14 Micron Technology, Inc. Apparatuses and methods for in-memory operations
US10043570B1 (en) 2017-04-17 2018-08-07 Micron Technology, Inc. Signed element compare in memory
US10147467B2 (en) 2017-04-17 2018-12-04 Micron Technology, Inc. Element value comparison in memory
US9997212B1 (en) 2017-04-24 2018-06-12 Micron Technology, Inc. Accessing data in memory
US10942843B2 (en) 2017-04-25 2021-03-09 Micron Technology, Inc. Storing data elements of different lengths in respective adjacent rows or columns according to memory shapes
US10236038B2 (en) 2017-05-15 2019-03-19 Micron Technology, Inc. Bank to bank data transfer
JP7114622B2 (ja) 2017-05-17 2022-08-08 グーグル エルエルシー ハードウェアにおける行列乗算の実行
US10068664B1 (en) 2017-05-19 2018-09-04 Micron Technology, Inc. Column repair in memory
US10013197B1 (en) 2017-06-01 2018-07-03 Micron Technology, Inc. Shift skip
US10262701B2 (en) 2017-06-07 2019-04-16 Micron Technology, Inc. Data transfer between subarrays in memory
US10152271B1 (en) 2017-06-07 2018-12-11 Micron Technology, Inc. Data replication
US10318168B2 (en) 2017-06-19 2019-06-11 Micron Technology, Inc. Apparatuses and methods for simultaneous in data path compute operations
EP3418829B1 (en) * 2017-06-21 2022-08-24 Tetra Laval Holdings & Finance S.A. Method of logging process data in a plc controlled equipment
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
US10162005B1 (en) 2017-08-09 2018-12-25 Micron Technology, Inc. Scan chain operations
US10534553B2 (en) 2017-08-30 2020-01-14 Micron Technology, Inc. Memory array accessibility
US10741239B2 (en) 2017-08-31 2020-08-11 Micron Technology, Inc. Processing in memory device including a row address strobe manager
US10416927B2 (en) 2017-08-31 2019-09-17 Micron Technology, Inc. Processing in memory
US10346092B2 (en) 2017-08-31 2019-07-09 Micron Technology, Inc. Apparatuses and methods for in-memory operations using timing circuitry
CN111052742A (zh) * 2017-09-30 2020-04-21 深圳市大疆创新科技有限公司 图像处理
US10409739B2 (en) 2017-10-24 2019-09-10 Micron Technology, Inc. Command selection policy
US10522210B2 (en) 2017-12-14 2019-12-31 Micron Technology, Inc. Apparatuses and methods for subarray addressing
US10332586B1 (en) 2017-12-19 2019-06-25 Micron Technology, Inc. Apparatuses and methods for subrow addressing
US10346133B1 (en) 2017-12-21 2019-07-09 Qualcomm Incorporated System and method of floating point multiply operation processing
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11816483B2 (en) * 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US10614875B2 (en) 2018-01-30 2020-04-07 Micron Technology, Inc. Logical operations using memory cells
US10437557B2 (en) 2018-01-31 2019-10-08 Micron Technology, Inc. Determination of a match between data values stored by several arrays
US11194477B2 (en) 2018-01-31 2021-12-07 Micron Technology, Inc. Determination of a match between data values stored by three or more arrays
EP3746925B1 (en) 2018-02-02 2024-09-11 The Charles Stark Draper Laboratory Inc. Systems and methods for policy execution processing
WO2019152792A1 (en) 2018-02-02 2019-08-08 Dover Microsystems, Inc. Systems and methods for policy linking and/or loading for secure initialization
US10713021B2 (en) * 2018-03-05 2020-07-14 Apple Inc. Geometric 64-bit capability pointer
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US10725696B2 (en) 2018-04-12 2020-07-28 Micron Technology, Inc. Command selection policy with read priority
WO2019213061A1 (en) 2018-04-30 2019-11-07 Dover Microsystems, Inc. Systems and methods for checking safety properties
US10440341B1 (en) 2018-06-07 2019-10-08 Micron Technology, Inc. Image processor formed in an array of memory cells
US11171983B2 (en) * 2018-06-29 2021-11-09 Intel Corporation Techniques to provide function-level isolation with capability-based security
US10942768B2 (en) * 2018-08-29 2021-03-09 Red Hat, Inc. Computing task scheduling in a computer system utilizing efficient attributed priority queues
CN108809294B (zh) * 2018-08-30 2023-11-14 北京神经元网络技术有限公司 一种动态单元匹配电路
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10769071B2 (en) 2018-10-10 2020-09-08 Micron Technology, Inc. Coherent memory access
US11175915B2 (en) 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10483978B1 (en) 2018-10-16 2019-11-19 Micron Technology, Inc. Memory device processing
TW202022679A (zh) 2018-11-06 2020-06-16 美商多佛微系統公司 用於停滯主處理器的系統和方法
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11184446B2 (en) 2018-12-05 2021-11-23 Micron Technology, Inc. Methods and apparatus for incentivizing participation in fog networks
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
US10877864B2 (en) 2018-12-20 2020-12-29 International Business Machines Corporation Controlling segment layout in a stress test for a processor memory with a link stack
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US11036545B2 (en) * 2019-03-15 2021-06-15 Intel Corporation Graphics systems and methods for accelerating synchronization using fine grain dependency check and scheduling optimizations based on available shared memory space
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US12118056B2 (en) 2019-05-03 2024-10-15 Micron Technology, Inc. Methods and apparatus for performing matrix transformations within a memory array
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US10867655B1 (en) 2019-07-08 2020-12-15 Micron Technology, Inc. Methods and apparatus for dynamically adjusting performance of partitioned memory
CN110365767B (zh) * 2019-07-12 2021-08-20 成都安恒信息技术有限公司 一种运维审计系统的单次运维多tcp连接聚合方法
US11360768B2 (en) 2019-08-14 2022-06-14 Micron Technolgy, Inc. Bit string operations in memory
US11693657B2 (en) * 2019-09-05 2023-07-04 Micron Technology, Inc. Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems
US11829729B2 (en) 2019-09-05 2023-11-28 Micron Technology, Inc. Spatiotemporal fused-multiply-add, and related systems, methods and devices
US11934824B2 (en) 2019-09-05 2024-03-19 Micron Technology, Inc. Methods for performing processing-in-memory operations, and related memory devices and systems
CN112559397A (zh) 2019-09-26 2021-03-26 阿里巴巴集团控股有限公司 一种装置和方法
US12079197B2 (en) 2019-10-18 2024-09-03 Dover Microsystems, Inc. Systems and methods for updating metadata
US11194581B2 (en) * 2019-10-21 2021-12-07 Arm Limited Controlling the operation of a decoupled access-execute processor
US11449577B2 (en) 2019-11-20 2022-09-20 Micron Technology, Inc. Methods and apparatus for performing video processing matrix operations within a memory array
US11853385B2 (en) 2019-12-05 2023-12-26 Micron Technology, Inc. Methods and apparatus for performing diversity matrix operations within a memory array
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11182159B2 (en) * 2020-02-26 2021-11-23 Google Llc Vector reductions using shared scratchpad memory
US11537861B2 (en) 2020-06-23 2022-12-27 Micron Technology, Inc. Methods of performing processing-in-memory operations, and related devices and systems
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US12112167B2 (en) 2020-06-27 2024-10-08 Intel Corporation Matrix data scatter and gather between rows and irregularly spaced memory locations
US11069422B1 (en) 2020-07-07 2021-07-20 International Business Machines Corporation Testing multi-port array in integrated circuits
US11227641B1 (en) 2020-07-21 2022-01-18 Micron Technology, Inc. Arithmetic operations in memory
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
KR20220046308A (ko) * 2020-10-07 2022-04-14 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
US12001385B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US12105589B2 (en) * 2022-02-23 2024-10-01 Micron Technology, Inc. Parity-based error management for a processing system
CN116319203B (zh) * 2023-03-21 2023-11-28 哈尔滨工业大学 用于区分用户的有限域资源构建方法、多址接入系统

Family Cites Families (235)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US533280A (en) * 1895-01-29 doug-las
US641194A (en) * 1899-03-28 1900-01-09 William F Cooper Acetylene-generator.
US3581279A (en) 1969-06-09 1971-05-25 Computer Modem Corp Signal transmission method and system
US3833889A (en) * 1973-03-08 1974-09-03 Control Data Corp Multi-mode data processing system
US4025772A (en) 1974-03-13 1977-05-24 James Nickolas Constant Digital convolver matched filter and correlator
US4251875A (en) * 1979-02-12 1981-02-17 Sperry Corporation Sequential Galois multiplication in GF(2n) with GF(2m) Galois multiplication gates
US4353119A (en) * 1980-06-13 1982-10-05 Motorola Inc. Adaptive antenna array including batch covariance relaxation apparatus and method
JPS5717049A (en) 1980-07-04 1982-01-28 Hitachi Ltd Direct memory access controlling circuit and data processing system
US4393468A (en) 1981-03-26 1983-07-12 Advanced Micro Devices, Inc. Bit slice microprogrammable processor for signal processing applications
US4489393A (en) 1981-12-02 1984-12-18 Trw Inc. Monolithic discrete-time digital convolution circuit
US4509119A (en) 1982-06-24 1985-04-02 International Business Machines Corporation Method for managing a buffer pool referenced by batch and interactive processes
FI72025C (fi) * 1982-11-04 1987-04-13 Valmet Oy Regleringssystem foer en traktor.
JPS5987243A (ja) * 1982-11-10 1984-05-19 Fuji Heavy Ind Ltd 内燃機関の空燃比制御装置
DE3485491D1 (de) 1983-11-26 1992-03-12 Toshiba Kawasaki Kk Arithmetischer konvolutionskreis.
US4727505A (en) 1984-03-29 1988-02-23 Kabushiki Kaisha Toshiba Convolution arithmetic circuit for digital signal processing
JPS60217435A (ja) 1984-04-12 1985-10-31 Toshiba Corp 多重精度浮動小数点加算回路
US4823259A (en) 1984-06-29 1989-04-18 International Business Machines Corporation High speed buffer store arrangement for quick wide transfer of data
US4785393A (en) 1984-07-09 1988-11-15 Advanced Micro Devices, Inc. 32-Bit extended function arithmetic-logic unit on a single chip
US4875161A (en) 1985-07-31 1989-10-17 Unisys Corporation Scientific processor vector file organization
US4748579A (en) * 1985-08-14 1988-05-31 Gte Laboratories Incorporated Method and circuit for performing discrete transforms
US4953073A (en) 1986-02-06 1990-08-28 Mips Computer Systems, Inc. Cup chip having tag comparator and address translation unit on chip and connected to off-chip cache and main memories
DE3687124T2 (de) 1986-02-06 1993-03-18 Mips Computer Systems Inc Funktionseinheit fuer rechner.
FR2605769B1 (fr) 1986-10-22 1988-12-09 Thomson Csf Operateur polynomial dans les corps de galois et processeur de traitement de signal numerique comportant un tel operateur
US4814976C1 (en) 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
US4876660A (en) 1987-03-20 1989-10-24 Bipolar Integrated Technology, Inc. Fixed-point multiplier-accumulator architecture
US5132898A (en) 1987-09-30 1992-07-21 Mitsubishi Denki Kabushiki Kaisha System for processing data having different formats
FR2622713A1 (fr) 1987-10-30 1989-05-05 Thomson Csf Circuit de calcul utilisant une arithmetique residuelle
US5032865A (en) 1987-12-14 1991-07-16 General Dynamics Corporation Air Defense Systems Div. Calculating the dot product of large dimensional vectors in two's complement representation
US4930106A (en) 1988-08-29 1990-05-29 Unisys Corporation Dual cache RAM for rapid invalidation
US4943919A (en) 1988-10-17 1990-07-24 The Boeing Company Central maintenance computer system and fault data handling method
US4893267A (en) 1988-11-01 1990-01-09 Motorola, Inc. Method and apparatus for a data processor to support multi-mode, multi-precision integer arithmetic
US5179651A (en) 1988-11-08 1993-01-12 Massachusetts General Hospital Apparatus for retrieval and processing of selected archived images for display at workstation terminals
CA1311063C (en) 1988-12-16 1992-12-01 Tokumichi Murakami Digital signal processor
US4969118A (en) 1989-01-13 1990-11-06 International Business Machines Corporation Floating point unit for calculating A=XY+Z having simultaneous multiply and add
US5253342A (en) 1989-01-18 1993-10-12 International Business Machines Corporation Intermachine communication services
US5155816A (en) 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
US5157388A (en) 1989-02-14 1992-10-20 Intel Corporation Method and apparatus for graphics data interpolation
US5081698A (en) 1989-02-14 1992-01-14 Intel Corporation Method and apparatus for graphics display data manipulation
US4975868A (en) 1989-04-17 1990-12-04 International Business Machines Corporation Floating-point processor having pre-adjusted exponent bias for multiplication and division
CA1323451C (en) 1989-04-21 1993-10-19 Victor Jacques Menasce Cache-memory architecture
US5031135A (en) 1989-05-19 1991-07-09 Hitachi Micro Systems, Inc. Device for multi-precision and block arithmetic support in digital processors
US5287484A (en) * 1989-06-21 1994-02-15 Hitachi, Ltd. Multi-processor system for invalidating hierarchical cache
US5233690A (en) 1989-07-28 1993-08-03 Texas Instruments Incorporated Video graphics display memory swizzle logic and expansion circuit and method
US5283886A (en) 1989-08-11 1994-02-01 Hitachi, Ltd. Multiprocessor cache system having three states for generating invalidating signals upon write accesses
US5170399A (en) * 1989-08-30 1992-12-08 Idaho Research Foundation, Inc. Reed-Solomon Euclid algorithm decoder having a process configurable Euclid stack
JPH0398145A (ja) * 1989-09-11 1991-04-23 Hitachi Ltd マイクロプロセッサ
US4956801A (en) 1989-09-15 1990-09-11 Sun Microsystems, Inc. Matrix arithmetic circuit for processing matrix transformation operations
DE68928980T2 (de) 1989-11-17 1999-08-19 Texas Instruments Inc. Multiprozessor mit Koordinatenschalter zwischen Prozessoren und Speichern
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5208914A (en) 1989-12-29 1993-05-04 Superconductor Systems Limited Partnership Method and apparatus for non-sequential resource access
US5241636A (en) 1990-02-14 1993-08-31 Intel Corporation Method for parallel instruction execution in a computer
KR930008050B1 (ko) 1990-02-16 1993-08-25 가부시끼가이샤 히다찌세이사꾸쇼 원칩 마이크로프로세서 및 그 버스시스템
JPH04219859A (ja) 1990-03-12 1992-08-10 Hewlett Packard Co <Hp> 並列プロセッサに直列命令ストリームデータを分散するハードウェアディストリビュータ
US5590365A (en) 1990-03-30 1996-12-31 Kabushiki Kaisha Toshiba Pipeline information processing circuit for floating point operations
US5333280A (en) * 1990-04-06 1994-07-26 Nec Corporation Parallel pipelined instruction processing system for very long instruction word
US5201056A (en) 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
CA2045705A1 (en) 1990-06-29 1991-12-30 Richard Lee Sites In-register data manipulation in reduced instruction set processor
JP2651267B2 (ja) 1990-07-26 1997-09-10 富士通株式会社 演算処理装置及び演算処理方法
JPH0484253A (ja) 1990-07-26 1992-03-17 Mitsubishi Electric Corp バス幅制御回路
US5249132A (en) 1990-10-31 1993-09-28 Tektronix, Inc. Digital pulse generator
JP3144794B2 (ja) * 1990-11-09 2001-03-12 株式会社日立製作所 マルチプロセッサシステム
US5809292A (en) 1990-11-13 1998-09-15 International Business Machines Corporation Floating point for simid array machine
US5588152A (en) 1990-11-13 1996-12-24 International Business Machines Corporation Advanced parallel processor including advanced support hardware
JP3100622B2 (ja) 1990-11-20 2000-10-16 沖電気工業株式会社 同期型ダイナミックram
US5268995A (en) 1990-11-21 1993-12-07 Motorola, Inc. Method for executing graphics Z-compare and pixel merge instructions in a data processor
JP2678527B2 (ja) * 1991-01-08 1997-11-17 三菱電機株式会社 キャッシュメモリ装置
DE69233510T2 (de) 1991-03-01 2006-02-02 Advanced Micro Devices, Inc., Sunnyvale Ausgangspuffer für Mikroprozessor
US5408581A (en) 1991-03-14 1995-04-18 Technology Research Association Of Medical And Welfare Apparatus Apparatus and method for speech signal processing
JP2816624B2 (ja) 1991-04-01 1998-10-27 モトローラ・インコーポレイテッド 2乗演算を実行する速度改良型データ処理システム及びその方法
FR2676845B1 (fr) 1991-05-23 1993-09-24 Sextant Avionique Dispositif pour la gestion de plusieurs files d'attente independantes dans un espace memoire commun et banalise.
JP2917577B2 (ja) * 1991-05-30 1999-07-12 松下電器産業株式会社 演算装置
FR2677200B1 (fr) 1991-05-30 1993-09-17 Besnard Christian Dispositif de securisation de donnees numeriques.
US5636363A (en) * 1991-06-14 1997-06-03 Integrated Device Technology, Inc. Hardware control structure and method for off-chip monitoring entries of an on-chip cache
US5325495A (en) 1991-06-28 1994-06-28 Digital Equipment Corporation Reducing stall delay in pipelined computer system using queue between pipeline stages
US5327570A (en) 1991-07-22 1994-07-05 International Business Machines Corporation Multiprocessor system having local write cache within each data processor node
US5185861A (en) * 1991-08-19 1993-02-09 Sequent Computer Systems, Inc. Cache affinity scheduler
WO1993011500A1 (en) 1991-11-27 1993-06-10 Seiko Epson Corporation Pixel modification unit
US5530960A (en) 1991-12-17 1996-06-25 Dell Usa, L.P. Disk drive controller accepting first commands for accessing composite drives and second commands for individual diagnostic drive control wherein commands are transparent to each other
US5231646A (en) 1992-03-16 1993-07-27 Kyros Corporation Communications system
US5669010A (en) 1992-05-18 1997-09-16 Silicon Engines Cascaded two-stage computational SIMD engine having multi-port memory and multiple arithmetic units
US5640543A (en) 1992-06-19 1997-06-17 Intel Corporation Scalable multimedia platform architecture
US5471628A (en) 1992-06-30 1995-11-28 International Business Machines Corporation Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode
US5282598A (en) * 1992-07-21 1994-02-01 Greene Barry N Container holder
JP3268024B2 (ja) 1992-08-25 2002-03-25 日本化学産業株式会社 天井の換気構造
US5268855A (en) 1992-09-14 1993-12-07 Hewlett-Packard Company Common format for encoding both single and double precision floating point numbers
US5256994A (en) 1992-09-21 1993-10-26 Intel Corporation Programmable secondary clock generator
US5423051A (en) 1992-09-24 1995-06-06 International Business Machines Corporation Execution unit with an integrated vector operation capability
JP3369227B2 (ja) * 1992-11-09 2003-01-20 株式会社東芝 プロセッサ
IE922813A1 (en) 1992-11-12 1994-05-18 Digital Equipment Internat Ltd Digital data storage system
JP3069455B2 (ja) * 1992-12-22 2000-07-24 富士写真フイルム株式会社 画像データ圧縮伸張装置における量子化・逆量子化回路
US5519842A (en) * 1993-02-26 1996-05-21 Intel Corporation Method and apparatus for performing unaligned little endian and big endian data accesses in a processing system
US5327369A (en) 1993-03-31 1994-07-05 Intel Corporation Digital adder and method for adding 64-bit, 16-bit and 8-bit words
JP3546437B2 (ja) * 1993-03-31 2004-07-28 ソニー株式会社 適応形ビデオ信号演算処理装置
US5671170A (en) * 1993-05-05 1997-09-23 Hewlett-Packard Company Method and apparatus for correctly rounding results of division and square root computations
WO1994027216A1 (en) * 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
JP3203401B2 (ja) * 1993-05-21 2001-08-27 三菱電機株式会社 データ処理装置
US5522054A (en) 1993-09-13 1996-05-28 Compaq Computer Corporation Dynamic control of outstanding hard disk read requests for sequential and random operations
US5395240A (en) * 1993-09-14 1995-03-07 Dentsply Research & Development Corp. Sterilizable dental medical handpiece containing electric coil
US5371772A (en) 1993-09-14 1994-12-06 Intel Corporation Programmable divider exhibiting a 50/50 duty cycle
US5426600A (en) 1993-09-27 1995-06-20 Hitachi America, Ltd. Double precision division circuit and method for digital signal processor
US5557724A (en) 1993-10-12 1996-09-17 Intel Corporation User interface, method, and apparatus selecting and playing channels having video, audio, and/or text streams
US5535225A (en) * 1993-10-12 1996-07-09 Hughes Aircraft Company Time domain algebraic encoder/decoder
EP0649085B1 (en) 1993-10-18 1998-03-04 Cyrix Corporation Microprocessor pipe control and register translation
JPH07114469A (ja) * 1993-10-18 1995-05-02 Mitsubishi Electric Corp データ処理装置
JPH07114496A (ja) 1993-10-20 1995-05-02 Toshiba Corp 共有メモリ制御回路
US5448185A (en) * 1993-10-27 1995-09-05 Actel Corporation Programmable dedicated FPGA functional blocks for multiple wide-input functions
DE69429061T2 (de) 1993-10-29 2002-07-18 Advanced Micro Devices, Inc. Superskalarmikroprozessoren
JP3487903B2 (ja) 1993-11-12 2004-01-19 松下電器産業株式会社 演算装置及び演算方法
US6128721A (en) 1993-11-17 2000-10-03 Sun Microsystems, Inc. Temporary pipeline register file for a superpipelined superscalar processor
EP0654733B1 (en) 1993-11-23 2000-05-24 Hewlett-Packard Company Parallel data processing in a single processor
US5390135A (en) 1993-11-29 1995-02-14 Hewlett-Packard Parallel shift and add circuit and method
US5883824A (en) 1993-11-29 1999-03-16 Hewlett-Packard Company Parallel adding and averaging circuit and method
US5590350A (en) 1993-11-30 1996-12-31 Texas Instruments Incorporated Three input arithmetic logic unit with mask generator
US6016538A (en) 1993-11-30 2000-01-18 Texas Instruments Incorporated Method, apparatus and system forming the sum of data in plural equal sections of a single data word
US5448509A (en) 1993-12-08 1995-09-05 Hewlett-Packard Company Efficient hardware handling of positive and negative overflow resulting from arithmetic operations
US5467131A (en) 1993-12-30 1995-11-14 Hewlett-Packard Company Method and apparatus for fast digital signal decoding
US5541865A (en) 1993-12-30 1996-07-30 Intel Corporation Method and apparatus for performing a population count operation
JP2932963B2 (ja) 1994-01-21 1999-08-09 モトローラ・インコーポレイテッド 効率的なビット移動能力を有するデータ・プロセッサとその方法
US5745778A (en) * 1994-01-26 1998-04-28 Data General Corporation Apparatus and method for improved CPU affinity in a multiprocessor system
US5551005A (en) 1994-02-25 1996-08-27 Intel Corporation Apparatus and method of handling race conditions in mesi-based multiprocessor system with private caches
US5550988A (en) 1994-03-01 1996-08-27 Intel Corporation Apparatus and method for performing error correction in a multi-processor system
US6006299A (en) 1994-03-01 1999-12-21 Intel Corporation Apparatus and method for caching lock conditions in a multi-processor system
US5673407A (en) 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
JPH07271764A (ja) 1994-03-24 1995-10-20 Internatl Business Mach Corp <Ibm> 計算機プロセッサ及びシステム
US5734874A (en) 1994-04-29 1998-03-31 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
WO1995031767A1 (en) 1994-05-11 1995-11-23 Vlsi Technology, Inc. Floating-point processor with apparent-precision based selection of execution-precision
JP2757777B2 (ja) 1994-05-26 1998-05-25 住友金属工業株式会社 メモリの不正アクセス検出方法及びシステム
US5559975A (en) 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
JPH0830577A (ja) * 1994-07-15 1996-02-02 Mitsubishi Electric Corp Simdプロセッサ
US5642306A (en) 1994-07-27 1997-06-24 Intel Corporation Method and apparatus for a single instruction multiple data early-out zero-skip multiplier
US5426379A (en) 1994-07-29 1995-06-20 Xilinx, Inc. Field programmable gate array with built-in bitstream data expansion
US5579253A (en) * 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
US5758176A (en) 1994-09-28 1998-05-26 International Business Machines Corporation Method and system for providing a single-instruction, multiple-data execution unit for performing single-instruction, multiple-data operations within a superscalar data processing system
US5477181A (en) 1994-10-13 1995-12-19 National Semiconductor Corporation Programmable multiphase clock divider
US6275834B1 (en) 1994-12-01 2001-08-14 Intel Corporation Apparatus for performing packed shift operations
EP0795155B1 (en) 1994-12-01 2003-03-19 Intel Corporation A microprocessor having a multiply operation
ZA9510127B (en) 1994-12-01 1996-06-06 Intel Corp Novel processor having shift operations
US5819101A (en) 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
CN101211255B (zh) 1994-12-02 2012-07-04 英特尔公司 对复合操作数进行压缩操作的处理器、设备和计算系统
US5598362A (en) * 1994-12-22 1997-01-28 Motorola Inc. Apparatus and method for performing both 24 bit and 16 bit arithmetic
US5887183A (en) 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US5680338A (en) 1995-01-04 1997-10-21 International Business Machines Corporation Method and system for vector processing utilizing selected vector elements
US5500811A (en) 1995-01-23 1996-03-19 Microunity Systems Engineering, Inc. Finite impulse response filter
US5687350A (en) * 1995-02-10 1997-11-11 International Business Machines Corporation Protocol and system for performing line-fill address during copy-back operation
US5566329A (en) * 1995-02-10 1996-10-15 International Business Machines Corporation System and method for mutation of selected assignment operations on large data objects
US5745729A (en) 1995-02-16 1998-04-28 Sun Microsystems, Inc. Methods and apparatuses for servicing load instructions
US5752264A (en) * 1995-03-31 1998-05-12 International Business Machines Corporation Computer architecture incorporating processor clusters and hierarchical cache memories
US5826106A (en) 1995-05-26 1998-10-20 National Semiconductor Corporation High performance multifunction direct memory access (DMA) controller
US5752001A (en) * 1995-06-01 1998-05-12 Intel Corporation Method and apparatus employing Viterbi scoring using SIMD instructions for data recognition
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US6633897B1 (en) * 1995-06-30 2003-10-14 International Business Machines Corporation Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5953241A (en) 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US6295599B1 (en) 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5742840A (en) 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6006318A (en) 1995-08-16 1999-12-21 Microunity Systems Engineering, Inc. General purpose, dynamic partitioning, programmable media processor
US5721892A (en) 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
AU6905496A (en) 1995-09-01 1997-03-27 Philips Electronics North America Corporation Method and apparatus for custom operations of a processor
US6470370B2 (en) 1995-09-05 2002-10-22 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US6058408A (en) 1995-09-05 2000-05-02 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US6237016B1 (en) 1995-09-05 2001-05-22 Intel Corporation Method and apparatus for multiplying and accumulating data samples and complex coefficients
JPH0997178A (ja) 1995-09-29 1997-04-08 Matsushita Electric Ind Co Ltd 飽和演算処理装置および方法
US5778412A (en) * 1995-09-29 1998-07-07 Intel Corporation Method and apparatus for interfacing a data bus to a plurality of memory devices
US5799165A (en) * 1996-01-26 1998-08-25 Advanced Micro Devices, Inc. Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5812439A (en) 1995-10-10 1998-09-22 Microunity Systems Engineering, Inc. Technique of incorporating floating point information into processor instructions
JP3717212B2 (ja) 1995-10-27 2005-11-16 株式会社日立製作所 情報処理装置及び情報処理ユニット
US5835744A (en) * 1995-11-20 1998-11-10 Advanced Micro Devices, Inc. Microprocessor configured to swap operands in order to minimize dependency checking logic
US5886732A (en) 1995-11-22 1999-03-23 Samsung Information Systems America Set-top electronics and network interface unit arrangement
US5935240A (en) * 1995-12-15 1999-08-10 Intel Corporation Computer implemented method for transferring packed data between register files and memory
US5757432A (en) 1995-12-18 1998-05-26 Intel Corporation Manipulating video and audio signals using a processor which supports SIMD instructions
US5940859A (en) * 1995-12-19 1999-08-17 Intel Corporation Emptying packed data state during execution of packed data instructions
US5740093A (en) 1995-12-20 1998-04-14 Intel Corporation 128-bit register file and 128-bit floating point load and store for quadruple precision compatibility
KR0157924B1 (ko) 1995-12-23 1998-12-15 문정환 데이타 전송 시스템 및 그 방법
US5983257A (en) 1995-12-26 1999-11-09 Intel Corporation System for signal processing using multiply-add operations
US5646626A (en) 1996-01-30 1997-07-08 Motorola, Inc. Method and apparatus for digital correlation in pseudorandom noise coded systems
US5835782A (en) 1996-03-04 1998-11-10 Intel Corporation Packed/add and packed subtract operations
US5802116A (en) * 1996-04-04 1998-09-01 Lucent Technologies Inc. Soft decision Viterbi decoding with large constraint lengths
US5835968A (en) * 1996-04-17 1998-11-10 Advanced Micro Devices, Inc. Apparatus for providing memory and register operands concurrently to functional units
US6092094A (en) 1996-04-17 2000-07-18 Advanced Micro Devices, Inc. Execute unit configured to selectably interpret an operand as multiple operands or as a single operand
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5872972A (en) * 1996-07-05 1999-02-16 Ncr Corporation Method for load balancing a per processor affinity scheduler wherein processes are strictly affinitized to processors and the migration of a process from an affinitized processor to another available processor is limited
US5826079A (en) * 1996-07-05 1998-10-20 Ncr Corporation Method for improving the execution efficiency of frequently communicating processes utilizing affinity process scheduling by identifying and assigning the frequently communicating processes to the same processor
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
JPH10143365A (ja) * 1996-11-15 1998-05-29 Toshiba Corp 並列処理装置及びその命令発行方式
US6269390B1 (en) * 1996-12-17 2001-07-31 Ncr Corporation Affinity scheduling of data within multi-processor computer systems
US5889983A (en) 1997-01-21 1999-03-30 Intel Corporation Compare and exchange operation in a processing system
US6061780A (en) 1997-01-24 2000-05-09 Texas Instruments Incorporated Execution unit chaining for single cycle extract instruction having one serial shift left and one serial shift right execution units
US6401194B1 (en) 1997-01-28 2002-06-04 Samsung Electronics Co., Ltd. Execution unit for processing a data stream independently and in parallel
US6141384A (en) 1997-02-14 2000-10-31 Philips Electronics North America Corporation Decoder for trellis encoded interleaved data stream and HDTV receiver including such a decoder
US6766515B1 (en) * 1997-02-18 2004-07-20 Silicon Graphics, Inc. Distributed scheduling of parallel jobs with no kernel-to-kernel communication
US5991531A (en) 1997-02-24 1999-11-23 Samsung Electronics Co., Ltd. Scalable width vector processor architecture for efficient emulation
US5922066A (en) 1997-02-24 1999-07-13 Samsung Electronics Co., Ltd. Multifunction data aligner in wide data width processor
GB2323187B (en) 1997-03-14 2001-09-19 Nokia Mobile Phones Ltd Data processing circuit using both edges of a clock signal
US6014684A (en) 1997-03-24 2000-01-11 Intel Corporation Method and apparatus for performing N bit by 2*N-1 bit signed multiplication
JPH10285052A (ja) * 1997-04-02 1998-10-23 Matsushita Electric Ind Co Ltd ユークリッド復号法およびユークリッド復号回路
US5898849A (en) 1997-04-04 1999-04-27 Advanced Micro Devices, Inc. Microprocessor employing local caches for functional units to store memory operands used by the functional units
JP3602293B2 (ja) * 1997-04-22 2004-12-15 株式会社ソニー・コンピュータエンタテインメント データ転送方法及び装置
JP3570855B2 (ja) 1997-05-29 2004-09-29 株式会社日立製作所 分岐予測装置
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6804766B1 (en) 1997-11-12 2004-10-12 Hewlett-Packard Development Company, L.P. Method for managing pages of a designated memory object according to selected memory management policies
US6438660B1 (en) 1997-12-09 2002-08-20 Intel Corporation Method and apparatus for collapsing writebacks to a memory for resource efficiency
US6134635A (en) 1997-12-09 2000-10-17 Intel Corporation Method and apparatus of resolving a deadlock by collapsing writebacks to a memory
US5999959A (en) 1998-02-18 1999-12-07 Quantum Corporation Galois field multiplier
US20010049780A1 (en) 1998-03-27 2001-12-06 Shreekant Thakkar Method and apparatus for performing integer operations in response to a result of a floating point operation
US6211892B1 (en) 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6426746B2 (en) 1998-03-31 2002-07-30 Intel Corporation Optimization for 3-D graphic transformation using SIMD computations
US6243803B1 (en) 1998-03-31 2001-06-05 Intel Corporation Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry
US6418529B1 (en) 1998-03-31 2002-07-09 Intel Corporation Apparatus and method for performing intra-add operation
US6212618B1 (en) * 1998-03-31 2001-04-03 Intel Corporation Apparatus and method for performing multi-dimensional computations based on intra-add operation
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6052769A (en) 1998-03-31 2000-04-18 Intel Corporation Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction
US6173393B1 (en) 1998-03-31 2001-01-09 Intel Corporation System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
US6377970B1 (en) 1998-03-31 2002-04-23 Intel Corporation Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry
US5996057A (en) 1998-04-17 1999-11-30 Apple Data processing system and method of permutation with replication within a vector register file
US6292815B1 (en) 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6408325B1 (en) 1998-05-06 2002-06-18 Sun Microsystems, Inc. Context switching technique for processors with large register files
JP3803196B2 (ja) * 1998-07-03 2006-08-02 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法および記録媒体
EP2302510B1 (en) * 1998-08-24 2012-05-09 MicroUnity Systems Engineering, Inc. A processor and method performed by a processor for executing a matrix multipy operation using a wide operand
US6378060B1 (en) * 1998-08-24 2002-04-23 Microunity Systems Engineering, Inc. System to implement a cross-bar switch of a broadband processor
JP2000224054A (ja) * 1999-01-27 2000-08-11 Texas Instr Inc <Ti> ビタビデコ―ディングの速度を増大させる方法と装置
US6463525B1 (en) * 1999-08-16 2002-10-08 Sun Microsystems, Inc. Merging single precision floating point operands
JP3971535B2 (ja) * 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
EP1102161A2 (en) * 1999-11-15 2001-05-23 Texas Instruments Incorporated Data processor with flexible multiply unit
US6539467B1 (en) 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
US6721708B1 (en) * 1999-12-22 2004-04-13 Hitachi America, Ltd. Power saving apparatus and method for AC-3 codec by reducing operations
FR2804366B1 (fr) * 2000-01-28 2002-04-26 Joseph Sauron Materiel Ind Dispositif d'electro-soudage a signal de sortie regule
US6574724B1 (en) 2000-02-18 2003-06-03 Texas Instruments Incorporated Microprocessor with non-aligned scaled and unscaled addressing
JP2003122736A (ja) * 2001-10-11 2003-04-25 Matsushita Electric Ind Co Ltd 行列演算装置
US6566758B1 (en) * 2001-11-27 2003-05-20 Sun Microsystems, Inc. Current crowding reduction technique for flip chip package technology
US10866807B2 (en) * 2011-12-22 2020-12-15 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride

Also Published As

Publication number Publication date
US8289335B2 (en) 2012-10-16
EP2226726A2 (en) 2010-09-08
US20040098548A1 (en) 2004-05-20
EP2226726A3 (en) 2010-10-20
EP1652090A2 (en) 2006-05-03
US7301541B2 (en) 2007-11-27
EP1652090A4 (en) 2008-04-09
CA2735354C (en) 2018-09-25
US7948496B2 (en) 2011-05-24
EP2228727A3 (en) 2010-10-20
CA2573292A1 (en) 2005-01-27
US20160321071A1 (en) 2016-11-03
US7952587B2 (en) 2011-05-31
US20090100227A1 (en) 2009-04-16
US20160048393A1 (en) 2016-02-18
CA2573292C (en) 2012-01-17
EP2284709B1 (en) 2014-11-26
US9378018B2 (en) 2016-06-28
US20090083498A1 (en) 2009-03-26
US7932910B2 (en) 2011-04-26
JP2007531072A (ja) 2007-11-01
US20090113185A1 (en) 2009-04-30
US9229713B2 (en) 2016-01-05
WO2005008410A3 (en) 2005-05-19
US10365926B2 (en) 2019-07-30
WO2005008410A2 (en) 2005-01-27
EP2284709A1 (en) 2011-02-16
US8018464B2 (en) 2011-09-13
US7843459B2 (en) 2010-11-30
EP2228727A2 (en) 2010-09-15
JP5005342B2 (ja) 2012-08-22
US20080104375A1 (en) 2008-05-01
EP2226725A3 (en) 2010-11-03
US20090031105A1 (en) 2009-01-29
US20130173888A1 (en) 2013-07-04
EP2226725A2 (en) 2010-09-08
CA2735354A1 (en) 2005-01-27
US20090113176A1 (en) 2009-04-30

Similar Documents

Publication Publication Date Title
ES2527937T3 (es) Procesador programable y método con operaciones amplias
US11681529B2 (en) Apparatuses, methods, and systems for access synchronization in a shared memory
US6643765B1 (en) Programmable processor with group floating point operations
US6725356B2 (en) System with wide operand architecture, and method
CN112099852B (zh) 可变格式、可变稀疏矩阵乘法指令
EP3629158B1 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
US8984043B2 (en) Multiplying and adding matrices
US20100106944A1 (en) Data processing apparatus and method for performing rearrangement operations
EP1105792B1 (en) System with wide operand architecture, and method
TWI603262B (zh) 緊縮有限脈衝響應(fir)濾波器處理器,方法,系統及指令
US20190042261A1 (en) Systems and methods for performing horizontal tile operations
WO2018034767A1 (en) Method and apparatus for compressing a data set using incremental deltas and a variable reference value
US10437562B2 (en) Apparatus and method for processing sparse data
ES2971474T3 (es) Método y aparato de aproximación utilizando polinomios
KR20150065152A (ko) 스레드 오프셋 카운터
EP3929732A1 (en) Matrix data scatter and gather by row
KR20220129106A (ko) 비트 스트링 축적
Adomnicai An update on Keccak performance on ARMv7-M
Pitkänen et al. Parallel memory architecture for application-specific instruction-set processors
Tang et al. Implementation of fast cosine transform on the Motorola DSP 96002 digital signal processor
Oruklu et al. Reduced Logic and Low-Power FFT Architectures for Embedded Systems
Wijsho Memory Hardware Support for Sparse Computations