KR102000894B1 - 이미지 프로세서용 다기능 실행 레인 - Google Patents

이미지 프로세서용 다기능 실행 레인 Download PDF

Info

Publication number
KR102000894B1
KR102000894B1 KR1020187010230A KR20187010230A KR102000894B1 KR 102000894 B1 KR102000894 B1 KR 102000894B1 KR 1020187010230 A KR1020187010230 A KR 1020187010230A KR 20187010230 A KR20187010230 A KR 20187010230A KR 102000894 B1 KR102000894 B1 KR 102000894B1
Authority
KR
South Korea
Prior art keywords
instruction
alu
unit
alu logic
execution
Prior art date
Application number
KR1020187010230A
Other languages
English (en)
Other versions
KR20180052721A (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 KR20180052721A publication Critical patent/KR20180052721A/ko
Application granted granted Critical
Publication of KR102000894B1 publication Critical patent/KR102000894B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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
    • 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/3001Arithmetic instructions
    • 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/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Processing Or Creating Images (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

곱셈 덧셈 계산 유닛, 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛을 갖는 실행 유닛을 포함하는 장치가 설명된다. ALU 유닛은 제1, 제2, 제3 및 제4 명령어들을 수행하는 것이다. 제1 명령어는 곱셈 덧셈 명령어이다. 제2 명령어는 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것이다. 제3 명령어는 ALU 로직 유닛들 중 하나가 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 제3 명령어의 출력 결과를 결정하는 것이다. 제4 명령어는 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 나눗셈 결과 디지트 값들을 결정하는 것이다.

Description

이미지 프로세서용 다기능 실행 레인
본 발명의 분야는 일반적으로 컴퓨팅 과학에 관한 것으로, 더 구체적으로는, 이미지 프로세서용 다기능 실행 레인에 관한 것이다.
이미지 처리는 어레이로 조직화되는 픽셀 값들의 처리를 통상적으로 포함한다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지들의 2차원 특성을 캡처한다(추가적인 차원들은 시간(예를 들어, 2차원 이미지들의 시퀀스) 및 데이터 타입(예를 들어, 컬러들)을 포함할 수 있음). 통상적인 시나리오에서, 어레이화된 픽셀 값들은 프레임들의 시퀀스 또는 정지 이미지를 생성하여 모션의 이미지들을 캡처한 카메라에 의해 제공된다. 전통적인 이미지 프로세서들은 2가지 극단들 중 어느 한 쪽에 통상적으로 해당된다.
제1 극단은 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 벡터 명령어 강화들이 있는 범용 프로세서) 상에서 실행되는 소프트웨어 프로그램들로서 이미지 처리 작업들을 수행한다. 제1 극단은 고도로 다용도인 애플리케이션 소프트웨어 개발 플랫폼을 통상적으로 제공하더라도, 관련 오버 헤드(예를 들어, 명령어 인출 및 디코드, 온-칩 및 오프-칩 데이터의 취급, 추측 실행)와 조합되는 더 정교한 데이터 구조들의 사용은 궁극적으로 프로그램 코드의 실행 동안 데이터의 단위 당 더 많은 양의 에너지가 소비되는 것을 초래한다.
제2, 반대의 극단은 고정 기능 하드와이어드 회로를 훨씬 더 큰 데이터의 블록들에 적용한다. 커스텀 설계 회로들에 직접 적용되는 (더 정교한 것과는 반대인) 더 큰 데이터의 블록들을 사용하는 것은 데이터의 단위 당 전력 소비를 매우 감소시킨다. 그러나, 맞춤 설계된 고정 기능 회로의 사용은 프로세서가 수행할 수 있는 작업들의 세트가 제한되는 것을 일반적으로 초래한다. 이와 같이, (제1 극단과 관련되는) 광범위하게 다용도인 프로그래밍 환경이 제2 극단에서는 부족하다.
데이터의 단위 당 전력 효율성이 향상되는 것과 조합되는 고도로 다용도인 애플리케이션 소프트웨어 개발 기회들 양자 모두를 제공하는 기술 플랫폼은 아직 해결책이 없지만 바람직하다.
곱셈 덧셈 계산 유닛, 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛을 갖는 실행 유닛을 포함하는 장치가 설명된다. ALU 유닛은 제1, 제2, 제3 및 제4 명령어들을 수행하는 것이다. 제1 명령어는 곱셈 덧셈 명령어이다. 제2 명령어는 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것이다. 제3 명령어는 ALU 로직 유닛들 중 하나가 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 제3 명령어의 출력 결과를 결정하는 것이다. 제4 명령어는 반복 동안 제1 ALU 로직 유닛 및 제2 ALU 로직이 교대로 연산하여 몫 디지트 값을 결정하는 반복적 나눗셈 연산을 수행하는 것이다.
이미지 프로세서의 실행 유닛을 포함하는 장치가 설명된다. ALU 유닛은 제1 명령어를 실행하기 위한 수단을 포함하며, 제1 명령어는 곱셈 덧셈 명령어이다. ALU 유닛은 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것을 포함하는 제2 명령어를 실행하기 위한 수단을 포함한다. ALU 유닛은 ALU 로직 유닛들 중 하나가 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 제3 명령어의 출력 결과를 결정하는 것을 포함하는 제3 명령어를 실행하기 위한 수단을 포함한다. ALU 유닛은 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 디지트 결과 디지트 값들을 결정하는 것을 포함하는 제4 명령어를 실행하기 위한 수단을 포함한다.
다음의 설명 및 첨부 도면들은 본 발명의 실시예들을 설명하기 위해 사용된다. 이러한 도면들에서:
도 1은 이미지 프로세서의 스텐실 프로세서 컴포넌트를 도시한다.
도 2는 실행 레인의 인스턴스 및 2차원 시프트 레지스터로의 그 연결을 도시한다.
도 3은 도 2의 실행 레인의 실시예에 의해 수행되는 기능들의 상대적인 지연을 도시한다.
도 4는 다기능 실행 레인에 대한 설계를 도시한다.
도 5a 및 도 5b는 반복적 나눗셈 연산을 수행하는 회로 및 방법론을 도시한다.
도 6은 도 3 내지 도 5a, 도 5b에 관하여 설명되는 실행 레인에 의해 수행되는 방법론을 도시한다.
도 7은 컴퓨팅 시스템의 실시예를 도시한다.
도 1은 스텐실 프로세서 아키텍처(100)의 실시예를 도시한다. 다음의 논의로부터 더 명확해지는 바와 같이, 스텐실 프로세서는 이미지 데이터의 스텐실들을 처리하도록 최적화되거나 설계되는 프로세서이다. 하나 이상의 스텐실 프로세서는 프로세서에 의해 처리되는 이미지들 상에 스텐실 기반 작업들을 수행하는 이미지 프로세서에 통합될 수 있다. 도 1에서 보여지되는 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(101), 스칼라 프로세서(102) 및 관련 메모리(103) 및 I/O 유닛(104)을 포함한다. 데이터 계산 유닛(101)은 실행 레인들(105)의 어레이, 2차원 시프트 어레이 구조(106) 및 어레이의 구체적인 행들 또는 열들과 관련된 개별 랜덤 액세스 메모리들(107)을 포함한다.
I/O 유닛(104)은 데이터 계산 유닛(101)에 수신되는 이미지 데이터의 입력 "시트들(sheets)"을 로딩하는 것 및 스텐실 프로세서로부터 외부로 데이터 계산 유닛으로부터의 데이터의 출력 시트를 저장하는 것을 담당한다. 실시예에서, 시트 데이터를 데이터 계산 유닛(101)에 로딩하는 것은 수신된 시트를 이미지 데이터의 행들/열들로 파싱하는 것 및 이미지 데이터의 행들/열들을 2차원 시프트 레지스터 구조(106) 또는 실행 레인 어레이의 각각의 랜덤 액세스 메모리들(107)에 로딩하는 것을 수반한다(이하 더 상세히 설명됨).
시트가 메모리들(107)에 초기에 로딩되면, 실행 레인 어레이(105) 내의 개별 실행 레인들은 (예를 들어, 시트의 데이터에 대한 연산 직전의 로딩 명령어와 같이) 적절할 때 랜덤 액세스 메모리들(107)로부터 2차원 시프트 레지스터 구조(106)로 시트 데이터를 로딩할 수 있다. (시트 생성기 또는 메모리들(107)로부터 직접) 데이터의 시트를 레지스터 구조(106)에 로딩하는 것의 완료시, 실행 레인 어레이(105)의 실행 레인들은 데이터 상에서 연산하고 결국 완성된 데이터를 스텐실 프로세서로부터 외부로, 또는, 랜덤 액세스 메모리들(107)에 "다시 기입(write back)"한다. 나중에 I/O 유닛(104)이 랜덤 액세스 메모리들(107)로부터 데이터를 인출하여 출력 시트를 형성하면 이는 스텐실 프로세서로부터 외부로 기입된다.
스칼라 프로세서(102)는 명령어 메모리(103)로부터 스텐실 프로세서의 프로그램 코드의 명령어들을 판독하고 명령어들을 실행 레인 어레이(105)에서의 실행 레인들에 발행하는 프로그램 제어기(109)를 포함한다. 실시예에서, 단일의 동일한 명령어가 어레이(105) 내의 모든 실행 레인들에 방송되어 데이터 계산 유닛(101)으로부터 SIMD 유사 거동을 야기한다. 실시예에서, 스칼라 메모리(103)로부터 판독되고 실행 레인 어레이(105)의 실행 레인들에 발행되는 명령어들의 명령어 포맷은 명령어 당 하나보다 많은 오피코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 추가의 실시예에서, VLIW 포맷은 각각의 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 오피코드 및 (구체적인 실행 레인 또는 실행 레인들의 세트에 대한 메모리 연산을 지시하는) 메모리 오피코드 양자 모두를 포함한다.
"실행 레인(execution lane)"이라는 용어는 명령어를 실행할 수 있는 하나 이상의 실행 유닛들의 세트(예를 들어, 명령어를 실행할 수 있는 로직 회로)를 지칭한다. 그러나, 실행 레인은, 다양한 실시예들에서, 단지 실행 유닛들 이상의 더 많은 프로세서 유사 기능성을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에도, 실행 레인은 수신된 명령어를 디코딩하는 로직 회로, 또는, 더 많은 MIMD 유사 설계들의 경우에는, 명령어를 인출하고 디코딩하는 로직 회로를 또한 포함할 수 있다. MIMD 유사 접근방식들에 관하여, 중앙 집중형 프로그램 제어 접근방식이 본 명세서에 대부분 설명되었더라도, 더 많은 분산형 접근방식이 다양한 대안적인 실시예들에서 구현될 수 있다(예를 들어, 어레이(105)의 각각의 실행 레인 내에 프로그램 코드 및 프로그램 제어기를 포함함).
실행 레인 어레이(105), 프로그램 제어기(109) 및 2차원 시프트 레지스터 구조(106)의 조합은 광범위한 프로그램 가능 기능들에 대해 널리 적응 가능한/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 개별 실행 레인들이 다양한 기능들을 수행할 수 있고 임의의 출력 어레이 위치에 가까운 입력 이미지 데이터를 쉽게 액세스할 수 있다는 점을 고려하면 애플리케이션 소프트웨어 개발자들은 광범위한 상이한 기능적 능력 뿐만 아니라 치수(예를 들어, 스텐실 크기)를 갖는 커널들을 프로그래밍할 수 있다.
연산 동안, 실행 레인 어레이(105) 및 2차원 시프트 레지스터(106) 때문에, 이미지의 다수의 스텐실들은 병렬로 연산될 수 있다(해당 분야에서 이해되는 바와 같이, 스텐실은 이미지 내에 연속적인 NxM 또는 NxMxC 그룹의 픽셀들로서 통상적으로 구현됨(여기서 N은 M과 같을 수 있음)). 여기서, 예를 들어, 각각의 실행 레인은 이미지 데이터 내의 데이터의 가치가 있는 특정 스텐실에 대한 처리를 수행하는 연산들을 실행하고, 한편, 2차원 시프트 어레이는 자신의 데이터를 시프트하여 각각의 스텐실의 데이터를 해당 스텐실에 대한 작업들을 실행중인 실행 레인에 연결되는 레지스터 공간에 순차적으로 전달한다. 2차원 시프트 레지스터(106)는 또한 실행 레인 어레이(105)보다 큰 치수의 것일 수 있다는 점에 주목한다(예를 들어, 실행 레인 어레이가 치수 XxX의 것이면, 2차원 시프트 레지스터(106)는 치수 YxY의 것일 수 있음, 여기서 Y>X임). 여기서, 스텐실들을 완전히 처리하기 위해, 스텐실들의 좌측 에지가 실행 레인들에 의해 처리되고 있을 때, 시프트 레지스터(106)에서의 데이터는 실행 레인 어레이(105)의 우측 에지로부터 "푸시 아웃(push out)"될 것이다. 시프트 레지스터(106)의 여분의 치수는 실행 레인 어레이의 에지로부터 푸시되는 데이터를 흡수할 수 있다.
실행 레인 어레이(105)에 의해 연산되고 있는 이미지 데이터에 대한 데이터 저장소로서 역할을 하는 것과는 별도로, 랜덤 액세스 메모리들(107)은 또한 하나 이상의 룩-업 테이블을 유지할 수 있다. 다양한 실시예들에서 하나 이상의 스칼라 룩-업 테이블이 또한 스칼라 메모리(103) 내에서 인스턴스화될 수 있다.
스칼라 룩-업은 동일한 인덱스로부터의 동일한 룩-업 테이블로부터의 동일한 데이터 값을 실행 레인 어레이(105) 내의 실행 레인들 각각에 전달하는 것을 포함한다. 다양한 실시예들에서, 위에 설명된 VLIW 명령어 포맷은 스칼라 프로세서에 의해 수행되는 룩-업 연산을 스칼라 룩-업 테이블로 향하게 하는 스칼라 오피코드를 또한 포함하도록 확장된다. 오피코드와 함께 사용하도록 명시되는 인덱스는 즉치 피연산자(immediate operand )이거나 또는 일부 다른 데이터 저장 위치로부터 인출될 수 있다. 그럼에도 불구하고, 실시예에서, 스칼라 메모리 내의 스칼라 룩-업 테이블로부터의 룩-업은 동일한 클록 사이클 동안 실행 레인 어레이(105) 내의 모든 실행 레인들에 동일한 데이터 값을 방송하는 것을 본질적으로 포함한다.
도 2는 실행 레인(201) 내의 ALU 실행 유닛(205) 및 대응하는 로컬 쉬프트 레지스터 구조에 대한 단위 셀의 다른 더 상세한 도면을 도시한다. 실행 레인 어레이에서의 각각의 위치와 관련된 실행 레인 및 레지스터 공간은, 실시예에서, 실행 레인 어레이의 각각의 노드에서 도 2에서 보여지되는 회로를 인스턴스화하는 것에 의해 구현된다. 도 2에서 보여지되는 바와 같이, 단위 셀은 4개의 레지스터들(R1 내지 R4)로 구성되는 레지스터 파일(202)에 연결되는 실행 레인(201)을 포함한다. 임의의 사이클 동안, ALU 실행 유닛은 레지스터들(R1 내지 R4) 중 임의의 것으로부터 판독하고 레지스터들(R1 내지 R4) 중 임의의 것에 기입할 수 있다.
실시예에서, 2차원 시프트 레지스터 구조는, 단일 사이클 동안, 레지스터들(R1 내지 R3) 중 (단지) 하나의 임의의 내용들이 출력 멀티플렉서(203)를 통해 자신의 이웃의 레지스터 파일들 중 하나에 시프트 "아웃(out)"되는 것을 허용하는 것, 그리고, 레지스터들(R1 내지 R3) 중 (단지) 하나의 임의의 내용들을 입력 멀티플렉서(204)를 통해 자신의 이웃들 중 대응하는 하나로부터 시프트 "인(in)"되는 내용으로 대체시키는 것에 의해 구현되어 이웃들 사이의 시프트들은 동일한 방향에 있다(예를 들어, 모든 실행 레인들이 좌측으로 시프트됨, 모든 실행 레인들이 우측으로 시프트됨, 등). 다양한 실시예들에서, 실행 레인들 자체는 그들 자신의 각각의 시프트 명령어를 실행하여 시프트 레지스터의 내용의 대규모 SIMD 2차원 시프트를 야기한다. 동일한 레지스터가 자신의 내용을 시프트 아웃(shift out)시키고 동일한 사이클 상에서 시프트 인되는 내용으로 대체시키는 것이 흔할 수 있더라도, 멀티플렉서 배치(203, 204)는 동일한 사이클 동안 동일한 레지스터 파일 내의 상이한 시프트 소스 및 시프트 타겟 레지스터들을 허용한다.
도 2에 도시되는 바와 같이 시프트 시퀀스 동안 실행 레인은 자신의 레지스터 파일(202)로부터 자신의 좌측, 우측, 상측 및 하측 이웃들 각각으로 내용을 시프트 아웃할 것이다. 동일한 시프트 시퀀스와 함께, 실행 레인은 또한 자신의 좌측, 우측, 상측 및 하측 이웃들 중 특정 하나로부터 자신의 레지스터 파일로 내용을 시프트할 것이다. 다시, 시프트 아웃 타겟 및 시프트 인 소스는 모든 실행 레인들에 대해 동일한 시프트 방향과 일치할 것이다(예를 들어, 시프트 아웃이 우측 이웃으로의 것이면, 시프트 인은 좌측 이웃으로부터의 것일 것이다).
일 실시예에서는 단지 하나의 레지스터의 내용이 사이클 당 실행 레인 당 시프팅되는 것이 허용되더라도, 다른 실시예들은 하나보다 많은 레지스터의 내용이 시프트 인/아웃되는 것을 허용할 수 있다. 예를 들어, 도 2에서 보여지되는 멀티플렉서 회로(203, 204)의 제2 인스턴스가 도 2의 설계에 통합되면 2개의 레지스터들의 내용은 동일한 사이클 동안 시프트 아웃/인될 수 있다. 물론, 단지 하나의 레지스터의 내용이 사이클 당 시프팅되는 것이 허용되는 실시예들에서는, 수학적 연산들 사이의 시프트들에 대해 더 많은 클록 사이클들을 소비하는 것에 의해 수학적 연산들 사이에 다수의 레지스터들로부터의 시프트들이 발생할 수 있다(예를 들어, 수학 연산들 사이에 2개의 시프트 연산들을 소비하는 것에 의해 2개의 레지스터들의 내용들이 수학 연산들 사이에 시프트될 수 있음).
실행 레인의 레지스터 파일들의 모든 내용 미만이 시프트 시퀀스 동안 시프트 아웃되면 각각의 실행 레인의 시프트 아웃되지 않은 레지스터들의 내용이 그대로 유지된다(시프트하지 않음)는 점에 주목한다. 이와 같이, 내용에서 시프트된 것으로 대체되지 않는 임의의 시프팅되지 않은 내용은 시프팅 사이클에 걸쳐 실행 레인에 로컬인 것으로 지속된다. 예시적인 용이함을 위해 도 2에 도시되지 않은, 메모리 실행 유닛 또한 각각의 실행 레인(201)에 존재할 수 있어 실행 레인 어레이 내의 실행 레인의 행 및/또는 열과 관련되는 랜덤 액세스 메모리 공간으로부터 데이터를 로드하고 이에 데이터를 저장한다. 여기서, 메모리 유닛은 실행 레인의 자체 레지스터 공간으로부터 로딩될 수 없고 이에 저장될 수 없는 데이터를 로딩하는데/저장하는데 자주 사용된다는 점에서 표준 M 유닛으로서 역할을 한다. 다양한 실시예들에서, M 유닛의 주요 연산은 로컬 레지스터로부터 메모리에 데이터를 기입하는 것, 및 메모리로부터 데이터를 판독하고 이를 로컬 레지스터에 기입하는 것이다.
하드웨어 실행 레인(201)의 ALU 유닛(205)에 의해 지원되는 ISA 오피코드들에 관하여, 다양한 실시예들에서, ALU 유닛(205)에 의해 지원되는 수학적 오피코드들은 다음의 ALU 연산들 중 임의의 것을 포함할 수 있다: ADD(add), SUB(substract), MOV(move), MUL(multiple), MAD(multiply-add), ABS(absolute value), DIV(divide), SHL(shift-left), SHR(shift-right), MIN/MAX(return min or max), SEL(select), AND(logical AND), OR(logical OR), XOR(logical XOR), CLZ 또는 LZC(count leading zeroes) 및 NOT(logical complement). ALU 유닛(205)의 실시예 또는 그 일부가 도 3 내지 도 5에 관하여 이하 더 상세히 설명된다. 바로 위에서 설명된 바와 같이, 메모리 액세스 명령어들은 실행 레인(201)에 의해 실행될 수 있어 그들의 관련 랜덤 액세스 메모리로부터 데이터를 인출하고 이에 데이터를 저장한다. 추가적으로 하드웨어 실행 레인(201)은 2차원 시프트 레지스터 구조 내에서 데이터를 시프트하는 시프트 op 명령어들(right, left, up, down)을 지원한다. 위에 설명된 바와 같이, 프로그램 제어 명령어들은 스텐실 프로세서의 스칼라 프로세서에 의해 주로 실행된다.
도 3은 바로 위에서 설명된 바와 같이 실행 레인의 실행 유닛, 또는 그 일부에 대한 소비 시간 맵을 도시한다. 구체적으로, 도 3은 실행 유닛에 의해 실행될 수 있는 다수의 상이한 명령어들 각각에 의해 소비되는 시간의 양을 매핑한다. 도 3에서 보여지되는 바와 같이, 실행 유닛은, 1) MAD(multiply-add instruction)(301); 2) 병렬로 있는 2개의 FW(full width) 또는 4개의 HW(half width) ALU 연산들(302); 3) 2XW(double width) ALU 연산(303); 4) ((C op D) op B) 형태의 FUSED 연산(304); 및 5) 반복적 DIV(divide) 연산(306)을 수행할 수 있다.
도 3에서 보여지되는 바와 같이, MAD 연산(301)은 실행 유닛이 실행할 수 있는 다양한 명령어들 중에서 가장 많은 시간을, 그 자체로, 소비한다. 이와 같이, 실행 유닛은, MAD 연산을 수행하는 로직 이외에, 예를 들어, (연산(302)와 같이) 병렬로 다수의 ALU 연산들을 및/또는 (예를 들어, 연산(304)와 같이) 직렬로 다수의 ALU 연산들을 수행하는 다수의 ALU 로직 유닛들로 강화될 수 있다는 점이 설계 관점이다.
도 4는 도 3에 도시되는 상이한 명령어들을 지원할 수 있는 실행 유닛(405)에 대한 설계의 실시예를 도시한다. 도 4에서 보여지되는 바와 같이, 실행 유닛(405)은 제1 ALU 로직 유닛(401) 및 제2 ALU 로직 유닛(402) 뿐만 아니라 곱셈-덧셈 로직 유닛(403)을 포함한다. 레지스터 파일로부터의 입력들은 A, B, C, D로 라벨링되는 한편 레지스터 파일에 다시 기입되는 출력들은 X 및 Y로 라벨링된다. 이와 같이, 실행 유닛(405)은 4 입력 포트, 2 출력 포트 실행 유닛이다.
곱셈 덧셈 로직 유닛(403)은, 실시예에서, 완전 곱셈-덧셈 명령어를 수행한다. 즉, 곱셈-덧셈 로직 유닛(403)은 함수 (A*B)+(C,D)를 수행하고 여기서 A는 전체 폭 입력 피연산자이고, B는 전체 폭 피연산자이고 (C,D)는 2배 폭 합계 항을 형성하는 2개의 전체 폭 피연산자들의 연속이다. 예를 들어, 전체 폭이 16 비트에 대응하면, A는 16 비트이고, B는 16 비트이고 합계 항은 32 비트이다. 해당 분야에서 이해되는 바와 같이, 2개의 전체 폭 값들의 곱셈 덧셈은 2배 폭 결과를 생성할 수 있다. 이와 같이, MAD 연산의 결과는 X, Y 출력 포트들에 걸쳐 기입되고 여기서, 예를 들어, X는 결과의 상반부를 포함하고 Y는 결과의 하반부를 포함한다. 추가의 실시예에서, 곱셈-덧셈 유닛(403)은 절반 폭 곱셈 덧셈을 지원한다. 여기서, 예를 들어, A의 하반부는 제1 피승수(multiplicand)로서 사용되고, B의 하반부는 제2 피승수로서 사용되고, C 또는 D(연속은 아님)는 가수(concatenation)로서 사용된다.
도 3에 관하여 위에 언급된 바와 같이, MAD 연산의 실행은 통상적인 ALU 로직 유닛보다 더 많은 시간을 소비할 수 있다. 이와 같이, 실행 유닛은 ALU 연산들의 병렬 실행 뿐만 아니라 순차적 ALU 연산들을 제공하는 한 쌍의 ALU 로직 유닛들(401, 402)을 포함한다.
여기서, 도 3 및 도 4을 참조하면, 듀얼 병렬 FW 연산(302)에 관하여, 제1 ALU 로직 유닛(401)은 제1 전체-폭 ALU 연산(A op B)을 수행하는 한편 제2 ALU는 제1과 병렬로 제2 전체-폭 ALU 연산 (C op D)를 수행한다. 또한, 실시예에서, 전체 폭 연산은 16 비트에 대응한다. 여기서, 제1 ALU 로직 유닛(401)은 (A op B)의 결과를 레지스터 X에 기입하는 한편 제2 ALU 로직 유닛(402)은 (C op D)의 결과를 레지스터 Y에 기입한다.
실시예에서, 듀얼 병렬 전체 폭 ALU 연산(302)을 실행하기 위한 명령어 포맷은 듀얼 병렬 전체 폭 연산 및 목적지 레지스터를 명시하는 오피코드를 포함한다. 추가의 실시예에서, 오피코드는, 듀얼 병렬 전체 폭 연산을 명시하는 것 외에, 1개 또는 2개의 ALU 연산을 명시한다. 오피코드가 1개의 연산을 명시하기만 하면, ALU 로직 유닛들(401, 402) 양자 모두가 동일한 연산을 수행할 것이다. 대조적으로 오피코드가 제1 및 제2 상이한 ALU 연산들을 명시하면, 제1 ALU 로직 유닛(401)이 이러한 연산들 중 하나를 수행하고 제2 ALU 로직 유닛(402)이 이러한 연산들 중 2번째 것을 수행한다.
연산(302)의 HW(half width) 특징에 관하여, 4개의 절반 폭 ALU 연산들이 병렬로 수행된다. 여기서, 입력들 A, B, C 및 D 각각은 2개의 개별 입력 피연산자들을 각각 포함하는 것으로 이해된다. 즉, 예를 들어, A의 상반부는 제1 입력 피연산자에 대응하고, A의 하반부는 제2 입력 피연산자에 대응하고, B의 상반부는 제3 입력 피연산자에 대응하고, B의 하반부는 제4 입력 피연산자에 대응하는 등이다.
이와 같이, ALU 로직 유닛(401)이 2개의 ALU 연산들을 병렬로 취급하고, ALU 로직 유닛(402)이 2개의 ALU 연산들을 병렬로 처리한다. 따라서, 실행 동안, 모두 4개의 절반 폭 연산들이 병렬로 수행된다. 연산(302)의 종료시, ALU 로직 유닛(401)은 2개의 절반 폭 결과들을 레지스터 X에 기입하고, ALU 로직 유닛(402)은 2개의 절반 폭 결과들을 레지스터 Y에 기입한다. 이와 같이, 레지스터들 X 및 Y에는 4개의 개별 절반 폭 결과들이 존재한다.
실시예에서, 명령어 포맷은 병렬 절반 폭 연산이 수행될 것임을 명시할 뿐만 아니라 어느 ALU 연산(들)이 수행될 것인지도 명시한다. 다양한 실시예들에서, 명령어 포맷은 4개의 모든 연산들이 동일하다는 것을 명시할 수 있고 하나의 연산을 명시하기만 할 수 있고/있거나 4개의 모든 연산들이 상이하다는 것을 명시할 수 있고 4개의 상이한 연산들을 명시할 수 있다. 후자의 경우에, 대안적으로, 4개의 모든 연산들에 대해 동일한 연산을 야기하기 위해 명령어들 포맷은 동일한 연산을 4번 명시할 수 있다. 이러한 명령어 포맷 접근방식들의 다양한 조합들 또한 가능하다.
도 3의 2배 폭 ALU 연산(303)에 관하여, 실시예에서, 실행 유닛(405)은 연산 (A, C) op (B, D)를 수행하고 여기서 (A, C)는 제1 2배 폭 입력 피연산자를 형성하는 입력들 A와 C의 연속이고 (B, D)는 제2 2배 폭 입력 피연산자를 형성하는 입력들 B 및 D의 연속이다. 여기서, 운반(carry) 항은 제1 ALU 로직 유닛(401)으로부터 제2 ALU 로직 유닛(402)으로 운반 라인(404)을 따라 전달될 수 있어 전체 폭으로부터 2배 폭으로의 연산들 진행을 운반할 수 있다.
즉, 실시예에서, C 및 D 항들은 2개의 2배 폭 입력 피연산자들의 하위 절반들을 표현한다. 제2 ALU 로직 유닛(402)은 명시된 연산(예를 들어, ADD)을 2개의 하반부들에 대해 수행하고, 생성되는 결과는 전체의 2배 폭 결과의 하반부에 대응한다. 이와 같이, 제2 ALU 로직 유닛(402)으로부터의 결과는 레지스터 Y에 기입된다. 하반부들에 대한 연산은 입력 피연산자들의 2개의 각각의 상반부들 A 및 C의 연산을 계속하는 제1 ALU 로직 유닛(401)에 운반되는 운반 항을 생성할 수 있다. 제1 ALU 로직 유닛(401)으로부터의 결과는 출력 레지스터 X에 기입되는 전체 결과의 상반부에 대응한다. 제1 ALU 로직 유닛(401)에 의한 상반부들에 대한 연산은 제2 ALU 로직 유닛(402)으로부터 운반 항을 수신할 때까지 시작할 수 없기 때문에, ALU 로직 유닛들(402, 401)의 연산은 병렬적이 아니라 순차적이다. 이와 같이, 도 3에서 보여지되는 바와 같이, 2배 폭 연산들(303)은 병렬 전체/절반 폭 연산들(302)의 대략 2배의 길이를 취할 수 있다.
그럼에도 불구하고, MAD 연산(301)은 2개의 연속적인 ALU 로직 유닛 연산들보다 더 많은 시간을 소비할 수 있기 때문에, 자신의 가장 긴 전파 지연 연산에 의해 소비되는 시간 주기에 자신이 할 수 있는 한 많은 기능을 삽입하려고 시도할 수 있는 머신이 실행 유닛(405) 주위에 구축될 수 있다. 이와 같이, 실시예에서, 실행 유닛(405)의 사이클 시간은 MAD 명령어(301)의 실행 시간에 대응한다. 실시예에서, 2배 폭 연산을 위한 명령어 포맷은 수행될 연산 뿐만 아니라 해당 연산이 2배 폭 연산이라는 점도 명시한다.
FUSED 연산(304)에 관하여, 실행 유닛(405)은 연산 (C op D) op B를 수행한다. 여기서, 바로 위에서 논의된 2배 폭 ALU 연산(303)과 같이, 제2 연산이 제1 연산의 결과에 대해 연산하기 때문에 듀얼 ALU 로직 유닛들(401, 402)은 순차적으로 연산한다. 여기서, 제2 ALU 로직 유닛(402)은 전체 폭 입력들 C 및 D에 대해 초기 연산을 수행한다. 제2 ALU 로직(402)의 결과는, 결과 레지스터 공간에 기입되는 대신에, 멀티플렉서(406)를 통해 제1 ALU 로직 유닛(401)의 입력으로 멀티플렉싱된다. 제1 ALU 로직 유닛(401)은 다음으로 제2 연산을 수행하고 결과를 레지스터 X에 기입한다.
추가의 실시예에서, 절반 폭 FUSED 연산이 또한 수행될 수 있다. 여기서, 연산은 입력 피연산자들의 절반 만이 이용된다는 점을 제외하고는 위에 설명된 바와 같다. 즉, 예를 들어, (C op D) op B를 계산함에 있어서, 제1 연산에 대한 절반 폭 결과를 결정하는데 C의 하반부 및 D의 하반부만이 사용되고, 다음으로, B의 하반부만이 제1 연산의 절반 폭 결과와 함께 사용되어 제2 연산을 수행한다. 결과는 레지스터 X에 절반 폭 값으로서 기입된다. 게다가, 2개의 절반 폭 FUSED 연산들이 병렬로 수행될 수 있다. 여기서, 연산은 바로 위에서 설명된 바와 같이 동일한 논리적 연산들과 동시에 그렇지만 피연산자들의 상반부에 대해 설명된다. 결과는 레지스터 X에 값이 기입되는 2개의 절반이다.
실시예에서, FUSED 연산에 대한 명령어 포맷은 FUSED 연산이 수행될 것이라는 점을 명시하고 2개의 연산들을 명시한다. 동일한 연산이 2회 수행되면, 실시예에서, 명령어는 연산을 1회 명시하기만 하거나 이를 2회 명시한다. 추가의 실시예에서, FUSED 연산 및 수행될 연산(들)을 명시하는 것 외에, 명령어 포맷은 전체 폭 또는 절반 폭 연산이 수행될 것인지 추가로 명시할 수 있다.
도 3의 연산(306)은 반복적 나눗셈 연산이 실행 유닛에 의해 또한 수행될 수 있다는 점을 도시한다. 특히, 이하 보다 상세히 설명되는 바와 같이, 다양한 실시예들에서 ALU 로직 유닛들(401, 402) 양자 모두는 반복적 나눗셈 연산 동안 병렬로 협력적으로 참여한다.
도 5a 및 도 5b는 도 3의 반복적 나눗셈 명령어(306)를 실행하기 위한 실시예에 관한 것이다. 도 5a는 반복적 나눗셈 명령어의 실행을 가능하게 하도록 도 4의 실행 유닛 회로(405)에 추가될 추가 회로를 도시한다(도 4의 ALU 로직 유닛들(401, 402)과 동일한 것으로 이해되는 ALU 로직 유닛들(501, 502)을 제외함). 도 5b는 반복적 나눗셈 명령어의 실행 동안 실행 유닛의 마이크로-시퀀스 연산의 실시예를 도시한다. 다음의 논의로부터 더 명확해질 것이지만, 이러한 명령어의 단일 실행은 분모(분자로 나누어지는 값)에 의해 분자(나누어지는 값)의 선두 디지트(들)를 나누려는 시도가 행해지는 긴 나눗셈(long division)의 원자 행동과 유사한 2회의 반복들을 본질적으로 수행한다.
단순화를 위해, 16 비트 나눗셈이 설명될 것이다(통상의 기술자들은 본 발명의 교시들을 상이한 폭 실시예들에 확장할 수 있을 것임). 여기서 설명되는 실시예가 2개의 긴 나눗셈 원자 행동들을 수행하면, 명령어의 8개의 순차적 실행들은 16 비트 분자를 16 비트 분모로 완전히 나누는데 사용된다. 즉, 각각의 원자 긴 나눗셈 연산은 분자의 다음 중요한 비트의 처리에 대응한다. 2개의 이러한 중요한 비트들은 명령어의 단일 실행 동안 처리된다. 따라서, 분자의 모든 비트들을 처리하기 위해서는, 전체 나눗셈을 완전히 수행하는데 명령어의 8회 연속 실행들이 필요하게 된다. 제1 명령어의 출력은 레지스터 파일에 기입되고 다음 후속 명령어에 대한 입력으로서 사용된다.
도 5a를 참조하면, 분자 입력은 B 입력에서 제공되고 분모는 D 입력에서 제시된다. 다시, 본 실시예에서, B 및 D 입력 피연산자들 양자 모두가 16 비트이다. A 및 B 입력 피연산자들의 연속 A, B(A 피연산자 또한 16 비트임)인 "패킹된(packed)" 32 비트 데이터 구조 "PACK"은 완전 나눗셈 프로세스의 초기 데이터 구조로서 보여질 수 있다. 초기 조건으로서 A는 16개의 제로들의 문자열(000...0)로 설정되고 B는 분자 값이다.
도 5a 및 도 5b를 참조하면, 제1 마이크로-시퀀스 동안, PACK 데이터 구조의 좌측 시프트가 수행되어, PACK의 최상위 워드("PACK msw")라고 지칭되는, 데이터 구조 A[14:0], B[15]를 생성한다. 분모 D는 다음으로 제2 ALU 로직 유닛(502)에 의해 PACK msw로부터 뺄셈된다(511). 이러한 연산은 분모가 분자의 선두 디지트로 초기에 나뉘는 긴 나눗셈에 대응한다. 실시예에서, ALU 로직 유닛들(501, 502)은 실제로는 3개의 입력 ALU들이고 도 4에 의해 제시되는 바와 같이 2개의 입력 ALU들이 아니다(제3 입력은 반복적 나눗셈 연산을 위한 분모 D를 위해 예약됨).
뺄셈(511)의 결과의 부호(512)에 따라 상이한 데이터 처리 프로시저들이 뒤따른다. 중요하게는, 제1 몫 결과 비트(즉, 나눗셈 결과의 제1 비트)는 Y 출력 포트(509)의 제2 내지 최하위 비트("NEXT B[1]")에 기입되도록 스테이징된다. 뺄셈의 결과가 음이면, 몫 결과 비트 B[1]은 0으로 설정된다(513). 뺄셈의 결과가 양이면, 몫 결과 비트 B[1]은 1로 설정된다(514). 이러한 비트의 설정은 분모 값이 분자의 제1 디지트로 나뉠 수 있는지 여부를 밝히는 것에 의해 몫 결과의 제1 디지트가 결정되는 긴 나눗셈에서의 프로세스에 대응한다.
추가적으로, 2개의 상이한 데이터 구조들이 만들어져 (도 4의 멀티플렉서(406)와 동일한 멀티플렉서 일 수 있는) 멀티플렉서(506)의 각각의 입력 포트들("1", "2")에 제시된다. 제1 데이터 구조는 Pack msw(A[13:0], B[15], B[14])의 좌측 시프트에 대응하고 멀티플렉서(506)의 입력 1에서 제시된다. 이러한 데이터 구조의 생성은 분모가 최상위 이웃으로 나뉘지 않으면 분자의 다음 디지트가 자신의 최상위 이웃에 첨부되는 긴 나눗셈에서의 프로세스에 대응한다.
제2 제작된 데이터 구조는 비트 B[13]이 첨부된 제2 ALU 로직 유닛(502)에 의해 방금 수행된 뺄셈(511)의 결과의 좌측 시프트에 대응하고 멀티플렉서(506)의 제2 입력("2")에서 제시된다. 이러한 데이터 구조의 생성은 다음 나눗셈을 분자의 제1 디지트(들)과 분모의 배수 사이의 차이의 결과로 셋업하는 분모가 분자의 제1 숫자(들)로 나뉘는 긴 나눗셈에서의 상황에 대응한다.
제1 또는 제2 데이터 구조들은 다음으로 제2 ALU 로직 유닛(502)에 의해 수행되는 뺄셈의 결과가 양의 또는 음의 결과를 산출하는지 여부에 따라 멀티플렉서(506)에 의해 선택된다. 뺄셈이 음의 결과(분자의 다음 중요한 디지트로 나뉠 수 없는 분모에 대응함)를 산출하면, 제1 데이터 구조가 선택된다(513). 뺄셈이 양의 결과(분자의 다음 중요한 디지트로 나뉠 수 있는 분모에 대응함)를 산출하면, 제2 데이터 구조가 선택된다(514).
멀티플렉서(506)의 출력은 이제 PACK 데이터 구조의 새로운 최상위 워드(new PACK msw)인 것으로 이해되고 분모가 나뉘어 질 것으로 시도될 긴 나눗셈 시퀀스에서의 다음 값에 대응한다. 이와 같이, 제1 ALU 로직 유닛(501)은 new PACK msw 값으로부터 분모 D를 뺄셈한다(515). Y 출력 B[0]의 최하위 비트(510)는 제1 ALU(501)로부터의 뺄셈 결과의 부호에 따라 1 또는 0으로서 기입되도록 스테이징되고 몫 결과(517, 518)에서의 다음 디지트를 표현한다.
제2 멀티플렉서(508)는 제1 ALU 로직 유닛의 뺄셈(515)의 부호에 따라(516) 제1 및 제2 데이터 구조들 사이에서 선택한다. 제2 멀티플렉서(508)의 입력 "1"에서 제시되는 제1 데이터 구조는 new PACK msw 값에 대응한다. 제2 멀티플렉서(508)의 입력 "2"에서 제시되는 제2 데이터 구조는 제1 ALU 로직 유닛(501)에 의해 수행되는 뺄셈의 결과에 대응한다. 이러한 2개의 데이터 구조들 중 어느 것이 선택되는지는 제1 ALU(501)에 의해 수행되는 뺄셈(515)의 결과의 부호에 의존한다. 뺄셈의 결과가 음이면, 멀티플렉서는 new PACK msw 값을 선택한다(517). 뺄셈의 결과가 양이면, 멀티플렉서는 new PACK msw - D 값을 선택한다(518).
제2 멀티플렉서(508)의 출력은 X 출력으로부터 레지스터 파일에 기입되는 NEXT A 값에 대응한다. Y 출력에서 제시되는 값(B[15:0])은 2개의 방금 수행된 반복들에 의해 소비된 2개의 최상위 비트들 (B[13:0]) 미만인 B 피연산자의 선두 에지에서 작성된다. B의 이러한 나머지 비트들과 2개의 새로 계산된 몫 디지트 결과들의 연속은 새로운 B 피연산자 NEXT B로서 레지스터 파일에 기입된다. 다음 반복에 대해서, 이전 명령어로부터의 X 출력은 A 피연산자로 판독되고 이전 명령어로부터의 Y 출력은 B 피연산자로 판독된다. 다음으로 원래 B 피연산자의 모든 디지트들이 처리될 때까지 프로세스가 반복된다(다시, 16 비트 B 피연산자의 경우 명령어의 8회 순차적 실행들을 소비할 것임). 모든 반복들이 끝나면, 최종 몫이 Y 출력으로부터 레지스터 파일에 기입될 것이고 임의의 나머지는 X 출력으로부터 레지스터 파일에 기입되는 NEXT A 값에 표현될 것이다.
도 6은 위에 설명된 ALU 유닛에 의해 수행되는 방법론의 실시예를 도시한다. 도 6에서 보여지되는 바와 같이, 이러한 방법은 이미지 프로세서의 ALU 유닛으로 다음을 수행하는 단계를 포함한다. 제1 명령어를 실행함- 제1 명령어는 곱셈 덧셈 명령어임 -(601). 제2 명령어를 실행함- 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것을 포함함 -(602). 제3 명령어를 실행함- ALU 로직 유닛들 중 하나가 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 제3 명령어의 출력 결과를 결정하는 것을 포함함 -(603). 제4 명령어를 실행함- 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 나눗셈 결과 디지트 값들을 결정하는 것을 포함함 -(604).
위에 설명된 다양한 이미지 프로세서 아키텍처 특징들은 전통적인 의미에서의 이미지 처리에 반드시 제한되는 것이 아니고, 따라서 이미지 프로세서로 하여금 재-특성화되게 할 수 있는(또는 그렇지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다는 점을 지적하는 것이 적절하다. 예를 들어, 위에 설명된 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이 실제 카메라 이미지들의 처리와는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용된다면, 이미지 프로세서는 그래픽 처리 유닛으로서 특성화될 수 있다. 추가적으로, 위에 설명된 이미지 프로세서 아키텍처 특징들은 비디오 처리, 비전 처리, 이미지 인식 및/또는 머신 학습과 같은 다른 기술적 애플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 더 범용인 프로세서(예를 들어, 컴퓨팅 시스템의 CPU의 것 또는 그 일부분)와 (예를 들어, 코-프로세서로서) 통합될 수 있거나, 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다.
위에 논의된 하드웨어 설계 실시예들은 반도체 칩 내에서 및/또는 반도체 제조 프로세스를 향한 궁극적 타게팅을 위한 회로 설계의 서술로서 구현될 수 있다. 후자의 경우, 이러한 회로 서술들은 (예를 들어, VHDL 또는 Verilog) RTL(register transfer level) 회로 서술, 게이트 레벨 회로 서술, 트랜지스터 레벨 회로 서술 또는 마스크 서술 또는 이들의 다양한 조합들의 형태를 취할 수 있다. 회로 서술들은 (CD-ROM 또는 다른 타입의 저장 기술과 같은) 컴퓨터 판독 가능 저장 매체 상에 통상적으로 구현된다.
위에 설명된 바와 같은 이미지 프로세서는 (예를 들어, 핸드헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드헬드 디바이스의 SOC(System on Chip)의 일부로서) 컴퓨터 시스템 상에 하드웨어로 구현될 수 있다는 점을 이전 섹션들로부터 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우들에서, 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 주목한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 또는, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에 이미지 데이터는 카메라로부터 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아니라 시스템 메모리에 전송함). 이전 섹션들에서 설명된 특징들 중 많은 것이 (애니메이션을 렌더링하는) 그래픽 처리 유닛에 적용될 수 있다.
도 7은 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하 설명되는 컴퓨팅 시스템의 컴포넌트들 중 많은 것은 통합된 카메라 및 관련된 이미지 프로세서를 갖는 컴퓨팅 시스템(예를 들어, 스마트 폰 또는 태블릿 컴퓨터와 같은 핸드헬드 디바이스)에 적용될 수 있다. 통상의 기술자들은 이러한 2개 사이를 용이하게 구분할 수 있을 것이다.
도 7에서 보여지는 바와 같이, 기본 컴퓨팅 시스템은 (예를 들어, 멀티-코어 프로세서 또는 애플리케이션 프로세서 상에 배치되는 복수의 범용 처리 코어들(715_1 내지 715_N) 및 주 메모리 제어기(717)를 포함할 수 있는) 중앙 처리 유닛(701), 시스템 메모리(702), 디스플레이(703)(예를 들어, 터치스크린, 플랫-패널), 로컬 유선 포인트-투-포인트 링크(예를 들어, USB) 인터페이스(704), (Ethernet 인터페이스 및/또는 셀룰러 모뎀 서브시스템과 같은) 다양한 네트워크 I/O 기능들(705), 무선 로컬 영역 네트워크(예를 들어, WiFi) 인터페이스(706), 무선 포인트-투-포인트 링크(예를 들어, Bluetooth) 인터페이스(707) 및 Global Positioning System 인터페이스(708), 다양한 센서들(709_1 내지 709_N), 하나 이상의 카메라(710), 배터리(711), 전력 관리 제어 유닛(712), 스피커 및 마이크로폰(713) 및 오디오 코더/디코더(714)를 포함할 수 있다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(750)는 자신의 CPU(701) 내의 하나 이상의 범용 처리 코어(715), 하나 이상의 그래픽 처리 유닛(716), 메모리 관리 기능(717)(예를 들어, 메모리 제어기), I/O 제어 기능(718) 및 이미지 처리 유닛(719)을 포함할 수 있다. 범용 처리 코어들(715)은 컴퓨팅 시스템의 운영 체제 및 애플리케이션 소프트웨어를 통상적으로 실행한다. 그래픽 처리 유닛들(716)은 그래픽 집약 기능들을 통상적으로 실행하여, 예를 들어, 디스플레이(703) 상에 제시되는 그래픽 정보를 생성한다. 메모리 제어 기능(717)은 시스템 메모리(702)와 인터페이스하여 시스템 메모리(702)에 데이터를 기입하고 이로부터 데이터를 판독한다. 전력 관리 제어 유닛(712)은 시스템(700)의 전력 소비를 일반적으로 제어한다.
이미지 처리 유닛(719)은 이전 섹션들에서 위 길이로 설명된 이미지 처리 유닛 실시예들 중 임의의 것에 따라 구현될 수 있다. 대안적으로 또는 조합하여, IPU(719)는 GPU(716) 및 CPU(701) 중 어느 하나 또는 양자 모두에 이들의 코-프로세서로서 연결될 수 있다. 추가적으로, 다양한 실시예들에서, GPU(716)는 위 길이로 설명된 이미지 프로세서 특징들 중 임의의 것으로 구현될 수 있다.
터치 스크린 디스플레이(703), 통신 인터페이스들(704 내지 707), GPS 인터페이스(708), 센서들(709), 카메라(710), 및 스피커/마이크로폰 코덱(713 및 714) 각각은 모두, 적절한 경우, 통합된 주변기기 디바이스(예를 들어, 하나 이상의 카메라(710)를 마찬가지로 포함하는 전체 컴퓨팅 시스템에 관련한 다양한 형태들의 I/O(input 및/또는 output)로서 보여질 수 있다. 구현에 따라, 이러한 I/O 컴포넌트들 중 다양한 것들이 애플리케이션 프로세서/멀티-코어 프로세서(750) 상에 통합될 수 있거나 또는 다이에서 벗어나서 또는 애플리케이션 프로세서/멀티-코어 프로세서(750)의 패키지 외부에 위치될 수 있다.
실시예에서 하나 이상의 카메라(710)는 카메라와 자신의 시야에 있는 오브젝트 사이의 심도를 측정할 수 있는 심도 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하는 명령어 실행 파이프 라인을 갖는 다른 기능 블록) 상에 실행되는 애플리케이션 소프트웨어, 운영 체제 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어가 위에 설명된 기능들 중 임의의 것을 수행할 수 있다.
본 발명의 실시예들은 위에 제시된 바와 같은 다양한 프로세스들을 포함할 수 있다. 이러한 프로세스들은 머신 실행 가능 명령어들로 구현될 수 있다. 이러한 명령어들은 범용 또는 특수 목적 프로세서로 하여금 특정 프로세스들을 수행하게 하는데 사용될 수 있다. 대안적으로, 이러한 프로세서들은, 이러한 프로세스들을 수행하기 위한 하드와이어드 로직을 포함하는 구체적인 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들 및 맞춤형 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 엘리먼트들은 머신 실행 가능 명령어들을 저장하기 위한 머신 판독 가능 매체로서 또한 제공될 수 있다. 이러한 머신 판독 가능 매체는, 이에 제한되는 것은 아니지만, 플로피 디스켓들, 광 디스크들, CD-ROM들, 및 광자기 디스크들, FLASH 메모리, ROM들, RAM들, EPROM들, EEPROM들, 자기 또는 광 카드들, 전자 명령어들을 저장하기에 적합한 전파 매체 또는 다른 타입의 미디어/머신 판독 가능 매체를 포함할 수 있다. 예를 들어, 본 발명은 통신 링크(예를 들어, 모뎀 또는 네트워크 접속)를 통해 반송파 또는 다른 전파 매체에서 구현되는 데이터 신호들로써 원격 컴퓨터(예를 들어, 서버)로부터 요청 컴퓨터(예를 들어, 클라이언트)에 전송될 수 있는 컴퓨터 프로그램으로서 다운로딩될 수 있다.
전술한 명세서에서, 본 발명은 그 구체적인 예시적 실시예들을 참조하여 설명되었다. 그러나, 첨부 청구항들에 제시되는 바와 같이 본 발명의 더 광범위한 사상 및 범위를 벗어나지 않고도 다양한 수정들 및 변경들이 이루어질 수 있다는 점이 명백할 것이다. 명세서 및 도면들은, 따라서, 제한적인 것이 아니라 예시적인 의미로 고려되어야 한다.

Claims (23)

  1. 장치로서,
    곱셈 덧셈 계산 유닛, 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛을 포함하는 실행 유닛을 포함하고, 상기 실행 유닛은,
    제1 명령어- 상기 제1 명령어는 곱셈 덧셈 명령어임 -;
    제2 명령어- 상기 제2 명령어는 상기 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 상기 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것임 -;
    제3 명령어- 상기 제3 명령어는 상기 ALU 로직 유닛들 중 하나가 상기 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 상기 제3 명령어의 출력 결과를 결정하는 것임 -; 및
    제4 명령어- 상기 제4 명령어는 상기 제1 ALU 로직 유닛 및 상기 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 나눗셈 결과 디지트 값들을 결정하는 것임 -
    를 수행하는 장치.
  2. 제1항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 상기 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 동시에 연산하는 병렬 ALU 연산들을 또한 수행하는 것임 -를 추가로 수행하는 장치.
  3. 제2항에 있어서,
    상기 제2 및 제5 명령어들은 상이한 데이터 폭들에 따라 연산하는 장치.
  4. 제3항에 있어서,
    상기 데이터 폭들 중 하나는 8 비트이고 상기 데이터 폭들 중 다른 하나는 16 비트인 장치.
  5. 제1항에 있어서,
    상기 제1 및 제2 ALU 로직 유닛들은 운반 항 신호 라인과 연결되는 장치.
  6. 제1항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 FUSED 명령어임 -를 추가로 수행하는 장치.
  7. 제1항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 상기 제1 및 제2 ALU 로직 유닛들이 결과의 상이한 절반들을 각각 생성하는 2배 폭 명령어임 -를 추가로 수행하는 장치.
  8. 제1항에 있어서,
    상기 제2, 제3 및 제4 명령어들은 상기 제1 명령어보다 많은 시간을 소비하지 않고 상기 실행 유닛의 사이클 시간은 상기 곱셈 덧셈 명령어와 상응하는 장치.
  9. 장치로서,
    실행 레인들의 어레이를 포함하는 이미지 프로세서- 각각의 실행 레인은 실행 유닛을 포함하고, 상기 실행 유닛은 곱셈 덧셈 계산 유닛, 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛을 포함함 -를 포함하고, 상기 실행 유닛은,
    제1 명령어- 상기 제1 명령어는 곱셈 덧셈 명령어임 -;
    제2 명령어- 상기 제2 명령어는 상기 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 상기 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것임 -;
    제3 명령어- 상기 제3 명령어는 상기 ALU 로직 유닛들 중 하나가 상기 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 상기 제3 명령어의 출력 결과를 결정하는 것임 -; 및
    제4 명령어- 상기 제4 명령어는 상기 제1 ALU 로직 유닛 및 상기 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 결과 디지트 값들을 결정하는 것임 -
    를 수행하는 장치.
  10. 제9항에 있어서,
    상기 이미지 프로세서는 2차원 시프트 레지스터 어레이 구조를 추가로 포함하고, 상기 2차원 시프트 레지스터 어레이 구조의 어레이 위치들은 상기 실행 레인들의 어레이의 각각의 실행 레인들에 로컬로 연결되는 장치.
  11. 제9항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 상기 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 동시에 연산하는 병렬 ALU 연산들을 또한 수행하는 것임 -를 추가로 수행하는 장치.
  12. 제11항에 있어서,
    상기 제2 및 제5 명령어들은 상이한 데이터 폭들에 따라 연산하는 장치.
  13. 제12항에 있어서,
    상기 데이터 폭들 중 하나는 8 비트이고 상기 데이터 폭들 중 다른 하나는 16 비트인 장치.
  14. 제11항에 있어서,
    상기 제1 및 제2 ALU 로직 유닛들은 운반 항 신호 라인과 연결되는 장치.
  15. 제10항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 FUSED 명령어임 -를 추가로 수행하는 장치.
  16. 제10항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 상기 제1 및 제2 ALU 로직 유닛들이 결과의 상이한 절반들을 각각 생성하는 2배 폭 명령어임 -를 추가로 수행하는 장치.
  17. 제9항에 있어서,
    상기 제2, 제3 및 제4 명령어들은 상기 제1 명령어보다 적은 시간을 소비하고 상기 실행 유닛의 사이클 시간은 상기 제1 명령어에 의해 소비되는 시간과 상응하는 장치.
  18. 제9항에 있어서,
    상기 이미지 프로세서는 컴퓨팅 시스템 내에 있는 장치.
  19. 장치로서,
    실행 유닛의 회로 설계 합성 툴 호환 가능 서술- 상기 실행 유닛은 곱셈 덧셈 계산 유닛, 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛을 포함함 -을 포함하고, 상기 실행 유닛은,
    제1 명령어- 상기 제1 명령어는 곱셈 덧셈 명령어임 -;
    제2 명령어- 상기 제2 명령어는 상기 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 상기 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것임 -;
    제3 명령어- 상기 제3 명령어는 상기 ALU 로직 유닛들 중 하나가 상기 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 상기 제3 명령어의 출력 결과를 결정하는 것임 -; 및
    제4 명령어- 상기 제4 명령어는 상기 제1 ALU 로직 유닛 및 상기 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 나눗셈 결과 디지트 값들을 결정하는 것임 -
    를 수행하는 장치.
  20. 제19항에 있어서,
    상기 서술은 실행 레인들 중 하나가 상기 실행 유닛을 포함하는 실행 레인들의 어레이를 포함하는 이미지 프로세서를 추가로 서술하는 장치.
  21. 제20항에 있어서,
    상기 이미지 프로세서는 2차원 시프트 레지스터 어레이 회로를 추가로 포함하고, 상기 2차원 시프트 레지스터 어레이 회로의 어레이 위치들은 상기 실행 레인들의 어레이의 각각의 ALU 유닛에 로컬로 연결되는 장치.
  22. 제19항에 있어서,
    상기 실행 유닛은 제5 명령어- 상기 제5 명령어는 상기 제1 ALU 로직 유닛 및 제2 ALU 로직 유닛이 동시에 연산하는 병렬 ALU 연산들을 또한 수행하는 것임 -를 추가로 수행하는 장치.
  23. 방법으로서,
    이미지 프로세서의 실행 유닛으로,
    제1 명령어- 상기 제1 명령어는 곱셈 덧셈 명령어임 -를 실행하는 단계;
    제2 명령어를 실행하는 단계- 제1 및 제2 ALU 로직 유닛들이 동시에 연산하는 병렬 ALU 연산들을 수행하여 상기 제2 명령어의 상이한 각각의 출력 결과들을 생성하는 것을 포함함 -;
    제3 명령어를 실행하는 단계- 상기 ALU 로직 유닛들 중 하나가 상기 ALU 로직 유닛들 중 다른 하나의 출력으로부터 연산하는 순차적 ALU 연산들을 수행하여 상기 제3 명령어의 출력 결과를 결정하는 것을 포함함 -; 및
    제4 명령어를 실행하는 단계- 상기 제1 ALU 로직 유닛 및 상기 제2 ALU 로직 유닛이 연산하는 반복적 나눗셈 연산을 수행하여 제1 및 제2 나눗셈 결과 디지트 값들을 결정하는 것을 포함함 -
    를 수행하는 단계를 포함하는 방법.
