KR101890426B1 - 저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스 - Google Patents

저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스 Download PDF

Info

Publication number
KR101890426B1
KR101890426B1 KR1020160147249A KR20160147249A KR101890426B1 KR 101890426 B1 KR101890426 B1 KR 101890426B1 KR 1020160147249 A KR1020160147249 A KR 1020160147249A KR 20160147249 A KR20160147249 A KR 20160147249A KR 101890426 B1 KR101890426 B1 KR 101890426B1
Authority
KR
South Korea
Prior art keywords
memory
processing element
data
address
coprocessor
Prior art date
Application number
KR1020160147249A
Other languages
English (en)
Other versions
KR20180012172A (ko
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 주식회사 맴레이
Priority to CN201611108726.2A priority Critical patent/CN107656883A/zh
Publication of KR20180012172A publication Critical patent/KR20180012172A/ko
Application granted granted Critical
Publication of KR101890426B1 publication Critical patent/KR101890426B1/ko

Links

Images

Classifications

    • 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/061Improving I/O performance
    • 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/1673Details of memory controller using buffers
    • 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/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Semiconductor Memories (AREA)

Abstract

호스트의 CPU의 기능을 보조하거나 CPU와 별도로 데이터 프로세싱을 수행하는 코프로세서에서, 코프로세서의 코어에 해당하는 프로세싱 엘리먼트가 호스트에서 전달되는 커널을 실행하며, 서버가 프로세싱 엘리먼트에서 커널의 실행에 따라 생성된 메모리 요청을 관리한다. 메모리 컨트롤러가 저항 변화 메모리 모듈에 연결되어 있으며, 서버로부터 전달되는 메모리 요청에 따라 저항 변화 메모리 모듈과 프로세싱 엘리먼트 사이에서 메모리 요청에 따른 데이터를 이동시킨다. 네트워크가 프로세싱 엘리먼트, 서버 및 메모리 컨트롤러를 통합한다.

Description

저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스{RESISTANCE SWITCHING MEMORY BASED COPROCESSOR AND COMPUTING DEVICE INCLUDING THE SAME}
본 발명은 저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스에 관한 것이다.
현재 많은 병렬 연산을 상대적으로 낮은 전력 소모로 수행할 수 있는 그래픽 처리 유닛(graphic processing unit, GPU) 및 MIC(many integrated core) 디바이스와 같은 많은 코어 기반의 코프로세서(manycore-based coprocessor)가 널리 사용되고 있다. 이러한 코프로세서에서는 많은 수의 프로세싱 코어가 실행 컨트롤을 공유하면서 쓰레드 레벨 병렬화(thread-level parallelism) 및 데이터 레벨 병렬화(data-level parallelism)을 통해 수많은 조각의 데이터에 대해서 동일한 연산을 수행할 수 있다. 이에 따라 중앙 프로세싱 유닛(central processing unit, CPU)만 사용하는 시스템에 비해서, 코프로세서를 함께 사용하는 시스템에서는 상당한 속도 향상을 가져올 수 있다.
이와 같이 코프로세서는 전에 비해 많은 양의 데이터를 처리할 수 있으며, 데이터의 볼륨도 증가할 것으로 예상된다. 그런데 현재의 코프로세서는 호스트 메모리에 비해서 상대적으로 적은 크기의 온보드(on-board) 메모리를 채용하고 있다. 따라서 코프로세서는 많은 양의 데이터를 처리하기 위해서 호스트에 연결된 별도의 외부 스토리지 장치, 예를 들면 솔리드 스테이트 디스트(solid state disk, SSD)를 사용하고 있다.
그러나 코프로세서와 스토리지 장치가 서로 완전히 분리되어 있으며 서로 다른 소프트웨어 스택에 의해 관리되므로, 코프로세서가 스토리지 장치로부터 데이터를 읽거나 스토리지 장치로 데이터를 쓰기 위해서는, 사용자 공간과 커널 공간 사이에 불필요한 많은 메모리 할당/해제 및 데이터 복사가 이루어진다. 또한 커널 모듈이 사용자 공간에 직접 접근할 수 없으므로, 커널 공간과 사용자 공간 사이의 메모리 관리 및 데이터 복사 오버헤드를 피할 수 없다. 또한 데이터 복사에 동반한 커널 모드와 사용자 모드의 스위칭 오버헤드로 인해 데이터 이동에 지연이 발생할 수 있다. 이러한 오버헤드로 인해 코프로세서의 성능에 비해서 실제 속도 향상 효과가 크지 않다는 문제점이 있다.
본 발명이 이루고자 하는 과제는 CPU, 스토리지 장치 및 코프로세서 사이에서의 불필요한 데이터 이동/복사를 제거할 수 있는 상변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스를 제공하는 것이다.
본 발명의 한 실시예에 따르면, 호스트의 CPU의 기능을 보조하거나 상기 CPU와 별도로 데이터 프로세싱을 수행하는 코프로세서가 제공된다. 상기 코프로세서는 프로세싱 엘리먼트, 서버, 저항 변화 메모리(resistance switching memory) 모듈, 메모리 컨트롤러 및 네트=워크를 포함한다. 상기 프로세싱 엘리먼트는, 상기 코프로세서의 코어에 해당하며, 상기 호스트에서 전달되는 커널을 실행한다. 상기 서버는 상기 프로세싱 엘리먼트에서 상기 커널의 실행에 따라 생성된 메모리 요청을 관리한다. 상기 메모리 컨트롤러는 상기 저항 변화 메모리 모듈에 연결되어 있으며, 상기 프로세싱 엘리먼트가 상기 저항 변화 메모리 모듈에 액세스하도록 하여서, 컴퓨팅 디바이스의 운영 체제(operation system, OS)의 도움 없이 상기 서버로부터 전달되는 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈과 상기 프로세싱 엘리먼트 사이에서 상기 메모리 요청에 따른 데이터를 이동시킨다. 상기 네트워크는 상기 프로세싱 엘리먼트, 상기 서버 및 상기 메모리 컨트롤러를 통합한다.
상기 데이터의 이동 시에 상기 호스트로는 상기 데이터가 저장되지 않을 수 있다.
상기 서버는, 상기 커널의 실행을 위해 상기 저항 변화 메모리 모듈에 저장된 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장할 수 있다.
상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트의 캐시에 부트 어드레스로 저장할 수 있다.
상기 코프로세서는, 상기 서버의 제어에 따라 상기 프로세싱 엘리먼트의 슬립 모드를 제어하는 파워 슬립 컨트롤러를 더 포함할 수 있다. 이때, 상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하기 전에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 슬립 모드로 전환하고, 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장한 후에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 깨울 수 있다.
상기 코프로세서는, 상기 호스트와 통신하기 위한 인터페이스 모듈을 더 포함할 수 있다. 이때, 상기 서버가 상기 인터페이스 모듈을 통해 상기 호스트로부터의 인터럽트를 수신한 후에, 상기 메모리 컨트롤러가 상기 커널을 상기 호스트에서 상기 저항 변화 메모리 모듈로 저장할 수 있다.
상기 프로세싱 엘리먼트는 캐시를 포함할 수 있다. 상기 프로세싱 엘리먼트의 상기 캐시에서 미스가 발생한 경우, 상기 프로세싱 엘리먼트가 상기 메모리 요청을 상기 서버로 전달할 수 있다. 상기 메모리 컨트롤러는, 상기 컴퓨팅 디바이스의 다른 메모리의 도움 없이, 상기 저항 변화 메모리 모듈에서 상기 메모리 요청에 해당하는 데이터를 읽고, 읽은 데이터를 상기 프로세싱 엘리먼트의 캐시로 저장할 수 있다.
상기 프로세싱 엘리먼트는 캐시를 포함할 수 있다. 상기 메모리 요청을 데이터 쓰기를 요청하는 메모리 요청이고, 상기 메모리 컨트롤러는, 상기 컴퓨팅 디바이스의 다른 메모리의 도움 없이, 상기 프로세싱 엘리먼트의 캐시로부터 상기 메모리 요청에 해당하는 데이터를 로드하고, 로드한 데이터를 상기 저항 변화 메모리 모듈로 쓸 수 있다.
상기 저항 변화 메모리 모듈은 DDR(double data rate) 인터페이스를 채용할 수 있다.
상기 DDR 인터페이스는 비휘발성 메모리 인터페이스일 수 있다.
상기 저항 변화 메모리 모듈은, 복수의 저항 변화 메모리 셀을 포함하는 메모리 셀 어레이, 복수의 행 어드레스 버퍼, 그리고 상기 메모리 셀 어드레스에서 행을 선택하기 위한 행 디코더를 포함할 수 있다. 상기 메모리 컨트롤러는, 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈에 액세스하기 위한 행 어드레스를 상위 어드레스와 하위 어드레스로 나누고, 상기 상위 어드레스를 상기 복수의 행 어드레스 버퍼 중 타깃 행 어드레스 버퍼로 전달하고, 상기 하위 어드레스를 상기 행 디코더로 전달할 수 있다. 상기 행 디코더는 상기 타깃 행 어드레스 버퍼에 저장된 상기 상위 어드레스와 상기 메모리 컨트롤러로부터 수신한 상기 하위 어드레스를 결합한 어드레스에 기초해서 상기 행을 선택할 수 있다.
상기 메모리 컨트롤러는 상기 복수의 행 어드레스 버퍼 중 타깃 행 어드레스 버퍼를 선택하기 위한 어드레스를 상기 복수의 행 어드레스 버퍼로 전달할 수 있다.
상기 저항 변화 메모리 모듈은, 복수의 행 데이터 버퍼를 더 포함할 수 있다. 상기 메모리 셀 어레이에서 선택된 행에서 읽은 데이터는 상기 복수의 행 데이터 버퍼 중 타깃 행 데이터 버퍼에 저장될 수 있다.
상기 저항 변화 메모리 모듈은, 상기 복수의 메모리 셀 어레이에 매핑된 레지스터, 그리고 상기 레지스터의 값에 기초해서 상기 메모리 셀 어레이에 기입될 데이터를 저장하는 프로그램 버퍼를 더 포함할 수 있다. 이때, 상기 프로그램 버퍼에 저장된 데이터가 상기 메모리 셀 어레이에 기입될 수 있다.
상기 저항 변화 메모리 모듈은 상변화 메모리(phase-change memory) 모듈, 저항성 메모리(resistive memory) 모듈 또는 자기저항 메모리(magnetoresistive memory) 모듈을 포함할 수 있다.
본 발명의 또 다른 실시예에 따른 코프로세서는, 호스트와 통신하기 위한 인터페이스 모듈, 저항 변화 메모리 모듈, 프로세싱 엘리먼트, 서버, 메모리 컨트롤러 및 네트워크를 포함한다. 상기 저항 변화 메모리 모듈은 상기 호스트로부터 전달된 커널을 저장한다. 상기 프로세싱 엘리먼트는, 상기 코프로세서의 코어에 해당하며, 상기 저항 변화 메모리 모듈로부터 상기 커널을 로드하여서 실행한다. 상기 서버는 상기 인터페이스 모듈을 통해 상기 호스트와 통신하며, 상기 프로세싱 엘리먼트로부터 상기 커널의 실행에 따라 생성된 메모리 요청을 수신한다. 상기 메모리 컨트롤러는 상기 저항 변화 메모리 모듈에 연결되어 있으며, 상기 서버로부터 상기 메모리 요청을 수신하여 상기 프로세싱 엘리먼트가 저항 변화 메모리 모듈에 액세스하도록 한다. 상기 네트워크는 상기 인터페이스 모듈, 상기 프로세싱 엘리먼트, 상기 서버 및 상기 메모리 컨트롤러를 통합한다.
상기 메모리 컨트롤러는, 컴퓨팅 디바이스의 운영 체제 및 다른 메모리의 도움 없이, 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈에 액세스하여 상기 저항 변화 메모리 모듈와 상기 프로세싱 엘리먼트 사이에서 데이터를 이동시킬 수 있다.
상기 데이터의 이동 시에 상기 호스트로는 상기 데이터가 저장되지 않을 수 있다.
상기 서버는 상기 저항 변화 메모리 모듈에 저장된 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하고, 상기 프로세싱 엘리먼트는 상기 메모리 어드레스에 기초해서 상기 커널을 로드할 수 있다.
상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하기 전에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 슬립 모드로 전환하고, 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장한 후에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 깨울 수 있다.
본 발명의 또 다른 실시예에 따르면, 앞에서 설명한 실시예에 따른 코프로세서, CPU, 시스템 메모리, 그리고 상기 코프로세서, 상기 CPU 및 상기 시스템 메모리를 연결하는 메모리 브릿지를 포함하는 컴퓨팅 디바이스가 제공된다.
본 발명의 한 실시예에 따르면, 복수의 프로세싱 엘리먼트와 상변화 메모리를 물리적으로 통합하여서 코프로세서를 형성함으로써, 데이터 복사/이동에 따른 오버헤드를 줄일 수 있다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다.
도 2는 PRAM에서 하나의 메모리 셀을 개략적으로 나타내는 도면이다.
도 3은 도 2에 도시한 메모리 셀에 인가되는 전류를 나타내는 도면이다.
도 4는 도 2에 도시한 메모리 셀에 도 3에 도시한 전류가 인가될 때의 온도 변화를 나타내는 도면이다.
도 5는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서에서 PRAM 모듈의 개략적인 블록도이다.
도 6은 본 발명의 한 실시예에 따른 PRAM 모듈에서 메모리 셀 어레이의 파티션 방법의 한 예를 설명하는 도면이다.
도 7은 본 발명의 한 실시예에 따른 PRAM 모듈에서 하프 파티션의 개략적으로 설명하는 도면이다.
도 8a는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 개략적인 블록도이다.
도 8b는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서에서 에이전트의 개략적인 블록도이다.
도 9는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 3단계 어드레싱을 설명하는 도면이다.
도 10은 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 동작을 설명하는 도면이다.
도 11은 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 데이터 이동 방법을 나타내는 흐름도이다.
도 12는 기존의 컴퓨팅 디바이스의 코프로세서에서의 데이터 이동을 나타내는 도면이다.
도 13은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 코프로세서에서의 데이터 이동을 나타내는 도면이다.
도 14는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 프로그래밍 모델을 나타내는 도면이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 개략적인 블록도이다. 도 1은 가능한 컴퓨팅 디바이스의 한 예이며, 본 발명의 실시예에 따른 컴퓨팅 디바이스의 다른 다양한 구조로 구현될 수 있다.
도 1을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스는 CPU(110), 시스템 메모리(120) 및 저항 변화 메모리(resistance switching memory) 기반 코프로세서(130)를 포함한다.
저항 변화 메모리는 비휘발성 메모리로, 저장 매체(상변화 물질)의 저항율을 이용하는 상변화 메모리(phase-change memory, PCM), 메모리 소자의 저항을 이용하는 저항성 메모리(resistive memory) 또는 자기저항(magnetoresistive) 메모리를 포함한다. 아래에서 설명하는 실시예에서는 PCM, 특히 상변화 랜덤 액세스 메모리(phase-change random access memory, PRAM)를 저항 변화 메모리의 한 예로 설명하지만, 본 발명의 실시예는 PCM(PRAM)에 한정되지 않고 저항성 메모리, 예를 들면 저항성 랜덤 액세스 메모리(resistive random access memory, RRAM) 또는 자기저항 메모리, 예를 들면 스핀 전달 토크 자기저항 랜덤 액세스 메모리(spin-transfer torque magnetoresistive random access memory, STT-MRAM)과 같은 MRAM에도 적용될 수 있다.
시스템 메모리(120)는 컴퓨팅 디바이스의 메인 메모리로서 예를 들면 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM)일 수 있다. PRAM 기반 코프로세서(130)에 사용되는 코프로세서는 범용 CPU와는 다른 보조 데이터 프로세싱 디바이스로서, CPU의 기능을 보조하여서 데이터 프로세싱을 수행하거나 CPU와 별도로 데이터 프로세싱을 수행할 수 있는 컴퓨터 하드웨어일 수 있다. 이러한 코프로세서의 예로 그래픽 처리 유닛(graphic processing unit, GPU), MIC(many integrated core) 디바이스 등이 있다.
어떤 실시예에서, 컴퓨팅 디바이스는 시스템 메모리(120)와 PRAM 기반 코프로세서(130)를 CPU(110)와 연결하기 위해서 메모리 브릿지(140)를 더 포함할 수 있다. PRAM 기반 코프로세서(130)는 CPU(110) 측에 위치한 메모리 브릿지(140)에 연결된다. 예를 들면, PRAM 기반 코프로세서(130)는 PCIe(peripheral component interconnect express) 인터페이스를 통해서 메모리 브릿지(140)에 연결될 수 있다. 메모리 브릿지(140)는 예를 들면 노스브릿지(northbridge) 또는 메모리 컨트롤러 허브(memory controller hub, MCH)일 수 있다.
또한 메모리 브릿지(140)는 입출력(input/output, I/O) 브릿지(150)에 연결될 수 있다. I/O 브릿지(150)는 예를 들면 사우스브릿지(southbridge) 또는 입출력 컨트롤러 허브(I/Q controller hub, ICH)일 수 있으며, 사용자 입력 장치(도시하지 않음)로부터 사용자 입력을 수신하고 이를 메모리 브릿지(140)를 거쳐 CPU(110)로 전달할 수 있다.
전형적인 코프로세서의 경우 병렬 처리를 위한 복수의 프로세싱 엘리먼트(processing elements, PEs)만 포함하지만, 본 발명의 한 실시예에 따른 PRAM 기반의 코프로세서(130)는 코프로세서의 코어에 해당하는 복수의 프로세싱 엘리먼트(131)와 저항 변화 메모리 모듈(132)을 물리적으로 통합한 형태를 가진다. 앞서 설명한 것처럼, 저항 변화 메모리 모듈(132)은 PRAM 모듈(132)로 설명한다. 이와 같이, 코프로세서(130)에 비휘발성 메모리인 PRAM 모듈(132)를 통합으로써, 외부 스토리지 장치와 데이터를 주고받지 않으면서 코프로세서(130)의 동작이 수행될 수 있다.
어떤 실시예에서, CPU(110), 시스템 메모리(120), 메모리 브릿지(140) 및 I/O 브릿지(150)를 포함하는 시스템을 호스트(host)라 할 수 있다.
컴퓨팅 디바이스는 커널을 PRAM 기반 코프로세서(130)에 오프로드(offload)하여서 코프로세서(130)가 해당 커널을 직접 실행할 수 있다. 커널은 코프로세서(130)에서 실행되는 모든 형태의 함수 또는 프로그램을 의미한다. 예를 들면 이러한 커널은 호스트로부터의 계산(computation)을 코프로세서(300)에 오프로드(offload)하는 어플리케이션일 수 있다. 이러한 어플리케이션은 커널로 불릴 수 있다. 따라서 컴퓨팅 디바이스는 커널을 오프로드하거나 데이터의 읽기/쓰기(write/read)를 처리하기 위해서 코프로세서(130)에 접근할 수 있다. 이 경우, 코프로세서(130)의 프로세싱 엘리먼트(131)는 커널을 실행하면서 코프로세서(130)의 PRAM 모듈(132)에 직접 접근할 수 있으므로, 종래의 코프로세서가 외부에 존재하는 메모리로부터 데이터를 읽거나 메모리로 데이터를 쓰기 위해서 필요한 많은 메모리 할당/해제 및 데이터 복사가 필요 없게 된다.
다음, 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서(130)에 포함되는 PRAM 모듈(132)의 한 예에 대해서 설명한다.
도 2는 PRAM에서 하나의 메모리 셀을 개략적으로 나타내는 도면이며, 도 3은 도 2에 도시한 메모리 셀에 인가되는 전류를 나타내는 도면이고, 도 4는 도 2에 도시한 메모리 셀에 도 3에 도시한 전류가 인가될 때의 온도 변화를 나타내는 도면이다.
도 2에 도시한 메모리 셀은 하나의 예이며, 본 발명의 실시예에 따른 PRAM의 메모리 셀은 다양한 형태로 구현될 수 있다.
도 2를 참고하면, PRAM의 메모리 셀(200)은 상변화 소자(210)와 스위칭 소자(220)를 포함한다. 스위칭 소자(220)는 모스 트랜지스터, 다이오드 등의 다양한 소자로 구현될 수 있다. 상변화 소자(210)는 상변화막(211), 상벽화막 위에 형성되어 있는 상부 전극(212) 및 상변화막(211) 아래에 형성되어 있는 하부 전극(213)을 포함한다. 예를 들면, 상변화막(210)은 상변화 물질로 게르마늄(germanium, Ge), 안티몬(antimony, Sb) 및 텔루르(tellurium, Te)의 혼합물("GST 물질"이라 불리기도 함)을 포함할 수 있다.
상변화 물질은 비교적 높은 저항율(resistivity)을 가지는 비정질 상태와 비교적 낮은 저항율을 가지는 결정질 상태를 전환할 수 있다. 이때, 상변화 물질의 상태는 가열되는 온도와 가열 시간에 의해 결정될 수 있다.
다시 도 2를 참고하면, 메모리 셀(200)에 전류가 인가되면, 인가된 전류는 하부 전극(213)을 통해 흐르게 된다. 짧은 시간 동안 전류가 메모리 셀(200)에 인가되면, 인가된 전류는 하부 전극(213)의 인접한 막을 가열한다. 이때, 가열 프로파일의 차이에 의해서 상변화막(211)의 일부(도 2에서 해칭된 부분)가 결정질 상태로 되거나 비정질 상태로 된다. 결정질 상태는 "셋(set) 상태"로, 비정질 상태로 "리셋(reset) 상태"로 불린다.
도 3 및 도 4를 참고하면, 높은 전류의 리셋 펄스(RESET)가 짧은 시간(tRST) 동안 메모리 셀(200)에 인가될 때, 상변화막(211)은 리셋 상태로 된다. 리셋 펄스(RESET)의 인가에 따라 상변화막(211)의 상변화 물질이 가열되어 온도(Tr)가 녹는점 이상으로 되면, 상변화 물질이 녹은 후 식으면서 비정질 상태로 변화한다. 리셋 펄스(RESET)보다 낮은 전류를 가지는 셋 펄스(SET)가 리셋 펄스(RESET)보다 긴 시간(tSET) 동안 상변화막(211)에 인가될 때, 상변화막(211)은 셋 상태로 된다. 셋 전류(SET)의 인가에 따라, 상변화 물질이 가열되어서 온도(Ts) 녹는점보다 낮은 결정화 온도에 도달하면 결정질 상태로 변화한다. 셋 펄스(SET)보다 낮은 전류가 인가되거나 짧은 시간 동안 전류가 인가되는 경우에는 이러한 리셋 상태 및 셋 상태가 유지되므로, 메모리 셀(200)에 데이터를 기입할 수 있다.
이때, 리셋 상태와 셋 상태는 각각 "1"과 "0"의 데이터로 설정될 수 있으며, 이는 메모리 셀(200)의 상변화 소자(210)의 저항율을 측정함으로써 감지될 수 있다. 이와는 달리, 리셋 상태와 셋 상태를 각각 "0"과 "1"의 데이터로 설정될 수도 있다.
따라서 메모리 셀(200)에 읽기 펄스(READ)를 인가함으로써 메모리 셀(200)에 저장된 데이터를 읽을 수 있다. 읽기 펄스(READ)는 낮은 전류로 짧은 시간(tREAD) 동안 인가되어 메모리 셀(200)의 상태를 변경하지 않을 수 있다. 읽기 펄스(READ)는 전류 크기가 셋 펄스(SET)보다 낮을 수 있고, 인가되는 시간(tREAD)이 리셋 펄스(RESET)의 인가 시간(tRST)보다 짧을 수 있다. 메모리 셀(200)의 상변화 소자(210)의 저항율이 상태에 따라 다르므로, 상변화 소자(210)에 흐르는 전류의 크기 또는 상변화 소자(210)에서의 전압 강하의 크기로 메모리 셀(200)의 상태, 즉 메모리 셀(200)에 저장된 데이터를 읽을 수 있다.
한 실시예에서, 읽기 펄스(READ)를 인가하였을 때, 메모리 셀(200)에 걸리는 전압의 크기의 차이로 메모리 셀(200)의 상태를 읽을 수 있다. 이 경우, 리셋 상태에서 메모리 셀(200)의 상변화 소자(210)는 큰 저항을 가지므로, 상변화 소자(210)에서 감지된 전압인 큰 경우를 리셋 상태로, 상변화 소자(210)에서 감지된 전압이 작은 경우를 셋 상태로 결정할 수 있다. 다른 실시예에서, 메모리 셀(200)에 전압을 인가하였을 때, 출력되는 전류의 차이로 메모리 셀(200)의 상태를 읽을 수 있다. 이 경우, 상변화 소자(210)에서 감지된 전류가 작은 경우를 리셋 상태로, 상변화 소자(210)에서 감지된 전류가 큰 경우를 셋 상태로 결정할 수 있다.
PRAM에서는 데이터 쓰기는 일련의 리셋 과정과 셋 과정을 통해서 수행되므로, 인가 시간이 긴 리셋 펄스로 인해 쓰기 동작이 읽기 동작보다 느리다.
도 5는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서에서 PRAM 모듈의 개략적인 블록도이다. 도 5에 도시한 PRAM 모듈은 하나의 PRAM 칩 또는 하나의 PRAM 뱅크일 수 있다.
도 5를 참고하면, PRAM 모듈(500)은 메모리 셀 어레이(510), 행 어드레스 버퍼(520), 행 데이터 버퍼(530), 행 디코더(540), 센스 앰프(sense amplifier)(550) 및 기입 드라이버(560)를 포함한다.
메모리 셀 어레이(510)는 대략 행 방향으로 뻗어 있는 복수의 워드 라인(도시하지 않음), 대략 열 방향으로 뻗어 있는 복수의 비트 라인(도시하지 않음), 그리고 이에 연결되어 있으며 대략 행렬의 형태로 배열된 복수의 메모리 셀(도시하지 않음)을 포함한다. 메모리 셀은 예를 들면 도 2를 참고로 하여 설명한 메모리 셀(200)일 수 있다.
행 어드레스 버퍼(520)와 행 데이터 버퍼(530)는 행 버퍼를 형성한다. 어떤 실시예에서, 쓰기 동작이 읽기 동작보다 느린 비대칭 지연을 해결하기 위해서, 복수의 행 버퍼, 즉 복수의 행 어드레스 버퍼(520)와 복수의 행 데이터 버퍼(530)가 제공될 수 있다.
행 어드레스 버퍼(520)는 메모리 컨트롤러(도시하지 않음)로부터 전달되는 명령 데이터와 어드레스(특히, 행 어드레스)를 저장한다. 어떤 실시예에서, 복수의 행 어드레스 버퍼(520)가 제공될 수 있다. 한 실시예에서, 행 어드레스 버퍼(520)는 뱅크별로 제공될 수 있으며, 메모리 컨트롤러로부터 행 어드레스 버퍼(520)를 어드레싱하기 위한 뱅크 어드레스(예를 들면, 버퍼 번호)(BA)가 입력될 수 있다. 다른 실시예에서, 각 뱅크에 복수의 행 어드레스 버퍼(520)가 제공될 수 있으며, 각 행 어드레스 버퍼(520)는 뱅크 어드레스 또는 그 일부에 의해 어드레싱될 수 있다.
행 데이터 버퍼(530)는 메모리 셀 어레이(510)에서 전달된 데이터를 저장한다. 어떤 실시예에서, 복수의 행 데이터 버퍼(530)가 제공될 수 있다. 한 실시예에서, 행 데이터 버퍼(530)는 뱅크별로 제공될 수 있으며, 메모리 컨트롤러로부터 행 데이터 버퍼(530)를 어드레싱하기 위한 뱅크 어드레스(예를 들면, 버퍼 번호)(BA)가 입력될 수 있다. 다른 실시예에서, 각 뱅크에 복수의 행 데이터 버퍼(530)가 제공될 수 있으며, 각 행 어드레스 버퍼(530)는 뱅크 어드레스 또는 그 일부에 의해 어드레싱될 수 있다.
어떤 실시예에서, PRAM 모듈은 복수의 행 버퍼(520, 530)를 사용하기 위해서 비휘발성 메모리 인터페이스를 채용할 수 있다. 한 실시예에서, 비휘발성 메모리 인터페이스는 DDR(double data rate) 인터페이스, 예들 들면 LPDDR2(low-power double data rate 2)-NVM(non-volatile memory) 인터페이스일 수 있다. 행 어드레스 버퍼(520)는 비휘발성 메모리 인터페이스를 통해 행 어드레스 및 뱅크 어드레스를 수신하고, 행 데이터 버퍼(530)는 비휘발성 메모리 인터페이스를 통해 데이터를 출력한다.
행 디코더(540)는 행 어드레스를 복호하여서 메모리 셀 어레이(510)의 복수의 행에서 타깃 행을 선택한다. 즉, 행 디코더(540)는 메모리 셀 어레이(510)의 복수의 워드 라인 중 데이터를 읽거나 데이터를 쓸 워드 라인을 선택한다.
어떤 실시예에서, 메모리 컨트롤러에서 전달되는 행 어드레스는 상위 어드레스(upper address)와 하위 어드레스(lower address)를 포함할 수 있다. 이 경우, 상위 어드레스는 행 어드레스 버퍼(520)로 전달되고, 하위 어드레스는 행 디코더(540)로 직접 전달될 수 있다. 이때, 행 디코더(540)는 행 어드레스 버퍼(520)에 저장된 상위 어드레스와 직접 전달된 하위 어드레스를 결합하여서 타깃 행을 선택할 수 있다.
센스 앰프(550)는 메모리 셀 어레이(510)에 저장된 데이터를 읽는 동작을 수행한다. 센스 앰프(550)는 행 디코더(540)가 선택한 워드 라인에 연결된 복수의 메모리 셀로부터 복수의 비트 라인을 통해서 데이터를 읽을 수 있다. 기입 드라이버(560)는 입력되는 데이터를 메모리 셀 어레이(510)에 쓴다. 기입 드라이버(560)는 행 디코더(540)가 선택한 워드 라인에 연결된 복수의 메모리 셀에 복수의 비트 라인을 통해서 데이터를 쓸 수 있다.
어떤 실시예에서, PRAM 모듈(500)에서는 쓰기 동작이 읽기 동작보다 느리므로, 이를 해결하기 위해서 PRAM 모듈(500)은 입력되는 데이터를 버퍼에 먼저 저장한 후에, 이를 메모리 셀 어레이(510)에 쓸 수 있다. 이를 위해, PRAM 모듈(500)은 메모리 셀 어레이(510)에 매핑된 영역(메모리 매핑된 영역)인 오버레이 윈도우(570, 580)를 사용할 수 있다. 오버레이 윈도우는 레지스터(570)와 프로그램 버퍼(580)를 더 포함할 수 있다. 레지스터(570)는 메모리 매핑된 레지스터며, 프로그램 버퍼(580)는 레지스터(570)를 통해 액세스될 수 있다. 한 실시예에서, 쓰기 데이터에 대한 정보(예를 들면, 첫 번째 데이터 어드레스와 기입될 바이트 수)가 레지스터(570)에 써진 후에, 쓰기 데이터가 프로그램 버퍼(580)에 저장된다. 다음 오버레이 윈도우 레지스터(570)에 소정의 값이 써지면, 프로그램 버퍼(580)에 저장된 데이터가 메모리 셀 어레이(510)에 기입된다. 이 경우, 메모리 컨트롤러는 오버레이 윈도우 레지스터(570)를 폴링함으로써 메모리 셀 어레이(510)로의 쓰기 동작이 완료되었는지를 확인할 수 있다.
도 6은 본 발명의 한 실시예에 따른 PRAM 모듈에서 메모리 셀 어레이의 파티션 방법의 한 예를 설명하는 도면이고, 도 7은 본 발명의 한 실시예에 따른 PRAM 모듈에서 하프 파티션의 개략적으로 설명하는 도면이다.
도 6을 참고하면, 어떤 실시예에서, 메모리 셀 어레이(510)는 복수의 파티션(PART0-PART15)으로 분할될 수 있다. 도 6에서는 메모리 셀 어레이(510)가 행 방향으로 2개, 열 방향으로 8개의 파티션으로 분할되어 총 16개의 파티션(PART0-PART15)으로 분할되는 것으로 도시하였다. 이때, 복수의 행 버퍼(520, 530)는 복수의 파티션(PART0-PART15)에 연결될 수 있다. 또한 비트 라인과 워드 라인 사이의 기생 저항 성분을 줄이기 위해서, 각 파티션은 두 개의 부분("하프 파티션"이라 함)으로 분할될 수 있다. 예를 들면, 각 파티션은 행 방향으로 두 개의 하프 파티션으로 분할될 수 있다.
어떤 실시예에서, 복수의 파티션이 열 방향으로 배열된 짝수 번째 파티션(PART0, PART2, PART4, PART6, PART8, PART10, PART12, PART14)의 그룹과 열 방향으로 배열된 홀수 번째 파티션(PART1, PART3, PART5, PART7, PART9, PART11, PART13)의 그룹으로 분리되어 배치될 수 있다. 그러면 열 방향으로 배열된 8개의 하프 파티션이 하나의 그룹을 형성하고, 4개의 하프 파티션 그룹이 배치될 수 있다. 이 경우, PRAM 모듈(500)은 복수의 하프 파티션 그룹에 각각 대응하는 복수의 글로벌 열 디코더(global column decoder)(앞으로 "GYDEC"이라 함)(610)를 더 포함할 수 있다. 각 GYDEC(610)은 대응하는 하프 파티션 그룹에 형성된 복수의 글로벌 비트 라인(GBL)에 연결되어 있다.
도 7을 참고하면, 어떤 실시예에서, 각 하프 파티션은 복수의 서브어레이(sub-array)를 포함할 수 있다. 서브어레이는 저항성 타일(resistive tile)이라 불릴 수 있다. 도 7에서는 하나의 하프 파티션이 64개의 타일(Tile0-Tile63)을 포함하는 것으로 도시하였다.
각 타일은 복수의 비트 라인과 복수의 워드 라인에 연결되는 복수의 메모리 셀을 포함한다. 설명의 편의상, 도 7에서는 각 타일에 포함되어 있는 복수의 메모리 셀 중에서 하나의 메모리 셀과 이에 연결되어 있는 하나의 비트 라인(BL) 및 워드 라인(WL)만을 도시하였고, 메모리 셀을 형성하는 상변화 소자와 스위칭 소자를 각각 저항과 다이오드로 도시하였다.
각 타일에는 로컬 열 디코더(local column decoder)(앞으로 "LYDEC"이라 함)(710)가 연결되어 있을 수 있다. LYDEC(710)은 대응하는 타일의 복수의 비트 라인(BL)에 연결되어 있다. 어떤 실시예에서, 두 개의 LYDEC(710)이 대응하는 타일의 양끝에 연결될 수 있다. 또한 하프 파티션 그룹에 형성된 복수의 글로벌 비트 라인(GBL)은 복수의 타일에 각각 대응하며, 각 글로벌 비트 라인(GBL)은 대응하는 타일의 복수의 비트 라인(BL)에 연결되어 있다. 어떤 실시예에서, LYDEC(710)은 GYDEC(610)과 함께 대응하는 하프 파티션의 대응하는 타일에서 비트 라인(BL)을 선택하는데 사용될 수 있다. 센스 앰프(도 5의 550)가 선택된 비트 라인(BL)을 통해 데이터를 읽거나, 기입 드라이버(도 5의 570)가 선택된 비트 라인(BL)을 통해 데이터를 쓸 수 있다.
병렬화를 최대화하기 위해서, 각 타일에는 서브 워드라인 드라이버(sub word line driver)(앞으로 "SWD"라 함)(720)가 연결되어 있을 수 있다. 하프 파티션에 글로벌 워드 라인(GWL)이 형성되고, 글로벌 워드 라인(GWL)은 메인 워드 라인 드라이버(main word line driver)(앞으로 "MWD"라 함)(730)에 연결되어 있을 수 있다. 이 경우 하프 파티션에 형성되는 복수의 워드 라인(WL)이 글로벌 워드 라인(GWL)에 연결되어 있을 수 있다. 어떤 실시예에서, 도 7에 도시한 것처럼, 하프 파티션에 두 개의 글로벌 워드 라인(GWL)이 형성되어 MWD(730)에 연결되어 있을 수 있다. 이러한 방식을 이중 워드 라인 방식(dual word line scheme)이라 한다. 이 경우, 하프 파티션에 포함되어 있는 복수의 타일이 두 개의 타일 그룹으로 그룹화되고, 두 개의 글로벌 워드 라인(GWL)은 두 개의 타일 그룹에 각각 대응할 수 있다. 하프 파티션 내의 모든 SWD는 메인 워드라인 드라이버(main word line driver, MWD)에 연결되어 있다. 또한 두 개의 타일은 듀얼 워드라인 방식에 의해 블록으로 그룹화될 수 있다. 어떤 실시예에서, SWD(720)는 MWD(730)과 함께 대응하는 타일에서 워드 라인(WL)을 구동하는데 사용될 수 있다. 이때, 구동되는 워드 라인(WL)은 행 디코더(도 5의 540)에 의해 선택될 수 있다.
도 6 및 도 7에 도시한 파티션 구조를 사용하는 경우, 하프 파티션당 복수의 입출력(input/output, I/O) 동작(예를 들면 도 7의 예에서는 64개의 I/O 동작)을 동시에 수행할 수 있다. 따라서 도 6 및 도 7에 도시한 파티션 구조에서는 4개의 하프 파티션이 병렬로 접근될 수 있으므로, 256 비트 데이터를 동시에 가지고 올 수 있다. 이를 위해 복수의 센스 앰프(도 5의 550) 및 복수의 기입 드라이버(복수의 560)가 하프 파티션 그룹 앞에 제공될 수 있다.
다음 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서에 대해서 도 8 내지 도 13을 참고로 하여 설명한다.
도 8a은 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 개략적인 블록도이며, 도 8b는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서에서 에이전트의 개략적인 블록도이다.
도 8a을 참고하면, PRAM 기반 코프로세서(800)는 코프로세서(810), 메모리 컨트롤러(820) 및 PRAM 모듈(830)를 포함한다.
코프로세서(810)는 복수의 프로세싱 엘리먼트(PE0-PEn)를 포함하며, 각 프로세싱 엘리먼트는 코프로세서의 코어에 해당하며, 캐시를 포함한다. 어떤 실시예에서, 캐시는 L1(level 1) 캐시와 L2(level 2) 캐시를 포함할 수 있다.
복수의 프로세싱 엘리먼트(PE0-PEn)는 그 역할에 따라 서버(PE0)와 에이전트(PE1-PEn)로 구분될 수 있다. 복수의 프로세싱 엘리먼트(PE0-PEn) 중 대부분의 프로세싱 엘리먼트(PE1-PEn)는 호스트에서 전달된 커널을 처리하는데 할당되며, 이러한 프로세싱 엘리먼트(PE1-PEn)를 에이전트라 할 수 있다. 또한 복수의 프로세싱 엘리먼트 중 일부 프로세싱 엘리먼트(PE0)는 에이전트에서의 커널 실행을 스케줄링하는데 할당되며, 이러한 프로세싱 엘리먼트(PE0)를 서버라 할 수 있다. 서버(PE0)는 에이전트(PE1-PEn)에 의해 요청된 메모리 트래픽을 관리할 수 있다.
어떤 실시예에서, 서버(PE0)는 에이전트(PE1-PEn)가 생성한 메모리 요청을 관리하므로, 코어로 사용되는 프로세싱 엘리먼트 대신 컨트롤러에 의해 구현될 수도 있다.
어떤 실시예에서, 서버(PE0)는 에이전트(PE1-PEn)의 캐시 미시를 받아서, 메모리 컨트롤러(820)와 협력해서 관련된 PRAM 액세스를 처리하는 메모리 컨트롤러 유닛(memory controller unit, MCU)를 포함할 수 있다.
어떤 실시예에서, 에이전트는 도 8b에 도시한 것처럼 프로세싱 엘리먼트(811), 캐시(812a, 812b, 812c), 캐시 컨트롤러(813a, 813b, 813c) 및 온칩 메모리 컨트롤러(814a, 814b)를 포함할 수 있다.
한 실시예에서, 캐시는 L1 명령어(L1 instruction, L1I) 캐시(812a), L1 데이터(L1 data, L1D) 캐시(812b) 및 L2 캐시(812c)를 포함할 수 있다. 이 경우, 캐시 컨트롤러는 L1I 캐시(812a), L1D 캐시(812b) 및 L2 캐시(812c)에 각각 연결되어 있는 L1I 캐시 컨트롤러(813a), L1D 캐시 컨트롤러(813b) 및 L2 캐시 컨트롤러(813c)를 포함할 수 있다. 이러한 캐시 컨트롤러(813a, 813b, 813c)는 메모리 요청이 해당하는 캐시(812a, 812b, 812c)에서 캐시 히트 또는 미스인지를 확인할 수 있다. L1I 캐시(812a)와 L1D 캐시(812b)는 각각 L1I 캐시 컨트롤러(813a) 및 L1D 캐시 컨트롤러(813b)를 통해 프로세싱 엘리먼트(811)에 연결될 수 있으며, L2 캐시(812c)는 L1D 캐시 컨트롤러(813b)에 연결된 L2 캐시 컨트롤러(813c)를 통해 프로세싱 엘리먼트(811)에 연결될 수 있다. 예를 들면, L1I 캐시 컨트롤러(813a)와 L1I 캐시(812a) 사이, L1D 캐시 컨트롤러(813b)와 L2 캐시 컨트롤러(813c) 사이 및 L2 캐시 컨트롤러(813c)와 L2 캐시(812c) 사이는 128 비트 버스를 통해 연결될 수 있다. 또한 L1D 캐시 컨트롤러(813b)는 프로세싱 엘리먼트(811)의 두 레지스터(regA, regB)와 64 비트 버스를 통해 각각 연결될 수 있으며, L1D 컨트롤러(813b)는 L1D 캐시(812b)와 8개의 32 비트 버스를 통해 병렬로 연결될 수 있다.
한 실시예에서, 온칩 메모리 컨트롤러는 캐시 컨트롤러, 특히 L2 캐시 컨트롤러(813c)에 연결되어 있으며, 두 개의 온칩 메모리 컨트롤러(814a, 814b)를 포함할 수 있다. 온칩 메모리 컨트롤러(814a)는 서버(PE0)에 연결되어 있으며, 온칩 메모리 컨트롤러(814b)는 메모리 컨트롤러(820)에 연결되어 있다. 예를 들면, 온칩 메모리 컨트롤러(814a)는 256 비트 버스를 통해 L2 캐시 컨트롤러(813c)에 연결되고, 256 비트 버스를 통해 서버(PE0)에 연결될 수 있다. 또한 온칩 메모리 컨트롤러(814b)는 256 비트 버스를 통해 L2 캐시 컨트롤러(813c)에 연결되고, 128 비트 버스를 통해 두 개의 메모리 컨트롤러(820)에 각각 연결될 수 있다.
한 실시예에서, L2 캐시 컨트롤러(813c)는 L2 캐시(812c)에서 캐시 미스를 확인하는 경우 온칩 메모리 컨트롤러(814a, 814b)를 통해 메모리 요청을 생성할 수 있다. 그러면 메모리 요청은 온칩 메모리 컨트롤러(814a)를 통해 서버(PE0)로 전달될 수 있다. 또한 메모리 요청에 따라 메모리 컨트롤러(820)에서 PRAM 모듈(830)에서 읽은 데이터는 온칩 메모리 컨트롤러(814b)와 L2 캐시 컨트롤러(813c)를 통해 L2 캐시(812c)로 저장될 수 있다.
도 8a에서는 복수의 프로세싱 엘리먼트(PE0-PEn) 중 하나의 프로세싱 엘리먼트(PE0)가 서버로 할당되고, 나머지 프로세싱 엘리먼트(PE1-PEn)가 에이전트로 할당되는 것으로 도시하였지만, 둘 이상의 프로세싱 엘리먼트가 서버로 할당될 수도 있다.
메모리 컨트롤러(820)는 채널("버스"라고도 함)(840)을 통해 PRAM 모듈(830)에 연결되어 있다. 메모리 컨트롤러(820)는 서버로부터 메모리 요청을 수신하여 채널(840)을 통해 PRAM 모듈(830)로 전달한다. 따라서 메모리 컨트롤러(820)는 채널(840)을 통해 PRAM 모듈(830)에 메모리 읽기/쓰기 명령 및 어드레스를 전달하고, 데이터를 교환할 수 있다.
어떤 실시예에서, PRAM 모듈(830)은 비휘발성 메모리 인터페이스를 채용할 수 있다. 한 실시예에서, 비휘발성 메모리 인터페이스는 DDR 인터페이스, 예들 들면 LPDDR2-NVM 인터페이스일 수 있다. DDR 인터페이스를 채용하는 경우, 채널(840)은 DDR 채널, 예를 들면 LPDDR 채널일 수 있다. 어떤 실시예에서, 복수의 PRAM 모듈(830)이 하나의 채널(840)에 공통으로 연결될 수 있다. 한 실시예에서, 복수의 PRAM 뱅크, 예를 들면 16개의 PRAM 뱅크가 하나의 채널(840)에 공통으로 연결될 수 있다.
어떤 실시예에서, 복수의 메모리 컨트롤러(820)가 제공될 수 있다. 도 8a 및 도 8b에서는 두 개의 메모리 컨트롤러(820)가 제공되는 것으로 도시하였다. 이 경우, 복수의 메모리 컨트롤러(820)는 서로 다른 복수의 채널(840)에 각각 연결된다.
PRAM 기반 코프로세서는 프로세싱 엘리먼트(PE0-PEn)와 메모리 컨트롤러(820)를 연결하여 프로세싱 엘리먼트(PE0-PEn), 메모리 컨트롤러(820) 및 PRAM 모듈(830) 등을 통합하는 네트워크(850)를 더 포함할 수 있다. 어떤 실시예에서 네트워크(850)는 p:q 통신을 위한 크로스바 네트워크(crossbar network)일 수 있다(p와 q는 1 이상의 정수이다).
어떤 실시예에서, PRAM 기반 코프로세서는 호스트와 통신하기 위한 인터페이스 모듈(860)을 더 포함할 수 있다. 인터페이스 모듈(860)은 예를 들면 PCIe(peripheral component interconnect express) 인터페이스를 위한 PCIe 모듈일 수 있다. 인터페이스 모듈(860)을 통해 호스트는 코프로세서(810), 특히 코프로세서(810)의 서버(PE0) 및 메모리 컨트롤러(820)와 통신할 수 있다. 이러한 통신을 위해서 인터페이스 모듈(860) 또한 네트워크(850)에 연결되어 있다.
어떤 실시예에서, PRAM 기반 코프로세서는 파워 슬립 컨트롤러(power sleep controller, PSC)(870)를 더 포함할 수 있다. PSC(870)는 서버(PE0)의 제어에 따라 각 에이전트(PE1-PEn)의 모드를 제어할 수 있다. 즉, 서버(PE0)는 PSC(870)를 사용하여서 각 에이전트(PE1-PEn)를 슬립 모드(또는 휴지 모드라 함)에 넣든지, 슬립 모드에 깨울 수 있다. 이에 따라 서버(PE0)는 각 에이전트(PE1-PEn)에서의 커널 실행을 중지하거나 계속할 수 있다.
어떤 실시예에서, 각 프로세싱 엘리먼트(PE0-PEn)는 마스터 포트와 슬레이브 포트를 통해 네트워크(850)에 연결되고, 메모리 컨트롤러(820)도 마스터 포트와 슬레이브 포트를 통해 네트워크(850)에 연결될 수 있다. 한 실시예에서, 인터페이스 모듈(860)가 마스터 포트와 슬레이브 포트를 통해 네트워크(850)에 연결되어 호스트가 서버(PE0) 및 메모리 컨트롤러(820)와 통신할 수 있다. PSC(870)도 마스터 포트와 슬레이브 포트를 통해 네트워크(850)에 연결될 수 있다.
위에서 설명한 실시예에 따르면, 서버(PE0)는 에이전트(PE1-PEn)의 캐시 미시를 네트워크(850)를 통해 받아서, 메모리 컨트롤러(820)와 협력해서 관련된 PRAM 액세스를 처리할 수 있다. 서버(PE0)는 버스를 통해 메모리 컨트롤러(820)로 메모리 읽기 또는 쓰기 메시지를 보내고, 메모리 컨트롤러(820)가 PRAM 모듈(830) 상의 트랜잭션을 관리할 수 있다.
어떤 실시예에서, PRAM 모듈(830)이 DDR 인터페이스, 예들 들면 LPDDR2-NVM 인터페이스를 채용하는 경우, 메모리 컨트롤러(820)가 서버(PE0)의 요청을 LPDDR2-NVM 트랜잭션(transactions)으로 변환할 수 있다. 이를 위해, 메모리 컨트롤러(820)는 메모리 어드레스를 3단계로 PRAM 모듈(830)로 전달하는 3단계 어드레싱(three-phase addressing)을 수행할 수 있다.
메모리 컨트롤러(820)가 PRAM 모듈(830)로 전달하기 위한 메모리 어드레스, 즉 행 어드레스는 상위 어드레스(upper address)와 하위 어드레스(lower address)를 포함할 수 있다. 예를 들면, (n+1)비트를 사용하는 경우, 상위 어드레스는 상위 (n-m+1)비트(a[n:m])를 사용하고 하위 어드레스는 하위 (m-x)비트(a[m-1:x])를 사용할 수 있다(여기서, n, m, x는 0 이상의 정수).
도 9는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 3단계 어드레싱을 설명하는 도면이다.
도 9를 참고하면, 3단계 어드레싱 중 첫 번째 단계인 프리액티브(preactive) 단계에서, 메모리 컨트롤러(도 8의 820)는 어드레스 중에서 상위 어드레스(a[n,m])를 타깃 행 어드레스 버퍼(520)에 저장한다. 이때, 복수의 행 어드레스 버퍼(520)가 존재하는 경우, 타깃 행 어드레스 버퍼(520)는 버퍼 번호를 지시하는 버퍼 어드레스(BA)에 의해 선택될 수 있다.
두 번째 단계인 액티브(active) 단계에서, 메모리 컨트롤러(820)는 남아 있는 어드레스 부분(즉, 하위 어드레스)(a[m-1,x])을 PRAM 모듈(830)로 전달한다. 그러면 PRAM 모듈(830)로 전달된 하위 어드레스(a[m-1,x])는 행 어드레스 버퍼(520)에 저장된 상위 어드레스(a[n,m])와 결합되어 타깃 행 디코더(도 5의 540)로 전달된다. 이때, 상위 어드레스(a[n,m])가 저장된 행 어드레스 버퍼(520)는 버퍼 어드레스(BA)에 의해 선택될 수 있다. 따라서 행 디코더(540)는 결합한 어드레스로 메모리 셀 어레이에서 타깃 행을 선택한다. 읽기 동작을 위해, 센스 앰프(550)가 데이터를 타깃 행에서 타깃 행 데이터 버퍼(530)로 전달할 수 있다. 이때, 타깃 행 데이터 버퍼(530)는 버퍼 어드레스에 의해 선택될 수 있다.
마지막 단계인 읽기 단계에서, 메모리 컨트롤러(820)는 버퍼 어드레스(BA)로 타깃 행 데이터 버퍼(530)를 선택하고, 열 어드레스로 읽기 데이터의 시작 어드레스를 선택할 수 있다. 이에 따라 메모리 컨트롤러(820)는 행 데이터 버퍼(530)에 저장된 데이터를 읽어서 출력할 수 있다.
이와 같이, 메모리 컨트롤러(820)가 행 어드레스를 상위 어드레스와 하위 어드레스로 나누어서 PRAM 모듈(830)로 전달함으로써, PRAM 기반 코프로세서는 DDR 인터페이스, 특히 LPDDR2-NVM 인터페이스를 사용해서 구현될 수 있다.
어떤 실시예에서, 타깃 행의 상위 어드레스가 이미 행 어드레스 버퍼(520)에 존재하면, 메모리 컨트롤러(820)는 프리액티브 단계를 건너뛰고 액티브 단계로 바로 진행할 수 있다. 어떤 실시예에서, 타깃 행의 데이터가 이미 행 데이터 버퍼(530)에 존재하면, 메모리 컨트롤러(830)는 액티브 단계를 건너뛸 수 있다.
쓰기 동작의 경우, 행 디코더(540)는 상위 어드레스와 하위 어드레스를 결합한 어드레스를 오버레이 윈도우 레지스터(도 5의 570)로 전달한다. 그러면 오버레이 윈도우 레지스터(570)를 통해 쓰기 데이터가 프로그램 버퍼(도 5의 580)에 저장된다. 이에 따라, 서버(PE0) 또는 호스트는 쓰기 데이터가 PRAM 모듈(830)에 기입된 것으로 인식할 수 있어서, 쓰기 동작이 읽기 동작보다 느린 문제를 해결할 수 있다. 또한 프로그램 버퍼(580)에 저장된 데이터가 메모리 셀 어레이(510)에 기입되므로, 메모리 컨트롤러(820)는 오버레이 윈도우 레지스터(570)를 폴링함으로써 실제 메모리 셀 어레이(510)로의 쓰기 동작이 완료되었는지를 확인할 수 있다.
이와 같이, PRAM 기반 코프로세서는 오버레이 윈도우(570, 580)를 사용하여서 쓰기 동작을 수행함으로써, PRAM에서 쓰기 동작이 읽기 동작보다 느린 문제를 해결할 수 있다.
이와는 달리, 어떤 실시예에서, 쓰기 데이터가 타깃 행 데이터 버퍼(530)에 저장된 후에, 타깃 행 데이터 버퍼(530)에서 메모리 셀 어드레스(510)로 기입될 수 있다.
도 10은 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 동작을 설명하는 도면이며, 도 11은 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 데이터 이동 방법을 나타내는 흐름도이다.
도 10 및 도 11을 참고하면, 호스트는 인터럽트, 예를 들면 PCIe 인터럽트를 PRAM 기반 코프로세서로 발행한다. 이에 따라 PRAM 기반 코프로세서 내부에서는 호스트로부터의 인터럽트가 인터페이스 모듈(860)에서 서버(PE0)로 전달된다(S1110). 그러면 메모리 컨트롤러(820)가 호스트측 메모리로부터 인터페이스 모듈(860)을 통해 커널을 포함하는 데이터를 PRAM 모듈(830)로 다운로드하여 저장한다(S1120). 어떤 실시예에서, 데이터는 PRAM 모듈(830)의 지정된 이미지 공간에 저장될 수 있다.
다운로드가 완료되면, 서버(PE0)는 복수의 에이전트 중에서 타깃 에이전트(PE1)의 캐시에 실행할 커널의 메모리 어드레스(즉, 커널이 저장된 PRAM 모듈의 어드레스)를 부트(boot) 어드레스로서 저장한다(S1140). 어떤 실시예에서, 메모리 어드레스가 저장되는 캐시는 L2 캐시일 수 있다. 어떤 실시예에서, 서버(PE0)가 커널의 메모리 어드레스를 저장하기 전에, PSC(870)를 사용해서 타깃 에이전트(PE1)를 슬립 모드로 설정할 수 있다(S1130).
커널의 메모리 어드레스가 저장되면, 캐시에 메모리 어드레스가 부트 어드레스로 저장되었으므로, 타깃 에이전트(PE1)는 캐시에 저장된 메모리 어드레스에 기초해서 PRAM 모듈(830)로부터 커널을 로드하여서 실행한다(S1160). 어떤 실시예에서, 서버(PE0)는 PSC(870)를 통해 슬립 모드에 있는 타깃 에이전트(PE1)를 깨울 수 있다(S1150). 그러면 타깃 에이전트(PE1)가 깨면서 부트 어드레스로 저장된 메모리 어드레스에 기초하여 PRAM 모듈(830)로부터 커널을 로드하여서 실행한다(S1160).
커널 실행 동안, 에이전트(PE1)에 의해 요청되는 데이터가 캐시, 예를 들면 L2 캐시에 히트(hit)하면, 에이전트(PE1)는 캐시에 저장된 데이터를 사용할 수 있다. 그러나 캐시에 미스(miss)되는 경우, 에이전트(PE1)는 캐시 미스에 의해 생성되는 메모리 요청을 서버(PE0)로 전달한다(S1070). 그러면 서버(PE0)는 메모리 요청을 PRAM 모듈(830)의 메모리 컨트롤러(820)로 전달한다(S1080). 어떤 실시예에서, 메모리 컨트롤러(820)는 메모리 요청에 따라 PRAM 모듈(830)에 액세스하기 위한 행 어드레스를 상위 어드레스와 하위 어드레스로 나누어서 PRAM 모듈(830)로 전달할 수 있다. 메모리 컨트롤러(820)는 메모리 요청에 해당하는 데이터를 응답과 함께 에이전트(PE1)로 전달한다(S1190). 즉, 메모리 컨트롤러(820)는, 메모리 요청에 따라 PRAM 모듈(830)의 행 어드레스 버퍼(도 5의 520)로 선택한 메모리 셀 어레이(도 5의 510)의 타깃 행에서 행 데이터 버퍼(도 5의 530)로 데이터를 이동하고, 행 데이터 버퍼(530)에 이동된 데이터를 에이전트(PE1)로 전달할 수 있다. 이 경우, 행 데이터 버퍼(530)에 이미 해당하는 데이터가 저장되어 있으면, 메모리 셀 어레이(510)에서 행 데이터 버퍼(530)로 다시 데이터를 이동할 필요가 없을 수 있다. 예를 들면, 메모리 컨트롤러(820)는 PRAM 모듈(830)에서 읽은 데이터를 에이전트(PE1)의 L2 캐시에 올릴 수 있다. 이와 같이, PRAM 기반 코프로세서는 컴퓨팅 디바이스의 메인 메모리(도 1의 120)나 다른 메모리의 도움 없이 PRAM 모듈(830)의 행 버퍼(520, 530)를 사용하여서 에이전트(PE1)의 L2 캐시에 데이터를 저장할 수 있다.
또한 에이전트(PE1)는 PRAM 모듈(830)에 데이터 쓰기를 요청하는 메모리 요청을 서버(PE0)로 전달할 수 있다(S1170). 그러면 서버(PE0)는 메모리 요청을 PRAM 모듈(830)의 메모리 컨트롤러(820)로 전달하고(S1180), 메모리 컨트롤러(820)는 메모리 요청에 해당하는 데이터를 에이전트(PE1)에서 PRAM 모듈(830)로 쓰고 이에 대한 응답을 에이전트(PE1)로 전달할 수 있다(S1190). 즉, 메모리 컨트롤러(820)는, 메모리 요청에 따라 행 어드레스 버퍼(520)로 타깃 행 어드레스를 확인하고 에이전트(PE1)의 쓰기 데이터를 PRAM 모듈(830)의 프로그램 버퍼(도 5의 590)로 저장한 후에, 프로그램 버퍼(590)에 저장된 데이터를 메모리 셀 어레이(510)에 쓸 수 있다. 예를 들면, 메모리 컨트롤러(820)는 에이전트(PE1)의 L2 캐시에서 데이터를 가지고 와서 PRAM 모듈(830)에 쓸 수 있다. 이와 같이, PRAM 기반 코프로세서는 컴퓨팅 디바이스의 메인 메모리(120)나 다른 메모리의 도움 없이 PRAM 모듈(830)의 행 어드레스 버퍼(520)를 사용하여서 에이전트(PE1)의 L2 캐시에서 데이터를 로드하여 PRAM 모듈(530)에 쓸 수 있다.
따라서 서버(PE0)는 메모리 컨트롤러(820)를 통해 에이전트(PE1)와 PRAM 모듈(830)의 행 데이터 버퍼(530) 또는 프로그램 버퍼(590) 사이에서 데이터를 전달할 수 있다. 이와 같이 각 프로세싱 엘리먼트는 종래의 로드/저장(load/store) 명령어를 통해 PRAM 기반 코프로세서 내의 스토리지 코어, 즉 PRAM 모듈(830)에 직접 액세스할 수 있다. 즉, PRAM 모듈 액세스가 기존의 명령어 세트 아키텍처(instruction set architecture)의 어떤 변경 없이 또한 컴퓨팅 디바이스의 운영 체제(operating system, OS)의 도움 없이 수행될 수 있다. 그러므로 호스트의 스토리지 장치와 코프로세서 사이의 데이터 전달 과정을 없앨 수 있다.
도 12는 기존의 컴퓨팅 디바이스의 코프로세서에서의 데이터 이동을 나타내는 도면이며, 도 13은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 코프로세서에서의 데이터 이동을 나타내는 도면이다.
도 12를 참고하면, 사용자의 어플리케이션 실행에 따라 어플리케이션은 OS를 통해 읽기 및/또는 쓰기를 위한 파일 디스크립터를 생성하고(S1201), 스토리지 장치로부터 데이터를 읽거나 스토리지 장치로 데이터를 쓰기 위해서 시스템 메모리, 예를 들면 DRAM에 가상 메모리가 할당된다(S1202). 또한 코프로세서에 데이터를 쓰거나 코프로세서로부터 데이터를 읽기 위해서 코프로세서 메모리가 할당된다(S1203).
이어서 어플리케이션은 OS를 통해 스토리지 장치에 대해서 파일 읽기를 요청하고(S1204), DRAM에 물리적 메모리가 할당되다(S1205). OS를 통해 스토리지 장치에 대해서 파일 데이터가 요청된다(S1206). 그러면, 스토리지 장치로부터 DRAM의 물리적 메모리로 파일 데이터가 전달되고, DRAM의 물리적 메모리에서 가상 메모리로 파일 데이터가 복사된다(S1207). 다음 DRAM에서 코프로세서 메모리로 파일 데이터가 전달된다(S1208445). 이에 따라 코프로세서가 파일 데이터를 처리한다. 다음 파일 데이터를 처리한 결과 데이터가 코프로세서 메모리로부터 DRAM의 가상 메모리로 전달된다(S1209).
이어서 어플리케이션은 스토리지 장치에 대해서 파일 쓰기를 요청한다(S1210). DRAM에 물리적 메모리가 할당되어서 가상 메모리로부터 물리적 메모리로 결과 데이터가 복사되고(S1211), DRAM의 물리적 메모리에서 스토리지 장치로 결과 데이터가 전달된다(S1212).
다음, 어플리케이션은 읽기 및/또는 쓰기를 위해 할당한 DRAM의 가상 메모리를 해제하고(S1213), 쓰기 및/또는 읽기를 위해 할당한 코프로세서 메모리를 해제한다(S1214). 또한 어플리케이션은 읽기 및/또는 쓰기를 위해 생성한 파일 디스크립터를 커널에서 삭제한다(S1215).
도 12에서 단계 S1201-S1206, S1210, S1213, S1214 및 S1215는 시스템 오퍼레이션을 나타내고, 단계 S1207, S1208, S1209, S1211 및 S1212는 데이터 이동을 나타낸다.
이와 같이, 기존의 컴퓨팅 디바이스에서는 파일 디스크립터를 생성하고, 호스트측 메모리(DRAM) 및 코프로세서 메모리에 위치하는 다수의 메모리 공간을 할당할 필요가 있으며, 이에 따라 스토리지 장치에 대한 입출력 및 호스트측 메모리와 코프로세서 메모리 사이의 데이터 이동이 수행될 수 있다. 이 경우, CPU가 코프로세서와 스토리지 스택과 연관된 사용자 소프트웨어 및 커널 모듈 사이의 데이터 전달에 자주 개입할 필요가 있다. 이로 인해 사용자 모드와 커널 모드 사이의 스위칭 및 불필요한 데이터 복사가 발생하고, 스토리지 장치와 코프로세서 사이에서 데이터를 이동하는데 많은 사이클이 낭비될 수 있다. 그러나 사용자 관점에서는 타깃 코프로세서에서 주로 사용된 입력(또는 출력) 데이터에 CPU가 접근할 것이 요구되지 않는다.
반면, 본 발명의 한 실시예에 따르면, 도 13에 도시한 것처럼, 사용자에 의해 커널이 생성되어 시스템 메모리에 저장된다(S1310). 이러한 커널은 시스템 메모리에서 PRAM 기반 코프로세서로 전달되고(S1320), PRAM 기반 코프로세서 내에서 커널의 태스크를 수행하여서 완료한다(S1330).
이와 같이, 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서는 계산 자원과 스토리지 자원을 통합함으로써, 사용자가 호스트 상에서 커널을 구성한 후에 그 실행을 위해서는 단지 커널을 타깃 코프로세서로 전달하면 된다. 이에 따라, CPU, 스토리지 장치 및 코프로세서 사이에서의 불필요한 호스트측 소프트웨어 개입 및 메모리 복사를 제거할 수 있다.
도 14는 본 발명의 한 실시예에 따른 PRAM 기반 코프로세서의 프로그래밍 모델을 나타내는 도면이다.
도 14를 참고하면, 사용자는 예를 들면 pushData() 함수 및 writeMemory() 함수를 통해 커널을 로드할 수 있다. pushData() 함수는 커널이 존재하는 호스측 메모리 어드레스를 정의하고, writeMemory() 함수는 PRAM 기반 코프로세서의 타깃 어드레스, 즉 커널이 저장될 PRAM 모듈의 어드레스를 정의할 수 있다. pushData() 함수에는 pushData(kernel, &boot_addr)와 같이 호스트로부터 다운로드할 커널을 지시하는 정보(kernel)와 커널이 저장된 호스측 메모리 어드레스(&boot_addr)가 파라미터로 입력될 수 있다. writeMemory() 함수에는 writeMemory(MAGIC_ADDR, &boot_addr)와 같이 커널이 저장될 PRAM 모듈의 어드레스(MAGIC_ADDR)와 커널이 저장된 호스측 메모리 어드레스(&boot_addr)가 파라미터로 입력될 수 있다.
PRAM 기반 코프로세서에서 데이터 처리가 완료된 후에, 필요하다면 사용자는 예를 들면 SaveOutputFile() 함수를 통해 PRAM 기반 코프로세서로부터 데이터를 가져올 수 있다. SaveOutputFile() 함수는 스토리지 어드레스와 메모리 버퍼를 특정할 수 있다. SaveOutputFile() 함수에는 SaveOutputFile(FPGA_ADDR, memBuffer)와 같이 PRAM 기반 코프로세서에서 데이터가 저장된 스토리지 어드레스(FPGA_ADDR)와 데이터를 가지고 와서 저장할 메모리 버퍼(memBuffer)가 파라미터로 입력될 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (21)

  1. 호스트의 중앙 프로세싱 유닛(central processing unit, CPU)의 기능을 보조하거나 상기 CPU와 별도로 데이터 프로세싱을 수행하는 코프로세서로서,
    상기 코프로세서의 코어에 해당하며, 상기 호스트에서 전달되는 커널을 실행하는 프로세싱 엘리먼트,
    상기 프로세싱 엘리먼트에서 상기 커널의 실행에 따라 생성된 메모리 요청을 관리하는 서버,
    저항 변화 메모리(resistance switching memory) 모듈,
    상기 저항 변화 메모리 모듈에 연결되어 있으며, 상기 프로세싱 엘리먼트가 상기 저항 변화 메모리 모듈에 액세스하도록 하여서, 컴퓨팅 디바이스의 운영 체제(operation system, OS)의 도움 없이 상기 서버로부터 전달되는 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈과 상기 프로세싱 엘리먼트 사이에서 상기 메모리 요청에 따른 데이터를 이동시키는 메모리 컨트롤러, 그리고
    상기 프로세싱 엘리먼트, 상기 서버 및 상기 메모리 컨트롤러를 통합하는 네트워크
    를 포함하는 코프로세서.
  2. 제1항에서,
    상기 데이터의 이동 시에 상기 호스트로는 상기 데이터가 저장되지 않는 코프로세서.
  3. 제1항에서,
    상기 서버는, 상기 커널의 실행을 위해 상기 저항 변화 메모리 모듈에 저장된 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하는 코프로세서.
  4. 제3항에서,
    상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트의 캐시에 부트 어드레스로 저장하는 코프로세서.
  5. 제4항에서,
    상기 서버의 제어에 따라 상기 프로세싱 엘리먼트의 슬립 모드를 제어하는 파워 슬립 컨트롤러를 더 포함하며,
    상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하기 전에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 슬립 모드로 전환하고, 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장한 후에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 깨우는
    코프로세서.
  6. 제3항에서,
    상기 호스트와 통신하기 위한 인터페이스 모듈을 더 포함하며,
    상기 서버가 상기 인터페이스 모듈을 통해 상기 호스트로부터의 인터럽트를 수신한 후에, 상기 메모리 컨트롤러가 상기 커널을 상기 호스트에서 상기 저항 변화 메모리 모듈로 저장하는
    코프로세서.
  7. 제1항에서,
    상기 프로세싱 엘리먼트는 캐시를 포함하며,
    상기 프로세싱 엘리먼트의 상기 캐시에서 미스가 발생한 경우, 상기 프로세싱 엘리먼트가 상기 메모리 요청을 상기 서버로 전달하며,
    상기 메모리 컨트롤러는, 상기 컴퓨팅 디바이스의 다른 메모리의 도움 없이, 상기 저항 변화 메모리 모듈에서 상기 메모리 요청에 해당하는 데이터를 읽고, 읽은 데이터를 상기 프로세싱 엘리먼트의 캐시로 저장하는
    코프로세서.
  8. 제1항에서,
    상기 프로세싱 엘리먼트는 캐시를 포함하며,
    상기 메모리 요청은 데이터 쓰기를 요청하는 메모리 요청이고,
    상기 메모리 컨트롤러는, 상기 컴퓨팅 디바이스의 다른 메모리의 도움 없이, 상기 프로세싱 엘리먼트의 캐시로부터 상기 메모리 요청에 해당하는 데이터를 로드하고, 로드한 데이터를 상기 저항 변화 메모리 모듈로 쓰는
    코프로세서.
  9. 제1항에서,
    상기 저항 변화 메모리 모듈은 DDR(double data rate) 인터페이스를 채용하는 코프로세서.
  10. 제9항에서,
    상기 DDR 인터페이스는 비휘발성 메모리 인터페이스인 코프로세서.
  11. 제1항에서,
    상기 저항 변화 메모리 모듈은,
    복수의 저항 변화 메모리 셀을 포함하는 메모리 셀 어레이,
    복수의 행 어드레스 버퍼, 그리고
    상기 메모리 셀 어레이에서 행을 선택하기 위한 행 디코더를 포함하며,
    상기 메모리 컨트롤러는, 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈에 액세스하기 위한 행 어드레스를 상위 어드레스와 하위 어드레스로 나누고, 상기 상위 어드레스를 상기 복수의 행 어드레스 버퍼 중 타깃 행 어드레스 버퍼로 전달하고, 상기 하위 어드레스를 상기 행 디코더로 전달하며,
    상기 행 디코더는 상기 타깃 행 어드레스 버퍼에 저장된 상기 상위 어드레스와 상기 메모리 컨트롤러로부터 수신한 상기 하위 어드레스를 결합한 어드레스에 기초해서 상기 행을 선택하는
    코프로세서.
  12. 제11항에서,
    상기 메모리 컨트롤러는 상기 복수의 행 어드레스 버퍼 중 타깃 행 어드레스 버퍼를 선택하기 위한 어드레스를 상기 복수의 행 어드레스 버퍼로 전달하는 코프로세서.
  13. 제11항에서,
    상기 저항 변화 메모리 모듈은, 복수의 행 데이터 버퍼를 더 포함하며,
    상기 메모리 셀 어레이에서 선택된 행에서 읽은 데이터는 상기 복수의 행 데이터 버퍼 중 타깃 행 데이터 버퍼에 저장되는 코프로세서.
  14. 제11항에서,
    상기 저항 변화 메모리 모듈은,
    상기 복수의 메모리 셀 어레이에 매핑된 레지스터, 그리고
    상기 레지스터의 값에 기초해서 상기 메모리 셀 어레이에 기입될 데이터를 저장하는 프로그램 버퍼를 더 포함하며,
    상기 프로그램 버퍼에 저장된 데이터가 상기 메모리 셀 어레이에 기입되는 코프로세서.
  15. 제1항에서,
    상기 저항 변화 메모리 모듈은 상변화 메모리(phase-change memory) 모듈, 저항성 메모리(resistive memory) 모듈 또는 자기저항 메모리(magnetoresistive memory) 모듈을 포함하는 코프로세서.
  16. 호스트의 중앙 프로세싱 유닛(central processing unit, CPU)의 기능을 보조하거나 상기 CPU와 별도로 데이터 프로세싱을 수행하는 코프로세서로서,
    상기 호스트와 통신하기 위한 인터페이스 모듈,
    상기 호스트로부터 전달된 커널을 저장하는 저항 변화 메모리(resistance switching memory) 모듈,
    상기 코프로세서의 코어에 해당하며, 상기 저항 변화 메모리 모듈로부터 상기 커널을 로드하여서 실행하는 프로세싱 엘리먼트,
    상기 인터페이스 모듈을 통해 상기 호스트와 통신하며, 상기 프로세싱 엘리먼트로부터 상기 커널의 실행에 따라 생성된 메모리 요청을 수신하는 서버,
    상기 저항 변화 메모리 모듈에 연결되어 있으며, 상기 서버로부터 상기 메모리 요청을 수신하여 상기 프로세싱 엘리먼트가 저항 변화 메모리 모듈에 액세스하도록 하는 메모리 컨트롤러, 그리고
    상기 인터페이스 모듈, 상기 프로세싱 엘리먼트, 상기 서버 및 상기 메모리 컨트롤러를 통합하는 네트워크
    를 포함하는 코프로세서.
  17. 제16항에서,
    상기 메모리 컨트롤러는, 컴퓨팅 디바이스의 운영 체제 및 다른 메모리의 도움 없이, 상기 메모리 요청에 따라 상기 저항 변화 메모리 모듈에 액세스하여 상기 저항 변화 메모리 모듈와 상기 프로세싱 엘리먼트 사이에서 데이터를 이동시키는 코프로세서.
  18. 제17항에서,
    상기 데이터의 이동 시에 상기 호스트로는 상기 데이터가 저장되지 않는 코프로세서.
  19. 제16항에서,
    상기 서버는 상기 저항 변화 메모리 모듈에 저장된 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하며,
    상기 프로세싱 엘리먼트는 상기 메모리 어드레스에 기초해서 상기 커널을 로드하는
    코프로세서.
  20. 제19항에서,
    상기 서버의 제어에 따라 상기 프로세싱 엘리먼트의 슬립 모드를 제어하는 파워 슬립 컨트롤러를 더 포함하며,
    상기 서버는 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장하기 전에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 상기 슬립 모드로 전환하고, 상기 커널의 메모리 어드레스를 상기 프로세싱 엘리먼트에 저장한 후에 상기 파워 슬립 컨트롤러를 통해 상기 프로세싱 엘리먼트를 깨우는
    코프로세서.
  21. 제1항 내지 제20항 중 어느 한 항에 기재된 코프로세서,
    CPU,
    시스템 메모리, 그리고
    상기 코프로세서, 상기 CPU 및 상기 시스템 메모리를 연결하는 메모리 브릿지
    를 포함하는 컴퓨팅 디바이스.
