MX2008012216A - Compresion de datos a alta velocidad basada en tecnicas de mapeo de cache de conjunto asociativo. - Google Patents

Compresion de datos a alta velocidad basada en tecnicas de mapeo de cache de conjunto asociativo.

Info

Publication number
MX2008012216A
MX2008012216A MX2008012216A MX2008012216A MX2008012216A MX 2008012216 A MX2008012216 A MX 2008012216A MX 2008012216 A MX2008012216 A MX 2008012216A MX 2008012216 A MX2008012216 A MX 2008012216A MX 2008012216 A MX2008012216 A MX 2008012216A
Authority
MX
Mexico
Prior art keywords
memory address
value
values
current symbol
bits
Prior art date
Application number
MX2008012216A
Other languages
English (en)
Inventor
Luis Paris
Original Assignee
Univ Mississippi
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 Univ Mississippi filed Critical Univ Mississippi
Publication of MX2008012216A publication Critical patent/MX2008012216A/es

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)

Abstract

Se proporciona un método para comprimir datos de un flujo fuente de datos que comprende una cadena de valores que utiliza una o más direcciones de memoria de computadora distintas como espacio de trabajo, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente. El método trabaja leyendo dos valores de datos contiguos, de longitud K y N bits, respectivamente, de un flujo de datos fuente, como una referencia de dirección de memoria, y un valor de símbolo actual, respectivamente. El valor de símbolo actual se escribe para reemplazar uno de los valores en la referencia de dirección de memoria si el valor de símbolo actual no coincide con ninguno de los valores en la referencia de dirección de memoria, y un código FALLA, seguido por el valor de símbolo actual, se adjuntan al flujo de datos comprimido. Alternativamente, si el valor de símbolo actual coincide con cualquiera de los valores en la referencia de dirección de memoria, entonces se agrega un código de acierto al flujo de datos comprimido, dicho código de acierto representando la ubicación, o un atributo asociado con la ubicación, en donde se encontró el valor en la referencia de dirección de memoria. El método se repite para todos los símbolos leídos del flujo fuente. Un método de descompresión o reconstrucción equivalente, simétrico y reversible crea un flujo de datos no comprimido equivalente al flujo fuente original. Ventajosamente, el espacio de trabajo empleado por el método de compresión tiene un comportamiento similar al de la memoria caché usada en la arquitectura de computadora, permitiendo que el método de compresión se implemente usando una memoria de contenido direccionable, que es una memoria asociativa o inteligente ara diseños de hardware o disposiciones asociativas para implementación de software.

Description

