KR101157596B1 - 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법 - Google Patents

개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법 Download PDF

Info

Publication number
KR101157596B1
KR101157596B1 KR1020100134898A KR20100134898A KR101157596B1 KR 101157596 B1 KR101157596 B1 KR 101157596B1 KR 1020100134898 A KR1020100134898 A KR 1020100134898A KR 20100134898 A KR20100134898 A KR 20100134898A KR 101157596 B1 KR101157596 B1 KR 101157596B1
Authority
KR
South Korea
Prior art keywords
code
kernel
memory
work
sampling
Prior art date
Application number
KR1020100134898A
Other languages
English (en)
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 KR1020100134898A priority Critical patent/KR101157596B1/ko
Application granted granted Critical
Publication of KR101157596B1 publication Critical patent/KR101157596B1/ko

Links

Images

Classifications

    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0638Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • 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/18Handling requests for interconnection or transfer for access to memory bus based on priority control
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory

Abstract

개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL) 및 메모리 접근영역 분석방법이 개시된다. 본 발명의 일 실시예에 따른 메모리 접근영역 분석장치는 OpenCL에서 실행되는 프로그램의 커널 코드를 샘플링 코드로 변환하는 코드 변환부와, 변환된 샘플링 코드를 실행하여 커널 코드가 접근하는 메모리 영역을 파악하는 메모리 분석부를 포함한다.

Description