KR1020160147249A 2016-07-26 2016-11-07 저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스 KR101890426B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611108726.2A CN107656883A (zh) 2016-07-26 2016-12-06 基于电阻切换式存储器的协处理器和包括其的计算设备

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662366667P 2016-07-26 2016-07-26
US62/366,667 2016-07-26
KR1020160119517 2016-09-19
KR20160119517 2016-09-19

Publications (2)

Publication Number Publication Date
KR20180012172A KR20180012172A (ko) 2018-02-05
KR101890426B1 true KR101890426B1 (ko) 2018-08-21

Family

ID=61010149

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160147249A KR101890426B1 (ko) 2016-07-26 2016-11-07 저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스

Country Status (2)

Country Link
US (1) US10936198B2 (ko)
KR (1) KR101890426B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018148923A1 (en) * 2017-02-17 2018-08-23 Intel Corporation Application and system fast launch by virtual address area container
US10186011B2 (en) * 2017-04-28 2019-01-22 Intel Corporation Programmable coarse grained and sparse matrix compute hardware with advanced scheduling
US20190012204A1 (en) * 2017-07-05 2019-01-10 Qualcomm Incorporated Reverse Tiling
KR102446121B1 (ko) * 2018-06-29 2022-09-22 주식회사 멤레이 메모리 제어 장치 및 이를 포함하는 메모리 시스템
KR101952827B1 (ko) 2018-06-29 2019-02-27 주식회사 맴레이 메모리 제어 장치 및 이를 포함하는 메모리 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003502728A (ja) 1999-06-15 2003-01-21 ヒューレット・パッカード・カンパニー プロセッサおよびコプロセッサを含むコンピュータ・システム
US20140129753A1 (en) 2012-11-06 2014-05-08 Ocz Technology Group Inc. Integrated storage/processing devices, systems and methods for performing big data analytics

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4757474A (en) * 1986-01-28 1988-07-12 Fujitsu Limited Semiconductor memory device having redundancy circuit portion
US7827348B2 (en) 2000-01-06 2010-11-02 Super Talent Electronics, Inc. High performance flash memory devices (FMD)
US6931498B2 (en) 2001-04-03 2005-08-16 Intel Corporation Status register architecture for flexible read-while-write device
US20060004951A1 (en) 2004-06-30 2006-01-05 Rudelic John C Method and apparatus to alter code in a memory
US8756402B2 (en) 2007-09-14 2014-06-17 Intel Mobile Communications GmbH Processing module, processor circuit, instruction set for processing data, and method for synchronizing the processing of codes
KR101097471B1 (ko) 2008-12-26 2011-12-23 주식회사 하이닉스반도체 비휘발성 메모리 장치
KR20110029402A (ko) * 2009-09-15 2011-03-23 삼성전자주식회사 비휘발성 메모리 장치, 및 그것을 포함한 메모리 시스템, 그것의 쓰기 전류 제어 방법
US8375392B2 (en) 2010-01-12 2013-02-12 Nec Laboratories America, Inc. Data aware scheduling on heterogeneous platforms
US9619246B2 (en) * 2010-03-30 2017-04-11 Hon Hai Precision Industry Co., Ltd. Electronic computing device and reboot method thereof
US8645637B2 (en) 2010-11-16 2014-02-04 Micron Technology, Inc. Interruption of write memory operations to provide faster read access in a serial interface memory
US20140240327A1 (en) * 2013-02-22 2014-08-28 The Trustees Of Princeton University Fine-grained cpu-gpu synchronization using full/empty bits
US9734097B2 (en) * 2013-03-15 2017-08-15 Micron Technology, Inc. Apparatuses and methods for variable latency memory operations
US10223326B2 (en) * 2013-07-31 2019-03-05 Oracle International Corporation Direct access persistent memory shared storage
KR102131324B1 (ko) 2014-07-08 2020-07-07 삼성전자 주식회사 저항성 메모리 장치 및 저항성 메모리 장치의 동작방법
KR102402672B1 (ko) 2015-09-01 2022-05-26 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 연산들을 처리하는 방법
KR102388605B1 (ko) 2015-12-01 2022-04-21 에스케이하이닉스 주식회사 메모리 및 이를 포함하는 전자 장치
US10025741B2 (en) 2016-01-13 2018-07-17 Samsung Electronics Co., Ltd. System-on-chip, mobile terminal, and method for operating the system-on-chip

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003502728A (ja) 1999-06-15 2003-01-21 ヒューレット・パッカード・カンパニー プロセッサおよびコプロセッサを含むコンピュータ・システム
US20140129753A1 (en) 2012-11-06 2014-05-08 Ocz Technology Group Inc. Integrated storage/processing devices, systems and methods for performing big data analytics

Also Published As

Publication number Publication date
US10936198B2 (en) 2021-03-02
KR20180012172A (ko) 2018-02-05
US20180032251A1 (en) 2018-02-01

Similar Documents

Publication Publication Date Title
KR101890426B1 (ko) 저항 변화 메모리 기반 코프로세서 및 이를 포함하는 컴퓨팅 디바이스
US10929059B2 (en) Resistance switching memory-based accelerator
TWI783369B (zh) 準揮發性系統級記憶體
CN108572933B (zh) 用于直接存储器存取的数据缓冲器指针找取
KR100506062B1 (ko) 복합형 메모리 장치
US11288192B2 (en) Memory controlling device and memory system including the same
US11487666B2 (en) Timed data transfer between a host system and a memory sub-system
US10452531B1 (en) Memory controlling device for reconstructing original data using non-blocking code and memory system including the same
US20130329491A1 (en) Hybrid Memory Module
US11416170B2 (en) Technologies for efficiently accessing data columns and rows in a memory
KR101888405B1 (ko) 메모리 컨트롤러, 그리고 이를 포함하는 메모리 모듈 및 프로세서
US11456025B2 (en) Hybrid memory module
US20200311019A1 (en) Technologies for providing a scalable architecture for performing compute operations in memory
KR20170062614A (ko) 상대 주소를 사용하는 메모리 장치의 접근 방법
US20220406354A1 (en) Hybrid Memory Module
KR102446121B1 (ko) 메모리 제어 장치 및 이를 포함하는 메모리 시스템
JP5281163B2 (ja) 半導体装置およびメモリモジュール
Jung Nearzero: An integration of phase change memory with multi-core coprocessor
KR101944037B1 (ko) 저항 변화 메모리 기반 가속기
US8374040B2 (en) Write bandwidth in a memory characterized by a variable write time
CN107656883A (zh) 基于电阻切换式存储器的协处理器和包括其的计算设备
US11656994B2 (en) Non-volatile memory with optimized read

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant