KR20070039490A - Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자 - Google Patents
Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자 Download PDFInfo
- Publication number
- KR20070039490A KR20070039490A KR1020067024961A KR20067024961A KR20070039490A KR 20070039490 A KR20070039490 A KR 20070039490A KR 1020067024961 A KR1020067024961 A KR 1020067024961A KR 20067024961 A KR20067024961 A KR 20067024961A KR 20070039490 A KR20070039490 A KR 20070039490A
- Authority
- KR
- South Korea
- Prior art keywords
- bit
- data
- register
- bits
- processing element
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/02—Digital computers in general; Data processing equipment in general manually operated with input through keyboard and computation using a built-in program, e.g. pocket calculators
- G06F15/025—Digital computers in general; Data processing equipment in general manually operated with input through keyboard and computation using a built-in program, e.g. pocket calculators adapted to a specific application
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
이미지 프로세싱 시스템에서, 픽셀 데이터에 대한 계산 동작이 비트-직력 프로세싱 소자(PEs)의 어레이에 의해 수행된다. 어레이를 구성하는 PE의 최대 가능 밀도를 제공하도록 비트-직렬 PE가 최소 로직으로 구현된다. PE 구조가 개선되어 적은 클록 사이클 내에서 동작이 수행될 수 있다. 그러나 개선시 필요한 추가 로직을 최소화하는 데 주의를 기울여야 한다. 어레이 내 PE의 최대 가능 밀도를 향상시키기 위해서 PE의 비트-직렬 특성이 유지되어야 한다. 여기에 기술된 PE 개선은 SAD(sum of absolute difference) 동작, 나눗셈, 곱셈 및 변화(예, FFT) 셔플 단계에 대한 수행 능력을 향상시기는 것을 포함한다.
Description
본 발명은 SIMD 병렬 처리에 관한 것으로, 구체적으로는 비트 직렬 처리 소자에 관한 것이다.
가장 높은 단계의 병렬 구조를 채택한 병렬 처리 구조는 단일 비트 산술 프로세서이다. 이는 SIMD(single instruction multiple data) 접근법에 뒤이어 가장 간단한 실행 PE(Processing Element) 구조를 채택한다. 각각의 PE는 매우 낮은 처리 생산성을 가지는 반면에, PE 로직의 단일성이 매우 많은 수의 PE들로 이루어진 프로세서 어레이의 구성을 뒷받침한다. 이러한 많은 수의 PE들을 SIMD 프로세서 어레이에 결합함으로써 매우 높은 처리 생산성을 얻을 수 있다.
비트 직렬 SIMD 구조의 변형 예로, PE들을 2-D 메쉬(mesh)로 결합하는 것이 있다. 여기서, 각 PE는 어레이 내에서 북, 남, 동, 서로 직접 접해 있는 네 개의 네이버들과 통신한다. 이러한 2-d 구조는 이미지 픽셀 데이터와 같은 2-ㅇ 구조를 가지는 데이터 처리에 매우 적합하다(이에 한정되는 것은 아님)
본 발명의 일 측면은 복수의 프로세싱 소자를 포함하는 프로세싱 어레이를 제공한다. 여기서,
● 각 프로세싱 소자는 모든 프로세서 소자로 제공되는 명령어에 응답하여 동시에 동일한 동작을 수행하며;
● 상기 프로세싱 소자는 m 비트 데이터 값에 대해 산술 연산을 수행하며, 각 연산으로부터 올림 및 빌림 결과 중 하나를 전달하고, 그리고 상기 동작으로 입력되는 올림 및 빌림 입력 중 하나로 구성되는 신호를 수신하며,
● 상기 전달될 올림 및 빌림 값들의 선택이, 상기 프로세싱 소자에 대해 로컬한 마스크 값에 의해 각 프로세싱 소자에 대해 개별적으로 수행된다.
다른 측면에서, 본 발명은
● 각 프로세싱 소자는 모든 프로세서 소자로 제공되는 명령어에 응답하여 동시에 동일한 동작을 수행하며,
● 각 프로세싱 소자는 상호 연결되어 2 차원 그물망을 형성하고, 상기 각 프로세싱 소자는 동, 서, 남, 북으로 가장 인접한 네 개의 프로세싱 소자들에 연결되며,
● 각 프로세싱 소자는, 데이터를 유지하고 북쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 북쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 북쪽의 인접 프로세싱 소자로 보내며, 그리고 남쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 남쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 남쪽의 인접 프로세싱 소자로 보내는 NS 레지스터를 제공하며,
● 각 프로세싱 소자는, 데이터를 유지하며, 동쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 동쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 동쪽의 인접 프로세싱 소자로 보내며, 그리고 서쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 서쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 서쪽의 인접 프로세싱 소자로 보내는 EW 레지스터를 제공하며,
● 각각 반대 방향으로 데이터 송신 및 수신을 하는 NS 및 EW 레지스터를 사용하여 상기 동-서 축 및 북-남 축 중 하나를 따라 반대 방향으로 동시에 이루어지는 데이터 쉬프트가 수행된다.
또 다른 측면에서, 본 발명은 복수의 프로세싱 소자를 포함하는 프로세싱 어레이를 제공한다. 여기서,
● 각 프로세싱 소자는 단일 패스 내에서 m 비트 승수와 n 비트 피승수의 곱셈을 수행하고, 상기 패스(pass)는 n 사이클을 포함하며, 각 사이클은 피승수 레지스터로의 피승수 비트 로드와, 누산기 레지스터로의 누산기 비트 로드와, 부분 결과값의 발생과, 그리고 메모리로의 계산된 누산기 비트의 저장을 포함하며,
● 상기 부분 결과값은 m+1 비트와, 상기 계산된 누산기 비트로서 전달되는 비트의 최하위 비트와, 그리고 m 비트 부분 결과값 레지스터에 저장되는 나머지 m 비트를 포함하며,
● 상기 누산기 비트와, 상기 레지스터의 부분 결과값과, 상기 피승수 및 m 비트 승수의 m 비트 결과값을 합산하여 상기 부분 결과값이 산출된다.
도 1은 PE의 일 실시예를 나타내는 개략도이다.
도 2는 PE의 어레이를 나타내는 도면이다.
도 3은 PEG(processing element group)로 구성되는 PE 어레이를 나타내는 도식적으로 나타내는 도면이다.
도 4는 PEG를 도식적으로 나타내는 도면이다.
도 5는 SIMD 어레이 프로세서를 도식적으로 나타내는 도면이다.
도 6은 PE 명령어의 컴포넌트(명령 필드)를 나타내는 테이블이다.
도 7은 노말 동작을 위해 설정된 PE를 도식적으로 나타내는 상세도이다.
도 8은 PE ALU의 노말 동작을 나타내는 진리표이다.
도 9는 PE 명령 정의를 나타내는 테이블이다.
도 10은 PE ALU 명령 정의를 나타내는 테이블이다.
도 11은 Bw_cy(borrow/carry)신호의 정의를 나타내는 테이블이다.
도 12는 양방향 쉬프트가 선택된 경우에 NS 및 EW 명령의 정의를 나타내는 테이블이다.
도 13은 양방향 쉬프트에 사용되는 신호들의 정의를 나타내는 테이블이다.
도 14는 곱셈 연산 동안에 피연산자 데이터의 패턴을 나타내는 도면이다.
도 15는 곱셈 연산 동안에 피연산자 데이터의 이동을 도식적으로 나타내는 상세도이다.
도 16은 곱셈 연산 동안에 AL, BL, D 명령의 정의를 나타내는 테이블이다.
도 17은 곱셈 연산 동안에 사용되는 신호의 정의 나타내는 테이블이다.
도 18은 포함된 곱셈 테크닉을 사용하는 곱셈 연산을 나타내는 도면이다.
도 19는 예시적인 곱셈 연산에 필요한 명령 시퀀스를 나타내는 테이블이다.
본 발명의 실시예들은 픽셀 데이터 처리에 1차로 사용되는 병렬 프로세서의 일부이다. 프로세서는 PE(processing element)의 어레이, 시퀀 제어 로직, 그리고 픽셀 입출력 로직을 포함한다. 이 구조는 SIMD(signle command multiple data)를 포함하며, 여기서 싱글 명령 스트림은 모든 PE에 의한 실행을 제어하고, 모든 PE는 각 명령을 동시에 수행한다. PE의 어레이는 PE 어레이라 하고, 전체 병렬 프로세서는 PE 어레이 프로세서라 한다. 일 실시예에서, SIMD 어레이의 특정 크기가 정해지나, 본 발명의 범위가 이러한 숫자에 한정되는 것이 아니며, 모든 MxN PE 어레이에 적용할 수 있다는 것은 본 발명의 당업자에게 자명하다.
PE 어레이는 그물망 형태로 연결된 PE의 어레이이다. 각 PE(100)는 메모리, 레지스터, 그리고 1 비트 데이터를 처리하는 계산 로직을 포함한다. 본 발명의 일 실시예에서, 어레이는 48개의 행과 64개의 열로 구성된 PE를 포함한다. PE 어레이는 SIMD 어레이 프로세서 로직의 대부분을 구성하며, 픽셀 데이터 계산의 거의 대부분을 수행한다.
도 1에 도시된 예시적인 PE(100)는 1 비트 데이터를 처리하기 위한 RAM(110), ALU(101), 로직 블럭 A(120), B(130), 그리고 레지스터 C(140), D(150), NS(160), EW(170), AL(180), BL(190), 그리고 CM(105)을 포함한다. ALU(101)는 전 가산기 회로만큼 간단하다. 그러나, 좀 더 세부적인 예시에서는, 좀 더 발전된 산술 능력을 가질 수 있다. 한 세트의 레지스터들은 PE RAM(110)으로부터의 픽셀 데이터를 로드하며, ALU(101)에 의해 처리되도록 이러한 픽셀 데이터를 유지한다. CM 레지스터는 픽셀 데이터의 입출력을 위한 것이다.
PE RAM(110)은 각 PE(100)에 대해 유효하게 1 비트 폭이 되며, PE(100)에 의해 처리될 필셀 데이터를 저장한다. 다중 비트 픽셀 값은 PE RAM(100)에 저장된 다수의 비트에 의해 표현된다. 멀티 비트 연산수에 대한 연산이 연산수 픽셀의 대응하는 비트들을 차례로 연산하여 수행된다. 일 실시에에서, PE RAM(110)은 사이클 당 두 개의 읽기와 하나의 쓰기를 한다. 다른 실시예에서는, 다른 다중 접속 접근법이 채택되거나, 사이클 당 하나의 읽기 또는 쓰기를 할 수 있다.
도 2에 도시된 바와 같이, 예시적인 PE 어레이(1000)는 48 행들과 64 열들로 구성되는 PE를 포함한다. 픽셀 번호 매김 동작은 어레이의 북서쪽 코너의 0, 0으로부터 남동쪽 코너의 47, 63으로 진행된다.
예시적인 SIMD 어레이 프로세서(200)의 PE는 도 2에 도시된 바와 같이, 2-ㅇ 그리드에 정렬된다. 각 PE는 4 인접한 이웃 PE와 통신하며, 특히, PE는 자신 주변의 동, 서, 남, 북으로 위치한 PE와 직접 통신한다. 이 실시예에서, PE 대 PE 통신 경로는 1 비트 폭과 양방향 통신이다.
처리 중에, 어레이의 모든 PE는 각 동작 단계를 동시에 수행한다. 연산수 비트의 모든 읽기나 쓰기, PE 레지스터 사이의 모든 이동, 모든 ALU 출력이 어레이의 모든 PE에 의해 동시에 수행된다. 동작 패턴을 묘사함에 있어서, 대응하는 비트를 집합적으로 고려하는 것이 유용하다. 대응하는 이미지 비트의 어레이 크기 집합을 "비트 플레인"이라고 한다. (직렬) 지시 스트림의 관점에서, SIMD 어레이 동작들은 비트 플레인 동작으로 모델화된다.
이 실시예에서, 각 지시는 비트 플레인의 플로우(flow)나 처리를 지시하는 명령들로 구성한다. 단일 지시는 각 레지스터 자원에 대한 1과, PE RAM 쓰기 포트에 대해 1을 포함하는 다중 명령 필드를 가지며, ALU(101)에 의한 처리를 제어하기 위한 추가 필드를 포함한다. 이러한 접근법은 하나의 처리 사이클에 대한 어레이 제어를 위한 어레이 지시에 대해, 일반적인 마이크로 지시를 구현한 것이다.
일 예에서, PE 어레이(1000)는 PE를 PE 그룹(PEG)으로 구분하여 구현시 구조화된다. 본 발명의 상세 실시예에서, 각 PEG(200)는 8×8 어레이 세그먼트를 나타내는 64PE로 구성된다. 따라서, 48×64 PE 어레이(1000)는 6 행의 PEG로 구현된다. 각 행은 8 PEG를 포함한다. 각 PEG(200)는 인접한 PEG와 연결되어, PE 대 PE 통신이 PEG 경계에 걸쳐 제공된다. 연결이 균일하게 이루어지므로, 비트 플레인 동작의 관점에서, PEG 분할이 명확하지 않다.
예시적인 PEG(200)는 64 비트 폭의 다중 접속 PE RAM(210)과, PEG 제어 로직(230), 그리고 PE 어레이(202) 내의 64 PE를 구성하는 레지스터 및 산술 로직을 포함한다. PE RAM(210)의 각 비트 조각들이 64 PE 중 하나에 연결된다. 64 PE는 PE 어레이(202) 내의 각 64 PE에 대한 유효한 1 비트 폭을 제공한다.
동서남북 방향의 인접한 PEG들과의 통신에 더하여, 각 PEG는 PE 어레이(202)의 안팎으로 픽셀 데이터를 이동하기 위한 8 비트 입출력 경로를 포함한다. CM 레 지스터 플레인은 입출력 시에 비트 플레인 데이터를 다루기 위한 것이다. 데이터는 비트 플레인 형태 내에서, PE 어레이(202)의 내외부로 이동된다.
상기 기술된 PE 어레이는 픽셀 데이터에 작업을 수행하는 산술 로직을 제공한다. 이러한 동작을 수행하기 위해, PE 어레이는 지시 소스와 어레이의 안팎으로 픽셀 데이터를 이동시킬 지지 장치를 필요로 한다.
SIMD 어레이 프로세서(2000)의 예시가 도 5에 도시된다. SIMD 어레이 프로세서(2000)는 PE 어레이(1000)로 지시 스트림을 제공하는 프로그램 시퀀서(300)를 포함한다. 또한, 픽셀 I/O 유닛(400)이 PE 어레이(1000) 안팎으로의 픽셀 데이터 이동을 제어한다. 총체적으로 이러한 유닛은 SIMD 어레이 프로세서(2000)를 포함한다.
SIMD 어레이 프로세서(2000)는 어레이 크기의 이미지 세그먼트 상에 알고리즘을 수행하는 데 사용된다. 이러한 프로세서는 집적 회로 장치상에 구현되거나 단일 장치상의 큰 시스템의 일부로 구현된다. 어떻게 구현되던지, SIMD 어레이 프로세서(2000)는 시스템 제어 프로세서("CPU"라 함)에 종속된다. SIMD 어레이 프로세서(200)와 CPU 사이의 인터페이스는 CPU에 의한 예시적인 SIMD 어레이 프로세서(2000)의 초기화 및 제어를 위한 것이다.
픽셀 I/O 유닛(400)은, Img 버스를 거쳐, PE 어레이(1000)와 외부 저장 매체 사이의 픽셀 데이터 이동을 제어한다. 픽셀 데이터의 이동은 PE 어레이 계산 동작과 동시에 수행된다. 이로써, 픽셀 데이터 처리의 생산성이 매우 향상된다. 픽셀 I/O 유닛(400)은 픽셀 형태와 비트 플레인 형태 간의 이미지 데이터 변환 동작을 수행한다. Img 버스 데이터는 픽셀 형태이며, PE 어레이 데이터는 비트 플레인 형태이다. 이러한 형태들 간의 데이터 변환 동작이 I/O 처리의 일부로써, 픽셀 I/O 유닛(400)에 의해 수행된다.
SIMD 어레이 프로세서(2000)는 서브프레임으로 알려진 어레이 크기의 세그먼트 내의 이미지 데이터를 처리한다. 전형적인 시나리오에서, 처리될 이미지 프레임은 PE 어레이(1000)의 크기보다 훨씬 크다. 이미지 프레임이 완전치 처리될 때까지, 서브프레임 이미지 세그먼트를 차례로 처리함으로써 이미지 프레임 처리가 완료된다.
향상된 PE 수행에 대해 이하에서 상세히 설명한다. 먼저 소개한 바와 같이, 베이스라인 PE 구조가 설명된다. 이러한 구조를 향상시킨 예에 대해 자세히 기술하며, 다음을 포함한다.
● PE 베이스 상에 선택가능한 올림-빌림(carry-borrow) 신호
● 양방향 쉬프트 능력, 그리고
● 강화된 곱셈 능력
PE(100)는 7개의 레지스터를 포함하며, 7개의 레지스터는 신호 선택 로직, 산술 로직 및 3 개의 메모리 데이터 포트와 연결된다. 입력 메모리 데이터 포트는 aram, bram으로 설계되며, 출력 메모리 포트는 wram 포트이다. 각 PE는 NI/NO, SI/SO, EI/EO 및 WI/WO 쉬프트 플레인 입력 및 출력을 통해 4 개의 이웃 PE들과 통신한다.
각 레지스터 입력은 멀티플렉서(즉, C 먹스(144), D 먹스(154), NS 먹 스(164), EW 먹스(174), AL 먹스(184), BL 먹스(194))에 의해 선택된다. wram 출력이 RAM 먹스(114)에 의해 선택된다.
도 6에 도시된 바와 같이, PE(100)의 동작이 클록-클록 베이시스 상에서 PE 명령어에 의해 제어된다. 명령어는 명령 필드로 구성되며, 각 명령 필드는(Alu_cmd제외)는 선택된 값을 레지스터 (또는 웜) 멀티플렉서 중 하나로 제공한다. ALU(101) 명령 필드(Alu_cmd)는 일부 PE 신호를 발생하는 방식으로 정의함으로써 계산 동작을 제어한다.
PE(100)의 동작은 두 개의 동작 모드(노말 동작과 곱셈 동작)에 관해 기술된다. 노말 동작이 0XXX나 1001의 Alu_cmd에 의해 지시된다. 곱셈 동작은 1XX0의 Alu_cmd에 의해 지시된다.
노말 동작 모드에서 동작하는 PE(100)의 도면이 도 7에 도시된다. CM(105) 레지스터는 도시되지 않는다. 왜냐하면, 이는 산술 회로에 포함되기 때문이다.
노말 PE 동작 중에, 제 1 소스 연산수의 각 비트는 각각 NS(160)과 AL(180) 레지스터에 로드된다. AL(180) 레지스터로부터, 데이터가 'a' 입력을 거쳐 ALU(101)로 제공된다. Alu_cmd에 따라, 'a' 값을 생산하기 위한 A 120 마스크 로직에 의해 D 150 레지스터와 결합하거나 결합하지 않을 수 있다.
마찬가지로, 제 2 소스 연산수의 각 비트가 EW(170) 및 BL(190)로 로드되며, 'b' 입력을 거쳐 ALU(101)로 제공된다. 분리된 Alu_cmd 신호는 B 마스크 로직(130)에 의해 인가되는 마스킹(masking)인지 여부를 결정한다.
노말 동작에 대해, C 레지스터(140)가 원하는 시작 값으로 초기화될 수 있 다. 동작 코스에서, ALU(101)의 올림이나 빌림 결과가 CO(ALU 출력) 신호를 거쳐 C 레지스터(140)로 전파된다. 이러한 방식으로, 멀티 비트 합산(ADD) 및 감산(SUBTRACT) 동작들이 수행된다.
각 최종 연산수 비트가 wram 출력 신호를 거쳐 PE RAM(110)에 기록된다. 이러한 신호는 수행될 연산에 따른 "Plus"나 "Co"(도 7)과 같은 ALU 출력으로 선택된다. 노말 동작에 대해, ALU(101)은 전가산기 회로로 정의된다. PLUS 및 Co 신호는 전 가산기의 합계 및 올림(또는 빌림) 출력을 나타낸다(도 8 참조).
D 레지스터(150)는 바람직한 연산수 마스킹 값이 마스크 값을 로딩한다. 마스킹(masking)은 동작이 조건적으로 수행되도록 한다. 조건적인, ADD, SUBSTRACT 및 FORK(조건적 할당)이 연산수 마스킹을 통해 뒷받침된다.
Wram 과 PE 레지스터 명령 필드 정의가 도 9에 도시된다. 이러한 명령 필드 각각은 멀티플렉서에 선택 코드를 제공한다. 멀티플렉서는 레지스터(도는 Wram 포트)를 위한 복수의 입력 값을 차례로 선택한다.
NS 레지스터(160)와 EW 레지스터(170)는 제 1 및 제 2 소스 연산수 데이터를 각각 로딩한다. 연산수는 스칼라이며, 0 이나 1이 직접 두 레지스터 중 하나에 로드된다. 연산수가 서브프레임 이미지인 경우에, Aram 이나 Bram 값이 로딩된다.
또한, NS 레지스터(160)와 EW 레지스터(170)가 비트 플레인 쉬프트에 사용될 수 있다. 예를 들어, NS 레지스터(160)가 NI 값을 로딩하는 경우에, 북쪽으로부터(즉. 남쪽으로) 쉬프트가 발생한다. NS 레지스터(160)가 SI 값을 로딩하는 경우에, 남쪽으로부터 쉬프트가 발생한다. 마찬가지로, EW 레지스터(170)가 EI 값을 로딩하 는 경우에, 서쪽으로부터 쉬프트가 발생하고, WI 로딩에 의해 동쪽으로부터의 쉬프트가 발생한다.
연산수 비트가 NS(160)과 EW(170) 레지스터로부터 각각 AL(180)과 BL(190) 레지스터로 전파된다(예, AL=NS, BL=EW). AL(180)과 BL(190)은 또한, 쉬프트된 NS 와 EW 값을 로딩한다(예, AL=NI, BL=WI).
C 레지스터(140)는 스칼라 0 이나 1로 초기화되거나, Aram 이나 Bram을 거쳐 PE RAM(110)으로부터 로딩될 수 있다. 대안적으로, C 레지스터(140)는 Co를 로딩하여 올림이나 빌림 ALU 출력을 전달할 수 있다. D 레지스터(150)는 C 먹스(144) 신호를 선택함으로써 새로운 값으로 로딩될 수 있다. C 먹스(144)의 값은 C 먹스의 출력으로부터 D 레지스터(150)로 로딩된다. 즉, D(150) 및 C(140) 레지스터는 이 사이클에서 동일한 값을 로딩한다.
Alu_cmd가 0XXX인 노말 동작 중에, Alu_cmd3 의 최하위 3 비트는 Co, a, b 값들 각각에 대한 독립적인 제어를 제공한다(도 10 참조). Alu_cmd[0]는 Cork 올림이나 빌림 값으로 정의되는지 여부를 결정한다. 활성 Alu_cmd[1] 값은 AL 값이 D 값으로 오아 마스킹 되도록(OR-masked) 하여 ALU 'a' 입력 신호를 발생한다. 활성 Alu_cmd[2] 값은 BL 값이 D 값으로 앤드 마스킹 되도록(AND-masked) 하여 ALU 'b' 입력 신호를 생성한다.
Alu_cmd가 1001인 경우에, Bw_cy 신호가 Co 값으로 선택된다. D 레지스터(150)가 0 일 때, Bw_cy 신호는 빌림(borrow)이다. D 레지스터(150)가 1 일 때, Bw_cy 신호는 올림(carry)이다. Bw_cy를 사용하여 각 PE가 국부 D 값에 따라 가산 이나 감산을 수행할 것인지 여부를 결정한다. 이러한 Bw_cy 특성에 대한 세 가지 용도가 도시될 것이다. 첫 번째는 절대값 동작을 제공하며, 두 번째는 빠른 SAD(sum of absolute difference) 단계를 제공하고, 세 번째는 빠른 나눗셈 수행하기 위한 방법이다. 이러한 적용 예들 각각은 빌림/올림 Bw_cy 사용하여 Addsub 함수를 수행한다. Addsub(A,B,M)은 다음과 같다:
If(M)
Return(A-B)
Else
Return(A+B)
절대값(ABS) 동작은 일반적으로 NEGATE 및 FORK 동작의 시퀀스에 의해 수행된다. 그러나, 동작의 결합은 단일 패스 동작시간의 두 배의 시간을 필요로 하며, 공간이 할당되어야 하는 임시 이미지를 발생한다. Bw_cy 신호는 간단한 단일 패스 ABS 함수를 인에이블 시킨다.
개선된 ABS 함수가 소스 연산수에 대한 부호 비트를 D 레지스터(150)에 로딩함으로써 수행된다. 이후에, 0을 제 1 소스 연산수로 하고, ABS 소스 연산수(Src)를 제 2 소스 연산수로 하여 ADD가 수행된다. Bw_cy 신호가 Alu_cmd에 의해 선택되며, 동작의 각 비트에 대한 Co 신호를 통해 C 레지스터(140)로 전달된다. 결과 동작은 다음과 같다:
Dest
=Addsub(0,
Src
,
Src'Sign
)
소스 픽셀이 네거티브인 경우에, Dest 연산수는 네거티브 픽셀이며, 마찬가지로 Dest 연산수가 픽셀과 동일한 값을 가진다.
Bw_Cy 신호에 대한 제 2 사용은 더 빠른 SAD 단계 수행을 위한 것이다. SAD 의 각 단계에 대해, 두 개의 템플리트(template)의 대응 픽셀(P1, P2)이 비교된다. 두 픽셀 차의 크기는 임시합계에 더해진다(Sum). 이러한 SAD 단계는 다음과 같은 세 개의 동작으로 구성된다:
Tmp=P1-P2
Tmp=ABS(Tmp)
Sum=Sum+Tmp
Bw_Cy 신호는 3에서 2 까지의 연산수의 개수를 줄이는 데 사용될 수 있다. P1 및 P2의 SUBTRACT가 D 레지스터로 전달되는 차(difference)의 부호에 의해 수행된다. 다음으로, Sum을 이용하여 차의 Addsub가 수행된다. 따라서, 차가 네거티브인 경우에 값이 Sum에서 감산되고, 차가 포지티브인 경우에, 값이 Sum에 가산된다. 이는 다음과 같이 나타낸다:
Tmp=P1-P2
Tmp=Tmp'sign
Sum=Addsub(Sum, Tmp, Tmp'sign)
Tmp'sign을 D 레지스터(150)로 로딩하는 것은 감산 연산으로 결합될 수 있으 므로, 수행 시간에 아무런 수가 더해지지 않는다.
Bw_cy 신호에 대한 제 3 사용은 더 빠른 나눗셈 동작을 수행하기 위한 것이다. 직렬 비트 PE에 대해, 나눗셈은 발생될 몫(비트)의 수와 같은 복수의 패스들을 필요로한다. 각 패스는 하나의 몫 비트를 발생한다. 전형적인 PE에 대하여, 각 패스는 비교 및 조건적인 감산 연산을 요한다.
Quotient[i]=Denominator<=Remainder[rmsb:i]
If(Quotient[i]==1)
Remainder[rmsb:i]=Remainder[rmsb:i]-Denominator
(여기서, rmsb는 Remainder 연산수 크기-1)
상술한 방법에서, 몫 비트(i로 표시됨)는 역순으로 발생된다. 즉, 최상위 비트가 먼저 생성되고 최하위 비트가 나중에 생성된다. 각 패스는 Denominator 연산수에 대한 두 개의 동작을 요한다. 따라서, 이 연산을 수행하는 데 필요한 전체 시간은 개략적으로 2*Q*D 사이클(여기서 Q는 몫(Quotient)의 크기이고 D는 분모(Denominator)의 크기이다).
Bw_cy 신호는 단일 Addsub 동작으로 부호가 표시되지 않는(unsigned) 나눗셈의 하나의 패스(pass)를 수행하기 위한 수단을 제공한다. 이러한 개선된 방법에서, 각 패스에서 수행되는 Addsub 동작의 결과로 나머지(Remainder) 값이 포지티브나 네거티브가 된다.
각 패스에 대한 Remainder의 부호가 Addsub가 Add나 Subtract로 기능을 할 것것인지 여부를 결정한다. Remainder가 네거티브인 경우에, Add가 수행되고, Remainder가 포지티브인 경우에, Subtract가 수행된다. Remainder가 Addsub의 결과로 부호를 변경하더라도, 이의 크기는 각 연속 패스에 의해 0에 근사 된다. 이러한 나눗셈 방법에 대해, 각 패스는 다음을 포함한다:
Quotient[i]=not Remainder'sign
Remainder[rmsb:i]=
Addsub(Remainder[rmsb:i], Denominator, Quotient[i])
이러한 나눗셈 방법에서, Quotient 비트('i'로 표시됨)는 역순으로 발생한다. 각 패스는 Denominator에 대한 하나의 (Addsub) 동작을 필요로 한다. 이 동작에 전체 시간이 약 Q*D 사이클이다. 계수 연산(modulus operation)을 수행하기 위한 것이다. 나눗셈의 종료시에 Remainder 값이 테스트 된다. 여기서, Remainder 값이 0 보다 작으면, Denominator가 이에 더해져 나눗셈 연산에 대한 정확한 Remainder 값을 제공한다. (Quotient 결과가 나눗셈 연산에 대해 필요하지 않은 경우에는 이러한 수정 단계는 필요하지 않다.)
비트 플레인 데이터를 쉬프트하기 위해, SIMD 어레이의 각 PE는 네 개의 가장 가까운 PE에 연결된다. PE의 NO(North output) 신호는 예를 들면, 북쪽을 향하는 PE의 SI(south input) 신호에 연결된다. 이러한 방식으로, 각 PE의 NO, SO, EO 및 WO 출력이 4 개의 가장 가까운 PE의 SI, NI, WI 및 EI 입력에 연결된다.
노말 쉬프팅이 수행되는, PE 어레이의 NS 레지스터 플레인이 북쪽 또는 남쪽(어느 쪽도 아닐 수도 있음)으로 쉬프트된다. EW 레지스터 플레인은 동쪽이나 서쪽(어느 쪽도 아닐 수도 있음)으로 쉬프트된다. NS 및 EW 레지스터 플레인은 독립 적이므로, 분리된 비트 평면의 북-남 및 동-서 쉬프팅이 동시에 쉽게 수행될 수 있다.
노말 쉬프팅에 대해, NO 및 SO 신호가 EW 레지스터 값으로 설정된다. 북쪽으로의 쉬프트가 SI PE 입력을 NS 레지스터(160)에 로딩함으로써 수행된다. 왜냐하면, SI 신호는 각 PE의 남쪽으로 PE의 NO 출력에 연결되기 때문이다. 나머지 쉬프트 방향은 대응하는 PE 입력을 NS(160) 및 EW(170) 레지스터로 로딩함으로써 조절된다. 노말 쉬프트 명령이 도 9에 도시된다.
일부 동작에 대해, 반대 (직교라기 보다는) 방향으로 비트 플레인의 동시 쉬프팅이 바람직하다. 이러한 동작의 일 예는 FFT 동안에 수행되는 버터플라이 셔플 동작(butterfly shuffle operation)이다. 버터플라이 셔플의 일 단계는 다음과 같은 4 개의 픽셀 값으로 이루어진 두 그룹에 대한 위치 교환을 포함한다.
p0 p1 p2 p3 p4 p5 p6 p7 // 교환 전
p4 p5 p6 p7 p0 p1 p2 p3 // 교환 후
이 예시에서의 픽셀은 행(row)을 따라 배치되거나 열(column)을 따라 배치된다. 행 데이터에 대하여, 동-서 방향으로의 양 방향 쉬프트는 2의 계수로 변환을 가속한다. 이러한 변환에 필요한 양 방향 쉬프트는 향상된 PE의 기능이다.
PE에 대한 개선이 반대 방향의 쉬프팅을 가능하게 하여 상술한 예와 같은 패턴 교환이 실행되도록 한다. 두 개의 배치 신호(configuration signal), 즉 Rx(행 교환) 및 Cx(열 교환)이 교대되는 쉬프트 구성이 활성화되었는지 여부를 나타낸다. Rx와 Cx 신호는 상호 배타적이다. 즉, 이들은 동시에 활성화 될 수 없다. 어느 것 도 활성화되지 않는 경우에는, 노말 쉬프트 구성이 표시된다. Rx 및 Cx 배열 신호가 설계에 편리한 방법으로 실행된다. 예시적인 PE 어레이에 대해, Rx 및 Cx는 각 PEG(200)에 존재하는 레지스터이다. 이 실시예에서, Rx 및 Cx는 어레이 내의 모든 PEG에 대해 동일한 값을 가져야 한다. 즉, 단일 쉬프트 구성이 전체 어레이에 대해 설정되어야 한다.
AL, BL, NS, 및 EW 명령으로의 간단한 변화를 통해 양 방향 쉬프팅이 PE 명령어에 추가된다. EI 및 NI 명령 선택이 EW_in 및 NS_in 신호(도 12 참조)에 의해 에 의해 대체된다. Rx 및 Cx가 비활성화되는 경우에, EW_in 및 NS_in 신호가 각각 EI 및 NI가 되도록 정의된다. 이러한 구성에서, 도 12의 명령이 도 9의 명령과 동일하다.
Rx 신호가 활성화되면, NS/AL=NS_in과 EW/BL=EI를 사용하여 행 교환 쉬프트가 수행된다. 이러한 명령은 EW 플레인이 동쪽으로부터 쉬프트되도록 하고, NS 플레인이 서쪽으로부터 쉬프트되도록 한다. 활성 Rx가 EO 신호를 NS 값으로 설정하고 NS_in 신호를 WI로 설정하도록 하여, 서쪽으로부터의 NS 플레인 쉬프트가 일어나도록 한다는 것을 도 13에서 알 수 있다.
Cx 신호가 활성화될 때, 열 교환 쉬프트가 EW/BL=EW_in 과 NS/AL=NI를 사용하여 수행된다. 이러한 명령은 NS 플레인 북쪽으로부터 쉬프트 되도록 하고, EW 플레인이 남쪽으로부터 쉬프트 되도록 한다. 활성 Cx가 NO 신호를 EW 값으로 설정하고 EW_in 신호를 SI로 설정하도록 하여, 남쪽으로부터의 EW 플레인 쉬프트가 일어나도록 한다는 것을 도 13에서 알 수 있다.
2 개의 다중 비트 연산수의 곱이 "노말" 구성 상태에 있는 PE를 사용하여 수행된다. 곱셈 연산은 m 개의 패스를 요하는 다중 패스 동작이다. 여기서 각 패스는 n 비트 조건적 덧셈으로 구성되며, m은 승수의 비트 수이고, n은 피승수의 비트 수이다. 각 패스(pass)에 대해, 승수의 연속 비트가 D 레지스터에 로딩된다. 피승수를 누적된 부분 결과(적합한 비트 오프셋에서)에 합하는 조건적인 덧셈이 수행된다. 이러한 방법으로, 비트 직렬 곱셈이 약 M*n에서 수행된다.
상술한 비트 직렬 곱셈이 각 패스 상의 승수의 단일 비트와 피승수를 효과적으로 곱한다. 비트 직렬 곱셈을 개선하는 방법은 각 패스 상에 인가되는 승수 비트의 수를 증가시키는 것이다. 이를 행하는 방법이 이하에서 설명된다. 이러한 방법은 이러한 방법을 보조하는 데 필요한 PE 레지스터의 개수를 1 씩 감소시킨다는 점에서 먼저 설명되는 방법을 개선한다.
예시적인 개선된 곱셈은, 각 패스 중에, 두 개의 승수 비트와 피승수의 곱셉을 제공한다. 이를 수행하기 위해서는 6개의 PE 레지스터들을 필요로 한다. 적합한 가산기(도 15에 도시된 예시적인 실시예에 되시된 전가산기(102)와 전가산기(103)에 더하여)를 ALU(101')에 부가하고 2 개의 PE 레지스터를 각각의 추가 승수 비트에 부가함으로써, 동일한 방법이 어떤 승수 비트(패스 당)의 수로도 확장될 수 있다.
개선된 곱셈 방법이 예시적인 두 개의 8비트 연산수의 곱에 의해 표현된다. (제 1 패스에 대한 첫 번째 두 사이클이 도 14에 도시된다.) 첫 번째 두 승수 비트(m1, m0)가 승수 레지스터에 로드된다. 승수 비트가 제 1 패스에 걸쳐 변화되지 않는다. 제 1 사이클에 대해, 피승수 비트(n0)가 피승수 레지스터에 로드된다. 누산기 비트(a0)는 누산기 레지스터에 로드되며, 부분 결과 레지스터가 소거된다. 승수의 각 사이클에 대해, 승수 비트가 피승수 비트와 곱해지며, 2 비트 결과가 2 비트 부분 결과 1 비트 누산기에 더해져 2 비트 부분 결과값을 발생한다. 최하위 Bw_cy 부분 결과 비트(제1 사이클에 대한 p0)가 메모리에 저장되고 다음 두 개의 부분 결과 비트가 다음 사이클에 대한 부분 결과 레지스터에 로드된다.
제 2 비트와 피승수(a1 및 n1)가 로딩된다는 점과 0'의 부분 결과 대신에 부분 결과 레지스터가 이전 승수 사이클로부터의 부분 결과를 포함한다는 점을 제외하고, 제 2 사이클은 제 1 사이클과 유사하다. 각 연속 사이클에서, 부분 결과의 최하위 비트가 누산기 이미지에 저장된다.
제 1 패스에 대해, p0가 a0 등으로 저장된다. 제 2 패스에 대해, 누산기 이미지가 2의 비트 오프셋에 접속되어 제 1 사이클에서, a2가 로드되고(n0의 로드 시점과 동시에), p0 값이 a2에 기록된다. 승수 비트(m2, m3)가 로드되어 제 2 패스가 시작된다.
개선된 곱셈 연산을 수행하기 위한 PE 레지스터의 배치가 도 15에 도시된다. PE의 배열은 D 레지스터(150)가 피승수 비트를 위해 사용되고, EW (170)와 NS(160) 레지스터가 다중 비트를 위해, AL(180) 및 BL(190) 레지스터가 부분 결과 비트를 위해, 그리고 C 레지스터(140)가 누산기 비트를 위해 사용되는 것을 나타내기 위한 것이다. 승수 ALU(101')는 3개의 부분 결과 출력을 생성하는 데 필요한 곱셈 연산 및 덧셈 연산을 제공한다. 부분 결과 비트를 나타내는 PE 신호는 M0, M1, M2로 표 시된다.
PE 명령어(도 16)의 AL, BL 및 D 명령 필드에 의해 선택된 신호를 추가하여 향상된 곱셈을 위한 레지스터가 재정의된다. 이러한 신호들은 AL_Op0, AL_Op1, BL_Op0, BL_Op1, 그리고 D_Op로 이름 붙여지고 도 17에 도시된 바와 같이 정의된다. Alu_cmd가 1XX0(다중 모드)가 아닐 때, AL, BL 및 D 명령은 도 9에 도시된 바와 같이 "일반" 동작에 대해 정의된다.
1XX0의 Alu_cmd가 도 17의 신호들이 곱셈 연산에 대해 정의되도록 한다. 특히 AL_Op0와 BL_Op0는 M2 및 M1 ALU 출력을 AL(180) 및BL(190) 레지스터에 연결한다. 1XX0의 범위 내에서, Alu_cmd[1]와 Alu_cmd[2] 비트는 개선된(향상된) 곱셈 연산에 필요한 추가적인 제어를 제공한다.
활성 Alu_cmd[1]은 하이(즉,논리 1) 결과 비트(도 17의 EW*D)의 반전 신호를 나타낸다. 이러한 신호는 승수가 부호화된 이미지인 곱셈의 최종 패스 동안 활성화된다. 최종 패스의 제 1 사이클 동안에, 활성 Alu_cmd[1]는 또한 AL 레지스터가 0 대신에 1로 설정되도록 한다. 이는, 하이 피승수 비트에 의해 발생한 부분 결과의 2의 보수 반전 신호의 일부이다.
활성 Alu_cmd[2] 신호는 Aram 값이 D_Op에 연결되도록 하여 D 레지스터(150)에 로딩되게 한다.
PE의 비트 직렬 성질은 곱셈 연산이 어떤 사이즈의 소스나 정의 연산수에도 수행되도록 한다. 소스 연산수는 이미지나 스칼라 연산수이며, 부호가 있거나 없을 수도 있다. 로직 내 곱셈 시퀀서의 구현이 복수의 제한 부여한다. 예를 들어, Src2(피승수) 연산수를 비 스칼라(이미지) 연산수로 제한하고, Dest 연산수 크기를 1 비트나 이보다 크게 제한하며, 그리고 소스 연산수에 Dest 연산수를 겹쳐쓰기하는 것을 금지하는 것이 있다. PE 구조 자체에 의한 하나의 제한은 향상된 곱셈 연산을 수직 동작(예, 스크가 없음)으로 제한하는 것이다.
곱셈에 대한 메모리 접근을 연속하게 하는 방법이 도 18에 도시된다. 이 실시예에서, 6 비트 승수(x)가 4 비트 피승수(y)와 곱해진다. 곱셈의 각 패스에 대해, 두 개의 승수 비트와 피승수 연산수가 곱해진 후, 부분 결과에 합해져 누적값을 발생한다. 제 1 패스에서, x1x0가 y와 곱해져 제 1 누산기 값(5)..(0)을 발생한다. 제 2 패스에서, x3x2가 y와 곱해지고 6 비트 결과값이 누산기 비트 (5)..(2)에 더해져 다음 누산기 값 (7)..(2)을 발생한다. 로우 누산기 비트(1)..(0)은 제 1 패스 이후에 변경되지 않는다. 제 3 패스에 대하여, x5x4는 y와 곱해지고 6 비트 결과값이 누산기 비트(7)..(4)에 더해져 최종 결과 비트(9)..(4)를 발생한다. 누산기 비트(3)..(0)은 이러한 패스에 영향을 받지 않는다.
이러한 동작에 대한 PE Ram 접속 패턴이 도 18에 의해 도시된다. 각 패스에 대해, 2 승수 비트가 로드된다. 패스(pass)는 피승수 및 누산기 비트의 일련의 로드 및 새로운 누산기 비트의 결과를 저장으로 구성된다. 각 패스에 대해, 피승수 이미지가 lsb부터 msb로 이어진다. 그러나 누산기 이미지가 시작 시점에서 접속된다(로드 및 저장 모두). 시작 시점은 각 패스에 대해 2 비트 더 높다. 또한, 누산기의 크기가 2 비트씩 각 패스에 대해 증가하므로, 누산기로의 쓰기 숫자는 모든 패스에 대해 동일하다.
도 18에 도시된 곱셈 연산은 도 19의 명령 연산에 의해 구현된다. 각 패스에 대해, 2 승수 비트가 NS(160) 및EW(170)으로 로딩된다. 다음으로, 피승수 비트가 연속하여 D 레지스터(150)로 로딩되며, 누산기 비트(Z)가 결과적으로 C 레지스터(140)로 로딩된다. 모든 피승수 비트가 독출된 후에, 이 패스에 대한 새로운 누산기 값의 발생을 완료하도록 추가로 2 사이클이 수행되어야 한다. 이와 같은 2 사이클 동안에, (올드: old) 누산기 값과 피승수는 C 및 D 내부로 확장하는 부호(sign)이다. 이러한 두 개의 사이클 동안, NS(160) 및 EW(170) 레지스터가 다음 패스에 대한 준비시에 로드된다.(피승수가 부호를 가지지 않는 경우에만 이러한 동시성이 가능하며, 이는 0이 아닌 D 값이 시간상 앞선 NS 및 EW 값을 각 패스에 대한 최종 누산기 값과 상충하도록 하기 때문이다.) ALU_Cmd는 유사한 패턴의 뒤를 따르며, 각 패스의 첫 번째 4 사이클 동안 1100으로 설정되고 두 개의 부호 확장 사이클 동안 1000으로 설정된다. AL(180)과 BL(190) 레지스터는 각 패스(al_op1, bl_op1)의 제 1 사이클 동안 0을 로딩하고, 나머지 사이클(al_op0, bl_op0) 동안 M1/M2를 로딩한다. Wram 쓰기 명령이 곱셈 연산에 걸쳐 1이며 M0 값을 저장한다. 제 1 패스 동안에, C 레지스터(140)가 0으로 로딩된다. 이는 누산기가 초기에 0이기 때문이다. 이미지가 부호가 없는(unsigned) 경우에, 마지막 패스는 노말 패스와 같다. 그러나 부호를 가지는 승수 이미지에 대해, 마지막 패스 동안에 "반전" 비트가 설정된다(ALU_Cmd=XX1X).
이하의 설명은 발명이 속하는 분야의 기술자가 본 발명을 이용할 수 있도록 하기 위한 것이며, 구체적인 응용 예 및 필수 구성요소들을 포함한다. 첨부된 실시예들에 대해 다양한 변경을 할 수 있음은 당업자에게 자명하며, 여기에 정의된 일반적인 개념들이 본 발명(예, 일반적인 수동 광 네트워크(PON) 구조들)의 사상 및 범위를 벗어나지 않는 한 다른 실시예들 및 응용 예들에 적용될 수 있다. 따라서, 본 발명은 이하의 실시예들에 한정되는 것이 아니며, 이하에 포함된 개념 및 특징들을 포함하는 넓은 범위 포함한다.
상술한 본 발명의 실시예들은 단지 예시와 설명을 위한 것일 뿐이며, 본 발명을 설명된 형태로 한정하려는 것이 아니다. 따라서, 다양한 변화 및 변경을 할 수 있음은 본 발명이 속하는 분야의 당업자에게 자명하다. 또한, 이 명세서의 상세한 설명이 본 발명의 범위를 제한하는 것은 아니다. 본 발명의 범위는 첨부된 청구항에 의해서 정의된다.
Claims (28)
- 복수의 프로세싱 소자를 포함하되,(1) 각 프로세싱 소자는 모든 프로세서 소자로 제공되는 명령어에 응답하여 동시에 동일한 동작을 수행하며;(2) 각 프로세싱 소자는 m 비트 데이터 값에 대해 산술 연산을 수행하며, 각 연산으로부터 올림 및 빌림 결과 중 하나를 전달하고, 그리고 상기 동작으로 입력되는 올림 및 빌림 입력 중 하나로 구성되는 신호를 수신하며,(3) 상기 전달될 올림 및 빌림 값들의 선택이, 상기 프로세싱 소자에 대해 로컬한 마스크 값에 의해 각 프로세싱 소자에 대해 개별적으로 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 1 항에 있어서,m 비트 연산의 M/m 반복 수행에 의해 M 비트 연산수에 대한 동작을 완료하는 것을 특징으로 하는 프로세싱 어레이.
- 제 1 항에 있어서,상기 m을 1로 선택하는 것을 특징으로 하는 프로세싱 어레이.
- 제 1 항에 있어서,가산 연산을 위해 상기 마스크 값을 0으로 설정하는 단계와 감산 연산을 위해 상기 마스크 값을 1로 설정하는 단계로 구성된 Addsub 동작을 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 제 4 항에 있어서,상기 마스크를 소스 연산수의 부호 값으로 설정하고 상기 소스 연산수와 0d의 ADDsub를 수행함으로써 절대값을 산출하는 것을 특징으로 하는 프로세싱 어레이.
- 제 4 항에 있어서,상기 마스크를 두 개의 데이터 값 사이의 차의 부호 값으로 설정하고 상기 차와 상기 합계의 Addsub를 수행함으로써, 절대 차를 합하는 하나의 단계를 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 제 4 항에 있어서,상기 마스크를 나머지의 부호 값으로 설정하고 분모와 상기 나머지의 Addsub를 수행함으로써, 나누기 동작의 일 패스를 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 제 4 항에 있어서,상기 마스크를 나머지의 부호 값으로 설정하고 분모와 상기 나머지의 Addsub를 수행함으로써, 절대값(modulus) 동작의 일 패스를 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 복수의 프로세싱 소자를 포함하되,(1) 각 프로세싱 소자는 모든 프로세서 소자로 제공되는 명령어에 응답하여 동시에 동일한 동작을 수행하며,(2) 각 프로세싱 소자는 상호 연결되어 2 차원 그물망을 형성하고, 상기 각 프로세싱 소자는 동, 서, 남, 북으로 가장 인접한 네 개의 프로세싱 소자들에 연결되며,(3) 각 프로세싱 소자는, 데이터를 유지하고 북쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 북쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 북쪽의 인접 프로세싱 소자로 보내며, 그리고 남쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 남쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 남쪽의 인접 프로세싱 소자로 보내는 NS 레지스터를 제공하며,(4) 각 프로세싱 소자는, 데이터를 유지하며, 동쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 동쪽의 인접 프로세싱 소자로부터 데이터를 수신하는 동안에, 상기 데이터를 상기 동쪽의 인접 프로세싱 소자로 보내며, 그리고 서쪽으로의 쉬프트를 규정하는 명령에 응답하여 상기 서쪽의 인접 프로세싱 소자로부터 데이터 를 수신하는 동안에, 상기 데이터를 상기 서쪽의 인접 프로세싱 소자로 보내는 EW 레지스터를 제공하며,(5) 각각 반대 방향으로 데이터 송신 및 수신을 하는 NS 및 EW 레지스터를 사용하여 상기 동-서 축 및 북-남 축 중 하나를 따라 반대 방향으로 동시에 이루어지는 데이터 쉬프트가 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 9 항에 있어서,상기 NS 레지스터가 특정 데이터의 쉬프트를 상기 북쪽 및 상기 남쪽 중 하나를 향해 수행하며,상기 EW 레지스터는 다른 데이터의 쉬프트를 반대 방향으로 동시에 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 제 9 항에 있어서,상기 EW 레지스터가 특정 데이터의 쉬프트를 상기 동쪽 및 상기 서쪽 중 하나를 향해 수행하며,상기 NS 레지스터는 다른 데이터의 쉬프트를 반대 방향으로 동시에 수행하는 것을 특징으로 하는 프로세싱 어레이.
- 제 9 항에 있어서,상기 반대 방향으로 이루어지는 상기 데이터의 동시 쉬프트는 명령에 응답하 여 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 10 항에 있어서,상기 반대 방향으로 이루어지는 상기 데이터의 동시 쉬프트는 레지스터 배열 신호에 응답하여 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 11 항에 있어서,상기 반대 방향으로 이루어지는 상기 데이터의 동시 쉬프트는 레지스터 배열 신호에 응답하여 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 10 항에 있어서,상기 EW 레지스터를 통한 상기 데이터 동시 쉬프트가 상기 NS 레지스터를 통해 북-남 쉬프트에 사용되는 신호 경로를 거쳐 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 11 항에 있어서,상기 NS 레지스터를 통한 상기 데이터 동시 쉬프트가 상기 EW 레지스터를 통해 동-서 쉬프트에 사용되는 신호 경로를 거쳐 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 9 항에 있어서,상기 반대 방향으로 이루어지는 데이터의 동시 쉬프트가 버터플라이 셔플 동작을 수행하기 위해 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 복수의 프로세싱 소자를 포함하되,(1) 각 프로세싱 소자는 단일 패스 내에서 m 비트 승수와 n 비트 피승수의 곱셈을 수행하고, 상기 패스(pass)는 n 사이클을 포함하며,각 사이클은 피승수 레지스터로의 피승수 비트 로드와, 누산기 레지스터로의 누산기 비트 로드와, 부분 결과값의 발생과, 그리고 메모리로의 계산된 누산기 비트의 저장을 포함하며,(2) 상기 부분 결과값은 m+1 비트와, 상기 계산된 누산기 비트로서 전달되는 비트의 최하위 비트와, 그리고 m 비트 부분 결과값 레지스터에 저장되는 나머지 m 비트를 포함하며,(3) 상기 누산기 비트와, 상기 레지스터의 부분 결과값과, 상기 피승수 및 m 비트 승수의 m 비트 결과값을 합산하여 상기 부분 결과값이 산출되는 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,상기 m 비트 승수에 의한 곱셈이 0의 초기 누산기 값을 이용하는 단일 패스를 수행함으로써 연산 되는 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,M 비트 승수에 의한 곱셈이 상기 M/m 패스에서 수행되며,제 1 패스에 대한 m 비트 승수가 M 비트 승수의 최하위 m 비트를 포함하고,상기 초기 누산기 값이 0 이며,누산기로의 접속이 상기 제 1 패스에 대한 0 비트에서 시작되고,각 후속 패스에 대하여,(1) 상기 누산기 값으로의 접속이 이전 패스에 대한 초기 접속으로부터의 m 비트 오프셋에서 시작되며,(2) 상기 m 비트 승수가 상기 이전 패스에 대한 선택 포인트로부터의 m 비트 오프셋에서 상기 M 비트 승수로부터 선택되는 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,상기 m이 2 인 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,상기 패스의 시작 시에 상기 레지스터 부분 결과값을 소거하는 수단을 더 포함하는 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,상기 m 비트 결과값의 최상위 비트를 반전함으로써 부호를 가지는 승수의 곱셈이 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 20 항에 있어서,상기 마지막 패스 동안에 각 m 비트 결과값의 최상위 비트를 반전함으로써 부호를 가지는 승수의 곱셈이 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 18 항에 있어서,상기 피승수 비트가 상기 피승수 부호 비트이고 상기 누산기 비트가 상기 누산기 부호 비트인 동안에, 상기 n 사이클에 뒤이은 m 추가 사이클이 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 20 항에 있어서,상기 피승수 비트가 상기 피승수 부호 비트이고 상기 누산기 비트가 상기 누산기 부호 비트인 동안에, 상기 n 사이클에 뒤이은 m 추가 사이클이 수행되는 것을 특징으로 하는 프로세싱 어레이.
- 제 26 항에 있어서,상기 피승수와 상기 누산기 부호 비트가 부호가 없는 피승수에 대한 0의 비 트에 의해 표현되는 것을 특징으로 하는 프로세싱 어레이.
- 제 27 항에 있어서,상기 m 사이클 동안에, 부호가 없는 피승수에 대한 다음 패스를 위해 m 승수 비트를 로딩하는 것을 특징으로 하는 프로세싱 어레이.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US56762404P | 2004-05-03 | 2004-05-03 | |
US60/567,624 | 2004-05-03 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20070039490A true KR20070039490A (ko) | 2007-04-12 |
Family
ID=35320872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020067024961A KR20070039490A (ko) | 2004-05-03 | 2005-05-03 | Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20050257026A1 (ko) |
EP (1) | EP1763769A2 (ko) |
JP (1) | JP2007536628A (ko) |
KR (1) | KR20070039490A (ko) |
CN (1) | CN101084483A (ko) |
WO (1) | WO2005109221A2 (ko) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7184468B2 (en) * | 2002-01-24 | 2007-02-27 | Broadcom Corporation | Method and system for implementing a conditional one's complement of partial address |
US7804900B2 (en) * | 2006-02-23 | 2010-09-28 | Industrial Technology Research Institute | Method for fast SATD estimation |
CN101416216B (zh) * | 2006-03-30 | 2012-11-21 | 日本电气株式会社 | 并行图像处理系统控制方法和设备 |
US20120084539A1 (en) * | 2010-09-29 | 2012-04-05 | Nyland Lars S | Method and sytem for predicate-controlled multi-function instructions |
US9183614B2 (en) | 2011-09-03 | 2015-11-10 | Mireplica Technology, Llc | Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets |
JP5939572B2 (ja) * | 2012-07-11 | 2016-06-22 | 国立大学法人東京農工大学 | データ処理装置 |
CN103077008B (zh) * | 2013-01-30 | 2014-12-03 | 中国人民解放军国防科学技术大学 | 数组相加运算汇编库程序的地址对齐simd加速方法 |
US9280845B2 (en) * | 2013-12-27 | 2016-03-08 | Qualcomm Incorporated | Optimized multi-pass rendering on tiled base architectures |
CN107851214A (zh) | 2015-07-23 | 2018-03-27 | 米雷普里卡技术有限责任公司 | 针对二维阵列处理器的性能增强 |
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 |
WO2018192500A1 (zh) | 2017-04-19 | 2018-10-25 | 上海寒武纪信息科技有限公司 | 处理装置和处理方法 |
CN117933327A (zh) | 2017-04-21 | 2024-04-26 | 上海寒武纪信息科技有限公司 | 处理装置、处理方法、芯片及电子装置 |
US11663454B2 (en) * | 2019-03-29 | 2023-05-30 | Aspiring Sky Co. Limited | Digital integrated circuit with embedded memory for neural network inferring |
US11755240B1 (en) * | 2022-02-23 | 2023-09-12 | Gsi Technology Inc. | Concurrent multi-bit subtraction in associative memory |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5619443A (en) * | 1995-03-31 | 1997-04-08 | International Business Machines Corporation | Carry select and input select adder for late arriving data |
US6073150A (en) * | 1997-06-23 | 2000-06-06 | Sun Microsystems, Inc. | Apparatus for directing a parallel processing computing device to form an absolute value of a signed value |
GB9727414D0 (en) * | 1997-12-29 | 1998-02-25 | Imperial College | Logic circuit |
US6212628B1 (en) * | 1998-04-09 | 2001-04-03 | Teranex, Inc. | Mesh connected computer |
US6167421A (en) * | 1998-04-09 | 2000-12-26 | Teranex, Inc. | Methods and apparatus for performing fast multiplication operations in bit-serial processors |
US6185667B1 (en) * | 1998-04-09 | 2001-02-06 | Teranex, Inc. | Input/output support for processing in a mesh connected computer |
US6067609A (en) * | 1998-04-09 | 2000-05-23 | Teranex, Inc. | Pattern generation and shift plane operations for a mesh connected computer |
GB2352309B (en) * | 1999-07-21 | 2004-02-11 | Advanced Risc Mach Ltd | A system and method for performing modular multiplication |
US6691143B2 (en) * | 2000-05-11 | 2004-02-10 | Cyberguard Corporation | Accelerated montgomery multiplication using plural multipliers |
US6476634B1 (en) * | 2002-02-01 | 2002-11-05 | Xilinx, Inc. | ALU implementation in single PLD logic cell |
-
2005
- 2005-05-03 US US11/120,549 patent/US20050257026A1/en not_active Abandoned
- 2005-05-03 EP EP05741115A patent/EP1763769A2/en not_active Withdrawn
- 2005-05-03 JP JP2007511467A patent/JP2007536628A/ja active Pending
- 2005-05-03 WO PCT/US2005/015143 patent/WO2005109221A2/en not_active Application Discontinuation
- 2005-05-03 CN CNA2005800212038A patent/CN101084483A/zh active Pending
- 2005-05-03 KR KR1020067024961A patent/KR20070039490A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
EP1763769A2 (en) | 2007-03-21 |
JP2007536628A (ja) | 2007-12-13 |
US20050257026A1 (en) | 2005-11-17 |
WO2005109221A2 (en) | 2005-11-17 |
WO2005109221A3 (en) | 2007-05-18 |
CN101084483A (zh) | 2007-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20070039490A (ko) | Simd 어레이 프로세서를 위한 비트 직렬 프로세싱 소자 | |
US11204976B2 (en) | Expanded kernel generation | |
CN108268945B (zh) | 神经网络单元及其运作方法 | |
JP7268996B2 (ja) | 計算のためのシステムと方法 | |
US10338919B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US7725520B2 (en) | Processor | |
KR100291383B1 (ko) | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 | |
JP3940542B2 (ja) | データプロセッサ及びデータ処理システム | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
EP1293891A2 (en) | Arithmetic processor | |
EP1586991A2 (en) | Processor with plurality of register banks | |
EP1070295A1 (en) | Pattern generation and shift plane operations for a mesh connected computer | |
JP2020109605A (ja) | マルチスレッドプロセッサのレジスタファイル | |
US20220206796A1 (en) | Multi-functional execution lane for image processor | |
Liu et al. | WinoCNN: Kernel sharing Winograd systolic array for efficient convolutional neural network acceleration on FPGAs | |
CN110377874B (zh) | 卷积运算方法及系统 | |
JP3955741B2 (ja) | ソート機能を有するsimd型マイクロプロセッサ | |
CN110414672B (zh) | 卷积运算方法、装置及系统 | |
CN115039070A (zh) | 用于向量运算的旋转累加器 | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
GB2567038B (en) | Accessing prologue and epilogue data | |
JP7230744B2 (ja) | 畳込み演算方法及び演算処理装置 | |
WO2008077803A1 (en) | Simd processor with reduction unit | |
JP2001084242A (ja) | 可変演算プロセッサ | |
JP2010531502A (ja) | 並列プロセッサ用のアドレス指定装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |