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

Llvm 기초 소개

Nov 01, 2014

Download

Technology

Hyuk Kim

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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