KR20200107295A - 시스톨릭 어레이 및 프로세싱 시스템 - Google Patents

시스톨릭 어레이 및 프로세싱 시스템 Download PDF

Info

Publication number
KR20200107295A
KR20200107295A KR1020190026198A KR20190026198A KR20200107295A KR 20200107295 A KR20200107295 A KR 20200107295A KR 1020190026198 A KR1020190026198 A KR 1020190026198A KR 20190026198 A KR20190026198 A KR 20190026198A KR 20200107295 A KR20200107295 A KR 20200107295A
Authority
KR
South Korea
Prior art keywords
data
column
mode
row
systolic array
Prior art date
Application number
KR1020190026198A
Other languages
English (en)
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 에스케이하이닉스 주식회사
Priority to KR1020190026198A priority Critical patent/KR20200107295A/ko
Priority to US16/684,246 priority patent/US10949380B2/en
Priority to CN201911286293.3A priority patent/CN111666255B/zh
Priority to JP2019232627A priority patent/JP7414515B2/ja
Publication of KR20200107295A publication Critical patent/KR20200107295A/ko

Links

Images

Classifications

    • 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/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/386Special constructional features
    • G06F2207/3884Pipelining
    • G06F2207/3892Systolic array

Abstract

프로세싱 시스템은, M개의 로우와 N개의 컬럼으로 배열된(M과 N은 자연수이며 서로 다른 수임) 다수의 프로세싱 엘리먼트를 포함하는 시스톨릭 어레이; 상기 시스톨릭 어레이에 로우 방향으로 로우 데이터를 전송하되, 제1모드에서 상기 로우 데이터는 입력 데이터이고, 제2모드에서 상기 로우 데이터는 웨이트인 로우 버퍼; 및 상기 시스톨릭 어레이에 컬럼 방향으로 컬럼 데이터를 전송하되, 상기 제1모드에서 상기 컬럼 데이터는 상기 웨이트이고, 제2모드에서 상기 컬럼 데이터는 입력 데이터인 컬럼 버퍼를 포함할 수 있다.

Description

시스톨릭 어레이 및 프로세싱 시스템 {SYSTOLIC ARRAY AND PROCESSING SYSTEM}
본 특허문헌은 시스톨릭 어레이(systolic array) 및 이를 포함하는 프로세싱 시스템에 관한 것이다.
CNN (Convolution Neural Network)은 이미지 인식 및 분석을 위해 주로 사용되는 프로세싱 시스템(processing system)이다. 이 프로세싱 시스템은 특정 필터로 이미지에서 피쳐(feature)를 추출해내는 컨볼루션 연산을 하는데, 이러한 연산에 시스톨릭 어레이(systolic array)가 사용된다.
시스톨릭 어레이는 다수의 로우와 다수의 컬럼으로 배열된 다수의 프로세싱 엘리먼트들(PE: Processing Element)을 포함하는데, 다수의 프로세싱 엘리먼트들 중 일부만을 사용하는 케이스가 다수 존재해 시스톨릭 어레이의 사용 효율(utilization)이 떨어진다.
본 발명의 실시예들은, 시스톨릭 어레이의 사용 효율을 높이는 기술을 제공할 수 있다.
본 발명의 일실시예에 따른 프로세싱 시스템은, M개의 로우와 N개의 컬럼으로 배열된(M과 N은 자연수이며 서로 다른 수임) 다수의 프로세싱 엘리먼트를 포함하는 시스톨릭 어레이; 상기 시스톨릭 어레이에 로우 방향으로 로우 데이터를 전송하되, 제1모드에서 상기 로우 데이터는 입력 데이터이고, 제2모드에서 상기 로우 데이터는 웨이트인 로우 버퍼; 및 상기 시스톨릭 어레이에 컬럼 방향으로 컬럼 데이터를 전송하되, 상기 제1모드에서 상기 컬럼 데이터는 상기 웨이트이고, 제2모드에서 상기 컬럼 데이터는 입력 데이터인 컬럼 버퍼를 포함할 수 있다.
본 발명의 일실시예에 따른 시스톨릭 어레이는, 제1모드에서 입력 데이터를 로우 데이터로 전송하고, 제2모드에서 웨이트를 상기 로우 데이터로 전송하는 M개의(M은 자연수) 로우 입력; 상기 제1모드에서 상기 웨이트를 컬럼 데이터를 전송하고, 상기 제2모드에서 상기 입력 데이터를 컬럼 데이터로 전송하는 N개(N은 M이 아닌 자연수)의 컬럼 입력; 및 상기 M개의 로우 입력 중 자신에 대응하는 로우 입력으로 전달되는 로우 데이터와 상기 N개의 컬럼 입력 중 자신에 대응하는 컬럼 입력으로 전달되는 컬럼 데이터를 곱셈 연산해 이전의 연산 결과와 합산하는 M*N개의 프로세싱 엘리먼트를 포함할 수 있다.
본 발명의 실시예들에 따르면, 시스톨릭 어레이의 사용 효율을 높일 수 있다.
도 1은 본 발명의 일실시예에 따른 시스톨릭 어레이(100)의 구성도.
도 2는 시스톨릭 어레이(100)가 수행할 행렬곱 연산을 나타낸 도면.
도 3은 4X2 배열의 시스톨릭 어레이(300)를 이용해 도 2의 행렬곱 연산을 수행하는 경우에 시스톨릭 어레이(300)에 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)이 어떻게 입력되어야 하는지를 나타낸 도면.
도 4는 시스톨릭 어레이(300)의 연산 결과를 나타낸 도면.
도 5는 시스톨릭 어레이(100)가 수행할 행렬곱 연산을 나타낸 도면.
도 6은 4X2 배열의 시스톨릭 어레이(600)를 이용해 도 5의 행렬곱 연산을 수행하는 경우에 시스톨릭 어레이(600)에 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)이 어떻게 입력되어야 하는지를 나타낸 도면.
도 7은 시스톨릭 어레이(300)의 연산 결과를 나타낸 도면.
도 8은 본 발명의 일실시예에 따른 프로세싱 시스템(800)의 구성도.
도 9는 프로세싱 시스템(800)이 제2모드로 설정된 경우에, 도 5와 같은 2X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우에 시스톨릭 어레이(850)에 입력 데이터 행렬과 웨이트 행렬이 어떻게 입력되어야 하는지를 나타낸 도면.
도 10은 시스톨릭 어레이(850)의 연산 결과를 나타낸 도면.
도 11은 출력 변환기(817)에 의해 변환된 시스톨릭 어레이(850)의 연산결과를 나타낸 도면.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있도록 상세히 설명하기 위하여, 본 발명의 가장 바람직한 실시예를 첨부 도면을 참조하여 설명하기로 한다. 본 발명을 설명함에 있어서, 본 발명의 요지와 무관한 구성은 생략될 수 있다. 각 도면의 구성요소들에 참조 번호를 부가함에 있어서, 동일한 구성요소들에 한해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 번호를 가지도록 하고 있음에 유의하여야 한다.
도 1은 본 발명의 일실시예에 따른 시스톨릭 어레이(100)의 구성도이다.
도 1을 참조하면, 시스톨릭 어레이(100)는 다수의 로우(row) 입력(IN_R_1~IN_R_3), 다수의 컬럼 입력(IN_C_1~IN_C_3), 다수의 출력(OUT_1~OUT_3) 및 다수의 프로세싱 엘리먼트들(PE11~PE33)을 포함할 수 있다.
다수의 로우 입력들(IN_R_1~IN_R_3)은 프로세싱 엘리먼트들(PE11~PE33)로 입력 데이터를 전달할 수 있다. 로우 입력들(IN_R_1~IN_R_3)은 자신에 대응하는 로우의 프로세싱 엘리먼트들(PE11~PE33)에 입력 데이터를 전달할 수 있다. 예를 들어, 로우 입력(IN_R_2)은 프로세싱 엘리먼트들(P21, P22, P23)에 입력 데이터를 전달할 수 있다. 여기서 입력 데이터는 예를 들어 이미지 데이터일 수 있다.
다수의 컬럼 입력들(IN_C_1~IN_C_3)은 프로세싱 엘리먼트들(PE11~PE33)로 웨이트(weight)를 전달할 수 있다. 컬럼 입력들(IN_C_1~IN_C_3)은 자신에 대응하는 컬럼의 프로세싱 엘리먼트들(PE11~PE33)에 웨이트를 전달할 수 있다. 예를 들어, 컬럼 입력(IN_C_3)은 프로세싱 엘리먼트들(PE13, PE23, PE33)에 웨이트를 전달할 수 있다.
다수의 출력(OUT_1~OUT_3)은 로우 입력들(IN_R_1~IN_R_3)과 동일한 방향으로 배열되며, 프로세싱 엘리먼트들(PE11~PE33_의 연산 결과를 출력하는데 사용될 수 있다. 출력들(OUT_1~OUT_3)은 자신에 대응하는 로우의 프로세싱 엘리먼트들(PE11~PE33)의 연산 결과를 출력할 수 있다. 예를 들어, 출력(OUT1)은 프로세싱 엘리먼트들(PE11, PE12, PE13)의 연산 결과를 출력할 수 있다.
다수의 프로세싱 엘리먼트들(PE11~PE33)은 로우 입력들(IN_R_1~IN_R_3) 중 자신에 대응하는 로우 입력으로 전달되는 입력 데이터와 컬럼 입력들(IN_C_1~IN_C_3) 중 자신에 대응하는 컬럼 입력으로 전달되는 웨이트를 곱셈 연산해 이전의 연산 결과와 합산할 수 있다. 예를 들어, 프로세싱 엘리먼트(PE23)는 로우 입력(IN_R_2)으로 입력된 입력 데이터와 컬럼 입력(IN_C_3)으로 입력된 웨이트를 곱셈하고 곱셈 결과를 이전의 연산 결과와 합산할 수 있다.
다수의 프로세싱 엘리먼트들(PE11~PE33) 중 프로세싱 엘리먼트(PE12)를 예시해 프로세싱 엘리먼트의 구조에 대해 알아보기로 한다. 프로세싱 엘리먼트(PE12)는 곱셈기(M12), 덧셈기(A12), 제1 내지 제4레지스터들(R12_1, R12_2, R12_3, R12_4) 및 멀티플렉서(MUX12)를 포함할 수 있다. 곱셈기(M12)는 로우 입력(IN_R_1)으로 전달되는 입력 데이터와 컬럼 입력(IN_C_2)으로 전달되는 웨이트를 곱셈 연산할 수 있다. 덧셈기(A12)는 곱셈기(M12)의 곱셈 결과와 제1레지스터(R12_1)에 저장된 값을 덧셈 연산해 제1레지스터(R12_1)에 저장할 수 있다. 제2레지스터(R12_2)는 로우 입력(IN_R_1)으로 전달된 입력 데이터를 다음 컬럼의 프로세싱 엘리먼트(PE13)로 전달하기 위한 레지스터일 수 있다. 또한, 제3레지스터(R12_3)는 컬럼 입력(IN_C_2)으로 전달된 웨이트를 다음 로우의 프로세싱 엘리먼트(PE22)로 전달하기 위한 구성일 수 있다. 멀티 플렉서(MUX12)는 다음 컬럼의 프로세싱 엘리먼트(PE13) 측으로부터 전달되는 연산 결과와 제1레지스터(R12_1)에 저장된 연산 결과 중 하나를 선택할 수 있다. 그리고 제4레지스터(R12_4)는 멀티 플렉서(MUX12)의 출력값을 저장해 이전 컬럼의 프로세싱 엘리먼트(PE11) 측으로 전달해줄 수 있다.
도 2와 같은 4X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우를 보자. 도 2에서는 입력 데이터 행렬(INPUT)이 4개의 배치(batch)로 구성된 것을 예시했다. 여기서 배치란 데이터의 개수를 의미할 수 있다. 예를 들어, 도 2의 입력 데이터 행렬(INPUT)에서 4개의 로우 각각의 하나의 이미지일 수 있다. 즉, 입력 데이터 행렬은 4개의 이미지(배치) (I11, I12, I13), (I21, I22, I23), (I31, I32, I33), (I41, I42, I43)를 포함할 수 있다.
도 3은 4X2 배열의 시스톨릭 어레이(300)를 이용해 도 2의 행렬곱 연산을 수행하는 경우에 시스톨릭 어레이(300)에 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)이 로우 입력들(IN_R_1~IN_R_4)과 컬럼 입력들(IN_C_1~IN_C_2)에 어떻게 입력되어야 하는지를 나타낸 도면이다.
도 3에서 CLK1은 1번째 싸이클에 시스톨릭 어레이(300)에 입력되는 값들을 나타내고, CLK2는 2번째 싸이클에 시스톨릭 어레이(300)에 입력되는 값들을 나타낼 수 있다. 예를 들어, 1번째 싸이클(CLK1)에 프로세싱 엘리먼트(PE11)에 I11과 W11이 입력되어 연산될 수 있다. 또한, 2번째 싸이클(CLK2)에 프로세싱 엘리먼트(PE11)에 I12와 W12가 입력되고, 프로세싱 엘리먼트(PE12)에 I11과 W12가 입력되고, 프로세싱 엘리먼트(PE21)에 I21과 W11이 입력되어 연산될 수 있다. 즉, 프로세싱 엘리먼트(PE12)는 이전 컬럼의 프로세싱 엘리먼트(PE11)가 1번째 싸이클(CLK1)에 입력받았던 입력 데이터(I11)를 2번째 사이클(CLK2)에 입력받고, 프로세싱 엘리먼트(PE21)는 이전 로우의 프로세싱 엘리먼트(PE11)가 1번째 싸이클(CLK1)에 입력받았던 웨이트(W11)를 2번째 싸이클(CLK2)에 입력받을 수 있다.
도 3에서 바운더리(boundary)(B1, B2)는 연산의 범위를 나타낼 수 있다. 시스톨릭 어레이(300)의 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22, PE31, PE32, PE41, PE42)은 바운더리 단위(B1, B2)로 입력 데이터와 웨이트의 곱셈 값들을 더하고, 그 결과를 출력할 수 있다. 도 3의 바운더리(B1, B2) 단위로 시스톨릭 어레이(300)로부터 연산 결과를 출력하면 도 4와 같은 결과값을 도출할 수 있다. 도 4는 도 2의 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)의 행렬 곱 결과임을 확인할 수 있다.
도 2 내지 도 4에서 설명한 연산에서는 시스톨릭 어레이(300) 내의 모든 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22, PE31, PE32, PE41, PE42)이 사용되는데, 이 경우 시스톨릭 어레이(300)의 사용 효율은 100%일 수 있다.
이제, 도 5와 같은 2X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우를 생각해보자. 도 5에서는 입력 데이터 행렬(INPUT)이 2개의 배치(batch)로 구성된 것을 예시했다.
도 6은 4X2 배열의 시스톨릭 어레이(600)를 이용해 도 5의 행렬곱 연산을 수행하는 경우에 시스톨릭 어레이(600)에 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)이 어떻게 입력되어야 하는지를 나타낸 도면이다. 도 3에서와 마찬가지로 도 6에서 CLK1, CLK2 등은 입력 싸이클을 나타내고 B1, B2는 연산의 바운더리를 나타낼 수 있다. 도 6의 바운더리(B1, B2) 단위로 시스톨릭 어레이(600)로부터 연산 결과를 출력하면 도 7과 같은 결과값을 도출할 수 있다. 도 7은 도 5의 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)의 행렬 곱 결과임을 확인할 수 있다.
도 5 내지 도 7에서 설명한 연산에서는 시스톨릭 어레이(600) 내에서 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22)만이 사용되고 프로세싱 엘리먼트들(PE31, PE32, PE41, PE42)이 사용되지 않는다. 이 경우 시스톨릭 어레이(600)의 사용 효율은 50%가 된다. 시스톨릭 어레이(600)의 사용 효율이 50%라는 것은 시스톨릭 어레이(600)의 성능이 최대성능 대비 50% 감소하고 불필요한 전류가 사용된다는 것을 의미할 수 있다.
도 8은 본 발명의 일실시예에 따른 프로세싱 시스템(800)의 구성도이다.
도 8을 참조하면, 프로세싱 시스템(800)은 시스톨릭 어레이(850), 호스트 인터페이스(801), 콘트롤러(803), 메모리(805), 메모리 콘트롤러(807), 데이터 버퍼(809), 로우 버퍼(811), 컬럼 버퍼(813), 모드 스위치 레지스터(815), 출력 변환기(817) 및 후-처리기(819)를 포함할 수 있다. 여기서 프로세싱 시스템(800)은 PCI 익스프레스 슬롯에 삽입되는 카드 형태, 하나의 칩 안에 여러 구성들이 집약된 시스템 온 칩(SoC: System on Chip) 또는 하나의 패키지 안에 다양한 칩들이 집약된 시스템 인 패키지(SiP: System in Package) 등 다양한 형태로 존재할 수 있다. 또한, 프로세싱 시스템(800)은 메모리의 형태로 구성될 수도 있다. 예를 들어, HBM (High Bandwidth Memory)와 같은 적층형 메모리의 로직 다이(logic die)에 프로세싱 시스템(800)에서 메모리(805)를 제외한 구성들이 형성될 수 있다. 이러한 형태의 메모리를 프로세서 인 메모리(PIN: Processor In Memory)라고도 한다.
호스트 인터페이스(801)는 호스트와의 통신을 위한 인터페이스일 수 있다. 호스트 인터페이스(801)를 통해 호스트, 예를 들어 중앙 처리 장치(CPU: Central Processing Unit), 로부터 프로세싱 시스템(800)이 처리할 각종 명령 및 데이터가 전달될 수 있다.
콘트롤러(803)는 호스트(801)의 지시에 따라 프로세싱 시스템(800)이 각종 연산을 수행할 수 있도록 프로세싱 시스템(800) 전반을 제어할 수 있다. 버스(804)는 프로세싱 시스템(800) 내부의 구성들이 각종 신호 및 데이터를 교환하기 위한 버스일 수 있다.
메모리(805)는 프로세싱 시스템(800)이 사용하는 메모리일 수 있다. 메모리(805)에는 시스톨릭 어레이(850)가 수행해야 할 연산과 관련된 데이터, 예를 들어 입력 데이터와 웨이트, 가 저장될 수 있다. 메모리 콘트롤러(807)는 메모리(805)를 억세스하기 위해 사용될 수 있다.
모드 스위치 레지스터(815)는 제1모드와 제2모드 중 하나의 모드를 설정하기 위한 레지스터일 수 있다. 모드 스위치 레지스터(815)에 저장된 설정값에 따라 프로세싱 시스템(800)은 제1모드와 제2모드 중 하나의 모드로 동작할 수 있다. 모드 스위치 레지스터(815)는 호스트 인터페이스(801)를 통해 수신된 호스트의 지시에 의해 수행될 수 있다. 즉, 호스트는 제1모드의 동작이 더욱 효율적이라고 판단되는 경우에는 모드 스위치 레지스터(815)를 제1모드로 설정하고, 제2모드의 동작이 더욱 효율적이라고 판단되는 경우에는 모드 스위치 레지스터(815)를 제2모드로 설정할 수 있다.
데이터 버퍼(809)는 메모리 콘트롤러(807)를 통해 메모리(805)로부터 데이터, 즉 입력 데이터와 웨이트, 를 전송받아 저장할 수 있다. 데이터 버퍼(809)는 로우 버퍼(811)와 컬럼 버퍼(813)에 데이터를 로드할 수 있다. 데이터 버퍼(809)는 제1모드에서는 로우 버퍼(811)에 입력 데이터를 로드하고 컬럼 버퍼(813)에 웨이트를 로드할 수 있다. 그리고 데이터 버퍼(809)는 제2모드에서는 제1모드에서와는 반대로 로우 버퍼(811)에 웨이트를 로드하고 컬럼 버퍼(813)에 입력 데이터를 로드할 수 있다.
로우 버퍼(811)는 시스톨릭 어레이(850)의 로우 입력들(IN_R_1~IN_R_4)에 로우 데이터를 전달할 수 있다. 제1모드에서는 데이터 버퍼(809)가 입력 데이터를 로우 버퍼(811)에 로드하므로, 제1모드에서는 로우 데이터가 입력 데이터일 수 있다. 또한, 제2모드에서는 데이터 버퍼(809)가 웨이트를 로우 버퍼(811)에 로드하므로, 제2모드에서는 로우 데이터가 웨이트일 수 있다. 한편, 로우 버퍼(811)는 시스톨릭 어레이(850)의 출력들(OUT_1~OUT_4)로부터 전달되는 연산 데이터를 데이터 버퍼(809)로 전달하기 위해 사용될 수 있다.
컬럼 버퍼(813)는 시스톨릭 어레이(850)의 컬럼 입력들(IN_C_1, IN_C_2)에 컬럼 데이터를 전달할 수 있다. 제1모드에서는 데이터 버퍼(809)가 웨이트를 컬럼 버퍼(813)에 로드하므로, 제1모드에서는 컬럼 데이터가 웨이트일 수 있다. 또한, 제2모드에서는 데이터 버퍼(809)가 입력 데이터를 컬럼 버퍼(813)에 로드하므로, 제2모드에서는 컬럼 데이터가 입력 데이터일 수 있다.
출력 변환기(817)는 제2모드에서 시스톨릭 어레이(850)에서 출력되는 연산 결과의 형태를 제1모드에서와 동일한 형태로 변환할 수 있다. 제1모드에서는 제2모드에서는 입력 데이터와 웨이트가 시스톨릭 어레이(850)로 입력되는 방향이 변경되므로, 제1모드에서와 제2모드에서 시스톨릭 어레이(850)로부터 출력되는 연산 결과의 형태가 다를 수 있다. 출력 변환기(817)는 제2모드에서 시스톨릭 어레이(850)로부터 출력되는 연산 결과를 제1모드에서와 동일한 형태로 변경할 수 있다. 이는 제1모드를 기준으로 한 것으로, 제2모드가 기준인 경우에는 출력 변환기(817)가 제1모드에서 시스톨릭 어레이(850)로부터 출력되는 연산 결과를 제2모드에서와 동일한 형태로 변경할 수도 있다. 출력 변환기(817)의 변환 동작에 대해서는 도 11과 함께 자세히 알아보기로 한다.
후처리기(819)는 시스톨릭 어레이(850)의 연산 결과를 후-처리(post-processing)할 수 있다. 후처리기(819)는 픽셀(pixel) 별로 평균(average) 또는 최대(max) 값을 찾는 풀링(pooling), 문턱값(threshold) 기반으로 데이터를 필터링하는 ReLU (Rectified Linear Unit) 또는 시그모이드(sigmoid)와 같은 활성함수(activation function), 결과치에서 벗어나는 값을 필터링하는 노멀라이즈(normalize) 등의 기능들(function)을 수행할 수 있다.
시스톨릭 어레이(850)는 로우와 컬럼의 개수가 다르게 배열된 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22, PE31, PE32, PE41, PE42)을 포함할 수 있다(여기서는 4X2로 예시함). 시스톨릭 어레이(850)는 제1모드에서는 로우 입력들(IN_R_1~IN_R_4)로 입력 데이터를 입력받고, 컬럼 입력들(IN_C_1, IN_C_2)로 웨이트를 입력받아 연산할 수 있다. 또한, 시스톨릭 어레이(850)는 제2모드에서는 로우 입력들(IN_R_1~IN_R_4)로 웨이트를 입력받고, 컬럼 입력들(IN_C_1, IN_C_2)로 입력 데이터를 입력받아 연산할 수 있다. 시스톨릭 어레이(850)의 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22, PE31, PE32, PE41, PE42)이 로우와 컬럼의 개수가 다르게 배열되므로, 시스톨릭 어레이(850)가 수행하는 연산의 형태에 따라 제1모드가 유리할 수도 있으며 제2모드가 유리할 수도 있다. 상기 실시예에서는 시스톨릭 어레이(850) 내의 로우와 컬럼의 개수를 4X2로 예시했으나, 로우와 컬럼의 개수가 이와 다를수도 있음은 당연하다.
도 8의 프로세싱 시스템(800)에서 도 2와 같은 4X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우에는 프로세싱 시스템(800)을 제1모드로 설정하고, 도 3과 같이 시스톨릭 어레이(850)에 입력 데이터 행렬과 웨이트 행렬을 입력시켜 동작시키면, 시스톨릭 어레이(850)의 사용 효율을 100%로 유지할 수 있다.
도 8의 프로세싱 시스템(800)에서 도 5와 같은 2X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우에 프로세싱 시스템(800)을 제1모드로 동작시킨다면, 도 5 내지 도 7에서 알아본 바와 같이 시스톨릭 어레이(850)의 사용 효율은 50%가 될 것이다. 이 경우에는 시스톨릭 어레이(850)를 제2모드로 설정하고 동작시키는 것이 유리할 수 있다.
도 9는 프로세싱 시스템(800)이 제2모드로 설정된 경우에, 도 5와 같은 2X3의 입력 데이터 행렬(INPUT)과 3X4의 웨이트 행렬(WEIGHT)을 곱하는 행렬 곱 연산을 수행하는 경우에 시스톨릭 어레이(850)에 입력 데이터 행렬과 웨이트 행렬이 어떻게 입력되어야 하는지를 나타낸 도면이다. 도 6에서와 마찬가지로 도 9에서 CLK1, CLK2 등은 입력 싸이클을 나타내고 B는 연산의 바운더리를 나타낼 수 있다. 도 9에서는 단 하나의 바운더리(B)로 연산이 가능함을 확인할 수 있다. 도 9의 바운더리(B) 단위로 시스톨릭 어레이(850)로부터 연산 결과를 출력하면 도 10과 같은 결과값을 도출할 수 있다.
도 10은 도 5의 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)의 행렬 곱 결과에서 로우와 컬럼이 바뀐 것임을 확인할 수 있다. 출력 변환기(817)는 도 10의 결과값의 형태를 도 11과 같이 변환할 수 있다. 출력 변환기(817)는 단순히 도 10의 결과값에서 로우와 컬럼을 변경하는 것에 의해 변환 동작을 수행할 수 있다. 예를 들어, (1, 2)의 위치의 값을 (2, 1)의 위치로 변경하고, (2, 3)의 위치의 값을 (3, 2)의 위치로 변경하고, (1, 1)의 위치의 값은 그대로 둘 수 있다. 즉, (A, B)의 위치의 값을 (B, A)의 위치로 변경할 수 있다. 도 11은 도 7과 일치하며, 이는 곧 도 5의 입력 데이터 행렬(INPUT)과 웨이트 행렬(WEIGHT)의 행렬 곱 결과임을 확인할 수 있다.
도 9 내지 도 11을 참조하면, 프로세싱 시스템(800)을 제2모드로 동작시키는 것에 의해 시스톨릭 어레이 내의 프로세싱 엘리먼트들(PE11, PE12, PE21, PE22, PE31, PE32, PE41, PE42)을 모두 사용하는 것이 가능하며, 즉 사용 효율을 100%로 올리는 것이 가능하며, 연산에 소요되는 시간을 줄일 수 있다는 것을 확인할 수 있다.
상술한 바와 같이, 프로세싱 시스템(800)이 수행할 행렬 연산의 형태에 따라 프로세싱 시스템(800)을 제1모드와 제2모드 중 하나의 모드로 동작시키는 것에 의해 시스톨릭 어레이의 사용 효율을 높이고, 불필요한 시간 및 불필요한 전류가 낭비되는 것을 막을 수 있다.
본 발명의 기술사상은 상기 바람직한 실시예에 따라 구체적으로 기술되었으나, 상기한 실시예는 그 설명을 위한 것이며 그 제한을 위한 것이 아님을 주의하여야 한다. 또한, 본 발명의 기술분야의 전문가라면 본 발명의 기술사상의 범위 내에서 다양한 실시예가 가능함을 알 수 있을 것이다.
800: 프로세싱 시스템
850: 시스톨릭 어레이 801: 호스트 인터페이스
803: 콘트롤러 805: 메모리
807: 메모리 콘트롤러 809: 데이터 버퍼
811: 로우 버퍼 813: 컬럼 버퍼
815: 모드 스위치 레지스터 817: 출력 변환기
819: 후-처리기

Claims (13)

  1. M개의 로우와 N개의 컬럼으로 배열된(M과 N은 자연수이며 서로 다른 수임) 다수의 프로세싱 엘리먼트를 포함하는 시스톨릭 어레이;
    상기 시스톨릭 어레이에 로우 방향으로 로우 데이터를 전송하되, 제1모드에서 상기 로우 데이터는 입력 데이터이고, 제2모드에서 상기 로우 데이터는 웨이트인 로우 버퍼; 및
    상기 시스톨릭 어레이에 컬럼 방향으로 컬럼 데이터를 전송하되, 상기 제1모드에서 상기 컬럼 데이터는 상기 웨이트이고, 제2모드에서 상기 컬럼 데이터는 입력 데이터인 컬럼 버퍼
    를 포함하는 프로세싱 시스템.
  2. 제 1항에 있어서,
    상기 제1모드에서는 상기 로우 버퍼에 상기 입력 데이터를 로드하고 상기 컬럼 버퍼에 상기 웨이트를 로드하고, 상기 제2모드에서는 상기 로우 버퍼에 상기 웨이트를 로드하고 상기 컬럼 버퍼에 상기 입력 데이터를 로드하는 데이터 버퍼
    를 더 포함하는 프로세싱 시스템.
  3. 제 1항에 있어서,
    상기 제2모드에서 상기 시스톨릭 어레이로부터 출력되는 연산 결과의 형태를 상기 제1모드에서와 동일한 형태로 변환하는 출력 변환기
    를 더 포함하는 프로세싱 시스템.
  4. 제 1항에 있어서,
    상기 제1모드에서 상기 시스톨릭 어레이로부터 출력되는 연산 결과의 형태를 상기 제2모드에서와 동일한 형태로 변환하는 출력 변환기
    를 더 포함하는 프로세싱 시스템.
  5. 제 1항에 있어서,
    상기 다수의 프로세싱 엘리먼트 각각은
    상기 로우 데이터와 상기 컬럼 데이터를 곱셈하기 위한 곱셈기;
    결과값의 저장을 위한 제1레지스터; 및
    상기 곱셈기의 곱셈 결과와 상기 제1레지스터에 저장된 값을 덧셈 연산해 상기 제1레지스터에 저장하는 덧셈기를 포함하는
    프로세싱 시스템.
  6. 제 5항에 있어서,
    상기 다수의 프로세싱 엘리먼트 각각은
    상기 로우 데이터를 다음 컬럼의 프로세싱 엘리먼트로 전달하기 위한 제2레지스터; 및
    상기 컬럼 데이터를 다음 로우의 프로세싱 엘리먼트로 전달하기 위한 제3레지스터를 더 포함하는
    프로세싱 시스템.
  7. 제 6항에 있어서,
    상기 다수의 프로세싱 엘리먼트 각각은
    상기 다음 컬럼으로부터 전달되는 결과 값과 상기 제1레지스터에 저장된 결과 값 중 하나를 선택하기 위한 멀티플렉서;
    상기 멀티플렉서의 출력값을 저장해 이전 컬럼으로 전달하기 위한 제4레지스터를 더 포함하는
    프로세싱 시스템.
  8. 제 1항에 있어서,
    호스트와의 통신을 위한 호스트 인터페이스;
    데이터를 저장하는 메모리;
    상기 메모리의 데이터를 억세스해 상기 데이터 버퍼에 로드하기 위한 메모리 콘트롤러;
    상기 호스트 인터페이스를 통해 전달되는 호스트의 제어에 따라 프로세싱 시스템을 제어하기 위한 콘트롤러;
    상기 제1모드 및 상기 제2모드의 설정을 위한 모드 스위치 레지스터; 및
    상기 시스톨릭 어레이의 연산 결과를 후-처리(post-processing) 하는 후처리기
    를 더 포함하는 프로세싱 시스템.
  9. 제 1항에 있어서,
    상기 입력 데이터는 이미지 데이터를 포함하는
    프로세싱 시스템.
  10. 제1모드에서 입력 데이터를 로우 데이터로 전송하고, 제2모드에서 웨이트를 상기 로우 데이터로 전송하는 M개의(M은 자연수) 로우 입력;
    상기 제1모드에서 상기 웨이트를 컬럼 데이터를 전송하고, 상기 제2모드에서 상기 입력 데이터를 컬럼 데이터로 전송하는 N개(N은 M이 아닌 자연수)의 컬럼 입력; 및
    상기 M개의 로우 입력 중 자신에 대응하는 로우 입력으로 전달되는 로우 데이터와 상기 N개의 컬럼 입력 중 자신에 대응하는 컬럼 입력으로 전달되는 컬럼 데이터를 곱셈 연산해 이전의 연산 결과와 합산하는 M*N개의 프로세싱 엘리먼트
    를 포함하는 시스톨릭 어레이.
  11. 제 10항에 있어서,
    상기 M*N개의 프로세싱 엘리먼트 각각은
    상기 로우 데이터와 상기 컬럼 데이터를 곱셈하기 위한 곱셈기;
    결과값의 저장을 위한 제1레지스터; 및
    상기 곱셈기의 곱셈 결과와 상기 제1레지스터에 저장된 값을 덧셈 연산해 상기 제1레지스터에 저장하는 덧셈기를 포함하는
    시스톨릭 어레이.
  12. 제 11항에 있어서,
    상기 다수의 프로세싱 엘리먼트 각각은
    상기 로우 데이터를 다음 컬럼의 프로세싱 엘리먼트로 전달하기 위한 제2레지스터; 및
    상기 컬럼 데이터를 다음 로우의 프로세싱 엘리먼트로 전달하기 위한 제3레지스터를 더 포함하는
    시스톨릭 어레이.
  13. 제 12항에 있어서,
    상기 다수의 프로세싱 엘리먼트 각각은
    상기 다음 컬럼으로부터 전달되는 결과 값과 상기 제1레지스터에 저장된 결과 값 중 하나를 선택하기 위한 멀티플렉서;
    상기 멀티플렉서의 출력값을 저장해 이전 컬럼으로 전달하기 위한 제4레지스터를 더 포함하는
    시스톨릭 어레이.
KR1020190026198A 2019-03-07 2019-03-07 시스톨릭 어레이 및 프로세싱 시스템 KR20200107295A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020190026198A KR20200107295A (ko) 2019-03-07 2019-03-07 시스톨릭 어레이 및 프로세싱 시스템
US16/684,246 US10949380B2 (en) 2019-03-07 2019-11-14 MxN systolic array and processing system that inputs weights to rows or columns based on mode to increase utilization of processing elements
CN201911286293.3A CN111666255B (zh) 2019-03-07 2019-12-13 脉动阵列和处理系统
JP2019232627A JP7414515B2 (ja) 2019-03-07 2019-12-24 シストリックアレイ及びプロセッシングシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190026198A KR20200107295A (ko) 2019-03-07 2019-03-07 시스톨릭 어레이 및 프로세싱 시스템

Publications (1)

Publication Number Publication Date
KR20200107295A true KR20200107295A (ko) 2020-09-16

Family

ID=72335282

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190026198A KR20200107295A (ko) 2019-03-07 2019-03-07 시스톨릭 어레이 및 프로세싱 시스템

Country Status (4)

Country Link
US (1) US10949380B2 (ko)
JP (1) JP7414515B2 (ko)
KR (1) KR20200107295A (ko)
CN (1) CN111666255B (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
US11537687B2 (en) 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices
US20200175355A1 (en) * 2018-11-30 2020-06-04 Electronics And Telecommunications Research Institute Neural network accelerator with systolic array structure
CN114930351A (zh) * 2019-11-26 2022-08-19 格罗克公司 使用仅单个侧从多维阵列加载操作数并输出结果
TWI746126B (zh) * 2020-08-25 2021-11-11 創鑫智慧股份有限公司 矩陣乘法裝置及其操作方法
JP7261774B2 (ja) 2020-08-28 2023-04-20 大王製紙株式会社 マスク用耳掛け部、マスク、マスク用耳掛け部の製造方法、及びマスクの製造方法
US20230004523A1 (en) * 2021-06-30 2023-01-05 Amazon Technologies, Inc. Systolic array with input reduction to multiple reduced inputs
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
US11494627B1 (en) 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
CN117743250A (zh) * 2022-09-13 2024-03-22 英业达科技有限公司 处理单元数组及其运作方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5138695A (en) * 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
US5317755A (en) * 1991-04-10 1994-05-31 General Electric Company Systolic array processors for reducing under-utilization of original design parallel-bit processors with digit-serial processors by using maximum common divisor of latency around the loop connection
US5719642A (en) * 1996-05-07 1998-02-17 National Science Council Of R.O.C. Full-search block matching motion estimation processor
US20080133879A1 (en) * 2006-12-05 2008-06-05 Electronics And Telecommunications Research Institute SIMD parallel processor with SIMD/SISD/row/column operation modes
EP2138937A4 (en) * 2007-04-12 2011-01-26 Nec Corp DATA PROCESSING DEVICE OF ARRAY PROCESSORYPSY
US8620984B2 (en) 2009-11-23 2013-12-31 Xilinx, Inc. Minimum mean square error processing
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
JP6387913B2 (ja) 2015-07-08 2018-09-12 株式会社デンソー 演算処理装置
US10241972B2 (en) * 2017-03-16 2019-03-26 International Business Machines Corporation Matrix multiplication on a systolic array
US10838910B2 (en) * 2017-04-27 2020-11-17 Falcon Computing Systems and methods for systolic array design from a high-level program
TWI685757B (zh) 2017-05-17 2020-02-21 美商谷歌有限責任公司 低延遲矩陣乘法單元
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
WO2019057281A1 (en) * 2017-09-21 2019-03-28 Huawei Technologies Co., Ltd. MULTI-WIRE SYSTOLIC NETWORK
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US10445638B1 (en) * 2018-02-28 2019-10-15 Amazon Technologies, Inc. Restructuring a multi-dimensional array
US10831702B2 (en) * 2018-09-20 2020-11-10 Ceva D.S.P. Ltd. Efficient utilization of systolic arrays in computational processing

Also Published As

Publication number Publication date
CN111666255B (zh) 2023-03-10
CN111666255A (zh) 2020-09-15
JP7414515B2 (ja) 2024-01-16
US10949380B2 (en) 2021-03-16
JP2020144843A (ja) 2020-09-10
US20200285605A1 (en) 2020-09-10

Similar Documents

Publication Publication Date Title
KR20200107295A (ko) 시스톨릭 어레이 및 프로세싱 시스템
CN107704922B (zh) 人工神经网络处理装置
CN107679621B (zh) 人工神经网络处理装置
US10824934B2 (en) Methods and apparatus for matrix processing in a convolutional neural network
US20220292049A1 (en) Neural processing accelerator
KR102325602B1 (ko) 데이터를 병렬적으로 처리하는 장치 및 방법
US20180129935A1 (en) Convolutional neural network system and operation method thereof
US11487845B2 (en) Convolutional operation device with dimensional conversion
US11100016B2 (en) Data storage device, data processing system, and acceleration device therefor
US7596679B2 (en) Interconnections in SIMD processor architectures
US20210326078A1 (en) Machine perception and dense algorithm integrated circuit
WO2023098256A1 (zh) 神经网络运算方法、装置、芯片、电子设备和存储介质
WO2023065983A1 (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
CN113261015A (zh) 神经网络系统及数据处理技术
CN116167424B (zh) 基于cim的神经网络加速器、方法、存算处理系统与设备
US20230376563A1 (en) Computational memory
US11308388B2 (en) Electronic circuit, particularly for the implementation of neural networks with multiple levels of precision
CN112970037B (zh) 用于实施神经网络应用的多芯片系统、适用于多芯片系统的数据处理方法、和非暂时性计算机可读介质
KR102290531B1 (ko) 재조직 가능한 뉴럴 네트워크 컴퓨팅 장치
US20220101083A1 (en) Methods and apparatus for matrix processing in a convolutional neural network
US20230376733A1 (en) Convolutional neural network accelerator hardware
EP4296900A1 (en) Acceleration of 1x1 convolutions in convolutional neural networks
US20230058749A1 (en) Adaptive matrix multipliers
CN111985628B (zh) 计算装置及包括所述计算装置的神经网络处理器
KR20220032089A (ko) 주문형 집적 회로의 이중 모드 동작

Legal Events

Date Code Title Description
A201 Request for examination