Upload
hyuk-kim
View
3.271
Download
17
Embed Size (px)
DESCRIPTION
Citation preview
LLVM 기초 소개김혁
Kasa Study (2013.11.14)
LLVM?
• Low Level Virtual Machine
• “The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.”
• 간단히말하면컴파일러모듈• 첫릴리즈 2003년
일반적인컴파일러의형태3 단계 - Frontend, Optimizer, Backend( 대부분의 C 컴파일러도 마찬가지 )
• 하지만현실적으로이세모델을완벽히 구분해서만들지않음
• 일반적으로하나의프로그램으로구현• 재사용성이떨어짐
LLVM IR(Intermediate Representation)
IR 이존재함으로서세단계가명확하게구분됨
1 단계 - 프론트엔드
• 입력코드를 LLVM IR 로변환• 주로입력코드와 LLVM 사이에 AST 를거침• 최적화는고려대상이아님
Hello World 의 LLVM IR
2 단계 - 최적화
• 입출력은 LLVM IR
• 여러단계로이루어져있음• LLVM 은사실이쪽에모듈화가많이되어있는
것이큰장점
아무것도안하는간단한최적화패스
3 단계 - 백엔드
• 기계코드생성• 미리정의된 Target Description 파일을
이용하여기계코드를생성• TD 에는하드웨어특성이모두정의되어있다
C++ Source(.cpp)
lli(runtime)
LLVM IR Bitcode(.bc)
Clang(Frontend)
실행
llc(runtime)
llvm-dis(runtime)
LLVM IR assembly(.ll)
Object(.o, .obj)
링크
컴파일타임 , 링크타임 , 인스톨타임
몇가지중간요약
• 플랫폼비종속은아직은멀었다• 즉 , LLVM IR 은실은생각보다많이플랫폼종속적임
• 그래도 Emscripten 같은게존재한다는것은 대단한발전
• 윈도우지원은점차나아지지만아직멀었다
CUDA
• 그럴듯한계획• 그러나 ...
일이복잡해진다• 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 를사용 )
Clang
• C, C++, Objective C and Objective C++ front-end for the LLVM compiler
• C++14 까지적극지원중• Visual Studio 2012 를위한 Toolchain 도제공
( …근데왜링크가안될까 )
JIT(Just-In-Time)
• 런타임중필요할때수행하는것• LLVM 에서링크단계는 JIT 이가능
• C++ -> JS 를맡는 LLVM 백엔드• 강타입 -> 약타입이니까포팅력이무시무시하다
Unreal Engine 3
• 4 일만에포팅했다함• asm.js 를이용하여최대한빠르게
( 파폭 22 이상에서더빠르게동작함 )
그밖에 ..
• JSMESS - JavaScript port of the MESS emulator new!
• Classic Mac OS - Mac Plus emulator using PCE
• Doom
• Clang in JS 등매우다수
시연 (Mac OS X)
• 간단한람다 함수를쓴 C++11 작성테스트• 몇몇 C++11 기능들을넣으면서작성중인
Genetic Algorithm 프로젝트를돌림• Empscripten 으로 a.js, a.html 출력
기타
• 윈도우삽질기는발표자료에서뺐음( 불확실한것들이좀있다 )
• 요약하자면 Empscripten 에서제공하는 것을쓰면좋음
레퍼런스• The Architecture of Open Source Applications - LLVM,
Chris Lattnerhttp://aosabook.org/en/llvm.html
• http://llvm.org
• Emscriptenhttps://github.com/kripken/emscripten/wiki