-ããªãã¯ä»ãé¶äžäœåºŠãšã¯èšããŸãããïŒ
-ãªãã§ïŒ
-ãŸããç§ã¯... ãã¬ãŒãã³ã°äžã§ãã
-ããããèšç·Žãã..ïŒã¢ã«ã°ãããèŠãïŒ...ç«ã«ã€ããŠã
ãã®èšäºã§ã¯ãçµã¿èŸŒã¿ã·ã¹ãã ã«ãã€ã¢ã¹ããããªããCMAKEãšLZ4ã䜿çšããçµéšã«ã€ããŠèª¬æããŸãã MakefileãCMAKEã«ç²ŸéããŠãã人ã¯ãæåã®æ°æ®µèœãå®å šã«ã¹ãããã§ããŸãã
ãã
ç«ãšããŠãå°æ°ã®ãã¡ã€ã«ãšããã€ãã®ç®æšïŒå®è¡å¯èœãã¡ã€ã«ãšã©ã€ãã©ãªïŒã§æ§æããããããã¯ãŒã¯äžã§ãå°ããªãªãŒãã³ãœãŒã¹ãããžã§ã¯ããåãããšããå§ãããŸãã å€ãã®äººæ°ã®ãããããžã§ã¯ãã¯ãã§ã«å€æ°ã®ãã¡ã€ã«ã§å€§ãããªããããŠããããããã®ãããªãããžã§ã¯ããèŠã€ããããšã¯å°é£ã§ãã ãããã LZ4ããã«ãŒã¯è¯ãåè£ã§ããããšãå€æããŸããã LZ4ã¯ãŸã è¥ããæãéèŠãªããšã¯ãéåžžã«ã·ã³ãã«ã§ãããSUPER FASTæ å ±å§çž®ãç®çãšããŠããããã§ããããããããããå°ããçç±ã§ãã倧éšåã®ã³ãŒããããã«åäœããªãããã§ãïŒãã£ãã·ã¥ã§æé©åãããŸããïŒã
LZ4ã¯æ å ±ããã°ããå§çž®ã§ããŸããããã¯ãçµã¿èŸŒã¿ã®äžçã§ã¯ãããã©ãŒãã³ã¹ãšã¡ã¢ãªã®èŠä»¶ãã»ãšãã©ãªãããšãæå³ããŸãã LPC2478ã®å§çž®ã«é©åãããããšãã§ããŸããããå¿ èŠãªRAMã®éã¯12kïŒ4kå ¥åãããã¡+ 4kåºå+ 4kèŸæžïŒã§ããã ãã®ããªã¥ãŒã ã¯ãåœç¶å§çž®çã®æ倱ã«ããã256 +256 + 256ã«åæžã§ãããšæããŸãã ããã«ãããããããããã§ãè¯ããªãã·ã§ã³ã§ãã®ã§ããµã€ãºã30ã100ãã€ãã®ãã»ãŒãç¹°ãè¿ãèšé²ãããå Žåãäžéšã®ã·ã¹ãã ã®ããŒãªã³ã°å±¥æŽãå§çž®ããããã®unningãªã¢ã«ãŽãªãºã ãäœæããŸããã å§çž®ã¢ã«ãŽãªãºã ã«èå³ããã人ã®ããã«ãLZ4ã¯LZ77ã¢ã«ãŽãªãºã ã®æé©åããŒãžã§ã³ã§ããããšã«æ³šæããŠãã ããã
å¥ã®è³è³ã¯ã解åæ©èœã§ãã ããã¯éåžžã«ã·ã³ãã«ã§ãæ°åè¡ã®ã³ãŒãã«åãŸããŸããããã«ãããææ°ã®PCã§1GB / sã®è§£åé床ãå®çŸã§ããŸãã
çµã¿èŸŒã¿ã·ã¹ãã ã®ã¢ã»ã³ããªã·ã¹ãã ãšã¯äœã§ããïŒ
ååãšããŠãçµã¿èŸŒã¿ã·ã¹ãã ã®ãããžã§ã¯ãã¯ãã¹ãŠ
ãœãŒã¹ã³ãŒãâãã«ãã·ã¹ãã âã³ã³ãã€ã©ãŒâå®è¡å¯èœãã¡ã€ã«
ãã¡ãããæ°ããéçºãããç¬èªã®IDEã¯ããã¹ãŠã®ãã«ãäœæ¥ãè¡ãããã«æåãå°œãããŸãã[ãã¹ãŠãã«ã]ãã¯ãªãã¯ããã ãã§ãã ãã³ãŒãããŒã¹ãã倧ãããªããšãæ¢åã®ã³ãŒããã§ããã ãé »ç¹ã«ãããŸããŸãªæ¹æ³ã§åéããããšãæ€èšããŸãã
ã³ãŒããæ§ç¯ããããã®ããã€ãã®ãªãã·ã§ã³ãããçç±ã¯ã次ã®èŠå ã®ååšãããããŸããïŒ
- ããã€ãã®ãããžã§ã¯ã
- ããã€ãã®ããŒã
- æ°çš®é¡ã®ã³ã³ãããŒã©ãŒã§ã
- PCã§ã³ãŒãã®äžéšããã¹ããã
- 倧èŠæš¡ãªããŒã ã«ããããã€ãã®éçºãã©ã³ã
ãã®ãããªèŠä»¶ã«å¯Ÿããæåã®åå¿ã¯åžžã«ãifdefãå ¥ããŸããããã§ãããifdefã ãã§ã¯ã§ããªãããŸãã¯åé¿ã§ããªãããšã«ããã«æ°ã¥ããŸãããã³ãŒãã¯ããŸãèŠæ ãããããããŸããã
ã¡ã€ã¯ãã¡ã€ã«
MakeãŠãŒãã£ãªãã£ãã¢ãªãŒãã«å ¥ããæ®å¿ãªç·ãã¡ãã³ã³ãã€ã©ãšãã®ããŒãåãåããã¢ã»ã³ããªã«ãŒã«ã®èšè¿°ãéå§ããŸãã Makeã¯ååã«ãã°ããåŠç¿ã§ããŸãããæ¢ã«3ã€ã®ãããžã§ã¯ããšå€ãã®ãã©ã«ããŒããããããããã«ã©ã€ãã©ãªãŒãããå Žåã¯ãMakefileã®äœæã«ãã£ãšç±å¿ã§ãªããã°ãªããŸããã Makeã䜿çšãããã«ãå³ã¯æ¬¡ã®ããã«ãªããŸãã
ãœãŒã¹ã³ãŒã-> GNU MAKE->ã³ã³ãã€ã©->å®è¡å¯èœãã¡ã€ã«
CMAKE
CMAKEã¯é«åºŠãªã¡ã€ã¯ã§ãã CmakeLists.txtã§èª¬æãããŠããã¢ã»ã³ããªã«ãŒã«ã«åºã¥ããŠãCMAKEã¯ãMAKEããã³ãã®ä»ã®ãŠãŒãã£ãªãã£ãšéçºç°å¢ã®ã¢ã»ã³ããªå¶åŸ¡ãã¡ã€ã«ãçæããŸãïŒãµããŒããããŠãããŠãŒãã£ãªãã£ã®ãªã¹ãã¯ããcmake -helpããå®è¡ããŠååŸã§ããŸãïŒã åè·¯ã¯æ¬¡ã®ãšããã§ãã
ãœãŒã¹ã³ãŒãâCMAKEâGNU MAKEãŸãã¯NMAKEãŸãã¯.... ->ã³ã³ãã€ã©->å®è¡å¯èœãã¡ã€ã«ïŒsïŒ
CMAKEã®å©ç¹ã®äžã§ãç§ã¯æ³šæããŸãã
- Lisp-oã¢ã»ã³ããªèŠåèšèªèªäœã¯ãMAKEãããé¡äŒŒããŠãããããéçºãããŠããŸãã åŸæ¥ã®Cãã©ãã€ã ãšã¯ç°ãªãäœããè©Šãè¯ãæ©äŒã§ãã
- ãã®ãŠãŒãã£ãªãã£ã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ããããã«ãã¯IDEããã³åäœäžã®OSã«äŸåããŸããã
- ã¢ã»ã³ããªã«ãŒã«ã ãã§ãªããã³ãŒããããã¯ãEclipseãããã³Visual Studioã®ãããžã§ã¯ããçæãããŸãã
- ãœãŒã¹ã³ãŒãèªäœãçæããã ãã§ãªããAutomakeãšQmakeã眮ãæããããšãã§ããå€ãã®ã¢ãžã¥ãŒã«ãçæããååãªæ©äŒããããŸãã
- èªåã¢ã»ã³ããªã·ã¹ãã ïŒCDASHïŒãããã±ãŒãžã³ã°ïŒCPACKïŒãããã³ãã¹ãïŒCTESTïŒããããŸãã
- CMAKEã人æ°ã§ãã å€ãã®éçºããŒã ã¯ããã®äžã«ãããããžã§ã¯ãïŒKDEãªã©ïŒã翻蚳ããŸãã
çµã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã®åéã§ã®äž»ãªå©ç¹ã¯ãæçµçã«ã³ãŒãã®ç§»æ€æ§ãåäžããããšã§ãããããã°ãããå¿«é©ã«ããããã«ãPCçšã®ã¢ããªã±ãŒã·ã§ã³ã®äžéšãåéããããšã«äžæ©è¿ã¥ããŸãã BUILDãã¹ããèªåçã«å®è¡ã§ããŸãããCode RedãŸãã¯CoCoxã§èš±å¯ãããŠãããã©ããã¯ããããŸããããCMAKEã䜿çšãããšIDEã«äŸåããŸããã
æå°éã®ãããžã§ã¯ã
以äžã¯ãåçŽãªïŒãã ãæãåçŽã§ã¯ãªãïŒCmakeLists.txtãã¡ã€ã«ã§ãã
cmake_minimum_required (VERSION 2.8) PROJECT(LZ4 C) set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/) ADD_DEFINITIONS("-Wall") ADD_DEFINITIONS("-W") ADD_DEFINITIONS("-Wundef") ADD_DEFINITIONS("-Wcast-align") ADD_DEFINITIONS("-Wno-implicit-function-declaration") ADD_DEFINITIONS("-O3 -march=native -std=c99") INCLUDE_DIRECTORIES (${SRC_DIR}) set(LZ4_SRCS_LIB lz4_decoder.h lz4_encoder.h ${SRC_DIR}lz4.c ${SRC_DIR}lz4hc.c ${SRC_DIR}lz4.h ${SRC_DIR}lz4_format_description.txt) set(LZ4_SRCS ${LZ4_SRCS_LIB} ${SRC_DIR}xxhash.c ${SRC_DIR}bench.c ${SRC_DIR}lz4c.c ) set(FUZZER_SRCS # - ${LZ4_SRCS_LIB} ${SRC_DIR}fuzzer.c # ${SRC_DIR}ooops_commented_source_file.c ) # lz4c add_executable(lz4c ${LZ4_SRCS}) # fuzzer add_executable(fuzzer ${FUZZER_SRCS})
make_minimum_requiredã¯ã Cmakeã®æå°ããŒãžã§ã³ãèšå®ããŸãã PROJECTã³ãã³ãã¯ããããžã§ã¯ãã®ååãšããã°ã©ãã³ã°èšèªãèšå®ããŸãã
ã³ãã³ãã¯ãå°æåãšå€§æåã®äž¡æ¹ã§èšè¿°ã§ããŸãã æãäžè¬çãªsetã³ãã³ãã¯ãBasicã®ãLetãã®ãããªå€æ°ã®å²ãåœãŠãšäœæã®é¡äŒŒç©ã§ããå°ãé¢åã«ãªãå§ããŸããããã®åŸã¯æ £ããŸãã ä»ã®å€æ°ã¯CMAKEã§äºåå®çŸ©ãããŠããããã®ãã¡ã®1ã€ã¯$ {CMAKE_CURRENT_SOURCE_DIR}ã§ãã makeãšåæ§ã«ã SRC_DIRã¯å€æ°ã®ååã§ããã $ {SRC_DIR}ã¯å€ã§ãã CMAKEã®å€æ°ã¯ãªã¹ããšããŠæ±ãããŸãããæååãŸãã¯æ°å€ãšããŠè§£éãããå ŽåããããŸãã ãã¡ã€ã«ã®ãªã¹ãã¯æ°è¡ã«ç°¡åã«åå²ã§ããŸãã
ADD_DEFINITIONSã¯å®éã«ã¯ããªããã»ããµãã¯ããæå®ããããã«äœ¿çšããå¿ èŠããããŸãããããã§ã¯åã«ã³ã³ãã€ã©ããŒãæå®ããããã«äœ¿çšããŸãã
add_executableã¯ãã¢ã»ã³ããªã®ç®ç-å®è¡å¯èœãã¡ã€ã«ãèšå®ããŸãã
æ§æ
ãã§ã«ãã®ãããªå°ããªCmakeLists.txtã䜿çšãããšãLZ4ããã«ãŒïŒçŸåšã®ãªããžã§ã³94ïŒãçµã¿ç«ãŠãããšãã§ããŸãã ã³ãã³ãã³ã³ãœãŒã«ãéãã瀺ãããŠãããžã§ãã¬ãŒã¿ãŒã§cmakeãå®è¡ããŸãïŒeranã®ã¹ã¯ãªãŒã³ã·ã§ãããåç §ïŒã

ã¡ã€ã¯ã¯ããã€ãã®åºæ¬çãªã¡ãã»ãŒãžãçæããŸããããã®å Žåã¯ç¡èŠãããŸã-éæšæºã¯çºçããŸãã-MakefileãšCodeBlocksã®ãããžã§ã¯ããçæãããŸãã
makeã®åã«Cmakeãèµ·åãããšãã圢ã§äºåæ§æãã§ãŒãºãååšãããããCMAKEãèµ·åããããã®åŒæ°ãšãã¢ã»ã³ããªãå®è¡ããããœãããŠã§ã¢ããŒãžã§ã³ïŒOSãã³ã³ãã€ã©ïŒã«åºã¥ããŠã³ã³ãã€ã«ããã»ã¹ãå€æŽã§ããŸãã ãã¡ã€ã«ã®ã³ããŒããã¡ã€ã«ã®ããŠã³ããŒãããããã®é©çšããœãŒã¹ãã¡ã€ã«ã®çæãªã©ãã§ããŸãã Cmakeã«ã¯ãè¿œå ã®ãŠãŒã¶ãŒå®çŸ©ã®åŒæ°ãæž¡ãæ©èœããããŸãã Cmakeã¯ãæ§æããã»ã¹äžã«ããŸããŸãªãŠãŒãã£ãªãã£ãå®è¡ããããšãã§ããŸãã ããã«ã€ããŠã¯ã次ã®ããŒãã§èª¬æããŸãã
å€§å¹ ã«æ¡åŒµããããããã¢ã»ã³ããªã«é¢ããŠã¯ãCMAKEã¯Gentoo Linuxã§Portage + automakeæ©èœãå®è¡ã§ããŸãããCmakeã¯pythonãã£ã¹ããªãã¥ãŒã·ã§ã³ãããã³ã³ãã¯ãã§ãå€ãã®ãã©ãããã©ãŒã ïŒäž»ã«WindowsïŒã«ç§»æ€å¯èœã§ãã
ãã«ãéå§
ã¢ã»ã³ããªã¯ãaïŒCodeBlocks bïŒmakeïŒãmake VERBOSE = 1ãããã³ãmake helpããè©ŠããŠã¿ãããšããå§ãããŸãïŒã«ãã£ãŠèµ·åãããŸãã makeã®ãã®ä»ã®å©ç¹ã¯ãã³ã³ãœãŒã«ãžã®ã«ã©ãŒåºåãšå®äºã®å²åã§ãã
ãã£ãŒïŒ
ããã§ã¯ãlz4 packerãã楜ãã¿ãã ããã
CïŒ\ãã¹ã¯ããã\ lz4> lz4c.exe -H *** Yann Colletã«ããLZ4 Compression CLIïŒ2013幎5æ1æ¥ïŒ*** 䜿çšæ³ïŒ lz4c.exe [arg]å ¥ååºå åŒæ°ïŒ -c0 / -cïŒé«éå§çž®ïŒããã©ã«ãïŒ -c1 / -hcïŒé«å§çž® -dïŒè§£å -yïŒããã³ãããªãã§äžæžã -HïŒãã«ãïŒãã®ããã¹ã+詳现ãªãã·ã§ã³ïŒ 詳现ãªãã·ã§ã³ïŒ -tïŒå§çž®ãã¡ã€ã«ããã¹ãããŸã -BïŒïŒãããã¯ãµã€ãº[4-7]ïŒããã©ã«ãïŒ7ïŒ -xïŒãããã¯ãã§ãã¯ãµã ãæå¹ã«ããŸãïŒããã©ã«ãïŒç¡å¹ïŒ -nxïŒã¹ããªãŒã ãã§ãã¯ãµã ãç¡å¹ã«ããŸãïŒããã©ã«ãïŒæå¹ïŒ -bïŒïŒïŒ[0-1]å§çž®ã¬ãã«ã䜿çšãããã³ãããŒã¯ãã¡ã€ã« -iïŒïŒå埩ã«ãŒã[1-9]ïŒããã©ã«ãïŒ3ïŒããã³ãããŒã¯ã¢ãŒãã®ã¿ å ¥åïŒ 'stdin'ïŒãã€ãïŒãŸãã¯ãã¡ã€ã«å åºåïŒ 'stdout'ïŒãã€ãïŒãŸãã¯ãã¡ã€ã«åãŸã㯠'null' äŸïŒlz4c -hc stdin compressedfile.lz4
èªåã§æ¢±å ããŸãã
CïŒ\ãã¹ã¯ããã\ lz4> lz4c.exe lz4c.exe lz4c.lz4 *** Yann Colletã«ããLZ4 Compression CLIïŒ2013幎5æ1æ¥ïŒ*** 98828ãã€ãã56586ãã€ãã«å§çž®==> 57.26ïŒ 0.03ç§ã§å®äº==> 3.04 MB /ç§
ãã³ãããŒã¯ãéå§ããŸãã
CïŒ\ãã¹ã¯ããã\ lz4> lz4c.exe -b lz4c.exe lz4c.lz4 *** Yann Colletã«ããLZ4 Compression CLIïŒ2013幎5æ1æ¥ïŒ*** lz4c.exeïŒ98828-> 56567ïŒ57.24ïŒ ïŒã163.3 MB / sã467.5 MB / s lz4c.lz4ïŒ56586-> 56278ïŒ99.46ïŒ ïŒã273.1 MB / sã1442.1 MB / s åèšïŒ155414-> 112845ïŒ72.61ïŒ ïŒã191.3 MB / sã620.0 MB / s
ç§ã®ã³ã³ãã¥ãŒã¿ãŒã¯ããã»ã©é«éã§ã¯ãªããå®å šã«ãã¹ããããŠãããšã¯èšããŸãããããããã®æ°å€ã¯éåžžã«å°è±¡çã§ãã
åèš
ãããã£ãŠããã®èšäºãCmakeãŠãŒãã£ãªãã£ã®éçºã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã 次ã®ããŒãã§ã¯ãLZ4ã®çµã¿ç«ãŠã®åé¡ã«é¢ãããããªãç 究ã«ã€ããŠæžããŸãã 奜å¥å¿areçãªäººã®ããã«ãç§ãæžãããã¡ã€ã«ã®æçµããŒãžã§ã³ã¯ããã°ã©ã ã®äœè ã«åãå ¥ããããŸããããLZ4ã®çŸåšã®ããŒãžã§ã³ã«ã¯2ã€ã®CmakeListsãã¡ã€ã«ããããŸããç§ã¯ãŸã ç§ã®æã«å±ããŸããã§ããã ã°ã«makeãããŠïŒ