KR20220116566A - 확장 메모리 통신 - Google Patents

확장 메모리 통신 Download PDF

Info

Publication number
KR20220116566A
KR20220116566A KR1020227027010A KR20227027010A KR20220116566A KR 20220116566 A KR20220116566 A KR 20220116566A KR 1020227027010 A KR1020227027010 A KR 1020227027010A KR 20227027010 A KR20227027010 A KR 20227027010A KR 20220116566 A KR20220116566 A KR 20220116566A
Authority
KR
South Korea
Prior art keywords
memory
data
computing device
operations
additional
Prior art date
Application number
KR1020227027010A
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 KR20220116566A publication Critical patent/KR20220116566A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • 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
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0023Address circuits or decoders
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/004Reading or sensing circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0069Writing or programming circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2213/00Indexing scheme relating to G11C13/00 for features not covered by this group
    • G11C2213/70Resistive array aspects
    • G11C2213/71Three dimensional array
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Human Computer Interaction (AREA)
  • Advance Control (AREA)

Abstract

확장 메모리 연산들을 수행하기 위한 확장 메모리 통신 서브 시스템들에 관한 시스템들, 장치들, 및 방법들이 설명된다. 예시적인 방법은 호스트 디바이스와 비휘발성 메모리 디바이스 사이에 결합된 처리 유닛에서, 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 수행될 복수의 연산들을 나타내는 시그널링을 수신하는 단계를 포함할 수 있다. 본 방법은 처리 유닛에서, 시그널링에 응답하여 복수의 연산들 중 적어도 하나의 연산을 수행하는 단계를 더 포함할 수 있다. 본 방법은 비휘발성 메모리 디바이스 내의 메모리 어레이의 일 부분에 액세스하는 단계를 더 포함할 수 있다. 본 방법은 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 복수의 연산들 중 하나 이상의 추가적인 연산을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 송신하는 단계를 더 포함할 수 있다.

Description

확장 메모리 통신
본 개시는 일반적으로 반도체 메모리 및 방법들, 그리고 더 구체적으로는, 확장 메모리 통신을 위한 장치들, 시스템들, 및 방법들에 관한 것이다.
메모리 디바이스들은 통상적으로 컴퓨터들 또는 다른 전자 시스템들 내에 내부 반도체, 집적 회로부로서 제공된다. 많은 상이한 타입들의 메모리들은 휘발성 및 비휘발성 메모리를 포함한다. 휘발성 메모리는 자신의 데이터(예를 들어, 호스트 데이터, 에러 데이터 등)를 유지하는 데 전력을 필요로 할 수 있고, 다른 것들 중에서도, 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 동기식 동적 랜덤 액세스 메모리(SDRAM), 및 사이리스터 랜덤 액세스 메모리(TRAM)를 포함한다. 비휘발성 메모리는 전력이 공급되지 않을 때 저장된 데이터를 유지함으로써 영구 데이터를 제공할 수 있고, 특히, NAND 플래시 메모리, NOR 플래시 메모리, 가변 메모리, 이를테면 상 변화 랜덤 액세스 메모리(PCRAM), 저항 랜덤 액세스 메모리(RRAM), 및 자기 랜덤 액세스 메모리(MRAM), 이를테면 회전 토크 전달 랜덤 액세스 메모리(STT RAM)를 포함할 수 있다.
메모리 디바이스들은 컴퓨터 또는 전자 시스템이 동작하는 동안 호스트에 의해 사용하기 위한 데이터, 커맨드들, 및/또는 명령어들을 저장하기 위해 호스트(예를 들어, 호스트 컴퓨팅 디바이스)에 결합될 수 있다. 예를 들어, 컴퓨팅 또는 다른 전자 시스템의 동작 동안 데이터, 커맨드들, 및/또는 명령어들이 호스트와 메모리 디바이스(들) 사이에서 전달될 수 있다.
도 1은 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 시스템들, 제2 복수의 통신 시스템들을 포함하는 장치, 및 복수의 메모리 디바이스들을 포함하는 컴퓨팅 시스템 형태의 기능 블록도이다.
도 2는 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 시스템들, 제2 복수의 통신 시스템들을 포함하는 장치, 및 복수의 메모리 디바이스들을 포함하는 컴퓨팅 시스템 형태의 또 다른 기능 블록도이다.
도 3은 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 시스템들, 제2 복수의 통신 시스템들을 포함하는 장치, 및 복수의 메모리 디바이스들을 포함하는 컴퓨팅 시스템 형태의 또 다른 기능 블록도이다.
도 4는 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 시스템들, 제2 복수의 통신 시스템들을 포함하는 장치, 및 복수의 메모리 디바이스들을 포함하는 컴퓨팅 시스템 형태의 또 다른 기능 블록도이다.
도 5는 본 개시의 다수의 실시예들에 따른 다수의 포트들을 포함하는 컴퓨팅 코어의 장치 형태의 기능 블록도이다.
도 6은 본 개시의 다수의 실시예들에 따른 확장 메모리 통신에 대응하는 예시적인 방법을 나타내는 흐름도이다.
확장 메모리 연산들을 수행하기 위한 확장 메모리 통신 서브 시스템들에 관한 시스템들, 장치들, 및 방법들이 설명된다. 예시적인 방법은 호스트 디바이스와 비휘발성 메모리 디바이스 사이에 결합된 처리 유닛에서, 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 수행될 복수의 연산들을 나타내는 시그널링을 수신하는 단계를 포함할 수 있다. 본 방법은 처리 유닛에서, 시그널링에 응답하여 복수의 연산들 중 적어도 하나의 연산을 수행하는 단계를 더 포함할 수 있다. 본 방법은 비휘발성 메모리 디바이스 내의 메모리 어레이의 일 부분에 액세스하는 단계를 더 포함할 수 있다. 본 방법은 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 복수의 연산들 중 하나 이상의 추가적인 연산을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 송신하는 단계를 더 포함할 수 있다.
확장 메모리 통신은 확장 메모리를 거쳐 신호들 및/또는 커맨드들을 제공하는 것을 포함할 수 있다. 확장 메모리 인터페이스는 단일 어드레스 및 피연산자에 의해 특정되는 연산들을 수행하기 위한 명령어들을 전달할 수 있고, 프로세싱 유닛 및 메모리 자원을 포함하는 컴퓨팅 디바이스에 의해 수행될 수 있다. 컴퓨팅 디바이스는 개재 커맨드들의 수신 없이 컴퓨팅 디바이스를 통해 스트리밍되는 데이터에 대해 확장 메모리 연산들을 수행할 수 있다. 확장 메모리 연산들은 데이터가 순서화, 재순서화, 제거, 또는 폐기되는 연산, 콤마 분리 값 파싱 연산, 또는 양자를 포함할 수 있다. 일례에서, 컴퓨팅 디바이스는 컴퓨팅 디바이스의 프로세싱 유닛으로 데이터에 대해 연산을 수행하는 것을 포함하는 연산을 수행하기 위한 커맨드를 수신하고, 연산에 대응하는 피연산자가 메모리 자원에 저장되어 있다고 결정하도록 구성된다. 컴퓨팅 디바이스는 또한 메모리 자원에 저장된 피연산자를 사용하여 연산을 수행할 수 있다.
컴퓨팅 디바이스는 연산을 수행하기 위한 명령어들 및/또는 커맨드들을 다수의 하드웨어 가속기들에 발신함으로써 하드웨어 가속을 수행할 수 있다. 일부 예들에서, 연산의 일 부분은 제1 하드웨어 가속기에 발신될 수 있고, 연산의 제2 부분은 제2 하드웨어 가속기에 발신될 수 있다. 일부 예들에서, 연산은 완료를 위해 하드웨어 가속기로 발신될 수 있고, 하드웨어 가속기는 연산의 일 부분을 완료하기 위해 연산의 일 부분을 추가적인 하드웨어 가속기에 발신할 수 있다. 이러한 방식으로, 하나 초과의 하드웨어 가속기로부터의 결과들이 결과들을 조합하기 위한 컴퓨팅 디바이스에 발신될 수 있거나, 또는 일차 하드웨어 가속기는 결과들을 조합하고 완료된 결과를 컴퓨팅 디바이스에 발신할 수 있다.
하드웨어 가속은 컴퓨팅 시스템의 중앙 처리 유닛(CPU)을 사용하여 작업 및/또는 기능을 수행하는 것에 비해 더 효율적인(예를 들어, 더 빠른, 더 정확한, 더 높은 품질 등) 방식으로 컴퓨팅 시스템에서 특정 작업들 및 또는 기능들을 수행하도록 구현될 수 있다. 예를 들어, 그렇지 않으면 컴퓨팅 시스템의 CPU를 사용하여 수행될 수 있는 특정 작업 및/또는 기능을 수행하도록 구성되는 전용 하드웨어(예를 들어, 하드웨어 가속기 또는 하드웨어 가속 유닛)를 제공함으로써, 특정 작업들 및/또는 기능들은 CPU가 이러한 작업들 및/또는 기능들의 수행을 담당하는 접근법들에서보다 더 효율적인 방식으로 처리될 수 있다. 이는 또한, 그렇지 않으면 CPU에 의해 소비될 수 있는 처리 자원들이 해제될 수 있게 하며, 이에 의해 또한, 컴퓨팅 시스템의 성능을 개선할 수 있다.
하드웨어 가속기들의 일부 예들은 특히, 사운드 처리 유닛들(예를 들어, 사운드 카드들), 그래픽 처리 유닛들(GPU들 또는 "그래픽 카드들"), 디지털 신호 처리 유닛들, 아날로그 신호 처리 유닛들, 컴퓨터 네트워킹 처리 유닛들(예를 들어, 칩 상의 네트워크들, TCP 오프로드 엔진들, I/O 가속 처리 유닛들 등), 암호화 처리 유닛들(예를 들어, 하드웨어 기반 암호화 및/또는 복호화를 제공할 수 있는 암호화 가속기 유닛들), 인공 지능 처리 유닛들(예를 들어, 비전 처리 유닛들, 신경망 처리 유닛들 등), 텐서 처리 유닛들, 물리학 처리 유닛들, 정규 표현 처리 유닛들, 및/또는 데이터 압축 가속 유닛들을 포함한다. 하드웨어 가속기들은 특히, FPGA(field-programmable gate array), ASIC(application-specific integrated circuit), 및/또는 복합 프로그래머블 로직 디바이스, 시스템 온 칩의 형태로 컴퓨터 하드웨어로서 제공될 수 있다. 하드웨어 가속기들의 상기의 열거된 예들 및 컴퓨터 하드웨어의 구체적으로 열거된 예들은 제한적이지도 않고 철저하지도 않으며, 다른 하드웨어 가속기들 및/또는 컴퓨터 하드웨어가 본 개시의 범위 내에서 고려된다는 것이 이해될 것이다.
일부 접근법들에서, 하드웨어 가속기들은 컴퓨팅 시스템 내에 배치될 수 있는 다른 하드웨어 가속기들에 대한 가시성 없이 특정 작업 및/또는 기능을 수행하는 개별 구성요소들로서 컴퓨팅 시스템에 배치될 수 있다. 예를 들어, 일부 접근법들에서, 하드웨어 가속기는 컴퓨팅 시스템 내에 배치된 다른 하드웨어 가속기들에 대한 지식 없이 동작할 수 있다. 또한, 일부 접근법들에서, 하드웨어 가속기들은 제한된 특정 작업 및/또는 기능 세트를 수행하기 위해 전용될 수 있다. 예를 들어, 사운드 처리 유닛은 컴퓨팅 시스템에 대한 청각 재생과 관련된 신호들에 대해 하드웨어 가속을 수행하기 위한 유일한 목적으로 컴퓨팅 시스템에 제공될 수 있다. 다른 예로서, GPU는 컴퓨팅 시스템에 대한 시각적 디스플레이와 관련된 신호들에 대해 하드웨어 가속을 수행하기 위한 유일한 목적을 위해 컴퓨팅 시스템에 제공될 수 있다.
후술되는 바와 같이, 컴퓨팅 디바이스는 리눅스(Linux)와 같은 완전한 기능을 갖춘 운영 체제들을 지원할 수 있는 RISC-V 애플리케이션 프로세서 코어일 수 있다. 이러한 특정 코어는 사물 인터넷(internet-of-things, IoT) 노드들 및 게이트웨이들, 스토리지, 및/또는 네트워킹과 같은 애플리케이션들과 관련하여 사용될 수 있다. 코어는 메모리 포트, 시스템 포트, 주변 장치 포트, 및/또는 프런트 포트와 같은 다수의 포트들에 결합될 수 있다. 일례로서, 도 4와 관련하여 아래에서 더 설명될 바와 같이, 메모리 포트는 메모리 디바이스와 통신할 수 있고/거나, 시스템 포트는 온 칩 가속기와 통신할 수 있고/거나, 주변 장치 포트는 오프 칩 직렬 포트와 통신할 수 있고/거나, 프런트 포트는 호스트 인터페이스와 통신할 수 있다.
이러한 방식으로, 제1 통신 서브 시스템들은 데이터를 특정 포트(예를 들어, 컴퓨팅 디바이스의 메모리 포트)로부터 제1 통신 서브 시스템(예를 들어, 해당 특정 메모리 포트를 선택하는 멀티플렉서)을 통해 지향시키고, 이를 제2 통신 서브 시스템(예를 들어, AXI 인터커넥트 인터페이스와 같은 인터페이스)를 통해, 데이터를 메모리 디바이스(예를 들어, DDR 메모리, 3차원(3-D) 크로스 포인트 메모리, NAND 메모리 등)에 전달하는 메모리 제어기로 전달하기 위해 사용될 수 있다. 일례에서, AXI 인터커넥트 인터페이스들은 AXI4-Lite 제어 레지스터 인터페이스 서브 세트를 포함하여, ARM®으로부터의 AMBA® AXI 버전 4 규격들을 따를 수 있다.
본원에서 사용될 때, "확장 메모리 연산"은 단일 어드레스(예를 들어, 메모리 어드레스) 및 64 비트 피연산자와 같은 피연산자에 의해 특정될 수 있는 메모리 연산을 지칭한다. 피연산자는 복수의 비트들(예를 들어, 비트 스트링 또는 비트들의 스트링)로서 표현될 수 있다. 그러나, 실시예들은 64 비트 피연산자에 의해 특정되는 연산들에 제한되지 않고, 연산이 64 비트보다 더 크거나(예를 들어, 128 비트 등) 더 작은(예를 들어, 32 비트) 피연산자에 의해 특정될 수 있다. 본원에서 설명될 때, 확장 메모리 연산들을 수행하기 위해 액세스 가능한 유효 어드레스 공간은 호스트 컴퓨팅 시스템 또는 스토리지 제어기가 액세스 가능한 메모리 디바이스 또는 파일 시스템의 크기이다.
확장 메모리 연산들은 프로세싱 디바이스에 의해(예를 들어, 코어(110, 210, 310, 410), 또는 특히 도 5에 510으로서 도시된 코어 컴퓨팅 디바이스와 같은 프로세싱 디바이스에 의해) 수행될 수 있는 명령어들 및/또는 연산들을 포함할 수 있다. 코어의 예들은 다양한 컴퓨팅 태스크들을 수행하기 위한 명령어들을 실행할 수 있는 축소 명령어 세트 컴퓨팅 디바이스 또는 다른 하드웨어 프로세싱 디바이스를 포함할 수 있다. 일부 실시예들에서, 확장 메모리 연산을 수행하는 것은 컴퓨팅 디바이스의 메모리 자원에 저장된 데이터 및/또는 명령어들을 검색하는 것, 컴퓨팅 디바이스(110) 내에서 연산을 수행하는 것(예를 들어, 데이터 또는 명령어들을 컴퓨팅 디바이스 외부의 회로부에 전달하지 않고), 및 확장 메모리 연산의 결과를 컴퓨팅 디바이스(110)의 메모리 자원 또는 보조 스토리지에(예를 들어, 본원에서, 도 1에 도시된 메모리 디바이스(116-1, 116-2)와 같은 메모리 디바이스에) 저장하는 것을 포함할 수 있다. 메모리 디바이스에 또는 메모리 디바이스로부터 기록된 데이터에 대해 수행될 복수의 연산들을 나타내는 시그널링은 컴퓨팅 디바이스들(110), 가속기들(114) 등에 또는 이들로부터 발신될 수 있다.
확장 메모리 연산들의 비제한적인 예들은 부동 소수점 추가 누산, 32 비트 복소수 연산들, 제곱근 어드레스(SQRT(addr)) 연산들, 변환 연산들(예를 들어, 부동 소수점과 정수 포맷들 간의 변환, 및/또는 부동 소수점과 유니버설 수 포맷들, 이를테면 타입 I, 타입 II, 및/또는 타입 III 유니버설 수 포맷들, 포지트 포맷들 등 간의 변환), 고정 포맷으로의 데이터 정규화, 절대값 연산들 등을 포함할 수 있다. 일부 실시예들에서, 확장 메모리 연산들은 제자리에서 업데이트하는(예를 들어, 확장 메모리 연산의 수행에 사용되는 피연산자가 확장 메모리 연산을 수행하기 전에 저장된 어드레스에 확장 메모리 연산의 결과가 저장됨) 컴퓨팅 디바이스에 의해 수행되는 연산들뿐만 아니라, 이전에 저장된 데이터가 새로운 데이터를 결정하는 데 사용되는 연산들(예를 들어, 피연산자가 저장되었던 특정 어드레스를 겹쳐 쓰는 새로운 데이터를 생성하는 데 특정 어드레스에 저장된 피연산자가 사용되는 연산)을 포함할 수 있다.
결과적으로, 일부 실시예들에서, 확장 메모리 연산들의 수행은 락(locking) 또는 뮤텍스(mutex) 연산들을 완화 또는 제거할 수 있는데, 이는 확장 메모리 연산(들)이 컴퓨팅 디바이스 내에서 수행될 수 있으며, 이것이 다수의 스레드 실행 사이의 경합을 감소시킬 수 있기 때문이다. 확장 메모리 연산들의 수행 동안 스레드들에 대한 락 또는 뮤텍스 연산들의 수행을 감소시키거나 제거하는 것은 컴퓨팅 시스템의 수행을 증가시킬 수 있는데, 이는 예를 들어, 확장 메모리 연산들이 동일한 컴퓨팅 디바이스 내에서 병렬로 또는 서로 통신하는 컴퓨팅 디바이스들 중 둘 이상에 걸쳐 수행될 수 있기 때문이다. 또한, 일부 실시예들에서, 본원에서 설명되는 확장 메모리 연산들은 확장 메모리 연산의 결과가 연산을 수행한 컴퓨팅 디바이스로부터 호스트로 전달될 때 락 또는 뮤텍스 연산들을 완화 또는 제거할 수 있다.
메모리 디바이스들은 컴퓨팅 디바이스에 중요하거나 중대한 데이터를 저장하는 데 사용될 수 있고, 적어도 하나의 확장 메모리 인터페이스를 통해, 컴퓨팅 디바이스와 연관된 호스트 사이에서 이러한 데이터를 전달할 수 있다. 그러나, 메모리 디바이스들에 의해 저장되는 데이터의 크기 및 양이 증가함에 따라, 호스트로 그리고 호스트로부터 데이터를 전달하는 것은 시간 소모적이고 자원 집약적이 될 수 있다. 예를 들어, 호스트가 대용량 데이터 블록들을 사용하는 메모리 연산들의 수행을 요청할 때, 요청을 이행하는 데 소비되는 시간량 및/또는 자원량은 데이터 블록들과 연관된 데이터의 크기 및/ 또는 양에 비례하여 증가할 수 있다.
메모리 디바이스들의 저장 능력이 증가함에 따라, 이러한 효과들은 더 현저해질 수 있는데, 이는 점점 더 많은 데이터가 메모리 디바이스에 의해 저장될 수 있고, 이에 따라 메모리 연산들에서의 사용에 이용 가능하기 때문이다. 또한, 데이터가 프로세싱될 수 있기 때문에(예를 들어, 메모리 연산들이 데이터에 대해 수행될 수 있기 때문에), 메모리 디바이스들에 저장될 수 있는 데이터량이 증가함에 따라, 프로세싱될 수 있는 데이터량도 또한 증가할 수 있다. 이는 프로세싱 시간을 증가시키고/거나 프로세싱 자원 소비를 증가시킬 수 있으며, 이는 특정 타입들의 메모리 연산들의 수행에 있어서 더 심해질 수 있다. 이들 및 다른 문제들을 완화하기 위해, 본원에서의 실시예들은 데이터를 컴퓨팅 디바이스로부터 메모리 디바이스로 그리고/또는 컴퓨팅 디바이스로부터 호스트로, 그리고 그 반대로 더 효율적으로 전달하기 위해 메모리 디바이스, 하나 이상의 컴퓨팅 디바이스, 및/또는 메모리 어레이(들) 및 제1 복수의 통신 서브 시스템들(예를 들어, 멀티플렉서들) 및 제2 복수의 서브 시스템들(예를 들어, AXI 인터커넥트들과 같은 인터페이스들)을 사용하여 확장 메모리 연산들이 수행될 수 있게 할 수 있다.
일부 접근법들에서, 메모리 연산들을 수행하는 것은 메모리 디바이스 및/또는 메모리 어레이와 같은 컴퓨팅 시스템의 메모리에 대한 다수의 클록 사이클들 및/ 또는 다수의 함수 호출들을 필요로 할 수 있다. 대조적으로, 본원에서의 실시예들은 메모리 연산이 단일 함수 호출 또는 커맨드로 수행되는 확장 메모리 연산들의 수행을 가능하게 할 수 있다. 예를 들어, 연산될 데이터를 로딩하는 데 적어도 하나의 커맨드 및/또는 함수 호출이 이용되고, 그 다음 연산된 데이터를 저장하는 데 적어도 하나의 후속 함수 호출 또는 커맨드가 이용되는 접근법들과는 대조적으로, 본원에서의 실시예들은 다른 접근법들과 비교하여 더 적은 함수 호출들 또는 커맨드들을 사용하는 메모리 연산들의 수행을 가능하게 할 수 있다. 나아가, 컴퓨팅 시스템의 컴퓨팅 디바이스들은 제1 통신 서브 시스템(예를 들어, 멀티플렉서, 제어 네트워크 온 칩 등) 및/또는 제2 통신 서브 시스템(예를 들면, 인터페이스, AXI 인터커넥트와 같은 인터커넥트 등)을 통해 메모리 연산들을 수행하기 위한 요청들을 수신할 수 있고, 요청된 메모리 연산들을 실행하기 위한 데이터 블록들을 메모리 디바이스로부터 제1 통신 서브 시스템 및 제2 통신 서브 시스템을 통해 수신할 수 있다. 제1 및 제2 통신 서브 시스템은 직렬인 것으로 설명되지만, 실시예들은 이에 제한되지 않는다. 일례로서, 데이터에 대한 요청들 및/또는 데이터 블록들의 수신은 단지 제2 통신 서브 시스템만을 통할 수 있다.
메모리 연산들의 수행에 이용되는 함수 호출들 및/또는 커맨드들의 수를 감소시킴으로써, 이러한 연산들을 수행하는 데 소비되는 시간량 및/또는 이러한 연산들의 수행에 소비되는 컴퓨팅 자원량은 메모리 연산들의 수행에 다수의 함수 호출들 및/혹은 커맨드들이 요구되는 접근법들과 비교하여 감소될 수 있다. 나아가, 본원에서의 실시예들은 메모리 디바이스 및/또는 메모리 어레이 내의 데이터의 이동을 감소시킬 수 있는데, 이는 데이터가 메모리 연산들의 수행 이전에 특정 위치로 로딩될 필요가 없을 수 있기 때문이다. 이는 특히 많은 데이터량이 메모리 연산의 대상이 되는 시나리오들에서 일부 접근법들에 비해 프로세싱 시간을 감소시킬 수 있다.
나아가, 본원에서 설명된 확장 메모리 연산들은 일부 접근법들에 비해 타입 필드 세트를 훨씬 더 크게 할 수 있다. 예를 들어, 메모리 디바이스(예를 들어, 메모리 서브 시스템)에서의 데이터를 사용하는 연산의 수행을 요청하기 위해 호스트에 의해 실행되는 명령어는 타입, 어드레스, 및 데이터 필드를 포함할 수 있다. 명령어는 제1 통신 서브 시스템(예를 들어, 멀티플렉서) 및 제2 통신 서브 시스템(예를 들어, 인터페이스) 중 적어도 하나를 통해 복수의 컴퓨팅 디바이스들 중 적어도 하나로 발송될 수 있고, 데이터는 메모리 디바이스로부터 제1 및/또는 제2 통신 서브 시스템을 통해 전달될 수 있다. 타입 필드는 요청되는 특정 연산에 대응할 수 있고, 어드레스는 연산의 수행에 사용될 데이터가 저장되는 어드레스에 대응할 수 있으며, 데이터 필드는 연산을 수행하는 데 사용될 데이터(예를 들어, 피연산자)에 대응할 수 있다. 일부 접근법들에서, 타입 필드들은 상이한 크기의 판독 및/또는 기록뿐만 아니라, 일부 간단한 정수 누적 연산들로 제한될 수 있다. 대조적으로, 본원에서의 실시예들은 더 넓은 스펙트럼의 타입 필드들이 이용될 수 있게 할 수 있는데, 이는 확장 메모리 연산들을 수행할 때 사용될 수 있는 유효 어드레스 공간이 메모리 디바이스의 크기에 대응할 수 있기 때문이다. 본원에서의 실시예들은 연산들을 수행하는 데 이용가능한 어드레스 공간을 확장함으로써, 더 넓은 범위의 타입 필드들을 허용할 수 있고, 이에 따라 메모리 디바이스의 크기인 유효 어드레스 공간을 허용하지 않는 접근법들에서보다 더 넓은 스펙트럼의 메모리 연산들이 수행될 수 있다.
본 개시에 대한 다음의 상세한 설명에서, 본원의 일부를 형성하고, 본 개시의 하나 이상의 실시예가 어떻게 실시될 수 있는지 예로서 도시되는 첨부 도면들이 참조된다. 이러한 실시예들은 당업자들이 본 개시의 실시예들을 실시할 수 있게 하기에 충분히 상세하게 설명되고, 다른 실시예들이 이용될 수 있는 것으로 그리고 본 개시의 범위로부터 벗어나지 않고 프로세스, 전기적, 및 구조적 변경들이 이루어질 수 있는 것으로 이해되어야 한다.
본원에서 사용될 때, 특히 도면들에서의 참조 부호들에 대한 "X," "Y," "N," "M," "A," "B," "C," "D" 등과 같은 지정자들은 그렇게 지정된 다수의 특정 피처들이 포함될 수 있다는 것을 나타낸다. 또한, 본원에서 사용되는 용어는 특정 실시예들을 단지 설명하기 위한 것이고, 제한하려는 것이 아닌 것으로 이해되어야 한다. 본원에서 사용될 때, 단수형 표현들은 문맥상 명확히 다르게 지시하지 않는 한, 단수 및 복수 대상들 양자를 포함할 수 있다. 또한, "다수의", "적어도 하나의", 및 "하나 이상의"(예를 들어, 다수의 메모리 뱅크들)는 하나 이상의 메모리 뱅크를 지칭할 수있는 반면, "복수의"는 이러한 것들이 하나보다 많은 것을 지칭하려는 것이다. 더 나아가, "할 수 있다" 및 "할 수도 있다"라는 단어들은 본 출원 전반에 걸쳐 필수적 의미(즉, 해야하는)가 아니라, 허용적 의미(즉, ~할 가능성이 있는, ~를 할 수 있는)로 사용된다. "포함한다"라는 용어, 및 이의 파생어들은 "포함하지만, 이에 제한되지는 않는"을 의미한다. "결합된(coupled)" 및 "결합하는(coupling)"이라는 용어들은 문맥상 적절하게, 커맨드들 및/또는 데이터에의 액세스 및 이들의 이동(송신)을 위해 또는 물리적으로 직접적으로 또는 간접적으로 연결됨을 의미한다. "데이터" 및 "데이터 값들"이라는 용어들은 문맥상 적절하게, 본원에서 서로 바꿔 사용될 수 있고 동일한 의미를 가질 수 있다.
본원에서의 도면들은 첫 번째 숫자 또는 숫자들이 도면 번호에 대응하고 나머지 숫자들이 도면에서의 요소 또는 컴포넌트를 식별하는 넘버링 규칙을 따른다. 상이한 도면들 간의 유사한 요소들 또는 컴포넌트들은 유사한 숫자들의 사용에 의해 식별될 수 있다. 예를 들어, 104는 도 1에서의 요소 "04"을 참조할 수 있고, 유사한 요소는 도 2에서 204로서 참조될 수 있다. 복수의 유사한 요소들 또는 컴포넌트들 또는 유사한 요소들 또는 컴포넌트들의 그룹은 본원에서 단일 요소 번호로 총칭될 수 있다. 예를 들어, 복수의 기준 요소들(110-1, 110-2, 110-3, 110-4, 110-5)은 110으로서 총칭될 수 있다. 이해될 바와 같이, 본원에서의 다양한 실시예들에서 제시되는 요소들은 본 개시의 다수의 추가적인 실시예들을 제공하기 위해 추가, 교환, 및/또는 제거될 수 있다. 또한, 도면들에서 제공되는 요소들의 비율 및 상대적인 축척은 본 개시의 특정 실시예들을 예시하려는 것이고, 제한적인 의미로 취해져서는 안 된다.
도 1은 본 개시의 다수의 실시예들에 따른 복수의 통신 디바이스들(110), 제1 복수의 통신 시스템들(108), 제2 복수의 통신 시스템들(106), 복수의 하드웨어 가속도기들(114)을 포함하는 장치(104), 및 복수의 메모리 디바이스들(116)을 포함하는 컴퓨팅 시스템(100) 형태의 기능 블록도이다. 본원에서 사용될 때, "장치"는 예를 들어, 회로 또는 회로부, 다이 또는 다이들, 모듈 또는 모듈들, 디바이스 또는 디바이스들, 또는 시스템 또는 시스템들과 같은 다양한 구조체들 또는 구조체들의 조합들 중 임의의 것을 지칭할 수 있지만, 이에 제한되지는 않는다. 도 1에 도시된 실시예에서, 메모리 디바이스들(116-1, ..., 116-N)은 하나 이상의 메모리 모듈(예를 들어, 더블 데이터 레이트(DDR) 메모리, 3차원(3D) 크로스 포인트 메모리, NAND 메모리, 단일 인 라인 메모리 모듈들, 이중 인 라인 메모리 모듈들 등)을 포함할 수 있다. 메모리 디바이스들(116-1, ..., 116-N)은 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있다. 다수의 실시예에서, 메모리 디바이스들(116-1, ..., 116-N)은 멀티-칩 소자를 포함할 수 있다. 멀티 칩 디바이스는 다수의 상이한 메모리 타입들 및/또는 메모리 모듈들을 포함할 수 있다. 예를 들어, 메모리 시스템은 임의의 타입의 모듈 상에 비휘발성 또는 휘발성 메모리를 포함할 수 있다.
메모리 디바이스들(116-1, ..., 116-N)은 메모리 시스템(100)을 위한 메인 메모리를 제공할 수 있거나 메모리 시스템(100) 전반에 걸친 추가 메모리 또는 저장소로서 사용될 수 있다. 각 메모리 디바이스(116-1, ..., 116-N)은 메모리 셀들, 예를 들어, 휘발성 및/또는 비휘발성 메모리 셀들의 하나 이상의 어레이를 포함할 수 있다. 어레이들은 예를 들어, NAND 아키텍처를 갖는 플래시 어레이들일 수 있다. 실시예들은 메모리 디바이스의 특정 타입으로 제한되지 않는다. 예를 들어, 메모리 디바이스는 특히, RAM, ROM, DRAM, SDRAM, PCRAM, RRAM 및 플래시 메모리를 포함할 수 있다.
메모리 디바이스들(116-1, ..., 116-N)이 비휘발성 메모리를 포함하는 실시예들에서, 메모리 디바이스들(116-1, ..., 116-N)은 NAND 또는 NOR 플래시 메모리 디바이스들과 같은 플래시 메모리 디바이스들일 수 있다. 그러나, 실시예들은 이에 제한되지 않으, 메모리 디바이스들(116-1, ..., 116-N)은 비휘발성 랜덤 액세스 메모리 디바이스들(예를 들어, NVRAM, ReRAM, FeRAM, MRAM, PCM)과 같은 다른 비휘발성 메모리 디바이스들, 3-D 크로스 포인트(3D XP) 메모리 디바이스들과 같은 "최근 만들어진" 메모리 디바이스들 등, 또는 이들의 조합들을 포함할 수 있다. 비휘발성 메모리의 3D XP 어레이는 적층 가능한 크로스 그리드 데이터 액세스 어레이와 함께, 벌크 저항의 변화에 기초하여 비트 저장을 수행할 수 있다. 또한, 3D XP 비휘발성 메모리는 많은 플래시 기반 메모리들과 달리, 제자리 기록(write in-place) 연산을 수행할 수 있으며, 이때 비휘발성 메모리 셀은 비휘발성 메모리 셀이 이전에 소거되지 않고도 프로그래밍될 수 있다.
도 1에 도시된 바와 같이, 복수의 컴퓨팅 디바이스들(110-1, 110-2, 110-3, 110-4, 110-5)(이하, 총괄하여 복수의 컴퓨팅 디바이스들(110)이라고 함)은 SRAM(109)에 결합될 수 있다. 복수의 컴퓨팅 디바이스들(110)은 버스 매트릭스를 통해 SRAM(109)에 결합될 수 있다. 나아가, 복수의 컴퓨팅 디바이스들(110)은 제1 복수의 통신 서브 시스템들(예를 들어, 멀티플렉서들)(108-1, 108-2)에 결합될 수 있다. 제1 복수의 통신 서브 시스템들(108)은 본원에서 설명된 연산들의 수행 동안 컴퓨팅 디바이스들(110)에 자원들을 할당 및 할당 해제하도록 구성된 회로부 및/또는 로직을 포함할 수 있다. 예를 들어, 회로부 및/또는 논리는 본원에서 설명되는 확장 메모리 연산들의 수행 동안 컴퓨팅 디바이스들(110)에 자원들을 할당 및/또는 할당 해제할 수 있다.
복수의 컴퓨팅 디바이스들(110)은 SRAM(109)을 통해 제1 복수의 통신 서브 시스템들(108) 중 제1 통신 서브 시스템(108-1)에 결합될 수 있다. 복수의 컴퓨팅 디바이스들(110)은 도 1에 화살표들로 도시된 바와 같이, 제1 복수의 통신 서브 시스템들 중 제1 통신 서브 시스템(1081-1) 및/또는 제1 복수의 통신 서브 시스템들(108) 중 제2 통신 서브 시스템(108-2)에 직접 결합될 수 있다. 이러한 방식으로, 제1 복수의 통신 서브 시스템들 각각은 데이터를 전달하기 위한 특정 컴퓨팅 디바이스(110)를 선택할 수 있고, 그 반대도 마찬가지이며, 컴퓨팅 디바이스들(110) 각각은 데이터를 제1 복수의 통신 서브 시스템들(108)을 통해 전달할 수 있다.
제1 복수의 통신 서브 시스템들(108-1)은 제2 복수의 통신 서브 시스템들(예를 들어, 인터커넥트 인터페이스와 같은 인터페이스들)(106-1, 106-2, 106-3, 106-4, 106-5)(이하, 총괄하여 제2 복수의 통신 서브 시스템들(106)이라고 함)에 결합될 수 있다. 제2 복수의 통신 서브 시스템들(106) 각각은 제어기(112), 가속기(114), 및 호스트 인터페이스(120) 중 대응하는 것에 결합될 수 있다. 일 예에서, 제2 복수의 통신 스바이스템들(106)은 다수의 AXI 버스들을 통해 대응하는 제어기(112), 가속기들(114), 및/또는 호스트 인터페이스(120)에 결합될 수 있다.
도시된 바와 같이, 제2 복수의 통신 서브 시스템들(106) 중 제1 통신 서브 시스템(106-1)은 제어기(예를 들어, 메모리 제어기)(112)에 결합될 수 있다. 제어기(112)는 다수의 채널들(107-1, ..., 107-N)을 통해 다수의 메모리 디바이스들(116-1, ..., 116-N)에 결합될 수 있다. 제2 복수의 통신 서브 시스템들(106) 중 제2 통신 서브 시스템(106-2), 제3 통신 서브 시스템(106-3), 및 제4 통신 서브 시스템(106-4)은 각각 복수의 하드웨어 가속도기들(114-1, 114-2, 114-3) 중 대응하는 것에 결합될 수 있다. 통신 서브 시스템(108-1)은 각자의 버퍼들(119-1, 119-2, 119-3)을 통해 제2 복수의 통신 서브 시스템들(106-2, 106-3, 106-4)에 결합될 수있다. 제2 복수의 통신 서브 시스템들(106-2, 106-3, 106-4)은 각자의 버퍼들(117-1, 117-2, 117-3)을 통해 복수의 하드웨어 가속기들(114)에 결합될 수 있다. 하드웨어 가속도기들(114)은 FPGA 상에서의 다수의 포지트 연산들을 수행하는 데, 그리고/또는 내부 SRAM과의 통신에 사용될 수 있다.
포지트 연산(posit operation)은 유니버설 수("unum") 포맷의 비트 스트링들을 피연산자들로서 그리고/또는 입력들로서 사용하여 수행되는 연산을 지칭할 수 있다. 본원에서 사용될 때, 유니버설 수 포맷의 비트 스트링들은 IEEE 부동 소수점 비트 스트링 표준에 대한 대안을 제공할 수 있다. 몇몇 유니버설 수 포맷들(예를 들어, 타입 I 유니버설 수들, 타입 II 유니버설 수들, 및 타입 III 유니버설 수들)이 존재한다. 타입 III unum 포맷은 본원에서 "포지트 포맷"으로서, 또는 간략함을 위해, "포지트"로서 지칭된다. 부동 소수점 비트 스트링들과는 대조적으로, 포지트들은 특정 조건들 하에서, 동일한 비트 폭을 갖는 부동 소수점 수들보다 더 높은 정밀도(예를 들어, 더 넓은 동적 범위, 더 높은 해상도, 및/또는 더 높은 정확도)를 가능하게 할 수 있다. 이는 컴퓨팅 시스템에 의해 수행되는 연산들이 부동 소수점 수들을 이용하는 것보다 위치들을 사용할 때 더 높은 레이트(예를 들어, 더 빠른)로 수행될 수 있게 할 수 있으며, 이는 차례로, 예를 들어, 이러한 연산들을 수행하는 데 사용되는 클록 사이클들의 수를 감소시킴으로써 컴퓨팅 시스템의 성능을 개선할 수 있으며, 이에 의해 이러한 연산들을 수행하는 데 소비되는 처리 시간 및/또는 전력을 감소시킬 수 있다. 또한, 컴퓨팅 시스템들에서의 포지트들의 사용은 부동 소수점 수들보다 계산들에서 더 높은 정확도 및/또는 정밀도를 가능하게 할 수 있으며, 이는 또한, 일부 접근법들(예를 들어, 부동 소수점 포맷 비트 스트링들에 의존하는 접근법들)에 비해 컴퓨팅 시스템의 기능을 개선할 수 있다.
포지트들은 총 비트량 및/또는 포지트를 포함한 정수 집합량 또는 비트 집합량에 기초하여 정밀도 및 정확도가 매우 가변적일 수 있다. 또한, 포지트들은 넓은 동적 범위를 생성할 수 있다. 포지트의 정확도, 정밀도, 및/또는 동적 범위는 본원에서 더 상세히 설명되는 바와 같이, 특정 조건들 하에서 부동 또는 다른 수치 포맷들의 것보다 더 클 수 있다. 포지트의 가변 정확도, 정밀도, 및/또는 동적 범위는 예를 들어, 포지트가 사용될 애플리케이션에 기초하여 조작될 수 있다. 또한, 포지트들은 부동들 및 다른 수치 포맷들과 연관된 오버플로우, 언더플로우, NaN, 및/또는 다른 코너 케이스들을 감소시키거나 제거할 수 있다. 또한, 포지트들의 사용은 수치 값(예를 들어, 수)이 부동들 또는 다른 수치 포맷들에 비해 더 적은 비트들을 사용하여 표현될 수 있게 할 수 있다.
컴퓨팅 디바이스(110)는 포지트 연산 및/또는 추가적인 연산들을 수행하기 위한 커맨드를 발신할 수 있다. 컴퓨팅 디바이스(100)는 포지트 연산을 하드웨어 가속기(114)에 각각 발신될 서브 연산들의 부분들로 분할할 수 있다. 예를 들어, 제1 컴퓨팅 디바이스(110-1)는 포지트 연산을 두 개의 서브 연산들로 분할할 수 있고, 두 개의 서브 연산들 중 제1 서브 연산은 제1 하드웨어 가속기(114-1)에 발신될 수 있고 두 개의 서브 연산들 중 제2 서브 연산은 제2 하드웨어 가속기(114-2)에 발신될 수 있다. 제1 및 제2 서브 연산의 결과들은 제1 컴퓨팅 디바이스(110-1)에 발신될 수 있고, 제1 컴퓨터 디바이스(110-1)는 결과들을 포지트 연산의 단일 결과로 조합할 수 있다.
일 예에서, 컴퓨팅 디바이스(110)는 포지트 연산을 제1 하드웨어 가속기(114-1)에 발신할 수 있고, 제1 하드웨어 가속기(114-1)는 포지트 연산의 일 부분을 제2 하드웨어 가속기(114-2)에 발신할 수 있다. 제2 하드웨어 가속기(114-2)로부터 포지트 연산의 부분의 결과를 수신 시, 제1 하드웨어 가속기 (114-1)는 포지트 연산의 부분로부터의 결과를 포함하여, 포지트 연산을 위한 결과를 생성할 수 있다. 마찬가지로, 포지트 연산의 임의의 수의 분할이 컴퓨팅 디바이스(110)로부터 포지트 연산을 수행하기 위한 특정 수의 대응하는 하드웨어 가속기(114)로 발신될 수 있고, 결과들이 포지트 연산의 최종 결과에 대해 조합될 수 있다. 마찬가지로, 다수의 컴퓨팅 디바이스들(110)은 포지트 연산을 세분하고, 상이한 부분들을 세분된 포지트 연산들을 수행하기 위한 상이한 하드웨어 가속기들(114)에 발신할 수 있다. 예로서, 포지트 연산은 컴퓨팅 디바이스들(110)에 의해 세분될 수 있고, 세분된 포지트 연산들은 각 대응하는 컴퓨팅 디바이스(110)에 의해 추가로 세분되고 상이한 하드웨어 가속기들(114)에 발신될 수 있다.
또한, 제2 복수의 통신 서브 시스템들(106) 중 다른 추가적인 서브 시스템(또한 도시되지 않음)은 오프 칩 직렬 포트를 통해 오프 칩으로 데이터를 전달하는 데 사용될 수 있다. 제2 복수의 통신 서브 시스템들(106) 중 제5 통신 서브 시스템(106-5)은 호스트 인터페이스(120)에 결합될 수 있고, 채널들(103/105)을 통해 호스트(102)의 호스트 제어기(101)와 통신할 수 있다. 도시되지는 않았지만, (도시되지 않은 제2 복수의 통신 서브 시스템들 중 다른 것과 같은) 통신 서브 시스템이 논리 회로부에 결합될 수 있다. 논리 회로부는 컴퓨팅 디바이스들(110), 제1 복수의 통신 서브 시스템들, 제2 복수의 통신 서브 시스템들(106) 등과 동일한 필드 프로그래머블 게이트 어레이(FPGA) 상에 있을 수 있다.
일 실시예에서, 컴퓨팅 디바이스(110)는 호스트(102)로부터의 메시지들의 연산 큐를 처리할 수 있다. 연산 큐는 컴퓨팅 디바이스(110)에 의해, 인수들을 갖는 입력 메시지를 판독하고 요구되는 기능을 실행함으로써 처리될 수 있다. 또한, 컴퓨팅 디바이스(110)는 연산을 수행하기 위해 메모리 디바이스들(116-1, ..., 116-N) 중 적어도 하나에 데이터를 판독 및/또는 기록할 수 있다. 컴퓨팅 디바이스(110)는 수행될 작업 항목 메시지를 생성할 수 있고, 입력 메시지와 연관된 작업 항목을 수행할 것을 나타내는 하드웨어 가속기들(114) 중 적어도 하나에 발신할 메시지를 생성할 수 있다. 메시지는 수신된 입력 메시지 및 인수들과 관련하여 수행될 연산 또는 서브 연산을 식별하고, 활성화될 하드웨어 가속기 및 수행될 함수를 식별하고, 메모리 디바이스(116)의 입력 데이터 위치를 식별하며, 메모리 디바이스(116)의 출력 데이터 위치를 식별할 수 있다. 예로서, 입력 데이터 위치는 작업 항목을 수행하기 위해 데이터를 검색하기 위해 메모리 디바이스(116)에서의 데이터의 위치를 나타낼 수 있다. 출력 데이터 위치는 작업 항목의 연산의 결과적인 출력을 저장하기 위한 메모리 디바이스(116)에서의 위치를 나타낼 수 있다. 작업 항목 메시지는 대응하는 하드웨어 가속기(114) 큐(예를 들어, 각 하드웨어 가속기(114)의 버퍼(117)에) 발신될 수 있다. 연산의 결과들이 생성되거나 수신됨에 따라, 수행될 추가적인 연산들을 나타내는 추가적인 메시지들이 생성되고 하드웨어 가속기들에 발신될 수 있다. 메시지들의 생성 및 결과들의 수신은 초기 연산의 최종 결과가 작업 항목을 완료할 때까지 계속될 수 있다. 작업 항목의 완료 시에, 작업 항목이 완료되었음을 나타내는 완료 메시지가 컴퓨팅 디바이스(110)에 발신될 수 있다. 작업 항목이 완료되었음을 나타내는 메시지가 호스트(102)에 발신될 수 있다.
하드웨어 가속기(114)는 작업 항목을 수신 시, 메모리 디바이스(116)에서의 대응하는 데이터 위치들을 포함하는 작업 항목 메시지를 판독할 수 있다. 하드웨어 가속기(114)는 메시지 내에 포함된 요청된 가속기 연산들을 수행할 수 있다. 일 실시예에서, 하드웨어 가속기(114)는 연산의 일 부분을 추가적인 하드웨어 가속기(114)에 발신할 수 있다(예를 들어, 하드웨어 가속기(114-1)는 메시지를 수신할 수 있고, 하드웨어 가속기(114-2)에 의해 완료될 메시지에서의 연산의 일 부분을 하드웨어 가속기(114-2)에 발신할 수 있다). (하드웨어 가속기(114-2)에 의해 실행되는) 작업의 완료된 부분은 초기 하드웨어 가속기(114-1)에 발신될 수 있고, 초기 하드웨어 가속기(114-1)는 완료된 부분을 다른 결과와 조합하여, 작업 항목 메시지에서의 연산의 완료를 마무리지을 수 있다. 완전히 완료되면, 하드웨어 가속기(114)는 작업 항목이 완료되었음을 나타내는 메시지를 컴퓨팅 디바이스(110)에 발신할 수 있다.
일 실시예에서, 호스트(102)는 컴퓨팅 디바이스(110)가 연산을 수행하라는 요청을 발신할 수 있다. 컴퓨팅 디바이스(110)는 데이터 초기화를 수행할 수 있고, 데이터를 메모리 디바이스(116)에서의 위치에 기록할 수 있다. 컴퓨팅 디바이스(110)가 4K(또는 이의 배수)의 데이터를 생성할 때, 컴퓨팅 디바이스(110)는 하드웨어 가속기(114)에 의해 완료될 작업 항목을 생성할 수 있다. 데이터를 추가로 처리하기 위해. 하드웨어 가속기(114)가 작업 항목을 완료할 때, 하드웨어 가속기는 작업 항목이 완료되었다는 메시지를 컴퓨팅 디바이스(110)에 발신할 수 있다. 컴퓨팅 디바이스(110)는 데이터를 추가로 처리하거나, 데이터를 다른 하드웨어 가속기(114)에 발신하거나, 또는 데이터를 메모리 장치(116)에 단독으로 남겨두고 데이터를 추가로 처리하는 것을 계속할 수 있다.
호스트(102)는 데이터를 자신의 어드레스 공간에 맵핑할 수 있다. 호스트(102)는 파일(예를 들어, 리눅스)을 컴퓨팅 디바이스(110) 처리 유닛 어드레스 공간에 맵핑할 수 있다. 컴퓨팅 디바이스(110)는 자신의 어드레스들과 메모리 디바이스(116) 내의 위치들 간의 맵을 갖는다. 하드웨어 가속기(116) 작업 항목이 생성될 때, 하드웨어 가속기(114)로 전달되는 어드레스는 메모리 디바이스(116)의 논리 블록 어드레스일 수 있다. 호스트(102)는 파일 시스템과 컴퓨팅 디바이스(110)의 64 비트 어드레스 공간 사이의 어드레스를 맵핑하는 것을 담당할 수 있다. 컴퓨팅 디바이스(110)는 자신의 어드레스들을 메모리 디바이스(116)의 논리 블록 위치들로 맵핑하는 것을 담당할 수 있다. 이러한 방식으로, 하드웨어 가속기들(114)은 메모리 디바이스(116)의 하나의 논리 데이터 위치로부터 다른 논리 데이터 위치로 데이터를 전달하는 것을 담당한다.
호스트(102)는 다양한 다른 타입들의 호스트들 중에서도, 개인용 랩탑 컴퓨터, 데스크탑 컴퓨터, 디지털 카메라, 스마트폰, 메모리 카드 리더, 및/또는 사물 인터넷 지원 디바이스와 같은 호스트 시스템일 수 있고, 메모리 액세스 디바이스, 예를 들어, 프로세서(또는 프로세싱 디바이스)를 포함할 수 있다. 해당 기술분야의 통상의 기술자는 "프로세서"가 하나 이상의 프로세서, 이를테면 병렬 프로세싱 시스템, 다수의 보조 프로세서들 등을 의도할 수 있음을 이해할 것이다. 호스트(102)는 시스템 마더보드 및/또는 백플레인을 포함할 수 있고, 다수의 프로세싱 자원들(예를 들어, 하나 이상의 프로세서, 마이크로프로세서, 또는 몇몇 다른 타입의 제어 회로부)을 포함할 수 있다. 일부 실시예들에서, 호스트는 예를 들어, 확장 메모리 연산들과 같은 연산들의 수행을 야기하기 위한 커맨드들을 생성하고 호스트 제어기에 전달함으로써 호스트(102)의 적어도 일부 연산들을 제어하도록 구성될 수 있는 호스트 제어기(101)를 포함할 수 있다. 호스트 제어기(101)는 호스트(102)의 적어도 일부 연산들을 제어하도록 구성될 수 있는 회로부(예를 들어, 하드웨어)를 포함할 수 있다. 예를 들어, 호스트 제어기(101)는 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 또는 호스트(102)의 적어도 일부 연산들을 제어하도록 구성된 회로부 및/또는 논리의 다른 조합일 수 있다.
시스템(100)은 별개의 집적 회로들 또는 호스트(102)를 포함할 수 있으며, 제1 복수의 통신 서브 시스템들(108), 제2 복수의 통신 서브 시스템들(106), 제어기(112), 온 칩 가속기들(114), 호스트 인터페이스(120), 및/또는 메모리 디바이스들(116-1, ..., 116-N)은 동일한 집적 회로 상에 있을 수 있다. 시스템(100)은 예를 들어, 서버 시스템 및/또는 고성능 컴퓨팅(HPC) 시스템 및/또는 이의 일부분일 수 있다. 도 1에 도시된 예는 폰 노이만(Von Neumann) 아키텍처를 갖는 시스템을 도시하지만, 본 개시의 실시예들은 비-폰 노이만 아키텍처들 - 폰 노이만 아키텍처와 보통 연관된 하나 이상의 구성요소(예를 들어, CPU, ALU 등)를 포함하지 않을 수 있음 - 로 구현될 수 있다.
제어기(112)는 메모리 디바이스들(116-1, ..., 116-N) 중 하나 이상으로부터의 데이터 블록을 요청하도록 구성될 수 있으며, 코어들(110-1, ..., 110-N) - 이들은 본원에서 대안적으로 "컴퓨팅 디바이스들"로서 지칭될 수 있음 - 이 데이터 블록에 대한 연산(예를 들어, 확장 메모리 연산)을 수행하게 하도록 구성될 수 있다. 연산은 데이터 블록과 연관된 단일 어드레스 및 하나 이상의 피연산자에 의해 특정될 수 있는 함수를 평가하기 위해 수행될 수 있다. 제어기(112)는 또한, 확장 메모리 연산의 결과가 제2 통신 서브 시스템들(106) 및/또는 제1 통신 서브 시스템들(108)을 통해 컴퓨팅 디바이스들(110-1, ..., 110-N) 중 하나 이상에 저장되고/거나 채널(예를 들어, 통신 경로들(103 및/또는 105)) 및/또는 호스트(102)로 전달되게 하도록 구성될 수 있다.
일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 복수의 컴퓨팅 디바이스들(110) 중 하나에 원격 커맨드를 요청하고/거나, DMA 커맨드를 시작하고/거나, 판독/기록 위치를 발송하고/거나, 시작 함수 실행 커맨드를 발송할 수 있다. 일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 데이터 블록이 컴퓨팅 디바이스(110)의 버퍼로부터 메모리 제어기(112) 또는 메모리 디바이스(116)의 버퍼로 복사될 것을 요청할 수 있다. 반대로, 제2 복수의 통신 서브 시스템들(106) 중 하나는 데이터 블록이 메모리 제어기(112) 또는 메모리 디바이스(116)의 버퍼로부터 컴퓨팅 디바이스(110)의 버퍼로 복사될 것을 요청할 수 있다. 제2 복수의 통신 서브 시스템들(106)은 데이터 블록이 호스트(102)의 버퍼로부터 컴퓨팅 디바이스(110)로 복사될 것을 요청할 수 있거나, 또는 그 반대로, 데이터 블록이 컴퓨팅 디바이스(110)로부터 호스트(102)로 복사될 것을 요청할 수 있다. 제2 복수의 통신 서브 시스템들(106)은 데이터 블록이 메모리 제어기(112) 또는 메모리 디바이스(116)의 버퍼로부터 호스트(102)의 버퍼로 복사될 것을 요청할 수 있다. 반대로, 제2 복수의 통신 서브 시스템들(106)은 데이터 블록이 호스트(102)의 버퍼로부터 메모리 제어기(112) 또는 메모리 디바이스(116)의 버퍼로 복사될 것을 요청할 수 있다. 나아가, 일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 호스트로부터의 커맨드가 컴퓨팅 디바이스(110) 상에서 실행될 것을 요청할 수있다. 제2 복수의 통신 서브 시스템들(106)은 컴퓨팅 디바이스(110)로부터의 커맨드가 추가적인 컴퓨팅 디바이스(110) 상에서 실행될 것을 요청할 수있다. 제2 복수의 통신 서브 시스템들(106)은 메모리 제어기(112)로부터의 커맨드가 컴퓨팅 디바이스(110) 상에서 실행될 것을 요청할 수 있다. 일부 실시예들에서, 도 3과 관련하여 더 상세하게 설명되는 바와 같이, 여기서, 제2 복수의 통신 서브 시스템들(106)은 제어기(도시되지 않음)의 적어도 일부를 포함할 수 있다.
일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 (메모리 제어기(112)를 통해) 데이터 블록(예를 들어, 직접 메모리 액세스(DMA) 데이터 블록)을 컴퓨팅 디바이스(110)로부터 미디어 디바이스(116)로 전달할 수 있거나, 또는 그 반대로, 데이터 블록을 미디어 디바이스(116)로부터 컴퓨팅 디바이스(110)로 전달할 수 있다. 제2 복수의 통신 서브 시스템들(106)은 데이터 블록(예를 들어, DMA 블록)을 컴퓨팅 디바이스(110)로부터 호스트(102)로, 또는 그 반대로, 호스트(102)로부터 컴퓨팅 디바이스(110)로전달한다. 나아가, 제2 복수의 통신 서브 시스템들(106)은 데이터 블록(예를 들어, DMA 블록)을 호스트(102)로부터 미디어 디바이스(116)로, 또는 그 반대로, 미디어 디바이스(116)로부터 호스트(102)로 전달할 수 있다. 일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 컴퓨팅 디바이스들(110-1, ..., 110-N)로부터 출력(예를 들어, 확장 메모리 연산이 수행된 데이터)을 수신할 수 있고, 출력을 컴퓨팅 디바이스들(110-1, ..., 110-N)로부터 장치(104) 및/또는 호스트(102)의 제어기(115)로, 그리고 그 반대로 전달할 수 있다. 예를 들어, 제2 복수의 통신 서브 시스템들(106)은 컴퓨팅 디바이스들(110-1, ..., 110-N)에 의해 확장 메모리 연산을 받은 데이터를 수신하고, 확장 메모리 연산의 결과에 대응하는 데이터를 제어기(115) 및/또는 호스트(102)에 전달하도록 구성될 수 있다. 일부 실시예들에서, 제2 복수의 통신 서브 시스템들(106)은 제어기(115)의 적어도 일부를 포함할 수 있다. 예를 들어, 제2 복수의 통신 서브 시스템들(106)은 제어기(115), 또는 이의 일부를 포함하는 회로부를 포함할 수 있다.
메모리 제어기(112)는 "표준" 또는 "덤(dumb)" 메모리 제어기일 수 있다. 예를 들어, 메모리 제어기(112)는 메모리 디바이스들(116-1, ..., 116-N)에 대한 복사, 기록, 판독, 에러 정정 등과 같은 단순 연산들을 수행하도록 구성될 수 있다. 그러나, 일부 실시예들에서, 메모리 제어기(112)는 메모리 디바이스들(116-1, ..., 116-N)과 연관된 데이터에 대한 프로세싱(예를 들어, 데이터를 조작하는 연산들)은 수행하지 않는다. 예를 들어, 메모리 제어기(112)는 통신 경로들(107-1, ..., 107-N)을 통해 메모리 디바이스들(116-1, ..., 116-N)로부터 또는 메모리 디바이스들에 데이터를 판독 또는 기록하는 판독 및/또는 기록 연산이 수행되게 할 수 있지만, 메모리 제어기(112)는 메모리 디바이스들(116-1, ..., 116-N)로부터 또는 메모리 디바이스들에 판독되거나 기록된 데이터에 대한 프로세싱은 수행하지 않을 수 있다. 일부 실시예들에서, 메모리 제어기(112)는 비휘발성 메모리 제어기일 수 있지만, 실시예들은 이에 제한되지 않는다.
도 1의 실시예는 본 개시의 실시예들을 모호하지 않게 하기 위해 도시되지 않은 추가의 회로부들을 포함할 수 있다. 예를 들어, 장치(104)는 I/O 회로부를 통해 I/O 연결부들을 거쳐 제공되는 어드레스 신호들을 래칭하기 위한 어드레스 회로부를 포함할 수 있다. 메모리 디바이스들(116-1, ..., 116-N)에 액세스하기 위해 어드레스 신호들이 수신되고 로우 디코더 및 컬럼 디코더에 의해 디코딩될 수 있다. 해당 기술분야의 통상의 기술자들은 어드레스 입력 연결부들의 수가 메모리 디바이스들(116-1, ..., 116-N)의 밀도 및 아키텍처에 따라 달라질 수 있다는 것을 이해할 것이다.
일부 실시예들에서, 확장 메모리 연산들은 도 1에 도시된 컴퓨팅 시스템(100)을 사용하여 컴퓨팅 디바이스(110)에 데이터(예를 들어, 파일)를 선택적으로 저장 또는 매핑함으로써 수행될 수 있다. 데이터는 컴퓨팅 메모리의 어드레스 공간에 선택적으로 저장될 수 있다. 일부 실시예들에서, 데이터는 커맨드가 호스트(102)로부터 수신되는 것에 응답하여 컴퓨팅 디바이스(110)에 선택적으로 저장 또는 맵핑될 수 있다. 커맨드가 호스트(102)로부터 수신되는 실시예들에서, 커맨드는 각각, 호스트(102)와 연관된 인터페이스(예를 들어, 통신 경로들(103 및/또는 105))를 통해 그리고 제1 및 제2 복수의 통신 서브 시스템들(108 및 106)을 통해 컴퓨팅 디바이스(110)에 전달될 수 있다. 인터페이스(들)(103/105), 제1 복수의 통신 서브 시스템들(108) 및 제2 복수의 통신 서브 시스템들(106)은 주변 구성요소 인터커넥트 익스프레스(PCIe) 버스들, 더블 데이터 레이트(DDR) 인터페이스들, (AXI 인터커넥트 인터페이스들과 같은) 인터커넥트 인터페이스들, 멀티플렉서들(mux들), 또는 다른 적절한 인터페이스들 또는 버스들일 수 있다. 그러나, 실시예들이 이렇게 제한되지는 않는다.
데이터(예를 들어, 확장 메모리 연산의 수행에 사용될 데이터)가 컴퓨팅 디바이스(110)에 맵핑되는 비제한적인 예에서, 호스트 제어기(101)는 컴퓨팅 디바이스(110)에 맵핑된 데이터를 사용하여 확장 메모리 연산의 수행을 개시하기 위한 커맨드를 컴퓨팅 디바이스(110)에 전달할 수 있다. 일부 실시예들에서, 호스트 제어기(101)는 컴퓨팅 디바이스(110)에 맵핑된 데이터에 대응하는 어드레스(예를 들어, 물리적 어드레스)를 조회할 수 있고, 어드레스에 기초하여, 어느 컴퓨팅 디바이스(예를 들어, (컴퓨팅 디바이스(110-1))에 어드레스(그리고 이로 인해, 데이터)가 맵핑되는지를 결정할 수 있다. 그 다음, 커맨드가 어드레스(이로 인해, 데이터)를 포함하는 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1))에 전달될 수 있다.
일부 실시예들에서, 데이터는 64 비트 피연산자일 수 있지만, 실시예들은 특정 크기 또는 길이를 갖는 피연산자들로 제한되지 않는다. 데이터가 64 비트 피연산자인 실시예에서, 호스트 제어기(101)가 데이터가 저장된 어드레스에 기초하여 확장 메모리 연산의 수행을 개시하기 위한 커맨드를 정확한 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1))에 전달하면, 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1))는 데이터를 사용하여 확장 메모리 연산을 수행할 수 있다.
일부 실시예들에서, 컴퓨팅 디바이스들(110)은 연접한 어드레스 공간에 걸쳐 개별적으로 어드레싱 가능할 수 있으며, 이는 본원에서 설명된 바와 같이 확장 메모리 연산들의 수행을 가능하게 할 수 있다. 즉, 데이터가 저장되거나 데이터가 맵핑되는 어드레스는 호스트 제어기(101)가 어드레스를 조회할 때, 어드레스가 특정 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1)에서의 위치에 대응하도록 모든 컴퓨팅 디바이스(110)마다 고유할 수 있다.
예를 들어, 제1 컴퓨팅 디바이스(110-1)는 이와 연관된 어드레스들의 제1 세트를 가질 수 있고, 제2 컴퓨팅 디바이스(110-2)는 이와 연관된 어드레스들의 제2 세트를 가질 수 있고, 제3 컴퓨팅 디바이스(110-3)는 이와 연관된 어드레스들의 제3 세트를 가질 수 있으며, 내지 제n 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-N))는 이와 연관된 어드레스들의 제n 세트를 가질 수 있다. 즉, 제1 컴퓨팅 디바이스(110-1)는 어드레스들의 세트 0000000 내지 0999999를 가질 수 있고, 제2 컴퓨팅 디바이스(110-2)는 어드레스들의 세트 1000000 내지 1999999를 가질 수 있으며, 제3 컴퓨팅 디바이스(110-3)는 어드레스들의 세트 2000000 내지 2999999를 가질 수 있는 등이다. 이들 어드레스 번호들은 단지 예시적이고, 비제한적인 것이며, 컴퓨팅 디바이스들(110)의 아키텍처 및/또는 크기(예를 들어, 저장 능력)에 따라 달라질 수 있다는 것이 이해될 것이다.
확장 메모리 연산이 부동 소수점 추가 누산 연산(FLOATINGPOINT_ADD_ACCUMULATE)을 포함하는 비제한적인 예로서, 컴퓨팅 디바이스들(110)은 목적지 어드레스를 부동 소수점 번호로서 취급할 수 있고, 부동 소수점 번호를 컴퓨팅 디바이스(110)의 어드레스에 저장된 인수에 추가할 수 있으며, 그 결과를 다시 원래 어드레스에 저장할 수 있다. 예를 들어, 호스트 제어기(101)(또는 장치 제어기(115)(도시되지 않음))가 부동 소수점 추가 누산 확장 메모리 연산의 수행을 개시할 때, 호스트가 조회하는 컴퓨팅 디바이스(110)의 어드레스(예를 들어, 데이터가 맵핑되는 컴퓨팅 디바이스에서의 어드레스)가 부동 소수점 번호로서 취급될 수 있고, 어드레스에 저장된 데이터는 확장 메모리 연산의 수행을 위한 피연산자로서 취급될 수 있다. 확장 메모리 연산을 개시하기 위한 커맨드의 수신에 응답하여, 데이터(예를 들어, 이 예에서 피연산자)가 매핑되는 컴퓨팅 디바이스(110)는 데이터를 어드레스(예를 들어, 어드레스의 수치)에 추가하기 위한 추가 연산을 수행할 수 있고, 추가의 결과를 다시 컴퓨팅 디바이스(110)의 원래 어드레스에 저장할 수 있다.
상술한 바와 같이, 이러한 확장 메모리 연산들의 수행은 일부 실시예들에서, 호스트(102)로부터(예를 들어, 호스트 제어기(101)로부터) 메모리 디바이스(104)로 또는 제어기(115)로부터 컴퓨팅 디바이스(들)(110)로 전달될 단지 단일 커맨드(예를 들어, 요청 커맨드)만을 필요로 할 수 있다. 일부 이전의 접근법들과는 대조적으로, 이는 예를 들어, 다수의 커맨드들이 인터페이스(들)(103, 105)를 횡단하기 위한 시간량 및/또는 데이터, 이를테면 피연산자들이 연산들의 수행에 소비되는 컴퓨팅 디바이스(들)(110) 내의 하나의 어드레스로부터 또 다른 어드레스로 이동되기 위한 시간량을 감소시킬 수 있다.
또한, 본 개시에 따른 확장 메모리 연산들의 수행은 또한, 피연산자들이 연산들의 수행 이전에 상이한 위치들로부터 검색 및 로딩되어야 하는 접근법들과는 대조적으로, 확장 메모리 연산이 수행되는 컴퓨팅 디바이스(110)에 맵핑되는 데이터가 확장 메모리 연산에 대한 피연산자로서 이용될 수 있고/거나 데이터가 맵핑되는 어드레스가 확장 메모리 연산에 대한 피연산자로서 사용될 수 있으므로, 프로세싱 전력량 또는 프로세싱 시간량을 감소시킬 수 있다. 즉, 적어도 본원에서의 실시예들은 피연산자의 로딩이 스킵될 수 있게 하기 때문에, 피연산자들을 로딩하고 후속하여 피연산자들 사이에서 수행되는 연산들의 결과를 저장하는 접근법들에 비해 컴퓨팅 시스템(100)의 성능이 개선될 수 있다.
나아가, 일부 실시예들에서, 확장 메모리 연산이 어드레스 및 어드레스에 저장된 데이터를 사용하여 컴퓨팅 디바이스(110) 내에서 수행될 수 있기 때문에, 그리고 일부 실시예들에서, 확장 메모리 연산의 결과가 다시 원래 어드레스에 저장될 수 있기 때문에, 확장 메모리 연산의 수행 동안 락 또는 뮤텍스 연산들이 완화되거나 요구되지 않을 수 있다. 확장 메모리 연산들의 수행 동안 스레드들에 대한 락 또는 뮤텍스 연산들의 수행을 감소시키거나 제거하는 것은 컴퓨팅 시스템(100)의 수행을 증가시킬 수 있는데, 이는 확장 메모리 연산들이 동일한 컴퓨팅 디바이스(110) 내에서 병렬로 또는 컴퓨팅 디바이스들(110) 중 둘 이상에 걸쳐 수행될 수 있기 때문이다.
일부 실시예들에서, 컴퓨팅 디바이스들(110)에서의 데이터의 유효한 맵핑들은 베이스 어드레스, 세그먼트 크기, 및/또는 길이를 포함할 수 있다. 베이스 어드레스는 데이터 맵핑이 저장된 컴퓨팅 디바이스(110)에서의 어드레스에 대응할 수 있다. 세그먼트 크기는 컴퓨팅 시스템(100)이 프로세싱할 수 있는 데이터량(예를 들어, 바이트 단위)에 대응할 수 있고, 길이는 데이터에 대응하는 비트량에 대응할 수 있다. 일부 실시예들에서, 컴퓨팅 디바이스(들)(110)에 저장된 데이터는 호스트(102) 상에 캐싱 불가능할 수 있다는 점에 유의한다. 예를 들어, 확장 메모리 연산들은 확장 메모리 연산들의 수행 동안 호스트(102)로 또는 호스트로부터 데이터에 지장을 주거나 전달하지 않고 전적으로 컴퓨팅 디바이스들(110) 내에서 수행될 수 있다.
베이스 어드레스가 4096이고, 세그먼트 크기가 1024이며, 길이가 16,386인 비제한적인 예에서, 맵핑된 어드레스 7234는 제3 세그먼트에 있을 수 있으며, 이는 복수의 컴퓨팅 디바이스들(110) 중에서 제3 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-3))에 대응할 수 있다. 이러한 예에서, 호스트(102) 및/또는 제1(108) 및 제2(106) 통신 서브 시스템들은 확장 메모리 연산을 수행하기 위한 커맨드(예를 들어, 요청)를 제3 컴퓨팅 디바이스(110-3)에 포워딩할 수 있다. 제3 컴퓨팅 디바이스(110-3)는 데이터가 제3 컴퓨터 디바이스(110-3)의 메모리에서의 맵핑된 어드레스에 저장되어 있는지를 결정할 수 있다. 데이터가 맵핑된 어드레스(예를 들어, 제3 컴퓨팅 디바이스(110-3)에서의 어드레스)에 저장된다면, 제3 컴퓨팅 디바이스(110-3)는 그 데이터를 사용하여 요청된 확장 메모리 연산을 수행할 수 있고, 확장 메모리 연산의 결과를 다시 데이터가 원래 저장되었던 어드레스에 저장할 수 있다.
일부 실시예들에서, 확장 메모리 연산의 수행이 요청되는 데이터를 포함하는 컴퓨팅 디바이스(110)는 호스트 제어기(101), 및/또는 제1(108) 및/또는 제2(106) 통신 서브 시스템들에 의해 결정될 수 있다. 예를 들어, 모든 컴퓨팅 디바이스들(110)에 이용 가능한 총 어드레스 공간의 일부는 각 개별 컴퓨팅 디바이스에 할당될 수 있다. 이에 따라, 호스트 제어기(101) 및/또는 제1(108) 및/또는 제2(106) 통신 서브 시스템들은 총 어드레스 공간의 어느 부분들이 어느 컴퓨팅 디바이스들(110)에 대응하는지에 대응하는 정보를 제공받을 수 있고, 이에 따라 관련 컴퓨팅 디바이스들(110)에 확장 메모리 연산들을 수행할 것을 지시할 수 있게 된다. 일부 실시예들에서, 호스트 제어기(101) 및/또는 제2 통신 서브 시스템(106)은 각 컴퓨팅 디바이스들(110)에 대응하는 어드레스들(또는 어드레스 범위들)을 테이블과 같은 데이터 구조에 저장할 수 있고, 데이터 구조에 저장된 어드레스들에 기초하여 확장 메모리 연산들의 수행을 컴퓨팅 디바이스들(110)에 지시할 수 있다.
그러나, 실시예들은 이에 제한되지 않고, 일부 실시예들에서, 호스트 제어기(101) 및/또는 제2 통신 서브 시스템들(106)은 메모리 자원(들)의 크기(예를 들어, 데이터량)를 결정할 수 있고, 각 컴퓨팅 디바이스(110)와 연관된 메모리 자원(들)의 크기 및 모든 컴퓨팅 디바이스들(110)이 이용 가능한 총 어드레스 공간에 기초하여, 어느 컴퓨팅 디바이스(110)가 확장 메모리 연산의 수행에 사용될 데이터를 저장하는지를 결정할 수 있다. 호스트 제어기(101) 및/또는 제2 통신 서브 시스템들(106)이 모든 컴퓨팅 디바이스들(110)이 이용 가능한 총 어드레스 공간 및 각 컴퓨팅 디바이스(110)가 이용 가능한 메모리 자원(들)의 양에 기초하여 확장 메모리 연산의 수행에 사용될 데이터를 저장하는 컴퓨팅 디바이스(110)를 결정하는 실시예들에서, 컴퓨팅 디바이스 메모리 자원(들) 중 다수의 비중첩 부분들에 걸쳐 확장 메모리 연산들을 수행하는 것이 가능할 수 있다.
위의 예를 계속하면, 요청된 어드레스에 데이터가 없다면, 제3 컴퓨팅 디바이스(110-3)는 본원에서, 도 2 내지 도 5와 관련하여 더 상세하게 설명되는 바와 같이 데이터를 요청할 수 있고, 데이터가 제3 컴퓨터 디바이스(110-3)의 어드레스로 로딩되면 확장 메모리 연산을 수행할 수 있다. 일부 실시예들에서, 확장 메모리 연산이 컴퓨팅 디바이스(예를 들어, 이 예에서 제3 컴퓨팅 디바이스(110-3))에 의해 완료되면, 및/또는 호스트(102)가 통지될 수 있고/거나 확장 메모리 연산의 결과가 메모리 디바이스들(116) 및/또는 호스트(102)로 전달될 수 있다.
일부 실시예들에서, 메모리 제어기(112)는 호스트(102) 또는 장치(104)의 제어기로부터의 요청에 응답하여 장치(104)에 결합된 메모리 디바이스(들)(116-1, ..., 116-N)로부터 데이터 블록들을 검색하도록 구성될 수 있다. 후속해서, 메모리 제어기(112)는 데이터 블록들이 컴퓨팅 디바이스들(110-1, ..., 110-N) 및/또는 장치 제어기에 전달되게 할 수 있다. 유사하게, 메모리 제어기(112)는 컴퓨팅 디바이스들(110) 및/또는 제어기(115)로부터 데이터 블록들을 수신하도록 구성될 수 있다. 후속해서, 메모리 제어기(112)는 데이터 블록들이 스토리지 제어기(104)에 결합된 메모리 디바이스(116)에 전달되게 할 수 있다.
데이터 블록들은 크기가 대략 4 킬로바이트일 수 있고(그러나 실시예들은 이 특정 크기로 제한되지 않음), 하나 이상의 커맨드가 제어기(115) 및/또는 호스트에 의해 생성되고 제2 통신 서브 시스템들(106)을 통해 발송되는 것에 응답하여 컴퓨팅 디바이스들(110-1, ..., 110-N)에 의해 스트리밍 방식으로 프로세싱될 수 있다. 일부 실시예들에서, 데이터 블록들은 32 비트, 64 비트, 128 비트 등의 워드들 또는 데이터의 청크들일 수 있고/거나, 데이터 블록들은 확장 메모리 연산의 수행에 사용될 피연산자들에 대응할 수 있다.
예를 들어, 본원에서, 도 2 내지 도 5와 관련하여 더 상세하게 설명되는 바와 같이, 컴퓨팅 디바이스들(110)은 선행 데이터 블록에 대한 확장 메모리 연산의 수행의 완료에 응답하여 제2 데이터 블록에 대한 확장 메모리 연산(예를 들어, 프로세스)을 수행할 수 있기 때문에, 데이터 블록들이 컴퓨팅 디바이스들(110)에 의해 프로세싱되고 있는 동안, 데이터 블록들이 컴퓨팅 디바이스들(110)을 통해 연속해서 스트리밍될 수 있다. 일부 실시예들에서, 데이터 블록들은 제어기 및/또는 호스트(102)로부터의 개재 커맨드의 부재 시에 컴퓨팅 디바이스들(110)을 통해 스트리밍 방식으로 프로세싱될 수 있다. 즉, 일부 실시예들에서, 제어기(115)(또는 호스트(102))는 컴퓨팅 디바이스들(110)이 자신에게 수신된 데이터 블록들을 프로세싱하게 하기 위한 커맨드를 발행할 수 있고, 후속하여 컴퓨팅 디바이스들(110)에 의해 수신되는 데이터 블록들은 제어기로부터의 추가적인 커맨드의 부재 시에 프로세싱될 수 있다.
일부 실시예들에서, 데이터 블록들을 프로세싱하는 것은 데이터 블록들을 사용하여 확장 메모리 연산을 수행하는 것을 포함할 수 있다. 예를 들어, 컴퓨팅 디바이스들(110-1, ..., 110-N)은 제2 복수의 통신 서브 시스템들(106)을 통한 제어기로부터의 커맨드들에 응답하여, 데이터 블록들에 대한 확장 메모리 연산들을 수행하여 하나 이상의 함수를 평가하거나, 원치 않는 데이터를 제거하거나, 관련 데이터를 추출하거나, 또는 그 외 확장 메모리 연산의 수행과 관련하여 데이터 블록들을 사용할 수 있다.
데이터(예를 들어, 확장 메모리 연산의 수행에 사용될 데이터)가 컴퓨팅 디바이스들(110) 중 하나 이상에 맵핑되는 비제한적인 예에서, 제어기는 컴퓨팅 디바이스(110)에 맵핑된 데이터를 사용하여 확장 메모리 연산의 수행을 개시하기 위한 커맨드를 컴퓨팅 디바이스(들)(110)에 전달할 수 있다. 일부 실시예들에서, 제어기(115)는 컴퓨팅 디바이스(들)(110)에 맵핑된 데이터에 대응하는 어드레스(예를 들어, 물리적 어드레스)를 조회할 수 있고, 어드레스에 기초하여, 어느 컴퓨팅 디바이스(예를 들어, (컴퓨팅 디바이스(110-1))에 어드레스(그리고 이로 인해, 데이터)가 맵핑되는지를 결정할 수 있다. 그 다음, 커맨드가 어드레스(이로 인해, 데이터)를 포함하는 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1))에 전달될 수 있다. 일부 실시예들에서, 커맨드는 제2 통신 서브 시스템(106)을 통해 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110-1))에 전달될 수 있다.
제어기(115)(또는 호스트)는 또한, 데이터 블록들을 사용하여 확장 메모리 연산들을 수행하는 데 사용하기 위해 컴퓨팅 디바이스들(110)이 이용가능한 자원들을 할당 및/또는 할당 해제하기 위한 커맨드들을 컴퓨팅 디바이스들(110)에 발송하도록 구성될 수 있다. 일부 실시예들에서, 컴퓨팅 디바이스들(110)이 이용 가능한 자원들을 할당 및/또는 할당 해제하는 것은 컴퓨팅 디바이스들(110) 중 일부를 선택적으로 인에이블하는 한편 컴퓨팅 디바이스들(110) 중 일부를 선택적으로 디스에이블하는 것을 포함할 수 있다. 예를 들어, 데이터 블록들을 프로세싱하는 데 컴퓨팅 디바이스들(110)의 총 수보다 적은 수가 요구된다면, 제어기(115)는 단지 데이터 블록들을 프로세싱하는 데 요구되는 컴퓨팅 디바이스들(110)만 인에이블하기 위한 커맨드를 데이터 블록들을 프로세싱하는 데 사용될 컴퓨팅 디바이스들(110)에 발송할 수 있다.
제어기(115)는 일부 실시예들에서, 또한, 컴퓨팅 디바이스들(110)에 의해 수행되는 확장 메모리 연산들과 같은 연산들의 수행을 동기화하기 위한 커맨드들을 발송하도록 구성될 수 있다. 예를 들어, 제어기(115)(및/또는 호스트)는 제1 컴퓨팅 디바이스(110-1)가 제1 확장 메모리 연산을 수행하게 하기 위한 커맨드를 제1 컴퓨터 디바이스(110-1)에 발송할 수 있고, 제어기(115)(또는 호스트)는 제2 컴퓨팅 디바이스를 사용하여 제2 확장 메모리 연산들을 수행하기 위한 커맨드를 제2 컴퓨터 디바이스(110-2)에 발송할 수 있다. 제어기(115)에 의해 컴퓨팅 디바이스들(110)에 의해 수행되는 확장 메모리 연산들과 같은 연산들의 수행의 동기화는 컴퓨팅 디바이스들(110)이 특정 시간에 또는 특정 순서로 특정 연산들을 수행하게 하는 것을 더 포함할 수 있다.
상술한 바와 같이, 확장 메모리 연산의 수행으로부터 발생하는 데이터는 확장 메모리 연산을 수행하기 전에 데이터가 저장된 컴퓨팅 디바이스(110)에서의 원래 어드레스에 저장될 수 있지만, 일부 실시예들에서, 확장 메모리 연산의 수행으로부터 발생한 데이터 블록들은 확장 메모리 연산의 수행에 후속하여 논리 레코드들로 변환될 수 있다. 논리 레코드들은 그들의 물리적 위치들에 독립적인 데이터 레코드들을 포함할 수 있다. 예를 들어, 논리 레코드들은 확장 메모리 연산의 수행에 대응하는 물리적 데이터가 저장되는 컴퓨팅 디바이스들(110) 중의 적어도 하나의 컴퓨팅 디바이스에서의 어드레스(예를 들어, 위치)를 가리키는 데이터 레코드들일 수 있다.
일부 실시예들에서, 확장 메모리 연산의 결과는 확장 메모리 연산을 수행하기 전에 데이터가 저장되는 어드레스와 동일한 컴퓨팅 디바이스 메모리의 어드레스에 저장될 수 있다. 그러나, 실시예들은 이에 제한되지 않고, 확장 메모리 연산의 결과는 확장 메모리 연산을 수행하기 전에 데이터가 저장되는 어드레스와 동일한 컴퓨팅 디바이스 메모리의 어드레스에 저장될 수 있다. 일부 실시예들에서, 논리 레코드들은 이들 어드레스 위치들을 가리켜 확장 메모리 연산의 결과(들)가 컴퓨팅 디바이스들(110)로부터 액세스되고 컴퓨팅 디바이스들(110) 외부의 회로부(예를 들어, 호스트)로 전달될 수 있도록 할 수 있다.
일부 실시예들에서, 제어기(115)는 데이터 블록들을 메모리 제어기(112)로 그리고 이로부터 직접 수신 및/또는 전달할 수 있다. 이는 제어기(115)가 컴퓨팅 디바이스들(110)에 의해 프로세싱되지 않은 데이터 블록들(예를 들어, 확장 메모리 연산들의 수행에 사용되지 않은 데이터 블록들)을 메모리 제어기(112)로 그리고 이로부터 전달할 수 있게 할 수 있다.
예를 들어, 제어기(115)가 스토리지 제어기(104)에 결합된 메모리 디바이스(들)(116)에 의해 저장될 프로세싱되지 않은 데이터 블록들을 스토리지 제어기(104)에 결합된 호스트(102)로부터 수신한다면, 제어기(115)는 프로세싱되지 않은 데이터 블록들이 메모리 제어기(112)에 전달되게 할 수 있으며, 이는 차례로, 프로세싱되지 않은 데이터 블록들이 스토리지 제어기(104)에 결합된 메모리 디바이스(들)에 전달되게 할 수 있다.
유사하게, 호스트가 프로세싱되지 않은(예를 들어, 전체) 데이터 블록(예를 들어, 컴퓨팅 디바이스들(110)에 의해 프로세싱되지 않은 데이터 블록)을 요청한다면, 메모리 제어기(112)는 프로세싱되지 않은 데이터 블록들이 제어기(115)로 전달되게 할 수 있으며, 이는 후속하여 프로세싱되지 않은 데이터 블록들을 호스트로 전달할 수 있다.
도 2는 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 서브 시스템들(208), 제2 복수의 통신 서브 시스템들(206)을 포함하는 장치(204), 및 복수의 메모리 디바이스들(216)을 컴퓨팅 시스템(200) 형태의 기능 블록도이다. 본원에서 사용될 때, "장치"는 예를 들어, 회로 또는 회로부, 다이 또는 다이들, 모듈 또는 모듈들, 디바이스 또는 디바이스들, 또는 시스템 또는 시스템들과 같은 다양한 구조체들 또는 구조체들의 조합들 중 임의의 것을 지칭할 수 있지만, 이에 제한되지는 않는다. 도 2에 도시된 실시예에서, 메모리 디바이스들(216-1, ..., 216-N)은 하나 이상의 메모리 모듈(예를 들어, 더블 데이터 레이트(DDR) 메모리, 3차원(3D) 크로스 포인트 메모리, NAND 메모리, 단일 인 라인 메모리 모듈들, 이중 인 라인 메모리 모듈들 등)을 포함할 수 있다. 메모리 디바이스들(216-1, ..., 216-N)은 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있다. 다수의 실시예에서, 메모리 디바이스들(216-1, ..., 216-N)은 멀티-칩 소자를 포함할 수 있다. 멀티 칩 디바이스는 다수의 상이한 메모리 타입들 및/또는 메모리 모듈들을 포함할 수 있다. 예를 들어, 메모리 시스템은 임의의 타입의 모듈 상에 비휘발성 또는 휘발성 메모리를 포함할 수 있다.
도 2에 도시된 바와 같이, 그리고 도 1과는 대조적으로, 복수의 컴퓨팅 디바이스들(210-1, 210-2, 210-3, 210-4, 210-5)(이하, 복수의 컴퓨팅 디바이스들(210)로 총칭됨)은 제1 복수의 통신 서브 시스템(208) 중 제1 통신 서브 시스템(208-1)에 결합될 수 있으며, 이는 제2 복수의 통신 서브 시스템들(206) 중 제2 통신 서브 시스템들(206-2)을 통해 복수의 하드웨어 가속기들(114)에 결합된다. 일 실시예에서, 제1 복수의 통신 서브 시스템들(208)은 복수의 멀티플렉서들일 수 있고, 제2 복수의 통신 서브 시스템들(206)은 복수의 AXI 인터커넥트들일 수 있다. 또한, 제1 통신 서브 시스템(208-1)은 제2 통신 서브 시스템(206-2)에 결합된 버퍼(219)에 직접 결합된다. 제2 복수의 통신 서브 시스템들(206) 중 제2 통신 서브 시스템(206-2)은 추가적인 버퍼(217)에 직접 결합된다. 추가적인 버퍼(217)는 제1 복수의 통신 서브 시스템들(208) 중 제2 통신 서브 시스템(208-2)에 결합된다. 제1 복수의 통신 서브 시스템들(208) 중 제2 통신 서브 시스템(208-2)은 복수의 하드웨어 가속도기들(214-1, 214-2, 214-3) 각각에 결합될 수 있다. 하드웨어 가속도기들(214)은 컴퓨팅 디바이스들(210), 제1 복수의 통신 서브 시스템들(208), 제2 복수의 통신 서브 시스템들(206) 등과 동일한 필드 프로그래머블 게이트 어레이(FPGA) 상에 있을 수 있다. 하드웨어 가속도기들(214)은 FPGA 상에서의 다수의 포지트 연산들을 수행하는 데, 그리고/또는 내부 SRAM과의 통신에 사용될 수 있다.
제1 복수의 통신 서브 시스템들(208)은 본원에서 설명된 연산들의 수행 동안 컴퓨팅 디바이스들(210)에 자원들을 할당 및 할당 해제하도록 구성된 회로부 및/또는 로직을 포함할 수 있다. 예를 들어, 회로부 및/또는 논리는 본원에서 설명되는 확장 메모리 연산들의 수행 동안 컴퓨팅 디바이스들(210)에 자원들을 할당 및/또는 할당 해제할 수 있다. 위에서 설명된 예들은 특정 배열 내의 특정 수의 멀티플렉서들을 포함하지만, 예들은 이렇게 제한되지 않는다. 예를 들어, 멀티플렉서는 버퍼(219)와 제2 통신 서브 시스템(206-2) 사이에, 제2 통신 서브 시스템(206-2)과 버퍼(208-3) 사이에 위치될 수 있는 등이다. 제1 복수의 통신 서브 시스템들(208) 중 제3 통신 서브 시스템(208-3)은 제2 복수의 통신 서브 시스템들 중 제3 통신 서브 시스템(206-3)에 결합될 수 있다. 제3 통신 서브 시스템(206-3)은 호스트 인터페이스(220)에 결합될 수 있다. 일 예에서, 제3 통신 스바이스템(206-3)은 다수의 AXI 버스들을 통해 호스트 인터페이스(220)에 결합될 수 있다.
도시된 바와 같이, 제2 복수의 통신 서브 시스템들(206) 중 제1 통신 서브 시스템(206-1)은 제어기(예를 들어, 메모리 제어기)(212)에 결합될 수 있다. 제어기(212)는 다수의 채널들(207-1, ..., 207-N)을 통해 다수의 메모리 디바이스들(216-1, ..., 216-N)에 결합될 수 있다.
도 3은 본 개시의 다수의 실시예들에 따른 복수의 통신 시스템들(306, 308)을 포함하는 장치(304) 및 복수의 메모리 디바이스들(316)을 포함하는 컴퓨팅 시스템(300) 형태의 기능 블록도이다. 본원에서 사용될 때, "장치"는 예를 들어, 회로 또는 회로부, 다이 또는 다이들, 모듈 또는 모듈들, 디바이스 또는 디바이스들, 또는 시스템 또는 시스템들과 같은 다양한 구조체들 또는 구조체들의 조합들 중 임의의 것을 지칭할 수 있지만, 이에 제한되지는 않는다. 도 3에 도시된 실시예에서, 메모리 디바이스들(316-1, ..., 316-N)은 하나 이상의 메모리 모듈(예를 들어, 더블 데이터 레이트(DDR) 메모리, 3차원(3D) 크로스 포인트 메모리, NAND 메모리, 단일 인 라인 메모리 모듈들, 이중 인 라인 메모리 모듈들 등)을 포함할 수 있다. 메모리 디바이스들(316-1, ..., 316-N)은 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있다. 다수의 실시예에서, 메모리 디바이스들(316-1, ..., 316-N)은 멀티-칩 소자를 포함할 수 있다. 멀티 칩 디바이스는 다수의 상이한 메모리 타입들 및/또는 메모리 모듈들을 포함할 수 있다. 예를 들어, 메모리 시스템은 임의의 타입의 모듈 상에 비휘발성 또는 휘발성 메모리를 포함할 수 있다.
도 3에 도시된 바와 같이, 장치(304)는 컴퓨팅 디바이스(예를 들어, 컴퓨팅 코어)를 포함할 수 있다. 일부 실시예들에서, 장치(304)는 FPGA일 수 있다. 도 3에 도시된 바와 같이, 복수의 컴퓨팅 디바이스들(310)은 (예로서, 각각 도 1 및 도 2에 도시된 (멀티플렉서들일 수 있는) 통신 서브 시스템들(108 및 208)과 같은 추가적인 통신 서브 시스템 세트를 통해 결합되지 않고) 복수의 통신 서브 시스템들(306)에 각각 결합될 수 있는 포트들(311)을 포함할 수 있다. 컴퓨팅 디바이스(310)는 메모리 포트("MemPort")(311-1), 시스템 포트 "SystemPort")(311-2), 주변 장치 포트("PeriphPort")(311-3), 및 프런트 포트("FrontPort")(311-4)를 포함하는 대응하는 포트 연결부들을 통해 복수의 통신 서브 시스템들(306)에 결합될 수 있다.
메모리 포트(311-1)는 특히, 메모리 포트로부터 데이터를 수신하고 데이터를 메모리 제어기(312)에 전달하는 것으로 지정된 통신 서브 시스템(306-1)에 직접 결합될 수 있다. 시스템 포트(311-2)는 통신 서브 시스템(308)에 직접 결합될 수 있으며, 이는 또한 복수의 버퍼들(319-1, 319-2, 319-3)(이하, 버퍼들(319)로 총칭됨)에 결합된다. 복수의 버퍼들(319) 각각은 복수의 통신 서브 시스템들(306-2, 306-3, 306-4) 각각에 결합될 수 있다. 복수의 통신 서브 시스템들(306-2, 306-3, 306-4)은 추가적인 복수의 버퍼들(317-1, 317-2, 317-3)에 결합될 수 있다. 복수의 버퍼들(317)은 각각 복수의 하드웨어 가속기들(314-1, 314-2, 314-3) 각각에 결합된다. 복수의 하드웨어 가속기들(314)은 로직(313)에 결합된다. 복수의 통신 서브 시스템들(306-2, 306-3, 306-4)은 각각 특히, 시스템 포트(311-2)로부터 데이터를 수신하고 그 데이터를 각 가속기(예를 들어, 온 칩 가속기)(314)에 전달하는 것으로 지정되며, 이는 그 후, 데이터를 추가적인 논리 회로부(313)에 전달할 수 있다.
주변 장치 포트(311-3)는 특히, 주변 장치 포트(311-3)로부터 데이터를 수신하고 데이터를 직렬 포트(318)로 전달하는 것으로 지정된 통신 서브 시스템(306-5)에 직접 결합될 수 있다. 프런트 포트(311-4)는 특히, 프런트 포트(311-4)로부터 데이터를 수신하고 데이터를 호스트 인터페이스(320)로, 그리고 후속해서 채널들(303 및/또는 305)을 통해 호스트(302)로 전달하는 것으로 지정된 통신 서브 시스템(306-6)에 직접 결합될 수 있다. 이 실시예에서, 하드웨어 가속기들(314)은 멀티플렉서를 통해 컴퓨팅 디바이스(310)에 결합될 수 있다. 대조적으로, 멀티플렉서는 제어기(312), 직렬 포트(318), 및/또는 호스트 인터페이스(320)를 컴퓨팅 디바이스(310)에 결합하는 데 사용되지 않을 수 있지만, 오히려 포트들 및 통신 서브 시스템은 데이터 전달을 위해 직접 연결된다.
일부 실시예들에서, 통신 서브 시스템들(306)은 컴퓨팅 디바이스(310)의 각 어드레스 공간들 사이의 가시성을 가능하게 할 수있다. 예를 들어, 컴퓨팅 디바이스(310)는 데이터 및/또는 파일의 수신에 응답하여, 데이터를 컴퓨팅 디바이스(310)의 메모리 자원에 저장할 수 있다. 컴퓨팅 디바이스는 데이터가 저장되는 컴퓨팅 디바이스(310)의 메모리 자원에서의 위치에 대응하는 어드레스(예를 들어, 물리적 어드레스)를 연관시킬 수 있다. 또한, 컴퓨팅 디바이스(310)는 데이터와 연관된 어드레스를 논리 블록들로 파싱(예를 들어, 분해)할 수 있다.
일부 실시예들에서, 데이터와 연관된 제0 논리 블록은 프로세싱 디바이스(예를 들어, 축소 명령어 세트 컴퓨팅(reduced instruction set computing, RISC) 디바이스)에 전달될 수 있다. 특정 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110, 210, 310))는 논리 어드레스들의 특정 세트에 그 컴퓨팅 디바이스(예를 들어, 210-2)가 액세스 가능함을 인식하도록 구성될 수 있는 한편, 다른 컴퓨팅 디바이스들(예를 들어, 각각, 컴퓨팅 디바이스(210-3, 210-4) 등)은 논리 어드레스들의 상이한 세트들에 그 컴퓨팅 디바이스들(110, 210, 310)가 액세스 가능함을 인식하도록 구성될 수 있다. 대안적으로 말하면, 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-2))는 그 컴퓨팅 디바이스(210-2)와 연관된 논리 어드레스들의 제1 세트에 대한 액세스 권한을 가질 수 있고, 제2 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-3))는 이와 연관된 논리 어드레스의 제2 세트에 대한 액세스 권한을 가질 수 있는 등이다.
제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스들(210-2))에서 논리 어드레스들의 제2 세트(예를 들어, 제2 컴퓨팅 디바이스(210-3)에 의해 액세스 가능한 논리 어드레스들)에 대응하는 데이터가 요청된다면, 통신 서브 시스템들(306)은 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-2))와 제2 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-3)) 사이의 통신을 가능하게 하여, 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-2))가 논리 어드레스들의 제2 세트에 대응하는 데이터(예를 들어, 제2 컴퓨팅 디바이스(210-3)에 의해 액세스 가능한 논리 어드레스들의 세트)에 액세스할 수 있게 할 수 있다. 즉, 통신 서브 시스템(308)은 컴퓨팅 디바이스(310)(예를 들어, 210-1))과 추가 컴퓨팅 디바이스들(예를 들어, 컴퓨팅 디바이스들(210-2, 210-3, 210-4)) 사이의 통신을 가능하게 하여, 컴퓨팅 디바이스들의 어드레스 공간들이 서로 가시적일 수 있게 할 수 있다.
일부 실시예들에서, 어드레스 가시성을 가능하게 하기 위한 컴퓨팅 디바이스들(110, 210, 310) 사이의 통신은 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-1))의 이벤트 큐에 의해, 논리 어드레스들의 제2 세트에 대응하는 데이터에 대한 액세스를 요청하는 메시지를 수신하는 것, 요청된 데이터를 제1 컴퓨터 디바이스의 메모리 자원에 로딩하는 것, 및 요청된 데이터를 메시지 버퍼에 전달하는 것을 포함할 수 있다. 데이터가 메시지 버퍼에 의해 버퍼링되었으면, 데이터는 통신 서브 시스템(310)을 통해 제2 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-2))로 전달될 수 있다.
예를 들어, 확장 메모리 연산의 수행 동안, 제어기(115, 215, 315) 및/또는 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-1))는 호스트 커맨드(예를 들어, 도 1에 도시된 호스트(102)와 같은 호스트에 의해 생성된 확장 메모리 연산 수행을 개시하기 위한 커맨드)에 의해 특정된 어드레스가 복수의 컴퓨팅 디바이스들(110, 210) 중 제2 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(210-2))의 메모리 자원에서의 위치에 대응한다고 결정할 수 있다. 이 경우, 컴퓨팅 디바이스 커맨드에 의해 특정된 어드레스에서 제2 컴퓨팅 디바이스(210-2)의 메모리 자원에 저장된 피연산자를 사용하여 확장 메모리 연산의 수행을 개시하기 위해 컴퓨팅 디바이스 커맨드가 생성되고 제어기(115, 215, 315) 및/또는 제1 컴퓨팅 디바이스(210-1)로부터 제2 컴퓨팅 디바이스(210-2)로 발송될 수 있다.
컴퓨팅 디바이스 커맨드의 수신에 응답하여, 제2 컴퓨팅 디바이스(210-2)는 컴퓨팅 디바이스 커맨드에 의해 특정된 어드레스에서 제2 컴퓨팅 디바이스(210-2)의 메모리 자원에 저장된 피연산자를 사용하여 확장 메모리 연산을 수행할 수 있다. 이는 호스트와 스토리지 제어기 및/또는 컴퓨팅 디바이스들(210, 310) 사이로부터의 커맨드 트래픽을 감소시킬 수 있는데, 이는 호스트가 확장 메모리 연산의 수행을 야기하기 위한 추가적인 커맨드들을 생성할 필요가 없기 때문이며, 이는 예를 들어, 호스트로의 그리고 호스트로부터의 커맨드들의 전달과 연관된 시간을 감소시킴으로써 컴퓨팅 시스템의 전체 성능을 증가시킬 수 있다.
일부 실시예들에서, 제어기(115, 215, 315)는 확장 메모리 연산을 수행하는 것이 다수의 서브 연산들을 수행하는 것을 포함할 수 있다고 결정할 수 있다. 예를 들어, 확장 메모리 연산은 전체 확장 메모리 연산을 수행하는 것의 일부로서 수행될 수 있는 두 개 이상의 서브 연산들로 파싱 또는 분해될 수 있다. 이 경우, 제어기(115, 215, 315) 및/또는 통신 서브 시스템들(106, 108, 206, 208, 308)은 다양한 컴퓨팅 디바이스들(110, 210, 310)에 의한 서브 연산들의 수행을 가능하게 하기 위해 상술한 어드레스 가시성을 이용할 수 있다. 서브 연산의 완료에 응답하여, 제어기(115, 215, 315)는 서브 연산들의 결과들을 확장 메모리 연산의 결과에 대응하는 단일 결과로 합칠 수 있다.
다른 실시예들에서, 컴퓨팅 디바이스들(110, 210, 310)에 저장된 데이터를 요청하는 애플리케이션은 어느 컴퓨팅 디바이스들(110, 210, 310)이 요청된 데이터를 포함하는지를 알 수 있다(예를 들어, 이에 대응하는 정보를 제공받을 수 있다). 이 예에서, 애플리케이션은 관련 컴퓨팅 디바이스(110, 210, 310)로부터의 데이터를 요청할 수 있고/거나 어드레스는 다수의 컴퓨팅 디바이스들(110, 210, 310)로 로딩될 수 있고 통신 서브 시스템들(108, 106, 208, 206, 308)을 통해 데이터를 요청하는 애플리케이션에 의해 액세스될 수 있다.
제어기(115, 215, 315)는 통신 서브 시스템들(108, 106, 208, 206, 308)로부터 물리적으로 분리되는 별개의 회로부일 수 있고, 컴퓨팅 디바이스들(110, 210, 310), 메모리 제어기(112, 212, 312) 및/또는 제어기(115, 215, 315) 사이의 통신을 가능하게 하는 하나 이상의 집적 회로로서 각각 제공될 수 있다. 통신 서브 시스템들(108, 106, 208, 206, 308)의 비제한적인 예들은 제어기(115, 215, 315), 컴퓨팅 디바이스들(110, 210, 310), 및/또는 메모리 제어기(112, 212, 312)의 상호 연결 및/또는 상호 운용을 가능하게 하는 XBAR 또는 다른 통신 서브 시스템을 포함할 수 있다.
상술한 바와 같이, 제어기(115, 215, 315), 통신 서브 시스템들(108, 106, 208, 206, 308), 및/또는 호스트(예를 들어, 도 1에 도시된 호스트(102))에 의해 생성된 커맨드의 수신에 응답하여, 컴퓨팅 디바이스들(110, 210, 310)에 저장된 데이터를 사용하는 그리고/또는 컴퓨팅 디바이스들(110, 210, 310)을 통해 스트리밍된 데이터 블록들로부터 확장 메모리 연산들의 수행이 실현될 수 있다.
도 4는 본 개시의 다수의 실시예들에 따른 제1 복수의 통신 서브 시스템들(406), 제2 통신 서브 시스템(408)을 포함하는 장치(404), 및 복수의 메모리 디바이스들(416)을 컴퓨팅 시스템(400) 형태의 기능 블록도이다.
도 4에 도시된 바와 같이, 장치(404)는 컴퓨팅 디바이스(예를 들어, 컴퓨팅 코어)를 포함할 수 있다. 일부 실시예들에서, 장치(404)는 FPGA일 수 있다. 도 4에 도시된 바와 같이, 그리고 도 3에서 유사하게, 복수의 컴퓨팅 디바이스들(410)은 (예로서, 각각 도 1 및 도 2에 도시된 (멀티플렉서들일 수 있는) 통신 서브 시스템들(108 및 208)과 같은 추가적인 통신 서브 시스템 세트를 통해 결합되지 않고) 복수의 통신 서브 시스템들(406)에 각각 결합될 수 있는 포트들(411)을 포함할 수 있다. 컴퓨팅 디바이스(410)는 메모리 포트("MemPort")(411-1), 시스템 포트 "SystemPort")(411-2), 주변 장치 포트("PeriphPort")(411-3), 및 프런트 포트("FrontPort")(411-4)를 포함하는 대응하는 포트 연결부들을 통해 복수의 통신 서브 시스템들(406)에 결합될 수 있다.
메모리 포트(411-1)는 특히, 메모리 포트로부터 데이터를 수신하고 데이터를 메모리 제어기(412)에 전달하는 것으로 지정된 통신 서브 시스템(406-1)에 직접 결합될 수 있다. 도 3과 대조적으로, 도 4는 시스템 포트(411-2)가 제2 통신 서브 시스템(406-2)에 직접 결합되는 버퍼(419)에 직접 결합되는 것을 도시한다. 제2 통신 서브 시스템(406-2)은 마찬가지로 추가적인 버퍼(417)에 결합된다. 추가적인 버퍼(417)는 추가적인 통신 서브 시스템(408)에 결합된다. 도 2에 유사하게 도시된 바와 같이, 도 4는 복수의 하드웨어 가속기들(414-1, 414-2, 414-3) 각각에 각각 결합되는 통신 서브 시스템(408)을 도시한다.
또한, 주변 장치 포트(411-3)는 특히, 주변 장치 포트(411-3)로부터 데이터를 수신하고 데이터를 직렬 포트(418)로 전달하는 것으로 지정된 통신 서브 시스템(406-5)에 직접 결합될 수 있다. 프런트 포트(411-4)는 특히, 프런트 포트(411-4)로부터 데이터를 수신하고 데이터를 호스트 인터페이스(420)로, 그리고 후속해서 채널들(403 및/또는 405)을 통해 호스트(402)로 전달하는 것으로 지정된 통신 서브 시스템(406-6)에 직접 결합될 수 있다. 이 실시예에서, 하드웨어 가속기들(414)은 멀티플렉서를 통해 컴퓨팅 디바이스(410)에 결합될 수 있다. 대조적으로, 멀티플렉서는 제어기(412), 직렬 포트(418), 및/또는 호스트 인터페이스(420)를 컴퓨팅 디바이스(310)에 결합하는 데 사용되지 않을 수 있지만, 오히려 포트들 및 통신 서브 시스템은 데이터 전달을 위해 직접 연결된다.
도 5는 본 개시의 다수의 실시예들에 따른 다수의 포트들(511-1, 511-2, 511-3, 511-4)을 포함하는 컴퓨팅 코어(510)의 장치 형태의 기능 블록도이다. 컴퓨팅 코어(510)는 메모리 관리 유닛(memory management unit, MMU)(520), 물리적 메모리 보호(physical memory protection, PMP) 유닛(522), 및 캐시(524)를 포함할 수 있다.
MMU(520)는 프로세서와 연관된 메모리 및 캐싱 연산들에 사용되는 컴퓨터 하드웨어 구성요소를 지칭한다. MMU(520)는 메모리 관리를 담당하고 프로세서로 통합될 수 있거나, 또는 일부 예들에서, 별개의 집적 회로(IC) 칩 상에 있을 수 있다. MMU(520)는 랜덤 액세스 메모리(RAM) 및 캐시 메모리의 프로세서의 사용을 감시하고 조절하는 것을 포함할 수 있는 하드웨어 메모리 관리에 사용될 수 있다. MMU(520)는 운영 체제(OS) 메모리 관리에 사용될 수 있으며, 이는 각 실행 프로그램의 객체들 및 데이터 구조들에 적절한 메모리 자원들의 가용성을 보장할 수 있다. MMU(520)는 애플리케이션 메모리 관리에 사용될 수 있으며, 이는 각 개별 프로그램의 요청되거나 사용되는 메모리를 할당할 수 있고, 그 다음 연산이 끝나거나 공간이 이용 가능하게 될 때 해제된 메모리 공간을 재활용할 수 있다.
일 실시예에서, PMP 유닛(522)은 메모리에 대한 액세스를 제한하고 프로세스들을 서로 분리시키는 데 사용될 수 있다. PMP 유닛(522)은 특정된 메모리 영역들에 대한 메모리 액세스 권한들(판독, 기록, 실행)을 설정하는 데 사용될 수 있다. PMP 유닛(522)은 4 바이트의 최소 영역 크기를 갖는 8개의 영역들을 지원할 수 있다. 일부 예들에서, PMP 유닛(522)은 단지 M 모드로만 프로그래밍될 수 있다. PMP 유닛(522)은 U 모드 액세스들에 대한 허가들을 시행할 수 있다. 그러나, 잠금 영역들은 M 모드에 대한 그들의 허가들을 추가로 시행할 수 있다. 캐시(524)는 SRAM 캐시, 3D 크로스 포인트 캐시 등일 수 있다. 캐시(524)는 8 KB, 16 KB 및 32 KB 등을 포함할 수 있고, 오류 정정 코딩(ECC)을 포함할 수 있다.
컴퓨팅 코어(510)는 또한 메모리 포트(511-1), 시스템 포트(511-2), 주변 장치 포트(511-3), 및 프런트 포트(511-4)를 포함하는 복수의 포트들을 포함할 수 있다. 메모리 포트(511-1)는 메모리 포트(511-1)로부터 데이터를 수신하도록 특별히 특정된 통신 서브 시스템(도 3에 도시됨)에 직접 결합될 수 있다. 시스템 포트(511-2)는 시스템 포트(511-2)로부터 데이터를 수신하도록 특별히 지정된 통신 서브 시스템에 직접 결합될 수 있다. 시스템 포트(511-2)를 통한 데이터는 가속기(예를 들어, 온 칩 가속기)로 전달될 수 있다. 주변 장치 포트(511-3)는 주변 장치 포트(511-3)로부터 데이터를 수신하고 이 데이터를 궁극적으로 직렬 포트로 전달하도록 특별히 지정된 통신 서브 시스템에 직접 결합될 수 있다. 프런트 포트(511-4)는 프런트 포트(511-4)로부터 데이터를 수신하도록 특별히 지정된 통신 서브 시스템에 직접 결합될 수 있고, 이 데이터는 궁극적으로 호스트 인터페이스로, 그리고 후속해서 호스트로 전달될 수 있다.
컴퓨팅 코어(510)는 완전 리눅스 가능 캐시 코히어런트 64 비트 RISC-V 프로세서일 수 있다. 일부 예들에서, 메모리 포트(511-1), 시스템 포트(511-2), 및 주변 장치 포트(511-3)는 발신 포트들일 수 있고, 프런트 포트(511-4)는 착신 포트일 수 있다. 컴퓨팅 코어(510)의 예는 U54-MC 컴퓨팅 코어를 포함할 수 있다. 컴퓨팅 코어(510)는 명령어 메모리 시스템, 명령어 페치 유닛, 실행 파이프라인 유닛, 데이터 메모리 시스템을 포함할 수 있고, 글로벌, 소프트웨어, 및 타이머 인터럽트들에 대한 지원을 포함할 수 있다. 명령어 메모리 시스템은 16 키비바이트(KiB) 2웨이 집합 연관 명령어 캐시를 포함할 수 있다. 명령어 메모리 시스템에서의 모든 블록들의 액세스 레이턴시는 하나의 클록 사이클일 수 있다. 명령어 캐시는 플랫폼 메모리 시스템의 나머지와 코히어런트하게 유지되지 않을 수 있다. 명령어 메모리에 대한 기록은 FENCE.I 명령어들을 실행함으로써 명령어 페치 스트림과 동기화될 수 있다. 명령어 캐시는 64 바이트의 라인 크기를 가질 수 있고, 캐시 라인 필은 컴퓨팅 코어(510) 외부의 버스트 액세스를 트리거할 수 있다.
명령어 페치 유닛은 프로세서 코어의 성능을 개선하기 위한 분기 예측 하드웨어를 포함할 수 있다. 분기 예측기는 취해진 분기들의 타겟을 예측할 수 있는 28 엔트리 분기 타겟 버퍼(BTB), 조건부 분기들의 방향을 예측 할 수 있는 512 엔트리 분기 이력 테이블(BHT), 및 프로시저 리턴의 타겟을 예측할 수 있는 6 엔트리 리턴 어드레스 스택(RAS)을 포함할 수 있다. 분기 예측기는 1 사이클 레이턴시를 가질 수 있어서, 정확하게 예측된 제어 흐름 명령어들은 페널티를 초래하지 않는다. 제어 흐름 명령어들의 부정확한 예측은 3 사이클 패널티를 초래할 수 있다.
실행 파이프라인 유닛은 단일 발행, 순차 파이프라인일 수 있다. 파이프라인은 다섯 개의 스테이지들: 명령어 페치, 명령어 디코드 및 레지스터 페치, 실행, 데이터 메모리 액세스, 및 레지스터 후기록을 포함할 수 있다. 파이프라인은 클록 사이클 당 하나의 명령어의 피크 실행 레이트를 가질 수 있고, 대부분의 명령어들이 1 사이클 결과 레이턴시를 갖도록 완전히 우회될 수 있다. 파이프라인은 기록후 판독 및 기록후 기록 위험들에 대해 인터록킹될 수 있어서, 명령어들이 스톨을 회피하도록 스케줄링될 수 있다.
데이터 메모리 시스템은 8 KiB까지 지원할 수 있는 DTIM 인터페이스를 포함할 수 있다. 코어로부터 그 자체의 DTIM까지의 액세스 레이턴시는 전체 워드들에 대해 두 개의 클록 사이클들 및 더 작은 양들에 대해 세 개의 클록 사이클들일 수 있다. 하나의 코어로부터 임의의 다른 코어의 DTIM으로의 메모리 요청들은 코어로부터 그 자체의 DTIM까지의 메모리 요청들만큼 성능 기준에 맞지 않을 수 있다. 오정렬된 액세스들은 하드웨어에서 지원되지 않고, 소프트웨어 에뮬레이션을 가능하게 하기 위해 트랩을 초래할 수 있다.
일부 실시예들에서, 컴퓨팅 코어(510)는 32 비트 단일 정밀도 및 64 비트 이중 정밀도 산술을 위한 IEEE 754-2008 부동 소수점 표준에 대한 전체 하드웨어 지원을 제공할 수 있는 부동 소수점 유닛(FPU)을 포함할 수 있다. FPU는 준정상 및 IEEE 디폴트 값들에 대한 완전한 하드웨어 지원을 갖는, 완전히 파이프라이닝된 승산-가산 융합 유닛 및 반복적 제산 및 제곱근 유닛, 크기 비교기들, 및 부동-정수 변환 유닛들을 포함할 수 있다.
도 6은 본 개시의 다수의 실시예들에 따른 확장 메모리 인터페이스에 대응하는 예시적인 방법(628)을 나타내는 흐름도이다. 블록(630)에서, 본 방법(628)은 호스트 디바이스와 비휘발성 메모리 디바이스 사이에 결합된 처리 유닛에서, 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 수행될 복수의 연산들을 나타내는 시그널링을 수신하는 단계를 포함할 수 있다. 연산들의 양은 위에서 설명된 바와 같은 확장 메모리 연산들을 포함할 수 있다.
블록(632)에서, 본 방법(628)은 처리 유닛에서, 시그널링에 응답하여 복수의 연산들 중 적어도 하나의 연산을 수행하는 단계를 포함할 수 있다. (도 1 내지 도 4의 컴퓨팅 디바이스(110, 210, 310, 410)와 같은) 컴퓨팅 디바이스는 적어도 하나의 연산을 수행하는 처리 유닛을 포함할 수있다. 데이터의 블록의 수신에 응답하여, 데이터의 블록을 사용하여, 복수의 컴퓨팅 디바이스들 중 적어도 하나에 의해 데이터의 크기를 제1 크기로부터 제2 크기로 감소시키는 연산이 수행될 수 있다. 연산의 수행은 제어기에 의해 야기될 수 있다. 제어기는 본원에서, 도 1 내지 도 3에 도시된 제어기(115, 215, 315)와 유사할 수 있다. 일부 실시예들에서, 연산을 수행하는 단계는 본원에서 설명된 바와 같이, 확장 메모리 연산을 수행하는 단계를 포함할 수 있다. 연산은 특정 컴퓨팅 디바이스에 의해, 제어기에 결합 가능한 호스트로부터의 호스트 커맨드의 수신의 부재 시에 연산을 수행하는 것을 더 포함할 수 있다. 연산의 수행의 완료에 응답하여, 방법(628)은 제어기에 결합 가능한 호스트에 통지를 발송하는 단계를 포함할 수 있다.
블록(634)에서, 본 방법(628)은 비휘발성 메모리 디바이스에서의 제어기를 통해, 비휘발성 메모리 디바이스 내의 메모리 어레이의 일 부분에 액세스하는 단계를 포함할 수 있다. 비휘발성 메모리 디바이스는 메모리 제어기에 의해 액세스될 수 있고, 메모리 제어기는 다량의 연산들 중 하나를 수행하기 위해 액세스된 데이터를 컴퓨팅 디바이스, 하드웨어 가속기 등에 발신할 수 있다. 방법(628)은 추가적인 제어기(예를 들어, 메모리 제어기)를 사용하여, 데이터 블록들이 메모리 디바이스로부터 복수의 통신 서브 시스템들로 전달되게 하는 단계를 더 포함할 수 있다. 방법(628)은 복수의 통신 서브 시스템들을 통해, 데이터 블록에 대해 연산을 수행하기 위해 복수의 컴퓨팅 디바이스들 중 각 컴퓨팅 디바이스들에 대응하는 자원들을 할당하는 단계를 더 포함할 수 있다.
블록(636)에서, 본 방법(628)은 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 복수의 연산들 중 하나 이상의 추가적인 연산을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 하드웨어 가속기에 송신하는 단계를 포함할 수 있다. 예를 들어, 제1 연산을 나타내는 시그널링은 제1 하드웨어 가속기에 발신될 수 있고, 제2 연산을 나타내는 시그널링이 제2 하드웨어 가속기에 발신될 수 있는 등이다.
일부 실시예들에서, 연산의 수행을 개시하기 위한 커맨드는 특정 컴퓨팅 디바이스의 메모리 어레이에서의 위치에 대응하는 어드레스를 포함할 수 있고, 방법(628)은 특정 컴퓨팅 디바이스에서의 위치에 대응하는 어드레스에 연산의 결과를 저장하는 단계를 포함할 수 . 예를 들어, 방법(628)은 연산의 수행에 대응하는 피연산자가 확장 메모리 연산의 수행 이전에 저장되었던 특정 컴퓨팅 디바이스에서의 메모리 위치에 대응하는 어드레스에 연산의 결과를 저장하는 단계를 포함할 수 있다. 즉, 일부 실시예들에서, 연산의 결과는 연산의 수행 이전에 연산에 대한 피연산자로서 사용되었던 데이터가 저장되었던 컴퓨팅 디바이스의 동일한 어드레스 위치에 저장될 수 있다.
일부 실시예들에서, 방법(628)은 제어기에 의해, 연산의 수행에 대응하는 피연산자가 특정 컴퓨팅 디바이스에 의해 저장되지 않는다고 결정하는 단계를 포함할 수 있다. 이러한 결정에 응답하여, 방법(628)은 제어기에 의해, 연산의 수행에 대응하는 피연산자가 복수의 컴퓨팅 디바이스들에 결합된 메모리 디바이스에 저장된다고 결정하는 단계를 더 포함할 수 있다. 방법(628)은 메모리 디바이스로부터 연산의 수행에 대응하는 피연산자를 검색하는 단계, 연산의 성능에 대응하는 피연산자가 복수의 컴퓨팅 디바이스 중 적어도 하나의 컴퓨팅 디바이스에 저장되게 하는 단계, 및/또는 적어도 하나의 연산 디바이스를 사용하여 연산의 수행을 야기하는 단계를 더 포함할 수 있다. 메모리 디바이스는 도 1에 도시된 메모리 디바이스들(116)과 유사할 수 있다.
방법(628)은 일부 실시예들에서, 적어도 하나의 서브 연산이 연산의 일부로서 수행될 것이라고 결정하는 단계, 서브 연산의 수행을 야기하기 위한 커맨드를 특정 컴퓨팅 디바이스와 상이한 컴퓨팅 디바이스에 발송하는 단계, 및/또는 특정 컴퓨팅 디바이스와 상이한 컴퓨팅 디바이스를 사용하여, 연산의 수행의 일부로서 서브 연산을 수행하는 단계를 더 포함할 수 있다. 예를 들어, 일부 실시예들에서, 연산이 다수의 서브 연산들로 분해될 것이라는 결정이 이루어질 수 있고, 제어기는 상이한 컴퓨팅 디바이스들이 연산을 수행하는 부분으로서 상이한 서브 연산들을 수행하게 할 수 있다. 일부 실시예들에서, 제어기는 본원에서 도 1 내지 도 4에 도시된 108, 106, 208, 206, 308, 306, 및 408, 406과 같은 제1 및 제2 복수의 통신 서브 시스템들과 협력하여, 연산의 수행의 일부로서 컴퓨팅 디바이스들 중 둘 이상 그리고/또는 하드웨어 가속기들 중 이상에 서브 연산들을 부여할 수 있다.
본 명세서에서 구체적인 실시예들이 예시되고 설명되었지만, 해당 기술분야의 통상의 기술자들은 동일한 결과들을 달성하도록 계산된 배열이 제시된 구체적인 실시예들을 대체할 수 있다고 이해할 것이다. 본 개시는 본 개시의 하나 이상의 실시예의 개조 또는 변형을 포괄하는 것으로 의도된다. 상기한 설명은 제한적인 방식이 아니라, 예시적인 방식으로 이루어진 것으로 이해되어야 한다. 상기한 설명을 검토할 때 해당 기술분야의 통상의 기술자들에게 상기한 실시예들, 및 본 명세서에서 구체적으로 설명되지 않은 다른 실시예들의 조합이 명백해질 것이다. 본 개시의 하나 이상의 실시예의 범위는 상기한 구조들 및 프로세스들이 사용되는 다른 적용예들을 포함한다. 따라서, 본 개시의 하나 이상의 실시예의 범위는 첨부된 청구항들을 참조하여, 이러한 청구항들에 부여되는 균등물들의 전체 범위와 함께 결정되어야 한다.
앞에서의 발명을 실시하기 위한 구체적인 내용에서, 본 개시를 간략화하기 위해 몇몇 피처들이 하나의 실시예에서 함께 그룹화된다. 본 개시의 방법은 본 개시의 개시된 실시예들이 각 청구항에 명시적으로 나열된 것보다 더 많은 특징들을 사용해야 한다는 의도를 반영하는 것으로서 해석되지 않아야 한다. 더 정확히 말하면, 다음의 청구항들이 반영하는 바와 같이, 본 발명의 요지는 하나의 개시된 실시예의 모든 특징들보다 더 적은 특징들에 있다. 이에 따라, 다음의 청구항들은 이에 의해 발명을 실시하기 위한 구체적인 내용으로 통합되며, 각 청구항은 별개의 실시예로서 독립적이다.

Claims (23)

  1. 방법으로서,
    호스트 디바이스와 비휘발성 메모리 디바이스 사이에 결합된 처리 유닛에서, 상기 비휘발성 메모리 디바이스에 기록되거나 상기 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 수행될 복수의 연산들을 나타내는 시그널링을 수신하는 단계;
    상기 처리 유닛에서, 상기 시그널링에 응답하여 상기 복수의 연산들 중 적어도 하나의 연산을 수행하는 단계;
    상기 처리 유닛 또는 비휘발성 메모리 디바이스에서의 제어기를 통해, 상기 비휘발성 메모리 디바이스 내의 메모리 어레이의 일 부분에 액세스하는 단계; 및
    상기 비휘발성 메모리 디바이스에 기록되거나 상기 비휘발성 메모리 디바이스로부터 판독된 데이터에 대해 상기 복수의 연산들 중 하나 이상의 추가적인 연산을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 하드웨어 가속기에 송신하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 비휘발성 메모리 디바이스의 상기 부분에 액세스하는 단계는 상 변화 메모리 셀들 또는 저항성 랜덤 액세스 메모리(resistive random access memory, ReRAM)의 셀들, 또는 이들 양자의 어레이에 액세스하는 단계를 포함하는 것인, 방법.
  3. 제1항에 있어서, 상기 복수의 연산들 중 적어도 하나를 수행하는 단계는 데이터가 순서화, 재순서화, 제거, 또는 폐기되는 연산, 또는 콤마 분리 값 파싱 연산, 또는 이들의 임의의 조합을 수행하는 단계를 더 포함하는 것인, 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 데이터의 부분에 액세스하는 단계는 상기 비휘발성 메모리 디바이스의 상기 부분으로부터 데이터를 판독하는 단계 또는 상기 비휘발성 메모리의 부분에 데이터를 기록하는 단계, 또는 양자를 포함하는 것인, 방법.
  5. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 하나 이상의 추가적인 연산을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 상기 하드웨어 가속기에 송신하는 단계는 상기 하드웨어 가속기에 의해 상기 하나 이상 추가적인 연산을 수행하기 위한 커맨드의 제1 부분을 나타내는 추가적인 시그널링을 송신하는 단계를 더 포함하는 것인, 방법.
  6. 제5항에 있어서, 상기 추가적인 하드웨어 가속기에 의해 상기 하나 이상의 추가적인 연산을 수행하기 위한 커맨드의 제2 부분을 나타내는 또 다른 추가적인 시그널링을 송신하는 단계를 더 포함하는, 방법.
  7. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 적어도 하나의 연산을 수행하는 것으로부터 기인하는 출력 데이터를 저장하도록 상기 비휘발성 메모리 디바이스의 일 부분을 결정하는 단계를 더 포함하는, 방법.
  8. 제1항에 있어서, 상기 적어도 하나의 연산이 실행되었음을 나타내는 응답을 상기 하드웨어 가속기로부터 수신하는 단계를 더 포함하는, 방법.
  9. 제8항에 있어서, 상기 적어도 하나의 연산이 실행되었음을 나타내는 응답을 호스트에 발신하는 단계를 더 포함하는, 방법.
  10. 방법으로서,
    하드웨어 가속기에서 그리고 컴퓨팅 디바이스로부터, 비휘발성 메모리 디바이스에 기록되거나 비휘발성 메모리 디바이스로부터 판독되는 데이터에 대해 수행될 연산을 나타내는 시그널링을 수신하는 단계 - 상기 시그널링은:
    상기 비휘발성 메모리 디바이스에서의 위치; 및
    상기 하드웨어 가속기에 의해 실행될 연산을 포함함 -;
    상기 위치의 데이터에 액세스하는 단계;
    상기 하드웨어 가속기에 의해 상기 데이터에 대해 상기 연산을 수행하는 단계; 및
    상기 연산이 실행되었다는 표시를 상기 컴퓨팅 디바이스에 발신하는 단계를 포함하는, 방법.
  11. 제10항에 있어서, 상기 연산을 나타내는 시그널링은 상기 컴퓨팅 디바이스에 의해 데이터의 크기를 제1 크기로부터 제2 크기로 감소시키는 것과 연관된 시그널링을 포함하는 것인, 방법.
  12. 제11항에 있어서, 상기 하드웨어 가속기로부터 추가적인 하드웨어 가속기로 추가적인 시그널링 - 상기 시그널링은 상기 연산의 일 부분을 수행하는 것을 나타냄 - 을 발신하는 단계를 더 포함하며, 방법.
  13. 제12항에 있어서,
    상기 추가적인 하드웨어 가속기에서 상기 연산의 상기 부분을 수행하는 단계;
    상기 하드웨어 가속기에서 상기 연산의 추가적인 부분을 수행하는 단계; 및
    상기 연산의 수행된 부분의 결과와 상기 연산의 수행된 추가적인 부분의 결과를 조합하는 단계를 더 포함하는, 방법.
  14. 장치로서,
    컴퓨팅 디바이스를 포함하며, 상기 컴퓨팅 디바이스는:
    데이터 블록에 대해 연산을 수행하도록 구성된 처리 유닛;
    상기 처리 유닛에 대한 캐시로서 구성된 메모리 어레이;
    상기 컴퓨팅 디바이스 및 메모리 디바이스에 결합된 복수의 통신 서브 시스템들; 및
    상기 통신 서브 시스템에 결합된 복수의 하드웨어 가속기들을 포함하며, 상기 컴퓨팅 디바이스는:
    호스트 디바이스와 상기 메모리 디바이스 사이에 결합된 상기 처리 유닛에서, 상기 메모리 디바이스에 기록되거나 상기 메모리 디바이스로부터 판독된 데이터에 대해 수행될 연산을 나타내는 시그널링을 수신하고;
    상기 통신 서브 시스템을 통해, 상기 복수의 하드웨어 가속기들 중 적어도 하나에, 상기 연산의 적어도 일 부분을 수행하기 위한 커맨드를 나타내는 추가적인 시그널링을 송신하며;
    상기 복수의 하드웨어 가속기들 중 적어도 하나로부터 상기 연산을 수행한 결과를 수신하는 것인, 장치.
  15. 제14항에 있어서, 상기 메모리 디바이스는 더블 데이터 레이트(double data rate, DDR) 메모리, 3차원(3D) 크로스 포인트 메모리, 또는 NAND 메모리, 또는 이들의 임의의 조합 중 적어도 하나를 포함하는 것인, 장치.
  16. 제14항에 있어서, 상기 복수의 하드웨어 가속기들 중 적어도 하나는 온 칩(on-chip)이고, 정적 랜덤 액세스 디바이스(static random access device, SRAM)에 결합되는 것인, 장치.
  17. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 하드웨어 가속기는 온 칩이고, 산술 연산 또는 논리 연산, 또는 양자를 수행하도록 구성된 산술 논리 유닛(arithmetic logic unit, ALU) 에 결합되는 것인, 장치.
  18. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 컴퓨팅 디바이스는 축소 명령어 세트 컴퓨터(reduced instruction set computer, RISC)-V인 것인, 장치.
  19. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 컴퓨팅 디바이스는 상기 메모리 디바이스에서의 특정 위치의 어드레스를 나타내는 시그널링을 포함하는 상기 커맨드를 나타내는 추가적인 시그널링을 송신하는 것인, 장치.
  20. 제19항에 있어서, 상기 복수의 하드웨어 가속기들 중 적어도 하나는 상기 특정 위치의 상기 메모리 디바이스에 액세스함으로써 상기 연산의 적어도 일 부분을 수행하도록 구성되는 것인, 장치.
  21. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 복수의 하드웨어 가속기들 중 적어도 하나는 상기 연산의 상기 부분의 서브 부분을 수행하기 위한 상기 복수의 하드웨어 가속기들 중 추가적인 하드웨어 가속기에 대한 요청을 나타내는 추가의 시그널링을 발신하도록 구성되는 것인, 장치.
  22. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 복수의 하드웨어 가속기들 중 상기 추가적인 하드웨어 가속기는:
    상기 서브 부분을 수행하도록; 그리고
    상기 서브 부분을 수행한 결과를 상기 복수의 하드웨어 가속기들 중 적어도 하나에 발신하도록 구성되는 것인, 장치.
  23. 제14항 내지 제16항 중 어느 한 항에 있어서, 상기 컴퓨팅 디바이스는:
    상기 복수의 하드웨어 가속기들 중 적어도 하나로부터 수신된 제1 결과; 및
    상기 복수의 하드웨어 가속기들 중 추가적인 하드웨어 가속기로부터의 제2 결과를 조합하도록 구성되는 것인, 장치.
