KR102653014B1 - 인-메모리-컴퓨팅에 대한 데이터 배치를 위한 방법 및 상기 방법이 적용된 메모리 모듈 - Google Patents
인-메모리-컴퓨팅에 대한 데이터 배치를 위한 방법 및 상기 방법이 적용된 메모리 모듈 Download PDFInfo
- Publication number
- KR102653014B1 KR102653014B1 KR1020200103072A KR20200103072A KR102653014B1 KR 102653014 B1 KR102653014 B1 KR 102653014B1 KR 1020200103072 A KR1020200103072 A KR 1020200103072A KR 20200103072 A KR20200103072 A KR 20200103072A KR 102653014 B1 KR102653014 B1 KR 102653014B1
- Authority
- KR
- South Korea
- Prior art keywords
- operand
- tile
- dram
- memory
- module
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 31
- 239000000872 buffer Substances 0.000 claims abstract description 68
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 claims description 4
- 229910052710 silicon Inorganic materials 0.000 claims description 4
- 239000010703 silicon Substances 0.000 claims description 4
- 239000011159 matrix material Substances 0.000 description 150
- 210000004027 cell Anatomy 0.000 description 37
- 238000010586 diagram Methods 0.000 description 27
- 239000013598 vector Substances 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 239000003990 capacitor Substances 0.000 description 8
- 238000013528 artificial neural network Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System 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/7821—Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5318—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with column wise addition of partial products, e.g. using Wallace tree, Dadda counters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/409—Read-write [R-W] circuits
- G11C11/4096—Input/output [I/O] data management or control circuits, e.g. reading or writing circuits, I/O drivers or bit-line switches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Databases & Information Systems (AREA)
- Dram (AREA)
- Memory System (AREA)
- Semiconductor Memories (AREA)
- Executing Machine-Instructions (AREA)
Abstract
메모리 모듈은 복수의 동적 랜덤 액세스 메모리(DRAM) 뱅크들을 포함하는 메모리 다이, 및 메모리 컨트롤러를 포함하되, 상기 각 DRAM 뱅크는, 복수의 페이지들에 배열된 DRAM 셀들의 어레이(상기 각 페이지는 상기 DRAM 셀들을 포함하고, 상기 각 DRAM 셀은 비트 값을 저장함), 상기 복수의 페이지 중 오픈 페이지의 값을 저장하는 행 버퍼, 입출력(IO) 모듈, 및 인-메모리 컴퓨팅(IMC) 모듈을 포함하고, 상기 IMC 모듈은, 산술 논리 유닛(ALU)(상기 행 버퍼 또는 상기 IO 모듈로부터 피연산자를 수신하도록, 및 상기 피연산자 및 복수의 산술 논리 연산들에서 선택된 일 산술 논리 연산에 기초하여 출력을 컴퓨팅 하도록 구성됨), 및 상기 ALU에 의해 컴퓨팅된 출력을 저장하도록 구성된 결과 레지스터를 포함하고, 상기 메모리 컨트롤러는, 호스트 프로세서로부터 제1 피연산자, 제2 피연산자 및 명령어를 수신하고, 상기 명령어에 기초하여, 복수의 데이터 레이아웃들로부터 일 데이터 레이아웃을 결정하고, 상기 일 데이터 레이아웃에 따라 상기 DRAM 뱅크에 상기 제1 피연산자 및 상기 제2 피연산자를 공급하고, 및 상기 명령어에 따라 상기 제1 피연산자 및 상기 제2 피연산자에 대한 상기 복수의 산술 논리 연산들 중 상기 일 산술 논리 연산을 수행하도록 상기 DRAM 뱅크의 상기 IMC 모듈을 제어하도록 구성된다.
Description
본 개시의 실시예의 양태는 인-메모리 컴퓨팅(in-memory compute)에 대한 데이터 배치를 위한 시스템 및 방법에 관한 것이다.
고 대역폭 메모리(High Bandwidth Memory; HBM)는 종종 그래픽 처리 장치(GPU)를 위한 고성능 메모리로서 사용된다. HBM은 일반적인 DRAM에 비해 매우 넓은 버스를 사용할 수 있다는 이점이 있다. 현재의 HBM 아키텍처는 실리콘 비아(through silicon via; TSV)를 통해 연결될 수 있는 다중 스택 DRAM 다이(예를 들어, 다이스(dice)) 및 HBM의 버퍼와 GPU의 HBM 메모리 컨트롤러로 기능하는 논리 다이를 포함한다. 게다가 메모리에서의 프로세스(예를 들어, 인-메모리 프로세싱(in-memory processing)) 기능을 메모리 시스템에 추가함으로써 추가적인 성능 향상이 달성될 수 있다.
상기 내용은 본 발명의 실시예들의 배경에 대한 이해를 돕기 위한 것일 뿐이므로, 종래 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시의 실시예들에 따른 과제는 메모리 모듈의 성능을 향상시킬 수 있는 방법 및 성능이 향상된 메모리 모듈을 제공하고자 하는 것이다.
상기 과제를 해결하기 위한 본 개시의 일 실시예에 따른 메모리 모듈은, 복수의 동적 랜덤 액세스 메모리(DRAM) 뱅크들을 포함하는 메모리 다이, 및 메모리 컨트롤러를 포함하되, 상기 각 DRAM 뱅크는, 복수의 페이지들에 배열된 DRAM 셀들의 어레이 - 상기 각 페이지는 상기 DRAM 셀들을 포함하고, 상기 각 DRAM 셀은 비트 값을 저장함, 상기 복수의 페이지 중 오픈 페이지의 값을 저장하는 행 버퍼, 입출력(IO) 모듈, 및 인-메모리 컴퓨팅(IMC) 모듈을 포함하고, 상기 IMC 모듈은, 산술 논리 유닛(ALU) - 상기 행 버퍼 또는 상기 IO 모듈로부터 피연산자를 수신하도록, 및 상기 피연산자 및 복수의 산술 논리 연산들에서 선택된 일 산술 논리 연산에 기초하여 출력을 컴퓨팅 하도록 구성됨, 및 상기 ALU에 의해 컴퓨팅된 출력을 저장하도록 구성된 결과 레지스터를 포함하고, 상기 메모리 컨트롤러는, 호스트 프로세서로부터 제1 피연산자, 제2 피연산자 및 명령어를 수신하고, 상기 명령어에 기초하여, 복수의 데이터 레이아웃들로부터 일 데이터 레이아웃을 결정하고, 상기 일 데이터 레이아웃에 따라 상기 DRAM 뱅크에 상기 제1 피연산자 및 상기 제2 피연산자를 공급하고, 및 상기 명령어에 따라 상기 제1 피연산자 및 상기 제2 피연산자에 대한 상기 복수의 산술 논리 연산들 중 상기 일 산술 논리 연산을 수행하도록 상기 DRAM 뱅크의 상기 IMC 모듈을 제어하도록 구성된다.
상기 복수의 데이터 레이아웃들은, 일 피연산자(1OP) 데이터 레이아웃을 포함하되, 상기 제1 피연산자는 상기 DRAM 셀에 쓰여지고, 상기 제2 피연산자는 상기 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급될 수 있다.
상기 IMC 모듈은, 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터에 상기 제1 피연산자의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자의 제1 타일, 및 상기 제2 피연산자의 복수의 제2 타일들 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
상기 제1 피연산자는 복수의 제1 타일들로 분할되고, 상기 제2 피연산자는 복수의 제2 타일들로 분할되고, 상기 각 타일은 복수의 값을 포함하고, 상기 데이터 레이아웃은 동일한 행(SR) 데이터 레이아웃을 포함하고, 상기 메모리 컨트롤러는 상기 DRAM 셀들의 동일한 페이지에 하나 이상의 상기 제1 타일(들) 및 하나 이상의 상기 제2 타일(들)을 저장할 수 있다.
제4 항에 있어서, 상기 IMC 모듈은 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터에 상기 하나 이상의 제1 타일(들) 중 하나의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자와 상기 DRAM 셀들의 어레이의 상기 제1 타일과 동일한 페이지에 저장된 하나 이상의 상기 제2 타일(들) 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
상기 DRAM 뱅크들의 상기 IMC 모듈은 누산기를 더 포함하고, 상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고, 상기 누산기는, 상기 ALU에 의해 계산된 출력을 수신하고, 및 누적된 값과 출력의 합으로 상기 누산기 레지스터를 업데이트하도록 구성되고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 내적을 컴퓨팅하는 단계를 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들) 중 하나의 제2 타일은 열 데이터를 포함할 수 있다.
상기 제1 타일(들)은 제1 수의 값을 갖고, 상기 제2 타일(들)은 제2 수의 값을 갖고, 상기 DRAM 뱅크들의 상기 IMC 모듈은 출력 버퍼를 포함하고, 상기 출력 버퍼는 상기 제1 수의 값과 상기 제2 수의 값의 곱 이상의 저장을 위한 크기를 갖고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 외적을 컴퓨팅하는 것을 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함할 수 있다.
상기 제1 타일(들)은 제1 수의 값을 갖고, 상기 제2 타일(들)은 제2 수의 값을 갖고, 상기 DRAM 뱅크들의 상기 IMC 모듈은 출력 버퍼를 포함하고, 상기 출력 버퍼는 상기 제1 수의 값과 상기 제2 수의 값 중 큰 값 이상의 저장을 위한 크기를 갖고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 텐서곱을 컴퓨팅하는 것을 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함할 수 있다.
상기 제1 피연산자는 복수의 제1 타일들로 분할되고, 상기 제2 피연산자는 복수의 제2 타일들로 분할되고, 상기 각 타일은 복수의 값들을 포함하고, 상기 복수의 데이터 레이아웃들은 상이한 행(DR) 데이터 레이아웃을 포함하고, 상기 메모리 컨트롤러는 상기 DRAM 셀들의 어레이의 제1 페이지에 상기 제1 타일들의 서브 세트, 및 상기 DRAM 셀들의 어레이의 제2 페이지에 상기 제2 타일들의 서브 세트를 저장할 수 있다.
상기 IMC 모듈은, 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터의 상기 제1 페이지로부터 상기 제1 피연산자의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자, 및 상기 제2 페이지로부터 상기 제2 피연산자의 복수의 제2 타일 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
상기 각 DRAM 뱅크의 상기 IMC 모듈은 상기 ALU에 의해 컴퓨팅된 출력을 버퍼링하도록 구성된 버퍼를 더 포함할 수 있다.
상기 버퍼는 상기 결과 레지스터의 사이즈의 4배 이상의 사이즈를 가질 수 있다.
상기 각 DRAM 뱅크의 상기 IMC 모듈은 누산기를 더 포함하고, 상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고, 상기 누산기는, 상기 ALU에 의해 계산된 출력을 수신하고, 및 누적된 값과 출력의 합으로 상기 누산기 레지스터를 업데이트하도록 구성될 수 있다.
상기 메모리 모듈은 실리콘 비아를 통해 연결된 메모리 다이 스택을 포함하는 고 대역폭 메모리(HBM) 모듈이고, 상기 메모리 다이 스택은 상기 메모리 다이를 포함할 수 있다.
상기 과제를 해결하기 위한 본 개시의 일 실시예에 따른 방법은, 인-메모리(in-memory) 컴퓨팅을 수행하는 방법에 있어서, 메모리 모듈의 메모리 컨트롤러에 의해, 제1 피연산자, 제2 피연산자, 명령어를 수신하는 것, 상기 메모리 컨트롤러에 의해, 상기 명령에 기초하여 복수의 데이터 레이아웃으로부터 데이터 레이아웃을 결정하는 것, 상기 데이터 레이아웃에 따라 상기 메모리 모듈의 적어도 하나의 동적 랜덤 액세스 메모리(DRAM) 뱅크에 상기 제1 피연산자 및 상기 제2 피연산자를 공급하는 것, 및 상기 명령어에 따라 상기 제1 피연산자 및 상기 제2 피연산자에 대한 복수의 산술 논리 연산들 중 일 산술 논리 연산을 수행하도록 상기 DRAM 뱅크의 인-메모리 컴퓨팅(IMC) 모듈을 제어하는 것을 포함하되, 상기 각 DRAM 뱅크는, 복수의 페이지들에 배열된 DRAM 셀들의 어레이 - 상기 각 페이지는 상기 DRAM 셀들을 포함하고, 상기 각 DRAM 셀은 비트 값을 저장함, 상기 복수의 페이지 중 오픈 페이지의 값을 저장하는 행 버퍼, 입출력(IO) 모듈, 및 상기 IMC 모듈을 포함하고, 상기 IMC 모듈은, 산술 논리 유닛(ALU) - 상기 행 버퍼 또는 상기 IO 모듈로부터 피연산자를 수신하도록, 및 상기 피연산자 및 복수의 산술 논리 연산들에서 선택된 일 산술 논리 연산에 기초하여 출력을 컴퓨팅 하도록 구성됨, 및 상기 ALU에 의해 컴퓨팅된 출력을 저장하도록 구성된 결과 레지스터를 포함한다.
상기 복수의 데이터 레이아웃들은, 일 피연산자(1OP) 데이터 레이아웃을 포함하되, 상기 제1 피연산자는 상기 DRAM 셀에 쓰여지고, 상기 제2 피연산자는 상기 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급될 수 있다.
상기 IMC 모듈은 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터에 상기 제1 피연산자의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자의 제1 타일, 및 상기 제2 피연산자의 복수의 제2 타일들 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
상기 제1 피연산자는 복수의 제1 타일들로 분할되고, 상기 제2 피연산자는 복수의 제2 타일들로 분할되고, 상기 각 타일은 복수의 값을 포함하고, 상기 데이터 레이아웃은 동일한 행(SR) 데이터 레이아웃을 포함하고, 상기 메모리 컨트롤러는 상기 DRAM 셀들의 동일한 페이지에 하나 이상의 상기 제1 타일(들) 및 하나 이상의 상기 제2 타일(들)을 저장할 수 있다.
상기 IMC 모듈은 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터에 상기 하나 이상의 제1 타일(들) 중 하나의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자와 상기 DRAM 셀들의 어레이의 상기 제1 타일과 동일한 페이지에 저장된 하나 이상의 상기 제2 타일(들) 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
상기 적어도 하나의 DRAM 뱅크의 상기 IMC 모듈은 누산기를 더 포함하고, 상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고, 상기 누산기는, 상기 ALU에 의해 계산된 출력을 수신하고, 및 누적된 값과 출력의 합으로 상기 누산기 레지스터를 업데이트하도록 구성되고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 내적을 컴퓨팅하는 단계를 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들) 중 하나의 제2 타일은 열 데이터를 포함한다.
상기 제1 타일(들)은 제1 수의 값을 갖고, 상기 제2 타일(들)은 제2 수의 값을 갖고, 상기 적어도 하나의 DRAM 뱅크들 상기 IMC 모듈은 출력 버퍼를 포함하고, 상기 출력 버퍼는 상기 제1 수의 값과 상기 제2 수의 값의 곱 이상의 저장을 위한 크기를 갖고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 외적을 컴퓨팅하는 것을 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함할 수 있다.
상기 제1 타일(들)은 제1 수의 값을 갖고, 상기 제2 타일(들)은 제2 수의 값을 갖고, 상기 적어도 하나의 DRAM 뱅크의 상기 IMC 모듈은 출력 버퍼를 포함하고, 상기 출력 버퍼는 상기 제1 수의 값과 상기 제2 수의 값 중 큰 값 이상의 저장을 위한 크기를 갖고, 상기 명령어는 상기 제1 피연산자와 상기 제2 피연산자의 텐서곱을 컴퓨팅하는 것을 포함하고, 상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고, 상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함할 수 있다.
상기 제1 피연산자는 복수의 제1 타일들로 분할되고, 상기 제2 피연산자는 복수의 제2 타일들로 분할되고, 상기 각 타일은 복수의 값들을 포함하고, 상기 복수의 데이터 레이아웃들은 상이한 행(DR) 데이터 레이아웃을 포함하고, 상기 메모리 컨트롤러는 상기 DRAM 셀들의 어레이의 제1 페이지에 상기 제1 타일들의 서브 세트, 및 상기 DRAM 셀들의 어레이의 제2 페이지에 상기 제2 타일들의 서브 세트를 저장할 수 있다.
상기 IMC 모듈은, 피연산자 레지스터를 더 포함하고, 상기 메모리 컨트롤러는, 상기 피연산자 레지스터의 상기 제1 페이지로부터 상기 제1 피연산자의 제1 타일을 저장하고, 및 상기 피연산자 레지스터에 저장된 상기 제1 피연산자, 및 상기 제2 페이지로부터 상기 제2 피연산자의 복수의 제2 타일 각각에 대해 산술 논리 연산을 수행하도록 더 구성될 수 있다.
본 개시의 실시예들에 따르면, 메모리 모듈의 성능이 향상될 수 있다.
도 1은 본 개시의 일 실시예에 따른 메모리(예를 들어, HBM) 시스템의 아키텍처의 블록도이다.
도 2a는 본 개시의 일 실시예에 따른 임베디드(embedded) 산술 논리 유닛(ALU)을 갖는 메모리 뱅크의 개략적인 블록도이다.
도 2b는 본 발명의 일 실시예에 따른 DRAM 셀의 예를 나타내는 회로도이다.
도 2c는 DRAM 셀의 어레이, 행 디코더, IOSA, IMC 모듈, 및 열 디코더를 포함하는 본 발명의 일 실시예에 따른 DRAM 뱅크의 개략도이다.
도 3은 본 개시의 일 실시예에 따른 DRAM 블록의 어레이에 대한 개략도이다.
도 4a는 제1 피연산자(행렬 A)가 DRAM에 저장되고, 제2 피연산자(행렬 B)가 내장된 메모리 모듈 외부로부터 브로드캐스트 되는 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 인-메모리 컴퓨팅(IMC)과 함께 개략적으로 도시한다.
도 4b는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 동일한 페이지에 저장된 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다.
도 4c는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 상이한 페이지에 저장되는 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다.
도 5a는 제1 피연산자(1OP) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 5b는 1OP 데이터 레이아웃에서 행렬 A의 첫번째 행의 행렬의 첫번째 값과 행렬 B의 각 열의 첫번째 값의 곱을 데이터 재사용과 함께 나타낸 개략도이다.
도 6a는 동일한 행(SR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 6b는 SR 데이터 레이아웃에서 행렬 A의 첫번째 행의 첫번째 값과 행렬 B의 각 열의 첫번째 값에 대한 데이터 재사용을 통해 곱한 개략도이다.
도 7a는 상이한 행(DR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 7b는 DR 데이터 레이아웃에서 행렬 B의 각 열의 첫번째 값과 행렬 A의 첫번째 행의 두번째 값에 의해, 행렬 B의 각 열의 두번째 값에 의한 행렬 A의 첫번째 행의 첫번째 값의 데이터 재사용을 통한 곱셈의 개략도이다.
도 8은 DRAM 뱅크의 인-메모리 컴퓨팅(IMC) 모듈의 개략적인 블록도이다.
도 9는 본 개시의 일부 실시예에 따른 동일한 행(SR) 레이아웃을 사용한 컴퓨팅을 설명하기위한 GEMM의 일 예에 대한 개략도이다.
도 10은 본 개시의 실시예에 따른 인-메모리 컴퓨팅 모듈을 갖는 DRAM 뱅크에서의 데이터의 배치를 제어하기위한 방법의 플로우차트이다.
도 2a는 본 개시의 일 실시예에 따른 임베디드(embedded) 산술 논리 유닛(ALU)을 갖는 메모리 뱅크의 개략적인 블록도이다.
도 2b는 본 발명의 일 실시예에 따른 DRAM 셀의 예를 나타내는 회로도이다.
도 2c는 DRAM 셀의 어레이, 행 디코더, IOSA, IMC 모듈, 및 열 디코더를 포함하는 본 발명의 일 실시예에 따른 DRAM 뱅크의 개략도이다.
도 3은 본 개시의 일 실시예에 따른 DRAM 블록의 어레이에 대한 개략도이다.
도 4a는 제1 피연산자(행렬 A)가 DRAM에 저장되고, 제2 피연산자(행렬 B)가 내장된 메모리 모듈 외부로부터 브로드캐스트 되는 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 인-메모리 컴퓨팅(IMC)과 함께 개략적으로 도시한다.
도 4b는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 동일한 페이지에 저장된 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다.
도 4c는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 상이한 페이지에 저장되는 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다.
도 5a는 제1 피연산자(1OP) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 5b는 1OP 데이터 레이아웃에서 행렬 A의 첫번째 행의 행렬의 첫번째 값과 행렬 B의 각 열의 첫번째 값의 곱을 데이터 재사용과 함께 나타낸 개략도이다.
도 6a는 동일한 행(SR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 6b는 SR 데이터 레이아웃에서 행렬 A의 첫번째 행의 첫번째 값과 행렬 B의 각 열의 첫번째 값에 대한 데이터 재사용을 통해 곱한 개략도이다.
도 7a는 상이한 행(DR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다.
도 7b는 DR 데이터 레이아웃에서 행렬 B의 각 열의 첫번째 값과 행렬 A의 첫번째 행의 두번째 값에 의해, 행렬 B의 각 열의 두번째 값에 의한 행렬 A의 첫번째 행의 첫번째 값의 데이터 재사용을 통한 곱셈의 개략도이다.
도 8은 DRAM 뱅크의 인-메모리 컴퓨팅(IMC) 모듈의 개략적인 블록도이다.
도 9는 본 개시의 일부 실시예에 따른 동일한 행(SR) 레이아웃을 사용한 컴퓨팅을 설명하기위한 GEMM의 일 예에 대한 개략도이다.
도 10은 본 개시의 실시예에 따른 인-메모리 컴퓨팅 모듈을 갖는 DRAM 뱅크에서의 데이터의 배치를 제어하기위한 방법의 플로우차트이다.
개시된 개념의 특징 및 이를 달성하는 방법은 이하의 실시예의 상세한 설명 및 첨부 도면을 참조하여 보다 쉽게 이해될 수 있다. 이하, 첨부된 도면을 참조하여 실시예를 보다 상세하게 설명하는데, 도면 전체에 걸쳐서 동일한 참조 번호는 동일한 요소를 지칭한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 오히려, 이들 실시예는 예시로서 제공되어 본 개시가 철저하고 완전할 것이며, 본 개시의 양태 및 특징을 당업자에게 완전히 전달할 것이다. 따라서, 본 개시의 양태 및 특징의 완전한 이해를 위해 당업자에게 필요하지 않은 프로세스, 요소 및 기술은 설명되지 않을 수 있다. 달리 언급되지 않는 한, 유사한 참조 부호는 첨부된 도면 및 기재된 설명 전체에 걸쳐 유사한 요소를 나타내므로, 그 설명은 반복되지 않을 것이다. 도면에서, 요소, 층 및 영역의 상대적인 크기는 명확성을 위해 과장될 수 있다.
다음의 설명에서, 설명의 목적으로, 다양한 실시예의 철저한 이해를 제공하기 위해 다수의 특정 세부 사항이 설명된다. 그러나, 이러한 특정 세부 사항없이 또는 하나 이상의 등가의 구성으로 다양한 실시예가 실시될 수 있음이 명백하다. 다른 경우에, 공지된 구조 및 장치는 다양한 실시예를 불필요하도록 모호하게 하는 것을 피하기 위해 블록도 형태로 도시된다.
본 명세서에서 사용된 용어는 특정 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 단수의 표현은 문맥 상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서 사용되는 용어 "포함하다", "포함하는", "갖는", 및 "포함하는"은 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성 요소의 존재를 특정하는 것으로 이해되나, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성 요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지는 않는다. 본 명세서에 사용된 용어 "및/또는"은 하나 이상의 관련된 열거된 항목의 임의의 그리고 모든 조합을 포함한다.
본 명세서에 기술된 본 개시의 실시예에 따른 전자 또는 전기 장치 및/또는 임의의 다른 관련 장치 또는 구성 요소는 임의의 적합한 하드웨어, 펌웨어(예를 들어, 어플리케이션-특정 집적 회로(application-specific integrated circuit)), 소프트웨어 또는 조합을 이용하여 구현될 수 있다. 예를 들어, 일부 환경에서, 이들 장치의 다양한 구성 요소는 하나의 집적 회로(IC) 칩 또는 별도의 IC칩 상에 형성될 수 있다. 또한, 이들 장치의 다양한 구성 요소는 연성 인쇄 회로 필름, 테이프 캐리어 패키지(TCP), 인쇄 회로 기판(PCB) 상에 구현되거나 하나의 기판 상에 형성될 수 있다. 또한, 이들 장치의 다양한 구성 요소는 하나 이상의 프로세서 상에서, 하나 이상의 컴퓨팅 장치에서 실행되고, 컴퓨터 프로그램 명령을 실행하고 본 명세서에 설명된 다양한 기능을 수행하기 위해 다른 시스템 구성 요소와 상호 작용하는 프로세스 또는 스레드일 수 있다. 컴퓨터 프로그램 명령은 예를 들어 랜덤 액세스 메모리(RAM)와 같은 표준 메모리 장치를 사용하여 컴퓨팅 장치에서 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 명령은 또한 예를 들어 CD-ROM, 플래시 드라이브 등과 같은 다른 비 일시적 컴퓨터 판독 가능 매체에 저장될 수 있다. 또한, 통상의 기술자는 본 개시의 예시적인 실시예들의 사상 및 범위 내에서 다양한 컴퓨팅 장치의 기능이 단일 컴퓨팅 장치에 결합되거나 통합될 수 있거나, 특정 컴퓨팅 장치의 기능이 하나 이상의 다른 컴퓨팅 장치에 걸쳐서 분산될 수 있음을 인식해야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 또한, 일반적으로 사용되는 사전에 정의된 용어와 같은 용어는 관련 기술 및/또는 본 명세서의 맥락에서 의미와 일치하는 의미를 갖는 것으로 해석되어야 하고, 본 명세서에서 명시적으로 정의되지 않는 한 이상적이거나 지나치게 공식적인 의미로 해석되어서는 안된다.
본 개시의 일부 양상들은 일반적으로 인-메모리 컴퓨팅(in-memory compute)의 맥락에서 메모리 내 데이터 배치의 관리에 관한 것이다. 인-메모리 컴퓨팅에 대한 내용의 일 예는 메모리와 산술 논리 유닛(ALU) 및 HBM의 메모리 컨트롤러를 포함하는 DRAM(Dynamic Random Access Memory) 다이를 포함하는 고 대역폭 메모리(HBM) 시스템이고, 여기서 HBM 논리 다이의 ALU는 인-메모리 컴퓨팅을 수행할 수 있다. HBM의 메모리 제어기는 DRAM 다이의 메모리로의 데이터 저장 및 DRAM 다이로부터의 데이터 읽기를 제어한다.
명확성을 위해, 본원에 사용된 용어 "인-메모리 컴퓨팅(in-memory computation)"은 DRAM 다이에 저장된 데이터를 사용하여 외부 데이터 버스의 통과없이 고 대역폭 메모리 모듈과 같은 메모리 모듈 내에서 컴퓨팅을 수행하는 것을 의미한다. 비교 컴퓨터 시스템에서, 프로세서는 외부 DRAM 데이터 버스를 통해 메인 메모리(예를 들어, DRAM)에 연결될 수 있고, 메인 메모리로부터의 데이터 액세스는 프로세서 내의 레지스터 파일 내의 데이터 및/또는 프로세서에 더 가까운 하드웨어 캐시(예를 들어, L1 캐시, L2 캐시)의 데이터에 액세스하는 것보다 상당히 느리다(예를 들어, 수십 배 느리다). 메모리(예를 들어, "인-메모리 프로세서(in-memory processor)")에 또는 그 근처에 추가 프로세서를 배치함으로써, 외부 버스를 통과함으로써 야기되는 레이턴시를 회피할 수 있어, 고성능 컴퓨팅이 달성된다.
본 개시의 실시예의 양태는 (예를 들어, 각각의 DRAM 뱅크의 감지 증폭기 또는 행 버퍼에 직접 연결되는)DRAM 뱅크와 동일한 다이 상에 ALU와 같은 컴퓨팅 회로(computational circuitry)를 배치하는 것에 관한 것이다.
DRAM 모듈의 설계 및 성능 특성으로 인해, 메모리 내의 데이터의 특정 배열은 인-메모리 컴퓨팅의 성능에 영향을 줄 수 있다. 따라서, 본 개시의 실시예의 일부 양상은 메모리 모듈(예를 들어, HBM 메모리 모듈)의 DRAM 모듈 내에 데이터를 배치하기위한 시스템 및 방법에 관한 것이며, 여기서 데이터의 배치는 인-메모리 컴퓨팅(IMC) 모듈에 의해 수행될 컴퓨팅의 특성에 기초하여 제어될 수 있다.
도 1은 본 개시의 일 실시예에 따른 메모리(예를 들어, HBM) 시스템의 아키텍처의 블록도이다.
도 1을 참조하면, 도 1에 도시된 바와 같이, 본 개시의 실시예는 FIM (function-in-memory) 메모리 시스템(100)을 위한 시스템을 제공한다. 메모리 시스템(100)(또는, HBM 시스템)은 메모리 모듈(110) (또는, HBM 모듈)에 통합될 추가적인 컴퓨팅 리소스를 지원한다. 예를 들어, 다양한 실시예에서, 메모리 시스템(100)은 일부 데이터 컴퓨팅 및 이동이 메모리 내에서 수행되도록 하고, 또한 대용량 메모리 스크래치 패드(high-capacity memory scratchpad)를 제공한다. 메모리 시스템(100)은 그래픽 처리 장치(GPU) 또는 중앙 처리 장치(CPU)와 같은 호스트 프로세서(170)에 연결된 적어도 하나의 메모리 모듈(110)을 포함한다. 다양한 실시예에서, 메모리 모듈(110)은 내부 메모리 버스(130)를 통해 메모리 컨트롤러(140)(예를 들어, 논리 다이(logic die))에 연결된 하나 이상의 동적 랜덤 액세스 메모리(DRAM) 다이(120)를 포함한다. 다양한 실시예에서, 호스트 프로세서(170)는 메모리 모듈(110)과 인터페이스하기 위한 호스트 메모리 컨트롤러(180)(또는, 호스트 컨트롤러)를 포함할 수 있다. 그러나 본 개시가 이에 한정되는 것은 아니다. 예를 들어, 호스트 메모리 컨트롤러(180)는 호스트 프로세서(170)와 분리될 수도 있다(예를 들어, 호스트 프로세서(170)와 별도의 다이 또는 동일한 다이로서).
다양한 실시예들에 따르면, 메모리 컨트롤러(140)는 호스트 프로세서(170)로부터의 명령들의 실행을 조정하도록 구성된다. 명령어는 정규 명령어와 FIM 명령어를 모두 포함할 수 있다. 예를 들어, 정규 명령들(예를 들어, 메모리 내 기능(function-in-memory) 명령들이 아닌 전통적인 로드 및 저장 기능들)은 호스트 메모리 컨트롤러(180)에 의해 전송되고, 메모리 컨트롤러(140)에 의해 수신되고, 통상적인 방식으로 실행된다. 예를 들어, 정규 명령은 외부 버스(190)를 통해 수신된 데이터를 DRAM 다이(120)에 저장하는 명령 및 DRAM 다이(120)로부터 데이터를 검색하고 외부 버스(190)를 통해 호스트 프로세서(170)로 데이터를 전송하는 명령을 포함할 수 있다. 일부 실시예에서, 정규 명령 및 FIM 명령은 DRAM 다이의 특정 위치(예를 들어, 특정 뱅크(bank)의 특정 페이지)에 데이터를 저장하는 동작을 포함할 수 있다. 이들 데이터는 2개의 상이한 피연산자를 포함할 수 있고, 여기서 각각의 피연산자는 다수의 값(예를 들어, 부동 소수점(floating point) 또는 정수(integer) 값)을 포함할 수 있고, 아래에서 보다 상세히 논의되는 바와 같이, 이들 피연산자의 값은 다양한 데이터 배치 전략에 따라 DRAM 다이의 상이한 위치에 분포될 수 있다.
본 개시의 실시예의 양태는 인-메모리 컴퓨팅(IMC)의 사용에 관한 것이다. 몇몇 비교되는 HBM 시스템은 DRAM 다이(120) 외부(예를 들어, 메모리 컨트롤러(140)에 위치) 외부의 산술 논리 유닛(ALU)를 포함하고, ALU가 외부 버스 (190)를 통과하지 않고, 하나 이상의 DRAM 다이 (120)에 저장된 데이터에 대한 연산(operation)(예를 들어, 산술 연산(arithmetic operations))을 수행할 수 있도록 DRAM 다이(120)의 메모리 뱅크에 의해 공유된다. 예를 들어, 메모리 컨트롤러(140)는 DRAM 다이(120)의 상이한 부분들 사이에서 데이터를 이동 또는 복사하기 위해 데이터 이동 연산(예를 들어, 로드(load)/저장(store) 쌍 명령(pair instructions))을 실행할 수 있다. 예를 들어, 메모리 제어기는 ALU를 이용하는 컴퓨팅 FIM 명령(예를 들어, 원자 명령 및 ALU 명령)의 실행을 조정함으로써, 원래 복수의 정규 명령인 FIM 명령을 실행할 수 있다. 다른 예로서, 일부 경우에, 호스트 프로세서(170)로부터 수신된 FIM 명령은 IMC가 통합된 메모리 모듈이 훈련된 머신 런닝 모델(예를 들어, 뉴럴 네트워크(neural network))을 사용하여, 뉴럴 네트워크 훈련 동안 역 전파(backpropagation)를 수행하거나, 또는 2개의 행렬을 곱하기 위해 공급된 입력에 기초하여 추론을 컴퓨팅 하는 것과 같은 특정 컴퓨팅을 수행하게 한다. 이러한 경우에, 메모리 컨트롤러(140)는 수신된 데이터(예를 들어, 명령의 피연산자)를 DRAM 뱅크의 특정 페이지에 저장하고 FIM 명령과 관련된 데이터를 저장하는 DRAM 뱅크에 특정 ALU 동작을 제공함으로써 이들 명령의 실행을 조정할 수 있다. 메모리 컨트롤러(140)는 특정 FIM 명령을 실행할 때 컴퓨팅 성능을 향상시키는 방식으로 수신된 데이터(피연산자)를 DRAM 뱅크의 특정 페이지에 배치할 수 있다. 그 결과는 DRAM 다이(120)에 저장되거나 외부 버스(190)를 통해 호스트 프로세서(170)로 반환될 수 있다.
본 개시의 실시예의 일부 양태는 인-메모리 컴퓨팅(IMC) 모듈을 DRAM 다이(120)의 메모리 뱅크에 통합함으로써 메모리 경계 연산을 가속시키는 것에 관한 것이고, 이에 의해 DRAM 다이(120)와 메모리 컨트롤러(140) 사이의 내부 메모리 버스(130)의 순회(traversal)를 피할 수 있다. 예를 들어, IMC 모듈은 데이터를 보유한 DRAM 뱅크와 동일한 물리적 반도체 다이에 있다. 각각의 DRAM 뱅크는 내부 메모리 버스(130)를 메모리 제어기로 순회하지 않고(예를 들어, 데이터를 DRAM 뱅크로부터 데이터를 전송하지 않고), DRAM 뱅크에 저장된 데이터에 대해 컴퓨팅이 수행될 수 있도록 연관된 IMC 모듈을 가질 수 있고, 상기 컴퓨팅은 DRAM 뱅크의 IMC 모듈에서 병렬화(parallelized across)할 수 있다.
본 개시의 실시예의 양태가 고 대역폭 메모리와 관련하여 설명될 것이지만, 실시예는 이에 한정되지 않으며, 다른 유형의 DRAM 시스템에서 DRAM 다이에 IMC 모듈을 통합하는 데에도 적용될 수 있다.
도 2a는 본 개시의 일 실시예에 따른 임베디드(embedded) 산술 논리 유닛(ALU)을 갖는 메모리 뱅크의 개략적인 블록도이다. 도 2a에 도시된 바와 같이, DRAM 뱅크(200)는 행 및 열(또는 페이지 및 열)로 배열된 DRAM 셀(210)의 어레이를 포함한다. 도 2a에 예시적으로 도시된 바와 같이, DRAM 뱅크(200)는 n개의 행(또는 페이지) 및 m개의 열로 배열된 DRAM 셀(210)을 포함한다. 복수의 비트 라인들(B1 내지 Bm)(bitlines)은 열 방향을 따라 연장되고, 복수의 행 인에이블 라인들(R1 내지 Rn)(row enable lines)은 어레이의 행 방향을 따라 연장되고 비트 라인들을 가로 지른다. 각 비트 라인은 해당 열의 모든 셀에 연결된다(예, 배열의 i 번째 열에 있는 모든 셀은 비트 라인 Bi에 연결됨). 마찬가지로, 각 행 인에이블 라인(R1 내지 Rn)은 대응하는 행의 각 DRAM 셀(210)에 연결된다(예, 어레이의 j 번째 행 또는 페이지의 모든 셀은 행 인에이블 라인(Rj)에 연결됨). DRAM 뱅크(200)의 행의 DRAM 셀(210)은 또한 DRAM 페이지라고 지칭될 수 있다.
도 2b는 본 발명의 일 실시예에 따른 DRAM 셀의 예를 나타내는 회로도이다. 각각의 DRAM 셀(210)은 일반적으로 데이터 전압을 저장하기위한 커패시터(212)(예를 들어, 비트 값, 여기서 각 커패시터는 0 비트를 나타내는 전압 또는 1 비트를 나타내는 전압을 저장할 수 있음) 및 커패시터(212)에 데이터 전압을 전송하기 위한 스위치(214)를 포함하는 것으로 모델링 될 수 있다. 도 2b에 도시된 특정 DRAM 셀(210)은 어레이의 i 번째 행 및 j 번째 열에 있다. 따라서, 도 2b에 도시된 DRAM 셀(210)의 스위치(214)는 i 번째 비트 라인(Bi)과 커패시터(212)의 일 단자 사이에 연결되고, 커패시터(212)의 다른 단자는 접지에 연결된다. 도 2b에 도시된 바와 같이, DRAM 셀(210)의 스위치(214)의 게이트 전극은 j 번째 행 인에이블 라인(Rj)에 연결되어, 스위치(214)가 턴-온 될 때 커패시터(212)가 비트 라인(Bi)에 연결된다.
다시 도 2a를 참조하면, DRAM 뱅크(200)는 행 인에이블 라인들(R1 내지 Rn)에 연결된 행 디코더(220)를 포함하고, 행 디코더(220)는 예를 들어, 메모리 컨트롤러(140)로부터 공급된 행 어드레스에 대응하는 행 인에이블 라인 중 특정된 하나에 행 인에이블 신호를 공급하도록 구성된다. DRAM 셀의 특정 행 r(또는 페이지)에 데이터를 쓰거나 또는 읽을 때, 행 디코더(220)는 특정 행(또는 페이지)에 대응하는 행 인에이블 라인에 행 인에이블 신호를 공급한다. 데이터를 기록할 때, 기록될 데이터에 대응하는 전압이 특정 행(또는 페이지)가 인 에이블되는 동안 비트 라인(B1 내지 Bm)에 공급된다. 유사하게, DRAM 셀(210)의 어레이의 특정 행(또는 페이지)로부터 데이터를 읽을 때, 커패시터들(212)에 저장된 전압들에 대응하는 전압들은 비트 라인들(B1 내지 Bm)을 따라 전송되고 감지 증폭기들(232)을 포함하는 입출력 감지 증폭기 층(230)(또는 IOSA)에 의해 읽혀진다. 감지 증폭기들(232)의 각 감지 증폭기는 비트 라인들 중 대응하는 하나에 연결된다(예를 들어, 감지 증폭기들(232)은 m개의 감지 증폭기를 포함한다). 예를 들어, 일부 실시예에서, DRAM 셀(210)의 어레이는 8,192개의 열 및 8,192개의 대응하는 감지 증폭기들(232)에 연결된 8,192 개의 대응하는 비트 라인(예를 들어, 비트 라인 B1 내지 B8192)을 포함한다(예를 들어, 각 페이지는 8,192 비트 또는 8 Kibit의 데이터를 저장할 수 있다). 감지 증폭기(232)는 "프치 차지(precharge)"명령에 의해 소거될 때까지 현재 행(또는 페이지)으로부터 읽혀진 데이터를 저장하기 때문에 감지 증폭기(232)는 "행 버퍼(row buffer)"라고 지칭될 수 있다.
열 디코더(240)는 멀티플렉서(234)를 사용하여 데이터 열의 일 서브 세트(subset)를 선택하는데 사용될 수 있고, 데이터에 대한 컴퓨팅을 수행하기 위해, 읽혀진 데이터는 글로벌 IO 계층(236)을 통해 인-메모리 컴퓨팅(IMC) 모듈(250)에 공급될 수 있다. 예를 들어, 일부 실시예에서, 열 디코더(240) 및 멀티플렉서(234)는 DRAM 셀들(210)의 8,192 개의 열들로부터 256비트(256b)의 데이터를 선택하는 것을 허용할 수 있다.
감지 증폭기(232)에 현재 저장된 페이지와 다른 DRAM 뱅크(200)의 페이지로부터 데이터를 로딩할 때, "프리 차지(precharge)"(PRE) 명령은 현재 페이지를 닫고 다음 액세스를 위해 DRAM 뱅크(200)를 준비하는데 사용된다. 그 다음 "활성화(activate)"(ACT) 명령을 사용하여 뱅크의 특정 행 또는 페이지를 연 다음 해당 데이터를 감지 증폭기(232)에 저장한다. 그 후, 데이터는 감지 증폭기(232)로부터 읽혀져(READ) IMC 모듈(250)로 전송될 수 있다.
한편, 이미 열린 페이지에서 IMC 모듈(250)로 데이터를 로딩할 때, 예컨대 열 디코더(240)를 사용하여 감지 증폭기(232)에 이미 저장된 데이터의 적절한 서브 세트를 선택함으로써(PRE 및 ACT 명령은 생략될 수 있음), READ 명령으로 데이터를 로드하기에 충분할 수 있다.
멀티플렉서(257 및 258)는 ALU(252)의 2개의 입력에 대한 데이터 흐름을 제어하기 위해 사용될 수 있다(예를 들어, ALU(252)에 대한 제1 피연산자(operand) 및 제2 피연산자로서). 예를 들어, 도 2a에 도시된 실시예에서, 피연산자 레지스터 Rop(254)는 ALU(252)의 제1 피연산자 입력에 연결되고, 제1 멀티플렉서(257)는 감지 증폭기(232)로부터 글로벌 IO 계층(236)을 통하거나, 또는 입력-출력(IO) 모듈(260)(또는, 쓰기 입력/출력 및 읽기 입력/출력, 또는 WIO 및 RIO) 을 통해 외부 소스(예, 호스트 프로세서) 로부터 데이터를 기록하기 위해, 피연산자 레지스터 Rop(254)에 연결된다. 도 2a에 도시된 실시예와 같이, 제2 멀티플렉서(258)는 다시 글로벌 IO 계층(236)을 통해 감지 증폭기(232)로부터 또는 IO 모듈(260)을 통해 외부 소스로부터 ALU(252)의 제2 피연산자 입력에 직접 데이터를 공급하도록 구성된다. ALU(252)는 그 컴퓨팅을 결과 레지스터 Rz(256)에 출력할 수 있고, 데이터는 결과 레지스터 Rz(256)로부터 글로벌 IO 계층(236)을 통해 DRAM 셀(210)로 다시 기록되거나 IO 모듈(260)(또는, WIO 및 RIO)을 통해 호스트 프로세서(170)로 전송될 수 있다.
일부 실시예들에 따르면, ALU(252)는 다양한 컴퓨팅 연산(예를 들어, 간단한 계산 명령)을 실행하도록 구성된다. 예를 들어, ALU(252)는 산술 연산(arithmetic operations), 비트(bitwise), 시프트 연산(shift operations) 등을 실행하도록 구성된 16-비트 ALU, 32-비트 ALU 또는 64-비트 ALU일 수 있다. 다양한 실시예들에서, ALU(252)는 정수 연산(integer operations), 부동 소수점 연산(floating point operations) 또는 둘 모두를 수행하는 회로를 포함할 수 있다. 예를 들어, ALU(252)는 ADD(+), SUBTRACT(-), MULTIPLY(*) 및 DIVIDE(÷)와 같은 산술 연산, AND(&), OR(|), XOR(^) 및 NOT(~), 및 텐서 연산(tensor operations)와 같은 비트 연산을 실행하도록 구성될 수 있다. 또한, 일부 실시예들에서, ALU(252)는 단일 명령, 다중 데이터(SIMD) 또는 데이터 벡터에 대한 연산을 병렬로 수행하기 위한 벡터 명령을 구현할 수 있다. 본 개시의 실시예들에 따른 ALU(252)에 의해 구현된 벡터 연산들의 예들은 내적(), 외적(), 정류 선형 유닛(ReLU), 제곱(vsSqr) 및 제곱근(vsSqrt)을 포함한다. ALU(252)는 원자 및 비원자 연산에 이용될 수 있다. 아래의 [표 1]은 본 개시의 일부 실시예에 따른 ALU(252)에 의해 지원되는 연산을 열거한다.
ID | 연산 | 설명 |
0 | Rop = GIO | Rop에 저장된 열 읽기 데이터(Column read data stored in Rop) |
1 | Rop = WIO | Rop에 저장된 열 쓰기 데이터(Column write data stored in Rop) |
2 | Rop = Rz | ALU 출력 Rz를 Rop에 복사(Copy ALU output Rz to Rop) |
3 | GIO = Rz | 뱅크에 다시 쓰기(Write back into Bank) |
4 | RIO = GIO | DQ 출력으로 정상 읽기(Normal Read to DQ output) |
5 | RIO = Rz | Rz를 DQ 출력으로 드라이브(Drive Rz to DQ output) |
6 | Rz = Rop (op) GIO | Rop 및 뱅크 데이터를 사용한 연산(Operation with Rop and data from bank) |
7 | Rz = Rop (op) WIO | Rop 및 브로드캐스트 데이터를 사용한 연산(Operation with Rop and broadcast data) |
8 | Rz = WIO (op) GIO | 브로드캐스트 데이터 및 뱅크를 사용한 연산(Operation with broadcast data and bank) |
9 | GIO = WIO | DQ 입력으로부터 일반 쓰기(Normal Write from DQ Input) |
도 2c는 위에서 논의했던 DRAM 셀(210)의 어레이, 행 디코더(220), 입출력 감지 증폭기 층(230), IMC 모듈(250), 및 열 디코더(240)를 포함하는 본 발명의 일 실시예에 따른 DRAM 뱅크(200)의 개략도이다.도 3은 본 개시의 일 실시예에 따른 DRAM 블록의 어레이에 대한 개략도이다. 도 3에 도시된 실시예와와 같이, 16개의 DRAM 뱅크(200)는 4×4 어레이로 배열되고, DRAM 뱅크 A 내지 P로 라벨링되고, BG0(DRAM 뱅크 A, B, C 및 D를 포함), BG1(DRAM 뱅크 E, F, G 및 H를 포함), BG2(DRAM 뱅크 I, J, K 및 L을 포함) 및 BG3 (DRAM 뱅크 M, N, O 및 P를 포함)로 라벨링되는 4개의 뱅크 그룹으로 배열된다. 도 2c에서 이와 관련하여 전술한 바와 같이, 도 3에 도시된 각각의 DRAM 뱅크(200)는 DRAM 다이(120) 내에서(예를 들어, 외부 버스를 통과하지 않고) 컴퓨팅을 수행하기 위한 IMC 모듈(250)을 포함할 수 있다. 또한, 도 3에 도시된 바와 같이, DRAM 다이(120)는 외부 소스로부터(예를 들어, DRAM 다이(120)를 다수의 다른 스택형 DRAM 다이(120) 및 메모리 컨트롤러(140)에 연결하는 관통 실리콘 비아 또는 TSV를 통해) 블록의 네 열로 데이터를 다중화 하도록 구성된 멀티플렉서(300) (예를 들어, 4:1 멀티플렉서)를 더 포함한다. 예를 들어, 멀티플렉서(300)는 모든 DRAM 뱅크(200)에 256 비트(256b) 데이터 벡터를 브로드캐스트(broadcast) 하거나 DRAM 뱅크(200)의 특정 열(BG0, BG1, BG2 또는 BG3)에 데이터 벡터를 공급하는데 사용될 수 있다.
인-메모리 컴퓨팅(IMC)을 포함하는 DRAM 다이(120)에 통합된 IMC 모듈(250)과 같은 메모리 시스템(100)은 연산을 수행하기 위해 데이터가 외부 버스(예, 버스(190))의 병목 현상을 통과할 필요가 없기 때문에, 메모리 경계 호스트 연산의 성능을 가속화한다. 다만, IMC는 여전히 ALU 파이프라이닝(pipelining) 및 DRAM 프로세스 형태의 컴퓨팅 오버 헤드와 데이터 배치 및 DRAM 타이밍 형태의 메모리 오버 헤드를 마주칠 수 있다.
따라서, 본 개시의 실시예의 양태는 통합 IMC 모듈(250)에 의해 메모리 내 연산을 수행함에 있어서 DRAM 타이밍 오버 헤드의 영향을 피하거나 감소시키기 위해 DRAM 내에 데이터를 배치하는 시스템 및 방법에 관한 것이다. 본 개시의 실시예의 일부 양태는 개선된 성능을 달성하기위한 소프트웨어 및 하드웨어 공동 설계에 관한 것이다.
다양한 실시예에서, 메모리 컨트롤러(140)는 DRAM 다이(120)로 및 DRAM 다이(120)로부터 연산을 제공하고 데이터의 입력 및 출력을 관리한다. 따라서, 본 개시의 실시예의 일부 양태는 호스트 프로세서(170)에 의해 메모리 시스템(100)의 메모리 컨트롤러(140)에 제공된 명령에 따라 DRAM 다이(120) 내에 데이터를 배치하도록 구성된 메모리 컨트롤러(140)에 관한 것이다. 예를 들어, 본 개시의 실시예의 일부 양태는 인-메모리 컴퓨팅 및 API를 사용하여 프로그램의 소스 코드를 컴파일하거나 해석할 때, API 호출에 따라 데이터를 배치하기 위해 메모리 컨트롤러(140)를 제어하기위한 명령을 생성하도록 구성된 컴파일러(예, 데이터 컴파일러)를 포함하는 HBM과 상호 작용하는 애플리케이션 프로그래밍 인터페이스(API)를 제공하는 것에 관한 것이다. 예를 들어, API는 GEMM(General Matrix-Matrix Multiplication)을 수행하기위한 함수 호출(function call)을 제공할 수 있고, 컴파일러는 데이터에 대해 수행될 연산(예를 들어, 내적, 외적, 행렬 곱셈 등)을 포함하는 요소 및 데이터의 크기(예, 데이터가 메모리 페이지에 맞는지 여부)에 기초한 데이터의 나이브한(nave) 배치에 비해 성능을 향상시키는 방식으로 피연산자 행렬을 나타내는 데이터를 DRAM 다이(120)에 배치하기 위해 메모리 컨트롤러(140)를 제어하기 위한 명령 시퀀스(sequences)를 생성할 수 있다. API를 통해 IMC에서 DRAM을 사용하도록 소프트웨어를 작성할 때, 본 개시의 일부 실시예에 따른 컴파일러 또는 데이터 컴파일러는 DRAM 다이(120)의 특정 위치에 데이터를 배치하기 위해, DRAM 다이(120)의 컴퓨팅을 수행하기 위한 IMC 모듈을 제어하기 위해, 결과를 저장하기 위해, 소프트웨어의 소스 코드 중 적어도 일부를 메모리 컨트롤러(140)에 의해 실행되는 명령으로 변환할 수 있다.
논의를 위해, 일 실시예에 따르면, 16-레인(lane) ALU는 반 정밀도(half-precision) 부동 소수점(floating-point) (FP-16) 컴퓨팅의 8 GFLOPS(초당 기가 부동 소수점 연산)의 피크 성능을 달성할 수 있다. (본 개시의 실시예에 따른 IMC 모듈의 성능이 FLOPS와 관련하여 여기에서 설명되지만, 본 개시의 실시예는 부동 소수점 연산을 수행하는 것으로 제한되지 않으며, 다양한 데이터 레이아웃의 상대적인 성능은 예를 들어, 정수 연산을 수행할 때와 유사할 수 있다.) 따라서, 2세대 고 대역폭 메모리 표준(HBM2)을 사용하여 4개의 다이(4H 또는 4-Hi)의 스택을 사용하여 본 개시의 일 실시예에 따른 인-메모리 컴퓨팅(IMC)의 구현은 FP-16 컴퓨팅(다이 당 256개의 뱅크와 4개의 다이 스택= 1,024개의 뱅크, 각 뱅크는 해당 16 레인 ALU를 가짐)의 8개의 TFLOPS(초당 부동 소수점 연산)을 달성할 수 있다.
TFLOPS에서 측정된 피크 컴퓨팅 성능은 상이한 데이터 레이아웃 시나리오에 따라 달라질 수 있다. 첫번째 경우(2OP로 표시함), 메모리 모듈(110) 외부로부터의 2개의 피연산자가 인-메모리 컴퓨팅 ALU에 완벽하게 공급되고, 그 결과는 버퍼링되고(buffered) 완벽하게 누적되며, 이에 따라 상기 논의된 8 TFLOPS 피크 컴퓨팅 성능이 얻어질 수 있다.
두번째 경우(1OP로 표시함), 제1 피연산자는 HMB 외부에서 IMC로 완벽하게 공급되는 반면, 제2 피연산자는 DRAM 다이(120)의 임의의 위치로부터 읽혀진다. 이는 약 6.5 TFLOPS의 피크 컴퓨팅 성능을 감소시킨다.
세번째 경우(DR로 표시함), 두 피연산자들은 DRAM의 다른 페이지에 위치하고 결과는 DRAM에 다시 기록된다. 이 시나리오에서, 약 0.8 TFLOPS의 측정된 컴퓨팅 성능(예를 들어, 2OP 경우보다 느린 크기).
네번째 경우(SR로 표시함)에서, 두 피연산자들은 DRAM 블록의 동일한 행 또는 페이지에 위치한다. 이는 DR 경우보다 약 3.3 TFLOPS로 성능이 크게 향상된다.
따라서, 데이터를 고려한 것에 기초하여 다양한 데이터 레이아웃 트레이드 오프가 이루어질 수 있다. 예를 들어, 1OP 경우에 제1 피연산자가 DRAM에 있고, 제2 피연산자가 HBM 외부에서 브로드캐스트 되는 경우, 성능이 높지만(위에서 언급한 것처럼 약 6.5TFLOPS), 호스트 프로세서(170)에 오버 헤드가 발생하고, 제2 피연산자를 HBM에 제공해야 한다.
도 4a는 제1 피연산자(행렬 A)가 DRAM에 저장되고, 제2 피연산자(행렬 B)가 내장된 메모리 모듈 외부로부터 브로드캐스트 되는 경우, GEMM(General Matrix-Matrix Multiplication)에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 인-메모리 컴퓨팅(IMC)과 함께 개략적으로 도시한다. 예시를 위해, DRAM 뱅크(200-O)가 보다 상세하게 도시되어 있다. 도 4a에 도시된 바와 같이, 제1 피연산자 행렬 A와 관련된 데이터는 DRAM 뱅크(200-O)의 하나의 페이지(401)(예를 들어, 제1 행 또는 제1 페이지)에 배치되고, 제2 피연산자 행렬 B와 관련된 데이터는 DRAM 다이(120) 외부로부터(예를 들어, 멀티플렉서(300)를 통해) 브로드캐스트 된다. 컴퓨팅 결과 C는 DRAM 뱅크(200-O)의 다른 페이지(402)에 배치될 수 있다.
두 피연산자가 모두 DRAM에있을 때, 두 피연산자를 동일한 페이지 또는 동일한 행(SR)에 배치하는 것은, 아래에 자세히 설명된 것과 같이, 수행해야하는 PRE 및 ACT 조작 수를 부분적으로 줄임으로써, 컴퓨팅 성능을 향상시키나(예를 들어, 약 3.3 TFLOPS), 다만 DRAM의 올바른 부분에 데이터를 배치하는 것과 관련하여 더 많은 제약을 부과한다.
도 4b는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 동일한 페이지에 저장된 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다. 예시를 위해, DRAM 뱅크(200-O)가 보다 상세하게 도시되어 있다. 도 4b에 도시된 바와 같이, 제1 피연산자 행렬 A 및 제2 피연산자 행렬 B와 관련된 데이터는 DRAM 뱅크(200-O)의 페이지(411) (예를 들어, 제1 행 또는 제1 페이지)에 배치된다. 보다 상세하게, 페이지(411)의 전반부는 제1 피연산자 행렬 A로부터의 데이터로 채워지고, 페이지(411)의 후반부는 제2 피연산자 행렬 B로부터의 데이터로 채워진다. 행렬 A 및 행렬 B가 도 4a과 관련하여 전술한 것과 동일한 크기라고 가정하면, 나머지 데이터를 저장하기 위한 추가 페이지가 필요할 수 있다. 이와 같이, 제1 피연산자 행렬 A 및 제2 피연산자 행렬 B 모두와 관련된 데이터도 페이지(412) 배치된다. 행렬 곱셈의 결과 C는 DRAM 뱅크(200)의 페이지(413)에 저장될 수 있다.
반면에, 피연산자를 상이한 페이지에 배치하는 것은 보다 유연하고 레이아웃에 대한 제약을 감소시키지만(예를 들어, 고정된 크기의 메모리 페이지에 깔끔하게 맞지 않는 크기를 갖는 데이터에 적합할 수 있음), 일반적으로 컴퓨팅 성능이 저하될 수 있다.
도 4c는 두 피연산자(행렬 A 및 행렬 B)가 메모리 모듈의 DRAM의 상이한 페이지에 저장되는 경우, GEMM에 대한 데이터의 배치를 본 개시의 일 실시예에 따른 통합된 IMC와 함께 개략적으로 도시한다. 예시를 위해, DRAM 뱅크(200-O)가 보다 상세하게 도시되어 있다. 도 4c에 도시된 바와 같이, 제1 피연산자 행렬 A와 연관된 데이터는 페이지(421)에 배치되고, 제2 피연산자 행렬 B와 관련된 데이터는 페이지(422)에 배치되고, 결과 C는 페이지(423)에 배치된다.
위의 도 4a, 도 4b 및 도 4c에서 논의된 상이한 데이터 배치 전략(1OP, SR 및 DR)의 다양한 성능 영향은 아래의 도 5a, 도 5b, 도 6a, 도 6b, 도 7a 및 도 7b를 참조하여 더 상세하게 설명된다. 예를 들어, 도 5a에 도시된 바와 같이, 행렬 A는 M 바이(by) K 행렬이고, 행렬 B는 K 바이(by) N 행렬이므로, 행렬 A와 행렬 B의 곱인 행렬 C의 크기는 M 바이(by) N이다. 설명을 위해, 이하의 예는 K=5인 경우를 설명하지만, 본 개시의 실시예는 이에 제한되지 않는다. 표준 행렬 곱셈에 따라, 결과 행렬 C의 왼쪽 위의 값 C00은 행렬 A(각 위치 Aij는, 예컨대, 16개의 반-정밀도(half-precision) 부동 소수점 값의 벡터(vector) 또는 "타일(tile)"을 수평 순서로 나타내고, 도 5a, 도 5b, 도 6a, 도 6b, 도 7a 및 도 7b는 A00, A01, A02, A03 및 A04를 나타냄)의 첫 번째 행에 행렬 B (각 위치 Bij는, 예컨대, 16개의 반-정밀도 부동 소수점 값의 벡터 또는 "타일"을 수직 순서로 나타냄)의 첫 번째 열을 쌍으로 곱하여 컴퓨팅 된다. 다시 말해, C00는 A00·B00 + A01·B10 + A02·B20 + A03·B30 + A04·B40을 저장한다. 도 5a, 도 5b, 도 6a, 도 6b, 도 7a 및 도 7b에서, 음영(shading)은 함께 곱해지는 피연산자를 식별하기 위해 사용된다. 보다 상세하게는, 동일한 패턴을 사용하여 음영 처리된 2개의 피연산자가 도시된 컴퓨팅의 일부로서 함께 곱해진다. 본 개시의 실시예의 양태는 부동 소수점 피연산자에 대해 부동 소수점 연산을 수행하도록 구성된 IMC와 관련하여 설명되지만, 본 개시의 실시예는 이에 한정되지 않으며, 예를 들어, 정수 피연산자에 대한 정수 연산을 수행하도록 구성된 IMC에 적용될 수도 있다.
도 5a는 제1 피연산자(1OP) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다. 여기서 본 개시의 일 실시예에 따라 하나의 피연산자가 외부로부터 공급되고 하나의 피연산자가 인-메모리 컴퓨팅으로 DRAM 뱅크에 저장된다. 도 5a에 도시된 바와 같이, 행렬 A의 첫번째 행의 타일 A00, A01, A02, A03 및 A04는 DRAM 뱅크(200)의 동일한 페이지(401)(행)에 저장되고, 행렬 B의 벡터 또는 타일 B00, B10, B20, B30 및 B40은 외부로부터 공급되고, 결과(예를 들어, C00)는 DRAM 뱅크(200)의 다른 페이지(402)에 저장된다.
곱셈을 컴퓨팅하는 프로세스는 DRAM 뱅크(200)로부터 값 A00을 읽음으로써 A00·B00을 계산함으로써 시작될 수 있다. 이는 페이지(401)를 열것이고, 따라서 감지 증폭기(232)를 준비하기 위해 프리 차지(PRE) 명령이 필요할 것이고, 페이지(401)를 감지 증폭기(232)에 로드하기 위한 활성화(ACT) 명령 및 감지 증폭기(232)로부터 IMC 모듈(250)로 A00의 값을 로드하기 위한 읽기(READ) 명령이 뒤 따를 것이다. 위에서 언급했듯이 B00은 외부에서 입력으로 제공되므로 이 값을 검색하는 데 DRAM 연산이 필요하지 않는다. ALU(252)는 그 후 곱셈 A00·B00을 컴퓨팅하고 출력 버퍼(예를 들어, 출력 레지스터 Rz)에 임시 결과를 저장할 수 있다.
그 다음, ALU(252)는 DRAM으로부터 A01을 읽음으로써 곱셈 A01·B10을 컴퓨팅 한다. 이는 또한 PRE 명령, ACT 명령 및 READ 명령이 필요하다. 벡터 또는 타일 B10은 입력이 외부로부터 제공되므로, A01·B10은 A00·B00을 저장하는 버퍼(예를 들어, 출력 레지스터 Rz)의 임시 결과에 컴퓨팅되어 추가될 수 있다. 이 프로세스는 행렬 A 및 행렬 B의 나머지 값에 대해 반복될 수 있다. 결과적으로, 각각의 컴퓨팅(예를 들어, 타일 A00 및 B00과 같은 2개의 피연산자의 곱)은 컴퓨팅마다 하나의 PRE, 하나의 ACT 및 하나의 READ를 필요로 한다. 도 8과 관련하여 아래에서 더 상세히 논의되는 바와 같이. 일부 실시예에서, IMC는 값을 저장하고, 이전에 저장된 값과 새로 수신된 값의 합으로 저장된 값을 업데이트 하도록 구성된 누산기(accumulator)를 더 포함한다.
도 5b는 1OP 데이터 레이아웃에서 행렬 A의 첫번째 행의 행렬의 첫번째 값과 행렬 B의 각 열의 첫번째 값의 곱을 데이터 재사용과 함께 나타낸 개략도이다. 여기서 본 명세서의 일 실시예에 따라 하나의 피연산자가 외부로부터 공급되고 하나의 피연산자가 인-메모리 컴퓨팅으로 DRAM 뱅크에 저장된다. 도 5b는 도 5a에 도시 된 것과 상이한데, DRAM으로부터 로드된 데이터는 행렬 B의 상이한 열에 대해 재사용 (예컨대, 피연산자 레지스터 Rop (254)에 저장됨)된다. 특히, 2개의 행렬을 곱할 때, 행렬 A의 모든 행의 j 번째 요소는 행렬 B의 j 번째 행의 모든 요소와 곱해진다. 따라서, 행렬 A의 각 요소를 한번 로딩하고 그것을 행렬의 모든 N 열에 곱함으로써 DRAM 뱅크(200)로부터의 데이터 로딩 코스트(cost)는 N 열에 걸쳐 상각(amortized)된다. 보다 상세하게, 행렬 A와 행렬 B를 곱할 때, 이전과 같이, 타일 A00은 PRE 명령, ACT 명령 및 READ 명령을 사용하여 DRAM 뱅크(200)로부터 읽혀질 수 있고, 타일 B00은 입력이 외부로부터 수신될 수 있다. ALU(252)는 C00에 대한 합의 일부를 컴퓨팅하기 위해 A00·B00을 컴퓨팅한다. 그러나 DRAM에서 타일 A01을 로드하는 대신(예, 다른 PRE, ACT 및 READ 시퀀스 사용), C01에 대해 컴퓨팅할 곱셈 중 하나인 A00·B01을 컴퓨팅하기 위해 타일 A00을 다시 사용하고 (외부에서 수신된)B01을 곱할 수 있다. 결과적으로, 각 컴퓨팅에는 1/N PRE, 1/N ACT 및 컴퓨팅 당 하나의 READ가 필요하다(행렬 A의 다른 부분을 로드하기위한 PRE 및 ACT 명령이 행렬 B의 N 열에 대해 상각될 수 있기 때문에).
도 6a는 동일한 행(SR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다. 여기서 두 피연산자들은 본 개시의 일 실시예에 따라 인-메모리 컴퓨팅을 갖는 DRAM 뱅크의 동일한 페이지에 저장된다. 도 6a에 도시 된 바와 같이, 행렬 A의 첫번째 행의 타일 A00, A01 및 A02, 및 행렬 B의 첫번째 행의 타일 B00, B10 및 B20은 DRAM 뱅크(200)의 동일한 페이지(411)에 저장되고, 행렬 A의 타일 A03 및 A04, 및 행렬 B의 타일 B30 및 B40은 DRAM 뱅크(200)의 페이지(412)에 저장된다. 그 결과(예를 들어, C00)는 DRAM 뱅크(200)의 페이지(413)에 저장된다.
결과를 컴퓨팅하는 프로세스(예를 들어, 내적)는 DRAM 뱅크(200)로부터 타일 A00을 읽고, A00·B00을 컴퓨팅함으로써 시작할 수 있다. 이는 페이지(411)를 여는 것을 포함하고, 따라서 프리 차지(PRE) 명령이 필요하고, 그 뒤에 활성화(ACT) 명령 및 감지 증폭기(232)로부터 IMC 모듈(250)로 타일 (A00)을 로딩하기 위한 읽기(READ) 명령이 따른다. 타일(B00)은 DRAM으로부터 읽혀질 수 있다. 그러나, 타일 B00이 A00과 동일한 페이지(411)에 있기 때문에, 그 값은 이미 감지 증폭기(232)에 저장되어 있으므로, READ 명령으로 충분하다(타일 B00을 IMC 모듈(250)로 읽기 위해 PRE 및 ACT를 더 수행할 필요는 없다). 따라서, ALU (252)는 타일 A00 및 B00이 읽혀지면 A00·B00을 컴퓨팅하고, 임시 결과는 버퍼에 저장될 수 있다. 마찬가지로, 타일(A01) 및 타일(B10)은 모두 페이지(411)에도 있고 따라서 페이지(411)가 A00을 읽기 위해 처음 열렸을 때 감지 증폭기(232)에 미리 저장되어 있기 때문에, PRE와 ACT없이, A01·B10을 컴퓨팅하기 위해 타일 A01및B10을 읽는 것도 마찬가지로 READ 명령을 사용하여 수행할 수 있다. 따라서, 각각의 컴퓨팅은 컴퓨팅마다 1/r PRE, 1/r ACT 및 2 READ 연산을 취하는데, 여기서 r은 DRAM 뱅크(200)의 동일한 페이지에 저장된 일치하는 값 쌍의 수이다. 예를 들어, 위에서 언급한 바와 같이, 도 6a는 행렬 A의 첫번째 행의 타일 A00, A01 및 A02와 행렬 B의 첫번째 행의 타일 B00, B10 및 B20이 DRAM 뱅크의 페이지(411)에 저장된 경우를 도시한다. 따라서, 컴퓨팅 A00·B00, A01·B10 및 A02·B20은 페이지(411)에 3쌍의 타일 (예, r=3)이 포함되어 있기 때문에, 각각 1/3 PRE, 1/3 ACT 및 2 READ 명령을 (상각)한다. A03·B30 및 A04·B40을 계산할 때, 페이지(412)에 2쌍의 값(예, r=2)이 포함되어 있기 때문에, 이러한 컴퓨팅은 각각 1/3 PRE, 1/3 ACT 및 2 READ 명령을 각각 (상각)한다. 컴퓨팅 당 필요한 PRE 및 ACT 명령 수가 줄어듦으로써 전체 컴퓨팅 성능이 향상된다.
도 6b는 SR 데이터 레이아웃에서 행렬 A의 첫번째 행의 첫번째 값과 행렬 B의 각 열의 첫번째 값에 대한 데이터 재사용을 통해 곱한 개략도이다. 여기서 두 피연산자들은 본 개시의 일실시예에 따라 인-메모리 컴퓨팅을 갖는 DRAM 뱅크의 동일한 페이지에 저장된다. 도 5a 및 도 5b의 배열 사이의 비교와 유사한 방식으로, 도 6b에 도시된 컴퓨팅 과정은, DRAM으로부터 로드된 값이 재사용된다는 점에서 도 6a에 도시된 것과 상이하다. 보다 상세하게, 행렬 곱셈은 제1 피연산자의 주어진 행의 i 번째 요소와 제2 피연산자의 각 열의 i 번째 요소를 곱하는 것을 포함한다는 것에 기초하여, 행렬 A 및 행렬 B의 요소는 주어진 행렬 A의 행의 각 요소에 대한 데이터가 곱해질 행렬 B의 행의 값과 동일한 페이지에 배치되도록 DRAM 뱅크 (200)에 배열된다.
예를 들어, 도 6b에 도시된 바와 같이, 행렬 A와 행렬 B를 곱하면, 행렬 A의 타일 A00은 결과 행렬 C의 첫번째 행의 일부(예, C00, C01, C02, C03, C04, C05 등의 용어 중 하나)를 계산하는 과정에서 행렬 B의 모든 열의 첫번째 타일(행렬 B의 첫번째 행의 모든 요소, 예, B00, B01, B02, B03, B04, B05, ...)에 곱해진다. 마찬가지로, 행렬 A의 값 A01에 행렬 B의 모든 열의 두번째 타일이 곱해진다(도 6b에 도시된 바와 같이, 행렬 B의 첫번째 행의 모든 요소, 예를 들어, B10, B11, B12, B13, B14, B15, ...).
이와 같이, 행렬 A의 적어도 하나의 값은 행렬 B의 대응하는 값과 동일한 페이지에 저장된다. 도 6b에 도시된 특정 예에서, 페이지(411)는 행렬 A로부터 타일 A00, 행렬 B로부터 타일 B00, B01, B02, B03, B04, B05, ...을 저장하고, 페이지(412)는 행렬 A로부터 타일 A01, 행렬 B로부터 타일 B10, B11, B12, B13, B14, B15, ...을 저장한다. DRAM 내의 데이터의 이러한 배열로 인해, DRAM의 페이지가 적어도 N+1 엔트리를 저장할 수 있다고 가정하면, 각 컴퓨팅은 1/N PRE 명령, 1/N ACT 명령 및 (N+1)/N READ 명령(PRE 및 ACT 명령은 행렬 B의 N열에 대해 상각될 수 있기 때문에)을 수행할 것이다.
도 7a는 상이한 행(DR) 데이터 레이아웃에서 행렬 A의 첫번째 행과 행렬 B의 첫번째 열을 곱한 개략도이다. 여기서 피연산자들은 본 개시의 일 실시예에 따라 인-메모리 컴퓨팅으로 DRAM 뱅크의 상이한 페이지에 저장된다. 도 7a에 도시 된 바와 같이, 행렬 A의 첫번째 행의 타일 A00, A01, A02, A03 및 A04는 페이지(421)에 저장되고, 반면 행렬 B의 첫번째 열의 타일 B00, B10, B20, B30 및 B40은 다른 페이지(422)에 저장된다.
타일 B00이 타일 A00과 다른 페이지(422)(행)에 있기 때문에, C00을 계산하는 프로세스는 PRE, ACT 및 READ 명령 시퀀스를 사용하여 타일 B00을 읽은 다음, PRE, ACT 및 READ 명령 시퀀스를 사용하여 DRAM 뱅크(200)의 페이지(421)(행)으로부터 A00을 읽음으로써 A00·B00을 계산하는 것으로 시작할 수 있다. ALU(452)는 A00·B00을 계산하고 그 결과를 임시 버퍼에 저장할 수 있다. C00 컴퓨팅을 계속하기 위해, 타일 A01은 페이지(421)(행)로부터 판독될 수 있고, 페이지(421)(행)로부터 B10이 읽혀질 수 있으며, 여기서 각각의 값은 DRAM 뱅크(200)에 대해 PRE, ACT 및 READ 시퀀스를 수행하는 것을 포함한다.
도 7b는 DR 데이터 레이아웃에서 행렬 B의 각 열의 첫번째 값과 행렬 A의 첫번째 행의 두번째 값에 의해, 행렬 B의 각 열의 두번째 값에 의한 행렬 A의 첫번째 행의 첫번째 값의 데이터 재사용을 통한 곱셈의 개략도이다. 여기서 피연산자들은 본 개시의 일 실시예에 따라 인-메모리 컴퓨팅으로 DRAM 뱅크의 상이한 페이지에 저장된다.
도 5b에서 전술한 것 및 1OP 데이터 재사용과 유사한 방식으로, 행렬 B로 곱셈을 수행할 때 행렬 A에서 검색된 데이터를 재사용하는 것은 메모리 연산 수가 줄어든다. 전술한 도 7a에서 논의된 바와 같이, 주어진 행렬 A의 행의 각각의 i 번째 값은 행렬 B의 i 번째 행의 각 값과 곱해진다. 따라서, 주어진 행렬 B의 행의 모든 값이 DRAM 뱅크(200)의 동일한 페이지에 저장되면, PRE 및 ACT 명령의 수가 감소될 수 있고, 이에 의해 성능이 향상된다.
예를 들어, 행렬 A에 행렬 B를 곱하는 프로세스는 N 부분 합계 (예, C00, C01, C02, ..., C0N의 일부)를 컴퓨팅하기 위해, 행렬 A의 타일 A00을 행렬 B의 첫번째 행에서 N 개의 타일(B00, B01, B02, ..., B0N)을 곱하는 것으로 시작할 수 있다. 이 프로세스는 DRAM 뱅크(200)로부터 타일 A00을 로딩함으로써 시작될 수 있는데, 여기에 페이지(421)(행)을 열고, 행렬 A의 타일 A00을 피연산자 레지스터 Rop(254)로 로딩하기 위해, PRE 명령, ACT 명령 및 READ 명령이 포함될 수 있다. A00을 로딩한 후, 행렬 B의 첫번째 행의 타일 B00, B01, B02, ..., B0N은 타일 A00에 곱해지도록 로딩될 수 있다. 도 7a에 도시된 바와 같이, 행렬 B의 이들 값이 모두 동일한 페이지에 있을 때(예를 들어, B00, B01, B02, B03, B04, ...는 도 7b에 도시 된 DRAM 뱅크 (200)의 422 페이지에 있음), 이 페이지를 액세스하는 데 사용된 PRE 및 ACT 명령이 해당 페이지에 저장된 N 값에서 상각될 수 있다. 따라서 행렬 A의 한 값에 행렬 B의 한 행에 있는 모든 값을 곱하려면, 2 개의 PRE 명령, 2 개의 ACT 명령 및 N+1 READ 명령이 필요하고, 행의 N값을 상각하면, 계산 당 2/N PRE 명령, 2/N ACT 명령 및 (N + 1)/N READ 명령이 생성된다. 전술한 예와 유사한 방식으로, DRAM 명령의 수의 감소는 전체 계산 성능(예를 들어, 행렬 곱셈 연산)을 향상시킨다.
상기 논의된 데이터 배치 옵션은 사이클-레벨(cycle-level) 고 대역폭 메모리-기능 메모리(HBM-FIM) 시뮬레이터를 사용하여 실험적으로 테스트되었으며, 이는 GEMM(General Matrix-Matrix Multiplication) 기록과 함께 인-메모리 컴퓨팅(IMC)에 맞게 사용자 정의되었다. 실험 아키텍처에는 4개의 HBM2 모듈 4개가 포함된 HBM이 포함되었고, 여기서 DRAM의 어레이 크기는 16,384(16Kib) 행 바이(by) 8,192(8Kib) 열(예, 각 페이지의 크기는 8,192b)이고, 행 버퍼의 크기는 8,192 비트(8Kib)이다. IMC 모듈에는 대기 시간주기가 768 비트 버퍼인 16 레인 FP-16 벡터 장치가 포함되어 있으며 파이프 라인 작동이 가능했다. 다양한 실시예에서, 버퍼는 더 작거나(예를 들어, 256 비트 입력 버퍼 및 256 출력 버퍼를 포함하는 512 비트) 또는 더 클 수 있다(예를 들어, 256 비트 입력 버퍼 및 1,024 비트 출력 버퍼를 갖는 1,280 비트 버퍼). 일부 실시예에서, 입력 버퍼는 256 비트 (예를 들어, 512 비트)보다 크다.
본 개시의 실시예의 일부 양태는 DRAM 뱅크(200)의 레벨(예를 들어, DRAM 뱅크에서 뱅크마다 제공되는 추가 하드웨어)에서 추가 버퍼 및 누산기를 포함하는 것에 관한 것이다.
도 8은 DRAM 뱅크의 인-메모리 컴퓨팅(IMC) 모듈의 개략적인 블록도이다. 여기서 IMC 모듈은 본 개시의 일 실시예에 따른 결과 버퍼, 누산기 및 버퍼에 더 연결된다.
도 8에 도시된 바와 같이, ALU(252)는 입력 피연산자 A (도 8에서 256 비트 피연산자 A[0:255]로 표시됨) 및 입력 피연산자 B(256 비트 피연산자 B[0:255]로 표시됨)를 수신할 수 있다. ALU는 2개의 입력 피연산자(예를 들어, 덧셈, 곱하기, 내적, 외적 등)에 대한 연산을 수행하고, 결과 C(도 8에서 256 비트 결과 C[0:255]로 표시됨)를 컴퓨팅 한다.
도 8을 참조하면, IMC 모듈(250)은 ALU(252)의 출력에 연결된 누산기(802)를 더 포함할 수 있다. 예를 들어, ALU(252)의 출력은 결과 레지스터(Rz)(256)와 누산기(802)에 연결되어 결과 C가 결과 레지스터(Rz)(256)에 저장되고 누산기(802)에 공급될 수 있다. 누산기(802)는 누산된 값(예를 들어, 256 비트 값)을 저장하는 누산기 레지스터를 포함한다. 누산기(802)가 ALU(252)로부터 새로운 결과를 수신하면, 새로운 결과는 누산기 레지스터에 이미 저장된 누적 값에 추가(예를 들어, 누산)된다(예를 들어, 누산기(802)의 누산기 레지스터에 저장된 값이 업데이트 되거나, 또는 새로운 결과와 누산기(802)에 이전에 저장된 값의 합으로 설정된다). 일부 실시예에서, 누산기(802)는 리셋 명령에 응답하여 누산기 레지스터를 리셋하도록(예를 들어, 누산기 레지스터에 저장된 누적 값을 0으로 설정하도록) 구성될 수 있다. 누산기(802)는 행렬 곱셈을 컴퓨팅할 때와 같이(예를 들어, 결과 행렬의 각 값이 제1 피연산자의 행과 제2 피연산자의 열의 내적인 경우) 내적(inner products 또는 dot products)을 컴퓨팅할 때 특히 도움될 수 있다. 도 8에 도시된 실시예에서, IMC 모듈(250)은 제1 512 비트 버퍼(812) 및 제2 512 비트 버퍼(814)로서 도시된 1,024 비트 출력 버퍼를 더 포함한다. 다수의 결과 값을 저장할 수 있는 더 큰 출력 버퍼는 메모리 컨트롤러(140)가 DRAM 뱅크의 다른 페이지를 열어서 그 결과를 저장하기 전에 한 번에 다수의 결과를 계산하도록 DRAM 뱅크를 제어할 수 있게 한다. 예를 들어, 도 6b에 도시된 바와 같이 SR 데이터 레이아웃에서 데이터 재사용의 경우, 결과를 저장하기 위해 페이지를 열려면 추가 PRE 및 ACT 명령이 필요할 수 있는 피연산자(예, 도 6a 및 도 6b에 도시된 페이지(411))를 저장하는 페이지와는 다른 DRAM 뱅크(200)의 다른 페이지(예를 들어, 도 6a 및 도 6b에 도시된 페이지(413))에 기록된 부분 합을 컴퓨팅하기 위해, 제1 피연산자 행렬 A의 한 행의 값에 제2 피연산자 행렬 B의 행과 다른 대응하는 값을 곱한다. 그러나, 출력 버퍼가 클수록 연산을 완료하는데 필요한 페이지 전환 양이 줄어들고(각 페이지 전환에 PRE 및 ACT가 필요하기 때문에), 이에 컴퓨팅 성능이 향상된다. 도 8은 누산기(802) 및 더 큰 출력 버퍼(812 및 814)를 모두 갖는 IMC 모듈(250)을 도시하는 반면, 본 발명의 실시예는 이에 한정되지 않고, IMC 모듈(250)이 추가 출력 버퍼(812 및 814)없이 누산기(802)를 포함하는 실시예를 포함할 수 있고, IMC 모듈(250)이 누산기(802) 없이 추가 출력 버퍼(812 및 814)를 포함하는 실시예를 포함할 수 있다. 본 개시의 일부 실시예에서, IMC 모듈(250)은 (예를 들어, 다수의 값들이 동시에 누적될 수 있도록) 병렬로 배열된 다수의 누산기들(802)을 포함할 수 있다. 본 개시의 실시예들은 또한 2개의 512 비트 출력 버퍼(812 및 814)를 갖는 경우에 제한되지 않고, 512 비트보다 크거나 작은 및/또는 2이상의 출력 버퍼 또는 2개의 출력 버퍼보다 작은 버퍼를 포함할 수 있다. IMC 모듈(250)의 다양한 부분은 상이한 양의 레이턴시를 가질 수 있다. 예를 들어, 곱셈 연산을 수행하는 ALU(252)가 4 사이클 레이턴시를 도입할 수 있고, 누산 연산(accumulation operation)은 1 사이클 레이턴시를 포함할 수 있다.
본 개시의 실시예들의 양태들은 GEMM을 구현하는 맥락에서 아래에서 더 상세히 설명될 것이다.
도 9는 본 개시의 일부 실시예에 따른 동일한 행(SR) 레이아웃을 사용한 컴퓨팅을 설명하기위한 GEMM(General Matrix-Matrix Multiplication)의 일 예에 대한 개략도이다. 보다 구체적으로, 도 9는 행렬 A와 행렬 B의 곱을 도시하고, 행렬 A와 행렬 B의 곱을 누산기(802)에 현재 저장된 값에 추가함으로써 누산기(예를 들어, 누산기 (802))에 저장된 결과 C를 업데이트하는 것을 도시한다(결과 C + =행렬 A×행렬 B). 도 9에 도시된 컴퓨팅에서, 행렬 A의 16개의 타일 및 행렬 B의 16개의 타일이 함께 곱해지고, 여기서 각 타일은 16개의 FP-16 요소(256 비트)를 갖는다. 특정 내부 타일 구성 레이아웃은 아래에서 더 자세히 설명하지만 GEMM의 전체적인 복잡성(complexity)은 다른 레이아웃에서 동일하게 유지된다. 도 9에 도시된 바와 같이, 유사한 패턴으로 음영 처리된 타일은 함께 곱해진 타일이다. 위에서 언급한 바와 같이, 도 9는 동일한 행(SR) 데이터 레이아웃을 도시하는데, 여기서 행렬 A 및 행렬 B의 32개의 모든 값은 DRAM 뱅크(200)의 동일한 페이지(414)에 저장되어 각 컴퓨팅의 피연산자(예를 들어, 타일 A00 및 타일 B00, B01, B02 및 B03)은 모두 같은 페이지(414)에 저장된다. 개별 컴퓨팅의 결과는 결과 레지스터 Rz(256)에 누적되어 결과 C를 컴퓨팅할 수 있다.
타일-레벨(tile-level) 곱셈의 하나의 특정 예로서, DRAM 뱅크(200)의 동일한 페이지로부터 로딩된 2개의 타일(A00 및 B00)의 내적(inner products 또는 dot products)을 계산할 때, 타일 A00은 행렬 B의 점선 타일 B00일 수 있다. 일부 실시예에서, 위에서 논의된 바와 같이, 각각의 타일은 16개의 FP-16 요소를 포함한다. 예를 들어, 타일 A00은 요소 a00, a01, ..., a15를 포함할 수 있고, 타일 B00은 요소 b00, b01, ..., b15를 포함할 수 있으며, 타일 A00 및 B00의 내적은 곱 쌍의 합(=a00*b00+a01*b01+...+a15*b15)이다. 따라서 두 타일의 내적(inner products 또는 dot products)은 단일 요소 또는 단일 값을 생성하고, 따라서 본 개시의 실시예에 따른 인-메모리 컴퓨팅(IMC) 모듈은 결과를 저장하기 위해 더 적은 버퍼 레지스터(예를 들어, 누산기 레지스터(802))와 함께 내적을 컴퓨팅할 수 있다. 따라서, 누산기 레지스터를 포함하는 본 개시의 일부 실시예에 따른 IMC 모듈은 내적을 컴퓨팅하는 것과 같이 값의 누산을 포함하는 컴퓨팅을 수행하는데 매우 적합할 수 있다. 일부 실시예에서, 내적을 컴퓨팅하기에 적합한 누산기를 포함하는 IMC 모듈은 훈련된 뉴럴 네트워크(neural network)을 사용하여 추론(또는 순방향 전파)을 수행하기 위해 사용되고, 상기 훈련된 뉴럴 네트워크에서 제1 피연산자가 입력(예를 들어, 이전 계층으로부터의 활성화)을 나타낼 수 있고, 제2 피연산자는 훈련된 뉴럴 네트워크의 층의 뉴런과 관련된 가중치를 나타낼 수 있다.
타일-레벨 곱셈의 다른 예로서, DRAM 뱅크(200)의 동일한 페이지로부터 로딩된 2개의 타일의 외적을 컴퓨팅할 때, 첫번째 타일의 모든 값은 두번째 타일의 모든 값에 곱해지고, 두 타일을 동시에 로딩될 수 있다. 예를 들어, 전술한 바와 같이, 각각의 타일이 16개의 값을 포함하는 경우, 2개의 타일의 외적은 16*16=256 출력 값을 갖는다. 트리-가산(tree-adder) 누적(accumulation)이 필요하지 않고, 256개의 출력 값을 병렬로 컴퓨팅할 수 있기 때문에, 외적은 내적보다 간단한 하드웨어와 함께 컴퓨팅할 수 있다. 그러나, 외적을 계산하는 것은 (예를 들어, 외적의 결과의 모든 값을 저장하기 위해) 본 개시의 실시예에 따른 인-메모리 컴퓨팅 모듈(250)에서 많은 출력 버퍼 레지스터(예를 들어, 출력 버퍼(812 및 814))를 필요로 한다. 예를 들어, 각각의 타일이 최대 16개의 FP-16 값을 포함한다고 가정하면, 외적을 컴퓨팅하도록 구성된 IMC 모듈(250)은 256개의 값을 저장하기에 충분히 큰 출력 버퍼(예를 들어, 256*16 비트=4,096 비트 버퍼)를 포함할 수 있다. 따라서, 출력 버퍼를 포함하는 본 발명의 일부 실시예에 따른 IMC 모듈은 제1 및 제2 피연산자(상기 예에서, 피연산자의 각 타일은 16개의 값을 포함하기 때문에 출력 버퍼는 적어도 256개의 값을 저장함)의 타일에 있는 값의 수의 곱보다 크거나 같은 크기를 저장하기 위한 크기를 갖는 피연산자의 외적을 포함하는 컴퓨팅을 수행하는데 적합할 수 있다.
타일-레벨 곱셈의 세번째 예로서, DRAM 뱅크(200)의 동일한 페이지로부터 로딩된 2 개의 타일의 텐서곱(tensor product)을 계산할 때, 2 개의 타일은 행렬로 배열된 값을 포함할 수 있다. 예를 들어, 각각의 타일이 16개의 FP-16 값을 포함하는 경우, 각각의 타일은 4 바이(by) 4 행렬 값으로 배열될 수 있다. 이 타일의 텐서곱을 컴퓨팅하면 4x4 결과 행렬이 생성된다. 예를 들어, 각각의 타일이 최대 16개의 FP-16 값을 포함한다고 가정하면, 16개의 값 중 2개의 4 x 4 타일의 텐서곱을 컴퓨팅하도록 구성된 IMC 모듈(250)은 16개의 값을 저장하기에 충분히 큰 출력 버퍼(예를 들어, 16*16 비트=256 비트 버퍼)를 가질 수 있다. 따라서, 본 개시의 실시예에 따른 IMC 모듈은 제1 및 제2 피연산자 중 큰 값의 수와 동일한 값의 수를 저장하기에 충분히 큰 출력 버퍼를 포함하는 컴퓨팅(피연산자들의 텐서 곱을 포함하는)을 수행하는데 적합할 수 있다. 본 개시의 실시예들에 따른 텐서곱을 구현하는 인-메모리 컴퓨팅 모듈은 내적을 계산하고 외적을 계산하는데 적합한 IMC 모듈 하드웨어에 비해 더 간단한 하드웨어 및 중간 개수의 버퍼 레지스터를 갖는 중간 그라운드(middle ground)를 나타낸다.
보다 상세하게는, 2개의 4 바이(by) 4 행렬 A와 B 사이에서 텐서곱을 수행하는 것은 64 곱셈 연산, 48 개의 덧셈 연산, 및 행렬 A/행렬 B에서의 전치(transpose)를 포함한다. 본 발명의 일 실시예에 따른 16 레인(lane) e-ALU (252)를 사용하는 경우, 16개의 연산이 병렬로 수행될 수 있다. 이러한 64+48=112 연산은 7 사이클의 ALU(한 번의 사이클로 곱셈을 수행할 수 있다고 가정)에서 수행될 수 있다. 본 개시의 다른 실시예에서, 성능을 증가시키기 위해, 64 레인 ALU (252)는 2 내지 3 사이클 또는 4-6 나노초(nanoseconds)에서 2개의 4 바이(by) 4 행렬을 나타내는 2개의 타일의 텐서곱을 계산하는데 사용될 수 있다. 따라서, ALU(252)에서 레인의 수를 증가시키는 것은 컴퓨팅들 사이에서 가능한 병렬화의 양을 증가시켜, 성능을 향상시킬 수 있다.
따라서, 본 개시의 실시예의 양태는 인-메모리 컴퓨팅을 갖는 동적 랜덤 액세스 메모리(DRAM; dynamic random access memory) 시스템에서의 데이터 배치를 위한 시스템 및 방법에 관한 것이다. SR (단일 페이지) 데이터 레이아웃과 관련하여 내적, 외적 및 텐서곱을 컴퓨팅하는 위의 세 가지 예에서, 단일 행은 (행렬의) 열 데이터가 있는 제2 타일과 같은 페이지에 (행렬의) 행 데이터가 있는 제1 타일을 포함한다.
본 개시의 일부 실시예에 따르면, 메모리 모듈(110)의 메모리 컨트롤러(140) (또는 클라이언트 측 메모리 컨트롤러)는 호스트 프로세서(170)로부터 수신된 명령에 따라 호스트 프로세서(170)로부터 수신된 데이터(피연산자)의 배치를 제어한다. 예를 들어, 명령어가 내적, 외적 또는 텐서곱을 계산해야 하는지 여부와 피연산자의 크기(예, 행렬의 크기(dimensions))를 기반으로, 메모리 컨트롤러(140)는 1OP, SR 또는 DR 데이터 레이아웃을 사용하고, 그에 따라 데이터를 저장하도록 DRAM 뱅크를 제어할 수 있다.
도 10은 본 개시의 실시예에 따른 인-메모리 컴퓨팅 모듈을 갖는 DRAM 뱅크에서의 데이터의 배치를 제어하기위한 방법의 플로우차트이다. 단계(1110)에서, 메모리 컨트롤러(140)는 피연산자들(예, 제1 피연산자 및 제2 피연산자) 및 피연산자들에 적용될 명령어(예, 함수)을 수신할 수 있다. 예를 들어, 이들 명령어는, 내적, 외적을 컴퓨팅하고, 훈련된 뉴럴 네트워크 및 입력 벡터를 사용하여 추론을 수행하고, 뉴럴 네트워크를 훈련시키기 위한 역 전파 알고리즘(backpropagation algorithm)의 단계를 수행하는 등을 포함할 수 있다.
단계(1130)에서, 메모리 컨트롤러(140)는 명령어에 기초하여 DRAM 다이의 DRAM 뱅크에 하나 또는 두 피연산자를 DRAM 다이에 저장하는데 사용할 데이터 레이아웃(예를 들어, 1OP, SR 또는 DR)을 결정한다. 일부 실시예에서, (예를 들어, 호스트 메모리 컨트롤러(180)로부터의) 명령어는 어떤 데이터 레이아웃을 사용할지를 명시 적으로 지정한다. 일부 실시예에서, 수행될 컴퓨팅 유형 및 DRAM 뱅크에서 그러한 컴퓨팅을 가속화하기위한 메모리 또는 하드웨어 요구 사항에 기초하여 레이아웃이 선택된다(예를 들어, 내적을 컴퓨팅하기 위한 명령어는 누산기를 갖는 DRAM 뱅크에 데이터가 배치될 수 있는 반면, 외적을 계산하는 명령어는 더 많은 출력 버퍼를 갖는 DRAM 뱅크에 데이터가 배치될 수 있다).
단계(1150)에서, 메모리 컨트롤러(140)는 선택된 레이아웃에 기초하여 제1 피연산자 및 제2 피연산자를 DRAM 뱅크에 공급한다. 일 예로, 1OP 경우에, 메모리 컨트롤러(140)는 제1 피연산자의 적어도 제1 타일을 저장하고 제2 피연산자의 제2 타일들을 DRAM 뱅크의 IMC 모듈에 직접 공급하도록 DRAM 뱅크(200)를 제어한다. 다른 예로, SR의 경우, 메모리 컨트롤러(140)는 DRAM 뱅크의 동일한 행 또는 동일한 페이지에 제1 및 제2 피연산자에 대응하는 타일을 저장하도록 DRAM 뱅크(200)를 제어한다.
단계(1170)에서, 메모리 컨트롤러(140)는 입력 명령에 기초한 동작을 수행하도록 DRAM 뱅크(200)의 인-메모리 컴퓨팅 모듈을 제어한다. 예를 들어, 훈련된 모델을 사용하여 추론을 수행하라는 명령의 경우, 연산은 하나의 피연산자를 기반으로 입력 벡터를 준비하고 두 번째 피연산자에 저장된 매개 변수를 기반으로 입력 벡터의 값에 가중치를 부여하는 것을 포함할 수 있다.
본 개시 내용이 특정 예시적인 실시예를 제시하였지만, 본 개시 내용은 개시된 실시예에 제한되지 않고, 반대로, 첨부된 특허 청구 범위의 사상과 범위 및 그 등가물에 포함된 다양한 수정 및 등가 배열을 포함하도록 의도된 것임을 이해해야 한다.
100: 메모리 시스템 110: 메모리 모듈
120: DRAM 다이 130: 메모리 버스
140: 메모리 컨트롤러 170: 호스트 프로세서
180: 호스트 메모리 컨트롤러 190: 외부 버스
200: DRAM 뱅크 210: DRAM 셀
212: 커패시터 214: 스위치
220: 행 디코더 230: 입출력 감지 증폭기 층
232: 증폭기 234: 멀티플렉서
236: 글로벌 IO 계층 240: 열 디코더
250: IMC 모듈 252: ALU
254: 피연산자 레지스터 Rop 256: 결과 레지스터 Rz
257: 제1 멀티플렉서 258: 제2 멀티플렉서
260: 모듈 300: 멀티플렉서
120: DRAM 다이 130: 메모리 버스
140: 메모리 컨트롤러 170: 호스트 프로세서
180: 호스트 메모리 컨트롤러 190: 외부 버스
200: DRAM 뱅크 210: DRAM 셀
212: 커패시터 214: 스위치
220: 행 디코더 230: 입출력 감지 증폭기 층
232: 증폭기 234: 멀티플렉서
236: 글로벌 IO 계층 240: 열 디코더
250: IMC 모듈 252: ALU
254: 피연산자 레지스터 Rop 256: 결과 레지스터 Rz
257: 제1 멀티플렉서 258: 제2 멀티플렉서
260: 모듈 300: 멀티플렉서
Claims (24)
- 메모리 모듈에 있어서,
동적 랜덤 액세스 메모리(DRAM) 뱅크를 포함하는 메모리 다이; 및
메모리 컨트롤러를 포함하되,
상기 DRAM 뱅크는,
복수의 페이지들에 배열된 DRAM 셀들의 어레이; 및
인-메모리 컴퓨팅(IMC) 모듈을 포함하고,
상기 IMC 모듈은 산술 논리 유닛(ALU)를 포함하고,
상기 메모리 컨트롤러는,
호스트 프로세서로부터 피연산자 및 명령어를 수신하고;
상기 명령어에 기초하여, 복수의 데이터 레이아웃들로부터 데이터 레이아웃을 결정하고 - 상기 데이터 레이아웃은 상기 DRAM 셀들의 어레이 및 상기 IMC 모듈 사이에 상기 피연산자의 배치를 지정함;
상기 데이터 레이아웃에 따라 상기 DRAM 뱅크에 상기 피연산자를 공급하고;
상기 명령어에 따라 상기 피연산자에 대한 ALU 동작을 수행하도록 상기 DRAM 뱅크의 상기 IMC 모듈을 제어하도록 구성되며,
상기 복수의 데이터 레이아웃들은,
피연산자가 상기 DRAM 셀들로부터 독출되는지 또는 피연산자가 상기 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급되는지에 기초하여 구분되는,
메모리 모듈. - 제1 항에 있어서,
상기 데이터 레이아웃들은, 일 피연산자(1OP) 데이터 레이아웃을 포함하되, 제1 피연산자는 상기 DRAM 셀들로부터 독출되고,
상기 피연산자는 제2 피연산자를 포함하되, 상기 제2 피연산자는 상기 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급되는,
메모리 모듈. - 제2 항에 있어서,
상기 제1 피연산자는 복수의 제1 타일들로 분할되고,
상기 제2 피연산자는 복수의 제2 타일들로 분할되고,
각 타일은 복수의 값들을 포함하고,
상기 IMC 모듈은, 피연산자 레지스터를 더 포함하고,
상기 메모리 컨트롤러는,
상기 피연산자 레지스터에 상기 제1 피연산자의 제1 타일을 저장하고; 및
상기 피연산자 레지스터에 저장된 상기 제1 피연산자, 및 상기 제2 피연산자의 복수의 제2 타일들 각각에 대해 산술 논리 연산을 수행하도록 더 구성되는,
메모리 모듈. - 제1 항에 있어서,
상기 피연산자는 복수의 제1 타일들로 분할되고,
제2 피연산자는 복수의 제2 타일들로 분할되고,
각 타일은 복수의 값들을 포함하고,
상기 데이터 레이아웃들은 동일한 행(SR) 데이터 레이아웃을 포함하고,
상기 메모리 컨트롤러는 상기 DRAM 셀들의 동일한 페이지에 하나 이상의 상기 제1 타일(들) 및 하나 이상의 상기 제2 타일(들)을 저장하는,
메모리 모듈. - 제4 항에 있어서,
상기 IMC 모듈은 피연산자 레지스터를 더 포함하고,
상기 메모리 컨트롤러는,
상기 피연산자 레지스터에 상기 하나 이상의 제1 타일(들) 중 하나의 제1 타일을 저장하고; 및
상기 피연산자 레지스터에 저장된 제1 타일, 및 상기 DRAM 셀들의 어레이의 상기 제1 타일과 동일한 페이지에 저장된 하나 이상의 제2 타일(들) 각각에 대해 산술 논리 연산을 수행하도록 더 구성되는,
메모리 모듈. - 제5 항에 있어서,
상기 DRAM 뱅크의 상기 IMC 모듈은 누산기를 더 포함하고,
상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고,
상기 누산기는,
상기 ALU에 의해 계산된 출력을 수신하고; 및
상기 누적된 값과 상기 출력의 합으로 상기 누산기 레지스터를 업데이트 하도록 구성되고,
상기 명령어는 상기 피연산자와 상기 제2 피연산자의 내적을 컴퓨팅하는 단계를 포함하고,
상기 제1 타일(들) 중 상기 하나의 제1 타일은 행 데이터를 저장하고,
상기 제2 타일(들) 중 하나의 제2 타일은 열 데이터를 포함하는,
메모리 모듈. - 제5 항에 있어서,
상기 제1 타일은 제1 수의 값들을 갖고, 상기 제2 타일은 제2 수의 값들을 갖고,
상기 DRAM 뱅크들의 상기 IMC 모듈은 출력 버퍼를 포함하고,
상기 출력 버퍼는 상기 제1 수의 값들과 상기 제2 수의 값들의 곱 이상의 저장을 위한 크기를 갖고,
상기 명령어는 상기 피연산자와 상기 제2 피연산자의 외적을 컴퓨팅하는 단계를 포함하고,
상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고,
상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함하는,
메모리 모듈. - 제5 항에 있어서,
상기 제1 타일은 제1 수의 값들을 갖고, 상기 제2 타일은 제2 수의 값들을 갖고,
상기 DRAM 뱅크들의 상기 IMC 모듈은 출력 버퍼를 포함하고,
상기 출력 버퍼는 상기 제1 수의 값들과 상기 제2 수의 값들 중 큰 값 이상의 저장을 위한 크기를 갖고,
상기 명령어는 상기 피연산자와 상기 제2 피연산자의 텐서곱을 컴퓨팅하는 단계를 포함하고,
상기 제1 타일(들)의 상기 하나의 제1 타일은 행 데이터를 저장하고,
상기 제2 타일(들)의 하나의 제2 타일은 열 데이터를 포함하는,
메모리 모듈. - 제1 항에 있어서,
상기 피연산자는 복수의 제1 타일들로 분할되고,
제2 피연산자는 복수의 제2 타일들로 분할되고,
각 타일은 복수의 값들을 포함하고,
상기 데이터 레이아웃들은 상이한 행(DR) 데이터 레이아웃을 포함하고,
상기 메모리 컨트롤러는 상기 DRAM 셀들의 어레이의 제1 페이지에 상기 제1 타일들의 서브 세트, 및 상기 DRAM 셀들의 어레이의 제2 페이지에 상기 제2 타일들의 서브 세트를 저장하는,
메모리 모듈. - 제9 항에 있어서,
상기 IMC 모듈은 , 피연산자 레지스터를 더 포함하고,
상기 메모리 컨트롤러는,
상기 피연산자 레지스터의 상기 제1 페이지로부터 상기 피연산자의 제1 타일을 저장하고; 및
상기 피연산자 레지스터에 저장한 상기 피연산자의 상기 제1 타일, 및 상기 제2 페이지로부터 상기 제2 피연산자의 복수의 제2 타일들 각각에 대해 산술 논리 연산을 수행하도록 더 구성되는,
메모리 모듈. - 제1 항에 있어서,
상기 DRAM 뱅크의 IMC 모듈은, 상기 ALU에 의해 컴퓨팅된 출력을 버퍼링하도록 구성된 버퍼를 더 포함하는,
메모리 모듈. - 제11 항에 있어서,
상기 버퍼는 상기 IMC 모듈의 결과 레지스터의 사이즈의 4배 이상을 가지는,
메모리 모듈. - 제1 항에 있어서,
상기 DRAM 뱅크의 상기 IMC 모듈은 누산기를 더 포함하고,
상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고,
상기 누산기는,
상기 ALU에 의해 계산된 출력을 수신하고; 및
상기 누적된 값과 상기 출력의 합으로 상기 누산기 레지스터를 업데이트하도록 구성되는,
메모리 모듈. - 제1 항에 있어서,
상기 메모리 모듈은 실리콘 비아를 통해 연결된 메모리 다이 스택을 포함하는 고 대역폭 메모리(HBM) 모듈이고,
상기 메모리 다이 스택은 상기 메모리 다이를 포함하는,
메모리 모듈. - 인-메모리(in-memory) 컴퓨팅을 수행하는 방법에 있어서,
메모리 모듈의 메모리 컨트롤러에 의해, 피연산자 및 명령어를 수신하는 단계;
상기 메모리 컨트롤러에 의해, 상기 명령어에 기초하여 복수의 데이터 레이아웃들로부터 데이터 레이아웃을 결정하는 단계;
상기 데이터 레이아웃에 따라 상기 메모리 모듈의 동적 랜덤 액세스 메모리(DRAM) 뱅크에 상기 피연산자를 공급하는 단계- 상기 DRAM 뱅크는 복수의 페이지들에 배열된 DRAM 셀들의 어레이; 및 산술 논리 유닛(ALU)를 포함하는 인-메모리 컴퓨팅(IMC) 모듈을 포함함;
상기 명령어에 따라 상기 피연산자에 대한 산술 논리 연산을 수행하도록 상기 DRAM 뱅크의 상기 IMC 모듈을 제어하는 단계를 포함하며,
상기 복수의 데이터 레이아웃들은,
피연산자가 상기 DRAM 셀들로부터 독출되는지 또는 피연산자가 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급되는지에 기초하여 구분되는,
방법. - 제15 항에 있어서,
상기 데이터 레이아웃들은, 일 피연산자(1OP) 데이터 레이아웃을 포함하되, 제1 피연산자는 상기 DRAM 셀들에 쓰여지고,
상기 피연산자는 제2 피연산자를 포함하되, 상기 제2 피연산자는 호스트 프로세서에서 상기 DRAM 뱅크의 상기 IMC 모듈로 직접 공급되는,
방법. - 제16 항에 있어서,
상기 제1 피연산자는 복수의 제1 타일들로 분할되고,
상기 제2 피연산자는 복수의 제2 타일들로 분할되고,
각 타일은 복수의 값들을 포함하고,
상기 IMC 모듈은, 피연산자 레지스터를 더 포함하고,
상기 메모리 컨트롤러는,
상기 피연산자 레지스터에 상기 제1 피연산자의 제1 타일을 저장하고; 및
상기 피연산자 레지스터에 저장된 상기 제1 피연산자, 및 상기 제2 피연산자의 복수의 제2 타일들 각각에 대해 상기 산술 논리 연산을 수행하도록 더 구성되는,
방법. - 제15 항에 있어서,
상기 피연산자는 복수의 제1 타일들로 분할되고,
제2 피연산자는 복수의 제2 타일들로 분할되고,
각 타일은 복수의 값들을 포함하고,
상기 데이터 레이아웃들은 동일한 행(SR) 데이터 레이아웃을 포함하고,
상기 메모리 컨트롤러는 상기 DRAM 셀들의 동일한 페이지에 하나 이상의 상기 제1 타일(들) 및 하나 이상의 상기 제2 타일(들)을 저장하는,
방법. - 제18 항에 있어서,
상기 IMC 모듈은 피연산자 레지스터를 더 포함하고,
상기 메모리 컨트롤러는,
상기 피연산자 레지스터에 상기 하나 이상의 제1 타일(들) 중 하나의 제1 타일을 저장하고; 및
상기 피연산자 레지스터에 저장된 제1 타일, 및 상기 DRAM 셀들의 어레이의 상기 제1 타일과 동일한 페이지에 저장된 하나 이상의 제2 타일(들) 각각에 대해 상기 산술 논리 연산을 수행하도록 더 구성되는,
방법. - 제19 항에 있어서,
상기 DRAM 뱅크의 상기 IMC 모듈은 누산기를 더 포함하고,
상기 누산기는 누적된 값을 저장하도록 구성된 누산기 레지스터를 포함하고,
상기 누산기는,
상기 ALU에 의해 계산된 출력을 수신하고; 및
상기 누적된 값과 상기 출력의 합으로 상기 누산기 레지스터를 업데이트 하도록 구성되고,
상기 명령어는 상기 피연산자와 상기 제2 피연산자의 내적을 컴퓨팅하는 단계를 포함하고,
상기 제1 타일(들) 중 상기 하나의 제1 타일은 행 데이터를 저장하고,
상기 제2 타일(들) 중 하나의 제2 타일은 열 데이터를 포함하는,
방법. - 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202062975577P | 2020-02-12 | 2020-02-12 | |
US62/975,577 | 2020-02-12 | ||
US16/859,829 US11226816B2 (en) | 2020-02-12 | 2020-04-27 | Systems and methods for data placement for in-memory-compute |
US16/859,829 | 2020-04-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210103373A KR20210103373A (ko) | 2021-08-23 |
KR102653014B1 true KR102653014B1 (ko) | 2024-04-01 |
Family
ID=77177440
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200103072A KR102653014B1 (ko) | 2020-02-12 | 2020-08-18 | 인-메모리-컴퓨팅에 대한 데이터 배치를 위한 방법 및 상기 방법이 적용된 메모리 모듈 |
Country Status (5)
Country | Link |
---|---|
US (3) | US11226816B2 (ko) |
JP (1) | JP7550614B2 (ko) |
KR (1) | KR102653014B1 (ko) |
CN (1) | CN113254359A (ko) |
TW (1) | TWI848184B (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113362878A (zh) * | 2020-03-06 | 2021-09-07 | 三星电子株式会社 | 用于存储器内计算的方法和用于计算的系统 |
EP4165637A4 (en) * | 2020-06-16 | 2024-07-10 | Groq Inc | DETERMINISTIC NEAR-COMPUTATIONAL MEMORY FOR DETERMINISTIC PROCESSOR AND ENHANCED DATA MOVEMENT BETWEEN STORAGE UNITS AND PROCESSING UNITS |
US12032829B2 (en) | 2021-07-21 | 2024-07-09 | Samsung Electronics Co., Ltd. | Memory device performing in-memory operation and method thereof |
CN116486862B (zh) | 2022-01-13 | 2024-07-26 | 长鑫存储技术有限公司 | 地址译码电路、存储器及控制方法 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR940004434A (ko) * | 1992-08-25 | 1994-03-15 | 윌리엄 이. 힐러 | 스마트 다이나믹 랜덤 억세스 메모리 및 그 처리방법 |
US5953738A (en) * | 1997-07-02 | 1999-09-14 | Silicon Aquarius, Inc | DRAM with integral SRAM and arithmetic-logic units |
US6295586B1 (en) * | 1998-12-04 | 2001-09-25 | Advanced Micro Devices, Inc. | Queue based memory controller |
JP4250900B2 (ja) | 2002-03-14 | 2009-04-08 | ソニー株式会社 | 記憶装置 |
KR100874949B1 (ko) | 2006-11-15 | 2008-12-19 | 삼성전자주식회사 | 단일 명령 다중 자료 프로세서 및 그것을 위한 메모리어레이 구조 |
US8477146B2 (en) * | 2008-07-29 | 2013-07-02 | Marvell World Trade Ltd. | Processing rasterized data |
US8521958B2 (en) * | 2009-06-04 | 2013-08-27 | Micron Technology, Inc. | Internal processor buffer |
US9542101B2 (en) * | 2013-01-22 | 2017-01-10 | Avago Technologies General Ip (Singapore) Pte. Ltd. | System and methods for performing embedded full-stripe write operations to a data volume with data elements distributed across multiple modules |
US20140331014A1 (en) * | 2013-05-01 | 2014-11-06 | Silicon Graphics International Corp. | Scalable Matrix Multiplication in a Shared Memory System |
JP6388654B2 (ja) * | 2013-12-26 | 2018-09-12 | インテル・コーポレーション | メモリアクセス中のデータ並べ替え |
US10185499B1 (en) * | 2014-01-07 | 2019-01-22 | Rambus Inc. | Near-memory compute module |
US10996959B2 (en) | 2015-01-08 | 2021-05-04 | Technion Research And Development Foundation Ltd. | Hybrid processor |
US9547441B1 (en) * | 2015-06-23 | 2017-01-17 | Pure Storage, Inc. | Exposing a geometry of a storage device |
US11079936B2 (en) | 2016-03-01 | 2021-08-03 | Samsung Electronics Co., Ltd. | 3-D stacked memory with reconfigurable compute logic |
US10180906B2 (en) * | 2016-07-26 | 2019-01-15 | Samsung Electronics Co., Ltd. | HBM with in-memory cache manager |
US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
US10242728B2 (en) * | 2016-10-27 | 2019-03-26 | Samsung Electronics Co., Ltd. | DPU architecture |
US9922696B1 (en) * | 2016-10-28 | 2018-03-20 | Samsung Electronics Co., Ltd. | Circuits and micro-architecture for a DRAM-based processing unit |
EP4089531B1 (en) * | 2016-12-31 | 2024-06-26 | Intel Corporation | Systems, methods, and apparatuses for heterogeneous computing |
JP6988231B2 (ja) | 2017-07-26 | 2022-01-05 | 富士通株式会社 | 情報処理装置、情報処理システム、情報処理方法及び情報処理プログラム |
US10866900B2 (en) | 2017-10-17 | 2020-12-15 | Samsung Electronics Co., Ltd. | ISA extension for high-bandwidth memory |
US20190130291A1 (en) * | 2017-10-27 | 2019-05-02 | Wave Computing, Inc. | Dynamic reconfiguration with partially resident agents |
US11373088B2 (en) | 2017-12-30 | 2022-06-28 | Intel Corporation | Machine learning accelerator mechanism |
US10572568B2 (en) | 2018-03-28 | 2020-02-25 | Intel Corporation | Accelerator for sparse-dense matrix multiplication |
US10664287B2 (en) * | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US10691182B2 (en) * | 2019-05-20 | 2020-06-23 | Intel Corporation | Layered super-reticle computing: architectures and methods |
US11237903B2 (en) * | 2019-06-25 | 2022-02-01 | Intel Corporation | Technologies for providing ECC pre-provisioning and handling for cross-point memory and compute operations |
US20210223996A1 (en) * | 2020-01-07 | 2021-07-22 | SK Hynix Inc. | Processing-in-memory (pim) devices |
-
2020
- 2020-04-27 US US16/859,829 patent/US11226816B2/en active Active
- 2020-08-18 KR KR1020200103072A patent/KR102653014B1/ko active IP Right Grant
- 2020-11-04 TW TW109138406A patent/TWI848184B/zh active
- 2020-11-06 CN CN202011228228.8A patent/CN113254359A/zh active Pending
- 2020-11-18 JP JP2020191783A patent/JP7550614B2/ja active Active
-
2021
- 2021-12-10 US US17/548,220 patent/US11782707B2/en active Active
-
2023
- 2023-09-14 US US18/368,515 patent/US20240004646A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US11782707B2 (en) | 2023-10-10 |
JP7550614B2 (ja) | 2024-09-13 |
JP2021128752A (ja) | 2021-09-02 |
US20210247978A1 (en) | 2021-08-12 |
TWI848184B (zh) | 2024-07-11 |
CN113254359A (zh) | 2021-08-13 |
US20240004646A1 (en) | 2024-01-04 |
US11226816B2 (en) | 2022-01-18 |
TW202131190A (zh) | 2021-08-16 |
KR20210103373A (ko) | 2021-08-23 |
US20220171620A1 (en) | 2022-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102653014B1 (ko) | 인-메모리-컴퓨팅에 대한 데이터 배치를 위한 방법 및 상기 방법이 적용된 메모리 모듈 | |
US11947961B2 (en) | Memory lookup computing mechanisms | |
US11775313B2 (en) | Hardware accelerator for convolutional neural networks and method of operation thereof | |
US20210072986A1 (en) | Methods for performing processing-in-memory operations on serially allocated data, and related memory devices and systems | |
JP2671120B2 (ja) | データ処理セルおよびデータプロセッサ | |
US20210181974A1 (en) | Systems and methods for low-latency memory device | |
US11934824B2 (en) | Methods for performing processing-in-memory operations, and related memory devices and systems | |
US20210081353A1 (en) | Accelerator chip connecting a system on a chip and a memory chip | |
CN111656339B (zh) | 存储器装置及其控制方法 | |
Finkbeiner et al. | In-memory intelligence | |
US11397694B2 (en) | Memory chip connecting a system on a chip and an accelerator chip | |
KR20150143598A (ko) | 내장된 ecc 어드레스 맵핑 | |
KR20210113099A (ko) | 조정 가능한 기능-인-메모리 컴퓨팅 시스템 | |
CN111338974A (zh) | 用于矩阵数学指令集的图块化算法 | |
US20220206685A1 (en) | Reusing remote registers in processing in memory | |
TWI850513B (zh) | 用於記憶體內計算的方法及用於計算的系統 | |
US12056388B2 (en) | Adjustable function-in-memory computation system | |
Huttenhoff et al. | Arithmetic unit of a computing element in a global, highly parallel computer | |
CN113298236A (zh) | 基于数据流结构的低精度神经网络计算装置及加速方法 | |
CN115328831A (zh) | 一种面向hpc/ai加速器的多功能dma |
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 |