KR102000721B1 - 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 - Google Patents

컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 Download PDF

Info

Publication number
KR102000721B1
KR102000721B1 KR1020180116574A KR20180116574A KR102000721B1 KR 102000721 B1 KR102000721 B1 KR 102000721B1 KR 1020180116574 A KR1020180116574 A KR 1020180116574A KR 20180116574 A KR20180116574 A KR 20180116574A KR 102000721 B1 KR102000721 B1 KR 102000721B1
Authority
KR
South Korea
Prior art keywords
memory
coprocessor
data
cpu
gpu
Prior art date
Application number
KR1020180116574A
Other languages
English (en)
Other versions
KR20180111737A (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 KR1020180116574A priority Critical patent/KR102000721B1/ko
Publication of KR20180111737A publication Critical patent/KR20180111737A/ko
Application granted granted Critical
Publication of KR102000721B1 publication Critical patent/KR102000721B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory

Landscapes

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

Abstract

컴퓨팅 디바이스가 CPU, CPU를 위한 CPU 메모리, 비휘발성 메모리, 비휘발성 메모리를 사용하는 코프로세서, 코프로세서에 처리할 데이터 또는 코프로세서에서 처리된 데이터를 저장하는 코프로세서 메모리, 그리고 기록 매체를 포함한다. 기록 매체는 CPU에 의해 실행되는 비휘발성 메모리용 컨트롤러 드라이버와 라이브러리를 포함한다. 컨트롤러 드라이버는 코프로세서 메모리를 CPU 메모리의 시스템 메모리 블록에 매핑하고, 라이브러리는 CPU 메모리에 매핑된 시스템 메모리 블록을 거쳐 코프로세서와 비휘발성 메모리 사이에서 데이터를 이동한다.

Description

컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램{COMPUTING DEVICE, DATA TRANSFER METHOD BETWEEN COPROCESSOR AND NON-VOLATILE MEMORY, AND PROGRAM INCLUDING THE SAME}
본 발명은 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램에 관한 것이다.
현재 많은 병렬 연산을 상대적으로 낮은 전력 소모로 수행할 수 있는 데이터 처리 코프로세서(coprocessor)가 널리 사용되고 있다. 코프로세서의 한 예로 그래픽 처리 유닛(graphic processing unit)이 있다. 이러한 코프로세서에서는 많은 수의 프로세싱 코어가 실행 컨트롤을 공유하면서 쓰레드 레벨 병렬화(thread-level parallelism) 및 데이터 레벨 병렬화(data-level parallelism)을 통해 수많은 조각의 데이터에 대해서 동일한 연산을 수행할 수 있다. 이에 따라 중앙 처리 유닛(central processing unit, CPU)만 사용하는 시스템에 비해서, 코프로세서를 함께 사용하는 시스템에서는 상당한 속도 향상을 가져올 수 있다.
이와 같이 코프로세서는 전에 비해 많은 양의 데이터를 처리할 수 있으며, 데이터의 볼륨도 증가할 것으로 예상된다. 그런데 코프로세서는 호스트 메모리에 비해서 상대적으로 적은 크기의 온보드(on-board) 메모리를 채용한다. 따라서 코프로세서는 많은 양의 데이터를 처리하기 위해서 호스트 머신에 연결된 별도의 비휘발성 메모리를 사용하고 있다.
그러나 코프로세서와 비휘발성 메모리가 서로 완전히 분리되어 있으며 서로 다른 소프트웨어 스택에 의해 관리되므로, 코프로세서가 비휘발성 메모리로부터 데이터를 읽거나 비휘발성 메모리로 데이터를 쓰기 위해서는, 사용자 공간과 커널 공간 사이에 불필요한 많은 메모리 할당/해제 및 데이터 복사가 이루어진다. 또한 커널 모듈이 사용자 공간에 직접 접근할 수 없으므로, 커널 공간과 사용자 공간 사이의 메모리 관리 및 데이터 복사 오버헤드를 피할 수 없다. 또한 데이터 복사에 동반한 커널 모드와 사용자 모드의 스위칭 오버헤드로 인해 데이터 이동에 지연이 발생할 수 있다. 이러한 오버헤드로 인해 코프로세서의 성능에 비해서 실제 속도 향상 효과가 크지 않다는 문제점이 있다.
본 발명이 이루고자 하는 과제는 코프로세서와 비휘발성 메모리 사이에서 데이터 이동에 따른 오버헤드를 줄일 수 있는 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램을 제공하는 것이다.
본 발명의 한 실시예에 따르면, CPU, 상기 CPU를 위한 CPU 메모리, 비휘발성 메모리, 상기 비휘발성 메모리를 사용하는 코프로세서, 상기 코프로세서에 처리할 데이터 또는 상기 코프로세서에서 처리된 데이터를 저장하는 코프로세서 메모리, 그리고 기록 매체를 포함하는 컴퓨팅 디바이스가 제공된다. 상기 기록 매체는, 상기 CPU에 의해 실행되는, 상기 코프로세서 메모리를 상기 CPU 메모리의 시스템 메모리 블록에 매핑하는 상기 비휘발성 메모리용 컨트롤러 드라이버와 상기 CPU 메모리에 매핑된 상기 시스템 메모리 블록을 거쳐 상기 코프로세서와 상기 비휘발성 메모리 사이에서 데이터를 이동하는 라이브러리를 포함한다.
상기 시스템 메모리 블록은 메모리 매핑 레지스터와 상기 코프로세서 메모리에 매핑된 핀드 메모리 영역을 포함할 수 있다. 이때, 상기 메모리 매핑 레지스터는 상기 비휘발성 메모리를 위해서 상기 컨트롤러 드라이버에 의해 관리되며, 상기 핀드 메모리 영역의 어드레스를 포인트하는 복수의 엔트리를 포함할 수 있다.
상기 시스템 메모리 블록의 시작 옵셋은 상기 호스트 머신과 상기 비휘발성 메모리를 연결하는 인터페이스의 베이스 어드레스 레지스터에 의해 지시될 수 있다.
각 엔트리는 상기 핀드 메모리 영역에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 매핑되어 있을 수 있다.
상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 컨트롤러 드라이버는 상기 비휘발성 메모리의 데이터를 상기 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 매핑되어 있는 상기 물리적 블록 어드레스의 공간으로 전달할 수 있다.
상기 비휘발성 메모리는 NVMe(non-volatile memory express) 프로토콜로 상기 CPU에 연결되고, 상기 각 엔트리는 물리적 영역 페이지(physical region page, PRP) 엔트리일 수 있다.
상기 비휘발성 메모리는 AHCI(advanced host controller interface) 프로토콜로 상기 CPU에 연결되고, 상기 각 엔트리는 물리적 영역 디스크립터 테이블(physical region descriptor table, PRDT) 엔트리일 수 있다.
상기 라이브러리는 소프트웨어 스택에서 어플리케이션과 네이티브 파일 시스템 위에 위치할 수 있다.
본 발명의 다른 실시예에 따르면, 컴퓨팅 디바이스에서 코프로세서와 비휘발성 메모리 사이에서 데이터를 이동하는 방법이 제공된다. 상기 데이터 이동 방법은, 상기 코프로세서를 위한 코프로세서 메모리를 CPU를 위한 CPU 메모리의 시스템 메모리 블록에 매핑하는 단계, 그리고 상기 CPU 메모리에 매핑된 상기 시스템 메모리 블록을 거쳐 상기 코프로세서와 상기 비휘발성 메모리 사이에서 데이터를 이동하는 단계를 포함한다.
상기 시스템 메모리 블록은 메모리 매핑 레지스터와 상기 코프로세서 메모리에 매핑된 핀드 메모리 영역을 포함할 수 있다. 이때, 상기 메모리 매핑 레지스터는 상기 비휘발성 메모리를 위한 컨트롤러 드라이버에 의해 관리되며, 상기 핀드 메모리 영역의 어드레스를 포인트하는 복수의 엔트리를 포함할 수 있다.
상기 시스템 메모리 블록의 시작 옵셋은 상기 호스트 머신과 상기 비휘발성 메모리를 연결하는 인터페이스의 베이스 어드레스 레지스터에 의해 지시될 수 있다.
각 엔트리는 상기 핀드 메모리 영역에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 매핑되어 있을 수 있다.
상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 데이터를 이동하는 단계는 상기 비휘발성 메모리의 데이터를 상기 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 매핑되어 있는 상기 물리적 블록 어드레스의 공간으로 전달하는 단계를 포함할 수 있다.
상기 비휘발성 메모리는 NVMe 프로토콜로 상기 CPU에 연결되고, 상기 각 엔트리는 PRP 엔트리일 수 있다.
상기 비휘발성 메모리는 AHCI 프로토콜로 상기 CPU에 연결되고, 상기 각 엔트리는 PRDT 엔트리일 수 있다.
본 발명의 또 다른 실시예에 따르며, CPU, 상기 CPU를 위한 CPU 메모리, 비휘발성 메모리, 상기 비휘발성 메모리를 사용하는 코프로세서, 그리고 상기 코프로세서에 처리할 데이터 또는 상기 코프로세서에서 처리된 데이터를 저장하는 코프로세서 메모리를 포함하는 컴퓨팅 디바이스에서 의해 실행되는 프로그램이 제공된다. 상기 프로그램은, 상기 코프로세서 메모리를 상기 CPU 메모리의 시스템 메모리 블록에 매핑하는 상기 비휘발성 메모리를 위한 컨트롤러 드라이버, 그리고 상기 CPU 메모리에 매핑된 상기 시스템 메모리 블록을 거쳐 상기 코프로세서와 상기 비휘발성 메모리 사이에서 데이터를 이동하는 라이브러리를 포함한다.
본 발명의 한 실시예에 따르면, 코프로세서와 비휘발성 메모리 사이에서 직접적으로 데이터를 이동할 수 있으므로, 가상 메모리 할당을 통한 불필요한 메모리 복사를 줄이고, 이러한 복사에 따른 오버헤더 및 복사를 위한 사용자 모드와 커널 모드 사이의 스위칭을 줄일 수 있다.
도 1은 본 발명의 한 실시예에 따른 코프로세서와 비휘발성 메모리를 사용하는 컴퓨팅 디바이스를 나타내는 도면이다.
도 2는 전형적인 컴퓨팅 디바이스에서의 GPU와 SSD를 위한 소프트웨어 스택을 나타내는 도면이다.
도 3은 전형적인 컴퓨팅 디바이스의 소프트웨어 스택에서의 GPU 프로그래밍 모델을 나타내는 도면이다.
도 4는 전형적인 컴퓨팅 디바이스에서 GPU와 SSD 사이에서의 데이터 이동을 나타내는 도면이다.
도 5는 전형적인 컴퓨팅 디바이스에서의 성능 열화를 나타내는 도면이다.
도 6은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 GPU와 SSD를 위한 소프트웨어 스택을 나타내는 도면이다.
도 7은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 NVMe 프로토콜을 통한 SSD와 GPU 사이의 데이터 이동을 나타내는 도면이다.
도 8은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 AHCI 프로토콜을 통한 SSD와 GPU 사이의 데이터 이동을 나타내는 도면이다.
도 9은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 소프트웨어 스택에서의 GPU 프로그래밍 모델을 나타내는 도면이다.
도 10은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 GPU와 SSD 사이에서의 데이터 이동을 나타내는 도면이다.
도 11은 GPU 어플리케이션을 위한 파일 데이터를 이동할 때의 지연 값을 나타내는 도면이다.
도 12는 GPU 어플리케이션의 실행 시간을 나타내는 도면이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
도 1은 본 발명의 한 실시예에 따른 코프로세서와 비휘발성(non-volatile) 메모리를 사용하는 컴퓨팅 디바이스를 나타내는 도면이다. 도 1은 가능한 컴퓨팅 디바이스의 한 예이며, 본 발명의 실시예에 따른 컴퓨팅 디바이스의 다른 다양한 구조로 구현될 수 있다.
도 1을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스는 비휘발성 메모리(110), 코프로세서(120) 및 CPU(130)를 포함한다.
앞으로 본 발명의 실시예에서는 GPU와 SSD를 각각 코프로세서(120)와 비휘발성 메모리(110)의 한 예로 설명하지만, 본 발명은 이에 한정되지 않는다. 코프로세서(120)는 CPU(130)와 같은 주 프로세서의 기능을 보완할 수 있는 다른 컴퓨터 프로세서일 수도 있으며, 비휘발성 메모리(110)는 파일 입출력 기반의 비휘발성 메모리로 전원이 공급되지 않아도 정보를 계속 유지할 수 있는 다른 메모리 또는 저장 장치일 수도 있다.
GPU(120)와 SSD(110)는 메인보드의 칩셋을 통해 CPU(130)에 연결된다. 컴퓨팅 디바이스는 GPU(120)와 SSD(110)를 CPU(130)와 연결하기 위해서 노스브릿지(northbridge)(140)와 사우스브릿지(southbrideg)(150)를 더 포함할 수 있다.
GPU(120)는 CPU(130) 측에 위치한 노스브릿지(140)에 연결되어, CPU(130)가 고성능 PCIe(peripheral component interconnect express) 링크를 통해 GPU(120) 측 메모리(앞으로 "GPU 메모리"라 함)(121)에 접근할 수 있다. 또한 SSD(110)는 PCIe 링크 또는 SATA와 같은 얇은 스토리지 인터페이스를 통해 메인보드에서 PCI 슬롯 측에 위치한 사우스브릿지(150)에 연결될 수 있다. 노스브릿지(140)는 메모리 컨트롤러 허브(memory controller hub, MCH)로 불리기도 하며, 사우스브릿지(150)는 입출력 컨트롤러 허브(I/Q controller hub, ICH)로 불리기도 한다.
GPU(120)와 SSD(110)는 다른 주변 장치에 비해서 매우 높은 대역폭을 제공할 수 있지만, CPU(130) 관점에서 GPU(120)와 SSD(110)는 주변 장치로 고려된다. 그러므로 전형적인 컴퓨팅 디바이스에서는 GPU(120)와 SSD(110) 사이에서 데이터를 전달하기 위해서 주변 장치 사이의 데이터 전달 방법이 사용되고 있다. 즉, 전형적인 컴퓨팅 디바이스는 데이터를 메모리에 복사하는 방법을 통해 CPU(130)와 GPU(120) 사이에서 데이터를 전달하거나 CPU(130)와 SSD(110) 사이에서 데이터를 전달할 수 있을 뿐, GPU(120)와 SSD(110) 사이에서 직접 데이터를 전달할 수 없다. CPU(130)에서의 복사를 위해 컴퓨팅 디바이스는 시스템 메모리에 해당하는 CPU측 메모리(앞으로 "CPU 메모리"라 함)(131)를 포함한다. CPU 메모리(131)는 예를 들면 랜덤 액세스 메모리(random access memory, RAM), 특히 동적 RAM(dynamic RAM, DRAM)일 수 있다.
어떤 실시예에서, CPU(130), CPU 메모리(131), 노스브릿지(140) 및 사우스브릿지(150)를 포함하는 시스템을 호스트 머신(host machine)이라 할 수 있다.
먼저 도 2 내지 도 5를 참고로 하여 전형적인 컴퓨터 디바이스에서의 GPU(120)와 SSD(110) 사이의 데이터 이동에 대해서 설명한다.
도 2는 전형적인 컴퓨팅 디바이스에서의 GPU와 SSD를 위한 소프트웨어 스택을 나타내는 도면이다.
도 2를 참고하면, 전형적인 컴퓨팅 디바이스에서 GPU(120)와 SSD(110)를 위한 소프트웨어 스택은 사용자 공간(user space)(210)과 커널 공간(kernel space)(220)으로 구별될 수 있다. 사용자 공간(210)은 사용자 레벨 CPU에서 동작하며, 운영 체제(operating system, OS)가 어플리케이션(예를 들면, GPU 어플리케이션)(200)을 실행하기 위한 가상 메모리 영역일 수 있다, 커널 공간(220)은 커널 레벨 CPU에서 동작하며, OS 커널과 디바이스 드라이버를 운영하기 위한 가상 메모리 영역일 수 있다.
GPU(120)와 SSD(110)의 서로 다른 기능과 용도로 인해 두 개의 구별되는 라이브러리, 즉 입출력(input/output, I/O) 런타임 라이브러리(211)와 GPU 런타임 라이브러리(221)가 동일한 사용자 공간(210)에 공존하며, 이들 라이브러리(211, 221)는 GPU 어플리케이션(200)에 사용된다.
또한 소프트웨어 스택은 SSD(110)를 위한 스토리지 소프트웨어 스택과 GPU(120)를 위한 GPU 소프트웨어 스택으로 구별될 수 있다. 이때, SSD 접근 및 파일 서비스는 스토리지 소프트웨어 스택의 모듈에 의해 관리되는 반면, 메모리 할당 및 데이터 전달을 포함하는 GPU 관련 활동은 GPU 소프트웨어 스택의 모듈에 의해 처리된다.
먼저 스토리지 소프트웨어 스택에서 GPU 어플리케이션(200)이 인터페이스, 예를 들면 POSIX(portable operating system interface)를 통해 I/Q 런타임 라이브러리(211)를 호출하면, I/Q 런타임 라이브러리(211)가 사용자 레벨 콘텍스트를 저장하고, 가상 파일 시스템(virtual file system, VFS)(212)으로 넘어간다. 가상 파일 시스템(212)은 모든 표준 파일 시스템 호출을 관리하기 위한 커널 모듈이다. 가상 파일 시스템(212)은 적절한 네이티브 파일 시스템(native file system)(213)을 선택하고 파일 I/O 요청을 시작한다. 다음, 네이티브 파일 시스템(213)은 파일 I/O 요청과 관련된 실제 물리적 위치를 확인하고, 블록 디바이스 오퍼레이션 데이터 구조로부터 검색할 수 있는 다른 함수 포인터를 호출함으로써 블록 레벨 I/O 서비스 트랜잭션을 형성한다. 최종적으로, 디스크 드라이버(214)가 I/O 요청을 SSD(110)로 전달한다. 디스크 드라이버(214)는 예를 들면 PCIe 또는 AHCI(advanced host controller interface) 컨트롤러를 통해 SSD(110)로 I/Q 요청을 전달할 수 있다. 이와 같이, I/O 서비스가 완료하면, 타깃 데이터는 위에서 언급한 모듈(214, 213, 212, 211)의 반대 과정을 거쳐 GPU 어플리케이션(200)으로 반환된다.
GPU 소프트웨어 스택에서, GPU 런타임 라이브러리(221)가 GPU 커널을 실행하고 CPU 메모리(131)와 GPU 메모리(121) 사이의 데이터 복사에 책임이 있다. 스토리지 소프트웨어 스택과 달리, GPU 런타임 라이브러리(221)는 사용자 레벨에서 GPU 디바이스 명령을 생성하고 이를 타깃 데이터와 함께 직접 커널측 GPU 드라이버(222)로 전달한다. GPU 명령에 따라 GPU 드라이버(222)는 커널 메모리 공간, 즉 CPU 메모리(131)를 GPU 메모리(121)에 매핑하거나 어드레스를 GPU 메모리(121)의 물리적 어드레스로 변환한다. 어드레스 변환 또는 매핑이 완료되면, GPU(120)에 의해 CPU 메모리(131)와 GPU 메모리(121) 사이에서 데이터 이동이 가능해진다.
다음 이러한 소프트웨어 스택에서의 GPU 프로그래밍 모델에 대해서 도 3을 참고로 하여 설명한다.
도 3은 전형적인 컴퓨팅 디바이스의 소프트웨어 스택에서의 GPU 프로그래밍 모델을 나타내는 도면이다.
도 3을 참고하면, GPU 어플리케이션(200)은 먼저 open() 함수를 통해 읽기 또는 쓰기를 위한 파일 디스크립터(file descriptor)를 연다. 다음 GPU 어플리케이션(200)은 malloc() 함수를 통해 SSD(110)로부터 데이터를 읽거나 SSD(110)로 데이터를 쓰기 위해서 가상 사용자 메모리를 CPU 메모리(131)에 할당한다. 또한 GPU 어플리케이션(200)은 cudaMalloc() 함수를 통해 GPU(110)와 CPU(130) 사이의 데이터 이동을 위해서 GPU 메모리(121)도 할당한다. 다음 GPU 어플리케이션(200)은 read() 함수를 통해 앞에서 준비한 파일 디스크립터와 GPU 메모리(121)의 어드레스를 특정함으로써, I/O 런타임 라이브러리 API를 호출한다. 이에 따라 타깃 데이터가 SSD(110)로부터 CPU 메모리(131)로 이동하면, GPU 어플리케이션(200)은 cudaMemcpy() 함수를 통해 CPU 메모리(131)에서 GPU 메모리(121)로 데이터 전달을 시작하고, 특정 개수의 쓰레드(thread)와 메모리 어드레스 포인터를 가지고 kernel() 함수를 통해 GPU 런타임 라이브러리를 호출함으로써 GPU 커널을 실행한다. 다음 GPU 어플리케이션(200)이 GPU(120)가 생성한 결과를 저장할 필요가 있는 경우, cudaMemcpy() 함수를 통해 결과 데이터를 GPU 메모리(121)로부터 CPU 메모리(131)의 가상 사용자 메모리에 복사하고, write() 함수를 통해 해당 데이터를 SSD에 차례로 쓸 수 있다. 이러한 처리가 여러 번 반복될 수 있다(loop). 모든 처리가 완료된 후에, GPU 어플리케이션(200)은 할당한 CPU 메모리의 정리, 할당한 GPU 메모리(121)의 정리[cudafree()] 및 파일 디스크립터의 정리[close()]를 수행한다.
다음, GPU 어플리케이션(200)이 GPU(120)와 SSD(110) 사이에서 데이터를 이동하는 과정에 대해서 도 4를 참고로 하여 설명한다.
도 4는 전형적인 컴퓨팅 디바이스에서 GPU와 SSD 사이에서의 데이터 이동을 나타내는 도면이다.
도 4를 참고하면, 먼저 GPU 어플리케이션(200)은 커널에 읽기 및/또는 쓰기를 위한 파일 디스크립터를 생성한다(S410). 다음 GPU 어플리케이션(200)은 SSD(110)로부터 데이터를 읽거나 SSD(110)로 데이터를 쓰기 위해서 CPU 메모리(131)에 가상 사용자 메모리를 할당한다(S415). 또한 GPU 어플리케이션(200)은 GPU(120)에 데이터를 쓰거나 GPU(120)로부터 데이터를 읽기 위해서 GPU 메모리(121)를 할당한다(S420).
이어서 GPU 어플리케이션(200)은 SSD(110)에 대해서 파일 읽기를 요청한다(S425). 커널 공간(220)에서는 CPU 메모리(131)에 물리적 메모리를 할당하여서 가상 사용자 메모리로부터 물리적 메모리로 파일 읽기를 위한 데이터를 복사하고(S430), SSD(110)에 대해서 파일 데이터를 요청한다(S435). 그러면 SSD(110)로부터 CPU 메모리(131), 즉 CPU 메모리(131)의 물리적 메모리로 파일 데이터가 전달되고, CPU 메모리(131)의 물리적 메모리에서 가상 사용자 메모리로 파일 데이터가 복사된다(S440). 다음 GPU 어플리케이션(200)은 CPU 메모리(131)에서 GPU 메모리(121)로 파일 데이터를 전달한다(S445). 이에 따라 GPU(120)가 파일 데이터를 처리한다.
GPU 어플리케이션(200)이 GPU(120)가 파일 데이터를 처리하여서 생성한 결과를 저장할 필요가 있는 경우, 결과 데이터를 GPU 메모리(121)로부터 CPU 메모리(131)의 가상 사용자 메모리로 전달한다(S450). 이어서 GPU 어플리케이션(200)은 SSD(110)에 대해서 파일 쓰기를 요청한다(S455). 커널 공간(220)에서는 CPU 메모리(131)에 물리적 메모리를 할당하여서 가상 사용자 메모리로부터 물리적 메모리로 결과 데이터를 복사하고(S460), CPU 메모리(131)의 물리적 메모리에서 SSD(110)로 결과 데이터를 전달한다(S465).
다음, GPU 어플리케이션(200)은 모든 처리를 완료한 후에, 읽기 및/또는 쓰기를 위해 할당한 CPU 메모리(131)의 가상 사용자 메모리를 해제하고(S470), 쓰기 및/또는 읽기를 위해 할당한 GPU 메모리(121)를 해제한다(S475). 또한 GPU 어플리케이션(200)은 읽기 및/또는 쓰기를 위해 생성한 파일 디스크립터를 커널에서 삭제한다(S480).
도 4에서 단계 S410, S415, S425, S430, S435, S455, S460 및 S465는 I/O 런타임 라이브러리와 관련된 처리이고, 단계 S420 및 S445는 GPU 런타임 라이브러리와 관련된 처리일 수 있다. 또한 단계 S440, S470 및 S480는 스토리지 소프트웨어 스택과 관련된 장치, 즉 SSD(110)와 CPU 메모리(131)의 응답이고, 단계 S450 및 S475는 GPU(120)의 응답이다.
이와 같이, 사용자 레벨 CPU에서 동작하는 어플리케이션은 밑에 있는 커널 레벨 모듈로 I/O 또는 메모리 오퍼레이션을 요청할 필요가 있다. 일단 모듈이 파일 관련 오퍼레이션을 처리하면, 디스크 드라이버가 CPU 메모리를 중간 단계의 스토리지로 사용해서 SSD와 GPU 사이에서 파일 데이터를 교환한다. 이 경우, 도 5에 도시한 것처럼 많은 홉을 통해 GPU(120), CPU(130) 및 SSD(110) 사이에서 실제 데이터 이동에 따른 오버헤드 이외에 불필요한 활동, 예를 들면 통신 오버헤드, 불필요한 데이터 복사 및 CPU 개입 오버헤드가 발생할 수 있다. 이는 GPU와 SSD가 점유하는 CPU 실행 시간의 4.2배 및 1.68배 정도에 해당할 수 있다. 따라서 실제 병렬화를 통해 높은 대역폭을 제공할 수 있는 GPU의 처리 속도를 느리게 만들 수 있다.
이러한 전형적인 컴퓨팅 디바이스에서 발생할 수 있는 GPU(120)와 SSD(110) 사이의 데이터 이동 오버헤드를 줄일 수 있는 데이터 전달 방법이 개발되고 있다. 대표적으로 GPUDirect라는 기술이 있다.
GPUDirect는 표준 PCIe 인터페이스를 사용해서 GPU와 고성능 장치 사이의 통신을 위한 직접 경로를 지원한다. GPUDirect는 다양한 GPU 장치 사이의 피어투피어(peer-to-peer) 데이터 전달을 처리하는데 주로 사용된다. 또한 GPUDirect는 네트워크 디바이스 및 스토리지 디바이스와 같이 다른 디바이스와의 데이터 통신을 가속화하기 위해서 사용될 수 있는 NUMA(non-uniform memory access)와 RDMA(remote direct memory access)를 제공한다. GPUDirect는 GPU와 SSD 사이에서 큰 데이터 세트를 전달할 때 GPU 메모리(121) 관리를 위해 사용될 수 있지만, 모든 SSD와 GPU 디바이스가 PCIe를 사용해야 하고 동일한 루트 컴플렉스(root complex) 아래에 존재해야 한다는 단점, GPUDirect는 앞에서 설명한 전형적인 컴퓨팅 디바이스에서의 데이터 전달 방법과 호환되지 않는다는 단점, 그리고 파일 데이터 접근이 스토리지 소프트웨어 스택의 모든 성분을 통과해야 하는 단점이 존재한다.
한편, 인터페이스를 위한 프로토콜로서 NVMe(non-volatile memory express), AHCI(advance host controller interface) 등의 프로토콜이 있다.
NVMe는 NVM(non-volatile memory) 시스템을 위한 확장형(scalable) 및 고성능 인터페이스로, 최적화된 레지스터 인터페이스, 명령 및 피쳐(feature) 세트를 제공한다. NVMe는 표준 크기의 PCIe 기반 SSD, 노스브릿지나 사우스브릿지에 연결된 STATe(serial AT attachment express) SSD 등을 지원할 수 있다. 그 결과, NVMe는 SSD와 GPU가 GPUDirect가 요구하는 것처럼 동일한 루트 컴플렉스 아래에 존재할 필요가 없다는 장점이 있다. NVMe는 원래 CPU와 SSD 사이의 데이터 전달을 관리하기 위한 것이지만, 본 발명의 한 실시예에서는 물리적 페이지 영역(physical page region, PRP)으로 불리는 NVMe의 시스템 메모리 블록을 SSD와 GPU에 의해 공유되도록 할 수 있다.
또한 AHCI는 사우스브릿지에서 STA와 PCIe 링크를 수용하는 진보된 스토리지 인터페이스이다. AHCI는 의미 있는 CPU 개입 없이 OS가 CPU 메모리에서 SSD로 데이터를 전달할 수 있도록 하는 시스템 메모리 구조를 정의한다. 전통적인 호스트 컨트롤러 인터페이스와 달리, AHCI는 PCIe와 많은 특성을 공유하는 DMI(direct media interface)를 통해 SSD의 고대역을 노스브릿지 컨트롤러에 노출할 수 있다. 또한 AHCI의 시스템 메모리 블록은 PRP와 특성이 유사한 물리적 영역 디스크립터(physical region descriptor, PRD)에 의해 포인트된다. 따라서 본 발명의 한 실시예에서는 AHCI의 시스템 메모리 블록을 SSD와 GPU에 의해 공유되도록 할 수 있다.
다음 본 발명의 한 실시예에 따른 데이터 이동 방법에 대해서 도 6 내지 도 11을 참고로 하여 상세하게 설명한다.
앞서 설명한 것처럼 전형적인 컴퓨팅 디바이스에서는 SSD와 GPU 장치가 서로 간에 완전히 분리되어 있으며 서로 다른 소프트웨어 스택에 의해 관리된다는 문제점이 있다. 이에 따라, SSD 및 GPU 시스템 스택 상에서 사용자 공간과 커널 공간 사이에 불필요한 많은 메모리 할당/해제 및 데이터 복사가 이루어진다. 또한 커널 모듈이 사용자 공간에 직접 접근할 수 없으므로, 커널 공간과 사용자 공간 사이의 메모리 관리 및 데이터 복사 오버헤드를 피할 수 없다. 또한 데이터 복사에 동반한 커널 모드와 사용자 모드의 스위칭 오버헤드로 인해 데이터 이동에 지연이 발생할 수 있다.
도 6은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 GPU와 SSD를 위한 소프트웨어 스택을 나타내는 도면이다.
도 6을 참고하면, 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 GPU(120)와 SSD(110)를 위한 소프트웨어 스택은 사용자 공간(610)과 커널 공간(620)으로 구별될 수 있다. 사용자 공간(610)은 사용자 레벨 CPU에서 동작하며, 운영 체제(operating system, OS)가 어플리케이션(예를 들면, GPU 어플리케이션)(600)을 실행하기 위한 가상 메모리 영역일 수 있다, 커널 공간(620)은 커널 레벨 CPU에서 동작하며, OS 커널과 디바이스 드라이버를 운영하기 위한 가상 메모리 영역일 수 있다.
이때, 커널 공간에서 GPU 소프트웨어 스택과 SSD 소프트웨어 스택이 커널 컴포넌트를 통해 통합되어 있다. 커널 컴포넌트는 라이브러리(621)와 컨트롤러 드라이버(622)를 포함한다. 이러한 라이브러리(621)과 컨트롤러 드라이버(622)를 비휘발성 메모리 관리 유닛(non-volatile memory management unit, NVMMU)라 할 수 있으며, NVMMU는 CPU(130)에 의해 실행되는 프로그램으로 컴퓨터 판독 가능한 기록 매체에 저장되어 있을 수 있다. 어떤 실시예에서, 라이브러리(621)는 SSD 소프트웨어 스택과 GPU 소프트웨어 스택을 통합하기 위한 인터페이스 라이브러리이므로, 라이브러리(621)를 통합 인터페이스 라이브러리(unified interface library, UIL)라 할 수 있다. 또한 컨트롤러 드라이버(622)는 코프로세서에서 비휘발성 메모리로 직접 액세스가 가능하도록 하기 위한 것이므로, 컨트롤러 드라이버(622)를 직접 메모리 액세스(non-volatile direct memory access, NDMA)라 할 수 있다. 아래에서는 설명의 편의상 라이브러리(621)와 컨트롤러 드라이버(622)를 각각 ULI와 NMDA라 한다.
UIL(621)은 SSD(110)와 GPU(120) 사이에서 직접 데이터를 전달하는 가상 파일 시스템 드라이버이다. UIL(621)은 GPU 메모리(121)에 매핑된 시스템 메모리 블록(커널 버퍼)를 거쳐 SSD(110)로부터 타깃 데이터를 직접 GPU 메모리(121)로 전달하거나 GPU 메모리(121)로부터 타깃 데이터를 직접 SSD(110)로 전달한다. 어떤 실시예에서 UIL(621)은 네이티브 파일 시스템 위에 위치하며, 시스템 메모리 블록을 거쳐 네이티브 파일 시스템으로부터 타깃 파일 콘텐트를 읽고 쓸 수 있다. 즉, UIL(621)은 NDMA(622)가 종래의 가상 파일 시스템 스위치를 덮으면서 제공하는 파일 액세스와 메모리 버퍼를 처리할 수 있다.
이에 따라 UIL(621)은 사용자 공간과 커널 공간 사이의 불필요한 사용자 모드 및 커널 모드 스위칭 오버헤드를 제거할 수 있다. 또한 UIL(621)은 사용자 레벨 메모리 공간을 사용하지 않으면서, GPU(120)와 CPU(130) 사이에서 데이터를 전달하는 동안 사용자 공간과 커널 공간 사이에서 데이터를 복사하지도 않을 수 있다.
NDMA(622)는 SSD(110)의 파일 읽기/쓰기를 관리하는 디스크 컨트롤러 드라이버를 변형한 컨트롤 드라이버로, SSD(110)와 GPU(120) 사이의 데이터 이동을 위해서 SSD(110)와 GPU(120)에 의해 물리적으로 공유되는 물리적 메모리 매핑을 관리한다. 즉, NDMA(622)는 GPU 메모리(121)와 시스템 메모리 블록 사이의 메모리 매핑을 관리한다. 이와 같이 매핑된 시스템 메모리 블록은 UIL(621)에 노출될 수 있다. UIL(621)은 I/O 요청이 GPU(120)와 SSD(110) 사이의 데이터 전달과 관련된 것이면 시스템 메모리 블록을 사용하여 I/O 요청의 사용자 데이터를 재구성한다. 그렇지 않으면, UIL(621)은 I/O 요청을 밑의 커널 모듈(즉, 네이티브 파일 시스템)으로 전달한다.
이때, NDMA(622)에서의 매핑 방법은 인터페이스나 컨트롤러 방식(예를 들면, NVMe 또는 AHCI)에 의해 달라질 수 있다. 아래에서는 NDMA(622)에서의 매핑 방법을 다양한 인터페이스나 컨트롤러 방식을 예로 들어서 설명한다.
먼저, 도 7에서는 NVMe SSD를 예로 들어서 설명한다.
도 7은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 NVMe 프로토콜을 통한 SSD와 GPU 사이의 데이터 이동을 나타내는 도면이다.
도 7을 참고하면, NDMA는 GPU 메모리(121)에 매핑되는 시스템 메모리 블록을 사용한다. 이러한 시스템 메모리 블록(700)은 CPU 메모리(131)에 할당되는 커널 버퍼로, 메모리 매핑 레지스터(memory-mapped register)(710)과 GPU 핀드 메모리(pinned memory) 영역(720)을 포함한다. 메모리 매핑 레지스터(710)는 SSD(110)를 위한 디스크 드라이브 컨트롤러(예를 들면, NVMe 컨트롤러)가 관리하는 레지스터이고, GPU 핀드 메모리 영역(720)은 GPU 메모리(121)에 매핑되는 영역이다.
메모리 매핑 레지스터(710)는 NVMe SSD(110)의 I/O 서브미션(submission) 큐(711)를 포함하며, 메모리 매핑 레지스터(710)의 시작 옵셋은 PCIe의 베이스라인 어드레스 레지스터(baseline address register, BAR)에 의해 지시될 수 있다. I/O 서브미션 큐에(711)는 서브미션 명령어(command)(711a)가 입력되고, 서브미션 명령어(711a)는 다양한 아이템을 가질 수 있다. 각 아이템은 두 개의 물리적 영역 페이지(physical region page, PRP) 엔트리(PRP1, PRP2)를 가질 수 있다.
각 엔트리(PRP1, PRP2)는 SSD(110)와 GPU(120) 사이의 데이터 이동을 위한 GPU 메모리(121)의 물리적 페이지를 포인트한다. 한 실시예에서, NDMA는 시스템 메모리 블록(700)의 GPU 핀드 메모리(720)의 블록 어드레스와 GPU 메모리(121)의 블록 어드레스를 매핑하여 둘 수 있다. 이 경우, 각 PRP 엔트리(PRP1, PRP2)는 GPU 핀드 메모리(720)의 소정 크기의 공간에 매핑되는 논리적 블록 어드레스(logical block address, LBA)를 포인트할 수 있다. 논리적 블록 어드레스는 디바이스가 인식할 수 있는 가상 어드레스로 시스템 메모리 블록(700)에서 소정 크기의 공간을 지시한다. 그러면 논리적 블록 어드레스에 매핑되어 있는 GPU 메모리(121)의 소정 크기의 공간의 어드레스, 즉 물리적 블록 어드레스(physical block address, PBA)가 자동으로 포인트될 수 있다.
어떤 실시예에서, PRP1 엔트리는 시스템 메모리 블록(700)의 공간을 직접 포인트하고, PRP2 엔트리는 PRP 리스트를 포인트할 수 있다. PRP 리스트는 적어도 하나의 PRP 엔트리를 포함하고, 각 PRP 엔트리가 메모리 블록을 포인트할 수 있다. 이 경우, PRP1 엔트리와 PRP2 엔트리에 의해 포인트되는 PRP 엔트리는 소정 크기의 메모리 블록, 예를 들면 4KB의 메모리 블록만 포인트할 수 있다. 따라서 SSD(110)에서 GPU(120)로 전달하거나 GPU(120)에서 SSD(110)로 전달할 데이터 양이 4KB보다 큰 경우에, PRP2 엔트리에 의해 포인트되는 PRP 리스트 상의 PRP 엔트리에 의해 데이터가 포인트될 수 있다.
따라서 GPU(120)에서 SSD(110)로 데이터를 전달하는 경우, NDMA는 SSD(110)로 전달할 데이터를 포함하는 GPU 메모리(121)에 매핑된 시스템 메모리 블록(700)의 논리적 블록 어드레스를 포인트하는 PRP1 엔트리를 생성한다. SSD(110)로 전달할 데이터 양이 4KB를 넘는 경우, NDMA는 나머지 데이터를 포함하는 GPU 메모리(121)에 매핑된 시스템 메모리 블록(700)의 논리적 블록 어드레스를 포인트하는 PRP 엔트리를 생성하고, 이 PRP 엔트리를 포함하는 PRP 리스트를 포인트하는 PPR2 엔트리를 생성한다. NDMA는 이와 같이 할당한 메모리 공간을 UIL로 전달하므로, GPU 메모리(121)에서 SSD(110)로 직접 데이터를 이동할 수 있다.
마찬가지로, SSD(110)에서 GPU(120)로 데이터를 전달하는 경우, NDMA는 GPU(120)로 전달되는 데이터를 기록할 GPU 메모리(121)에 매핑된 시스템 메모리 블록(700)의 논리적 블록 어드레스를 포인트하는 PRP1 엔트리를 생성한다. GPU(120)로 전달할 데이터 양이 4KB를 넘는 경우, NDMA는 나머지 데이터를 기록할 GPU 메모리(121)에 매핑된 시스템 메모리 블록(700)의 논리적 블록 어드레스를 포인트하는 PRP 엔트리를 생성하고, 이 PRP 엔트리를 포함하는 PRP 리스트를 포인트하는 PPR2 엔트리를 생성한다. NDMA는 이와 같이 할당한 메모리 공간을 UIL로 전달하므로, SSD(110)에서 GPU 메모리(121)로 직접 데이터를 이동할 수 있다.
어떤 실시예에서, 메모리 매핑 레지스터(710)는 I/O 서브미션 영역 위에 위치하는 컨트롤 레지스터 세트(control register set)를 더 포함할 수 있다. 즉, 컨트롤 레지스터 세트가 BAR에서 시작할 수 있다. 컨트롤 레지스터 세트는 도어벨(doorbell) 레지스터 및 인터럽트 관리를 업데이트하는 것과 같은 NVMe 작업을 관리하는데 사용될 수 있다. 메모리 매핑 레지스터(710)는 I/O 서브미션 큐 바로 밑에 위치하는 완료 큐(completion queues)를 더 포함할 수 있다.
이 경우, GPU 어플리케이션(600)은 컨트롤 레지스터 세트의 도어벨 레지스터를 사용해서 디스크 드라이브 컨트롤러에 서브미션 명령어의 존재를 알리고, 디스크 드라이브 컨트롤러가 I/O 서브미션 큐의 서브미션 명령어를 가져와서 처리한다. PRP 엔트리를 포함하는 서브미션 명령어는 디스크 드라이버 컨트롤러로 전달되어 SSD(110)의 읽기/쓰기에 사용될 수 있다. 이에 따라 디스크 드라이브 컨트롤러가 SSD(110)의 데이터를 서브미션 명령어의 아이템의 PRP 엔트리에 의해 포인트되는 GPU 메모리(121)로 전달하거나 PRP 엔트리에 의해 포인트되는 GPU 메모리(121)의 데이터를 SSD(110)로 전달할 수 있다.
이와 같이 사전에 할당된 메모리 공간이 UIL(621)로 전달되므로, 다른 커널 컴포넌트가 LBA 변환과 같은 파일 관련 작업을 적절한 방식으로 수행하는 동안, NDMA(622)는 GPU 데이터를 직접 업로드하거나 다운로드할 수 있다. NDMA(610)의 커널 버퍼는 사전에 할당된 메모리 풀로서 관리되므로, 파일 데이터와 관련된 모든 데이터 이동이 완료될 때까지 해제되어서는 안 된다. 이를 위해, 드라이버의 NVMe 초기화 시간에 등록된 인터럽스 서비스 루틴(interrupt service routine, ISR)이 변형될 수 있다.
다음 AHCI에서 GPU 메모리(121) 사이의 데이터 전달에 대해서 설명한다. NVMe와 달리, AHCI는 다른 데이터 관리 구조를 가지지만, GPU와 SSD 사이의 데이터 전달에 대해서는 유사한 전략을 채용한다.
도 8은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서의 AHCI 프로토콜을 통한 SSD와 GPU 사이의 데이터 이동을 나타내는 도면이다.
도 8을 참고하면, NDMA는 GPU 메모리(121)에 매핑되는 시스템 메모리 블록(800)을 사용한다. 시스템 메모리 블록(800)은 CPU 메모리(131)에 할당되는 커널 버퍼로, 메모리 매핑 레지스터(memory-mapped register)(810)와 GPU 핀드 메모리(pinned memory) 영역(820)을 포함한다. 메모리 매핑 레지스터(810)는 SSD(110)를 위한 디스크 드라이브 컨트롤러(예를 들면, AHCI 컨트롤러가 관리하는 레지스터이고, GPU 핀드 메모리 영역(820)은 GPU 메모리(121)에 매핑되는 영역이다.
메모리 매핑 레지스터(810)는 포괄적인 호스트 컨트롤(generic host control)(811)과 다중 포트 레지스터(multiple port registers)(812)를 포함하며, 메모리 매핑 레지스터(810)의 시작 옵셋은 AHCI 베이스 어드레스 레지스터(AHCI base address register, ABAR)에 의해 지시될 수 있다. 다중 포트 레지스터(812)는 복수의 포트를 지시하고, 각 포트는 SDD 어레이에서 개별 SSD를 나타낼 수 있다. 다중 포트 레지스터(812)는 포트별로 두 가지 메타 데이터(meta-data) 구조(812a, 812b)를 포함한다. 두 가지 메타 데이터 구조(812a, 812b)는 명령 리스트(command list)(812a)와 수신 FIS(frame information structure) 구조(812b)를 포함한다. 명령 리스트(812a)는 복수의 명령 헤더, 예를 들면 32개의 명령 헤더를 포함한다. 수신 FIS는 D2H 확인(acknowledge) FIS와 같은 핸드셰이킹(handshaking) 컨트롤을 위해 사용되는 반면, 각 명령 헤더는 물리적 영역 디스크립터 테이블(physical region descriptor table, PRDT)를 참조한다.
PRDT에는 복수의 PRDP 엔트리, 예를 들면 65536개의 엔트리가 있으며, 각 PRDP 엔트리는 도 7을 참고하여 설명한 PRP 엔트리처럼 NDMA가 관리하는 시스템 메모리 블록을 포인트한다. 즉, 각 PRDP 엔트리는 GPU 핀드 메모리의 어드레스에 해당하는 논리적 블록 어드레스를 포인트할 수 있다.
AHCI에서 각 PRDT 엔트리의 최대 버퍼 크기가 4MB이다. 어떤 실시예에서 GPU에 의해 채용된 PRP 관리 정책과 호환되도록 하기 위해서 버퍼를 소정 크기(예를 들면, 4KB)의 물리적 페이지로 분할할 수 있다. AHCI의 DMI(direct media interface)가 PCIe 링크의 물리적 특징을 공유하므로, FIS에 의해 전달되는 인터럽트는 PCIe 인터럽트 패킷으로 변환되고, 이에 따라 NDMA가 NVMe와 유사한 방식으로 인터럽트 서비스 루틴(interrupt service routine, ISR)을 관리할 수 있다.
도 9은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스의 소프트웨어 스택에서의 GPU 프로그래밍 모델을 나타내는 도면이다.
도 9를 참고하면, GPU 어플리케이션(200)은 UIL(621)과 NDMA(622)를 초기화를 위한 파일 디스크립터를 생성한다. GPU 어플리케이션(200)은 UIL(621)과 NDMA(622)의 초기화를 위해 예를 들면 nvmmuBegin() 함수를 파일 디스크립터로 사용할 수 있다. nvmmuBegin() 함수에는 nvmmuBegin(tid, w_filename)와 같이 요청자의 쓰레드 ID(tid)와 이동할 파일 이름(w_filename)이 파라미터로 입력될 수 있다. 또한 nvmmuBegin() 함수는 내부 자원 관리를 위해 요청자의 쓰레드 ID를 보관하고, 파일 데이터의 이동을 시작하기 전에 패러티 블록을 위한 파이프라이닝을 시작할 수 있다.
GPU 어플리케이션(200)은 데이터의 쓰기 및/또는 읽기를 위한 GPU 메모리(121)를 할당한다. 이를 위해 GPU 어플리케이션(200)은 예를 들면 cudaMalloc() 함수를 사용할 수 있다. cudaMalloc() 함수에는 쓰기의 경우 cudaMalloc(&pGPUInP2P, nImageDataSize)와 같이 데이터를 쓸 CPU 메모리의 어드레스(&pGPUInP2P)와 쓸 데이터 양(nImageDataSize)이 파라미터로 입력될 수 있으며, 읽기의 경우 cudaMalloc(&pGPUOutP2P, nImageDataSize)와 같이 데이터를 읽을 CPU 메모리의 어드레스(&pGPUOutP2P)와 읽을 데이터 양(nImageDataSize)이 파라미터로 입력될 수 있다.
이와 같이 GPU 메모리(121)를 할당한 후에, GPU 어플리케이션(200)은 SSD(110)로부터 GPU(120)로 전달할 데이터의 파일 이름, 옵셋 및 바이트 수(길이)를 특정함으로써 데이터를 이동한다. GPU 어플리케이션(200)은 데이터 이동을 위해 예를 들면 nvmmuMove() 함수를 호출할 수 있다. nvmmuMove() 함수는 할당된 GPU 메모리(121) 어드레스와 GPU 메모리(121) 어드레스를 포인트하는 PRP 엔트리에 기초해서 SSD(110)와 GPU(120) 사이의 데이터 경로를 생성하고, 파일 이름, 옵셋 및 데이터 양을 고려해서 데이터를 이동할 수 있다. nVmmuMove() 함수에는 nVmmuMove(r_filename, pGPUInP2P, 0, nImageDataSize, H2D)와 같이 데이터의 파일 이름(r_filename), 데이터를 쓸 GPU 메모리(121)(pGPUInP2P), 옵셋(0), 데이터 양(nImageDataSize) 및 데이터 이동 방향(D2H)이 파라미터로 입력될 수 있다. D2H 파라미터는 장치에서 호스트(device-to-host), 즉 SSD(110)에서 GPU(120)로의 이동을 지시한다.
이에 따라 타깃 데이터가 SSD(110)로부터 GPU 메모리(121)로 이동하면, GPU 어플리케이션(200)은 GPU 커널을 실행한다. GPU 커널 실행을 위해 GPU 어플리케이션(200)은 예를 들면 kernel() 함수를 호출할 수 있다.
다음 GPU 어플리케이션(200)이 GPU(120)가 생성한 결과를 저장할 필요가 있는 경우, GPU 어플리케이션(200)은 GPU(120)로부터 SSD(110)로 전달할 데이터의 파일 이름, 옵셋 및 바이트 수(길이)를 특정함으로써 데이터를 이동한다. GPU 어플리케이션(200)은 데이터 이동을 위해 예를 들면 nvmmuMove() 함수를 호출할 수 있다. nVmmuMove() 함수에는 nVmmuMove(r_filename, pGPUOutP2P, 0, nImageDataSize, D2H)와 같이 데이터의 파일 이름(r_filename), 데이터를 읽을 GPU 메모리(121)(pGPUOutP2P), 옵셋(0), 데이터 양(nImageDataSize) 및 데이터 이동 방향(H2D)이 파라미터로 입력될 수 있다. H2D 파라미터는 호스트에서 장치(host-to-device), 즉 GPU(120)에서 SSD(110)로의 이동을 지시한다.
모든 처리가 완료된 후에, GPU 어플리케이션(200)은 UIL과 NVMMU가 쓰레드를 위해 사용한 자원을 해제한다. GPU 어플리케이션(200)은 자원 해제를 위해 예를 들면 nvmmuEnd() 함수를 사용할 수 있다. nvmmuEnd() 함수에는 nvmmuEnd(tid)와 같이 쓰레드 ID가 파라미터로 입력될 수 있다.
도 10은 본 발명의 한 실시예에 따른 컴퓨팅 디바이스에서 GPU와 SSD 사이에서의 데이터 이동을 나타내는 도면이다.
도 10을 참고하면, 먼저 GPU 어플리케이션(200)은 읽기 및/또는 쓰기를 위한 파일 디스크립터를 커널에서 생성한다(S1010). 다음, GPU 어플리케이션(200)은 GPU(120)에 데이터를 쓰거나 GPU(120)로부터 데이터를 읽기 위해서 GPU 메모리(121)를 할당한다(S1020). 이에 따라, 할당된 GPU 메모리(121)의 물리적 블록 어드레스가 SSD(110)의 어드레스와 관련된 시스템 메모리 블록의 논리적 블록 어드레스에 매핑된다.
이어서 GPU 어플리케이션(200)은 SSD(110)로 데이터 읽기를 요청한다(S1030). 그러면 시스템 메모리 블록의 매핑을 통해 SSD(110)로부터 GPU 메모리(121)로 파일 데이터가 전달된다(S1040). 이에 따라 GPU(120)가 파일 데이터를 처리한다.
GPU 어플리케이션(200)이 GPU(120)가 파일 데이터를 처리하여서 생성한 결과를 저장할 필요가 있는 경우, GPU(120)로 데이터 쓰기를 요청한다(S1050). 그러면 시스템 메모리 블록의 매핑을 통해 GPU 메모리(121)로부터 SSD(110)로 파일 데이터가 전달된다(S1060).
도 10에서 단계 S1010, S1020, S1030 및 S1050은 nvmmu와 관련된 처리일 수 있다. 또한 단계 S1040은 SSD(110)의 응답이고, 단계 S1060은 GPU(120)의 응답일 수 있다.
이상에서 설명한 데이터 이동 방법은 RAID(redundant array of independent disks) 기반 SSD 어레이에도 적용될 수 있다. 이를 위해, 소프트웨어 기반 어레이 컨트롤러 드라이버를 변경하여서 다중 SSD를 단일 가상 스토리지 디바이스로 추상화할 수 있다. GPU는 OS나 자원 관리 능력을 가지지 않으므로, 실제는 호스트측 GPU 어플리케이션이, GPU 커널 실행 전에, 타깃 데이터 크기, 파일 위치 및 데이터 다운로드 타이밍과 같은 파일 데이터 이동과 관련된 모든 정보를 가지고 있다. 앞에서 설명한 nvmmuBegin 기능은 SSD(110)로부터 다운로드할 파일 이름을 UIL(621)로 전달하고, UIL(621)은 이러한 정보를 어레이 컨트롤러 드라이버, 즉 NDMA(622)로 공급하며, 어레이 컨트롤러 드라이버가 이를 이용하여서 GPU 바디 코드 세그먼트의 초기 단계에서 구버전의 타깃 파일 데이터와 대응하는 패리티 블록을 읽는다. 그 결과, 어레이 컨트롤러 드라이버는 GPU(120)와 CPU(130)가 데이터 이동 및 GPU 커널의 실행을 준비하는 동안 구 데이터를 로드하고 새 패리티 블록을 준비할 수 있다. 이러한 패리티 블록 파이프 라인 전략은 GPU(120)와 CPU(130) 사이의 데이터 이동의 수행 및/또는 GPU 커널의 실행과 함께 모든 패리티 블록 준비를 진행할 수 있도록 한다. 이에 따라 종래의 RAID 시스템에서의 성능 열화를 제거할 수 있다.
이와 같이 본 발명의 한 실시예에 따르면, CPU 메모리의 실질적인 개입 없이 GPU와 SSD 사이에서 직접적으로 데이터를 이동할 수 있으므로, CPU 메모리의 가상 메모리 할당을 통한 불필요한 메모리 복사를 줄이고, 이러한 복사에 따른 오버헤더 및 복사를 위한 사용자 모드와 커널 모드 사이의 스위칭을 줄일 수 있다. 따라서 GPU를 통한 어플리케이션 실행 시간을 줄일 수 있으며, 또한 데이터 이동에 따른 오버헤드를 줄일 수 있다.
파일과 관련된 GPU 오퍼레이션은 가상 파일 시스템의 확장으로 구현되므로, UIL을 지원하는 GPU 어플리케이션은 통상의 GPU 프로그램처럼 수행될 수 있고, 이에 따라 컴파일러를 변경할 필요가 없다. 또한 컴퓨팅 디바이스는 I/O 런타임 및 GPU 런타임 라이브러리의 모든 기능을 여전히 이용할 수 있으며, 이는 NVMMU가 모든 기존의 GPU 어플리케이션과 호환될 수 있다는 것을 의미한다.
다음 도 11 및 도 12를 참고로 하여 실제 본 발명의 한 실시예에 따른 NVMMU의 성능 향상에 대해서 설명한다.
도 11은 GPU 어플리케이션을 위한 파일 데이터를 이동할 때의 지연 값을 나타내는 도면이고, 도 12는 GPU 어플리케이션의 실행 시간을 나타내는 도면이다.
도 11에 도시한 것처럼, NVMe 프로토콜에서의 NVMMU(NVMe-NVMMU)가 NVMe-IOMMU에 비해서 데이터 이동 지연이 polybench 벤치마크에서는 202%, mars 벤치마크에서는 70%, rodina 벤치마크에서는 112%, parboil 벤치마크에서는 108% 감소한 것을 알 수 있다. NVMe-IOMMU는 도 2 내지 도 5를 참고로 하여 설명한 전형적인 컴퓨팅 디바이스에서 NVMe 프로토콜을 사용하는 메모리 관리 유닛을 나타낸다. 또한 도 12에 도시한 것처럼, NVMe-NVMMU에서의 어플리케이션 실행 시간이 NVMe-IOMMU에 비해서 polybench 벤치마크에서는 192%, mars 벤치마크에서는 14%, rodina 벤치마크에서는 69%, parboil 벤치마크에서는 37% 감소한 것을 알 수 있다.
이는 앞서 설명한 것처럼 NVMMU가 불필요한 메모리 복사 및 사용자 모드와 커널 모드 사이의 스위칭 오버헤드를 줄일 수 있기 때문이다.
이상에서 본 발명의 실시예에서는 GPU와 SSD를 각각 코프로세서와 비휘발성 메모리로 설명하였지만, 본 발명의 실시예에 따른 데이터 이동 방법(즉, NVMME)는 다른 코프로세서 또는 다른 파일 입출력 기반의 비휘발성 메모리에도 적용할 수 있다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (20)

  1. 삭제
  2. 중앙 처리 유닛(central processing unit, CPU), 스토리지로 사용되는 비휘발성 메모리, 코프로세서 및 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 저장하는 코프로세서 메모리를 포함하는 컴퓨팅 디바이스의 메모리 관리 장치로서,
    상기 CPU에 의해 사용되는 메모리 공간을 상기 코프로세서 메모리에 노출하는 컨트롤러 드라이버, 그리고
    상기 코프로세서 메모리에 노출된 상기 메모리 공간을 통해, 상기 코프로세서와 상기 비휘발성 메모리 사이에서 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 이동하는 라이브러리를 포함하며,
    상기 컨트롤러 드라이버는, 상기 메모리 공간의 어드레스를 포인트하는 복수의 엔트리를 포함하는 레지스터를 관리하는 메모리 관리 장치.
  3. 제2항에서,
    상기 복수의 엔트리에서 각 엔트리는 상기 메모리 공간에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 대응하는 메모리 관리 장치.
  4. 제3항에서,
    상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 컨트롤러 드라이버는 상기 비휘발성 메모리의 데이터를 상기 복수의 엔트리 중 대응하는 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 대응하는 상기 물리적 블록 어드레스의 공간으로 전달하는 메모리 관리 장치.
  5. 제3항에서,
    상기 컴퓨팅 디바이스는 상기 CPU에 의해 사용되는 CPU 메모리를 더 포함하며,
    상기 레지스터는 상기 CPU 메모리에 저장되는
    메모리 관리 장치.
  6. 제2항에서,
    상기 라이브러리는 소프트웨어 스택에서 네이티브 파일 시스템 위에 위치하는 메모리 관리 장치.
  7. 제2항에서,
    상기 컴퓨팅 디바이스는 상기 CPU에 의해 사용되는 CPU 메모리를 더 포함하며,
    상기 메모리 공간에 상기 CPU 메모리에 부가되어 있는
    메모리 관리 장치.
  8. 중앙 처리 유닛(central processing unit, CPU), 스토리지로 사용되는 비휘발성 메모리, 코프로세서 및 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 저장하는 코프로세서 메모리를 포함하는 컴퓨팅 디바이스의 메모리 관리 장치로서,
    상기 CPU에 의해 사용되는 시스템 메모리 영역을 포인트하는 복수의 엔트리를 관리하는 컨트롤러 드라이버, 그리고
    상기 시스템 메모리 영역을 통해, 상기 코프로세서와 상기 비휘발성 메모리 사이에서 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 이동하는 라이브러리를 포함하며,
    상기 복수의 엔트리에서 각 엔트리는 상기 시스템 메모리 영역에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 대응하는
    메모리 관리 장치.
  9. 제8항에서,
    상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 컨트롤러 드라이버는 상기 비휘발성 메모리의 데이터를 상기 복수의 엔트리 중 대응하는 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 대응하는 상기 물리적 블록 어드레스의 공간으로 전달하는 메모리 관리 장치.
  10. 제8항에서,
    상기 라이브러리는 소프트웨어 스택에서 네이티브 파일 시스템 위에 위치하는 메모리 관리 장치.
  11. 삭제
  12. 중앙 처리 유닛(central processing unit, CPU), 스토리지로 사용되는 비휘발성 메모리, 코프로세서 및 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 저장하는 코프로세서 메모리를 포함하는 컴퓨팅 디바이스에 의해 실행되며, 컴퓨터 판독 가능한 기록 매체에 저장된 컴퓨터 프로그램으로서,
    상기 CPU에 의해 사용되는 메모리 공간을 상기 코프로세서 메모리에 노출하는 컨트롤러 드라이버, 그리고
    상기 코프로세서 메모리에 노출된 상기 메모리 공간을 통해, 상기 코프로세서와 상기 비휘발성 메모리 사이에서 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 이동하는 라이브러리를 포함하며,
    상기 컨트롤러 드라이버는, 상기 메모리 공간의 어드레스를 포인트하는 복수의 엔트리를 포함하는 레지스터를 관리하는 컴퓨터 프로그램.
  13. 제12항에서,
    상기 복수의 엔트리에서 각 엔트리는 상기 메모리 공간에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 대응하는 컴퓨터 프로그램.
  14. 제13항에서,
    상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 컨트롤러 드라이버는 상기 비휘발성 메모리의 데이터를 상기 복수의 엔트리 중 대응하는 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 대응하는 상기 물리적 블록 어드레스의 공간으로 전달하는 컴퓨터 프로그램.
  15. 제13항에서,
    상기 컴퓨팅 디바이스는 상기 CPU에 의해 사용되는 CPU 메모리를 더 포함하며,
    상기 레지스터는 상기 CPU 메모리에 저장되는
    컴퓨터 프로그램.
  16. 제12항에서,
    상기 라이브러리는 소프트웨어 스택에서 네이티브 파일 시스템 위에 위치하는 컴퓨터 프로그램.
  17. 제12항에서,
    상기 컴퓨팅 디바이스는 상기 CPU에 의해 사용되는 CPU 메모리를 더 포함하며,
    상기 메모리 공간에 상기 CPU 메모리에 부가되어 있는
    컴퓨터 프로그램.
  18. 중앙 처리 유닛(central processing unit, CPU), 스토리지로 사용되는 비휘발성 메모리, 코프로세서 및 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 저장하는 코프로세서 메모리를 포함하는 컴퓨팅 디바이스에 의해 실행되며, 컴퓨터 판독 가능한 기록 매체에 저장된 컴퓨터 프로그램으로서,
    상기 CPU에 의해 사용되는 시스템 메모리 영역을 포인트하는 복수의 엔트리를 관리하는 컨트롤러 드라이버, 그리고
    상기 시스템 메모리 영역을 통해, 상기 코프로세서와 상기 비휘발성 메모리 사이에서 상기 코프로세서에서 처리할 데이터 또는 상기 코프로세서에 의해 처리된 데이터를 이동하는 라이브러리를 포함하며,
    상기 복수의 엔트리에서 각 엔트리는 상기 시스템 메모리 영역에서 소정 크기의 공간의 논리적 블록 어드레스를 포인트하고, 상기 논리적 블록 어드레스는 상기 코프로세서 메모리에서 소정 크기의 공간의 물리적 블록 어드레스에 대응하는
    컴퓨터 프로그램.
  19. 제18항에서,
    상기 코프로세서가 상기 비휘발성 메모리의 데이터를 읽는 경우, 상기 컨트롤러 드라이버는 상기 비휘발성 메모리의 데이터를 상기 복수의 엔트리 중 대응하는 엔트리에 의해 포인트되는 상기 논리적 블록 어드레스에 대응하는 상기 물리적 블록 어드레스의 공간으로 전달하는 컴퓨터 프로그램.
  20. 제18항에서,
    상기 라이브러리는 소프트웨어 스택에서 네이티브 파일 시스템 위에 위치하는 컴퓨터 프로그램.
KR1020180116574A 2018-09-28 2018-09-28 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 KR102000721B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180116574A KR102000721B1 (ko) 2018-09-28 2018-09-28 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180116574A KR102000721B1 (ko) 2018-09-28 2018-09-28 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020160017233A Division KR101936950B1 (ko) 2016-02-15 2016-02-15 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램

Publications (2)

Publication Number Publication Date
KR20180111737A KR20180111737A (ko) 2018-10-11
KR102000721B1 true KR102000721B1 (ko) 2019-07-16

Family

ID=63865269

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180116574A KR102000721B1 (ko) 2018-09-28 2018-09-28 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램

Country Status (1)

Country Link
KR (1) KR102000721B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210093531A (ko) 2020-01-20 2021-07-28 에스케이하이닉스 주식회사 응용 프로세서와 데이터를 제공하는 데이터 저장 장치를 포함하는 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184273A1 (en) * 2007-01-30 2008-07-31 Srinivasan Sekar Input/output virtualization through offload techniques
US20160041917A1 (en) * 2014-08-05 2016-02-11 Diablo Technologies, Inc. System and method for mirroring a volatile memory of a computer system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080184273A1 (en) * 2007-01-30 2008-07-31 Srinivasan Sekar Input/output virtualization through offload techniques
US20160041917A1 (en) * 2014-08-05 2016-02-11 Diablo Technologies, Inc. System and method for mirroring a volatile memory of a computer system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210093531A (ko) 2020-01-20 2021-07-28 에스케이하이닉스 주식회사 응용 프로세서와 데이터를 제공하는 데이터 저장 장치를 포함하는 시스템
US11550504B2 (en) 2020-01-20 2023-01-10 SK Hynix Inc. System including an application processor and a data storage device providing data

Also Published As

Publication number Publication date
KR20180111737A (ko) 2018-10-11

Similar Documents

Publication Publication Date Title
KR101936950B1 (ko) 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램
US10831376B2 (en) Flash-based accelerator and computing device including the same
Kang et al. Enabling cost-effective data processing with smart SSD
KR102371916B1 (ko) 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법
JP5180373B2 (ja) 仮想化環境における割り込みメッセージ終了のレイジー処理
US9086904B2 (en) Live migration of virtual machine during direct access to storage over SR IOV adapter
US9092426B1 (en) Zero-copy direct memory access (DMA) network-attached storage (NAS) file system block writing
Zhang et al. Nvmmu: A non-volatile memory management unit for heterogeneous gpu-ssd architectures
US11379374B2 (en) Systems and methods for streaming storage device content
US10402335B2 (en) Method and apparatus for persistently caching storage data in a page cache
TWI696188B (zh) 混合式記憶體系統
CN115033188B (zh) 一种基于zns固态硬盘的存储硬件加速模块系统
EP4198732A1 (en) Systems, methods, and devices for accessing a computational device kernel
EP3270293B1 (en) Two stage command buffers to overlap iommu map and second tier memory reads
Diakhaté et al. Efficient shared memory message passing for inter-VM communications
KR102443593B1 (ko) 하이브리드 메모리 시스템
KR20180041037A (ko) 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
KR102000721B1 (ko) 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램
US10831684B1 (en) Kernal driver extension system and method
US9135043B1 (en) Interface for enabling an application in a virtual machine to access high performance devices
US9417805B2 (en) Exporting computational capabilities into a block-oriented disk memory
US20220358049A1 (en) Memory access handling for peripheral component interconnect devices
Vogel et al. Data Pipes: Declarative Control over Data Movement.
US11689621B2 (en) Computing device and storage card
Maucher GPU4FS: A Graphics Processor-Accelerated File System

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant