KR102050899B1 - 이미지 프로세서용 컴파일러 관리 메모리 - Google Patents

이미지 프로세서용 컴파일러 관리 메모리 Download PDF

Info

Publication number
KR102050899B1
KR102050899B1 KR1020187022164A KR20187022164A KR102050899B1 KR 102050899 B1 KR102050899 B1 KR 102050899B1 KR 1020187022164 A KR1020187022164 A KR 1020187022164A KR 20187022164 A KR20187022164 A KR 20187022164A KR 102050899 B1 KR102050899 B1 KR 102050899B1
Authority
KR
South Korea
Prior art keywords
sheet
image data
shift register
processor
array
Prior art date
Application number
KR1020187022164A
Other languages
English (en)
Other versions
KR20180100374A (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 KR20180100374A publication Critical patent/KR20180100374A/ko
Application granted granted Critical
Publication of KR102050899B1 publication Critical patent/KR102050899B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N3/00Scanning details of television systems; Combination thereof with generation of supply voltages
    • H04N3/10Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical
    • H04N3/14Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices
    • H04N3/15Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices for picture signal generation
    • H04N3/1575Picture signal readout register, e.g. shift registers, interline shift registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)

Abstract

방법이 설명된다. 이 방법은 이미지 데이터의 다음 시트를 메모리의 제1 위치에서 2차원 시프트 레지스터 어레이로 반복해서 로드하는 단계를 포함한다. 메모리는 2차원 시프트 레지스터 어레이, 및 적어도 하나의 어레이 축을 따라 2차원 시프트 레지스터 어레이보다 더 작은 치수를 갖는 실행 레인 어레이에 로컬 결합된다. 로드된 이미지 데이터의 다음 시트는 2차원 시프트 레지스터 어레이의 이미지 영역 내에 유지된다. 이 방법은 또한, 실행 레인 어레이의 각각의 레인들을 따라 프로그램 코드 명령들의 실행을 통해 이미지 데이터의 다음 시트에 대한 출력 값들을 반복해서 결정하는 단계를 포함하며, 여기서 출력 값들의 결정에 사용되는 스텐실 크기는 2차원 시프트 레지스터 어레이 내에 존재하는 픽셀들만을 포함한다. 이 방법은 또한, 2차원 시프트 레지스터 어레이에 완전히 로드될 이미지 데이터의 다음 시트를 메모리의 제2 위치에서 메모리의 제1 위치로 반복해서 이동시키는 단계를 포함한다.

Description

