KR102146515B1 - 이미지 프로세서를 위한 시트 생성기 - Google Patents

이미지 프로세서를 위한 시트 생성기 Download PDF

Info

Publication number
KR102146515B1
KR102146515B1 KR1020207005068A KR20207005068A KR102146515B1 KR 102146515 B1 KR102146515 B1 KR 102146515B1 KR 1020207005068 A KR1020207005068 A KR 1020207005068A KR 20207005068 A KR20207005068 A KR 20207005068A KR 102146515 B1 KR102146515 B1 KR 102146515B1
Authority
KR
South Korea
Prior art keywords
image data
sheet
data
array
execution
Prior art date
Application number
KR1020207005068A
Other languages
English (en)
Other versions
KR20200021003A (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 KR20200021003A publication Critical patent/KR20200021003A/ko
Application granted granted Critical
Publication of KR102146515B1 publication Critical patent/KR102146515B1/ko

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41FPRINTING MACHINES OR PRESSES
    • B41F15/00Screen printers
    • B41F15/08Machines
    • B41F15/0804Machines for printing sheets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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/32101Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mechanical Engineering (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

시트 생성기 회로가 설명된다. 시트 생성기는 이미지 데이터의 프레임으로부터 다수의 데이터 로우들을 포함하는 이미지 데이터의 라인 그룹을 수신하기 위한 전자 회로를 포함한다. 다수의 데이터 로우는 다수의 인접하는 중첩 스텐실들을 포함하기에 수적으로 충분하다. 전자 회로는 라인 그룹을 더 작은 크기의 시트로 파싱한다. 전자 회로는 프로세서의 어레이에 결합된 2 차원 쉬프트 어레이 구조를 갖는 데이터 계산 유닛에 상기 시트를 로딩한다.

Description

이미지 프로세서를 위한 시트 생성기{SHEET GENERATOR FOR IMAGE PROCESSOR}
본 발명의 분야는 일반적으로 이미지 프로세싱에 관한 것으로, 보다 구체적으로는 이미지 프로세서용 시트 생성기에 관한 것이다.
전형적으로, 이미지 프로세싱은 어레이로 조직화되는 픽셀 값들의 프로세싱을 수반한다. 여기에서, 공간적으로 조직화된 2 차원 어레이는 이미지의 2 차원 성질을 캡처한다(부가적인 차원은 시간(예를 들어, 2 차원 이미지의 시퀀스) 및 데이터 타입(예를 들어, 컬러)을 포함할 수 있다.) 전형적인 시나리오에서, 어레이화된 픽셀 값들이 카메라에 의해 제공되며, 카메라는 스틸 이미지를 생성하거나 또는 모션 이미지를 캡처하기 위해 일련의 프레임들을 생성한다. 전통적인 이미지 프로세서들은 2 개의 극단들(extremes) 중 어느 하나에 속하는 것이 일반적이다.
제 1 극단은 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 벡터 명령 강화를 갖는 범용 프로세서) 상에서 실행되는 소프트웨어 프로그램으로서 이미지 프로세싱 태스크를 수행한다. 비록, 제 1 극단이 매우 다양한 어플리케이션 소프트웨어 개발 플랫폼을 제공하는 것이 일반적이지만, 연관된 오버 헤드(예컨대, 명령 페치 및 디코드, 온-칩 및 오프-칩 데이터 처리, 추론적인 실행)와 결합된 보다 미세한(finer grained) 데이터 구조의 사용은 궁극적으로는, 프로그램 코드의 실행 동안 데이터 단위 당 더 많은 양의 에너지가 소모되게 한다.
제 1 극단과 반대인 제 2 극단은, 고정 기능 하드와이어드 회로(fixed function hardwired circuitry)를 훨씬 더 큰 데이터 블록에 적용한다. 커스텀 설계된 회로에 직접적으로 적용되는, 훨씬 더 큰 데이터 블록(보다 미세한 데이터 구조와 반대인)의 사용은, 데이터 단위당 전력 소비를 크게 감소시킬 수 있다. 그러나, 커스텀 설계된 고정 기능 회로의 사용은, 일반적으로 프로세서가 수행할 수 있는 태스크들의 제한된 세트를 야기한다. 이와 같이, 널리 사용되는 프로그래밍 환경(제 1 극단과 관련됨)은 제 2 극단에서 부족하다.
매우 다양한 어플리케이션 소프트웨어 개발 기회들과 데이터 단위당 개선된 전력 효율을 함께 제공할 수 있는 기술 플랫폼이 요망되고 있으나, 이에 대한 해결책은 아직까지 제공되지 않는다.
시트 생성기 회로가 설명된다. 시트 생성기는 다수의 데이터 로우들을 포함하는 이미지 데이터의 라인 그룹을 이미지 데이터의 프레임으로부터 수신하는 전자 회로를 포함한다. 다수의 데이터 로우들은 다수의 이웃하는 중첩 스텐실들을 포함하도록 수적으로 충분하다. 상기 전자 회로는 라인 그룹을 더 작은 사이즈의 시트로 파싱한다. 상기 전자 회로는 프로세서들의 어레이에 결합된 2 차원 쉬프트 어레이 구조를 갖는 데이터 계산 유닛에 상기 시트를 로딩한다.
다수의 데이터 로우들을 포함하는 이미지 데이터의 라인 그룹을 이미지 데이터의 프레임으로부터 수신하는 수단을 갖는 장치가 설명된다. 다수의 데이터 로우들은 다수의 이웃하는 중첩 스텐실들을 포함하도록 수적으로 충분하다. 상기 장치는 또한, 라인 그룹을 더 작은 사이즈의 시트로 파싱하는 수단을 포함한다. 상기 장치는 또한, 프로세서들의 어레이에 결합된 2 차원 쉬프트 어레이 구조에 상기 시트를 로딩하는 수단을 포함한다. 상기 장치는 또한, 상기 시트에 대해서 상기 다수의 이웃하는 중첩 스텐실들을 프로세스하도록 상기 프로세서들의 어레이에서 프로그램 코드를 실행하는 수단을 포함한다.
이하의 설명 및 첨부 도면은 본 발명의 실시예를 설명하기 위해 사용된다.
도 1은 이미지 프로세서 하드웨어 아키텍처의 실시예를 도시한다.
도 2a, 도 2b, 도 2c, 도 2d 및 도 2e는 이미지 데이터를 라인 그룹으로 파싱하는 것, 라인 그룹을 시트로 파싱하는 것 및 중첩 스텐실들로 시트 상에서 수행되는 동작을 도시한다.
도 3a는 스텐실 프로세서의 일 실시예를 도시한다.
도 3b는 스텐실 프로세서의 명령어 워드(instruction word)의 실시예를 도시한다.
도 4는 스텐실 프로세서 내의 데이터 연산 유닛의 실시예를 도시한다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 도 5g, 도 5h, 도 5i, 도 5j 및도 5k는 오버랩핑 스텐실들을 사용하여 인접한 출력 픽셀 값들의 쌍을 결정하기 위한 2 차원 쉬프트 어레이 및 실행 레인 어레이(execution lane array)의 사용 일례를 도시한다.
도 6은 통합된 실행 레인 어레이 및 2 차원 쉬프트 어레이를 위한 단위 셀의 실시예를 도시한다.
도7은 시트 생성기에 의해 수행되는 제 1 동작에 관한 것이다.
도8은 시트 생성기에 의해 수행되는 제 2 동작에 관한 것이다.
도9는 시트 생성기에 의해 수행되는 제 3 동작에 관한 것이다.
도10은 시트 생성기에 의해 수행되는 제 4 동작에 관한 것이다.
도11은 시트 생성기에 의해 수행되는 제 5 동작에 관한 것이다.
도12는 시트 생성기에 의해 수행되는 제 6 동작에 관한 것이다.
도13은 시트 생성기의 일 실시예를 도시한다.
도14는 컴퓨팅 시스템의 일 실시예를 도시한다.
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
도 1은 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(100)의 일 실시예를 도시한다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서를 위해 쓰여진 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 1에 도시된 바와 같이, 아키텍처(100)는 네트워크(104)(예컨대, 온-칩(on-chip) 스위치 네트워크, 온-칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온 칩(NOC))를 통해, 복수의 스텐실 프로세서들(102_1 ~ 102_N)과 대응하는 시트 생성기들(103_1 ~ 103_N)에 상호연결된 복수의 라인 버퍼들(101_1 ~ 101_M)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(104)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 연결될 수 있다.
일 실시예에서는, 소프트웨어 개발자에 의해 미리 정의된 이미지 프로세싱 동작들을 수행하도록, 프로그램 코드가 대응 스텐실 프로세서(102) 상에 컴파일되고 로딩된다(프로그램 코드는 또한 스텐실 프로세서의 관련 시트 생성기(103)에 로딩될 수도 있는바, 예컨대, 설계 및 구현예에 따라 다를 수 있다). 적어도 일부의 경우, 제 1 파이프 라인 스테이지에 대한 제 1 커널 프로그램을 제 1 스텐실 프로세서(102_1)에 로딩하고, 제 2 파이프 라인 스테이지에 대한 제 2 커널 프로그램을 제 2 스텐실 프로세서(102_2)에 로딩함으로써(기타 등등), 이미지 프로세싱 파이프 라인이 구현될 수 있으며, 여기서 제 1 커널은 파이프 라인의 제 1 스테이지의 기능을 수행하고, 제 2 커널은 파이프 라인의 제 2 스테이지의 기능을 수행하며(기타 등등), 그리고 추가적인 제어 플로우 방법들이 설치되어 파이프 라인의 일 스테이지로부터의 출력 이미지 데이터를 파이프 라인의 다음 스테이지로 전달할 수 있다.
다른 구성에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2개 이상의 스텐실 프로세서들(102_1, 102_2)를 갖는 병렬 머신으로서 구현될 수도 있다. 예를 들어, 그 각각이 동일한 기능을 수행하는 다수의 스텐실 프로세서들에게 프레임들을 분산시킴으로써, 높은 밀도 및 높은 데이터 레이트의 이미지 데이터의 스트림이 프로세싱될 수 있다.
또 다른 구성에서, 본질적으로는, 각각의 스텐실 프로세서를 그들 자신의 각각의 프로그램 코드의 커널로 구성하고 그리고 DAG 설계에서 하나의 커널로부터의 출력 이미지들을 다음 커널의 입력으로 향하게 하도록 적절한 제어 흐름 후크들을 하드웨어로 구성함으로써, 커널들의 임의의 DAG가 하드웨어 프로세서 상에 로딩될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임은 매크로 I/O 유닛(105)에 의해 수신되고, 프레임 단위로 하나 이상의 라인 버퍼 유닛(101)으로 전달된다. 특정 라인 버퍼 유닛은 자신의 이미지 데이터의 프레임을 "라인 그룹"이라 지칭되는 더 작은 이미지 데이터 영역으로 파싱하고, 이후 상기 라인 그룹을 네트워크(104)를 통해 특정 시트 생성기로 전달한다. 완벽한(complete) 또는 "완전한(full)" 하나의 라인 그룹은, 예를 들어, 프레임의 다수의 연속적인 완전한 로우들(rows) 또는 컬럼들의 데이터로 구성될 수 있다(명료함을 위해, 본 명세서에서는 주로 연속적인 로우들이 언급될 것이다). 또한, 시트 생성기는 이미지 데이터의 라인 그룹을 "시트" 라고 지칭되는 더 작은 이미지 데이터 영역으로 파싱하고, 해당 시트를 대응하는 스텐실 프로세서에 제공한다.
일반적으로, 이미지 프로세싱 파이프 라인 또는 단일 입력을 갖는 DAG 플로우의 경우, 입력 프레임들은 동일한 라인 버퍼 유닛(101_1)으로 향하게 되며, 라인 버퍼 유닛(101_1)은 이미지 데이터를 라인 그룹들로 파싱하고 라인 그룹들을 시트 생성기(103_1)로 향하게 하며, 시트 생성기(103_1)의 대응 스텐실 프로세서(102_1)는 파이프 라인/DAG에서 제 1 커널의 코드를 실행한다. 라인 그룹들에 대한 스텐실 프로세서(102_1)의 동작들이 완료되면, 시트 생성기(103_1)는 출력 라인 그룹들을 "다운 스트림"라인 버퍼 유닛(101_2)으로 전송한다(몇몇 경우에, 출력 라인 그룹은, 입력 라인 그룹들을 이전에 송신하였던 동일한 라인 버퍼 유닛(101_1)으로 다시 전송될 수도 있다).
그들 자신의 각각의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기 103_2 및 스텐실 프로세서 102_2)에서 실행 중인 파이프 라인/DAG에서의 다음 스테이지/연산을 나타내는 하나 이상의 "소비자(consumer)" 커널들은, 제 1 스텐실 프로세서(102_1)에 의해 생성된 이미지 데이터를 다운스트림 라인 버퍼 유닛(101_2)으로부터 수신한다. 이러한 방식으로, 제 1 스텐실 프로세서 상에서 동작하는 "생산자" 커널은 자신의 출력 데이터가 제 2 스텐실 프로세서 상에서 동작하는 "소비자" 커널로 포워딩되게 하며, 여기서 전체 파이프 라인 또는 DAG의 설계와 일관성이 있도록 생산자 커널 이후에 소비자 커널이 다음 세트의 태스크들을 수행한다.
스텐실 프로세서(102)는 이미지 데이터의 다수의 중첩(overlapping) 스텐실들(stencils) 상에서 동시에 동작하도록 설계된다. 다수의 중첩 스텐실들 및 스텐실 프로세서의 내부 하드웨어 프로세싱 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(102) 내에서, 실행 레인들의 어레이들은 조화롭게(in unison) 동작하여, 다수의 중첩 스텐실들에 의해 커버되는 이미지 데이터 표면 영역을 동시에 프로세싱한다.
아래에서 보다 상세히 설명되는 바와 같이, 다양한 실시예에서, 이미지 데이터 시트들은 스텐실 프로세서(102) 내의 2 차원 레지스터 어레이 구조에 로딩된다. 시트 및 2 차원 레지스터 어레이 구조의 사용은 예컨대, 실행 레인 어레이에 의해 그 직후에 데이터에 직접 수행되는 프로세싱 태스크들을 단일 로드 연산과 같이, 대용량의 데이터를 대용량의 레지스터 공간으로 이동시킴으로써 전력 소비 개선을 효과적으로 제공한다. 또한, 실행 레인 어레이 및 대응 레지스터 어레이의 사용은, 용이하게 프로그래밍가능하며/설정가능한 서로 다른 스텐실 사이즈들을 제공한다.
또한, 도 2a 내지 도 2e는 라인 버퍼 유닛(101)의 파싱 동작, 시트 생성기 유닛(103)의 더 세분화된 파싱 동작 뿐만 아니라, 시트 생성기 유닛(103)에 연결된 스텐실 프로세서(102)의 스텐실 프로세싱 동작에 대한 높은 레벨의 실시예들을 예시한다.
도 2a는 이미지 데이터(201)의 입력 프레임의 실시예를 도시한다. 또한, 도 2a는 스텐실 프로세서가 동작하도록 설계된 3개의 중첩 스텐실들(202)(각각은 3 픽셀 × 3 픽셀의 차원을 가짐)의 윤곽을 도시한다. 각 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 단일 검정색(solid black)으로 하이라이트된다. 단순화를 위해, 3개의 중첩 스텐실들(202)은 수직 방향으로만 중첩되는 것으로 도시되어 있다. 스텐실 프로세서는 실제로는, 수직 및 수평 방향 둘다에서 중첩 스텐실들을 갖도록 설계될 수 있다고 인식하는 것이 적절할 것이다.
도 2a에 도시된 바와 같은, 스텐실 프로세서 내의 수직 오버랩 스텐실들(202) 때문에, 하나의 스텐실 프로세서가 동작할 수 있는 넓은 대역의 이미지 데이터가 프레임 내에 존재한다. 아래에서 보다 상세히 설명되는 바와 같이, 일 실시예에서, 스텐실 프로세서는 이미지 데이터를 가로질러 좌측에서 우측 방식으로 그들의 중첩 스텐실들 내의 데이터를 프로세싱한다(그 다음, 라인들의 다음 세트에 대해 위에서 아래 순서로 반복한다). 따라서 스텐실 프로세서가 동작을 계속 진행함에 따라, 단일 흑색 출력 픽셀 블록들의 수는 수평적으로 오른쪽으로 증가할 것이다. 전술한 바와 같이, 라인 버퍼 유닛(101)은 확장된 개수의 다가올 사이클 동안 스텐실 프로세서가 동작하기에 충분한 인커밍 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 수행한다. 라인 그룹에 대한 예시적인 모습은 음영된 영역(203)으로 예시된다. 일 실시예에서, 라인 버퍼 유닛(101)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송신/수신하기 위한 상이한 다이나믹스들(dynamics)을 이해할 수 있다. 예를 들어, "전체 그룹(full group)" 이라고 지칭되는 일 모드에 따르면, 이미지 데이터의 완전한 전체 폭 라인들이 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)" 라고 지칭되는 제 2 모드에 따르면, 라인 그룹은 처음에는 전체 폭 로우들의 서브세트로 전달된다. 이후, 나머지 로우들이 더 작은 조각들(전체 폭 보다 작은)로 후속하여 전달된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(203)을 이용하여, 시트 생성기 유닛은 또한 라인 그룹을 더 미세한 시트들로 파싱하는바, 이러한 미세한 시트들은 스텐실 프로세서의 하드웨어 제한들에 더 정확하게 적합하다. 보다 상세하게는, 이하에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 각각의 스텐실 프로세서는 2 차원 쉬프트 레지스터 어레이로 구성된다. 2 차원 쉬프트 레지스터 어레이는 본질적으로 이미지 데이터를 실행 레인들의 어레이 "아래로(beneath)" 쉬프팅시키며, 여기서 시프팅의 패턴은 각 실행 레인이 그 자신의 각각의 스텐실 내의 데이터에 대해 동작하게 한다(즉, 각각의 실행 레인은 자신의 정보의 스텐실을 프로세싱하여, 그 스텐실에 대한 출력을 생성한다). 일 실시예에서, 시트들은, 2 차원 쉬프트 레지스터 어레이를 "채우거나" 또는 2 차원 쉬프트 레지스터 어레이에 로딩되는 입력 이미지 데이터의 표면 영역들이다.
아래에 보다 상세히 설명되는 바와 같이, 다양한 실시예에서, 실제로 임의의 사이클에서 쉬프트될 수 있는 2 차원 레지스터 데이터의 다중 층들이 존재한다. 편의를 위해, 본 설명 내용의 대부분은 "2 차원 쉬프트 레지스터" 등의 용어를 단순히 사용하여, 쉬프트될 수 있는 2 차원 레지스터 데이터의 하나 이상의 이러한 층들을 갖는 구조를 지칭할 것이다.
따라서, 도 2b에서 관찰되는 바와 같이, 시트 생성기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하고 그리고 이것을 스텐실 프로세서에 제공한다(여기서, 데이터 시트는 도면 부호 204로 일반적으로 식별되는 음영 영역에 대응한다). 도 2c 및 도 2d에 도시된 바와 같이, 스텐실 프로세서는 중첩 스텐실들(202)을 시트 위에서 좌측에서 우측으로 효과적으로 이동시킴으로써, 입력 이미지 데이터 시트에 대해 동작한다. 도 2d에서와 같이, 시트 내의 데이터로부터 출력 값이 계산될 수 있는 픽셀들의 수가 소진된다(exhausted)(다른 픽셀 위치는 시트 내의 정보로부터 결정되는 출력 값을 가질 수 없다). 단순화를 위해 이미지의 경계 영역들은 무시되었다.
도 2e에 도시된 바와 같이, 시트 생성기는 스텐실 프로세서가 동작들을 계속하도록, 다음 시트(205)를 제공한다. 다음을 유의해야 하는바, 스텐실들이 다음 시트에서 작동하기 시작할 때의 스텐실들의 초기 위치들은 제 1 시트 상의 소진 지점(도 2d에서 앞서 도시된 바와 같이)으로부터 우측으로 다음 진행한 지점이다. 새로운 시트(205)의 경우, 스텐실 프로세서가 제 1 시트의 프로세싱과 동일한 방식으로 새로운 시트 상에서 작동함에 따라, 스텐실들은 우측으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에, 제 1 시트(204)의 데이터와 제 2 시트(205)의 데이터 사이에 약간의 중첩이 있음을 유의해야 한다. 이러한 중첩은, 시트 생성기가 중첩 데이터를 2번 재전송함으로써 간단히 처리될 수 있다. 다른 구현예에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 스텐실 프로세서에 새로운 데이터를 전송하기만하고, 그리고 스텐실 프로세서는 이전 시트로부터 중첩 데이터를 재사용할 수 있다.
b. 스텐실 프로세서 설계 및 동작
도 3a는 스텐실 프로세서 아키텍처(300)의 일 실시예를 도시한다. 도 3a에 도시된 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(301), 스칼라 프로세서(302) 및 관련 메모리(303) 및 I/O 유닛(304)을 포함한다. 데이터 계산 유닛(301)은 실행 레인들의 어레이(array of execution lanes)(305), 2 차원 쉬프트 어레이 구조(306) 및 상기 어레이의 특정 로우들 또는 컬럼들과 관련된 개별적인 랜덤 액세스 메모리(307)를 포함한다.
I/O 유닛(304)은 시트 생성기로부터 수신된 "입력" 데이터 시트를 데이터 계산 유닛(301)에 로딩하고 그리고 스텐실 프로세서로부터의 "출력" 데이터 시트를 시트 생성기에 저장하는 역할을 수행한다. 일 실시예에서, 데이터 시트를 데이터 계산 유닛(301)에 로딩하는 것은, 수신된 시트를 이미지 데이터의 로우들/컬럼들로 파싱하고 그리고 이미지 데이터의 로우들/컬럼들을 2 차원 쉬프트 레지스터 구조(306)에 로딩하거나 또는 실행 레인 어레이의 로우들/컬럼들의 각각의 랜덤 액세스 메모리들(307)에 로딩하는 것을 수반한다(아래에서 자세히 설명함). 만일, 시트가 초기에 메모리들(307)에 로딩된다면, 실행 레인 어레이(305) 내의 개별 실행 레인들은 적절할 때에 랜덤 억세스 메모리들(307)로부터 시트 데이터를 2 차원 쉬프트 레지스터 구조(306)에 로딩할 수 있다(예를 들어, 시트 데이터에 대한 동작 직전의 로드 명령으로서). 데이터 시트를 레지스터 구조(306)에 로딩하는 것이 완료되면(시트 생성기로부터 직접 또는 메모리(307)로부터), 실행 레인 어레이(305)의 실행 레인들은 데이터에 대해 작용하고 그리고 결과적으로는 시트로서 완료된 데이터를 시트 생성기에 직접 라이트 백(write back)하거나 또는 랜덤 액세스 메모리(307)에 라이트 백한다. 나중에 I/O 유닛(304)이 랜덤 액세스 메모리들(307)로부터 데이터를 인출하여 출력 시트를 형성하면 이는 시트 생성기로 포워딩된다.
스칼라 프로세서(302)는 프로그램 제어기(309)를 포함하는바, 프로그램 제어기(309)는 스텐실 메모리(303)로부터 스텐실 프로세서의 프로그램 코드의 명령들을 판독하고 그리고 실행 레인 어레이(305)의 실행 레인들에게 명령들을 발행한다. 일 실시예에서는, 하나의 동일한 명령이 어레이(305) 내의 모든 실행 레인들로 브로드캐스팅되어, 데이터 계산 유닛(301)으로부터 SIMD 유사 거동을 가져올 수 있다. 일 실시예에서, 스칼라 메모리(303)로부터 판독되고 그리고 실행 레인 어레이(305)의 실행 레인들에 발행된 명령들의 명령 포맷은, 명령 당 2 이상의 옵코드(opcode)를 포함하는 VLIW(very-long-instruction-word) 유형의 포맷을 포함한다. 또 다른 실시예에서, VLIW 포맷은, 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 옵코드(후술하는 바와 같이, 일 실시예에서 하나 이상의 전통적인 ALU 연산을 지정할 수 있음) 및 메모리 옵코드(특정 실행 레인 또는 실행 레인들 세트에 대한 메모리 동작을 지시하는) 둘다를 포함할 수 있다.
"실행 레인"이라는 용어는 명령을 실행할 수 있는 하나 이상의 실행 유닛들의 세트를 지칭한다(예를 들어, 명령을 실행할 수 있는 논리 회로). 하지만, 다양한 실시예들에서, 실행 레인은, 단순한 실행 유닛 이상인, 더 많은 프로세서-유사 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛들 이외에도, 실행 레인은 수신된 명령을 디코딩하는 논리 회로를 포함할 수 있거나 또는 더 많은 MIMD와 유사한 설계들의 경우 명령을 페치하고 디코딩하는 논리 회로를 포함할 수 있다. MIMD와 유사한 접근법들과 관련하여, 중앙집중화된 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 보다 분산된 접근법이 다양한 대안적인 실시예들에서 구현될 수 있다(예를 들어, 프로그램 코드 및 어레이(305)의 각 실행 레인 내의 프로그램 제어기를 포함하여).
실행 레인 어레이(305), 프로그램 제어기(309) 및 2 차원 쉬프트 레지스터 구조(306)의 조합은 광범위한 프로그램가능 기능들을 위한 광범위하게 적응가능/구성가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 어플리케이션 소프트웨어 개발자는, 개별 실행 레인들이 다양한 기능들을 수행할 수 있고 그리고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 용이하게 액세스할 수 있다는 점을 고려하면, 넓은 범위의 다양한 기능 능력 뿐만 아니라 치수(예컨대, 스텐실 사이즈)를 갖는 커널들을 프로그래밍할 수 있다.
랜덤 액세스 메모리(307)는 실행 레인 어레이(305)에 의해 연산되는 이미지 데이터를 위한 데이터 저장소로서 동작하는 것 이외에도, 하나 이상의 룩업 테이블들을 보유할 수 있다. 다양한 실시예에서, 하나 이상의 스칼라 룩업 테이블이 또한 스칼라 메모리(303) 내에서 인스턴스화될 수 있다.
스칼라 룩업은 동일한 룩업 테이블로부터의 동일한 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(305) 내의 각 실행 레인에 패싱하는 것을 포함한다. 다양한 실시예에서, 스칼라 프로세서에 의해 수행된 룩업 연산을 스칼라 룩업 테이블로 향하게 하는 스칼라 옵코드를 또한 포함하도록, 전술한 VLIW 명령 포맷이 확장된다. 옵코드와 함께 사용하도록 지정된 인덱스는 즉시 피연산자(immediate operand)일 수도 있으며 또는 소정의 다른 데이터 저장 위치로부터 페치될 수도 있다. 그럼에도 불구하고, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩-업은, 본질적으로, 동일한 클럭 사이클 동안 실행 레인 어레이(305) 내의 모든 실행 레인들에게 동일한 데이터 값을 브로드캐스팅하는 것을 포함한다. 룩업 테이블의 사용 및 작동에 관한 추가적인 세부 사항은 아래에 제공될 것이다.
도 3b는 전술한 VLIW 명령 워드 실시예(들)를 요약한 것이다. 도 3b에 도시된 바와 같이, VLIW 명령 워드 포맷은 3 개의 개별 명령들에 대한 필드들을 포함하는바, 3 개의 개별 명령들은 다음과 같다: 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(351); 2) 실행 레인 어레이 내의 각각의 ALU에 의해 SIMD 방식으로 브로드캐스팅 및 실행되는 ALU 명령(352); 그리고 3) 부분적인 SIMD 방식으로 브로드캐스팅 및 실행되는 메모리 명령(353)(예컨대, 실행 레인 어레이의 동일한 로우를 따르는 실행 레인들이 동일한 랜덤 액세스 메모리를 공유한다면, 서로 다른 로우들 각각으로부터 하나의 실행 레인이 실제로 명령을 실행한다)(메모리 명령(353)의 포맷은 각 로우로부터 어떤 실행 레인이 명령을 실행하는지를 식별하는 피연산자를 포함할 수 있다).
하나 이상의 즉시 피연산자들에 대한 필드(354)도 포함된다. 명령들(351, 352, 353) 중 어떤 것이 어떤 즉시 피연산자 정보를 사용하는지는 명령 포맷에서 식별될 수 있다. 명령들(351, 352, 353) 각각은 또한 그들 자신의 각각의 입력 피연산자 및 결과 정보를 포함한다(예를 들어, ALU 연산들을 위한 로컬 레지스터들 및 메모리 액세스 명령을 위한 로컬 레지스터 및 메모리 어드레스). 일 실시예에서, 스칼라 명령(351)은 실행 레인 어레이 내의 실행 레인들이 다른 명령들(352, 353) 중 어느 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(351)이 실행되는 제 1 사이클과 이에 후속하여 다른 명령들(352, 353)이 실행될 수 있는 제 2 사이클을 포함한다(다음을 유의해야 하는바, 다양한 실시예들에서는 명령들 352 및 353이 병렬로 실행될 수도 있음).
일 실시예에서, 스칼라 프로세서에 의해 실행되는 스칼라 명령들은 데이터 계산 유닛의 2D 쉬프트 레지스터 혹은 메모리들 로부터/로 시트를 로드/저장하기 위해, 시트 생성기에 발행되는 커맨드들을 포함한다. 여기서, 시트 생성기의 동작은 라인 버퍼 유닛의 동작에 의존하거나 또는 스칼라 프로세서에 의해 발행된 임의의 커맨드를 시트 생성기가 완료하기 위해 걸리는 사이클 수의 사전-런타임 컴프리헨션(pre-runtime comprehension)을 방지하는 다른 변수들에 의존할 수 있다. 이와 같이, 일 실시예에서, 스칼라 명령(351)이 시트 생성기로 커맨드가 발행되게 하거나(또는 이에 대응하는) 임의의 VLIW 워드는 다른 2개의 명령 필드(352, 353) 내에 무-연산(no-operation: NOOP) 명령들을 또한, 포함한다. 다음으로, 프로그램 코드는 시트 생성기가 데이터 계산 유닛으로/로부터의 로드/저장을 완료할 때까지, 명령 필드들(352, 353)에 대해 NOOP 명령들의 루프를 입력한다. 여기서, 시트 생성기로 커맨드를 발행하면, 스칼라 프로세서는, 커맨드 완료시에 시트 생성기를 리셋하는 인터록 레지스터(interlock register)의 비트를 설정할 수 있다. NOOP 루프 동안, 스칼라 프로세서는 인터록 비트의 비트를 모니터링한다. 시트 생성기가 커맨드를 완료했음을 스칼라 프로세서가 검출하면, 정상적인 실행이 다시 시작된다.
도 4는 데이터 계산 컴포넌트(401)의 일 실시예를 도시한다. 도 4에 도시된 바와 같이, 데이터 계산 컴포넌트(401)는 2 차원 쉬프트 레지스터 배열 구조의 "위에(above)" 논리적으로 배치된 실행 레인들의 어레이(405)를 포함한다. 전술한 바와 같이, 다양한 실시예에서, 시트 생성기에 의해 제공되는 이미지 데이터의 시트는 2 차원 쉬프트 레지스터(406)에 로딩된다. 그 다음, 실행 레인들은 레지스터 구조(406)로부터 시트 데이터에 대해 작동한다.
실행 레인 어레이(405) 및 쉬프트 레지스터 구조(406)는 서로에 대한 위치에 고정된다. 그러나, 쉬프트 레지스터 구조(406) 내의 데이터는 전략적으로 그리고 조정된 방식으로 쉬프트되어, 실행 레인 어레이의 각 실행 레인이 데이터 내의 다른 스텐실을 프로세싱하게 한다. 이와 같이, 각각의 실행 레인은 생성되는 출력 시트 내의 서로 다른 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터 다음과 같은 점이 명백한바, 중첩 스텐실들은 수직으로 배열될 뿐만 아니라 수평으로 배열되는데, 이는 실행 레인 어레이(405)가 수직으로 인접한 실행 레인들 뿐만 아니라 수평으로 인접한 실행 레인들을 포함하기 때문이다.
데이터 계산 유닛(401)의 일부 주목할만한 구조적 특징은, 실행 레인 어레이(405)보다 넓은 치수들을 갖는 쉬프트 레지스터 구조(406)를 포함하는 점이다. 즉, 실행 레인 어레이(405) 바깥쪽에 "헤일로(halo)" 레지스터들(409)이 존재한다. 비록, 이러한 헤일로(halo)(409)는 실행 레인 어레이의 2개의 측면들 상에 존재하는 것으로 도시되어 있지만, 구현예에 따라, 상기 헤일로는 실행 레인 어레이(405)의 더 적은 측면(1개의 측면) 또는 더 많은 측면(3개 또는 4개의 측면들) 상에 존재할 수도 있다. 헤일로(409)는, 실행 레인들(405)의 "아래"로 데이터가 쉬프트함에 따라 실행 레인 어레이(405)의 경계들 외부로 넘쳐나는 데이터를 위한 "스필-오버(spill-over)" 공간을 제공하는 역할을 한다. 간단한 일례로서, 실행 레인 어레이(405)의 우측 에지 상에 중심을 잡은 5x5 스텐실은 스텐실의 가장 좌측의 픽셀들이 프로세싱될 때에 더 오른쪽에 있는 4개의 헤일로 레지스터 위치들을 필요로 할 것이다. 용이한 도시를 위하여, 도4는 헤일로의 우측면 레지스터들이 수평적 쉬프트 연결들만을 갖는 것으로 도시하고 있으며 그리고 헤일로의 바닥면 레지스터들이 수직적 쉬프트 연결들만을 갖는 것으로 도시하고 있는바, 명목상의 실시예에서, 어느 일 측(우측, 바닥측) 상의 레지스터들은 수평적 및 수직적 연결들 둘다를 가질 것이다.
어레이의 각각 로우 및/또는 각각 컬럼에 연결되거나 또는 그 일부들에 연결되는 랜덤 액세스 메모리들(407)에 의해서 추가적인 스필-오버 공간이 제공된다(예컨대, 랜덤 액세스 메모리는 로우 방향의 4개의 실행 레인들 및 컬럼 방향의 2개의 실행 레인들에 걸쳐있는 실행 레인 어레이의 "영역"에 할당될 수 있다. 간략화를 위해 본 출원의 나머지 부분에서는 로우 및/또는 컬럼 기반의 할당 체계들을 주로 언급할 것이다). 여기서, 실행 레인의 커널 동작들이 2 차원 쉬프트 레지스터 어레이(406)의 외부에 있는 픽셀 값들을 프로세싱할 것을 요구한다면(몇몇 이미지 프로세싱 루틴들이 요구할 수도 있음), 이미지 데이터의 평면은 예를 들어, 헤일로 영역(409)으로부터 랜덤 액세스 메모리(407) 내부로 추가적으로 스필-오버할 수 있다. 예를 들어, 하드웨어가, 실행 레인 어레이의 우측 에지 상에서 실행 레인의 우측으로 단지 4 개의 저장소자들의 헤일로 영역을 포함하는 6X6 스텐실을 고려하자. 이 경우, 데이터는, 스텐실을 완전히 프로세싱하기 위해, 헤일로(409)의 우측 에지를 넘어 더 오른쪽으로 쉬프트되어야할 필요가 있다. 헤일로 영역(409) 외부로 쉬프트된 데이터는 랜덤 액세스 메모리(407)로 스필 오버할 것이다. 도 3의 랜덤 액세스 메모리(407) 및 스텐실 프로세서의 다른 어플리케이션이 아래에 더 제공된다.
도 5a 내지 도 5k는 이미지 데이터가 상술 한 바와 같이 실행 레인 어레이 "아래"의 2 차원 쉬프트 레지스터 어레이 내에서 쉬프트되는 방식의 일례를 나타낸다. 도 5a에 도시된 바와 같이, 2 차원 쉬프트 어레이의 데이터 콘텐츠는 제 1 어레이(507)에 도시되고, 실행 레인 어레이는 프레임(505)으로 도시된다. 또한, 실행 레인 어레이 내의 2 개의 이웃 실행 레인들(510)이 간략히 도시된다. 이러한 단순화된 묘사(510)에서, 각각의 실행 레인은 쉬프트 레지스터로부터 데이터를 수용하거나, ALU 출력으로부터 데이터를 받아들이거나(예를 들어 사이클을 통해 누산기로서 동작하도록), 또는 출력 데이터를 출력 목적지에 기입할 수 있는 레지스터(R1)를 포함한다.
또한, 각각의 실행 레인은 로컬 레지스터(R2)에서 2 차원 쉬프트 어레이 내의 그것 "아래의(below)" 콘텐츠를 이용할 수 있다. 따라서, R1은 실행 레인의 물리적 레지스터이고, R2는 2 차원 쉬프트 레지스터 어레이의 물리적 레지스터이다. 실행 레인은 R1 및/또는 R2에 의해 제공되는 피연산자들에 대해 동작할 수 있는 ALU를 포함한다. 아래에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 쉬프트 레지스터는 어레이 위치 마다 다수의( "깊이"의) 저장/레지스터 소자들로 실제로 구현되지만, 시프팅 동작은 저장 소자들의 하나의 평면으로 제한된다(예를 들어, 저장소자들의 오직 하나의 평면만이 한 사이클 마다 쉬프트할 수 있다). 도 5a 내지 도 5k는 각각의 실행 레인들로부터 결과 X를 저장하는데 사용되는, 이들 더 깊은 레지스터 위치들 중 하나를 도시한다. 설명의 용이함을 위해, 더 깊은 결과적인 레지스터(the deeper resultant register)는 그것의 상대 레지스터(R2)의 아래가 아니라 나란히 도시된다.
도 5a 내지 도 5k는 2 개의 스텐실들의 계산에 초점을 맞추고 있는데, 상기 2 개의 스텐실들의 중심 위치는 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치들(511)에 정렬된다. 설명의 용이함을 위해, 한 쌍의 실행 레인들(510)은 수평적인 이웃들로 도시되지만, 실제는 다음의 일례들에 따르면, 이들은 수직한 이웃들이다.
도 5a에서 처음 도시되는 바와 같이, 실행 레인들은 그들의 중앙 스텐실 위치에 중심이 맞추어진다. 도 5b는 두 개의 실행 레인들에 의해 실행되는 목적 코드(object code)를 보여준다. 도 5b에 도시된 바와 같이, 2개의 실행 레인들의 프로그램 코드는 쉬프트 레지스터 어레이 내의 데이터가 아래로 한 위치만큼 쉬프트되고 오른쪽 한 위치만큼 쉬프트되게 한다. 이렇게하면 2개의 실행 레인들이 그들 각각의 스텐실들의 왼쪽 상단 모서리에 정렬된다. 다음으로, 프로그램 코드는 그들 각각의 위치들에 배치된(R2에) 데이터가 R1으로 로딩되게 한다.
도 5c에 도시된 바와 같이, 다음으로 프로그램 코드는 한 쌍의 실행 레인들이 쉬프트 레지스터 어레이 내의 데이터를 하나의 유닛만큼 좌측으로 쉬프트되게 하는바, 이는 각각의 실행 레인의 각각의 위치의 우측의 값이 각 실행 레인의 위치로 쉬프트되게 한다. 다음으로, R1의 값(이전 값)은 실행 레인의 위치(R2)로 쉬프트된 새로운 값에 합산된다. 그 결과가 R1에 기입된다. 도 5d에 도시된 바와 같이, 도 5c에 대해 전술한 것과 동일한 프로세스가 반복되며, 이는 상위 실행 레인의 A + B + C 값 및 하위 실행 레인의 F + G + H 값을 결과적인 R1이 이제 포함하게 한다. 이 시점에서 2 개의 실행 레인들은 그들 각각의 스텐실들의 상위 로우를 프로세싱하였다. 실행 레인 어레이의 좌측면 상의 헤일로 영역(좌측면 상에 있는 경우)에 스필-오버를 기록하거나 또는 실행 레인 어레이의 좌측면 상에 헤일로 영역이 존재하지 않는다면, 랜덤 액세스 메모리에 스필-오버를 기록한다.
도 5e에 도시된 바와 같이, 다음으로 프로그램 코드는 쉬프트 레지스터 어레이 내의 데이터를 하나의 유닛만큼 위쪽으로 쉬프트되게 하는바, 이는 2개의 실행 레인들이 그들 각각의 스텐실들의 가운데 로우의 우측 에지에 정렬되게 한다. 2개의 실행 레인들의 레지스터 R1은 현재 스텐실의 최상위 로우와 중간 로우의 최우측 값의 합계를 포함한다. 도 5f 및 5g는 2개의 실행 레인들의 스텐실들의 중간 로우를 가로질러 왼쪽으로 계속해서 이동하는 것을 도시한다. 이러한 누적 합산이 계속되며, 따라서 도 5g의 프로세싱의 종료시에 2개의 실행 레인들은 둘다 그들 각각의 스텐실들의 최상위 로우 및 가운데 로우의 값들의 합산을 포함한다.
도 5h는 각각의 실행 레인이 그것의 대응 스텐실의 최하위 로우와 정렬되는 또 다른 쉬프트를 도시한다. 도 5i와 도 5j는 2개의 실행 레인들의 스텐실들의 코스(course)에 대한 프로세싱을 완료하기 위한 계속되는 쉬프팅을 도시한다. 도 5k는 각 실행 레인을 데이터 어레이 내의 그것의 정확한 위치와 정렬시키고 그리고 그 결과를 이에 기입하기 위한 추가적인 쉬프팅을 도시한다.
도 5a 내지 도 5k의 일례에서, 다음을 유의해야 하는바, 쉬프트 동작에 대한 목적 코드는, (X, Y) 좌표로 표현되는 쉬프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다. 예를 들어, 하나의 위치(one location)만큼 쉬프트 업하기 위한 목적 코드는, SHIFT 0, +1과 같은 목적 코드로 표현될 수 있다. 또 다른 일례로서, 하나의 위치만큼 오른쪽으로 쉬프트하는 것은 SHIFT +1, 0 과 같은 목적 코드로 표현될 수 있다. 다양한 실시예들에서, 보다 큰 크기의 쉬프트들은 목적 코드(예를 들어, SHIFT 0, + 2)에서 특정될 수 있다. 여기서, 만일 2D 쉬프트 레지스터 하드웨어가 사이클 당 하나의 위치에 의한 쉬프트들만을 지원하는 경우, 상기 명령은 다중 사이클 실행을 요구하도록 머신에 의해 해석될 수 있으며 또는 2D 쉬프트 레지스터 하드웨어는 사이클 당 2 이상의 위치에 의한 쉬프트를 지원하도록 설계될 수 있다. 이에 관한 실시예들은 이하에서 더 상세히 설명될 것이다.
도 6a는 어레이 실행 레인 및 쉬프트 레지스터 구조에 대한 유닛 셀의 다른 상세한 도면을 예시한다(헤일로 영역의 레지스터들은 대응하는 실행 레인을 포함하지 않는다). 일 실시예에서, 실행 레인 및 실행 레인 어레이의 각 위치와 관련된 레지스터 공간은, 실행 레인 어레이의 각 노드에서 도 6a에 도시된 회로를 인스턴스화함으로써 구현된다. 도 6a에 도시된 바와 같이, 유닛 셀은 4 개의 레지스터들(R2 내지 R5)로 구성된 레지스터 파일(602)에 연결된 실행 레인(601)을 포함한다. 임의의 사이클 동안, 실행 레인(601)은 임의의 레지스터(R1 내지 R5)로부터 판독하거나 임의의 레지스터(R1 내지 R5)에 기록할 수 있다. 2 개의 입력 피연산자들을 필요로 하는 명령들의 경우, 실행 레인은 R1 내지 R5 중 임의의 것으로부터 2개의 피연산자들 모두를 검색할 수 있다.
일 실시예에서, 2 차원 쉬프트 레지스터 구조는 다음과 같이 구현될 수 있는바, 단일 사이클 동안, 레지스터들(R2 내지 R4) 중 어느 하나(오직 하나)의 콘텐츠가 출력 멀티플렉서(603)를 통해 이웃 레지스터 파일 중 하나로 쉬프트 "아웃(out)" 되게 함으로써, 그리고 레지스터들(R2 내지 R4) 중 어느 하나(오직 하나)의 콘텐츠를 대응하는 것으로부터 쉬프트 "인(in)" 된 콘텐츠로 대체함으로써(만일, 그 이웃들이 입력 멀티플렉서(604)를 통해 이웃들 사이에서 동일한 방향으로 쉬프트한다면(예컨대, 모든 실행 레인들은 좌측으로 쉬프트, 모든 실행 레인들은 우측으로 쉬프트, 기타 등등)), 구현될 수 있다. 비록, 동일한 레지스터가 자신의 콘텐츠를 쉬프트 아웃하고 그리고 동일 사이클 상에서 쉬프트 인(shifted in)된 콘텐츠로 자신의 콘텐츠를 대체하는 것이 일반적일 수도 있지만, 멀티플렉서 구성들(603, 604)은 동일한 사이클 동안 동일한 레지스터 파일 내에서 상이한 쉬프트 소스 및 쉬프트 타겟 레지스터들을 허용한다.
도 6a에 도시된 바와 같이, 쉬프트 시퀀스 동안 실행 레인은 콘텐츠를 자신의 레지스터 파일(602)로부터 자신의 좌측, 우측, 상부 및 하부 이웃들로 각각 쉬프트 아웃할 것이다. 동일한 쉬프트 시퀀스와 관련하여, 실행 레인은 자신의 좌측, 우측, 상부 및 하부 이웃들 중 특정 이웃으로부터 콘텐츠를 자신의 레지스터 파일 내부로 쉬프트 인 할 것이다. 다시 한번 말하지만, 쉬프트 아웃 타겟 및 쉬프트 인 소스는 모든 실행 레인들에 대해 동일한 쉬프트 방향과 일치해야만 한다(예컨대, 쉬프트 아웃이 우측 이웃으로 향하게 된다면, 쉬프트 인은 좌측 이웃으로부터 유래되어야 한다).
비록, 일 실시예에서는, 오직 하나의 레지스터의 콘텐츠가 매 사이클마다 매 실행 레인 마다(per execution lane per cycle) 쉬프트되는 것이 허용되지만, 다른 실시예들은 2 이상의 레지스터들의 콘텐츠가 쉬프트 인/아웃되는 것을 허용할 수 있다. 예를 들어, 도 6a에 도시된 멀티플렉서 회로(603, 604)의 제 2 인스턴스가 도 6a의 설계에 통합되는 경우, 동일한 사이클 동안 2 개의 레지스터들의 콘텐츠가 쉬프트 아웃/인될 수 있다. 물론, 오직 하나의 레지스터의 콘텐츠가 매 사이클마다 쉬프트되는 것이 허용되는 실시예에서, 수학적 연산들 간의 쉬프트들을 위해 더 많은 클럭 사이클들을 소비함으로써, 다수의 레지스터들로부터의 쉬프트들이 수학적 연산들 사이에서 발생할 수 있다(예컨대, 수학적 연산들(math ops) 사이에 2개의 쉬프트 연산들(shift ops)을 소모함으로써 수학적 연산들 사이에서 2 개의 레지스터들의 콘텐츠가 쉬프트될 수 있다).
만일, 실행 레인의 레지스터 파일들의 모든 컨텐츠 보다 적은 분량이 쉬프트 시퀀스 동안 쉬프트 아웃된다면, 각각의 실행 레인의 쉬프트 아웃되지 않은 레지스터들의 콘텐츠는 그대로 유지됨을 유의해야 한다(즉, 쉬프트하지 않음). 이와 같이, 쉬프트 인된(shifted in) 콘텐츠로 대체되지 않은, 임의의 쉬프트되지 않은 콘텐츠는, 쉬프트 사이클 동안, 실행 레인에 대해 국부적으로 유지된다(persists local to the execution lane). 각 실행 레인에서 볼 수 있는 메모리 유닛("M")은 랜덤 액세스 메모리 공간으로부터/공간으로 데이터를 로드/저장하는데 사용되며, 랜덤 액세스 메모리 공간은 실행 레인 어레이 내의 실행 레인의 로우 및/또는 컬럼과 관련된다. 여기서, 상기 M 유닛은, 실행 레인 자체의 레지스터 공간에서 로드/저장될 수 없는 데이터를 로드/저장하는데 종종 사용된다는 점에서, 표준 M 유닛으로서 동작한다. 다양한 실시예들에서, M 유닛의 주요 동작은 로컬 레지스터로부터의 데이터를 메모리에 기록하고, 메모리로부터 데이터를 판독하고, 그리고 이를 로컬 레지스터에 기록하는 것이다.
다양한 실시예들에서, 하드웨어 실행 레인(601)의 ALU 유닛에 의해 지원되는 ISA 옵코드(opcode)와 관련하여, 하드웨어 ALU에 의해 지원되는 수학적 옵코드는 가상 실행 레인에 의해 지원되는 수학적 옵코드들(예컨대, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT)과 통합되어 연결된다(즉, 실질적으로 동일하다). 위에서 설명한 바와 같이, 메모리 액세스 명령은 실행 레인(601)에 의해 실행되어, 관련 랜덤 액세스 메모리로부터/로 데이터를 페치/저장한다. 또한, 하드웨어 실행 레인(601)은 2 차원 쉬프트 레지스터 구조 내의 데이터를 쉬프트하기 위해 쉬프트 옵 명령(shift op instruction)(우측, 좌측, 위, 아래)을 지원한다. 전술한 바와 같이, 프로그램 제어 명령은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
c. 시트 생성기 동작 및 설계
또한, 도 7 내지 도 12는 시트 생성기의 특별한 고려 사항들 및/또는 동작들에 관련된 것이다. 전술한 바와 같이, 시트 생성기는 대응하는 스텐실 프로세서에 의한 프로세싱를 위한 정보 시트를 생성하는 역할을 한다. 전체 프로세서의 설계에 광범위한 다양성/프로그램가능성을 부여하기 위해, 일부 환경들에서, 시트 생성기는 수신된 라인 그룹으로부터 적절한 섹션들을 파싱하는 것 이외에도, 입력 시트를 준비하는 등의 추가적인 동작을 수행해야할 수도 있다.
예를 들어, 몇몇 경우에 있어서, 프로그램 코드는 동일한 이미지의 다수의 채널들을 동시에 프로세싱할 것을 요구할 수도 있다. 예를 들어 많은 비디오 이미지들은 빨간색(R) 채널, 파란색(B) 채널 및 녹색(G) 채널을 갖는다. 일 실시예에서, 시트 생성기는 관련 메모리 및 메모리 외부에서 실행되는 프로그램 코드를 갖는 프로세서로 구현된다.
도 7에 도시된 바와 같이, 커널이 서로 다른 채널들(컴파일러로부터 힌트될 수 있음)로부터의 데이터를 동시에 프로세싱할 것이라는, 어플리케이션 소프트웨어로부터 검출된 필요성에 응답하여, 시트 생성기에 의해 실행되는 프로그램 코드는 서로 다른 "평면들"을 따라 별도의 시트들을 형성하고(즉, 각 채널로부터 서로 다른 시트를 형성함) 그리고 이들을 함께 데이터 계산 유닛에 로딩할 것이다. 즉, 시트 생성기는 어레이의 동일한 섹션에 대해 R 시트, B 시트 및 G 시트를 생성할 것이며 그리고 3 개의 시트들 모두를 연산 유닛에 로딩할 것이다. 다음으로, 실행 레인 어레이 내의 실행 레인들은 필요에 따라 R, G 및 B 시트 상에서 자유롭게 연산할 수 있다(예컨대, 레지스터 파일의 한 층에 R 시트를 저장하고, 레지스터 파일의 다른 층에 G 시트를 저장하고 그리고 레지스터 파일의 또 다른 층의 B 시트를 저장함으로써).
도 8은 다차원 입력 이미지들에 대한 시트 생성에 관한 도면이다. 여기서, 비록 많은 입력 이미지들이 단순한 어레이 형태를 갖지만, 몇몇 경우에서, 어레이의 각 위치는 다차원 데이터 구조에 대응할 것이다. 예시적인 일례로서, 도 8의 이미지에서 각각의 어레이 위치는 27 개의 상이한 값을 포함하며 이는 3x3x3 큐브의 상이한 세그먼트들에 대응한다. 여기서, 각 어레이 위치가 다차원 데이터 구조를 갖는 경우, 시트 생성기는 각각의 데이터 구성 차원(each data construct dimension)에 대해서 별도의 시트를 생성하도록, 입력 어레이를 "전개(unroll)"할 것이다. 따라서, 도 8에 도시된 바와 같이, 시트 생성기는 27 개의 시트들(각각의 큐브 세그먼트 당 하나씩)를 생성할 것이며, 모든 시트들에 걸쳐서 각 시트의 각 어레이 위치는 스칼라 값(하나의 큐브 세그먼트)을 포함한다. 다음으로, 27 개의 시트들이 스텐실 프로세서에 로딩된다. 실행 레인 어레이 내의 실행 레인에 의해 실행되는 프로그램 코드는, 다차원 입력 어레이가 전개되었던 방식에 대한 이해를 이용하여 27 개의 시트들에 대해 작동한다.
도 9는 실행 레인 어레이 내의 실행 레인들이 상이한 데이터 비트 폭들을 처리하게 하는데 이용되는 기술에 관한 것이다. 여기서, 해당 기술 분야에서 이해되는 바와 같이, 데이터 값들의 비트 폭을 증가시킴으로써, 보다 큰 동적 범위가 달성된다(16 비트 값은 8 비트 값이 표현할 수 있는 것보다 더 큰 동적 범위를 갖는 값들을 표현할 수 있다). 일 실시예에서, 스텐실 프로세서들은 8, 16 또는 32 비트 픽셀 값과 같이 서로 다른 비트 폭들을 갖는 이미지들 상에서 동작할 것으로 예상된다. 이와 같이, 일 접근법에 따르면, 실행 레인들이 내부적으로 32 비트 피연산자들을 처리할 수 있다는 점에서, 실행 레인들 자신들은 32 비트 머신들이다.
하지만, 2 차원 쉬프트 레지스터의 사이즈 및 복잡성을 감소시키기 위해서, 각 실행 레인의 레지스터 파일 내의 레지스터들의 개별 저장 요소들은 8 비트로 제한된다. 8 비트 이미지 데이터의 경우, 전체 데이터 시트가 레지스터 파일의 하나의 레지스터에 들어갈 수 있기 때문에 아무런 문제가 없다. 대조적으로, 16 또는 32 비트 피연산자들의 경우, 시트 생성기는 입력 피연산자 데이터 세트를 적절히 표현하기 위하여 다수의 시트들을 생성한다.
예를 들어, 도 9에 도시된 바와 같이, 16 비트 입력 피연산자의 경우, 시트 생성기는 HI 절반 시트(HI half sheet) 및 LO 절반 시트를 생성할 것이다. HI 절반 시트는 올바른 어레이 위치에서 각각의 데이터 항목의 상위 8 비트를 포함한다. LO 절반 시트는 올바른 어레이 위치에서 각각의 데이터 항목의 하위 8 비트를 포함한다. 다음으로, 2개의 시트들을 스텐실 프로세서에 로딩하고 그리고 16 비트 연산이 실행될 것임을 실행 레인 하드웨어에 통지함으로써(예를 들어, 프로그램 코드의 즉시 값(immediate value)을 통해), 16 비트 연산들이 수행된다. 여기서, 단지 하나의 가능한 동작 모드로서, HI 시트 및 LO 시트 둘다는 각각의 실행 레인 레지스터 파일의 서로 다른 2 개의 레지스터들에 로딩된다.
실행 레인 유닛들은 먼저 레지스터 파일 위치들 중 하나로부터 판독하고 그리고 레지스터 파일 위치들 중 다른 하나로부터 판독된 데이터를 그 데이터에 부가함으로써 정확한 피연산자들을 내부적으로 구성할 수 있다. 이와 유사하게, 쓰기 방향에서, 실행 레인 유닛들은 2 개의 기입들을 수행해야만 할 것이다. 구체적으로는, LO 시트를 포함하는 레지스터 파일의 제 1 레지스터에 하위 8 비트의 제 1 기록을 수행하고, 다음으로 HI 시트를 포함하는 레지스터 파일의 제 2 레지스터에 상위 8 비트의 제 2 기록을 수행한다.
도 12의 논의로부터 알 수 있듯이, 다양한 실시예에서, 단지 하나의 레지스터의 콘텐츠가 사이클 당 쉬프트되는 것이 허용된다. 이와 같이, 2 차원 쉬프트 레지스터 구조를 중심으로 16 비트 데이터 값을 이동시키기 위해서, 8 비트 데이터 값의 경우에서의 1 사이클이 아니라, 쉬프트 시퀀스(수학 연산들 사이) 당 2 사이클들이 소비된다. 즉, 명목상 8 비트 데이터 값들의 경우, 모든 데이터가 단일 사이클에서 위치들 사이에서 쉬프트될 수 있다. 대조적으로, 16 비트 데이터 값들의 경우, 쉬프트 레지스터 쉬프트 동작(HI 절반 시트 및 LO 절반 시트) 마다 2 개의 8 비트 값들이 쉬프트되어야 한다. 일 실시예에서, 32 비트의 경우, 전체 이미지 데이터를 나타내기 위해 2 개의 시트가 아닌 4 개의 시트가 생성된다는 점을 제외하고는 동일한 원리가 적용된다. 마찬가지로, 쉬프트 시퀀스 마다 4 개의 사이클들이 소비되어야 할 필요가 있다.
도 10은 이미지 프로세서가 입력 이미지 데이터를 저밀도 해상도에서 고밀도 해상도로 "업 샘플링"하는 상황에 관한 도면이다. 여기서 스텐실 프로세서는 입력 이미지에 포함된 것보다 이미지의 단위 면적당 더 많은 출력 값들을 생성해야 한다. 시트 생성기는 시트 데이터 값 밀도가 업 샘플링된(더 높은 밀도) 출력 이미지와 대응되도록, 시트에 걸쳐 동일한 데이터 값을 반복함으로써 업 샘플링 문제를 처리한다. 즉, 예를 들어, 도 10에 도시된 바와 같이, 입력 이미지의 농도를 고려해 보았을 때 출력 실행 레인 어레이 밀도가 4:1 업 샘플링에 대응하는 경우(모든 입력 픽셀에 대해 4 개의 출력 픽셀들), 시트 생성기는 모든 입력 값에 대해 4 개의 동일한 값들을 갖는 시트를 제조한다.
도 11은 "다운-샘플링" 이라는 반대 상황에 관한 도면이다. 다운 샘플링의 경우, 시트 생성기는 저밀도 입력 이미지보다 더 많은 시트들을 생성할 것이다. 특히, 입력 이미지가 일 방향(예컨대, X 방향)에서 S 라는 팩터만큼 더 높은 해상도를 가지며 다른 일 방향(예컨대, Y 방향)에서 T 라는 팩터만큼 더 높은 해상도를 가진다면, 시트 생성기는 초기부터 좀더 조밀한 초기 시트인 S*T 시트들을 생성할 것이다. 이렇게 하면 특정 출력 픽셀에 더 많은 입력 픽셀들을 효과적으로 할당할 수 있다.
도 12는 실행 레인 어레이 내의 실행 레인에 의해 수행되는 수학적 연산들이 2 차원 쉬프트 레지스터 구조의 사이즈보다 더 큰 이미지 데이터 표면 영역을 필요로하는 상황에 관한 도면이다. 도 12에 도시된 바와 같이, 프로세싱를 위해 2 차원 쉬프트 레지스터 구조에 로딩될 시트는 입력 프레임의 음영 영역(1201)에 대응한다. 하지만, 음영 영역 내의 어레이 위치들에 대한 출력 값들을 계산하게 될 수학적 연산들은 도 12에 도시된 점선 테두리(1202)에 의해 경계지워지는 프레임 내의 값들을 필요로 한다. 따라서, 2 차원 쉬프트 레지스터 구조의 표면 영역 외부에 연산들에 포함될 매우 큰 "지원 영역"이 존재한다.
이러한 조건들 하에서, 시트 생성기는 음영 영역(1201)에 대응하는 시트를 스텐실 프로세서에 로딩할 뿐만 아니라, 3 개의(음영이 없는) 인접 시트들을 데이터 계산 유닛에 또한 로딩할 것이다. 실행 레인에 의해 실행되는 프로그램 코드는 필요에 따라 시트를 호출하고 랜덤 액세스 메모리로/로부터 이동시키고 및/또는 시트의 일부 또는 전부를 2 차원 쉬프트 레지스터 어레이의 더 깊은 레지스터들에 저장한다.
도 13은 시트 생성기에 대한 하드웨어 설계(1300)의 일 실시예를 제공한다. 도 13에 도시된 바와 같이, 일 실시예에서, 시트 생성기는 도 7 내지 도 12와 관련하여 앞서 설명된 임의의 태스크들과 같은 시트 생성기 태스크들을 수행하기 위해 메모리(1302)에 저장된 프로그램 코드를 실행하는 프로세서/제어기(1301)를 갖는 컴퓨팅 시스템으로서 구현된다. 또한, 시트 생성기는 네트워크와 라인 그룹들을 송수신하고 그리고 시트 생성기의 관련 스텐실 프로세서와 시트들을 송수신하기 위한 I/O 유닛(1303)을 포함한다.
시트 생성기와 관련있는 피처는 그것의 구성 공간(1304)으로서, 구성 공간(1304)은, 시트 생성기 내에서(도 13에 도시된 바와 같이), 프로세서/제어기(1301) 내에서 및/또는 메모리(1302) 내에서 별도의 레지스터 공간으로서 구현될 수 있다. 구성 공간(1304)은 전체 플랫폼의 넓은 적응성 및 프로그램 가능성에 도움이된다. 여기서, 구성 공간(1304)에서 이루어진 세팅들은 프레임 크기, 라인 그룹 크기, 시트 크기, 입력 이미지 픽셀 해상도, 출력 이미지 픽셀 해상도 등과 같은 적절한 이미지 피처들 및 치수들을 포함할 수 있다. 메모리(1302) 내의 프로그램 코드는 구성 공간 내의 정보를 입력 변수로 사용하여 정확한 크기의 시트들 상에서 정확한 연산을 수행한다(기타 등등).
선택적으로는 또는 몇몇 조합에서, 전체 플랫폼의 넓은 적응성 및 프로그램 가능성은 특정 어플리케이션 및/또는 이미지 차원(들)에 대해 메모리(1302)에 커스텀 프로그램 코드를 로딩함으로써 실현될 수 있다. 예를 들어, 컴파일러는 위치 상대 주소 지정 체계(position relative addressing scheme)의 X, Y 좌표 및/또는 프레임 크기 및 라인 그룹 크기를 용이하게 참조하여, 시트 크기, 시트 경계 등을 쉽게 결정할 수 있으며 그리고 일반적인 프로그램 코드 템플릿을 이미지 프로세싱 작업에 특화된 소프트웨어 프로그램으로 커스터마이즈할 수 있다. 이와 유사하게, 상대적인 위치설정(relative positioning)의 이러한 변환 및 실용적인 활용 또는 다른 이미지 치수들은 구성 공간(1304)에 입력될 수 있으며, 구성 공간(1304)에서 시트 생성기 상에 상주하는 프로그램 코드는 시트 경계들, 시트 크기들 기타 등등을 결정할 수 있다.
d. 구현 실시예들
전술한 다양한 이미지 프로세서 아키텍처 피처들은 반드시 종래의 의미에서의 이미지 프로세싱에 제한되지 않으며, 따라서 이미지 프로세서가 재-특성화(re-characterized)될 수 있는(또는 그렇지 않을 수도 있는) 다른 응용 프로그램에도 적용될 수 있다. 예를 들어, 전술한 다양한 이미지 프로세서 아키텍처 피처들 중 임의의 것이 실제 카메라 이미지의 프로세싱과는 대조적으로 애니메이션의 발생 및/또는 생성 및/또는 렌더링에 사용되었다면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특징지워질 수 있다. 또한, 전술한 이미지 프로세서 아키텍처 피처들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 머신 학습과 같은 다른 기술적 응용예들에 적용될 수도 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 보다 범용적인 프로세서(예를 들어, 컴퓨팅 시스템의 CPU 또는 그 일부분)와 함께 통합되거나(예컨대, 코-프로세서로서) 또는 컴퓨터 시스템 내의 독립형 프로세서가 될 수도 있다.
전술한 하드웨어 설계 실시예들은 반도체 칩 내에서 구현될 수 있으며 및/또는 반도체 제조 프로세스를 최종 타겟으로 하는 회로 설계의 디스크립션으로서 구현될 수도 있다. 후자의 경우, 이러한 회로 디스크립션은 기술은 상위 레벨/행동 레벨의 회로 디스크립션(예컨대, VHDL 디스크립션)의 형태를 갖거나 또는 하위 레벨 회로 디스크립션(예컨대, 레지스터 전송 레벨(RTL) 디스크립션, 트랜지스터 레벨 디스크립션 또는 마스크 디스크립션)의 형태를 갖거나 또는 이들의 다양한 조합을 포함할 수 있다. 회로 디스크립션은 일반적으로 컴퓨터 판독가능 저장 매체(CD-ROM 또는 다른 유형의 저장 기술) 상에서 구체화될 수 있다.
이전 섹션들로부터 다음을 유의해야 하는바, 전술한 바와 같은 이미지 프로세서는 컴퓨터 시스템 상의 하드웨어로 구현될 수 있다(예를 들어, 휴대용 디바이스의 카메라로부터의 데이터를 프로세싱하는 휴대용 디바이스의 시스템 온 칩(System On Chip : SOC)의 일부로서). 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 이미지 프로세서에 의해 프로세싱되는 이미지 데이터는 카메라로부터 직접 수신될 수 있음을 유의해야 한다. 여기서, 이미지 프로세서는 별도의 카메라의 일부분이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부분일 수 있다. 후자의 경우에, 이미지 데이터는 카메라로부터 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예컨대, 카메라는 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송한다). 또한, 다음을 유의해야 하는바, 이전 섹션에서 설명된 많은 피처들이 그래픽 프로세서 유닛(애니메이션 렌더링하는)에도 적용될 수 있다.
도 14는 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 구성요소들은 통합된 카메라 및 관련 이미지 프로세서를 갖는 컴퓨팅 시스템에 적용가능하다(예를 들어, 스마트 폰 또는 태블릿 컴퓨터와 같은 휴대용 디바이스). 해당 기술 분야의 당업자는 이 두 가지를 쉽게 구분할 수 있다.
도 14에서 볼 수있는 바와 같이, 기본적인 컴퓨팅 시스템은 중앙 프로세싱 유닛(1401)(이것은 예를 들어, 복수의 범용 프로세싱 코어(1415_1 내지 1415_N) 및 멀티-코어 프로세서 또는 어플리케이션 프로세서 상에 배치된 메인 메모리 컨트롤러(1417)를 포함한다), 시스템 메모리(1402), 디스플레이(1403)(예를 들어, 터치 스크린, 플랫 패널), 로컬 유선 포인트-투-포인트 링크(예컨대, USB) 인터페이스(1404), 다양한 네트워크 I/O 기능(1405)(예컨대, 이더넷 인터페이스 및/또는 셀룰러 모뎀 서브시스템), 무선 로컬 영역 네트워크(예를 들어, WiFi) 인터페이스(1406), 무선 포인트-투-포인트 링크(예를 들어, 블루투스) 인터페이스 (1407), GPS 인터페이스(1408), 다양한 센서들(1409_1 ~ 1409_N), 하나 이상의 카메라(1410), 배터리(1414), 전력 관리 제어 유닛(1412), 스피커와 마이크로폰(1413) 및 오디오 인코더/디코더(1414)를 포함한다.
어플리케이션 프로세서 또는 멀티-코어 프로세서(1450)는 그 CPU(1401) 내에 있는 하나 이상의 범용 프로세서 코어(1415), 하나 이상의 그래픽 프로세싱 유닛(1416), 메모리 관리 기능(1417)(예를 들어, 메모리 제어기), I/O 제어 기능(1418) 및 이미지 프로세싱 유닛(1419)을 포함한다. 범용 프로세싱 코어(1415)는 전형적으로 컴퓨팅 시스템의 운영 시스템 및 어플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛(1416)은 전형적으로 디스플레이(1403) 상에 제공되는 그래픽 정보를 생성하기 위해 그래픽 집중 기능을 실행한다. 메모리 제어 기능(1417)은 시스템 메모리(1402)에 데이터를 기록/판독하기 위해 시스템 메모리(1402)와 인터페이스한다. 전력 관리 제어 유닛(1412)은 일반적으로 시스템(1400)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(1419)은 전술한 섹션들에서 설명한 이미지 프로세싱 유닛 실시예들 중 임의의 것에 따라 구현될 수 있다. 대안적으로 또는 조합하여, IPU(1419)는 GPU(1416) 및 CPU(1401) 중 어느 하나 또는 둘다에 코-프로세서로서 결합될 수 있다. 또한, 다양한 실시예에서, GPU(1416)는 전술한 바와 같은 이미지 프로세서 피처들 중 임의의 것으로 구현될 수 있다.
터치 스크린 디스플레이(1403), 통신 인터페이스들(1404-1407), GPS 인터페이스(1408), 센서들(1409), 카메라(1410) 및 스피커/마이크로폰 코덱(1413, 1414) 각각은 전체 컴퓨팅 시스템에 대한 다양한 I/O 형태들로 도시될 수 있는데, 적절한 경우 통합 주변 디바이스들(예를 들어, 하나 이상의 카메라 1410)도 포함할 수 있다. 구현예에 따라, 이들 I/O 구성요소들 중 다양한 것들은 어플리케이션 프로세서/멀티-코어 프로세서(1450) 상에 통합될 수 있거나 또는 다이 외부 또는 어플리케이션 프로세서/멀티 코어 프로세서(1450)의 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(1410)는 그 시야에서 카메라와 피사체 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 어플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행되는 어플리케이션 소프트웨어, 운영 체제 소프트웨어, 장치 드라이버 소프트웨어 및/또는 펌웨어는 설명된 기능들 중 임의의 기능을 수행 할 수 있다.
본 발명의 실시예는 전술한 바와 같은 다양한 프로세스들을 포함할 수 있다. 프로세스는 머신 실행가능 명령들로 구현될 수 있다. 명령들은 범용 또는 특수 목적 프로세서가 특정 프로세스를 수행하게 하는데 이용될 수 있다. 대안적으로, 이러한 프로세스들은 프로세스를 수행하기 위한 하드 와이어드 로직을 포함하는 특정 하드웨어 컴포넌트에 의해 수행될 수 있으며 또는 프로그래밍된 컴퓨터 컴포넌트 및 커스텀 하드웨어 컴포넌트의 임의의 조합에 의해 수행될 수도 있다.
본 발명의 요소들은 또한 머신 실행가능 명령들을 저장하기 위한 머신 판독가능 매체로서 제공될 수 있다. 머신 판독가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 전자 명령들을 저장하기에 적합한 다른 유형의 매체/머신-판독가능 매체를 포함할 수 있지만, 이에 한정되는 것은 아니다. 예를 들어, 본 발명은 컴퓨터 프로그램으로 다운로드될 수 있으며, 컴퓨터 프로그램은 통신 링크(예컨대, 모뎀 또는 네트워크 연결)를 통한 캐리어 웨이브 또는 다른 전파 매체에서 구현되는 데이터 신호들에 의해서 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송될 수 있다.
전술한 발명의 상세한 설명에서, 본 발명은 특정한 예시적인 실시예를 참조하여 설명되었다. 그러나, 첨부된 청구 범위에 설명된 본 발명의 보다 넓은 사상 및 범위를 벗어나지 않으면서도 다양한 변경들 및 수정들이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다.

