KR101547366B1 - 병렬 프로세서용 어드레싱 디바이스 - Google Patents

병렬 프로세서용 어드레싱 디바이스 Download PDF

Info

Publication number
KR101547366B1
KR101547366B1 KR1020097027117A KR20097027117A KR101547366B1 KR 101547366 B1 KR101547366 B1 KR 101547366B1 KR 1020097027117 A KR1020097027117 A KR 1020097027117A KR 20097027117 A KR20097027117 A KR 20097027117A KR 101547366 B1 KR101547366 B1 KR 101547366B1
Authority
KR
South Korea
Prior art keywords
action field
dimension
data structure
xmin
bits
Prior art date
Application number
KR1020097027117A
Other languages
English (en)
Other versions
KR20100033979A (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 KR20100033979A publication Critical patent/KR20100033979A/ko
Application granted granted Critical
Publication of KR101547366B1 publication Critical patent/KR101547366B1/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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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
    • 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
    • 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/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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
    • 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
    • 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Multi Processors (AREA)
  • Image Input (AREA)

Abstract

본 발명은, 토폴로지내에서 소정의 위치를 갖는 이러한 토폴로지에 따라 배치되고, 상이한 데이터에 대해 동일한 명령을 동시에 실행할 수 있는 요소 프로세서들 (3) 을 포함하는 병렬 프로세서에 관한 것이며, 그 명령은 적어도 하나의 오퍼랜드에 관한 것이고/이거나 적어도 하나의 결과를 제공한다. 그 명령은, 각각의 오퍼랜드 및/또는 각각의 결과에 대해, M 차원 타입의 테이블의 데이터 구조 내에서 액션 필드의 위치에 관한 정보를 포함하며, 그 병렬 프로세서는, 액션 필드의 위치 및 토폴로지내의 요소 프로세서의 위치의 함수로서, 각각의 요소 프로세서내의 각각의 오퍼랜드 및/또는 각각의 결과의 어드레스를 계산하기 위한 수단들 (41, 42, 43) 을 포함한다.
Figure R1020097027117
병렬 프로세서, 요소 프로세서

Description

병렬 프로세서용 어드레싱 디바이스{ADDRESSING DEVICE FOR PARALLEL PROCESSOR}
본 발명은, 특히, SIMD 타입의 병렬 컴퓨터들에 적용가능한 병렬 프로세서용 어드레싱 디바이스에 관한 것이다.
SIMD 라는 용어는, Flynn 에 의해 도입된 병렬 컴퓨터들의 분류를 지칭한다. 그것은, 단일 명령 다중 데이터 스트림 (SIMD) 타입의 병렬 컴퓨터를 나타낸다.
과거에는, SIMD를 구현하기 위해 하나 이상의 전자 보드들이 필요했다. 현재, SIMD는 단일 집적 회로, 예를 들어, FPGA 또는 ASIC 상에 위치될 수 있다.
도 1을 참조하여 설명된 SIMD는,
단일 시퀀서 (1)
단일 명령 메모리 (2), 및
다수의 요소 프로세서들 (3) 또는 프로세싱 요소 (PE) 들을 포함한다.
각각의 PE (3) 는,
산술 및 로직 유닛 (ALU; 31), 및
일련의 메모리들 및/또는 데이터 레지스터들 (32) 을 포함한다.
각각의 사이클에서, 시퀀서는,
다음의 명령을 결정하고, 그 다음의 명령을 명령 메모리로부터 판독하며,
이러한 명령을 모든 PE들로 송신한다.
대부분의 명령들은,
실행될 연산,
연산의 각각의 오퍼랜드 (operand) 를 페치할 어드레스 Ad, 및
결과를 저장할 어드레스 또는 어드레스들 Ad를 정의한다.
실행될 연산은 하나 이상의 오퍼랜드들을 포함한다. 그 연산은 하나 이상의 오퍼랜드들을 포함하는 기본 연산 (예를 들어, 부호 변환 또는 가산 또는 if 또는 최대값 계산) 에 제한될 수 있거나, 수 개의 기본 연산들의 조합 (예를 들어, 승산, 후속하여 가산) 일 수 있다. 유사하게, 결과는 하나 이상의 어드레스들에 저장될 수 있다.
각각의 PE는, 상이한 데이터에 대해, 이러한 경우에서는 그 각각의 PE에 속하는 메모리들 및/또는 레지스터들에 대한 것이지만, 이러한 동일한 명령을 동시에 실행한다.
코스 (course) 의 "각각의 사이클에서" 라는 표현은, 종래의 파이프라인 기술에 따라 수 개의 물리적인 사이클들에 걸쳐 그의 실행이 확장할 수 있는 로직 사이클을 지칭한다. 중요한 것은, 신규한 명령이 각각의 사이클에서 시작하고 신규한 명령이 각각의 사이클에서 종료된다는 것이다. 이것은, 그 명령의 실행이 수 개의 사이클에 걸쳐 확장하는지는 문제가 되지 않는다.
예를 들어, 명령 R(23)=R(8)+R(3)*R(19) 을 취한다. 이는, 레지스터 3 의 콘텐츠를 판독하고, 그 콘텐츠를 레지스터 19 의 콘텐츠와 승산하고, 레지스터 8 의 콘텐츠에 이러한 승산의 결과를 가산하며, 이러한 가산 결과를 레지스터 23 에 기입한다는 것을 나타낸다. 이러한 동일한 명령이 모든 PE들에 의해 병렬로 실행될 것이다. 그러나, 각각의 PE는 그에 속한 레지스터들의 세트 상에서 이것을 실행할 것이다. 전체적으로, 128개의 PE들이 존재하면, 명령의 실행은, 판독될 128개의 레지스터 3, 판독될 128개의 레지스터 19, 판독될 128개의 레지스터 8을 초래할 것이고, 128개의 승산은 2배의 128개의 상이한 값들에 대해 수행될 것이고, 128개의 가산이 2배의 128개의 상이한 값들에 대해 수행될 것이며, 128개의 상이한 결과들이 128개의 레지스터 23에 기입될 것이다.
SIMD의 효율도는 이러한 고도의 병렬성 (parallelism) 으로부터 초래한다.
일반적으로, SIMD 상에서, 각각의 PE는, 그에 속하는 메모리들 및/또는 레지스터들의 세트로부터, 뿐만 아니라 그의 이웃들 중 하나에 속하는 메모리들 및/또는 레지스터들의 세트 중 몇몇 또는 모두로부터 명령의 오퍼랜드를 판독, 즉, 페칭할 가능성을 갖는다. 보완 또는 대안일 수 있는 변형은, 각각의 PE가 그에 속하는 메모리들 및/또는 레지스터들 뿐만 아니라 그의 이웃들 중 하나에 속하는 메모리들 및/또는 레지스터들에 명령의 결과를 기입할 가능성을 갖는다는 것이다.
PE들 사이의 이웃의 개념은, SIMD의 아키텍처, 더 정확하게는, PE들 사이의 상호접속 토폴로지 (topology) 에 의해 정의된다. PE들 사이의 수 개의 상호접속 토폴로지가 제안되었다. 가장 복잡한 것은, PE들 사이의 진성 (genuine) 상호접속 네트워크이다. 가장 간단한 것은, PE들의 수직열이다. 또 다른 간 단한 토폴로지는 PE들의 2차원 그리드이다. 또한, PE들의 다차원 그리드를 가정하는 것이 가능하다. 일반적으로, 이러한 마지막 3개의 경우에서, 엔드들은 "재결합" 된다. 따라서, 일-차원 토폴로지에서, PE들의 수직열은 PE들의 원이 된다 (종종, "PE들의 링" 이라는 용어가 사용된다). 이러한 재결합 때문에, PE의 가장 남쪽의 남부 이웃은 가장 북쪽의 PE가 되고, PE의 가장 북쪽의 북부 이웃은 가장 남쪽의 이웃이 된다. 유사하게, 2차원 토폴로지에서, PE들의 그리드는 토로이드 (toroid) 가 된다. 최종적으로, 다차원 토폴로지에서, 다차원 그리드는 다차원 토폴로지가 된다.
일차원 토폴로지 (PE들의 수직열 또는 링) 의 경우, 각각의 PE는, (북쪽 및 남쪽에 대해) N 및 S로 지칭되는 2개의 이웃을 갖는다. 2차원 토폴로지 (PE들의 2차원 그리드 또는 토로이드) 의 경우, 각각의 PE는, (북쪽, 남쪽, 동쪽 및 서쪽에 대해) N, S, E, W로 지칭되는 4개의 이웃을 갖는다. 다차원 토폴로지 (PE들의 다차원 그리드 또는 다차원 토폴로지) 의 경우, 각각이 PE는 2n 개의 이웃들을 가지며, 여기서, n은 공간 차원이다.
본 명세서의 나머지에서, 일차원 토폴로지의 경우가 먼저 고려될 것이며, 그 후, 2차원 토폴로지의 경우, 그 후, 다차원 토폴로지의 경우가 고려될 것이다.
현대의 SIMD 상의 통상적인 명령은, 모든 PE들 (또는 그들 중 몇몇) 이 수 개의 오퍼랜드들에 관한 연산, 즉, 그 PE들 모두에 대해 동일한 연산을 수행하고, 그 결과를 하나 이상의 위치들에 저장하도록 요청한다. 이전의 예로 복귀하면, 명령 R(23)=R(8)+R(3)*R(19) 은, 모든 PE들이 3개의 오퍼랜드들에 관한 연산을 수행하고 그 결과를 일 위치에 저장하도록 요청한다.
대부분의 SIMD에서, 각각의 오퍼랜드 및 각각의 결과에 대해, 명령은, 상이한 PE들이 오퍼랜드를 판독 (또는 그 결과를 저장) 할 어드레스를 정의한다. 따라서, 소정의 오퍼랜드에 있어서, 소정의 결과 위치에 관하여, 모든 PE들에 대해 어드레스가 동일한 필요가 있다.
특히, 이미지 프로세싱, 이미지 압축, 합성 이미지 생성, 신호 프로세싱 또는 편미분 방정식들을 풀기 위한 특정한 기술들과 같은 통상적인 애플리케이션에서, 그러한 접근법은 문제를 초래한다. 예를 들어, 픽셀이 그의 이웃들로부터 계산되는 알고리즘을 이들 애플리케이션들이 사용할 경우, PE들의 토폴로지가 1차원, 2차원 또는 다차원이든지 간에 그 알고리즘을 수행한다.
이러한 문제점을 예시하기 위해, 이미지 프로세싱을 사용하는 예가, 링으로 구성된 16개의 PE들의 SIMD를 고려하여 취해지고 분석된다.
본 명세서의 나머지 모두에서, 수학식을 간략화하기 위해, 데이터 구조 (신호, 이미지 또는 볼륨) 의 라인들 및 열들에 따라 프로세서가 0으로부터 시작하여 넘버링된다.
이미지의 픽셀들을 상이한 PE들의 메모리에 위치시키는 종래의 방식은, 이미지의 라인 0 을 저장 및 프로세싱하기 위해 PE0 (PE N°0) 을 사용하고, 라인 1을 저장 및 프로세싱하기 위해 PE1 (PE N°1) 을 사용하고, 그 이후도 유사하며, 라인 15 를 저장 및 프로세싱하기 위해 PE15 (PE N°15) 까지 사용하는 것이다. 이 미지가 일반적으로 16개를 초과하는 라인들을 포함하므로, 사용자는, 그 이미지의 라인들 0, 16, 32, 48, 64, 80, ... 을 저장 및 프로세싱하기 위해 PE0 을 사용하고, 그 이미지의 라인들 1, 17, 33, 49, 65, 81, ... 을 저장 및 프로세싱하기 위해 PE1 을 사용하고, 그 이후도 유사하며, 그 이미지의 라인들 15, 31, 47, 63, 79, 95, ... 을 저장 및 프로세싱하기 위해 PE15 까지 사용할 것이다.
이러한 저장 시스템에서, Np가 PE들의 수를 나타내고 Lx가 프로세싱될 이미지의 폭을 나타내면, 좌표 (x, y) 를 갖는 픽셀은 다음의 식에 따라 어드레스 Ad에서 프로세서 p에 저장된다.
p= y Mod Np
Ad= x + Lx * Int(y/Np), (Int(z) 는 z의 정수부를 나타냄)
이러한 저장 시스템은 도 2에 도시되어 있다. 이 도면은, 폭 64의 픽셀들의 이미지의 경우를 고려하고, 링 토폴로지로 구성된 16개의 PE들의 SIMD에 그 이미지를 저장하는 일반적인 방법을 나타낸다. 이 도면에서, 열들은 이미지의 열들을 나타내고, 라인들은 이미지의 라인들을 나타내고, PE의 수는 각각의 라인의 최좌측에 표시되며, 각각이 픽셀이 저장되는 어드레스는 각각의 박스내에 표시된다. 이 도면에서, 다음의 2개의 도면에서와 같이, 동종의 어드레스 (homogeneous address) 들을 갖는 구역들 (모든 PE들에서 동일한 어드레스를 갖는 구역) 사이의 경계들은 검은색 라인들에 의해 표시된다.
관례대로, 이미지의 좌측은 낮은 x 좌표를 갖는 픽셀들에 의해 구성되지만, 이미지의 상단은 낮은 y 좌표를 갖는 픽셀들에 의해 구성되는 시각적인 표현이 선 택되었다. 따라서, 그의 에지들이 좌표축들과 평행인 정방형의 좌측 상단 코너는 최저의 x 좌표 및 최저의 y 좌표를 갖는 포인트이지만, 우측 하단 코너는 최고의 x 좌표 및 최고의 y 좌표를 갖는 포인트이다. 이러한 관례는 이후에 사용된다.
이러한 저장 시스템은 PE들의 수직링으로서 SIMD를 고려하게 된다. 명백하게, 반대의 선택은, PE들의 수직링이 아니라 수평링으로서 SIMD를 고려하며, 라인들을 더 이상 저장하는 것이 아니라 이미지의 열들을 저장하기 위해 PE들을 사용하는 것으로 구성할 시에 행해질 수 있다. 도 3은 이러한 저장 시스템을 도시한다. 실제로, 그것은, 머신의 레벨에서는 실제로 변하지 않는 프로그래머에 대한 시각적인 표현의 선택의 문제일 뿐이다. 라인들에서의 표현에 관해 후술되는 것은, 열들에서의 표현에 명백히 적용가능하다.
이미지의 라인들의 PE들로의 상술된 할당 타입은, 그것이, 2개의 이미지들의 가산, 2개의 이미지들의 승산, 일 콘텐츠와 일 이미지와의 승산, 라인 마스크에 의한 일 이미지의 콘볼루션 등과 같은 간단한 연산들의 문제일 경우, 실제로는, 그것이 오퍼랜드로서 기능하는 픽셀들 및 결과 픽셀이 동일한 PE에 의해 저장되는 간단한 연산들의 문제일 경우, 임의의 문제를 초래하지 않는다.
그것이, 오퍼랜드로서 기능하는 픽셀들 및 결과 픽셀이 상이한 PE들에 의해 저장되는 연산들의 문제일 경우, 상황은 더 복잡하게 된다. 예를 들어, 2차원 마스크에 의한 일 이미지의 콘볼루션의 경우, 결과 픽셀을 저장하는 것을 담당하는 PE는, 그 PE에 속하는 메모리들 및/또는 레지스터들 뿐만 아니라, 이웃한 PE들, 또 는 심지어 이웃들의 이웃들 또는 훨씬 더 나아간 이웃들에 속하는 메모리들 및/또는 레지스터들에서 그 PE의 계산들을 수행하기 위해 필요한 오퍼랜드들을 페치해야 한다.
좌측 상단 코너가 좌표 x=8, y=4 를 갖고 우측 하단 코너가 좌표 x=39, y=35 를 갖는 32×32 정방형에 대해 3×3 콘볼루션을 실행하고, 좌측 상단 코너가 좌표 x=8 y=68 를 갖고 우측 하단 코너가 좌표 x=39 y=99 를 갖는 32×32 정방형에 결과를 저장하기를 원한다고 가정한다. 상술된 바와 같이, 해당 xy 레퍼런스에서 x 축은 좌측으로부터 우측으로 증가하고 있고 y 축은 상단으로부터 하단으로 증가하고 있다는 것을 상기한다.
a(-1, -1), a(0, -1), a(1, -1), a(-1, 0), a(0, 0), a(1, 0), a(-1, 1), a(0, 1), 및 a(1, 1) 이 콘볼루션 필터의 9개의 계수들이라고 한다.
I(x, y) 를 본래의 이미지의 픽셀들이라고 한다.
R(x, y+64) 를 결과 이미지의 픽셀들이라고 한다.
8 과 39 사이의 x의 각각의 값 및 4 와 35 사이의 y의 각각의 값에 대해 수행될 계산은 다음과 같다.
R(x, y+64) = a(-1, -1) * I(x-1, y-1) + a(0, -1) * I(x, y-1) + a(1, -1) * I(x+1, y-1) + a(-1, 0) * I(x-1, y) + a(0, 0) * I(x, y) + a(1, 0) * I(x+1, y) + a(-1, 1) * I(x-1, y+1) + a(0, 1) * I(x, y+1) + a(1, 1) * I(x+1, y+1).
제 1 연산은, 상단 엔드가 좌표 x=8, y=4 를 갖고 하단 엔드가 좌표 x=8, y=19 를 갖는 16×1 수직 세그먼트에 대해 이러한 콘볼루션을 수행하는 것이다. 이러한 세그먼트는 도 2에서 어두운 회색으로 도시되어 있다. 이러한 제 1 연산의 제 1 단계는, 상단 엔드가 좌표 x=7, y=3 을 갖고 하단 엔드가 x=7, y=18 을 갖는 16×1 수직 세그먼트를 판독하는 것이다. 이러한 세그먼트는 도 2에서 밝은 회색으로 도시되어 있다. 판독된 16개의 픽셀들 각각은 콘볼루션 마스크의 제 1 계수와 승산된다. 다음의 단계는, 상단 엔드가 좌표 x=8, y=3 을 갖고 하단 엔드가 x=8, y=18 을 갖는 16×1 수직 세그먼트를 판독하는 것이다. 판독된 16개의 픽셀들 각각은 콘볼루션 마스크의 제 2 계수와 승산되며, 이러한 제 2 승산의 결과는 제 1 승산의 결과에 가산된다. 이러한 절차는, 콘볼루션 마스크의 9개의 계수들 (3×3 콘볼루션이 일 예로서 취해지므로 9개의 계수들) 에 대해 이러한 방식으로 계속된다. 따라서, 상단 엔드가 좌표 x=8, y=68 을 갖고 하단 엔드가 x=8, y=83 을 갖는 16×1 수직 세그먼트 상에 결과가 저장된다. 따라서, 제 1 연산이 종료된다. 그 후, 프로세싱될 정방형의 상부 절반의 31개의 나머지 열들을 프로세싱하기 위한 31개의 유사한 연산들이 존재하고, 그 후, 이러한 정방형의 하부 절반의 32개의 열들을 프로세싱하기 위한 32개의 유사한 연산들이 존재한다.
제 1 연산의 제 1 단계로부터 난제가 나타난다. 그 후, 이것은, 모든 연산들의 모든 단계들에 대해 동일하다. 이러한 제 1 단계에 있어서, 상단 엔드가 좌표 x=7, y=3 을 갖고 하단 엔드가 x=7, y=18 을 갖는 16×1 수직 세그먼트를 판독하는 것이 필요하다. 도면에 도시된 바와 같이, PE3 내지 PE15 에 대해 판독될 픽셀들은 어드레스 7에 저장되지만, PE0 내지 PE2 에 대해 판독될 픽셀 들은 어드레스 71에 저장된다.
그러나, 종래의 SIMD에 있어서, 시퀀서는 동일한 어드레스를 모든 PE들로 전송한다.
선택된 예가, 에지가 동종의 어드레스들의 구역들 사이의 경계와 정렬되지 않는 직사각형, 즉, 상단 에지가 PE들의 수의 배수가 아닌 y 좌표를 갖는 직사각형에 관한 것이라는 것에 반대가 있을 수 있다. 이러한 반대는 분석이 안된다. 한편으로, 그러한 직사각형들을 프로세싱해야 하는 경우는 이미지 프로세싱에서 빈번한 경우이다. 다른 한편으로, 결과적인 이미지를 포함하는 직사각형이 동종의 어드레스들의 구역들 사이의 경계와 정렬되지 않는 에지를 갖더라도, 그럼에도 불구하고, 3×3 콘볼루션의 상이한 단계들을 프로세싱하기 위해, 엔드들 모두가 동종의 어드레스들의 구역들 사이의 경계와 정렬되지 않는 16×1 수직 세그먼트들을 오퍼랜드로서 페치할 필요가 있다.
이러한 난제를 극복하기 위한 수 개의 기술들이 제안되었다.
제 1 기술은, PE들의 조건적인 활성화를 이용한 2개의 페이즈 (phase) 에서의 로딩이다. 제 1 페이즈에서, 어드레스 7에서 판독해야 하는 PE들만이 판독 연산을 실제로 수행한다. 제 2 페이즈에서, 어드레스 71에서 판독해야 하는 PE들만이 판독 연산을 실제로 수행한다. 따라서, 이러한 제 1 단계를 수행하기 위해, 그것은, 특정한 PE들은 그들이 어드레스 7에 저장하는 픽셀을 일 오퍼랜드로서 로딩해야 하지만 다른 PE들은 그들이 어드레스 71에 저장하는 픽셀을 일 오퍼랜드로서 로딩해야 하는 사실을 관리해야 하는 연산의 프로그래머이다. 이러한 타입의 머신을 프로그래밍할 시의 큰 난제는 이것으로부터 발생한다. 또한, 실행될 명령들의 나머지로 인한 더 낮은 실행 효율도가 존재한다.
제 2 기술은 각각의 PE 내의 인디렉션 레지스터 (indirection register) 의 인스톨이다. 인디렉션 레지스터는, 어드레스가 이러한 레지스터에 포함되는 워드에 액세스하는 것을 가능하게 하는 레지스터이다. 이러한 인디렉션 레지스터 때문에, 각각의 PE는 자신의 어드레스를 계산하고, 그것을 인디렉션 레지스터에 로딩하며, 자신의 메모리에 액세스하기 위해 그것을 사용할 수 있다. 그러나, 제 1 기술에서와 같이, 한편으로, 그것이, 난제를 관리해야 하는 애플리케이션 프로그래머이므로 부가적인 프로그래밍 난제가 또한 존재하고, 실행될 명령들의 나머지로 인해 더 낮은 실행 효율도가 또한 존재한다.
다른 기술들이 고려된다. 일반적으로, 그들 모두는, 그들이 한편으로는 부가적인 프로그래밍 난제를 초래하고, 다른 한편으로는 실행될 명령들의 나머지로 인한 더 낮은 실행 효율도를 초래한다는 사실을 갖는다.
2차원 토폴로지에 따라 구성된 SIMD가 사용되면, 문제는 훨씬 더 크다. 또한, 도 4a 및 도 4b는, 폭 64의 픽셀들의 이미지의 동일한 예를 사용하지만, 4×4 토로이드 토폴로지에 따라 구성된 16개의 PE들의 SIMD를 사용한다. 제 1 연산의 제 1 단계에 있어서, 좌측 상단 코너가 좌표 x=7, y=3 을 갖고 우측 하단 코너가 좌표 x=10, y=6 를 갖는 4×4 정방형을 판독할 필요가 있다. 이러한 정방형은 도 4a에서 밝은 회색으로 도시되어 있다. 도 4b에 도시된 바와 같이, 판독될 픽셀들은 이전과 같이 2개의 상이한 어드레스들에 더 이상 저장되는 않지 만, 4개의 상이한 어드레스들에 저장되며, 그 4개의 어드레스는, PE15에 대한 어드레스 1, PE들 12, 13 및 14 에 대한 어드레스 2, PE들 3, 7 및 11 에 대한 어드레스 17, 및 다른 PE들에 대한 어드레스 18 이다.
또한, 다차원 토폴로지에 따라 구성된 SIMD가 사용되면, 난제는 증가한다. 예를 들어, 판독될 픽셀들은, 상이한 어드레스들의 수가 더 작은 특수한 경우 (판독 또는 기입될 구역의 특정한 위치) 를 제외하고, 3차원 토폴로지에서는 8개의 상이한 어드레스들에 저장되고, 2차원 토폴로지에서는 16개의 상이한 어드레스들에 저장된다.
본 발명의 목적은 이들 단점들을 극복하는 것이다.
본 발명은, 명령이, 각각의 요소 프로세서가 자신의 메모리에서 판독 또는 기입하는 어드레스를 표시함으로써 요소 프로세서들의 판독들의 세트 및/또는 기입들의 세트를 정의하는 것 대신에, 액션 필드에서의 기입 및/또는 판독인 것으로서 요소 프로세서들 각각의 그 자신의 메모리에서의 판독들 및/또는 기입들의 세트를 정의한다는 사실에 기초한다.
사용자에 의해 관측되는 바와 같이, 요소 프로세서들의 세트의 메모리-워드들의 세트는 N 차원 타입의 테이블의 고유한 데이터 구조로서 관측되며, 이러한 테이블은 신호 (1차원) 또는 이미지 (2차원) 또는 볼륨 (3차원) 등을 나타낼 수 있다. 액션 필드는, 이러한 데이터 구조에 대한 레퍼런스에 의하여 명령에 의해, 이러한 데이터 구조의 서브-세트인 것으로서 정의된다.
"액션 필드" 라는 용어는 요소 프로세서 당 하나의 메모리-워드의 레이트에서의 메모리-워드들의 세트를 지칭하며, 이러한 메모리-워드는 요소 프로세서의 메모리에 위치되고, 오퍼랜드의 액션 필드는, 이러한 오퍼랜드를 획득하기 위하여, 요소 프로세서들에 의해 그들의 각각의 메모리에서 판독된 메모리-워드들의 세트이며, 결과의 액션 필드는, 이러한 결과를 저장하기 위하여, 요소 프로세서들에 의해 그들의 각각의 메모리에 기입되는 메모리-워드들의 세트이다.
각각의 오퍼랜드 및/또는 각각의 결과에 대해, 명령은, 이러한 액션 필드의 위치에 대한 정보를 포함하며, 이러한 위치는, N 차원 타입 (신호 또는 이미지 또는 볼륨 등) 의 테이블의 고유한 데이터 구조내의 위치인 것으로서 정의되고, 상이한 요소 프로세서들의 메모리들에 걸쳐 분산되고, N은 1 이상의 정수이다. 이하, 데이터 구조는 N 차원 타입의 테이블의 이러한 고유한 데이터 구조를 지칭할 것이다.
액션 필드의 위치는, 각각의 요소 프로세서가 오퍼랜드에서 그것에 관한 메모리-워드를 자신의 메모리에서 판독해야 하고/하거나 결과에서 그것에 관한 메모리-워드를 자신의 메모리에 기입해야 하는 어드레스를 계산하는 것을 가능하게 한다.
현대의 SIMD 상의 통상적인 명령은, PE들 모두, 또는 그들 중 몇몇에게 수 개의 오퍼랜드에 관해 동일한 연산을 모두 수행하고 하나 이상의 위치들에 그 결과를 저장하도록 요청한다.
또한, 도 2의 예를 취하면, 제 1 연산의 제 1 단계는, 상단 엔드가 좌표 x=7, y=3 을 갖고 하단 엔드가 좌표 x=7, y=18 을 갖는 16×1 수직 세그먼트를 판독하는 것을 필요로 한다. 오퍼랜드 I(x-1, y-1) 의 액션 필드는, 좌표들 (x=7, y=3), (x=7, y=4), (x=7, y=5), ..., (x=7, y=18) 을 갖는 픽셀들로 구성되며, 도면에 도시된 바와 같이, PE3 내지 PE15 에 대해 판독될 픽셀들은 어드레스 7에 저장되지만, PE0 내지 PE2 에 대해 판독될 픽셀들은 어드레스 71에 저장된다.
종래의 SIMD 컴퓨터에서, 각각의 오퍼랜드 및 각각의 결과에 대해, 명령은, 상이한 PE들이 오퍼랜드를 판독하거나 그 결과를 저장할 어드레스를 정의한다. 따라서, 종래의 SIMD는 동종의 어드레싱 구역들에 대응하는 액션 필드들을 고려하는 방법만을 인식한다. 예를 들어, 종래의 SIMD에서, 상단 엔드가 좌표 x=7, y=0 을 갖고 하단 엔드가 좌표 x=7, y=15 를 갖는 액션 필드를 고려하는 것은 이들 픽셀들 모두가 어드레스 7에 저장되기 때문에 가능하고, 또는 상단 엔드가 좌표 x=7, y=16 을 갖고 하단 엔드가 좌표 x=7, y=31 을 갖는 액션 필드를 고려하는 것은 이들 픽셀들 모두가 어드레스 71에 저장되기 때문에 가능하지만, 상단 엔드가 좌표 x=7, y=3 을 갖고 하단 엔드가 좌표 x=7, y=18 을 갖는 액션 필드를 고려하는 것은 특정한 픽셀들은 어드레스 7에 저장되고 다른 픽셀들은 어드레스 71에 저장되기 때문에 가능하지 않다. 즉, 종래의 SIMD에서, 후자가 비-동종의 어드레스 구역들에 걸쳐 있을 경우 액션 필드를 고려하는 것은 가능하지 않다.
본 발명에 따라 설계된 병렬 프로세서는, 상이한 오퍼랜드들 또는 명령의 결과들이, 동종의 어드레스 구역들에 반드시 대응할 필요가 없는 액션 필드들을 고려하게 한다.
더 상세하게, 본 발명의 논제는, 적어도 하나의 계산 유닛, 및 메모리-워드를 포함하는 적어도 하나의 메모리를 각각 포함하는 요소 프로세서 PE 를 포함하며, 토폴로지에 따라 이러한 토폴로지 내의 소정의 위치로 배치되고, 상이한 데이터에 대해 동일한 명령을 동시에 실행할 수 있는 병렬 프로세서이며, 그 명령은, 적어도 하나의 오퍼랜드의 판독을 포함하고/하거나 적어도 하나의 결과의 기입을 포함한다. 대체로, 명령은, 액션 필드에서의 판독 및/또는 기입인 것으로서 요소 프로세서들의, 각각의 자신의 메모리에서의 판독들의 세트 및/또는 기입들의 세트를 정의하는 것을 특징으로 하며, 그 액션 필드는 요소 프로세서 당 하나의 메모리-워드의 레이트에서의 메모리-워드들의 세트이고, 이러한 메모리-워드는 요소 프로세서의 메모리에 위치되며, 오퍼랜드의 액션 필드는, 이러한 오퍼랜드를 획득하기 위하여, 요소 프로세서들 각각의 자신의 메모리에 그 요소 프로세서들에 의해 판독된 메모리-워드들의 세트이고, 결과의 액션 필드는, 이러한 결과를 저장하기 위하여, 요소 프로세서들 각각의 자신의 메모리에 그 요소 프로세서들에 의해 기입된 메모리-워드들의 세트이며, 그 명령은 각각의 오퍼랜드 및/또는 각각의 결과에 대해 이러한 액션 필드의 위치에 관한 정보를 포함하는 것을 특징으로 하고, 그 액션 필드의 위치는 N 차원 타입의 테이블의 고유한 데이터 구조내의 위치인 것으로서 정의되는 것을 특징으로 하고, N은 1 이상의 정수이며, 이러한 테이블은 상이한 요소 프로세서들의 메모리에 걸쳐 분산되는 것을 특징으로 한다.
제안된 병렬 프로세서는 다음의 원리를 사용하며, 즉, 각각의 오퍼랜드, 및 결과가 저장되는 데이터 구조의 각각의 엘리먼트에 대해, 명령은, PE가 오퍼랜드를 판독하거나 결과를 기입해야 하는 어드레스가 아니라, 그 데이터 구조 내의 결과 또는 오퍼랜드의 액션 필드의 위치를 정의하는 것을 가능하게 하는 정보를 정의한다. 각각의 PE의 위치에 관한 값 및 이러한 정보를 사용하여, 계산 수단은, 각각의 PE가 오퍼랜드를 판독하거나 결과를 기입해야 하는 어드레스를 인식하는 것을 가능하게 한다.
이러한 방식에서, 각각의 PE가 자신의 메모리에 직접 판독하거나 기입하는 어드레스는 계산에 의해 획득되며, 이러한 계산은 액션 필드의 위치, 및 토폴로지 내의 PE의 위치에 따라 수행된다.
이들 액션 필드들의 형상 (수평 또는 수직 세그먼트, 정방형, 직사각형 또는 평행6면체) 은 종래의 SIMD 상에서 동일하게 유지된다.
한편, 액션 필드의 위치는, 종래의 SIMD 상에서 보다 훨씬 더 유연한 방식으로 정의된다. 특히, 그러한 병렬 프로세서는, 이미지 프로세싱 예에서 설명되고 도면들 2, 3, 및 4에 의해 도시된 액션 필드들과 같은 액션 필드들을 고려하는 것을 가능하게 하며, 이것은, 이들 액션 필드들을 구성하는 셀들이 PE들에 의존하여 상이한 어드레스들에 위치되더라도 가능하다.
그러나, 그의 이점은 그 이상이다. 예로서, 픽셀이 그의 이웃들로부터 계산되는 알고리즘을 사용하는 모든 애플리케이션들은 그것으로부터 이점을 얻을 수 있다. 이것은, 신호 프로세싱, 이미지 프로세싱, 이미지 압축, 합성 이미지 생성 및 편미분 방정식들을 풀기 위한 더 특정한 기술들을 커버링한다. 통상적인 예는, 유한 차분법을 사용하여 3차원 공간에서 편미분 방정식들을 푸는 것이다.
이들 애플리케이션에 대한 2배의 이점이 존재한다.
- 프로그래머가 동종의 어드레스 구역들 사이의 경계들의 개념에 의해 더 이상 선취될 필요가 없기 때문에, 알고리즘의 프로그래밍이 간략화된다.
- 더 적은 실행될 명령들이 존재하기 때문에 실행이 가속화된다.
본 발명의 특성에 따르면, 병렬 프로세서는, 어드레스를 계산하는 수단에 접속되는, 액션 필드의 위치를 상기 정보의 함수로서 계산하는 수단을 포함한다.
각각의 요소 프로세서 내에서 어드레스를 액션 필드의 위치 함수로서 계산하는 수단은,
각각의 요소 프로세서의 레벨에 전체적으로 로컬화되거나,
각각의 요소 프로세서의 레벨에서 부분적으로 로컬화되고 수 개의 요소 프로세서들 사이에서 부분적으로 그룹화될 수 있다.
본 발명에 따른 병렬 프로세서는, 액션 필드의 위치를 상기 정보의 함수로서 계산하는 수단을 가급적 포함한다. 그 액션 필드의 위치를 계산하는 이러한 수단은,
- 모든 PE들 사이에서 전체적으로 그룹화되거나,
- 각각의 요소 프로세서의 레벨에서 전체적으로 로컬화되거나,
- 수 개의 PE들 사이에서 부분적으로 그룹화되고 다른 요소 프로세서들의 레벨에서 부분적으로 로컬화될 수 있다.
일반적으로, 요소 프로세서들은 P 차원을 갖는 토폴로지에 따라 배치되며, P는 1 이상의 정수이고/이거나, 프로세싱될 데이터는 N 차원을 갖는 공간에서의 구조에 속하며, N은 1 이상의 정수이다.
본 발명의 특성에 따르면, 각각의 차원에 있어서, 상기 차원에 따른 x 좌표 p의 요소 프로세서에 관한 데이터 구조의 엘리먼트의 어드레스의 계산은, 필드의 위치에 관한 값 및 요소 프로세서의 위치에 관한 값의 조합에 의해 획득된다.
본 발명의 일 실시형태에 따르면, 액션 필드는 그의 좌표들에 의해 정의된 엔드들을 가지며, 예를 들어, 액션 필드의 위치는, 좌표가 최소인 엔드의 위치에 의해 정의된다.
본 발명의 특성에 따르면, 각각의 차원에 있어서, x 좌표가 상기 차원에 따른 p인 요소 프로세서에 관한 데이터 구조의 엘리먼트의 어드레스를 액션 필드의 위치의 함수로서 계산하는 수단은,
Ad = Int((Wmin + Np - 1 - p) / Np)
를 계산하는 수단을 포함하며, Np는 상기 차원 상의 해당 요소 프로세서들의 수이고, Wmin은 상기 위치의 좌표들의 함수로서 상기 차원 상에서 정의된다.
예를 들어, 병렬 프로세서는 SIMD 타입이다.
본 발명이 다른 특성들 및 이점들은, 비-제한적인 예로서 주어지는 다음의 상세한 설명을 첨부된 도면들을 참조하여 판독할 시에 나타날 것이다.
상술된 도 1은 종래 기술에 따른 SIMD 컴퓨터의 일 예의 도식적인 표현이다.
상술된 도 2는 링으로서 구성된 16개의 PE들을 갖는 SIMD 컴퓨터에서의 이미 지의 64×64 픽셀들의 저장을 도시한다.
상술된 도 3은 링으로서 구성된 16개의 PE들을 갖는 SIMD 컴퓨터에서의 이미지의 64×64 픽셀들의 또 다른 저장을 도시한다.
상술된 도 4a 및 도 4b는 4×4 토로이드로서 구성된 16개의 PE들을 갖는 SIMD 컴퓨터에서의 이미지의 64×64 픽셀들의 저장을 도시하며, 도 4a는 해당 PE들을 나타내고, 도 4b는 PE들 내의 어드레스들을 나타낸다.
도 5는 본 발명에 따른 병렬 프로세서의 일 예의 도식적인 표현이다.
도 6a 내지 도 6e는 다음의 경우들에서 본 발명에 따른 어드레스 계산 수단의 하드웨어 실시형태의 예들의 도식적인 표현이다.
- 일차원 병렬 프로세서 및 일차원 데이터 구조 (도 6a),
- 일차원 병렬 프로세서 및 2차원 데이터 구조 (도 6b),
- 일차원 병렬 프로세서 및 다차원 데이터 구조 (도 6c),
- 2차원 병렬 프로세서 및 2차원 데이터 구조 (도 6d 및 도 6e).
동일한 엘리먼트들은 모든 도면에서 동일한 참조 부호에 의해 표시된다.
본 발명에 따르면, 명령은, 각각의 PE가 오퍼랜드를 판독하거나 결과를 기입해야 하는 어드레스가 아니라, 프로세싱된 데이터 구조내의 액션 필드의 위치에 대한 정보를 정의한다. 이러한 위치는 절대값 또는 이전의 위치에 관한 상대값 중 어느 하나로 정의될 수 있다. 따라서, 각각의 PE에 적절한 어드레스를 그 정보로부터 유도하기 위해, 특정한 수의 계산 단계들이 필요하다.
제 1 단계는, 액션 필드의 위치가 명령에 의해 절대값으로서 정의되지 않으면 실행될 명령으로부터 그 액션 필드의 위치를 계산하는 것으로 구성된다. 이러한 제 1 단계의 종료에서, 결과는 PE와 독립적이다.
제 2 단계는, 각각의 PE가 오퍼랜드를 판독하거나 결과를 기입하는 어드레스를 액션 필드의 위치로부터 계산하는 것으로 구성된다. 아래의 예들에서 관측될 바와 같이, 그 어드레스는, 액션 필드의 위치에 관한 값과 PE의 위치에 관한 값과의 가산 또는 감산에 의해 획득된다. 이러한 제 2 단계의 종료에서, 결과는 PE에 의존한다.
(예를 들어, 상당한 수의 와이어 또는 상당한 수의 게이트를) 최적화하려고 추구하는지에 의존하여, 이들 계산들은, 중심적으로 최대값에 대해 수행되고 이에 따라 모두에 대해 일회 수행되고 수 개의 PE들 사이에서 공유될 수 있거나, 이와 대조적으로, 각각의 PE의 레벨에서 로컬적으로 최대값에 대해 수행되거나 특정한 공통 계산들의 그룹화의 중간 방법을 수행될 수 있다. 다수의 변형이 존재하므로, 그들 모두를 설명하는 것은 가능하지 않으며, 그 설명은 몇몇 예들에 제한될 것이다.
따라서, 도 5에 도시된 일 구현은, 각각의 PE가 그의 메모리들 및/또는 레지스터들의 세트에서 어드레스 Ad 를 그것으로부터 유도하기 위해 이러한 정보를 사용하는 동안, 계산 수단 (50) 에 의해 중심적으로 액션 필드의 위치를 계산하는 것으로 구성될 수 있으며, 이러한 어드레스는 각각의 PE의 어드레스 계산 수단들 (41, 42, 43) 에 의해 획득된다. 이러한 원리의 이점은, 각각의 PE에서 수행될 계산들의 볼륨, 이에 따라 하드웨어의 볼륨을 최소화시킨다는 것이다.
비로컬화 (delocalization) 가 극단으로 푸시 (push) 되면, 또 다른 구현은 각각의 PE의 레벨에서 모든 것, 즉, 액션 필드의 위치 및 대응하는 어드레스를 계산하는 것으로 구성될 수 있다. 이러한 변형의 단점은, 각각이 PE에서 수행될 계산들의 볼륨, 이에 따라, 하드웨어의 볼륨을 증가시킨다는 것이다. 그러나, 모든 PE들로 송신될 정보의 볼륨, 이에 따라 회로에서의 와이어들의 수를 감소시키는 것이 가능할 수 있으며, 이는 특정한 경우에서 바람직할 수 있다.
이와 대조적으로, 각각의 PE에서 수행될 계산들의 볼륨, 이에 따라, 하드웨어의 볼륨을 최소로 감소시키기를 원할 수도 있다. 따라서, 또 다른 구현은, PE들의 그룹의 레벨에서 수 개의 PE들에 대해 공통적으로 또는 더 중심적으로 특정한 계산들을 상호적으로 행하는 것으로 구성될 수 있다. 이것의 일 예는 제 4 실시형태에서 관측될 것이다.
각각의 PE의 어드레스 계산 수단 (41, 42, 43) 은, 하드-와이어된 하드웨어 또는 더 유연한 하드웨어, 예를 들어, 프로그래밍가능한 프로세서의 수단에 의해 제조될 수 있다. 또한, 각각의 PE가 인디렉션 레지스터를 가지면, 계산들은 PE들의 ALU들에 의해 순수하게 소프트웨어 방식으로 수행될 수 있으며, 이에 따라, 임의의 부가적인 하드웨어를 부가하지 않는다. 따라서, 하드웨어에서 훨씬 더 경제적인 그러한 구현은, 특정한 애플리케이션에서 바람직할 수 있다.
액션 필드의 위치를 정의하는 정보에 관하여 상이한 선택, 예를 들어, 이전에 정의된 라인에서의 필드의 중심 또는 엔드가 가능하다. 이들 선택의 모두가 근접한 변형과 동등하고, 일 선택으로부터 또 다른 선택으로의 변화가 사소하므로, 이러한 문제는 더 상세히 설명되지 않을 것이다. 사실, 이들 선택들은, 액션 필드의 위치가 엔드들의 선형 조합에 의해 획득된 무게 중심의 위치에 의해 정의된다는 사실을 공통적으로 가지며, 그 엔드들의 유의성 (significance) 의 합산은 1과 동일하다. 예시적인 실시형태들을 설명하기 위해, 액션 필드의 위치를 정의하기 위해 선택된 정보가 모든 좌표들이 최소인 필드의 포인트인 경우가 선택된다. 즉, 그 포인트로부터 무한까지의 방향에서 필드의 엔드는 각각의 좌표상에서 -∞ 와 동일하다. 도 2, 3 및 4에서, 좌표 (7, 3) 를 갖는 포인트가 제 1 연산의 제 1 단계에 대해 사용된다고 한다.
본 발명은, 일차원, 2차원, 3차원 또는 다차원 토폴로지들을 갖는 병렬 프로세서들에 적용될 수 있으며, 이들 토폴로지들 각각에서는, 일차원 (예를 들어, 신호), 2차원 (예를 들어, 이미지), 3차원 (예를 들어, 편미분 방정식들을 풀기 위한 3D 볼륨) 또는 다-차원인 데이터 구조상에 적용될 수 있고, 또한, 각각의 타입의 병렬 프로세서상에 각각의 데이터 구조를 저장하는 상이한 방법들에 적용될 수 있다.
또한, 본 발명은, 상이한 데이터에 대해 동일한 프로세싱을 실행하는 다수의 요소 프로세서들을 사용하는 프로세싱 아키텍처들에, 이러한 아키텍처가 SIMD 카테고리에 속하지 않는 경우를 포함하여 적용될 수 있다. 예를 들어, 제어 구조는 시퀀서가 아니거나 프로그래밍가능하지 않거나 프로그래밍이 명령보다 더 높은 레벨에서 수행되는 경우이다.
다음으로, 실시형태의 수 개의 예들이 상세히 설명될 것이다.
실시형태의 제 1 예는, 예를 들어, 링 구조 및 일차원 데이터 구조, 예를 들어, 신호를 갖는 일차원 병렬 프로세서의 경우에 관한 것이다.
사용자가 그의 데이터를 병렬 프로세서상에 다음과 같이 저장하는 경우가 고려되며, 신호의 엘리먼트 x는 어드레스 Ad 에서 PE N°p 에 저장되고, 여기서,
p = x Mod Np
Ad = Int(x / Np)
Np 는 PE들의 수이다.
이러한 경우, PE들의 세트는 폭 Np 의 세그먼트로서 관측되고, 액션 필드는 폭 Np 의 세그먼트이며, 그 세트는 Np 개의 엘리먼트들을 포함한다.
필드의 위치를 정의하기 위해 사용되는 정보가 필드의 좌측 엔드의 x 좌표인 경우가 고려되며, 그 정보의 x 좌표는 최소이다. Xmin 을 이러한 x 좌표라 하며, 따라서, 액션 필드는 Xmin 으로부터 Xmin+Np―1 로 확장한다. 각각의 PE는 이들 엘리먼트들 중 하나 및 하나에만 관계된다.
필드내에서 PE N°p 에 관한 엘리먼트의 어드레스를 계산하는 것을 가능하게 하는 수학식은 다음과 같다.
Ad = Int((Xmin + Np - 1 - p) / Np).
이러한 수학식은, 순수한 하드웨어로부터 순수한 소프트웨어까지 퍼져 있는 다수의 구현을 초래한다.
그러나, 이러한 경우에서 특히 간단한 하드웨어 구현에 대해 참조가 행해지 며, 여기서, Np 는 2의 거듭제곱이다. 사실, 이러한 경우, LNp 가 Np의 베이스 2의 로그를 나타내며, Xmin 으로부터 Ad를 계산하는 방법은 다음과 같다.
Xmin 과 (Np-1-p) 를 가산함. 또한, 각각이 PE에 대하여, (Np-1-p) 가 (p의 모든 비트들을 인버팅함으로써 획득되는) p의 2의 보수와 동일한 상수이고, 이러한 상수가 PE N°p 에서의 메모리에 보유될 수 있다는 것이 관측된다.
결과의 최종 LNp 비트들을 삭제한다.
전체적으로, PE 당 단일 가산이 존재한다.
이러한 구현은 도 6a에 도시되며, Np=16, LNp=4 에 있어서, Xmin 은 12비트에 존재한다. PE가 오퍼랜드를 판독하거나 어드레스를 기입해야 하는 어드레스가, 필드의 위치에 관한 값과 그 PE의 위치에 관한 값의 가산 (또는 감산) 에 의해 획득된다는 사실을 특징으로 한다.
이러한 특히 간단한 타입의 구현은, 설명될 예시적인 실시형태들 모두에 걸쳐 전치 (transpose) 될 수 있다. 더 일반적으로, 그 실시형태는, 일차원, 2차원, 3차원, 또는 다-차원 토폴로지를 사용하여 구성된 임의의 타입의 병렬 프로세서에 대해 전치될 수 있고, 이들 토폴로지들 각각에서는, 일차원 (예를 들어, 신호), 2차원 (예를 들어, 이미지), 3차원 (예를 들어, 3D 볼륨) 또는 다차원 타입의 데이터 구조들에 대해 전치될 수 있다. 사실, 병렬 프로세서의 타입, 데이터 구조 및 선택된 저장에 따라 계산을 다시 하는 것으로 충분하며, 그 후, 그에 따라 구현을 적응시킨다.
제 2 예시적인 실시형태는, 예를 들어, 링 구조를 갖는 일차원 병렬 프로세 서 및 2차원 데이터 구조, 예를 들어, 이미지의 경우에 관한 것이다.
일차원 데이터 구조에 대해 사용된 계산은, 그 데이터 구조를 2차원 데이터 구조로 전치함으로써 다시 사용될 수 있으며, 이것으로부터 수학식들이 유도되고, 이에 따라, 애플리케이션이 적응된다.
또한, 일차원 데이터 구조에 대해 이전에 분석되었던 경우로 복귀함으로써 2차원 데이터 구조를 프로세싱하는 것을 가능하게 하는 방법을 사용하는 것이 가능하다.
Np 를 PE들의 수라하고, Lx 를 프로세싱될 이미지의 폭, 즉, 각각의 라인상의 픽셀들의 수라고 하며, Ly 를 이미지의 높이, 즉, 각각의 열상의 픽셀들의 수라 한다. 더 정확하게, 그것은 PE들의 수에 대한 상한 및 각각의 라인 및 각각의 열상의 픽셀들의 문제이다. 사실, 대부분의 경우 및 하드웨어를 간략화하는 목적을 위해, 프로세싱될 이미지를 더 큰 이미지 내부에 배치하고, 그에 따라, 그 프로세싱될 이미지의 차원보다 더 크게 Lx 및 Ly 의 값들을 선택하는 것이 바람직하다. 한편, 상이한 사이즈의 수 개의 이미지들이 프로세싱되어야 하면, 그 이미지들 중 가장 큰 이미지를 프로세싱하는 것을 가능하게 하는 단일 선택이 행해지는 것이 바람직할 수도 있다. 한편, 후자가 일 하드웨이일 경우 구현을 간략화하기 위해, 2의 거듭제곱이 종종 선택된다.
일차원 데이터 구조에 복귀하는 제 1 방식 (즉, PE들 상에 픽셀들을 저장하는 방식) 이, 각각의 픽셀 (x, y) 에 대해 다음을 기입할 것이다.
w=x + Lx * y
도 3에 도시된 이러한 타입의 저장부는 PE들의 수평 블록으로서 PE들의 세트를 고려하게 되며, 각각의 PE는 하나의 열 또는 수 개의 열들을 담당한다. 이러한 저장부, 이전에 분석되고 도 2에 도시되어 있고, PE들의 수직 블록으로서 PE들의 세트를 고려하게 되는 저장부와는 상이하며, 각각의 PE는 하나의 라인 또는 수 개의 라인들을 담당한다. 이러한 경우, 각각의 픽셀 (x, y) 에 대해 다음을 기입할 필요가 있다.
w=y + Ly * x
이들 2개의 수식을 비교할 경우, 일 저장 시스템으로부터 다른 저장 시스템으로 변경하는 방법을 용이하게 이해할 수 있다. 또한, 일 저장 시스템으로부터 또 다른 저장 시스템으로 변경하는 일반적인 방식은 후술될 것이다. 우선, 설명은 도 3에서 사용된 제 1 저장 시스템에 제한되며, 다음의 변환을 특징으로 한다.
w=x + Lx * y
이러한 변환에 의해, 제 1 실시형태에 대해 행했던 바와 같이, 병렬 프로세서 상에 픽셀들을 저장하는 것이 가능하며, 신호의 엘리먼트 w는 어드레스 Ad 에서의 PE N°p 에 저장되고, 여기서,
p=w Mod Np
Ad=Int(w/Np)
이다.
이러한 경우, 액션 필드는 폭 Np 의 수평 세그먼트이다.
예로서, 필드의 위치를 정의하기 위해 사용되는 정보가 좌표들이 최소인 필드의 엔드의 위치인 경우가 고려된다.
Xmin, Ymin 이 이러한 포인트의 좌표들이라 한다.
Wmin = Xmin + Lx * Ymin 이라 가정한다.
PE N°p 가 필드 내에서 관련되는 픽셀의 어드레스를 계산하게 하는 수학식은 다음과 같다.
Ad = Int((Wmin + Np - 1 - p)/Np)
그것은 제 1 실시형태에서와 같은 수학식이다. Wmin 은 간단히 Xmin 을 대체한다. 따라서, 일차원 구조에 유용한 구현 및 특히 설명되었던 구현을 2차원 데이터 구조로 전치하는 간단한 방식이 존재한다. Np 및 Lx 가 2의 거듭제곱이면, PE 당 하나의 단일 가산만이 존재한다. LNp 및 LLx 가 그들 각각의 로그를 나타낸다고 한다. 실시형태를 추가적으로 간략화하기 위해, 이러한 가산을 Wmin 에 대해 수행하기 보다는, 실제로, Xmin, 즉, Lx 비트에만 영향을 준다는 것이 관측된다. 다른 연산은, 가산보다 훨씬 더 간단한 비트들의 연접 (concatenation) 이다. 이에 따라 간략화된, Xmin, Ymin 으로부터 Ad 를 계산하는 방법은 다음과 같다.
Xmin 과 (Np - 1 - p) 를 가산한다.
결과의 최종 LNp 비트를 삭제한다.
최하위 위치에서 LLx - LNp 비트상에서 나타낸 이전의 양과 최상위 위치에서의 Ymin 을 연접한다.
이러한 구현은 도 6b에 도시되며, Np=16, LNp=4 에 있어서, Xmin 및 Ymin 은 6비트에 존재한다.
제 3 예시적인 실시형태는, (예를 들어, 링 구조를 갖는) 일차원 병렬 프로세서 및 2보다 큰 차원의 데이터 구조의 경우이다.
먼저, 3차원 데이터 구조 (예를 들어, 3D 볼륨) 의 경우가 고려된다.
Lx를 프로세싱될 볼륨의 폭이라 하고, Ly를 그 볼륨의 깊이라 하고, Lz를 그 볼륨의 높이라 하며, 더 정확하게는, 이전에 관측되었던 이유로 이들 3개의 양들의 상한을 정의한다.
일차원 데이터 구조로 복귀하는 일 방식 (즉, PE들 상에서 픽셀들을 저장하는 방식) 은 각각의 픽셀 (x, y, z) 에 대해 다음을 기입하는 것이다.
w = x + Lx * (y + Ly * z)
저장 시스템 w = x + Lx * (y + Ly * z) 이 아래에서 고려된다.
추론은 다음과 같은 다른 저장 시스템들로 용이하게 전치될 수 있다.
w = x + Lx * (z + Lz * y)
w = y + Ly * (x + Lx * z)
w = y + Ly * (z + Lz * x)
w = z + Lz * (x + Lx * y)
w = z + Lz * (y + Ly * x)
이러한 변환 때문에, 픽셀들은, 제 1 실시형태에서와 같이 병렬 프로세서상에 저장될 수 있으며, 신호의 엘리먼트 w는 어드레스 Ad에서의 PE N°p 에 저장되 고, 여기서,
p = w Mod Np
Ad = Int(w/Np)
이다.
이러한 경우, PE들의 세트는 폭 Np의 수평 세그먼트로서 관측되며, 액션 필드는 폭 Np의 수평 세그먼트이다.
예로서, 필드의 위치를 정의하기 위해 사용되는 정보가 좌표들이 최소인 필드의 엔드의 위치인 경우가 고려된다. Xmin, Ymin, Zmin 을 이러한 포인트의 좌표들이라 한다.
Wmin = Xmin + Lx * (Ymin + Ly * Zmin) 이라고 가정한다.
PE N°p 가 필드 내에서 관련되는 픽셀의 어드레스를 계산하게 하는 수학식은 다음과 같다.
Ad = Int((Wmin + Np - 1 - p)/Np)
그것은 제 1 실시형태에서와 같은 수학식이다. Wmin 은 간단히 Xmin 을 대체한다. 따라서, 일차원 데이터 구조에 유용한 임의의 구현 및 특히 설명되었던 구현을 삼차원 데이터 구조로 전치하는 간단한 수단이 존재한다. Np, Lx 및 Ly가 2의 거듭제곱이면, PE 당 하나의 단일 가산만이 존재한다. LNp, LLx 및 LLy 는 그들 각각의 로그를 나타낸다. 실시형태를 추가적으로 간략화하기 위해, 이러한 가산을 Wmin 에 대해 수행하기보다는, 실제로, Xmin, 즉, Lx 비트에만 관련된다는 것이 관측된다. 다른 연산은, 가산보다 훨씬 더 간단한 비트들 의 연접이다. 이에 따라 간략화된, Xmin, Ymin, Zmin 으로부터 Ad 를 계산하는 방법은 다음과 같다.
Xmin 과 (Np - 1 - p) 를 가산한다.
결과의 최종 LNp 비트를 삭제한다.
최하위 위치에서 Lx - LNp 비트상에서 나타낸 이전의 양, 중간의 유의성 위치에서 Ly 비트상에서 나타낸 Ymin, 및 최상위 위치에서, Lz 비트상에서 나타낸 Zmin 을 연접한다.
동일한 원리가 임의의 차원의 어떠한 데이터 구조들에도 적용될 수 있다. 따라서, 4차원에 관하여,
각각의 픽셀 (x, y, z, t) 에 대해, w = x + Lx * (y + Ly * (z + Lz * t)) 를 기입하고;
Xmin, Ymin, Zmin, Tmin 을 사용하여 액션 필드의 위치를 정의하고;
Wmin = Xmin + Lx * (Ymin + Ly * (Zmin + Lz * Tmin)) 을 가정하며,
최종적으로, 각각의 PE에 대해, Ad = Int((Wmin + Np - 1 - p)/Np) 를 계산하기에 충분하다.
실시형태의 제 4 예는, 예를 들어, 토로이드 구조를 갖는 2차원 병렬 프로세서 및 2차원 데이터 구조, 예를 들어, 이미지의 경우이다.
Nx를 x축 상의 PE들의 수라 하고, Ny를 y축 상의 PE들의 수라 하며, 따라서, Nx*Ny를 PE들의 총 수이다. Lx를 프로세싱될 이미지의 폭이라 하고, Ly를 그 이미지의 높이라 하며, 또는 이전에 나타낸 바와 같이, 이들 2개의 양들의 상한을 정의한다. 바람직하게는, Lx 및 Ly가, 각각, Nx 및 Ny의 배수로부터 선택된다. (px, py) 는 PE들의 토로이드 상에서 좌표 (px, py) 를 갖는 PE를 나타낸다.
예로서, 사용자가 그의 데이터를 병렬 프로세서 상에 다음과 같이 저장하는 경우가 고려되며, 이미지의 픽셀 (x, y) 은 어드레스 Ad에서의 PE (px, py) 에 저장되고, 여기서,
px = x Mod Nx
py = y Mod Ny
Adx = Int(x/Nx)
Ady = Int(y/Ny)
Ad = Adx + (Lx/Nx) * Ady
이다.
도 4a 및 4b에서 사용된 저장 시스템의 경우에서, PE들의 세트는 폭 Nx 및 높이 Ny의 직사각형으로서 관측되며, 액션 필드는 폭 Nx 및 높이 Ny의 직사각형이다.
이러한 저장 시스템이 일차원 데이터 구조에 대해 사용된 저장 시스템 상에서 모델링된다는 것이 관측된다. 사실, 그것은 공간의 2개의 방향들 각각에서 이러한 저장 시스템을 재생성한다. 따라서, 프로세싱 디바이스가 정확히 동일할 것이지만, 공간의 2개의 방향들 각각에 적용되어야 할 것이다.
예로서, 필드의 위치를 정의하기 위해 사용되는 정보가 좌표들이 최소인 필드의 코너, 즉, 포인트로부터 무한까지의 방향에서의 필드의 엔드가 각각의 좌표상 에서 -∞ 와 동일한 경우가 다시 고려된다. Xmin, Ymin 을 이러한 포인트의 좌표라 한다.
PE (px, py) 가 필드 내에서 관련되는 엘리먼트의 어드레스를 계산하게 하는 수학식은 다음과 같다.
Adx = Int((Xmin + Nx - 1 - px)/Nx)
Ady = Int((Ymin + Ny - 1 - py)/Ny)
Ad = Adx + (Lx/Nx) * Ady
제 1 실시형태에서 나타낸 수학식 및 제안된 디바이스의 특성은 또한 2회, 즉, x축상에서 1회 및 y축 상에서 1회 발견된다. 상술된 바와 같이, 이것은, 순수한 하드웨어로부터 순수한 소프트웨어까지 퍼져 있는 다수의 구현을 초래할 수 있다.
그러나, 이전의 실시형태에 대해 행해졌던 바와 같이, Nx, Ny, Lx 및 Ly가 2의 거듭제곱인 경우, 특히 간단한 하드웨어 구현에 대해 레퍼런스가 행해질 것이다. LNx가 Nx의 베이스 2의 로그를 나타내고, LNy가 Ny의 베이스 2로그를 나타내고, LLx가 Lx의 베이스 2 로그를 나타내며, LLy가 Ly의 베이스 2 로그를 나타내면, Xmin, Ymin 으로부터 Ad를 계산하는 방법은 다음과 같다.
Xmin 과 (Nx-1-px) 를 가산한다. Xmin, Nx 및 px가 PE들의 열에 공통적인 값들이라는 것을 유의한다. 따라서, 이러한 계산은 PE들의 열 당 1회만 수행되어야 한다. 또한, 양 (Nx-1-px) 은 PE들의 열에 대해 일정하다. 그 양은 PE들의 일 열에 대해 단일 메모리에 보유될 수 있다.
결과의 최종 LNx 비트를 삭제한다 ⇒ LLx-LNx 비트상의 Adx.
Ymin 과 (Ny-1-py) 를 가산한다. Ymin, Ny 및 py 가 PE들의 라인에 공통적인 값들이라는 것을 유의한다. 따라서, 이러한 계산은 PE들의 라인 당 1회만 수행되어야 한다. 또한, 양 (Ny-1-py) 은 PE들의 라인에 대해 일정하다. 그 양은 PE들의 일 라인에 대해 단일 메모리에 보유될 수 있다.
결과의 최종 LNy 비트를 삭제함 ⇒ LLy-LNy 비트상의 Ady.
Ad = Adx + (Lx/Ny) * Ady 이며, 이는, 최하위 위치에서, LLx-LNx 비트에 걸쳐 나타내는 Adx 및 최상위 위치에서, LLy-LNy 비트에 걸쳐 나타낸 Ady 를 연접하게 한다.
이전 타입의 실시형태를 전치하는 것이 가능하였다는 것이 확인된다. 지금부터는, PE들의 라인 당 단일의 가산 및 PE들의 열 당 단일의 가산이 존재한다. 또한, 이들 가산들은 매우 적은 비트들에 영향을 준다. 따라서, 이전의 실시형태에서 필요한 구현보다 훨씬 더 경제적인 구현이 존재한다. 이러한 구현은 도 6c에 도시되어 있으며, Nx=4, Ny=4, LNx=2, LNy=2 에 있어서, Xmin 및 Ymin 은 6비트에 걸쳐 있다.
예로서 선택된 4개의 실시형태가 연속적으로 분석된다.
- 일차원 병렬 프로세서 및 일차원 데이터 구조
- 일차원 병렬 프로세서 및 2차원 데이터 구조 프로세서
- 일차원 병렬 프로세서 및 다차원 데이터 구조
- 2차원 병렬 프로세서 및 2차원 데이터 구조
그러나, 제안된 원리는, 일차원, 2차원, 3차원, 또는 다차원 토폴로지로 구성된 병렬 프로세서에 적용될 수 있고, 이들 토폴로지들 각각에서는, 일차원, 2차원, 3차원, 또는 다차원 데이터 구조 상에서 적용될 수 있다.
다음으로, 일반화가 행해질 수 있다. n을 데이터 구조의 차원이라 하고, p를 병렬 프로세서의 토폴로지의 차원이라 한다.
n=p 이면, 정확하게는 n=2 (제 4 실시형태) 에 대해 설명된 바와 같이, 그 원리는 p개의 방향 각각에 적용된다.
n>p 이면, 제 2 및 제 3 실시형태의 경우에서 설명된 바와 같이, 2개의 축들 (차원 p의 구조가 획득될 때까지 그 후 2개의 다른 축, 그 후 2개의 다른 축) 을 선택하고, 다음의 타입의 식을 적용함으로써 이들 2개의 축들을 단일의 축으로 감소시킴으로써, 그 구조의 차원이 감소된다.
w = x + Lx * y
n<p 이면, 그 구조의 차원은 하나의 축 (차원 p의 구조가 획득될 때까지 그 후 또 다른 축, 그 후 또 다른 축) 을 선택함으로써 증가되며, 이러한 축은 그 축을 2개로 분할하기 위해 슬라이스들로 분할된다. 따라서, 하나의 x축으로부터 2개의 좌표들 w1 및 w2 로 변경하기 위해, 슬라이스의 폭 Lx 가 선택되고 다음의 타입의 식이 적용된다.
w1 = x Mod Lx
w2 = Int(x/Lx)
지금까지, 축 (예를 들어, x축) 상의 2개의 연속하는 엘리먼트들이 2개의 상 이한 PE들에 의해 유지 및 프로세싱되는 저장 시스템을 사용하는 실시형태들이 분석되었다. 통상적으로, 일차원의 경우 (제 1 실시형태) 에서, 예로서, 사용자가 어드레스 Ad에서의 PE에 신호의 x 엘리먼트를 저장했던 경우가 고려되었으며, 여기서,
p = x Mod Np
Ad = Int(x/Np)
이다.
유사하게, 2차원의 경우 (제 2 실시형태) 에서, 예로서, 사용자가 어드레스 Ad에서의 PE N°p에 픽셀 (x, y) 을 저장했던 경우가 설명되었으며, 여기서,
w= x + Lx * y
p= w Mod Np
Ad = Int(w/Np)
이다.
이들은 단지 예일 뿐이다. 방법은 많은 다른 저장 모드들에 적용될 수 있다.
따라서, 일차원 경우에서 유지하기 위해, 사용자는, 사이즈 Lx를 정의하고, 어드레스 Ad에서의 PE N°p 에 신호의 x 엘리먼트를 저장하기를 원할 수도 있으며, 여기서,
x1 = x Mod Lx
x2 = Int(x/Lx)
p = x2 Mod Np
Ad = x1 + Lx * Int(x2/Np)
이다.
이것은, x축 상의 Lx 개의 연속하는 엘리먼트들의 세그먼트가 동일한 PE에 의해 보유 및 프로세싱되지만, 다음의 PE는 다음의 세그먼트를 보유 및 프로세싱하는 저장 모드이다.
PE N°p 가 필드 내에서 관련되는 엘리먼트의 어드레스를 Xmin 으로부터 계산하게 하는 수학식은 다음과 같다.
Xmin1 = Xmin Mod Lx
Xmin2 = Int(Xmin/Lx)
Ad = Xmin1 + Lx * Int((Xmin2 + Np - 1 - p)/Np).
관측될 수 있는 바와 같이, 이것은, Xmin1 에 작용하지 않으면서 Xmin2 에 방법을 적용하게 한다.
특히 간단한 하드웨어 구현이 가능한, Lx 및 Np가 2의 거듭제곱인 경우가 고려된다. LNp 및 LLx 는 그들 각각의 로그를 나타낸다. 상기 수학식들은 다음과 같이 해석될 수 있다.
Xmin 을 2개의 부분, 즉, Xmin1 을 구성하는 LLx 비트에 걸친 최하위 위치 및 Xmin2 를 구성하는 최상위 위치로 분할한다.
제 1 실시형태에서 제안된 절차를 Xmin2 에 적용한다.
그 결과는, Int((Xmin2 + Np - 1 - p)/Np) 이다.
Lx 비트 상의 최하위 위치에서 Xmin1 및 최상위 위치에서 그 절차의 결과를 연접한다.
즉, Lx 및 Np가 2의 거듭제곱인 경우, 다음이 필요하다.
Xmin의 LLx 최하위 비트를 제외시키는 것,
Xmin의 다른 비트들에 그 절차를 적용시키는 것,
최하위 위치에서, 제외된 LLx 비트들을 그 절차의 결과와 연접하는 것.
전체적으로, 이러한 확장은, 이전의 파라그래프에서 설명된 확장과는 독립적이며, 이러한 확장은 그 이전의 파라그래프에서 설명된 확장과 커플링될 수 있다. 따라서, 그것은, 병렬 프로세서의 토폴로지 및 데이터 구조 양자에 대하여 다차원 경우에 적용된다. 차원들 각각에 그것을 적용하기에 충분하다. 따라서, 그 방법은, x축 상의 사이즈 Lx, y축 상의 Ly 등의 평행6면체가 동일한 PE에 의해 보유 및 프로세싱되지만, (병렬 프로세서 토폴로지에 대해) 이웃한 PE들이 (데이터 구조의 토폴로지에 대해) 이웃한 평행6면체들을 보유 및 프로세싱하는 임의의 저장 모드에 적용된다.
다른 저장 시스템에 대해 일반화가 행해질 수 있다. 그것은, 데이터 구조의 사이즈들 (Lx, Ly, Lz, ...) 및 각각의 방향에서의 프로세서들의 수 (Nx, Ny, Nz, ...) 가 2의 거듭제곱인 경우를 가정함으로써, 다차원의 경우에서 설명될 것이다. 2의 거듭제곱을 선택한다는 사실은, 가장 간단한 경우인 바이너리 표현에 대해 수행될 연산들을 설명하는 것을 가능하게 하지만, Lx, Ly, Lz, ..., Nx, Ny, Nz, ... 의 모든 임의의 값에 대한 일반화는, 이전의 예들에서 설명된 바와 같이 승산, 제산, 모듈로 및 정수부를 사용하는 수학식으로 바이너리 표현에 대한 설명된 연산들을 대체함으로써 가능하다. 병렬 프로세서 상에 데이터 구조를 저장하고, 그 후, 방법을 이러한 저장 시스템에 적용하기 위해, 다음과 같이 진행하는 것이 가능하다.
LLx + LLy + LLz + ... 비트의 단일 워드에서, 필드의 위치를 정의하기 위해 사용되는 포인트의 다양한 좌표들을 연접하며, 이것은 이전에 w로 지칭되었던 것을 형성하게 한다.
w의 비트들의 순서를 변경하며 (가능한 변형들에 따라 가능한 많은 저장 시스템이 존재한다), w' 를 이에 따라 획득된 워드라 한다.
사이즈 LLx, LLy, LLz, ... 비트의 워드들로 w' 를 분할하며, wx', wy', wz', ... 을 이에 따라 획득된 워드라 한다.
병렬 프로세서의 차원들 각각에 방법을 적용하며, 즉,
- (Nx - 1 - px) 를 wx' 에 가산한다.
- 결과의 최종 LNx 비트를 삭제한다, 즉, Adx' 가 획득된다.
- (Ny - 1 - py) 를 wy' 에 가산한다.
- 결과의 최종 LNy 비트를 삭제한다, 즉, Ady' 가 획득된다.
- 병렬 프로세서의 각각의 방향에서 기타 등이 행해진다.
또한, 이전의 변형과 반드시 관련될 필요는 없는 변형에 따라 Adx', Ady', Adz', ... 의 비트들의 순서를 변경한다. 이러한 방식으로, 병렬 프로세서의 방향들 각각에서의 저장 어드레스들 Adx, Ady, Adz 가 획득된다.
각각의 PE 내의 필드에 관련된 어드레스를 나타내는 단일 워드 Ad 에서 이들 어드레스들을 연접한다.
또한, 도 2에 의해 도시된 예는 이것을 예시하기 위해 사용될 것이다. 이러한 예가 링 구조를 갖는 16개의 PE들의 일차원 프로세서에 관한 것이고, 데이터 구조가 사이즈 Lx=64 및 Ly=64 의 이미지이며, 그 이미지의 픽셀들이 라인에 저장된다는 것이 상기된다. 따라서, 그 경우는 다음과 같다.
Np = 16 ⇒ LNp = 4
Lx = 64 ⇒ LLx = 6
Ly = 64 ⇒ LLy = 6
Xmin, Ymin 으로부터 Ad로 변경하기 위한 연산은 다음과 같다.
6 + 6 = 12 비트의 단일 워드에서 Xmin, Ymin 을 연접한다. w를 이에 따라 획득된 워드라 한다.
w의 6개의 최하위 비트와 6개의 최상위 비트를 교환한다. w'를 이에 따라 획득된 워드라 한다.
일차원 병렬 프로세서의 경우에 그 방법을 적용하며, 즉,
- (16 - 1 - p) 를 w'에 가산한다.
- 결과의 최종 4비트를 삭제한다. Ad'가 획득된다.
- Ad' 의 2개의 최하위 비트와 6개의 최상위 비트를 교환한다. 이에 따라 획득된 워드는 어드레스 Ad이다.
이것은, 도시되기를 원하는 일반화의 콘텍스트내에서 도래한다. 이러한 구현은 도 6d에 도시되어 있으며, Nx=4, Ny=4, LNx=2, LNy=2 에 관해, Xmin 및 Ymin 이 6비트상에 존재하며, 그것은, 저장 모드의 변형에 관한 도 6b의 변형 실시형태이다.
도 6d가 디바이스를 전혀 변형하지 않으면서 와이어들을 감소시킴으로써 용이하게 판독될 수 있다. 도 6e이 이에 따라 획득된다.
많은 다른 저장 모드들이 가능하다. 예를 들어, 가장 간단한 변형은 식들에서 부호들을 변경하는 것 또는 PE들의 순서를 변경하는 것으로 구성된다. 그들 모두를 언급하는 것은 가능하지 않다.

Claims (22)

  1. 적어도 하나의 계산 유닛, 및 메모리-워드들을 포함한 적어도 하나의 메모리를 각각 포함하고, 토폴로지에 따라 배치되며, 상기 토폴로지 내에서 소정의 위치를 갖고, 상이한 데이터에 대해 동일한 명령을 동시에 실행할 수 있는 요소 프로세서들 (3) 을 포함하고,
    상기 명령은 적어도 하나의 오퍼랜드의 판독 및/또는 적어도 하나의 결과의 기입을 포함하며,
    상기 명령은, 액션 필드의 판독 및/또는 기입인 것으로서, 상기 요소 프로세서들 각각의 자신의 메모리에서의 상기 요소 프로세서들의 판독들의 세트 및/또는 기입들의 세트를 정의하고, 상기 액션 필드는 요소 프로세서 당 하나의 메모리-워드의 레이트에서의 메모리-워드들의 세트이고, 상기 메모리-워드는 상기 요소 프로세서의 메모리에 위치되고, 오퍼랜드의 액션 필드는, 상기 오퍼랜드를 획득하기 위해, 상기 요소 프로세서들에 의해 그들 각각의 메모리에서 판독된 메모리-워드들의 세트이고, 결과의 액션 필드는, 상기 결과를 저장하기 위해, 상기 요소 프로세서들에 의해 그들 각각의 메모리에 기입된 메모리-워드들의 세트이고, 상기 명령은, 각각의 오퍼랜드 및/또는 각각의 결과에 대하여, 상기 액션 필드의 위치에 관한 정보를 포함하고, 상기 액션 필드의 위치는, N 차원 타입의 테이블의 고유한 데이터 구조내의 위치인 것으로서 정의되고, 상기 N은 1 이상의 정수이며, 상기 테이블은 상이한 요소 프로세서들의 메모리에 걸쳐 분산되는 것을 특징으로 하는 병렬 프로세서.
  2. 제 1 항에 있어서,
    상기 액션 필드의 위치 및 상기 토폴로지 내의 요소 프로세서의 위치의 함수로서, 각각의 요소 프로세서내의 각각의 오퍼랜드 및/또는 각각의 결과의 어드레스를 계산하는 수단을 포함하는 것을 특징으로 하는 병렬 프로세서.
  3. 제 2 항에 있어서,
    상기 어드레스를 계산하는 수단에 접속되는, 상기 정보의 함수로서 상기 액션 필드의 위치를 계산하는 수단 (50) 을 포함하는 것을 특징으로 하는 병렬 프로세서.
  4. 제 2 항 또는 제 3 항에 있어서,
    상기 각각의 요소 프로세서 내의 어드레스를 계산하는 수단들 (41, 42, 43) 은 각각의 요소 프로세서의 레벨에서 로컬화되는 것을 특징으로 하는 병렬 프로세서.
  5. 제 2 항 또는 제 3 항에 있어서,
    상기 각각의 요소 프로세서 내의 어드레스를 계산하는 수단은, 각각의 요소 프로세서의 레벨에서 부분적으로 로컬화되고, 수 개의 요소 프로세서들 사이에서 부분적으로 그룹화되는 것을 특징으로 하는 병렬 프로세서.
  6. 제 3 항에 있어서,
    상기 액션 필드의 위치를 계산하는 수단은,
    - 상기 요소 프로세서들 모두에 공통적이거나,
    - 데이터의 어드레스를 계산하는 수단의 레벨에서 전체적으로 또는 부분적으로 로컬화되는 것을 특징으로 하는 병렬 프로세서.
  7. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 요소 프로세서들은 P 개의 차원을 갖는 토폴로지에 따라 배치되며, 상기 P는 1 이상의 정수인 것을 특징으로 하는 병렬 프로세서.
  8. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 요소 프로세서들은 적어도 하나의 차원을 갖는 토폴로지에 따라 배치되며, 각각의 차원에 대해, x 좌표가 상기 차원에 따른 p인 요소 프로세서에 관한 데이터 구조의 엘리먼트의 어드레스 계산 수단은, 상기 액션 필드의 위치에 관한 값과 상기 요소 프로세서의 위치에 관한 값과의 결합에 의해 획득되는 것을 특징으로 하는 병렬 프로세서.
  9. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 액션 필드는 좌표들에 의해 정의된 엔드들을 가지며, 상기 액션 필드의 위치는, 상기 엔드들의 선형 조합에 의해 획득된 무게중심의 위치에 의해 정의되며, 상기 엔드들의 유의성 (significance) 의 합산은 1 과 동일한 것을 특징으로 하는 병렬 프로세서.
  10. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 액션 필드는 좌표들에 의해 정의된 엔드들을 가지며, 상기 액션 필드의 위치는, 좌표가 최소인 엔드의 위치에 의해 정의되는 것을 특징으로 하는 병렬 프로세서.
  11. 제 10 항에 있어서,
    상기 요소 프로세서들은 적어도 하나의 차원을 갖는 토폴로지에 따라 배치되며,
    각각의 차원에 대해, x 좌표가 상기 차원에 따른 p인 PE에 관한 데이터 구조의 엘리먼트의 어드레스를 계산하는 수단은,
    Ad = Int((Wmin + Np - 1 -p)/Np)
    를 계산하는 수단을 포함하며,
    상기 Np는 상기 차원 상의 해당 요소 프로세서들의 수이고, 상기 Wmin은 상기 액션 필드의 위치의 좌표들의 함수로서 상기 차원 상에서 정의되는 것을 특징으로 하는 병렬 프로세서.
  12. 제 11 항에 있어서,
    상기 요소 프로세서들은 하나의 차원을 갖는 토폴로지에 따라 배치되고, 상기 데이터 구조는 일차원이며, 상기 액션 필드의 위치는 Xmin 에 의해 정의되고 Wmin = Xmin 인 것을 특징으로 하는 병렬 프로세서.
  13. 제 12 항에 있어서,
    Np는 2의 거듭제곱이며, 상기 Ad를 계산하는 수단은,
    - Xmin 과 (Np - 1 - p) 를 가산하고,
    - 결과의 최종 LNp 비트들을 삭제하기 위한 수단을 포함하며,
    상기 LNp 는 Np의 베이스 2 로그 (logarithm) 인 것을 특징으로 하는 병렬 프로세서.
  14. 제 11 항에 있어서,
    상기 요소 프로세서들은 하나의 차원을 갖는 토폴로지에 따라 배치되고, 상기 데이터 구조는 X 및 Y의 함수로서 정의된 2차원이며, X를 따른 상기 데이터 구조의 차원은 소정의 값 Lx 보다 작고, 상기 액션 필드의 위치는 Xmin, Ymin 에 의해 정의되며, Wmin = Xmin + Lx * Ymin 인 것을 특징으로 하는 병렬 프로세서.
  15. 제 14 항에 있어서,
    Np 및 Lx 는 2의 거듭제곱이며, 상기 Ad를 계산하는 수단은,
    - Xmin 과 (Np - 1 - p) 를 가산하고,
    - 결과의 최종 LNp 비트들을 삭제하고,
    - 최하위 위치에서 LLx-LNp 비트들에 걸쳐 표현된 이전의 양과 최상위 위치에서의 Ymin 을 연접하기 위한 수단을 포함하며,
    상기 LNp 는 Np의 베이스 2 로그이고, LLx는 Lx의 베이스 2 로그인 것을 특징으로 하는 병렬 프로세서.
  16. 제 11 항에 있어서,
    상기 요소 프로세서들은 하나의 차원을 갖는 토폴로지에 따라 배치되고, 상기 데이터 구조는 X, Y 및 Z의 함수로서 정의되는 3차원이고, X 및 Y를 따른 상기 데이터 구조의 차원들은, 각각, 소정의 값들 Lx 및 Ly 보다 작으며, 상기 액션 필드의 위치는 Xmin, Ymin, Zmin 에 의해 정의되고, Wmin = Xmin + Lx * (Ymin + Ly * Zmin) 인 것을 특징으로 하는 병렬 프로세서.
  17. 제 16 항에 있어서,
    Np, Lx 및 Ly는 2의 거듭제곱이며, 상기 Ad를 계산하는 수단은,
    - Xmin 과 (Np - 1 - p) 를 가산하고,
    - 결과의 최종 LNp 비트들을 삭제하고,
    - 최하위 위치에서 LLx-LNp 비트들에 걸쳐 표현된 이전의 양, 중간 상위 위치에서 Ly 비트들에 걸쳐 표현된 Ymin, 및 최상위 위치에서 Lz 비트들에 걸쳐 표현된 Zmin 을 연접하기 위한 수단을 포함하며,
    상기 LNp 는 Np의 베이스 2 로그이고, 상기 LLx 는 Lx의 베이스 2 로그인 것을 특징으로 하는 병렬 프로세서.
  18. 제 11 항에 있어서,
    상기 요소 프로세서들은 하나의 차원을 갖는 토폴로지에 따라 배치되고, 상기 데이터 구조는 X, Y, Z 및 T의 함수로서 정의되는 4개의 차원을 갖고, X, Y 및 Z를 따른 상기 데이터 구조의 차원들은, 각각, 소정의 값들 Lx, Ly 및 Lz 보다 작으며, 상기 액션 필드의 위치는 Xmin, Ymin, Zmin, Tmin 에 의해 정의되고, Wmin = Xmin + Lx * (Ymin + Ly * (Zmin + Lz * Tmin)) 인 것을 특징으로 하는 병렬 프로세서.
  19. 제 11 항에 있어서,
    상기 요소 프로세서들은 2개의 차원을 갖는 토폴로지에 따라 배치되고, 각각, 하나의 차원 및 다른 차원에 따른 Nx 프로세서 및 Ny 프로세서를 포함하며, 상기 데이터 구조는 X 및 Y 의 함수로서 정의되는 2차원이고, X를 따른 상기 데이터 구조의 차원은, 소정의 값 Lx 보다 작으며, 상기 액션 필드의 위치는 Xmin, Ymin 에 의해 정의되고,
    - 상기 액션 필드내의 X에 따라 고려되는 PE N°px 에 관한 엘리먼트의 어드 레스 Adx 는,
    Adx = Int((Xmin + Nx - 1 -px)/Nx)
    와 같은 식에 의해 획득되고,
    - 상기 액션 필드내의 Y에 따라 고려되는 PE N°py 에 관한 엘리먼트의 어드레스 Ady 는,
    Ady = Int((Ymin + Ny - 1 -py)/Ny)
    와 같은 식에 의해 획득되는 것을 특징으로 하는 병렬 프로세서.
  20. 제 19 항에 있어서,
    Nx, Ny, Lx 및 Ly는 2의 거듭제곱이고, LLx 및 LLy는, 각각, Lx 및 Ly의 베이스 2 로그이며, 상기 Ad를 계산하는 수단은,
    - Xmin 과 (Nx - 1 - px) 를 가산하고,
    - 결과의 최종 LNx 비트들을 삭제하고, Adx가 LLx-LNx 비트 상에서 획득되고,
    - Ymin 과 (Ny - 1 - py) 를 가산하고,
    - 결과의 최종 LNy 비트들을 삭제하고, Ady가 LLy-LNy 비트 상에서 획득되며,
    - 최하위 위치에서 상기 LLx-LNx 비트 상에서 표현된 Adx 와, 최상위 위치에서 LLy-LNy 비트 상에서 표현된 Ady 를 연접하기 위한 수단을 포함하며,
    상기 LNx 는 Nx의 베이스 2 로그이고, 상기 LNy 는 Ny의 베이스 2 로그인 것을 특징으로 하는 병렬 프로세서.
  21. 제 11 항에 있어서,
    상기 요소 프로세서들은 적어도 3개의 차원들을 갖는 토폴로지에 따라 배치되고, 각각, 각각의 차원에서 Nx, Ny, Nz, ... 프로세서들을 포함하며, 상기 데이터 구조는 X, Y, Z, ... 의 함수로서 적어도 3개의 차원들 상에서 정의되고, 상기 차원들 각각에 따른 상기 데이터 구조의 차원은 소정의 값 Lx, Ly, Lz, ... 보다 작고, Nx, Ny, Nz, ..., Lx, Ly, Lz, ... 은 2의 거듭제곱이고, LLx, LLy, LLz, ... 은 Lx, Ly, Lz, ... 의 베이스 2 로그이며, 상기 Ad를 계산하는 수단은,
    - LLx + LLy + LLz + ... 비트들의 단일 워드에서, 상기 액션 필드의 위치를 정의하기 위해 사용되는 포인트의 다양한 좌표들을 연접하며, w 가 획득되고,
    - 상기 w의 비트들의 순서를 교환하며, w'를 획득된 워드라 하고,
    - 사이즈 LLx, LLy, LLz, ... 비트의 워드들로 상기 w' 를 분할하고, wx', wy', wz', ... 을 획득된 워드들이라 하고,
    - 상기 차원들 각각에서,
    i. (Nx - 1 - px) 를 wx' 에 가산하고,
    ii. 결과의 최종 LNx 비트들을 삭제하고, Adx' 가 획득되고,
    iii. (Ny - 1 - py) 를 wy' 에 가산하고,
    iv. 결과의 최종 LNy 비트들을 삭제하고, Ady' 가 획득되고,
    v. 기타 등등이 각각의 방향에서 실시되며,
    - 또한, Adx', Ady', Adz' ..., 의 순서를 교환하고, 상기 방향들 각각에서 저장 어드레스들 Adx, Ady, Adz 가 그에 따라 획득되며,
    - 각각의 PE 내의 상기 액션 필드에 관한 어드레스를 나타내는 단일 워드 Ad에서 상기 어드레스들을 연접하기 위한 수단을 포함하는 것을 특징으로 하는 병렬 프로세서.
  22. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 병렬 프로세서는 SIMD 타입의 컴퓨터인 것을 특징으로 하는 병렬 프로세서.
KR1020097027117A 2007-06-26 2008-06-26 병렬 프로세서용 어드레싱 디바이스 KR101547366B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0704574A FR2918190B1 (fr) 2007-06-26 2007-06-26 Dispositif d'adressage pour processeur parallele.
FR0704574 2007-06-26

Publications (2)

Publication Number Publication Date
KR20100033979A KR20100033979A (ko) 2010-03-31
KR101547366B1 true KR101547366B1 (ko) 2015-08-25

Family

ID=38926388

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097027117A KR101547366B1 (ko) 2007-06-26 2008-06-26 병렬 프로세서용 어드레싱 디바이스

Country Status (8)

Country Link
US (1) US10789072B2 (ko)
EP (1) EP2162829B1 (ko)
JP (1) JP5608932B2 (ko)
KR (1) KR101547366B1 (ko)
ES (1) ES2391690T3 (ko)
FR (1) FR2918190B1 (ko)
IL (1) IL202715A (ko)
WO (1) WO2009000880A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5739779B2 (ja) * 2011-09-26 2015-06-24 ルネサスエレクトロニクス株式会社 Simdプロセッサ及びコントロールプロセッサ並びにプロセッサ要素
GB2536211B (en) * 2015-03-04 2021-06-16 Advanced Risc Mach Ltd An apparatus and method for executing a plurality of threads

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000511309A (ja) 1996-05-30 2000-08-29 エスポジート、アントニオ プロセッサ対の冗長性を有する並列コンピュータ

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU645785B2 (en) * 1990-01-05 1994-01-27 Maspar Computer Corporation Parallel processor memory system
JPH05290188A (ja) * 1992-04-15 1993-11-05 Fujitsu Ltd 超並列計算機
JP3767085B2 (ja) * 1996-09-04 2006-04-19 セイコーエプソン株式会社 情報処理回路及びマイクロコンピュータ
US6105125A (en) * 1997-11-12 2000-08-15 National Semiconductor Corporation High speed, scalable microcode based instruction decoder for processors using split microROM access, dynamic generic microinstructions, and microcode with predecoded instruction information
WO2001063438A1 (en) * 2000-02-24 2001-08-30 Bops Incorporated Methods and apparatus for providing bit-reversal and multicast functions utilizing dma controller
US6665790B1 (en) * 2000-02-29 2003-12-16 International Business Machines Corporation Vector register file with arbitrary vector addressing
JP2004234407A (ja) * 2003-01-31 2004-08-19 Hitachi Ulsi Systems Co Ltd データ処理装置
GB2417105B (en) * 2004-08-13 2008-04-09 Clearspeed Technology Plc Processor memory system
GB0420004D0 (en) * 2004-09-09 2004-10-13 Koninkl Philips Electronics Nv Interconnections in SIMD processor architectures
GB2437837A (en) * 2005-02-25 2007-11-07 Clearspeed Technology Plc Microprocessor architecture

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000511309A (ja) 1996-05-30 2000-08-29 エスポジート、アントニオ プロセッサ対の冗長性を有する並列コンピュータ

Also Published As

Publication number Publication date
FR2918190A1 (fr) 2009-01-02
ES2391690T3 (es) 2012-11-29
IL202715A0 (en) 2010-06-30
EP2162829B1 (fr) 2012-08-15
JP5608932B2 (ja) 2014-10-22
IL202715A (en) 2014-12-31
EP2162829A1 (fr) 2010-03-17
FR2918190B1 (fr) 2009-09-18
KR20100033979A (ko) 2010-03-31
WO2009000880A1 (fr) 2008-12-31
JP2010531502A (ja) 2010-09-24
US20100250897A1 (en) 2010-09-30
US10789072B2 (en) 2020-09-29

Similar Documents

Publication Publication Date Title
KR102565098B1 (ko) 행렬들의 공간적 장소 변환
CA2002663C (en) Method and apparatus for storing, accessing, and processing voxel-based data
US4631690A (en) Multiprocessor computer system for forming a color picture from object elements defined in a hierarchic data structure
CN116343319A (zh) 用于卷积神经网络的有效数据布局
CA2929403C (en) Multi-dimensional sliding window operation for a vector processor
KR20190025919A (ko) 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서에 대한 블록 연산
Kung Computational models for parallel computers
US11164032B2 (en) Method of performing data processing operation
US4939642A (en) Virtual bit map processor
CN111133457B (zh) 电子设备及其控制方法
KR101547366B1 (ko) 병렬 프로세서용 어드레싱 디바이스
Datta et al. Constant-time algorithm for the Euclidean distance transform on reconfigurable meshes
Bokka et al. Constant-time convexity problems on reconfigurable meshes
JP3860545B2 (ja) 画像処理装置及び画像処理方法
JP7266121B2 (ja) 計算装置、チップ、ボードカード、電子デバイスおよび計算方法
JP2580501B2 (ja) 並列デ−タ処理装置
CN114706812A (zh) 基于可重构处理器的数据存储方法和可重构处理器
Shi et al. Parallel image processing with image algebra on SIMD mesh-connected computers
Zheng et al. An Efficient Parallel Implementation of the Marching-cubes Algorithm
CN114489802A (zh) 数据处理装置、数据处理方法及相关产品
Doctor et al. Parallel algorithm for quadtree medial axis transform
Chung et al. A neighbor-finding algorithm for bincode-based images on reconfigurable meshes
Lin et al. An O (1) time parallel algorithm for the dominance counting and 3D block-based medial axis transform on AROB
Sang Simulating large mesh networks by small ones
Biagioni Copyright c 1991 Edoardo Stanley Biagioni All Rights Reserved

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180730

Year of fee payment: 4