KR20200105432A - 데이터를 압축하기 위한 방법들 및 장치들 - Google Patents

데이터를 압축하기 위한 방법들 및 장치들 Download PDF

Info

Publication number
KR20200105432A
KR20200105432A KR1020200024420A KR20200024420A KR20200105432A KR 20200105432 A KR20200105432 A KR 20200105432A KR 1020200024420 A KR1020200024420 A KR 1020200024420A KR 20200024420 A KR20200024420 A KR 20200024420A KR 20200105432 A KR20200105432 A KR 20200105432A
Authority
KR
South Korea
Prior art keywords
data
block
blocks
compression technique
exemplary
Prior art date
Application number
KR1020200024420A
Other languages
English (en)
Inventor
발렌티나 리고
데이비드 버나드
피터 맥글린
Original Assignee
모비디어스 리미티드
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 모비디어스 리미티드 filed Critical 모비디어스 리미티드
Publication of KR20200105432A publication Critical patent/KR20200105432A/ko

Links

Images

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/60General implementation details not specific to a particular type of compression
    • H03M7/6064Selection of Compressor
    • H03M7/607Selection between different types of compressors
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • 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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6064Selection of Compressor
    • H03M7/6082Selection strategies
    • H03M7/6088Selection strategies according to the data type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • 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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4056Coding table selection
    • 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/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6047Power optimization with respect to the encoder, decoder, storage or transmission

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Neurology (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

데이터를 압축하기 위한 방법들, 장치들, 시스템들 및 제조 물품들이 개시된다. 예시적인 장치는 데이터를 저장하기 위한 오프-칩 메모리; 데이터 세트를 복수의 데이터 블록들로 분할하기 위한 데이터 슬라이서; 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 제1 블록의 제1 특성들에 기초하여 선택하고; 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 제2 블록의 제2 특성들에 기초하여 선택하기 위한 데이터 프로세서; 제1 압축 기술을 사용하여 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하기 위한 제1 압축기; 제2 압축 기술을 사용하여 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하기 위한 제2 압축기; 제1 압축 기술을 식별해주는 제1 헤더 및 제2 압축 기술을 식별해주는 제2 헤더를 생성하기 위한 헤더 생성기; 및 오프-칩 메모리에 저장되도록 제1 헤더를 갖는 제1 압축된 데이터 블록 및 제2 헤더를 갖는 제2 압축된 데이터 블록을 전송하기 위한 인터페이스를 포함한다.

Description

데이터를 압축하기 위한 방법들 및 장치들{METHODS AND APPARATUS TO COMPRESS DATA}
본 개시내용은 일반적으로 프로세서들에 관한 것이며, 보다 상세하게는, 데이터를 압축하기 위한 방법들 및 장치들에 관한 것이다.
최근 몇 년 동안, 프로세서 칩(예컨대, 온-칩) 상에 구현되는 하드웨어 기반 신경 네트워크들은 각종의 데이터 프로세싱 시스템들에서 인기가 증가해 왔다. 신경 네트워크들은 머신 러닝 알고리즘들이 함께 작동하여 크고 및/또는 복잡한 데이터를 프로세싱하기 위한 프레임워크를 제공한다. 일부 예들에서, 신경 네트워크들은 온-칩 신경 네트워크의 증가된 가용 용량을 제공하기 위해 오프-칩 메모리(예컨대, 프로세서 칩 외부에 위치된 메모리)에 접속된다.
도 1은 예시적인 데이터 압축기 및 데이터 압축해제기를 포함하는 다이어그램의 블록 구현이다.
도 2는 도 1의 데이터 압축기 및 데이터 압축해제기의 예시적인 구현의 블록 다이어그램이다.
도 3 및 도 4는 데이터 세트를 압축하도록 도 1 및/또는 도 2의 예시적인 데이터 압축기를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능 명령어들을 표현하는 플로차트들이다.
도 5는 압축된 데이터 세트를 압축해제하도록 도 1 및/또는 도 2의 예시적인 데이터 압축해제기를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능 명령어들을 표현하는 플로차트이다.
도 6은 도 1 및/또는 도 2의 데이터 압축해제기에 의해 수행될 수 있는 예시적인 데이터 압축해제 프로세스를 예시한다.
도 7은 도 1 및/또는 도 2의 예시적인 데이터 압축기를 구현하기 위해 도 3 및 도 4의 명령어들을 실행하도록 구성된 예시적인 프로세싱 플랫폼의 블록 다이어그램이다.
도 8은 도 1 및/또는 도 2의 예시적인 데이터 압축해제기를 구현하기 위해 도 5의 명령어들을 실행하도록 구성된 예시적인 프로세싱 플랫폼의 블록 다이어그램이다.
도들은 일정한 축척으로 되어 있지 않다. 일반적으로, 동일한 또는 유사한 부분들을 지칭하기 위해 도면(들) 및 첨부된 서면 설명 전반에 걸쳐 동일한 참조 번호들이 사용될 것이다.
개인 컴퓨터들 및/또는 모바일 디바이스들을 포함한, 전형적인 컴퓨팅 시스템들은 인간 시각이 수행할 수 있는 태스크들을 자동화하기 위해 진보된 이미지 프로세싱 또는 컴퓨터 비전 알고리즘들을 이용한다. 컴퓨터 비전 태스크들은 디지털 이미지들을 취득, 프로세싱, 분석, 및/또는 이해하는 것을 포함한다. 그러한 태스크들은, 부분적으로, 숫자 및/또는 기호 정보를 생성하기 위해 디지털 이미지들로부터의 차원 데이터(dimensional data)의 추출을 용이하게 한다. 컴퓨터 비전 알고리즘들은, 그 중에서도, 3차원(3D) 포즈 추정, 이벤트 검출, 객체 인식, 비디오 트래킹 등과 연관된 결정들을 내리기 위해 그리고/또는 그들과 연관된 동작들을 다른 방식으로 수행하기 위해 숫자 및/또는 기호 정보를 사용할 수 있다. 증강 현실(AR), 가상 현실(VR), 로보틱스 및/또는 다른 응용들을 지원하기 위해, 그러면 그에 따라 그러한 태스크들을 신속하게(예컨대, 실시간으로 또는 거의 실시간으로) 그리고 효율적으로 수행하는 것이 중요하다.
진보된 이미지 프로세싱 또는 컴퓨터 비전 알고리즘들은 때때로 하드웨어 가속기 및/또는 컨볼루션 신경 네트워크(convolutional neural network; CNN, 또는 ConvNet)를 이용한다. 하드웨어 가속기는 범용 중앙 프로세싱 유닛(CPU)에 의해 구현되는 소프트웨어보다 효율적으로 기능들(예컨대, 이미지들을 분류하는 것, 이미지들을 클러스터링하는 것, 객체 인식을 수행하는 것 등)을 수행하는 하드웨어 컴포넌트이다. CNN은 이미지들을 분류하고, 유사성별로 이미지들을 클러스터링하며(예컨대, 사진 검색), 그리고/또는 컨볼루션을 사용하여 이미지들 내에서 객체 인식을 수행하는 데 사용될 수 있는 딥 인공 신경 네트워크(deep, artificial neural network)이다. 본 명세서에서 사용되는 바와 같이, 컨볼루션은 2개의 주어진 함수로부터, 함수들 중 하나의 함수의 형상이 다른 함수의 형상에 의해 어떻게 수정되는지를 표현하는 적분에 의해, 도출되는 함수인 것으로 정의된다. 따라서, CNN은 이미지 특징(예컨대, 수평선, 2차원(2-D) 형상 등)에 대응하는 하나 이상의 필터의 출력을 입력 이미지 위를 지나가게 하여 입력 이미지 내에서 이미지 특징의 매치들을 식별함으로써 입력 이미지에 포함된 얼굴들, 개인들, 거리 표지판들, 동물들 등을 식별하는 데 사용될 수 있다.
일부 하드웨어 가속기들 및/또는 CNN들은 제한된 메모리 용량을 갖는다. 그에 따라, 프로세서 칩 상에 위치된 그러한 하드웨어 가속기들 및/또는 CNN들은 하드웨어 가속기들 및/또는 CNN들의 증가된 데이터 프로세싱 능력을 지원하도록 용량을 증가시키기 위해 메모리(예컨대, DRAM(dynamic random-access memory)과 같은 오프-칩 메모리)에 접속될 수 있다. 그렇지만, 오프-칩 메모리로부터 온-칩 하드웨어 가속기 및/또는 CNN으로 데이터를 전송하는 것은 제한된 대역폭에 대응하는 병목 효과를 생성하여, 하드웨어 가속기 및/또는 CNN의 프로세싱 능력을 제한한다. 일부 기술들은 온-칩 하드웨어 가속기 및/또는 CNN으로 이동될 필요가 있는 데이터의 양을 감소시키기 위해 무손실 압축 기술(예컨대, 허프만 압축)을 사용하여 오프-칩 메모리 인터페이스의 대역폭 요구사항들을 감소시킨다. 그렇지만, 그러한 기술들은 일부 하드웨어 가속기들 및/또는 CNN들이 실행되는 주파수들 및/또는 디코더가 실행될 필요가 있는 주파수들과 호환되지 않는다.
본 명세서에 개시된 예들은 하드웨어 가속기들 및/또는 CNN들의 주파수들과 호환되는 하드웨어 압축해제 구현을 가능하게 해주면서 무손실 인코딩 기술들에 의해 제공되는 대역폭 개선을 최적화하기 위한 오프-칩 데이터 압축 기술을 포함한다. 본 명세서에 개시된 예들은 오프-칩 메모리에 저장될 데이터를 다수의 데이터 블록들로 분할(예컨대, 그룹화)하는 것 및 압축 기술(예컨대, RLE(run-length encoding), 부분 허프만 인코딩, 무인코딩(no encoding), 및/또는 임의의 다른 무손실 압축 기술)을 각각의 블록의 데이터의 특성들에 기초하여 블록 단위로(in a per-block basis) 적용하는 것을 포함한다.
예를 들어, 블록 내의 데이터 전부가 동일한 문자(예컨대, 모두 '0', 모두 '1', 모두 'a')에 대응하면, 본 명세서에 개시된 예들은 RLE 인코딩을 사용하여 블록을 압축한다. RLE 인코딩은 블록 데이터 전부를 원래 블록 내의 문자들의 개수에 대한 정보를 포함한 블록의 모든 값들을 표현하는 단일 값으로 압축하는 무손실 데이터 압축이다. 예를 들어, 블록이, 각각의 문자가 '0'에 대응하는, 16 문자 데이터 블록이면, RLE 인코딩은 서브-블록을 데이터 블록의 원래 사이즈를 지시하는 문자(예컨대, 16)를 포함한 16개의 '0' 문자를 표현하는 단일 문자 '0'으로 압축할 것이다.
블록 내의 데이터 전부가 동일한 문자에 대응하는 것은 아닌 경우, 본 명세서에 개시된 예들은 허프만 기술(예컨대, 전체 허프만(full Huffman) 기술 또는 부분 허프만(partial Huffman) 기술)을 수행할 수 있다. 허프만 기술은 가변 길이 코드들을 입력 문자들에 할당하기 위한 무손실 데이터 압축/인코딩 알고리즘이며, 여기서 코드들의 길이들은 대응하는 입력 문자들의 빈도수에 기초한다. 그에 따라, 허프만 기술은 비균일 길이 코드들을 결과한다. 예를 들어, 블록의 보다 빈번한 문자는 블록의 덜 빈번한 문자보다 작은 길이의 코드에 할당된다. 그에 따라, 허프만 기술은 반복된 문자들을 갖는 데이터 블록의 사이즈를 감소시킨다. 허프만 인코딩을 적용하기 위해, 데이터 세트에서의 각각의 문자의 출현 빈도수에 기초하여 허프만 트리가 생성된다. 블록의 데이터의 각각의 문자는 허프만 트리에 기초한 코드에 할당된다. 대부분의 경우들에서, 허프만 인코딩 기술을 사용하여 데이터를 인코딩하는 것은 무손실 데이터 압축을 결과한다.
부분 허프만 인코딩 기술은 허프만 인코딩 기술들을 미리 설정된 개수의 문자들에만 적용하고 나머지 문자들을 인코딩되지 않은 채로 두는 것을 포함한다. 각각의 문자는 이어서 인코딩된 것으로 또는 인코딩되지 않은 것으로 마킹 또는 태깅된다. 이러한 방식으로, 디코딩 시간이 감소되고 허프만 인코딩된 데이터를 디코딩하는 데 필요한 허프만 테이블의 사이즈가 감소된다. 허프만 테이블의 사이즈를 감소시키는 것은 인코딩된 데이터와 함께 디코더에게 전송될 필요가 있는 데이터의 양을 감소시킨다. 부가적으로, 허프만 테이블을 감소시키는 것은 디코딩 속도를 증가시키는 하드웨어 해결책들을 용이하게 한다. 본 명세서에 개시된 예들은 일반적으로 부분 허프만 기술에 대응한다. 그렇지만, 전체 허프만 기술이 대안적으로 사용될 수 있다.
부가적으로, 본 명세서에 개시된 예들은 허프만 인코딩된 데이터 블록을 인코딩된 데이터 서브-블록들로 분할한다. 그러한 인코딩된 데이터 서브-블록들은 각각의 서브-블록의 끝에 미리 설정된 코드를 추가함으로써 패딩될 수 있으며 따라서 온-칩 디코더는 병렬 디코딩을 위해 서브-블록들을 분리할 수 있고, 그에 의해 계산 대역폭을 증가시킬 수 있다. 블록에 반복 문자들이 거의 또는 전혀 없을 때와 같은, 일부 예들에서, 부분 허프만 기술은 포함된 헤더에 대응하는 오버헤드의 양으로 인해 데이터 블록의 사이즈를 감소시키지 않을 수 있다. 그에 따라, 본 명세서에 개시된 예들은 부분 허프만 기술이 데이터 블록의 사이즈를 감소시키지 않는 블록들에 대해 어떠한 압축/인코딩 기술도 수행하지 않는다.
본 명세서에 개시된 예들을 사용하여, 사용자는 보다 높은 압축률을 달성하기 위해 압축 스킴을 특정 애플리케이션 데이터 프로파일에 맞춰 조정할 수 있다. 부가적으로, 본 명세서에 개시된 예들은 하드웨어 메모리 제한 및 속도 요구사항과 호환되도록 허프만 인코딩 룩업 테이블 요구사항들을 감소시킨다. 부가적으로, 본 명세서에 개시된 예들은 디코딩 및/또는 인코딩 병렬화를 가능하게 해주며, 그에 의해 보다 높은 디코딩 대역폭에 대응한다.
도 1은 예시적인 오프-칩 컴포넌트들(100) 및 예시적인 온-칩 컴포넌트들(102)의 블록 다이어그램이다. 예시적인 오프-칩 컴포넌트들(100)은 데이터/데이터 세트들을 저장하기 위한 예시적인 오프-칩 메모리(104) 및 하드웨어 기반 프로세싱을 위해 예시적인 온-칩 컴포넌트들(102)에게 전송하기 전에 예시적인 오프-칩 메모리(104)에 저장된 데이터 세트들을 압축하기 위한 예시적인 데이터 압축기(106)를 포함한다. 예시적인 온-칩 컴포넌트들(102)은 압축된 데이터 세트들을 압축해제하기 위한 예시적인 데이터 압축해제기(108) 및 데이터 세트를 프로세싱하기 위한 예시적인 하드웨어 가속기/신경 네트워크 엔진(110)을 포함한다. 도 1의 예시적인 블록 다이어그램이 오프-칩 컴포넌트들(100)을 포함하지만, 예시적인 오프-칩 메모리(104) 및/또는 예시적인 데이터 압축기(106)는 예시적인 온-칩 컴포넌트들(102)과 동일한 칩 상에 위치될 수 있다(예컨대, 도 1의 컴포넌트들 전부가 동일한 칩 상에 위치될 수 있다).
도 1의 예시적인 오프-칩 컴포넌트들(100)은 하드웨어 가속기/신경 네트워크(110)에 의해 프로세싱될 데이터를 저장하기 위한 오프-칩 메모리(104)(예컨대, DRAM)를 포함한다. 예시적인 오프-칩 메모리(104)는 하드웨어 가속기/신경 네트워크(110)에 의해 프로세싱될 수 있는 부가의 데이터를 저장하기 위한 부가의 메모리를 제공함으로써 예시적인 하드웨어 가속기/신경 네트워크(110)의 메모리 용량을 증가시킨다. 위에서 설명된 바와 같이, 압축되지 않은 데이터를 오프-칩 메모리(104)로부터 하드웨어 가속기/신경 네트워크(110)에게 전송하는 것은 오프-칩 메모리(104)(예컨대, DRAM)의 대역폭 제한들로 인해 병목 현상(bottle neck)을 발생시킨다. 그에 따라, 예시적인 데이터 압축기(106)는 데이터의 사이즈를 감소시켜 병목 현상 문제들을 감소 및/또는 제거하기 위해 온-칩 컴포넌트들(102)에게 전송하기 전에 오프-칩 메모리(104)에 저장될 및/또는 이미 저장된 데이터를 압축한다. 예시적인 데이터 압축기(106)는, 저장된 데이터를 데이터 블록들로 분해하고 블록들의 데이터의 특성들에 기초하여 3개의 압축/인코딩 기술을 사용하는 것에 의해, 데이터를 압축한다. 부가적으로, 예시적인 데이터 압축기(106)는 사용되는 압축/인코딩 기술을 식별해주고 예시적인 데이터 압축해제기(108)가 블록들을 압축해제하는 데 사용할 수 있는 정보(예컨대, 블록 사이즈, 인코딩 테이블들, 서브-블록 사이즈들 등)를 제공하는 블록들의 헤더(예컨대, 제1 블록에 대한 제1 헤더, 제2 블록에 대한 제2 헤더 등)를 생성한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 압축된 데이터를 적절히 압축해제할 수 있다. 일단 압축되면, 예시적인 데이터 압축기(106)는 압축된 데이터를 예시적인 오프-칩 메모리(104)에 저장한다. 이러한 방식으로, 오프-칩 메모리(104)는 예시적인 하드웨어 가속기/신경 네트워크(110)에 의해 프로세싱될 압축된 데이터를 전송할 수 있다. 일부 예들에서, 데이터 압축기(106)는 데이터의 다수의 블록들을 병렬로 압축하기 위한 다수의 프로세서들을 포함하며, 그에 의해 계산 대역폭을 증가시킨다. 예시적인 데이터 압축기(106)는 도 2와 관련하여 아래에서 추가로 설명된다.
도 1의 예시적인 온-칩 컴포넌트들(102)은 오프-칩 메모리(104)로부터 압축된 데이터를 수신하고 압축된 데이터를 하드웨어 가속기/신경 네트워크(110)에게 전송되기 전에 압축된 데이터를 압축해제하기 위해 오프-칩 컴포넌트들(100)과 인터페이싱하기 위한 데이터 압축해제기(108)를 포함한다. 일부 예들에서, 데이터 압축해제기(108)는 하드웨어 가속기이다. 예시적인 데이터 압축해제기(108)는 압축된 데이터를 수신하고 압축된 데이터의 블록들의 헤더들을 식별하여 블록들을 압축한 압축 기술을 결정한다. 이러한 방식으로, 데이터 압축해제기(108)는 각각의 블록의 헤더에서 식별된 압축 기술에 기초하여 압축된 블록들을 압축해제한다. 일단 압축해제되면, 예시적인 데이터 압축해제기(108)는 압축해제된 데이터를 예시적인 하드웨어 가속기/신경 네트워크(110)에게 전송한다. 예시적인 하드웨어 가속기/신경 네트워크(110)은 하드웨어 가속기/신경 네트워크(110)의 구성에 기초하여 압축해제된 데이터를 프로세싱한다. 예시적인 데이터 압축해제기(108)는 도 2와 관련하여 아래에서 추가로 설명된다.
도 2는 예시적인 데이터 압축기(106)의 예시적인 구현의 블록 다이어그램 및 도 1의 예시적인 데이터 압축해제기(108)의 예시적인 구현의 블록 다이어그램이다. 예시적인 데이터 압축기(106)는 예시적인 메모리 인터페이스(200), 예시적인 데이터 슬라이서(들)(202), 예시적인 데이터 프로세서(들)(204), 예시적인 압축기(들)(206), 예시적인 헤더 생성기(들)(208), 예시적인 패더(padder)(들)(210), 및 예시적인 압축된 데이터 어셈블러(212)를 포함한다. 예시적인 데이터 압축해제기(108)는 예시적인 오프-칩 인터페이스(218), 예시적인 헤더 프로세서(220), 예시적인 데이터 분할기(221), 예시적인 압축해제기(들)(222), 예시적인 압축해제된 데이터 어셈블러(224), 및 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226)를 포함한다.
도 2의 예시적인 메모리 인터페이스(200)는 압축되어 예시적인 온-칩 데이터 압축해제기(108)에게 전송될 데이터를 도 1의 예시적인 오프-칩 메모리(104)로부터 수신한다. 일단 데이터 압축기(106)가 데이터를 압축하면, 도 2의 예시적인 메모리 인터페이스(200)는, 압축된 데이터가 도 1의 온-칩 컴포넌트들(102)에 의해 검색될 수 있도록, 압축된 데이터를 예시적인 오프-칩 메모리(104)에게 전송한다.
일단 메모리 인터페이스(200)가 예시적인 오프-칩 메모리(104)로부터 데이터를 획득하면, 예시적인 데이터 슬라이서(202)는 데이터를 데이터 블록들로 분리(예컨대, 슬라이싱)한다. 일부 예들에서, 데이터 슬라이서(들)(202)는 데이터를 균일한 고정 사이즈 블록으로 분리한다. 부가적으로, 데이터 슬라이서(들)(202)는, 아래에서 추가로 설명되는 바와 같이, 예시적인 데이터 압축해제기(108)의 병렬 압축해제 프로세싱을 가능하게 해주기 위해 인코딩된 데이터(예컨대, 부분 허프만 압축을 사용하여 인코딩된 블록)를 인코딩된 데이터 서브-블록으로 슬라이싱할 수 있다. 일부 예들에서, 데이터 슬라이서(들)(202)는 2개의 데이터 슬라이서를 포함한다. 예를 들어, 원래 데이터를 데이터 블록들로 분리하기 위한 제1 데이터 슬라이서와 허프만 인코딩된 데이터를 인코딩된 데이터 서브-블록들로 분리하기 위한 제2 데이터 슬라이서가 있을 수 있다.
도 2의 예시적인 데이터 프로세서(들)(204)는, 블록들의 데이터의 특성들에 기초하여, 데이터 블록들에 대해 사용할 압축 기술(예컨대, RLE 인코딩, 허프만 인코딩, 무인코딩, 및/또는 임의의 다른 무손실 압축 기술)을 결정(예컨대, 선택)하기 위한 하나 이상의 데이터 프로세서이다. 예를 들어, 데이터 프로세서(들)(204)가 블록을 획득할 때, 데이터 프로세서(들)(204)는 블록의 데이터 전부가 동일한 값 및/또는 문자(예컨대, 모두 '0', 모두 '1', 모두 'a' 등)에 대응하는지를 결정한다. 데이터 프로세서(들)(204)가 블록의 데이터가 동일한 값/문자에 대응한다고 결정하면, 데이터 프로세서(들)(204)는 정보의 손실없이 블록을 압축하기 위해 RLE 인코딩 기술이 블록에 적용될 수 있다고 결정한다. 데이터 프로세서(들)(204)가 블록의 데이터가 상이한 값들/문자들에 대응한다고 결정하면, 데이터 프로세서(들)(204)는 허프만 인코딩(예컨대, 부분 또는 전체) 또는 무인코딩이 블록에 적용되어야 한다고 결정할 수 있다. 위에서 설명된 바와 같이, 허프만 인코딩 기술을 일부 블록들에 적용하는 것은 (예컨대, 블록이 반복된 값들/문자들을 거의 또는 전혀 갖지 않을 때) 보다 많은 양의 데이터를 결과할 수 있다. 그에 따라, 일부 예들에서, 예시적인 데이터 프로세서(들)(204)는 데이터 블록의 부분 허프만 인코딩 기술이 보다 적은 또는 보다 많은 양의 데이터를 결과할 것인지를 결정하기 위해 데이터 블록들을 프로세싱할 수 있다. 그러한 예들에서, 예시적인 데이터 프로세서(들)(204)가 (예컨대, 확률적 모델링을 사용하여) 데이터 블록의 부분 허프만 인코딩이 무인코딩보다 많은 데이터를 결과한다고 결정하면, 데이터 프로세서(들)(204)는 무인코딩이 데이터 블록에 적용될 것이라고 결정한다. 다른 예들에서, 압축기(들)(206)는 부분 허프만 인코딩을 데이터에 적용하고, 데이터 프로세서(들)(204)는 결과가 압축 기술을 적용하지 않는 것(예컨대, 무인코딩)보다 큰지 또는 작은지를 결정한다. 데이터 프로세서(들)(204)가 결과가 압축 기술을 적용하지 않는 것보다 크다고 결정하면, 데이터 프로세서(들)(204)는 허프만 인코딩 데이터를 폐기하고, 그에 의해 데이터 블록을 인코딩되지 않은(예컨대, 압축되지 않은) 채로 둔다. 데이터 프로세서(들)(204)는 단일 데이터 프로세서 또는 다수의 데이터 프로세서들일 수 있다. 예를 들어, 다수의 데이터 프로세서들(204)은 데이터 블록들을 병렬로 프로세싱하기 위해 이용될 수 있다.
도 2의 예시적인 압축기(들)(206)는 데이터 프로세서(들)(204)에 의해 선택된 기술에 기초하여 데이터 블록에 대해 압축 기술(예컨대, RLE 인코딩, 허프만 인코딩, 및/또는 임의의 다른 무손실 압축 기술)을 수행한다. 위에서 설명된 바와 같이, 데이터 프로세서(들)(204)는 블록의 데이터 전부가 동일한 값 및/또는 문자(예컨대, 모두 '0', 모두 '1', 모두 'a' 등)에 대응할 때 RLE 인코딩을 선택한다. 데이터 프로세서(들)(204)가 데이터 블록에 대한 RLE를 선택할 때, 데이터 프로세서(들)(204)는 블록의 반복된 값 및/또는 값의 반복 횟수를 식별해주는 헤더 또는 데이터 패킷을 생성하도록 헤더 생성기(들)(208)에 지시한다. 예를 들어, 블록이 각각의 비트가 '1'에 대응하는 8 문자 블록이면, 데이터 프로세서(들)(204)는 8개의 문자 각각이 '1'의 값에 대응한다는 것을 식별해주는 헤더 및 '1'이 8번 반복된다는 지시를 생성하도록 헤더 생성기(들)(208)에 지시한다.
도 2의 데이터 프로세서(들)(204)가 허프만 인코딩 또는 부분 허프만 인코딩을 선택할 때, 예시적인 압축기(들)(206)는 허프만 인코딩 또는 부분 허프만 인코딩을 데이터 블록에 적용한다. 위에서 설명된 바와 같이, 허프만 인코딩을 적용하기 위해, 데이터 세트에서의 각각의 문자의 출현 빈도수에 기초하여 허프만 트리가 생성된다. 블록의 데이터의 각각의 문자는 허프만 트리에 기초한 코드에 할당된다. 대부분의 경우들에서, 허프만 인코딩 기술을 사용하여 데이터를 인코딩하는 것은 무손실 데이터 압축을 결과한다. 부분 허프만 인코딩 기술은 허프만 인코딩 기술들을 미리 설정된 개수의 문자들에만 적용하고 나머지 문자들을 인코딩되지 않은 채로 두는 것을 포함하며, 그에 의해 디코딩 시간을 감소시키고 허프만 인코딩된 데이터를 디코딩하는 데 필요한 허프만 테이블의 사이즈를 감소시킨다. 인코딩된 데이터 내의 문자들은 문자가 인코딩되어 있는지 여부를 식별해주는 마커로 프리펜딩/어펜딩된다(pre/appended). 일부 예들에서, 데이터 프로세서(들)(204)는, 헤더 오버헤드와 데이터 압축 사이의 트레이드-오프인, 허프만 인코딩 기술에서 어느 및/또는 몇 개의 미리 설정된 문자들을 포함시킬지를 결정한다. 예를 들어, 데이터 프로세서(들)(204)는 부분 허프만 기술이 236개의 가능한 문자 중 8개의 문자에만 적용될 수 있다고 결정할 수 있다. 그에 따라, 데이터 프로세서(들)(204)는 가장 종종 반복되는 데이터 중의 8개의 문자를 결정할 것이고 압축기(들)(206)는 8개의 결정된 문자를 사용하여 부분 허프만 인코딩을 적용하기 위해 8개의 결정된 문자에 대해 심벌들을 적용할 것이다. 부분 허프만 인코딩 기술을 적용하는 것은 보다 빠른 압축을 가능하게 해주고, 메모리(104)가 허프만 인코딩 기술을 사용하여 압축된 블록들을 압축해제(예컨대, 디코딩)하는 데 사용되는 보다 작은 허프만 테이블을 전송할 수 있게 해준다. 압축기(들)(206)는 단일 압축기 또는 다수의 압축기들일 수 있다. 예를 들어, 다수의 압축기들(206)은 데이터 블록들을 병렬로 인코딩(예컨대, 압축)하기 위해 이용될 수 있다.
도 2의 예시적인 헤더 생성기(들)(208)는 데이터 블록을 인코딩 및/또는 압축하는 데 사용되는 인코딩 및/또는 압축 유형(예컨대, RLE 인코딩, 허프만 인코딩, 무인코딩, 및/또는 임의의 다른 무손실 압축 기술)을 식별해주는 헤더 및/또는 데이터 패킷을 생성한다. 예를 들어, 블록의 압축 유형이 RLE 압축이면, 헤더 생성기(들)(208)는 RLE 압축은 물론 RLE 압축에 대응하는 반복되는 문자 및 문자가 반복되는 횟수를 식별해주는 헤더 및/또는 데이터 패킷을 생성한다. 블록의 압축 유형이 허프만 압축 또는 부분 허프만 압축이면, 헤더 생성기(208)는 허프만 및/또는 부분 허프만 압축 기술에 대응하는 헤더 및/또는 데이터 패킷을 생성한다. 예를 들어, 헤더 생성기(208)는 블록이 허프만 인코딩되어 있다는 지시, 데이터를 디코딩하기 위한 테이블(들), 인코딩된 데이터의 사이즈, 서브-블록들의 사이즈, 및/또는 서브-블록이 인코딩되어 있는지 여부를 지시하는 문자 마커를 포함하도록 헤더를 생성할 수 있다. 블록의 압축 유형이 인코딩 및/또는 압축되어 있지 않으면, 예시적인 헤더 생성기(208)는 무압축(no compression) 및/또는 무인코딩 및 인코딩되지 않은 데이터의 사이즈에 대응하는 헤더 및/또는 데이터 패킷을 생성한다. 예시적인 헤더 생성기(들)(208)는 헤더 및/또는 데이터 패킷을 인코딩된 또는 인코딩되지 않은 블록에 추가한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 각각의 블록에 대해 어느 압축 기술이 사용되었는지를 식별하고 압축된 블록을 압축 기술에 기초하여 압축해제할 수 있다. 헤더 생성기(들)(208)는 단일 헤더 생성기 또는 다수의 헤더 생성기들일 수 있다. 예를 들어, 헤더 생성기들(208)은 데이터 블록들에 대한 헤더들을 병렬로 생성하는 데 이용될 수 있다.
허프만 인코딩 또는 부분 허프만 인코딩이 데이터 블록에 적용되어 허프만 인코딩된 데이터를 생성할 때, 도 2의 예시적인 슬라이서(들)(202)는 허프만 인코딩된 데이터를 N개의 인코딩된 서브-블록들에 대응하는 미리 설정된 개수의 인코딩된 서브-블록들로 슬라이싱(예컨대, 그룹화)한다. 예를 들어, 인코딩된 데이터가 27개의 허프만 코드를 포함하고 인코딩된 서브-블록들의 미리 설정된 개수가 9이면, 슬라이서(들)(202)는 각각의 서브-블록에 대해 3개의 허프만 코드를 그룹화한다. 인코딩된 서브-블록들의 미리 설정된 개수는 데이터 압축해제기(108)의 병렬 프로세서들의 개수에 기초할 수 있다. 이러한 방식으로, 각각의 병렬 프로세서는 각각의 인코딩된 서브-블록 또는 N개의 서브-블록들을 병렬로 프로세싱할 수 있다. 일단 인코딩된 서브-블록들로 슬라이싱되면, 예시적인 패더(들)(210)는 서브-블록의 끝을 표현하는 미리 정의된 코드 패턴으로 개별 서브-블록들을 패딩한다. 위에서 설명된 바와 같이, 허프만 코드들은 길이가 가변적(예컨대, 비균일)이다. 예를 들어, 제1 16-비트 서브-블록의 제1 허프만 코드 길이는 8-비트일 수 있는 반면, 제2 16-비트 서브-블록의 제2 허프만 코드는 길이가 10-비트일 수 있다. 그에 따라, 하나 이상의 허프만 코드를 그룹화하는 것은 가변(예컨대, 비균일) 길이의 인코딩된 서브-블록에 대응할 것이다. 따라서, 패더(들)(210)는 미리 정의된 코드를 서브-블록의 끝에 추가하고, 예시적인 데이터 압축해제기(108)가 병렬 디코딩을 용이하게 하기 위해 헤더에서 식별된 사이즈에 기초하여 개별 인코딩된 서브-블록들을 분리할 수 있도록, 헤더 생성기(208)는 패딩된 서브-블록의 사이즈를 헤더에 포함시킨다. 패더(들)(210)는 단일 패더 또는 다수의 패더들일 수 있다. 예를 들어, 패더들(210)은 인코딩된 서브-블록들을 병렬로 패딩하는 데 이용될 수 있다.
도 2의 예시적인 압축된 데이터 어셈블러(212)는 생성된 헤더를 사용하여 패딩된 인코딩된 서브-블록들을 순서대로 어셈블링하여 데이터 블록의 허프만 인코딩을 완료한다. 부가적으로, 예시적인 압축된 데이터 어셈블러(212)는 인코딩된(예컨대, 압축된) 또는 인코딩되지 않은(예컨대, 압축되지 않은) 데이터 블록들을 어셈블링하여 예시적인 데이터 압축해제기(108)에게 전송될 압축된 데이터 전체를 생성한다. 일부 예들에서, 데이터 블록들이 병렬로 프로세싱될 수 있다. 그에 따라, 압축된 데이터 어셈블러(212)는 데이터 블록들이 인코딩 이전에 정렬되어 있던 것과 동일한 순서로 인코딩된 블록들을 어셈블링할 수 있도록 블록들을 모니터링한다.
도 2의 예시적인 오프-칩 인터페이스(218)는 예시적인 오프-칩 메모리(104)로부터 압축된 데이터를 획득한다. 일단 압축된 데이터가 획득되면, 예시적인 헤더 프로세서(220)는 압축된 데이터를 프로세싱하여 압축된 데이터의 블록들의 헤더들을 식별한다. 위에서 설명된 바와 같이, 헤더들은 압축된 데이터의 각각의 블록을 압축하는 데 사용되는 인코딩 기술을 식별해주는 정보를 포함한다. 그에 따라, 헤더 프로세서(220)는 (예컨대, 하나씩 또는 병렬로) 데이터 블록들의 압축해제를 위한 헤더들을 식별함으로써 압축된 블록들을 분리할 수 있다.
도 2의 예시적인 압축해제기(들)(222)는 각각의 대응하는 블록의 헤더에서 식별된 대응하는 압축 정보에 기초하여 데이터 블록들을 압축해제한다. 예를 들어, 제1 인코딩된 데이터 블록의 제1 헤더가 RLE 압축에 대응하면, 압축해제기(222)는 제1 헤더를 프로세싱하여 어느 문자가 반복되는지 및 그 문자가 몇 번 반복되는지를 식별하고, 반복된 문자들의 결정된 개수를 압축해제된 데이터 어셈블러(224)에 전달한다. 횟수는 미리 설정될 수 있거나 또는 헤더에서 식별될 수 있다. 제2 인코딩된 데이터 블록의 제2 헤더가 무인코딩에 대응하면, 압축해제기(들)(222)는 헤더를 제거하고 인코딩되지 않은 데이터를, 그 데이터를 압축해제(예컨대, 디코딩)함이 없이, 압축해제 데이터 어셈블러에 전달한다. 제3 인코딩된 데이터 블록의 제3 헤더가 허프만 인코딩(예컨대, 부분 또는 전체)에 대응하면, 압축해제기(들)(222)는 허프만 코드들에 대응하는 블록의 헤더로부터의 허프만 테이블을 사용하여 제3 인코딩된 데이터 블록을 압축해제한다. 일부 예들에서, 데이터 분할기(221)는, 헤더 내에서 식별된 서브-블록 사이즈들에 기초하여, 압축된 데이터의 블록을 서브-블록으로 분해한다. 이 문제에 있어서, 서브-그룹들 각각은 다수의 압축해제기들(222)에 의해 병렬 프로세싱될 수 있다. 일단 압축해제되면, 압축해제기들(222)은 압축해제된 서브-블록들을 예시적인 압축해제된 데이터 어셈블러(224)에 전달한다.
도 2의 예시적인 압축해제된 데이터 어셈블러(224)는 데이터 블록의 허프만 디코딩을 완료하기 위해 디코딩된 서브-블록들을 어셈블링한다. 예를 들어, 허프만 인코딩된 서브-블록들을 병렬로 디코딩하기 위한 다수의 압축해제기들(222)이 있다면, 압축해제된 데이터 어셈블러(224)는 압축해제된 서브-블록들을 정렬하여 압축해제된 데이터 블록을 생성할 수 있도록 병렬 프로세서들을 모니터링한다. 부가적으로, 예시적인 압축해제된 데이터 어셈블러(224)는 디코딩된(예컨대, 압축해제된) 데이터 블록들을 어셈블링하여 예시적인 하드웨어 가속기/신경 네트워크(110)에게 전송될 압축해제된 데이터 전체를 생성한다. 일부 예들에서, 데이터 블록들은 병렬로 프로세싱(예컨대, 압축해제 및/또는 디코딩)된다. 그에 따라, 압축해제된 데이터 어셈블러(224)는 데이터 블록들이 수신된 것과 동일한 순서로 디코딩된 블록들을 어셈블링할 수 있도록 블록들을 모니터링한다. 도 2의 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226)는 압축해제된 데이터의 전체 세트를 도 1의 온-칩 컴포넌트들(102)의 예시적인 하드웨어 가속기/신경 네트워크(110)에게 전송한다.
도 1의 예시적인 데이터 압축기(106) 및 예시적인 데이터 압축해제기(108)를 구현하는 예시적인 방식이 도 2에 예시되어 있지만, 도 2에 예시된 요소들, 프로세스들 및/또는 디바이스들 중 하나 이상이 임의의 다른 방식으로 결합, 분할, 재배열, 생략, 제거 및/또는 구현될 수 있다. 추가로, 예시적인 메모리 인터페이스(200), 예시적인 데이터 슬라이서(들)(202), 예시적인 데이터 프로세서(들)(204), 예시적인 압축기(들)(206), 예시적인 헤더 생성기(들)(208), 예시적인 패더(들)(210), 예시적인 압축된 데이터 어셈블러(212), 예시적인 오프-칩 인터페이스(218), 예시적인 헤더 프로세서(220), 예시적인 데이터 분할기(221), 예시적인 압축해제기(들)(222), 예시적인 압축해제된 데이터 어셈블러(224), 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226), 및/또는, 보다 일반적으로, 도 2의 예시적인 데이터 압축기(106) 및/또는 예시적인 데이터 압축해제기(108)는 하드웨어, 소프트웨어, 펌웨어 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예를 들어, 예시적인 메모리 인터페이스(200), 예시적인 데이터 슬라이서(들)(202), 예시적인 데이터 프로세서(들)(204), 예시적인 압축기(들)(206), 예시적인 헤더 생성기(들)(208), 예시적인 패더(들)(210), 예시적인 압축된 데이터 어셈블러(212), 예시적인 오프-칩 인터페이스(218), 예시적인 헤더 프로세서(220), 예시적인 데이터 분할기(221), 예시적인 압축해제기(들)(222), 예시적인 압축해제된 데이터 어셈블러(224), 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226), 및/또는, 보다 일반적으로, 도 2의 예시적인 데이터 압축기(106) 및/또는 예시적인 데이터 압축해제기(108) 중 임의의 것은 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로들, 프로그래밍가능 프로세서(들), 프로그래밍가능 컨트롤러(들), GPU(들)(graphics processing unit(s)), DSP(들)(digital signal processor(s)), ASIC(들)(application specific integrated circuit(s)), PLD(들)(programmable logic device(s)) 및/또는 FPLD(들)(field programmable logic device(s))에 의해 구현될 수 있다. 순수 소프트웨어 및/또는 펌웨어 구현을 커버하기 위해 본 특허의 장치 또는 시스템 청구항들 중 임의의 것을 읽을 때, 예시적인 메모리 인터페이스(200), 예시적인 데이터 슬라이서(들)(202), 예시적인 데이터 프로세서(들)(204), 예시적인 압축기(들)(206), 예시적인 헤더 생성기(들)(208), 예시적인 패더(들)(210), 예시적인 압축된 데이터 어셈블러(212), 예시적인 오프-칩 인터페이스(218), 예시적인 헤더 프로세서(220), 예시적인 데이터 분할기(221), 예시적인 압축해제기(들)(222), 예시적인 압축해제된 데이터 어셈블러(224), 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226), 및/또는, 보다 일반적으로, 도 2의 예시적인 데이터 압축기(106) 및/또는 예시적인 데이터 압축해제기(108) 중 적어도 하나는 이로써 소프트웨어 및/또는 펌웨어를 포함하는 메모리, DVD(digital versatile disk), CD(compact disk), 블루레이 디스크 등과 같은 비일시적 컴퓨터 판독가능 저장 디바이스 또는 저장 디스크를 포함하는 것으로 명백하게 정의된다. 게다가, 도 2의 예시적인 데이터 압축기(106) 및/또는 데이터 압축해제기(108)는 도 2에 예시된 것들에 부가하여 또는 그 대신에 하나 이상의 요소, 프로세스 및/또는 디바이스를 포함할 수 있고, 그리고/또는 예시된 요소들, 프로세스들 및 디바이스들 중 임의의 것 또는 전부 중 하나 초과를 포함할 수 있다. 본 명세서에서 사용되는 바와 같이, "통신하는(in communication)"이라는 문구는, 그의 변형들을 포함하여, 직접 통신 및/또는 하나 이상의 중간 컴포넌트를 통한 간접 통신을 포괄하며, 직접적인 물리적(예컨대, 유선) 통신 및/또는 상시 통신(constant communication)을 요구하지 않지만, 오히려 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들, 및/또는 일회성 이벤트들에서의 선택적 통신을 부가로 포함한다.
도 1 및/또는 도 2의 예시적인 데이터 압축기(106)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능 명령어들, 하드웨어 구현 상태 머신들, 및/또는 이들의 임의의 조합을 표현하는 플로차트들이 도 3 및 도 4에 도시되어 있다. 도 1 및/또는 도 2의 예시적인 데이터 압축해제기(108)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능 명령어들, 하드웨어 구현 상태 머신들, 및/또는 이들의 임의의 조합을 표현하는 플로차트가 도 5에 도시되어 있다. 머신 판독가능 명령어들은 도 7 및/또는 도 8과 관련하여 아래에서 논의되는 예시적인 프로세서 플랫폼(700, 800)에 도시된 프로세서(712, 812)와 같은 컴퓨터 프로세서에 의한 실행을 위한 실행가능 프로그램 또는 실행가능 프로그램의 부분일 수 있다. 프로그램은 프로세서(712, 812)와 연관된 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루레이 디스크, 또는 메모리와 같은 비일시적 컴퓨터 판독가능 저장 매체 상에 저장된 소프트웨어로 구체화될 수 있지만, 전체 프로그램 및/또는 그 일부들은 대안적으로 프로세서(712, 812) 이외의 디바이스에 의해 실행될 수 있고 그리고/또는 펌웨어 또는 전용 하드웨어로 구체화될 수 있다. 게다가, 예시적인 프로그램이 도 3 내지 도 5에 예시된 플로차트들을 참조하여 설명되지만, 도 2의 예시적인 데이터 압축기(106) 및/또는 데이터 압축해제기(108)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예를 들어, 블록들의 실행 순서가 변경될 수 있고, 그리고/또는 설명된 블록들 중 일부가 변경, 제거, 또는 조합될 수 있다. 부가적으로 또는 대안적으로, 블록들 중 임의의 것 또는 전부는 소프트웨어 또는 펌웨어를 실행함이 없이 대응하는 동작을 수행하도록 구성된 하나 이상의 하드웨어 회로(예컨대, 이산 및/또는 통합 아날로그 및/또는 디지털 회로부, FPGA, ASIC, 비교기, 연산 증폭기(op-amp), 로직 회로 등)에 의해 구현될 수 있다.
위에서 언급된 바와 같이, 도 3 내지 도 5의 예시적인 프로세스들은 정보가 임의의 지속기간 동안(예컨대, 연장된 시간 기간들 동안, 영구적으로, 짧은 순간들 동안, 일시적으로 버퍼링하기 위해, 및/또는 정보의 캐싱을 위해) 저장되는 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 콤팩트 디스크, 디지털 다기능 디스크(digital versatile disk), 캐시, 랜덤 액세스 메모리 및/또는 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비일시적 컴퓨터 및/또는 머신 판독가능 매체 상에 저장된 실행가능 명령어들(예컨대, 컴퓨터 및/또는 머신 판독가능 명령어들)을 사용하여 구현될 수 있다. 본 명세서에서 사용되는 바와 같이, 비일시적 컴퓨터 판독가능 매체라는 용어는 임의의 유형의 컴퓨터 판독가능 저장 디바이스 및/또는 저장 디스크를 포함하도록 그리고 전파 신호들을 배제하도록 그리고 전송 매체들을 배제하도록 명확하게 정의된다.
“포함하는(Including)" 및 "포함하는(comprising)"(및 이들의 모든 형태들 및 시제들)은 본 명세서에서 개방형 용어들(open ended terms)로 사용된다. 따라서, 청구항이 전제부로서 또는 임의의 종류의 청구항 기재(claim recitation) 내에서 임의의 형태의 "포함한다(include)" 또는 "포함한다(comprise)"(예컨대, 포함한다(comprises), 포함한다(includes), 포함하는(comprising), 포함하는(including), 가지는(having) 등)를 이용할 때마다, 대응하는 청구항 또는 기재의 범위를 벗어나지 않으면서 부가의 요소들, 용어들 등이 존재할 수 있음이 이해되어야 한다. 본 명세서에서 사용되는 바와 같이, 예를 들어, "적어도"라는 문구가 청구항의 전제부에서 이행구(transition term)로서 사용될 때, "포함하는(comprising)" 및 "포함하는(including)"이라는 용어가 개방형인 것과 동일한 방식으로 개방형이다. 예를 들어, A, B, 및/또는 C와 같은 형태로 사용될 때의 용어 "및/또는"은 (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, (7) A와 B와 C와 같은 A, B, C의 임의의 조합 또는 서브세트를 지칭한다.
도 3은 도 1의 온-칩 컴포넌트들(102)에게 전송되기 전에 오프-칩에 저장된 데이터를 압축하기 위해 도 1 및/또는 도 2의 데이터 압축기(106)의 예시적인 구현에 의해 실행될 수 있는 예시적인 머신 판독가능 명령어들을 표현하는 예시적인 플로차트(300)이다. 도 3의 플로차트(300)가 도 1 및/또는 도 2의 예시적인 데이터 압축기(106)와 관련하여 설명되지만, 다른 유형(들)의 데이터 압축기(들) 및/또는 다른 유형(들)의 프로세서(들)가 그 대신에 이용될 수 있다. 도 3의 예시적인 플로차트(300)가 RLE 압축, 허프만 압축, 및/또는 무압축과 관련하여 설명되지만, 다른 압축 기술들이 부가적으로 또는 대안적으로 사용될 수 있다.
블록(302)에서, 예시적인 데이터 슬라이서(들)(202)는 예시적인 메모리 인터페이스(200)를 통해 예시적인 오프-칩 메모리(104)로부터 데이터 세트를 획득한다. 데이터 세트는 데이터 세트의 하드웨어 기반 프로세싱을 수행하기 위해 도 1의 예시적인 온-칩 하드웨어 가속기/신경 네트워크(110)에 의해 사용되도록 되어 있는 예시적인 오프-칩 메모리(104)에 저장된 데이터 세트이다. 블록(304)에서, 데이터 슬라이서(들)(202)는 데이터 세트를 N개의 데이터 블록들로 분할한다. 블록들의 사이즈 및/또는 개수는 사용자 및/또는 제조자 선호사항들에 기초할 수 있다. N개의 데이터 블록들은 균일한 사이즈로 되어 있을 수 있거나 또는 균일한 사이즈로 되어 있지 않을 수 있다. 블록(306)에서, 예시적인 데이터 압축기(106)는, 도 4와 관련하여 아래에 추가로 설명되는 바와 같이, 데이터 블록들을 압축한다.
블록(308)에서, 예시적인 압축된 데이터 어셈블러(212)는 압축된 블록들을 어셈블링하여 압축된 데이터 세트를 생성한다. 예를 들어, 데이터 압축기(106)가 블록들을 순서대로 압축하면, 데이터 어셈블러(212)는 블록들이 압축된 것과 동일한 순서로 압축된 블록들을 부착한다. 데이터 압축기(106)가 블록을 비순차적으로(out of order) 또는 병렬로 압축하면, 데이터 어셈블러(212)는 압축된 데이터 블록들을 데이터 세트로부터의 데이터와 동일한 순서로 재어셈블링할 수 있도록 압축을 모니터링한다. 블록(310)에서, 예시적인 인터페이스(202)는 압축된 데이터 세트를 압축된 데이터로서 저장되도록 도 1의 오프-칩 메모리(104)에게 전송한다.
도 4는, 도 3과 관련하여 위에서 설명된 바와 같이, 데이터 블록들을 압축하기 위해 도 1 및/또는 도 2의 데이터 압축기(106)의 예시적인 구현에 의해 실행될 수 있는 예시적인 머신 판독가능 명령어들을 표현하는 예시적인 플로차트(306)이다. 도 4의 플로차트(306)가 도 1 및/또는 도 2의 예시적인 데이터 압축기(106)와 관련하여 설명되지만, 다른 유형(들)의 데이터 압축기(들) 및/또는 다른 유형(들)의 프로세서(들)가 그 대신에 이용될 수 있다. 도 4의 예시적인 플로차트(306)는 (예컨대, 병렬 데이터 슬라이서들(202), 데이터 프로세서들(204), 압축기들(206), 헤더 생성기들(208), 및/또는 패더들(210)에 의해) 복수의 데이터 블록들에 대해 선형적으로 및/또는 병렬로 수행될 수 있다. 도 4의 예시적인 플로차트(306)가 RLE 압축, 허프만 압축, 및/또는 무압축과 관련하여 설명되지만, 다른 압축 기술들이 부가적으로 또는 대안적으로 사용될 수 있다.
N개의 데이터 블록들 각각에 대해(블록들(402 내지 430)), 예시적인 데이터 프로세서(들)(204)는 데이터 블록의 데이터 전부가 동일한 값 및/또는 문자에 대응하는지를 결정한다(블록(404)). 예를 들어, 데이터 블록이 모두 'a'를 포함하면, 예시적인 데이터 프로세서(들)(204)는 데이터 블록의 데이터 전부가 동일한 문자에 대응한다고 결정한다.
예시적인 데이터 프로세서(들)(204)가 블록의 데이터 전부가 동일한 값 및/또는 문자에 대응한다고 결정하면(블록(404): 예), 예시적인 압축기(들)(206)는 RLE 압축 기술을 수행하여 블록의 데이터를 인코딩/압축한다(블록(406)). 예를 들어, 압축기(들)(206)는 반복된 문자 및/또는 문자가 데이터 블록에서 반복되는 횟수를 식별해주는 데이터 패킷을 생성하도록 헤더 생성기(들)(208)에 지시할 수 있다. 블록(408)에서, 예시적인 헤더 생성기(들)(208)는 데이터 블록이 RLE 압축 기술을 사용하여 압축되었음을 식별해주는, 압축된 데이터와 함께 포함시킬 데이터 패킷 및/또는 헤더를 생성한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 블록을 RLE 압축에 대응하는 것으로 식별할 수 있고 RLE 압축해제 기술들에 기초하여 블록을 압축해제할 수 있다.
예시적인 데이터 프로세서(들)(204)가 블록의 데이터 전부가 동일한 값 및/또는 문자에 대응하는 것은 아니라고 결정하면(블록(404): 아니오), 예시적인 압축기(들)(206)는 부분 허프만 인코딩 기술을 수행하여 데이터 블록을 인코딩/압축한다(블록(412)). 일부 예들에서, 압축기(들)(206)는 전체 허프만 인코딩 기술을 수행할 수 있다. 위에서 설명된 바와 같이, 허프만 인코딩을 적용하기 위해, 예시적인 압축기(들)(206)는 데이터 세트에서의 각각의 문자의 출현 빈도수에 기초하여 허프만 트리를 생성한다. 압축기(들)(206)는 허프만 트리에 기초하여 블록의 데이터의 각각의 문자에 대한 코드를 할당한다. 대부분의 경우들에서, 허프만 인코딩 기술을 사용하여 데이터를 인코딩하는 것은 무인코딩보다 사이즈가 작은 무손실 데이터 압축을 결과한다. 부분 허프만 인코딩 기술을 적용하기 위해, 예시적인 압축기(들)(206)는 허프만 인코딩 기술들을 미리 설정된 개수의 문자들에만 적용하고 나머지 문자들을 인코딩되지 않은 채로 두며, 그에 의해 인코딩 및/또는 디코딩 시간을 증가시키고 허프만 인코딩된 데이터를 디코딩하는 데 필요한 허프만 테이블의 사이즈를 감소시킨다. 부가적으로, 예시적인 압축기(들)(206)는 각각의 문자를 인코딩된 것으로 또는 인코딩되지 않은 것으로 마킹한다.
블록(414)에서, 예시적인 데이터 프로세서(들)(204)는 인코딩된 데이터 및 헤더가 인코딩되지 않은 데이터보다 많은 비트들에 대응하는지를 결정한다. 위에서 설명된 바와 같이, 허프만 또는 부분 허프만 압축 기술은 블록 내에 문자들의 반복을 거의 또는 전혀 갖지 않는 데이터 블록들에 대한 보다 많은 데이터에 대응할 수 있다. 일부 예들에서, 데이터 프로세서(들)(204)는, 블록 내에서의 데이터의 반복에 기초하여, 허프만 또는 부분 허프만 압축이 압축을 수행하기 전에(예컨대, 블록(412) 이전에) 보다 많은 비트들을 결과할 것인지 여부를 결정할 수 있다.
예시적인 데이터 프로세서(들)(204)가 인코딩된 데이터 및 헤더가 인코딩되지 않은 데이터보다 많은 비트들에 대응한다고 결정하면(블록(414): 예), 예시적인 데이터 프로세서(들)(204)는 인코딩된 데이터를 폐기한다(블록(416)). 블록(418)에서, 예시적인 헤더 생성기(들)(208)는 무인코딩에 대응하는 헤더를 생성한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 블록의 데이터가 인코딩되지 않은 및/또는 압축되지 않은 것으로 결정할 수 있다. 블록(420)에서, 예시적인 헤더 생성기(208)는 생성된 헤더를 갖는 블록의 인코딩되지 않은 데이터를 예시적인 압축된 데이터 어셈블러(212)에 전달한다.
예시적인 데이터 프로세서(들)(204)가 인코딩된 데이터가 인코딩되지 않은 데이터보다 많은 비트들에 대응하지 않는다고 결정하면(블록(414): 아니오), 예시적인 헤더 생성기(들)(208)는 허프만 및/또는 부분 허프만(PF) 인코딩에 대응하는 헤더를 생성한다(블록(422)). 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 블록을 허프만 및/또는 PH 압축에 대응하는 것으로 식별할 수 있고 허프만 및/또는 PH 압축해제 기술들에 기초하여 블록을 압축해제할 수 있다. 블록(424)에서, 예시적인 데이터 슬라이서(들)(202)는 인코딩된 데이터를 인코딩된 서브-블록들로 슬라이싱, 분할, 및/또는 그룹화한다. 서브-블록들은 하나 이상의 허프만 코드를 포함할 수 있다. 서브-블록당 허프만 코드들의 개수는 미리 설정될 수 있고, 커스터마이즈가능할 수 있으며, 그리고/또는 사용자 및/또는 제조자 선호사항들에 기초할 수 있다. 예를 들어, 서브-블록당 허프만 코드들의 개수는 예시적인 데이터 압축해제기(108)에서의 병렬 프로세서들의 개수에 대응할 수 있고, 그에 의해 데이터 압축해제기(108)의 프로세싱 용량들을 최적화할 수 있다.
블록(424)에서, 예시적인 패더(들)(210)는 미리 정의된 패턴을 사용하여 인코딩된 서브-블록들을 패딩한다. 위에서 설명된 바와 같이, 상이한 허프만 코드들은 인코딩 프로세스의 결과로서 비균일한(예컨대, 상이한) 길이들에 대응할 수 있다. 예를 들어, 제1 허프만 코드는 2 비트의 데이터일 수 있고, 제2 허프만 코드는 4 비트의 데이터일 수 있다. 그에 따라, 슬라이싱된 서브-블록들의 사이즈는 비균일한(예컨대, 상이한) 길이들에 대응할 수 있다. 따라서, 예시적인 패더(들)(210)는 인코딩된 서브-블록들 각각을 서브-블록의 끝에 대응하는 미리 정의된 패턴으로 패딩한다. 일부 예들에서, 패딩은 각각의 가변 사이즈의 서브-블록이 동일한 길이(예컨대, 선택된 길이)이도록 보장한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 선택된 서브-블록 길이에 기초하여 서브-블록들을 분리함으로써 병렬 압축해제를 위해 압축된 서브-블록들을 분리할 수 있다. 일부 예들에서, 패딩된 서브-블록들은 길이가 상이하다. 그러한 예들에서, 데이터 압축해제기(108)는 헤더에서의 명시된 패딩에 기초하여 인코딩된 블록을 서브-블록들로 분해한다. 블록(428)에서, 예시적인 패더(들)(210)는 도 2의 예시적인 온-칩 컴포넌트들(102)에게 전송하기 전에 순서대로 어셈블링되도록 헤더를 갖는 패딩된 서브-블록들을 예시적인 압축된 데이터 어셈블러(212)에 전달한다.
도 5는 도 1의 예시적인 오프-칩 컴포넌트들(100)로부터의 압축된 데이터를 압축해제하기 위해 도 1 및/또는 도 2의 데이터 압축해제기(108)의 예시적인 구현에 의해 실행될 수 있는 예시적인 머신 판독가능 명령어들을 표현하는 예시적인 플로차트(500)이다. 도 5의 플로차트(500)가 도 1 및/또는 도 2의 예시적인 데이터 압축해제기(108)와 관련하여 설명되지만, 다른 유형(들)의 데이터 압축해제기(들) 및/또는 다른 유형(들)의 프로세서(들)가 그 대신에 이용될 수 있다. 플로차트(500)가 압축된 블록들의 직렬 압축해제와 관련하여 설명되지만, 플로차트는 각각의 블록이 병렬로 프로세싱되는 병렬 압축해제 프로세스와 관련하여 사용될 수 있다.
블록(502)에서, 예시적인 헤더 프로세서(220)는 예시적인 오프-칩 인터페이스(218)로부터 압축된 데이터 세트를 획득한다. 압축된 데이터 세트는 본 명세서에 개시된 기술들을 사용하여 예시적인 데이터 압축기(106)에 의해 압축된, 예시적인 오프-칩 메모리(104)에 저장된 데이터에 대응한다. (예컨대, 단일 압축해제기(222)를 사용하여 순차적으로 프로세싱된) 압축된 데이터 블록들 각각에 대해(블록들(504 내지 530)), 예시적인 헤더 프로세서(220)는 인코딩된 데이터 블록에 대응하는 이용가능한 압축된 블록의 헤더를 식별한다(블록(506)). 위에서 설명된 바와 같이, 데이터의 압축 동안, 각각의 압축된 데이터 블록은 데이터 블록을 압축하는 데 사용되는 압축의 유형을 식별해주는 헤더를 포함한다. 그에 따라, 블록(508)에서, 예시적인 헤더 프로세서(220)는 인코딩된 블록의 헤더에 기초하여 압축 및/또는 인코딩 유형을 결정한다. 도 5의 예시적인 플로차트(500)가 RLE 압축, 허프만 압축, 및/또는 무압축을 사용하여 압축된 데이터와 관련하여 설명되지만, 헤더는 부가의 및/또는 대안의 압축 기술들에 대응할 수 있다. 그러한 예들에서, 데이터 압축해제기(108)는 그러한 부가의 및/또는 대안의 압축 기술들에 기초하여 데이터를 압축해제한다.
(예컨대, 예시적인 데이터 분할기(221)에 의해 분할되고 단일 압축해제기(222)를 사용하여 순차적으로 프로세싱되는) 압축된 데이터 블록들(블록들(508 내지 530)) 각각에 대해, 예시적인 압축해제기(들)(222)는 압축 유형이 RLE 인코딩 및/또는 압축에 대응하는지를 결정한다(블록(510)). 예시적인 압축해제기(들)(222)가 압축 유형이 RLE 인코딩에 대응한다고 결정하면(블록(510): 예), 예시적인 압축해제기(들)(222)는 헤더 정보에 기초하여 데이터를 디코딩하기 위해 RLE 압축해제를 수행한다(블록(512)). 예를 들어, 헤더 정보가 데이터 블록이 16개의 반복된 'a'에 대응한다는 것을 식별해주면, 압축해제기(들)(222)는 데이터를 압축해제하여 16개의 반복된 'a'를 생성한다. 블록(514)에서, 예시적인 압축해제기(들)(222)는 압축해제된 데이터(예컨대, 상기 예에서 16개의 반복된 'a')를 예시적인 압축해제 데이터 어셈블러(224)에 전달한다.
예시적인 압축해제기(들)(222)가 압축 유형이 RLE 인코딩에 대응하지 않는다고 결정하면(블록(510): 아니오), 예시적인 압축해제기(들)(222)는 압축 유형이 인코딩되지 않은 데이터에 대응하는지를 결정한다(블록(516)). 예시적인 압축해제기(들)(222)가 압축 유형이 인코딩되지 않은 데이터에 대응한다고 결정하면(블록(516): 예), 예시적인 압축해제기(들)(222)는 인코딩되지 않은 데이터를 압축해제된 데이터 어셈블러(224)에 전달한다. 예시적인 압축해제기(들)(222)가 압축 유형이 인코딩되지 않은 데이터에 대응하지 않는다고 결정하면(블록(516): 아니오), 예시적인 압축해제기(들)(222)는 헤더에서 식별된 서브-블록 사이즈에 기초하여 허프만 또는 부분 허프만 인코딩된 데이터 블록의 인코딩된 서브-블록들을 결정한다(블록(520)). 위에서 설명된 바와 같이, 예시적인 데이터 압축기(106)는 데이터 블록의 서브-블록의 끝들을 미리 정의된 끝 패턴으로 패딩한다. 이러한 방식으로, 예시적인 압축해제기(들)(222)는 헤더에서 식별된 서브-블록 사이즈에 기초하여 블록을 서브-블록들로 분해할 수 있다.
(예컨대, 예시적인 데이터 분할기(221)에 의해 서브-블록들로 분할되고 단일 압축해제기(222)를 사용하여 선형으로 프로세싱되거나 또는 다수의 압축해제기들(222)을 사용하여 병렬로 프로세싱되는) 각각의 인코딩된 서브-블록에 대해(블록들(520 내지 528)), 예시적인 압축해제기(들)(222)는 인코딩된 서브-블록에 대해 블록(예컨대, 부분적 또는 전체 허프만) 디코딩을 수행한다(블록(524)). 예를 들어, 압축해제기(들)(222)는 허프만 코드들을 압축해제된 데이터를 표현하는 문자에 대응시키는 허프만 테이블을 이용하여 인코딩된 것으로 마킹된 문자들을 압축해제 및/또는 디코딩하고 인코딩되지 않은 것으로 마킹된 문자들을 변경되지 않은 채로 유지한다. 블록(526)에서, 예시적인 압축해제기(들)(222)는 디코딩된 서브-블록을 압축해제된 데이터 어셈블러(224)에 전달한다. 블록(529)에서, 예시적인 압축해제된 데이터 어셈블러(224)는 서브-블록들을 압축해제된 블록으로 어셈블링한다.
블록(532)에서, 예시적인 압축해제된 데이터 어셈블러(224)는 예시적인 오프-칩 메모리(104)에 저장된 데이터 세트에 대응하여 순서대로 디코딩된 블록들을 압축해제된 데이터 세트로 어셈블링한다. 블록(534)에서, 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226)는 압축해제된 데이터 세트를 도 1의 하드웨어 가속기/신경 네트워크(110)에게 전송한다.
도 6은 도 1 및/또는 도 2의 예시적인 데이터 압축기(106)를 사용하여 도 1의 예시적인 오프-칩 컴포넌트들(100)로부터의 데이터의 예시적인 데이터 압축해제 프로세스(600)를 예시한다. 예시적인 압축해제 프로세스(600)는 예시적인 데이터 세트(601), 예시적인 데이터 블록(602), 예시적인 결정 블록들(604, 614), 예시적인 RLE 압축(606), 예시적인 헤더들(608, 616, 620), 예시적인 압축된 데이터 세트(610), 예시적인 인코딩된 블록(612), 예시적인 허프만 압축(613), 예시적인 인코딩되지 않은 데이터 블록(618), 예시적인 인코딩된 블록(622), 예시적인 슬라이싱(624), 예시적인 인코딩된 서브-블록들(626), 및 예시적인 패딩(628)을 포함한다.
도 6의 예시적인 데이터 세트(601)는 예시적인 오프-칩 메모리(100)에 저장된 데이터에 대응한다. 예시적인 데이터 슬라이서(들)(202)는 데이터 세트(601)를, 예시적인 데이터 블록(602)을 포함한, 데이터 블록들로 슬라이싱한다. 일단 슬라이싱되면, 예시적인 데이터 프로세서(들)(204)는 결정 블록(604)에서 데이터 블록(602)의 데이터의 특성들에 기초하여 인코딩 기술을 선택한다. 데이터 프로세서(들)(204)가 블록의 데이터 전부가 동일하다고 결정하면, 데이터 프로세서(들)(204)는 데이터 블록(602)을 압축하기 위해 RLE 압축(606)을 선택한다. 데이터 프로세서(들)(204)가 블록의 데이터 전부가 동일한 것은 아니라고 결정하면, 데이터 프로세서(들)(204)는 부분 허프만 압축(또는 전체 허프만 압축)(613)을 선택한다.
RLE 압축(606)이 선택되면, 예시적인 헤더 생성기(들)(208)는, 데이터 블록 내의 데이터 전부를 표현하는 값 및 헤더에서 식별된 반복 횟수를 식별해주는, RLE 압축 기술에 대응하는 예시적인 헤더(608)를 생성한다. 따라서, 예시적인 헤더(608)는 압축된 데이터 세트(610)에 인코딩된 데이터 블록(612)으로서 포함된다. 부분 허프만 압축(613)이 선택되면, 일단 압축기(들)(206)가 부분 허프만 압축(613)을 수행하면, 데이터 프로세서(들)(204)는 인코딩된 데이터 및 헤더가 임계치(예컨대, 인코딩되지 않은 데이터 블록(602)에 대응하는 데이터의 양에 대응하는 임계치)보다 큰지를 결정한다. 데이터 프로세서(들)(204)가 인코딩된 데이터 및 대응하는 헤더가 임계치보다 크다고 결정하면, 압축기(들)(206)는 인코딩된 데이터 블록을 폐기하고 예시적인 헤더 생성기(들)(208)는 무인코딩에 대응하는 예시적인 헤더(616)를 생성하며 헤더(616)를 인코딩되지 않은 데이터 블록(602)과 함께 압축된 데이터 세트(610)의 인코딩된 블록(612)으로서 포함시킨다.
데이터 프로세서(들)(204)가 인코딩된 데이터 및 대응하는 헤더가 임계치보다 작다고 결정하면, 예시적인 헤더 생성기(들)(208)는 부분 허프만 압축(613)을 식별해주는 예시적인 헤더(620)를 생성한다. 부가적으로, 예시적인 데이터 슬라이서(들)(202)는 허프만 인코딩된 데이터(622)를 예시적인 슬라이싱 블록(624)에서 슬라이싱하여 인코딩된 서브-블록들(626)을 생성한다. 인코딩된 데이터 서브-블록들(626)이 비균일한 사이즈로 되어 있을 수 있기 때문에(예컨대, 각각의 데이터 서브-블록(626)이 상이한 사이즈에 대응할 수 있기 때문에), 예시적인 패더(들)(210)는 예시적인 패딩 블록(628)에서 인코딩된 데이터 서브-블록들(626)을 선택된 패턴으로 패딩한다. 부가적으로, 헤더 생성기(208)는 각각의 서브-블록의 사이즈를 헤더에 추가한다. 이러한 방식으로, 예시적인 데이터 압축해제기(108)는 인코딩된 블록(612)을 식별된 사이즈에 기초하여 예시적인 인코딩된 데이터 서브-블록(626)으로 분해할 수 있다. 일단 패딩되면, 헤더(620) 및 패딩된 서브-블록들 및 대응하는 헤더들은 예시적인 압축된 데이터 세트(610)에 인코딩된 블록(612)으로서 포함된다.
도 7은 도 2의 예시적인 데이터 압축기(106)를 구현하기 위해 도 3 및 도 4의 명령어들을 실행하도록 구성된 예시적인 프로세서 플랫폼(700)의 블록 다이어그램이다. 프로세서 플랫폼(700)은, 예를 들어, 서버, 개인 컴퓨터, 워크스테이션, 자가 학습 머신(예컨대, 신경 네트워크), 모바일 디바이스(예컨대, 셀 폰, 스마트 폰, iPadTM와 같은 태블릿 등), 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
예시된 예의 프로세서 플랫폼(700)은 프로세서(712)를 포함한다. 예시된 예의 프로세서(712)는 하드웨어이다. 예를 들어, 프로세서(712)는 임의의 원하는 패밀리 또는 제조자로부터의 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서, GPU, DSP, 또는 컨트롤러에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예컨대, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 프로세서는 도 2의 예시적인 메모리 인터페이스(200), 예시적인 데이터 슬라이서(들)(202), 예시적인 데이터 프로세서(들)(204), 예시적인 압축기(들)(206), 예시적인 헤더 생성기(들)(208), 예시적인 패더(들)(210), 및/또는 예시적인 압축된 데이터 어셈블러(212)를 구현한다.
예시된 예의 프로세서(712)는 로컬 메모리(713)(예컨대, 캐시)를 포함한다. 일부 예들에서, 로컬 메모리(713)는 예시적인 결과 스토리지를 구현한다. 예시된 예의 프로세서(712)는 버스(718)를 통해 휘발성 메모리(714) 및 비휘발성 메모리(716)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(714)는 SDRAM(Synchronous Dynamic Random Access Memory), DRAM(Dynamic Random Access Memory), RDRAM®(RAMBUS® Dynamic Random Access Memory), 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비휘발성 메모리(716)는 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(714, 716)에 대한 액세스는 메모리 컨트롤러에 의해 제어된다.
예시된 예의 프로세서 플랫폼(700)은 인터페이스 회로(720)를 또한 포함한다. 인터페이스 회로(720)는, 이더넷 인터페이스, USB(universal serial bus), Bluetooth® 인터페이스, NFC(near field communication) 인터페이스, 및/또는 PCI express 인터페이스와 같은, 임의의 유형의 인터페이스 표준에 의해 구현될 수 있다.
예시된 예에서, 하나 이상의 입력 디바이스(722)가 인터페이스 회로(720)에 접속된다. 입력 디바이스(들)(722)는 사용자가 데이터 및/또는 커맨드들을 프로세서(712)에 입력할 수 있게 해준다. 입력 디바이스(들)는, 예를 들어, 오디오 센서, 마이크로폰, 카메라(스틸 또는 비디오), 키보드, 버튼, 마우스, 터치스크린, 트랙 패드, 트랙볼, 아이소포인트(isopoint) 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(724)가 예시된 예의 인터페이스 회로(720)에 또한 접속된다. 출력 디바이스들(724)은, 예를 들어, 디스플레이 디바이스들(예컨대, LED(light emitting diode), OLED(organic light emitting diode), LCD(liquid crystal display), CRT(cathode ray tube) 디스플레이, IPS(in-place switching) 디스플레이, 터치스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 예시된 예의 인터페이스 회로(720)는 따라서 전형적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
예시된 예의 인터페이스 회로(720)는 네트워크(726)를 통한 외부 머신들(예컨대, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하기 위해 송신기, 수신기, 트랜시버, 모뎀, 주택용 게이트웨이(residential gateway), 무선 액세스 포인트, 및/또는 네트워크 인터페이스와 같은 통신 디바이스를 또한 포함한다. 통신은, 예를 들어, 이더넷 접속, DSL(digital subscriber line) 접속, 전화선 접속, 동축 케이블 시스템, 위성 시스템, 가시선(line-of-site) 무선 시스템, 셀룰러 전화 시스템 등을 통할 수 있다.
예시된 예의 프로세서 플랫폼(700)은 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(728)를 또한 포함한다. 그러한 대용량 저장 디바이스들(728)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 콤팩트 디스크 드라이브들, 블루레이 디스크 드라이브들, RAID(redundant array of independent disks) 시스템들, 및 DVD(digital versatile disk) 드라이브들을 포함한다.
도 3 및 도 4의 머신 실행가능 명령어들(732)은 대용량 저장 디바이스(728)에, 휘발성 메모리(714)에, 비휘발성 메모리(716)에, 및/또는 CD 또는 DVD와 같은 이동식 비일시적 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다.
도 8은 도 2의 예시적인 데이터 압축기(106)를 구현하기 위해 도 5의 명령어들을 실행하도록 구성된 예시적인 프로세서 플랫폼(800)의 블록 다이어그램이다. 프로세서 플랫폼(800)은, 예를 들어, 서버, 개인 컴퓨터, 워크스테이션, 자가 학습 머신(예컨대, 신경 네트워크), 모바일 디바이스(예컨대, 셀 폰, 스마트 폰, iPadTM와 같은 태블릿 등), 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
예시된 예의 프로세서 플랫폼(800)은 프로세서(812)를 포함한다. 예시된 예의 프로세서(812)는 하드웨어이다. 예를 들어, 프로세서(812)는 임의의 원하는 패밀리 또는 제조자로부터의 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서, GPU, DSP, 또는 컨트롤러에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예컨대, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 프로세서는 도 2의 예시적인 오프-칩 인터페이스(218), 예시적인 헤더 프로세서(220), 예시적인 데이터 분할기(221), 예시적인 압축해제기(들)(222), 예시적인 압축해제된 데이터 어셈블러(224), 및/또는 예시적인 하드웨어 가속기/신경 네트워크 인터페이스(226)를 구현한다.
예시된 예의 프로세서(812)는 로컬 메모리(813)(예컨대, 캐시)를 포함한다. 일부 예들에서, 로컬 메모리(813)는 예시적인 결과 스토리지를 구현한다. 예시된 예의 프로세서(812)는 버스(818)를 통해 휘발성 메모리(814) 및 비휘발성 메모리(816)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(814)는 SDRAM(Synchronous Dynamic Random Access Memory), DRAM(Dynamic Random Access Memory), RDRAM®(RAMBUS® Dynamic Random Access Memory), 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비휘발성 메모리(816)는 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(814, 816)에 대한 액세스는 메모리 컨트롤러에 의해 제어된다.
예시된 예의 프로세서 플랫폼(800)은 인터페이스 회로(820)를 또한 포함한다. 인터페이스 회로(820)는, 이더넷 인터페이스, USB(universal serial bus), Bluetooth® 인터페이스, NFC(near field communication) 인터페이스, 및/또는 PCI express 인터페이스와 같은, 임의의 유형의 인터페이스 표준에 의해 구현될 수 있다.
예시된 예에서, 하나 이상의 입력 디바이스(822)가 인터페이스 회로(820)에 접속된다. 입력 디바이스(들)(822)는 사용자가 데이터 및/또는 커맨드들을 프로세서(812)에 입력할 수 있게 해준다. 입력 디바이스(들)는, 예를 들어, 오디오 센서, 마이크로폰, 카메라(스틸 또는 비디오), 키보드, 버튼, 마우스, 터치스크린, 트랙 패드, 트랙볼, 아이소포인트(isopoint) 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(824)가 예시된 예의 인터페이스 회로(820)에 또한 접속된다. 출력 디바이스들(824)은, 예를 들어, 디스플레이 디바이스들(예컨대, LED(light emitting diode), OLED(organic light emitting diode), LCD(liquid crystal display), CRT(cathode ray tube) 디스플레이, IPS(in-place switching) 디스플레이, 터치스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 예시된 예의 인터페이스 회로(820)는 따라서 전형적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
예시된 예의 인터페이스 회로(820)는 네트워크(826)를 통한 외부 머신들(예컨대, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하기 위해 송신기, 수신기, 트랜시버, 모뎀, 주택용 게이트웨이(residential gateway), 무선 액세스 포인트, 및/또는 네트워크 인터페이스와 같은 통신 디바이스를 또한 포함한다. 통신은, 예를 들어, 이더넷 접속, DSL(digital subscriber line) 접속, 전화선 접속, 동축 케이블 시스템, 위성 시스템, 가시선(line-of-site) 무선 시스템, 셀룰러 전화 시스템 등을 통할 수 있다.
예시된 예의 프로세서 플랫폼(800)은 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(828)를 또한 포함한다. 그러한 대용량 저장 디바이스들(828)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 콤팩트 디스크 드라이브들, 블루레이 디스크 드라이브들, RAID(redundant array of independent disks) 시스템들, 및 DVD(digital versatile disk) 드라이브들을 포함한다.
도 5의 머신 실행가능 명령어들(832)은 대용량 저장 디바이스(828)에, 휘발성 메모리(814)에, 비휘발성 메모리(816)에, 및/또는 CD 또는 DVD와 같은 이동식 비일시적 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다.
데이터를 압축하기 위한 예시적인 방법들, 장치들, 시스템들, 및 제조 물품들이 본 명세서에 개시된다. 추가의 예들 및 이들의 조합들은 다음과 같은 것을 포함한다:
예 1은 장치를 포함하며, 이 장치는 데이터를 저장하기 위한 오프-칩 메모리, 데이터 세트를 복수의 데이터 블록들로 분할하기 위한 데이터 슬라이서, 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 제1 블록의 제1 특성들에 기초하여 선택하고, 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 제2 블록의 제2 특성들에 기초하여 선택하기 위한 데이터 프로세서, 제1 압축 기술을 사용하여 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하기 위한 제1 압축기, 제2 압축 기술을 사용하여 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하기 위한 제2 압축기, 제1 압축 기술을 식별해주는 제1 헤더 및 제2 압축 기술을 식별해주는 제2 헤더를 생성하기 위한 헤더 생성기, 및 오프-칩 메모리에 저장되도록 제1 헤더를 갖는 제1 압축된 데이터 블록 및 제2 헤더를 갖는 제2 압축된 데이터 블록을 전송하기 위한 인터페이스를 포함한다.
예 2는 예 1의 장치를 포함하고, 여기서 데이터 프로세서는 블록의 데이터가 동일한 값에 대응할 때 제1 압축 기술을 선택하고 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 제2 압축 기술을 선택하도록 되어 있다.
예 3은 예 1의 장치를 포함하고, 여기서 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나이다.
예 4는 예 3의 장치를 포함하고, 여기서 데이터 프로세서는 허프만 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때 제1 압축 기술을 무압축 기술로 선택하도록 되어 있다.
예 5는 예 1의 장치를 포함하고, 여기서 압축기는 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하도록 되어 있다.
예 6은 예 5의 장치를 포함하고, 여기서 제1 압축된 데이터 서브-블록들은 사이즈가 비균일하다.
예 7은 예 5의 장치를 포함하고, 서브-블록들에 패턴을 추가함으로써 서브-블록들을 패턴으로 패딩하기 위한 하나 이상의 패더를 추가로 포함한다.
예 8은 예 1의 장치를 포함하고, 여기서 데이터 블록들은 균일한 사이즈로 되어 있다.
예 9는 예 1의 장치를 포함하고, 여기서 제1 압축기와 제2 압축기는 각자의 블록들에 대해 제1 및 제2 압축 기술들을 병렬로 수행하도록 되어 있다.
예 10은 예 1의 장치를 포함하고, 여기서 압축기는, 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하도록 되어 있다.
예 11은 예 10의 장치를 포함하고, 여기서 제1 헤더는 무압축 기술을 식별해준다.
예 12는, 실행될 때, 머신으로 하여금 적어도 데이터 세트를 복수의 데이터 블록들로 분할하게 하고, 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 제1 블록의 제1 특성들에 기초하여 선택하게 하며, 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 제2 블록의 제2 특성들에 기초하여 선택하게 하고, 제1 압축 기술을 사용하여 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하게 하며, 제2 압축 기술을 사용하여 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하게 하고, 제1 압축 기술을 식별해주는 제1 헤더 및 제2 압축 기술을 식별해주는 제2 헤더를 생성하게 하며, 제1 헤더를 갖는 제1 압축된 데이터 블록 및 제2 헤더를 갖는 제2 압축된 데이터 블록을 오프-칩 메모리에 저장하게 하는 명령어들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체를 포함한다.
예 13은 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 블록의 데이터가 동일한 값에 대응할 때 제1 압축 기술을 선택하고 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 제2 압축 기술을 선택하게 한다.
예 14는 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나이다.
예 15는 예 14의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 허프만 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때 제1 압축 기술을 무압축 기술로 선택하게 한다.
예 16은 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하게 한다.
예 17은 예 16의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 압축된 데이터 서브-블록들은 사이즈가 비균일하다.
예 18은 예 16의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 서브-블록들에 패턴을 추가함으로써 서브-블록들을 패턴으로 패딩하게 한다.
예 19는 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 데이터 블록들은 균일한 사이즈로 되어 있다.
예 20은 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 각자의 블록들에 대해 제1 및 제2 압축 기술들을 병렬로 수행하게 한다.
예 21은 예 12의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금, 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하게 한다.
예 22는 예 20의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 헤더는 무압축 기술을 식별해준다.
예 23는 방법을 포함하고, 이 방법은 데이터 세트를 복수의 데이터 블록들로 분할하는 단계, 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 제1 블록의 제1 특성들에 기초하여 선택하는 단계, 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 제2 블록의 제2 특성들에 기초하여 선택하는 단계, 제1 압축 기술을 사용하여 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하는 단계, 제2 압축 기술을 사용하여 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하는 단계, 제1 압축 기술을 식별해주는 제1 헤더 및 제2 압축 기술을 식별해주는 제2 헤더를 생성하는 단계, 및 제1 헤더를 갖는 제1 압축된 데이터 블록 및 제2 헤더를 갖는 제2 압축된 데이터 블록을 오프-칩 메모리에 저장하는 단계를 포함한다.
예 24는 예 23의 방법을 포함하고, 여기서 블록의 데이터가 동일한 값에 대응할 때 제1 압축 기술이 선택되고 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 제2 압축 기술이 선택된다.
예 25는 예 23의 방법을 포함하고, 여기서 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나이다.
예 26은 예 25의 방법을 포함하고, 여기서 허프만 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때 제1 압축 기술은 무압축 기술로 선택된다.
예 27은 예 23의 방법을 포함하고, 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하는 단계를 추가로 포함한다.
예 28은 예 27의 방법을 포함하고, 여기서 제1 압축된 데이터 서브-블록들은 사이즈가 비균일하다.
예 29는 예 27의 방법을 포함하고, 서브-블록들에 패턴을 추가함으로써 서브-블록들을 패턴으로 패딩하는 단계를 추가로 포함한다.
예 30은 예 23의 방법을 포함하고, 여기서 데이터 블록들은 균일한 사이즈로 되어 있다.
예 31은 예 23의 방법을 포함하고, 여기서 제1 및 제2 압축 기술들은 각자의 블록들에 대해 병렬로 수행된다.
예 32는 예 23의 방법을 포함하고, 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하는 단계를 추가로 포함한다.
예 33은 예 32의 방법을 포함하고, 여기서 제1 헤더는 무압축 기술을 식별해준다.
예 34는 예시적인 컴퓨터 판독가능 매체가, 실행될 때, 머신으로 하여금 실행을 위해 제2 명령어들을 분배, 구성, 어셈블링, 설치, 인스턴스화, 검색, 압축해제, 및 복호화 중 적어도 하나를 하게 하는 제1 명령어들, 실행될 때, 머신으로 하여금 적어도 데이터 세트를 복수의 데이터 블록들로 분할하게 하고, 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 제1 블록의 제1 특성들에 기초하여 선택하게 하며, 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 제2 블록의 제2 특성들에 기초하여 선택하게 하고, 제1 압축 기술을 사용하여 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하게 하며, 제2 압축 기술을 사용하여 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하게 하고, 제1 압축 기술을 식별해주는 제1 헤더 및 제2 압축 기술을 식별해주는 제2 헤더를 생성하게 하며, 제1 헤더를 갖는 제1 압축된 데이터 블록 및 제2 헤더를 갖는 제2 압축된 데이터 블록을 오프-칩 메모리에 저장하게 하는 제2 명령어들을 포함한다는 것이다.
예 35는 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 블록의 데이터가 동일한 값에 대응할 때 제1 압축 기술을 선택하고 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 제2 압축 기술을 선택하게 한다.
예 36은 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나이다.
예 37은 예 36의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 허프만 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때 제1 압축 기술을 무압축 기술로 선택하게 한다.
예 38은 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하게 한다.
예 39는 예 38의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 압축된 데이터 서브-블록들은 사이즈가 비균일하다.
예 40은 예 38의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 서브-블록들에 패턴을 추가함으로써 서브-블록들을 패턴으로 패딩하게 한다.
예 41은 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 데이터 블록들은 균일한 사이즈로 되어 있다.
예 42는 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금 각자의 블록들에 대해 제1 및 제2 압축 기술들을 병렬로 수행하게 한다.
예 43은 예 34의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 명령어들은 머신으로 하여금, 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하게 한다.
예 44는 예 42의 컴퓨터 판독가능 저장 매체를 포함하고, 여기서 제1 헤더는 무압축 기술을 식별해준다.
전술한 내용으로부터, 오프-칩 메모리에 저장된 데이터를 온-칩 신경 네트워크 및/또는 하드웨어 가속기에게 전송되기 전에 압축하기 위한 예시적인 방법들, 장치들 및 제조 물품들이 개시되었다는 것이 이해될 것이다. 개시된 방법들, 장치들 및 제조 물품들은 메모리 용량을 증가시키기 위해 온-칩 신경 네트워크 및/또는 하드웨어 가속기와 함께 오프-칩 메모리의 이용을 용이하게 함으로써 컴퓨팅 디바이스의 효율을 개선시킨다. 본 명세서에 개시된 예들을 사용하여, 사용자는 보다 높은 압축률을 달성하기 위해 압축 스킴을 특정 애플리케이션 데이터 프로파일에 맞춰 조정할 수 있다. 오프-칩 컴포넌트들로부터 온-칩 컴포넌트들에게 데이터를 전송하기 전에 데이터를 압축함으로써, 본 명세서에 개시된 예들은 압축 없이 데이터를 전송하는 것의 병목 효과를 방지하거나 또는 다른 방식으로 감소시킨다. 부가적으로, 데이터를 데이터 블록 및/또는 데이터 서브-블록들로 분해함으로써, 본 명세서에 개시된 예들은 온-칩 컴포넌트들을 사용하여 데이터의 병렬 디코딩을 용이하게 하며, 그에 의해 온-칩 컴포넌트들에 대한 프로세싱 대역폭을 증가시킨다. 부분 허프만 인코딩 스킴을 사용하여, 본 명세서에 개시된 예들은 하드웨어 메모리 제한 및 속도 요구사항과 호환되도록 허프만 인코딩 룩업 테이블 요구사항들을 감소시킨다. 그에 따라, 개시된 방법들, 장치들 및 제조 물품들은 그에 따라 컴퓨터의 기능에서의 하나 이상의 개선(들)에 관한 것이다.
특정한 예시적인 방법들, 장치들 및 제조 물품들이 본 명세서에 개시되었지만, 본 특허의 보호 범위는 이에 제한되지 않는다. 반대로, 본 특허는 본 특허의 청구항들의 범위 내에 명백히 속하는 모든 방법들, 장치들 및 제조 물품들을 포함한다.

Claims (33)

  1. 장치로서,
    데이터를 저장하기 위한 오프-칩 메모리;
    데이터 세트를 복수의 데이터 블록들로 분할하기 위한 데이터 슬라이서;
    데이터 프로세서 - 상기 데이터 프로세서는,
    상기 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 상기 제1 블록의 제1 특성들에 기초하여 선택하고;
    상기 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 상기 제2 블록의 제2 특성들에 기초하여 선택하기 위한 것임 - ;
    상기 제1 압축 기술을 사용하여 상기 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하기 위한 제1 압축기;
    상기 제2 압축 기술을 사용하여 상기 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하기 위한 제2 압축기;
    상기 제1 압축 기술을 식별해주는 제1 헤더 및 상기 제2 압축 기술을 식별해주는 제2 헤더를 생성하기 위한 헤더 생성기; 및
    상기 오프-칩 메모리에 저장되도록 상기 제1 헤더를 갖는 상기 제1 압축된 데이터 블록 및 상기 제2 헤더를 갖는 상기 제2 압축된 데이터 블록을 전송하기 위한 인터페이스
    를 포함하는 장치.
  2. 제1항에 있어서, 상기 데이터 프로세서는 상기 블록의 데이터가 동일한 값에 대응할 때 상기 제1 압축 기술을 선택하고 상기 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 상기 제2 압축 기술을 선택하도록 되어 있는 장치.
  3. 제1항에 있어서, 상기 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나인 장치.
  4. 제3항에 있어서, 데이터 프로세서는 허프만 압축 기술이 상기 무압축 기술보다 많은 데이터를 결과할 때 상기 제1 압축 기술을 상기 무압축 기술로 선택하도록 되어 있는 장치.
  5. 제1항에 있어서, 상기 압축기는 상기 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하도록 되어 있는 장치.
  6. 제5항에 있어서, 상기 제1 압축된 데이터 서브-블록들은 사이즈가 비균일한 장치.
  7. 제5항에 있어서, 상기 서브-블록들에 패턴을 추가함으로써 상기 서브-블록들을 상기 패턴으로 패딩하기 위한 하나 이상의 패더를 추가로 포함하는 장치.
  8. 제1항에 있어서, 상기 데이터 블록들은 균일한 사이즈로 되어 있는 장치.
  9. 제1항에 있어서, 상기 제1 압축기와 상기 제2 압축기는 상기 각자의 블록들에 대해 상기 제1 및 제2 압축 기술들을 병렬로 수행하도록 되어 있는 장치.
  10. 제1항에 있어서, 상기 압축기는, 상기 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 상기 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하도록 되어 있는 장치.
  11. 제10항에 있어서, 제1 헤더는 상기 무압축 기술을 식별해주는 장치.
  12. 명령어들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 명령어들은 실행될 때, 머신으로 하여금 적어도:
    데이터 세트를 복수의 데이터 블록들로 분할하게 하고;
    상기 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 상기 제1 블록의 제1 특성들에 기초하여 선택하게 하며;
    상기 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 상기 제2 블록의 제2 특성들에 기초하여 선택하게 하고;
    상기 제1 압축 기술을 사용하여 상기 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하게 하며;
    상기 제2 압축 기술을 사용하여 상기 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하게 하고;
    상기 제1 압축 기술을 식별해주는 제1 헤더 및 상기 제2 압축 기술을 식별해주는 제2 헤더를 생성하게 하며;
    상기 제1 헤더를 갖는 상기 제1 압축된 데이터 블록 및 상기 제2 헤더를 갖는 상기 제2 압축된 데이터 블록을 오프-칩 메모리에 저장하게 하는 컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서, 상기 명령어들은 상기 머신으로 하여금 상기 블록의 데이터가 동일한 값에 대응할 때 상기 제1 압축 기술을 선택하고 상기 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 상기 제2 압축 기술을 선택하게 하는 컴퓨터 판독가능 저장 매체.
  14. 제12항에 있어서, 상기 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나인 컴퓨터 판독가능 저장 매체.
  15. 제14항에 있어서, 상기 명령어들은 상기 머신으로 하여금 허프만 압축 기술이 상기 무압축 기술보다 많은 데이터를 결과할 때 상기 제1 압축 기술을 상기 무압축 기술로 선택하게 하는 컴퓨터 판독가능 저장 매체.
  16. 제12항에 있어서, 상기 명령어들은 상기 머신으로 하여금 상기 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하게 하는 컴퓨터 판독가능 저장 매체.
  17. 제16항에 있어서, 상기 제1 압축된 데이터 서브-블록들은 사이즈가 비균일한 컴퓨터 판독가능 저장 매체.
  18. 제16항에 있어서, 상기 명령어들은 상기 머신으로 하여금 상기 서브-블록들에 패턴을 추가함으로써 상기 서브-블록들을 상기 패턴으로 패딩하게 하는 컴퓨터 판독가능 저장 매체.
  19. 제12항에 있어서, 상기 데이터 블록들은 균일한 사이즈로 되어 있는 컴퓨터 판독가능 저장 매체.
  20. 제12항에 있어서, 상기 명령어들은 상기 머신으로 하여금 상기 각자의 블록들에 대해 상기 제1 및 제2 압축 기술들을 병렬로 수행하게 하는 컴퓨터 판독가능 저장 매체.
  21. 제12항에 있어서, 상기 명령어들은 상기 머신으로 하여금, 상기 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 상기 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하게 하는 컴퓨터 판독가능 저장 매체.
  22. 제20항에 있어서, 상기 제1 헤더는 상기 무압축 기술을 식별해주는 컴퓨터 판독가능 저장 매체.
  23. 방법으로서,
    데이터 세트를 복수의 데이터 블록들로 분할하는 단계;
    상기 복수의 데이터 블록들 중 제1 블록에 대한 제1 압축 기술을 상기 제1 블록의 제1 특성들에 기초하여 선택하는 단계;
    상기 복수의 데이터 블록들 중 제2 블록에 대한 제2 압축 기술을 상기 제2 블록의 제2 특성들에 기초하여 선택하는 단계;
    상기 제1 압축 기술을 사용하여 상기 제1 블록을 압축하여 제1 압축된 데이터 블록을 생성하는 단계;
    상기 제2 압축 기술을 사용하여 상기 제2 블록을 압축하여 제2 압축된 데이터 블록을 생성하는 단계;
    상기 제1 압축 기술을 식별해주는 제1 헤더 및 상기 제2 압축 기술을 식별해주는 제2 헤더를 생성하는 단계; 및
    상기 제1 헤더를 갖는 상기 제1 압축된 데이터 블록 및 상기 제2 헤더를 갖는 상기 제2 압축된 데이터 블록을 오프-칩 메모리에 저장하는 단계
    를 포함하는 방법.
  24. 제23항에 있어서, 상기 블록의 데이터가 동일한 값에 대응할 때 상기 제1 압축 기술이 선택되고 상기 블록의 데이터가 적어도 하나의 상이한 값을 포함할 때 상기 제2 압축 기술이 선택되는 방법.
  25. 제23항에 있어서, 상기 제1 압축 기술은 허프만 압축 기술, RLE 압축 기술, 또는 무압축 기술 중 적어도 하나인 방법.
  26. 제25항에 있어서, 허프만 압축 기술이 상기 무압축 기술보다 많은 데이터를 결과할 때 상기 제1 압축 기술은 상기 무압축 기술로 선택되는 방법.
  27. 제23항에 있어서, 상기 제1 압축된 데이터 블록을 제1 압축된 데이터 서브-블록들로 분할하는 단계를 추가로 포함하는 방법.
  28. 제27항에 있어서, 상기 제1 압축된 데이터 서브-블록들은 사이즈가 비균일한 방법.
  29. 제27항에 있어서, 상기 서브-블록들에 패턴을 추가함으로써 상기 서브-블록들을 상기 패턴으로 패딩하는 단계를 추가로 포함하는 방법.
  30. 제23항에 있어서, 상기 데이터 블록들은 균일한 사이즈로 되어 있는 방법.
  31. 제23항에 있어서, 상기 제1 및 제2 압축 기술들은 상기 각자의 블록들에 대해 병렬로 수행되는 방법.
  32. 제23항에 있어서, 상기 제1 선택된 압축 기술이 무압축 기술보다 많은 데이터를 결과할 때, 상기 제1 압축된 데이터 블록을 폐기하고 압축되지 않은 데이터 블록을 유지하는 단계를 추가로 포함하는 방법.
  33. 제32항에 있어서, 상기 제1 헤더는 상기 무압축 기술을 식별해주는 방법.
KR1020200024420A 2019-02-27 2020-02-27 데이터를 압축하기 위한 방법들 및 장치들 KR20200105432A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/288,026 2019-02-27
US16/288,026 US11075647B2 (en) 2019-02-27 2019-02-27 Methods and apparatus to compress data

Publications (1)

Publication Number Publication Date
KR20200105432A true KR20200105432A (ko) 2020-09-07

Family

ID=72139129

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200024420A KR20200105432A (ko) 2019-02-27 2020-02-27 데이터를 압축하기 위한 방법들 및 장치들

Country Status (5)

Country Link
US (2) US11075647B2 (ko)
JP (1) JP2020141402A (ko)
KR (1) KR20200105432A (ko)
CN (1) CN111626411A (ko)
DE (1) DE102020201153A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3633857B1 (en) * 2018-10-03 2022-01-26 BlackBerry Limited Methods and devices for on-the-fly coder mapping updates in point cloud coding
US11075647B2 (en) 2019-02-27 2021-07-27 Movidius Limited Methods and apparatus to compress data
US11405622B2 (en) * 2020-04-22 2022-08-02 Apple Inc. Lossless compression techniques
US11539623B2 (en) 2020-08-31 2022-12-27 Micron Technology, Inc. Single field for encoding multiple elements
US11412075B2 (en) 2020-08-31 2022-08-09 Micron Technology, Inc. Multiple protocol header processing
US11418455B2 (en) * 2020-08-31 2022-08-16 Micron Technology, Inc. Transparent packet splitting and recombining
US11296995B2 (en) 2020-08-31 2022-04-05 Micron Technology, Inc. Reduced sized encoding of packet length field
US11360920B2 (en) 2020-08-31 2022-06-14 Micron Technology, Inc. Mapping high-speed, point-to-point interface channels to packet virtual channels
CN112200301B (zh) * 2020-09-18 2024-04-09 星宸科技股份有限公司 卷积计算装置及方法
US11791838B2 (en) 2021-01-15 2023-10-17 Samsung Electronics Co., Ltd. Near-storage acceleration of dictionary decoding
CN113485950A (zh) * 2021-06-22 2021-10-08 上海天数智芯半导体有限公司 一种合并发送PCIe存储器写请求的系统及方法
CN113381768B (zh) * 2021-08-11 2021-11-09 苏州浪潮智能科技有限公司 一种哈夫曼校正编码方法、系统及相关组件
CN117579079B (zh) * 2024-01-15 2024-03-29 每日互动股份有限公司 一种数据压缩的处理方法、装置、设备及介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8194736B2 (en) * 2008-04-15 2012-06-05 Sony Corporation Video data compression with integrated lossy and lossless compression
EP2483777A4 (en) * 2009-09-30 2016-05-11 Altera Corp ENHANCED EXCHANGE OF WAVEFORM DATA BETWEEN MULTIPLE PROCESSORS USING COMPRESSION AND DECOMPRESSION
US9158686B2 (en) * 2012-03-30 2015-10-13 Altera Corporation Processing system and method including data compression API
JP6629165B2 (ja) * 2016-10-07 2020-01-15 株式会社東芝 データ圧縮装置、及び、データ伸張装置、並びに、データ圧縮伸張装置
US10691361B2 (en) * 2017-02-24 2020-06-23 Microsoft Technology Licensing, Llc Multi-format pipelined hardware decompressor
US11075647B2 (en) 2019-02-27 2021-07-27 Movidius Limited Methods and apparatus to compress data

Also Published As

Publication number Publication date
US11075647B2 (en) 2021-07-27
US11817887B2 (en) 2023-11-14
US20220158654A1 (en) 2022-05-19
CN111626411A (zh) 2020-09-04
JP2020141402A (ja) 2020-09-03
DE102020201153A1 (de) 2020-08-27
US20200274552A1 (en) 2020-08-27

Similar Documents

Publication Publication Date Title
KR20200105432A (ko) 데이터를 압축하기 위한 방법들 및 장치들
PH12020500016A1 (en) Picture data encoding method and apparatus and picture data decoding method and apparatus
JP2022516847A (ja) 適応ポイントクラウド属性コーディングのための方法、装置、及びコンピュータプログラム
CN104579356B (zh) 在存在重现的霍夫曼树的情况下加速解压缩的方法和系统
KR20160123302A (ko) 데이터의 소스-인코딩 및 디코딩 디바이스 및 방법
US11817886B2 (en) Parallel decompression of compressed data streams
EP3161965A1 (en) Encoder and decoder
AU2019253866A1 (en) Image compression method and apparatus
US8866645B2 (en) Method and apparatus for compression of generalized sensor data
CN107680144B (zh) 一种WebP文件转换的方法及装置
JP7379524B2 (ja) ニューラルネットワークモデルの圧縮/解凍のための方法および装置
JP2019529979A (ja) インデックスコーディング及びビットスケジューリングを備えた量子化器
JP7337950B2 (ja) ニューラルネットワークモデル圧縮のための量子化、適応ブロック分割、及びコードブック符号化の方法及び装置、並びにコンピュータープログラム
US10607618B2 (en) Encoder and encoding method, decoder and decoding method, and program
US10511695B2 (en) Packet-level clustering for memory-assisted compression of network traffic
CN103746701A (zh) 一种用于Rice无损数据压缩的快速编码选项选择方法
CN105338371A (zh) 一种多媒体转码调度方法和装置
JP6005273B2 (ja) データストリームの符号化方法、送信方法、伝送方法、データストリームを符号化するための符号化装置、送信装置、および、伝送装置
US10841405B1 (en) Data compression of table rows
KR101541869B1 (ko) 가변길이코딩을 이용한 인코딩 방법, 디코딩 방법, 및 그 시스템
US10491241B1 (en) Data compression scheme utilizing a repetitive value within the data stream
US8422560B2 (en) Method and apparatus for encoding/decoding media signal
CN115391297A (zh) 文件处理方法、装置、电子设备和存储介质
US9648144B2 (en) Data compression method and decompression method
KR20230002833A (ko) 선형 예측 코딩 파라미터 코딩 방법 및 코딩 장치