KR101845328B1 - 단말 및 그 단말에서 어플리케이션 수행 방법 - Google Patents

단말 및 그 단말에서 어플리케이션 수행 방법 Download PDF

Info

Publication number
KR101845328B1
KR101845328B1 KR1020110083541A KR20110083541A KR101845328B1 KR 101845328 B1 KR101845328 B1 KR 101845328B1 KR 1020110083541 A KR1020110083541 A KR 1020110083541A KR 20110083541 A KR20110083541 A KR 20110083541A KR 101845328 B1 KR101845328 B1 KR 101845328B1
Authority
KR
South Korea
Prior art keywords
processing unit
workload
application
binary
operation processing
Prior art date
Application number
KR1020110083541A
Other languages
English (en)
Other versions
KR20130021172A (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 KR1020110083541A priority Critical patent/KR101845328B1/ko
Priority to US13/592,284 priority patent/US8860736B2/en
Publication of KR20130021172A publication Critical patent/KR20130021172A/ko
Application granted granted Critical
Publication of KR101845328B1 publication Critical patent/KR101845328B1/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
    • 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/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/505Allocation 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 the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/504Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

본 발명은 단말 및 그 단말에서 어플리케이션을 수행하는 방법에 관한 것으로, 수행될 어플리케이션에 대한 코드가 입력되면, 연산 처리부와 그래픽 연산 처리부의 워크로드를 확인하는 과정과, 상기 확인된 연산 처리부의 워크로드와 그래픽 연산 처리부의 워크로드를 미리 설정된 처리량 임계값과 비교하는 과정과, 상기 비교 결과에 따라 상기 코드를 컴파일하는 과정과, 상기 컴파일된 코드를 이용하여 상기 연산 처리부 또는 상기 그래픽 연산 처리부에서 어플리케이션 수행을 위한 바이너리를 생성하는 과정과, 상기 생성된 바이너리를 통해 상기 어플리케이션을 수행하는 과정으로 구성된다. 따라서 CPU와 GPU에서 처리되는 작업량을 조절할 수 있으며, 전체 시스템의 성능이 향상되며, 수행 시간이 짧아지기 때문에 저전력의 효과를 얻을 수 있다.

Description

단말 및 그 단말에서 어플리케이션 수행 방법{TERMINAL AND METHOD FOR PERFORMING APPLICATION THEREOF}
본 발명은 단말 및 그 단말에서 어플리케이션을 수행하는 방법에 관한 것으로, CPU(Central Processing Unit)과 GPU(Graphics Processing Unit)를 포함하는 단말 및 그 단말에서 각 CPU와 GPU에서 처리되는 작업량에 따라 어플리케이션을 수행하는 방법에 관한 것이다.
1990년대 초기까지만 해도 컴퓨터와 같은 단말에 장착된 그래픽 카드는 단순히 중앙 처리 장치(이하 CPU;Central Processing Unit)의 연산 결과를 그림이나 글자 신호로 변환하여 화면으로 출력하는 어댑터(Adapter; 변환기)와 같은 부품으로 인식되었었다. 그러나 1990년대 중반 이후 단말의 멀티미디어 컨텐츠, 특히 게임이 주목받으며, 그래픽 카드의 역할도 점차 변하기 시작했다.
좀 더 상세히 설명하면, 게임에 입체감을 부여하기 위한 3D 그래픽이 본격적으로 도입되었고, 화면을 보다 현실적으로 만들기 위한 각종 효과 및 질감 표현 기법이 점차 발전해갔다. 이러한 작업들은 CPU 하나만으로 처리하기에는 그 작업량이 많다. 이에 CPU를 보조할 그래픽 전용 프로세서인 GPU(Graphics Processing Unit)가 개발되었다.
도 1은 종래 기술에 따른 단말의 구성을 도시한 도면이다.
도 1을 참조하면, CPU(110)는 단말을 구성하는 모든 구성들의 상태 및 동작을 제어하는 기능을 수행할 수 있다. 여기서 CPU(110)는 특정 어플리케이션 수행을 위해 입력되는 명령어를 해석 및 연산을 한 다음, 그 결과를 출력할 수 있다. 다시 말해, CPU(110)는 수행될 어플리케이션에 해당하는 코드가 입력되면, 이를 컴파일러 또는 동작 가능한 형태인 바이너리로 생성한다. 그리고 CPU(110)는 생성된 바이너리를 통해 해당 어플리케이션을 수행한다.
또한 CPU(110)는 통신부(120)를 제어하여 외부로부터 데이터를 송수신할 수 있으며, 입력부(130)를 통해 사용자로부터 입력되는 각종 명령을 처리할 수 있다. 그리고 CPU(110)는 저장부(140)를 제어하여 특정 어플리케이션을 수행할 때 발생되는 데이터, 사용자로부터 입력되는 데이터, 외부와 송수신되는 데이터를 저장한다.
다음으로 GPU(150)는 그래픽을 빠르게 처리할 목적으로 디자인된 제어부로, CPU(110)로부터 전달되는 그래픽 관련 바이너리를 처리할 수 있다. 그리고 GPU(150)는 표시부(160)에 표시되는 각종 데이터들과 관련된 그래픽 연산을 수행할 수 있다.
일반적으로 단말에서 특정 어플리케이션을 수행하는 방법은 CPU에서 모든 연산을 처리하고, GPU는 그래픽과 관련된 연산만을 처리한다. 좀 더 상세히 CPU에서 어플리케이션을 수행하는 방법은 다음과 같다.
도 2는 종래 기술에 따른 어플리케이션 수행 방법을 도시한 도면이다.
도 2를 참조하면, CPU(110)는 210단계에서 어플리케이션 수행을 위한 소스 코드가 입력되면, 220단계에서 컴파일러를 수행한다. 즉 CPU(110)는 변수 간의 의존성을 확인하여 최적화 작업을 수행하고, 분기문에 의한 의존성을 최적화한다. 이때 의존성 분석을 통해 CPU(110)는 명령어 실행 순서를 조정할 수 있으며, 이에 어플리케이션 동작 시간이 단축될 수 있다.
다음으로 CPU(110)는 230단계에서 해당 어플리케이션과 관련된 동작이 수행될 수 있도록 바이너리를 생성한다. 그리고 CPU(110)는 240단계에서 생성된 바이너리를 통해 해당 어플리케이션을 수행한다.
그러나 최근 GPU는 CPU와 동등한 성능, 또는 그 이상의 성능을 보이고 있는 추세이다. 따라서 GPU에서 그래픽 처리뿐만 아니라 일반적인 연산(non-graphic)까지 처리하는 방법이 연구되고 있다.
다만 GPU에서의 프로그래밍 인터페이스나 모델은 그래픽 처리를 위하여 특정 포맷으로 고려된 부분이 많이 있기 때문에, CPU와 같이 일반적인 연산을 처리하는데 어려움이 있다. 그리고 병렬 프로세서 프로그래밍을 통해 GPU 자원이 일반적인 연산을 위해 이용될 수 있으나, 새로운 프로그래밍 언어를 사용해야 한다는 문제점이 있다. 그리고 CPU와 GPU는 각각 동작하는 프로그램 코드가 다르기 때문에 각각 컴파일된 코드의 경우, 자원을 실시간으로 할당하거나, 이동시킬 수 없다.
따라서 본 발명은 단말 및 그 단말에서 어플리케이션 수행 방법을 제안한다.
상기와 같은 문제점을 해결하기 위해 본 발명에서 어플리케이션 수행 방법은 수행될 어플리케이션에 대한 코드가 입력되면, 연산 처리부와 그래픽 연산 처리부의 워크로드를 확인하는 과정과, 상기 확인된 연산 처리부의 워크로드와 그래픽 연산 처리부의 워크로드를 미리 설정된 처리량 임계값과 비교하는 과정과, 상기 비교 결과에 따라 상기 코드를 컴파일하는 과정과, 상기 컴파일된 코드를 이용하여 상기 연산 처리부 또는 상기 그래픽 연산 처리부에서 어플리케이션 수행을 위한 바이너리를 생성하는 과정과, 상기 생성된 바이너리를 통해 상기 어플리케이션을 수행하는 과정을 포함한다.
그리고 본 발명에서 상기 워크로드를 확인하는 과정은 상기 입력된 코드에 그래픽 연산 처리부용 바이너리를 생성하기 위한 중간 코드를 생성하는 과정을 더 포함하는 것을 특징으로 한다.
또한 본 발명에서 상기 처리량 임계값과 비교하는 과정은 상기 연산 처리부의 워크로드가 제1 처리량 임계값 이상인지 판단하는 과정과, 상기 연산 처리부의 워크로드가 상기 제1 처리량 임계값 이상이면, 상기 그래픽 연산 처리부의 워크로드가 제2 처리량 임계값 이상인지 판단하는 과정과, 상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 미만이면, 상기 코드를 상기 그래픽 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 과정을 포함하는 것을 특징으로 한다.
다음으로 본 발명에서 상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 이상이면, 상기 코드를 상기 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 과정을 더 포함하는 것을 특징으로 한다.
또한 상기와 같은 문제점을 해결하기 위해 본 발명에서 어플리케이션 수행 단말은 수행될 어플리케이션에 대한 코드가 입력되면, 연산 처리부와 그래픽 연산 처리부의 워크로드를 확인하고, 상기 확인된 연산 처리부의 워크로드와 그래픽 연산 처리부의 워크로드를 미리 설정된 처리량 임계값과 비교하며, 상기 비교 결과에 따라 상기 코드를 컴파일하여, 상기 연산 처리부 또는 상기 그래픽 연산 처리부에서 어플리케이션 수행을 위한 바이너리를 생성하는 상기 연산 처리부와 상기 연산 처리부로부터 전달되는 바이너리를 통해 어플리케이션을 수행하는 상기 그래픽 연산 처리부를 포함하는 것을 특징으로 한다.
그리고 본 발명에서 상기 연산 처리부는 상기 입력된 코드에 상기 그래픽 연산 처리부용 바이너리를 생성하기 위한 중간 코드를 생성하는 것을 특징으로 한다.
또한 본 발명에서 상기 연산 처리부는 상기 연산 처리부의 워크로드가 제1 처리량 임계값 이상이면, 상기 그래픽 연산 처리부의 워크로드가 제2 처리량 임계값 이상인지 판단하고, 상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 미만이면, 상기 코드를 상기 그래픽 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 것을 특징으로 한다.
마지막으로 본 발명에서 상기 연산 처리부는 상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 이상이면, 상기 코드를 상기 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 것을 특징으로 한다.
본 발명에 따르면, 컴파일을 처리하는 시간에 CPU와 GPU의 성능 및 워크로드를 확인하여, 어플케이션에 해당하는 코드를 바이너리로 생성할 수 있다. 이에 동적 자원 할당 및 전체 단말의 성능이 향상될 수 있으며, 컴파일 수행 시간을 줄임으로써 저전력의 효과가 있다.
도 1은 종래 기술에 따른 단말의 구성을 도시한 도면.
도 2는 종래 기술에 따른 어플리케이션 수행 방법을 도시한 도면.
도 3은 본 발명의 실시예에 따른 단말의 구성을 도시한 도면.
도 4는 본 발명의 실시예에 따른 CPU 및 GPU에서의 처리량을 도시한 도면.
도 5는 본 발명의 실시예에 따른 어플리케이션 수행 방법을 도시한 도면.
'단말'은 외부로부터 송수신되는 데이터를 처리할 수 있는 정보 처리 장치를 의미한다. 그리고 단말은 다양한 종류의 데이터를 저장할 수 있다. 여기서 단말은 컴퓨터, 노트북, 테블릿 PC, 휴대 단말, 스마트 폰 등이 포함될 수 있다.
'중앙 처리 장치(CPU; Central Processing Unit)'는 단어 그대로 단말의 중앙에서 모든 데이터를 처리하는 장치라는 의미로, 사용자로부터 입력된 명령어를 해석, 연산한 다음 그 결과를 출력하는 기능을 수행한다. CPU의 가장 기본적인 역할은 연산/계산 작업이다.
'그래픽 처리 장치(GPU;Graphics Processing Unit)'는 단말의 그래픽을 담당하는 장치로, 3D 그래픽을 주로 처리한다. 이에 GPU가 함께 구성된 단말에서 그래픽과 관련된 연산이 수행될 때 CPU의 부담이 줄어들 수 있다. 또한 GPU는 대량의 행렬과 벡터를 처리할 수 있으므로, 이러한 연산을 많이 사용하는 어플리케이션들을 수행할 수 있다.
'컴파일러(Compiler) 또는 컴파일(Compile)'은 고급 언어로 작성된 어플리케이션을 그와 의미적으로 동등하며, 단말에서 즉시 실행될 수 있는 형태의 목적 어플리케이션으로 바꾸어 주는 프로그램 또는 과정을 의미한다. 즉 단말에서 특정 어플리케이션이 수행되기 위해서 단말이 직접 이해할 수 있는 언어로 바꿔야 한다. 그리고 이러한 일을 하는 프로그램이 컴파일러이다.
컴파일을 하기 위해 입력되는 어플리케이션은 원시 어플리케이션이라 하고, 이 어플리케이션을 기술한 언어는 소스 코드(Source Code)라고 한다. 그리고 컴파일되어 출력되는 어플리케이션을 목적 어플리케이션이라 하고, 목적 어플리케이션을 기술한 언어가 목적 언어(Object Language 또는 Target Language)라 한다. 하나의 어플리케이션이 컴파일되어 목적 어플리케이션으로 변경되면, 원시 어플리케이션을 수정하지 않는 한 계속 반복해서 수행할 수 있다.
'바이너리(Binary)'는 0과 1의 두 숫자로만 이루어진 이진법으로, 어플리케이을 수행하기 위한 실행 파일을 의미한다. 즉 단말은 사용자에 의해 선택되는 어플리케이션을 수행하기 위해 해당 어플리케이션 소스 코드를 목적 언어로 컴파일링하고, 그리고 이를 통해 해당 어플리케이션을 수행하기 위한 바이너리를 생성한다.
'워크로드(Workload)'는 CPU 및 GPU에서 처리되는 작업량을 의미한다.
'중간 코드'는 CPU에서 처리되던 일반 연산이 GPU에서도 처리될 수 있도록 생성되는 코드를 의미한다.
이하 첨부된 도면을 참조하여 본 발명의 동작 원리를 상세히 설명한다. 하기에서 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 3은 본 발명의 실시예에 따른 단말의 구성을 도시한 도면이다.
도 3을 참조하면, 단말은 연산 제어부(310), 통신부(320), 입력부(330), 저장부(340), 그래픽 연산 제어부(350) 및 표시부(360)로 구성된다.
연산 제어부(310)는 단말을 구성하는 구성들의 전반적인 동작 및 상태를 제어하는 기능을 수행한다. 여기서 연산 제어부(310)는 중앙 처리 장치(CPU; Central Processing Unit)를 의미한다.
CPU(310)는 단어 그대로 단말의 중앙에서 모든 데이터를 처리하는 장치라는 의미로, 사용자로부터 입력된 명령어를 해석, 연산한 다음 그 결과를 출력하는 기능을 수행한다. CPU(310)의 가장 기본적인 역할은 연산/계산 작업이다. 이를테면 사용자가 '0+1'이라는 명령을 내리면, CPU(310)는 이를 계산하여 '1'이라는 결과를 출력할 수 있다. 여기서 CPU(310)는 자신이 처리하는 워크로드(Workload)와 그래픽 연산 제어부(이하 GPU;Graphics Processing Unit)(350)에서 처리되는 워크로드를 확인하여, 각 제어부에서 처리되는 작업량을 조절할 수 있다.
CPU(310)는 CPU(310)에서 처리되던 일반적인 연산이 GPU(350)에서도 처리될 수 있도록, 해당 어플리케이션의 중간 코드를 생성한다. 여기서 중간 코드는 CPU(310)에서 처리되던 어플리케이션에 해당하는 코드가 컴파일되고, 컴파일된 코드를 해당 어플리케이션을 GPU(350)에서 수행하기 위한 GPU용 바이너리로 생성하기 위한 코드로, <For~> 구문이 사용될 수 있다. 즉 해당 어플리케이션의 코드에 중간 코드인 <For GPU> 구문이 포함되어 있으면, CPU(310)에서도 처리될 수도 있고, GPU(350)에서도 처리될 수 있는 코드임을 의미한다.
CPU(310)는 CPU(310)와 GPU(350)에서 처리되는 작업량을 조절하기 위해 워크로드 모니터부(315)를 더 구성한다. 본 발명에서는 CPU(310)가 워크로드 모니터부(315)를 포함하는 것으로 설명하고 있으나, 이에 한정되지 않는다. 즉 워크로드 모니터부(315)는 CPU(310)와 GPU(350) 사이에 위치하여, CPU(310)에서 GPU(350)로 전달되는 바이너리를 확인하여 각각의 처리부에서 처리되는 작업량을 확인할 수 있다.
워크로드 모니터부(315)는 각 CPU(310)와 GPU(350)의 워크로드를 확인하여, 각각 CPU(310)와 GPU(350)에서 처리되는 작업량을 조절할 수 있다. 수행될 어플리케이션에 대한 중간 코드가 생성되면, 워크로드 모니터부(315)는 CPU(310) 및 GPU(350)의 워크로드를 확인한다. 다음으로 워크로드 모니터부(315)는 CPU(310) 또는 GPU(350)의 워크로드가 설정된 처리량 임계값 이상인지를 판단하고, CPU(310)는 이를 통해 CPU(310) 및 GPU(350)에서 처리하는 작업량을 조절할 수 있다.
좀 더 상세히 설명하면, 워크로드 모니터부(315)는 CPU(310)의 워크로드가 제1 처리량 임계값 이상인지 판단한다. 만약 제1 처리량 임계값 이상이면, 워크로드 모니터부(315)는 GPU(350)의 워크로드가 제2 처리량 임계값 이상인지 판단한다. 여기서 제1 처리량 임계값 및 제2 처리량 임계값은 단말의 제조사 또는 사용자에 의해 설정되는 값으로, 각각의 CPU(310) 및 GPU(350)에서 최대 효율로 작업을 처리할 수 있는 양을 의미한다. 제1 처리량 임계값 및 제2 처리량 임계값은 CPU(310) 및 GPU(350)의 용량에 따라 같은 값을 가질 수도 있고, 다른 값을 가질 수도 있다.
만약 GPU(350)의 워크로드가 제2 처리량 임계값 이상이 아니면, 즉 미만이면, CPU(310)는 이를 확인하여 해당 어플리케이션이 GPU(350)에서 처리될 수 있도록 GPU용 바이너리를 위한 컴파일을 수행한다. 이후 CPU(310)는 컴파일링된 목적 언어를 이용하여 GPU(350)에서 어플리케이션이 수행되기 위한 실행 파일인 GPU용 바이너리를 생성한다. 그리고 CPU(310)는 각 생성된 바이너리에 대하여 워크로드 모니터부(315)로 피드백한다. 마지막으로 CPU(310)는 해당 바이너리를 GPU(350)로 전달하여 해당 어플리케이션을 수행하도록 한다.
통신부(320)는 CPU(310)의 제어 하에 외부로부터 데이터를 송수신하는 기능을 수행한다. 그리고 입력부(330)는 사용자로부터 입력되는 각종 명령을 CPU(310)로 전달하는 기능을 수행한다. 다음으로 저장부(340)는 CPU(310)의 제어 하에 특정 어플리케이션을 수행할 때 발생되는 데이터, 사용자로부터 입력되는 데이터, 외부와 송수신되는 데이터를 저장한다.
그래픽 연산 제어부(GPU)(350)는 단말의 그래픽을 처리하는 기능을 수행한다. 즉 GPU(350)는 표시부(360)에 표시되는 각종 데이터들과 관련된 그래픽 연산을 수행할 수 있다. 본 발명에서는 GPU(350)는 CPU(310)로 부터 전달되는 일반적인 연산과 관련된 바이너리를 통해 해당 어플리케이션을 수행할 수 있다.
표시부(360)는 GPU(350)에서 처리되는 그래픽 데이터를 표시하는 기능을 수행한다.
도 4는 본 발명의 실시예에 따른 CPU 및 GPU에서의 처리량을 도시한 도면이다.
도 4를 참조하면, CPU(410)와 GPU(420)는 어플리케이션 수행에 따라 컴파일을 수행하여 바이너리를 생성한다. 그리고 처리되는 워크로드(430)에 따라 CPU(410a)가 GPU(420a)보다 더 많은 작업량을 처리할 수 있다. 또는 처리되는 워크로드(430)에 따라 GPU(420b)보다 CPU(420b)가 더 많은 작업을 처리할 수 있다.
단말에서 수행되는 어플리케이션은 프로그래밍 언어(C / C++ / Basic 등)로 작성된다. 그리고 각각 CPU와 GPU에서 동작하는 어플리케이션은 각기 다른 프로그래밍 언어 및 문법을 이용하여 작성된다. 또한 각각 CPU와 GPU에서 동작하는 어플리케이션의 소스 코드는 각각의 CPU와 GPU의 컴파일러에 의하여 각각 컴파일된다. 이에 CPU는 각각 컴파일러에서 컴파일되던 어플리케이션이 CPU 또는 GPU의 컴파일러에서 공유되어 컴파일될 수 있도록 중간 코드를 생성한다
중간 코드는 CPU에서 수행되는 어플리케이션이 GPU에서도 수행될 수 있도록 어플리케이션에 해당하는 코드를 이용하여 생성되는 코드이다. 즉 중간 코드는 어플리케이션을 구성하는 코드가 컴파일되어 GPU에서도 수행될 수 있도록 생성되는 코드이다. 중간 코드로 <For> 구문이 사용될 수 있다. 즉 해당 어플리케이션의 코드에 중간 코드인 <For GPU> 구문이 포함되어 있으면, CPU에서도 처리될 수도 있고, GPU에서도 처리될 수 있는 코드임을 의미한다.
본 발명에서 CPU는 중간 코드를 생성하고, 중간 코드가 포함된 어플리케이션 코드를 컴파일하여 CPU와 GPU에서 동작하는 바이너리를 생성할 수 있다. 이때 CPU는 컴파일을 수행하는 시점 및 컴파일이 완료되고 실제 바이너리가 각각의 CPU 및 GPU 상에서 동작하는 시점의 워크로드를 측정 및 예측한다. 그리고 그 결과가 각각의 CPU와 GPU의 컴파일러에 반영되어, 해당 어플리케이션 코드가 CPU 또는 GPU에서 동작이 가능한 바이너리로 변환될 수 있다.
이때 CPU는 워크로드 모니터부를 통해 컴파일하는 시점의 워크로드를 측정할 수 있다. 이외에도 CPU는 각각의 CPU 및 GPU가 공유하는 저장부의 상태를 파악하여 워크로드를 측정할 수 있다. 또는 CPU는 바이너리가 실제로 CPU 및 GPU 상에서 동작하는 시점의 워크로드를 예측할 수 있다. 이 경우, CPU는 각 CPU 및 GPU의 대기열(wait queue)에서 대기 중인 task의 정보(task의 총 개수, 사이즈 등)를 추출하여 워크로드를 예측할 수 있다.
이렇게 측정된 워크로드를 통해 CPU는 자신과 GPU 간에 처리되는 작업량을 조절할 수 있다. 예를 들어 CPU에서 처리되는 작업량이 미리 설정된 임계값 이상이면, GPU의 작업량을 일정 비율에 따라 증가시킬 수 있다. 또는 GPU에서 처리되는 작업량이 미리 설정된 임계값 이상이면, GPU에서 처리되는 작업량을 감소시키고, CPU에서 처리하는 작업량을 GPU에서 감소시킨 작업량만큼 증가시킬 수 있다.
도 5는 본 발명의 실시예에 따른 어플리케이션 수행 방법을 도시한 도면이다.
도 5를 참조하면, 단말은 510단계에서 수행될 어플리케이션에 대한 소스 코드가 입력되면, 515단계에서 해당 소스 코드에 대한 중간 코드를 생성한다. 그리고 단말은 520단계에서 CPU 및 GPU의 워크로드를 확인한다.
다음으로 단말은 525단계에서 CPU의 워크로드가 제1 처리량 임계값 이상인지 판단한다. 만약 제1 처리량 임계값 이상이면, 단말은 530단계에서 GPU의 워크로드가 제2 처리량 임계값 이상인지 판단한다. 여기서 제1 처리량 임계값 및 제2 처리량 임계값은 단말의 제조사 또는 사용자에 의해 설정되는 값으로, 각각의 CPU 및 GPU에서 최대 효율로 작업을 처리할 수 있는 양을 의미한다. 제1 처리량 임계값 및 제2 처리량 임계값은 CPU 및 GPU의 용량에 따라 같은 값을 가질 수도 있고, 다른 값을 가질 수도 있다.
만약 GPU의 워크로드가 제2 처리량 임계값 이상이 아니면, 즉 미만이면, 단말은 535단계에서 해당 어플리케이션이 GPU에서 처리될 수 있도록 GPU용 바이너리를 위한 컴파일을 수행한다. 이러한 과정을 통해 수행될 어플리케이션의 소스 코드가 단말에서 읽을 수 있는 목적 언어로 변경된다. 이후 단말은 540단계에서 컴파일링된 목적 언어를 이용하여 GPU에서 어플리케이션이 수행되기 위한 실행 파일인 GPU용 바이너리를 생성한다. 다음으로 단말은 545단계에서 각 생성된 바이너리에 대하여 피드백하고, 550단계에서 해당 어플리케이션을 수행한다. 여기서 해당 어플리케이션을 수행하는 주체는 GPU가 된다.
다시 525단계로 돌아가, CPU의 워크로드가 제1 처리량 임계값 이상이 아니면, 단말은 560단계를 수행한다. 또는 530단계에서 GPU의 워크로드가 제2 처리량 임계값 이상이면, 단말은 560단계를 수행한다.
단말은 560단계에서 CPU용 바이너리를 위한 컴파일을 수행한다. 그리고 단말은 565단계에서 CPU용 바이너리를 생성한다. 다음으로 단말은 545단계에서 각 생성된 바이너리에 대하여 피드백하고, 550단계에서 해당 어플리케이션을 수행한다. 이때 해당 어플리케이션을 수행하는 주체는 CPU가 된다.
이러한 과정들을 통해 단말은 CPU와 GPU의 워크로드에 따라 처리량을 조절할 수 있다. 또한 GPU에서 처리될 수 있는 일반적인 연산이 중간 코드로 표시됨에 따라, CPU뿐만 아니라 워크로드에 따라 GPU에서도 수행될 수 있다.
다시 말해 기존의 CPU는 소스 코드를 바이너리로 변경할 때 변수간의 의존성을 파악하여 최적화 작업을 수행했다. 최적화 작업은 컴파일된 소스 코드의 변수 중에서 가짜 의존성 변수를 찾아내어 의존성을 제거하거나, 분기문에 의한 의존성이 발생할 경우 수행되었다. 최적화 작업은 의존성 분석을 통하여 명령어의 실행 순서를 조정하는(latency hiding) 역할을 했다.
본 발명의 경우 CPU와 GPU가 동시에 사용되는 단말에서는 기존의 방식으로 코드를 작성하였을 경우, 2번에 걸친 컴파일을 수행한다. 첫번째 컴파일 과정은 CPU/GPU용으로 각각 작성된 코드를 중간 코드로 변환하는 역할을 한다. 그리고 두번째 컴파일 과정은 의존성을 최적화하는 역할 이외에도 CPU와 GPU 간 데이터를 교환하기 위하여 이용하는 하드웨어 구성(bus, memory 등)의 정보를 바탕으로 컴파일 시점에서의 CPU 및 GPU의 워크로드에 따라 중간 코드를 바이너리로 변환한다. 이때 변환되는 바이너리는 각각의 CPU 또는 GPU에서 어플리케이션이 수행될 수 있도록 생성되는 실행 파일을 의미한다.
본 발명에서와 같이 컴파일 시점에 CPU 및 GPU의 워크로드를 파악하여 해당 어플리케이션의 코드를 CPU나 GPU에서 사용가능한 바이너리로 생성함으로써 동적 자원할당(dynamic load balancing) 및 전체 시스템의 성능이 향상된다. 그리고 워크로드에 따라 각 CPU와 GPU에서 처리되는 작업량이 조절됨에 따라 어플리케이션을 수행하는데 걸리는 시간이 짧아짐으로써 저전력의 효과를 얻을 수 있다.
한편 본 발명의 상세한 설명에서는 구체적인 실시예에 관해 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로 본 발명의 범위는 설명된 실시예에 국한되지 않으며, 후술되는 특허청구의 범위뿐만 아니라 이 특허청구의 범위와 균등한 것들에 의해 정해져야 한다.

Claims (12)

  1. 단말의 어플리케이션의 수행 방법에 있어서,
    수행될 어플리케이션에 대한 코드가 입력되면, 연산 처리부와 그래픽 연산 처리부의 워크로드를 확인하는 과정과,
    상기 확인된 연산 처리부의 워크로드와 그래픽 연산 처리부의 워크로드를 미리 설정된 처리량 임계값과 비교하는 과정과,
    상기 비교 결과에 따라 상기 코드를 컴파일하는 과정과,
    상기 컴파일된 코드를 이용하여 상기 연산 처리부에서 상기 어플리케이션의 수행을 위한 바이너리 또는 상기 그래픽 연산 처리부에서 상기 어플리케이션의 수행을 위한 바이너리를 생성하는 과정과,
    상기 생성된 바이너리를 통해 상기 연산 처리부 또는 상기 그래픽 연산 처리부 중 어느 하나에서 상기 어플리케이션을 수행하는 과정을 포함하는 것을 특징으로 하는 어플리케이션 수행 방법.
  2. 제1항에 있어서, 상기 워크로드를 확인하는 과정은
    상기 입력된 코드에 그래픽 연산 처리부용 바이너리를 생성하기 위한 중간 코드를 생성하는 과정을 더 포함하는 것을 특징으로 하는 어플리케이션 수행 방법.
  3. 제1항에 있어서, 상기 처리량 임계값과 비교하는 과정은
    상기 연산 처리부의 워크로드가 제1 처리량 임계값 이상인지 판단하는 과정과,
    상기 연산 처리부의 워크로드가 상기 제1 처리량 임계값 이상이면, 상기 그래픽 연산 처리부의 워크로드가 제2 처리량 임계값 이상인지 판단하는 과정과,
    상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 미만이면, 상기 코드를 상기 그래픽 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 과정을 포함하는 것을 특징으로 하는 어플리케이션 수행 방법.
  4. 제3항에 있어서,
    상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 이상이면, 상기 코드를 상기 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 과정을 더 포함하는 것을 특징으로 하는 어플리케이션 수행 방법.
  5. 제1항에 있어서, 상기 바이너리를 생성하는 과정과,
    상기 생성된 바이너리에 대한 피드백하는 과정을 더 포함하는 것을 특징으로 하는 어플리케이션 수행 방법.
  6. 제2항에 있어서, 상기 중간 코드는
    <For> 구문임을 특징으로 하는 어플리케이션 수행 방법.
  7. 어플리케이션의 수행을 위한 단말에 있어서,
    수행될 어플리케이션에 대한 코드가 입력되면, 연산 처리부와 그래픽 연산 처리부의 워크로드를 확인하고, 상기 확인된 연산 처리부의 워크로드와 그래픽 연산 처리부의 워크로드를 미리 설정된 처리량 임계값과 비교하며, 상기 비교 결과에 따라 상기 코드를 컴파일하여, 상기 연산 처리부에서 상기 어플리케이션의 수행을 위한 바이너리 또는 상기 그래픽 연산 처리부에서 상기 어플리케이션의 수행을 위한 바이너리를 생성하는 상기 연산 처리부와
    상기 연산 처리부로부터 전달되는 바이너리를 통해 상기 어플리케이션을 수행하는 상기 그래픽 연산 처리부를 포함하며,
    상기 어플리케이션은 상기 생성된 바이너리를 통해 상기 연산 처리부 또는 상기 그래픽 연산 처리부 중 어느 하나에서 수행되는 것을 특징으로 하는 어플리케이션 수행 단말.
  8. 제7항에 있어서, 상기 연산 처리부는
    상기 입력된 코드에 상기 그래픽 연산 처리부용 바이너리를 생성하기 위한 중간 코드를 생성하는 것을 특징으로 하는 어플리케이션 수행 단말.
  9. 제7항에 있어서, 상기 연산 처리부는
    상기 연산 처리부의 워크로드가 제1 처리량 임계값 이상이면, 상기 그래픽 연산 처리부의 워크로드가 제2 처리량 임계값 이상인지 판단하고, 상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 미만이면, 상기 코드를 상기 그래픽 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 것을 특징으로 하는 어플리케이션 수행 단말.
  10. 제9항에 있어서, 상기 연산 처리부는
    상기 그래픽 연산 처리부의 워크로드가 상기 제2 처리량 임계값 이상이면, 상기 코드를 상기 연산 처리부용 바이너리를 생성하기 위해 컴파일하는 것을 특징으로 하는 어플리케이션 수행 단말.
  11. 제7항에 있어서, 상기 연산 처리부는,
    상기 생성된 바이너리에 대한 피드백하는 것을 특징으로 하는 어플리케이션 수행 단말.
  12. 제8항에 있어서, 상기 중간 코드는
    <For> 구문임을 특징으로 하는 어플리케이션 수행 단말.
KR1020110083541A 2011-08-22 2011-08-22 단말 및 그 단말에서 어플리케이션 수행 방법 KR101845328B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020110083541A KR101845328B1 (ko) 2011-08-22 2011-08-22 단말 및 그 단말에서 어플리케이션 수행 방법
US13/592,284 US8860736B2 (en) 2011-08-22 2012-08-22 Terminal and application execution method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110083541A KR101845328B1 (ko) 2011-08-22 2011-08-22 단말 및 그 단말에서 어플리케이션 수행 방법

Publications (2)

Publication Number Publication Date
KR20130021172A KR20130021172A (ko) 2013-03-05
KR101845328B1 true KR101845328B1 (ko) 2018-04-04

Family

ID=47743006

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110083541A KR101845328B1 (ko) 2011-08-22 2011-08-22 단말 및 그 단말에서 어플리케이션 수행 방법

Country Status (2)

Country Link
US (1) US8860736B2 (ko)
KR (1) KR101845328B1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9342366B2 (en) * 2012-10-17 2016-05-17 Electronics And Telecommunications Research Institute Intrusion detection apparatus and method using load balancer responsive to traffic conditions between central processing unit and graphics processing unit
CN103164839B (zh) * 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
US11243816B2 (en) * 2014-03-30 2022-02-08 UniversiteitGent Program execution on heterogeneous platform
KR102402584B1 (ko) * 2015-08-26 2022-05-27 삼성전자주식회사 사용자 어플리케이션의 특성에 따른 연산 디바이스 동적 제어 기법
US10860499B2 (en) 2016-03-22 2020-12-08 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Dynamic memory management in workload acceleration
US10203747B2 (en) 2016-03-22 2019-02-12 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Workload placement based on heterogeneous compute performance per watt
US10503524B2 (en) 2016-03-22 2019-12-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Interception of a function call, selecting a function from available functions and rerouting the function call
US10884761B2 (en) * 2016-03-22 2021-01-05 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Best performance delivery in heterogeneous computing unit environment
KR101953906B1 (ko) * 2016-04-11 2019-06-12 한국전자통신연구원 태스크 스케줄링 방법 및 장치
KR102150386B1 (ko) * 2018-07-05 2020-09-01 서울대학교 산학협력단 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070294666A1 (en) 2006-06-20 2007-12-20 Papakipos Matthew N Systems and methods for determining compute kernels for an application in a parallel-processing computer system
WO2008127622A2 (en) 2007-04-11 2008-10-23 Apple Inc. Data parallel computing on multiple processors

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7698575B2 (en) * 2004-03-30 2010-04-13 Intel Corporation Managing power consumption by requesting an adjustment to an operating point of a processor
WO2006034034A2 (en) * 2004-09-16 2006-03-30 Nvidia Corporation Load balancing
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
KR101467558B1 (ko) * 2007-07-26 2014-12-01 엘지전자 주식회사 그래픽데이터 처리 장치 및 방법
US8199158B2 (en) * 2008-06-11 2012-06-12 Intel Corporation Performance allocation method and apparatus

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070294666A1 (en) 2006-06-20 2007-12-20 Papakipos Matthew N Systems and methods for determining compute kernels for an application in a parallel-processing computer system
WO2008127622A2 (en) 2007-04-11 2008-10-23 Apple Inc. Data parallel computing on multiple processors

Also Published As

Publication number Publication date
US20130050229A1 (en) 2013-02-28
KR20130021172A (ko) 2013-03-05
US8860736B2 (en) 2014-10-14

Similar Documents

Publication Publication Date Title
KR101845328B1 (ko) 단말 및 그 단말에서 어플리케이션 수행 방법
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
US20140189708A1 (en) Terminal and method for executing application in same
EP2102746B1 (en) Computation of elementwise expression in parallel
US9098309B2 (en) Power consumption optimized translation of object code partitioned for hardware component based on identified operations
KR101855311B1 (ko) 그래픽 처리 유닛을 위한 작업 부하 일괄 제출 메커니즘
US9256408B2 (en) Optimizing texture commands for graphics processing unit
US9569221B1 (en) Dynamic selection of hardware processors for stream processing
US11055895B2 (en) Shader merge for reduced divergence
JP6952138B2 (ja) チップに基づく計算機能を生成する方法、装置、デバイス、および記憶媒体
KR20160113214A (ko) 그래픽 처리 유닛 주파수의 동적 조절을 지원하는 방법 및 장치
WO2012154606A1 (en) Efficient conditional flow control compilation
JP2021034023A (ja) アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置
US9329872B2 (en) Method and apparatus for the definition and generation of configurable, high performance low-power embedded microprocessor cores
KR20140023561A (ko) 동적 데이터 구성을 위한 방법 및 장치
US10261766B2 (en) Sloppy feedback loop compilation
Cabrera et al. Toward performance portable programming for heterogeneous systems on a chip: A case study with qualcomm snapdragon soc
Corral et al. A study of energy-aware implementation techniques: Redistribution of computational jobs in mobile apps
US20220100512A1 (en) Deterministic replay of a multi-threaded trace on a multi-threaded processor
US9606779B2 (en) Data processing system and data simulation method in the system
Topaloglu et al. GPU programming for EDA with OpenCL
de Carvalho et al. Exploring heterogeneous mobile architectures with a high-level programming model
US8843906B1 (en) Inferring data types from compiler call site
Agostini et al. AXI4MLIR: User-Driven Automatic Host Code Generation for Custom AXI-Based Accelerators
Ko et al. Hardware-in-the-loop simulation of Android GPGPU applications

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
GRNT Written decision to grant