• 제목/요약/키워드: JIT compiler

검색결과 13건 처리시간 0.025초

DEX2C: Translation of Dalvik Bytecodes into C Code and its Interface in a Dalvik VM

  • Kim, Minseong;Han, Youngsun;Cho, Myeongjin;Park, Chanhyun;Kim, Seon Wook
    • IEIE Transactions on Smart Processing and Computing
    • /
    • 제4권3호
    • /
    • pp.169-172
    • /
    • 2015
  • Dalvik is a virtual machine (VM) that is designed to run Java-based Android applications. A trace-based just-in-time (JIT) compilation technique is currently employed to improve performance of the Dalvik VM. However, due to runtime compilation overhead, the trace-based JIT compiler provides only a few simple optimizations. Moreover, because each trace contains only a few instructions, the trace-based JIT compiler inherently exploits fewer optimization and parallelization opportunities than a method-based JIT compiler that compiles method-by-method. So we propose a new method-based JIT compiler, named DEX2C, in order to improve performance by finding more opportunities for both optimization and parallelization in Android applications. We employ C code as an intermediate product in order to find more optimization opportunities by using the GNU C Compiler (GCC), and we will detect parallelism by using the Intel C/C++ parallel compiler and the AESOP compiler in our future work. In this paper, we introduce our DEX2C compiler, which dynamically translates Dalvik bytecodes (DEX) into C code with method granularity. We also describe a new method-based JIT interface in the Dalvik VM for the DEX2C compiler. Our experiment results show that our compiler and its interface achieve significant performance improvement by up to 15.2 times and 3.7 times on average, in Element Benchmark, and up to 2.8 times for FFT in Smartbench.

Just-In-Time 컴파일러를 이용한 파이썬 기반 지구동역학 코드 가속화 연구 (Boosting the Performance of Python-based Geodynamic Code using the Just-In-Time Compiler)

  • 박상진;안수정;소병달
    • 지구물리와물리탐사
    • /
    • 제24권2호
    • /
    • pp.35-44
    • /
    • 2021
  • 파이썬은 다른 정적 언어(예, C, C++, FORTRAN 등)에 비해 실행 속도가 느리기 때문에 대규모 반복이 필요한 지구동역학 코드를 작성하는데 적합하지 않은 것으로 인식되어 왔다. 그러나 파이썬의 계산 속도를 향상시키기 위해 Just-In-Time (JIT) 컴파일 등과 같은 많은 고속화 수단이 개발되었다. 우리는 파이썬을 기반으로 JIT 컴파일러에 최적화된 맨틀 유동 지구동역학 코드를 개발했다. 코드는 지구동역학 분야에서 널리 사용되는 PIC (Particle-In-Cell) 방법과 유한요소법을 결합하여 맨틀 대류를 수치 모사하며, 코드의 신뢰성을 정량적으로 평가하기 위해 잘 알려진 2차원 맨틀 대류 문제를 벤치마킹했다. 수치 모사 결과, 제곱근 평균 제곱 속도와 넛셀 수가 이전 연구와 거의 일치함을 확인했다. JIT 컴파일러를 적용한 코드는 적용하지 않았을 경우와 대비해 계산 속도가 PIC 방법에서 최대 258배, 전체 행렬 조립 과정에서 최대 30배 향상했다. 따라서, 이번 연구는 파이썬의 계산 성능이 JIT 등의 가속기를 이용하여 충분히 향상되며, 많은 지구 동역학 문제를 해결하는데 활용될 수 있음을 제시하였다.

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

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

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를 사용하고 있는 타 경쟁사와 차별점을 가진 제품을 만드는데 도움이 될 수 있을 것이다.

자바 바이트코드로부터 JNI를 사용한 C 코드의 변환 (Translation of Java Bytecode into C code with the JNI)

  • 권혜은;김상훈
    • 정보학연구
    • /
    • 제4권1호
    • /
    • pp.1-7
    • /
    • 2001
  • 자바 프로그램은 플랫폼 독립적이라는 장점을 갖는 반면에 그의 실행이 가상 기계를 통하여 이루어지기 때문에 실행 시간의 비효율성을 가진다. 이러한 문제를 극복하기 위해 just-in-time(JIT) 컴파일러, 오프라인 바이트코드 컴파일러와 같은 다양한 해결 방법이 제안되어 왔다. 그러나 JIT 컴파일러는 실행시간에 바이트코드로부터 네이티브 코드로의 번역이 일어나므로 실행시간 부담을 가진다. 그리고 순수 오프라인 바이트코드 컴파일러는 동적 클래스 적재(dynamic class loading)의 어려움을 가진다. 본 논문에서는 동적으로 바이트코드를 적재학 수 있는 능력을 유지하면서, JIT 보다 더 효율적 실행이 가능한 방법을 제안한다. 또한 기존의 bytecode-to-C 번역기와는 달리, 우리의 번역기는 자바 네이티브 인터페이스(JNI)를 사용함으로서 JDK 실행 환경과의 완벽한 호환성을 유지한다. 본 연구의 결과로 바이트코드를 JNI를 사용한 C 코드로 변환하기 위한 번역기를 설계하고 구현하였다.

  • PDF

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% 향상 시켰다.

자바 적시 컴파일에서의 조건 수행을 이용한 비어 있는 포인터의 조기검사 (Early Null Pointer Check using Predication in Java Just-In-Time Compilation)

  • 이상규;최형규;문수묵
    • 한국정보과학회논문지:소프트웨어및응용
    • /
    • 제32권7호
    • /
    • pp.683-692
    • /
    • 2005
  • 자바에서는 어떤 객체에 접근하는 작업을 할 때마다 항상 해당 객체에 대한 레퍼런스가 널 (Null)인지 여부를 먼저 검사하도록 규정하고 있다. 자바 언어는 객체 중심 언어이기 때문에 객체 접근이 빈번하며 이러한 널 포인터 검사는 자바 프로그램의 성능을 크게 저하시킬 수 있다. 이러한 성능 저하를 줄이기 위한 방법으로 불필요하게 반복되는 널 포인터 검사를 제거하는 기법이 사용되고 있다. 즉, 적시 (Just-in-Time, JIT) 컴파일러가 사용되는 자바 수행 환경에서 코드 분석을 통해 불필요한 널 포인터 검사 코드를 제거하는 최적화를 한다. 본 논문은 JIT 컴파일러 수행 환경에서 조건 수행(predication)이라는 최근 마이크로프로세서의 특징을 이용하여, 기존의 최적화로는 제거할 수 없는 널 포인터 검사 코드를 추가로 없애는 방법을 제시한다. 일반적으로 널 포인터 검사 코드는 비교와 분기 두 명령어로 이루어져 있는데, 그 중에 비교 명령어를 객체를 사용하기 전에 수행하는 것이 아니라 객체가 정의된 직후에 미리 수행하도록 함으로써 널 포인터 검사를 위해 수행되는 총 비교 명령어 수를 줄이는 것이 이 방법의 주된 내용이다. 실험 결과 기존의 널 포인터 제거로 최적화된 코드에 비해 수행된 비교 명령어의 수는 SPECjvm98에서 평균 3.21$\%$줄었고, 생성된 비교 명령어 수는 1.98$\%$ 줄었다. 이는 인텔 IA-64 아이테니엄(Itanium) 컴퓨터에서 평균 0.32$\%$의 성능 향상을 가져왔다.

대소관계 그래프를 이용한 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) 또한 이 규칙에 의해 많은 최적화 기회를 잃는다. 우리는 이 제약을 극복하여 배열 경계 검사최적화의 적용 범위를 넓힐 수 있는 새로운 방법도 아울러 제안하고자 한다.

자바 프로그램의 런타임 특성 분석을 위한 Kaffe의 확장 (The Extension of Kaffe to Analyse Runtime Characteristics of a Java Program)

  • 신범주;이창우;이완직
    • 한국IT서비스학회지
    • /
    • 제6권2호
    • /
    • pp.145-152
    • /
    • 2007
  • This paper describes an extension of Kaffe JVM which enables to extract runtime characteristics of a Java program. The runtime characteristics include frequency of method call instruction, ratio of library method call and ratio of method whose runtime is less than compile time. It also represents ratio of method called only once, polymorphicity of virtual call and distribution of method size called in runtime. This paper analyses runtime features of the SciMark benchmark suite using the extended Kaffe.

자바가상기계를 대상으로 하는 지연계산기반 함수형 언어 컴파일러의 설계 및 구현 (Design and Implementation of a Lazy Functinal Language Compiler for Java Virtual Machine)

  • 최광훈;임현일;한태숙
    • 한국정보과학회:학술대회논문집
    • /
    • 한국정보과학회 2000년도 가을 학술발표논문집 Vol.27 No.2 (1)
    • /
    • pp.326-328
    • /
    • 2000
  • 본 논문에서는 지연계산기반 함수형 언어 프로그램을 받아 Java 프로그램을 목적 코드로 생성하는 컴파일러를 설계하고 구현한다. 이 컴파일러는 제한된 형태의 함수형 언어 Shared Term Graph(STG)를 입력언어로 하는 추상기계 Spineless Tagiess G-Machine (STGM)을 수행 모델로 한다. 본 논문에서는 명령형 언어 L-code를 제안하고 이를 입력언어로 하는 새로운 형태의 STGM인 L-Machine을 제안한다. STG 언어를 L-code로 변환하는 컴파일러와 L-code를 Java로 변환하는 컴파일러를 설계하고 구현함으로써 원하는 컴파일러를 구성한다. 그리고 Glasgow Haskell 컴파일러를 전단부로 하여 지연계산 기반 함수형 언어 Haskell로 작성된 프로그램들을 컴파일하여 STG 프로그램으로 변환한 다음 본 논문에서 구현한 컴파일러로 이를 Java 프로그램으로 변환한다. 변환된 Java 프로그램을 Sun JIT 컴파일러로 컴파일하여 수행한 성능 평가 결과를 제시한다.

  • PDF