llvm compile time challenges improvements outlook
play

LLVM Compile Time. Challenges. Improvements. Outlook. Michael - PowerPoint PPT Presentation

LLVM Compile Time. Challenges. Improvements. Outlook. Michael Zolotukhin, Apple Agenda Benchmarking and tracking Historical findings Future work Tools and tricks Compile Time Trend O0-g Os O3 1.5x Compile Time


  1. • LLVM Compile Time. • Challenges. Improvements. Outlook. Michael Zolotukhin, Apple

  2. Agenda • Benchmarking and tracking • Historical findings • Future work • Tools and tricks

  3. Compile Time Trend O0-g Os O3 1.5x Compile Time Increase 1.25x 1x 3.6 3.7 3.8 3.9 LLVM Version

  4. Compile Time Trend O0-g Os O3 1.5x Why did it happen? Compile Time Increase 1.25x 1x 3.6 3.7 3.8 3.9 LLVM Version

  5. CTMark • Easy to use • Reliable • Fast • Representative

  6. -60% -40% -20% 20% 40% 60% 0% CTMark ma ff t lencod tramp3d-v4 sqlite3 consumer-typeset CTMark SPASS 7zip Bullet kimwitu++ ClamAV ClamAV -60% -40% -20% 20% 40% 60% 0% LLVM Testsuite

  7. CTMark -60% -60% -40% -40% -20% -20% 20% 20% 40% 40% 60% 60% 0% 0% ma ff t lencod tramp3d-v4 sqlite3 LLVM Testsuite consumer-typeset CTMark SPASS 7zip Bullet kimwitu++ ClamAV ClamAV

  8. 
 Regular Tracking • Test every compiler build on several optlevels • Detect and analyze incoming regressions • Publish results on Green Dragon • Raise awareness with reports 


  9. Historical Data

  10. Historical Data 1.75x 2015 2016 2017 Compile Time Increase 1.5x 1.25x 220000 240000 260000 280000 300000 320000 Revision

  11. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase 1.5x 1.25x 220000 240000 260000 280000 300000 320000 Revision

  12. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase LibCXX changes 1.5x 1.25x 220000 240000 260000 280000 300000 320000 Revision

  13. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  14. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  15. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  16. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase Optimized implementation LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  17. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase Optimized implementation LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  18. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase Optimized implementation LibCXX changes 1.5x 1.25x New features 220000 240000 260000 280000 300000 320000 Revision

  19. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase Optimized implementation LibCXX changes 1.5x 1.25x New features Refactorings, NFC, etc. 220000 240000 260000 280000 300000 320000 Revision

  20. Historical Data 1.75x 2015 2016 2017 Cost Model Changes Compile Time Increase Optimized implementation LibCXX changes 1.5x 1.25x New features Refactorings, NFC, etc. 220000 240000 260000 280000 300000 320000 Revision

  21. Compile Time Trend O0-g Os O3 1.5x Compile Time Increase 1.25x 1x 3.6 3.7 3.8 3.9 LLVM Version

  22. Compile Time Trend O0-g Os O3 1.5x Compile Time Increase 1.25x 1x 3.6 3.7 3.8 3.9 4.0 5.0 LLVM Version

  23. Compile Time Trend O0-g Os O3 1.5x Compile Time Increase 1.25x 1x 3.6 3.7 3.8 3.9 4.0 5.0 LLVM Version

  24. Future Outlook • Look at other components: front-end, libraries • Find new ways to speed-up LLVM • Add more benchmarks • Speed-up your favorite pass

  25. Tools and Tricks

  26. Tools and Tricks llvmlab

  27. 
 Tools and Tricks llvmlab Installation: $ virtualenv venv && . venv/bin/activate (venv)$ git clone http://llvm.org/git/zorg (venv)$ pip install requests (venv)$ python zorg/llvmbisect/setup.py install (venv)$ which llvmlab /path/to/venv/bin/llvmlab

  28. 
 Tools and Tricks llvmlab Usage: $ ### List available builders: $ llvmlab ls clang-cmake-aarch64 
 clang-cmake-armv7a 
 clang-cmake-mips 
 clang-cmake-mipsel 
 clang-stage1-configure-RA 
 clang-stage1-configure-RA_build 
 clang-stage2-cmake-RgTSan 
 clang-stage2-configure-Rlto 
 clang-stage2-configure-Rlto_build 
 clang-stage2-configure-Rthinlto_build

  29. 
 Tools and Tricks llvmlab Usage: $ ### List available artifacts: $ llvmlab ls clang-stage2-configure-Rlto clang-r314805-b21519 
 clang-r314804-b21518 
 clang-r314803-b21517 
 clang-r314799-b21516 
 clang-r314798-b21515 
 clang-r314795-b21514 
 clang-r314793-b21513 
 ...

  30. 
 Tools and Tricks llvmlab Usage: $ ### Download specified artifact: $ llvmlab fetch clang-stage2-configure-Rlto clang-r314805-b21519 downloaded root: clang-r314805-b21519.tar.gz 
 extracted path : clang-r314805-b21519 $ clang-r314805-b21519/bin/clang -v Apple clang version 6.0.99 (master 314805) (based on LLVM 6.0.99) 
 Target: x86_64-apple-darwin16.7.0 
 Thread model: posix 
 InstalledDir: /tmp/clang-r314805-b21519/bin

  31. Tools and Tricks Test-suite + LNT

  32. 
 Tools and Tricks Test-suite + LNT Installation: $ virtualenv venv && . venv/bin/activate (venv)$ git clone http://llvm.org/git/test-suite (venv)$ git clone http://llvm.org/git/lnt (venv)$ pip install -r lnt/requirements.client.txt (venv)$ python lnt/setup.py install (venv)$ pip install svn+http://llvm.org/svn/llvm-project/llvm/trunk/utils/lit (venv)$ which lit /path/to/venv/bin/lit (venv)$ which lnt /path/to/venv/bin/lnt

  33. 
 Tools and Tricks Test-suite + LNT Running CTMark: $ lnt runtest test-suite --sandbox /Path/To/Sandbox \ 
 —-use-lit=lit \ 
 --cc /Path/To/Compiler/bin/clang \ 
 --test-suite=/Path/To/test-suite \ 
 -C target-x86_64-macosx \ 
 -C Os \ 
 --cmake-define TEST_SUITE_RUN_BENCHMARKS=Off \ 
 --cmake-define TEST_SUITE_SUBDIRS=CTMark 


  34. 
 Tools and Tricks Test-suite + LNT Running full LLVM test-suite: $ lnt runtest test-suite --sandbox /Path/To/Sandbox \ 
 —-use-lit=lit \ 
 --cc /Path/To/Compiler/bin/clang \ 
 --test-suite=/Path/To/test-suite \ 
 -C target-x86_64-macosx \ 
 -C Os \ 
 --cmake-define TEST_SUITE_BENCHMARKING_ONLY=On

  35. 
 Tools and Tricks Test-suite + LNT Running a subset of LLVM test-suite: $ lnt runtest test-suite --sandbox /Path/To/Sandbox \ 
 —-use-lit=lit \ 
 --cc /Path/To/Compiler/bin/clang \ 
 --test-suite=/Path/To/test-suite \ 
 -C target-x86_64-macosx \ 
 -C Os \ 
 --cmake-define TEST_SUITE_BENCHMARKING_ONLY=On \ 
 —only-test MultiSource/Applications

  36. 
 Tools and Tricks Test-suite + LNT Running a test-suite: $ lnt runtest test-suite --sandbox /Path/To/Sandbox \ 
 —-use-lit=lit \ 
 --cc /Path/To/Compiler/bin/clang \ 
 --test-suite=/Path/To/test-suite \ 
 -C target-x86_64-macosx \ 
 -C Os \ 
 --cmake-define TEST_SUITE_BENCHMARKING_ONLY=On \ 
 —only-test MultiSource/Applications $ ### Results will be in /Path/To/Sandbox/test-DATETIME/output*.json

  37. 
 
 
 Tools and Tricks Test-suite + LNT Comparing results: $ pip install pandas $ /Path/To/test-suite/utils/compare.py -m compile_time output1.json output2.json Tests: 27 
 Metric: compile_time 
 Program output1 output2 diff 
 flops-3.test 0.03 0.03 14.9% 
 flops-2.test 0.03 0.03 -13.7% 
 himenobmtxpa.test 0.10 0.12 11.6% 
 ffbench.test 0.06 0.07 9.3% 
 … $ ### The tool also has many useful options, see ‘—-help’ for details

  38. Tools and Tricks Test-suite + cmake + lit

  39. 
 Tools and Tricks Test-suite + cmake + lit Building and running: $ cd /Path/To/Sandbox $ cmake -DCMAKE_C_COMPILER=/Path/To/Compiler/bin/clang \ 
 -C /Path/To/test-suite/cmake/caches/target-x86_64-macosx.cmake \ 
 -C /Path/To/test-suite/cmake/caches/Os.cmake \ 
 -DTEST_SUITE_RUN_BENCHMARKS=Off \ 
 -DTEST_SUITE_SUBDIRS=CTMark \ 
 /Path/To/test-suite

Recommend


More recommend