KR20170125392A - 이미지 프로세서용 라인 버퍼 유닛 - Google Patents

이미지 프로세서용 라인 버퍼 유닛 Download PDF

Info

Publication number
KR20170125392A
KR20170125392A KR1020177028003A KR20177028003A KR20170125392A KR 20170125392 A KR20170125392 A KR 20170125392A KR 1020177028003 A KR1020177028003 A KR 1020177028003A KR 20177028003 A KR20177028003 A KR 20177028003A KR 20170125392 A KR20170125392 A KR 20170125392A
Authority
KR
South Korea
Prior art keywords
line
line buffer
line group
memory
image
Prior art date
Application number
KR1020177028003A
Other languages
English (en)
Other versions
KR102013404B1 (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 KR20170125392A publication Critical patent/KR20170125392A/ko
Application granted granted Critical
Publication of KR102013404B1 publication Critical patent/KR102013404B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/70SSIS architectures; Circuits associated therewith
    • H04N25/701Line sensors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • H04N5/3692
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/91Television signal processing therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Information Transfer Systems (AREA)
  • Memory System (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Input (AREA)

Abstract

복수의 라인 버퍼 인터페이스 유닛들로 구성된 라인 버퍼 유닛을 포함하는 장치가 기술된다. 각각의 라인 버퍼 인터페이스 유닛은 각각의 프로듀서에 의한 하나 이상의 요청들을 핸들링하여, 각각의 라인 그룹을 메모리에 저장하고 각각의 컨슈머에 의한 하나 이상의 요청들을 핸들링하여 메모리로부터 각각의 라인 그룹을 페치(fetch)하고 제공한다. 상기 라인 버퍼 유닛은 프로그램 가능한 저장 공간을 가지며, 그 정보는 라인 그룹 사이즈를 설정하여 상이한 이미지 사이즈들에 대한 상이한 라인 그룹 사이즈들이 메모리에 저장 가능하게 한다.

Description

이미지 프로세서용 라인 버퍼 유닛
본 발명의 분야는 일반적으로 이미지 프로세싱과 관련되며, 더 구체적으로는 이미지 프로세서용 라인 버퍼 유닛과 관련된다.
이미지 프로세싱은 일반적으로 어레이로 조직화된 픽셀 값들의 프로세싱과 관련된다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지들의 2차원적 특성(추가적 차원들은 시간을 포함할 수 있음(예를 들어 2차원 이미지들의 시퀀스))과 데이터 유형(예를 들어, 색상들)을 캡처한다. 일반적 시나리오에서, 어레이화된 픽셀 값들은 모션의 이미지들을 캡처하기 위해 정적 이미지 또는 프레임들의 시퀀스를 생성한 카메라에 의해 제공된다. 전통적인 이미지 프로세서는 일반적으로 두 가지 극단적인 측면에 있다.
제1 극단은 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 벡터 명령 강화 기능을 갖는 범용 프로세서)에서 실행되는 소프트웨어 프로그램으로서 이미지 프로세싱 작업을 수행한다. 제1 극단은 일반적으로 매우 다양한 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 연관된 오버 헤드 (예를 들어, 명령 페치 및 디코드, 온-칩 및 오프-칩 데이터 핸들링, 추측 실행)와 결합된 보다 정교한 데이터 구조들의 사용은 궁극적으로 프로그램 코드의 실행 동안 데이터의 단위 당 더 많은 양의 에너지가 소모되게 한다.
제2, 반대 극단은 고정 기능 유선 회로를 훨씬 더 큰 데이터 블록에 적용한다. 커스텀 디자인 회로에 직접적으로 적용되는 (정교한 것과 반대되는) 더 큰 데이터 블록을 사용하면 데이터 단위당 전력 소비가 크게 감소한다. 그러나 커스텀 디자인된 고정 기능 회로의 사용은 일반적으로 프로세서가 수행할 수 있는 작업들의 세트가 제한된다. 이와 같이, 널리 사용되는 (제1 극단과 관련된) 프로그래밍 환경은 제2 극단에서 부족하다.
고도로 융통성 있는 어플리케이션 소프트웨어 개발 기회와 데이터 단위당 개선된 전력 효율성을 제공하는 기술 플랫폼은 바람직하지만 여전히 해결책이 부족하게 남아있다.
복수의 라인 버퍼 인터페이스 유닛들로 구성된 라인 버퍼 유닛을 포함하는 장치가 기술된다. 각각의 라인 버퍼 인터페이스 유닛은 각각의 프로듀서에 의한 하나 이상의 요청들을 핸들링하여, 각각의 라인 그룹을 메모리에 저장하고 각각의 컨슈머에 의한 하나 이상의 요청들을 핸들링하여 메모리로부터 각각의 라인 그룹을 페치(fetch)하고 제공한다. 상기 라인 버퍼 유닛은 프로그램 가능한 저장 공간을 가지며, 그 정보는 라인 그룹 사이즈를 설정하여 상이한 이미지 사이즈들에 대한 상이한 라인 그룹 사이즈들이 메모리에 저장 가능하게 한다.
다음의 설명과 첨부 도면들은 본 발명의 실시예들을 도시하기 위해 사용된다. 도면들에서:
도 1은 기술 플랫폼의 다양한 컴포넌트들을 도시한다.
도 2a는 커널들로 빌트된 애플리케이션 소프트웨어의 실시예를 도시한다.
도 2b는 커널의 구조의 실시예를 도시한다.
도 3은 커널의 동작의 실시예를 도시한다.
도 4는 이미지 프로세서 하드웨어 아키텍처의 실시예를 도시한다.
도 5a, 5b, 5c, 5d 및 5e는 이미지 데이터의 라인 그룹으로의 파싱(parsing), 라인 그룹의 시트로의 파싱 및 오버래핑 스텐실들로 시트에 수행되는 동작을 도시한다.
도 6은 스텐실 프로세서의 실시예를 도시한다.
도 7은 이미지 프로세서의 구성 및 프로그래밍의 실시예를 도시한다.
도 8은 라인 그룹들로 구성된 이미지 프레임을 도시한다.
도 9a, 9b 및 9c는 라인 버퍼 유닛의 디자인 및 동작적 실시예들을 도시한다.
도 9d 및 9e는 이미지 프로세서의 프로그램 가능한 레지스터 공간의 실시예들을 도시한다.
도 10a 및 10b는 동작의 가상적 높이 모드(virtually tall mode)를 도시한다.
도 11a 및 11b는 라인 버퍼 인터페이스 유닛 실시예들을 도시한다.
도 12는 컴퓨팅 시스템의 실시예를 도시한다.
i. 도입
이하의 기술은 개선된 전력 효율을 제공하기 위해 더 큰 데이터 블록 (예를 들어, 이하에서 추가로 기술되는 라인 그룹들 및 시트들)을 사용하는 광범위하게 융통성 있는 애플리케이션 소프트웨어 개발 환경을 제공하는 새로운 이미지 프로세싱 기술 플랫폼에 관한 다수의 실시예를 기술한다.
1.0 애플리케이션 소프트웨어 개발 환경
a. 애플리케이션 및 커널들의 구조
도 1은 가상 이미지 프로세싱 환경(101), 실제 이미지 프로세싱 하드웨어(103) 및 가상 프로세싱 환경(101)을 위해 쓰여진 상위 레벨 코드를 실제 하드웨어(103)가 물리적으로 실행하는 오브젝트 코드로 번역(translate)하기 위한 컴파일러(102)를 포함하는 이미지 프로세서 기술의 고레벨 뷰를 도시한다. 아래에서보다 상세하게 기술되는 바와 같이, 가상 프로세싱 환경(101)은 개발 될 수 있는 애플리케이션 측면에서 널리 사용되며, 애플리케이션의 구성 프로세스들 쉽게 시각화 할 수 있도록 맞춤화된다. 개발자(104)에 의한 프로그램 코드 개발 노력이 완료되면, 컴파일러(102)는 가상 프로세싱 환경(101) 내에서 작성된 코드를 실제 하드웨어(103)를 타겟으로 하는 오브젝트 코드로 번역한다.
도 2a는 가상 환경 내에서 작성된 애플리케이션 소프트웨어가 취할 수 있는 구조 및 형태의 예를 도시한다. 도 2a에서 도시된 바와 같이, 프로그램 코드는 입력 이미지 데이터(201)의 하나 이상의 프레임들을 프로세싱하여 입력 이미지 데이터(201)에 대한 일부 전체적인 변환(transformation)을 수행할 것으로 예상될 수 있다. 변환은 개발자에 의해 표현된 조정된 시퀀스로 입력 이미지 데이터에 대해 동작하는 프로그램 코드(202)의 하나 이상의 커널들의 동작과 함께 실현된다.
예를 들어, 도 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, 다른 유형의 입력 이미지들에서 동작함).
이와 같이, 보다 큰 전체 이미지 프로세싱 시퀀스는 이미지 프로세싱 파이프라인 또는 지향 비순환 그래프(DAG, directed acyclic graph)의 형태를 취할 수 있고, 개발 환경은 상기와 같이 개발자가 개발된 프로그램 코드의 표현을 실제로 제시하도록 갖춰질 수 있다. 커널들은 개발자에 의해 개별적으로 개발될 수 있고 및/또는 (실제 신호 프로세서 하드웨어 및/또는 그것들의 디자인과 같은) 임의의 기본 기술 공급하는 엔터티에 의해 및/또는 서드 파티(예를 들어, 개발 환경을 위해 작성된 커널 소프트웨어 벤더)에 의해 제공될 수 있다. 이와 같이, 명목상의 개발 환경은 개발자가 그들의 보다 많은 개발 노력의 전반적인 흐름에 영향을 미치기 위해 다양한 방식으로 자유롭게 "후크업(hook-up)"할 수 있는 커널의 "라이브러리"가 포함될 것으로 예상된다. 이러한 라이브러리의 일부가 될 것으로 예상되는 일부 기본 커널들은 다음의 기본 이미지 프로세싱 작업 중 하나 이상을 제공하는 커널들을 포함할 수 있다: 컨볼루션들, 노이즈 제거, 색상 공간 컨버젼들, 엣지 및 코너 검출, 선명화하기, 화이트 밸런스, 감마 보정, 톤 매핑, 행렬 곱셈, 이미지 등록, 피라미드 구성, 웨이브렛 변환, 블록 단위 이산 코사인 및 푸리에 변환 등.
도 2b는 개발자에 의해 구상될 수 있는 커널(203)의 구조의 예시적인 도면을 도시한다. 도 2b에서 도시된 바와 같이, 커널(203)은 각각의 하부 프로세서(205) 상에서 각각 동작하는 프로그램 코드("스레드들")(204)의 다수의 병렬 스레드로서 보여질 수 있으며, 여기서 각각의 프로세서(205)는 출력 어레이(206)에서 특정 위치(커널이 생성하고 있는 출력 이미지의 특정 픽셀 위치와 같은)와 관련된다. 단순화를 위해, 단지 3 개의 프로세서들 및 대응하는 스레드들이 도 2b에 도시되었다. 다양한 실시예에서, 모든 도시된 출력 어레이 위치는 그 자신의 전용 프로세서 및 대응하는 스레드를 가질 수 있다. 즉, 별도의 프로세서와 스레드가 출력 어레이의 각 픽셀에 할당될 수 있다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들에서, 실제의 하부 하드웨어에서, 실행 레인들의 어레이 및 대응하는 스레드들은 현재 프로세스되고 있는 프레임의 “라인 그룹”의 부분에 대한 출력 이미지 데이터를 생성하기 위해 조화하여 동작한다(예를 들어, 단일 명령 다중 데이터(들)과 유사한 방식). 라인 그룹은 이미지 프레임의 연속하는 상당한 크기의 섹션이다. 다양한 실시예에서, 개발자는 라인 그룹들에서 동작하는 하드웨어를 의식할 수 있거나, 또는 개발 환경은 예를 들어 출력 프레임 내의 모든 픽셀(예를 들어, 그 자신의 전용 프로세서 및 스레드에 의해 생성되는 출력 프레임의 모든 픽셀)에 대한 별도의 프로세서 및 스레드가 있는 추상화를 제시할 수 있다. 다양한 실시예에서, 그럼에도 불구하고, 개발자는 커널이 각 출력 픽셀에 대한 개별 스레드를 포함하는 것을 이해한다(출력 어레이가 전체 출력 프레임으로 또는 그 섹션으로 시각화되는지 여부).
아래에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 가상 환경에서 개발자에게 제시되는 프로세서들(205)은 표준(예를 들어, RISC) op코드를 지원할 뿐만 아니라, 개발자가 수행되고 있는 픽셀 프로세싱에 의해 픽셀을 쉽게 시각화 할 수 있게 하는 특별하게 포맷된 데이터 액세스 명령들을 포함하는 명령 세트 아키텍처를 가진다. 전통적인 수학적 및 프로그램 제어 op코드의 전체 ISA와 결합하여 입력 어레이 위치를 쉽게 정의/시각화하는 능력은 기본적으로 애플리케이션 프로그램 개발자가 임의의 크기의 이미지 표면에 수행될 원하는 임의의 기능을 이상적으로 정의하게 하는 매우 다양한 프로그래밍 환경을 제공한다. 예를 들어, 이상적인 수학적 동작은 모든 스텐실 크기에 적용되도록 쉽게 프로그래밍될 수 있다.
데이터 액세스 명령들과 관련하여, 일 실시예에서, 가상 프로세서들의 ISA ("가상 ISA")는 특수 데이터 로드 명령 및 특수 데이터 저장 명령을 포함한다. 데이터 로드 명령은 이미지 데이터의 입력 어레이 내의 임의의 위치로부터 판독할 수 있다. 데이터 저장 명령은 이미지 데이터의 출력 어레이 내의 임의의 위치에 기록할 수 있다. 후자의 명령은 동일한 프로세서의 다수의 인스턴스를이 서로 다른 출력 픽셀 위치들에 쉽게 할당하게 한다(각 프로세서들은 출력 어레이의 서로 다른 픽셀에 기록). 이와 같이, 예를 들어, 스텐실 크기 그 자체(예를 들어, 픽셀들의 폭 및 픽셀들의 높이로 표현됨)는 쉽게 프로그램 가능한 구성으로 이루어질 수 있다. 프로세싱 동작의 시각화는 특수한 명령 포맷을 가지는 특수한 로드 및 저장 명령 각각으로 더 단순화되어, 그에 의해 타겟 어레이 위치들이 X 및 Y 좌표로 단순하게 특정된다.
그럼에도 불구하고, 출력 어레이의 다수 위치들 각각에 대한 개별 프로세서를 인스턴스화함으로써, 프로세서들은 그들 각각의 스레드들을 병렬로 실행하여, 예를 들어, 출력 어레이의 모든 위치들에 대한 각각의 값이 동시적으로 생성되도록 할 수 있다. 많은 이미지 프로세싱 루틴이 일반적으로 동일한 출력 이미지의 서로 다른 픽셀들에서 동일한 동작들을 수행한다는 것은 주목할 만하다. 이와 같이, 개발 환경의 일 실시예에서, 각각의 프로세서는 동일하다고 가정되고, 동일한 스레드 프로그램 코드를 실행한다. 따라서, 가상화된 환경은, 예를 들어 각각 동일한 코드를 록-스텝(lock-step)으로 실행하는 동일한 프로세서의 2D 어레이로 구성된 일종의 2차원(2D) SIMD 프로세서로서 보여질 수 있다.
도 3은 출력 어레이 내의 2개의 상이한 픽셀 위치들에 대해 동일한 코드를 프로세싱하는 2개의 가상 프로세서들에 대한 프로세싱 환경의 보다 상세한 예를 도시한다. 도 3은 생성되고 있는 출력 이미지에 대응하는 출력 어레이(304)를 도시한다. 여기서, 제1 가상 프로세서는 출력 어레이(304)의 위치 X1에서 출력 값을 생성하기 위해 스레드(301)의 코드를 프로세싱하고 있고, 제2 가상 프로세서는 출력 어레이(304)의 위치 X2에서 출력 값을 생성하기 위해 스레드(302)의 코드를 프로세싱하고 있다. 또한, 다양한 실시예에서, 개발자는 출력 어레이(304) 내의 각 픽셀 위치에 대해 별도의 프로세서 및 스레드가 있다는 것을 이해할 것이다(간략화를 위해 도 3은 이들 중 2개만 도시함). 그러나, 다양한 실시예에서, 개발자는 (프로세서의 성질과 같은 SIMD 때문에) 하나의 프로세서 및 스레드에 대한 코드를 개발할 필요가 있다.
당해 기술분야에 공지된 바와 같이, 출력 픽셀 값은 종종 대응하는 출력 픽셀 위치를 포함하고 둘러싸는 입력 어레이의 픽셀들을 처리함으로써 결정된다. 예를 들어, 도 3으로부터 볼 수 있는 바와 같이, 출력 어레이(304)의 위치 X1은 입력 어레이(303)의 위치 E에 대응한다. 그러므로, 출력 값 X1을 결정하기 위해 프로세스될 입력 어레이(303) 픽셀 값들의 스텐실은 입력 값들 ABCDEFGHI에 대응한다. 유사하게, 출력 값 X2를 결정하기 위해 프로세스될 입력 어레이 픽셀들의 스텐실은 입력 값들 DEFGHIJKL에 대응한다.
도 3은 출력값 X1 및 X2을 각각 계산하는데 사용될 수 있는 한 쌍의 스레드들(301, 302)에 대한 대응하는 가상 환경 프로그램 코드의 예를 도시한다. 도 3의 예에서, 두 쌍의 코드는 동일하고 9 개의 입력 어레이 값의 스텐실을 평균하여 대응하는 출력 값을 결정한다. 두 스레드 간의 유일한 차이점은 입력 어레이로부터 호출된 변수들과 기록되는 출력 어레이의 위치이다. 구체적으로, 출력 위치 X1에 기록하는 스레드는 스텐실 ABCDEFGHI에서 동작하고 출력 위치 X2에 기록하는 스레드는 스텐실 DEFGHIJKL에서 동작한다.
한 쌍의 스레드들(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. 가상 프로세서 메모리 모델
다양한 실시예에서, 가상 프로세서들의 관련 있는 구성은 그들의 메모리 모델이다. 본 기술분야에서 이해되는 바와 같이, 프로세서는 메모리로부터 데이터를 판독하고, 그 데이터에 대해 동작하며, 새로운 데이터를 다시 메모리에 기록한다. 메모리 모델은 프로세서가 데이터가 메모리에 조직화되는 방식의 관점 또는 뷰이다. 일 실시예에서, 가상 프로세서들의 메모리 모델은 입력 및 출력 어레이 영역 둘 다를 포함한다. 스레드들에 대한 입력 픽셀 값들은 입력 어레이 영역에 저장되고 스레드들에 의해 생성되는 출력 픽셀 값들은 출력 어레이 영역에 저장된다.
일 실시예에서, 새로운 메모리 어드레싱 방식은 가상 프로세서의 메모리 모델의 입력 어레이 부분으로부터 어느 특정 입력 값들이 호출되어야 하는지를 정의하는데 사용된다. 특히, 전통적인 선형 메모리 주소와 달리, X, Y 좌표로 원하는 입력 데이터를 정의하는 "위치 기준(position relative)" 어드레싱 방식이 사용된다. 이와 같이, 가상 프로세서들의 ISA의 로드 명령은 X 컴포넌트와 Y 컨포턴트로 입력 어레이 내의 특정 메모리 위치를 식별하는 명령 포맷을 포함한다. 이와 같이 2 차원 좌표계는 입력 어레이로부터 판독된 입력 값들을 메모리를 어드레싱하는데 사용된다.
위치 기준 메모리 어드레싱 접근법의 사용은 가상 프로세서가 동작하고 있는 이미지의 영역이 개발자에게 보다 쉽게 식별될 수 있게 한다. 상기 언급된 바와 같이, 전통적인 수학적 및 프로그램 제어 op코드의 전체 ISA와 결합하여 입력 어레이 위치를 쉽게 정의/시각화하는 능력은 기본적으로 애플리케이션 프로그램 개발자가 임의의 크기의 이미지 표면에 수행될 원하는 임의의 기능을 이상적으로 정의하게 하는 매우 다양한 프로그래밍 환경을 제공한다. 위치 기준 어드레싱 방식을 적용한 명령들에 대한 다양한 명령 포맷 실시예 뿐만 아니라 지원되는 ISA의 다른 구성들의 실시예들이 아래에서 더 상세히 기술된다.
출력 어레이는 스레드가 생성을 담당하는 출력 이미지 데이터를 포함한다. 출력 이미지 데이터는 전체 이미지 프로세싱 시퀀스를 따르는 디스플레이 상에 제시되는 실제 이미지 데이터와 같은 최종 이미지 데이터 일 수 있거나, 전체 이미지 프로세싱 시퀀스의 후속 커널을 그 입력 이미지 데이터 정보로서 사용하는 중간 이미지 데이터일 수 있다. 다시 말하면, 통상적으로 가상 프로세서들은 동일한 사이클 동안 출력 이미지 데이터의 상이한 픽셀 위치들에 기록하기 때문에, 동일한 출력 데이터 아이템들에 대해 경쟁하지 않는다.
일 실시예에서, 위치 기준 어드레싱 방식은 또한 출력 어레이에 기록하기 위해 사용된다. 이와 같이, 각 가상 프로세서에 대한 ISA는 메모리의 타겟팅된 기록 위치를 전통적인 랜덤 액세스 메모리 어드레스가 아닌 2차원 X, Y 좌표로 정의하는 저장 명령을 포함한다.
2.0 하드웨어 아키텍처 실시예들
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
도 4는 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(400)의 실시예를 도시한다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서를 위해 기록된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 4에 도시된 바와 같이, 아키텍처(400)는 복수의 스텐실 프로세서 유닛(402_1 내지 402_N) 및 네트워크(404)(예를 들어, 온 칩(on-chip) 스위치 네트워크, 온 칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온 칩(NOC))를 통해 대응하는 시트 생성 유닛(403_1 내지 403_N)에 상호연결된 복수의 라인 버퍼 유닛(401_1 내지 401_M)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(404)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 연결할 수 있다.
일 실시예에서, 프로그램 코드는 소프트웨어 개발자에 의해 미리 정의된 이미지 프로세싱 동작들을 수행하도록 대응하는 스텐실 프로세서(402) 상에 컴파일되고 로딩된다(프로그램 코드는 예를 들어, 디자인 및 구현예에 따라, 관련 스텐실 프로세서의 관련 시트 생성기(403) 상에 로딩될 수 있음). 적어도 일부의 경우에서, 이미지 프로세싱 파이프 라인은 제1 파이프라인 단계에 대한 제1 커널 프로그램을 제1 스텐실 프로세서 (402_1)로 로딩하고, 제2 파이프라인 단계에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(402_2)로 로딩함으로써 실현될 수 있다. 여기서 제1 커널은 파이프라인의 제1 단계의 기능을 수행하고, 제2 커널은 파이프라인의 제2 단계의 기능을 수행하며, 추가적인 제어 플로우 방법들이 설치되어 출력 이미지 데이터를 파이프라인의 한 단계로부터의 파이프라인의 다음 단계로 패스할 수 있다.
다른 구성에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2개 이상의 스텐실 프로세서들(402_1, 402_2)을 갖는 병렬 기계로서 실현될 수 있다. 예를 들어, 고밀도 및 고 데이터 레이트 스트림의 이미지 데이터는 각각이 동일한 기능을 수행하는 다수의 스텐실 프로세서들에 걸쳐 프레임을 확산시킴으로써 프로세싱될 수 있다.
또 다른 구성에서, 본질적으로 임의의 커널들의 DAG는 각각의 스텐실 프로세서들을 그들 자신의 프로그램 코드의 각각의 커널로 구성하고 커널로부터의 출력 이미지를 DAG 디자인에서 다음 커널의 입력으로 향하게 하기 위해 적절한 제어 흐름 훅들(hooks)을 하드웨어로 구성함으로써 하드웨어 프로세서 상에 로딩 될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(405)에 의해 수신되고 프레임 단위로 하나 이상의 라인 버퍼 유닛(401)에 패스된다. 특정 라인 버퍼 유닛은 그것의 이미지 데이터의 프레임을 "라인 그룹"으로 지칭되는, 이미지 데이터의 더 작은 영역으로 파싱하고, 그 후 라인 그룹을 네트워크(404)를 통해 특정 시트 생성기로 패스한다. 완전한 또는 "풀(full)" 단일 라인 그룹은, 예를 들어, 프레임의 다수의 연속적인 완전한 행 또는 열의 데이터로 구성 될 수 있다(단순화를 위해, 본 명세서는 주로 연속적인 행들을 참조할 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트"라고 지칭되는 이미지 데이터의 더 작은 영역으로 파싱하고 상기 시트를 그것의 대응하는 스텐실 프로세서에 제공한다.
일반적으로, 단일 입력을 갖는 이미지 프로세싱 파이프라인 또는 DAG 플로우의 경우, 입력 프레임들은 이미지 데이터를 라인 그룹들로 파싱하고 라인 그룹들을 시트 생성기(403)로 향하게 하는 동일한 라인 버퍼 유닛 (401_1)과 관련되며, 시트 생성기(403)의 대응하는 스텐실 프로세서(402_1)는 파이프라인/DAG에서 제1 커널의 코드를 실행한다. 스텐실 프로세서(402_1) 프로세스하는 라인 그룹들에서 스텐실 프로세서(402_1)에 의한 동작들의 완료에 따라, 시트 생성기(403_1)는 출력 라인 그룹들을 "다운스트림" 라인 버퍼 유닛(401_2)으로 보낸다(몇몇 경우에는, 출력 라인 그룹은 이전에 입력 라인 그룹들을 보냈던 동일한 라인 버퍼 유닛(401_1)으로 다시 보낼 수 있다).
그 후, 그 자신의 각각의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(403_2) 및 스텐실 프로세서(402_2))에서 실행되는 파이프라인/DAG에서 다음 단계/동작을 나타내는 하나 이상의 "컨슈머" 커널은, 다운스트림 라인 버퍼 유닛(402_1)으로부터 제1 스텐실 프로세서(402_1)에 의해 생성된 이미지 데이터를 수신한다. 이러한 방식으로, 제1 스텐실 프로세서 상에서 동작하는 "프로듀서" 커널은 제2 스텐실 프로세서 상에서 동작하는 "컨슈머"커널로 그것의 출력 데이터를 포워딩되게 하며, 여기서 컨슈머 커널은 전체 파이프라인 또는 DAG의 디자인과 일치하는 프로듀서 커널 이후에 작업들의 다음 세트를 수행한다.
스텐실 프로세서(402)는 이미지 데이터의 다수의 오버래핑 스텐실 상에서 동시에 동작하도록 디자인된다. 다수의 오버래핑 스텐실들 및 스텐실 프로세서의 내부 하드웨어 프로세싱 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(402) 내에서, 다수의 오버래핑 스텐실들에 의해 커버되는 이미지 데이터 표면 영역을 동시에 프로세스하기 위해 실행 레인들의 어레이들이 조화롭게 동작한다.
아래에서 보다 상세히 설명되는 바와 같이, 다양한 실시예에서, 이미지 데이터의 시트들은 스텐실 프로세서(402) 내의 2 차원 레지스터 어레이 구조에 로딩된다. 시트들 및 2 차원 레지스터 어레이 구조의 사용은, 예를 들어 실행 레인 어레이에 의해 그 직후에 데이터에 대해 직접 수행되는 프로세싱 작업들을 갖는 단일 로드 동작과 같이, 다량의 데이터를 많은 양의 레지스터 공간으로 이동시킴으로써 전력 소비 개선을 효과적으로 제공한다. 추가적으로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은 쉽게 프로그래밍 가능/구성 가능한 상이한 스텐실 크기들을 제공한다.
도 5a 내지 도 5e는 시트 생성기 유닛(403)에 연결된 스텐실 프로세서(402)의 스텐실 프로세싱 활동 뿐만 아니라 시트 생성기 유닛(403)의 보다 세분화된 파싱 활동과 라인 버퍼 유닛(401)의 파싱 활동 둘 다의 고레벨 실시예를 도시한다.
도 5a는 이미지 데이터(501)의 입력 프레임의 실시예를 도시한다. 또한 도 5a는 스텐실 프로세서가 동작하도록 디자인된 3 개의 오버래핑 스텐실(502)(각각 3픽셀 × 3픽셀의 치수를 가짐)의 아웃라인을 도시한다. 각 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 검정색으로 하이라이트된다. 단순화를 위해, 3개의 오버래핑 스텐실들(502)은 수직 방향으로만 오버래핑되는 것으로 도시된다. 실제로 스텐실 프로세서는 수직 및 수평 방향 둘 다에서 오버래핑 스텐실들을 갖도록 디자인될 수 있음을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직 오버래핑 스텐실들(502) 때문에, 도 5a에서 도시된 바와 같이, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내의 이미지 데이터의 넓은 대역이 존재한다. 아래에서보다 상세히 논의될 바와 같이, 일 실시예에서, 스텐실 프로세서들은 이미지 데이터를 가로질러 좌측에서 우측 방식으로 그들의 오버래핑 스텐실들 내에서 데이터를 프로세싱한다(그리고 그 후 라인들의 다음 세트에 대해, 위에서 아래 순서로 반복한다). 따라서, 스텐실 프로세서들이 그들의 동작을 계속 진행함에 따라, 완전 검정색 출력 픽셀 블록들의 수는 수평 방향으로 오른쪽으로 증가할 것이다. 상기 논의된 바와 같이, 라인 버퍼 유닛(401)은 스텐실 프로세서가 확장된 수의 다가오는 사이클 동안 동작하기에 충분한 인커밍 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 일 실시예에서, 이하에서 더 설명되는 바와 같이, 라인 버퍼 유닛(401)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송수신하기 위한 상이한 다이나믹들(dynamics)을 인식할 수 있다. 예를 들어, "전체 그룹"으로 지칭되는 한 모드에 따라, 이미지 데이터의 완전한 전체 폭 라인들은 라인 버퍼 유닛과 시트 생성기 사이에서 패스된다. "가상 높이"라고 지칭되는 제2 모드에 따르면, 라인 그룹은 초기적으로 전체 너비 행의 서브셋과 함께 패스된다. 그 후 나머지 행은 보다 작은(전체 너비보다 작은) 부분들로 순차적으로 패스된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 패스된 입력 이미지 데이터의 라인 그룹(503)으로, 시트 생성기 유닛은 라인 그룹을 스텐실 프로세서의 하드웨어 제한들에 그룹에 보다 더 정확하게 맞는 더보다 정교한 시트로 더 파싱한다. 보다 상세하게는, 이하에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 각 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 본질적으로 이미지 데이터를 실행 레인의 어레이의 "아래로" 시프트하며, 여기서 시프 팅의 패턴은 각 실행 레인이 그 자신의 각각의 스텐실 내에서 데이터를 동작하게 한다(즉, 각 실행 레인은 해당 스텐실에 대한 출력을 생성하기 위해 자신의 정보의 스텐실을 프로세싱한다). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이에 "채워지거나" 또는 이와 달리 로딩되는 입력 이미지 데이터의 표면 영역들이다.
따라서, 도 5b에서 도시된 바와 같이, 시트 생성기는 라인 그룹(503)으로부터 초기 시트(504)를 파싱하고, 그것을 스텐실 프로세서에 제공한다(여기서, 데이터 시트는 일반적으로 참조 번호(504)에 의해 식별되는 음영 영역에 대응한다). 도 5c 및 도 5d에 도시된 바와 같이, 스텐실 프로세서는 오버래핑 스텐실(502)을 시트의 좌측에서 우측으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트 상에서 동작한다. 도 5d에서 와 같이, 출력 값이 시트 내의 데이터로부터 계산될 수 있는 픽셀들의 수는 소모된다(다른 픽셀 위치들은 시트 내의 정보로부터 결정된 출력 값을 가질 수 없다). 단순화를 위해, 이미지의 경계 영역들은 무시되었다.
도 5e에서 도시된 바와 같이, 시트 생성기는 그 후 스텐실 프로세서가 동작들을 계속하기 위해 다음 시트(505)를 제공한다. 스텐실이 다음 시트에서 동작하기 시작할 때 스텐실의 초기 위치들은(도 5d에서 이전에 도시된 바와 같이) 제1 시트상의 고갈의 포인트로부터 우측으로의 다음 진행이다. 새로운 시트(505)로, 스텐실 프로세서가 제1 시트의 프로세싱과 동일한 방식으로 새로운 시트에서 동작함에 따라, 스텐실들은 단순히 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에 제1 시트(504)의 데이터와 제2 시트(505)의 데이터 사이에 약간의 오버랩이 있음을 주목해야 한다. 오버랩은 오버래핑되는 데이터를 두 번 재전송하는 시트 생성기에 의해 단순히 핸들링될 수 있다. 대안적 구현예에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 스텐실 프로세서에 새로운 데이터를 전송하기만 하여 진행하고, 스텐실 프로세서는 이전 시트로부터 오버래핑 데이터를 재사용할 수 있다.
b. 스텐실 프로세서 디자인 및 동작
도 6은 스텐실 프로세서 아키텍처(600)의 실시예를 도시한다. 도 6에서 도시된 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(601), 스칼라 프로세서(602) 및 관련 메모리(603) 및 I/O 유닛(604)을 포함한다. 데이터 계산 유닛(601)은 실행 레인들(605)의 어레이, 2차원 시프트 어레이 구조(606) 및 어레이의 특정 행 또는 열과 관련된 개별 랜덤 액세스 메모리(607)를 포함한다.
I/O 유닛(604)은 시트 생성기로부터 데이터의 수신된 "입력" 시트들을 데이터 계산 유닛(601)에 로딩하고, 스텐실 프로세서로부터의 데이터의 “출”" 시트들을 시트 생성기에 저장하는 역할을 한다. 일 실시예에서, 시트 데이터를 데이터 계산 유닛(601)에 로딩하는 것은 수신된 시트를 이미지 데이터의 행/열로 파싱하고 이미지 데이터의 행/열을 2차원 시프트 레지스터 구조(606) 또는 실행 레인 어레이의 행/열의 각각의 랜덤 액세스 메모리(607)(아래에서 자세히 기술됨)에 로딩하는 것을 수반한다. 만약 시트가 메모리들(607)에 초기적으로 로딩되면, 그 후 실행 레인 어레이(605) 내의 개별 실행 레인들은 적절할 때 시트 데이터를 랜덤 액세스 메모리들(607)로부터 2 차원 시프트 레지스터 구조(606)로 로드할 수 있다 (예를 들어, 시트의 데이터에 대해 동작하기 전에 단지 로드 명령으로서). (시트 생성기로부터 또는 메모리(607)로부터 직접적으로) 레지스터 구조(606) 로의 데이터의 시트의 로딩이 완료되면, 실행 레인 어레이(605)의 실행 레인들은 데이터 상에서 동작하고, 시트를 시트 발생기로 또는 랜덤 액세스 메모리(607)로 직접 되돌려 보내는 것으로서 사실상 최종 데이터를 "다시 기록(write back)"한다. 나중에 I/O 유닛(604)이 랜덤 액세스 메모리(607)로부터 데이터를 페치하여 출력 시트를 형성하면 시트 생성기로 포워딩된다.
스칼라 프로세서(602)는 스텐실 프로세서의 프로그램 코드의 명령들을 스칼라 메모리(603)로부터 판독하고 실행 레인 어레이(605)에서 실행 레인에 대한 명령을 발행하는 프로그램 제어기(609)를 포함한다. 일 실시예에서, 단일의 동일한 명령이 어레이(605) 내의 모든 실행 레인들에 브로드캐스트되어, 데이터 계산 유닛(601)로부터 SIMD-유사 행동에 효과를 미친다. 스칼라 메모리(603)로부터 판독되고 실행 레인 어레이(605)의 실행 레인들에 발행된 명령들의 명령 포맷은 명령 당 하나 이상의 op코드를 포함하는 VLIW(very-long-instruction-word)유형 포맷을 포함한다. 또 다른 실시예에서, VLIW포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU op코드 (후술하는 바와 같이, 일 실시 예에서 하나 이상의 전통적인 ALU 연산을 지정할 수 있음) 및 메모리 op코드를 포함한다(특정 실행 레인 또는 실행 레인들의 세트에 대한 메모리 동작을 지시하는).
"실행 레인"이라는 용어는 명령을 실행할 수 있는 하나 이상의 실행 유닛들의 세트를 지칭한다(예를 들어, 명령을 실행할 수 있는 논리 회로). 그러나, 다양한 실시예에서, 실행 레인은 단지 실행 유닛 이상의 프로세서-유사 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에도, 실행 레인은 수신된 명령을 디코딩하는 논리 회로 또는 더 많은 MIMD- 유사 디자인의 경우 명령을 페치하고 디코드하는 논리 회로 또한 포함할 수 있다. MIMD-유사 접근법들에 관하여, 중앙화된 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 다양한 대안적인 실시예들에서 더 분산된 접근법이 구현될 수 있다(예를 들어, 프로그램 코드 및 어레이(605)의 각 실행 레인 내에 프로그램 제어기를 포함하는).
실행 레인 어레이(605), 프로그램 제어기(609) 및 2차원 시프트 레지스터 구조(606)의 조합은 광범위한 프로그램 가능한 기능들을 위한 광범위하게 적용/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 소프트웨어 개발자들은 광범위한 상이한 기능적 능력 뿐만 아니라 치수(예를 들어, 스텐실 크기)를 가지는 커널들을 프로그래밍할 수 있고, 개별 실행 레인이 다양한 기능을 수행할 수 있고 임의의 출력 어레이 위치에 근접한 이미지 데이터에 쉽게 엑세스할 수 있는 넓은 범위의 다양한 기능을 가진 커널을 프로그래밍 할 수 있다.
랜덤 액세스 메모리(607)는 실행 레인 어레이(605)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서 작동하는 것 외에, 하나 이상의 룩업(look-up) 테이블들을 유지할 수도 있다. 또한, 다양한 실시예에서, 하나 이상의 스칼라 룩업 테이블들이 스칼라 메모리(603) 내에서 인스턴스화될 수 있다.
스칼라 룩업은 동일한 룩업 테이블로부터의 동일한 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(605) 내의 각 실행 레인으로 패스하는 것을 포함한다. 또한, 다양한 실시예에서, 전술한 VLIW 명령 포맷은 확장되어, 스칼라 프로세서에 의해 수행된 룩업 동작을 스칼라 룩업 테이블로 지시하는 스칼라 op코드를 포함한다. op코드와 함께 사용하도록 특정된 인덱스는 즉시 피연산자일 수 있거나 또는 일부 다른 데이터 저장 위치로부터 페치될 수 있다. 그럼에도 불구하고, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩업은 본질적으로 동일한 클럭 사이클 동안 실행 레인 어레이(605) 내의 모든 실행 레인으로 동일한 데이터 값을 브로드캐스팅하는 것을 포함한다.
3.0 라인 버퍼 유닛 실시예들
a. 라인 버퍼 유닛 개요
다양한 실시예들에서, 하드웨어 플랫폼을 위해 쓰여진 프로그램 코드는 입력 및 출력 어레이 위치들을 예를 들어, X, Y좌표들로서 식별하는 명령 포맷의 명령들을 로드하고 저장하는 명령 세트를 포함하는 고유의 가상 코드로 작성된다는 것을 섹션 1.0에서 상기 논의로부터 알 수 있다. 다양한 구현예에서, X, Y 좌표 정보는 하드웨어 플랫폼에 실제로 프로그래밍될 수 있고, 그것의 컴포넌트들 중 다양한 컴포넌트에 의해 인식/이해 될 수 있다. 이는 예를 들어, X, Y 좌표(예를 들어, 컴파일러 내의)를 다른 정보로 번역하는 것과 별개이다. 예를 들어, 스텐실 프로세서 내의 2차원 시프트 레지스터 구조의 경우, X, Y 좌표 정보는 레지스터 시프트 이동으로 번역된다. 대조적으로, 하드웨어 플랫폼의 다른 부분들은 더 높은 가상 코드 레벨에서 원래 표현 된 X, Y 좌표 정보를 구체적으로 수신하고 인식할 수 있다.
도 7에서 도시된 바와 같이, 섹션 1.0에서 기술된 바와 같이, 프로그램 코드 개발자는 가상 코드 레벨(710)에서 특수한 명령 포맷을 갖는 X, Y 좌표로서 데이터 위치를 표현한다. 컴파일 단계 동안, 가상 코드는 하드웨어(오브젝트 코드)에 의해 실제로 프로세싱되는 프로그램 코드와 하드웨어의 구성(예를 들어, 레지스터) 공간에 로드되는 대응하는 구성 정보로 번역된다. 도 7에서 도시된 바와 같이, 일 실시예에서, 특정 커널에 대한 오브젝트 코드는 스텐실 프로세서의 스칼라 프로세서(705)의 프로그램 공간에 로딩된다.
구성 프로세스의 일부로서, 스칼라 프로세서(705)상에서 실행되는 구성 소프트웨어는 적절한 구성 정보(711, 712)를 스텐실 프로세서(702)에 연결된 시트 생성기 유닛(703) 및 라인 버퍼 유닛(701) 둘 다에 로드하며, 상기 라인 버퍼 유닛(701)은 스텐실 프로세서(702)에 대한 새로운 시트들을 생성할 것이고, 스텐실 프로세서(702) 생성된 프로세싱된 시트들 상에서 동작하거나 스텐실 프로세서(702) 생성된 프로세싱된 시트들을 수신한다. 여기서, 일반적으로, 시트들은 여전히 전체 이미지의 X, Y 좌표로 고려될 수 있다. 즉, 일단 이미지 또는 프레임이 정의되면(예를 들어, 행당 픽셀들의 수, 행들의 수, 열당 픽셀들의 수 및 열들의 수와 관련하여), 이미지의 임의의 부분 또는 위치는 계속해서 X, Y 좌표로 참조될 수 있다.
이와 같이, 다양한 실시예에서, 시트 발생기 유닛(703) 및 라인 버퍼 유닛(701) 중 어느 하나 또는 둘 다는 이미지 또는 프레임의 특정 위치들 및/또는 영역들(예를 들어, 라인 그룹들, 시트들)이 X, Y 좌표로 식별되는 정보 플랫폼을 설정하는 각각의 구성 공간(706, 707) 내에 정보(711, 712)로 구성된다. 다양한 구현예/용도에서, X, Y 좌표는 가상 코드 레벨에서 표현된 것과 동일한 X, Y 좌표일 수 있다.
이러한 정보의 예로는, 예를 들어, 라인 버퍼 유닛 내의 활성 라인 그룹의 수, 각 라인 그룹에 대한 이미지 크기(예를 들어, 4개의 X, Y 좌표들(각 코너에 하나)의 세트 또는 X, Y 좌표(하나는 더 낮은 코너에, 하나는 더 먼 코너에 대한 것임)의 쌍), 절대 이미지 너비와 이미지 높이, 스텐실 크기(단일 스텐실의 크기 및/또는 스텐실 프로세서의 오버래핑 스텐실들의 영역을 정의하는 X, Y 값으로 표현됨), 시트 및/또는 라인 그룹 크기(예를 들어, 이미지 크기와 동일한 용어로 특정되었지만 더 작은 치수를 갖는) 등을 포함할 수 있다. 추가적으로, 라인 버퍼 유닛(701)은 적어도 라인 버퍼 유닛(701)에 의해 관리되는 라인 그룹을 기록하는 프로듀서 커널의 수 및 판독하는 컨슈머 커널의 수와 같은 추가적 구성 정보로 프로그램될 수 있다. 또한 이미지 데이터와 관련된 채널 및/또는 치수의 수는 일반적으로 구성 정보로 포함된다.
도 8은 이미지 내의 라인 그룹을 단지 일례로서 정의하기 위해 X, Y 좌표의 사용을 도시한다. 여기서, N개의 라인 그룹들(801_1, 801_2,. . . 801_N)은 이미지(801) 내에서 관찰가능하다. 도 8에서 볼 수 있는 바와 같이, 각 라인 그룹은 예를 들어 라인 그룹의 코너 포인트들 중 하나 이상을 정의하는 이미지 내의 X, Y 좌표를 참조하여 쉽게 정의 될 수 있다. 이와 같이, 다양한 실시 예에서, 특정 라인 그룹을 정의하는데 사용되는 라인 그룹의 이름 또는 다른 데이터 구조는 특별히 그것을 식별하기 위한 라인 그룹과 관련된 X, Y 좌표 위치를 포함할 수 있다.
다시 도 7을 다시 참조하면, 도 7은 런타임 동안, 시트 생성기(703)가 예를 들어, 원하는 데이터 영역을 정의하는 X, Y 좌표 정보를 포함함으로써 라인 버퍼 유닛(701)으로부터 "다음" 라인 그룹(또는 라인 그룹의 일부)을 요청할 수 있다는 것을 도시함을 주목해야 한다. 도 8은 이미지 데이터의 완전한 행들로만 구성된 명목상 "전체 폭" 라인 그룹을 도시한다. 아래에서 더 상세하게 기술되는 "가상 높이"로 지칭되는 대안적 구성에서, 라인 버퍼 유닛(701)은 초기적으로 라인 그룹의 제1 상위 부분만을 이미지 데이터의 전체 너비 열들로서 패스한다. 그 후, 라인 그룹의 후속하는 하위 행들이 전체 너비 행보다 작고 별도로 요청되는 인접한 청크에서 시트 생성기에 의해 구체적으로 요청된다. 이와 같이, 다수의 요청들이 전체 라인 그룹(full line group)을 획득하기 위해 시트 생성기가 이루어진다. 여기서, 상기 각각의 요청은 다음 하위 부분에 기인하는 X, Y 좌표에 의해 다음 하위 부분을 정의 할 수 있다.
도 9a 내지 도 9c는 라인 버퍼 유닛 실시예(900)의 다양한 구성들을 나타낸다. 도 9a에서 도시된 바와 같이, 라인 버퍼 유닛은 라인 그룹들(903_1 내지 903_N)이 저장되는 메모리(902)(예를 들어, 정적 또는 동적 랜덤 액세스 메모리(SRAM 또는 DRAM))를 포함한다. 도 9a는 메모리 (902) 내의 특정 이미지/프레임에 대한 라인 그룹들(903_1 내지 903_N)을 생성하고 소비하는 다양한 커널들 사이의 활동을 도시한다.
도 9a에서 도시된 바와 같이, 프로듀서 커널(K1)은 새로운 라인 그룹들을 별도의 시간 인스턴스들(P1, P2 내지 PN)을 통해 메모리(902)로 보낸다. 프로듀서 커널(K1)은 데이터의 새로운 시트들을 생성하는 스텐실 프로세서에서 실행된다. 스텐실 프로세서에 연결된 시트 생성기는 시트들을 축적하여 라인 그룹을 형성하고 라인 그룹들을 메모리(902)로 포워딩한다.
또한 도 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)에 실제로 기록될 때까지 요청은 아이들링된다. 많은 구현예에서, 프로듀서 커널은 컨슈머 커널과 다른 스텐실 프로세서에서 동작한다.
아마도, 모든 라인 그룹(903_1 내지 903_N)에 대한 커널들(K2 및 K3) 중 하나 또는 둘 모두로부터의 요청들은 시간(P1)전에 도달할 수 있다. 따라서 라인 그룹들은 언제든지 컨슈머 커널들에 의해 요청될 수 있다. 그러나 프로듀서 커널(K1)이 생성할 수 있는 레이트로 라인 그룹을 요청할 때 라인 그룹들은 컨슈머 커널들로 포워딩된다. 다양한 실시예에서, 컨슈머 커널들은 라인 그룹들을 시퀀스로 요청하고, 마찬가지로 그들을 시퀀스로 수신한다(커널(K2)는 시간(C22 내지 C2N)의 시퀀스로 라인 그룹(902_2 내지 902_N)을 수신한다). 단순화를 위해, 특정 라인 그룹에 대해 하나의 프로듀서 커널만 도시된다. 상이한 프로듀서들이 동일한 라인 그룹(예를 들어, 모든 프로듀서가 라인 그룹에 기록한 후에야 컨슈머가 서비스될 수 있는 곳)에 기록하는 것을 허용하도록 다양한 실시예가 디자인될 수 있다.
프로듀서 커널이 없는 경우(컨슈머 커널(들)이 프로세서의 DAG 프로세싱 흐름의 제 1 커널들이기 때문에), 이미지 데이터의 프레임들은(예를 들어, 직접 메모리 액세스(DMA, direct memory access)를 통해 또는 카메라로부터) 메모리(902)로 전송될 수 있고, 라인 그룹들로 파싱될 수 있다. 컨슈머 커널(들)이 없는 경우(프로듀서 커널이 프로세서의 전체 프로그램 흐름에서 마지막 커널이기 때문에), 결과 라인 그룹들은 출력 프레임을 형성하기 위해 결합될 수 있다.
도 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개의 라인 그룹보다 적은 수가 활성인 경우, 대응하는 보다 적은 수의 라인 버퍼 유닛 인터페이스들가 활성화되고 언제든지 사용 가능함).
도 9b에 도시된 바와 같이, 라인 버퍼 유닛 회로(901) 내의 N 개의 라인 버퍼 인터페이스 유닛들(904)의 총 수와 함께, 라인 버퍼 유닛(900)은 라인 그룹들 최대 수를 핸들링하고 있다. 추가적으로, (라인 그룹 크기가 구성가능한 파라미터인) 최대 허용 라인 그룹 크기로 메모리(902)에 대한 대략적인 크기가 결정될 수 있다(물론, 하드웨어 효율을 위해, 더 작은 메모리 풋프린트(footprint)가 N개의 최대 크기의 라인 그룹들을 동시에 허용하지 않는 비용으로 인스턴스화될 수 있다).
각각의 라인 버퍼 인터페이스 유닛(904_1 내지 904_N)은 그것이 핸들링하도록 할당된 특정 라인 그룹에 대한 프로듀서 및 컨슈머 요청들을 핸들링하는 것을 담당한다. 예를 들어, 라인 버퍼 인터페이스 유닛(904_1)은 라인 그룹(903_1)을 저장하기 위해 시간(P1)에 생산자(K1)로부터의 요청을 핸들링할 뿐만 아니라 라인 그룹(903_1)에 대한 컨슈머 커널(K2 및 K3)으로부터의 요청을 핸들링한다. 전자에 대한 응답으로, 라인 버퍼 인터페이스 유닛(904_1)은 라인 그룹(903_1)을 메모리(902)에 기록한다. 후자에 대한 응답으로, 라인 버퍼 인터페이스 유닛(904_1)은 메모리(902)로부터 라인 그룹(903_1)의 각각의 판독을 수행하고 라인 그룹(903_1)을 시간(C21 및 C31)에 컨슈머들(K2 및 K3)에게 포워딩한다.
라인 그룹의 모든 컨슈머들이 그들의 라인 그룹의 사본을 포워딩한 후에, 라인 버퍼 인터페이스 유닛은 다른 라인 그룹에 할당되도록 “자유”가 된다. 예를 들어, 라인 그룹(903_1)이 프레임들의 시퀀스의 제1 이미지 프레임 내의 제1 라인 그룹을 나타내는 경우, 라인 그룹(903_1)이 시간(C21 및 C31)에 소비자(K2 및 K3)으로 포워딩된 후, 라인 버퍼 인터페이스 유닛(904_1)은 프레임들의 시퀀스의 다음의 제2 이미지 프레임 내에 제1 라인 그룹을 핸들링하기 위해 할당되는 다음일 수 있다. 이러한 방식으로, 라인 버퍼 유닛 회로(901)는 라인 버퍼 인터페이스 유닛(904)의 "풀(pool)"을 갖는 것으로 보여질 수 있으며, 각각의 인터페이스 유닛에 그 직전 라인 그룹이 최종 소비자에게 전달된 후에 관리할 새로운 라인 그룹이 할당된다. 따라서 인터페이스 유닛들이 마지막 컨슈머에게 서비스를 제공하고, 다음 라인 그룹을 기다리는 라인 버퍼 인터페이스 유닛들의 “프리 풀”에 반복적으로 들어가고 제거되어, 인터페이스 유닛들의 회전이 있다.
도 9c는 회전의 실시예를 보다 상세히 도시한다. 도 9c에서 도시된 바와 같이, 이용가능한 라인 버퍼 인터페이스 유닛들은 라인 버퍼 유닛 회로(910) 내의 라인 버퍼 인터페이스 유닛들의 프리 풀로부터 선택된다. 그 후, 라인 버퍼 인터페이스 유닛은 적절한 구성 정보(911)(예를 들어, 새로운 라인 그룹의 X, Y 위치 정보 또는 이에 해당하는 선형 메모리 주소)로 구성된다. 여기서, 도 9b에서 각 라인 버퍼 인터페이스 유닛은 그러한 구성 정보가 유지되는 구성 레지스터 공간(905)을 포함할 수 있음을 주목해야 한다.
그 후, 라인 버퍼 인터페이스 유닛은 자신의 새롭게 할당된 라인 그룹(912)에 대한 프로듀서 및 컨슈머 요청들을 핸들링하기 위해 진행한다. 최종 프로듀서가 라인 그룹에 기록한 후에(다양한 실시 예에서, 라인 그룹당 오직 하나의 생산자만이 존재한다), 그리고 최종 컨슈머에게 프로듀서(들)에 의해 작성된 라인 그룹의 버전이 제공된 후에, 라인 버퍼 인터페이스 유닛은 프리 풀로 되돌려지고, 프로세스는 다음 라인 그룹을 위해 (910)을 반복한다. 도 9c의 제어 흐름을 감독하는 라인 버퍼 유닛 회로(901) 내에 제어 논리 회로는 설명의 편의를 위해 도 9b에 도시되지 않았다.
b. 프로그램 가능한 레지스터 공간 실시예들
다음 라인 그룹의 할당의 일부로서 라인 버퍼 인터페이스 유닛에 제공되는 업데이트된 구성 정보(911)와 관련하여, 명목상의 경우, 라인 버퍼 유닛(900) 그 자체는 예를 들어 하나 이상의 컨슈머들의 고정된 세트를 공급하는 단 하나의 고정된 프로듀서의 정적인 배치를 핸들링한다. 또한 이 경우, 주 구성 정보(예를 들어, 라인 그룹 크기, 컨슈머들의 수 등)는 정적인 경향이 있고 라인 그룹에서 라인 그룹으로 변경되지 않을 것이다. 오히려, 라인 버퍼 인터페이스 유닛에 제공되는 새로운 구성 정보는 주로 새로운 라인 그룹을 식별한다(예를 들어, 메모리 내의 라인 그룹의 위치 등). 그러나, 보다 복잡한 잠재적 배치/디자인이 가능하다. 이들 중 일부는 아래에서 보다 자세히 설명된다.
도 9d는 라인 버퍼 인터페이스 유닛의 레지스터 공간(예를 들어, 도 9b의 레지스터 공간(905_1)의 내용)의 내용의 실시예를 도시한다. 일부 레지스터 필드들에 대한 설명이 바로 후속된다.
LB_Enable 필드(921)는 본질적으로 라인 버퍼 인터페이스 유닛을 인 에이블시키고 라인 버퍼 인터페이스 유닛을 프리 풀로부터 가져오는 프로세스의 일부로서 "설정"된다. Num_Channels 필드(922)는 라인 그룹의 이미지 데이터 내의 채널들의 수를 정의한다. 일 실시예에서, Num_Channels 필드(922)는 라인 그룹당 데이터의 총량을 결정하는데 사용될 수 있다. 예를 들어, 비디오 스트림은 종종 적색(R) 픽셀들의 프레임 시퀀스, 청색(B) 픽셀들의 프레임 시퀀스 및 녹색(G) 픽셀들의 프레임 시퀀스를 포함한다. 따라서 임의의 라인 그룹에 대해, 실제로 세 개의 라인 그룹들(R, G 및 B)의 정보가 있다.
Num_Consumers 필드(923)는 라인 그룹을 요청할 컨슈머들의 수를 기술한다. 일 실시예에서, 라인 그룹 인스턴스가 Num_Consumers 필드(923)의 값과 동일한 회수만큼 전달된 후에 라인 버퍼 인터페이스 유닛은 프리 풀에 입력될 것이다.
Row_Width 필드(924)는 전체 라인 그룹의 폭(예를 들어, 픽셀들의 수로)을 정의한다. Row_Width(924) 값은 컴파일러에 의해 제공된 X 좌표 값으로 표현될 수 있음을 주목해야 한다. FB_Rows 필드(926)는 전체 라인 그룹의 높이(예를 들어, 픽셀들의 수로)를 정의한다. FB_Rows 필드(924)는 컴파일러에 의해 제공된 Y 좌표 값으로 표현될 수 있음을 주목해야 한다.
FB_Base_Address 필드(930)는 라인 버퍼 유닛 메모리에서 라인 그룹의 위치를 정의한다. "전체(full)" 회선 그룹 모드로 지칭되는 제1 동작 모드에서, 전체 크기의 회선 그룹이 메모리에서 액세스된다(회선 그룹들은 프로듀서들로부터 수신되고 각각의 데이터의 전체 양을 포함하여 컨슈머에게 전달된다). 전체 라인 그룹 모드에서, Num_Channels 필드(922), Row_Width 필드(924) 및 FB_Rows 필드(926)는 FB_Address 필드(930)와 함께 사용되어 전체 라인 그룹에 완전히 액세스하기 위해 메모리에 적용될 주소들의 범위를 결정할 수 있다. 추가적으로, 이러한 동일한 파라미터들은 X, Y 좌표의 라인 그룹을 요청했던 시트 생성기로부터의 요청을 선형 메모리 주소로 "번역"할 수 있다.
VB_Enable, VB_Rows, VB_Cols, Num_Reuse_Rows 및 VB_Base_Address 필드(925, 927, 928, 931)는 "가상적 높이(virtually tall)"라인 그룹 모드 라 불리는 또 다른 동작 모드에서 사용되며, 이는 이후에 상세하게 설명된다.
도 9d는 단일 라인 버퍼 인터페이스 유닛에 대한 구성 레지스터 공간(905)을 디스플레이 하였지만, 반면 도 9e는 전체적으로 라인 버퍼 유닛 회로(901)에 대한 글로벌 구성 레지스터 공간(907)의 내용의 실시예를 도시한다. 도 9d의 라인 별 버퍼 인터페이스 유닛 레지스터 공간이 특정 라인 그룹에 포커싱되는 반면에, 도 9e의 글로벌 레지스터 공간(907)은 동일한 이미지로부터의 상이한 라인 그룹들의 파싱 뿐만 아니라 이미지의 프로세싱과 관련된 프로듀서/컨슈머 조합에 고유한 기타 정보를 이해하는 것에 포커싱된다.
도 9e에서 도시된 바와 같이, 글로벌 레지스터 공간의 실시예는 채널들(932)의 수 및 특정 이미지에 대한 컨슈머들(933)의 수를 포함한다. 단순화를 위해, 도 9e의 레지스터 공간은 하나의 세트의 프로듀서 및 컨슈머(예를 들어, 단지 하나의 비디오 스트림 및 DAG 내의 단일 포인트)를 갖는 하나의 이미지만을 고려한다. 도 9e의 레지스터 공간의 다수의 인스턴스들은 라인 버퍼 유닛 회로가 효과적으로 다중 작업을 수행할 수 있도록 할당될 수 있다.
멀티 태스킹의 제1 형태는 이미지 프로세서 상에서 구현되는 DAG 또는 소프트웨어 파이프라인 내에 있다. 여기서, 동일한 라인 버퍼 유닛은 DAG 내의 두 개의 다른 노드들에 대한 또는 파이프라인의 두 개의 다른 단계들에 대한 라인 그룹핑을 핸들링하도록 구성될 수 있다(즉, 단일 라인 버퍼 유닛이 하나 이상의 스텐실 프로세서를 지원할 수 있음). 상이한 노드들/단계들은 쉽게 상이한 수의 소비자들을 가질 수 있지만 대부분의 경우 동일한 이미지 및 스텐실 크기 특성들을 가질 가능성이 크다. 멀티 태스킹의 제2 형태는 동일한 이미지 프로세서 하드웨어에서 구현된 다수의 상이한 DAG들 및/또는 다수의 상이한 파이프라인들에 걸쳐 있다. 예를 들어, 4 개의 스텐실 프로세서들을 갖는 이미지 프로세서는 완전히 상이한 스텐실 치수들을 갖는 완전히 상이한 이미지 크기들을 각각 프로세싱하는 완전히 상이한 2단계 파이프라인들을 동시에 실행할 수 있다.
도 9e의 특정 실시예로 돌아가서, DAG 내의 또는 파이프라인 단계들 사이의 임의의 특정 노드는 이미지 내의 채널들의 수, 이미지 크기, 적용 가능한 스텐실의 치수들 및 라인 그룹들의 컨슈머들의 수에 의해 고레벨에서 구성된다(도 9e는 라인 그룹당 하나의 프로듀서를 다시 가정하지만, 하나 이상의 프로듀서는 도9e의 글로벌 레지스터 공간이 프로듀서들의 수에 대한 필드도 포함할 수 있는 단일 라인 그룹에 기록할 수 있음). Num_Channels 및 Num_Consumers 필드들(932, 933)은 본질적으로도 9c의 대응하는 필드들(922, 923)과 동일하다.
Image_Size 및 Stencil_Dimension 필드들(934, 935)은 본질적으로 프로세싱될 이미지의 치수들 및 이미지로부터 각각 새겨져야할 라인 그룹들 상에서 동작할 스텐실의 치수를 기술한다. 필드들(934, 935) 둘 다는 X, Y 좌표 값들로 표현될 수 있으며, 컴파일러로부터 제공될 수 있다. 추가적으로, 일 실시예에서, 라인 버퍼 회로 유닛(도 9b에 도시되지 않음) 내의 제어 논리 회로는 라인 버퍼 인터페이스 유닛이 글로벌 정보가 관련된 프로듀서/컨슈머 세트로부터의 라인 그룹을 핸들링하도록 할당된 때, Image_Size 및 Stencil_Dimension 필드들(934, 935)을 사용하여 라인 버퍼 인터페이스 유닛의 레지스터 공간에 로드되는 Row_Width(924), FB_Rows(926) 및 FB_Base_Address 값들(930)을 결정한다. 대안적 또는 추가적 실시예에서, 이미지 크기는 2개의 별개 값, image_width 및 image_height로 표현되며, 이들은 그들 자신의 별도의 어드레스 가능한(addressable) 레지스터 공간을 가질 수 있다. 마찬가지로, 스텐실 크기는 2개의 별개 값, stencil_width 및 stencil_height로 표현될 수 있으며, 이들은 그들 자신의 별도의 어드레스 가능한 레지스터 공간을 가질 수 있다.
Row_Width(924)는 Image_Size(934) 정보로부터 직접적으로 얻어질 수 있다. 예를 들어, Image_Size가 이미지 원점으로부터 가장 먼 픽셀 (원점이 왼쪽 하단 코너에 있는 경우 오른쪽 위 코너)에서 X, Y 좌표 쌍으로 표현되면, Row_Width를 X 좌표 값으로 결정될 수 있다.
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)도 결정될 수 있다.
따라서, 일 실시예에서, 글로벌 레지스터 공간이 도 9e의 레지스터 필드들에 의해 특징 지워지는 특정 프로듀서/컨슈머 조합에 대한 라인 그룹을 핸들링하도록 라인 버퍼 유닛이 할당된 경우, 상기 기술된 결정들은 플라이(fly) 상에서 계산되고, FB_Width (924), FB_Rows (926), Base_Address (934) 각각은 직접적으로 복사하는 Num_Channels(922) 및 Num_Consumers(923)와 함께 라인 버퍼 인터페이스 유닛의 특정 레지스터 공간에 로딩된다. 따라서, 논리 회로 및 데이터 경로는 글로벌 레지스터 공간과 라인 버퍼 인터페이스 유닛 레지스터 공간의 각 인스턴스 사이에 존재하여 이러한 결정들 및 데이터 전송들을 수행할 수 있다.
다른 실시예에서, 컴파일러는 이들 계산들 각각을 수행하며, 그에 의해 글로벌 레지스터 공간의 전부는 아니더라도 대부분을 제거한다. 여기서, 예를 들어, 컴파일러는 각 라인 그룹에 대한 Base_Address 값을 결정하고, 상기 값들을 라인 버퍼 회로 유닛 내의 룩업 테이블에 로드할 수 있다. 상기 값들은 룩업 테이블에서 호출되고, 그들의 대응하는 라인 그룹들이 구성될 때 라인 버퍼 인터페이스 유닛의 레지스터 공간에 로드된다. 이들 두 극단들 사이의 상이한 조합들(하드웨어 온-더-플라이 vs. 결정된 정적 컴파일러)도 구현될 수 있다.
상기 실시예가 레지스터 회로("레지스터 공간")에서 구성 정보를 유지하는 것을 강조하지만, 다른 또는 결합된 실시예에서, 구성 정보는 메모리 (버퍼 유닛 메모리와 같은) 또는 다른 메모리 또는 정보 유지 회로에 유지될 수 있다.
c. 라인 버퍼 유닛 실시예들 및 전체 라인 그룹 모드 vs. 가상적 높이 모드
상기 논의들은 대체로 라인 그룹들이 완전한 전체의 라인 그룹으로서 시트 생성기와 라인 버퍼 유닛 사이에서 참조되고 패스되는 "전체 라인 그룹"모드에 관한 것이다. "가상적 높이"라고 지칭되는 또 다른 모드에서, 라인 그룹들은 분리된 개별 세그먼트들로 완성된 전체 폭의 상부 및 하부로서 시트 생성기들 사이에서 참조되고 패스된다.
도 10a 및 도 10b는 가상적 높이 모드 시퀀스의 예시를 도시한다. 도 10a에서 도시된 바와 같이, 라인 그룹은 전체 폭 열의 상위 부분(1003) 및 너비의 제1, 보다 짧은 세그먼트만을 갖는 제1 하위 부분(1004_1)로서 초기에 형성된다. 라인 그룹의 초기 형성은 생산하는 시트 생성기에 의해 라인 버퍼 유닛에 제공되거나 라인 버퍼 유닛에 의해 소비하는 시트 생성기에 제공될 수 있다.
프로듀서의 경우, 라인 그룹은 스텐실들(1002)이 하위 부분(1004_1)에 걸쳐 프로세싱된 후에 형성된다(대략적인 스텐실 위치가 도 10b에 도시된다). 프로듀서 스텐실 프로세서가 하위 부분(1004_1)에 대해 프로세싱한 후에, 스텐실들은 우측으로 수평 방향으로 계속 진행한다. 결국 그들은 다음 하위 부분(1004_2)에 걸쳐 프로세싱할 것이다. 다음 하위 부분(1004_2)의 완료시, 다음 하위 부분(1004_2)은 시트 생성기로부터 올바른 위치, 예를 들어 첫 번째 하위 부분(1004_1)의 "다음"에 그것을 메모리에 저장하는 라인 버퍼 유닛으로 보내진다. 프로세스는 라인 그룹이 라인 버퍼 유닛 메모리에 완전히 기록될 때까지 계속된다.
컨슈머의 경우에, 도 10a에 도시 된 바와 같이, 라인 그룹은 초기에 시트 생성기로 전달된다. 스텐실 프로세서는 라인 그룹의 제1 부분(1004_1)을 통해 동작한다. 제1 부분(1004_1)의 프로세싱이 완료되면, 시트 생성기는 메모리로부터 페치되어 라인 버퍼 유닛에 의해 전달되는 다음 하위 부분(1004_2)을 요청할 것이다. 프로세스는 라인 그룹이 완전히 프로세싱될 때까지 계속된다.
프로듀서 및 컨슈머 양자 모두에 있어서, 하부 부분들은 시트 생성기에 의해 구체적으로 식별됨을 주목해야 한다. 즉, 프로듀서 케이스 및 컨슈머 케이스 모두에서 하위 부분(1004_2)은 시트 생성기에 의해 구체적으로 식별되고, 라인 버퍼 유닛은 특히 하위 부분(1004_2)를 저장/페치하기 위해 메모리에 액세스한다. 일 실시예에서, 시트 생성기는 컴파일러에 의해 제공된 정보에 기초하여 고려된 X, Y 좌표값들을 통해 하위 부분(1004_2)을 식별한다(예를 들어, 하위 부분(1004_2)의 임의의 코너, 하위 부분(1004_2)의 모든 네 코너들, 단지 X 좌표 등).
도 11a는 라인 버퍼 인터페이스 유닛(1104) 내의 회로의 제1(더 단순한) 실시예를 도시한다. 도 11a에서 도시된 바와 같이, 라인 버퍼 인터페이스 유닛은 어드레스 번역 회로(1106)를 포함하여, 하나 이상의 X, Y 좌표 값들에 의해 식별되는 라인 그룹의 아이덴티티 또는 그것의 부분(도 10b의 하부 (1004_2)와 같은)을 라인 버퍼 유닛 메모리가 엑세스하기 위한 선형 주소로 변환한다. 즉, 라인 그룹들은 라인 버퍼 유닛 메모리에 "맵핑"된 것으로 간주될 수 있다. 번역 회로(1106)는 본질적으로 이 맵핑을 X, Y 용어로 인식하고, 이를 특정 선형 메모리 주소들로 변환할 수 있다.
맵핑을 인식하는 능력은 구성 레지스터 공간(1105) 내의 정보에 기초하고, 그 실시예는 도 9d에서 제공된다. 여기서, Row_Width(924), FB_Rows(926) 및 FB_Base_Address(931)에 대한 지식으로, 번역 유닛은 메모리 내의 전체 라인 그룹의 크기 및 위치를 "인식(comprehend)"할 수 있다. 이와 같이, 예를 들어, 가상 높이 모드에서, 임의의 X 좌표 값(예를 들어, 하위 부분이 라인 그룹에 대해 참조되는 경우) 또는 X, Y 좌표 위치 (예를 들어, 하위 부분은 이미지 프레임에 대해 참조되는 경우)에 기초하는 하위 부분에 대한 요청은 시트 생성기에 의해 어떤 부분이 참조되는지를 식별하기에 충분하다. 추가적으로, Vb_Rows(927) 및 Vb_Cols(928)는 본질적으로 하위 부분들의 치수를 정의한다. 상위 및 하위 부분들의 치수를 알고 있으면, 버퍼 메모리로/로부터 액세스되는 데이터의 양도 용이하게 결정될 수 있다. 이러한 동일한 개념들은 전체 너비 그룹들에 적용할 수도 있다. 예를 들어, 임의의 전체 너비 라인 그룹은 이미지 내의 그것의 X, Y 위치에 의해 식별될 수 있다. 추가적으로, 일부 실시예에서, 전체 너비 라인 그룹은 X 및/또는 Y 좌표 값들에 의해 전체 너비 라인 그룹의 더 작은 청크를 참조하는 일련의 원자 요청들/응답들을 통해 네트워크를 통해 패스될 수 있다.
번역 회로(1106)는 또한 Base_Address_Field(931)가 채워지지 않고 시트 생성기가 이미지 프레임 내의 X, Y 좌표들로서 라인 그룹들을 참조하는 추상적 어드레싱 모드로 사용될 수 있다. 이 경우에, 번역 회로(1006)는 도 9e의 글로벌 레지스터 공간(예를 들어, Image_Size, Stencil_Size)에 정보의 일부가 결합되거나 통보되면, 번역 회로(1106)는 라인 그룹에 대한 모든 관련 정보를 계산할 수 있고(프레임 내의 치수들과 위치), 이를 라인 버퍼 유닛 메모리에 액세스하기 위해 사용되는 선형 주소로 변환한다. 다른 실시예에서, 번역 회로(1106)는 (글로벌 타입 정보 및 라인 그룹을 기술하는 하나 이상의 X, Y 좌표에 기초하여) Base_Address_Field 값(931)을 완전하게 결정하고 그것을 자신의 레지스터 공간(1105)에 로드한다.
또한, 도 11a의 라인 버퍼 인터페이스 유닛 실시예는 X, Y 좌표값들이 라인 그룹을 지칭하는데 사용되지 않는 선형 어드레싱 모드를 지원한다(오히려 종래의 선형 어드레스가 사용됨). 선형 어드레싱 모드에 대해, 바이패스 경로들(1140)은 어드레스 번역 회로(1106)를 우회한다. 일 실시예에서, 어떤 어드레스 모드가 라인 버퍼 인터페이스 유닛 입력에서 사용되는지에 관계없이, 라인 버퍼 인터페이스 유닛은 라인 버퍼 유닛 메모리를 어드레싱하기 위한 표준 선형 메모리 주소들을 제공한다. 간단히 도 9b를 다시 참조하면, 선형 주소들은 아비터(arbiter)에 제공된다. 메모리 인터페이스(908)는 충돌 메모리 액세스 요청들을 해결하고 라인 버퍼 유닛 메모리(902)에 액세스한다.
상기 논의된 바와 같이, 시트 생성기는 하나 이상의 X, Y 좌표 값들을 갖는 라인 그룹을 참조할 수 있다. 다른 실시예에서, 시트 생성기는 전체 라인 그룹 모드에서 다음 라인 그룹 또는 가상적 높이 모드에서 다음 하위 부분을 식별하는 것이 아니라, 시트 생성기들은 단순히 “다음”과 유사한 요청을 발행한다(예를 들어, 요청은 동일한 전체/가상 높이 라인 그룹이 어떠한 좌표들 없이 참조되는 "다음” 전체 라인 그룹 또는 “다음" 하위 부분 또는 “다음” 이미지 데이터를 표시한다).
이러한 통신 수단을 지원하기 위해, 라인 버퍼 유닛 및/또는 라인 버퍼 유닛 인터페이스는 다음 라인 그룹/부분이 무엇인지를 인식하기 위한 상태 레지스터 공간을 포함한다. 도 11b는 포인터 상태 정보를 유지하는 라인 버퍼 인터페이스 유닛의 향상된 실시예를 도시하며, 시트 생성기들이 그것의 위치를 X, Y 좌표로 특정하기 보다는 가상적 높이 모드에서 라인 그룹의 "다음" 하위 부분을 단순히 참조할 수 있게 한다. 여기서, 기록 포인터(1141)는 포인터 제어 논리 회로(1143)에 의해 유지되며, 생산하는 시트 생성기에 의해 제공된 하위 부분들의 트랙을 유지한다. 본질적으로 기록 포인터(1141)는 프로듀서가 전달하도록 예정된 "다음" 부분의 위치를 저장한다. 추가로, 포인터 상태 정보는 시트 생성기가 임의의 X, Y 좌표도 특정하지 않고, (전체 너비 모드에서) "다음" 전체 너비 그룹만 참조하게 한다 (라인 버퍼 인터페이스 유닛이 이미지에 대한 다음 전체 너비 라인 그룹이 어디에 있는지를 결정할 수 있기 때문에).
일 실시예에서, 포인터는 하나 이상의 X, Y 좌표로서 표현되고, 번역 회로는 포인터를 선형 주소로 변환한다. 다음 부분이 수신되면, 포인터(1141)는 포인터 제어 논리 회로(1143)에 의해 업데이트되어 방금 수신된 부분을 따르는 부분을 가리킨다. 판독 포인터들(1142)은 유사하게 동작하지만, 별개의 판독 포인터가 각각의 컨슈머에 대해 유지된다(다시 한번, 편의상 단지 하나의 프로듀서만이 가정된다).
전체 라인 그룹 모드의 경우에, "다음" 전체 너비 라인 그룹의 위치는 글로벌 레지스터 정보 및 글로벌 레벨로 유지되는 포인터들의 유사한 배치로부터 결정될 수 있다
d. 구현예 실시예들
상기 기술된 다양한 이미지 프로세서 아키텍처 구성들은 종래의 의미에서의 이미지 프로세싱에 반드시 제한되는 것이 아니며, 따라서 이미지 프로세서가 재구성되게 하는(또는 되지 않게 하는) 다른 애플리케이션들에 적용될 수도 있다는 것을 지적하는 것이 적절하다. 예를 들어, 상기 기술된 다양한 이미지 프로세서 아키텍처 구성들 중 임의의 것이 실제 카메라 이미지들의 프로세싱과는 대조적으로 애니메이션의 생성 및/또는 생성 및/또는 렌더링에 사용되는 경우, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 구성될 수 있다. 추가적으로, 상기 기술된 이미지 프로세서 아키텍처 구성들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 애플리케이션에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 보다 범용적인 프로세서(예를 들어, 컴퓨팅 시스템의 CPU의 일부분)와 (예를 들어, 코 - 프로세서로서) 통합될 수 있거나, 단독 컴퓨터 시스템 내의 프로세서일 수 있다.
상기 논의된 하드웨어 디자인 실시예는 반도체 칩 내에 및/또는 반도체 제조 프로세스를 향한 최종 타겟팅을 위한 회로 디자인의 설명으로서 수록될 수 있다. 후자의 경우, 이러한 회로 기술은 상위적/행동적 레벨 회로 기술(예를 들어, VHDL 설명) 또는 하위 레벨 회로 기술(예를 들어, 레지스터 전송 레벨(RTL) 기술, 트랜지스터 레벨 기술 또는 마스크 기술)의 형태 또는 이들의 다양한 조합을 취할 수 있다. 회로 기술들은 일반적으로 컴퓨터 판독가능 저장 매체(CD-ROM 또는 다른 유형의 저장 기술과 같은)에 수록된다.
이전 섹션들로부터, 상기 기술된 이미지 프로세서는 컴퓨터 시스템 상의 하드웨어에 (예를 들어, 핸드헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드헬드 디바이스의 시스템 온 칩 (SOC)의 일부로서) 구현될 수 있다. 이미지 프로세서가 하드웨어 회로에 구현되는 경우, 이미지 프로세서에 의해 프로세싱되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 유의해야한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송한다). 이전 섹션에서 기술된 많은 구성들은 (애니메이션을 렌더링하는) 그래픽 처리 유닛에도 적용될 수 있다.
도 12는 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 컴포넌트들은 통합된 카메라 및 관련 이미지 프로세서(예를 들어, 스마트폰 또는 태블릿 컴퓨터와 같은 핸드헬드 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 통상의 기술자는 이 두 가지를 쉽게 구분할 수 있다.
도 12에서 도시된 바와 같이, 기본 컴퓨팅 시스템은 중앙 처리 유닛(1201)(예를 들어, 복수의 범용 프로세싱 코어(1215_1 내지 1215_N) 및 멀티-코어 프로세서 또는 애플리케이션 프로세서에 배치된 메인 메모리 제어기(1217)를 포함할 수 있다), 시스템 메모리(1202), 디스플레이(1203)(예를 들어, 터치 스크린, 플랫 패널), 로컬 유선 포인트-투-포인트 링크(예를 들어, USB) 인터페이스(1204), 다양한 네트워크 I/O 기능들(1205)(예를 들어, 이더넷 인터페이스 및/또는 셀룰러 모뎀 서브 시스템), 무선 로컬 지역 네트워크(예를 들어, WiFi) 인터페이스(1206), 무선 포인트-투-포인트 링크(예를 들어, 블루투스) 인터페이스(1207) 및 글로벌 포지셔닝 시스템 인터페이스(1208), 다양한 센서들(1209_1 내지 1209_N), 하나 이상의 카메라들(1210), 배터리(1211), 전력 관리 제어 유닛(1212), 스피커 및 마이크로폰(1213) 및 오디오 코더/디코더(1214)를 포함할 수 있다.
애플리케이션 프로세서 또는 멀티 코어 프로세서(1250)는 그 CPU(1201) 내에 하나 이상의 범용 프로세싱 코어(1215), 하나 이상의 그래픽 처리 유닛(1216), 메모리 관리 기능(1217)(예를 들어, 메모리 제어기), I/O 제어 기능(1218) 및 이미지 프로세싱 유닛(1219)을 포함할 수 있다. 범용 프로세싱 코어들(1215)은 전형적으로 컴퓨팅 시스템의 운영 체제 및 애플리케이션 소프트웨어를 실행한다. 그래픽 처리 유닛들(1216)은 전형적으로 예를 들어, 디스플레이(1203) 상에 제시되는 그래픽 정보를 생성하기 위해 그래픽 집중적 기능들 실행한다. 메모리 제어 기능(1217)은 시스템 메모리(1202)와 인터페이스하여 시스템 메모리(1202)에 데이터를 기록/판독한다. 관리 제어 유닛(1212)은 일반적으로 시스템(1200)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(1219)은 이전 섹션에서 상기 기술된 임의의 이미지 프로세싱 유닛 실시예에 따라 구현될 수 있다. 대안적으로 또는 조합하여, IPU(1219)는 GPU(1216) 및 CPU(1201) 중 하나 또는 둘 모두에 그 공동-프로세서로서 연결될 수 있다. 또한, 다양한 실시예에서, GPU(1216)는 상기 기술된 임의의 이미지 프로세서 구성들로 구현될 수 있다.
터치스크린 디스플레이(1203), 통신 인터페이스들(1204 내지 1207), GPS 인터페이스(1208), 센서들(1209), 카메라(1210) 및 스피커/마이크로폰 코덱(1213, 1214) 각각은 적절한 곳에 통합된 주변기기(예를 들어, 하나 이상의 카메라 (1210))를 포함하는 전체 컴퓨팅 시스템과 관련되는 다양한 형태의 I/O(입력 및/또는 출력)로서 보여질 수 있다. 구현예에 따라, 이들 I/O 컴포넌트들 중 다양한 것들은 애플리케이션 프로세서/멀티코어 프로세서(1250) 상에 통합될 수 있거나 또는 다이 외부 또는 애플리케이션 프로세서/멀티코어 프로세서(1250)의 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(1210)는 그 시야에서 카메라와 물체 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행되는 애플리케이션 소프트웨어, 운영체제 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 상기 기술된 임의의 기능들을 수행할 수 있다.
본 발명의 실시예는 상기 기술된 바와 같은 다양한 프로세스들을 포함할 수 있다. 프로세스들은 기계 실행가능 명령들로 구현될 수 있다. 명령들은 범용 또는 특수 목적 프로세서가 특정 프로세스들을 수행하게 하는데 사용될 수 있다. 대안적으로, 이러한 프로세스들은 프로세스들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해 또는 프로그래밍된 컴퓨터 컴포넌트들 및 커스텀 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
또한, 본 발명의 엘리먼트들은 기계 실행가능 명령들을 저장하기 위한 기계 판독가능 매체로서 제공될 수 있다. 기계 판독가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 기타 전자적 명령들을 저장하기에 적합한 유형의 매체/기계 판독가능 매체를 포함하나, 그에 제한되지 않는다. 예를 들어, 본 발명은 반송파 또는 다른 전파 매체의 방법으로 원격 컴퓨터(예를 들어, 서버)로부터 요청하는 컴퓨터(예를 들어, 클라이언트)로 통신 링크(예를 들어, 모뎀 또는 네트워크 연결)를 통해 전송될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다.
상기 명세서에서, 본 발명은 특정 예시적 실시예를 참조하여 기술되었다. 그러나, 첨부된 청구범위에 기술된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않으면서 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다.

Claims (27)

  1. 장치로서,
    복수의 라인 버퍼 인터페이스 유닛들로 구성된 라인 버퍼 유닛을 포함하며, 각각의 라인 버퍼 인터페이스 유닛은 각각의 프로듀서에 의한 하나 이상의 요청들을 핸들링하여, 각각의 라인 그룹을 메모리에 저장하고 각각의 컨슈머에 의한 하나 이상의 요청들을 핸들링하여 메모리로부터 각각의 라인 그룹을 페치(fetch)하고 제공하며, 상기 라인 버퍼 유닛은 프로그램 가능한 저장 공간을 가지며, 그것의 정보는 라인 그룹 사이즈를 설정하여 상이한 이미지 사이즈들에 대한 상이한 라인 그룹 사이즈들이 메모리에 저장 가능하게 하는 것을 특징으로 하는 장치.
  2. 청구항 1에 있어서,
    상기 라인 그룹은:
    상기 라인 버퍼 인터페이스 유닛이 그것의 마지막 컨슈머를 서비스한 후에 라인 버퍼 인터페이스 유닛이 프리 풀(free pool)에 들어가게 하고; 그리고
    그 후에, 상기 라인 버퍼 인터페이스 유닛이 다른 라인 그룹에 할당되게 하기 위한 제어 논리 회로를 포함하는 것을 특징으로 하는 장치.
  3. 청구항 1에 있어서,
    상기 라인 버퍼 유닛은 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하기 위한 회로를 포함하는 것을 특징으로 하는 장치.
  4. 청구항 1에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하고 상기 표현을 선형 메모리 주소로 변환하기 위한 회로를 포함하는 것을 특징으로 하는 장치.
  5. 청구항 1에 있어서,
    상기 라인 버퍼 유닛들 중 적어도 하나는 전체 라인 그룹 모드(full line group mode)를 지원하는 것을 특징으로 하는 장치.
  6. 청구항 1에 있어서,
    상기 라인 버퍼 유닛들 중 적어도 하나는 가상적 높이 라인 그룹 모드(virtually tall line group mode)를 지원하는 것을 특징으로 하는 장치
  7. 청구항 1에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 구성 레지스터 공간으로부터 다음 정보:
    a) 이미지 정보에서 채널들의 수;
    b) 라인 그룹의 컨슈머들의 수;
    c) 전체 라인 그룹 유닛 넓이;
    d) 전체 라인 그룹 높이;
    e) 라인 그룹의 더 작은 부분의 치수(dimension)
    중 임의의 것을 수신하도록 연결되는 것을 특징으로 하는 장치.
  8. 청구항 1에 있어서,
    상기 라인 버퍼 유닛은 라인 그룹에 대한 기본 주소를 저장하기 위한 레지스터 공간을 포함하는 것을 특징으로 하는 장치.
  9. 청구항 1에 있어서,
    상기 라인 버퍼 유닛은 소프트웨어 개발 환경으로부터 도출된 X, Y 좌표 정보에 기초하여 라인 그룹에 대한 기본 주소를 결정하기 위한 회로를 포함하는 것을 특징으로 하는 장치.
  10. 청구항 1에 있어서,
    상기 라인 버퍼 유닛은 페치될 다음 이미지 데이터가 상기 메모리에 위치되어 있는 곳을 인식하기 위한 포인터 회로를 포함하는 것을 특징으로 하는 장치.
  11. 전자 회로의 기술을 포함하는 포함하는 기계 판독가능 저장 매체로서, 상기 전자 회로는:
    복수의 라인 버퍼 인터페이스 유닛들로 구성된 라인 버퍼 유닛을 포함하며, 각각의 라인 버퍼 인터페이스 유닛은 각각의 프로듀서에 의한 하나 이상의 요청들을 핸들링하여, 각각의 라인 그룹을 메모리에 저장하고 각각의 컨슈머에 의한 하나 이상의 요청들을 핸들링하여 메모리로부터 각각의 라인 그룹을 페치(fetch)하고 제공하며, 상기 라인 버퍼 유닛은 프로그램 가능한 저장 공간을 가지며, 그것의 정보는 라인 그룹 사이즈를 설정하여 상이한 이미지 사이즈들에 대한 상이한 라인 그룹 사이즈들이 메모리에 저장 가능하게 하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  12. 청구항 11에 있어서,
    상기 라인 그룹은:
    상기 라인 버퍼 인터페이스 유닛이 그것의 마지막 컨슈머를 서비스한 후에 라인 버퍼 인터페이스 유닛이 프리 풀(free pool)에 들어가게 하고; 그리고
    그 후에, 상기 라인 버퍼 인터페이스 유닛이 다른 라인 그룹에 할당되게 하기 위한 제어 논리 회로를 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  13. 청구항 11에 있어서,
    상기 라인 버퍼 유닛은 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하기 위한 회로를 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  14. 청구항 11에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하고 상기 표현을 선형 메모리 주소로 변환하기 위한 회로를 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  15. 청구항 11에 있어서,
    상기 라인 버퍼 유닛들 중 적어도 하나는 전체 라인 그룹 모드를 지원하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  16. 청구항 11에 있어서,
    상기 라인 버퍼 유닛들 중 적어도 하나는 가상적 높이 라인 그룹 모드를 지원하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  17. 청구항 11에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 구성 레지스터 공간으로부터 다음 정보:
    a) 이미지 정보에서 채널들의 수;
    b) 라인 그룹의 컨슈머들의 수;
    c) 전체 라인 그룹 유닛 넓이;
    d) 전체 라인 그룹 높이;
    e) 라인 그룹의 더 작은 부분의 치수(dimension)
    중 임의의 것을 수신하도록 연결되는 것을 특징으로 하는 기계 판독가능 저장 매체.
  18. 청구항 11에 있어서,
    상기 라인 버퍼 유닛은 라인 그룹에 대한 기본 주소를 저장하기 위한 레지스터 공간을 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  19. 청구항 11에 있어서,
    상기 라인 버퍼 유닛은 소프트웨어 개발 환경으로부터 도출된 X, Y 좌표 정보에 기초하여 라인 그룹에 대한 기본 주소를 결정하기 위한 회로를 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  20. 청구항 11에 있어서,
    상기 라인 버퍼 유닛은 페치될 다음 이미지 데이터가 상기 메모리에 위치되어 있는 곳을 인식하기 위한 포인터 회로를 포함하는 것을 특징으로 하는 기계 판독가능 저장 매체.
  21. 컴퓨팅 시스템으로서,
    복수의 프로세싱 코어들;
    이미지 프로세서를 포함하며, 상기 이미지 프로세서는 복수의 라인 버퍼 인터페이스 유닛들로 구성된 라인 버퍼 유닛을 포함하며, 각각의 라인 버퍼 인터페이스 유닛은 각각의 프로듀서에 의한 하나 이상의 요청들을 핸들링하여, 각각의 라인 그룹을 메모리에 저장하고 각각의 컨슈머에 의한 하나 이상의 요청들을 핸들링하여 메모리로부터 각각의 라인 그룹을 페치(fetch)하고 제공하며, 상기 라인 버퍼 유닛은 프로그램 가능한 저장 공간을 가지며, 그것의 정보는 라인 그룹 사이즈를 설정하여 상이한 이미지 사이즈들에 대한 상이한 라인 그룹 사이즈들이 메모리에 저장 가능하게 하는 것을 특징으로 하는 컴퓨팅 시스템.
  22. 청구항 21에 있어서,
    상기 라인 그룹은:
    상기 라인 버퍼 인터페이스 유닛이 그것의 마지막 컨슈머를 서비스한 후에 라인 버퍼 인터페이스 유닛이 프리 풀(free pool)에 들어가게 하고; 그리고
    그 후에, 상기 라인 버퍼 인터페이스 유닛이 다른 라인 그룹에 할당되게 하기 위한 제어 논리 회로를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  23. 청구항 21에 있어서,
    상기 라인 버퍼 유닛은 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하기 위한 회로를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  24. 청구항 21에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 이미지 프레임 내에 적어도 하나의 X, Y 위치의 표현을 인식하고 상기 표현을 선형 메모리 주소로 변환하기 위한 회로를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  25. 청구항 21에 있어서,
    상기 라인 버퍼 유닛들 중 적어도 하나는 전체 라인 그룹 모드를 지원하는 것을 특징으로 하는 컴퓨팅 시스템.
  26. 청구항 21에 있어서,
    상기 라인 버퍼 인터페이스 유닛들 중 적어도 하나는 구성 레지스터 공간으로부터 다음 정보:
    a) 이미지 정보에서 채널들의 수;
    b) 라인 그룹의 컨슈머들의 수;
    c) 전체 라인 그룹 유닛 넓이;
    d) 전체 라인 그룹 높이;
    e) 라인 그룹의 더 작은 부분의 치수(dimension)
    중 임의의 것을 수신하도록 연결되는 것을 특징으로 하는 컴퓨팅 시스템.
  27. 청구항 21에 있어서,
    상기 라인 버퍼 유닛은 페치될 다음 이미지 데이터가 상기 메모리에 위치되어 있는 곳을 인식하기 위한 포인터 회로를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
