KR100917067B1 - 비디오 처리 - Google Patents

비디오 처리 Download PDF

Info

Publication number
KR100917067B1
KR100917067B1 KR1020087020189A KR20087020189A KR100917067B1 KR 100917067 B1 KR100917067 B1 KR 100917067B1 KR 1020087020189 A KR1020087020189 A KR 1020087020189A KR 20087020189 A KR20087020189 A KR 20087020189A KR 100917067 B1 KR100917067 B1 KR 100917067B1
Authority
KR
South Korea
Prior art keywords
execution unit
vector
scalar
memory
tiles
Prior art date
Application number
KR1020087020189A
Other languages
English (en)
Other versions
KR20080080419A (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
Priority claimed from US11/267,599 external-priority patent/US8416251B2/en
Application filed by 엔비디아 코포레이션 filed Critical 엔비디아 코포레이션
Publication of KR20080080419A publication Critical patent/KR20080080419A/ko
Application granted granted Critical
Publication of KR100917067B1 publication Critical patent/KR100917067B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • 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
    • 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/423Methods 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 characterised by memory arrangements
    • 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/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Image Analysis (AREA)

Abstract

비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 설명된다. 스칼라 및 벡터 컴포넌트를 구비한 비디오 프로세서, 비디오 프로세서에서의 스트림 처리, 및 비디오 프로세서에서의 다차원 데이터 경로 처리도 설명된다.
비디오 처리, 지연 감내 시스템, 스칼라 컴포넌트, 벡터 컴포넌트, 스트림

Description

비디오 처리{VIDEO PROCESSING}
본 발명은 디지털 전자 컴퓨터 시스템에 관한 것이다. 구체적으로는, 본 발명은 컴퓨터 시스템 상에서 비디오 정보를 효율적으로 처리하기 위한 시스템에 관한 것이다. 일 양태에서는, 비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 기술된다. 다른 양태에서는, 비디오 프로세서에서의 스트림 처리가 기술된다. 또한, 비디오 프로세서에서의 다차원 데이터 경로 처리가 기술된다. 스칼라 및 벡터 컴포넌트들을 구비한 비디오 프로세서도 기술된다.
본 출원은 "비디오 처리 방법 및 시스템(A METHOD AND SYSTEM FOR VIDEO PROCESSING)"라는 명칭으로 가드레(Gadre) 등에 의해 2004년 11월 15일자로 출원된 미국 가출원 번호 제60/628,414호의 35 U.S.C. Section 119(e) 하의 이익을 청구하며, 이 가출원의 전체 내용은 본 명세서에 포함되어 있다.
이미지 및 풀-모션 비디오의 디스플레이는 최근에 크게 발전하고 있는 전자 산업의 한 영역이다. 고품질 비디오, 특히 고선명도 디지털 비디오의 디스플레이 및 렌더링은 현대 비디오 기술 애플리케이션 및 장치의 주 목표이다. 비디오 기술은 셀룰러 전화, 개인용 비디오 레코더, 디지털 비디오 프로젝터, 고선명도 텔레비 젼 등의 다양한 제품에 이용된다. 고선명 비디오 생성 및 디스플레이가 가능한 장치들의 출현 및 성장 보급은 고도의 혁신 및 진보를 겪는 전자 산업의 한 영역이다.
많은 소비자 전자 타입 및 전문가 레벨 장치들로 보급되는 비디오 기술은 디스플레이를 위해 비디오 신호를 포맷 및/또는 향상시키기 위하여 하나 이상의 비디오 프로세서에 의존한다. 이것은 특히 디지털 비디오 애플리케이션에 대해 사실이다. 예를 들어, 하나 이상의 비디오 프로세서는 일반적인 셋톱 박스 내에 포함되고, HDTV 방송 신호를 디스플레이에 의해 이용 가능한 비디오 신호로 변환하는 데 이용된다. 이러한 변환은 예를 들어 비디오 신호가 트루 16x9(예를 들어, 와이드 스크린) 디스플레이 상의 적절한 디스플레이를 위해 비(non-) 16x9 비디오 이미지로부터 변환되는 스케일링을 포함한다. 하나 이상의 비디오 프로세서는, 비디오 신호가 홀수 및 짝수 스캔 라인들이 개별적으로 디스플레이되는 인터레이스 포맷에서 전체 프레임이 단일 스위프 내에 묘화되는 진행 포맷으로 변환되는 스캔 변환을 수행하는 데 이용될 수 있다.
비디오 프로세서 애플리케이션의 추가 예는 예를 들어 비디오 신호가 압축 포맷(예를 들어, MPEG-2)으로 수신되고 디스플레이를 위해 압축 해제되고 포맷되는 신호 압축 해제를 포함한다. 또 하나의 예는 리인터레이싱 스캔 변환(re-interlacing scan conversion)인데, 이는 수신 디지털 비디오 신호를 DVI(Digital Visual Interface) 포맷에서 시장에 설치된 많은 수의 구식 텔레비젼 디스플레이와 호환 가능한 합성 비디오 포맷으로 변환하는 것을 포함한다.
보다 세련된 사용자들은 예를 들어 루프내/루프외 디블록킹 필터, 개량된 모션 적응 디인터레이싱, 인코딩 동작을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 서브-픽처 합성, 및 칼라 공간 변환, 조정, 픽셀 포인트 조작(예를 들어, 샤프닝, 히스토그램 조정 등) 및 다양한 비디오 표면 포맷 변환 지원 동작과 같은 프로세서-증폭기 동작들과 같은 보다 정교한 비디오 프로세서 기능들을 필요로 한다.
이러한 정교한 비디오 프로세서 기능을 제공하는 것과 관련된 문제는 이러한 기능을 구현하기에 충분히 강력한 아키텍처를 가진 비디오 프로세서가 많은 타입의 장치에 포함되기에는 과도하게 비용이 많이 들 수 있다는 것이다. 비디오 처리 기능이 더 정교할수록, 이러한 기능을 구현하는 데 필요한 집적 회로는 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등의 면에서 더 비용이 증가할 것이다.
따라서, 종래의 시스템 설계자들은 비디오 프로세서 성능과 비용에 관련하여 절충점을 찾아야만 했다. 수용 가능한 비용/성능 비를 갖는 것으로 널리 간주되는 종래의 비디오 프로세서는 종종 지연 제한(예를 들어, 비디오 떨림 또는 비디오 처리 애플리케이션의 기능 정지를 방지하기 위해) 및 연산 밀도(예를 들어, 다이(die) 제곱 밀리미터당 프로세서 연산 횟수) 면에서 거의 충분하지 못했었다. 더욱이, 종래의 비디오 프로세서들은 일반적으로, 비디오 장치가 다수의 비디오 스트림을 처리(예를 들어, 다수의 수신 스트림 및 발신 디스플레이 스트림의 동시 처리)할 것으로 예상되는 경우에서와 같이 선형 스케일링 성능 요건에 적합하지 않다.
따라서, 종래 기술의 한계를 극복하는 새로운 비디오 프로세서 시스템이 필요하다. 새로운 비디오 프로세서 시스템은 더욱 세련된 사용자들에 의해 기대되는 정교한 비디오 프로세서 기능들을 처리하기 위해 스케일링이 가능해야 하고, 높은 연산 밀도를 가져야 한다.
본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새로운 비디오 프로세서 시스템을 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위해 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다.
일 실시예에서는, 비디오 프로세서에서 비디오 처리 동작들을 실행하기 위한 지연 감내 시스템이 구현된다. 이 시스템은 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스, 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 호스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작하는 것을 가능하게 하기 위한 커맨드 FIFO가 포함된다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고, 벡터 실행 유닛에 대한 데이터 및 명령을 데이터 저장 메모리 및 명령 캐시에 로딩하기 위한 DMA 엔진이 메모리 인터페이스 내에 구축된다.
일 실시예에서, 벡터 실행 유닛은 요구 구동 기반으로 동작하기 위해 커맨드 FIFO를 액세스함으로써 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성된다. 요구 구동 기반은 상이한 메모리 위치들(예를 들어, 프레임 버퍼 메모리, 시스템 메모리, 캐시 메모리 등)에서 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전 달의 지연을 숨기도록 구성될 수 있다. 커맨드 FIFO는 벡터 실행 유닛의 기능 정지를 방지하기 위한 파이프라인 FIFO일 수 있다.
일 실시예에서, 본 발명은 비디오 처리 동작을 실행하기 위한 비디오 프로세서로서 구현된다. 비디오 프로세서는 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스를 포함한다. 비디오 프로세서는 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스를 포함한다. 스칼라 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다. 비디오 프로세서는 독립형 비디오 프로세서 집적 회로이거나, GPU 집적 회로 내에 집적된 컴포넌트일 수 있다.
일 실시예에서, 스칼라 실행 유닛은 비디오 프로세서의 제어기로서 기능하여, 벡터 실행 유닛의 동작을 제어한다. 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성될 수 있고, 벡터 실행 유닛은 애플리케이션의 픽셀 처리 동작을 실행하도록 구성될 수 있다. 스칼라 실행 유닛과 벡터 실행 유닛을 인터페이스하기 위한 벡터 인터페이스 유닛이 비디오 프로세서 내에 포함될 수 있다. 일 실시예에서, 스칼라 실행 유닛 및 벡터 실행 유닛은 비동기적으로 동작하도록 구성된다. 스칼라 실행 유닛은 제1 클럭 주파수로 실행할 수 있고, 벡터 실행 유닛은 상이한 클럭 주파수(예를 들어, 더 빠르거나, 더 느린 등)로 실행할 수 있다. 벡터 실행 유닛은 스칼라 실행 유닛의 제어하에 요구 구동 기반으로 동 작할 수 있다.
일 실시예에서, 본 발명은 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템으로서 구현된다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리가 포함된다. 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 가진 복수의 타일을 포함한다. 뱅크 데이터 구조들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다.
특정 구성의 요건에 따라, 뱅크 데이터 구조들 각각은 복수의 타일(예를 들어, 4x4, 8x8, 8x16, 16x24 등)을 포함할 수 있다. 일 실시예에서, 뱅크들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 이것은 단일 액세스가 2개의 인접 뱅크로부터 타일들의 행(row) 또는 열(column)을 검색하는 것을 가능하게 한다. 일 실시예에서, 복수의 뱅크 데이터 구조의 타일들(예를 들어, 행, 열, 블록 등)을 액세스하기 위한 구성을 선택하기 위해 크로스바가 사용된다. 크로스바에 의해 액세스되는 뱅크들의 타일들을 수신하고 타일들을 클럭 단위로 벡터 데이터 경로의 프론트 엔드에 제공하기 위한 콜렉터가 포함될 수 있다.
일 실시예에서, 본 발명은 비디오 프로세서용의 스트림 기반 메모리 액세스 시스템으로서 구현된다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저 장하기 위한 프레임 버퍼 메모리가 포함된다. 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 프레임 버퍼 메모리는 복수의 타일을 포함한다. 메모리 인터페이스는 스칼라 실행 유닛에 대한 제1 순차적 타일 액세스의 제1 스트림을 구현하고, 벡터 실행 유닛에 대한 제2 순차적 타일 액세스의 제2 스트림을 구현한다.
일 실시예에서, 제1 스트림 및 제2 스트림은 발원 메모리 위치(예를 들어, 프레임 버퍼 메모리, 시스템 메모리 등)로부터의 액세스 지연을 숨기는 방식으로 프리페치되는 일련의 순차적 프리페치 타일들을 포함한다. 일 실시예에서, 메모리 인터페이스는 복수의 상이한 발원 위치로부터의 그리고 복수의 상이한 종료 위치로의 복수의 상이한 스트림을 관리하도록 구성된다. 일 실시예에서, 메모리 인터페이스 내에 구축된 DMA 엔진이 다수의 스트림을 지원하기 위해 복수의 메모리 판독 및 복수의 메모리 기입을 구현하는 데 사용된다.
대체로, 본 발명은 적어도 다음 4개의 방법을 개시한다.
A) 본 명세서에 광범위하게 교시되는 방법은 비디오 처리 동작을 실행하기 위한 비디오 프로세서에서의 다차원 데이터 경로 처리 시스템의 방법으로서, 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 데이터 저장 메모리를 이용하여 벡터 실행 유닛에 대한 데이터를 저장하는 단계를 포함하고, 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하고, 뱅크 데이터 구조들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 또한, 상기 A 방법은 4x4 패턴으로 배열된 복수의 타일을 포함하는 뱅크 데이터 구조들 각각을 포함한다. 또한, 상기 A 방법은 8x8, 8x16 또는 16x24 패턴으로 배열된 복수의 타일을 포함하는 뱅크 데이터 구조들 각각을 포함한다. 또한, 상기 A 방법은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성된 뱅크 데이터 구조들을 포함하고, 적어도 하나의 액세스는 2개의 뱅크 데이터 구조의 타일들의 행을 포함하는 2개의 인접한 뱅크 데이터 구조에 대한 것이다. 상기 A 방법은 또한 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성된 타일들을 포함하며, 적어도 하나의 액세스는 2개의 인접 뱅크 데이터 구조의 타일들의 열을 포함하는 2개의 인접 뱅크 데이터 구조에 대한 것이다. 또한, 상기 A 방법은 데이터 저장 메모리에 연결된 크로스바를 이용하여 복수의 뱅크 데이터 구조의 타일들을 액세스하기 위한 구성을 선택하는 단계를 포함한다. 이 선택 단계에서, 크로스바는 클럭 단위로 벡터 데이터 경로에 데이터를 제공하기 위해 복수의 뱅크 데이터 구조의 타일들을 액세스한다. 또한, 콜렉터를 이용하여 크로스바에 의해 액세스되는 복수의 뱅크 데이터 구조의 타일들을 수신하는 단계, 및 클럭 단위로 벡터 데이터 경로의 프론트 엔드에 타일들을 제공하는 단계를 포함한다.
B) 본 명세서에서 광범위하게 교시되는 방법은 또한 비디오 처리 동작을 실행하기 위한 방법으로서, 컴퓨터 판독 가능 코드를 실행하는 컴퓨터 시스템의 비디오 프로세서를 이용하여 구현되며, 호스트 인터페이스를 이용하여 비디오 프로세서와 호스트 CPU 간의 통신을 설정하는 단계; 메모리 인터페이스를 이용하여 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 설정하는 단계; 호스트 인터페이스 및 메모리 인터페이스에 연결된 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 및 호스트 인터페이스 및 메모리 인터페이스에 연결된 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계를 포함한다. 상기 B 방법은 비디오 프로세서의 제어기로서 기능하여 벡터 실행 유닛의 동작을 제어하는 스칼라 실행 유닛을 더 포함한다. 상기 B 방법은 스칼라 실행 유닛과 벡터 실행 유닛을 인터페이스하기 위한 벡터 인터페이스 유닛을 더 포함한다. 상기 B 방법은 비동기적으로 동작하도록 구성된 스칼라 실행 유닛 및 벡터 실행 유닛을 더 포함한다. 또한, 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 벡터 실행 유닛은 제2 클럭 주파수로 실행한다. 상기 B 방법은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성된 스칼라 실행 유닛 및 애플리케이션의 픽셀 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 또한, 벡터 실행 유닛은 스칼라 실행 유닛의 제어하에 요구 구동 기반으로 동작하도록 구성된다. 또한, 스칼라 실행 유닛은 메모리 커맨드 FIFO를 이용하여 벡터 실행 유닛에 기능 호출들을 전송하도록 구성되며, 벡터 실행 유닛은 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작한다. 또한, 비디오 프로세서의 비동기 동작은 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성된다. 마지막으로, 상기 B 방법은 VLIW(very long instruction word) 코드를 이용하여 동작하도록 구성된 스칼라 실행 유닛을 포함한다.
C) 본 명세서에 설명되는 방법은 또한 비디오 처리 동작을 실행하기 위한 비 디오 프로세서에서의 스트림 기반 메모리 액세스를 위한 방법을 광범위하게 교시하고 있는데, 이 방법은 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 프레임 버퍼 메모리를 이용하여 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저장하는 단계; 및 메모리 인터페이스를 이용하여 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 구현하는 단계를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 벡터 실행 유닛 또는 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현한다. 상기 C 방법은 또한 적어도 하나의 프리페치 타일을 포함하는 제1 스트림 및 제2 스트림을 갖는다. 상기 C 방법은 프레임 버퍼 메모리 내의 제1 위치로부터 발원되는 제1 스트림, 및 프레임 버퍼 메모리의 제2 위치로부터 발원되는 제2 스트림을 더 포함한다. 상기 C 방법은 복수의 상이한 발원 위치로부터의 그리고 복수의 상이한 종료 위치로의 복수의 스트림을 관리하도록 구성된 메모리 인터페이스를 더 포함한다. 이와 관련하여, 발원 위치들 중 적어도 하나 또는 종료 위치들 중 적어도 하나는 시스템 메모리 내에 있다. 상기 C 방법은 메모리 인터페이스 내에 구축된 DMA 엔진을 이용하여 제1 스트림 및 제2 스트림을 지원하기 위해 복수의 메모리 판독을 구현하고, 제1 스트림 및 제2 스트림을 지원하기 위해 복수의 메모리 기입을 구현하는 단계를 더 포함한다. 또한, 상기 C 방법은 제2 스트림보다 높은 양의 지연을 경험하는 제1 스트림을 포함하고, 제1 스트림은 제2 스트림보다 많은 수의 타 일 저장용 버퍼를 포함한다. 상기 C 방법은 또한 제1 스트림 또는 제2 스트림의 지연을 보상하기 위하여 제1 스트림 또는 제2 스트림의 조정 가능한 수의 타일들을 프리페치하도록 구성된 메모리 인터페이스를 포함한다.
D) 본 명세서에 설명되는 방법은 또한 지연 감내 비디오 처리 동작을 위한 방법을 광범위하게 포함하는데, 이 방법은 호스트 인터페이스를 이용하여 비디오 프로세서와 호스트 CPU 간의 통신을 구현하는 단계; 호스트 인터페이스에 연결된 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 호스트 인터페이스에 연결된 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작할 수 있게 하는 단계; 메모리 인터페이스를 이용하여 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하는 단계; 및 메모리 인터페이스 내에 구축되고 벡터 실행 유닛에 대한 데이터 및 명령을 데이터 저장 메모리 및 명령 캐시에 로딩하도록 구성된 DMA 엔진을 이용하여 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하는 단계를 포함한다. 상기 D 방법은 요구 구동 기반으로 동작하기 위하여 커맨드 FIFO를 액세스함으로써 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성된 벡터 실행 유닛을 더 포함한다. 상기 D 방법은 상이한 메모리 위치들에서 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성된 요구 구동 기반을 더 포함한다. 또한, 상기 D 방법은 알고리즘 흐름 제어 처리를 구현하도록 구성된 스칼라 실행 유닛을 포함하고, 벡터 실행 유닛은 비디오 처리 작업 부하의 대부분을 구현하도록 구성된다. 이와 관련하여, 스칼라 실행 유닛은 데 이터 전달 지연을 숨기기 위하여 벡터 실행 유닛에 대한 작업 파라미터를 사전 계산하도록 구성된다. 상기 D 방법은 벡터 서브 루틴의 후속 실행을 위한 커맨드를 프리페치하기 위해 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성된 벡터 실행 유닛을 포함한다. 여기서, 메모리 판독은 스칼라 실행 유닛에 의한 벡터 서브 루틴의 호출 이전에 벡터 서브 루틴의 실행을 위한 커맨드를 프리페치하도록 스케쥴링된다.
본 발명의 또다른 특징에 따르면, 제1 양태는, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 및 상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리를 포함하고, 상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하고, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성되는 시스템이다.
본 발명의 제2 양태는, 제1 양태에 있어서, 상기 시스템은 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템이다.
본 발명의 제3 양태는, 비디오 처리 동작을 지원하기 위한 다차원 데이터 경로 처리용 시스템으로서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 및 상기 마더보드 및 상기 CPU에 연결되고, 제1항의 시스템을 포함하는 비디오 프로세서를 포함하는 시스템이다.
본 발명의 제4 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들 각각은 4x4 패턴으로 배열된 복수의 타일을 포함한다.
본 발명의 제5 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들 각각은 8x8 또는 8x16 또는 16x24 패턴으로 배열된 복수의 타일을 포함한다.
본 발명의 제6 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 상기 뱅크 데이터 구조들의 타일들의 행을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것이다.
본 발명의 제7 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 타일들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 인접한 상기 뱅크 데이터 구조들의 타일들의 열을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것이다.
본 발명의 제8 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 데이터 저장 메모리에 연결되고, 상기 복수의 뱅크 데이터 구조의 타일들을 액세스하기 위한 구성을 선택하기 위한 크로스바를 더 포함한다.
본 발명의 제9 양태는, 제8 양태에 있어서, 상기 크로스바는 데이터를 벡터 데이터 경로에 클럭 단위 기반으로 제공하기 위해 상기 복수의 뱅크 데이터 구조의 타일들을 액세스한다.
본 발명의 제10 양태는, 제9 양태에 있어서, 상기 크로스바에 의해 액세스되는 상기 복수의 뱅크 데이터 구조의 타일들을 수신하고, 상기 타일들을 벡터 데이터 경로의 프론트 엔드에 클럭 단위 기반으로 제공하는 콜렉터를 더 포함한다.
본 발명의 제11 양태는, 비디오 처리 동작을 실행하기 위한 비디오 프로세서로서, 상기 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스; 상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 및 상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함하는 비디오 프로세서이다.
본 발명의 제12 양태는, 비디오 처리 동작을 실행하기 위한 시스템으로서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 및 상기 마더보드 및 상기 CPU에 연결된 제11 양태의 상기 비디오 프로세서를 포함하는 시스템이다.
본 발명의 제13 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛은 상기 비디오 프로세서의 제어기로서 기능하고, 상기 벡터 실행 유닛의 동작을 제어한다.
본 발명의 제14 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛을 상기 벡터 실행 유닛과 인터페이스하기 위한 벡터 인터페이스 유닛을 더 포함한다.
본 발명의 제15 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛은 비동기적으로 동작하도록 구성된다.
본 발명의 제16 양태는, 제15 양태의 비디오 프로세서 또는 제12 양태의 시스템으로서, 상기 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 상기 벡터 실행 유닛은 제2 클럭 주파수로 실행한다.
본 발명의 제17 양태는, 제11 양태의 비디오 프로세서 또는 제12 양태의 시 스템으로서, 상기 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성되고, 상기 벡터 실행 유닛은 상기 애플리케이션의 픽셀 처리 동작을 실행하도록 구성된다.
본 발명의 제18 양태는, 제17 양태에 있어서, 상기 벡터 실행 유닛은 상기 스칼라 실행 유닛의 제어하에 요구 구동 기반으로(on a demand driven basis) 동작하도록 구성된다.
본 발명의 제19 양태는, 제17 양태에 있어서, 상기 스칼라 실행 유닛은 커맨드 FIFO를 이용하여 상기 벡터 실행 유닛에 기능 호출들(function calls)을 전송하도록 구성되고, 상기 벡터 실행 유닛은 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작한다.
본 발명의 제20 양태는, 제17 양태에 있어서, 상기 비디오 프로세서의 비동기적인 동작은 상기 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성된다.
본 발명의 제21 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛은 VLIW(very long instruction word) 코드를 이용하여 동작하도록 구성된다.
본 발명의 제22 양태는, 비디오 처리 동작을 실행하기 위한 비디오 프로세서용 스트림 기반 메모리 액세스 시스템으로서, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리; 및 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛과 상기 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하는 시스템이다.
본 발명의 제23 양태는, 비디오 처리 동작을 지원하기 위해 스트림 기반 메모리 액세스들을 실행하는 시스템으로서, 마더보드; 상기 마더보드에 연결되는 호스트 CPU; 상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서 - 상기 비디오 프로세서는, 상기 비디오 프로세서와 상기 호스트 CPU 간의 통신을 설정하기 위한 호스트 인터페이스, 상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함함 - ; 및 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 연결되고, 상기 스칼라 실행 유닛과 상기 벡터 실행 유닛과 프레임 버퍼 메모리 간의 스트림 기반 통신을 설정하기 위한 메모리 인터페이스를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하는 시스템이다.
본 발명의 제24 양태는, 제22 양태에 있어서, 상기 제1 스트림 및 상기 제2 스트림은 적어도 하나의 프리페치된 타일(prefetched tile)을 포함한다.
본 발명의 제25 양태는, 제22 양태에 있어서, 상기 제1 스트림은 상기 프레임 버퍼 메모리 내의 제1 위치로부터 발원되고, 상기 제2 스트림은 상기 프레임 버퍼 메모리 내의 제2 위치로부터 발원된다.
본 발명의 제26 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스는 복수의 상이한 발원 위치로부터, 그리고 복수의 상이한 종료 위치까지의 복수의 스트림을 관리하도록 구성된다.
본 발명의 제27 양태는, 제26 양태에 있어서, 상기 발원 위치들 중 적어도 하나 또는 상기 종료 위치들 중 적어도 하나는 시스템 메모리 내에 있다.
본 발명의 제28 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스 내에 구축되고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 판독을 구현하고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 기입을 구현하도록 구성된 DMA 엔진을 더 포함한다.
본 발명의 제29 양태는, 제22 또는 제23 양태에 있어서, 상기 제1 스트림은 상기 제2 스트림보다 더 높은 양의 지연을 경험하고, 상기 제1 스트림은 상기 제2 스트림보다 많은 수의 타일 저장용 버퍼들을 통합한다.
본 발명의 제30 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스는 상기 제1 스트림 또는 상기 제2 스트림의 지연을 보상하기 위하여 상기 제1 스트림 또는 상기 제2 스트림의 조정 가능한 수의 타일을 프리페치하도록 구성된다.
본 발명의 제31 양태는, 비디오 프로세서와 호스트 CPU 간의 통신을 구현하 기 위한 호스트 인터페이스; 상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 커맨드 FIFO로서, 상기 벡터 실행 유닛이 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작할 수 있게 하는 커맨드 FIFO; 상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 및 상기 메모리 인터페이스 내에 구축되고, 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고, 데이터 저장 메모리 및 명령 캐시에 상기 벡터 실행 유닛에 대한 데이터 및 명령을 로딩하기 위한 DMA 엔진을 포함하는 시스템이다.
본 발명의 제32 양태는, 제31 양태에 있어서, 상기 시스템은 비디오 처리 동작을 실행하기 위한 지연 감내 시스템(latency tolerant system)이다.
본 발명의 제33 양태는, 제32 양태에 있어서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서를 더 포함한다.
본 발명의 제34 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 벡터 실행 유닛은 요구 구동 기반으로 동작하기 위하여 상기 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 대하여 비동기적으로 동작하도록 구성된다.
본 발명의 제35 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 요구 구동 기반은 상기 상이한 메모리 위치들로부터 상기 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성된다.
본 발명의 제36 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리를 구현하도록 구성되고, 상기 벡터 실행 유닛은 비디오 처리 작업 부하의 대부분을 구현하도록 구성된다.
본 발명의 제37 양태는, 제36 양태에 있어서, 상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위해 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성된다.
본 발명의 제38 양태는, 제31 양태에 있어서, 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성된다.
본 발명의 제39 양태는, 제38 양태에 있어서, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링된다.
본 발명의 제40 양태는, 제33 양태에 있어서, 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되고, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링된다.
본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새 로운 비디오 프로세서 아키텍처를 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위하여 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다. 본 발명의 실시예들은 예를 들어 MPEG-2/WMV9/H.264 인코드 지원(예를 들어, 루프내 디코더), MPEG-2/WMV9/H.264 디코드(예를 들어, 포스트 엔트로피 디코딩), 및 루프내/루프외 비블록킹 필터와 같은 다수의 정교한 비디오 처리 동작을 제공할 수 있다.
본 발명의 실시예들에 의해 제공되는 추가적인 비디오 처리 동작은 예를 들어 향상된 모션 적응 디인터레이싱, 인코딩을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 및 서브 픽처 합성을 포함한다. 본 발명의 비디오 프로세서 아키텍처는 또한 예를 들어 칼라 공간 변환, 칼라 공간 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 조작, 및 다양한 비디오 표면 포맷 변환과 같은 소정의 비디오 프로세서-증폭기(프로캠프) 애플리케이션에 이용될 수 있다.
이제 본 발명의 바람직한 실시예들을 상세히 참조하는데, 그 예는 첨부 도면들에 도시되어 있다. 본 발명은 바람직한 실시예들과 관련하여 설명되지만, 본 발명은 이들 실시예에 한정되는 것은 아니라는 것을 이해할 것이다. 오히려, 본 발명은 첨부된 청구범위에 의해 정의되는 발명의 사상 및 범위 내에 포함될 수 있는 대안, 변형 및 균등물을 포함하는 것으로 의도한다. 더욱이, 아래의 본 발명의 실시예들의 상세한 설명에서, 다양한 특정 상세는 본 발명의 완전한 이해를 제공하기 위해 설명된다. 그러나, 본 발명은 이러한 특정 상세 없이도 실시될 수 있다는 것 을 이 분야의 전문가들은 이해할 것이다. 다른 사례에서, 본 발명의 실시예들의 양태를 불필요하게 불명확하게 하지 않기 위하여 공지 방법, 프로시저, 컴포넌트 및 회로는 상세히 설명되지 않는다.
기호 및 용어
이어지는 상세한 설명의 몇몇 부분은 프로시저, 단계, 논리 블록, 처리 및 컴퓨터 메모리 내의 데이터 비트 상의 동작의 다른 기호 표현을 이용하여 제공된다. 이들 설명 및 표현은 데이터 처리 분야의 전문가들이 그들의 작업의 내용을 다른 전문가에게 가장 효과적으로 전달하기 위해 사용하는 수단이다. 본 명세서에서, 일반적으로, 프로시저, 컴퓨터 실행 단계, 논리 블록, 프로세서 등은 원하는 결과를 도출하는 단계들 또는 명령들의 모순 없는 시퀀스인 것으로 고려된다. 이 단계들은 물리량의 물리적 조작을 요구하는 단계들이다. 통상적으로, 반드시 그렇지는 않지만, 이들 양은 컴퓨터 시스템에서 저장, 전송, 조합, 비교 및 조작될 수 있는 전기 또는 자기적 신호의 형태를 갖는다. 이들 신호를 비트, 값, 요소, 기호, 문자, 용어, 수 등으로 지칭하는 것이 때때로 주로 일반적인 사용을 위해 편리한 것으로 입증되었다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리량과 연관되며 이들 양에 적용되는 편리한 라벨일 뿐이라는 것에 유의해야 한다. 아래의 설명으로부터 명백하듯이, 특별히 달리 언급되지 않는 한, 본 발명을 통해, "처리" 또는 "액세스" 또는 "실행" 또는 "저장" 또는 "렌더링" 등과 같은 용어를 이용하는 설명은 컴퓨터 시스템의 레지스터 및 메모리 내의 물리(전자)량으로 표현되는 데이터를, 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 장치 내의 물리량으로 유사하게 표현되는 다른 데이터로 조작하고 변환하는 컴퓨터 시스템(예를 들어, 도 1의 컴퓨터 시스템(100)) 또는 유사한 전자 컴퓨팅 장치의 동작 및 프로세스를 지칭하는 것으로 이해된다.
컴퓨터 시스템 플랫폼
도 1은 본 발명의 일 실시예에 따른 컴퓨터 시스템(100)을 나타낸다. 컴퓨터 시스템(100)은 소정의 하드웨어 기반 및 소프트웨어 기반 기능을 위한 실행 플랫폼을 제공하는 본 발명의 실시예들에 따른 기본 컴퓨터 시스템의 컴포넌트들을 나타낸다. 일반적으로, 컴퓨터 시스템(100)은 적어도 하나의 CPU(101), 시스템 메모리(115), 적어도 하나의 그래픽 프로세서 유닛(GPU;110) 및 하나의 비디오 프로세서 유닛(VPU;111)을 포함한다. CPU(101)는 브리지 컴포넌트(105)를 통해 시스템 메모리(115)에 연결되거나 CPU(101) 내부의 메모리 제어기(도시되지 않음)를 통해 시스템 메모리(115)에 직접 연결될 수 있다. 브리지 컴포넌트(105; 예를 들어, 노스브리지)는 다양한 I/O 장치들(예를 들어, 하나 이상의 하드 디스크 드라이브, 이더넷 어댑터, CD ROM, DVD 등)을 접속시키는 확장 버스들을 지원할 수 있다. GPU(110) 및 비디오 프로세서 유닛(111)은 디스플레이(112)에 연결된다. 연산 능력을 더 향상시키기 위하여 하나 이상의 추가 GPU가 옵션으로 시스템(100)에 연결될 수 있다. GPU(110) 및 비디오 프로세서 유닛(111)은 브리지 컴포넌트(105)를 통해 CPU(101) 및 시스템 메모리(115)에 연결된다. 시스템(100)은 예를 들어 전용 그래픽 렌더링 GPU(110)에 연결된 강력한 범용 CPU(101)를 구비한 데스크탑 컴퓨터 시스템 또는 서버 컴퓨터 시스템으로서 구현될 수 있다. 이러한 실시예에서, 주변 버스, 특수 그래픽 메모리 및 시스템 메모리, I/O 장치 등을 추가하는 컴포넌트들이 포함될 수 있다. 마찬가지로, 시스템(100)은 핸드헬드 장치(예를 들어, 셀폰 등) 또는 예를 들어 워싱톤 레드먼드의 마이크로소프트사로부터 입수할 수 있는 Xbox(등록 상표) 또는 일본, 도꾜의 소니 컴퓨터 엔터테인먼트사로부터 입수할 수 있는 PlayStation3(등록 상표)와 같은 셋톱 비디오 게임 콘솔 장치로서 구현될 수 있다.
GPU(110)는 개별 컴포넌트, 커넥터(예를 들어, AGP 슬롯, PCI 익스프레스 슬롯 등)를 통해 컴퓨터 시스템에 연결되도록 설계된 개별 그래픽 카드, 개별 집적 회로 다이(예를 들어, 마더보드에 직접 실장됨), 또는 컴퓨터 시스템 칩셋 컴포넌트의 집적 회로 다이 내에 포함된 집적 GPU(예를 들어, 브리지 칩(105) 내에 집적됨)로서 구현될 수 있다는 것을 이해해야 한다. 또한, 높은 대역폭 그래픽 데이터 저장을 위해 GPU(110)에 대해 로컬 그래픽 메모리가 포함될 수 있다. 또한, GPU(110) 및 비디오 프로세서 유닛(111)은 동일 집적 회로 다이 상에 집적되거나(예를 들어, 컴포넌트(120)로서) 컴퓨터 시스템(100)의 마더보드에 접속되거나 그 위에 실장되는 개별 집적 회로 컴포넌트들일 수 있다는 것을 이해해야 한다.
본 발명의 실시예들
도 2는 본 발명의 일 실시예에 따른 비디오 프로세서 유닛(111)의 내부 컴포넌트를 나타내는 도면이다. 도 2에 도시된 바와 같이, 비디오 프로세서 유닛(111)은 스칼라 실행 유닛(201), 벡터 실행 유닛(202), 메모리 인터페이스(203) 및 호스 트 인터페이스(204)를 포함한다.
도 2의 실시예에서, 비디오 프로세서 유닛(이하 간단히 비디오 프로세서라 함; 111)은 비디오 처리 동작을 실행하기 위한 기능 컴포넌트들을 포함한다. 비디오 프로세서(111)는 호스트 인터페이스(204)를 이용하여 브리지(105)를 통해 비디오 프로세서(111)와 호스트 CPU(101) 간의 통신을 설정한다. 비디오 프로세서(111)는 메모리 인터페이스(203)를 이용하여 비디오 프로세서(111)와 프레임 버퍼 메모리(205)(예를 들어, 도시되지 않은 연결된 디스플레이(112)를 위한 것임) 간의 통신을 설정한다. 스칼라 실행 유닛(201)은 호스트 인터페이스(204) 및 메모리 인터페이스(203)에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛은 호스트 인터페이스(204) 및 메모리 인터페이스(203)에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다.
도 2의 실시예는 비디오 프로세서(111)가 그의 실행 기능을 스칼라 동작 및 벡터 동작으로 분할하는 방식을 설명한다. 스칼라 동작은 스칼라 실행 유닛(201)에 의해 구현된다. 벡터 동작은 벡터 실행 유닛(202)에 의해 구현된다.
일 실시예에서, 벡터 실행 유닛(202)은 스칼라 실행 유닛(201)에 대해 슬레이브 코프로세서로서 기능하도록 구성된다. 이러한 실시예에서, 스칼라 실행 유닛은 벡터 실행 유닛(202)에 제어 스트림을 공급하고 벡터 실행 유닛(202)에 대한 데이터 입출력을 관리함으로써 벡터 실행 유닛(202)의 작업 부하를 관리한다. 제어 스트림은 일반적으로 기능 파라미터, 서브루틴 독립 변수 등을 포함한다. 대표적인 비디오 처리 애플리케이션에서, 애플리케이션의 처리 알고리즘의 제어 흐름은 스칼라 실행 유닛(210) 상에서 실행되는 반면, 실제 픽셀/데이터 처리 동작은 벡터 실행 유닛(202) 상에서 구현된다.
도 2를 계속 참조하면, 스칼라 실행 유닛(201)은 RISC 기반 실행 기술을 포함하는 RISC 스타일 스칼라 실행 유닛으로서 구현될 수 있다. 벡터 실행 유닛(202)은 예를 들어 하나 이상의 SIMD 파이프라인을 구비한 SIMD 머신으로서 구현될 수 있다. 예를 들어, SIMD 파이프라인 실시예에서, 각각의 SIMD 파이프라인은 16 픽셀 폭의 데이터 경로(또는 더 넓음)로 구현되며, 따라서 벡터 실행 유닛(202)에 클럭당 최대 32 픽셀의 결과적인 데이터 출력을 생성하는 순수한 컴퓨팅 능력을 제공할 수 있다. 일 실시예에서, 스칼라 실행 유닛(201)은 클럭 단위로 스칼라 동작의 병렬 실행을 최적화하기 위해 VLIW 소프트웨어 코드를 이용하여 동작하도록 구성된 하드웨어를 포함한다.
도 2의 실시예에서, 스칼라 실행 유닛(201)은 스칼라 프로세서(210)에 연결된 명령 캐시(211) 및 데이터 캐시(212)를 포함한다. 캐시들(211, 212)은 예를 들어 프레임 버퍼(205)와 같은 외부 메모리로의 액세스를 위해 메모리 인터페이스(203)와 인터페이스한다. 스칼라 실행 유닛(201)은 벡터 실행 유닛(202)과의 통신을 설정하기 위한 벡터 인터페이스 유닛(213)을 더 포함한다. 일 실시예에서, 벡터 인터페이스 유닛(213)은 스칼라 실행 유닛(201)과 벡터 실행 유닛(202) 간의 비동기 통신을 가능하게 하도록 구성된 하나 이상의 동기 메일 박스(214)를 포함할 수 있다.
도 2의 실시예에서, 벡터 실행 유닛(202)은 벡터 실행 데이터 경로, 즉 벡터 데이터 경로(221)의 동작을 제어하도록 구성된 벡터 제어 유닛(220)을 포함한다. 벡터 제어 유닛(220)은 스칼라 실행 유닛(201)으로부터 명령 및 데이터를 수신하기 위한 커맨드 FIFO(225)를 포함한다. 벡터 제어 유닛(220)에 명령을 제공하도록 명령 캐시가 연결된다. 벡터 데이터 경로(221)에 입력 데이터를 제공하고 벡터 데이터 경로(221)로부터 결과적인 데이터를 수신하도록 데이터 저장 메모리(223)가 연결된다. 데이터 저장 메모리(223)는 벡터 데이터 경로(221)에 대한 명령 캐시 및 데이터 RAM으로서 기능한다. 명령 캐시(222) 및 데이터 저장 메모리(223)는 프레임 버퍼(205)와 같은 외부 메모리를 액세스하기 위해 메모리 인터페이스(203)에 연결된다. 도 2의 실시예는 또한 제2 데이터 벡터 경로(231) 및 각각의 제2 데이터 저장 메모리(223)(예를 들어, 점선)를 나타낸다. 제2 벡터 데이터 경로(231) 및 제2 데이터 저장 메모리(233)는 벡터 실행 유닛(202)이 2개의 벡터 실행 파이프라인(예를 들어, 듀얼 SIMD 파이프라인 구성)을 갖는 사례를 나타내도록 도시된다는 것을 이해해야 한다. 본 발명의 실시예들은 많은 수의 벡터 실행 파이프라인(예를 들어, 4, 8, 16 등)을 가진 벡터 실행 유닛에 적합하다.
스칼라 실행 유닛(201)은 벡터 실행 유닛(202)에 대해 데이터 및 커맨드 입력을 제공한다. 일 실시예에서, 스칼라 실행 유닛(201)은 메모리 맵핑된 커맨드 FIFO(225)를 이용하여 벡터 실행 유닛(202)에 기능 호출들을 전송한다. 벡터 실행 유닛(202) 커맨드는 커맨드 FIFO(225) 내에 큐잉된다.
커맨드 FIFO(225)의 사용은 스칼라 실행 유닛(201)과 벡터 실행 유닛(202)을 효과적으로 분리한다. 스칼라 실행 유닛(201)은 그 자신의 개별 클럭 상에서 기능 하여, 벡터 실행 유닛(202)의 클럭 주파수와 다르고 개별적으로 제어될 수 있는 그 자신의 개별 클럭 주파수로 동작할 수 있다.
커맨드 FIFO(225)는 벡터 실행 유닛(202)이 요구 구동 유닛으로서 동작하는 것을 가능하게 한다. 예를 들어, 작업이 스칼라 실행 유닛(201)에서 커맨드 FIFO(225)로 핸드 오프된 후, 분리 비동기 방식으로 처리하기 위해 벡터 실행 유닛(202)에 의해 액세스될 수 있다. 벡터 실행 유닛(202)은 이런 식으로 필요에 따라 또는 요구에 따라 스칼라 실행 유닛(201)에 의해 그의 작업 부하를 처리한다. 이러한 기능은 벡터 실행 유닛(202)이 최대 성능이 요구되지 않을 때 (예를 들어, 하나 이상의 내부 클럭을 줄이거나 정지시킴으로써) 능력을 보존하는 것을 가능하게 한다.
비디오 처리 기능의 스칼라 부분(예를 들어, 스칼라 실행 유닛(201)에 의한 실행을 위해) 및 벡터 부분(예를 들어, 벡터 실행 유닛(202)에 의한 실행을 위해)으로의 분할은 비디오 프로세서(111)에 대해 구축된 비디오 처리 프로그램들이 개별 스칼라 소프트웨어 코드 및 벡터 소프트웨어 코드로 컴파일되는 것을 가능하게 한다. 스칼라 소프트웨어 코드 및 벡터 소프트웨어 코드는 개별적으로 컴파일된 후, 함께 링크되어 코히런트 애플리케이션을 형성할 수 있다.
분할(partitioning)은 벡터 소프트웨어 코드 함수들이 스칼라 소프트웨어 코드 함수들과 별개로 다르게 작성되는 것을 가능하게 한다. 예를 들어, 벡터 함수들은 개별적으로(예를 들어, 상이한 시간에, 상이한 엔지니어 팀에 의해 등) 작성될 수 있으며, 스칼라 함수들(스칼라 스레드, 프로세스 등)에 의해/과 함께 사용하 기 위해 하나 이상의 서브루틴 또는 라이브러리 함수로서 제공될 수 있다. 이것은 스칼라 소프트웨어 코드 및/또는 벡터 소프트웨어 코드의 개별적인 독립적 갱신을 가능하게 한다. 예를 들어, 벡터 서브루틴이 스칼라 서브루틴과 독립적으로 (예를 들어, 사전 배포된 프로그램, 배포된 프로그램의 기능을 향상시키기 위해 추가된 새로운 특징 등의 갱신을 통해) 갱신될 수 있으며, 그 역도 성립한다. 분할은 스칼라 프로세서(210)의 개별 캐시(예를 들어, 캐시 211, 212) 및 벡터 제어 유닛(220) 및 벡터 데이터 경로(221)의 개별 캐시(예를 들어, 캐시 222, 223)에 의해 용이해진다. 전술한 바와 같이, 스칼라 실행 유닛(201) 및 벡터 실행 유닛(202)은 커맨드 FIFO(225)를 통해 통신한다.
도 3은 본 발명의 일 실시예에 따른 비디오 프로세서(111)용의 예시적인 소프트웨어 프로그램(300)을 나타내는 도면이다. 도 3에 도시된 바와 같이, 소프트웨어 프로그램(300)은 비디오 프로세서(111)에 대한 프로그래밍 모델의 속성을 나타내며, 이에 의해 스칼라 제어 스레드(301)가 벡터 데이터 스레드(302)와 함께 비디오 프로세서(111)에 의해 실행된다.
도 3의 실시예의 소프트웨어 프로그램(300)의 예는 비디오 프로세서(111)에 대한 프로그래밍 모델을 나타내며, 이에 의해 스칼라 실행 유닛(301) 상의 스칼라 제어 프로그램(예를 들어, 스칼라 제어 스레드 301)이 벡터 실행 유닛(202) 상에서 서브루틴 호출(예를 들어, 벡터 데이터 스레드(302)을 실행한다. 소프트웨어 프로그램(300)의 예는 컴파일러 또는 소프트웨어 프로그래머가 비디오 처리 애플리케이션을 스칼라 부분(예를 들어, 제1 스레드) 및 벡터 부분(예를 들어, 제2 스레드)으 로 분할한 사례를 나타낸다.
도 3에 도시된 바와 같이, 스칼라 실행 유닛(201) 상에서 실행되는 스칼라 제어 스레드(301)는 재빨리 작업 파라미터를 계산하고 이들 파라미터를 처리 작업의 대부분을 수행하는 벡터 실행 유닛(202)에 공급한다. 전술한 바와 같이, 2개의 스레드(301, 302)에 대한 소프트웨어 코드는 개별적으로 작성되고 컴파일될 수 있다.
스칼라 스레드는 다음을 담당한다.
1. 호스트 유닛(204)과의 인터페이싱 및 클래스 인터페이스의 구현
2. 벡터 실행 유닛(202)의 초기화, 셋업 및 구성
3. 루프 내의 작업 유닛들, 청크들 또는 작업 세트들 내의 알고리즘을 실행하여, 각각의 반복에 의해
a. 현재 작업 세트에 대한 파라미터가 계산되고,
b. 벡터 실행 유닛으로의 입력 데이터 전달이 개시되고,
c. 벡터 실행 유닛으로부터의 출력 데이터의 전달이 개시된다.
스칼라 스레드의 대표적인 실행 모델은 "파이어 앤드 포겟(fire-and-forget"이다. 파이어 앤드 포겟이라는 용어는, 비디오 기저 대역 처리 애플리케이션에 대한 대표적인 모델에 대해 커맨드 및 데이터가 스칼라 실행 유닛(201)으로부터 (예를 들어, 커맨드 FIFO(225)를 통해) 벡터 실행 유닛(202)으로 전송되고 알고리즘이 완료될 때까지 벡터 실행 유닛(202)으로부터 리턴 데이터가 존재하지 않는 속성을 지칭한다.
도 3의 프로그램(300) 예에서, 스칼라 실행 유닛(201)은 커맨드 FIFO(225) 내에 어떠한 공간도 더 이상 존재하지 않을 때까지(예를 들어, lend_of_alg &!cmd_fifo_full) 벡터 실행 유닛(202)에 대한 스케쥴링 작업을 유지한다. 스칼라 실행 유닛(201)에 의해 스케쥴링된 작업은 파라미터를 계산하고 파라미터를 벡터 서브루틴으로 전송한 후, 벡터 서브루틴을 호출하여 작업을 수행한다. 벡터 실행 유닛(202)에 의한 서브루틴(예를 들어, vector_funcB)의 실행은 주로 주 메모리(예를 들어, 시스템 메모리 115)로부터의 지연을 숨기기 위하여 적시에 지연된다. 따라서, 비디오 프로세서(111)의 아키텍처는 명령 및 데이터 트래픽 양자에 대해 벡터 실행 유닛(202) 측 상의 지연 보상 메카니즘을 제공한다. 이러한 지연 보상 메카니즘은 후술한다.
소프트웨어 프로그램(300)의 예는 2개 이상의 파이프라인(예를 들어, 도 2의 벡터 데이터 경로(221) 및 제2 벡터 데이터 경로(231))이 존재하는 사례에서 더 복잡하다는 점에 유의해야 한다. 마찬가지로, 소프트웨어 프로그램(300)의 예는 프로그램(300)이 2개의 벡터 실행 파이프라인을 가진 컴퓨터 시스템에 대해 작성되지만 단일 벡터 실행 파이프라인을 가진 시스템 상에서 실행될 수 있는 능력을 여전히 보유하는 상황에 대해 더 복잡할 것이다.
따라서, 도 2 및 도 3의 설명에서 전술한 바와 같이, 스칼라 실행 유닛(201)은 벡터 실행 유닛(202) 상에서의 연산 개시를 담당한다. 일 실시예에서, 스칼라 실행 유닛(201)에서 벡터 실행 유닛(202)으로 전달된 커맨드는 아래의 주요 타입을 갖는다.
1. 메모리로부터 벡터 실행 유닛(202)의 데이터 RAM으로 현재의 작업 설정 데이터를 전달하기 위해 스칼라 실행 유닛(201)에 의해 개시되는 판독 커맨드(예를 들어, memRd)
2. 스칼라 실행 유닛(201)에서 벡터 실행 유닛(202)으로 전달되는 파라미터
3. 실행될 벡터 서브루틴의 PC(예를 들어, 프로그램 카운터) 형태의 실행 커맨드
4. 벡터 연산의 결과를 메모리로 복사하기 위해 스칼라 실행 유닛(201)에 의해 개시되는 기입 커맨드(예를 들어, memWr)
일 실시예에서, 벡터 실행 유닛(202)은 이들 커맨드의 수신시에 즉시 메모리 인터페이스(203)에 대해 memRd 커맨드를 스케쥴링한다(예를 들어, 프레임 버퍼(205)로부터 요청된 데이터를 판독하기 위해). 벡터 실행 유닛(202)은 또한 실행 커맨드를 검사하고, (캐시(222) 내에 존재하지 않는 경우) 실행될 벡터 서브루틴을 프리페치한다.
이 상황에서 벡터 실행 유닛(202)의 목적은 벡터 실행 유닛(202)이 현재의 실행 커맨드 상에서 작업하면서 다음 소수의 실행 커맨드의 명령 및 데이터 스트림을 미리 스케쥴링하는 것이다. 사전 스케쥴링 특징은 메모리 위치들로부터 명령/데이터를 페치하는 데 수반되는 지연을 효과적으로 숨긴다. 이러한 판독 요청을 재빨리 행하기 위하여, 벡터 실행 유닛(202), 데이터 저장 메모리(예를 들어, 223), 및 명령 캐시(예를 들어, 222)는 고속 최적 하드웨어를 이용하여 구현된다.
전술한 바와 같이, 데이터 저장 메모리(예를 들어, 223)는 벡터 실행 유 닛(202)의 작업 RAM으로서 기능한다. 스칼라 실행 유닛(201)은 데이터 저장 메모리가 FIFO의 집합인 것처럼 인식하고 그와 상호작용한다. FIFO는 비디오 프로세서(111)가 동작하는 "스트림"을 포함한다. 일 실시예에서, 스트림은 일반적으로 스칼라 실행 유닛(201)이 전송(예를 들어, 벡터 실행 유닛(202)에 대해)을 개시하는 입출력 FIFO이다. 전술한 바와 같이, 스칼라 실행 유닛(201) 및 벡터 실행 유닛(202)의 동작은 분리된다.
입출력 스트림이 가득 찬 경우, 벡터 제어 유닛(220) 내의 DMA 엔진이 커맨드 FIFO(225)의 처리를 중지한다. 이것은 곧 커맨드 FIFO(225)가 가득 차게 한다. 스칼라 실행 유닛(201)은 커맨드 FIFO(225)가 가득 찬 때 벡터 실행 유닛(202)에 대한 추가 작업의 발행을 중지한다.
일 실시예에서, 벡터 실행 유닛(202)은 입출력 스트림 외에 중간 스트림을 필요로 할 수 있다. 따라서, 전체 데이터 저장 메모리(223)는 스칼라 실행 유닛(201)과의 상호작용과 관련하여 스트림들의 집합으로 보여질 수 있다.
도 4는 본 발명의 일 실시예에 따른 비디오 프로세서를 이용한 비디오와의 서브 픽처 혼합의 일례를 나타낸다. 도 4는 비디오 표면이 서브 픽처와 혼합된 후 ARGB 표면으로 변환되는 예시적인 사례를 나타낸다. 표면을 포함하는 데이터는 프레임 버퍼 메모리(205) 내에 휘도(Luma) 파라미터(412) 및 색도(Chroma) 파라미터(413)로서 위치한다. 도시된 바와 같이, 서브 픽처 픽셀 요소(414)도 프레임 버퍼 메모리(205) 내에 위치한다. 벡터 서브루틴 명령 및 파라미터(411)는 도시된 바와 같이 메모리(205) 내에 인스턴스화되어 있다.
일 실시예에서, 각각의 스트림은 "타일"이라고 하는 데이터의 작업 2D 청크들의 FIFO를 포함한다. 이러한 실시예에서, 벡터 실행 유닛(202)은 각각의 스트림에 대해 판독 타일 포인터 및 기입 타일 포인터를 유지한다. 예를 들어, 입력 스트림에 대해, 벡터 서브 루틴이 실행될 때, 벡터 서브 루틴은 현재(판독) 타일로부터 소비하거나 판독할 수 있다. 그 배경에서, memRd 커맨드에 의해 데이터가 현재(기입) 타일로 전송된다. 벡터 실행 유닛은 또한 출력 스트림에 대한 출력 타일을 생성할 수 있다. 이어서, 이들 타일은 실행 커맨드에 이어지는 memWr0 커맨드에 의해 메모리로 이동된다. 이것은 타일들을 효과적으로 프리페치하며, 타일들이 조작될 준비가 되게 하여 지연을 효과적으로 숨긴다.
도 4의 서브 픽처 혼합 예에서, 벡터 데이터 경로(221)는 벡터 서브 루틴 명령 및 파라미터(411)(예를 들어, &v_subp_blend)의 인스턴스화된 인스턴스에 의해 구성된다. 이것은 라인 421로 도시되어 있다. 스칼라 실행 유닛(201)은 표면들의 청크들(예를 들어, 타일들)을 판독하고, 이들을 DMA 엔진(401)(예를 들어, 메모리 인터페이스(203) 내의)을 이용하여 데이터 저장 메모리(223)에 로딩한다. 로딩 동작은 라인 422, 423 및 424에 의해 도시된다.
도 4를 계속 참조하면, 다수의 입력 표면이 존재하므로, 다수의 입력 스트림이 유지되는 것이 필요하다. 각각의 스트림은 대응 FIFO를 갖는다. 각각의 스트림은 상이한 수의 타일을 가질 수 있다. 도 4의 예는 서브 픽처 표면이 시스템 메모리(115)(예를 들어, 서브 픽처 픽셀 요소 414) 내에 있고, 따라서 추가 버퍼링(예를 들어, n, n+1, n+2, n+3 등)을 갖는 반면, 비디오 스트림(예를 들어, 휘 도(412), 색도(413) 등)이 보다 적은 수의 타일을 가질 수 있는 사례를 나타낸다. 사용되는 버퍼/FIFO의 수는 스트림이 겪는 지연의 정도에 따라 조정될 수 있다.
전술한 바와 같이, 데이터 저장 메모리(223)는 지연을 숨기기 위하여 예측 프리페치 방법을 이용한다. 이 때문에, 데이터가 적절한 벡터 데이터 경로 실행 하드웨어(예를 들어, FIFO n, n+1, n+2 등으로 도시)에 대해 프리페치될 때, 스트림이 둘 이상의 타일 내에 데이터를 가질 수 있다.
데이터 저장 메모리가 로딩되면, FIFO는 벡터 데이터 경로 하드웨어(221)에 의해 액세스되고, 벡터 서브 루틴(예를 들어, 430)에 의해 조작된다. 벡터 데이터 경로 동작의 결과는 출력 스트림(403)을 포함한다. 이 출력 스트림은 스칼라 실행 유닛(201)에 의해 DMA 엔진(401)을 통해 프레임 버퍼 메모리(205)(예를 들어, ARGB_OUT 415)로 복사된다. 이것은 라인 425로 도시되어 있다.
이와 같이, 본 발명의 실시예들은 데이터 저장 메모리가 복수의 메모리 타일로서 추상화되는 스트림 처리의 중요한 양태를 이용한다. 따라서, 스트림은 순차적으로 액세스되는 타일들의 집합으로 볼 수 있다. 스트림들은 데이터를 프리페치하는 데 사용된다. 이 데이터는 타일의 형태를 갖는다. 타일들은 데이터가 발원되는 특정 메모리 소스(예를 들어, 시스템 메모리, 프레임 버퍼 메모리 등)로부터의 지연을 숨기기 위해 프리페치된다. 마찬가지로, 스트림들은 상이한 위치들(예를 들어, 벡터 실행 유닛에 대한 캐시, 스칼라 실행 유닛에 대한 캐시, 프레임 버퍼 메모리, 시스템 메모리 등)을 향할 수 있다. 스트림들의 또 하나의 특징은 이들이 일반적으로 예측 프리페치 모드로 타일들을 액세스한다는 것이다. 전술한 바 와 같이, 지연이 클수록, 프리페치는 더 어렵고, 스트림에 대해 사용되는 버퍼링은 더 많다(예를 들어, 도 4에 도시된 바와 같이).
도 5는 본 발명의 일 실시예에 따른 벡터 실행 유닛의 내부 컴포넌트들을 나타내는 도면이다. 도 5는 프로그램의 관점에서 벡터 실행 유닛(202)의 다양한 기능 유닛 및 레지스터/SRAM 자원의 배열을 나타낸다.
도 5의 실시예에서, 벡터 실행 유닛(202)은 비디오 기저 대역 처리의 성능 및 다양한 코덱(압축-압축 해제 알고리즘)의 실행을 위해 최적화된 VLIW 디지털 신호 프로세서를 포함한다. 따라서, 벡터 실행 유닛(202)은 비디오 처리/코덱 실행의 효율 향상을 지향하는 다수의 속성을 갖는다.
도 5의 실시예에서, 속성들은 다음을 포함한다.
1. 다수의 벡터 실행 파이프라인의 포함을 위한 옵션을 제공함에 의한 스케일링 가능한 성능
2. 파이프당 2개의 데이터 어드레스 생성기(DAG)의 할당
3. 메모리/레지스터 피연산자
4. 2D (x,y) 포인터/반복기
5. 디프(deep) 파이프라인(예를 들어, 11-12) 스테이지
6. 스칼라(정수)/분기 유닛
7. 가변 명령 폭(장/단 명령)
8. 피연산자 추출을 위한 데이터 정렬기
9. 대표적인 피연산자 및 결과의 2D 데이터 경로(4x4) 형상
10. 원격 프로시저 호출을 실행하는 스칼라 실행 유닛에 대한 슬레이브 벡터 실행 유닛
일반적으로, 벡터 실행 유닛(202)의 프로그래머의 뷰는 2개의 DAG(503)를 구비한 SIMD 데이터 경로로서이다. 명령들은 VLIW 방식으로 발행되며(예를 들어, 명령들은 벡터 데이터 경로(504) 및 어드레스 생성기(503)에 대해 동시에 발행된다), 명령 디코더(501)에 의해 디코딩되어 적절한 실행 유닛으로 발송된다. 명령들은 가변 길이를 가지며, 가장 일반적으로 사용되는 명령들은 짧은 형태로 인코딩된다. 풀 명령 세트는 VLIW 타입의 명령과 같이 긴 형태로 이용 가능하다.
레전드(502)는 3개의 VLIW 명령을 가진 3개의 클럭 사이클을 나타낸다. 레전드(510)에 따르면, VLIW 명령들(502)의 최상위는 2개의 어드레스 명령(예를 들어, 2개의 DAG(503)에 대해) 및 벡터 데이터 경로(504)에 대한 하나의 명령을 포함한다. 중간 VLIW 명령은 하나의 정수 명령(예를 들어, 정수 유닛 505에 대해), 하나의 어드레스 명령 및 하나의 벡터 명령을 포함한다. 최하위 VLIW 명령은 분기 명령(예를 들어, 분기 유닛(506)에 대해), 하나의 어드레스 명령 및 하나의 벡터 명령을 포함한다.
벡터 실행 유닛은 단일 데이터 파이프 또는 다수의 데이터 파이프를 갖도록 구성될 수 있다. 각각의 데이터 파이프는 로컬 RAM(예를 들어, 데이터 저장 메모리 511), 크로스바(516), 2개의 DAG(503), 및 SIMD 실행 유닛(예를 들어, 벡터 데이터 경로 504)으로 구성된다. 도 5는 하나의 데이터 파이프만이 인스턴스화된 설명을 위한 기본 구성을 나타낸다. 2개의 데이터 파이프가 인스턴스화될 때, 이들 은 개별 스레드로서 또는 협동 스레드로서 실행될 수 있다.
6개의 상이한 포트(예를 들어, 4개의 판독 및 2개의 기입)가 어드레스 레지스터 파일 유닛(515)에 의해 액세스될 수 있다. 이들 레지스터는 스칼라 실행 유닛으로부터 또는 정수 유닛(505) 또는 어드레스 유닛(503)의 결과로부터 파라미터를 수신한다. DAG(503)는 또한 수집 제어기로서 기능하며, 데이터 저장 메모리(511; 예를 들어 RA0, RA1, RA2, RA3, WA0 및 WA1)의 내용에 어드레스하기 위해 레지스터들의 분배를 관리한다. 크로스바(516)가 주어진 명령을 구현하기 위해 출력 데이터 포트들(R0, R1, R2, R3)을 임의의 순서/조합으로 벡터 데이터 경로(504)에 할당하도록 연결된다. 벡터 데이터 경로(504)의 출력은 지시되는 바와 같이(예를 들어, W0) 데이터 저장 메모리(511)로 피드백될 수 있다. 상수 RAM(517)이 정수 유닛(505)에서 벡터 데이터 경로(504) 및 데이터 저장 메모리(511)로 자주 사용되는 피연산자를 제공하는 데 사용된다.
도 6은 본 발명의 일 실시예에 따른 메모리(600)의 복수의 뱅크(601-604) 및 대칭 타일 어레이를 가진 데이터 저장 메모리(610)의 레이아웃을 나타낸다. 도 6에 도시된 바와 같이, 설명을 위해, 데이터 저장 메모리(610)의 일부만이 도시된다. 데이터 저장 메모리(610)는 논리적으로 타일들의 어레이(또는 어레이들)를 포함한다. 각각의 타일은 4x4 형태의 서브 타일들의 어레이이다. 물리적으로, 메모리(600)로 도시된 바와 같이, 데이터 저장 메모리(610)는 "N" 개의 물리적 메모리 뱅크(예를 들어, 뱅크 601-604)의 어레이 내에 저장된다.
또한, 데이터 저장 메모리(610)는 스트림 내의 논리적 타일을 시각적으로 도 시한다. 도 6의 실시예에서, 이 타일은 16 바이트의 높이와 16 바이트의 폭을 갖는다. 이 타일은 서브 타일들의 어레이이다(이 예에서는 4x4). 각각의 서브 타일은 물리적 뱅크 내에 저장된다. 8개의 물리적 메모리 뱅크(예를 들어, 뱅크 0 내지 7)가 존재하는 경우, 이것은 도 6에서 각각의 4x4 서브 타일 내의 수로 표시된다. 뱅크들 내의 서브 타일들의 구성은 서브 타일들의 2x2 배열 내에 공통 뱅크가 존재하지 않도록 이루어진다. 이것은 어떠한 뱅크 충돌 없이 임의의 비정렬 액세스(예를 들어, x 및 y 방향 양자에서)를 가능하게 한다.
뱅크들(601-604)은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 예를 들어, 하나의 사례에서, 크로스바(516)는 뱅크(601)로부터 2x4 타일 세트(예를 들어, 뱅크(601)의 최초 2행)를 액세스할 수 있다. 다른 사례에서, 크로스바(516)는 2개의 인접 뱅크로부터 1x8 타일 세트를 액세스할 수 있다. 마찬가지로, 다른 사례에서, 크로스바(516)는 2개의 인접 뱅크로부터 8x1 타일 세트를 액세스할 수 있다. 각각의 사례에서, DAG/콜렉터(503)는 뱅크들이 크로스바(516)에 의해 액세스될 때 타일들을 수신하여, 이 타일들을 클럭 단위로 벡터 데이터 경로(504)의 프론트 엔드에 제공할 수 있다.
이러한 방식으로, 본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새로운 비디오 프로세서 아키텍처를 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위하여 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다. 본 발명의 실시예들은 예를 들어 MPEG-2/WMV9/H.264 인코드 지원(예를 들어, 루프내 디코더), MPEG-2/WMV9/H.264 디코드(예를 들어, 포스트 엔트로피 디코딩), 및 루프내/루프외 비블록킹 필터와 같은 다수의 정교한 비디오 처리 동작을 제공할 수 있다.
본 발명의 실시예들에 의해 제공되는 추가적인 비디오 처리 동작은 예를 들어 향상된 모션 적응 디인터레이싱, 인코딩을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 및 서브 픽처 합성을 포함한다. 본 발명의 비디오 프로세서 아키텍처는 또한 예를 들어 칼라 공간 변환, 칼라 공간 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 조작, 및 다양한 비디오 표면 포맷 변환과 같은 소정의 비디오 프로세서-증폭기(프로캠프) 애플리케이션에 이용될 수 있다.
광범위하게 그리고 제한 없이, 본 발명은 다음을 개시하였다. 비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 설명되었다. 이 시스템은 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스, 호스트 인터페이스에 연결되고 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 호스트 인터페이스에 연결되고 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작하게 하기 위한 커맨드 FIFO가 포함된다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고 벡터 실행 유닛에 대한 데이터 및 명령을 커맨드 FIFO에 로딩하기 위한 DMA 엔진이 메모리 인터페이스 내에 구축된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서가 설명되었 다. 비디오 프로세서는 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스를 포함한다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 스칼라 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템이 설명되었다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리가 포함된다. 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 가진 복수의 타일을 포함한다. 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 스트림 기반 메모리 액세스 시스템이 설명되었다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리가 포함된다. 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 설정하기 위한 메모리 인터페이스가 포함된다. 프레임 버퍼 메모리는 복수의 타일을 포함한다. 메모리 인터페이스는 벡터 실행 유닛 또는 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포 함하는 제1 스트림을 구현하고 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현한다.
본 발명의 특정 실시예들의 전술한 설명은 예시 및 설명을 위해 제공되었다. 이들은 고갈적이거나 본 발명을 개시된 특정 형태로 한정하려는 것은 아니며, 위의 가르침에 비추어 많은 수정 및 변형이 가능하다. 실시예들은 발명의 원리 및 그의 실제 이용을 가장 잘 설명하여 이 분야의 전문가들이 고려된 특정 이용에 적합할 때 발명 및 다양한 수정이 이루어진 다양한 실시예를 가장 잘 이용할 수 있도록 하기 위하여 선택되고 설명되었다. 본 발명의 범위는 첨부된 청구범위 및 그의 균등물에 의해 정의되는 것을 의도한다.
부록 A
1 개요
VP2는 스칼라 제어 프로세서에 연결된 VLIW SIMD 비디오 DSP이다. 그의 주 초점은 비디오 코덱 및 비디오 기저 대역 처리이다.
1.1 VP2 .0의 정신
- 효율: VP2.0은 perf/mm2 및 perf/mW의 면에서 비디오 애플리케이션들에 대한 연산 효율적인 머신이다.
- 프로그래밍 가능성: 매우 프로그래머블하고, 쉽게 호환 가능하며, 머신을 프로그래밍하는 데 보다 안전하다.
- 스케일링 가능성: VP2.0 설계/아키텍처는 다수의 애플리케이션 영역에 대한 성능 요건과 매칭되도록 스케일링 가능해야 한다.
1.2 설계 목표
- 연산 밀도
- VP1.0보다 상당한 perf/mm2 이점을 제공한다.
- H.264와 같은 새로운 애플리케이션 영역의 효율적인 구현
- SW 개발자의 부담을 덜어주는 HW에서의 지연 감내
- 메모리 액세스 및 연산을 재배열함으로써 데이터 페치 지연을 숨김
- 명령 스트림의 자동 프리페치
- 데이터 경로 지연의 숨김
- 중간 결과의 선택적 전달
- 스트리밍 연산 모델
- 스케일링 가능성
- 구조적으로 VP2 벡터 유닛은 2x 만큼 위로, 그리고 1/2x 만큼 아래로 그의 데이터 경로를 스케일링할 수 있다.
- 선택적 리파이프라이닝에 의해 주파수 개선이 달성될 수 있다.
1.3 애플리케이션 타겟
VP2.0 설계 및 명령 세트는 다음의 애플리케이션을 매우 효율적으로 수행하도록 최적화된다.
- mpeg2/wmv9/H.264 인코드 지원(루프내 디코더)
- mpeg2/wmv9/H.264 디코드(포스트 엔트로피 디코딩)
- 루프내/루프외 디블록킹 필터
- 향상된 모션 적응 디인터레이싱
- 인코딩을 위한 입력 잡음 필터링
- 다위상 스케일링/리샘플링
- 서브 픽처 합성
- 프로캠프, 칼라 공간 변환, 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 동작들 등
- 다양한 비디오 표면 포맷 변환 지원
구조적으로 VP2.0은 다음 영역에서 효율적일 수 있다.
- 2D 원시 함수, 블릿, 로테이트 등
- 정밀 기반 소프트웨어 모션 추정 알고리즘
- 16/32 비트 MAC 애플리케이션
2 최상위 레벨 아키텍처
VP2.0 머신은 스칼라 및 벡터 프로세서로 분할되어 있다. 벡터 프로세서는 스칼라 프로세서에 대해 슬레이브 코프로세서로서 동작한다. 스칼라 프로세서는 벡터 프로세서에 제어 스트림(파라미터, 서브 루틴 독립 변수)을 공급하고 벡터 프로세서로의 데이터 I/O를 관리하는 것을 담당한다. 알고리즘의 모든 제어 흐름은 스칼라 머신 상에서 실행되는 반면, 실제의 픽셀/데이터 처리 동작은 벡터 프로세서 상에서 행해진다.
스칼라 프로세서는 대표적인 RISC 스타일 스칼라이고, 벡터 코프로세서는 1 또는 2개의 SIMD 파이프(각 SIMD 파이프는 16 픽셀 데이터 경로를 가짐)를 가진 SIMD 머신이다. 따라서, 벡터 코프로세서는 순수 연산 능력으로서 결과의 최대 32 픽셀을 생성할 수 있다.
스칼라 프로세서는 메모리 맵핑된 커맨드 FIFO를 이용하여 벡터 코프로세서에 기능 호출들을 전송한다. 코프로세서 커맨드는 이 FIFO에 큐잉된다. 스칼라 프로세서는 이 FIFO를 이용하여 벡터 프로세서로부터 완전히 분리된다. 스칼라 프로세서는 그 자신의 클럭 상에서 실행될 수 있다. 벡터 프로세서는 요구 구동 유닛으로서 동작한다.
VP2.0의 최상위 레벨도가 아래에 주어진다.
Figure 112008058758713-pat00001
VP2.O은 개별 스칼라 코드 및 벡터 코드로 컴파일된 후, 후에 함께 링크될 수 있다. 별개로, 벡터 함수들은 개별적으로 작성될 수 있으며, 서브 루틴 또는 라이브러리 함수로서 스칼라 스레드에 제공될 수 있다. 스칼라 프로세서는 그 자신의 명령 및 데이터 캐시를 갖는다. 벡터 유닛도 명령 캐시 및 데이터 RAM(데이터 저장 메모리로 지칭됨)을 갖는다. 이들 2개의 엔진은 분리되고, FIFO를 통해 통신한다.
3 단순 프로그래밍 모델
VP2.0에 대한 가장 간단한 프로그래밍 모델은 벡터 슬레이브 코프로세서 상에서 서브 루틴 호출을 실행하는 스칼라 제어 프로그램이다. 여기서 프로그래머는 문제를 2개의 스레드로 분해하였다는 고유한 가정이 존재한다. 스칼라 프로세서 상에서 실행되는 스레드는 재빨리 작업 파라미터를 계산하고 이들을 주 기계인 벡터 프로세서에 공급한다. 이들 2개의 스레드를 위한 프로그램은 개별적으로 작성되고 컴파일되는 것으로 예상된다.
스칼라 스레드는 다음을 담당한다.
1. 호스트 유닛과의 인터페이싱 및 클래스 인터페이스 구현
2. 벡터 유닛의 초기화, 셋업 및 구성
3. 루프 내의 작업 유닛들, 청크들 또는 작업 세트들 내의 알고리즘을 실행하여 각각의 반복은
a. 현재 작업 세트에 대한 파라미터를 계산한다.
b. 입력 데이터의 벡터 프로세서로의 전달을 개시한다.
c. 벡터 프로세서로부터의 출력 데이터의 전달을 개시한다.
스칼라 스레드의 대표적인 실행 모델은 파이어 앤드 포겟이다. 이것은 벡터 코프로세서로부터 리턴 데이터가 존재하지 않는 비디오 기저 대역 처리에 대한 대표적인 모델일 것으로 예상된다. 스칼라 프로세서는 커맨드 FIFO 내에 공간이 존재할 때까지 벡터 프로세서에 대한 스케쥴링 작업을 유지할 것이다. 벡터 프로세 서에 의한 서브 루틴의 실행은 주로 주 메모리로부터의 지연으로 인해 적시에 지연된다. 따라서, 벡터 측에 지연 보상 메카니즘을 제공하는 것이 중요하다. VP2.0에서, 벡터 프로세서는 명령 및 데이터 트래픽 양자에 대한 지연 보상을 제공한다. 그를 위한 메카니즘이 섹션에서 요약된다.
대표적인 VP 프로그램은 아래와 같을 것이다.
Figure 112008058758713-pat00002
보다 복잡한 프로그래밍 모델은 2개의 데이터 파이프를 가질 때이다. 또는, 2개의 파이프에 대한 코드를 작성하고 이를 하나의 데이터 파이프 머신 상에서 실행시키기를 원할 때이다. 그를 위한 프로그래밍 모델은 섹션 6에서 조사된다.
4 스트리밍 모델
앞에서 요약된 바와 같이, 스칼라 엔진은 벡터 프로세서 상의 연산 개시를 담당한다. 스칼라 엔진에서 벡터 엔진으로 전달되는 커맨드는 다음 주요 타입을 갖는다.
1. 현재 작업 세트 데이터를 메모리에서 벡터 엔진의 데이터 RAM으로 전달하기 위해 스칼라에 의해 개시되는 판독 커맨드(memRd)
2. 스칼라에서 벡터로 전달되는 파라미터
3. 실행될 벡터 서브 루틴의 PC 형태의 실행 커맨드
4. 벡터 연산의 결과를 메모리에 복사하기 위해 스칼라에 의해 개시되는 기입 커맨드(memWr)
벡터 프로세서는 이들 커맨드의 수신시에 즉시 프레임 버퍼(FB) 인터페이스에 대해 memRd 커맨드를 스케쥴링한다. 또한, 실행 커맨드를 검사하고, 실행될 벡터 서브 루틴을 프리페치한다(캐시 내에 존재하지 않는 경우). 하나의 목적은 벡터 엔진이 현재 실행 커맨드 상에서 작업하고 있는 동안 다음 소수의 실행 커맨드의 명령 및 데이터 스트림을 미리 스케쥴링하는 것이다. 이러한 판독 요청을 재빨리 행하기 위하여, 벡터 엔진은 하드웨어에서 데이터 저장 메모리 및 명령 캐시를 관리한다.
데이터 저장 메모리는 벡터 프로세서의 작업 RAM이다. 스칼라 프로세서는 이 데이터 저장 메모리를 FIFO 또는 스트림의 집합으로 본다. 스트림들은 본질적으로 스칼라가 전달을 개시하는 입출력 FIFO이다. 입출력 스트림이 가득 차면, 벡터 DMA 엔진은 스칼라로부터 커맨드 FIFO의 처리를 중지하며, 곧 가득 차게 된다. 따라서, 스칼라는 벡터 엔진에 대한 더 이상의 작업 발행을 중지한다. 입출력 스트림 외에, 벡터는 중간 스트림을 필요로 할 수 있다. 따라서, 전체 데이터 저장 메모리는 스칼라 측으로부터 스트림의 집합으로서 보여질 수 있다. 각각의 스트림은 타일이라고 하는 작업 2D 청크들의 FIFO이다. 벡터 프로세서는 각각의 스트림에 대해 판독 타일 포인터 및 기입 타일 포인터를 유지한다. 입력 스트림에 대해, 벡터 서브 루틴이 실행될 때, 현재(판독) 타일로부터 소비하거나 판독할 수 있다. 그 배경에서, 데이터는 memRd 커맨드에 의해 현재(기입) 타일로 전송된다. 벡터 프로세서는 또한 출력 스트림에 대한 출력 타일을 생성할 수 있다. 이어서, 이 타일들은 실행 커맨드에 이어지는 memWr() 커맨드에 의해 메모리로 이동된다.
이 모델은 비디오와의 서브 픽처 혼합에 대한 예로 설명된다. 예를 들어, 비디오 표면(예를 들어, NV12 포맷)이 서브 픽처와 혼합된 후 ARGB 표면으로 변환되는 간단한 예를 고려한다. 이들 표면은 메모리 내에 위치한다. 스칼라 프로세서는 이들 표면의 청크들(타일들)을 판독하여 이들을 데이터 저장 메모리 내에 로딩한다. 다수의 입력 표면이 존재하므로, 다수의 입력 스트림을 유지해야 한다. 각각의 스트림은 상이한 수의 타일을 가질 수 있는 반면(예를 들어, 이 예에서, 서브 픽처 표면이 시스템 메모리 내에 있는 것으로 가정할 수 있고, 따라서 그것을 더 버퍼링해야 한다), 비디오 스트림은 보다 적은 수의 타일들을 가질 수 있다.
Figure 112008058758713-pat00003
5 벡터 코프로세서
VP2의 벡터 코프로세서는 비디오 기저대역 처리 및 코덱을 위해 설계된 VLIW DSP이다. 이 프로세서의 몇 가지 중요한 설계 속성은 다음을 포함한다.
1. 스케일링 가능한 성능, 1 또는 2개의 데이터 파이프.
2. 각각의 파이프가 2개의 데이터 어드레스 생성기(DAG)를 구비한다.
3. 메모리/레지스터 피연산자
4. 2D (x,y) 포인터/반복기
5. 디프 파이프라인 (11-12) 스테이지
6. 스칼라(정수)/분기 유닛
7. 가변 명령 폭(긴/짧은 명령)
8. 피연산자 추출을 위한 데이터 정렬기
9. 대표적인 피연산자 및 결과의 2D 데이터 경로 (4x4) 형상
10. 스칼라 프로세서에 대한 슬레이브 프로세서, 원격 프로시저 호출을 실행한다.
벡터 코프로세서의 프로그래머의 뷰는 가장 간단한 용어로 2개의 DAG를 구비한 SIMD 데이터 경로이다. 명령들은 VLIW 방식으로 발행된다(즉, 명령들은 벡터 데이터 경로 및 어드레스 생성기에 대해 동시에 발행된다). 명령들은 가변 길이를 가지며, 가장 일반적으로 사용되는 명령들은 짧은 형태로 인코딩된다. 풀 명령 세트는 긴 형태로 이용 가능하다. 예를 들어, 프로그래머의 관점에서, 다양한 기능 유닛 및 레지스터/SRAM 자원들의 배열은 아래 나타낸 바와 같다.
Figure 112008058758713-pat00004
벡터 유닛은 단일 데이터 파이프 또는 듀얼 데이터 파이프를 인스턴스화한다. 각각의 데이터 파이프는 로컬 RAM(데이터 저장 메모리), 2개의 DAG 및 SIMD 실행 유닛으로 구성된다. 기본 구성에 있어서는 하나의 데이터 파이프만이 존재한다. 2개의 데이터 파이프가 존재할 때, 이들은 독립적인 스레드로서 또는 협동 스레드로서 실행될 수 있다. 벡터 프로세서의 완전한 파이프라인도가 아래에 기술된다. 여기서, 전체 구성은 2개의 데이터 파이프를 갖는다.
Figure 112008058758713-pat00005
6 향상된 프로그래밍 모델
섹션 3에서, 기본 아키텍처를 설명하기 위하여 RPC 모델이 소개되었다. 이 섹션에서는 보다 향상된 개념이 소개된다.
6.1 듀얼 데이터 파이프 구성
듀얼 파이프 구성에서는 아래의 프로세서 자원들이 공유된다.
- 스칼라 제어기
- 벡터 코프로세서 내의 벡터 제어 유닛
- 명령/데이터 페치를 위한 DMA 엔진
- 명령 캐시(듀얼 포트화될 수 있다)
다음의 자원들이 복제된다.
- 데이터 파이프(어드레스/분기/벡터 실행 유닛)
- 데이터 저장 메모리
- 레지스터 파일
다음과 같은 점에 유의해야 한다.
1. 1 파이프만을 가진 인스턴스 상에서 2 파이프에 대해 프로그램이 작성될 수 있다. 벡터 제어 유닛은 동일 물리적 파이프 상에 각 파이프에 대한 실행 커맨드를 맵핑할 것이다. 그러나, 양 파이프에 대한 스트림이 단지 하나의 데이터 저장 메모리에만 존재하므로, 데이터 저장소의 크기는 조정되어야 한다. 간단한 방법은 타일 크기를 줄이거나 스트림 내의 타일들의 수를 반감시키는 것이다. 이것은 구성시에 스칼라 스레드에 의해 행해진다. 마이크로 아키텍처 스테이지에서 해결되어야 하는 글로벌 레지스터의 복제 및 스트림 맵핑과 같은 문제가 존재한다.
2. 1 파이프에 대해 작성된 프로그램은 2 파이프를 가진 인스턴스 상에서 실행될 수 있다. 그러나, 이 코드는 하나의 파이프 상에서만 실행되고 나머지 파이프는 사용하지 않는다. 머신은 절반이 유휴 상태가 된다.
3. 2개의 완전히 상이한 스레드를 각각 실행하는 2 파이프에 대해 프로그램이 작성될 수 있다. 멀티 스레드화되지 않은 단일 스칼라만을 구비하므로, 이것은 바람직하지 않을 수 있다. 하나의 스칼라 실행 스레드만을 지원하므로, 이것은 바람직하지 않을 수 있지만, 이 모델은 지원될 수도 있다.
4. 동일 스레드를 각각 실행하는 2 파이프에 대해 프로그램이 작성될 수 있다. 이것은 대부분의 비디오 기저대역 처리와 같은 병렬 가능 알고리즘에 대해 예상되는 대표적인 모델이다. 이것은 비디오의 2개의 스트림 또는 2개의 절반 등에서 동작하기 위해 동일 명령 스트림을 사용하는 것을 허용한다. 각각의 데이터 파이프는 그 자신의 실행 유닛 및 데이터 저장소를 갖는다. 스칼라 제어기는 2개의 데이터 파이프를 제공해야 한다. 그러나, 파라미터, 판독 및 기입 커맨드는 서로 관련되며(오프셋), 따라서 스칼라 성능 요건이 정확하게 2배로 상승하는 것은 아니다. 이 모델의 일례가 아래에 도시된다.
Figure 112008058758713-pat00006
5. 2개의 협동 스레드를 갖는 프로그램이 작성될 수 있다. 이것은 단일 스칼라 제어 스레드를 갖지만 다수의 기능적인 벡터 기능 블록이 함께 접속되는 것이 필요할 수 있는 코덱에 대해 예상되는 모델이다. 이것은 기능 블록들의 다이렉트-쇼우 핀 모델과 유사하다. 이러한 애플리케이션의 일례가 아래 도시된다. 이 모 델은 단지 2개의 협동 스레드로 제한되는데, 이는 2개의 데이터 파이프만을 갖기 때문이다. 또 하나의 제한은 스레드들이 2개의 스레드 사이에 균형을 이루어야 한다는 것이다. 그렇지 않으면 성능 손실이 발생한다. 이러한 제한 내에서, 이 모델은 2개의 데이터 파이프 상에서 동작하며, 또한 단일 파이프로 스케일링될 수 있다.
Figure 112008058758713-pat00007
6. 2개의 데이터 파이프가 서로 동기화될 수 있다. 동기화에 대한 기본 접근법은 데이터 구동 방식이다. 벡터 함수들은 데이터가 프로세스에 이용 가능할 때 실행된다. 스트림들은 메모리로부터의 판독들 또는 다른 데이터 파이프로부터의 기입들에 의해 채워진다. 데이터가 이용 가능하면, 벡터 제어 유닛은 실행 커맨드를 활성화시켜 실행한다. 스트림들은 또한 카운팅 세마포어로서 사용될 수 있다. 스칼라 제어기 및 벡터 데이터 파이프 양자는 타일 포인터들을 증감시킬 수 있으며, 데이터 전달이 존재하지 않는 경우에도 스트림 기술자를 카운팅 세마포어로서 사용할 수 있다.
보충 개요:
일반적으로, 본 발명의 실시예들은 다음을 수행한다.
1. 매체 알고리즘의 스칼라 및 벡터 부분으로의 분해
오프 더 셀프 스칼라 설계, 이는 또한 전력 및 성능 요건에 기초하여 상이한 클럭 속도로 스칼라 및 벡터 부분을 실행할 수 있는 능력을 제공한다.
2. 스트림 처리
3. 2D 데이터 경로 처리
4. 지연 숨김(데이터 및 커맨드 페치 양자에 대해)
애플리케이션 영역
숨김:
연산 코드 숨김
암호화 프로그램은 단지 칩을 숨길 수 있다. 스칼라/제어기 블록은 단지 특정 동작이 수행되는 것을 요구하며, 암호화 엔진은 명령 등을 페치할 것이다. 스칼라는 심지어 알고리즘이 실행되고 있는지를 알 수 없으므로, 매우 안전하다. 이것은 사용자로부터 암호화 알고리즘을 숨기기 위한 메카니즘을 제공한다.
2D
VP2 명령 세트 아키텍처는 2D 처리를 위한 명령들을 지원한다. 이들은 많은 GUI/윈도우 시스템에 사용되는 ROP3 및 ROP4 지원을 포함한다. 이것은 매체 프로 세서가 매체 프로세서 상에서 2D 연산을 실행하는 것을 가능하게 한다. 여기서 고유한 이점은 전력 절감이다.
ISA
명령 슬롯으로서의 조건 코드:
조건 코드 연산을 위해 (다중 발행 명령 번들 내의) 개별 발행 슬롯을 구비한다. 종래 기술은 조건 코드/술어 레지스터에 영향을 미칠 수도 있는 사람 사용 SIMD 명령이다. 그러나, VP2에서 취해지는 접근법에서, 데이터 처리 및 술어 레지스터 처리는 독립적으로 스케쥴링되어, 보다 높은 성능을 얻을 수 있다.
메모리 I/O
마이크로코드화된 DMA 엔진:
DMA 엔진은 스트림에 대한 데이터 프리페치, 데이터 스트림 포맷팅, 에지 패딩 등과 같은 다양한 동작을 수행하도록 프로그래밍될 수 있다(또는 그 자신의 작은 마이크로코드를 가질 수 있다). 일반적으로, 프로그래머블 DMA 엔진이며, 유선 기능은 없다. 따라서, 메모리 I/O 프로세서와 매체 처리 코어의 조합은 전체 시스템 레벨 성능을 향상시킨다. 매체 프로세서 코어는 데이터 I/O 처리를 행해야 하는 부담이 없다.
메모리 계층 구조:
VP2 아키텍처에서, 메모리 계층 구조는 메모리 BW를 최소화하는 것은 물론 지연 보상을 제공하도록 최적화된다. 다음과 같은 많은 상이한 스킴이 제공된다.
- 스크래치 RAM으로서 벡터 코어에게 보일 수 있는 스트리밍 데이터 저장소 의 제1 레벨. 스칼라 프로세서에 의해 생성된 요구 스트림을 사전에 조사하도록 HW에 의해 관리된다. 이 데이터 저장소는 데이터 재사용을 위한 L2 캐시에 의해 옵션으로 보강된다. L2 캐시는 스트림 기반으로 개별 섹터들로 분할될 수 있다.
- 스트리밍 데이터 저장소에 의해 보강된 L1 캐시. 데이터 저장소는 다음 관련 데이터 세트를 프리페치하였다.
- 스트림 포인터를 데이터 태그로서 사용하는 캐시
- 스칼라 생성 스트림 어드레스를 이용한 L1 데이터 저장소 및 L2 캐시의 프리페치/캐싱
최적화된 스칼라-벡터 통신 링크:
MemRd/Wr 포맷:
시스템 메모리를 로컬 메모리로 판독 및 기입하기 위한 스칼라로부터의 콤팩트 커맨드. DMA 엔진을 관리하는 데 필요한 제어 흐름 대역폭 상에 저장한다. 동시에 지원 트랜잭션들의 타입을 제한하지 않는다.
벡터 L2에 대한 스칼라-벡터에 관한 고찰:
통신 대역폭을 줄이기 위해 파라미터 변경자 및 반복기를 지원하는 파라미터 압축.
파이프라인 캐시:
파이프라인화된 명령 캐시. 다음과 같이 다양한 스킴이 지원된다.
- 벡터와 스칼라 프로세서 사이의 인 플라이트 실행을 추적함으로써 각 캐시 라인의 수명을 관리한다. 이것은 벡터 프로세서가 실행을 시작하기 전에 명령들이 준비되는 것을 가능하게 한다. 명령들이 아직 캐시 내에 있지 않은 경우, 명령들은 프리페치된다.
- 적은 지연 구성에 대해, 명령 캐시는 작은 FIFO로 변경됨으로써 최소화된다. FIFO 내의 기존 실행들이 재이용될 수 있으며, 그렇지 않은 경우 다시 페치된다.
전체 아키텍처:
데이터 저장소는 다양한 처리 요소 사이에 공유될 수 있다. 이들은 스트림을 통해 통신하며 서로 공급할 수 있다. 이 아키텍처는 SIMD 벡터 코어들, DMA 엔진들, 스트림을 통해 접속된 고정 함수 유닛들과 같은 한 세트의 이종 기능 유닛들을 구상한다.
연산/DP
임의/유연 형상/절반 파이프:
데이터 경로는 가변 형상들 상에서 동작한다. 데이터 경로의 형상은 문제 세트에 매칭되도록 구성될 수 있다. 일반적으로, 사람들은 1D 데이터 경로를 행한다. VP2는 알고리즘에 매칭되도록 4x4, 8x4 또는 16x1 등의 가변 크기를 가질 수 있는 형상을 처리할 수 있다.
스케일링 가능성:
VP2 데이터 경로 아키텍처는 면적을 줄이기 위하여 다수의 사이클을 통해 보다 좁은 데이터 경로 상에서 보다 넓은 SIMD 명령들을 실행하기 위하여 명령 안내 기술을 이용한다(주: 16 웨이 SIMD 파이프를 갖는데, 각각의 피연산자는 1바이트 폭을 갖는다. 8 웨이 SIMD 파이프(2개의 파이프를 함께 그룹화함) 및 각각의 피연산자가 2 바이트인 보다 넓은 SIMD 데이터 경로를 가질 수 있으며, 마찬가지로 4 웨이 SIMD 파이프(4개의 파이프를 함께 그룹화함) 및 각각의 피연산자가 4 바이트인 보다 넓은 SIMD 데이터 경로를 가질 수 있다).
예를 들어, VP2는 데이터 경로를 16 웨이 SIMD에서 8 웨이 SIMD로 스케일링할 수 있다.
바이트 레인들의 연결:
피연산자 폭을 증가시키기 위한 SIMD 웨이들의 연결. 예를 들어, 현재 16 웨이 SIMD는 8 비트 피연산자를 갖는다. 이것을 8 웨이 SIMD의 16 비트 피연산자 및 4 웨이 SIMD의 32 비트 피연산자로 증가시킬 수 있다.
SIMD 어드레스 생성기
SIMD 파이프의 각 웨이에 대한 개별 스트림 어드레스 생성기.
VP2는 요청들이 데이터 저장소에 대한 최소 액세스로 합체된 SIMD 어드레스 생성기를 이용할 수 있다.
크로스바 및 콜렉터를 이용한 데이터 확장
크로스바를 이용하여 보다 많은 데이터 피연산자를 생성할 수 있는 능력. 판독 포트 압력을 줄이고 전력을 줄인다.
X2 명령들:
모든 명령들이 데이터 경로 내의 모든 HW 요소(가산기/승산기)를 이용할 수 있는 것은 아니다. 따라서, 복잡한 명령보다 넓은 데이터 형상을 처리할 수 있는 덧셈/뺄셈과 같은 간단한 명령에 대해 가능하다. 따라서, 성능을 최소 공통 크기로 제한하는 대신에, VP2는 판독 포트들이 동작 대역폭을 유지할 수 있는 한 보다 넓은 형상 상에서 동작하도록 적절히 시도하는 유연한 명령 세트를 이용한다.
멀티스레드/멀티코어 매체 처리
VP2 아키텍처은 다음과 같은 다양한 멀티스레딩 옵션을 지원한다.
- 멀티스레드 스칼라 프로세서는 스트림을 통해 접속된 다수의 벡터 유닛 상에서 프로시저 호출을 스케쥴링한다.
- 다수의 스레드는 명령 단위 또는 실행 단위의 스레드 스위칭에 의해 단일 벡터 엔진 상에서 실행된다.
상이한 벡터/스칼라를 이용한 전력 관리
스칼라 및 벡터 부분이 분리되는 경우, 전력 및 성능 요건에 기초하여 이들 2 블록을 상이한 속도로 실행할 수 있다.
콘텍스트 스위치:
이 매체 프로세서는 레지스터가 없는 구조를 가지므로 매우 빠른 콘텍스트 스위치를 지원하는 능력을 갖고 있다. HW 지원이 스칼라-벡터 커맨드 큐를 추적하고, 이것을 저장하고 재생하여 콘텍스트 스위칭을 달성하기 위해 존재한다. 또한, 콘텍스트 스위치는 페이지 고장시에 개시될 수 있다.
이것은 매체 프로세서가 입출력 디스플레이 처리와 같은 실시간 처리 태스크를 유지하면서 디스플레이 파이프라인을 공급하기 위해 2D 가속화 또는 최적시의 비디오 향상과 같은 비 실시간 태스크를 지원할 수 있게 한다.
이러한 콘텍스트 스위치 능력은 그의 명령 세트와 함께 VP2가 통합 픽셀/코덱 처리하는 것을 가능하게 한다.
데이터 구성:
VP2는 다음과 같은 특성을 가진 데이터 저장소 구성을 이용한다.
각 방향으로 최대 16 픽셀이 뱅크 충돌없이 액세스될 수 있다. 이것은 스트라이드 요건을 최소로 유지하면서 행해진다.
데이터 저장소 구성은 데이터 형상들의 효율적인 전이를 가능하게 한다.
2D 어드레싱이 데이터 저장소 내에서 지원되어, 비디오와 같은 대부분의 매체 처리 애플리케이션에서 선형 어드레스의 SW 연산을 제거한다.
Figure 112008058758713-pat00008
Figure 112008058758713-pat00009
Figure 112008058758713-pat00010
Figure 112008058758713-pat00011
Figure 112008058758713-pat00012
Figure 112008058758713-pat00013
Figure 112008058758713-pat00014
Figure 112008058758713-pat00015
Figure 112008058758713-pat00016
Figure 112008058758713-pat00017
Figure 112008058758713-pat00018
Figure 112008058758713-pat00019
Figure 112008058758713-pat00020
Figure 112008058758713-pat00021
Figure 112008058758713-pat00022
Figure 112008058758713-pat00023
Figure 112008058758713-pat00024
본 발명은 한정적이 아니라 예시적으로 설명되며, 첨부 도면들에서 동일한 참조 번호는 유사한 요소를 나타낸다.
도 1은 본 발명의 일 실시예에 따른 컴퓨터 시스템의 기본 컴포넌트를 나타내는 개략도.
도 2는 본 발명의 일 실시예에 따른 비디오 프로세서의 내부 컴포넌트를 나타내는 도면.
도 3은 본 발명의 일 실시예에 따른 비디오 프로세서에 대한 예시적인 소프트웨어 프로그램을 나타내는 도면.
도 4는 본 발명의 일 실시예에 따른 비디오 프로세서를 이용하는 비디오와의 서브 픽처 혼합의 일례를 나타내는 도면.
도 5는 본 발명의 일 실시예에 따른 벡터 실행 유닛의 내부 컴포넌트를 나타내는 도면.
도 6은 본 발명의 일 실시예에 따른 대칭 타일 어레이를 구비한 데이터 저장 메모리의 레이아웃을 나타내는 도면.

Claims (15)

  1. 비디오를 처리하기 위한 시스템으로서,
    스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하고,
    상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하며, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스(collision-free access)를 지원하도록 구성되는 시스템.
  2. 제1항에 있어서,
    상기 시스템은 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템인 시스템.
  3. 비디오 처리 동작을 지원하기 위한 다차원 데이터 경로 처리용 시스템으로서,
    마더보드;
    상기 마더보드에 연결된 호스트 CPU; 및
    상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서
    를 포함하고,
    상기 비디오 프로세서는
    스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하고,
    상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하며, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스를 지원하도록 구성되는 시스템.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    (a) 내지 (f), 즉,
    (a) 상기 뱅크 데이터 구조들 각각은 4x4 또는 8x8 또는 8x16 또는 16x24 패턴으로 배열된 복수의 타일을 포함함;
    (b) 상기 뱅크 데이터 구조들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 상기 뱅크 데이터 구조들의 타일들의 행을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것임;
    (c) 상기 타일들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 인접한 상기 뱅크 데이터 구조들의 타일들의 열을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것임;
    (d) 상기 데이터 저장 메모리에 연결되고, 상기 복수의 뱅크 데이터 구조의 타일들을 액세스하기 위한 구성을 선택하기 위한 크로스바를 더 포함함;
    (e) 상기 크로스바는 데이터를 벡터 데이터 경로에 클럭 단위 기반으로 제공하기 위해 상기 복수의 뱅크 데이터 구조의 타일들을 액세스함;
    (f) 상기 크로스바에 의해 액세스되는 상기 복수의 뱅크 데이터 구조의 타일들을 수신하고, 상기 타일들을 벡터 데이터 경로의 프론트 엔드에 클럭 단위 기반으로 제공하는 콜렉터를 더 포함함
    중 적어도 하나를 포함하는 시스템.
  5. 비디오 처리 동작을 실행하기 위한 비디오 프로세서로서,
    상기 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스;
    상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스;
    상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하고,
    상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하며, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스를 지원하도록 구성되는 비디오 프로세서.
  6. 비디오 처리 동작을 실행하기 위한 시스템으로서,
    마더보드;
    상기 마더보드에 연결된 호스트 CPU; 및
    상기 마더보드 및 상기 CPU에 연결된 제5항의 상기 비디오 프로세서
    를 포함하는 시스템.
  7. 제5항에 있어서,
    (a) 내지 (c), 즉,
    (a) 상기 스칼라 실행 유닛은 상기 비디오 프로세서의 제어기로서 기능하고, 상기 벡터 실행 유닛의 동작을 제어함;
    (b) 상기 스칼라 실행 유닛을 상기 벡터 실행 유닛과 인터페이스하기 위한 벡터 인터페이스 유닛을 더 포함함;
    (c) 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛은 비동기적으로 동작하도록 구성됨
    중 적어도 하나를 포함하고,
    (d) 내지 (h), 즉,
    (d) 상기 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 상기 벡터 실행 유닛은 제2 클럭 주파수로 실행함;
    (e) 상기 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성되고, 상기 벡터 실행 유닛은 상기 애플리케이션의 픽셀 처리 동작을 실행하도록 구성됨;
    (f) 상기 벡터 실행 유닛은 상기 스칼라 실행 유닛의 제어하에 요구 구동 기반으로(on a demand driven basis) 동작하도록 구성됨;
    (g) 상기 스칼라 실행 유닛은 커맨드 FIFO를 이용하여 상기 벡터 실행 유닛에 기능 호출들(function calls)을 전송하도록 구성되고, 상기 벡터 실행 유닛은 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작함;
    (h) 상기 비디오 프로세서의 비동기적인 동작은 상기 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성됨
    중 적어도 하나를 포함하는 비디오 프로세서.
  8. 제6항에 있어서,
    (a) 내지 (e), 즉,
    (a) 상기 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 상기 벡터 실행 유닛은 제2 클럭 주파수로 실행함;
    (b) 상기 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성되고, 상기 벡터 실행 유닛은 상기 애플리케이션의 픽셀 처리 동작을 실행하도록 구성됨;
    (c) 상기 벡터 실행 유닛은 상기 스칼라 실행 유닛의 제어하에 요구 구동 기반으로(on a demand driven basis) 동작하도록 구성됨;
    (d) 상기 스칼라 실행 유닛은 커맨드 FIFO를 이용하여 상기 벡터 실행 유닛에 기능 호출들(function calls)을 전송하도록 구성되고, 상기 벡터 실행 유닛은 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작함;
    (e) 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛은 비동기적으로 동작하도록 구성되고, 상기 비디오 프로세서의 비동기적인 동작은 상기 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성됨
    중 적어도 하나를 포함하는 시스템.
  9. 비디오 처리 동작을 실행하기 위한 비디오 프로세서용 스트림 기반 메모리 액세스 시스템으로서,
    스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛;
    상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리;
    상기 스칼라 실행 유닛과 상기 벡터 실행 유닛과 상기 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하고,
    상기 프레임 버퍼 메모리는 복수의 타일을 포함하며, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하며, 상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하고, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스를 지원하도록 구성되는 시스템.
  10. 비디오 처리 동작을 지원하기 위해 스트림 기반 메모리 액세스들을 실행하는 시스템으로서,
    마더보드;
    상기 마더보드에 연결되는 호스트 CPU; 및
    상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서
    를 포함하고,
    상기 비디오 프로세서는,
    상기 비디오 프로세서와 상기 호스트 CPU 간의 통신을 설정하기 위한 호스트 인터페이스;
    상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛;
    상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 연결되고, 상기 스칼라 실행 유닛과 상기 벡터 실행 유닛과 프레임 버퍼 메모리 간의 스트림 기반 통신을 설정하기 위한 메모리 인터페이스; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하며,
    상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하며 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하고, 상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하며, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스를 지원하도록 구성되는 시스템.
  11. 제9항에 있어서,
    (a) 내지 (g), 즉,
    (a) 상기 제1 스트림 및 상기 제2 스트림은 적어도 하나의 프리페치된 타일(prefetched tile)을 포함함;
    (b) 상기 제1 스트림은 상기 프레임 버퍼 메모리 내의 제1 위치로부터 발원되고, 상기 제2 스트림은 상기 프레임 버퍼 메모리 내의 제2 위치로부터 발원됨;
    (c) 상기 메모리 인터페이스는 복수의 상이한 발원 위치로부터, 그리고 복수의 상이한 종료 위치까지의 복수의 스트림을 관리하도록 구성됨;
    (d) 상기 발원 위치들 중 적어도 하나 또는 상기 종료 위치들 중 적어도 하나는 시스템 메모리 내에 있음;
    (e) 상기 메모리 인터페이스 내에 구축되고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 판독을 구현하고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 기입을 구현하도록 구성된 DMA 엔진을 더 포함함;
    (f) 상기 제1 스트림은 상기 제2 스트림보다 더 많은 양의 지연을 경험하고, 상기 제1 스트림은 상기 제2 스트림보다 많은 수의 타일 저장용 버퍼들을 통합함;
    (g) 상기 메모리 인터페이스는 상기 제1 스트림 또는 상기 제2 스트림의 지연을 보상하기 위하여 상기 제1 스트림 또는 상기 제2 스트림의 조정 가능한 수의 타일을 프리페치하도록 구성됨
    중 적어도 하나를 포함하는 시스템.
  12. 비디오를 처리하기 위한 시스템으로서,
    비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스;
    상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛;
    상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛;
    커맨드 FIFO로서, 상기 벡터 실행 유닛이 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작할 수 있게 하는 커맨드 FIFO;
    상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스;
    상기 메모리 인터페이스 내에 구축되고, 복수의 상이한 메모리 위치들 간의 DMA 전달을 구현하고, 데이터 저장 메모리 및 명령 캐시에 상기 벡터 실행 유닛에 대한 데이터 및 명령을 로딩하기 위한 DMA 엔진; 및
    상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리
    를 포함하고,
    상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하며, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 충돌없는 액세스를 지원하도록 구성되는 시스템.
  13. 제12항에 있어서,
    상기 시스템은 비디오 처리 동작을 실행하기 위한 지연 감내 시스템(latency tolerant system)인 시스템.
  14. 제13항에 있어서,
    마더보드;
    상기 마더보드에 연결된 호스트 CPU; 및
    상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서
    를 더 포함하는 시스템.
  15. 제12항 내지 제14항 중 어느 한 항에 있어서,
    (a) 내지 (g), 즉,
    (a) 상기 벡터 실행 유닛은 요구 구동 기반으로 동작하기 위하여 상기 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 대하여 비동기적으로 동작하도록 구성됨;
    (b) 상기 요구 구동 기반은 상이한 메모리 위치들로부터 상기 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성됨;
    (c) 상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리를 구현하도록 구성되고, 상기 벡터 실행 유닛은 비디오 처리 작업 부하의 대부분을 구현하도록 구성됨;
    (d) 상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위해 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성됨;
    (e) 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성됨;
    (f) 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴 에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링됨;
    (g) 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되고, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링됨
    중 적어도 하나를 포함하는 시스템.
KR1020087020189A 2004-11-15 2005-11-14 비디오 처리 KR100917067B1 (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US62841404P 2004-11-15 2004-11-15
US60/628,414 2004-11-15
US11/267,599 US8416251B2 (en) 2004-11-15 2005-11-04 Stream processing in a video processor
US11/267,875 US8687008B2 (en) 2004-11-15 2005-11-04 Latency tolerant system for executing video processing operations
US11/267,599 2005-11-04
US11/267,700 2005-11-04
US11/267,638 2005-11-04
US11/267,638 US8493396B2 (en) 2004-11-15 2005-11-04 Multidimensional datapath processing in a video processor
US11/267,700 US8698817B2 (en) 2004-11-15 2005-11-04 Video processor having scalar and vector components
US11/267,875 2005-11-04

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020077010393A Division KR100880982B1 (ko) 2004-11-15 2005-11-14 비디오 처리

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020097002765A Division KR101002485B1 (ko) 2004-11-15 2005-11-14 비디오 처리

Publications (2)

Publication Number Publication Date
KR20080080419A KR20080080419A (ko) 2008-09-03
KR100917067B1 true KR100917067B1 (ko) 2009-09-15

Family

ID=36407688

Family Applications (5)

Application Number Title Priority Date Filing Date
KR1020087020189A KR100917067B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020077010393A KR100880982B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020097002765A KR101002485B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020117001766A KR101084806B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020107018048A KR101030174B1 (ko) 2004-11-15 2005-11-14 비디오 처리

Family Applications After (4)

Application Number Title Priority Date Filing Date
KR1020077010393A KR100880982B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020097002765A KR101002485B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020117001766A KR101084806B1 (ko) 2004-11-15 2005-11-14 비디오 처리
KR1020107018048A KR101030174B1 (ko) 2004-11-15 2005-11-14 비디오 처리

Country Status (5)

Country Link
EP (1) EP1812928A4 (ko)
JP (1) JP4906734B2 (ko)
KR (5) KR100917067B1 (ko)
CA (1) CA2585157A1 (ko)
WO (1) WO2006055546A2 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0519597D0 (en) * 2005-09-26 2005-11-02 Imagination Tech Ltd Scalable multi-threaded media processing architecture
WO2015035338A1 (en) 2013-09-06 2015-03-12 Futurewei Technologies, Inc. Method and apparatus for asynchronous processor with a token ring based parallel processor scheduler
US10275370B2 (en) * 2015-01-05 2019-04-30 Google Llc Operating system dongle
KR102067714B1 (ko) * 2016-11-17 2020-01-17 주식회사 엘지화학 배터리 모듈 및 이를 포함하는 배터리 팩
US20210141697A1 (en) * 2018-03-06 2021-05-13 DinoplusAI Holdings Limited Mission-Critical AI Processor with Multi-Layer Fault Tolerance Support
KR102067128B1 (ko) * 2018-06-07 2020-01-16 코츠테크놀로지주식회사 헬스 모니터링 장치 및 이를 포함하는 대화면 시현기
WO2022220835A1 (en) * 2021-04-15 2022-10-20 Zeku, Inc. Shared register for vector register file and scalar register file

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980018215A (ko) * 1996-08-19 1998-06-05 윤종용 비디오 데이터 처리방법 및 장치

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3614740A (en) * 1970-03-23 1971-10-19 Digital Equipment Corp Data processing system with circuits for transferring between operating routines, interruption routines and subroutines
US4101960A (en) * 1977-03-29 1978-07-18 Burroughs Corporation Scientific processor
US4541046A (en) * 1981-03-25 1985-09-10 Hitachi, Ltd. Data processing system including scalar data processor and vector data processor
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US4965716A (en) * 1988-03-11 1990-10-23 International Business Machines Corporation Fast access priority queue for managing multiple messages at a communications node or managing multiple programs in a multiprogrammed data processor
US4958303A (en) * 1988-05-12 1990-09-18 Digital Equipment Corporation Apparatus for exchanging pixel data among pixel processors
US5210834A (en) * 1988-06-01 1993-05-11 Digital Equipment Corporation High speed transfer of instructions from a master to a slave processor
US5040109A (en) * 1988-07-20 1991-08-13 Digital Equipment Corporation Efficient protocol for communicating between asychronous devices
JPH0795766B2 (ja) * 1989-06-30 1995-10-11 株式会社日立製作所 デジタル・データ通信装置及びそれに使用するデータ通信アダプタ
US5179530A (en) * 1989-11-03 1993-01-12 Zoran Corporation Architecture for integrated concurrent vector signal processor
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
EP0607988B1 (en) * 1993-01-22 1999-10-13 Matsushita Electric Industrial Co., Ltd. Program controlled processor
US5574944A (en) * 1993-12-15 1996-11-12 Convex Computer Corporation System for accessing distributed memory by breaking each accepted access request into series of instructions by using sets of parameters defined as logical channel context
JPH0877347A (ja) * 1994-03-08 1996-03-22 Texas Instr Inc <Ti> 画像/グラフィックス処理用のデータ処理装置およびその操作方法
JPH08153032A (ja) * 1994-11-29 1996-06-11 Matsushita Electric Ind Co Ltd ネットワーク経由データ先読みバッファ方法
JP3619565B2 (ja) * 1995-04-26 2005-02-09 株式会社ルネサステクノロジ データ処理装置、及びそれを用いたシステム
US6331856B1 (en) * 1995-11-22 2001-12-18 Nintendo Co., Ltd. Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5893066A (en) * 1996-10-15 1999-04-06 Samsung Electronics Co. Ltd. Fast requantization apparatus and method for MPEG audio decoding
US5949410A (en) * 1996-10-18 1999-09-07 Samsung Electronics Company, Ltd. Apparatus and method for synchronizing audio and video frames in an MPEG presentation system
JP3983394B2 (ja) * 1998-11-09 2007-09-26 株式会社ルネサステクノロジ 幾何学処理プロセッサ
US6496902B1 (en) * 1998-12-31 2002-12-17 Cray Inc. Vector and scalar data cache for a vector multiprocessor
JP3639464B2 (ja) * 1999-07-05 2005-04-20 株式会社ルネサステクノロジ 情報処理システム
US7093104B2 (en) * 2001-03-22 2006-08-15 Sony Computer Entertainment Inc. Processing modules for computer architecture for broadband networks
JP3840966B2 (ja) * 2001-12-12 2006-11-01 ソニー株式会社 画像処理装置およびその方法
US7305540B1 (en) * 2001-12-31 2007-12-04 Apple Inc. Method and apparatus for data processing
US6785772B2 (en) * 2002-04-26 2004-08-31 Freescale Semiconductor, Inc. Data prefetching apparatus in a data processing system and method therefor
US6957317B2 (en) * 2002-10-10 2005-10-18 Intel Corporation Apparatus and method for facilitating memory data access with generic read/write patterns
US20060064517A1 (en) * 2004-09-23 2006-03-23 Honeywell International Inc. Event-driven DMA controller

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980018215A (ko) * 1996-08-19 1998-06-05 윤종용 비디오 데이터 처리방법 및 장치

Also Published As

Publication number Publication date
JP2008521097A (ja) 2008-06-19
KR20070063580A (ko) 2007-06-19
KR101030174B1 (ko) 2011-04-18
KR100880982B1 (ko) 2009-02-03
KR20110011758A (ko) 2011-02-08
KR101002485B1 (ko) 2010-12-17
WO2006055546A9 (en) 2007-09-27
KR20090020715A (ko) 2009-02-26
EP1812928A2 (en) 2007-08-01
JP4906734B2 (ja) 2012-03-28
KR20080080419A (ko) 2008-09-03
WO2006055546A3 (en) 2008-06-19
KR101084806B1 (ko) 2011-11-21
EP1812928A4 (en) 2010-03-31
KR20100093141A (ko) 2010-08-24
CA2585157A1 (en) 2006-05-26
WO2006055546A2 (en) 2006-05-26

Similar Documents

Publication Publication Date Title
KR101061345B1 (ko) 비디오 처리
US10762592B2 (en) Point-based rendering and removal of projection noise
KR100917067B1 (ko) 비디오 처리
TWI733808B (zh) 用於虛擬實境和多視角系統之交錯光柵化和像素著色的架構
US10754651B2 (en) Register bank conflict reduction for multi-threaded processor
EP3396959B1 (en) Intelligent video frame grouping based on predicted performance
Park et al. Programmable multimedia platform based on reconfigurable processor for 8K UHD TV
US11150943B2 (en) Enabling a single context hardware system to operate as a multi-context system
Basoglu et al. Single‐chip processor for media applications: the MAP1000™
Lee et al. MPEG-2 decoder implementation on MAP1000A media processor using the C language
Minor et al. Terrain Rendering Engine (TRE): Cell Broadband Engine Optimized Real-time Ray-caster
TW201010410A (en) Video processing
Jaspers Architecture design of video processing systems on a chip
Glaskowsky Fujitsu aims media processor at DVD
Watlington Video & Graphics Processors: 1997

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120821

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20130820

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180903

Year of fee payment: 10