KR20230017802A - 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령 - Google Patents

근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령 Download PDF

Info

Publication number
KR20230017802A
KR20230017802A KR1020227044536A KR20227044536A KR20230017802A KR 20230017802 A KR20230017802 A KR 20230017802A KR 1020227044536 A KR1020227044536 A KR 1020227044536A KR 20227044536 A KR20227044536 A KR 20227044536A KR 20230017802 A KR20230017802 A KR 20230017802A
Authority
KR
South Korea
Prior art keywords
memory
address
command
addresses
module
Prior art date
Application number
KR1020227044536A
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 KR20230017802A publication Critical patent/KR20230017802A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1678Details of memory controller using bus width
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/0623Address space extension for memory modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/408Address circuits
    • G11C11/4087Address decoders, e.g. bit - or word line decoders; Multiple line decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Memory System (AREA)

Abstract

메모리 컨트롤러는 메모리 모듈에 메모리 컨트롤러를 연결하는 명령/어드레스 버스를 통해 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있는 명령 로직으로 구성될 수 있다. 메모리 컨트롤러는 메모리 모듈의 메모리 위치에 저장된 데이터에 액세스하기 위해 버스를 통해 메모리 액세스 명령을 전송할 수 있다. 메모리 위치는 데이터가 메모리 모듈에 걸쳐 어드레스 정렬되지 않는다는 점을 반영하여 생성된 상이한 근거리-메모리에 상응할 수 있다. 그럼에도 불구하고, 근거리-메모리 어드레스 생성으로 인해, 메모리 컨트롤러는, 상이한 어드레스에서 데이터에 액세스하기 위한 버스에 대한 완전한 어드레스 정보를 지정하는 다중 메모리 액세스 명령을 전송해야 하는 것과는 대조적으로, 상이한 어드레스에서 저장된 데이터에 액세스하기 위한 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있으며, 이에 의해 이용가능한 버스 대역폭의 사용을 보존하고, 전력 소비를 감소시키고, 계산 처리량을 증가시킬 수 있다.

Description

근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령
근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령의 개시된 실시양태는 일반적으로 휘발성 및 비-휘발성 컴퓨터 메모리에 관한 것으로, 보다 특히, 컴퓨터 메모리에 저장된 데이터에 액세스하기 위한 컴퓨터-구현 로직에 관한 것이다.
컴퓨터 메모리는 개인용 컴퓨터, 태블릿 컴퓨터, 스마트폰, 서버 컴퓨터, 및 예를 들어, 프린터 및 인터넷 연결 디바이스와 같은 다른 컴퓨팅 디바이스를 포함하는 사실상 모든 컴퓨터의 기본 구성요소이다. 컴퓨터 메모리는 전형적으로 데이터 상에서 동작하는 데이터 및 프로세서-실행가능한 명령어(기계 코드)를 저장하기 위한 컴퓨터에서 사용된다.
용어 "메모리"는 종종, 금속-산화물 반도체 메모리 셀을 갖는 집적 회로 칩의 형태를 취하는, 예를 들어, 동적 랜덤-액세스 메모리(또는 간결성을 위해 단지 "DRAM")와 같은 휘발성 컴퓨터 메모리를 지칭하는 데 사용되지만, 컴퓨터 메모리는 또한 비-휘발성일 수 있다. 휘발성 및 비-휘발성 컴퓨터 기술의 비-포괄적인 목록은 DRAM, 정적 랜덤-액세스 메모리(또는 간결성을 위해 단지 "SRAM"), 비-휘발성 듀얼 인라인 메모리 모듈(또는 간결성을 위해 단지 "NVDIMM"), 플래시 메모리, 임베딩된 DRAM, 스크래치패드 메모리 등을 포함한다.
컴퓨터의 컴퓨터 메모리는 전형적으로 컴퓨터의 와이어(들) 또는 전도체(들)의 세트를 통해 컴퓨터의 하드웨어 "호스트"에 연결된다. 하드웨어 호스트는 메모리 컨트롤러 및 중앙 처리 유닛(또는 간결성을 위해 단지 "CPU"), 그래픽 처리 유닛(또는 간결성을 위해 단지 GPU), 또는 다른 하드웨어 데이터 프로세서를 포함할 수 있다. 컴퓨터 메모리 및 호스트 사이의 연결부(들)는 전형적으로 명령/어드레스 정보(때때로 "명령/어드레스 버스"로서 지칭됨)에 대한 인터페이스, 및 데이터 정보에 대한 인터페이스(때때로 "데이터 버스"로서 지칭됨)를 포함한다.
최근, 컴퓨팅 능력 및 프로세서의 속도(예를 들어, CPU들 및 GPU들)는 호스트에 컴퓨터 메모리를 연결하는 데이터 버스의 대역폭보다 더 빠르게 증가하였다. 그 결과, 데이터 버스는, 프로세서가 데이터 버스를 통해 컴퓨터 메모리로 그리고 컴퓨터 메모리로부터 전송될 데이터를 느긋하게 기다릴 때 컴퓨팅 처리량에서 병목(bottleneck)이 되었다.
프로세서-인-메모리(또는 간결성을 위해 단지 "PIM") 솔루션은 컴퓨터 메모리 근처에 있는(예를 들어, 동일한 다이 상에서) 데이터 처리 능력을 제공한다. PIM 솔루션을 이용하여, 데이터 처리 능력이 컴퓨터 메모리 근처에 있기 때문에, 데이터 버스를 통해 모든 원시 데이터를 호스트로 전송할 필요 없이 컴퓨터 메모리로부터 액세스된 데이터에 대해 계산이 수행될 수 있다. 예를 들어, 가능한 PIM 솔루션은 각각의 DRAM 뱅크 또는 서브-어레이와 같은 컴퓨터 메모리의 각각의 내부 메모리 모듈에 간단한 벡터 계산 요소를 추가하는 것을 포함할 수 있다. 이어서, 이러한 추가적인 요소로, 호스트는 데이터 버스를 통한 DRAM 인터페이스에 걸친 데이터의 전송을 요구하지 않으면서 모든 내부 메모리 모듈에서 계산을 트리거할 수 있다.
PIM 솔루션은 컴퓨터 메모리 및 호스트 사이의 데이터 전송에 의해 데이터 버스의 대역폭의 소비를 보존할 수 있고, 컴퓨터 작업부하의 처리량, 특히 예를 들어, 메모리-로컬 PIM 유닛의 부재 시 컴퓨터 메모리 및 호스트 간의 데이터 전송으로 데이터 버스의 대역폭 제한에 도달할 수 있는 다른 유형의 컴퓨터-집약적 작업부하 중에서, 심층 인공 신경망 기계 학습 작업부하, 대규모 그래프 분석 작업부하, 기계 학습 작업부하의 희박한 계산과 같은 성장하는 데이터-제한 컴퓨터 작업부하의 범주에 대해 개선할 수 있다.
그러나 일례로서, 기계 학습에서의 공통 작동은 희박한 임베딩 룩업이다. 이 작동은 일부 작업부하의 실행 시간을 지배할 수 있다. 이러한 작동은 컴퓨터 메모리에 저장되고 이들을 함께 축적하는 수백만 개의 임베딩 엔트리를 함유하는 큰 내장 테이블로부터 수백 개의 요소를 함유하는 대규모 임베딩을 드물게 판독할 수 있다. 제한된 데이터 재사용 때문에, 이러한 작동은 데이터 버스의 대역폭에 매우 민감할 수 있다.
PIM 솔루션을 사용하지 않고, 희박한 임베딩 룩업 작동은 호스트가 다수의 메모리 모듈(예를 들어, DRAM 뱅크)각각에 대해 하나씩 메모리 부하 요청의 세트를 실행하는 것을 요구할 수 있다. 각각의 메모리 부하 요청은 데이터가 데이터 버스를 통해 각자의 메모리 모듈로부터 호스트로 전송되게 한다. 메모리 모듈이 명령/어드레스 버스 및 데이터 버스(예를 들어, 동일한 메모리 채널 상의 DRAM 뱅크)를 공유할 수 있으므로, 상이한 메모리 모듈에 대한 액세스가 직렬화되어야 할 필요가 있을 수 있고, 명령/어드레스 및 데이터 버스 둘 모두의 전체 활용을 초래할 수 있다. 대조적으로, PIM 솔루션이 사용되는 경우, 데이터 버스에 대한 일부 데이터의 전송을 요구하지 않으면서, 축적이 메모리-로컬 PIM 유닛으로 계산될 수 있다.
그러나, PIM 솔루션이 특정 작업부하에 대한 데이터 버스 병목의 일부 또는 전부를 완화시킬 수 있으므로, 명령/어드레스 버스에서의 병목은 새로운 병목이 될 수 있다. 예를 들어, 명령/어드레스 버스에서의 병목은 기계 학습 작업부하 및 다른 작업부하로 발견되는 것들과 같은 희박하거나 불규칙한 메모리 액세스 패턴을 갖는 데이터-제한된 계산 작업부하로 발생할 수 있다. 명령/어드레스 버스가 메모리 모듈에 의해 공유되기 때문에, 각각의 메모리 부하 명령은 여전히 명령/어드레스 버스를 통해 전송될 필요가 있다.
명령/어드레스 버스 병목에 대한 가능한 솔루션은 메모리 채널의 수를 증가시킴으로써 또는 메모리 채널당 명령/어드레스 와이어의 수를 증가시킴으로써 명령/어드레스 버스의 대역폭을 증가시키는 것이다. 그러나, 이는 유닛-당 제조 비용을 증가시키고, 전력 소비를 증가시킨다. 또한, 정규 메모리 액세스 패턴을 갖는 작업부하의 경우, 추가 명령/어드레스 버스 대역폭이 활용되지 않을 수 있다.
개시된 실시양태는 이러한 문제 및 다른 문제를 해결한다.
이 섹션에 기재된 접근법은 추구될 수 있지만 반드시 이전에 구상되었거나 추구되었던 접근법이 아닌 접근법이다. 따라서, 달리 나타내지 않는 한, 이 섹션에서 기재된 접근법 중 임의의 것이 이 섹션에 포함된 것만으로도 선행 기술로 자격이 부여되거나 잘 이해되거나 일상적이거나 관습적이라고 가정해서는 안 된다.
도 1은 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령을 위한 예시적인 시스템의 개략도이다.
도 2는 메모리 모듈의 메모리 위치에 저장된 데이터가 메모리 모듈에 걸쳐 어드레스-정렬될 때 명령/어드레스 버스를 통해 메모리 컨트롤러에 의해 전송될 수 있는 예시적인 일련의 메모리 액세스 명령을 예시한다.
도 3은 메모리 모듈의 메모리 위치에 저장된 데이터가 메모리 모듈에 걸쳐 어드레스-정렬되지 않을 때 명령/어드레스 버스를 통해 메모리 컨트롤러에 의해 전송될 수 있는 예시적인 일련의 메모리 액세스 명령을 예시한다.
도 4는 근거리-메모리 어드레스 생성 능력 없이 예시적인 메모리 모듈을 예시한다.
도 5는 불완전한 어드레스 정보를 지정하는 메모리 액세스 명령에 대한 어드레스 근거리-메모리를 생성하기 위한 근거리-메모리 어드레스 생성 유닛을 포함하는 예시적인 메모리 모듈을 도시한다.
도 6은 불완전 어드레스 정보를 지정하는 메모리 액세스 명령에 대한 어드레스 근거리-메모리를 생성하기 위한 어드레스 계산 유닛을 갖는 근거리-메모리 어드레스 생성 유닛을 포함하는 예시적인 메모리 모듈을 묘사한다.
도 7은 다중 메모리 모듈에 걸쳐 저장된 데이터에 액세스하기 위한 명령 시리즈를 예시한다.
각각의 도면에서 묘사된 구성요소 모두가 필요하지 않을 수 있고, 실시양태는 도면에 도시되지 않은 추가적인 구성요소를 포함할 수 있다. 본 개시내용의 범주를 벗어나지 않고 구성요소의 배열 및 유형의 변형이 이루어질 수 있다. 추가적인 구성요소, 상이한 구성요소, 또는 더 적은 구성요소가 본 개시내용의 범주 내에서 활용될 수 있다.
다음의 설명에서, 설명의 목적을 위해, 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령의 실시양태의 완전한 이해를 제공하기 위해 다수의 구체적인 세부사항이 제시된다. 그러나, 실시양태가 이러한 구체적인 세부사항 없이 실시될 수 있다는 것이 명백할 것이다. 다른 예에서, 잘-알려진 구조물 및 디바이스는 실시양태를 불필요하게 모호하게 하는 것을 피하기 위해 블록도 형태로 도시된다.
일반적인 개요
근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령을 위한 시스템 및 방법이 개시된다. 이러한 시스템 및 방법은 심층 기계 학습 작업부하(예를 들어, 심층 인공 신경망을 사용함), 대규모 그래프 분석, 및/또는 희박하거나 불규칙한 메모리 액세스를 갖는 다른 계산 작업부하를 비제한적으로 포함하는 컴퓨터 작업부하를 지원하기 위한(예를 들어, 효율적으로 지원하기 위한) 컴퓨터 메모리 액세스를 용이하게 할 수 있다. 본 기술은 노르트브릿지 칩세트, 필드 프로그래밍가능한 어레이(또는 간결성을 위해 단지 "FPGA") 디바이스, 마이크로프로세서 디바이스, CPU 디바이스, GPU 디바이스, 메모리 집적 회로 및/또는 기계 학습 및/또는 인공 지능 가속 디바이스와 같은 다른 시스템을 비제한적으로 포함하는 다양한 시스템에서 활용될 수 있다.
명령 로직으로 구성된 메모리 컨트롤러는 메모리 컨트롤러 및 2개 이상의 컴퓨터 메모리 모듈 사이의 연결부를 통해 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있다. 불완전한 어드레스 정보는 어드레스 정보(어드레스-적음)를 갖지 않을 수 있다. 대신에, 불완전한 어드레스 정보는 부분적 어드레스 정보를 가질 수 있다. 메모리 컨트롤러는 메모리 모듈의 2개 이상의 메모리 위치에 저장된 데이터에 액세스하기 위한 연결부를 통해 메모리 액세스 명령을 전송한다. 메모리 위치는 2개 이상의 근거리-메모리 생성된 어드레스에 상응한다.
메모리 위치에 상응하는 근거리-메모리 생성된 어드레스는 데이터가 메모리 모듈에 걸쳐 어드레스 정렬되지 않는다는 점을 반영하여 상이할 수 있다. 그럼에도 불구하고, 근거리-메모리 어드레스 생성으로 인해, 메모리 컨트롤러는, 상이한 어드레스에서 데이터에 액세스하기 위한 버스에 대한 완전한 어드레스 정보를 지정하는 다중 메모리 액세스 명령을 전송해야 하는 것과는 대조적으로, 상이한 어드레스에서 저장된 데이터에 액세스하기 위한 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있으며, 이에 의해 이용가능한 버스 대역폭의 사용을 보존하고, 전력 소비를 감소시키고 계산 처리량을 증가시킬 수 있다.
메모리 컨트롤러의 명령 로직은, 연결부를 통해, 메모리 모듈에 대한 어드레스를 지정하는 프로그램 어드레스 명령을 전송하도록 구성된다. 이러한 사전프로그래밍된 어드레스는 근거리-메모리에 저장될 수 있고, 상이한 메모리 모듈에 대해 상이할 수 있고, 불완전한 어드레스 정보를 갖는 다수의 메모리 액세스 명령에 걸쳐 레버리지될 수 있어서, 각각의 메모리 액세스 명령과의 연결부에 걸쳐 완전한 어드레스 정보를 전송하는 것을 피할 수 있다.
불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 메모리 모듈의 PIM 유닛에 의해 수행되는 작동(예를 들어, 곱셈 또는 가산)을 지정할 수 있다. 근거리-메모리 어드레스 생성 때문에, 불완전한 어드레스 정보를 갖는 단일 메모리 액세스 명령의 전송은, 데이터가 메모리 모듈에 걸쳐 어드레스 정렬되지 않은 경우에도, PIM 유닛이 상이한 메모리 모듈에 저장된 데이터에 대해 작동을 수행하게 할 수 있다.
메모리 모듈들 중 하나의 메모리 모듈은 메모리 구조물 및 근거리-메모리 어드레스 생성 유닛을 갖는다. 메모리 구조물은 어드레싱가능한 메모리 위치를 포함한다. 근거리-메모리 어드레스 생성 유닛은 메모리 구조물의 메모리 위치에 상응하는 근거리-메모리 어드레스를 생성하도록 구성된다. 근거리-메모리 어드레스 생성 유닛은, 근거리-메모리 생성된 어드레스에 상응하는 메모리 모듈의 메모리 위치에 저장된 데이터에 액세스하기 위한 연결부를 통해 메모리 컨트롤러에 의해 전송된 불완전한 어드레스 정보를 갖는 메모리 액세스 명령의, 연결부를 통한 메모리 모듈에서의, 수신에 기반하여 어드레스를 생성하도록 구성된다.
근거리-메모리 어드레스 생성 유닛은 레지스터 파일을 포함한다. 레지스터 파일은 근거리-메모리 어드레스 생성 유닛에 의해 생성될 어드레스를 저장하도록 구성된다. 어드레스는 레지스터 파일에 저장될 어드레스를 지정하는 프로그램 어드레스 명령의, 연결부를 통한 메모리 모듈에서의, 수신에 기반하여 레지스터 파일에 저장된다.
근거리-메모리 어드레스 생성 유닛은 근거리-메모리 어드레스 생성 유닛에 의해 생성될 어드레스를 계산하도록 구성된 어드레스 계산 유닛을 포함한다. 어드레스 계산 유닛은 어드레스에 사전구성된 스트라이드를 적용하는 것에 기반하여 생성될 어드레스를 계산한다. 어드레스 계산 유닛은 메모리 모듈의 PIM 유닛으로부터 수득된 값에 기반하여 또는 메모리 구조물의 메모리 위치로부터 수득된 값에 기반하여 생성될 어드레스를 계산한다.
메모리 컨트롤러는 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의 2개 이상의 행의 세트에 저장된 데이터에 액세스하기 위한 연결부를 통해 불완전한 어드레스 정보를 갖는 제1 메모리 액세스 명령을 전송하도록 구성된 명령 로직을 포함한다. 명령 로직은 또한 2개 이상의 근거리-메모리 생성된 열 어드레스의 세트에 상응하는, 2개 이상의 기억 모듈의 세트의 2개 이상의 열의 세트에 저장된 데이터에 엑세스하기 위한 연결부를 통해 불완전한 어드레스 정보를 갖는 제2 메모리 액세스 명령을 전송하도록 구성된다.
메모리 모듈은 복수의 행 및 복수의 열을 갖는 메모리 구조물을 포함한다. 메모리 모듈은 또한, 행에 저장된 데이터에 액세스하기 위한 제1 메모리 액세스 명령의, 연결부를 통해 모듈에 의한, 수신에 기반하여 복수의 행 중 하나의 행에 상응하는 행 어드레스를 생성하도록 구성된 근거리-메모리 어드레스 생성 유닛을 포함한다. 근거리-메모리 어드레스 생성 유닛은, 그 행의 열에 저장된 데이터에 액세스하기 위한 제2 메모리 액세스 명령의, 연결부를 통해 모듈에 의한, 수신에 기반하여 복수의 열 중 하나의 열에 상응하는 열 어드레스를 생성하도록 추가로 구성된다.
실시양태는 컴퓨터 메모리의 불규칙하거나 희박한 데이터 액세스를 갖는 계산 작업부하를 처리할 때 CPU, GPU, 및 PIM 유닛을 지원(예를 들어, 효율적으로 지원)한다. 이러한 작업부하는 상업적, 정부, 교육 및 연구 도메인에서 점점 더 만연한 심층 학습 추천 모델 및 대규모 그래프 분석을 포함한다. 실시양태는 이러한 작업부하가 더 낮은 전력 소비로 메모리에 더 빠르게 액세스할 수 있게 한다.
이제, 이들 및 다른 실시양태가 도면과 관련하여 더 상세히 기재될 것이다.
근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령을 위한 시스템
도 1은 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령을 위한 예시적인 시스템의 개략도이다. 시스템은 2개 이상의 메모리 모듈(108)에 의해 공유되고 메모리 모듈(108)이 또한 전기적으로 연결되는 명령/어드레스 버스(106)에 전기적으로 연결된 메모리 컨트롤러(102)를 포함한다. 전기적 연결부는 직접적인 또는 간접적일 수 있으며, 여기서 간접적인 전기적 연결부는 전기 경로에 추가적인 구조물을 포함할 수 있다.
시스템은 도 1에 도시되지 않은 다른 구성요소를 포함할 수 있다. 예를 들어, 시스템은 도 1에 도시되지 않은 다른 버스, 칩 및 회로를 포함할 수 있다.
도 1의 예에서, 3개의 메모리 모듈이 묘사되어 있다. 그러나, 시스템은 적게는 2개의 메모리 모듈 또는 3개 초과의 메모리 모듈을 포함하여 2개 초과의 메모리 모듈을 가질 수 있다. 명령 로직(104)에 더하여, 메모리 컨트롤러(102)는 요청 버퍼, 응답 버퍼, 메모리 매핑 로직, 및 중재 로직과 같은 도 1에 묘사되지 않은 다른 로직 및 구조물을 포함할 수 있다. 명령/어드레스 버스(106)에 의해 메모리 모듈(108)에 전기적으로 연결되는 것 외에도, 메모리 컨트롤러(102)는 데이터 버스와 같은 도 1에 묘사되지 않은 다른 버스에 의해 메모리 모듈(108)에 전기적으로 연결될 수 있다.
메모리 컨트롤러(102)는 메모리 모듈(108)로 오고 가는 데이터의 흐름을 관리하기 위한 하드와이어드 및/또는 프로그래밍된 디지털 회로를 포함할 수 있다. 메모리 컨트롤러(102)는 별개의 칩일 수 있거나, 동일한 다이 상에 배치되거나 CPU 또는 GPU와 같은 마이크로프로세서의 집적 구성요소로서 배치되는 것과 같이 다른 칩에 집적될 수 있다. 명령 로직(104)에 더하여, 메모리 컨트롤러(102)는 또한 메모리 모듈(108)로부터 데이터를 판독하고 데이터를 기록하기 위한 로직을 포함할 수 있다. 메모리 모듈(108)이 휘발성 메모리 디바이스인 경우, 메모리 컨트롤러(102)는 메모리 모듈(108)의 메모리 셀의 전하를 주기적으로 리프레시하기 위한 로직을 포함할 수 있고, 예를 들어, 메모리 모듈(108)은 예를 들어, 반도체 DRAM에 기반하여 구현된다.
명령/어드레스 버스(106)를 공유함으로써, 메모리 컨트롤러(102)에 의해 하나 또는 둘 이상 또는 모든 메모리 모듈(108)에 대해 전송된 명령은 명령/어드레스 버스(106)를 통해 전송될 수 있다. 명령이 메모리 컨트롤러(102)로부터 메모리 모듈들(108) 중 하나 이상에 명령/어드레스 버스(106)를 통해 전송될 때, 명령은 명령/어드레스 버스(106)만을 따라 또는 메모리 컨트롤러(102) 및 하나 이상의 메모리 모듈 사이의 전기 경로에서의 하나 이상의 추가적인 전기적 연결부를 따라 메모리 컨트롤러(102)로부터 하나 이상의 메모리 모듈로 전송될 수 있다.
명령/어드레스 버스(106)는 본원에 개시된 불완전한 어드레스 정보를 갖는 메모리 액세스 명령 및 프로그램 어드레스 명령을 포함하는 명령을 나타내는 전기 신호를 전송하기 위한 하나 이상의 전기 와이어 또는 전도체의 세트를 포함할 수 있다. 전기 신호는 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)로부터 메모리 모듈(108)에 전송될 수 있다.
메모리(102) 컨트롤러 및 메모리 모듈(108) 사이의 연결부는 예를 들어, 메모리 액세스 명령과 같은 명령/어드레스 정보를 전송 및 수신하기 위한 인터페이스를 포함할 수 있다. 이 연결부는 도 1에서 명령/어드레스 버스(106)로서 라벨링된다. 메모리 컨트롤러(102) 및 메모리 모듈(108) 사이의 동일한 연결부 또는 별개의 연결부는 예를 들어, 메모리 위치로부터 액세스된 데이터와 같은 데이터를 전송 및 수신하기 위한 인터페이스를 포함할 수 있다. 이러한 연결부는 때때로 본원에 "데이터 버스"로서 지칭된다. 용어 "버스"가 사용되지만, 연결부 또는 연결부들은 와이어(들) 또는 전도체(들)의 세트, 또는 메모리 컨트롤러(102)와 메모리 모듈(108) 사이의 유선 및/또는 무선 전기 커플링 또는 연결부(들)의 다른 형태를 포함할 수 있다. 또한, 표시된 바와 같이, 명령/어드레스 버스(106) 및 데이터 버스는 메모리 컨트롤러(102) 및 메모리 모듈(108) 사이의 동일한 전기적 연결부를 공유하거나, 별개의 전기적 연결부를 사용할 수 있다.
명령/어드레스 버스(106)는 서브-버스로 구성될 수 있다. 예를 들어, 명령/어드레스 버스(106)는 잠재적으로 다른 서브-버스 중에서 행 어드레스 버스 및 열 어드레스 버스로 구성될 수 있다.
메모리 모듈(108)은 데이터를 저장하기 위한 어드레싱가능한 메모리 위치를 제공한다. 일부 경우에서, 메모리 위치에 저장되거나 이로부터 액세스되는 데이터는 본원에서 "값"또는 "데이터 값"으로서 지칭된다. 이러한 값은 하나 이상의 비트로 표현될 수 있다. 일부 경우에서, 메모리 위치는 바이트 어드레싱가능하고, 8-비트 데이터 값을 저장한다. 일부 경우에서, 메모리 위치는 워드 어드레싱가능하고, 다중-바이트 데이터 값(예를 들어, 16-비트, 32-비트, 64-비트, 또는 128-비트 데이터 값)을 저장한다.
데이터 값이 메모리 모듈(예를 들어, 108-0)의 메모리 위치(예를 들어, 110)로부터 메모리 컨트롤러(102)에 의해 전송된 명령에 의해 액세스될 때, 데이터 값은 메모리 모듈(108) 및 호스트 사이의 데이터 버스를 통해 메모리 모듈로부터 다시 호스트로 전송될 수 있다. 추가로, 또는 대안적으로, 데이터 값은 PIM 유닛에 의한 계산 또는 축적(예를 들어, 곱셈, 가산 등)을 위해 메모리 모듈 근처의 PIM 유닛으로 전송될 수 있다.
본원에 사용된 바와 같이, 용어 "근거리-메모리"는 메모리 모듈(예를 들어, 108-0)과 동일한 다이, 칩 또는 회로에서와 같은 인-메모리를 포함한다. 그러나, 보다 광범위하게는, 근거리-메모리는 메모리 모듈에 대한 명령 버스 (106)의 다른 단부에서의 호스트 또는 메모리 컨트롤러 (102)보다 메모리 모듈에 물리적으로 더 가까운 구조물을 포함한다.
메모리 모듈(108-0, 108-1, 108-2) 각각은 DRAM 뱅크이다. 그러나, 각각의 메모리 모듈(108)은 서브-어레이, 랭크, 또는 채널과 같은 메모리 계층에서 다른 유형의 구성요소에 상응할 수 있다. 게다가, 메모리 모듈은 휘발성 메모리 디바이스 또는 DRAM 디바이스로 제한되지 않으며, 비-휘발성 메모리 디바이스 또는 어드레싱가능한 메모리 위치를 갖는 다른 유형의 메모리 디바이스를 포함할 수 있다.
근거리-메모리 어드레스 생성 유닛은 어드레스 근거리-메모리를 생성하기 위해 사용된다. 예를 들어, 별개의 근거리-메모리 어드레스 생성 유닛은 각각의 메모리 모듈(108-0, 108-1 및 108-2) 내에 위치될 수 있다. 예를 들어, 메모리 모듈(108)이 베이스 다이의 상부 상의 다중 메모리 층의 스택의 구성요소인 경우, 근거리-메모리 어드레스 생성 유닛은 베이스 다이에 위치될 수 있거나, 근거리-메모리 어드레스 생성 유닛은 3-차원 적층된 메모리의 메모리 층에 또는 보다 전통적인 DRAM의 메모리 층에 위치될 수 있다.
근거리-메모리 어드레스 생성 유닛은 또한 3-차원 적층된 DRAM 이외의 다른 형태의 메모리, 및 예를 들어 비-휘발성 메모리, 플래시 메모리 및 임베딩된 DRAM과 같은 전통적인 DRAM에 위치될 수 있다. 아래에 기재된 실시양태는 DRAM 메모리 구조물의 맥락에서 기재되지만, 근거리-메모리 어드레스 생성 유닛 및 이의 기능성은 예를 들어, NVDIMM과 같은 비-휘발성 메모리 모듈뿐만 아니라, 스크래치패드 메모리 등과 같은 다른 형태의 메모리를 포함하는 다른 형태의 신흥 메모리 기술의 맥락 또는 이후의 개발 메모리 기술의 맥락과 같은 다른 메모리 맥락에서 구현될 수 있다.
어드레스-정렬된 데이터
메모리 모듈(108)과 연관된 근거리-메모리 어드레스 생성 유닛은 메모리 컨트롤러(102)가 어드레스 정보 없음 또는 오직 부분 어드레스 정보와 같은 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있게 한다. 그럼에도 불구하고, 근거리-메모리 어드레스 생성 유닛은 메모리 액세스 명령에 지정된 부분 어드레스 정보와 완전히 함께 또는 조합하여 완전한 어드레스 정보를 제공하기 위해 메모리 근처의 어드레스를 생성할 수 있다. 그렇게 함으로써, 작업부하, 예컨대, 기계 학습 및 대규모 그래프 분석 및 불규칙한 메모리 액세스를 초래하는 다른 계산 작업부하는 감소된 명령/어드레스 버스(106) 대역폭의 소비 및 낮아진 전력 소비로 지원된다.
예를 들어, 메모리 모듈(108)과 연관된 근거리-메모리 어드레스 생성 유닛 때문에, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 메모리 위치가 어드레스-정렬되지 않더라도, 메모리 모듈(108)의 상이한 것에서의 메모리 위치에 액세스하기 위해 메모리 컨트롤러(102)로부터 명령/어드레스 버스(106)를 통해 2개 이상의 메모리 모듈(108)로 전송될 수 있다. 예를 들어, 메모리 모듈(108-0)의 메모리 위치(110)는 도 1에서 어드레스 "0:2"를 갖는 것으로 지정된다. 이 표기법은 단지 예시의 목적으로 사용된다. 콜론 ':' 앞의 숫자는명령(106)에 연결된 메모리 모듈(108)의 메모리 모듈(이 예에서 "0")을 어드레싱(예를 들어, 식별)한다. 콜론 ':' 뒤의 숫자는어드레싱된 메모리 모듈(이 예에서 "2") 내의 메모리 위치를 어드레싱한다. 일부 경우에, 어드레스에 의해 어드레싱된 메모리 모듈 내의 특정 메모리 위치를 어드레싱하는 어드레스의 일부는 본원에서 "모듈-상대적"어드레스로서 지칭된다. 이 예에서, 콜론 뒤의 "2" 는 어드레스 "0:2"의 모듈-상대적 어드레스일 것이다.
다시, 도 1의 어드레스 표기법은 본 개시내용에서만 예시의 목적으로 사용된다는 것을 강조해야 한다. 실제 어드레스는 다른 비트-표현된 정보 중에서, 메모리 모듈을 어드레싱하는 일부 수의 비트, 어드레싱된 메모리 모듈의 행 어드레스를 어드레싱하는 일부 비트의 수, 및 어드레싱된 메모리 모듈의 열 어드레스를 어드레싱하는 일부 비트의 수와 같은 다중 구성요소를 갖는 다중-비트 어드레스일 수 있다. 다른 다중-비트 어드레스 표현이 가능하고, 특정 어드레스 표현은 요구되지 않는다.
일부 계산 작업부하는 메모리 모듈(108)에 걸쳐 어드레스-정렬되는 정규 메모리 액세스 패턴을 나타낸다. 예를 들어, 메모리 모듈(108-0) 의 어드레스 "0:2"에서의 메모리 위치(110)는 메모리 모듈(108-2)의 어드레스 "2:2"에서의 메모리 위치와 어드레스-정렬되는 메모리 모듈(108-1)의 어드레스 "1:2"에서의 메모리 위치와 어드레스-정렬되는데, 이는 모든 3개의 메모리 위치가 동일한 모듈-상대적 어드레스(이 예에서, "2")를 갖기 때문이다.
2개 이상의 메모리 모듈로부터 액세스될 데이터가 어드레스-정렬되는 경우, 완전한 어드레스 정보를 갖는 단일 메모리 액세스 명령이 다중 어드레스-정렬된 메모리 위치에 액세스하도록 전송될 수 있다. 예를 들어, 메모리 컨트롤러(102)는 모듈-상대적 어드레스로서 "2" 를 지정하는 단일 메모리 액세스 명령을 전송(예를 들어, 브로드캐스트)하고, 메모리 위치 "0:2", "1:2" 및 "2:2"에 저장된 데이터에 액세스할 수 있다. 예를 들어, 단일 메모리 액세스 명령은 메모리 모듈(108)의 각각에서 액세스될 메모리 위치를 명확하게 식별하는 모듈-상대적 어드레스로서 "2"를 지정하는 모든 메모리 모듈(108)에 명령/어드레스 버스(106)에 대한 메모리 컨트롤러(102)에 의해 브로드캐스팅될 수 있다.
그러나, 2개 이상의 메모리 모듈(108)에서 액세스될 데이터가 어드레스-정렬되지 않으면, 다중 메모리 액세스 명령이 메모리 컨트롤러(102)에 의해 전송될 필요가 있을 수 있다. 예를 들어, 액세스될 데이터가 메모리 위치 "0:2" 및 "1:3"에 저장되면, 상이한 어드레스를 지정하는 2개의 메모리 액세스 명령은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 필요가 있을 수 있다.
그러나, 메모리 모듈(108)과 연관된 근거리-메모리 어드레스 생성 유닛으로, 불완전한 어드레스 정보를 갖는 단일 메모리 액세스 명령은 메모리 모듈(108) 중 2개 이상에 걸쳐 상이한 비정렬된 메모리 위치에 저장된 데이터에 액세스하기 위해 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있다. 예를 들어, 명령은 메모리 위치 "0:2", "1:3" 및 "2:0"에서 저장된 데이터에 액세스할 수 있으며, 여기서 모듈-상대적 어드레스의 일부 또는 전부는 메모리 모듈(108)과 연관된 근거리-메모리 어드레스 생성 유닛에 의해 생성될 수 있다. 예를 들어, 메모리 모듈(108-0)과 연관된 제1 근거리-메모리 어드레스 생성 유닛은 명령 버스(106)를 통해 메모리 컨트롤러(102)로부터 명령을 수신하는 메모리 모듈(108-0)에 기반하여 모듈-상대적 어드레스 "2"를 생성할 수 있다. 메모리 모듈(108-1)과 연관된 제2 근거리-메모리 어드레스 생성 유닛은 명령 버스(106)를 통해 메모리 컨트롤러(102)로부터 명령을 수신하는 메모리 모듈(108-1)에 기반하여 모듈-상대적 어드레스 "3"을 생성할 수 있다. 그리고 메모리 모듈(108-2)과 연관된 제3 근거리-메모리 어드레스 생성 유닛은 명령 버스(106)를 통해 메모리 컨트롤러(102)로부터 명령을 수신하는 메모리 모듈(108-2)에 기반하여 모듈-상대적 어드레스 "0"을 생성할 수 있다.
불완전 어드레스 정보
본원에 사용되는 바와 같이, "불완전한"어드레스 정보를 갖는 메모리 액세스 명령은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송된 명령을 2개 이상의 메모리 모듈(108)에 포함하며, 여기서 모듈-상대적 어드레스의 일부 또는 전부는 근거리-메모리가 생성된다. 언급된 바와 같이, 모듈-상대적 어드레스는 명령에 의해 액세스될 완전한 어드레스에 의해 어드레싱되는 메모리 모듈의 메모리 위치를 식별하는 완전한 어드레스의 일부를 포함할 수 있다. 대조적으로, "완전한"어드레스 정보를 갖는 메모리 액세스 명령은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송된 명령을 2개 이상의 메모리 모듈(108)에 포함할 수 있고, 여기서 전체 모듈-상대적 어드레스는 명령에 의해 지정될 수 있고 모듈-상대적 어드레스 부분의 어떠한 부분도 근거리-메모리가 생성되지 않을 수 있다.
불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 모듈-상대적 어드레스의 임의의 부분을 지정하지 않을 수 있다. 이 경우, 전체 모듈-상대적 어드레스는 근거리-메모리가 생성될 수 있다. 예를 들어, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 행 어드레스를 지정하지 않거나 열 어드레스를 지정하지 않을 수 있다. 이 경우, 행 및 열 어드레스는 근거리-메모리 어드레스 생성 유닛에 의해 근거리-메모리가 생성될 수 있다. 근거리-메모리 어드레스 생성 유닛 때문에, 상이한 행 및 열 어드레스는 데이터가 메모리 모듈에 걸쳐 어드레스-정렬되지 않은 경우와 같이 액세스될 상이한 메모리 모듈에 대해 근거리-메모리가 생성될 수 있다는 것에 유의한다. 그리고, 데이터가 액세스될 메모리 모듈에 걸쳐 어드레스-정렬되지 않는 경우, 근거리-메모리 어드레스 생성 유닛 때문에, 메모리 컨트롤러(102)는 명령/어드레스 버스(106)를 통해 단일 메모리 액세스 명령만을 전송할 필요가 있고 각각의 상이한 모듈-상대적 어드레스에 대해 별개의 메모리 액세스 명령을 전송할 필요가 없으므로, 이에 의해 명령/어드레스 버스(106)의 대역폭 및 전력 소비를 보존한다.
불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 모듈-상대적 어드레스의 모두가 아닌 오직 일부와 같은 부분 어드레스 정보만을 지정할 수 있다. 예를 들어, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 액세스될 메모리 모듈에 공통인 행 어드레스만을 또는 열 어드레스만을 지정할 수 있지만, 행 어드레스 및 열 어드레스 둘 모두를 지정하지 않거나 또는 달리 완전한 어드레스를 지정하지 않거나 모듈-상대적 어드레스를 지정하지 않을 수 있다. 이 경우, 모듈-상대적 어드레스의 누락된 부분이 근거리-메모리를 생성할 수 있다.
예를 들어, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 액세스될 메모리 모듈에 대한 행 어드레스 명령을 지정할 수 있지만, 열 어드레스를 지정하지 않는다. 이 경우, 열 어드레스는 근거리-메모리 어드레스 생성 유닛에 의해 근거리-메모리를 생성할 수 있다. 근거리-메모리 어드레스 생성 유닛 때문에, 상이한 열 어드레스는 데이터가 메모리 모듈에 걸쳐 어드레스-정렬되지 않은 경우와 같이 액세스될 상이한 메모리 모듈에 대해 근거리-메모리가 생성될 수 있다는 것에 유의한다. 그리고, 데이터가 액세스될 메모리 모듈에 걸쳐 어드레스-정렬되지 않는 경우, 근거리-메모리 어드레스 생성 유닛 때문에, 메모리 컨트롤러(102)는 명령/어드레스 버스(106)를 통해 단일 메모리 액세스 명령만을 전송할 필요가 있고, 각각의 상이한 열 어드레스에 대해 별개의 메모리 액세스 명령을 전송할 필요가 없으므로, 이에 의해 명령/어드레스 버스(106)의 대역폭 및 전력 소비를 보존한다.
다른 예로서, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 액세스될 메모리 모듈에 대한 열 어드레스 명령을 지정할 수 있지만, 행 어드레스를 지정하지 않는다. 이 경우, 행 어드레스는 근거리-메모리 어드레스 생성 유닛에 의해 근거리-메모리를 생성할 수 있다. 근거리-메모리 어드레스 생성 유닛 때문에, 상이한 행 어드레스는 데이터가 메모리 모듈에 걸쳐 어드레스-정렬되지 않은 경우와 같이 액세스될 상이한 메모리 모듈에 대해 근거리-메모리가 생성될 수 있다는 것에 유의한다. 그리고, 데이터가 액세스될 메모리 모듈에 걸쳐 어드레스-정렬되지 않는 경우, 근거리-메모리 어드레스 생성 유닛 때문에, 메모리 컨트롤러(102)는 명령/어드레스 버스(106)를 통해 단일 메모리 액세스 명령만을 전송할 필요가 있고, 각각의 상이한 행 어드레스에 대해 별개의 메모리 액세스 명령을 전송할 필요가 없으므로, 이에 의해 명령/어드레스 버스(106)의 대역폭 및 전력 소비를 보존한다.
불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 액세스될 2개 이상의 메모리 모듈(108)의 전부는 아니지만 일부에 대한 완전한 어드레스를 지정한다. 이 경우, 근거리-메모리 어드레스 생성 유닛은 명령이 완전한 어드레스를 제공하지 않는 메모리 모듈(들)에 대한 어드레스 근거리-메모리를 생성할 수 있다.
불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 예를 들어, 기존 메모리 인터페이스 사양 또는 표준과 호환되는 더미 어드레스와 같은 더미 어드레스를 지정한다. 이 경우, 근거리-메모리 어드레스 생성 유닛은 명령에 의해 액세스될 모든 메모리 모듈에 대한 어드레스 근거리-메모리를 생성할 수 있다. 이러한 명령은 임의의 어드레스 정보를 지정하지 않는 메모리 액세스 명령과 동등한 기능성인 것으로 간주될 수 있다.
근거리-메모리 어드레스 생성을 갖는 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 어드레싱 정렬되지 않은 메모리 위치에서 메모리 모듈(108)의 데이터에 액세스하는 것과 같은 메모리 액세스의 불규칙성을 나타내는 기계 학습 및 대규모 그래프 분석 작업부하를 포함하는 불규칙하고 희박한 계산 작업부하에 대한 명령/어드레스 버스(106)의 대역폭 제한을 극복할 수 있다.
PIM 지지체
근거리-메모리 어드레스 생성을 갖는 불완전한 어드레스 정보를 갖는 메모리 액세스 명령은 PIM 솔루션을 지원(예를 들어, 효율적으로 지원)할 수 있다. 예를 들어, 동일한 PIM 작동(예를 들어, 곱셈 또는 가산)이 2개 이상의 메모리 모듈(108)에 걸쳐 저장된 데이터에 적용되어야 하는 경우, PIM 작동을 지정하는 단일 메모리 액세스 명령은 데이터가 저장된 메모리 위치의 일부 또는 전체가 2개 이상의 메모리 모듈에 걸쳐 어드레스-정렬되지 않은 경우에도, 명령/주소 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송되어 2개 이상의 메모리 모듈 각각에서 데이터에 액세스하고 작동을 수행할 수 있다. 메모리 컨트롤러(102)가 명령/주소 버스(106)를 통해 다중 메모리 액세스 명령을 전송해야 하는 것과 달리 단일 메모리 액세스 명령은 명령/주소 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송되어, 2개 이상의 메모리 모듈 각각에서 데이터에 액세스하고 PIM 작동을 달성할 수 있다. 2개 이상의 메모리 모듈(108)에 대해 병렬로 적용될 PIM 작동을 갖는 다중 메모리 액세스에 걸쳐 그렇게 함으로써, 명령/어드레스 버스(106)의 대역폭 병목은 특정 계산 작업부하에 대해 완화될 수 있다. 또한, 어드레스 정보가 없거나 부분 어드레스 정보만이 명령에 지정되는 경우, 전력 소비는, 명령/어드레스 버스(106)를 통해 더 적은 비트가 전송되기 때문에 메모리 컨트롤러(102)가 명령/어드레스 버스(106)를 통해 완전한 어드레스 정보를 지정하는 메모리 어드레스 명령을 전송할 때와 비교하여 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 명령을 전송하는 데 보존될 수 있다.
근거리-메모리 PIM 솔루션은, 기계 학습 및 다른 것들에서의 추천 기반 인공 신경망 계산, 대규모 그래프 분석, 희박한 계산을 비제한적으로 포함하는 특정 계산 작업부하로 발견된 것들과 같은 불규칙한 및 희박한 메모리 액세스를 지원(예를 들어, 효율적으로 지원)할 수 있다. PIM 솔루션은 경량, 데이터-집약적인 계산을 처리하기 위해 계산 로직 근거리-메모리를 배치시켜, 호스트의 데이터 버스 대역폭 요구를 감소시키고 호스트가 행렬 수학과 같은 계산-집약적인 계산에 집중할 수 있도록 한다.
그러나, 언급된 바와 같이, PIM 솔루션은 예를 들어, 메모리 모듈(108)에 의해 공유되는 공유된 명령/어드레스 버스(106)와 같은 메모리 모듈에 의해 공유되는 공유된 명령(어드레스) 버스에 의해 제한될 수 있다. 예를 들어, 공유 명령/어드레스 버스(106)는 DRAM 메모리의 채널 내의 뱅크(예를 들어, 동기식 동적 랜덤-액세스 메모리 (SDRAM), 그래픽 이중 데이터 레이트 동기식 동적 랜덤-액세스 메모리(GDDR), 고-대역폭 메모리(HBM) 등) 사이의 공유된 명령/어드레스 버스일 수 있으나, 이에 제한되지 않는다. 이 예에서, 뱅크는 도 1의 메모리 모듈(108)에 의해 표현된다.
다수의 인자는 PIM 솔루션의 유효성을 제한할 수 있다. 하나의 경우, 공유된 명령/어드레스 버스(106)의 대역폭은, 대체로 어드레스-정렬된 메모리 액세스를 포함하는 보다 규칙적인 계산 작업부하 및 비-PIM 솔루션 구현을 위해 설계될 수 있다. 이와 같이, PIM 솔루션은 데이터 버스 상의 병목을 완화시킬 수 있지만, 이들은 특히 메모리 모듈(108)에 걸쳐 어드레스-정렬되지 않은 더 많은 메모리 액세스를 포함하는 불규칙하고 희박한 계산 워크부하를 갖는 공유된 명령/어드레스 버스(106) 상의 병목을 도입할 수 있다.
PIM 솔루션의 유효성을 제한할 수 있는 다른 인자는 일부 계산 작업부하의 희박하고 불규칙한 메모리 액세스일 수 있다. 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬되는 정규 작업부하의 경우, 단일 브로드캐스트 PIM 명령은 메모리 모듈(108)에 걸쳐 다중 어드레스-정렬된 메모리 위치에 액세스하기 위해 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있다. 도 2는 메모리 위치에 저장된 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬될 때 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있는 예시적인 일련의 메모리 액세스 명령을 예시한다.
도 2의 예에서, 3개의 메모리 액세스 명령은 메모리 컨트롤러(102)에 의해 전송된다. 3개의 메모리 액세스 명령 각각은 각각의 메모리 모듈(108)에 의한 수신을 위한 브로드캐스트 명령이다. 3개의 명령 각각은 각각의 메모리 모듈이 명령에 의해 지정된 모듈-상대적 어드레스에 저장된 데이터에 작동 "OP-1"(예를 들어, 부하, 곱셈 또는 가산)을 수행하도록 지시한다. 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬되기 때문에, 브로드캐스트 명령이 사용될 수 있다.
예를 들어, 동작 "OP-1"이 곱셈 또는 가산과 같은 PIM 작동이라고 가정한다. 제1 명령(212)은 메모리 모듈의 모듈-상대적 어드레스 "0" 에서 메모리 위치에 저장된 데이터에서 피연산자 "X-1"을 사용하여 작동 "OP-1"을 수행하기 위해 각각의 메모리 모듈에서의 PIM 유닛에 지시한다. 예를 들어, PIM 작동 "OP-1"이 곱셈이고 피연산자 "X-1"이 5인 것으로 가정하면, 제1 명령(212)은 메모리 모듈(108-0)의 메모리 위치 "0:0"에 저장된 데이터에 5를 곱하고, 메모리 모듈(108-1)의 메모리 위치 "1:0"에 저장된 데이터에 5를 곱하고 메모리 모듈(108-2)의 메모리 위치 "2:0"에 저장된 데이터에 5를 곱하게 할 수 있다. 곱해질 데이터가 메모리 모듈(108) 각각에서 동일한 모듈-상대적 어드레스("0")에 저장되기 때문에, 단일 브로드캐스트 명령은 메모리 모듈(108)에 걸쳐 PIM 작동을 병렬화하기 위해 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있다는 것에 유의한다. 마찬가지로, 도 2의 제2 브로드캐스트 명령의 경우 모듈-상대적 어드레스 "1" 및 상이한 피연산자 "X-2"를 제외한 제1 브로드캐스트 명령 이후에 전송되고, 제3 브로드캐스트 명령은 모듈-상대적 어드레스 "2" 및 상이한 피연산자 "X-3"을 제외한 제2 브로드캐스트 명령 이후에 전송된다. 따라서, 이 예에서, 상이한 피연산자 "X-1", "X-2" 및 "X-3"을 곱한 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬되기 때문에, 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 단지 3개의 브로드캐스트 명령만이 전송될 필요가 있다. 메모리 어드레스(214)는 콜론 ':' 앞의 별표 '*'가 명령/어드레스 버스(106)를 공유하는 모든 메모리 모듈(108)을 나타내고 콜론 뒤의 '1'이 모듈-관련 어드레스를 나타내는 이전에 설명된 표기법을 사용하여 브로드캐스트 메모리 어드레스를 나타낸다.
공유된 명령/어드레스 버스(106)의 사용을 제한하기 위해 브로드캐스트 메모리 액세스 명령을 사용하는 것은 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬되는 경우 가능하지만, 데이터가 어드레스-정렬되지 않은 경우 이러한 사용이 불가능할 수 있다. 도 3은 메모리 위치에 저장된 데이터가 메모리 모듈(108)에 걸쳐 어드레스-정렬되지 않을 때 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있는 예시적인 일련의 메모리 액세스 명령을 예시한다. 도 3의 일련의 메모리 액세스 명령은 도 2의 일련의 메모리 액세스 명령과 유사한 계산을 달성한다. 그러나, 데이터가 도 3의 예에서 어드레스-정렬되지 않기 때문에, 9개의 메모리 액세스 명령은 도 2의 예에서 전송되는 단지 3개의 것과는 대조적으로 공유된 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있다. 특히, 도 3의 예에서, 별개의 메모리 액세스 명령이 각각의 상이한 메모리 위치에 대해 전송될 수 있다. 특히, 도 3의 명령 시리즈의 처음 3개의 명령은 도 2의 제1 브로드캐스트 명령과 유사한 계산을 달성하고, 도 3의 명령 시리즈의 다음 3개의 명령은 도 2의 제2 브로드캐스트 명령과 유사한 계산을 달성하고, 도 3의 명령 시리즈의 최종 3개의 명령은 도 2의 제3 브로드캐스트 명령과 유사한 계산을 달성하지만, 상이한 및 비-어드레스-정렬된 메모리 액세스를 갖는다. 그러나, 메모리 모듈(108)의 메모리 위치에서 작동될 도 3의 예에서의 데이터가 어드레스-정렬되지 않기 때문에, 어드레스-정렬된 데이터에 대해 작동하는 도 2의 예의 전송된 더 적은 명령과 동일한 계산을 달성하기 위해 더 많은 메모리 액세스 명령이 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송될 수 있다.
메모리 액세스 명령(316)은 도 3의 일련의 명령에서 다른 메모리 액세스 명령을 나타낸다. 일련의 다른 메모리 액세스 명령과 마찬가지로, 그리고 도 3의 브로드캐스트 메모리 액세스 명령(212)과 대조적으로, 메모리 액세스 명령(316)은 하나의 메모리 모듈 "0"에서 특정 메모리 위치 "0"을 어드레싱한다. 따라서, 메모리 어드레스(318)는 도 3의 일련의 메모리 액세스 명령에 지정된 다른 메모리 어드레스를 나타낸다. 특히, 일련의 다른 명령에 의해 지정된 다른 메모리 어드레스와 마찬가지로, 그리고 브로드캐스트 메모리 어드레스(214)와 대조적으로, 메모리 어드레스(318)는 하나의 메모리 모듈 "1"의 특정 메모리 위치 "2"를 어드레싱한다.
따라서, 대체로 어드레스-정렬된 메모리 액세스를 갖는 정규 계산 작업부하를 위해 PIM 솔루션이 명령/어드레스 버스(106)의 대역폭 한계에 도달하지 않을 수 있지만, 이러한 제한은 동일한 계산을 달성하기 위해 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(106)에 의해 전송될 수 있는 더 많은 수의 메모리 액세스 명령으로 인해 어드레스-정렬되지 않은 많은 메모리 액세스를 갖는, 희박하거나 불규칙한 계산 워크부하에 도달할 수 있다.
PIM 솔루션은, 데이터 액세스가 어드레스 정렬되지 않은 경우에도, 브로드캐스트 또는 멀티캐스트 메모리 액세스 명령을 사용하여 여러 메모리 모듈(108)에 걸쳐 병렬 메모리 액세스를 수행할 수 있도록 어드레스가 근거리-메모리를 생성할 수 있는 근거리-메모리 어드레스 생성으로 지원된다.
메모리 모듈
도 4는 근거리-메모리 어드레스 생성 능력이 없는 예시적인 메모리 모듈의 개략도이다. 메모리 모듈(408)은 메모리 위치(410)가 일례인 다수의 메모리 위치를 제공하는 메모리 구조물(420)을 포함할 수 있다. 메모리 모듈(408)은 명령/어드레스 버스를 통해 메모리 컨트롤러(402)에 전기적으로 연결될 수 있다. 예를 들어, 메모리 모듈(408)은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 연결된 도 1의 메모리 모듈(108) 중 하나일 수 있다. 따라서, 메모리 컨트롤러(402)는 예를 들어, 도 1의 메모리 컨트롤러(102)일 수 있다.
이 예에서, 메모리 구조물(420)은 메모리 위치가 행 및 열로 배열되는 그리드 또는 테이블 구성을 갖는다. 그러나, 메모리 구조물(420)은 메모리 위치의 어레이로서 구현될 수 있다. 대안적으로, 메모리 구조물(420)은 메모리 구조물의 그리드 또는 테이블이 서로 적층된 것과 같은 3-차원 구조물일 수 있다. 메모리 구조물(420)은 메모리 위치의 임의의 특정 배열로 제한되지 않으며, 어드레싱가능한 메모리 위치를 갖는 사실상 임의의 메모리 구조물이 사용될 수 있다.
메모리 모듈(408)은 또한 메모리 구조물(420)의 메모리 셀로부터의 데이터 액세스에 대한 근거리-메모리 계산을 수행하기 위한 PIM 실행 유닛(422)을 포함한다. 예를 들어, PIM 실행 유닛(422)은 하나 이상의 곱셈-및-가산 유닛, 행렬-벡터 곱셈 작동을 위한 하나 이상의 감소기, 또는 메모리 구조물(420)로부터 액세스된 데이터에 대해 작동하기 위한 다른 서브-유닛을 포함할 수 있다.
작동 시, 메모리 컨트롤러(402)는 메모리 모듈에서의 수신을 위해 명령/어드레스 버스(106)를 통해 메모리 액세스 명령을 전송할 수 있다. 메모리 액세스 명령은 어드레스를 지정할 수 있다. 지정된 어드레스는 메모리 모듈(408)의 메모리 구조물(420)의 메모리 위치(예를 들어, 410)를 식별할 수 있다. 예를 들어, 지정된 어드레스는 행 디코더(424)에 입력되는 행 어드레스 구성요소 및 열 어드레스 디코더(426)에 입력되는 열 어드레스 구성요소를 가질 수 있다. 행 어드레스와 열 어드레스의 조합은 액세스될 메모리 위치(예를 들어, 410)를 지정한다. 부하 (또는 판독) 작동에서, 메모리 위치에서의 데이터는 PIM 실행 유닛(422)으로 및/또는 이에 기반한 계산을 위해 호스트 (예를 들어, 메모리 컨트롤러(402))로 다시 전송된다. 메모리 구조물(420)의 각각의 메모리 위치는 하나 이상의 바이트의 데이터를 저장할 수 있다.
메모리 모듈(408)은, 예를 들어, 행 버퍼 및 입력/출력 드라이버와 같은, 단순성을 위해, 도 4에 도시되지 않은 다른 구성요소를 포함할 수 있다.
근거리-어드레스 생성 유닛을 갖는 메모리 모듈
도 5는 불완전한 어드레스 정보를 지정하는 메모리 액세스 명령에 대한 어드레스 근거리-메모리를 생성하기 위한 근거리-메모리 어드레스 생성 유닛(528)을 포함하는 예시적인 메모리 모듈(508)의 개략도이다. 도 4의 메모리 모듈(408)과 같이, 메모리 모듈(508)은 메모리 위치(510)가 일례인 다수의 메모리 위치를 제공하는 메모리 구조물(520)을 포함할 수 있다. 메모리 모듈(508)은 명령/어드레스 버스를 통해 메모리 컨트롤러(502)에 전기적으로 연결될 수 있다. 예를 들어, 메모리 모듈(508)은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 연결된 도 1의 메모리 모듈(108) 중 하나일 수 있다. 따라서, 메모리 컨트롤러(502)는 예를 들어, 도 1의 메모리 컨트롤러(102)일 수 있다. 메모리 모듈(508)은 도 4의 메모리 모듈(408)과 또한 마찬가지로 PIM 실행 유닛(522), 행 디코더(524) 및 열 디코더(526)를 포함할 수 있다.
그러나, 도 4의 메모리 모듈(408)과 달리, 메모리 모듈(508)은 불완전한 어드레스 정보를 지정하는 메모리 액세스 명령에 대한 어드레스 근거리-메모리를 생성하기 위한 근거리-메모리 어드레스 생성 유닛(528)을 포함할 수 있다. 근거리-메모리 어드레스 생성 유닛(528) 내에는 행 어드레스 레지스터 파일(또는 간결성을 위해 단지 "RARF")(530) 및 열 어드레스 레지스터 파일(또는 간결성을 위해 단지 "CARF")(532)이 있다. RARF(530)는 행 선택기(534)에 의해 생성되도록 선택될 때 행 디코더(524)에 입력하기 위한 하나 이상의 행 어드레스를 저장할 수 있다. 유사하게, CARF(532)는 열 선택기(536)에 의해 생성되도록 선택될 때 열 디코더(526)에 입력하기 위한 하나 이상의 열 어드레스를 저장할 수 있다. 대안적으로, 메모리 모듈(508)로부터 분리된 (그러나 여전히 물리적으로 근접한) 집적 회로에 근거리-메모리 어드레스 생성 유닛을 통합하는 것이 유리할 수 있는데, 이는 잠재적으로 유익한 비용을 초래하는 종래의 메모리 모듈이 사용되는 것을 가능하게 할 것이기 때문이다.
행 선택기(534) 및 열 선택기(536)는 메모리 컨트롤러(502)에 의해 명령/어드레스 버스를 통해 전송된 메모리 액세스 명령에 대해 제어될 수 있다. 특히, 행 선택기(534) 및 열 선택기(536)는 메모리 컨트롤러(502)가, 행 어드레스 및/또는 열 어드레스가 각자 RARF(530) 및/또는 CARF(532)로부터 생성되는 불완전한 어드레스 정보로 메모리 액세스 명령을 전송할 수 있게 한다. 행 선택기(534) 및 열 선택기(536)는 또한 메모리 컨트롤러(502)가 근거리-메모리 어드레스 생성 유닛(582)에 의해 어드레스 정보가 근거리-메모리를 생성하지 않는 메모리 액세스 명령을 전송할 수 있게 한다.
예를 들어, 메모리 컨트롤러(502)는 행 어드레스 및 열 어드레스 둘 모두를 포함하는 어드레스를 지정하는 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534)는 메모리 액세스 명령에 지정된 행 어드레스를 입력으로서 수용하도록 구성될 수 있고, 명령에 대해 RARF(530)로부터 생성된 행 어드레스를 입력으로서 수용하지 않을 수 있다. 유사하게, 열 디코더(526)는 메모리 액세스 명령에 지정된 열 어드레스를 입력으로서 수용하도록 구성될 수 있고, 명령에 대해 CARF(532)로부터 생성된 열 어드레스를 입력으로서 수용하지 않을 수 있다. 대안적으로, DRAM의 경우와 같이 이 예의 맥락에서, 위상-변화 메모리, 저항성 메모리 또는 메모리 위치를 행 및 열 메모리 컨트롤러(502)로 조직화하는 다른 메모리 구조물은 행 어드레스를 지정하는 메모리 액세스 명령을 전송한 다음, 열 어드레스를 지정하는 다른 메모리 액세스 명령을 전송할 수 있다.
다른 예로서, 메모리 컨트롤러(502)는 행 어드레스 또는 열 어드레스를 지정하지 않는 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534)는 명령에 대해 RARF(530)로부터 생성된 행 어드레스를 입력으로서 수용하도록 구성될 수 있고, 열 선택기(536)는 명령에 대해 CARF(532)로부터 생성된 열 어드레스를 입력으로서 수용하도록 구성될 수 있다.
또 다른 예로서, 메모리 컨트롤러(502)는 행 어드레스를 지정하지 않는 불완전한 어드레스 정보를 갖는 제1 메모리 액세스 명령을 전송한 다음, 열 어드레스를 지정하지 않는 불완전한 어드레스 정보를 갖는 제2 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534)는 제1 명령에 대해 RARF(530)로부터 생성된 행 어드레스를 입력으로서 수용하도록 구성될 수 있고, 열 선택기(536)는 제2 명령에 대해 CARF(532)로부터 생성된 열 어드레스를 입력으로서 수용하도록 구성될 수 있다.
또 다른 예로서, 메모리 컨트롤러(502)는 행 어드레스를 지정하지 않는 불완전한 어드레스 정보를 갖는 제1 메모리 액세스 명령을 전송한 다음, 열 어드레스를 지정하는 제2 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534)는 제1 명령에 대해 RARF(530)로부터 생성된 행 어드레스를 입력으로서 수용하도록 구성될 수 있고, 열 선택기(536)는 제2 명령에 지정된 열 어드레스를 입력으로서 수용하고 제2 명령에 대해 CARF(532)로부터 생성된 열 어드레스를 입력으로서 수용하지 않도록 구성될 수 있다.
또 다른 예로서, 메모리 컨트롤러(502)는 행 어드레스를 지정하는 제1 메모리 액세스 명령을 전송한 다음, 열 어드레스를 지정하지 않는 불완전한 어드레스 정보를 갖는 제2 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534)는 제1 명령에 지정된 행 어드레스를 입력으로서 수용하고 제1 명령에 대해 RARF(530)로부터 생성된 행 어드레스를 입력으로서 수용하지 않도록 구성될 수 있고, 열 선택기(536)는 제2 명령에 대해 CARF(532)로부터 생성된 열 어드레스를 입력으로서 수용하도록 구성될 수 있다.
또 다른 예로서, 메모리 컨트롤러(502)는 행 어드레스 또는 열 어드레스 중 하나를 지정하지만 다른 것을 지정하지 않는 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송할 수 있다. 이 경우, 행 선택기(534) 또는 열 선택기(536) 중 하나는 명령에 대해 각자 RARF(530) 또는 CARF(532)로부터 각자 행 어드레스 또는 열 어드레스를 입력으로서 수용하도록 구성될 수 있고, 행 선택기(534) 또는 열 선택기(536) 중 다른 하나는 각자 메모리 액세스 명령에 지정된 행 어드레스 또는 열 어드레스를 입력으로서 수용하도록 구성될 수 있다.
프로그램 어드레스 명령
행 어드레스 및/또는 열 어드레스는 명령/어드레스 버스를 통해 메모리 컨트롤러(502)에 의해 전송된 하나 이상의 프로그램 어드레스 명령에 의해 각자 RARF(530) 및/또는 CARF(532)에서 사전-프로그래밍된다. 이어서, 사전-프로그래밍된 어드레스는 메모리 컨트롤러(502)에 의해 전송된 불완전한 어드레스 정보를 갖는 하나 이상의 후속 메모리 액세스 명령에 대한 근거리-메모리 어드레스 생성 유닛(528)에 의해 근거리-메모리를 생성할 수 있다.
예를 들어, 메모리 컨트롤러(502)는 행 어드레스 및 열 어드레스 둘 모두를 포함하는 어드레스를 지정하는 메모리 모듈(508)에 명령/어드레스 버스를 통해 프로그램 어드레스 명령을 전송할 수 있다. 행 어드레스는 RARF(530)에 저장될 수 있고, 열 어드레스는 CARF(532)에 저장될 수 있다. 이어서, 불완전한 어드레스 정보를 갖는 하나 이상의 후속 메모리 액세스 명령은 메모리 컨트롤러(502)에 의해 명령/어드레스 버스를 통해 메모리 모듈(508)에 전송될 수 있다. 사전-프로그래밍된 행 어드레스 및 사전-프로그래밍된 열 어드레스는 불완전한 어드레스 정보를 갖는 이러한 후속 메모리 액세스 명령 각각에 대해 RARF(530) 및 CARF(532)로부터 근거리-메모리를 생성할 수 있다.
다른 예로서, 메모리 컨트롤러(502)는 명령/어드레스 버스를 통해 프로그램 어드레스 명령을, 행 어드레스 또는 열을 지정하지만 행 어드레스 및 열 어드레스 둘 모두를 지정하지 않는 메모리 모듈(508)에 전송할 수 있다. 행 어드레스가 지정되면, RARF(530)에 저장될 수 있다. 한편, 열 어드레스가 지정되면, CARF(532)에 저장될 수 있다. 이어서, 불완전한 어드레스 정보를 갖는 하나 이상의 후속 메모리 액세스 명령은 메모리 컨트롤러(502)에 의해 명령/어드레스 버스를 통해 메모리 모듈(508)에 전송될 수 있다. 사전-프로그래밍된 행 어드레스 또는 사전-프로그래밍된 열 어드레스는 불완전한 어드레스 정보를 갖는 이러한 후속 메모리 액세스 명령 각각에 대해 각자 RARF(530) 또는 CARF(532)로부터 근거리-메모리를 생성할 수 있다. 후속 메모리 액세스 명령은 사전-프로그래밍되고 근거리-메모리를 생성한 행 어드레스 또는 열 어드레스 중 다른 것을 지정할 수 있다.
RARF(530) 및/또는 CARF(532)는 다중 사전-프로그래밍된 어드레스를 저장할 수 있는 다중 저장 위치를 포함한다. 각각의 이러한 저장 위치는 인덱스(예를 들어, 0, 1, 2 등)와 연관될 수 있다. 사전-프로그래밍된 어드레스는 인덱스에 의해 불완전한 어드레스 정보를 갖는 메모리 액세스 명령에서 참조될 수 있다.
예를 들어, 프로그램 어드레스 명령은 RARF(530)의 인덱스 1에 행 어드레스를 사전-프로그래밍하고 CARF(532)의 인덱스 1에 열 어드레스를 사전-프로그래밍하기 위해 메모리 컨트롤러(502)에 의해 전송될 수 있다. 그 다음, 메모리 컨트롤러(502)에 의해 전송된 후속 메모리 액세스 명령은 인덱스 1을 지정할 수 있고, 각자 RARF(530) 및 CARF(532)에서 인덱스 1에 저장된 사전-프로그래밍된 행 어드레스 및 열 어드레스는 명령을 위해 근거리-메모리를 생성할 수 있다.
메모리 액세스 명령은 상이한 인덱스를 지정할 수 있다. 예를 들어, 메모리 액세스 명령은 RARF(530)에 대한 인덱스 및 CARF(532)에 대한 상이한 인덱스를 지정할 수 있다. 이 경우, RARF(530)에 대해 지정된 인덱스에서의 사전-프로그래밍된 행 어드레스는 명령에 대해 근거리-메모리를 생성할 수 있고, CARF(532)에 대해 지정된 상이한 인덱스에서의 사전-프로그래밍된 열 어드레스는 명령에 대해 근거리-메모리를 생성할 수 있다.
메모리 액세스 명령은 RARF(530)에 대한 인덱스만을 또는 CARF(532)에 대한 인덱스만을 지정할 수 있다. 이 경우, 명령에 지정된 RARF(530) 또는 CARF(532) 인덱스에서의 사전-프로그래밍된 행 어드레스 또는 사전-프로그래밍된 열 어드레스는 명령에 대해 근거리-메모리를 생성할 수 있고, 행 어드레스 및 열 어드레스의 다른 것은 명령에 의해 지정될 수 있다.
나타낸 바와 같이, RARF(530) 및/또는 CARF(532)가 사전-프로그래밍되거나 달리 어드레스를 저장하면, 불완전한 어드레스 정보를 갖는 후속 메모리 액세스 명령은 각각의 이러한 후속 메모리 액세스 명령에 저장된 어드레스를 지정하지 않으면서 명령/어드레스 버스를 통해 메모리 컨트롤러(502)에 의해 전송될 수 있다. 그 결과, 후속 메모리 액세스 명령은 저장된 어드레스가 메모리 액세스 명령에 지정되는 경우 소비할 명령/어드레스 버스의 대역폭을 소비하지 않는데, 이는 이러한 각각의 명령으로 전송될 수 있는 비트 수가 더 적기 때문이다.
상이한 메모리 모듈(예를 들어, 108-0, 108-1, 108-2)은 각자의 RARF 및/또는 CARF 각각에 상이한 행 및/또는 열 어드레스를 사전-프로그래밍하거나 그렇지 않으면 저장한다. 이는 각자의 RARF 및/또는 CARF에 저장된 근거리-메모리 생성된 행 및/또는 열 어드레스를 활용함으로써 데이터가 메모리 모듈에 걸쳐 어드레스-정렬(예를 들어, 상이한 행 및/또는 열 어드레스에 저장)되지 않는 경우 각각의 상이한 메모리 모듈에서 데이터에 액세스하기 위해 명령/어드레스 버스를 통해 메모리 컨트롤러(502)에 의해 전송될 불완전한 어드레스 정보를 갖는 단일 후속 브로드캐스트 메모리 액세스 명령을 허용한다.
메모리 컨트롤러(502)에 의해 전송된 프로그램 어드레스 명령에 의한 RARF(530) 및 CARF(532)의 행 및/또는 열 어드레스의 사전-프로그래밍은 명령/어드레스 버스 상에서 유휴 사이클 동안 수행된다. 그런 다음, 사전-프로그래밍된 행 및/또는 열 어드레스는 메모리 컨트롤러(502)에 의해 전송된 다중 후속 메모리 액세스 명령에 대해 반복적으로 RARF(530) 및/또는 CARF(532)로부터 근거리-메모리를 생성한다. 다시 말해서, RARF(530) 및/또는 CARF(532)에 의해 제공된 근거리-메모리 어드레스 생성 능력으로 인해, 명령/어드레스 버스를 통해 프로그램 어드레스 명령(들)을 전송하기 위해 소비되는 명령/어드레스 버스의 대역폭은 다중 후속 메모리 액세스 명령에 걸쳐 분할상환될 수 있다.
어드레스 계산 유닛
근거리-메모리 어드레스 생성 유닛은 메모리 모듈에 근거리-메모리 어드레스 계산 기능성을 제공하기 위한 어드레스 계산 유닛을 포함한다. 도 6은 불완전한 어드레스 정보를 지정하는 메모리 액세스 명령에 대한 어드레스 근거리-메모리를 생성하기 위한 근거리-메모리 어드레스 생성 유닛(628)을 포함하는 예시적인 메모리 모듈(608)의 개략도이다. 도 5의 메모리 모듈(508)과 마찬가지로, 메모리 모듈(608)은 메모리 위치(610)가 일례인 다수의 메모리 위치를 제공하는 메모리 구조물(620)을 포함할 수 있다. 메모리 모듈(608)은 명령/어드레스 버스를 통해 메모리 컨트롤러(602)에 전기적으로 연결될 수 있다. 예를 들어, 메모리 모듈(608)은 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 연결된 도 1의 메모리 모듈(108) 중 하나일 수 있다. 따라서, 메모리 컨트롤러(602)는 예를 들어, 도 1의 메모리 컨트롤러(102)일 수 있다. 메모리 모듈(608)은 도 5의 메모리 모듈(508)과 또한 마찬가지로 PIM 실행 유닛(622), 행 디코더(624), 열 디코더(626), RARF(630), CARF(632), 행 선택기(634) 및 열 선택기(646)를 포함할 수 있다.
그러나, 도 5의 메모리 모듈(508)과 달리, 메모리 모듈(608)은 RARF(630), CARF(632) 및 PIM 유닛(622)에 전기적으로 연결된 어드레스 계산 유닛(638)을 포함한다.
어드레스 계산 유닛(638)은 구성가능한 스트라이드를 사용하여, 각자 RARF(630) 및 CARF(632)에 저장된 행 및/또는 열 어드레스를 증분 또는 감량시키도록 구성된다. 스트라이드는 어드레스 계산 유닛(638) 내에서 사전-구성될 수 있다. 추가로 또는 대안적으로, 스트라이드는 스트라이드가 명령에 의해 지정되는 명령/어드레스 버스를 통해 메모리 컨트롤러(602)로부터 전송된 불완전한 어드레스 정보를 갖는 메모리 액세스 명령에 의해 어드레스 계산 유닛(638)에서 사전-프로그래밍될 수 있다.
예를 들어, 어드레스 계산 유닛(638)은 메모리 위치가 메모리 모듈(608)에서 수신된 불완전한 어드레스 정보를 갖는 메모리 액세스 명령에 대해 메모리 구조물(620)에서 액세스된 후에 CARF(632)에 저장된 열 어드레스를 증분시키거나, 감량시키거나, 곱할 수 있다. 마찬가지로, 추가로 또는 대안적으로, 어드레스 계산 유닛(638)은 메모리 위치가 메모리 액세스 명령에 대해 메모리 구조물(520)에서 액세스된 후에 RARF(630)에 저장된 행 어드레스를 증분시키거나, 감량시키거나, 곱할 수 있다. 메모리 모듈(608)에 의해 수신된 불완전한 어드레스 정보를 갖는 다음의 메모리 액세스 명령은 RARF(630) 및/또는 CARF(632)로부터 증분되거나, 감량되거나, 곱해진 어드레스를 생성할 수 있다. 이 프로세스는 다중 프로그램 어드레스 명령을 전송함으로써 명령/어드레스 버스의 대역폭을 소비할 필요성을 피하는 다수의 메모리 액세스 명령을 계속할 수 있다. 대신에, 제2 및 후속 어드레스는 스트라이드를 사용하는 어드레스 계산 유닛(628)에 의해 초기 프로그램 어드레스 명령에 의해 지정된 단일 시작 어드레스 및 간단한 계산의 시퀀스를 사용하여 어드레스 계산 유닛(628)에 의해 계산될 수 있다. 어드레스 계산 유닛(628)은 스트라이드에 의한 감량 및 스트라이드에 의한 곱셈 등을 포함하여, 스트라이드에 의한 증분에 추가하여 어드레스 계산의 범위를 지원할 수 있다.
어드레스 계산 유닛(628)은 메모리 구조물(620)과 연관된 PIM 실행 유닛(622)에 의해 계산된 값 또는 어드레스로서 사용될 메모리 구조물(620)로부터 액세스된 값에 액세스하거나, 제공받을 수 있다. 이어서, 어드레스 계산 유닛(628)은 이러한 어드레스를 사용하여, RARF(630) 및 CARF(632)에 프로그래밍될 행 및 열 어드레스를 계산할 수 있다. 이러한 사용의 예는 메모리 구조물(620)로부터 어드레스 오프셋 값을 판독하는 것, 해당 어드레스 오프셋 값을 PIM 실행 유닛(622)을 사용하는 데이터 구조물의 사전결정된 베이스 어드레스에 가산하는 것, 및 어드레스 계산 유닛(628)을 사용하여 RARF(630) 및 CARF(632)에 프로그래밍될 결과 행 및 열 어드레스를 생성하는 것을 포함할 수 있다.
메모리 구조물(620)로부터 RARF(630) 또는 CARF(632)에 저장된 베이스 어드레스로의 오프셋 판독의 첨가는 PIM 유닛(622) 대신에 어드레스 계산 유닛(628)에 의해 수행될 수 있다.
다중 메모리 모듈에서의 어드레스 계산 유닛은 불완전한 어드레스를 갖는 단일 메모리 액세스 명령이 명령/어드레스 버스를 통해 메모리 컨트롤러 또는 호스트에 의해 전송되어, 오프셋으로서 각각의 메모리 모듈의 상이한 어드레스에 적용될 수 있도록 하고, 가능하다면, 각각의 메모리 모듈과 연관된 베이스 어드레스는 각자의 RARF/CARF 및/또는 각자의 메모리 구조물에 별도로 저장되기 때문에 상이할 수 있다. 어드레스 계산 유닛은, 오프셋이 각각의 메모리 모듈과 연관된 메모리 구조물로부터 판독됨에 따라, 명령/어드레스 버스에 대한 대역폭 요구를 추가로 감소시킨다. 이와 같이, 오프셋은 명령/어드레스 버스를 통해 전송될 필요가 없다. 메모리 구조물로부터 오프셋을 판독하는 것은 또한 다중 메모리 모듈로 전송되어 명령/어드레스 버스 대역폭 요구를 추가로 감소시키는 브로드캐스트 또는 멀티캐스트 메모리 액세스 명령을 통해 수행될 수 있다는 것에 유의한다.
예시적인 명령 시리즈
도 7은 어드레스-정렬되지 않은 메모리 모듈(108)에 걸쳐 메모리 위치에 저장된 데이터에 액세스하기 위한 예시적인 일련의 프로그램 어드레스 명령(740-1, 740-2 및 740-3) 및 메모리 액세스 명령(742-1, 742-2 및 742-3)을 예시한다. 이 예에서, 어드레스-정렬되지 않은 메모리 모듈(108)의 상이한 메모리 위치에 액세스하기 위한 3개의 메모리 액세스 명령(742-1, 742-2 및 742-3)이 있다. 근거리-메모리 어드레스 생성에 대한 시작 어드레스는 제1 메모리 액세스 명령(742-1)에 의해 사용될 프로그램 어드레스 명령(740-1, 740-2 및 740-3)에 의해 메모리 모듈(108)로 사전-프로그래밍된다. 이어서, 시작 어드레스는 제2 메모리 액세스 명령(742-2)에 대해 고정된 스트라이드(예를 들어, 1) 만큼 증분된다. 이러한 어드레스는 제3 메모리 액세스 명령(742-3)에 대해 고정된 스트라이드 만큼 다시 증분된다. 이러한 방식으로, 메모리 모듈(108)의 근거리-메모리 어드레스 생성 능력과 함께, 계산은 위에 기재된 도 3에 요구되는 9개의 명령과는 대조적으로 명령/어드레스 버스(106)를 통해 메모리 컨트롤러(102)에 의해 전송된 6개의 명령만으로 달성될 수 있다.
상세하게, 프로그램 어드레스 명령(740-1)은 메모리 컨트롤러(102)에 의해 메모리 모듈(108-0)에 대한 명령/어드레스 버스(106)를 통해 메모리 모듈(108-0)에 전송되어, 모듈(108-0)에 대한 모듈-상대적 시작 어드레스를 "0"으로 설정한다.
그런 다음, 프로그램 어드레스 명령(740-2)은 메모리 컨트롤러(102)에 의해 메모리 모듈(108-1)에 대한 명령/어드레스 버스 (106)를 통해 메모리 모듈(108-1)에 전송되어, 모듈(108-1)에 대한 모듈-상대적 시작 어드레스를 "1"로 설정한다.
그런 다음, 프로그램 어드레스 명령(740-2)은 메모리 컨트롤러(102)에 의해 메모리 모듈(108-2)에 대한 명령/어드레스 버스(106)를 통해 메모리 모듈(108-2)에 전송되어, 모듈(108-2)에 대한 모듈-상대적 시작 어드레스를 "2"로 설정한다.
그 다음, 메모리 컨트롤러(102)는 메모리 모듈(108-0, 108-1 및 108-2) 각각에 명령/어드레스 버스(106)를 통해 불완전한 어드레스 정보(예를 들어, 어드레스-적음)를 갖는 메모리 액세스 명령(742-1)을 브로드캐스팅한다. 명령(742-1)은 작동 OP-1 및 피연산자 X-1을 지정한다. 예를 들어, 작동 OP-1은 곱셈 또는 가산과 같은 PIM 명령일 수 있다. 작동 OP-1은 PIM 명령일 수 있지만, 작동 OP-1은 또한 단순한 메모리 부하 명령 또는 다른 명령일 수 있다. 예를 들어, 작동 OP-1이 곱셈이고 피연산자 X-1이 수 5라고 가정하면, 프로그램 어드레스 명령(740)에 의해 사전-프로그래밍된 모듈-상대적 시작 어드레스에 기반하여, 명령(742-1)은 모듈(108-0)의 메모리 위치 "0:0"에 저장된 데이터에 5를 곱하고, 모듈(108-1)의 메모리 위치 "1:1"에 저장된 데이터에 5를 곱하고, 메모리 모듈(108-2)의 메모리 위치 "2:2"에 저장된 데이터에 5를 곱할 것이다. 각각의 곱셈 후, 메모리 모듈(108)의 모듈-상대적 시작 어드레스는 모듈-상대적 시작 어드레스가 각자 메모리 모듈(108-0, 108-1 및 108-2)에 대해 이제 "1", "2" 및 "3"이도록 고정된 스트라이드(예를 들어, 1)만큼 증분될 수 있다.
그 다음, 메모리 컨트롤러(102)는 메모리 모듈(108-0, 108-1 및 108-2) 각각에 명령/어드레스 버스(106)를 통해 불완전한 어드레스 정보(예를 들어, 어드레스-적음)를 갖는 메모리 액세스 명령(742-2)을 브로드캐스팅한다. 명령(742-2)은 작동 OP-1 및 상이한 피연산자 X-2를 지정한다. 예를 들어, 작동 OP-1이 곱셈이고 피연산자 X-2가 수 8이라고 가정하면, 현재의 모듈-상대적 시작 어드레스에 기반하여, 명령(742-2)은 모듈(108-0)의 메모리 위치 "0:1"에 저장된 데이터에 8를 곱하고, 모듈(108-1)의 메모리 위치 "1:2"에 저장된 데이터에 8를 곱하고, 메모리 모듈(108-2)의 메모리 위치 "2:3"에 저장된 데이터에 8를 곱할 것이다. 각각의 곱셈 후, 메모리 모듈(108)의 모듈-상대적 시작 어드레스는 모듈-상대적 시작 어드레스가 각자 메모리 모듈(108-0, 108-1 및 108-2)에 대해 이제 "2", "3" 및 "0"이도록 고정된 스트라이드(예를 들어, 1)만큼 증분될 수 있다.
그 다음, 메모리 컨트롤러(102)는 메모리 모듈(108-0, 108-1 및 108-2) 각각에 명령/어드레스 버스(106)를 통해 불완전한 어드레스 정보(예를 들어, 어드레스-적음)를 갖는 메모리 액세스 명령(742-3)을 브로드캐스팅한다. 명령(742-3)은 동작 OP-1 및 상이한 피연산자 X-3을 지정한다. 예를 들어, 작동 OP-1이 곱셈이고 피연산자 X-3이 수 0라고 가정하면, 현재의 모듈-상대적 시작 어드레스에 기반하여, 명령(742-3)은 모듈(108-0)의 메모리 위치 "0:2"에 저장된 데이터에 0를 곱하고, 모듈(108-1)의 메모리 위치 "1:3"에 저장된 데이터에 0를 곱하고, 메모리 모듈(108-2)의 메모리 위치 "2:0"에 저장된 데이터에 0를 곱할 것이다.
예시적인 명령 형식
예를 들어, 메모리 컨트롤러(102) 및 메모리 모듈(108)은 근거리-메모리 어드레스 생성을 지원하기 위해 다음의 명령을 지원할 수 있다:
메모리_액세스_명령 작동, [마스크]
프로그램_[행, 열]_어드레스_명령 메모리_모듈_id, 모듈_관련_어드레스
위의 제1 명령은 예를 들어, HBM 메모리의 채널 내의 DRAM 뱅크와 같은 명령/어드레스 버스를 공유하는 2개 이상의 메모리 모듈로 전송하기 위한 불완전한 어드레스 정보를 갖는 예시적인 브로드캐스트 또는 멀티캐스트 메모리 액세스 명령 형식을 나타낸다. 브로드캐스트 명령의 경우, 명령은 명령/어드레스 버스를 공유하는 모든 메모리 모듈에 대한 것일 수 있다. 멀티캐스트 명령의 경우, 명령은 명령이 지향되는 명령/어드레스 버스를 공유하는 모든 메모리 모듈 중 2개 이상의 서브세트를 선택하는 파라미터로서 비트 마스크를 지정한다. 대안적으로, 명령은 모든 메모리 모듈의 서브세트에서 명령을 억제하는 마스크를 가질 수 있다.
브로드캐스트 또는 멀티캐스트 메모리 액세스 명령은 또한 파라미터로서 작동 유형을 지정할 수 있다. 그러나, 작동은 메모리 부하일 수 있으며, 예를 들어, 근거리-메모리 처리를 위한 곱셈 또는 가산과 같은 PIM 작동은 메모리 모듈이 PIM 능력을 갖는 곳에 지정될 수 있다. 특히, 종래의 메모리 액세스 명령과 달리, 위의-메모리 액세스 명령은 임의의 어드레스 정보를 지정하거나 불완전한 어드레스 정보만을 지정하지 않고 전송될 수 있다. 그리고, 종래의 메모리 액세스 명령과 달리, 메모리 모듈의 근거리-메모리 어드레스 생성 유닛은 위의 메모리 액세스 명령에 대해 누락된 어드레스 또는 근거리-메모리의 누락된 어드레스 부분을 생성할 수 있다.
제2 명령은 공유된 명령/어드레스 버스를 통해 메모리 모듈로 전송하기 위한 예시적인 프로그램 어드레스 명령 형식이다. 명령은 명령이 표적화된 메모리 모듈의 식별자를 파라미터로서 수용한다. 명령은 또한 행 어드레스, 열 어드레스, 행 및 열 어드레스, 또는 프로그램 어드레스 명령의 유형에 따라 변할 수 있는 다른 모듈 상대적 어드레스일 수 있는 어드레스 파라미터를 수용한다. 예를 들어, 행 어드레스 및 열 어드레스와 별도로 각자 RARF 및 CARF를 프로그래밍하기 위한 상이한 유형의 프로그램 어드레스 명령이 있을 수 있다.
본원에 제시된 프로그램 어드레스 명령은 각각의 메모리 모듈을 개별적으로 프로그래밍하지만, 대안적으로 연관된 마스크를 갖는 브로드캐스트 프로그램 어드레스 명령 또는 멀티캐스트 프로그램 어드레스 명령은 동일한 모듈 상대적 어드레스를 갖는 다중 메모리 모듈을 프로그래밍할 수 있다. 그리고 언급된 바와 같이, 프로그램 어드레스 명령에 대한 추가의 변형은 행 및 열 어드레스 또는 다른 모듈의 개별적으로 상대적인 어드레스의 프로그래밍을 포함할 수 있다.
다른 고려사항
하이브리드 메모리 큐브 (또는 간결성을 위해 단지 "HMC") 및 HBM 메모리와 같은 특정 컴퓨터 메모리 기술은 베이스 다이의 상단에 많은 메모리 층을 적층할 수 있다. 이러한 베이스 다이는 각자 도 5 및 도 6의 근거리-메모리 어드레스 생성 유닛(528 및 628)과 같은 근거리-메모리 계산 능력을 잠재적으로 수용할 수 있다.
근거리-메모리 어드레스 생성 유닛(528 및 628)은 3차원(3-D) 적층된 메모리들 또는 종래의 DRAM의 메모리 층의 메모리 어레이/뱅크에 가깝게 배치될 수 있다.
실시양태는 또한 비-휘발성 메모리, 플래시 메모리, 및 임베딩된 DRAM과 같은 DRAM 이외의 다른 형태의 메모리에 적용가능하다.
일부 실시양태는 제안된 메모리 액세스 명령 중 임의의 것과 함께 사용될 단일 시작 어드레스를 연관시키는 상태 및 로직을 묘사하지만, 다중 PIM 작동을 위한 제안된 상태 및 로직을 복제하는 것은 다중 시작 어드레스가 곱셈 작동 및 가산 작동을 위해 각각의 메모리 모듈에서 상이한 어드레스를 추적하는 것과 같은 근거리-메모리 어드레스 생성 유닛 또는 상이한 PIM 작동에 의해 추적될 수 있게 한다.
메모리 컨트롤러(102)는 메모리 모듈(108)과 함께 결정론적 이중-데이터 레이트(또는 줄여서, 단지 "DDR")를 이용할 수 있다. DDR은 메모리 구조물(108) 사이를 적절하게 동기화함으로써 일부 실시양태에 따라 지원될 수 있다. 예를 들어, DRAM 행 개방(활성화)을 필요로 하는 메모리 액세스 명령은 DRAM 행 버퍼 히트보다 더 오래 걸릴 수 있다. 상이한 메모리 모듈에 걸쳐 상이한 어드레스에 액세스하기 위해 불완전한 어드레스 정보를 갖는 브로드캐스트 또는 멀티캐스트 메모리 액세스 명령을 허용하기 위해, 메모리 컨트롤러(102)는 상이한 메모리 모듈에 걸쳐 열 개방을 동기화하도록 증강될 수 있다.
결론
본원에서 "실시양태"에 대한 언급은 특정 특징, 구조 또는 특성화가 본 발명의 하나 이상의 실시양태와 관련하여 기재되고, 이에 포함될 수 있음을 의미한다. 명세서의 다양한 곳에서 "실시양태에서" 및 "실시양태에 따른"이라는 어구의 출현은 반드시 모두 동일한 실시양태를 지칭하는 것은 아니며, 다른 실시양태와 상호 배타적인 별개의 또는 대안적인 실시양태도 아니다.
다양한 도면 중 일부가 특정 순서로 다수의 논리적 단계를 예시하지만, 순서에 의존하지 않는 단계는 재정렬될 수 있고 다른 단계는 조합되거나 분할될 수 있다. 일부 재정렬 또는 다른 그룹이 구체적으로 언급되지만, 본원에 제시된 순서 및 그룹은 대안의 완전한 목록이 아니다.
전술한 상세한 설명 및 첨부된 청구범위에서, 용어 제1, 제2 등은 일부 경우에 다양한 요소를 설명하기 위해 본원에 사용되지만, 이들 요소는 이러한 용어에 의해 제한되지 않아야 한다. 이러한 용어는 하나의 요소를 다른 요소와 구별하는 데에만 사용된다. 예를 들어, 제1 컴퓨팅 디바이스는 제2 컴퓨팅 디바이스로 칭할 수 있고, 유사하게, 제2 컴퓨팅 디바이스는 제1 컴퓨팅 디바이스로 칭할 수 있다. 제1 컴퓨팅 디바이스 및 제2 컴퓨팅 디바이스는 둘 모두 컴퓨팅 디바이스이지만, 이들은 동일한 컴퓨팅 디바이스가 아니다.
전술한 상세한 설명 및 첨부된 청구범위에서 사용된 바와 같이, 단수 형태 "a", "an" 및 "the" 는 문맥상 명백하게 달리 나타내지 않는 한 복수 형태도 또한 포함하도록 의도된다. 전술한 상세한 설명 및 첨부된 청구범위에서 사용된 바와 같이, 용어 "및/또는"은 연관된 나열된 항목 중 하나 이상의 임의의 및 모든 가능한 조합을 지칭하고 이를 포함한다.
첨부된 청구범위에서 전술한 상세한 설명에서 사용된 바와 같이, 용어 "~에 기반한", "~에 따른", "비롯하다", "비롯한", "포함하다", 및/또는 "포함하는"은 언급된 특징, 정수, 단계, 작동, 요소 및/또는 구성요소의 존재를 지정하지만, 하나 이상의 다른 특징, 정수, 단계, 작동, 요소, 구성요소 및/또는 이의 그룹의 존재 또는 첨가를 배제하지 않는다.
전술한 상세한 설명 및 첨부된 청구범위에서 사용되는 바와 같이, 용어 "경우"는, 선택적으로, "경우"또는 "시"또는 "결정에 응답하여" 또는 "검출에 응답하여" 또는 문맥에 따라, 의존한다는 "결정에 따라"를 의미하는 것으로 해석된다. 유사하게, 어구 "결정되는 경우" 또는 "[언급된 조건 또는 이벤트]가 검출되는 경우"는, 선택적으로, 문맥에 따라, "결정시"또는 "결정하는 것에 응답하여" 또는 "[언급된 조건 또는 이벤트]의 검출시" 또는 "[언급된 조건 또는 이벤트]를 검출하는 것에 응답하여" 또는 "[언급된 조건 또는 이벤트]가 검출된다는 결정에 따라"를 의미하는 것으로 해석된다.
전술한 명세서에서, 본 발명의 실시양태는 구현에 따라 달라질 수 있는 다수의 특이적 세부사항을 참조하여 기재되었다. 따라서, 명세서 및 도면은 제한적인 의미보다는 예시적인 것으로 간주되어야 한다.

Claims (31)

  1. 메모리 컨트롤러로서,
    2개 이상의 근거리-메모리 생성된 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 연결부를 통해, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송하도록 구성된 명령 로직을 포함하는, 메모리 컨트롤러.
  2. 제1항에 있어서, 2개 이상의 근거리-메모리 생성된 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 어드레스는 상이한 어드레스인, 메모리 컨트롤러.
  3. 제1항에 있어서,
    명령 로직은 (a) 연결부를 통해, 2개 이상의 메모리 모듈의 세트의 제1 메모리 모듈에 제1 어드레스를 지정하는 제1 프로그램 어드레스 명령을 전송하고, (b) 연결부를 통해, 2개 이상의 메모리 모듈의 세트의 제2 메모리 모듈에 제2 어드레스를 갖는 제2 프로그램 어드레스 명령을 전송하도록 구성되고;
    명령 로직은 제1 어드레스 및 제2 어드레스에 기반하여, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  4. 제1항에 있어서, 2개 이상의 메모리 위치의 세트에 저장된 데이터 상에서, 2개 이상의 메모리 모듈의 세트의, 2개 이상의 프로세서-인-메모리 유닛의 세트에 의해 수행될 특정 작동은 메모리 액세스 명령에 의해 지정되는, 메모리 컨트롤러.
  5. 제4항에 있어서, 특정 작동은 곱셈 작동 또는 가산 작동인, 메모리 컨트롤러.
  6. 제1항에 있어서, 명령 로직은 연결부를 통해, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하는 어드레스 정보를 갖지 않는 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  7. 제1항에 있어서, 명령 로직은 연결부를 통해, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 부분 어드레스 정보를 지정하는 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  8. 제7항에 있어서, 부분 어드레스 정보는 (a) 2개 이상의 메모리 위치의 세트에 공통인 행 어드레스 또는 (b) 2개 이상의 메모리 위치의 세트에 공통인 열 어드레스를 포함하는, 메모리 컨트롤러.
  9. 제1항에 있어서, 명령 로직은 연결부를 통해, 연결부를 공유하는 복수의 메모리 모듈의 서브세트에서 메모리 액세스 명령을 억제하는 마스크를 포함하는 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  10. 제1항에 있어서,
    명령 로직은 연결부를 통해, 2개 이상의 메모리 모듈의 세트에 특정 어드레스를 지정하는 프로그램 어드레스 명령을 전송하도록 구성되고;
    명령 로직은 연결부를 통해, 특정 어드레스에 기반하여, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  11. 제1항에 있어서, 명령 로직은 연결부를 통해, 2개 이상의 근거리-메모리 생성된 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 복수의 메모리 액세스 명령을 전송하도록 구성되는, 메모리 컨트롤러.
  12. 제1항에 있어서, 명령 로직은 연결부를 통해, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 레지스터 파일 인덱스를 지정하는 메모리 액세스 명령을 전송하도록 구성되고; 레지스터 파일 인덱스는 2개 이상의 근거리-메모리 생성된 어드레스의 세트를 생성하기 위해 2개 이상의 메모리 모듈의 세트에서 사용될 수 있는, 메모리 컨트롤러.
  13. 메모리 컨트롤러로서,
    명령 로직이되,
    2개 이상의 근거리-메모리 생성된 행 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 행의 세트에 저장된 데이터에 액세스하기 위한 연결부를 통한, 불완전한 어드레스 정보를 갖는 제1 메모리 액세스 명령을 전송하고;
    2개 이상의 근거리-메모리 생성된 열 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 열의 세트에 저장된 데이터에 액세스하기 위한 연결부를 통한, 불완전한 어드레스 정보를 갖는 제2 메모리 액세스 명령을 전송하도록 구성된, 명령 로직을 포함하는, 메모리 컨트롤러.
  14. 제13항에 있어서, 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 행 어드레스는 상이한 어드레스인, 메모리 컨트롤러.
  15. 제13항에 있어서, 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 행 어드레스는 동일한 행 어드레스인, 메모리 컨트롤러.
  16. 제13항에 있어서, 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 행 어드레스는 상이한 어드레스이고; 2개 이상의 근거리-메모리 열 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 열 어드레스는 상이한, 메모리 컨트롤러.
  17. 메모리 모듈로서,
    복수의 어드레싱가능한 메모리 위치를 갖는 메모리 구조물; 및
    2개 이상의 근거리-메모리 생성된 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하기 위한 불완전한 어드레스 정보를 갖는 메모리 액세스 명령의, 연결부를 통한 메모리 모듈에서의, 수신에 기반하여 복수의 메모리 위치 중 하나의 메모리 위치에 상응하는 어드레스를 생성하도록 구성된, 근거리-메모리 어드레스 생성 유닛을 포함하고,
    2개 이상의 메모리 모듈의 세트는 메모리 모듈을 포함하고;
    2개 이상의 메모리 위치의 세트는 메모리 위치를 포함하고;
    개 이상의 근거리-메모리 생성된 어드레스의 세트는 어드레스를 포함하는, 근거리-메모리 어드레스 생성 유닛을 포함하는, 메모리 모듈.
  18. 제17항에 있어서, 근거리-메모리 어드레스 생성 유닛은 메모리 위치에 상응하는 어드레스를 지정하는 프로그램 어드레스 명령의, 연결부를 통한 메모리 모듈에서의, 수신에 기반하여 메모리 위치에 상응하는 어드레스를 저장하도록 구성된 레지스터 파일을 포함하는, 메모리 모듈.
  19. 제17항에 있어서,
    어드레스는 제1 어드레스이고;
    메모리 위치는 제1 메모리 위치이고;
    근거리-메모리 어드레스 생성 유닛은 복수의 메모리 위치 중 제2 메모리 위치에 상응하는 제2 어드레스를 저장할 수 있는 레지스터 파일을 포함하고;
    근거리-메모리 어드레스 생성 유닛은,
    제2 어드레스를 스트라이드만큼 증분하여 제1 어드레스를 계산하는 것,
    제2 어드레스를 스트라이드만큼 감량시켜, 제1 어드레스를 계산하는 것, 또는
    제2 어드레스를 스트라이드에 곱하여, 제1 어드레스를 계산하는 것 중 적어도 하나가 가능한 어드레스 계산 유닛을 포함하는, 메모리 모듈.
  20. 제19항에 있어서, 근거리-메모리 어드레스 생성 유닛은 연결부를 통해 메모리 모듈에 의해 수신된 명령에서 스트라이드를 수신하도록 구성되는, 메모리 모듈.
  21. 제17항에 있어서, 프로세서-인-메모리 실행 유닛을 추가로 포함하고; 근거리-메모리 어드레스 생성 유닛은 프로세서-인-메모리 실행 유닛에 의해 계산된 값에 기반하여 메모리 위치에 상응하는 어드레스를 생성하도록 구성된 어드레스 계산 유닛을 포함하는, 메모리 모듈.
  22. 제21항에 있어서, 프로세서-인-메모리 유닛은 복수의 메모리 위치 중 하나의 메모리 위치로부터 액세스된 오프셋 값을 베이스 어드레스에 가산함으로써 값을 계산하도록 구성된, 메모리 모듈.
  23. 제17항에 있어서, 메모리 위치는 제1 메모리 위치이고; 근거리-메모리 어드레스 생성 유닛은 복수의 메모리 위치 중 제2 메모리 위치로부터 수득된 값에 기반하여 제1 메모리 위치에 상응하는 어드레스를 생성하도록 구성된 어드레스 계산 유닛을 포함하는, 메모리 모듈.
  24. 제17항에 있어서, 근거리-메모리 어드레스 생성 유닛은 복수의 메모리 위치 중 하나의 메모리 위치로부터 액세스된 오프셋 값을 베이스 어드레스에 가산함으로써 값을 계산하는 어드레스 계산 유닛에 기반하여 메모리 위치에 상응하는 어드레스를 생성하도록 구성된 어드레스 계산 유닛을 포함하는, 메모리 모듈.
  25. 메모리 모듈로서,
    복수의 행 및 복수의 열을 갖는 메모리 구조물; 및
    근거리-메모리 어드레스 생성 유닛이되,
    행에 저장된 데이터에 액세스하기 위한 제1 메모리 액세스 명령의, 연결부를 통한 모듈에 의한, 수신에 기반하여 복수의 행 중 하나의 행에 상응하는 행 어드레스를 생성하고;
    행의 열에 저장된 데이터에 액세스하기 위한 제2 메모리 액세스 명령의, 연결부를 통한 모듈에 의한, 수신에 기반하여 복수의 열 중 하나의 열에 상응하는 열 어드레스를 생성하도록 구성된, 근거리-메모리 어드레스 생성 유닛을 포함하는, 메모리 모듈.
  26. 제25항에 있어서,
    제1 메모리 액세스 명령은 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트에 상응하는 2개 이상의 메모리 모듈의 세트의, 2개 이상의 행의 세트에 저장된 데이터에 액세스하기 위한 것이고;
    2개 이상의 행의 세트는 행을 포함하고;
    2개 이상의 메모리 모듈의 세트는 메모리 모듈을 포함하고;
    2개 이상의 근거리-메모리 생성된 행 어드레스의 세트는 행 어드레스를 포함하는, 메모리 모듈.
  27. 제26항에 있어서, 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 행 어드레스는 상이한 어드레스인, 메모리 모듈.
  28. 제26항에 있어서, 2개 이상의 근거리-메모리 생성된 행 어드레스의 세트 중 2개 이상의 근거리-메모리 생성된 행 어드레스는 동일한 어드레스인, 메모리 모듈.
  29. 제25항에 있어서, 근거리-어드레스 생성 유닛은 근거리-어드레스 생성 유닛의 행 어드레스 레지스터 파일로부터 행 어드레스를 생성하도록 구성되고; 근거리-어드레스 생성 유닛은 근거리-어드레스 생성 유닛의 열 어드레스 레지스터 파일로부터 열 어드레스를 생성하도록 구성되는, 메모리 모듈.
  30. 방법으로서,
    연결부를 통해, 불완전한 어드레스 정보를 갖는 메모리 액세스 명령을 전송하는 단계;
    연결부를 통해, 2개 이상의 메모리 모듈의 세트에서 메모리 액세스 명령를 수신하는 단계;
    2개 이상의 메모리 모듈의 세트의 2개 이상의 메모리 위치의 세트에 상응하는 2개 이상의 메모리 모듈의 세트에서 2개 이상의 어드레스의 세트를 생성하는 단계; 및
    2개 이상의 메모리 위치의 세트에 저장된 데이터에 액세스하는 단계를 포함하는, 방법.
  31. 제30항에 있어서,
    연결부를 통해, 2개 이상의 메모리 모듈의 세트에 2개 이상의 프로그램 어드레스 명령의 세트를 전송하는 단계를 더 포함하고,
    2개 이상의 프로그램 어드레스 명령의 세트 중 하나의 프로그램 어드레스 명령은 연결부를 통해 2개 이상의 메모리 모듈의 세트의 하나의 각자의 메모리 모듈에 전송되고;
    2개 이상의 프로그램 어드레스 명령의 세트는 2개 이상의 상이한 어드레스의 세트를 지정하고;
    2개 이상의 메모리 모듈의 세트에서 2개 이상의 어드레스의 세트를 생성하는 것은 2개 이상의 상이한 어드레스의 세트에 기반하는, 방법.
KR1020227044536A 2020-05-29 2021-03-03 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령 KR20230017802A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/887,713 US11216373B2 (en) 2020-05-29 2020-05-29 Memory access commands with near-memory address generation
US16/887,713 2020-05-29
PCT/US2021/020566 WO2021242349A1 (en) 2020-05-29 2021-03-03 Memory access commands with near-memory address generation

Publications (1)

Publication Number Publication Date
KR20230017802A true KR20230017802A (ko) 2023-02-06

Family

ID=75223429

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227044536A KR20230017802A (ko) 2020-05-29 2021-03-03 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령

Country Status (6)

Country Link
US (1) US11216373B2 (ko)
EP (1) EP4158489A1 (ko)
JP (1) JP2023527324A (ko)
KR (1) KR20230017802A (ko)
CN (1) CN115698970A (ko)
WO (1) WO2021242349A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115469800A (zh) * 2021-06-10 2022-12-13 三星电子株式会社 数据处理系统以及用于访问异构存储器系统的方法
US20230195618A1 (en) * 2021-12-21 2023-06-22 Advanced Micro Devices, Inc. Approach for performing efficient memory operations using near-memory compute elements
US20230205706A1 (en) * 2021-12-23 2023-06-29 Advanced Micro Devices, Inc. Approach for managing near-memory processing commands and non-near-memory processing commands in a memory controller

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8001434B1 (en) 2008-04-14 2011-08-16 Netlist, Inc. Memory board with self-testing capability
JP5481823B2 (ja) 2008-10-08 2014-04-23 株式会社バッファロー メモリモジュール、および、メモリ用補助モジュール
US20160232088A1 (en) * 2014-07-17 2016-08-11 Sandisk Enterprise Ip Llc Garbage Collection in Storage System with Distributed Processors
US9836277B2 (en) 2014-10-01 2017-12-05 Samsung Electronics Co., Ltd. In-memory popcount support for real time analytics
US10262721B2 (en) 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
US10937473B2 (en) * 2018-08-08 2021-03-02 Micron Technology, Inc. Clock signal drivers for read and write memory operations
KR20200100951A (ko) * 2019-02-19 2020-08-27 에스케이하이닉스 주식회사 메모리 장치 및 이를 포함하는 데이터 처리 시스템
US10803949B2 (en) * 2019-03-07 2020-10-13 Spin Memory, Inc. Master slave level shift latch for word line decoder memory architecture
US11915124B2 (en) * 2019-09-05 2024-02-27 Micron Technology, Inc. Performing processing-in-memory operations related to spiking events, and related methods, systems and devices
US11347477B2 (en) 2019-09-27 2022-05-31 Intel Corporation Compute in/near memory (CIM) circuit architecture for unified matrix-matrix and matrix-vector computations

