KR101632027B1 - 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 - Google Patents

주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 Download PDF

Info

Publication number
KR101632027B1
KR101632027B1 KR1020140155926A KR20140155926A KR101632027B1 KR 101632027 B1 KR101632027 B1 KR 101632027B1 KR 1020140155926 A KR1020140155926 A KR 1020140155926A KR 20140155926 A KR20140155926 A KR 20140155926A KR 101632027 B1 KR101632027 B1 KR 101632027B1
Authority
KR
South Korea
Prior art keywords
code
area
programming language
program
variable
Prior art date
Application number
KR1020140155926A
Other languages
English (en)
Other versions
KR20140139465A (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 KR1020140155926A priority Critical patent/KR101632027B1/ko
Publication of KR20140139465A publication Critical patent/KR20140139465A/ko
Priority to PCT/KR2015/011981 priority patent/WO2016076583A1/ko
Priority to US15/524,248 priority patent/US20170329587A1/en
Application granted granted Critical
Publication of KR101632027B1 publication Critical patent/KR101632027B1/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
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체에 관한 것으로, 컴퓨터 시스템이 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법에 있어서, 범용 프로그래밍 언어로 작성된 코드를 분석하여 주석으로 표현되는 의사코드를 확인하는 단계, 의사코드 영역에 속하는 코드의 경우 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성된 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하거나, 커널함수로 변환하고, 나머지 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어로 변환하여, 병렬 프로그래밍 언어로 작성된 코드를 생성하는 단계, 상기 생성된 코드의 커널함수를 상기 데이터 병렬 컴퓨트 노드를 사용하여 동시에 실행하는 단계를 포함한다.

Description

주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체{METHOD FOR CONVERTING PROGRAM USING PSEUDO CODE BASED COMMENT AND COMPUTER-READABLE RECORDING MEDIA STORING THE PROGRAM PERFORMING THE SAID MEHTOD}
본 발명은 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체에 관한 것으로, 보다 상세하게는 범용 프로그래밍 언어로 작성된 코드의 주석문에 의사코드를 삽입하여 데이터 병렬 컴퓨트 노드(예컨대, GPU)에서 실행 가능한 코드로 변환하는 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체에 관한 것이다.
컴퓨터 시스템들은 종종 하나 이상의 범용 프로세서들(예를 들어, 중앙 처리 장치(central processing unit(CPU)) 및 하나 이상의 특화된 데이터 병렬 컴퓨트 노드들(예를 들어, 그래픽 처리 유닛(graphics processing unit(GPU)), 또는 CPU 내의 단일 명령어 다중 데이터(single instruciton, multiple data(SIMD))실행 유닛)을 포함한다. 범용 프로세서들은 일반적으로 컴퓨터 시스템들에서 범용 처리를 수행하며, 데이터 병렬 컴퓨트 노드들은 일반적으로 컴퓨터 시스템들에서 데이터 병렬 처리(예를 들어, 그래픽 처리)를 수행한다.
범용 프로세서들은 종종 데이터 병렬 알고리즘들을 구현하는 능력을 갖지만, 데이터 병렬 컴퓨트 노드들에서 발견되는 최적화된 하드웨어 자원들 없이 그렇게 한다. 결과적으로, 범용 프로세서들은 데이터 병렬 컴퓨트 노드들보다 데이터 병렬 알고리즘들의 실행에 있어 훨씬 덜 효율적일 수 있다.
한편, GPU와 같은 데이터 병렬 컴퓨트 노드에서 실행되는 프로그램을 제작하기 위해서는 GPU 장치 지원 기능을 제공하는 SDK나 라이브러리, 전용 컴파일러 등을 사용해야 하고, 제공하는 기능들을 이해하고 특수한 추가적인 문법을 사용하여 코딩해야한다.
그러므로 종래 범용 프로세서(예컨대, CPU) 전용으로 제작된 프로그램 코드를 데이터 병렬 컴퓨트 노드(예컨대, GPU)에서 실행시키기 위해서는 수정 및 보완 작업이 필요하고, 데이터 병렬 컴퓨트 노드의 하드웨어 특성에 대한 경험 없이는 많은 어려움과 제약사항이 따른다.
한국등록특허 제1,118,321호, 발명의 명칭 '리카게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행'
본 발명의 목적은 범용 프로그래밍 언어로 작성된 코드의 주석문에 의사코드를 삽입하여 데이터 병렬 컴퓨트 노드(예컨대, GPU)에서 실행 가능한 코드로 변환할 수 있는 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체를 제공함에 있다.
상기 목적들을 달성하기 위하여 본 발명의 일 측면에 따르면, 컴퓨터 시스템이 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법에 있어서, 범용 프로그래밍 언어로 작성된 코드를 분석하여 주석으로 표현되는 의사코드를 확인하는 단계, 의사코드 영역에 속하는 코드의 경우 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성된 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하거나, 커널함수로 변환하고, 나머지 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어로 변환하여, 병렬 프로그래밍 언어로 작성된 코드를 생성하는 단계, 상기 생성된 코드의 커널함수를 상기 데이터 병렬 컴퓨트 노드를 사용하여 동시에 실행하는 단계를 포함하는 주석기반의 의사코드를 이용한 프로그램 변환 방법이 제공된다.
상기 의사코드는 영역상태변수 또는 병렬화변수를 포함하고, 영역상태변수 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하고, 병렬화 변수 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어를 사용하여 커널함수로 변환할 수 있다.
본 발명의 다른 측면에 따르면, 컴퓨터 판독 가능한 기록매체에 저장된 컴퓨터 실행 가능 명령어가 컴퓨터 시스템에 의해 실행될 때, 범용 프로그래밍 언어로 작성된 코드를 분석하여 주석으로 표현되는 의사코드를 확인하는 단계, 의사코드 영역에 속하는 코드의 경우 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성되는 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하거나, 커널함수로 변환하고, 나머지 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어로 변환하여, 병렬 프로그래밍 언어로 작성된 코드를 생성하는 단계, 상기 생성된 코드의 커널함수를 상기 데이터 병렬 컴퓨트 노드를 사용하여 실행하는 단계를 포함하는 주석기반의 의사코드를 이용한 프로그램 변환 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체가 제공된다.
본 발명에 따르면, 범용 프로그래밍 언어로 작성된 코드의 주석문에 의사코드를 삽입하여 데이터 병렬 컴퓨트 노드(예컨대, GPU)에서 실행 가능한 코드로 변환함으로써, 입력 언어로 제작된 코드의 내용적인 변경이 없고, 데이터 병렬 컴퓨트 노드에서 변환된 출력 프로그램의 실행결과와 비교를 통해 변환이 제대로 수행되었는지 검증이 용이하다. 이는 범용 프로세서(CPU)에서 데이터 병렬 컴퓨트 노드(GPU)로의 프로그램 포팅 과정의 작업 시간 단축과 생산성을 높여주는 효과가 있다.
또한, 데이터 병렬 컴퓨트 노드에서 실행 가능한 병렬 프로그래밍 언어에 대한 지식이 없어도 기존 범용 프로그래밍 언어로 작성된 프로그램을 손쉽게 데이터 병렬 컴퓨트 노드에서 실행 가능한 병렬 프로그램으로 변환할 수 있다.
도 1은 본 발명의 실시예에 따른 주석기반의 의사코드를 이용한 프로그램 변환을 위한 컴퓨터 시스템을 나타낸 도면.
도 2는 본 발명의 실시예에 따른 범용 프로그래밍 언어로 작성된 코드에 주석으로 의사코드를 삽입하여 병렬 프로그래밍 언로 작성된 코드로 변환하는 방법을 설명하기 위한 프로그램 예시.
도 3은 본 발명의 실시예에 따른 호스트가 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법을 나타낸 도면.
도 4는 본 발명의 실시예에 따른 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법을 설명하기 위한 프로그램 예시.
도 5는 본 발명의 실시예에 따른 범용 프로그래밍 언어로 작성된 코드를 병렬 프로그래밍 언어로 작성된 코드로 변환하는 방법을 나타낸 도면.
본 발명의 전술한 목적과 기술적 구성 및 그에 따른 작용 효과에 관한 자세한 사항은 본 발명의 명세서에 첨부된 도면에 의거한 이하 상세한 설명에 의해 보다 명확하게 이해될 것이다.
이하, 첨부된 도면들을 참조하여 본 발명에 따른 '주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체'를 상세하게 설명한다. 설명하는 실시 예들은 본 발명의 기술 사상을 당업자가 용이하게 이해할 수 있도록 제공되는 것으로 이에 의해 본 발명이 한정되지 않는다. 또한, 첨부된 도면에 표현된 사항들은 본 발명의 실시 예들을 쉽게 설명하기 위해 도식화된 도면으로 실제로 구현되는 형태와 상이할 수 있다.
한편, 이하에서 표현되는 각 구성부는 본 발명을 구현하기 위한 예일 뿐이다. 따라서, 본 발명의 다른 구현에서는 본 발명의 사상 및 범위를 벗어나지 않는 범위에서 다른 구성부가 사용될 수 있다. 또한, 각 구성부는 순전히 하드웨어 또는 소프트웨어의 구성만으로 구현될 수도 있지만, 동일 기능을 수행하는 다양한 하드웨어 및 소프트웨어 구성들의 조합으로 구현될 수도 있다. 또한, 하나의 하드웨어 또는 소프트웨어에 의해 둘 이상의 구성부들이 함께 구현될 수도 있다.
또한, 어떤 구성요소들을 '포함'한다는 표현은, '개방형'의 표현으로서 해당 구성요소들이 존재하는 것을 단순히 지칭할 뿐이며, 추가적인 구성요소들을 배제하는 것으로 이해되어서는 안 된다.
도 1은 본 발명의 실시예에 따른 주석기반의 의사코드를 이용한 프로그램 변환을 위한 컴퓨터 시스템을 나타낸 도면, 도 2는 본 발명의 실시예에 따른 범용 프로그래밍 언어로 작성된 코드에 주석으로 의사코드를 삽입하여 병렬 프로그래밍 언로 작성된 코드로 변환하는 방법을 설명하기 위한 프로그램 예시이다.
도 1을 참조하면, 주석기반의 의사코드를 이용한 프로그램 변환을 위한 컴퓨터 시스템은 하나 이상의 프로세서 패키지(도시되지 않음) 내에 수용된 하나 이상의 처리장치(processing element(PE), 102) 및 메모리(104)를 갖는 호스트(101), 0개 이상의 입출력 장치(106), 0개 이상의 디스플레이 장치(108), 0개 이상의 주변 장치(110) 및 0개 이상의 네트워크 장치(112), 하나 이상의 데이터 병렬(DP) 컴퓨트 노드(121)를 갖는 컴퓨트 엔진(120)을 포함하고, 각각의 데이터 병렬 컴퓨트 노드(121)는 하나 이상의 처리장치(PE)(122) 및 DP 실행 파일(138)을 저장하는 메모리(124)를 포함한다.
호스트(101), 입출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 네트워크 장치(112) 및 컴퓨트 엔진(120)은 임의의 적절한 유형, 개수 및 구성의 제어기, 버스(bus), 인터페이스 및/또는 기타 유선 또는 무선 접속들을 포함하는 한 세트의 상호접속(114)을 이용하여 통신한다.
컴퓨터 시스템(100)은 범용 또는 특수 목적을 위해 구성된 처리 장치로, 예를 들면, 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 스마트폰, 개인용 휴대 단말기(PDA), 이동 전화 및 오디오/비디오 장치 등을 포함할 수 있다.
컴퓨터 시스템(100)의 구성요소들(즉, 호스트(101), 입출력 장치들(106), 디스플레이 장치들(108), 주변 장치들(110), 네트워크 장치들(112), 상호접속들(114) 및 컴퓨트 엔진(120))은 공동 하우징(도시되지 않음) 내에 또는 임의의 적절한 개수의 개별 하우징(도시되지 않음) 내에 포함될 수 있다.
호스트(10)는 범용 프로그래밍 언어로 작성된 코드를 분석하여, 주석으로 표현되는 의사코드가 존재하는 경우, 그 의사코드가 영역상태변수인지 또는 병렬화 변수인지를 확인한다. 여기서, 의사코드는 영역상태변수와 병렬화 변수(PV)를 포함한다. 영역상태변수는 지역 또는 전역 변수 선언 영역을 지정하는 용도이다. 영역상태변수에 의해 지정된 변수는 병렬화 변수에 의한 영역에서 사용된다. 만약, 병렬화 변수에 의한 영역에서 영역상태변수에서 지정된 변수가 아닌 다른 변수가 사용된 경우, 그 다른 변수는 커널 함수내에서만 사용되는 지역변수로 간주한다. 변수 영역 지정에 사용하는 의사명령어로는 예컨대, CONST, INPUT, OUTPUT 등이 있다. CONST와 INPUT 영역은 PV영역에서 사용하는 읽기전용 변수만 모아놓은 것인데, CONST영역은 한번 초기화하면 프로그램이 마칠때까지 변동이 없는 특성을 가지는 공간이고, INPUT 영역은 PV영역 진입 직전 병렬 계산에 필요한 정보를 세팅할 수 있다. 만약 PV영역을 1회만 실행한다면 INPUT은 CONST와 차이가 없다. OUTPUT영역은 실행결과를 돌려주기 위한 용도이며, 일반적으로 PV(변수명)으로 명시한 병렬화 변수의 크기만큼 배열형식으로 준비한다.
변수 영역 내에는 기본 자료형 변수나 다차원 배열, 명시적으로 정의한 구조체로 선언된 변수가 올 수 있다.
병렬화 변수는 병렬화 대상이 되는 루프문을 지정하는 의사명령어이다. 예를 들어, 병렬화 변수가 PV(변수명)인 경우, PV 의사명령은 FOR나 WHILE등의 루프문 앞에 오게 되고, 이때 PV()에 지정된 변수명으로 병렬화하므로 변환된 GPU코드에서는 루프를 돌지 않고 루프크기만큼 동시에 실행한다. 그러므로 반복문 내의 코드는 이전 반복문에서 발생한 결과를 사용하는 의존성이 없어야 한다.
여기에서는 의사코드를 CONST, INPUT, OUTPUT, PV(변수명)로 하여 설명하였으나, 철자를 다르게 정의해서 사용할 수 있다. 또한, 의사코드를 범위(영역)를 지정하는 형식으로 정의해서 사용할 수 있다. 즉, 각 의사코드에 의해 지정된 영역의 시작과 끝을 알리는 표시를 하는 형식으로 의사코드를 정의할 수 있다.
호스트(101)는 의사코드가 영역상태변수인 경우, 영역상태변수 영역에 속하는 코드를 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하고, 병렬화 변수인 경우, 병렬화 변수 영역에 속하는 코드를 병렬 프로그래밍 언어를 사용하여 커널함수로 변환한다. 또한, 호스트(10)는 의사코드가 존재하지 않은 영역에 속하는 코드의 경우 병렬 프로그래밍 언어로 변환한다. 여기서, 병렬 프로그래밍 언어는 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성되는 언어일 수 있다. 그런 후, 호스트(10)는 병렬 프로그래밍 언어로 변환된 코드의 커널함수를 데이터 병렬 컴퓨트 노드를 사용하여 실행되도록 하고, 그 결과를 수신한다. 이때, 데이터 병렬 컴퓨트 노드는 커널함수에 의해 동일한 연산을 동시에 수행하게 된다.
이러한 호스트(101)는 적어도 하나 이상의 처리장치(102), 메모리(104)를 포함한다.
호스트(101)의 처리장치(102)는 각 메모리(104)에 저장된 명령어(즉, 소프트웨어)를 실행하도록 구성되는 실행 하드웨어를 형성할 수 있다. 각각의 프로세서 패키지 내의 처리장치(102)는 동일한 또는 상이한 아키텍처들 및/또는 명령어 세트들을 가질 수 있다. 예를 들어, 처리장치(102)는 순차(in-order) 실행 엘리먼트, 슈퍼스칼라(superscalar) 실행 요소, 및 데이터 병렬 실행 요소(예를 들어, GPU 실행 요소)의 임의의 조합을 포함할 수 있다. 각각의 처리장치(102)는 메모리(104)에 저장된 명령어들에 액세스하여 실행하도록 구성된다. 명령어들은 기본 입출력 시스템(BIOS) 또는 펌웨어(도시되지 않음), 운영 체제(OS)(132), 코드(10), 컴파일러(134), GP 실행 파일(136) 및 DP 실행 파일(138)을 포함할 수 있다. 각각의 처리장치(102)는 입출력 장치들(106), 디스플레이 장치(108), 주변 장치들(110), 네트워크 장치들(112) 및/또는 컴퓨트 엔진(120)으로부터 수신된 정보와 연계하여 또는 그에 응답하여 명령어들을 실행할 수 있다.
호스트(101)는 OS(132)를 부팅 및 실행한다. OS(132)는 컴퓨터 시스템(100)의 컴포넌트를 관리하고 프로그램으로 하여금 컴포넌트에 액세스하여 사용하는 것을 가능하게 하는 기능을 제공하기 위해 처리 장치들에 의해 실행될 수 있는 명령어들을 포함한다. OS(132)는 예컨대, 윈도 운영 체제, 컴퓨터 시스템(100)에서 사용하기에 적합한 다른 운영 체제 등을 포함할 수 있다.
컴퓨터 시스템(100)이 코드(10)를 컴파일하기 위해 컴파일러(134)를 실행할 때, 컴파일러(134)는 하나 이상의 실행 파일, 예를 들어 하나 이상의 GP 실행 파일(136) 및 하나 이상의 DP 실행 파일(138)을 생성한다. GP 실행 파일(136) 및/또는 DP 실행 파일(138)은 코드(10)의 모든 부분 또는 선택된 부분을 컴파일하기 위한 데이터 병렬 확장을 갖는 컴파일러(134)의 작동에 응답하여 생성된다. 작동은 예를 들어 컴퓨터 시스템(100)의 프로그래머 또는 다른 사용자, 컴퓨터 시스템(100) 내의 다른 코드, 또는 또 다른 컴퓨터 시스템(도시되지 않음) 내의 다른 코드에 의해 생성될 수 있다.
코드(10)는 하나 이상의 DP 컴퓨트 노드(121)에 의해 실행하기 위한 하나 이상의 실행 파일(예를 들어, DP 실행 파일(138))로 컴파일될 수 있는 범용 프로그래밍 언어(이하, GP 언어)로부터의 명령어들의 시퀀스를 포함한다.
GP 언어는 주석문을 표현할 수 있어야 하고, 루프명령(for,while등) 제공 및 명시적인 변수 선언이 가능해야 한다.
GP 언어는 프로그램이 상이한 부분들(즉, 모듈들)로 작성되는 것을 가능하게 할 수 있으며, 따라서 각각의 모듈은 컴퓨터 시스템에 의해 액세스될 수 있는 개별 파일들 또는 장소들에 저장될 수 있다. GP 언어는 하나 이상의 범용 프로세서들 및 하나 이상의 특수 목적 DP 컴퓨트 노드들을 포함하는 컴퓨팅 환경을 프로그래밍하기 위한 단일 언어를 제공한다. DP 컴퓨트 노드들은 통상적으로 그래픽 처리 장치들(GPU) 또는 범용 프로세서들의 SIMD 유닛들이지만, 일부 컴퓨팅 환경들에서는 범용 프로세서들의 스칼라 또는 벡터 실행 유닛들, 필드 프로그래머블 게이트 어레이들(FPGA) 또는 다른 적절한 장치들도 포함할 수 있다. 프로그래머는 GP 언어를 이용하여 범용 프로세서 및 DP 소스 코드 양자를 범용 프로세서들 및 DP 컴퓨트 노드들 각각에 의한 실행을 위해 코드(10) 내에 포함시키며, 범용 프로세서 및 DP 소스 코드의 실행을 조정할 수 있다. 코드(10)는 이 실시예에서 애플리케이션, 라이브러리 함수 또는 운영 체제 서비스와 같은 임의의 적절한 타입의 코드를 나타낼 수 있다.
GP 언어는 C 또는 C++와 같은 광범위하게 적응되는 범용 프로그래밍 언어를 데이터 병렬 특징들을 포함하도록 확장함으로써 형성될 수 있다. DP 특징들이 나타날 수 있는 범용 언어들의 다른 예들은 Java(TM), PHP, Visual Basic, Perl, Python(TM), C#, Ruby, Delphi, Fortran, VB, F#, OCaml, Haskell, Erlang, NESL, Chapel 및 JavaScript(TM)를 포함한다. GP 언어는 프로그램의 상이한 부분들이 상이한 모듈 내에 포함되게 하는 풍부한 링킹 능력(linking capability)을 포함할 수 있다. 데이터 병렬 특징은 데이터 병렬 연산이 범용 프로세서를 이용하는 것보다 더 빠르고 더 효율적으로 실행되는 것을 가능하게 하기 위해 DP 컴퓨트 노드의 특수 목적 아키텍처를 이용하는 프로그래밍 도구들을 제공한다. GP 언어는 프로그래머가 범용 프로세서들 및 DP 컴퓨트 노드에 대해 프로그래밍하는 것을 가능하게 하는 다른 적절한 범용 프로그래밍 언어일 수도 있다.
DP 언어는 데이터 병렬 연산들이 범용 프로세서들에 의해서보다 더 빠르고 더 효율적으로 실행되는 것을 가능하게 하기 위해 DP 최적 컴퓨트 노드들의 특수 목적 아키텍처를 이용하는 프로그래밍 도구들을 제공한다. DP 언어는 HLSL, GLSL, Cg, C, C++, NESL, Chapel, CUDA, OpenCL, Accelerator, Ct, PGI GPGPU Accelerator, CAPS GPGPU Accelerator, Brook+, CAL, APL, Fortran 90 (및 그 이상), Data Parallel C, DAPPLE 또는 APL과 같은 기존의 DP 프로그래밍 언어일 수 있다.
DP 컴퓨트 노드(121)는 데이터 병렬 컴퓨팅(즉, DP 프로그램 또는 알고리즘의 실행)을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 컴퓨터 리소스를 갖는다.
GP 언어로 작성된 코드에 주석으로 의사코드를 삽입하여 DP 언어로 작성된 코드로 변환하는 방법에 대해 도 2를 참조하여 설명하기로 한다.
도 2a와 같이 VBA로 작성된 코드에 의사코드를 지정하면 도 2b와 같다. 즉, 프로그래머가 도 2a와 같이 VBA 언어로 작성된 코드에 영역상태변수인 CONST(202), INPUT(204), OUTPUT(206), 병렬화 변수인 PV(j)(208)을 주석으로 추가하면, 도 2b와 같다. 도 2b와 같이 영역상태변수와 병렬화 변수가 삽입된 코드는 GPU에서 실행가능하도록 도 2c와 같이 GPU 기반의 C++로 변환될 수 있다. 즉, CONST(202) 영역에 속하는 코드는 struct 구조체의 멤버로 변환(212)되고, INPUT(204) 영역에 속하는 코드는 struct 구조체의 멤버로 변환(214)되며, OUTPUT(206) 영역에 속하는 코드는 struct 구조체의 멤버로 변환(216)된다. 병렬화 변수인 PV(j)(208)영역에 속하는 코드는 GPU 커널 함수(218)로 변환된다.
컴파일러(134)는 GP 실행 파일(136)을 하나 이상의 DP 실행 파일(138)로 변환한다. GP실행 파일들(136) 및/또는 DP 실행 파일들(138)은 코드(10)의 모든 또는 선택된 부분들을 컴파일하기 위한 데이터 병렬 확장들을 갖는 컴파일러(134)의 호출에 응답하여 생성된다. 호출은 예컨대 컴퓨터 시스템(100)의 프로그래머 또는 기타 사용자, 컴퓨터 시스템(100) 내의 다른 코드, 또는 다른 컴퓨터 시스템(도시되지 않음) 내의 다른 코드에 의해 이루어질 수 있다.
예를 들어, 컴파일러(134)는 도 2b에서 변수 영역에 속한 변수들을 도 2c와 같이 GPU C++로 변환하면서 struct 구조체의 멤버로 정의하고, 각 변수 선언은 구조체 변수의 선언으로 대체한다. 이후 이 변수들을 사용하는 모든 코드들은 구조체의 멤버로 사용되도록 변경된다. 이 방법을 통해 호스트(101)와 데이터 병렬 컴퓨트 노드(121)간 데이터 전송에 이 구조체를 사용하여 전송한다.
GP 실행 파일(136)은 하나 이상의 범용 처리장치(102)(예를 들어, 중앙 처리 장치(CPU))에서 실행하도록 의도된 프로그램을 나타낸다. GP 실행 파일(136)은 하나 이상의 범용 처리부(102)의 명령어 세트로부터의 저 레벨 명령어들을 포함한다.
DP 실행 파일(138)은 하나 이상의 데이터 병렬(DP) 컴퓨트 노드(121)에서 실행하도록 의도되고 최적화된 데이터 병렬 프로그램 또는 알고리즘(예를 들어, 쉐이더)을 나타낸다. 다른 실시예들에서, DP 실행 파일(138)은 하나 이상의 DP 컴퓨트 노드(121)의 명령어 세트로부터의 저 레벨 명령어를 포함하며, 저 레벨 명령어는 컴파일러(134)에 의해 삽입되었다. 따라서, GP 실행 파일(136)은 하나 이상의 범용 프로세서(예를 들어, CPU)에 의해 직접 실행될 수 있고, DP 실행 파일(138)은 하나 이상의 DP 컴퓨트 노드(121)에 의해 직접 실행되거나, DP 컴퓨트 노드(121)의 저 레벨 명령어들로 변환된 후에 하나 이상의 DP 컴퓨트 노드(121)에 의해 실행될 수 있다.
컴퓨터 시스템(100)은 하나 이상의 처리장치(102)를 이용하여 GP 실행 파일(136)을 실행할 수 있으며, 컴퓨터 시스템(100)은 하나 이상의 처리장치(122)를 이용하여 DP 실행 파일(138)을 실행할 수 있다.
메모리(104)는 명령어들 및 데이터를 저장하도록 구성된 임의의 적절한 타입, 수 및 구성의 휘발성 또는 비휘발성 저장 장치들을 포함한다. 메모리(104)의 저장 장치들은 OS(132), 코드(10), 컴파일러(134), GP 실행 파일(136) 및 DP 실행 파일(138)을 포함하는 컴퓨터 실행 가능 명령어들(즉, 소프트웨어)을 저장하는 컴퓨터 판독 가능 저장 매체들을 나타낸다. 명령어들은 본 명세서에서 설명되는 바와 같은 OS(132), 코드(10), 컴파일러(134), GP 실행 파일(136) 및 DP 실행 파일(138)의 기능들 및 방법들을 수행하기 위해 컴퓨터 시스템(100)에 의해 실행될 수 있다.
메모리(104)는 처리장치들(102), 입출력 장치들(106), 디스플레이 장치들(108), 주변 장치들(110), 네트워크 장치들(112) 및 컴퓨트 엔진(120)으로부터 수신된 명령어들 및 데이터를 저장한다. 메모리는 저장된 명령어들 및 데이터를 처리장치들(102), 입출력 장치들(106), 디스플레이 장치들(108), 주변 장치들(110), 네트워크 장치들(112) 및 컴퓨트 엔진(120)에 제공한다. 메모리(104)내의 저장 장치들의 예는 하드 디스크 드라이브들, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리 드라이브들 및 카드들, 및 CD 및 DVD와 같은 자기 및 광 디스크들을 포함한다.
입출력 장치(106)는 사용자로부터의 명령어들 또는 데이터를 컴퓨터 시스템(100)에 입력하고 컴퓨터 시스템(100)으로부터의 명령어들 또는 데이터를 사용자에게로 출력하도록 구성된 임의의 적절한 타입, 수 및 구성의 입출력 장치들을 포함한다. 입출력 장치(106)의 예는 키보드, 마우스, 터치패드, 터치스크린, 버튼들, 다이얼들, 노브들 및 스위치들을 포함한다.
디스플레이 장치(108)는 텍스트 및/또는 그래픽 정보를 컴퓨터 시스템(100)의 사용자에게 출력하도록 구성된 임의의 적절한 타입, 수 및 구성의 디스플레이 장치들을 포함한다. 디스플레이 장치(108)의 예는 모니터, 디스플레이 스크린, 프로젝터 등을 포함할 수 있다.
주변 장치(110)는 일반 또는 특수 처리 기능들을 수행하기 위해 컴퓨터 시스템(100) 내의 하나 이상의 다른 구성요소와 함께 동작하도록 구성된 임의의 적절한 타입, 수 및 구성의 주변 장치들을 포함한다.
네트워크 장치(112)는 컴퓨터 시스템(100)으로 하여금 하나 이상의 네트워크(도시되지 않음)를 통해 통신하는 것을 가능하게 하도록 구성된 임의의 적절한 타입, 수 및 구성의 네트워크 장치들을 포함한다. 네트워크 장치(112)는 정보가 컴퓨터 시스템(100)에 의해 네트워크로 전송되거나 네트워크로부터 컴퓨터 시스템(100)에 의해 수신되게 하는 임의의 적절한 네트워킹 프로토콜 및/또는 구성에 따라 동작할 수 있다.
컴퓨트 엔진(120)은 DP 실행 파일(138)을 실행하도록 구성된 것으로, 하나 이상의 DP 컴퓨트 노드(121)를 포함한다. 각각의 컴퓨트 노드(121)는 하나 이상의 처리장치(122) 및 DP 실행 파일(138)을 저장하는 메모리(124)를 포함한다.
DP 컴퓨트 노드(121)의 처리장치(122)는 DP 실행 파일(138)을 실행하고, DP 실행 파일(138)에 의해 생성된 결과들을 메모리(124)에 저장한다.
데이터 병렬 컴퓨팅(즉, DP 프로그램들 또는 알고리즘들의 실행)을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 계산 자원을 갖는 컴퓨트 노드(121)는 DP 컴퓨트 노드(121)로 지칭된다. DP 컴퓨트 노드(121)는 예를 들면, 한 세트의 처리장치(122)가 하나 이상의 GPU를 포함하는 노드, 한 세트의 처리장치(122)가 범용 프로세서 패키지 내에 한 세트의 SIMD 유닛을 포함하는 노드 등을 포함할 수 있다.
호스트(101)는 DP 실행 파일(138)의 실행을 위해 상호접속(114)를 이용하여 DP 실행 파일(138)을 컴퓨트 노드(121)에 제공하고, DP 실행 파일(138)에 의해 생성된 결과들을 상호접속(114)을 이용하여 수신하도록 구성된 호스트 컴퓨트 노드를 형성한다. 호스트 컴퓨트 노드는 메모리(104)를 공유하는 범용 처리장치(102))의 모음을 포함한다. 호스트 컴퓨트 노드는 대칭적인 다중처리 아키텍처(symmetric multiprocessing architecture(SMP))를 이용하여 구성될 수 있고, 또한 예를 들어 비-균일 메모리 접근(nonuniform memory access(NUMA)) 아키텍처를 사용하여 메모리(104)의 메모리 집약성(memory locality)을 최대로 하도록 구성될 수 있다.
호스트 컴퓨트 노드의 OS(132)는 DP 실행 파일(138)이 DP 컴퓨트 노드(121)에 의해 실행되게 하도록 DP 호출 사이트를 실행하도록 구성된다. 메모리(124)가 메모리(104)로부터 분리되어 있는 경우, 호스트 컴퓨트 노드는 DP 실행 파일(138)이 메모리(104)로부터 메모리(124)로 복사되게 한다. 메모리(104)가 메모리(124)를 포함하는 경우, 호스트 컴퓨트 노드는 DP 실행 파일(138)의 복사본을 메모리(124)로서의 메모리(104) 내에 지정할 수 있거나, DP 실행 파일(138)을 메모리(104)의 일부분으로부터 메모리(124)를 형성하는 메모리(104)의 또 다른 부분으로 복사할 수 있다. 컴퓨트 노드(121)와 호스트 컴퓨트 노드 사이의 복사 프로세스는 비동기로 지정되지 않는 한 동기점(synchronization point)일 수 있다.
호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 서로 독립적으로 동시에 코드를 실행할 수 있다. 호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 노드 계산을 조정하도록 동기점에서 상호작용할 수 있다.
일 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 그래픽 처리 장치(graphic processing unit(GPU))가 PE(122) 및 메모리(104)와 별개인 메모리를 포함하는 그래픽 카드를 나타낸다. 이러한 실시예에서, 그래픽 카드(도시되지 않음)의 드라이버가 DP 실행 파일(138)의 바이트 코드 또는 소정의 다른 중간 표현(IL)을 GPU들의 PE(122)에 의해 실행하기 위한 GPU들의 명령어 세트로 변환할 수 있다.
도 3은 본 발명의 실시예에 따른 호스트가 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법을 나타낸 도면, 도 4는 본 발명의 실시예에 따른 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법을 설명하기 위한 프로그램 예시이다.
도 3을 참조하면, 호스트는 범용 프로그래밍 언어로 작성된 코드가 입력되면(S302), 입력된 코드를 분석하여(S304), 주석으로 표현되는 의사코드가 존재하는지의 여부를 판단한다(S306).
S306의 판단결과 의사코드가 존재하는 경우, 호스트는 의사코드를 근거로 변수를 설정한다(S308). 즉, 호스트는 영역상태변수(예컨대, CONST, INPUT, OUTPUT 등임)와 병렬화 변수(PV)를 설정한다.
그런 다음, 호스트는 영역상태변수 영역에 속하는 코드의 경우 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성된 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하고, 병렬화 변수 영역에 속하는 코드의 경우 병렬 프로그래밍 언어를 사용하여 커널함수로 변환한다(S310).
만약, S306의 판단결과 의사코드가 존재하지 않으면, 호스트는 해당 코드를 병렬 프로그래밍 언어로 변환한다(S312).
그런 후, 호스트는 S310과 S312에서 변환된 코드를 결합하여 병렬 프로그래밍 언어로 작성된 코드를 생성한다(S314).
예를 들어, 도 4를 참조하면, (a)와 같은 프로그램이 입력된 경우, 호스트는 INPUT 변수영역(410a)에 속한 변수들은 (b)의 (420b)와 같이 GPU C++로 변환하면서 struct 구조체의 멤버로 정의하고, 변수 선언은 INPUT 구조체 변수의 선언으로 대체한다. 또한, 호스트는 OUTPUT 변수영역(420a)에 속한 변수들은 (b)의 (420b)와 같이 GPU C++로 변환하면서 struct 구조체의 멤버로 정의하고, 변수 선언은 OUTPUT 구조체 변수의 선언으로 대체한다. 호스트는 의사코드로 정의되지 않은 영역(430a)에 속한 변수들은 (b)의 (430b)와 같이 GPU C++로 변환한다. 또한, 호스트는 PV 변수영역(410a)에 속한 변수들은 (b)의 (440b)와 같이 GPU C++를 사용하여 커널함수로 변환한다.
도 5는 본 발명의 실시예에 따른 범용 프로그래밍 언어로 작성된 코드를 병렬 프로그래밍 언어로 작성된 코드로 변환하는 방법을 나타낸 도면이다.
도 5를 참조하면, 호스트는 범용 프로그래밍 언어로 작성된 코드에서 한 문장이 입력되면(S502), 커널(KERNEL) 함수인지를 판단한다(S504).
S504의 판단결과 커널 함수이면, 호스트는 병렬화 변수를 사용하는 루프문이 종료되었는지의 여부를 판단한다(S506).
S506의 판단결과 루프문이 종료되었으면, 호스트는 병렬 프로그래밍 언어를 사용한 커널함수 변환을 마무리하고(S508), 루프문이 종료되지 않았으면, 해당 코드를 병렬 프로그래밍 언어를 사용한 커널 함수로 변환한다(S510).
만약, S504의 판단결과 커널 함수가 출력중이 아니면, 호스트는 영역상태변수 영역에 해당하는지의 여부를 판단한다(S512). 즉, 호스트는 CONST, INPUT, OUTPUT 등의 영역상태변수에 의해 정의되는 영역에 해당하는 문장인지를 판단한다.
S512의 판단결과 영역상태변수 영역에 해당하면, 호스트는 해당 코드를 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환한다(S514).
만약, S512의 판단결과 영역상태변수 영역에 해당하지 않으면, 호스트는 병렬화 변수 영역에 해당하는지의 여부를 판단한다(S516).
S516의 판단결과, 병렬화 변수 영역에 해당하면, 호스트는 커널함수로의 변환을 준비하고(S518), S504를 수행한다.
만약, S516의 판단결과 병렬화 변수 영역에 해당하지 않으면, 호스트는 해당 코드를 병렬 프로그래밍 언어로 변환한다(S520).
이러한 주석기반의 의사코드를 이용한 프로그램 변환 방법은 프로그램으로 작성 가능하며, 프로그램을 구성하는 코드들 및 코드 세그먼트들은 당해 분야의 프로그래머에 의하여 용이하게 추론될 수 있다. 또한, 주석기반의 의사코드를 이용한 프로그램 변환 방법에 관한 프로그램은 전자장치가 읽을 수 있는 정보저장매체(Readable Media)에 저장되고, 전자장치에 의하여 읽혀지고 실행될 수 있다.
이와 같이, 본 발명이 속하는 기술분야의 당업자는 본 발명이 그 기술적 사상이나 필수적 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로서 이해해야만 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 등가개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100 : 컴퓨터 시스템 101 : 호스트
120 : 컴퓨트 엔진

Claims (3)

  1. 컴퓨터 시스템이 주석기반의 의사코드를 이용하여 프로그램을 변환하는 방법에 있어서,
    범용 프로그래밍 언어로 작성된 코드를 분석하여 주석으로 표현되는 의사코드를 확인하는 단계;
    의사코드가 영역상태변수 인지 병렬화 대상이 되는 루프문을 지정하는 의사 명령어인 병렬화 변수인지 확인하는 단계;
    의사코드 영역에 속하는 코드의 경우 하나 이상의 데이터 병렬 컴퓨트 노드 상에서 실행하도록 구성된 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하거나, 커널함수로 변환하고,
    나머지 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어의 호스트 코드로 변환하여, 병렬 프로그래밍 언어로 작성된 코드를 생성하는 단계; 및
    상기 생성된 코드의 커널함수를 상기 데이터 병렬 컴퓨트 노드를 사용하여 동시에 실행하는 단계;를 포함하되,
    상기 의사코드는 영역상태변수 또는 병렬화변수를 포함하고,
    영역상태변수 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어를 사용하여 struct 구조체의 멤버로 변환하고, 병렬화 변수 영역에 속하는 코드의 경우 상기 병렬 프로그래밍 언어를 사용하여 커널함수로 변환하고, 의사코드가 존재하지 않은 영역에 속하는 코드의 경우 병렬 프로그래밍 언어로 변환하는 것을 특징으로 하고,
    영역상태변수는 CONST, INPUT, OUTPUT를 포함하고,
    CONST영역은 한번 초기화하면 프로그램이 마칠때까지 변동이 없고, INPUT 영역은 PV영역 진입 직전 병렬 계산에 필요한 정보를 세팅할 수 있고, OUTPUT영역은 실행결과를 돌려주는 주석기반의 의사코드를 이용한 프로그램 변환 방법.


  2. 삭제
  3. 삭제
KR1020140155926A 2014-11-11 2014-11-11 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 KR101632027B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020140155926A KR101632027B1 (ko) 2014-11-11 2014-11-11 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
PCT/KR2015/011981 WO2016076583A1 (ko) 2014-11-11 2015-11-09 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
US15/524,248 US20170329587A1 (en) 2014-11-11 2015-11-09 Program conversion method using comment-based pseudo-codes and computerreadable recording medium, onto which program is recorded, for implementing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140155926A KR101632027B1 (ko) 2014-11-11 2014-11-11 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체

Publications (2)

Publication Number Publication Date
KR20140139465A KR20140139465A (ko) 2014-12-05
KR101632027B1 true KR101632027B1 (ko) 2016-06-20

Family

ID=52459455

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140155926A KR101632027B1 (ko) 2014-11-11 2014-11-11 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체

Country Status (3)

Country Link
US (1) US20170329587A1 (ko)
KR (1) KR101632027B1 (ko)
WO (1) WO2016076583A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101866822B1 (ko) * 2015-12-16 2018-06-12 유환수 게임 서버의 운용 에스펙트 생성 방법
CN113485798B (zh) * 2021-06-16 2023-10-31 曙光信息产业(北京)有限公司 核函数生成方法、装置、设备以及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002527814A (ja) 1998-10-13 2002-08-27 コデイジェン テクノロジーズ コーポレイション コンポーネント・ベース型ソース・コード・ジェネレータ
JP2004252807A (ja) * 2003-02-21 2004-09-09 Matsushita Electric Ind Co Ltd ソフトウェア開発支援装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101117430B1 (ko) * 2008-04-09 2012-02-29 엔비디아 코포레이션 범용 프로세서에 의해 실행하기 위한 어플리케이션 프로그램의 리타게팅
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics
KR101219535B1 (ko) * 2011-04-28 2013-01-10 슈어소프트테크주식회사 코드 컨버팅 장치, 방법 및 컴퓨터 판독 가능한 기록 매체

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002527814A (ja) 1998-10-13 2002-08-27 コデイジェン テクノロジーズ コーポレイション コンポーネント・ベース型ソース・コード・ジェネレータ
JP2004252807A (ja) * 2003-02-21 2004-09-09 Matsushita Electric Ind Co Ltd ソフトウェア開発支援装置

Also Published As

Publication number Publication date
KR20140139465A (ko) 2014-12-05
WO2016076583A1 (ko) 2016-05-19
US20170329587A1 (en) 2017-11-16

Similar Documents

Publication Publication Date Title
KR101962484B1 (ko) 확장 가능한 데이터 병렬 시맨틱스
US8756590B2 (en) Binding data parallel device source code
US8645932B2 (en) Control flow analysis methods and computing devices for converting COBOL-sourced programs to object-oriented program structures
JP7324831B2 (ja) ディープラーニングフレームワークにおける演算子の展開方法、展開装置及び電子機器
KR101842307B1 (ko) 데이터 병렬 코드에서의 맵 변환
US9817643B2 (en) Incremental interprocedural dataflow analysis during compilation
US10180825B2 (en) System and method for using ubershader variants without preprocessing macros
KR20140001864A (ko) 타일 통신 연산자
KR102156371B1 (ko) 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치
US8935686B2 (en) Error-code and exception-based function dispatch tables
US20090328016A1 (en) Generalized expression trees
US20160371061A1 (en) Read-only communication operator
Molitorisz et al. Automatic parallelization using autofutures
Acosta et al. Towards a Unified Heterogeneous Development Model in Android TM
US8713039B2 (en) Co-map communication operator
KR101632027B1 (ko) 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
US9229698B2 (en) Method and apparatus for compiler processing for a function marked with multiple execution spaces
Acosta et al. Performance analysis of paralldroid generated programs
Liu et al. Subgraph isomorphism based intrinsic function reduction in decompilation
Hsu Accelerating information experts through compiler design
Arora et al. A Domain-Specific Language for High-Level Parallelization
Huang et al. PIR: a domain specific language for multimedia retrieval
Banerjee Dragon2011: OpenUH-based Scalable Visualization Tool for Program Analysis

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
N231 Notification of change of applicant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 4