개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법 {Apparatus and method for analyzing memory access area in OpenCL}
본 발명의 일 양상은 데이터 병렬 프로그램을 실행하기 위한 이종 시스템에 관한 것으로, 보다 상세하게는 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL) 기술에 관한 것이다.
멀티코어(multicore) 또는 매니코어(manycore)가 발전하고 있다. 또한 데이터 병렬 프로그램(Data Parallel program)을 실행하기 위한 이종 시스템(Heterogeneous system)이 고성능 컴퓨팅(High Performance Computing) 분야에서 관심을 받고 있다. 이러한 요구에 이종 시스템에서 데이터 병렬 프로그램을 동작시키기 위한 표준인 OpenCL(Open Computing Language)이 Khronos 그룹에서 제안되었다. OpenCL은 개방형 범용 병렬 컴퓨팅 프레임워크이다. 여러 CPU, GPU 및 기타 프로세서 등으로 구성된 혼성 플랫폼 상에서 구동되어야 할 데이터 및 태스크 병렬성을 갖는 프로그램을 작성할 수 있게 해 주는 프레임워크이다.
일 양상에 따라, OpenCL 커널 프로그램에서 해당 커널에서 접근하는 메모리 영역을 미리 알아낼 수 있는 기술을 제안한다.
일 양상에 따른 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치는, OpenCL에서 실행되는 프로그램의 커널 코드를 샘플링 코드로 변환하는 코드 변환부와, 변환된 샘플링 코드를 실행하여 커널 코드가 접근하는 메모리 영역을 파악하는 메모리 분석부를 포함한다.
다른 양상에 따른 OpenCL에서의 메모리 접근영역 분석장치의 메모리 접근영역 분석방법은, OpenCL에서 실행되는 프로그램의 커널 코드를 샘플링 코드로 변환하는 단계와, 변환된 샘플링 코드를 실행하여 커널 코드가 접근하는 메모리 영역을 파악하는 단계를 포함한다.
일 실시예에 따르면, OpenCL 커널 프로그램에서 런타임 시에 샘플링을 이용하여 해당 커널에서 접근하는 메모리 영역을 오버헤드를 최소화하면서 파악할 수 있다. 즉 OpenCL 커널이 주어졌을 때, 자동으로 커널이 접근하는 메모리 영역을 알아냄으로써, 자동으로 이종 플랫폼(CPU+GPU, Multiple GPU, 클러스터 등)에서 OpenCL 프로그램을 실행시킬 수 있는 도구로 사용될 수 있다. 이에 따라 이종 시스템의 종류 또는 교체 여부와는 상관없이 바로 프로그램을 실행시킬 수 있다.
도 1은 본 발명이 적용되는 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)의 플랫폼 모델을 도시한 참조도,
도 2는 본 발명의 일 실시예에 따른 OpenCL의 메모리 접근영역 분석장치의 구성도,
도 3은 본 발명의 일 실시예에 따른 프로그램 슬라이싱 방식을 이용하여 코드를 변환하는 프로세스를 설명하기 위한 참조도,
도 4a 내지 도 4c는 본 발명의 일 실시예에 따른 샘플링 코드를 소정의 워크 아이템(work-item)에서 실행시켜 커널에서 접근하는 메모리 영역을 파악하는 프로세스에서의 소정의 워크 아이템 선정 프로세스를 설명하기 위한 참조도,
도 5는 본 발명의 일 실시예에 따라 이종 시스템이 접근하는 메모리 영역 파악을 개념적으로 보여주기 위한 참조도,
도 6은 본 발명의 일 실시예에 따른 메모리 접근영역 분석방법을 도시한 흐름도이다.
이하에서는 첨부한 도면을 참조하여 본 발명의 실시예들을 상세히 설명한다. 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1은 본 발명이 적용되는 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)의 플랫폼 모델을 도시한 참조도이다.
개방형 범용 병렬 컴퓨팅 프레임워크(Open Computing Language:이하 OpenCL이라 칭함)는 Khronos 그룹에서 제안한 이종 플랫폼(Heterogeneous platform)을 위한 개방형 병렬 컴퓨팅 표준이다. 즉, 여러 CPU, GPU 및 기타 프로세서 등으로 구성된 혼성 플랫폼 상에서 구동되어야 할 데이터 및 태스크 병렬성을 갖는 프로그램을 작성할 수 있게 해 주는 프레임워크이다. OpenCL은 임무 기반 병렬 또는 데이터 기반 병렬 컴퓨팅을 제공한다.
이하 본 발명의 OpenCL에 대한 이해를 돕기 위해서 용어를 정의한다.
OpenCL 애플리케이션(Application)은 호스트 프로그램(Host Program)과 커널 프로그램(Kernel Program)의 조합(combination)이다. 커널 프로그램(Kernel Program)은 OpenCL 디바이스에서 동작하는 데이터 병렬 프로그램(Data-Parallel program)이다. 호스트 프로그램(Host Program)은 커널 프로그램을 OpenCL 디바이스에서 동작시키기 위한 관리 프로그램(Management Program)이다. OpenCL 디바이스는 커널 프로그램이 동작하는 곳으로서 예를 들면 GPU, 멀티코어 CPU, CellBE, DSP 등이다. 디바이스 메모리(Device Memory)는 OpenCL 디바이스 내의 메모리로서 예를 들면, CPU에서는 Main Memory, GPU에서는 Graphic Memory이다.
데이터 병렬(Data-Parallel) 또는 SPMD(Single Program Multiple Data)는 하나의 커널 프로그램이 여러 개의 프로세싱 엘리먼트(Processing Elements) 위에서 동시에 동작하는 모델이다. 프로세싱 엘리먼트는 가상의 스칼라 프로세서이다. 워크 아이템(Work-item)은 OpenCL 디바이스에서 커널을 병렬로 실행할 때, 그 중 한 개의 실행 객체이다. 워크 그룹(Work-group)은 work-item의 집합(collection)이다. NDRange는 커널 프로그램의 인덱스 스페이스(index space)이다.
도 1을 참조하면, OpenCL 플랫폼은 호스트(100)와 OpenCL 디바이스(110)로 구성된다. OpenCL 디바이스(110)는 복수 개일 수 있다. OpenCL 디바이스는 연산 유닛(Compute unit)(112)을 포함한다. 연산 유닛(112)은 복수 개일 수 있다. 연산 유닛(112)에서 work-group이 실행되고, 연산 유닛(112)은 프로세싱 엘리먼트(Processing Element)(114)를 포함한다. 프로세싱 엘리먼트(114)는 복수 개일 수 있다.
OpenCL 프로그램을 복수 개의 이종 시스템(CPU+GPU, Multiple GPUs, 클러스터)에서 동작시키기 위해서는 중앙 관리 시스템이 이종 시스템 각각에 각 시스템에서 사용하는 메모리를 전달해줘야 한다. 본 발명은 각 시스템에서 사용하는 메모리 영역을 자동으로 분석하는 기술이다. 특히 본 발명은 프로그램 실행 이전인 런타임(run time) 시에 경량 샘플링 방법을 이용하여 커널이 접근하는 메모리 영역을 자동으로 찾는 기술이다. 본 발명은 OpenCL 프레임워크가 동작하는 모든 시스템 예를 들면 멀티코어 CPU, GPU, Cell-BE, DSP 및 클러스터 등에 적용 가능하다. 또한 모든 OpenCL 프로그램에 적용 가능하다.
도 2는 본 발명의 일 실시예에 따른 OpenCL의 메모리 접근영역 분석장치(2)의 구성도이다.
도 2를 참조하면, 메모리 접근영역 분석장치(2)는 코드 변환부(200) 및 메모리 분석부(210)를 포함한다.
코드 변환부(200)는 프로그램 런타임 시에 컴파일러(Source-to-Source Translator)를 통해 커널 코드(kernel code)를 샘플링 코드(sampling code)로 변환한다. 일 실시예에 따르면 코드 변환부(200)는 코드 변환시에 프로그램 슬라이싱(Program slicing) 방식을 이용할 수 있다. 프로그램 슬라이싱 방식은 프로그램의 특정 지점에 나타난 변수의 값에 영향을 미치는 문장들을 프로그램으로부터 추출하는 프로그램 분해 방식 중의 하나이다. 프로그램 슬라이싱을 이용한 샘플링 코드 생성 프로세스에 대해서는 도 3에서 상세히 후술한다.
메모리 분석부(210)는 코드 변환부(200)에서 변환된 샘플링 코드를 프로그램 런타임 시에 실행하여 커널이 접근하는 메모리 영역을 커널 프로그램 실행 이전에 파악한다. 이때 메모리 분석부(210)는 소정의 조건을 만족하는 실행 객체에서 변환된 샘플링 코드를 실행시켜서 커널이 접근하는 메모리 영역을 파악할 수 있다. 실행 객체에 대해서는 도 4a 내지 및 도 4c에서 상세히 후술한다.
도 3은 본 발명의 일 실시예에 따른 프로그램 슬라이싱 방식을 이용하여 코드를 변환하는 프로세스를 설명하기 위한 참조도이다.
도 2 및 도 3을 참조하면, 코드 변환부(200)는 프로그램 런타임 시에 커널 코드(300)를 샘플링 코드(310)로 변환한다.
프로그램 슬라이싱은 프로그램의 특정 지점에 나타난 변수의 값에 영향을 미치는 문장들을 프로그램으로부터 추출하는 프로그램 분해 기법 중의 하나이다. 즉 슬라이싱 기준(Slicing Criterion)인 <i,V>이 주어지면 문장위치 i에서 변수 V에 영향을 줄 수 있는 문장들인 프로그램 슬라이스(Program Slice)를 찾아내는 분해 기법이다. 프로그램 슬라이스는 슬라이싱 기준 <i,V>이 주어졌을 때 문장 i를 수행하기까지 V에 있는 변수들에게 영향을 주었던 문장들을 추출하여 생성된 것이다. 슬라이싱 기준 <i,V>는 프로그램의 문장번호 i와 프로그램에 나타나는 변수들의 부분 집합 V의 쌍으로 주어진다.
코드 변환부(200)는 도 3에 도시된 바와 같이 디바이스 메모리(__global로 표현)에 접근하는 모든 배열(array) 코드를 다음과 같이 변환한다.
읽기 : GLOBAL_MEM_READ_타입(array 접근 주소)
쓰기 : GLOBAL_MEM_WRITE_타입(array 접근 주소)
일 양상에 따르면 코드 변환부(200)는 디바이스 메모리에 접근하는 배열의 인덱스를 탐색하면서 일정 조건을 만족하는지를 검사하여 검사 조건에 해당하는 슬라이스로 구성된 샘플링 코드를 생성한다. 검사 조건은 변수(variable)가 글로벌 아이디(global ID), 그룹 아이디(work-group ID) 및 로컬 아이디(local ID)로 구성된 어파인 폼(affine form)을 만족하는가에 대한 제1 조건과, 슬라이싱 기법을 이용하여 생성된 슬라이스(slice)에 조건문(conditional branch)이 들어가 있지 않은지에 대한 제2 조건을 포함한다. 배열의 인덱스는 다음과 같다.
f( l x , l y , l z , w x , w y , w z ) = a 1 l x + a 2 l y + a 3 l z + a 4 w x + a 5 w y + a 6 w z + a 7
a j is constant for all i=1,2,…,7
global ID = work - group ID × work - group - size + local ID
work - group ID w x , w y , w z
local ID l x , l y , l z
도 4a 내지 도 4c는 본 발명의 일 실시예에 따른 샘플링 코드를 소정의 워크 아이템(work-item)에서 실행시켜 커널에서 접근하는 메모리 영역을 파악하는 프로세스에서의 소정의 워크 아이템 선정 프로세스를 설명하기 위한 참조도이다.
도 2와 도 4a 내지 도 4c를 참조하면, 메모리 분석부(210)는 코드 변환부(200)를 통해 변환된 샘플링 코드를 소정의 조건을 만족하는 work-item에서 실행시킨다. 이때, 소정의 조건을 만족하는 work-item은 NDRange가 몇 차원인지에 따라서 달라질 수 있다. NDRange는 커널 프로그램의 인덱스 스페이스(index space)이다. 즉, NDRange가 1차원(1-Dimensional)이면 소정의 work-item은 한 work-group 내의 최대값 및 최소값을 갖는 work-item이다. NDRange가 2차원(2-Dimensional)이면 소정의 work-item은 한 work-group 내의 x축 및 y축에서 각각 최대값 및 최소값을 갖는 work-item이다. NDRange가 3차원(3-Dimensional)이면 소정의 work-item은 한 work-group 내의 x축, y축 및 z축에서 각각 최대값 및 최소값을 갖는 work-item이다.
도 4a를 참조하면, 소정의 work-item은 NDRange가 1차원일 때 NDRange 안에서 leftmost, rightmost 위치의 work-group에 해당하고, 해당 work-group 안에서 leftmost, rightmost 위치의 work-item을 포함한다. 도 4a에서 검은 색 점은 샘플링할 work-item을 나타내며, 빗금친 사각형은 샘플링할 work-group을 나타낸다.
도 4b를 참조하면, 소정의 work-item은 NDRange가 2차원일 때 NDRange 안에서 left-top, right-top, left-bottom, right-bottom 위치의 work-group에 해당하고, 해당 work-group 안에서 left-top, right-top, left-bottom, right-bottom 위치의 work-item을 포함한다. 도 4b에서 검은 색 점은 샘플링할 work-item을 나타내며, 빗금친 사각형은 샘플링할 work-group을 나타낸다.
도 4c를 참조하면, 소정의 work-item은 NDRange가 3차원일 때 NDRange 안에서 가장 앞면과 뒷면의 left-top, right-top, left-bottom, right-bottom 위치의 work-group에 해당하고, 해당 work-group 안에서 가장 앞면과 뒷면의 left-top, right-top, left-bottom, right-bottom 위치의 work-item을 포함한다. 도 4c에서 검은 색 정육면체는 샘플링할 work-item을 나타내며, 빗금친 정육면체는 샘플링할 work-group을 나타낸다.
따라서 하나의 work-group이 Dlocal차원이고, 전체 NDRange가 Dgroup차원일 경우 샘플링할 work-item 수는 2( Dgroup + Dlocal )이다. 즉, NDRange가 1차원이면 4(21+1)개이고, NDRange가 2차원이면 16(22+2)개이며, NDRange가 3차원이면 64(23+3)개이다.
전술한 프로세스를 통해 소정의 work-item에서 해당 샘플링 코드를 실행하여 접근하는 메모리 영역은 전체 NDRange의 모든 work-item들이 접근하는 메모리 영역과 동일하다. 이하 소정의 work-item에서 접근하는 메모리 영역으로 전체 NDRange의 모든 work-item이 접근하는 메모리 영역을 알아낼 수 있음을 증명한다.
우선, 다음을 가정한다.
- 함수 Fn : [L1, U1] × [L2, U2] × ... × [Ln, Un] → Z
- 함수 Fn은 x1, x2, ... xn에 대해서 affine이다.
- Li, Ui ∈ Z for all i = 1, 2, ... n
- Fn의 최소값(mimimum value), 최대값(maximum value)은 2n 점(points)(xi = Li or xi = Ui for all i = 1, 2, ... n) 안에 존재한다.
이하 귀납법(inductive method)을 이용하여 증명한다.
- n이 1일 때, F1은 일차 함수이기 때문에 L1일 때 최소값, U1일 때 최대값을 갖는다. 또는 F1은 L1일 때 최대값, U1일 때 최소값을 갖는다.
- k ≥ 1 일 때, Fk 의 최소값, 최대값은 2k 점(x1, x2, ... xk) [xi = Li or xi = Ui] 안에 존재한다.
- Fk +1은 Fk와 F1로 표현된다.
- Fk +1 (x1, x2, ..., xk +1) = a1x1 + a2x2 + ... + akxk + ak +1xk +1 + ak +2 = Fk(x1, x2, .., xk) + f1(xk +1)이다. (a는 상수)
- Fk가 최대값 maxk, 최소값 mink를 특정 2k 점(x1, x2, ... xk)에서 갖는다.
- Fk +1의 최대값은 maxk + max1 이고, 최소값은 mink + min1이다. 이때 Fk + 1의최대값 및 최소값은 2k+1 점(x1, x2, ... xk, xk +1) [xi = Li or xi = Ui] 안에 존재한다.
도 5는 본 발명의 일 실시예에 따라 이종 시스템이 접근하는 메모리 영역 파악을 개념적으로 보여주기 위한 참조도이다.
도 5를 참조하면, 복수 개의 이종 시스템에 각각 할당되는 메모리 접근 영역을 모르는 경우, OpenCL 커널 프로그램에서 런타임 시에 본 발명의 샘플링 방식을 이용하여 이종 시스템 각각이 접근하는 메모리 영역을 파악할 수 있다. 예를 들면 도 5에 도시된 바와 같이, 100개의 work-item이 global ID를 0에서 99까지 갖고 있다고 가정하면, 본 발명은 런타임 시에 OpenCL 커널을 도 3을 참조로 전술한 샘플링 코드로 변환하고, 변환된 샘플링 코드를 도 4를 참조로 전술한 소정의 조건을 만족하는 work-item에서 실행시킨다. 이에 따라 이종 시스템 중 하나인 GPU0이 접근하는 메모리 영역을 파악하고, 다른 시스템인 GPU1이 접근하는 메모리 영역을 파악할 수 있다. 도 5의 예는 NDRange가 1차원일 때의 일 실시예를 도시한 것으로, NDRange가 2차원 및 3차원인 경우에도 각각 구현 가능하다. 이에 따라, 소정의 work-item에서 접근하는 메모리 영역으로 전체 NDRange의 모든 work-item이 접근하는 메모리 영역을 파악할 수 있다.
도 6은 본 발명의 일 실시예에 따른 메모리 접근영역 분석방법을 도시한 흐름도이다.
도 2 및 도 6을 참조하면, OpenCL에서의 메모리 접근영역 분석장치(2)는 프로그램 런타임 시에 컴파일러가 커널 코드를 샘플링 코드로 변환한다(600). 코드 변환시에 프로그램 슬라이싱 방식을 이용할 수 있다. 커널 코드를 샘플링 코드로 변환하는 단계(600)에서 디바이스 메모리에 접근하는 배열의 인덱스를 탐색하면서 변수가 글로벌 아이디, 그룹 아이디 및 로컬 아이디로 구성된 어파인 폼을 만족하는가에 대한 조건과 슬라이싱 기법을 이용하여 생성된 슬라이스에 조건문이 들어가 있지 않은지에 대한 조건을 만족하는지를 검사하고, 검사 조건에 해당하는 슬라이스로 구성된 샘플링 코드를 생성할 수 있다.
이어서, 메모리 접근영역 분석장치(2)는 소정의 조건을 만족하는 실행 객체에서 변환된 샘플링 코드를 실행(610)시켜서 커널이 접근하는 메모리 영역을 파악한다(620). 이때, 소정의 조건을 만족하는 실행 객체는 커널 프로그램의 인덱스 스페이스가 1차원이면 한 워크 그룹 내의 최대값 및 최소값을 갖는 워크-아이템이고, 인덱스 스페이스가 2차원이면 한 워크 그룹 내의 x축 및 y축에서 각각 최대값 및 최소값을 갖는 워크-아이템이며, 인덱스 스페이스가 3차원이면 한 워크 그룹 내의 x축, y축 및 z축에서 각각 최대값 및 최소값을 갖는 워크-아이템일 수 있다.
본 발명의 일 실시예에 따른 메모리 접근영역 분석방법은 다양한 컴퓨터로 구현되는 동작을 수행하기 위한 프로그램 명령을 포함하는 컴퓨터 판독 가능 매체를 포함한다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 매체는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이제까지 본 발명에 대하여 그 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
2 : 메모리 접근영역 분석장치
110 : OpenCL 디바이스
112 : 연산 유닛
114 : 프로세싱 엘리먼트
200 : 코드 변환부
210 : 메모리 분석부

