KR-102960671-B1 - AN IN-MEMORY PROCESSING DEVICE CAPABLE OF GUARANTEEING THE CORRECTNESS OF COMPUTATIONS ON AND METHOD THEREOF
Abstract
본 발명은 인메모리 연산 아키텍처에서 메모리 뱅크 간 명령어의 순서가 바뀌는 경우에도 연산기에 입력되는 피연산자를 정확하게 지정함으로써 연산 결과의 정확도를 보장하는 인메모리 연산 장치 및 방법에 관한 것이다. 본 출원의 실시 예에 따른 메모리 장치는, 인메모리 연산을 수행하는 메모리 장치로서, 상기 입력신호를 수신하는 PIM IU(Processing In Memory Interface Unit); 및 상기 입력신호를 수신하고, 복수의 제1 단위 데이터를 포함하는 제1 피연산 데이터 및 복수의 제2 단위 데이터를 포함하는 제2 피연산 데이터에 기초하여 상기 인메모리 연산을 수행하는 복수의 메모리 뱅크를 포함하며, 상기 PIM IU는 상기 어드레스 신호 중 상기 제1 피연산 데이터의 인덱스 정보를 지시하는 일부 비트를 상기 복수의 메모리 뱅크 각각으로 전달하고, 상기 복수의 메모리 뱅크 각각은 상기 제1 피연산 데이터에 포함된 복수의 제1 단위 데이터를 순차적으로 읽어와서 상기 제2 피연산 데이터와 연산하되, 상기 제2 피연산 데이터의 인덱스를 상기 일부 비트를 참조하여 결정한다.
Inventors
- 김선욱
- 백윤아
- 김창현
- 이원준
- 이주한
Assignees
- 고려대학교 산학협력단
Dates
- Publication Date
- 20260506
- Application Date
- 20221205
- Priority Date
- 20220801
Claims (10)
- 인메모리 연산을 수행하는 메모리 장치로서, 메모리 컨트롤러에서 출력하는 데이터(Data), 커맨드(Command) 및 어드레스(Address) 신호를 포함하는 입력신호를 입력 받는 입출력단; 상기 입력신호를 수신하는 PIM IU(Processing In Memory Interface Unit); 및 상기 입력신호를 수신하고, 복수의 제1 단위 데이터를 포함하는 제1 피연산 데이터 및 복수의 제2 단위 데이터를 포함하는 제2 피연산 데이터에 기초하여 상기 인메모리 연산을 수행하는 복수의 메모리 뱅크를 포함하며, 상기 PIM IU는 상기 커맨드 및 어드레스 신호에 포함된 연산 요청 순서와 대응되는 상기 제1 피연산 데이터의 순서가 상이한 경우, 상기 어드레스 신호 중 상기 제1 피연산 데이터의 인덱스 정보를 지시하는 일부 비트를 상기 복수의 메모리 뱅크 각각으로 전달하고, 상기 복수의 메모리 뱅크 각각은 상기 제1 피연산 데이터에 포함된 복수의 제1 단위 데이터를 순차적으로 읽어와서 상기 제2 피연산 데이터와 연산하되, 상기 제1 단위 데이터와 연산될 상기 제2 피연산 데이터의 인덱스를 상기 일부 비트를 참조하여 결정하는 메모리 장치.
- 제1 항에 있어서, 상기 복수의 메모리 뱅크 각각은 PIM 연산 유닛을 포함하고, 상기 PIM 연산 유닛은: 상기 복수의 제1 단위 데이터를 저장하는 제1 레지스터 및 상기 복수의 제2 단위 데이터 중 하나를 저장하는 제2 레지스터; 상기 제1 레지스터 및 상기 제2 레지스터로부터 상기 복수의 제1 단위 데이터 및 상기 복수의 제2 단위 데이터 중 하나를 전달받아 연산하고 연산 결과를 생성하는 연산기; 및 상기 연산기로부터 상기 연산 결과를 전달받아 저장하는 제3 레지스터를 포함하는 메모리 장치.
- 제2 항에 있어서, 상기 복수의 제1 단위 데이터 각각은 복수의 제1 요소 데이터를 포함하고, 상기 복수의 제2 단위 데이터 각각은 복수의 제2 요소 데이터를 포함하며, 상기 복수의 메모리 뱅크 각각은 순차적인 복수의 시간 구간 마다 상기 복수의 제2 요소 데이터 중 하나를 상기 복수의 제1 요소 데이터와 순차적으로 연산하는 메모리 장치.
- 제3 항에 있어서, 상기 복수의 시간 구간 각각에 해당하는 제1 단위 데이터의 순서가 상기 복수의 시간 구간 각각의 순서와 불일치할 때, 상기 PIM IU는 상기 복수의 시간 구간 중 임의의 n번째(n은 0 이상의 정수) 시간 구간에 해당하는 메모리 어드레스 신호의 일부 비트를 상기 PIM 연산 유닛으로 전달하고, 상기 PIM 연산 유닛은 상기 일부 비트를 참조하여 상기 제2 레지스터의 데이터 중 상기 연산기에 입력할 제2 요소 데이터를 결정하는 메모리 장치.
- 제1 항에 있어서, 상기 복수의 메모리 뱅크 각각은 복수의 메모리 셀 어레이를 포함하고, 상기 어드레스 신호는 상기 복수의 메모리 셀 어레이 각각에 대한 주소 정보, 상기 복수의 메모리 뱅크 각각에 대한 주소 정보 및 오프셋 정보를 포함하고, 상기 일부 비트는 상기 오프셋 정보에 대응되는 비트로부터 k번째(여기서, k는 자연수임) 비트까지의 비트 구간을 포함하는 메모리 장치.
- 인메모리 연산을 수행하는 메모리 장치의 동작 방법으로서, 메모리 컨트롤러에서 출력하는 데이터, 커맨드 및 어드레스 신호를 포함하는 입력신호를 입력 받는 단계; 상기 커맨드 및 어드레스 신호에 포함된 연산 요청 순서와 대응되는 제1 피연산 데이터의 순서가 상이한 경우, 상기 어드레스 신호 중 상기 제1 피연산 데이터의 인덱스 정보를 지시하는 일부 비트를 복수의 메모리 뱅크 각각으로 전달하는 단계; 및 상기 제1 피연산 데이터에 포함된 복수의 제1 단위 데이터를 순차적으로 읽어와서 제2 피연산 데이터와 연산하되, 상기 제1 단위 데이터와 연산될 상기 제2 피연산 데이터의 인덱스를 상기 일부 비트를 참조하여 결정하는 단계; 및 상기 복수의 제1 단위 데이터를 포함하는 상기 제1 피연산 데이터 및 복수의 제2 단위 데이터를 포함하는 상기 제2 피연산 데이터에 기초하여 상기 인메모리 연산을 수행하는 단계를 포함하는 메모리 장치 동작 방법.
- 제6 항에 있어서, 상기 인메모리 연산을 수행하는 단계는, 제1 레지스터 및 제2 레지스터로부터 복수의 제1 단위 데이터 및 복수의 제2 단위 데이터 중 하나를 전달받아 연산하고, 제3 레지스터가 연산 결과를 전달받아 저장하는 단계를 포함하는 메모리 장치 동작 방법.
- 제7 항에 있어서, 상기 복수의 제1 단위 데이터 각각은 복수의 제1 요소 데이터를 포함하고, 상기 복수의 제2 단위 데이터 각각은 복수의 제2 요소 데이터를 포함하며, 상기 제1 레지스터 및 제2 레지스터로부터 복수의 제1 단위 데이터 및 복수의 제2 단위 데이터 중 하나를 전달받아 연산하고, 제3 레지스터가 연산 결과를 전달받아 저장하는 단계는, 상기 복수의 메모리 뱅크 각각에서 순차적인 복수의 시간 구간 마다 상기 복수의 제2 요소 데이터 중 하나를 상기 복수의 제1 요소 데이터와 순차적으로 연산하는 단계를 포함하는 메모리 장치 동작 방법.
- 제8 항에 있어서, 상기 제1 레지스터 및 제2 레지스터로부터 복수의 제1 단위 데이터 및 복수의 제2 단위 데이터 중 하나를 전달받아 연산하고, 제3 레지스터가 연산 결과를 전달받아 저장하는 단계는, 상기 복수의 시간 구간 각각에 해당하는 제1 단위 데이터의 순서가 상기 복수의 시간 구간 각각의 순서와 불일치할 때, 임의의 n번째(n은 0 이상의 정수) 시간 구간에 해당하는 메모리 어드레스 신호의 일부 비트를 PIM 연산 유닛으로 전달하고, 상기 PIM 연산 유닛이 상기 일부 비트를 참조하여 상기 PIM 연산 유닛의 제2 레지스터의 데이터 중 연산기에 입력할 제2 요소 데이터를 결정하는 단계를 더 포함하는 메모리 장치 동작 방법.
- 제6 항에 있어서, 상기 어드레스 신호는 상기 복수의 메모리 뱅크 각각에 포함되는 복수의 메모리 셀 어레이 각각에 대한 주소 정보, 상기 복수의 메모리 뱅크 각각에 대한 주소 정보 및 오프셋 정보를 포함하고, 상기 일부 비트는 상기 오프셋 정보에 대응되는 비트로부터 k번째(여기서, k는 자연수임) 비트까지의 비트 구간을 포함하는 메모리 장치 동작 방법.
Description
연산 정확도가 보장된 인메모리 연산 장치 및 동작 방법{AN IN-MEMORY PROCESSING DEVICE CAPABLE OF GUARANTEEING THE CORRECTNESS OF COMPUTATIONS ON AND METHOD THEREOF} 본 발명은 연산 정확도가 보장된 인메모리 연산 장치 및 동작 방법에 관한 것이다. 딥러닝(deep learning), 인공신경망(neural network) 등의 최신 기술이 적용된 응용프로그램(application)에서 사용하는 데이터는 용량이 매우 크고 지역성(locality)이 낮다. 전통적인 컴퓨팅 구조인 폰 노이만(von Nemann) 컴퓨팅 아키텍처는 연산기가 포함된 CPU(Central Processing Unit)와 연산에 필요한 데이터를 저장하는 주메모리(main memory)로 구성되어 지역성이 높은 데이터 연산에 최적화 되어있다. 따라서 기존의 컴퓨팅 아키텍처에서 위와 같은 응용프로그램을 실행할 경우 불필요한 데이터 이동과 메모리 병목현상(bottleneck)이 발생한다. 즉, 재사용되는 데이터에 빠르게 접근하기 위해 사용되는 캐시에 지역성이 낮은 데이터가 저장되어 캐시를 효율적으로 사용하지 못하고, 연산에 필요한 방대한 데이터를 대부분 캐시가 아닌, 주메모리로부터 읽어와야 하는 문제가 발생한다. 이러한 문제점을 해결하기 위해 메모리 장치 내부에 간단한 연산기를 장착하여 주메모리에서 연산을 수행하고, 연산 결과만을 CPU로 전송하는 인메모리 연산이 개발되었다. 인메모리 연산 아키텍처는 메모리의 각 뱅크 내부의 레지스터 및 연산기로 구성된다. 연산의 실행 순서 예시는 다음과 같다. 연산에 필요한 피연산자를 준비하기 위해, 메모리 셀 또는 메모리 외부에서 하나 또는 그 이상의 피연산자를 읽어와 뱅크 내부 레지스터에 저장하고, 각 뱅크의 메모리 셀에서 나머지 피연산자를 읽어온다. 각 뱅크에서 데이터를 읽어오면 바로 연산(덧셈, 뺄셈, 곱셈 등)을 수행한다. 메모리 셀에서 데이터를 읽어와 연산을 시작하는 과정은 메모리의 RD(read) 명령어를 이용해 수행한다. 연산의 종류는 아키텍처 설계에 따라 미리 설정되어 있거나 피연산자를 읽기 위한 메모리 명령어의 일부 비트로 지정된다. 인메모리 연산을 수행할 때 사용되는 메모리 명령어는 메모리 컨트롤러의 스케줄링에 의해 생성되며, 메모리 컨트롤러의 스케줄링 알고리즘에 의해 메모리 뱅크 간 명령어의 순서가 바뀔 수 있다. 이때 메모리 뱅크 간 명령어 순서가 바뀌는 것을 고려하지 않는다면 인메모리 연산기에 입력되는 피연산자가 잘못 지정되어 연산 결과의 정확도가 보장되지 않는 문제가 발생한다. 도 1은 본 출원의 일 실시 예에 따른 메모리 시스템의 블록도이다. 도 2는 본 출원의 일 실시예에 따른 도 1의 메모리 장치를 세부적으로 나타낸 도면이다. 도 3은 본 출원의 일 실시예에 따른 도 2의 PIM IU와 메모리 뱅크를 상세히 도시한 도면이다. 도 4는 본 출원의 일 실시예에 따른 행렬 곱 연산을 도시한 것이다. 도 5는 본 출원의 일 실시예에 따른 각 메모리 뱅크의 연산 실행 동작을 도시한 것이다. 도 6은 연산 유닛에서 어드레스 신호의 일부 비트를 참조하여 연산기에 제2 입력을 결정하는 모습을 예시적으로 나타낸 도면이다. 도 7은 어드레스 신호의 각 비트가 메모리 장치에 맵핑되는 예시적인 모습이다. 도 8은 시간 구간에서의 명령어가 바뀌었을 때 본 출원의 일 실시예에 따른 메모리 장치의 동작을 나타내는 도면이다. 도 9는 본 출원의 실시예에 따른 메모리 장치의 동작 방법의 순서도이다. 이하에서는, 본 발명에 따른 구현들을 첨부된 도면을 참조하여 상세하게 설명한다. 도 1은 본 출원의 일 실시 예에 따른 메모리 시스템의 블록도이다. 도 1을 참조하면 본 출원의 일 실시예에 따른 메모리 시스템은 메모리 컨트롤러(Memory Controller)(10) 및 메모리 장치(Memory Device)(20)를 포함한다. 메모리 컨트롤러(10)는 메모리 장치(20)와 전기적으로 연결되어, 메모리 장치(20)에 데이터(Data)를 주고 받거나, 커맨드(Command) 및 어드레스(Address) 신호를 전송 하여 메모리 장치(20)에서 수행하는 연산의 종류 및 피연산자를 컨트롤할 수 있다. 메모리 장치(20)는 메모리 컨트롤러(10)로부터 출력되는 데이터, 커맨드, 및 어드레스 신호에 기반하여 인메모리 연산을 수행할 수 있다. 본 출원에서 개시하는 메모리 컨트롤러(10)는 메모리 장치(20)의 종류에 따라 다양하게 구현될 수 있으며, 일 실시예에 따라 메모리 장치(20)는 DRAM(Dynamic RAM)을 포함할 수 있고, 메모리 컨트롤러(10)는 DRAM 컨트롤러로 구현될 수 있다. 도 2는 본 출원의 일 실시예에 따른 도 1의 메모리 장치를 세부적으로 나타낸 도면이다. 도 2를 참조하면, 메모리 장치(20)는 입출력단(100), PIM IU(Processing In Memory Interface Unit, 200) 및 메모리 뱅크(Memory Bank, 300)를 포함한다. 입출력단(100)은 메모리 컨트롤러(10)로부터 데이터, 커맨드 및 어드레스 신호를 포함하는 입력 신호를 입력 받는다. 입력 신호는 표준 메모리 요청 신호(Standard memory request)와, PIM IU(200)로 전달되는 신호를 포함할 수 있다. 입출력단(100)은 데이터 입출력을 위한 입출력 회로(Data I/O Circuit, 110)를 포함할 수 있다. 입출력 회로(110)는 입력 받은 데이터를 메모리 뱅크(300) 및/또는 PIM IU(200)로 전달하거나, 또는 메모리 뱅크(300) 로부터의 데이터를 메모리 컨트롤러(10)에 출력할 수 있다. 또는, 입출력단(100)은 입력 신호를 입력 받고 각각에 대하여 래치 신호를 생성하기 위한 어드레스 래치(Address Latch, 120) 및 커맨드 래치(Command Latch, 130)를 포함할 수 있다. 어드레스 래치(120)는 어드레스에 기초하여 래치 신호를 생성하고, 래치 신호를 메모리 뱅크(300) 및/또는 PIM IU(200)에 전달한다. 커맨드 래치(130)는 커맨드 디코더(Command Decoder, 140)와 연결될 수 있고, 커맨드 디코더(140)는 커맨드 래치(130)로부터의 래치 신호를 디코딩하여 디코딩 결과를 메모리 뱅크(300) 및/또는 PIM IU(200)에 전달한다. PIM IU(200)는 입력 신호를 전달받고, 입력 신호에 기초하여 인메모리 연산 요청을 위한 신호를 생성 및 출력한다. 여기서, 인메모리 연산 요청을 위한 신호는 PIM 커맨드 신호(PIM command) 및 PIM 유효 신호(PIM valid)를 포함한다. PIM 커맨드 신호 및 PIM 유효 신호는 메모리 뱅크(300)로 전달된다. PIM IU(200)에 대한 상세한 설명은 후술한다. 메모리 뱅크(300)는 PIM 커맨드 신호 및 PIM 유효 신호에 기초하여 피연산 데이터를 연산한다. 메모리 뱅크(300)는 복수 개가 포함될 수 있다. 복수 개의 메모리 뱅크(300)는 공유 버스(shared bus, 400)에 의해 연결될 수 있다. 이하에서는, 메모리 뱅크(300)에 대하여 구체적으로 설명한다. 본 개시에서 메모리 뱅크(300)가 수행하는 일련의 연산은 피연산자 및 연산자에 기초하여 수행되는 것으로 가정하며, 연산자는 덧셈, 뺄셈, 곱셈 등 다양한 종류의 연산자들을 포함할 수 있다. 또한, 피연산자는 각 뱅크가 기 저장하고 있는 피연산자 및 모든 뱅크에 순차적으로 브로드캐스팅(broadcasting)되는 피연산자를 포함할 수 있다. 본 개시에서는 편의상 각 뱅크가 기 저장하고 있는 피연산자를 제2 피연산 데이터로 칭하고, 모든 뱅크에 순차적으로 브로드캐스팅 되는 피연산자를 제1 피연산 데이터로 칭한다. 제1 피연산 데이터는 복수의 제1 단위 데이터를 포함하고, 제2 피연산 데이터는 복수의 제2 단위 데이터를 포함할 수 있다. 여기서, “단위”라는 용어는 각 피연산 데이터가 복수의 하위 요소 데이터를 포함할 때, 복수의 하위 요소 데이터가 논리적, 수학적 기준에 따라 그룹핑될 수 있을 때, 각 그룹을 칭하는 용어일 수 있다. 예를 들어, 각 피연산 데이터가 행렬인 경우, 단위 데이터는 행(row) 또는 열(column)일 수 있고, 요소 데이터는 각 성분(element)일 수 있다. 제1 피연산 데이터는 복수의 메모리 뱅크(300) 중 어느 하나의 메모리 셀 어레이(310)에 저장되어 있을 수 있고, 이 경우 제1 피연산 데이터는 복수의 메모리 뱅크(300) 중 어느 하나의 메모리 셀 어레이(310)로부터 읽어져 와서 나머지 메모리 뱅크(300)들에 브로드캐스팅 될 수 있다. 도 3은 본 출원의 일 실시예에 따른 도 2의 PIM IU와 메모리 뱅크를 상세히 도시한 도면이다. 도 3을 참조하면, PIM IU(200)는 상술한 동작을 수행하기 위하여 주소 매칭기(210) 및 PIM 커맨드 디코더(220)를 포함한다. 주소 매칭기(210)는 입출력단으로부터 주소 정보(예, 어드레스의 래치 신호)를 전달받고, 주소 정보와 기 저장된 브로드캐스팅 주소 정보를 매칭하여 PIM 유효 신호를 생성한다. 즉, 주소 매칭기(210)는 주소 정보가 브로드캐스팅 해야 할 주소인지 여부를 판단한다. PIM 커맨드 디코더(220)는 연산기의 연산 종류를 지시하는 PIM 커맨드 신호를 생성한다. PIM 커맨드 디코더(220)는 PIM 커맨드 신호 생성을 위해 opcode를 저장하고 있으며, 기 저장된 opcode와 입력 신호(예, 커맨드)에 기초하여 PIM 커맨드 신호를 생성한다. 메모리 뱅크(300)는 메모리 셀 어레이(Memory cell array, 310), PIM 연산 유닛(PIM engine, 320) 및 스위치(Switch, 340)를 포함한다. 메모리 셀 어레이(310)는 제2 피연산 데이터에 포함된 복수의 제2 단위 데이터 중 하나를 저장한다. 메모리 뱅크(300)가 복수 개가 구비될 경우, 각 메모리 셀 어레이(310)는 복수의 제2 단위 데이터 중 하나를 서로 중복되지 않도록 저장할 수 있다. 예를 들어, 제2 피연산 데이터가 특정 행렬이고, 제2 단위 데이