KR102380437B1 - 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법 - Google Patents

정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법 Download PDF

Info

Publication number
KR102380437B1
KR102380437B1 KR1020200113285A KR20200113285A KR102380437B1 KR 102380437 B1 KR102380437 B1 KR 102380437B1 KR 1020200113285 A KR1020200113285 A KR 1020200113285A KR 20200113285 A KR20200113285 A KR 20200113285A KR 102380437 B1 KR102380437 B1 KR 102380437B1
Authority
KR
South Korea
Prior art keywords
precision
available
required time
scaling
unit
Prior art date
Application number
KR1020200113285A
Other languages
English (en)
Other versions
KR20220031408A (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 KR1020200113285A priority Critical patent/KR102380437B1/ko
Priority to US17/519,079 priority patent/US11537395B2/en
Publication of KR20220031408A publication Critical patent/KR20220031408A/ko
Application granted granted Critical
Publication of KR102380437B1 publication Critical patent/KR102380437B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • G06F11/3423Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time where the assessed time is active or idle time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3428Benchmarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/20Analysis of motion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Complex Calculations (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 출원은 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 관한 것으로, 본 명세서의 일 양상에 따른 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법은 반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 상기 단위 연산의 연산 횟수를 획득하는 단계 - 상기 정밀도는 제1 정밀도 및 제2 정밀도를 포함하고, 상기 연산 횟수는 상기 제1 정밀도에 대응되는 제1 횟수 및 상기 제2 정밀도에 대응되는 제2 횟수를 포함함 - ; 상기 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계 - 상기 가용 정밀도는 상기 제1 정밀도에 대응되는 제1 가용 정밀도 및 상기 제2 정밀도에 대응되는 제2 가용 정밀도를 포함함 - ; 상기 알고리즘의 초기 연산에 대응되는 상기 단위 연산을 상기 파악된 가용 정밀도를 이용하여 반복 수행하여 최적 정밀도를 결정하는 정밀도 탐색 단계; 및 상기 알고리즘의 후속 연산에 대응되는 상기 단위 연산을 상기 최적 정밀도로 반복 수행하는 단계를 포함한다.

Description

정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법{METHOD FOR OPTIMIZING PERFORMANCE OF ALGORITHM USING PRECISION SCALING}
본 출원은 정밀도 스케일링을 이용한 알고리즘의 성능을 최적화하는 방법에 관한 것으로, 보다 상세하게는 동적으로 정밀도 스케일링을 적용하여 알고리즘을 실행하는 시스템에 적합한 정밀도를 선택하고 실행하는 방법에 관한 것이다.
정밀도 스케일링은 널리 사용되는 근사화 방법 중 하나로, 다양한 하드웨어적/소프트웨어적 방법들이 존재한다. 일반적으로 사용되는 소프트웨어적인 방법은 다양한 정밀도로 어플리케이션을 수행하고, 정밀도별 정확도와 성능을 비교하여 최적 정밀도를 찾는 방식이다. 더 나아가 연산에 여러 정밀도를 동시에 사용하여 최소한의 정확도 손실로 높은 성능 향상을 달성하는 방법 또한 사용되고 있다. 이 때 소스 코드 상의 변수 또는 데이터가 정밀도 스케일링을 하는 대상이 되는데, 대상이 늘어날수록 가능한 정밀도 조합의 경우의 수가 늘어나기 때문에 여러 대상을 묶어서 정밀도를 스케일링하거나 대상의 우선순위를 정하여 순서대로 적용하는 등 다양한 방법으로 전체 어플리케이션의 최적 정밀도를 빠르게 탐색한다.
추천 알고리즘과 같은 몇몇 알고리즘은 일반적으로 연산 결과의 오류가 일정 이하가 될 때까지 반복하여 동일한 단위 연산을 수행한다. 다만, 정밀도 스케일링을 알고리즘에 적용해 연산 정밀도를 낮추면 각 단위 연산의 결과 정확도가 낮아지기 때문에 에러가 일정 이하로 수렴하기까지의 연산 횟수가 늘어날 수 있다. 즉, 정밀도 스케일링을 적용하였을 때 오히려 총 연산 시간이 늘어날 수 있다. 또한, 낮은 정밀도가 모든 디바이스에서 언제나 높은 성능을 내는 것은 아니기 때문에 연산 횟수가 늘어나지 않더라도 총 연산 시간이 늘어날 수 있다.
이를 해결하기 위해 종래 기술과 같이 정밀도 스케일링을 하는 것은 알고리즘의 전체 실행을 각 정밀도별로 여러 번 반복해야 하기 때문에 긴 실행 시간을 요구한다. 또한, 알고리즘이 실행되는 시스템에 따라 주어진 입력에 따라 정밀도 스케일링으로 인한 단위 연산 수행 횟수의 증가나 각 연산의 성능이 달라지기 때문에 시스템이나 입력이 달라지면 기존의 정밀도 스케일링을 적용하였을 때 같은 결과를 보장할 수 없다.
본 명세서에서 해결하고자 하는 일 과제는 반복 수행되는 단위 연산을 포함하는 알고리즘을 최적화하여 실행 시간을 감소시키는 것이다.
본 명세서에서 해결하고자 하는 과제가 상술한 과제로 제한되는 것은 아니며, 언급되지 아니한 과제들은 본 명세서 및 첨부된 도면으로부터 본 출원이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
본 명세서의 일 양상에 따르면 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 있어서, 반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 상기 단위 연산의 연산 횟수를 획득하는 단계 - 상기 정밀도는 제1 정밀도 및 제2 정밀도를 포함하고, 상기 연산 횟수는 상기 제1 정밀도에 대응되는 제1 횟수 및 상기 제2 정밀도에 대응되는 제2 횟수를 포함함 - ; 상기 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계 - 상기 가용 정밀도는 상기 제1 정밀도에 대응되는 제1 가용 정밀도 및 상기 제2 정밀도에 대응되는 제2 가용 정밀도를 포함함 - ; 상기 알고리즘의 초기 연산에 대응되는 상기 단위 연산을 상기 파악된 가용 정밀도를 이용하여 반복 수행하여 최적 정밀도를 결정하는 정밀도 탐색 단계; 및 상기 알고리즘의 후속 연산에 대응되는 상기 단위 연산을 상기 최적 정밀도로 반복 수행하는 단계를 포함하는 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법이 제공될 수 있다.
본 명세서의 과제의 해결 수단이 상술한 해결 수단들로 제한되는 것은 아니며, 언급되지 아니한 해결 수단들은 본 명세서 및 첨부된 도면으로부터 본 출원이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
본 명세서의 실시예에 따르면 알고리즘의 초기 수행에서 연산의 각 정밀도에 따른 실행 성능을 파악하고 정밀도에 따른 연산 수행 횟수를 고려하여 최소 시간으로 연산을 수행할 수 있다.
본 명세서의 실시예에 따르면 알고리즘의 연산을 각 정밀도별로 수행하고 각 정밀도당 필요한 연산 횟수를 고려하여 총 소요 시간을 예측하고, 최소 시간으로 추천 알고리즘을 수행함으로써 정확도 손실 없이 알고리즘을 수행되는 디바이스에 맞게 가속할 수 있다.
본 명세서의 실시예에 따르면 다양한 시스템에서 알고리즘의 최적 정밀도를 빠르게 구할 수 있어 복수의 이기종 디바이스에 대해 알고리즘을 가속할 수 있다.
본 명세서의 발명의 효과가 상술한 효과로 제한되는 것은 아니며, 언급되지 아니한 효과들은 본 명세서 및 첨부된 도면으로부터 본 출원이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확히 이해될 수 있을 것이다.
도 1은 본 명세서의 일 실시예에 따른 최적화 시스템에 관한 도면이다.
도 2는 본 명세서의 일 실시예에 따른 프레임워크에 관한 도면이다.
도 3은 본 명세서의 일 실시예에 따른 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 관한 순서도이다.
도 4는 본 명세서의 일 실시예에 따른 알고리즘의 초기 연산에 대응되는 단위 연산을 반복 수행하여 최적 정밀도를 결정하는 단계에 관한 순서도이다.
도 5는 본 명세서의 일 실시예에 따른 최적화 방법의 실행 시나리오에 관한 도면이다.
본 명세서에 기재된 실시예는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 본 발명의 사상을 명확히 설명하기 위한 것이므로, 본 발명이 본 명세서에 기재된 실시예에 의해 한정되는 것은 아니며, 본 발명의 범위는 본 발명의 사상을 벗어나지 아니하는 수정예, 변형예, 균등물 내지 대체물을 포함하는 것으로 해석되어야 한다. 본 발명을 설명함에 있어 공지된 구성 또는 기능에 관한 구체적인 설명은 생략할 수 있다.
본 명세서에서 사용되는 용어는 본 발명에서의 기능을 고려하여 가능한 현재 널리 사용되고 있는 일반적인 용어를 선택하였으나 이는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자의 의도, 관례 또는 새로운 기술의 출현 등에 따라 달라질 수 있다. 다만, 이와 달리 특정한 용어를 임의의 의미로 정의하여 사용하는 경우에는 그 용어의 의미에 관하여 별도로 기재할 것이다. 따라서 본 명세서에서 사용되는 용어는 단순한 용어의 명칭이 아닌 그 용어가 가진 실질적인 의미와 본 명세서의 전반에 걸친 내용을 토대로 해석되어야 한다.
본 명세서에 첨부된 도면은 본 발명을 용이하게 설명하기 위한 것으로 도면에 도시된 형상은 본 발명의 이해를 돕기 위하여 필요에 따라 과장되어 표시된 것일 수 있으므로 본 발명이 도면에 의해 한정되는 것은 아니다. 또한, 본 명세서의 설명 과정에서 이용되는 숫자(예를 들어, 제1, 제2 등)는 하나의 구성요소를 다른 구성요소와 구분하기 위한 식별 기호에 불과하다.
본 명세서의 일 양상에 따르면 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 있어서, 반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 상기 단위 연산의 연산 횟수를 획득하는 단계 - 상기 정밀도는 제1 정밀도 및 제2 정밀도를 포함하고, 상기 연산 횟수는 상기 제1 정밀도에 대응되는 제1 횟수 및 상기 제2 정밀도에 대응되는 제2 횟수를 포함함 - ; 상기 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계 - 상기 가용 정밀도는 상기 제1 정밀도에 대응되는 제1 가용 정밀도 및 상기 제2 정밀도에 대응되는 제2 가용 정밀도를 포함함 - ; 상기 알고리즘의 초기 연산에 대응되는 상기 단위 연산을 상기 파악된 가용 정밀도를 이용하여 반복 수행하여 최적 정밀도를 결정하는 정밀도 탐색 단계; 및 상기 알고리즘의 후속 연산에 대응되는 상기 단위 연산을 상기 최적 정밀도로 반복 수행하는 단계를 포함하는 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법이 제공될 수 있다.
여기서, 상기 정밀도 탐색 단계는, 상기 제1 가용 정밀도 및 상기 제2 가용 정밀도 중 상기 최적 정밀도를 선택하는 단계를 포함할 수 있다.
여기서, 상기 제1 정밀도 및 상기 제2 정밀도 각각은 배정밀도(double precision), 단일정밀도(single precision) 및 반정밀도(half precision) 중 하나일 수 있다.
여기서, 상기 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법은 상기 가용 정밀도에 따라 상기 데이터를 스케일링하기 위한 스케일링 함수를 어플리케이션 내에 삽입하는 단계를 더 포함할 수 있다.
여기서, 상기 정밀도 탐색 단계는, 상기 제1 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제1 가용 정밀도에 대응되는 제1 단위 소요 시간을 획득하는 단계; 상기 제1 가용 정밀도의 데이터를 상기 제2 가용 정밀도로 스케일링하는 단계; 상기 제2 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제2 가용 정밀도에 대응되는 제2 단위 소요 시간을 획득하는 단계; 상기 제1 횟수 및 상기 제1 단위 소요 시간에 기초하여 상기 제1 가용 정밀도에 대응되는 제1 예상 소요 시간을 산출하는 단계; 상기 제2 횟수 및 상기 제2 단위 소요 시간에 기초하여 상기 제2 가용 정밀도에 대응되는 제2 예상 소요 시간을 산출하는 단계; 및 상기 제1 예상 소요 시간 및 상기 제2 예상 소요 시간을 비교하여 상기 최적 정밀도를 결정하는 단계를 포함할 수 있다.
여기서, 상기 제1 단위 소요 시간을 획득하는 단계 및 상기 제2 단위 소요 시간을 획득하는 단계는 상기 단위 연산을 1회 수행하는 것을 특징으로 할 수 있다.
여기서, 상기 제1 예상 소요 시간을 산출하는 단계는 상기 제1 횟수 및 상기 제1 단위 소요 시간을 곱하여 상기 제1 예상 소요 시간을 산출하는 단계를 포함하고, 상기 제2 예상 소요 시간을 산출하는 단계는 상기 제2 횟수 및 상기 제2 단위 소요 시간을 곱하여 상기 제2 예상 소요 시간을 산출하는 단계를 포함할 수 있다.
여기서, 상기 정밀도는 제3 정밀도를 더 포함하고, 상기 연산 횟수는 상기 제3 정밀도에 대응되는 제3 횟수를 더 포함할 수 있다.
여기서, 상기 가용 정밀도는 상기 제3 정밀도에 대응되는 제3 가용 정밀도를 더 포함하고, 상기 정밀도 탐색 단계는, 상기 제2 가용 정밀도의 데이터를 상기 제3 가용 정밀도로 스케일링하는 단계; 상기 제3 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제3 가용 정밀도에 대응되는 제3 단위 소요 시간을 획득하는 단계; 및 상기 제3 횟수 및 상기 제3 단위 소요 시간에 기초하여 상기 제3 가용 정밀도에 대응되는 제3 예상 소요 시간을 산출하는 단계를 더 포함하되, 상기 최적 정밀도를 결정하는 단계는 상기 제1 예상 소요 시간, 상기 제2 예상 소요 시간 및 상기 제3 예상 소요 시간을 비교하여 상기 최적 정밀도를 결정할 수 있다.
여기서, 상기 최적 정밀도를 결정하는 단계는 상기 제1 가용 정밀도, 상기 제2 가용 정밀도 및 상기 제3 가용 정밀도 중 상기 최적 정밀도를 선택하는 단계를 포함할 수 있다.
본 명세서에서, 알고리즘은 반복 수행되는 단위 연산을 포함하는 알고리즘일 수 있다. 또는, 알고리즘은 동일한 단위 연산을 해당 연산 결과의 에러가 일정 이하가 될 때까지 반복해서 수행하는 알고리즘일 수 있다. 알고리즘의 예로는 경사 하강법(gradient descent)을 사용한 특이값 분해(singular value decomposition) 방식의 추천 알고리즘이 있으나 이에 한정되는 것은 아니고, 반복 수행되는 단위 연산을 포함하는 알고리즘이라면 본 명세서의 실시예에 따른 최적화 방법이 적용될 수 있을 것이다.
본 명세서에서, 정밀도의 예시로 배정밀도(double precision), 단일정밀도(single precision) 및 반정밀도(half precision)인 경우에 대해 주로 설명하나 정밀도가 이에 한정되는 것은 아니다.
본 명세서의 실시예에 따른 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법은 최적화 시스템에 의해 수행될 수 있다. 도 1은 본 명세서의 일 실시예에 따른 최적화 시스템에 관한 도면이고, 도 2는 본 명세서의 일 실시예에 따른 프레임워크에 관한 도면이다.
도 1을 참고하면, 시스템은 제어 모듈(100) 및 메모리(200)를 포함할 수 있다.
제어 모듈(100)은 알고리즘을 처리하고 연산할 수 있다. 제어 모듈(100)은 소프트웨어, 하드웨어 및 이들의 조합으로 구현될 수 있다. 예를 들어, 하드웨어적으로 제어 모듈(100)은 중앙 처리 장치(Central Processing Unit, CPU), 그래픽 처리 장치(Graphics Processing Unit, GPU), 디지털 신호 처리 장치(Digital Signal Processor, DSP), FPGA((field programmable gate array)나 ASIC(Application Specific Integrated Circuit), 반도체 칩, 및 그 외의 다양한 형태의 전자 회로로 구현될 수 있다. 또 예를 들어, 소프트웨어적으로 제어 모듈(100)은 상술한 하드웨어에 따라 수행되는 논리 프로그램이나 각종 컴퓨터 언어 등으로 구현될 수 있다.
메모리(200)는 각종 데이터를 저장할 수 있다. 예를 들어, 메모리(200)는 제어 모듈(100)에서 처리될 알고리즘을 저장할 수 있다. 또한, 메모리(200)는 플래시 메모리 타입(flash memory type), 하드디스크 타입(hard disk type), 램(Random Access Memory, RAM), 롬(Read-Only Memory, ROM), 자기 메모리, 자기 디스크, 광디스크 등을 포함할 수 있다.
도 1 및 도 2를 참고하면, 제어 모듈(100)은 어플리케이션 프로파일러(110), 시스템 인스펙터(120), 정밀도 탐색부(130), 데이터 스케일링부(140) 및 컴파일러(150)를 포함할 수 있다.
일 실시예에 따르면, 어플리케이션 프로파일러(110)는 정밀도에 따른 어플리케이션 내 단위 연산의 반복 수행 횟수를 프로파일링할 수 있다. 예를 들어, 제1 정밀도로 연산을 수행하는 경우 어플리케이션 내 단위 연산 반복 수행 횟수는 제1 횟수일 수 있고, 제2 정밀도로 연산을 수행하는 경우 상기 단위 연산 반복 수행 횟수는 제2 횟수일 수 있다. 여기서, 정밀도별 단위 연산의 반복 수행 횟수는 디바이스에 무관할 수 있다.
일 실시예에 따르면, 시스템 인스펙터(120)는 어플리케이션이 동작하는 디바이스의 사용 가능한 정밀도(이하 “가용 정밀도”라 함)를 확인할 수 있다. 디바이스별로 가용 정밀도는 상이할 수 있다. 예를 들어, 도 2를 참고하면, 어떤 디바이스는 배정밀도, 단일정밀도 및 반정밀도를 이용할 수 있는 반면, 다른 디바이스는 배정밀도 및 단일정밀도만 이용 가능할 수 있다.
일 실시예에 따르면, 정밀도 탐색부(130)는 디바이스의 최적 정밀도를 결정할 수 있다. 예를 들어, 정밀도 탐색부(130)는 디바이스의 가용 정밀도 중 최적 정밀도를 결정할 수 있다.
일 실시예에 따르면, 데이터 스케일링부(140)는 데이터를 특정 정밀도로 스케일링할 수 있다. 예를 들어, 데이터 스케일링부(140)는 제1 정밀도의 데이터를 제2 정밀도의 데이터로 스케일링할 수 있다.
일 실시예에 따르면, 컴파일러(150)는 어플리케이션의 정밀도 스케일링을 구현할 수 있다. 일 실시예에 따르면, 컴파일러는 데이터를 스케일링하기 위한 스케일링 함수를 어플리케이션 내에 삽입할 수 있다.
전술한 제어 모듈의 구성은 예시에 불과하고, 전술한 구성 중 일부 구성이 제외되거나 다른 구성이 추가된 제어 모듈이 제공될 수 있다. 또한, 제어 모듈의 각 구성은 별도의 물리적 구성을 의미하는 것만은 아니다.
도 3은 본 명세서의 일 실시예에 따른 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 관한 순서도이다. 도 3을 참고하면, 최적화 방법은 반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 단위 연산의 연산 횟수를 획득하는 단계(S1100), 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계(S1200), 알고리즘의 초기 연산에 대응되는 단위 연산을 반복 수행하여 최적 정밀도를 결정하는 단계(S1300) 및 알고리즘의 후속 연산에 대응되는 단위 연산을 최적 정밀도로 반복 수행하는 단계(S1400)를 포함할 수 있다.
일 실시예에 따르면, 반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 단위 연산의 연산 횟수를 획득하는 단계(S1100)는 복수의 정밀도에 대응되는 연산 횟수를 획득하는 것을 포함할 수 있다. 예를 들어, 제어 모듈은 배정밀도에 대응되는 연산 횟수인 제1 횟수, 단일정밀도에 대응되는 연산 횟수인 제2 횟수 및 반정밀도에 대응되는 연산 횟수인 제3 횟수 중 적어도 둘 이상을 획득할 수 있다.
일 실시예에 따르면, 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계(S1200)는 복수의 가용 정밀도를 파악하는 단계를 포함할 수 있다. 예를 들어, 제어 모듈은 배정밀도에 대응되는 제1 가용 정밀도, 단일정밀도에 대응되는 제2 가용 정밀도 및 반정밀도에 대응되는 제3 가용 정밀도 중 적어도 둘 이상을 획득할 수 있다.
도 4는 본 명세서의 일 실시예에 따른 알고리즘의 초기 연산에 대응되는 단위 연산을 반복 수행하여 최적 정밀도를 결정하는 단계(S1300)에 관한 순서도이다. 도 4를 참고하면, 알고리즘의 초기 연산에 대응되는 단위 연산을 반복 수행하여 최적 정밀도를 결정하는 단계(S1300)는 제1 가용 정밀도로 스케일링된 데이터를 이용하여 단위 연산을 수행하여 제1 단위 소요 시간을 획득하는 단계(S1310), 제1 가용 정밀도의 데이터를 제2 가용 정밀도로 스케일링하는 단계(S1320), 제2 가용 정밀도로 스케일링된 데이터를 이용하여 단위 연산을 수행하여 제2 단위 소요 시간을 획득하는 단계(S1330), 제1 횟수 및 제1 단위 소요 시간에 기초하여 제1 예상 소요 시간을 산출하는 단계(S1340), 제2 횟수 및 제2 단위 소요 시간에 기초하여 제2 예상 소요 시간을 산출하는 단계(S1350) 및 제1 예상 소요 시간 및 제2 예상 소요 시간을 비교하여 최적 정밀도를 결정하는 단계(S1360)를 포함할 수 있다.
일 실시예에 따르면, 제1 가용 정밀도로 스케일링된 데이터를 이용하여 단위 연산을 수행하여 제1 단위 소요 시간을 획득하는 단계(S1310) 및 제2 가용 정밀도로 스케일링된 데이터를 이용하여 단위 연산을 수행하여 제2 단위 소요 시간을 획득하는 단계(S1330)는 각각 단위 연산을 1회 이상 수행하여 제1 가용 정밀도에 대응되는 제1 단위 소요 시간을 획득하는 단계 및 단위 연산을 1회 이상 수행하여 제2 가용 정밀도에 대응되는 제2 단위 소요 시간을 획득하는 단계를 포함할 수 있다. 예를 들어, 제어 모듈은 배정밀도로 스케일링된 데이터를 이용하여 단위 연산을 1회 수행하여 제1 단위 소요 시간을 획득하고, 단일정밀도로 스케일링된 데이터를 이용하여 단위 연산을 1회 수행하여 제2 단위 소요 시간을 획득할 수 있다. 여기서, 단위 연산의 수행 횟수가 적을수록 최적화에 유리할 수 있으나 반드시 1회 수행되어야 하는 것은 아니다.
일 실시예에 따르면, 제1 횟수 및 제1 단위 소요 시간에 기초하여 제1 예상 소요 시간을 산출하는 단계(S1340)와 제2 횟수 및 제2 단위 소요 시간에 기초하여 제2 예상 소요 시간을 산출하는 단계(S1350)는 각각 제1 횟수 및 제1 단위 소요 시간을 곱하여 제1 예상 소요 시간을 산출하는 단계 및 제2 횟수 및 제2 단위 소요 시간을 곱하여 제2 예상 소요 시간을 산출하는 단계를 포함할 수 있다. 예를 들어, 제어 모듈은 배정밀도의 연산 횟수 및 단위 소요 시간을 곱하여 제1 예상 소요 시간을 산출하고 단일정밀도의 연산 횟수 및 단위 소요 시간을 곱하여 제2 예상 소요 시간을 산출할 수 있다.
일 실시예에 따르면, 제1 예상 소요 시간 및 제2 예상 소요 시간을 비교하여 최적 정밀도를 결정하는 단계(S1360)는 복수의 가용 정밀도 중 특정 정밀도를 선택하는 단계를 포함할 수 있다. 여기서, 선택되는 정밀도는 예상 소요 시간이 최소인 정밀도일 수 있다. 예를 들어, 제어 모듈은 배정밀도의 예상 소요 시간 및 단일정밀도의 예상 소요 시간을 비교하여 예상 소요 시간이 더 작은 정밀도를 최적 정밀도로 결정할 수 있다.
본 명세서의 일 실시예에 따른 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법은 컴파일 단계를 더 포함할 수 있다. 일 실시예에 따르면, 컴파일 단계는 가용 정밀도에 따라 데이터를 스케일링하기 위한 스케일링 함수를 어플리케이션 내에 삽입하는 단계를 포함할 수 있다. 일 실시예에 따르면, 컴파일 단계에서 컴파일러는 각 연산의 정밀도별 구현 및 데이터를 특정 정밀도로 스케일링하기 위한 함수를 어플리케이션 내에 삽입할 수 있다.
이상에서는 디바이스의 가용 정밀도가 제1 가용 정밀도 및 제2 가용 정밀도로 2개인 경우에 대해 주로 설명하였으나, 가용 정밀도는 셋 이상일 수 있다. 이 경우에도 전술한 최적화 방법이 적용될 수 있다. 예를 들어, 제어 모듈은 제3 가용 정밀도에 대응되는 제3 횟수를 획득하고, 제3 가용 정밀도로 스케일링된 데이터를 이용하여 단위 연산을 수행하여 제3 단위 소요 시간을 획득하고, 제3 횟수 및 제3 단위 소요 시간에 기초하여 제3 예상 소요 시간을 산출하고, 제1 예상 소요 시간, 제2 예상 소요 시간 및 제3 예상 소요 시간을 비교하여 최적 정밀도를 결정할 수 있다.
도 5는 본 명세서의 일 실시예에 따른 최적화 방법의 실행 시나리오에 관한 도면이다. 도 5를 참고하면, 제어 모듈은 알고리즘의 실행 이전에 알고리즘이 수행될 디바이스의 가용 정밀도를 파악하고 정밀도에 따른 단위 연산 반복 횟수를 프로파일링 할 수 있다. 이 후 제어 모듈은 디바이스의 가용 정밀도마다 단위 연산을 1회씩 수행함으로써 각 정밀도별 성능을 파악할 수 있다(precision search). 여기서, 제어 모듈은 서로 다른 정밀도로 연산을 이어서 수행하기 위해 연산에서 사용되는 데이터를 스케일링할 수 있다(data scaling). 또한, 제어 모듈은 미리 획득한 정밀도에 따른 단위 연산 반복 횟수를 기반으로 총 실행 시간을 예측할 수 있다. 제어 모듈은 예측된 총 실행 시간이 제일 짧은 정밀도를 최적 정밀도로 결정할 수 있다. 이 후 제어 모듈은 결정된 최적 정밀도로 남은 단위 연산을 반복 수행할 수 있다(remaining execution).
본 명세서의 실시예에 따른 방법은 다양한 컴퓨팅 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
상기에서는 실시예를 기준으로 본 출원의 구성과 특징을 설명하였으나 본 출원은 이에 한정되지 않으며, 본 출원의 사상과 범위 내에서 다양하게 변경 또는 변형할 수 있음은 본 출원이 속하는 기술 분야의 당업자에게 명백한 것이며, 따라서 이와 같은 변경 또는 변형은 첨부된 특허청구범위에 속함을 밝혀둔다.
100: 제어 모듈
110: 어플리케이션 프로파일러
120: 시스템 인스펙터
130: 정밀도 탐색부
140: 데이터 스케일링부
150: 컴파일러
200: 메모리

Claims (10)

  1. 프로세서 및 메모리를 구비하는 알고리즘 성능 최적화 시스템에 의해 수행되는 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법에 있어서,
    반복 수행되는 단위 연산을 포함하는 알고리즘의 정밀도에 따른 상기 단위 연산의 연산 횟수를 획득하는 단계 - 상기 정밀도는 제1 정밀도 및 제2 정밀도를 포함하고, 상기 연산 횟수는 상기 제1 정밀도에 대응되는 제1 횟수 및 상기 제2 정밀도에 대응되는 제2 횟수를 포함함 - ;
    상기 알고리즘이 실행될 디바이스의 가용 정밀도를 파악하는 단계 - 상기 가용 정밀도는 상기 제1 정밀도에 대응되는 제1 가용 정밀도 및 상기 제2 정밀도에 대응되는 제2 가용 정밀도를 포함함 - ;
    상기 알고리즘의 초기 연산에 대응되는 상기 단위 연산을 상기 파악된 가용 정밀도를 이용하여 반복 수행하여 최적 정밀도를 결정하는 정밀도 탐색 단계; 및
    상기 알고리즘의 후속 연산에 대응되는 상기 단위 연산을 상기 최적 정밀도로 반복 수행하는 단계를 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  2. 제1 항에 있어서,
    상기 정밀도 탐색 단계는, 상기 제1 가용 정밀도 및 상기 제2 가용 정밀도 중 상기 최적 정밀도를 선택하는 단계를 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  3. 제1 항에 있어서,
    상기 제1 정밀도 및 상기 제2 정밀도 각각은 배정밀도(double precision), 단일정밀도(single precision) 및 반정밀도(half precision) 중 하나인
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  4. 제1 항에 있어서,
    상기 가용 정밀도에 따라 데이터를 스케일링하기 위한 스케일링 함수를 어플리케이션 내에 삽입하는 단계를 더 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  5. 제1 항에 있어서,
    상기 정밀도 탐색 단계는,
    상기 제1 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제1 가용 정밀도에 대응되는 제1 단위 소요 시간을 획득하는 단계;
    상기 제1 가용 정밀도의 데이터를 상기 제2 가용 정밀도로 스케일링하는 단계;
    상기 제2 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제2 가용 정밀도에 대응되는 제2 단위 소요 시간을 획득하는 단계;
    상기 제1 횟수 및 상기 제1 단위 소요 시간에 기초하여 상기 제1 가용 정밀도에 대응되는 제1 예상 소요 시간을 산출하는 단계;
    상기 제2 횟수 및 상기 제2 단위 소요 시간에 기초하여 상기 제2 가용 정밀도에 대응되는 제2 예상 소요 시간을 산출하는 단계; 및
    상기 제1 예상 소요 시간 및 상기 제2 예상 소요 시간을 비교하여 상기 최적 정밀도를 결정하는 단계를 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  6. 제5 항에 있어서,
    상기 제1 단위 소요 시간을 획득하는 단계 및 상기 제2 단위 소요 시간을 획득하는 단계는 상기 단위 연산을 1회 수행하는 것을 특징으로 하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  7. 제5 항에 있어서,
    상기 제1 예상 소요 시간을 산출하는 단계는 상기 제1 횟수 및 상기 제1 단위 소요 시간을 곱하여 상기 제1 예상 소요 시간을 산출하는 단계를 포함하고,
    상기 제2 예상 소요 시간을 산출하는 단계는 상기 제2 횟수 및 상기 제2 단위 소요 시간을 곱하여 상기 제2 예상 소요 시간을 산출하는 단계를 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  8. 제5 항에 있어서,
    상기 정밀도는 제3 정밀도를 더 포함하고,
    상기 연산 횟수는 상기 제3 정밀도에 대응되는 제3 횟수를 더 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  9. 제8 항에 있어서,
    상기 가용 정밀도는 상기 제3 정밀도에 대응되는 제3 가용 정밀도를 더 포함하고,
    상기 정밀도 탐색 단계는,
    상기 제2 가용 정밀도의 데이터를 상기 제3 가용 정밀도로 스케일링하는 단계;
    상기 제3 가용 정밀도로 스케일링된 데이터를 이용하여 상기 단위 연산을 수행하여 상기 제3 가용 정밀도에 대응되는 제3 단위 소요 시간을 획득하는 단계; 및
    상기 제3 횟수 및 상기 제3 단위 소요 시간에 기초하여 상기 제3 가용 정밀도에 대응되는 제3 예상 소요 시간을 산출하는 단계를 더 포함하되,
    상기 최적 정밀도를 결정하는 단계는 상기 제1 예상 소요 시간, 상기 제2 예상 소요 시간 및 상기 제3 예상 소요 시간을 비교하여 상기 최적 정밀도를 결정하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
  10. 제9 항에 있어서,
    상기 최적 정밀도를 결정하는 단계는 상기 제1 가용 정밀도, 상기 제2 가용 정밀도 및 상기 제3 가용 정밀도 중 상기 최적 정밀도를 선택하는 단계를 포함하는
    정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법.
KR1020200113285A 2020-09-04 2020-09-04 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법 KR102380437B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020200113285A KR102380437B1 (ko) 2020-09-04 2020-09-04 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법
US17/519,079 US11537395B2 (en) 2020-09-04 2021-11-04 Method for optimizing performance of algorithm using precision scaling

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200113285A KR102380437B1 (ko) 2020-09-04 2020-09-04 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법

Publications (2)

Publication Number Publication Date
KR20220031408A KR20220031408A (ko) 2022-03-11
KR102380437B1 true KR102380437B1 (ko) 2022-03-29

Family

ID=80814753

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200113285A KR102380437B1 (ko) 2020-09-04 2020-09-04 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법

Country Status (2)

Country Link
US (1) US11537395B2 (ko)
KR (1) KR102380437B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102037043B1 (ko) 2018-08-02 2019-10-28 울산과학기술원 세밀한 정밀도 조정이 가능한 곱셈누적기

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080096306A (ko) * 2007-04-27 2008-10-30 재단법인서울대학교산학협력재단 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템
WO2017156669A1 (en) * 2016-03-14 2017-09-21 Mediatek Singapore Pte. Ltd. Methods for motion vector storage in video coding
US20200151573A1 (en) * 2018-11-12 2020-05-14 Advanced Micro Devices, Inc. Dynamic precision scaling at epoch granularity in neural networks

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102037043B1 (ko) 2018-08-02 2019-10-28 울산과학기술원 세밀한 정밀도 조정이 가능한 곱셈누적기

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Woongki Baek 외 1명. GREEN: A Framework for Supporting Energy-Conscious Programming using Controlled Approximation. 2010년
강석원 외 1명. Autoscale: 자동화 명령어-레벨 정밀도 스케일링 프레임워크. 2018년

Also Published As

Publication number Publication date
KR20220031408A (ko) 2022-03-11
US11537395B2 (en) 2022-12-27
US20220236987A1 (en) 2022-07-28

Similar Documents

Publication Publication Date Title
US10540142B2 (en) Accuracy-conserving floating-point value aggregation
JP5731937B2 (ja) ベクトル浮動小数点引数削減
US7966609B2 (en) Optimal floating-point expression translation method based on pattern matching
US8219605B2 (en) Decimal floating-pointing quantum exception detection
US10831958B2 (en) Integrated circuit design with optimized timing constraint configuration
US9176732B2 (en) Method and apparatus for minimum cost cycle removal from a directed graph
KR102560424B1 (ko) 와이드 데이터 타입들의 비교
US10990073B2 (en) Program editing device, program editing method, and computer readable medium
CN114861579A (zh) 集成电路中时序瓶颈节点分析和时序优化方法及系统
US11086604B2 (en) Source code splitting device, source code analyzing device, source code splitting method, and computer readable medium
US10268798B2 (en) Condition analysis
US10296290B2 (en) Digital signal processor
KR102380437B1 (ko) 정밀도 스케일링을 이용한 알고리즘 성능 최적화 방법
JP6789844B2 (ja) 類似関数抽出装置および類似関数抽出プログラム
US8516453B2 (en) Partition-based static analysis of computer software applications
JP6682036B2 (ja) 規模算出装置及び規模算出プログラム
KR101559651B1 (ko) 동적 분석 방법 및 장치
KR100887327B1 (ko) 다양한 정밀도에 대한 고속 부동 소수점 연산을 수행하는방법, 프로그래밍 구조 및 기록 매체
WO2018150588A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
US10108476B2 (en) Self diagnosis method, compile apparatus and compiler
KR102370851B1 (ko) 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법
US11487506B2 (en) Condition code anticipator for hexadecimal floating point
US8805904B2 (en) Method and apparatus for calculating the number of leading zero bits of a binary operation
KR101850775B1 (ko) 해시 기반 그룹을 이용한 핵심 인자 추출 가속화 방법 및 이를 기록한 기록매체
JP6971835B2 (ja) 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム

Legal Events

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