KR101948135B1 - 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템 - Google Patents

이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템 Download PDF

Info

Publication number
KR101948135B1
KR101948135B1 KR1020170097027A KR20170097027A KR101948135B1 KR 101948135 B1 KR101948135 B1 KR 101948135B1 KR 1020170097027 A KR1020170097027 A KR 1020170097027A KR 20170097027 A KR20170097027 A KR 20170097027A KR 101948135 B1 KR101948135 B1 KR 101948135B1
Authority
KR
South Korea
Prior art keywords
code
host
computing device
binary
parallel programming
Prior art date
Application number
KR1020170097027A
Other languages
English (en)
Other versions
KR20190013060A (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 KR1020170097027A priority Critical patent/KR101948135B1/ko
Publication of KR20190013060A publication Critical patent/KR20190013060A/ko
Application granted granted Critical
Publication of KR101948135B1 publication Critical patent/KR101948135B1/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

서로 다른 종류의 계산 디바이스들을 포함하는 이종 시스템에서 애플리케이션을 실행하기 위한 방법 및 이를 수행하기 위한 이종 시스템을 제시한다. 이종 시스템의 호스트 프로세서는 애플리케이션 코드를 호스트 코드 및 디바이스 코드로 나누어서 처리하며, 디바이스 코드를 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하고, 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어한다.

Description

이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템 {METHOD FOR EXECUTING APPLICATION OF HETEROGENEOUS SYSTEM, AND HETEROGENEOUS SYSTEM FOR PERFORMING THE SAME}
본 명세서에서 개시되는 실시예들은 이종 시스템에서 애플리케이션을 실행하는 방법 및 이를 수행하기 위한 이종 시스템에 관한 것이다.
이종 시스템(heterogeneous system)이란 CPU와 복수의 가속기(accelerator)들을 포함하는 시스템을 의미한다.
이종 시스템에서 가속기를 활용하기 위해 프로그래머는 병렬 프로그래밍 모델(parallel programming model)을 사용하여 애플리케이션을 프로그래밍한다. 병렬 프로그래밍 모델로는 OpenCL, CUDA, OpenMP, OpenACC 등의 다양한 종류가 존재하며, 일반적으로 가속기는 하나 혹은 복수의 병렬 프로그래밍 모델을 지원한다.
한편, 이종 시스템에서 한 종류의 가속기만 포함한다면, 프로그래머는 하나의 병렬 프로그래밍 모델만 사용하여 애플리케이션을 프로그래밍하면 되지만, 만약 이종 시스템에서 여러 종류의 가속기를 포함한다면 하나의 병렬 프로그래밍 모델만으로는 애플리케이션을 프로그래밍 하기 어려운 경우가 생긴다. 예를 들어, NVIDIA사의 GPU를 활용하기 위해서는 CUDA를 사용하고, AMD사의 GPU를 활용하기 위해서 OpenCL을 사용해야 한다.
종래에는 이러한 문제점을 해결하기 위해 각각의 가속기들이 지원하는 병렬 프로그래밍 모델을 사용하여 애플리케이션을 각각 따로 생성하고, 애플리케이션간에 필요한 통신을 하도록 했다. 하지만, 이러한 방식은 프로그래머가 여러 종류의 병렬 프로그래밍 모델을 사용할 줄 알아야 할 뿐만 아니라, 코드의 관리도 어려운 문제점을 안고 있었다.
관련하여 선행기술 문헌인 미국등록특허 제9,448,779호에서는 GPU상의 실행을 위한 병렬 프로그래밍 모델을 사용하여 기록된 애플리케이션 프로그램을 번역하여 범용 CPU에 의해 실행될 수 있도록 하는 내용을 개시하고 있다.
한편, 전술한 배경기술은 발명자가 본 발명의 도출을 위해 보유하고 있었거나, 본 발명의 도출 과정에서 습득한 기술 정보로서, 반드시 본 발명의 출원 전에 일반 공중에게 공개된 공지기술이라 할 수는 없다.
본 명세서에서 개시되는 실시예들은, 서로 다른 병렬 프로그래밍 모델을 사용하는 복수의 가속기들을 포함하는 이종 시스템에서 애플리케이션을 실행하는 방법 및 이를 수행하기 위한 이종 시스템을 제시하는데 목적이 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 일 실시예에 따르면, 이종 시스템은, 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는 적어도 하나의 계산 디바이스 및 상기 계산 디바이스의 동작을 제어하며, 상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 나누어서 처리하는 호스트 프로세서를 포함하며, 상기 호스트 프로세서는, 상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하고, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하고, 상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어할 수 있다.
다른 실시예에 따르면, 이종 시스템에서 애플리케이션을 실행하는 방법은, 상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 분리하는 단계, 상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하는 단계, 상기 이종 시스템에 포함된 적어도 하나의 계산 디바이스가 상기 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는다면, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하는 단계 및 상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하는 단계를 포함할 수 있다.
다른 실시예에 따르면, 이종 시스템의 애플리케이션 실행 방법을 수행하기 위한 컴퓨터 프로그램으로서, 이종 시스템의 애플리케이션 실행 방법은, 상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 분리하는 단계, 상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하는 단계, 상기 이종 시스템에 포함된 적어도 하나의 계산 디바이스가 상기 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는다면, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하는 단계 및 상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하는 단계를 포함할 수 있다.
또 다른 실시예에 따르면, 이종 시스템의 애플리케이션 실행 방법을 수행하는 프로그램이 기록된 컴퓨터 판독 가능한 기록매체로서, 이종 시스템의 애플리케이션 실행 방법은, 상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 분리하는 단계, 상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하는 단계, 상기 이종 시스템에 포함된 적어도 하나의 계산 디바이스가 상기 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는다면, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하는 단계 및 상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하는 단계를 포함할 수 있다.
전술한 과제 해결 수단 중 어느 하나에 의하면, 이종 시스템에 포함된 계산 디바이스들 중에, 애플리케이션의 작성에 사용된 병렬 프로그래밍 모델을 지원하지 않는 계산 디바이스도 활용하여 애플리케이션을 실행할 수 있다.
따라서, 사용자(프로그래머)는 하나의 병렬 프로그래밍 모델만을 이용해 애플리케이션을 생성하더라도, 이종 시스템에 포함된 서로 다른 종류의 병렬 프로그래밍 모델을 지원하는 계산 디바이스들을 활용하여 애플리케이션을 실행할 수 있으므로 편의성이 향상되는 효과를 기대할 수 있다.
개시되는 실시예들에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 개시되는 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 일 실시예에 따른 이종 시스템의 구성을 도시한 도면이다.
도 2는 일 실시예에 따른 이종 시스템의 애플리케이션 실행 방법을 설명하기 위한 순서도이다.
도 3은 일 실시예에 따라 디바이스 코드를 번역하고 컴파일하여 커널 바이너리를 생성하는 과정을 설명하기 위한 순서도이다.
도 4는 일 실시예에 따라 이종 시스템에서 애플리케이션을 실행하는 구조를 설명하기 위한 도면이다.
도 5는 일 실시예에 따른 이종 시스템에서 애플리케이션 코드를 분리하여 처리하는 전체적인 과정을 설명하기 위한 도면이다.
아래에서는 첨부한 도면을 참조하여 다양한 실시예들을 상세히 설명한다. 아래에서 설명되는 실시예들은 여러 가지 상이한 형태로 변형되어 실시될 수도 있다. 실시예들의 특징을 보다 명확히 설명하기 위하여, 이하의 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 널리 알려져 있는 사항들에 관해서 자세한 설명은 생략하였다. 그리고, 도면에서 실시예들의 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 구성이 다른 구성과 "연결"되어 있다고 할 때, 이는 ‘직접적으로 연결’되어 있는 경우뿐 아니라, ‘그 중간에 다른 구성을 사이에 두고 연결’되어 있는 경우도 포함한다. 또한, 어떤 구성이 어떤 구성을 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한, 그 외 다른 구성을 제외하는 것이 아니라 다른 구성들을 더 포함할 수도 있음을 의미한다.
이하 첨부된 도면을 참고하여 실시예들을 상세히 설명하기로 한다.
도 1은 일 실시예에 따른 이종 시스템의 구성을 도시한 도면이다. 도 1을 참조하면, 일 실시예에 따른 이종 시스템(100)은 호스트 프로세서(110) 및 복수의 계산 디바이스들(121, 122, 123, 124)을 포함할 수 있다. 도 1에서는 이종 시스템(100)이 4개의 계산 디바이스들(121, 122, 123, 124)을 포함하는 것으로 도시하였으나, 이에 한정되지 않고 다양한 개수의 계산 디바이스들을 포함할 수 있음은 자명하다.
호스트 프로세서(110)는 CPU와 같은 연산 처리를 위한 범용 프로세서로 구성될 수 있으며, 이종 시스템(100)의 운영체제가 호스트 프로세서(110)에서 실행될 수 있다. 호스트 프로세서(110)는 계산 디바이스들(121, 122, 123, 124)과 연결되어 계산 디바이스들(121, 122, 123, 124)의 동작을 제어할 수 있다. 예를 들어, 호스트 프로세서(110)는 계산 디바이스들(121, 122, 123, 124)과 PCI-E 버스를 통해 연결되어 계산 디바이스들(121, 122, 123, 124)의 제어를 위한 데이터를 송수신할 수 있다. 또한, 호스트 프로세서(110)에는 메인 메모리(미도시)가 연결될 수 있다.
계산 디바이스들(121, 122, 123, 124)은 가속기(accelerator)라고도 하며, 범용의 CPU와는 달리 특정 패턴의 연산에 특화된 프로세서로 구성될 수 있다. 예를 들어, GPU, Intel Xeon Phi 코프로세서 또는 FPGA 등이 계산 디바이스가 될 수 있다. 계산 디바이스들(121, 122, 123, 124)은 호스트 프로세서(110)의 제어에 따라서 각각에 특화된 연산을 수행한다. 다시 말해, 이종 시스템(100)에서 애플리케이션이 실행되면, 각각의 계산 디바이스들(121, 122, 123, 124)은 자신에게 특화된 특정 패턴의 연산을 수행하고, 나머지 연산 및 I/O 작업이 호스트 프로세서(110)에 의해서 수행될 수 있다. 또한, 계산 디바이스들(121, 122, 123, 124) 각각에는 디바이스 메모리(미도시)가 연결될 수 있다.
계산 디바이스들(121, 122, 123, 124)은 호스트 프로세서(110)와 함께 병렬 연산을 처리하므로, 계산 디바이스들(121, 122, 123, 124)을 활용하기 위해서는 병렬 프로그래밍 모델(parallel programming model)을 사용하여 애플리케이션을 프로그래밍해야 한다.
병렬 프로그래밍 모델에는 OpenCL, CUDA, OpenMP 및 OpenACC 등과 같이 다양한 종류가 존재하는데, 각각의 계산 디바이스들(121, 122, 123, 124)은 하나 또는 복수의 병렬 프로그래밍 모델을 지원할 수 있다. 그런데, 각각의 병렬 프로그래밍 모델에는 세부적인 용어 및 문법의 차이가 있어, 계산 디바이스를 활용하기 위해서는 계산 디바이스가 지원하는 병렬 프로그래밍 모델을 사용하여 애플리케이션을 생성해야 한다.
이하에서는, 설명의 편의를 위해 제1 및 제2 계산 디바이스(121, 122)는 제1 병렬 프로그래밍 모델을 지원하고, 제3 계산 디바이스(123)는 제2 병렬 프로그래밍 모델을 지원하고, 제4 계산 디바이스(124)는 제3 병렬 프로그래밍 모델을 지원한다고 가정한다.
또한, 이종 시스템(100)에서 실행되는 애플리케이션은 제1 및 제2 계산 디바이스(121, 122)가 지원하는 제1 병렬 프로그래밍 모델을 사용하여 생성된 것이라고 가정한다.
일 실시예에 따르면, 호스트 프로세서(110)는 하나의 병렬 프로그래밍 모델만으로 다양한 종류의 가속기들을 활용할 수 있도록 하기 위해, 애플리케이션 코드를 호스트 코드와 디바이스 코드로 나누어서 처리한다. 이에 따라, 호스트 프로세서(110)는 애플리케이션의 실행시에, 애플리케이션의 생성에 사용된 제1 병렬 프로그래밍 모델을 지원하지 않는 제3 및 제4 계산 디바이스들(123, 124)도 활용할 수 있다.
이때, 호스트 코드는 호스트 프로세서(110)에서 실행되기 위한 호스트 프로그램을 구성하는 코드로서, 이종 시스템에 포함된 디바이스들을 제어하거나 다른 컴퓨터 또는 장치와 통신을 수행하는 동작 등과 관련된 내용들을 기술하고 있다. 또한 이때, 디바이스 코드는 계산 디바이스들(121, 122, 123, 124)에서 처리할 내용들을 기술하고 있으며, 계산 디바이스들(121, 122, 123, 124)실행되기 위한 커널(kernel)을 구성하는 코드이다. 따라서, 디바이스 코드는 커널 코드라고도 한다. 호스트 코드와 디바이스 코드는 서로 완전히 분리되어 있을 수도 있고, 디바이스 코드가 호스트 코드에 포함되어 있을 수도 있다.
호스트 프로세서(110)는 호스트 프로그램을 실행하면, 병렬 프로그래밍 모델이 제공하는 API를 사용해 메인 메모리에 저장된 데이터를 디바이스 메모리로 복사하고, 계산 디바이스에서 커널을 실행시키고, 커널을 실행한 결과 디바이스 메모리에 저장된 데이터를 메인 메모리로 복사하라는 명령을 내릴 수 있다. 이때, API를 구현한 소프트웨어인 런타임 시스템(runtime system)이 호스트 프로그램과 동시에 실행되면서, 호스트 프로세서(110)는 호스트 프로그램의 명령에 따라서 계산 디바이스들(121, 122, 123, 124)을 제어할 수 있다.
일 실시예에 따르면, 호스트 프로세서(110)는 디바이스 코드를 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역함으로써, 애플리케이션의 생성에 사용된 제1 병렬 프로그래밍 모델을 지원하지 않는 제3 및 제4 계산 디바이스(123, 124)도 애플리케이션을 실행할 수 있도록 한다. 호스트 프로세서(110)가 애플리케이션 코드를 나누어서 처리하는 구체적인 과정은 아래에서 도 2 내지 도 5를 참조하여 자세하게 설명한다.
도 2는 일 실시예에 따른 이종 시스템의 애플리케이션 실행 방법을 설명하기 위한 순서도이다.
도 2를 참조하면, 201 단계에서 호스트 프로세서(110)는 애플리케이션 코드를 호스트 코드와 디바이스 코드로 분리한다. 호스트 프로세서(110)가 애플리케이션 코드를 분리하는 방법은, 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델에 따라서 다를 수 있다. 예를 들어, 호스트 프로세서(110)는 OpenCL 또는 CUDA을 사용하여 생성된 애플리케이션이라면 함수에 붙은 qualifier를 통해 분리하고, OpenMP 또는 OpenACC를 통해 생성된 애플리케이션이라면 pragma annotation을 통해 분리할 수 있다. 한편, 애플리케이션이 이미 호스트 코드와 디바이스 코드로 분리되어 제공되는 경우라면 호스트 프로세서(110)는 분리 과정을 생략할 수 있다.
애플리케이션 코드가 분리되면, 202 단계에서 호스트 프로세서(110)는 호스트 코드를 컴파일하여 호스트 바이너리를 생성한다. 예를 들어, 호스트 프로세서(110)는 병렬 프로그래밍 모델들간의 API의 대응관계를 포함하는 클러스터 런타임 코드 및 계산 디바이스에 대응되는 벤더 런타임 라이브러리를 이용하여 호스트 코드를 컴파일함으로써 호스트 바이너리를 생성한다. 호스트 바이너리는 호스트 프로세서(110)에서 실행되기 위한 바이너리이다.
이때, 클러스터 런타임 코드란 서로 다른 병렬 프로그래밍 모델들의 API의 대응관계를 포함하고 있다. 즉, 클러스터 런타임 코드는 제1 병렬 프로그래밍 모델의 특정 API에 대응되는 제2 또는 제3 병렬 프로그래밍 모델의 API는 무엇인지에 대한 정보를 포함하고 있다. 또한 이때, 벤더 런타임 라이브러리란 각각의 계산 디바이스들(121, 122, 123, 124)의 제조사가 제공하는 라이브러리로서, 실질적으로 각 계산 디바이스들(121, 122, 123, 124)을 제어하는 역할을 담당한다. 호스트 코드를 컴파일하여 호스트 바이너리를 생성하는 자세한 방법은 아래에서 도 4 및 도 5를 참조하여 설명하도록 한다.
203 단계에서 호스트 프로세서(110)는 디바이스 코드를 계산 디바이스에 대응되는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성한다. 커널 바이너리는 계산 디바이스들(121, 122, 123, 124)에서 수행되기 위한 바이너리이다.
이와 같이 디바이스 코드를 번역하는 이유는, 디바이스 코드는 작성에 사용된 병렬 프로그래밍 모델에 따라 지원하는 프로그래밍 언어에 차이가 있는데다가, 각 병렬 프로그래밍 모델 별로 계산 디바이스에서 지원하는 빌트-인 함수에서도 차이가 있기 때문이다.
도 1에서 제1 및 제2 계산 디바이스(121, 122)의 경우 애플리케이션의 생성에 사용된 제1 병렬 프로그래밍 모델을 지원하므로, 호스트 프로세서(110)는 제1 및 제2 계산 디바이스(121, 122)를 활용하기 위해서는 디바이스 코드를 번역하지 않고 바로 컴파일함으로써 커널 바이너리를 생성할 수 있다. 하지만, 제3 계산 디바이스(123)는 제2 병렬 프로그래밍 모델을 지원하므로, 호스트 프로세서(110)는 제3 계산 디바이스(123)를 활용하기 위해서는 디바이스 코드를, 제3 계산 디바이스(123)가 지원하는 제2 병렬 프로그래밍 모델로 번역한 후 컴파일함으로써 커널 바이너리를 생성한다. 마찬가지로, 호스트 프로세서(110)는 제4 계산 디바이스(124)를 활용하기 위해서는 디바이스 코드를, 제4 계산 디바이스(124)가 지원하는 제3 병렬 프로그래밍 모델로 번역한 후 컴파일함으로써 커널 바이너리를 생성한다.
204 단계에서 호스트 프로세서(110)는 호스트 바이너리를 실행하여, 커널 바이너리를 대응되는 계산 디바이스로 전달하여 커널을 실행하도록 제어한다. 즉, 호스트 프로세서(110)는 디바이스 코드를 제2 병렬 프로그래밍 모델로 번역한 후 컴파일함으로써 생성한 커널 바이너리는, 제3 계산 디바이스(123)에서 실행하도록 제어한다. 또한, 호스트 프로세서(110)는 디바이스 코드를 제3 병렬 프로그래밍 모델로 번역한 후 컴파일함으로써 생성한 커널 바이너리는, 제4 계산 디바이스(124)에서 실행하도록 제어한다.
호스트 프로세서(110)가 디바이스 코드를 번역하고 컴파일하여 커널 바이너리를 생성하는 과정(203 단계)에 대해서는 아래에서 도 3을 참조하여 더 자세히 설명한다.
도 3은 일 실시예에 따라 디바이스 코드를 번역하고 컴파일하여 커널 바이너리를 생성하는 과정을 설명하기 위한 순서도이다. 즉, 도 3은 도 2의 203 단계에 포함되는 세부 단계들을 나타낸 순서도이다.
도 3을 참조하면, 301 단계에서 호스트 프로세서(110)는 디바이스 코드가 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 작성되었는지 여부를 판단한다. 이때, 호스트 프로세서(110)는 애플리케이션의 실행에 활용할 계산 디바이스들 각각에 대해서 이러한 판단을 수행한다.
판단 결과, 디바이스 코드가 계산 디바이스에서 사용하는 병렬 프로그래밍 모델로 작성되었다면, 303 단계로 진행하여 호스트 프로세서(110)는 계산 디바이스의 제조사에서 제공하는 컴파일러, 즉 벤더 컴파일러를 이용하여 디바이스 코드를 컴파일한다. 도 1을 예로 들면, 제1 및 제2 계산 디바이스들(121, 122)은 디바이스 코드의 작성에 사용된 제1 병렬 프로그래밍 모델을 지원하므로, 호스트 프로세서(110)는 디바이스 코드를 번역하지 않고, 제1 및 제2 계산 디바이스들(121, 122) 각각에 대응되는 벤더 컴파일러를 이용하여 컴파일함으로써 커널 바이너리를 생성한다.
하지만 판단 결과, 디바이스 코드가 계산 디바이스에서 사용하는 병렬 프로그래밍 모델로 작성되지 않았다면, 302 단계로 진행하여 호스트 프로세서(110)는 디바이스 코드를 계산 디바이스에서 사용하는 병렬 프로그래밍 모델로 번역한 후, 303 단계로 진행하여 번역된 디바이스 코드를 컴파일함으로써 커널 바이너리를 생성한다. 도 1을 예로 들면, 제3 계산 디바이스(123)는 제2 병렬 프로그래밍 모델을 지원하므로, 호스트 프로세서(110)는 디바이스 코드를 제2 병렬 프로그래밍 모델로 번역한 후, 제3 계산 디바이스(123)에 대응되는 벤더 컴파일러를 이용하여 컴파일함으로써 커널 바이너리를 생성한다. 또한, 제4 계산 디바이스(124)는 제3 병렬 프로그래밍 모델을 지원하므로, 호스트 프로세서(110)는 디바이스 코드를 제3 병렬 프로그래밍 모델로 번역한 후, 제4 계산 디바이스(124)에 대응되는 벤더 컴파일러를 이용하여 컴파일함으로써 커널 바이너리를 생성한다.
이하에서는 도 4를 참조하여, 서로 다른 병렬 프로그래밍 모델을 지원하는 계산 디바이스들을 포함하는 이종 시스템에서 애플리케이션을 실행하는 전체적인 구조에 대해서 설명한다.
도 4를 참조하면, 애플리케이션(410)은 클러스터 런타임(420)에 API의 처리를 요청한다. 이때, 애플리케이션(410)이 처리를 요청하는 API는 애플리케이션(410)의 생성에 사용된 병렬 프로그래밍 모델에 따라서 달라진다. 클러스터 런타임(420)은 각각의 계산 디바이스들(121, 122, 123, 124)이 지원하는 병렬 프로그래밍 모델을 확인하고, 요청된 API에 대응되는 API의 처리를 벤더 런타임(431, 432, 433)에 요청한다. 다시 말해, 클러스터 런타임(420)은 애플리케이션(410)이 처리를 요청한 API에 대응되면서, 각각의 계산 디바이스가 지원하는 병렬 프로그래밍 모델이 제공하는 API가 무엇인지 확인하고, 확인된 API를 벤더 런타임(431, 432, 433)에 처리 요청한다.
예를 들어, 애플리케이션(410)의 생성에 OpenCL이 사용되었고 계산 디바이스에서는 CUDA를 지원하는 경우에, 애플리케이션(410)에서 메모리 읽기 기능을 수행하는 OpenCL API인 cl-EnqueueReadBuffer() 함수를 호출했다면, 클러스터 런타임(420)은 이에 상응하는 CUDA API인 cudaMemcpy()를 호출한다.
이를 위해, 클러스터 런타임(420)은 서로 다른 병렬 프로그래밍 모델들의 API의 대응관계에 대한 정보를 포함할 수 있다.
도 4에서 제1 및 제2 계산 디바이스(121, 122)는 동일한 제조사에서 생산되어 동일한 벤더 런타임(431)을 갖는다고 가정한다. 그리고 제3 계산 디바이스(123) 및 제4 계산 디바이스(124)는 각각 다른 제조사에서 생산되어 다른 벤더 런타임들(432, 433)을 갖는다고 가정한다.
제1 및 제2 계산 디바이스(121, 122)는 애플리케이션(410)의 생성에 사용된 제1 병렬 프로그래밍 모델을 지원하므로, 클러스터 런타임(420)은 애플리케이션(410)이 호출한 제1 병렬 프로그래밍 모델의 API를 그대로 호출하여 벤더 런타임 A(431)에 처리를 요청한다.
하지만, 제3 계산 디바이스(123)는 제2 병렬 프로그래밍 모델을 지원하므로, 클러스터 런타임(420)은 애플리케이션(410)이 호출한 제1 병렬 프로그래밍 모델의 API에 대응되는 제2 병렬 프로그래밍 모델의 API를 호출하여 벤더 런타임 B(432)에 처리를 요청한다. 마찬가지로, 제4 계산 디바이스(124)는 제3 병렬 프로그래밍 모델을 지원하므로, 클러스터 런타임(420)은 애플리케이션(410)이 호출한 제1 병렬 프로그래밍 모델의 API에 대응되는 제3 병렬 프로그래밍 모델의 API를 호출하여 벤더 런타임 C(433)에 처리를 요청한다.
벤더 런타임들(431, 432, 433)은 각각의 계산 디바이스들(121, 122, 123, 124)의 제조사에서 제공하는 라이브러리로서, 처리를 요청 받은 API에 따라 실질적으로 각각의 계산 디바이스들(121, 122, 123, 124)을 제어한다.
도 5는 일 실시예에 따른 이종 시스템에서 애플리케이션 코드를 분리하여 처리하는 전체적인 과정을 설명하기 위한 도면이다.
도 5에서 코드 분리기(510), 상용 컴파일러(520), 코드 번역기(530) 및 벤더 컴파일러(540)는, 이종 시스템의 호스트 프로세서에 연결된 메인 메모리에 저장된 프로그램들일 수 있다. 즉, 도 5에서 설명되는 프로세스들은 모두 이종 시스템의 호스트 프로세서에 의해 수행된다.
도 5를 참조하면, 애플리케이션 코드(501)는 코드 분리기를 통해 호스트 코드(502) 및 디바이스 코드(503)로 분리된다. 이때, 애플리케이션 코드(501)가 이미 분리된 상태로 제공된다면 분리 과정을 생략될 수 있다.
호스트 코드(502)는 클러스터 런타임 코드(504) 및 벤더 런타임 라이브러리(505)와 함께 상용 컴파일러(520)를 통해 컴파일됨으로써 호스트 바이너리(506)가 생성된다. 이때, 상용 컴파일러(520)는 호스트 코드(502)의 언어에 대응되는 컴파일러이다.
디바이스 코드(503)는 코드 번역기(530)에 의해 각각의 계산 디바이스들이 지원하는 병렬 프로그래밍 모델로 번역된 후, 벤더 컴파일러(540)를 통해 컴파일됨으로써 커널 바이너리(507)가 생성된다. 이때, 벤더 컴파일러(540)는 각각의 계산 디바이스의 제조사가 제공하는 컴파일러이다.
이상의 실시예들에서 사용되는 '~부'라는 용어는 소프트웨어 또는 FPGA(field programmable gate array) 또는 ASIC 와 같은 하드웨어 구성요소를 의미하며, '~부'는 어떤 역할들을 수행한다. 그렇지만 '~부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '~부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 '~부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램특허 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다.
구성요소들과 '~부'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~부'들로 결합되거나 추가적인 구성요소들과 '~부'들로부터 분리될 수 있다.
뿐만 아니라, 구성요소들 및 '~부'들은 디바이스 또는 보안 멀티미디어카드 내의 하나 또는 그 이상의 CPU 들을 재생시키도록 구현될 수도 있다.
도 2를 통해 설명된 실시예에 따른 이종 시스템의 애플리케이션 실행 방법은 컴퓨터에 의해 실행 가능한 명령어 및 데이터를 저장하는, 컴퓨터로 판독 가능한 매체의 형태로도 구현될 수 있다. 이때, 명령어 및 데이터는 프로그램 코드의 형태로 저장될 수 있으며, 프로세서에 의해 실행되었을 때, 소정의 프로그램 모듈을 생성하여 소정의 동작을 수행할 수 있다. 또한, 컴퓨터로 판독 가능한 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터로 판독 가능한 매체는 컴퓨터 기록 매체일 수 있는데, 컴퓨터 기록 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함할 수 있다. 예를 들어, 컴퓨터 기록 매체는 HDD 및 SSD 등과 같은 마그네틱 저장 매체, CD, DVD 및 블루레이 디스크 등과 같은 광학적 기록 매체, 또는 네트워크를 통해 접근 가능한 서버에 포함되는 메모리일 수 있다.
또한 도 2를 통해 설명된 실시예에 따른 이종 시스템의 애플리케이션 실행 방법은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 컴퓨터 프로그램(또는 컴퓨터 프로그램 제품)으로 구현될 수도 있다. 컴퓨터 프로그램은 프로세서에 의해 처리되는 프로그래밍 가능한 기계 명령어를 포함하고, 고레벨 프로그래밍 언어(High-level Programming Language), 객체 지향 프로그래밍 언어(Object-oriented Programming Language), 어셈블리 언어 또는 기계 언어 등으로 구현될 수 있다. 또한 컴퓨터 프로그램은 유형의 컴퓨터 판독가능 기록매체(예를 들어, 메모리, 하드디스크, 자기/광학 매체 또는 SSD(Solid-State Drive) 등)에 기록될 수 있다.
따라서 도 2를 통해 설명된 실시예에 따른 이종 시스템의 애플리케이션 실행 방법은 상술한 바와 같은 컴퓨터 프로그램이 컴퓨팅 장치에 의해 실행됨으로써 구현될 수 있다. 컴퓨팅 장치는 프로세서와, 메모리와, 저장 장치와, 메모리 및 고속 확장포트에 접속하고 있는 고속 인터페이스와, 저속 버스와 저장 장치에 접속하고 있는 저속 인터페이스 중 적어도 일부를 포함할 수 있다. 이러한 성분들 각각은 다양한 버스를 이용하여 서로 접속되어 있으며, 공통 머더보드에 탑재되거나 다른 적절한 방식으로 장착될 수 있다.
여기서 프로세서는 컴퓨팅 장치 내에서 명령어를 처리할 수 있는데, 이런 명령어로는, 예컨대 고속 인터페이스에 접속된 디스플레이처럼 외부 입력, 출력 장치상에 GUI(Graphic User Interface)를 제공하기 위한 그래픽 정보를 표시하기 위해 메모리나 저장 장치에 저장된 명령어를 들 수 있다. 다른 실시예로서, 다수의 프로세서 및(또는) 다수의 버스가 적절히 다수의 메모리 및 메모리 형태와 함께 이용될 수 있다. 또한 프로세서는 독립적인 다수의 아날로그 및(또는) 디지털 프로세서를 포함하는 칩들이 이루는 칩셋으로 구현될 수 있다.
또한 메모리는 컴퓨팅 장치 내에서 정보를 저장한다. 일례로, 메모리는 휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 다른 예로, 메모리는 비휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 또한 메모리는 예컨대, 자기 혹은 광 디스크와 같이 다른 형태의 컴퓨터 판독 가능한 매체일 수도 있다.
그리고 저장장치는 컴퓨팅 장치에게 대용량의 저장공간을 제공할 수 있다. 저장 장치는 컴퓨터 판독 가능한 매체이거나 이런 매체를 포함하는 구성일 수 있으며, 예를 들어 SAN(Storage Area Network) 내의 장치들이나 다른 구성도 포함할 수 있고, 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치, 혹은 테이프 장치, 플래시 메모리, 그와 유사한 다른 반도체 메모리 장치 혹은 장치 어레이일 수 있다.
상술된 실시예들은 예시를 위한 것이며, 상술된 실시예들이 속하는 기술분야의 통상의 지식을 가진 자는 상술된 실시예들이 갖는 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 상술된 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 명세서를 통해 보호 받고자 하는 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태를 포함하는 것으로 해석되어야 한다.
100: 이종 시스템 110: 호스트 프로세서
121, 122, 123, 124: 계산 디바이스

Claims (13)

  1. 애플리케이션을 실행하는 이종 시스템에 있어서,
    상기 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는 적어도 하나의 계산 디바이스; 및
    상기 계산 디바이스의 동작을 제어하며, 상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 나누어서 처리하는 호스트 프로세서를 포함하며,
    상기 호스트 프로세서는, 상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하고, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하고, 상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하며,
    병렬 프로그래밍 모델들간의 API의 대응관계를 포함하는 클러스터 런타임 코드 및 상기 계산 디바이스에 대응되는 벤더 런타임 라이브러리를 이용하여 상기 호스트 코드를 컴파일함으로써 상기 호스트 바이너리를 생성하며,
    상기 호스트 코드에서 호출되는 API에 대응되며, 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델에서 사용되는 API를 상기 클러스터 런타임 코드를 참조하여 호출하는 것을 특징으로 하는, 이종 시스템.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 클러스터 런타임 코드를 참조하여 호출된 API를, 상기 계산 디바이스의 제조사가 제공하는 상기 벤더 런타임 라이브러리를 이용하여 처리하는 것을 특징으로 하는 이종 시스템.
  5. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 호스트 코드를 컴파일함에 있어서, 상기 호스트 코드의 언어에 대응되는 상용 컴파일러를 사용하는 것을 특징으로 하는 이종 시스템.
  6. 제1항에 있어서,
    상기 호스트 프로세서는,
    상기 디바이스 코드를 컴파일함에 있어서, 상기 계산 디바이스의 제조사가 제공하는 벤더 컴파일러를 사용하는 것을 특징으로 하는 이종 시스템.
  7. 이종 시스템에서 애플리케이션을 실행하는 방법에 있어서,
    상기 애플리케이션의 코드를 호스트 코드 및 디바이스 코드로 분리하는 단계;
    상기 호스트 코드를 컴파일하여 호스트 바이너리를 생성하는 단계;
    상기 이종 시스템에 포함된 적어도 하나의 계산 디바이스가 상기 애플리케이션의 생성에 사용된 병렬 프로그래밍 모델을 지원하지 않는다면, 상기 디바이스 코드를 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델로 번역한 후 컴파일하여 커널 바이너리를 생성하는 단계; 및
    상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하는 단계를 포함하며,
    상기 호스트 바이너리를 생성하는 단계는,
    병렬 프로그래밍 모델들간의 API의 대응관계를 포함하는 클러스터 런타임 코드 및 상기 계산 디바이스에 대응되는 벤더 런타임 라이브러리를 이용하여 상기 호스트 코드를 컴파일함으로써 상기 호스트 바이너리를 생성하며,
    상기 호스트 바이너리를 실행하여 상기 계산 디바이스가 상기 커널 바이너리를 실행하도록 제어하는 단계는,
    상기 호스트 코드에서 호출되는 API에 대응되며, 상기 계산 디바이스가 지원하는 병렬 프로그래밍 모델에서 사용되는 API를 상기 클러스터 런타임 코드를 참조하여 호출하는 단계; 및
    상기 클러스터 런타임 코드를 참조하여 호출된 API를, 상기 계산 디바이스의 제조사가 제공하는 상기 벤더 런타임 라이브러리를 이용하여 처리하는 단계를 포함하는 것을 특징으로 하는, 방법.
  8. 삭제
  9. 삭제
  10. 제7항에 있어서,
    상기 호스트 바이너리를 생성하는 단계는,
    상기 호스트 코드의 언어에 대응되는 상용 컴파일러를 사용하여 상기 호스트 코드를 컴파일하는 것을 특징으로 하는 방법.
  11. 제7항에 있어서,
    상기 커널 바이너리를 생성하는 단계는,
    상기 계산 디바이스의 제조사가 제공하는 벤더 컴파일러를 사용하여 상기 디바이스 코드를 컴파일하는 것을 특징으로 하는 방법.
  12. 제7항에 기재된 방법을 수행하는 프로그램이 기록된 컴퓨터 판독 가능한 기록 매체.
  13. 이종 시스템에 의해 수행되며, 제7항에 기재된 방법을 수행하기 위해 매체에 저장된 컴퓨터 프로그램.
KR1020170097027A 2017-07-31 2017-07-31 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템 KR101948135B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170097027A KR101948135B1 (ko) 2017-07-31 2017-07-31 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170097027A KR101948135B1 (ko) 2017-07-31 2017-07-31 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템

Publications (2)

Publication Number Publication Date
KR20190013060A KR20190013060A (ko) 2019-02-11
KR101948135B1 true KR101948135B1 (ko) 2019-02-14

Family

ID=65366104

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170097027A KR101948135B1 (ko) 2017-07-31 2017-07-31 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템

Country Status (1)

Country Link
KR (1) KR101948135B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9448779B2 (en) 2008-04-09 2016-09-20 Nvidia Corporation Execution of retargetted graphics processor accelerated code by a general purpose processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9448779B2 (en) 2008-04-09 2016-09-20 Nvidia Corporation Execution of retargetted graphics processor accelerated code by a general purpose processor

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
김정현 외 10명. 'SnuCL : 이종 매니코어 클러스터를 위한 OpenCL 프로그래밍 환경'. 정보과학회지 제32권 제5호, 2014.5, pp.66-76.
정재훈 외 2명. '쿠다 어플리케이션 바이너리 분석을 통한 지피유 코드 추출 기법'. 한국정보과학회 2017년 한국컴퓨터종합학술대회 논문집, 2017.06, pp.46-48.

Also Published As

Publication number Publication date
KR20190013060A (ko) 2019-02-11

Similar Documents

Publication Publication Date Title
US20190087164A1 (en) Technique for inter-procedural memory address space optimization in gpu computing compiler
CN114546405B (zh) 用于使用统一中间表示来处理图形的方法和系统
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
US20130141443A1 (en) Software libraries for heterogeneous parallel processing platforms
US10409559B2 (en) Single-source-base compilation for multiple target environments
US9817643B2 (en) Incremental interprocedural dataflow analysis during compilation
JP5778296B2 (ja) 仮想計算機システム、仮想化機構、及びデータ管理方法
JP2023518833A (ja) ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換
US20220214866A1 (en) Merged machine-level intermediate representation optimizations
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
US9086933B2 (en) System and method for launching callable functions
US10496433B2 (en) Modification of context saving functions
Bartkov Graal as a multilingual platform
KR101948135B1 (ko) 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템
KR20160098794A (ko) 디바이스 프로그램 구조 모델링 기반 골격코드 생성 장치 및 방법
JP5186562B2 (ja) トランザクションメモリのオブジェクトモデル
US10725667B2 (en) Method of transferring data in parallel system, and parallel system for performing the same
KR102066212B1 (ko) 병렬 시스템에서의 데이터 복사 방법 및 이를 수행하기 위한 병렬 시스템
Oden et al. Implementation and Evaluation of CUDA-Unified Memory in Numba
KR101737785B1 (ko) 프로그램 컴파일 장치 및 프로그램 컴파일 방법
US10055207B2 (en) Persistent variables in programming languages
US11119743B1 (en) Build time optimization using thread object variables
US20230205532A1 (en) Offloading computation based on extended instruction set architecture
JP7324027B2 (ja) プロファイリング方法

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant