KR20140093593A - 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 - Google Patents

워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 Download PDF

Info

Publication number
KR20140093593A
KR20140093593A KR1020130166372A KR20130166372A KR20140093593A KR 20140093593 A KR20140093593 A KR 20140093593A KR 1020130166372 A KR1020130166372 A KR 1020130166372A KR 20130166372 A KR20130166372 A KR 20130166372A KR 20140093593 A KR20140093593 A KR 20140093593A
Authority
KR
South Korea
Prior art keywords
size
workgroup
work group
determining
cache
Prior art date
Application number
KR1020130166372A
Other languages
English (en)
Other versions
KR101537725B1 (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 서울대학교산학협력단
Publication of KR20140093593A publication Critical patent/KR20140093593A/ko
Application granted granted Critical
Publication of KR101537725B1 publication Critical patent/KR101537725B1/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명의 일실시예는 OpenCL 커널이 실행되는 디바이스에 최적화된 워크 그룹의 크기를 자동으로 결정할 수 있다. 이러한 본 발명의 일 실시예에 따르는 워크 그룹의 크기를 결정하는 방법은 OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하는 단계; 상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 단계; 및 상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계;를 포함한다.

Description

워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체{METHOD AND SYSTEM FOR DETERMINING WORK-GROUP SIZE AND COMPUTER READABLE RECORDING MEDIUM THEREFOR}
본 발명은 워크 그룹 크기 결정 방법 및 그 시스템에 관한 것으로, 보다 상세하게는 OpenCL 커널(Kernel)의 실행을 위한 워크 그룹의 크기를 결정하는 방법 및 그 시스템에 관한 것이다.
최근 들어, OpenCL (Open Computing Language)의 보급과 이용이 활발하다. OpenCL은 개방형 범용 병렬 컴퓨팅 프레임워크으로서, 다중 플랫폼(예를 들어, 복수 개의 CPU, GPU 등)에서 동작하는 프로그램 등을 작성할 수 있게 하며, 그래픽 처리 장치(GPU)의 역량을 그래픽 처리 이외의 영역(범용 GPU)으로 확장할 수 있도록 한다. 이러한 OpenCL은 다양한 하드웨어 제조업체에서 제조한 각각의 하드웨어에서 동작 가능하므로, 많은 제조업체는 OpenCL을 기반으로 하여 자신의 하드웨어에 맞는 프레임워크를 제작하고 있다.
한편 OpenCL 프로그램 중 호스트(Host)에서 실행되는 호스트 프로그램은, 커널을 실행하기 위해 인덱스 공간을 정의하며, 워크 아이템(work-item)은 인덱스 공간의 각 포인트에 해당한다. 워크 그룹(work-group)은 여러 워크 아이템의 집합을 말하며 모든 워크 그룹은 동일한 크기를 갖는다. 즉, 인덱스 공간은 같은 크기의 워크 그룹으로 분할되며 각 워크 그룹은 커널이 실행되는 디바이스(Device) 내의 하나의 CU(Compute Unit)에서 실행된다.
이때 워크 그룹의 크기는 보통 프로그래머가 호스트 코드에 직접 기입하는 방식으로 결정되며, OpenCL 런타임(run-time)이 이를 임의로 결정하게 하도록 하기 위해서는 NULL 값을 사용한다. OpenCL 커널에서 워크 그룹의 크기는 디바이스의 리소스 사용량을 결정하고 CU 사이의 로드 밸런스를 결정하기 때문에 성능에 중요한 영향을 미치는 요소이다.
공개특허 제 10-2012-0054027호 (공개일 : 2012.5.29)에는 성능 향상과 관련하여 효율적인 디버깅을 달성하기 위해 CPU의 코어에서 워크그룹을 순차적으로 실행하도록 매핑하는 기술이 개시되어 있으나, 워크 그룹 크기를 자동으로 구하기 위해 기존에는 전체 인덱스 공간의 크기를 OpenCL 디바이스 내의 CU 수로 균등하게 나누는 단순한 방법을 사용하였다. 그러나 이 방법은 커널이 사용하는 CU의 리소스를 반영하지 않아 CU에서 실행되는 워크 그룹이 최적의 성능을 낼 수 없다는 문제점을 갖는다. 따라서 이와 같은 단순한 방법을 사용하여 워크 그룹의 크기를 구하거나, 프로그래머가 특정한 값을 호스트 코드 상에 직접 기입하는 방법을 사용하면, 커널이 실행되는 디바이스가 변경될 경우 성능의 저하가 발생하는 등, 성능 이식성(performance portability)의 부재라는 문제점이 발생하게 된다.
따라서 상술된 문제점을 해결하기 위한 기술이 필요하게 되었다.
본 발명의 일실시예는 OpenCL 커널이 실행되는 디바이스에 최적화된 워크 그룹의 크기를 자동으로 결정하는 데에 목적이 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 발명에 따르는 워크 그룹의 크기를 결정하는 방법은, OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하는 단계; 상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 단계; 및 상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계;를 포함한다.
또한, 상기 워킹세트는, 각각의 워크 그룹이 사용하는 서로 다른 캐시 라인의 집합으로 정의되며, 상기 캐시 미스는, 캐패시티 미스(capacity miss)와 컨플릭트 미스(conflict miss)를 포함하는, 워크 그룹의 크기를 결정한다.
또한, 상기 함수를 생성하는 단계는, 상기 설정된 워크 그룹의 워킹 세트와 캐시 미스가 다면체(polyhedron)의 정수 포인트(integer point)가 되도록 상기 설정된 워크 그룹에 따르는 다면체를 생성함으로써 상기 함수를 생성한다.
또한, 상기 함수를 생성하는 단계는, 각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하는 단계; 상기 어드레스 수식을 캐시 라인 인덱스로 변환하는 단계; 상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하는 단계; 상기 결정된 워킹세트와 상기 캐시 미스를 상기 다면체로 나타내어 상기 함수를 생성하는 단계;를 포함한다.
또한,상기 각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하는 단계는, 상기 OpenCL 커널에 대한 커널 코드를 상기 설정된 워크 그룹의 크기의 루프(loop)로 변환하는 단계; 상기 변환된 커널 코드로부터 이터레이션(iteration)에 대한 인덱스 도메인을 추출하는 단계; 및 상기 인덱스 도메인으로부터 메모리 액세스에 대한 주소를 추출하기 위한 어드레스 수식을 결정하는 단계;를 포함 한다.
또한, 상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하는 단계는, 상기 워킹세트를 상기 캐시 라인 인덱스의 집합으로 나타내고, 상기 캐시 라인 인덱스의 세트 번호와 캐시 태그를 이용하여 상기 캐시 미스에 대한 수식을 결정한다.
또한, 상기 최적의 워크 그룹의 크기는 상기 워킹세트를 메모리 용량 내의 최대로 하면서 상기 캐시 미스를 유발하지 않는 워크 그룹의 크기이다.
또한, 상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계는, 상기 함수에 상기 OpenCL 커널의 파리미터를 입력하여, 상기 OpenCL 커널에 대한 워킹세트와 캐시 미스를 획득하는 단계; 상기 획득된 워킹세트와 캐시미스를 통해 선형회귀식을 구하는 단계; 및 상기 선형회귀식을 통해 상기 최적의 워크 그룹의 크기를 결정하는 단계; 를 포함 한다.
또한, 워크 그룹의 크기를 결정하는 방법은, 상기 함수를 통해 결정된 최적의 워크 그룹의 크기를 상기 OpenCL 커널의 파라미터와 대응하여 저장하는 단계; 및 추후에 임의의 커널에 대해서 워크 그룹의 크기를 결정할 때, 상기 임의의 커널의 파라미터를 통해 상기 저장된 워크 그룹의 크기를 검색하고, 상기 검색된 워크 그룹의 크기를 최적의 워크 그룹의 크기로 결정하는 단계;를 더 포함한다.
한편, 본 발명의 다른 실시예에 따르는 워크 그룹 결정 시스템은 OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하고, 상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 컴파일러 실행부; 및 상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 런타임 실행부;를 포함한다.
또한, 상기 워킹세트는, 각각의 워크 그룹이 사용하는 서로 다른 캐시 라인의 집합으로 정의되며, 상기 캐시 미스는, 캐패시티 미스(capacity miss)와 컨플릭트 미스(conflict miss)를 포함한다.
또한, 상기 컴파일러 실행부는, 상기 설정된 워크 그룹의 워킹 세트와 캐시 미스가 다면체(polyhedron)의 정수 포인트(integer point)가 되도록 상기 설정된 워크 그룹에 따르는 다면체를 생성함으로써 상기 함수를 생성한다.
또한, 상기 컴파일러 실행부는, 각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하고, 상기 어드레스 수식을 캐시 라인 인덱스로 변환하며, 상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하고, 상기 결정된 워킹세트와 상기 캐시 미스를 상기 다면체로 나타내어 상기 함수를 생성한다.
또한, 상기 컴파일러 실행부는, 상기 워킹세트를 상기 캐시 라인 인덱스의 집합으로 나타내고, 상기 캐시 라인 인덱스의 세트 번호와 캐시 태그를 이용하여 상기 캐시 미스에 대한 수식을 결정하는 것이다.
또한, 상기 최적의 워크 그룹의 크기는, 상기 워킹세트를 메모리 용량 내의 최대로 하면서 상기 캐시 미스를 유발하지 않는 워크 그룹의 크기이다.
또한, 상기 런타임 실행부는, 상기 함수에 상기 OpenCL 커널의 파리미터를 입력하여, 상기 OpenCL 커널에 대한 워킹세트와 캐시 미스를 획득하고, 상기 획득된 워킹세트와 캐시미스를 통해 선형회귀식을 구하며, 상기 선형회귀식을 통해 상기 최적의 워크 그룹의 크기를 결정한다.
또한, 상기 워크 그룹의 크기를 결정하는 시스템은, 상기 함수를 통해 결정된 최적의 워크 그룹의 크기를 상기 OpenCL 커널의 파라미터와 대응하여 저장하는 저장부; 및 추후에 임의의 커널에 대해서 워크 그룹의 크기를 결정할 때, 상기 임의의 커널의 파라미터를 통해 상기 저장된 워크 그룹의 크기를 검색하는 검색부; 를 더 포함한다.
한편, 본 발명의 또 다른 실시예에 따르는 컴퓨터 판독가능한 기록매체는, OpenCL 커널을 통해 실행되는 컴퓨터에서 워크 그룹의 크기를 결정하는 방법을 수행하는 컴퓨터 판독가능 기록 매체에 있어서, 상기 워크 그룹의 크기를 결정하는 방법은, OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하는 단계; 상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 단계; 및 상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계; 를 포함한다.
전술한 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 본 발명의 일실시예는 OpenCL 커널이 실행되는 디바이스에 최적화된 워크 그룹의 크기를 자동으로 결정할 수 있다. 이로 인해 인덱스 공간을 커널이 실행되는 디바이스 환경에 맞추어 분할함으로써 OpenCL 프로그램의 성능 이식성을 증가시키는 효과를 갖는다. 나아가 OpenCL 프로그램의 최적의 성능을 구현하기 위한 핵심 기법으로 사용됨으로써, OpenCL이 표준 병렬 프로그래밍 모델로서 사용되는데 공헌할 것이다.
도 1은 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법을 설명하기 위한 개념도이다.
도 2는 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법에서 컴파일러 알고리즘을 단계적으로 도시한 흐름도이다.
도 3은 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법에서 런타임 알고리즘을 단계적으로 도시한 흐름도이다.
도 4는 본 발명의 일실시예에 따른 워크 그룹 크기 결정 시스템을 도시한 블록도이다.
아래에서는 첨부한 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
도 1은 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법을 설명하기 위한 개념도이다. 도 1에 도시된 바와 같이 본 발명의 일실시예에 의한 워크 그룹 크기 결정 시스템은 OpenCL 커널이 실행되는 디바이스에 따라 워크 그룹의 크기가 자동으로 결정되도록 하기 위하여, 임의의 워크 그룹 크기를 가정하고 워크 그룹이 사용하는 워킹세트(working-set)와 캐시 미스 정보를 계산하여 최적의 워크 그룹 크기를 결정한다. 여기서 워크 그룹은, OpenCL 프로그램이 정의하는 커널 실행을 위한 인덱스 공간의 각 포인트에 대한 집합을 나타낸다. 즉, 인덱스 공간은 워크 그룹으로 분할되며 각 워크 그룹은 커널이 실행되는 디바이스(Device) 내의 하나의 CU(Compute Unit)에서 실행된다. 워킹세트는, 하나의 프로세서가 자주 참조하는 페이지들의 집합을 의미하는 것으로서, 각각의 워크 그룹이 사용하는 서로 다른 캐시 라인의 집합으로 표현될 수 있다. 워킹세트는 현재 시스템 프로세스에 의해 활성화되어 이용되고 있는 메모리의 총량을 나타내기도 한다. 캐시 미스 정보와 관련하여, 캐시 미스란 CPU(Central Processing Unit)에 의해 요구되는 데이터가 캐시에 로딩되어 있지 않은 경우를 말한다. 캐시 미스는 캐시의 용량이 작아서 발생하는 캐패시티 미스(capacity miss)와 한 블록에 너무 많은 메모리 블록이 맵핑되어 발생하는 컨플릭트 미스(conflict miss)를 포함한다.
도 1에 도시된 본 발명의 실시예를 보다 상세하게 설명하면, 우선 컴파일러(compiler)는 커널 코드를 컴파일(compile)하는 과정에서 워킹세트와 캐시 미스 계산 함수를 생성한다. 그리고 이와 같이 생성된 워킹세트와 캐시 미스 계산 함수를 이용하여, 런타임(run-time)에서 커널을 실행하기 전에 최적의 워크 그룹의 크기를 결정한다.
이때 컴파일러가 워킹세트와 캐시 미스 계산 함수를 생성하는 과정을 도 2를 참조하여 보다 상세하게 설명한다. 도 2는 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법에서 컴파일러 알고리즘을 단계적으로 도시한 흐름도이다.
컴파일러는 커널이 임의의 크기의 워크 그룹에서 실행되는 것을 가정하고, 모든 글로벌 메모리 액세스의 주소를 워크 그룹의 크기에 대한 수식으로 표현한다.
이를 위해 도 2에 도시된 바와 같이 컴파일러는 커널이 임의의 크기의 워크 그룹에 따라 실행되는 것을 가정하기 위하여, 커널 코드를 워크 그룹 크기에 따른 루프(loop)로 변환한다(S101).
그리고 변환된 루프 형태의 커널 코드로부터 각각의 이터레이션(iteration)에 대한 루프의 인덱스 도메인을 추출한다(S102).
루프의 인덱스 도메인을 추출한 후, 컴파일러는 각 메모리 액세스에 대한 주소를 추출하기 위한 어드레스 수식을 결정한다(S103).
이때 워킹세트와 캐시 미스는 이 어드레스 수식을 이용하여, 캐시 라인 인덱스를 구하여 집합으로 나타내면 구할 수 있다.
그에 따라 컴파일러는 어드레스 수식으로부터 각 메모리 액세스에 대한 주소를 캐시 라인 인덱스로 변환한다(S104).
그 후 컴파일러는, 캐시 라인 인덱스의 집합으로 워킹세트를 구성하고(S105), 캐시 라인 인덱스의 세트 번호와 캐시태그를 이용하여 캐시 미스 수식을 결정한다(S106).
여기서 워킹세트와 캐시 미스의 집합은 워크 그룹 크기의 범위에 따른 다면체(polyhedron)로 나타낼 수 있는데, 워킹세트와 캐시 미스는 결국 각 다면체의 정수 포인트(integer point)의 개수가 된다.
이로써 본 발명의 실시예에서 컴파일러는 런타임에 사용될 워킹세트와 캐시 미스의 다면체를 만드는 함수를 생성(S107)하는 역할을 한다.
한편 도 1에 도시된 바와 같이, 워킹세트와 캐시 미스 정보는 런타임에서 최적의 워크 그룹의 크기를 결정하는데에 사용된다. 이때 런타임에서 최적의 워크 그룹의 크기를 결정하는 알고리즘은 도 3을 참조하여 설명한다. 도 3은 본 발명의 일실시예에 따른 워크 그룹 크기 결정 방법에서 런타임 알고리즘을 단계적으로 도시한 흐름도이다.
도 3에 도시된 바와 같이 런타임은 컴파일러가 생성한 함수를 이용해 실제 워킹세트와 캐시 미스를 구하는데, 정확성을 높이기 위해 커널에서 사용되는 메모리 버퍼의 실제 주소와 커널의 실제 파라미터 값을 이용한다.
이와 같은 방법은 최적의 워크 그룹 크기를 결정하는데 정확성을 갖지만, 런타임에 워크 그룹의 크기를 구해야 하므로 커널의 실행 시간을 지연시킬 수 있다. 따라서 본 발명의 실시예에서는 커널 파라미터에 따른 워크 그룹 크기를 저장하는 소프트웨어 캐시를 활용하여 워크 그룹 크기를 구하는 시간을 단축시킬 수 있다. 즉, 같은 파라미터에 대해 기존에 구한 워크 그룹 크기가 있다면 그 값을 사용하고, 없다면 새로 워크 그룹 크기를 구하고, 커널 파라미터와 워크 그룹 크기를 소프트웨어 캐시에 저장하여, 추후 워크 그룹 크기를 구할 때 참조할 수 있다.
이를 위해서 런타임은 워크 그룹 크기에 대한 소프트웨어 캐시를 검색할 수 있다(S201).
그 결과 실행하고자 하는 커널의 커널 파라미터에 대응하는 워크 그룹의 크기가 이미 소프트웨어 캐시에 존재하는 것으로 판단되면(S202), 소프트웨어 캐시에서 검색된 워크 그룹의 크기를 실제 실행하고자 하는 커널의 워크 그룹의 크기로 결정한다(S203).
그러나 S202단계에서 판단한 결과, 커널 파라미터에 대응하는 워크 그룹의 크기가 검색되지 않으면, 컴파일러에서 연산된 워킹세트 및 캐시 미스 계산 함수에 실행하고자 하는 커널 파라미터를 적용하여 워킹세트와 캐시 미스 정보에 대한 다면체를 얻는다(S204).
그리고 런타임은 워크 그룹의 크기를 1로 가정하고 앞에서 구한 다면체로부터 워킹세트와 캐시 미스를 구하고, 런타임에서 지원하는 최대 워크 그룹의 크기를 이용하여 워킹세트와 캐시 미스를 구한다(S205). 이때 워킹세트와 캐시 미스는 결국 각 다면체의 정수 포인트(integer point)의 개수가 된다.
그 후 런타임은 앞에서 구한 워킹세트과 캐시 미스 정보를 이용한 선형 회귀식(linear regression)을 구하고, 이로부터 워킹세트를 최대로 하면서 캐시 미스를 유발하지 않는 워크그룹의 크기를 구한다(S206). 즉, 두 개의 워크 그룹의 크기를 이용하여 선형식을 모델링 한 후 워킹세트가 가장 크면서 캐시 미스를 유발하지 않는 최적의 워크그룹의 크기를 선택한다.
이와 같이 선택된 워크 그룹의 크기는 커널 파라미터와 연관되어 소프트웨어 캐시에 저장될 수 있다(S207). 이에 따라 추후 다시 동일한 커널 파라미터를 갖는 디바이스에서 커널을 실행할 때에는 별도의 연산 과정을 거치지 않고 이미 저장된 워크 그룹의 크기에 따라 커널을 실행할 수 있다.
이상으로 설명한 본 발명의 일 실시예에 따르는 방법을 수행하는 워크 그룹 크기 결정 시스템(100)을 도 4를 통해 설명하도록 한다.
본 발명의 일 실시예에 따르는 시스템(100)은 컴파일러 실행부(110), 런타임 실행부(120), 저장부(130) 및 검색부(140)를 포함한다.
컴파일러 실행부(110)는 OpenCL 커널에 대한 커널 코드를 컴파일하는 과정에서 워킹세트 및 캐시 미스를 계산하기 위한 함수를 생성한다. 컴파일러 실행부(110)는 OpenCL 커널이 커널코드를 워크 그룹의 크기에 따른 루프로 변환하고, 변환된 루프 형태의 커널 코드로부터 이터레이션 루프의 인덱스 도메인을 추출한다. 이어서, 컴파일러 실행부(110)는 루프 인덱스 도메인을 추출한 후, 각 메모리 액세스에 대한 주소를 추출하기 위한 어드레스 수식을 결정한다. 이러한 어드레스 수식으로부터 각 메모리 액세스에 대한 주소를 캐시 라인 인덱스로 변환한다. 컴파일러 실행부(110)는 워킹 세트를 캐시 라인 인덱스의 집합으로 구성하며, 캐시 미스에 대한 수식을 캐시 라인 인덱스의 세트 번호와 캐시 태그를 이용하여 결정한다. 결정된 캐시 미스에 대한 수식과 캐시 라인 인덱스의 집합으로 구성된 워킹 세트는 다면체로 표현될 수 있는데, 다면체의 정수 포인트의 개수가 캐시 미스와 워킹세트가 된다. 컴파일러 실행부(110)가 생성한 함수는 이러한 다면체를 생성하는 것으로 간주될 수 있다.
런타임 실행부(120)는 컴파일러 실행부(110)에서 생성된 함수를 통해 최적의 워크 그룹의 크기를 결정한다. 구체적으로, 런타임 실행부(120)는 OpenCL 커널의 커널 파라미터를 상기 함수에 입력하여 워킹세트와 캐시 미스에 대한 다면체를 획득한다. 런타임 실행부(120)는 이러한 워킹세트와 캐시 미스를 이용하여 선형 회귀식을 구하여, 이를 이용하여 워킹세트를 메모리 용량 범위 내의 최대로 규정하면서 캐시 미스를 유발하지 않는 워크 그룹의 크기를 결정할 수 있다. 더 구체적으로, 워크 그룹의 크기가 1로 가정될 때와 최대로 될 때의 경우를 이용하여 선형식을 모델링한 후, 워킹세트가 가장 크면서 캐시 미스를 유발하지 않는 워크 그룹의 크기를 선택하는 방식으로 런타임이 수행될 수 있다.
한편, 커널의 워크 그룹의 크기를 결정할 때마다 이러한 과정을 반복할 경우, 커널에 대한 프로세스 부하를 가중시키게 되어 커널 실행 시간을 지연시킬 수 있으므로, 본 발명의 일 실시예는 저장부(130)와 검색부(140)를 더 포함할 수 있다.
저장부(130)는 커널 파라미터와 상기와 같은 방법에 의해 계산되며 커널 파라미터에 대응하는 워크 그룹의 최적의 크기를 서로 대응시켜서 소프트웨어 캐시로 저장할 수 있다.
검색부(140)는 추후의 워크 그룹 결정이 재수행될 경우, 커널 파라미터부터 추출하여, 커널 파라미터에 대응하는 소프트웨어 캐시가 저장부(130)에 있는지 검색한다. 소프트웨어 캐시가 검색되는 경우, 검색된 워크 그룹의 크기를 최적의 워크 그룹의 크기로 결정할 수 있다. 검색되지 않는 경우라면, 컴파일러 실행부(110) 및/또는 런타임 실행부(120)를 통해 최적의 워크 그룹의 크기를 결정하는 과정을 수행함으로써 워크 그룹의 크기를 결정할 수 있다.
한편, 본 발명의 워크 그룹 크기 결정 시스템은, 위에 기재된 방법에 따라 커널을 실행하기 전에, 커널 실행 시 실행될 워크 아이템들의 최적의 워크 그룹 크기를 자동으로 결정할 수 있으며, 이에 OpenCL의 호스트 프로그램에 의해 호출되는 커널이 다른 디바이스에서 실행되더라도 성능이 저하되지 않는 등, OpenCL 프로그램의 성능 이식성을 향상시킬 수 있다.
반면, 상술된 실시예에 따른 워크 그룹 크기 결정 방법은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파와 같은 변조된 데이터 신호의 기타 데이터, 또는 기타 전송 메커니즘을 포함하며, 임의의 정보 전달 매체를 포함한다.
전술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100 : 워크 그룹 크기 결정 시스템 110 : 컴파일러 실행부
120 : 런타임 실행부 130 : 저장부
140 : 검색부

Claims (18)

  1. OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하는 단계;
    상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 단계; 및
    상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계;
    를 포함하는 워크 그룹의 크기를 결정하는 방법.
  2. 제 1 항에 있어서,
    상기 워킹세트는, 각각의 워크 그룹이 사용하는 서로 다른 캐시 라인의 집합으로 정의되며,
    상기 캐시 미스는, 캐패시티 미스(capacity miss)와 컨플릭트 미스(conflict miss)를 포함하는, 워크 그룹의 크기를 결정하는 방법.
  3. 제 2 항에 있어서,
    상기 함수를 생성하는 단계는,
    상기 설정된 워크 그룹의 워킹 세트와 캐시 미스가 다면체(polyhedron)의 정수 포인트(integer point)가 되도록 상기 설정된 워크 그룹에 따르는 다면체를 생성함으로써 상기 함수를 생성하는, 워크 그룹의 크기를 결정하는 방법.
  4. 제 3 항에 있어서,
    상기 함수를 생성하는 단계는,
    각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하는 단계;
    상기 어드레스 수식을 캐시 라인 인덱스로 변환하는 단계;
    상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하는 단계;
    상기 결정된 워킹세트와 상기 캐시 미스를 상기 다면체로 나타내어 상기 함수를 생성하는 단계;
    를 포함하는, 워크 그룹의 크기를 결정하는 방법.
  5. 제 4 항에 있어서,
    상기 각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하는 단계는,
    상기 OpenCL 커널에 대한 커널 코드를 상기 설정된 워크 그룹의 크기의 루프(loop)로 변환하는 단계;
    상기 변환된 커널 코드로부터 이터레이션(iteration)에 대한 인덱스 도메인을 추출하는 단계; 및
    상기 인덱스 도메인으로부터 메모리 액세스에 대한 주소를 추출하기 위한 어드레스 수식을 결정하는 단계;
    를 포함하는, 워크 그룹의 크기를 결정하는 방법.
  6. 제 4 항에 있어서,
    상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하는 단계는,
    상기 워킹세트를 상기 캐시 라인 인덱스의 집합으로 나타내고, 상기 캐시 라인 인덱스의 세트 번호와 캐시 태그를 이용하여 상기 캐시 미스에 대한 수식을 결정하는 것인, 워크 그룹의 크기를 결정하는 방법.
  7. 제 3 항에 있어서,
    상기 최적의 워크 그룹의 크기는 상기 워킹세트를 메모리 용량 내의 최대로 하면서 상기 캐시 미스를 유발하지 않는 워크 그룹의 크기인, 워크 그룹의 크기를 결정하는 방법.
  8. 제 7 항에 있어서,
    상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계는,
    상기 함수에 상기 OpenCL 커널의 파리미터를 입력하여, 상기 OpenCL 커널에 대한 워킹세트와 캐시 미스를 획득하는 단계;
    상기 획득된 워킹세트와 캐시미스를 통해 선형회귀식을 구하는 단계; 및
    상기 선형회귀식을 통해 상기 최적의 워크 그룹의 크기를 결정하는 단계;
    를 포함하는, 워크 그룹의 크기를 결정하는 방법.
  9. 제 1 항에 있어서,
    상기 워크 그룹의 크기를 결정하는 방법은,
    상기 함수를 통해 결정된 최적의 워크 그룹의 크기를 상기 OpenCL 커널의 파라미터와 대응하여 저장하는 단계; 및
    추후에 임의의 커널에 대해서 워크 그룹의 크기를 결정할 때, 상기 임의의 커널의 파라미터를 통해 상기 저장된 워크 그룹의 크기를 검색하고, 상기 검색된 워크 그룹의 크기를 최적의 워크 그룹의 크기로 결정하는 단계;
    를 더 포함하는, 워크 그룹의 크기를 결정하는 방법.
  10. OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하고, 상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 컴파일러 실행부; 및
    상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 런타임 실행부;
    을 포함하는 워크 그룹의 크기를 결정하는 시스템.
  11. 제 10 항에 있어서,
    상기 워킹세트는, 각각의 워크 그룹이 사용하는 서로 다른 캐시 라인의 집합으로 정의되며,
    상기 캐시 미스는, 캐패시티 미스(capacity miss)와 컨플릭트 미스(conflict miss)를 포함하는, 워크 그룹의 크기를 결정하는 시스템.
  12. 제 11 항에 있어서,
    상기 컴파일러 실행부는,
    상기 설정된 워크 그룹의 워킹 세트와 캐시 미스가 다면체(polyhedron)의 정수 포인트(integer point)가 되도록 상기 설정된 워크 그룹에 따르는 다면체를 생성함으로써 상기 함수를 생성하는, 워크 그룹의 크기를 결정하는 시스템.
  13. 제 12 항에 있어서,
    상기 컴파일러 실행부는,
    각 메모리 액세스의 주소를 상기 워크 그룹의 크기에 대한 어드레스 수식으로 표현하고,
    상기 어드레스 수식을 캐시 라인 인덱스로 변환하며,
    상기 캐시 라인 인덱스를 통해 상기 워킹세트와 상기 캐시 미스를 결정하고,
    상기 결정된 워킹세트와 상기 캐시 미스를 상기 다면체로 나타내어 상기 함수를 생성하는, 워크 그룹의 크기를 결정하는 시스템.
  14. 제 13 항에 있어서,
    상기 컴파일러 실행부는, 상기 워킹세트를 상기 캐시 라인 인덱스의 집합으로 나타내고, 상기 캐시 라인 인덱스의 세트 번호와 캐시 태그를 이용하여 상기 캐시 미스에 대한 수식을 결정하는 것인, 워크 그룹의 크기를 결정하는 시스템.
  15. 제 12 항에 있어서,
    상기 최적의 워크 그룹의 크기는,
    상기 워킹세트를 메모리 용량 내의 최대로 하면서 상기 캐시 미스를 유발하지 않는 워크 그룹의 크기인, 워크 그룹의 크기를 결정하는 시스템.
  16. 제 15 항에 있어서,
    상기 런타임 실행부는,
    상기 함수에 상기 OpenCL 커널의 파리미터를 입력하여, 상기 OpenCL 커널에 대한 워킹세트와 캐시 미스를 획득하고,
    상기 획득된 워킹세트와 캐시미스를 통해 선형회귀식을 구하며,
    상기 선형회귀식을 통해 상기 최적의 워크 그룹의 크기를 결정하는, 워크 그룹의 크기를 결정하는 시스템.
  17. 제 10 항에 있어서,
    상기 워크 그룹의 크기를 결정하는 시스템은,
    상기 함수를 통해 결정된 최적의 워크 그룹의 크기를 상기 OpenCL 커널의 파라미터와 대응하여 저장하는 저장부; 및
    추후에 임의의 커널에 대해서 워크 그룹의 크기를 결정할 때, 상기 임의의 커널의 파라미터를 통해 상기 저장된 워크 그룹의 크기를 검색하는 검색부; 를 더 포함하는, 워크 그룹의 크기를 결정하는 시스템.
  18. OpenCL 커널을 통해 실행되는 컴퓨터에서 워크 그룹의 크기를 결정하는 방법을 수행하는 컴퓨터 판독가능 기록 매체에 있어서, 상기 워크 그룹의 크기를 결정하는 방법은,
    OpenCL 커널과 관련한 워크 그룹의 크기를 임의로 설정하는 단계;
    상기 설정된 워크 그룹의 워킹세트와 캐시 미스를 계산하는 함수를 생성하는 단계; 및
    상기 함수를 통해 최적의 워크 그룹의 크기를 결정하는 단계;
    를 포함하는 컴퓨터 판독 가능 기록 매체.

KR1020130166372A 2013-01-18 2013-12-30 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 KR101537725B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20130005665 2013-01-18
KR1020130005665 2013-01-18

Publications (2)

Publication Number Publication Date
KR20140093593A true KR20140093593A (ko) 2014-07-28
KR101537725B1 KR101537725B1 (ko) 2015-07-20

Family

ID=51739741

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130166372A KR101537725B1 (ko) 2013-01-18 2013-12-30 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체

Country Status (1)

Country Link
KR (1) KR101537725B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160154679A1 (en) * 2014-11-28 2016-06-02 Samsung Electronics Co., Ltd. Method and apparatus for determining a work-group size
KR20180003003A (ko) * 2016-06-30 2018-01-09 주식회사 한글과컴퓨터 이미지 처리 장치 및 방법
CN108470211A (zh) * 2018-04-09 2018-08-31 郑州云海信息技术有限公司 一种卷积计算的实现方法、设备和计算机存储介质
KR20190088643A (ko) 2018-01-19 2019-07-29 한국전자통신연구원 Gpu 기반의 적응적 blas 연산 가속화 장치 및 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
KR20120037801A (ko) * 2010-10-12 2012-04-20 삼성전자주식회사 병렬 프로그램의 루프 스케줄을 조절하는 장치 및 방법
KR101157596B1 (ko) * 2010-12-24 2012-06-19 서울대학교산학협력단 개방형 범용 병렬 컴퓨팅 프레임워크(OpenCL)에서의 메모리 접근영역 분석장치 및 그 방법

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160154679A1 (en) * 2014-11-28 2016-06-02 Samsung Electronics Co., Ltd. Method and apparatus for determining a work-group size
KR20160064903A (ko) * 2014-11-28 2016-06-08 삼성전자주식회사 작업 그룹의 크기를 결정하는 장치 및 방법
US10114793B2 (en) * 2014-11-28 2018-10-30 Samsung Electronics Co., Ltd. Method and apparatus for determining a work-group size
KR20180003003A (ko) * 2016-06-30 2018-01-09 주식회사 한글과컴퓨터 이미지 처리 장치 및 방법
KR101867423B1 (ko) * 2016-06-30 2018-06-18 주식회사 한글과컴퓨터 이미지 처리 장치 및 방법
KR20190088643A (ko) 2018-01-19 2019-07-29 한국전자통신연구원 Gpu 기반의 적응적 blas 연산 가속화 장치 및 방법
US11151474B2 (en) 2018-01-19 2021-10-19 Electronics And Telecommunications Research Institute GPU-based adaptive BLAS operation acceleration apparatus and method thereof
CN108470211A (zh) * 2018-04-09 2018-08-31 郑州云海信息技术有限公司 一种卷积计算的实现方法、设备和计算机存储介质

Also Published As

Publication number Publication date
KR101537725B1 (ko) 2015-07-20

Similar Documents

Publication Publication Date Title
JP5951022B2 (ja) デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのリンク
JP6044968B2 (ja) デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのコンパイル
KR101381274B1 (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
JP5666745B2 (ja) 動的言語のハッシュテーブルのためのハードウェアサポート
JP2007531075A (ja) プログラム・コードを変換するための共用コード・キャッシングの方法および装置
KR101537725B1 (ko) 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체
US9424004B2 (en) Execution guards in dynamic programming
Mikushin et al. KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs
EP2659362A2 (en) Emulating pointers
US8458679B2 (en) May-constant propagation
US11226798B2 (en) Information processing device and information processing method
US9250939B2 (en) Information processing device, profile target determining program, and method
US20090037690A1 (en) Dynamic Pointer Disambiguation
US10459703B2 (en) Systems and methods for task parallelization
US10095494B2 (en) Systems and methods for footprint based scheduling
US20160011889A1 (en) Simulation method and storage medium
WO2019136014A1 (en) Reduced instructions to generate global variable addresses
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
JP2022542007A (ja) テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証
Zhu et al. Two-phase execution of binary applications on CPU/GPU machines
US10802809B2 (en) Predicting physical memory attributes by compiler analysis of code blocks
US9880841B2 (en) Computation method for computing performance value when processor executes code, computation apparatus for computing performance value when processor executes code, and computer readable storage medium storing computation program for computing performance value when processor executes code
KR20140119619A (ko) 벡터 코드 생성 장치 및 방법
CN115248686A (zh) 编译器生成的代码的分析和优化

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
FPAY Annual fee payment

Payment date: 20180620

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190625

Year of fee payment: 5