From 5151d15fc0a1a3efba5e14741c945e331eda0ad0 Mon Sep 17 00:00:00 2001 From: Shen Jiamin Date: Thu, 14 Apr 2022 23:13:02 +0800 Subject: [PATCH] add more powerful running support --- .gitignore | 34 +++++++++++++++++++++++++++ CMakeLists.txt | 58 +++++++++++++++++++++++++++++++++++++++++++++++ lib/libdpc2sim.a | Bin 0 -> 113880 bytes runner.sh | 30 ++++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 lib/libdpc2sim.a create mode 100755 runner.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b2f92e --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +build + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +# *.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5d71757 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.18) + +project("dpc2sim" LANGUAGES C CXX) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +set(CMAKE_CXX_STANDARD 17) + +# set(CMAKE_BUILD_TYPE "Release") +set(CMAKE_BUILD_TYPE "Debug") + +# ###################################################################################################################### +# SET LOCAL OPTIONS +# ###################################################################################################################### + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + add_compile_options(-O3) +else() + add_compile_options(-Og -g -Wall -Wextra) + add_compile_options(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address -fno-omit-frame-pointer) + add_compile_definitions(DEBUG) +endif(CMAKE_BUILD_TYPE STREQUAL "Release") +add_compile_options(-Wno-unused-parameter) +add_link_options(-no-pie) + +file(GLOB PREFETCHERS_CC example_prefetchers/*.cc) +file(GLOB TRACE_FILES traces/*.dpc.gz) + +find_library(libdpc2sim dpc2sim ${CMAKE_SOURCE_DIR}/lib) +find_program(RUNNER runner.sh ${CMAKE_SOURCE_DIR}) + +add_custom_target(sim-all) + +foreach(PREFETCHER IN LISTS PREFETCHERS_CC) + get_filename_component(PREFETCHER_NAME ${PREFETCHER} NAME_WLE) + string(REPLACE "_prefetcher" "" PREFETCHER_NAME ${PREFETCHER_NAME}) + set(PREFETCHER_EXE "dpc2sim-${PREFETCHER_NAME}") + + add_executable(${PREFETCHER_EXE} ${PREFETCHER} lib/dpc2sim.a) + target_link_libraries(${PREFETCHER_EXE} PRIVATE ${libdpc2sim}) + + add_custom_target(sim-${PREFETCHER_NAME}) + add_dependencies(sim-all sim-${PREFETCHER_NAME}) + + foreach(TRACE IN LISTS TRACE_FILES) + get_filename_component(TRACE_NAME ${TRACE} NAME_WLE) + string(REPLACE "_trace2.dpc" "" TRACE_NAME ${TRACE_NAME}) + + add_custom_target( + sim-${PREFETCHER_NAME}-${TRACE_NAME} + ${RUNNER} ${CMAKE_BINARY_DIR}/data ${PREFETCHER_NAME}-${TRACE_NAME} ${CMAKE_BINARY_DIR}/${PREFETCHER_EXE} ${TRACE} + DEPENDS ${RUNNER} ${PREFETCHER_EXE}) + add_dependencies(sim-${PREFETCHER_NAME} sim-${PREFETCHER_NAME}-${TRACE_NAME}) + endforeach() + +endforeach() + diff --git a/lib/libdpc2sim.a b/lib/libdpc2sim.a new file mode 100644 index 0000000000000000000000000000000000000000..0d761025c13d4cb2fdec2483cd37a0d305c78e82 GIT binary patch literal 113880 zcmeEv34GMmwf`@y5s`@%Yh0>hi#9IBgiY91;s-w--t#vi? zs=w7<*Is9%7q>P<>xRPf8yXuew7I3OwI*sj*4EV4i>zb;zcR+qJ3 zTyqKI5XF}EmU$$jy0O(nYe7xxh1K&KTBC-Igp#l<4RLiBHPl8MnwzRsmSJjWx`zIgICR(d72lA zOshU^`mEEuw)*CatLy7(TBCF8YNB3S!-Dq48VkRlr!YYo{*An&$1H-Tzy!frH*JOrhAsCMWbcFsdstULs1sqUuYirwEYMN><$s;U(l2(iCO(*ROYBMpT=|LPOgIau^O!f z)M#mjkX;%p*jnr6wKvVHX^K|2wARh9i&DctHOo{8G$v8X9`G$_t2dU9;DK7)d36if z+t9WU!UP?ZlUdkm13zL6A&`UnD3Rl)kGZvVl_HA3vW+Y#OQkf*-oOSF~b@AYzVuB2^nna*rbYN&+VQm{Tv`ETU zr5y5dI#Tdjda4^6n(9~``4K8%+2&vnZ?^0)%zdiSYrd-c->jn1NUkkY)1+Lr)-~4E zwAE2nJHMfg>QnW+x|TYsAx*Unb#0Uh##LG^$1U2>T4xVny!x6p2of3G`vD@~Hgs_f zjWL_fuciT+8R8&oc^p)IF;z|)+hjXWIMuedw$@P_P7YdeSmkLq<`Uo2efsQJ?f^6*<}# zMJDP1C*MfP=F;YXhf0GSY=U1R{tE_0A9s**j5~!fctT?cHThVD=8PFKfSA~P%$S_D z7Y_8|Mi2EJ3})s^Xh!5qrIR!N%Sua+J$5p=mmhbW32e@oE2c+I99B?3Qzpg~cweR0 z^Py&WFpE{NwZhxW8{_%4yYGUN-_YB#b`P(&gWc#~e%o#`e%9HtegFth#`%A}XLS5O zMRop2l#0M1m6(__`Bza0$d7fG_`Ma|*xp;Q9nap10X$+a7qo90RH{BK*@Nmc7tyKlWmGXx41M_I1DE0o38s{Majnkz@y)!{yrp@gt}~h$I&q`i($* zf2O+(y(19cgXv|4elrk%hirb5X}_H4G|`dda^wEDK>TT@R~Y)OKzsw)d=s9J@a`nK zs5csvoOSRnkpa zdKBpMvh--sCuitLZEv_?J)$0i+Pp)q_#85ng58_taSi*5M^dBX{qj2yU$6b;Hz{s$ zSiNvVH$0bZFm<$lAJI#!hf>mA5_=~Yo#n@-cCe55cTLFs&5drX%L0- zl9l-+Qy&^b%CE9+lW%^*21GKP==Mk6P(^y}*)r0nUsWnzNW!RK#aZ{^L`#vMyd6*| zv9K^Pv&c`h6vh?-C|EbYi_2sG?b-6d<>ueAbguH#zbNbeG0RWrjL_+!*`dUH+5|j- zWN;IZ{1GA*N&XZMKlN)osMalchoa!eE-&&Ti7kF_4;97TfzHRNT>1^{*^k`?Rxi-` zuerbra)DpU1$w!_-&2Jc63`EFfi(oi-q{_9`-re<+x(ubBmLA;&I&*I%_6_|gd)T> zwgUePsOsNFdH83_xjn-@?~e+_UOZ$*YWym{=ebdSL0_dQ;?vO@y}PI9RhmX|dgq2f z{36QcO4Eo8>J^ZcHdhLc7|krwy#Q)5T_1skOb_?XJwtBW$I{;Z5>KN@lb4l3jBQ(l+@O6?PfnU{s!uA`g~J+v~;7MqLTWFH~gM=M#Z)s zLWxaKL8EFqpw*@P{Xl#^RZD*=*StXdSt{fi;yl~sY@2AZi3@Gwdo}^lk%qTW7DF+_ z+B+n$VYi3v%IxkecF4N!o z;-#yIKz*{@4-dxsa+kjGe%>e{v zd;RpD%+o>a-d&vZV$u{PoyJ9eVm)^d=|8+@;z=~8>y|9d>9`_GbG&C~X^!VnS(@Wj zU}&v3>8Jj_d-wFR?mOXFnRtC0B15I>hEOlR6>#s6zJQqgf?ctDxU;7${XS_|xzmeT z)p7XrdO5iq^0Hm@KA9z(29uS8$pZ$H+exJ5_rbyBjUX2xI1Z?lNK^)j5GNy&I)2^s z*tEnzQww(|xcNw*P1*>pVZ|gUGkEkEq2W0y9t}Z9Ri(yu^PmQe<@BT( z|4+vlB*%>f{}-6 zM^Nr_Yw-%H+ip#^gVr|UX`9$$6VKYjA1z{OcVJa_YQzJax@FKg^}Y1&h;&JdjrJ>X zHTgl3V*KEd2EFE@Q*tqkoL%hx92mdYIPx~<;Cn6y_DT+HCt=(k_r}+em5mXfEo-ln zvL$Z4oD!tU45_vUI!{Cn8!tIrkN-f|NgwE1@`0`gf1vC54|E+vuGz?@-=)^eypP{T z)r#NL(>KA!4fgf0aT9h8*`}B6PVe^?A>8g=Mo3wA`bsKjp*2+Ez4W_(BR420y?{U? ztCpP^{1Z8c*08jV;G~-6rKf?Dv2x~Q@YitWKqfHAarrTOXY@L_GdP0W%?k+LKPFS7 z!p%W?E+Wp6IukYy|76%$ekE)i=$Bz*Nu{u{bRSV-?5nUb-(=X>?~$;v-`=ow&#af`Il2cHT|l|mhAkH z-?MvEVj#BV5Jb6>G*P<=`b&+!&cu-3TQN*7SnHSb3w-oEwVbP#bJS9+mJ8JKEwwBZ z%W8_q?&z58{1L~;nolI%nRzS}0nBGWJ(fEc7n?@Z@niTPw$CO;XRRF5Whpd3U{*lpvH#XJeY?T zO`o;OPhP_kda`YMWJZ=rsj~)r0ZdknkM-*gagp3Ig2OtV7H=f9cg4B`}k} zm1epI6)e6VNv|{mOYQ&zOmk1la}}eRz7mPxxeCxpp0vS?1EzD6X10gM344NKub8XA zyPkPrMjHdUzVYZAltyAaE3w|pO7zIA1ig}RXgn*iU1lW|4C$;ycOatJph<~A_@mi5 zi9t9|VxX`@%7F)}9_6A5WtDT%0#!X!9{<_p)2$Ex&D%3>!>EZxd&X^B>>kQfsxngC zWIpl}Y|lPg`yYr8YR{KYlrw!m!X~b^2~^t*8{W$@1g7_eh>m^JYHv6{QBU)<|5BaF zyGLz61?Kx7=lOo9v44YU|Nc|je+1!qM;>`(Fj5w*oHjdnDs9pYegm6ygY(-P8z%;* zFXTNJ6CJ)YP7TkRo{!OzcOq@R&Bx|VYi@6x*Yx>la6awc2-Y+On;YlVwM981*pUv=J)bbHC^hWFam7~; z4~+|6HDboNlGw<~aizn*QZQy*2|=N8#l&*LxWegsBAiC?`!t@z?iq(LfX6|T`6grz zyL?>H+;N3ISurMnSu&3Pk)UgaoiMI=$?y}#1yduYk1M%)WN2LJRikE%n-UvcIj&;( z-lNBin?g`%TnVuds|ow0JrNGS(9!cqgh2+_-`VETYPvDNio_i&5ir0e2sWD$gG~_( zI)MRSM6fR~Vz4=am0DO-Fw956!0%$QYy6;>8wEQ+p5XN+wq3FyS~HiP(N^=UR~v08 zs+kzATNw2w^3KVLbKBayiLK2bz+N_SiZ`*gdBFlIE#AbY=4jnSDk@)Si`LNA?1}8V zuAVl`)-0&wp#CHOg5(*|M$cfI3L!4|jEx!{*vNrIV2I+HJ}I|_pEWKthtJ^@3S+T6 z4;NgDuArWGs}rs|xM3Yl4v_he`Y$8DNdF}I*=D7L|8pB8yT)I$x`Hs+wcL=E&Fq8C zlN%es@KAsH3|pAR=EcOnjlr(|6hBWe9t0^!&&A?@rQ<>4udHX0#nma?HqS5|_2M7- z2fylH^KWm$T;0Rxlpy|lUcGr_{yWj(^tf>c^OnyUFWW`7C-@X2&f6t;(f$U|z6mcIkY6EqsqkZu3Gf!d zwU3%8cn}RU8IAwRg3pw}g7#JC5^n3QRN^&Ha4os|{B|Dvsyz5LdGMbIuJu`;tMcFv z<&pE}Jou}5a2#!#SZf~_`tT!OE$z`ZuPr*SxjpL5pWoQtR`1o(P?Aqc<=7~1ofES* z$^+Hyx3HVjNZ8peBC`9od1rMV!P)Ka5W@RN|M#5O$2cd3{t5>D8ILD#Gwq*LmkjRz z%HW4Fcb0$VZw!8ngBOaNFFSaV;L{zvSnyLEyhQMCI(Sg_);5Rw=EWvMc@G}Kp?cj3+U+3WUffnD9{1yiv z5ZtWLW%I?8ddh2jR(=%M+N)LvpCkBX4qh+#cO1M$@M|4>q2M< zaPY-~-|paDg5T}n%LISW!IulZ(ZN>;{)~gK6#NATUoAM6I_-S#7W`cYUoZGb87FH# z_6Z(v@XdlB;NV*XKg_|m34V-&Zx_7W!3PAdba3wu(@&k^;Dv&p<={nv*E)Ey;7tx5 z6#NngFA+TE;H8469DIu4%N)Ey@S7am7yLE{pDFk=4qhbfM!$nk5&T^TpCkC5GT_zx z)qdeX2iNxbC%gMPQPyQmf>TM>c((|4d+|^sZh1+`DZsE4x-nMXCZxdv` zLiILN(si_hOLV;B99+wl@8Bxu**y634z6_%?@56_)-V27yK3n?-Kl82iNzsCmno?@NakULWyU9 zU#d-e1$~wZ{$&T3?C_>LxQO?z$b)~^!BtL|gBOXQ8!Q}F<^QRLBc8>=e~X2~T5+pM z==~0Urr>{Z@D{;$Irw71_eI4bqxEaK;H3_}TJRYT-Y58c2j3=mr-N&MceRU4`}4Ge zYya|B3x|GGpSvs^NmTxE7?hBKGjI*}!aR7ZgKK~KLkmZ^nqR+g@KSPvxx>NFG_cp> z;2nZL>fkE`f5yT41mEW11A@Qh;6W+pd!UmblhK2WOOJMN9k)z%a2ExcA2nzD)RUb8sCG|IWd?g}>Lqb)3A>!M6$jRtMMd zbH9TZ$$05q2QLwPBsys;U-bR@a0gdCpXlJ3d~t9c4>wr2U2ZROa4ol2Ik=YF?>Tq} z$J+CjJGhqH+ZhuY`u_Df2iNz$X%1c}a%vr1 z-*aOQuJ6}3Irs``uhu#EV!{9F;PrxETV&#oaUIs`^*!jvf@`{T9KO=R?RIaCC1+nt z&L)c=dK-{-c&meN5q!IYuNQo`gRc~PoJ?42JeLXn83*qW{AdTS7ksLN&lLP@2iNzq zIfA=-oA2;@Qco8+xYn0T9bEZWS~&Eq=3xgf6^ExCTgUf6uKMYBaMjO%gR6cHl*nnhRXu#(!ficFv~cJ_$6Y5lxQ@F{cW@nd zUEtt4?z-H;b=-BGgX_5KW(U`C*If>- zsGe01pLTF<2PQhW>SwZpYkLxLaMjzX4zBIe1rDzIY;o|F(*7)VaMkk?2VXDzH#@lM z|5gXzBK+$dd_eGP(TI!QpxP3qJnslu_t*A8VDGDfqikY|XrVYv6WpCQILX4%HEF-o z=E&E2@ofj!b}!-JTCacL;2jd5n;cy0^-2fVdVQ~hYrTHR!L?owmwgVder|PeP1kQ7 zT+?-*gKN5a9bD7Z=ir*IryX3=^_+uiy80bl)3v|#a3Q_7 zE!^%GhRgm94OjUmJGjc9mj}Pv!6iE0jSgNS4!1h^OpU*TFBJUu4!&IQryYE~;4eA& zcER6raGl>6ae!fP^{}UdSBRV=9lT!fuQ_;^;HNqGYQZmb@GXMJ99-u&Zgy~;-kIFRNCP1mCiuIU;s`#3fJ608>#3)*e`)JztO;<_KM z#ldyI+F}RS{c6h{T=%QJ;^4Z^%#-;84Yxzusqqf3`^-ulT=$tB@8G)6Y^HkO*L`MJJGkyMTkhbx&y21v&VBb>$40jumt~ z(cm2`#oF7kItzAZz`iWFIRkFVg4;6SKo<1q7%0T|b`*+@&WaUfz+e_E$$+InHliREI20vwq(JD8L%S@F3y0_vxD-V&i%k-?nVnI-UzX@vhHwfYj^f; ztnPv^?#3DjMvty4FKmC^m$Tm^9)Q?AW{&UN(B3SC*FH-GS2`irKi-_x48^+n@)NrE zBp5w`Z`pdKsrMF2Xiv}KP6{KaYqcd1<|p7d1?FWIPO_VcatGrWt*~k$lTqccZAW=Nn9L8XUP&= z#p&$naEUUV!;>r3%z?_@4oHLXlfUDKakljJano}r#E^P3cbGxFJwa%<(vOwX9cKPA zQLdj_{BH<4*8L5NBi+=sb!39Q`-$5*GNNu8iIA$KH zecN1Y7fxM;bbBNiIjYa-|e5@8}sAb?5_r?W=kh!)WU=pZJ@F z;N@iV(b3IJFNO#{I(jz^?(J)?RuP@O=IS?~R)QHp*UHx}_7K9zw}dW0)nJ3v<$@j?H}KqQ0Gq1CF|^^x)o7D!iPy-(nM z*akAh2XSlk}s!hQ;Kxv(Fs^X2wK`W))Qen>w7AH@r+YZ)yzh2$eGEsL%Q>g$#;`OOg&C;`?qAzXb#gSdBJ1^P zpcH4Jxh;&V4BZx1Pb$rNN`8ri<4P#X6wZi^&PJLpcD#|#D{l30XC|EII< zA>WN<+P%qsve56`5PgNO$9geRzO{X;eLdD|1*U<_9x!izq-*EekqM4QAYMkbGfaon z&7FznuENoQB})j-hF57C8PuyK7g9X^RNJf4Ap9kJg;oW%Qq&%NmhaFyNbk_v$1i{E z@^R)4ExpUpx=ZU}bC=e>BsE;S%`_6GvLz>TCzU#b+T-oq7OcgAcXRxAv|hV{yOp*> z!FoH&_bBEW;#w-18Dfb|ykQfs*#tJ4Wc+Lcp+Ra83@Y)0&HkKC{2wa(89|jc5weM| z+Qd{MVw|&dvC~RYN@bEeS)6`fvVdq-d)cP@q!EszXc)bt9j05$o<=+T`^1x$j<>|# zr*`;ys&RhpqrU2x@7`e*`>8Wt^`~|Psd@#L;Qg9Pa}g0q?g2>qsnh793u=t*46rY^ z`YOdSlhP?R(PHPuEZgN9HgU2|^nq}7{$rctM>g?8n<%q0;Mcax|FMZ%ZDNw`hi}$0 z8F2aObeC4KxgvG&U0UIu7e~gpmn;aItNoA*=_lyrq-?`oXxZeN5H88RX0%0m_0nIU z!K$A+h;9@5>u_`NPV#&3Ywldz2CLs2!vjXbNJlBRBZ(I)6T1;Ib6Mdk*Xb0zsle3e z98W1M+npFcfw?=oljA1@I;)WzxY&rBFLItWq0qEMSFcBSe)3y|eqyZg<0r>XD5INl zzEvn903^vrpc7||2FV#efyE^6U@^=eF$I^xP4C9#M@YWbf4Ty%Lvy$?dE)@W=KCOU zXBKs1f%q^xgZl0I{kTosYZEuy#5Fdt&?ahZ;v^7mSv$fGywoQ4w~0Ze{`0m=kxjgV zAoOA>b2m#UmM*Bw3_M5o##wF9kZJm)#6T_Scj@}8(7jxEuB4lCrkA~%zLcJHU(G6% zrQ{`rn#oZ0e8Tu96CMZ4WmC8>Vf2Z~rF{^{gQWvV&wSC;OLqP2vxz%x;-@x|w27!q zoNE&&+C&!!SI>L}p|+#{ZnF<+#J_F3)Y-(zHgOyX)$>7#Nah}dzv9Z3(WaiAl(>g= zZR#8KgV8VgLwdh!a6u6l;v98x8}cKzt-x}sOi+GPRy~57$}-i<)CdzC3q$@~PLj>_ zLj$l;l)dz8WTWgn1zE@WJe_QzdodA|zUFOMnJvy%Dok`G9$OJ;x{0htOaT7bc_eJ? z`Yz>j=w52yy!3Q1vNOklouh~YyW-wCzCj{AhioC@L#eOBe?W(2x40Zo-lSx9|s%8 zYUwXzu)9gq2D=?LjMvh?fDI$!^pD9Fx|hLIST>`TY-N$*s8nnKz`{O{)Uz5t0~-t52R0VA2W%{CH-cheZ^6dG`pHJZo(I6$ z_(#|{wtcX13Lb=wQ*{q)te#)P#yVR88>{Chu(8UP!p8DGi)gZIF>LHQ4mOrN0ydVs z3z}oe+hJqLFOqEy<(s*3LNC~|=Qm``oEX3;Bz5}kK?4zgDvyZ*@tq_hL%d-Vuh_)v zHnGDd-m(dFN*QVI+Qj=dQ9%05Hf$1;zuO#`XUYh|X|@b8(k6J^Ws(vd&6odFc&xp_ zce;#Dn$99~kC)u#@~7-wE*s@8mkl&Y5~sjv(1?Q3e`l6Pk?FrBOQSILU!SE>%=!~q znhW4XnfHEEa^`1gE(51$Y0iIKv_~Q;DSR#&$7X5H_rtR^mxxbiX)Y_HGPD^=;07^j zcn=-myQOevGhU*~MdzC-${FGhHu0!UY_y5TZQ?1L_@hlcYZF^+;;&i4Ppl2ZEt;;< z&N`Y;3uL0lyWG*e+1G88i3gVq>>ie*w@o?olYG$`U$Zwldp|l30NN8))l7FG&O8P? zgXzVFrfDZbcNm&xi$G`Rht2}U%$TA&8x)JeP3-5gq-Dk@-Ku8jY)FP?&s0izcI=z% zB^wy%?9|jbpjJX2X2;G0l?i$dDE5ep)mqVn{r9|BO>T0d`_*s}8(J`P;aUdgi`WW> z;>?d0Ef+sZzJoJAYJh{YeAEO7XMWTO2WNiN41?ohIP{)_FNQPiDR8U)eA0KteKPHX z+#&YGAbl6|BitcIOdoiG7^#f!5Hs@rp*zG75xzsLp(z-xuQOMP{R5YX$yTTjyhH5N z;S^yq;4NjF=b`iRhTSo)h#tUw&}4e>Z`jW=_#Dt=7UAEpd5nX1A!stZx7oQL?1aqy zU?Foq*v#SMKIne1`;91X7urlRh!gr?7}#O(L|+H^#pxZk!%*|15JGOxM=s z3MJ;#b@f9nK3!8kU3B*U%AH@w%3cadYDTY0W2*>;a<182VvufYFA3C(#tx>~JiNo{ z30&1Cu(!|&S8+G2qsaj>|55*C>7XgfvKP$?4|Ux&A~izNmsww zAlcQQKEoDfvqr?fjlr(|6hBWe>JkT;nc{zr<3Z!E%x96s)hXPTRT_>d;vbz0{HlM= zzr6`_bq}8_rNY#Mu#6KOPLCURu%9WFaEe3@oftYqH+*2Z!tX-CA~Veq?uKu;hW-cN z|4Vm%Xgd2p1= zT>L2Sd`#{`h$++ymFd!z~G5y64sS1R~wXyJ%|h48;1I56nBgnlqD3-0Rq4GV_|)!R-BxApv3bL40|=Q;dZJ}-1|Ezj+OtA1v(c0BJ=OTJwW7g@Ni zpQ|j~)=$d9ZT+mYaD+WU^zb_e*L2-4xT{aSiwF9I?v($~Q6?d(PhaGhIJoK)n=W9K zU-du3!tM6zYzNnJb)kc+KJ7bkAZHjgz>XH1tFsn%hdPBOl2>*c&u6NxX;oulw!Ax=RGX=NrxPg4l zuTvcU3J4+7?%?$X_L2_XCHQg&UoAL)qmAsDbP0}cx56l1sCskoQo#!g2lHbb4)a+D z?-2ZW2VWuh=?>l}c#DG%2>x9M4~jm2=HR~I4>)*>;4e71klrf}Zc^oWZ|A|s;YFPc z#G(#szjL7ATCcVJKU8qlGyK9F?cf@pFFCl@-wFrU@^iX{BW&&0uE>LTS~$v~%KyIL zZn}PH@uQ!rzs~^c^6)<)xT}Yw0FZ%v=tA2!9Y+A;_)C9xy6~&sR6p|_yp;UGv^n^h z2KG7}yhHGmgRc<$M-JX6_%9rMK=3;pJSgRMgM<5mKk48tg8$XQmkGYz!Mg>2&%w6| zJ_ZUSqk1cn@{bMEHaAWC zf?vz?ofbc=%Kwzbk8-Q!;Ux#x@_-L4!{7maEe{1C$SB^y6pc|GT+73O4zA^)#KE;Z ze8s`FJe=g99+x8w;Wu{!{rXHgw)Q;wF0ao$IAYZ_*Wiyv}SKaCbYR8>Sjn9D4F)CraUGl!p<>EG=Z z|Na(#w}s<)ugd9n$CT>0O&aKvBnAO_Q9v>qAC^U57u>!W@55Ynsl@id3O zLj=unaIKFE99-+;r4Fw3@jDK#^>L|#Ykj=M!L>fFa&WDW>l|F`W1oX-eSFrzwLZS= z;94Kwc5tna`$<2k^-;$mpA}s5Ma$I}Egbo%jko6$sqn%&p39j+c{JPM=HNO@*xaL=4*EzW6*S|Wr=GUzb zuK9JRgKK_0=-`@Pe{gWkuPqL)`L*4_HNW0-aLunVsQhG9Z<=5GIk@K61P9mrno>Mi zj-hDX+QBtn!VX>}9%ebXkY0mWkngDTT2C*_!~b&!SNRX*!C!T7jsM>ryhI$vVz5O< z^)}Ox-a!t&Q1GK2e7WFL9elmuVF%wX_!$mfEbo2u9lS#DiyXXO@T(lWOYrL*e6`>! z9DIx5s~lYC$L@FVQe+&NO%8sh;9DJB)b4F_@Cuef-vYDltU*6gFZe+Y-X(acgRd6c zcknHO&vEcVN$)}jFBQDY!Ov8^Ie3TQ-44D&@XZe1C-`;;9}v9I+Lr`91Vx{Ehl!R? zogcIB^Z|d1@=Llw3dG1{2iJWP5eKi3^@Dj1uKN|f?clm!LCd>_TOs|;pB(-QX}`1{ zD8KFl7$N#lJSYW7>xbfV1V7s0*L?t5ZHvbFo75JAlpB?Ce=%+U{D` z9cg$9dq~2I)`F!fv9W(YJQG^%ulu*va1}dU8;qtQfSA04H-|!?bzoC~uf?cqd zu2(3+nFu;7jU&*ciRi@GJy${=eK>o4`%8Yq&M}12XR~jl^5hr1@2BEr%SwiMm5C9Z zVB=O~ok+}l7(Ntx_iKS`HjsNH(MPB7`wuW@974EHVkF`aioH`2h+jh-d{f4YRka(c z8lHxWB#SQ0*vHp9F;*g|8L6ch=hDIN#r)v)7F-Wep?BNFx<~lsebJGzDZ44XCY9la zjhtq)Ih#J6UYX$Z^_o=DlCQ+tPkfif8oh^N>k2q+l?iOP@z&uwk<48pp)(@2kA+ST z&8})lLzN+OE5wvgl9iJ9_Jl&5MaEVRzvul?bmK_k?XsO&|Ka3Pj(zI#0>5Y1sBrmH zfy%dyVkjF(XQQsOHo1j8u~2KEx(>s;1d_6+opk=vG) z`{%)O{Uiw}qka9{e)bo$|JZ{C{-U+eQ|x`pmf6VihfRrO&u`o=FD|>8$jWTxX>}UR)oBBqy$`3Cor*6iq6Ve(mdi z!viQjrzPGsr=Eue;`qo*hWHnoINv5tvx&29;vAdsZ6ZvBgqS_m5pA{a|G=_;rKya3 z$l@@jS?M^xA3v7p>>-O!f#TZVxik93>;a1dfpZDQ*^akq&N9g&AYmzGo+^1==pN#v zI6VO^#O@-yH~NaL=Jo(O0sb$<8}408`9z0Ox&D{!oK7w2{-(X+dSTj8)Qcw|DjC}D zcXmggk62}u$}62mi1rB<7P{M^S32}^JrzQSw*2yeXqQ8G45kC|MlNie3LNwzKY{p} zgvIVGqGaw4bj~1xnpWIoz;P`Im#+;h`4XYw#M)5ejll`(Jcb<5ZWu4UREEN}8>!`; zm-vg{@G4YRw!v@MgqnXg9ol_>dVrVDtxWtBYV?!8#v^o2=-kkGdK-|rr6yYkqyuX#CJH-Z+6zC$Nt#a0QetByv5oXlKvK9pN;gnQs*%F&(fb_w zR}TFXhh8$64#Y2|c)Hm992n9Qirs4x+gV8z^-b{?DY~)Vg7jpf%ev|8S899(iU_wY zk<^5~aPp1`$R*Z5s5j08fUspxZ^aQ;s;gfAeXFT!^!k6tU2OkKKAziu3!mKW|0y5a z?Z1If^!6{EUiN(YczP)e-NTJ?8CxMFeK=dO?4Lf6t&o{6Vk^4W^hmP)11C?+xe*fZ zfoD%-T8roROTkP=zdz`cy^;~n`vGFb=SZe!zB3m&7{J%^uEKv;NOaHf8^ejeT%KK|K{ zPv`^hh#Q$8{gB(TrGsq7RLFCNtVIi%Sz}QeuTE6gh8Vray|2(XVZH(32$`94JzQ`U zGuvG4gsX0DSVxlsWd5W6%g8U{rR9pOY&86d3dj?@F#7zmWoHNZcUPYHt3TyEMf{`a z+NN9lZ?QqLtNs)|i7c*8;MQ?~;h19{Jl}&(LH*0C7tiCmx`UVH$S^WznMdZo8-LJl z+?iR{T=d--bpc_!;Uk&3!fz>JDc;wd03FgW<@gW2fBu;bx7L`5kI?REBJ%rLEAyJfxwrGC~gZ0JBNOvO7USH3+Ms<3Mo9?-VwHle!2F< zf1mJNa(|I>b5N&8W zzq+}J;Wm$V=9`I;%x?Y*o0{iVx7D`RESQ`5yfyaO4?R%OTGKR7Pa%BxmiNp#h5zv0 z_XRbLjn%Xf-{Yt@HeXylmtt~p!@OvHcAq!e1JwN~^rj7S4F5NC!NBnb4s!+n&*F0g zzuCcs^muqngexC&D=>=tB4=+0*KlzL$L61Nvx!g8!Dot`!yR1Xi5GlZj*;Sd)ef%w zbuKR9wm7)z?P3Q%Q{uD4!Il5+Joxhtu6p>aH14W5)x+@)uKaZlZc` z-&GIm9Da@evktyYDy;oIUdUN4IIdxW(fD@>ev*T)5M1YG5e(*bX~!SZDsslk)0K0C;I5q09ek#I*P_-RTqckls`|Dc0wzHf4HO_%*0TI9Q?Ylp+H=_-&eSoNmq z3OKl?3sgSQC&jDs&0yx+l>3;wQyuNHhy83L((`UF43!M6#%+`+Xy`GtdP`*4Sgi=4Y1 zT-$T|yRRq@T23Bz`9%({*M!mdYq&dHT=)al-fqZO{eRBERsUafaMk}b2Uq={=HROT zS_fDCw>h}#Kjz@7e}2`cc%!^wJg4p38xFswYov5osvk|)z7DSGI?TZ}U0-r=P1ke> z*L0ob;F_)l4zB6?t%Ga)`T9#qFVdjtUF-1Al>B|v!Bx&iDG$&a#_TF5NOlilG=W75uEAcY^?}fDHJFU4GBD zv3}3X`}<{U0i?#_Re&Z5w~hD9`pA9JOS?%Se%X3rI@nM2fRC;P_sbrltB){`OKyF1 ziPBhqkAZa{hZq@pWblhKHe+$!8yt6+taky2ZgXgtY;*yKp6k&0$T7I!rLrbk6P(#v zH@_}gTTi3=;I#Uh1uYHDO>OlJEx}2_(;61EH`YX(TZ6=HUb?3>w>Qpf`g}At z_u*ln&Tc>PKp;MnI`8baO>)_M19tpi8C_axy85kejWjk?KVDmlq$(#=+zILYmPJ

WtfmO7^>L(uJmYaY% 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 literal 0 HcmV?d00001 diff --git a/runner.sh b/runner.sh new file mode 100755 index 0000000..17102c9 --- /dev/null +++ b/runner.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ $# -ne 4 ]; then + echo $# + echo "Parameter not ok" + exit -1 +fi + +OUTPUT_DIR=$1 +TEST_NAME=$2 +PREFETCHER_EXE=$3 +TRACE2_GZ=$4 + +if [ ! -d "$OUTPUT_DIR" ]; then + mkdir -p "$OUTPUT_DIR" +fi + +if [ ! -f "$PREFETCHER_EXE" ]; then + echo "$PREFETCHER_EXE does not exist." + exit -1 +fi + +if [ ! -f "$TRACE2_GZ" ]; then + echo "$TRACE2_GZ does not exist." + exit -1 +fi + +LOG_NAME=$TEST_NAME-$(date +%Y%m%d%H%M%S).log + +script $OUTPUT_DIR/$LOG_NAME -c "zcat $TRACE2_GZ | $PREFETCHER_EXE"