KR20220149729A - 프로세싱 인 메모리를 사용하는 카운터 기반 곱셈 - Google Patents

프로세싱 인 메모리를 사용하는 카운터 기반 곱셈 Download PDF

Info

Publication number
KR20220149729A
KR20220149729A KR1020227034162A KR20227034162A KR20220149729A KR 20220149729 A KR20220149729 A KR 20220149729A KR 1020227034162 A KR1020227034162 A KR 1020227034162A KR 20227034162 A KR20227034162 A KR 20227034162A KR 20220149729 A KR20220149729 A KR 20220149729A
Authority
KR
South Korea
Prior art keywords
multiplier
bit
memory
popcount
result
Prior art date
Application number
KR1020227034162A
Other languages
English (en)
Inventor
드미트리 유다노브
Original Assignee
마이크론 테크놀로지, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크론 테크놀로지, 인크. filed Critical 마이크론 테크놀로지, 인크.
Publication of KR20220149729A publication Critical patent/KR20220149729A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5318Multiplying 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/525Multiplying only in serial-serial fashion, i.e. both operands being entered serially
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/607Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers number-of-ones counters, i.e. devices for counting the number of input lines set to ONE among a plurality of input lines, also called bit counters or parallel counters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Neurology (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Memory System (AREA)
  • Complex Calculations (AREA)
  • Dram (AREA)

Abstract

본 개시는 예를 들어, 팝카운트 연산을 사용하여 메모리에서 곱셈 연산을 수행하도록 구성된 프로세싱 인 메모리(Processing-In-Memory) 디바이스와 같은 메모리 디바이스를 위한 시스템 및 방법에 관한 것이다. 곱셈 연산은 대응하는 피승수들에 곱해진 승수들의 합산을 포함할 수 있다. 입력들은 메모리 어레이 내의 특정 구성들로 배열될 수 있다. 감지 증폭기들은 비트 라인들을 따라 활성 비트들을 카운팅함으로써 팝카운트를 수행하는 데 사용될 수 있다. 하나 이상의 레지스터들은 곱셈 연산들을 수행하기 위해 결과들을 누산할 수 있다.

Description

프로세싱 인 메모리를 사용하는 카운터 기반 곱셈
관련 출원
본 출원은 "프로세싱 인 메모리를 사용하는 카운터 기반 곱셈"라는 제목으로 2020년 3월 31일에 출원된 미국 특허 출원 일련 번호 제16/836,773호에 대한 우선권을 주장하고, 그 전문이 본원에 참고로 통합된다.
일반 프로세서들은 저장된 데이터에 대한 반복된 계산들을 수행하기 위해 메모리 컴포넌트들 및 캐시들과 인터페이싱할 수 있다. 데이터는 캐시에 로딩될 수 있고, 프로세서는 그런 다음 데이터에 액세스할 수 있고, 프로세서는 결과를 계산할 수 있고, 그런 다음 결과는 메모리에 저장될 수 있다. 프로세서들은 행렬 원소(element)들을 처리함으로써 반복적이거나 집중적인 선형 대수 연산들을 수행할 수 있다. 예를 들어, 프로세서들은 데이터를 페치하고, 그것을 프로세싱하고, 그것을 메모리에 저장하기 위해 판독/기록 동작들을 수행할 수 있다. 이러한 일반적인 프로세서들은 예를 들어, 컨볼루션 연산들과 같은 더 복잡한 알고리즘들의 일부로서 곱셈 연산들을 수행하는 데 사용될 수 있다. 일반 프로세서들에 추가하여, 프로세싱 인-메모리 디바이스(Processing In-Memory device)들과 같은 특수 목적 디바이스들은 메모리 어레이들 및 메모리 어레이들의 콘텐츠들에 대한 연산들을 수행하기 위한 로직을 포함할 수 있다.
본 개시의 많은 양태들은 첨부된 도면들을 참조하여 더 잘 이해될 수 있다. 도면들의 컴포넌트들은 반드시 축척대로 도시될 필요는 없으며, 대신에 본 개시의 원리들을 명확하게 예시하는 것에 강조되어 배치된다. 또한, 각 도면에 제시된 동일한 도면 번호는 동일한 부재를 나타낸다.
도 1은 본 발명의 실시예들에 따른 메모리 디바이스를 나타내는 도면이다.
도 2a 및 도 2b는 다양한 실시예들에 따른 팝카운트(popcount) 연산들을 사용하여 공통 승수로 인-메모리(in-memory) 곱셈을 수행하는 메모리 디바이스의 도면들이다.
도 3은 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 공통 승수의 인-메모리 곱셈을 수행하는 메모리 디바이스의 기능을 예시하는 흐름도이다.
도 4a 내지 도 4e는 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 상이한 승수들의 인-메모리 곱셈을 수행하는 메모리 디바이스의 도면들이다.
도 5는 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 상이한 승수들의 인-메모리 곱셈을 수행하는 메모리 디바이스의 기능을 예시하는 흐름도이다.
도 6은 다양한 실시예들에 따른 메모리 디바이스를 포함하는 시스템을 도시하는 개략도이다.
본 개시는 팝카운트 연산들을 사용하여 메모리 디바이스에서 곱셈(multiplication)을 수행하는 시스템들 및 방법들에 관한 것이다. 메모리 디바이스에서 곱셈을 수행함으로써(예를 들어, 동작 "인-메모리(in-memory)"를 수행함으로써), 곱셈 연산들의 피연산자들 중 적어도 일부는 이들을 시스템 메모리, 캐시, 일부 다른 고속 메모리 등에 개별적으로 로딩하면서 메모리에 저장될 수 있다. 곱셈 연산을 수행함으로써, 본 개시의 메모리 디바이스는 메모리 디바이스에서 직접 곱셈 연산을 수행하기 위해 레지스터, 제어기, 및 감지 증폭기와 같은 컴포넌트들을 포함할 수 있다.
본 개시는 팝카운트 연산을 사용하는 실시예들을 설명한다. 팝카운트 연산은 메모리 셀들의 범위가 입력으로서 제공되고 하이("hi") 비트들(예를 들어, 활성 비트들 또는 "일(one)들")의 수가 카운트되는 메모리 디바이스에서 수행되는 동작이다. 예를 들어, 메모리 셀들의 범위가 이진 값들 [1, 0, 1, 1, 0 1]을 포함하면, 팝카운트 연산은 숫자 4를 산출할 것인데, 이는 "1"의 값을 갖는 4개의 비트(예를 들어, 활성 비트 또는 하이(hi) 비트)가 있기 때문이다.
본 개시는 곱셈 연산의 일부로서 팝카운트 연산을 수행하도록 메모리 디바이스를 구조화하는 다양한 방법들을 설명한다. 기본 곱셈 연산은 승수(multiplier)(A)와 피승수(multiplicand)(B)를 수반하여 "A x B"로 표현되는 곱을 생성한다. 보다 복잡한 곱셈 연산은 하나의 승수(A)와 복수의 피승수(B 및 C)를 포함할 수 있고, 여기서 곱은 "A x B + A x C" 또는 "A x (B + C)"로 표현된다. 이 경우 피승수는 함께 합산된 후 피승수가 곱해진다. 피승수는 함께 합산될 피연산자인 "피가수(summand)"로 지칭될 수 있다. 따라서, 이 예에서, 승수 (A) 는 공통 승수(common multiplier)이다. 더 복잡한 곱셈 연산은 상이한 피승수들에 대응하는 상이한 승수들을 수반할 수 있다. 예를 들어, 승수(A 및 B)는 결과 곱이 "A x C + B x D"로 표현되도록 피승수(C 및 D)에 대응할 수 있다. 이 경우, 연산은 2개의 벡터 또는 수 시퀀스 [A, B] dot [C, D]의 '내적(dot product)', 또는 더 넓게는 하나 초과의 벡터 또는 시퀀스의 원소-별(element-wise) 곱의 합으로 지칭될 수 있다.
일부 실시예들에서, 메모리 디바이스는 일반적으로 (예를 들어, 컨볼루션 신경망에서) 컨볼루션 연산의 일부로서 곱셈 연산들을 구현하는 데 사용되는 특수 목적 디바이스이다. 메모리 디바이스는 컨볼루션 신경망에서 하나 이상의 계층을 구현하는 데 사용될 수 있다. 컨볼루션 신경망은 이미지 데이터에서의 이미지 피처(feature)들, 비디오 스트림들에서의 모션 피처들, 텍스트 데이터에서의 텍스트 패턴들, 다차원 복합 데이터에서의 통계적 피처들, 과학 프로세스들 및 시뮬레이션들에서의 과학적 피처들, 우주로부터 오는 천문 데이터에서의 천문 피처들, 세계 기상 데이터에서의 기상 조건들 뿐만 아니라 이들에 기초한 예측들, 음성 오디오 데이터에서의 단어들을 검출하도록 설계될 수 있다. 컨볼루션 신경망은 컴퓨터 생성 그래픽, 가상 현실 데이터 및 증강 현실 데이터에서 피처들 또는 특성을 검출하는 데 사용될 수 있다. 피처들은 위성 이미지, 긴 노출 생성 그래픽, 시간 경과 비디오, 슬로우 모션 비디오에 대해 검출될 수 있다. 컨볼루션 신경망은 데이터 저장소 또는 데이터베이스와 같은 다양한 소스로부터 수집된 데이터의 그래픽 또는 시각적 표현에 대한 피처 검출(feature detection)을 수행하도록 구성될 수 있다. 피처 검출의 대상이 되는 데이터는 구조화된 데이터, 반-구조화된(semi-structured) 데이터, 비구조화된(unstructured) 데이터, 기계들로부터 생성된 데이터 객체들, 데이터 로그들, 원격 소스로부터 생성된 실시간 데이터, 복수의 소스들로부터 집계된 데이터, 네트워크를 통해 수신된 데이터, 외부 시스템들에 의해 사전-프로세싱된 데이터, 시각적 필터들이 적용된 데이터, 또는 외부 컴퓨팅 시스템에 의해 적어도 부분적으로 생성된 데이터일 수 있다. 데이터 내에서 검색된 피처들은 시각적 패턴들, 수평 라인들, 에지들, 수직 라인들, 다양한 형상들, 곡선들, 각도들, 특정 컬러들, 배향들을 포함한다. 게다가, 간단한 피처들이 조합되어 복잡한 객체들과 같은 더 복잡한 피처들을 공식화(formulate)할 수 있다.
컨볼루션 신경망들을 구현하는 것에 추가하여, 메모리 디바이스는 선형 대수 가속기 인-메모리 디바이스, 뉴로모픽 프로세서 인-메모리 디바이스, 계산 능력들을 갖는 메모리 듀얼 인-라인 메모리 모듈(DIMM), 인-메모리 그래픽 프로세서, 및 계산을 갖는 지능형 솔리드 스테이트 드라이브(SSD)로서 구성될 수 있다. 또한, 메모리 디바이스는 NAND 플래시 메모리 어레이들, X-포인트 어레이들, 또는 계산 능력들을 갖는 다른 메모리 어레이들을 포함할 수 있다. 메모리 디바이스는 행렬-행렬 곱셈(Matrix-matrix multiplication) 및 신경망 추론 및 트레이닝을 수행하도록 구성될 수 있다.
이하의 논의는 곱셈 연산들을 수행하기 위해 팝카운트 연산들을 사용하는 메모리 디바이스의 다양한 실시예들을 예시하기 위해 도면들을 참조한다.
도 1은 다양한 실시 예에 따른 메모리 디바이스(100)의 도면이다. 도 1에 도시된 메모리 디바이스(100)는 PIM(Processing In Memory) 디바이스로 구현될 수 있다. 그러나, 본 개시는 PIM 디바이스에만 한정되는 것은 아니다. PIM 디바이스는 하나 이상의 메모리 어레이 및 이들 어레이 인-메모리에 결합된 PIM 프로세서를 포함하는 반도체 디바이스이다. PIM 프로세서는 시간 집약적인 입력/출력 동작들, 페치 동작들, 또는 메모리 버스를 통한 로드/저장 동작들을 수행할 필요 없이 메모리 어레이의 셀들에 저장된 데이터를 사용하여 연산들을 수행하도록 구성된다. 이와 관련하여, PIM 프로세서는 데이터 및 컴퓨팅 연산을 수행하기 위해 버퍼 메모리 또는 캐시 또는 버스 없이 적어도 일부 데이터에 액세스할 수 있다. 대조적으로, 호스트 프로세서는 메모리 버스 또는 다른 링크를 통해 하나 이상의 메모리 디바이스와 결합된다. 호스트 프로세서는 중앙 프로세싱 유닛(CPU), 디지털 신호 프로세서, 그래픽 프로세싱 유닛(GPU), 특수 목적 프로세서 또는 메모리 디바이스 외부의 디바이스 또는 시스템에 설치되는 범용 프로세서일 수 있다. 호스트 프로세서는 컴퓨팅 디바이스, 랩탑, 모바일 디바이스, 서버, 특수 목적 컴퓨터, 범용 컴퓨터에 설치될 수 있다.
메모리 디바이스(100)는 집적 회로이다. 메모리 디바이스(100)는 반도체 칩 또는 다이 또는 다이 스택일 수 있다. 메모리 디바이스(100)는 하나 이상의 메모리 어레이(103)를 포함할 수 있다. 메모리 어레이(103)는 복수의 행(row)과 열(column)을 포함하고 행-열 크기로 정의될 수 있다. 도 1의 예는 r1 - rn으로 라벨링된 행들 및 열들 c1 - cn을 갖는 메모리 어레이(103)를 도시한다. 각각의 행 및 열 교차점에는 곱셈 연산에서 피연산자의 적어도 일부를 저장하도록 구성된 메모리 셀이 있다. 피연산자는 승수 또는 피승수일 수 있다. 이와 관련하여, 예를 들어 십진수 "9"와 같은 피연산자는 다수의 메모리 셀들에 걸쳐 일련의 이진 비트들 "1001"로서 저장될 수 있다.
메모리 셀은 하나의 이진 비트(예를 들어, "0" 또는 "1"은 메모리 셀의 로우(로우(low)) 또는 하이(high) 값으로서 인코딩되는 2개의 값 또는 상태를 가질 수 있는 비트)를 저장하는 단일 레벨 셀 또는 다수의 비트 또는 레벨을 포함하는 멀티 레벨 셀(예를 들어, 다수의 비트를 저장할 수 있는 셀)일 수 있다. 멀티 레벨 셀들의 예들은 QCL NAND 플래시 메모리를 포함하며, 이는 플로팅 게이트 트랜지스터의 Vt(임계 전압)로서 인코딩되어 16개의 값들 또는 상태들을 가질 수 있어서 메모리 셀당 4개의 비트들 또는 레벨들의 데이터를 저장한다. 예를 들어, 2 비트 이진수를 인코딩하는 듀얼 레벨 셀들과 같은 멀티 레벨 셀들로 구성된 메모리 어레이를 예시하기 위해, 십진수 "9"(이진수 "1001"로 표현됨)는 하나의 멀티 레벨 셀에 저장된 4 비트 이진수(2개의 최상위 비트들)의 좌측 부분을 이진수 "10"으로서 가질 수 있고, 우측 부분(2개의 최하위 비트들)은 다른 듀얼 레벨 셀에 이진수 "01"로서 저장될 수 있다. 단일 레벨 메모리 셀을 갖는 메모리 디바이스에서, 십진수 "9"는 이진수 "1001"을 나타내기 위해 적어도 4개의 개별 셀을 점유할 수 있다.
따라서, 메모리 어레이(103)는 행들 및 열들에 의해 어드레싱가능한 복수의 어레이 요소들로서 데이터를 저장하는데 사용되는 하드웨어 컴포넌트이다. 메모리 디바이스(100)는 메모리 디바이스(100) 전체에 걸쳐 조직화된 몇몇 메모리 어레이들(103)을 포함할 수 있다. 메모리 어레이(103)는 다양한 유형의 기술, 조직화 또는 양태를 사용하여 구현될 수 있다. 메모리 어레이는 휘발성 및 비휘발성 메모리 둘 모두를 포함하는 것으로 정의될 수 있다. 휘발성 컴포넌트들은 전력 손실 시에 데이터 값들을 보유하지 않는 것들일 수 있다. 비휘발성 컴포넌트들은 전력 손실 시에 데이터를 유지하는 것들일 수 있다. 메모리 어레이(103)는 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 솔리드 스테이트 메모리 어레이들을 포함할 수 있다. RAM은 정적 랜덤 액세스 메모리(SRAM), 동적 랜덤 액세스 메모리(DRAM)를 포함할 수 있다. 메모리 어레이(103)는 플래시 메모리, NOR 플래시(예를 들어, NOR 구성의 플래시 메모리) 또는 NAND 플래시(예를 들어, NAND 구성의 플래시 메모리)와 같은 솔리드 스테이트 메모리를 포함할 수 있다. 메모리 어레이는 저항성 RAM(ReRAM), 크로스 포인트(cross-point) 메모리, 또는 크로스 바(cross-bar) 3D 메모리일 수 있다. 메모리 어레이를 구현하는 데 사용되는 각각의 유형의 메모리 기술은 행, 열, 또는 다른 메모리 어드레스를 사용하여 액세스될 수 있다. 행들은 워드 라인들로 지칭될 수 있다. 워드 라인은 대응하는 메모리 셀들의 트랜지스터 게이트들의 단자들을 포함할 수 있다. 대안으로, 워드 라인은 예를 들어 저항기형 또는 다이오드형 메모리 셀들을 위해 메모리 셀 재료에 직접 연결될 수 있다. 열은 비트 라인으로 지칭될 수 있다. 비트 라인은 메모리 셀들을 구성하는 트랜지스터들의 소스 및/또는 드레인들, 메모리 셀들을 구성하는 커패시터들의 커패시터 단자들, 메모리 셀들을 구성하는 저항기들의 저항기 단자들, 메모리 셀들을 구성하는 다이오드들의 다이오드 단자들, 또는 이들의 조합을 포함할 수 있다.
메모리 어레이(103)는 메모리 어레이(103)의 외부 또는 그 일부일 수 있는 주변 회로부를 포함한다. 주변 회로부는 누산기(accumulator)(106), 제어기(109), 버퍼 메모리(112), 시스템 링크(115), 및 예를 들어, 메모리 어레이(103)로부터의 데이터를 감지하기 위한 감지 증폭기들 및 데이터를 메모리 어레이(103)에 다시 저장하기 위한 드라이버들과 같은 잠재적으로 다른 통합된 컴포넌트들을 포함할 수 있다.
누산기(106)는 예를 들어, FMA(Fused Multiply-Accumulate) 유닛(106)일 수 있다. 누산기(106)는 예를 들어, 승수들 또는 피승수들과 같은 피연산자들을 포함하는 데이터(또는 행렬들)의 어레이들에 대해 내적 곱셈 연산들을 수행하도록 구성될 수 있다. 곱셈 연산을 위한 피연산자는 제어기(109) 뿐만 아니라 메모리 어레이(103)로부터 직접 공급될 수 있다. 일부 실시예에서, 누산기(106)는 내적 행렬 계산만을 수행하도록 전용될 수 있다. 누산기(106)는 입력 피연산자들의 곱을 계산하고 그 곱을 누산된 값에 가산하는 곱셈-누산 연산(multiply-accumulate operation)을 수행하도록 구성될 수 있다. 누산기(106)는 곱셈 연산의 일부로서 중간 값들을 저장하기 위한 하나 이상의 레지스터들을 포함할 수 있다.
제어기(109)는 메모리 디바이스(100)의 프로세서의 일부이다. 제어기(109)는 메모리 어레이(103)에 데이터를 저장하는데 사용되는 하드웨어로 구현된 집적 회로 또는 로직을 포함할 수 있다. 또한, 제어기(109)는 메모리 어레이(103) 외부의 위치로부터 수신할 수 있다. 제어기(109)는 로직, 마이크로코드, 또는 다른 알고리즘에 따라 특정 패턴으로 비트 라인 및 워드 라인을 선택하도록 구현할 수 있다.
메모리 디바이스(100)는 또한 버퍼 메모리(112)를 포함할 수 있다. 버퍼 메모리는 제어기(109)의 일부 및/또는 누산기(106)의 일부로서 포함될 수 있거나, 그것은 제어기(109) 및/또는 누산기(106)의 외부에 있을 수 있거나, 그것은 내부 버스(예를 들어, 시스템 링크(115))를 통해 이들 컴포넌트들(109 및 106)에 연결될 수 있다. 대안으로, 버퍼 메모리(112)는 본 명세서에 설명된 버퍼 목적을 위해 특별히 할당된 메모리 어레이(103)의 일부일 수 있다. 구체적으로, 버퍼 메모리를 위해 할당된 메모리 어레이(103)의 일부는 더 빠른 액세스를 갖는(예를 들어, 누산기(106)로의 더 짧은 경로를 갖는) 어레이의 일부일 수 있다. 버퍼 메모리(112)는 제어기(109) 및 누산기(106)가 곱셈 연산을 수행할 때 데이터를 일시적으로 저장하기 위한 버퍼를 포함할 수 있다. 제어기(109) 및/또는 누산기(106)는 버퍼 메모리(112)에 기록하거나 그로부터 판독할 수 있다. 예를 들어, 버퍼 메모리(112)는 곱셈 연산의 일부로서 중간 결과를 저장하는 데 사용될 수 있다. 버퍼 메모리(112)는 또한 예를 들어, 하나 이상의 승수와 같은 곱셈 연산의 피연산자들의 일부를 저장할 수 있는 반면, 피승수는 메모리 어레이(103)에 저장된다.
메모리 디바이스(100)의 시스템 링크(115)는 메모리 디바이스(100)와 외부 시스템들 사이에 데이터 및/또는 제어 신호들을 제공할 수 있다. 시스템 링크(115)는 예를 들어, 메모리 어레이(103), 누산기(106), 제어기(109), 버퍼 메모리(112), 및 다른 컴포넌트들과 같은 메모리 디바이스(100)의 다양한 컴포넌트들에 결합될 수 있다. 따라서, 시스템 링크(115)는 메모리 디바이스(100)의 다양한 컴포넌트들이 서로 데이터 및/또는 제어 신호들을 교환할 수 있게 하는 이들 컴포넌트들 사이의 내부 링크를 포함할 수 있다. 시스템 링크(115)는 메모리 디바이스(100) 외부의 외부 시스템들에 결합하기 위한 입력/출력 포트들을 포함할 수 있다. 시스템 링크(115)는, 예를 들어, DDR4 버스 또는 PCIe 버스와 같은 IO(Input/Output) 버스일 수 있다. 이와 관련하여, 외부 시스템은 메모리 어레이(103), 누산기(106), 및 버퍼 메모리(112)에 데이터를 판독하거나 기록할 수 있다. 추가하여, 외부 시스템은 제어기(109)를 프로그래밍하거나 그렇지 않으면 제어하기 위해 제어기(109)에 제어 신호를 송신할 수 있다.
외부 시스템은 PCB 마더보드를 갖는 호스트 프로세서를 포함할 수 있으며, 여기서 메모리 디바이스(100)는 DDR4, DDR5 또는 PCIe 등과 같은 버스를 통해 호스트 프로세서에 연결된다. 외부 시스템은 운영 체제, 애플리케이션들, 라이브러리들, 스크립트들, 또는 프로그래밍 언어들을 실행할 수 있다. 외부 시스템은 하나 이상의 서버 랙 또는 컴퓨터 또는 다른 장치를 포함할 수 있다. 서버는 단일 설치일 수 있거나 많은 상이한 지리적 위치들 사이에 분산될 수 있다. 외부 시스템은 호스팅된 컴퓨팅 자원, 그리드 컴퓨팅 자원 및/또는 임의의 다른 분산형 컴퓨팅 장치를 함께 포함할 수 있는 복수의 컴퓨팅 디바이스들을 포함할 수 있다. 일부 경우들에서, 외부 시스템은 프로세싱, 네트워크, 스토리지, 또는 다른 컴퓨팅 관련 자원들의 할당된 용량이 시간에 따라 변할 수 있는 탄력적 컴퓨팅 자원에 대응할 수 있다. 외부 시스템은 컴퓨팅 시스템의 자원을 사용하는 하나 이상의 가상 기계를 구현할 수 있다. 하나 이상의 가상 기계 상에서 다양한 소프트웨어 컴포넌트들이 실행될 수 있다. 외부 시스템은 또한 추가 메모리 디바이스(100)를 포함할 수 있다. 이 점에 있어서, 메모리 디바이스(100)의 인스턴스는 시스템에 설치된 임의의 추가 메모리 디바이스(100) 내의 데이터를 쿼리(query), 제어 또는 액세스할 수 있다.
시스템 링크(115)는 메모리 디바이스(100)가 컨볼루션 신경망을 함께 또는 개별적으로 구현하는 외부 시스템들에 결합되게 할 수 있다. 예를 들어, 메모리 디바이스(100)는 신경망 내의 하나의 계층 또는 신경망 내의 다수의 계층들을 구현할 수 있다. 예를 들어, 메모리 디바이스(100)는 컨볼루션 계층을 구현하는 데 사용될 수 있다. 시스템 링크(115)는 메모리 디바이스(100)의 출력들을 추출하고 이들을 다른 메모리 디바이스들 또는 외부 시스템의 다른 부분들에 위치된 신경망의 상이한 계층들에 입력할 수 있다. 신경망의 풀링(pooling) 계층은 메모리 디바이스(100)의 시스템 링크(115)로부터 출력들을 획득할 수 있고, 풀링 동작들을 수행할 수 있고, 결과를 입력들로서 메모리 디바이스(100)에 전달할 수 있다. 예를 들어, 누산기(106)에 의해 생성된 출력 데이터는 시스템 링크(115)에 의해 액세스되고 풀링 계층에 의해 외부적으로 프로세싱될 수 있으며, 여기서 이러한 결과는 추가 프로세싱을 위해 시스템 링크(115)를 통해 메모리 장치(100)의 메모리 어레이(103)에 공급된다. 이하의 도면들은 예를 들어, 도 1의 메모리 디바이스(100)와 같은 메모리 디바이스 내에서 발생할 수 있는 구성들 및 동작들의 예들을 제공한다.
도 2a 및 도 2b는 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 공통 승수로 인-메모리(in-memory) 곱셈을 수행하는 메모리 디바이스(100)의 도면들이다. 도 2a에서, 메모리 디바이스(100)는 승수(203)가 제1 피승수(206a)와 제2 피승수(206b)의 합에 적용되는 곱셈 연산을 수행하도록 구성된다. 도 2a에 도시된 예에서, 승수(203)는 십진수 "6"의 값을 갖고, 제1 피승수(206a)는 십진수 "7"의 값을 갖고, 제2 피승수(206b)는 십진수 "10"의 값을 갖는다. 대안적으로, 이것은 곱셈의 분배 속성에 따라 6 x (7+10)가 아닌 6 x 7 + 6 x 10으로 해석될 수 있습니다. 이러한 점에서, A x (B+C)는 두 벡터의 다음과 같은 내적(dot product)으로 표현될 수 있다: [A, A] x [B, C]. 따라서, 도 2a는 공통 승수(203)가 피승수들(206a, 206b)에 적용되는 실시예를 도시한다. 그러나, 임의의 수의 피승수가 도 2a에 도시된 곱셈 연산의 일부로서 포함될 수 있다.
메모리 디바이스(100)는 제1 피승수(206a)를 메모리 어레이의 제1 비트 라인(예를 들어, BL 1)에 저장할 수 있고, 제2 피승수(206b)를 메모리 어레이의 제2 비트 라인(예를 들어, BL 2)에 저장할 수 있다. 일부 실시예들에서, 제1 및 제2 비트 라인들은 동일한 메모리 어레이에 있다. 다른 실시예들에서, 제1 비트 라인 및 제2 비트 라인들은 상이한 어레이들에 있다. 피승수(206a, 206b)를 하나의 비트 라인에 저장할 때, 피승수의 값은 복수의 워드 라인에 걸쳐 있도록 복수의 메모리 셀을 점유할 수 있다. 예를 들어, 예시적인 십진수 "7"을 갖는 제1 피승수(206a)는 이진수로 "0111"로 표현된다. 최하위 비트 "1"은 제1 워드 라인(예를 들어, WL 1)에 저장될 수 있다. 제2 비트 "1"은 제2 워드 라인(예를 들어, WL 2)에 저장될 수 있다. 그 후에, 제3 비트 "1"은 제3 워드 라인(예를 들어, WL 3)에 저장될 수 있다. 최상위 비트 "0"은 제4 워드 라인(예를 들어, WL 4)에 저장될 수 있다. 예시적인 십진수 "10"을 갖는 제2 피승수(206b)는 이진수로 "1010"으로 표현된다. 최하위 비트 "0"은 제1 워드 라인(예를 들어, WL 1)에 저장될 수 있다. 제2 비트 "1"은 제2 워드 라인(예를 들어, WL 2)에 저장될 수 있다. 그 후에, 제3 비트 "0"은 제3 워드 라인(예를 들어, WL 3)에 저장될 수 있다. 그리고 최상위 비트 "1"은 제4 워드 라인(예를 들어, WL 4)에 저장될 수 있다. 따라서, 피승수들(206a, 206b)은 비트 직렬 구성으로 저장된다.
승수(206)는 메모리 디바이스(100)의 메모리 어레이(103), 메모리 디바이스의 버퍼 메모리(112), 또는 일부 다른 소스에 저장될 수 있다. 도 2a는 예시적인 십진수 "6"(이진수 "0110"으로 표현됨)을 갖는 승수(203)를 피승수들(206a, 206b)의 합에 적용하는 제어기(109)를 도시한다.
메모리 디바이스(100)는 감지 증폭기(SA) 어레이(212)를 포함할 수 있다. 감지 증폭기 어레이(212)는 복수의 감지 증폭기(예를 들어, SA 1, SA 2)를 포함할 수 있다. 일부 실시예에서, 각각의 감지 증폭기는 대응하는 비트 라인에 전용된다. 예를 들어, 각각의 감지 증폭기는 하나의 비트 라인만을 액세스할 수 있다. 도 2a의 예에서, 제1 감지 증폭기(SA 1)는 제1 비트 라인(BL 1)에 액세스하고, 제2 감지 증폭기(SA 2)는 제2 비트 라인(BL 2)에 액세스한다. 각각의 감지 증폭기는 제어기(109)가 감지 증폭기에 결합된 비트 라인을 활성화할 때 입력을 수신한다.
감지 증폭기 어레이(212) 내의 감지 증폭기들은 감지 증폭기에 대한 비트 라인이 활성화될 때 그리고 하나 이상의 워드 라인들이 활성화될 때 팝카운트 연산을 수행하도록 구성된다. 감지 증폭기는 제어기(109)에 의해 선택되는 모든 메모리 셀들에 대한 활성 비트들(예를 들어, "1"로서 표현되거나 "하이(hi)" 값을 갖는 비트들)의 수를 카운트하도록 구성된다. 예를 들어, 카운팅은 감지 증폭기 어레이의 크기와 일치하고 내부에 통합되는 긴 시프트 레지스터 또는 체인으로 구현될 수 있습니다. 이 경우, 제어기는 모든 비트들을 시프트 아웃(shift out)할 것이다. 대안적인 구현예는 롤링 리플 캐리 가산기(rolling ripple carry adder)를 포함한다. 이 실시예에서, 가장 우측의 감지 증폭기는 그의 값을 좌측에 위치된 감지 증폭기로 발송한다. 전류 감지 증폭기는 비트 라인 상에서 감지된 값과 우측으로부터의 결과를 누산하고, 그것을 다음 좌측 감지 증폭기로 발송한다. 이는 최종 값이 제어기로 전송될 때까지 계속된다. 제어기를 향한 점진적인 버스 폭 증가는 이 실시예에서 롤링 값에 대해 더 많은 대역폭을 제공할 것이다. 다른 실시예는 로그 감소 트리 카운터/가산기(logarithmic-reducing tree counter/adder)를 사용하는 것을 포함한다. 이 실시예는 비교적 빠른 계산을 수행하지만, 다양한 컴포넌트를 연결하기 위해 비교적 더 많은 배선을 요구할 수 있다. 또 다른 실시예에서, 감지 증폭기 어레이는 바이패싱 능력(bypassing capability)을 갖는 온도계-이진 컨버터(thermometric to binary converter)를 포함할 수 있다. 이 실시예에서, (비트 라인으로부터 감지된) 0의 전류 값을 갖는 감지 증폭기들은 바이패싱된다. 이는 또한 룩업 테이블을 사용하는 것을 포함할 수 있다. 다른 실시예에서, 감지 증폭기 어레이(212)는 플래시 아날로그-디지털 컨버터(ADC)를 포함한다.
도 2a는 피승수들(206a, 206b)의 비트 위치들이 동일한 워드 라인을 따라 저장되는 예를 도시한다. 즉, 각각의 피승수(206a, 206b)의 최하위 비트는 동일한 워드 라인에 저장되고, 각각의 피승수(206a, 206b)의 최상위 비트는 동일한 워드 라인에 저장되며, 이들 사이의 비트에 대해서도 동일하게 적용된다. 다른 실시예들에서, 피승수들(206a, 206b)은 상이한 워드 라인 범위들 또는 부분적으로 중첩하는 워드 라인 범위들을 따라 저장될 수 있다.
도 2b는 함께 합산되고 승수(203)가 곱해지는 피승수들(206a, 206b)을 사용하여 도 2a의 곱셈 연산을 수행하는 예를 나타낸다. 구체적으로, 도 2b는 승수(203)의 비트들을 통한 시퀀싱에 의해 팝카운트 연산들을 사용하여 곱셈을 수행하는 4개의 시퀀스들을 도시한다. 메모리 디바이스(100)는 예를 들어 결과 레지스터(215) 및 피연산자 레지스터(224)와 같은 하나 이상의 레지스터들을 포함할 수 있다. 결과 레지스터(215)는 곱셈 연산이 완료될 때까지 각각의 시퀀스에서 업데이트하는 합계 값(221)을 저장할 수 있다. 승수의 모든 비트들을 통한 시퀀싱 후 합산 값(221)은 완료 시 곱셈 결과(223)를 나타낸다. 합계 값의 비트 위치(218)는 각각의 시퀀스에서 증분되며, 여기서 제어기는 승수(203)의 비트 위치에 따라 누산 연산을 선택적으로 수행한다. 이에 대해서는 아래에서 보다 상세히 설명한다.
제1 시퀀스(250)에서, 승수의 비트 위치는 승수(206)의 최하위 비트인 위치 1에서 시작한다. 도 2b에 도시된 바와 같이, 화살표는 승수(203)의 비트 위치의 추적을 예시하기 위해 사용된다. 제어기(109)는 워드 라인들을 활성화하고 제어 신호들을 누산기(106) 및 감지 증폭기 어레이(212)에 발송하도록 구성된다. 제어기(109)는 이진 비트 "0"인 위치 1에서 승수(203)의 값(예를 들어, 이진 숫자 "0110" 또는 십진수 숫자 "6"의 최하위 비트)을 판독한다. 값이 이진수 "0" 또는 "로우"와 같은 미리 결정된 값일 때, 제어기(109)는 현재 비트 위치(제1 시퀀스(250)에 대한 위치 1)에서 결과 레지스터(215)에 "0"을 레코딩한다. 그 후, 비트 위치는 위치 2로 증분된다.
제2 시퀀스(251)에서, 승수(203)의 비트 위치는 이진 비트 "1"인 위치 2(예를 들어, 이진 숫자 "0110" 또는 십진수 "6"의 최하위 비트로부터 두 번째 비트)에 있다. 이 값이 이진수 "0" 또는 "로우"와 같은 미리 결정된 값이면, 제어기(109)는 제1 시퀀스(250)의 경우와 같이 현재 비트 위치에서 결과 레지스터(215)에 "0"을 레코딩한다. 그러나, 위치 2에서 승수(203)의 비트 값은 이진수 "1"이기 때문에, 제어기는 피연산자 레지스터(224)의 초기화 연산을 수행하여 팝카운트 결과(227, 230)를 저장한다. 예를 들어, 이진수 "1"이 처음 나타나면 초기화 연산이 발생한다. 초기화 연산은 피승수들(206a, 206b)에 대해 팝카운트 연산들을 수행하여 팝카운트 결과(227)를 생성하는 것을 포함하고, 여기서 팝카운트 결과의 각각의 수는 각각의 메모리 행 또는 피승수들을 저장하는 그것의 일부에서 '하이(hi)' 또는 '1' 비트의 수(대안적으로 임의의 미리 결정된 선택 값일 수 있음)를 나타낸다. 팝카운트 결과는 피연산자 레지스터(224)에 평탄화된(flattened) 이진수(230)로 저장될 수 있다. 팝카운트 결과(227, 230)는 곱셈 연산이 완료될 때까지 피연산자 레지스터(224)에 남을 수 있다. 팝카운트 연산들은 승수(203)의 비트 위치에 이진수 "1"이 존재하는 것에 응답하여 한 번만 수행될 수 있다.
팝카운트 연산들을 수행하기 위해, 제어기(109)는 피승수들(206a, 206b)을 저장하는 메모리 어레이(들)(103)의 워드 라인을 순차적으로 활성화시켜 피승수들(206a, 206b)의 각각의 위치에 존재하는 이진수 "1"의 수를 카운트한다. 예를 들어, 도 2a를 참조하면, 제어기(109)는 이들 비트 라인들을 따라 저장된 피승수들(206a, 206b)에 대해 팝카운트 연산들을 수행하기 위해 BL 1 및 BL2를 활성화시킨다. 제어기(109)는 제1 팝카운트 연산을 수행하기 위해 WL 1을 활성화시킨다. BL 1, BL 2, 및 WL 1이 활성화되면, 감지 증폭기 어레이(212)는 총 하나의 이진수 "1"을 카운트한다. 구체적으로, (BL 1, WL 1)은 이진수 "1"을 갖고, (BL 2, WL 1)은 이진수 "1"을 갖지 않는다. 따라서, 피승수들의 최하위 비트에 대한 팝카운트 연산은 하나의 이진수 "1"을 산출한다.
다음으로, WL 2는 피승수들(206a, 206b)의 다음 비트 위치에 대해 활성화된다. 팝카운트 연산은 2개의 이진수 "1"을 산출한다. 다음으로, WL 3은 피승수들(206a, 206b)의 다음 비트 위치에 대해 활성화된다. 팝카운트 연산은 하나의 이진수 "1"을 산출한다. 마지막으로, WL 4는 피승수들(206a, 206b)의 다음 비트 위치에 대해 활성화된다. 팝카운트 연산은 하나의 이진수 "1"을 산출한다. 피승수들(206a, 206b)의 모든 워드 라인들을 통한 시퀀싱 후에, 팝카운트 결과(227)는 최상위 비트로부터 최하위 비트까지의 범위에 있는 [1, 1, 2, 1]이다. 따라서, 팝카운트 결과는 하나 이상의 피승수(206a, 206b)에 걸쳐 각각의 비트 위치에서 이진수 "1"(예를 들어, 미리 결정된 값)의 수를 카운트한다. 팝카운트 결과(227)는 이진수 (230)으로 평탄화될 수 있으며, 여기서, MSB=>[1, 1, 2, 1]<=LSB는 이진수 "10001"과 같다. 결과를 평탄화하기 위해, 평탄화 연산은 우측에서 좌측으로의 캐리 전파(carry propagation) 및 이진수 합산을 포함한다. 예를 들어, [1, 1, 2, 1] 어레이를 평탄화하는 것은 LSB로부터 MSB까지(우측에서 좌측으로) 다음과 같이 수행된다: 값 "1"은 제1 비트 위치에서 "1"의 결과를 생성하고, 다음 비트 위치로 전달될 값 "0"을 생성한다. 다음으로, 유입되는 "0" 캐리 값(carry value)을 갖는 값 "2"는 제2 비트 위치에서 "0" 결과 및 다음 비트 위치로 전달될 "1"의 값을 생성한다. 다음에, 유입되는 "1" 캐리 값을 갖는 "1"의 값은 제3 비트 위치에서 "0" 결과 및 다음 비트 위치로 전달될 "1"의 값을 생성한다. 유입되는 "1" 캐리 값을 갖는 "1"의 값은 제4 비트 위치에서 "0"의 결과 및 다음 비트 위치로 전달될 "1"의 값을 생성한다. 유입되는 "1" 캐리 값을 갖는 "0"의 값은 제5 비트 위치에서 "1"의 결과 및 전달될 "0"의 값을 생성한다. 이 계산 시퀀스의 각 단계는 각 행으로부터 팝카운트 결과를 생성할 때 즉시 수행될 수 있다. 일부 실시예들에서, 평탄화 동작은 각각의 메모리 행의 팝카운트 동작들의 수행 동안 수행되는 메모리 액세스들의 백그라운드에서 완전히 수행될 수 있다. 따라서, 이러한 평탄화 동작은 레이턴시 오버헤드(latency overhead)를 갖지 않을 수 있다.
팝카운트 결과(227, 230)를 생성한 후, 피연산자 레지스터(224)가 초기화된다. 인스턴트(instant) 곱셈 연산을 위해 팝카운트 연산들이 다시 수행될 필요가 없음을 나타내기 위해 플래그(flag)가 설정될 수 있다. 승수(203)의 위치 2에서 이진수 "1"을 검출하는 것에 추가하여, 제어기(109)는 현재 비트 위치에서 현재의 합산 값(221)이 팝카운트 결과(227, 230)에 가산되는 위치 2에서 누산 연산을 수행한다. 이것은 "100010"의 현재 합계 값을 산출한다. 예를 들어, 위치 1에 이진수 "0"이 레코딩된 상태에서, 누산 연산은 현재 위치인 위치 2에서 시작하여 팝카운트 결과 "10001"을 추가한다.
제3 시퀀스(252)에서, 승수(203)의 비트 위치는 이진 비트 "1"인 위치 3이다(예를 들어, 이진 숫자 "0110" 또는 십진수 "6"의 최하위 비트로부터의 제3 비트). 이진수 "1"을 검출한 것에 응답하여, 제어기는 현재 합산 값(221) "100010"을 사용하여 위치 3에서 시작하는 누산 연산을 수행한다. 구체적으로, 결과 레지스터(215)는 새로운 합계 값이 "100010"과 팝카운트 결과(230)의 합인 "10001"이지만 합계가 결과 레지스터(215)의 위치 3에서 발생하도록 업데이트된다. 즉, 누산 연산은 "100010"과 "1000100"의 이진 합으로 표현될 수 있다. 이는 현재 합계 값(221)의 결과를 "1100110"으로 산출한다. 팝카운트 결과(230)는 피연산자 레지스터가 초기화된 후에 재계산될 필요가 없다.
제4 시퀀스(253)에서, 승수(203)의 비트 위치는 이진 비트 "0"인 위치 4이다 (예를 들어, 이진 숫자 "0110" 또는 십진수 "6"의 최상위 비트). 이진수 "0"(예를 들어, 미리 결정된 이진 값)을 검출한 것에 응답하여, 제어기(109)는 누산 연산을 바이패스(bypass)한다. 모든 비트 위치들이 시퀀싱되었으므로, 현재 합산 값(233)은 십진수 "102"로 표현되는 "1100110"의 곱셈 결과이고, 또한 6x(7+10)의 곱셈 결과이다.
도 2a 및 도 2b와 관련하여 설명된 곱셈 프로세스의 예는 공통 승수(203)가 복수의 팝카운트 연산들을 사용하여 피승수들(206a, 206b)의 합에 어떻게 적용되는지를 도시한다. 예를 들어, 팝카운트 연산은 피승수(206a, 206b)의 합을 나타내는 팝카운트 결과(230)를 생성하기 위해 피승수(206a, 206b)에 수행된다. 피승수들(206a, 206b)의 이러한 합은 피연산자 레지스터(224)에 저장된다. 제어기(109)가 공통 승수(203)의 비트 위치들을 통해 (최하위 비트로부터 최상위 비트까지) 시퀀싱함에 따라, 팝카운트 결과(230)는 현재 비트 위치에 기초하여 그리고 현재 비트 위치의 비트 값이 미리 결정된 값(예를 들어, 이진수 "1")인지 여부에 기초하여 선택적으로 누산된다. 다시 말하면, 제어기(109)는 승수 비트 위치들이 시퀀싱됨에 따라 이진수 "1"을 검출할 때 결과 레지스터(215)의 현재 합산 값(221)을 선택적으로 누산할 수 있고, 누산은 현재 합산 값(221)의 현재 비트 위치에서 수행된다.
도 2a 및 도 2b의 예들을 추가로 예시하기 위해, 예들은 메모리 디바이스(100)의 메모리 어레이(103)에 적어도 하나의 피가수(summand)를 저장하는 것을 도시한다. 피가수는 함께 합산된 다음 승수(203)와 곱해지는 피승수들(206a, 206b)일 수 있다. 누산기(accumulator)(106)는 피가수(들)을 입력들로서 사용하는 것으로부터 결정된 팝카운트 결과(230)에 승수(203)를 곱하기 위해 융합(fused) 곱셈-누산 연산들을 수행할 수 있다. 융합 곱셈-누산 연산들은 승수(203)의 적어도 하나의 비트를 통해 시퀀싱(sequencing)함으로써 팝카운트 결과(230)와 현재 합산 값(221)을 선택적으로 누산하는 것을 수반할 수 있다. 승수(203)의 비트들을 통해 시퀀싱이 완료되면 융합 곱셈 결과가 생성된다.
선택적 누산은 승수(203)의 현재 비트 위치에서 제1 미리 결정된 값(예를 들어, 이진수 "1")을 검출할 때 누산을 수반하고, 승수(203)의 현재 비트 위치에서 제2 미리 결정된 값(예를 들어, 이진수 "0")을 검출할 때 누산을 하지 않는(예를 들어, 누산 연산을 바이패스하는 것) 것을 수반할 수 있다. 선택적 누산 레이턴시는 감지 증폭기들에 의해 팝카운트 계산들을 수행하는 데 걸리는 시간에 비해 작을 수 있는데, 이는 전자는 로컬 고속 레지스터들에서 수행될 수 있는 반면, 후자는 보통 더 긴 레이턴시를 갖는 메모리 어레이 액세스의 일부로서 수행될 수 있기 때문이다. 따라서, 메모리에서의 다수의 연산들을 가속화하기 위해, 실시예들은 다른 메모리 어레이들의 행들에 대해 팝카운트 연산들을 수행하는 것 및 현재 팝카운트 결과들에 대해 선택적 누산을 수행하는 것과 동시에 다른 승수들을 저장하는 것을 수반할 수 있다. 이러한 점에서, SA 어레이로부터 도착할 때 다음 팝카운트 결과를 저장 및/또는 평탄화하는 데 사용되는 여분의 피연산자 레지스터가 포함될 수 있다. 다른 실시예에서, 다수의 피연산자 레지스터들을 갖는 선택적 누산기는 그것들의 연산들이 팝카운트 연산들을 수행하는 메모리 어레이들의 메모리 액세스들에 의해 완전히 은닉되도록 다수의 어레이들로서 기능할 수 있다.
도 3은 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 공통 승수의 인-메모리 곱셈을 수행하는 메모리 디바이스의 기능을 예시하는 흐름도이다. 흐름도 내의 박스들은 메모리 디바이스(100)의 제어기에 의해 실행가능한 마이크로코드, 기계 코드(machine code), 펌웨어, 또는 다른 소프트웨어를 나타낼 수 있다. 흐름도의 박스들은 대안적으로 방법(300)에서의 단계들을 나타낼 수 있다. 방법은 메모리 디바이스(100)에 의해 수행될 수 있다.
항목(303)에서, 메모리 디바이스(100)는 하나 이상의 피승수(206a, 206b)를 하나 이상의 메모리 어레이에 저장할 수 있다. 피승수들(206a, 206b)은 별개의 비트 라인들을 따라 비트-직렬 구성으로 저장될 수 있다. 각각의 피승수(206a, 206b)의 비트 위치는 동일한 워드 라인 상에 또는 상이한 워드 라인 상에 위치될 수 있다.
항목(306)에서, 메모리 디바이스(100)는 승수(203)의 현재 비트 위치를 식별한다. 메모리 디바이스는 승수(203)의 최하위 비트(예를 들어, 위치 1)로 시작할 수 있다. 현재 비트 위치는 추적되고, 예를 들어, 버퍼 메모리(112)와 같은 메모리에 저장될 수 있다. 곱셈 연산을 시작할 때, 비트 위치는 위치 1로 시작하고, 그 다음 승수의 최상위 비트가 처리될 때까지 승수(203)의 각각의 비트 위치를 통해 증분된다.
항목(309)에서, 메모리 디바이스(100)는 현재 비트 위치에서 승수(203)의 값을 체크하여 그것이 제1 미리 결정된 값(예를 들어, 이진수 "1" 또는 "하이(hi)")인지 또는 제2 미리 결정된 값(예를 들어, 이진수 "0" 또는 "로우(로우(low))")인지를 결정한다. 값이 제2 미리 결정된 값(예를 들어, 이진수 "0" 또는 "로우(low)")이면, 항목(312)에서, 메모리 디바이스(100)는 현재 비트 위치에서 결과 레지스터(215)에 이진수 "0"을 기록한다. 결과 레지스터(215)는 곱셈 연산이 완료될 때까지 업데이트되는 현재 합산 값(221)을 저장한다. 그 후, 항목(315)에서, 메모리 디바이스(100)는 승수(203)의 다음 비트 위치로 시퀀싱한다. 이렇게 하면 1비트 위치를 처리하는 시퀀스가 완료된다.
승수(203)의 현재 비트가 제1 미리 결정된 값(예를 들어, 이진수 "1" 또는 "하이(hi)")이면, 메모리 디바이스(100)는 팝카운트 결과(330)가 318에서 계산되었는지 여부를 체크한다. 그렇지 않으면, 321에서 메모리 디바이스(100)는 피승수(들)(206a, 206b)에 팝카운트 연산들을 수행한다. 예를 들어, 메모리 디바이스(100)는 피승수들(206a, 206b)을 저장하는 메모리 셀들의 비트 라인들 및 워드 라인들을 활성화시킨 다음, 감지 증폭기 어레이(212)를 사용하여 이진수 "1"을 카운트할 수 있다.
팝카운트 결과(227)는 팝카운트 결과(230)를 나타내는 이진수로 평탄화될 수 있다. 수학적으로, 팝카운트 결과(230)는 피승수의 합(예를 들어, 피가수(summand)로 처리됨)을 나타낸다.
항목(324)에서, 팝카운트 결과(230)는 피연산자 레지스터(224)에 저장된다. 피연산자 레지스터(224)가 팝카운트 결과(230)를 포함한다는 것을 나타내는 플래그(flag)가 설정될 수 있다.
항목(327)에서, 메모리 디바이스는 팝카운트(230) 결과 및 승수(203)의 현재 비트 위치에 기초하여 현재 합산 값을 누산한다. 누산 연산은 승수(203)의 현재 비트에 대응하는 값에 기초하여 수행되기 때문에, 누산 연산은 선택적이다. 예를 들어, 누산 연산은 승수(203)의 비트 위치들이 시퀀싱됨에 따라 이진수 "1"을 검출한 것에 응답하여 선택적으로 수행된다. 추가하여, 팝카운트 결과(230)는 현재 비트 위치에서의 현재 합산 값에 합산된다. 메모리 디바이스(100)는 그런 다음 항목 315로 진행한다. 승수의 모든 비트 위치가 처리되었다면, 곱셈 프로세스는 종료되고 현재 합산 값이 곱셈 결과이다.
도 4a 내지 도 4e는 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 상이한 승수들의 인-메모리(in-memory) 곱셈을 수행하는 메모리 디바이스의 도면들이다. 도 4a는 복수의 승수(402a, 402b) 및 대응하는 피승수(405a, 405b)를 사용하여 곱셈 연산을 수행하는 예를 도시한다. 예를 들어, 도 4a는 제1 승수(402a)를 제1 피승수(405a)와 곱하고 해당 결과를 제2 승수(402b)와 제2 피승수(405b)의 곱하여 합산하는 메모리 디바이스(100)를 예시한다. 도 4a에 도시된 예에서, 제1 승수(402a)는 십진수 "6"의 값을 갖고, 제1 피승수(405a)는 십진수 "9"의 값을 갖고, 제2 승수(402b)는 십진수 "10"의 값을 갖고, 제2 피승수(405b)는 십진수 "13"의 값을 갖는다. 따라서, 도 4a는 상이한 승수들(402a, 402b)이 개개의 피승수들(405a, 405b)에 적용되는 실시예를 도시한다. 그러나, 임의의 수의 승수들 및 피승수들이 도 4a에 도시된 곱셈 연산의 일부로서 포함될 수 있다. 문맥에 따라, 용어 "승수(multiplier)" 및 "피승수(multiplicand)"는 상호교환가능하다. 예를 들어, 피승수(405)는 승수로서 사용될 수 있고 승수(402)는 피승수로서 사용될 수 있다.
도 4a는 피연산자들이 비트-직렬 구성으로 저장되고 각각의 피연산자의 비트 위치들이 동일한 워드 라인들을 공유하는 곱셈 연산의 상이한 피연산자들(예를 들어, 승수들(402a, 402b) 및 피승수들(405a, 405b))을 도시한다. 예를 들어, 피연산자들의 최하위 비트들로부터 시작하여, 피연산자들의 비트들은 제1 워드 라인(WL 1)을 따라 저장되고 제4 워드 라인(WL 4)까지의 범위이다. 제1 승수(402a)는 제1 비트 라인(BL 1)을 따라 저장되고, 제1 피승수(405a)는 제2 비트 라인(BL 2)을 따라 저장되고, 제2 승수(402b)는 제3 비트 라인(BL 3)을 따라 저장되고, 제2 피승수(405b)는 제4 비트 라인(BL 4)을 따라 저장된다.
도 4a는 승수들(402a, 402b)이 홀수 비트 라인들을 따라 저장되고, 피승수들(405a, 405b)이 짝수 비트 라인들을 따라 저장되는 예를 도시한다. 이와 관련하여, 비트 라인들은 승수들(402a, 402b)을 저장하는 것과 피승수들(405a, 405b)을 저장하는 것 사이에서 교번할 수 있다.
추가하여, 메모리 디바이스(100)는 연속된 비트 라인 쌍이 동일한 감지 증폭기에 결합되도록 구성될 수 있다. 예를 들어, BL 1 및 BL 2는 제1 감지 증폭기(SA 1)에 결합되고, BL 3 및 BL 4는 제2 감지 증폭기(SA 2)에 결합된다. 이와 관련하여 승수 및 대응하는 피승수를 저장하는 비트 라인은 동일한 감지 증폭기에 결합된다.
도 4a의 예에 도시된 곱셈 연산은 내적 결과를 생성하는 내적 연산을 나타낼 수 있다. 예를 들어, 승수들은 제1 행렬로부터 기원(originate)할 수 있고, 피승수들은 제2 행렬로부터 기원할 수 있다. 내적 계산은 내적 결과를 생성하기 위해 제1 행렬을 제2 행렬과 곱하는 데 적용된다. 내적 계산은 컨볼루션 신경망에서 사용되는 피처 맵(feature map)에서의 값으로 사용될 수 있다. 예를 들어, 하나의 행렬은 컨볼루션 필터를 포함할 수 있는 반면, 다른 행렬은 컨볼루션 필터를 사용하여 피처 검출의 대상이 되는 데이터의 일부를 포함할 수 있다.
도 4a는 복수의 승수들(402a, 402b) 및 피승수들(405a, 405b)을 사용하여 곱셈 연산을 수행하도록 메모리 디바이스를 구성하는 일부 실시예들을 도시하지만, 다른 배열들이 본 개시의 범위 내에 있다. 예를 들어, 도 4a의 곱셈 연산에 사용되는 피연산자들은 동일한 메모리 어레이(103)의 상이한 비트 라인들 상에 또는 상이한 메모리 어레이들(103)의 비트 라인들에 저장될 수 있다. 예를 들어, 제1 승수(402a) 및 제2 승수(402b)는 제1 메모리 어레이(103)에 저장될 수 있는 반면, 제2 피승수(405a) 및 제2 피승수(405b)는 제2 메모리 어레이(103)에 저장될 수 있다. 제1 및 제2 메모리 어레이로부터의 비트 라인은 동일한 감지 증폭기와 결합될 수 있다. 다른 예로서, 승수들(402a, 402b)은 제1 비트 라인을 따라 저장될 수 있는 반면, 피승수들(405a, 405b)은 제2 비트 라인을 따라 저장될 수 있다. 다른 예로서, 승수(402a) 및 피승수(405a)는 제1 비트 라인을 따라 저장될 수 있는 반면, 승수(402a) 및 피승수(405b)는 제2 비트 라인을 따라 저장될 수 있다. 또한, 일부 실시예들에서, 승수들(402a, 402b)은 메모리 어레이(103) 이외의 메모리로부터 제어기(109)에 의해 수신될 수 있다. 예를 들어, 승수들(402a, 402b)은 버퍼 메모리(112)에 저장되거나 시스템 링크(115)를 통해 외부 소스로부터 수신될 수 있다. 다른 실시예에서, 각각의 감지 증폭기는 그것에 대한 로컬, 그 승수(또는 피승수)를 저장하기 위한 개개의 레지스터를 가질 수 있고, 대응하는 피승수(또는 승수)가 메모리 어레이로부터 액세스될 수 있다.
도 4b-4e는 승수들(402a, 402b)의 각각의 비트 위치를 통해 시퀀싱할 때 곱셈 연산을 도시함으로써 도 4a의 예에 구축된다. 도 4b는 승수들(402a, 402b)의 비트 위치 1에서의 곱셈 연산을 도시한다. 제어기(109)는 승수들(402a, 402b)을 저장하는 비트 라인들을 활성화한다. 이 경우, 제1 승수(402a)는 BL 1을 따라 저장되고, 제2 승수(402b)는 BL 3을 따라 저장된다. 도 4b는 이들 비트 라인들을 따라 화살표를 제시함으로써 BL 1 및 BL 3의 활성화를 예시한다. 제어기(109)는 또한, 상기 예에서 WL 1인 승수들(402a, 402b)의 위치 1에 대응하는 워드 라인을 선택한다. WL 1의 활성화는 이 워드 라인에 화살표를 표시하여 도시된다. 제1 감지 증폭기(SA 1)는 이진수 "0"을 검출하고, 제2 감지 증폭기(SA 2)도 이진수 "0"을 검출한다. 현재 비트 위치에서 모든 승수에 대해 이진수 "0"만이 검출될 때, 제어기(109)는 현재 비트 위치(429)로서 결과 레지스터(423)의 현재 합산 값(426)으로서 이진 "0"을 기록한다. 특정 비트 위치에 대해 이진수 "0"만 있는 경우 제어기는 팝카운트 연산 및 누적 연산을 바이패스한다. 그 후, 현재 비트 위치는 승수(402a, 402b)의 다음 비트 위치로 1씩 증분된다.
도 4c는 승수들(402a, 402b)의 비트 위치 2에서의 곱셈 연산을 도시한다. 제어기(109)는 BL 1 및 BL 3인 승수들(402a, 402b)을 저장하는 비트 라인들을 활성화한다. 도 4c는 이들 비트 라인들을 따라 화살표(숫자 1을 가짐)를 제시함으로써 BL 1 및 BL 3의 활성화를 예시한다. 그런 다음, 제어기(109)는, 예에서, WL 2인 승수들(402a, 402b)의 위치 2에 대응하는 워드 라인을 선택한다. WL 2의 활성화는 이 워드 라인에 화살표를 제시하여 도시된다. 제1 감지 증폭기(SA 1)는 이진수 "1"을 검출하고 제2 감지 증폭기(SA 2)는 또한 이진수 "1"을 검출한다. 현재 위치에서 이진수 "1"을 갖는 각각의 승수(402a, 402b)에 대해, 대응하는 피승수(405a, 405b)가 식별되고, 식별된 피승수(405a, 405b)에 대해 팝카운트 연산이 수행된다. 예를 들어, 제1 승수(402a)가 위치 2에서 이진수 "1"을 산출했기 때문에, 그 대응하는 피승수(예를 들어, 제1 피승수(405a))에 대한 비트 라인이 선택된다. 마찬가지로, 제2 승수(402b)가 또한 위치 2에서 이진수 "1"을 산출했기 때문에, 그의 대응하는 피승수(예를 들어, 제2 피승수(405b))에 대한 비트 라인이 선택된다. 도 4c는 이들 비트 라인들을 따라 화살표(숫자 2를 가짐)를 제시함으로써 BL 2 및 BL 4의 활성화를 예시한다.
그런 다음, 선택된 피승수들과 연관된 워드 라인들을 활성화함으로써 선택된 피승수들(405a, 405b)에 대해 팝카운트 연산들이 수행된다. 이 경우, 팝카운트 연산들은 2개의 "1"의 카운트를 산출하는 WL 1을 활성화하는 것, 제로의 "1"의 카운트를 산출하는 WL 2를 활성화하는 것, 하나의 "1"의 카운트를 산출하는 WL 3을 활성화하는 것, 및 2개의 "1"의 카운트를 산출하는 WL 4를 활성화하는 것을 포함한다. 팝카운트 결과(436)는 따라서 MSB=>[2, 1, 0, 2]<=LSB이다. 팝카운트 결과(436)를 이진수로 평탄화하면 피연산자 레지스터(433)에 저장된 팝카운트 결과의 이진 버전인 숫자 "10110"이 생성된다. 팝카운트 결과(439)는 선택된 피승수들(405a, 405b)의 합산을 나타낸다.
팝카운트 결과가 생성된 후, 제어기(109)는 결과 레지스터(423)에 저장된 현재 합산 값(426)에 팝카운트 결과(439)를 합산하여 결과 레지스터(423)의 현재 값(426)을 업데이트한다. 또한, 누산 연산은 비트 위치 2에서 발생한다. 이는 "101100"의 현재 합산 값(426)을 생성한다. 그 후, 현재 비트 위치는 승수(402a, 402b)의 다음 비트 위치로 1씩 증분된다.
도 4d는 승수들(402a, 402b)의 비트 위치 3에서의 곱셈 연산을 도시한다. 제어기(109)는 BL 1 및 BL 3인 승수들(402a, 402b)을 저장하는 비트 라인들을 다시 활성화한다. 도 4d는 이들 비트 라인들을 따라 화살표(숫자 1을 가짐)를 제시함으로써 BL 1 및 BL 3의 활성화를 도시한다. 제어기(109)는 그런 다음, 예에서 WL 3인 승수들(402a, 402b)의 위치 3에 대응하는 워드 라인을 선택한다. WL 3의 활성화는 이 워드 라인에 화살표를 제시하여 도시된다. 제1 감지 증폭기(SA 1)는 이진수 "1"을 검출하고, 제2 감지 증폭기(SA 2)는 또한 이진수 "0"을 검출한다. 현재 위치에서 이진수 "1"을 갖는 각 승수(402a)에 대해, 대응하는 피승수(405a)가 식별되고 식별된 피승수(405a)에 대해 팝카운트 연산이 수행된다. 예를 들어, 제1 승수(402a)가 위치 3에서 이진수 "1"을 산출했기 때문에, 그의 대응하는 피승수(예를 들어, 제1 피승수(405a))에 대한 비트 라인이 선택된다. 그러나, 제2 승수(402b)가 위치 3에서 이진수 "0"을 산출했기 때문에, 그의 대응하는 피승수(예를 들어, 제2 피승수(405b))에 대한 비트 라인은 비활성화된다. 도 4d는 이 비트 라인을 따라 화살표(숫자 2를 가짐)를 제시함으로써 BL 2의 활성화를 예시한다.
그런 다음, 선택된 피승수와 연관된 워드 라인들을 활성화함으로써 선택된 피승수(405a)에 대해 팝카운트 연산들이 수행된다. 이 경우, 팝카운트 연산들은 하나의 "1"의 카운트를 산출하는 WL 1을 활성화하는 것, 제로의 "1"의 카운트를 산출하는 WL 2를 활성화하는 것, 제로의 "1"의 카운트를 산출하는 WL 3을 활성화하는 것, 및 하나의 "1"의 카운트를 산출하는 WL 4를 활성화하는 것을 포함한다. 팝카운트 결과(436)는 따라서 [1, 0, 0, 1]이다. 팝카운트 결과(436)를 이진수로 평탄화하면 피연산자 레지스터(433)에 저장된 팝카운트 결과의 이진 버전인 숫자 "1001"이 생성된다. 팝카운트 결과(439)는 선택된 피승수(405a)의 합산을 나타낸다. 피승수(405a)가 하나만 선택된 경우, 그 합산은 피승수(405a)의 값과 같다.
팝카운트 결과가 생성된 후, 제어기(109)는 결과 레지스터(423)에 저장된 현재 합산 값(426)에 팝카운트 결과(439)를 더하여 결과 레지스터(423)의 현재 값(426)을 업데이트한다. 또한, 누산 연산은 비트 위치 3에서 발생한다. 이는 "1010000"의 현재 합계 값(426)을 생성한다. 그 후, 현재 비트 위치는 승수(402a, 402b)의 다음 비트 위치로 1씩 증분된다.
도 4e는 승수들(402a, 402b)의 비트 위치 4에서의 곱셈 연산을 도시한다. 제어기(109)는 BL 1 및 BL 3인 승수들(402a, 402b)을 저장하는 비트 라인들을 다시 활성화한다. 도 4e는 이들 비트 라인들을 따라 화살표(숫자 1을 가짐)를 제시함으로써 BL 1 및 BL 3의 활성화를 도시한다. 제어기(109)는 그런 다음, 예에서 WL 4인 승수들(402a, 402b)의 위치 4에 대응하는 워드 라인을 선택한다. WL 4의 활성화는 이 워드 라인에 화살표를 제시하여 도시된다. 제1 감지 증폭기(SA 1)는 이진수 "0"을 검출하고, 제2 감지 증폭기(SA 2)는 또한 이진수 "1"을 검출한다. 현재 위치에서 이진수 "1"을 갖는 각각의 승수(402b)에 대해 대응하는 피승수(405b)가 식별되고 식별된 피승수(405b)에 대해 팝카운트 연산이 수행된다. 예를 들어, 제1 승수(402a)가 위치 4에서 이진수 "0"을 산출했기 때문에, 그의 대응하는 피승수(예를 들어, 제1 피승수(405a))에 대한 비트 라인은 비활성화된다. 그리고, 제2 승수(402b)가 위치 4에서 이진수 "1"을 산출했기 때문에, 그의 대응하는 피승수(예를 들어, 제2 피승수(405b))에 대한 비트 라인이 선택된다. 도 4d는 이 비트 라인을 따라 화살표(번호 2를 가짐)를 제시함으로써 BL 4의 활성화를 예시한다.
이어서, 선택된 피승수와 연관된 워드 라인들을 활성화함으로써 선택된 피승수(405b)에 대해 팝카운트 연산들이 수행된다. 이 경우, 팝카운트 연산은 하나의 "1"의 카운트를 산출하는 WL 1을 활성화하는 것, 제로의 "1"의 카운트를 산출하는 WL 2를 활성화하는 것, 하나의 "1"의 카운트를 산출하는 WL 3을 활성화하는 것, 및 하나의 "1"의 카운트를 산출하는 WL 4를 활성화하는 것을 포함한다. 따라서, 팝카운트 결과(436)는 [1, 0, 1, 1] MSB=> [1, 1, 0, 1]<=LSB이다. 팝카운트 결과(436)를 이진으로 평탄화하면 피연산자 레지스터(433)에 저장된 팝카운트 결과의 이진 버전인 숫자 "1101"이 생성된다. 팝카운트 결과(439)는 선택된 피승수(405b)의 합산을 나타낸다.
팝카운트 결과가 생성된 후, 제어기(109)는 결과 레지스터(423)에 저장된 현재 합산 값(426)에 팝카운트 결과(439)를 가산하여 결과 레지스터(423)의 현재 값(426)을 업데이트한다. 또한, 누산 연산은 비트 위치 4에서 발생한다. 이는 "10111000"(십진수로 184)의 현재 합계 값(426)을 생성한다. 제어기가 최하위 비트에서 최상위 비트까지 승수의 모든 비트 위치를 통해 시퀀싱하므로, 곱셈 연산이 완료된다 : 184 = 6 x 9 + 10 x 13. 결과 레지스터(423)의 값은 곱셈 결과(445)를 나타내며, 이는 피연산자가 행렬 원소를 나타낼 때 내적 결과일 수 있다.
도 5는 다양한 실시예들에 따른 팝카운트 연산들을 사용하여 상이한 승수들의 인-메모리 곱셈을 수행하는 메모리 디바이스의 기능을 예시하는 흐름도이다. 흐름도의 박스들은 메모리 디바이스(100)의 제어기에 의해 실행가능한 마이크로코드, 기계 코드, 펌웨어, 또는 다른 소프트웨어를 나타낼 수 있다. 흐름도의 박스는 대안적으로 방법(500)의 단계를 나타낼 수 있다. 방법은 메모리 디바이스(100)에 의해 수행될 수 있다.
항목(501)에서, 메모리 디바이스(100)는 하나 이상의 피승수(405a, 405b)를 하나 이상의 메모리 어레이에 저장할 수 있다. 일부 실시예들에서, 메모리 디바이스(100)는 승수들을 저장할 수 있다. 피승수들(405a, 405b)은 별개의 비트 라인들을 따라 비트-직렬 구성으로 저장될 수 있다. 각각의 피승수(405a, 405b)의 비트 위치는 동일한 워드 라인 상에 또는 상이한 워드 라인 상에 위치될 수 있다.
항목(504)에서, 메모리 디바이스(100)는 승수(402a, 402b)의 현재 비트 위치를 식별한다. 메모리 디바이스(100)는 승수(402a, 402b)의 최하위 비트(예를 들어, 위치 1)로 시작할 수 있다. 현재 비트 위치는 추적되어 예를 들어, 버퍼 메모리(112)와 같은 메모리에 저장될 수 있다. 곱셈 연산을 시작할 때, 비트 위치는 위치 1로 시작한 다음 승수의 최상위 비트가 처리될 때까지 승수(402a, 402b)의 각각의 비트 위치를 통해 증분된다.
항목(507)에서, 메모리 디바이스(100)는 그것이 제1 미리 결정된 값(예를 들어, 이진수 "1" 또는 "하이(hi)")인지 또는 제2 미리 결정된 값(예를 들어, 이진 "0" 또는 "로우(low)")인지를 결정하기 위해 현재 비트 위치에서 승수들(402a, 402b)의 값들을 체크한다. 값이 모든 승수(402a, 402b)에 대하여 제2 미리 결정된 값(예를 들어, 이진수 "0" 또는 "로우")이면, 메모리 디바이스(100)는, 항목(510)에서, 현재 비트 위치에서 결과 레지스터(423)에 이진수 "0"을 기록한다. 결과 레지스터(423)는 곱셈 연산이 완료될 때까지 업데이트되는 현재 합산 값(426)을 저장한다. 그 후, 항목(513)에서, 메모리 디바이스(100)는 승수들(402a, 402b)의 다음 비트 위치로 시퀀싱한다. 이렇게 하면 1비트 위치를 프로세싱하는 시퀀스가 완료된다.
승수들(402a, 402b)의 임의의 현재 비트가 제1 미리 결정된 값(예를 들어, 이진수 "1"또는 "하이(hi)")과 동일하면, 메모리 디바이스(100)는, (516)에서, 현재 비트 위치에서 이진수 "1"또는 "하이(hi)" 값을 갖는 승수들에 대응하는 피승수들(405a, 405b)을 선택한다. 제어기(109)는 선택된 피승수들(405a, 405b)을 저장하는 셀들과 연관된 비트 라인들을 선택할 수 있다.
항목(519)에서, 메모리 디바이스(100)는 선택된 피승수(들)(405a, 405b)에 대해 팝카운트 연산들을 수행한다. 예를 들어, 메모리 디바이스(100)는 피승수들(405a, 405b)을 저장하는 메모리 셀들의 비트 라인들 및 워드 라인들을 활성화시킨 다음, 감지 증폭기 어레이(212)를 사용하여 이진수 "1"을 카운트할 수 있다.
팝카운트 결과(227)는 팝카운트 결과(439)를 나타내는 이진수로 평탄화될 수 있다. 수학적으로, 팝카운트 결과(439)는 선택된 승수(예를 들어, 피가수(summand)로 처리됨)의 합을 나타낸다.
항목(522)에서, 팝카운트 결과(439)는 피연산자 레지스터(433)에 저장된다.
항목(525)에서, 메모리 디바이스(100)는 팝카운트 결과(439) 및 승수들(405a, 405b)의 현재 비트 위치에 기초하여 현재 합산 값을 누산한다. 누산 연산은 임의의 값들이 승수(402a, 402b)의 현재 비트들에 대응하는지 여부에 기초하여 수행되기 때문에, 누산 연산은 선택적이다. 예를 들어, 누산 연산은 시퀀싱된 승수들(402a, 402b) 중 임의의 승수의 비트 위치들로서 이진수 "1" 검출하는 것에 응답하여 선택적으로 수행된다. 또한, 팝카운트 결과(439)는 현재 비트 위치에서의 현재 합산 값에 가산된다. 그런 다음, 메모리 디바이스(100)는 항목 (513)으로 진행한다. 승수들의 모든 비트 위치들이 처리되었다면, 곱셈 프로세스는 종료되고 현재 합계 값이 곱셈 결과이다. 현재 비트 위치에 대한 누산 연산은 다음 승수에 액세스하고 및/또는 팝카운트 연산을 수행하는 동안 동시에 수행될 수 있다.
도 6은 본 개시의 일부 실시예들에 따른, 메모리 디바이스(100)를 포함하는 예시적인 네트워크화된 시스템(600)을 예시한다. 도 6은 네트워크화된 시스템(600)의 일부인 컴퓨팅 디바이스(602)의 예의 예시적인 부분들을 도시한다. 도 6은 이러한 컴퓨팅 디바이스들이 IoT(Internet of Things) 디바이스들, 모바일 디바이스들, 통신 네트워크 디바이스들 및 디바이스들(예를 들어, 기지국(630) 참조), 기기들(예를 들어, 기기(640) 참조), 및 차량들(예를 들어, 차량(650) 참조)과 같은 다양한 기계들, 장치들, 및 시스템들에 어떻게 통합될 수 있는지를 도시한다.
네트워크화된 시스템(600)의 컴퓨팅 디바이스(602) 및 다른 컴퓨팅 디바이스들(예를 들어, 컴퓨팅 디바이스들(622a, 622b, 622c 및 622d) 참조)은 하나 이상의 통신 네트워크들(620)에 통신 가능하게 결합될 수 있다. 컴퓨팅 디바이스(602)는 예를 들어, 버스(606), 제어기(608)(예를 들어, CPU), 다른 메모리(610), 네트워크 인터페이스(612), 저장 시스템(614), 다른 컴포넌트들(616)(예를 들어, 모바일 또는 컴퓨팅 디바이스들에서 발견되는 임의의 유형의 컴포넌트들, GPS 컴포넌트들, 입력/출력(I/O) 컴포넌트들, 다양한 유형의 사용자 인터페이스 컴포넌트들, 센서들, 카메라 등), 및 메모리 디바이스(100)를 포함한다. 다른 컴포넌트들(616)은 또한 하나 이상의 사용자 인터페이스들(예를 들어, GUI들, 청각 사용자 인터페이스들, 촉각 사용자 인터페이스들 등), 디스플레이들, 상이한 유형의 센서들, 촉각, 오디오 및/또는 시각적 입력/출력 디바이스, 추가 애플리케이션별 메모리, 하나 이상의 추가 제어기(예를 들어, GPU) 또는 이들의 조합을 포함할 수 있다. 버스(606)는 제어기(608), 다른 메모리(610), 네트워크 인터페이스(612), 데이터 저장 시스템(614) 및 다른 컴포넌트들(616)을 통신가능하게 결합하고, 일부 실시예들에서 이러한 컴포넌트들을 메모리 디바이스(100)에 결합할 수 있다. 예를 들어, 메모리 디바이스(100)의 시스템 링크(115)는 버스(606)에 결합될 수 있다.
컴퓨팅 디바이스(602)는 적어도 제어기(608), 다른 메모리(610)(예를 들어, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 예컨대 동기식 DRAM(SDRAM) 또는 램버스(Rambus) DRAM(RDRAM), 정적 랜덤 액세스 메모리(SRAM), 크로스 포인트(cross-point) 또는 크로스 바(cross-bar) 메모리, 크로스바 메모리 등), 메모리 디바이스(100), 및 데이터 저장 시스템(614)을 포함하는 컴퓨터 시스템을 포함하며, 이들은 버스(606)(다수의 버스들을 포함할 수 있음)를 통해 서로 통신할 수 있다. 일부 실시예들에서, 메모리 디바이스(100)는 버스(606)를 통해 통신하지 않을 수 있다.
달리 말하면, 도 6은 본 개시의 실시예들이 동작할 수 있는 컴퓨터 시스템을 갖는 컴퓨팅 디바이스(602)의 블록도를 포함한다. 일부 실시예들에서, 컴퓨터 시스템은 실행될 때, 기계로 하여금 본 명세서에서 논의된 방법론들을 수행하게 하기 위한 명령들의 세트를 포함할 수 있다. 이러한 실시예들에서, 기계는 근거리 통신망(LAN), 인트라넷, 엑스트라넷, 및/또는 인터넷(예를 들어, 네트워크(들)(620) 참조) 내의 다른 기계들에 연결(예를 들어, 네트워크 인터페이스(612)를 통해 네트워킹)될 수 있다. 기계는 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 기계의 역할로, 피어 투 피어(또는 분산) 네트워크 환경에서 피어 기계로, 또는 클라우드 컴퓨팅 인프라스트럭처 또는 환경에서 서버 또는 클라이언트 기계로 동작할 수 있다.
제어기(608)는 마이크로프로세서, 중앙 프로세싱 유닛 등과 같은 하나 이상의 범용 프로세싱 디바이스를 나타낸다. 보다 구체적으로, 프로세싱 디바이스는 CISC(complex instruction set computing) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, SIMD(single instruction multiple data), MIMD(multiple instructions multiple data), 또는 다른 명령 세트들을 구현하는 프로세서, 또는 명령 세트들의 조합을 구현하는 프로세서들일 수 있다. 제어기(608)는 또한 ASIC, 프로그램 가능 로직 예컨대, FPGA, 디지털 신호 프로세서(DSP), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 프로세싱 디바이스일 수 있다. 제어기(608)는 본 명세서에서 논의된 동작들 및 단계들을 수행하기 위한 명령들을 실행하도록 구성된다. 제어기(608)는 (네트워크(들)(620)와 같은) 하나 이상의 통신 네트워크를 통해 통신하기 위해 네트워크 인터페이스(612)와 같은 네트워크 인터페이스 디바이스를 추가로 포함할 수 있다.
데이터 저장 시스템(614)은 본 명세서에 설명된 방법론들 또는 기능들 중 임의의 하나 이상을 구현하는 명령들 또는 소프트웨어의 하나 이상의 세트가 저장되는 기계 판독가능 저장 매체(컴퓨터 판독가능 매체로도 알려짐)를 포함할 수 있다. 데이터 저장 시스템(614)은 데이터 저장 시스템에 상주하는 명령들을 적어도 부분적으로 실행할 수 있는 것과 같은 실행 능력들을 가질 수 있다. 명령들은 또한 컴퓨터 시스템에 의한 실행 동안 다른 메모리(610) 및 메모리 디바이스(100) 중 적어도 하나 내에 그리고/또는 제어기(608) 내에 완전히 또는 적어도 부분적으로 상주할 수 있으며, 다른 메모리(610) 및 메모리 디바이스(100) 중 적어도 하나 뿐만 아니라 제어기(608)도 또한 기계 판독가능 저장 매체를 구성한다. 다른 메모리(610)는 컴퓨팅 디바이스(602)의 메인 메모리 또는 시스템 메모리이거나 이를 포함할 수 있다. 다른 메모리(610) 및 메모리 디바이스(100)는 컴퓨팅 디바이스(602)의 임의의 메모리에 상주하는 명령들을 적어도 부분적으로 실행할 수 있는 것과 같은 실행 능력들을 가질 수 있다.
언급된 바와 같이, 네트워크화된 시스템(600)은 컴퓨팅 디바이스들을 포함하고, 컴퓨팅 디바이스들 각각은 하나 이상의 버스들, 제어기, 메모리, 네트워크 인터페이스, 저장 시스템, 및 다른 컴포넌트들을 포함할 수 있다. 또한, 도 6에 도시되고 본 명세서에 설명된 컴퓨팅 디바이스들 각각은 모바일 디바이스 등, 예를 들어, 스마트폰, 태블릿 컴퓨터, IoT 디바이스, 스마트 텔레비전, 스마트 워치, 안경 또는 다른 스마트 가전, 차량 내 정보 시스템, 웨어러블 스마트 디바이스, 게임 콘솔, PC, 디지털 카메라, 또는 이들의 임의의 조합을 포함하거나 이들의 일부일 수 있다. 도시된 바와 같이, 컴퓨팅 디바이스들은 블루투스 등과 같은 로컬 디바이스 네트워크, 광역 네트워크(WAN), 근거리 네트워크(LAN), 인트라넷, 4G 또는 5G와 같은 모바일 무선 네트워크, 엑스트라넷, 인터넷, 및/또는 이들의 임의의 조합을 포함할 수 있는 네트워크(들)(620)에 연결될 수 있다. 일부 실시예들에서, 접속(619)으로 도시된, 메모리 디바이스(100)는 통신 네트워크(들)(620)를 통해 다른 디바이스들과 개별적으로 통신할 수 있도록 적어도 하나의 네트워크 인터페이스를 포함할 수 있다. 예를 들어, 시스템 링크(115)는 통신 네트워크(620)에 결합될 수 있다. 이 점에서, 메모리 디바이스(100)의 메모리 모듈 또는 메모리 모듈 시스템은 이러한 컴포넌트가 통신 네트워크(들)(620)를 통해 다른 디바이스들과 개별적으로 통신할 수 있도록 그 자신의 네트워크 인터페이스를 가질 수 있다.
본 명세서에 설명된 컴퓨팅 디바이스들 각각은 개인용 컴퓨터(PC), 태블릿 PC, 셋톱(set-top) 박스(STB), 개인 휴대 정보 단말기(PDA), 셀룰러 전화, 웹 기기, 서버, 네트워크 라우터, 스위치 또는 브리지(bridge), 또는 해당 기계에 의해 취해질 액션들을 특정하는 명령들의 세트(순차적 또는 다른 방식)를 실행할 수 있는 임의의 기계일 수 있거나 그에 의해 대체될 수 있다.
또한, 도 6에 도시된 컴퓨팅 디바이스(602)에 대해 단일 기계가 예시되어 있지만, 용어 "기계(machine)"는 또한 본 명세서에서 논의된 방법론들 또는 동작들 중 하나 이상을 수행하기 위해 명령들의 세트(또는 다수의 세트들)를 개별적으로 또는 공동으로 실행하는 기계들의 임의의 집합을 포함하는 것으로 간주되어야 한다. 그리고, 컴퓨팅 시스템들 뿐만 아니라 예시된 컴퓨팅 디바이스들 각각은 적어도 버스 및/또는 마더보드, 하나 이상의 제어기들(예컨대, 하나 이상의 CPU들), 임시 데이터 저장소를 포함할 수 있는 메인 메모리, 적어도 하나의 유형의 네트워크 인터페이스, 영구 데이터 저장소를 포함할 수 있는 저장 시스템, 및/또는 이들의 임의의 조합을 각각 포함할 수 있다. 일부 멀티 디바이스 실시예들에서, 하나의 디바이스는 본 명세서에 설명된 방법들의 일부 부분들을 완료한 다음, 다른 디바이스가 본 명세서에 설명된 방법들의 다른 단계들을 계속할 수 있도록 완료 결과를 네트워크를 통해 다른 디바이스에 발송할 수 있다.
메모리, 제어기, 및 데이터 저장 부분들이 단일 부분들로서 도시되지만, 각각의 부분은 명령들을 저장하고 그들 개개의 동작들을 수행할 수 있는 하나 이상의 부분들을 포함하도록 간주되어야 한다. 용어 "기계 판독가능 저장 매체"는 또한 기계에 의한 실행을 위한 명령들의 세트를 저장 또는 인코딩할 수 있고 기계로 하여금 본 개시의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주되어야 한다. 따라서, 용어 "기계 판독가능 저장 매체"는 솔리드-스테이트 메모리들, 광학 매체, 및 자기 매체를 포함하는 것으로 간주되어야 하지만, 이에 제한되지 않는다.
문구 "X, Y, 또는 Z 중 적어도 하나"와 같은 택일적(disjunctive) 언어는, 달리 구체적으로 언급되지 않는 한, 일반적으로 항목, 용어 등이 X, Y, 또는 Z, 또는 이들의 임의의 조합(예를 들어, X, Y, 및/또는 Z)일 수 있다는 것을 제시하기 위해 사용되는 문맥으로 달리 이해된다. 따라서, 이러한 택일적 언어는 일반적으로 특정 실시예들이 X 중 적어도 하나, Y 중 적어도 하나, 또는 Z 중 적어도 하나가 각각 존재할 것을 요구하는 것을 암시하도록 의도되지 않으며, 그렇지 않아야 한다.
선행하는 상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 알고리즘들 및 심볼 표현들의 관점에서 제시되었다. 이러한 알고리즘 설명 및 표현은 데이터 프로세싱 분야의 숙련자가 자신의 작업의 내용을 해당 분야의 숙련자에게 가장 효과적으로 전달하기 위해 사용하는 방법입니다. 알고리즘은 여기서 일반적으로 원하는 결과를 초래하는 자기 일관적인 작업 시퀀스로 이해된다. 동작들은 물리량의 물리적 조작이 필요한 동작들이다. 보통, 반드시 그런 것은 아니지만, 이들 수량은 저장, 조합, 비교 및 다른 방식으로 조작될 수 있는 전기 또는 자기 신호의 형태를 취한다. 이들 신호를 비트, 값, 요소, 심볼, 문자, 용어, 숫자 등으로 지칭하는 것이 주로 일반적인 용도의 이유로 때때로 편리한 것으로 입증되었다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리량들과 연관되어야 하고 이들 수량들에 적용되는 편리한 라벨들에 불과하다는 것을 명심해야 한다. 본 개시는 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리량(전자적)들로서 표현된 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 그러한 정보 저장 시스템들 내의 물리량로서 유사하게 표현된 다른 데이터로 조작 및 변환하는 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스들의 동작 및 프로세스들을 지칭할 수 있다.
본 개시는 또한 본 명세서에서의 동작들을 수행하기 위한 장치에 관한 것이다. 이 장치는 의도된 목적을 위해 특별히 구성될 수 있거나, 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 플로피 디스크들, 광 디스크들, CD-ROM들, 및 자기-광 디스크들을 포함하는 임의의 유형의 디스크, 판독-전용 메모리들(ROM들), 랜덤 액세스 메모리들(RAM들), EPROM들, EEPROM들, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하기에 적합한 임의의 유형의 매체와 같은 컴퓨터 판독가능 저장 매체에 저장될 수 있으며, 각각은 컴퓨터 시스템 버스에 결합된다.
본 명세서에 제시된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정 컴퓨터 또는 다른 장치와 관련되지 않는다. 다양한 범용 시스템들이 본 명세서의 교시들에 따른 프로그램들과 함께 사용될 수 있거나, 또는 방법을 수행하기 위해 더 특수화된 장치를 구성하는 것이 편리함을 증명할 수 있다. 이러한 다양한 시스템에 대한 구조는 이하의 설명에서 제시된 바와 같이 나타날 것이다. 또한, 본 개시는 임의의 특정 프로그래밍 언어를 참조하여 설명되지 않는다. 다양한 프로그래밍 언어들이 본 명세서에 설명된 본 개시의 교시들을 구현하기 위해 사용될 수 있다는 것이 이해될 것이다.
본 개시는 본 개시에 따른 프로세스를 수행하도록 컴퓨터 시스템(또는 다른 전자 디바이스들)을 프로그래밍하는 데 사용될 수 있는 명령들이 저장된 기계 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 기계 판독 가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 일부 실시예들에서, 기계 판독가능(예를 들어, 컴퓨터 판독가능) 매체는 판독 전용 메모리("ROM"), 랜덤 액세스 메모리("RAM"), 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 컴포넌트 등과 같은 기계(예를 들어, 컴퓨터) 판독가능 저장 매체를 포함한다.
본 개시의 전술한 실시예들은 본 개시의 원리들의 명확한 이해를 위해 제시된 구현들의 단지 가능한 예들이라는 것이 강조되어야 한다. 본 개시의 사상 및 원리로부터 실질적으로 벗어나지 않고 전술한 실시예(들)에 대해 많은 변형 및 수정이 이루어질 수 있다. 이러한 모든 수정들 및 변형들은 본 개시의 범위 내에 포함되고 이하의 청구항들에 의해 보호되도록 의도된다.

Claims (21)

  1. 시스템에 있어서,
    적어도 하나의 메모리 디바이스;
    메모리 디바이스의 적어도 하나의 메모리 어레이;
    상기 적어도 하나의 메모리 어레이의 복수의 메모리 셀을 포함하고, - 상기 복수의 메모리 셀은 복수의 비트 라인 및 복수의 워드 라인을 통해 액세스 가능하고, 적어도 하나의 피승수(multiplicand)는 상기 메모리 어레이에 저장되고, 적어도 하나의 승수(multiplier)는 상기 메모리 디바이스에 저장됨 -;
    상기 적어도 하나의 메모리 디바이스는,
    상기 적어도 하나의 피승수에 대해 수행된 복수의 팝카운트 연산(popcount operation)에 기초하여 상기 적어도 하나의 피승수의 합산을 생성하고; 및
    상기 합산(sum)에 기초하여 그리고 상기 승수의 비트를 통해 시퀀싱함으로써 곱셈 결과(multiplication result)를 생성하도록 구성된, 시스템.
  2. 제1항에 있어서, 상기 합산은, 상기 승수의 제1 비트가 대응하는 위치에서 제1 미리 정의된 값을 갖는 것에 응답하여, 상기 팝카운트 결과와 현재 합산 값의 누산(accumulation)에 기초하여 생성되는, 시스템.
  3. 제2항에 있어서, 상기 합산은, 상기 승수의 비트가 대응하는 위치에서 제2 미리 정의된 값을 갖는 것에 응답하여, 누산하지 않고 위치를 통한 시퀀싱에 기초하여 생성되는, 시스템.
  4. 제1항에 있어서, 적어도 하나의 피승수는 대응하는 비트 라인을 따라 저장되는, 시스템.
  5. 제4항에 있어서, 상기 복수의 팝카운트 연산은 상기 적어도 하나의 피승수의 각각의 비트 위치에 대해 상기 제1 미리 정의된 값을 갖는 비트의 수를 카운트하는 것을 포함하는, 시스템.
  6. 제5항에 있어서, 상기 적어도 하나의 피승수의 비트 위치는 동일한 워드 라인을 따라 저장되는, 시스템.
  7. 제4항에 있어서, 복수의 감지 증폭기를 더 포함하고, 각각의 감지 증폭기는 대응하는 비트 라인에 결합되고, 상기 복수의 감지 증폭기는 상기 복수의 팝카운트 연산을 수행하는 데 사용되는, 시스템.
  8. 시스템에 있어서,
    적어도 하나의 메모리 디바이스;
    메모리 디바이스의 적어도 하나의 메모리 어레이;
    상기 적어도 하나의 메모리 어레이의 복수의 메모리 셀을 포함하고 - 상기 복수의 메모리 셀은 복수의 비트 라인 및 복수의 워드 라인을 통해 액세스 가능하고, 적어도 하나의 피승수는 상기 메모리 어레이에 저장되고, 상기 적어도 하나의 피승수에 대응하는 적어도 하나의 승수는 상기 메모리 어레이에 저장됨 -; 및
    상기 메모리 디바이스는 상기 적어도 하나의 피승수에 대해 수행되는 복수의 팝카운트 연산에 기초하여 상기 적어도 하나의 피승수 및 상기 적어도 하나의 승수의 내적 결과(dot product)를 생성하도록 추가로 구성되고, 상기 복수의 팝카운트 연산은 상기 적어도 하나의 승수의 비트를 통해 시퀀싱(sequencing)함으로써 선택적으로 수행되는, 시스템.
  9. 제8항에 있어서, 팝카운트 연산의 세트는 상기 적어도 하나의 승수의 비트의 각각의 비트 위치에 대한 팝카운트 결과를 생성하는, 시스템.
  10. 제9항에 있어서, 각각의 팝카운트 결과는 상기 적어도 하나의 피승수에 대해 복수의 팝카운트 연산을 선택적으로 적용함으로써 생성되고, 각각의 팝카운트 연산은 상기 적어도 하나의 피승수의 각각의 비트 위치에 대해 제1 값을 갖는 비트의 수를 카운트하는 것을 포함하는, 시스템.
  11. 제10항에 있어서, 각각의 팝카운트 결과는 상기 적어도 하나의 승수의 비트가 대응하는 비트 위치에서 제1 미리 정의된 값을 갖는 것에 응답하여 생성되고, 상기 적어도 하나의 승수의 비트가 대응하는 비트 위치에서 제2 미리 정의된 값을 갖는 것에 응답하여 바이패스(bypass)되는, 시스템.
  12. 제10항에 있어서, 상기 적어도 하나의 승수는 홀수 비트 라인을 따라 저장되고, 상기 적어도 하나의 피승수는 짝수 비트 라인을 따라 저장되는, 시스템.
  13. 제10항에 있어서, 연속적인 비트 라인의 각각의 쌍은 개개의 감지 증폭기에 결합되는, 시스템.
  14. 제10항에 있어서, 복수의 내적 계산 중의 각각의 내적 계산은 대응하는 피승수를 갖는 승수의 그룹으로부터 생성되는, 시스템.
  15. 방법에 있어서,
    복수의 피승수 및 대응하는 승수를 메모리 디바이스에 저장하는 단계, - 상기 메모리 디바이스는 복수의 비트 라인 및 복수의 워드 라인을 통해 액세스 가능한 복수의 메모리 셀을 포함함- ;
    각각의 피승수와 대응하는 승수의 곱셈을 합산함으로써 내적 결과(dot porduct)를 생성하는 단계를 포함하고, 상기 내적 결과는,
    상기 승수의 비트의 위치를 통한 시퀀싱(sequencing)하고;
    대응하는 승수의 현재 비트 위치의 비트 값에 기초하여 상기 피승수에 복수의 팝카운트 연산을 선택적으로 적용하여 팝카운트 결과를 생성하고; 및
    상기 적어도 하나의 팝카운트 결과를 선택적으로 누산함으로써 생성되고,
    상기 내적 결과(dot product result)는 상기 시퀀싱 완료시 생성되는, 방법.
  16. 제15항에 있어서, 상기 내적 결과는 컨볼루션 신경망(convolutional neural network)에서 사용되는 피처 맵(feature map) 내의 값으로 생성되는, 방법.
  17. 제15항에 있어서, 상기 승수는 제1 메모리 어레이에 저장되고, 상기 피승수는 상기 제1 메모리 어레이와 상이한 제2 메모리 어레이에 저장되는, 방법.
  18. 제15항에 있어서, 상기 승수는 홀수 비트 라인을 따라 저장되고, 상기 피승수는 짝수 비트 라인을 따라 저장되는, 방법.
  19. 제15항에 있어서, 연속적인 비트 라인의 각각의 쌍은 개개의 감지 증폭기에 결합되는, 방법.
  20. 제19항에 있어서, 상기 감지 증폭기는 상기 복수의 팝카운트 연산을 수행하는 데 사용되는, 방법.
  21. 방법에 있어서,
    메모리 디바이스의 메모리 어레이에 적어도 하나의 피가수(summand)를 저장하는 단계, - 상기 메모리 어레이는 복수의 비트 라인 및 복수의 워드 라인을 통해 액세스 가능한 복수의 메모리 셀을 포함함-;
    상기 적어도 하나의 피가수의 팝카운트 결과에 승수를 곱하고, 그것을 합산값에 누산하여 융합 곱셈 누산 결과(fused multiply-accumulation result)를 생성하는 단계;
    상기 적어도 하나의 피가수에 대해 복수의 팝카운트 연산을 적용함으로써 팝카운트 결과를 생성하는 단계; 및
    상기 승수의 적어도 하나의 비트를 통해 시퀀싱함으로써 상기 팝카운트 결과와 현재 합산 값을 선택적으로 누산하는 단계;를 포함하고,
    상기 융합 곱셈 누산 결과는 상기 승수의 적어도 하나의 비트를 통해 시퀀싱을 완료할 때 생성되는, 방법.
KR1020227034162A 2020-03-31 2021-03-26 프로세싱 인 메모리를 사용하는 카운터 기반 곱셈 KR20220149729A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/836,773 US11934798B2 (en) 2020-03-31 2020-03-31 Counter-based multiplication using processing in memory
US16/836,773 2020-03-31
PCT/US2021/024481 WO2021202308A1 (en) 2020-03-31 2021-03-26 Counter-based multiplication using processing in memory

Publications (1)

Publication Number Publication Date
KR20220149729A true KR20220149729A (ko) 2022-11-08

Family

ID=77856148

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227034162A KR20220149729A (ko) 2020-03-31 2021-03-26 프로세싱 인 메모리를 사용하는 카운터 기반 곱셈

Country Status (5)

Country Link
US (1) US11934798B2 (ko)
EP (1) EP4128236A4 (ko)
KR (1) KR20220149729A (ko)
CN (1) CN115552523A (ko)
WO (1) WO2021202308A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11467834B2 (en) * 2020-04-01 2022-10-11 Samsung Electronics Co., Ltd. In-memory computing with cache coherent protocol
US11276463B2 (en) * 2020-06-16 2022-03-15 Micron Technology, Inc. Matching patterns in memory arrays
TWI777231B (zh) * 2020-08-28 2022-09-11 國立中正大學 向量內積計算裝置
US11605418B2 (en) * 2020-10-26 2023-03-14 Micron Technology, Inc. Memory device architecture using multiple physical cells per bit to improve read margin and to alleviate the need for managing demarcation read voltages
TWI760942B (zh) * 2020-11-26 2022-04-11 國立中正大學 可變延遲計算裝置
US20230115373A1 (en) * 2021-10-13 2023-04-13 Qualcomm Incorporated Accumulator for digital computation-in-memory architectures
KR20230070753A (ko) * 2021-11-15 2023-05-23 삼성전자주식회사 디지털 펄스 기반 크로스바 연산을 수행하는 연산 장치 및 그 동작 방법

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6754685B2 (en) * 2000-12-21 2004-06-22 Sun Microsystems, Inc. Dynamic popcount/shift circuit
US10146537B2 (en) * 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
CN109074845B (zh) 2016-03-23 2023-07-14 Gsi 科技公司 存储器内矩阵乘法及其在神经网络中的使用
US10943652B2 (en) 2018-05-22 2021-03-09 The Regents Of The University Of Michigan Memory processing unit
US10692570B2 (en) 2018-07-11 2020-06-23 Sandisk Technologies Llc Neural network matrix multiplication in memory cells
US11328204B2 (en) * 2018-07-24 2022-05-10 Sandisk Technologies Llc Realization of binary neural networks in NAND memory arrays
US10528643B1 (en) 2018-08-01 2020-01-07 Sandisk Technologies Llc Vector-matrix multiplication using non-volatile memory cells
US10877752B2 (en) 2018-09-28 2020-12-29 Intel Corporation Techniques for current-sensing circuit design for compute-in-memory

Also Published As

Publication number Publication date
CN115552523A (zh) 2022-12-30
EP4128236A4 (en) 2024-04-03
US20210303265A1 (en) 2021-09-30
US11934798B2 (en) 2024-03-19
WO2021202308A1 (en) 2021-10-07
EP4128236A1 (en) 2023-02-08

Similar Documents

Publication Publication Date Title
US11934798B2 (en) Counter-based multiplication using processing in memory
US11080049B2 (en) Apparatus and methods for matrix multiplication
CN110678841B (zh) 张量处理器指令集架构
CN108427990B (zh) 神经网络计算系统和方法
US11126549B2 (en) Processing in-memory architectures for performing logical operations
JP2022540550A (ja) ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法
CN111915001B (zh) 卷积计算引擎、人工智能芯片以及数据处理方法
CN110678840A (zh) 张量寄存器文件
US20160093343A1 (en) Low power computation architecture
CN110597484B (zh) 基于存内计算的多比特全加器、多比特全加运算控制方法
CN108022615B (zh) 动态随机存取存储器处理单元
US11663452B2 (en) Processor array for processing sparse binary neural networks
US20220391128A1 (en) Techniques to repurpose static random access memory rows to store a look-up-table for processor-in-memory operations
KR20220134035A (ko) 컨볼루션 연산을 위한 프로세싱 인 메모리 방법
Khan et al. The Landscape of Compute-near-memory and Compute-in-memory: A Research and Commercial Overview
US20240220205A1 (en) Counter-based multiplication using processing in memory
US20220147808A1 (en) Compiler configurable to generate instructions executable by different deep learning accelerators from a description of an artificial neural network
EP4383084A1 (en) Memory device and operating method thereof
US12032829B2 (en) Memory device performing in-memory operation and method thereof
US20220147809A1 (en) Deep learning accelerators with configurable hardware options optimizable via compiler
US20230028952A1 (en) Memory device performing in-memory operation and method thereof
KR20230014614A (ko) 인메모리 연산을 수행하는 메모리 장치 및 그 방법
KR20240037146A (ko) 다중 비트 누산기, 다중 비트 누산기를 포함하는 인 메모리 컴퓨팅(in memory computing) 프로세서 및 다중 비트 누산기의 동작 방법
KR20240025827A (ko) Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법
WO2022098497A1 (en) Implement the computation of an artificial neural network using multiple deep learning accelerators