KR101897624B1 - 이종 시스템에서의 데이터 분배 기법 - Google Patents

이종 시스템에서의 데이터 분배 기법 Download PDF

Info

Publication number
KR101897624B1
KR101897624B1 KR1020170009440A KR20170009440A KR101897624B1 KR 101897624 B1 KR101897624 B1 KR 101897624B1 KR 1020170009440 A KR1020170009440 A KR 1020170009440A KR 20170009440 A KR20170009440 A KR 20170009440A KR 101897624 B1 KR101897624 B1 KR 101897624B1
Authority
KR
South Korea
Prior art keywords
buffer
data
partial
address
data distribution
Prior art date
Application number
KR1020170009440A
Other languages
English (en)
Other versions
KR20170087055A (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 PCT/KR2017/000694 priority Critical patent/WO2017126924A1/ko
Publication of KR20170087055A publication Critical patent/KR20170087055A/ko
Application granted granted Critical
Publication of KR101897624B1 publication Critical patent/KR101897624B1/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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • 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/1668Details of memory controller
    • G06F13/1694Configuration of memory controller to different memory types

Abstract

본 발명은 이종 시스템에서의 데이터 분배 기법에 관한 것이다. 본 발명의 제 1 측면에 따르면 적어도 하나의 계산 디바이스를 포함하는 이종 시스템에서의 데이터 분배 기법을 수행하는 시스템에 있어서, 상기 이종 시스템에서 수행되는 커널의 복수의 워크 아이템들의 수행에 필요한 데이터가 저장되는 버퍼를 가상 디바이스 메모리 영역에 할당하는 버퍼할당부 및 상기 복수의 워크 아이템 중 어느 하나의 계산 디바이스에서 처리되는 워크아이템이 이용하는 데이터를 저장하는 부분버퍼로 상기 버퍼에 저장된 데이터를 분배하는 데이터분배부를 포함할 수 있다.

Description

이종 시스템에서의 데이터 분배 기법{DATA DISTRIBUTION TECHNIQUE FOR HETEROGENEOUS SYSTEM}
본 발명은 이종 시스템에서 소프트웨어를 실행시키는 방법 및 장치에 대한 것이다. 더 구체적으로는, 복수 개의 가속기가 장착된 이종 시스템에서 여러 가속기로 필요한 입력 데이터를 자동으로 분배하여 주는 방법 및 장치에 대한 것이다.
이종 시스템이란 통상 범용 CPU(Central Processing Unit)와 고속의 병렬 계산에 특화된 가속기(accelerator)를 함께 장착한 시스템을 일컫는다.
이러한 가속기의 대표적인 예로는 GPU가 있으며, 그 외에도 Intel Xeon Phi 코프로세서, FPGA 등이 널리 사용된다.
이종 시스템은 병렬로 수행할 수 있는 많은 양의 계산을 CPU 대신 가속기로 오프로딩(offloading)하여 처리하면 애플리케이션의 성능과 전력효율을 크게 높일 수 있다.
하지만 상당수의 가속기는 CPU의 메인 메모리에 바로 접근할 수 없고(혹은 접근할 수 있더라도 성능이 매우 느림), 별개의 메모리를 가지고 있어 여기에 접근하여 계산을 수행해야 한다. 따라서 메인 메모리에서 가속기의 메모리로 (입력) 데이터를 복사한 후, 가속기에서 오프로딩된 계산 작업을 수행하고, 다시 가속기의 메모리에서 메인 메모리로 (출력) 데이터를 복사하여야 한다.
복수 개의 가속기가 하나의 데이터를 공유하며 계산 작업을 수행하는 경우에는, 메인 메모리에서 각각의 가속기의 메모리로 (입력) 데이터 전체를 복사한 후, 가속기에서 오프로딩된 계산 작업을 수행하고, 다시 각각의 가속기의 메모리에서 메인 메모리로 (출력) 데이터 전체를 복사하여야 한다.
하지만 이러한 데이터 분배 방법은 해당 데이터 전체를 메인 메모리 영역에서 디바이스 메모리로 복사함에 따라 불필요한 호스트-디바이스 통신이 많이 필요하다는 문제점이 있다.
또한, 할당된 워크 아이템들이 전혀 사용하지 않는 데이터들도 모두 계산 디바이스의 디바이스 메모리에 복사됨에 따라 계산 디바이스의 디바이스 메모리가 비효율적으로 사용된다는 문제점이 있다.
관련하여 선행기술문헌인 한국공개특허번호 제 10-2002-0081064호는 일정 지연 네트워크, 공통 타임 계산을 갖는 가변 지연 네트워크, 및 공통 타임 계산을 갖지 않는 가변 지연 네트워크를 포함할 수 있는 이종 네트워크를 통한 멀티미디어 데이터의 실시간 통신이 개시되어 있다. 상기 이종 네트워크 내에 아무 공통 타임 계산도 존재하지 않는 임의의 가변 지연 네트워크가 존재한다면, 공통 타임 계산이 각각의 네트워크 내에서 달성된다. 그 다음, 일정 지연 네트워크가 각각의 가변 지연 네트워크 내에 나타난 특정 공통 타임 계산을 사용하여 각각의 가변 지연 네트워크에 대하여 에뮬레이팅 된다. 하지만 선행기술문헌 또한 상술된 바와 같은 문제점을 해소하지 못한다.
따라서 상술된 문제점을 해결하기 위한 기술이 필요하게 되었다.
한편, 전술한 배경기술은 발명자가 본 발명의 도출을 위해 보유하고 있었거나, 본 발명의 도출 과정에서 습득한 기술 정보로서, 반드시 본 발명의 출원 전에 일반 공중에게 공개된 공지기술이라 할 수는 없다.
본 발명의 일실시예는 이종 시스템에서의 데이터 분배 기법을 제시하는 데에 목적이 있다.
또한, 본 발명의 일실시예는 복수 개의 계산 디바이스가 있는 시스템에서, 애플리케이션이 각각의 계산 디바이스마다 별도로 버퍼를 생성하고 데이터를 복사할 필요 없이, 단일한 가상 디바이스 메모리에 한 번에 버퍼를 생성하고 모든 데이터를 복사할 수 있어, 간단한 프로그래밍이 가능하도록 하는 데에 목적이 있다.
아울러 본 발명의 일실시예는 실제 각각의 계산 디바이스에서 필요로 하는 데이터만 디바이스 메모리로 복사되며 불필요한 데이터는 복사되지 않기 때문에 호스트 프로세서와 계산 디바이스 사이의 통신량을 최소화하는 데에 목적이 있다.
또한, 본 발명의 일실시예는 애플리케이션이 실제 디바이스 메모리의 물리적인 크기를 넘어서는 버퍼를 생성하고 데이터를 저장하더라도, 실제로는 각각의 계산 디바이스에서 필요로 하는 데이터만 해당 디바이스의 디바이스 메모리로 복사되므로, 커널에서 크기가 큰 데이터도 한 번에 처리하는 데에 목적이 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 발명의 제 1 측면에 따르면 적어도 하나의 계산 디바이스를 포함하는 이종 시스템에서의 데이터 분배 기법을 수행하는 시스템에 있어서, 상기 이종 시스템에서 수행되는 커널의 복수의 워크 아이템들의 수행에 필요한 데이터가 저장되는 버퍼를 가상 디바이스 메모리 영역에 할당하는 버퍼할당부 및 상기 복수의 워크 아이템 중 어느 하나의 계산 디바이스에서 처리되는 워크아이템이 이용하는 데이터를 저장하는 부분버퍼로 상기 버퍼에 저장된 데이터를 분배하는 데이터분배부를 포함할 수 있다.
본 발명의 제 2 측면에 따르면, 적어도 하나의 계산 디바이스를 포함하는 이종 시스템에서의 데이터 분배 기법을 수행하는 방법에 있어서, 상기 이종 시스템에서 수행되는 커널의 복수의 워크 아이템들의 수행에 필요한 데이터가 저장되는 버퍼를 가상 디바이스 메모리 영역에 할당하는 단계 및 상기 복수의 워크 아이템 중 어느 하나의 계산 디바이스에서 처리되는 워크아이템이 이용하는 데이터를 저장하는 부분버퍼로 상기 버퍼에 저장된 데이터를 분배하는 단계를 포함할 수 있다.
전술한 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 복수 개의 계산 디바이스가 있는 시스템에서, 애플리케이션이 각각의 계산 디바이스마다 별도로 버퍼를 생성하고 데이터를 복사할 필요 없이, 단일한 가상 디바이스 메모리에 한 번에 버퍼를 생성하고 모든 데이터를 복사할 수 있어, 프로그래밍이 간단해진다.
본 발명의 과제 해결 수단 중 어느 하나에 의하면, 실제 각각의 계산 디바이스에서 필요로 하는 데이터만 디바이스 메모리로 복사되며 불필요한 데이터는 복사되지 않기 때문에 호스트 프로세서와 계산 디바이스 사이의 통신량을 최소화할 수 있다.
본 발명의 과제 해결 수단 중 어느 하나에 의하면, 애플리케이션이 실제 디바이스 메모리의 물리적인 크기를 넘어서는 버퍼를 생성하고 데이터를 저장하더라도, 실제로는 각각의 계산 디바이스에서 필요로 하는 데이터만 해당 디바이스의 디바이스 메모리로 복사되므로, 커널에서 크기가 큰 데이터도 한 번에 처리할 수 있다.
본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1 은 본 발명의 일실시예에 따른 데이터분배시스템이 구현되는 이종 시스템의 구성도이다.
도 2 는 본 발명의 일실시예에 따른 데이터분배시스템을 도시한 블록도이다.
도 3 은 본 발명의 일실시예에 따른 데이터분배방법을 설명하기 위한 순서도이다.
아래에서는 첨부한 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
다만 이를 설명하기에 앞서, 아래에서 사용되는 용어들의 의미를 먼저 정의한다.
이하에서 ‘호스트 프로그램’이란 이종 시스템을 대상으로 하는 애플리케이션에서 호스트 프로세서에 의해 실행되는 프로그램이고, ‘커널’ 이란 계산 디바이스에 의해 실행되는 프로그램이다.
‘커널 인스턴스’란 커널을 실행하는 스레드로, 커널 인스턴스의 개수만큼 동일한 커널이 계산 디바이스에서 실행될 수 있다. 이때 각각의 커널 인스턴스를 워크 아이템(work-item)이라 하며, 워크 아이템은 워크 그룹(work-group) 단위로 묶일 수 있다.
애플리케이션에 포함된 특정 커널과, 특정 계산 디바이스에서 실행해야 할 커널의 하나 이상의 워크 아이템들을 ‘워크 아이템 집합’이라 한다.
이러한 워크 아이템 집합에 포함된 각 워크 아이템들은 병렬 프로그래밍 모델에서 매긴 각 워크 아이템의 고유한 인덱스인 ’제 1 인덱스’와 워크 아이템 집합에 포함된 각각의 워크 아이템마다 새로 부여한 인덱스인 ‘제 2 인덱스’를 가질 수 있다.
이때 제 2 인덱스는 워크 아이템 집합의 크기가 N이라고 했을 때 0 이상 N-1 이하의 정수 값을 가지며, 서로 다른 워크 아이템이 같은 값을 가지지 않는다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
도 1은 본 발명의 일실시예에 따른 데이터분배시스템(100)이 구현되는 이종 시스템의 구성도이다.
이종 시스템은 호스트 프로세서(Host processor)(10)와 하나 이상의 계산 디바이스(Compute Device)(30)를 포함할 수 있으며, OpenCL(Open Computing Language)과 같은 병렬 프로그래밍 모델로 제작된 애플리케이션을 실행시킬 수 있다.
우선, 호스트 프로세서(10)는 CPU에 해당하며, 계산 디바이스(20)는 멀티코어 CPU 혹은 가속기(GPU, Intel Xeon Phi 코프로세서, FPGA 등)일 수 있다.
이러한 호스트 프로세서(10)는 운영체제를 실행시킬 수 있으며, OpenCL 애플리케이션을 구성하는 호스트 프로그램을 실행시킬 수 있고, 호스트 프로그램에 따라 OpenCL API 함수를 사용해 계산 디바이스(30)를 제어할 수 있다.
한편, 런타임 시스템(20)은 복수 개의 계산 디바이스(30)를 대신하여 단일한 가상 계산 디바이스(21)를 제공할 수 있고, 가상 계산 디바이스(21)는 실제의 계산 디바이스(30)와 유사하게 가상 디바이스 메모리(22)를 가질 수 있다.
이때, 가상 계산 디바이스(21) 및 가상 디바이스 메모리(22)는 실제로 존재하는 장치가 아닌 런타임 시스템(20)에 의해 구현된 가상화 레이어(abstraction layer)이다.
즉, 런타임 시스템(20)은 애플리케이션(호스트 프로그램과 커널)이 가상 계산 디바이스(21)에 데이터를 복사하고 커널을 실행하였을 때 실제의 계산 디바이스(30) 하나에서 데이터를 복사하고 커널을 실행한 것과 동일한 결과를 얻을 수 있도록 할 수 있다.
여기서 동일한 결과가 얻어진다는 것은, 호스트 프로그램이 읽기 명령을 통해 가상 디바이스 메모리(22)에서 메인 메모리(11)로 복사해 간 데이터가 올바른 값을 가진다는 것을 뜻한다.
이를 통해, 호스트 프로세서(10)에서 수행되는 호스트 프로그램은 병렬 프로그래밍 모델이 제공하는 API를 그대로 사용하여 가상 디바이스 메모리(22)에 버퍼를 할당할 수 있고 가상 계산 디바이스(21)에 쓰기 명령, 커널 실행 명령, 읽기 명령을 내릴 수 있다.
또한, 워크 아이템들은 가상 계산 디바이스(21)에서 실행되면서 가상 디바이스 메모리(22)에서(정확하게는, 가상 디바이스 메모리(22)에 할당된 하나 이상의 버퍼를 통해) 데이터를 읽고 쓸 수 있다.
한편, 계산 디바이스(30)는 하나 이상의 계산 유닛(CU; compute unit)으로 구성될 수 있고, 각 계산 유닛은 다시 하나 이상의 PE(processing element)로 구성될 수 있다.
또한, 계산 디바이스(30)는 디바이스 메모리(Device Memory)를 가질 수 있으며, 계산 디바이스 메모리(31)영역은 모든 PE가 공유할 수 있다.
이러한 계산 디바이스(30)는 호스트 프로그램의 명령을 받아 커널을 실행시키거나, 메인 메모리(Main Memory)(11)의 데이터를 계산 디바이스 메모리(31)로 복사하거나, 반대로 계산 디바이스 메모리(31)의 데이터를 메인 메모리(11)로 복사할 수 있다.
이러한 이종 시스템에서 애플리케이션이 실행되어 호스트 프로세서(10)에서 실행되는 호스트 프로그램이 계산 디바이스(30)로 커널 실행 명령을 보내면, 계산 디바이스(30)에서는 하나 이상의 커널 인스턴스(kernel instance)가 실행된다.
호스트 프로그램은 커널 실행 명령을 보내면서 워크 아이템의 개수와 워크 아이템을 몇 개씩 하나의 워크 그룹으로 묶을 것인지를 지정할 수 있다.
각 워크 그룹은 계산 디바이스(30)를 구성하는 계산 유닛에서 각각 실행될 수 있으며, 각 워크 그룹에 포함된 여러 워크 아이템은 계산 유닛의 PE에서 각각 실행될 수 있다.
한편, 호스트 프로세서(10)는 메인 메모리(11)와 연결되어 있으며, 각각의 계산 디바이스는 메인 메모리(11)와는 별도로 계산 디바이스 메모리(31)를 가질 수 있고, 계산 디바이스(30)의 모든 PE는 계산 디바이스 메모리(31)를 공유하며 데이터를 읽고 쓸 수 있으나, 메인 메모리(11)에 직접 접근할 수 없다.
또한 상기 구성요소들은 실제 물리적으로 구분되는 것일 수도 있고, 물리적으로는 구분되지 않지만 논리적으로(예를 들면, 소프트웨어에 의해서) 구분되는 것일 수도 있다. 특히 메인 메모리(11) 혹은 계산 디바이스 메모리(31)는 실제 물리적인 메모리 칩 하나를 가리킬 수도 있지만, 복수 개의 메모리 칩 및 다른 구성요소가 연결되어 있으면서 단일한 메모리 주소 공간(address space)를 제공할 때 그 주소 공간을 가리킬 수도 있다.
이하에서는 도 2 는 데이터분배시스템(100)을 도시한 블록도로 이를 참조하여 자세히 설명한다.
우선, 데이터분배시스템(100)은 버퍼할당부(210)를 포함할 수 있다. 버퍼할당부(210)는 가상 디바이스 메모리(22)에 버퍼를 할당할 수 있다. 가상 디바이스 메모리(22)는 적어도 하나의 계산 디바이스(30)를 단일한 계산 디바이스로 가상화한 가상 계산 디바이스(21)의 메모리이며, 가상 디바이스 메모리(22)는 메인 메모리(11) 내에 할당된 영역일 수 있다.
즉, 버퍼할당부(210)는 가상 디바이스 메모리(22)로 할당된 영역 내에 호스트 프로그램이 가상 디바이스 메모리(22)에 생성한 하나 이상의 버퍼를 할당할 수 있다.
이때, 가상 디바이스 메모리(22)로 할당된 영역은 메인 메모리(11)의 연속된 구간 하나를 일컫는 것일 수도 있고, 메인 메모리(11)의 복수 개의 연속된 구간을 통틀어 일컫는 것일 수도 있다.
예를 들어, 가상 디바이스 메모리에 3개의 버퍼를 할당해야 할 때, 버퍼할당부(210)는 메인 메모리(11)에서 연속된 구간을 할당하여 이것을 전체 가상 디바이스 메모리(22) 영역으로 하고, 영역 내에서 3개의 버퍼를 할당할 수도 있다.
또는 예를 들어, 버퍼할당부(210)는 각 버퍼마다 별도로 메인 메모리(11)에서 연속된 구간을 할당하고 이렇게 할당한 3개의 연속된 구간을 통칭하여 가상 디바이스 메모리(22)라 일컬을 수도 있다.
한편, 데이터분배시스템(100)은 주소변환부(220)를 포함할 수 있다. 주소변환부(220)는 버퍼에 저장된 데이터의 주소와 해당 데이터를 부분버퍼에 저장하는 주소를 매핑할 수 있다.
이때, 주소변환부(220)는 데이터를 읽는 워크 아이템의 제2인덱스와 해당 워크 아이템이 버퍼에서 데이터를 읽어오는 순번인 데이터 접근 순번에 기초하여 부분퍼버에 데이터를 저장하는 주소를 결정할 수 있다.
이때, 주소변환부(220)는 부분버퍼에 데이터를 저장하는 주소를 결정하기 위해 단사 함수(one-to-one function)를 이용하여 서로 다른 제2인덱스와 데이터 접근 순번을 가진 데이터가 부분버퍼의 같은 위치에 저장되지 않도록 할 수 있다.
이렇게 함으로써 부분버퍼의 크기가 원래 버퍼의 크기와 무관하게, 상기 워크 아이템 집합에 속한 워크 아이템들이 접근하는 데이터의 총량에 따라 결정되도록 할 수 있다.
이와 같이 주소를 계산하기 위해, 주소변환부(220)는 워크 아이템 집합의 크기(N), 워크 아이템이 버퍼에 저장된 데이터에 접근하는 횟수(M), 커널이 버퍼에서 데이터를 읽어오는 단위(W)에 기초하여 부분버퍼에 데이터를 저장하는 주소를 계산할 수 있다.
이때, 필요한 부분버퍼의 크기는 N*M*W 의 값에 따라 결정되며 원래 버퍼의 크기와는 무관하다.
하나의 실시예에 따라, 주소변환부(220)는 제2인덱스가 A인 워크 아이템이 버퍼에서 B번째로 읽어 오는(즉, 데이터 접근 순번이 B인) 데이터를 부분버퍼의 (A+B*N)*W번지에 저장할 수 있다.
즉, 주소변환부(220)는 주소 매핑 함수 f(A, B) = (A+B*N)*W를 이용하여 부분버퍼에 데이터를 저장하는 주소를 계산할 수 있다.
또 다른 실시예에 따라, 주소변환부(220)는 제2인덱스가 A인 워크 아이템이 버퍼에서 B번째로 읽어 오는 데이터는 부분버퍼의 (A*M+B)*W번지에 저장할 수 있다.
즉, 주소변환부(220)는 주소 계산 함수 f(A, B) = (A*M+B)*W 를 이용하여 부분버퍼에 데이터를 저장하는 주소를 계산할 수 있다.
이때, 특정 워크 아이템에 대해 데이터의 분배를 실행할 때 주소변환부(220)는 해당 워크 아이템의 제2인덱스 값을 전달받을 수 있거나, 또는 해당 워크 아이템의 제1인덱스로부터 제2인덱스를 계산할 수도 있다.
또한, 주소변환부(220)는 버퍼에 저장된 데이터 하나를 부분버퍼로 분배할 때마다 특정 변수의 값을 누적함으로써 데이터 접근 순번을 계산해 나갈 수 있다.
한편, 데이터분배시스템(100)은 데이터분배부(230)를 포함할 수 있다. 데이터분배부(230)는 적어도 하나의 계산 디바이스(30)에서 처리되는 워크아이템들이 이용하는 데이터를 저장하는 부분버퍼로 버퍼에 저장된 데이터를 분배할 수 있다.
즉, 데이터분배부(230)는 버퍼할당부(210)에서 할당된 버퍼에 저장된 데이터 중 각 계산 디바이스에서 처리되는 워크 아이템들이 필요로 하는 데이터만을 저장하는 부분버퍼로 복사함으로써 데이터를 분배할 수 있다.
예를 들어, 제 1 인덱스가 10 인 워크 아이템이 버퍼 A의 10번째 데이터를 읽어 오려고 했다면, 데이터분배부(230)는 버퍼 A의 10번째 데이터를 가상 디바이스 메모리(22)의 일 영역에 할당된 버퍼에서 가상 디바이스 메모리(22)의 다른 영역인 부분버퍼로 복사할 수 있다.
또 다른 예로, 한 워크 아이템이 버퍼의 4번째, 7번째, 그리고 9번째 데이터를 읽어 오려고 했다면, 데이터분배부(230)는 버퍼의 4번째, 7번째, 그리고 9번째 데이터를 부분버퍼로 복사할 수 있다.
이때, 데이터분배부(230)는 워크 아이템이 필요로 하는 데이터를 복사할 부분버퍼의 주소를 주소변환부(220)로부터 획득할 수 있고, 획득된 부분버퍼의 주소에 데이터를 분배할 수 있다.
한편, 데이터분배시스템(100)은 데이터이동부(240)를 포함할 수 있다. 데이터이동부(240)는 각각의 버퍼를 가상 디바이스 메모리(22)에서 각 계산 디바이스(30)의 계산 디바이스 메모리(31)로 이동시킬 수 있다.
즉, 데이터이동부(240)는 데이터 분배(scatter)를 위해 매번 커널이 실행되기 전에(즉, 커널 실행 명령에 의해 생성된 워크 아이템들이 복수 개의 계산 디바이스(30)로 분배되기 전에) 커널 안에서 사용되는(읽거나 쓰거나 혹은 둘 모두인) 하나 이상의 버퍼에 대하여, 가상 디바이스 메모리(22)에서 계산 디바이스(30)의 계산 디바이스 메모리(31)로 데이터를 복사할 수 있다.
이때 각각의 계산 디바이스 메모리(31)에서 버퍼가 어디에 위치하는지는 운영체제나 런타임 시스템 등에 의해 결정되며, 서로 다른 계산 디바이스 메모리(31) 별로 버퍼의 위치가 상이할 수 있다.
즉, 데이터이동부(240)는 각각의 워크 아이템으로 각 워크 아이템이 실행되는 계산 디바이스(30)의 계산 디바이스 메모리(31)에서의 버퍼 시작 주소를 전달할 수 있다. 이와 같이 데이터 분배를 수행하면 워크 아이템에서 읽으려는 데이터는 계산 디바이스 메모리(31)에 존재하게 된다.
그리고 데이터이동부(240)는 버퍼를 가상 디비이스 메모리(22)에서 특정 계산 디바이스(30)의 계산 디바이스 메모리(31)로 복사하는 대신, 데이터분배부(230)에 의해 버퍼에 저장된 데이터 중 해당 계산 디바이스(30)에서 처리되는 워크 아이템들이 필요로 하는 데이터만이 복사된 부분버퍼에 해당 계산 디바이스(30)의 계산 디바이스 메모리(31)로 복사하여 이동시킬 수 있다.
한편, 데이터분배시스템(100)은 부분버퍼리더부(250)를 포함할 수 있다. 부분버퍼리더부(250)는 부분버퍼가 복사되어 이동된 계산 디바이스 메모리(31)의 부분버퍼에서 데이터를 리딩할 수 있다.
예를 들어, 커널을 실행하는 제1인덱스가 10인 워크 아이템이 있을 때, 워크 아이템이 읽으려던 기존 버퍼 A의 10번째 데이터가 주소변환부(220)에 의해 계산된 부분버퍼의 12번지로 데이터분배부(230)에 의해 분배된 경우, 부분버퍼리더부(250)는 가상 디바이스 메모리(22)의 버퍼에 존재하는 10번째 데이터를 리딩하는 대신 계산 디바이스 메모리(31)의 부분버퍼의 12번지에 저장된 데이터를 리딩할 수 있다.
그리고 특정 워크 아이템이 실행될 때, 부분버퍼리더부(250)는 상기 워크 아이템의 제 2 인덱스 값을 런타임시스템(20)으로부터 전달받거나 또는 상기 워크 아이템의 제 1 인덱스로부터 제 2 인덱스를 계산할 수 있다.
또한 부분버퍼리더부(250)는 각각의 워크 아이템들이 수행해야 하는 연산에 더해, 계산 디바이스 메모리(31)의 부분버퍼로 접근할 때마다 특정 변수의 값을 누적함으로써 데이터 접근 순번을 계산해 나가는 일을 추가로 수행할 수 있다.
한편, 데이터분배시스템(100)는 부분커널생성부(260)를 포함할 수 있다. 부분커널생성부(260)는 적어도 하나의 계산 디바이스에서 실행되는 프로그램인 커널로부터 버퍼에서 부분버퍼로 워크아이템이 이용하는 데이터를 분배하는 프로그램인 제 1 부분커널을 생성할 수 있다.
또한, 부분커널생성부(260)는 상기 커널로부터 워크 아이템이 버퍼 대신 부분버퍼를 통해 데이터를 리딩하는 프로그램인 제 2 부분커널을 생성할 수 있다.
그리고 부분커널생성부(260)는 생성된 제 1 부분커널 내지 제 2 부분커널을 데이터분배시스템(100)의 각 구성부에 제공하여 본 발명의 일실시예에 따라 부분버퍼를 이용하여 데이터가 분배되거나 또는 리딩되도록 할 수 있다.
이때, 부분커널생성부(260)는 실시예에 따라, 프로그램 슬라이싱(program slicing) 기법을 사용하여 전체 프로그램인 커널에서 버퍼에서 부분버퍼로 워크 아이템이 이용하는 데이터를 분배하는 프로그램인 제 1 부분커널을 생성할 수 있다.
이때, 프로그램 슬라이싱 기법은 전체 프로그램에서 특정 부분(예를 들면, 프로그램의 특정 문장(statement) 혹은 수식(expression))을 실행하는 데 필요한 최소한의 부분 프로그램을 구하는 기법이다.
예를 들어, 부분커널생성부(260)는 상기 프로그램 슬라이싱 기법을 이용하여 커널로부터 버퍼 접근 주소를 계산하는 데 필요한 최소한의 부분 프로그램을 구하고, 여기에 ‘버퍼 접근 주소로부터 버퍼의 데이터를 읽어오고, 주소 계산 함수를 이용하여 부분버퍼에 데이터를 저장할 주소를 계산하여 상기 주소에 버퍼에서 읽어온 데이터를 저장한 후, 데이터 접근 순번을 누적’하는 수식 또는 문장을 추가하여 제 1 부분커널을 생성할 수 있다.
한편, 본 발명의 일실시예에 따라, 부분커널생성부(260)는 커널에서 ‘버퍼 접근 주소로부터 버퍼의 데이터를 리딩’하는 수식 또는 문장을, ‘주소 계산 함수를 이용하여 부분버퍼에 상기 데이터가 저장되어 있는 주소를 계산하여 상기 주소에서 데이터를 리딩한 후, 데이터 접근 순번을 누적’하는 수식 또는 문장으로 치환하여, 제 2 부분커널을 생성할 수 있다.
이때, 부분커널생성부(260)는 커널로부터 생성되는 제 1 부분커널 내지 제 2 부분커널을 최적화하기 위해 제 1 부분커널 및 제 2 부분커널을 구성하는 문장 또는 수식을 치환하거나 변경 또는 삭제할 수 있다.
도 3 에 도시된 실시예에 따른 데이터분배방법은 도 2 에 도시된 데이터분배시스템(100)에서 시계열적으로 처리되는 단계들을 포함한다. 따라서, 이하에서 생략된 내용이라고 하더라도 도 2 에 도시된 데이터분배시스템(100)에 관하여 이상에서 기술한 내용은 도 3에 도시된 실시예에 따른 데이터분배방법에도 적용될 수 있다.
우선, 데이터분배시스템(100)은 적어도 하나의 계산 디바이스를 단일의 계산 디바이스로 가상화한 가상 계산 디바이스의 메모리로써 할당된 영역인 가상 디바이스 메모리 영역에 버퍼를 할당할 수 있다(S3001).
예를 들어, 데이터분배시스템(100)은 가상 디바이스 메모리상에 적어도 하나의 버퍼를 할당하기 위해, 메인 메모리에 가상 디바이스 메모리로 설정된 영역에 연속 또는 이산된 영역에 버퍼를 할당할 수 있다.
그리고 데이터분배시스템(100)은 워크 아이템 집합의 각 워크 아이템들이 버퍼에서 읽어 오려던 데이터를 부분버퍼에 저장할 주소를 계산할 수 있다(S3002).
이때, 데이터분배시스템(100)은 주소를 계산하기 위해 단사 함수인 주소 계산 함수를 이용할 수 있으며, 이를 통해 데이터분배시스템(100)은 서로 다른 제 2 인덱스와 데이터 접근 순번을 가진 데이터가 같은 부분버퍼의 주소로 계산되지 않도록 할 수 있다.
그리고 데이터분배시스템(100)은 계산된 부분버퍼의 주소에 기초하여 데이터를 가상 디바이스 메모리(22)의 버퍼에서 가상 디바이스 메모리(22)의 부분버퍼로 이동시킬 수 있다(S3003).
이후, 데이터분배시스템(100)은 부분버퍼를 계산 디바이스 메모리(31)로 이동시킬 수 있다(S3004).
그리고 데이터분배시스템(100)은 계산 디바이스 메모리(31)의 부분버퍼로부터 저장된 데이터를 리딩할 수 있다(S3005).
즉, 데이터분배시스템(100)은 워크 아이템이 데이터를 리딩하기 위한 버퍼 상의 주소에 대응되는 부분버퍼의 주소를 계산할 수 있으며, 계산된 부분버퍼의 주소에 저장된 데이터를 리딩할 수 있다.
이때, 데이터분배시스템(100)은 부분버퍼상의 주소를 계산하기 위해 S3002단계와 동일한 방법으로 주소를 계산할 수 있다.
한편, 본 발명의 일실시예에 따라 데이터분배시스템(100)은 데이터분배방법을 수행하기 위해 프로그램 슬라이싱(program slicing) 기법을 사용하여 전체 프로그램인 커널에서 S3002 단계 내지 S3003 단계인 버퍼로부터 데이터의 리딩을 수행하는 데 필요한 부분 프로그램인 제 1 부분커널을 생성할 수 있다.
예를 들어, 데이터분배시스템(100)은 전체 커널에서 버퍼의 데이터를 읽어 오는 부분 프로그램인 ‘버퍼 접근 주소로부터 버퍼의 데이터를 읽어오고, 주소 계산 함수를 이용하여 부분버퍼에 데이터를 저장할 주소를 계산하여 상기 주소에 버퍼에서 읽어온 데이터를 저장한 후, 데이터 접근 순번을 누적’하는 제 1 부분커널을 획득할 수 있다.
또는 본 발명의 다른 일실시예에 따라 데이터분배시스템(100)은 버퍼에 접근하는 문장 혹은 수식을 버퍼 접근 주소를 런타임 시스템(20)에 차례로 전달해 주는 문장 혹은 수식으로 치환하는 제 1 부분커널을 생성할 수 있다. 그리고 런타임 시스템(20)이 전체 프로그램인 커널에서 버퍼의 데이터를 읽어 오는 제 1 부분커널을 획득하도록 할 수 있다.
그리고 데이터분배시스템(100)는 커널로부터 부분버퍼의 데이터를 읽어 오는 S3005 단계를 수행하는 제 2 부분커널을 획득할 수 있다.
예를 들어, 데이터분배시스템(100)은 S3005단계를 수행하는 “주소 계산 함수로 부분버퍼에서 데이터가 저장된 주소를 계산하고, 상기 주소에서 부분버퍼의 데이터를 읽어오면. 데이터 접근 순번을 누적’하는 제 2 부분커널을 획득할 수 있다.
도 3 을 통해 설명된 실시예에 따른 데이터분배방법은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파와 같은 변조된 데이터 신호의 기타 데이터, 또는 기타 전송 메커니즘을 포함하며, 임의의 정보 전달 매체를 포함한다.
또한 본 발명의 일실시예에 따르는 데이터분배방법은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 컴퓨터 프로그램(또는 컴퓨터 프로그램 제품)으로 구현될 수도 있다. 컴퓨터 프로그램은 프로세서에 의해 처리되는 프로그래밍 가능한 기계 명령어를 포함하고, 고레벨 프로그래밍 언어(High-level Programming Language), 객체 지향 프로그래밍 언어(Object-oriented Programming Language), 어셈블리 언어 또는 기계 언어 등으로 구현될 수 있다. 또한 컴퓨터 프로그램은 유형의 컴퓨터 판독가능 기록매체(예를 들어, 메모리, 하드디스크, 자기/광학 매체 또는 SSD(Solid-State Drive) 등)에 기록될 수 있다.
따라서 본 발명의 일실시예에 따르는 데이터분배방법은 상술한 바와 같은 컴퓨터 프로그램이 컴퓨팅 장치에 의해 실행됨으로써 구현될 수 있다. 컴퓨팅 장치는 프로세서와, 메모리와, 저장 장치와, 메모리 및 고속 확장포트에 접속하고 있는 고속 인터페이스와, 저속 버스와 저장 장치에 접속하고 있는 저속 인터페이스 중 적어도 일부를 포함할 수 있다. 이러한 성분들 각각은 다양한 버스를 이용하여 서로 접속되어 있으며, 공통 머더보드에 탑재되거나 다른 적절한 방식으로 장착될 수 있다.
여기서 프로세서는 컴퓨팅 장치 내에서 명령어를 처리할 수 있는데, 이런 명령어로는, 예컨대 고속 인터페이스에 접속된 디스플레이처럼 외부 입력, 출력 장치상에 GUI(Graphic User Interface)를 제공하기 위한 그래픽 정보를 표시하기 위해 메모리나 저장 장치에 저장된 명령어를 들 수 있다. 다른 실시예로서, 다수의 프로세서 및(또는) 다수의 버스가 적절히 다수의 메모리 및 메모리 형태와 함께 이용될 수 있다. 또한 프로세서는 독립적인 다수의 아날로그 및(또는) 디지털 프로세서를 포함하는 칩들이 이루는 칩셋으로 구현될 수 있다.
또한 메모리는 컴퓨팅 장치 내에서 정보를 저장한다. 일례로, 메모리는 휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 다른 예로, 메모리는 비휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 또한 메모리는 예컨대, 자기 혹은 광 디스크와 같이 다른 형태의 컴퓨터 판독 가능한 매체일 수도 있다.
그리고 저장장치는 컴퓨팅 장치에게 대용량의 저장공간을 제공할 수 있다. 저장 장치는 컴퓨터 판독 가능한 매체이거나 이런 매체를 포함하는 구성일 수 있으며, 예를 들어 SAN(Storage Area Network) 내의 장치들이나 다른 구성도 포함할 수 있고, 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치, 혹은 테이프 장치, 플래시 메모리, 그와 유사한 다른 반도체 메모리 장치 혹은 장치 어레이일 수 있다.
전술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100: 데이터분배시스템
10: 호스트 프로세서
11: 메인 메모리
20: 런타임 시스템
21: 가상 계산 디바이스
22: 가상 디바이스 메모리
30: 계산 디바이스
31: 디바이스 메모리

Claims (13)

  1. 적어도 하나의 계산 디바이스를 포함하는 이종 시스템에서의 데이터 분배 기법을 수행하는 시스템에 있어서,
    상기 이종 시스템에서 수행되는 커널의 복수의 워크 아이템들의 수행에 필요한 데이터가 저장되는 버퍼를 가상 디바이스 메모리의 일 영역에 할당하는 버퍼할당부; 및
    상기 복수의 워크 아이템 중 어느 하나의 계산 디바이스에서 처리되는 워크아이템이 이용하는 데이터가 저장되는 부분버퍼로 상기 버퍼에 저장된 데이터를 분배하는 데이터분배부를 포함하며,
    상기 부분버퍼는,
    상기 가상 디바이스 메모리내에서 상기 버퍼와 다른 영역에 할당되는, 데이터분배시스템.
  2. 제 1 항에 있어서,
    상기 데이터분배시스템은,
    상기 부분버퍼에 분배된 데이터를 상기 워크 아이템이 처리되는 계산 디바이스의 디바이스 메모리로 이동시키는 데이터이동부를 더 포함하는, 데이터분배시스템.
  3. 제 1 항에 있어서,
    상기 데이터분배시스템은,
    상기 버퍼에 저장된 데이터의 주소를 기초로 상기 데이터를 상기 부분버퍼에 저장하는 주소를 계산하는 주소변환부를 더 포함하는, 데이터분배시스템.
  4. 제 1 항에 있어서,
    상기 가상 디바이스 메모리의 일 영역은,
    메인 메모리 내에 할당된 영역인, 데이터분배시스템.
  5. 제 3 항에 있어서,
    상기 주소변환부는,
    상기 워크 아이템의 집합의 크기, 상기 워크 아이템 별로 상기 버퍼에 접근하는 횟수 및 상기 버퍼의 데이터 단위에 기초하여 상기 부분버퍼의 주소를 계산하는, 데이터분배시스템.
  6. 제 5 항에 있어서,
    상기 데이터분배시스템은,
    계산된 부분버퍼의 주소에 기초하여, 상기 디바이스 메모리로 이동된 부분버퍼의 데이터를 리딩하는 부분버퍼리더부를 더 포함하는, 데이터분배시스템.
  7. 제 1 항에 있어서,
    상기 데이터분배시스템은,
    상기 커널로부터 상기 부분버퍼를 이용하여 상기 워크아이템에 이용되는 데이터를 분배하는 커널인 제 1 부분커널을 생성하는 부분커널생성부를 더 포함하는, 데이터분배시스템.
  8. 적어도 하나의 계산 디바이스를 포함하는 이종 시스템에서의 데이터 분배 기법을 수행하는 방법에 있어서,
    상기 이종 시스템에서 수행되는 커널의 복수의 워크 아이템들의 수행에 필요한 데이터가 저장되는 버퍼를 가상 디바이스 메모리 영역에 할당하는 단계; 및
    상기 복수의 워크 아이템 중 어느 하나의 계산 디바이스에서 처리되는 워크아이템이 이용하는 데이터가 저장되는 부분버퍼로 상기 버퍼에 저장된 데이터를 분배하는 단계를 포함하며,
    상기 부분버퍼는 상기 가상 디바이스 메모리내에서 상기 버퍼와 다른 영역에 할당되는, 데이터분배방법.
  9. 제 8 항에 있어서,
    상기 데이터분배방법은,
    상기 부분버퍼에 분배된 데이터를 상기 워크 아이템이 처리되는 계산 디바이스의 디바이스 메모리로 이동시키는 단계를 더 포함하는, 데이터분배방법.
  10. 제 8 항에 있어서,
    상기 데이터분배방법은,
    상기 버퍼에 저장된 데이터의 주소와 상기 부분버퍼에 저장하는 주소를 계산하는 단계를 더 포함하는, 데이터분배방법.
  11. 제 10 항에 있어서,
    상기 데이터분배방법은,
    상기 워크 아이템의 집합의 크기, 상기 워크 아이템 별로 상기 버퍼에 접근하는 횟수 및 상기 버퍼의 데이터 단위에 기초하여 상기 부분버퍼의 주소를 계산하는 단계를 포함하는, 데이터분배방법.
  12. 제 11 항에 있어서,
    상기 데이터분배방법은,
    계산된 부분버퍼의 주소에 기초하여 상기 디바이스 메모리로 이동된 부분버퍼의 데이터를 리딩하는 단계를 더 포함하는, 데이터분배방법.
  13. 제 8 항에 기재된 방법을 수행하기 위해 컴퓨터 판독가능한 기록매체에 저장된 컴퓨터 프로그램.
KR1020170009440A 2016-01-19 2017-01-19 이종 시스템에서의 데이터 분배 기법 KR101897624B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/KR2017/000694 WO2017126924A1 (ko) 2016-01-19 2017-01-19 이종 시스템에서의 데이터 분배 기법

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20160006603 2016-01-19
KR1020160006603 2016-01-19

Publications (2)

Publication Number Publication Date
KR20170087055A KR20170087055A (ko) 2017-07-27
KR101897624B1 true KR101897624B1 (ko) 2018-10-04

Family

ID=59428074

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170009440A KR101897624B1 (ko) 2016-01-19 2017-01-19 이종 시스템에서의 데이터 분배 기법

Country Status (1)

Country Link
KR (1) KR101897624B1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090248922A1 (en) 2008-03-31 2009-10-01 Fujifilm Limited Memory buffer allocation device and computer readable medium having stored thereon memory buffer allocation program
US20100321397A1 (en) 2009-06-23 2010-12-23 Boris Ginzburg Shared Virtual Memory Between A Host And Discrete Graphics Device In A Computing System
US20150113255A1 (en) 2010-09-24 2015-04-23 Intel Corporation Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090248922A1 (en) 2008-03-31 2009-10-01 Fujifilm Limited Memory buffer allocation device and computer readable medium having stored thereon memory buffer allocation program
US20100321397A1 (en) 2009-06-23 2010-12-23 Boris Ginzburg Shared Virtual Memory Between A Host And Discrete Graphics Device In A Computing System
US20150113255A1 (en) 2010-09-24 2015-04-23 Intel Corporation Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Jaejin Lee 외 14명. 'An OpenCL framework for heterogeneous multicores with local memory'. 19th International Conference on Parallel Architectures and Compilation Techniques (PACT), 2010.09, pp.193-204.

Also Published As

Publication number Publication date
KR20170087055A (ko) 2017-07-27

Similar Documents

Publication Publication Date Title
KR102268722B1 (ko) 데이터 액세스 장치 및 그것의 동작 방법
US10410693B2 (en) Multiprocessor system with independent direct access to bulk solid state memory resources
US10223762B2 (en) Pipelined approach to fused kernels for optimization of machine learning workloads on graphical processing units
CN110032395B (zh) 用于提高资源利用率的统一寄存器文件
US9921847B2 (en) Tree-based thread management
US9069658B2 (en) Using a virtual to physical map for direct user space communication with a data storage device
US9354892B2 (en) Creating SIMD efficient code by transferring register state through common memory
CN110546628A (zh) 用有向线缓冲器最小化存储器读取提高神经网络环境性能
US9229717B2 (en) Register allocation for clustered multi-level register files
US20200183833A1 (en) Virtual space memory bandwidth reduction
US20190278574A1 (en) Techniques for transforming serial program code into kernels for execution on a parallel processor
US11455781B2 (en) Data reading/writing method and system in 3D image processing, storage medium and terminal
WO2022068760A1 (zh) 内存管理的方法及其装置
US9558112B1 (en) Data management in a data storage device
KR20210113099A (ko) 조정 가능한 기능-인-메모리 컴퓨팅 시스템
KR101897624B1 (ko) 이종 시스템에서의 데이터 분배 기법
US20150269073A1 (en) Compiler-generated memory mapping hints
US20190377671A1 (en) Memory controller with memory resource memory management
US20220405111A1 (en) Improving memory access handling for nested virtual machines
US8593472B1 (en) System and method for accessing a frame buffer via a storage driver
US20120265948A1 (en) Emulating a skip read command
US20200081651A1 (en) Near-memory data-dependent gather and packing
CN106547603B (zh) 减少golang语言系统垃圾回收时间的方法和装置
US20230205500A1 (en) Computation architecture synthesis
US11675568B2 (en) Dual vector arithmetic logic unit

Legal Events

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