KR20220045480A - 인-메모리 프로세싱을 수행하는 메모리 디바이스 - Google Patents
인-메모리 프로세싱을 수행하는 메모리 디바이스 Download PDFInfo
- Publication number
- KR20220045480A KR20220045480A KR1020200128274A KR20200128274A KR20220045480A KR 20220045480 A KR20220045480 A KR 20220045480A KR 1020200128274 A KR1020200128274 A KR 1020200128274A KR 20200128274 A KR20200128274 A KR 20200128274A KR 20220045480 A KR20220045480 A KR 20220045480A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- bank
- operating frequency
- banks
- operation unit
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 225
- 238000000034 method Methods 0.000 claims description 19
- 238000004364 calculation method Methods 0.000 claims description 7
- 230000003139 buffering effect Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 33
- 102100040862 Dual specificity protein kinase CLK1 Human genes 0.000 description 24
- 101000749294 Homo sapiens Dual specificity protein kinase CLK1 Proteins 0.000 description 6
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
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
- 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/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/161—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
- G06F13/1621—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by maintaining request order
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1015—Read-write modes for single port memories, i.e. having either a random port or a serial port
- G11C7/1039—Read-write modes for single port memories, i.e. having either a random port or a serial port using pipelining techniques, i.e. using latches between functional memory parts, e.g. row/column decoders, I/O buffers, sense amplifiers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- 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
- 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/12—Group selection circuits, e.g. for memory block selection, chip selection, array selection
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03K—PULSE TECHNIQUE
- H03K19/00—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
- H03K19/02—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
- H03K19/173—Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
- H03K19/1733—Controllable logic circuits
- H03K19/1737—Controllable logic circuits using multiplexers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
Abstract
인-메모리 프로세싱(in-memory processing)을 수행하는 메모리 디바이스는 파이프라이닝된(pipelined) 연산의 인-메모리 프로세싱을 수행하는 인-메모리 연산 유닛들과 n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되어 파이프라이닝된 연산이 처리되는 동안 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 메모리 뱅크들을 포함한다.
Description
인-메모리 연산 유닛을 이용하여 인-메모리 프로세싱을 수행하는 메모리 디바이스에 관한다.
그래픽스 알고리즘의 처리, 뉴럴 네트워크의 처리 등과 같은 애플리케이션들은 계산-집약적(compute-intensive) 연산들로서, 대용량 연산 및 메모리 능력을 갖는 컴퓨팅 시스템을 필요로 한다. 컴퓨팅 시스템의 연산들(computation operations) 중 일부를 메모리 디바이스의 내부 프로세싱(또는 인-메모리 프로세싱)으로 수행할 수 있는 메모리 디바이스가 개발되고 있다. 이와 같이 메모리 디바이스의 내부 프로세싱을 통하여 컴퓨팅 시스템의 연산 부담이 감소될 수 있다. 다만, 메모리 디바이스 내에 내부 프로세싱을 위한 별도의 프로세싱 하드웨어들이 추가되는 경우에는 이들의 연산 처리를 효율적으로 수행하기 위한 방안들이 요구될 수 있다.
인-메모리 프로세싱을 수행하는 메모리 디바이스를 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 인-메모리 프로세싱(in-memory processing)을 수행하는 메모리 디바이스는, 파이프라이닝된(pipelined) 연산의 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들; 및 n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되고, 상기 파이프라이닝된 연산이 처리되는 동안 상기 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 복수의 메모리 뱅크들을 포함하고, 상기 인-메모리 연산 유닛들 각각은 상기 메모리 뱅크들 각각의 제 2 동작 주파수의 n배 또는 n배 이하인 제 1 동작 주파수로 동작한다.
다른 측면에 따르면, 인-메모리 프로세싱(in-memory processing)을 수행하는 메모리 디바이스는, 파이프라이닝된(pipelined) 연산의 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들; n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되고, 상기 파이프라이닝된 연산이 처리되는 동안 상기 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 복수의 메모리 뱅크들; - 상기 인-메모리 연산 유닛들 각각은 상기 메모리 뱅크들 각각의 제 2 동작 주파수의 n배 또는 n배 이하인 제 1 동작 주파수로 동작하고, - 상기 인-메모리 연산 유닛들 각각에 할당된 상기 메모리 뱅크들 중 인에이블된 적어도 하나의 메모리 뱅크로부터 액세스된 데이터를 상기 인-메모리 연산 유닛들 각각으로 제공하는 적어도 하나의 멀티플렉서를 포함한다.
도 1은 일 실시예에 따른 메모리 시스템을 나타내는 블록도이다.
도 2a 및 도 2b는 일 실시예에 따른 메모리 뱅크와 인-메모리 연산 유닛 간의 할당 비율들을 설명하기 위한 도면들이다.
도 3 및 도 4는 일 실시예에 따른 인-메모리 연산 유닛의 동작 주파수 차이로 인한 메모리 뱅크들의 동작의 차이를 비교하여 설명하기 위한 도면들이다.
도 5는 일 실시예에 따른 4배의 동작 주파수로 동작하는 1개의 인-메모리 연산 유닛에, 4개의 메모리 뱅크들이 할당된 것을 설명하기 위한 도면이다.
도 6a 및 도 6b는 일 실시예에 따라 4개의 메모리 뱅크들이 할당된 1개의 인-메모리 연산 유닛의 동작 주파수에 기초한 인-메모리 연산 유닛의 연산 성능을 비교하여 설명하기 위한 도면들이다.
도 7은 일 실시예에 따른 연산의 파이프라이닝을 설명하기 위한 도면이다.
도 8은 일 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이다.
도 9는 도 8에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 10은 일 실시예에 따라 도 7의 파이프라이닝된 연산의 인-메모리 프로세싱을 수행하는 경우 각 메모리 뱅크에 할당되는 파이프라인 스테이지들을 설명하기 위한 도면이다.
도 11은 일 실시예에 따라 인-메모리 연산 유닛에서 벡터 연산을 수행하는 것을 설명하기 위한 도면이다.
도 12는 다른 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이다.
도 13은 도 12에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 14는 도 12에서 설명된 하드웨어 구현을 이용하여 서로 다른 메모리 뱅크들에 저장된 서로 다른 오퍼랜드들을 인-메모리 프로세싱하는 것을 설명하기 위한 도면이다.
도 15는 일 실시예에 따른 메모리 디바이스를 포함하는 컴퓨팅 시스템을 나타내는 블록도이다.
도 2a 및 도 2b는 일 실시예에 따른 메모리 뱅크와 인-메모리 연산 유닛 간의 할당 비율들을 설명하기 위한 도면들이다.
도 3 및 도 4는 일 실시예에 따른 인-메모리 연산 유닛의 동작 주파수 차이로 인한 메모리 뱅크들의 동작의 차이를 비교하여 설명하기 위한 도면들이다.
도 5는 일 실시예에 따른 4배의 동작 주파수로 동작하는 1개의 인-메모리 연산 유닛에, 4개의 메모리 뱅크들이 할당된 것을 설명하기 위한 도면이다.
도 6a 및 도 6b는 일 실시예에 따라 4개의 메모리 뱅크들이 할당된 1개의 인-메모리 연산 유닛의 동작 주파수에 기초한 인-메모리 연산 유닛의 연산 성능을 비교하여 설명하기 위한 도면들이다.
도 7은 일 실시예에 따른 연산의 파이프라이닝을 설명하기 위한 도면이다.
도 8은 일 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이다.
도 9는 도 8에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 10은 일 실시예에 따라 도 7의 파이프라이닝된 연산의 인-메모리 프로세싱을 수행하는 경우 각 메모리 뱅크에 할당되는 파이프라인 스테이지들을 설명하기 위한 도면이다.
도 11은 일 실시예에 따라 인-메모리 연산 유닛에서 벡터 연산을 수행하는 것을 설명하기 위한 도면이다.
도 12는 다른 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이다.
도 13은 도 12에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 14는 도 12에서 설명된 하드웨어 구현을 이용하여 서로 다른 메모리 뱅크들에 저장된 서로 다른 오퍼랜드들을 인-메모리 프로세싱하는 것을 설명하기 위한 도면이다.
도 15는 일 실시예에 따른 메모리 디바이스를 포함하는 컴퓨팅 시스템을 나타내는 블록도이다.
실시예들에서 사용되는 용어는 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 명세서에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 명세서의 전반에 걸친 내용을 토대로 정의되어야 한다.
본 실시예들에서 사용되는 "구성된다" 또는 "포함한다" 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
본 실시예들에서, 어떤 구성요소가 다른 구성요소와 "연결"되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 전기적으로 연결되어 있는 경우도 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 실시예들에서 사용되는 "제 1" 또는 "제 2" 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용할 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다.
아래에서는 첨부한 도면을 참고하여 실시예에 대하여 상세히 설명한다. 그러나 실시예는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 예에 한정되지 않는다.
도 1은 일 실시예에 따른 메모리 시스템을 나타내는 블록도이다.
도 1을 참조하면, 메모리 시스템(1)은 메모리 디바이스(10) 및 메모리 컨트롤러(20)를 포함할 수 있다. 메모리 디바이스(10)는 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들(110) 및 다수의 메모리 셀들을 포함하는 복수의 메모리 뱅크들(120)을 포함할 수 있다.
메모리 디바이스(10)는 메모리 칩 또는 메모리 모듈로 구현될 수 있다. 메모리 컨트롤러(20)는 호스트의 일부로 구현되거나, 메모리 디바이스(10)와 메모리 컨트롤러(20)가 하나의 메모리 모듈 내에 배치될 수도 있다. 즉, 구현 형태는 다양할 수 있으며 어느 하나로 제한되지 않는다. 한편, 호스트는 도 1에서는 비록 도시되지 않았으나, 메모리 시스템(1)을 제어하여 컴퓨팅 동작을 수행하는 기능 블록(functional block)으로서, 중앙 처리 유닛(Central Processing Unit: CPU), 디지털 신호 프로세서(Digital Signal Processor: DSP), 그래픽 처리 유닛 (Graphics Processing Unit: GPU), 또는 어플리케이션 프로세서(Application Processor: AP)에 해당될 수 있다.
메모리 컨트롤러(20)는 각종 신호를 메모리 디바이스(10)에 제공함으로써, 메모리 디바이스(10)의 전반적인 동작을 제어할 수 있다. 예를 들어, 메모리 컨트롤러(20)는 리드(read) 및 라이트(write) 등과 같은 메모리 디바이스(10)의 메모리 액세스 동작을 제어할 수 있다. 구체적으로, 메모리 컨트롤러(20)는 커맨드(CMD) 및 어드레스(ADDR)를 메모리 디바이스(10)에 제공함으로써, 메모리 디바이스(10)에 데이터(DATA)를 기입하거나, 또는 메모리 디바이스(10)로부터 데이터(DATA)를 리드할 수 있다. 또한, 메모리 컨트롤러(20)는 메모리 디바이스(10)에 클럭 신호(CLK)를 더 제공할 수 있다.
커맨드(CMD)는 데이터의 리드 또는 라이트를 위해 메모리 뱅크들(120)을 액티브 상태(active state)로 전환하기 위한 액티브 커맨드를 포함할 수 있다. 메모리 디바이스(10)는 액티브 커맨드에 응답하여, 메모리 뱅크들(120)에 포함된 로우(row), 즉, 워드 라인(word line)을 활성화시킬 수 있다. 또한, 커맨드(CMD)는 데이터의 리드 또는 라이트가 완료된 후 메모리 뱅크들(120)을 액티브 상태에서 스탠바이 상태(standby state)로 전환하기 위한 프리차지 커맨드를 포함할 수 있다. 또한, 커맨드(CMD)는 메모리 뱅크들(120)에 대한 리프레쉬 동작을 제어하기 위한 리프레쉬 커맨드를 포함할 수 있다. 다만, 여기에서 설명된 커맨드(CMD)의 종류는 예시적일 뿐이며, 다른 종류의 커맨드(CMD)가 존재할 수 있다.
또한, 메모리 컨트롤러(20)는 각종 신호를 메모리 디바이스(10)에 제공함으로써, 인-메모리 연산 유닛들(110)의 인-메모리 프로세싱 동작들을 제어할 수 있다. 예를 들어, 메모리 컨트롤러(20)는 커맨드(CMD), 어드레스(ADDR) 및/또는 클럭 신호(CLK)의 조합을 통해 인-메모리 연산 유닛들(110)의 인-메모리 프로세싱 동작들을 지시하는 신호를 메모리 디바이스(10)에 제공할 수 있다.
인-메모리 연산 유닛들(110)은 메모리 디바이스(10) 내에서 연산 처리를 수행하기 위한 프로세싱 소자들(Processing Elements, PEs)로 구현될 수 있다. 즉, 인-메모리 연산 유닛들(110)은 메모리 디바이스(10) 내에서 인-메모리 프로세싱(또는 내부 프로세싱(internal processing))을 수행할 수 있다.
구체적으로, 인-메모리 연산 유닛들(110)은 메모리 뱅크들(120)에 저장된 데이터(DATA) 및/또는 메모리 컨트롤러(20)로부터 수신한 데이터(DATA)에 대해 데이터 연산을 수행할 수 있고, 연산 결과의 데이터(DATA)를 메모리 뱅크들(120)에 저장하거나 메모리 컨트롤러(20)에 제공할 수 있다. 이에 따라, 인-메모리 연산 유닛들(110)은 Function-In-Memory (FIM) 또는 Processor In Memory (PIM)라고 지칭할 수도 있다.
인-메모리 연산 유닛들(110)은 ALU(Arithmetic Logic Unit) 또는 MAC(Multiply-Accumulate) 일 수 있다. 예를 들어, 인-메모리 연산 유닛들(110)은 데이터 반전(invert), 데이터 시프트(shift), 데이터 스왑(swap), 데이터 비교(compare), AND 및 XOR 등의 논리 연산들(logical operations), 덧셈 및 뺄셈 등의 수치 연산들(mathematical operations) 등과 데이터 연산을 수행할 수 있다.
메모리 디바이스(10) 내에 구비된 인-메모리 연산 유닛들(110)의 개수, 메모리 뱅크들(120)의 개수는 다양할 수 있다. 또한, 하나의 인-메모리 연산 유닛에는 n개의(n은 자연수) 메모리 뱅크들이 할당될 수 있다.
예를 들어, 메모리 디바이스(10)가 DDR4 DRAM(Double Data Rate 4 Dynamic Random Access Memory) 모듈에 해당하는 경우, 메모리 뱅크들(120)의 개수는 16이며 인-메모리 연산 유닛들(110)은 8개일 수 있다. 이때, 인-메모리 연산 유닛들(110)과 메모리 뱅크들(120)은 1:2의 비율(n=2, n은 자연수)로 매핑될 수 있다. 또는, 메모리 뱅크들(120)의 개수는 16이며 인-메모리 연산 유닛들(110)은 4개일 수 있고, 이때 인-메모리 연산 유닛들(110)과 메모리 뱅크들(120)은 1:4의 비율(n=4)로 매핑될 수 있다. 즉, 본 실시예들에 따르면, 인-메모리 연산 유닛들(110)과 메모리 뱅크들(120) 간의 매핑 비율은 다양할 수 있다.
메모리 뱅크들(120) 각각은 복수의 메모리 셀들을 포함할 수 있다. 구체적으로, 메모리 뱅크들(120)에서 메모리 셀들 각각은 복수의 워드 라인들 및 복수의 비트 라인들(bit lines)이 교차하는 지점에 위치할 수 있다. 메모리 뱅크들(120)은 인-메모리 프로세싱 데이터를 저장할 수 있다. 여기서, 인-메모리 프로세싱 데이터는 인-메모리 연산 유닛들(110)에 의해 연산 동작이 수행될 데이터 및/또는 인-메모리 연산 유닛들(110)에 의한 연산 동작의 수행 결과 생성된 데이터를 포함할 수 있다.
한편, 메모리 디바이스(10)는 다양한 종류의 메모리를 포함할 수 있으며, 일 예로서 DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR(Low Power Double Data Rate) SDRAM, GDDR(Graphics Double Data Rate) SDRAM, RDRAM(Rambus Dynamic Random Access Memory) 등과 같은 동적 랜덤 억세스 메모리(Dynamic Random Access Memory, DRAM)를 포함할 수 있다. 그러나, 본 실시예들은 이에 제한되지 않으며, 메모리 디바이스(10)는 플래시(flash) 메모리, MRAM(Magnetic RAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM) 및 ReRAM(Resistive RAM) 등의 비휘발성 메모리를 포함할 수 있다.
도 2a 및 도 2b는 일 실시예에 따른 메모리 뱅크와 인-메모리 연산 유닛 간의 할당 비율들을 설명하기 위한 도면들이다.
메모리 디바이스(도 1의 10)는 인-메모리 연산 유닛들(도 1의 110) 및 메모리 뱅크들(도 1의 120)이 배치된 메모리 다이(memory die)(100)를 포함할 수 있고, 도 2a 및 도 2b에는 메모리 다이(100)에 구비된 소정 개수의 인-메모리 연산 유닛들(110) 중 일부 및 소정 개수의 메모리 뱅크들(120) 중 일부가 도시되어 있다.
도 2a에 도시된 바와 같이, 1개의 인-메모리 연산 유닛(연산 유닛 1(111))에는 2개의 메모리 뱅크들(메모리 뱅크 1(121) 및 메모리 뱅크 2(122))이 할당되고, 1개의 인-메모리 연산 유닛(연산 유닛 2, 112)에는 2개의 메모리 뱅크들(메모리 뱅크 3(123) 및 메모리 뱅크 4(124))이 할당될 수 있다.
또는, 도 2b에 도시된 바와 같이, 1개의 인-메모리 연산 유닛(연산 유닛 1, 111)에는 4개의 메모리 뱅크들(메모리 뱅크 1(121), 메모리 뱅크 2(122), 메모리 뱅크 3(123) 및 메모리 뱅크 4(124))이 할당될 수도 있다.
즉, 메모리 디바이스(10)에 구비된 메모리 뱅크들(120)은 n개의 메모리 뱅크 단위로 하나의 인-메모리 연산 유닛을 공유할 수 있고, 각 인-메모리 연산 유닛은 대응하는 n개의 메모리 뱅크들에 액세스하여 데이터 연산을 수행할 수 있다. 여기서, 메모리 디바이스(10)가 DDR4 DRAM 모듈에 해당되는 경우, n은 2, 4 및 8 중 어느 하나일 수 있으나, 이에 제한되지 않는다.
도 3 및 도 4는 일 실시예에 따른 인-메모리 연산 유닛의 동작 주파수 차이로 인한 메모리 뱅크들의 동작의 차이를 비교하여 설명하기 위한 도면들이다.
도 3 및 도 4를 참고하면, 2개의 메모리 뱅크들(메모리 뱅크 1(321, 421) 및 메모리 뱅크 2(322, 422))은 1개의 인-메모리 연산 유닛(연산 유닛 1(311, 411))을 공유한다. 메모리 뱅크 1(321, 421) 및 메모리 뱅크 2(322, 422) 각각과 연산 유닛 1(311, 411) 간에는 X GB/s 속도로 데이터 송수신이 수행되는 것으로 가정하고, 메모리 뱅크 1(321, 421) 및 메모리 뱅크 2(322, 422) 각각은 250 MHz의 동작 주파수(제 2 동작 주파수)로 동작되는 것으로 가정한다. 여기서, 동작 주파수 250 MHz는 설명의 편의를 위하여 예로 든 임의의 수치이다.
도 3에 따르면, 연산 유닛 1(311)의 동작 주파수(제 1 동작 주파수)가 각 메모리 뱅크(321 또는 322)의 동작 주파수의 2배(n=2)에 해당하는 500 MHz (2 * 250 MHz)인 경우, 연산 유닛 1(311)은 각 메모리 뱅크(321 또는 322)의 동작 주기(1/(250*106) s = 4 ns) 내에 메모리 뱅크 1(321) 및 메모리 뱅크 2(322)에 실질적으로 동시에 액세스할 수 있다.
이와 비교하여, 도 4에 따르면, 연산 유닛 1(411)의 동작 주파수(제 1 동작 주파수)가 각 메모리 뱅크(421 또는 422)의 동작 주파수와 동일한 250 MHz인 경우, 연산 유닛 1(411)은 각 메모리 뱅크(421 또는 422)의 동작 주기(4 ns) 내에 어느 하나의 메모리 뱅크(421 또는 422)에만 액세스할 수 있을 뿐이다.
따라서, 인-메모리 연산 유닛의 동작 주파수(제 1 동작 주파수)를 메모리 뱅크의 동작 주파수(제 2 동작 주파수)보다 상승시킨다면, 인-메모리 프로세싱의 성능이 증가될 수 있다. 여기서, 도 3에서는 제 1 동작 주파수가 제 2 동작 주파수의 n배인 것으로 예로 들었으나, 이에 제한되지 않고 제 1 동작 주파수는 제 2 동작 주파수보다 n배 이하의 어느 배수만큼 클 수 있다. 즉, 제 1 동작 주파수와 제 2 동작 주파수 간의 관계는 아래 수학식 1과 같다.
(n은 1개의 인-메모리 연산 유닛에 매핑된 메모리 뱅크들의 개수)
즉, 인-메모리 연산 유닛의 연산 성능은 도 3에서의 연산 유닛 1(311)의 연산 성능인 2Y GOPS(giga operation per second)와 같이, 도 4에서의 연산 유닛 1(511)의 연산 성능인 Y GOPS보다 2배 향상될 수 있다.
도 5는 일 실시예에 따른 4배의 동작 주파수로 동작하는 1개의 인-메모리 연산 유닛에, 4개의 메모리 뱅크들이 할당된 것을 설명하기 위한 도면이다.
도 5를 참고하면, 4개의 메모리 뱅크들(메모리 뱅크 1(521), 메모리 뱅크 2(522), 메모리 뱅크 3(523) 및 메모리 뱅크 4(524))은 1개의 인-메모리 연산 유닛(연산 유닛 1(511))을 공유한다. 메모리 뱅크들(521, 522, 523, 524) 각각과 연산 유닛 1(511) 간에는 X GB/s 속도로 데이터 송수신이 수행되는 것으로 가정하고, 메모리 뱅크들(521, 522, 523, 524) 각각은 250 MHz의 동작 주파수(제 2 동작 주파수)로 동작되는 것으로 가정한다. 여기서, 동작 주파수 250 MHz는 설명의 편의를 위하여 예로 든 임의의 수치이다.
도 5에 따르면, 연산 유닛 1(511)의 동작 주파수(제 1 동작 주파수)가 각 메모리 뱅크(521, 522, 523, 524)의 동작 주파수(제 2 동작 주파수)의 4배(n=4)에 해당하는 1,000 MHz (4 * 250 MHz)인 경우, 연산 유닛 1(511)은 각 메모리 뱅크(521, 522, 523, 524)의 동작 주기(1/(250*106) s = 4 ns) 내에 메모리 뱅크들(521, 522, 523, 524)에 실질적으로 동시에 액세스할 수 있다.
즉, 1개의 인-메모리 연산 유닛에 매핑된 메모리 뱅크들의 개수에 비례하게 인-메모리 연산 유닛의 동작 주파수(제 1 동작 주파수)를 증가시킨다면, 메모리 뱅크의 동작 주기 내에 인-메모리 연산 유닛의 보다 효율적인 연산 처리(예를 들어, 4Y GOPS)가 가능해질 수 있다.
도 6a 및 도 6b는 일 실시예에 따라 4개의 메모리 뱅크들이 할당된 1개의 인-메모리 연산 유닛의 동작 주파수에 기초한 인-메모리 연산 유닛의 연산 성능을 비교하여 설명하기 위한 도면들이다.
도 6a를 참고하면, 1개의 인-메모리 연산 유닛(연산 유닛 1(611))에는 4개의 메모리 뱅크들(메모리 뱅크 1(621), 메모리 뱅크 2(622), 메모리 뱅크 3(623) 및 메모리 뱅크 4(624))이 매핑된다 (n=4).
도 6a의 연산 유닛 1(611)의 동작 주파수(제 1 동작 주파수)는 각 메모리 뱅크(621, 622, 623, 624)의 동작 주파수(제 2 동작 주파수)의 2배(2 < n)에 해당하는 500 MHz (2 * 250 MHz)으로 설정될 수 있다. 즉, 연산 유닛 1(611)의 동작 주파수(제 1 동작 주파수)는 수학식 1에서 설명된 바와 같이, 각 메모리 뱅크(621, 622, 623, 624)의 동작 주파수(제 2 동작 주파수)보다 n (n=4) 이하의 어느 배수(즉, 2배)만큼 클 수 있다. 이에 따라, 연산 유닛 1(611)은 메모리 뱅크 동작 주기(4 ns) 내에 어느 2개의 메모리 뱅크들 단위로(예를 들어, 메모리 뱅크들(621, 622) 쌍 또는 메모리 뱅크들(623, 624) 쌍) 실질적으로 동시에 액세스할 수 있다.
도 5에서와 마찬가지로, 1개의 인-메모리 연산 유닛에 매핑된 메모리 뱅크들의 개수에 기초하여 인-메모리 연산 유닛의 동작 주파수(제 1 동작 주파수)를 증가시킨다면, 메모리 뱅크의 동작 주기 내에 인-메모리 연산 유닛의 보다 효율적인 연산 처리(예를 들어, 2Y GOPS)가 가능해질 수 있다.
한편, 도 6b에는 1개의 인-메모리 연산 유닛(연산 유닛 1(631))의 동작 주파수(제 1 동작 주파수, 250MHz)가 메모리 뱅크들(메모리 뱅크 1(641), 메모리 뱅크 2(642), 메모리 뱅크 3(643) 및 메모리 뱅크 4(644))의 동작 주파수(제 2 동작 주파수, 250MHz)와 동일한 경우에 대해 도시되어 있다. 즉, "제 1 동작 주파수 = 제 2 동작 주파수 = 250MHz"이다. 앞서 도 4에서 설명된 바와 유사하게, 도 6b의 연산 유닛 1(631)은 각 메모리 뱅크(641, 642, 643, 644)의 동작 주기(4 ns) 내에 어느 하나의 메모리 뱅크(641, 642, 643, 644)에만 액세스할 수 있을 뿐이다 (Y GOPS).
도 7은 일 실시예에 따른 연산의 파이프라이닝을 설명하기 위한 도면이다.
파이프라이닝은 연산이 수행되는 과정을 여러 스테이지들로 나누어 각 스테이지를 병렬적으로(동시에) 처리함으로써 연산 처리 속도를 향상시키는 기술이다.
도 7을 참고하면, 주어진 연산은 여러 서브 연산들의 멀티 파이프라인 스테이지들로 파이프라이닝되고, 이에 따라 파이프라이닝된 연산(700)이 생성될 수 있다. 여기서, 주어진 연산은 예를 들어, 뉴럴 네트워크의 MAC(multiply-accumulate) 연산일 수 있으며, 각 서브 연산은 데이터 인출(fetch), 곱셈 연산, 덧셈 연산, 데이터 출력 등의 일련의 개별 연산들에 대응할 수 있다.
도 7에서 설명되는 예시적 동작 주파수(250MHz, 500MHz)로 동작하는 인-메모리 연산 유닛의 파이프라이닝 처리에 대해서는, 도 6a 및 도 6b와 연계하여 설명하도록 한다.
주어진 연산이 도 6b에 도시된 인-메모리 연산 유닛(연산 유닛 1(631))의 동작 주파수(즉, 250MHz)에 대응하는 동작 주기 4 ns 단위로 파이프라이닝된 경우, 도 6b의 인-메모리 연산 유닛(연산 유닛 1(631))은 3 사이클들에 걸쳐 파이프라이닝된 연산(700)(3개의 파이프라인 스테이지들(STAGE 1, STAGE 2, STAGE 3)로 구분)을 처리할 수 있고, 각 사이클(동작 주기: 4 ns)마다 파이프라이닝을 수행할 수 있다. 이때, 도 6b에서 설명된 바와 같이, 각 메모리 뱅크(도 6b의 641-644)의 동작 주파수 250MHz (동작 주기: 4 ns)는 인-메모리 연산 유닛(연산 유닛 1(631))의 동작 주파수 250MHz (동작 주기: 4 ns)와 동일하므로, 인-메모리 연산 유닛(연산 유닛 1(631))은 메모리 뱅크(641-644)의 동작 주기(4 ns) 내에 하나의 메모리 뱅크(641-644)에만 액세스할 수 있을 뿐이다.
하지만, 주어진 연산이 도 6a에 도시된 인-메모리 연산 유닛(연산 유닛 1(611))의 동작 사이클 500MHz (=2*250MHz)에 대응하는 동작 주기 2 ns 단위로 파이프라이닝된 경우, 도 6a의 인-메모리 연산 유닛(연산 유닛 1(611))은 6 사이클들에 걸쳐 파이프라이닝된 연산(700)(6개의 파이프라인 스테이지들(STAGE 1-1, STAGE 1-2, STAGE 2-1, STAGE 2-2, STAGE 3-1, STAGE 3-2)로 구분)을 처리할 수 있고, 각 사이클(2 ns)마다 파이프라이닝을 수행할 수 있다. 이때, 도 6a에서 설명된 바와 같이, 각 메모리 뱅크(도 6a의 621-624)의 동작 주파수 250MHz (동작 주기: 4 ns)는 인-메모리 연산 유닛(연산 유닛 1(611))의 동작 주파수 500MHz (동작 주기: 2 ns)의 반절이므로, 인-메모리 연산 유닛(연산 유닛 1(611))은 메모리 뱅크(621-624)의 동작 주기(4 ns) 내에 2개의 메모리 뱅크들(예를 들어, 621 및 622)에 실질적으로 동시에 액세스하여 2 사이클들에 대응하는 서브 연산들을 한번에 처리할 수 있다.
즉, 주어진 연산이 인-메모리 연산 유닛의 제 1 동작 주파수에 대응하는 제 1 동작 주기 내 처리 가능한 서브 연산 단위의 멀티 파이프라인 스테이지들로 파이프라이닝되고, 인-메모리 연산 유닛의 제 1 동작 주파수가 메모리 뱅크의 제 2 동작 주파수보다 큰 경우, 인-메모리 연산 유닛은 동일한 시간 내에 보다 많은 파이프라이닝 연산들의 인-메모리 프로세싱을 수행할 수 있다. 여기서, 제 1 동작 파수와 제 2 동작 주파수 간의 관계는 앞서 수학식 1에서 설명된 바와 같다.
도 8은 일 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이다.
도 8을 참고하면, 메모리 다이(100)에는 4의 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4) 단위로 1개의 인-메모리 연산 유닛(연산 유닛 1(111))에 할당된 구현 예에 대해 도시되어 있다. 이는 메모리 다이(100)에 구비된 전체 인-메모리 연산 유닛들(도 1의 110) 및 메모리 뱅크들(도 1의 120) 중 일부의 구현 예에 해당될 수 있다. 따라서, 메모리 다이(100) 상에서 나머지 인-메모리 연산 유닛들(110) 및 메모리 뱅크들(120)은 도 8에 도시된 바와 유사하게 구현되고 동작될 수 있다.
메모리 다이(100) 상에서 인-메모리 연산 유닛(연산 유닛 1(111))과 메모리 뱅크들 각각은 연결된다. 이때, 메모리 다이(100)는 연산 유닛 1(111)에 할당된 4개의 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4) 중 어느 하나를 선택하는 뱅크 셀렉터(140)와, 뱅크 셀렉터(140)에 의해 선택된 메모리 뱅크로부터 액세스된 데이터를 연산 유닛 1(111)으로 제공하는 멀티플렉서(MUX)(150)를 제어하기 위한 뱅크 아비터(bank arbiter)(160)를 구비할 수 있다. 메모리 다이(100) 상에서 구현된 하드웨어 구성요소들 간에는 데이터 버스(170)를 통해 연결될 수 있다.
연산 유닛 1(111)은 제 1 동작 주파수로 동작하여, 파이프라이닝된(pipelined) 연산(810)의 인-메모리 프로세싱을 수행한다. 여기서, 연산(810)은 연산 유닛 1(111)의 제 1 동작 주파수에 대응하는 제 1 동작 주기 내 처리 가능한 서브 연산 단위의 멀티 파이프라인 스테이지들로 파이프라이닝된 것일 수 있다. 연산 유닛 1(111)은 파이프라이닝된 연산(810)의 각 파이프라인 스테이지에서의 서브 연산 결과를 버퍼링하기 위한 적어도 하나의 파이프라인 레지스터(1111)를 포함할 수 있다.
메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4) 각각은 제 2 동작 주파수로 동작하여, 파이프라이닝된 연산이 처리되는 동안 연산 유닛 1(111)으로부터 요청된 데이터의 액세스 동작을 수행한다.
클럭 디바이더(130)는 외부(메모리 컨트롤러(20) 또는 호스트 등)로부터 제공된 클럭 신호(BANK CLK)를, 인-메모리 연산 유닛들(연산 유닛 1(111))과 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4)에 분배한다. 여기서, 클럭 디바이더(130)는 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4)에는 클럭 신호(BANK CLK)를 그대로 제공하고, 인-메모리 연산 유닛들(연산 유닛 1(111))에는 인-메모리 연산 유닛들(연산 유닛 1(111))이 제 1 동작 주파수로 동작하기 위한 제 1 클럭 신호(CLK1)를 제공한다.
즉, 클럭 디바이더(130)는 제 1 동작 주파수와 제 2 동작 주파수 간의 관계에 기초하여 클럭 신호(BANK CLK)로부터 제 1 클럭 신호(CLK1)를 생성하여 분배한다. 예를 들어, 도 6a에서 설명된 바와 같이, 제 1 동작 주파수가 제 2 동작 주파수의 2배인 경우, 제 1 클럭 신호(CLK1)는 클럭 신호(BANK CLK)의 2배일 수 있다. 하지만, 제 1 클럭 신호(CLK1)는 1개의 인-메모리 연산 유닛에 할당된 메모리 뱅크들의 개수(n) 또는 제 1 동작 주파수가 제 2 동작 주파수 간의 관계(수학식 1) 등에 따라 달라질 수 있다.
연산 유닛 1(111)은 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4) 각각의 제 2 동작 주파수의 2배인 제 1 동작 주파수로 동작한다. 다시 말하면, 제 1 동작 주파수는 제 2 동작 주파수의 2배이다. 앞서, n은 1개의 인-메모리 연산 유닛에 할당된 메모리 뱅크들의 개수에 해당되는 것으로 설명되었고, 제 1 동작 주파수와 제 2 동작 주파수 간의 관계는 수학식 1에서 설명되었다.
한편, 뱅크 셀렉터(140)는 클럭 신호(BANK CLK)에 따라 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4)과 동일하게 제 2 동작 주파수로 동작되고, 뱅크 아비터(160)는 제 1 클럭 신호(CLK1)에 따라 연산 유닛 1(111)과 동일하게 제 1 동작 주파수로 동작될 수 있다.
뱅크 셀렉터(140)는 제 1 단자(1ST)를 통해 어느 동작 주기 내에서 메모리 뱅크들(BANK 1 및 BANK 2)을 인에이블하기 위한 제어 신호를 메모리 뱅크들(BANK 1 및 BANK 2)의 인에이블 단자(EN)에 제공하고, 제 2 단자(2ND)를 통해 다음 동작 주기 내에서 메모리 뱅크들(BANK 3 및 BANK 4)을 인에이블하기 위한 제어 신호를 메모리 뱅크들(BANK 3 및 BANK 4)의 인에이블 단자(EN)에 제공할 수 있다. 뱅크 아비터(160)는 어느 동작 주기 내에서 연산 유닛 1(111)이 인에이블된 2개의 메모리 뱅크들에 차례로 액세스할 수 있도록, 멀티플렉서(MUX)(150)를 제어할 수 있다.
도 9는 도 8에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 9를 참고하면, 클럭 신호(BANK CLK)의 주파수는 제 1 클럭 신호(CLK Divider_Output, 도 8의 CLK1)의 1/2이다.
클럭 신호(BANK CLK)의 한 주기(한 사이클) 동안, 뱅크 셀렉터(140)의 제 1 단자(1ST)를 통해 출력된 제어 신호(BANK Selector_1ST)에 의해 메모리 뱅크들(BANK 1 및 BANK 2)이 인에이블될 수 있다. 이때, 메모리 뱅크들(BANK 3 및 BANK 4)은 디스에이블 상태에 있다.
제 1 클럭 신호(CLK Divider_Output)의 주파수는 클럭 신호(BANK CLK)의 주파수의 2배이므로, 제 1 클럭 신호(CLK Divider_Output)의 두 주기들 동안 메모리 뱅크들(BANK 1 및 BANK 2)의 데이터들(DATA1(911) 및 DATA1(912))이 차례로 연산 유닛 1(111)에 액세스될 수 있다.
클럭 신호(BANK CLK)의 다음 주기(다음 사이클) 동안에는, 다른 메모리 뱅크들(BANK 3 및 BANK 4)의 데이터들(DATA1(913) 및 DATA1(914))이 차례로 연산 유닛 1(111)에 액세스될 수 있다.
이와 같은 순서로, 클럭 신호(BANK CLK)의 네 주기들 동안, 메모리 뱅크들(BANK 1, BANK 2, BANK 3, BANK 4)의 데이터들(911 내지 924)은 차례로 연산 유닛 1(111)의 입력으로서 액세스될 수 있다.
도 10은 일 실시예에 따라 도 7의 파이프라이닝된 연산의 인-메모리 프로세싱을 수행하는 경우 각 메모리 뱅크에 할당되는 파이프라인 스테이지들을 설명하기 위한 도면이다.
도 10을 참고하면, 인-메모리 연산 유닛의 동작 주파수가 메모리 뱅크의 동작 주파수의 2배인 경우의 파이프라인 스테이지 할당(1020)과 인-메모리 연산 유닛의 동작 주파수가 메모리 뱅크의 동작 주파수와 동일한 경우의 파이프라인 스테이지 할당(1010)이 비교하여 도시되어 있다.
파이프라이닝된 연산(700)은 6개의 서브 연산들(STAGEs 1-1 내지 3-2)의 멀티 파이프라인 스테이지들을 포함한다. 도 10에 도시된, 연산 유닛 1(111)에 의해 수행되는 연산들(OP#) 각각은 파이프라이닝된 연산(700)의 6개의 서브 연산들(STAGEs 1-1 내지 3-2) 중 어느 하나에 해당할 수 있다.
각 타임라인(사이클)에서의 파이프라인 스테이지 할당(1020)은 도 6a에서 설명된, 연산 유닛 1(611)(동작 주파수: 500MHz, 동작 주기: 2ns), 메모리 뱅크들(621-624)(동작 주파수: 250MHz, 동작 주기: 4ns)의 인-메모리 프로세싱에 따른 파이프라이닝에 해당한다.
구체적으로, 연산 유닛 1(611)은 N번째 사이클에서, 메모리 뱅크 1(621)에 액세스하여 서브 연산(STAGE 1-1)의 연산 1(OP1)을 처리하고 메모리 뱅크 2(622)에 액세스하여 서브 연산(STAGE 1-1)의 연산 1(OP1)을 처리한다. 한편, 연산 유닛 1(611)은 메모리 뱅크 2(622)로부터 연산 1(OP1)의 데이터를 액세스하는 것과 동시에, 다음 서브 연산(STAGE 1-2)의 연산 1(OP1)의 파이프라이닝을 수행할 수 있다. 이와 같은 방식으로, 연산 유닛 1(611)은 도 10에 도시된 (N+5)번째 사이클 및 그 다음의 사이클들에서도 메모리 뱅크들(621-624)에 교대로 액세스함으로써 파이프라이닝된 연산(700)을 처리할 수 있다.
한편, 파이프라인 스테이지 할당(1010)은 도 6b에서 설명된, 연산 유닛 1(631)(동작 주파수: 250MHz, 동작 주기: 4ns), 메모리 뱅크들(641-644)(동작 주파수: 250MHz, 동작 주기: 4ns)의 인-메모리 프로세싱에 따른 파이프라이닝에 해당하는 것으로서, 앞서 설명된 파이프라인 스테이지 할당(1020)과 비교하여, 연산 유닛 1(111)의 연산 처리량(throughput)가 낮다는 것을 알 수 있다. 즉, 메모리 뱅크들의 동작 주파수(제 2 동작 주파수)에 비해 인-메모리 연산 유닛의 동작 주파수(제 1 동작 주파수)를 증가시킴으로써, 보다 빠르게 많은 연산량을 처리할 수 있어 인-메모리 연산 유닛의 연산 성능이 향상될 수 있다.
도 11은 일 실시예에 따라 인-메모리 연산 유닛에서 벡터 연산을 수행하는 것을 설명하기 위한 도면이다.
도 11을 참고하면, 인-메모리 연산 유닛(1101)에서 메모리 뱅크들(BANK 1 또는 BANK 2)에 저장된 오퍼랜드 A와 메모리 뱅크들(BANK 3 또는 BANK 4)에 저장된 오퍼랜드 B의 벡터 연산을 수행하기 위해서는 2 단계의 처리가 필요하다. 구체적으로, 먼저 인-메모리 연산 유닛(1101)은 BANK 1에 액세스하여 오퍼랜드 A를 리드(read)하고, 리드된 오퍼랜드 A를 레지스터(REG. A)에 저장한다(사이클 ①). 그리고 나서, 인-메모리 연산 유닛(1101)은 BANK 3에 액세스하여 오퍼랜드 B를 리드(read)하고, 리드된 오퍼랜드 B와 레지스터(REG. A)에 저장된 오퍼랜드 A 간의 벡터 연산(곱셈)을 수행한다(사이클 ②). 즉, MAC 연산과 같은 매트릭스 연산(또는 벡터 연산)을 수행하기 위하여, 인-메모리 연산 유닛(1101)은 두 번의 사이클들에서 오퍼랜드들 간의 연산을 수행할 수 있다. 이와 같은 연산 처리는 인-메모리 연산 유닛(1101)과 메모리 뱅크들(BANKs 1-4) 사이에 1개의 멀티플렉서(MUX)만 구비되어 있을 경우에 해당한다. 하지만, 인-메모리 연산 유닛(1101)과 메모리 뱅크들(BANKs 1-4) 사이에 보다 많은 멀티플렉서들(MUXs)이 구비된다면, 동시에 두 오퍼랜드들을 서로 다른 메모리 뱅크들로부터 리드함으로써 보다 효율적인 연산이 가능해질 수 있다.
도 12는 다른 실시예에 따른 메모리 다이 상에서 인-메모리 연산 유닛과 메모리 뱅크들 간의 하드웨어 연결을 설명하기 위한 도면이고, 도 13은 도 12에서 설명된 메모리 디바이스의 하드웨어를 이용하여 연산을 수행할 경우의 타이밍 다이어그램을 설명하기 위한 도면이다.
도 12를 참고하면, 앞서 도 8에서 설명된 바와 달리, 인-메모리 연산 유닛(1250)과 메모리 뱅크들(BANKs 1-4) 사이에는 2개의 멀티플렉서들(MUXs)(1241, 4242)이 구비되어 있다. 또한, 뱅크 아비터(1230)는 각각의 멀티플렉서들(MUXs)(1241, 4242)을 독립적으로 제어하기 위한, 오퍼랜드 A 아비터(1231) 및 오퍼랜드 B 아비터(1232)를 포함한다.
도 13의 타이밍 다이어그램에 따르면, 클럭 신호(BANK CLK)의 한 주기(한 사이클) 동안, 뱅크 셀렉터(1220)는 모든 메모리 뱅크들(BANKs 1-4)을 인에이블하기 위한 제어 신호들(BANK Selector_1ST 및 BANK Selector_2ND)를 제 1 단자(1ST) 및 제 2 단자(2ND)를 통해 메모리 뱅크들(BANKs 1-4)로 제공한다.
제 1 클럭 신호(CLK Divider_Output)의 주파수는 클럭 신호(BANK CLK)의 주파수의 2배이므로, 제 1 클럭 신호(CLK Divider_Output)의 두 주기들 동안 BANK 1의 오퍼랜드 A 데이터(OPD_A1), BANK 2의 오퍼랜드 A 데이터(OPD_A1), BANK 3의 오퍼랜드 B 데이터(OPD_B1), BANK 4의 오퍼랜드 B 데이터(OPD_B1)가 모두 액세스될 수 있다. 여기서, 오퍼랜드 A 아비터(1231) 및 오퍼랜드 B 아비터(1232)에 의해 멀티플렉서들(MUXs)(1241, 4242)이 메모리 뱅크들(BANK 1 또는 BANK 2) 또는 메모리 뱅크들(BANK 3 또는 BANK 4)에 실질적으로 동시에 액세스할 수 있으므로, 인-메모리 연산 유닛(1250)은 오퍼랜드 A 데이터(OPD_A1, OPD_A2, OPD_A3 또는 OPD_A4)와 오퍼랜드 B 데이터(OPD_B1, OPD_B2, OPD_B3 또는 OPD_B4)를 실질적으로 동시에 액세스할 수 있다. 따라서, 인-메모리 연산 유닛(1250)은 인-메모리 연산 유닛(1250)의 한 동작 주기 내에 오퍼랜드 A 및 오퍼랜드 B 간의 연산을 수행할 수 있다.
도 14는 도 12에서 설명된 하드웨어 구현을 이용하여 서로 다른 메모리 뱅크들에 저장된 서로 다른 오퍼랜드들을 인-메모리 프로세싱하는 것을 설명하기 위한 도면이다.
도 14를 참고하면, 인-메모리 연산 유닛(ALUs 1-4)의 동작 주파수(2*250 MHz)가 메모리 뱅크들(BANKs 1-16)의 동작 주파수(250 MHz)보다 큰 경우, 서로 다른 메모리 뱅크들(BANKs 1-16)에 독립적으로 액세스될 수 있는 복수의 멀티플렉서들(MUXs)이 구비된 도 12에서 설명된 하드웨어 구현을 이용함으로써, 서로 다른 메모리 뱅크들(BANKs 1-16)에 저장된 서로 다른 오퍼랜드들(오퍼랜드 A 및 오퍼랜드 B) 간의 연산은 인-메모리 연산 유닛(ALUs 1-4)의 한 동작 주기(즉, 1 / (2*250 MHz) = 2 ns) 내에 처리될 수 있다.
도 15는 일 실시예에 따른 메모리 디바이스를 포함하는 컴퓨팅 시스템을 나타내는 블록도이다. 모바일 기기나 데스크 탑 컴퓨터와 같은 컴퓨팅 시스템(1500)에 앞서 설명된 인-메모리 프로세싱을 수행하는 메모리 디바이스가 RAM(1520)으로 장착될 수 있다. RAM(1520)으로 장착되는 메모리 디바이스는 앞서 설명되었던 실시예들 중 어느 하나의 메모리 디바이스가 적용될 수 있다.
구체적으로, RAM(1520)으로 장착되는 인-메모리 프로세싱을 수행하는 메모리 디바이스는, 파이프라이닝된 연산의 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들, 및 n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되고 파이프라이닝된 연산이 처리되는 동안 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 복수의 메모리 뱅크들을 포함한다. 여기서, 인-메모리 연산 유닛들 각각은 메모리 뱅크들 각각의 제 2 동작 주파수의 n배 또는 n배 이하인 제 1 동작 주파수로 동작할 수 있다.
컴퓨팅 시스템(1500)은 중앙 처리 장치(CPU)(1510), RAM(1520), 유저 인터페이스(1530)와 불휘발성 메모리(1540)를 포함하며, 이들 구성요소는 각각 버스(1550)에 전기적으로 연결되어 있다. 불휘발성 메모리(1540)는 SSD나 HDD와 같은 대용량 저장 장치가 사용될 수 있다.
컴퓨팅 시스템(1500)에 앞서 설명된 메모리 디바이스(또는, 메모리 시스템)가 적용됨에 따라, RAM(1520)에 구비되는 메모리 디바이스는 인-메모리 프로세싱이 가능할 수 있다.
본 실시예와 관련된 기술 분야에서 통상의 지식을 가진 자는 상기된 기재의 본질적인 특성에서 벗어나지 않는 범위에서 실시예가 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예는 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 권리 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 실시예에 포함된 것으로 해석되어야 할 것이다.
Claims (14)
- 인-메모리 프로세싱(in-memory processing)을 수행하는 메모리 디바이스에 있어서,
파이프라이닝된(pipelined) 연산의 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들; 및
n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되고, 상기 파이프라이닝된 연산이 처리되는 동안 상기 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 복수의 메모리 뱅크들을 포함하고,
상기 인-메모리 연산 유닛들 각각은 상기 메모리 뱅크들 각각의 제 2 동작 주파수의 n배 또는 n배 이하인 제 1 동작 주파수로 동작하는,
메모리 디바이스. - 제 1 항에 있어서,
상기 연산은
상기 제 1 동작 주파수에 대응하는 제 1 동작 주기 내 처리 가능한 서브 연산 단위의 멀티 파이프라인 스테이지들로 파이프라이닝된 것인, 메모리 디바이스. - 제 2 항에 있어서,
상기 인-메모리 연산 유닛들 각각은
상기 메모리 뱅크들 각각의 상기 제 2 동작 주파수에 대응하는 제 2 동작 주기 내에 상기 n개 또는 상기 n개 이하의 메모리 뱅크들에 액세스하는,
메모리 디바이스. - 제 1 항에 있어서,
상기 파이프라이닝된 연산의 각 파이프라인 스테이지에서의 서브 연산 결과를 버퍼링하기 위한 적어도 하나의 파이프라인 레지스터를 더 포함하는,
메모리 디바이스. - 제 1 항에 있어서,
외부로부터 제공된 클럭 신호로부터, 상기 인-메모리 연산 유닛들이 상기 제 1 주파수로 동작하기 위한 제 1 클럭 신호를 생성하고, 상기 생성된 제 1 클럭 신호를 인-메모리 연산 유닛들에 분배하는 클럭 디바이더를 더 포함하는,
메모리 디바이스. - 제 1 항에 있어서,
제 1 인-메모리 연산 유닛에 할당된 n개의 메모리 뱅크들 중 일부를 순차적으로 인에이블하는 뱅크 셀렉터;
상기 뱅크 셀렉터에 의해 인에이블된 메모리 뱅크로부터 액세스된 데이터를 상기 제 1 인-메모리 연산 유닛으로 제공하는 멀티플렉서; 및
상기 멀티플렉서로부터 출력될 데이터를 제어하는 뱅크 아비터를 더 포함하는,
메모리 디바이스. - 제 6 항에 있어서,
상기 뱅크 셀렉터는 상기 제 2 동작 주파수에 기초하여 동작되고,
상기 뱅크 아비터는 상기 제 1 동작 주파수에 기초하여 동작되는,
메모리 디바이스. - 제 1 항에 있어서,
제 1 인-메모리 연산 유닛에 할당된 n개의 메모리 뱅크들은 제 1 오퍼랜드가 저장된 제 1 메모리 뱅크 및 제 2 오퍼랜드가 저장된 제 2 메모리 뱅크를 포함하고,
상기 메모리 디바이스는 상기 n개의 메모리 뱅크들과 상기 제 1 인-메모리 연산 유닛 사이에 구비된, 상기 제 1 오퍼랜드를 멀티플렉싱하는 제 1 멀티플렉서 및 상기 제 2 오퍼랜드를 멀티플렉싱하는 제 2 멀티플렉서를 포함하는,
메모리 디바이스. - 제 8 항에 있어서,
상기 제 1 멀티플렉서 및 상기 제 2 멀티플렉서는
상기 제 1 동작 주파수에 대응하는 제 1 동작 주기 내에 상기 제 1 인-메모리 연산 유닛에 상기 제 1 오퍼랜드 및 상기 제 2 오퍼랜드를 제공하는,
메모리 디바이스. - 인-메모리 프로세싱(in-memory processing)을 수행하는 메모리 디바이스에 있어서,
파이프라이닝된(pipelined) 연산의 인-메모리 프로세싱을 수행하는 복수의 인-메모리 연산 유닛들;
n개의 메모리 뱅크들 단위로 각 인-메모리 연산 유닛에 할당되고, 상기 파이프라이닝된 연산이 처리되는 동안 상기 각 인-메모리 연산 유닛으로부터 요청된 데이터의 액세스 동작을 수행하는 복수의 메모리 뱅크들; - 상기 인-메모리 연산 유닛들 각각은 상기 메모리 뱅크들 각각의 제 2 동작 주파수의 n배 또는 n배 이하인 제 1 동작 주파수로 동작하고, -
상기 인-메모리 연산 유닛들 각각에 할당된 상기 메모리 뱅크들 중 인에이블된 적어도 하나의 메모리 뱅크로부터 액세스된 데이터를 상기 인-메모리 연산 유닛들 각각으로 제공하는 적어도 하나의 멀티플렉서를 포함하는,
메모리 디바이스. - 제 10 항에 있어서,
상기 연산은
상기 제 1 동작 주파수에 대응하는 제 1 동작 주기 내 처리 가능한 서브 연산 단위의 멀티 파이프라인 스테이지들로 파이프라이닝된 것인, 메모리 디바이스. - 제 11 항에 있어서,
상기 인-메모리 연산 유닛들 각각은
상기 메모리 뱅크들 각각의 상기 제 2 동작 주파수에 대응하는 제 2 동작 주기 내에 상기 n개 또는 상기 n개 이하의 메모리 뱅크들에 액세스하는,
메모리 디바이스. - 제 10 항에 있어서,
상기 파이프라이닝된 연산의 각 파이프라인 스테이지에서의 서브 연산 결과를 버퍼링하기 위한 적어도 하나의 파이프라인 레지스터를 더 포함하는,
메모리 디바이스. - 제 10 항에 있어서,
제 1 인-메모리 연산 유닛에 할당된 n개의 메모리 뱅크들은 제 1 오퍼랜드가 저장된 제 1 메모리 뱅크 및 제 2 오퍼랜드가 저장된 제 2 메모리 뱅크를 포함하고,
상기 적어도 하나의 멀티플렉서는 상기 제 1 오퍼랜드를 멀티플렉싱하는 제 1 멀티플렉서 및 상기 제 2 오퍼랜드를 멀티플렉싱하는 제 2 멀티플렉서를 포함하는,
메모리 디바이스.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200128274A KR20220045480A (ko) | 2020-10-05 | 2020-10-05 | 인-메모리 프로세싱을 수행하는 메모리 디바이스 |
US17/314,476 US20220107803A1 (en) | 2020-10-05 | 2021-05-07 | Memory device for performing in-memory processing |
CN202110528518.2A CN114388012A (zh) | 2020-10-05 | 2021-05-14 | 用于执行存储器内处理的存储器装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200128274A KR20220045480A (ko) | 2020-10-05 | 2020-10-05 | 인-메모리 프로세싱을 수행하는 메모리 디바이스 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220045480A true KR20220045480A (ko) | 2022-04-12 |
Family
ID=80932261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200128274A KR20220045480A (ko) | 2020-10-05 | 2020-10-05 | 인-메모리 프로세싱을 수행하는 메모리 디바이스 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220107803A1 (ko) |
KR (1) | KR20220045480A (ko) |
CN (1) | CN114388012A (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113362878A (zh) * | 2020-03-06 | 2021-09-07 | 三星电子株式会社 | 用于存储器内计算的方法和用于计算的*** |
EP4332751A1 (en) * | 2022-08-30 | 2024-03-06 | Samsung Electronics Co., Ltd. | Apparatus and method with in-memory computing (imc) |
CN117667208B (zh) * | 2024-02-01 | 2024-05-24 | 腾讯科技(深圳)有限公司 | 数据运算方法、存储器及计算机设备 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5270832A (en) * | 1990-03-14 | 1993-12-14 | C-Cube Microsystems | System for compression and decompression of video data using discrete cosine transform and coding techniques |
AU3330793A (en) * | 1991-12-23 | 1993-07-28 | Intel Corporation | Interleaved cache for multiple accesses per clock in a microprocessor |
KR100515072B1 (ko) * | 2000-06-30 | 2005-09-16 | 주식회사 하이닉스반도체 | 리프레시 동작에서의 전력소모를 줄이기 위한반도체메모리장치 |
US6845424B2 (en) * | 2002-01-31 | 2005-01-18 | Intel Corporation | Memory pass-band signaling |
EP1512079B1 (en) * | 2002-05-24 | 2019-02-27 | Intel Corporation | Pseudo multiport data memory has stall facility |
US6993637B1 (en) * | 2002-11-07 | 2006-01-31 | Lsi Logic Corporation | Unified memory system for multiple processors and method for controlling the same |
US8954700B2 (en) * | 2011-08-02 | 2015-02-10 | Cavium, Inc. | Method and apparatus for managing processing thread migration between clusters within a processor |
US9971711B2 (en) * | 2014-12-25 | 2018-05-15 | Intel Corporation | Tightly-coupled distributed uncore coherent fabric |
EP3271826B1 (en) * | 2015-07-30 | 2021-09-29 | Hewlett Packard Enterprise Development LP | Interleaved access of memory |
US11514996B2 (en) * | 2017-07-30 | 2022-11-29 | Neuroblade Ltd. | Memory-based processors |
US20220269645A1 (en) * | 2019-08-13 | 2022-08-25 | Neuroblade Ltd. | Memory mat as a register file |
US11635911B2 (en) * | 2020-01-07 | 2023-04-25 | SK Hynix Inc. | Processing-in-memory (PIM) system and operating methods of the PIM system |
TW202141290A (zh) * | 2020-01-07 | 2021-11-01 | 韓商愛思開海力士有限公司 | 記憶體中處理(pim)系統和pim系統的操作方法 |
KR20210092078A (ko) * | 2020-01-15 | 2021-07-23 | 삼성전자주식회사 | 병렬 연산 처리를 수행하는 메모리 장치 및 그 동작방법, 그리고 메모리 장치를 제어하는 메모리 컨트롤러의 동작방법 |
US11262949B2 (en) * | 2020-05-28 | 2022-03-01 | Advanced Micro Devices, Inc. | Command throughput in PIM-enabled memory using available data bus bandwidth |
US11681465B2 (en) * | 2020-06-12 | 2023-06-20 | Advanced Micro Devices, Inc. | Dynamic multi-bank memory command coalescing |
KR20220031793A (ko) * | 2020-09-03 | 2022-03-14 | 삼성전자주식회사 | 메모리 장치, 그것을 포함하는 메모리 시스템, 그것을 제어하는 제어기 및 그것의 동작 방법 |
US20220206869A1 (en) * | 2020-12-28 | 2022-06-30 | Advanced Micro Devices, Inc. | Virtualizing resources of a memory-based execution device |
-
2020
- 2020-10-05 KR KR1020200128274A patent/KR20220045480A/ko active Search and Examination
-
2021
- 2021-05-07 US US17/314,476 patent/US20220107803A1/en active Pending
- 2021-05-14 CN CN202110528518.2A patent/CN114388012A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN114388012A (zh) | 2022-04-22 |
US20220107803A1 (en) | 2022-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12019895B2 (en) | Apparatuses and methods for data movement | |
US11016811B2 (en) | Apparatuses and methods to determine timing of operations | |
US11482260B2 (en) | Apparatuses and methods for scatter and gather | |
US11614877B2 (en) | Apparatuses and methods for data movement | |
US11682449B2 (en) | Apparatuses and methods for compute in data path | |
US10878856B2 (en) | Data transfer between subarrays in memory | |
KR20220045480A (ko) | 인-메모리 프로세싱을 수행하는 메모리 디바이스 | |
KR20200108774A (ko) | 순환 큐 기반의 명령어 메모리를 포함하는 메모리 장치 및 그 동작방법 | |
EP3997563A1 (en) | Methods for performing processing-in-memory operations, and related memory devices and systems | |
KR20220127601A (ko) | 인터페이스를 이용하여 내부 프로세싱을 수행하는 메모리 시스템, 메모리 장치 및 메모리 장치의 동작 방법 | |
CN115698970A (zh) | 具有近存储器地址生成的存储器访问命令 | |
US20200293452A1 (en) | Memory device and method including circular instruction memory queue | |
US11494121B2 (en) | Memory device for performing in-memory processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |