KR20200122253A - 하드웨어 채널-병렬 데이터 압축/압축 해제 - Google Patents

하드웨어 채널-병렬 데이터 압축/압축 해제 Download PDF

Info

Publication number
KR20200122253A
KR20200122253A KR1020200046184A KR20200046184A KR20200122253A KR 20200122253 A KR20200122253 A KR 20200122253A KR 1020200046184 A KR1020200046184 A KR 1020200046184A KR 20200046184 A KR20200046184 A KR 20200046184A KR 20200122253 A KR20200122253 A KR 20200122253A
Authority
KR
South Korea
Prior art keywords
multiplexer
column
data
bitstream
input
Prior art date
Application number
KR1020200046184A
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 KR20200122253A publication Critical patent/KR20200122253A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/04Protocols for data compression, e.g. ROHC
    • 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
    • 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/3066Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • 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
    • 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
    • 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/6005Decoder aspects
    • 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/6011Encoder aspects
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L5/00Arrangements affording multiple use of the transmission path
    • H04L5/02Channels characterised by the type of signal
    • H04L5/023Multiplexing of multicarrier modulation signals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Neurology (AREA)
  • Computer Security & Cryptography (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

다중채널 데이터 패커는 복수의 2-입력 멀티플렉서들과 컨트롤러를 포함한다. 복수의 2-입력 멀티플렉서들은 2N행 및 N열로 배열되며, N은 1보다 큰 정수이다. 제 1 열에 위치하는 각 멀티플렉서의 각 입력은 2N개 채널들의 비트스트림 중 각각의 비트스트림을 수신한다. 상기 각각의 비트스트림은 상기 각각의 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함한다. 상기 컨트롤러는 마지막 열에 위치하는 각 멀티플렉서에서 각각이 동일한 비트스트림 길이를 포함하는 2N개 채널들의 패킹된(packed) 비트스트림을 출력하게끔 제어하도록 구성된다.

Description

하드웨어 채널-병렬 데이터 압축/압축 해제 {HARDWARE CHANNEL-PARALLEL DATA COMPRESSION/DECOMPRESSION}
본 발명은 다중채널 데이터 시스템들에 관한 것으로, 좀 더 상세하게는, 다중채널의 비트스트림들을 병렬적으로 압축하거나 압축 해제할 수 있는 시스템에 관한 것이다.
신경망 추론 가속기 하드웨어는 활성화 함수로부터 출력되는 가중치 및 특성 맵과 같은 데이터를 병렬적으로(예를 들어, 16개의 레인들을 동시에 활용하여) 저장 및 회수할 수 있다. 저장 및 검색된 데이터는 많은 제로 값을 포함할 수 있는데, 이러한 제로 값들은 DRAM 및 SRAM 상에서 읽기/쓰기 전력 소모를 줄이고 제로 값들이 차지하는 저장 크기를 줄일 수 있도록 압축되어야 한다. 기존의 데이터 압축 및 압축 해제 알고리즘들(허프만, 사전 기반, ZIP, 실행 길이 인코딩, 골룸라이스 등)은 일반적으로 직렬 처리 방식이기 때문에 한 번에 하나의 데이터 비트스트림만 처리할 수 있다.
본 발명의 목적은, 하드웨어 채널-병렬 데이터 압축/압축 해제 시스템을 제공하는 데 있다.
본 발명의 실시 예에 따르면, 다중채널 데이터 패커는 복수의 2-입력 멀티플렉서들 및 컨트롤러를 포함할 수 있다. 상기 복수의 2-입력 멀티플렉서들은 2N행 및 N열로 배열되며, 상기 N은 1보다 큰 정수이고, 제 1 열에 위치하는 각 멀티플렉서의 각 입력은 2N개 채널들의 비트스트림 중 각각의 비트스트림을 수신하고, 그리고 상기 각각의 비트스트림은 상기 각각의 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함할 수 있다. 상기 컨트롤러는 마지막 열에 위치하는 각 멀티플렉서에서 각각이 동일한 비트스트림 길이를 포함하는 2N개 채널들의 패킹된 비트스트림을 출력하게끔 제어하도록 구성될 수 있다. 예를 들어, 상기 N은 3이고, 상기 복수의 2-입력 멀티플렉서들은 8행 및 3열로 배열되고, 상기 제 1 열에 위치하는 각 멀티플렉서 출력은 같은 행의 제 2 열에 위치하는 각 멀티플렉서 입력과 연결되고, 상기 제 2 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 3 열에 위치하는 각 멀티플렉서 입력과 연결되고, 각 열에 위치하는 각 멀티플렉서는 같은 열에 위치하는 다른 하나의 멀티플렉서와 그룹화되어 상기 각 열에서 복수의 멀티플렉서 쌍들 중 하나를 이루고, 상기 각 열에 위치하는 각 멀티플렉서 쌍은 다른 하나의 열에 위치하는 하나의 멀티플렉서 쌍과 대응하고, 상기 제 1 열에 위치하는 하나의 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 2 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되고, 그리고 상기 제 2 열에 위치하고 상기 대응하는 하나의 멀티플렉서 쌍의 상기 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 3 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되도록 구성될 수 있다. 그리고, 상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함할 수 있다.
본 발명의 실시 예에 따르면, 다중채널 데이터 패커는 8행 및 3열로 배열된 복수의 2-입력 멀티플렉서들을 포함할 수 있다. 제 1 열에 위치하는 각 멀티플렉서 출력은 같은 행의 제 2 열에 위치하는 각 멀티플렉서 입력과 연결되고, 상기 제 2 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 3 열에 위치하는 각 멀티플렉서 입력과 연결되고, 각 열에 위치하는 각 멀티플렉서는 같은 열에 위치하는 다른 하나의 멀티플렉서와 그룹화되어 상기 각 열에서 복수의 멀티플렉서 쌍들 중 하나를 이루고, 상기 각 열에 위치하는 상기 각 멀티플렉서 쌍은 다른 하나의 열에 위치하는 하나의 멀티플렉서 쌍과 대응하고, 상기 제 1 열에 위치하는 하나의 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 2 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되고, 그리고 상기 제 2 열에 위치하고 상기 대응하는 하나의 멀티플렉서 쌍의 상기 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 3 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되도록 구성될 수 있다. 예를 들어, 상기 제 1 열에 위치하는 상기 각 멀티플렉서의 각 입력은 8개 채널들의 비트스트림 중 대응하는 비트스트림을 수신하고, 상기 대응하는 비트스트림은 상기 대응하는 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함하고, 상기 제 3 열에 위치하는 복수의 멀티플렉서들에서 8개 채널들의 패킹된 비트스트림을 출력하고, 그리고 상기 8개 채널들의 패킹된 비트스트림 각각이 동일한 비트스트림 길이를 포함하도록 구성될 수 있다. 그리고, 상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함할 수 있으며, 상기 제로 비트 마스크 영역은 상기 각 비트스트림에서 제로 값의 위치를 나타낼 수 있다.
본 발명의 실시 예에 따르면, 다중채널 데이터 언패커는 복수의 2-입력 멀티플렉서들 및 컨트롤러를 포함할 수 있다. 상기 복수의 2-입력 멀티플렉서들은 2N행 및 N열로 배열되며, 상기 N은 1보다 큰 정수이고, 제 1 열에 위치하는 각 멀티플렉서의 각 입력은 2N개 채널들의 패킹된 비트스트림 중 각각의 비트스트림을 수신하고, 그리고 상기 각각의 패킹된 비트스트림은 모두 동일한 비트스트림 길이를 포함할 수 있다. 상기 컨트롤러는, 마지막 열에 위치하는 각 멀티플렉서에서 2N개 채널들의 언패킹된 비트스트림을 출력하되, 상기 2N개 채널들의 언패킹된 비트스트림 각각이 상기 각각의 언패킹된 비트스트림 내의 언패킹된 데이터에 기초하는 비트스트림 길이를 포함하게끔 제어하도록 구성될 수 있다. 예를 들어, 상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 각 패킹된 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함할 수 있다.
본 발명에 의하면, 다중채널 데이터 시스템이 제공된다. 나아가, 본 발명에 의하면, 다중채널의 비트스트림들을 병렬적으로 압축하거나 압축 해제할 수 있는 하드웨어 채널-병렬 데이터 압축/압축 해제 시스템이 제공된다.
도 1a는 본 발명의 실시 예에 따른 다중채널 데이터 패커의 구성을 예시적으로 보여주는 블록도이다.
도 1b는 본 발명의 실시 예에 따른 버터플라이 셔플러 멀티플렉서의 구성을 예시적으로 보여주는 블록도이다.
도 1c는 본 발명의 실시 예에 따른 버터플라이 셔플러의 구성을 예시적으로 보여주는 블록도이다.
도 1d는 본 발명의 다른 실시 예에 따른 버터플라이 셔플러의 구성을 예시적으로 보여주는 블록도이다.
도 2a 내지 도 2c는 본 발명의 실시 예에 따라 다른 비트스트림 길이를 포함하는 8개의 비트스트림들이 각각 동일한 비트스트림 길이를 포함하는 8개 채널의 비트스트림으로 반복적으로 압축되는 과정을 예시적으로 보여주는 도면들이다.
도 3a는 본 발명의 실시 예에 따라 8x8 가중치 세트와 같은 8비트 미가공 데이터의 블록 압축을 수반하는 데이터 압축을 예시적으로 보여주는 도면이다.
도 3b는 본 발명의 실시 예에 따른 버터플라이 셔플러의 제 1 열로부터의 다중채널 출력을 예시적으로 보여주는 도면이다.
도 3c는 본 발명의 실시 예에 따른 버터플라이 셔플러의 제 2 열로부터의 다중채널 출력을 예시적으로 보여주는 도면이다.
도 3d는 본 발명의 실시 예에 따른 버터플라이 셔플러의 제 3 열로부터의 다중채널 출력을 예시적으로 보여주는 도면이다.
도 4는 본 발명의 실시 예에 따른 데이터 언패커의 구성을 예시적으로 보여주는 블록도이다.
도 5는 본 발명의 실시 예에 따른 스트림 길이 영역과 압축된 데이터 영역을 포함하는 데이터 블록을 예시적으로 보여주는 도면이다.
도 6a는 본 발명의 실시 예에 따른 패킹된 데이터에의 임의 접근이 가능하도록 하는 제로-콜랩싱 데이터 컴프레서/패커 회로의 구성을 예시적으로 보여주는 블록도이다.
도 6b는 도 6a에 도시된 제로-콜랩싱 데이터 컴프레서/패커 회로에 의해 제공되는 패킹된 데이터에의 임의 접근을 이용한 데이터 압축을 예시적으로 보여주는 도면이다.
도 6c는 본 발명의 실시 예에 따른 제로-콜랩싱 시프터를 이용하는 제로 값 제거기의 구성을 예시적으로 보여주는 블록도이다.
도 6d는 본 발명의 다른 실시 예에 따른 제로-콜랩싱 시프터를 이용하는 제로 값 제거기의 구성을 예시적으로 보여주는 블록도이다.
도 6e는 본 발명의 실시 예들 중 모든 채널이 논-제로 값들을 수신하는 실시 예에 따른 제로-콜랩싱 시프터를 예시적으로 보여주는 도면이다.
도 6f는 본 발명의 실시 예들 중 한 개의 채널(제 12 채널)이 제로 값 입력을 수신하는 실시 예에 따른 제로-콜랩싱 시프터를 예시적으로 보여주는 도면이다.
도 6g 내지 도 6j는 각각 본 발명의 실시 예들 중 채널들이 점진적으로 제로 값을 더 수신하는 추가적인 더 진보된 실시 예들에 따른 제로-콜랩싱 시프터를 예시적으로 보여주는 도면들이다.
도 7은 본 발명의 실시 예에 따른 비트스트림에서 제로 값을 제거하는 회로의 구성을 예시적으로 보여주는 블록도이다.
도 8a 내지 도 8b는 본 발명의 실시 예에 따른 비압축 데이터와, 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로에 의해 제공되는 패킹된 데이터에의 임의 접근을 이용한 데이터 압축을 각각 예시적으로 보여주는 도면들이다.
도 9는 본 발명의 실시 예에 따른 언패커/디컴프레서 회로의 구성을 예시적으로 보여주는 블록도이다.
도 10a 내지 도 10b는 본 발명의 실시 예에 따른 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로 및 도 9의 언패커/디컴프레서 회로에 의해 제공되는 패킹된 데이터에의 임의 접근 기능을 예시적으로 상세히 보여주는 도면들이다.
도 10c는 본 발명의 실시 예에 따른 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로에 의해 제공된 패킹된 데이터에의 임의 접근 기능을 이용한 도 10a 내지 도 10b의 압축된 데이터에 접근하는 방법을 예시적으로 보여주는 순서도이다.
도 10d는 본 발명의 실시 예에 따라 도 10c의 방법을 이용하여 픽셀 어레이로부터 윈도우를 회수하는 것을 보여주는 도면이다.
도 11a는 본 발명의 실시 예에 따른 희소 데이터를 균질화하기 위해 버터플라이 셔플러를 활용하는 희소 데이터 처리 시스템의 구성을 예시적으로 보여주는 블록도이다.
도 11b는 본 발명의 실시 예에 따른 버터플라이 데이터 경로를 보여주는 도면이다.
도 11c는 본 발명의 실시 예에 따른 16채널 버터플라이 데이터 경로를 예시적으로 보여주는 도면이다.
도 11d는 본 발명의 실시 예에 따른 16채널 버터플라이 데이터 경로와 데이터 경로 순열을 제어하는 슈도-랜덤 생성기를 예시적으로 보여주는 도면이다.
도 12a는 본 발명의 실시 예에 따른 패킹된 데이터에의 임의 접근을 제공하는 채널-병렬 컴프레서 회로의 구성을 예시적으로 보여주는 블록도이다.
도 12b는 본 발명의 실시 예에 따른 도 12a의 채널-병렬 컴프레서 회로에 의해 제공된 패킹된 데이터에의 임의 접근을 이용한 채널-병렬 압축을 예시적으로 보여주는 도면이다.
도 13a 내지 도 13c는 본 발명의 실시 예에 따라 다른 바이트스트림 길이를 포함하는 8개의 바이트스트림들이 각각 동일한 바이트스트림 길이를 포함하는 8개의 바이트스트림들로 반복적으로 패킹되는 과정을 예시적으로 보여주는 도면들이다.
도 14는 본 발명의 실시 예에 따른 언패커/디컴프레서 회로의 구성을 예시적으로 보여주는 블록도이다.
도 15는 일반적으로 존재하는 예시적인 컨볼루션 신경망에 대하여 3개의 서로 다른 압축 세분도에 따른 압축률을 보여주는 그래프이다.
도 16a는 본 발명의 실시 예에 따른 8비트 데이터 유닛(즉, 1바이트)의 채널 단위 전치를 보여주는 도면이다.
도 16b는 본 발명의 실시 예에 따른 16비트 데이터의 전치를 보여주는 도면이다.
도 17은 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있는 압축 회로의 구성을 예시적으로 보여주는 블록도이다.
도 18은 본 발명의 실시 예에 따른 도 17의 압축 회로와 함께 사용될 수 있는 압축 해제 회로의 구성을 예시적으로 보여주는 블록도이다.
도 19는 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있고 버스를 통해 압축된 데이터를 전송할 수 있는 압축 회로의 구성을 예시적으로 보여주는 블록도이다.
도 20은 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있고 버스를 통해 압축된 데이터를 수신할 수 있는 압축 해제 회로의 구성을 예시적으로 보여주는 블록도이다.
도 21은 본 발명의 실시 예에 따른 버터플라이 셔플러를 이용하는 데이터 컴프레서 및/또는 데이터 디컴프레서를 포함하는 전자 장치를 나타내는 도면이다.
이하의 본문에서, 다양한 상세한 설명들은 본문의 이해를 제공하기 위하여 제시된다. 그러나 이러한 상세한 설명 없이 기재된 본 발명의 사상이 통상의 기술자에 의해 용이하게 구현될 수 있음은 잘 이해될 것이다. 다른 예에서, 잘 알려진 방법들, 절차들, 구성들, 및 회로들은 본문을 모호하게 하지 않기 위하여 설명되지 않는다.
상세한 설명에서 "하나의 실시 예" 또는 "일 실시 예"를 참조하는 것은 실시 예와 연관된 특정한 특징, 구조, 또는 특성이 본문의 적어도 하나의 실시 예에 포함될 수 있음을 의미한다. 즉, 본문의 다양한 위치에서 사용되는 "하나의 실시 예에서" 또는 "일 실시 예에서" 또는 "하나의 실시 예에 따라" 또는 유사한 의미를 갖는 다른 표현들은 동일한 실시 예를 참조하는 것을 요구하지 않는다. 더욱이, 특정한 특징들, 구조들, 또는 특성들은 적절한 방식으로 하나 또는 그 이상의 실시 예들에서 조합될 수 있다. 이와 관련하여 본문에서 사용되는 바와 같이, "예시적인"이라는 용어는 "예, 실시 예, 또는 예시로서 제공하는"을 의미한다. 본문에서 "예시적인" 것으로 설명된 임의의 실시 예는 다른 실시 예보다 반드시 바람직하거나 유리한 것으로 해석되지 않는다. 또는, 본문에서 언급된 내용에 따라, 단수 용어는 복수의 형태를 포함하고, 복수 용어는 단수 형태를 포함할 수 있다. 유사하게, 하이픈으로 연결된 용어들(예를 들어, "two-dimensional," "pre-determined", "pixel-specific" 등)은 하이픈이 없는 용어들("two dimensional," "predetermined", "pixel specific" 등)로 상호변경(interchangeably)될 수 있다. 대문자로 기재된 용어들("Counter Clock," "Row Select," "PIXOUT," 등)은 대문자가 아닌 용어들("counter clock," "row select," "pixout")로 상호 변경되어 사용될 수 있다. 이러한 상호 변경은 서로 모순되는 것으로 고려되지 않는다.
구성 도면들을 포함하는 다양한 도면들은 오직 설명의 목적을 위하여 본문에서 언급되고, 도시되며, 정량화되지 않는다. 유사하게, 다양한 파형들 및 타이밍도들은 단순히 설명의 목적을 위하여 도시된다. 특히, 일부 치수들은 표현의 명확성을 위한 것이며 도면에서 과장되어 도시된다. 더욱이, 동일한 참조 번호들은 동일하거나 또는 유사한 기능을 갖는 부분들, 구성들, 블록들, 회로들, 유닛들, 또는 모듈들을 지칭하기 위하여 둘 이상의 도면들에 걸쳐 사용될 수 있다.
본 명세서에서 사용된 용어들은 단지 특정한 실시 예들을 설명하기 위한 것이고, 본 발명을 제한하려는 것으로 의도되지 않았다. 본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 "하나"는 복수의 형태도 포함하는 것으로 의도된다. "구성되는", "구성되고 있는", "포함하는", 그리고 "포함하고 있는" 용어들이 본 명세서에서 사용될 때, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 그리고/또는 성분들이 존재를 명시하나, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 그리고/또는 그것들의 그룹들의 추가 또는 존재를 불가능하게 하지 않는다. "제1", "제2"와 같은 용어들은 앞서 설명된 구성에 대한 라벨로써 사용되고, 별도의 정의가 없는 한 특정한 순서(예를 들어, 공간적, 시간적, 논리적, 등)를 의도하는 것은 아니다. 더욱이, 동일한 참조 번호들은 동일하거나 또는 유사한 기능을 갖는 부분들, 구성들, 블록들, 회로들, 유닛들, 또는 모듈들을 지칭하기 위하여 둘 이상의 도면들에 걸쳐 사용될 수 있다. 그러나 이러한 사용은 단순히 설명의 간결성 및 편의를 위한 것이며, 이러한 구성들 및 유닛들의 구성 또는 구조적인 세부 사항들이 모든 실시 예들 또는 공통적으로 참조되는 부분들/모듈들에서 동일한 것으로 의도되지 않으며, 단순히, 본 발명의 특정 실시 예들을 지칭하기 위한 하나의 수단이다.
요소, 층, 영역, 또는 성분이 다른 요소, 층, 영역 또는 성분 "에", "에 연결된", "에 결합된" 것으로 언급되는 때, 그것은 다른 요소, 층, 영역, 또는 성분 "에 직접적으로", "에 직접적으로 연결된", "에 직접적으로 결합된"일 수 있거나, 하나 또는 그 이상의 사이의 요소들, 층들, 영역들, 또는 성분들이 존재할 수 있다. 또한, 요소 또는 층이 두 개의 요소들 또는 층들 사이로 언급되는 때, 그것은 단지 요소 또는 층이 두 요소들 또는 층들 사이에 있을 수 있거나, 또는 하나 또는 그 이상의 사이의 요소들 또는 층들이 또한 존재할 수 있다. 본문에서 사용되는 바와 같이, "및/또는"의 용어는 하나 또는 그 이상의 연관된 객체들의 일부 또는 모든 조합들을 포함한다.
다르게 정의되지 않는 한, 본 명세서에서 사용된 모든 용어들(기술적 그리고 과학적 용어들을 포함하는)은 본 발명이 속한 기술 분야에서 통상의 기술자에 의해 일반적으로 이해되는 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의된 이러한 용어들은 본 명세서 그리고/또는 관련 기술의 문맥에서 그들의 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의되지 않는 한 이상화되거나 지나지게 형식적인 감각으로 해석되지 않아야 한다.
본문에서 사용되는 바와 같이, 용어 "모듈"은 용어가 사용되는 맥락에 따라 본문에 기술된 본 발명의 기능을 제공하도록 구성된 소프트웨어, 펌웨어, 하드웨어, 또는 그것들의 조합을 포함할 수 있다. 예를 들어, 소프트웨어는 소프트웨어 패키지, 코드, 명령어, 명령어 세트, 또는 그것들의 조합일 수 있다. 예를 들어, 하드웨어는 하드 와이어드(hardwired) 회로, 프로그래밍 가능한(programmable) 회로, 상태 머신(state machine) 회로, 프로그래밍 가능한 회로에 의해 실행 가능한 명령어를 저장하는 펌웨어, 또는 그것들의 조합일 수 있다. 모듈은 집합적으로 또는 개별적으로, 집적 회로(integrated circuit; IC), 시스템 온 칩(system on-chip; SoC)과 같이 더 큰 시스템의 일부를 형성하는 회로로서 구현될 수 있다. 본 명세서에서 개시된 다양한 구성 요소 그리고/또는 기능 블록은 이와 관련하여 본 명세서에 설명된 기능을 제공하는 소프트웨어, 펌웨어, 하드웨어, 또는 그것들의 조합을 포함할 수 있는 모듈로서 구현될 수 있다.
본 명세서에 개시된 발명은 많은 채널들(예를 들어, 8개 또는 16개 채널들)을 병렬로 처리할 수 있고, 또한 하드웨어 친화적일 수 있는(즉, 실리콘 영역이 좁고 작동 전력이 낮은) 압축 및 압축 해제 시스템 및 기술을 제공한다. 또한, 본 명세서에 개시된 발명은 버터플라이 셔플러(butterfly shuffler)로 지칭되는 스케일러블(scalable) 멀티플렉서 회로 또는 모듈을 제공하며, 이는 병렬 방식으로 데이터 패킹(packing) 및 언패킹(unpacking)을 포함하는 효율적인 데이터 치환 및 재배열을 수행한다. 하나의 동작 모드에서, 버터플라이 셔플러는 다수 채널들의 비트스트림들을 패킹하여 모든 채널이 같은 길이 또는 수의 비트를 포함하도록 구성한다. 다른 하나의 동작 모드에서, 버터플라이 셔플러는 같은 길이의 비트스트림 또는 채널을 언패킹하여 원래의 비트스트림으로 재구성한다. 8개 채널들의 비트스트림으로 작동하는 시스템의 경우, 버터플라이 셔플러는 비트스트림의 비트를 다른 비트스트림으로 유연하게 치환하거나 재배열 할 수 있는 24개의 2대 1 멀티플렉서들을 포함한다. 16개 채널들의 비트스트림으로 작동하는 시스템의 경우, 버터플라이 셔플러는 비트스트림의 비트를 다른 비트스트림으로 유연하게 치환하거나 재배열 할 수 있는 64개의 2대 1 멀티플렉서들을 포함한다. 또한, 본 명세서에 개시된 버터플라이 셔플러는 전체 크로스바(cross-bar) 멀티플렉서 구성에 해당하지 않는다. 멀티플렉서 구성이 포함하는 데이터 레인 수를 N이라고 할 때, 전체 크로스바 구성의 경우 O(N2)만큼의 큰 면적을 지니는 데 반해, 본 발명의 버터플라이 셔플러의 경우 O(N*log(N))만큼의 큰 면적을 지닌다.
본 발명의 실시 예에 따르면, 제로-콜랩싱(zero-collapsing) 데이터 컴프레서(compressor)/패커(packer)는 버터플라이 셔플러를 사용하여 패킹된 데이터에의 임의 접근(random access)을 가능하게 함으로써 패킹된 데이터의 어떤 부분이든 임의로 접근할 수 있도록 할 수 있다. 제로-콜랩싱은 압축된 데이터를 얻기 위해 압축되지 않은 데이터에서 제로 값을 제거하는 과정을 의미한다. 본 발명의 다른 실시 예에 따르면, 언패커(unpacker)/디컴프레서(decompressor)는 제로-콜랩싱 데이터 압축 및 패킹 장치에 의해 제공되는 임의 접근 기능을 사용하여 패킹된 데이터를 언패킹 및 압축 해제할 수 있다.
본 발명의 또 다른 실시 예에 따르면, 버터플라이 셔플러는 희소 데이터(sparse data)를 균질화하여 데이터의 희소성을 보다 균일하게 할 수 있다. 버터플라이 셔플러는 희소 데이터의 데이터 값을 재배열함으로써 희소 데이터를 균질화하여 논-제로 데이터의 덩어리들이 희소 데이터를 통해 보다 균일하게 확산되도록 할 수 있다.
본 발명의 또 다른 실시 예에 따르면, 채널-병렬 데이터 컴프레서/패커는 버터플라이 셔플러를 사용할 수 있고 패킹된 데이터에의 임의 접근을 가능하게 할 수 있다. 또한, 채널-병렬 데이터 언패커/디컴프레서는 채널-병렬 데이터 컴프레서/패커가 제공하는 임의 접근 기능을 사용하여 패킹된 데이터의 압축을 풀고 압축 해제하는 데 사용될 수 있다.
본 발명의 실시 예에 따른 다양한 데이터 컴프레서의 경우 서로 다른 압축 세분도(compression granularity)가 사용될 수 있다. 본 발명의 실시 예에 따르면, 버터플라이 셔플러를 사용하는 데이터 컴프레서는 압축된 데이터에 대하여 니블(nibble) 압축 세분도를 제공할 수 있다. 본 발명의 다른 실시 예에 따르면, 버터플라이 셔플러를 사용하는 데이터 컴프레서는 압축된 데이터에 대하여 바이트 압축 세분도를 제공할 수 있다. 본 발명의 또 다른 실시 예에 따르면, 버터플라이 셔플러를 사용하는 데이터 컴프레서는 압축된 데이터에 대하여 멀티 바이트 압축 세분도를 제공할 수 있다.
도 1a는 본 발명의 실시 예에 따른 다중채널 데이터 패커(multichannel data packer)(100)의 구성을 예시적으로 보여주는 블록도이다. 다중채널 데이터 패커 (100)는 버터플라이 셔플러(101), 컨트롤러(controller)(102), 및 데이터 컴프레서(103)를 포함 할 수 있다. 데이터 컴프레서(103)는 8바이트의 스트림들을 수신하고 각 바이트스트림을 비트스트림으로 압축할 수 있다. 각 입력 바이트스트림은 다른 모든 입력 바이트스트림과 병렬적, 독립적으로 압축된다. 압축 알고리즘은 바이트스트림을 비트스트림으로 압축하는 임의의 알려진 알고리즘일 수 있다. 버터플라이 셔플러(101)는 일반적으로 서로 다른 비트스트림 길이를 포함하는 결과적인 8개 채널들의 비트스트림을 수신할 수 있고, 컨트롤러(102)의 제어 하에, 각 출력 비트스트림이 동일한 비트스트림 길이를 포함하도록 8개 채널들의 비트스트림을 재배열할 수 있으며, 단일 바이트스트림으로 취급될 수 있다. 본 발명의 실시 예에서, 데이터 컴프레서(103)는 8개 채널들의 비트스트림을 수신하고 각 비트스트림 채널에 대해 압축된 비트스트림을 제공하기 위해 각 비트스트림이 포함하는 제로 값을 제거할 수 있다. 또한, 데이터 컴프레서(103)는 각 비트스트림 채널에 대해 제로 비트 마스크(zero-bit-mask; ZBM)(도 1a에 도시되지 않음)를 생성할 수 있다. 버터플라이 셔플러(101), 컨트롤러(102), 및/또는 데이터 컴프레서(103)는 회로 및/또는 모듈로서 구현될 수 있다. 버터플라이 셔플러(101)는 멀티플렉서 모듈 구성 요소 또는 멀티플렉서(104)를 포함 할 수 있으며, 이는 도 1b에 도시된 바와 같이 시프트 레지스터(shift register)(111)를 사용하여 버퍼링된 출력을 갖는 멀티플렉서(110)로서 구현될 수 있다. 일부 실시 예들에서, 시프트 레지스터(111)는 포함되지 않을 수 있다.
도 1c는 본 발명의 실시 예에 따른 버터플라이 셔플러(101)의 구성을 예시적으로 보여주는 블록도이다. 버터플라이 셔플러(101)는 8행(R=0 내지 R=7) 및 3열 (C=0 내지 C=2)의 어레이로 배열된 24개의 2대 1 8비트 멀티플렉서(104)들을 포함할 수 있다. 버터플라이 셔플러(101)는 일반적으로 서로 다른 비트스트림 길이를 포함하는 8개 채널들의 비트스트림을 수신할 수 있다. 또는, 멀티플렉서(104)는 각 열이 8개 채널들의 비트스트림 중 하나의 비트스트림을 수신하는 3행 및 8열의 어레이로 배열될 수 있다.
도 1c를 참조하면, C=0인 열의 하나의 행에 위치하는 멀티플렉서의 출력은 C=1인 열의 같은 행의 대응하는 멀티플렉서의 입력에 연결될 수 있다. 마찬가지로, C=1인 열의 하나의 행에 위치하는 멀티플렉서의 출력은 C=2인 열의 같은 행의 대응하는 멀티플렉서의 입력에 연결될 수 있다. 예를 들어, 멀티플렉서(10400)의 출력은 멀티플렉서(10401)의 입력에 연결되고, 멀티플렉서(10401)의 출력은 멀티플렉서(10402)의 입력에 연결된다.
또한, C=0인 열에 위치하는 멀티플렉서(10400) 및 멀티플렉서(10410)의 출력들은 C=1인 열에 위치하는 멀티플렉서(10421) 및 멀티플렉서(10431)의 입력들에 각각 더 연결될 수 있다. C=0인 열에 위치하는 멀티플렉서(10420) 및 멀티플렉서(10430)의 출력들은 C=1인 열에 위치하는 멀티플렉서(10401) 및 멀티플렉서(10411)의 입력들에 각각 더 연결될 수 있다. C=0인 열에 위치하는 멀티플렉서(10440) 및 멀티플렉서(10450)의 출력들은 C=1인 열에 위치하는 멀티플렉서(10461) 및 멀티플렉서(10471)의 입력들에 각각 더 연결될 수 있다. C=0인 열에 위치하는 멀티플렉서(10460) 및 멀티플렉서(10470)의 출력들은 C=1인 열에 위치하는 멀티플렉서(10441) 및 멀티플렉서(10451)의 입력들에 각각 더 연결될 수 있다.
또한, C=1인 열에 위치하는 멀티플렉서(10401) 및 멀티플렉서(10411)의 출력들은 C=2인 열에 위치하는 멀티플렉서(10442) 및 멀티플렉서(10452)의 입력들에 각각 더 연결될 수 있다. C=1인 열에 위치하는 멀티플렉서(10421) 및 멀티플렉서(10431)의 출력들은 C=2인 열에 위치하는 멀티플렉서(10462) 및 멀티플렉서(10472)의 입력들에 각각 더 연결될 수 있다. C=1인 열에 위치하는 멀티플렉서(10441) 및 멀티플렉서(10451)의 출력들은 C=2인 열에 위치하는 멀티플렉서(10402) 및 멀티플렉서(10412)의 입력들에 각각 더 연결될 수 있다. C=1인 열에 위치하는 멀티플렉서(10461) 및 멀티플렉서(10471)의 출력들은 C=2인 열에 위치하는 멀티플렉서(10422) 및 멀티플렉서(10432)의 입력들에 각각 더 연결될 수 있다.
C=0인 열에서 각 멀티플렉서의 하나의 입력은 비트스트림을 수신할 수 있다. 예를 들어, 멀티플렉서(10400)는 비트스트림 0을 수신할 수 있고, 멀티플렉서(10410)는 비트스트림 1을 수신할 수 있다. 멀티플렉서(10400)과 멀티플렉서(10410)은 쌍을 이루고 있기 때문에, 비트스트림 0은 또한 멀티플렉서(10410)에 입력될 수 있고, 비트스트림 1은 또한 멀티플렉서(10400)에 입력될 수 있다. 마찬가지로, 비트스트림 2 및 비트스트림 3은 멀티플렉서(10420) 및 멀티플렉서(10430) 모두에 입력될 수 있다. 비트스트림 4 및 비트스트림 5는 멀티플렉서(10440) 및 멀티플렉서(10450) 모두에 입력될 수 있다. 비트스트림 6 및 비트스트림 7은 멀티플렉서(10460) 및 멀티플렉서(10470) 모두에 입력될 수 있다. 더 큰 비트 폭(즉, 바이트)를 포함하는 비트스트림 또한 사용될 수 있다.
일반적으로, 2K개의 입력을 수신하는 버터플라이 셔플러는 K가 1보다 큰 정수인 2K행 및 K열로 배열된 2대 1 멀티플렉서들을 포함하며, 다음과 같이 구성될 수 있다. 각 열(C)의 멀티플렉서들은 각 세트의 크기가 2C+1이고 C=0, 1...K인 논리적인 연속 세트로 그룹화될 수 있다. 좀 더 상세하게는, C=0인 열에 위치하는 멀티플렉서(즉, 도 1C의 가장 왼쪽 열)들은 C=0인 열에 위치하고 각 세트가 2C+1=2의 크기를 갖는 세트로 그룹화될 수 있다. 멀티플렉서(10400) 및 멀티플렉서(10410)는 세트 P0...1,0을 이룬다. 멀티플렉서(10420) 및 멀티플렉서(10430)는 세트 P2...3,0을 이룬다. 멀티플렉서(10440) 및 멀티플렉서(10450)는 세트 P4...5,0을 이룬다. 멀티플렉서(10460) 및 멀티플렉서(10470)는 세트 P6...7,0을 이룬다. 세트 P0...1,0은 멀티플렉서(10400) 및 멀티플렉서(10410)에 각각 연결된 비트스트림 0 및 비트스트림 1을 수신한다. 마찬가지로, 세트 P2...3,0은 비트스트림 2 및 비트스트림 3을 수신하고, P4...5,0은 비트스트림 4 및 비트스트림 5를 수신한다. 기타 등등.
도 1a에 도시된 바와 같이, C=0인 열에 위치하는 각 멀티플렉서 세트는 컨트롤러(102)로부터 제어 신호(예를 들어, S0...1,0)를 수신할 수 있다. 제어 신호가 디-어설트(de-asserted)되면, 제어 신호에 연결된 멀티플렉서의 세트는 입력 비트스트림들을 선택하고, 각 입력 비트스트림은 세트를 이루는 멀티플렉서를 통과하여 같은 행에 유지된다. 제어 신호가 어설트(assert)되면, 제어 신호에 연결된 멀티플렉서 세트는 입력 비트스트림들을 선택하고, 입력 비트스트림들은 멀티플렉서 세트의 다른 행으로 출력되어 행 번호가 스왑(swap)된다.
예를 들어 도 1c에서, 세트 P0...1,0에서 제어 신호 S0...1,0을 디-어설트하면 입력 비트스트림 0(즉, 행 0, 열 0의 입력 비트스트림)은 같은 행 0의 열 1로 출력되고, 입력 비트스트림 1(즉, 행 1, 열 0의 입력 비트스트림)은 같은 행 1의 열 1로 출력된다. 제어 신호 S0...1,0을 어설트하면 입력 비트스트림 0 및 입력 비트스트림 1은 열 1로 출력되면서 행 번호가 스왑된다. 즉, 행 0, 열 0에 입력된 비트스트림은 행 1, 열 1로 출력되고 행 1, 열 0에 입력된 비트스트림은 행 0, 열 1로 출력된다. 다른 멀티플렉서 세트 역시 각각의 제어 신호에 동일한 방식으로 응답한다.
C=1인 열에 위치하는 멀티플렉서(즉, 도 1c에서 왼쪽으로부터 두 번째 열)들은 각 세트가 2C+1=4의 크기를 갖는 세트로 그룹화될 수 있다. 예를 들어, 멀티플렉서(10401), 멀티플렉서(10411), 멀티플렉서(10421), 및 멀티플렉서(10431)는 세트 P0...3,1을 이루고, 멀티플렉서(10441), 멀티플렉서(10451), 멀티플렉서(10461), 및 멀티플렉서(10471)는 세트 P4...7,1을 이룬다. C=1인 열에 위치하는 각 멀티플렉서 세트는 이전 열인 C=0인 열에 위치하는 두 세트의 멀티플렉서로부터 입력을 수신한다. 일반적으로, 열 C+1의 각 멀티플렉서 세트는 이전 열 C의 두 세트의 멀티플렉서로부터 입력을 수신한다.
열 1에 위치하는 세트 P0...3,1은 제어 신호 S0...3,1을 수신할 수 있다. 제어 신호 S0...3,1이 디-어설트되면, 세트 P0...3,1의 각 멀티플렉서는 이전 열의 대응하는 세트들로부터 다음 C=2인 열로 입력을 전달하여 데이터가 같은 행에 유지될 수 있도록 한다. 예를 들어, 세트 P0...3,1의 경우, 멀티플렉서(10401), 멀티플렉서(10411), 멀티플렉서(10421), 및 멀티플렉서(10431)의 출력은 각각 멀티플렉서(10400), 멀티플렉서(10410), 멀티플렉서(10420), 및 멀티플렉서(10430)의 출력과 동일하다. 마찬가지로, 세트 P4...7,1의 경우, 제어 신호 S4...7,1이 디-어설트되면, 멀티플렉서(10441), 멀티플렉서(10451), 멀티플렉서(10461), 및 멀티플렉서(10471)의 출력은 각각 멀티플렉서(10440), 멀티플렉서(10450), 멀티플렉서(10460), 및 멀티플렉서(10470)의 출력과 동일하다.
제어 신호 S0...3,1이 어설트되면, 세트 P0...3,1의 멀티플렉서들은 연관된 입력 세트들을 교환하도록 작용한다. 좀 더 상세하게는, 세트 P0...3,1의 경우, 멀티플렉서(10401), 멀티플렉서(10411), 멀티플렉서(10421), 및 멀티플렉서(10431)의 출력은 각각 멀티플렉서(10420), 멀티플렉서(10430), 멀티플렉서(10400), 및 멀티플렉서(10410)의 출력과 동일하다. 마찬가지로, 세트 P4...7,1의 경우, 제어 신호 S4...7,1이 어설트되면, 멀티플렉서(10441), 멀티플렉서(10451), 멀티플렉서(10461), 및 멀티플렉서(10471)의 출력은 각각 멀티플렉서(10460), 멀티플렉서(10470), 멀티플렉서(10440), 및 멀티플렉서(10450)의 출력과 동일하다.
일반적으로, 제어 신호 S가 C=1인 열에서 디-어설트되면, 제어 신호 S에 의해 제어되는 관련 멀티플렉서 세트는 멀티플렉서 세트와 연관된 2개의 입력 세트들을 서로 스왑하지 않고 출력시킨다. 즉, 2개의 연관된 입력 세트들의 출력은 같은 행에 유지된다. 그러나, 제어 신호 S가 C=1인 열에서 어설트되면, 제어 신호 S에 의해 제어되는 관련 멀티플렉서 세트는 멀티플렉서 세트와 연관된 2개의 입력 세트들을 서로 스왑하여 출력시키는 작용을 한다.
C=2...K-1인 열에서 멀티플렉서들의 연결은 열 1에 대해 전술한 바와 같은 규칙에 따라 구성될 수 있다. 도 1c에 나타난 실시 예의 경우, 멀티플렉서들이 배열된 3개의 열 중 C=2인 열에 위치하는 멀티플렉서들은 크기가 2C+1=23=8인 하나의 논리 세트 P0...7,2로 그룹화된다. 제어 신호 Si...j,k들은 다음의 기능 및 동작과 관련된 설명에 따라, 비트스트림 길이에 기초한 논리 회로에 의해 생성될 수 있다.
도 1d는 본 발명의 다른 실시 예에 따른 버터플라이 셔플러(101')의 구성을 예시적으로 보여주는 블록도이다. 버터플라이 셔플러(101')는 16행(R=0 내지 R=15) 및 4열(C=0 내지 C=3)의 어레이로 배열된 64개의 2대 1 8비트 멀티플렉서(104')들을 포함할 수 있다. 버터플라이 셔플러(101')의 C=0인 열에 위치하는 멀티플렉서(104')들은 일반적으로 서로 다른 비트스트림 길이를 갖는 16개 채널들의 비트스트림을 수신할 수 있다. 버터플라이 셔플러(101')는 C=3인 열에 위치하는 멀티플렉서(104')들이 각각 동일한 비트스트림 길이를 포함하는 16개 채널들의 비트스트림을 출력하도록 제어될 수 있다. 도 1d의 버터플라이 셔플러(101')는, 16개의 입력들을 수신하고 16개의 출력들을 제공하는 것을 제외하면 도 1c의 버터플라이 셔플러(101)와 기본적으로 동일한 방식으로 작동한다. 도 1d에서 제어 신호 Si...j,k는 생략되었다.
다시 도 1a를 참조하면, 데이터 컴프레서(103)는 압축되지 않은 즉, 미가공 데이터의 블록을 수신하고, 하나의 비트스트림을 입력받아 다른 하나의 비트스트림을 출력하는 임의의 알려진 압축 알고리즘을 사용하여 개별적으로 각 바이트스트림을 각 비트 레인으로 압축한다. 각 비트 레인은 다른 비트 레인과 개별적으로, 즉 독립적으로 압축되기 때문에, 출력 비트스트림의 길이는 비트 레인마다 다를 수 있다. 예를 들어, 데이터 컴프레서(103)는 8개 채널들의 32바이트 길이 미가공 데이터 블록을 다양한 길이의 8개의 비트스트림들로 압축할 수 있고, 도 2a의 201에 도시된 바와 같이 압축된 8개의 비트스트림들을 출력할 수 있다. 비트스트림들이 데이터 컴프레서(103)로부터 병렬로 클록 아웃(clocked out)되기 때문에 유효하게 압축된 비트를 포함하는 각 비트스트림은 도 2a의 201에 직사각형으로 도시되어 있으며, 비트스트림 4가 모든 8개의 비트 레인 중 가장 길고 비트스트림 3이 가장 짧다. 이에 따라, 버터플라이 셔플러(101)는 8개의 압축된 스트림들을 병렬로 수신하기 시작하기 때문에, 처음, 즉 첫 번째 클록 사이클 동안에는 레인 4의 비트들만이 유효한 데이터를 포함한다. 이어지는 클록 사이클 동안 레인 4의 비트들이 유효한 것에 더하여, 레인 0의 비트들도 어느 시점부터 유효하게 된다. 결과적으로, 8개의 모든 비트 레인의 모든 비트들은 도 2a의 201에 도시된 스트림들의 꼬리(tail), 즉 가장 왼쪽 부분에 대응하여 유효하게 된다.
도 2a 내지 도 2c는 본 발명의 실시 예에 따라 다른 비트스트림 길이를 포함하는 8개의 비트스트림들이 각각 동일한 비트스트림 길이를 포함하는 8개 채널의 비트스트림으로 반복적으로 압축되는 과정을 예시적으로 보여주는 도면들이다. 201에 도시된 8개의 예시적인 비트스트림 0-7은 일반적으로 서로 다른 비트스트림 길이를 포함하며, 예를 들어 도 1c의 버터플라이 셔플러(101)의 멀티플렉서(10400 내지 10470)들에 입력된다. 비트스트림 0-7은 입력 멀티플렉서들의 쌍에 대응하는 4개의 쌍들로 짝을 이루거나 그룹화된다.
도 2a의 202에 도시된 각 비트스트림 쌍에서 더 긴 비트스트림 길이를 포함하는 비트스트림의 선두 부분, 즉 헤드는 해당하는 쌍의 멀티플렉서들을 제어함으로써 버터플라이 셔플러(101)를 통해 재배치되거나 리다이렉트(redirected)되어 더 짧은 비트스트림 길이를 포함하는 쌍의 비트스트림의 일부가 되고, 해당하는 쌍의 비트스트림들은 동일한 비트스트림 길이를 포함하게 된다. 예를 들어, 비트스트림 0의 일부는 C=0인 열에 위치하는 멀티플렉서들에 의해 비트스트림 1의 일부가 되도록 리다이렉트된다. 마찬가지로, 비트스트림 2의 일부는 비트스트림 3의 일부가 되도록 리다이렉트된다. 비트스트림 4의 일부는 비트스트림 5의 일부가 되도록 리다이렉트되고, 그리고 비트스트림 7의 일부는 비트스트림 6의 일부가 되도록 리다이렉트된다. 비트스트림 쌍의 비트스트림 길이 차이가 홀수 개의 비트일 때, 더미(dummy) 또는 필러(filler) 비트는 두 비트스트림들 중 더 짧은 비트스트림 길이를 포함하는 비트스트림에 추가될 수 있다. 쌍들 내에서 동일한 비트스트림 길이를 포함하는 비트스트림들의 쌍들은 203에 도시되어 있으며, C=0인 열에 위치하는 멀티플렉서에서 출력된다. 203에 도시된 회색 영역은 다른 비트스트림의 일부로 리다이렉트된 부분을 나타낸다. 203에 도시된 결과적인 스트림들은 버터플라이 셔플러(101)의 C=0인 열에 의해 생성될 수 있다. 멀티플렉서 모듈(104)의 클록 활성 입력은 시프트 레지스터들이 유효하지 않은 비트를 클록킹(clocking)하는 것을 방지함과 동시에, 버퍼 데이터를 시프팅 시작할 때까지 유지하는 데 사용될 수 있다. 또한 버터플라이 패킹이 시작되기 전에 각 압축된 데이터 블록의 비트스트림 길이를 알아야 한다.
도 2b의 204에 도시된 바와 같이, 쌍들 내에서 동일한 비트스트림 길이를 포함하는 비트스트림 쌍들은 버터플라이 셔플러(101)의 제 2 열(C=1)에 위치하는 멀티플렉서(10401 내지 10471)들에 입력된다. 비트스트림 쌍들은 버터플라이 셔플러(101)의 제 2 열에 위치하는 멀티플렉서들의 페어링에 대응하는 2개의 쌍들의 쌍들로 추가로 쌍을 이루고 또는 그룹화된다.
도 2b의 205에서, 더 긴 비트스트림 길이를 포함하는 비트스트림 쌍의 각 비트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들을 제어함으로써 더 짧은 비트스트림 길이를 포함하는 비트스트림 쌍의 일부가 각각 되도록 재배치 또는 리다이렉트된다. 예를 들어, 제 1 쌍들의 쌍(쌍들의 쌍 1)의 각 비트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들에 의해 리다이렉트되어 제 1 쌍들의 쌍 비트스트림 중 더 짧은 비트스트림의 일부가 각각 된다. 마찬가지로, 제 2 쌍들의 쌍(쌍들의 쌍 2)의 각 비트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들에 의해 리다이렉트되어 제 2 쌍들의 쌍 비트스트림 중 더 짧은 비트스트림의 일부가 각각 된다. 쌍들의 쌍 내에 동일한 비트스트림 길이를 포함하는 비트스트림 쌍들의 쌍들은 206에 도시되어 있다. 206에 도시된 스트림들은 버터플라이 셔플러(101)의 C=1인 열에 의해 생성될 수 있다.
도 2c의 207에 도시된 바와 같이, 동일한 비트스트림 길이를 포함하는 비트스트림 쌍들의 쌍들은 버터플라이 셔플러(101)의 제 3 열(C=2)에 위치하는 멀티플렉서(10402 내지 10472)들에 입력된다. 비트스트림 쌍들의 쌍들은 버터플라이 셔플러(101)의 제 3 열에 위치하는 멀티플렉서들의 페어링에 대응하는 한 쌍의 쿼드 비트스트림으로 추가로 쌍을 이루고 또는 그룹화된다.
도 2c의 208에서, 더 긴 비트스트림 길이를 포함하는 쿼드(quad) 비트스트림 쌍들의 쌍의 각 비트스트림의 일부는 버터플라이 셔플러(101)의 제 3 열에 위치하는 멀티플렉서들을 제어함으로써 더 짧은 비트스트림 길이를 포함하는 쿼드 비트스트림 쌍들의 쌍의 일부가 각각 되도록 재배치되거나 리다이렉트된다. 예를 들어, 제 1 쿼드의 각 비트스트림의 일부는 제 2 쿼드 비트스트림들의 더 짧은 비트스트림들의 일부가 각각 될 수 있도록 제 3 열에 위치하는 멀티플렉서들에 의해 리다이렉트된다. 이제 동일한 비트스트림 길이를 포함하는 비트스트림들은 209에 도시되어 있다. 209에 도시된 스트림들은 버터플라이 셔플러(101)의 C=2인 열에 의해 생성될 수 있다.
도 3a는 본 발명의 실시 예에 따라 8x8 가중치 세트와 같은 8비트 미가공 데이터의 블록 압축을 수반하는 데이터 압축을 예시적으로 보여주는 도면이다. 가중치 세트(301)는 제로 및 논-제로 값을 포함할 수 있다. 도 1a의 데이터 컴프레서(103)는 가중치 세트(301)를 압축하여 제로 값을 제거하고, 예를 들어, 하나의 채널이 8x8 가중치 세트의 하나의 행에 대응하는 ZBM-압축된 다중채널 비트스트림(302)을 제공할 수 있다. 본 발명의 다른 실시 예에서, 예시적인 블록(301)은 활성화 함수로부터 출력된 특징 맵 값들의 세트일 수 있다.
다중채널 비트스트림(302)의 각 채널은 첫 8비트 내의 제로 비트 마스크 영역(303) 및 압축된 데이터 영역(304)을 포함할 수 있다. 본 발명의 하나의 실시 예에서, 제로 비트 마스크 영역(303)의 논-제로 비트들은 가중치 세트(301)의 논-제로 값들을 나타낸다. 이에 따라, 압축된 데이터 영역(304)은 가중치 세트(301)에서 제로 값인 가중치들이 생략한 것을 제외하고 순서가 변경되지 않은 가중치 값들을 포함한다. 각 채널의 비트스트림 길이는 일반적으로 다른 ZBM-압축된 채널들의 비트스트림 길이와 다를 수 있다. 만일 압축된 데이터(302)가 휘발성 메모리 또는 비휘발성 메모리와 같은 메모리에 저장되는 것과 같이 저장되면, 서로 다른 채널들의 서로 다른 비트스트림 길이들은 메모리 공간을 낭비할 수 있다. 도 1a의 버터플라이 셔플러(101)는 서로 다른 채널들의 비트스트림 길이들을 동일하게 만들기 위해 데이터를 패킹하는데 사용될 수 있다. 도 1a의 데이터 컴프레서(103)의 로직은 제로 비트 마스크를 사용하여 각 비트스트림의 길이를 계산하고 컨트롤러(102)를 사용하여 버터플라이 셔플러(101)를 통한 경로를 제어할 수 있다.
도 3b의 다중채널 비트스트림(302)은 버터플라이 셔플러(101)에 입력된다. 다중채널 비트스트림(305)은 버터플라이 셔플러(101)의 멀티플렉서들의 제 1 열로부터 출력된다. 즉, 각 쌍의 채널들 중 더 긴 비트스트림 길이를 포함하는 비트스트림의 일부는 도 1a의 컨트롤러(102)의 제어 하에 각 쌍의 채널들 중 더 짧은 비트스트림 길이를 포함하는 비트스트림의 일부가 되도록 재배치되거나 리다이렉트되어, 도 2a와 관련하여 설명된 것과 유사하게 각 쌍의 비트스트림은 동일한 비트스트림 길이를 포함하게 된다.
도 3c의 다중채널 비트스트림(305)은 버터플라이 셔플러(101)의 제 2 열에 위치하는 멀티플렉서들에 입력되고, 다중채널 비트스트림(306)은 도 2b와 관련하여 설명된 것과 유사하게 출력된다. 도 3d의 다중채널 비트스트림(306)은 버터플라이 셔플러(101)의 제 3 열에 위치하는 멀티플렉서들에 입력되고, 다중채널 비트스트림(307)은 도 2c와 관련하여 설명된 것과 유사하게 출력된다. 다중채널 비트스트림(307)의 모든 채널들은 버터플라이 셔플러(101)를 사용하여 동일한 길이로 패킹되었고, 다중채널 비트스트림(307)에 의해 표현된 데이터 블록은 휘발성이든 비휘발성이든, 낭비되는 공간 없이 메모리에 효율적으로 저장될 수 있다. 본 발명의 실시 예에서, 일반적으로 첫 8비트 내의 제로 비트 마스크 영역(303)과 버터플라이 셔플러(101)에 의해 처리된 후 남아있는 채널들의 압축된 데이터 영역(304)이 함께 저장된다는 것을 주목해야 한다.
시프트 레지스터(111)에 의해 버퍼링된 출력을 갖는 멀티플렉서(104)를 사용하는 대신에, 회로 면적 및 전력을 감소시키기 위해 시프트 레지스터(111) 없이 멀티플렉서(110)만 단독으로 사용될 수 있다. 좀 더 상세하게는, 도 2a 내지 도 2b 및 도 3a 내지 도 3b에 도시되어 있는 각 단계는 비트스트림들을 임시 메모리로 버퍼링시키고, 버터플라이 셔플러(101)를 사용하여 재배열하고, 재배열된 스트림을 다시 임시 메모리에 저장함으로써 달성될 수 있다. 이에 따라, 데이터를 패킹하기 위해서 세 단계의 이러한 프로세싱이 필요할 수 있으며, 각 단계는 도 2a 내지 도 2b 및 도 3a 내지 도 3b에 도시되어 있는 하나의 단계에 대응한다.
패킹된 데이터를 언패킹하는 것은 반대 과정이다. 제로 비트 마스크는 각 패킹된 채널에서 첫 번째로 위치 될 수 있으므로, 제로 비트 마스크 다음에 위치하는 패킹된 논-제로 데이터는 제로 비트 마스크를 이용하여 언패킹될 수 있다. 좀 더 상세하게는, 패킹된 스트림들을 언패킹할 때, 패킹된 블록의 시작 지점에 위치한 제로 비트 마스크(303)로부터 쉽게 알 수 있는 원래 스트림들의 길이를 먼저 결정한 다음, 어느 스트림의 어느 헤드가 절단되고 어떤 스트림에 추가될 것인지 결정하기 위해 쌍들(또는 쌍들의 쌍들, 또는 쌍들의 쌍들의 쌍들) 내의 스트림 길이를 비교할 때 패킹 동안 수행했던 계산을 다시 수행하는 과정이 필요하다. 이 때, 스트림 길이들 사이의 차이를 계산한 후 이를 2로 나누어 절단 및 추가될 헤드의 길이를 결정하되, 2로 나눈 후의 값이 분수 부분을 포함하지 않도록 선택적 패딩(optional padding)을 사용한다. 이러한 계산은 계산을 통해 잘리고 추가된 각 헤드가 저장소에 위치한 곳을 나타내는 패킹된 스트림으로 오프셋을 제공할 수 있다. 언패킹 과정 동안, 버터플라이 셔플러(101)는 원래 스트림들을 복원하기 위해 채널들 사이에서 절단된 헤드들을 다시 교환하도록 제어될 수 있다. 멀티플렉서들은 데이터를 등록해야 할 수 있고, 길이가 짧은 채널에서의 비트스트림 흐름은 헤드가 짧은 채널로부터 원래 스트림에 다시 추가되는 동안 정지되어야 할 수 있다.
도 4는 본 발명의 실시 예에 따른 데이터 언패커(400)의 구성을 예시적으로 보여주는 블록도이다. 데이터 언패커(400)은 비트 언패커(bit unpacker)(401), 버터플라이 셔플러(101), 및 컨트롤러(도 4에 도시되지 않음; 예를 들어, 도 1a의 컨트롤러(102))를 포함할 수 있다.
비트 언패커(401)는 패킹된 논-제로 데이터 블록을 다중채널 신호로서 수신한다. 본 발명의 하나의 실시 예에서, 도 4의 데이터 언패커(400)는 8개 채널들의 패킹된 데이터를 위해 구성될 수 있다. 비트 언패커(401)의 각 채널은 비트 언패커(401)의 다른 채널들과 독립적으로 동작하는 2개의 8비트 레지스터 및 8개의 8대 1 1비트 멀티플렉서들을 포함할 수 있다. 패킹된 데이터는 n비트 정수일 수 있다. 예를 들어, n=5인 경우 패킹된 데이터는 각 채널에서 int5 또는 uint5 유형일 수 있다. 그러나 일반적으로 컴퓨터 시스템에서 언패킹된 데이터는 1바이트, 즉 int8 또는 uint8 세분도를 지닌다. 이 경우, 언패킹하기 전에 5비트 데이터는 8비트 데이터로 변환(패딩)될 수 있다. 예를 들어, 패킹된 데이터는 402에 도시된 5비트 부호 없는 데이터일 수 있다. 이 실시 예에서, 비트 언패커(401)는 3개의 제로 비트를 각 패킹된 데이터 바이트의 최상위 비트(most significant bit; MSB)에 더하여 403에서 8비트 바이트 부호 없는 데이터를 형성한다.
각 채널에 대한 8비트 제로 비트 마스크를 포함하는 비트 언패커(401)의 출력은 재귀(recursive) 채널 언패커에 입력되며, 이는 도 1c의 버터플라이 셔플러(101)일 수 있다. 이 특정 실시 예에서, 버터플라이 멀티플렉서의 각 채널은 전술한 바와 같이 1비트가 아닌 1바이트의 폭을 갖는다. 컨트롤러(즉, 컨트롤러(102))는 404에서 언패킹된 다중채널 8비트 데이터(즉, 가중치, 특징 맵 값 등)를 형성하기 위해 각 채널의 제로 비트 마스크를 사용하여 버터플라이 셔플러(101)를 통한 데이터 경로들을 제어한다.
본 발명의 다른 실시 예에서, 고정된 비트 길이를 포함하고 제로 값이 생략되도록 인코딩된 데이터를 사용하는 대신 본 발명은 가변 비트 폭을 제공하는 데이터 길이를 갖는 인코딩 기술로 확장될 수 있다. 예를 들어, 데이터가 골룸라이스 코딩 또는 희소 지수 골룸라이스 코딩(Sparse Exponential Golomb Rice coding) 알고리즘을 사용하여 사전 압축된 경우, 도 3a의 제로 비트 마스크 영역(303)은 스트림의 길이 및 언패킹된 상태로 저장된 전체 스트림의 길이를 나타내는 데이터 영역으로 대체될 수 있다. 도 5는 본 발명의 실시 예에 따른 스트림 길이 영역(502)과 압축된 데이터 영역(503)을 포함하는 데이터 블록(501)을 예시적으로 보여주는 도면이다. 압축된 스트림을 패킹하는 것은 본 명세서에 개시된 바와 같이 수행될 수 있다. 스트림 길이 비트 폭은 가장 긴 가변 길이 시퀀스(longest-possible variable-length sequence)를 수용할 수 있도록 선택되어야 한다.
본 발명의 다른 실시 예에서, 출력 특징 맵들 및/또는 활성화 함수들로부터의 출력들은, 본 명세서의 다른 곳에 기술된 바와 같이 멀티플라이어(multiplier)를 보다 더 잘 활용하고자, 활성화 함수들로부터 출력될 수 있는 레인에 걸친 제로 값들을 분산(즉, 균형)시키기 위해 본 명세서에 개시된 버터플라이 셔플러를 사용하여 셔플링될 수 있다(가중치들을 저장하고 또한 사전 셔플링되면서도).
도 6a는 본 발명의 실시 예에 따른 패킹된 데이터에의 임의 접근이 가능하도록 하는 제로-콜랩싱 데이터 컴프레서/패커 회로(600)의 구성을 예시적으로 보여주는 블록도이다. 도 6b는 제로-콜랩싱 데이터 컴프레서/패커 회로(600)에 의해 제공되는 패킹된 데이터에의 임의 접근을 이용한 데이터 압축을 예시적으로 보여주는 도면이다.
도 6a 내지 도 6b를 모두 참조하면, 제로-콜랩싱 데이터 컴프레서/패커 회로(600)는 제로 값 제거기(601), 논-제로 값 패커(602), 메모리 기록 중재기(603), 제로 비트 마스크 생성기(604), 마스크 패커(605), 및 행 포인터 생성기(606)을 포함할 수 있다. 회로(600)를 이루는 다양한 구성 요소들은(전체로서 회로(600)를 포함) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
제로 값 제거기(601)는 예를 들어 16레인(즉, Lane0[7:0]-Lane15[7:0]) 또는 채널들의 스트림 데이터(610)를 수신할 수 있다. 스트림 데이터(610)의 각 레인은 8비트(1바이트)의 압축되지 않은 논-제로 값 데이터 및 제로 값 데이터를 포함할 수 있다. 데이터 스트림(610)은 그룹들로 더 세분화될 수 있고, 각 그룹은 16바이트의 길이를 가지며, 패킹 회로(600)는 16바이트x16레인 크기의 데이터 블록들 상에서 동작한다. 논-제로 값 데이터의 예는 도 6a 내지 도 6b에 교차 해칭 또는 쉐이딩으로써 표시되고, 제로 값 데이터는 "0"으로 표시된다. 본 발명의 하나의 실시 예에서, 8비트 값은 픽셀 데이터에 대응할 수 있다. 제로 값 제거기(601)는 각각의 데이터 스트림(610)으로부터 제로 값 데이터를 제거하도록 구성될 수 있다. 제로 값 제거기(601)는 각 데이터 스트림에서 0바이트 값이 제거된 16개의 데이터 스트림들 STR0[7:0]-STR15[7:0]을 출력한다.
도 6c는 본 발명의 실시 예에 따른 제로-콜랩싱 시프터(630)를 이용하는 제로 값 제거기(601)의 구성을 예시적으로 보여주는 블록도이다. 제로-콜랩싱 시프터(630)의 목적 중 하나는 입력 벡터로부터 제로 값들을 제거하는 것이다. 예를 들어, 입력 벡터가 {0x01, 0x02, 0x00, 0x04, 0x05, 0x06, 0x07}의 값들을 갖는 바이트들로부터 형성된 경우, 제로-콜랩싱 시프터(630)는 이 입력 벡터를 {0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x00}의 바이트 값들을 포함하는 출력 벡터로 변환한다. 왼쪽에서부터 세 번째 위치의 제로 값이 제거되고("콜랩스"되고), 네 번째, 다섯 번째, 여섯 번째, 및 일곱 번째 위치의 논-제로 값들은 모두 한 칸씩 왼쪽 위치로 이동하고, 제로 값을 지닌 바이트는 세 번째 위치에서 벡터의 끝인 여덟 번째 위치로 이동한 것을 확인할 수 있다.
본 발명의 다른 실시 예에서, {0x01, 0x02, 0x00, 0x04, 0x05, 0x00, 0x00, 0x08}의 값들을 포함하는 입력 벡터는 제로-콜랩싱 시프터(630)에 의해 {0x01, 0x02, 0x04, 0x05, 0x08, 0x00, 0x00, 0x00}의 값들을 포함하는 출력 벡터로 변환된다. 이 경우, 입력 벡터의 세 번째, 여섯 번째, 및 일곱 번째 위치의 제로 값들은 "콜랩스"되어 출력 벡터의 여섯 번째, 일곱 번째, 및 여덟 번째 위치로 이동한다. 나머지 논-제로 값들은 필요에 따라 왼쪽으로 이동하여 논-제로 값들의 순서를 유지하면서 "콜랩스"된 제로 값들이 이동하고 남겨진 공간을 채우게 된다. 본 발명의 또 다른 실시 예에서, 입력 값들 중에 제로 값이 포함되지 않은 경우, 출력은 입력과 동일할 것이다.
전술한 바와 같이, 제로-콜랩싱 시프터(630)의 목적 중 하나는 도 6a의 메모리(620)에 논-제로 값들만을 저장할 수 있고, 압축된 데이터(즉, 제로 값들이 제거된 데이터)가 무손실 방식으로 압축 해제될 수 있도록 제로 비트 마스크를 사용하여 제로 값들의 원래 위치를 추적하는 것이다.
제로-콜랩싱 시프터(630)에 입력되는 m개의 값들을 갖는 벡터 I[m-1..0][n-1..0]에 대해, 모든 m 값들의 비트 폭 n은 동일하며, 처리될 데이터의 비트 폭과 일치하도록 선택된다. 예를 들어, 본 발명의 하나의 실시 예에서, m, n 값들은 m=16 및 n=8로 정해져 입력 벡터는 I[15..0][7..0]이 될 수 있다. 제로-콜랩싱 시프터(630)의 출력을 m개의 값들을 갖는 벡터 O[m-1..0][n-1..0]라 하면, 벡터 I 및 O는 모두 동일한 길이 m을 가지며, 벡터 I 및 O의 모든 원소들은 동일한 비트 폭 n을 갖는다.
m=2N개의 입력(채널)들을 갖는 제로-콜랩싱 시프터(630)는 제어 로직을 수반하는 멀티플렉서(631)들의 행렬(이 중 하나의 멀티플렉서(631)만 표시됨)을 포함 할 수 있는 다단계 상호접속 네트워크(multistage interconnection network)로서 구현될 수 있다. 좀 더 상세하게는, 본 발명의 하나의 실시 예에서, m=2N개의 입력(채널)들을 갖는 제로-콜랩싱 시프터(630)는 도 6c에 도시된 바와 같이 m열(채널) 및 N행으로 구성된 2대 1 멀티플렉서(631)들의 행렬을 포함할 수 있다.
설명의 명확성을 위해, m은 임의의 수의 N제곱일 수 있고, N은 자연수(예를 들어, N=4)이다. m개의 입력들을 갖고 m은 2의 거듭제곱이 아닌 제로-콜랩싱 시프터(630)는, 도 6d에 도시된 바와 같이, k개의 입력들을 갖고, k=2N>m이며, 사용되지 않은 입력들 I[k..m-1]은 제로 값들로 설정되고, 사용되지 않은 출력들 O[k..m-1]은 연결되지 않은 상태인 제로-콜랩싱 시프터(630')로 동등하게 표현될 수 있다.
예를 들어, 제어 로직은 도 6a에 도시 된 바와 같이 제로 비트 마스크 생성기(604) 및 멀티플렉서 행렬의 각 멀티플렉서에 대한 선택 신호 생성기(도시되지 않음)를 포함할 수 있다. 제로 비트 마스크 생성기(604)는 채널의 값이 제로인지 여부를 결정하기 위해 각 입력 채널을 검사할 수 있다. 제로 비트 마스크 생성기(604)는 각 활성화된 액티브-하이 신호가 신호에 대응하는 입력 채널의 값이 제로임을 나타내는 1비트 신호들의 벡터 Z[0..m-1]을 출력한다. 이어서, 선택 신호 생성기 로직은, 아래에서 더 상세히 설명되는 바와 같이, Z[0..m-1]을 멀티플렉서 매트릭스 내 모든 멀티플렉서(631)들의 선택 신호 s에 대한 제어 값들로 변환한다.
선택 신호 s는 row=0..N-1, channel=0..m-1인 행렬 s[row][channel]의 형태로 정의될 수 있다. 도 6c를 참조하면, s[0][0]은 왼쪽 상단에 위치하고 s[3][15]는 오른쪽 하단에 위치한다. Z[0..m-1]로부터의 선택 신호 s[row][channel]의 결정은 다음과 같이 진행된다.
초기에, 모든 멀티플렉서들의 선택 신호는 제로, 즉 s[0..N-1][0..m-1] := 0으로 설정된다. 제로 값 채널들의 카운트 nz_ch 또한 제로 값으로 초기화되어 nz_ch := 0으로 설정된다. 다음으로, 멀티플렉서 선택 신호 s[row][column]는 논-제로 입력 채널들로부터 출력 채널들로 값을 적절히 라우팅하도록 구성된다. 이를 위해, 채널들은 채널 ch := 0부터 시작하여, 제로 값 채널들의 카운트를 nz_ch에 저장하면서 반복(iterated)된다. 표기 방식의 경우, 매트릭스 위치 s[row][column] := x에 대해 멀티플렉서 선택 신호를 설정하는 것은 s[row][channel][0..n-1] := n{x}, 즉 베릴로그 표기법(Verilog notation)으로 작성된 바에 따라 비트 x의 값이 n의 폭으로 복제되는 것과 같다. 따라서, 적절한 경우 간결성을 위해, s[row][column] := x와 같은 표기가 s[row][channel][0..n-1] := n{x}와 같은 표기 대신 사용될 것이다.
I[ch] != 0이면, nz_ch 카운트가 증가하고, nz_ch의 현재 값이 이진 표기법 nz_ch_bin[0..N-1]으로 변환되고, 현재 멀티플렉서 선택 채널이 ch_current := ch로 초기화되고, 그리고 row=0부터 nz_ch_bin[0..N-1]이 반복된다. 반복 루프는 먼저 s[row][ch_current] := nz_ch_bin[row]와 같이 설정한 다음, nz_ch_bin[row] == 1인지 여부를 확인한다. 도 6c 내지 도 6d를 참조하면, 조건이 참인 경우 ch_current := ch_current-2row와 같이 설정함으로써, s[row][ch_current]에 대응하는 멀티플렉서의 출력으로부터, 멀티플렉서 선택 행렬 s의 왼쪽 옆으로(가로로) 와이어를 따라간다. 조건이 거짓인 경우, 즉 s[row][ch] == 0인 경우, nz_ch 카운트가 증가하고 멀티플렉서 선택 신호는, 아래에 자세히 설명된 바와 같이, O[m-nz_ch] := 0을 출력하도록 구성된다.
예를 들어, ch_z := m-nz_ch인 경우를 고려해 보면, 도 6d의 예시적인 실시 예에서, O[ch_z] := 0와 같이 설정하는 것은 ch_z를 z[0..ch_z-1][0..n-1] := 0, z[0..m-1][0..n-1] := 1을 만족하도록 z[0..m-1][0..n-1]으로 디코딩하고, O[0..m-1][0..n-1] := s[N-1][0..m-1][0..n-1] AND !z_and[0..m-1][0..n-1]과 같이 비트 단위로 논리 “and” 연산을 적용함으로써 달성될 수 있다.
도 6c의 예시적인 실시 예에서, 제로-콜랩싱 시프터(630)의 출력을 제로화하기 위해 AND 게이트를 추가하는 대신, 관심 있는 출력을 제로화하기 위해 기존의 멀티플렉서 행렬이 사용될 수 있다. 구체적으로, (nz_ch == m)인 경우 아무 계산도 하지 않고(즉, 모든 채널 입력이 0임), 그렇지 않으면 다음과 같이 행 N-1...0에 걸쳐 계산을 반복한다. ch_z>m인 경우 계산이 완료되고, 그렇지 않으면 선택 신호를 s[row][ch_z] :=1과 같이 설정하고(row는 현재 행 번호) 멀티플렉서 s[row][ch_z]의 제로 값이 측면 연결(lateral connection)을 통해 수신되고 있는지 확인한다. 제로 값 검사(zero value check)는 lateral_distance := 2row, 즉, 채널들로 표현된 현재 행의 측면 연결들의 길이를 설정한 다음, ch_z := m-lateral_distance, 즉, 측면 연결을 통해 선택 신호 s[row][ch_z]로 제로 값을 통과시킬 수 있는 채널의 수를 설정하는 것을 포함한다. ch>ch_z인 경우 계산이 완료되고, 그렇지 않으면 (ch_z+lateral_distance<m)인 경우, ch_z := ch_z+lateral_distance와 같이 설정, 즉, 측면 연결이 존재하는 경우(멀티플렉서 s[row][ch_z+lateral_distance]부터 s[row][ch_z]까지), 다음 반복에서 s[row][ch_z+lateral_distance]의 멀티플렉서 선택 신호를 구성하기 위해 그 측면 연결을 따라간다.
도 6e는 제로-콜랩싱 시프터(630)의 모든 채널이 논-제로 값들을 수신하는 상황을 도시한다. 이 경우, 모든 멀티플렉서 선택 신호 s[row][ch] := 0 및 제로-콜랩싱 시프터(630)의 출력 O[0..m-1][0..n-1]은 입력 I[0..m-1][0..n-1]과 동일하다. 도 6e 내지 도 6j에서, 상대적으로 굵은 선 가중치를 갖는 신호 경로는 특정 입력 값이 제로-콜랩싱 시프터(630)를 통해 출력으로 가는 경로를 나타낸다.
도 6f는 채널 12가 제로 값 입력을 수신하는 반면, 나머지 채널들은 논-제로 값 입력들을 수신하는, 즉 I[12][0..n-1] == 0인 상황을 도시한다. 상술된 멀티플렉서 선택 알고리즘에 따라, s[0..N-1][0..m-1] := 0이 초기화된다. 다음으로, 멀티플렉서(631)들은 논-제로 값들을 정확히 출력하도록 구성된다. 구체적으로, 채널들은 채널 ch:=0부터 시작하여 제로 값 채널의 카운트 nz_ch를 저장하면서 반복된다. 제로 값을 수신하는 채널 ch == 12에 도달하면, 이는 0을 수신하여, I[12] == 0이며, nz_ch는 0에서 nz_ch := 1로 증가하고, nz_ch는 이진 표기법 nz_ch_bin[0..N-1] := 1000b로 변환되고, 현재의 멀티플렉서 선택 채널 ch_current := 12는 초기화되고, row=0에서 시작하여 nz_ch_bin[0..N-1] == 1000b가 반복된다.
반복 루프는 s[row][ch_current] := nz_ch_bin[row]와 같이 설정하는 것을 포함한다. nz_ch_bin[0] == 1b이므로, I[0][12] := 1b이다. nz_ch_bin[0] == 1b이므로, 멀티플렉서 s[row][ch_current]의 멀티플렉서 선택 행렬 s(즉, 도 6f의 선택 신호 s[row][ch_current]에 의해 제어되는 멀티플렉서의 출력 와이어)는 s[row][ch_current-2row]의 왼쪽 옆으로, 즉, 선택 신호 s[0][12]부터 선택 신호 s[0][12-20] == s[0][11]까지 따라가고, ch_current := ch_current-2row == 12-20 == 11와 같이 설정한다. 남은 행들 1..3은 비트 벡터 nz_ch_bin[1..N-1] 내에서 반복되어 모든 제로 값들을 산출, 즉, nz_ch_bin[1..N-1] == 000b와 같이 된다. 따라서, 이 단계에서 멀티플렉서 선택 신호는 더 이상 변경되지 않는다.
채널 ch == 12에서, 멀티플렉서 선택 신호는 또한 채널 ch_z := (m-nz_ch) == 16-1 == 15로부터 제로 값을 출력하도록 구성된다. 도 6d의 실시 예에서, o[m-nz_ch][0..n-1] := 0, 즉 z[16-1][0..7] := 0이다. 도 6c의 실시 예에서, 행들 3..0은 다음과 같이 반복된다. 행 4(row := 4)의 경우, ch>m이 거짓인지(그렇지 않으면 계산이 중지 될 것이다), [row][ch_z] := 1과 같이 설정되었는지, 즉 s[3][15] := 1인지를 결정하고, 멀티플렉서 s[3][15]가 측면 연결을 통해 제로 입력을 수신하지 않는지 여부의 점검이 수행된다. 행 3의 측면 연결 길이는 lateral_distance := 23 == 8채널들에 해당한다. 멀티플렉서 신호 s[3][15]에 대한 측면 연결이 존재하는 경우, 멀티플렉서 신호 s[3][15]는 멀티플렉서 신호 s[row-1][ch_z+lateral_distance]로부터 그 제로 값을 수신, 즉, s[3-1][15+8] == s[2][23]이다. 열 23은 전체 열들의 수인 n == 16을 초과하기 때문에 멀티플렉서 신호 s[2][23]은 존재하지 않는다. 따라서, 반복은 나머지 행들 2, 1, 및 0에서 계속된다. 행들 2, 1, 및 0에 대한 측면 연결 길이는 2row와 같고, 이는 4, 2, 및 1이다. 이 모든 경우들에 있어서, (ch_z+4)>n, (ch_z+2)>n, 및 (ch_z+1)>n, 즉, (15+4)>15, (15+2)>15, 및 (15+1)>15이므로 측면 연결은 존재하지 않는다. 따라서, 계산은 완료된다.
도 6g 내지 도 6j는 채널들이 점진적으로 제로 값을 더 수신하는 추가적인 더 진보된 실시 예들을 나타낸다.
도 7은 본 발명의 실시 예에 따른 비트스트림에서 제로 값을 제거하는 회로(700)의 구성을 예시적으로 보여주는 블록도이다. 회로(700)는 16행(R=0 내지 R=15) 및 4열(C=0 내지 C=3)의 어레이로 배열된 64개의 2대 1 8비트 멀티플렉서 (631)들을 포함 할 수 있다. 멀티플렉서(631)에 대한 입력들은 도 7에 도시된 바와 같이 n=8 비트들을 수신하도록 구성된다. C=0인 열에서, R=15인 행에 위치하는 멀티플렉서(631)에 대한 2개의 입력들 중 하나가 입력으로서 8비트 제로 값을 수신하도록 연결된다. C=1인 열에서, R=14 및 R=15인 행들에 위치하는 멀티플렉서들에 대한 2개의 입력들 중 하나가 입력으로서 8비트 제로 값을 수신하도록 연결된다. C=2인 열에서, R=12 내지 R=15인 행들에 위치하는 멀티플렉서들에 대한 2개의 입력들 중 하나가 입력으로서 8비트 제로 값을 수신하도록 연결된다. 마지막으로, C=3인 열에서, R=8 내지 R=15인 행들에 위치하는 멀티플렉서들에 대한 2개의 입력들 중 하나가 입력으로서 8비트 제로 값을 수신하도록 연결된다. 회로(700)를 형성하는 다양한 구성 요소들은(전체로서 회로(700)를 포함하여) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다. 멀티플렉서(631)들을 제어하는 선택 신호는 생략되었다.
첫 번째 열 C=0의 멀티플렉서(631)들은 16개의 데이터스트림들 중 각 데이터스트림의 8비트 값을 수신한다. 첫 번째 열의 멀티플렉서들은 논-제로 값이 R=0인 행으로 시프트되어 R=0 방향의 논-제로 값에 인접한 행의 제로 값을 대체하도록 제어된다. 즉, 각 멀티플렉서(631)에 입력된 데이터스트림의 값들이 검출되고, 만약 값이 제로 값으로 검출되면, 인접하는 행의 논-제로 값이 시프트되어 제로 값으로 검출된 값을 대체할 수 있다.
다시 도 6a를 참조하면, 예시적인 입력(610)에 대한 제로 값 제거기(601)의 예시적인 출력은 611로 표시된다. 일반적으로, 각 데이터스트림은 제로 값이 제거 된 후 서로 다른 길이를 포함할 수 있다. 논-제로 값 패커(602)는 서로 다른 길이의 데이터스트림 (STR0[7:0]-STR15[7:0])을 수신하고 서로 다른 길이의 데이터스트림이 연쇄된(concatenated) 패킹된 데이터(DATA_WR_PACKED[127:0])를 생성한다. 본 발명의 하나의 실시 예에서, 논-제로 값 패커(602)는 도 1c의 버터플라이 셔플러(101)와 같은 버터플라이 셔플러를 포함할 수 있다. 연쇄된 데이터는 메모리(620)에서의 최종 저장을 위해 논-제로 값 패커(602) 내의 FIFO(first-in, first-out) 큐(queue)에 유지될 수 있다.
제로 비트 마스크 생성기(604)는 비트 스트림들의 16개 레인들 Lane0[7:0]-Lane15[7:0] 각각에 연결될 수 있다. 제로 비트 마스크 생성기(604)는 예를 들어, 대응하는 비트스트림의 16바이트 그룹에서 제로 값의 위치를 나타내는 각 레인에 대한 비트 마스크를 생성한다. 즉, 제로 비트 마스크 생성기(604)는 각 레인 Lane0[7:0]-Lane15[7:0]의 각 16바이트 그룹마다 비트 마스크(613)를 생성한다. 비트 마스크의 1비트는 16레인x16바이트 데이터 블록의 1바이트에 해당하므로 비트 마스크 자체의 길이는 256비트이다. 본 발명의 다른 실시 예에서, 제로 비트 마스크 생성기(604)에 의해 생성된 비트 마스크들은 16바이트 값 그룹들과 다른 크기를 가지는 비트스트림들의 값들의 그룹들에 대해 생성될 수 있다. 제로 비트 마스크 생성기(604)에 의해 생성된 마스크 내의 정보는 제로 값 제거기(601) 및 논-제로 값 패커(602)의 동작을 제어하는데 사용될 수 있다. 마스크 패커(605)는 비트 마스크 데이터(613)를 수신하고 저장을 위해 비트 마스크 데이터를 연쇄할 수 있다. 마스크 패커(605)는 또한 메모리(620)의 입력 폭과 일치시키기 위해, 연쇄된 비트 마스크 데이터를 DATA_WR_MASK[127:0]와 같은 저장용 16바이트 워드로 분할한다. 비트 마스크 데이터(613)는 마스크 패커(605) 내의 FIFO 큐에 유지될 수 있다.
행 포인터 생성기(606) 또한 제로 비트 마스크 데이터를 수신할 수 있고, 614에 표시된 DATA_WR_ROWPTR[127:0]과 같이 논-제로 값의 카운트를 추적하여 행 포인터 데이터를 생성할 수 있다. 행 포인터는 텐서(tensor) 내의 각 평면 행의 첫 번째 픽셀을 가리키는 메모리(620)로의 오프셋(offset)이다. 예를 들어, 레이어 활성화 텐서는 64x128x32 바이트의 크기를 가질 수 있으며, 여기서 64x128은 레이어 평면 크기, 즉, 높이 및 폭에 해당하고, 32는 해당 레이어의 깊이 채널들의 수에 해당한다. 이 실시 예에서, 각 행마다 하나씩 64개의 행 포인터가 있을 수 있는데, 각 행 포인터는 메모리(620)에 저장된 압축된 데이터에 대한 오프셋을 포함한다. 행 포인터 데이터(614)는 행 포인터 생성기(606) 내의 FIFO 큐에 유지될 수 있다. 메모리(620)에 저장된 압축된 데이터는 비트 마스크 데이터(613) 및 행 포인터 데이터(614)를 사용하여 임의 접근될 수 있다.
메모리 기록 중재기(603)는 DATA_WR_PACKED[127:0], DATA_WR_MASK[127:0], 및 DATA_WR_ROWPTR[127:0]을 수신하고 각 데이터의 기록을 메모리(620)에 중재한다. 메모리(620)는 휘발성 메모리 및/또는 비 휘발성 메모리일 수 있고, 논-제로 값 데이터(크기가 변할 수 있음)를 위한 영역 또는 공간(621), 및 제로 비트 마스크 데이터와 행 포인터 데이터를 위한 메타 데이터를 위한 영역 또는 공간 (622)을 포함 할 수 있다. 메모리 기록 중재기(603)는 또한 논-제로 값 패커(602)로부터 ADDR_WR_PACKED[] 신호 및 QUEUE_LEN_PACKED[2:0] 신호, 마스크 패커(605)로부터 ADDR_WR_MASK[] 신호 및 QUEUE_LEN_MASK[127:0] 신호, 그리고 행 포인터 생성기(606)로부터 ADDR_WR_ROWPTR[] 신호 및 QUEUE_LEN_ROWPTR[2:0] 신호를 수신할 수 있다. 메모리 기록 중재기(603)는 어떤 특정 데이터 및 언제 그 데이터가 QUEUE_LEN_PACKED[2:0] 신호, QUEUE_LEN_MASK[2:0] 신호, 및 QUEUE_LEN_ROWPTR[2:0] 신호 값들에 기초하여 메모리(620)에 기록되는지를 결정한다. 예를 들어, 메모리 기록 중재기(603)는, 예를 들어, 연관된 FIFO가 메모리(620)에 저장될 준비가 된 대부분의 데이터를 포함한다는 것을 나타내는 가장 큰 값을 포함하는 QUEUE_LEN 신호에 대응하는 데이터를 선택할 수 있다. 기록 동작을 위해 메모리(620)에 기록되기 위해 선택되는 데이터의 크기는 메모리(620)의 포트 폭에 의해 제한될 수 있다. 본 발명의 하나의 실시 예에서, 기록 동작은 16바이트를 포함할 수 있다. 본 발명의 다른 실시 예에서, 기록 동작은 8바이트를 포함할 수 있다. 데이터는 기록 인에이블(write enable; WE) 신호에 의해 제공되는 타이밍과 함께 ADDR_WR 신호에 의해 지시된 위치에 DATA_WR[127:0]으로서 메모리(620)에 기록된다.
ADDR_WR_PACKED[] 신호는 패킹된 데이터가 기록되는 메모리(620) 내의 논-제로 값 데이터를 위한 영역(621)에서의 위치를 결정하기 위해 메모리 기록 중재기(603)에 의해 사용될 수 있다. 마찬가지로, ADDR_WR_MASK[] 신호 및 ADDR_WR_ROWPTR[] 신호는 제로 비트 마스크 데이터 및 행 포인터 데이터가 기록되는 메모리(620) 내의 메타 데이터 영역(622)에서의 위치를 결정하는데 사용될 수 있다. 메모리 기록 중재기(603)는 해당 데이터를 메모리(620)에 기록하는 중재기와 관련하는 FIFO 큐들 중 하나에 팝 신호(즉, pop_packed 신호, pop_mask 신호, 또는 pop_rowptr 신호)를 전송할 수 있어서, 그 데이터는 FIFO에서 제거될 수 있다. 메모리 기록 중재기(603)는 레인 Lane0[7:0]-Lane15[7:0]을 통해 입력되는 데이터의 양을 제어하기 위해 사용 중(busy) 신호 출력을 포함할 수도 있다.
도 8a 내지 도 8b는 본 발명의 실시 예에 따른 비압축 데이터(801)와, 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로(600)에 의해 제공되는 패킹된 데이터에의 임의 접근을 이용한 데이터 압축을 각각 예시적으로 보여주는 도면들이다. 도 8a에 도시된 바와 같이, 비압축 데이터(801)는 각 픽셀이 16바이트의 데이터를 포함하고, 픽셀들의 행이 4개의 픽셀들을 포함하는 8비트 픽셀 데이터를 나타낼 수 있다. 제로 값을 갖는 픽셀은 "0"으로 표시되고, 논-제로 데이터를 갖는 픽셀은 행 번호, 픽셀 번호, 및 레인 번호로 표시된다. 제로-콜랩싱 데이터 컴프레서 및 패커 회로(600)의 16개 레인들은 각각 1바이트의 비압축 픽셀 데이터를 수신한다. 예를 들어, Lane0은 픽셀 0(Pix0)에 대해 비압축 데이터의 바이트 0을 수신한다. Lane1은 Pix0에 대해 비압축 데이터의 바이트 1을 수신한다. 기타 등등. 따라서, 도 8a에 도시된 비압축 픽셀 데이터는 도 6a 내지 도 6b의 비트스트림(610)들에 대응할 수 있다.
도 8b는 비압축 데이터(801)가 압축 데이터(802)를 형성하기 위해 제로-콜랩싱 데이터 컴프레서 및 패커 회로(600)에 의해 압축된 것을 도시한다. 압축된 픽셀 데이터(802)는 패킹된 데이터(612)에 대응할 수 있다. 압축된 픽셀 데이터에 대응하는 제로 비트 마스크 데이터는 803으로 표시된다. 제로 비트 마스크 데이터(803)는 각 16바이트의 비압축 픽셀 데이터에 대한 2바이트의 마스크 데이터를 포함한다. 예를 들어, 마스크 데이터(803a)는 픽셀 Pix0에 대한 16바이트의 비압축 데이터에 대응한다. 마찬가지로, 마스크 데이터(803b)는 픽셀 Pix1에 대한 16바이트의 비압축 데이터에 대응한다. 기타 등등. 압축된 픽셀 데이터(802)에 대응하는 행 포인터 데이터는 804로 표시된다. 행 포인터 데이터(804)는 각 16바이트의 비압축 픽셀 데이터(801)에 대한 2바이트의 행 포인터 데이터를 포함한다. 예를 들어, 행 포인터 데이터(804a)는 픽셀 Pix0에 대한 16바이트의 비압축 데이터에 대응한다. 행 포인터 데이터(804b)는 픽셀 Pix1에 대한 16바이트의 비압축 데이터에 대응한다. 기타 등등.
도 9는 본 발명의 실시 예에 따른 언패커/디컴프레서 회로(900)의 구성을 예시적으로 보여주는 블록도이다. 회로(900)는 일반적으로, 행 포인터 데이터(614)와 제로 비트 마스크 데이터(613)을 이용하여 메모리 영역(621)의 논-제로 값 데이터를 언패킹함으로써, 도 6a의 제로-콜랩싱 데이터 컴프레서 및 패커 회로(600)와 반대로 동작한다. 회로(900)는 메모리 판독 중재기(901), 논-제로 값 언패커(902), 제로 값 삽입기(903), 및 마스크 언패커(904)를 포함할 수 있다. 회로(900)를 형성하는 다양한 구성 요소들은(전체로서 회로(900)를 포함하여) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
메모리 판독 중재기(901)는 메모리(620)로부터 논-제로 값 데이터, 행 포인터 데이터, 및 비트 마스크 데이터를 판독한다. 논-제로 값 언패커(902)는 비트 마스크 데이터에 기초하여 패킹된 데이터를 언패킹한다. 제로 값 삽입기(903)는 비트 마스크 데이터에 기초하여 언패킹된 데이터에 제로 값을 삽입한다. 회로(600)의 논-제로 값 패커(602)가 버터플라이 셔플러(101)와 같은 버터플라이 셔플러를 포함하는 경우, 논-제로 값 언패커(902)는 또한 데이터를 언패킹하기 위해 대응하는 버터플라이 셔플러를 포함할 수 있다.
도 10a 내지 도 10b는 본 발명의 실시 예에 따른 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로(600) 및 도 9의 언패커/디컴프레서 회로(900)에 의해 제공되는 패킹된 데이터에의 임의 접근 기능을 예시적으로 상세히 보여주는 도면들이다. 도 10a에서, 35x35 픽셀 어레이는 1001로 도시되어 있다. 편의상 픽셀 0-2, 35-37, 및 70-72만이 표시된다. 1002에서, 픽셀 어레이(1001)에 대한 압축된 픽셀 데이터는, 예를 들어, 도 6a의 메모리(620)의 논-제로 값 데이터 영역(621)에 저장된 것으로 도시된다. 픽셀 어레이(1001)에 대한 비트 마스크 데이터(1003) 및 행 포인터 데이터(1004)는, 예를 들어, 메모리(620)의 메타 데이터 영역(622)에 저장될 수 있다.
픽셀 어레이(1001)의 처음 3개의 행들에 대한 행 포인터 데이터는 1005에 확장된다. 각 행 포인터는 2바이트의 데이터를 포함하며, 여기서 처음 10비트는 픽셀 어레이(1001)의 행에서 첫 번째 픽셀의 논-제로 값 데이터 영역(621) 내의 셀, 또는 행의 어드레스를 제공할 수 있다. 다음 4비트는 픽셀 어레이(1001)에서 행의 첫 번째 픽셀의 셀에 오프셋을 제공할 수 있다. 마지막 2비트는 사용되지 않을 수 있다. 예를 들어, 도 10b에 도시 된 바와 같이, 어레이(1001)의 행 1에서 픽셀 35에 대한 행 포인터 데이터의 처음 10비트는 픽셀 어레이(1001)에 대한 논-제로 값 데이터 영역(621)의 6번째 행 또는 셀을 가리킨다. 다음 4비트는 픽셀 35에 대한 셀의 오프셋을 가리킨다. 마지막 두 비트는 사용되지 않는다.
도 10c는 본 발명의 실시 예에 따른 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로(600)에 의해 제공된 패킹된 데이터에의 임의 접근 기능을 이용한 압축된 데이터(1002) 내의 윈도우(1006, 예를 들면, 도 10d에서)에 접근하는 방법(1010)을 예시적으로 보여주는 순서도이다. 방법(1010)은 1011에서 시작한다. 1012에서, hxwxd 윈도우는 크기 HxWxD의 픽셀 어레이(1001)에 대하여 위치되며, 여기서 h 및 w는 윈도우 평면 높이 및 폭을 나타내고, H 및 W는 픽셀 어레이의 평면 높이 및 폭을 나타내고, 그리고 윈도우(1006) 내의 깊이 채널들의 수는 텐서(1001)의 그것과 동일, 즉 d=D이다. 1013에서, 평면 인덱스 c 및 r이 초기화되어, 평면 열 및 행 인덱스로써 데이터 텐서(1001) 내의 윈도우의 위치를 나타낸다. 좀 더 상세하게는, c 및 r은 윈도우(1006) 내의 윈도우의 좌측 상단 픽셀의 위치를 지칭한다.
1014에서, 행 r에 위치하는 픽셀들을 위해 행 포인터 데이터가 접근된다. 단계(1015)는, 1014에서 회수된 행 포인터에 의해 지정된 바와 같이, 시작 행과 윈도우(1006)의 시작 열 사이에 위치하는 픽셀이 있는지를 검사한다. 선행(leading) 픽셀이 필요하지 않기 때문에, 그들의 회수 및 압축 해제는 생략되어야 한다. 선행 픽셀이 존재하면, 단계 1017 및 1018은 선행 픽셀들을 고려하기 위해 행 포인터를 업데이트한다. 좀 더 상세하게는, 1017에서, 방법(1010)은 행 r, 열 0...c-1의 픽셀들에 대한 비트 마스크를 회수한다. 단계(1018)는 회수된 비트 마스크에서 제로 값들의 개수 n을 카운트하여 논-제로 값 데이터 영역(621)에서 선행 픽셀들이 차지하는 바이트의 수(논-제로 값 포함)를 얻는다. 단계(1019)는 메모리(620) 시작 위치, 즉 행 r과 열 c에 대한 압축된 데이터가 저장된 SRAM 워드 내의 메모리(620) 어드레스 및 바이트 오프셋을 계산하기 위해 행 포인터 r을 오프셋 n만큼 증가시킨다.
(r, c)에 위치하는 픽셀에 대응하는 비트 마스크는 메모리(620) 워드 floor((r*W+c)*D/b)+Abit_mask 및 메모리(620) 워드 내의 바이트 오프셋 mod((r*W+c)*D, b)에서 시작하여 포함된다. 여기서 b는 바이트 단위의 SRAM 워드 크기이고, Abit_mask는 비트 마스크 메타 데이터가 메모리(620)에 저장되는 시작 주소이다.
스킵될 선행 픽셀들이 없는 경우, 단계(1016)는 스킵할 바이트 수 n을 0으로 설정하고 단계(1019)로 진행한다. 단계(1020)는 메모리 영역(622)으로부터의 연관된 비트 마스크 데이터뿐만 아니라 행 r에 위치하는 픽셀들 c...c+w-1에 대한 메모리 영역(621)으로부터 압축된 픽셀 데이터를 회수한다. 단계(1021)는 연관된 비트 마스크를 사용하여 회수된 픽셀 데이터를 압축 해제하고 출력한다. 단계(1022)는 행 인덱스 r을 증가시키고, 전체 윈도우(1006)로부터의 데이터가 페치(fetched)될 때까지 단계(1014)로부터 프로세스가 반복되고, 단계(1023)는 루프를 중단하여 방법(1010)의 실행을 종료한다.
윈도우(1006) 내의 깊이 채널들의 수 d가 텐서(1001) 내의 깊이 채널들의 수 D보다 작은 경우, 즉 d<D 인 경우, 방법(1010)은 사용되지 않은 깊이 채널들의 출력을 스킵함으로써 수정될 수 있다. 윈도우(1006) 내의 데이터가 하나 이외의 수직 및/또는 수평 스트라이드(stride)를 사용하여 회수되어야 하는 경우, 사용되지 않은 픽셀들의 회수 및 출력은 전술한 바와 같이 선행 픽셀들을 스킵하는 것과 유사한 방식으로 억제될 수 있다.
도 10d는 본 발명의 실시 예에 따라 도 10c의 방법(1010)을 이용하여 35x35 픽셀 어레이(1001)로부터 3x4 데이터 윈도우(1006)를 회수하는 것을 보여주는 도면이다. 이 실시 예에서, 윈도우 좌표들 (row0, col0)은 (0, 3)이다. 편의상, 픽셀 어레이(1001)의 픽셀들 0-6, 35-41, 및 70-76만이 표시된다. 처음에, 방법(1010)은 행 0에 대한 행 포인터를 회수한다. 회수된 값은 픽셀 0의 위치를 나타낸다. 이어서, 방법(1010)은 픽셀 0, 1, 2, 및 3과 연관된 비트 마스크를 페치하고, 이들 비트 마스크에서 0비트를 카운트하여 압축된 데이터 저장 영역(621)에서 픽셀들 0...3이 차지하는 바이트 수를 계산하고 그리고 픽셀 4를 나타내는 것과 같이 계산된 바이트 수만큼 포인터를 증가시킴으로써 불필요한 선행 픽셀 0...3을 스킵한다. 메모리 행 포인터는 워드 어드레스와 워드에 대한 오프셋을 포함할 수 있다. 메모리(620) 내의 오프셋 Abyte에 위치한 바이트에 접근하는 것은, s가 바이트 단위의 SRAM 워드 폭인 메모리 워드 내의 오프셋 mod(Abyte, s)에서 메모리 어드레스 floor(Abyte/s)에 접근하는 것에 대응한다.
픽셀 4에 대한 메모리 영역(621) 내의 압축된 데이터의 위치, 즉, 픽셀 4의 어드레스 및 메모리 워드 내의 그 오프셋을 계산한 후, 방법(1010)은 픽셀 4...6에 대한 압축된 데이터를 페치하고, 픽셀 4...6에 대한 비트 마스크 데이터를 페치하고, 압축된 데이터를 압축 해제하기 위해 둘을 결합하고, 제로 값 바이트를 다시 삽입하여 압축된 데이터를 팽창시키고, 그리고 압축 해제된 결과를 출력한다. 이 프로세스는 행 1에 대해 한 번 더 반복되고 행 2에 대해 한 번 더 반복되어 픽셀 어레이(1001)로부터 윈도우(1006)의 회수를 완료한다.
버터플라이 셔플러는 또한 희소 데이터를 균질화하기 위해 사용될 수 있다. 특징 맵 및 신경망 가중치와 관련된 데이터와 같은 희소 데이터가, 함께 덩어리진(clumped) 논-제로 값들을 포함 할 수 있는 상황이 있을 수 있다. 즉, 데이터는 비균질 희소 데이터일 수 있다. 이러한 상황에서, 예를 들어, 입력 특징 맵(input feature map; IFM) 값 또는 활성화 함수로부터 값과 가중치 값을 병렬로 곱함으로써 희소 데이터를 병렬 처리 할 수 있는 시스템은, 작은 멀티플라이어들의 그룹들이 대량의 곱셈을 제공하는 반면, 다수의 유휴 상태의(idling) 멀티플라이어를 가질 수 있어(적어도 하나의 피연산자는 0과 동일) 병목 상태를 초래할 수 있다. 본 명세서에서 사용되는 용어 "활성화 값(또는 데이터)"은 활성화 함수로부터 출력된 값을 의미한다. 또한, 본 명세서에서 사용되는 용어 "입력 특징 맵 값(또는 데이터)" 및 "활성화 값(또는 데이터)"은 상호 교환적으로 사용될 수 있다. 희소 데이터를 보다 더 균일하게 하여, 멀티플라이어가 보다 더 균일하게 이용되도록 입력 특징 맵 값 및/또는 가중치 값을 셔플(재배열)하기 위해 버터플라이 셔플러가 사용될 수 있다.
도 11a는 본 발명의 실시 예에 따른 희소 데이터를 균질화하기 위해 버터플라이 셔플러를 활용하는 희소 데이터 처리 시스템(1100)의 구성을 예시적으로 보여주는 블록도이다. 본 발명에 따른 하나의 실시 예에서, 희소 데이터 처리 시스템(1100)은 입력 특징 맵 값과 가중치를 병렬 곱셈하여 컨볼루션 및 벡터-매트릭스 곱셈을 계산하기 위해 병렬로 출력 특징 맵(output feature map; OFM) 값을 생성할 수 있으며, 2019년 6월 19일자로 출원되었고 출원번호는 16/446,610이며 명칭은 "NEURAL PROCESSOR"('610 출원)인 미국 특허에 더 상세히 설명되고, 전체 내용은 본 명세서에 참고로 포함되어 있다. 처리 시스템(1100)은 메모리(1101), 메모리 판독 중재기(1102), 듀얼 포트 캐시(1103), 캐시 컨트롤러(1104), 제 1 제로-익스팬딩(zero-expanding) 시프터(1105), 제 2 제로 익스팬딩 시프터(1106), 듀얼 포트 FIFO(1107), 룩-어헤드(look-ahead) 희소성 컨트롤러(1108), 멀티플라이어 유닛 어레이(multiplier unit array; MUA)(1109), 버터플라이 셔플러(1110), 데이터 컴프레서(1111), 및 메모리 컨트롤러(1112)를 포함할 수 있다. 회로(1100)를 형성하는 다양한 구성 요소들은(전체로서 회로(1100)를 포함하여) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
메모리(1101)는 하나 이상의 출력 특징 맵들에 대한 입력 특징 맵 값들을 저장할 수 있다. 출력 특징 맵들은 일반적으로 신경망 모델에서 다음 레이어에 대한 입력 특징 맵들로서 작용하기 때문에, 출력 특징 맵들을 입력 특징 맵들이라고 지칭 할 수 있다. 메모리(1101)는 휘발성 메모리 및/또는 비휘발성 메모리일 수 있다. 본 발명에 따른 하나의 실시 예에서, 메모리(1101)는 도 6의 메모리(620)에 대응할 수 있고, 입력 특징 맵 값들은 본 명세서의 다른 곳에 기술된 바와 같이 패킹되고 압축된 논-제로 값들, 제로 비트 마스크 데이터, 및 행 포인터 데이터를 포함할 수 있다. 메모리(1101)의 출력은 메모리 판독 중재기(1102)에 입력될 수 있다. 메모리 판독 중재기(1102)는 개념적으로 도 9의 모듈(901)에 대응할 수 있다. 캐시(1103)에는 입력 특징 맵 압축 데이터, 비트 마스크, 및 선택적으로 행 포인터들을 포함하는 메모리 판독 중재기(1102)의 출력이 입력될 수 있다. 캐시(1103), 제로 익스팬딩 시프터(1105 및 1106), 및 FIFO(1107)는 모두 멀티플라이어 유닛 어레이(1109)에 근접하게 배치될 수 있다.
캐시 컨트롤러(1104)는 제 1 및 제 2 제로 익스팬딩 시프터(1105 및 1106)에 대한 입력 특징 맵 값들의 수신 및 입력 특징 맵 값들의 출력 모두를 제어 할 수 있다. 제 1 입력 특징 맵에 대한 한 세트의 입력 특징 맵 값들은 제 1 제로 익스팬딩 시프터(1105)로 출력될 수 있고, 제 2 입력 특징 맵에 대한 다른 세트의 입력 특징 맵 값들은 제 2 제로 익스팬딩 시프터(1106)로 출력될 수 있다. 제로 익스팬딩 시프터(1105 및 1106)는 입력 특징 맵 값들에 포함된 제로 비트 마스크 데이터에 기반하여 입력 특징 맵 값들에 제로 값들을 역으로 다시 추가할 수 있도록 구성될 수 있다. 결과적으로 확장된 입력 특징 맵 데이터는 희소 데이터일 수 있다. 제로 익스팬딩 시프터(1105 및 1106)는 각각 개념적으로 도 9의 모듈들(902, 903, 및 904)에 대응할 수 있다.
확장 후, 입력 특징 맵 값들은 듀얼 포트 FIFO(1107)에 입력되며, 또한 '610 출원에서는 입력 특징 맵 버퍼로 지칭된다. 입력 특징 맵 픽셀들은 최대 2개까지 언패킹되고, 팽창되고, 그리고 듀얼 포트 FIFO(1107)에 동시에 입력될 수 있다. 캐시 컨트롤러(1104)는 FIFO(1107)가 처리 대기중인 픽셀들의 큐('610 출원에서는 입력 특징 맵 슬라이스로 지칭됨)를 유지하도록 듀얼 포트 캐시(1103)의 출력을 제어한다. 픽셀들은 동일한 입력 특징 맵에 속할 수 있으며, '610 출원에서 더 상세히 설명된 바와 같이 멀티플라이어 유닛 어레이(1109)에 의한 처리 순서에 따라 큐잉될(queued) 수 있다. 좀 더 상세하게는, '610 출원에 개시된 기준 실시 예에서는 제로 값 활성화를 멀티플라이어 유닛 어레이(1109)에 전송하는 것을 피하도록 FIFO(입력 특징 맵 버퍼)(1107)를 제어한다. 각 레인에서, 연산을 위해 멀티플라이어 어레이(1109)에 전송될 활성화가 제로 값을 가지게 되면, FIFO(입력 특징 맵 버퍼)(1107)는 제로 값 활성화 대신에 논-제로 활성화 값을 찾아서 보내려고 시도할 수 있다. 논-제로 활성화를 찾는 것은 인접한 레인, 즉, 현재 레인의 1개 레인 위 및 1개 레인 아래의 활성화 값을 확인하는 것뿐만 아니라, 동일한 레인에 대기 중인 다음 활성화 값을 확인하는 것을 포함할 수 있다. 논-제로 값 활성화가 발견되면, 그 활성화는 제로 값 활성화를 전송하는 것 대신 순서와 다르게 멀티플라이어 유닛 어레이(1109)로 전송될 수 있다. 멀티플라이어 유닛 어레이(1109)는, '610 출원에서 보다 상세히 설명된 바와 같이, 대신 전송된 논-제로 값 활성화에 정확한 가중치를 적용하고, 그리고 추가 가산기 트리(adder tree)를 사용하여 원하는 내적(dot product)을 정확하게 계산할 것이다. '610 출원의 기준 실시 예와 달리, 도 11a의 실시 예는 회로 영역 및 전력을 감소시키기 위해 논-제로 값 활성화에 대한 검색을 동일한 레인 내에서만 이루어지도록, 즉, 1개 레인 위 및 1개 레인 아래로 검색하지 않도록 제한할 수 있다. 그러나, 도 11a의 FIFO(입력 특징 맵 버퍼)(1107)는 멀티플라이어 유닛 어레이(1109)에 두 세트의 활성화 브로드캐스트 레인들을 제공하는데, 제 1 세트의 활성화 레인이 현재 큐잉된 값(입력 특징 맵 슬라이스)들을 브로드캐스트하는 한편, 제 2 세트의 활성화 레인은 다음으로(up-next) 큐잉된 값들, 즉 기준 실시 예에서 다음 클록 사이클에 브로드캐스트될 값들을 브로드캐스트한다.
멀티플라이어 유닛 어레이(1109)는 예를 들어, 16행 및 8열로 배열된 멀티플라이어 회로들(1120)의 어레이를 포함할 수 있다. 각 멀티플라이어 회로(120)는 멀티플라이어(1121), 제 1 입력 멀티플렉서(1122), 제 2 입력 멀티플렉서(1123), 및 출력 멀티플렉서(1124)를 포함할 수 있다. 제 1 입력 멀티플렉서(1122)는 듀얼 포트 FIFO(입력 특징 맵 버퍼)(1107)로부터 2개의 입력 특징 맵 값들을 수신하도록 구성 될 수 있다. 예를 들어, 행 0, 열 0에 위치하는 멀티플라이어(1121)의 제 1 입력 멀티플렉서(1122)는 채널 0에 대한 입력 특징 맵 데이터 및 채널 0에 대한 다음(up-next) 입력 특징 데이터를 수신할 수 있다. 제 2 입력 멀티플렉서(1123)는 로컬 가중치 레지스터 파일(본 명세서에는 도시되지 않았으나 '610 출원에서 더 상세히 설명됨)로부터 2개의 가중치 값들을 수신하도록 구성될 수 있다. 예를 들어, 행 0, 열 0에 위치하는 멀티플라이어(1121)의 제 2 입력 멀티플렉서(1123)는 가중치 0 및 가중치 1에 대한 가중치 데이터를 수신할 수 있다.
룩-어헤드 희소성 컨트롤러(1108)는 듀얼 포트 FIFO(1107)에서 레인에 대기 중인 입력 특징 맵 값들을 계산하고, 제 1 멀티플렉서(1122)에 입력되는 논-제로 입력 특징 맵 값을 첫 번째 피연산자로 선택하도록 제 1 멀티플렉서(1122)를 제어한다. 다른 하나의 룩-어헤드 희소성 컨트롤러(도시되지 않음)는 로컬 가중치 레지스터 파일(도시되지 않음)의 레인에 대기 중인 가중치 값들을 보고, 제 2 멀티플렉서(1123)에 입력되는 논-제로 값 가중치를 두 번째 피연산자로 선택하도록, 즉, 가중치가 제로 값이거나, 그 레인의 활성화가 제로인 경우 곱셈을 스킵하도록 제 2 멀티플렉서(1123)를 제어한다.
멀티플라이어(1121)는 멀티플라이어(1121)에 입력된 2개의 논-제로 피연산자들의 곱을 생성한다. 출력 멀티플렉서(1124)는, 룩-어헤드 희소성 컨트롤러들에 의해 제공되는 제 1 입력 멀티플렉서 및 제 2 입력 멀티플렉서(1122 및 1123)에 대한 제어에 기반하여, 멀티플라이어(1121)에 의해 생성 된 곱에 대해 적절한 가산기 트리(도시되지 않음)를 선택하도록 제어된다. 듀얼 포트 FIFO(1107), 룩-어헤드 희소성 컨트롤러(1108), 및 멀티플라이어 유닛(1109)의 작동에 대한 추가적인 상세한 사항들은 '610 출원에 개시되어 있으며, 이는 그 전문이 본 명세서에 참조로 포함된다.
멀티플라이어 유닛(1109)의 출력 특징 맵 출력은 버터플라이 셔플러(1110)에 입력된다. 멀티플라이어 유닛(1109)의 출력 특징 맵 출력은 비균질 희소 데이터일 수 있다. 즉, 희소 데이터에 논-제로 값들의 덩어리들이 있을 수 있다. 버터플라이 셔플러(1110)는 데이터를 셔플하여 균질한 희소 데이터를 생성할 수 있다. 즉, 멀티플라이어 유닛(1109)의 8개의 열들로부터 출력된 각 출력 특징 맵 출력은 버터플라이 셔플러(1110)의 대응하는 입력에 입력되며, 이는 도 11b 내지 도 11c에 도시된 바와 같이 구성될 수 있다. 도 1a 내지 도 1b의 버터플라이 셔플러와 달리, 도 11c의 버퍼플라이 셔플러의 더 적은 제어 입력들이 서로 묶여있어 더 많은 재배열(permutation)을 가능하게 한다.
버터플라이 셔플러(1110)는 도 11b에 도시된 제 1 멀티플렉서(1151) 및 제 2 멀티플렉서(1152)를 포함하는 복수의 멀티플렉서 모듈 컴포넌트들(1150)을 포함할 수 있다. 각 멀티플렉서(1151 및 1152)는 각각 n비트를 수신하는 2개의 입력들을 포함한다. 멀티플렉서(1151)의 "a" 입력에는 n비트들의 세트 a0가 입력되고, 멀티플렉서(1151)의 "b" 입력에는 n비트들의 세트 a1이 입력된다. n비트들의 세트 b0는 멀티플렉서(1152)의 "b" 입력, n비트들의 세트 b1은 멀티플렉서(1152)의 "a" 입력에 입력된다. 제어 입력 "x"는 멀티플렉서들(1151 및 1152) 모두에 입력된다.
도 11c는 본 발명의 실시 예에 따른 버터플라이 셔플러(1110)의 구성을 예시적으로 보여주는 도면이다. 버터플라이 셔플러(1110)는 8행 (R=0 내지 R=7) 및 4열 (C=0 내지 C=3)의 어레이로 배열된 32개의 2대 1 8비트 멀티플렉서 모듈(1150)을 포함할 수 있고, 도시된 바와 같이 연결된다. 각 멀티플렉서 모듈(1150)은 제어 신호 x0..7,0..3을 수신할 수 있다.
버터플라이 셔플러(1110)는 값 별로(value-by-value basis) 데이터를 셔플링하도록 제어될 수 있다. 멀티플라이어 유닛 어레이(1109)로부터 출력된 출력 특징 맵 데이터가 8비트 데이터인 경우, 버터플라이 셔플러(1110)의 멀티플렉서 모듈(1150)들은 8비트 데이터를 셔플하도록 제어될 수 있다. 즉, 단일 값의 출력 특징 맵 데이터와 연관된 비트들은 값들이 셔플될 때 함께 유지된다. 예를 들어, 출력 특징 맵 데이터가 16비트 데이터인 경우, 버터플라이 셔플러(1110)의 멀티플렉서들은 16비트 데이터를 셔플하도록 제어되고, 버터플라이 셔플러(1110)는 도 1d에 도시된 버터플라이 셔플러와 유사하게 구성될 수 있다. 버터플라이 셔플러(1110)의 멀티플렉서들은 도 11d에 도시된 바와 같이 출력 특징 맵 데이터를 균질화하기 위해 랜덤 또는 슈도-랜덤(pseudo-random) 방식으로 슈도-랜덤 생성기(1160)에 의해 제어될 수 있다.
멀티플라이어 유닛 어레이(1109) 출력의 셔플링이 슈도-랜덤 값 생성기에 의해 제어될 때, 이에 따라 '610 출원에 기술 된 바와 같이, 다음 레이어의 가중치들은 출력 활성화들에 적용되는 슈도-랜덤 셔플링 순서와 일치하도록 오프라인으로 사전 셔플되어야 하며, 그 결과 다음 레이어 계산 동안 입력 특징 맵 값들이 멀티플라이어 유닛 어레이(1109)로 사전 로딩된 가중치들과 함께 적용될 연관된 가중치들에 정확하게 대응하게끔 한다.
버터플라이 셔플러(1110)의 출력 특징 맵 출력은 도 6a에 도시된 컴프레서에 대응할 수 있는 데이터 컴프레서(1111)에 입력될 수 있다. 데이터 컴프레서(1111)의 출력 특징 맵 출력은 메모리(1101)에 저장될 수 있다. 본 발명에 따른 하나의 실시 예에서, 버터플라이 셔플러(1110)의 출력 특징 맵 출력은 도 6a에 도시 된 제로-콜랩싱 데이터 컴프레서/패커 회로(600)에 입력되어, 메모리(1101)(또는, 오히려 메모리(620))에 저장하기 위해 제로 값들을 제거하고 데이터를 패킹함으로써 데이터를 압축할 수 있다. 도 11a의 실시 예와 '610 출원의 기준 실시 예 사이의 차이점들은 몇 가지 고려 사항들에 의해 동기 부여될 수 있다. 첫 번째로, SRAM(1101) 및/또는 입력 특징 맵 전달 패브릭의 대역폭이 제한될 수 있는 경우를 고려한다. 좀 더 상세하게는, 일부 레이어에서의 입력 특징 맵 값들은, 멀티플라이어 유닛 어레이(1109)에 충분한 논-제로 활성들을 제공하여 멀티플라이어(1121)들이 유휴 상태에 있는 것을 방지하기 위해 입력 특징 맵이 몇 배 더 빨리 회수되어야 하는, 즉, 1/(100%-90%)=10x, 높은 희소성을, 예를 들어 최대 90%까지, 가질 수 있다. 압축되지 않은 상태와 달리, 압축된 입력 특징 맵을 입력 특징 맵 패브릭에 걸쳐 전송하는 것뿐만 아니라 회수하는 것은 멀티플라이어 활용률을 높이는 데 도움이 될 수 있다. 압축된 입력 특징 맵을 저장 및 전송하는 것이 불가능하거나, 입력 특징 맵 회수 속도가 멀티플라이어 이용률을 높게 유지하기에 여전히 불충분한 경우, 멀티플라이어 유닛(1120)은 각 입력 특징 맵 입력 슬라이스마다 여러 출력 특징 맵 슬라이스 결과들을 계산함으로써, 즉, '610 출원에 설명된 바와 같이 출력 특징 맵 사이클링을 효과적으로 수행하면서, '610 출원에 비해 더 많은 출력 특징 맵 값들을 생성하도록 구성 될 수 있다.
도 11a를 참조하면, 두 번째 고려 사항은 활성화 희소성뿐만 아니라 가중치 희소성을 사용하는 것, 즉, 멀티플라이어(1121)에 의해 곱해질 활성화 또는 가중치(또는 둘 다)가 제로 값을 가질 때 곱셈을 수행하는 시간뿐만 아니라 곱셈을 생략하는 것일 수 있다. 좀 더 상세하게는, 각 멀티플라이어 유닛(1120)은 제 1 세트의 활성화 레인들을 통한 활성화 브로드캐스트(broadcast)를 곱하기 위한 가중치가 0인지를 검사할 수 있고, 해당 멀티플라이어 유닛은 대신에 제 2 세트의 활성화 레인들을 통해 "업-넥스트(up-next)" 활성화 브로드캐스트를 취하도록 진행하고, 그것을 관련 가중치와 곱할 수 있다.
그러한 비 순차적(out-of-order) 방식으로 활성화들에 가중치들을 곱하면, 일부 멀티플라이어 유닛(1120)들이 다른 멀티플라이어 유닛(1120)들보다 먼저 실행될 수 있다. 따라서, 멀티플라이어 유닛(1120)들의 출력들은 각 멀티플라이어 단위 열에 있는 개별 곱(product)들이 각 멀티플라이어 단위 열에 있는 가산기 트리들에 의해 내적(dot product)으로 정확하게 축소될 수 있도록 재동기화(re-synchronized)될 필요가 있을 수 있다. 멀티플라이어 유닛(1120)의 출력들을 재동기화하는 한 가지 방법은 작은 출력 FIFO들을 추가하는 것을 포함할 수 있다. 멀티플라이어 유닛(1120)의 출력들을 재동기화하는 다른 하나의 방법은, 다른 멀티플라이어 유닛(1120)들보다 상당히 앞서 실행중인 멀티플라이어 유닛(1120)들을 유휴시키는 것, 즉, 슈도-랜덤 방식으로 각 출력 특징 맵 슬라이스 내에서 출력 결과를 재배열하기 위해 버터플라이 셔플러(1110)를 사용하는 것과 같이 입력 특징 맵을 균일하게 희소하도록 만드는 동안, 희소성의 변동에 기인하는 것일 수 있다.
제로 가중치 곱셈들, 그리고 곱셈들을 수행할 시간이 둘 다 스킵되는 경우, 수행될 남아있는 곱셈들의 횟수는 감소될 수 있다. 입력 특징 맵이 고정된 속도에 도달하면, 멀티플라이어(1121)들의 활용은 결과적으로 감소할 것인데, 제로 가중치를 포함하는 곱셈을 스킵함으로써 해제된 시간 동안 처리할 논-제로 입력 특징 맵 값들을 갖지 않기 때문에 멀티플라이어(1121)들이 유휴 상태가 될 수 있기 때문이다. 이러한 멀티플라이어 활용도 감소는 입력 특징 맵 SRAM 및 입력 특징 맵 전달 패브릭 대역폭을 증가시켜 되돌릴 수 있다.
앞서 언급한 바와 같이, 희소성이 레인에서 레인으로, 입력 특징 맵 슬라이스에서 입력 특징 맵 슬라이스로 변동함에 따라, 특히 입력 특징 맵 대역폭이 멀티플라이어 유닛(1120)들이 높은 활용률을 유지하도록 하기에 불충분한 경우, 일부 멀티플라이어 유닛(1120)들은 다른 멀티플라이어 유닛(1120)들보다 앞서 실행될 수 있고, FIFO(1107)가 입력 특징 맵 버퍼로서 작용하여, 각 레인에서 현재 및 다음의 논-제로 활성화들을 전송하게 되어, 다른 열들(유닛(1120)들)보다 앞서 실행 중인 멀티플라이어 어레이 열들(또는, 출력 FIFO들을 가지는 개별 멀티플라이어 유닛(1120)들)이 다른 열들을 기다리는 대신 다음 출력 특징 맵 슬라이스를 계산하는 것으로 진행할 수 있도록 하게 한다. 각 멀티플라이어 어레이 열은, 예를 들어, 다음 입력 특징 맵 슬라이스로 진행하기 전에 2개의 출력 특징 맵 슬라이스들을 계산할 수 있다. 입력 특징 맵 슬라이스 당 하나 이상의 출력 특징 맵 슬라이스(출력 특징 맵 사이클링)를 계산하는 것은 멀티플라이어(1121)들이 활용되도록 유지하기 위해 대응하는 더 적은 입력 특징 맵 대역폭을 요구한다.
도 12a는 본 발명의 실시 예에 따른 패킹된 데이터에의 임의 기록 접근을 제공하는 채널-병렬 컴프레서 회로(1200)의 구성을 예시적으로 보여주는 블록도이다. 도 12b는 본 발명의 실시 예에 따른 도 12a의 채널-병렬 컴프레서 회로(1200)에 의해 제공된 패킹된 데이터에의 임의 접근을 이용한 채널-병렬 압축을 예시적으로 보여주는 도면이다.
컴프레서 회로(1200)는 도 6a에 도시된 제로-콜랩싱 데이터 컴프레서/패커 회로(600)와 유사하지만, 다음과 같은 차이점이 있다. 논-제로 값 패커(602)는 컴프레서 회로(1200)에서는 버터플라이 셔플러(1201) 및 FIFO(1202)에 의해 대체된다. 회로(1200)는 제로-값 제거기(601), 버터플라이 셔플러(1201), FIFO(1202), 메모리 기록 중재기(603), 제로 비트 마스크 생성기(604), 마스크 패커(605), 및 행 포인터 생성기(606)를 포함할 수 있다. 제로-값 제거기 회로(601)는 회로(1220)으로 대체되어, 회로(601)가 레인 인덱스 차원을 따라 개별적으로 각 입력 특징 맵 슬라이스로부터 제로 값을 제거하는(콜랩스하는) 경우, 회로(1220)는 연관된 레인에서 수신되는 바와 같이 시계열(time series) 인덱스 차원을 따라 각 채널 스트림으로부터 개별적으로 제로 값을 제거(콜랩스)한다. 시계열 인덱스 차원을 따라 제로 값들을 제거하는 회로(1220)는 각 입력 레인과 직렬로 FIFO 버퍼를 배치함으로써 구현될 수 있으며, 값이 논-제로인 경우에만 값이 채널 FIFO에 기록된다. 회로(1200)를 형성하는 다양한 구성 요소들은(전체로서 회로(1200)를 포함하여) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다. 회로(1200)의 동작은 회로(600)의 동작과 유사하고, 동작의 많은 세부 사항은 회로(600)와 관련하여 설명된다.
도 12a 내지 도 12b를 참조하면, 제로 값 제거기(601)는 16개의 레인들(즉, Lane0[7:0]-Lane15[7:0]) 또는 채널들의 바이트스트림 데이터(1210)를 수신할 수 있다. 바이트스트림 데이터(1210)의 각 레인은 16바이트의 비압축 논-제로 값 데이터와 제로 값 데이터를 포함할 수 있다. 논-제로 값 데이터는 교차 해칭 또는 음영으로 표시되고 제로 값 데이터는 "0"으로 표시된다. 본 발명에 따른 하나의 실시 예에서, 16바이트의 데이터는 픽셀의 데이터에 대응할 수 있다.
제로 값 제거기(1220)는 상술한 바와 같이 각 바이트스트림(1210)으로부터 제로 값 데이터를 제거하도록 구성될 수 있다. 제로 값 제거기(1220)는 16개의 바이트스트림들(STR0[7:0]-STR15[7:0])을 출력하는데, 여기서 각 바이트스트림은 제로 값이 제거되어 있다. 예시적 입력(1210)에 대한 제로 값 제거기(1220)의 출력은 도 12a의 1211에 도시되어 있다. 일반적으로, 각 바이트스트림은 제로 값이 제거된 후 서로 다른 길이를 포함할 수 있다. 버터플라이 셔플러(1201)는 서로 다른 길이의 바이트스트림들(STR0[7:0]-STR15[7:0])을 수신하고, 도 13a 내지 도 13b에 도시된 바와 같이, 서로 다른 길이의 바이트스트림들이 연쇄된 패킹된 데이터를 생성한다.
도 13a 내지 도 13c는 본 발명의 실시 예에 따라 다른 바이트스트림 길이를 포함하는 8개의 바이트스트림들이 각각 동일한 바이트스트림 길이를 포함하는 8개의 바이트스트림들로 반복적으로 패킹되는 과정을 예시적으로 보여주는 도면들이다. 이 실시 예는 8개 레인들의 바이트스트림을 도시하지만, 16개 레인들의 바이트스트림도 유사한 방식으로 동작한다. 또한, 이 예는 도 2a 내지 도 2c에서 전술한 바와 같이, 1비트 대신 1바이트의 세분도, 즉, 입력 비트 폭으로 동작하는 버터플라이 셔플러를 나타낸다. 도 1c, 도 12a, 도 13a, 및 도 13b를 참조하면, 1301로 도시 된 8개의 예시적인 바이트스트림들(0-7)은 일반적으로 서로 다른 바이트스트림 길이를 포함하며, 예를 들어(및 편의상), 버터플라이 셔플러(101)의 멀티플렉서(10400 내지 10470)에 입력된다. 도 12a의 버터플라이 셔플러(1201)는 도 1c의 버터플라이 셔플러(101)와 유사하게 구성될 수 있다. 서로 다른 바이트스트림들은 서로 다른 크로스(교차) 해칭으로 표시된다. 바이트스트림들(0-7)은 입력 멀티플렉서들의 페어링에 대응하는 4개의 쌍들로 쌍을 이루고 또는 그룹화된다.
도 13a의 1302에서, 더 긴 바이트스트림 길이를 포함하는 바이트스트림 쌍의 각 바이트스트림의 일부, 또는 헤드는 해당하는 쌍의 멀티플렉서들을 제어함으로써 버터플라이 셔플러(1201)를 통해 재배치되거나 리다이렉트되어 더 짧은 바이트스트림 길이를 포함하는 쌍의 바이트스트림의 일부가 되고, 해당하는 쌍의 바이트스트림들은 동일한 바이트스트림 길이를 포함하게 된다. 예를 들어, 바이트스트림 0의 일부는 C=0인 열에 위치하는 멀티플렉서들에 의해 바이트스트림 1의 일부가 되도록 리다이렉트된다. 마찬가지로, 바이트스트림 2의 일부는 바이트스트림 3의 일부가 되도록 리다이렉트된다. 바이트스트림 4의 일부는 바이트스트림 5의 일부가 되도록 리다이렉트되고, 그리고 바이트스트림 7의 일부는 바이트스트림 6의 일부가 되도록 리다이렉트된다. 바이트스트림 쌍의 바이트스트림 길이 차이가 홀수 개의 바이트일 때, 더미 또는 필러 바이트는 두 바이트스트림 중 더 짧은 바이트스트림 길이를 포함하는 바이트스트림에 추가될 수 있다. 쌍들 내에서 동일한 바이트스트림 길이를 포함하는 바이트스트림의 쌍들은 1303에 도시되어 있으며, C=0인 열에 위치하는 멀티플렉서에서 출력된다. 1303에 도시된 서로 다른 크로스 해칭 영역은 다른 바이트스트림의 일부로 리다이렉트된 부분을 나타낸다.
도 13b의 1304에 도시된 바와 같이, 쌍들 내에서 동일한 바이트스트림 길이를 포함하는 바이트스트림 쌍들은 버터플라이 셔플러(1201)의 제 2 열(C=1)에 위치하는 멀티플렉서(10401 내지 10471)들에 입력된다. 바이트스트림 쌍들은 버터플라이 셔플러(1201)의 제 2 열에 위치하는 멀티플렉서들의 페어링에 대응하는 2개의 쌍들의 쌍들로 추가로 쌍을 이루고 또는 그룹화된다.
도 13b의 1305에서, 더 긴 바이트스트림 길이를 포함하는 바이트스트림 쌍의 각 바이트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들을 제어함으로써 더 짧은 바이트스트림 길이를 포함하는 바이트스트림 쌍의 일부가 각각 되도록 재배치 또는 리다이렉트된다. 예를 들어, 제 1 쌍들의 쌍(쌍들의 쌍 1)의 각 바이트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들에 의해 리다이렉트되어 제 1 쌍들의 쌍 바이트스트림 중 더 짧은 바이트스트림의 일부가 각각 된다. 마찬가지로, 제 2 쌍들의 쌍(쌍들의 쌍 2)의 각 바이트스트림의 일부는 제 2 열에 위치하는 멀티플렉서들에 의해 리다이렉트되어 제 2 쌍들의 쌍 바이트스트림 중 더 짧은 바이트스트림의 일부가 각각 된다. 쌍들의 쌍내에 동일한 바이트스트림 길이를 포함하는 바이트스트림 쌍들의 쌍들은 1306에 도시되어 있다.
도 13c의 1307에 도시된 바와 같이, 동일한 바이트스트림 길이를 포함하는 바이트스트림 쌍들의 쌍들은 버터플라이 셔플러(1201)의 제 3 열(C=2)에 위치하는 멀티플렉서(10402 내지 10472)들에 입력된다. 바이트스트림 쌍들의 쌍들은 버터플라이 셔플러(1201)의 제 3 열에 위치하는 멀티플렉서들의 페어링에 대응하는 한 쌍의 쿼드 바이트스트림으로 추가로 쌍을 이루고 또는 그룹화된다.
도 13c의 1308에서, 더 긴 바이트스트림 길이를 포함하는 쿼드(quad) 바이트스트림 쌍들의 쌍의 각 바이트스트림의 일부는 버터플라이 셔플러(1201)의 제 3 열에 위치하는 멀티플렉서들을 제어함으로써 더 짧은 바이트스트림 길이를 포함하는 쿼드 바이트스트림 쌍들의 쌍의 일부가 각각 되도록 재배치되거나 리다이렉트된다. 예를 들어, 제 1 쿼드의 각 바이트스트림의 일부는 제 2 쿼드 바이트스트림들의 더 짧은 바이트스트림들의 일부가 각각 될 수 있도록 제 3 열에 위치하는 멀티플렉서들에 의해 리다이렉트된다. 이제 동일한 바이트스트림 길이를 포함하는 바이트스트림들은 1309에 도시되어 있다.
메모리 기록 중재기(603), 제로 비트 마스크 생성기(604), 마스크 패커(605), 및 행 포인터 생성기(606)는 도 6a의 제로-콜랩싱 데이터 컴프레서/패커 회로(600)와 관련하여 설명된 것과 유사한 방식으로 동작하며, 여기서는 설명하지 않을 것이다.
다시 도 12a 내지 도 12b를 참조하면, 버터 플라이 셔플러(1201)의 출력은 FIFO(1202)에 입력된다. 예시적인 입력(1210)에 대한 FIFO(1202)의 출력은 1212에 도시되어 있다. FIFO(1202)가 채워짐에 따라, 그리고 마스크 패커(605)와 행 포인터 생성기(606) 내의 FIFO들이 채워짐에 따라, 메모리 기록 중재기(603)는 메모리(620)의 각 영역에 데이터를 기록한다. 논-제로 값 데이터(1212)는 버터플라이 셔플러(1201)에 의해 배열되었으므로, 압축 및 패킹된 데이터(1212)는 열 단위 배열로 저장된다. 제로 비트 마스크 데이터(613) 및 행 포인터 데이터(614)는 전술한 바와 같이 저장된다. 좀 더 상세하게는, 제로 비트 마스크 데이터(613)는 앞서 도 3a에서 도시된 패킹된 스트림(302)의 부분(303)으로서 저장되지 않는다.
도 14는 본 발명의 실시 예에 따른 언패커/디컴프레서 회로(1400)의 구성을 예시적으로 보여주는 블록도이다. 언패커/디컴프레서 회로(1400)는 도 9에 도시 된 언패커/디컴프레서 회로(900)와 유사하지만 다음과 같은 차이점이 있다. 논-제로 값 언패커(902)는 디컴프레서 회로(1400)에서 버터플라이 셔플러(1401)에 의해 대체된다. 제로 값 삽입기(903)는 시간 스트림 인덱스 차원을 따라 각 채널 스트림으로 팽창(0을 재삽입)하기 위해 회로(1420)로 대체된다. 회로(1400)를 형성하는 다양한 구성 요소들(전체로서 회로(1400)를 포함하여)은 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
회로(1400)는 행 포인터 데이터(614) 및 제로 비트 마스크 데이터(613)을 이용하여 메모리(620)의 메모리 영역(621)에서 논-제로 값 데이터를 언패킹함으로써, 일반적으로 도 12a의 채널-병렬 컴프레서 회로(1200)와 역으로 동작한다. 회로(1400)는 메모리 판독 중재기(901), 버터플라이 셔플러(1401), 제로-값 삽입기(1420), 및 마스크 언패커(904)를 포함할 수 있다. 메모리 판독 중재기(901)는 메모리(620)로부터 논-제로 값 데이터, 행 포인터 데이터, 및 비트 마스크 데이터를 판독한다. 버터플라이 셔플러(1401)는 비트 마스크 데이터에 기반하여 패킹된 데이터를 언패킹한다. 제로 값 삽입기(1420)는 또한 비트 마스크 데이터에 기반하여 제로 값들을 언패킹된 데이터에 삽입한다.
전술한 실시 예는 제로 비트 마스크 기술을 사용하여 제로 비트 마스크의 1비트를 사용하여 제로 값을 인코딩할 수 있다. 즉, 전술한 실시 예는 비트 마스크 비트 당 하나의 데이터 유닛 오버헤드(overhead)를 가지는 압축 기술을 사용한다. 8비트 데이터 유닛들(즉, 바이트들)이 사용될 때, 압축 기술의 오버헤드는 비압축 데이터의 1바이트 당 하나의 비트 마스크 비트이다. 본 명세서에 개시된 실시 예에 따라 서로 다른 압축 세분도가 사용될 수도 있다. 예를 들어, 활성화 및/또는 가중치 데이터는 주로 작은 절대값들을 가질 수 있다. 예를 들어, 니블, 즉, 4비트 데이터 단위를 기반으로 압축 세분도를 세밀하게 조정하면, 활성화 및/또는 가중치 데이터는 논-제로 활성화들이나 가중치들에 대해서도 활성화 및/또는 가중치 데이터의 다수의 최상위 니블(most significant nibbles; MSN)들이 제로 값일 수 있기 때문에, 이 세분도 수준에서 훨씬 더 희소해질 수 있다. 비트 당 니블 압축 세분도에 기반한 데이터 압축은 압축 마스크 오버헤드를 감소시키기 위해 사용될 수 있다. 대안적으로, 압축 마스크 오버헤드를 감소시키기 위해 극히 희소한 데이터에 대해 더 거친(coarse) 압축 세분도를 사용할 수 있다. 즉, 비트 당 2바이트의 마스크 오버헤드가 압축 마스크 오버헤드를 감소시키기 위해 사용될 수 있다.
도 15는 int8 데이터 유형으로 양자화된 가중치를 가지고 uint8 데이터 유형으로 양자화된 활성화를 갖는 Google의 Inception v3 CNN과 같이, 일반적으로 존재하는 예시적인 컨볼루션 신경망(convolutional neural network; CNN)에 대하여 3개의 서로 다른 압축 세분도(1501 내지 1503)에 따른 압축률을 보여주는 그래프(1500)이다. 예시적인 컨볼루션 신경망의 레이어 번호들은 그래프(1500)의 가로 축을 따라 도시되고, 활성화 압축률의 백분율은 그래프(1500)의 세로 축을 따라 도시된다. 세로 축의 스케일은 압축률의 차이를 알기 어렵게 만들 수 있기 때문에, 서로 다른 압축 세분도(1501 내지 1503)에 대한 압축률은 여러 곳에 표시된다. 다른 예의 컨볼루션 신경망은 서로 다른 압축 세분도에 대해 유사한 압축률을 제공할 수 있다.
예시적인 채널 별(channel-wise) 니블 압축 세분도에 대한 압축률은 1501로 표시된다. 채널 별 니블 압축 세분도에 대한 제로 비트 마스크는 니블 당 하나의 비트 마스크 비트를 사용한다. 전치(transposition) 기술을 사용한 채널 단위의 1바이트 압축 세분도에 대한 압축률은 1502로 표시된다. 1바이트 압축 세분도에 대한 제로 비트 마스크는 비압축 데이터의 바이트 당 하나의 비트 마스크 비트를 사용한다. 데이터의 데이터 단위는 8비트 데이터를 위한 바이트일 수 있다. 1바이트 압축 세분도에 대한 전치 기법은, 현재 데이터 단위(예를 들어, 바이트)와 다음 채널 단위(별)의 데이터 단위(next channel-wise data unit)(예를 들어, 바이트)의 최상위 니블들이 동일한 데이터 단위(예를 들어, 바이트)에 함께 존재하게끔 전치하도록 동작하고, 이어서 현재 데이터 단위와 다음 채널 별 데이터 단위의 최하위 니블(least significant nibbles)들이 다음 데이터 단위에 존재하게끔 한다.
도 6a의 모듈은, 도 17에 도시된 바와 같이, 각 들어오는 바이트를 2개의 니블(상부 및 하부)들로 분할하고 이어서 바이트 대신에 니블 상에서 동작함으로써 니블 레벨 세분도를 사용하여 데이터를 압축하도록 수정될 수 있다. 마찬가지로, 도 6a의 모듈은, 각 들어오는 바이트를 16비트 유닛으로 병합하고 이어서 바이트 대신 16비트 유닛 상에서 동작함으로써 2바이트 세분도를 사용하여 데이터를 압축하도록 수정될 수 있다. 2비트, 4바이트 등을 포함한 다른 세분도들도 사용될 수 있다.
도 16a는 본 발명의 실시 예에 따른 8비트 데이터 유닛(즉, 1바이트)의 채널 단위 전치를 보여주는 도면이다. 레인 0에서, 원래의 8비트 데이터는 0x02 0x07 0x08 0x0A...를 포함할 수 있다. 전치 후, 레인 0의 8비트 데이터는 이제 0x00 0x27 0x00 0x8A...로 배열될 수 있으며, 바이트 쌍 0x02 및 0x07의 최상위 니블들 0x0과 0x0은 바이트 0x00을 형성하고, 최하위 니블들 0x2 및 0x7은 바이트 0x27을 형성한다. 유사한 전치, 즉, 각 들어오는 바이트 쌍을 취하고 그것의 니블들을 재배치하여 최상위 니블들을 함께 스플라이싱하고(splice, 잇고), 최하위 니블들을 함께 스플라이싱하는 것은 도 16a의 다른 레인들에서 발생한다. 도 16b는 본 발명의 실시 예에 따른 16비트 데이터의 전치를 보여주는 도면이다. 레인 0에서, 원래의 16비트 데이터는 0x02 0x07 0x08 0x0A...를 포함할 수 있다. 전치 후, 레인 0의 16비트 데이터는 이제 0x00 0x00 0x27 0x8A로 배열, 즉, 들어오는 16비트 값들의 각 쌍은 바이트들로 분할된 후 최상위 바이트들을 함께 스플라이싱하고 최하위 바이트들을 함께 스플라이싱한다. 유사한 전치는 도 16b의 다른 레인들에서 발생한다. 다른 하나의 사용되는 전치 기술은 채널 전치로서, 이 기술에서는 각 레인에서 다른 레인들과 독립적으로 최상위(또는 최하위) 니블들(또는 바이트들)을 스플라이싱하는 것과는 대조적으로, 인접 채널의 데이터 단위들의 일부가 서로 전치된다.
전치 기술을 사용한 채널당 2바이트 압축 세분도에 대한 압축률은 도 15의 1502에 표시된다. 2바이트 압축 세분도에 대한 전치 기술은 두 개의 현재 데이터 단위들과 다음 채널 단위의 두 개의 데이터 단위들의 최상위 니블들을 전치하여 동일한 두 개의 데이터 유닛들에 함께 배치하고, 그 다음에 두 개의 현재 데이터 단위들과 다음 채널 단위의 두 개의 데이터 단위들의 최하위 니블들을 전치하여 다음 두 개의 데이터 유닛들에 배치하도록 동작한다.
그래프(1500)에 나타난 바와 같이, 니블 압축 세분도(1501)는 일반적으로 예시적인 컨볼루션 신경망의 시작에서 중간 레이어들을 향해 다른 2개의 압축 세분도보다 더 큰 압축률을 제공하며, 이는 1504로 표시된다. 활성화 및/또는 가중치는 일반적으로 예시적인 컨볼루션 신경망의 이 범위의 레이어들에서 중간 정도의 희소성을 갖는다. 특히, 니블 세분도의 압축은 중간 정도의 희소성을 가진 활성화들 이외에도 절대 크기가 작은 값, 즉, 1에서 15까지 바이트의 가장 낮은 니블로 인코딩 될 수 있고(예를 들어, uint8) 해당 바이트의 가장 높은 니블은 0과 같은 값을 가지는 활성화들에 대해서도 매우 우수하게 동작한다.
도 15의 1505에 도시된 컨볼루션 신경망의 중간 레이어들로부터 마지막 레이어들에 대해, 1바이트 압축 세분도(1502)는 일반적으로 최상의 압축률을 제공한다. 예시적인 컨볼루션 신경망의 이 범위의 레이어들에서, 활성화 및 가중치 데이터는 일반적으로 레이어 범위(1504)의 데이터와 비교하여 희소성이 증가한다. 1506에 도시된 희소성이 가장 큰 컨볼루션 신경망의 최종 레이어에서, 2바이트 압축 세분도(1503)는 일반적으로 최상의 압축률을 제공한다. 따라서, 압축 세분도의 선택은 가중치 커널뿐만 아니라 컨볼루션 신경망의 주어진 레이어 및/또는 주어진 범위의 레이어들에 대한 압축률을 최적화할 수 있다.
도 17은 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있는 압축 회로(1700)의 구성을 예시적으로 보여주는 블록도이다. 압축 회로(1700)는 도 6a에 도시된 압축 회로(600)와 유사하며, 일반적으로 동일한 방식으로 동작한다. 차이는 제로 값 제거기(1701), 논-제로 값 패커(1702), 메모리 기록 중재기(1703), 및 제로 비트 마스크 생성기(1704)가 바이트가 아닌 니블 상에서 동작하도록 구성될 수 있다는 것이다. 임의 접근이 필요한 경우 행 포인터 생성기가 사용될 수 있다. 도 17은 행 포인터가 생략된 상태에서 임의 접근이 필요하지 않은 경우를 도시한다. 다른 실시 예들은 바이트 압축 세분도 및/또는 다수의 바이트 압축 세분도 상에서 동작하도록 구성될 수 있다. 회로(1700)를 형성하는 다양한 구성 요소들은(전체로서 회로(1700)를 포함하여) 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
표 1의 가장 왼쪽 열은 제 1 클록 사이클에서 회로(1700)의 제로 값 제거기(1701)에 입력될 수 있는 예시적인 데이터 세트를 나타낸다. 중간 열은 예시적인 입력 데이터 세트에 기초하여 논-제로 값 패커(1702)에 입력되는 제로 값 제거기(1701)의 출력을 나타낸다. 표 1의 가장 오른쪽 열은 예시적인 입력 데이터 세트에 대한 제 2 클록 사이클에서 제로 값 제거기(1701)의 출력을 나타낸다. 다음 표에서 "X"는 "상관 없음(do not care)"값을 나타낸다.
INPUT TO
ZERO VALUE REMOVER
1701
INPUT TO
NON-ZERO VALUES PACKER 1702
LANE0=0x00 NIB0=0x0 STR0=X
NIB1=0x0 STR1=X
LANE1=0x03 NIB2=0x0 STR2=X
NIB3=0x3 STR3=X
LANE2=0x15 NIB4=0x1 STR4=X
NIB5=0x5 STR5=X
LANE3=0x10 NIB6=0x1 STR6=X
NIB7=0x0 STR7=X
LANE4=0x2A NIB8=0x2 STR8=X
NIB9=0xA STR9=X
LANE5=0x06 NIB10=0x0 STR10=X
NIB11=0x6 STR11=X
LANE6=0x1E NIB12=0x1 STR12=X
NIB13=0xE STR13=X
LANE7=0x00 NIB14=0x0 STR14=X
NIB15=0x0 STR15=X
LANE8=0x09 NIB16=0x0 STR16=X
NIB17=0x9 STR17=0x3
LANE9=0x12 NIB18=0x1 STR18=0x1
NIB19=0x2 STR19=0x5
LANE10=0x10 NIB20=0x1 STR20=0x1
NIB21=0x0 STR21=0x2
LANE11=0x00 NIB22=0x0 STR22=0xA
NIB23=0x0 STR23=0x6
LANE12=0x07 NIB24=0x0 STR24=0x1
NIB25=0x7 STR25=0xE
LANE13=0x00 NIB26=0x0 STR26=0x9
NIB27=0x0 STR27=0x1
LANE14=0x00 NIB28=0x0 STR28=0x2
NIB29=0x0 STR29=0x1
LANE15=0x05 NIB30=0x0 STR30=0x7
NIB31=0x5 STR31=0x5
예시적인 입력 데이터에 대한 제로 비트 마스크 생성기(1704)로부터 출력된 제로 비트 마스크는 0111 1101 1110 0001 1100 0100 1000 0111이며, 여기서 "1"은 제로 값을 나타낸다. 표 2의 왼쪽 열은, 표 1의 예시적인 데이터 입력에 대해 메모리 기록 중재기(1703)로부터 출력될 논-제로 값 패커(1702)와 마스크 패커(1705)의 FIFO들 내의 패킹된 데이터 및 제로 비트 마스크 데이터를 나타낸다. 표 2의 왼쪽 열에 있는 "X”들은 FIFO들이 채워지고 있지만, 아직 채워지지 않은 것을 나타낸다. 표 2의 오른쪽 열은 메모리 기록 중재기(1703)의 FIFO들 내의 데이터가 메모리(620)에 기록되기 전(즉, 데이터가 아직 메모리(620)에 기록되지 않은) 메모리(620)의 내용을 나타낸다.
FIFO PACKED MEMORY PACKED
0x571219E1 @ 0x0000
0x6A21513X
XXXXXXXX
XXXXXXXX
FIFO MASK MEMORY MASK
0x7DE1C487 @ 0x1000
XXXXXXXX
XXXXXXXX
XXXXXXXX
표 3의 가장 왼쪽 열은 제 2 클록 사이클에서 회로(1700)의 제로 값 제거기(1701)에 입력되는 다음의 예시적인 데이터를 나타낸다. 중간 열은 논-제로 값 패커(1702)에 입력되는 제로 값 제거기(1701)로부터의 출력을 나타낸다. 표 3의 가장 오른쪽 열은 제 3 클록 사이클에서 제로 값 제거기(1701)의 출력을 나타낸다.
INPUT TO
ZERO VALUE REMOVER
1701
INPUT TO
NON-ZERO VALUES PACKER 1702
LANE0=0x27 NIB0=0x2 STR0=X
NIB1=0x7 STR1=X
LANE1=0x2F NIB2=0x2 STR2=X
NIB3=0xF STR3=X
LANE2=0x32 NIB4=0x3 STR4=X
NIB5=0x2 STR5=X
LANE3=0x19 NIB6=0x1 STR6=X
NIB7=0x9 STR7=X
LANE4=0x00 NIB8=0x0 STR8=X
NIB9=0x0 STR9=X
LANE5=0xB0 NIB10=0xB STR10=X
NIB11=0x0 STR11=0x2
LANE6=0x00 NIB12=0x0 STR12=0x7
NIB13=0x0 STR13=0x2
LANE7=0x12 NIB14=0x1 STR14=0xF
NIB15=0x2 STR15=0x3
LANE8=0x20 NIB16=0x2 STR16=0x2
NIB17=0x0 STR17=0x1
LANE9=0x00 NIB18=0x0 STR18=0x9
NIB19=0x0 STR19=0xB
LANE10=0x0C NIB20=0x0 STR20=0x1
NIB21=0xC STR21=0x2
LANE11=0x21 NIB22=0x2 STR22=0x2
NIB23=0x1 STR23=0xC
LANE12=0x10 NIB24=0x1 STR24=0x2
NIB25=0x0 STR25=0x1
LANE13=0x98 NIB26=0x9 STR26=0x1
NIB27=0x8 STR27=0x9
LANE14=0x71 NIB28=0x7 STR28=0x8
NIB29=0x1 STR29=0x7
LANE15=0xA0 NIB30=0xA STR30=0x1
NIB31=0x0 STR31=0xA
예시적인 입력 데이터에 대한 제로 비트 마스크 생성기(1704)로부터 출력된 제로 비트 마스크는 1000 0010 0001 1110 0011 1011 0000 0000이다. 표 4의 왼쪽 열은, 표 3의 예시적인 데이터 입력에 대해 논-제로 값 패커(1702)와 마스크 패커(1705)의 각 FIFO들로부터 메모리 기록 중재기(1703)로의 출력에 해당하는 패킹된 데이터 및 제로 비트 마스크 데이터를 나타낸다. 표 4의 오른쪽 열은 메모리(620)의 내용을 도시한다.
FIFO PACKED MEMORY PACKED
0xF272XXXX @ 0x0000
XXXXXXXX 0x571219E1
XXXXXXXX 0x6A21513A
XXXXXXXX 0x1789112C
0x221B9123
FIFO MASK MEMORY MASK
0x7DE1C487 @ 0x1000
0x821E3D00
XXXXXXXX
XXXXXXXX
표 5의 가장 왼쪽 열은 제 3 클록 사이클에서 회로(1700)의 제로 값 제거기(1701)에 입력되는 다음의 예시적인 데이터를 나타낸다. 중간 열은 논-제로 값 패커(1702)에 입력되는 제로 값 제거기(1701)의 출력이다. 표 5의 가장 오른쪽 열은 제 4 클록 사이클에서 제로 값 제거기(1701)의 출력을 나타낸다.
INPUT TO
ZERO VALUE REMOVER
1701
INPUT TO
NON-ZERO VALUES PACKER 1702
LANE0=0x40 NIB0=0x4 STR0=X
NIB1=0x0 STR1=X
LANE1=0x8E NIB2=0x8 STR2=X
NIB3=0xE STR3=X
LANE2=0x9B NIB4=0x9 STR4=X
NIB5=0xB STR5=X
LANE3=0x0B NIB6=0x0 STR6=X
NIB7=0xB STR7=X
LANE4=0x29 NIB8=0x2 STR8=X
NIB9=0x9 STR9=X
LANE5=0x00 NIB10=0x0 STR10=X
NIB11=0x0 STR11=0x4
LANE6=0x45 NIB12=0x4 STR12=0x8
NIB13=0x5 STR13=0xE
LANE7=0x05 NIB14=0x0 STR14=0x9
NIB15=0x5 STR15=0xB
LANE8=0x31 NIB16=0x3 STR16=0xB
NIB17=0x1 STR17=0x2
LANE9=0x15 NIB18=0x1 STR18=0x9
NIB19=0x5 STR19=0x4
LANE10=0x00 NIB20=0x0 STR20=0x5
NIB21=0x0 STR21=0x5
LANE11=0xAD NIB22=0xA STR22=0x3
NIB23=0xD STR23=0x1
LANE12=0x00 NIB24=0x0 STR24=0x1
NIB25=0x0 STR25=0x5
LANE13=0x06 NIB26=0x0 STR26=0xA
NIB27=0x6 STR27=0xD
LANE14=0x90 NIB28=0x9 STR28=0x6
NIB29=0x0 STR29=0x9
LANE15=0xEF NIB30=0xE STR30=0xE
NIB31=0xF STR31=0xF
예시적인 입력 데이터에 대한 제로 비트 마스크 생성기(1704)로부터 출력된 제로 비트 마스크는 0010 0111 0011 0000 0100 1100 0100 0010이다. 표 6의 왼쪽 열은, 표 5의 예시적인 데이터 입력에 대해 논-제로 값 패커(1702)와 마스크 패커(1705)의 각 FIFO들로부터 메모리 기록 중재기(1703)로의 출력에 해당하는 패킹된 데이터 및 제로 비트 마스크 데이터를 나타낸다. 오른쪽 열은 메모리(620)의 내용을 나타낸다.
FIFO PACKED MEMORY PACKED
0xF272FE96 @ 0x0000
0x DA511355 0x571219E1
0x492BB9E8 0x6A21513A
0x4XXXXXXX 0x1789112C
0x221B9123
FIFO MASK MEMORY MASK
0x7DE1C487 @ 0x1000
0x821E3D00
0x27304A82
XXXXXXXX
표 7의 가장 왼쪽 열은 제 4 클록 사이클에서 회로(1700)의 제로 값 제거기(1701)에 입력되는 예시적인 데이터 세트를 나타낸다. 중간 열은 논-제로 값 패커(1702)에 입력되는 제로 값 제거기(1701)의 출력이다. 표 7의 가장 오른쪽 열은 제 5 클록 사이클에서 제로 값 제거기(1701)의 출력을 나타낸다.
INPUT TO
ZERO VALUE REMOVER
1701
INPUT TO
NON-ZERO VALUES PACKER 1702
LANE0=0x08 NIB0=0x0 STR0=X
NIB1=0x8 STR1=X
LANE1=0x88 NIB2=0x8 STR2=X
NIB3=0x8 STR3=X
LANE2=0xDA NIB4=0xD STR4=X
NIB5=0xA STR5=X
LANE3=0x00 NIB6=0x0 STR6=X
NIB7=0x0 STR7=X
LANE4=0x7F NIB8=0x7 STR8=X
NIB9=0xF STR9=0x8
LANE5=0x07 NIB10=0x0 STR10=0x8
NIB11=0x7 STR11=0x8
LANE6=0x23 NIB12=0x2 STR12=0xD
NIB13=0x3 STR13=0xA
LANE7=0x00 NIB14=0x0 STR14=0x7
NIB15=0x0 STR15=0xF
LANE8=0xB1 NIB16=0xB STR16=0x7
NIB17=0x1 STR17=0x2
LANE9=0xA5 NIB18=0xA STR18=0x3
NIB19=0x5 STR19=0xB
LANE10=0x11 NIB20=0x1 STR20=0x1
NIB21=0x1 STR21=0xA
LANE11=0xD4 NIB22=0xD STR22=0x5
NIB23=0x4 STR23=0x1
LANE12=0x29 NIB24=0x2 STR24=0x1
NIB25=0x9 STR25=0xD
LANE13=0xB0 NIB26=0xB STR26=0x4
NIB27=0x0 STR27=0x2
LANE14=0x50 NIB28=0x5 STR28=0x9
NIB29=0x0 STR29=0xB
LANE15=0x02 NIB30=0x0 STR30=0x5
NIB31=0x2 STR31=0x2
예시적인 입력 데이터에 대한 제로 비트 마스크 생성기(1704)로부터 출력된 제로 비트 마스크는 0110 1000 0000 0000 1100 0100 1100 0001이다. 표 8의 왼쪽 열은, 표 7의 예시적인 데이터 입력에 대해 논-제로 값 패커(1702)와 마스크 패커(1705)의 각 FIFO들로부터 메모리 기록 중재기(1703)로의 출력에 해당하는 패킹된 데이터 및 제로 비트 마스크 데이터를 나타낸다. 오른쪽 열은 메모리(620)의 내용을 나타낸다.
FIFO PACKED MEMORY PACKED
0x115A1B32 @ 0x0000
0x7F7AD888 0x571219E1
XXXXXXXX 0x6A21513A
XXXXXXXX 0x1789112C
0x221B9123
@ 0x0001
0xF272FE96
0x DA511355
0x492BB9E8
0x425B924D
FIFO MASK MEMORY MASK
XXXXXXXX @ 0x1000
XXXXXXXX 0x7DE1C487
XXXXXXXX 0x821E3D00
XXXXXXXX 0x27304A82
0x6800C8C1
도 18은 본 발명의 실시 예에 따른 도 17의 압축 회로(1700)와 함께 사용될 수 있는 압축 해제 회로(1800)의 구성을 예시적으로 보여주는 블록도이다. 압축 해제 회로(1800)는 도 9에 도시 된 압축 회로(900)와 유사하며, 일반적으로 같은 방식으로 동작한다. 차이는 논-제로 값 언패커(1802) 및 제로 값 삽입기(1803)가 바이트가 아닌 니블 상에서 동작하도록 구성될 수 있다는 것이다. 또 다른 차이점은 이 특정 실시 예에서 직접 메모리 접근(direct memory access)이 제거되고 행 포인터 모듈이 생략된다는 것이다. 회로(1800)를 형성하는 다양한 구성 요소들은(전체로서 회로(1800)를 포함하여)은 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
메모리(620)에 저장된 패킹된 데이터의 임의 접근을 수행하기 위한 대안적인 방법은 데이터가 압축될 때 제로 비트 마스크에서 제로 비트를 카운트 할 수 있는 제어 로직(도시되지 않음)을 이용할 수 있으며, 압축된 데이터로(즉, 메모리(620)에 저장된) 오프셋하기 위해 비압축 데이터로 오프셋을 제공하는 룩업 테이블(lookup table)을 형성할 수 있다. 즉, 오프셋 X에서의 비압축 데이터는 물리적 어드레스 Y에 저장되어 있다. 본 발명에 따른 하나의 실시 예에서, 룩업 테이블 세분도는 테이블 항목 당 0x0040의 단계를 제공하기 위해 0x0000, 0x0040, 0x0080 등과 같은 논리적 오프셋 엔트리에 기초할 수 있다. 다른 단계들이 사용될 수 있다. 또는, 나중에 읽어야 할 어드레스를 미리 알고 있으면 해당 어드레스를 기반으로 테이블 항목을 설정할 수 있다. 본 발명에 따른 또 다른 실시 예에서, 테이블 구조는 트리 구조와 유사하게 구성될 수 있다. 상대적으로 작은 단계들은 일반적으로 테이블 크기를 증가시키므로, 사용 가능한 메모리에 따라 단계 크기가 선택될 수 있다. 임의의 논리 오프셋 X에서 데이터를 회수하려면 X에 대응하는 룩업 테이블에서 실제 어드레스 Y를 찾을 수 있다. 테이블에 정확한 Y(X)가 포함되어 있지 않으면, Xp가 X 바로 앞에 오도록 Xp와 Yp를 찾는다. 이어서, 비트 마스크는 Y(X)를 결정하기 위해 판독되고, Y(X)는 메모리(620)로부터 판독된다. 표 9는 예시적인 룩업 테이블을 나타낸다.
Offset into Uncompressed (Logical) Data Offset into Compressed (Physical) SRAM Data
0x0000 0x0000
0x0010 0x0008
0x0020 0x000A
본 명세서에 개시된 다양한 실시 예들은 메모리로 및 로부터의 저장 및 회수와는 대조적으로 버스를 통한 전송을 위한 데이터를 압축 및 압축 해제하는데 사용될 수 있다. 도 19는 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있고 버스를 통해 압축된 데이터를 전송할 수 있는 압축 회로(1900)의 구성을 예시적으로 보여주는 블록도이다. 압축 회로(1900)는 도 17에 도시된 압축 회로(1700)와 유사하며, 일반적으로 같은 방식으로 동작한다. 차이는 버스 전송 FIFO 및 중재기(1903)가 메모리 기록 중재기(1703)를 대체한다는 점이다. 압축 및 패킹된 데이터를 출력하는 것 외에도, 버스 전송 FIFO 및 중재기(1903)는 data_valid 신호 및 mask_valid 신호를 출력한다. data_valid 신호는 전송중인 BUS_DATA가 압축 및 패킹된 데이터일 때 활성화되고, mask_valid 신호는 전송되는 BUS_DATA가 제로 비트 마스크 데이터일 때 활성화된다. 버스를 통해 데이터가 전송되지 않으면 data_valid 신호와 mask_valid 신호가 모두 비활성화된다. 그렇지 않으면, 압축 회로(1900)는 압축 회로(1700)와 동일한 방식으로 동작한다. 회로(1900)를 형성하는 다양한 구성 요소들은(전체로서 회로(1900)를 포함하여)는 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
도 20은 본 발명의 실시 예에 따른 니블 압축 세분도를 제공할 수 있고 버스를 통해 압축된 데이터를 수신할 수 있는 압축 해제 회로(2000)의 구성을 예시적으로 보여주는 블록도이다. 압축 해제 회로(2000)는 도 18에 도시된 압축 해제 회로(1800)와 유사하며, 일반적으로 같은 방식으로 동작한다. 차이는 버스 수신 FIFO(2001)가 메모리 판독 중재기(1801)를 대체한다는 것이다. data_valid 신호는 수신되는 BUS_DATA가 압축 및 패킹된 데이터일 때 활성화되고, 수신되는 BUS_DATA가 제로 비트 마스크 데이터 일 때 mask_valid 신호는 활성화된다. 버스를 통해 데이터가 수신되지 않으면 data_valid 신호와 mask_valid 신호가 모두 비활성화된다. 그렇지 않으면, 압축 해제 회로(2000)는 압축 해제 회로(1800)와 동일한 방식으로 동작한다. 회로(2000)를 형성하는 다양한 구성 요소들(전체로서 회로(2000)를 포함하여)은 하나 이상의 회로 및/또는 하나 이상의 모듈로서 구현될 수 있다.
도 21은 본 발명의 실시 예에 따른 버터플라이 셔플러를 이용하는 데이터 컴프레서 및/또는 데이터 디컴프레서를 포함하는 전자 장치(2100)를 나타내는 도면이다. 전자 장치(2100)는 컴퓨팅 장치, 개인 휴대 정보 단말기(PDA), 랩톱 컴퓨터, 모바일 컴퓨터, 웹 태블릿, 무선 전화, 휴대폰, 스마트폰, 디지털 음악 플레이어, 또는 유선 또는 무선 전자 장치에 사용될 수 있으나, 이에 한정되지 않는다. 전자 장치(2100)는 컨트롤러(2110), 키패드, 키보드, 디스플레이, 터치 스크린 디스플레이, 카메라, 및/또는 이미지 센서와 같으나 이에 한정되지 않는 입/출력 장치(2120), 메모리(2130), 및 인터페이스(2140)를 포함할 수 있고, 이들은 버스(2150)를 통해 서로 연결되어 있다. 컨트롤러(2110)는 예를 들어, 적어도 하나의 마이크로 프로세서, 적어도 하나의 디지털 신호 처리, 적어도 하나의 마이크로 컨트롤러 등을 포함할 수 있다. 메모리(2130)는 컨트롤러(2110)에 의해 사용될 명령 코드 또는 사용자 데이터를 저장하도록 구성될 수 있다.
전자 장치(2100) 및 전자 장치(2100)의 다양한 시스템 구성 요소는 본 명세서에 개시된 실시 예에 따라 버터플라이 셔플러를 사용하는 데이터 컴프레서 및/또는 데이터 디컴프레서를 포함할 수 있다. 인터페이스(2140)는 RF 신호를 사용하여 무선 통신 네트워크로 데이터를 송신하거나 무선 통신 네트워크로부터 데이터를 수신하도록 구성된 무선 인터페이스를 포함하도록 구성될 수 있다. 무선 인터페이스(2140)는 예를 들어 안테나, 무선 송수신기 등을 포함할 수 있다. 전자 장치(2100)는 또한 CDMA(Code Division Multiple Access), GSM(Global System for Mobile Communications), NADC(North American Digital Communications), E-TDMA(Extended Time Division Multiple Access), WCDMA(Wideband CDMA), CDMA2000, 와이파이(Wi-Fi), Muni Wi-Fi(Municipal Wi-Fi), 블루투스(Bluetooth), DECT(Digital Enhanced Cordless Telecommunications), 무선 USB, Flash OFDM(Fast low-latency access with seamless handoff Orthogonal Frequency Division Multiplexing) IEEE 802.20, GPRS(General Packet Radio Service), iBurst, 와이브로(WiBro), WiMAX, WiMAX-Advanced, UMTS-TDD(Universal Mobile Telecommunication Service - Time Division Duplex), HSPA(High Speed Packet Access), EVDO (Evolution Data Optimized), LTE-Advanced(Long Term Evolution - Advanced), 및 MMDS(Multichannel Multipoint Distribution Service) 등과 같은 통신 시스템의 통신 인터페이스 프로토콜에 사용될 수 있으나, 이에 한정되지 않는다.
본 명세서에 기술된 주제 및 동작의 실시 예는 본 명세서에 개시된 구조 및 이들의 구조적 등가물을 포함하여, 디지털 전자 회로, 또는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 기술된 주제의 실시 예는 하나 이상의 컴퓨터 프로그램, 즉, 데이터 처리 장치에 의해 실행되거나 데이터의 동작을 제어하기 위해 컴퓨터 저장 매체에 인코딩된 하나 이상의 컴퓨터 프로그램 명령어 모듈로서 구현될 수 있다. 대안적으로 또는 부가적으로, 프로그램 명령은 인공적으로 생성된 전파 신호, 예를 들어 데이터 처리 장치에 의해 실행하기 위해 적합한 수신기 장치로 전송하기 위한 정보를 인코딩하기 위해 생성되는 기계 생성 전기, 광학, 또는 전자기 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 저장 장치, 컴퓨터 판독 가능 저장 기판, 임의 또는 직렬 접근 메모리 어레이 또는 장치, 또는 이들의 조합일 수 있거나 이에 포함될 수 있다. 더욱이, 컴퓨터 저장 매체는 전파되는 신호가 아니지만, 컴퓨터 저장 매체는 인위적으로 생성된 전파 신호로 인코딩되는 컴퓨터 프로그램 명령의 소스 또는 목적지일 수 있다. 컴퓨터 저장 매체는 또한 하나 이상의 개별 물리적 구성 요소 또는 매체(예를 들어, 다수의 CD, 디스크, 또는 다른 저장 장치)일 수 있거나 그에 포함될 수 있다.
본 명세서에서 설명된 동작들은 하나 이상의 컴퓨터 판독 가능 저장 장치들에 저장되거나 다른 소스들로부터 수신된 데이터에 대한 데이터 처리 장치에 의해 수행되는 동작들로 구현될 수 있다. "데이터 처리 장치"라는 용어는 예를 들어, 전술한 프로그래밍 가능한 프로세서, 컴퓨터, 시스템 온 칩, 또는 다수의 것, 또는 이들의 조합을 포함하여 데이터를 처리하기 위한 모든 종류의 장치, 장치 및 기계를 포함한다. 장치는 특수 목적의 논리 회로, 예를 들어 FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)을 포함할 수 있다. 장치는 또한 하드웨어 이외에 컴퓨터 프로그램을 위한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어를 구성하는 코드, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 런타임 환경, 가상 머신, 또는 이들의 조합을 포함할 수 있다. 장치 및 실행 환경은 웹 서비스, 분산 컴퓨팅 및 그리드 컴퓨팅 인프라와 같은 다양한 서로 다른 컴퓨팅 모델 인프라들을 실현할 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드라고도 함)은 컴파일 또는 해석된 언어, 선언적 또는 절차적 언어를 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있으며, 독립형 프로그램 또는 컴퓨팅 환경에서 사용하기에 적합한 모듈, 구성 요소, 서브 루틴, 객체, 또는 기타 장치를 포함하여 모든 형태로 배포된다. 컴퓨터 프로그램은 파일 시스템의 파일에 해당할 수 있지만, 반드시 그런 것은 아니다. 프로그램은 다른 프로그램 또는 데이터(예를 들어, 마크 업 언어 문서에 저장된 하나 이상의 스크립트)를 보유하는 파일의 일부, 문제의 프로그램 전용의 단일 파일, 또는 복수의 조정된 파일(예를 들어, 하나 이상의 모듈, 하위 프로그램, 또는 코드의 일부를 저장하는 파일)에 저장 될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 하나의 사이트에 위치하거나 여러 사이트에 분산되어 있고 통신 네트워크에 의해 상호 연결된 여러 컴퓨터에서 실행되도록 배치될 수 있다.
본 명세서에 기술된 프로세스 및 논리 흐름은 입력 데이터를 조작하고 출력을 생성함으로써 동작을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능한 프로세서에 의해 수행될 수 있다. 컴퓨터 프로그램의 실행에 적합한 프로세서는, 예를 들어, 범용 마이크로 프로세서 및 특수 마이크로 프로세서, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서를 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 임의 접근 메모리, 또는 둘 다로부터 명령 및 데이터를 수신할 수 있다. 컴퓨터의 필수 요소는 명령에 따른 동작을 수행하기 위한 프로세서 및 명령 및 데이터를 저장하는 하나 이상의 메모리 장치이다. 또한, 일반적으로 컴퓨터는, 예를 들어 자기, 광 자기 디스크, 또는 광 디스크와 같이 데이터를 저장하기 위한 하나 이상의 대용량 저장 장치를 포함하거나, 또는 저장 장치로부터 데이터를 수신하거나 저장 장치로 데이터를 전송하기 위해, 또는 그 둘 모두를 위해 동작적으로 연결될 것이다. 그러나 컴퓨터는 이러한 장치들을 반드시 필요로 하지 않는다. 또한 컴퓨터는, 몇 가지만 언급하자면, 다른 장치, 예를 들어 이동 전화, PDA(personal-digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 또는 휴대용 저장소(예를 들어, 범용 직렬 버스(USB) 플래시 드라이브)에 내장될 수 있다. 컴퓨터 프로그램 명령 및 데이터를 저장하기에 적합한 장치는 반도체 메모리 장치를 포함하는(예를 들어, EPROM, EEPROM, 및 플래시 메모리 장치들) 모든 형태의 비휘발성 메모리, 매체, 그리고 메모리 장치, 자기 디스크(예를 들어 내부 하드 디스크 또는 이동식 디스크), 광 자기 디스크, 및 CD-ROM 그리고 DVD-ROM 디스크를 포함한다. 프로세서 및 메모리는 특수 목적 논리 회로에 의해 보충되거나 그에 통합될 수 있다.
사용자와의 상호 작용을 제공하기 위해, 본 명세서에 기술된 주제의 실시 예는 디스플레이 장치, 예를 들어 CRT(음극선 관) 또는 LCD(액정 디스플레이)를 포함하는 컴퓨터에서 구현될 수 있다. 사용자에게 정보를 표시하기 위한 모니터 및 키보드 및 포인팅 장치, 예를 들어 마우스 또는 트랙볼은 사용자가 이를 이용하여 컴퓨터에 입력을 제공할 수 있다. 사용자와의 상호 작용을 제공하기 위해 다른 종류의 장치 역시 사용될 수 있다. 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어 시각적 피드백, 청각 피드백, 또는 촉각 피드백일 수 있고, 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하는 임의의 형태로 수신 될 수 있다.
본 명세서에 기술된 주제의 실시 예는 백엔드 구성 요소(예를 들어, 데이터 서버로서), 또는 미들웨어 구성 요소(예를 들어, 애플리케이션 서버), 또는 프론트엔드 구성 요소(예를 들어, 사용자가 본 명세서에 기술된 주제의 구현과 상호작용할 수 있는 그래픽 유저 인터페이스 또는 웹 브라우저를 포함하는 사용자 컴퓨터), 또는 하나 이상의 이와 같은 백엔드, 미들웨어, 또는 프론트엔드 구성 요소들의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 구성 요소는 임의의 형태 또는 매체의 디지털 데이터 통신, 예를 들어 통신 네트워크에 의해 상호 연결될 수 있다. 통신 네트워크의 예는 근거리 통신망("LAN") 및 광역 통신망("WAN"), 네트워크 간(예를 들어, 인터넷), 및 피어 투 피어 네트워크(예를 들어, 애드혹 피어- 피어 네트워크)를 포함한다.
컴퓨팅 시스템은 사용자 및 서버를 포함할 수 있다. 사용자와 서버는 일반적으로 서로 멀리 떨어져 있으며, 일반적으로 통신 네트워크를 통해 상호 작용한다. 사용자와 서버의 관계는 각 컴퓨터에서 실행되고 서로 사용자-서버 관계를 갖는 컴퓨터 프로그램으로 인해 발생한다. 본 명세서는 많은 특정 구현 세부 사항을 포함하지만, 이들은 임의의 발명의 범위 또는 청구될 수 있는 것에 대한 제한으로 해석되어서는 안되며, 오히려 특정 발명의 특정 실시 예에 특정되는 특징의 설명으로 해석되어야 한다. 별도의 실시 예들과 관련하여 본 명세서에서 설명되는 특정 특징들은 또한 단일 실시 예에서 조합하여 구현될 수 있다. 반대로, 단일 실시 예와 관련하여 설명된 다양한 특징들은 또한 다수의 실시 예에서 개별적으로 또는 임의의 적절한 하위 조합으로 구현될 수 있다. 더욱이, 특징들이 특정 조합으로 작용하는 것으로서 설명되고 심지어 처음에 그렇게 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징은 일부 경우 조합으로부터 제외될 수 있고, 청구된 조합은 하위 조합 또는 하위 조합의 변형에 관한 것일 수 있다.
지금까지, 발명의 특정 실시 예들이 설명되었다. 다른 실시 예들은 다음 청구 범위의 범위 내에 있다. 일부 경우, 청구 범위에 언급된 동작은 다른 순서로 수행될 수 있으며 여전히 바람직한 결과를 달성할 수 있다. 마찬가지로, 동작들이 특정 순서로 도면들에 도시되어 있지만, 이는 그러한 동작들이 도시된 순서 또는 순차적인 특정 순서로 수행될 것을 요구하거나, 도시 된 모든 동작들이 수행되는 것으로 이해되어서는 안되며, 바람직한 결과를 달성하기 위해. 특정 상황에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다. 더욱이, 전술한 실시 예에서 다양한 시스템 구성 요소의 분리는 모든 실시 예에서 이러한 분리를 요구하는 것으로 이해되어서는 안되며, 기술된 프로그램 구성 요소 및 시스템은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 또는 여러 소프트웨어 제품들로 패키지화 될 수 있음을 이해해야 한다.
통상의 기술자에 의해 인식될 바와 같이, 본 명세서에 설명된 혁신적인 개념은 광범위한 응용에 걸쳐 수정 및 변경될 수 있다. 따라서, 청구된 주제의 범위는 상기 논의된 특정 예시적인 교시 중 하나로 제한되지 않아야 하며, 대신에 다음의 청구 범위에 의해 정의된다.

Claims (20)

  1. 2N행 및 N열로 배열된 복수의 2-입력 멀티플렉서들; 및
    상기 복수의 2-입력 멀티플렉서들을 제어하는 컨트롤러를 포함하되,
    상기 N은 1보다 큰 정수이고,
    제 1 열에 위치하는 각 멀티플렉서의 각 입력은 2N개 채널들의 비트스트림 중 각각의 비트스트림을 수신하고, 그리고
    상기 각각의 비트스트림은 상기 각각의 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함하고,
    상기 컨트롤러는 마지막 열에 위치하는 각 멀티플렉서에서 각각이 동일한 비트스트림 길이를 포함하는 2N개 채널들의 패킹된(packed) 비트스트림을 출력하게끔 제어하도록 구성되는 다중채널 데이터 패커(packer).
  2. 제 1 항에 있어서,
    상기 N은 3이고,
    상기 복수의 2-입력 멀티플렉서들은 8행 및 3열로 배열되고,
    상기 제 1 열에 위치하는 각 멀티플렉서 출력은 같은 행의 제 2 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    상기 제 2 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 3 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    각 열에 위치하는 각 멀티플렉서는 같은 열에 위치하는 다른 하나의 멀티플렉서와 그룹화되어 상기 각 열에서 복수의 멀티플렉서 쌍들 중 하나를 이루고,
    상기 각 열에 위치하는 각 멀티플렉서 쌍은 다른 하나의 열에 위치하는 하나의 멀티플렉서 쌍과 대응하고,
    상기 제 1 열에 위치하는 하나의 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 2 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되고, 그리고
    상기 제 2 열에 위치하고 상기 대응하는 하나의 멀티플렉서 쌍의 상기 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 3 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되도록 구성되는 다중채널 데이터 패커.
  3. 제 2 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하는 것을 특징으로 하는 다중채널 데이터 패커.
  4. 제 3 항에 있어서,
    상기 제로 비트 마스크 영역은 상기 각 비트스트림에서 제로 값의 위치를 나타내는 것을 특징으로 하는 다중채널 데이터 패커.
  5. 제 1 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서의 각 입력은 2N개 채널들의 패킹된 비트스트림 중 각각의 패킹된 비트스트림을 더 수신하고,
    상기 각 패킹된 비트스트림은 모두 동일한 비트스트림 길이를 포함하고,
    상기 컨트롤러는:
    상기 마지막 열에 위치하는 상기 각 멀티플렉서에서 2N개 채널들의 언패킹된(unpacked) 비트스트림을 출력하되, 상기 2N개 채널들의 언패킹된 비트스트림 각각이 상기 각각의 언패킹된 비트스트림 내의 언패킹된 데이터에 기초하여 정해지는 비트스트림 길이를 포함하게끔 상기 복수의 2-입력 멀티플렉서들을 더 제어하도록 구성되는 다중채널 데이터 패커.
  6. 제 5 항에 있어서,
    상기 N은 3 또는 4인 다중채널 데이터 패커.
  7. 제 5 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 패킹된 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하는 것을 특징으로 하는 다중채널 데이터 패커.
  8. 8행 및 3열로 배열된 복수의 2-입력 멀티플렉서들을 포함하되,
    제 1 열에 위치하는 각 멀티플렉서 출력은 같은 행의 제 2 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    상기 제 2 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 3 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    각 열에 위치하는 각 멀티플렉서는 같은 열에 위치하는 다른 하나의 멀티플렉서와 그룹화되어 상기 각 열에서 복수의 멀티플렉서 쌍들 중 하나를 이루고,
    상기 각 열에 위치하는 상기 각 멀티플렉서 쌍은 다른 하나의 열에 위치하는 하나의 멀티플렉서 쌍과 대응하고,
    상기 제 1 열에 위치하는 하나의 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 2 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되고, 그리고
    상기 제 2 열에 위치하고 상기 대응하는 하나의 멀티플렉서 쌍의 상기 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 3 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서의 각 입력들에 각각 더 연결되도록 구성되는 다중채널 데이터 패커.
  9. 제 8 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서의 각 입력은 8개 채널들의 비트스트림 중 대응하는 비트스트림을 수신하고,
    상기 대응하는 비트스트림은 상기 대응하는 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함하고,
    상기 제 3 열에 위치하는 복수의 멀티플렉서들에서 8개 채널들의 패킹된 비트스트림을 출력하고, 그리고
    상기 8개 채널들의 패킹된 비트스트림 각각이 동일한 비트스트림 길이를 포함하도록 구성되는 다중채널 데이터 패커.
  10. 제 8 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하고,
    상기 제로 비트 마스크 영역은 상기 각 비트스트림에서 제로 값의 위치를 나타내는 것을 특징으로 하는 다중채널 데이터 패커.
  11. 제 10 항에 있어서,
    컨트롤러를 더 포함하되,
    상기 컨트롤러는 상기 제 3 열에 위치하는 상기 각 멀티플렉서에서 각각이 동일한 비트스트림 길이를 포함하는 8개 채널들의 비트스트림을 출력하게끔 상기 복수의 2-입력 멀티플렉서들을 제어하도록 구성되는 다중채널 데이터 패커.
  12. 제 8 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서의 각 입력은 8개 채널들의 패킹된 비트스트림 중 각각의 패킹된 비트스트림을 더 수신하고,
    상기 각 패킹된 비트스트림은 각각이 동일한 비트스트림 길이를 포함하고,
    상기 제 3 열에 위치하는 상기 각 멀티플렉서에서 8개 채널들의 언패킹된 비트스트림을 출력하고, 그리고
    상기 8개 채널들의 언패킹된 비트스트림 각각이 상기 각각의 언패킹된 비트스트림 내의 언패킹된 데이터에 기초하여 정해지는 비트스트림 길이를 포함하는 것을 특징으로 하는 다중채널 데이터 패커.
  13. 제 12 항에 있어서,
    컨트롤러를 더 포함하되,
    상기 컨트롤러는 상기 제 3 열에 위치하는 상기 각 멀티플렉서에서 8 개 채널들의 언패킹된 비트스트림을 출력하게끔 상기 복수의 2-입력 멀티플렉서들을 제어하도록 구성되는 다중채널 데이터 패커.
  14. 제 12 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 패킹된 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하는 것을 특징으로 하는 다중채널 데이터 패커.
  15. 2N행 및 N열로 배열된 복수의 2-입력 멀티플렉서들; 및
    상기 복수의 2-입력 멀티플렉서들을 제어하는 컨트롤러를 포함하되,
    상기 N은 1보다 큰 정수이고,
    제 1 열에 위치하는 각 멀티플렉서의 각 입력은 2N개 채널들의 패킹된 비트스트림 중 각각의 비트스트림을 수신하고, 그리고
    상기 각각의 패킹된 비트스트림은 모두 동일한 비트스트림 길이를 포함하고,
    상기 컨트롤러는:
    마지막 열에 위치하는 각 멀티플렉서에서 2N개 채널들의 언패킹된 비트스트림을 출력하되, 상기 2N개 채널들의 언패킹된 비트스트림 각각이 상기 각각의 언패킹된 비트스트림 내의 언패킹된 데이터에 기초하는 비트스트림 길이를 포함하게끔 제어하도록 구성되는 다중채널 데이터 언패커(unpacker).
  16. 제 15 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 각 패킹된 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하는 것을 특징으로 하는 다중채널 데이터 언패커.
  17. 제 15 항에 있어서,
    상기 N은 3이고,
    상기 복수의 2-입력 멀티플렉서들은 8행 및 3열로 배열되고,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 2 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    상기 제 2 열에 위치하는 상기 각 멀티플렉서 출력은 같은 행의 제 3 열에 위치하는 각 멀티플렉서 입력과 연결되고,
    각 열에 위치하는 각 멀티플렉서는 같은 열에 위치하는 다른 하나의 멀티플렉서와 그룹화되어 상기 각 열에서 복수의 멀티플렉서 쌍들 중 하나를 이루고,
    상기 각 열에 위치하는 각 멀티플렉서 쌍은 다른 하나의 열에 위치하는 하나의 멀티플렉서 쌍과 대응하고,
    상기 제 1 열에 위치하는 하나의 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 2 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 각 입력들에 각각 더 연결되고, 그리고
    상기 제 2 열에 위치하고 상기 대응하는 하나의 멀티플렉서 쌍의 상기 제 1 멀티플렉서 및 제 2 멀티플렉서 출력들은, 상기 제 3 열에 위치하고 상기 하나의 멀티플렉서 쌍과 대응하는 멀티플렉서 쌍의 제 1 멀티플렉서 및 제 2 멀티플렉서 각 입력들에 각각 더 연결되도록 구성되는 다중채널 데이터 언패커.
  18. 제 17 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서의 상기 각 입력은 8개 채널들의 제 2 비트스트림 중 각각의 비트스트림을 더 수신하고,
    상기 각 제 2 비트스트림은 상기 각 제 2 비트스트림 내의 데이터에 기초하여 정해지는 비트스트림 길이를 포함하고, 그리고
    상기 컨트롤러는 상기 제 3 열에 위치하는 상기 각 멀티플렉서에서 각각이 동일한 비트스트림 길이를 포함하는 8개 채널들의 패킹된 비트스트림을 출력하게끔 상기 복수의 2-입력 멀티플렉서들을 더 제어하도록 구성되는 다중채널 데이터 언패커.
  19. 제 18 항에 있어서,
    상기 제 1 열에 위치하는 상기 각 멀티플렉서에서 수신하는 상기 각 제 2 비트스트림은 제로 비트 마스크 영역과 논-제로 데이터 영역을 포함하는 것을 특징으로 하는 다중채널 데이터 언패커.
  20. 제 19 항에 있어서,
    상기 제로 비트 마스크 영역은 상기 각 제 2 비트스트림에서 제로 값의 위치를 나타내는 것을 특징으로 하는 다중채널 데이터 언패커.
KR1020200046184A 2019-04-17 2020-04-16 하드웨어 채널-병렬 데이터 압축/압축 해제 KR20200122253A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201962835496P 2019-04-17 2019-04-17
US62/835,496 2019-04-17
US201962841819P 2019-05-01 2019-05-01
US62/841,819 2019-05-01
US16/842,662 US11671111B2 (en) 2019-04-17 2020-04-07 Hardware channel-parallel data compression/decompression
US16/842,662 2020-04-07

Publications (1)

Publication Number Publication Date
KR20200122253A true KR20200122253A (ko) 2020-10-27

Family

ID=70295028

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200046184A KR20200122253A (ko) 2019-04-17 2020-04-16 하드웨어 채널-병렬 데이터 압축/압축 해제

Country Status (5)

Country Link
US (6) US11671111B2 (ko)
EP (1) EP3726733A1 (ko)
KR (1) KR20200122253A (ko)
CN (1) CN111835703B (ko)
TW (1) TWI840550B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
CN109993274B (zh) * 2017-12-29 2021-01-12 深圳云天励飞技术有限公司 人工智能计算装置及相关产品
US12099912B2 (en) 2018-06-22 2024-09-24 Samsung Electronics Co., Ltd. Neural processor
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11630770B2 (en) * 2019-07-11 2023-04-18 Meta Platforms Technologies, Llc Systems and methods for reading and writing sparse data in a neural network accelerator
US20220066776A1 (en) * 2020-08-25 2022-03-03 Infineon Technologies Ag Accelerating processor based artificial neural network computation
US20220164637A1 (en) * 2020-11-20 2022-05-26 Natural Intelligence Systems, Inc. Neural Processing Units (NPUs) and Computational Systems Employing the Same
US11328209B1 (en) 2021-06-02 2022-05-10 SambaNova Systems, Inc. Dual cycle tensor dropout in a neural network
US11256987B1 (en) * 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements
FR3124636B1 (fr) * 2021-06-25 2024-04-26 Commissariat Energie Atomique Circuit de mémorisation de données parcimonieuses
US11940907B2 (en) * 2021-06-25 2024-03-26 Intel Corporation Methods and apparatus for sparse tensor storage for neural network accelerators
JP2023007760A (ja) 2021-07-02 2023-01-19 キオクシア株式会社 圧縮装置及び伸張装置
CN113743582B (zh) * 2021-08-06 2023-11-17 北京邮电大学 基于栈混洗的新型通道混洗方法和装置
CN113838505A (zh) * 2021-08-26 2021-12-24 季华实验室 一种基于cam的内存条目计数电路及内存装置
US11848689B2 (en) * 2022-03-04 2023-12-19 Microsoft Technology Licensing, Llc Method and apparatus for compression multiplexing for sparse computations
US20240086392A1 (en) * 2022-09-14 2024-03-14 Sap Se Consistency checks for compressed data
CN115333544B (zh) * 2022-10-13 2023-01-31 上海登临科技有限公司 一种数据解压缩电路及其方法、芯片及电子设备

Family Cites Families (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285403A (en) 1989-12-29 1994-02-08 U.S. Philips Corporation Arithmetic processing module to be associated with a microprocessor central processing unit
US5446916A (en) 1993-03-26 1995-08-29 Gi Corporation Variable length codeword packer
US5768629A (en) 1993-06-24 1998-06-16 Discovision Associates Token-based adaptive video processing arrangement
US5499382A (en) 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
US5805913A (en) 1993-11-30 1998-09-08 Texas Instruments Incorporated Arithmetic logic unit with conditional register source selection
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6016538A (en) 1993-11-30 2000-01-18 Texas Instruments Incorporated Method, apparatus and system forming the sum of data in plural equal sections of a single data word
US6058473A (en) 1993-11-30 2000-05-02 Texas Instruments Incorporated Memory store from a register pair conditional upon a selected status bit
US6055204A (en) * 1997-04-29 2000-04-25 Texas Instruments Incorporated Circuits, systems, and methods for re-mapping memory column redundancy
US6259456B1 (en) 1997-04-30 2001-07-10 Canon Kabushiki Kaisha Data normalization techniques
US5857035A (en) 1997-05-19 1999-01-05 Hewlett-Packard Company Arithmetic coding compressor for encoding multiple bit values
US6084568A (en) * 1997-11-13 2000-07-04 S3 Incorporated System and methods for both 2-tap and 3-tap flicker filtering of non-interlaced computer graphics to interlaced lines for television display
US6490357B1 (en) 1998-08-28 2002-12-03 Qualcomm Incorporated Method and apparatus for generating encryption stream ciphers
US6195026B1 (en) 1998-09-14 2001-02-27 Intel Corporation MMX optimized data packing methodology for zero run length and variable length entropy encoding
CN100391122C (zh) 1999-07-08 2008-05-28 三星电子株式会社 移动通信系统中用于控制速率匹配的去复用器和复用器的设备和方法
US7174047B2 (en) 2002-03-29 2007-02-06 Matsushita Electric Industrial Co., Ltd. Single-instruction multiple-data (SIMD)-based algorithms for processing video data
US7139900B2 (en) * 2003-06-23 2006-11-21 Intel Corporation Data packet arithmetic logic devices and methods
US7202872B2 (en) 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US8223966B2 (en) 2006-05-10 2012-07-17 Mediatek Inc. Multiple stream decrypting and decoding systems and related methods thereof
US7898550B2 (en) 2006-06-09 2011-03-01 Via Technologies, Inc. System and method for memory bandwidth compressor
US8069377B2 (en) * 2006-06-26 2011-11-29 Micron Technology, Inc. Integrated circuit having memory array including ECC and column redundancy and method of operating the same
US8194750B2 (en) 2006-10-16 2012-06-05 Samsung Electronics Co., Ltd. System and method for digital communication having a circulant bit interleaver for equal error protection (EEP) and unequal error protection (UEP)
US8285766B2 (en) * 2007-05-23 2012-10-09 The Trustees Of Princeton University Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor
US8464141B2 (en) * 2008-08-13 2013-06-11 Infineon Technologies Ag Programmable error correction capability for BCH codes
EP2234315B1 (en) * 2009-03-27 2018-02-14 Sony Corporation Division of bit streams to produce spatial paths for multicarrier transmission
US9830964B2 (en) * 2012-09-10 2017-11-28 Texas Instruments Incorporated Non-volatile array wakeup and backup sequencing control
KR102242390B1 (ko) * 2013-04-08 2021-04-20 삼성전자주식회사 송신 장치, 그의 인터리빙 방법, 수신 장치 및 그의 디인터리빙 방법
CN104426630B (zh) * 2013-08-30 2018-04-03 中国科学院上海高等研究院 一种比特交织编码调制方法及系统
US20150161927A1 (en) 2013-12-05 2015-06-11 Innolux Corporation Driving apparatus with 1:2 mux for 2-column inversion scheme
US9978014B2 (en) 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US11100420B2 (en) 2014-06-30 2021-08-24 Amazon Technologies, Inc. Input processing for machine learning
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US10216520B2 (en) * 2014-10-06 2019-02-26 Via Technologies, Inc. Compressing instruction queue for a microprocessor
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US20160358069A1 (en) 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
EP3104309B1 (en) 2015-06-10 2020-04-01 Samsung Electronics Co., Ltd. Spiking neural network with reduced memory access and reduced in-network bandwidth consumption
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10585848B2 (en) 2015-10-08 2020-03-10 Via Alliance Semiconductor Co., Ltd. Processor with hybrid coprocessor/execution unit neural network unit
EP3705994B1 (en) 2015-10-28 2023-10-04 Google LLC Processing computational graphs
US9904874B2 (en) 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
WO2017129325A1 (en) 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
NL2016285B1 (en) 2016-02-19 2017-09-20 Scyfer B V Device and method for generating a group equivariant convolutional neural network.
FR3050846B1 (fr) 2016-04-27 2019-05-03 Commissariat A L'energie Atomique Et Aux Energies Alternatives Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
EP3455684B1 (en) 2016-05-09 2024-07-17 Strong Force Iot Portfolio 2016, LLC Methods and systems for the industrial internet of things
JP6890615B2 (ja) 2016-05-26 2021-06-18 タータン エーアイ リミテッド ディープニューラルネットワークについての加速器
CN105913823A (zh) 2016-06-23 2016-08-31 武汉华星光电技术有限公司 高解析度解复用器驱动电路
KR20180012439A (ko) 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10489680B2 (en) 2016-10-04 2019-11-26 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
US9940534B1 (en) 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR102706985B1 (ko) 2016-11-09 2024-09-13 삼성전자주식회사 인공 신경망의 연산 처리 경로 관리 방법
US10733505B2 (en) 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US20180181864A1 (en) 2016-12-27 2018-06-28 Texas Instruments Incorporated Sparsified Training of Convolutional Neural Networks
US10521488B1 (en) 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US12118451B2 (en) 2017-01-04 2024-10-15 Stmicroelectronics S.R.L. Deep convolutional network heterogeneous architecture
CN106685887B (zh) * 2017-01-12 2020-04-07 重庆邮电大学 一种用于fpga的ufmc发射机的频域实现方法
US10096134B2 (en) 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
JP6794854B2 (ja) 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10067509B1 (en) 2017-03-10 2018-09-04 TuSimple System and method for occluding contour detection
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10860760B2 (en) 2017-04-21 2020-12-08 Intel Corporation Systems and methods for implementing learned parameter systems on a programmable integrated circuit
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10410098B2 (en) 2017-04-24 2019-09-10 Intel Corporation Compute optimizations for neural networks
US10706147B1 (en) 2017-05-19 2020-07-07 Amazon Technologies, Inc. Mitigating side-channel attacks via shared cache
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10600147B2 (en) 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10699160B2 (en) 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US20190087713A1 (en) 2017-09-21 2019-03-21 Qualcomm Incorporated Compression of sparse deep convolutional network weights
EP3460724A1 (en) 2017-09-22 2019-03-27 Kabushiki Kaisha Toshiba Operation device and operation system
US10366322B2 (en) 2017-10-06 2019-07-30 DeepCube LTD. System and method for compact and efficient sparse neural networks
IL299565B2 (en) 2017-10-16 2024-07-01 Illumina Inc Classifies pathogenic variants using a recurrent neural network
GB2560600B (en) 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware
EP3480747A1 (en) 2017-11-06 2019-05-08 Imagination Technologies Limited Single plane filters
US10721114B2 (en) 2017-11-23 2020-07-21 Huawei Technologies Co., Ltd. Method and system for symbol sequence generation and transmission for non-orthogonal multiple access transmission
US11010658B2 (en) 2017-12-22 2021-05-18 Intel Corporation System and method for learning the structure of deep convolutional neural networks
EP3506084B1 (en) 2017-12-28 2020-09-23 IMEC vzw System and method for tunable precision of dot-product engine
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US11205115B1 (en) 2018-04-20 2021-12-21 Perceive Corporation Neural network inference circuit
US20210125046A1 (en) 2018-05-08 2021-04-29 The Governing Council Of The University Of Toronto Neural network processing element
US12099912B2 (en) 2018-06-22 2024-09-24 Samsung Electronics Co., Ltd. Neural processor
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US20210011732A1 (en) 2019-07-09 2021-01-14 MemryX Inc. Matrix Data Reuse Techniques in Processing Systems

Also Published As

Publication number Publication date
US20200336153A1 (en) 2020-10-22
US12015429B2 (en) 2024-06-18
US20200336273A1 (en) 2020-10-22
US11716095B2 (en) 2023-08-01
CN111835703A (zh) 2020-10-27
TWI840550B (zh) 2024-05-01
EP3726733A1 (en) 2020-10-21
US20200336272A1 (en) 2020-10-22
US20200336154A1 (en) 2020-10-22
US20210399740A1 (en) 2021-12-23
US11664819B2 (en) 2023-05-30
TW202112075A (zh) 2021-03-16
US11146283B2 (en) 2021-10-12
US20230047025A1 (en) 2023-02-16
US11671111B2 (en) 2023-06-06
US11152952B2 (en) 2021-10-19
CN111835703B (zh) 2024-03-15

Similar Documents

Publication Publication Date Title
KR20200122253A (ko) 하드웨어 채널-병렬 데이터 압축/압축 해제
US11271588B2 (en) Mixed-precision compression with random access
US11880760B2 (en) Mixed-precision NPU tile with depth-wise convolution
US9860561B2 (en) Data compression using spatial decorrelation
US9813502B1 (en) Data transfers in columnar data systems
GB2567427A (en) Data compression
GB2530312A (en) Data compression
US9350584B2 (en) Element selection unit and a method therein
US9450606B1 (en) Data matching for hardware data compression
US8587458B2 (en) Unpacking a variable number of data bits
Sarkhawas et al. Variable quality factor jpeg image compression using dynamic partial reconfiguration and microblaze
González et al. A real-time FPGA implementation of the CCSDS 123.0-B-2 standard
CN115333544B (zh) 一种数据解压缩电路及其方法、芯片及电子设备
CN118249816A (zh) 数据处理方法、装置、众核芯片和存储介质
JP2015060256A (ja) データ供給回路、演算処理回路、及びデータ供給方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal