Llvm 기초 소개

7,176 views

Published on

Published in: Technology

Llvm 기초 소개

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

×