KR1020177028003A 2015-04-23 2016-03-31 이미지 프로세서용 라인 버퍼 유닛 KR102013404B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,712 2015-04-23
US14/694,712 US9756268B2 (en) 2015-04-23 2015-04-23 Line buffer unit for image processor
PCT/US2016/025385 WO2016171869A1 (en) 2015-04-23 2016-03-31 Line buffer unit for image processor

Publications (2)

Publication Number Publication Date
KR20170125392A true KR20170125392A (ko) 2017-11-14
KR102013404B1 KR102013404B1 (ko) 2019-08-22

Family

ID=55754441

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177028003A KR102013404B1 (ko) 2015-04-23 2016-03-31 이미지 프로세서용 라인 버퍼 유닛

Country Status (7)

Country Link
US (4) US9756268B2 (ko)
EP (1) EP3286723B1 (ko)
JP (2) JP6408717B2 (ko)
KR (1) KR102013404B1 (ko)
CN (1) CN107533751B (ko)
DE (1) DE112016001866T5 (ko)
WO (1) WO2016171869A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
GB2539461B (en) * 2015-06-16 2020-01-08 Canon Kk Image data encapsulation
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US10699362B2 (en) * 2016-06-23 2020-06-30 Intel Corporation Divergent control flow for fused EUs
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US10467056B2 (en) * 2017-05-12 2019-11-05 Google Llc Configuration of application software on multi-core image processor
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10430919B2 (en) 2017-05-12 2019-10-01 Google Llc Determination of per line buffer unit memory allocation
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US10657617B1 (en) * 2018-11-26 2020-05-19 GM Global Technology Operations LLC Method and apparatus for memory access management for data processing
US11221976B2 (en) * 2019-01-25 2022-01-11 Microchip Technology Incorporated Allocation of buffer interfaces for moving data, and related systems, methods and devices
CN111506520B (zh) * 2020-07-01 2020-09-22 腾讯科技(深圳)有限公司 一种地址生成的方法、相关装置以及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6970196B1 (en) * 1999-03-16 2005-11-29 Hamamatsu Photonics K.K. High-speed vision sensor with image processing function
US20070080969A1 (en) * 2002-02-28 2007-04-12 Shinichi Yamaura Image processing circuit, combined image processing circuit, and image forming apparatus
US20080111823A1 (en) * 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
KR20130028095A (ko) * 2010-04-05 2013-03-18 퀄컴 인코포레이티드 다중 이미지 센서들로부터 데이터의 결합