Claims (12)

  1. OpenCL에서 실행되는 프로그램의 커널 코드를 샘플링 코드로 변환하는 코드 변환부; 및
    상기 변환된 샘플링 코드를 실행하여 커널 코드가 접근하는 메모리 영역을 파악하는 메모리 분석부;
    를 포함하는 것을 특징으로 하는 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치.
  2. 제 1 항에 있어서,
    상기 코드 변환부 및 상기 메모리 분석부는 각각 커널 프로그램 실행 이전에 상기 커널 코드를 샘플링 코드로 변환하고, 메모리 영역을 파악하는 것을 특징으로 하는 메모리 접근영역 분석장치.
  3. 제 1 항에 있어서, 상기 코드 변환부는,
    프로그램 슬라이싱에 기초하여 상기 커널 코드를 상기 샘플링 코드로 변환하는 것을 특징으로 하는 메모리 접근영역 분석장치.
  4. 제 3 항에 있어서, 상기 코드 변환부는,
    디바이스 메모리에 접근하는 배열의 인덱스를 탐색하면서 변수가 글로벌 아이디, 그룹 아이디 및 로컬 아이디로 구성된 어파인 폼을 만족하는가에 대한 조건과 상기 슬라이싱 방식을 이용하여 생성된 슬라이스에 조건문이 들어가 있지 않은지에 대한 조건을 만족하는지를 검사하고, 상기 검사 조건에 해당하는 슬라이스로 구성된 샘플링 코드를 생성하는 것을 특징으로 하는 메모리 접근영역 분석장치.
  5. 제 1 항에 있어서, 상기 메모리 분석부는,
    소정의 조건을 만족하는 실행 객체에서 상기 변환된 샘플링 코드를 실행시켜서 상기 커널 코드가 접근하는 메모리 영역을 파악하는 것을 특징으로 하는 메모리 접근영역 분석장치.
  6. 제 5 항에 있어서, 상기 소정의 조건을 만족하는 실행 객체는
    커널 프로그램의 인덱스 스페이스가 1차원이면 한 워크 그룹 내의 최대값 및 최소값을 갖는 워크-아이템이고,
    상기 인덱스 스페이스가 2차원이면 한 워크 그룹 내의 x축 및 y축에서 각각 최대값 및 최소값을 갖는 워크-아이템이며,
    상기 인덱스 스페이스가 3차원이면 한 워크 그룹 내의 x축, y축 및 z축에서 각각 최대값 및 최소값을 갖는 워크-아이템인 것을 특징으로 하는 메모리 접근영역 분석장치.
  7. 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치의 메모리 접근영역 분석방법에 있어서,
    OpenCL에서 실행되는 프로그램의 커널 코드를 샘플링 코드로 변환하는 단계; 및
    상기 변환된 샘플링 코드를 실행하여 커널 코드가 접근하는 메모리 영역을 파악하는 단계;
    를 포함하는 것을 특징으로 하는 메모리 접근영역 분석방법.
  8. 제 7 항에 있어서,
    상기 커널 코드를 샘플링 코드로 변환하는 단계와 상기 메모리 영역을 파악하는 단계는 각각 커널 프로그램 실행 이전에 수행되는 것을 특징으로 하는 메모리 접근영역 분석방법.
  9. 제 7 항에 있어서, 상기 커널 코드를 샘플링 코드로 변환하는 단계는,
    프로그램 슬라이싱에 기초하여 상기 커널 코드를 상기 샘플링 코드로 변환하는 것을 특징으로 하는 메모리 접근영역 분석방법.
  10. 제 9 항에 있어서, 상기 커널 코드를 샘플링 코드로 변환하는 단계는,
    디바이스 메모리에 접근하는 배열의 인덱스를 탐색하면서 변수가 글로벌 아이디, 그룹 아이디 및 로컬 아이디로 구성된 어파인 폼을 만족하는가에 대한 조건과 상기 슬라이싱 방식을 이용하여 생성된 슬라이스에 조건문이 들어가 있지 않은지에 대한 조건을 만족하는지를 검사하고, 상기 검사 조건에 해당하는 슬라이스로 구성된 샘플링 코드를 생성하는 것을 특징으로 하는 메모리 접근영역 분석방법.
  11. 제 7 항에 있어서, 상기 커널 코드가 접근하는 메모리 영역을 파악하는 단계는,
    소정의 조건을 만족하는 실행 객체에서 상기 변환된 샘플링 코드를 실행시켜서 상기 커널 코드가 접근하는 메모리 영역을 파악하는 것을 특징으로 하는 메모리 접근영역 분석방법.
  12. 제 11 항에 있어서, 상기 소정의 조건을 만족하는 실행 객체는
    커널 프로그램의 인덱스 스페이스가 1차원이면 한 워크 그룹 내의 최대값 및 최소값을 갖는 워크-아이템이고,
    상기 인덱스 스페이스가 2차원이면 한 워크 그룹 내의 x축 및 y축에서 각각 최대값 및 최소값을 갖는 워크-아이템이며,
    상기 인덱스 스페이스가 3차원이면 한 워크 그룹 내의 x축, y축 및 z축에서 각각 최대값 및 최소값을 갖는 워크-아이템인 것을 특징으로 하는 메모리 접근영역 분석방법.
KR1020100134898A 2010-12-24 2010-12-24 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법 KR101157596B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100134898A KR101157596B1 (ko) 2010-12-24 2010-12-24 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100134898A KR101157596B1 (ko) 2010-12-24 2010-12-24 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법

Publications (1)

Publication Number Publication Date
KR101157596B1 true KR101157596B1 (ko) 2012-06-19

Family

ID=46689115

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100134898A KR101157596B1 (ko) 2010-12-24 2010-12-24 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법

Country Status (1)

Country Link
KR (1) KR101157596B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101537725B1 (ko) * 2013-01-18 2015-07-20 서울대학교산학협력단 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080070599A (ko) * 2007-01-26 2008-07-30 엔비디아 코포레이션 병렬 스레드 계산을 위한 가상 아키텍처 및 명령어 세트

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080070599A (ko) * 2007-01-26 2008-07-30 엔비디아 코포레이션 병렬 스레드 계산을 위한 가상 아키텍처 및 명령어 세트

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문1:IEEE *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101537725B1 (ko) * 2013-01-18 2015-07-20 서울대학교산학협력단 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체

Similar Documents

Publication Publication Date Title
US9594754B2 (en) Purity analysis using white list/black list analysis
US8752021B2 (en) Input vector analysis for memoization estimation
Ivannikov et al. Static analyzer Svace for finding defects in a source program code
US20140130158A1 (en) Identification of malware detection signature candidate code
Lin et al. An empirical study on bug assignment automation using chinese bug data
Yang et al. Making parallel programs reliable with stable multithreading
US20190079805A1 (en) Execution node selection method and information processing apparatus
Neele et al. Partial-order reduction for GPU model checking
Obaida et al. Parallel application performance prediction using analysis based models and HPC simulations
Hofer et al. Efficient tracing and versatile analysis of lock contention in Java applications on the virtual machine level
KR101157596B1 (ko) 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법
Abuín et al. Perldoop: Efficient execution of Perl scripts on Hadoop clusters
US20140108867A1 (en) Dynamic Taint Analysis of Multi-Threaded Programs
Hofer et al. Lightweight Java profiling with partial safepoints and incremental stack tracing
US20110239197A1 (en) Instance-based field affinity optimization
CN104104659A (zh) 一种通信指纹的提取方法以及装置
Wei et al. Using sample-based time series data for automated diagnosis of scalability losses in parallel programs
Mushtaq et al. Accurate and efficient identification of worst-case execution time for multicore processors: A survey
Hu et al. PEDAL: a dynamic analysis tool for efficient concurrency bug reproduction in big data environment
Ghane et al. False sharing detection in OpenMP applications using OMPT API
Trindade et al. Multi-core model checking and maximum satisfiability applied to hardware-software partitioning
Preto et al. Object identification in binary tomographic images using gpgpus
KR101371400B1 (ko) 테스트 스크립트의 부가정보를 이용한 요구사항 관리 시스템 및 방법
Gustavsson Worst-case execution time analysis of parallel systems
Jiang et al. Array regrouping on cmp with non-uniform cache sharing

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150601

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160204

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170524

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180521

Year of fee payment: 7