KR102404841B1 - 로컬 메모리를 포함하는 행렬 프로세서 - Google Patents

로컬 메모리를 포함하는 행렬 프로세서 Download PDF

Info

Publication number
KR102404841B1
KR102404841B1 KR1020197014535A KR20197014535A KR102404841B1 KR 102404841 B1 KR102404841 B1 KR 102404841B1 KR 1020197014535 A KR1020197014535 A KR 1020197014535A KR 20197014535 A KR20197014535 A KR 20197014535A KR 102404841 B1 KR102404841 B1 KR 102404841B1
Authority
KR
South Korea
Prior art keywords
matrix
local memory
components
processing
data
Prior art date
Application number
KR1020197014535A
Other languages
English (en)
Other versions
KR20190062593A (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 KR20190062593A publication Critical patent/KR20190062593A/ko
Application granted granted Critical
Publication of KR102404841B1 publication Critical patent/KR102404841B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Human Computer Interaction (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Complex Calculations (AREA)
  • Logic Circuits (AREA)
  • Advance Control (AREA)

Abstract

컴퓨터 구조는 논리 행들과 열들로 배열된 복수의 프로세싱 성분들을 제공하여 각 열과 행과 연관된 로컬 메모리를 공유한다. 행 및 열 기준의 메모리 공유는 외부 메모리와 로컬 메모리 간의 데이터 흐름을 줄이기 위해, 그리고/또는, 효율적인 프로세싱에 필요한 로컬 메모리의 크기를 줄이기 위해 다양한 프로세싱 알고리즘들에 이용될 수 있는 행렬 곱셈과 같은 효율적인 행렬 연산을 제공한다.

Description

로컬 메모리를 포함하는 행렬 프로세서
본 발명은 고속 행렬 연산(high-speed matrix operations)을 위한 컴퓨터 아키텍처(computer architecture)에 관한 것으로, 특히 행렬 타입 계산(matrix type calculations)을 위한 외부 메모리(external memory)와 로컬 메모리(local memory) 사이의 메모리 병목 현상(memory bottleneck)을 감소시키는 로컬 메모리를 제공하는 행렬 프로세서에 관한 것이다.
본 출원은 2016년 10월 25일자로 출원된 미국 특허 출원 제15/333,696 호의 이익을 주장하며, 그 전체가 본 명세서에 포함된다.
행렬 곱셈(matrix multiplication)과 같은 행렬 계산은 여러 차원들의 컨볼루션(convolution)과 같은 수학 커널 기능들을 이용하는 기계 학습(machine learning) 및 이미지 프로세싱(image processing)와 같은 다양한 신흥 컴퓨터 응용 프로그램들의 기초가 된다.
행렬 계산의 병렬성은 종래의 범용 프로세서에서 완전히 활용될 수 없다. 따라서 행렬 계산을 수행하기 위해 필드 프로그래머블 게이트 어레이(field programmable gate array: FPGA)를 사용하는 것과 같은 특수 행렬 가속기를 개발하는 데 관심이 있다. 이러한 설계에서, FPGA의 상이한 프로세싱 성분들(processing elements)은 각 프로세싱 성분들과 연관된 로컬 메모리에 로드된 행렬의 일부를 이용하여 상이한 행렬 성분들을 동시에 프로세싱할 수 있다.
본 발명자들은 외부 메모리와 FPGA 타입 아키텍처의 로컬 메모리 사이에서 행렬 데이터를 전송할 때 심각한 메모리 병목 현상이 있음을 인식했다. 이러한 병목 현상은 FPGA 타입 아키텍처의 컴퓨팅 리소스와 비교 한 로컬 메모리의 제한된 크기와 외부 메모리에서 로컬 메모리로 반복적으로 전송되는 데이터의 지연으로 인해 발생한다. 본 발명자들은 또한 계산 자원들이 이 문제를 악화시키는(exacerbating) 로컬 메모리 자원들보다 훨씬 빠르게 증가한다는 것을 인식했다.
본 발명은 주어진 프로세싱 유닛에 통상적으로 연관된 주어진 로컬 메모리 자원에 저장된 데이터를 공유함으로써 이 문제를 해결한다. 공유는 행렬 계산의 논리적 상호 관계(logical interrelationship)(예를 들어, 행렬의 하나 이상의 차원들에서 행들(rows) 및 열들(columns)을 따라)에 따른 패턴으로 이루어질 수 있다. 이 공유는 메모리 레플리케이션(memory replication)(여러 로컬 메모리 위치에 주어진 값을 저장할 필요성)을 줄인다. 따라서, 로컬 메모리에 대한 필요성 및 로컬 메모리와 외부 메모리 간의 불필요한 데이터 전송을 줄여 계산 속도를 크게 높이고/또는 계산과 연관된 에너지 소비를 줄인다.
구체적으로, 본 발명은 제1 및 제2 데이터 라인들을 따라 피연산자(operand)를 수신하기 위해 논리 행들(logical rows) 및 논리 열들(logical columns)로 각각 배열된 프로세싱 성분들의 세트를 포함하여 행렬 계산을 위한 컴퓨터 아키텍처를 제공한다. 제1 데이터 라인들 각각은 각 논리 행의 프로세싱 성분들을 연결하고, 제2 데이터 라인들 각각은 논리 열들의 논리 프로세싱 성분들을 연결한다. 로컬 메모리 성분들은 제1 및 제2 데이터 라인들 각각과 연관되어 제1 및 제2 데이터 라인들에 의해 상호연결된 각 프로세싱 성분에 주어진 피연산자들을 동시에 제공한다. 디스패처(dispatcher)는 외부 메모리로부터 상기 로컬 메모리 성분들로 데이터를 전송하고, 피연산자들을 이용한 행렬 계산을 구현하도록 상기 로컬 메모리 성분에 저장된 상기 피연산자들을 제1 및 제2 데이터 라인에 순차적으로 투입한다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 행렬-타입의 계산에 제한 요소들(limiting factor)을 제시하기 위해 본 발명자가 인식하는 외부 메모리 및 로컬 메모리들 사이의 메모리 전송 병목 현상을 제거하기 위해 여러 프로세싱 성분들 중 로컬 메모리로부터의 피연산자 값들을 공유하는 아키텍처를 제공하는 것이다. 일반적으로, 로컬 메모리 성분들은 또한 프로세싱 성분들을 보유하는 하나의 집적 회로 기판(single integrated circuit substrate) 상에 있고 집적 회로(integrated circuit) 상에 분산되어, 각각의 주어진 로컬 메모리는 상응하는 주어진 프로세싱 성분들에 인접할 수 있다.
따라서, 이용 가능한 로컬 메모리의 제한된 양과 외부 메모리로부터 로컬 메모리를 리프레시(refresh)하는 데 필요한 시간 지연을 수용하는 동안 로컬 메모리들(온-칩 메모리)로 고속 프로세싱이 가능하도록 허락하는 것은 본 발명의 적어도 하나의 실시예의 특징이다.
프로세싱 성분들은 예를 들어, 필드 프로그래머블 게이트 어레이에 의해 제공된 타입의 프로그래밍 가능한(programmable) 상호연결 구조에 의해 상호연결될 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 FPGA 타입 장치에서 본 발명의 아키텍처의 용이한 구현을 제공하는 것이다.
아키텍처는 적어도 8개의 논리 행들과 8개의 논리 열들을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 훨씬 더 큰 행렬에 대한 행렬 연산에 필요한 분해의 수를 감소시키는 다중 열(multicolumn), 다중 행(multirow), 병렬 행렬 곱셈 연산을 허용하는 스케일러블 아키텍처(scalable architecture)를 제공하는 것이다.
프로세싱 성분은 물리 행들 및 열들의 집적 회로의 표면 상에 2차원으로 분포된다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 행렬 연산의 산술 연산(arithmetic operation)을 모방하여(mimic) 상호연결 거리를 감소시키는 구조를 제공하는 것이다.
아키텍처는 제1 및 제2 데이터 라인들의 입자(particular)와 연관된 로컬 메모리 성분들로 전송될 때, 외부 메모리로부터 수신된 데이터의 프로그래밍 가능한 분류(sorting)를 제공하기 위해 디스패처에 의해 제어되는 크로스바 스위치(crossbar switch)를 포함하고, 프로그래밍 가능한 분류는 행렬 계산을 구현하도록 구성된다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 다양한 상이한 행렬 크기들 및 행렬 연관 연산들을 통한 아키텍처의 유연한 적용을 위해 집적 회로 레벨에서 데이터 재정렬(data reordering)을 허용하는 것이다.
프로세싱 성분들은 곱셈 연산을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 이미지 프로세싱, 기계 학습 등을 포함하는 많은 애플리케이션에 사용되는 기초 계산에 유용한 특수한 아키텍처를 제공하는 것이다.
프로세싱 성분들은 룩업 테이블 곱셈기(lookup table multiplier)를 이용할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 대형 행렬 곱셈 아키텍처를 위한 많은 프로세싱 성분들에 대해 쉽게 구현될 수 있는 간단한 곱셈기 설계(design)를 제공하는 것이다.
아키텍처는 데이터 값들의 순차적인 투입들 사이의 프로세싱 성분들의 출력들을 로컬 메모리 성분들로부터의 프로세싱 성분들에 합산하는 누산기(accumulator)를 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 행렬 곱셈을 구현하기 위해 순차적 인 병렬 곱셈들 사이에서 프로세싱 성분 출력들의 합산을 제공하는 것이다.
컴퓨터 아키텍처는 디스패치에 의해 제어되어, 누산기로부터 외부 메모리로 데이터를 전송하는 출력 멀티플렉서(output multiplexer)를 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 외부 메모리에서 이용되는 저장 데이터 구조들(storage data structures)과 호환 가능하도록(to be compatible with) 누산기의 출력들의 유연한 재정렬을 허용하는 것이다.
이러한 특정한 목적들 및 이점들은 청구 범위에 속하는 일부 실시예에만 적용될 수 있고, 따라서 본 발명의 범위를 한정하지 않는다.
도 1은 프로세싱 성분들, 프로세싱 성분들과 연관된 로컬 메모리 및 상호연결 회로(interconnection circuitry)를 나타내고, 프로세싱 성분들에 의해 수행되는 계산들의 제한 성분들을 나타내는 로컬 메모리 및 외부 메모리 사이의 데이터 흐름(dataflow)을 도시하는 본 발명과 이용될 수 있는 필드 프로그래머블 게이트 어레이에 대한 집적 회로 레이아웃의 개략도이다.
도 2는 데이터 공유가 없는 로컬 메모리 및 프로세싱 성분들과 연관된 종래 기술(prior art)의 도면이다.
도 3은 행렬 연산 및/또는 로컬 메모리의 필요한 사이즈에 대한 필요한 메모리 전송을 줄이는 복수의 프로세싱 성분들 중 각 로컬 메모리의 데이터를 공유하는 본 발명의 로컬 메모리와 프로세싱 성분들 간의 연관을 단순화된 형태로 나타낸 도 2와 유사한 도면이다.
도 4는 행렬 곱셈 및 외부 메모리에 데이터를 출력하는 출력 멀티플렉서에 유리한 방법으로 로컬 메모리들에 데이터를 전송하기 위해 크로스바 스위치를 제어하는 디스패처를 제공하는 본 아키텍처의 상세한 구현을 나타내는 도 3과 유사한 도면이다.
도 5는 제1 계산 단계를 나타내는 2개의 2x2 행렬들을 곱하는 데 이용되는 본 발명의 간단한 예를 도시 한 도면이다.
도 6은 행렬 곱셈을 완료하는 제2 계산 단계를 나타내는 도 5와 비슷한 도면이다.
이제 도 1을 참조하면, 본 발명에 따른 행렬 프로세서(10)는 일 실시예에서 필드 프로그래머블 게이트 어레이(FPGA)(12) 상에 구현될 수 있다. 본 기술 분야에서 일반적으로 이해되는 바와 같이, FPGA(12)는 예를 들어, 직교하는 행들 및 열들의 하나의 집적 회로 기판(16)의 표면에 걸쳐 분포된 복수의 프로세싱 성분들(14)를 포함할 수 있다. 프로세싱 성분들(14)는 예를 들어 룩업 테이블을 사용하거나 DSP(digital signal processor) 회로를 사용하여 곱셈과 같은 간단한 부울 함수들(Boolean functions) 또는 보다 복잡한 산술 함수들을 구현할 수 있다. 일 예시에서, 각각의 프로세싱 성분들(14)는 2개의 32비트 피연산자를 함께 곱하기 위해 연산하는 곱셈기를 제공할 수 있다.
로컬 메모리 성분들(18)은 또한 각각의 프로세싱 성분들 근처에 클러스터링 된(clustered) 집적 회로 기판(16) 상에 분포될 수 있다. 일 예시에서, 각각의 로컬 메모리 성분(18)은 32비트 피연산자들을 프로세싱 성분(14)에 제공하기 위해 512개의 32비트 워드들(words)을 저장할 수 있다. 일반적으로, 프로세싱 성분(14) 당 로컬 메모리 성분(18)의 양은 제한되어 있고, 따라서, 프로세싱 성분(14) 당 로컬 메모리 성분(18)의 양은 로컬 메모리 성분들(18)과 외부 메모리(20) 사이의 데이터 흐름의 속도에 대해 상당한 제약(constraint)이다. 로컬 메모리 성분들(18)이 계산 동안 빈번히 리프레시되어야 한다면, 제약이 악화된다.
일반적으로, 외부 메모리(20)는 로컬 메모리 성분들(18)보다 훨씬 더 큰 용량을 갖는 동적 메모리(dynamic memory)(예를 들어, DRAM)일 것이고, 집적 회로 기판(16)으로부터 떨어져 위치할 것이다. 외부 메모리(20)와 대조적으로, 로컬 메모리 성분들(18)는 정적 메모리(static memory)일 수 있다.
프로세싱 성분들(14)은 상호연결 회로(21)에 의해 FPGA(12)의 입력 및 출력 회로(도시되지 않음)와 서로 상호연결된다. 후자는(the latter) FPGA(12)의 구성에 따라 프로세싱 성분들(14) 사이에서 데이터 및/또는 제어 신호들의 라우팅(routing)을 제공한다. 당해 기술 분야에서 이해되는 바와 같이, 상호연결 회로(21)는 FPGA(12)와 상이한 기능을 구현하는 상이한 상호연결을 제공하기 위해(예를 들어, 부팅 중에 적용되는 구성 파일을 이용하여) 프로그래밍 가능하게 변경될 수 있다. 일반적으로, 상호연결 회로(21)는 집적 회로 기판(16)의 영역의 대부분을 차지한다 (dominate). 본 발명은 특히 FPGA 아키텍처들에 적합하지만, 본 발명의 아키텍처는 상호연결 회로(21)를 감소시키는 것과 같은 전용 회로로 구현될 수도 있다.
이제 도 2를 참조하면, FPGA(12)에 대한 아키텍처의 종래 기술 구현은 일반적으로 각 프로세싱 성분(14)를 그 프로세싱 성분(14)에 가장 가까운 메모리 성분들(18)과 유일하게 연관시킨다. 이 연관에서, 로컬 메모리 성분들(18)은 로컬 메모리 성분들(18)의 데이터가 교환되거나 리프레시될 필요가 있기 전에 프로세싱 성분들(14)에 순차적으로 제공될 수 있는 복수의 피연산자들을 저장한다.
이제 도 3을 참조하면, 각각의 메모리 성분(18)과 하나의 프로세싱 성분(14)과의 종래 기술과 대조적으로, 본 발명은 복수의 프로세싱 성분들(14)이 연관된 단일의 주어진 로컬 메모리 성분(18) 논리 행(22) 또는 논리 열(24) 중 어느 하나를 통해 복수의 프로세싱 성분들(14)이 연결된다. 각각의 프로세싱 성분(14)은 그 프로세싱 성분(14)과 연관된 하나의 행 도체(conductor)(15)로부터 하나의 피연산자를 수신하고, 그 프로세싱 성분(14)과 연관된 열 도체(17)로부터 하나의 피연산자를 수신한다. 일반적으로, 행 도체들(15) 및 열 도체들(17)은 각각의 프로세싱 성분들(14)에 데이터의 순간 전송을 주로 제공하고, 100 메가헤르츠를 초과하는 신호 전송과 일치하는 필요한 길이 및 주파수 응답을 제공하기 위해 필요에 따라 리피터(repeater) 또는 팬 아웃(fanout) 증폭기가 있는 하나의 전기 도체 또는 전기 도체일 수 있다.
논리 행들(22) 및 논리 열들(24)은 연결 토폴로지(topology)만을 참조하지만, 일반적으로 프로세싱 성분들(14)은 또한 FPGA(12)의 아키텍처와 합치되고(comport), 상호연결 거리들을 최소화하는 물리 행들 및 열들로도 존재할 것이다.
아래의 설명에서 이해되는 바와 같이, 복수의 프로세싱 성분들(14)과 주어진 로컬 메모리 성분(18)으로부터 데이터를 공유하는 이러한 능력은 본 발명의 아키텍처가 주어진 데이터 값이 복수의 프로세싱 성분들(14)에 의해 주어진 데이터 값이 요구되는 행렬 곱셈과 같은 행렬 연산들에서 유리하게 작용할 수 있게 한다. 로컬 메모리 성분들(18)의 데이터를 공유하는 것은 저장 요구들(storage demands)(필요한 로컬 메모리의 양)을 감소시키고, 공유된 데이터가 복수의 로컬 메모리 성분들(18)에 중복하여 저장되는 경우에 흐르는 것과 비교하여 외부 메모리(20)와 로컬 메모리 성분들(18) 사이에 흐르는 데이터의 양을 감소시킨다.
이제 도 4를 참조하면, 행 도체들(15) 및 열 도체들(17)에 의해 상호연결된 로컬 메모리 성분들(18) 및 프로세싱 성분들(14) 이외에, 행렬 프로세서(10)는 일반적으로 외부 메모리(20)로부터 데이터를 수신하는 입력 버퍼(30)를 포함할 수 있다. 이 데이터는 예를 들어, PCIe 제어기 또는 당해 기술에 알려진 하나 이상의 DDR 제어기를 포함하는 다양한 상이한 인터페이스들을 통해 수신될 수 있다.
데이터는 임의의 배열(configuration)의 메모리(20)에 포함된 행렬 연산 데이터 구조와 연관된 시퀀스(sequence)로 입력 버퍼(30)에 수신될 수 있고, 그 후, 데이터는 디스패처(34)에 의해 제어되는 크로스바 스위치(32)에 의해 스위칭되어 설명될 계산에 필요한 논리 행들 및 논리 열들과 연관된 복수의 로컬 메모리 성분들(18) 각각을 로드할 수 있다. 이 전송 프로세스에서, 예를 들어, 디스패처(34)는 하나의 행렬 피연산자를 행들(22)과 연관된 로컬 메모리 성분들(18)에 배치하고, 제2 행렬 피연산자를 열들(24)과 연관된 로컬 메모리 성분들(18)에 배치할 수 있다.
언급된 바와 같이, 프로세싱 성분들(14)은 8개의 행들 및 8개의 열들보다 크거나 같은 차원들(행 수 또는 열 수)을 갖는 논리 행들 및 열들로 배열되어, 더 큰 차원들(및 정사각형이 아닌 차원들)이 제공되어도, 두 8x8 행렬들의 행렬 곱을 허용할 수 있다. 연산 동안, 디스패처는 로컬 메모리 성분들(18)을 시퀀싱하여 상이한 피연산자 값들을 프로세서 성분들(14)의 각 행들 및 열들에 출력한다. 피연산자 값들을 프로세서 성분들(14)에 제공하는 각각의 시퀀스 후에, 프로세서 성분들(14)로부터의 출력은 또한, 디스패처(34)의 제어 하에 누산기(36)에 제공된다. 출력 멀티플렉서(38)는 누산기(36)의 출력을 다시 외부 메모리(20)로 전송될 수 있는 워드들로 수집한다.
도 4 및 도 5를 참조하면, 복수의 프로세서 성분들(14)간에 로컬 메모리를 공유하는 기능은 다음과 같은 형태의 2x2 행렬 A와 대응하는 2x2 행렬 B의 곱셈에 대한 간단한 예로서 적용될 것이다.
Figure 112021121961962-pct00001

제1 단계에서, 행렬 A 및 B의 행렬 성분들(예를 들어, Aii 및 Bii)는 크로스바 스위치(32)를 이용하여 디스패처(34)에 의해 외부 메모리로부터 로컬 메모리 성분들(18)로 로드된다. 특히, 행렬 A의 제1 행은 제1 행(22a) 및 행 도체(15a)와 연관된 제1 로컬 메모리 성분(18a)에 로드될 것이고, 행렬 A의 제2 행은 제2 행(22b) 및 행 도체(15b)와 연관된 제2 로컬 메모리 성분(18b)에 로드될 것이다. 마찬가지로, 행렬 B의 제1 열은 제1 열(24a) 및 열 도체(17a)와 연관된 제 3 로컬 메모리 성분(18c)에 로드될 것이고, 행렬 B의 제2 열은 제2 열(24b) 및 열 도체(17b)와 연관된 제 4 로컬 메모리 성분(18d)에 로드될 것이다.
행렬 곱셈의 제1 단계에서, 디스패처(37)는 로컬 메모리 성분(18)를 어드레싱하여(address), 행 도체들(15) 및 열 도체(17)에 따라 행렬 A의 제1 열 및 행렬 B의 제1 행의 성분들을 프로세서 성분들(14)로 출력한다.
프로세싱 성분들(14)은 A11B11 및 A11B12의 프로세싱 성분들(14a 및 14b) 각각으로부터의 출력 및 A21B11 및 A21B12의 프로세싱 성분들(14c 및 14d)로부터의 출력을 초래하는 로컬 메모리 성분들(18)로부터 수신된 피연산자들의 곱셈을 위해 구성될 것이다. 이들 출력들 각각은 누산기(36)의 각각의 레지스터(40a-40d)에 저장되며, 출력들 각각은 이 실시예의 목적 상 데이터가 수신되는 각각의 프로세싱 성분(14)의 접미사(suffix letter)와 동일한 접미사 문자를 갖는다. 따라서, 레지스터(40a, 40b)는 각각 값 A11B11및 A11B12를 포함하고, 레지스터(40c, 40d)는 각각 값 A21B11 및 A21B12를 포함한다.
행렬 곱셈의 제2 단계에서, 디스패처(37)는 로컬 메모리 성분들(18)을 어드레싱하여, 행 도체(15) 및 열 도체(17)에 따라 행렬 A의 제2 열 및 행렬 B의 제2 행의 행렬 성분들을 프로세서 성분들(14)로 출력한다.
이에 응답하여, 프로세싱 성분들(14a 및 14b)은 각각 출력들 A12B21 및 A12B22를 제공하는 반면, 프로세싱 성분들(14c 및 14d)은 각각 출력들 A22B21 및 A22B22를 제공한다. 누산기(36)는 각각의 누산기 레지스터(40a-40d)에서 이전에 저장된 값과 이들 출력값의 각각을 합산하여 다음과 같이 레지스터(40a-40d)의 각각에 새로운 값을 제공한다: A11B11 + A12B21, A11B12 + A12B22, A21B11 + A22B21, A21B12 + 레지스터(40a-40d)에 각각 저장된다.
레지스터의 값들은 다음과 같이 행렬 AB의 행렬 곱셈에서 예상되는 결과로 인식된다.
Figure 112021121961962-pct00002

이 값들은 멀티플렉서(38)에 의해 분류되고, 행렬 곱 연산의 결과로서 요구되는 데이터 포맷으로 외부 메모리(20)에 제공될 수 있다. 이러한 상술 한 프로세스는 프로세싱 성분들(14) 및 연관 로컬 메모리 성분들(18) 및 누산기 레지스터들(40)의 수를 증가시킴으로써 임의의 차원 크기의 행렬로 쉽게 확장될 수 있다.
고정된 크기의 프로세서 성분들(14)(예를 들어, 8x8 또는 더 큰)은 잘 알려진 분할정복(divide and conquer) 기술을 이용하여 임의의 행렬 곱셈들을 계산하는 데에 이용될 수 있다. 분할정복 기술은 대형 행렬 피연산자들의 행렬 곱셈을 행렬 프로세서(10)와 호환 가능한 보다 작은 행렬 피연산자들의 행렬 곱셈들의 집합으로 분해한다.
디스패처(34)는 예를 들어 외부 메모리(20) 내에 제공된 표준 순서(standard ordering)로부터 로컬 메모리 성분들(18)로 필요한 데이터 분류를 제공하기 위한 프로그래밍(예를 들어, 펌웨어)을 포함할 수 있다. 이와 연관하여, 행렬 프로세서(10)는 독립 프로세서(independent processor) 또는 코프로세서(coprocessor)로서 동작할 수 있으며, 예를 들어 표준 컴퓨터 프로세서로부터 데이터 또는 포인터(pointer)를 수신하여 행렬 연산을 자동으로 실행하고 그 결과를 표준 컴퓨터 프로세서에 반환할 수 있다.
디스패처(34)는 외부 메모리(20)로부터 로컬 메모리 성분들(18)로의 데이터의 정렬을 제어할 수 있는 반면, 디스패처(34)와 행렬 프로세서(10)와 연관하여 동작하는 별개의(separate) 컴퓨터의 운영 시스템(operating system)의 조합에 의해 정렬도 프로세싱될 수 있다.
많은 중요한 연산 작업들이, 예를 들어, 컨볼루션, 자동 상관(auto correlations), 푸리에 변환(Fourier transforms), 필터링(filtering), 뉴럴 네트워크(neural networks)와 같은 기계 학습 구조 등을 포함하는 행렬 곱셈 문제로서 재현될 수 있다. 또한, 다중 차원으로 확장된 본 발명의 교시에 따라 이들 다중 차원에 따른 공유 경로들을 추가함으로써 본 발명은 간단하게 2 이상의 차원에서 행렬 곱셈 또는 다른 행렬 연산으로 확장될 수 있다.
특정 용어는 단지 참조 용으로 본 명세서에서 사용되었으므로, 제한하려는 것은 아니다. 예를 들어, "위쪽의(upper)", "아래쪽의(lower)", "상부(above)"및 "하부(below)"와 같은 용어는 도면이 참조되는 방향을 의미한다. "앞(front)", "뒤(back)", "뒤쪽(rear)", "아래(bottom)"및 "옆(side)"과 같은 용어는 논의 중인 구성성분을 설명하는 연관 도면과 본문을 참조하여 명확하지만 임의의 기준 프레임 내에서 구성성분의 부분 방향을 설명한다. 그러한 용어는 위에 언급된 단어, 그 파생어 및 유사한 주요 단어를 포함할 수 있다. 마찬가지로, 구조를 언급하는 "제1", "제2" 및 다른 그러한 수적인 용어는 문맥에 의해 명확하게 지시되지 않는 한 시퀀스 또는 순서를 의미하지 않는다.
본 개시 및 예시적인 실시예들의 성분 또는 특징을 소개할 때, "상기"라는 명칭은 그러한 성분 또는 특징 중 하나 이상이 있음을 의미하는 것으로 의도된다. "포함하는" 및 "갖는"이라는 용어는 포괄적인 것으로 의도되며 특별히 언급된 것 이외의 추가적인 성분 또는 특징이 있을 수 있음을 의미한다. 본 명세서에 설명된 방법 단계들, 과정들 및 동작들은 구체적으로 실행 순서로서 식별되지 않는 한, 논의되거나 도시된 특정 순서로 그들의 수행을 반드시 요구하는 것으로 해석되어서는 안된다. 부가적인 또는 대안적인 단계들이 이용될 수도 있다.
"마이크로프로세서" 및 "프로세서"또는 "마이크로프로세서"및 "프로세서"에 대한 언급은 독립형 및/또는 분산 환경에서 통신할 수 있는 하나 이상의 마이크로 프로세서를 포함하는 것으로 이해될 수 있으며, 유선 또는 무선 통신을 통해 다른 프로세서와 통신하도록 구성될 수 있으며, 하나 이상의 프로세서는 유사하거나 상이한 장치일 수 있는 하나 이상의 프로세서-제어 장치에서 동작하도록 구성될 수 있다. 또한, 달리 명시되지 않는 한, 또한, 메모리에 대한 참조는 하나 이상의 프로세서 판독 가능하고 액세스 가능한 로컬 메모리 성분들 및/또는 프로세서 제어 장치의 내부, 프로세서 제어 장치 외부의 구성 성분 및 유선 또는 무선 네트워크를 통해 액세스 할 수 있는 컴포넌트들을 포함할 수 있다.
본 발명은 여기에 포함된 실시예 및 예시에 한정되지 않고, 청구 범위는 다음의 청구 범위의 범주 내에 있는 실시예의 일부 및 다른 실시예의 구성 성분의 조합을 포함하는 이들 실시예의 수정된 형태를 포함하는 것으로 이해되어야 한다. 특허 및 비-특허 간행물을 포함하여 여기에 설명된 모든 간행물은 본원에 참조로 인용되어 있다.

Claims (18)

  1. 행렬 계산을 위한 컴퓨팅 장치에 있어서,
    복수의 논리 행들 중 하나 및 복수의 논리 열들 중 하나로 각각 배열되고, 프로세싱 성분의 연산에 따른 출력 결과를 제공하기 위해 제1 및 제2 데이터 라인을 따라 제1 피연산자 및 제2 피연산자를 각각 수신하는 프로세싱 성분들의 집합;
    상기 제1 및 상기 제2 데이터 라인들 각각과 연관되어, 상기 제1 및 상기 제2 데이터 라인들에 의해 서로 연결된 상기 각각의 프로세싱 성분으로, 주어진 피연산자들을 동시에 제공하는 로컬 메모리 성분들; 및
    외부 메모리로부터 상기 로컬 메모리 성분들로 데이터를 전송하고, 피연산자들을 이용한 행렬 계산을 구현하도록 상기 로컬 메모리 성분에 저장된 상기 피연산자들을 상기 제1 및 상기 제2 데이터 라인에 순차적으로 투입하는 디스패처
    를 포함하고,
    상기 제1 데이터 라인들은 상기 복수의 논리 행들 중에서 각각의 논리 행의 복수의 프로세싱 성분들에 각각 연결되고,
    상기 제2 데이터 라인들은 복수의 논리 열들의 각각의 논리 열의 복수의 프로세싱 성분들에 각각 연결되는,
    컴퓨팅 장치.
  2. 제1항에 있어서,
    상기 로컬 메모리 성분들은,
    상기 프로세싱 성분들을 역시 포함하는 하나의 집적 회로 기판 상에 있는
    컴퓨팅 장치.
  3. 제2항에 있어서,
    상기 로컬 메모리 성분들은 상기 집적 회로 기판에 분산된 컴퓨팅 장치.
  4. 삭제
  5. 제3항에 있어서,
    상기 프로세싱 성분들은 프로그래밍 가능한 상호연결 구조에 의해 상호연결되는 컴퓨팅 장치.
  6. 제5항에 있어서,
    상기 집적 회로 기판은 필드 프로그래머블 게이트 어레이인 컴퓨팅 장치.
  7. 제1항에 있어서,
    상기 컴퓨팅 장치는,
    적어도 8개의 논리 행들 및 8개의 논리 열들을 제공하는
    컴퓨팅 장치.
  8. 제1항에 있어서,
    상기 프로세싱 성분들은,
    물리 행들 및 물리 열들의 집적 회로 기판의 표면 상에 2차원으로 분포되는,
    컴퓨팅 장치.
  9. 제1항에 있어서,
    상기 제1 및 상기 제2 데이터 라인들의 입자와 연관된 상기 로컬 메모리 성분들로 전송될 때, 상기 외부 메모리로부터 수신된 상기 데이터의 프로그래밍 가능한 분류를 제공하기 위해 상기 디스패처에 의해 제어되는 크로스바 스위치
    를 더 포함하고,
    상기 프로그래밍 가능한 분류는 행렬 계산을 구현하도록 구성되는,
    컴퓨팅 장치.
  10. 제1항에 있어서,
    상기 프로세싱 성분들은 곱셈 연산을 제공하는 컴퓨팅 장치.
  11. 제10항에 있어서,
    상기 프로세싱 성분들은 룩업 테이블 곱셈기를 포함하는 컴퓨팅 장치.
  12. 제10항에 있어서,
    데이터 값들의 순차적인 투입들 사이의 상기 프로세싱 성분들의 출력들을 상기 로컬 메모리 성분들로부터 상기 프로세싱 성분들에 합산하는 누산기
    를 더 포함하는
    컴퓨팅 장치.
  13. 제12항에 있어서,
    상기 디스패처에 의해 제어되어, 상기 누산기로부터 외부 메모리로 데이터를 전송하는 출력 멀티플렉서
    를 더 포함하는,
    컴퓨팅 장치.
  14. 곱셈기 아키텍처를 이용하여 고속 행렬 곱셈을 구현하기 위한 방법에 있어서,
    상기 곱셈기 아키텍처는
    복수의 논리 행들 중 하나 및 복수의 논리 열들 중 하나로 각각 배열되고, 프로세싱 성분의 연산에 따른 출력 결과를 제공하기 위해 제1 및 제2 데이터 라인들을 따라 제1 피연산자 및 제2 피연산자를 각각 수신하는 프로세싱 성분들의 집합;
    상기 제1 및 상기 제2 데이터 라인들에 의해 연결된 상기 각각의 프로세싱 성분에 동시에 주어진 피연산자들을 제공하기 위해 상기 제1 및 상기 제2 데이터 라인들 각각과 연관된 로컬 메모리 성분들; 및
    외부 메모리로부터 상기 로컬 메모리 성분들로 데이터를 전송하고, 피연산자들을 이용한 행렬 계산을 구현하도록 상기 로컬 메모리 성분에 저장된 상기 피연산자들을 상기 제1 및 상기 제2 데이터 라인들에 순차적으로 투입하는 디스패처
    를 포함하고,
    상기 고속 행렬 곱셈의 구현 방법은
    (a) 상기 외부 메모리로부터 산술 행들 및 산술 열들이 있는 행렬 성분들을 갖는 행렬 피연산자들을 수신하고, 상기 행렬 성분들을 로컬 메모리 성분들로 분류하여 상기 제1 피연산자의 공통 산술 행의 행렬 성분들이 상기 제1 데이터 라인 중 하나와 연관된 로컬 메모리에 로드되고, 상기 제2 피연산자의 공통 산술 열의 행렬 성분들이 상기 제2 데이터 라인 중 하나와 연관된 로컬 메모리에 로드되는 단계;
    (b) 상기 제1 피연산자의 주어진 열들의 행렬 성분들 및 상기 제2 피연산자의 주어진 행들의 행렬 성분들을 상기 프로세싱 성분들에 순차적으로 투입하는 단계;
    (c) 상기 행렬 곱의 행렬 성분들을 제공하기 위해, 상기(b) 단계의 순차적 투입 사이에서 상기 프로세싱 성분들의 출력들을 합산하는 단계
    (d) 상기 행렬 결과물의 행렬 성분들을 출력하는 단계
    를 포함하는,
    방법
  15. 제14항에 있어서,
    상기 행렬 성분들을 상기 프로세싱 성분들에 투입하기 이전에, 상기 수신된 행렬 피연산자들의 상기 각 행렬 성분들을 로컬 메모리로 전송하는 단계
    를 더 포함하는
    방법.
  16. 제14항에 있어서,
    첫 번째 차수로 상기 외부 메모리로부터 버퍼로 데이터를 수신하고, 상기 데이터가 로컬 메모리로 전송될 때 상기 데이터를 다른 순서로 분류하는 단계
    를 더 포함하는
    방법.
  17. 제14항에 있어서,
    하나의 집적 회로 기판 상의 상기 로컬 메모리 성분들도,
    상기 프로세싱 성분들을 포함하는,
    방법.
  18. 제14항에 있어서,
    상기 프로세싱 성분들은 곱셈 연산을 제공하는 방법.
KR1020197014535A 2016-10-25 2017-10-05 로컬 메모리를 포함하는 행렬 프로세서 KR102404841B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/333,696 2016-10-25
US15/333,696 US20180113840A1 (en) 2016-10-25 2016-10-25 Matrix Processor with Localized Memory
PCT/US2017/055271 WO2018080751A1 (en) 2016-10-25 2017-10-05 Matrix processor with localized memory

Publications (2)

Publication Number Publication Date
KR20190062593A KR20190062593A (ko) 2019-06-05
KR102404841B1 true KR102404841B1 (ko) 2022-06-07

Family

ID=61971480

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197014535A KR102404841B1 (ko) 2016-10-25 2017-10-05 로컬 메모리를 포함하는 행렬 프로세서

Country Status (4)

Country Link
US (1) US20180113840A1 (ko)
KR (1) KR102404841B1 (ko)
CN (1) CN109863477A (ko)
WO (1) WO2018080751A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10565492B2 (en) * 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10586148B2 (en) * 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10565494B2 (en) * 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US10809629B2 (en) * 2018-08-31 2020-10-20 Taiwan Semiconductor Manufacturing Company, Ltd. Method and apparatus for computing feature kernels for optical model simulation
KR102372869B1 (ko) * 2019-07-31 2022-03-08 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
US11010202B2 (en) * 2019-08-06 2021-05-18 Facebook, Inc. Distributed physical processing of matrix sum operation
KR102327234B1 (ko) * 2019-10-02 2021-11-15 고려대학교 산학협력단 행렬 연산시 메모리 데이터 변환 방법 및 컴퓨터
KR102267920B1 (ko) * 2020-03-13 2021-06-21 성재모 매트릭스 연산 방법 및 그 장치
CN112581987B (zh) * 2020-12-23 2023-11-03 成都海光微电子技术有限公司 二维结构的局部存储器系统及其运算方法、介质、程序
CN113268708B (zh) * 2021-07-16 2021-10-15 北京壁仞科技开发有限公司 用于矩阵计算的方法及装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU728882B2 (en) * 1997-04-30 2001-01-18 Canon Kabushiki Kaisha Compression
FI118654B (fi) * 2002-11-06 2008-01-31 Nokia Corp Menetelmä ja järjestelmä laskuoperaatioiden suorittamiseksi ja laite
US6944747B2 (en) * 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
US8984256B2 (en) * 2006-02-03 2015-03-17 Russell Fish Thread optimized multiprocessor architecture
US8145880B1 (en) * 2008-07-07 2012-03-27 Ovics Matrix processor data switch routing systems and methods
US10802990B2 (en) * 2008-10-06 2020-10-13 International Business Machines Corporation Hardware based mandatory access control
US20100180100A1 (en) * 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations

Also Published As

Publication number Publication date
KR20190062593A (ko) 2019-06-05
WO2018080751A1 (en) 2018-05-03
US20180113840A1 (en) 2018-04-26
CN109863477A (zh) 2019-06-07

Similar Documents

Publication Publication Date Title
KR102404841B1 (ko) 로컬 메모리를 포함하는 행렬 프로세서
EP3566134B1 (en) Multi-function unit for programmable hardware nodes for neural network processing
US8375395B2 (en) Switch-based parallel distributed cache architecture for memory access on reconfigurable computing platforms
Batcher Design of a massively parallel processor
US10275390B2 (en) Pipelined configurable processor
US4791590A (en) High performance signal processor
CN109564585B (zh) 基于点积的处理元件
Batcher Architecture of a massively parallel processor
CN111597501A (zh) 自适应性矩阵乘法器的系统
KR20230155417A (ko) 하드웨어에서의 희소 행렬 곱셈
Véstias High-performance reconfigurable computing granularity
US10636484B2 (en) Circuit and method for memory operation
US8607029B2 (en) Dynamic reconfigurable circuit with a plurality of processing elements, data network, configuration memory, and immediate value network
US20200371785A1 (en) Computing device and neural network processor incorporating the same
US20180349061A1 (en) Operation processing apparatus, information processing apparatus, and method of controlling operation processing apparatus
Hauser et al. Performance of a LU decomposition on a multi-FPGA system compared to a low power commodity microprocessor system
US20230195836A1 (en) One-dimensional computational unit for an integrated circuit
Warrier et al. Pipeline Reconfigurable DSP for Dynamically Reconfigurable Architectures
Hoare et al. A 64-way SIMD processing architecture on an FPGA.
KR20240006684A (ko) 유연하고 확장가능한 그래프 처리 가속기
Attarde et al. Double Precision Sparse Matrix Vector Multiplication Accelerator on FPGA.
JP2022523830A (ja) 再構成可能な計算装置
CN111291884A (zh) 神经网络剪枝方法、装置、电子设备及计算机可读介质
Kramer Efficient bit-parallel supercomputer architectures and algorithms
Gadfort et al. Mapping 1D-FFT on an energy efficient 3D FPGA-DRAM architecture

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant