KR101971657B1 - 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처 - Google Patents

이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처 Download PDF

Info

Publication number
KR101971657B1
KR101971657B1 KR1020177028028A KR20177028028A KR101971657B1 KR 101971657 B1 KR101971657 B1 KR 101971657B1 KR 1020177028028 A KR1020177028028 A KR 1020177028028A KR 20177028028 A KR20177028028 A KR 20177028028A KR 101971657 B1 KR101971657 B1 KR 101971657B1
Authority
KR
South Korea
Prior art keywords
execution
lane
scalar
memory
lanes
Prior art date
Application number
KR1020177028028A
Other languages
English (en)
Other versions
KR20170125932A (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 KR20170125932A publication Critical patent/KR20170125932A/ko
Application granted granted Critical
Publication of KR101971657B1 publication Critical patent/KR101971657B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3871Asynchronous instruction pipeline, e.g. using handshake signals between stages
    • 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
    • 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
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/14Picture signal circuitry for video frequency region
    • 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
    • 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

Landscapes

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

Abstract

장치가 개시된다. 상기 장치는 명령들을 페치하고 발행하는 프로그램 제어기를 포함한다. 상기 장치는 명령들을 실행하기 위한 적어도 하나의 실행 유닛을 갖는 실행 레인을 포함한다. 상기 실행 레인은 2차원 시프트 레지스터 어레이 구조에 결합되는 실행 레인 어레이의 일부이고, 상기 실행 레인 어레이의 실행 레인들은 각각의 어레이 위치들에 위치되고 그리고 상기 2차원 시프트 레지스터 어레이의 동일한 개별 어레이 위치들에서 전용 레지스터들에 결합된다.

Description

이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처
본 발명의 분야는 일반적으로 이미지 프로세싱에 관한 것으로, 보다 구체적으로는 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처에 관한 것이다.
이미지 프로세싱은 일반적으로 어레이로 구성되는 픽셀 값들의 프로세싱을 포함한다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지들의 2차원 특성(추가 차원들은 시간(예를 들어, 2차원 이미지들의 시퀀스) 및 데이터 유형(예를 들어, 컬러들)을 포함할 수 있다)을 캡처한다. 통상적인 시나리오에서, 정렬된 픽셀 값들은 모션의 이미지들을 캡처하기 위해 정지 이미지 또는 프레임들의 시퀀스를 생성한 카메라에 의해 제공된다. 전통적인 이미지 프로세서들은 통상적으로 2가지 극단적인 측면을 가진다.
제1 극단은 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 백터 명령 강화들을 갖는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램들로서 이미지 처리 작업들을 수행한다. 제1 극단은 통상적으로 매우 다양한 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 관련 오버 헤드(예를 들어, 명령 페치 및 디코딩, 온칩 및 오프칩 데이터의 처리, 추측 실행)와 결합된 보다 정교한 데이터 구조들의 사용은 궁극적으로 프로그램 코드의 실행동안 데이터 단위당 더 많은 양의 에너지가 소비되도록 한다.
제2 반대의 극단은, 고정된 기능의 하드 와이어드 회로를 휠씬 더 큰 데이터 블록들에 적용한다. 주문 설계 회로들에 직접적으로 적용되는 더 큰 데이터 블록들(그다지 정교하지 않은 블록)을 사용하면 데이터 단위당 전력 소비가 크게 감소한다. 그러나 주문 설계된 고정된 기능 회로를 사용하면 일반적으로 프로세서가 수행할 수 있는 작업이 제한적으로 수행된다. 이와 같이, 널리 사용되는 프로그래밍 환경(제1 극단과 관련됨)은 제2 극단에서 결여된다.
고도의 다목적인 어플리게이션 소프트웨어 개발 기회들과 데이터 단위당 개선된 전력 효율성을 제공하는 기술 플랫폼은 바람직하지만, 여전히 해결해야할 문제점을 가지고 있다.
장치가 개시된다. 상기 장치는 명령들을 페치하고 발행하는 프로그램 제어기를 포함한다. 상기 장치는 명령들을 실행하기 위한 적어도 하나의 실행 유닛을 갖는 실행 레인을 포함한다. 상기 실행 레인은 2차원 시프트 레지스터 어레이 구조에 결합되는 실행 레인 어레이의 일부이고, 상기 실행 레인 어레이의 실행 레인들은 각각의 어레이 위치들에 위치되고 그리고 상기 2차원 시프트 레지스터 어레이의 동일한 개별 어레이 위치들에서 전용 레지스터들에 결합된다.
다음의 설명 및 첨부 도면들은 본 발명의 실시예들을 설명하기 위해 사용된다.
도 1은 이미지 프로세서 하드웨어 아키텍처의 일 실시예를 도시한다.
도 2a, 도 2b, 도 2c, 도 2d 및 도 2e는 라인 그룹으로의 이미지 데이터의 파싱, 시트(sheet)로의 라인 그룹의 파싱 및 오버랩하는 스텐실들을 갖는 시트상에서 수행된 동작을 도시한다.
도 3a는 스텐실 프로세서의 일 실시예를 도시한다.
도 3b는 스텐실 프로세서의 명령어의 일 실시예를 도시한다.
도 4는 스텐실 프로세서 내의 데이터 연산 유닛의 일 실시예를 도시한다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 도 5g, 도 5h, 도 5i, 도 5j 및 도 5k는 오버랩하는 스텐실들을 갖는 한 쌍의 인접한 출력 픽셀 값들을 결정하기 위한 2차원 시프트 어레이 및 실행 레인 어레이를 사용의 예를 도시한다.
도 6a는 집적된 실행 레인 어레이 및 2차원 시프트 어레이를 위한 유닛 셀의 일 실시예를 도시한다.
도 6b는 실행 레인 ALU의 일 실시예를 도시한다.
도 7a는 제1의 2차원 레지스터 어레이 구조 상호 접속 스킴을 도시한다.
도 7b는 제2의 2차원 레지스터 어레이 구조 상호 접속 스킴을 도시한다.
도 8a는 2차원 레지스터 어레이 구조의 제1 로우 또는 컬럼을 도시한다.
도 8b는 2차원 레지스터 어레이 구조의 제2 로우 또는 컬럼을 도시한다.
도 8c는 메모리 유닛에 연결된 도 8b의 로우를 도시한다.
도 8d는 다른 토로이드 실시예를 도시한다.
도 8e는 전력 보존 회로를 도시한다.
도 9는 레지스터 파일 내의 레지스터들보다 높은 비트 폭들에서의 동작에 관한 것이다.
도 10은 실행 레인 어레이 내의 메모리 동작들을 제어하는 것에 관한 것이다.
도 11은 컴퓨팅 시스템의 일 실시예를 도시한다.
a. 이미지 프로세서 하드웨어 아키텍처 및 운영
도 1은 하드웨어로 구현되는 이미지 프로세서에 대한 아키텍처(100)의 일 실시예를 도시한다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서를 위해 기입된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 1에서 관찰된 바와 같이, 아키텍처(100)는, 네트워크(104)(예를 들어, 온 칩 스위치 네트워크, 온 칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온 칩(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 설계에서 한 커널로부터의 출력 이미지를 다음 커널의 입력으로 지정하기 위해 각각의 스텐실 프로세서를 그들 자신의 각각의 프로그램 코드의 커널로 구성하고 그리고 적절한 제어 흐름 훅들을 하드웨어에 구성함으로써, 커널들의 임의의 DAG는 하드웨어 프로세서에 로딩될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(105)에 의해 수신되고 그리고 프레임 단위로 하나 이상의 라인 버퍼 유닛들(101)로 전달된다. 특정 라인 버퍼 유닛은 이미지 데이터의 프레임을 "라인 그룹(line group)"이라 불리는 더 작은 이미지 데이터 영역으로 파싱한 다음, 라인 그룹을 네트워크 (104)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체(full)" 단일 라인 그룹은, 예를 들어, 프레임의 다수의 연속적인 완전한 로우들 또는 컬럼들의 데이터로 구성될 수 있다(단순화를 위해, 본 명세서는 주로 연속적인 로우들을 나타낼 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트(sheet)"라고 하는 더 작은 이미지 데이터 영역으로 파싱하고, 시트를 대응하는 스텐실 프로세서에 제공한다.
단일 입력을 갖는 이미지 프로세싱 파이프라인 또는 DAG 플로우의 경우, 일반적으로, 입력 프레임들은, 이미지 데이터를 라인 그룹으로 파싱하고 그리고 대응하는 스텐실 프로세서(102_1)가 파이프라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(103_1)로 라인 그룹들을 보내는 동일한 라인 버퍼 유닛(101_1)으로 향한다. 프로세싱하는 라인 그룹들 상의 스텐실 프로세서(102_1)에 의한 동작들이 완료되면, 시트 생성기(103_1)는 출력 라인 그룹들을 "다운스트림(downstream)" 라인 버퍼 유닛(101_2)에 전송한다(일부 사용 예에서, 출력 라인 그룹은 이전에 입력 라인 그룹들로 전송된 동일한 라인 버퍼 유닛(101_1)으로 다시 전송될 수 있다).
자신의 각각의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(103_2) 및 스텐실 프로세서(102_2))에서 실행하는 파이프라인/DAG에서 다음 스테이지/동작을 나타내는 하나 이상의 "소비자(consumer)" 커널들은, 이후, 제1 스텐실 프로세서(102_1)에 의해 생성된 이미지 데이터를 다운스트림 라인 버퍼 유닛 (101_2)으로부터 수신한다. 이러한 방식으로, 제1 스텐실 프로세서상에서 동작하는 "생산자(producer)" 커널은 그 출력 데이터를 제2 스텐실 프로세서상에서 동작하는 "소비자" 커널에 전송하며, 생산자 커널이 전체 파이프 라인 또는 DAG 설계와 일치된 후 소비자 커널은 다음 작업 세트들을 수행한다.
스텐실 프로세서(102)는 이미지 데이터의 다수의 오버랩하는 스텐실 상에서 동시에 동작하도록 설계된다. 스텐실 프로세서의 다수의 오버랩하는 스텐실들 및 내부 하드웨어 프로세싱 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(102) 내에서, 실행 레인들의 어레이들은, 다수의 오버랩하는 스텐실들에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리하도록 일제히 동작한다.
아래에서보다 상세하게 설명되는 바와 같이, 다양한 실시예들에서, 이미지 데이터의 시트들은 스텐실 프로세서(102) 내의 2차원 레지스터 어레이 구조로 로딩된다. 시트들 및 2차원 레지스터 어레이 구조의 사용은, 예를 들어, 실행 레인 어레이에 의해 직후에 데이터 상에서 직접 수행된 프로세싱 작업들을 갖는 단일로드 연산처럼, 많은 양의 데이터를 대량의 레지스터 공간으로 이동시킴으로써 전력 소비 개선들을 효과적으로 제공하는 것으로 믿어진다. 추가로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은 용이하게 프로그래밍/구성할 수 있는 상이한 스텐실 크기들을 제공한다.
도 2a 내지 도 2e는, 시트 생성기 유닛(103)에 결합된 스텐실 프로세서 (102)의 스텐실 프로세싱 활동뿐 아니라 라인 버퍼 유닛(101)의 파싱 활동, 시트 생성기 유닛(103)의 더 세분화된 파싱 활동의 높은 레벨의 실시예들을 도시한다.
도 2a는 이미지 데이터(201)의 입력 프레임의 일 실시예를 도시한다. 도 2a는 또한 스텐실 프로세서가 동작하도록 설계된 3개의 중복하는 스텐실들(202)(각각 3 x 3 픽셀들의 치수를 가짐)의 아웃라인을 도시한다. 각 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 굵은 흑색으로 강조 표시된다. 단순화를 위해, 3개의 오버랩하는 스텐실들(202)은 수직 방향으로만 오버랩되는 것으로 도시된다. 실제로 스텐실 프로세서는 수직 및 수평 방향 모두에서 오버랩하는 스텐실들을 갖도록 설계될 수 있다는 것을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직의 오버랩하는 스텐실(202) 때문에, 도 2a에서 관찰되는 것처럼, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내에 넓은 대역의 이미지 데이터가 존재한다. 아래에서보다 상세히 설명되는 바와 같이, 일 실시예에서, 스텐실 프로세서는 이미지 데이터를 좌측에서 우측으로 가로지르는 방식으로 그들의 오버랩하는 스텐실 내의 데이터를 프로세싱한다(그리고 다음의 라인 세트들에 대해 위에서 아래로 순서대로 반복한다). 따라서, 스텐실 프로세서들이 동작하면서 앞으로 진행됨에 따라, 굵은 흑색의 출력 픽셀 블록들의 수는 수평으로 우측 방향으로 증가할 것이다. 상기에서 서술한 것처럼, 라인 버퍼 유닛(101)은, 스텐실 프로세서들이 확장된 수의 다가오는 사이클들 동안 동작하기에 충분한 입력 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(203)으로 도시된다. 일 실시예에서, 라인 버퍼 유닛(101)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송신/수신하기 위한 상이한 역학들을 포함할 수 있다. 예를 들어, "전체 그룹(full group)"이라고 하는 하나의 모드에 따라, 이미지 데이터의 완전한 전체 폭의 라인들은 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)"이라고 하는 두번째 모드에 따르면, 라인 그룹은 처음에는 전체 폭의 로우들의 서브세트와 함께 전달된다. 나머지 로우들은 작은 (전체 폭보다 작은) 부분들로 순차적으로 전달된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(203)에 의해, 시트 생성기 유닛은 또한 스텐실 프로세서의 하드웨어 제한들에 더 정확하게 부합되는 더 미세한 시트로 라인 그룹을 파싱한다. 보다 상세하게는, 이하에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 각 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 기본적으로 이미지 데이터를 실행 레인들의 어레이 "아래(beneath)"로 시프트하고, 시프팅의 패턴은 각 실행 레인이 각각의 스텐실 내의 데이터에 대해 작동하도록한다(즉, 각 실행 레인은 해당 스텐실에 대한 출력을 생성하기 위해 자체 스텐실 정보를 프로세싱한다). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이에 "채워지거나(fill)" 또는 로딩되는 입력 이미지 데이터의 표면 영역들이다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들에서, 임의의 사이클에서 시프트될 수 있는 2차원 레지스터 데이터의 다중 층들이 실제로 존재한다. 편의상, 본 설명의 많은 부분은 단순히 "2차원 시프트 레지스터" 등의 용어를 사용하고, 이는 시프트될 수 있는 2차원 레지스터 데이터의 하나 이상의 그러한 층들을 갖는 구조를 지칭한다.
따라서, 도 2b에서 관찰되는 바와 같이, 시트 생성기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하고 그것을 스텐실 프로세서에 제공한다(여기서, 데이터의 시트는 참조 번호 204로 일반적으로 식별되는 음영 영역에 대응한다). 도 2c 및 도 2d에 도시된 바와 같이, 스텐실 프로세서는 오버랩하는 스텐실들(202)을 시트 위에서 좌측에서 우측으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트에 대해 작동한다. 도 2d에 도시된 바와 같이, 시트 내의 데이터로부터 출력값이 계산될 수 있는 픽셀의 수는 소진된다(다른 픽셀 위치들은 시트 내의 정보로부터 결정된 출력 값을 가질 수 없다). 단순화를 위해, 이미지의 경계 영역들은 무시된다.
도 2e에서 관찰된 바와 같이, 시트 생성기는, 이후, 스텐실 프로세서가 동작들을 계속하기 위해 다음 시트(205)를 제공한다. 스텐실이 다음 시트에서 작동하기 시작할 때의 스텐실들의 초기 위치들은, (도 2d에서 이전에 도시된 바와 같이) 제1 시트상의 소진 지점으로부터 우측으로의 다음 진행임을 알아야 한다. 새로운 시트(205)에 대해, 스텐실 프로세서가 제1 시트의 처리와 동일한 방식으로 새로운 시트상에서 동작함에 따라 스텐실은 우측으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에 제1 시트(204)의 데이터와 제2 시트(205)의 데이터 사이에 약간의 오버랩이 있음을 알아야 한다. 오버랩하는 데이터를 두 번 재전송하는 시트 생성기에 의해 단순하게 오버랩은 처리될 수 있다. 대안의 구현들에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 스텐실 프로세서로 새로운 데이터를 전송하기만 하고, 스텐실 프로세서는 이전 시트로부터의 오버랩하는 데이터를 재사용 할 수 있다.
b. 스텐실 프로세서 설계 및 운영
도 3a는 스텐실 프로세서 아키텍처(300)의 일 실시예를 도시한다. 도 3a에서 관찰되는 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(301), 스칼라 프로세서(302) 및 관련 메모리(303) 및 I/O 유닛(304)을 포함한다. 데이터 계산 유닛(301)은 실행 레인들의 어레이(305), 2차원 시프트 어레이 구조(306) 및 어레이의 특정 로우들 또는 컬럼들과 관련된 개별 랜덤 액세스 메모리들(307)을 포함한다.
I/O 유닛(304)은 시트 생성기로부터 수신된 데이터의 "입력(input)" 시트들을 데이터 계산 유닛(301)에 로딩하고 그리고 스텐실 프로세서로부터 시트 생성기로 데이터의 "출력(output)" 시트들을 저장하는 역할을 한다. 일 실시예에서, 데이터 계산 유닛(301)으로의 시트 데이터의 로딩은, 수신된 시트를 이미지 데이터의 로우들/컬럼들로 파싱하는 것과 이미지 데이터의 로우들/컬럼들을 2차원 시프트 레지스터 구조(306) 또는 실행 레인 어레이의 로우들/컬럼들의 각각의 랜덤 액세스 메모리들(307)(이하에서 보다 상세히 설명됨)에 로딩하는 것을 포함한다. 시트가 처음에 메모리들(307)에 로딩되면, 실행 레인 어레이(305) 내의 개별 실행 레인들은, 적절할 때(예를 들어, 시트의 데이터를 조작하기 직전에 로딩 명령으로서), 시트 데이터를 랜덤 액세스 메모리들(307)로부터 2차원 시프트 레지스터 구조(306)로 로딩할 수 있다. (시트 생성기로부터 또는 메모리들(307)로부터 직접적으로) 레지스터 구조(306)에 데이터 시트의 로딩이 완료되면, 실행 레인 어레이(305)의 실행 레인들은 데이터 상에서 동작하고 그리고 결국 시트로서 최종 데이터를 시트 생성기 또는 랜덤 액세스 메모리들(307)에 다시 "라이트 백(write back)" 한다. 나중에 I/O 유닛(304)이 랜덤 액세스 메모리들(307)로부터 데이터를 페치하면, 그 후 시트 생성기로 보내지는 출력 시트를 형성한다.
스칼라 프로세서(302)는 프로그램 제어기(309)를 포함하고, 상기 프로그램 제어기(309)는 스칼라 메모리(303)로부터 스텐실 프로세서의 프로그램 코드의 명령어들을 판독하고 그리고 실행 레인 어레이(305) 내의 실행 레인들에 상기 명령어들을 발행한다. 일 실시예에서, 단일의 동일한 명령어는 데이터 계산 유닛(301)로부터 SIMD와 유사한 행동을 하기 위해 어레이(305) 내의 모든 실행 레인들에 방송된다. 일 실시예에서, 스칼라 메모리(303)로부터 판독되고 그리고 실행 레인 어레이(305)의 실행 레인들에 발행된 명령어들의 명령어 포맷은, 명령어 당 2개 이상의 연산 코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 다른 실시예에서, VLIW 포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 연산 코드(아래에서 서술되는 것처럼, 일 실시예에서 2이상의 전통적인 ALU 동작을 지정할 수 있음) 및 메모리 연산 코드(특정 실행 레인 또는 실행 레인들의 세트에 대한 메모리 동작을 지시함) 모두를 포함한다.
"실행 레인(execution lane)"이라는 용어는 명령을 실행할 수 있는 하나 이상의 실행 유닛들의 세트(예를 들어, 명령을 실행할 수 있는 논리 회로)를 지칭한다. 그러나, 실행 레인은, 다양한 실시예들에서, 단순한 실행 유닛들 이상의 프로세서-유사 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛들 외에도, 실행 레인은 또한 수신된 명령을 디코딩하는 논리 회로 또는 더 많은 MIMD와 유사한 설계의 경우 명령을 페치하고 디코딩하는 논리 회로를 포함할 수 있다. MIMD와 유사한 접근법들에 관하여, 중앙 집중식 프로그램 제어 접근법이 여기에서 많이 기술되었지만, (예를 들어, 프로그램 코드 및 어레이(305)의 각 실행 레인 내의 프로그램 제어기를 포함하는) 다양한 대안적인 실시예들에서 보다 분산된 접근법이 구현될 수 있다.
실행 레인 어레이(305), 프로그램 제어기(309) 및 2차원 시프트 레지스터 구조(306)의 조합은 광범위한 프로그램가능 기능을 위한 광범위하게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 소프트웨어 개발자들은, 개별 실행 레인들이 다양한 기능들을 수행할 수 있고 그리고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 쉽게 액세스할 수 있는 것을 감안할 때, 넓은 범위의 상이한 기능적 능력과 치수(예를 들어, 스텐실 크기)를 가진 커널들을 프로그래밍할 수 있다.
실행 레인 어레이(305)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서 동작하는 것 외에, 랜덤 액세스 메모리(307)는 또한 하나 이상의 룩업 테이블들을 유지할 수 있다. 다양한 실시예들에서, 하나 이상의 스칼라 룩업 테이블들이 또한 스칼라 메모리(303)내에서 인스턴스화될 수 있다.
스칼라 룩업(scalar look-up)은 동일한 룩업 테이블로부터의 동일한 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(305) 내의 실행 레인들 각각으로 전달하는 것을 포함한다. 다양한 실시예들에서, 상기에서 서술된 VLIW 명령 포맷은 스칼라 프로세서에 의해 수행된 룩업 연산을 스칼라 룩업 테이블로 향하게하는 스칼라 연산 코드를 또한 포함하도록 확장된다. 연산 코드와 함께 사용하도록 지정된 인덱스는 즉시 피연산자(immediate operand)이거나 또는 일부 다른 데이터 저장 위치로부터 페치될 수 있다. 그럼에도 불구하고, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩업은 본질적으로 동일한 클럭 사이클 동안 실행 레인 어레이(305) 내의 모든 실행 레인들로 동일한 데이터 값을 방송하는 것을 포함한다. 룩업 테이블의 사용 및 작동에 관한 추가 세부 사항들은 아래에 제공된다.
도 3b는 상기에서 서술한 VLIW 명령어 실시예(들)을 요약한다. 도 3b에서 관찰되는 바와 같이, VLIW 명령 워드 포맷은 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 시프트 레지스터로부터/데이터 계산 유닛의 메모리들 또는 2D 시프트 레지스터로 시트들을 로딩/저장하기 위해 시트 생성기에 발행되는 명령들을 포함한다. 여기서, 시트 생성기의 동작은, 라인 버퍼 유닛의 동작, 또는 스칼라 프로세서에 의해 발행된 임의의 커맨드를 완료하기 위해 시트 생성기에 걸리는 사이클들 수의 사전 실행 시간 이해를 방해하는 다른 변수에 의존할 수 있다. 이와 같이, 일 실시예에서, 스칼라 명령(351)이 시트 생성기에 발행되는 커맨드에 대응하거나 또는 스칼라 명령(351)이 커맨드가 시트 생성기에 발행되도록 하는 임의의 VLIW 워드는, 또한 다른 2개의 명령 필드(352, 353)에 무-연산(NOOP) 명령들을 포함한다. 그 다음, 프로그램 코드는, 시트 생성기가 데이터 계산 유닛으로/데이터 계산 유닛으로부터 로딩/저장을 완료할 때까지 명령 필드들(352, 353)에 대한 NOOP 명령 루프를 입력한다. 여기서, 시트 생성기에 커맨드를 발행할 때, 스칼라 프로세서는 명령 완료시 시트 생성기가 재설정하는 인터록 레지스터 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터록 비트의 비트를 모니터링한다. 시트 생성기가 커맨드를 완료했음을 스칼라 프로세서가 감지하면, 정상 실행이 다시 시작한다.
도 4는 데이터 계산 컴포넌트(401)의 일 실시예를 도시한다. 도 4에서 관찰되는 바와 같이, 데이터 계산 컴포넌트(401)는 2차원 시프트 레지스터 어레이 구조(406)의 "위(above)"에 논리적으로 위치되는 실행 레인들의 어레이(405)를 포함한다. 상기에서 서술된 것처럼, 다양한 실시예들에서, 시트 생성기에 의해 제공된 이미지 데이터 시트는 2차원 시프트 레지스터(406)에 로딩된다. 이후, 실행 레인들은 레지스터 구조(406)로부터의 시트 데이터에 대해 동작한다.
실행 레인 어레이(405) 및 시프트 레지스터 구조(406)는 서로에 대한 위치에 고정된다. 그러나, 시프트 레지스터 어레이(406) 내의 데이터는 전략적으로 조정 된 방식으로 시프트되어 실행 레인 어레이의 각 실행 레인이 데이터 내의 상이한 스텐실을 프로세싱하도록 한다. 그와 같이, 각 실행 레인은 생성되는 출력 시트의 상이한 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터, 중첩하는 스텐실들이 수직으로 배열될 뿐 아니라 수평으로 배열되는 것이 명확한바, 이는, 실행 레인 어레이(405)가 수직으로 인접한 실행 레인들과 함께 수평으로 인접한 실행 레인들을 포함하기 때문이다.
데이터 계산 유닛(401)의 일부 주목할만한 구조적 특징은 실행 레인 어레이 (405)보다 넓은 치수를 갖는 시프트 레지스터 구조(406)를 포함한다. 즉, 실행 레인 어레이(405) 외부에 레지스터들(409)의 "헤일로(halo)"가 존재한다. 헤일로(409)는 실행 레인 어레이의 양 측면들에 존재하는 것으로 도시되어 있지만, 구현에 따라, 헤일로는 실행 레인 어레이(405)의 적은(1개) 또는 많은(3 또는 4개)의 측면들 상에 존재할 수 있다. 헤일로(405)는, 데이터가 실행 레인들(405)의 "아래(beneath)"로 시프팅되고 있을 때 실행 레인 어레이(405)의 경계들 밖으로 유출되는 데이터에 대해 "스필 오버(spill-over)" 공간을 제공하는 역할을 한다. 단순한 경우로서, 실행 레인 어레이(405)의 우측 에지를 중심으로 하는 5x5 스텐실은 스텐실의 가장 좌측 픽셀들이 프로세싱될 때 우측에 추가로 4개의 할로 레지스터 위치들을 필요로 할 것이다. 용이한 도면 작성을 위해, 도 4는, 명목상의 실시예에서, 양측(우측, 하부)의 레지스터들이 수평 및 수직 연결들을 모두 가질 때, 수평 쉬프트 연결들만을 갖는 것으로 헤일로의 우측의 레지스터들 및 수직 쉬프트 연결들만을 갖는 것으로 헤일로의 하부의 레지스터들을 도시한다.
어레이의 각 로우 및/또는 각 컬럼 또는 그 일부에 결합되는 랜덤 액세스 메모리들(407)에 의해 추가적인 스필-오버 룸(spill-over room)이 제공된다(예를 들어, 랜덤 액세스 메모리는 4개의 실행 레인들 로우 방향 및 2개의 실행 레인들 컬럼 방향에 걸쳐있는 실행 레인 어레이의 "영역(region)"에 할당 될 수 있다. 단순화를 위해, 나머지 응용 프로그램은 주로 행 및 / 또는 열 기반 할당 체계를 참조한다). 여기서, 실행 레인의 커널 동작들이 (일부 이미지 프로세싱 루틴들이 요구할 수 있는) 2차원 시프트 레지스터 어레이(406) 외부의 픽셀 값들을 프로세싱할 것을 요구하는 경우, 이미지 데이터의 평면은, 예를 들어, 헤일로 영역(409)으로부터 랜덤 액세스 메모리(407)로 추가로 스필 오버할 수 있다. 예를 들어, 하드웨어가, 실행 레인 어레이의 우측 에지에 있는 실행 레인 우측에 4개의 저장 소자들만의 헤일로 영역을 포함하는 6X6 스텐실을 고려해보자. 이러한 경우, 데이터는 스텐실을 충분히 프로세싱하기 위해 헤일로(409)의 우측 에지에서 오른쪽으로 더 멀리 시프트될 필요가 있다. 헤일로 영역(409) 외부로 시프트된 데이터는 이후 랜덤 액세스 메모리(407)로 스필-오버될 것이다. 랜덤 액세스 메모리들(407) 및 도 3의 스텐실 프로세서의 다른 애플리케이션들이 아래에 더 제공된다.
도 5a 내지 도 5k는, 이미지 데이터가 상술한 바와 같이 실행 레인 어레이의 "아래"의 2차원 시프트 레지스터 어레이 내에서 시프트되는 방식의 일례를 나타낸다. 도 5a에서 관찰된 바와 같이, 2차원 시프트 어레이의 데이터 콘텐츠는 제1 어레이(507)에 도시되고 그리고 실행 레인 어레이는 프레임(505)으로 도시된다. 또한, 실행 레인 어레이 내의 2개의 이웃하는 실행 레인들(510)이 간략하게 도시된다. 이 간단한 묘사(510)에서, 각각의 실행 레인은 시프트 레지스터로부터 데이터를 수용하거나, (예를 들어, 사이클을 통해 누산기로서 동작하도록) ALU 출력으로부터 데이터를 수용하거나, 또는 출력 데이터를 출력 목적지에 기록할 수 있는 레지스터(R1)를 포함한다.
각 실행 레인은, 로컬 레지스터 R2에서, 2차원 시프트 어레이의 콘텐츠 바로 아래에 있는 콘텐츠를 또한 사용할 수 있다. 따라서, R1은 실행 레인의 물리적 레지스터인 반면에 R2는 2차원 시프트 레지스터 어레이의 물리적 레지스터이다. 실행 레인은 R1 및/또는 R2에 의해 제공되는 피연산자들에 대해 작동할 수 있는 ALU를 포함한다. 아래에서 더 상세히 서술된 것처럼, 일 실시예에서, 시프트 레지스터는 어레이 위치마다 다수의 저장/레지스터 소자들(의 "깊이(depth)")로 실제로 구현되지만, 시프팅 활동은 저장 소자들의 하나의 평면에 제한된다(예를 들어, 저장 소자들의 단 하나의 평면만이 사이클마다 시프트될 수 있다). 도 5a 내지 도 5k는 각각의 실행 레인들로부터 결과적인 X를 저장하기 위해 사용되는 이들의 깊은 레지스터 위치들 중 하나를 나타낸다. 설명의 용이함을 위해, 더 깊이 존재하는 레지스터는 그 상대 레지스터(R2)의 아래에서 보다 옆으로 그려진다.
도 5a 내지 도 5k는, 중심 위치가 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치들(511)과 정렬되는 2개의 스텐실들의 계산에 초점을 맞추고 있다. 예시의 용이함을 위해, 한 쌍의 실행 레인들(510)은, 실제로, 다음의 예에 따라, 수직 이웃들이 될 때 수평 이웃들로 도시된다.
처음에 도 5a에서 관찰되듯이, 실행 레인들은 중앙 스텐실 위치들의 중앙에 위치된다. 도 5b는 두 개의 실행 레인들에 의해 실행되는 오브젝트 코드를 도시한다. 도 5b에서 관찰되듯이, 두 개의 실행 레인들의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터가 아래로 한 위치 시프트되고 오른쪽으로 한 위치로 시프트되도록 한다. 이렇게 하면 두 실행 레인들이 스텐실들 각각의 왼쪽 상단 코너에 정렬된다. 이후, 프로그램 코드는 각각의 위치에 있는(R2에 있는) 데이터가 R1으로 로딩되도록 한다.
도 5c에서 관찰되듯이, 프로그램 코드는, 다음에, 상기 한 쌍의 실행 레인들이 시프트 레지스터 어레이 내의 데이터가 하나의 유닛 좌측으로 시프트되도록 하여 각 실행 레인의 각 위치의 우측에 있는 값을 각 실행 레인의 위치로 이동시킨다. R1의 값(이전 값)은 실행 레인의 위치(R2)로 시프트된 새로운 값에 추가된다. 결과는 R1에 기록된다. 도 5d에서 관찰되듯이, 결과적인 R1이 상위 실행 레인에 A+B+C 값을 포함하고 하위 실행 레인에 F+G+H 값을 포함하도록 하는 도 5c에 대해 상기에서 서술한 것과 동일한 프로세스가 반복된다. 이 시점에서 두 실행 레인들은 스텐실들 각각의 상위 로우를 프로세싱했다. 실행 레인 어레이의 좌측의 헤일로 영역(헤일로 영역이 좌측에 있는 경우)에 스필-오버되고 또는 실행 레인 어레이의 좌측에 헤일로 영역이 존재하지 않으면 랜덤 액세스 메모리에 스필 오버된다.
도 5e에서 관찰되듯이, 프로그램 코드는, 다음에, 시프트 레지스터 어레이 내의 데이터를 하나의 유닛 위로 시프트하여, 두 실행 레인들이 각각의 스텐실들의 중간 로우의 우측 에지와 정렬되도록 한다. 두 실행 레인들의 레지스터 R1은 현재 스텐실의 상부 로우와 중간 로우의 가장 오른쪽 값의 합계를 포함한다. 5f 및 5g는 두 실행 레인의 스텐실들의 중간 로우를 가로 질러 좌측으로 계속 진행하는 것을 나타낸다. 누적 가산은, 도 5g의 프로세싱의 종료시, 두 실행 레인들 모두 각각의 스텐실들의 상부 로우과 중간 로우의 값들의 합산을 포함하도록 계속된다.
도 5h는 각각의 실행 레인을 대응하는 스텐실의 최하위 로우와 정렬시키기 위한 다른 시프트를 도시한다. 5i와 5j는 두 실행 레인들의 스텐실들의 코스에 대한 프로세싱을 완료하기 위한 계속적인 쉬프팅을 도시한다. 도 5k는 각 실행 레인을 데이터 어레이 내의 그 정확한 위치와 정렬시키고 그에 대한 결과를 기입하기 위한 추가적인 쉬프팅을 도시한다.
도 5a 내지 5k의 예에서, 시프트 동작들을 위한 오브젝트 코드는 (X, Y) 좌표들로 표현된 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다. 예를 들어, 한 위치씩 시프트 업을 위한 오브젝트 코드는 SHIFT 0, +1과 같은 오브젝트 코드로 표현될 수 있다. 다른 예로서, 한 위치만큼 우측으로의 시프트는 오브젝트 코드에서 SHIFT +1, 0으로 표현될 수 있다. 다양한 실시예들에서, 보다 큰 크기의 시프트들이 오브젝트 코드에서 특정될 수도 있다(예를 들어, SHIFT 0, + 2). 여기서, 2D 시프트 레지스터 하드웨어가 사이클마다 하나의 위치만큼만 시프트들을 지원하는 경우, 명령은 다중 사이클 실행을 요구하도록 기계에 의해 해석될 수 있거나, 또는 2D 시프트 레지스터 하드웨어는 사이클마다 둘 이상의 위치만큼 시프트들을 지원하도록 설계될 수 있다. 후술하는 실시예들은 이하에서 더 상세히 설명된다.
도 6a는 어레이 실행 레인 및 시프트 레지스터 구조에 대한 유닛 셀의 또 다른 상세한 묘사를 도시한다(헤일로 영역의 레지스터들은 대응하는 실행 레인을 포함하지 않는다). 실행 레인 및 실행 레인 어레이에서의 각 위치에 관련된 레지스터 공간은, 일 실시예에서, 실행 레인 어레이의 각 노드에서 도 6a에서 관찰된 회로를 인스턴스화함으로써 구현된다. 도 6a에 관찰되듯이, 유닛 셀은 4개의 레지스터들(R2 내지 R5)로 구성된 레지스터 파일(602)에 연결된 실행 레인(601)을 포함한다. 임의의 사이클 동안, 실행 레인(601)은 레지스터들(R1 내지 R5)의 일부로부터 판독하거나 또는 레지스터들(R1 내지 R5)의 일부에 기록할 수 있다. 2개의 입력 피연산자들을 요구하는 명령들의 경우, 실행 레인은 R1 내지 R5 중 어떤 것으로부터 피연산자들 모두를 검색할 수 있다.
일 실시예에서, 2차원 시프트 레지스터 구조는, 단일 사이클 동안, 레지스터들(R2 내지 R4) 중의 어떤 것(단 하나)의 콘텐츠가 출력 멀티플렉서(603)를 통해 이웃의 레지스터 파일들 중 하나로 시프트 "아웃(out)" 되도록하고, 그리고 레지스터들(R2 내지 R4) 중 어떤 것(단 하나)의 콘텐츠가 입력 멀티플렉서들(604)을 통해 이웃하는 것들 중 대응하는 하나로부터 쉬프트 "인(in)"된 콘텐트로 대체되도록 함으로써 이웃들 사이의 시프트들은 동일한 방향이 되도록 한다(예를 들어, 모든 실행 레인들이 좌측으로 시프트되거나 또는 모든 실행 레인들이 우측으로 시프트된다). 동일한 레지스터가 그 내용을 시프트 아웃 (shift out)하고 동일한 사이클에서 시프트되는 내용으로 대체되는 것이 일반적일 수 있지만, 멀티플렉서 장치(603, 604)는 동일한 사이클 동안 동일한 레지스터 파일 내에 상이한 시프트 소스 및 시프트 타겟 레지스터들을 허용한다.
도 6a에 도시된 바와 같이, 시프트 시퀀스동안 실행 레인은 콘텐트를 레지스터 파일(602)로부터 좌측, 우측, 상부 및 하부 이웃 각각으로 시프트할 것이다. 동일한 시프트 시퀀스와 함께, 실행 레인은 콘텐트를 좌측, 우측, 상부 및 하부 이웃들 중 특정 이웃으로부터 레지스터 파일로 또한 시프트할 것이다. 다시, 타겟에 대해 시프트 아웃 및 소스에 대해 시프트 인은 모든 실행 레인들에 대해 동일한 실행 방향과 일치해야 한다(시프트 아웃은 우측 이웃 방향이어야 하고, 시프트 인은 좌측 이웃 방향이다).
일 실시예에서, 단지 하나의 레지스터의 콘텐트가 사이클마다 실행 레인 당 시프트되는 것이 허용되지만, 다른 실시예들은 하나보다 많은 레지스터의 콘텐트가 시프트 인/아웃되도록 허용될 수 있다. 예를 들어, 도 6a에서 관찰되는 멀티플렉서 회로(603, 604)의 제2 인스턴스가 도 6a의 설계에 통합되는 경우, 동일한 사이클 동안 2개의 레지스터들의 콘텐트가 시프트 아웃/인될 수 있다. 물론, 단지 하나의 레지스터의 콘텐트가 사이클마다 쉬프트되는 것이 허용되는 실시예들에서, 수학 연산들 사이들의 쉬프트들에 대해 더 많은 클럭 사이클들을 소비함으로써 수학 연산들 사이에서 다수의 레지스터들로부터의 시프트가 발생할 수 있다(예를 들어, 2개의 레지스터들의 콘텐츠는 수학 연산들 사이에서 2개의 시프트 연산들을 소비함으로써 수학 연산들 사이에서 시프트될 수 있다).
실행 레인의 레지스터 파일들의 모든 컨텐츠보다는 작은 컨텐츠가 시프트 시퀀스동안 시프트 아웃되는 경우, 각 실행 레인의 시프트되지 않은 레지스터들의 콘텐트는 그대로 유지됨(시프트되지 않음)을 알 수 있다. 이와 같이, 콘텐츠에서 시프트된 것으로 대체되지 않는 임의의 시프트되지 않은 콘텐츠는 시프팅 사이클 전반에 걸쳐 실행 레인에 국부적으로 유지된다. 각 실행 레인에서 관찰되는 메모리 유닛("M")은, 실행 레인 어레이 내의 실행 레인의 로우 및/또는 컬럼과 관련된 랜덤 액세스 메모리 공간으로부터/랜덤 액세스 메모리 공간으로 데이터를 로드/저장하는데 사용된다. 여기서 M 유닛은, 실행 레인의 자체 레지스터 공간으로부터/실행 레인의 자체 레지스터 공간으로 로딩/저장할 수 없는 데이터를 로딩/저장하는데 자주 사용된다는 점에서 표준 M 유닛으로서 역할을 한다. 다양한 실시예들에서, M 유닛의 주요 동작은 로컬 레지스터로부터 메모리로 데이터를 기입하고, 메모리로부터 데이터를 판독하여 데이터 로컬 레지스터에 기입하는 것이다.
하드웨어 실행 레인(601)의 ALU 유닛에 의해 지원되는 ISA 연산 코드들에 관하여, 다양한 실시예에서, 하드웨어 ALU가 지원하는 수학 연산 코드들은 가상 실행 레인(예를 들어, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT)이 지원하는 수학 연산 코드들과 통합되어(예를 들어, 실질적으로 동일하게) 연결된다. 바로 위에서 설명한 바와 같이, 메모리 액세스 명령들은 관련 랜덤 액세스 메모리로부터/관련 랜덤 액세스 메모리로 데이터를 페치/저장하기 위해 실행 레인 (601)에 의해 실행될 수 있다. 또한, 하드웨어 실행 레인(601)은 2차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위해 시프트 연산 명령들(우측, 좌측, 업, 다운)을 지원한다. 상기에서 서술한 것처럼, 프로그램 제어 명령들은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
도 6b는 프로세서 ALU의 실시예를 도시한다. 도 6b에서 관찰된 것처럼, 프로세서 ALU는 멀티플라이-가산 유닛(611) 및 제1 및 제2 공칭 ALU들(612, 613)을 포함한다. 멀티플라이-가산 유닛(611)은 연산 (A*B)+C를 수행한다. 제1 및 제2 공칭 ALU들은 비교 연산들(예를 들어, 가산, 감산, 논리곱, 논리합, 배타적논리합, 비교, 최소, 최대, 절대값, 시프트)을 포함하는 공칭 수학 및 논리 연산들을 수행한다. ALU 설계는 2개의 주요 데이터 경로들, 멀티플라이-가산 유닛(611)을 포함하는 제1 데이터 경로, 듀얼 ALU(612, 613) 체인을 포함하는 제2 데이터 경로를 갖는 것으로 간주될 수 있다. 듀얼 ALU(612, 613)은 단일 명령에서 2개의 연산들(예를 들어, 단일 명령에서의 2개의 ADD들; 단일 명령에서의 ADD 및 DIV(divide); 단일 명령에서의 감산(SUB) 및 절대값(ABS) 등)을 갖는 보다 복잡한 명령들을 허용한다. 입력 피연산자들은 레지스터들에서 수신 가능하다. 다양한 실시예들은 연산 코드에 첨부되는 즉시 피연산자들의 사용을 포함할 수 있다. 출력 결과는 레지스터에 기입된다.
c.2D 시프트 레지스터 실시예들
도 7a는 2차원 레지스터 어레이 구조의 논리적 (및 잠재적으로 물리적인) 설계의 "하향식(top-down)" 도면의 일 실시예를 도시한다. 도 7a의 "하향식" 도면은 본질적으로도 도6의 유닛 셀 설계 실시예에 따르며, 여기서 특정 어레이 위치의 각 레지스터 파일은 좌측, 우측, 위 및 아래 이웃하는 유닛 셀 위치의 레지스터 파일에 결합된다. 즉, 예를 들어, 도 7a에 도시된 것처럼, 레지스터 파일 A는 레지스터 파일들 B, C, D 및 E에 결합된다.
도 7b는 2차원 레지스터 어레이 구조의 논리적 (및 잠재적으로 물리적인) 설계의 "하향식" 도면의 다른 실시예를 도시한다. 도 7b에서 관찰되는 것처럼, 유닛 셀들은 가장 가까운 수직 및 수평 이웃들뿐만 아니라 두번째로 가까운 수직 및 수평 이웃들에도 결합된다. 예를 들어, 도 7b에서 관찰되는 것처럼, 유닛 셀(A)은 유닛 셀들(B, C, D 및 E)에 결합될 뿐만 아니라 유닛 셀들(F, G, H 및 I)에도 결합된다. 용이한 그리기 및 보기를 위해, 유닛 셀(A)만이, 가장 가까운 이웃 커플링 및 두번째로 가까운 이웃 커플링을 모두 갖는데 필요한 연결들의 전체 세트를 갖는 것으로 도시된다. 유닛 셀(A) 이외에, 모든 다른 유닛 셀만이 임의의 특정 로우 또는 컬럼을 따라 두번째로 가까운 이웃 커플 링을 나타낸다(예를 들어, 유닛 셀(B)는 임의의 두번째로 가까운 이웃 커플링을 나타내지 않음). 독자는, 바람직한 실시예가, 예를 들어, 코어 내의 모든 유닛 셀들에 대한 유닛 셀(A)의 결합을 포함하고 그리고 두번째로 가까운 이웃 커플링을 지원하기 위해 어레이 에지들로부터 충분히 떨어져 있음을 이해할 것이다.
두 번째로 가까운 연결을 갖는 것은 레지스터 어레이를 통해 레지스터 값들의 보다 빠른 전파를 제공한다. 예를 들어, 레지스터 값이 4 위치들이 떨어져 있는 유닛 셀로 이동될 필요가 있는 경우, 도 7b의 어레이 구조는 2 사이클들에서 이동을 달성할 수 있는 반면, 도 7b의 어레이 구조는 단지 4 사이클들에서 동일한 이동을 달성할 수 있다. 도 7b의 실시예는 또한 가장 가까운 이웃 연결들을 갖는 것을 알 수 있다. 따라서, 도 7b의 구조에 대해 설정된 프로세서 명령 세트는 도 7a의 구조에 대해 설정된 프로세서 명령보다 더 확장될 수 있다(전자는 하나의 홉 및 2개의 홉 MOV 명령어를 가지는 반면, 후자는 단지 하나의 홉 MOV 명령어들만 가짐).
상이한 번호가 매겨진 홉 움직임들의 수 및 조합 그리고 대응하는 어레이 구조 실시예들은, 신속한 레지스터 값 이동에 대한 필요성과 어레이 구조 배선 밀도에 대한 허용치 사이의 적절한 트레이드 오프 밸런스에 따라 실시예마다 매우 다양할 수 있음을 언급하는 것이 타당하다. 일부 실시예들은 세번째 및/또는 네번째로 가까운 이웃 연결들을 지원할 수 있고, 다른 실시예들은 지원하지 않을 수 있다(네번째로 가까운 이웃 연결들의 경우, 예를 들어, 유닛 셀(D)가 도 7b의 유닛 셀(J)에 직접 결합된다). 일부 실시예들은 단지 가장 가까운 이웃 연결들 및 세번째로 가깝거나 또는 더 먼 연결들을 가질 수 있다. 보다 정교한 실시예들은 대각선 연결들(예를 들어, 유닛 셀(A)을 유닛 셀(K) 및 도 7b에서의 다른 3개의 이웃하는 코너 유닛 셀과 연결함)을 지원할 수도 있다. 통상의 기술자는, 유닛 셀들 사이의 다양하고 확장된 연결들 중 일부가, 입력들의 소스들을 입력 멀티플렉서 구조(604)로 확장하고 그리고 도 6a의 출력 멀티플렉서 구조(603)로부터의 팬-아웃을 확장시킴으로써 용이하게 구현될 수 있음을 인식할 것이다.
도 8a는 2차원 레지스터 어레이 구조 내의 로우 또는 컬럼을 따르는 레지스터들의 예시적인 논리 구조를 도시한다(용이하게 그리기 위해, 레지스터 어레이는 단지 8x8 치수를 가지지만, 실제로는 치수들은 훨씬 클 수 있음). 여기서, 프로세싱되는 어레이 내의 이웃하는 픽셀들은 수치적으로 이웃하는 유닛 셀들에 위치될 것이다(예를 들어, 어레이 내의 한 쌍의 이웃하는 픽셀들은 유닛 셀들(3 및 5)보다는 유닛 셀들(3 및 4)에 배치될 것이다). 도 8a의 논리적 설계는 또한 연결(801)을 통해 제1 논리 유닛 셀(1)을 마지막 유닛 셀(8)에 결합함으로써 롤 기능을 포함한다(따라서, 실행 레인의 프로세서들은 롤 연산 코드를 또한 포함할 수 있다).
그러나, 특히, 도 8a의 설계가 논리적 설계를 나타낼 뿐만 아니라 물리적 설계를 나타내면, 큰 치수의 어레이들의 경우에 문제들이 발생할 수 있다. 도 8a의 접근법이 또한 물리적 설계를 나타내는 경우, 연결(801)은 쌍(1 및 8) 이외의 유닛 셀 쌍들을 연결하는 다른 와이어들의 길이와 비교하여 매우 긴 길이의 와이어에 대응한다. 이러한 특정 와이어 길이 이상값은, (모든 유닛 셀들 사이의 모든 시프트 시간들을 가장 느린 l <-> 8 시프트 시간보다 느리게 하거나 또는 임의의 다른 인접한 단위 셀 사이의 시프트보다 l <-> 8 시프트 사이에 더 많은 사이클을 인식하는 복잡성을 도입함으로써) 회로 타이밍 복잡성들에 영향을 줄 수 있다.
도 8b는 도 8a의 논리적 설계를 갖는 레지스터 어레이 구조의 로우 또는 컬럼에 대한 개선된 물리적 설계의 실시예를 도시한다. 여기서, 물리적 설계는 (논리 설계와 마찬가지로) 논리적 연결들과 대조되는 회로 구조들의 실제 레이아웃에 해당한다. 도 8b에서 관찰된 것처럼, 물리적 설계는 레이아웃의 논리에 토로이드(toroid) 설계를 부과함으로써 다른 유닛 셀들 사이의 l <-> 8 연결에 의해 요구되는 여분의 길이를 상각한다. 예를 들어, 유닛 셀(1)이 논리 설계를 보존하기 위해 유닛 셀(2)에 물리적으로 접속되더라도, 유닛 셀(8)은 유닛 셀(1)과 유닛 셀(2) 사이에 물리적으로 위치한다. 그 결과는, 도 8b의 구조에서 유닛 셀들 사이의 최대 와이어 길이로서, 이는 도 8a의 와이어(801)의 길이보다 훨씬 짧다. 이와 같이, 도 8b의 구조의 타이밍 복잡성들은 상기에서 언급한 도 8a의 구조의 타이밍 복잡성을 회피한다. 일 실시예에서, 모든 유닛 셀들 사이에서 레지스터 콘텐트의 롤은 단일 사이클 내에서 발생할 수 있다.
도 8c는, 시트 발생기 또는 랜덤 액세스 메모리(802)(예를 들어, 도 4의 임의의 RAM들(407))와 레지스터 어레이의 로우 또는 컬럼 사이의 데이터 버스 구조가, 토로이드 물리적 레이아웃을 갖는 어레이 또는 로우에 대한 올바른 논리 연결들을 보존하기 위해 일종의 스위즐링(swizzling) 구조(803)를 포함하는 것을 도시한다. 도 8d는 임의의 레지스터 값에 의해 이동된 최대 거리가 4 유닛 셀들인 4-홉 시프트들을 구현할 수 있는 또 다른 토로이드 구조를 도시한다. 여기서, 또 다른 스위즐링과 같은 데이터 버스가 도 8d의 레지스터들과 시트 생성기 또는 RAM 사이에 존재한다는 것이 명백해야 한다. 그와 같이, 토로이드 물리적 레이아웃 구현의 피처는 논리적 순서로 배열된 입력들을 연결하는 데이터 버스에 의한 스위즐링의 존재이다.
도 8e는 시프트 어레이 구조의 유닛 셀의 출력 멀티플렉서(804)로부터의 특별한 팬-아웃 회로를 도시한다. 여기서, 출력 멀티플렉서(804)는 도 6a의 출력 멀티플렉서(603)와 유사하게 간주될 수 있다. 시프트 어레이가 점점 더 많은 연결들(하나의 홉, 2개의 홉 등)을 지원하도록 설계됨에 따라, 출력 멀티플렉서(804)의 팬 아웃(fan-out)이 커진다. 멀티플렉서(804)의 팬-아웃(fan-out)이 증가함에 따라, 전력 소비는 점점 더 큰 문제가 될 수 있다. 도 8e는 하나의 홉 및 두 개의 연결들 모두를 완전히 지원하는 시프트 레지스터 어레이에 대한 출력 멀티플렉서(804)를 도시한다. 여기서, 도 8e에서 관찰된 논리 게이트들의 존재 없이, 멀티플렉서(804)에서의 새로운 출력(예를 들어, 새로운 시프트 아웃 값)은 8개의 상이한 위치들(좌측 이웃, 우측 이웃, ..., 2 홉 하부 이웃)로 방송될 것이다. 여기서, 당업계에서 이해되는 바와 같이, 논리 회로에서 와이어의 실행-길이(run length)를 가로지르는 데이터의 변화는 차례로 전력을 소비하는 "스위칭 동작(switching activity)"에 대응한다.
멀티플렉서(804)의 출력에서 관찰된 8개의 논리 게이트들의 존재는 시프트 방향에 대응하는 실제 와이어를 제외하고 그러한 데이터 변경을 방지하도록 설계된다. 예를 들어, 시프트 방향이 우측으로 1-홉이면, 바로 우측 이웃에 결합된 게이트만이 멀티플렉서(804)의 출력을 통과하게 할 것이다. 다른 모든 논리 게이트들은 데이터 값이 다른 노드들(시프트 값이 필요하지 않은 곳)로 전달되는 것을 방지하고 그리고 프로세스에서 시프트 동작의 전력 소비를 줄인다.
d. 노트의 추가적인 실행 레인 동작들
도 9는 실행 레인 어레이 내의 실행 레인이 상이한 데이터 비트 폭들을 처리하도록 허용하는 기술에 관한 것이다. 여기서, 당업계에서 이해되는 것처럼, 보다 큰 동적 범위는 데이터 값들의 비트 폭을 증가시킴으로써 달성된다(16 비트값은 8 비트값보다 더 큰 동적 범위로 값을 나타낼 수 있다). 일 실시예에서, 스텐실 프로세서들은 8, 16 또는 32 비트 픽셀값들과 같은 상이한 비트 폭들을 갖는 이미지상에서 동작할 것으로 예상된다. 이와 같이, 하나의 접근법에 따르면, 실행 레인들은 내부적으로 32 비트 피연산자들을 처리할 수 있다는 점에서 실행 레인들 자체는 32 비트 머신들이다.
하지만, 2차원 시프트 레지스터의 크기 및 복잡성을 감소시키기 위해, 각 실행 레인의 레지스터 파일 내의 레지스터들의 개별 저장 요소들은 8비트들로 제한된다. 8비트 이미지 데이터의 경우, 전체 데이터 시트가 레지스터 파일의 하나의 레지스터에 들어갈 수 있기 때문에 아무런 문제가 없다. 대조적으로, 16 또는 32비트 피연산자의 경우, 시트 생성기는 입력 피연산자 데이터 세트를 적절히 표현하기 위해 다수의 시트들을 생성한다.
예를 들어, 도 9에 도시된 것처럼, 16비트 입력 피연자들의 경우, 시트 발생기는 HI 절반 시트 및 LO 절반 시트를 생성할 것이다. HI 절반 시트는 올바른 어레이 위치에 각 데이터 항목의 상위 8비트들을 포함한다. LO 절반 시트는 올바른 어레이 위치에 각 데이터 항목의 하위 8비트들을 포함한다. 이후, 16비트 연산은 양 시트들을 스텐실 프로세서에 로딩하고(예를 들어, 프로그램 코드의 즉시 값을 통해) 16 비트 동작이 실행될 실행 레인 하드웨어에 통지함으로써 수행된다. 여기서, 가능한 하나의 동작 모드로서, HI 및 LO 시트들은 각각의 실행 레인의 레지스터 파일의 2개의 상이한 레지스터들에 로딩된다.
실행 레인 유닛들은, 먼저 레지스터 파일 위치들 중 하나로부터 판독하고 다른 레지스터 파일 위치들로부터 판독된 데이터로 그 내부에 데이터를 첨부함으로써 정확한 피연산자들을 구성할 수 있다. 유사하게, 기입 방향에서, 실행 레인 유닛들은 2회의 기입들을 수행해야 할 것이다. 구체적으로, LO 시트를 포함하는 레지스터 파일의 제1 레지스터에 하위 8 비트들의 제1 기록을 하고, 이후, HI 시트를 포함하는 레지스터 파일의 제2 레지스터에 상위 8 비트의 제2 기록을 한다.
이전의 논의들로부터, 다양한 실시예에서, 단지 하나의 레지스터의 콘텐트로부터의 시프트들이 사이클마다 시프트되는 것이 허용됨을 상기한다. 이러한 경우들에, 2 차원 시프트 레지스터 구조를 중심으로 16비트 데이터 값을 이동시키기 위해, 8비트 데이터 값들의 경우에 1 사이클보다는 (수학 연산 사이의) 시프트 시퀀스마다 2 사이클들이 소모된다. 즉, 8비트 데이터 값들의 명목상의 경우에 모든 데이터가 단일 사이클에서 위치들 간에 이동될 수 있다. 대조적으로, 16비트 데이터 값들의 경우, 2개의 8 비트값들이 시프트 레지스터 시프트 동작(HI 절반 시트 및 LO 절반 시트)마다 시프트되어야 한다. 일 실시예에서, 32비트들의 경우, 4개의 시트들이 2개의 시트들이 아닌 전체 이미지 데이터를 나타내기 위해 생성된다는 것을 제외하고 동일한 원리들이 적용된다. 마찬가지로, 시프트 시퀀스마다 4 사이클들을 소비해야 할 필요도 있다. 8비트 레지스터 폭들에 대한 논의는 단지 예시일 뿐임을 알아야 한다. 일반적으로 임의의 비트 폭이 가능하다(예를 들어, 실행 레인 내부의 32비트 폭 회로를 갖는 레지스터 파일 내의 16비트 폭 레지스터들이 가능하다).
도 10은 동작 동안 실제 하드웨어 내에 경쟁 메모리 액세스들이 존재하지 않도록 랜덤 메모리 액세스를 전개하는 컴파일러 동작에 관한 것이다. 여기서, 도 10의 절차는 더 높은 레벨의 가상 코드 상에서 동작되는 데이터 및 하부 머신의 물리적 한계들을 고려한 오브젝트 코드의 구조화에 관한 것이다. 전술한 것처럼, 실행 레인 어레이의 각 실행 레인은 연관된 레지스터 파일 (예를 들어, 실행 레인마다 4개의 레지스터들)을 갖는다. 대부분의 실행 레인들과 마찬가지로, 실행 레인은 오브젝트 코드 명령어들과 일치하는 레지스터들로부터/레지스터들로 데이터를 판독/기입한다. 컴파일러는, 대부분의 컴파일러들와 마찬가지로, 어떤 데이터가 어떤 레지스터에 상주하는지 인식하고 그리고 사용가능한 레지스터 공간의 물리적 한계들을 인식한다.
그와 같이, 때때로 실행 레인은 레지스터 공간에 있지 않지만 실행 레인 어레이의 실행 레인의 로우 및/또는 컬럼과 연관된 랜덤 액세스 메모리에 위치하는 데이터 항목이 필요할 수 있다. 마찬가지로, 때때로 실행 레인은 데이터 항목을 기입할 필요가 있지만, 데이터가 기입될 수 없는 레지스터 공간이 없다(이는 레지스터 공간에 있는 모든 데이터에는 여전히 종속성들을 가지고 있기 때문이다). 이러한 상황에서, 컴파일러는 레지스터 공간이 아닌 랜덤 액세스 메모리로/랜덤 액세스 메모리로부터 데이터를 페치/기입하기 위해 메모리 로드 또는 메모리 저장 명령을 오브젝트 코드(레지스터 로드 또는 레지스터 저장 명령어와 반대이)에 삽입한다.
도 10은 어레이의 각 로우를 따라 개별 랜덤 액세스 메모리(1007_1 내지 1007_R)를 도시하는 하드웨어 아키텍처의 실시예를 도시한다. 이 아키텍처에서 실행 레인 어레이의 동일한 로우를 따르는 실행 레인은 동일한 랜덤 액세스 메모리에 액세스할 수 있다. 도시된 바와 같이, 각 실행 레인은 각각의 랜덤 액세스 메모리에 액세스하기위한 메모리 유닛을 포함한다. 따라서, 상이한 행들에 있는 2개의 상이한 실행 레인들이 동일한 사이클 동안 메모리 로드 명령을 실행할 때, 명령들은 상이한 랜덤 억세스 메모리들로 보내지기 때문에 명령들은 경쟁하지 않는다.
대조적으로 같은 로우에 있는 실행 레인이 동일한 사이클에서 메모리 액세스를 수행하면 메모리 액세스는 경쟁하게 된다. 실행 레인 어레이가 SIMD와 같은 방식으로 작동하도록 의도된 경우, 프로그램 코드는 당연히 어레이의 실행 레인들(로우들과 컬럼들 모두 포함)이 동일한 사이클에서 메모리 액세스 요청을 발생하게 한다. 따라서, 동일한 로우에 있는 실행 레인들과 경쟁하는 메모리 액세스는 예측 가능한 위험이다. 도 10은 동일한 행에 있는 2개의 상이한 실행 레인 상에서 실행하기 위한 한 쌍의 스레드들(1001)을 도시한다. 머신의 SIMD와 비슷한 특성을 감안할 때, 2개의 실행 레인들 모두 첫 번째 2개의 도시된 사이클들에서 한 쌍의 메모리 로드 명령들을 포함하여 동일한 사이클에서 동일한 연산 코드들을 실행한다. 메모리 로드 명령들의 주소들 검사할 때 모든 주소들이 상이하다는 점에 유의해야 한다. 따라서, 두 스레드들의 첫 번째 메모리 로드 명령은 실제로 서로 경쟁하고 두 스레드들의 두 번째 메모리 로드 명령어는 실제로 서로 경쟁한다.
그와 같이, 컴파일러가 메모리 로드 명령을 오브젝트 코드에 부과할 때, 컴파일러는 메모리 로드 명령들이 동일한 로우에 있는 실행 레인에 대해 충돌들을 발생하게 한다는 것을 또한 인식한다. 이에 대한 응답으로, 컴파일러는, 동일한 로우를 따라 경쟁 메모리 로드 명령을 효과적으로 전개하기 위해 순차적 메모리 로드 명령들을 코드에 적용하여, 각 실행 레인은 메모리를 액세스하기 위한 자체의 예약된 사이클을 제공받는다. 도 10의 예에서, 최종 오브젝트 코드(1002)는, 하나의 실행 레인의 메모리 액세스가 동일한 로우를 따라 다른 실행 레인의 메모리 액세스와 간섭하지 않도록 보장하기 위해 4개의 사이클들에 걸친 4개의 순차적 메모리 로드 명령들의 시퀀스를 포함한다.
도 10의 접근법은 섹션 1.0에서 상기에서 논의된 메모리 모델의 룩업 테이블 부분에 특히 적용 가능함을 알 수 있다. 여기서, 동일한 사이클에서 동일한 룩업 테이블의 상이한 엔트리들에 액세스하도록 상이한 실행 레인들이 동일한 룩업 테이블에서 상이한 인덱스들을 사용할 수 있음을 상기하자. 일 실시예에서, 컴파일러는 동일한 룩업 테이블의 상이한 카피를 각각의 랜덤 액세스 메모리(1007_1 내지 1007_R)로 인스턴스화할 것이다. 따라서, 다른 로우들에 있는 실행 레인에 의해 동일한 사이클 동안 로컬 테이블 카피를 조회할 수 있다. 이러한 조회는 경쟁하지 않으며 각 조회의 인덱스는 상이할 수 있다. 대조적으로, 동일한 로우를 따라 실행 레인들에 의해 수행되는 조회들은 동일한 메모리의 동일한 룩업 테이블에 액세스할 것이고, 전개되고 순차적으로 수행될 필요가 있을 것이다. 순차적인 액세스로 전개하면 인덱스 값들은 상이할 수 있다. 일 실시예에서, 오브젝트 코드의 VLIW 명령 포맷은, 수학 연산을 위한 연산 코드와 함께, 실제로 명령을 실행할 것으로 예상되는 로우를 따라 실행 레인의 신원을 더 포함하는 메모리 연산을 위한 연산 코드를 포함한다(그 로우를 따르는 다른 실행 레인들은 어떤 연산도 하지 않는다).
다양한 실시예들에서, 컴파일러는 룩업 테이블들과 유사하게 아토믹 업데이트 명령들을 취급한다. 즉, 메모리 공간은 아토믹 명령 결과들에 대한 랜덤 액세스 메모리들(1007_1 내지 1007_R)에서 (예를 들어, 로우마다) 예약된다. (예를 들어, 상이한 로우들을 따라 동일하게 위치된 실행 레인으로부터의) 경쟁하지 않는 업데이트들은 동일한 사이클동안 실행되도록 허용되는 반면에, (예를 들어, 동일한 로우를 따르는 실행 레인들에 의한) 경쟁하는 업데이트들은 개별 명령들로 전개된다. 아토믹 업데이트 명령들은 종종 컴파일러에서 판독-수정-기입 명령들로 구현되고, 실행 레인의 레지스터 공간에 있는 최근 결과 데이터를 판독하는 경우, 이러한 데이터는 수학적으로 연산된 다음 특별히 예약된 아토믹 업데이트 테이블에 기록된다.
e. 구현 실시예들
상기에서 서술된 다양한 이미지 프로세서 아키텍처 피처들은 반드시 종래의 의미에서의 이미지 프로세싱으로 제한되지는 않으며, 따라서 이미지 프로세서가 재-특성화될 수 있는(또는 재-특성화되지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있음을 유의해야 한다. 예를 들어, 상기에서 서술된 다양한 이미지 프로세서 아키텍처 피처들 중 임의의 것이 실제 카메라 이미지들의 프로세싱과는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용되면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특징지어질 수 있다. 부가적으로, 상기에서 서술된 이미지 프로세서 아키텍처 피처들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 애플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 더 범용적인 프로세서(예를 들어, 컴퓨팅 시스템의 CPU나 CPU의 일부분)와 통합될 수 있거나 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다.
상기에서 서술한 하드웨어 설계 실시예드들은 반도체 칩 내에서 그리고/또는 반도체 제조 프로세스의 최종 타깃을 위한 회로 설계의 설명으로서 구현될 수 있다. 후자의 경우, 그와 같은 회로 서술들은, 상위/행동 레벨 회로 서술들(예: VHDL 서술) 또는 하위 레벨 회로 서술(예: 레지스터 전송 레벨(RTL) 서술, 트랜지스터 레벨 서술 또는 마스크 서술), 또는 이들의 다양한 조합들의 형태를 취할 수 있다. 회로 서술들은 통상적으로 컴퓨터 판독 가능 저장 매체(예를 들어, CD-ROM 또는 다른 유형의 저장 기술)로 구현된다.
이전 섹션들로부터, 상기에서 서술된 이미지 프로세서는 (예를 들어, 휴대용 디바이스의 카메라로부터의 데이터를 처리하는 휴대용 디바이스의 시스템 온 칩 (SOC)의 일부로서) 컴퓨터 시스템상의 하드웨어로 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로 구현되는 경우들에서, 이미지 프로세서에 의해 프로세싱되는 이미지 데이터는 카메라로부터 직접 수신될 수 있음을 알 수 있다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송한다).이전 섹션들에서 서술된 많은 피처들이 (애니메이션을 렌더링하는) 그래픽 처리 유닛에도 적용될 수 있음을 알 수 있다.
도 11은 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 서술되는 컴퓨팅 시스템의 많은 컴포넌트들은 통합된 카메라 및 관련 이미지 프로세서를 갖는 컴퓨팅 시스템(예: 스마트 폰 또는 태블릿 컴퓨터와 같은 휴대용 디바이스)에 적용가능하다. 통상의 기술자는 이 두 가지를 쉽게 구분할 수 있다.
도 11에서 관찰되는 바와 같이, 기본 컴퓨팅 시스템은, 중앙 처리 유닛(1101)(예를 들어, 복수의 범용 프로세싱 코어들(1115_1 내지 1115_N) 및 멀티-코어 프로세서 또는 애플리케이션 프로세서상에 배치된 메인 메모리 제어기(1117)를 포함할 수 있음), 시스템 메모리(1102), 디스플레이(1103)(예컨대, 터치 스크린, 플랫 패널), 로컬 유선 점-대-점 링크(예를 들어, USB) 인터페이스(1104), 다양한 네트워크 I/O 기능들(1105)(예를 들어, 이더넷 인터페이스 및/또는 셀룰러 모뎀 서브시스템), 무선 로컬 영역 네트워크(예를 들어, 와이파이) 인터페이스(1106), 무선 점-대-점 링크(예를 들어, 블루투스) 인터페이스(1107) 및 글로벌 포지셔닝 시스템 인터페이스(1108), 다양한 센서들(1109_1 내지 1109_N), 하나 이상의 카메라들(1110), 배터리(1111), 전력 관리 제어 유닛(1112), 스피커 및 마이크로폰(1113) 및 오디오 코더/디코더(1114)를 포함한다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(1150)는 그 CPU(1101) 내에 하나 이상의 범용 프로세싱 코어들(1115), 하나 이상의 그래픽 프로세싱 유닛들(1116), 메모리 관리 기능(1117)(예를 들어, 메모리 제어기), I/O 제어 기능(1118) 및 이미지 프로세싱 유닛(1119)을 포함한다. 범용 프로세싱 코어들(1115)은 통상적으로 컴퓨팅 시스템의 운영 시스템 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛들(1116)은 통상적으로 그래픽 집중 기능을 실행하여, 예를 들어, 디스플레이(1103) 상에 표시되는 그래픽 정보를 생성한다. 메모리 제어 기능(1117)은 시스템 메모리(1102)로/시스템 메모리(1102)로부터 데이터를 기입/판독하기 위해 시스템 메모리(1102)와 인터페이스한다. 전력 관리 제어 유닛(1112)은 일반적으로 시스템(1100)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(1119)은 이전 섹션들에서 전술한 이미지 프로세싱 유닛 실시예들 중 임의의 것에 따라 구현될 수 있다. 선택적으로 또는 조합하여, IPU(1119)는 GPU(1116) 및 CPU(1101) 중 하나 또는 둘 모두의 코-프로세서(co-processor)로서 결합될 수 있다. 또한, 다양한 실시예들에서, GPU(1116)는 상기에서 서술된 이미지 프로세서피처들 중 임의의 것으로 구현될 수 있다.
터치 스크린 디스플레이(1103), 통신 인터페이스들(1104 내지 1107), GPS 인터페이스(1108), 센서들(1109), 카메라(1110) 및 스피커/마이크로폰(1113) 코덱(1113) 각각은, 적절한 통합된 주변 장치(예를 들어, 하나 이상의 카메라들(1110))를 포함하는 전체 컴퓨팅 시스템에 관련된 다양한 형태의 I/O(입력 및/또는 출력)으로 간주될 수 있다. 구현에 따라, 이들 I/O 컴포넌트들 중 다양한 것들은 애플리케이션 프로세서/멀티-코어 프로세서(1150) 상에 통합될 수 있거나, 다이 외부 또는 애플리케이션 프로세서/멀티 코어 프로세서(1150)의 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라들(1110)은 그 시야에서 카메라와 객체 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행하는 애플리케이션 소프트웨어, 운영 체제 소프트웨어, 장치 드라이버 소프트웨어 및/또는 펌웨어는, 상기에서 서술한 기능들 중 임의의 것을 수행할 수 있다.
본 발명의 실시예는 상기에서 서술된 것처럼 다양한 프로세스들을 포함할 수 있다. 프로세스들은 기계 실행 가능 명령어들로 구현될 수 있다. 명령어들은 범용 또는 특수용 프로세서가 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안적으로, 이러한 프로세스들은, 프로세스들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해 또는 프로그래밍된 컴퓨터 컴포넌트들 및 커스텀 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 또한 기계 실행가능한 명령어들을 저장하기 위한 기계 판독가능한 매체로서 제공될 수 있다. 기계 판독 가능한 매체는 플로피 디스켓들, 광 디스크들, CD-ROM들 및 광 자기 디스크들, 플래시 메모리, ROM들, RAM들, EPROM들, EEPROM들, 자기 또는 광학 카드들, 전파 매체 또는 전자 명령어들을 저장하기에 적합한 다른 유형의 매체/기계 판독 가능한 매체를 포함할 수 있지만, 이에 제한되지 않는다. 예를 들어, 본 발명은, 통신 링크(예를 들어, 모뎀 또는 네트워크 접속)를 통해 반송파 또는 다른 전파 매체에 구현되는 데이터 신호들에 의해, 원격 컴퓨터(예를 들어, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송될 수 있는 컴퓨터 프로그램으로서 다운로드 될 수 있다.
전술한 명세서에서, 본 발명은 특정 실시예들을 참조하여 기술되었다. 그러나, 첨부된 청구 범위에 서술된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않은채 다양한 변경들 및 수정들이 이루어질 수 있음이 명백할 것이다. 그에 따라, 명세서 및 도면들은 제한적인 의미 라기보다는 예시적인 것으로 간주되어야 할 것이다.

Claims (28)

  1. 컴퓨팅 디바이스로서,
    복수의 실행 레인들을 포함하는 스텐실 프로세서와; 그리고
    다수의 명령 연산 코드(opcode)들을 갖는 명령어를 수신하도록 구성된 스칼라 레인을 포함하고,
    상기 명령어는: (1) 상기 스칼라 레인에 의해 수행될 스칼라 연산에 대응하는 스칼라 연산 코드, 및 (2) 상기 복수의 실행 레인들 각각에 의해 수행될 하나 이상의 실행 레인 동작들에 대응하는 실행 레인 연산 코드를 포함하고,
    상기 명령어를 수신할 때, 상기 스칼라 레인은 상기 스칼라 연산을 실행하고 그리고 상기 실행 레인 연산 코드를 상기 복수의 실행 레인들 각각에 브로드캐스트(broadcast)하도록 구성되는 것을 특징으로 하는
    컴퓨팅 디바이스.
  2. 제1항에 있어서,
    상기 스칼라 레인은 상기 복수의 실행 레인들 각각에 상기 실행 레인 연산 코드를 방송하기 전에 상기 스칼라 연산을 실행하도록 구성되는 것을 특징으로 하는
    컴퓨팅 디바이스.
  3. 제1항에 있어서,
    상기 실행 레인 연산 코드는 상기 복수의 실행 레인들 중 하나 이상에 의해 수행될 메모리 동작에 대응하는 메모리 연산 코드인 것을 특징으로 하는
    컴퓨팅 디바이스.
  4. 제3항에 있어서,
    복수의 메모리 유닛들을 더 포함하고,
    실행 레인들의 다수의 그룹들 각각은 상기 복수의 메모리 유닛들 중 하나의 메모리 유닛을 공유하며,
    상기 명령어는, 메모리 유닛을 공유하는 실행 레인들의 각 그룹 내에서 어느 실행 레인이 상기 메모리 동작을 실행할지를 지정하는 필드를 포함하는 것을 특징으로 하는
    컴퓨팅 디바이스.
  5. 제1항에 있어서,
    상기 명령어는 상기 스칼라 연산 코드 및 다수의 실행 레인 연산 코드들을 포함하는 것을 특징으로 하는
    컴퓨팅 디바이스.
  6. 제5항에 있어서,
    상기 다수의 실행 레인 연산 코드들은,
    (1) 각 실행 레인에 의해 수행될 수학 연산에 대응하는 제1 수학 연산 코드와; 그리고
    (2) 하나 이상의 실행 레인들에 의해 수행될 메모리 동작에 대응하는 메모리 연산 코드를 포함하는 것을 특징으로 하는
    컴퓨팅 디바이스.
  7. 제1항에 있어서,
    상기 스칼라 연산은, 상기 스칼라 레인에 의해 실행될 때, 상기 스칼라 레인이 데이터 값을 상기 복수의 실행 레인들 각각에 브로드캐스트하도록 하는 것을 특징으로 하는
    컴퓨팅 디바이스.
  8. 제7항에 있어서,
    상기 복수의 실행 레인들 각각에 브로드캐스트되는 상기 데이터 값은 상기 명령어의 즉시 피연산자(immediate operand)인 것을 특징으로 하는
    컴퓨팅 디바이스.
  9. 제7항에 있어서,
    스칼라 메모리 유닛을 더 포함하고,
    상기 복수의 실행 레인들 각각에 브로드캐스트되는 상기 데이터 값은 상기 스칼라 메모리 유닛에 저장되는 값인 것을 특징으로 하는
    컴퓨팅 디바이스.
  10. 제1항에 있어서,
    이미지 데이터의 시트들을 상기 스텐실 프로세서에 제공하도록 구성되는 시트 생성기를 더 포함하고, 상기 스칼라 연산은, 상기 스칼라 레인에 의해 실행될 때, 상기 스칼라 레인으로 하여금 상기 스텐실 프로세서에 이미지 데이터의 시트를 제공하도록 상기 시트 생성기에 요구하는 것을 특징으로 하는
    컴퓨팅 디바이스.
  11. 제10항에 있어서,
    상기 스칼라 레인은, 상기 스텐실 프로세서에 이미지 데이터의 시트를 제공하도록 상기 시트 생성기에 요구한 후에, 상기 복수의 실행 레인들 각각에 무작동(no-operation) 연산 코드들을 브로드캐스트하도록 구성되는 것을 특징으로 하는
    컴퓨팅 디바이스.
  12. 방법으로서,
    스텐실 프로세서가 복수의 실행 레인들을 포함하는 단계와;
    스칼라 레인 및 복수의 실행 레인들을 갖는 스텐실 프로세서의 스칼라 레인에 의해, 다수의 명령 연산 코드들을 갖는 명령어를 수신하는 단계 - 상기 명령어는: (1) 상기 스칼라 레인에 의해 수행될 스칼라 연산에 대응하는 스칼라 연산 코드, 및 (2) 상기 복수의 실행 레인들 각각에 의해 수행될 하나 이상의 실행 레인 동작들에 대응하는 실행 레인 연산 코드를 포함하며 - 와;
    상기 스칼라 레인에 의해, 상기 스칼라 연산 코드에 대응하는 상기 스칼라 연산을 실행하는 단계와; 그리고
    상기 하나 이상의 실행 레인 동작들에 대응하는 상기 실행 레인 연산 코드를 상기 복수의 실행 레인들 각각으로, 상기 스칼라 레인에 의해, 브로드캐스트하는 단계를 포함하는 것을 특징으로 하는
    방법.
  13. 제12항에 있어서,
    상기 스칼라 연산을 실행하는 단계는, 상기 실행 레인 연산 코드를 상기 복수의 실행 레인들 각각으로 브로드캐스트하기 전에 상기 스칼라 연산을 실행하는 단계를 포함하는 것을 특징으로 하는
    방법.
  14. 제12항에 있어서,
    상기 실행 레인 연산 코드는 상기 복수의 실행 레인들 중 하나 이상에 의해 수행될 메모리 동작에 대응하는 메모리 연산 코드인 것을 특징으로 하는
    방법.
  15. 제14항에 있어서,
    상기 스텐실 프로세서는 복수의 메모리 유닛들을 포함하고, 실행 레인들의 다수의 그룹들 각각은 상기 복수의 메모리 유닛들 중 하나의 메모리 유닛을 공유하고, 상기 명령어는, 메모리 유닛을 공유하는 실행 레인들의 각 그룹 내에서 어느 실행 레인이 상기 메모리 동작을 실행할지를 지정하는 필드를 포함하며,
    특정 메모리 유닛을 공유하는 실행 레인들의 그룹의 각 실행 레인에 의해, 상기 메모리 동작을 실행할 실행 레인들의 그룹 중 특정 실행 레인을 지정하는 필드를 수신하는 단계와; 그리고
    상기 특정 메모리 유닛을 공유하는 실행 레인들의 그룹에 속하는 실행 레인들 중 상기 특정 실행 레인에 의해서만, 상기 특정 메모리 유닛을 사용하여 상기 메모리 연산 코드에 대응하는 상기 메모리 동작을 실행하는 단계를 포함하는 것을 특징으로 하는
    방법.
  16. 제12항에 있어서,
    상기 명령어는 상기 스칼라 연산 코드 및 다수의 실행 레인 연산 코드들을 포함하는 것을 특징으로 하는
    방법.
  17. 제16항에 있어서,
    상기 다수의 실행 레인 연산 코드들은,
    (1) 각 실행 레인에 의해 수행될 수학 연산에 대응하는 제1 수학 연산 코드; 및
    (2) 하나 이상의 실행 레인들에 의해 수행될 메모리 동작에 대응하는 메모리 연산 코드를 더 포함하고,
    각각의 실행 레인에 의해, 상기 명령어의 제1 수학 연산 코드에 대응하는 상기 수학 연산을 실행하는 단계와; 그리고
    각각의 실행 레인에 의해, 상기 명령어의 메모리 연산 코드에 대응하는 상기 메모리 동작을 실행하는 단계를 포함하는 것을 특징으로 하는
    방법.
  18. 제12항에 있어서,
    상기 스칼라 연산을 실행하는 단계는 상기 복수의 실행 레인들 각각에 데이터 값을 브로드캐스트하는 단계를 포함하는 것을 특징으로 하는
    방법.
  19. 제18항에 있어서,
    상기 스칼라 연산을 실행하는 단계는,
    스칼라 메모리 유닛으로부터, 데이터 값을 획득하는 단계와; 그리고
    상기 스칼라 메모리 유닛으로부터 획득된 상기 데이터 값을 상기 복수의 실행 레인들 각각에 브로드캐스트하는 단계를 포함하는 것을 특징으로 하는
    방법.
  20. 제12항에 있어서,
    상기 스칼라 연산을 실행하는 단계는, 상기 스텐실 프로세서에 이미지 데이터의 시트를 제공하기 위해 시트 생성기에 대한 요청을 상기 시트 생성기에 제공하는 단계를 포함하는 것을 특징으로 하는
    방법.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
KR1020177028028A 2015-04-23 2016-04-08 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처 KR101971657B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,815 2015-04-23
US14/694,815 US9772852B2 (en) 2015-04-23 2015-04-23 Energy efficient processor core architecture for image processor
PCT/US2016/026789 WO2016171928A1 (en) 2015-04-23 2016-04-08 Energy efficient processor core architecture for image processor

Publications (2)

Publication Number Publication Date
KR20170125932A KR20170125932A (ko) 2017-11-15
KR101971657B1 true KR101971657B1 (ko) 2019-04-23

Family

ID=55963456

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177028028A KR101971657B1 (ko) 2015-04-23 2016-04-08 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처

Country Status (7)

Country Link
US (4) US9772852B2 (ko)
EP (1) EP3286722A1 (ko)
JP (3) JP6412663B2 (ko)
KR (1) KR101971657B1 (ko)
CN (1) CN107408041B (ko)
DE (1) DE112016001836T5 (ko)
WO (1) WO2016171928A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US9891955B2 (en) * 2015-12-22 2018-02-13 Nxp Usa, Inc. Heterogenous multicore processor configuration framework
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
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable 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
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
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
TWI812254B (zh) * 2017-05-17 2023-08-11 美商谷歌有限責任公司 用於訓練神經網路之方法、系統及非暫時性電腦可讀儲存媒體
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11397624B2 (en) * 2019-01-22 2022-07-26 Arm Limited Execution of cross-lane operations in data processing systems
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
GB2590521B (en) * 2020-06-18 2022-02-23 Imagination Tech Ltd Multiplexing between different processing channels
US20220197634A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Efficient divide and accumulate instruction when an operand is equal to or near a power of two

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140164737A1 (en) 2012-12-06 2014-06-12 Kalray Execution efficiency in a single-program, multiple-data processor
US20140351529A1 (en) 2013-05-23 2014-11-27 Alex M. Wells Techniques for organizing three-dimensional array data

Family Cites Families (81)

* 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
US5446479A (en) * 1989-02-27 1995-08-29 Texas Instruments Incorporated Multi-dimensional array video processor system
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
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 浜松ホトニクス株式会社 高速視覚センサ装置
JP3971535B2 (ja) 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
DE60019081D1 (de) * 2000-01-31 2005-05-04 St Microelectronics Srl Verschachtelter Burst-Speicher mit Burst-Zugriff bei synchronen Lesezyklen, wobei die beiden untergeordneten Speicherfelder unabhängig lesbar sind mit wahlfreiem Zugriff während asynchroner Lesezyklen
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
US6954204B2 (en) * 2002-07-18 2005-10-11 Nvidia Corporation Programmable graphics system and method using flexible, high-precision data formats
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
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
TWI349908B (en) * 2006-09-14 2011-10-01 Au Optronics Corp Shift register, shift register array circuit, and flat display apparatus
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
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 ブラザー工業株式会社 画像処理装置および画像処理プログラム
TWI338900B (en) * 2007-08-07 2011-03-11 Au Optronics Corp Shift register array
KR101036596B1 (ko) 2007-09-05 2011-05-24 가부시키가이샤 시마쓰세사쿠쇼 고체촬상소자 및 그 구동방법
JP5020029B2 (ja) * 2007-11-16 2012-09-05 株式会社メガチップス 画像処理装置
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
US8332794B2 (en) 2009-01-22 2012-12-11 Taiwan Semiconductor Manufacturing Company, Ltd. Circuits and methods for programmable transistor array
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
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
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
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
US10007527B2 (en) * 2012-03-05 2018-06-26 Nvidia Corporation Uniform load processing for parallel thread sub-sets
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US20140019486A1 (en) 2012-07-13 2014-01-16 Amitava Majumdar Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
FR3008505B1 (fr) * 2013-07-10 2017-03-03 Thales Sa Procede d'optimisation de traitement parallele de donnees sur une plateforme materielle
US9299181B2 (en) * 2013-08-28 2016-03-29 Qualcomm Incorporated Target independent stenciling in graphics processing
US9547530B2 (en) * 2013-11-01 2017-01-17 Arm Limited Data processing apparatus and method for processing a plurality of threads
US9519479B2 (en) * 2013-11-18 2016-12-13 Globalfoundries Inc. Techniques for increasing vector processing utilization and efficiency through vector lane predication prediction
US9977678B2 (en) * 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
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
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
GB2540382B (en) * 2015-07-15 2020-03-04 Advanced Risc Mach Ltd Data processing systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140164737A1 (en) 2012-12-06 2014-06-12 Kalray Execution efficiency in a single-program, multiple-data processor
US20140351529A1 (en) 2013-05-23 2014-11-27 Alex M. Wells Techniques for organizing three-dimensional array data

Also Published As

Publication number Publication date
US11138013B2 (en) 2021-10-05
KR20170125932A (ko) 2017-11-15
JP6967570B2 (ja) 2021-11-17
US20160313999A1 (en) 2016-10-27
US10275253B2 (en) 2019-04-30
JP2020035471A (ja) 2020-03-05
US20210004232A1 (en) 2021-01-07
JP2018513473A (ja) 2018-05-24
US9772852B2 (en) 2017-09-26
JP6612403B2 (ja) 2019-11-27
WO2016171928A1 (en) 2016-10-27
US20190220282A1 (en) 2019-07-18
DE112016001836T5 (de) 2018-03-29
US20170249153A1 (en) 2017-08-31
CN107408041B (zh) 2020-09-25
JP6412663B2 (ja) 2018-10-24
US10754654B2 (en) 2020-08-25
JP2018206413A (ja) 2018-12-27
EP3286722A1 (en) 2018-02-28
CN107408041A (zh) 2017-11-28

Similar Documents

Publication Publication Date Title
KR101971657B1 (ko) 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처
CN107438860B (zh) 用于高性能功率高效的可编程图像处理的架构
US11153464B2 (en) Two dimensional shift array for image processor
KR102050899B1 (ko) 이미지 프로세서용 컴파일러 관리 메모리
US11140293B2 (en) Sheet generator for image processor
US11544060B2 (en) Two dimensional masked shift instruction
KR20180100372A (ko) 고성능의 전력 효율적인 프로그래밍 가능 이미지 처리 하드웨어 플랫폼에 프로그램 코드를 매핑하기 위한 컴파일러 기술들
KR102235056B1 (ko) 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서
KR102278021B1 (ko) 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant