28
LLVM 기기 기기 김김 Kasa Study (2013.11.14)

Llvm 기초 소개

  • Upload
    hyuk-kim

  • View
    3.271

  • Download
    17

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Llvm 기초 소개

LLVM 기초 소개김혁

Kasa Study (2013.11.14)

Page 2: Llvm 기초 소개

LLVM?

• Low Level Virtual Machine

• “The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.”

• 간단히말하면컴파일러모듈• 첫릴리즈 2003년

Page 3: Llvm 기초 소개

일반적인컴파일러의형태3 단계 - Frontend, Optimizer, Backend( 대부분의 C 컴파일러도 마찬가지 )

Page 4: Llvm 기초 소개

• 하지만현실적으로이세모델을완벽히 구분해서만들지않음

• 일반적으로하나의프로그램으로구현• 재사용성이떨어짐

Page 5: Llvm 기초 소개

LLVM IR(Intermediate Representation)

IR 이존재함으로서세단계가명확하게구분됨

Page 6: Llvm 기초 소개

1 단계 - 프론트엔드

• 입력코드를 LLVM IR 로변환• 주로입력코드와 LLVM 사이에 AST 를거침• 최적화는고려대상이아님

Page 7: Llvm 기초 소개

Hello World 의 LLVM IR

Page 8: Llvm 기초 소개
Page 9: Llvm 기초 소개

2 단계 - 최적화

• 입출력은 LLVM IR

• 여러단계로이루어져있음• LLVM 은사실이쪽에모듈화가많이되어있는

것이큰장점

Page 10: Llvm 기초 소개

아무것도안하는간단한최적화패스

Page 11: Llvm 기초 소개

3 단계 - 백엔드

• 기계코드생성• 미리정의된 Target Description 파일을

이용하여기계코드를생성• TD 에는하드웨어특성이모두정의되어있다

Page 12: Llvm 기초 소개

C++ Source(.cpp)

lli(runtime)

LLVM IR Bitcode(.bc)

Clang(Frontend)

실행

llc(runtime)

llvm-dis(runtime)

LLVM IR assembly(.ll)

Object(.o, .obj)

링크

Page 13: Llvm 기초 소개

컴파일타임 , 링크타임 , 인스톨타임

Page 14: Llvm 기초 소개

몇가지중간요약

• 플랫폼비종속은아직은멀었다• 즉 , LLVM IR 은실은생각보다많이플랫폼종속적임

• 그래도 Emscripten 같은게존재한다는것은 대단한발전

• 윈도우지원은점차나아지지만아직멀었다

Page 15: Llvm 기초 소개

CUDA

• 그럴듯한계획• 그러나 ...

Page 16: Llvm 기초 소개
Page 17: Llvm 기초 소개
Page 18: Llvm 기초 소개

일이복잡해진다• clang 은 CUDA 의 cu 파일을 쓸 수 없음

o 결국 프론트엔드 컴파일러는 어디에 ?? (glang?)

• 타겟이 명확한만큼 프론트엔드에서 하드웨어 특성이 필요 (NVVM IR)

• 다행히 Built-in Functions Library 는 제공o CUDA_TOOLKIT\nvvm\libdevice\*.bc

• BC to PTX 는 존재 - cicc, LLVM 자체 제공• 결국 프론트엔드는 만들어 쓰라는거냐 ?

• Python 은 NumaPro 로 존재함 ( 백엔드는 NVIDIA Compiler SDK 를사용 )

Page 19: Llvm 기초 소개

Clang

• C, C++, Objective C and Objective C++ front-end for the LLVM compiler

• C++14 까지적극지원중• Visual Studio 2012 를위한 Toolchain 도제공

( …근데왜링크가안될까 )

Page 20: Llvm 기초 소개

JIT(Just-In-Time)

• 런타임중필요할때수행하는것• LLVM 에서링크단계는 JIT 이가능

Page 21: Llvm 기초 소개

• C++ -> JS 를맡는 LLVM 백엔드• 강타입 -> 약타입이니까포팅력이무시무시하다

Page 22: Llvm 기초 소개
Page 23: Llvm 기초 소개

Unreal Engine 3

• 4 일만에포팅했다함• asm.js 를이용하여최대한빠르게

( 파폭 22 이상에서더빠르게동작함 )

Page 24: Llvm 기초 소개
Page 25: Llvm 기초 소개

그밖에 ..

• JSMESS - JavaScript port of the MESS emulator new!

• Classic Mac OS - Mac Plus emulator using PCE

• Doom

• Clang in JS 등매우다수

Page 26: Llvm 기초 소개

시연 (Mac OS X)

• 간단한람다 함수를쓴 C++11 작성테스트• 몇몇 C++11 기능들을넣으면서작성중인

Genetic Algorithm 프로젝트를돌림• Empscripten 으로 a.js, a.html 출력

Page 27: Llvm 기초 소개

기타

• 윈도우삽질기는발표자료에서뺐음( 불확실한것들이좀있다 )

• 요약하자면 Empscripten 에서제공하는 것을쓰면좋음

Page 28: Llvm 기초 소개

레퍼런스• The Architecture of Open Source Applications - LLVM,

Chris Lattnerhttp://aosabook.org/en/llvm.html

• http://llvm.org

• Emscriptenhttps://github.com/kripken/emscripten/wiki