Claims (19)

  1. 방법으로서,
    이미지 데이터의 프레임으로부터 다수의 로우들을 포함하는 이미지 데이터의 라인 그룹을 라인 버퍼로부터 시트 생성기에 의해 수신하는 단계;
    상기 시트 생성기에 의해, 실행 레인들의 어레이에 연결된 2차원 쉬프트-레지스터 어레이 내에, 상기 라인 그룹으로부터의 데이터의 서브 세트를 포함하는 입력 시트를 로딩하는 단계, 상기 입력 시트는 상기 라인 버퍼로부터 수신된 라인 그룹보다 더 작으며, 상기 입력 시트는 상기 2차원 쉬프트-레지스터 어레이의 크기에 대응하는 크기를 가지며;
    상기 2차원 쉬프트-레지스터 어레이에 로딩된 입력 시트의 이미지 데이터를 프로세싱하도록, 상기 실행 레인들의 어레이의 각각의 실행 레인에 의해 프로그램 코드를 실행하는 단계, 상기 프로그램 코드를 실행하는 것은 각각의 실행 레인이 상기 2차원 쉬프트-레지스터 어레이에 저장되는 이미지 데이터의 출력 시트의 각각의 출력 값을 상기 입력 시트의 이미지 데이터로부터 생성하게 하며; 그리고
    상기 실행 레인들의 어레이에 의해 계산된 이미지 데이터의 출력 시트를 상기 시트 생성기로 다시 제공하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 시트 생성기에 의해, 상기 이미지 데이터의 출력 시트를 포함하는 출력 라인 그룹을 다운스트림 라인 버퍼에 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 2차원 쉬프트-레지스터 어레이는 복수의 층들을 포함하고, 상기 이미지 데이터는 위치 당 이미지 데이터의 다수의 부분들을 포함하고,
    상기 입력 시트를 상기 2차원 쉬프트-레지스터 어레이에 로딩하는 단계는, 상기 다수의 부분들 중 제 1 부분으로부터의 제 1 데이터를 갖는 제 1 시트를 상기 복수의 층들 중 제 1 층에 로딩하는 것을 포함하고, 그리고
    상기 다수의 부분들 중 제 2 부분으로부터의 제 2 데이터를 갖는 제 2 시트를 상기 복수의 층들 중 제 2 층에 로딩하는 것을 더 포함하는 것을 특징으로 하는 방법.
  4. 제3항에 있어서,
    상기 이미지 데이터의 다수의 부분들은 상기 이미지 데이터의 각각의 위치에서의 다차원 데이터 구조의 컴포넌트들을 포함하는 것을 특징으로 하는 방법.
  5. 제3항에 있어서,
    상기 2차원 쉬프트-레지스터 어레이는 상기 이미지 데이터보다 더 작은 비트 폭을 갖는 레지스터들을 포함하고, 상기 이미지 데이터의 다수의 부분들은 상기 이미지 데이터의 하이 비트들 및 로우 비트들을 포함하는 것을 특징으로 하는 방법.
  6. 제3항에 있어서,
    상기 이미지 데이터의 다수의 부분들은, 상기 이미지 데이터의 각 위치에서의 이미지 데이터의 다수의 채널들을 포함하는 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    상기 입력 시트를 로딩하는 단계는,
    상기 이미지 데이터의 각 데이터 값의 다수의 인스턴스들를 복사함으로써, 업샘플링된 이미지 데이터를 갖는 업샘플링된 입력 시트를 생성하는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제1항에 있어서,
    상기 입력 시트를 로딩하는 단계는,
    각각의 입력 데이터 값의 다수의 인스턴스들을 다운샘플링된 입력 시트의 하나의 값으로 조합함으로써, 다운샘플링된 이미지 데이터를 갖는 다운샘플링된 입력 시트를 생성하는 단계를 포함하는 것을 특징으로 하는 방법.
  9. 제1항에 있어서,
    상기 프로그램 코드를 실행하는 것은, 상기 2차원 쉬프트-레지스터 어레이가 상기 입력 시트를 쉬프트시켜서 각각의 실행 레인이 2차원에서 각각의 스텐실을 가로지르게 하며, 그리고
    상기 각각의 출력값을 생성하는 것은, 상기 입력 시트가 상기 2차원 쉬프트-레지스터 어레이에 의해 쉬프트되는 동안 상기 실행 레인과 조우하는 이미지 데이터로부터 상기 각각의 출력값을 상기 각각의 실행 레인이 생성하는 것을 포함하는 방법.
  10. 장치로서,
    시트 생성기를 포함하고, 상기 시트 생성기는,
    이미지 데이터의 프레임으로부터 다수의 로우들을 포함하는 이미지 데이터의 라인 그룹을 라인 버퍼로부터 수신하고; 그리고
    실행 레인들의 어레이에 연결된 2차원 쉬프트-레지스터 어레이 내에, 상기 라인 그룹으로부터의 데이터의 서브 세트를 포함하는 입력 시트를 로딩하며, 상기 입력 시트는 상기 라인 버퍼로부터 수신된 라인 그룹보다 더 작으며, 상기 입력 시트는 상기 2차원 쉬프트-레지스터 어레이의 크기에 대응하는 크기를 가지며;
    상기 실행 레인들의 어레이의 각각의 실행 레인은, 상기 2차원 쉬프트-레지스터 어레이에 로딩된 입력 시트의 이미지 데이터를 프로세싱하도록 프로그램 코드를 실행하고, 상기 프로그램 코드를 실행하는 것은 각각의 실행 레인이 상기 2차원 쉬프트-레지스터 어레이에 저장되는 이미지 데이터의 출력 시트의 각각의 출력 값을 상기 입력 시트의 이미지 데이터로부터 생성하게 하며, 그리고 상기 실행 레인들의 어레이에 의해 계산된 이미지 데이터의 출력 시트를 상기 시트 생성기로 다시 제공하게 하는 것을 특징으로 하는 장치.
  11. 제10항에 있어서,
    상기 시트 생성기는 또한, 출력 라인 그룹을 다운스트림 라인 버퍼에 제공하는 것을 특징으로 하는 장치.
  12. 제10항에 있어서,
    상기 2차원 쉬프트-레지스터 어레이는 복수의 층들을 포함하고, 상기 이미지 데이터는 위치 당 이미지 데이터(image data per location)의 다수의 부분들을 포함하고,
    상기 입력 시트를 상기 2차원 쉬프트-레지스터 어레이에 로딩하는 것은, 상기 다수의 부분들 중 제 1 부분으로부터의 제 1 데이터를 갖는 제 1 시트를 상기 복수의 층들 중 제 1 층에 로딩하는 것을 포함하고, 그리고
    상기 시트 생성기는 또한, 상기 다수의 부분들 중 제 2 부분으로부터의 제 2 데이터를 갖는 제 2 시트를 상기 복수의 층들 중 제 2 층에 로딩하는 것을 특징으로 하는 장치.
  13. 제12항에 있어서,
    상기 이미지 데이터의 다수의 부분들은 상기 이미지 데이터의 각각의 위치에서의 다차원 데이터 구조의 컴포넌트들을 포함하는 것을 특징으로 하는 장치.
  14. 제12항에 있어서,
    상기 2차원 쉬프트-레지스터 어레이는 상기 이미지 데이터보다 더 작은 비트 폭을 갖는 레지스터들을 포함하고, 상기 이미지 데이터의 다수의 부분들은 상기 이미지 데이터의 하이 비트들 및 로우 비트들을 포함하는 것을 특징으로 하는 장치.
  15. 제12항에 있어서,
    상기 이미지 데이터의 다수의 부분들은, 상기 이미지 데이터의 각 위치에서의 이미지 데이터의 다수의 채널들을 포함하는 것을 특징으로 하는 장치.
  16. 제10항에 있어서,
    상기 입력 시트를 로딩하는 것은,
    상기 이미지 데이터의 각 데이터 값의 다수의 인스턴스들를 복사함으로써, 업샘플링된 이미지 데이터를 갖는 업샘플링된 입력 시트를 생성하는 것을 포함하는 장치.
  17. 제10항에 있어서,
    상기 입력 시트를 로딩하는 것은,
    각각의 입력 데이터 값의 다수의 인스턴스들을 다운샘플링된 입력 시트의 하나의 값으로 조합함으로써, 다운샘플링된 이미지 데이터를 갖는 다운샘플링된 입력 시트를 생성하는 것을 포함하는 장치.
  18. 제10항에 있어서,
    상기 프로그램 코드를 실행하는 것은, 상기 2차원 쉬프트-레지스터 어레이가 상기 입력 시트를 쉬프트시켜서 각각의 실행 레인이 2차원에서 각각의 스텐실을 가로지르게 하며, 그리고
    상기 각각의 출력값을 생성하는 것은, 상기 입력 시트가 상기 2차원 쉬프트-레지스터 어레이에 의해 쉬프트되는 동안 상기 실행 레인과 조우하는 이미지 데이터로부터 상기 각각의 출력값을 상기 각각의 실행 레인이 생성하는 것을 포함하는 장치.
  19. 컴퓨터 프로그램 명령들로 인코딩된 하나 이상의 비일시적인 컴퓨터 저장 매체로서, 상기 컴퓨터 프로그램 명령들은 이미지 프로세서에 의해 실행될 때 상기 이미지 프로세서로 하여금:
    이미지 데이터의 프레임으로부터 다수의 로우들을 포함하는 이미지 데이터의 라인 그룹을 라인 버퍼로부터 시트 생성기에 의해 수신하는 동작;
    상기 시트 생성기에 의해, 상기 이미지 프로세서의 실행 레인들의 어레이에 연결된 2차원 쉬프트-레지스터 어레이 내에, 상기 라인 그룹으로부터의 데이터의 서브 세트를 포함하는 입력 시트를 로딩하는 동작, 상기 입력 시트는 상기 라인 버퍼로부터 수신된 라인 그룹보다 더 작으며, 상기 입력 시트는 상기 2차원 쉬프트-레지스터 어레이의 크기에 대응하는 크기를 가지며;
    상기 2차원 쉬프트-레지스터 어레이에 로딩된 입력 시트의 이미지 데이터를 프로세싱하도록, 상기 실행 레인들의 어레이의 각각의 실행 레인에 의해 프로그램 코드를 실행하는 동작, 상기 프로그램 코드를 실행하는 것은 각각의 실행 레인이 상기 2차원 쉬프트-레지스터 어레이에 저장되는 이미지 데이터의 출력 시트의 각각의 출력 값을 상기 입력 시트의 이미지 데이터로부터 생성하게 하며; 그리고
    상기 실행 레인들의 어레이에 의해 계산된 이미지 데이터의 출력 시트를 상기 시트 생성기로 다시 제공하는 동작
    을 포함하는 동작들을 수행하게 하는 것을 특징으로 하는 하나 이상의 비일시적인 컴퓨터 저장 매체.