KR1020187010230A 2015-12-04 2016-10-19 이미지 프로세서용 다기능 실행 레인 KR102000894B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/960,334 US9830150B2 (en) 2015-12-04 2015-12-04 Multi-functional execution lane for image processor
US14/960,334 2015-12-04
PCT/US2016/057771 WO2017095547A1 (en) 2015-12-04 2016-10-19 Multi-functional execution lane for image processor

Publications (2)

Publication Number Publication Date
KR20180052721A KR20180052721A (ko) 2018-05-18
KR102000894B1 true KR102000894B1 (ko) 2019-07-16

Family

ID=57223790

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187010230A KR102000894B1 (ko) 2015-12-04 2016-10-19 이미지 프로세서용 다기능 실행 레인

Country Status (9)

Country Link
US (4) US9830150B2 (ko)
EP (2) EP3384376B1 (ko)
JP (1) JP6789287B2 (ko)
KR (1) KR102000894B1 (ko)
CN (1) CN108139886B (ko)
DE (1) DE112016005521T5 (ko)
GB (1) GB2561306A (ko)
TW (3) TWI622014B (ko)
WO (1) WO2017095547A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261786B2 (en) 2017-03-09 2019-04-16 Google Llc Vector processing unit
US10534736B1 (en) 2018-12-31 2020-01-14 Texas Instruments Incorporated Shared buffer for multi-output display systems
CN109902795B (zh) * 2019-02-01 2023-05-23 京微齐力(北京)科技有限公司 处理单元设置有输入复用器的人工智能模块和系统芯片
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5258944A (en) 1992-09-01 1993-11-02 Cray Research, Inc. High performance mantissa divider
US5426600A (en) 1993-09-27 1995-06-20 Hitachi America, Ltd. Double precision division circuit and method for digital signal processor
US5751618A (en) 1994-02-22 1998-05-12 Texas Instruments Incorporated Arithmetic circuit

Family Cites Families (91)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US542600A (en) * 1895-07-09 Lattice hedge fence and method of plashing
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
US4486848A (en) * 1982-07-28 1984-12-04 Sperry Corporation Microprocessor parallel additive execution of a computer count ones instruction
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
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
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US5777918A (en) * 1995-12-22 1998-07-07 International Business Machines Corporation Fast multiple operands adder/subtracter based on shifting
EP0875031B1 (de) 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
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
WO2000055810A1 (fr) 1999-03-16 2000-09-21 Hamamatsu Photonics K. K. Capteur de vision ultra-rapide
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
US6606700B1 (en) * 2000-02-26 2003-08-12 Qualcomm, Incorporated DSP with dual-mac processor and dual-mac coprocessor
US7124160B2 (en) * 2000-03-08 2006-10-17 Sun Microsystems, Inc. Processing architecture having parallel arithmetic capability
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
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
ATE459042T1 (de) * 2003-04-15 2010-03-15 Koninkl Philips Electronics Nv Rechnersystem mit parallelität auf befehls- und draht-ebene
DE602004006516T2 (de) * 2003-08-15 2008-01-17 Koninklijke Philips Electronics N.V. Parallel-verarbeitungs-array
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
US7873815B2 (en) * 2004-03-04 2011-01-18 Qualcomm Incorporated Digital signal processors with configurable dual-MAC and dual-ALU
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 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
ATE504043T1 (de) 2005-04-28 2011-04-15 Univ Edinburgh Umkonfigurierbares anweisungs-zellen-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
US7555514B2 (en) * 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7882307B1 (en) * 2006-04-14 2011-02-01 Tilera Corporation Managing cache memory in a parallel processing environment
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 ブラザー工業株式会社 画像処理装置および画像処理プログラム
US8521800B1 (en) * 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
EP2663071B1 (en) 2007-09-05 2015-11-18 Tohoku University Solid-state image sensor and drive method for the same
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8429453B2 (en) 2009-07-16 2013-04-23 Hitachi, Ltd. Management system for outputting information denoting recovery method corresponding to root cause of failure
TWI398781B (zh) * 2009-08-03 2013-06-11 Hon Hai Prec Ind Co Ltd 離散餘弦轉換電路及裝置
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
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
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 京セラドキュメントソリューションズ株式会社 画像形成装置
EP2798467A4 (en) 2011-12-30 2016-04-27 Intel Corp CONFIGURABLE CORE WITH RESTRICTED COMMAND SET
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
CN102637124B (zh) * 2012-03-22 2015-09-30 中国电子科技集团公司第五十八研究所 一种基4fft算法的并行处理装置及方法
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
CN102750133B (zh) * 2012-06-20 2014-07-30 中国电子科技集团公司第五十八研究所 支持simd的32位三发射的数字信号处理器
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9588766B2 (en) 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US10318308B2 (en) 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic 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
US9323535B2 (en) 2013-06-28 2016-04-26 Intel Corporation Instruction order enforcement pairs of instructions, processors, methods, and systems
GB2522290B (en) * 2014-07-14 2015-12-09 Imagination Tech Ltd Running a 32-bit operating system on a 64-bit machine
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
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
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
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
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
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5258944A (en) 1992-09-01 1993-11-02 Cray Research, Inc. High performance mantissa divider
US5426600A (en) 1993-09-27 1995-06-20 Hitachi America, Ltd. Double precision division circuit and method for digital signal processor
US5751618A (en) 1994-02-22 1998-05-12 Texas Instruments Incorporated Arithmetic circuit