이미지 프로세서용 컴파일러 관리 메모리
[000.5] 본 출원은 "COMPILER MANAGED MEMORY FOR IMAGE PROCESSOR"라는 명칭으로 2016년 2월 26일자 출원된 미국 가출원 제62/300,671호를 우선권으로 주장하며, 이 가출원은 그 전체가 인용에 의해 포함된다.
[0001] 본 발명의 분야는 일반적으로 이미지 처리에 관한 것으로, 보다 구체적으로는 이미지 프로세서용 컴파일러 관리 메모리에 관한 것이다.
[0002] 이미지 처리는 일반적으로 어레이로 구조화된 픽셀 값들의 처리를 수반한다. 여기서, 공간적으로 구조화된 2차원 어레이는 이미지들의 2차원 성질을 포착한다(추가 차원들은 시간(예컨대, 일련의 2차원 이미지들) 및 데이터 타입(예컨대, 색상들)을 포함할 수 있다). 일반적인 시나리오에서, 배열된 픽셀 값들은 모션의 이미지들을 캡처하기 위해 스틸 이미지 또는 일련의 프레임들을 생성한 카메라에 의해 제공된다. 종래의 이미지 프로세서들은 일반적으로 두 가지 극단적인 상태들 중 어느 한 상태에 처한다.
[0003] 첫 번째 극단적인 상태는 범용 프로세서 또는 범용 유사 프로세서(예컨대, 벡터 명령 강화들을 갖는 범용 프로세서) 상에서 실행되는 소프트웨어 프로그램들로서 이미지 처리 작업들을 수행한다. 첫 번째 극단적인 상태는 일반적으로 고도의 범용성(versatile) 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 연관된 오버헤드(예컨대, 명령 페치(fetch) 및 디코드, 온 칩 및 오프 칩 데이터 처리, 추측 실행)와 결합된 보다 세분화된 데이터 구조들의 그 사용은 궁극적으로 프로그램 코드의 실행 중에 데이터 단위당 더 많은 양의 에너지가 소모되게 한다.
[0004] 두 번째의 반대 극단적인 상태는 고정 기능 하드와이어드 회로를 훨씬 더 큰 데이터 블록들에 적용한다. 커스텀 설계된 회로들에 직접 적용되는 (보다 세분화된 데이터 블록들과는 대조적인) 더 큰 데이터 블록들의 사용은 데이터 단위당 전력 소비를 크게 감소시킨다. 그러나 커스텀 설계된 고정 기능 회로의 사용은 일반적으로 프로세서가 수행할 수 있는 제한된 세트의 작업들을 야기한다. 이에 따라, (첫 번째 극단적인 상태와 연관된) 광범위한 범용성 프로그래밍 환경은 두 번째 극단적인 상태에서는 부족하다.
[0005] 데이터 단위당 개선된 전력 효율과 결합된 고도의 범용성 애플리케이션 소프트웨어 개발 기회들 모두를 제공하는 기술 플랫폼은 바람직하지만 여전히 아쉬운 해결책이다.
[0006] 방법이 설명된다. 이 방법은 이미지 데이터의 다음 시트를 메모리의 제1 위치에서 2차원 시프트 레지스터 어레이로 반복해서 로드하는 단계를 포함한다. 메모리는 2차원 시프트 레지스터 어레이, 및 적어도 하나의 어레이 축을 따라 2차원 시프트 레지스터 어레이보다 더 작은 치수를 갖는 실행 레인(lane) 어레이에 로컬 결합된다. 로드된 이미지 데이터의 다음 시트는 2차원 시프트 레지스터 어레이의 이미지 영역 내에 유지된다. 이 방법은 또한, 실행 레인 어레이의 각각의 레인들을 따라 프로그램 코드 명령들의 실행을 통해 이미지 데이터의 다음 시트에 대한 출력 값들을 반복해서 결정하는 단계를 포함하며, 여기서 출력 값들의 결정에 사용되는 스텐실(stencil) 크기는 2차원 시프트 레지스터 어레이 내에 존재하는 픽셀들만을 포함한다. 이 방법은 또한, 2차원 시프트 레지스터 어레이에 완전히 로드될 이미지 데이터의 다음 시트를 메모리의 제2 위치에서 메모리의 제1 위치로 반복해서 이동시키는 단계를 포함한다.
[0007] 다음의 설명 및 첨부 도면들은 본 발명의 실시예들을 예시하는 데 사용된다. 도면들에서:
[0008] 도 1은 이미지 프로세서 하드웨어 아키텍처의 일 실시예를 도시한다.
[0009] 도 2a, 도 2b, 도 2c, 도 2d 및 도 2e는 라인 그룹으로의 이미지 데이터의 파싱, 시트로의 라인 그룹의 파싱 및 중첩 스텐실들을 갖는 시트 상에서 수행되는 동작을 도시한다.
[0010] 도 3a는 스텐실 프로세서의 일 실시예를 도시한다.
[0011] 도 3b는 스텐실 프로세서의 명령어의 일 실시예를 도시한다.
[0012] 도 4는 스텐실 프로세서 내의 데이터 계산 유닛의 일 실시예를 도시한다.
[0013] 도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 도 5g, 도 5h, 도 5i, 도 5j 및 도 5k는 중첩 스텐실들을 갖는 한 쌍의 이웃하는 출력 픽셀 값들을 결정하기 위한 2차원 시프트 어레이 및 실행 레인 어레이의 사용의 일례를 도시한다.
[0014] 도 6은 통합된 실행 레인 어레이 및 2차원 시프트 어레이에 대한 단위 셀의 일 실시예를 도시한다.
[0015] 도 7a - 도 7c는 이미지 프로세서 데이터 계산 유닛에 대한 컴파일러 관리 메모리 액세스 접근 방식에 관한 것이다.
[0016] 도 8은 이미지 프로세서에 대한 메모리 액세스 방법을 도시한다.
[0017] 도 9a 및 도 9b는 메모리 어드레스를 생성하는 데 사용되는 명령에 관한 것이다.
[0018] 도 10은 다른 컴파일러 관리 메모리 액세스 접근 방식에 관한 것이다.
[0019] 도 11은 컴퓨팅 시스템의 일 실시예를 도시한다.
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
[0020] 도 1은 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(100)의 일 실시예를 도시한다. 이미지 프로세서는 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서용으로 작성된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타깃화될 수 있다. 도 1에서 확인되는 바와 같이, 아키텍처(100)는 네트워크(104)(예컨대, 온 칩 스위치 네트워크, 온 칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온 칩(NOC: network on chip))를 통해 복수의 스텐실 프로세서 유닛들(102_1 내지 102_N) 및 대응하는 시트 생성기 유닛들(103_1 내지 103_N)과 상호 접속되는 복수의 라인 버퍼 유닛들(101_1 내지 101_M)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(104)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 접속될 수 있다.
[0021] 일 실시예에서, 소프트웨어 개발자에 의해 미리 정의된 이미지 처리 동작들을 수행하도록 프로그램 코드가 컴파일되어 대응하는 스텐실 프로세서(102)에 로드된다(프로그램 코드는 또한 예컨대, 설계 및 구현에 따라 스텐실 프로세서의 연관된 시트 생성기(103)에 로드될 수 있다). 적어도 일부 경우들에는, 제1 파이프라인 스테이지에 대한 제1 커널 프로그램을 제1 스텐실 프로세서(102_1)에 로드하는 것, 제2 파이프라인 스테이지에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(102_2)에 로드하는 것 등에 의해 이미지 처리 파이프라인이 실현될 수 있는데, 여기서 제1 커널은 파이프라인의 제1 스테이지의 기능들을 수행하고, 제2 커널은 파이프라인의 제2 스테이지의 기능들을 수행하는 식이고, 추가 제어 흐름 방법들이 설치되어 파이프라인의 한 스테이지로부터의 출력 이미지 데이터를 파이프라인의 다음 스테이지로 전달한다.
[0022] 다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2개 또는 그보다 많은 스텐실 프로세서들(102_1, 102_2)을 갖는 병렬 기계로서 실현될 수 있다. 예를 들어, 각각이 동일한 기능을 수행하는 다수의 스텐실 프로세서들에 걸쳐 프레임들을 확산시킴으로써 이미지 데이터의 고밀도 및 고 데이터 레이트 스트림이 처리될 수 있다.
[0023] 또 다른 구성들에서는, 각각의 스텐실 프로세서들을 이들 각자의 프로그램 코드 커널로 구성하고 적절한 제어 흐름 훅(hook)들을 하드웨어에 구성하여 DAG 설계에서 하나의 커널로부터의 출력 이미지들을 다음 커널의 입력으로 향하게 함으로써 본질적으로 커널들의 임의의 DAG가 하드웨어 프로세서로 로드될 수 있다.
[0024] 일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(105)에 의해 수신되어 프레임 단위로 라인 버퍼 유닛들(101) 중 하나 이상으로 전달된다. 특정 라인 버퍼 유닛은 자신의 이미지 데이터 프레임을 "라인 그룹"으로 지칭되는 더 작은 이미지 데이터 영역으로 파싱한 다음, 라인 그룹을 네트워크(104)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체" 단일 라인 그룹은 예를 들어, 프레임의 다수의 연속적인 완전한 행들 또는 열들의 데이터로 구성될 수 있다(단순화를 위해, 본 명세서는 주로 연속적인 행들을 언급할 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트"로 지칭되는 더 작은 이미지 데이터 영역으로 추가로 파싱하고, 시트를 그 대응하는 스텐실 프로세서에 제공한다.
[0025] 단일 입력을 갖는 DAG 흐름 또는 이미지 처리 파이프라인의 경우, 일반적으로 입력 프레임들은 동일한 라인 버퍼 유닛(101_1)으로 향하게 되는데, 이 라인 버퍼 유닛(101_1)은 이미지 데이터를 라인 그룹들로 파싱하고 라인 그룹들을, 파이프라인/DAG에서 대응하는 스텐실 프로세서(102_1)가 제1 커널의 코드를 실행하고 있는 시트 생성기(103_1)로 향하게 한다. 스텐실 프로세서(102_1)가 처리하는 라인 그룹들에 대한 스텐실 프로세서(102_1)에 의한 동작들의 완료시, 시트 생성기(103_1)는 출력 라인 그룹들을 "다운 스트림" 라인 버퍼 유닛(101_2)에 전송한다(일부 사용 경우들에는, 출력 라인 그룹이 더 이전에 입력 라인 그룹들을 전송했던 동일한 라인 버퍼 유닛(101_1)으로 다시 전송될 수 있다).
[0026] 그 다음, 자신들 각자의 다른 시트 생성기 및 스텐실 프로세서(예컨대, 시트 생성기(103_2) 및 스텐실 프로세서(102_2)) 상에서 실행 중인 파이프라인/DAG의 다음 스테이지/동작을 나타내는 하나 또는 그보다 많은 "소비자" 커널들은 제1 스텐실 프로세서(102_1)에 의해 생성된 이미지 데이터를 다운스트림 라인 버퍼 유닛(101_2)으로부터 수신한다. 이런 식으로, 제1 스텐실 프로세서 상에서 동작하는 "생산자" 커널은 자신의 출력 데이터를 제2 스텐실 프로세서 상에서 동작하는 "소비자" 커널에 포워딩되게 하며, 여기서 소비자 커널은 전체 파이프라인 또는 DAG의 설계와 일치하는 생산자 커널 이후에 다음 세트의 작업들을 수행한다.
[0027] 스텐실 프로세서(102)는 이미지 데이터의 다수의 중첩 스텐실들에 대해 동시에 동작하도록 설계된다. 스텐실 프로세서의 다수의 중첩 스텐실들 및 내부 하드웨어 처리 용량이 시트의 크기를 효과적으로 결정한다. 여기서는, 스텐실 프로세서(102) 내에서, 실행 레인들의 어레이들이 일제히 동작하여 다수의 중첩 스텐실들에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리한다.
[0028] 아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들에서는, 이미지 데이터의 시트들이 스텐실 프로세서(102) 내의 2차원 레지스터 어레이 구조에 로드된다. 시트들 및 2차원 레지스터 어레이 구조의 사용은 예컨대, 단일 로드 동작으로서 많은 양의 데이터를 많은 양의 레지스터 공간으로 이동시키고, 그 직후에 실행 레인 어레이에 의해 데이터에 대해 직접 수행되는 작업들을 처리함으로써 전력 소모 개선을 효과적으로 제공하는 것으로 여겨진다. 추가로, 실행 레인 배열 및 대응하는 레지스터 어레이의 사용은 쉽게 프로그래밍 가능한/구성 가능한 여러 스텐실 크기들을 제공한다.
[0029] 도 2a 내지 도 2e는 라인 버퍼 유닛(101)의 파싱 활동, 시트 생성기 유닛(103)의 보다 세분화된 파싱 활동뿐만 아니라, 시트 생성기 유닛(103)에 결합된 스텐실 프로세서(102)의 스텐실 처리 활동 모두의 실시예들을 고 레벨로 예시한다.
[0030] 도 2a는 이미지 데이터(201)의 입력 프레임의 일 실시예를 도시한다. 도 2a는 또한 스텐실 프로세서가 동작하도록 설계된 (각각 3개의 픽셀들 × 3개의 픽셀들의 치수를 갖는) 3개의 중첩 스텐실들(202)의 아웃라인을 도시한다. 각각의 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 진한 검정색으로 강조된다. 단순화를 위해, 3개의 중첩 스텐실들(202)은 수직 방향으로만 중첩하는 것으로 도시된다. 실제로 스텐실 프로세서는 수직 방향과 수평 방향 모두에서 중첩 스텐실들을 갖도록 설계될 수 있다고 인식하는 것이 적절하다.
[0031] 도 2a에서 확인되는 바와 같이, 스텐실 프로세서 내의 수직 중첩 스텐실들(202) 때문에, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내에는 넓은 범위의 이미지 데이터가 존재한다. 아래에서 보다 상세히 논의되는 바와 같이, 일 실시예에서, 스텐실 프로세서들은 이들의 중첩 스텐실들 내의 데이터를 이미지 데이터 전체에 걸쳐 좌측에서 우측 방식으로 처리한다(그리고 그 다음에, 다음 세트의 라인들에 대해 위에서 아래 순서로 반복한다). 따라서 스텐실 프로세서들이 이들의 동작에 따라 앞으로 진행할 때, 진한 검정색 출력 픽셀 블록들의 수는 오른쪽 방향으로 수평으로 증가할 것이다. 앞서 논의한 바와 같이, 라인 버퍼 유닛(101)은 확장된 수의 다가오는 사이클들 동안 스텐실 프로세서들이 동작하기에 충분한 착신 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 도시는 음영 영역(203)으로서 예시된다. 일 실시예에서, 라인 버퍼 유닛(101)은 시트 생성기로/로부터 라인 그룹을 전송/수신하기 위한 서로 다른 역학 관계를 이해할 수 있다. 예를 들어, "전체 그룹"으로 지칭되는 하나의 모드에 따르면, 이미지 데이터의 완전한 전체 폭의 라인들이 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)"로 지칭되는 두 번째 모드에 따르면, 라인 그룹이 처음에는 전체 폭의 행들의 서브세트로 전달된다. 그 다음, 나머지 행들이 (전체 폭보다 작은) 더 작은 부분들로 순차적으로 전달된다.
[0032] 입력 이미지 데이터의 라인 그룹(203)이 라인 버퍼 유닛에 의해 정의되어 시트 생성기 유닛으로 전달되면, 시트 생성기 유닛은 스텐실 프로세서의 하드웨어 한계들에 보다 정확하게 맞는 보다 미세한 시트들로 라인 그룹을 추가로 파싱한다. 보다 구체적으로는, 아래에서 추가로 더 상세히 설명되는 바와 같이, 일 실시예에서, 각각의 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 본질적으로 이미지 데이터를 실행 레인들의 어레이 "아래로" 시프트하는데, 여기서 시프트 패턴은 각각의 실행 레인이 그 자체의 각각의 스텐실 내의 데이터에 대해 동작하게 한다(즉, 각각의 실행 레인이 그 자체의 스텐실의 정보를 처리하여 해당 스텐실에 대한 출력을 생성한다). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이를 "채우는" 또는 다르게는 2차원 시프트 레지스터 어레이에 로드되는 입력 이미지 데이터의 표면 영역들이다.
[0033] 아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들에서는, 임의의 사이클에서 시프트될 수 있는 2차원 레지스터 데이터의 다수의 층들이 실제로 존재한다. 편의상, 본 설명의 대부분은 시프트될 수 있는 2차원 레지스터 데이터의 하나 또는 그보다 많은 그러한 계층들을 갖는 구조들을 지칭하기 위해 간단히 "2차원 시프트 레지스터" 등의 용어를 사용할 것이다.
[0034] 따라서 도 2b에서 확인되는 바와 같이, 시트 생성기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하고 그것을 스텐실 프로세서에 제공한다(여기서, 데이터의 시트는 일반적으로 참조 번호 204로 식별되는 음영 영역에 대응한다). 도 2c 및 도 2d에서 확인되는 바와 같이, 스텐실 프로세서는 시트 위에서 중첩 스텐실들(202)을 좌측에서 우측으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트에 대해 동작한다. 도 2d에서와 같이, 시트 내의 데이터로부터 출력 값이 계산될 수 있는 픽셀들의 수는 소진된다(다른 픽셀 위치들은 시트 내의 정보로부터 결정된 출력 값을 가질 수 없다). 단순화를 위해, 이미지의 경계 영역들은 무시되었다.
[0035] 도 2e에서 확인되는 바와 같이, 다음에 시트 생성기는 스텐실 프로세서가 동작들을 계속할 다음 시트(205)를 제공한다. 스텐실들이 다음 시트에 대한 동작을 시작할 때 스텐실들의 초기 위치들은 (도 2d에서 이전에 도시된 바와 같이) 첫 번째 시트 상의 소진 지점으로부터 우측으로의 다음 진행이라는 점에 주목한다. 새로운 시트(205)에서는, 스텐실 프로세서가 첫 번째 시트의 처리와 동일한 방식으로 새로운 시트에 대해 동작하므로 스텐실들은 간단히 오른쪽으로 계속 이동할 것이다.
[0036] 출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에 첫 번째 시트(204)의 데이터와 두 번째 시트(205)의 데이터 사이에 약간의 중첩이 있다는 점에 주목한다. 시트 생성기가 중첩 데이터를 두 번 재송신함으로써 중첩이 간단히 처리될 수 있다. 대체 구현들에서는, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 단지 스텐실 프로세서에 새로운 데이터를 전송하는 것으로 진행할 수 있고 스텐실 프로세서는 이전 시트로부터의 중첩 데이터를 재사용한다.
b. 스텐실 프로세서 설계 및 동작
[0037] 도 3a는 스텐실 프로세서 아키텍처(300)의 일 실시예를 도시한다. 도 3a에서 확인되는 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(301), 스칼라 프로세서(302) 및 연관된 메모리(303) 그리고 I/O 유닛(304)을 포함한다. 데이터 계산 유닛(301)은 실행 레인들의 어레이(305), 2차원 시프트 어레이 구조(306) 및 어레이의 특정 행들 또는 열들과 연관된 개별 랜덤 액세스 메모리들(307)을 포함한다.
[0038] I/O 유닛(304)은 시트 생성기로부터 수신된 데이터의 "입력" 시트들을 데이터 계산 유닛(301)에 로드하고 스텐실 프로세서로부터의 데이터의 "출력" 시트들을 시트 생성기에 저장하는 역할을 한다. 일 실시예에서, 시트 데이터를 데이터 계산 유닛(301)에 로드하는 것은 수신된 시트를 이미지 데이터의 행들/열들로 파싱하고 이미지 데이터의 행들/열들을 (아래에서 보다 상세히 설명되는) 실행 레인 어레이의 행들/열들의 각각의 랜덤 액세스 메모리들(307)에 또는 2차원 시프트 레지스터 구조(306)에 로드하는 것을 수반한다. 시트가 메모리들(307)에 처음 로드된다면, 실행 레인 어레이(305) 내의 개개의 실행 레인들은 적절할 때 (예컨대, 시트의 데이터에 대한 동작 직전에 로드 명령으로서) 시트 데이터를 랜덤 액세스 메모리들(307)로부터 2차원 시프트 레지스터 구조(306)로 로드할 수 있다. (직접적으로 시트 생성기로부터든 아니면 메모리들(307)로부터든) 레지스터 구조(306)로의 데이터 시트의 로드의 완료시, 실행 레인 어레이(305)의 실행 레인들이 데이터에 대해 동작하고 결국 완성된 데이터를 시트로서 시트 생성기에 다시 직접 "후기록(write back)"하거나 랜덤 액세스 메모리들(307)에 "후기록"한다. 후자라면, I/O 유닛(304)이 랜덤 액세스 메모리들(307)로부터 데이터를 페치하여 출력 시트를 형성하며, 그 다음에 출력 시트가 시트 생성기로 포워딩된다.
[0039] 스칼라 프로세서(302)는 스텐실 프로세서의 프로그램 코드의 명령들을 스칼라 메모리(303)로부터 판독하고 실행 레인 어레이(305)의 실행 레인들에 명령들을 내리는 프로그램 제어기(309)를 포함한다. 일 실시예에서, 하나의 동일한 명령이 어레이(305) 내의 모든 실행 레인들로 브로드캐스트되어, 데이터 계산 유닛(301)으로부터의 SIMD 유사 동작을 수행한다. 일 실시예에서, 스칼라 메모리(303)로부터 판독되어 실행 레인 어레이(305)의 실행 레인들로 내려진 명령들의 명령 포맷은 명령마다 하나보다 많은 연산 코드(opcode)를 포함하는 매우 긴 명령어(VLIW: very-long-instruction-word) 타입 포맷을 포함한다. 추가 실시예에서, VLIW 포맷은 각각의 실행 레인의 ALU에 의해 수행되는 수학 함수를 지시하는 (아래에서 설명되는 바와 같이, 일 실시예에서는 하나보다 많은 종래의 ALU 연산을 특정할 수 있는) ALU 연산 코드와 (특정 실행 레인 또는 실행 레인들의 세트에 대한 메모리 연산을 지시하는) 메모리 연산 코드 모두를 포함한다.
[0040] "실행 레인"이라는 용어는 명령을 실행할 수 있는 하나 또는 그보다 많은 실행 유닛들의 세트(예컨대, 명령을 실행할 수 있는 논리 회로)를 의미한다. 그러나 실행 레인은 다양한 실시예들에서, 단지 실행 유닛들 이상의 보다 많은 프로세서 유사 기능을 포함할 수 있다. 예를 들어, 하나 또는 그보다 많은 실행 유닛들 외에도, 실행 레인은 수신된 명령을 디코딩하는 논리 회로, 또는 더 많은 MIMD 유사 설계들의 경우, 명령을 페치하여 디코딩하는 논리 회로를 또한 포함할 수 있다. MIMD 유사 접근 방식들과 관련하여, 본 명세서에서는 중앙 집중식 프로그램 제어 접근 방식이 대부분 기술되었지만, 다양한 대안적인 실시예들에서는 (예컨대, 어레이(305)의 각각의 실행 레인 내에 프로그램 코드 및 프로그램 제어기를 포함하는) 보다 분산된 접근 방식이 구현될 수 있다.
[0041] 실행 레인 어레이(305), 프로그램 제어기(309) 및 2차원 시프트 레지스터 구조(306)의 결합은 광범위한 프로그래밍 가능 기능들을 위한 광범위하게 적응 가능한/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 개개의 실행 레인들이 매우 다양한 기능들을 수행할 수 있고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 쉽게 액세스할 수 있다면, 애플리케이션 소프트웨어 개발자들은 광범위한 다양한 기능적 성능뿐만 아니라 치수(예컨대, 스텐실 크기)도 갖는 커널들을 프로그래밍할 수 있다.
[0042] 실행 레인 어레이(305)에 의해 연산되고 있는 이미지 데이터에 대한 데이터 저장소로서 작용하는 것 외에, 랜덤 액세스 메모리들(307)은 또한 하나 또는 그보다 많은 룩업 테이블들을 유지할 수 있다. 다양한 실시예들에서는, 하나 또는 그보다 많은 스칼라 룩업 테이블들이 또한 스칼라 메모리(303) 내에서 인스턴스화될 수 있다.
[0043] 스칼라 룩업은 동일한 인덱스로부터의 동일한 룩업 테이블로부터의 동일한 데이터 값을 실행 레인 어레이(305) 내의 실행 레인들 각각에 전달하는 것을 수반한다. 다양한 실시예들에서, 앞서 설명한 VLIW 명령 포맷은 스칼라 프로세서에 의해 수행된 룩업 동작을 스칼라 룩업 테이블로 향하게 하는 스칼라 연산 코드를 또한 포함하도록 확장된다. 연산 코드에 사용하도록 지정된 인덱스는 즉시 피연산자(immediate operand)일 수 있거나 다른 어떤 데이터 저장 위치로부터 페치될 수 있다. 어떻든지, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩업은 본질적으로, 동일한 클록 사이클 동안 실행 레인 어레이(305) 내의 모든 실행 레인들에 동일한 데이터 값을 브로드캐스트하는 것을 수반한다. 룩업 테이블들의 사용 및 동작에 관한 추가 세부사항들은 아래에서 더 제공된다.
[0044] 도 3b는 앞서 논의한 VLIW 명령어 실시예(들)를 요약한다. 도 3b에서 확인되는 바와 같이, VLIW 명령어 포맷은 3개의 개별 명령들: 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(351); 2) 실행 레인 어레이 내의 각각의 ALU들에 의해 SIMD 방식으로 브로드캐스트되고 실행되는 ALU 명령(352); 및 3) 부분 SIMD 방식으로 브로드캐스트되고 실행되는 메모리 명령(353)(예컨대, 실행 레인 어레이의 동일한 행에 따른 실행 레인들이 동일한 랜덤 액세스 메모리를 공유한다면, 서로 다른 행들 각각으로부터 하나의 실행 레인이 실제로 명령을 실행한다(메모리 명령(353)의 포맷은 각각의 행으로부터 어느 실행 레인이 명령을 실행하는지를 식별하는 피연산자를 포함할 수 있다))에 대한 필드들을 포함한다.
[0045] 하나 또는 그보다 많은 즉시 피연산자들에 대한 필드(354)도 또한 포함된다. 명령들(351, 352, 353) 중 어떤 것이 어떤 즉시 피연산자 정보를 사용하는지는 명령 포맷에서 식별될 수 있다. 명령들(351, 352, 353) 각각은 또한 이들 각자의 입력 피연산자 및 결과 정보(예컨대, ALU 연산들을 위한 로컬 레지스터들 및 메모리 액세스 명령에 대한 로컬 레지스터 및 메모리 어드레스)를 포함한다. 일 실시예에서, 스칼라 명령(351)은 실행 레인 어레이 내의 실행 레인들이 다른 두 명령들(352, 353) 중 어느 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(351)이 실행되는 제1 사이클과, 이어서 다른 명령들(352, 353)이 실행될 수 있는 제2 사이클을 포함한다(다양한 실시예들에서 명령들(352, 353)은 병렬로 실행될 수 있다는 점에 주목한다).
[0046] 일 실시예에서, 스칼라 프로세서에 의해 실행되는 스칼라 명령들은 데이터 계산 유닛의 메모리들 또는 2D 시프트 레지스터로부터/로 시트들을 로드/저장하도록 시트 생성기에 내려진 커맨드들을 포함한다. 여기서, 시트 생성기의 동작은 라인 버퍼 유닛의 동작 또는 스칼라 프로세서에 의해 내려진 임의의 커맨드를 시트 생성기가 완료하게 하는데 필요할 사이클들의 수의 런타임 전 파악을 방해하는 다른 변수들에 의존할 수 있다. 이에 따라, 일 실시예에서, 스칼라 명령(351)이 시트 생성기에 내려질 커맨드에 대응하거나 아니면 시트 생성기에 커맨드가 내려지게 하는 임의의 VLIW 워드는 또한 다른 두 명령 필드(352, 353)에 무연산(NOOP: no-operation) 명령들을 포함한다. 그 다음, 프로그램 코드는 시트 생성기가 데이터 계산 유닛으로의/으로부터의 로드/저장을 완료할 때까지 명령 필드들(352, 353)에 대한 NOOP 명령들의 루프를 입력한다. 여기서, 시트 생성기에 커맨드를 내릴 때, 스칼라 프로세서는 커맨드의 완료시 시트 생성기가 재설정하는 인터록 레지스터의 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터록 비트의 비트를 모니터링한다. 스칼라 프로세서가 시트 생성기가 자신의 커맨드를 완료했음을 탐지하면, 정상 실행이 다시 시작된다.
[0047] 도 4는 데이터 계산 컴포넌트(401)의 일 실시예를 도시한다. 도 4에서 확인되는 바와 같이, 데이터 계산 컴포넌트(401)는 논리적으로 2차원 시프트 레지스터 어레이 구조(406) "위에" 위치되는 실행 레인들의 어레이(405)를 포함한다. 앞서 논의한 바와 같이, 다양한 실시예들에서, 시트 생성기에 의해 제공되는 이미지 데이터의 시트는 2차원 시프트 레지스터(406)에 로드된다. 그 다음, 실행 레인들은 레지스터 구조(406)로부터의 시트 데이터에 대해 동작한다.
[0048] 실행 레인 어레이(405) 및 시프트 레지스터 구조(406)는 서로에 대해 위치가 고정된다. 그러나 시프트 레지스터 어레이(406) 내의 데이터는 전략적이고 조정된 방식으로 시프트되어 실행 레인 어레이의 각각의 실행 레인이 데이터 내의 서로 다른 스텐실을 처리하게 한다. 이에 따라, 각각의 실행 레인은 생성되는 출력 시트 내의 서로 다른 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터, 실행 레인 어레이(405)는 수직으로 인접한 실행 레인들뿐만 아니라 수평으로 인접한 실행 레인들도 포함하기 때문에 중첩 스텐실들은 수직뿐만 아니라 수평으로도 배열된다는 것이 명확해야 한다.
[0049] 데이터 계산 유닛(401)의 일부 주목할 만한 구조적 특징들은 실행 레인 어레이(405)보다 더 넓은 치수들을 갖는 시프트 레지스터 구조(406)를 포함한다. 즉, 실행 레인 어레이(405) 외부에 레지스터들의 "무리(halo)"(409)가 있다. 무리(409)는 실행 레인 어레이의 양측에 존재하는 것으로 도시되어 있지만, 구현에 따라 실행 레인 어레이(405)의 더 적은(1개) 또는 더 많은(3개 또는 4개) 측면들에 무리가 존재할 수 있다. 무리(409)는, 데이터가 실행 레인들(405) "아래에서" 시프트되고 있을 때 실행 레인 어레이(405)의 경계들 외부로 유출되는 데이터를 위한 "유출(spill-over)" 공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(405)의 우측 가장자리를 중심으로 하는 5 × 5 스텐실은 스텐실의 가장 왼쪽 픽셀들이 처리될 때 오른쪽에 4개의 무리 레지스터 위치들을 더 필요로 할 것이다. 도면의 편의상, 도 4는 명목상의 실시예에서, 어느 한쪽(우측, 아래)의 레지스터들이 수평 및 수직 연결들 모두를 가질 때, 무리의 우측의 레지스터들이 수평 시프트 연결들만을 갖는 것으로 그리고 무리의 아래쪽의 레지스터들이 수직 시프트 연결들만을 갖는 것으로 도시한다.
[0050] 어레이의 각각의 행 및/또는 각각의 열 또는 그 일부분들에 결합된 랜덤 액세스 메모리들(407)에 의해 추가 유출 공간이 제공된다(예컨대, 행 방향으로 4개의 실행 레인들 그리고 열 방향으로 2개의 실행 레인에 걸친 실행 레인 어레이의 "영역"에 랜덤 액세스 메모리가 할당될 수 있다. 단순화를 위해, 애플리케이션의 나머지는 주로 행 및/또는 열 기반 할당 방식들을 참조할 것이다). 여기서, 실행 레인의 커널 동작들이 (일부 이미지 처리 루틴들이 필요로 할 수 있는) 2차원 시프트 레지스터 어레이(406) 외부의 픽셀 값들을 처리할 것을 요구한다면, 이미지 데이터의 평면은 예컨대, 무리 영역(409)으로부터 랜덤 액세스 메모리(407)로 추가로 유출될 수 있다. 예를 들어, 하드웨어가 실행 레인 어레이의 우측 가장자리 상에서 실행 레인의 우측에 단지 4개의 저장 엘리먼트들의 무리 영역을 포함하는 6X6 스텐실을 고려한다. 이 경우, 데이터는 스텐실을 완전히 처리하기 위해 무리(409)의 우측 가장자리에서 오른쪽으로 더 시프트될 필요가 있을 것이다. 무리 영역(409) 외부로 시프트된 데이터는 그 다음에 랜덤 액세스 메모리(407)로 유출될 것이다. 도 3의 스텐실 프로세서 및 랜덤 액세스 메모리들(407)의 다른 애플리케이션들이 아래에서 더 제공된다.
[0051] 도 5a 내지 도 5k는 위에서 암시한 바와 같이 이미지 데이터가 실행 레인 어레이 "아래"의 2차원 시프트 레지스터 어레이 내에서 시프트되는 방식의 작동 예를 설명한다. 도 5a에서 확인되는 바와 같이, 2차원 시프트 어레이의 데이터 내용들은 제1 어레이(507)에 도시되고, 실행 레인 어레이는 프레임(505)으로 도시된다. 또한, 실행 레인 어레이 내의 2개의 이웃하는 실행 레인들(510)이 간략하게 도시된다. 이러한 단순한 묘사(510)에서, 각각의 실행 레인은 시프트 레지스터로부터 데이터를 받거나, (예컨대, 사이클들에 걸쳐 누산기로서 작동하는) ALU 출력으로부터 데이터를 받거나, 또는 출력 데이터를 출력 목적지에 기록할 수 있는 레지스터(R1)를 포함한다.
[0052] 각각의 실행 레인은 또한, 로컬 레지스터(R2)에서 2차원 시프트 어레이의 그 "아래"에 있는 내용들을 이용할 수 있다. 따라서 R1은 실행 레인의 물리적 레지스터인 한편, R2는 2차원 시프트 레지스터 어레이의 물리적 레지스터이다. 실행 레인은 R1 및/또는 R2에 의해 제공되는 피연산자들에 대해 연산할 수 있는 ALU를 포함한다. 아래에서 추가로 더 상세히 설명되는 바와 같이, 일 실시예에서, 시프트 레지스터는 실제로 어레이 위치당 다수의("깊이"의) 저장/레지스터 엘리먼트들로 구현되지만, 시프트 활동은 저장 엘리먼트들의 하나의 평면으로 제한된다(예컨대, 저장 엘리먼트들의 단 하나의 평면만이 주기당 시프트할 수 있다). 도 5a 내지 도 5k는 각각의 실행 레인들로부터의 결과적인 X를 저장하는 데 사용되는 것으로 이러한 더 깊은 레지스터 위치들 중 하나를 도시한다. 예시의 편의상, 더 깊은 결과적인 레지스터는 그 상대 레지스터(R2) 아래보다는 그에 나란히 그려진다.
[0053] 도 5a 내지 도 5k는 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치들(511)과 중심 위치가 정렬되는 2개의 스텐실들의 계산에 초점을 맞추고 있다. 예시의 편의상, 한 쌍의 실행 레인들(510)은 실제로 다음의 예에 따라, 이들이 수직 이웃들이 될 때 수평 이웃들로서 그려진다.
[0054] 처음에 도 5a에서 확인되는 바와 같이, 실행 레인들은 이들의 중앙 스텐실 위치들에 집중된다. 도 5b는 두 실행 레인들에 의해 실행되는 목적 코드를 도시한다. 도 5b에서 확인되는 바와 같이, 두 실행 레인들의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터를 한 위치 아래로 시프트되게 하고 한 위치 오른쪽으로 시프트되게 한다. 이는 두 실행 레인들을 이들 각각의 스텐실들의 왼쪽 상단 모서리에 정렬한다. 그런 다음, 프로그램 코드는 이들 각각의 위치들에(R2에) 위치된 데이터를 R1에 로드되게 한다.
[0055] 도 5c에서 확인되는 바와 같이, 프로그램 코드는 다음에, 한 쌍의 실행 레인들이 시프트 레지스터 어레이 내의 데이터를 좌측으로 한 단위 시프트하게 하며, 이는 각각의 실행 레인의 각각의 위치의 우측에 있는 값이 각각의 실행 레인의 위치로 시프트되게 한다. 그 다음, R1 내의 값(이전 값)은 실행 레인의 위치(R2)로 시프트된 새로운 값으로 추가된다. 결과는 R1에 기록된다. 도 5d에서 확인되는 바와 같이, 도 5c에 대해 앞서 설명한 것과 동일한 프로세스가 반복되어, 결과적인 R1이 이제 상위 실행 레인에 A+B+C 값을 포함하고 하위 실행 레인에 F+G+H 값을 포함하게 한다. 이 시점에서 두 실행 레인들 모두가 이들 각각의 스텐실들의 상위 행을 처리했다. (무리 영역이 좌측에 존재한다면) 실행 레인 어레이의 좌측에 있는 무리 영역으로의 또는 실행 레인 어레이의 좌측에 무리 영역이 존재하지 않는다면 랜덤 액세스 메모리로의 유출에 주목한다.
[0056] 도 5e에서 확인되는 바와 같이, 프로그램 코드는 다음에, 시프트 레지스터 어레이 내의 데이터를 한 단위 위로 시프트시키며, 이는 두 실행 레인들 모두가 이들 각각의 스텐실들의 중간 행의 우측 가장자리와 정렬되게 한다. 두 실행 레인들의 레지스터(R1)는 현재 스텐실의 맨 위 행과 중간 행의 가장 오른쪽 값의 합계를 포함한다. 도 5f 및 도 5g는 두 실행 레인의 스텐실들의 중간 행을 가로질러 좌측 방향으로 이동하는 연속적인 진행을 설명한다. 누적 가산이 계속되어 도 5g의 처리의 종료시 두 실행 레인들 모두는 이들 각각의 스텐실들의 맨 위 행과 중간 행의 값들의 합산을 포함한다.
[0057] 도 5h는 각각의 실행 레인을 그에 대응하는 스텐실의 가장 낮은 행과 정렬하기 위한 다른 시프트를 도시한다. 도 5i 및 도 5j는 두 실행 레인들의 스텐실들 동안의 처리를 완료하기 위한 연속적인 시프트를 도시한다. 도 5k는 각각의 실행 레인을 데이터 어레이 내의 그 정확한 위치와 정렬하고 그에 대한 결과를 기록하기 위한 추가 시프트를 도시한다.
[0058] 도 5a - 도 5k의 예에서, 시프트 동작들을 위한 목적 코드는 (X, Y) 좌표들로 표현된 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다는 점에 주목한다. 예를 들어, 한 위치씩 위로 시프트하기 위한 목적 코드는 SHIFT 0, +1인 목적 코드로 표현될 수 있다. 다른 예로서, 한 위치씩 오른쪽으로의 시프트는 SHIFT +1, 0인 목적 코드로 표현될 수 있다. 다양한 실시예들에서, 더 큰 크기의 시프트들이 목적 코드(예컨대, SHIFT 0, + 2)에 또한 지정될 수 있다. 여기서, 2D 시프트 레지스터 하드웨어가 사이클당 한 위치씩의 시프트들만을 지원한다면, 명령은 기계에 의해 다중 사이클 실행을 필요로 하는 것으로 해석될 수 있거나 2D 시프트 레지스터 하드웨어는 사이클당 하나보다 많은 위치씩의 시프트들을 지원하도록 설계될 수 있다. 후자의 실시예들은 아래에서 추가로 더 상세히 설명된다.
[0059] 도 6a는 어레이 실행 레인 및 시프트 레지스터 구조(무리 영역의 레지스터들은 대응하는 실행 레인을 포함하지 않음)에 대한 단위 셀의 보다 상세한 다른 도시를 보여준다. 실행 레인 어레이의 각각의 위치와 연관된 실행 레인 및 레지스터 공간은 일 실시예에서, 실행 레인 어레이의 각각의 노드에서 도 6a에서 확인되는 회로를 인스턴스화함으로써 구현된다. 도 6a에서 확인되는 바와 같이, 단위 셀은 4개의 레지스터들(R2 내지 R5)로 구성된 레지스터 파일(602)에 결합된 실행 레인(601)을 포함한다. 임의의 사이클 동안, 실행 레인(601)은 레지스터들(R1 내지 R5) 중 임의의 레지스터로부터 판독하거나 그에 기록할 수 있다. 2개의 입력 피연산자들을 요구하는 명령들의 경우, 실행 레인은 R1 내지 R5 중 임의의 레지스터로부터 피연산자들 모두를 리트리브할 수 있다.
[0060] 일 실시예에서, 2차원 시프트 레지스터 구조는 단일 사이클 동안, 레지스터들(R2 내지 R4) 중 임의의 (단지) 하나의 레지스터의 내용들이 출력 멀티플렉서(603)를 통해 그 이웃의 레지스터 파일들 중 하나로 시프트 "아웃"되게 허용하고, 레지스터들(R2 내지 R4) 중 임의의 (단지) 하나의 레지스터의 내용들을, 이웃들 간의 시프트들이 동일한 방향이 되도록(예컨대, 모든 실행 레인들이 왼쪽으로 시프트되고, 모든 실행 레인이 오른쪽으로 시프트되는 식으로) 입력 멀티플렉서들(604)을 통해 그 이웃들 중 대응하는 것으로부터 시프트 "인"되는 내용으로 대체시킴으로써 구현된다. 동일한 레지스터가 자신의 내용들을 시프트 아웃시키고 동일 사이클 상에서 시프트 인되는 내용으로 대체시키는 것이 일반적일 수 있지만, 멀티플렉서 배열(603, 604)은 동일한 사이클 동안 동일한 레지스터 파일 내에서 서로 다른 시프트 소스 및 시프트 타깃 레지스터들을 허용한다.
[0061] 도 6a에 도시된 바와 같이, 시프트 시퀀스 동안 실행 레인은 자신의 레지스터 파일(602)로부터 내용을 그 좌측, 우측, 상부 및 하부 이웃들 각각으로 시프트 아웃시킬 것이라는 점에 주목한다. 동일한 시프트 시퀀스와 함께, 실행 레인은 또한 내용을 그 좌측, 우측, 상부 및 하부 이웃들 중 특정 이웃으로부터 그 레지스터 파일로 시프트할 것이다. 다시, 시프트 아웃 타깃 및 시프트 인 소스는 모든 실행 레인들에 대해 동일한 시프트 방향과 일치해야 한다(예컨대, 시프트 아웃이 우측 이웃으로 진행한다면, 시프트 인은 좌측 이웃으로부터 진행해야 한다).
[0062] 일 실시예에서는, 사이클마다 실행 레인당 단 하나의 레지스터의 내용만이 시프트되는 것이 허용되지만, 다른 실시예들은 하나보다 많은 레지스터의 내용이 시프트 인/아웃되도록 허용할 수 있다. 예를 들어, 도 6a에서 확인되는 멀티플렉서 회로(603, 604)의 제2 인스턴스가 도 6a의 설계에 통합된다면, 동일한 사이클 동안 2개의 레지스터들의 내용이 시프트 아웃/인될 수 있다. 물론, 사이클당 단 하나의 레지스터의 내용만이 시프트되도록 허용되는 실시예들에서는, 수학 연산들 사이의 시프트들을 위해 더 많은 클록 사이클들을 소비함으로써 수학 연산들 사이에서 다수의 레지스터들로부터의 시프트들이 일어날 수 있다(예컨대, 수학 연산들 사이에서 2개의 시프트 연산들을 소비함으로써 수학 연산들 사이에서 2개의 레지스터들의 내용들이 시프트될 수 있다).
[0063] 시프트 시퀀스 중에 실행 레인의 레지스터 파일들의 전부보다는 적은 내용이 시프트 아웃된다면, 각각의 실행 레인의 시프트 아웃되지 않은 레지스터들의 내용이 그대로 유지된다(시프트하지 않음)는 점에 주목한다. 이에 따라, 시프트 인 된 내용으로 대체되지 않은 임의의 시프트되지 않은 내용은 시프트 사이클 전반에 걸쳐 실행 레인에 국부적으로 유지된다. 각각의 실행 레인에서 확인되는 메모리 유닛("M")은 실행 레인 어레이 내의 실행 레인의 행 및/또는 열과 연관된 랜덤 액세스 메모리 공간으로부터/으로 데이터를 로드/저장하는 데 사용된다. 여기서, M 유닛은 실행 레인의 자체 레지스터 공간으로부터/으로 로드/저장될 수 없는 데이터를 로드/저장하는 데 자주 사용된다는 점에서 표준 M 유닛의 역할을 한다. 다양한 실시예들에서, M 유닛의 주요 동작은 로컬 레지스터로부터 메모리로 데이터를 기록하고, 메모리로부터 데이터를 판독하여 이를 로컬 레지스터에 기록하는 것이다.
[0064] 다양한 실시예들에서, 하드웨어 실행 레인(601)의 ALU 유닛에 의해 지원되는 ISA 연산 코드들과 관련하여, 하드웨어 ALU에 의해 지원되는 수학 연산 코드들은 가상 실행 레인에 의해 지원되는 수학 연산 코드들(예컨대, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT)과 완전하게 관련된다(예컨대, 실질적으로 동일하다). 위에서 방금 설명한 바와 같이, 메모리 액세스 명령들은 실행 레인(601)에 의해 이들의 연관된 랜덤 액세스 메모리로부터/로 데이터를 페치/저장하도록 실행될 수 있다. 추가로, 하드웨어 실행 레인(601)은 2차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위한 시프트 연산 명령들(우측, 좌측, 위, 아래)을 지원한다. 앞서 설명한 바와 같이, 프로그램 제어 명령들은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
c. 컴파일러 관리 스텐실 프로세서 메모리
[0065] 도 4를 다시 참조하면, 도 4의 특정 실시예에서, 실행 레인 어레이(405)의 우측 및 하부 가장자리들 둘레에 상주하는 레지스터들의 무리 영역(409)의 존재를 상기한다(다른 실시예들은 실행 레인 어레이의 더 많은 또는 더 적은 면들 상에 무리 레지스터들을 포함할 수 있다). 이전 논의들에서, "시트"는 실행 레인 어레이(405)의 치수들을 갖는 내부 시프트 레지스터 공간을 소비한 이미지 정보의 어레이인 것으로 이해되었다. 여기서, 다양한 실시예들에서, 무리(409) 내에서의 레지스터 위치들은 이미지 데이터에 대한 이미지 처리 명령들을 실행하기 위한 연관된 ALU 유닛들을 포함하지 않는데 ― 그보다는 ― 무리 영역(409)은 예컨대, 실행 레인 어레이 영역 내에서의 시프트 활동으로부터의 “유출” 데이터를 누산하기 위해 존재한다. 이에 따라, 처리될 수 있는 이미지 데이터의 영역은 영역(405)에 대응하고 "시트"는 영역(405)과 동일 공간에 존재하는 것으로 이해된다. 시트를 레지스터 어레이(406)에 로드하는 것은 이미지 데이터를 영역(405)에 로드하는 것을 포함한다.
[0066] 컴파일러는 본질적으로 시트 생성기로부터 스텐실 프로세서의 데이터 계산 유닛(401)의 내부 RAM(407)으로의/스텐실 프로세서의 데이터 계산 유닛(401)의 내부 RAM(407)으로부터 시트 생성기로의 정보의 시트들의 로드를 제어하는 프로그램 코드에 명령들을 삽입하는 역할을 한다. 이에 따라, 다양한 실시예들에서, 컴파일러는 어느 시트들이 시트 생성기로부터 RAM(407)으로 로드될지 및 그러한 시트들이 언제 로드될지를 결정하는 역할을 한다. 추가로, 컴파일러는 스텐실 프로세서 RAM(407) 내의 어느 시트가 2차원 시프트 어레이(406)에 로드될지를 결정하는 역할을 한다. RAM(407)은, 각각의 뱅크에 시프트 레지스터 어레이에 대한 이미지의 특정 영역이 할당되는 개개의 뱅크들로(예컨대, RAM 뱅크(407_1)는 시프트 레지스터 어레이의 제1 행에 대한 이미지 데이터를 보유하고, RAM 뱅크(407_2)는 시프트 레지스터 어레이의 제2 행에 대한 이미지 데이터를 유지하는 식으로) 분해될 수 있다는 점에 주목한다.
[0067] 여기서, 시트 생성기로부터 RAM(407)으로의 동일한 데이터 시트들의 "재-로드" 및/또는 RAM(407)으로부터 2차원 시프트 레지스터(406)로의 동일한 데이터 시트들의 재로드는 예컨대, 이미지 프로세서의 전력 소비를 최소화하도록, 가능한 경우에는 회피되어야 한다. 바로 아래에서 보다 상세히 설명되는 바와 같이, 이미지 데이터의 기본 단위가 실행 레인 어레이(405)의 더 작은 영역에 대응하는 데이터 시트들인 것으로 이해되더라도, 컴파일러가 무리 영역(409)의 존재를 인식한다면 비효율성들이 회피될 수 있다. 회피된 비효율성들은 특히, 이미지 처리 알고리즘이 실행 레인 어레이(405) 내의 임의의 출력 픽셀들에 대한 무리 밖으로 연장하는 데이터를 처리하는 경우에 두드러진다.
[0068] 도 7a - 도 7d는 기본 예를 도시한다. 도 7a에서 확인되는 바와 같이, 입력 이미지 데이터의 시트는 더 큰 입력 이미지의 영역(701)에 대응한다. 도 7a - 도 7d는 간략하게 하기 위해, 입력 시트가 실행 레인 어레이와 동일한 치수들을 갖는다고 가정한다. 그러한 배열이 종종 편리할 수 있지만, 이것이 필수적인 것은 아니다. 예를 들어, 입력 표면의 해상도가 (예컨대, 업샘플링 또는 다운샘플링으로부터의) 출력 표면과 다른 경우들에, 시트들은 실행 레인 어레이와는 다른 치수들을 가질 수 있다. 예컨대, 실행 레인 어레이가 16x16인 프로세서에서, 2x 다운샘플링된 입력 시트들은 치수가 32x32일 수 있는 한편, 2x 업샘플링된 입력 시트들은 치수가 8x8일 수 있다.
[0069] 입력 이미지가 시트(701)뿐만 아니라 무리 영역에 맞을 수 있는 주변 이미지 데이터를 또한 포함하는 것으로 이해된다면, 입력 이미지 데이터의 총량은 음영 영역(720)을 소비할 것이다. 시트(701) 내의 픽셀들에 대한 출력 픽셀 값들의 결정시, 무리 영역 외부의, 이를테면 보다 큰 영역(730)에 걸친 입력 이미지 데이터를 처리하기 위해 적어도 일부 알고리즘들이 설계될 수 있다.
[0070] 예컨대, 실행 레인 어레이(405)의 치수들이 16개의 픽셀 위치들 x 16개의 픽셀 위치들이고 무리 영역의 크기가 X 축을 따라 추가 4개의 픽셀 위치들 그리고 Y 축을 따라 4개의 픽셀 위치들이라면, 시트(701)는 16개의 픽셀 위치들 x 16개의 픽셀 위치들의 치수를 가질 것이고, 영역(720)은 20개의 픽셀 위치들 x 20개의 픽셀 위치들의 치수를 가질 것이다. 시트(701) 내의 픽셀들에 대한 출력 픽셀 값들을 결정하는 알고리즘이 18개의 픽셀들 × 18개의 픽셀들의 치수의 스텐실들에 대해 처리한다면, 시트(701)에 대해 처리될 필요가 있을 표면 영역은 경계(730) 내의 영역을 포함하도록 영역(720)으로부터 바깥쪽으로 연장할 것이다. 여기서, 예컨대, 시트(701)의 오른쪽 하단 모서리의 픽셀 위치에 대한 처리를 수용하기 위해, 경계(730)에 의해 한정된 영역의 오른쪽 하단 모서리의 픽셀이 필요할 것이다. 따라서 시트(701)의 처리는 시트들(702, 703, 704)로부터 상당한 양들의 데이터를 필요로 한다.
[0071] 일 실시예에서, 컴파일러는 입력 이미지 내의 다수의 시트들의 레이아웃, 실행 레인 어레이의 치수들, 무리의 치수들, 및 실행 레인 어레이 영역 내의 특정 출력 픽셀에 대해 처리될 스텐실의 크기를 파악하도록 설계된다. 그 다음, 컴파일러는 시트 생성기로부터 데이터 계산 유닛 RAM(407)으로 다음 정보 시트를 로드하는 코드 내의 적절한 위치들에 메모리 로드 명령을 삽입하는 것으로 진행한다.
[0072] 추가로, 아래에서 보다 상세히 추가 설명되는 바와 같이, 컴파일러는 또한, 데이터 시트들의 재사용을 향상시키고 이로써 시트 생성기로부터 랜덤 액세스 메모리(407)로의 동일한 데이터 시트들의 중복 로드를 감소시키도록 데이터 계산 유닛의 랜덤 액세스 메모리(407) 내에서 데이터 시트들을 이동시키기 위한 데이터 이동 명령들을 삽입한다.
[0073] 도 7b는 시트 생성기가 랜덤 액세스 메모리(407)에 충분한 수의 시트들을 초기에 로드하여 제1 시트 위치(701)의 픽셀 위치들 각각에 대한 알고리즘을 완전히 수행하게 하도록 컴파일러에 의해 구성된 명령들(740)의 시퀀스를 도시한다. 도 7b에서 확인되는 바와 같이, 4개의 시트들(701 내지 704)로부터의 데이터가 로드되며 이들에 논리적 시트 식별자들(Lsheet_0, Lsheet_1, LSheet_2, LSheet_3)이 할당된다. 여기서, 로드되는 시트들의 수는, 무리 영역(409)을 포함하는 전체 시프트 레지스터 어레이(406)가 고려된다면 이미지 처리 알고리즘이 도달하는 시트들의 수에 대응한다. 다양한 실시예들에서, 스칼라 프로세서(302)와 연관된 프로그램 제어기(309)는 데이터 계산 유닛(301)으로/으로부터 데이터 시트들을 로드/저장하도록 시트 생성기에 대한 커맨드들에 대응하는 명령들을 실행한다는 점을 도 3a 및 도 3b의 논의로부터 상기한다. 이에 따라, 명령들(740)은 스칼라 프로세서(302)에 의해 실행될 수 있다.
[0074] 컴파일러는 또한, RAM(MEM LOAD)에 방금 로드된 4개의 시트들로부터의 내용을 시프트 레지스터 어레이(406)에 로드하도록 후속 명령들(750, 760)을 구성한다. 명령(750)은 실행 레인 어레이(405)와 동일 공간에 존재하는 시프트 레지스터 영역을 LSheet_0의 내용(이미지 영역(701)의 내용)으로 채운다. 마찬가지로, 상기 논의들과 일치하게, 스칼라 프로세서(302)는 명령들(750, 760)을 또한 실행할 수 있다.
[0075] 명령(760)은 무리 영역을 채운다. 즉, 명령(760)은 다음을 수행한다: 1) 시트(702)(Lsheet_1)의 좌측 면(LHS: left hand side)을 실행 레인 어레이(405)의 우측 가장자리 바로 밖에 존재하는 무리(409)의 영역으로 로드하고; 2) 시트(704)(Lsheet_3)의 상부 영역(UPR: upper region)을 실행 레인 어레이(405)의 하부 가장자리 바로 아래에 존재하는 무리(409)의 영역으로 로드하고; 3) 시트 705(Lsheet_4)의 왼쪽 상단 모서리를 실행 레인 어레이(405)의 오른쪽 하단 모서리로부터 무리의 영역으로 로드한다. 이러한 로드들이 수행된 후, 무리 영역(도 7a의 영역(720))을 포함하는 전체 시프트 레지스터 어레이의 내용이 적절하게 위치된 입력 이미지 데이터로 로드된다.
[0076] 여기서, 도 4를 참조하면, 각각의 실행 레인 어레이 위치는 랜덤 액세스 메모리(407)로부터 이미지 데이터를 페치하기 위해 메모리 로드 명령(MEM LOAD)을 실행하기 위한 메모리 액세스 유닛(M)을 포함한다는 점에 주목한다. 도 4에 도시되지 않았지만, 다양한 실시예들에서, 무리 영역(409) 내의 위치들 각각은 또한 메모리 액세스 유닛을 포함하여, 이미지 데이터 값들이 랜덤 액세스 메모리(407)로부터 무리 영역(409)으로 로드될 수 있다. 그러나 또한, 다양한 실시예들에서, 무리 영역 위치들은 ALU 유닛을 포함하지 않아, 실제 이미지 처리가 실행 레인 어레이(405) 내의 이미지 데이터로 계속 제한된다. 따라서 명령(750)은 각각의 실행 레인 어레이 위치에서 개별적으로 실행되지만 어레이 내에서의 그 위치에 기초하여 (로드될 이미지 데이터를 정의하는) 서로 다른 입력 피연산자 데이터를 갖는 메모리 로드 명령에 대응하는 한편, 마찬가지로 MEM LOAD 명령(760)은 무리 영역(409) 내의 특정 위치들에서 개별적으로 실행되지만 실행 레인 어레이 주위에서의 그 위치에 기초하여 (로드될 이미지 데이터를 정의하는) 서로 다른 입력 피연산자 데이터를 갖는 메모리 로드 명령에 대응한다. 이러한 명령들에 대한 어드레스를 지정하기 위한 기술들은 아래에서 추가로 더 상세히 설명된다.
[0077] 컴파일러는 또한 LSheet_0 위치 내의 픽셀 위치들에 대한 출력 픽셀 값들을 결정하는 이미지 처리 알고리즘(들)을 수행하도록 다음의 명령들(770)의 세트를 구성한다. 상기 논의들과 일치하게, 계산들은 2차원 시프트 레지스터 어레이 내의 내용을 시프트함으로써 이루어지는 각각의 픽셀 위치에 대한 스텐실 영역에 대해 연산하는 것을 포함한다. 따라서 컴파일러는 스텐실에 대한 수학적 계산들뿐만 아니라 대응하는 레지스터 시프트 명령들도 수행하기 위한 명령들을 구성한다.
[0078] 현재 논의되고 있는 예에서, LSheet_0 내의 임의의 픽셀 위치에 대해 처리될 스텐실은 치수가 18 × 18이라는 점을 상기한다. 이에 따라, 실행 레인 어레이(405)의 상부 면과 좌측 면으로부터 랜덤 액세스 메모리(407)로의 이미지 데이터의 "유출"이 있을 것이다. 즉, 좌측으로의 데이터 시프트들은 경계(720)에 의해 한정된 영역 내의, 그러나 경계(701)에 의해 한정된 영역 밖의 시트(702)(LSheet_1) 및 시트(703)(LSheet_2)로부터의 데이터가 무리 영역(409)의 우측 가장자리로 로드되게 할 것이다. 무리 영역(409)의 우측 가장자리로의 데이터 로드는 실행 레인 어레이의 좌측 가장자리 및 실행 레인 어레이(405) 바로 아래에 존재하는 무리 영역(409)의 좌측 가장자리로부터 시프트 레지스터 밖으로 "유출" 데이터를 효과적으로 푸시할 것이다. 유출된/밖으로 푸시된 데이터는 랜덤 액세스 메모리(407)에 기록된다.
[0079] 마찬가지로, "상부"로의 데이터 시프트들은 경계(720)에 의해 한정된 영역 내의, 그러나 실행 레인 영역 밖의 시트(704)(LSheet_3) 및 시트(703)(LSheet_2)로부터의 데이터가 무리 영역(409)의 하부 가장자리로 로드되게 할 것이다. 무리 영역(409)의 하부 가장자리로의 데이터 로드는 실행 레인 어레이(405)의 상부 가장자리 및 실행 레인 어레이(405)의 우측에 존재하는 무리 영역의 상부 가장자리로부터 시프트 레지스터 밖으로 "유출" 데이터를 효과적으로 푸시할 것이다. 유출된/밖으로 푸시된 데이터는 또한 랜덤 액세스 메모리(407)에 기록된다. 또한, 시프트를 실행하기 위해, 컴파일러는 RAM(407)으로부터 시프트 레지스터로의 새로운 데이터 로드 및 시프트 레지스터로부터 밖으로 푸시된 데이터의 다시 RAM(407)으로의 기록 모두를 위한 코드를 구성한다.
[0080] 시트(701)(LSheet_0)에 대해 모든 시프트 및 계산들(770)이 수행된 후에, 프로세스는 래스터형 방식으로 우측으로 계속 스캔할 것이다(영역(701)에 대한 출력 시트는 또한 시트 생성기로 포워딩하기 위해 랜덤 액세스 메모리(407)에 기록될 수 있다). 알고리즘의 래스터형 스캔을 수행하기 위해, 논리적 시트들의 재할당만이 필요하며, 그 후에 동일한 프로그램 코드가 재실행되어 다음 시트의 픽셀들에 대한 출력 값들을 처리할 수 있다. 이에 따라, 이미지에 대해 스캔과 같은 방식으로 알고리즘을 실행하는 것은 컴파일러에 의해 소프트웨어 루프로서 구성될 수 있다. 여기서, 루프 프로그램 내의 내부 포인터들은 루프의 새로운 반복마다 업데이트될 수 있다. 구체적으로, 코어 루틴이 인스턴트 재귀를 위해 로드될 데이터의 맨 "우측"에 도달했음을 인식하면, 이는 마찬가지로 다음 재귀가 임박한 것으로 인식한다.
[0081] 여기서, 도 7c에서 확인되는 바와 같이, 컴파일러는 기계가 래스터 스캔에서 다음 시트에 대해 알고리즘을 처리하도록 준비하는 추가 명령들(780)의 세트를 구성한다. 명령들은 LSheet_1의 내용들을 LSheet_0으로 이동(MOV)시키고 LSheet_2의 내용들을 LSheet_3으로 이동시키는 것을 포함한다. 추가로, 명령들(780)은 다음 Lsheet_1(시트(705)) 및 다음 LSheet_2(시트(706))를 시트 생성기로부터 RAM(407)으로 로드하기 위한 명령들을 포함한다. 이러한 명령들(780)이 실행된 후에, 기계의 콘텍스트는 처리될 시트의 위치가 우측으로 1 시트(즉, 시트(701) 대신 시트(702))라는 점을 제외하면, 명령들(770)의 실행 이전의 도 7b의 기계의 콘텍스트와 다르지 않다. 중요하게는, RAM(407)에 이미 로드된 시트들(즉, 시트들(702, 703))은 시트 생성기로부터 RAM(407)으로 다시 로드되지 않는다. 이에 따라, 시트들(702, 703)이 RAM(407)에 다시 로드된다면 초래될 어떠한 비효율성도 회피된다.
[0082] 명령들(780) 내의 SG 명령들로 표시된 바와 같이 시트 생성기로부터 RAM(407)으로의 LSheet_1(시트(705)) 및 LSheet_2(시트(706))의 로드가 예컨대, 연산들(770) 동안 수행될 수 있고, 이어서 이러한 시트들의 이전 내용이 Lsheet_0 및 LSheet_3으로 각각 이동된 후에 RAM 내에서 Sheet_1 위치 및 Sheet_2 위치로 이동될 수 있다는 점에 주목한다. 이에 따라, 명령들(780)의 SG LOAD 명령들은 실제로 RAM(407) 내에 추가 MOV 명령들로서 구현될 수 있다. 일 실시예에서, 명령들(780)의 이동(MOV) 명령들은 RAM(407) 내의 데이터의 실제 물리적 이동들이다. 이에 따라, 프로그램 코드 내에서 지정된 LSheet_0 내지 LSheet_3에 대한 어드레스들은 고정된 어드레스들이다.
[0083] 도 7a 내지 도 7c와 관련하여 위에서 개요가 서술된 방법은 시트(701) 내의 픽셀들에 대해 처리될 스텐실 크기가 무리 영역 외부에 존재하는 픽셀들을 포함하기에 충분히 큰 일례에 관한 것이었지만, 처리될 모든 픽셀들이 무리 영역 내에 존재하도록 시트(701) 내의(즉, 실행 레인 어레이 내의) 픽셀들에 대해 처리될 스텐실 크기가 충분히 작은(즉, 경계(720) 외부의 그리고 및 경계(730) 내의 또는 그 이상의 픽셀들이 요구되지 않는) 애플리케이션들에 대해 이 방법이 최적인 것으로 여겨진다. 이 경우, (예컨대, 무리 영역의 우측 가장자리를 따라) 2차원 시프트 레지스터로의 추가 이미지 데이터의 로드가 회피된다.
[0084] 도 8은 앞서 설명한 방법을 도시한다. 이 방법은 다음을 반복해서 수행하는 단계(801)를 포함한다. 이미지 데이터의 다음 시트를 메모리의 제1 위치에서 2차원 시프트 레지스터 어레이로 로드하는 단계(802). 메모리는 2차원 시프트 레지스터 어레이, 및 적어도 하나의 어레이 축을 따라 2차원 시프트 레지스터 어레이보다 더 작은 치수를 갖는 실행 레인 어레이에 로컬 결합된다. 로드된 이미지 데이터의 다음 시트는 2차원 시프트 레지스터 어레이의 이미지 영역 내에 유지된다. 실행 레인 어레이의 각각의 레인들을 따라 프로그램 코드 명령들의 실행을 통해 이미지 데이터의 다음 시트에 대한 출력 값들을 결정하는 단계, 여기서 출력 값들의 결정에 사용되는 스텐실 크기는 2차원 시프트 레지스터 어레이 내에 존재하는 픽셀들만을 포함한다(803). 2차원 시프트 레지스터 어레이에 완전히 로드될 이미지 데이터의 다음 시트를 메모리의 제2 위치에서 메모리의 제1 위치로 이동시키는 단계(804).
[0085] 이전 논의로부터, 명령들(750, 760, 770)의 실행 동안 이미지 데이터가 RAM(407)으로부터 2차원 시프트 레지스터(406)로 로드될 수 있음을 상기한다. 여기서, (무리 영역이 포함된) 2차원 시프트 레지스터(406)의 각각의 개별 위치는 데이터가 RAM(407)으로부터 그 로컬 레지스터 공간으로 개별적으로 로드될 수 있도록 메모리 로드 명령을 로컬로 실행하기 위한 메모리 액세스 유닛을 포함하는 것으로 가정된다. 일 실시예에서, 컴파일러는 RAM(407)에서 LSheet_0에 대한 기본 어드레스 컴포넌트를 고정하고, 루프를 수행하기 위해 컴파일러에 의해 인식된 추가 논리적 시트들(예컨대, LSheet_1, LSheet_2 및 LSheet_3)에 대한 어드레스들은 기본 어드레스 컴포넌트에 대한 오프셋들을 갖는다. 예를 들어, LSheet_0에 대한 RAM(407)의 어드레스가 [base]라면, LSheet_1에 대한 어드레스는 [base]+1이고, LSheet_2에 대한 어드레스는 [base]+2이고, LSheet_3에 대한 어드레스는 [base]+3이다.
[0086] 폭넓게 프로그래밍 가능한 환경을 지원하기 위해, 실행 레인 어레이에서의 그리고 무리 영역에서의 실행 유닛들의 명령 세트 아키텍처는 특정 시프트 레지스터 어레이 위치에 대한 정확한 오프셋을 생성하는 명령을 지원한다. 그 다음, 오프셋은 이후에 예컨대, 정확한 어드레스를 생성하는 데 사용될 수 있다. 여기서, 도 7a 내지 도 7c의 예는 시트 치수가 실행 레인 어레이 치수와 동일했다는 점에서 단순화했다는 것을 주목하는 것이 적절하다. 즉, 시트들과 실행 레인 어레이 모두가 16개의 픽셀 위치들 x 16개의 픽셀 위치들의 치수를 가졌다.
[0087] 다른 실시예들은 예컨대, 어느 한 또는 두 치수들을 따라 실행 레인 어레이보다 더 크거나 더 작은 시트 크기를 갖도록 선택할 수 있다. 전자의 경우, 예컨대 LSheet_0은 무리 영역으로 확장할 것이지만, 후자의 경우, 예컨대 LSheet_1 및/또는 LSheet_3은 초기에 실행 레인 어레이(405)의 치수들 내에 로드될 것이다. 단순화를 위해, 도 9a 및 도 9b의 논의는 시트 치수들이 실행 레인 어레이의 치수들과 동일한 단순한 경우에 관련될 것이다. 그러나 보다 명확하게 이루어질 명령의 일반적인 연산은 치수들이 서로 다른 실시예들에 사용될 수 있다.
[0088] 도 9a는 본질적으로 도 7a의 도시의 확대를 도시하며, 여기서는 무리 영역을 포함하는 2차원 시프트 레지스터 어레이의 전체 크기가 음영 영역으로서 확인된다. 도 9b는 각각의 어레이 위치에서 실행되는 특수 명령(QUADRANT)의 결과를 보여준다. 여기서, 각각의 시프트 레지스터 어레이 위치에 대해, QUADRANT 명령은 RAM(407)으로부터의 내용을 특정 시프트 어레이 위치로 로드할 때 기본 메모리 어드레스에 추가될 정확한 오프셋을 계산한다.
[0089] 도 9b의 특정 예에서, 시트 치수들이 실행 레인 어레이 치수들과 동일한 경우, 실행 레인 어레이 영역과 연관된 모든 어레이 위치들은 0의 오프셋을 갖는 LSheet_0을 로드할 것이다. 대조적으로, 실행 레인 어레이의 바로 오른쪽에 있는 무리 영역의 어레이 위치들은 +1의 오프셋을 갖는 LSheet_1로부터 로드될 것이고, 실행 레인 어레이 바로 아래의 무리 영역의 어레이 위치들은 +3의 오프셋을 갖는 LSheet_3으로부터 로드될 것이고, 실행 레인 어레이의 모서리에서 벗어난 무리 영역의 어레이 위치들은 +2의 오프셋을 갖는 LSheet_2로부터 로드될 것이다.
[0090] 일 실시예에서, 명령은 시트의 X 치수 및 Y 치수(Xs, Ys) 그리고 어레이 위치의 포지션을 특정하는 X 좌표 및 Y 좌표(Xa, Ya) 모두를 입력 파라미터들로서 받아들인다. 이러한 값들로, QUADRANT 명령은 오프셋을 다음과 같이 계산할 수 있다:
[0091] Offset =
0 if (Xa < Xs) AND (Ya < Ys) = TRUE
1 if (Xa > Xs) AND (Ya < Ys) = TRUE
2 if (Xa > Xs) AND (Ya > Ys) = TRUE
3 if (Xa < Xs) AND (Ya > Ys) = TRUE
[0092] 다양한 실시예들에서, 컴파일러는 좌표 쌍을 판독할 어레이 위치를 본질적으로 식별하는 Xa, Ya 좌표 쌍들의 어레이를 생성하고, Xs 및 Ys를 즉시 피연산자들로서 특정하는데, 왜냐하면 이들이 QUADRANT 명령의 모든 실행들에 대해 일정하기 때문이다. Xa 및 Ya 좌표 쌍들은 명령의 실행 이전에 입력 피연산자 정보로서 각각의 어레이 위치에 로드된다. 다른 실시예에서, 명령은 추가로 [base] 어드레스 값을 입력 피연산자로서 받아들이므로, 전체 어드레스 값 [베이스]+오프셋이 QUADRANT 명령의 결과로서 제공될 수 있다. [base] 피연산자가 즉시 피연산자로서 지정될 수 있거나, 프로그램 코드가 [base] 값을 동적으로 결정하고 이를 추가 입력 피연산자로서 어레이 위치에 브로드캐스트하도록 구성될 수 있다.
[0093] QUADRANT 명령은 출력 픽셀 값들을 결정하는 알고리즘이 4개의 시트들에 걸쳐 픽셀 값들에 대해 연산할 동작 환경에만 특정하다는 점에 주목한다. 예컨대, 알고리즘이 9개의 시트들에 대해 동작할 동작 환경들의 경우, 임의의 특정 어레이 위치에 대해 9개의 서로 다른 오프셋들 중 어느 것이 사용될지를 계산하는 명령 세트 아키텍처에 다른 명령(HECTANT)이 내장될 수 있다.
[0094] 도 10은 도 7a - 도 7c와 관련하여 앞서 설명한 래스터 스캔 처리 접근 방식의 대안적인 실시예의 묘사를 도시한다. 도 10의 접근 방식에서, 스캔이 오른쪽으로 진행된다면, 무리 영역의 우측은 초기에 로드되지 않는다. 대신, 실행 레인 바로 아래의 무리 부분만 로드된다. 알고리즘의 연산 동안, 예컨대 좌측으로의 시프트를 수행하기 위해 LSheet_1로부터 새로운 값들이 필요한 결과로, 값들이 무리의 우측 가장자리를 따르기보다는 실행 레인 어레이의 우측 가장자리를 따라 로드된다. 도 10의 접근 방식은 알고리즘이 무리 영역 외부에서 동작하지 않고 더 적은 로드 명령들을 갖는 코드를 효과적으로 생성할 경우들에 특히 유용하다.
d. 구현 실시예들
[0095] 앞서 설명한 다양한 이미지 프로세서 아키텍처 특징들은 반드시 종래의 의미에서의 이미지 처리로 제한되는 것은 아니며, 따라서 이미지 프로세서가 다시 특성화되게 할 수 있는(또는 다시 특성화되게 하지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다는 점을 지시하는 것이 적절하다. 예를 들어, 앞서 설명한 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 특징이 실제 카메라 이미지들의 처리와는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용된다면, 이미지 프로세서는 그래픽 처리 유닛으로서 특성화될 수 있다. 추가로, 앞서 설명한 이미지 프로세서 아키텍처 특징들은 비디오 처리, 비전 처리, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 애플리케이션들에 적용될 수 있다. 이런 식으로 적용되면, 이미지 프로세서는 (예컨대, 컴퓨팅 시스템의 CPU이거나 그 일부인) 보다 범용적인 프로세서와 (예컨대, 보조 프로세서(co-processor)로서) 통합될 수 있거나, 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다.
[0096] 앞서 논의한 하드웨어 설계 실시예들은 반도체 칩 내에서 그리고/또는 반도체 제조 프로세스를 향한 최종 타깃화를 위한 회로 설계의 기술(description)로서 구현될 수 있다. 후자의 경우, 이러한 회로 기술들은 (예컨대, VHDL 또는 Verilog) 레지스터 전송 레벨(RTL: register transfer level) 회로 기술, 게이트 레벨 회로 기술, 트랜지스터 레벨 회로 기술 또는 마스크 기술, 또는 이들의 다양한 결합들의 형태를 취할 수 있다. 회로 기술들은 일반적으로 (CD-ROM 또는 다른 타입의 저장 기술과 같은) 컴퓨터 판독 가능 저장 매체 상에 구현된다.
[0097] 이전 섹션들로부터, 앞서 설명한 바와 같은 이미지 프로세서는 (예컨대, 핸드헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드헬드 디바이스의 시스템 온 칩(SOC: System on Chip)의 일부로서) 컴퓨터 시스템 상의 하드웨어로 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우들에, 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 주목한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에, 이미지 데이터는 카메라로부터 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예컨대, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송한다). 이전 섹션들에서 설명한 특징들 중 다수는 (애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용 가능할 수 있다는 점에 또한 주목한다.
[0098] 도 11은 컴퓨팅 시스템의 예시적인 도시를 제공한다. 아래에서 설명되는 컴퓨팅 시스템의 컴포넌트들 중 다수는 통합된 카메라 및 연관된 이미지 프로세서(예컨대, 스마트폰 또는 태블릿 컴퓨터와 같은 핸드헬드 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 당해 기술분야에서 통상의 지식을 가진 자들은 이 두 가지를 쉽게 파악할 수 있을 것이다.
[0099] 도 11에서 확인되는 바와 같이, 기본 컴퓨팅 시스템은 (예컨대, 멀티 코어 프로세서 또는 애플리케이션 프로세서 상에 배치된 복수의 범용 프로세싱 코어들(1115_1 내지 1115_N) 및 메인 메모리 제어기(1117)를 포함할 수 있는) 중앙 처리 유닛(1101), 시스템 메모리(1102), 디스플레이(1103)(예컨대, 터치 스크린, 평면 패널), 로컬 유선 점대점 링크(예컨대, USB) 인터페이스(1104), (이더넷 인터페이스 및/또는 셀룰러 모뎀 서브시스템과 같은) 다양한 네트워크 I/O 기능들(1105), 무선 근거리 네트워크(예컨대, WiFi) 인터페이스(1106), 무선 점대점 링크(예컨대, 블루투스) 인터페이스(1107) 및 글로벌 포지셔닝 시스템 인터페이스(1108), 다양한 센서들(1109_1 내지 1109_N), 하나 또는 그보다 많은 카메라들(1110), 배터리(1114), 전력 관리 제어 유닛(1112), 스피커 및 마이크로폰(1113) 그리고 오디오 코더/디코더(1114)를 포함할 수 있다.
[00100] 애플리케이션 프로세서 또는 멀티 코어 프로세서(1150)는 자신의 CPU(1101) 내의 하나 또는 그보다 많은 범용 프로세싱 코어들(1115), 하나 또는 그보다 많은 그래픽 처리 유닛들(1116), 메모리 관리 기능(1117)(예컨대, 메모리 제어기), I/O 제어 기능(1118) 및 이미지 처리 유닛(1119)을 포함할 수 있다. 범용 프로세싱 코어들(1115)은 일반적으로 컴퓨팅 시스템의 운영 시스템 및 애플리케이션 소프트웨어를 실행한다. 그래픽 처리 유닛들(1116)은 일반적으로 그래픽 집중 기능들을 실행하여, 예컨대 디스플레이(1103) 상에 제시되는 그래픽 정보를 생성한다. 메모리 제어 기능(1117)은 시스템 메모리(1102)와 인터페이스하여 시스템 메모리(1102)로/로부터 데이터를 기록/판독한다. 전력 관리 제어 유닛(1112)은 일반적으로 시스템(1100)의 전력 소비를 제어한다.
[00101] 이미지 처리 유닛(1119)은 이전 섹션들에서 앞서 상세히 설명한 이미지 처리 유닛 실시예들 중 임의의 실시예에 따라 구현될 수 있다. 대안으로 또는 결합하여, IPU(1119)는 GPU(1116) 및 CPU(1101) 중 어느 하나 또는 둘 다에 이들의 보조 프로세서로서 연결될 수 있다. 추가로, 다양한 실시예들에서, GPU(1116)는 앞서 상세히 설명한 이미지 프로세서 특징들 중 임의의 특징으로 구현될 수 있다.
[00102] 터치 스크린 디스플레이(1103), 통신 인터페이스들(1104-1107), GPS 인터페이스(1108), 센서들(1109), 카메라(1110) 및 스피커/마이크로폰 코덱(1113, 1114) 각각은 모두, 적절한 경우에는, 통합된 주변 디바이스들(예컨대, 하나 또는 그보다 많은 카메라(1110))을 또한 포함하는 전체 컴퓨팅 시스템에 대한 다양한 형태들의 I/O(입력 및/또는 출력)로서 보일 수 있다. 구현에 따라, 이러한 I/O 컴포넌트들 중 다양한 컴포넌트들은 애플리케이션 프로세서/멀티 코어 프로세서(1150) 상에 통합될 수 있거나 다이에서 벗어나 또는 애플리케이션 프로세서/멀티 코어 프로세서(1150)의 패키지 외부에 위치될 수 있다.
[00103] 일 실시예에서, 하나 또는 그보다 많은 카메라들(1110)은 그 시야에서 카메라와 객체 사이의 심도를 측정할 수 있는 심도 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프라인을 갖는 다른 기능 블록) 상에서 실행되는 애플리케이션 소프트웨어, 운영 시스템 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 앞서 설명한 기능들 중 임의의 기능을 수행할 수 있다.
[00104] 본 발명의 실시예들은 위에서 제시된 바와 같은 다양한 프로세스들을 포함할 수 있다. 프로세스들은 기계 실행 가능 명령들로 구현될 수 있다. 명령들은 범용 또는 특수 목적 프로세서가 특정 프로세스들을 수행하게 하는 데 사용될 수 있다. 대안으로, 이러한 프로세스들은 프로세스들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들과 커스텀 하드웨어 컴포넌트들의 임의의 결합에 의해 수행될 수 있다.
[00105] 본 발명의 엘리먼트들은 또한 기계 실행 가능 명령들을 저장하기 위한 기계 판독 가능 매체로서 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓들, 광 디스크들, CD-ROM들 및 광자기 디스크들, 플래시 메모리, ROM들, RAM들, EPROM들, EEPROM들, 자기 또는 광학 카드들, 전파 매체들, 또는 전자 명령들을 저장하기에 적합한 다른 타입의 매체/기계 판독 가능 매체를 포함할 수 있지만 이에 한정된 것은 아니다. 예를 들어, 본 발명은 통신 링크(예컨대, 모뎀 또는 네트워크 접속)를 통해 반송파 또는 다른 전파 매체로 구현된 데이터 신호들에 의해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다.
[00106] 상기한 명세서에서, 본 발명은 이들의 특정한 예시적인 실시예들을 참조로 설명되었다. 그러나 첨부된 청구항들에서 제시되는 바와 같은, 본 발명의 보다 넓은 사상 및 범위를 벗어나지 않으면서 이에 대해 다양한 수정들 및 변경들이 이루어질 수 있음이 명백할 것이다. 명세서 및 도면들은 이에 따라, 제한적인 의미보다는 예시적인 의미로 여겨져야 한다.

Claims (40)

  1. 삭제
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 프로세서로서,
    처리 엘리먼트들의 2차원 어레이; 및
    상기 처리 엘리먼트들의 2차원 어레이 내의 처리 엘리먼트들 중 하나에 각각 전용되는 레지스터들의 제1 부분을 갖고, 상기 레지스터들의 제1 부분의 하나 또는 그보다 많은 측면들에서 상기 제1 부분과 경계를 이루는 레지스터들의 무리(halo) 부분을 갖는 2차원 시프트 레지스터 어레이;
    이미지 데이터의 시트들을 상기 2차원 시프트 레지스터 어레이에 로드하도록 구성된 시트 생성기; 및
    상기 프로세서에 로컬인 로컬 랜덤 액세스 메모리(RAM: random access memory)를 포함하며,
    이미지 데이터의 각각의 시트는 상기 처리 엘리먼트들의 2차원 어레이의 처리 엘리먼트들과 적어도 동일한 수의 픽셀들을 갖고,
    상기 프로세서는 이미지 데이터의 다수의 시트들로부터의 데이터를 요구하는 스텐실(stencil) 기능을 수행하도록 입력 데이터를 로드하기 위한 명령들을 실행하도록 구성되며,
    상기 명령들은 상기 프로세서로 하여금 동작들을 수행하게 하고,
    상기 동작들은,
    이미지 데이터의 제1 시트 및 이미지 데이터의 제2 시트를 상기 로컬 RAM에 로드하는 동작,
    상기 이미지 데이터의 제1 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작,
    상기 이미지 데이터의 제2 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작,
    상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제1 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제2 시트의 일부를 사용하여 상기 스텐실 기능의 제1 반복을 수행하는 동작,
    상기 이미지 데이터의 제2 시트를 상기 프로세서에 재로드하지 않고 상기 이미지 데이터의 제2 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작;
    이미지 데이터의 제3 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작; 및
    상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제2 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제3 시트의 일부를 사용하여 상기 스텐실 기능의 제2 반복을 수행하는 동작
    을 포함하는,
    프로세서.
  22. 삭제
  23. 제21 항에 있어서,
    상기 이미지 데이터의 제2 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작은 상기 로컬 RAM으로부터 상기 이미지 데이터의 제2 시트의 일부를 로드하는 동작을 포함하는,
    프로세서.
  24. 삭제
  25. 제21 항에 있어서,
    상기 동작들은,
    상기 스텐실 기능의 제1 반복의 수행과 적어도 부분적으로 동시에 상기 이미지 데이터의 제3 시트를 상기 로컬 RAM에 로드하는 동작을 더 포함하는,
    프로세서.
  26. 제21 항에 있어서,
    상기 동작들은,
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제1 시트의 제1 어드레스를 참조(reference)하는 제1 포인터를 할당하는 동작;
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제2 시트의 제2 어드레스를 참조하는 제2 포인터를 할당하는 동작; 및
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제2 시트의 제2 어드레스를 참조하도록 상기 제1 포인터를 업데이트하는 동작을 더 포함하는,
    프로세서.
  27. 제26 항에 있어서,
    상기 이미지 데이터의 제2 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작은 업데이트된 제1 포인터를 참조하는 로드 명령을 실행하는 동작을 포함하는,
    프로세서.
  28. 제21 항에 있어서,
    상기 명령들은, 상기 처리 엘리먼트들의 2차원 어레이 내에 특정 위치를 갖는 특정 처리 엘리먼트에 의해 실행될 때, 상기 처리 엘리먼트로 하여금, 상기 특정 위치가 주어지면 데이터를 로드할 로컬 RAM의 특정 데이터 시트를 나타내는 오프셋을 계산하게 하는 오프셋 명령을 포함하는,
    프로세서.
  29. 제21 항에 있어서,
    상기 동작들은 상기 시트 생성기에 의해 상기 프로세서의 하나 또는 그보다 많은 다른 컴포넌트들에 제공되도록 상기 시트 생성기에 데이터의 출력 시트를 제공하는 동작을 더 포함하는,
    프로세서.
  30. 하나 또는 그보다 많은 비-일시적인 컴퓨터 판독가능 저장 매체들 상에 저장된 컴퓨터 프로그램으로서,
    프로세서― 상기 프로세서는,
    (ⅰ) 처리 엘리먼트들의 2차원 어레이,
    (ⅱ) 상기 처리 엘리먼트들의 2차원 어레이 내의 처리 엘리먼트들 중 하나에 각각 전용되는 레지스터들의 제1 부분을 갖고, 상기 레지스터들의 제1 부분의 하나 또는 그보다 많은 측면들에서 상기 제1 부분과 경계를 이루는 레지스터들의 무리 부분을 갖는 2차원 시프트 레지스터 어레이, 및
    (ⅲ) 이미지 데이터의 시트들을 상기 2차원 시프트 레지스터 어레이에 로드하도록 구성된 시트 생성기를 포함하며, 이미지 데이터의 각각의 시트는 상기 처리 엘리먼트들의 2차원 어레이의 처리 엘리먼트들과 적어도 동일한 수의 픽셀들을 가짐 ―에 의해 실행될 때,
    상기 프로세서로 하여금, 이미지 데이터의 다수의 시트들로부터의 데이터를 요구하는 스텐실 기능을 수행하도록 입력 데이터를 로드하게 하는 명령들을 포함하며,
    상기 명령들은 상기 프로세서로 하여금 동작들을 수행하게 하고,
    상기 동작들은,
    이미지 데이터의 제1 시트 및 이미지 데이터의 제2 시트를 상기 프로세서의 로컬 랜덤 액세스 메모리(RAM)에 로드하는 동작,
    상기 이미지 데이터의 제1 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작,
    상기 이미지 데이터의 제2 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작,
    상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제1 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제2 시트의 일부를 사용하여 상기 스텐실 기능의 제1 반복을 수행하는 동작,
    상기 이미지 데이터의 제2 시트를 상기 프로세서에 재로드하지 않고 상기 이미지 데이터의 제2 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작,
    이미지 데이터의 제3 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작, 및
    상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제2 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제3 시트의 일부를 사용하여 상기 스텐실 기능의 제2 반복을 수행하는 동작
    을 포함하는,
    컴퓨터 프로그램.
  31. 삭제
  32. 제30 항에 있어서,
    상기 이미지 데이터의 제2 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 동작은 상기 로컬 RAM으로부터 상기 이미지 데이터의 제2 시트의 일부를 로드하는 동작을 포함하는,
    컴퓨터 프로그램.
  33. 삭제
  34. 제30 항에 있어서,
    상기 동작들은,
    상기 스텐실 기능의 제1 반복의 수행과 적어도 부분적으로 동시에 상기 이미지 데이터의 제3 시트를 상기 로컬 RAM에 로드하는 동작을 더 포함하는,
    컴퓨터 프로그램.
  35. 제30 항에 있어서,
    상기 동작들은,
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제1 시트의 제1 어드레스를 참조하는 제1 포인터를 할당하는 동작;
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제2 시트의 제2 어드레스를 참조하는 제2 포인터를 할당하는 동작; 및
    상기 로컬 RAM에 로드된 상기 이미지 데이터의 제2 시트의 제2 어드레스를 참조하도록 상기 제1 포인터를 업데이트하는 동작을 더 포함하는,
    컴퓨터 프로그램.
  36. 제35 항에 있어서,
    상기 이미지 데이터의 제2 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 동작은 업데이트된 제1 포인터를 참조하는 로드 명령을 실행하는 동작을 포함하는,
    컴퓨터 프로그램.
  37. 제30 항에 있어서,
    상기 명령들은 상기 처리 엘리먼트들의 2차원 어레이 내에 특정 위치를 갖는 특정 처리 엘리먼트에 의해 실행될 때, 상기 처리 엘리먼트로 하여금, 상기 특정 위치가 주어지면, 데이터를 로드할 로컬 RAM의 특정 데이터 시트를 나타내는 오프셋을 계산하게 하는 오프셋 명령을 포함하는,
    컴퓨터 프로그램.
  38. 제30 항에 있어서,
    상기 동작들은 상기 시트 생성기에 의해 상기 프로세서의 하나 또는 그보다 많은 다른 컴포넌트들에 제공되도록 상기 시트 생성기에 데이터의 출력 시트를 제공하는 동작을 더 포함하는,
    컴퓨터 프로그램.
  39. 프로세서에 의해 수행되는 방법으로서,
    상기 프로세서는,
    (ⅰ) 처리 엘리먼트들의 2차원 어레이,
    (ⅱ) 상기 처리 엘리먼트들의 2차원 어레이 내의 처리 엘리먼트들 중 하나에 각각 전용되는 레지스터들의 제1 부분을 갖고, 상기 레지스터들의 제1 부분의 하나 또는 그보다 많은 측면들에서 상기 제1 부분과 경계를 이루는 레지스터들의 무리 부분을 갖는 2차원 시프트 레지스터 어레이, 및
    (ⅲ) 이미지 데이터의 시트들을 상기 2차원 시프트 레지스터 어레이에 로드하도록 구성된 시트 생성기를 포함하며,
    이미지 데이터의 각각의 시트는 상기 처리 엘리먼트들의 2차원 어레이의 처리 엘리먼트들과 적어도 동일한 수의 픽셀들을 갖고,
    상기 방법은 상기 프로세서로 하여금, 이미지 데이터의 다수의 시트들로부터의 데이터를 요구하는 스텐실 기능을 수행하도록 입력 데이터를 로드하게 하고,
    상기 방법은,
    이미지 데이터의 제1 시트 및 이미지 데이터의 제2 시트를 상기 프로세서의 로컬 랜덤 액세스 메모리(RAM)에 로드하는 단계,
    상기 시트 생성기에 의해 상기 이미지 데이터의 제1 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 단계,
    상기 시트 생성기에 의해 상기 이미지 데이터의 제2 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 단계,
    상기 처리 엘리먼트들의 2차원 어레이에 의해, 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제1 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제2 시트의 일부를 사용하여 상기 스텐실 기능의 제1 반복을 수행하는 단계,
    상기 이미지 데이터의 제2 시트를 상기 프로세서에 재로드하지 않고 상기 이미지 데이터의 제2 시트를 상기 로컬 RAM으로부터 상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드하는 단계,
    이미지 데이터의 제3 시트의 일부를 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드하는 단계, 및
    상기 2차원 시프트 레지스터 어레이의 제1 부분에 로드된 상기 이미지 데이터의 제2 시트를 사용하여 그리고 상기 2차원 시프트 레지스터 어레이의 무리 부분에 로드된 상기 이미지 데이터의 제3 시트의 일부를 사용하여 상기 스텐실 기능의 제2 반복을 수행하는 단계
    를 포함하는,
    프로세서에 의해 수행되는 방법.
  40. 삭제
KR1020187022164A 2016-02-26 2017-02-17 이미지 프로세서용 컴파일러 관리 메모리 KR102050899B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662300671P 2016-02-26 2016-02-26
US62/300,671 2016-02-26
US15/427,374 2017-02-08
US15/427,374 US10204396B2 (en) 2016-02-26 2017-02-08 Compiler managed memory for image processor
PCT/US2017/018444 WO2017147020A1 (en) 2016-02-26 2017-02-17 Compiler managed memory for image processor

Publications (2)

Publication Number Publication Date
KR20180100374A KR20180100374A (ko) 2018-09-10
KR102050899B1 true KR102050899B1 (ko) 2019-12-02

Family

ID=58228574

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187022164A KR102050899B1 (ko) 2016-02-26 2017-02-17 이미지 프로세서용 컴파일러 관리 메모리

Country Status (9)

Country Link
US (3) US10204396B2 (ko)
EP (1) EP3420528B1 (ko)
JP (1) JP6726752B2 (ko)
KR (1) KR102050899B1 (ko)
CN (1) CN107133908B (ko)
DE (2) DE102017103764A1 (ko)
GB (3) GB2576117B (ko)
TW (2) TWI628618B (ko)
WO (1) WO2017147020A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6815926B2 (ja) * 2017-04-27 2021-01-20 キヤノン株式会社 撮像装置、撮像システム、移動体、チップ
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
US10460416B1 (en) 2017-10-17 2019-10-29 Xilinx, Inc. Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11386644B2 (en) 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
CN107633477B (zh) * 2017-10-20 2021-04-20 上海兆芯集成电路有限公司 图像处理方法及其装置
CN108230229B (zh) * 2018-01-04 2021-07-06 格兰菲智能科技有限公司 图像处理装置以及图像处理方法
WO2019168739A1 (en) * 2018-02-27 2019-09-06 Google Llc Large lookup tables for an image processor
US10983583B2 (en) * 2018-08-23 2021-04-20 Apple Inc. Electronic display reduced blanking duration systems and methods
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
CN112184536B (zh) * 2020-09-24 2022-09-30 成都海光集成电路设计有限公司 基于gemm处理图像数据的方法、装置、设备和介质
TWI771921B (zh) * 2021-02-22 2022-07-21 瑞鼎科技股份有限公司 顯示驅動系統
WO2023172660A1 (en) * 2022-03-10 2023-09-14 Ascenium, Inc. Highly parallel processing architecture with out-of-order resolution

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150086134A1 (en) * 2013-09-20 2015-03-26 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor

Family Cites Families (82)

* 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
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
US6948050B1 (en) 1989-11-17 2005-09-20 Texas Instruments Incorporated Single integrated circuit embodying a dual heterogenous processors with separate instruction handling hardware
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
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
JP4489305B2 (ja) 1999-03-16 2010-06-23 浜松ホトニクス株式会社 高速視覚センサ装置
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
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
US7084929B2 (en) * 2002-07-29 2006-08-01 Koninklijke Philips Electronics N.V. Video data filtering arrangement and method
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
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
US8424012B1 (en) 2004-11-15 2013-04-16 Nvidia Corporation Context switching on a video processor having a scalar execution unit and a vector execution unit
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
US7834873B2 (en) * 2006-08-25 2010-11-16 Intel Corporation Display processing line buffers incorporating pipeline overlap
CN100409259C (zh) * 2006-08-29 2008-08-06 中国航天时代电子公司第七七一研究所 可缩放大规模二维卷积电路
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927949A1 (en) 2006-12-01 2008-06-04 Thomson Licensing Array of processing elements with local registers
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
KR101036596B1 (ko) 2007-09-05 2011-05-24 가부시키가이샤 시마쓰세사쿠쇼 고체촬상소자 및 그 구동방법
JP5461533B2 (ja) 2008-05-30 2014-04-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ローカル及びグローバルのデータ共有
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
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
CN101697486A (zh) * 2009-09-27 2010-04-21 华中科技大学 一种二维小波变换集成电路结构
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
TWI424372B (zh) * 2010-03-24 2014-01-21 Altek Corp Selectable image line path means
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
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
US9183614B2 (en) 2011-09-03 2015-11-10 Mireplica Technology, Llc Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
WO2013095606A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for detecting identical elements within a vector register
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
CN102665049B (zh) * 2012-03-29 2014-09-17 中国科学院半导体研究所 基于可编程视觉芯片的视觉图像处理系统
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
CN103020890B (zh) * 2012-12-17 2015-11-04 中国科学院半导体研究所 基于多层次并行处理的视觉处理装置
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9165337B2 (en) 2013-05-31 2015-10-20 Qualcomm Incorporated Command instruction management
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150086134A1 (en) * 2013-09-20 2015-03-26 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor

Also Published As

Publication number Publication date
CN107133908A (zh) 2017-09-05
CN107133908B (zh) 2021-01-12
JP2019507922A (ja) 2019-03-22
US10204396B2 (en) 2019-02-12
US10304156B2 (en) 2019-05-28
EP3420528B1 (en) 2022-06-15
TWI698832B (zh) 2020-07-11
DE102017103764A1 (de) 2017-08-31
US10685422B2 (en) 2020-06-16
TW201830329A (zh) 2018-08-16
US20190188824A1 (en) 2019-06-20
US20170287105A1 (en) 2017-10-05
TW201737201A (zh) 2017-10-16
DE202017101012U1 (de) 2017-05-29
GB2576117A (en) 2020-02-05
GB2576117B (en) 2020-08-12
TWI628618B (zh) 2018-07-01
EP3420528A1 (en) 2019-01-02
JP6726752B2 (ja) 2020-07-22
WO2017147020A1 (en) 2017-08-31
GB2567757A (en) 2019-04-24
GB2549578A (en) 2017-10-25
GB201820155D0 (en) 2019-01-23
KR20180100374A (ko) 2018-09-10
US20170249717A1 (en) 2017-08-31
GB2549578B (en) 2019-01-30
GB201912713D0 (en) 2019-10-16
GB2567757B (en) 2019-10-23
GB201702925D0 (en) 2017-04-12

Similar Documents

Publication Publication Date Title
KR102050899B1 (ko) 이미지 프로세서용 컴파일러 관리 메모리
US11138013B2 (en) Energy efficient processor core architecture for image processor
KR101973733B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
CN107430760B (zh) 用于图像处理器的二维移位阵列
KR102146515B1 (ko) 이미지 프로세서를 위한 시트 생성기
CN107563951B (zh) 在二维图像处理器上的统计操作
KR102278021B1 (ko) 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환

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
GRNT Written decision to grant