KR1020207005068A 2015-04-23 2016-04-04 이미지 프로세서를 위한 시트 생성기 KR102146515B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,806 2015-04-23
US14/694,806 US10291813B2 (en) 2015-04-23 2015-04-23 Sheet generator for image processor
PCT/US2016/025895 WO2016171882A1 (en) 2015-04-23 2016-04-04 Sheet generator for image processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020177028006A Division KR20170125393A (ko) 2015-04-23 2016-04-04 이미지 프로세서를 위한 시트 생성기

Publications (2)

Publication Number Publication Date
KR20200021003A KR20200021003A (ko) 2020-02-26
KR102146515B1 true KR102146515B1 (ko) 2020-08-21

Family

ID=55858888

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020207005068A KR102146515B1 (ko) 2015-04-23 2016-04-04 이미지 프로세서를 위한 시트 생성기
KR1020177028006A KR20170125393A (ko) 2015-04-23 2016-04-04 이미지 프로세서를 위한 시트 생성기

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020177028006A KR20170125393A (ko) 2015-04-23 2016-04-04 이미지 프로세서를 위한 시트 생성기

Country Status (7)

Country Link
US (4) US10291813B2 (ko)
EP (1) EP3286725B1 (ko)
JP (2) JP6563512B2 (ko)
KR (2) KR102146515B1 (ko)
CN (2) CN112967169B (ko)
DE (1) DE112016001835T5 (ko)
WO (1) WO2016171882A1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10291813B2 (en) * 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane 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
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US20180005059A1 (en) * 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
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
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable 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
KR20180012439A (ko) * 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10789202B2 (en) * 2017-05-12 2020-09-29 Google Llc Image processor with configurable number of active cores and supporting internal network
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080133881A1 (en) * 2006-12-01 2008-06-05 Thomson Licensing Llc Array of processing elements with local registers

Family Cites Families (92)

* 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 旭光学工業株式会社 フイルタリング装置
EP0293701B1 (en) 1987-06-01 1994-08-10 Applied Intelligent Systems, Inc. Parallel neighborhood processing system and method
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
US6049859A (en) 1996-01-15 2000-04-11 Siemens Aktiengesellschaft Image-processing processor
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
US6661421B1 (en) 1998-05-21 2003-12-09 Mitsubishi Electric & Electronics Usa, Inc. Methods for operation of semiconductor memory
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 浜松ホトニクス株式会社 高速視覚センサ装置
US7792298B2 (en) 1999-06-30 2010-09-07 Silverbrook Research Pty Ltd Method of using a mobile device to authenticate a printed token and output an image associated with the token
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
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
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
JP2004013873A (ja) 2002-06-03 2004-01-15 Sony Corp 画像処理装置
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
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
KR100614647B1 (ko) * 2004-07-02 2006-08-22 삼성전자주식회사 디블록킹 필터에서의 효과적인 에지 필터링 연산을 위한레지스터 어레이 구조
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
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
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
JP2007304803A (ja) 2006-05-10 2007-11-22 Fuji Xerox Co Ltd 画像処理装置
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
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
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 面発光型半導体レーザの駆動方法および光伝送モジュール
KR101036596B1 (ko) 2007-09-05 2011-05-24 가부시키가이샤 시마쓰세사쿠쇼 고체촬상소자 및 그 구동방법
JP4917561B2 (ja) 2008-03-18 2012-04-18 株式会社リコー 画像処理装置
JP5461533B2 (ja) 2008-05-30 2014-04-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ローカル及びグローバルのデータ共有
US8098894B2 (en) 2008-06-20 2012-01-17 Yahoo! Inc. Mobile imaging device as navigator
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
US20100321579A1 (en) * 2009-02-11 2010-12-23 Mohammad Ahmad Front End Processor with Extendable Data Path
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
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
JP2011165132A (ja) * 2010-02-15 2011-08-25 Seiko Epson Corp 画像処理装置、画像処理回路、及び画像処理方法
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
CN101968851B (zh) * 2010-09-09 2012-08-08 西安电子科技大学 基于字典学习上采样的医学影像处理方法
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8736695B2 (en) * 2010-11-12 2014-05-27 Qualcomm Incorporated Parallel image processing using multiple processors
CN102572207B (zh) * 2010-12-30 2014-05-14 无锡华润矽科微电子有限公司 一种适于jpeg图像的颜色空间转换方法
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
JP5875530B2 (ja) 2011-01-31 2016-03-02 株式会社ソシオネクスト プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
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
US9641866B2 (en) 2011-08-18 2017-05-02 Qualcomm Incorporated Applying partition-based filters
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
CN102685439A (zh) * 2012-05-28 2012-09-19 上海海事大学 一种使用fpga实现图像数据传输控制的装置及方法
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
CN103179408B (zh) * 2012-11-27 2016-01-06 上海高清数字科技产业有限公司 一种解决色度上采样错误的系统和方法
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
US9851977B2 (en) * 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization
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
US9589175B1 (en) * 2014-09-30 2017-03-07 Amazon Technologies, Inc. Analyzing integral images with respect to Haar features
US9818166B2 (en) 2015-01-16 2017-11-14 Intel Corporation Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10291813B2 (en) * 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US10310998B2 (en) * 2015-06-30 2019-06-04 Microsoft Technology Licensing, Llc Direct memory access with filtering

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080133881A1 (en) * 2006-12-01 2008-06-05 Thomson Licensing Llc Array of processing elements with local registers

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Oosterhout. Optimized Pixel Template Image Correlator. Master Thesis, 1992년, pp. 1-72. 1부.*