Family Cites Families (88)

* 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
US4835712A (en) 1986-04-14 1989-05-30 Pixar Methods and apparatus for imaging volume data with shading
JP2554255B2 (ja) 1987-03-23 1996-11-13 旭光学工業株式会社 フイルタリング装置
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
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 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
JP3573755B2 (ja) 1996-01-15 2004-10-06 シーメンス アクチエンゲゼルシヤフト 画像処理プロセッサ
US6031573A (en) 1996-10-31 2000-02-29 Sensormatic Electronics Corporation Intelligent video information management system performing multiple functions in parallel
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
JP3593439B2 (ja) 1997-06-09 2004-11-24 株式会社日立製作所 画像処理装置
US6148111A (en) * 1998-04-27 2000-11-14 The United States Of America As Represented By The Secretary Of The Navy Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients
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
JP2000251065A (ja) 1999-03-02 2000-09-14 Fuji Xerox Co Ltd 画像処理装置
US6757019B1 (en) * 1999-03-13 2004-06-29 The Board Of Trustees Of The Leland Stanford Junior University Low-power parallel processor and imager having peripheral control circuitry
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
US6986025B2 (en) 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
JP3559021B2 (ja) * 2001-10-31 2004-08-25 株式会社リコー データ変換装置,画像処理装置およびデータ変換方法
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
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
AU2003221680A1 (en) 2002-04-09 2003-10-27 The Research Foundation Of State University Of New York Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
GB2395299B (en) * 2002-09-17 2006-06-21 Micron Technology Inc Control of processing elements in parallel processors
US7225301B2 (en) 2002-11-22 2007-05-29 Quicksilver Technologies External memory controller node
JP2004215242A (ja) * 2002-12-16 2004-07-29 Ricoh Co Ltd データ処理装置,画像処理装置および画像形成装置
GB2398446B (en) 2003-02-12 2006-06-07 Snell & Wilcox Ltd Image processing
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
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
US7581851B2 (en) 2005-01-03 2009-09-01 Jessica Wang Scented lighting devices and systems, and methods for making the same
US20100122105A1 (en) 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007034887A (ja) * 2005-07-29 2007-02-08 Matsushita Electric Ind Co Ltd ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置
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
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
US7834873B2 (en) 2006-08-25 2010-11-16 Intel Corporation Display processing line buffers incorporating pipeline overlap
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
JP2008192038A (ja) 2007-02-07 2008-08-21 Mitsubishi Electric Corp 画像前処理装置
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
US8068114B2 (en) 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
JP2009021459A (ja) 2007-07-13 2009-01-29 Fuji Xerox Co Ltd 面発光型半導体レーザの駆動方法および光伝送モジュール
US8599208B2 (en) * 2007-08-15 2013-12-03 Nvidia Corporation Shared readable and writeable global values in a graphics processor unit pipeline
EP2665256B1 (en) 2007-09-05 2015-11-18 Tohoku University Solid-state image sensor and drive method for the same
JP4917561B2 (ja) 2008-03-18 2012-04-18 株式会社リコー 画像処理装置
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8332794B2 (en) 2009-01-22 2012-12-11 Taiwan Semiconductor Manufacturing Company, Ltd. Circuits and methods for programmable transistor array
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8626810B2 (en) 2009-05-15 2014-01-07 Texas Instruments Incorporated Method and system for finite impulse response (FIR) digital filtering
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
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
JP5185242B2 (ja) 2009-12-04 2013-04-17 株式会社東芝 コンパイル装置
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 パナソニック株式会社 プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US8953882B2 (en) 2012-05-31 2015-02-10 Apple Inc. Systems and methods for determining noise statistics of image data
US20140019486A1 (en) 2012-07-13 2014-01-16 Amitava Majumdar Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
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
US9058673B2 (en) 2013-03-15 2015-06-16 Oracle International Corporation Image mosaicking using a virtual grid
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US9684944B2 (en) 2015-01-16 2017-06-20 Intel Corporation Graph-based application programming interface architectures with node-based destination-source mapping for enhanced image processing parallelism
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6970196B1 (en) * 1999-03-16 2005-11-29 Hamamatsu Photonics K.K. High-speed vision sensor with image processing function
US20070080969A1 (en) * 2002-02-28 2007-04-12 Shinichi Yamaura Image processing circuit, combined image processing circuit, and image forming apparatus
US20080111823A1 (en) * 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
KR20130028095A (ko) * 2010-04-05 2013-03-18 퀄컴 인코포레이티드 다중 이미지 센서들로부터 데이터의 결합

Also Published As

Publication number Publication date
DE112016001866T5 (de) 2018-01-25
EP3286723A1 (en) 2018-02-28
JP6408717B2 (ja) 2018-10-17
US10321077B2 (en) 2019-06-11
US10638073B2 (en) 2020-04-28
US20160316157A1 (en) 2016-10-27
US20190327433A1 (en) 2019-10-24
US20200275040A1 (en) 2020-08-27
JP2019053736A (ja) 2019-04-04
US11190718B2 (en) 2021-11-30
JP2018513476A (ja) 2018-05-24
US9756268B2 (en) 2017-09-05
KR102013404B1 (ko) 2019-08-22
JP6793162B2 (ja) 2020-12-02
CN107533751B (zh) 2020-10-27
WO2016171869A1 (en) 2016-10-27
CN107533751A (zh) 2018-01-02
US20170257585A1 (en) 2017-09-07
EP3286723B1 (en) 2020-10-07

Similar Documents

Publication Publication Date Title
US11190718B2 (en) Line buffer unit for image processor
US10216487B2 (en) Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US20200020069A1 (en) Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
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
E701 Decision to grant or registration of patent right