KR20180076051A - OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 - Google Patents

OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 Download PDF

Info

Publication number
KR20180076051A
KR20180076051A KR1020160180133A KR20160180133A KR20180076051A KR 20180076051 A KR20180076051 A KR 20180076051A KR 1020160180133 A KR1020160180133 A KR 1020160180133A KR 20160180133 A KR20160180133 A KR 20160180133A KR 20180076051 A KR20180076051 A KR 20180076051A
Authority
KR
South Korea
Prior art keywords
group
processing
core
control core
work
Prior art date
Application number
KR1020160180133A
Other languages
English (en)
Other versions
KR102592330B1 (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 KR1020160180133A priority Critical patent/KR102592330B1/ko
Priority to US15/787,219 priority patent/US10503557B2/en
Priority to EP17202801.1A priority patent/EP3343370A1/en
Priority to CN201711216401.0A priority patent/CN108241508B/zh
Priority to JP2017238434A priority patent/JP6951962B2/ja
Publication of KR20180076051A publication Critical patent/KR20180076051A/ko
Application granted granted Critical
Publication of KR102592330B1 publication Critical patent/KR102592330B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

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

Abstract

OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치는, 계층적으로 분류된 컨트롤 코어 그룹이 OpenCL(Open Computing Language) 커널을 실행하기 위한 작업 그룹을 프로세싱 코어들에 할당한다.

Description

OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치{Method for processing OpenCL kernel and computing device thereof}
본 개시는 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치에 관한 것이다.
컴퓨팅 장치는 어플리케이션의 성능 조건을 만족하기 위해, 단일 집적 회로에 여러 코어 또는 프로세서들을 통합하는 형태로 발전되고 있다. 예를 들어, 멀티 코어 프로세서(Many core processor)는 연산 기능을 가진 2 개 이상의 코어들이 하나의 프로세서에 집적된 것을 의미한다. 또한, 더 많은 수(통상적으로 16개 이상)의 코어들이 하나의 프로세서에 집적된 매니 코어(Many core processor)도 개발되고 있다. 멀티 코어 프로세서와 매니 코어 프로세서는 태블릿 PC, 휴대폰, PDA(personal digital assistant), 랩톱, 미디어 플레이어, GPS(global positioning system) 장치, 전자책 단말기, MP3 플레이어, 디지털 카메라를 포함한 휴대용 장비나 TV에 탑재되는 멀티미디어 칩을 포함한 임베디드 장치에 탑재될 수 있다.
한편, OpenCL(Open Computing Language)은 다중 플랫폼에서 동작하는 프로그램을 작성할 수 있게 한다. 다시 말해서, OpenCL은 GPU(Graphic Processing Unit) 뿐 아니라, 범용 멀티 코어 CPU(Central Processing Unit), FPGA(Field-Programmable Gate Array) 등의 다중 플랫폼에서 프로그램이 동작하게 할 수 있는 개방형 범용 병렬 컴퓨팅 프레임워크로서, 그래픽 처리 장치(GPU)의 역량을 그래픽 처리 이외의 영역(예를 들어, GPGPU(General-Purpose computing on Graphics Processing Unit))으로 확장할 수 있도록 한다. 이에 따라, 복수 개의 코어들이 포함된 컴퓨팅 장치가 OpenCL 프로그램을 효율적으로 처리하기 위한 다양한 시도들이 진행되고 있다.
계층적으로 분류된 컨트롤 코어 그룹이 OpenCL 커널(kernel)을 실행하기 위한 작업 그룹을 프로세싱 코어 그룹에 할당하는, OpenCL 커널을 처리하는 방법 및 이를 수행하는 컴퓨팅 장치를 제공하는 것이다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, OpenCL 커널을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어(control core) 및 프로세싱 코어(processing core)에 할당하는, 컨트롤 코어 그룹; 및 적어도 하나의 상기 프로세싱 코어를 포함하고, 상기 컨트롤 코어 그룹에 의해 할당된 상기 작업 그룹을 처리하고, 상기 작업 그룹의 처리 결과를 출력하는, 프로세싱 코어 그룹을 포함하고, 상기 컨트롤 코어 그룹에 포함된 복수 개의 컨트롤 코어들은, 상기 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다.
다른 측면에 따르면, OpenCL 커널을 처리하는 방법은 컨트롤 코어 그룹에 의해, OpenCL 커널을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어 및 프로세싱 코어에 할당하는 단계; 적어도 하나의 상기 프로세싱 코어가 포함된 프로세싱 코어 그룹에 의해, 상기 할당된 상기 작업 그룹을 처리하는 단계; 및 상기 프로세싱 코어 그룹에 의해, 상기 작업 그룹의 처리 결과를 출력하는 단계를 포함하고, 상기 컨트롤 코어 그룹에 포함된 복수 개의 컨트롤 코어들은, 상기 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다.
또 다른 측면에 따르면, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
상기된 바에 따르면, 프로세싱 코어에 작업 그룹을 할당하는 컨트롤 코어가 계층적으로 분류되어 있기 때문에, 작업 그룹들을 효율적으로 분배할 수 있다.
도 1은 OpenCL 플랫폼을 설명하기 위한 도면이다.
도 2는 일 실시예에 따른, 컴퓨팅 장치의 구성을 나타낸 블록도이다.
도 3은 다른 일 실시예에 따른, 컴퓨팅 장치의 구성을 나타낸 블록도이다.
도 4는 일 실시예에 따른 컨트롤 코어에 의해 작업 그룹이 할당된 프로세싱 코어의 수를 설명하기 위한 도면이다.
도 5는 일 실시예에 따른, OpenCL 커널을 실행하기 위한 작업 그룹을 동적으로 할당하는 방법을 설명하기 위한 도면이다.
도 6은 일 실시예에 따른, 컴퓨팅 장치의 구조를 설명하기 위한 도면이다.
도 7은 다른 일 실시예에 따른, 최하위 컨트롤 코어와 프로세싱 코어들을 설명하기 위한 도면이다.
도 8은 일 실시예에 따라, 프로세싱 코어에서 실행되는 OpenCL 커널 코드이다.
도 9은 다른 일 실시예에 따른, 컴퓨팅 장치를 설명하기 위한 도면이다.
도 10은 일 실시예에 따른, 버퍼를 설명하기 위한 도면이다.
도 11은 일 실시예에 따라 버퍼가 추가된 경우, 프로세싱 코어에서 실행되는 OpenCL 커널 코드이다.
도 12는 다른 일 실시예에 따라 버퍼가 추가된 경우, OpenCL 작업 그룹을 실행하는 OpenCL 커널 코드이다.
도 13 및 도 14는 일 실시예에 따른 컴퓨팅 장치의 성능을 검증하기 위한 실험 환경을 나타낸 도면이다.
도 15는 일 실시예에 따른 컴퓨팅 장치의 성능의 검증 결과를 설명하기 위한 도면이다.
도 16은 일 실시예에 따라, OpenCL 커널을 처리하는 방법을 도시한 흐름도이다.
도 17은 일 실시예에 따라, OpenCL 커널을 처리하는 방법을 도시한 상세 흐름도이다.
본 실시예들에서 사용되는 용어는 본 실시예들에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 기술분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 임의로 선정된 용어도 있으며, 이 경우 해당 실시예의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서, 본 실시예들에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 실시예들의 전반에 걸친 내용을 토대로 정의되어야 한다.
실시예들에 대한 설명들에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 구성요소를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 실시예들에 기재된 "...부", "...모듈"의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 실시예들에서 사용되는 "구성된다" 또는 "포함한다" 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
하기 실시예들에 대한 설명은 권리범위를 제한하는 것으로 해석되지 말아야 하며, 해당 기술분야의 당업자가 용이하게 유추할 수 있는 것은 실시예들의 권리범위에 속하는 것으로 해석되어야 할 것이다. 이하 첨부된 도면들을 참고하면서 오로지 예시를 위한 실시예들을 상세히 설명하기로 한다.
도 1은 OpenCL 플랫폼을 설명하기 위한 도면이다.
OpenCL(Open Computing Language)은 서로 다른 형태의 컴퓨트 디바이스들이 동시에 동작할 수 있도록 구현할 수 있는 프로그래밍 언어 중 하나이다. 따라서, OpenCL로 작성된 프로그램은 다중 플랫폼에서 동시에 동작할 수 있다.
도 1을 참고하면, OpenCL 플랫폼(100)은 호스트 프로세서(host processor)(110)와 적어도 하나의 컴퓨트 디바이스(Compute Device, CD)(120 내지 140)를 포함할 수 있다.
호스트 프로세서(110)는 호스트 프로그램이 실행되는 프로세서로, 커널(kernel)을 실행하기 위한 작업 공간(work space)을 정의할 수 있다. 여기서, 작업 공간은 작업 그룹(work group)으로 분할될 수 있고, 작업 그룹은 복수 개의 작업 아이템(work item)들을 포함할 수 있다. 여기서 작업 아이템은 작업 공간의 각 포인트에 해당되며, 작업의 최소 단위가 된다. 예를 들어, 호스트 프로세서(110)는 범용 CPU일 수 있으나, 이에 제한되지 않는다.
컴퓨트 디바이스(120 내지 140)는 적어도 하나의 컴퓨트 유닛(compute unit, CU)(121 내지 122)을 포함할 수 있다. 또한, 컴퓨트 유닛(121 내지 122)은 적어도 하나의 프로세싱 엘리먼트(processing element, PE)(10 내지 40)를 포함할 수 있다. 여기서, 컴퓨트 유닛(121 내지 122)은 작업 그룹을 처리하는 단위가 될 수 있고, 프로세싱 엘리먼트(10 내지 40)는 작업 아이템을 처리하는 단위가 될 수 있다. 예를 들어, 컴퓨트 유닛(121 내지 122)은 호스트 프로세서(110)로부터 수신된 하나의 작업 그룹을 처리할 수 있고, 프로세싱 엘리먼트(10 내지 40)는 작업 그룹에 포함된 작업 아이템 각각을 처리할 수 있다. 따라서, 작업 그룹에 포함된 작업 아이템들은 프로세싱 엘리먼트(10 내지 40)에 의해 병렬적으로 처리될 수 있다. 한편, 컴퓨트 디바이스(120 내지 140)는 매니 코어 프로세서, 멀티 코어 프로세서일 수 있으나, 적어도 하나의 코어를 가지는 프로세서이면, 이에 제한되지 않는다.
한편, OpenCL 프로그램은 하나의 호스트 프로그램과 적어도 하나의 커널을 포함할 수 있다. 호스트 프로그램은 호스트 프로세서(110)에 의해 실행되며, 호스트 프로세서(110)에서 커맨드(command)를 통해 컴퓨트 디바이스(120 내지 140)에게 계산을 지시하거나, 컴퓨트 디바이스(120 내지 140)에 장착된 메모리를 관리할 수 있다. 여기서 커널은 컴퓨트 디바이스(120 내지 140)에서 실행되는 프로그램을 의미하며, OpenCL 커널 또는 커널 코드로 표현될 수 있다.
만약, 복수 개의 코어들이 포함된 컴퓨팅 장치에서 커널이 실행될 경우, 컴퓨팅 장치는 컴퓨트 디바이스와 대응될 수 있고, 각 코어는 컴퓨트 유닛(121 내지 122)과 대응될 수 있다. 다시 말해서, 컴퓨팅 장치의 코어는 작업 그룹을 할당 받아 처리할 수 있고, 코어에 포함된 프로세싱 엘리먼트(10 내지 40)는 작업 그룹에 포함된 각 작업 아이템을 처리할 수 있다.
한편, 컴퓨팅 장치는 호스트 프로세서(110)로부터 작업 그룹을 수신할 수 있다.
구체적으로, 호스트 프로세서(110)는 각 코어에 의해 처리되는 작업 그룹의 처리 결과에 따라, 작업 그룹을 각 코어에 동적으로 할당시킬 수 있다. 이러한 경우, 호스트 프로세서(110)는 작업 그룹을 동적으로 할당하는 작업 분배 관리자를 포함할 수 있다.
그러나, 하나의 작업 분배 관리자가 복수 개의 코어들에 작업 그룹을 동적으로 할당하는 경우, 코어의 수에 따라 작업 분배 관리자가 수행해야 하는 분배 작업의 양이 증가하여, 전체 컴퓨팅 장치의 성능이 저하될 수 있다. 또한, 작업 분배 관리자가 복수 개의 코어들에 작업 그룹을 정적으로 할당하는 경우, 각 작업 그룹의 처리 시간이 상이하여, 전체 컴퓨팅 장치의 작업 효율이 저하될 수 있다. 더불어, 호스트 프로세서(110)에 작업 분배 관리자가 포함되면 호스트 프로세서(110)에 부담이 증가될 수 있다.
한편, 컴퓨팅 장치에 포함된 하나의 코어가 작업 분배 관리자인 경우, 해당 코어는 컴퓨트 유닛(121 내지 122)으로 활용될 수 없다. 따라서, 복수 개의 코어들이 포함된 컴퓨팅 장치에서 OpenCL 커널이 실행되는 경우, 작업 그룹을 효율적으로 할당할 수 있는 방법이 요구된다.
도 2는 일 실시예에 따른, 컴퓨팅 장치의 구성을 나타낸 블록도이다.
일 실시예에 따른 컴퓨팅 장치(200)는 복수 개의 코어들을 포함하며, 복수 개의 코어들은 컨트롤 코어 그룹(210)과 프로세싱 코어 그룹(220)으로 분류될 수 있다. 도 2에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 관련 기술 분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
한편, 도 1의 구성과 비교하면, 도 2의 컴퓨팅 장치(200)는 도 1의 컴퓨트 디바이스(120 내지 140)와 대응될 수 있다.
컨트롤 코어 그룹(210)은 OpenCL 커널을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어 및 프로세싱 코어에 할당하는, 컨트롤 코어의 집합을 의미한다. 여기서, 컨트롤 코어의 사양은 프로세싱 코어의 사양과 동일할 수 있으나, 작업 그룹을 할당하는 기능을 수행할 수 있는 사양이라면, 이에 제한되지 않는다.
프로세싱 코어 그룹(220)은 컨트롤 코어 그룹(210)에 의해 할당된 작업 그룹을 처리하고, 작업 그룹의 처리 결과를 출력하는, 프로세싱 코어의 집합을 의미한다. 여기서, 각 프로세싱 코어는 적어도 하나의 프로세싱 엘리먼트를 포함할 수 있다. 예를 들어, 프로세싱 코어는 매니 코어 프로세서의 각 코어와 대응될 수 있으나, 이에 제한되지 않는다.
여기서 컨트롤 코어 그룹(210)에 포함된 복수 개의 컨트롤 코어들은, 컨트롤 코어들에 의해 작업 그룹이 할당되는 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다. 컨트롤 코어 그룹(210)이 계층적으로 분류되는 예시는 도 3을 통해 설명하기로 한다.
도 3은 다른 일 실시예에 따른, 컴퓨팅 장치의 구성을 나타낸 블록도이다.
도 3을 참고하면, 컴퓨팅 장치(300)는 컨트롤 코어 그룹(320)과 프로세싱 코어 그룹(360)을 포함할 수 있다. 여기서, 컨트롤 코어 그룹(320)은 하나의 최상위 컨트롤 코어(330)와 최하위 컨트롤 코어 그룹(350)을 포함할 수 있다. 또한, 컴퓨팅 장치(300)는 컨트롤 코어 그룹(320)의 계층 구조에 따라, 중간 컨트롤 코어 그룹(340)을 더 포함할 수 있다. 한편, 도 3의 프로세싱 코어 그룹(360)은 도 2의 프로세싱 코어 그룹(220)과 대응되므로, 자세한 설명은 생략한다.
최상위(root) 컨트롤 코어(330)는 OpenCL 커널의 실행 정보가 수신됨에 따라, 작업 그룹을 하위 계층의 컨트롤 코어에 할당할 수 있다. 도 3에서는 최상위 컨트롤 코어(330)의 하위 계층의 컨트롤 코어를 중간 컨트롤 코어 그룹(340)으로 표시하였으나, 최상위 컨트롤 코어(330)의 하위 계층의 컨트롤 코어는 컨트롤 코어 그룹(320)의 계층 구조에 따라, 중간 컨트롤 코어 그룹(340) 및 최하위 컨트롤 코어 그룹(350) 중 적어도 하나가 될 수 있음은 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
한편, 최상위 컨트롤 코어(330)는 호스트 프로세서(310)로부터 OpenCL 커널의 실행 정보를 수신할 수 있다. 구체적으로, 호스트 프로세서(310)는 OpenCL 커널이 실행됨에 따라, OpenCL 커널의 실행 정보를 생성하여, 최상위 컨트롤 코어(330)에게 전송할 수 있다. 여기서, OpenCL 커널의 실행 정보는 OpenCL 커널이 실행되기 위한 전체 작업 그룹의 수 및 OpenCL 커널이 포함된 어플리케이션 정보 중 적어도 하나를 포함할 수 있다.
최하위(leaf) 컨트롤 코어 그룹(350)은 상위 계층의 컨트롤 코어에 의해 할당된 작업 그룹에 관한 정보를 수신하여, 프로세싱 코어에 작업 그룹을 할당하는, 복수 개의 최하위 컨트롤 코어들을 포함할 수 있다. 도 3에서는 최하위 컨트롤 코어 그룹(350)의 상위 계층의 컨트롤 코어를 중간 컨트롤 코어 그룹(340)으로 표시하였으나, 최하위 컨트롤 코어의 상위 계층의 컨트롤 코어는 컨트롤 코어 그룹(320)의 계층 구조에 따라, 최상위 컨트롤 코어(330) 및 중간 컨트롤 코어 그룹(340) 중 적어도 하나가 될 수 있음은 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
중간 컨트롤 코어 그룹(340)은 최상위 컨트롤 코어(330)에 의해 할당된 작업 그룹에 대한 정보를 수신하여, 최하위 컨트롤 코어 그룹(350)에 작업 그룹을 할당하는, 복수 개의 중간 컨트롤 코어들을 포함할 수 있다. 또한, 중간 컨트롤 코어 그룹(340)은 여러 계층으로 분류될 수 있다. 도 3을 참고하면, 중간 컨트롤 코어들은, 중간 컨트롤 코어들에 의해 작업 그룹이 할당되는 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다. 이러한 경우, 상위 계층의 중간 컨트롤 코어(341)는 하위 계층의 중간 컨트롤 코어(342)에 작업 그룹을 할당할 수 있다.
도 4는 일 실시예에 따른 컨트롤 코어에 의해 작업 그룹이 할당된 프로세싱 코어의 수를 설명하기 위한 도면이다.
일 실시예에 따르면, 컨트롤 코어 그룹(210)에 포함된 컨트롤 코어들은, 컨트롤 코어들에 의해 작업 그룹이 할당되는 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다.
도 4는 8x8 프로세싱 코어들이 포함된 프로세싱 코어 그룹을 나타낸 도면이다. 도 4를 참고하면, 최상위 컨트롤 코어(320)에 의해 작업 그룹이 할당되는 프로세싱 코어(410)는 전체 프로세싱 코어 그룹일 수 있다.
한편, 중간 컨트롤 코어는 프로세싱 코어 그룹에 포함된 프로세싱 코어 일부(420)에 작업 그룹을 할당할 수 있다. 예를 들어, 도 4에서 중간 컨트롤 코어 그룹(340)이 총 4개의 중간 컨트롤 코어들을 포함한다면, 하나의 중간 컨트롤 코어가 작업 그룹을 할당할 수 있는 프로세싱 코어의 수는 16 개일 수 있다. 한편, 중간 컨트롤 코어가 작업 그룹을 할당할 수 있는 프로세싱 코어의 수는 각 중간 컨트롤 코어마다 다를 수 있음은 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
한편, 최하위 컨트롤 코어는 상위 계층의 컨트롤 코어로부터 할당된 작업 그룹에 관한 정보를 수신하여, 프로세싱 코어에게 직접 작업 그룹을 할당할 수 있다. 예를 들어, 최하위 컨트롤 코어는 중간 컨트롤 코어에 의해 작업 그룹이 할당된 프로세싱 코어 중 일부(430)에 작업 그룹을 할당할 수 있다. 따라서, 최하위 컨트롤 코어에 의해 작업 그룹이 할당되는 프로세싱 코어의 수는 중간 컨트롤 코어에 의해 작업 그룹이 할당되는 프로세싱 코어의 수보다 적다.
또한, 일 실시예에 따른 최하위 컨트롤 코어는 근접한 복수 개의 프로세싱 코어들에게 작업 그룹을 할당하기 때문에, 지역성(locality)을 가지는 작업 그룹을 할당하는 경우 적은 오버헤드로 작업 그룹의 지역성을 제공할 수 있다.
또한, 일 실시예에 따른 컴퓨팅 장치(320)는 프로세싱 코어 그룹(220)외 컨트롤 코어 그룹(210)을 추가적으로 포함하고 있기 때문에, 모든 프로세싱 코어가 작업 그룹을 처리할 수 있다. 또한, 컨트롤 코어 그룹(210)이 계층적으로 분류되어 있기 때문에, 작업 그룹을 동적으로 할당하는데 효율적이다. 계층적으로 분류된 컨트롤 코어가 작업 그룹을 동적으로 할당하는 방법은 도 5를 통해 설명하기로 한다.
도 5는 일 실시예에 따른, OpenCL 커널을 실행하기 위한 작업 그룹을 동적으로 할당하는 방법을 설명하기 위한 도면이다.
일 실시예에 따른 컨트롤 코어 그룹은 하위 계층의 컨트롤 코어 및 프로세싱 코어의 작업 그룹의 처리 결과에 따라, 다른 하위 계층의 컨트롤 코어 및 다른 프로세싱 코어에 할당된 작업 그룹을 재할당할 수 있다. 한편, 도 5의 호스트 프로세서(510)는 도 3의 호스트 프로세서(310)와 대응되므로, 자세한 설명은 생략한다.
도 5를 참고하면, 최하위 컨트롤 코어(550)는 프로세싱 코어(560)에 할당된 작업 그룹의 처리가 완료되면, 다른 최하위 프로세싱 코어에 할당되었던 작업 그룹을 프로세싱 코어(560)에게 재할당할 수 있다. 또한, 최하위 컨트롤 코어(550)는 중간 컨트롤 코어(540)에게 작업 그룹의 추가 요청을 전송할 수 있다. 여기서, 최하위 컨트롤 코어(550)는 프로세싱 코어(560)로부터 작업 그룹의 추가 요청을 수신하거나, 프로세싱 코어(560)의 작업 그룹의 진행 상황을 주기적으로 확인함으로써, 프로세싱 코어(560)에 할당된 작업 그룹의 처리가 완료되었는지 여부를 판단할 수 있다.
중간 컨트롤 코어(540)는 최하위 컨트롤 코어(550)에 할당된 작업 그룹의 처리가 완료되면, 다른 최하위 컨트롤 코어에 할당되었던 작업 그룹을 최하위 컨트롤 코어(550)에게 재할당 할 수 있다. 또한, 중간 컨트롤 코어(540)는 최상위 컨트롤 코어(530)에게 작업 그룹의 추가 요청을 전송할 수 있다.
최상위 컨트롤 코어(530)는 중간 컨트롤 코어(540)에 할당된 작업 그룹의 처리가 완료되면, 다른 중간 컨트롤 코어에 할당되었던 작업 그룹을 중간 컨트롤 코어(540)에게 재할당 할 수 있다.
또한, 최상위 컨트롤 코어(530)는 OpenCL 커널을 실행하기 위한 작업 그룹이 처리 중일 때, 호스트 프로세서(510)로부터 새로운 OpenCL 커널의 실행 정보가 수신됨에 따라, 프로세싱 코어 그룹에 할당된 작업 그룹을 재할당할 수 있다.
도 6은 일 실시예에 따른, 컴퓨팅 장치의 구조를 설명하기 위한 도면이다.
도 6을 참고하면, 컴퓨팅 장치(630)는 호스트 프로세서(610) 및 메모리(620)와 연결될 수 있다. 또한, 컴퓨팅 장치(630)는 최상위 컨트롤 코어(631), 최하위 컨트롤 코어(633) 및 프로세싱 코어(634)를 포함할 수 있고, 컨트롤 코어 그룹의 계층 구조에 따라, 중간 컨트롤 코어(632)를 더 포함할 수 있다.
도 6을 참고하면, 최상위 컨트롤 코어(631)는 중간 컨트롤 코어(632)와 연결되어 있다. 따라서, 최상위 컨트롤 코어(631)는 작업 그룹을 할당하기 위하여 프로세싱 코어(634)에 직접 접근하는 대신, 중간 컨트롤 코어(632) 또는 최하위 컨트롤 코어(633)에게, 프로세싱 코어(634)에 할당된 작업 그룹에 관한 정보를 전송할 수 있다. 중간 컨트롤 코어(632)는 최하위 컨트롤 코어(633)와 연결되어 있으므로, 프로세싱 코어 그룹의 일부에 할당된 작업 그룹에 관한 정보를 최하위 컨트롤 코어(633)에 전송할 수 있다. 최하위 컨트롤 코어(633)의 경우, 프로세싱 코어(634)와 연결되어 있어, 프로세싱 코어(634)에 할당된 작업 그룹에 대한 정보를 직접 전송할 수 있다.
한편, 최상위 컨트롤 코어(631)는 호스트 프로세서(610)와 연결되어, OpenCL 커널이 실행될 때 생성된 작업 그룹에 관한 정보를 수신할 수 있다. 또한, 컨트롤 코어 그룹 및 프로세싱 코어 그룹에 포함된 코어들은 메모리(620)로부터 작업 그룹을 할당하는 데 필요한 정보와 작업 그룹을 처리하는 데 필요한 정보를 수신할 수 있다.
도 7은 다른 일 실시예에 따른, 최하위 컨트롤 코어와 프로세싱 코어들을 설명하기 위한 도면이다.
일 실시예에 따른 하나의 최하위 컨트롤 코어(730)는 복수 개의 프로세싱 코어(710)들에 작업 그룹을 할당할 수 있다. 예를 들어 도 7을 참고하면, 최하위 컨트롤 코어(730)는 4개의 프로세싱 코어(710)들에 연결되어, 직접 작업 그룹을 할당하고, 작업 그룹의 처리 결과 또는 작업 그룹의 추가 요청을 수신할 수 있다.
또한, 프로세싱 코어(710)는 작업 그룹을 처리하는 코어(711)외 외부 장치와 통신을 연결하기 위한 라우터(712)를 더 포함할 수 있다. 프로세싱 코어(710)는 라우터(712)를 통해, 외부 라우터(720)와 연결될 수 있고, 외부 라우터(720)는 최하위 컨트롤 코어(730)와 연결될 수 있다. 따라서, 프로세싱 코어(710)는 최하위 컨트롤 코어(710)로부터 작업 그룹에 관한 정보를 수신할 수 있다. 도 7은 프로세싱 코어(710)에 단일 코어(711)가 포함된 것으로 도시하였으나, 프로세싱 코어(710)내 코어(711)의 수는 이에 제한되지 않는다.
한편, 라우터(712) 및 외부 라우터(720)는 NoC(Network on Chip) 통신 방식 또는 버스 통신 방식에 따라 통신을 수행할 수 있으나, 라우터(712)와 외부 라우터(720)간 통신 방식은 이에 제한되지 않는다.
또한, 도 7에는 최하위 컨트롤 코어(730)가 4개의 프로세싱 코어(710)에게 작업 그룹을 할당할 수 있는 것으로 도시되었으나, 최하위 컨트롤 코어(730)가 작업 그룹을 할당할 수 있는 프로세싱 코어(710)의 수는 이에 제한되지 않는다.
도 8은 일 실시예에 따라, 프로세싱 코어에서 실행되는 OpenCL 커널 코드이다.
도 8은 행렬 a의 원소와 행렬 b의 원소를 더하여 그 결과를 행렬 c에 저장하는 커널 코드이다. 행렬 a와 행렬 b는 2차원 매트릭스이므로, 도 8의 커널 코드를 실행하기 위해서는 2차원 작업 그룹 공간이 필요하다. 다시 말해서, 행렬 a와 행렬 b의 각 원소는 작업 공간의 각 포인트인 작업 아이템이 될 수 있다.
한편, 도 6의 컴퓨팅 장치(630)에서 도 8의 커널 코드가 실행되면, 프로세싱 코어(634)는 행렬 a의 원소와 행렬 b의 원소를 불러오기 위해, 메모리(620)에 접근할 수 있다. 여기서, 함수 get_global_id()는 메모리(620)에서 커널 코드의 인덱스를 불러오는 함수이다. 따라서, 프로세싱 코어(634)가 도 8의 커널 코드를 실행할 때, 복수 개의 작업 아이템들이 병렬적으로 처리될 수 있지만, 작업 아이템들을 불러오기 위해 메모리(620)에 여러 번 접근해야 하므로, 커널 코드를 처리하는 시간이 증가될 수 있다.
도 9은 다른 일 실시예에 따른, 컴퓨팅 장치를 설명하기 위한 도면이다.
일 실시예에 따른 컴퓨팅 장치(920)는 작업 그룹에 관한 정보를 저장하는 버퍼를 더 포함할 수 있다. 버퍼가 포함된 컴퓨팅 장치(920)는 작업 그룹에 관한 정보를 버퍼에서 읽어오기 때문에, 메모리에 접근하는 횟수를 줄일 수 있다. 한편, 도 9의 호스트 프로세서(910) 및 최상위 컨트롤 코어(930)는 도 5의 호스트 프로세서(510) 및 최상위 컨트롤 코어(530)와 각각 대응되므로, 자세한 설명은 생략한다.
도 9를 참고하면, 최하위 컨트롤 코어(950)와 프로세싱 코어(960)는 제 2 버퍼(970)와 연결될 수 있다. 제 2 버퍼(970)는 최하위 컨트롤 코어(950)에서 전달된 프로세싱 코어(960)에 할당된 작업 그룹의 수와 해당 작업 그룹의 ID를 저장할 수 있다. 따라서, 최하위 컨트롤 코어(950)는 메모리에 접근하지 않고, 제 2 버퍼(970)에 저장된 프로세싱 코어(960)에 할당된 작업 그룹에 관한 정보를 읽음으로써, 프로세싱 코어(960)의 작업 그룹의 처리 결과를 확인할 수 있다. 최하위 컨트롤 코어(950)는 프로세싱 코어(960)에 할당된 작업 그룹의 처리가 완료된 것으로 판단되면, 다른 프로세싱 코어에 할당된 작업 그룹을 프로세싱 코어(960)에게 재할당할 수 있다. 한편, 제 2 버퍼(970)는 프로세싱 코어(960)에 포함되어, 프로세싱 코어(960)의 라우터(712)를 통해, 최하위 컨트롤 코어(950)에 연결될 수 있으나, 제 2 버퍼(970)의 위치는 이에 제한되지 않는다.
또한, 중간 컨트롤 코어(940)와 최하위 컨트롤 코어(950)는 제 1 버퍼(960)와 연결될 수 있다. 제 1 버퍼(960)는 중간 컨트롤 코어(940)에서 전달된 최하위 컨트롤 코어(950)에 할당된 작업 그룹의 수와 해당 작업 그룹의 ID를 저장할 수 있다. 따라서, 중간 컨트롤 코어(940)는 메모리에 접근하지 않고, 제 1 버퍼(960)에 저장된 최하위 컨트롤 코어(950)에 할당된 작업 그룹에 관한 정보를 읽음으로써, 최하위 컨트롤 코어(950)의 작업 그룹의 처리 결과를 확인할 수 있다. 중간 컨트롤 코어(940)는 최하위 컨트롤 코어(950)에 할당된 작업 그룹의 처리가 완료된 것으로 판단되면, 다른 최하위 컨트롤 코어에 할당된 작업 그룹을 최하위 컨트롤 코어(950)에게 재할당할 수 있다. 한편, 제 1 버퍼(960)는 최하위 컨트롤 코어(950)에 포함될 수 있으나, 제 1 버퍼(960)의 위치는 이에 제한되지 않는다.
또한, 도 9의 컴퓨팅 장치(920)는 2개의 버퍼(960, 970)를 포함하고 있으나, 버퍼의 수는 이에 제한되지 않는다.
도 10은 일 실시예에 따른, 버퍼를 설명하기 위한 도면이다.
도 10을 참고하면, 버퍼(1030)는 최하위 컨트롤 코어(1010)와 프로세싱 코어(1020)에 연결될 수 있다. 또한, 버퍼(1030)는 프로세싱 코어(1020)에 할당된 작업 그룹의 ID와 프로세싱 코어(1020)에 할당된 작업 그룹의 수를 저장할 수 있다.
예를 들어, 최하위 컨트롤 코어(1010)는 프로세싱 코어(1020)에 작업 그룹을 할당한 후, 해당 작업 그룹의 ID와 프로세싱 코어(1020)에 할당된 작업 그룹의 수를 버퍼(1030)에 전달할 수 있다. 프로세싱 코어(1020)는 작업 그룹을 처리한 후, 버퍼(1030)에 저장된 프로세싱 코어(1020)에 할당된 작업 그룹의 수를 업데이트할 수 있다. 따라서, 최하위 컨트롤 코어(1010)는 메모리에 접근하지 않고, 버퍼(1030)를 확인함으로써, 프로세싱 코어(1020)의 작업 그룹 처리 결과를 확인할 수 있다.
도 11은 일 실시예에 따라 버퍼가 추가된 경우, 프로세싱 코어에서 실행되는 OpenCL 커널 코드이다.
도 11의 커널 코드는 버퍼(1030)를 이용하여 도 8의 커널 코드와 동일한 기능을 수행하는 코드이다. 다시 말해서, 도 11의 커널 코드는 버퍼(1030)가 추가된 프로세싱 코어(1020)에 의해 실행되는, 행렬 a의 원소와 행렬 b의 원소를 더하여 그 결과를 행렬 c에 저장하는 커널 코드이다.
도 11을 참고하면, 함수 read_wg_id()는 프로세싱 코어(1020)에 할당된 작업 그룹의 ID를 버퍼(1030)로부터 읽어오는 함수이다. 따라서, 도 11의 커널 코드는 함수 read_wg_id()를 통해 버퍼(1030)에 저장된 작업 그룹의 ID를 커널 코드의 인덱스로서 활용하기 때문에, 메모리에 접근하지 않아도 각 프로세싱 코어(1020)가 병렬적으로 작업 그룹을 처리할 수 있다.
도 12는 다른 일 실시예에 따라 버퍼가 추가된 경우, OpenCL 작업 그룹을 실행하는 OpenCL 커널 코드이다.
일 실시예에 따라 프로세싱 코어(1020)가 적어도 하나의 프로세싱 엘리먼트를 포함하고 작업 그룹에 포함된 작업 아이템의 수보다 프로세싱 엘리먼트의 수가 적으면, 컴퓨팅 장치는 프로세싱 엘리먼트가 작업 아이템을 직렬화하여, 순차적으로 실행할 수 있도록 OpenCL 커널을 변환할 수 있다.
구체적으로, 작업 그룹에 포함된 작업 아이템의 수보다 프로세싱 엘리먼트의 수가 적은 경우, 프로세싱 엘리먼트는 복수 개의 작업 아이템들을 처리할 수 있다. 이러한 경우, 프로세싱 엘리먼트는 할당된 작업 아이템의 처리가 완료될 때마다 완료된 작업 아이템에 관한 정보를 메모리에 저장한 후, 새로운 작업 아이템으로 스위칭할 수 있다. 따라서, 프로세싱 엘리먼트가 복수 개의 작업 아이템들을 처리할 때, 프로세싱 엘리먼트가 메모리에 접근하는 횟수가 증가될 수 있다.
프로세싱 엘리먼트에 의한 메모리의 접근 횟수를 줄이기 위해, 컴퓨팅 장치는 작업 아이템 합체(work item coalescing) 방법에 기초하여, 프로세싱 엘리먼트가 복수 개의 작업 아이템들을 직렬화하여 처리할 수 있도록 커널 코드를 변환할 수 있다.
도 12를 참고하면, 함수 read_num_wgs()는 프로세싱 코어(1020)에 연속적으로 할당된 작업 그룹의 수를 버퍼(1030)로부터 읽어오는 함수이다.
따라서, 도 12의 커널 코드는 버퍼(1030)에 저장된 정보를 읽는 함수 read_wg_id() 및 함수 read_num_wgs()에 기초하여, 커널 코드의 인덱스를 설정하기 때문에, 프로세싱 코어(1020)에 의한 메모리 접근 횟수를 감소시킬 수 있다. 또한, 커널 코드를 감싸는 루프가 적용되어 있어, 실행되어야 하는 커널 코드를 하나의 작업 아이템을 실행할 때마다 호출할 필요 없이, 한 번의 커널 코드의 호출로 복수 개의 작업 아이템들을 순차적으로 실행할 수 있다. 따라서, 작업 아이템 합체 방법을 적용하지 않는 경우에 비해, 프로세싱 코어(1020)의 메모리 접근 횟수를 감소시킬 수 있다.
도 13 및 도 14는 일 실시예에 따른 컴퓨팅 장치의 성능을 검증하기 위한 실험 환경을 나타낸 도면이다.
도 13은 일 실시예에 따른 컴퓨팅 장치에 다른 스케줄링 기법을 적용한 경우, 작업 그룹을 할당하는 데 필요한 지연 시간을 나타낸 도면이다. 여기서, 컴퓨팅 장치에 포함된 프로세싱 그룹은 96 개의 프로세싱 코어들을 포함하고, 컴퓨팅 장치에 포함된 컨트롤 코어 그룹은 1 개의 최상위 컨트롤 코어, 4 개의 중간 컨트롤 코어들 및 16 개의 최하위 컨트롤 코어들을 포함하는 것이 전제된다. 또한, 컨트롤 코어와 프로세싱 코어는 각각 50 MHz 및 500MHz의 클럭 주파수(clock frequency)로 동작되는 것이 전제된다.
도 13의 집중적 스케줄링 방법은 단일 컨트롤 코어가 모든 프로세싱 코어들에 작업 그룹을 동적으로 할당하는 스케줄링 방법을 의미한다. 분산 스케줄링 방법은 계층적으로 분류된 컨트롤 코어들이 프로세싱 코어들에 작업 그룹을 동적으로 할당하는 스케줄링 방법을 의미한다. 또한, 하드웨어 지원 항목은 컴퓨팅 장치가 버퍼를 포함하는 지 여부를 나타내는 항목이다.
도 13을 참고하면, 분산 스케줄링 방법이 적용된 컴퓨팅 장치의 지연 시간은 집중적 스케줄링 방법이 적용된 컴퓨팅 장치의 지연 시간보다 짧다. 따라서, 계층적으로 분류된 여러 컨트롤 코어들이 96 개의 프로세싱 코어들에 작업 그룹을 동적으로 할당하는 시간이, 단일 컨트롤 코어가 작업 그룹을 동적으로 할당하는 시간보다 짧아지는 것을 알 수 있다.
한편, 동일한 스케줄링 방법이 적용된 경우, 버퍼가 추가된 컴퓨팅 장치의 지연 시간은 버퍼가 없는 컴퓨팅 장치의 지연 시간보다 짧다. 따라서, 버퍼가 추가된 컴퓨팅 장치는 메모리에 접근하는 횟수가 감소되기 때문에, 작업 그룹을 처리하는 지연 시간이 짧아지는 것을 알 수 있다.
도 14를 참고하면, 컴퓨팅 장치의 성능을 검증하기 위해, 상이한 4 개의 어플리케이션들이 실행되는 것이 전제된다. 구체적으로, PI estimation 어플리케이션은 다른 어플리케이션들에 비하여, 할당되는 작업 그룹의 처리 시간이 긴 특성을 갖는다. Small buffer copy 및 Big buffer copy 어플리케이션은 다른 어플리케이션들에 비하여, 메모리 접근 횟수가 많은 특성을 갖는다. 또한, SpMV 어플리케이션은 다른 어플리케이션들에 비하여, 메모리 접근이 일정하지 않고, 할당된 작업 그룹들을 처리하는 시간이 비균일한 특성을 갖는다.
도 15는 일 실시예에 따른 컴퓨팅 장치의 성능의 검증 결과를 설명하기 위한 도면이다.
도 15는 이상적인 스케줄링의 성능에 기초하여, 컴퓨팅 장치에 의해 4 개의 어플리케이션들이 실행될 때 스케줄링의 성능을 정규화한 결과이다.
도 15를 참고하면, 집중적 스케줄링 방법이 적용된 컴퓨팅 장치의 스케줄링 성능은 분산 스케줄링 방법이 적용된 컴퓨팅 장치의 스케줄링 성능보다 전체적으로 낮은 것을 알 수 있다. 구체적으로 SpMV 어플리케이션의 경우, 집중적 스케줄링 방법 이 적용된 컴퓨팅 장치와 분산 스케줄링 방법이 적용된 컴퓨팅 장치간 스케줄링 성능 차이가 큰 것을 알 수 있다.
또한, 버퍼가 추가된 컴퓨팅 장치가 분산 스케줄링에 기초하여 작업 그룹의 스케줄링을 수행하는 경우, 분산 스케줄링만 적용된 컴퓨팅 장치에 비해 스케줄링 성능이 더 좋은 것을 알 수 있다. 구체적으로, 메모리 접근 횟수가 많은 Small buffer copy 및 Big buffer copy 어플리케이션이, 버퍼의 유무에 따른 스케줄링 성능 차이가 큰 것을 알 수 있다.
도 16은 일 실시예에 따라, OpenCL 커널을 처리하는 방법을 도시한 흐름도이다.
단계 1610에서, 컨트롤 코어 그룹(320)은 OpenCL 커널을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어 및 프로세싱 코어에 할당할 수 있다. 여기서, 컨트롤 코어 그룹(320)에 포함된 복수 개의 컨트롤 코어들은, 컨트롤 코어들에 의해 작업 그룹이 할당되는 프로세싱 코어의 수에 따라, 계층적으로 분류될 수 있다.
구체적으로, 컨트롤 코어 그룹(320)은 최상위 컨트롤 코어(330) 및 최하위 컨트롤 코어 그룹(350)을 포함할 수 있다.
최상위 컨트롤 코어(320)는 OpenCL 커널의 실행 정보가 수신됨에 따라, 작업 그룹을 하위 계층의 컨트롤 코어에 할당하고, 할당된 작업 그룹에 관한 정보를 하위 계층의 컨트롤 코어에 전송할 수 있다. 최하위 컨트롤 코어 그룹(350)은 상위 계층의 컨트롤 코어에 의해 할당된 작업 그룹에 관한 정보를 수신하여, 프로세싱 코어에 작업 그룹을 할당하는, 적어도 하나의 최하위 컨트롤 코어를 포함할 수 있다.
또한, 컨트롤 코어 그룹(320)은 최상위 컨트롤 코어(330)에 의해 할당된 작업 그룹에 대한 정보를 수신하여, 최하위 컨트롤 코어 그룹(350)에 작업 그룹을 할당하는, 복수 개의 중간 컨트롤 코어들이 포함된, 중간 컨트롤 코어 그룹(340)을 더 포함할 수 있다.
일 실시예에 따라, 중간 컨트롤 코어들이, 중간 컨트롤 코어들에 의해 작업 그룹이 할당되는 프로세싱 코어의 수에 따라, 계층적으로 분류될 때, 단계 1610에서, 상위 계층의 중간 컨트롤 코어는 하위 계층의 중간 컨트롤 코어에 작업 그룹을 할당할 수 있다.
단계 1620에서, 적어도 하나의 프로세싱 코어가 포함된 프로세싱 코어 그룹(360)은 컨트롤 코어 그룹(320)에 의해 할당된 작업 그룹을 처리할 수 있다.
단계 1630에서, 프로세싱 코어 그룹(360)은 작업 그룹의 처리 결과를 출력할 수 있다.
도 17은 일 실시예에 따라, OpenCL 커널을 처리하는 방법을 도시한 상세 흐름도이다.
도 17은 도 16을 따르는 컴퓨팅 장치(300)가 OpenCL 커널을 처리하는 방법을 상세하게 설명하기 위한 도면으로, 컴퓨팅 장치(300)의 구성에 따라 OpenCL 커널을 처리하는 방법이 달라질 수 있음은 당해 기술분야의 통상의 기술자라면 이해할 수 있다. 또한, 도 17의 단계 1720, 단계 1730 및 단계 1740는 도 16의 단계 1610, 단계 1620 및 단계 1630과 각각 대응되므로, 자세한 설명은 생략한다.
단계 1710에서, 최상위 컨트롤 코어(330)는 OpenCL 커널이 실행됨에 따라, 호스트 프로세서(310)에 의해 생성된 OpenCL 커널의 실행 정보를 수신할 수 있다. 이러한 경우, 최상위 컨트롤 코어(330)는 OpenCL 커널을 실행하기 위한 작업 그룹이 처리 중일 때, 호스트 프로세서(310)로부터 새로운 OpenCL 커널의 실행 정보가 수신됨에 따라, 프로세싱 코어 그룹(360)에 할당된 작업 그룹을 재할당할 수 있다. 여기서, OpenCL 커널의 실행 정보는 OpenCL 커널이 실행되기 위한 전체 작업 그룹의 수 및 OpenCL 커널이 포함된 어플리케이션 정보를 포함할 수 있다.
또한, 일 실시예에 따른 OpenCL 커널을 처리하는 방법은 호스트 프로세서(310)가 컨트롤 코어 그룹(320)에 의해 프로세싱 코어 그룹(360)에 작업 그룹의 할당이 완료되면, OpenCL 커널의 실행을 중단하고, 할당 결과를 수집하여 출력하는 단계를 더 포함할 수 있다.
또한, 일 실시예에 따른 OpenCL 커널을 처리하는 방법은 버퍼에 작업 그룹에 관한 정보를 저장하는 단계를 더 포함할 수 있다. 여기서, 작업 그룹에 관한 정보는 하위 계층의 컨트롤 코어 및 프로세싱 코어에 할당된 작업 그룹의 ID 및 할당된 작업 그룹의 수를 포함할 수 있다.
단계 1750에서, 컨트롤 코어 그룹(320)은 출력된 작업 그룹의 처리 결과에 따라, 하위 계층의 다른 컨트롤 코어 및 다른 프로세싱 코어에 할당된 작업 그룹을 재할당할 수 있다. 예를 들어, 최상위 컨트롤 코어(330)는 중간 컨트롤 코어 또는 최하위 컨트롤 코어의 작업 그룹의 처리 결과에 따라, 다른 중간 컨트롤 코어 또는 다른 최하위 컨트롤 코어에 할당된 작업 그룹을 재할당할 수 있다. 또한, 중간 컨트롤 코어는 하위 계층의 중간 컨트롤 코어 또는 최하위 컨트롤 코어의 작업 그룹의 처리 결과에 따라, 하위 계층의 다른 중간 컨트롤 코어 또는 다른 최하위 컨트롤 코어에 할당된 작업 그룹을 재할당할 수 있다. 또한, 최하위 컨트롤 코어는 프로세싱 코어의 작업 그룹의 처리 결과에 따라, 다른 프로세싱 코어에 할당된 작업 그룹을 재할당할 수 있다.
본 실시예들은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다.
본 실시예의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 포함되는 것으로 해석되어야 한다.

Claims (20)

  1. 복수 개의 코어들을 포함하는 컴퓨팅 장치에 있어서,
    OpenCL(Open Computing Language) 커널(kernel)을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어(control core) 및 프로세싱 코어(processing core)에 할당하는, 컨트롤 코어 그룹; 및
    적어도 하나의 상기 프로세싱 코어를 포함하고, 상기 컨트롤 코어 그룹에 의해 할당된 상기 작업 그룹을 처리하고, 상기 작업 그룹의 처리 결과를 출력하는, 프로세싱 코어 그룹;
    을 포함하고,
    상기 컨트롤 코어 그룹에 포함된 복수 개의 컨트롤 코어들은, 상기 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류되는, 컴퓨팅 장치.
  2. 제 1 항에 있어서,
    상기 컨트롤 코어 그룹은,
    상기 OpenCL 커널의 실행 정보가 수신됨에 따라, 상기 작업 그룹을 상기 하위 계층의 컨트롤 코어에 할당하고, 상기 할당된 작업 그룹에 관한 정보를 상기 하위 계층의 컨트롤 코어에 전송하는, 최상위(root) 컨트롤 코어; 및
    상위 계층의 컨트롤 코어에 의해 할당된 작업 그룹에 관한 정보를 수신하여, 상기 프로세싱 코어에 상기 작업 그룹을 할당하는, 적어도 하나의 최하위 컨트롤 코어를 포함한, 최하위(leaf) 컨트롤 코어 그룹;
    을 포함하는, 컴퓨팅 장치.
  3. 제 2 항에 있어서,
    상기 컨트롤 코어 그룹은,
    상기 하위 계층의 컨트롤 코어 및 상기 프로세싱 코어의 상기 작업 그룹의 처리 결과에 따라, 다른 하위 계층의 컨트롤 코어 및 다른 프로세싱 코어에 할당된 작업 그룹을 재할당하는, 컴퓨팅 장치.
  4. 제 2 항에 있어서,
    상기 컨트롤 코어 그룹은,
    상기 최상위 컨트롤 코어에 의해 할당된 작업 그룹에 대한 정보를 수신하여, 상기 최하위 컨트롤 코어 그룹에 상기 작업 그룹을 할당하는, 복수 개의 중간 컨트롤 코어들을 포함한, 중간 컨트롤 코어 그룹;
    을 더 포함하고,
    상기 중간 컨트롤 코어들은, 상기 중간 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류되고, 상위 계층의 중간 컨트롤 코어는 하위 계층의 중간 컨트롤 코어에 상기 작업 그룹을 할당하는, 컴퓨팅 장치.
  5. 제 2 항에 있어서,
    상기 최상위 컨트롤 코어는 상기 OpenCL 커널이 실행됨에 따라, 호스트 프로세서에 의해 생성된 상기 OpenCL 커널의 실행 정보를 수신하는, 컴퓨팅 장치.
  6. 제 5 항에 있어서,
    상기 최상위 컨트롤 코어는,
    상기 OpenCL 커널을 실행하기 위한 작업 그룹을 처리 중일 때, 상기 호스트 프로세서로부터 새로운 OpenCL 커널의 실행 정보가 수신됨에 따라, 상기 프로세싱 코어 그룹에 할당된 상기 작업 그룹을 재할당하는, 컴퓨팅 장치.
  7. 제 5 항에 있어서,
    상기 호스트 프로세서는,
    상기 컨트롤 코어 그룹에 의해 상기 프로세싱 코어 그룹에 상기 작업 그룹의 할당이 완료되면, 상기 OpenCL 커널의 실행을 중단하고, 할당 결과를 수집하여 출력하는, 컴퓨팅 장치.
  8. 제 1 항에 있어서,
    상기 프로세싱 코어는,
    적어도 하나의 프로세싱 엘리먼트를 포함하고,
    상기 작업 그룹에 포함된 작업 아이템의 수보다 상기 프로세싱 엘리먼트의 수가 적을 때, 상기 프로세싱 엘리먼트가 상기 작업 아이템을 직렬화하여, 순차적으로 실행할 수 있도록 상기 OpenCL 커널을 변환하는, 컴퓨팅 장치.
  9. 제 1 항에 있어서,
    상기 작업 그룹에 관한 정보를 저장하는, 버퍼;
    를 더 포함하는, 컴퓨팅 장치.
  10. 제 9 항에 있어서,
    상기 작업 그룹에 관한 정보는,
    상기 하위 계층의 컨트롤 코어 및 상기 프로세싱 코어에 할당된 작업 그룹의 수와 상기 할당된 작업 그룹의 ID 중 적어도 하나를 포함하는, 컴퓨팅 장치.
  11. 컨트롤 코어 그룹에 의해, OpenCL(Open Computing Language) 커널(kernel)을 실행하기 위한 작업 그룹을 하위 계층의 컨트롤 코어(control core) 및 프로세싱 코어(processing core)에 할당하는 단계;
    적어도 하나의 상기 프로세싱 코어가 포함된 프로세싱 코어 그룹에 의해, 상기 할당된 상기 작업 그룹을 처리하는 단계; 및
    상기 프로세싱 코어 그룹에 의해, 상기 작업 그룹의 처리 결과를 출력하는 단계;
    를 포함하고,
    상기 컨트롤 코어 그룹에 포함된 복수 개의 컨트롤 코어들은, 상기 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류되는, OpenCL 커널을 처리하는 방법.
  12. 제 11 항에 있어서,
    상기 컨트롤 코어 그룹은,
    상기 OpenCL 커널의 실행 정보가 수신됨에 따라, 상기 작업 그룹을 상기 하위 계층의 컨트롤 코어에 할당하고, 상기 할당된 작업 그룹에 관한 정보를 상기 하위 계층의 컨트롤 코어에 전송하는, 최상위(root) 컨트롤 코어; 및
    상위 계층의 컨트롤 코어에 의해 할당된 작업 그룹에 관한 정보를 수신하여, 상기 프로세싱 코어에 상기 작업 그룹을 할당하는, 적어도 하나의 최하위 컨트롤 코어를 포함한, 최하위(leaf) 컨트롤 코어 그룹;
    을 포함하는, OpenCL 커널을 처리하는 방법.
  13. 제 12 항에 있어서,
    상기 컨트롤 코어 그룹에 의해, 상기 출력된 상기 작업 그룹의 처리 결과에 따라, 하위 계층의 다른 컨트롤 코어 및 다른 프로세싱 코어에 할당된 작업 그룹을 재할당하는 단계;
    를 더 포함하는, OpenCL 커널을 처리하는 방법.
  14. 제 12 항에 있어서,
    상기 컨트롤 코어 그룹은,
    상기 최상위 컨트롤 코어에 의해 할당된 작업 그룹에 대한 정보를 수신하여, 상기 최하위 컨트롤 코어 그룹에 상기 작업 그룹을 할당하는, 복수 개의 중간 컨트롤 코어들을 포함한, 중간 컨트롤 코어 그룹;
    을 더 포함하고,
    상기 중간 컨트롤 코어들이, 상기 중간 컨트롤 코어들에 의해 상기 작업 그룹이 할당되는 상기 프로세싱 코어의 수에 따라, 계층적으로 분류될 때,
    상기 작업 그룹을 할당하는 단계는,
    상위 계층의 중간 컨트롤 코어에 의해, 하위 계층의 중간 컨트롤 코어에 상기 작업 그룹을 할당하는 단계;
    를 포함하는, OpenCL 커널을 처리하는 방법.
  15. 제 12 항에 있어서,
    상기 OpenCL 커널이 실행됨에 따라, 상기 최상위 컨트롤 코어에 의해, 호스트 프로세서에 의해 생성된 상기 OpenCL 커널의 실행 정보를 수신하는 단계;
    를 더 포함하는, OpenCL 커널을 처리하는 방법.
  16. 제 15 항에 있어서,
    상기 OpenCL 커널을 실행하기 위한 작업 그룹을 처리 중일 때, 상기 호스트 프로세서로부터 새로운 OpenCL 커널의 실행 정보가 수신됨에 따라, 상기 최상위 컨트롤 코어에 의해, 상기 프로세싱 코어 그룹에 할당된 상기 작업 그룹을 재할당하는 단계;
    를 더 포함하는, OpenCL 커널을 처리하는 방법.
  17. 제 11 항에 있어서,
    상기 작업 그룹을 처리하는 단계는,
    상기 프로세싱 코어가 적어도 하나의 프로세싱 엘리먼트를 포함하고 상기 작업 그룹에 포함된 작업 아이템의 수보다 상기 프로세싱 엘리먼트의 수가 적을 때,
    상기 프로세싱 엘리먼트가 상기 작업 아이템을 직렬화하여, 순차적으로 실행할 수 있도록 상기 OpenCL 커널을 변환하는 단계;
    를 더 포함하는, OpenCL 커널을 처리하는 방법.
  18. 제 11 항에 있어서,
    상기 작업 그룹에 관한 정보를 버퍼에 저장하는 단계;
    를 포함하는, OpenCL 커널을 처리하는 방법.
  19. 제 18 항에 있어서,
    상기 작업 그룹에 관한 정보는,
    상기 하위 계층의 컨트롤 코어 및 상기 프로세싱 코어에 할당된 작업 그룹의 수와 상기 할당된 작업 그룹의 ID 중 적어도 하나를 포함하는, OpenCL 커널을 처리하는 방법.
  20. 제 11 항 내지 제 19 항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 방법을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020160180133A 2016-12-27 2016-12-27 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 KR102592330B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020160180133A KR102592330B1 (ko) 2016-12-27 2016-12-27 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
US15/787,219 US10503557B2 (en) 2016-12-27 2017-10-18 Method of processing OpenCL kernel and computing device therefor
EP17202801.1A EP3343370A1 (en) 2016-12-27 2017-11-21 Method of processing opencl kernel and computing device therefor
CN201711216401.0A CN108241508B (zh) 2016-12-27 2017-11-28 处理OpenCL内核的方法及用于该方法的计算设备
JP2017238434A JP6951962B2 (ja) 2016-12-27 2017-12-13 OpenCLカーネルを処理する方法、及びそれを遂行するコンピューティング装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160180133A KR102592330B1 (ko) 2016-12-27 2016-12-27 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치

Publications (2)

Publication Number Publication Date
KR20180076051A true KR20180076051A (ko) 2018-07-05
KR102592330B1 KR102592330B1 (ko) 2023-10-20

Family

ID=60473303

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160180133A KR102592330B1 (ko) 2016-12-27 2016-12-27 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치

Country Status (5)

Country Link
US (1) US10503557B2 (ko)
EP (1) EP3343370A1 (ko)
JP (1) JP6951962B2 (ko)
KR (1) KR102592330B1 (ko)
CN (1) CN108241508B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111490946B (zh) * 2019-01-28 2023-08-11 阿里巴巴集团控股有限公司 基于OpenCL框架的FPGA连接实现方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030195938A1 (en) * 2000-06-26 2003-10-16 Howard Kevin David Parallel processing systems and method
US20090307699A1 (en) * 2008-06-06 2009-12-10 Munshi Aaftab A Application programming interfaces for data parallel computing on multiple processors
KR101284195B1 (ko) * 2012-01-09 2013-07-10 서울대학교산학협력단 개방형 범용 병렬 컴퓨팅 프레임워크 동적 작업 분배 장치
KR20140131200A (ko) * 2013-05-03 2014-11-12 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
US20160147516A1 (en) * 2014-11-24 2016-05-26 Mentor Graphics Corporation Execution of complex recursive algorithms

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS595755B2 (ja) 1977-08-02 1984-02-07 日本軽金属株式会社 太陽熱利用暖房方法
US7673011B2 (en) 2007-08-10 2010-03-02 International Business Machines Corporation Configuring compute nodes of a parallel computer in an operational group into a plurality of independent non-overlapping collective networks
US8255344B2 (en) 2009-05-15 2012-08-28 The Aerospace Corporation Systems and methods for parallel processing optimization for an evolutionary algorithm
US9354944B2 (en) * 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US8782469B2 (en) 2009-09-01 2014-07-15 Hitachi, Ltd. Request processing system provided with multi-core processor
KR101640848B1 (ko) 2009-12-28 2016-07-29 삼성전자주식회사 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
KR101613971B1 (ko) 2009-12-30 2016-04-21 삼성전자주식회사 프로그램 코드의 변환 방법
JP2012094072A (ja) 2010-10-28 2012-05-17 Toyota Motor Corp 情報処理装置
US8683243B2 (en) * 2011-03-11 2014-03-25 Intel Corporation Dynamic core selection for heterogeneous multi-core systems
EP2711839A4 (en) * 2011-05-19 2014-12-03 Nec Corp PARALLEL PROCESSING DEVICE, PARALLEL PROCESSING METHOD, OPTIMIZATION DEVICE, OPTIMIZATION METHOD AND COMPUTER PROGRAM
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20120331278A1 (en) 2011-06-23 2012-12-27 Mauricio Breternitz Branch removal by data shuffling
US20130141443A1 (en) * 2011-12-01 2013-06-06 Michael L. Schmit Software libraries for heterogeneous parallel processing platforms
JP5238876B2 (ja) * 2011-12-27 2013-07-17 株式会社東芝 情報処理装置及び情報処理方法
KR20130093995A (ko) 2012-02-15 2013-08-23 한국전자통신연구원 계층적 멀티코어 프로세서의 성능 최적화 방법 및 이를 수행하는 멀티코어 프로세서 시스템
KR20140125893A (ko) 2013-01-28 2014-10-30 한국과학기술원 가상화된 매니코어 서버의 작업분배 시스템과 그 방법 및 기록매체
JP6200824B2 (ja) * 2014-02-10 2017-09-20 ルネサスエレクトロニクス株式会社 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
CN104035751B (zh) * 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030195938A1 (en) * 2000-06-26 2003-10-16 Howard Kevin David Parallel processing systems and method
US20090307699A1 (en) * 2008-06-06 2009-12-10 Munshi Aaftab A Application programming interfaces for data parallel computing on multiple processors
KR101284195B1 (ko) * 2012-01-09 2013-07-10 서울대학교산학협력단 개방형 범용 병렬 컴퓨팅 프레임워크 동적 작업 분배 장치
KR20140131200A (ko) * 2013-05-03 2014-11-12 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
US20160147516A1 (en) * 2014-11-24 2016-05-26 Mentor Graphics Corporation Execution of complex recursive algorithms

Also Published As

Publication number Publication date
US20180181443A1 (en) 2018-06-28
JP6951962B2 (ja) 2021-10-20
JP2018106709A (ja) 2018-07-05
US10503557B2 (en) 2019-12-10
CN108241508B (zh) 2023-06-13
EP3343370A1 (en) 2018-07-04
KR102592330B1 (ko) 2023-10-20
CN108241508A (zh) 2018-07-03

Similar Documents

Publication Publication Date Title
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
US9052932B2 (en) Hybrid virtual machine configuration management
US8661435B2 (en) System and method for affinity dispatching for task management in an emulated multiprocessor environment
US10977086B2 (en) Workload placement and balancing within a containerized infrastructure
JP2020537784A (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
US10222985B2 (en) Autonomous dynamic optimization of platform resources
US9009707B2 (en) Sharing reconfigurable computing devices between workloads
KR20130119285A (ko) 클러스터 컴퓨팅 환경에서의 자원 할당 장치 및 그 방법
US20120066688A1 (en) Processor thread load balancing manager
US20150355943A1 (en) Weighted stealing of resources
US9501285B2 (en) Register allocation to threads
US20060020701A1 (en) Thread transfer between processors
US20140237151A1 (en) Determining a virtual interrupt source number from a physical interrupt source number
US8352702B2 (en) Data processing system memory allocation
KR101640231B1 (ko) 자동 분산병렬 처리 하둡 시스템의 지원을 위한 클라우드 구동 방법
US10360070B2 (en) Application-level dispatcher control of application-level pseudo threads and operating system threads
CN105677481A (zh) 一种数据处理方法、系统及电子设备
JP6951962B2 (ja) OpenCLカーネルを処理する方法、及びそれを遂行するコンピューティング装置
Tan et al. A Map-Reduce based framework for heterogeneous processing element cluster environments
KR101620896B1 (ko) 이기종 프로세싱 타입을 고려한 맵리듀스 프로그램 모델의 수행 성능 향상 방법, 수행 성능 향상 장치 및 수행 성능 향상 시스템
US9176910B2 (en) Sending a next request to a resource before a completion interrupt for a previous request
US20170134305A1 (en) System and Method for Allocating and Reserving Supervisors in a Real-Time Distributed Processing Platform
Fatima et al. A heterogeneous dynamic scheduling minimize energy—HDSME
Kim et al. Sophy+: Programming model and software platform for hybrid resource management of many-core accelerators
JP2016139171A (ja) リソース割当装置、リソース割当システム、および、リソース割当方法

Legal Events

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