• 제목/요약/키워드: JIT 컴파일

검색결과 14건 처리시간 0.019초

안드로이드 응용의 응답 시간 향상을 위한 트레이스 기반 프리컴파일 기법 (A Trace-based Precompile Method for Improving the Response Times of Android Applications)

  • 홍성길;김강희
    • 정보처리학회논문지:컴퓨터 및 통신 시스템
    • /
    • 제2권6호
    • /
    • pp.231-236
    • /
    • 2013
  • 최근에 안드로이드 응용의 사용자 응답 시간을 향상시키기 위해 JIT 컴파일 방법을 사용하는 달빅 가상 머신에 AOT 컴파일 아이디어를 적용하는 방법들이 제안되었다. 그러나 기존 방법들은 DEX(Dalvik Executable)라는 달빅 실행 파일의 구조를 변경해야 하기 때문에, 이미 시장에 배포된 안드로이드 응용들을 대상으로 적용하기 어렵다. 본 논문은 DEX 실행 파일의 구조 변경 없이 달빅 가상 머신에서 핫 트레이스를 미리 컴파일하는 JITwP(JIT with Precompile) 기법을 제안한다. JITwP 기법은 달빅 가상 머신에 프리컴파일 힌트를 제공하여 타겟 응용의 응답 시간을 개선한다. 성능 평가 결과, 웹 브라우저 응용에 대해서 약 4%의 실행 시간을 단축하는 결과를 얻었다.

가상 머신간 성능 비교 (A Performance Comparison of Various Virtual Machines)

  • 김재진;정동헌;김수현;문수묵
    • 한국정보과학회:학술대회논문집
    • /
    • 한국정보과학회 2010년도 한국컴퓨터종합학술대회논문집 Vol.37 No.1(C)
    • /
    • pp.560-565
    • /
    • 2010
  • 가상 머신은 중간코드로 컴파일 되어 한 프로그램을 여러 플랫폼에서 수행 가능하게 한다. 이러한 가상 머신에는 이미 널리 알려진 썬 마이크로시스템즈의 자바 가상 머신과 구글의 안드로이드 플랫폼의 달빅 가상 머신 그리고 애플이 지원하는 LLVM 등이 있으며, 파이어폭스의 TraceMonkey, 구글 크롬의 v8, 사파리의 SquirrelFish Extreme 같은 자바스크립트 엔진도 일종의 가상 머신으로 볼 수 있다. 가상 머신은 필연적으로 성능 저하를 동반하게 되는데, 이는 가상 머신의 주요 이슈 중 하나이다. 본 논문에서는 간단한 벤치마크를 통해서 이들 가상 머신간의 성능을 비교하고, 각 가상 머신의 특징을 알아본다. LLVM은 여러 단계에 걸친 컴파일 전략으로 JIT 컴파일을 사용하였을 때 높은 성능을 보이나 JIT 컴파일을 사용하지 않았을 경우는 매우 낮은 성능을 보인다. 달빅 가상 머신은 인터프리터 모드에서 자바 가상 머신 보다 조금 나았으나, 아직 개발된 지 얼마 되지 않아 JIT 컴파일러가 없다는 것이 약점이다. 자바스크립트 엔진들은 동적 언어인 자바스크립트를 지원하는 특성상 최적화를 적용하지 못해 비교적 낮은 성능을 보였다.

  • PDF

대소관계 그래프를 이용한 Just-in-Time 컴파일 환경에서의 배열 경계 검사 제거 (Array Bounds Check Elimination using Ineguality Graph in Java Just-in-Time Compiler)

  • 최선일;문수묵
    • 한국정보과학회논문지:소프트웨어및응용
    • /
    • 제32권12호
    • /
    • pp.1283-1291
    • /
    • 2005
  • Just-in-Time 컴파일러를 이용하여 자바의 성능을 향상시키려면 여러 문제들을 극복하여야 한다. 이 문제 중 중요한 부분을 차지하는 것이 배열경계 검사(Array bounds check) 명령어를 어떻게 최적화하느냐는 것이다 정적인 컴파일 환경의 경우에는 이미 많은 연구가 진행되어 매우 강력한 성능을 가지는 알고리즘이 알려져 있으나 컴파일 시간이 수행시간의 일부인 Just-in-Time 컴파일 환경에 이를 적용하기에는 컴파일에 시간을 너무 많이들이는 결과를 낳아 적절하지 않다. 현재 Just-in-Time 컴파일러들은 가볍고 단순한 반면에 중복된 배열 경계 검사를 찾아내는 능력이 다소 부족한 알고리즘을 사용하거나 아니면 강력하지만 정적 단일 배정(Static Single Assignment) 형태로 명령어 표현 방식을 변환해 주어야만 하는 알고리즘을 사용하고 있다. 정적 단일 배정 형태로의 변환 및 되돌림은 가볍고 빠른 컴파일러를 지향하는 Just-in-Time 컴파일러에 부합되지 않는다. 본 논문은 변수 간의 대소관계를 표현하는 그래프를 배열 경계 검사 알고리즘에 적용하는 것을 통해 충분한 성능을 내면서도 정적 단일 배정 형태로의 변환을 필요로 하지 않는 알고리즘을 제안한다. Java에서의 모든 최적화는 Java 언어 명세에서 강제하고 있는 정확한 예외 처리(precise exception) 규칙을 따라야 한다. 명령어의 위치를 바꿈으로써 성능 향상을 꾀하는 최적화의 경우 이것으로 인해 많은 제약을 받게 되는데, 배열 경계 검사 최적화(Array bounds check elimination optimization) 또한 이 규칙에 의해 많은 최적화 기회를 잃는다. 우리는 이 제약을 극복하여 배열 경계 검사최적화의 적용 범위를 넓힐 수 있는 새로운 방법도 아울러 제안하고자 한다.

Automatic Usage Profiling을 통한 초기 앱 실행 속도 개선 방법 (Improving application startup time by automatic profiling)

  • 채향석;백종문
    • 소프트웨어공학소사이어티 논문지
    • /
    • 제28권1호
    • /
    • pp.1-6
    • /
    • 2019
  • Google은 2009년 Bytecode로 구성된 Dex(Dalvik Executable)를 Dalvik Runtime의 Interpreter가 실행하는 형태의 Android를 공개하였다. 이후로 Interpreter 실행 속도 개선을 위해 JIT(Just-in-time) 컴파일 기술을 적용하였고 Lollipop(Android 5.0)부터는 Dalvik Runtime을 대체하여 ART Runtime을 제공하여 AOT(A head-of-time) 컴파일 지원을 통해 앱 설치 이후부터 Bytecode가 아닌 Native code로 동작하도록 함으로써 성능을 높일 수 있게 되었다. 하지만 앱 설치/업데이트 시점에 모든 대상을 컴파일하는 AOT 컴파일은 시간이 오래 걸리고 메모리/CPU 자원을 많이 사용함에 따라 느려지고 발열을 유발하여 사용자 불편함을 초래하였다. 시간이 지날수록 더 복잡하고 큰 코드를 지닌 앱들이 많이 등 장함에 따라 AOT 컴파일로 인해 발생하는 문제들이 더 많이 발생하게 되었고, Nougat(Android 7.0)부터는 이를 개선하여 AOT 컴파일을 앱 설치/업데이트 시점에 모두 수행하지 않고 최적화 시점을 나중으로 미루고 실제 사용자의 사용 기록인 Profile을 사용하는 Profile-guided 컴파일 방법을 통해 문제를 회피하고 있다. 이 연구에서는 앱 실행 속도를 설치 직후부터 개선할 수 있도록 하기 위해 Profile에 따른 앱 실행 속도의 특성을 파악하여 앱 실행 속도를 개선할 수 있는 Profile을 앱 개발 시점에 자동 생성하는 방법과 자동생성한 프로파일을 APK에 포함하고 앱 설치/업데이트 시점에 활용하여 최적화를 할 수 있는 방법을 제안한다. 제안하는 방법을 통해 앱 설치 시점에 Profile에 기반하여 선택적으로 컴파일할 수 있으므로 설치 시점에 발생하는 사용자 불편을 최소화할 수 있으며 앱 설치 이후 Native code 실행을 통해 앱 실행 속도를 최초 실행부터 개선할 수 있다.

효율적인 통계 계산을 위한 파이썬 numba 라이브러리의 소개 (Introduction to numba library in Python for efficient statistical computing)

  • 조윤상;유동현;손원;박선철
    • 응용통계연구
    • /
    • 제33권6호
    • /
    • pp.665-682
    • /
    • 2020
  • 본 논문은 순수하게 파이썬 언어로 작성된 연산에 대하여 just-in-time (JIT) 컴파일을 적용하여 전체 계산 속도를 향상시킬 수 있는 numba 라이브러리에 대한 사용법과 응용에 대하여 소개한다. 실제 통계 계산 문제에 대한 numba 라이브러리의 적용에 대한 예제로 반복문 사용이 요구되는 통계 계산 문제들 중 순열 검정과 정규 혼합 분포의 모수 추정의 EM 알고리즘을 고려하였으며 순수한 파이썬 구문 및 반복문을 활용한 계산 시간과 numba를 활용한 계산 시간을 비교하여 numba 라이브러리 활용의 효율성을 수치적으로 제시하였다.

JBURG를 이용한 JIT컴파일러 생성에 관한 연구 (A study on the generation of JIT compiler using JBURG)

  • 강경우
    • 정보처리학회논문지A
    • /
    • 제12A권1호
    • /
    • pp.59-64
    • /
    • 2005
  • 본 연구에서는 JBURG를 이용하여 JIT 컴파일러를 생성하는 방법을 제안하였다. JBURG는 Java를 위한 상향식 트리패턴 일치 코드생성기를 생성하는 도구이다. 본 연구에서 제안한 방법은 트리패턴 사이에 관계를 조사함으로 고안되었다. 제안된 방법은 패턴들 사이의 관계를 이용해 분석하고 불필요한 점검을 피할 수 있다는 점에서 기존의 연구결과인 JBURG보다 효율적이다. 필요한 분석들은 코드생성기를 만드는 시간에 수행되기 때문에 실제 코드를 생성해야 하는 컴파일 시간에 효율을 늘일 수 있다.

Itanium상의 자바 적시 컴파일러를 위한 가벼운 루프 불변 코드 이동 (Lightweight Loop Invariant Code Motion for Java Just-In-Time Compiler on Itanium)

  • 유준민;최형규;문수묵
    • 한국정보과학회논문지:소프트웨어및응용
    • /
    • 제32권3호
    • /
    • pp.215-226
    • /
    • 2005
  • 루프 불변 코드 이동(loop invariant code motion, LICM) 컴파일러 최적화는 비교적 많은 분석 작업을 필요로 하기 때문에 컴파일 시간이 수행 시간의 일부가 되는 자바 적시(Just-In-Time) 컴파일러에는 사용하기 쉽지 않다. "전통적인" LICM 기법에서는 보통 코드를 분석하여 레지스터의 정의-사용체인과 사용-정의 체인을 미리 만든 뒤 이를 바탕으로 코드 이동을 수행하는 데, 본 논문은 자바 가상 머신(Java virtual machine)이 스택 머신 (stack machine)이라서 좀 더 단순한 코드 형태를 생성한다는 특징을 이용하여 정의-사용 체인을 루프 불변 코드에 대해서만 만들고 사용-정의 체인 없이도 정확히 동작하는 알고리즘을 제시한다. 또한 기존의 방식보다 더 많은 루프 불변 코드 이동을 하게 하는 두 가지 방법을 제시한다. 우선, 간단하기 때문에 루프에 경로가 하나인 경우만 LICM을 적용하는 기존의 기법과 달리, 경로가 여러 개인 루프에서도 부분적으로 중복되는 코드에 대해서도 LICM을 안전하게 적용한다. 또한 부분적으로 중복되는 루프 불변 널(null) 포인터 체크 코드도 Itanium의 조건 수행(predication)을 이용하여 이동시키다. 제안된 기법은 Itanium 마이크로프로세서를 위한 인텔의 ORP(Open Runtime Platform) 자바 가상 머신 위의 적시 컴파일러에 구현하였다. SPECjvm98 벤치마크에 대해 실험을 수행한 결과 전체 적시 컴파일 시간을 1.3% 정도만을 증가시켰지만 전체 수행 시간을 기하 평균으로 2.2% 향상 시켰다.

CTOC에서 3주소 코드를 효율적인 스택 기반 코드로의 변환기 설계 (Design of Translator for Efficient Stack Based Codes from 3-Address Codes in CTOC)

  • 김영국;김기태;조선문;김웅식;유원희
    • 한국정보과학회:학술대회논문집
    • /
    • 한국정보과학회 2004년도 가을 학술발표논문집 Vol.31 No.2 (1)
    • /
    • pp.766-768
    • /
    • 2004
  • 자바는 객체 지향 언어이고, 분산 환경을 지원하고, 플랫폼에 독립적인 장정을 갖지만 다른 C나 C++같은 컴파일언어에 비해서는 실행속도가 느리다는 단점을 가진다. 이러한 단점을 극복하기 위한 방법으로 네이티브 코드로의 변환, 코드 최적화, JIT 컴파일 방법 등을 이용한다. 그러나 이전 방법들은 다음과 같은 한계점을 가진다. 클래스 파일을 네이티브 코드로의 변환은 플랫폼의 종속되고, 코드 최적화 방법은 고유의 최적화 방법만을 적용할 수 있었고, JIT컴파일 방법은 한 번의 실행 후 다음 실행해야 속도향상을 꾀할 수 있었다. 본 논문은 바이트 코드를 최적화하기 위한 자바최적화 프레임워크를 설명하고 자바최적화 프레임워크의 구성을 하는 부분 중 3주소형식의 중간코드를 스택기반 코드로 변환하는 부분을 설계하고. 3주소 코드로 변환한 중간 코드를 스택 기반 코드로 변환하면서 생기는 과다한 load/store의 문제점을 지적하고 그것을 해결할 수 있는 변환기를 제안한다.

  • PDF

Method Signature를 이용한 안드로이드 런타임 성능 향상 (Enhancement of Android Runtime Performance using Method Signature)

  • 조인휘;김원일
    • 한국통신학회논문지
    • /
    • 제36권11B호
    • /
    • pp.1323-1328
    • /
    • 2011
  • 본 논문에서는 Android Dalvik 가상머신의 trace JIT 구현 코드를 수정하여 특정 Java 메소드를 별도의 프로 파일링 과정 없이 바로 JIT 컴파일이 이루어지도록 구현하였다. 동일한 Java 메소드에 대해 원본 Dalvik 가상머신과 본 논문의 방식을 적용한 가상머신에서 각각 실행하여 수행 시간을 측정하였고 본 논문이 제안한 방식을 이용하면 약 30% 정도의 성능 향상을 가져올 수 있음을 확인하였다. 본 논문에서는 Android Dalvik의 구조를 살펴보아 Dalvik 가상머신에 대한 이해를 돕고 변경한 Dalvik 가상머신 부분을 코드 수준에서 자세히 설명한다. 산업체에서는 Dalvik 가상머신의 수행 성능 최적화와 같은 Android의 핵심 기술 부분을 향상하여 Android를 사용하고 있는 타 경쟁사와 차별점을 가진 제품을 만드는데 도움이 될 수 있을 것이다.