COMPRESION DE DATOS A ALTA VELOCIDAD BASADA EN TECNICAS DE MAPEO DE CACHE DE CONJUNTO ASOCIATIVO ANTECEDENTES DE LA INVENCIÓN La digitalización progresiva de información ha generado la aparición de infinidad de tecnologías de comunicación, aplicaciones multimedia, nuevos formatos de datos, y dispositivos de almacenamiento novedosos que han florecido en las pasadas dos décadas. Texto, imágenes, y video transmitidos a través de la Web, archivos de acceso basados en servidores, transferencias de documentos, consulta de bases de datos, y tecnologías de mapeo geográfico, se encuentran entre el número creciente de datos y aplicaciones multimedia que transforman y comunican la información digital en un formato que puede usarse con facilidad. La cantidad de recursos que se requieren para conducir esta abundancia de capacidades multimedia en términos de almacenamiento, transmisión, y poder de cómputo puede ser desalentador. Uno de los avances tecnológicos que ha permitido el despliegue de aplicaciones intensivas de datos y multimedia es la compresión de datos. Por ejemplo, el suministro de información científica que comprende archivos grandes, imágenes de alta calidad, y contenido de video en directo a través de la Web o una red corporativa involucra el uso de cierta compresión de datos. Similarmente , la transmisión de Ref . : 196922 tales servicios equivalentes a través de teléfonos celulares y otras tecnologías inalámbricas puede beneficiarse bastante de la compresión de datos para usar eficientemente el ancho de banda de comunicación disponible. La compresión de datos es el arte de remover redundancia en el contenido de información de un mensaje, una secuencia de bits almacenados en un archivo, memoria temporal, flujo de datos, etc. La representación de información en menos bits resulta en ahorro de más espacio en el medio de almacenamiento, y aumenta el ancho de banda efectivo disponible para transmisión suministrando más datos por unidad de tiempo. Por lo tanto, la compresión de datos ha jugado y continuará jugando un papel clave en tecnologías asequibles tanto de comunicaciones como multimedia para todos . En el acto de compresión de datos están implicados dos procesos diferentes cuando se hace referencia a un método de compresión de datos. Los dos métodos se denominan el compresor y el reconstructor. En la literatura, éste último se conoce más comúnmente como el descompresor o expansor, aunque algunos puristas utilizan el término reconstructor para implicar explícitamente un proceso de reconstrucción en los datos comprimidos. El término reconstrucción se prefiere y se usa a lo largo de la presente descripción para referirse explícitamente a un proceso de reconstrucción.
El compresor, como su nombre lo implica, procesa la fuente de entrada y la convierte en otra representación digital del original que es idealmente de tamaño más pequeño. En contraste, el reconstructor procesa los datos comprimidos y crea una versión reconstruida del original. Si la fuente y el contenido reconstruido coinciden exactamente, se dice que el método no tiene pérdida, de lo contrario se considera con pérdida. Los esquemas con pérdida usualmente obtienen mayores relaciones de compresión que los esquemas sin pérdida a expensas de la degradación en calidad. A pesar de que se han desarrollado y adaptado muchos esquemas de compresión a través de los años, la mayoría de ello hacen un fuerte énfasis en mejorar solo la ganancia en compresión. Sin embargo, un factor que típicamente se ignora es la velocidad del proceso de compresión-reconstrucción. En aplicaciones críticas, tales como flujo de multimedia, procesamiento de video, o transferencia inalámbrica de datos, la velocidad de compresión-reconstrucción (denominado de aquí en adelante como "codee") puede ser tan importante, si no más importante, que la ganancia en compresión. Gastar mucho tiempo ya sea en compresión o reconstrucción es típicamente un lujo injustificado en la mayoría de los escenarios en tiempo real. Es la combinación del ancho de banda del canal, la ganancia de codee y las velocidades de codee que finalmente determinan el tiempo de respuesta y la forma de desempeño de la aplicación usando los datos. En breve, si los datos se proporcionan más rápido, se procesarán y utilizarán más pronto. Como resultado, las aplicaciones de tiempo crítico se hacen posibles o trabajan de manera más óptima si los datos se comprimen más rápido. BREVE DESCRIPCIÓN DE LA INVENCIÓN La presente invención se relaciona con un método de compresión de datos y su equivalente inverso, el método de reconstrucción. Los métodos cuentan con una compresión de datos in pérdida, eficiente, de alta velocidad, ligera, en tiempo real y bastante configurable , y por lo tanto, son adecuados para un amplio intervalo de aplicaciones con varios requerimientos de comunicación. Un aspecto novedoso de la presente invención es el uso de una memoria seudo caché como espacio de trabajo para producir y reconstruir los datos comprimidos . La piedra angular de la tecnología se basa en un nuevo modelo de compresión de mapeo de caché (CMC, por sus siglas en inglés) que tiene la capacidad intrínseca de favorecer la velocidad de compresión naturalmente, así como el potencial de ser explotada en hardware debido al paralelismo inherente del proceso de compresión. Por lo tanto, son posibles bloques de codee de hardware de velocidad optimizada, capaces de procesar flujos de datos significativamente más rápido que la mayoría de los compresores del estado de la técnica bajo condiciones de ancho de banda similares. En esencia, las características visibles de la invención son: (a) Muy bajo consumo de memoria, (b) Muy bajo uso de recursos del sistema, (c) Velocidad de ejecución muy alta para métodos tanto de compresión como de reconstrucción, (d) Relaciones de compresión competitivas para la mayoría de los formatos de datos, (e) tiempo de entrega mínimo, el efecto de sumar tiempo de compresión + tiempo de transferencia + tiempo de reconstrucción, a anchos de banda elevados. Estas características hacen que el método sea un objetivo para sistemas integrados, PDAs, diseños de Sistema en un Chip (SOC, por sus siglas en inglés) y otros dispositivo de hardware con recursos de sistema limitados. Además, la simplicidad de los métodos de CMC permite implementaciones no costosas de hardware o software. Por lo tanto, la presente invención tiene un valor potencialmente alto para las industrias de hardware inalámbrico, integrado y electrónico y de software. Como con la mayoría de los métodos anteriores de compresión de datos, el presente método reduce el tamaño de un flujo de datos fuente eliminando datos redundantes, repetidos o usados repetitivamente, producido por coincidencias en grupos y/o cadenas parciales de caracteres, para generar un flujo de datos comprimidos. El flujo de datos fuente comprende una cadena o secuencia de valores, es decir de N bits, que serán comprimidos. El flujo de datos comprimidos comprende un subconjunto del flujo de datos original, junto con códigos de compresión (FALLA y ACIERTO) , los cuales se insertan en el flujo de datos comprimidos con base en el método de compresión presente, descrito más adelante. La compresión se logra, en parte, por medio de un nuevo método y novedoso que elimina valores redundantes, repetidos en el flujo de datos fuente, e inserta códigos de compresión, FALLA o ACIERTO, en el flujo de datos comprimidos para guiar la reconstrucción de los datos fuente a partir del flujo comprimido. Por ejemplo, la siguiente entrada, flujo fuente "ABCCCCABDDDD" es procesada al siguiente flujo de datos comprimidos, "<m>A <m>B <m>C <m>C <h(C)> <h(C)>, <m>A <h(B)> <m>D <m>D <h(D)> <h(D)>", en donde "<rn>" es un código FALLA y "<h(X)>" es un código ACIERTO para el carácter respectivo X. Una de las ventajas más notables de la presente invención es la capacidad de comprimir datos en bloques redimensiónables que pueden establecerse para ser tan grandes como una cadena larga o como un carácter pequeño y simple, como en el ejemplo anterior. Una vez que se establece el tamaño del bloque, el método tiene la flexibilidad de comenzar a sacar el flujo de datos comprimido inmediatamente después de que se ha recibido un bloque simple de datos de entrada, y detener y volver a comenzar dicha salida en cualquier tiempo, y en cualquier tamaño de bloque. Esto implica la posibilidad de reanudar el proceso en límites de cadena cortos, o límites de caracteres simples, siempre que se necesite a tiempo. Estas características, en conjunto, constituyen un modo de operación de "flujo exclusivo", y ofrecen gran flexibilidad a una aplicación permitiendo la personalización de parámetros de compresión específicos de acuerdo con requerimientos de datos particulares . El modo de operación de flujo exclusivo es distintivamente diferente del modo de flujo regular o modo de bloques. En el modo de bloques, un bloque de datos, usualmente de unos pocos kilobytes de longitud, es leído y procesado por el compresor, después de lo cual pueden sacarse los datos comprimidos . En el modo de flujo regular el compresor lee un carácter a la vez, pero no será capaz de sacar ningún dato comprimido hasta que se haya procesado un número indeterminable de caracteres . Esta incertidumbre puede afectar el desempeño de la aplicación, y algunas veces hace que la aplicación sea imposible bajo un esquema de compresión de flujo regular o basado en bloques. El modo de flujo exclusivo de la presente invención proporciona la capacidad de hacer que todas las comunicaciones de los datos comprimidos sean determinísticos en espacio y tiempo tanto para limites de cadena o de caracteres. En la sección de descripción detallada se proporcionan ejemplos adicionales del uso del modo de flujo exclusivo en comunicaciones digitales y para una aplicación de software de conversación. Tanto la compresión como la reconstrucción son procesos simétricos reversibles que utilizan una memoria de seudo caché como espacio de trabajo. Dicho espacio de trabajo se asemeja, en estado y comportamiento, a la operación de una memoria caché real, como se utiliza en la arquitectura de cómputo. La estructura del espacio de trabajo comprende una o más direcciones de memoria, cada dirección de memoria tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente, seguido por un campo de estado opcional usado para la política de selección de ubicación para determinar cómo se reemplazan los valores . Para lograr la compresión, los valores son leídos, uno a la vez, desde el flujo de datos fuente y relacionados en el espacio de trabajo. Similarmente , los valores son leídos desde el flujo de datos comprimidos y relacionados en el espacio de trabajo para reconstruir el flujo de datos no comprimido original. La longitud en bits de cada valor o símbolo leído desde la fuente o flujo comprimido está determinada por la constante N. El número de direcciones de memoria en el espacio de trabajo disponible está determinado por la constante , la cual provee 2 direcciones distintas posibles. El número de ubicaciones en cada dirección dé memoria está determinado por las líneas constantes, las cuales producen el mismo número de ubicaciones distintas posibles por dirección de memoria. Todas las constantes, N, K y Líneas, son definidas por los presentes métodos de compresión y reconstrucción, y agrupadas como métrica específica <N,K,Líneas> con el objeto de categorizar cada método de manera correspondiente . Son posibles tres disposiciones de espacio de trabajo variando el número de direcciones de memoria y el número de ubicaciones en cada: disposición de mapeo directo, definida por la métrica <N,K,12>, utiliza muchas direcciones de memoria, cada una conteniendo solo un valor; una disposición completamente asociativa, definida por la métrica <N, 0 , Líneas> , utiliza solo una dirección de memoria, conteniendo muchos valores; y una disposición de conjunto asociativo, la más flexible, definida por la métrica <N, K, Líneas> , utiliza muchas direcciones, cada una conteniendo muchos valores . Al usar cada uno de estas disposiciones como espacio de trabajo para implementar la compresión básica y los procesos de reconstrucción, junto con mejoras adicionales y variantes, se deriva una familia novedosa de compresión de mapeo de caché (CMC) y métodos de reconstrucción.
El presente método de compresión de datos remueve redundancias dentro de un flujo de datos usando una disposición de espacio de trabajo con métrica específica <N, K, Líneas> . Los valores del flujo de datos fuente son leídos, en pares de múltiples longitudes de bits, K bits y N bits, en una memoria temporal o ventana, y se copian a una referencia de dirección de memoria, y un valor de símbolo actual, respectivamente. Por lo tanto, los primeros K bits son leídos como una referencia de dirección de memoria, y los N bits que siguen inmediatamente son leídos como el valor de símbolo actual que va a procesarse. Si K es cero, entonces la referencia de dirección de memoria es cero. Con el valor de símbolo actual y la referencia de dirección de memoria disponible para procesamiento, el valor de símbolo actual es comparado con cada uno de los valores en la referencia de dirección de memoria. Si el valor de símbolo actual no coincide con ninguno de los valores en dicha referencia de dirección de memoria: (a) se agrega un código/valor de FALLA al flujo de datos comprimido; (b) el valor de símbolo actual se agrega al flujo de datos comprimido; (c) el valor de símbolo actual reemplaza uno de los valores en la referencia de dirección de memoria; y (d) opcionalmente , se actualiza un campo de estado en la referencia de dirección de memoria para reflejar un cambio en el uso de la ubicación. Sin embargo, si el valor de símbolo actual coincide con cualquiera de los valores en dicha referencia de dirección de memoria: (a) se codifica un código/valor de ACIERTO, que representa la ubicación en la referencia de dirección de memoria en donde se encontró el valor, y se agrega al flujo comprimido ; y (b) opcionalmente, se actualiza un campo de estado en dicha referencia de dirección de memoria para reflejar un cambio en el uso de la ubicación. Después de que se procesa el valor de símbolo actual usando la referencia de dirección de memoria como contexto, la memoria temporal o ventana cambia a la derecha en N bits preparándose para el siguiente par de valores de datos hasta que el flujo de datos fuente es consumido y se crea un flujo de datos comprimido completo. Los datos fuente se reconstruyen a partir de datos comprimidos invirtiendo el método de compresión, descrito anteriormente. El método de reconstrucción reutiliza el mismo espacio de trabajo usado durante el método de compresión, nuevamente con métrica específica <N, K, Líneas> , como se describió anteriormente con respecto al método de compresión. El método de reconstrucción lee los K bits anteriores que se sacaron previamente hacia el flujo no comprimido como una referencia de dirección de memoria. Si K es cero, no se lee ningún bit y la referencia de dirección de memoria también es cero. Enseguida, el método de reconstrucción lee los datos comprimidos, un bit a la vez, hasta que se decodifica un código de ACIERTO o FALLA. Si el valor decodificado es un código FALLA: (a) se leen N bits del flujo comprimido como el valor de símbolo actual; (b) el valor de símbolo actual se agrega al flujo no comprimido ; (c) el valor de símbolo actual reemplaza uno de los valores en la referencia de dirección de memoria, y (d) opcionalmente, se actualiza un campo de estado en dicha referencia de dirección de memoria para reflejar un cambio en el uso de la ubicación. Sin embargo, si el valor decodificado es un código ACIERTO: (a) se leen N bits de la referencia de dirección de memoria, en una ubicación especificada por dicho valor decodificado, como el valor de símbolo actual; (b) opcionalmente, se actualiza un campo de estado en dicha referencia de dirección de memoria para reflejar un cambio en el uso de la ubicación y (c) el valor de símbolo actual se agrega finalmente al flujo no comprimido. Después de que se procesa el valor de símbolo actual usando la referencia de dirección de memoria como contexto, la referencia de dirección de memoria se actualiza con los K bits anteriores que se sacaron previamente hacia el flujo no comprimido, y el método continúa leyendo y decodificando códigos/valores de ACIERTO o FALLA hasta que el flujo de datos comprimido es procesado completamente y se crea un flujo de datos completamente reconstruido no comprimido. Nótese que la operación de entrada realizada en el flujo de datos no comprimido para leer los K bits que harán la referencia de dirección de memoria podría ser indeseable, o incluso no posible del todo, dado que el flujo comprimido es esencialmente un flujo "sacado" . Se puede evitar que ocurra esta operación de entrada en el flujo de salida realizando una operación de cambio a la izquierda de N bits del valor de símbolo actual a la referencia de dirección de memoria, que cambio a la izquierda en N bits también como un resultado . La presente invención, en una forma, se relaciona con un método para comprimir datos de un flujo fuente de datos que comprende una cadena de valores que utiliza una o más ubicaciones para contener uno o más valores distintos, respectivamente. El método comprende: (a) leer/ingresar K bits desde un flujo de datos fuente, que están inmediatamente antes de un punto de lectura actual en el flujo fuente, como una referencia de dirección de memoria, si K es mayor que cero; (b) leer/ingresar N bits desde el flujo fuente como un valor de símbolo actual; (c) escribir el valor de símbolo actual para reemplazar uno de los valores en la referencia de dirección de memoria si el valor de símbolo actual no coincide con ninguno de los valores en la referencia de dirección de memoria, y escribir un código/valor de FALLA seguido por el valor de símbolo actual a un flujo de datos comprimido; y (d) escribir un código/valor ACIERTO, que representa la ubicación en la referencia de dirección de memoria en donde se encontró el valor, al flujo de datos comprimido si el valor de símbolo actual coincide con cualquiera de los valores en la referencia de dirección de memoria. Ventajosamente, se repiten de (a) a (d) después de la inicialización de todos los valores en cada dirección de memoria, en donde en (a) , los bits más a la izquierda de la referencia de dirección de memoria son iniciados apropiadamente si no están disponibles para leer desde el flujo de datos fuente. La presente invención se relaciona, en otra forma, con un método para la reconstrucción de un flujo de datos fuente no comprimido a partir de datos comprimidos que comprenden por lo menos uno de los datos fuente, junto con códigos de compresión que comprenden códigos FALLA y ACIERTO, usando una o más direcciones de memoria de cómputo distintas como espacio de trabajo, en donde cada dirección de memoria de cómputo tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente. El método incluye: (a) leer/ingresar K bits del flujo de datos no comprimido, que están inmediatamente antes del punto de inserción actual en el flujo no comprimido como una referencia de dirección de memoria, si K es mayor que cero; (b) leer/ingresar un valor de código de flujo de datos comprimido, representando dicho valor de código ya sea una ubicación codificada como FALLA o una ocurrencia de ACIERTO; (c) si el valor es un código FALLA, escribir N bits del flujo comprimido como el valor de símbolo actual, escribir dicho valor de símbolo actual para reemplazar uno de los valores en la referencia de dirección de memoria obtenido en (a) , y al flujo no comprimido; y (d) si el valor es un código ACIERTO, leer de N bits desde la ubicación dada por el código ACIERTO decodificado en la referencia de dirección de memoria obtenido en (a) , como el valor de símbolo actual, y escribir dicho valor de símbolo actual al flujo no comprimido. BREVE DESCRIPCION DE LAS FIGURAS La figura 1 es un diagrama que ilustra secuencias de entrada y salida de un método de compresión de mapeo de caché de conformidad con la presente invención, en donde los bloques etiquetados se refieren a valores de símbolo leídos desde el flujo de datos fuente; La figura 2 es un diagrama que ilustra la compresión de mapeo de caché de conformidad con la presente invención, en donde las líneas marcadas como Bloque y Dirección se refieren al valor de símbolo actual y la referencia de dirección de memoria, respectivamente; La figura 3 es un diagrama de flujo que ilustra un método de compresión de mapeo de caché (CMC) de conformidad con la presente invención; La figura 4 es un diagrama de flujo que ilustra un método compresor de CMC de mapeo directo de conformidad con la presente invención, en donde las variables Bloque, Línea, y Conjunto se refieren al valor de símbolo actual, número de ubicación (dentro de una dirección de memoria) , y la referencia de dirección de memoria, respectivamente; La figura 5 es un diagrama de flujo que ilustra un método de compresor de CMC de conjunto asociativo de conformidad con la presente invención, en donde las variables Bloque, Línea, y Conjunto se refieren al valor de símbolo actual, número de ubicación (dentro de una dirección de memoria) , y la referencia de dirección de memoria, respectivamente; La figura 6 es un diagrama de flujo que ilustra un método de compresor de CMC completamente asociativo de conformidad con la presente invención, en donde las variables Bloque, Línea, y Conjunto se refieren al valor de símbolo actual, número de ubicación (dentro de una dirección de memoria) , y la referencia de dirección de memoria, respectivamente ; La figura 7 es un diagrama del espacio de trabajo o memoria seudo caché utilizada por los métodos todos los métodos de compresión y reconstrucción descritos en la presente invención; La figura 8 es un diagrama de flujo que ilustra un método de compresión de mapeo de caché genérico de conformidad con la presente invención, en donde las variables Bloque, Línea, y Conjunto se refieren al valor de símbolo actual, número de ubicación (dentro de una dirección de memoria) , y la referencia de dirección de memoria, respectivamente ; La figura 9 es un diagrama de un método de compresión de mapeo de reconstrucción de conformidad con la presente invención, en donde las variables Bloque, Línea, y Conjunto se refieren al valor de símbolo actual, número de ubicación (dentro de una dirección de memoria) , y la referencia de dirección de memoria, respectivamente; La figura 10 es un diagrama comparativo que ilustra la relación entre los procesos de codificación y almacenamiento en memoria caché con respecto a los métodos de mapeo directo, completamente asociativo, y de conjunto asociativo, de conformidad con la presente invención; La figura 11 ilustra un árbol de Huffman que muestra cómo se asignan códigos Huffman de conformidad con la presente invención; y La figura 12 ilustra cómo se alinean los datos comprimidos para el caso particular en donde N es 8, incluyendo cada señal, es decir códigos de ACIERTO y FALLA o bits de control usados para guiar el método de descompresión en le reconstrucción de los datos, de conformidad con la presente invención. DESCRIPCION DETALLADA DE LA INVENCION El presente método de compresión de mapeo de caché (CMC) se basa en un modelo que se asemeja al mecanismo de almacenamiento en memoria caché de datos internos que ocurre dentro de una computadora, entre la unidad de procesamiento central (CPU) y la memoria principal. Una diferencia es que el presente método de CMC explota las propiedades de localidad de datos del caché en un intento por producir compresión, en lugar de acelerar el acceso a la memoria como lo hace en el caso de una arquitectura de computadora. Los métodos de CMC explicados aquí representan estados en un mecanismo automático de estado finito, y como tal, pueden implementarse como artefactos de software o hardware. Tal como se emplea a través de la presente descripción, cuando se hace referencia a datos de compresión, los flujos de entrada y salida se refieren a los flujos fuente y comprimidos respectivamente. Similarmente, cuando se reconstruye, los flujos de entrada y salida corresponden a los flujos comprimidos y reconstruidos, respectivamente. El presente método considera tanto flujos fuente como reconstruido como una secuencia de valores de N bits de longitud fija llamados bloques. La razón para operar en bloques de datos de N bits en lugar de símbolos fuente de procesamiento directamente, es doble. En primer lugar, un bloque es del mismo tamaño que una línea de caché, la unidad de transferencia de datos mínima en el caché. En segundo lugar, el tamaño del bloque puede establecerse independientemente de la longitud en bits de los símbolos fuente. Esto, a su vez permite más control sobre los parámetros de compresión, permitiéndoles coincidir mejor con las características del flujo fuente y, por lo tanto, intentar mejores relaciones de compresión. Sin embargo, para claridad cuando se presenta el conjunto de reivindicaciones propuesto, los bloques de datos de N bits también se denominan valores de símbolo actual. El método de compresión de CMC lee uno bloque de datos de N bits en un tiempo del flujo fuente. Si el bloque actual se encuentra en una ubicación específica en el caché, entonces ocurre un acierto; de otra manera, resulta una falla. Enseguida, el método de compresión saca una de las dos secuencias posibles, ya sea un código de Acierto que consiste en H bits o un código de Falla que consiste en M bits, seguido por el bloque de datos actual . El método de compresión continúa hasta que todos los bloques del flujo fuente son procesados . La figura 1 muestra el estado de un flujo arbitrario de bloques B, A, B, C, antes y después de la compresión. Por ejemplo, si la secuencia de entra es {B,A,B,C...}, la secuencia de salida comprimida hipotética es {<falla><B>, <acierto> (para A) , <acierto> (para B) , <pérdida><C> ... } . Comparando ambas secuencias, puede observarse que el primer y último bloques presentan una expansión de M bits para cada falla, mientras que los dos bloques intermedios contribuyen a un factor de compresión de (N-H) bits para cada bloque. Por lo tanto, conociendo el número total de aciertos, es posible calcular exactamente la relación de compresión. Existe una diferencia conceptual entre códigos de falla y códigos de acierto. Un código de falla sirve simplemente como un marcador Booleano. Informa al reconstructor que ha ocurrido una falla y, por lo tanto, que a continuación sigue el bloque fallado. En contraste, un código de acierto no solo indica que un bloque se almacenó en memoria caché con éxito, dependiendo de la métrica de caché, un código de acierto también debe codificar el número de línea en el conjunto en donde ha ocurrido el acierto. Nótese que un código de falla se define como un valor de bits por conveniencia, pero podría hacerse una compensación con la longitud del código de acierto con el fin de minimizar el código de longitud promedio para ambos. Nótese que el número de línea y el conjunto también se denominan número de ubicación y la referencia de dirección de memoria, respectivamente. Mediante inspección visual de la secuencia de salida en la figura 1, es evidente que la compresión mejora al emerger más códigos de acierto en la salida, mientras se degrada cuando aumenta la longitud de código para estos aciertos y fallas. El número de aciertos puede maximizarse disponiendo una o más líneas por conjunto pero, desafortunadamente, al hacerlo también aumenta la longitud de código de acierto. Por lo tanto, hay evidentemente un problema de minimización involucrado . Si el bloque actual se encuentra en una ubicación específica en el caché, ocurre un acierto. La ubicación específica en donde el bloque actual se mapea en realidad es crucial. Este mapeo es lo que permite la producción de aciertos en primer lugar, y como lo revela la figura 1, lo que permite reducir el tamaño de la secuencia de salida para lograr la compresión. Con el fin de que un bloque se almacene en memoria caché, se necesitan dos entradas: un bloque y una dirección. La dirección determinará el conjunto de caché en donde se hará el mapeo del bloque, y por lo tanto, también se denomina "dirección de mapeo de caché" . Con el fin de extraer una función de dirección de mapeo apropiada para los bloques entrantes, es de utilidad visualizar los tipos de redundancia de datos que pueden explotarse típicamente en el texto: coincidencias de cadenas y grupos de caracteres. Considere la siguiente secuencia: ABCCCCABDDDD ... En esta secuencia, existe solo una coincidencia de cadena (la subcadena "AB" que coinciden con le segunda subcadena "AB" ) y dos grupos de caracteres ("CCC..." y "DDD...") . Para que el compresor de CMC sea efectivo, debe explotar estas redundancias haciendo que los bloques entrantes (caracteres) produzcan aciertos para los bloques ya encontrados en el caché. Esto se traduce en obtener la misma dirección de mapeo para ambos de tal manera que el contenido de sus bloques coincidan cuando sean comparados. Suponga que los primeros tres caracteres, "ABC", en la secuencia ya han sido procesados. Tal estado del caché se muestra en la Tabla 1.
Tabla 1 Para obtener aciertos para el siguiente grupo de caracteres "CCC...", cada "C" entrante debe almacenarse en memoria caché en la misma dirección de mapeo que la "C" previamente encontrada. Esto da lugar al uso de los caracteres previos como entrada a la dirección de mapeo de caché; es decir, usando la representación binaria de computadora equivalente de los caracteres previos para generar la dirección de mapeo de caché. Consecuentemente, si un carácter "C" se almacena en memoria caché en una línea suya dirección de mapeo es una función del carácter "C" previo, nuevos caracteres "C" consecutivos producirán aciertos cuando se comparen dado que su dirección de mapeo será la misma. La figura 2 ilustra el método de compresión de CMC en más detalle cuando la dirección de mapeo, K, es de 8 bits de longitud, el tamaño del bloque actual, N, es también de 8 bits de largo, y cada dirección de memoria contiene una ubicación solo para contener los bloques de datos . El bloque actual leído del flujo fuente recibe el carácter actual (8 bits) , y la dirección de mapeo se asigna al carácter previo (8 bits) . El método de compresión a procesado justo los primeros 8 caracteres del flujo fuente y ha sacado la secuencia resultante en el flujo comprimido. Los códigos de falla y los códigos de acierto se representan como <m>X y <h(X)>, respectivamente, en donde X es el bloque que resulta ya sea en una falla o un acierto. La figura 2 también muestra el estado actual del caché (después de que se procesa la segunda subcadena "AB" ) y el estado final (después de que se procesa el último carácter "D" ) . Los aciertos se muestran en círculos dentro del caché, y el resto son fallas. Como se muestra en la figura 2, el proceso de compresión no solo detecta el grupo de caracteres "CCC..." y "DDD .. " , sino también las coincidencias de cadenas, detectando la segunda subcadena "AB" y produciendo el acierto correspondiente en el carácter "B" . Nótese que la línea de caché contiene solo un bloque en cualquier tiempo dado. Este es el caso para disposiciones de caché de mapeo directo, como se discutirá más detalladamente mas adelante con referencia a la figura 4. El carácter más a la derecha representa el bloque más reciente en el caché. Cuando ocurre un acierto, el bloque actual no vuelve a almacenarse en memoria caché, aunque está representado en el caché con un círculo, para propósitos de ilustración, para indicar que dicho bloque dio como resultado un acierto. La dirección de mapeo se refiere en realidad a un conjunto específico en el caché.
El codee de CMC está firmemente acolad con la estructura de caché interna utilizada. Consecuentemente, al modificar la métrica del caché, el número de lineas por conjunto de instancia, tiene el efecto de cambiar drásticamente el comportamiento del presente método de compresión. El presente método de CMC puede definirse en términos de tres parámetros (N, K, Líneas) y un código. Los parámetros describen la métrica del caché interno (bits por bloque, bits por dirección de conjuntos, número de líneas) , y el código define la codificación usada para representar aciertos y fallas en el flujo comprimido. Las líneas también pueden definirse en términos de L, el número de bits necesarios para codificar 2L líneas. El presente método de compresión de CMC puede implementarse , ventajosamente, usando una o más de las tres estructuras de caché específicas. Las tres estructuras de caché definen tres formad específicas del presente método de compresión, y se denominan: de mapeo directo, de conjunto asociativo, o completamente asociativo. Los tres métodos se describirán con referencia a un seudo código, para propósitos explicativos, para proporcionar un mejor entendimiento del presente método de compresión y las tres implementaciones ventajosas, sin detalles de implementación, lo cual será evidente para alguien con experiencia en la técnica. Con referencia en general a la figura 3 el método 1 ilustra una implementación genérica del presente método de CMC. El método 10 comprime datos de un flujo fuente de datos que comprimen una cadena de valores, usando uno o más direcciones de memoria de computadora como espacios de trabajo. Cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente . Se leen K bits o una entrada del flujo de datos fuente, que están inmediatamente antes del punto de lectura actual en el flujo de datos fuente, como una referencia de dirección de memoria, si K es mayor que cero (etapa 20) . Si no hay bits antes del punto de lectura actual, no se leerá ningún K bit, se asignará a K el valor cero. Por ejemplo "ABCCCCABDDD" , el primer punto de lectura inicial es la primera A. Dado que A está en la primera posición, no hay bits que precedan a A y, por lo tanto, no se leerán ningún K bits del flujo de datos fuente. Consecuentemente, se asigna a K el valor cero. Enseguida, se leen N bits del flujo fuente como un valor de símbolo actual el cual, en este ejemplo, es una A (etapa 30) . El valor de símbolo actual, es decir, A, se escribe para reemplazar uno de los valores en la dirección de memoria si el valor del símbolo no coincide con ninguno de los valores en la referencia de dirección de memoria. Además, un código de falla, "<m>", seguido por el valor de símbolo actual, se escribe al flujo de datos comprimido. En este ejemplo, el valor de símbolo actual, es decir, A, no coincide con ningún valor, de hecho el único valor, en la dirección de memoria, el cual es cero y, por lo tanto, un código de falla, <m>, seguido por una A, se escribe al flujo de datos comprimido (etapa 40) . Se escribe un código de acierto, que representa la ubicación de la referencia de dirección de memoria en donde se encuentra el valor, al flujo comprimido si dicho valor de símbolo actual coincide con cualquiera de los valores en la dirección de memoria (etapa 50) . En este ejemplo, dado que el valor A no se encuentra en ninguna ubicación en la dirección de memoria en la dirección de memoria cero, no se escribe un valor de acierto a flujo de datos comprimido. En la etapa 60, el método se repite para cada valor en el flujo de datos fuente después de una inicialización de todos los valores en cada dirección de memoria, en donde los bits más a la izquierda de la referencia de dirección de memoria son inicializados apropiadamente si no están disponibles del flujo de datos fuente (etapa 60) . Consecuentemente, la etapa 20 se repite durante un primer tiempo en donde K bits del flujo de datos fuente son leídos o ingresados inmediatamente antes del punto de lectura actual, el cual es ahora B, y se asigna a la referencia de dirección de memoria un valor inmediatamente antes del punto de lectura actual, es decir A (etapa 20) . Enseguida, el valor B se lee como los N bits del flujo de datos fuente, y se asignan al valor de símbolo actual (etapa 30) . En la etapa 40, el valor de símbolo actual se escribe para reemplazar el valor en la dirección de memoria A dado que el valor de símbolo actual, es decir B, no coincide con ningún valor, de hecho el único valor, en la dirección de memoria A (etapa 40) . Subsiguientemente, se escribe un código de falla seguido por el valor de símbolo actual, es decir B, al flujo de datos comprimido. Como resultado, el flujo comprimido actual comprende ahora <m>A<m>B . El método 10 se repite don veces más para los siguientes dos valores, es decir C y C. Durante una quinta iteración del método 10, se lee el quinto valor, es decir, la tercera C desde la izquierda, como los N bits del flujo fuente (etapa 30) y se ingresa el valor inmediatamente antes, el cual es también C, como una referencia de dirección de memoria (etapa 20) . En la etapa 40, dado que el valor de símbolo actual, C, de hecho, coincide con el valor actual en la dirección de memoria que corresponde a C, no se escribe ningún código de falla o valor de símbolo actual al flujo comprimido. En su lugar, en la etapa 50, se escribe un código de acierto, que representa la ubicación en la referencia de dirección de memoria en donde se encontró el valor C al flujo de datos comprimido dado que el valor de símbolo actual C, coincide con uno de los valores en la referencia de dirección de memoria C. Consecuentemente, el flujo de datos comprimidos actuales es ahora <m>A, <m>B, <m>C, <h(C)>. El método 20 se repite entonces hasta que son procesados todos los valores. El método 10 puede modificarse como se desee, para optimizar el tiempo de procesamiento y la eficiencia, así como la ganancia en compresión, es decir, el tamaño del flujo de datos comprimidos con respecto al tamaño del flujo de datos fuente. Por ejemplo, en la etapa 20, los K bits leídos pueden reducirse/convertirse un número meno o igual de bits para producir una palabra resultante la cual se usa como referencia de dirección de memoria. Por ejemplo, los K bits leídos son convertidos entonces en un número de bits igual o menos, posiblemente después de una estrategia de dispersión buscando reducir el tamaño del espacio de trabajo, y después se usan como referencias de dirección de memoria en etapas sucesivas para los métodos tanto de compresión como de reconstrucción . Una manera de convertir los K bits en un menor número de bits, reduciendo por lo tanto la cantidad de memoria para espacio de trabajo, es usando una estrategia de dispersión mediante la cual los K bits se ingresan a una función de dispersión que convierte el valor de K bits en un calor de R bits más pequeño antes de que se utilizado como una referencia de dirección de memoria. Para ilustrar una función de dispersión simple pero poderosa, considere el operador de módulo, el cual regresa el residuo de la división de dos enteros. Es decir, si D y d son enteros en donde D>d, entonces "D módulo d" regresa el residuo de D/d, lo cual se garantiza que es otro entero entre 0 y d-1. Esto puede ser muy conveniente si todas las 2K direcciones de memoria que se leen del flujo fuente no pueden direccionarse en la memoria de espacio de trabajo disponible. En tal caso a D se le asigna le referencia de dirección de memoria original, a d se le asigna el número total de direcciones de memoria real disponible, 2R, y el resultado de "D módulo d" se asigna a la nueva referencia de dirección de memoria reducida y se utiliza posteriormente para direccionar el espacio de trabajo. Además, en la etapa 20, puede usarse un campo de estado opcional de la dirección de memoria para rastrear el uso de la ubicación dentro de la dirección de memoria. Después, al avanzar el método, en cualquiera de las etapas 40 ó 50, el campo de estado se actualiza después de leer/escribir un valor como la dirección de memoria. El campo de estado se usa en un método de compresión asociativo para rastrear cómo son reemplazados los valores cuando ocurre una falla. El campo de estado podría usarse de manera diferente de acuerdo con la estrategia usada para reemplazar valores cuando ocurre una falla, es decir, cuando el valor de símbolo actual no coincide del todo con ninguno de los valores en la referencia de dirección de memoria. Independientemente de la estrategia, lo esperado es que el campo de estado proporcione el mejor estimado de la ubicación para usar cuando se reemplace un valor para una dirección de memoria específico. En la práctica, el campo de estado contiene tantos contadores como ubicaciones existen en una dirección de memoria. Cada contador mantiene un rastreo de una ubicación específica almacenando una categoría que representa el orden mediante el cual cada ubicación deberá reemplazarse, de acuerdo con la política de reemplazo específica en el lugar. Por ejemplo, suponga una estrategia de reemplazo menos utilizada recientemente (LRU, por sus siglas en inglés) , con 4 ubicaciones por dirección de memoria, y un campo de estado que contiene, el algún punto, los siguientes valores en cada uno de los 4 contadores asociados con cada ubicación: 3, 1, 0, 2. Esto significa que los números de ubicación 0, 1, 2, 3 en la dirección de memo tienen contadores LRU asociados en el campo de estado con valores 3, 1, 0, 2. Bajo una estrategia de LRU esto significa que la ubicación 0 es la más recientemente utilizada por que tiene el contador LRU con el valor 3, enseguida es la ubicación 3 con contador LRU = 2, sigue la ubicación 2 con contador LRU = 1, y finalmente la ubicación 2 con contador LRU = 0. Por lo tanto, cuando un valor está a punto de ser reemplazado, el número de ubicación asociado con el valor del contador LRU más bajo se seleccionará para reemplazo, o la ubicación 2 en este caso, porque representa la ubicación menos usada recientemente, como lo sugiere la propia estrategia de reemplazo. Por otro lado, el campo de estado podría implementarse de manera diferente si se usa otra estrategia, como en la política de reemplazo del valor más antiguo, con lo cual el campo de estado se concibe preferentemente como una cola primero en entrar primero en salir (FIFO, por sus siglas en inglés) , en lugar de contadores, en donde se agregan nuevas ubicaciones reemplazadas al frente de la cola y la ubicación más antigua usada para reemplazo se obtiene de la cola. Independientemente de la estrategia de reemplazo utilizada, el campo de estado se usa para determinar cuál ubicación debe seleccionarse cuando se reemplaza un valor, después de que ha ocurrido una falla. El método 10 puede modificarse para incluir varios esquemas de compresión los cuales usan varias estructuras de caché, las cuales incluyen un método de CMC de mapeo directo 100 (figura 4), un método de CMC de conjunto asociativo 200 (figura 5) y un método de CMC completamente asociativo 300 (figura 6) . Con referencia a la figura 4, en general, el método 100 emplea una disposición de caché simple. En esta disposición, el caché consiste de una línea por conjunto, en donde solo un bloque de datos puede almacenarse en cualquier conjunto específico; por lo tanto, la métrica de caché <N,K,1>. Esta estructura simplifica el manejo interno de bloques dado que no hay ninguna política de reemplazo involucrada o, por el contrario, la estrategia es mínima, es decir, si ocurre una falla, estonces reemplaza el único bloque disponible en el conjunto. Los caché de mapeo directo no requieren bits de estado para una política de reemplazo la cual se implementa en el método de compresión de conjunto asociativo 200 y en el método de compresión completamente asociativo 300. Por lo tanto, los cachés de mapeo directo, son más rápidos y requieren de menos recursos que los cachés de conjunto asociativo o asociativos completos, de conformidad con otros aspectos de la presente invención. Sin embargo, lo que se obtiene es una menor tasa de acierto cuando se compara con otras disposiciones. Con referencia ahora específicamente a la figura 4, el método de compresión de CMC de mapeo directo 100 incluye variables de localización que contienen un Bloque, Línea, y Conjunto actuales, los cuales son declarados. Nuevamente, esto representa el valor de símbolo actual, el número de ubicación, y la referencia de dirección de memoria, respectivamente. Como en las etapas del método 10 (figura 3) se incrementa en 100 en la figura 4. El conjunto se inicializa a cero (etapa 105) . Se leen N bits del flujo de datos fuente y se copian al Bloque y, si el flujo se refiere a un archivo, se actualiza el apuntador del archivo asociado, es decir, se hacia delante en N bits (etapa 130) . El bloque de datos se lee del flujo fuente siempre y cuando no se llegue al final del flujo de datos (etapa 130) . El bloque actual es buscad en el conjunto específico, y dado que ahí solo hay una línea por conjunto en un caché de mapeo directo, solo se busca una línea (etapa 134) . Si el bloque no coincide con el contenido de la línea, ocurre una falla, y el bloque se escribe a la línea de caché (etapa 136) . Adicionalmente , si no se encuentra el bloque, se escribe un valor de un bit que sirve como un código o marcador de "falla" al flujo comprimido (etapa 140) . El valor del marcador es la constante FALLA (etapa 140) . Además, el bloque actual se escribe al flujo comprimido (etapa 142) . Durante la reconstrucción o descompresión del flujo de datos comprimido, el método de reconstrucción no puede obtener el bloque del caché dado que ocurre una falla, como se discutirá más detalladamente enseguida. Por lo tanto, el bloque necesita replicarse en un flujo comprimido de tal manera que puede recuperarse después (etapa 142) . Alternativamente, si se encuentra el bloque (etapa 136), se escribe un valor de un bit al flujo comprimido para indicar que ha ocurrido un acierto (etapa 150) . El marcador de acierto se usa durante un método de reconstrucción para extraer un bloque del caché. Dado que solo hay una linea por conjunto en el método de mapeo directo 100, no es necesario codificar el número de linea en el flujo comprimido en la etapa 150. El valor del conjunto actual se prepara para la siguiente iteración del método 100 (etapa 160) . El proceso de actualización es conceptualmente análogo a un "cambio de lugar ocupado" sobre el flujo fuente que cambia N bits a la derecha y al final de cada vuelta de iteración, y lee K bits desde ese punto en el flujo, como se muestra en la figura 2. Esta operación es básicamente equivalente a cambiar el contenido de los N bits variables establecidos a la izquierda y leer N bits del bloque, dado que el bloque actual contiene los mismos N bits solo se le desde el flujo fuente. El método de compresión de mapeo directo 100 usa un espacio de trabajo de mapeo directo con métrica <N,K,1>. En esta disposición, solo se usa una ubicación o línea por dirección de memoria, lo cual permite que se almacene solo un valor. Esto hace trivial el reemplazo de valores fallados dado que no se necesitan ni una política ni un estado. Asimismo, dado que cada dirección de memoria tiene una ubicación para almacenar solo un valor, los códigos de ACIERTO representan la ocurrencia simple de un valor encontrado en la referencia de dirección de memoria actual, es decir, la ocurrencia del propio acierto. Con referencia ahora a la figura 5, el método 200 es una forma de método de compresión de CMC de conjunto asociativo del presente método de compresión, en donde las etapas similares a los métodos 10 y 100 se elevan en 100 y 200, respectivamente. Al igual que con el método 100, en la etapa 205, se inicializan el Bloque, la Línea y el Conjunto. Enseguida, se lee un bloque de datos del flujo de datos fuente. A diferencia del método de mapeo directo 100, hay más de una línea para búsqueda. Por lo tanto, son buscadas todas las líneas de un conjunto especificado (etapa 234) . Si el bloque no coincide con el contenido de ninguna línea, ocurre una falla y el bloque se escribe a caché (etapa 236) . Similarmente al método 100, si se encuentra el bloque, se escribe un valor de un bit indicando un acierto al flujo comprimido (etapa 250) . Sin embargo, dado que hay más de una línea por conjunto, durante la reconstrucción del flujo de datos no comprimido, no hay forma de conocer de qué línea debe recuperar el bloque el método de reconstrucción. Consecuentemente, un marcador de acierto no es suficiente y el método de reconstrucción necesita un número de línea en donde ocurre el acierto, lo cual pasa a la siguiente etapa. Después de que se escribe el marcador, el número de línea en donde ocurre el acierto se codifica y se escribe al flujo comprimido (etapa 252) . La codificación solo necesita ser suficiente para identificar la línea y, por lo tanto, puede ser tan simple como una longitud de código fija que consiste de L bits que contienen la representación binaria del número de línea (etapa 252) . Sin embargo, so ocurre una falla, la etapa 200 procede en una forma similar como la etapa 100, la cual incluye escribir un marcador de falla al flujo comprimido (etapa 240) y escribir un bloque de falla al flujo comprimido (etapa 242), y el valor del conjunto actual se prepara para la siguiente iteración (etapa 260) . En una implementación adicional específica del método 200, el método 200 puede incluir adicionalmente una política de reemplazo cuya ubicación debe usarse cuando se reemplaza un valor. Esto lo realiza internamente el método o función BuscarBloque_EscribirSiFalla ( ) (etapa 236). Las políticas de reemplazo típicas incluyen, en orden de mayor a menor preferencia: menos utilizada recientemente (LRU) , primero en entrar primero en salir (FIFO) o la más antigua utilizada, menos frecuentemente utilizada (LFU) , aleatoria, etc. Estos métodos asociados con estas políticas de reemplazo son invocadas dentro de los métodos LeerBloque ( ) , y BuscarBloque_EscribirSiFalla ( ) siempre que se acceda a un bloque por cualquier razón dentro del caché (etapas 230 y 236) . Con el fin de entender cómo trabaja una estrategia de reemplazo, la política de reemplazo menos utilizada recientemente se explica enseguida usando el siguiente ejemplo concreto. Considere una dirección de memoria con 4 ubicaciones y, por lo tanto, un campo de estado que contiene 4 contadores LRU asociados con cada una. Suponga que en cierto punto durante el proceso de compresión los contadores LRU contiene los valores 3, 0, 2, 1, respectivamente. Esto significa que la ubicación 0 es la ubicación más recientemente utilizada dado que su contador LRU asociado tiene el valor máximo 3, mientras que la ubicación 1 es la ubicación menos utilizada recientemente dado que su contador LRU asociado tiene el valor mínimo 0. Por lo tanto, cuando ocurre una falla, la ubicación 1 se seleccionará para reemplazo dado que su contador LRU es 0, indicando que es el menos utilizado recientemente. Ahora, suponga que ocurre un acierto en la ubicación 3. Los contadores LRU en este ejemplo se actualizan de la siguiente manera. Dado que la ubicación 3 es ahora la más recientemente utilizada, todos los contadores necesitan actualizarse correspondientemente para reflejar el nuevo cambio en el uso de la ubicación. Esto es el proceso genérico de actualización de los contadores LRU: el valor de contador LRU actual, asociado con la ubicación en donde ocurre el acierto, se lee como T. Enseguida, todos los contadores con valores mayores que T disminuyen de uno en uno. Finalmente, al contador LRU actual se le asigna el valor máximo, etiquetándolo entonces como la ubicación más recientemente utilizada. Por lo tanto, cuando ocurre un acierto en la ubicación 3, con los valores del contador LRU 3, 0, 2, 1, dichos contadores se actualizan como sigue: a T se le asigna 1, el valor del contador LRU de ubicación 3. Enseguida, todos los contadores con valores mayores que T=l disminuyen de uno en uno. Asi, los contadores LRU se transforman en 2 , 0, 1, 1. Finalmente, al contador LRU actual se le asigna el valor máximo 3. Por tanto, los contadores LRU se convierten ahora en 2, 0, 1, 3. Brevemente, la política de reemplazo LRU trabaja de tal manera que siempre habrá valores de contadores LRU diferentes, que representan la categoría de uso para cada ubicación . En una forma adicional alternativa, se puede usar un esquema de codificación de longitud para los códigos de acierto y falla asignados de tal forma que las ubicaciones inferiores, que regularmente se usan más, se representan usando códigos más cortos mientras que las ubicaciones superiores, utilizadas con menor frecuencia, se les asignan códigos más largos . Algunos de los esquemas de codificación de longitud disponible en la literatura pueden usarse para asignar código de acierto y falla. Por ejemplo, si el número de ubicaciones por dirección de memoria es pequeño, por ejemplo 2, 3 ó 4, entonces puede usarse Huffman para representar cada número de ubicación. Si el numero de ubicaciones en más grande, entonces los códigos de comenzar-avanzar-detenerse se preferirían dado que se generan de manera mucho más rápida que los esquemas Huffman. Por ejemplo, un esquema de codificación de longitud variable puede incluir dos pasadas. La primera pasada se usa para calcular la frecuencia de uso en cada ubicación y se usa una segunda pasada para asignar los códigos de longitud variable que representarán cada ubicación en tal forma que a las ubicaciones utilizadas más frecuentemente se les asignan códigos más cortos, mientras que a las ubicaciones utilizadas con menor frecuencia se les asignan códigos más largos. Por ejemplo, suponga que se usan dos ubicaciones por dirección de memoria. Consecuentemente, se realiza la primera pasada ejecutando el método de compresión con el fin de contar el porcentaje de fallas y el porcentaje de aciertos que ocurren en la ubicación 0 y en la ubicación 1. Por lo tanto, durante la primera pasada no se escribe ninguna salida al flujo comprimido . Después de que obtienen los porcentajes como pA, pB, y pC, en donde pA es el porcentaje de fallas, pB es el porcentaje de aciertos en la ubicación 0, y pC es el porcentaje de aciertos en la ubicación 1, entonces se crea un árbol de Huffman para pA, pB y pC, y se asignan códigos de Huffman para representar fallas (A) , aciertos en la ubicación 0 (B) , y aciertos en la ubicación 1 (C) , como se muestra en el árbol de Huffman de la figura 11. Si A<B<C, lo cual significa que pA<pB<pC, entonces A, B y C tendrán asignados los siguientes códigos de Huffman: 11 10 y 0. Adicionalmente , como una alternativa, en lugar de codificar un número de ubicación, se codifica más bien el valor del contador LRU, mantenido en el campo de estado, uno para cada ubicación. Los contadores LRU se usan para implementar la política de reemplazo LRU y representa una categoría de uso para cada ubicación de tal manera que valores más altos representan ubicaciones más recientemente utilizadas y viceversa. Por lo tanto, se asignan a valores de conteo LRU más altos códigos más cortos mientras que a los valores más bajos se asignan códigos más largos. El razonamiento tras la codificación del contador LRU asociado con la línea de caché, en lugar de codificar el propio número de línea de caché, es el siguiente: dado que las líneas que son utilizadas más recientemente tiene más probabilidad de obtener aciertos futuros que los usados menos recientemente, la categoría de uso de cada línea puede correlacionarse con la probabilidad de ocurrencia de aciertos en esa línea. Por tanto, bajo esta suposición el contador de línea con la categoría más alta tendrá una mayor probabilidad de obtener el siguiente acierto, seguido por el segundo de categoría más alta, y así sucesivamente hasta la categoría 0, que representa la línea con las probabilidades más bajas de tener un bloque coincidente. La esperanza es que esas líneas con mayor conteo LRU (más recientemente accedidas) producirán más aciertos que las líneas con menor conteo LRU. Si se satisface esta tendencia, la longitud de código promedio para representar aciertos disminuirá, mejorando así la compresión.
Los métodos de compresión 10, 100 y 200 pueden usar memoria de computadora como espacio de trabajo para implementar su memoria seudo caché con N bits usados como entrada para el valor de flujo actual, K bits usados como entrada para las direcciones de memoria, L bits usados para indicar la ubicaciones en donde se encuentran los valores en la referencia de dirección de memoria y un bit usado como salida para indicar si se obtiene un acierto o una falla. El uso de un código de longitud para representar el número de línea es ventajoso cuando todos los números de línea tiene igual distribución. Sin embargo, esta invariancia podría no ser deseable en la práctica. Si las líneas de caché pudieran mostrar una distribución no uniforme, la longitud de código promedio de aciertos y pérdidas podría reducirse más asignando códigos más cortos a las líneas que son evaluadas con más frecuencia. Cuando se selecciona un método de compresión para el cual hay más de una línea de caché por conjunto de caché, el uso de marcadores de un bit para representar aciertos pierde significancia. El problema de codificación necesita reestablecerse en términos de la ocurrencia de fallas y el número de lineas en donde ocurre dicho acierto. Por tanto, hay, en esencia (1+LINEAS) , símbolos para codificar: el código "1" representa una FALLA, y códigos de "LINEAS" representan las líneas de caché en donde ocurre cada ACIERTO. Una limitación es que las líneas de codificación por su posición en el conjunto, es decir, por su número de línea, no ofrece ganancias en términos de reducción de longitud de código si tienen poca correlación, es decir, si, presentan una distribución uniforme. Esto puede superarse si se usa en su lugar otro atributo relacionado con la líneas de caché, por ejemplo, usando el valor del contador LRU como se discutió anteriormente con respecto al método 20. Otra limitación es que se involucra más tiempo en codificar y decodificar aciertos y fallas. Sin embargo, este es el caso general para cualquier método que considere tanto codificación como modelado. Dicho excedente de tiempo puede reducirse usando una asignación estática de códigos de aciertos y fallas junto con la variación discutida anteriormente con el fin de forzar una distribución no uniforme de códigos de aciertos, y por lo tanto, aprovechar una longitud de esquema de codificación para reducir la longitud de código promedio mejorar la compresión.
Con referencia ahora en general a las figuras 6 y 7, el método de CMC completamente asociativo 300 está dirigido al escenario cuando K, el número de bits que representa 2K conjuntos, se reduce a su mínimo, es decir, cero bits. El resultado es un caché completamente asociativo con solo un conjunto en todo el caché. La figura 7 ilustra una disposición de caché completamente asociativo con métrica <N,0,2L>. Un efecto significativo del proceso de uso de memora caché interno implementado por el método 300 es que la dirección de mapeo se elimina esencialmente. Como resultado, el método de codee de CMC 300 solo necesita el bloque actual cuando se buscan bloques (etapa 334), se leen bloques (etapa 330) y se escriben bloques (etapas 340, 342 y 350) en el caché. La variable establecida es siempre cero. Debe notarse que el método 300, a diferencia de los métodos 100 y 200, no necesitan actualizar la variable en la última etapa del ciclo, es decir, después de las etapas 342, 352. A pesar de que el método de compresión asociativo competo 300 produce más aciertos que los métodos 100 y 200, el método 300 no produce una mayor relación de compresión. Esto se debe a dos razones. Primero, el número de líneas en el conjunto necesita ser suficientemente grande para acomodar bloques suficientes con el fin de lograr buenas relaciones de aciertos; y, segundo, incluso con un gran número de aciertos, una codificación de longitud fija no los aprovecharía completamente dado que cada línea de acierto codificada tiene la misma longitud en el flujo comprimido, finalmente tomando la misma longitud de un bloque de datos entrante, es decir, N bits, si se usan exactamente 2N líneas de caché por conjunto de, cachés. La última variación es, sin embargo, un método válido, con la siguiente descripción más detallada. En el método completamente asociativo 300, se usa un espacio de trabajo completamente asociativo con métrica <N, 0 , Líneas> . En esta disposición solo se usa una dirección de memoria con múltiples ubicaciones, permitiendo que se almacenen valores múltiples simultáneamente en la misma dirección de memoria. Esto introduce la complejidad adicional de codificar las ubicaciones en donde ocurre un acierto en el flujo comprimido de tal manera que el descompresor pueda reconstruir el flujo de datos original. Por lo tanto, en este caso se usan los códigos de ACIERTO para representar tales ubicaciones . En una forma adicional, el método completamente asociativo 300 puede modificarse para mejorar el desempeño eliminando del todo la necesidad por códigos de FALLA al usar por lo menos 2N ubicaciones por dirección de memoria, e inicializando cada ubicación a los valores específicos 0, 1, 2, 2N-2, 2N-1. Por lo tanto, dado que los valores entrantes son de N bits de largo, siempre habrá uno de 2N valores posibles que coincida con algún valor de las ubicaciones previamente inicializadas en el espacio de trabajo. Nuevamente, los códigos de ACIERTO se usan en este caso para representar tales ubicaciones. La métrica específica utilizada para el espacio de trabajo en este caso es <N, 0 , Líneas> , en donde las líneas son igual a 2 a la potencia de N, es decir, <N, 0 , Líneas>=<N, 0 , 2N> . Con referencia ahora a la figura 8, el método de compresión genérica 400 incorpora los métodos 100, 200, y 300 los cuales serán fácilmente evidentes con base en la presente descripción. El método 400 incluye etapas de los métodos anteriores 100, 200 y 300, pero elevados en 100-300, respectivamente . En el método 400, los bloques de datos son recuperados del flujo fuente (etapa 430) , almacenados en memoria caché si no son encontrados (etapas 434, 436), se codifican con aciertos (etapas 450, 452) y se codifican con fallas (etapas 440, 442) de manera correspondiente. Cuando se agregan más líneas al esquema de conjunto asociativo (etapa 439) , entonces las líneas de acierto deben codificarse también (etapa 452) . Cuando haya solo un conjunto de esquema asociativo (etapa 455) , entonces la dirección establecida no es relevante y, por lo tanto, no se realizan las etapas 460 y 462. Las diferencias principales con los métodos de caché específicos se destacan en gris y negritas en la figura 8. Otra diferencia entre el método 400 y los métodos 10, 100, 200 y 300 es que el marcador de aciertos se combina co la codificación de la líneas de acierto y la propia codificación se deja abierta tanto para aciertos como para fallas. Esto da lugar a una infinidad de posibilidades de codificación cuyos esquemas de longitud variable tiene probabilidad de ser más efectivos. En contraste, para los casos de conjunto asociativo y completamente asociativo, es decir, los métodos 200 y 300, la codificación se especifica explícitamente por un esquema de longitud que consiste de L bits que contienen la representación binaria de la línea. En el método 4500, los aciertos y fallas se codifican o asignan en la misma manera en la que se asignan en el método 200. Por ejemplo, los aciertos y fallas son codificados en tal forma que las ubicaciones inferiores, que son la que se utilizan más regularmente, están representadas por códigos más cortos, y las ubicaciones superiores, las cuales se utilizan con menos frecuencia, están representadas por códigos más largos . Los códigos de longitud variable para los códigos de ACIERTO representan la ubicación en la referencia de dirección de memoria en donde se encontró el valor de símbolo actual, es decir, las ubicaciones en donde ocurrieron aciertos, junto con una política de reemplazo LRU, para decidir cuál valor debe representarse cuando ocurre un desajuste (falla) . El método de compresión 400 codifica los códigos de longitud variable para los aciertos. Similarmente , un método de reconstrucción decodifica tales códigos. Esto es aplicable solo cuando cada dirección de memoria tiene dos o mas ubicaciones, es decir, cuando puede almacenar más de un valor simultáneamente. Por lo tanto, es aplicable a configuraciones de conjunto asociativo con métrica específica <N, K, Líneas> en donde Líneas es estrictamente mayor que uno.
La memoria de computadora utilizada como espacio de trabajo se implementa como una memoria seudo caché con N bits como entrada para al valor de símbolo actual, K bits usados como entrada para la referencia de dirección de memoria, L bits utilizados como salida para indicar las ubicaciones en donde se encuentran los valores en la referencia de dirección de memoria, y un bit utilizado como salida para indicar si se ha obtenido un acierto o falla. La memoria seudo caché se usa para implementar el espacio de trabajo de los métodos de compresión 10, 100, 200, 300 y 400. El término memoria seudo caché se usa en este contexto para reforzar la semejanza entre una memoria caché de arquitectura real, como se utiliza en una arquitectura de computadora, y el espacio de trabajo interno usado por todos los métodos de compresión y reconstrucción que comprende la familia de compresión de mapeo de caché (CMC) . En particular, el seudo caché se asemeja al mecanismo de almacenamiento en caché de datos internos que ocurre entre la unidad de procesamiento central (CPU, por sus siglas en inglés) de una computadora y su memoria principal, pero reemplazando le CPU para el flujo de entrada, y la memoria principal para el flujo de salida. Consecuentemente, las propiedades de localidad de datos para cada caché se explotan de manera diferente. La memoria de seudo caché explota los aspectos espacial y temporal de dichos datos en un intento por producir compresión, mientras que el caché arquitectónico intenta acelerar más bien el acceso a la memoria. La memoria seudo caché se describe en términos de las entadas y salidas específicas que el espacio de trabajo implementado necesitaría tener con el fin de llevar a cabo los métodos de compresión y reconstrucción, respectivamente . Con referencia a la figura 9, en general el método de reconstrucción de CMC 500 genera una copia exacta de los datos fuente originales a partir de un flujo de datos comprimido que se ha generado previamente usando el presente método de compresión. El método 500 incorpora aspectos similares a los que los métodos de compresión 10, 100, 200, 300 y 400, tal como la misma metodología de historial de almacenamiento en memoria caché utilizada durante la compresión, el cual es replicado durante el método de reconstrucción 500. Con referencia ahora específicamente a la figura 9, las varias variables, a decir, Bloque, Línea, Conjunto y Señal, se inicializan (etapa 505) . Durante cada ciclo o iteración del método 500, se extrae un bloque de datos y se escribe al flujo reconstruido o no comprimido. El bloque proviene ya sea del flujo comprimido, su se decodifica un código de falla, o del caché, si en su lugar se decodifica una línea de acierto. Si se detecta un marcador de falla, el bloque es leído primero a partir del flujo comprimido y se almacena en la memoria caché. De otra manera, la línea de falla decodificada se usa como un índice para recuperar el bloque directamente del conjunto actual en el caché. Específicamente con referencia a la figura 9, se declaran (etapa 505) las variables locales para el bloque, la línea, el conjunto y la señal (que contiene los códigos temporales de acierto y falla) actuales. El conjunto de inicializa primero a cero. Enseguida, la señal es leída y decodificada en donde la señal debe contener ya sea un marcador de falla o una línea de acierto (etapa 530) . El flujo comprimido es leído completamente hasta el final del flujo (etapa 532) . Si se detecta un marcador de falla (etapa 538) , entonces le sigue un bloque de falla. Por lo tanto, la falla es leída enseguida del flujo fuente (etapa 540) y se escribe a la línea LRU actual del caché (etapa 542) . De ora manera, el bloque es leído directamente del caché en la línea de acierto decodificada (etapa 550) . Enseguida, el bloque obtenido ya sea de la etapa 542 ó la etapa 550 se escribe al flujo de datos reconstruido o no comprimido (etapa 555) . El conjunto actual se actualiza, si esto es aplicable (etapa 560) y el método 500 se reanuda en la etapa 530. En una forma adicional, los códigos/valores de ACIERTO y FALLA se agrupan en señales, bits de control utilizados para guiar el método de descompresión durante la reconstrucción de los datos. Las señales que son múltiplos de N bits, de manera que los valores leídos de la fuente o flujo comprimido permanecen alineados en múltiplos de N bits cuando se copian al flujo comprimido o no comprimido. Cuando N es de 8 bits de largo, es decir, un byte de carácter, los códigos de acierto y falla se agrupan en señales de n bytes, en donde n es un número natural del conjunto {1,2,3,...}, de tal manera que los valores leídos de la fuente o flujo comprimido permanecen alineados en bytes cuando se copian al flujo comprimido o no comprimido, respectivamente, como se muestra en los datos de salida comprimidos de la figura 12. Como resultado, se realizará una optimización adicional en el flujo de datos comprimido que simplifica las operaciones de entrada/salida en bits individuales rearreglando, en tiempo real, la forma en la que los datos comprimidos están formateados . Esto combina entre sí todos los códigos de ACIERTO y FALLA en señales de tamaño fijo. Cada señal está hecha de múltiplos de N, la longitud en bits de cada valor entrante leído del flujo de datos fuente . Típicamente, N está hecho de 8 bits de largo, es decir, cada valor entrante es un byte de carácter, lo cual significa que cada señal es un múltiplo de un byte, o de n bytes de largo, en donde n es un número natural del conjunto {1,2,3,...}. Esta optimización tiene el efecto de alinear señales (códigos de acierto/falla) y valores de flujo fuente en límites de N bits, simplificando las operaciones de entrada/salida en flujos de datos tanto comprimidos como no comprimidos. Esto mejora la velocidad global de los presentes métodos de compresión y reconstrucción. Ahora estará claro que el presente método de compresión ofrece características y ventajas no encontradas en métodos de compresión anteriores. El presente codee de CMC es universal, que procesa bloques de datos recibidos de un flujo de entrada muy similar para cada fuente e independientemente de las características de los datos de entrada. Una característica adicional del presente método es que es simétrico Esto significa que tanto el método de compresión de CMC como el método de reconstrucción realizan esencialmente el mismo proceso en términos de esfuerzo relativo, complejidad de tiempo y espacio, etc. Tal comportamiento simétrico se hace más evidente cuando se analiza la complejidad tempo/espacio del codee de CMC. Además, el presente codee de CMC trabaja en moto de "flujo exclusivo". Brevemente, esto significa que cada símbolo recibido del flujo de entrada se procesa "uno a la vez" y, de manera más importante, que se producirá una salida inmediatamente después de procesar dicho símbolo. Esto difiere de la mayoría de los métodos de compresión anteriores dado que, en general, trabajan ya sea en el modo de flujo regular o en modo por bloques. En el modo regular de flujo, se procesan símbolos uno a la vez, pero su salida no se produce inmediatamente; más bien se retrasa hasta que se ha acumulado internamente un número determinado de símbolos de tal manera que puedan procesarse. En el modo por bloques, el compresor lee un número fijo de símbolos, usualmente unos pocos kilobytes, del flujo de datos fuente, los procesa y produce un bloque comprimido equivalente . Algunas ventajas se derivan del modo de "flujo exclusivo" implementado por el presente método. Por ejemplo, en comunicaciones digitales podría requerirse para un proceso de comunicación dado mantener un flujo intermitente de datos desde el transmisor al receptor. Si los datos no se envían desde el transmisor a intervalos regulares, el receptor podría perder la sincronización de datos (sync) con el transmisor. Si el proceso de comunicación se basa en una tecnología de compresión que trabaja ya sea en modo reglar de flujo o modo por bloques, entonces el receptor podría perder la sincronización de datos durante intervalos cuando el transmisión está inactivo, mientras el compresor está acumulando y procesando internamente símbolos de entrada. En contraste, si se usan en su lugar los presentes métodos asociados con la tecnología de CMC, no hay posibilidad de pérdida de sincronización de datos dado que los métodos producirán inmediatamente una salida equivalente por cada símbolo de entrada recibido. Esto es solo un ejemplo que destaca los beneficios del modo de flujo exclusivo versus el modo de flujo regular o por bloques, para el dominio particular de comunicaciones de datos. Pueden obtenerse ventajas similares del modo de flujo exclusivo en otros dominios en donde se requiere respuesta en tiempo real. Por ejemplo, considere una aplicación de conversación simple con la cual un usuario ingresa un carácter, el carácter es transmitido a través de la Internet (o algún otro canal) y es recibido finalmente por el receptor quien espera ver el carácter en la ventana de conversación. En el modo ya sea de flujo o en bloques, dicho carácter podría no visualizarse del todo hasta que el compresor (en el extremo transmisor) no libere el carácter, dad que primero deben recibirse unos pocos caracteres con el fin de que el compresor comience a procesarlos. En contraste, el modo de flujo exclusivo del compresor de CMC garantiza que el carácter comprimido será liberado por el compresor inmediatamente y enviado a través del canal, después de lo cual el descompresor reconstruirá el carácter original y lo liberará a la aplicación de conversación para mostrarlo. El comportamiento simétrico del codee de CMC también tiene una ventaja práctica, la cual es "compartir" los recursos más internos utilizados por el codee. Esto es debido que el se realiza el mismo método pero en direcciones opuestas. Por lo tanto, un modo de operación puede usar los recursos compartidos mientras el otro está inactivo. Esto minimiza costos tanto de operación como de diseño. Un aspecto del esquema de CMC completamente asociativo es que al forzar cierta métrica del caché para cumplir con cierta condición, la probabilidad de falla puede hacerse literalmente de 0%. Es decir, siempre habrá un bloque en el caché que coincida con el bloque actual leído del flujo fuente. Por lo tanto, si siempre se producen aciertos, no sería necesario marcar aciertos o fallas del todo, y la salida comprimida solo consistiría de líneas de aciertos codificadas. Si se acopla con un esquema LRU, y si los códigos más cortos se asignan a las líneas utilizadas más recientemente, y finalmente se codifican en el flujo de salida, entonces el método resultante degenera en una técnica de codificación llamada Mover al Frente. El método de Mover al Frente puede considerarse una variante del codee de CMC completamente asociativo y puede implementarse fácilmente usando la infraestructura de espacio de trabajo existente, la cual puede modelarse a través de un tipo de datos abstractos (ADT, por sus siglas en inglés) de caché. Para ilustrar este proceso, suponga que se crea un caché completamente asociativo con métrica <N,0,2N>. Es decir, LINEAS (el número de líneas de caché) es igual a 2N, el número todos los bloques de datos distintos posibles (por ejemplo, si N=8, habrán 256 líneas en el conjunto) . Si todas las líneas de caché se inicializan para contener un bloque de datos distinto, de tal manera que en las líneas 0 a 2N existe un bloque en cada una con valores de 0 a 2 , respectivamente, entonces siempre que se lea un bloque del flujo fuente, siempre se producirán aciertos porque siempre habrá un bloque coincidente en alguna línea en el caché. Desde un punto de vista operacional, el codee de CMC "cambia" la funcionalidad de acuerdo con las condiciones de límite de la métrica del caché. La figura 10 es un diagrama que muestra un aspecto del presente método. Al disminuir el número de líneas de caché, el compresor esencialmente funciona solo almacenando en caché sin involucrar codificación - los bloques de datos se mapean en un caché de mapeo directo, en donde no se codifican números de línea. Similarmente , al reducirse el número de conjuntos a uno, el presente método de compresión se convierte en un codificador completo .el proceso de almacenamiento en memoria caché pierde significancia dado que es más importante producir códigos óptimos que producir aciertos de caché. Lo contrario ocurre cuado aumentan tanto el número de conjunto como de líneas, en donde el almacenamiento en memoria caché y la codificación se hacen ambas cruciales en el proceso de compresión, y compartes relevancia relativa para producir relaciones de alta compresión. Los métodos de compresión 10, 100 200, 300, 400 y el método de reconstrucción 500 pueden realizarse como un mecanismo automático de estado finito e implementarse como un software o artefacto de hardware, incluyendo optimizaciones de tamaño/velocidad que explotan el paralelismo inherente del método usando esquemas de memoria asociativa o inteligente con lo cual se comparan en paralelo múltiples ubicaciones de una dirección de memoria dada, es decir, simultáneamente o concurrentemente. En otras palabras, la implementación de cualquiera de los presentes métodos de compresión y reconstrucción como un mecanismo automático de estado finito pueden realizarse como una máquina virtual que consiste en un número finito de estados, cada estado representando una etapa del proceso de compresión y de reconstrucción, respectivamente. Esto es aplicable a todos los métodos de compresión y reconstrucción propuestos en la presente descripción. Esto incluye el caso particular en donde todos los valores almacenados concurrentemente en las muchas ubicaciones de una dirección de memoria son comparados en paralelo con el valor de símbolo actual usando circuitos de hardware especiales, implementando así el comportamiento de una memoria asociativa o inteligente con palabras de datos que pueden dirigirse a contenido, en donde cada palabra de dato representa un valor de símbolo previamente almacenado del flujo de entrada. Tales versiones optimizadas paralelizadas solo son posible con configuraciones de espacio de trabajo de conjunto asociativo con métrica especifica <N, K, Líneas> , en donde Líneas es mayor que uno. Este proceso puede realizarse por medio de circuitos de hardware especiales que comparan cada bit de cada ubicación en la referencia de dirección de memoria para cada bit del valor de símbolo actual simultáneamente, produciendo la ubicación coincidente en cuando mucho N comparaciones, en donde N es el tamaño en bits del valor de símbolo actual. Si no se usa memoria asociativa, entonces el valor en cada ubicación necesita compararse individualmente con el valor de símbolo actual, resultando en comparaciones de "Líneas" por "N" , en donde Líneas es el número total de ubicaciones para cada dirección de memoria. Aunque la invención se ha descrito en considerable detalle con respecto a modalidades preferidas, se apreciará que la invención es susceptible a numerosas modificaciones y variaciones, evidentes para aquellos con experiencia en la técnica, sin alejarse del espíritu y alcance de las reivindicaciones . Se hace constar que con relación a esta fecha, el mejor método conocido por la solicitante para llevar a la práctica la citada invención, es el que resulta claro de la presente descripción de la invención.

Claims (38)

  1. REIVINDICACIONES Habiéndose descrito la invención como antecede, se reclama como propiedad lo contenido en las siguientes reivindicaciones : 1. Un método implementado en computadora para comprimir datos electrónicos de un flujo de datos fuente que comprende una cadena de valores, usando una o más direcciones de memoria de computadora distintas como espacio de trabajo, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente, caracterizado porque comprende: (a) leer K bits desde el flujo electrónico de datos fuente, que están inmediatamente antes de un punto de lectura actual en el flujo fuente, como una referencia de dirección de memoria, si K es mayor que cero; (b) leer N bits desde el flujo fuente como un valor de símbolo actual; (c) escribir el valor de símbolo actual para reemplazar uno de los valores en la referencia de dirección de memoria de la memoria de computadora si el valor de símbolo actual no coincide con ninguno de los valores en la referencia de dirección de memoria, y escribir un código/valor de FALLA seguido por el valor de símbolo actual a un flujo electrónico de datos comprimido; y (d) escribir un código de ACIERTO, que representa la ubicación en la memoria de computadora en la referencia de dirección de memoria en donde se encontró el valor, al flujo de datos comprimido si el valor de símbolo actual coincide con cualquiera de los valores en la memoria de computadora en la referencia de dirección de memoria.
  2. 2. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque adicionalmente comprende repetir de (a) a (d) para cada valor en el flujo de datos fuente, después de la inicialización de todos los valores en cada dirección de memoria, en donde en (a) , los bits más a la izquierda de la referencia de dirección de memoria son iniciados apropiadamente si no están disponibles para leer desde el flujo de datos fuente.
  3. 3. El método implementado en computadora de conformidad con la reivindicación 2, caracterizado porque en (a), los K bits leídos son convertidos en menos o igual número de bits para producir una palabra resultante la cual se utiliza como la referencia de dirección de memoria.
  4. 4. El método implementado en computadora de conformidad con la reivindicación 3, caracterizado porque cada dirección de memoria contiene un campo de estado, utilizado para mantenimiento para llevar un control del uso de la ubicación dentro de la dirección de memoria, y actualizado en (c) o (d) después de leer/escribir un valor en la dirección de memoria.
  5. 5. El método implementado en computadora de conformidad con la reivindicación 4, caracterizado porque el campo de estado se utiliza junto con una política de reemplazo para decidir cuál ubicación debe usarse cuando se reemplaza un valor .
  6. 6. El método implementado en computadora de conformidad con la reivindicación 5, caracterizado porque la política de reemplazo se selecciona del grupo que consiste de menos utilizada recientemente, primero en entrar primero en salir, o más antigua utilizada, menos frecuentemente utilizada, y aleatoria.
  7. 7. El método implementado en computadora de conformidad con la reivindicación 3, caracterizado porque cada dirección de memoria utilizada como espacio de trabajo tiene solo una ubicación que contiene solo un valor; y en donde en (d) , el código ACIERTO indica que el valor de símbolo actual coincide con el encontrado en la referencia de dirección de memoria.
  8. 8. El método implementado en computadora de conformidad con la reivindicación 5, caracterizado porque una sola dirección de memoria, que tiene muchas ubicaciones cada una conteniendo un valor distinto, se usa como espacio de trabajo; y en donde en (a) , no se lee ningún bit del flujo fuente dado que K es cero, y en donde existen solo una dirección de memoria, y la referencia de dirección de memoria es cero.
  9. 9. El método implementado en computadora de conformidad con la reivindicación 8, caracterizado porque la dirección de memoria simple tiene 2N ubicaciones previamente inicializadas con valores distintos; y en (c) , nunca se adiciona ningún código de FALLA o valor de símbolo actual al flujo de datos comprimido dado que tal valor de símbolo actual siempre coincide con cualquiera de los valores previamente inicializados en esas ubicaciones.
  10. 10. El método implementado en computadora de conformidad con la reivindicación 5, caracterizado porque en (d) se usa un esquema de codificación de longitud variable para los códigos/valores de ACIERTO y FALLA, asignados de tal manera que las ubicaciones inferiores, que son las más frecuentemente utilizadas, se representan usando códigos más cortos, mientras que a las ubicaciones superiores, utilizadas con menor frecuencia, se les asignan códigos más largos.
  11. 11. El método implementado en computadora de conformidad con la reivindicación 10, caracterizado porque se usan dos pasadas, la primera para calcular la frecuencia de uso de cada ubicación y la segunda pasada para asignar los códigos de longitud variable que representarían a cada ubicación, de tal manera que a las ubicaciones más frecuentemente utilizadas se les asignan códigos más cortos mientras que a las ubicaciones usadas con menor frecuencia se les asignan códigos más largos .
  12. 12. El método implementado en computadora de conformidad con la reivindicación 5, caracterizado porque un valor del contador menos utilizado recientemente se mantiene en el campo de estado, uno para cada ubicación que es codificada; el contador menos utilizad recientemente se usa para implementar la política de reemplazo menos utilizada recientemente y para representar una categoría de uso para cada ubicación de tal manera que los valores más altos representan ubicaciones más utilizadas recientemente y viceversa; con lo cual a los valores más altos de conteo menos utilizados recientemente se les asignan códigos más cortos mientras que a valores menores se les asignan códigos más largos .
  13. 13. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque la memoria de computadora utilizada como espacio de trabajo se implementa como una memoria de seudo caché con N bits usados como entrada para el valor de símbolo actual, K bits utilizados como entrada para la referencia de dirección de memoria, L bits utilizados como salida para indicar las ubicaciones en donde se encuentran valores en la referencia de dirección de memoria, y un bit utilizado como salida para indicar si se obtiene un acierto o una falla.
  14. 14. Un método implementado en computadora para reconstruir un flujo de datos fuente no comprimidos a partir de datos comprimidos que comprenden por o menos algunos de los datos fuente junto con códigos de compresión que comprende códigos de FALLA y ACIERTO, utilizando una o más direcciones de memoria de computadora distintas como espacio de trabajo, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente, caracterizado porque comprende: (a) leer K bits del flujo de datos no comprimido, que están inmediatamente antes del punto de inserción actual en el flujo no comprimido, como una referencia de dirección de memoria, si K es mayor que cero; (b) leer un valor de código del flujo de datos comprimido, representando ese valor de código ya sea una ubicación codificada como FALLA o una ocurrencia de ACIERTO; (c) si el valor es un código FALLA, escribir N bits del flujo comprimido como el valor de símbolo actual, escribir dicho valor de símbolo actual para reemplazar uno de los valores en la memoria de computadora en la referencia de dirección de memoria obtenida en (a) , y escribir el valor de símbolo actual al flujo no comprimido; y (d) si el valor es un código ACIERTO, leer N bits desde la ubicación dada por el código ACIERTO decodificado en la memoria de computadora en la referencia de dirección de memoria obtenida en (a), como el valor de símbolo actual, y escribir el valor de símbolo actual al flujo no comprimido.
  15. 15. El método implementado en computadora de conformidad con la reivindicación 14, caracterizado porque adicionalmente comprende repetir de (a) a (d) para cada valor en el flujo de datos comprimido, después de la inicialización apropiada de todos los valores en cada dirección de memoria, en donde en (a) , los bits más a la izquierda de la referencia de dirección de memoria son iniciados apropiadamente si no están disponibles para leer desde el flujo de datos fuente.
  16. 16. El método implementado en computadora de conformidad con la reivindicación 15, caracterizado porque en (a), los K bits leídos/ingresados son convertidos en menos/igual número de bits, y la palabra resultante se utiliza como la referencia de dirección de memoria.
  17. 17. El método implementado en computadora de conformidad con la reivindicación 16, caracterizado porque cada dirección de memoria contiene un campo de estado, utilizado para mantenimiento para llevar un control del uso de la ubicación dentro de la dirección de memoria, y actualizado en (c) o (d) después de leer/escribir un valor en la dirección de memoria.
  18. 18. El método implementado en computadora de conformidad con la reivindicación 17, caracterizado porque el campo de estado se utiliza junto con una política de reemplazo para decidir cuál ubicación debe usarse cuando se reemplaza un valor .
  19. 19. El método implementado en computadora de conformidad con la reivindicación 18, caracterizado porque la política de reemplazo se selecciona del grupo que consiste de menos utilizada recientemente, primero en entrar primero en salir, o más antigua utilizada, menos frecuentemente utilizada, y aleatoria .
  20. 20. El método implementado en computadora de conformidad con la reivindicación 16, caracterizado porque cada dirección de memoria utilizada como espacio de trabajo tiene solo una ubicación que contiene solo un valor; y en donde en (d) , el código ACIERTO indica que el valor de símbolo actual coincide con el encontrado en la referencia de dirección de memoria.
  21. 21. El método implementado en computadora de conformidad con la reivindicación 18, caracterizado porque una sola dirección de memoria, que tiene muchas ubicaciones cada una conteniendo un valor distinto, se usa como espacio de trabajo; y en donde en (a) , no se lee ningún bit del flujo comprimido dado que K es cero, con lo cual existe solo una dirección de memoria, y la referencia de dirección de memoria es cero.
  22. 22. El método implementado en computadora de conformidad con la reivindicación 21, caracterizado porque la dirección de memoria simple tiene 2N ubicaciones previamente inicializadas con valores distintos; y en (c) , nunca se lee ningún código de FALLA o valor de símbolo actual ni aparece en el flujo de datos comprimido dado que cualquier valor de símbolo actual siempre puede encontrarse en alguna ubicación previamente inicializada .
  23. 23. El método implementado en computadora de conformidad con la reivindicación 18, caracterizado porque en (d) se usa un esquema de codificación de longitud variable en los códigos/valores de ACIERTO y FALLA., que son leídos del flujo comprimido .
  24. 24. El método implementado en computadora de conformidad con la reivindicación 23, caracterizado porque cada código FALLA decodificado no representa una ubicación por si mismo sino un valor de contador menos usado recientemente asociado con la ubicación que resulta en un acierto para la dirección de memoria dada; caracterizado porque adicionalmente comprende : (a) buscar la ubicación asociada con el valor de contador menos utilizado recientemente; (b) leer de esa ubicación, obtenida en (a) , el valor de símbolo actual; en donde los contadores menos utilizados recientemente se mantienen en el campo de estado y se usan para implementar una política de reemplazo menos utilizada recientemente y representa una categoría de uso para cada ubicación.
  25. 25. El método implementado en computadora de conformidad con la reivindicación 14, caracterizado porque la memoria de computadora utilizada como espacio de trabajo se implementa como una memoria de seudo caché con N bits usados como entrada para el valor de símbolo actual, K bits utilizados como entrada para la referencia de dirección de memoria, L bits utilizados como entrada para indicar la ubicación en la referencia de dirección de memoria de donde el valor de símbolo actual necesita ser leído, y N bits para sacar ese valor de símbolo actual.
  26. 26. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque los códigos FALLA y ACIERTO se agrupan en señales de n bytes .
  27. 27. El método implementado en computadora de conformidad con la reivindicación 26, caracterizado porque n es una potencia de 2 , de tal manera que los valores del flujo fuente o del flujo comprimido se mantienen alineados en bytes cuando son copiados al flujo comprimido.
  28. 28. El método implementado en computadora de conformidad con la reivindicación 14, caracterizado porque los códigos FALLA y ACIERTO se agrupan en señales de n bytes.
  29. 29. El método implementado en computadora de conformidad con la reivindicación 28, caracterizado porque n es una potencia de 2 , de tal manera que los valores del flujo fuente o del flujo comprimido se mantienen alineados en bytes cuando son copiados al flujo comprimido.
  30. 30. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque se implementa como un mecanismo automático de estad finito como un software o artefacto de hardware.
  31. 31. El método implementado en computadora de conformidad con la reivindicación 24, caracterizado porque se implementa como un mecanismo automático de estad finito como un software o artefacto de hardware.
  32. 32. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque los códigos FALLA y ACIERTO se agrupan en señales que son múltiplos de N bits de tal manera que los valores leídos del flujo fuente permanecen alineados en múltiples N bits copiados al flujo comprimido .
  33. 33. El método implementado en computadora de conformidad con la reivindicación 32, caracterizado porque N es de 8 bits de largo y en donde los códigos de falla y acierto se agrupan en señales de n bytes, en donde n es un número natural del conjunto, de tal manera que los valores del flujo fuente o comprimido permanecen alineados en bytes cuando se copian al flujo comprimido.
  34. 34. El método implementado en computadora de conformidad con la reivindicación 14, caracterizado porque los códigos/valores FALLA y ACIERTO se agrupan en señales que con múltiplos de N bits, de tal manera que los valores leídos del flujo fuente o comprimido permanecen alineados en múltiplos de N bits cuando se copian al flujo no comprimido.
  35. 35. El método implementado en computadora de conformidad con la reivindicación 34, caracterizado porque N es de 8 bits de largo y en donde los códigos de falla y acierto se agrupan en señales de n bytes, en donde n es un número natural del conjunto, de tal manera que los valores leídos del flujo fuente o comprimido permanecen alineados en bytes cuando se copian al flujo no comprimido.
  36. 36. El método implementado en computadora de conformidad con la reivindicación 1, caracterizado porque se implementan esquemas de memoria asociativa, con lo cual se comparan múltiples ubicaciones de una dirección de memoria dada en paralelo o simultáneamente.
  37. 37. El método implementado en computadora de conformidad con la reivindicación 14, caracterizado porque se implementan esquemas de memoria asociativa, con lo cual se comparan múltiples ubicaciones de una dirección de memoria dada en paralelo o simultáneamente.
  38. 38. Un sistema para comprimir datos electrónicos de un flujo fuente de datos que comprende una cadena de valores, usando una o más direcciones de memoria de computadora distintas como espacio de trabajo, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente, caracterizado porque comprende : una memoria de computadora que tiene una o más direcciones de memoria de computadora distintas, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente; y un procesador para: (a) leer K bits desde el flujo electrónico de datos fuente, que están inmediatamente antes de un punto de lectura actual en el flujo fuente, como una referencia de dirección de memoria en la memoria de computadora, si K es mayor que cero; (b) leer N bits desde el flujo fuente como un valor de símbolo actual; (c) escribir el valor de símbolo actual para reemplazar uno de los valores en la referencia de dirección de memoria de la memoria de computadora si el valor de símbolo actual no coincide con ninguno de los valores en la referencia de dirección de memoria, y escribir un código/valor de FALLA seguido por el valor de símbolo actual a un flujo electrónico de datos comprimido; y (d) escribir un código de ACIERTO, que representa la ubicación en la memoria de computadora en la referencia de dirección de memoria en donde se encontró el valor, al flujo de datos comprimido si el valor de símbolo actual coincide con cualquiera de los valores en la memoria de computadora en la referencia de dirección de memoria. 38. El sistema de conformidad con la reivindicación 38, caracterizado porque cada dirección de memoria contiene un campo de estado, utilizado para mantenimiento para llevar un control del uso de la ubicación dentro de la dirección de memoria, y actualizado en (c) o (d) después de leer/escribir un valor en la dirección de memoria. 40. El sistema de conformidad con la reivindicación 38, caracterizado porque cada dirección de memoria utilizada como espacio de trabajo tiene solo una ubicación que contiene solo un valor; y en donde en (d) , el código FALLA indica que el valor de símbolo actual coincide con el encontrado en la referencia de dirección de memoria. 41. El sistema de conformidad con la reivindicación 38, caracterizado porque una sola dirección de memoria, que tiene muchas ubicaciones cada una conteniendo un valor distinto, se usa como espacio de trabajo; y en donde en (a) , no se lee ningún bit del flujo fuente dado que K es cero, y en donde solo existe una dirección de memoria, y la referencia de dirección de memoria es cero. 42. El sistema de conformidad con la reivindicación 38, caracterizado porque la memoria de computadora utilizada como espacio de trabajo se implementa como una memoria de seudo caché con N bits usados como entrada para el valor de símbolo actual, K bits utilizados como entrada para la referencia de dirección de memoria, L bits usados como salida para indicar las ubicaciones en donde se encuentran valores en la referencia de dirección de memoria, y un bit utilizado como salida para indicar si se obtiene un acierto o una falla. 43. Un sistema para reconstruir un flujo electrónico de datos fuente no comprimido a partir de datos electrónicos comprimidos que comprende por lo menos los datos fuente junto con códigos de compresión que comprenden códigos FALLA y ACIERTO, caracterizado porque comprende: una memoria de computadora que tiene una o más direcciones de memoria de computadora distintas, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente; y un procesador para: (a) leer K bits del flujo de datos no comprimido, que están inmediatamente antes del punto de inserción actual en el flujo electrónico no comprimido, como una referencia de dirección de memoria de la memoria de computadora, si K es mayor que cero; (b) leer un valor de código del flujo electrónico de datos comprimido, representando ese valor de código ya sea una ubicación codificada como FALLA o una ocurrencia de ACIERTO; (c) si el valor es un código FALLA, escribir N bits del flujo comprimido como el valor de símbolo actual, escribir dicho valor de símbolo actual para reemplazar uno de los valores en la memoria de computadora en la referencia de dirección de memoria obtenida en (a) , y escribir el valor de símbolo actual al flujo no comprimido; y (d) si el valor es un código ACIERTO, leer N bits desde la ubicación dada por el código ACIERTO decodificado en la memoria de computadora en la referencia de dirección de memoria obtenida en (a), como el valor de símbolo actual, y escribir el valor de símbolo actual al flujo no comprimido. 44. El sistema de conformidad con la reivindicación 43 caracterizado porque cada dirección de memoria contiene un campo de estado, utilizado para mantenimiento para llevar un control del uso de la ubicación dentro de la dirección de memoria, y actualizado en (c) o (d) después de leer/escribir un valor en la dirección de memoria. 45. El sistema de conformidad con la reivindicación 43 caracterizado porque cada dirección de memoria utilizada como espacio de trabajo tiene solo una ubicación que contiene solo un valor; y en donde en (d) , el código ACIERTO indica que el valor de símbolo actual coincide con el encontrado en la referencia de dirección de memoria. 46. El sistema de conformidad con la reivindicación 43, caracterizado porque una sola dirección de memoria, que tiene muchas ubicaciones cada una conteniendo un valor distinto, se usa como espacio de trabajo; y en donde en (a) , no se lee ningún bit del flujo comprimido dado que K es cero, con lo cual existe solo una dirección de memoria, y la referencia de dirección de memoria es cero. 47. El sistema de conformidad con la reivindicación 43, caracterizado porque la dirección de memoria simple tiene 2N ubicaciones previamente inicializadas con valores distintos; y en (c) , nunca se lee ningún código de FALLA o valor de símbolo actual ni aparece en el flujo de datos comprimido dado que cualquier valor de símbolo actual siempre puede encontrarse en alguna ubicación previamente inicializada . 48. El sistema de conformidad con la reivindicación 43, caracterizado porque la memoria de computadora utilizada como espacio de trabajo se implementa como una memoria de seudo caché con N bits usados como entrada para el valor de símbolo actual, K bits utilizados como entrada para la referencia de dirección de memoria, L bits utilizados como entrada para indicar la ubicación en la referencia de dirección de memoria de donde el valor de símbolo actual necesita ser leído, y N bits para sacar ese valor de símbolo actual. RESUMEN DE LA INVENCIÓN Se proporciona un método para comprimir datos de un flujo fuente de datos que comprende una cadena de valores que utiliza una o más direcciones de memoria de computadora distintas como espacio de trabajo, cada dirección de memoria de computadora tiene una o más ubicaciones para contener uno o más valores distintos, respectivamente. El método trabaja leyendo dos valores de datos contiguos, de longitud K y N bits, respectivamente, de un flujo de datos fuente, como una referencia de dirección de memoria, y un valor de símbolo actual, respectivamente. El valor de símbolo actual se escribe para reemplazar uno de los valores en la referencia de dirección de memoria si el valor de símbolo actual no coincide con ninguno de los valores en la referencia de dirección de memoria, y un código FALLA, seguido por el valor de símbolo actual, se adjuntan al flujo de datos comprimido. Alternativamente, si el valor de símbolo actual coincide con cualquiera de los valores en la referencia de dirección de memoria, entonces se agrega un código de acierto al flujo de datos comprimido, dicho código de acierto representando la ubicación, o un atributo asociado con la ubicación, en donde se encontró el valor en la referencia de dirección de memoria. El método se repite para todos los símbolos leídos del flujo fuente. Un método de descompresión o reconstrucción equivalente, simétrico y reversible crea un flujo de datos no comprimido equivalente al flujo fuente original. Ventajosamente, el espacio de trabajo empleado por el método de compresión tiene un comportamiento similar al de la memoria caché usada en la arquitectura de computadora, permitiendo que el método de compresión se implemente usando una memoria de contenido direccionable , que es una memoria asociativa o inteligente ara diseños de hardware o disposiciones asociativas para implementación de software.
MX2008012216A 2006-03-24 2007-03-26 Compresion de datos a alta velocidad basada en tecnicas de mapeo de cache de conjunto asociativo. MX2008012216A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US78557206P 2006-03-24 2006-03-24
PCT/US2007/007412 WO2007112083A2 (en) 2006-03-24 2007-03-26 High-speed data compression based on set associative cache mapping techniques

Publications (1)

Publication Number Publication Date
MX2008012216A true MX2008012216A (es) 2008-12-10

Family

ID=38541725

Family Applications (1)

Application Number Title Priority Date Filing Date
MX2008012216A MX2008012216A (es) 2006-03-24 2007-03-26 Compresion de datos a alta velocidad basada en tecnicas de mapeo de cache de conjunto asociativo.

Country Status (10)

Country Link
US (1) US7436330B2 (es)
EP (1) EP2005594A4 (es)
JP (1) JP2009531976A (es)
KR (1) KR20090021149A (es)
CN (1) CN101449462A (es)
AU (1) AU2007230901B2 (es)
CA (1) CA2647259A1 (es)
MX (1) MX2008012216A (es)
WO (1) WO2007112083A2 (es)
ZA (1) ZA200808522B (es)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8085171B2 (en) * 2006-03-24 2011-12-27 University Of Mississippi High-speed data compression based on set associative cache mapping techniques
US7834784B1 (en) * 2007-01-18 2010-11-16 Cisco Technology, Inc. Data redundancy elimination mechanism including fast lookup of data patterns exhibiting spatial locality
US8918588B2 (en) * 2009-04-07 2014-12-23 International Business Machines Corporation Maintaining a cache of blocks from a plurality of data streams
US8098247B2 (en) * 2009-09-24 2012-01-17 Crucs Holdings, Llc Systems and methods for geometric data compression and encryption
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
KR101956031B1 (ko) * 2012-10-15 2019-03-11 삼성전자 주식회사 데이터 압축 장치 및 방법, 데이터 압축 장치를 포함하는 메모리 시스템
US8886926B2 (en) 2012-11-07 2014-11-11 Centri Technology, Inc. Single-pass data compression and encryption
US9467294B2 (en) * 2013-02-01 2016-10-11 Symbolic Io Corporation Methods and systems for storing and retrieving data
US8804814B1 (en) 2013-06-04 2014-08-12 Centri Technology, Inc. Seeding of a workspace to optimize codec operations
US9483199B1 (en) * 2014-08-18 2016-11-01 Permabit Technology Corporation Data deduplication using multiple devices
US9537504B1 (en) * 2015-09-25 2017-01-03 Intel Corporation Heterogeneous compression architecture for optimized compression ratio
JP6834327B2 (ja) * 2016-10-06 2021-02-24 富士通株式会社 符号化プログラム、符号化装置および符号化方法
US10713750B2 (en) * 2017-04-01 2020-07-14 Intel Corporation Cache replacement mechanism
CN111384962B (zh) * 2018-12-28 2022-08-09 上海寒武纪信息科技有限公司 数据压缩解压装置和数据压缩方法
CN111384963B (zh) * 2018-12-28 2022-07-12 上海寒武纪信息科技有限公司 数据压缩解压装置和数据解压方法
US10936825B1 (en) 2019-07-19 2021-03-02 Clrv Technologies, Llc Methods and apparatus to improve disambiguation and interpretation in automated text analysis using transducers applied on a structured language space
CN111614359B (zh) * 2020-06-02 2023-04-11 同济大学 使用点预测和常现位置数组的数据编码方法和解码方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3675211A (en) 1970-09-08 1972-07-04 Ibm Data compaction using modified variable-length coding
JP2796590B2 (ja) * 1991-08-07 1998-09-10 三菱電機株式会社 メモリ装置及びそれを使用したデータ処理装置
US5450562A (en) * 1992-10-19 1995-09-12 Hewlett-Packard Company Cache-based data compression/decompression
JPH08223428A (ja) * 1995-02-10 1996-08-30 Fuji Xerox Co Ltd 画像データ圧縮装置および画像データ伸長装置
EP1320833B1 (en) 2000-09-28 2008-12-03 Roke Manor Research Limited Improved huffman data compression method
US6657565B2 (en) 2002-03-21 2003-12-02 International Business Machines Corporation Method and system for improving lossless compression efficiency
GB0210604D0 (en) 2002-05-09 2002-06-19 Ibm Method and arrangement for data compression
US6941442B2 (en) * 2002-08-02 2005-09-06 Arm Limited Entry lockdown within a translation lookaside buffer mechanism
US7177985B1 (en) * 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
NZ546498A (en) 2003-10-17 2007-05-31 Pacbyte Software Pty Ltd Data compression system and method
US7464242B2 (en) * 2005-02-03 2008-12-09 International Business Machines Corporation Method of load/store dependencies detection with dynamically changing address length
US7180433B1 (en) 2005-09-22 2007-02-20 Tandberg Storage Asa Fast data compression and decompression system and method
US7849241B2 (en) 2006-03-23 2010-12-07 International Business Machines Corporation Memory compression method and apparatus for heterogeneous processor architectures in an information handling system

Also Published As

Publication number Publication date
JP2009531976A (ja) 2009-09-03
KR20090021149A (ko) 2009-02-27
WO2007112083A3 (en) 2008-07-24
ZA200808522B (en) 2009-08-26
EP2005594A2 (en) 2008-12-24
US20080122665A1 (en) 2008-05-29
AU2007230901A1 (en) 2007-10-04
AU2007230901B2 (en) 2010-12-16
CN101449462A (zh) 2009-06-03
US7436330B2 (en) 2008-10-14
EP2005594A4 (en) 2010-10-20
WO2007112083A2 (en) 2007-10-04
CA2647259A1 (en) 2007-10-04

Similar Documents

Publication Publication Date Title
US7436330B2 (en) High-speed data compression based on set associative cache mapping techniques
US8085171B2 (en) High-speed data compression based on set associative cache mapping techniques
US7095343B2 (en) code compression algorithms and architectures for embedded systems
US5729228A (en) Parallel compression and decompression using a cooperative dictionary
US8120516B2 (en) Data compression using a stream selector with edit-in-place capability for compressed data
US6819271B2 (en) Parallel compression and decompression system and method having multiple parallel compression and decompression engines
US5272478A (en) Method and apparatus for entropy coding
US6657565B2 (en) Method and system for improving lossless compression efficiency
JP6169233B2 (ja) 通信装置及びその制御方法及びプログラム
US20090058693A1 (en) System and method for huffman decoding within a compression engine
US20040022312A1 (en) Lossless data compression
CN100578943C (zh) 一种优化的霍夫曼解码方法和装置
US20190280710A1 (en) Memory Compression Method and Apparatus
US6492917B1 (en) System and method for implementation of the YK lossless data compression algorithm using a modular computational architecture
Wang et al. A simplified variant of tabled asymmetric numeral systems with a smaller look-up table
US8373584B2 (en) Compressing and decompressing data
Nevill-Manning et al. Phrase hierarchy inference and compression in bounded space
KR20080026772A (ko) Lempel-Ziv 압축 방법의 복원 속도를 보완한압축 방법
Niemi et al. Burrows‐Wheeler post‐transformation with effective clustering and interpolative coding
BR102014006340B1 (pt) Método e aparelho para compressão e descompressão de dados por estágios
JP2006511977A (ja) トレリス・デコーダ用のメモリ管理アルゴリズム
Kesavan et al. Comparative Study on Data Compression Techniques in Cache to Promote Performance
WO2020258189A1 (zh) 编码方法、编码器和编码系统
Safieh The Parallel Dictionary LZW Algorithm for Flash Memory Controllers
Gu Large-alphabet Chinese text compression using adaptive Markov model and arithmetic coder

Legal Events

Date Code Title Description
FG Grant or registration