Also Published As

Publication number Publication date
CN107438861A (zh) 2017-12-05
CN112967169A (zh) 2021-06-15
US10560598B2 (en) 2020-02-11
US10291813B2 (en) 2019-05-14
JP2018513474A (ja) 2018-05-24
DE112016001835T5 (de) 2018-02-15
WO2016171882A1 (en) 2016-10-27
US20190208075A1 (en) 2019-07-04
JP6793228B2 (ja) 2020-12-02
CN107438861B (zh) 2021-02-26
EP3286725A1 (en) 2018-02-28
KR20170125393A (ko) 2017-11-14
US20170257515A1 (en) 2017-09-07
US20160316094A1 (en) 2016-10-27
US11140293B2 (en) 2021-10-05
EP3286725B1 (en) 2021-10-06
US10284744B2 (en) 2019-05-07
JP2019215887A (ja) 2019-12-19
KR20200021003A (ko) 2020-02-26
US20200186667A1 (en) 2020-06-11
JP6563512B2 (ja) 2019-08-21
CN112967169B (zh) 2022-06-03

Similar Documents

Publication Publication Date Title
KR102146515B1 (ko) 이미지 프로세서를 위한 시트 생성기
KR101973733B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
KR102232722B1 (ko) 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
KR101971657B1 (ko) 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처
KR102009906B1 (ko) 고성능의 전력 효율적인 프로그래밍 가능 이미지 처리 하드웨어 플랫폼에 프로그램 코드를 매핑하기 위한 컴파일러 기술들
KR102050899B1 (ko) 이미지 프로세서용 컴파일러 관리 메모리
KR102278021B1 (ko) 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환
KR102235056B1 (ko) 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right