ã¯ããã«
ã»ãšãã©ã®éçºè ã¯ãLLVMã·ã¹ãã ãclangã³ã³ãã€ã©ãªã©ãéåžžã«éèŠãªãªãŒãã³ãœãŒã¹éçºã«ã€ããŠæ確ã«èããŠããŸãã ãã ããLLVMã¯ã³ã³ãã€ã©ãŒãäœæããããã®ã·ã¹ãã ãã®ãã®ã§ããã ãã§ãªããã³ã³ãã€ã©ãŒäœæã®ãããã段éã§çºçããããŸããŸãªåé¡ã解決ããããã®å€ãã®ãããžã§ã¯ããå«ã倧èŠæš¡ãªãšã³ã·ã¹ãã ã§ããããŸãïŒéåžžãåãããžã§ã¯ãã«ã¯ç¬èªã®ãªããžããªããããŸãïŒã ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äžéšã«ã¯ããã¹ãããã³ãã³ãããŒã¯ããŒã«ãå«ãŸããŸãã ã³ã³ãã€ã©ãéçºãããšãããã®æå¹æ§ã¯éåžžã«éèŠãªææšã§ãã ãããã®åã ã®LLVMãã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ãããžã§ã¯ãã®1ã€ã¯ããã¹ãã¹ã€ãŒãïŒ å ¬åŒããã¥ã¡ã³ã ïŒã§ãã
LLVMãã¹ãã¹ã€ãŒã
ãã¹ãã¹ã€ãŒããªããžããªãäžèŠãããšãããã¯C / C ++ã®ãã³ãããŒã¯ã®ã»ããã«ãããªãããã§ãããããã¯å®å šã«çå®ã§ã¯ãããŸããã ããã©ãŒãã³ã¹æž¬å®ãè¡ãããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã«å ããŠããã¹ãã¹ã€ãŒãã«ã¯ãã¡ããªãã¯ãæ§ç¯ãå®è¡ãããã³åéããããã®æè»ãªã€ã³ãã©ã¹ãã©ã¯ãã£ãå«ãŸããŠããŸãã ããã©ã«ãã§ã¯ãã³ã³ãã€ã«æéãå®è¡æéããªã³ã¯æéãã³ãŒããµã€ãºïŒã»ã¯ã·ã§ã³ïŒã®ã¡ããªãã¯ãåéããŸãã
ãã¹ãã¹ã€ãŒãã¯ãã³ã³ãã€ã©ã®ãã¹ããšãã³ãããŒã¯ã«èªç¶ã«åœ¹ç«ã¡ãŸãããC / C ++ã³ãŒãããŒã¹ãå¿ èŠãªä»ã®ç 究ã¿ã¹ã¯ã«ã䜿çšã§ããŸãã ãã€ãŠããŒã¿åæã®åéã§äœããããããšãã人ã¯ããœãŒã¹ããŒã¿ã®äžè¶³ãšæçåã®åé¡ã«çŽé¢ãããšæããŸãã ãã¹ãã¹ã€ãŒããèšå€§ãªæ°ã®ã¢ããªã±ãŒã·ã§ã³ã§æ§æãããŠããããã§ã¯ãããŸããããçµ±äžãããããŒã¿åéã¡ã«ããºã ãåããŠããŸãã ã³ã¬ã¯ã·ã§ã³ã«ç¬èªã®ã¢ããªã±ãŒã·ã§ã³ãè¿œå ããç¹å®ã®ã¿ã¹ã¯ã«å¿ èŠãªã¡ããªãã¯ãåéããã®ã¯éåžžã«ç°¡åã§ãã ãããã£ãŠãç§ã®æèŠã§ã¯ããã¹ãã¹ã€ãŒãã¯ïŒãã¹ããšãã³ãããŒã¯ã®äž»ãªã¿ã¹ã¯ã«å ããŠïŒåºæ¬ãããžã§ã¯ãã«é©ãããªãã·ã§ã³ã§ãããããã«åºã¥ããŠãããã°ã©ã ã³ãŒãã®ããã€ãã®æ©èœãŸãã¯ããã°ã©ã ã®ããã€ãã®ç¹æ§ãåæããå¿ èŠãããã¿ã¹ã¯ã®ããŒã¿ã³ã¬ã¯ã·ã§ã³ãæ§ç¯ã§ããŸã
LLVMãã¹ãã¹ã€ãŒãã®æ§é
test-suite |----CMakeLists.txt // CMake , , | // .. | |---- cmake | |---- .modules // , | // API | |---- litsupport // Python, test-suite, | // lit ( LLVM) | |---- tools // : | // ( | // ), .. | | // | |---- SingleSource // , | // . . | |---- MultiSource // , | // . | // . | |---- MicroBenchmarks // , google-benchmark. | // , , | // | |---- External // , test-suite, | // , ( ) | // -
æ§é ã¯ã·ã³ãã«ã§ç°¡åã§ãã
åäœåç
ã芧ã®ãšãããCMakeãšç¹å¥ãªã©ã€ããã¹ã圢åŒã¯ãã¡ããªãã¯ã®ã¢ã»ã³ããªãèµ·åãããã³ã³ã¬ã¯ã·ã§ã³ã®èšè¿°ã«é¢ãããã¹ãŠã®äœæ¥ãæ åœããŸãã
éåžžã«æœè±¡çãªæ¹æ³ã§èãããšããã®ã·ã¹ãã ã䜿çšãããã³ãããŒã¯ããã»ã¹ãã·ã³ãã«ã§éåžžã«äºæž¬ããããããšã¯æããã§ãã
ããã¯ã©ã®ããã«è©³çŽ°ã«èŠããŸããïŒ ãã®èšäºã§ã¯ãã·ã¹ãã å šäœã§CMakeãæãã圹å²ãšããã®ã·ã¹ãã ã«äœããè¿œå ããå Žåã«èšè¿°ããå¿ èŠãããå¯äžã®ãã¡ã€ã«ã«ã€ããŠè©³ãã説æããŸãã
1.ãã¹ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã
ãã«ãã·ã¹ãã ãšããŠãC / C ++ CMakeããã°ã©ã ã®ããã¡ã¯ãã¹ã¿ã³ããŒãã«ãªããŸããã CMakeã¯ãããžã§ã¯ããæ§æãããŠãŒã¶ãŒã®å¥œã¿ã«å¿ããŠmakeãninjaãªã©ã®ãã¡ã€ã«ãçæããŸãã çŽæ¥å»ºèšã®ããã
ãã ãããã¹ãã¹ã€ãŒãã§ã¯ãCMakeã¯ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯æ¹æ³ã«é¢ããã«ãŒã«ãçæããã ãã§ãªãããã¹ãèªäœãæ§æããŸãã
CMakeãéå§ãããšãã¢ããªã±ãŒã·ã§ã³ã®å®è¡æ¹æ³ãšæ£ç¢ºæ§ã®ãã§ãã¯æ¹æ³ã®èª¬æãšãšãã«ããã¡ã€ã«ïŒæ¡åŒµå.testïŒããã«ããã£ã¬ã¯ããªã«æžã蟌ãŸããŸãã
æãæšæºçãª.testãã¡ã€ã«ã®äŸ
RUN: cd <some_path_to_build_directory>/MultiSource/Benchmarks/Prolangs-C/football ; <some_path_to_build_directory>/MultiSource/Benchmarks/Prolangs-C/football/football VERIFY: cd <some_path_to_build_directory>/MultiSource/Benchmarks/Prolangs-C/football ; <some_path_to_build_directory>/tools/fpcmp %o football.reference_output
æ¡åŒµåã.testã®ãã¡ã€ã«ã«ã¯ã次ã®ã»ã¯ã·ã§ã³ãå«ãŸããå ŽåããããŸãã
- PREPARE-åäœãã¹ãçšã®ããŸããŸãªãã¬ãŒã ã¯ãŒã¯ã«ååšããBeforeã¡ãœãããšéåžžã«ãã䌌ããã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«å®è¡ããå¿ èŠãããã¢ã¯ã·ã§ã³ãèšè¿°ããŸãã
- RUN-ã¢ããªã±ãŒã·ã§ã³ã®å®è¡æ¹æ³ã説æããŸãã
- æ€èšŒ-ã¢ããªã±ãŒã·ã§ã³ã®æ£ããåäœã確èªããæ¹æ³ã説æããŸãã
- METRIC-æšæºã§ããã«åéããå¿ èŠãããã¡ããªãã¯ã説æããŸãã
ãããã®ã»ã¯ã·ã§ã³ã¯ããããçç¥ã§ããŸãã
ãã ãããã®ãã¡ã€ã«ã¯èªåçã«çæãããããããã³ãããŒã¯ã®CMakeãã¡ã€ã«ã«ãããŸãããªããžã§ã¯ããã¡ã€ã«ãååŸããæ¹æ³ãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã»ã³ãã«ããæ¹æ³ããã®ã¢ããªã±ãŒã·ã§ã³ã§äœãããå¿ èŠãããããèšè¿°ããŠããŸãã
ããã©ã«ãã®åäœãšãããã©ã®ããã«èšè¿°ãããããããããç解ããããã«ãããã€ãã®CMakeLists.txtã®äŸãæ€èšããŠãã ããã
list(APPEND CFLAGS -DBREAK_HANDLER -DUNICODE-pthread) # ( .. CMak, ) list(APPEND LDFLAGS -lstdc++ -pthread) #
ãã©ã°ã¯ãã©ãããã©ãŒã ã«å¿ããŠèšå®ã§ããŸããDetectArchitectureãã¡ã€ã«ã¯ãã¹ãã¹ã€ãŒãcmakeã¢ãžã¥ãŒã«ã«å«ãŸããŠããããã³ãããŒã¯ãå®è¡ãããã¿ãŒã²ãããã©ãããã©ãŒã ã決å®ãããããæ¢ã«åéãããããŒã¿ãç°¡åã«äœ¿çšã§ããŸãã ä»ã®ããŒã¿ãå©çšå¯èœã§ãïŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã€ããªãŒããŒãªã©ã
if(TARGET_OS STREQUAL "Linux") list(APPEND CPPFLAGS -DC_LINUX) endif() if(NOT ARCH STREQUAL "ARM") if(ENDIAN STREQUAL "little") list(APPEND CPPFLAGS -DFPU_WORDS_BIGENDIAN=0) endif() if(ENDIAN STREQUAL "big") list(APPEND CPPFLAGS -DFPU_WORDS_BIGENDIAN=1) endif() endif()
ååãšããŠããã®éšåã¯ãå°ãªããšãäžåºŠã¯åçŽãªCMakeãã¡ã€ã«ã衚瀺ãŸãã¯äœæããããšããã人ã«ãšã£ãŠã¯æ°ãããã®ã§ãã£ãŠã¯ãªããŸããã åœç¶ãã©ã€ãã©ãªã䜿çšããèªåã§ãã«ãã§ããŸããäžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ã®ãã«ãããã»ã¹ã説æããããã«CMakeãæäŸããä»»æã®æ段ã䜿çšã§ããŸãã
ãããŠã.testãã¡ã€ã«ã®çæã確èªããå¿ èŠããããŸãã tets-suiteã€ã³ã¿ãŒãã§ãŒã¹ããããæäŸããããŒã«ã¯äœã§ããïŒ
2ã€ã®åºæ¬çãªãã¯ãllvm_multisourceãšllvm_singlesourceããããã»ãšãã©ã®äºçŽ°ãªå Žåã«ã¯ããã§ååã§ãã
- llvm_multisource㯠ãã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®ãã¡ã€ã«ã§æ§æãããŠããå Žåã«äœ¿çšãããŸãã CMakeã§ãã®ãã¯ããåŒã³åºããšãã«ãã©ã¡ãŒã¿ãŒãšããŠãœãŒã¹ã³ãŒããã¡ã€ã«ãæž¡ããªãå ŽåãçŸåšã®ãã£ã¬ã¯ããªã«ãããã¹ãŠã®ãœãŒã¹ã³ãŒããã¡ã€ã«ããã«ãã®ããŒã¹ãšããŠäœ¿çšãããŸãã å®éããã¹ãã¹ã€ãŒãã®ãã®ãã¯ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã§çŸåšå€æŽãè¡ãããŠããŸãããœãŒã¹ãã¡ã€ã«ããã¯ããã©ã¡ãŒã¿ãŒãšããŠè»¢éããæ¹æ³ã¯ããã¹ã¿ãŒãã©ã³ãã«ããçŸåšã®ããŒãžã§ã³ã§ãã 以åã¯ãå¥ã®ã·ã¹ãã ããããŸããããœãŒã¹ã³ãŒããå«ããã¡ã€ã«ã¯ãïŒãªãªãŒã¹7.0ã®ããã«ïŒSourceå€æ°ã«æžã蟌ãå¿ èŠãããããã¯ãã¯ãã©ã¡ãŒã¿ãŒãåãå ¥ããŸããã§ããã ããããå®è£ ã®åºæ¬çãªããžãã¯ã¯åããŸãŸã§ãã
- llvm_singlesourceã¯ãå.c / .cppãã¡ã€ã«ãåå¥ã®ãã³ãããŒã¯ã§ãããããããã«å¯ŸããŠåå¥ã®å®è¡å¯èœãã¡ã€ã«ãåéãããšèŠãªããŸãã
ããã©ã«ãã§ã¯ããã«ããããã¢ããªã±ãŒã·ã§ã³ãèµ·åããäžèšã®äž¡æ¹ã®ãã¯ãã¯ããã®ã¢ããªã±ãŒã·ã§ã³ãåã«åŒã³åºãã³ãã³ããçæããŸãã ãããŠãæ€èšŒã¯ãæ¡åŒµåã.reference_outputã®ãã¡ã€ã«å ã«ããäºæ³ãããåºåãšæ¯èŒããããšã«ãã£ãŠå®è¡ãããŸãïŒãŸãã.reference_output.little-endianã.reference_output.big-endianã®å¯èœæ§ã®ãããµãã£ãã¯ã¹ã䜿çšïŒã
ãããããªãã«åã£ãŠããã°ãããã¯çŽ æŽãããããšã§ããã¢ããªã±ãŒã·ã§ã³ãèµ·åãã次ã®ææšãååŸããã«ã¯ãäœåãªè¡ïŒllvm_multisourceãŸãã¯llvm_singlesourceãåŒã³åºãïŒã§ååã§ãïŒã³ãŒããµã€ãºïŒã»ã¯ã·ã§ã³ïŒãã³ã³ãã€ã«æéããªã³ã¯æéãå®è¡æéã
ãããããã¡ããããã¹ãŠãã¹ã ãŒãºã«ãªãããšã¯ãã£ãã«ãããŸããã 1ã€ä»¥äžã®ã¹ããŒãžãå€æŽããå¿ èŠãããå ŽåããããŸãã ãããŠãããã¯åçŽãªã¢ã¯ã·ã§ã³ã®å©ããåããŠãå¯èœã§ãã èŠããŠããå¿ èŠãããå¯äžã®ããšã¯ãããã¹ããŒãžãåå®çŸ©ããå Žåãä»ã®ãã¹ãŠã®ã¹ããŒãžãèšè¿°ããå¿ èŠããããšããããšã§ãïŒãã¡ããããããã®äœæ¥ã®ããã©ã«ãã¢ã«ãŽãªãºã ãæºããããŠããŠããããã¯å°ãåæºããŸãïŒã
APIã«ã¯ãå段éã§ã®ã¢ã¯ã·ã§ã³ãèšè¿°ãããã¯ãããããŸãã
æºåãã§ãŒãºã®llvm_test_prepareãã¯ãã«ã€ããŠæžãããšã¯ããŸããããŸãããå®è¡ããå¿ èŠãããã³ãã³ãã¯ãåã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸãã
èµ·åã»ã¯ã·ã§ã³ã«ã¯äœãå¿ èŠã§ããïŒ æãäºæž¬å¯èœãªã±ãŒã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãããã€ãã®åŒæ°ãå ¥åãã¡ã€ã«ãåãå ¥ããããšã§ãã ãããè¡ãã«ã¯ã llvm_test_runãã¯ãããããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·ååŒæ°ïŒå®è¡å¯èœãã¡ã€ã«ã®ååãªãïŒã®ã¿ããã©ã¡ãŒã¿ãŒãšããŠåãå ¥ããŸãã
llvm_test_run(--fixed 400 --cpu 1 --num 200000 --seed 1158818515 run.hmm)
æ€èšŒã®æ®µéã§ã¢ã¯ã·ã§ã³ãå€æŽããã«ã¯ã llvm_test_verifyãã¯ãã䜿çšããŸããããã¯ãã³ãã³ãããã©ã¡ãŒã¿ãŒãšããŠåãå ¥ããŸãã ãã¡ãããæ£ããããšã確èªããã«ã¯ãtoolsãã©ã«ããŒã«å«ãŸããŠããããŒã«ã䜿çšããããšããå§ãããŸãã ãããã¯ãçæãããåºåãäºæ³ãããåºåãšæ¯èŒããè¯ãæ©äŒãæäŸããŸãïŒå®æ°ãšãšã©ãŒãæ¯èŒããããã®å¥ã®åŠçãªã©ããããŸãïŒã ãã ããã©ããã§ãã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«å®äºããããšãªã©ã確èªããã ãã§ãã
llvm_test_verify("cat %o | grep -q 'exit 0'") # %o - placeholder , lit. lit, , . lit ( , LLVM) ( <a href="https://llvm.org/docs/CommandGuide/lit.html"> </a>)
ããããè¿œå ã®ã¡ããªãã¯ãåéããå¿ èŠãããå Žåã¯ã©ãã§ããããïŒ ãã®ããã®llvm_test_metricãã¯ãããããŸãã
llvm_test_metric(METRIC < > <, >)
ããšãã°ãdhrystoneã®å Žåãããã«åºæã®ã¡ããªãã¯ãååŸã§ããŸãã
llvm_test_metric(METRIC dhry_score grep 'Dhrystones per Second' %o | awk '{print $4}')
ãã¡ããããã¹ãŠã®ãã¹ãã«ã€ããŠè¿œå ã®ã¡ããªãã¯ãåéããå¿ èŠãããå Žåããã®æ¹æ³ã¯ããäžäŸ¿ã§ãã llvm_test_metricåŒã³åºããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããäžäœã¬ãã«ã®ãã¯ãã«è¿œå ããå¿ èŠãããããTEST_SUITE_RUN_UNDERïŒCMakeå€æ°ïŒãšç¹å®ã®ã¹ã¯ãªããã䜿çšããŠã¡ããªãã¯ãåéã§ããŸãã TEST_SUITE_RUN_UNDERå€æ°ã¯éåžžã«äŸ¿å©ã§ãããšãã°ã·ãã¥ã¬ãŒã¿ãŒãªã©ã§å®è¡ããããã«äœ¿çšã§ããŸãã å®éãã³ãã³ããèšè¿°ããŠãå ¥åãšããŠã¢ããªã±ãŒã·ã§ã³ãåŒæ°ãšããŠåãåããŸãã
ãã®çµæã次ã®åœ¢åŒã®CMakeLists.txtãååŸããŸãã
# llvm_test_run(--fixed 400 --cpu 1 --num 200000 --seed 1158818515 run.hmm) llvm_test_verify("cat %o | grep -q 'exit 0'") llvm_test_metric(METRIC score grep 'Score' %o | awk '{print $4}') llvm_multisource() # llvm_multisource(my_application)
CMakeã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãæ¢ã«ãã«ããããŠããå Žåãçµ±åã«è¿œå ã®åŽåã¯å¿ èŠãããŸããããã¹ãã¹ã€ãŒãã®CMakeList.txtã«ãæ¢åã®CMakeãã¢ã»ã³ããªã«å«ããŠãç°¡åãªãã¯ãåŒã³åºããè¿œå ã§ããŸãã
2.ãã¹ãã®å®è¡
ãã®çµæãCMakeã¯æå®ããã説æã«åŸã£ãŠç¹å¥ãªãã¹ããã¡ã€ã«ãçæããŸããã ãããããã®ãã¡ã€ã«ã¯ã©ã®ããã«å®è¡ãããŸããïŒ
litã¯åžžã«lit.cfgæ§æãã¡ã€ã«ã䜿çšããŸããããã¯ããã¹ãã¹ã€ãŒãã«ååšããŸãã ãã®æ§æãã¡ã€ã«ã«ã¯ãå®è¡å¯èœãªãã¹ãã®åœ¢åŒãªã©ããã¹ããå®è¡ããããã®ããŸããŸãªèšå®ã瀺ãããŠããŸãã ãã¹ãã¹ã€ãŒãã¯ãlitsupportãã©ã«ããŒã«ããç¬èªã®åœ¢åŒã䜿çšããŸãã
config.test_format = litsupport.test.TestSuiteTest()
ãã®åœ¢åŒã¯ãæšæºç §æãã¹ãããç¶æ¿ãããå®è¡ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¡ã€ã³ã¡ãœããããªãŒããŒã©ã€ããããã¹ãã¯ã©ã¹ãšããŠèšè¿°ãããŸãã ãŸããlitsupportã®éèŠãªã³ã³ããŒãã³ãã¯ãTestPlanãã¹ãå®è¡èšç»ã®èª¬æãæã€ã¯ã©ã¹ã§ãããã®ã¯ã©ã¹ã«ã¯ãããŸããŸãªæ®µéã§å®è¡ããå¿ èŠãããã段éã®é åºãç¥ãå¿ èŠããããã¹ãŠã®ã³ãã³ããæ ŒçŽãããŸãã å¿ èŠãªæè»æ§ãæäŸããããã«ãmutatePlanã¡ãœãããæäŸããå¿ èŠã®ããã¢ãŒããã¯ãã£ã«ãã¢ãžã¥ãŒã«ãå°å ¥ãããŸããããã®äžã§ããã¹ãèšç»ãå€æŽããå¿ èŠãªã¡ããªãã¯ã®ã³ã¬ã¯ã·ã§ã³ã®èª¬æãå°å ¥ããã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ãèµ·åããããã®æéã枬å®ããããã®ã³ãã³ããè¿œå ããŸã ãã®ãœãªã¥ãŒã·ã§ã³ã«ãããã¢ãŒããã¯ãã£ã¯ããŸãæ¡åŒµãããŠããŸãã
ãã¹ãã¹ã€ãŒããã¹ãã®ããããã®ã¹ããŒã ïŒTestContextã¯ã©ã¹ãããŸããŸãªç¹ç¯æ§æããã¹ãèªäœãªã©ã®åœ¢åŒã®è©³çŽ°ãé€ãïŒã以äžã«ç€ºããŸãã
ç¹ç¯ãããšãæ§æãã¡ã€ã«ã§æå®ããããã¹ãã¿ã€ããå®è¡ãããŸãã TestSuiteTestã¯ãçæãããCMakeãã¹ããã¡ã€ã«ã解æããã¡ã€ã³ã¹ããŒãžã®èª¬æãåãåããŸãã 次ã«ãèŠã€ãã£ããã¹ãŠã®ã¢ãžã¥ãŒã«ãåŒã³åºãããŠçŸåšã®ãã¹ãèšç»ãå€æŽãããèµ·åãã€ã³ã¹ãã«ã¡ã³ããããŸãã 次ã«ãåä¿¡ãããã¹ãèšç»ãå®è¡ãããŸããæºåãèµ·åãããã³æ€èšŒã®æ®µéã§å®è¡ãããŸãã å¿ èŠã«å¿ããŠããããã¡ã€ãªã³ã°ãå®è¡ã§ããŸãïŒæ§æäžã«ãããã¡ã€ãªã³ã°ã®å¿ èŠæ§ã瀺ãå€æ°ãèšå®ãããå Žåãã¢ãžã¥ãŒã«ã®1ã€ã«ãã£ãŠè¿œå ãããŸãïŒã 次ã®æé ã§ã¯ãã¡ããªãã¯ãåéããTestPlanã®metric_collectorsãã£ãŒã«ãã«æšæºã¢ãžã¥ãŒã«ã«ãã£ãŠè¿œå ãããåéæ©èœãåéããŸãããã®åŸãCMakeã§ãŠãŒã¶ãŒãèšè¿°ããè¿œå ã®ã¡ããªãã¯ãåéããŸãã
3.ãã¹ãã¹ã€ãŒãã®å®è¡
test-suiteãå®è¡ããã«ã¯2ã€ã®æ¹æ³ããããŸãã
- ããã¥ã¢ã«ãã€ãŸã ã³ãã³ãã®é 次åŒã³åºãã
cmake -DCMAKE_CXX_COMPILER:FILEPATH=clang++ -DCMAKE_C_COMPILER:FILEPATH=clang test-suite # make # llvm-lit . -o <output> #
- LNTïŒLLVMãšã³ã·ã¹ãã ã®å¥ã®ã·ã¹ãã ã䜿çšããŠããã³ãããŒã¯ãå®è¡ããçµæãããŒã¿ããŒã¹ã«ä¿åããWebã€ã³ã¿ãŒãã§ã€ã¹ã§çµæãåæã§ããŸãïŒã ãã¹ãå®è¡ããŒã å
ã®LNTã¯ãåã®æ®µèœãšåãæé ãå®è¡ããŸãã
lnt runtest test-suite --sandbox SANDBOX --cc clang --cxx clang++ --test-suite test-suite
åãã¹ãã®çµæã¯æ¬¡ã®ããã«è¡šç€ºãããŸã
PASS: test-suite :: MultiSource/Benchmarks/Prolangs-C/football/football.test (m of n) ********** TEST 'test-suite :: MultiSource/Benchmarks/Prolangs-C/football/football.test' RESULTS ********** compile_time: 1.1120 exec_time: 0.0014 hash: "38254c7947642d1adb9d2f1200dbddf7" link_time: 0.0240 size: 59784 size..bss: 99800 ⊠size..text: 37778 **********
ãã¹ãã¹ã€ãŒãã«å«ãŸããã¹ã¯ãªããã䜿çšããŠãLNTã䜿çšããã«ããŸããŸãªèµ·åã®çµæãæ¯èŒã§ããŸãïŒãã ãããã®ãã¬ãŒã ã¯ãŒã¯ã¯ããŸããŸãªããŒã«ã䜿çšããŠæ å ±ãåæããçŽ æŽãããæ©äŒãæäŸããŸãããåå¥ã®ã¬ãã¥ãŒãå¿ èŠã§ãïŒ
test-suite/utils/compare.py results_a.json results_b.json
2ã€ã®èµ·åããã®åããã³ãããŒã¯ã®ã³ãŒããµã€ãºãæ¯èŒããäŸïŒ-O3ããã³-Osãã©ã°ã䜿çš
test-suite/utils/compare.py -m size SANDBOX1/build/O3.json SANDBOX/build/Os.json Tests: 1 Metric: size Program O3 Os diff test-suite...langs-C/football/football.test 59784 47496 -20.6%
ãããã«
ãã¹ãã¹ã€ãŒãã«å®è£ ããããã³ãããŒã¯ãèšè¿°ããã³å®è¡ããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ã䜿ããããããµããŒãã容æã§ãããæ¡åŒµæ§ãé«ããååãšããŠãã¢ãŒããã¯ãã£ã§ã¯ããªããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããããããã¹ãã¹ã€ãŒãã¯éçºè ã«ãšã£ãŠéåžžã«äŸ¿å©ãªããŒã«ã«ãªããŸãã³ã³ãã€ã©ãããã³ãã®ã·ã¹ãã ã¯ãäžéšã®ããŒã¿åæã¿ã¹ã¯ã§äœ¿çšããããã«å€æŽã§ããŸãã