KR1020227027010A 2020-01-16 2020-12-14 확장 메모리 통신 KR20220116566A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/744,541 US10910048B1 (en) 2020-01-16 2020-01-16 Extended memory communication
US16/744,541 2020-01-16
PCT/US2020/064831 WO2021145999A1 (en) 2020-01-16 2020-12-14 Extended memory communication

Publications (1)

Publication Number Publication Date
KR20220116566A true KR20220116566A (ko) 2022-08-23

Family

ID=74260881

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227027010A KR20220116566A (ko) 2020-01-16 2020-12-14 확장 메모리 통신

Country Status (5)

Country Link
US (4) US10910048B1 (ko)
KR (1) KR20220116566A (ko)
CN (1) CN114945984A (ko)
DE (1) DE112020006536T5 (ko)
WO (1) WO2021145999A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10910048B1 (en) * 2020-01-16 2021-02-02 Micron Technology, Inc. Extended memory communication
US11693699B2 (en) * 2020-07-02 2023-07-04 Apple Inc. Hybrid memory in a dynamically power gated hardware accelerator

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100017649A1 (en) 2008-07-19 2010-01-21 Nanostar Corporation Data storage system with wear-leveling algorithm
US8438455B2 (en) 2008-12-31 2013-05-07 Intel Corporation Error correction in a solid state disk
US8560804B2 (en) 2009-09-14 2013-10-15 Bitmicro Networks, Inc. Reducing erase cycles in an electronic storage device that uses at least one erase-limited memory device
US9417998B2 (en) * 2012-01-26 2016-08-16 Memory Technologies Llc Apparatus and method to provide cache move with non-volatile mass memory system
US9582287B2 (en) * 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US9009171B1 (en) 2014-05-02 2015-04-14 Palantir Technologies Inc. Systems and methods for active column filtering
US9477295B2 (en) 2014-05-15 2016-10-25 Dell Products, L.P. Non-volatile memory express (NVMe) device power management
US20150371684A1 (en) 2014-06-18 2015-12-24 NXGN Data, Inc. Ultra high capacity ssd
US10388392B2 (en) * 2017-04-08 2019-08-20 Texas Instruments Incorporated Safe execution in place (XIP) from flash memory
US10996892B2 (en) * 2017-05-03 2021-05-04 Eidetic Communications Inc. Apparatus and method for controlling data acceleration
KR102514772B1 (ko) 2017-12-28 2023-03-28 삼성전자주식회사 비동기적 동작 수행이 가능한 비휘발성 메모리 장치와 이를 포함하는 메모리 시스템, 그리고 이의 동작 수행 방법
US10754578B2 (en) * 2018-05-09 2020-08-25 Micron Technology, Inc. Memory buffer management and bypass
US10713158B2 (en) * 2018-06-28 2020-07-14 Western Digital Technologies, Inc. Non-volatile storage system with dynamic allocation of applications to memory based on usage monitoring
US10649927B2 (en) 2018-08-20 2020-05-12 Intel Corporation Dual in-line memory module (DIMM) programmable accelerator card
US10910048B1 (en) * 2020-01-16 2021-02-02 Micron Technology, Inc. Extended memory communication

Also Published As

Publication number Publication date
US11164625B2 (en) 2021-11-02
US11810618B2 (en) 2023-11-07
WO2021145999A1 (en) 2021-07-22
US20240105260A1 (en) 2024-03-28
CN114945984A (zh) 2022-08-26
US20210225443A1 (en) 2021-07-22
US10910048B1 (en) 2021-02-02
US20220059163A1 (en) 2022-02-24
DE112020006536T5 (de) 2023-01-12

Similar Documents

Publication Publication Date Title
US10049061B2 (en) Active memory device gather, scatter, and filter
US20140047214A1 (en) Vector register file
US20140129799A1 (en) Address generation in an active memory device
US20240105260A1 (en) Extended memory communication
CN113900710B (zh) 扩展存储器组件
CN113994314B (zh) 扩展存储器接口
US11579882B2 (en) Extended memory operations
KR20230026423A (ko) 확장 메모리 뉴로모픽 컴포넌트
CN114127852B (zh) 扩展存储器接口
US11481317B2 (en) Extended memory architecture
EP3931707A1 (en) Storage device operation orchestration
US20240086102A1 (en) Systems and methods for executing data processing functions
US20230393849A1 (en) Method and apparatus to expedite system services using processing-in-memory (pim)

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E601 Decision to refuse application