Also Published As

Publication number Publication date
DE112016005521T5 (de) 2018-08-30
CN108139886A (zh) 2018-06-08
GB201805590D0 (en) 2018-05-23
US20190213006A1 (en) 2019-07-11
TWI680435B (zh) 2019-12-21
US20220206796A1 (en) 2022-06-30
EP3633504A1 (en) 2020-04-08
TWI622014B (zh) 2018-04-21
TW201721580A (zh) 2017-06-16
US10185560B2 (en) 2019-01-22
GB2561306A (en) 2018-10-10
EP3384376A1 (en) 2018-10-10
TW201816715A (zh) 2018-05-01
EP3384376B1 (en) 2019-12-04
TW202004655A (zh) 2020-01-16
US9830150B2 (en) 2017-11-28
CN108139886B (zh) 2021-11-16
TWI724545B (zh) 2021-04-11
US20170161064A1 (en) 2017-06-08
US20170242695A1 (en) 2017-08-24
WO2017095547A1 (en) 2017-06-08
JP6789287B2 (ja) 2020-11-25
JP2018532200A (ja) 2018-11-01
KR20180052721A (ko) 2018-05-18
EP3633504B1 (en) 2021-10-06

Similar Documents

Publication Publication Date Title
KR102232722B1 (ko) 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
US20220206796A1 (en) Multi-functional execution lane for image processor
JP5089776B2 (ja) 浮動小数点演算のための再構成アレイプロセッサ
CN107408041B (zh) 用于图像处理器的能量高效的处理器核心架构
US20210216318A1 (en) Vector Processor Architectures
Severance et al. Embedded supercomputing in FPGAs with the VectorBlox MXP matrix processor
Yu et al. Vector processing as a soft-core CPU accelerator
CN113050990A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
TWI752343B (zh) 用於執行絕對差計算之加總的執行單元電路、影像處理器以及方法
Yu et al. Vector processing as a soft processor accelerator
KR20180045029A (ko) 배선 복잡성이 감소된 시프트 레지스터
Abdelhamid et al. MITRACA: A next-gen heterogeneous architecture
Anido et al. Interactive ray tracing using a SIMD reconfigurable architecture
EP1936492A1 (en) SIMD processor with reduction unit
Hansson et al. Case study of efficient parallel memory access programming for the embedded heterogeneous multicore DSP architecture ePUMA
WO2008077803A1 (en) Simd processor with reduction unit

Legal Events

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