KR20080011193A - 멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및제조물 - Google Patents

멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및제조물 Download PDF

Info

Publication number
KR20080011193A
KR20080011193A KR1020077026578A KR20077026578A KR20080011193A KR 20080011193 A KR20080011193 A KR 20080011193A KR 1020077026578 A KR1020077026578 A KR 1020077026578A KR 20077026578 A KR20077026578 A KR 20077026578A KR 20080011193 A KR20080011193 A KR 20080011193A
Authority
KR
South Korea
Prior art keywords
blocks
coefficients
macroblock
flag
data
Prior art date
Application number
KR1020077026578A
Other languages
English (en)
Other versions
KR101220724B1 (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 KR20080011193A publication Critical patent/KR20080011193A/ko
Application granted granted Critical
Publication of KR101220724B1 publication Critical patent/KR101220724B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Abstract

단일 인스트럭션 복수 데이터 처리를 이용하는 매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및 제조물이 설명된다. 장치는 매크로블록 데이터의 단일 인스트럭션 복수 데이터 처리를 수행하는 매체 처리 노드를 포함할 수 있다. 매크로블록 데이터는 매크로블록의 다수의 블록에 대한 계수를 포함할 수 있다. 매체 처리 노드는 매크로블록 데이터로부터 다수의 블록에 관련된 다수의 플래그 워드를 생성하고, 플래그 워드로부터 병렬식으로 다수의 블록에 대한 실행 값을 결정하는 인코딩 모듈을 포함할 수 있다. 다른 실시예도 설명되고 청구된다.

Description

멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는 매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및 제조물{PARALLEL EXECUTION OF MEDIA ENCODING USING MULTI-THREADED SINGLE INSTRUCTION MULTIPLE DATA PROCESSING}
매체 데이터를 인코딩하는 다양한 기술은 동화상 전문가 그룹(MPEG:Moving Picture Experts Group), 국제전기통신연합(ITU:International Telecommunication Union), 국제표준화기구(ISO:International Organization for Standardization) 및 국제전기기술위원회(IEC:International Electrotechnical Commission)와 같은 기구에 의해 공표된 표준에 설명되어 있다. 예컨대, MPEG-1, MPEG-2 및 MPEG-4 비디오 압축 표준은 화상이 슬라이스, 매크로블록 및 블록으로 분할되는 블록 인코딩 기술을 설명한다. 시간적 움직임 예측 및/또는 공간적 예측을 수행한 후에, 블록 내의 잔차 값은 엔트로피 인코딩된다. 통상적인 엔트로피 인코딩의 예는 데이터 심볼을 가변길이 코드로 변환하는 것을 포함하는 가변길이 인코딩(VLC:variable length encoding)이다. 보다 복잡한 엔트로피 인코딩의 예는 MPEG-4 Part 10 또는 ITU/IEC H.264 비디오 압축 표준, 상당히 낮은 비트 레이트 통신용 비디오 코딩(Video Coding for Very Low Bit Rate Communication), ITU-T 권장 H.264(2003년 5월)에서 지정된 상황기반 적응적 가변길이 코딩(CAVLC:context-based adaptive variable length coding) 및 상황기반 적응적 이진 산술 코딩(CABAC:context-based adaptive binary arithmetic coding)을 포함한다.
비디오 인코더는 전형적으로 고정 함수 논리 또는 스칼라 프로세서에 의해 구현된 단일 단위로 순차적인 인코딩을 수행한다. 엔트로피 인코딩에서 사용된 복잡도가 증가하므로, 순차적인 비디오 인코딩은 멀티-GHz 머신을 사용하더라도 대량의 프로세서 시간을 소비한다.
도 1은 노드의 일 실시예를 도시한다.
도 2는 매체 처리의 일 실시예를 도시한다.
도 3은 시스템의 일 실시예를 도시한다.
도 4는 논리 흐름의 일 실시예를 도시한다.
도 1은 노드의 일 실시예를 도시한다. 도 1은 매체 처리 노드(100)의 블록도를 도시한다. 예시된 설계 파라미터 세트 또는 성능 제약에 대해 바람직하게, 노드는 일반적으로 시스템(100)에 정보를 전달하는 임의의 물리적 또는 논리적 개체를 포함할 수 있고, 하드웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다.
다양한 실시예에서, 노드는 컴퓨터 시스템, 컴퓨터 서브시스템, 컴퓨터, 가전제품, 워크스테이션, 단말기, 서버, 개인용 컴퓨터(PC), 랩탑, 울트라 랩탑, 휴대용 컴퓨터, PDA, 셋톱 박스(STB), 전화기, 휴대전화기, 셀룰러 전화기, 핸드셋, 무선 액세스 포인트, 기지국, 무선 네트워크 제어기(RNC), 이동전화 가입자 센터(MSC), 마이크로프로세서, ASIC와 같은 집적 회로, 프로그램가능 논리 소자(PLD) 및/또는 네트워크 프로세서, 인터페이스, 입/출력(I/O) 장치(예컨대, 키보드, 마우스, 디스플레이, 프린터), 라우터, 허브, 게이트웨이, 브릿지, 스위치, 회로, 논리 게이트, 레지스터, 반도체 소자, 칩, 트랜지스터 또는 기타 소자, 머신, 툴, 장비, 부품 또는 이들의 조합을 포함하거나 이들로 구현될 수 있다.
다양한 실시예에서, 노드는 소프트웨어, 소프트웨어 모듈, 응용 프로그램, 프로그램, 서브루틴, 인스트럭션 세트, 연산 코드, 워드, 값, 심볼 또는 이들의 조합을 포함하거나 이들로 구현될 수 있다. 노드는 프로세서가 특정 기능을 수행하도록 지시하는 사전정의된 컴퓨터 언어, 방식 또는 구문에 따라 구현될 수 있다. 컴퓨터 언어의 예는 C, C++, 자바, 베이직, 펄, 매트랩, 파스칼, 비주얼 베이직, 어셈블리어, 기계어, 네트워크 프로세서용 마이크로코드 등을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 처리 시스템, 처리 서브시스템, 프로세서, 컴퓨터, 장치, 인코더, 디코더, 코더/디코더(CODEC), 압축 장치, 압축해제 장치, 필터링 장치(예컨대, 그래픽 스케일링 장치, 디블로킹 필터링 장치), 변 환 장치, 오락 시스템, 디스플레이 또는 기타 처리 구조 중 하나 이상을 포함하거나 이들로 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 하나 이상의 처리 동작을 수행하도록 마련될 수 있다. 처리 동작은 일반적으로 생성, 관리, 통신, 전달, 수신, 저장, 포워딩, 액세스, 판독, 기록, 조종, 인코딩, 디코딩, 압축, 압축해제, 재구성, 암호화, 필터링, 스트리밍 또는 다른 정보 처리와 같은 하나 이상의 동작을 지칭할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 비디오 정보와 같은 하나 이상의 유형의 정보를 처리하도록 마련될 수 있다. 비디오 정보는 일반적으로 하나 이상의 비디오 영상에 관련되거나 이로부터 획득되는 임의의 데이터를 지칭할 수 있다. 일 실시예에서, 예컨대, 비디오 정보는 비디오 데이터, 비디오 시퀀스, 화상 그룹, 화상, 대상, 프레임, 슬라이스, 매크로블록, 블록, 픽셀 등 중 하나 이상을 포함할 수 있다. 픽셀에 할당된 값은 실수 및/또는 정수를 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 예컨대, 매체 처리 노드(100)는 인코딩 및/또는 비디오 데이터를 저장되거나 스트리밍될 수 있는 파일로 압축, 필터링(예컨대, 그래픽 스케일링, 디블로킹 필터링), 비디오 재생, 인터넷 기반 비디오 응용, 화상회의 응용 및 스트리밍 비디오 응용과 같은 매체 처리 동작을 수행할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 예컨대, 매체 처리 노드(100)는 하나 이상의 프로토콜에 따라 정보를 전달, 관리 또는 처리할 수 있다. 프로토콜은 노드들 사이의 통신을 관리하는 사전정의된 룰 또는 인스트럭션 세트를 포함할 수 있다. 프로토콜은 ITU, ISO, IEC, MPEG, IETF(Internet Engineering Task Force), IEEE(Institute of Electrical and Electronics Engineers) 등과 같은 표준화 기구에 의해 공표된 하나 이상의 표준으로 정의될 수 있다. 예컨대, 설명된 실시예는 MPEG-1, MPEG-2, MPEG-4 및 H.264 표준과 같은 비디오 처리 표준에 따라 동작하도록 마련될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 다수의 모듈을 포함할 수 있다. 예시된 설계 또는 성능 제약 세트에 대해 바람직하게, 이 모듈은 하나 이상의 시스템, 서브 시스템, 프로세서, 장치, 머신, 툴, 부품, 회로, 레지스터, 응용 프로그램, 프로그램, 서브루틴 또는 이들의 임의의 조합을 포함하거나 이들로 구현될 수 있다. 다양한 실시예에서, 모듈들은 하나 이상의 통신 매체에 의해 접속될 수 있다. 통신 매체는 일반적으로 정보 신호를 전달할 수 있는 임의의 매체를 포함할 수 있다. 예컨대, 통신 매체는 예시된 구현에 대해 바람직하게 유선 통신 매체, 무선 통신 매체 또는 이들 양자의 조합을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 움직임 추정 모듈(102)을 포함할 수 있다. 다양한 실시예에서, 움직임 추정 모듈(102)은 입력 비디오 데이터를 수신하도록 마련될 수 있다. 다양한 실시예에서, 입력 비디오 데이터의 프레임은 하나 이상의 슬라이스, 매크로블록 및 블록을 포함할 수 있다. 슬라이스는 예컨대, I-슬라이스, P-슬라이 스 또는 B-슬라이스를 포함할 수 있고, 몇몇 매크로블록을 포함할 수 있다. 각 매크로블록은 예컨대, 휘도 블록 및/또는 색차 블록과 같은 몇몇 블록을 포함할 수 있다. 일 실시예에서, 매크로블록은 16 × 16 픽셀 영역을 포함할 수 있고, 블록은 8 × 8 픽셀 영역을 포함할 수 있다. 다른 실시예에서, 매크로블록은 예컨대, 16 × 16, 16 × 8, 8 × 16, 8 × 8, 8 × 4, 4 × 8 및 4 × 4와 같은 다양한 블록 크기로 분할될 수 있다. 매크로블록 및 블록을 참조할 수 있지만, 설명된 실시예 및 구현예는 다른 비디오 데이터 분할에도 적용할 수 있음을 알아야 한다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 움직임 추정 모듈(102)은 하나 이상의 매크로블록에서 움직임 추정을 수행하도록 마련될 수 있다. 움직임 추정 모듈(102)은 하나 이상의 기준 프레임에 기초하여 매크로블록 내의 현재 블록의 콘텐츠를 추정할 수 있다. 다양한 구현에서, 움직임 추정 모듈(102)은 현재 프레임 내의 하나 이상의 매크로블록과 기준 프레임 내의 주변 영역을 비교하여 일치하는 영역을 결정할 수 있다. 몇몇 실시예에서, 움직임 추정 모듈(102)은 움직임 추정을 수행하기 위해 다수의 기준 프레임(예컨대, 과거, 이전, 미래)을 사용할 수 있다. 몇몇 구현에서, 움직임 추정 모듈(102)은 예컨대, 움직임 벡터를 이용하여 현재의 프레임과 하나 이상의 기준 프레임 사이에 일치하는 영역의 이동을 추정할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 모드 결정 모듈(104)을 포함할 수 있다. 다양한 실시예에서, 모드 결정 모듈(104)은 하나 이상의 매크로블록의 코딩 모드를 결정하도 록 마련될 수 있다. 코딩 모드는 예컨대, 코드내 예측(intra code prediction) 및/또는 코드간 예측(inter code prediction)과 같은 예측 코딩 모드를 포함할 수 있다. 프레임내 블록 예측은 이전에 디코딩된 픽셀을 사용하는 동일한 프레임으로부터 픽셀 값을 추정하는 것을 포함할 수 있다. 프레임간 블록 예측은 연속적인 프레임으로부터 차례대로 픽셀 값을 추정하는 것을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 움직임 예측 모듈(106)을 포함할 수 있다. 다양한 실시예에서, 움직임 예측 모듈(106)은 시간적 움직임 예측 및/또는 공간적 예측을 수행하여 블록의 콘텐츠를 예측하도록 마련될 수 있다. 움직임 예측 모듈(106)은 예컨대, 프레임내 예측 및/또는 프레임간 예측과 같은 예측 기술을 이용하도록 마련될 수 있다. 다양한 실시예에서, 움직임 예측 모듈(106)은 양방향 예측을 지원할 수 있다. 몇몇 실시예에서, 움직임 예측 모듈(106)은 주변 블록 내의 움직임 벡터에 기초하여 움직임 벡터 예측을 수행할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 움직임 예측 모듈(106)은 현재 프레임과 하나 이상의 기준 프레임 간의 차이에 기초하여 잔차(residue)를 제공하도록 마련될 수 있다. 잔차는 예컨대, 블록의 예측된 콘텐츠와 실제 콘텐츠(예컨대, 픽셀, 움직임 벡터) 간의 차이를 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 순방향 이산 코사인 변환(FDCT:forward discrete cosine transform) 모듈과 같은 변환 모듈(108)을 포함할 수 있다. 다양한 실시예 에서, 변환 모듈(108)은 잔차의 주파수 기술을 제공하도록 마련될 수 있다. 다양한 구현에서, 변환 모듈(108)은 잔차를 주파수 영역으로 변환하고, 주파수 계수 행렬을 생성할 수 있다. 예컨대, 16 × 16 매크로블록은 16 × 16 주파수 계수 행렬로 변환될 수 있고, 8 × 8 블록은 8 × 8 주파수 계수 행렬로 변환될 수 있다. 몇몇 실시예에서, 변환 모듈(108)은 8 × 8 픽셀 기반 변환 및/또는 4 × 4 픽셀 기반 변환을 사용할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 양자화 모듈(110)을 포함할 수 있다. 다양한 실시예에서, 양자화 모듈(110)은 변환된 계수를 양자화하고 잔차 계수를 출력하도록 마련될 수 있다. 다양한 구현에서, 양자화 모듈(110)은 상대적으로 0이 아닌 계수를 거의 포함하지 않는 잔차 계수를 출력할 수 있다. 양자화 모듈(110)은 다수의 변환된 주파수 계수를 0으로 구동함으로써 코딩을 용이하게 할 수 있다. 예컨대, 양자화 모듈(110)은 작은 계수(예컨대, 고주파 계수)를 구동하는 양자화 행렬 또는 양자화 계수에 의해 주파수 계수를 0으로 구동할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 역양자화 모듈(112) 및 역변환 모듈(114)을 포함할 수 있다. 다양한 실시예에서, 역양자화 모듈(112)은 양자화된 변환 계수를 수신하고 역양자화를 수행하여 DCT 계수와 같은 변환 계수를 생성할 수 있다. 역변환 모듈(114)은 DCT 계수와 같은 변환 계수를 수신하고, 역변환을 수행하여 픽셀 데이터를 생성하도록 마련될 수 있다. 다양한 구현에서, 역양자화 및 역변환은 양자화 동안 겪은 손실을 예측하는 데 사용될 수 있다. 실시예는 이러한 측면으로 한정되 지 않는다.
매체 처리 노드(100)는 움직임 보상 모듈(116)을 포함할 수 있다. 다양한 실시예에서, 움직임 보상 모듈(116)은 역변환 모듈(114)의 출력을 수신하고 하나 이상의 매크로블록에 대한 움직임 보상을 수행할 수 있다. 다양한 구현에서, 움직임 보상 모듈(116)은 현재 프레임과 하나 이상의 기준 프레임 사이에서 일치하는 영역의 이동을 보상하도록 마련될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 스캐닝 모듈(118)을 포함할 수 있다. 다양한 실시예에서, 스캐닝 모듈(118)은 양자화 모듈(110)로부터 변환된 양자화 잔차 계수를 수신하고 스캐닝 동작을 수행하도록 마련될 수 있다. 다양한 구현에서, 스캐닝 모듈(118)은 지그재그 스캐닝 순서와 같은 스캐닝 순서에 따라 잔차 계수를 스캐닝하여 일련의 변환된 양자화 잔차 계수를 생성할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 VLC 모듈과 같은 엔트로피 인코딩 모듈(120)을 포함할 수 있다. 다양한 실시예에서, 엔트로피 인코딩 모듈(120)은 VLC(예컨대, 실행 레벨 VLC), CAVLC, CABAC 등과 같은 엔트로피 코딩을 수행하도록 마련될 수 있다. 일반적으로, CAVLC 및 CABAC는 VLC보다 복잡하다. 예컨대, CAVLC는 정수 비트를 사용하여 값을 인코딩할 수 있고, CABAC는 산술 코딩을 사용할 수 있으며 분수 비트를 사용하여 값을 인코딩할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 엔트로피 인코딩 모듈(120)은 허프만 테이블(huffman table)을 사용하는 실행 레벨 VLC와 같은 VLC 동작을 수행하도록 마련될 수 있다. 이러한 실시예에서, 일련의 스캐닝 변환 양자화 계수는 일련의 실행 레벨 심볼로 나타낼 수 있다. 각 실행 레벨 심볼은 실행 레벨 쌍을 포함할 수 있는데, 레벨은 0이 아닌 계수의 값이고, 실행은 0이 아닌 계수를 앞서는 0인 계수의 개수이다. 예컨대, 원래의 열 X1, X2, X3, 0, 0, 0, 0, 0, X4의 부분은 실행 레벨 심볼 (0,X1)(0,X2)(0,X3)(5,X4)로 나타낼 수 있다. 다양한 실시예에서, 엔트로피 인코딩 모듈(120)은 사전결정된 허프만 테이블 세트에 따라 각 실행 레벨 심볼을 서로 다른 길이의 비트열로 변환하도록 마련될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 노드(100)는 비트스트림 패킹 모듈(122)을 포함할 수 있다. 다양한 실시예에서, 비트스트림 패킹 모듈(122)은 스캐닝 순서에 따라 블록의 엔트로피 인코딩된 비트열을 패킹하여 블록의 VLC 열을 형성하도록 마련될 수 있다. 비트스트림 패킹 모듈(122)은 블록 순서에 따라 다수의 블록의 비트열을 패킹하여 매크로블록의 코드열 등을 형성할 수 있다. 다양한 구현에서, 심볼의 비트열이 고유하게 결정되어 역 패킹 프로세스가 블록 및 매크로블록의 고유한 디코딩을 가능하게 하는 데 사용될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 다단 함수 파이프(a multi-stage function pipe)를 구현할 수 있다. 도 1에 도시된 바와 같이, 예컨대, 매체 처리 노드(100)는 단계 A 내의 움직임 추정 단계, 단계 B 내의 인코딩 동작 및 단계 C 내의 비트스트림 패킹 동작으로 분할되는 함수 파이프를 구현할 수 있다. 몇몇 구현에서, 단계 B 내의 인코딩 동작은 더 분할될 수 있다. 다양한 실시예에서, 매체 처리 노드(100)는 함수 및 데이터 영역 기반 분할을 구현하여 멀티 스레드 컴퓨터 구조용으로 이용될 수 있는 병렬 계산을 달성할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 개벌 스레드는 움직임 추정 단계, 인코딩 단계 및 비트스트림 패킹 단계를 수행할 수 있다. 각 스레드는 다른 스레드와 병렬식으로 및 다른 스레드와 관계없이 실행될 수 있다. 다양한 실시예에서, 스레드 동기화는 상호 배제 객체(mutex:mutual exclusion object) 및/또는 세마포어(semaphore)를 이용하여 구현될 수 있다. 스레드 통신은 메모리 및/또는 직접 레지스터 액세스에 의해 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 매체 처리 노드(100)는 병렬 멀티 스레드 동작을 수행할 수 있다. 예컨대, 3 개의 개별 스레드는 단계 A 내의 움직임 추정 동작, 단계 B 내의 인코딩 동작 및 단계 C 내의 비트스트림 패킹 동작을 병렬로 수행할 수 있다. 다양한 구현에서, 다수의 스레드는 단계 C에서 동작하는 다수의 스레드와 병렬로 단계 B에서 동작하는 다수의 스레드와 병렬로 단계 A에서 동작할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 함수 파이프가 분할되어 단계 C 내의 비트스트림 패킹 동작은 단계 A 내의 움직임 추정 동작 및 단계 B 내의 인코딩 동작과 분리될 수 있 다. 함수 파이프의 분할은 함수 및 데이터 영역 기반에 기초하여 스레드 레벨 병렬 계산을 달성할 수 있다. 예컨대, 움직임 추정 단계 A 및 인코딩 단계 B는 매크로블록으로 데이터 영역 분할될 수 있고, 비트스트림 패킹 단계 C는 다른 단계의 계산과의 병렬 계산을 허용하는 행들로 분할될 수 있다. 다양한 실시예에서, 매크로블록 또는 블록의 마지막 비트열 패킹은 매크로블록 또는 블록 내의 실행 레벨 심볼의 비트열 패킹으로부터 분리되어, 상이한 매크로블록 또는 블록에서의 엔트로피 인코딩(예컨대, VLC) 동작은 서로 다른 스레드에 의해 병렬로 수행될 수 있다. 매크로블록 기반 인코딩 동작 범위 밖으로 패킹 비트스트림의 마지막 순차적 동작을 이동시킴으로써, 순차적인 의존성은 줄어들고 병렬 계산은 증가할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
도 2는 매체 처리의 일 실시예를 도시한다. 도 2는 매체 처리 노드(100)와 같은 매체 처리 노드에 의해 수행될 수 있는 병렬 멀티 스레드 처리의 일 실시예를 도시한다. 다양한 실시예에서, 병렬 멀티 스레드 동작은 매크로블록, 블록 및 행에서 수행될 수 있다. 도 2에 도시된 예에서, 예컨대, 각 매크로블록(m,n)은 16 × 16 매크로블록을 포함할 수 있다. 720 픽셀 480 라인을 가진 표준 해상도(SD) 프레임의 경우에, M=45, N=30이다. 실시예는 이러한 측면으로 한정되지 않는다.
일 실시예에서, 단계 B 내의 하나 이상의 매크로블록 (10), (11), (12) 및 (13)에서의 인코딩 동작은 단계 C 내의 행-00에서 수행되는 비트스트림 패킹 동작과 병렬로 수행될 수 있다. 다양한 실시예에서, 블록 레벨 처리는 매크로블록 레벨 처리와 병렬로 수행될 수 있다. 예컨대, 단계 B 내에서, 블록 레벨 인코딩 동 작은 매크로블록(00), (01), (02) 및 (03)에서 수행되는 매크로블록 레벨 인코딩 동작과 병렬로 매크로블록(10) 내에서 수행될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 병렬 멀티 스레드 동작은 층내 및/또는 층간 데이터 의존성에 영향을 받기 쉽다. 도 2에 도시된 예에서, 층내 데이터 의존성은 실선 화살표로 도시되고, 층간 데이터 의존성은 점선 화살표로 도시된다. 이러한 예에서, 단계 A의 움직임 추정 동작을 수행하는 경우에 매크로블록(12), (13) 및 (21) 사이의 층내 데이터 의존성이 존재할 수 있다. 단계 A와 단계 B 사이에 매크로블록(11)에 대한 층간 의존성도 존재할 수 있다. 이에 따라, 단계 B 내의 매크로블록(11)에서 수행되는 인코딩 동작은 단계 A 내의 매크로블록(11)에서 수행되는 움직임 추정 동작이 완료될 때까지 시작하지 않을 수도 있다. 단계 B와 단계 C 사이에 매크로블록(00), (01), (02) 및 (03)에 대한 층간 의존성도 존재할 수 있다. 이에 따라, 단계 C 내의 행-00 상의 비트스트림 패킹 동작은 매크로블록(00), (01), (02) 및 (03) 상의 동작이 완료될 때까지 시작하지 않을 수도 있다. 실시예는 이러한 측면으로 한정되지 않는다.
도 3은 시스템의 일 실시예를 도시한다. 도 3은 단일 인스트럭션 복수 데이터(SIMD:Single Instruction Multiple Data) 처리 시스템(300)을 도시한다. 다양한 구현에서, SIMD 처리 시스템(300)은 VLC 동작과 같은 매체 인코딩 동작의 멀티 스레드 병렬 실행을 포함하는 다양한 매체 처리 동작을 수행하도록 마련될 수 있다. 다양한 실시예에서, 매체 처리 노드(100)는 SIMD 처리를 구현함으로써 매체 인코딩의 멀티 스레드 병렬 실행을 수행할 수 있다. 도시된 SIMD 처리 시스템(300)은 예시적인 실시예이며, 다른 부품 -명료성 및 쉬운 이해를 위해 생략됨- 도 포함할 수 있음을 알아야 한다.
매체 처리 시스템(300)은 매체 처리 장치(302)를 포함할 수 있다. 다양한 실시예에서, 매체 처리 장치(302)는 다양한 기능 유닛과 리소스에 액세스하는 SIMD 프로세서(304)를 포함할 수 있다. SIMD 프로세서(304)는 예컨대, 범용 프로세서, 전용 프로세서, DSP, 매체 프로세서, 그래픽 프로세서, 통신 프로세서 등을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 프로세서(304)는 예컨대, 마이크로 엔진 또는 코어와 같은 다수의 처리 엔진을 포함할 수 있다. 각각의 처리 엔진은 다수의 실행 스레드(예컨대, 4, 8)에 대한 마이크로 엔진의 스레드에서 실행하는 마이크로 블록과 같은 프로그래밍 논리를 실행하도록 마련될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 프로세서(304)는 예컨대, n-피연산자 SIMD 실행 엔진과 같은 SIMD 실행 엔진을 포함하여 단일 인스트럭션 구간에서 n 개의 피연산자 데이터마다 SIMD 인스트럭션을 동시에 실행할 수 있다. 예컨대, 8 채널 SIMD 실행 엔진은 8 개의 32 비트 피연산자 데이터마다 SIMD 인스트럭션을 동시에 실행할 수 있다. 각 피연산자는 SIMD 실행 엔진의 개별 연산 채널에 매핑될 수 있다. 다양한 실시예에서, SIMD 실행 엔진은 대응하는 SIMD 실행 엔진 채널에서 처리하는 n-성분 데이터 벡터와 함께 SIMD 인스트럭션을 수신할 수 있다. SIMD 엔진은 벡터의 모든 성분마다 SIMD 인스트럭션을 동시에 실행할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 인스트럭션은 조건부일 수 있다. 예컨대, SIMD 인스트럭션 또는 SIMD 인스트럭션 세트는 하나 이상의 사전결정된 조건을 만족하는지에 따라 실행될 수 있다. 다양한 실시예에서, SIMD 조건부 분기 및 루프 메커니즘을 사용하여 특정 처리 동작의 병렬 루프가 인에이블링될 수 있다. 이 조건은 하나 이상의 매크로블록 및/또는 블록에 근거한다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 프로세서(304)는 영역 기반 레지스터 액세스를 구현할 수 있다. SIMD 프로세서(304)는 예컨대, 레지스터 파일 및 레지스터 파일 내의 영역을 설명하는 값을 저장하는 인덱스 파일을 포함하여, 정보를 저장할 수 있다. 일부 경우에, 영역은 동적일 수 있다. 인덱싱 레지스터는 다수의 독립형 인덱스를 포함할 수 있다. 다양한 구현에서, 인덱스 레지스터 내의 값은 레지스터 파일 내의 영역의 하나 이상의 기점을 정의할 수 있다. 이 값은 예컨대, 레지스터 식별자 및/또는 레지스터 내의 데이터 요소의 위치를 나타내는 서브레지스터 식별자를 나타낼 수 있다. 레지스터 영역에 대한 기술(예컨대, 레지스터 번호, 서브레지스터 번호)은 각 피연산자에 대한 인스트럭션 워드로 인코딩될 수 있다. 인덱스 레지스터는 레지스터 영역의 폭, 수평 스트라이드 또는 데이터 유형을 설명하는 다른 값을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 프로세서(304)는 플래그 구조를 포함할 수 있다. SIMD 프로세서(304)는 예컨대, 플래그 워드 또는 플래그를 저장하는 하나 이상의 플래그 레지스터를 포함할 수 있다. 플래그 워드는 처리 동작에 의해 발생한 하나 이상의 결과에 관련될 수 있다. 이 결과는 예컨대, 0, 0이 아닌, 같은, 같지 않은, 보다 큰, 보다 크거나 같은, 보다 작은, 보다 작거나 같은 및/또는 오버플로 상태와 관련될 수 있다. 플래그 레지스터 및/또는 플래그 워드의 구조는 변할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 플래그 레지스터는 n-채널 SIMD 실행 엔진의 n-비트 플래그 레지스터를 포함할 수 있다. 플래그 레지스터의 각 비트는 채널에 관련될 수 있고, 플래그 레지스터는 SIMD 실행 유닛으로부터 정보를 수신 및 저장할 수 있다. 다양한 실시예에서, SIMD 프로세서(304)는 하나 이상의 플래그 레지스터에 대한 수평 및/또는 수직 평가 유닛을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
SIMD 프로세서(304)는 버스(306)에 의해 하나 이상의 기능 유닛에 결합될 수 있다. 다양한 구현에서, 버스(306)는 매체 처리 장치(302)의 여러 기능 유닛을 상호접속시키는 하나 이상의 온칩 버스 집합체를 포함할 수 있다. 버스(306)는 쉽게 이해하기 위해 단일 버스로 도시되었지만, 버스(306)가 임의의 버스 구조를 포함하며 임의의 개수의 버스 및 버스 조합을 포함할 수 있음을 알 것이다. 실시예는 이러한 측면으로 한정되지 않는다.
SIMD 프로세서(304)는 인스트럭션 메모리 유닛(308) 및 데이터 메모리 유닛(310)에 결합될 수 있다. 다양한 실시예에서, 인스트럭션 메모리(308)는 SIMD 인스트럭션을 저장하도록 마련될 수 있고, 데이터 메모리 유닛(310)은 2차원 영상, 3차원 영상 및/또는 동영상에 관련된 스칼라 또는 벡터와 같은 데이터를 저장하도록 마련될 수 있다. 다양한 구현에서, 인스트럭션 메모리 유닛(308) 및/또는 데이터 메모리 유닛(310)은 개별 인스트럭션 및 데이터 캐시, 공유형 인스트럭션 및 데이터 캐시, 공통 공유형 캐시가 지원하는 개별 인스트럭션 및 데이터 캐시, 또는 기타 캐시 계층에 관련될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
인스트럭션 메모리 유닛(308) 및 데이터 메모리 유닛(310)은 휘발성 메모리와 비휘발성 메모리 양자 모두를 포함하며 데이터를 저장할 수 있는 임의의 컴퓨터 판독가능 저장 매체를 포함하거나 이것으로 구현될 수 있다. 저장 매체의 예는 RAM, DRAM, DDRAM, SDRAM, 플래시 메모리, ROM, PROM, EPROM, EEPROM, 플래시 메모리, CAM(content addressable memory), 폴리머 메모리(예컨대, 강유전성 폴리머 메모리, 오보닉 메모리, 상변화 또는 강유전성 메모리), SONOS 메모리, 디스크 메모리(예컨대, 플로피 디스크, 하드 드라이브, 광디스크, 자기 디스크) 또는 카드(예컨대, 자기 카드, 광 카드) 또는 정보를 저장하기에 적합한 기타 유형의 매체를 포함할 수 있다. 저장 매체는 머신 판독가능 저장 장치 및/또는 다양한 제어기의 여러 가지 조합을 포함하여 컴퓨터 프로그램 인스트럭션 및 데이터를 저장할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
매체 처리 장치(302)는 통신 인터페이스(312)를 포함할 수 있다. 통신 인터페이스(312)는 하나 이상의 네트워크 및/또는 네트워크 장치에 매체 처리 장치(302)를 결합할 수 있는 임의의 적합한 하드웨어, 소프트웨어 또는 하드웨어와 소프트웨어의 조합을 포함할 수 있다. 다양한 실시예에서, 통신 인터페이스(312)는 예컨대, 송신 인터페이스, 수신 인터페이스, MSF(Media and Switch Fabric) 인터페이스, SPI(System Packet Interface), CSI(Common Switch Interface), PCI(Peripheral Component Interface), SCSI(Small Computer System Interface), IE(Internet Exchange) 인터페이스, FIC(Fabric Interface Chip), 회선 카드, 포트 또는 기타 적합한 인터페이스와 같은 하나 이상의 인터페이스를 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 통신 인터페이스(312)는 하나 이상의 물리층 장치 및/또는 스위치 패브릭(314)에 매체 처리 장치(302)를 접속하도록 마련될 수 있다. 매체 처리 장치(302)는 네트워크와 스위치 패브릭(314) 사이에 인터페이스를 제공할 수 있다. 매체 처리 장치(302)는 스위치 패브릭(314)을 통해 송신할 데이터에 대해 다양한 매체 처리를 수행할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, SIMD 처리 시스템(300)은 SIMD 인스트럭션 특성 및 하나 이상의 인덱싱 레지스터, 영역 기반 레지스터 및/또는 플래그 레지스터에 대한 유동적 액세스를 이용함으로써 데이터 레벨 병렬 계산을 달성할 수 있다. 다양한 구현에서, 예컨대, SIMD 프로세서 시스템(300)은 다수의 데이터 블록 및/또는 매크로블록을 수신하고, SIMD 방식으로 블록 레벨 및 매크로블록 레벨을 수행할 수 있다. 처리 동작(예컨대, 비교 동작)의 결과는 유동적인 플래그 구조를 사용하여 플래그 워드로 패킹될 수 있다. SIMD 동작은 SIMD 레지스터로 패킹되는 서로 다른 블록에 대한 플래그 워드에서 병렬로 수행될 수 있다. 예컨대, 0이 아닌 계수를 앞서는 0인 계수의 개수는 플래그 워드에서 선행-0-검출(LZD:leading-zero-detection) 동작과 같은 인스트럭션을 사용하여 결정될 수 있다. 다수의 블록에 대한 플래그 워드는 영역 기반 레지스터 액세스 특성을 사용하여 SIMD 레지스터 내에 패킹될 수 있다. 다수의 소스 및/또는 다수의 목적지 인덱스에 대한 멀티 인덱스 SIMD 이동 인스트럭션 및 영역 기반 레지스터 액세스를 사용하여 동시에 다수의 블록마다 0이 아닌 계수 값의 병렬 이동이 수행될 수 있다. 테이블(예컨대, 허프만 테이블) 룩업과 같은 병렬 메모리 액세스는 데이터 포트 산란-수집 특성을 사용하여 수행될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예의 동작은 후속하는 도면 및 첨부 예를 참조하여 더 설명될 수 있다. 일부 도면은 논리 흐름을 포함할 수 있다. 논리 흐름이 설명된 기능이 구현될 수 있는 방법의 일례만을 제공함을 알 수 있다. 또한, 이와 다르게 나타내지 않는 한 예시된 논리 흐름이 반드시 나타낸 순서대로 실행되어야만 하는 것은 아니다. 또한, 논리 흐름은 하드웨어 구성요소, 프로세서에 의해 실행되는 소프트웨어 요소 또는 이들의 임의의 조합에 의해 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
도 4는 논리 흐름(400)의 일 실시예를 도시한다. 도 4는 매체 처리를 수행하는 논리 흐름(400)을 도시한다. 다양한 실시예에서, 논리 흐름(400)은 매체 처리 노드(100)와 같은 매체 처리 노드 및/또는 엔트로피 인코딩 모듈(120)과 같은 인코딩 모듈에 의해 수행될 수 있다. 논리 흐름(400)은 매크로블록의 SIMD 기반 인코딩을 포함할 수 있다. SIMD 기반 인코딩은 예컨대, VLC(예컨대, 실행 레벨 VLC), CAVLC, CABAC 등과 같은 엔트로피 코딩을 포함할 수 있다. 다양한 구현에서, 엔트로피 인코딩은 일련의 스캐닝 계수(예컨대, 변환 양자화 스캐닝 계수)를 일련의 실행 레벨 심볼로서 나타내는 것을 포함할 수 있다. 각 실행 레벨 심볼은 레벨은 0이 아닌 계수의 값이고 실행은 0이 아닌 계수를 앞서는 0인 계수의 개수인 실행 레벨 쌍을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 매크로블록 데이터를 입력하는 단계(402)를 포함할 수 있다. 다양한 실시예에서, 매크로블록은 N 개의 블록(예컨대, YUV420의 6 개의 블록, YUC444의 12 개의 블록 등)을 포함하고, 매크로블록 데이터는 매크로블록의 각 블록에 대한 일련의 스캐닝 계수(예컨대, DCT 변환 양자화 스캐닝 계수)를 포함할 수 있다. 예컨대, 매크로블록은 6 개의 블록 데이터를 포함할 수 있고, 각 블록은 8 × 8 행렬 계수를 포함할 수 있다. 이러한 경우에, 매크로블록 데이터는 매크로블록의 각 블록마다 일련의 64 개의 계수를 포함할 수 있다. 다양한 구현에서, 매크로블록 데이터는 SIMD 방식으로 동시에 처리될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 매크로블록 데이터로부터 플래그 워드를 생성하는 단계(404)를 포함할 수 있다. 다양한 실시예에서, 매크로블록 데이터를 0과 비교하고 그 비교 결과에 기초하여 플래그 워드가 생성될 수 있다. 예컨대, 매크로블록의 각 블록마다 일련의 스캐닝 계수와 0을 비교할 수 있다. 각 플래그 워드는 비교 결과에 기초하여 계수당 1 비트를 포함할 수 있다. 예컨대, 비교 결과에 기초 하여 1 및 0을 포함하는 64 비트 플래그 워드는 8 × 8 블록의 64 개의 계수로부터 생성될 수 있다. 다양한 구현에서, 다수의 플래그 워드는 다수의 블록의 비교 결과를 SIMD 유동적 플래그 레지스터로 패킹함으로써 SIMD 방식으로 병렬로 생성될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 플래그 워드를 저장하는 단계(406)를 포함할 수 있다. 다양한 실시예에서, 다수의 블록의 플래그 워드는 병렬식으로 저장될 수 있다. 예컨대, 매크로블록의 6 개의 블록에 대응하는 6 개의 64 비트 플래그 워드는 병렬식으로 저장될 수 있다. 다양한 구현에서, 다수의 블록의 플래그 워드는 플래그 워드를 영역 기반 레지스터 액세스 특성을 가진 SIMD 레지스터로 패킹함으로써 SIMD 방식으로 병렬식으로 저장될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 모든 플래그 워드가 0인지를 판단하는 단계(408)를 포함할 수 있다. 다양한 실시예에서, 각 플래그 워드를 비교하여 플래그 워드가 0인 계수만을 포함하는지를 판단할 수 있다. 플래그 워드가 0을 포함하면, 블록의 종단(EOB)이 블록에 도달되었다고 결정할 수 있다. 다양한 구현에서, 다수의 결정이 다수의 플래그 워드에 대해 병렬로 수행될 수 있다. 예컨대, 결정은 6 개의 64 비트 플래그 워드에 대해 병렬로 수행될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 모든 플래그 워드가 0이 아닌 경우에 플래그 워드로부터 실행 값을 결정하는 단계(410)를 포함할 수 있다. 다양한 실시예에서, 플래그 워드에 대해 LZD 동작이 수행될 수 있다. LZD 동작은 예컨대, SIMD 인스트럭션을 사 용하는 SIMD 방식으로 수행될 수 있다. LZD 동작의 결과는 플래그 워드에서 0이 아닌 계수를 앞서는 0인 계수의 개수를 포함할 수 있다. 실행 값은 예컨대, 실행=LZD(플래그)와 같은 LZD 동작의 결과에 기초하여 설정될 수 있다. 실행 값은 플래그 워드에 관련된 블록의 일련의 스캐닝 계수에서 0이 아닌 계수를 앞서는 0인 계수의 개수에 대응할 수 있다. 이에 따라, 결정된 실행 값은 플래그에 관련된 블록의 실행 레벨 심볼로 사용될 수 있다. 다양한 구현에서, SIMD LZD 동작은 SIMD 레지스터로 패킹되는 다수의 블록의 다수의 플래그 워드에 대해 병렬로 수행될 수 있다. 예컨대, SIMD LZD 동작은 6 개의 64 비트 플래그 워드마다 병렬로 수행될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 실행 값에 기초하여 계수의 인덱스 이동을 수행하는 단계(412)를 포함할 수 있다. 다양한 실시예에서, 인덱스 이동은 예컨대, SIMD 인스트럭션을 사용하는 SIMD 방식으로 수행될 수 있다. 계수는 블록의 일련의 스캐닝 계수에서 0이 아닌 계수를 포함할 수 있다. 실행 값은 블록의 일련의 스캐닝 계수에서 0이 아닌 계수를 앞서는 0인 계수의 개수에 대응할 수 있다. 인덱스 이동은 저장 위치(예컨대, 레지스터)에서 출력단으로 0이 아닌 계수를 이동시킬 수 있다. 다양한 실시예에서, 0이 아닌 계수는 블록의 실행 레벨 심볼의 레벨 값을 포함할 수 있다. 다양한 구현에서, 인덱스 이동 동작은 다수의 블록마다 병렬로 수행될 수 있다. 인덱스 이동은 예컨대, 다수의 소스 및/또는 다수의 목적지 인덱스에 대한 멀티 인덱스 SIMD 이동 인스트럭션 및 영역 기반 레지스터 액세스를 사용하여 수행될 수 있다. 멀티 인덱스 SIMD 이동 인스트럭션은 조건부적으로 실행될 수 있 다. 조건은 EOB가 블록에 도달되었는지 여부에 의해 결정될 수 있다. 만일 EOB가 블록에 도달되면, 블록에 대해 이동은 수행되지 않는다. 한편, EOB가 다른 블록에 도달되지 않으면, 블록에 대해 이동이 수행된다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 증분 실행의 인덱스 저장을 수행하는 단계(414)를 포함할 수 있다. 다양한 실시예에서, 인덱스 저장은 예컨대, SIMD 인스트럭션을 사용하는 SIMD 방식으로 수행될 수 있다. 증분 실행은 일련의 스캐닝 계수에서 다음 0이 아닌 계수의 위치를 정하는 데 사용될 수 있다. 예컨대, 증분 실행은 블록의 일련의 스캐닝 계수로부터 0이 아닌 계수의 인덱스 이동을 수행하는 경우에 사용될 수 있다. 다양한 구현에서, 인덱스 저장 동작은 다수의 블록마다 병렬로 수행될 수 있다. 멀티 인덱스 SIMD 저장 인스트럭션은 조건부적으로 실행될 수 있다. 조건은 EOB가 블록에 도달되었는지 여부에 의해 결정될 수 있다. 만일 EOB가 블록에 도달되면, 블록에 대해 저장은 수행되지 않는다. 한편, EOB가 다른 블록에 도달되지 않으면, 블록에 대해 저장이 수행된다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 플래그 워드의 좌측 이동을 수행하는 단계(416)를 포함할 수 있다. 다양한 실시예에서, 플래그 워드에 대해 좌측 이동이 수행되어 블록의 플래그 워드로부터 0이 아닌 계수가 소거된다. 좌측 이동은 예컨대, SIMD 인스트럭션을 사용하는 SIMD 방식으로 수행될 수 있다. 다양한 구현에서, 좌측 이동 동작은 다수의 블록의 다수의 플래그 워드마다 병렬로 수행될 수 있다. SIMD 좌측 이동 인스트럭션은 조건부적으로 실행될 수 있다. 조건은 EOB가 블록에 도달되었는지 여부에 의해 결정될 수 있다. 만일 EOB가 블록에 도달되면, 블록의 플래그 워드의 좌측 이동은 수행되지 않는다. 한편, EOB가 다른 블록에 도달되지 않으면, 블록의 플래그 워드의 좌측 이동은 수행된다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 매크로블록의 블록의 모든 실행 레벨 심볼을 결정하기 위해 하나 이상의 병렬 루프를 수행하는 단계를 포함할 수 있다. 다양한 실시예에서, 병렬 루프는 예컨대, SIMD 루프 메커니즘을 사용하는 SIMD 방식으로 수행될 수 있다. 다양한 구현에서, 조건부 분기는 예컨대, SIMD 조건부 분기 메커니즘을 사용하는 SIMD 방식으로 수행될 수 있다. 조건부 분기는 블록에 대한 처리가 완료되었을 때 루프를 종단 및/또는 바이패스하는 데 사용될 수 있다. 조건은 하나, 몇몇 또는 모든 블록에 기초할 수 있다. 예컨대, 특정 블록에 관련된 플래그 워드가 0인 계수만을 포함하면, 조건부 분기는 다른 블록에 대해서는 처리가 계속되게 하면서 특정 블록에 대한 다른 처리는 중단할 수 있다. 처리는 실행 레벨, 계수의 인덱스 이동 및 증분 실행의 인덱스 저장을 결정하는 단계를 포함할 수 있지만, 이들로 한정되지 않는다. 실시예는 이러한 측면으로 한정되지 않는다.
논리 흐름(400)은 모든 플래그 워드가 0인 경우에 VLC 코드 어레이를 출력하는 단계(418)를 포함할 수 있다. 다양한 실시예에서, 실행 레벨 심볼은 사전결정된 허프만 테이블에 따라 VLC 코드로 변환될 수 있다. 다양한 구현에서, 병렬 허프만 테이블 룩업은 예컨대, 데이터 포트의 산란-수집 특성을 사용하는 SIMD 방식 으로 수행될 수 있다. VLC 코드 어레이는 비트스트림 패킹 모듈(122)과 같은 패킹 모듈로 출력되어 매크로블록의 코드열을 형성할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 설명된 실시예는 SIMD 처리를 사용하여 매체 인코딩(예컨대, VLC)의 병렬 실행을 수행할 수 있다. 설명된 실시예는 다양한 프로세서 구조(예컨대, 멀티 스레드 및/또는 멀티 코어 구조) 및/또는 다양한 SIMD 특성(예컨대, SIMD 인스트럭션 세트, 영역 기반 레지스터, 다수의 독립형 인덱스를 갖는 인덱스 레지스터 및/또는 유동적인 플래그 레지스터)을 포함하거나 이들로 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 설명된 실시예는 처리 성능을 개선하는 매체 인코딩의 스레드 레벨 및/또는 데이터 레벨 병렬 계산을 달성할 수 있다. 예컨대, 멀티 스레드 방안의 구현으로 처리 코어의 개수 및/또는 하드웨어 스레드의 개수에 거의 비례하는 멀티 스레드 처리 속도를 개선할 수 있다(예컨대, 16-코어 프로세서에서 ~16X 속도 향상). 플래그 워드 및 LZD 인스트럭션을 사용하는 LZD 검출의 구현은 스칼라 루프 구현을 통해 처리 속도를 개선할 수 있다(예컨대, ~4-10X 속도 향상). SIMD LZD 동작 및 분기/루프 메커니즘을 사용하는 다수의 블록(예컨대, 6 개의 블록)의 병렬 처리는 블록 순차 알고리즘을 통해 처리 속도를 개선할 수 있다(예컨대, ~6X 속도 향상). 실시예는 이러한 측면으로 한정되지 않는다.
본 명세서에는 실시예를 완전히 이해하도록 다수의 특정 세부사항이 설명되었다. 그러나, 당업자는 실시예가 이들 특정 세부사항 없이도 실시될 수 있음을 알 것이다. 다른 경우에, 실시예를 불명료하게 하지 않도록 잘 알려져 있는 동작, 부품 및 회로는 상세히 설명하지 않았다. 본 명세서에 개시된 특정 구조 및 기능적 세부사항은 전형적일 수 있으며 반드시 실시예의 범위를 한정하는 것은 아님을 알 수 있다.
다양한 구현에서, 설명된 실시예는 유선 통신 시스템, 무선 통신 시스템 또는 양자 모두의 조합을 포함하거나 형성할 수 있다. 소정의 실시예는 예로써 특정 통신 매체를 사용하여 설명될 수 있지만, 본 명세서에 설명된 이론 및 기술은 다양한 통신 매체 및 첨부하는 기술을 사용하여 구현될 수 있다.
다양한 구현에서, 설명된 실시예는 WAN(Wide Area Network), LAN(Local Area Network), MAN(Metropolitan Area Network), 인터넷, WWW(World Wide Web), 전화 네트워크, 무선 네트워크, 텔레비전 네트워크, 케이블 네트워크, 위성 네트워크, WPAN(wireless personal area network), WWAN(wireless WAN), WLAN(wireless LAN), WMAN(wireless MAN), CDMA 셀룰러 무선전화 통신 네트워크, WCDMA(Wide-band CDMA)와 같은 3G 네트워크, 4G 네트워크, TDMA 네트워크, 확장형-TDMA(E-TDMA) 셀룰러 무선전화 네트워크, GSM(Global System for Mobile Communications) 셀룰러 무선전화 네트워크, NADC(North American Digital system) 셀룰러 무선전화 네트워크, UMTS(universal mobile telephone system) 네트워크 및/또는 데이터를 전달하도록 구성된 기타 유선 또는 무선 통신 네트워크와 같은 네트워크 부분을 포함하거나 형성할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 설명된 실시예는 하나 이상의 유선 통신 매체를 통해 정보 를 전달하도록 마련될 수 있다. 유선 통신 매체의 예는 회선, 케이블, 인쇄 회로 기판(PCB), 후면, 스위치 패브릭, 반도체 재료, 연선(twisted-pair wire), 동축 케이블, 광섬유 등을 포함할 수 있다.
다양한 구현에서, 설명된 실시예는 하나 이상의 유형의 무선 통신 매체를 통해 정보를 전달하도록 마련될 수 있다. 무선 통신 매체의 예는 무선 주파수(RF) 스펙트럼과 같은 무선 스펙트럼의 일부를 포함할 수 있다. 이러한 구현에서, 설명된 실시예는 하나 이상의 안테나, 무선 송/수신기("트랜시버"), 증폭기, 필터, 제어 로직 등과 같은 지정된 무선 스펙트럼을 통해 정보 신호를 전달하기에 적합한 부품 및 인터페이스를 포함할 수 있다. 본 명세서에 사용된 바와 같이, 용어 "트랜시버"는 전반적으로 송신기, 수신기 또는 양자 모두의 조합을 포함하는 것으로 사용될 수 있고, 안테나, 증폭기 등과 같은 다양한 부품을 포함할 수 있다. 안테나의 예는 인테나(internal antenna), 전방향성 안테나, 모노폴 안테나, 다이폴 안테나, 종단 급전 안테나(end fed antenna), 원편파 안테나(circularly polarized antenna), 마이크로스트립 안테나, 다이버시티 안테나, 이중 안테나, 안테나 어레이 등을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 실시예에서, 통신 매체는 입/출력(I/O) 어댑터를 사용하여 노드에 접속될 수 있다. I/O 어댑터는 바람직한 통신 프로토콜, 서비스 또는 작동 절차 세트를 이용하여 노드들 사이의 정보 신호를 제어하는 임의의 적합한 기술로 작동하도록 마련될 수 있다. I/O 어댑터는 대응하는 통신 매체와 I/O 어댑터를 접속하는 적합한 물리적 커넥터도 포함할 수 있다. I/O 어댑터의 예는 네트워크 인터페이 스, 네트워크 인터페이스 카드(NIC), 회선 카드, 디스크 제어기, 비디오 제어기, 오디오 제어기 등을 포함할 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 설명된 실시예는 매체 정보 및 제어 정보와 같은 하나 이상의 유형의 정보를 전달하도록 마련될 수 있다. 매체 정보는 일반적으로 영상 정보, 비디오 정보, 그래픽 정보, 오디오 정보, 음성 정보, 문자 정보, 숫자 정보, 문자숫자 심볼, 문자 심볼 등과 같은 사용자용 콘텐츠를 나타내는 임의의 데이터를 지칭할 수 있다. 제어 정보는 일반적으로 자동화 시스템용 커맨드, 인스트럭션 또는 제어 워드를 나타내는 임의의 데이터를 지칭할 수 있다. 예컨대, 제어 정보는 시스템을 통해 매체 정보를 라우팅하거나, 노드에 명령하여 특정 방식으로 매체 정보를 처리하는 데 사용될 수 있다. 매체 및 제어 정보는 다수의 서로 다른 장치 또는 네트워크로/로부터 전달될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
일부 구현에서, 정보는 WLAN에 대한 IEEE 802.11x(예컨대, 802.11a, b, g/h, j, n) 표준 및/또는 WMAN에 대한 802.16 표준을 포함하는 하나 이상의 IEEE 802 표준에 따라 전달될 수 있다. 정보는 하나 이상의 DVB-T(Digital Video Broadcasting Terrestrial) 방송 표준 및 HiperLAN(High performance radio Local Area Network) 표준에 따라 전달될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
다양한 구현에서, 설명된 실시예는 예컨대, 하나 이상의 IEEE 802 표준에 의해 정의되는 하나 이상의 패킷 프로토콜에 따라 정보를 전달하는 패킷 네트워크의 일부를 포함하거나 형성할 수 있다. 다양한 실시예에서, 패킷은 비동기 전송 모드(ATM:Asynchronous Transfer Mode) 프로토콜, 물리 계층 융합 프로토콜(PLCP:Physical Layer Convergence Protocol), 프레임 중계, 시스템 네트워크 아키텍처(SNA) 등을 이용하여 전달될 수 있다. 일부 구현에서, 패킷은 하나 이상의 IEEE 802 이더넷 표준에 의해 정의된 바와 같이, CSMA/CD(Carrier-Sense Multiple Access with Collision Detection)과 같은 매체 액세스 제어 프로토콜을 사용하여 전달될 수 있다. 일부 구현에서, 패킷은 TCP 및 IP, TCP/IP, X.25, HTTP, 사용자 데이터그램 프로토콜(UDP:User Datagram Protocol) 등과 같은 인터넷 프로토콜에 따라 전달될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
일부 실시예는 예컨대, 머신에 의해 실행될 때, 머신이 실시예에 따른 방법 및/또는 동작을 수행하게 할 수 있는 인스트럭션 또는 인스트럭션 세트를 저장할 수 있는 머신 판독가능 매체 또는 제조물을 사용하여 구현될 수 있다. 이러한 머신은 예컨대, 임의의 적합한 처리 플랫폼, 연산 플랫폼, 연산 장치, 처리 장치, 연산 시스템, 처리 시스템, 컴퓨터, 프로세서 등을 포함할 수 있고, 임의의 적합한 하드웨어 및/또는 소프트웨어의 조합을 사용하여 구현될 수 있다. 머신 판독가능 매체 또는 제조물은 예컨대, 임의의 적합한 유형의 메모리 유닛, 메모리 장치, 메모리 제조물, 메모리 매체, 저장 장치, 저장 제조물, 저장 매체 및/또는 저장 유닛, 예컨대, 메모리, 분리가능 또는 분리 불가능 매체, 소거가능 또는 소거 불가능 매체, 기록가능 또는 재기록가능 매체, 디지털 또는 아날로그 매체, 하드 디스크, 플로피 디스크, CD-ROM, CD-R, CD-RW, 광디스크, 자기 매체, 광자기 매체, 분리가 능 메모리 카드 또는 디스크, 다양한 유형의 DVD, 테이프, 카세트 등을 포함할 수 있다. 인스트럭션은 소스 코드, 컴파일 코드, 해석 코드, 실행 코드, 정적 코드, 동적 코드 등과 같은 임의의 적합한 코드 유형을 포함할 수 있다. 인스트럭션은 임의의 적합한 하이 레벨, 로우 레벨, 객체 지향, 비주얼, 컴파일 및/또는 해석 프로그래밍 언어를 사용하여 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
일부 실시예는 바람직한 연산율, 전력 레벨, 내열성, 처리 주기 버짓, 입력 데이터 레이트, 출력 데이터 레이트, 메모리 리소스, 데이터 버스 속도 및 다른 성능 제약과 같은 임의의 개수의 요인에 따라 변할 수 있다. 예컨대, 실시예는 범용 또는 특수용 프로세서에 의해 실행되는 소프트웨어를 사용하여 구현될 수 있다. 다른 예에서, 실시예는 회로, ASIC, PLD, DSP 등과 같은 전용 하드웨어로 구현될 수 있다. 또 다른 예에서, 실시예는 프로그래밍된 범용 컴퓨터 부품과 커스텀 하드웨어 부품의 임의의 조합에 의해 구현될 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
특별히 다른 방식으로 설명하지 않는 한, "처리", "연산", "계산", "결정" 등과 같은 용어는 연산 시스템의 레지스터 및/또는 메모리 내의 물리량(예컨대, 전자)으로서 나타내는 데이터를, 연산 시스템의 메모리, 레지스터 또는 다른 정보 저장, 전송 또는 디스플레이 장치 내의 물리량으로서 유사하게 나타내는 다른 데이터로 조작 및 변환하는 컴퓨터나 연산 시스템 또는 유사한 전자 연산 장치의 작동 및/또는 처리를 지칭함을 알 수 있다. 실시예는 이러한 측면으로 한정되지 않는다.
"일 실시예" 또는 "하나의 실시예"는 이 실시예에 관하여 설명된 특정 특징부, 구조 또는 특성이 적어도 하나의 실시예에 포함됨을 의미한다는 것에도 유의해야 한다. 본 명세서 곳곳에서 보이는 "일 실시예에서"가 반드시 동일한 실시예를 지칭하는 것은 아니다.
실시예의 특정 특징부는 본 명세서에 설명된 바와 같이 예시되었지만, 당업자는 다수의 변경, 대체, 수정, 균등화가 발생할 것임을 알 것이다. 따라서, 첨부되는 특허청구범위는 실시예의 진정한 사상 내에 포함되는 이러한 모든 변경 및 수정을 포함한다.

Claims (35)

  1. 매크로블록(a macroblock)의 다수의 블록에 대한 계수를 포함하는 매크로블록 데이터의 단일 인스트럭션 복수 데이터 처리(single instruction multiple data processing)를 수행하는 매체 처리 노드(a media processing node)를 포함하고,
    상기 매체 처리 노드는 상기 매크로블록 데이터로부터 상기 다수의 블록에 관련된 다수의 플래그 워드(flag words)를 생성하고 상기 플래그 워드로부터 병렬식으로 다수의 블록에 대한 실행 값(run values)을 결정하는 인코딩 모듈(an encoding module)을 포함하는
    장치.
  2. 제 1 항에 있어서,
    상기 계수는 상기 다수의 블록 각각에 대한 일련의 변환 양자화 스캐닝 계수(a sequence of transformed quantized scanned coefficients)를 포함하는
    장치.
  3. 제 1 항에 있어서,
    상기 인코딩 모듈은 플래그 레지스터(a flag register)에 상기 플래그 워드를 저장하는
    장치.
  4. 제 1 항에 있어서,
    상기 인코딩 모듈은 선행-0 검출(leading-zero detection)을 수행함으로써 상기 실행 값을 결정하는
    장치.
  5. 제 1 항에 있어서,
    상기 인코딩 모듈은 상기 실행 값에 기초하여 다수의 블록의 0이 아닌 계수들의 병렬 이동을 수행하는
    장치.
  6. 제 5 항에 있어서,
    상기 0이 아닌 계수는 다수의 블록의 레벨 값(level values)에 대응하는
    장치.
  7. 제 1 항에 있어서,
    상기 인코딩 모듈은 패킹 모듈(a packing module)로 코드 어레이를 출력하여 상기 매크로블록의 코드 열을 형성하는
    장치.
  8. 제 7 항에 있어서,
    상기 패킹 모듈은 상기 인코딩 모듈로부터 분리되고,
    상기 인코딩 모듈은 다수의 매크로블록의 멀티 스레드 처리를 수행하는
    장치.
  9. 통신 매체와,
    상기 통신 매체에 결합된 단일 인스트럭션 복수 데이터 처리 장치를 포함하되,
    상기 단일 인스트럭션 복수 데이터 처리 장치는,
    매크로블록의 다수의 블록에 대한 계수를 포함하는 매크로블록 데이터를 처리하며, 상기 매크로블록 데이터로부터 상기 다수의 블록에 관련된 다수의 플래그 워드를 생성하고 상기 플래그 워드로부터 병렬식으로 다수의 블록에 대한 실행 값을 결정하는 인코딩 모듈을 포함하는 매체 처리 노드를 구비하는
    시스템.
  10. 제 9 항에 있어서,
    상기 계수는 상기 다수의 블록 각각에 대한 일련의 변환 양자화 스캐닝 계수를 포함하는
    시스템.
  11. 제 9 항에 있어서,
    상기 인코딩 모듈은 플래그 레지스터에 상기 플래그 워드를 저장하는
    시스템.
  12. 제 9 항에 있어서,
    상기 인코딩 모듈은 선행-0 검출을 수행함으로써 상기 실행 값을 결정하는
    시스템.
  13. 제 9 항에 있어서,
    상기 인코딩 모듈은 상기 실행 값에 기초하여 다수의 블록의 0이 아닌 계수들의 병렬 이동을 수행하는
    시스템.
  14. 제 13 항에 있어서,
    상기 0이 아닌 계수는 다수의 블록의 레벨 값에 대응하는
    시스템.
  15. 제 9 항에 있어서,
    상기 인코딩 모듈은 패킹 모듈로 코드 어레이를 출력하여 상기 매크로블록의 코드 열을 형성하는
    시스템.
  16. 제 15 항에 있어서,
    상기 패킹 모듈은 상기 인코딩 모듈로부터 분할되고,
    상기 인코딩 모듈은 다수의 매크로블록의 멀티 스레드 처리를 수행하는
    시스템.
  17. 매크로블록의 다수의 블록에 대한 계수를 포함하는 매크로블록 데이터를 수신하는 단계와,
    상기 매크로블록 데이터로부터 상기 다수의 블록에 관련된 다수의 플래그 워드를 생성하고 상기 플래그 워드로부터 병렬식으로 다수의 블록에 대한 실행 값을 결정하는 것을 포함하는 상기 매크로블록 데이터의 단일 인스트럭션 복수 데이터 처리를 수행하는 단계를 포함하는
    방법.
  18. 제 17 항에 있어서,
    상기 계수는 상기 다수의 블록 각각에 대한 일련의 변환 양자화 스캐닝 계수를 포함하는
    방법.
  19. 제 17 항에 있어서,
    플래그 레지스터에 상기 플래그 워드를 저장하는 단계를 더 포함하는
    방법.
  20. 제 17 항에 있어서,
    선행-0 검출을 수행함으로써 상기 실행 값을 결정하는 단계를 더 포함하는
    방법.
  21. 제 17 항에 있어서,
    상기 실행 값에 기초하여 다수의 블록의 0이 아닌 계수들의 병렬 이동을 수행하는 단계를 더 포함하는
    방법.
  22. 제 21 항에 있어서,
    상기 0이 아닌 계수에 기초하여 다수의 블록의 레벨 값을 결정하는 단계를 더 포함하는
    방법.
  23. 제 17 항에 있어서,
    코드 어레이를 출력하여 상기 매크로블록의 코드 열을 형성하는 단계를 더 포함하는
    방법.
  24. 제 23 항에 있어서,
    다수의 매크로블록의 멀티 스레드 처리를 수행하는 단계를 더 포함하는
    방법.
  25. 인스트럭션을 포함하는 머신 판독가능 저장 매체를 포함하는 제조물에 있어서,
    상기 인스트럭션은 실행될 때 시스템으로 하여금,
    매크로블록의 다수의 블록에 대한 계수를 포함하는 매크로블록 데이터를 수신하게 하고,
    상기 매크로블록 데이터로부터 상기 다수의 블록에 관련된 다수의 플래그 워드를 생성하고 상기 플래그 워드로부터 병렬식으로 다수의 블록에 대한 실행 값을 결정하는 것을 포함하는 상기 매크로블록 데이터의 단일 인스트럭션 복수 데이터 처리를 수행하게 하는
    제조물.
  26. 제 25 항에 있어서,
    상기 계수는 상기 다수의 블록 각각에 대한 일련의 변환 양자화 스캐닝 계수를 포함하는
    제조물.
  27. 제 25 항에 있어서,
    실행될 때 상기 시스템으로 하여금 플래그 레지스터에 상기 플래그 워드를 저장하게 하는 인스트럭션을 더 포함하는
    제조물.
  28. 제 25 항에 있어서,
    실행될 때 상기 시스템으로 하여금 선행-0 검출을 수행함으로써 상기 실행 값을 결정하게 하는 인스트럭션을 더 포함하는
    제조물.
  29. 제 25 항에 있어서,
    실행될 때 상기 시스템으로 하여금 상기 실행 값에 기초하여 다수의 블록의 0이 아닌 계수들의 병렬 이동을 수행하게 하는 인스트럭션을 더 포함하는
    제조물.
  30. 제 29 항에 있어서,
    실행될 때 상기 시스템으로 하여금 상기 0이 아닌 계수에 기초하여 다수의 블록의 레벨 값을 결정하게 하는 인스트럭션을 더 포함하는
    제조물.
  31. 제 25 항에 있어서,
    실행될 때 상기 시스템으로 하여금 코드 어레이를 출력하여 상기 매크로블록의 코드 열을 형성하게 하는 인스트럭션을 더 포함하는
    제조물.
  32. 제 25 항에 있어서,
    실행될 때 상기 시스템으로 하여금 다수의 매크로블록의 멀티 스레드 처리를 수행하게 하는 인스트럭션을 더 포함하는
    제조물.
  33. 매크로블록 데이터를 수신하는 단계와,
    병행 움직임 추정 동작, 인코딩 동작 및 재구성 동작을 포함하는 상기 매크로블록 데이터의 병렬 멀티 스레드 처리를 수행하는 단계를 포함하되, 상기 인코딩 동작은 상기 재구성 동작으로부터 함수 및 데이터 영역 분할되어 스레드 레벨 병렬 계산을 달성하는
    방법.
  34. 제 33 항에 있어서,
    멀티 스레드 처리는 가변 길이 인코딩 동작(variable length encoding operation)을 포함하는
    방법.
  35. 제 33 항에 있어서,
    멀티 스레드 처리는 비트스트림 패킹 동작(bitstream packing operation)을 포함하는
    방법.
KR1020077026578A 2005-05-16 2006-05-02 멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및제조물 KR101220724B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/131,158 2005-05-16
US11/131,158 US20060256854A1 (en) 2005-05-16 2005-05-16 Parallel execution of media encoding using multi-threaded single instruction multiple data processing
PCT/US2006/017047 WO2006124299A2 (en) 2005-05-16 2006-05-02 Parallel execution of media encoding using multi-threaded single instruction multiple data processing

Publications (2)

Publication Number Publication Date
KR20080011193A true KR20080011193A (ko) 2008-01-31
KR101220724B1 KR101220724B1 (ko) 2013-01-09

Family

ID=37112137

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077026578A KR101220724B1 (ko) 2005-05-16 2006-05-02 멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및제조물

Country Status (7)

Country Link
US (1) US20060256854A1 (ko)
EP (1) EP1883885A2 (ko)
JP (1) JP4920034B2 (ko)
KR (1) KR101220724B1 (ko)
CN (1) CN101176089B (ko)
TW (1) TWI365668B (ko)
WO (1) WO2006124299A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101531455B1 (ko) * 2010-12-25 2015-06-25 인텔 코포레이션 하드웨어 및 소프트웨어 시스템이 자동으로 프로그램을 복수의 병렬 스레드들로 분해하는 시스템들, 장치들, 및 방법들

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070086528A1 (en) * 2005-10-18 2007-04-19 Mauchly J W Video encoder with multiple processors
US7778822B2 (en) * 2006-05-19 2010-08-17 Sony Ericsson Mobile Communications Ab Allocating audio processing among a plurality of processing units with a global synchronization pulse
US20080031333A1 (en) * 2006-08-02 2008-02-07 Xinghai Billy Li Motion compensation module and methods for use therewith
US9094686B2 (en) * 2006-09-06 2015-07-28 Broadcom Corporation Systems and methods for faster throughput for compressed video data decoding
US8213509B2 (en) * 2006-10-06 2012-07-03 Calos Fund Limited Liability Company Video coding on parallel processing systems
JP2010515336A (ja) * 2006-12-27 2010-05-06 インテル コーポレイション ビデオ情報をデコード及びエンコードする方法及び装置
KR20080086766A (ko) * 2007-03-23 2008-09-26 삼성전자주식회사 픽셀 단위의 컨텍스트 모델을 이용한 영상의 부호화,복호화 방법 및 장치
US8213511B2 (en) * 2007-04-30 2012-07-03 Texas Instruments Incorporated Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction
US8305387B2 (en) * 2007-09-07 2012-11-06 Texas Instruments Incorporated Adaptive pulse-width modulated sequences for sequential color display systems
WO2009142021A1 (ja) * 2008-05-23 2009-11-26 パナソニック株式会社 画像復号化装置、画像復号化方法、画像符号化装置、及び画像符号化方法
CN101593095B (zh) 2008-05-28 2013-03-13 国际商业机器公司 基于流水级的数据处理方法和系统
US8933953B2 (en) * 2008-06-30 2015-01-13 Intel Corporation Managing active thread dependencies in graphics processing
JP5774995B2 (ja) * 2008-11-13 2015-09-09 トムソン ライセンシングThomson Licensing Gopマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化
US20100225655A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Concurrent Encoding/Decoding of Tiled Data
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management
US8638337B2 (en) 2009-03-16 2014-01-28 Microsoft Corporation Image frame buffer management
CN102461173B (zh) * 2009-06-09 2015-09-09 汤姆森特许公司 解码装置、解码方法以及编辑装置
US8917769B2 (en) * 2009-07-03 2014-12-23 Intel Corporation Methods and systems to estimate motion based on reconstructed reference frames at a video decoder
US9654792B2 (en) 2009-07-03 2017-05-16 Intel Corporation Methods and systems for motion vector derivation at a video decoder
US8327119B2 (en) * 2009-07-15 2012-12-04 Via Technologies, Inc. Apparatus and method for executing fast bit scan forward/reverse (BSR/BSF) instructions
EP2534643A4 (en) * 2010-02-11 2016-01-06 Nokia Technologies Oy METHOD AND APPARATUS FOR PROVIDING MULTIFIL VIDEO DECODING
US9497472B2 (en) 2010-11-16 2016-11-15 Qualcomm Incorporated Parallel context calculation in video coding
US20120163456A1 (en) 2010-12-22 2012-06-28 Qualcomm Incorporated Using a most probable scanning order to efficiently code scanning order information for a video block in video coding
US9049444B2 (en) 2010-12-22 2015-06-02 Qualcomm Incorporated Mode dependent scanning of coefficients of a block of video data
US20120236940A1 (en) * 2011-03-16 2012-09-20 Texas Instruments Incorporated Method for Efficient Parallel Processing for Real-Time Video Coding
US9014111B2 (en) * 2011-08-10 2015-04-21 Industrial Technology Research Institute Multi-block radio access method and transmitter module and receiver module using the same
JP5905582B2 (ja) * 2011-09-30 2016-04-20 インテル コーポレイション ビデオ符号化パイプラインのためのシステム、方法及びコンピュータプログラム
WO2013077884A1 (en) * 2011-11-25 2013-05-30 Intel Corporation Instruction and logic to provide conversions between a mask register and a general purpose register or memory
KR101886333B1 (ko) * 2012-06-15 2018-08-09 삼성전자 주식회사 멀티 코어를 이용한 영역 성장 장치 및 방법
US9374592B2 (en) * 2012-09-08 2016-06-21 Texas Instruments Incorporated Mode estimation in pipelined architectures
US20140072027A1 (en) 2012-09-12 2014-03-13 Ati Technologies Ulc System for video compression
CN102917216A (zh) * 2012-10-16 2013-02-06 深圳市融创天下科技股份有限公司 一种运动搜索的方法、系统和终端设备
KR101978178B1 (ko) * 2013-05-24 2019-05-15 삼성전자주식회사 초음파 데이터를 처리하는 데이터 처리 장치 및 방법
CN104795073A (zh) * 2015-03-26 2015-07-22 无锡天脉聚源传媒科技有限公司 一种音频数据的处理方法及装置
CN104869398B (zh) * 2015-05-21 2017-08-22 大连理工大学 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法
CN107547896B (zh) * 2016-06-27 2020-10-09 杭州当虹科技股份有限公司 一种基于CUDA的Prores VLC编码方法
CN106791861B (zh) * 2016-12-20 2020-04-07 杭州当虹科技股份有限公司 一种基于CUDA架构的DNxHD VLC编码方法
US20220394284A1 (en) * 2021-06-07 2022-12-08 Sony Interactive Entertainment Inc. Multi-threaded cabac decoding

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5289577A (en) * 1992-06-04 1994-02-22 International Business Machines Incorporated Process-pipeline architecture for image/video processing
US5715009A (en) * 1994-03-29 1998-02-03 Sony Corporation Picture signal transmitting method and apparatus
JP3474005B2 (ja) * 1994-10-13 2003-12-08 沖電気工業株式会社 動画像符号化方法及び動画像復号方法
JPH1056641A (ja) * 1996-08-09 1998-02-24 Sharp Corp Mpegデコーダ
KR100262453B1 (ko) * 1996-08-19 2000-08-01 윤종용 비디오데이터처리방법및장치
US6061711A (en) * 1996-08-19 2000-05-09 Samsung Electronics, Inc. Efficient context saving and restoring in a multi-tasking computing system environment
US6192073B1 (en) * 1996-08-19 2001-02-20 Samsung Electronics Co., Ltd. Methods and apparatus for processing video data
JP3555729B2 (ja) * 1997-04-22 2004-08-18 日本ビクター株式会社 可変長符号化データの処理方法及び装置
US6304197B1 (en) * 2000-03-14 2001-10-16 Robert Allen Freking Concurrent method for parallel Huffman compression coding and other variable length encoding and decoding
JP2002159007A (ja) * 2000-11-17 2002-05-31 Fujitsu Ltd Mpeg復号装置
US6757439B2 (en) * 2000-12-15 2004-06-29 International Business Machines Corporation JPEG packed block structure
KR100399932B1 (ko) * 2001-05-07 2003-09-29 주식회사 하이닉스반도체 메모리의 양을 감소시키기 위한 비디오 프레임의압축/역압축 하드웨어 시스템
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
JP3857614B2 (ja) * 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
KR100585710B1 (ko) * 2002-08-24 2006-06-02 엘지전자 주식회사 가변길이 동영상 부호화 방법
JP3688255B2 (ja) * 2002-09-20 2005-08-24 株式会社日立製作所 車載用電波レーダ装置及びその信号処理方法
US6931061B2 (en) * 2002-11-13 2005-08-16 Sony Corporation Method of real time MPEG-4 texture decoding for a multiprocessor environment
JP4101034B2 (ja) * 2002-11-14 2008-06-11 松下電器産業株式会社 符号化装置及び方法
US7126991B1 (en) * 2003-02-03 2006-10-24 Tibet MIMAR Method for programmable motion estimation in a SIMD processor
US7254272B2 (en) * 2003-08-21 2007-08-07 International Business Machines Corporation Browsing JPEG images using MPEG hardware chips
US7379608B2 (en) * 2003-12-04 2008-05-27 Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung, E.V. Arithmetic coding for transforming video and picture data units
US8082419B2 (en) * 2004-03-30 2011-12-20 Intel Corporation Residual addition for video software techniques
US20050289329A1 (en) * 2004-06-29 2005-12-29 Dwyer Michael K Conditional instruction for a single instruction, multiple data execution engine
US7653132B2 (en) * 2004-12-21 2010-01-26 Stmicroelectronics, Inc. Method and system for fast implementation of subpixel interpolation
US20060209965A1 (en) * 2005-03-17 2006-09-21 Hsien-Chih Tseng Method and system for fast run-level encoding

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101531455B1 (ko) * 2010-12-25 2015-06-25 인텔 코포레이션 하드웨어 및 소프트웨어 시스템이 자동으로 프로그램을 복수의 병렬 스레드들로 분해하는 시스템들, 장치들, 및 방법들

Also Published As

Publication number Publication date
JP4920034B2 (ja) 2012-04-18
CN101176089B (zh) 2011-03-02
WO2006124299A3 (en) 2007-06-28
CN101176089A (zh) 2008-05-07
TW200708115A (en) 2007-02-16
TWI365668B (en) 2012-06-01
US20060256854A1 (en) 2006-11-16
EP1883885A2 (en) 2008-02-06
KR101220724B1 (ko) 2013-01-09
WO2006124299A2 (en) 2006-11-23
JP2008541663A (ja) 2008-11-20

Similar Documents

Publication Publication Date Title
KR101220724B1 (ko) 멀티 스레드 단일 인스트럭션 복수 데이터 처리를 이용하는매체 인코딩의 병렬 실행을 위한 장치, 시스템, 방법 및제조물
US7932843B2 (en) Parallel CABAC decoding for video decompression
JP6193446B2 (ja) ビデオコード化における係数の走査
JP4699685B2 (ja) 信号処理装置及びそれを用いた電子機器
CN102158708B (zh) 二进制算术视频编码的再归一化
Lee et al. A new frame recompression algorithm integrated with H. 264 video compression
JP2009544225A (ja) ビデオ圧縮用並列処理装置
ITVI20100175A1 (it) Sistema per la codifica entropica di video h.264 per applicazioni hdtv in tempo reale
US20210044799A1 (en) Adaptive resolution change in video processing
CN116830576A (zh) 视频编解码中用于帧内预测的参考像素上采样
US20090304078A1 (en) Variable length decoder and animation decoder therewith
US8879629B2 (en) Method and system for intra-mode selection without using reconstructed data
EP3369250A1 (en) Parallel arithmetic coding techniques
WO2020114356A1 (zh) 帧间预测方法和相关装置
US8189672B2 (en) Method for interpolating chrominance signal in video encoder and decoder
CA3103654A1 (en) Method and apparatus for intra prediction
US11509940B1 (en) Video apparatus with reduced artifact and memory storage for improved motion estimation
Wei et al. H. 264-based multiple description video coder and its DSP implementation
Oh et al. Design of High‐Speed CAVLC Decoder Architecture for H. 264/AVC
JP5655100B2 (ja) 画像音声信号処理装置及びそれを用いた電子機器
Wu et al. A real-time H. 264 video streaming system on DSP/PC platform
Pastuszak Video Compression from the Hardware Perspective
Guarisco et al. An efficient VLSI implementation of H. 264/AVC intra-frame transcoder
JP2010055629A (ja) 画像音声信号処理装置及びそれを用いた電子機器

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B601 Maintenance of original decision after re-examination before a trial
S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160104

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170102

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee