KR102596932B1 - Gpu 병렬 허프만 디코딩 - Google Patents

Gpu 병렬 허프만 디코딩 Download PDF

Info

Publication number
KR102596932B1
KR102596932B1 KR1020207002277A KR20207002277A KR102596932B1 KR 102596932 B1 KR102596932 B1 KR 102596932B1 KR 1020207002277 A KR1020207002277 A KR 1020207002277A KR 20207002277 A KR20207002277 A KR 20207002277A KR 102596932 B1 KR102596932 B1 KR 102596932B1
Authority
KR
South Korea
Prior art keywords
chunk
decoded
execution unit
adjacent
data
Prior art date
Application number
KR1020207002277A
Other languages
English (en)
Other versions
KR20200019232A (ko
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 KR20200019232A publication Critical patent/KR20200019232A/ko
Application granted granted Critical
Publication of KR102596932B1 publication Critical patent/KR102596932B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
    • H03M7/425Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory for the decoding process only

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

병렬 허프만 디코딩 기법을 구현하기 위한 시스템, 장치, 및 방법이 여기에 개시된다. 복수의 실행 유닛을 갖는 시스템은 허프만 인코딩된 비트스트림을 수신한다. 시스템은 인코딩된 비트스트림을 복수의 청크로 분할한다. 각각의 실행 유닛은 인접 청크의 가외의 부분 뿐만 아니라 인코딩된 비트스트림의 개별 청크를 디코딩하기 위해 할당된다. 이 접근법으로, 비트스트림의 제1 청크를 디코딩하는 제1 실행 유닛을 제외하고 각각의 실행 유닛은 청크 경계가 심볼 경계와 정렬되지 않아 청크의 시작에서 어떤 개수의 심벌을 부정확하게 디코딩할 것이기 때문에, 비트스트림의 디코딩은 각 청크 경계에서 프로그램가능한 양의 데이터에 대해 중첩한다. 시스템은, 각각의 청크 경계에서 디코딩된 가외의 부분으로부터, 부정확하게 디코딩된 데이터가 어디에서 끝나는지를, 그리고 각각의 디코딩된 청크에 대해 정확하게 디코딩된 데이터가 어디에서 시작하는지를 결정한다.

Description

GPU 병렬 허프만 디코딩
가변 길이 코딩 기법은 많은 상이한 계산 및 통신 응용에서 일반적으로 사용된다. 코딩 이론에서, 가변 길이 코드는 소스 심볼을 가변 비트 수에 매핑하는 코드이다. 가변 길이 코드는 일반적으로 무손실 데이터 압축을 가능하게 한다. 가변 길이 코딩 기법의 예는 허프만 코딩, 렘펠-지브 코딩, 및 산술 코딩을 포함한다. 허프만 코딩은 몇몇의 비디오 및 이미지 압축 표준에서 이용된다. 가변 길이 코딩 기법은 확률론적 접근법을 이용하는데, 더 일반적인 심볼은 덜 일반적인 심볼보다 더 적은 인코딩된 비트에 매핑된다.
허프만 인코딩된 비트스트림에 있어서는 데이터의 인코딩된 비트와 디코딩된 비트 간엔 예측불가 관계가 있다. 이것은 더 빈번한 심볼이 덜 빈번한 심볼보다 적은 비트로 인코딩됨에 의해 야기된다. 이 특성에 기인하여, 단순한 병렬 알고리즘은 허프만 데이터를 디코딩하기 위해 사용될 수 없다. 예를 들어, 허프만 데이터를 디코딩하기 위한 유효한 시작 위치는 이 지점까지 모든 데이터를 디코딩하지 않고는 인코딩된 데이터에서 임의로 발견될 수 없다. 따라서, 이것은 허프만 인코딩된 데이터를 디코딩하기 위한 병렬 기법의 구현을 하지 못하게 하였다.
본원에 기술된 방법 및 메커니즘의 장점은 첨부 도면과 함께 다음의 설명을 참조함으로써 더 잘 이해될 수 있다.
도 1 계산 시스템의 일 실시예의 블록도이다.
도 2는 허프만 인코딩된 스트림을 병렬로 디코딩하기 위한 GPU의 일 실시예의 블록도이다.
도 3은 병렬 허프만 디코딩 기법을 구현하는 일 실시예의 블록도이다.
도 4는 디코딩된 청크 내의 심볼 오프셋 끝의 일 실시예를 도시한 도면이다.
도 5는 병렬 실행 유닛에 의해 생성된 데이터의 디코딩된 청크를 도시한 것이다.
도 6은 청크 경계 이후에 무효 데이터의 끝이 어디에서 발생하는지를 결정하는 일 실시예의 도면이다.
도 7은 복수의 실행 유닛에서 인코딩된 비트스트림을 병렬로 디코딩하는 방법의 일 실시예를 도시한 일반화한 흐름도이다.
도 8은 인코딩된 비트스트림의 인접 청크를 디코딩하는 방법의 일 실시예를 도시한 일반화한 흐름도이다.
도 9는 병렬 디코딩 기법을 구현하기 위한 방법의 일 실시예를 도시한 일반화한 흐름도이다.
다음의 설명에서, 본원에 제시된 방법 및 메커니즘의 철저한 이해를 제공하기 위해 다수의 구체적인 상세가 개시된다. 그러나, 당업자는 이 구체적 상세 없이도 다양한 실시예가 실시될 수 있음을 인식할 것이다. 일부 예에서, 잘 알려진 구조, 성분, 신호, 컴퓨터 프로그램 명령, 및 기술은 본원에 기술된 접근법을 모호하게 하는 것을 피하기 위해 상세하게 도시되지 않았다. 설명의 단순성 및 명료성을 위해, 도면에 도시된 요소는 반드시 비례적으로 도시된 것은 아님을 이해할 것이다. 예를 들어, 일부 요소의 치수는 다른 요소에 비해 과장될 수 있다.
병렬 비트스트림 디코딩 기법을 구현하기 위한 시스템, 장치, 및 방법이 본원에서 개시된다. 일 실시예에서, 시스템은 적어도 복수의 실행 유닛 및 메모리를 포함한다. 시스템은 인코딩된 비트스트림을 수신하도록 구성된다. 일 실시예에서, 수신된 비트스트림은 가변-길이 코딩 기법을 사용하여 인코딩된다. 예를 들어, 일 실시예에서, 수신된 비트스트림은 허프만 인코딩 기법을 사용하여 인코딩된다. 다른 실시예에서, 수신된 비트스트림은 다른 유형의 인코딩 기법을 사용하여 인코딩된다.
시스템은 인코딩된 비트스트림을 복수의 청크로 분할한다. 각각의 실행 유닛은 인접한 청크의 가외의 부분 뿐만 아니라 인코딩된 비트스트림의 개별 청크를 디코딩하기 위해 할당된다. 이 접근법으로는, 비트스트림의 제1 청크를 디코딩하는 제1 실행 유닛을 제외하고 각각의 실행 유닛은 청크 경계가 심볼 경계와 정렬되지 않아 청크의 시작에서 어떤 개수의 심벌을 부정확하게 디코딩할 것이기 때문에, 비트스트림의 디코딩은 각 청크 경계에서 프로그램가능한 양의 데이터에 대해 중첩한다. 시스템은, 각각의 청크 경계에서 디코딩된 가외의 부분으로부터, 부정확하게 디코딩된 데이터가 어디에서 끝나는지를, 그리고 각각의 디코딩된 청크에 대해 정확하게 디코딩된 데이터가 어디에서 시작하는지를 결정한다. 이어, 시스템은 부정확하게 디코딩된 데이터를 폐기하면서 메모리에는 정확하게 디코딩된 데이터를 유지한다. 본원에서 사용된 바와 같이, "심볼"이라는 용어는 단일 유닛으로서 취급되는 하나 이상의 일군의 비트로서 정의된다.
일 실시예에서, 마지막 실행 유닛을 제외하고 복수의 실행 유닛의 각각의 실행 유닛은 인코딩된 비트스트림의 할당된 청크와 인접한 청크의 가외의 부분을 모두 디코딩하도록 구성된다. 비트스트림의 최종 청크를 디코딩하는 마지막 실행 유닛은 할당된 청크만을 디코딩한다. 각각의 실행 유닛은 또한 할당된 청크의 제1 N 심볼에 대한, 그리고 인접한 청크로부터의 데이터의 가외의 부분의 제1 N 심볼에 대한 심볼 비트스트림 위치의 끝을 기입하며, N은 양의 정수이다. 다음으로, 각각의 실행 유닛은 인접 청크의 가외의 부분의 심볼 비트스트림 위치의 끝이 인접 청크에 대해 인접 실행 유닛에 의해 디코딩된 데이터로부터 심볼 비트스트림 위치의 끝과 어디에서 매칭하는지를 결정한다. 이어, 각각의 실행 유닛은, 메모리 내 주어진 위치에, 디코딩된 데이터를 심볼 비트스트림 위치의 끝이 매칭하는 곳까지 카피한다.
이제 도 1을 참조하면, 계산 시스템(100)의 일 실시예의 블록도가 도시되었다. 일 실시예에서, 계산 시스템(100)은 시스템 메모리(150), 입력/출력(I/O) 인터페이스(125), 패브릭(120), 그래픽 처리 유닛(GPU)(130), 로컬 메모리(110), 및 중앙 처리 유닛(CPU) 칩셋(140)을 포함한다. 시스템(100)은 또한 도면을 모호하게 하는 것을 피하기 위해 도 1에 도시되지 않은 다른 성분을 포함할 수 있다. 또 다른 실시예에서, GPU(130)는 또 다른 유형의 처리 유닛(예를 들어, CPU, 주문형 집적 회로(ASIC), 필드 프로그램가능 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP))일 수 있다.
GPU(130)는 임의의 수 및 유형의 계산 유닛을 나타내는 적어도 계산 유닛(145A-N)을 포함한다. 각각의 계산 유닛(145A-N)은 임의의 수의 실행 유닛(160A-N)을 포함하며, 실행 유닛의 수는 실시예마다 다르다. GPU(130)는 패브릭(120)을 통해 로컬 메모리(110)에 결합된다. 일 실시예에서, 로컬 메모리(110)는 고-대역폭 메모리(HBM)를 사용하여 구현된다. 일 실시예에서, GPU(130)는 드로우 커맨드, 픽셀 동작, 기하학 계산, 및 이미지를 디스플레이에 렌더링하기 위한 그외 다른 동작과 같은 그래픽 파이프라인 동작을 실행하도록 구성된다. 다른 실시예에서, GPU(130)는 그래픽과 관련되지 않은 동작을 실행하도록 구성된다. 또 다른 실시예에서, GPU(130)는 그래픽 동작 및 비-그래픽 관련 동작을 모두 실행하도록 구성된다.
일 실시예에서, GPU(130)는 가변-길이 코드를 사용하여 인코딩된 비트스트림의 병렬 디코딩 기법을 구현하도록 구성된다. GPU(130)는 비트스트림을 복수의 청크로 분할하고, 이어 각 청크를 실행 유닛(160A-N)의 상이한 행 유닛에 할당한다. 각각의 실행 유닛은 할당된 청크를 디코딩하며 인접한 청크의 일부에 대한 디코딩을 계속한다. 청크 경계는 인코딩된 비트스트림에서 심볼 경계와 반드시 정렬되는 것은 아닐 것이기 때문에, 각 실행 유닛(제1 실행 유닛을 제외하고)은 청크의 시작에서 몇개의 심볼을 부정확하게 디코딩할 가능성이 있을 것이다. 따라서, 이전 실행 유닛에 의해 디코딩된 청크의 가외의 부분은 청크의 시작에서 임의의 에러를 정정하기 위해 이용된다. 디코딩된 각 청크(제1 청크 제외)에 대해, 청크의 시작에서 정정된 데이터는 청크의 나머지 부분으로부터 정확하게 디코딩된 나머지 심볼과 결합된다. 이 정확하게 디코딩된 데이터는 시스템(100) 내 로컬 메모리(110), 시스템 메모리(150), 또는 또 다른 위치(예를 들어, 캐시, 로컬 데이터 공유)에 저장된다.
I/O 인터페이스(125)는 패브릭(120)에 결합되고, I/O 인터페이스(125)는 임의의 수 및 유형의 인터페이스(예를 들어, PCI(Peripheral Component Interconnect) 버스, PCI-익스텐디드(PCI-X), PCIE)(PCI Express) 버스, 기가비트 이더넷(GBE) 버스, 범용 직렬 버스(USB))를 나타낸다. GPU(130)는 하나 이상의 메모리 모듈을 포함하는 시스템 메모리(150)에 결합된다. 각각의 메모리 모듈은 이 에 장착된 하나 이상의 메모리 디바이스를 포함한다. 일부 실시예에서, 시스템 메모리(150)는 GPU(130) 및/또는 다른 성분이 또한 장착되는 마더보드 또는 다른 캐리어 상에 장착된 하나 이상의 메모리 디바이스를 포함한다. 일 실시예에서, 시스템 메모리(150)는 동작 동안 GPU(130)와 함께 사용하기 위한 랜덤 액세스 메모리(RAM)를 구현하기 위해 사용된다. 구현된 RAM은 정적 RAM(SRAM), 동적 RAM(DRAM), 저항성 RAM(ReRAM), 상 변화 RAM(PCRAM), 또는 다른 휘발성 또는 비휘발성 RAM일 수 있다. 시스템 메모리(150)를 구현하기 위해 사용되는 DRAM의 유형은 DDR(double data rate) DRAM, DDR2 DRAM, DDR3 DRAM, 등을 포함한다(그러나 이에 제한되지는 않는다).
다양한 실시예에서, 계산 시스템(100)은 컴퓨터, 랩탑, 모바일 디바이스, 서버, 또는 이외 다양한 다른 유형의 계산 시스템 또는 디바이스 중 어느 것일 수 있다. 계산 시스템(100) 및/또는 GPU(130)의 성분의 수는 실시예마다 다를 수 있음에 유의한다. 도 1에 도시된 수보다 각 성분/서브-성분이 많거나 적을 수 있다. 계산 시스템(100) 및/또는 GPU(130)는 도 1에 도시되지 않은 다른 성분을 포함할 수 있음에 유의한다. 예를 들어, 또 다른 실시예에서, GPU(130)는 멀티코어 프로세서를 나타낼 수 있다. 부가적으로, 다른 실시예에서, 계산 시스템(100) 및 GPU(130)는 도 1에 도시된 것과는 다른 방식으로 구성될 수 있다.
이제 도 2를 참조하면, 허프만 인코딩된 비트스트림을 병렬로 디코딩하기 위한 GPU(200)의 일 실시예의 블록도가 도시되었다. 일 실시예에서, GPU(200)는 적어도 캐시/메모리(215), 커맨드 프로세서(220), 및 계산 유닛(240A-N)을 포함한다. GPU(200)는 또한 도면을 모호하게 하는 것을 피하기 위해 도시되지 않은 다른 성분을 포함할 수 있다. 캐시/메모리(215)는 임의의 수 및 유형의 캐시 및/또는 메모리를 나타낸다. 도 2에 도시된 바와 같이, 캐시/메모리(215)는 허프만 인코딩된 비트스트림을 나타내는 허프만 인코딩된 데이터(225)를 저장한다. 일 실시예에서, GPU(200)는 또 다른 소스로부터 허프만 인코딩된 데이터(225)를 수신한다. 또 다른 실시예에서, GPU(200)는 다른 데이터를 수신하는데, 이어 GPU(200)는 허프만 인코딩된 데이터(225)를 생성하도록 처리한다.
커맨드 프로세서(220)는 캐시/메모리(215) 및 계산 유닛(240A-N)에 결합된다. 계산 유닛(240A-N)은 임의의 수 및 유형의 계산 유닛을 나타낸다. 각각의 계산 유닛(240A-N)은 복수의 실행 유닛을 포함하고, 실행 유닛의 수는 실시예에 따라 다르다. 도 2에는 도시되어 있지 않지만, 각각의 계산 유닛(240A-N)은 또한 데이터를 저장하기 위한 하나 이상의 캐시 및/또는 버퍼를 포함할 수 있다. 각각의 실행 유닛(245A-N)은 대응하는 허프만 디코더(250A-N)를 구현하기 위한 명령을 실행하도록 구성된다. 각각의 허프만 디코더(250A-N)는 임의의 적절한 허프만 디코딩 알고리즘을 이용할 수 있다.
일 실시예에서, 커맨드 프로세서(220)는 실행 유닛(245A-N)에서 허프만 디코딩 타스크를 병렬로 수행하기 위해 허프만 디코더 커널(250A-N)을 호출하게 구성된다. 일 실시예에서, 허프만 디코더 커널(250A-N)을 호출하기 전에 소정의 양의 공간이 캐시/메모리(215)에 할당된다. 이어 이 할당된 공간은 디코딩된 데이터의 개별 부분을 저장하기 위해 허프만 디코더 커널(250A-N)에 의해 이용된다. 커맨드 프로세서(220)는 허프만 인코딩된 데이터(225)를 복수의 청크로 분할하도록 구성된다. 이어, 커맨드 프로세서(220)는 실행 유닛(245A-N)의 각각의 실행 유닛에 상이한 청크와 이어 더하여 인접한 청크의 가외의 부분을 할당한다. 일 실시예에서, 커맨드 프로세서(220)는 허프만 인코딩된 데이터(225)의 일부를 병렬로 디코딩되게 각각의 실행 유닛(245A-N)에 전달한다. 또 다른 실시예에서, 커맨드 프로세서(220)는 시작 위치 및 데이터 량의 표시를 각각의 실행 유닛(245A-N)에 전달하고, 이어 각각의 실행 유닛(245A-N)은 캐시/메모리(215) 내 허프만 인코딩된 데이터(225)로부터 대응하는 데이터를 인출한다. 이어 각각의 실행 유닛(245A-N)은 다른 실행 유닛(245A-N)과 병렬로 실행 유닛(245A-N)에 할당된 데이터를 디코딩한다. 각 실행 유닛(245A-N)이 허프만 인코딩된 데이터(225)의 할당된 것과 이에 더하여 가외의 부분의 디코딩을 완료한 후, 실행 유닛은 디코딩된 데이터를 실행 유닛을 위해 이전에 할당된 캐시/메모리(215)의 특정 영역에 기입한다.
일 실시예에서, 디코딩된 데이터를 캐시/메모리(215)에 기입하기 전에, 각각의 실행 유닛(245A-N)은 인접한 청크의 가외의 부분 내 디코딩된 데이터를 인접한 청크에 대해 다른 실행 유닛(245A-N)에 의해 생성된 디코딩된 데이터와 비교한다. 제1 실행 유닛이 허프만 인코딩된 데이터(225)의 제1 청크를 디코딩하는 것 이외에, 각 실행 유닛(245A-N)에 의해 각 청크의 시작에서 몇몇의 심볼이 부정확하게 디코딩될 가능성이 있을 것이다. 각 실행 유닛(245A-N)은 각 청크의 시작에서 부정확하게 디코딩된 심벌을 정정하기 위해 가외의 부분 내의 디코딩된 데이터를 사용할 수 있다. 이어, 정확하게 디코딩된 데이터는 캐시/메모리(215) 내의 주어진 위치에 기입된다. 일 실시예에서, 부정확하게 디코딩된 심벌을 정정하기 위해 가외의 부분의 이러한 처리는 복수의 실행 유닛(245A-N)에 의해 병렬로 수행된다는 점에 유의한다. 따라서, 복수의 실행 유닛(245A-N)이 이들의 할당된 청크와 인접 청크의 가외의 부분을 병렬로 디코딩한 후, 복수의 실행 유닛(245A-N)은 인접한 청크의 시작에서 부정확하게 디코딩된 심벌을 정정하기 위해 가외의 부분과 인접 청크의 시작을 동시에 처리한다. 예를 들어, 일 실시예에서, 제1 실행 유닛(245A)은 제2 청크의 시작을, 제2 실행 유닛(245B)은 제3 청크의 시작을, 등등, 모두 병렬로 처리한다. 대안적으로, 또 다른 실시예에서, 제2 실행 유닛(245B)은 제1 실행 유닛(245A)에 의해 디코딩된 가외의 데이터를 이용하여 제2 청크의 시작을 처리하고, 제3 실행 유닛(245C)은 제2 실행 유닛(245B)에 의해 디코딩된 가외의 데이터를 이용하여 제3 청크의 시작을 처리한다, 등등.
이제 도 3을 참조하면, 허프만 인코딩된 데이터의 병렬 디코딩을 구현하는 일 실시예의 블록도가 도시되었다. 직사각형(305)은 일분량의 허프만 인코딩된 데이터를 나타낸다. 블록은 임의의 양의 데이터를 포함할 수 있고, 직사각형(305) 내 데이터 양은 실시예에 따라 다르다. 일 실시예에서, 허프만 인코딩된 데이터(305)를 디코딩하는 시스템은 허프만 인코딩된 데이터(305)를 디코딩하는 데 필요한 정보를 수신하거나 이미 가지고 있다. 일 실시예에서, 정보는 허프만 코드를 원래 데이터 심볼에 매핑하는 테이블을 포함한다.
허프만 인코딩된 데이터(305)는 복수의 더 작은 청크(310A-N)로 분할될 수 있고, 이어 개별 청크(310A-N)는 상이한 실행 유닛에 의해 개별적으로 처리될 수 있다. 예를 들어, 일 실시예에서, 각각의 청크(310A-N)는 GPU의 상이한 실행 유닛(315A-N)에 할당될 수 있다. 부가적으로, 각각의 실행 유닛(315A-N)은 이의 할당된 데이터 청크를 처리한 후에, 각각의 실행 유닛(315A-N)은 인접하는 데이터 청크로부터 가외의 데이터(ED)를 처리한다. 그러나, 데이터의 마지막 청크(310N)를 처리하는 실행 유닛은 이것이 원래 허프만 인코딩된 데이터(305)로부터의 데이터의 마지막 청크이므로 가외의 데이터를 페치(fetch)하지 않는다.
일 실시예에서, 각각의 실행 유닛은 이의 할당된 청크(310)와 이에 더하여 가외의 데이터를 디코딩하고, 디코딩된 데이터를 출력 버퍼에 저장한다. 일 실시예에서, 각각의 실행 유닛은 또한 자신의 데이터의 제1 N 심볼에 대한 심볼 오프셋 끝 및 가외의 데이터의 제1 N 심볼에 대한 심볼 오프셋 끝을 기록한다. N의 값은 실시예에 따라 다를 수 있으며, N은 양의 정수인 것에 유의한다. N의 값은 또한 다양한 실시예에서 프로그램가능할 수 있다.
일 실시예에서, 각각의 실행 유닛에 의해 처리되는 가외의 데이터의 양은 실시예에 따라 다를 수 있다. 일 실시예에서, 각각의 실행 유닛이 얼마나 많은 가외의 데이터를 처리하는가는 데이터(305)를 인코딩하기 위해 사용되는 허프만 코드의 분석에 기초하여 계산될 수 있다. 예를 들어, 특정 허프만 인코딩 접근법이 공통 서픽스(suffix)를 갖는 많은 수의 심볼을 갖는다면, 이것은 청크 경계 이후에 심볼이 빠르게 재정렬하게 될 높은 확률이 있음을 나타낸다. 이 경우, 부정확하게 심벌을 디코딩하는 것에서 이들을 정확하게 디코딩하는 것으로 바뀜이 청크 경계 직후에 발생할 것이기 때문에, 인접 청크로부터 각각의 실행 유닛에 의해 처리되는 가외의 데이터의 양은 상대적으로 적을 수 있다. 그렇지 않다면, 데이터(305)를 인코딩하기 위해 사용되는 특정 허프만 코드가 서픽스를 공유하는 적은 수의 심볼을 갖는다면, 청크 경계 이후에 심볼이 정확하게 재정렬하게 되는데 더 오래 걸릴 수 있고, 따라서 인접 청크에서 각각의 실행 유닛에 의해 처리되는 가외의 데이터의 양은 상대적으로 클 것이다.
일 실시예에서, 클린-업 국면은 실행 유닛(315A-N)에 의해 청크들(310A-N)의 병렬 실행 후에 실행된다. 예를 들어, 주어진 실행 유닛에 의해 처리된 가외의 데이터가 인접 실행 유닛에 의해 부정확하게 디코딩되어진 데이터의 양을 정정하기에 충분하지 않다면, 임의의 에러를 정정하기 위해 이 데이터 청크를 디코딩할 때 또 다른 패스가 수행될 수 있다.
이제 도 4를 참조하면, 청크(405, 410) 내의 심볼 오프셋 끝의 일 실시예의 블록도가 도시되었다. 일 실시예에서, 주어진 청크 데이터 및 인접 청크로부터의 가외의 데이터를 처리한 각각의 실행 유닛은 주어진 청크 내의 디코딩된 데이터에 심볼 오프셋의 제1 N 끝 및 인접 청크의 가외의 데이터 내 심볼 오프셋의 제1 N 끝을 기록하도록 구성된다. 기록되는 심볼 오프셋의 수 N은 실시예마다 다를 수 있음에 유의한다.
이어서, 이들 심볼 오프셋의 N개의 끝은 심볼 오프셋 끝의 인접 실행 유닛의 기록과 비교함으로써 정확하게 디코딩된 데이터가 주어진 데이터 청크 내 어디에서 시작되는지를 결정하기 위해 이용된다. 부정확하게 디코딩된 임의의 데이터는 폐기될 수 있고, 정확하게 디코딩된 데이터는 인접 데이터 청크를 디코딩하는 실행 유닛에 의해 디코딩된 데이터 사이에 정렬될 수 있다.
할당된 청크(405)는 주어진 실행 유닛에 의해 할당되고 디코딩되는 허프만 인코딩된 데이터의 청크의 일례이다. 가외의 데이터(410)는 인접 실행 유닛이 인접 청크의 시작에서 캐릭터를 정확하게 디코딩하지 않는 것을 보충하기 위해 충분히 정확하게 디코딩된 데이터를 생성하기 위해 인접 데이터 청크로부터 인출되어 디코딩되는 데이터의 예이다. 심볼 오프셋 끝(420A)은 할당된 데이터 청크(405)의 제1 디코딩된 심볼의 끝을 나타내고, 심볼 오프셋 끝(420B)은 할당된 데이터 청크(405)의 제2 디코딩된 심볼의 끝을 나타내고, 심볼 오프셋 끝(420C)은 할당된 데이터 청크(405)의 제3 디코딩된 심볼의 끝을 나타내다, 등등. 마지막 기록된 심벌 오프셋 끝은 할당된 데이터 청크(405)의 제N 디코딩된 심벌의 끝을 나타내는 심벌 오프셋의 끝(420N)으로서 도시되었다.
유사하게, 가외의 데이터(410)에 대해, 심볼 오프셋 끝(430A)은 가외의 데이터(410)의 제1 디코딩된 심볼의 끝을 나타내고, 심볼 오프셋 끝(430B)은 가외의 데이터(410)의 제2 디코딩된 심볼의 끝을 나타내고, 심볼 오프셋 끝(430C)은 가외의 데이터(410)의 제3 디코딩된 심볼의 끝을 나타낸다, 등등. 가외의 데이터(410)에 대한 마지막 기록된 심볼 오프셋 끝은 심볼 오프셋 끝(420N)으로서 도시되었다.
일 실시예에서, 심볼 오프셋 끝(420A-N)은 데이터 청크(405)의 시작부터 다수의 비트로서 저장된다. 유사하게, 심볼 오프셋 끝은 데이터 청크(405)의 끝(즉, 데이터의 다음 청크의 시작)부터 다수의 비트로서 저장된다. 일 실시예에서, 심볼 오프셋 끝(420A-N, 430A-N)은 테이블에 저장된다. 다른 실시예에서, 심볼 오프셋 끝(420A-N, 430A-N)은 추후 인출을 위해 다른 위치들 및/또는 다른 유형의 구조에 저장될 수 있다.
이제 도 5를 참조하면, 병렬로 동작하는 실행 유닛에 의해 생성된 데이터의 디코딩된 청크가 도시되었다. 디코딩된 청크(505A)는 제1 실행 유닛에 의해 생성된 디코딩된 데이터를 나타내고, 디코딩된 청크(505B)는 제2 실행 유닛에 의해 생성된 디코딩된 데이터를 나타내고, 디코딩된 청크(505C)는 제3 실행 유닛에 의해 생성된 디코딩된 데이터를 나타내고, 디코딩된 청크(505N)는 제N 실행 유닛에 의해 생성된 디코딩된 데이터를 나타낸다. 출력 버퍼(들)에 저장된 임의의 수의 다른 디코딩된 청크가 있을 수 있고, 개수는 원래 허프만 인코딩된 데이터의 크기, 실행 유닛의 수, 및 얼마나 많은 상이한 청크들이 각 실행 유닛에 의해 디코딩되었는가에 따라 다르다. 일 실시예에서, 데이터를 디코딩하는 각각의 실행 유닛은 디코딩된 데이터를 별도의 버퍼에 저장한다. 또 다른 실시예에서, 각각의 실행 유닛은 디코딩된 데이터를 공통 버퍼 내 특정된 오프셋으로 저장한다. 일 실시예에서, 디코딩된 데이터를 저장하기 위한 버퍼(들)는 허프만 디코딩 커널이 실행 유닛에서 런칭되기 전에 할당된다. 일 실시예에서, 디코딩된 데이터를 저장하기 위해 소정의 양의 메모리 공간이 각각의 실행 유닛에 할당된다. 따라서, 소정의 양의 메모리는 디코딩된 데이터가 공간에 들어맞을 수 있게 되도록 선택되어, 디코딩된 데이터의 각 청크 이후에 버퍼엔 소량의 미사용 공간이 있게 된다.
디코딩된 청크(505A)에 대해, 이것은 허프만 인코딩된 데이터로부터의 데이터의 제1 청크이기 때문에, 디코딩된 청크(505A)의 시작은 정확하게 디코딩된 데이터를 포함할 것이다. 이것은 허프만 인코딩된 데이터의 시작에서 심볼 경계가 청크 경계와 정렬된 것에 기인한다. 디코딩된 청크(505A)는 또한 인접한 청크의 일부로부터 정확하게 디코딩된 데이터를 포함한다. 또한, 디코딩된 청크(505A)에서, 인접한 청크의 부분으로부터 정확하게 디코딩된 데이터의 끝 이후에는 미사용 버퍼 공간의 부분이 존재한다. 디코딩된 청크(505B-N)에 있어, 청크의 시작 위치가 반드시 심볼 경계에 해당하는 것은 아니기 때문에, 디코딩된 청크(505B)의 시작은 부정확하게 디코딩된 데이터의 부분을 포함할 수 있다.
각 청크(505B-N) 내 어떤 지점에서, 디코딩된 데이터는 적절한 정렬을 회복할 것이고, 디코딩된 데이터는 이 지점에서 정확하게 디코딩된 데이터로 바뀌게 될될 것이다. 이어, 할당된 데이터 청크의 끝에서, 각 청크(505B-N)(청크(505N)는 제외))는 인접 청크로부터 정확하게 디코딩된 데이터의 부분을 포함할 것이다. 또한, 랜덤 량의 미사용 버퍼 공간이 또한 각각의 디코딩된 청크(505B-N)의 끝에 포함될 수 있다.
이제 도 6을 참조하면, 청크 경계 이후에 무효 데이터의 끝이 어디에서 발생하는지를 결정하는 일 실시예가 도시되었다. 일 실시예에서, 디코딩 프로세스의 부분 1동안, 각각의 실행 유닛은 다른 실행 유닛과 병렬로 데이터 청크와 이에 더하여 인접한 청크로부터의 가외의 량의 데이터를 디코딩한다. 이어, 디코딩 프로세스의 부분 2 동안, 각각의 실행 유닛은 다른 실행 유닛과 병렬로, 디코딩된 가외의 양의 데이터에서 심볼 위치의 끝에 매칭하는 심볼 위치의 제1 끝에 대해 후속 데이터 청크(인접한 실행 유닛에 의해 디코딩된)의 디코딩된 데이터를 탐색한다. 심볼 위치의 매칭 끝에 대한 이 탐색이 도 6에 도시되었다.
디코딩된 데이터 청크(605)는 도 6에 디코딩된 데이터 청크(610) 위에 도시되었다. 디코딩된 데이터 청크(605) 및 디코딩된 청크 데이터(610)는 허프만 인코딩된 데이터로부터 2개의 인접한 데이터 청크를 2개의 상이한 실행 유닛에 의해 디코딩한 결과를 나타낸다. 청크(605, 610) 사이의 경계 다음에 동일한 데이터가 각각의 실행 유닛에 의해 개별적으로 디코딩된 중첩 부분이 있다. 일 실시예에서, 데이터 청크(605)를 디코딩한 실행 유닛은 심볼 위치의 제1 매칭 끝을 찾기 위해 디코딩된 데이터 청크(610)를 철저히 탐색한다. 또 다른 실시예에서, 데이터 청크(610)를 디코딩한 실행 유닛은 심볼 위치의 제1 매칭 끝을 찾기 위해 디코딩된 데이터 청크(605)를 철저히 탐색한다. 대안적으로, 다른 실시예에서, 다른 실행 유닛은 심볼 위치의 제1 매칭 끝을 찾기 위해 데이터의 디코딩된 청크의 끝(605) 및 디코딩된 청크의 시작(610)을 탐색한다.
따라서, 실행 유닛은 청크(605, 610) 사이의 중첩 구간에서 심볼 위치의 제1 매칭 끝의 스팟(615)을 찾아낸다. 일단 실행 유닛이 스팟(615)을 찾아 내면, 실행 유닛은 스팟(615) 이후의 디코딩된 청크(610) 내의 모든 것은 정확하게 디코딩된다고 가정할 수 있다. 일 실시예에서, 각각의 실행 유닛(데이터의 최종 청크를 디코딩하는 마지막 실행 유닛 이외에)은 인접한 실행 유닛의 디코딩된 데이터에서 디코딩된 심볼 데이터를 매칭시키기 위해 디코딩된 데이터가 시작하는 자신의 가외의 디코딩된 데이터에서 스팟을 찾아내기 위해 이 단계를 수행하도록 구성된다. 실행 유닛을 설명하기 위해 사용될 때 "인접한"이라는 용어는 현재 실행 유닛에 의해 디코딩된 데이터 바로 다음에 데이터를 디코딩한 실행 유닛을 지칭하는 것으로 이해해야 한다.
일 실시예에서, 허프만 디코딩 프로세스의 부분 3에서, 유효 데이터는 상이한 디코딩된 청크 데이터들 중에서 재구성된다. 정확하게 디코딩된 데이터(620)는 허프만 디코딩 프로세스의 부분 3을 도시하며, 이 예에서, 정확하게 디코딩된 데이터(620)는 청크(605)로부터의 디코딩된 데이터를 청크(610)로부터의 정확하게 인코딩된 데이터와 결합한다. 이 프로세스는 인접한 청크로부터의 정확하게 디코딩된 데이터를 결합함으로써 다른 데이터 청크에 대해서도 수행될 수 있다. 일 실시예에서, 각각의 실행 유닛은 이의 유효한 디코딩된 데이터 및 이에 더하여, 필요한 디코딩된 가외의 데이터(인접한 실행 유닛이 유효한 디코딩된 데이터를 생성하기를 시작하는 스팟까지)를 출력 버퍼 내의 정확한 위치에 카피한다. 각 실행 유닛이 이의 유효한 디코딩된 데이터를 출력 버퍼에 카피한 후, 올바른 허프만 디코딩된 데이터 전체가 이용될 수 있다.
이제 도 7을 참조하면, 복수의 실행 유닛에서 인코딩된 비트스트림을 병렬로 디코딩하기 위한 방법(700)의 일 실시예가 도시되었다. 논의의 목적을 위해, 이 실시예의 단계 및 도 8-10의 단계는 순차적 순서로 도시되었다. 그러나, 설명된 방법의 다양한 실시예에서, 설명된 요소 중 하나 이상이 동시에, 도시된 것과 다른 순서로 수행되거나, 또는 완전히 생략됨에 유의한다. 원하는대로 다른 추가 요소들도 수행된다. 본원에 기술된 다양한 시스템 또는 장치 중 임의의 것이 방법(700)을 구현하도록 구성된다.
인코딩된 비트스트림은 복수의 실행 유닛을 갖는 계산 시스템에 의해 수신된다(블록(705)). 일 실시예에서, 비트스트림은 가변-길이 코드를 사용하여 인코딩된다. 일 실시예에서, 비트스트림은 허프만 코드를 사용하여 인코딩된다. 이 논의의 목적상, 시스템은 비트스트림을 디코딩하는 방법을 특정하는 인코딩 테이블을 이미 가지고 있거나 수신할 것으로 가정된다. 시스템은 인코딩된 비트스트림을 복수의 청크로 분할한다(블록(710)). 일 실시예에서, 인코딩된 비트스트림은 복수의 동일-크기의 청크로 분할된다. 청크는 심볼 경계와 정렬되지 않는다는 점에 주목한다. 다음에, 시스템은 복수의 실행 유닛의 각 실행 유닛에 의해 디코딩하기 위해 인코딩된 비트스트림의 청크와 인접 청크의 가외의 부분을 할당한다(블록(715)). 이어, 각각의 실행 유닛은 할당된 청크 및 인접 청크의 가외의 부분을 모두 디코딩한다(블록(720)).
다음에, 시스템은, 디코딩된 가외의 부분으로부터, 각각의 디코딩된 청크에 대해 부정확하게 디코딩된 데이터가 어디에서 끝나는지와 정확하게 디코딩된 데이터가 어디에서 시작되는지를 결정한다(제1 디코딩된 청크는 제외)(블록(725)). 블록(720, 725)은 복수의 실행 유닛에 의해 병렬로 수행될 수 있는 것에 유의한다. 예를 들어, 일 실시예에서, 복수의 실행 유닛은 블록(720, 725)을 수행하기 위해 동일한 명령을 동시에 실행한다. 또한, 블록(725)은 청크 경계가 인코딩된 비트스트림의 시작에서 심벌 경계와 일치하기 때문에 제1 디코딩된 청크에 적용되지 않는다는 점에 유의한다. 이어, 시스템은 정확하게 디코딩된 데이터를 유지하고 부정확하게 디코딩된 데이터를 폐기한다(블록(730)). 블록(730) 후에, 방법(700)이 종료된다.
일 실시예에서, 시스템은 비트스트림을 디코딩하기 위해 단일 패스를 이용한다. 이 실시예에서, 시스템은 각각의 실행 유닛에 대해 단일 청크가 있도록, 인코딩된 비트스트림을 다수의 청크로 분할한다. 예를 들어, 시스템이 64개의 실행 유닛을 갖고 있다면, 시스템은 인코딩된 비트스트림을 64개의 청크로 분할하고, 이어 상이한 청크(및 인접한 청크로부터 가외의 부분)를 각 실행 단위에 할당한다. 또 다른 실시예에서, 시스템은 비트스트림을 디코딩하기 위해 다중 패스를 사용한다. 예를 들어, 시스템이 128개의 실행 유닛을 갖고 있다면, 시스템은 인코딩된 비트스트림을 128의 정수배로 분할하고, 이어 각 패스 동안, 시스템은 주어진 청크(및 인접한 청크로부터 가외의 부분)를 각 실행 유닛에 한 세트의 128 청크를 할당한다. 실행 유닛이 제1 세트를 완료한 후, 시스템은 다음 한 세트의 128개의 청크를 디코딩하기 위해 다음 패스를 시작한다. 이 프로세스는 비트스트림의 모든 청크가 디코딩될 때까지 계속될 수 있다.
이제 도 8을 참조하면, 인코딩된 비트스트림의 인접 청크를 디코딩하기 위한 방법(800)의 일 실시예가 도시되었다. 인코딩된 비트스트림의 제1 청크 및 제2 청크의 가외의 부분은 복수의 실행 유닛의 제1 실행 유닛에 디코딩을 위해 할당되며, 제1 및 제2 청크는 인코딩된 비트스트림의 인접 청크이다(블록(805)). 제1 실행 유닛에 할당된 제2 청크의 가외의 부분은 제2 청크의 시작으로부터 온다는 점에 유의한다. 즉, 제1 실행 유닛은 제2 청크의 가외의 부분에 대해 제1 청크와 제2 청크 사이의 경계에 도달한 후에 디코딩을 계속한다. 일 실시예에서, 인코딩된 비트스트림은 허프만 인코딩된 비트스트림이다. 또한, 인코딩된 비트스트림의 제2 청크 및 제3 청크의 가외의 부분은 복수의 실행 유닛 중 제2 실행 유닛에 디코딩을 위해 할당되고, 제2 및 제3 청크는 인코딩된 비트스트림의 인접 청크이다(블록(810)).
다음에, 제1 및 제2 실행 유닛은 할당된 청크 및 인접한 청크의 가외의 부분을 디코딩한다(블록(815)). 임의의 수의 추가 실행 유닛이 또한 이들의 할당된 청크 및 인접한 청크의 가외의 부분을 제1 및 제2 실행 유닛과 병렬로 디코딩할 수 있음에 유의한다. 이어, 시스템은 제2 실행 유닛에 의해 디코딩된 제2 청크를 제1 실행 유닛에 의해 디코딩된 제2 청크의 가외의 부분과 비교함으로써 제2 실행 유닛에 의해 디코딩된 제2 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지를 결정한다(블록(820)). 일 실시예에서, 블록(820)은 제1 실행 유닛에 의해 수행된다. 다른 실행 유닛들은 또한 이들의 디코딩된 가외의 부분에 기초하여 부정확하게 디코딩된 데이터가 인접 청크에서 어디에서 끝나는지를 결정하기 위해 블록(820)과 병렬로 유사한 단계를 수행하는 것에 유의한다.
다음에, 시스템은 제1 실행 유닛에 의해 디코딩된 제2 청크의 가외의 부분으로부터의 하나 이상의 심볼을 제2 실행 유닛에 의해 디코딩된 제2 청크로부터의 복수의 심볼과 결합하고 심볼의 결합을 디코딩된 제2 청크로서 저장한다(블록(825)). 시스템은 또한 제2 실행 유닛에 의해 디코딩된 제2 청크로부터 부정확하게 디코딩된 심벌들을 폐기한다(블록(830)). 블록(830 후에, 방법(800)이 종료된다. 방법(800)은 제1 및 제2 실행 유닛에 의해 수행되는 방법(800)과 병렬로 다른 실행 유닛에 의해 수행될 수 있음에 유의한다.
이제 도 9를 참조하면, 병렬 디코딩 기법을 구현하기 위한 방법(900)의 일 실시예가 도시었다. 복수의 실행 유닛의 각각의 실행 유닛은 인코딩된 비트스트림의 할당된 청크 및 다음 청크의 가외의 부분을 디코딩한다(블록(905)). 다음에, 각각의 실행 유닛은 할당된 청크의 제1 N 디코딩된 심볼 및 다음 청크로부터의 데이터의 가외의 부분의 제1 N 디코딩된 심볼에 대한 심볼의 비트스트림 위치의 끝을 기록하며, N은 양의 정수이다(블록(910)).
이어, 각각의 실행 유닛은 다음 청크를 담당하는 실행 유닛에 의해 디코딩된 데이터로부터 다음 청크의 가외의 부분의 심볼 비트스트림 위치의 끝이 어디에서 심볼 비트스트림 위치의 끝과 매칭하는지를 결정한다(블록(915)). 다음에, 각각의 실행 유닛은 메모리 내 주어진 위치에, 디코딩된 데이터를 심볼 비트스트림 위치의 끝이 매칭되는 곳까지 카피한다(블록(920)). 블록(920) 후에, 방법(900)은 종료된다. 방법(900)에서 사용된 "각 실행 유닛"이라는 어구는 최종 실행 유닛(즉, 인코딩된 비트스트림의 최종 청크를 디코딩하는 실행 유닛)을 제외하고 각각의 실행 유닛을 지칭하는 것으로 이해되어야 한다. 인코딩된 비트스트림의 최종 청크를 디코딩하는 실행 유닛은 최종 청크의 끝이 또한 인코딩된 비트스트림의 끝이기 때문에 인접한 청크로부터 가외의 데이터를 디코딩하지 않을 것이다.
다양한 실시예에서, 소프트웨어 애플리케이션의 프로그램 명령은 전술한 방법 및/또는 메커니즘을 구현하기 위해 사용된다. 프로그램 명령은 C와 같은 고급 프로그래밍 언어에서 하드웨어의 거동을 기술한다. 대안적으로, 베릴로그와 같은 하드웨어 설계 언어(HDL)가 사용된다. 프로그램 명령은 비-일시적 컴퓨터 판독가능 저장 매체에 저장된다. 다양한 유형의 저장 매체가 사용될 수 있다. 저장 매체는 프로그램 실행을 위해 프로그램 명령 및 수반되는 데이터를 계산 시스템에 제공하기 위해 사용 동안 계산 시스템에 의해 액세스가능하다. 계산 시스템은 적어도 하나 이상의 메모리 및 프로그램 명령을 실행하도록 구성된 하나 이상의 프로세서를 포함한다.
전술한 실시예는 구현의 비제한적 예일 뿐임을 강조해야 한다. 위에 개시가 완전히 이해되면 많은 변형 및 수정이 당업자에게 명백해질 것이다. 다음의 청구범위는 이러한 모든 변형 및 수정을 포함하는 것으로 해석되도록 의도된다.

Claims (20)

  1. 시스템으로서,
    복수의 실행 유닛들; 및
    메모리를 포함하고,
    상기 시스템은:
    인코딩된 비트스트림을 복수의 청크들로 분할하고;
    상기 인코딩된 비트스트림의 개별 청크 및 상기 개별 청크에 인접하는 인접 청크의 가외의 부분을 상기 복수의 실행 유닛들의 각각의 실행 유닛에 할당하고;
    각 실행 유닛에 의해, 상기 실행 유닛에 할당된 상기 청크 및 상기 인접 청크의 상기 가외의 부분을 디코딩하고, 디코딩은 상기 복수의 실행 유닛들에 의해 병렬로 수행되고;
    각각의 디코딩된 가외의 부분으로부터, 대응하는 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지 및 정확하게 디코딩된 데이터가 어디에서 시작하는지를 결정하며; 그리고
    정확하게 디코딩된 데이터를 상기 메모리에 유지하고 부정확하게 디코딩된 데이터를 폐기하도록 구성된, 시스템.
  2. 청구항 1에 있어서,
    상기 복수의 실행 유닛들의 제1 실행 유닛에 의한 디코딩을 위해 상기 인코딩된 비트스트림의 제1 청크 및 제2 청크의 가외의 부분을 할당하되, 상기 제1 및 제2 청크들은 상기 인코딩된 비트스트림의 인접 청크들이고;
    상기 복수의 실행 유닛들의 제2 실행 유닛에 의한 디코딩을 위해 제2 청크 및 제3 청크의 가외의 부분을 할당하되, 상기 제2 및 제3 청크들은 상기 인코딩된 비트스트림의 인접 청크들이고;
    상기 디코딩된 제2 청크를 상기 제2 청크의 디코딩된 가외의 부분과 비교함으로써 디코딩된 제2 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지를 결정하며; 그리고
    상기 제2 청크의 상기 디코딩된 가외의 부분으로부터의 하나 이상의 심벌들을 상기 디코딩된 제2 청크로부터의 복수의 심벌들에 결합하도록 구성된, 시스템.
  3. 청구항 1에 있어서, 마지막 실행 유닛을 제외하고 상기 복수의 실행 유닛들의 각각의 실행 유닛은:
    상기 인코딩된 비트스트림의 할당된 청크와 상기 인접 청크의 상기 가외의 부분을 디코딩하고;
    상기 할당된 청크의 제1 N 디코딩된 심볼들 및 상기 할당된 청크에 인접하는 다음 청크로부터의 데이터의 가외의 부분의 제1 N 디코딩된 심볼들에 대한 심볼 비트스트림 위치들의 끝을 기록하며, 여기서 N은 양의 정수이고;
    상기 인접 청크의 상기 가외의 부분의 심벌 비트스트림 위치들의 끝이 상기 인접 청크에 대한 인접 실행 유닛에 의해 디코딩된 데이터로부터 심벌 비트스트림 위치들의 끝과 어디에서 매칭하는지를 결정하며, 여기서 상기 인접 실행 유닛은 임의의 실행 유닛에 의해 디코딩된 데이터에 인접하는 데이터를 디코딩하도록 구성되고; 그리고
    디코딩된 데이터를 심볼 비트스트림 위치들의 상기 끝이 매칭하는 곳까지 상기 메모리 내 위치에 카피하도록 구성된, 시스템.
  4. 청구항 1에 있어서, 상기 시스템은 각각의 실행 유닛에 의해 디코딩할 인접 청크의 가외의 부분의 크기를 결정하도록 더 구성된, 시스템.
  5. 청구항 4에 있어서, 상기 결정은 상기 비트스트림이 어떻게 인코딩되었는지를 특정하는 테이블을 분석함으로써 수행되는, 시스템.
  6. 청구항 1에 있어서, 상기 인코딩된 비트스트림은 가변 길이 코드를 사용하여 인코딩된, 시스템.
  7. 청구항 6에 있어서, 상기 가변 길이 코드는 허프만 코드인, 시스템.
  8. 방법으로서,
    시스템에 의해, 인코딩된 비트스트림을 복수의 청크들로 분할하는 단계;
    상기 시스템에 의해, 상기 인코딩된 비트스트림의 개별 청크 및 상기 개별 청크에 인접하는 인접 청크의 가외의 부분을 복수의 실행 유닛들의 각각의 실행 유닛에 할당하는 단계;
    각 실행 유닛에 의해, 상기 실행 유닛에 할당된 상기 청크 및 상기 인접 청크의 상기 가외의 부분을 디코딩하는 단계로서, 디코딩은 상기 복수의 실행 유닛들에 의해 병렬로 수행되는, 상기 디코딩하는 단계;
    상기 시스템에 의해, 각각의 디코딩된 가외의 부분으로부터, 대응하는 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지 및 정확하게 디코딩된 데이터가 어디에서 시작하는지를 결정하는 단계; 및
    상기 시스템에 의해, 정확하게 디코딩된 데이터를 상기 시스템 내의 메모리에 유지하고 부정확하게 디코딩된 데이터를 폐기하는 단계를 포함하는, 방법.
  9. 청구항 8에 있어서,
    상기 복수의 실행 유닛들의 제1 실행 유닛에 의한 디코딩을 위해 상기 인코딩된 비트스트림의 제1 청크 및 제2 청크의 가외의 부분을 할당하는 단계로서, 상기 제1 및 제2 청크들은 상기 인코딩된 비트스트림의 인접 청크들인, 상기 제1 청크 및 제2 청크의 가외의 부분을 할당하는 단계;
    상기 복수의 실행 유닛들의 제2 실행 유닛에 의한 디코딩을 위해 제2 청크 및 제3 청크의 가외의 부분을 할당하는 단계로서, 상기 제2 및 제3 청크들은 상기 인코딩된 비트스트림의 인접 청크들인, 상기 제2 청크 및 제3 청크의 가외의 부분을 할당하는 단계;
    상기 디코딩된 제2 청크를 상기 제2 청크의 디코딩된 가외의 부분과 비교함으로써 디코딩된 제2 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지를 결정하는 단계; 및
    상기 제2 청크의 상기 디코딩된 가외의 부분으로부터의 하나 이상의 심벌들을 상기 디코딩된 제2 청크로부터의 복수의 심벌들에 결합하는 단계를 더 포함하는, 방법.
  10. 청구항 9에 있어서,
    상기 인코딩된 비트스트림의 할당된 청크와 상기 인접 청크의 상기 가외의 부분을 둘 다 디코딩하는 단계;
    상기 할당된 청크의 제1 N 디코딩된 심볼들 및 상기 할당된 청크에 인접하는 다음 청크로부터의 데이터의 가외의 부분의 제1 N 디코딩된 심볼들에 대한 심볼 비트스트림 위치들의 끝을 기록하는 단계로서, N은 양의 정수인, 상기 심볼 비트스트림 위치들의 끝을 기록하는 단계;
    상기 인접 청크의 상기 가외의 부분의 심벌 비트스트림 위치들의 끝이 상기 인접 청크에 대한 인접 실행 유닛에 의해 디코딩된 데이터로부터 심벌 비트스트림 위치들의 끝과 어디에서 매칭하는지를 결정하는 단계, 여기서 상기 인접 실행 유닛은 임의의 실행 유닛에 의해 디코딩된 데이터에 인접하는 데이터를 디코딩하고; 및
    디코딩된 데이터를 심볼 비트스트림 위치들의 상기 끝이 매칭하는 곳까지 상기 메모리 내 위치에 카피하는 단계를 더 포함하는, 방법.
  11. 청구항 8에 있어서, 각 실행 유닛에 의해 디코딩하기 위해 인접 청크의 가외의 부분의 크기를 결정하는 단계를 더 포함하는, 방법.
  12. 청구항 11에 있어서, 상기 결정 단계는 상기 비트스트림이 어떻게 인코딩되었는지를 특정하는 테이블을 분석함으로써 수행되는, 방법.
  13. 청구항 8에 있어서, 상기 인코딩된 비트스트림은 가변 길이 코드를 사용하여 인코딩되는, 방법.
  14. 청구항 13에 있어서, 상기 가변 길이 코드는 허프만 코드인, 방법.
  15. 장치로서,
    메모리;
    상기 메모리 및 하나 이상의 계산 유닛들에 결합되는 커맨드 프로세서; 및
    상기 하나 이상의 계산 유닛들 내의 복수의 실행 유닛들을 포함하고;
    상기 장치는:
    인코딩된 비트스트림을 복수의 청크들로 분할하고;
    상기 인코딩된 비트스트림의 개별 청크 및 상기 개별 청크에 인접하는 인접 청크의 가외의 부분을 상기 복수의 실행 유닛들의 각각의 실행 유닛에 할당하고;
    각 실행 유닛에 의해, 상기 실행 유닛에 할당된 상기 청크 및 상기 인접 청크의 상기 가외의 부분을 디코딩하되, 디코딩은 상기 복수의 실행 유닛들에 의해 병렬로 수행되고;
    각각의 디코딩된 가외의 부분으로부터, 대응하는 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지 및 정확하게 디코딩된 데이터가 어디에서 시작하는지를 결정하며; 그리고
    정확하게 디코딩된 데이터를 상기 메모리에 유지하고 부정확하게 디코딩된 데이터를 폐기하도록 구성된, 장치.
  16. 청구항 15에 있어서,
    상기 복수의 실행 유닛들의 제1 실행 유닛에 의한 디코딩을 위해 상기 인코딩된 비트스트림의 제1 청크 및 제2 청크의 가외의 부분을 할당하되, 상기 제1 및 제2 청크들은 상기 인코딩된 비트스트림의 인접 청크들이고;
    상기 복수의 실행 유닛들의 제2 실행 유닛에 의한 디코딩을 위해 제2 청크 및 제3 청크의 가외의 부분을 할당하되, 상기 제2 및 제3 청크들은 상기 인코딩된 비트스트림의 인접 청크들이고;
    상기 디코딩된 제2 청크를 상기 제2 청크의 디코딩된 가외의 부분과 비교함으로써 디코딩된 제2 청크에서 부정확하게 디코딩된 데이터가 어디에서 끝나는지를 결정하며; 그리고
    상기 제2 청크의 상기 디코딩된 가외의 부분으로부터의 하나 이상의 심벌들을 상기 디코딩된 제2 청크로부터의 복수의 심벌들에 결합하도록 더 구성된, 장치.
  17. 청구항 15에 있어서, 마지막 실행 유닛을 제외하고 상기 복수의 실행 유닛들의 각각의 실행 유닛은:
    상기 인코딩된 비트스트림의 할당된 청크와 상기 인접 청크의 상기 가외의 부분을 디코딩하고;
    상기 할당된 청크의 제1 N 디코딩된 심볼들 및 상기 할당된 청크에 인접하는 다음 청크로부터의 데이터의 가외의 부분의 제1 N 디코딩된 심볼들에 대한 심볼 비트스트림 위치들의 끝을 기록하며, 여기서 N은 양의 정수이고;
    상기 인접 청크의 상기 가외의 부분의 심벌 비트스트림 위치들의 끝이 상기 인접 청크에 대한 인접 실행 유닛에 의해 디코딩된 데이터로부터 심벌 비트스트림 위치들의 끝과 어디에서 매칭하는지를 결정하며, 여기서 상기 인접 실행 유닛은 임의의 실행 유닛에 의해 디코딩된 데이터에 인접하는 데이터를 디코딩하도록 구성되고; 그리고
    디코딩된 데이터를 심볼 비트스트림 위치들의 상기 끝이 매칭하는 곳까지 상기 메모리 내 위치에 카피하도록 구성된, 장치.
  18. 청구항 15에 있어서, 상기 장치는 각각의 실행 유닛에 의해 디코딩할 인접 청크의 가외의 부분의 크기를 결정하도록 구성된, 장치.
  19. 청구항 18에 있어서, 상기 결정하는 것은 상기 비트스트림이 어떻게 인코딩되었는지를 특정하는 테이블을 분석함으로써 수행되는, 장치.
  20. 청구항 15에 있어서, 상기 인코딩된 비트스트림은 가변 길이 코드를 사용하여 인코딩되는, 장치.
KR1020207002277A 2017-06-28 2018-06-27 Gpu 병렬 허프만 디코딩 KR102596932B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/636,306 2017-06-28
US15/636,306 US9906239B1 (en) 2017-06-28 2017-06-28 GPU parallel huffman decoding
PCT/IB2018/054773 WO2019003154A1 (en) 2017-06-28 2018-06-27 DECODING OF HUFFMAN PARALLEL GPU

Publications (2)

Publication Number Publication Date
KR20200019232A KR20200019232A (ko) 2020-02-21
KR102596932B1 true KR102596932B1 (ko) 2023-11-01

Family

ID=61225876

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207002277A KR102596932B1 (ko) 2017-06-28 2018-06-27 Gpu 병렬 허프만 디코딩

Country Status (6)

Country Link
US (1) US9906239B1 (ko)
EP (1) EP3646467A4 (ko)
JP (1) JP7441045B2 (ko)
KR (1) KR102596932B1 (ko)
CN (1) CN110832781B (ko)
WO (1) WO2019003154A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108462495A (zh) * 2018-04-03 2018-08-28 北京航空航天大学 一种基于gpu的多元ldpc码高速并行译码器及其译码方法
US10917110B1 (en) * 2019-09-02 2021-02-09 Ati Technologies Ulc Multiple symbol decoder
CN111970007B (zh) * 2020-08-13 2022-03-22 山东云海国创云计算装备产业创新中心有限公司 一种解码方法、解码器、设备及介质
US11211945B1 (en) * 2020-10-29 2021-12-28 Microsoft Technology Licensing, Llc Parallelized decoding of variable-length prefix codes
US20230229630A1 (en) * 2022-01-19 2023-07-20 Nvidia Corporation Processing variable-length data

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5532694A (en) * 1989-01-13 1996-07-02 Stac Electronics, Inc. Data compression apparatus and method using matching string searching and Huffman encoding
JP3857298B2 (ja) * 1996-05-28 2006-12-13 松下電器産業株式会社 画像予測符号化装置及び方法、並びに画像予測復号化装置及び方法
JPH1198020A (ja) * 1997-09-24 1999-04-09 Sony Corp ビットストリーム解析方法及び装置
AUPP918699A0 (en) * 1999-03-12 1999-04-15 Canon Kabushiki Kaisha Encoding method and appartus
FI116819B (fi) * 2000-01-21 2006-02-28 Nokia Corp Menetelmä kuvien lähettämiseksi ja kuvakooderi
JP3669281B2 (ja) * 2000-04-27 2005-07-06 三菱電機株式会社 符号化装置および符号化方法
JP4516068B2 (ja) 2004-03-12 2010-08-04 パナソニック株式会社 可変長符号復号装置
US7630902B2 (en) * 2004-09-17 2009-12-08 Digital Rise Technology Co., Ltd. Apparatus and methods for digital audio coding using codebook application ranges
US7804435B2 (en) * 2006-08-31 2010-09-28 Ati Technologies Ulc Video decoder with reduced power consumption and method thereof
US20100020970A1 (en) * 2006-11-13 2010-01-28 Xu Liu System And Method For Camera Imaging Data Channel
CN100581258C (zh) * 2006-12-01 2010-01-13 致伸科技股份有限公司 霍夫曼解码方法和霍夫曼解码装置
US9337862B2 (en) * 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
EP2975771B1 (en) * 2014-07-17 2020-12-30 Phase One A/S A method for selecting starting positions in parallel decoding of a compressed image
US9252805B1 (en) * 2015-03-28 2016-02-02 International Business Machines Corporation Parallel huffman decoder
US9484954B1 (en) * 2015-09-10 2016-11-01 Intel Corporation Methods and apparatus to parallelize data decompression

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Parallel Huffman decoding with applications to JPEG files (the computer journal, 2003)*

Also Published As

Publication number Publication date
EP3646467A4 (en) 2021-03-03
EP3646467A1 (en) 2020-05-06
JP2020526095A (ja) 2020-08-27
WO2019003154A1 (en) 2019-01-03
JP7441045B2 (ja) 2024-02-29
CN110832781B (zh) 2023-09-22
KR20200019232A (ko) 2020-02-21
US9906239B1 (en) 2018-02-27
CN110832781A (zh) 2020-02-21

Similar Documents

Publication Publication Date Title
KR102596932B1 (ko) Gpu 병렬 허프만 디코딩
US10255547B2 (en) Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
US9921847B2 (en) Tree-based thread management
US10387305B2 (en) Techniques for compression memory coloring
US9880944B2 (en) Page replacement algorithms for use with solid-state drives
US20220159286A1 (en) Low-latency consumption of an encoded video bitstream
US10032246B2 (en) Approach to caching decoded texture data with variable dimensions
CN107025085B (zh) 数据处理系统及用于其的处理单元、操作方法、存储介质
US8984372B2 (en) Techniques for storing ECC checkbits in a level two cache
US9934145B2 (en) Organizing memory to optimize memory accesses of compressed data
US8300704B2 (en) Picture processing via a shared decoded picture pool
US10402323B2 (en) Organizing memory to optimize memory accesses of compressed data
US20150097847A1 (en) Managing memory regions to support sparse mappings
US11467838B2 (en) Fastpath microcode sequencer
US20170031811A1 (en) Control method for non-volatile memory and associated computer system
KR20200100203A (ko) 메모리 모듈 데이터 객체 처리 시스템 및 방법
US20160098358A1 (en) Pci device, interface system including the same, and computing system including the same
US20180329649A1 (en) Flash Memory Devices and Prefetch Methods Thereof
US20100262763A1 (en) Data access method employed in multi-channel flash memory system and data access apparatus thereof
US9830161B2 (en) Tree-based thread management
EP4020172A1 (en) Processor instructions for data compression and decompression
US11397684B2 (en) Command interface and pre-fetch architecture
US11418212B2 (en) Parallel decoding techniques
US11544196B2 (en) Resource-aware compression
WO2024099538A1 (en) Controller and method for copying data from processing unit to memory system

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right