Also Published As

Publication number Publication date
JP2023527324A (ja) 2023-06-28
CN115698970A (zh) 2023-02-03
US11216373B2 (en) 2022-01-04
WO2021242349A1 (en) 2021-12-02
EP4158489A1 (en) 2023-04-05
US20210374055A1 (en) 2021-12-02

Similar Documents

Publication Publication Date Title
US10915249B2 (en) Apparatuses and methods for in-memory operations
US20220004497A1 (en) Apparatuses and methods for cache operations
Li et al. Pinatubo: A processing-in-memory architecture for bulk bitwise operations in emerging non-volatile memories
KR20230017802A (ko) 근거리-메모리 어드레스 생성을 갖는 메모리 액세스 명령
US11573903B2 (en) Memory devices and methods which may facilitate tensor memory access with memory maps based on memory operations
KR20200039930A (ko) 인-메모리 프리페칭을 수행하는 메모리 장치 및 이를 포함하는 시스템
JP2010532905A (ja) スレッドに最適化されたマルチプロセッサアーキテクチャ
US11410717B2 (en) Apparatuses and methods for in-memory operations
US20210286551A1 (en) Data access ordering for writing-to or reading-from memory devices
KR20210053017A (ko) 프로세싱 소자를 포함하는 메모리 장치 및 상기 메모리 장치를 포함하는 메모리 시스템
KR101732841B1 (ko) 내장된 ecc 어드레스 맵핑
US11392494B2 (en) Technologies for performant column read operations on clustered data in a dimm architecture
KR20220045480A (ko) 인-메모리 프로세싱을 수행하는 메모리 디바이스
KR20220127601A (ko) 인터페이스를 이용하여 내부 프로세싱을 수행하는 메모리 시스템, 메모리 장치 및 메모리 장치의 동작 방법
US10915451B2 (en) Bandwidth boosted stacked memory
US20200293452A1 (en) Memory device and method including circular instruction memory queue
EP3716076B1 (en) Technologies for providing high efficiency compute architecture on cross point memory for artificial intelligence operations
US20220374348A1 (en) Hardware Acceleration
US12001699B2 (en) Memory device performing configurable mode setting and method of operating the same
US11561711B2 (en) Memory device performing configurable mode setting and method of operating the same
US11726909B2 (en) Two-way interleaving in a three-rank environment
US10901734B2 (en) Memory mapping using commands to transfer data and/or perform logic operations
US20200272585A1 (en) Memory controller and memory system including the memory controller
KR20210156058A (ko) 인-메모리 프로세싱을 수행하는 메모리 디바이스
CN114282160A (zh) 一种数据处理装置、集成电路芯片、设备及其实现的方法

Legal Events

Date Code Title Description
A201 Request for examination