KR102072145B1 - 이미지 프로세서에 대한 매크로 i/o 유닛 - Google Patents

이미지 프로세서에 대한 매크로 i/o 유닛 Download PDF

Info

Publication number
KR102072145B1
KR102072145B1 KR1020187022065A KR20187022065A KR102072145B1 KR 102072145 B1 KR102072145 B1 KR 102072145B1 KR 1020187022065 A KR1020187022065 A KR 1020187022065A KR 20187022065 A KR20187022065 A KR 20187022065A KR 102072145 B1 KR102072145 B1 KR 102072145B1
Authority
KR
South Korea
Prior art keywords
line group
image processor
image
processor
external memory
Prior art date
Application number
KR1020187022065A
Other languages
English (en)
Other versions
KR20180100362A (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 KR20180100362A publication Critical patent/KR20180100362A/ko
Application granted granted Critical
Publication of KR102072145B1 publication Critical patent/KR102072145B1/ko

Links

Images

Classifications

    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • 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/003Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
    • G09G5/006Details of the interface to the display terminal
    • 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/02Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N1/32358Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/02Handling of images in compressed format, e.g. JPEG, MPEG
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3285Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
    • H04N2201/329Storage of less than a complete document page or image frame
    • H04N2201/3291Storage of less than a complete document page or image frame of less than a complete line of data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Memory System (AREA)

Abstract

이미지 프로세서가 설명된다. 이미지 프로세서는, 이미지 프로세서에 의한 프로세싱을 위해 외부 메모리로부터 입력 이미지 데이터를 판독하고, 이미지 프로세서로부터의 출력 이미지 데이터를 외부 메모리에 기록하는 I/O 유닛을 포함한다. I/O 유닛은 다수의 로직 채널 유닛들을 포함한다. 각각의 로직 채널 유닛은, 외부 메모리와, 이미지 프로세서 내의 개개의 생산 또는 소비 컴포넌트 사이의 로직 채널을 형성하기 위한 것이다. 각각의 로직 채널 유닛은 리포맷팅 회로 및 주소지정 회로를 활용하도록 설계된다. 주소지정 회로는, 외부 메모리에 적용된 주소지정 방식들, 및 외부 메모리와 개개의 생산 또는 소비 컴포넌트 사이의 이미지 데이터의 리포맷팅을 제어하기 위한 것이다. 리포맷팅 회로는 리포맷팅을 수행하기 위한 것이다.

Description

이미지 프로세서에 대한 매크로 I/O 유닛
본 출원은 2016년 2월 28일자로 출원된 미국 가출원 번호 제62/300,880호 "Macro I/O Unit For Image Processor"를 우선권으로 주장하며, 상기 미국 가출원은 그 전체가 인용에 의해 포함된다.
[0001] 본 발명의 분야는 일반적으로 이미지 프로세싱에 관한 것으로, 더 구체적으로는, 이미지 프로세서에 대한 매크로 I/O 유닛에 관한 것이다.
[0002] 이미지 프로세싱은 통상적으로, 어레이로 조직화된 픽셀 값들의 프로세싱을 수반한다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지들의 2차원 특성을 캡처한다(부가적 차원들이 시간(예컨대, 2차원 이미지들의 시퀀스) 및 데이터 타입(예컨대, 컬러들)을 포함할 수 있음). 통상적 시나리오에서, 어레이드(arrayed) 픽셀 값들은 모션의 이미지들을 캡처하기 위해 정지 이미지 또는 프레임들의 시퀀스를 생성한 카메라에 의해 제공된다. 전통적 이미지 프로세서들은 통상적으로, 2개의 극단(extreme)들의 양측면에 있다.
[0003] 제1 극단은 범용 프로세서 또는 범용-유사 프로세서(예컨대, 벡터 명령 향상들을 가지는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램들로서 이미지 프로세싱 태스크들을 수행한다. 제1 극단은 통상적으로 매우 다목적인 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 연관된 오버헤드와 결합된 더 미세 단위 데이터 구조들의 사용(예컨대, 명령 인출 및 디코드, 온-칩 및 오프-칩 데이터의 핸들링, 추정적 실행)은 궁극적으로, 프로그램 코드의 실행 동안 데이터 유닛당 더 많은 양의 에너지가 소비되게 한다.
[0004] 제2 반대 극단은 훨씬 더 큰 데이터 블록들에 고정 기능 하드와이어드 회로를 적용한다. 맞춤형 설계 회로들에 직접적으로 적용된 (미세 단위와는 대조적인) 더 큰 데이터 블록들의 사용은 데이터 유닛당 전력 소비를 크게 감소시킨다. 그러나, 맞춤형 설계 고정 기능 회로의 사용은 일반적으로, 프로세서가 수행할 수 있는 제한된 세트의 태스크들을 초래한다. 이로써, 폭넓게 다목적인 프로그래밍 환경(이는 제1 극단과 연관됨)은 제2 극단이 부족하다.
[0005] 데이터 유닛당 개선된 전력 효율성과 결합된 매우 다목적인 애플리케이션 소프트웨어 개발 기회들 둘 모두를 제공하는 기술 플랫폼은 바람직하지만 부족한(missing) 솔루션으로 남아 있다.
[0006] 이미지 프로세서가 설명된다. 이미지 프로세서는, 이미지 프로세서에 의한 프로세싱을 위해 외부 메모리로부터 입력 이미지 데이터를 판독하고, 이미지 프로세서로부터의 출력 이미지 데이터를 외부 메모리에 기록하는 I/O 유닛을 포함한다. I/O 유닛은 다수의 로직 채널 유닛들을 포함한다. 각각의 로직 채널 유닛은, 외부 메모리와, 이미지 프로세서 내의 개개의 생산 또는 소비 컴포넌트 사이에 로직 채널을 형성하기 위한 것이다. 각각의 로직 채널 유닛은 리포맷팅 회로 및 주소지정(addressing) 회로를 활용하도록 설계된다. 주소지정 회로는, 외부 메모리에 적용된 주소지정 방식들(addressing schemes), 및 외부 메모리와 개개의 생산 또는 소비 컴포넌트 사이의 이미지 데이터의 리포맷팅을 제어하기 위한 것이다. 리포맷팅 회로는 리포맷팅을 수행하기 위한 것이다.
[0007] 장치가 설명된다. 장치는, 이미지 프로세서 내의 소비 컴포넌트로의 로직 연결을 인에이블링하기 위한 수단을 포함한다. 장치는 또한, 이미지 데이터의 프레임으로부터 일련의 제한된 폭 이미지 영역들을 판독하기 위한 수단을 포함하고, 이미지 영역들 각각은 RGB 포맷에 따라 포맷팅된다. 장치는 또한, 일련의 제한된 폭 이미지 영역들을 동일한 컬러를 가지는 이미지 데이터의 블록들로 리포맷팅하기 위한 수단을 포함한다. 장치는 또한, 동일한 컬러를 가지는 이미지 데이터의 블록들을 소비 컴포넌트로 포워딩하기 위한 수단을 포함한다.
[0008] 다음의 설명 및 첨부한 도면들이 본 발명의 실시예들을 예시하기 위해 사용된다. 도면들에서:
[0009] 도 1은 기술 플랫폼의 다양한 컴포넌트들을 도시한다.
[0010] 도 2a는 커널들로 구축된 애플리케이션 소프트웨어의 실시예를 도시한다.
[0011] 도 2b는 커널들의 구조의 실시예를 도시한다.
[0012] 도 3은 커널의 연산의 실시예를 도시한다.
[0013] 도 4는 이미지 프로세서 하드웨어 아키텍처의 실시예를 도시한다.
[0014] 도 5a, 도 5b, 도 5c, 도 5d 및 도 5e는 라인 그룹으로의 이미지 데이터의 파싱, 시트로의 라인 그룹의 파싱, 및 오버랩되는 스텐실들을 가지는 시트에 대해 수행되는 동작을 도시한다.
[0015] 도 6은 스텐실 프로세서의 실시예를 도시한다.
[0016] 도 7은 이미지 프로세서의 구성 및 프로그래밍의 실시예를 도시한다.
[0017] 도 8은 라인 그룹들로 구성된 이미지 프레임을 도시한다.
[0018] 도 9a, 도 9b 및 도 9c는 라인 버퍼 유닛의 설계 및 동작 실시예들을 도시한다.
[0019] 도 9d 및 도 9e는 이미지 프로세서의 프로그래밍가능한 레지스터 공간(register space)의 실시예들을 도시한다.
[0020] 도 10a 및 10b는 가상 톨(virtually tall) 연산 모드를 도시한다.
[0021] 도 11a 및 도 11b는 매크로 I/O 유닛 실시예들을 도시한다.
[0022] 도 12a 및 도 12b는 매크로 I/O 유닛의 실시예의 제1 능력을 도시한다.
[0023] 도 13은 매크로 I/O 유닛의 실시예의 제2 능력을 도시한다.
[0024] 도 14는 매크로 I/O 유닛의 실시예에 의해 수행되는 방법을 도시한다.
[0025] 도 15는 컴퓨팅 시스템의 실시예를 도시한다.
i. 도입
[0026] 아래의 설명은, 개선된 전력 효율성을 제공하기 위해 더 큰 데이터 블록들(예컨대, 아래에서 추가로 설명되는 라인 그룹들 및 시트들)을 사용하는 폭넓게 다목적인 애플리케이션 소프트웨어 개발 환경을 제공하는 새로운 이미지 프로세싱 기술 플랫폼에 관련된 많은 실시예들을 설명한다.
1.0 애플리케이션 소프트웨어 개발 환경
a. 커널들의 애플리케이션 및 구조
[0027] 도 1은, 가상 이미지 프로세싱 환경(101), 실제 이미지 프로세싱 하드웨어(103), 및 가상 프로세싱 환경(101)에 대해 기록된 더 높은 레벨 코드를 실제 하드웨어(103)가 물리적으로 실행하는 객체 코드로 변환하기 위한 컴파일러(102)를 포함하는 이미지 프로세서 기술 플랫폼의 고 레벨 뷰를 도시한다. 아래에서 더 상세하게 설명되는 바와 같이, 가상 프로세싱 환경(101)은, 개발될 수 있는 애플리케이션들에 관해 폭넓게 다목적이며, 애플리케이션의 구성 프로세스들의 용이한 시각화를 위해 맞춤화된다. 개발자(104)에 의한 프로그램 코드 개발 노력의 완료 시에, 컴파일러(102)는 가상 프로세싱 환경(101) 내에 기록된 코드를 실제 하드웨어(103)를 타겟으로 하는 객체 코드로 변환한다.
[0028] 도 2a는 가상 환경 내에 기록된 애플리케이션 소프트웨어가 취할 수 있는 구조 및 형태의 예를 도시한다. 도 2a에서 관측되는 바와 같이, 프로그램 코드는 입력 이미지 데이터(201)에 대해 일부 전체 변환을 수행하기 위해 입력 이미지 데이터(201)의 하나 이상의 프레임들을 프로세싱하도록 예상될 수 있다. 변환은 개발자에 의해 관절연결된(articulated) 조정된(orchestrated) 시퀀스로 입력 이미지 데이터에 대해 동작하는 프로그램 코드(202)의 하나 이상의 커널들의 연산으로 실현된다.
[0029] 예컨대, 도 2a에서 관측되는 바와 같이, 전체 변환은 제1 커널 K1을 가지는 각각의 입력 이미지를 먼저 프로세싱함으로써 수행된다. 그런 다음, 커널 K1에 의해 생산된 출력 이미지들이 커널 K2에 의해 연산된다. 그런 다음, 커널 K2에 의해 생산된 출력 이미지들 각각은 커널 K3_1 또는 K3_2에 의해 연산되고, 그런 다음, 커널(들) K3_1/K3_2에 의해 생산된 출력 이미지들은 커널 K4에 의해 연산된다. 커널들 K3_1 및 K3_2는 K3 스테이지에서 병렬 프로세싱을 부과함으로써 전체 프로세싱의 속도를 높이기 위해 설계된 동일한 커널들일 수 있거나, 또는 상이한 커널들일 수 있다(예컨대, 커널 K3_1은 제1 특정 타입의 입력 이미지들에 대해 연산하고, 커널 K3_2는 제2 상이한 타입의 입력 이미지들에 대해 연산함).
[0030] 이로써, 더 큰 전체 이미지 프로세싱 시퀀스는 이미지 프로세싱 파이프라인 또는 DAG(directed acyclic graph)의 형태를 취할 수 있고, 개발 환경은 그와 같이 개발중인 프로그램 코드의 표현을 개발자에게 실제로 제시하도록 구비될 수 있다. 커널들은 개발자에 의해 개별적으로 개발될 수 있고 그리고/또는 (실제 신호 프로세서 하드웨어 및/또는 이의 설계와 같은) 임의의 기본 기술을 제공하는 엔티티에 의해 그리고/또는 제3 자(예컨대, 개발 환경에 대해 기록된 커널 소프트웨어의 벤더)에 의해 제공될 수 있다. 이로써, 공칭 개발 환경이, 개발자들이 자신들의 더 큰 개발 노력의 전체 흐름을 수행하기 위해 다양한 방식들로 자유롭게 "훅-업(hook-up)"하는 커널들의 "라이브러리"를 포함할 것이 예상된다. 그러한 라이브러리의 일부가 될 것으로 예상되는 일부 기본 커널들은 다음의 기본 이미지 프로세싱 태스크들: 컨볼루션(convolution)들, 잡음 제거(denoising), 컬러 공간 컨버전들, 에지 및 코너 검출, 선명화(sharpening), 화이트 밸런스, 감마 정정, 톤 맵핑, 행렬 곱, 이미지 등록, 피라미드 구성, 웨이블릿 변환, 블록-별 이산 코사인 및 푸리에 변환들 중 임의의 하나 이상을 제공하는 커널들을 포함할 수 있다.
[0031] 도 2b는 개발자에 의해 구상될 수 있는 바와 같은 커널(203)의 구조의 예시적 도면을 도시한다. 도 2b에서 관측되는 바와 같이, 커널(203)은, 각각이 개개의 하부(underlying) 프로세서(205) 상에서 동작하고 있는 프로그램 코드의 다수의 병렬 스레드들("스레드들")(204)로서 보여질 수 있으며, 여기서, 각각의 프로세서(205)는 출력 어레이(206) 내의 특정 위치(이를테면, 커널이 생성하고 있는 출력 이미지 내의 특정 픽셀 위치)로 지향된다. 간략함을 위해, 단지 3개의 프로세서들 및 대응하는 스레드들만이 도 2b에 도시된다. 다양한 실시예들에서, 모든 각각의 도시된 출력 어레이 위치는 그 자체의 전용 프로세서 및 대응하는 스레드를 가질 것이다. 즉, 별개의 프로세서 및 스레드가 출력 어레이 내의 각각의 픽셀에 배정될 수 있다.
[0032] 아래에서 더 상세하게 설명될 바와 같이, 다양한 실시예들에서, 실제 하부 하드웨어에서, 실행 레인 어레이 및 대응하는 스레드들은, 현재 프로세싱되는 프레임의 "라인 그룹"의 일부분에 대한 출력 이미지 데이터를 생성하기 위해 함께(in unison)(예컨대, SIMD(Single Instruction Multiple Data)(들)형 방식으로) 동작한다. 라인 그룹은 이미지 프레임의 인접한 상당한 사이즈의 섹션이다. 다양한 실시예들에서, 개발자는 하드웨어가 라인 그룹들에 대해 동작한다는 것을 의식할 수 있거나, 또는 개발 환경은, 예컨대, 출력 프레임 내의 모든 각각의 픽셀(예컨대, 그 자체의 전용 프로세서 및 스레드에 의해 생성된 출력 프레임 내의 모든 각각의 픽셀)에 대한 별개의 프로세서 및 스레드가 존재하는 추상화를 제시할 수 있다. 어쨋든, 다양한 실시예에서, 개발자는 커널이 각각의 출력 픽셀에 대한 개별 스레드를 포함하는 것으로 이해한다(출력 어레이가 시각화되는지 여부가 전체적 출력 프레임 또는 이의 섹션임).
[0033] 아래에서 더 상세하게 설명되는 바와 같이, 일 실시예에서, 가상 환경에서 개발자에게 제시되는 프로세서들(205)은, 표준(예컨대, RISC) 연산코드(opcode)들을 지원할 뿐만 아니라, 개발자가, 수행되고 있는 픽셀 프로세싱에 의해 픽셀을 용이하게 시각화할 수 있게 허용하는 특수하게 포맷팅된 데이터 액세스 명령들을 포함하는 ISA(instruction set architecture)를 가진다. 전통적 수학 및 프로그램 제어 연산코드들의 전체적 ISA와 결합된 임의의 입력 어레이 위치를 용이하게 정의/시각화할 수 있는 능력은, 애플리케이션 프로그램 개발자가, 임의의 사이즈의 이미지 표면에 대해 수행될 임의의 원하는 기능을 이상적으로 정의할 수 있게 본질적으로 허용하는 극히 다목적인 프로그래밍 환경을 허용한다. 예컨대, 이상적으로, 임의의 수학 연산은 임의의 스텐실 사이즈에 적용되도록 용이하게 프로그래밍될 수 있다.
[0034] 데이터 액세스 명령들과 관련하여, 일 실시예에서, 가상 프로세서들의 ISA("가상 ISA")는 특수 데이터 로드 명령 및 특수 데이터 저장 명령을 포함한다. 데이터 로드 명령은 이미지 데이터의 입력 어레이 내의 임의의 위치로부터 판독할 수 있다. 데이터 저장 명령은 이미지 데이터의 출력 어레이 내의 임의의 위치에 기록할 수 있다. 후자의 명령은 동일한 프로세서의 다수의 인스턴스들을 상이한 출력 픽셀 위치들에 용이하게 전용하는 것을 허용한다(각각의 프로세서는 출력 어레이에서 상이한 픽셀에 기록함). 이로써, 예컨대, 스텐실 사이즈 그 자체(예컨대, 픽셀들의 폭 및 픽셀들의 높이로서 표현됨)가 용이하게 프로그래밍가능한 특징으로 만들어질 수 있다. 프로세싱 동작들의 시각화는, 특수 명령 포맷을 가지는 특수 로드 및 저장 명령들 각각으로 추가로 간략화되며, 그에 의해, 타겟 어레이 위치들이 X 및 Y 좌표들로서 단순하게 특정된다.
[0035] 어쨋든, 출력 어레이 내의 다수의 위치들 각각에 대한 별개의 프로세서를 인스턴스화함으로써, 프로세서들은, 예컨대, 출력 어레이 내의 모든 위치들에 대한 개개의 값들이 동시에 생산되도록 병렬로 자신들의 개개의 스레드들을 실행할 수 있다. 많은 이미지 프로세싱 루틴들이 통상적으로, 동일한 출력 이미지의 상이한 픽셀들에 대해 동일한 동작들을 수행한다는 것은 주목할 만하다. 이로써, 개발 환경의 일 실시예에서, 각각의 프로세서는 동일한 것으로 추정되며, 동일한 스레드 프로그램 코드를 실행한다. 따라서, 가상화된 환경은, 예컨대, 로크(lock)-단계에서 동일한 코드를 각각 실행하는 동일한 프로세서들의 2-차원(2D) 어레이로 구성된 2D SIMD 프로세서의 타입으로서 보여질 수 있다.
[0036] 도 3은 출력 어레이 내의 2개의 상이한 픽셀 위치들에 대해 동일한 코드를 프로세싱하고 있는 2개의 가상 프로세서들에 대한 프로세싱 환경의 더 상세한 예를 도시한다. 도 3은 생성되는 출력 이미지에 대응하는 출력 어레이(304)를 도시한다. 여기서, 제1 가상 프로세서는 출력 어레이(304)의 위치 X1에서 출력 값을 생성하기 위해 스레드(301)의 코드를 프로세싱하고, 제2 가상 프로세서는 출력 어레이(304)의 위치 X2에서 출력 값을 생성하기 위해 스레드(302)의 코드를 프로세싱한다. 다시, 다양한 실시예들에서, 개발자는, 출력 어레이(304) 내의 각각의 픽셀 위치에 대한 별개의 프로세서 및 스레드가 존재한다는 것을 이해할 것이다(간략함을 위해, 도 3은 이들 중 2개만을 도시함). 그러나, 다양한 실시예들에서, 개발자는, (머신의 SIMD형 본질로 인해) 단지 하나의 프로세서 및 스레드에 대한 개발 코드만을 필요로 한다.
[0037] 당해 기술 분야에 알려져 있는 바와 같이, 출력 픽셀 값은 종종, 대응하는 출력 픽셀 위치를 포함하고 둘러싸는 입력 어레이의 픽셀들을 프로세싱함으로써 결정된다. 예컨대, 도 3으로부터 보여질 수 있는 바와 같이, 출력 어레이(304)의 포지션 X1은 입력 어레이(303)의 포지션 E에 대응한다. 그에 따라서, 출력 값 X1을 결정하기 위해 프로세싱될 입력 어레이(303) 픽셀 값들의 스텐실은 입력 값들 ABCDEFGHI에 대응할 것이다. 유사하게, 출력 값 X2를 결정하기 위해 프로세싱될 입력 어레이 픽셀들의 스텐실은 입력 값들 DEFGHIJKL에 대응할 것이다.
[0038] 도 3은 출력 값들 X1 및 X2를 각각 계산하는 데 사용될 수 있는 스레드들의 쌍(301, 302)에 대한 대응하는 가상 환경 프로그램 코드의 예를 도시한다. 도 3의 예에서, 코드의 쌍들 둘 모두는 동일하며, 대응하는 출력 값을 결정하기 위해 9개의 입력 어레이 값들의 스텐실을 평균화한다. 2개의 스레드들 사이의 유일한 차는 입력 어레이로부터 호출되는 변수들 및 기록되는 출력 어레이의 위치이다. 구체적으로, 출력 위치 X1에 기록하는 스레드는 스텐실 ABCDEFGHI에 대해 동작하고, 출력 위치 X2에 기록하는 스레드는 스텐실 DEFGHIJKL에 대해 동작한다.
[0039] 스레드들의 쌍(301, 302)으로부터의 개개의 프로그램 코드로부터 보여질 수 있는 바와 같이, 각각의 가상 프로세서는 적어도 내부 레지스터들(R1 및 R2)을 포함하며, 적어도 다음의 명령들을 지원한다: 1) 입력 어레이로부터 R1로의 LOAD 명령; 2) 입력 어레이로부터 R2로의 LOAD 명령; 3) R1 및 R2의 컨텐츠들을 부가하고 그 결과를 R2에 배치하는 ADD 명령; 4) R2 내의 값을 즉시 피연산자(immediate operand) 9로 나누는 DIV 명령; 및, 5) R2의 컨텐츠들을 스레드의 전용 출력 어레이 위치에 저장하는 STORE 명령. 다시, 단지 2개의 출력 어레이 위치들 및 단지 2개의 스레드들 및 대응하는 프로세서들이 도 3에 도시되지만, 구상가능하게, 출력 어레이 내의 모든 각각의 위치에 가상 프로세서 및 이러한 기능들을 수행하는 대응하는 스레드가 할당될 수 있다. 다양한 실시예들에서, 프로세싱 환경의 SIMD-형 본질에 따라, 다중 스레드들은 서로 격리되어 실행된다. 즉, 가상 프로세서들 사이에 어떠한 스레드-대-스레드 통신도 존재하지 않는다(하나의 SIMD 채널이 다른 SIMD 채널로 교차하는 것이 방지된다).
b. 가상 프로세서 메모리 모델
[0040] 다양한 실시예들에서, 가상 프로세서들의 관련 특징은 이들의 메모리 모델이다. 당해 기술 분야에서 이해되는 바와 같이, 프로세서는 메모리로부터 데이터를 판독하고, 그 데이터에 대해 동작하며, 새로운 데이터를 메모리에 라이트 백(write back)한다. 메모리 모델은, 프로세서가, 데이터가 메모리에 조직화되는 방식을 가지는 관점(perspective) 또는 시각(view)이다. 일 실시예에서, 가상 프로세서들의 메모리 모델은 입력 및 출력 어레이 구역들 둘 모두를 포함한다. 스레드들에 대한 입력 픽셀 값들은 입력 어레이 구역에 저장되고, 스레드들에 의해 생성된 출력 픽셀 값들은 출력 어레이 구역에 저장된다.
[0041] 일 실시예에서, 새로운 메모리 주소지정 방식은 가상 프로세서의 메모리 모델의 입력 어레이 부분으로부터 어떤 특정 입력 값들이 콜(call)될 것인지를 정의하는 데 사용된다. 구체적으로, 전통적 선형 메모리 주소가 아니라 X, Y 좌표들로 원하는 입력 데이터를 정의하는 "포지션 관련" 주소지정 방식이 사용된다. 이로써, 가상 프로세서들의 ISA의 로드 명령은, X 컴포넌트 및 Y 컴포넌트로 입력 어레이 내의 특정 메모리 위치를 식별하는 명령 포맷을 포함한다. 이로써, 2-차원 좌표 시스템은 입력 어레이로부터 판독된 입력 값들에 대해 메모리에 주소지정하는 데에 사용된다.
[0042] 포지션 관련 메모리 주소지정 접근법의 사용은, 가상 프로세서가 동작하고 있는 이미지의 구역이 개발자에게 더 용이하게 식별될 수 있게 허용한다. 위에서 언급된 바와 같이, 전통적 수학 및 프로그램 제어 연산코드들의 전체적 ISA와 결합된 임의의 입력 어레이 위치를 용이하게 정의/시각화할 수 있는 능력은, 애플리케이션 프로그램 개발자가, 임의의 사이즈의 이미지 표면에 대해 수행될 임의의 원하는 기능을 이상적으로 용이하게 정의할 수 있게 본질적으로 허용하는 극히 다목적인 프로그래밍 환경을 허용한다. 포지션 관련 주소지정 방식을 채택하는 명령들에 대한 다양한 명령 포맷 실시예들 뿐만 아니라, 지원되는 ISA의 다른 특징들의 실시예들이 아래에서 추가로 더 상세하게 설명된다.
[0043] 출력 어레이는 스레드들이 생성하는 것을 담당하는 출력 이미지 데이터를 포함한다. 출력 이미지 데이터는 전체 이미지 프로세싱 시퀀스를 따르는 디스플레이 상에 표시되는 실제 이미지 데이터와 같은 최종 이미지 데이터일 수 있거나, 또는 전체 이미지 프로세싱 시퀀스의 후속 커널이 그것의 입력 이미지 데이터 정보로서 사용하는 중간 이미지 데이터일 수 있다. 다시, 통상적으로 가상 프로세서들은, 이들이 동일한 사이클 동안 출력 이미지 데이터의 상이한 픽셀 위치들에 기록하기 때문에, 동일한 출력 데이터 항목들에 대해 경쟁하지 않는다.
[0044] 일 실시예에서, 포지션 관련 주소지정 방식은 또한, 출력 어레이에의 기록들을 위해 사용된다. 이로써, 각각의 가상 프로세서에 대한 ISA는 명령 포맷이 전통적 랜덤 액세스 메모리 주소가 아니라 2-차원 X, Y 좌표로서 메모리에 타겟팅된 기록 위치를 정의하는 저장 명령을 포함한다.
2.0 하드웨어 아키텍처 실시예들
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
[0045] 도 4는 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(400)의 실시예를 도시한다. 이미지 프로세서는, 예컨대, 시뮬레이팅된 환경 내의 가상 프로세서용으로 기록된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 4에서 관측되는 바와 같이, 아키텍처(400)는, 네트워크(404)(예컨대, 온 칩 스위치 네트워크, 온 칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 NOC(network on chip))를 통해 복수의 스텐실 프로세서 유닛들(402_1 내지 402_N) 및 대응하는 시트 생성기 유닛들(403_1 내지 403_N)에 상호 연결된 복수의 라인 버퍼 유닛들(401_1 내지 401_M)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(404)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 연결될 수 있다.
[0046] 일 실시예에서, 프로그램 코드는 소프트웨어 개발자에 의해 이전에 정의된 이미지 프로세싱 동작들을 수행하기 위해 컴파일링되며 대응하는 스텐실 프로세서(402) 상으로 로딩된다(프로그램 코드는 또한, 예컨대, 설계 및 구현에 따라, 스텐실 프로세서의 연관된 시트 생성기(403) 상으로 로딩될 수 있음). 적어도 일부 사례들에서, 이미지 프로세싱 파이프라인은 제1 파이프라인 스테이지에 대한 제1 커널 프로그램을 제1 스텐실 프로세서(402_1)로 로딩하고, 제2 파이프라인 스테이지에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(402_2)로 로딩하는 식으로 실현될 수 있으며, 여기서, 제1 커널은 파이프라인의 제1 스테이지의 기능들을 수행하고, 제2 커널은 파이프라인의 제2 스테이지의 기능들을 수행하는 식이고, 부가적 제어 흐름 방법들이 설치되어 파이프라인의 하나의 스테이지로부터 파이프라인의 다음 스테이지로 출력 이미지 데이터를 전달한다.
[0047] 다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2 이상의 스텐실 프로세서들(402_1, 402_2)을 가지는 병렬 머신으로서 실현될 수 있다. 예컨대, 이미지 데이터의 고 밀도 및 고 데이터 레이트 스트림은, 각각이 동일한 기능을 수행하는 다수의 스텐실 프로세서들에 걸쳐 프레임들을 확산시킴으로써 프로세싱될 수 있다.
[0048] 다른 구성들에서, 본질적으로 커널들의 임의의 DAG는, DAG 설계에서 하나의 커널로부터 다음 커널의 입력으로 출력 이미지들을 지향시키기 위해, 개개의 스텐실 프로세서들을 그 자체의 개개의 프로그램 코드 커널로 구성하고 적절한 제어 흐름 훅들을 하드웨어에 구성함으로써, 하드웨어 프로세서 상으로 로딩될 수 있다.
[0049] 일반적 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(405)에 의해 수신되며, 프레임별로 라인 버퍼 유닛들(401) 중 하나 이상으로 전달된다. 특정 라인 버퍼 유닛은, 그것의 이미지 데이터 프레임을 이미지 데이터의 더 작은 구역("라인 그룹"으로 지칭됨)으로 파싱하며, 그런 다음, 라인 그룹을 네트워크(404)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체" 단일 라인 그룹은, 예컨대, 프레임의 다수의 연속적인 완전한 행들 또는 열들의 데이터로 구성될 수 있다(간략함을 위해, 본 명세서는 연속적 행들을 주로 지칭할 것임). 시트 생성기는 추가로, 이미지 데이터의 라인 그룹을 이미지 데이터의 더 작은 구역("시트"로 지칭됨)으로 파싱하며, 시트를 자신의 대응하는 스텐실 프로세서에 제시한다.
[0050] 단일 입력을 가지는 이미지 프로세싱 파이프라인 또는 DAG 흐름의 경우, 일반적으로, 입력 프레임들은 동일한 라인 버퍼 유닛(401_1)으로 지향되며, 동일한 라인 버퍼 유닛(401_1)은 이미지 데이터를 라인 그룹들로 파싱하며, 라인 그룹들을, 대응하는 스텐실 프로세서(402_1)가 파이프라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(403_1)로 지향시킨다. 스텐실 프로세서(402_1)가 프로세싱하는 라인 그룹들에 대한 스텐실 프로세서(402_1)에 의한 동작들의 완료 시, 시트 생성기(403_1)는, 출력 라인 그룹들을 "다운스트림" 라인 버퍼 유닛(401_2)에 전송한다(일부 사용 사례들에서는, 출력 라인 그룹이, 입력 라인 그룹들을 이전에 전송한 동일한 라인 버퍼 유닛(401_1)에 다시 전송됨).
[0051] 그런 다음, 그 자체의 개개의 다른 시트 생성기 및 스텐실 프로세서(예컨대, 시트 생성기(403_2) 및 스텐실 프로세서(402_2)) 상에서 실행하는, 파이프라인/DAG에서의 다음 스테이지/연산을 표현하는 하나 이상의 "소비자" 커널들은, 제1 스텐실 프로세서(402_1)에 의해 생성된 이미지 데이터를 다운스트림 라인 버퍼 유닛(401_2)으로부터 수신한다. 이러한 방식으로, 제1 스텐실 프로세서 상에서 연산하는 "생산자" 커널은 제2 스텐실 프로세서 상에서 연산하는 "소비자" 커널로 포워딩되는 그것의 출력 데이터를 가지며, 여기서, 소비자 커널은 전체 파이프라인 또는 DAG의 설계와 일치하는 생산자 커널 이후에 다음 세트의 태스크들을 수행한다.
[0052] 스텐실 프로세서(402)는 이미지 데이터의 다수의 오버랩되는 스텐실들에 대해 동시에 동작하도록 설계된다. 스텐실 프로세서의 다수의 오버랩되는 스텐실들 및 내부 하드웨어 프로세싱 용량은 시트의 사이즈를 효과적으로 결정한다. 여기서, 스텐실 프로세서(402) 내에서, 실행 레인 어레이들은, 다수의 오버랩되는 스텐실들에 의해 커버되는 이미지 데이터 표면 영역을 동시에 프로세싱하기 위해 함께 동작한다.
[0053] 아래에서 더 상세하게 설명되는 바와 같이, 다양한 실시예들에서, 이미지 데이터의 시트들은 스텐실 프로세서(402) 내의 2-차원 레지스터 어레이 구조로 로딩된다. 시트들 및 2-차원 레지스터 어레이 구조의 사용은, 예컨대, 단일 로드 동작과 같이, 많은 양의 데이터를 많은 양의 레지스터 공간으로 이동시킴으로써, 전력 소비 개선들을 효과적으로 제공하는 것으로 여겨지며, 프로세싱 태스크들이 실행 레인 어레이에 의해 그 직후에 데이터에 대해 직접적으로 수행된다. 부가적으로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은, 용이하게 프로그래밍가능한/구성가능한 상이한 스텐실 사이즈들을 제공한다.
[0054] 도 5a 내지 도 5e는 라인 버퍼 유닛(401)의 파싱 활동, 시트 생성기 유닛(403)의 더 미세 단위 파싱 활동 뿐만 아니라, 시트 생성기 유닛(403)에 커플링된 스텐실 프로세서(402)의 스텐실 프로세싱 활동 모두의 실시예들을 고 레벨로 예시한다.
[0055] 도 5a는 이미지 데이터(501)의 입력 프레임의 실시예를 도시한다. 도 5a는 또한, 스텐실 프로세서가 동작하도록 설계된 3개의 오버랩되는 스텐실들(502)(각각이 3 픽셀 x 3 픽셀의 치수를 가짐)의 윤곽을 도시한다. 각각의 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 검정색으로 채워서 강조된다. 간략함을 위해, 3개의 오버랩되는 스텐실들(502)이 수직 방향으로만 오버랩되는 것으로 도시된다. 실제로 스텐실 프로세서가 수직 및 수평 방향들 둘 모두에서 오버랩되는 스텐실들을 가지도록 설계될 수 있다는 것을 인식하는 것이 적절하다.
[0056] 도 5a에서 관측되는 바와 같이, 스텐실 프로세서 내의 수직적인 오버랩되는 스텐실들(502)로 인해, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내에 넓은 대역의 이미지 데이터가 존재한다. 아래에서 더 상세하게 논의되는 바와 같이, 일 실시예에서, 스텐실 프로세서들은 이미지 데이터에 걸쳐 좌에서 우로의 방식으로 자신들의 오버랩되는 스텐실들 내의 데이터를 프로세싱한다(그리고 그런 다음, 상부에서 하부로의 순서로, 다음 세트의 라인들에 대해 반복함). 따라서, 스텐실 프로세서들이 자신들의 동작을 통해 계속 포워딩함에 따라, 검정색이 채워진 출력 픽셀 블록들의 수가 우측방향으로 수평하게 증가할 것이다. 위에서 논의된 바와 같이, 라인 버퍼 유닛(401)은 스텐실 프로세서들이 확장된 수의 향후 사이클들 동안 동작하기에 충분한 착신(incoming) 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 것을 담당한다. 라인 그룹의 예시적 도면은 음영처리된(shaded) 구역(503)으로서 예시된다. 일 실시예에서, 아래에서 추가로 설명되는 바와 같이, 라인 버퍼 유닛(401)은 라인 그룹을 시트 생성기로 또는 시트 생성기로부터 송신/수신하기 위한 상이한 동역학을 이해할 수 있다. 예컨대, "전체 그룹(full group)"으로 지칭되는 하나의 모드에 따라, 완전한 전체 폭 라인들의 이미지 데이터가 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 톨(virtually tall)"로 지칭되는 제2 모드에 따라, 라인 그룹은 초기에, 전체 폭 행들의 서브세트와 함께 전달된다. 그런 다음, 나머지 행들은 더 작은(전체 폭보다 좁은) 피스들로 순차적으로 전달된다.
[0057] 입력 이미지 데이터의 라인 그룹(503)이 라인 버퍼 유닛에 의해 정의되고, 시트 생성기 유닛으로 전달되어서, 시트 생성기 유닛은 추가로, 라인 그룹을, 스텐실 프로세서의 하드웨어 제한들에 더 정확하게 맞는 더 미세한 시트들로 파싱한다. 더 구체적으로, 아래에서 추가로 더 상세하게 설명되는 바와 같이, 일 실시예에서, 각각의 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 본질적으로, 이미지 데이터를 실행 레인 어레이 "아래로" 시프팅하며, 여기서, 시프팅의 패턴은, 각각의 실행 레인으로 하여금, 그 자체의 개개의 스텐실 내의 데이터에 대해 동작하게 한다(즉, 각각의 실행 레인은 해당 스텐실에 대한 출력을 생성하기 위해 그 자체의 스텐실 정보에 대해 프로세싱함). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이를 "채우는" 또는 그렇지 않으면, 2차원 시프트 레지스터 어레이로 로딩되는 입력 이미지 데이터의 표면 영역들이다.
[0058] 따라서, 도 5b에서 관측되는 바와 같이, 시트 생성기는 라인 그룹(503)으로부터 초기 시트(504)를 파싱하며, 그것을 스텐실 프로세서에 제공한다(여기서, 데이터의 시트는, 참조 번호(504)에 의해 일반적으로 식별된 음영처리된 구역에 대응함). 도 5c 및 도 5d에서 관측되는 바와 같이, 스텐실 프로세서는 시트에 걸쳐 좌에서 우로의 방식으로 오버랩되는 스텐실들(502)을 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트에 대해 동작한다. 도 5d에 대해, 시트 내의 데이터로부터 출력 값이 계산될 수 있는 픽셀들의 수가 소모(exhaust)된다(어떠한 다른 픽셀 포지션들도 시트 내의 정보로부터 결정된 출력 값을 가질 수 없음). 간략함을 위해, 이미지의 경계 구역들이 무시되었다.
[0059] 도 5e에서 관측되는 바와 같이, 시트 생성기는 그런 다음, 스텐실 프로세서가 동작들을 계속하기 위해 다음 시트(505)를 제공한다. 스텐실들의 초기 포지션들은, 이들이 다음 시트에 대한 동작을 시작할 때 (도 5d에 앞서 도시된 바와 같이) 제1 시트 상의 소모 포인트로부터 우측으로의 다음 진행이라는 점이 주목된다. 새로운 시트(505)의 경우, 스텐실들은 단순히, 스텐실 프로세서가 제1 시트의 프로세싱과 동일한 방식으로 새로운 시트에 대해 동작할 때 우측으로 계속 이동할 것이다.
[0060] 출력 픽셀 위치를 둘러싸는 스텐실들의 경계 구역들 때문에, 제1 시트(504)의 데이터와 제2 시트(505)의 데이터 사이에 약간의 오버랩이 존재한다는 점이 주목된다. 오버랩은 시트 생성기가 오버랩되는 데이터를 2회 재-송신함으로써 간단히 핸들링될 수 있다. 대안적 구현들에서, 다음 시트를 스텐실 프로세서에 공급하기 위해, 시트 생성기는 단지, 새로운 데이터를 스텐실 프로세서에 전송하도록 진행할 수 있고, 스텐실 프로세서는 이전 시트로부터의 오버랩되는 데이터를 재사용한다.
b. 스텐실 프로세서 설계 및 동작
[0061] 도 6은 스텐실 프로세서 아키텍처(600)의 실시예를 도시한다. 도 6에서 관측되는 바와 같이, 스텐실 프로세서는 데이터 컴퓨테이션 유닛(601), 스칼라 프로세서(602) 및 연관된 메모리(603) 및 I/O 유닛(604)을 포함한다. 데이터 컴퓨테이션 유닛(601)은 실행 레인 어레이(605), 2-차원 시프트 어레이 구조(606) 및 그 어레이의 특정 행들 또는 열들과 연관된 별개의 랜덤 액세스 메모리들(607)을 포함한다.
[0062] I/O 유닛(604)은 시트 생성기로부터 수신된 데이터의 "입력" 시트들을 데이터 컴퓨테이션 유닛(601)으로 로딩하고, 스텐실 프로세서로부터의 데이터의 "출력" 시트들을 시트 생성기에 저장하는 것을 담당한다. 일 실시예에서, 데이터 컴퓨테이션 유닛(601)으로의 시트 데이터의 로딩은, 수신된 시트를 이미지 데이터의 행들/열들로 파싱하는 것, 및 이미지 데이터의 행들/열들을 2차원 시프트 레지스터 구조(606) 또는 실행 레인 어레이의 행들/열들의 개개의 랜덤 액세스 메모리들(607)(아래에서 더 상세하게 설명됨)로 로딩하는 것을 수반한다. 시트가 초기에 메모리들(607)로 로딩되면, 실행 레인 어레이(605) 내의 개별 실행 레인들은 적절할 때(예컨대, 시트들의 데이터에 대한 동작 직전에 로드 명령으로서), 시트 데이터를 랜덤 액세스 메모리들(607)로부터 2-차원 시프트 레지스터 구조(606)로 로딩할 수 있다. (직접적으로 시트 생성기로부터든, 또는 메모리들(607)로부터든) 레지스터 구조(606)로의 데이터의 시트의 로딩의 완료 시, 실행 레인 어레이(605)의 실행 레인들은 데이터에 대해 동작하며, 결국 완료된 데이터를 시트로서 시트 생성기에 다시 직접적으로 또는 랜덤 액세스 메모리들(607)에 "라이트 백(write back)"한다. 후자라면, I/O 유닛(604)이 랜덤 액세스 메모리들(607)로부터 데이터를 인출하여 출력 시트를 형성하고, 그런 다음, 출력 시트가 시트 생성기로 포워딩된다.
[0063] 스칼라 프로세서(602)는, 스칼라 메모리(603)로부터 스텐실 프로세서의 프로그램 코드의 명령들을 판독하고 그 명령들을 실행 레인 어레이(605) 내의 실행 레인들에 발행하는 프로그램 제어기(609)를 포함한다. 일 실시예에서, 단일의 동일한 명령은 데이터 컴퓨테이션 유닛(601)으로부터 SIMD-형 거동을 수행하기 위해 어레이(605) 내의 모든 실행 레인들로 브로드캐스트된다. 일 실시예에서, 스칼라 메모리(603)로부터 판독되고 실행 레인 어레이(605)의 실행 레인들에 발행된 명령들의 명령 포맷은 명령당 하나보다 많은 연산코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 추가적 실시예에서, VLIW 포맷은 각각의 실행 레인의 ALU에 의해 수행되는 수학 함수를 지시하는 ALU 연산코드(이는, 아래에서 설명되는 바와 같이, 일 실시예에서, 하나보다 많은 전통적 ALU 연산을 특정할 수 있음) 및 메모리 연산코드(이는 특정 실행 레인 또는 한 세트의 실행 레인들에 대한 메모리 연산을 지시함) 둘 모두를 포함한다.
[0064] "실행 레인"이라는 용어는 명령을 실행할 수 있는 한 세트의 하나 이상의 실행 유닛들(예컨대, 명령을 실행할 수 있는 로직 회로)을 지칭한다. 그러나, 다양한 실시예들에서, 실행 레인은 단지 실행 유닛들 이외에 추가 프로세서-형 기능성을 포함한다. 예컨대, 하나 이상의 실행 유닛들 이외에, 실행 레인은 또한, 수신된 명령을 디코딩하는 로직 회로, 또는 추가 MIMD-형 설계들의 경우, 명령을 인출 및 디코딩하는 로직 회로를 포함할 수 있다. MIMD-형 접근법들에 관련하여, 중앙 집중식 프로그램 제어 접근법이 주로 본원에서 설명되었지만, (예컨대, 어레이(605)의 각각의 실행 레인 내의 프로그램 제어기 및 프로그램 코드를 포함하여) 다양한 대안적 실시예들에서는 추가의 분산 접근법이 구현될 수 있다.
[0065] 실행 레인 어레이(605), 프로그램 제어기(609) 및 2차원 시프트 레지스터 구조(606)의 결합은 광범위한 프로그래밍가능한 기능들을 위한 폭넓게 적응가능한/구성가능한 하드웨어 플랫폼을 제공한다. 예컨대, 애플리케이션 소프트웨어 개발자들은, 개별 실행 레인들이 폭넓고 다양한 기능들을 수행할 수 있고, 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 용이하게 액세스할 수 있으면, 폭넓은 범위의 상이한 기능적 능력 뿐만 아니라 치수(예컨대, 스텐실 사이즈)를 가지는 커널들을 프로그래밍할 수 있다.
[0066] 실행 레인 어레이(605)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서의 역할을 하는 것 이외에, 랜덤 액세스 메모리들(607)은 또한, 하나 이상의 룩-업 테이블들을 유지할 수 있다. 다양한 실시예들에서, 하나 이상의 스칼라 룩-업 테이블들이 또한, 스칼라 메모리(603) 내에서 인스턴스화될 수 있다.
[0067] 스칼라 룩-업(scalar look-up)은, 동일한 룩-업 테이블로부터의 동일한 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(605) 내의 실행 레인들 각각으로 전달하는 것을 수반한다. 다양한 실시예들에서, 위에서 설명된 VLIW 명령 포맷은 또한, 스칼라 프로세서에 의해 수행되는 룩-업 동작을 스칼라 룩-업 테이블로 지향시키는 스칼라 연산코드를 포함하도록 확장된다. 연산코드에 사용하도록 특정되는 인덱스는 즉시 피연산자일 수 있거나 또는 일부 다른 데이터 저장 위치로부터 인출될 수 있다. 어쨋든, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩-업 테이블로부터의 룩-업은 본질적으로, 동일한 클럭 사이클 동안 동일한 데이터 값을 실행 레인 어레이(605) 내의 모든 실행 레인들로 브로드캐스트하는 것을 수반한다.
3.0 라인 버퍼 유닛 실시예들
a. 라인 버퍼 유닛 개요
[0068] 다양한 실시예들에서, 하드웨어 플랫폼을 위해 기록된 프로그램 코드는, 명령 포맷이, 예컨대, X, Y 좌표들로서, 입력 및 출력 어레이 위치들을 식별하는 로드 및 저장 명령들을 가지는 명령 세트를 포함하는 고유한 가상 코드로 기록된다는 것을 섹션 1.0의 위의 논의로부터 상기하라. 다양한 구현들에서, X, Y 좌표 정보는 실제로 하드웨어 플랫폼으로 프로그래밍되고, 그 컴포넌트들 중 다양한 컴포넌트들에 의해 인식/이해될 수 있다. 이것은, 예컨대, (예컨대, 컴파일러 내에서) X, Y 좌표를 상이한 정보로 변환하는 것과는 별개이다. 예컨대, 스텐실 프로세서 내의 2-차원 시프트 레지스터 구조의 경우, X, Y 좌표 정보는 레지스터 시프트 이동들로 변환된다. 대조적으로, 하드웨어 플랫폼의 다른 부분들은 특히, 더 높은 가상 코드 레벨에서 원래 표현된 X, Y 좌표 정보를 수신 및 이해할 수 있다.
[0069] 도 7에서 관측되는 바와 같이, 섹션 1.0에서 설명되는 바와 같이, 프로그램 코드 개발자는 가상 코드 레벨에서 특수 명령 포맷을 가지는 X, Y 좌표들로서 데이터 위치들을 표현한다(710). 컴파일 스테이지 동안, 가상 코드는 하드웨어(객체 코드) 및 하드웨어의 구성(예컨대, 레지스터) 공간으로 로딩되는 대응하는 구성 정보에 의해 실제로 프로세싱되는 프로그램 코드로 변환된다. 도 7에서 관측되는 바와 같이, 일 실시예에서, 특정 커널에 대한 객체 코드는 스텐실 프로세서의 스칼라 프로세서(705)의 프로그램 공간으로 로딩된다.
[0070] 구성 프로세스의 일부로서, 스칼라 프로세서(705) 상에서 실행되는 구성 소프트웨어는, 적절한 구성 정보를, 스텐실 프로세서(702)에 커플링된 시트 생성기 유닛(703), 및 스텐실 프로세서(702)가 스텐실 프로세서(702)에 의해 생성된 프로세싱된 시트들을 동작 또는 수신하도록 새로운 시트들을 생성할 라인 버퍼 유닛(701) 둘 모두로 로딩한다(711, 712). 여기서, 일반적으로, 시트들은 여전히, 전체 이미지의 X, Y 좌표들에 관해 고려될 수 있다. 즉, 일단 (예컨대, 행당 픽셀들의 수, 행들의 수, 열당 픽셀들의 수 및 열들의 수에 관해) 이미지 또는 프레임이 정의되면, 이미지의 임의의 부분 또는 포지션은 여전히 X, Y 좌표들로 지칭될 수 있다.
[0071] 이로써, 다양한 실시예들에서, 시트 생성기 유닛(703) 및 라인 버퍼 유닛(701) 중 하나 또는 둘 모두는, 정보 플랫폼을 설정하는 이들 개개의 구성 공간(configuration space)(706, 707) 내의 정보로 구성되고, 정보 플랫폼으로부터 이미지 또는 프레임의 특정 위치들 및/또는 구역들(예컨대, 라인 그룹들, 시트들)이 X, Y 좌표들로 식별된다(711, 712). 다양한 구현들/사용들에서, X, Y 좌표들은 가상 코드 레벨로 표현되는 동일한 X, Y 좌표들일 수 있다.
[0072] 그러한 정보의 예들은, 예컨대, 라인 버퍼 유닛 내의 활성 라인 그룹들의 수, (예컨대, 한 세트의 4개의 X, Y 좌표들(각각의 코너에 하나씩) 또는 X, Y 좌표들의 쌍(하위 더 가까운 코너에 하나씩 그리고 상위 더 먼 코너에 하나씩)으로서) 각각의 라인 그룹에 대한 이미지 사이즈, 절대적 이미지 폭 및 이미지 높이, (단일 스텐실의 사이즈 및/또는 스텐실 프로세서의 오버랩되는 스텐실들의 영역을 정의하는 X, Y 값들로서 표현되는) 스텐실 사이즈, (예컨대, 더 작은 치수들을 가지는 이미지 사이즈와 동일한 용어들로 지정되는) 시트 및/또는 라인 그룹 사이즈, 등을 포함한다. 부가적으로, 라인 버퍼 유닛(701)은 적어도, 부가적 구성 정보, 이를테면, 라인 버퍼 유닛(701)에 의해 관리되는 라인 그룹들을 기록하는 생산자 커널들의 수 및 이들을 판독하는 소비자 커널들의 수로 프로그래밍될 수 있다. 또한, 이미지 데이터와 연관된 치수들 및/또는 채널들의 수는 통상적으로, 구성 정보로서 포함된다.
[0073] 도 8은, 단지 일 예로서, 이미지 내의 라인 그룹들을 정의하기 위한 X, Y 좌표들의 사용을 도시한다. 여기서, N개의 라인 그룹들(801_1, 801_2 ,... 801_N)이 이미지(801) 내에서 관측가능하다. 도 8에서 보여질 수 있는 바와 같이, 각각의 라인 그룹은, 예컨대, 라인 그룹의 코너 포인트들 중 하나 이상을 정의하는 이미지 내의 X, Y 좌표들에 대한 참조에 의해 용이하게 정의될 수 있다. 이로써, 다양한 실시예들에서, 특정 라인 그룹을 정의하는 데 사용되는 라인 그룹의 이름 또는 다른 데이터 구조는, 특히, 라인 그룹을 식별하기 위해 라인 그룹과 연관된 X, Y 좌표 위치들을 포함할 수 있다.
[0074] 간단하게 도 7을 다시 참조하면, 도 7은, 런타임 동안, 시트 생성기(703)가, 예컨대, 원하는 데이터 구역을 정의하는 X, Y 좌표 정보를 포함함으로써, 라인 버퍼 유닛(701)으로부터 "다음" 라인 그룹(또는 라인 그룹의 일부분)을 요청할 수 있다는 것을 도시한다는 점이 주목된다. 도 8은 이미지 데이터의 완전한 행들로만 구성된 공칭의 "전체 폭" 라인 그룹들을 도시한다. 아래에서 추가로 더 상세하게 설명되는 "가상적-톨"로 지칭되는 대안적 구성에서, 라인 버퍼 유닛(701)은 초기에, 이미지 데이터의 전체 폭 행들로서 라인 그룹의 제1 상위 부분만을 전달한다. 그런 다음, 라인 그룹의 후속 하위 행들은 특히, 전체 폭 행보다 적고 개별적으로 요청되는 인접한 청크들에서 시트 생성기에 의해 요청된다. 이로써, 전체 라인 그룹을 획득하기 위해 시트 생성기에 의해 다수의 요청들이 이루어진다. 여기서, 각각의 그러한 요청은 다음 하위 부분에 기인하는 X, Y 좌표들에 의해 다음 하위 부분을 정의할 수 있다.
[0075] 도 9a 내지 도 9c는 라인 버퍼 유닛 실시예(900)의 다양한 특징들을 나타낸다. 도 9a에서 관측되는 바와 같이, 라인 버퍼 유닛은 라인 그룹들(903_1 내지 903_N)이 저장되는 메모리(902)(예컨대, SRAM(static random access memory) 또는 DRAM(dynamic random access memory))를 포함한다. 도 9a는 메모리(902) 내의 특정 이미지/프레임에 대해 라인 그룹들(903_1 내지 903_N)을 생산 및 소비하는 다양한 커널들 사이의 활동을 도시한다.
[0076] 도 9a에서 관측되는 바와 같이, 생산자 커널 K1은 새로운 라인 그룹들을 별개의 시간 인스턴스들 P1, P2 내지 PN을 통해 메모리(902)에 전송한다. 생산자 커널 K1은 데이터의 새로운 시트들을 생성하는 스텐실 프로세서 상에서 실행된다. 스텐실 프로세서에 커플링된 시트 생성기는 라인 그룹들을 형성하기 위해 시트들을 누적하며, 라인 그룹들을 메모리(902)로 포워딩한다.
[0077] 도 9a에 또한 도시되는 바와 같이, 생산자 커널 K1에 의해 생성된 라인 그룹들(903_1 내지 903_N)에 대해 연산하는 2개의 소비자 커널들 K2, K3이 존재한다. 여기서, 소비자 커널들 K2 및 K3은 시간들 C21 및 C31에 제1 라인 그룹(903_1)을 각각 수신한다. 분명하게, 시간들 C21 및 C31은 시간 P1 이후에 발생한다. 다른 제한들은 존재하지 않을 수 있다. 예컨대, 시간들 C21 및/또는 C31은 시간들 P2 내지 PN 중 임의의 시간 이전에 또는 이후에 발생할 수 있다. 여기서, 커널들 K2 및 K3에 대한 개개의 시트 생성기들은 이들의 개개의 커널에 적절한 시간에 다음 라인 그룹을 요청한다. 커널들 K2, K3 중 임의의 커널이 시간 P1 이전에 라인 그룹(903_1)을 요청하면, 그 요청은 라인 그룹(903_1)이 메모리(902)에 실제로 기록된 이후까지 유휴이다. 많은 구현들에서, 생산자 커널은 소비자 커널과는 상이한 스텐실 프로세서 상에서 동작한다.
[0078] 구상가능하게, 라인 그룹들(903_1 내지 903_N) 모두에 대한 커널들 K2 및 K3 중 하나 또는 둘 모두로부터의 요청들은 시간 P1 이전에 도착할 수 있다. 따라서, 라인 그룹들은 언제든지 소비자 커널들에 의해 요청될 수 있다. 그러나, 생산자 커널 K1이 라인 그룹들을 생산할 수 있는 레이트에 따라 소비자 커널들이 라인 그룹들을 요청할 때, 라인 그룹들은 소비자 커널들로 포워딩된다. 다양한 실시예들에서, 소비자 커널들은 라인 그룹들을 순서대로 요청하고, 마찬가지로, 이들을 순서대로 수신한다(커널 K2는 시간들 C22 내지 C2N에 순서대로 라인 그룹들(902_2 내지 902_N)을 수신함). 간략함을 위해, 특정 라인 그룹에 대해 단지 하나의 생산자 커널만이 도시된다. 다양한 실시예들은 상이한 생산자들이 동일한 라인 그룹에 기록할 수 있게 허용하도록 설계될 수 있다(예컨대, 여기서 소비자들은 모든 생산자들이 라인 그룹에 기록한 이후까지 서비스될 수 있게 허용되지 않음)는 것이 구상가능하다.
[0079] (소비자 커널(들)이 프로세서의 DAG 프로세싱 흐름에서 제1 커널들이기 때문에) 어떠한 생산자 커널도 존재하지 않는 경우들에서, 이미지 데이터 프레임들은 (예컨대, DMA(direct memory access)를 통해 또는 카메라로부터) 메모리(902)로 전달되고, 라인 그룹들로 파싱될 수 있다. (생산자 커널이 프로세서의 전체 프로그램 흐름에서 최종 커널이기 때문에) 어떠한 소비자 커널(들)도 존재하지 않는 경우들에서, 결과적 라인 그룹들은 출력 프레임들을 형성하도록 결합될 수 있다.
[0080] 도 9b는 전체적 라인 버퍼 유닛(900)의 더 상세한 실시예를 도시한다. 논의를 위해, 도 9a의 활동은 도 9b의 라인 버퍼 유닛(900) 상에 중첩된다. 도 9b에서 보여질 수 있는 바와 같이, 라인 버퍼 유닛(900)은 라인 버퍼 유닛 회로(901)에 커플링된 메모리(902)를 포함한다. 라인 버퍼 유닛 회로(901)는, 예컨대, 전용 로직 회로로 구성될 수 있다. 라인 버퍼 유닛 회로(901) 내에서, 라인 버퍼 인터페이스 유닛(904_1 내지 904_N)은 메모리(902) 내의 각각의 라인 그룹(903_1 내지 903_N)에 대해 예비된다. 다양한 실시예들에서, 라인 버퍼 유닛이 임의의 순간에 관리할 수 있는 라인 그룹들의 수에 대한 상한을 세팅하는 고정 수의 라인 버퍼 인터페이스 유닛들(904_1 내지 904_N)이 존재한다(N개보다 적은 수의 라인 그룹들이 활성이면, 대응하는 더 작은 수의 라인 버퍼 유닛 인터페이스들은 활성화되어 언제든지 사용 중에 있음).
[0081] 도 9b에 도시되는 바와 같이, 라인 버퍼 유닛 회로(901) 내의 총 수 N개의 라인 버퍼 인터페이스 유닛들(904)을 이용하여, 라인 버퍼 유닛(900)은 최대 수의 라인 그룹들을 핸들링한다. 부가적으로, 최대 허용된 라인 그룹 사이즈로(여기서, 라인 그룹 사이즈는 구성가능한 파라미터임), 메모리(902)에 대한 대략적 사이즈가 결정될 수 있다(물론, 하드웨어 효율성들을 허용하기 위해, 더 작은 메모리 풋프린트가 N개의 최대 사이즈 라인 그룹들을 동시에 허용하지 않는 것을 희생으로 인스턴스화될 수 있음).
[0082] 각각의 라인 버퍼 인터페이스 유닛(904_1 내지 904_N)은 그것이 핸들링하도록 할당된 특정 라인 그룹에 대한 생산자 및 소비자 요청들을 핸들링하는 것을 담당한다. 예컨대, 라인 버퍼 인터페이스 유닛(904_1)은 라인 그룹(903_1)을 저장하기 위해 시간 P1에 생산자 K1로부터의 요청을 핸들링할 뿐만 아니라, 라인 그룹(903_1)에 대한 소비자 커널들 K2 및 K3으로부터의 요청들을 핸들링한다. 전자에 대한 응답으로, 라인 버퍼 인터페이스 유닛(904_1)은 라인 그룹(903_1)을 메모리(902)에 기록한다. 후자에 대한 응답으로, 라인 버퍼 인터페이스 유닛(904_1)은 메모리(902)로부터의 라인 그룹(903_1)의 개개의 판독들을 수행하며, 시간 C21 및 C31에 라인 그룹(903_1)을 소비자들 K2 및 K3으로 각각 포워딩한다.
[0083] 라인 그룹의 모든 소비자들로 이들의 라인 그룹 복사본이 포워딩된 이후에, 라인 버퍼 인터페이스 유닛이 다른 라인 그룹에 할당되는 것은 "자유"롭다. 예컨대, 라인 그룹(903_1)이 프레임들의 시퀀스의 제1 이미지 프레임 내의 제1 라인 그룹을 표현하면, 라인 그룹(903_1)이 시간들 C21 및 C31에 소비자들 K2 및 K3으로 포워딩된 이후에, 라인 버퍼 인터페이스 유닛(904_1)은 다음으로, 프레임들의 시퀀스의 다음 제2 이미지 프레임 내의 제1 라인 그룹을 핸들링하기 위해 할당될 수 있다. 이러한 방식으로, 라인 버퍼 유닛 회로(901)는 라인 버퍼 인터페이스 유닛들(904)의 "풀(pool)"을 가지는 것으로 보여질 수 있으며, 여기서, 각각의 인터페이스 유닛에는 그것의 직전 라인 그룹이 그것의 최종 소비자에게 전달된 이후에 관리할 새로운 라인 그룹이 할당된다. 따라서, 인터페이스 유닛들이 반복적으로 입력되며, 이들의 최종 소비자를 서빙하고 이들의 다음 라인 그룹을 기다리는 라인 버퍼 인터페이스 유닛들의 "프리 풀(free pool)"로부터 제거될 때, 인터페이스 유닛들의 회전이 존재한다.
[0084] 도 9c는 회전의 실시예를 더 상세하게 예시한다. 도 9c에서 관측되는 바와 같이, 이용가능한 라인 버퍼 인터페이스 유닛은 라인 버퍼 유닛 회로 내의 라인 버퍼 인터페이스 유닛들의 프리 풀로부터 선택된다(910). 그런 다음, 라인 버퍼 인터페이스 유닛은 적절한 구성 정보(예컨대, 새로운 라인 그룹 또는 선형 메모리 주소 등가물의 X, Y 포지션 정보)로 구성된다(911). 여기서, 도 9b에서, 각각의 라인 버퍼 인터페이스 유닛이 그러한 구성 정보가 유지되는 구성 레지스터 공간(905)을 포함할 수 있다는 점이 주목된다.
[0085] 그런 다음, 라인 버퍼 인터페이스 유닛은 그것의 새롭게 할당된 라인 그룹에 대한 생산자 및 소비자 요청들을 핸들링하도록 진행한다(912). 최종 생산자가 라인 그룹에 기록한 이후에(다양한 실시예들에서는 라인 그룹당 단지 하나의 생산자만이 존재함) 그리고 최종 소비자에게 그것의 생산자(들)에 의해 기록된 라인 그룹의 버전이 제공된 이후에, 라인 버퍼 인터페이스 유닛은 프리 풀로 리턴되고, 프로세스는 다음 라인 그룹에 대해 반복한다(910). 도 9c의 제어 흐름을 감독하는 라인 버퍼 유닛 회로(901) 내의 제어 로직 회로는 예시를 위해 편의상 도 9b에 도시되지 않는다.
b. 프로그래밍가능한 레지스터 공간 실시예들
[0086] 다음 라인 그룹의 할당의 일부로서 라인 버퍼 인터페이스 유닛에 제공되는 업데이트된 구성 정보(911)에 관련하여, 공칭의 경우, 라인 버퍼 유닛(900) 그 자체는, 예컨대, 고정 세트의 하나 이상의 소비자들에 공급하는 단지 하나의 고정 생산자의 정적 어레인지먼트(arrangement)를 핸들링한다. 이러한 경우, 주 구성 정보(예컨대, 라인 그룹 사이즈, 소비자들의 수 등)는 또한, 정적인 경향이 있으며, 라인 그룹마다 변경되지 않을 것이다. 오히려, 라인 버퍼 인터페이스 유닛에 제공되는 새로운 구성 정보는 주로, 새로운 라인 그룹(예컨대, 메모리 내의 라인 그룹의 위치 등)을 식별한다. 그러나, 더 복잡한 잠재적 어레인지먼트들/설계들이 가능하다. 이들 중 일부는 바로 아래에서 더 상세하게 설명된다.
[0087] 도 9d는 라인 버퍼 인터페이스 유닛의 레지스터 공간의 컨텐츠들(예컨대, 도 9b의 레지스터 공간(905_1)의 컨텐츠)의 실시예를 도시한다. 레지스터 필드들 중 일부에 대한 설명이 바로 따른다.
[0088] LB_Enable 필드(921)는 본질적으로, 라인 버퍼 인터페이스 유닛을 인에이블링하며, 프리 풀로부터 라인 버퍼 인터페이스 유닛을 취하는 프로세스의 일부로서 "세팅"된다. Num_Channels 필드(922)는 라인 그룹의 이미지 데이터 내의 채널들의 수를 정의한다. 일 실시예에서, Num_Channels 필드(922)는 라인 그룹당 데이터의 총 량을 결정하는 데 사용될 수 있다. 예컨대, 비디오 스트림은 종종, 적색(R) 픽셀들의 프레임 시퀀스, 청색(B) 픽셀들의 프레임 시퀀스, 및 녹색(G) 픽셀들의 프레임 시퀀스를 포함한다. 따라서, 임의의 라인 그룹에 대해, 정보의 실제로 3개의 라인 그룹들 가치(R, G 및 B)가 존재한다.
[0089] Num_Consumers 필드(923)는 라인 그룹을 요청할 소비자들의 수를 설명한다. 일 실시예에서, 라인 버퍼 인터페이스 유닛은, 라인 그룹 인스턴스가 Num_Consumers 필드(923) 내의 값과 동일한 횟수만큼 전달된 이후에 프리 풀에 입력될 것이다.
[0090] Row_Width 필드(924)는 (예컨대, 픽셀들의 수의) 전체 라인 그룹의 폭을 정의한다. Row_Width(924) 값이 컴파일러에 의해 제공되는 X 좌표 값으로서 표현될 수 있다는 점이 주목된다. FB_Rows 필드(926)는 (예컨대, 픽셀들의 수의) 전체 라인 그룹의 높이를 정의한다. FB_Rows 필드(924)가 컴파일러에 의해 제공되는 Y 좌표 값으로서 표현될 수 있다는 점이 주목된다.
[0091] FB_Base_Address 필드(930)는 라인 버퍼 유닛 메모리 내의 라인 그룹의 위치를 정의한다. "전체" 라인 그룹 모드로 지칭되는 제1 연산 모드에서, 전체 사이즈 라인 그룹은 메모리에 액세스된다(라인 그룹들은 생산자들로부터 수신되며, 전체 양의 그들의 개개의 데이터를 포함하는 것으로서 소비자들에게 전달됨). 전체 라인 그룹 모드에서, Num_Channels 필드(922), Row_Width 필드(924) 및 FB_Rows 필드(926)는 전체 라인 그룹에 완전히 액세스하기 위해 메모리에 적용될 주소들의 범위를 결정하기 위해 FB_Address 필드(930)와 함께 사용될 수 있다. 부가적으로, 이러한 동일한 파라미터들은 X, Y 좌표들의 라인 그룹을 요청한 시트 생성기로부터의 요청을 선형 메모리 주소로 "변환"하기 위해 사용될 수 있다.
[0092] VB_Enable, VB_Rows, VB_Cols, Num_Reuse_Rows 및 VB_Base_Address 필드들(925, 927, 928, 931)은 아래에서 추가로 상세하게 설명되는 "가상 톨" 라인 그룹 모드로 지칭되는 다른 연산 모드에서 사용된다.
[0093] 도 9d는 단일 라인 버퍼 인터페이스 유닛에 대한 구성 레지스터 공간(905)을 디스플레이한 반면, 대조적으로, 도 9e는 전체적으로 라인 버퍼 유닛 회로(901)에 대한 글로벌 구성 레지스터 공간(907)의 컨텐츠들의 실시예를 도시한다. 도 9d의 라인 버퍼당 인터페이스 유닛 레지스터 공간이 특정 라인 그룹에 초점이 맞추어지는 반면, 대조적으로, 도 9e의 글로벌 레지스터 공간(907)은 동일한 이미지로부터의 상이한 라인 그룹들의 파싱 뿐만 아니라 이미지의 프로세싱과 연관된 생산자/소비자 결합에 특정되는 다른 정보를 이해하는 것에 초점이 맞추어진다.
[0094] 도 9e에서 관측되는 바와 같이, 글로벌 레지스터 공간의 실시예는 채널들의 수(932) 및 특정 이미지에 대한 소비자들의 수(933)를 포함한다. 간략함을 위해, 도 9e의 레지스터 공간은 단지, 한 세트의 생산자들 및 소비자들(예컨대, 단지 단일 비디오 스트림 및 DAG 내의 단일 포인트)을 가지는 하나의 이미지를 고려한다. 구상가능하게, 도 9e의 레지스터 공간의 다수의 인스턴스들은 라인 버퍼 유닛 회로가 효과적으로 멀티-태스킹할 수 있게 허용하도록 배정될 수 있다.
[0095] 멀티-태스킹의 제1 형태는 이미지 프로세서 상에 구현되는 DAG 또는 소프트웨어 파이프라인 내에 있다. 여기서, 동일한 라인 버퍼 유닛은 DAG 내의 2개의 상이한 노드들에 대한 또는 파이프라인의 2개의 상이한 스테이지들에 대한 라인 그룹핑을 핸들링하도록 구성될 수 있다(즉, 단일 라인 버퍼 유닛은 하나보다 많은 스텐실 프로세서를 지원할 수 있음). 상이한 노드들/스테이지들은 상이한 수들의 소비자들을 용이하게 가질 수 있지만, 많은 경우들에서, 동일한 이미지 및 스텐실 사이즈 특성들을 가질 가능성이 있다. 멀티-태스킹의 제2 형태는 동일한 이미지 프로세서 하드웨어 상에 구현되는 다수의 상이한 DAG들 및/또는 다수의 상이한 파이프라인들에 걸쳐 있다. 예컨대, 4개의 스텐실 프로세서들을 가지는 이미지 프로세서는 완전히 상이한 스텐실 치수들을 가지는 완전히 상이한 이미지 사이즈들을 각각 프로세싱하는 2개의 완전히 상이한 2-스테이지 파이프라인들을 동시에 실행할 수 있다.
[0096] 도 9e의 특정 실시예로 리턴하면, DAG 내의 또는 파이프라인 스테이지들 사이의 임의의 특정 노드는 이미지 내의 채널들의 수, 이미지 사이즈, 적용가능한 스텐실의 치수들 및 라인 그룹들의 소비자들의 수에 의해 고 레벨에서 특성화될 수 있다는 점(도 9e는 다시, 라인 그룹당 하나의 생산자가, 그러나 구상가능하게, 하나보다 많은 생산자가 단일 라인 그룹에 기록할 수 있다고 가정하며, 이 경우, 도 9e의 글로벌 레지스터 공간은 또한, 생산자들의 수에 대한 필드를 포함할 것임)이 주목된다. Num_Channels 및 Num_Consumers 필드들(932, 933)은 본질적으로, 도 9c의 대응하는 필드들(922, 923)과 동일하다.
[0097] Image_Size 및 Stencil_Dimension 필드들(934, 935)은 본질적으로, 프로세싱될 이미지의 치수들 및 이미지로부터 조각될 라인 그룹들에 대해 동작할 스텐실의 치수들을 각각 설명한다. 필드들(934, 935) 둘 모두는 X, Y 좌표 값들에 관해 표현될 수 있으며, 컴파일러로부터 제공될 수 있다는 점이 주목된다. 부가적으로, 일 실시예에서, 라인 버퍼 회로 유닛(도 9b에 도시되지 않음) 내의 제어 로직 회로는, 라인 버퍼 인터페이스 유닛이 글로벌 정보와 관련된 생산자/소비자 세트로부터의 라인 그룹들을 핸들링하기 위해 할당될 때, 라인 버퍼 인터페이스 유닛의 레지스터 공간으로 로딩되는 Row_Width(924), FB_Rows(926) 및 FB_Base_Address 값들(930)을 결정하기 위해 Image_Size 및 Stencil_Dimension 필드들(934, 935)을 사용한다. 대안적 또는 추가적 실시예에서, 이미지 사이즈는 그 자체의 개별적으로 주소지정 가능한 레지스터 공간을 가질 수 있는 2개의 별개 값들, 즉, image_width 및 image_height로서 표현된다. 마찬가지로, 스텐실 사이즈는, 그 자체의 개별적으로 주소지정 가능한 레지스터 공간을 가질 수 있는 2개의 별개 값들, 즉, stencil_width 및 stencil_height로서 표현될 수 있다.
[0098] Row_Width(924)는 Image_Size(934) 정보로부터 직접적으로 획득가능하다. 예컨대, Image_Size가 이미지 원점으로부터 가장 먼 픽셀(원점이 좌측 하위 모서리에 있으면 우측 상위 모서리)에서의 X, Y 좌표 쌍으로서 표현되면, Row_Width는 X 좌표 값으로서 결정될 수 있다.
[0099] FB_Rows 및 FB_Base_Address 필드들(926, 930)은 Image_Size 및 Stencil_Dimension 필드들(934, 935)로부터 결정될 수 있다. 여기서, 구체적으로, 각각의 라인 그룹(FB_Rows (926))의 높이는 이미지의 높이(Image_Size(934)의 Y 좌표 값) 및 스텐실 높이(Stencil_Dimension(935)의 Y 좌표 값)로부터 계산될 수 있다. 일단 라인 그룹들의 높이가 알려지면, 이미지로부터 파싱되는 라인 그룹들의 수 및 메모리 내의 각각의 그러한 라인 그룹에 대한 시작 선형 주소(FB_Base_Address(930))가 또한 결정될 수 있다.
[00100] 따라서, 일 실시예에서, 글로벌 레지스터 공간이 도 9e의 레지스터 필드들에 의해 특성화되는 특정 생산자/소비자 결합에 대한 라인 그룹을 핸들링하기 위해 라인 버퍼 유닛이 할당될 때, 위에서 설명된 결정들은 온 더 플라이(on the fly)로 계산되고, FB_Width(924), FB_Rows(926), Base_Address(934) 각각은 직접적으로 복사하는 Num_Consumers(923) 및 Num_Channels(922)와 함께 라인 버퍼 인터페이스 유닛의 특정 레지스터 공간으로 로딩된다. 그에 따라서, 로직 회로 및 데이터 경로들은 이러한 결정들 및 데이터 전달들을 수행하기 위해 글로벌 레지스터 공간과 라인 버퍼 인터페이스 유닛 레지스터 공간의 각각의 인스턴스 사이에 존재할 수 있다.
[00101] 대안적 실시예에서, 컴파일러는 이러한 계산들 각각을 수행하며, 그에 의해, 글로벌 레지스터 공간 모두는 아니더라도 전적으로 많은 부분을 제거한다. 여기서, 예컨대, 컴파일러는 각각의 라인 그룹에 대한 Base_Address 값을 결정하고, 라인 버퍼 회로 유닛 내의 룩-업 테이블에 값들을 로딩할 수 있다. 값들은 룩-업 테이블로부터 콜(call)되며, 그들의 대응하는 라인 그룹들이 구성될 때 라인 버퍼 인터페이스 유닛의 레지스터 공간으로 로딩된다. 이러한 2개의 극단들(하드웨어 온-더-플라이 대 결정된 정적 컴파일러) 사이의 상이한 결합들이 또한 구현될 수 있다.
[00102] 위의 실시예들이 레지스터 회로("레지스터 공간") 내의 구성 정보의 유지를 강조하였지만, 다른 또는 결합된 실시예들에서, 구성 정보는 메모리(이를테면, 버퍼 유닛 메모리) 또는 다른 메모리 또는 정보 유지 회로 내에 유지될 수 있다.
c. 전체 라인 그룹 모드 대 가상 톨 모드
[00103] 위의 논의들은 주로 "전체 라인 그룹" 모드에 관련되며, 여기서, 라인 그룹들은 완전한 전체적 라인 그룹들로 지칭되며, 그들로서 시트 생성기들과 라인 버퍼 유닛 사이에서 전달된다. "가상 톨"로 지칭되는 다른 모드에서, 라인 그룹들은 분리된 개별 세그먼트들로 완성된 전체 폭 상위 부분 및 하위 부분으로 지칭되며, 그들로서 시트 생성기들 사이에서 전달된다.
[00104] 도 10a 및 도 10b는 예시적 가상 톨 모드 시퀀스의 도면을 도시한다. 도 10a에서 관측되는 바와 같이, 라인 그룹은 초기에, 전체 폭 행들의 상위 부분(1003) 및 폭의 제1의 더 짧은 세그먼트만을 가지는 제1 하위 부분(1004_1)으로서 형성된다. 라인 그룹의 초기 형성은 생산 시트 생성기에 의해 라인 버퍼 유닛에 제공될 수 있거나, 또는 라인 버퍼 유닛에 의해 소비 시트 생성기에 제공될 수 있다.
[00105] 생산자의 경우, 라인 그룹은, 스텐실들(1002)이 하위 부분(1004_1)(대략적 스텐실 포지셔닝이 도 10b에서 관측됨)에 대해 프로세싱한 이후에 형성된다. 생산자 스텐실 프로세서가 하위 부분(1004_1)에 대해 프로세싱한 이후에, 스텐실들은 우측으로 수평하게 계속 포워딩한다. 결국, 스텐실들은 다음 하위 부분(1004_2)에 대해 프로세싱할 것이다. 다음 하위 부분(1004_2)의 완료 시, 다음 하위 부분(1004_2)은 시트 생성기로부터 라인 버퍼 유닛으로 전송되고, 라인 버퍼 유닛은 이를 정확한 위치, 예컨대 "제1 하위 부분(1004_1) "옆"의 메모리에 저장한다. 프로세스는, 라인 그룹이 라인 버퍼 유닛 메모리에 완전히 기록될 때까지 계속된다.
[00106] 소비자들의 경우, 도 10a에서 관측되는 바와 같이, 라인 그룹은 초기에 시트 생성기로 전달된다. 스텐실 프로세서는 라인 그룹의 제1 부분(1004_1)에 대해 동작한다. 제1 부분(1004_1)의 프로세싱이 거의 완료되면, 시트 생성기는, 메모리로부터 인출되어 라인 버퍼 유닛에 의해 전달되는 다음 하위 부분(1004_2)을 요청할 것이다. 프로세스는 라인 그룹이 완전히 프로세싱될 때까지 계속된다.
[00107] 생산자들 및 소비자들 둘 모두에 대해, 하위 부분들은 특히, 시트 생성기에 의해 식별된다는 점이 주목된다. 즉, 생산자 경우 및 소비자 경우 둘 모두에서, 하위 부분(1004_2)은 특히, 시트 생성기에 의해 식별되고, 라인 버퍼 유닛은 특히, 하위 부분(1004_2)을 저장/인출하기 위해 메모리에 액세스한다. 일 실시예에서, 시트 생성기는 컴파일러에 의해 제공된 정보에 기반하여 고려되는 X, Y 좌표 값들(예컨대, 하위 부분(1004_2)의 임의의 모서리, 하위 부분(1004_2)의 모든 4개의 모서리들, 단지 X 좌표 값 등)을 통해 하위 부분(1004_2)을 식별한다.
4.0 매크로 I/O 유닛 실시예들
[00108] 입력 이미지 데이터를 이미지 프로세서에 공급하기 위해, 매크로 I/O 유닛(405)은 이미지 데이터의 프레임들을 라인 버퍼 유닛(401)에 전달한다는 것을 도 4의 논의로부터 상기하라. 마찬가지로, 이미지 프로세서로부터의 프로세싱된 이미지 데이터를 이미지 프로세서를 사용하고 있는 어떤 시스템 자원(예컨대, 애플리케이션 소프트웨어 프로그램, 디스플레이, 카메라 등)으로 제공하기 위해, 이미지 데이터의 프로세싱된 출력 프레임들이 라인 버퍼 유닛(401)으로부터 매크로 I/O 유닛(405)으로 전달된다.
[00109] 도 11a는 매크로 I/O 유닛(1105)의 실시예를 더 상세하게 도시한다. 일 실시예에 따라, 도 11a에서 관측되는 바와 같이, 매크로 I/O 유닛(1105)은 이미지 프로세서(1101)의 외부에 있는 메모리(1106)에 커플링된다. 여기서, 예컨대, 외부 메모리(1106)는 컴퓨터 시스템의 시스템 메모리, 즉, 카메라, 그래픽 프로세서, 액셀러레이터(accelerator), 및/또는 이미지 프로세서(1101)가 구성 부분이거나 또는 그렇지 않으면 연관된 코-프로세서로의 로컬 메모리일 수 있다. 외부 메모리(1106)는, 이미지 프로세서(1101) 로직 그 자체의 외부에 있고, 그에 따라서, 이미지 프로세서의 내부 메모리(이를테면, 라인 버퍼 유닛들(401) 또는 시트 생성기들(403)에 로컬인 메모리)와 상이한 임의의 메모리인 것으로 이해된다.
[00110] 공칭 동작 동안, 이미지 프로세서(1101)에 의해 프로세싱될 이미지 데이터의 입력 프레임들은 외부 메모리(1106)에 먼저 기록된다. 그런 다음, 매크로 I/O 유닛(1105)은 외부 메모리(1106)로부터 이미지 프레임을 판독하며, 이들을 이미지 프로세서(1101)에 공급한다. 이미지 프로세서(1101)가 프레임들 중 하나 이상의 프레임들의 충분한 부분들의 프로세싱을 완료한 이후에, 매크로 I/O 유닛은, 프로세싱된 부분들을 이미지 프로세서의 출력으로서 외부 메모리(1006)에 기록한다. 프레임 그 자체가 완전히 프로세싱되기 이전에, 프레임의 부분들은 외부 메모리에 기록될 수 있다는 점이 주목된다.
[00111] 도 11a는 매크로 I/O 유닛(1105)의 실시예의 고 레벨 도면을 도시한다. 도 11a에서 관측되는 바와 같이, 매크로 I/O 유닛(1105)은 다수의 로직 채널 유닛들(1110_1 내지 1110_N)을 포함하도록 설계되고, 로직 채널 유닛들(1110_1 내지 1110_N)은 각각, 외부 메모리(1106)와, 외부 메모리로부터 판독되고 이미지 프로세서에 의해 프로세싱될 이미지 데이터의 내부 소비자, 또는 이미지 프로세서로부터 외부 메모리(1106)로 기록될 필요가 있는 출력 이미지 데이터의 내부 생산자 사이의 로직 채널을 설정하는 것을 담당한다.
[00112] 다양한 실시예들에서, 그러한 소비자들 또는 생산자들은 라인 버퍼 유닛 또는 스텐실 프로세서의 시트 생성기일 수 있다. 여기서, 도 4를 다시 참조하면, 일 실시예에서, 매크로 I/O 유닛(405)은 라인 버퍼 유닛들(401) 뿐만 아니라 특정 스텐실 프로세서(402)의 임의의 시트 생성기(403)와의 통신을 허용하도록 네트워크(404)에 직접적으로 커플링된다. 다양한 다른 실시예들에서, 네트워크(404)는, 매크로 I/O 유닛(405)이, 도 4에 의해 제안되는 바와 같이, 라인 버퍼 유닛들(401)과 직접적으로 통신하는 것이 아니라 네트워크(404)를 통해 라인 버퍼 유닛들(401)과 통신한다는 의미에서 더 글로벌하다.
[00113] 도 11b는 로직 채널 유닛(1110)에 대한 로직 회로 설계의 실시예를 도시한다. 도 11b에서 관측되는 바와 같이, 로직 채널 유닛(1110)은, 상태 머신 로직 회로(1111), 컨텍스트 레지스터 공간(1112), 리-포맷팅 로직(1113), 입력 큐(1114), 출력 큐(1115) 및 다른 로직 채널 유닛들로의 통신 채널(1116)을 포함한다. 대안적 실시예들에서, 리-포맷팅 로직(1113)은, 도 11b에 의해 제안되는 바와 같이, 그 자체의 전용 리-포맷팅 로직을 가지는 각각의 채널이 아니라 다수의 로직 채널 유닛들에 의해 공유되는 단일 중앙 집중식 블록으로서 구현될 수 있다는 점이 주목된다. 간략함을 위해, 나머지 논의는 중앙 집중식 리포맷팅이 아니라 채널-당 리포맷팅 로직 블록들이 구현되었다고 가정할 것이다.
[00114] 로직 채널 유닛(1110)에 의해 수신된 이미지 데이터는 입력 큐(1114)로 수신된다. 입력 큐(1114)에 상주하는 입력 데이터의 픽셀들은 종종, 입력 큐(1114) 내의 입력 픽셀들이 포맷팅되는 것과 상이한 포맷에 따라, 출력 큐(1115)에서 출력 데이터의 유닛들을 구축하는 리포맷팅 로직(1113)에 의해 선택적으로 선택된다. 즉, 출력 데이터의 픽셀들은 통상적으로, 입력 큐(1114) 내의 입력 픽셀들이 포맷팅되는 것과 상이한 포맷 구조에 따라, 출력 큐(1115)에서 구조화될 것이다.
[00115] 예컨대, 외부 메모리로부터 이미지 프로세서로 입력 데이터를 공급하는 경우, 외부 메모리에 상주하는 입력 이미지 데이터는 RGB, RGB, RGB, 픽셀 데이터 포맷에 따라 구조화될 수 있다. 그러나, 스텐실 프로세서(들)는 동일한 컬러를 가지는 픽셀 데이터의 시트들에 대해 동작할 수 있다. 즉, 스텐실 프로세서(들)는 R 픽셀들의 시트들, G 픽셀들의 시트들 및 B 픽셀들의 시트들에 대해 개별적으로 동작할 수 있다. 이로써, 외부 메모리에서의 포맷으로부터 스텐실 프로세서들에 의해 활용되는 포맷으로 입력 이미지 데이터를 준비하기 위해, 리포맷팅 로직(1113)은, 예컨대, 출력 큐(1115)에 R 픽셀들의 블록들을 구축하기 위해 입력 큐(1114)로부터 R 픽셀들을 선택할 것이다. 일단 충분한 사이즈의 R 픽셀들의 블록이 출력 큐(1115)에 구축되었다면, 블록은 라인 버퍼 유닛 또는 스텐실 프로세서의 시트 생성기로 포워딩된다.
[00116] 예컨대, R 픽셀들의 공급이 소모되어 이미지 프로세서 내에서 더 깊게 포워딩된 이후에, 리포맷팅 로직(1113)은 출력 큐(1115)에 G 픽셀들의 블록들을 구축하기 위해 입력 큐(1114)로부터 단지 G 픽셀들만을 선택할 수 있다. 다시, G 픽셀들의 공급이 소모되어 포워딩된 이후에, 리포맷팅 로직(1113)은, 이미지 프로세서 내에서 더 깊게 포워딩하기 위해, 출력 큐(1105)에 B 픽셀들의 블록들을 구축하도록 입력 큐(1114)로부터 B 픽셀들을 선택할 것이다.
[00117] 반대로, 역 방향에서, 로직 채널 유닛(1110)이 이미지 프로세서로부터의 출력 이미지들의 외부 메모리에의 기록을 지원하는 데 사용되는 경우, 동일한 픽셀 타입들의 블록들은 입력 큐(1114)로 로딩된다. 즉, 예컨대, R 픽셀들, G 픽셀들 및 B 픽셀들의 블록들이 라인 버퍼 유닛 또는 스텐실 프로세서의 시트 생성기로부터 입력 큐(1114)에서 수신된다. 그런 다음, 리포맷팅 로직(1113)은 외부 메모리에 기록하기 위해 출력 큐(1115)에 원래 RGB, RGB 포맷 구조를 가지는 출력 블록들을 형성하도록 이러한 픽셀들 중 특정 픽셀들을 선택한다.
[00118] 상태 머신 로직(1111)은, 리-포맷팅 로직(1113)의 리포맷팅 거동을 제어하고, 외부 메모리에 액세스할 때 어떤 주소들 및/또는 주소지정 방식들을 사용할지를 결정할 뿐만 아니라, 외부 메모리로의 로직 채널 형성에서 자신이 어떤 라인 버퍼 유닛 또는 시트 생성기와 통신하고 있는지를 이해한다.
[00119] 다양한 실시예들에서, 상태 머신 로직(1111) 및 리포맷팅 로직(1113)은 전용 로직 회로로 구현된다. 다른 실시예들에서, 상태 머신 로직(1111) 및/또는 리포맷팅 로직(1113)은 상태 머신/리포맷팅 기능들을 구현하기 위해 프로그램 코드를 실행하는 마이크로-제어기로서 구현될 수 있다. 또 다른 실시예들에서, 상태 머신 로직(1111)/리포맷팅 로직(1113)은 프로그래밍된 로직 회로와 전용 로직 회로의 결합으로서 구현될 수 있다. 전용 로직 회로는 하드와이어드(hardwired) 및/또는 프로그래밍가능한 로직 회로들(예컨대, 향후의 예들인 PLD(programmable logic device), FPGA(field programmable gate array) 또는 PLA(programmable logic array)들)로서 구현될 수있다.
[00120] 상태 머신이, 자신의 다양한 책임들을 이해하기 위해 참조하는 정보의 바디(body)는, 예컨대, 이미지 프로세서가 특정 DAG 또는 파이프라인을 실행하도록 구성될 때 해당 DAG 또는 파이프라인에 대한 적절한 컨텍스트 정보가 초기에 로딩되는 컨텍스트 레지스터 공간(1112) 내에서 유지된다. DAG 또는 파이프라인의 실행 동안 레지스터 공간(1112)으로의 후속 업데이트들은, 상태 머신 로직(1111), 이미지 프로세서(이를테면, 스텐실 프로세서 내의 스칼라 프로세서 및/또는 이미지 프로세서를 사용하고 있는 시스템(예컨대, 컴퓨터, 카메라 등)) 내의 다른 지능에 의해 이루어질 수 있다.
[00121] 일 실시예에서, 컨텍스트 레지스터 공간(1112)은 다음 정보를 포함한다: 1) 입력 데이터를 이미지 프로세서에 공급하는 경우 외부 메모리로부터 판독되거나 또는 이미지 프로세서로부터의 출력 데이터를 기록하는 경우 외부 메모리에 기록될 이미지 데이터의 프레임의 기본 외부 메모리 주소; 2) (예컨대, 픽셀들의 유닛들의 폭 및 가중치에 관한) 이미지 프레임의 사이즈; 3) 외부 메모리 내의 데이터의 포맷; 4) 이미지 프로세서 내에서 사용될 데이터의 포맷; 및 5) 채널이 외부 메모리에 논리적으로 커플링되는 특정 시트 생성기, 스텐실 프로세서 또는 라인 버퍼 유닛의 아이덴티티. 다양한 실시예들에서, 어느 방향으로든 지원되는 이미지 데이터 포맷들은 RGB, 모든 하나의 컬러, 가능한 다른 것들 중에서 패킹된 RAW를 포함한다.
[00122] 도 11에서 관측되는 바와 같이, 로직 채널 유닛(1110)은 또한, 그것이 다수의 로직 채널들 사이의 조정을 수행하기 위해 다른 로직 채널들의 상태를 이해할 수 있도록 통신 링크(1116)를 포함한다. 단지 일 예로서, 입력 데이터를 이미지 프로세서에 공급하는 로직 채널은, 이미지 프로세서로의 이미지 데이터의 초기 로딩 이후에, 출력 이미지의 다음 프레임이 이미지 프로세서로부터 외부 메모리에 기록될 때까지, 외부 메모리로부터 이미지 프로세서로 입력 이미지 데이터의 다음 프레임을 로딩하는 것을 억제하도록 구성될 수 있다. 그러한 조정 없이, 이미지 프로세서의 내부 메모리 자원들은, 예컨대, 일부 DAG 또는 파이프라인 설계들에 대해 오버런될 수 있다.
[00123] 도 12a, 도 12b 및 도 13은 로직 채널의 상태 머신(1111)이 수행할 수 있는 프로세싱 동작들의 종류들의 몇 가지 적절한 특징들에 대해 추가로 상세하게 기술한다. 도 12a 및 도 12b는 로직 버퍼 유닛이 더 효율적으로 동작할 수 있도록 로직 채널 유닛에 의해 수행될 수 있는 외부 메모리의 특수 주소지정 프로시저들에 관련된다.
[00124] 전체 프레임 폭에 걸쳐 확장되지 않는 2차원 이미지 영역들(1004_1, 1004_2)이, 전체 폭 라인 버퍼들에 전달하거나, 또는 이전 행으로부터의 모든 데이터가 완전히 포워딩될 때까지 다음 행으로부터의 데이터가 포워딩되지 않는 경우, 전체 프레임 폭에 걸쳐 래스터 스캔(raster scan)하는 것이 아니라, 라인 버퍼로부터 시트 생성기로 순서대로 전달되는 "가상 톨" 모드에 따라 라인 버퍼 유닛이 동작할 수 있다는 것을 도 10a 및 도 10b의 설명으로부터 상기하라.
[00125] 도 12a 및 도 12b는, 이전 행으로부터의 모든 데이터가 완전히 포워딩되기 이전에 다음 행들로부터의 데이터가 포워딩되는 경우, 기법, 이를테면, "가상 톨"에 따라 시트 생성기로의 데이터의 로직 버퍼 유닛의 포워딩을 보완하기 위해 로직 채널 유닛(1110)의 상태 머신 로직(1111)이 구현할 수 있는 메모리 주소지정 방식을 나타낸다. 여기서, 도 12a를 참조하면, 이미지 영역(1201)은, 예컨대, 도 10a의 이미지 데이터(1004_1)를 포함하는 이미지 데이터로서, 보여질 수 있다.
[00126] 여기서, 이미지 프레임(1220) 내의 이미지 데이터(1201)는 외부 메모리로부터 판독되며, 라인 버퍼 유닛이 이미지 데이터(1004_1)를 시트 생성기로 포워딩하기 이전에 라인 버퍼 유닛에 전달된다. 이미지 데이터(1201)를 라인 버퍼 유닛으로 포워딩하기 위해, 메모리 주소지정은 이미지 프레임(1220) 데이터의 전체 행에 걸쳐 판독하는 것을 억제하고, 오히려, 행(1210)의 제한된 확장에 걸쳐 판독하고, 그런 다음, 다음 하위 행(1211)의 다음 제한된 확장을 판독하도록 "드롭 다운(drop down)"해야 한다는 점이 주목된다.
[00127] 프로세스는, 영역(1201)이 라인 버퍼 유닛에 전달될 수 있도록 영역(1201) 모두가 외부 메모리로부터 판독될 때까지 계속된다(예컨대, 이는 제한된 확장 행(1212)의 판독 이후에 완료함). 이미지 영역(1201)이 라인 버퍼 유닛에 전달된 이후에, 라인 버퍼 유닛은 이미지 데이터(1004_1)를 시트 생성기로 포워딩할 수 있다.
[00128] 도 12b에서 관측되는 바와 동일한 접근법을 계속하면, 도 12a에 관련하여 위에서 논의되는 바와 동일한 주소지정 기법(1210, 1211, ..., 1212) 및 이미지 영역(1201)에 따라 외부 메모리로부터 다음 이미지 영역(1202)이 판독된다. 이미지 영역(1202)이 특수 메모리 주소지정 접근법에 따라 외부 메모리로부터 판독된 이후에, 이미지 영역(1202)은 라인 버퍼 유닛으로 포워딩될 수 있고, 이는, 라인 버퍼 유닛을, 도 10b의 이미지 데이터(1004_2)를 동일한 시트 생성기로 포워딩할 수 있게 한다.
[00129] 이로써, 외부 메모리와 로직 버퍼 유닛 사이에 상주하는 로직 채널 유닛은, 라인 버퍼 유닛이 이미지 데이터를 시트 생성기로 포워딩하는 방식과 유사한 방식으로 데이터를 라인 버퍼 유닛으로 포워딩할 수 있다. 라인 버퍼 유닛이 입력 데이터를 시트 생성기에 공급하는 방식과 유사한 방식으로 입력 데이터를 로직 버퍼 유닛에 공급함으로써, 라인 버퍼 유닛의 전체 스루풋 및 효율성이 향상된다. 로직 채널 유닛은 또한, 외부 메모리로부터의 입력 데이터의 판독과 라인 버퍼 유닛으로의 입력 데이터의 포워딩 사이에서, (예컨대, RGB에서 모든 R, 모든 G 및 모든 B로) 전술된 리포맷팅을 수행할 수 있다는 점이 주목된다.
[00130] 도 12a 및 도 12b의 특수 주소지정 모드는 또한, 이미지 프로세서로부터의 출력 데이터를 외부 메모리에 기록하는 방향으로 적용될 수 있다. 여기서, 시트 생성기는, "가상 톨" 모드에서 프로세싱된 출력 이미지 데이터를 라인 버퍼에 전달할 수 있으며, 이는 차례로, 도 12의 영역들(1201, 1202)과 유사한 제한된 확장을 가지는 이미지 데이터의 영역들을 로직 채널 유닛으로 포워딩하도록 라인 버퍼 유닛을 프롬프팅할 것이다. 이에 대한 응답으로, 로직 채널 유닛은, 동일한 특수 주소지정 접근법(1210, 1211, ... 1212)에 따라 데이터를 외부 메모리에 기록할 것이다. 다시, 라인 버퍼 유닛으로부터의 출력 이미지 데이터의 수신과 외부 메모리로의 출력 이미지 데이터의 기록 사이에서 로직 채널에 의해 리포맷팅이 수행될 수 있다.
[00131] 도 13은, 예컨대, 스텐실 프로세서 상에서 실행되는 커널이 순서화되거나 또는 그 순서대로 정렬되는 것이 아니라, 입력 프레임 내의 그 위치에서 더 랜덤하거나 또는 애드 혹인 개별 표면 영역들을 특수하게 요청하는 다른 특수 주소지정 접근법과 관련된다. 예컨대, 도 13에서 관측되는 바와 같이, 스텐실 프로세서는 입력 프레임의 폭에 걸쳐 순서화된 순차적 모드(라인 그룹이든, 가상 톨이든 또는 그 외의 것이든)에서 데이터를 요청하는 것이 아니라 이미지 영역들(1301, 1302, 1303 및 1304)을 순서대로 요청할 수 있다. 여기서, 각각의 영역(1301 내지 1304)은, 도 12a, 도 12b의 제한된 확장 주소지정 접근법(1210, 1211, ... 1212)을 사용함으로써 판독되지만, 애드 혹 이미지 영역들(1301 내지 1304)의 한정 내에 있다. 이로써, 외부 메모리 인출 구역의 형상은 구성가능하게 이루어진다.
[00132] 순서화된 시퀀스가 아니라 애드 혹에서의 이미지 영역들의 프로세싱은, 예컨대, (이미지 스트림에서의 특징이 이동하는) 모션 보상 루틴들, (예컨대, 렌즈 또는 이미지 데이터의 수집된 프레임이 왜곡되는 다른 이미지 수집 결함들을 보상하기 위한) 기하학적 왜곡 루틴들 및 행렬 배(matrix multiple) 또는 전치 동작들에 유용할 수 있다.
[00133] 일 실시예에서, 애드 혹 주소지정은 매크로 I/O 유닛(1105) 내의 2개의 로직 채널 유닛들(1110)을 소비한다. 제1 로직 채널 유닛은 스텐실 프로세서가 요구하고 있는 각각의 애드 혹 이미지 영역의 기본 좌표 값들을 수신한다. 예컨대, 원하는 이미지 영역은, 영역의 좌측 하위 모서리의 주소와 함께 영역의 높이 및 폭을 식별하는 스텐실 프로세서에 의해 특정될 수 있다.
[00134] 공칭 동작이 동일한 폭 및 높이를 가지는 각각의 원하는 영역을 포함한다고 가정하면, 애드 혹 이미지 영역들의 시퀀스는 각각의 원하는 영역의 좌측 하부 모서리의 좌표 값들을 제1 로직 채널 유닛으로 포워딩함으로써 식별될 수 있다(예컨대, 영역(1301)의 좌측 하부 모서리의 제1 좌표 값들은 제1 로직 채널 유닛에 전송되고, 다음으로, 영역(1302)의 좌측 하부 모서리의 좌표 값들은 제1 로직 채널 유닛에 전송되는 식임). 그런 다음, 제1 로직 채널 유닛은, 수신된 좌표 값들을 (예컨대, 도 11a의 통신 채널(1106)을 통해) 제2 로직 채널 유닛으로 포워딩하고, 제2 로직 채널 유닛은 외부 메모리로부터 원하는 영역들을 판독하고, 이들을 리포맷팅하여, 그 후, 요청 스텐실 프로세서로 포워딩한다. 애드 혹 이미지 영역들의 시퀀스가 그들 사이에서 상당한 오버랩을 가질 수 있다는 것이 가능하다는 점이 주목된다. 즉, 제1 이미지 영역은 제2 이미지 영역이 또한 소비하는 동일한 이미지 영역 중 많은 이미지 영역을 소비할 수 있다. 일 실시예에서, 캐시는, 다수의 이미지 영역들 사이에서 오버랩되는 이미지 데이터를 유지하여서 동일한 데이터에 대한 메모리로의 다중 액세스들이 회피될 수 있도록, 외부 메모리와 로직 채널들 사이에서 구현된다.
[00135] 도 14는 위에서 논의된 바와 같이 로직 채널 유닛에 의해 수행될 수 있는 방법을 도시한다. 도 14에서 관측되는 바와 같이, 방법은, 이미지 프로세서 내의 소비 컴포넌트로의 로직 연결을 인에이블링하는 단계(1401)를 포함한다. 방법은 또한, 이미지 데이터의 프레임으로부터 일련의 제한된 폭 이미지 영역들을 판독하는 단계를 포함하고, 여기서, 이미지 영역들 각각은 RGB 포맷에 따라 포맷팅된다(1402). 방법은 또한, 일련의 제한된 폭 이미지 영역들을 동일한 컬러 컴포넌트를 가지는 이미지 데이터의 블록들로 리포맷팅하는 단계(1403)를 포함한다. 방법은 또한, 동일한 컬러 컴포넌트를 가지는 이미지 데이터의 블록들을 소비 컴포넌트로 포워딩하는 단계(1404)를 포함한다.
e. 구현 실시예들
[00136] 위에서 설명된 다양한 이미지 프로세서 아키텍처 특징들은 반드시 전통적 의미에서의 이미지 프로세싱으로 제한되는 것이 아니며, 그에 따라서, 이미지 프로세서로 하여금 재-특성화되게 할 수 있는(또는 할 수 없는) 다른 애플리케이션들에 적용될 수 있다는 것을 지적하는 것이 적절하다. 예컨대, 위에서 설명된 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이, 실제 카메라 이미지들의 프로세싱과는 대조적으로, 애니메이션의 창출 및/또는 생성 및/또는 렌더링에서 사용되면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특성화될 수 있다. 부가적으로, 위에서 설명된 이미지 프로세서 아키텍처 특징들은 다른 기술 애플리케이션들, 이를테면, 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 머신 학습에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 (예컨대, 컴퓨팅 시스템의 CPU이거나 또는 그 일부인) 추가적 범용 프로세서와(예컨대, 추가적 범용 프로세서에 대한 코-프로세서로서) 통합될 수 있거나, 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다.
[00137] 위에서 논의된 하드웨어 설계 실시예들은 반도체 칩 내에서 그리고/또는 반도체 제조 프로세스를 궁극적으로 목표로 하는 회로 설계의 설명으로서 구현될 수 있다. 후자의 경우, 그러한 회로 설명들은 (예컨대, VHDL 또는 Verilog) RTL(register transfer level) 회로 설명, 게이트 레벨 회로 설명, 트랜지스터 레벨 회로 설명 또는 마스크 설명 또는 이들의 다양한 조합들의 형태를 취할 수 있다. 회로 설명들은 통상적으로, 컴퓨터 판독가능한 저장 매체(이를테면, CD-ROM 또는 다른 타입의 저장 기술) 상에서 구현된다.
[00138] 이전 섹션들로부터, 위에서 설명된 바와 같은 이미지 프로세서가 (예컨대, 핸드헬드 디바이스의 카메라로부터의 데이터를 프로세싱하는 핸드헬드 디바이스의 SOC(System on Chip)의 일부로서) 컴퓨터 시스템 상에서 하드웨어로 구현될 수 있다는 것을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우들에서, 이미지 프로세서에 의해 프로세싱된 이미지 데이터는 카메라로부터 직접적으로 수신될 수 있다는 점이 주목된다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나 또는 통합 카메라를 가지는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우, 이미지 데이터는 카메라로부터 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접적으로 수신될 수 있다(예컨대, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아니라 시스템 메모리에 전송함). 이전 섹션에서 설명된 특징들 중 많은 특징들이 (애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용가능할 수 있다는 점이 또한 주목된다.
[00139] 도 15는 컴퓨팅 시스템의 예시적 도면을 제공한다. 아래에서 설명되는 컴퓨팅 시스템의 컴포넌트들 중 많은 컴포넌트들이 통합 카메라를 가지는 컴퓨팅 시스템 및 연관된 이미지 프로세서(예컨대, 핸드헬드 디바이스, 이를테면, 스마트폰 또는 태블릿 컴퓨터)에 적용가능하다. 당업자들은 이 둘 간을 용이하게 파악할 수 있을 것이다.
[00140] 도 15에서 관측되는 바와 같이, 기본 컴퓨팅 시스템은, 중앙 프로세싱 유닛(1501)(이는, 예컨대, 멀티-코어 프로세서 또는 애플리케이션 프로세서 상에 배치된 복수의 범용 프로세싱 코어들(1515_1 내지 1515_N) 및 메인 메모리 제어기(1517)를 포함할 수 있음), 시스템 메모리(1502), 디스플레이(1503)(예컨대, 터치스크린, 플랫-패널), 로컬 유선 포인트-투-포인트 링크(예컨대, USB) 인터페이스(1504), 다양한 네트워크 I/O 기능부들(1505)(이를테면, 이더넷 인터페이스 및/또는 셀룰러 모뎀 서브시스템), 무선 로컬 영역 네트워크(예컨대, WiFi) 인터페이스(1506), 무선 포인트-투-포인트 링크(예컨대, 블루투스) 인터페이스(1507) 및 글로벌 포지셔닝 시스템 인터페이스(1508), 다양한 센서들(1509_1 내지 1509_N), 하나 이상의 카메라들(1510), 배터리(1511), 전력 관리 제어 유닛(1512), 스피커 및 마이크로폰(1513) 및 오디오 코더/디코더(1514)를 포함할 수 있다.
[00141] 애플리케이션 프로세서 또는 멀티-코어 프로세서(1550)는, 그 CPU(1501) 내에 하나 이상의 범용 프로세싱 코어들(1515), 하나 이상의 그래픽 프로세싱 유닛들(1516), 메모리 관리 기능부(1517)(예컨대, 메모리 제어기), I/O 제어 기능부(1518) 및 이미지 프로세싱 유닛(1519)을 포함할 수 있다. 범용 프로세싱 코어들(1515)은 통상적으로, 컴퓨팅 시스템의 운영 시스템 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛들(1516)은 통상적으로, 예컨대, 디스플레이(1503) 상에 표시되는 그래픽 정보를 생성하기 위해, 그래픽 집약적 기능들을 실행한다. 메모리 제어 기능부(1517)는 시스템 메모리(1502)로/로부터 데이터를 기록/판독하기 위해 시스템 메모리(1502)와 인터페이싱한다. 전력 관리 제어 유닛(1512)은 일반적으로, 시스템(1500)의 전력 소비를 제어한다.
[00142] 이미지 프로세싱 유닛(1519)은 이전 섹션들에서 위에서 길게 설명된 이미지 프로세싱 유닛 실시예들 중 임의의 것에 따라 구현될 수 있다. 대안적으로 또는 조합하여, IPU(1519)는 GPU(1516) 및 CPU(1501) 중 하나 또는 둘 모두에 이들의 코-프로세서로서 커플링될 수 있다. 부가적으로, 다양한 실시예들에서, GPU(1516)는 위에서 길게 설명된 이미지 프로세서 특징들 중 임의의 것으로 구현될 수 있다.
[00143] 터치스크린 디스플레이(1503), 통신 인터페이스들(1504 -1507), GPS 인터페이스(1508), 센서들(1509), 카메라(1510) 및 스피커/마이크로폰 코덱(1513, 1514) 각각은 모두, 적절히, 통합 주변 디바이스(예컨대, 하나 이상의 카메라들(1510)) 역시 포함하는 전체 컴퓨팅 시스템에 관한 다양한 형태들의 I/O(입력 및/또는 출력)로서 보여질 수 있다. 구현에 따라, 이러한 I/O 컴포넌트들 중 다양한 컴포넌트들은 애플리케이션 프로세서/멀티-코어 프로세서(1550) 상에 통합될 수 있거나, 또는 다이로부터 떨어져 또는 애플리케이션 프로세서/멀티-코어 프로세서(1550)의 패키지 외부에 로케이팅될 수 있다.
[00144] 일 실시예에서, 하나 이상의 카메라들(1510)은 카메라와 그 시야(field of view)에서의 오브젝트 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어 (또는 프로그램 코드를 실행하기 위한 명령 실행 파이프라인을 가지는 다른 기능 블록) 상에서 실행되는 애플리케이션 소프트웨어, 운영 시스템 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 위에서 설명된 기능들 중 임의의 것을 수행할 수 있다.
[00145] 본 발명의 실시예들은 위에서 기술된 바와 같은 다양한 프로세스들을 포함할 수 있다. 프로세스들은 머신-실행가능한 명령들로 구현될 수 있다. 명령들은, 범용 또는 특수-목적 프로세서로 하여금, 특정 프로세스들을 수행하게 하는 데 사용될 수 있다. 대안적으로, 이러한 프로세스들은, 프로세스들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들 및 맞춤형 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
[00146] 본 발명의 엘리먼트들은 또한, 머신-실행가능한 명령들을 저장하기 위한 머신-판독가능한 매체로서 제공될 수 있다. 머신-판독가능한 매체는 플로피 디스켓들, 광학 디스크들, CD-ROM들 및 자기-광학 디스크들, 플래시 메모리, ROM들, RAM들, EPROM들, EEPROM들, 자기 또는 광학 카드들, 전파 매체들 또는 전자 명령들을 저장하기에 적합한 다른 타입의 매체들/머신-판독가능한 매체를 포함하지만, 이들로 제한되는 것은 아니다. 예컨대, 본 발명은 통신 링크(예컨대, 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체로 구현된 데이터 신호들에 의해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전달될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다.
[00147] 위의 명세서에서, 본 발명은 본 발명의 특정한 예시적 실시예들을 참조하여 설명되었다. 그러나, 첨부된 청구항들에서 기술되는 바와 같은 본 발명의 더 넓은 사상 및 범위로부터 벗어나지 않으면서 다양한 수정들 및 변경들이 이루어질 수 있다는 것이 분명할 것이다. 따라서, 명세서 및 도면들은 제한적 의미가 아니라 예시적으로 간주될 것이다.

Claims (15)

  1. 이미지 프로세서로서,
    개개의 2차원 시프트 레지스터 어레이 구조를 각각 갖는 하나 이상의 내부 스텐실(stencil) 프로세서들;
    시트(sheet) 생성기; 및
    상기 이미지 프로세서에 의한 프로세싱을 위해 외부 메모리로부터 입력 이미지 데이터를 판독하고 그리고 상기 이미지 프로세서로부터 상기 외부 메모리에 출력 이미지 데이터를 기록하도록 구성된 I/O 유닛을 포함하고,
    상기 I/O 유닛은 다수의 로직 채널 유닛들을 포함하고, 각각의 로직 채널 유닛은:
    상기 외부 메모리에 저장된 라인 그룹의 부분들에 대응하는 주소들을 생성하도록 구성된 주소지정 회로; 및
    상기 외부 메모리로부터 판독되는 데이터의 리포맷팅된 버전들을 생성하도록 구성된 리포맷팅 회로
    를 포함하고,
    각각의 로직 채널 유닛은, 상기 이미지 프로세서 내의 개개의 라인 버퍼와 상기 외부 메모리 사이의 로직 채널을 형성하도록 구성되고,
    각각의 로직 채널 유닛은 상기 이미지 프로세서의 라인 버퍼에 상기 외부 메모리에 저장된 개개의 라인 그룹의 리포맷팅된 부분들을 제공하도록 구성되고, 상기 리포맷팅된 부분들을 제공하는 것은:
    상기 외부 메모리에 저장된 라인 그룹의 개개의 부분들에 대응하는 주소들을 생성하기 위해 상기 주소지정 회로를 사용하는 것 ― 상기 주소들을 생성하는 것은, 상기 라인 그룹과 동일한 폭을 갖는 상기 라인 그룹의 제1 전체-폭(full-width) 영역에 대응하는 주소를 생성하고 그리고 상기 라인 그룹의 복수의 후속 영역들에 각각 대응하는 주소들을 반복하여 생성하는 것을 포함하고, 상기 복수의 후속 영역들의 각각의 후속 영역은 상기 라인 그룹보다 작은 폭을 가짐 ―,
    다수의 상이한 개개의 컬러 포맷들로 상기 개개의 라인 그룹의 각각의 부분의 리포맷팅된 버전들을 포함하는 리포맷팅된 이미지 데이터를 생성하기 위해 상기 리포맷팅 회로를 사용하는 것, 및
    상기 라인 버퍼에 상기 리포맷팅된 이미지 데이터를 제공하는 것
    을 포함하고,
    상기 이미지 프로세서의 상기 시트 생성기는, 상기 라인 버퍼로부터, 상기 하나 이상의 내부 스텐실 프로세서들 중의 내부 스탠실 프로세서의 2차원 시프트 레지스터 어레이 구조의 상이한 개개의 공간들로, 상기 라인 그룹의 각각의 후속 영역의 상이한 개개의 리포맷팅된 버전들을 갖는 다수의 시트들을 로딩하도록 구성되는,
    이미지 프로세서.
  2. 제1항에 있어서,
    각각의 로직 채널 유닛은, 상기 이미지 프로세서의 상기 시트 생성기가 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비(consume)할 때, 상기 복수의 후속 영역들을 반복하여 판독하고 그리고 상기 라인 버퍼에 제공하도록 구성되는,
    이미지 프로세서.
  3. 제2항에 있어서,
    상기 시트 생성기는 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비하도록 구성되고, 상기 소비하는 것은, 상기 라인 그룹의 상기 제1 전체-폭 영역 및 상기 라인 그룹의 후속 영역 양자 모두로부터의 데이터를 각각 갖는 이미지 데이터의 시트들을 생성하는 것 및 상기 이미지 프로세서의 상기 하나 이상의 내부 스텐실 프로세서들 중 하나에 각각의 생성된 이미지 데이터의 시트를 제공하는 것을 포함하는,
    이미지 프로세서.
  4. 제1항에 있어서,
    상기 리포맷팅 회로는 다수의 상이한 컬러 포맷들의 각각의 포맷으로 상기 라인 그룹의 각각의 후속 영역의 다수의 리포맷팅된 버전들을 생성하기 위해 입력 큐(queue)로부터 반복하여 판독하도록 구성되는,
    이미지 프로세서.
  5. 컴퓨팅 시스템으로서,
    하나 이상의 범용 프로세서들;
    외부 메모리;
    상기 외부 메모리에 커플링된 메모리 제어기; 및
    이미지 프로세서를 포함하고,
    상기 이미지 프로세서는:
    개개의 2차원 시프트 레지스터 어레이 구조를 각각 갖는 하나 이상의 내부 스텐실 프로세서들;
    시트 생성기; 및
    상기 이미지 프로세서에 의한 프로세싱을 위해 상기 외부 메모리로부터 입력 이미지 데이터를 판독하고 그리고 상기 이미지 프로세서로부터 상기 외부 메모리에 출력 이미지 데이터를 기록하도록 구성된 I/O 유닛
    을 포함하고,
    상기 I/O 유닛은 다수의 로직 채널 유닛들을 포함하고, 각각의 로직 채널 유닛은:
    상기 외부 메모리에 저장된 라인 그룹의 부분들에 대응하는 주소들을 생성하도록 구성된 주소지정 회로; 및
    상기 외부 메모리로부터 판독되는 데이터의 리포맷팅된 버전들을 생성하도록 구성된 리포맷팅 회로
    를 포함하고,
    각각의 로직 채널 유닛은, 상기 이미지 프로세서 내의 개개의 라인 버퍼와 상기 외부 메모리 사이의 로직 채널을 형성하도록 구성되고,
    각각의 로직 채널 유닛은 상기 이미지 프로세서의 라인 버퍼에 상기 외부 메모리에 저장된 개개의 라인 그룹의 리포맷팅된 부분들을 제공하도록 구성되고, 상기 리포맷팅된 부분들을 제공하는 것은:
    상기 외부 메모리에 저장된 라인 그룹의 개개의 부분들에 대응하는 주소들을 생성하기 위해 상기 주소지정 회로를 사용하는 것 ― 상기 주소들을 생성하는 것은, 상기 라인 그룹과 동일한 폭을 갖는 상기 라인 그룹의 제1 전체-폭 영역에 대응하는 주소를 생성하고 그리고 상기 라인 그룹의 복수의 후속 영역들에 각각 대응하는 주소들을 반복하여 생성하는 것을 포함하고, 상기 복수의 후속 영역들의 각각의 후속 영역은 상기 라인 그룹보다 작은 폭을 가짐 ―,
    다수의 상이한 개개의 컬러 포맷들로 상기 개개의 라인 그룹의 각각의 부분의 리포맷팅된 버전들을 포함하는 리포맷팅된 이미지 데이터를 생성하기 위해 상기 리포맷팅 회로를 사용하는 것, 및
    상기 라인 버퍼에 상기 리포맷팅된 이미지 데이터를 제공하는 것
    을 포함하고,
    상기 이미지 프로세서의 상기 시트 생성기는, 상기 라인 버퍼로부터, 상기 하나 이상의 내부 스텐실 프로세서들 중의 내부 스탠실 프로세서의 2차원 시프트 레지스터 어레이 구조의 상이한 개개의 공간들로, 상기 라인 그룹의 각각의 후속 영역의 상이한 개개의 리포맷팅된 버전들을 갖는 다수의 시트들을 로딩하도록 구성되는,
    컴퓨팅 시스템.
  6. 제5항에 있어서,
    각각의 로직 채널 유닛은, 상기 이미지 프로세서의 상기 시트 생성기가 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비할 때, 상기 복수의 후속 영역들을 반복하여 판독하고 그리고 상기 라인 버퍼에 제공하도록 구성되는,
    컴퓨팅 시스템.
  7. 제6항에 있어서,
    상기 시트 생성기는 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비하도록 구성되고, 상기 소비하는 것은, 상기 라인 그룹의 상기 제1 전체-폭 영역 및 상기 라인 그룹의 후속 영역 양자 모두로부터의 데이터를 각각 갖는 이미지 데이터의 시트들을 생성하는 것 및 상기 이미지 프로세서의 상기 하나 이상의 내부 스텐실 프로세서들 중 하나에 각각의 생성된 이미지 데이터의 시트를 제공하는 것을 포함하는,
    컴퓨팅 시스템.
  8. 제5항에 있어서,
    상기 리포맷팅 회로는 다수의 상이한 컬러 포맷들의 각각의 포맷으로 상기 라인 그룹의 각각의 후속 영역의 다수의 리포맷팅된 버전들을 생성하기 위해 입력 큐로부터 반복하여 판독하도록 구성되는,
    컴퓨팅 시스템.
  9. 제5항에 있어서,
    상기 외부 메모리의 적어도 일부는 상기 컴퓨팅 시스템의 시스템 메모리 내에 상주하는,
    컴퓨팅 시스템.
  10. 제1항에 있어서,
    각각의 로직 채널 유닛은 각각의 라인 그룹의 각각의 전체-폭 영역과 각각의 라인 그룹의 각각의 후속 영역 사이의 판독들의 순서를 제어하도록 구성되는 상태 머신을 포함하는,
    이미지 프로세서.
  11. 개개의 2차원 시프트 레지스터 어레이 구조를 각각 갖는 하나 이상의 내부 스텐실 프로세서들을 포함하는 이미지 프로세서에 의해 수행되는 방법으로서,
    상기 이미지 프로세서의 I/O 유닛의 복수의 로직 채널 유닛들 중의 로직 채널 유닛에 의해, 상기 이미지 프로세서 내의 라인 버퍼와 외부 메모리 사이의 로직 채널을 형성하는 단계;
    상기 로직 채널 유닛에 의해, 상기 외부 메모리에 저장된 라인 그룹의 개개의 부분들에 대응하는 주소들을 생성하기 위해 주소지정 회로를 사용하는 단계 ― 상기 주소들을 생성하는 것은, 상기 라인 그룹과 동일한 폭을 갖는 상기 라인 그룹의 제1 전체-폭 영역에 대응하는 주소를 생성하고 그리고 상기 라인 그룹의 복수의 후속 영역들에 각각 대응하는 주소들을 생성하는 것을 포함하고, 상기 복수의 후속 영역들의 각각의 후속 영역은 상기 라인 그룹보다 작은 폭을 가짐 ―;
    다수의 상이한 개개의 컬러 포맷들로 상기 라인 그룹의 각각의 부분의 리포맷팅된 버전들을 포함하는 리포맷팅된 이미지 데이터를 생성하기 위해 상기 로직 채널 유닛의 리포맷팅 회로를 사용하는 단계;
    상기 라인 버퍼에 상기 리포맷팅된 이미지 데이터를 제공하는 단계; 및
    상기 이미지 프로세서의 시트 생성기에 의해 상기 라인 버퍼로부터, 상기 하나 이상의 내부 스텐실 프로세서들 중의 내부 스탠실 프로세서의 2차원 시프트 레지스터 어레이 구조의 상이한 개개의 공간들로, 상기 라인 그룹의 각각의 후속 영역의 상이한 개개의 리포맷팅된 버전들을 갖는 다수의 시트들을 로딩하는 단계를 포함하는,
    방법.
  12. 제11항에 있어서,
    상기 복수의 후속 영역들을 반복하여 판독하고 상기 라인 버퍼에 제공하는 것은 상기 이미지 프로세서의 상기 시트 생성기가 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비할 때 수행되는,
    방법.
  13. 제12항에 있어서,
    상기 시트 생성기에 의해, 상기 라인 버퍼로부터 각각의 후속 영역을 반복하여 소비하는 단계를 더 포함하고, 상기 소비하는 것은:
    상기 라인 그룹의 상기 제1 전체-폭 영역 및 상기 라인 그룹의 후속 영역 양자 모두로부터의 데이터를 각각 갖는 이미지 데이터의 시트들을 생성하는 것; 및
    상기 이미지 프로세서의 상기 하나 이상의 내부 스텐실 프로세서들 중 하나에 각각의 생성된 이미지 데이터의 시트를 제공하는 것
    을 포함하는,
    방법.
  14. 제11항에 있어서,
    상기 로직 채널 유닛의 상기 리포맷팅 회로에 의해, 다수의 상이한 컬러 포맷들의 각각의 포맷으로 상기 라인 그룹의 각각의 후속 영역의 다수의 리포맷팅된 버전들을 생성하기 위해 입력 큐로부터 반복하여 판독하는 단계를 더 포함하는,
    방법.
  15. 제11항에 있어서,
    각각의 로직 채널 유닛의 상태 머신에 의해, 각각의 라인 그룹의 각각의 전체-폭 영역과 각각의 라인 그룹의 각각의 후속 영역 사이의 판독들의 순서를 제어하는 단계를 더 포함하는,
    방법.
KR1020187022065A 2016-02-28 2016-12-29 이미지 프로세서에 대한 매크로 i/o 유닛 KR102072145B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662300880P 2016-02-28 2016-02-28
US62/300,880 2016-02-28
US15/389,168 US10380969B2 (en) 2016-02-28 2016-12-22 Macro I/O unit for image processor
US15/389,168 2016-12-22
PCT/US2016/069215 WO2017146817A1 (en) 2016-02-28 2016-12-29 Macro i/o unit for image processor

Publications (2)

Publication Number Publication Date
KR20180100362A KR20180100362A (ko) 2018-09-10
KR102072145B1 true KR102072145B1 (ko) 2020-01-31

Family

ID=57861271

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187022065A KR102072145B1 (ko) 2016-02-28 2016-12-29 이미지 프로세서에 대한 매크로 i/o 유닛

Country Status (9)

Country Link
US (3) US10380969B2 (ko)
EP (1) EP3420526A1 (ko)
JP (1) JP6750022B2 (ko)
KR (1) KR102072145B1 (ko)
CN (1) CN107133016B (ko)
DE (2) DE102016125846A1 (ko)
GB (2) GB2551412B (ko)
TW (3) TWI745084B (ko)
WO (1) WO2017146817A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US11386644B2 (en) * 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
CN111971663A (zh) * 2018-04-16 2020-11-20 埃米尔·巴登霍斯特 处理器和操作处理器的方法
CN110782387B (zh) * 2018-07-30 2023-09-22 阿里巴巴(中国)有限公司 图像处理方法、装置、图像处理器及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089792A1 (en) * 2010-09-29 2012-04-12 Brian Fahs Efficient implementation of arrays of structures on simt and simd architectures

Family Cites Families (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445177A (en) 1981-05-22 1984-04-24 Data General Corporation Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
US4935894A (en) 1987-08-31 1990-06-19 Motorola, Inc. Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information
US5162788A (en) * 1989-06-16 1992-11-10 Apple Computer, Inc. Chunky planar data packing apparatus and method for a video memory
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5671440A (en) 1994-08-08 1997-09-23 Eastman Kodak Company Color image data reorientation and format conversion system
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
US5736988A (en) * 1995-12-04 1998-04-07 Silicon Graphics, Inc. Apparatus and method for accelerated tiled data retrieval
US5960211A (en) * 1995-12-15 1999-09-28 Hughes Aircraft Data formatting method and apparatus for a data processing array
DE59607143D1 (de) 1996-01-15 2001-07-26 Infineon Technologies Ag Prozessor zur bildverarbeitung
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
JPH10271299A (ja) * 1997-03-27 1998-10-09 Ricoh Co Ltd デジタル複合機
US5943040A (en) * 1997-06-27 1999-08-24 Sun Microsystems, Inc. Graphical image reformatting
US6466265B1 (en) * 1998-06-22 2002-10-15 Eastman Kodak Company Parallel output architectures for CMOS active pixel sensors
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
JP4489305B2 (ja) 1999-03-16 2010-06-23 浜松ホトニクス株式会社 高速視覚センサ装置
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
JP4284501B2 (ja) 2003-03-28 2009-06-24 セイコーエプソン株式会社 画像データ縮小装置、マイクロコンピュータ及び電子機器
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP2006013701A (ja) 2004-06-23 2006-01-12 Seiko Epson Corp 表示コントローラ、電子機器及び画像データ供給方法
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
JP4111192B2 (ja) 2004-12-28 2008-07-02 セイコーエプソン株式会社 メモリコントローラ、表示コントローラ及びメモリ制御方法
JP6059413B2 (ja) 2005-04-28 2017-01-11 クアルコム,インコーポレイテッド 再構成可能命令セル・アレイ
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
US8094552B1 (en) * 2005-11-03 2012-01-10 Seagate Technology Llc Adaptive buffer for frame based storage communications protocols
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7595805B2 (en) 2006-04-11 2009-09-29 Qualcomm Incorporated Techniques to facilitate use of small line buffers for processing of small or large images
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927949A1 (en) 2006-12-01 2008-06-04 Thomson Licensing Array of processing elements with local registers
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
US20090015850A1 (en) 2007-07-13 2009-01-15 Kenneth Edward Smith Rapid loading of interleaved RGB data into SSE registers
WO2009031302A1 (ja) 2007-09-05 2009-03-12 Tohoku University 固体撮像素子及びその駆動方法
EP2289001B1 (en) 2008-05-30 2018-07-25 Advanced Micro Devices, Inc. Local and global data share
US20090319007A1 (en) 2008-06-20 2009-12-24 Mcnulty Jr James F Shocking device having a time-based monitoring and recording circuit
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
JP5339824B2 (ja) 2008-09-08 2013-11-13 キヤノン株式会社 画像形成装置およびその制御方法
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8700877B2 (en) 2009-09-25 2014-04-15 Nvidia Corporation Address mapping for a parallel thread processor
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
WO2012105174A1 (ja) 2011-01-31 2012-08-09 パナソニック株式会社 プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
WO2012124251A1 (ja) 2011-03-16 2012-09-20 パナソニック株式会社 データ処理装置、データ処理方法及びデータ共有システム
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9098924B2 (en) 2013-07-15 2015-08-04 Nvidia Corporation Techniques for optimizing stencil buffers
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US10297003B2 (en) * 2015-09-21 2019-05-21 Qualcomm Incorporated Efficient saving and restoring of context information for context switches

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089792A1 (en) * 2010-09-29 2012-04-12 Brian Fahs Efficient implementation of arrays of structures on simt and simd architectures

Also Published As

Publication number Publication date
US20200160809A1 (en) 2020-05-21
TW202112140A (zh) 2021-03-16
US20170256230A1 (en) 2017-09-07
GB2577959A (en) 2020-04-15
CN107133016A (zh) 2017-09-05
EP3420526A1 (en) 2019-01-02
TWI745084B (zh) 2021-11-01
US10380969B2 (en) 2019-08-13
TW201735650A (zh) 2017-10-01
DE202016107470U1 (de) 2017-06-30
JP6750022B2 (ja) 2020-09-02
KR20180100362A (ko) 2018-09-10
TWI702840B (zh) 2020-08-21
GB2577959B (en) 2020-10-07
GB2551412B (en) 2019-09-04
US10504480B2 (en) 2019-12-10
GB201910667D0 (en) 2019-09-11
GB201622425D0 (en) 2017-02-15
WO2017146817A1 (en) 2017-08-31
US20170249921A1 (en) 2017-08-31
TWI650013B (zh) 2019-02-01
CN107133016B (zh) 2021-03-30
US10733956B2 (en) 2020-08-04
GB2551412A (en) 2017-12-20
TW201921955A (zh) 2019-06-01
JP2019509549A (ja) 2019-04-04
DE102016125846A1 (de) 2017-08-31

Similar Documents

Publication Publication Date Title
US11190718B2 (en) Line buffer unit for image processor
US10719905B2 (en) Architecture for high performance, power efficient, programmable image processing
US10733956B2 (en) Macro I/O unit for image processor

Legal Events

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