From 0fde6e45e9be83893afae896cf49a799777f6d7c Mon Sep 17 00:00:00 2001 From: Markus Wittmann Date: Wed, 10 Jan 2018 14:25:18 +0100 Subject: [PATCH] add single precision, add aa-vec-sl-soa kernel, updated doc - Binaries have now a -dp or -sp suffix, depending on whether they have been compiled for double or single precision. - New kernel for full array aa-vec-sl-soa added. Only one loop over the lattice used. - Documentation has been updated, including how to build single precision binaries and performance graphs on various architectures. --- README | 2 +- doc/Makefile | 5 +- doc/images/benchmark-emmy-dp.png | Bin 0 -> 47382 bytes doc/images/benchmark-emmy-sp.png | Bin 0 -> 49787 bytes doc/images/benchmark-hasep1-dp.png | Bin 0 -> 52106 bytes doc/images/benchmark-hasep1-sp.png | Bin 0 -> 54274 bytes doc/images/benchmark-meggie-dp.png | Bin 0 -> 47672 bytes doc/images/benchmark-meggie-sp.png | Bin 0 -> 48854 bytes doc/images/benchmark-naples1-dp.png | Bin 0 -> 49820 bytes doc/images/benchmark-naples1-sp.png | Bin 0 -> 59117 bytes doc/images/benchmark-skylakesp2-dp.png | Bin 0 -> 56547 bytes doc/images/benchmark-skylakesp2-sp.png | Bin 0 -> 65952 bytes doc/images/benchmark-summitridge1-dp.png | Bin 0 -> 45080 bytes doc/images/benchmark-summitridge1-sp.png | Bin 0 -> 46769 bytes doc/{html => }/main.html | 1107 ++++------------- doc/main.rst | 325 ++--- src/Base.h | 2 + src/BenchKernelD3Q19.c | 229 ++-- src/BenchKernelD3Q19Aa.c | 128 +- src/BenchKernelD3Q19AaVec.c | 50 +- src/BenchKernelD3Q19AaVecCommon.c | 2 +- src/BenchKernelD3Q19AaVecSl.c | 682 ++++++++++ src/BenchKernelD3Q19AaVecSl.h | 38 + src/BenchKernelD3Q19AaVecSlCommon.c | 60 + src/BenchKernelD3Q19AaVecSlCommon.h | 37 + src/BenchKernelD3Q19List.c | 102 +- src/BenchKernelD3Q19ListAa.c | 118 +- src/BenchKernelD3Q19ListAaPv.c | 136 +- src/BenchKernelD3Q19ListAaRia.c | 114 +- src/BenchKernelD3Q19ListPullSplitNt.c | 41 +- ...chKernelD3Q19ListPullSplitNt1SIntrinsics.h | 5 +- src/BenchKernelD3Q19ListPullSplitNt1SScalar.h | 10 +- ...chKernelD3Q19ListPullSplitNt2SIntrinsics.h | 5 +- src/BenchKernelD3Q19ListPullSplitNt2SScalar.h | 10 +- src/Config.h | 8 + src/Geometry.c | 7 +- src/Kernel.c | 218 ++-- src/Kernel.h | 10 +- src/KernelFunctions.h | 7 + src/Lattice.h | 1 + src/Main.c | 123 +- src/Makefile | 41 +- src/Vector.h | 116 +- src/test.sh | 58 +- 44 files changed, 2113 insertions(+), 1684 deletions(-) create mode 100644 doc/images/benchmark-emmy-dp.png create mode 100644 doc/images/benchmark-emmy-sp.png create mode 100644 doc/images/benchmark-hasep1-dp.png create mode 100644 doc/images/benchmark-hasep1-sp.png create mode 100644 doc/images/benchmark-meggie-dp.png create mode 100644 doc/images/benchmark-meggie-sp.png create mode 100644 doc/images/benchmark-naples1-dp.png create mode 100644 doc/images/benchmark-naples1-sp.png create mode 100644 doc/images/benchmark-skylakesp2-dp.png create mode 100644 doc/images/benchmark-skylakesp2-sp.png create mode 100644 doc/images/benchmark-summitridge1-dp.png create mode 100644 doc/images/benchmark-summitridge1-sp.png rename doc/{html => }/main.html (64%) create mode 100644 src/BenchKernelD3Q19AaVecSl.c create mode 100644 src/BenchKernelD3Q19AaVecSl.h create mode 100644 src/BenchKernelD3Q19AaVecSlCommon.c create mode 100644 src/BenchKernelD3Q19AaVecSlCommon.h create mode 100644 src/Config.h diff --git a/README b/README index e97abb0..d1118ca 100644 --- a/README +++ b/README @@ -11,7 +11,7 @@ EXPERIMENTS. The benchmark suite was created by the HPC group of Erlangen Regional Computing Center (RRZE/HPC) [1] and the Chair for System Simulation of FAU (LSS) [2]. -See doc/main.rst or doc/html/main.html subdirectories for rudimentary +See doc/main.rst or doc/main.html subdirectories for rudimentary documentation. diff --git a/doc/Makefile b/doc/Makefile index 6417a6e..b059a99 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,7 +1,7 @@ # -------------------------------------------------------------------------- # # Copyright -# Markus Wittmann, 2016-2017 +# Markus Wittmann, 2016-2018 # RRZE, University of Erlangen-Nuremberg, Germany # markus.wittmann -at- fau.de or hpc -at- rrze.fau.de # @@ -33,6 +33,5 @@ all: main main: main.rst #main.css [ -d html ] || mkdir -p html -# rst2html --stylesheet=html4css1.css,main.css $< html/$@.html - rst2html --stylesheet=html4css1.css,main.css $< html/$@.html + rst2html --stylesheet=html4css1.css,main.css $< $@.html diff --git a/doc/images/benchmark-emmy-dp.png b/doc/images/benchmark-emmy-dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4c907f7f7355a7d0f1fbf8cf3c706c72b4cb6cda GIT binary patch literal 47382 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 IM)%790)(+iv;Y7A literal 0 HcmV?d00001 diff --git a/doc/images/benchmark-emmy-sp.png b/doc/images/benchmark-emmy-sp.png new file mode 100644 index 0000000000000000000000000000000000000000..560f750012af5d8395e16a1a3c63e83e9f6b53ea GIT binary patch literal 49787 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 Rn(CO`45g~Ra?VRFaU9nejG~ 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

^0unoAMS?*H!K3OHD= zvr~;itB3+Dv@|`~)Sb^Tgi2Ly1w;VH3=HD#fe3h73m84{uTyWW@S5bC&I3Lx%)WG+ z$eIcvz%sP}u7jQ+BK2yYc7eiwV{pBK%#&m@@8$i+boFMV=GAS<4I2ZZ{)1c%#6^os zDPz?(Z|q;5-e(-)ns1a26}*jfK;u;pV-V{4?~M3?S5CB}-wqzU>Ji(VzoJ%tuoWQG zcu>xGAiLU1mZM!)<-cK_^hI=S7jS_b0yd-DE)h3~@tj_2K5(s#a@rv%n5NQf{3dX2 zEU+Uud~*u}AjF37qHk@OUNasv*JAuetzt;;h1jD>*W0@6c?VE2*hq(kFNY z)Fjt)@(K#cw|8Kc6B4wP+Tmp4D}Md;I&oXn+{BwL8_3z^CdtpA`g0Ceu96`e`LU7g ziTs=P??2>CJ_u;;^n)bJb3^Y-PblL0w4=Kyt;pqeDi4|B>pm z#|13D_g~aCo*`%|$yO|3N#IH|za^7br_`cE?@*lCt*9YU@Qq(PXI>6c}F=;ARY@Nhmp z7LVM5Tv7u1Ku*gD`G+@8gjkxY?fcUfZxFZi=H7p_yZ7$-i}f`Zz+ch`XSv|0#mRWW zbH|5!p7h(-)`k0E(v@)Fn!ngNv9?ZK=W{c6^^a`yS?r&oIK+$YIf!VW5MJ5fW+BLY zQaGV}QuOi)gMma>7-H{U^FMx8!Jvh!&anB;o%hN@CZ-dfd3P3!sTg-+uW}(Pel7C{ zh*6f-W~uJ9LyDQEQc```3Bf3sd#@ei9w^^=_4k3YF}ZmbHo zL+{f?9giEg=hxN|OYuDw7nk$?hfR{#elx9pva7Ah>P?4~Kq;OF`?kBLzJ0q))fy`n zua8M}!tf?3Pf!0^YPvucz+?TC9;?zR+^5nizQ=dsp|?4&6*xARCn0@g zc1z@^CmHY^y&d;wco=R*DF;52(r946UGC`QQkvpczj!5XrP?VUjV?IKY`$b(1j)wz zk0%j>-lxCfHO8;SJ;S>n?aZ8#&IdFfhrH0#%d<z*(|txyUq2J*$AltfGhVfrRT(Q)_wUb? z>qigtca`Krw5VO>ap`-bAO6pEQP$$%_=`;Tmn+#`)!*BAp+VKUg)5+s?fq8IN%zp# zuTrwUYuxls`$2%C;eDQk3rS$dGtMju6)&x+u7=Lj^?<9q@zd8Qg{~R){p{r8%YI=0 zg+!On8U_<6kR)8iI<(gC*^7NYu}!P^JLAI4z@;{)f1WN(=JU&*WX^bImGImb+_QB1 z;h%wz_^L^P!Xc9y^Hh4b9{b>CoghZcJ}6%5zfkg z=g2w?aWOG^54FRsZJ8os%_%jS#ux#*pKvM zeM*}5fNDXEtkHP*6Z2Jen^VHzo`WMzLfk3l&&V>D&3)@O<=4tB)3lh#i|lUtJ4bpk z#)f%eYK1dwSo&~|Ua^FdmHNM^3Ow(iAtQn8pC*fud<|?jk^sWqC*>jMX93ona~ItC zg9NPq+;|~p_lA2jm(A`@*Vtj7?;W#^w)2rYZf)(Weade}vUX-FW%^v);@+_r;C!4? z2njrua^ikMCX)r?@2KSsQYQvyk(v(jx^Ob?GlXiLT+n&4vkG;EzDh~y$<}R4<(84s zol~#8^~s)q#1y$qbK!}XMav))ZLbzUi#SMhw6U%Fy=l<*c(X%jci3PgkmkrJ*`8uj z3xN=SA^#nY(RvtrQ2Qa=ezgp9y+5=`M zrlZ03J3w&)louSUf5L~Su-9S$l%?3&H?dN^m^6JFkuhPFomN2MhiDwPM?OO9e9mCD z97@&ecmWj6^f{@V^p3((fu88$@YEM*G8{$2pM>v92Yo(a@++@v;CP+zzKrHxxu(Z7 z6AT|~NR~qQZ1ptB}eeP=;#ss$y*5`qSa+n@7{?>{^L|s+VQs3)UA$e`^e`O{W5MH zcf=qL8Q5QLJC+dINNoUE#m_$P|FA>Kq&#i0MyqE8=<)iA*sM0-s*s zTIB63r%?r_DP?qI27r5FKA8la2N3ru=5&|=9f4}|sQTIKzs{7o^b}S}SM>zX#41U3 ziPgPXW^K4>tCw!Cc`;kjZli4lK`y%WQjRa`%^qGRteSW$Mtqw*ylEu{M^KG{lyl_df5o$OV}EB6gYe^S#+bhKJlf z;NFX+c7i_5RTVAe?BiBe!bqB%n=9nG!x1Z2)-hSAoR9@RTX+`^% zKs7$WE5rQUSBFz~u^0zP>xG2}{{3z}bCHm%;lo!W>o;%MEcYO__}z)1K41L9iMo;! z>`2(#iTTmw5)v6gBtdF9jVF$L#ao(Few~{gFBlmfJ_Z^kP@v{u?XKPp!7Eujw+Ot_L#WKr*qmE%5YW78mFBYA z?J@CkO(()f(rCWDj1P#s>=EUY(w-fL6L?J^tvo^tx5-jUc=7HXe)#T$ zn5R&2NwrdJIeT$Q-%d&Iz%c*<)6zziEMwM zKj%BP7lW5xy?V7;7Z&8MG%hg_VtMZ<_`i{G77z{THd)4S2*v3X>=$!Z zyNI0A&?(Y%M64s~a+4H-=CaXHSb!K}eT0dTp9xBPnwdNUJrbd`1e^q$X2-7{|L}TD z=G&UF0YPu=gI6{Pe_~wP4guLo7%qk)!tEzPri&@@ZZOhQPW$Msvsp1X2SKz2V7TkFk*$8-B9!@IPuI z-(SCeV@bYAM8hCaDO_l*(dwZQdn9;Z!2;B(&um3T2 zU2Ou_!ZHoNA>WLQjKQpKHfc4KtrYv=p?eI>Fe{FGl^bD8gAB(l7%`RcC+K0tfBg@~ zhe^&m&ugxr3{Y znBsVcjQ5IHlgCm0W#07&cNLjCF*zXR92tJ6%%x;1tbB+=20Q*)j-A<+DtH*i!4)d@ zPDOCWA@BUBucO}%@#Sc=ot0{f0ffsfI9ejmFIR2XHYnMaFX3eK?)43U{_YMIA0-6H z!R{_oz3NV@oQ(_reSD(hpk961tA_rx(sw6L>aA|qQ4^_OzgcddUO>sao{4rHU42fA ziYmlk`)%%Cb>cXrZVW$hWE@y&S}9(`sb}520uX@>&*#(J^d$da@?m8-o&$2oFG9k4WEFQ0S1p9z0wKts0jd->_3A@NwM(dKMqK>7h^7F zl-1VRMFjjt-bLit0RjN^^10gX8u}p5g*B{JpC#5^4G>u3O=ykq+AO{Z8hjJtRW&s= zSosBs_Y?;4$cTx_Xu(vnw7AaAct@dIMjBmE)oHdFchVdF;H=iFd>W&9_NN4OI_9DF@c|8*3L zkGD5zkCpT?ng9vA%NiY<_(7P-jhP0^pn-}4**glZuYiYgyiX}hCcG3Km%Sd?{W@wp zU%pDNecPTd0@YRqs;$X#`0_|;YWDYn{XYmA|0ry%^C>IocpA_0)>%a_@AN9)^V`K;m}*7yeN1=wU`7_%T?h+jgq*xs_Jd&6PyY0) z^S^zb<<{l$B>cJ3oK%#vfPBQAXl)&wQ+&K$am9}FiFnKF(eGo7{`b=O919->=b;D- zMDTEHqG{m(ZpiiPgTs5 z%MrO#8+4DCPBTp!6f*BNIe-A=T z9e_lQ{s`{h%lBONOG`>#JW2$W_IrBoLJ2k2^MqQ~ly8yG11vxN;xb@+g5IVyc;z>s zG={lZG&(FA(RpLb7Z>-A=JP9Lx(kZDVM73w1|1S)ybkgp`58myk$o4ux3ewq9Rpva z1}mu+qLZ@vjK;Ir`cL580YBw9P_LZ?f zZIog{vtme{x5p9ZVTVB`adD`6pMf9;*Kl?jOp0xQBqtW!b{d3=Xh?hFWqW%%NI!t9 zHEqR{d5I6R$u#pP`eAa<%Cyiy7E3;)DDp@p6*cPRNVHMY>|RdHGdtz&3xERU423in zrzE2|_`{6^6d1q`ju^bOOu)}K2HpM{(svkhY>^?Q5Hb@oRl*oL4e}Jh$E!sfm89m_ z$JU7z%7+iUp*ActrVUU{Y1eFVxkexJ!Etk^&|NelNB{w=pd>{ zMA9rWJEx_tp7aw&jX?lJds@h*PYJ@kpGngU)wolmlyyEjpCr_Q4;K9^nvVw9p;*0X zrUf&$GS!H;cmjM_*!`I7;)i@j$5j|yIS~10x?JM9)`hPreKv=qOBuy%9X2nqR^z~> z^^SV|`n5pD7!nXc8xKrZSVSJd zcgSe1r9X-LSFCO2w4}-pYg@^ahC|Uz0mnB6Xk!~;01qrpYQZ*(Kx0&-4?Qh16R*dQ zV7TZlj4;-MT=+WwK@^EYbwfQS@Kg<}~68`HOF2 zrv?M!C>x%DP~8KpDTES1c&`W`$_QXn2ttw)Dc9uTMcV z2v{|?P)djR&!L=h$M4gS6}&F&Kh_6V=z%JCu5sYm+1>5!?K;F#=A!xFsf}m5V1H#B zKj25@qnhC!4rv{CxJL<492mo;21=gGmNU7t+H!O`oIW^8cbm1I#kU=BVzcN%_{h-* zSEKb9PBeQRM@U z30F&Rq2=0z2gjSHfNlAxqQb^^pgF6?-oYUdoVtuA^*SXbEqw6y7~sANGbiwYL0!^i zWV(%@Jsw6nQ-R2Ei0HY2w4yJo)`xVI|Aci)tgIdVi80oU53y;h~1?EV{=>q7XkH~kG&@zW@eg@L;4M5o;@eui;h8>8)I z{fm8bRdQ?7W9t|>J`#NWICmD0Z4+kxbdzxO`CPwl-so7oz6LJnHISqQWON!XF2rZ{ z7sS~^=eo+UXu6el8&^S*lbrO5()~zulXit&*Rk1e zT8{}|hf7@7F*9#N!x2Y24Rb|?$r=vp+XusKz|9baZ-j@3lZBn?!%_72 za>iN|*6mgmVya=ZtBV3{fu2m=~K z+JJUtfO_%zNb$kUeT|KcG%P@NkLMlGDsh-7NEP6NOCUKB^8@()aJ^OIfPW0w9FAC; zZ-4^wAZH;D8=jQhKXD`k#5uts#h)t?TLi=#&fe+BB0f_)3yaiK1My!`MIx&+#-ee$ z)0y{TbJ8t_Ja{4s{kk|hOz~Q)R;|M6s|bc$WElTJA}^tBsF(-vRkSWAGaM1O`K08Q zE&C9uc%D=u!zx|hepBQoCTgL7xC?GE8n^%=1*Hecr^GdrkqlBv8hAvo>AM$~iIP-e zxo!j?^0p_%cmZy4@uuOTovQOeAOk}hNUng+FRKlvqCo7n6FK@RZ)+%K!8PflkG<2ZW9{?4U9jNh<))0+{CiY;!F)H`I6N5Oq z;KxyLW)RDI61we{zJP?Nq?v*cAkCs%s-2M@y>wLUNinEaA&{$$kASd|87R zZFZyai>xAykPUSu^4}R|`WD(L%eA7c@+ics! zvyqYDoZv6HV}D#S;Ahi%0gIRWC8l1bk%zY*+?X=W+;+BT^ z(TD?BzM~HTL40O7O%%)Ux1;Al_yJDBBZPGmPXK2oSszRegld0+JX>8oWEROXO-ZKF zqhyAuVb@|a+0-_xVrr6X#GQ~5J!O&gj*fe98?lp7u^{KaWNNsKU zY5-tn=bcln(i(LCEm}irqYg`h7szxLVnZu1bYQ?%l~W*1Q!hZHYTgkpcBvjFVO>YEkHesQErhm6#)B#GBO&RBr`Xaaqy#O z?0|myQ5z)gD;2yVo8hH|sLssHZ1YGLhYl&`@xLB$(v&br0Lanll5T8qRX9y?1kijH z@UjN1r8|*=@WDpcUVZ#x&I+>ig|)bJp4_=Dcaf44^Owza+5)bbGH6{jz&UXj>XNd- zxfJZcmDP(L_GRHKDVHSjTH>SXgJQ%yNKX%~o=0!?RG ztHZLyxMt+KPZ$bzDS&I_ii5R5SsL_EA|vl`s>jhh%!~Q#lGDmz{C#n&bz?iuqg(;weqJxHhl4>@21vfVHAWk zQj;(X9Kz&dg(|m}?j%$}rv!f+2)H))y#vJ3xFe!7skDqx#|#U1)s+5+oT*r{=qV zUM(GX>GF1TR1rB7>ycl6cXwB!rXQvMsU>WR7$7%qg+eh2mOV8C^9e-tgqeB<+zv6S z{3y&E2!ue87nOv|1`#%?*#g+A+;BugZ0^uooGvom;UmM41NFiFt=e~+qHGHQ&KB7n z1tNCn5Yg;*>KoZ$sF((p1Wm)E5hXA-70Zvpe1T}pXXb&@17Y2COiuY_>Fm_hlpOa2 z$1U_1)ookAX_||LctvdXrvj`^a`M8)Er?X0#flKZD&eSv9qG?L11paw*e;!SZzYPZ zxCbjioP*}Zfe9C=Sh-_;F;>r-Um%T5AdM4AdgqNuG)NIHAj@T0vmZ%>Ba$q+TAz+L zX2GB(1LmrY*Ze5zpv!O>5_k$>-IhtxnxNhu2K{zpwsO*)%-e$orO-zTb~3djq$roL@%){aI$?cS|IbW2pCtUl%i z$>TJA2VftGh)@7VqryA|>Y#;#c=C2B^p41B90N|CW!sRhH3=(@&~O^V*seW+R*?!8 z6-6#mk<$(8jSi^&W8V@y(vd!E1!k3FSvbhxSD=a7iE2gixM7(3qr7Cb33D10g&O)O zQlC1MAY^Du#BAF5TC*eT7K#?Fo!WnYMG7i37N3BRtMPIaJ~O?*Wohz)HO%q2@Tp+d zOB!Di$$^e7=RKG^ssLl@Xt)$FM5ln15j^UvUw{_&X6W%60SZXNw>LR6A(q=}p zy?()ZR^0PG=`Vrf(8MH8`I|I5i{djfIP2_Fb4Fuw2P}2xpatgAai>$D1#SdTtzU8( z&uJ5t*bu#oMlw;`AHuE#B!P6#{(A6W?D4*pqJ0=Fa}fJe8SDb;Fre>iIQ+5*Yb3oU zr&*nK3E%9e`_wvB_UnZ`;8uI-`XTp`_N1Y>2$%qur65=%G{mvfPnF!lsoXPcLcR1D z<1WZ#lVAgKSR~0UjiCSeZQIp_m%4RTaK41j&CM+jlW-~rE&DKd&hZ$NiJ?qa;UD21 zsfqa|07l*0#{nH}%xN)24C~^;PTUQ}i2x+|9uD|$yg4lZd8z731IwC9)b{Rf{XhTw zvm7V5T&)Dm(|d87hsVZ*koXAENu>t(4|Q!95KX(ddf0fE9QdVrF+BvhYV3Q7gu(Sfs3EN;<1vbhf_!<{P2e z*;&rryX(t?gvx-5i`GqHN}fCp-r@0aVaUz8U>3oTIl5VY&Ii$TubMKdo(|ZycXsL` zPRQM|LiR0)YP1Grlp-ocMHD4gPyz)Cx7t65*Mz{q0TxK|h-oZiuL5B7Y?A?p)wPoRX5Q7cO7kgw(hOYho1VRS@Aybxjx+umOHuUoTxMfVji?!w>h* zw&pg*SJw3fB=-L0fcXXw)?3Zyj`ZKl%$~#9y^DO;hTp!mJ*i~~Sk41D00{*H(IYlQ zyN#YF0Bb$8H8}d_ppo5)1uumA*M*TNf+z`jERrpCS+);^7`yXBxUF`@>a;SW?{j<) zhn$YACXZ&WS=g`dlRw=K19yH*#^wi(M9Bo*%UoczdT31)n`VgDO+Ei@r96%&53CbB z{oU|vpr4Q5J>h$45umTolNWj?CY%t3=iZNownCfZPjv_N!T{o5X=Y+l@wsv14+2I5 z1xtD@;^MMDLheCoG{5*S+{Tak(dan)L1n3IyXHBk!07T0gTozPGTq)7Tv0qxru{!( zjBDA@N8M|Hv;XMwd}u)z{(xc+RVt*UR=&82hi%1OWp5=sT)x-lZ;>Uwn?1KL{95Mn z;0hIO@0T?83g*{Nbs01pgP=(8P%``alNBB=cZ=mQ3Hi+2#{A4egS$|7586UBt&H2L zD^R~wS70~BcacUHHH2+lgGT7}4NON=pNTAa-uKJ>8MTzP+pX`?*Vev?P#x15MnrTx5m=uPcI@u%zS;(s*AW0~6LFvr=#HZvM4q74 zW17yx2dI3)PQiRbW!P2R)h@bv^=YV4JE4tm*F)66p!P@<9&u)E`9v6rRDklC%x|bu z0nr8Fsi4jD+zrDv?M3->92p0}+`m3ozkFg%!w>Zj zQuPkA7&9j(&3eM66M!H|LI`Fj+#VC|$iP#5yl5ye9c{3xss{G}ElkwXn*is*}XvI-l;w<3ml4ewC-mvjN+RoBZvNuM793wwbnmmKn|$+ar+6aLYd>h zsb~cG>avYGMEi!{GQyy0aRJW7gHT2t#bJQV-|zZ$n*D>fh9ZK^`SnlKSHv};nMFLfLz9&XBg3ifP@_ z?~u#%fnruWHKZ;`+M1G+Mcj!6CcA^lg9X(WZW(w7#~fkKZcT?g);I(k*&W&V5oC?+ z<7D;&v_lzL3h{7cXsJRI074vmcgUcJ@*d*ZquwXU0QNrVvZ!`IXQ$W8bvn{CZ%m~H zJza0cz@)b;5`KM{VjN|N5>s@6d}c;GE|AsC|JyQ#H`g* zc>ej6zv#Hb)S|V_R3EGyQpnJV8VO9xpgHM4A!7-}2!&R?#r(lHRB2O@Ot%9Ar;q_s zzX*L578}eGjle6@bPl9KwdfwuzF#T%ZZB3%=2ZzLA&rNem>hsF(&<5LOC#dZTvY|M zOViV7rZuai^9gJjPu+rdFPFh&`_L9?&)iqL)i=!1uyZi*wxPyC{T7#-mj_a;Hoy^M zpfyNjeAo@)zeZ~LU2r)<-Gy0BWyj3$nShgSj}1%sbNNwEtS(t!lmU&9%#Q+;5G_U5 z)d=Z?%;Cc}zBITOQ}Kc^icPu^-UHe=VHEQ{E}`n<#}ncnOM~w}qEX*X1TZ*fR*IBj zxa~fjw8nCP-z>V(odp>5r<2iCfm+dFY?G#k1+9*aOoeOAS+x%%;H+dUALXR7u?+s= zze`FsA$J1GG{glcaTh-B&Koyw#DHkIUPm5#ggOV<1lG0Kl0is|6#AEa_0>*5Hvwe> z@KqL|9z}>~P5d++tf;pvr^7-+O|ZhKp-|R;k6R!yOe9uqP50eWL6c{@=sI!q$@yyS zsr0Ka0IVU5g|)*<910ogcfh;FS55!lv=kg3-9zFMh$nUvYF~k-mtXUC?8Y3%*b!uC zl&YiwSHyrmO?n5U$*+|3(d6Ug;)<)?<67Z2JVY7JziAAxGMXFy6%QZor1SvH+Wc3$ z_pI_Vm(HTK*It0hB82JSdB7dQ06W;TicCw%-kMmU0!Z0F306RTK|MkCZS3s(F$2Sg zv`rS`$G)Lo0*Z?E&Cx4W_+|oJ->LnmFr>Oc#5{sbw9#LGeC%!ibQRDR0*$d01&T#F zz1lo=DuP5nstI7ZA{5+k9@j3}w{VmSDA<2Ecmj$Dnus z0pc@kh~tDAJ-nB=@xv2<1YXwtK=g#o92>?9kRS~#yt}S*E=a~--YL5TZ+UNw7DjK!I8%s)#n7-Hp2EoPsWvr#JsWbioxr@?i3dwz@U?+K)zDQ)mb{R;OO|t$HYsjf~qG*`%?li zBy6GEpm|Fm$Bhp41+NM+u!Ef%A;VA@VIa~GbWuGWF{F;j(N{XbXX$;X{%^3~P`1s# zCh9;sH;KB}1~@t0YC;K-p?=@%ycW7z)VCb|#yHbza;^d*iP@$YBhq?tHG&=%02~@( zr-z&V^M)G#0?mD&l#~=jHK6A1{O|#ut1uC9dYeSi&&5UJ>la8M(5e*Qp_r($17&AY zxy`!ozVkhiQFlXa>~B##?^xx0w8sVdoiV=}qt}mutV%ZeY;1$}mnSaHN|c>+iq@a?NzoO)-@#GwS`xYvY{0_YyynMH0&gF}houxpnRLL25I zoK7#x`bQU{#bO1$U_Pu$N&*x~8cb0T%^36T1gHBp0yky%lbEHM2}pLL*@98N!l)8@*X9_Y&b=Bm1?U65?!l@0kEmrg z9B_sA9`*<*uv}=3VKdj@>>ye@8FYGg^t90;@i>elz{h%a**>COgE3DfJ{n|l)X+jD z&F3IJ8SP9K$^vJ8M;=7hOt;{pj2fQSepCO*u5|?&E+Eg6h8}4pJJB4D0RYBF?~Vg* zy*1YA5zb@2-ab!PLN7mCxhDd(Ee(F01c}xU7xeV$(>{l@Dm|aI9~(fFyoo%#DLx5I zb9*Nz@jSCQ0Mju5YdHMFarjYznE~h{1Q=#FVu`t9#?s_u9C$Y&B)y3=FU_L; zAca)m$FjB8JUnc2=X$aAi}lj{?1hUFx(dbrDE*`)NdNf>(4ST{{1A4&|9XO#PKBU( zl5&#Pcm{uWTkN?Cp#~&>&asYYh3rC@r{ZpX`{dMJc;U(A9uXH7ZlL*Pz1@HDLmzww zxt-kI(U&%x0sGgUbw&2Hy8rF2Gb$413Zu)BTvT4<@5U(-?XPA2Vy1(_tzsTvz-Al+ zD56fg^K(KOVyF&o#1u!y3}#%fhh^jX0^CV`tT9yvCx}|dh*kW>>jgnmXdfCfs|=Iq zS29D=#8Iqw#O8-^tSV8zp~kclI;dfkUw5n?x?aK%6qS_D04_l?trOx;$9Cx}wY4<^apCBrVUN37TU)!(c`9D7gC3|E%?JEb6F`YPe6Lzs&Xu*Vu=a)K zHDz_1yc%SSI9Sm5MI#NWp#$*zxAn!TDw~o&N%aRD#d%~1tK*Qj=FXK@cP8n{p4o*~`% za{2n_Tol46rz^m4OcEnHI_JW&6BUD&Pr0PfNMk8`|gV=`*8TnFqd@JHk0w7>AR-r=@H58@z zG@u-3fu|#NsnK<&NR6b;0I8rOma`E2Q6{FQRNo9bL;(Pa1EnT=;9e8yFVU_vK%68{ z6H_j+F!&f&T3BkeK!&J#DVQF)1`1mQP9#hhRQ6`sS_X6$zMDsJQ4Iu#zj^b!d||Axl*q8rfw9S}9E;X@%diKkYo?t(d%7=?>%u#r0QH1m`s z%!r|M0?1T@`E?hmHJlI)f!093ok~&)#G<^{e=YOWF~vyeMb!WpVf5=Mxg%E*mt)ZU z@i&%I5`qx~(RpgoeupTekGhu#8ALsl4kfJ?dGUc7rkrDI0^(Xpv`vn{tOSOa(E){# z!erKgw4#^V&FDtzRfP?lXu$44P4e$B>8xy4ZDv11^|9V`Y52VLUvBh zpvRAo5)cWqHX~${{Yu^G4Vr>LtT^}VX?{03Ni)I&;mJ@t{QK9_wxHj1-H>MEr{o+I zMmT#thPliA?V7ny<27+qARtE);sv%=7hF4cF*?9j7~CXy_UX@@+Uf_$qb?tIi zv04HE49HZj6 zR?3Tb-dFwqiY3d&rv&sgro|GG2{Yz+%^uVZn}H#xht3*`hlihk{yFN6&r6Jt@`?a; zcEG?qd9>#|3JMB(F|xK1w6D)4*Nn2VF=+(Cx;vel4G8Uct-kJ<$H~FNy!( z=tcHGVi@}dbHoo2pn}^6I0>DRJEf*;c~4`{5x1IHL(9x_OuE6AH# zR*~THTx52*dwX1Cn*3Q=T|HB^V@V@gWdd9kQZh$e*;g;MRpmPH#kQr|eI9EyHu(Ow zG$`@&`!;Eo8xL`Q_UQOY+b5e<4z4U!znA1MG0XeweV4$Q<?5 zXVDK}*<5EcxS$>2yi|c6I)Vum9T@0R2}ru8wKWWE$DK0OPoCTW|5E7U&p!admH~`` zfqT*D!)-xB=^=0yZ+0z!rBIfS6n?hy3S2NZKP$k>FtKs2Mf2IIZI2<0l@>p*Ytr?X*O9vY-7Cs{2t8V&O8)38xiP z*meifL&kYK0qVq(cihV*qmOR`@>v1XkDI_&bkXjWq1*BLb4F}=p7a)=lP)?VYPt3n z`KTUt?b_856Kq-{v{5B+Lrq7-|v&2V^Rp$+_A7y>z$s+0v!XFRfo{X_^|K`@M zrg=-v#-geh*`A*w86Otx!AkW zC$@K?Falxo2t2MV?|-qb1D#$4D=VvlRA6!j_-!lTj!G&jG0Dli>oly7;aVm=a^6(S z37-Dz!r8X`nW6CMf`_00dV@6}h^E&gbPfd^MmoU$!d2D8zYL$ZLUVJKwX?HJNJyAG zX9v`J>x4uX=Och@3L+Vai9861JyYtS<07|-NlzClK=Zg#v^xZ7m>>`c8GU_y-keu= zuxi6{v$8~S+m7H#d!K<3(L|e5DAH74G~>^pgpKV!vn0zhD+EX+B7nq>9XqzVch@gt zT5m8vIMTcriiC67IXPC446w_{$;q`jC9UJr3_%ZU2LhS))gtX;ug&3DoIfDM9zsCD z)MJJ0A;5z%+1X-aV`EwGUS6xgwnl=e4~#?bojTRm-#?1U=DN5r2c)K0 zron)I-VPY!2i4Mzls9hNXbEFteJn9UBcoF6qa{71%O#BXO8tOZm?K}hgo)Ol%2JW!6q1>#9g zPEKi<9eB1mlfR{WdA3Bma4e7EJq*j5(k`6KFlsrihr| z6u8zyBjK)-bkX$n%g%2X&(!bVPw!-3_5OQT<~KWjQs%=8{J7}XvUl}+uRrgv77xnn p`xpCdZtVa6CI8#K^qyX~`@~lc-+ck=TZn1t_K@~OMgeVdsDWNnX(xoCI z-6Aa_UDC}u^9Eyo-}|2Po`23c zgd7#s>Iy2VWn+J=!vE;hrd-C4m1f5z6#l@={txYY`1hJ?r_Y;FQEj|P{w#|WeW6c9 z^%s@IiK7bE0sYN(Dm6L_l;OIPOGRJUsnt)c{`>Efr7NEFJu{c6Gt<>))z!5rO1knv zRo~ySRNlrtBTN2z@u;gk zV(_V3ba=kL0;?`|gh|`~Bp%#g@%GY3u45%#8I!tEZdh=;`b0_f|Z+ zRTeCoP@kk{`2EXU)hz48(6F%4e39vIk8S72>&D-2mcBCBls+;tB3Bo$k?b%#;c318 z_m?{RuiJ1pPqsnAYnQ{!SS5GvT&R@qz8+sK$I2Xs*?{s4%YkToMxU}UKQcW0h?Pqt zL*e+Hb(IAyPO%%91WtQe4zDpeFK>L2YzIxhN&;o7TGD zSGy)3D@F;t+L)q0KQm5lZ&X;&ZX(w6@ndqIhh4ioYjT~Orl+Q^ls-LFX4m&A?y;}0 z@2ZW={aMP1m&Dg^KP)3?*)OB3t2>fc}G#ibb$D0Y7M z1Ea}DgJc8TL7hX8xA(4FZ$q4&o$bppXCp?%_#cbB!*}zZu{g~oc5nLE=V{j{g-8{Z zm3@-p&JHhpyeH%b$)e=uG>@7x{bOv z_PqSgQxCE(x}~P3E)M2&P@t$&%k-RTzx!9m);h|odZU@Cb`Qk_&1}XGzrTViexJIC z>9>0V7QL)mTCF>JlA7o%HZluE^0(T{n{}4R>gqmcEo{5iJvTjCR9aeF8ForB*+8*t zqVN3q^V2gQi;Cn18j=I+mMvRW*Zh25wXwBep@q!y)Rc9gkj=qXo}~I%+woqyPP*S~ z@=X}i5z`Y&F^5{`OG?gUkCqAA&J7p1Y6qBViIta>c;&TKbXSHQ!g{bTKYr}k;%Xl- zaUzo{Cof-{X=Tzi+SH_u>F7x;U^Z(p#0-hdkI4rLTAlOeRJLqsO*eb7Zq==)d{=Fo z)q87WUc7$IOD^+DWv}>@PtYDdKBXkR@_hrmUsiRNjPBP9x_e~wOo@Nj#WJCdW}SXd z_{;MGY?wPscn+A5UkR1?>0N3ezp{D4gI`JX^z`)BC1^d`cVgcp^%&+#Kkv@^>A~FZ z@74-f4F+_U1;#vl_#eeMRYfKN^9sSCtT2hky9)~nPIpI)-Z&wFSK0oXK zobPHwBsLktLG61Fm;|5y^Uq3)-Wmy~>0+&b>sas=VICsU_c!n9eG%*^hmAOn$LPa6 z+4jYyN`A}!*P0qU;A6R5$M5Zhk7muW=XrMR*;A~2P`@edy6P+K`(&df8`gCiW?sst zac2@#8p;}d@WE|cSg|iR=Ya#VR~uflNBuj18M94tR+xO#qRiA;45b=3tFp7RQ>Wy% zKM>@-{9#?`lLKLq^8d;Lv@2-3nco{E7wIN>TQcklMNDkKiqU^@UCQ3UL5I&@O3;1N z=FOYs8`$5RT^gOuqdz9rW_M@l|HX2^uk!Q0TsyoyB5-9qzBFOS&Yj76<;>zIPJFY` zO;*)ORMAdtlwuc5!}GEW3umj-RsLG_&Yq@8GX@tEmp32(Y{XYTVEJP~Mg(r4c^DKF z?>IkGsGB4!_B$#Ft)w>JcsWtUrN43W@6mOp9K`7U{x_8uHEqSOt58w>huYjLH0+c| z(G^~U)*Oe3Ko_ad&`@6ErnIVazlTZeK-)U=je5A}qPhS&Wqm>Z-eIM6i$XoqOcW2IL`FLcj zwOO3W7t#E1J#!{EM~lzDG;VnY_I2#}q_IwalitsXmuK2pD3Q;O-;FkD&G8Ipahy7O zx!^%%#HRorY3A)7Gevlj2!JMkFgo;e0unL zXtY99===94#)n$9#{24&M>|Uc9rkMFsJDM`uO4j9M3S{!zjeRZWV2OpL#oM;o8Lhl z7v0jQ5eTKFfr82&q6=xUN-@#O3Gvl0q+^g?$xiJo@!Of%91jd2e(IEAu@Bd-8Jpj$ zfsKi_LN>N6Q1C^%S(m}vo74zf!L00u539tfrG7#%-zBkm_ZgY4vcO#uNaC*;4jF{s zTD_5D@7^=mqo2~Qw+GC-Z#{6#pWo!u(?feet1$^$)*x@t{rTs!DESux?Y?`@??5`h1){Oq^T*cw z>qfEA!c-z&yy*Ly?`r$y#%klOW|*PFP8t5>eXsVXX-}wXrndi2R1TJEhgd#Kdk4{a!(DMrFlLCDN>4uSnLYPVpAu z`LXKhAT7=(tsf@_8pkV+Z)D%S`=sZ$YlqFhyjgb0==00dqi*-^Rm_a{(b3YfhE=MB zJN(|Y-`6S7$i{Lg#S+XXJlSNXnt16p@Km@)rezNcW$G?#huXk=?y=*?$0-Y~lxi$& zFN79sG7_{oMubkeZGDCvHQrNwDk>^Uz`XmR$imcRa#Pfuzmd_Gi8nM@_#dv@`7!H_ zd@GE`xMl?cj-xqH{0L z1&cT|PcgDz32=6%av091cX4%Ml(@>Xky7RR>JoDGTh&sHORY?he)*YB zdA>?Y8dYz#sMAnQH4ap3|2+?B4l-hs7j%=(_w>vzM!Yji5pNUY#@}y}q(QvZcaXtdz^wC(Z1~z=7Y^Az!ZEP&njxZt5ue(9_pZJ^&ZPQ&CI3=?e#81# zIt?jT{cqm7RU4zso!a1EsvCIt`Z0_xzdO&?b;jerzlSRK)UxJV=i`)a-&ON^e3?7( zKz8=oqK~JoV(vM9|8f+uSlMUx?^CIw=DJQ)tp>hXA$UqSOE?s5)%^zEc>6RCL2U7%+J!-+xiIC?-FiA~~LTZ`9@9gW` z_ssdhCG1-|pl@-fsXUf%U0urEj@vif9qr<8u|AF%URUDBvrFRHvuB9c!J`bnCWMM6 zPo-gvSISV%?77Oy%8b7FOyrrJqN1XRs^=(kU81A!g)tJipXr6VkfXQk9R#*-AVK8s zzyBVYm{5AW`|N8BjHhixqvpwzcSeQA4e`8+lJ&nYk*47_OV@qMgBg3Ti}%7CDl$Em znHod6lpNc!?q>*7h7}=4%RWnbbLjU}Mc61ECwoULn50kLk|)nd>P2R1NV^_3Gcmx4 zMc3Wky~&1K`qKWbBlgcdz5M;v{(V8Vgd&G!*(mdRQ5^-@q1;e7apIp%n>HaUWM^g3 zZr*HGz2G=Ed}y?^F*{3{u4_NiTyt!de7azF$%#)B)EDpToHZ2e5=H|S-y*siN z7G{TZQX5USnk1@>Ri0w$NKeI_Tq^#(CB>#?22-!)GNX*ju;}ZpiISfVA}K(xJSh8O z<3^DwG2eX}RWC2*jWn_F89jNxB6{xGqyV$^mt`a~q0W^&d$tz8HZNeZYTCcxrx#Q? z+3J+g6=ZjA^@i;gnL{}-02$sF{#6hepXzX=o;iepJaXiSfWypdKI5jy@bGZ^n9>2u z%xI-J4rE)hI}aQ<@btjtJNEYW0S9m;{$cZ;$mkTw?k#U z6IGUn$V?5VJ ziS>=|KYTE#3YP#QV!5RvJ3D)nwk6?+(?Zs$jqE}HQrg$Q(@)4BGGe(mTC(l>elC%U zii*Au3egG@hYUZJBsE)$i8-UfthP_Y5PHTNQ#%G0>3XU>9VUo}Ml)vVnSxF)gKbrl49;@H1m21s$=SN@+*gP*jwO>>t!bXPn> z9&$r&iFxxzjHDE-x*9}e?}rcndR!Qe5(I!+*X92G>+u||7#B}Z&zfXIbQP3$L~vi*-b)^bg+nOhI!PMed>`~ zj??0b(F(HK+TjEtW1mTQ5@5WV#a;%iiE560`aZ3kSS*RYT4k-;sp0m~@gt}fYa?Zk zyKdpCdZklLstk|?y;PXFw70 zJulvW;I*;i6y6zjnxdngq+7b9?^phRvze~*9`CP@B-Lw|7gj#Gdn)>Y)`dh5t2yoG zokmZFCiwhiWn~Fh$Eu(2LPxM6c(dp1^3P8f<=)P$yi#+MdhJ--U6x+NIYsOn-Lilv z&1~Cwe&6BVl8c?arUqprT4;^yv*f@!F{VV7Wz%Qk)mI%iX*-(>Y}=hg}i` zNaRo!>vDgURvn@y}Pgn;n!3lUh@SP}X>m zfO5#BMIGD7IA?iQaIhA;4)w23l1e^*M`rV&sXu`Q%^4QJ^VibPo@YCz_5=2{&tyt^ zrlv}4+tw2iBpUCrTtMltmUVRySN;W^7*?jx7{YbjA_?9gXG?Nz2Mr1e;FqD@rUq*CA2|36y20r{e7RIN0f9|CH&woOY zt2u>))T?SuXu-3cy?*^V0I+XakT8j$K=_)-&0OXWe$5se)53xyP3&fs27NE7+x3=O zrcQkh((GySsAWjpv9U8OyE9E{rAD>IS}6vb5rAxLGM6IUnuJx;k*S<%dDQ{zDt~`@ zYpa$?_P9@@&94hkO>tYLHv7_~jysoSps2La4w8=6z6*(jQw~uwVnH0DI@ukk2`Y93|jLO&{bDTv8LTezaLNUE?!P>2_qaqX=9bfK`j7fv2Q9&B`1V3m^Je?-4(0vtiovC#Hm-cgr`a**^M`AbOYd9JvHo9o z81jck^UT~&dTd{EeHOpk<5uC`36*>sA3ho8|K;0`E)h>(<&02>AJAK&oR&16li4_! z$0Gwy!PUh@4&fWo<63jq+qZ9B+}&$I#=2@}g%17((5bnepKV!mSdap`%2F@5+)PL? zNf+FF8T47h%Zs-T9z6IBd+<}7njsiinzd^=2Woy!0hP>&re@pRmyLsAMq$o_Z{r=; ze%O(j{Vio|zuy^2X=!d{@i8wiT6cy+k|YQs(DGjYdcvarvn<$g)G+%7#(sX)n;}}= z;fprvV)q!$EczT$nsbF^v4oX#sV~=sikojKv($f&larHP35ttwkW9UO3AsugMc%b3 zSJkqSVd@4<3O#o{-GA}srv$Bp$VfJznRD{b&r~9T=p6JTkqd=o%ge1f`qj^c>P&Ly zQ|9L938~v`)#_mE@Jm7rnNlGE@-B9IL7ZhvOH0wmk0JLqI4_?W_zP^=*{8fDGV~6l zwthlAH`d{+#c}A6BB(AU8JUNxHf(>gr>yN-B(Q0;YH~DqM^slaAWmWcY6v^U$`0z= zLulmQ?z2zB={S|Tkw~Upn(9hW6Alj#1H&o->zoTX{0#aUhlq%#u-!xr)H`oa&mG7f zBbfmL7Lu!O9ffGZHn;j09CQgN)s;VY?g4Y(Xe6FX-C%UIe9w4GZ}M$bu|K{{94C?0 zh>!E{zmIwnJVYcr5TVmF-2hQD;P)-Qef*Qum5aIs*eMyiiGBjQG;KQQ#s?aeAMcU2 zOvyw&HR8Sv_z2P808A~-#*MzLIyyQ%*wwaEZFdz@jWs0Xz|m+pZiM=kc)6e#TBiK1 zRqLB(|MPQ^h~57_IVpc3@C|5c=hdOk4>nZ-r3ux=sV2)EJ9aF`yLH>PZP99}@k!SE zB(}JUBbX}N+Gc=)_xAC5{`c`aP3BpM_#oCJoz6SE+$2QZO%+Dr=AfWV`S`z z>9^B_!hnK-yvvqB|8t^3w!c)3gF5x9alkm4XK{bMxVItX1a|uU&j8IqeYklxUS5S& zxBf17aLo@zq0G+1BY)$Da;nlafR1@@4SSbTAJ+0GK>RV>PRq5dEnKQszI}Xzy7_Td zRu-@0+>}tc8fX)xI8}WVMl>ko0Nr>k`&DlL^N)IJF4?BNjDh<1usy{yCrOUB7AF}9bb)m zip1`K>Zm9u=NV)-m@edyY*a7j&v%t*(j6Tg5eF`RxH37|-0(`r6_gMg0>MC2x;&r% z!1FG@jVvPSfLB$Zd)Zi6Sb)N$J;Q;SWsVcrvp;z}Sm6@-srU3@K2D8Z;i6GZMW+A-tgvr6Ozlq1P&YMH2#)e7|?=H6)%pL!v*4vuv^i1TJD&+FG)P*K$q+29EWWF^W+2b+Lw0L*l_g=hsk8&#$z8j45jmu)R=2e5`KtHjAL*=*bKs>Py>kU8PRpfLc0hF4%<99#v8kupb@c(P9x?cp)` z*7%k;oBydh!2UI!gZhKc_EcXnzMtRB`Ivg_pMU;QGhkt2ii3wDt#7BVvL+ADQvHXSYOW#HQ4(Vsd_vr;YC?U|mUo((`pWvA+GM$;XY%uqej`tp>e_-Q&pG-dwANxmvTo6Y{O?>@sP8LDDZADERzKJ5B9vZEc@@ zxSkrAkdRQKYxeBJa_3i(XSP)ABI(|?``O(lunmE6A3uKFu`SnXsAW+`ou6zKOx4Ow z@diz+qZ0)Qj1>FfF>1+9Gd(Zr+#iQyWwn|&fuJ&YJJHWzU>(gLd!zf5DoZhGjfXv}t5ldjRmP$Dj2~CX?92=Y8{5Y?K2i?98cw*H z>^L)~fBVjzB9zG3Ow(V9{|VzJkbrC!jm^WcbLa84wzjfaOsaYOgIvG=hVM)FRzAkw zjnI{o4i_9-ABf|ai+Ok0`EvYr+*~WNVqT+98Y)39vs2H}+L6>W-Vf5Js^A$}DLmVs zH0Q8bUD3R>8qy?&sHN?)+qc1}#Xqiah}mM=D%p*Nk6pi(!`;R@ymyK^gZBgK+owqv zb1oIQoAp>_8s?fz^pA%y@R|=y7C1S+mLTcX;c6Eu=P&tp)I51`Ee>}EVRglrOeKB+ zn~~Q58j9h$VHvZT$=?=+>Q*oC=q24bqnu4uXQ`XQd?Zw{Pg(!t!=sB~XP9J3u+v5P z0TR1LDfiO^P42$hm^mLmxRBI27$7lNt|nV@{wKM~^@{paomb)V8A$OQhzqHW!~&JO zFcYJ8dkm-)1I=Ad#0o;*5k&=HlU0Ijd|*-{9lv=KLuvaA;ILu);gI3>0>MTRa0R4_ z0)0gU?5_FW{HNt?wvfgWKC#S88n|`q79AsF43s(gLTmA6mY+LVXQ^Z}joa#fy-73j z00xnR^{+IUtINJv%Isd-jmP6mOhH**>&K&4g9-(}|a@$gWFDnx`HJ*OKtZZHU1#=<*f0n1Rc-B32E=5nUKuFaku z%mhPo+cCB8`eeytHN}?lgEmmW7r(Oqb0YuTv7dK~pXCa;t9Zm<)ok13ed=i;AbK*g zn`aLZQy+@3jrX7;P6Q3`qj+If0Va>Ue_|cfVDfJ^w-VdM5mdf0@5h*Us ztj`f#XMf$GbEs!fkmlaRkL5dQNQGE~+at{0X-{H%1kM#mh*6Arj*^Zr&Bl{V2*Tan zS9~wQGX=I;-NhZUGw7bi>9joEq(b9V!zDgoVL$<*dF=i2?7t8kEtk#zzg=%aa+$p| z9Spk~d{ot*yQFw6dKFSzNIJtSzqnb0p?G$mE0s)*I@c%JniWlxed$CjB&IX{7jnkd zCzj0)K(Wy%Kba+JqSWPz%+*kY>5soT2FH_2fz9DQ24!SbtT>V8o^d@Y<8nUiN>h zI=x;!M|=l_o8Kt(o$3c4;(QP$Ee@fk(17iAR{CQTeC#{J><3@{K_!0w9ka}wqaejU zUOgQtyG2Gt<%!f)xIF=x$1auiPjviAJ+^tzxkysv^$`^i5KI}VfmI(~R@4wm>^iHJ zAs%)4wf)d$b<2YS6P$wpuu$PEoqDic7S-7<3BnemEM4?)ojlp=t*j{v%hVy85pBIp z)Ej$RpMawyyORL(@87RU$SEoL5McpDg$j0pH!Eu5@6XdQ=&DOS?O4`7wf4$A}{7R~C9mW?uLYZZ(fw}gv@YsXczEsvZ(fKE}IbvBL zO8KhVxHqD(G@?!_n$7}O3n|iEKVmigzj@<_CLLA~i+VrB_3aIkQcf+yePmQsSJQ3V z7KQu)H^#T;?fC@-#m1?ehYlSo_vL=ds~-wQFh(})B&iBfT|`3lihZ&=mEpBx6z6TMnhG9P^EGzueGBcr?Ot|!4`7r#EEX~ zOa%lHFBmiT6hp}Yu45>BQZp#2+x=u1Jja^{ zz%2*ckK6~H^MYQ>UN+NmpbGUh;P*_?HZ`!K@DTQa=6AVw@7k7GZp;92124=?XIyK$ z3ALy)mv!k5UA!~9zMC2g07OiG!7>4!1}k*Vpd~9E!oBU}U>u6#!@(w>UmnF0X3t+I z`w-rlj`Wtq%Xbl|M(KhPJBa%c##BUSNly?Jf|!t^^jce##>vFO1CKQS_5^X)Eeycr z#5jvW(49q8q@tGCatXW&gUZV?d?nGS*tI})1QE0xcimMq+Fs?}cxdqW#p zl9EECu0B}ea9zin$V2`RBp9I?j*Ts8Wa5z}TPoVy+iSD!tbq8XJYg9?cHY?G8iN%M zs#3nH$D94`2Bv-0?I=-*qYm)epfdC}cn(^m=A*Y(9SNqiV4Fr_sYhXoN%REa18Z)d zeG5h|4$=X}uGVcEj{=+(Fxv8!Ti3mYPDJb(D0=v9Y;2-Hh!OJ)ae(pYm9ar_LU9H2 zVwl>{k7~4BseoJN?`3Zz0`EK~g^00o)B80C{rk3THA!Z!cI!!UNsa^`E5qzvzkCLD zJsoJWkdVJf(T@x-kNpBWmr6sF_cp@l`<)?d3SsoMJpt9#uBI3__s&fZIZ^C#y70V3 zW*SJnS3kdOd+q?_E{~EuYcPp2Fa#?_9Y94u9dvr?PJ5nQryr;!gblSn9fMM9hjp1L zViTLHPKxsaq&a&Y{r&yN0y_qYa&t+f7#Zu$V?0^L+Y2)A9@f6nk;K3SiH zQGkWxIT(c)JUeD1BGB?akALZ$4*k*|U|TjAJCTF!td^;tk?A?tl->$g+?Y!6sg9wc zE;;{TCy}U0r39TuD{KdUwj>mfL@puTHCtTIqNi$CM0ofWxC3Xp!#sFlk%HGhyFVG2!1e;&n)b4i^7QO1`^$4sIx({{n$~BQ%}7PZWdTiD|c5!80f!x0K@3Y9`_6F=0<_^s6=S-X)|y z5wJbA!4Ki2%w`DFbQbgOIMII|10{~){94N_@!x{SBt#S~&yVFSvmKJ(1X&0dq(c;&}Ay>Yvwm5B{cqVpLUR!uWRGf%F>P(H5h#j+0jo=-qi0 z@<1!(*mCv8O)UJ%Pq<^AobmPw%4uz1n>V;6FX`2*8d$jlMTcheID3kbJs5MEv|+In@$fVyx%vNG??Ic{SAcDc_$O0MKN%eZtLU^?z|s<9OhU& zvB&l!p@8S#((6!>LpEd*bqrXJ)U)(TeN)RF6EHO%x^7h%w9+mmN=wUb_*pU)PVY0i zo(UR~xD-J=(72tImiGM>IWlS}gUwN@6Q4{MSL6f3Q&<2(YA7qazI}@{?I^Mt)W|F= zE#-3eDhhvRzjH{5wzJ;{YZUPO48l{L1M~LnvG5VOGYe<1$?Y9k_;EuaLW1LsyN+yE zt|2<>wd;)Y{jqtHs&hAsITI7&T~ZAzL-}d9Z0W4piXyaTE%zBY&^;P1xgU(;V=7+G z?8{e;D`@Ivr1~;lWVB4f({XlypBRD?66Wm@i-aZmbhj!VuEAK4k-bvL`S}ohGTMPRl6{d|(Wq zjV;huLSrkb3@*M~8K;%23C{&tF3->Sg<@l&*^3>@JIvT%fF>;(b7y*EU_&AO6{DIm zG8J6*Kg@_?)3Cb&hFaMOe$Uf#iXZ4R@ledWeZ(_qe}RDyb#7n^6p%Cr0+=G)iPYa{ zk{gHY*#jwE!N4GzI3tm+z!>b84#;bh@n9Av=@OBa4YYmU-HpU;@!FzKNrEI2W}9z+ zq6m@TREn*D{}8T==Y0!Sq+Lu%=Lg>vq8(HFUH+0Rb5iZHgiznWAbx@#%T`WUR#)ybI(!O!>DC&FQ-~zfz z?$6~#ZP%`pae96YE1K~8U2 z-E;32SK^ui>=HkDk^?4N^ysDcSVM4x5C!ifq_XjVN&o-3Xi%oO5kn$8k;FLZ+=w&RzvEROQ|=l_Csr{^bHFd%|`$klBfLQgf^lJV%4p-=W2$G z>sBEM5`7Y1z3T~+WVL%42ZiV)KWc~|#Fc=_|GQO$gdF@xdwsIhB+l>Mf?bt!ujNN_ z71M|GjE8JLLLfzdi9&DL#OG31O`OY_(xSv_V5 zX>M-oxX!;iAuTlg4|SbK>^`q7Bdb7fpl-!LO?V*tO?GW7g`}vEg=mth&tK_brB&Hj2o|h6)QYbq~nZm zK#)d9#%rISWgKYD6)n$(JOy9W$MK&Q05L!MMNh+85nm0@4NMufe3|v?%Fiy2uXRgR z^=Ote2J5WtRlnR8X2BZ=AcW)w*^fvNMhWKDRn%h#OMVz{D0)LJd7&JW6iV(LUg~0b zXU3!JHmwwD|2wH>pzLbLv;Mzq{)$V8NUZj%I$fMm^09sO=tGISoDt>+4{&lXrdl&xVv7yW@AGt3CK>a?7OZke|QZfho<&j8pCm z5kPNO+TPuMDrjXKl|~9x{FZv<6$|_BwY_683qOvvYtl|s>gQQoZ0;t z(Q6;{?tK~=k*Exb7a6uB%`8gpB6o(#vz_RVa(1R_MytzHQ76aY1&Ck7@hP#* z0XD?IGO(-6svgFIcsRG!K^V#73CwXn2Edp^A|VE%AEhC9yYx#7s8_2%gNzXx5p7B? zE-pmw;I;n#g~oyTN4SZ;lYc3y<}je{{ImnIxp79%Za^557qT5_6+rJvxL+p`I>!k|F)Rix=itGb@-vVXYfU!vg~XK=c+%U|&CM(S(xXz{ zm{(@2;E_Cd@KsUSPf6osAh!_ri|VM75`IvyYR2}KmMK-$FO-i$?0Hj%Cz(g)sK)Yr z0hfWTAYH;eH@EPRAJq$$&OLW`MQqC=_r@eWX*z8H(zzSuTPi?Cw8RWr9p2uMr021L zMI;s&zdOQLGdi^7$6b>jwU6*th$CE&3(fQAu@n{U?X!X$Ce9NN4E`DSuK(ZfcE`Jc zTV!^1)#o^5`s_U)3U$60N^(ZebARH5%|_CO@qqn-U4LT1YxABexqlnP?QSE>iQ^7DjUrQDR=~l~gI&ed^69m{Jc(11XU=%xLEyMMbrU#mJ(Bh=9J#!BFsIi#6x`WV3mwNsL&`(7)(iQW=H18Z>H($E$2e_`m)>~+y@#8ZG}ox z_5_;3m0&UT{UY4FR-`FgZGaG{;4lm!<#>kURtt^zVnRYfPBbAT)`W_$|Ni~gDbjY@Urmv*K9N?L3h}&6i0esi zZtwIhjv&?q^b9EhBNNY+Le!P=D~+8t*?R%o`}B&5pI_wV1I!DkYz z&GOLHFa`u84yN34IE8cs96frpsHlh|sk9?ULRwlG%d0V%4r_<|FgzNB4jEiCUK^r0 zJ=xSbuN1B^TgEBGCu?!D$<9dcQMQ} zwV8K?kmgZ~Cbgv5)SIoZMJdi17MW+^8Rh0*`1ojNL-y<*i+-<2MicX)*-8X;?de_0 zU@Vlf8GF4MO$0Aiw`5b46lzMN8CB}y%xDE@lAS0wBV+%a9nZOjbm;-MZ`p_TnbwG6P`z<7YIJuo_FL!?X z=2ice)YC91YJbs~_Sq%n(>+|kQkT0h&P|pj0gcGw@u)m}?wO^lXTUS2h}`KgJCI7) z?S)|vrz_AkkSr2dB?vhQ(R<^SA}@AQB#xtUB~qbIkQF>Cq@4&okhO`IPcaGGk_cWK zaKw!F+7~e-^lnn$)DG_K`4s2h;y8PCex@%0>8BEX#gQa~pjVD-(xDY=-J4GZ@jki; zeZ%kC#1&ioN;e-uiJAl9-ucqW+`Feg zl_!rR~#^*wq_8&Ly4?J1HDbFfn5;^gzE--Szg@oHwbaPtJFb zCiiLc`CFXwn0C2;Rn~aUx84TjEW_-Ws6uYrdgH+M_xE}5AKo)eZX%<(B9Egx1#>GM zc^dRQhkyJ%>Minkt6>YX;g}y~-0%H(WnF>?vJHFkz)1L~qHmxJqraL9czbz;BXaeU z@)Fh>$$ZdzRX(ZcyCXvrb0@W$-Tty`e4 zAb&~7L31MY9E@H*93gsodVNlmNhb@^$cvb_SP=sE>7xK3lrd>PCw?LB>@m6PnbdPa$K%2*5|zTJkVBIDvFDgUeNhtBO?uxh=zBko4;jh=-P6v@%+l3IxJ^TleMd zEzX4-zk(^%_ah=|Voo@UfgrAg0WBC#sPJ#_STLbH@vOUi~h1zmBe&o)&ZJ}_)UYQ>0m;p#fdr?S0z;lyXhEsLoXnUkQTe+$4C| zUoVkz+-syJcw}NB#N?9=pqh5=8LBolj(7lQgXWB6(ldm8(~HeV`e|y=#z>Z=ClRk> z@E%;_6V|u|0y3e$a2A02{mT{u4T`{U@>r^b`zLFF91MXrizpF?8RCy6!52#%M*jFG zv&dwm{T&OFsB$DBlfn`1v@BCm)?fEar76BFo8hqI+&|L61vsY!Y6XA=5sS!SL^U-v zUzd*s>*2T*_#OVAtJzS_)_AeYkJZRa_n=*k96AK}O1Q({H5+c({;@QDMLAAxg2zQt zZrEup4UG$hQVt`Ax=#A^%`aarK(#c;zsniZ9{`sK&4vwpHJy-AITk4BSq`gNK(_L> zW?E|4Q6GOoToouuikl|8+AW4!Gyr_XO`v9JsNXIqlLM=sw{&D<0HAE;U zqX!K(I(M#vn_P*sjDyelUkV7ZLtl|{5P-VD1btf1-xRW%*;*SA03OZBD5{*`kJd~G1 z5x&U@FQ1S+gdUP%a9d<<*LokyiTJwXW|KkE#V(2L*K;9vc~(UGx-`XJqWR-taSyL~ z5Qq(f@m@tD(em@5poS&TGp}vG`2%oVScj>u-E{0#jM+BMp(J2YQ60J~O&qdFc(!e~ z>DMJ+7YKwv&s_8el?>Ci=~GtBoa+_T)lWR!WRhMP_qi$0a--e~1<{ixO6m4tML%PS z*|+%&sn#c5kxrC_JEp}Y_VPHt!Z?2rxshJsj=;B_MSuv%(%mF#Nu7-3ed3&w-B8*LC&FtZ`%DFe;c{5wbU@3>MiGu$2 zEfKr<3oqA(` z`XQV!Med@=h)VWpRRf_SU)JyST^thcf<0@y0TP2!<*Bk<;9xq$A)vOA>I(~pfZ#S| z`ad_tU*Xq{V@c`QCNhCqjWj)e`=)(-V8>2>_T4GB)e@EZ{wB)Hy>~l{a{r|IZb6s* zNipAa4Q&sJmQy=}_lB%E#MGC+T(P*@NSMmmDQzsUD847DijGOc@$F>e*;f6wIdR2@ z+v2}rWdRD0ZHuOprVrxQ>f?B&{w}rE5yH|)@UcgL($I}?a9x_kTrmt%@Chp6?7osX zYnsLAYQK!y{LS4&&AnKT$*vC`$Q_FrS$hJ_LJ2pGzHFFTS9=>B73%6)+c#WxNeQjOA3(Bso_EM+}t!Af?YvG!UxJRPY8=Qo-6ojpve7cOdN5c~wu=AbrDfeR-M7y#cj4pZX>uj8vy0hP z!I18}-Rm8F50)dGl#_76t?+5e$Hnyz4t~eHvd6ai({E`4ITv%I(8T;pu7qO+i<{P~ z)P$xRP@)z_vN3X=A_6oKJ%BLHN4`lAt%TGhI7HEeDV~yogRjVcf$XXQm26&pmOl#o zo-J&vbU3GN2OpG1V&5l6cMz_fP~dsiz{C zf(rqa$)~sz1dC?;kp?6Y9=xoJ-8(*XFk4bqEpBpWlkcv}XUGXgAcWENNhB;{e?)X) zl>oj}LIHx4ydrT>3YPT$M6Et#MUo^Q8qyw5&RDs5b2+&^(#$|Cgp0iBxgeqQ2xT?s z)~tnZzyanJ1_AR(P&uI36ppaqtk(VSKQ@G69wO7-_EB~wt|U!zGJ#X#%N)MGzYn@b z1|3M)qjU@ms+TB$Z{yQl!OGpA%SC2m;qJe`+!_s2wA^ zmg=ool=?HXt(5p5T!b$x>5WEv9q_Hu^`lOtXRJQy1#$M0O{9HLkxiK_3*?(~;y#o| zD$9v#7I|(CjTK-A+0f_+-@yzd3dsQv;CA>>IL!OOi25{q0w)Grxa1bs2++dB!SJ?%JxcaO%>U zzi{o4jA0x#1U>rn>5p`i^t7}JGm8Ww-Y%8F8-tMDPEL!7N<*%`g7uQ0V1~0r5;TPY z7QJ1-vVbR}|6xR>Vo{R!r5u=ua4~sN32* z{Kk3y{>2s~71z3G(N+|Auq6Ds^W@_Bi@aAJvKIE38=zP5senavicx(iX?841M@l$E z3N$z`7)0#TSm`KjGC1-?ZWw$u*8{lRQnqh6m3|%HNkz3)@lmqhdEaf3B5o~Wu$d`z z=E`c^hpqx6Uf!+M?7U+|(l@jEe{iNtPi|0vCx`^mL7l(7$8AsG6On?5bysXY}4y+YyFhr1Mw13uYmVC{K@gW_*unC{`MCZyboIYis zF#%8#h02~Bj1z>i^Pt)1|DC19P`W2q8$QGiC0?@LAQ`Roz3EoLQY|Lp4aq}U?=Ejv z+|&KRwB5Czx~MUU9Hl7(AQ68^=MDEZCc~2je(zOAseNbt`ogTf3zmv1=8q3IMO_wf z+^@W*w4F|2Ph^v|-6M_M?XS1?b`=kWU4C(*+4}Od4W!O9K3b+wat&)Up9QIPy$pP* zKh)yH$EM>!EBeXp0Z)(UB z`Z{5AE>I*c@9qY>?DFWZvtgCjcW+}MkE3lLyNyZDQ*Xw7k$J;+d*oJcHC*8T)XhWb zSwB$eC@yCtYot+|Z!H>|M}IoZ{HLQR_BS5W=}*6$-wHP_hkn)uKB8Y6dEmv zuD7#se)`V`Uq+{XXK~%p6K9|7zY)w|qjIv~DW2-UC;PV@j-4~zOmpW(r4_F`G>r~f zsG9H@PDJ)(9N8P%H07{ovKZNyOwZ*nw^n#nM9*c3Xl0&5kzzIWB;m>DEdWr({X$?c z-5q9FqFcY;F>RL)IDC1^AuW%7w#4>}a|w$-wnjT?236})ft-P`?B1Q^64^ZjQF_LE zMsU(Vg@3+it6{Cv;_$v6Dli%Exyw>y#Fyz1lwr|(rM9;gNY#uJ%GXCDKEwRzjyp5` z?)>g!^>reZdWysImEDIQyLlW6Yd>>Pgv@jy&-@bSjpr(8)pt8YVf-&-=vAEbNY388 z{lIFMBUD$ce#fb{)$_0dvYAnkt!qFYnYvc%0PB)+2k~?q$8JP{_0su3&d!7mAg8Gr z^e&HE_(Lz0${HxvW9S#&Qb79UiNuXB;dNS=`#L~!vbFW$q>sy}(oUYNb9}9`m$?K1 zuhn9~?JQ1bM4-9TKux`>$kV^Ca!1CCI#ZvtKdC4ezjej!Xl26o`i)O0-J@C?It_X# zlQ}b!Lnc$|B(4aRBU%wl4LK@TMT`P|{54LJBCXwbJmyPy%CErVPuO%gpx~N+wP_Z; ziMu5T(*{;H0{nXd>0d#kEiaCt0ik&g3elD8_SV*E9}ta6A1)AwGDa*JeU1(w+ffYK z3}^HLiKR&yil%rqYj%^9d%oM8bhY&~pE?oL8F#+B(xRI4l}{2PVkKQSsptFJ7?*vS zjUJi3eByLkXkKWMyP#3=+9~ZI_rnEZvTH7M5g&Z}2i= z7GYR`fwMe;*c>6!r*w#$M>=`*;{}eAiq3MITh1ob=8Vz?%g^|bxn7oaN3H3+Z@*pB zee|)GMssT6b-NMk_Z3GYcqLwE#MzjzvM%7Y6ijG zGa^!H$jU@EdyRg8cFgOfz)QeVQQw?MK0MS_(=$`qM{UD{3EH=bTns3g&`dD6gA-TY z2WA4&w9`jB4W~NlzQyIfv0wJ{+Y3uSrn%T88{UPhJJyLZi2FBc~*T(n5lBL2*VPrP9!rmQ9`W~3?Y@oC-V1X+Q@(Rn+_ zqR&C0lGM)s2C4**@TGaon*dyXJ=pjF=gFoDjwdSU650dX_xoEga36{51BBwPuRFIZ z`gu_=1Ms_%b8zi+p~>_(jcyqXIl(h^V)%(YHrm1;wqoUfTq*|J5EWZ$BMCJa3N z!v@`Re6YrD_OQQy9ICo0?Xp4XV-=rok;%ujp@k)2KoCtcXse31cTxVOhKJ^9{+YS^ zZ%%(qcQKr46I2MHlM%jmYK;KUf>43_DLhtEy4`eN@sn)3dui{kRA5y^*sg#{Y2)V?Hk4ve~Y!oJ@N9%Bsh`~_gM2izZUo7$P zsj;l73UpsMDTR+yfm<_n~0xv5|%^5j86Vqf4 zo=kGRb1bQ@VDB&Q^WCB~H^?Idj|C4Jb*lzsD;dF@?)it0>`uu(EVz|dGlosr=&cOT z{p$`IaS`VI&lm5un0eBO)P{5yAV;YJvl{df(rX<JCszfjL(W#;6eK9gA9$HCoYaL!MGxV>*0hukd0ZIY&cI zjGrshzNcDQ=#jxEbU*O$VO`(#N0Zq4j7`A)njg>U?*@!7rsk*exw||rC14(tmO>) zk_DgGmZ4wF-p$d7wm#r{t(K(+2Z*}b^jhkX-}vbMUZwu?0d>VgGcCRw5+88_!-9?B zzYTZxRHzTgq|Y+)TTB3`nj3T0`(DnrxgKf#JK582mndl2JvgakG2&3+sI$$@8!+

OvSk&6=DiAx81#!GLR>K{XmUU)Td%oW60U9$g4hv-9EtVt&3N)99*0E!$R5wQq#qDfBzMH_2fLP$K{ENQT>EOD z;648QONly5HGZAl#>yEu;wK2Bhugm|eh#f~-?g^<^X!6(Zj&GrU>b=p;H-Nh`z0Cs zqIU2rXy&OW>nv4kI+}sBi8%KkBLZ}&>u5AJt+4n(#?|0LrZM~F-b$DlTz4p*f$e1v z{)4~v-ON?Q48XkrKo*0-Itu58md729SbuN{Y$_W+qg`?2A0|&aPNL#sxCOcS0Oa=@ zWk9Gi?^8|35|jpn#!x5BizN#*77(uNCF{X;gT;L+CchNaPN5;%20D#0N~iN(s7#5g zOz;i7B=yybnOwa7h0Qqg`fHl;=pf*+j8rbPNRCB;h;yBm3sD~^iwCs z6&`fqOxN2IfU7_-jWYQR>|#yMentI+b6F`wLIV!}rD&zYAVD~xx$J+Ap*J!`Zqzr)=G`+L>Y6xN`D$v%yhr3F6l424B0m!xFc zBX>3&d6s!KGkacV$zb5y6x>1 zIP+$1bNvyNsaq^Jzuil`K6LQRruWk$UGx7fS1`KqJ%9`n2jQS2dh+ryYzob{_7x?; z;$c|I(IzUVCQ?e10>6*Jj1&etMHT2joc_tM!#u29E6$E@6MRq~gJrlcN`JCKq zn{zD{|}L$dh#UsYP4Y8pMTDra4F?)?|x^e>~M1J-0Q zlkQ}D-kf}l(IpMXM&}X~y!Tt~gm7r+X@dg?qL4}KrGy`%rSuR*ZdCG+=&J46v#0kV zu%=F&IvU_AU_)I!Z9a}e+wa=R{l<*X^RTs{^FjUZRqs_Q>}?PHrQ7<_(IyL>SjLTCG{bjG>>qh; zk3M>8Sgs2?u3Tc1U!h6gB^O)2d$x8*&r?>7vZEe}`C81?a$!d1=j;O@75*8{{#CtG zL1{)s(*Tf?2SB)uxHlT%CI6mi*RrncsE?%q`=!CaBk2vt%Llv}P~IbHn^S!2jk-G8 z5<41>F0YmY6S938)1#LYta>EvAF=5xGToQ>k+h*KHfel$c{%VNmxNWNu%x5`4|P^M zp0m4a8943ou>);qr6mC5F<n&#qZ5U=a7=!-oYW9P^pf-FCC{^7kGyojtaA zE|#n=WM`Lizy?Lih>I5u!~)@IkhO zsA(;GiLpn1!$pC@a#>T8X_(9u2Le+YY5kz?Ld$&nr~#8w;sHLtb@OjLAmpNFQ!NAl z=MrZU5~dp_=njDkol5bCDAph*v5Dt`Q+Xswhf^MP2NB~Sg5Z!R??z%5L*0){;^ zWb`EcsgfhsF0YFxx{v|u6H%}3$lV8LFdZG8U21b&Jj>+vemwB$)-nyRKuAE%s*5WJ zGl#Aa5W6nV+1y)mHFE3z%{QNPo|y3{U|i0e^pM%-ME}ivEMRiOaFEQFL#M_gY2=MO zSuH@f5(#|3S$y`C#P_;qQ5puKX*|3d+aL-CYo0;`r##4LRa4_7Q*9tV20(R=6D1>< z`}6xChtJ+vi$+HbJwDt@4Yc~uMT^cbfmhsY|>vK_^zrtIU0%_Wi{iilNoGjQhyZTv-QrukJn z&ir}fv8=X@t(0ce!!L`<+T%t^Y~_XRiGWb4r(Nst-y$uzIUdwbr5cD@i=@d#B(uZp z5P4Oc*Q5i2(Lz;dbbI*yC-g8P#ruEm(XsAYcdi;JH2s@h;upJ+= za$pdKlTkv6=v`J_f5@t0!y|1ho0YDkucnHJJIxCV3fjAj^_Rza6&za{ zO=kE%0Ow4lwPiy=><20r3FJZtWJ_`sni0~TloT0uZ)@Y?d~iWP%mUHvtkJjVVxD?Uq<*e!7d-TdvHrlkcdA^a4F~qdcjN(ICBp zcCWKI?~9d;66||0;M@(P+WHoB*GFxzPW*(LMXdutIja!rTnvJve3>$~8;b%0wEnfI z$-eX{iGAEU?DCBiq$Olr4I7zeIvKT={oAsGi798q1xhwDwFz~bd{tx0en zcsfq+XVD)f_w`iAp}dU6OdX=4vYqNzp?ckPu55(FzaYEMi|o_>wqU?}wbGeoe@ruj z@QB?L`YtN;(?~qjB~aSy5K#*e2RyC=l;ySqTSnAExQB0a-QZhcC4DI zx5DZqbCZKIE1ry8-0m|g`DBvSAjlDX<&2OyOfR^~%2X7NG52V`heSmx_!H4hw(|QA zU(Jylo|DCWBNWCx!X|~KG&BbuS;s)H^$EvmLH=~$H4NCCo!%RaU)@?(ds)fAW`T+) zB!uL<2MrL7Kn&m88Ftjfqyu#aNfZNw&!_;E+j#HuPapI}wZ9n@1LTm+O-)4Jg;^8l zAW7!%_)-Gy@7NVA;i!YY^E9RK^N;@YTxmfY+4-ZUB|3P6>)4$alW_h*lRj@@;LTfK zCGGaH`=>>MC%1hOjzs+M_N+_JK|dS+C<_vv1&O~Jqa8!}ckP9`=`@X(a$t2?Z0>SJDIFP@%sOBS0Atw(+4R~fd0$7KrTOj zDccKp5l5{yIPt3w>3j;BZMdPFOvo6#221G!ZyQ5p+zhDajavQz9Bim^0uoyW^RB(w zEiEm_L4+7ZRJBLvHx@ZK=BJ=EQ10W z!)^ugr)~^afVn}-HBVib1weo1zkUeqxma-gvSE*!3au3x1d`(Hk^AJAsKDTVMFl>6 zK=*vY0dC#eK*tFZCD-26R-Yz235Itc3{6ObOg;RQeCJRsw#{-}PC{GQt2M5nwl|8WX$?~7xZV`oZE??1Hj507BP#a` zi^c}FI~^~U61FvwmO6SiSW>v>7`iydRc8To?e*Edeft8J7GMog&`gV9Aa3SM=TEnr z$vr=Nx#JCJdsI+5rgyg@T_fAb3egizPV%XJ+eXZqTUsP4d;9u$RHQ!tm~8VQ;hd`% zEOuI>apV^e5a~8G)^NsE`ruju}et4gFoV;?-QBOwM3X3p2U<$Xnkqx)0*{^i%-Z8i#b8gCMm z7Ls1&nVB*U0;z6p*VvZf-TiJcF@SC;9hoe=8av}!Xu8L8wbt=Tvw+iSY0(G>5%0lH6X*%!(g8oBW8)5yo|j9bvSF;H7T_(#jq+8yBok#IFH2a75 zm{b+uJC3;Uv7EZpd+!$wZhY6h`(6yWobp4s*rUhLt#zlznNRR^ecUU*gOK44z-C(f zl*7PxqksSX_nZP8Iqhd38UZY&BoK)L^;P!x5aWuvv^16Z#d-*;CWmunIzRxeM#;?5 zOigZtDA$3IrqA2S{l3xpANpw|n`qFTeaV72#i94@ggdxTIH_OBJcz>-AWPrJj}_FL zr#>pFgTR!xhpR4e%|Tkx1hdRYA9!&Y3FTqUO-xK&3rRCcDAGf8navgyx0Ht7x4efH+7E2=+|Ez z(lQ=<1qB6>>z}$9EXl}Rz{|^vglIH*8$Q6yFKj+PL0Ris-qde2iTgvOP(@=LeKzAm zK%t54gYFO6*1<;f%H&{jmMP|Gl7O-xE#>noxGz6AXF{tD?F5{j^_{Mh;7yUuAqFK~ z#v60c% zAWN0&MW0e=Y=j?Iv}HX(dx`_|8l0S+V^CLMJYHI3B7l(Q*49`k6ch{8V>S0f=3PeQ znEIkG-<8SBO5jY8MXEe@b|_g%LG(sm2`F1=h6L%+L0jvDb{w@n2^mi}L#`h|U4}V2 zUu+|;B`ew@O2NR!q4B);B<>E)Z6dNVm2&7^g?-8)_HjBFGm zzSPzlH8nSL%0sdJ+v!vkL7pXF?0vtBMQei&V#i7_i&gSMwn zAZQD37PjANl(3;ga@gBE)YPoqM>Vwxwyc%5=S^HgGvy(~J zdeWgs14u%{vGL8F|yvu4k%ZJn8VR6c1WG`7IlOPKwy;UkS9!cWlU>tJUf;$;s91K2i3`Q*nQ?!_U5a`9McT}yx76`Qz!Rty z?B6~6fet1(t0xFwYqc-Tu6dUR;<1G6zDVPhVUM z=*2LfoCe!3ue{{p@q(ItIs9KRuWGq!zlv}F+X#j?`M*(%ai{-ZNf7=YzP$p%FzO{z zF9aVOv217p8K}j~b&z(=em%DT<+Qd5NM2561qzeVkn_fKC(-!WI5dbw9EF(aw7r1O#c({4*DN|GjLh^ z)xkL#i^jn>^GQofBMy>WARHH{zC#Jpj=Y!orGyzc;~KlfzKPgrQniEeznvEU^KW*T z82|Z0ztCOVRz-NA7GRQZ^f)H=Sh;)=^`i8y$_mUSD_girEbt{$rkpjb=!MMD`69@2 zEm+ZJ{078^z7HR`l)L{+^n0XbH&@RaCj*8CDBsvFCRW|+bSPdiuIE)^>)D5`9ix+p z8~2`clhFEo!Z!nRPaeDw@U`c-v$JMf|Ab#|dC%~q*#yRQIi~kW4To@W1M5Pu%==*k zLM&KxG^sx{F3^-OZ(W~NdU|ela%U&2)@ztdin4AWHo7;!*S0 z#QTa0F~f!7<*k~p3&U^OrY)O|P1Erx(J;P*2gN2Gq1iVR1f^G1wCm_5 z>!On3JWPu8@Y0ZEluKpKjM51|<<)!dgooFzumpW}gth6H*;qY3rQ2{R{q!pn4?(ft z%`bD1jU}-bF=M<@oxmO%A42CXFd40bDKG>*4)CVAa^LJ~WMaCT?pW`HrsPDAWnSu| zxfzSdcRKXcU?7sIjhIX?Hv(P?dM+>E4Dwq5acJqhhR|aw)iHXukA#>c#O%|H-Y?hqOu{e8`1ah z1H_dDloQw1^3}#*Z8L`3xe^J@7!hQo>i8xPFB z01BlR2>%cefO(^K8K0|VV$vj+EHLU=x1Uhk++*-sf8E}rV<#l7QMbMeSI-=u_e8M_+G7y>m0(JKMR{}5UYNZFP_RH zl*lHOxXC6_bh?_laX}lltt4|(<-Y z7|X?1z;UR2O09H_+IRfF%A<(?Pe1X5wasdq!~3g<<3yuIPE1rS8XQ(B0b3J$Oh9i# zGq93M>LYc)$|=#MAx#M1F&%{5wi_joplnMp!PhB7$}>liaH zbf@Q3(tvBV3~Js2GsR5$J58;vk?!tH)VT-x&Qs=~kT?#3*;X)oX=YAA!CtBa(9~M+ z0&XgSWK%}2pg_WD@c~+Jtvh}9YF|D-KuZYsX#60)$i@)n-SAG3tQ@9Ky z2gK=x#`jq4YrR*#x%cXkSz=L=)6&Y}_vq>PV4gr1D zJov|0ytL*Pz&K&j$E#_pjD@0;0Ue~O56u?FvPKcXJYrA+qapmEC|Fz#Ogv3!8R==^ z`B5^K{ZP&aLtp^nwy0~CTYn%kmHsk0%GJo#m_~!4Y*cV?=lNO4mQ}O(e$0m1)uzlQ zu0WVP^$Fo3SAeGj^>iA=v>Ww!ok}=|(MTPfFVxW|KY~98t3+l4U6R#&2@d^{ReOQE z!KHaCJjcxI)3sspqk?7&jFZ%F*|W&F>XB;&!1xDnXTb55l{bnm0k{zuWD<&%Dq`2B zOisxd$>xt3h>ya`Sbv88gvyd7AQ(|(FNI~$fyhX`2P|e3iLFs%K>f&ujg0Fs9)JQm zNsvgp2%4P1tqG*fNUj$&E)dt;)nsyt?9xQx^9A-n6b=gVP=c5^9=|n3Tez>k-r;EE(UIpsFeXH3>242C7BhFH?=VA_z+G)Bqua?vr znK7WGp{1zKNtsLIyE*049D6iD$fgq~^18D^cXzkvMBO9nFevz@g1q)Rr3?lu*G@LT zkCO&llW7w1f)FVaIk-7E!e5$`!6l62%aF;_i_^c7q7vp?MkBY1^|Qv~!W(Z0?#4+( zh9cyC4Z=PZ5A-(}%-z03lk-=T_@^=2n#M;=q>h;EZ)#bW&zlSN*0IO#-w**4yOf5e z(5OZj+EDj8tR9&S)r^Z_G>mH=1tp%GkJcJ(1(R;Q8x!B(g>mN!xpn-QW!!1NEleS4je2gaRcI$?MkOQ?X(gS?kr4vA2*+hSyD1&C=CXyAT?->d(z zG;H!5i{v1*z9jQ;HTzKG?1%gG^O6$B*NQj{EBYw*->c~|0Usu3jS*^AQ^Y0hq~jXi zHA%02 =W2#<&m&j%O682=CmKiu=L4ayM50-19(Y_{fH#qwK0rvOy?fv|aAp7dNH zuSle+rDYXY4XEz8{uXFZtbKusGDih?dmqA)U4*c${2ohs9Jtb@Itwu%(Vq9w{9mzl zttqC(f;e^5LojFGwXM&;{qDO}Y5H0k1}SKJ<F1zZ7#fwG2jqtpW6|ojeYy~^J zVTY)eXtRA>D2&G%A$PE2`G}8;yIur6(>t#9f`|V?{PPrd>I<*vgZr2u(rL#BLl|$7 zMpp<`0=Mht1Z%Lyu41jM(#@q09vLZ_4>`tRT+x0zy9X5*>$x>If=}))Q9qENNi zx)}IO!0&PQ&DN`(Fens5Ykhcl_$r!Y+ww83@;Gjp6D(F)jH@5E#+a38aIT%dnqTJ# z{<&PxVcp6?KuL|A@tmis~67F){L3{-fgL>_lRc6@MN~Q*r za1rRZd5+B{xFDRj^)?yzn6hx02Jr^!8kt5>&j!HV3EI;a3Q z&gpdPp4aM%X1f#hPucbhpq#AumHLni3T@P`g1q=|F$H z6qm~}G1#cO>_W{{!(rN|j&;cxrw%#**I=;rRUgkku_W4qx#i)a56n$9!tKm&luX@K z@E>NMN!V-`8~Zg1OcnWH4k8gAcz9wS4-5))QcoRMsf=R|&VHwVGyM4np~MZ8;>Fe? zf7}ta`%TU%RA-ws ziORIWZRl?LA0I(}Ap#6VRx${~ca1!Z-W@EwDu@({;Ri_B9*k!+jtga^+XUg75Pg~1 z*y2IgZbzj<69SATi~Qb3^#dz@qo#ASZ6Zg5D2yP6@Z7%dKcG4uFco6n&Du zfq_aYSTKu=%-_&V_iUzVO(6K|iw%+eK4>?5mDbVwuoP|uZ+9whziM!j-?2+vEw$Xu zwJ0TaYvY@wYA-FrG24OBUW8r6u1p;ZX4*dSxjfqbf5n>E@qf7@Ix1tyr2`lPH(+tx z(Nb7xFVM4e8)*(eBIk`MJrMaaFJFF3W};omrzuL;?<4o3K<%Z0+AC5tEcV@KOjQ`& z5(*y;ZqP!J!fpBR3hYzB()_tf*maf%BoWrtZ@ec(7|!)@PuRO${5X}*tM`uhC zXb42kHlsd|iA+K&4+JEgRJ&**O~PA^cf*D!(e+8Wrf6M9=wyb267v8M0ukiM6j6HY zz3@PLg&fSoN-br$Rw)~#U{VmY>aL}fC(_6tc%`RyJ*?@+P}Yn>%BidG`N!9unM6&= z1OE}+JPNUP@D>%{^iM+kQPjiW^lbT%2)#D!B~zY_RUuc7v>rsG&Yy$KGx4n<1i#S4 zb{q;gDpYV;(OwOgy2qN|CcmGeZiU^x&HJyZcXS2xk851BzI(S*&d8&26x`|aimi3H z<9?}i%;yW^0$vRq;4JX5s`QB8_30qzvl)jyx(GGxPo6ZZPj{l!2x%9kq`CHgGIBxk zg2~S>hl+(J-O>m$FSqfq@Tm#iFrHSmH8aa3ww9VOQQI@8CQnA@s&qGG8RD>l3&u

P8<&**#?GRWFLp<>Fk;obK8sRN75Q~KVnQMBV_60;j-J+$FY zRdQ{)!Uwl%J&5zvd%dRFxlhEX^Pi8}oOeyL?%B6$yZRLj2${b$Z93>y;Y*=v0-l+MvMJ!JZ(hjL*Lhj}r{`)qRF*Yg2qa z24Y+|(tk&cT{&q`f5Wx!F`2GqhoD8RbQh3O6L^HiZVJvtWXE)y_gQ}sl#NJ^9EMK?7kR>M4ZCIzZMZVwW;b>r5pT(WtBlE&rX2y6Q%iHW)N zW6A2~p&1A^!nts{GScHIZ`bHPy?;aKz_U=;Cd0F;8G@|64se&ERab{%iy$f+n<3hG zF4Sr29$76pX)C_piWKO1K;Ku%ZxI*B0f55@8&{jcFc~&RMQsI4^#Y_1;5CHPKqSFr zd4ku9rFj`rI(%^N#6rMJu5e*k2v1~AU#hwO1eZNy7|1; zRzIIylnKpm6a85OE~L5T6@~OQ8nlGpyl7dqujeOes{Yqhc>~`nawJ2Aj$j8y2qqZg zZ6Wvhj^>lphad13i4+j?pQrFVSjaBA?z`ic23t*jsHkgkzHaf|@ValeC5COn?;iILFLvpLVFxr2I#(>VmFv}5FaQ&G7G z{)qX=H$CF-3JsIr9+QxY`^3HuLwx8LiLEf~cg{f@Ov1&Z_c=(oxZm7jCN#^KKvTqg z12s+-$zugf<+=I0V>jSK;`WR@V-^$=#Bv@+C4m^4NsVGub0j`%G>SMmYZ#@GXsT+E zAT-^FQ?e(H6CF8HFf2eTKR@!Vg#@TQgX|P;ty^)Zf`r3s7Vm~~Aqp?)$#FgRV?x=2 z?aza8GIW8h$R(7Q)#_v%@kV8hcTLs|r(qWts&cETURv6i$hx1VI>w)vW)A?MZwD`* z21aZgj_qg=td)0L!mSA~VNrJlNt`&5@Yyf#I2aC8YUkh;l~5k-=W3v-J)1;^HOaXf zg?flMlM$Qiuu-9Pi-CR1!YO4G@-7PuxhGH{((p75fCF{RQ*>(F41q4XHh9bi@g2m1 zoOr}&23i5mC7CWT10Yd~Fr`s~FGM-6)4-dJ9>nYrzBTr~SNmKp?pa6A1OX$HSXC3} zNciA{!HtR-I>im7QjDH+7YU`@tF+0gcW`zdyzAA!>!&|8g+kpE#1#x6SKTs0i$v6E z+w~m=#alTx!W@Fy3b5_CfnzJzj_3urCz<0QGin0IJZf2SA);8O;v z=6$bnxi#0kCg1#h)I;M5&93BlCo7W_g#$2VniKlNqsYmxX!HDbK)cr7J*;yOzx&`px24b&h|>kg(!}j15lK?+ zn>jez;TEk7uz8T!K{?N1drM4cU@O#ts#*>_Kn|_6^`Hc4VX$L9*7(ITgQJ7wrX`k% za!U~R88~ai1DIDycPdRNcWQfec-GdwWX4KX#t)t~hVX3+Fx;(Sas7vT7eydYcEww` zQ)o7<&$)FsNp)m93FjqN=#$vxeAFeI5QqgM3h&*9?}PDNNumR)Addtndc>OzV};kjbP=g}iD*a#i1 zj%#3ZUl<|W5*v~;|3`%7R}QSA++i4$M$*bK)R9B1QAOblI6i_XbsHFA2zXr*r0%pp z{q7l7RhM)=oJ?^*OXcpjLqJbCYI(Zr72XT>n$wX(XsIH=eIn0BB`nlQYA?v?s!B>U zf$S8pA-9qbf(IzF8CV_(6N$gH@1|ZD1EuuuznLRUF6#PRxO(+4n>%9!b9h-GhCD$a zohdXt{Nd^2X&2)JP3Wl$O<4$xnax>rcB&jZRP_3-N>>m_3q>{YvPN==GTMl0@P|5R zy&(H4;wF<2C2~}zTla+ol6Yl!l&8ah93hXH1D@cehyuML5!B=x_;&3Y#Ixzc91UEQ zJlq4s>l2@nWDS7K5JN5lF*L(QNWu$Ah#i1YQITrq$sHRNU><-L3db*xxxIxI+fW@NC3rr9!hoz6oJ~}=;`*`F z<+||UC(sGw^LufSoa%CK`^b3Wy*pUQ9ZyT2k!~J#LuNmMa+?rL1&i&0&rXx`7cDZO z3i=MUv+L+7A3T#49TPru$?u2HnA2WSd2!;KUf@OCxTx^eBgGyP{8T;3-NZAas(*tb z*R#A>^{LBDr-Uolu5s<#P~U-fu{mlzbCdb#m$j$@4B$gw$@bO=e2HM%Pi6{E{V)c^lIqs4@c~Ye1^SJafR*I36 zSzB3wQ3|)n1S>2Tg_EEg-?FXSje29@^wn^R|BB0ujhA@7My95!!4iqA)}&Lpj3hYJ z^HH5q#&JBWu{4O%d#iw+sFGa(H&GcY0i{qVLW!cGYYZFpliozUSH&j3hZ588K?EB^ zny3QX4XHu1J?s30%pR}8TE!7ZvP&T9XWnsAyv2cm@;s23RNH8;ZPwuC-SAeAz2a2# zwXDHJo>dEwnwshib1v`Ow?CNMVM1HEbkPS5HTgO8w@Z;8w5Af90!Z~2$FSzqJV@Zl84>Y^xNPBAH_N;^@ccSV^wf^F6G1F z`jw&YeOR1QcKDaLc--=;Jj7kbL3nEMI$RA$H*I*( zsYdF;Gh7}Ph%k@TQXnxGUO05%y8ALW{)?<1e3cQ;qyyGFZwJ_C;W(s8^Z-f4xyH#9wI87 zZ3wufz6-euy19a>A%Gxw)XGW_+ghYD;!byhqRG1@*b#LxEIK_wLzi^(1yYF-8VPLg z1S%h<+q@;o@3Q6$@e(UN+d0t+;nH}V7x>uYLSo2JGbN6`#%7U=cWpWM-oUB_GWdL`8x*M0wf=bssm>-NZ% zdxsa2m@0tv!kKZHiI8B<5uv?%=?0@HOcceg=RO3XOf||0Y3_<7LIKZo^|-n<@y~{N z;4>@_O8v<@cebryV(CsOF%~Y(KGq@d~Bt(#9cJUA%C=rCG3OiJOdIw^TiEnxI_&TU?m5_V;h`T5kPi`}5LLPBD-oNwt+s&&`+@Khd zL~W%6Dl@U^MwOKIWwX|nJXLr)k^Q!ww_tA5OD`U*=m<%ZWzLe%W1Wk3;{jf`IK#$G zQt`>H&BepLDy6ORar3_nx#jw_+$uKtRISwK^WEK$(frQ6YMtO1?>)A zRO1%Ns7!leztz$4YCd7o9XRlJQ8H-D%I#Y$B=n3-Oe}0~ZJslrdhXnfqG~^B+X0XG zgcU1j;%=8&GQJ?^?(^J=>&i}x!v2<+TtDAqu9Z+8Ica#$QL0NCk{8z3 zlTI&3bkk4`+23FY2k*}cD+ooDMIhH-8;rKn5{S2S4QnrIV6m{oF55{kx z5a|H5yE4vlnSj)9`Tl4J3eNFIMMMmEEymVB%v=$GK7f$q)O~GW;}An!a@j4Qz^R0( zXtiYbgT+lsa&p1=lSmE!zXW1>M@4-$ZoZWyG8}L~BQG*8yQ}Q=>(kNh?EIuy5@&=$3&mcz0@yK%_nv(e^a5@+d zCX&d9I}JwL6FpFyBe<1~jmJqNFx_E*X65%vARGUrv`Bv%eVVM@FIDV8e)W76T-F=N zUX5l6eYKCUB|2)76a@01G8p1vc@qLb)-&ue08O_WNx+{Byke3i*@?fpSqOO|63n!< zsF{d+AhGsviALoaFiIklu#0UUNkhp&Lc8I*3J_h=-54V<7;G!)s3LGNn*YVu5(tfp)ZyPrqFx$zU1bw=N|ED!KJBXoOXXdfqXjxc#MdgAigurB-7z|m&Q zZyyi8@$XGb9(fw?cQrkbeRzCqfgZD)pHSzb2If^CX@R!XY}X^r7Ht#M=h@w&)h$f- zJO?bQmLcNR&3?#ZKGpn|;@HQH*9V3@?sa61^=>h{`RVeU;@amOL4Lv(RNv^KFL17g z5A)?Ci?`#yX^C~ey`rD5+~L@Z8^YncWZi9(FsxpYZc~E}6hBzSop>2Jki`1!kKs3{|jLzR8*8bpu57Zw zsUxi|u-R-@%07#U_Q+oTo97+yk8zRjt3llhnXNwe*?sY=;iK_}MiH^aP-Awy$1?+r zMC@Ry(mDSBbGzdBUou|39@>0_hq?b$2vp?(Gxx*zLh9paj@Ls5W)V9n*A-P zax2&z^ya-F%@o?fcW|O4Gh)ZwcEjf#e;9R#V!&1>6YN;W2n9B0(&8gnb% zW2(u|`iFG$yFYtP8B+fWnM~ zJe)2VH}G*BMCWRa?T_eA?*|dY8UEV&*>=Oe{;#o1;6klE_A1gPzuk#3}Q`GpYe9TAa)tc(*Oj*mHox ztX#J)2E!%bVTbS(si&Jqk}%D!9_&uNdu&GkUdTA?$d4`kZow;dH*%?s&BD$#sH=31 zkT+kYC{tP{IBwHOw{q^J@8i@Kv{V^7ih)xof~9+Y4XF161{rJO<>i*iu@rgpalyNar zhOcZrf#PNSKDX-8yPuXsp<{$iDsyy&ovW$IF7WlfbsX z)2eXO!l7JjCka87qLd}mUEH(g9IjN-7*?wL~(l#!Erhk@eM z*&4S)>kiBNc&jj$qItI#Ixwba9HT>JlKtqFAkC7RoB~gyHDSr@frK=T(=t(kdaWpb z<`rt}77(<`zD|I(%8vGq1$=A9>sQ6XLRF8i48V;wC6;1Ns1r&)w&MGNon|nd}&+2lBo;NC2XKl|gf%i^2o=WJm0g+{< z=h8nGg-dn1(!ncNLrnDxFEDFproVxJOZE(zkdKk9K!Af=ke(HF{E{td^d(Z{f%GZN z$TCmK79vagLtft~BB7El)Tw~(0{DPJNs>D}^wd1%Iw$_~#mcl9w~!ZDXJ1bL*_FAd zhCrRdGk2TBTwv5~U&*?d61>VJ#Y6A#&=agPO5E1uRRtd}p8M6VBxly?jSuNAIZ6i$ zZreR_B9pq=bLMmbuvWs>L6T3=zufKA-Ld8w=+sn~r4+de!{CsXW~NW#9FZ-#r9%*S1~!UU9fKH+BQeh^Qg`w7 zgHX)S0C$rT8-C*?`w*a3>c`&jg!j#>fBj(b3vG(C2LOJ^5OfoExm*$?e-Acau|S%X zY>J_jI*-spRMOdKtHQ}f3_6aav^0X7{K@}3vp@x@0G#{z;vPwN0mJui4T}F$Yik;& zJ2-3T`|sR5ISqoI;H{DXEuDt`F+__reBa1Tu-K@>=vf_5w1WIMT{4r=5;Q+`P_UO@F;Xw4HVAhbH)Z2xLLXkzTcWv?o4d1C<{w0;H z8-Bh8<w_MX#I2(Ct02+I#BHpw^b%NKcnp$hJApSqOmQMs zg@lp=^QPg*P=@ZsQxrn~D4pyqa%yEJqn$L}vyO}`(g}^jWJZ!3qP$+8-jX5<3}xlo zwH*&{IQji-(EVeJMIn%d=aXI4&$lMvf{qrIhefrPm3NH;e(xaJo(cW-a99#H{d_~) zwmZpF7o3u6Xfoqr=vUKiN#amRO#l(jL)7PJm*Y9AaJC7#tp(21QMkO9vNe3eVG#)= znUgV;q^MP#+?hEfTL#z|KbEskP$+HziMu9)9b`r6wC=Hk0&My#D{s2tA+e{EU$2X$ z8cqQehRRuq2RRI|hY@pm;4+FmY5?9an0S~v=k7)xp5hk$N2qCGvJGqeV`=eiX7sHB z@93)lDPRDgYTI;hl9h`hSPsdY*p#5^jV911;MNMbJlQq02|)r+o-WiZ=YiuQ>ZfHW z2$@M_E(F!G_lmdJ+!2BGg*J@6m9v`?Cwl@{io}m&s?lhtpM~yEbEpOY@}@_wcV3@< z_@s@2Cqt+Iz2R+ni2qc+162LMZQu&AU&86ORmW4M0c zrMwn36zdgueG5!7@qDHzX<%;5ooQtQlmo2SaH9)<)1G8?*=}+V;Hes_H=FNq{I284 znc+jH&);$XQu7!Si)g5ky&jkca7g7T{N}uY*Gi1Qvn+XbDv!j!Y9lX#`>2aM~8R5X&)ObijiSm$`VMr zvgbndqJQfjzyDhUkRdO0+4!`>K<3D@tbE04kHAqGuhdqb)YjqT00~X8(N9*){TuO1 z*I@kkBTMc6c%;|BongDh7f_uDI!OkCkflhvjhz?mn>C8;gh$|=ccEFRfM>`<;FXe| z$OetP&SrBA7-U9VAN07D;j-*#%49)Yu(*1w4f8+@q!1N(tl%l;<>x{8z~clj2X3J( zOiqxeO5!5wcfuMDjas?)OS|7~n&W*jes-^S-xC?LX{sd$9t1UQwVP4{Su7`>9b^h*RSnDb z@$*aUvKY(@cHzm$#;$6bpT4Zfxw>lPU4#Bkv=T=`pB9&?TiBOAiW-aQ9vNO;$j>Zb zMq^1AD89sUzg}?+p`}G`Q&b+0eT}LYjI8Vf%c|_wBND2~GAR1~`*S|_S*5}o@c%z8 zo0Q-0W`sZwyU({LC*SckSWSsg*L|_+*=wB>Q{q2)BDC$Om5>)lzw=DKI1=9zPT*r& zmSGLwTDQFax!b(tUmLi1p5V=!Hg#g`OJeRgCDyK8OOjzpuvEkAZ#s!}-6T~6=ivZc zLXapaBV&*IM<(M9rcxbKPl!RZgaW2XlI|qmkfgP(;!z6*d*|Ld9dL1>QQ@9gA@rfU ze&uIC(Szvk?;7fVkVHhP^d_bvk!o?Cj9ww-z7wR1B45GD-wNqfj^sq2Bg95Fa2K(F zJ+sP4TA*!@P%MZCC?C9DpEj|XVT$BMvXPObUzlJ&`5gHT?&J#S6>QocUZ-JAdrtnx zzU^&yR;SZ;oT4rs9zK;+i@MY4eTEum`>NKD{y++?_+))X88av|9 zC8TBb3y4icOyVMiHUE6$IjWcR7&6hO!>6GfHG@UPaY2-X^-o^*gK)rc`9&}oI_J<+ z%5>x5Q3*ZbMuX!fwrDbf$F8b^ZIIL*H<>mIXP(7@fhcJez@Eep6-tF|TIouNSNy!_ z(h_ltL^U1+NJ&26JApbHoA>iex9&anL5RxIt4FWc?m3V%to+(-tLGWM?ssBYg$iW^uk5chdBhs|1?jBhy%Ab}yn5=3b!mB=$Bl_l}8*o(Nh#PO^x zsR(Qg+aM_W-Y}VOxZ>>gZkK+V{-Wwle{>$dCY2P5pkMW>xA6(c=Ung1ehF(tJx zj+bR3&z1l1;Uv?VwlNE_bCdP6t1a04yPtD-pSa=8m1k3%v`S-ADOm5vPd*Z6v z&C@aA7)SpXefXt434XCLW$MZfzlt8G^V&MN90W$d5ew!5^}dU!7R%D5(6oH6I6Uxe zXmJ}OL+@v!Y%AH;ZT$R)J}&#nTZg;&@y;4MXTg>q<2eLnyQ8FQvgz6;f=M~D&0nKSM- zHw(_CajY!xRT8)q{bsWDVwuni}C=Nf`?4$ z__CKi7`b?#c)OL0>ozh(M`pL@h_`(HY^^6B^IjcPqlYFQ?(&Cj^fSG>F1zksfO0?P zr_cE&Yu{*L(=R{*sR}3+F)CeyR~Be#lon>Jz0R@VwC$Dq78EY(<)dTJ+)zoq5NK+P^A<2*bpNk!f) z%o@`prkos`!h(^sVn^fq7$N7sF6caaeydgV$5ifPaF~dOnV3;Z4(dTv?0U&#V`JxG zu&ft1V^iApm#X}$jI(Oil85g@CV?bCY3y9gAR4jNC*0lrrhMHMOXX$vR3AoM$GdU4 z>1J7Tb~pRCi~IuBY5i?yQtG?|C*3jf)EX)%EL2dhWdXkg>%fOwkU#L>2t7TEkc)Cy z#lJgUWk>qG%9~qFXSRCH9OdTce-&vzHFvv)_E-5Rkilz>BTU)k) zS%#BI(fnDLF(pL zGc_C5QC*n*b1GxV&BNo#L6-5z=kJ8p#)B1zFNYFzDR=->K%R%Y=Xw&Rha6^1jXmSO zc#uF)oGVlSNY(p>{zHd9QmJqenOUIbR1@?PnEnZfN~-WOl@RYLOkiwEBK<&a+A1cd zgX`?ar{}`BaE;uE&J4-O_KKvHBe@IZDl{9Ko^OyP_*jnZgWup!s%v=B^f2w7qgI#E77Qan`v+fPTjeC!aqVQdPkWCwPz^aEvCu`6CxiJtqL2Gw z<`e-IR3!fA`3Qz?5ttni_5wL72}T}q8e~_!y%l>H zyBPCu`Th%Ddf!vhoFD?(9kJlHj4Z%h2 zyt-QZEpeTbP(Zoea&Zq?n1mYTvG3b4?*Qbg8z7uvw8YpUluTIC6Rtex7#SPeI~Wh@ zg+vf~>B6&#Y2Cl?JLM}GDf>JUn;I#z>5L421}QN4V3deSt7@=gaM8|~*DBqj z_d|d5{Cau1i8bb!81dEJa&dVE`Fw-PQH{#%uq?%lmMe$Hh9)#()f=L07zQ=ne3aT*PTE0aJTXM_8}3S=%_bj zPP+M)4ApUx0hzpq_wzOenYUz5{rh}X(O1Z;zO6)2$jeBYK24p_@22ty3jdtfm6dp) z>-jOW8w`*r_7Jc@=PxMRA{{l-9~y4DX{VUV-R<__nBe6JOsy2S;4mEsDGiC|?-_@2}z=-sL~58X=)`gxym z$f9kxsXrqbjDU(c^P#cl0xA?0&yDR*+3#eB1emFj*l#~4 zG=cUM2lH;S<)KaXeDvoqcJx2A^OugF0!!cnV`ngGGqXmUI9=qFF)kXXJyY<@d<+g{jd$;UwRzb8p&Tkz3C zhuRUFQ2~xrhql^)!&-)MbU2>@Qr?qzZexGN+>SUr!|xwPZO#kYOH z6+j%d+!Uxd5RI(x>4umvjO08oIr?K9qqB7NvWQo8%&CUESd$AsK8dc5;Gcax$&@PQ zovq{BJ9%Q&t*i9#UbzKi#tMa^GN!)d)Dl6wET}s7I7qs;arQ(qW=Rp*2z$ZORf?>} zBu({bD!CEB%Xhvw6-)b4^}Ta(uI_slHvG{=QY-iMsZRDKkSbm~GhN9)_v392FtzhK zEP%FT^}V29Kni80+?@~$6O*S<@^Clsrfs()`wpFu>%G?~IaI$PWfubq|34mXyp5hr6a{{igYS{rz5qB-3zm$K8E$3ahNH_67v3Lr?CuW@kvT zDELB^7*P~9u!tfUTS(~3q9s^le&j(W8OqUnf8a^918wtpP!7_E0~4JiW9QTSLy{_~ zl`Ol;SFCJ#UY-7PCM-^$)Fxb29BVDnc=kDS;m;ww`%}lM{r1VN{iX|=ROxN;xadD% z|6fh%^hFaOjr{agaq5&a+~x^fKlNxn*9MMyy`Y9U$JM`i409_zb9bSJ?M}&PJTHPt zGRGFagsZ1dhd!t+X+7xqh>k#|y0-v5^L!*@#kqwm!nsIvWaQ{zyjDg--c|`~oo&$gv zRz#nl?je_7=O6DUXZ%}7ND1cS3JxvA{;U-BQ#OR}jAEK?uH;*xU-kx?3y|6( zd*tY^K>zK7pS<`{Zy~G6fa>ny-y=oJ$`;iI2J6dU8Fz&FXcN4X_DF&Wj6i^Qxsgra zaiWlG8_0&y=$=6fFo{tVVScw_>C#|=Xu)za(0XrWPp5-U+~n%DYfm(M{IUA*Q=O!6 z9Ak@XC#xTW9WwjIXg0a{-v*(PO)$M9EPaB1pyZ%|j4OZ?3i3XLghq}$|KnrkSOh!q zMqcV~B>*XrD!_}HlatfCCWS~D_FO!fM*OS{z`1AMYZ(I~$wmq0f9pk*N6EwV^Q-zg zXFVr|GOB3aR`wXD)G4FQI6JmE$SwrP;TBHLFj^nB0aj5vHAqS#%wvB3MSMn<%QHp= zfLVf*Ls*@axO#4DcO5}I4tM3|U*uHH$YzX5$+|;%A+nb5_X`BiP>0h_0Y*-5yS+N6Tm=Y z0IFtweYrqA%PtLiF-{3IPoS2|#M4Xdy}$ojPR5ffV-^J2##RngQPLfA`-s%k_mREG ze37dCeJ3f6uYZim1ZxmSjgUq%W?#fA{Omxy0rJ05zCQ-XNXipJBTkG7utF3jAP8T{ z${LG1)#0ljXu_X_UKUY)EM{DpheuG*w%GH#6={wF8V=AH8oPU1^lrWW@1Igt}z zI&_5{-agvBt$AfTd%LNt*Wt}cVpC4|+aVb5`q;w^5o077i}w2wjEe%wHcCu$0lj)s zLt{Ie6q+I%OkalBk4?s^#2P7QI@!cE_5WreHnk}4jy?{zQ+Zep`3edIh}x?|W2F$z z`=B!Cwe8leJhawDES2C3kfD9c8gF?F;HFF9e-y$$$%SN$WnAJh%{|Nt+;wy04t~93 zwW2fGTJv4Lh0*C~k(Q+%S(6V?5A)&Iq^Dq;^e4Zd^A2$%4W}Gp9yA#&r%$p%_iFar z4v(igOxVO?U`=}p{y7!vs}^?x>xEmOC;ln!BS}?wRghD-cp9c@L!sgwJThXehpum5s>Vc$T%V_TS!;$;0c|ii-!?LKWn0ski zZB05{73XNh^2Y5|Pv-jQ-v33~qnDHR0Ae=bP9J6KjozKIH|VIRs7C))3_l&}?BnR$ zX7)cPMnZXi5C-L&KjiU_t=o69s`dC34bOgM>eDWAf_T3>M+?4_TeAt4%@4<`BhBeOuFQ-Zm6SP;h_&20Uiea@4PjSgcM9tfEoft$!3 z4*SuLa5A;!=%~>Tsss_lyzPM%6$zW1vfhs11%Td8JGeyT5z0hw*Oj35!R!cL?I+SN ze*Bv}fDq?Sz+QS3KOEwueN&8oJgzMvPLqz{5pX8f@JQgSC2S4UikuRplSb0dMk0>^ zWr;8r@!XQf6sU{=tUqL$37Z1?E&zblM3ThB6pB=+PQV-k?PEV>f7nBm7S0}+B4O+) z_88=t9@j-k)>Z+5q=fZjxx$h>3KSTk3xa(n?-+a; zp|~PIB)##$n5hBnllpV(r-2Tm1`-Nj<3rmL3&9)#R6QTzJrVqaycwkI>72du$GIpc zVm(7k0UUh{4m*>Z{vBl7Hh5;_&qJ~cJBm3`GQNNEu=DRfZm!b2`RyxVd=mZ>7rTJd zupCFBlmoKHRDdq8T)n!DR`&7Y-Oe9EPO?tEE?)7Lo9h=`g}|K0xJDfq^_gDUgq*H>PA|C_Uk5}v4eAJh^>Pm~9SX>wvezXJ#MaIlm1ez12uA0d4=Jo&!? zh)(?gi2MzwuPnKO@Ptq|-S;oxkih>YIMh-9Ux7oF1c%HFhg~*76dP)1MV^`v#?B~o zBBnd7Z3UY@*HjLpO!uEO`zdiB-2fip$cd3TKrvTC*O>Oj>mN*bJ2nY2W;C_*H_vCi zpgeVNRHpkL)2i;eVdEsKMRezEn%P8P*$Tul=o~-jCp^I$pK#)Wuvx1solX+@@lQGl zZ=<3-9VUwS0Y>rWN4QR-Mbqco|FPW|JbS{g3v<_kt2F>%8pcuH_wTDknmCpWZeAq= z^-LUG<1W-BypFs8nK2a#uN9U!@ES0- zdWPH&+5gecX>Z}y2*YpVlV7_um$dzL`{K#PLBn0IyYhCG74O>>w71N4U!v0aoE$Ib z5p1v@AAEIh{~R%LaR)_f9A~n&T0wDH z(ysZ6kDuQpgUlEvyP?rnXaO7pBh7pnR<=EkEp~D-t57*BUh?_(zrRkaY$>K(8uX|wTo|!OFioHF ziQ}26H0&1H%qT304D_yIY7p`3B1I7fnq% zTUkWy_8=yPI8=C#RKrpVhuuW?=7L|QM07Kch}N(3a7aOwixJ7O%gs5P6Ye zne_A~;;@cK6#wJ`z|!c~*TA}U;!|SSgi|fMnJMB3!GZuk2b6jW<_0gfFWMbSnmij3?97jk3i=QAucAAi79xI zC`D;wi$QBVDOm|^DldcvV;f3{gV!Hl+dc}u{pUrxk;7pA$2X9FrL6n6-0A;+e$&8K zA=A%u?@ET%Vob<}5-dzX5MF2)`(1nbbSIL1NqQ^tm4ol8|1{eFaf4RAi|=N9Babjx zoV_6mRUj>QWJBmaM@L5oE_bKk?m>bDv%Y^?pqXYmn+R)@{iS~0UHZRx=P(RpKLlEe z;6$agiq$-76u6aTqyXxFaB$Hyo8N&d^X%?M zgu(Mp)Vc;=*HNG%U8t)|B99OHm%tS9kFOBPPn6N7uX!xSImN{b85tRguME!ejmM?n zjs}Z%;)};83zLoy9UV8ZxTqOv|NO~H^X#tLuH-j-zZ7a$XGB}W`SNx^fGgHMqGg() zSRvkOMon3;;$pD1wM`o7?(R0hdr?0pgt^EcU&>czwky8{TNpy8gQG;{NW!8~@OYqs z)WrsDjqFxRFr+@zewHYwbvAH8*nPbx?VmS={@*I->q(Bmu$&UrQM9{5B;@B~S zz3gBUb8rP6CPKQaCULXP(3g>vS|5M^TNvTJtSedAn&+n@d~sLeQvG;Q@m+Z+xPEZDb*5wK~u69q1=YE zdVj&{5C5yZGmq+dZQK5rY*L~m^OPxm$rLiA$Q+3@nG)?XMiddsP^Ozger6d%gCdGj zO6ClaX)6t)QbeUfpYM1IFIA?>xOpf zcHy}#zVva*N|=dM^xAdD)@3_BynBCt++sq5zdUvOtX*MRcI zeb;cZO3H56YJ&-f2W$bEjN=Qw=~LyMcSl59NBg?whYm*cQJCN5ub*WP&-R#8_fC+< zQ$qF4$h$*y*H(5cA6@FB5ztjU>YPV#_ko9>NH(7pN-lWpE+433OT6A$`Q}32QU^)I zc@6(GBc6=K5d5T$2Jm4As0m2RyOUP&c8yPLhIt#)~rE; z2DY@abg0xoMdk5@Ii|w52$1Op z-LqMSAAry8}!c9cCb5coE7adFX!@caAg`EBAOUSr+h z-dAk=ET7$pⅇSi~hdv)hwDBtougVjm0-3`m>N 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 literal 0 HcmV?d00001 diff --git a/doc/html/main.html b/doc/main.html similarity index 64% rename from doc/html/main.html rename to doc/main.html index 99f4cb8..9f11866 100644 --- a/doc/html/main.html +++ b/doc/main.html @@ -388,35 +388,36 @@ tr:nth-child(odd) { -
-

LBM Benchmark Kernels Documentation

- - +
+ + + +

LBM Benchmark Kernels Documentation

2   Compilation

@@ -520,8 +521,19 @@ applied, e.g. TARCH as well as the Benchmarking section.

both configuration can be chosen via CONFIG=linux-gcc or CONFIG=linux-intel.

+
+

2.5   Floating Point Precision

+

As default double precision data types are used for storing PDFs and floating +point constants. Furthermore, this is the default for the intrincis kernels. +With the PRECISION=sp variable this can be changed to single precision.

+
+make PRECISION=sp   # build for single precision kernels
+
+make PRECISION=dp   # build for double precision kernels (defalt)
+
+
-

2.5   Cleaning

+

2.6   Cleaning

For each configuration and build (debug/release) a subdirectory under the src/obj directory is created where the dependency and object files are stored. @@ -536,7 +548,7 @@ make clean-all

all object and dependency files are deleted.

-

2.6   Options Summary

+

2.7   Options Summary

Options that can be specified when building the suite with make:

@@ -578,6 +590,11 @@ make clean-all + + + + + @@ -603,7 +620,7 @@ make clean-all
-

3   Invocation

+

3   Invocation

Running the binary will print among the GPL licence header a line like the following:

 LBM Benchmark Kernels 0.1, compiled Jul  5 2017 21:59:22, type: verification
@@ -614,7 +631,7 @@ LBM Benchmark Kernels 0.1, compiled Jul  5 2017 21:59:22, type: benchmark
 

if verfication was disabled during compilation.

-

3.1   Command Line Parameters

+

3.1   Command Line Parameters

Running the binary with -h list all available parameters:

 Usage:
@@ -639,19 +656,19 @@ Usage:
 This holds also true for -verify which sets geometry dimensions,
 iterations, etc, which can afterward be override, e.g.:

-$ bin/lbmbenchk-linux-intel-release -verfiy -dims 32x32x32
+$ bin/lbmbenchk-linux-intel-release-dp -verfiy -dims 32x32x32
 

Kernel specific parameters can be obtained via selecting the specific kernel and passing -h as parameter:

-$ bin/lbmbenchk-linux-intel-release -kernel kernel-name -- -h
+$ bin/lbmbenchk-linux-intel-release-dp -kernel kernel-name -- -h
 ...
 Kernel parameters:
 [-blk <n>] [-blk-[xyz] <n>]
 

A list of all available kernels can be obtained via -list:

-$ ../bin/lbmbenchk-linux-gcc-debug -list
+$ ../bin/lbmbenchk-linux-gcc-debug-dp -list
 Lattice Boltzmann Benchmark Kernels (LbmBenchKernels) Copyright (C) 2016, 2017 LSS, RRZE
 This program comes with ABSOLUTELY NO WARRANTY; for details see LICENSE.
 This is free software, and you are welcome to redistribute it under certain conditions.
@@ -679,34 +696,40 @@ Available kernels to benchmark:
 
-

3.2   Kernels

+

3.2   Kernels

The following list shortly describes available kernels:

    -
  • push-soa/push-aos/pull-soa/pull-aos: +
  • push-soa/push-aos/pull-soa/pull-aos: Unoptimized kernels (but stream/collide are already fused) using two grids as source and destination. Implement push/pull semantics as well structure of arrays (soa) or array of structures (aos) layout.
  • -
  • blk-push-soa/blk-push-aos/blk-pull-soa/blk-pull-aos: +
  • blk-push-soa/blk-push-aos/blk-pull-soa/blk-pull-aos: The same as the unoptimized kernels without the blk prefix, except that they support spatial blocking, i.e. loop blocking of the three loops used to iterate over the lattice. Here manual work sharing for OpenMP is used.
  • -
  • list-push-soa/list-push-aos/list-pull-soa/list-pull-aos: +
  • aa-aos/aa-soa: +Straight forward implementation of AA pattern on full array with blocking support. +Manual work sharing for OpenMP is used. Domain is partitioned only along the x dimension.
  • +
  • aa-vec-soa/aa-vec-sl-soa: +Optimized AA kernel with intrinsics on full array. aa-vec-sl-soa uses only +one loop for iterating over the lattice instead of three nested ones.
  • +
  • list-push-soa/list-push-aos/list-pull-soa/list-pull-aos: The same as the unoptimized kernels without the list prefix, but for indirect addressing. Here only a 1D vector of is used to store the fluid nodes, omitting the obstacles. An adjacency list is used to recover the neighborhood associations.
  • -
  • list-pull-split-nt-1s-soa/list-pull-split-nt-2s-soa: +
  • list-pull-split-nt-1s-soa/list-pull-split-nt-2s-soa: Optimized variant of list-pull-soa. Chunks of the lattice are processed as once. Postcollision values are written back via nontemporal stores in 18 (1s) or 9 (2s) loops.
  • -
  • list-aa-aos/list-aa-soa: +
  • list-aa-aos/list-aa-soa: Unoptimized implementation of the AA pattern for the 1D vector with adjacency list. Supported are array of structures (aos) and structure of arrays (soa) data layout is supported.
  • -
  • list-aa-ria-soa: +
  • list-aa-ria-soa: Implementation of AA pattern with intrinsics for the 1D vector with adjacency list. Furthermore it contains a vectorized even time step and run length coding to reduce the loop balance of the odd time step.
  • -
  • list-aa-pv-soa: +
  • list-aa-pv-soa: All optimizations of list-aa-ria-soa. Additional with partial vectorization of the odd time step.
@@ -716,7 +739,7 @@ arrays (soa) counter parts.

The following table summarizes the properties of the kernels. Here D means direct addressing, i.e. full array, I means indirect addressing, i.e. 1D vector with adjacency list, x means supported, whereas -- means unsupported. -The loop balance B_l is computed for D3Q19 model with double precision floating +The loop balance B_l is computed for D3Q19 model with double precision floating point for PDFs (8 byte) and 4 byte integers for the index (adjacency list). As list-aa-ria-soa and list-aa-pv-soa support run length coding their effective loop balance depends on the geometry. The effective loop balance is printed @@ -806,6 +829,38 @@ during each run.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -891,7 +946,7 @@ during each run.

-

4   Benchmarking

+

4   Benchmarking

Correct benchmarking is a nontrivial task. Whenever benchmark results should be created make sure the binary was compiled with:

    @@ -901,7 +956,7 @@ created make sure the binary was compiled with:

  • use TARCH to specify the architecture the compiler generates code for.
-

4.1   Intel Compiler

+

4.1   Intel Compiler

For the Intel compiler one can specify depending on the target ISA extension:

  • AVX: TARCH=-xAVX
  • @@ -927,15 +982,15 @@ make ISA=avx TARCH=-xCORE-AVX512 AVX512 intrinsics. This might change in the future.

-

4.2   Pinning

+

4.2   Pinning

During benchmarking pinning should be used via the -pin parameter. Running a benchmark with 10 threads and pin them to the first 10 cores works like

-$ bin/lbmbenchk-linux-intel-release ... -t 10 -pin $(seq -s , 0 9)
+$ bin/lbmbenchk-linux-intel-release-dp ... -t 10 -pin $(seq -s , 0 9)
 
-

4.3   General Remarks

+

4.3   General Remarks

Things the binary does nor check or control:

  • transparent huge pages: when allocating memory small 4 KiB pages might be @@ -966,7 +1021,7 @@ executed is actually the code which is executed.
-

4.4   Padding

+

4.4   Padding

With correct padding cache and TLB thrashing can be avoided. Therefore the number of (fluid) nodes used in the data layout is artificially increased.

Currently automatic padding is active for kernels which support it. It can be @@ -998,879 +1053,153 @@ like -pad 0+16 would

-

5   Geometries

+

5   Geometries

TODO: supported geometries: channel, pipe, blocks, fluid

-

6   Performance Results

+

6   Performance Results

The sections lists performance values measured on several machines for -different kernels and geometries. +different kernels and geometries and double precision floating point data/arithmetic. The RFM column denotes the expected performance as predicted by the Roofline performance model [williams-2008]. For performance prediction of each kernel a memory bandwidth benchmark is used which mimics the kernels memory access pattern and the kernel's loop balance (see [kernels] for details).

-
-

6.1   Haswell, Intel Xeon E5-2695 v3

+
+

6.1   Machine Specifications

+

Ivy Bridge, Intel Xeon E5-2660 v2

    -
  • Haswell architecture, AVX2, FMA
  • -
  • 14 cores, 2,3 GHz
  • -
  • 2 x 7 cores in cluster-on-die (CoD) mode enabled
  • +
  • Ivy Bridge architecture, AVX
  • +
  • 10 cores, 2.2 GHz
  • SMT enabled
  • +
  • memoy bandwidth:
      +
    • copy-19 32.7 GB/s
    • +
    • copy-19-nt-sl 35.6 GB/s
    • +
    • update-19 37.4 GB/s
    • +
    +
-

memory bandwidth:

+

Haswell, Intel Xeon E5-2695 v3

    +
  • Haswell architecture, AVX2, FMA
  • +
  • 14 cores, 2.3 GHz
  • +
  • 2 x 7 cores in cluster-on-die (CoD) mode enabled
  • +
  • SMT enabled
  • +
  • memory bandwidth:
    • copy-19 47.3 GB/s
    • copy-19-nt-sl 47.1 GB/s
    • update-19 44.0 GB/s
    -

    geometry dimensions: 500x100x100

    -
on OpenMP, i.,e.. threading support.
PRECISIONdp, spdpFloating point precision used for data type, arithmetic, and intrincics.
STATISTICS on, off off x 456
aa-soaAASoADxx304
aa-aosAAAoSDxx304
aa-vec-soaAASoADxx304
aa-vec-sl-soaAASoADxx304
list-push-soa OS SoA
--------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
kernelpipeblocks-2blocks-4blocks-6blocks-8blocks-10blocks-15blocks-16blocks-20blocks-25blocks-32RFM
blk-push-aos58.8249.8557.3459.9061.3762.1765.3064.0067.5464.4669.69104
blk-push-soa32.3233.4634.0234.6435.0635.0436.3135.4437.2035.1437.95104
blk-pull-aos56.9751.4156.0957.9259.9859.8363.3761.5565.5063.1167.02104
blk-pull-soa49.2946.2347.5051.9751.2749.5255.2353.1354.5049.7957.90104
aa-aos91.3566.1476.8084.7683.6391.3693.4692.6293.9192.2592.93145
aa-soa75.5165.6870.9471.3673.8375.4674.8479.4883.2877.7082.72145
aa-vec-soa93.8583.4491.5893.9694.3596.62101.7696.72106.37102.60110.28145
list-push-aos80.2980.9780.9581.1081.3782.4481.7781.4980.7281.9380.9383
list-push-soa47.5242.6545.2846.6443.4640.5944.9446.5541.5345.9844.8683
list-pull-aos85.3082.9786.4383.4286.3383.7086.4383.7783.1085.8984.4483
list-pull-soa62.1263.6163.2861.3266.7262.6564.8260.4958.0164.4662.5283
list-pull-split-nt-1s-soa121.35113.77115.29113.54117.00116.46114.78114.54110.83112.67117.85125
list-pull-split-nt-2s-soa118.09110.48112.55113.18113.44111.85109.27114.41110.28111.78113.74125
list-aa-aos121.28118.63119.00118.50121.99119.11118.83121.47121.62126.18120.12129
list-aa-soa126.34116.90129.45127.12129.41121.42126.19126.76126.70124.40125.22129
list-aa-ria-soa133.68121.82126.04128.46131.15132.25128.78133.50126.69124.40130.37145
list-aa-pv-soa146.22124.39130.73136.29137.61131.21138.65138.78127.02132.40138.37145
-
-
-

6.2   Broadwell, Intel Xeon E5-2630 v4

+ + +

Broadwell, Intel Xeon E5-2630 v4

  • Broadwell architecture, AVX2, FMA
  • 10 cores, 2.2 GHz
  • SMT disabled
  • -
-

memory bandwidth:

-
    +
  • memory bandwidth:
    • copy-19 48.0 GB/s
    • copy-nt-sl-19 48.2 GB/s
    • update-19 51.1 GB/s
    -

    geometry dimensions: 500x100x100

    +
  • +
+

Skylake, Intel Xeon Gold 6148

+

NOTE: currently we only use AVX2 intrinsics.

+
    +
  • Skylake server architecture, AVX2, AVX512, 2 FMA units
  • +
  • 20 cores, 2.4 GHz
  • +
  • SMT enabled
  • +
  • memory bandwidth:
      +
    • copy-19 89.7 GB/s
    • +
    • copy-19-nt-sl 92.4 GB/s
    • +
    • update-19 93.6 GB/s
    • +
    +
  • +
+

Zen, AMD EPYC 7451

+
    +
  • Zen architecture, AVX2, FMA
  • +
  • 24 cores, 2.3 GHz
  • +
  • SMT enabled
  • +
  • memory bandwidth:
      +
    • copy-19 111.9 GB/s
    • +
    • copy-19-nt-sl 111.7 GB/s
    • +
    • update-19 109.2 GB/s
    • +
    +
  • +
+

Zen, AMD Ryzen 7 1700X

+
    +
  • Zen architecture, AVX2, FMA
  • +
  • 8 cores, 3.4 GHz
  • +
  • SMT enabled
  • +
  • memory bandwidth:
      +
    • copy-19 27.2 GB/s
    • +
    • copy-19-nt-sl 27.1 GB/s
    • +
    • update-19 26.1 GB/s
    • +
    +
  • +
+
+
+

6.2   Single Socket Results

+
    +
  • Geometry dimensions are for all measurements 500x100x100 nodes.
  • +
  • Note the different scaling on the y axis of the plots!
  • +
-------------+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - -
kernelpipeblocks-2blocks-4blocks-6blocks-8blocks-10blocks-15blocks-16blocks-20blocks-25blocks-32RFM
blk-push-aos55.7547.6254.5757.1058.4959.0061.7260.5664.0561.1066.03105
blk-push-soa30.0631.0932.1332.5432.7432.7233.8133.1934.9033.2135.75105
blk-pull-aos53.8048.6153.0854.9956.0856.6859.2058.1261.4958.7163.45105
blk-pull-soa46.9646.6148.8449.7050.3350.4652.3651.3954.2051.6155.71105
aa-aos91.4066.9978.4783.3886.6288.6292.9891.5497.0894.9398.90168
aa-soa83.0169.9675.8577.7279.0179.2982.3880.1185.7083.9187.69168
aa-vec-soa112.0396.52105.32109.76112.55113.82120.55118.37126.30121.37131.94168
list-push-aos75.1374.1875.2075.4275.2475.9975.8075.8075.5476.2276.2197
list-push-soa40.9938.1439.0038.8938.8939.6739.8739.2839.3540.0840.1397
Ivy Bridge, Intel Xeon E5-2660 v2, Double Precision
list-pull-aos82.0782.8883.2983.0983.3283.4982.8282.8883.3282.6082.9397
list-pull-soa62.0760.4061.8961.3962.4360.9060.4862.8062.5061.1060.3897
perf_emmy_dp
list-pull-split-nt-1s-soa125.81120.60121.96122.34122.86123.53123.64123.67125.94124.09123.69128
Ivy Bridge, Intel Xeon E5-2660 v2, Single Precision
list-pull-split-nt-2s-soa122.79117.16118.86119.16119.56119.99120.01120.03122.64120.57120.39128
perf_emmy_sp
list-aa-aos128.13127.41129.31129.07129.79129.63129.67129.94129.12128.41129.72150
Haswell, Intel Xeon E5-2695 v3, Double Precision
list-aa-soa141.60139.78141.58142.16141.94141.31142.37142.25142.43141.40142.26150
list-aa-ria-soa141.82134.88140.15140.72141.67140.51141.18141.29142.97141.94143.25168
perf_hasep1_dp
list-aa-pv-soa164.79140.95159.24161.78162.40163.04164.69164.38165.11165.75166.09168
-
-
-

6.3   Skylake, Intel Xeon Gold 6148

-
    -
  • Skylake architecture, AVX2, FMA, AVX512
  • -
  • 20 cores, 2.4 GHz
  • -
  • SMT enabled
  • -
-

memory bandwidth:

-
    -
  • copy-19 89.7 GB/s
  • -
  • copy-19-nt-sl 92.4 GB/s
  • -
  • update-19 93.6 GB/s
  • -
-

geometry dimensions: 500x100x100

- --------------- - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - +
kernelpipeblocks-2blocks-4blocks-6blocks-8blocks-10blocks-15blocks-16blocks-20blocks-25blocks-32RFM
Haswell, Intel Xeon E5-2695 v3, Single Precision
blk-push-aos113.0193.99108.98114.65117.87119.47124.95122.46129.29123.87133.01197
perf_hasep1_sp
blk-push-soa100.2198.87103.63105.56107.02107.27111.61109.83116.16110.51110.29197
Broadwell, Intel Xeon E5-2630 v4, Double Precision
blk-pull-aos118.45102.54114.12117.82122.69124.31130.58127.85135.72129.65139.94197
perf_meggie_dp
blk-pull-soa82.6083.3687.1388.3988.8488.9692.4890.9395.7991.9298.64197
Broadwell, Intel Xeon E5-2630 v4, Single Precision
aa-aos171.32125.43147.73157.70163.35167.25175.39174.20182.54173.67187.76308
perf_meggie_sp
aa-soa180.85152.39165.84152.59171.90175.76184.94182.34189.43180.30193.54308
Skylake, Intel Xeon Gold 6148, Double Precision, NOTE: currently we only use AVX2 intrinsics.
aa-vec-soa208.03181.51195.86203.41209.08212.34224.05219.49234.31225.92245.22308
perf_skylakesp2_dp
list-push-aos158.81164.67162.93163.05165.22164.31164.66160.78164.07165.19164.06177
Skylake, Intel Xeon Gold 6148, Single Precision, NOTE: currently we only use AVX2 intrinsics.
list-push-soa134.60110.44110.17132.01132.95133.46134.37134.33135.12134.91137.87177
perf_skylakesp2_sp
list-pull-aos169.61170.03170.89170.90171.20171.60172.09171.95169.48172.08171.02177
Zen, AMD Ryzen 7 1700X, Double Precision
list-pull-soa120.50116.73118.62118.00120.99118.15117.17121.41120.83120.00118.74177
perf_summitridge1_dp
list-pull-split-nt-1s-soa225.59224.18225.10226.34226.01230.37227.50228.42227.39231.65227.35246
Zen, AMD Ryzen 7 1700X, Single Precision
list-pull-split-nt-2s-soa219.20214.63217.61218.13219.07221.01219.88220.09220.62221.68220.58246
perf_summitridge1_sp
list-aa-aos241.39239.27239.53242.56242.46243.00242.91242.46241.24242.96241.52275
Zen, AMD EPYC 7451, Double Precision
list-aa-soa273.73268.49268.48271.79275.29274.56277.18272.67274.21275.24278.21275
perf_naples1_dp
list-aa-ria-soa288.42261.89273.26284.84283.88288.29290.72289.81293.36290.75292.93308
Zen, AMD EPYC 7451, Single Precision
list-aa-pv-soa303.35267.21289.18294.96294.36298.16300.45301.71302.37302.88304.46308
perf_naples1_sp
@@ -1903,7 +1232,7 @@ Roofline: an insightful visual performance model for multicore architectures. Commun. ACM, 52(4):65-76, Apr 2009. doi:10.1145/1498765.1498785 -

Document was generated at 2017-11-21 15:43.

+

Document was generated at 2018-01-09 11:54.

diff --git a/doc/main.rst b/doc/main.rst index 0eaa5ed..3d9ca9f 100644 --- a/doc/main.rst +++ b/doc/main.rst @@ -1,36 +1,31 @@ -.. # -------------------------------------------------------------------------- - # - # Copyright - # Markus Wittmann, 2016-2017 - # RRZE, University of Erlangen-Nuremberg, Germany - # markus.wittmann -at- fau.de or hpc -at- rrze.fau.de - # - # Viktor Haag, 2016 - # LSS, University of Erlangen-Nuremberg, Germany - # - # This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). - # - # LbmBenchKernels is free software: you can redistribute it and/or modify - # it under the terms of the GNU General Public License as published by - # the Free Software Foundation, either version 3 of the License, or - # (at your option) any later version. - # - # LbmBenchKernels is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY; without even the implied warranty of - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - # GNU General Public License for more details. - # - # You should have received a copy of the GNU General Public License - # along with LbmBenchKernels. If not, see . - # - # -------------------------------------------------------------------------- + +| Copyright +| Markus Wittmann, 2016-2018 +| RRZE, University of Erlangen-Nuremberg, Germany +| markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +| +| Viktor Haag, 2016 +| LSS, University of Erlangen-Nuremberg, Germany +| +| This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +| +| LbmBenchKernels is free software: you can redistribute it and/or modify +| it under the terms of the GNU General Public License as published by +| the Free Software Foundation, either version 3 of the License, or +| (at your option) any later version. +| +| LbmBenchKernels is distributed in the hope that it will be useful, +| but WITHOUT ANY WARRANTY; without even the implied warranty of +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +| GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License +| along with LbmBenchKernels. If not, see . .. title:: LBM Benchmark Kernels Documentation -=================================== -LBM Benchmark Kernels Documentation -=================================== +**LBM Benchmark Kernels Documentation** .. sectnum:: .. contents:: @@ -47,7 +42,7 @@ EXPERIMENTS.** Currently all kernels utilize a D3Q19 discretization and the two-relaxation-time (TRT) collision operator [ginzburg-2008]_. -All operations are carried out in double precision arithmetic. +All operations are carried out in double or single precision arithmetic. Compilation =========== @@ -120,6 +115,18 @@ both configuration can be chosen via ``CONFIG=linux-gcc`` or ``CONFIG=linux-intel``. +Floating Point Precision +------------------------ + +As default double precision data types are used for storing PDFs and floating +point constants. Furthermore, this is the default for the intrincis kernels. +With the ``PRECISION=sp`` variable this can be changed to single precision. :: + + make PRECISION=sp # build for single precision kernels + + make PRECISION=dp # build for double precision kernels (defalt) + + Cleaning -------- @@ -150,6 +157,7 @@ BUILD debug, release release debug: no optimization, debug CONFIG linux-gcc, linux-intel linux-intel Select GCC or Intel compiler. ISA avx, sse avx Determines which ISA extension is used for macro definitions of the intrinsics. This is *not* the architecture the compiler generates code for. OPENMP on, off on OpenMP, i.\,e.\. threading support. +PRECISION dp, sp dp Floating point precision used for data type, arithmetic, and intrincics. STATISTICS on, off off View statistics, like density etc, during simulation. TARCH -- -- Via TARCH the architecture the compiler generates code for can be overridden. The value depends on the chosen compiler. VERIFICATION on, off off Turn verification on/off. @@ -197,12 +205,12 @@ If an option is specified multiple times the last one overrides previous ones. This holds also true for ``-verify`` which sets geometry dimensions, iterations, etc, which can afterward be override, e.g.: :: - $ bin/lbmbenchk-linux-intel-release -verfiy -dims 32x32x32 + $ bin/lbmbenchk-linux-intel-release-dp -verfiy -dims 32x32x32 Kernel specific parameters can be obtained via selecting the specific kernel and passing ``-h`` as parameter: :: - $ bin/lbmbenchk-linux-intel-release -kernel kernel-name -- -h + $ bin/lbmbenchk-linux-intel-release-dp -kernel kernel-name -- -h ... Kernel parameters: [-blk ] [-blk-[xyz] ] @@ -210,7 +218,7 @@ and passing ``-h`` as parameter: :: A list of all available kernels can be obtained via ``-list``: :: - $ ../bin/lbmbenchk-linux-gcc-debug -list + $ ../bin/lbmbenchk-linux-gcc-debug-dp -list Lattice Boltzmann Benchmark Kernels (LbmBenchKernels) Copyright (C) 2016, 2017 LSS, RRZE This program comes with ABSOLUTELY NO WARRANTY; for details see LICENSE. This is free software, and you are welcome to redistribute it under certain conditions. @@ -241,37 +249,45 @@ Kernels The following list shortly describes available kernels: -- push-soa/push-aos/pull-soa/pull-aos: +- **push-soa/push-aos/pull-soa/pull-aos**: Unoptimized kernels (but stream/collide are already fused) using two grids as source and destination. Implement push/pull semantics as well structure of arrays (soa) or array of structures (aos) layout. -- blk-push-soa/blk-push-aos/blk-pull-soa/blk-pull-aos: +- **blk-push-soa/blk-push-aos/blk-pull-soa/blk-pull-aos**: The same as the unoptimized kernels without the blk prefix, except that they support spatial blocking, i.e. loop blocking of the three loops used to iterate over the lattice. Here manual work sharing for OpenMP is used. -- list-push-soa/list-push-aos/list-pull-soa/list-pull-aos: +- **aa-aos/aa-soa**: + Straight forward implementation of AA pattern on full array with blocking support. + Manual work sharing for OpenMP is used. Domain is partitioned only along the x dimension. + +- **aa-vec-soa/aa-vec-sl-soa**: + Optimized AA kernel with intrinsics on full array. aa-vec-sl-soa uses only + one loop for iterating over the lattice instead of three nested ones. + +- **list-push-soa/list-push-aos/list-pull-soa/list-pull-aos**: The same as the unoptimized kernels without the list prefix, but for indirect addressing. Here only a 1D vector of is used to store the fluid nodes, omitting the obstacles. An adjacency list is used to recover the neighborhood associations. -- list-pull-split-nt-1s-soa/list-pull-split-nt-2s-soa: +- **list-pull-split-nt-1s-soa/list-pull-split-nt-2s-soa**: Optimized variant of list-pull-soa. Chunks of the lattice are processed as once. Postcollision values are written back via nontemporal stores in 18 (1s) or 9 (2s) loops. -- list-aa-aos/list-aa-soa: +- **list-aa-aos/list-aa-soa**: Unoptimized implementation of the AA pattern for the 1D vector with adjacency list. Supported are array of structures (aos) and structure of arrays (soa) data layout is supported. -- list-aa-ria-soa: +- **list-aa-ria-soa**: Implementation of AA pattern with intrinsics for the 1D vector with adjacency list. Furthermore it contains a vectorized even time step and run length coding to reduce the loop balance of the odd time step. -- list-aa-pv-soa: +- **list-aa-pv-soa**: All optimizations of list-aa-ria-soa. Additional with partial vectorization of the odd time step. @@ -283,7 +299,7 @@ arrays (soa) counter parts. The following table summarizes the properties of the kernels. Here **D** means direct addressing, i.e. full array, **I** means indirect addressing, i.e. 1D vector with adjacency list, **x** means supported, whereas **--** means unsupported. -The loop balance B_l is computed for D3Q19 model with double precision floating +The loop balance B_l is computed for D3Q19 model with **double precision** floating point for PDFs (8 byte) and 4 byte integers for the index (adjacency list). As list-aa-ria-soa and list-aa-pv-soa support run length coding their effective loop balance depends on the geometry. The effective loop balance is printed @@ -301,6 +317,10 @@ blk-push-soa OS SoA D x x 456 blk-push-aos OS AoS D x x 456 blk-pull-soa OS SoA D x x 456 blk-pull-aos OS AoS D x x 456 +aa-soa AA SoA D x x 304 +aa-aos AA AoS D x x 304 +aa-vec-soa AA SoA D x x 304 +aa-vec-sl-soa AA SoA D x x 304 list-push-soa OS SoA I x x 528 list-push-aos OS AoS I x x 528 list-pull-soa OS SoA I x x 528 @@ -361,7 +381,7 @@ Pinning During benchmarking pinning should be used via the ``-pin`` parameter. Running a benchmark with 10 threads and pin them to the first 10 cores works like :: - $ bin/lbmbenchk-linux-intel-release ... -t 10 -pin $(seq -s , 0 9) + $ bin/lbmbenchk-linux-intel-release-dp ... -t 10 -pin $(seq -s , 0 9) General Remarks @@ -447,127 +467,144 @@ Performance Results =================== The sections lists performance values measured on several machines for -different kernels and geometries. +different kernels and geometries and **double precision** floating point data/arithmetic. The **RFM** column denotes the expected performance as predicted by the Roofline performance model [williams-2008]_. For performance prediction of each kernel a memory bandwidth benchmark is used which mimics the kernels memory access pattern and the kernel's loop balance (see [kernels]_ for details). -Haswell, Intel Xeon E5-2695 v3 ------------------------------- +Machine Specifications +---------------------- + +**Ivy Bridge, Intel Xeon E5-2660 v2** + +- Ivy Bridge architecture, AVX +- 10 cores, 2.2 GHz +- SMT enabled +- memoy bandwidth: + + - copy-19 32.7 GB/s + - copy-19-nt-sl 35.6 GB/s + - update-19 37.4 GB/s + +**Haswell, Intel Xeon E5-2695 v3** - Haswell architecture, AVX2, FMA -- 14 cores, 2,3 GHz +- 14 cores, 2.3 GHz - 2 x 7 cores in cluster-on-die (CoD) mode enabled - SMT enabled +- memory bandwidth: -memory bandwidth: - -- copy-19 47.3 GB/s -- copy-19-nt-sl 47.1 GB/s -- update-19 44.0 GB/s - -geometry dimensions: 500x100x100 - -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ===== -kernel pipe blocks-2 blocks-4 blocks-6 blocks-8 blocks-10 blocks-15 blocks-16 blocks-20 blocks-25 blocks-32 RFM -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ===== -blk-push-aos 58.82 49.85 57.34 59.90 61.37 62.17 65.30 64.00 67.54 64.46 69.69 104 -blk-push-soa 32.32 33.46 34.02 34.64 35.06 35.04 36.31 35.44 37.20 35.14 37.95 104 -blk-pull-aos 56.97 51.41 56.09 57.92 59.98 59.83 63.37 61.55 65.50 63.11 67.02 104 -blk-pull-soa 49.29 46.23 47.50 51.97 51.27 49.52 55.23 53.13 54.50 49.79 57.90 104 -aa-aos 91.35 66.14 76.80 84.76 83.63 91.36 93.46 92.62 93.91 92.25 92.93 145 -aa-soa 75.51 65.68 70.94 71.36 73.83 75.46 74.84 79.48 83.28 77.70 82.72 145 -aa-vec-soa 93.85 83.44 91.58 93.96 94.35 96.62 101.76 96.72 106.37 102.60 110.28 145 -list-push-aos 80.29 80.97 80.95 81.10 81.37 82.44 81.77 81.49 80.72 81.93 80.93 83 -list-push-soa 47.52 42.65 45.28 46.64 43.46 40.59 44.94 46.55 41.53 45.98 44.86 83 -list-pull-aos 85.30 82.97 86.43 83.42 86.33 83.70 86.43 83.77 83.10 85.89 84.44 83 -list-pull-soa 62.12 63.61 63.28 61.32 66.72 62.65 64.82 60.49 58.01 64.46 62.52 83 -list-pull-split-nt-1s-soa 121.35 113.77 115.29 113.54 117.00 116.46 114.78 114.54 110.83 112.67 117.85 125 -list-pull-split-nt-2s-soa 118.09 110.48 112.55 113.18 113.44 111.85 109.27 114.41 110.28 111.78 113.74 125 -list-aa-aos 121.28 118.63 119.00 118.50 121.99 119.11 118.83 121.47 121.62 126.18 120.12 129 -list-aa-soa 126.34 116.90 129.45 127.12 129.41 121.42 126.19 126.76 126.70 124.40 125.22 129 -list-aa-ria-soa 133.68 121.82 126.04 128.46 131.15 132.25 128.78 133.50 126.69 124.40 130.37 145 -list-aa-pv-soa 146.22 124.39 130.73 136.29 137.61 131.21 138.65 138.78 127.02 132.40 138.37 145 -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ===== - - -Broadwell, Intel Xeon E5-2630 v4 --------------------------------- + - copy-19 47.3 GB/s + - copy-19-nt-sl 47.1 GB/s + - update-19 44.0 GB/s + + +**Broadwell, Intel Xeon E5-2630 v4** - Broadwell architecture, AVX2, FMA - 10 cores, 2.2 GHz - SMT disabled +- memory bandwidth: + + - copy-19 48.0 GB/s + - copy-nt-sl-19 48.2 GB/s + - update-19 51.1 GB/s + +**Skylake, Intel Xeon Gold 6148** -memory bandwidth: - -- copy-19 48.0 GB/s -- copy-nt-sl-19 48.2 GB/s -- update-19 51.1 GB/s - -geometry dimensions: 500x100x100 - -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ======= -kernel pipe blocks-2 blocks-4 blocks-6 blocks-8 blocks-10 blocks-15 blocks-16 blocks-20 blocks-25 blocks-32 RFM -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ======= -blk-push-aos 55.75 47.62 54.57 57.10 58.49 59.00 61.72 60.56 64.05 61.10 66.03 105 -blk-push-soa 30.06 31.09 32.13 32.54 32.74 32.72 33.81 33.19 34.90 33.21 35.75 105 -blk-pull-aos 53.80 48.61 53.08 54.99 56.08 56.68 59.20 58.12 61.49 58.71 63.45 105 -blk-pull-soa 46.96 46.61 48.84 49.70 50.33 50.46 52.36 51.39 54.20 51.61 55.71 105 -aa-aos 91.40 66.99 78.47 83.38 86.62 88.62 92.98 91.54 97.08 94.93 98.90 168 -aa-soa 83.01 69.96 75.85 77.72 79.01 79.29 82.38 80.11 85.70 83.91 87.69 168 -aa-vec-soa 112.03 96.52 105.32 109.76 112.55 113.82 120.55 118.37 126.30 121.37 131.94 168 -list-push-aos 75.13 74.18 75.20 75.42 75.24 75.99 75.80 75.80 75.54 76.22 76.21 97 -list-push-soa 40.99 38.14 39.00 38.89 38.89 39.67 39.87 39.28 39.35 40.08 40.13 97 -list-pull-aos 82.07 82.88 83.29 83.09 83.32 83.49 82.82 82.88 83.32 82.60 82.93 97 -list-pull-soa 62.07 60.40 61.89 61.39 62.43 60.90 60.48 62.80 62.50 61.10 60.38 97 -list-pull-split-nt-1s-soa 125.81 120.60 121.96 122.34 122.86 123.53 123.64 123.67 125.94 124.09 123.69 128 -list-pull-split-nt-2s-soa 122.79 117.16 118.86 119.16 119.56 119.99 120.01 120.03 122.64 120.57 120.39 128 -list-aa-aos 128.13 127.41 129.31 129.07 129.79 129.63 129.67 129.94 129.12 128.41 129.72 150 -list-aa-soa 141.60 139.78 141.58 142.16 141.94 141.31 142.37 142.25 142.43 141.40 142.26 150 -list-aa-ria-soa 141.82 134.88 140.15 140.72 141.67 140.51 141.18 141.29 142.97 141.94 143.25 168 -list-aa-pv-soa 164.79 140.95 159.24 161.78 162.40 163.04 164.69 164.38 165.11 165.75 166.09 168 -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ======= - - -Skylake, Intel Xeon Gold 6148 ------------------------------ - -- Skylake architecture, AVX2, FMA, AVX512 +NOTE: currently we only use AVX2 intrinsics. + +- Skylake server architecture, AVX2, AVX512, 2 FMA units - 20 cores, 2.4 GHz - SMT enabled +- memory bandwidth: + + - copy-19 89.7 GB/s + - copy-19-nt-sl 92.4 GB/s + - update-19 93.6 GB/s + +**Zen, AMD EPYC 7451** + +- Zen architecture, AVX2, FMA +- 24 cores, 2.3 GHz +- SMT enabled +- memory bandwidth: + + - copy-19 111.9 GB/s + - copy-19-nt-sl 111.7 GB/s + - update-19 109.2 GB/s + +**Zen, AMD Ryzen 7 1700X** + +- Zen architecture, AVX2, FMA +- 8 cores, 3.4 GHz +- SMT enabled +- memory bandwidth: + + - copy-19 27.2 GB/s + - copy-19-nt-sl 27.1 GB/s + - update-19 26.1 GB/s + +Single Socket Results +--------------------- + +- Geometry dimensions are for all measurements 500x100x100 nodes. +- Note the **different scaling on the y axis** of the plots! + +.. |perf_emmy_dp| image:: images/benchmark-emmy-dp.png + :scale: 50 % +.. |perf_emmy_sp| image:: images/benchmark-emmy-sp.png + :scale: 50 % +.. |perf_hasep1_dp| image:: images/benchmark-hasep1-dp.png + :scale: 50 % +.. |perf_hasep1_sp| image:: images/benchmark-hasep1-sp.png + :scale: 50 % +.. |perf_meggie_dp| image:: images/benchmark-meggie-dp.png + :scale: 50 % +.. |perf_meggie_sp| image:: images/benchmark-meggie-sp.png + :scale: 50 % +.. |perf_skylakesp2_dp| image:: images/benchmark-skylakesp2-dp.png + :scale: 50 % +.. |perf_skylakesp2_sp| image:: images/benchmark-skylakesp2-sp.png + :scale: 50 % +.. |perf_summitridge1_dp| image:: images/benchmark-summitridge1-dp.png + :scale: 50 % +.. |perf_summitridge1_sp| image:: images/benchmark-summitridge1-sp.png + :scale: 50 % +.. |perf_naples1_dp| image:: images/benchmark-naples1-dp.png + :scale: 50 % +.. |perf_naples1_sp| image:: images/benchmark-naples1-sp.png + :scale: 50 % + +.. list-table:: + + * - Ivy Bridge, Intel Xeon E5-2660 v2, Double Precision + * - |perf_emmy_dp| + * - Ivy Bridge, Intel Xeon E5-2660 v2, Single Precision + * - |perf_emmy_sp| + * - Haswell, Intel Xeon E5-2695 v3, Double Precision + * - |perf_hasep1_dp| + * - Haswell, Intel Xeon E5-2695 v3, Single Precision + * - |perf_hasep1_sp| + * - Broadwell, Intel Xeon E5-2630 v4, Double Precision + * - |perf_meggie_dp| + * - Broadwell, Intel Xeon E5-2630 v4, Single Precision + * - |perf_meggie_sp| + * - Skylake, Intel Xeon Gold 6148, Double Precision, **NOTE: currently we only use AVX2 intrinsics.** + * - |perf_skylakesp2_dp| + * - Skylake, Intel Xeon Gold 6148, Single Precision, **NOTE: currently we only use AVX2 intrinsics.** + * - |perf_skylakesp2_sp| + * - Zen, AMD Ryzen 7 1700X, Double Precision + * - |perf_summitridge1_dp| + * - Zen, AMD Ryzen 7 1700X, Single Precision + * - |perf_summitridge1_sp| + * - Zen, AMD EPYC 7451, Double Precision + * - |perf_naples1_dp| + * - Zen, AMD EPYC 7451, Single Precision + * - |perf_naples1_sp| -memory bandwidth: - -- copy-19 89.7 GB/s -- copy-19-nt-sl 92.4 GB/s -- update-19 93.6 GB/s - -geometry dimensions: 500x100x100 - - -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= === -kernel pipe blocks-2 blocks-4 blocks-6 blocks-8 blocks-10 blocks-15 blocks-16 blocks-20 blocks-25 blocks-32 RFM -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= === -blk-push-aos 113.01 93.99 108.98 114.65 117.87 119.47 124.95 122.46 129.29 123.87 133.01 197 -blk-push-soa 100.21 98.87 103.63 105.56 107.02 107.27 111.61 109.83 116.16 110.51 110.29 197 -blk-pull-aos 118.45 102.54 114.12 117.82 122.69 124.31 130.58 127.85 135.72 129.65 139.94 197 -blk-pull-soa 82.60 83.36 87.13 88.39 88.84 88.96 92.48 90.93 95.79 91.92 98.64 197 -aa-aos 171.32 125.43 147.73 157.70 163.35 167.25 175.39 174.20 182.54 173.67 187.76 308 -aa-soa 180.85 152.39 165.84 152.59 171.90 175.76 184.94 182.34 189.43 180.30 193.54 308 -aa-vec-soa 208.03 181.51 195.86 203.41 209.08 212.34 224.05 219.49 234.31 225.92 245.22 308 -list-push-aos 158.81 164.67 162.93 163.05 165.22 164.31 164.66 160.78 164.07 165.19 164.06 177 -list-push-soa 134.60 110.44 110.17 132.01 132.95 133.46 134.37 134.33 135.12 134.91 137.87 177 -list-pull-aos 169.61 170.03 170.89 170.90 171.20 171.60 172.09 171.95 169.48 172.08 171.02 177 -list-pull-soa 120.50 116.73 118.62 118.00 120.99 118.15 117.17 121.41 120.83 120.00 118.74 177 -list-pull-split-nt-1s-soa 225.59 224.18 225.10 226.34 226.01 230.37 227.50 228.42 227.39 231.65 227.35 246 -list-pull-split-nt-2s-soa 219.20 214.63 217.61 218.13 219.07 221.01 219.88 220.09 220.62 221.68 220.58 246 -list-aa-aos 241.39 239.27 239.53 242.56 242.46 243.00 242.91 242.46 241.24 242.96 241.52 275 -list-aa-soa 273.73 268.49 268.48 271.79 275.29 274.56 277.18 272.67 274.21 275.24 278.21 275 -list-aa-ria-soa 288.42 261.89 273.26 284.84 283.88 288.29 290.72 289.81 293.36 290.75 292.93 308 -list-aa-pv-soa 303.35 267.21 289.18 294.96 294.36 298.16 300.45 301.71 302.37 302.88 304.46 308 -========================= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= === Licence ======= diff --git a/src/Base.h b/src/Base.h index ae61082..a848cf8 100644 --- a/src/Base.h +++ b/src/Base.h @@ -27,6 +27,8 @@ #ifndef __BASE_H__ #define __BASE_H__ +#include "Config.h" + #include #include #include diff --git a/src/BenchKernelD3Q19.c b/src/BenchKernelD3Q19.c index bd6d43c..4852948 100644 --- a/src/BenchKernelD3Q19.c +++ b/src/BenchKernelD3Q19.c @@ -43,8 +43,8 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; @@ -61,20 +61,24 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd PdfT omega = cd->Omega; PdfT omegaEven = omega; -// PdfT omegaOdd = 8.0*((2.0-omegaEven)/(8.0-omegaEven)); //"standard" trt odd relaxation parameter - PdfT magicParam = 1.0/12.0; // 1/4: best stability; 1/12: removes third-order advection error (best advection); 1/6: removes fourth-order diffusion error (best diffusion); 3/16: exact location of bounce back for poiseuille flow - PdfT omegaOdd = 1.0/( 0.5 + magicParam/(1.0/omega - 0.5) ); + // PdfT omegaOdd = 8.0*((F(2.0)-omegaEven)/(8.0-omegaEven)); //"standard" trt odd relaxation parameter + PdfT magicParam = F(1.0) / F(12.0); + // 1/ 4: best stability; + // 1/12: removes third-order advection error (best advection); + // 1/ 6: removes fourth-order diffusion error (best diffusion); + // 3/16: exact location of bounce back for poiseuille flow + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F( 3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); - PdfT w_1_x3 = w_1 * 3.0; PdfT w_1_nine_half = w_1 * 9.0/2.0; PdfT w_1_indep = 0.0; - PdfT w_2_x3 = w_2 * 3.0; PdfT w_2_nine_half = w_2 * 9.0/2.0; PdfT w_2_indep = 0.0; + PdfT w_1_x3 = w_1 * F(3.0); PdfT w_1_nine_half = w_1 * F(9.0)/F(2.0); PdfT w_1_indep = F(0.0); + PdfT w_2_x3 = w_2 * F(3.0); PdfT w_2_nine_half = w_2 * F(9.0)/F(2.0); PdfT w_2_indep = F(0.0); PdfT ux, uy, uz, ui; PdfT dens; @@ -102,7 +106,7 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd X_LIKWID_START("os"); #ifdef _OPENMP - #pragma omp parallel for collapse(3) default(none) \ + #pragma omp parallel for collapse(2) default(none) \ shared(gDims,src, dst, w_0, w_1, w_2, omegaEven, omegaOdd, \ w_1_x3, w_2_x3, w_1_nine_half, w_2_nine_half, cd, \ oX, oY, oZ, nX, nY, nZ) \ @@ -114,9 +118,13 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd pdf_B, pdf_BN, pdf_BE, pdf_BS, pdf_BW, \ evenPart, oddPart, w_1_indep, w_2_indep) #endif - for (int x = oX; x < nX + oX; ++x) { for (int y = oY; y < nY + oY; ++y) { + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd + #endif for (int z = oZ; z < nZ + oZ; ++z) { #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) @@ -145,9 +153,9 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd #ifdef LID_DRIVEN_CAVITY if (z == nZ - 4 + oZ && x > 3 + oX && x < (nX - 4 + oX) && y > 3 + oY && y < (nY - 4 + oY)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1 * 0.577); + uy = F(0.0); + uz = F(0.0); } else { #endif @@ -168,7 +176,7 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); #ifdef PROP_MODEL_PUSH @@ -179,20 +187,20 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[I(x, y + 1, z, D3Q19_N)] = pdf_N - evenPart - oddPart; dst[I(x, y - 1, z, D3Q19_S)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[I(x + 1, y, z, D3Q19_E)] = pdf_E - evenPart - oddPart; dst[I(x - 1, y, z, D3Q19_W)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[I(x, y, z + 1, D3Q19_T)] = pdf_T - evenPart - oddPart; dst[I(x, y, z - 1, D3Q19_B)] = pdf_B - evenPart + oddPart; @@ -200,38 +208,38 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[I(x - 1, y + 1, z, D3Q19_NW)] = pdf_NW - evenPart - oddPart; dst[I(x + 1, y - 1, z, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[I(x + 1, y + 1, z, D3Q19_NE)] = pdf_NE - evenPart - oddPart; dst[I(x - 1, y - 1, z, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[I(x - 1, y, z + 1, D3Q19_TW)] = pdf_TW - evenPart - oddPart; dst[I(x + 1, y, z - 1, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[I(x + 1, y, z + 1, D3Q19_TE)] = pdf_TE - evenPart - oddPart; dst[I(x - 1, y, z - 1, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[I(x, y - 1, z + 1, D3Q19_TS)] = pdf_TS - evenPart - oddPart; dst[I(x, y + 1, z - 1, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[I(x, y + 1, z + 1, D3Q19_TN)] = pdf_TN - evenPart - oddPart; dst[I(x, y - 1, z - 1, D3Q19_BS)] = pdf_BS - evenPart + oddPart; @@ -244,20 +252,20 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_N)] = pdf_N - evenPart - oddPart; dst[I(x, y, z, D3Q19_S)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_E)] = pdf_E - evenPart - oddPart; dst[I(x, y, z, D3Q19_W)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_T)] = pdf_T - evenPart - oddPart; dst[I(x, y, z, D3Q19_B)] = pdf_B - evenPart + oddPart; @@ -265,38 +273,38 @@ void FNAME(D3Q19Kernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * cd w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_NW)] = pdf_NW - evenPart - oddPart; dst[I(x, y, z, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_NE)] = pdf_NE - evenPart - oddPart; dst[I(x, y, z, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TW)] = pdf_TW - evenPart - oddPart; dst[I(x, y, z, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TE)] = pdf_TE - evenPart - oddPart; dst[I(x, y, z, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TS)] = pdf_TS - evenPart - oddPart; dst[I(x, y, z, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TN)] = pdf_TN - evenPart - oddPart; dst[I(x, y, z, D3Q19_BS)] = pdf_BS - evenPart + oddPart; @@ -366,8 +374,8 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; @@ -391,20 +399,24 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * PdfT omega = cd->Omega; PdfT omegaEven = omega; -// PdfT omegaOdd = 8.0*((2.0-omegaEven)/(8.0-omegaEven)); //"standard" trt odd relaxation parameter - PdfT magicParam = 1.0/12.0; // 1/4: best stability; 1/12: removes third-order advection error (best advection); 1/6: removes fourth-order diffusion error (best diffusion); 3/16: exact location of bounce back for poiseuille flow - PdfT omegaOdd = 1.0/( 0.5 + magicParam/(1.0/omega - 0.5) ); + // PdfT omegaOdd = 8.0*((F(2.0)-omegaEven)/(8.0-omegaEven)); //"standard" trt odd relaxation parameter + PdfT magicParam = F(1.0)/F(12.0); + // 1/ 4: best stability; + // 1/12: removes third-order advection error (best advection); + // 1/ 6: removes fourth-order diffusion error (best diffusion); + // 3/16: exact location of bounce back for poiseuille flow + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F( 3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); - PdfT w_1_x3 = w_1 * 3.0; PdfT w_1_nine_half = w_1 * 9.0/2.0; PdfT w_1_indep = 0.0; - PdfT w_2_x3 = w_2 * 3.0; PdfT w_2_nine_half = w_2 * 9.0/2.0; PdfT w_2_indep = 0.0; + PdfT w_1_x3 = w_1 * F(3.0); PdfT w_1_nine_half = w_1 * F(9.0)/F(2.0); PdfT w_1_indep = F(0.0); + PdfT w_2_x3 = w_2 * F(3.0); PdfT w_2_nine_half = w_2 * F(9.0)/F(2.0); PdfT w_2_indep = F(0.0); PdfT ux, uy, uz, ui; PdfT dens; @@ -478,6 +490,11 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * for (int x = bX; x < eX; ++x) { for (int y = bY; y < eY; ++y) { + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd + #endif for (int z = bZ; z < eZ; ++z) { #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) @@ -505,7 +522,7 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * #ifdef LID_DRIVEN_CAVITY if (z == nZ - 4 + oZ && x > 3 + oX && x < (nX - 4 + oX) && y > 3 + oY && y < (nY - 4 + oY)) { - ux = 0.1 * 0.577; + ux = 0.1 * F(0.5)77; uy = 0.0; uz = 0.0; @@ -528,7 +545,7 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); #ifdef PROP_MODEL_PUSH @@ -539,20 +556,20 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[I(x, y + 1, z, D3Q19_N)] = pdf_N - evenPart - oddPart; dst[I(x, y - 1, z, D3Q19_S)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[I(x + 1, y, z, D3Q19_E)] = pdf_E - evenPart - oddPart; dst[I(x - 1, y, z, D3Q19_W)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[I(x, y, z + 1, D3Q19_T)] = pdf_T - evenPart - oddPart; dst[I(x, y, z - 1, D3Q19_B)] = pdf_B - evenPart + oddPart; @@ -560,38 +577,38 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[I(x - 1, y + 1, z, D3Q19_NW)] = pdf_NW - evenPart - oddPart; dst[I(x + 1, y - 1, z, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[I(x + 1, y + 1, z, D3Q19_NE)] = pdf_NE - evenPart - oddPart; dst[I(x - 1, y - 1, z, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[I(x - 1, y, z + 1, D3Q19_TW)] = pdf_TW - evenPart - oddPart; dst[I(x + 1, y, z - 1, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[I(x + 1, y, z + 1, D3Q19_TE)] = pdf_TE - evenPart - oddPart; dst[I(x - 1, y, z - 1, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[I(x, y - 1, z + 1, D3Q19_TS)] = pdf_TS - evenPart - oddPart; dst[I(x, y + 1, z - 1, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[I(x, y + 1, z + 1, D3Q19_TN)] = pdf_TN - evenPart - oddPart; dst[I(x, y - 1, z - 1, D3Q19_BS)] = pdf_BS - evenPart + oddPart; @@ -604,20 +621,20 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_N)] = pdf_N - evenPart - oddPart; dst[I(x, y, z, D3Q19_S)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_E)] = pdf_E - evenPart - oddPart; dst[I(x, y, z, D3Q19_W)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[I(x, y, z, D3Q19_T)] = pdf_T - evenPart - oddPart; dst[I(x, y, z, D3Q19_B)] = pdf_B - evenPart + oddPart; @@ -625,38 +642,38 @@ void FNAME(D3Q19BlkKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_NW)] = pdf_NW - evenPart - oddPart; dst[I(x, y, z, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_NE)] = pdf_NE - evenPart - oddPart; dst[I(x, y, z, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TW)] = pdf_TW - evenPart - oddPart; dst[I(x, y, z, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TE)] = pdf_TE - evenPart - oddPart; dst[I(x, y, z, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TS)] = pdf_TS - evenPart - oddPart; dst[I(x, y, z, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[I(x, y, z, D3Q19_TN)] = pdf_TN - evenPart - oddPart; dst[I(x, y, z, D3Q19_BS)] = pdf_BS - evenPart + oddPart; diff --git a/src/BenchKernelD3Q19Aa.c b/src/BenchKernelD3Q19Aa.c index 87a9e33..a6f73fc 100644 --- a/src/BenchKernelD3Q19Aa.c +++ b/src/BenchKernelD3Q19Aa.c @@ -43,8 +43,8 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; @@ -68,24 +68,24 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * PdfT omega = cd->Omega; PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; + PdfT magicParam = F(1.0) / F(12.0); // 1/4: best stability; // 1/12: removes third-order advection error (best advection); // 1/6: removes fourth-order diffusion error (best diffusion); // 3/16: exact location of bounce back for poiseuille flow - PdfT omegaOdd = 1.0/( 0.5 + magicParam/(1.0/omega - 0.5) ); + PdfT omegaOdd = F(1.0)/( F(0.5) + magicParam/(F(1.0)/omega - F(0.5)) ); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F(3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); - PdfT w_1_x3 = w_1 * 3.0; PdfT w_1_nine_half = w_1 * 9.0/2.0; PdfT w_1_indep = 0.0; - PdfT w_2_x3 = w_2 * 3.0; PdfT w_2_nine_half = w_2 * 9.0/2.0; PdfT w_2_indep = 0.0; + PdfT w_1_x3 = w_1 * F(3.0); PdfT w_1_nine_half = w_1 * F(9.0)/F(2.0); PdfT w_1_indep = F(0.0); + PdfT w_2_x3 = w_2 * F(3.0); PdfT w_2_nine_half = w_2 * F(9.0)/F(2.0); PdfT w_2_indep = F(0.0); PdfT ux, uy, uz, ui; PdfT dens; @@ -169,6 +169,11 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * for (int x = bX; x < eX; ++x) { for (int y = bY; y < eY; ++y) { + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd + #endif for (int z = bZ; z < eZ; ++z) { @@ -189,9 +194,9 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * #ifdef LID_DRIVEN_CAVITY if (z == nZ - 4 + oZ && x > 3 + oX && x < (nX - 4 + oX) && y > 3 + oY && y < (nY - 4 + oY)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1) * F(0.5)77; + uy = F(0.0); + uz = F(0.0); } else { #endif @@ -211,7 +216,7 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); // direction: w_0 src[I(x, y, z, D3Q19_C)] = pdf_C - omegaEven*(pdf_C - w_0*dir_indep_trm); @@ -220,20 +225,20 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[I(x, y, z, D3Q19_S)] = pdf_N - evenPart - oddPart; src[I(x, y, z, D3Q19_N)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[I(x, y, z, D3Q19_W)] = pdf_E - evenPart - oddPart; src[I(x, y, z, D3Q19_E)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[I(x, y, z, D3Q19_B)] = pdf_T - evenPart - oddPart; src[I(x, y, z, D3Q19_T)] = pdf_B - evenPart + oddPart; @@ -241,38 +246,38 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_SE)] = pdf_NW - evenPart - oddPart; src[I(x, y, z, D3Q19_NW)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_SW)] = pdf_NE - evenPart - oddPart; src[I(x, y, z, D3Q19_NE)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_BE)] = pdf_TW - evenPart - oddPart; src[I(x, y, z, D3Q19_TW)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_BW)] = pdf_TE - evenPart - oddPart; src[I(x, y, z, D3Q19_TE)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_BN)] = pdf_TS - evenPart - oddPart; src[I(x, y, z, D3Q19_TS)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[I(x, y, z, D3Q19_BS)] = pdf_TN - evenPart - oddPart; src[I(x, y, z, D3Q19_TN)] = pdf_BS - evenPart + oddPart; @@ -296,6 +301,9 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * #pragma omp parallel for default(none) \ shared(kd, src) #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif for (int i = 0; i < kd->nBounceBackPdfs; ++i) { src[kd->BounceBackPdfsSrc[i]] = src[kd->BounceBackPdfsDst[i]]; } @@ -369,6 +377,11 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * for (int x = bX; x < eX; ++x) { for (int y = bY; y < eY; ++y) { + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd + #endif for (int z = bZ; z < eZ; ++z) { #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) @@ -384,9 +397,9 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * #ifdef LID_DRIVEN_CAVITY if (z == nZ - 4 + oZ && x > 3 + oX && x < (nX - 4 + oX) && y > 3 + oY && y < (nY - 4 + oY)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1) * F(0.5)77; + uy = F(0.0); + uz = F(0.0); } else { #endif @@ -406,7 +419,7 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); // direction: w_0 src[I(x, y, z, D3Q19_C)] = pdf_C - omegaEven*(pdf_C - w_0*dir_indep_trm); @@ -415,20 +428,20 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[I(x, y + 1, z, D3Q19_N)] = pdf_N - evenPart - oddPart; src[I(x, y - 1, z, D3Q19_S)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[I(x + 1, y, z, D3Q19_E)] = pdf_E - evenPart - oddPart; src[I(x - 1, y, z, D3Q19_W)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[I(x, y, z + 1, D3Q19_T)] = pdf_T - evenPart - oddPart; src[I(x, y, z - 1, D3Q19_B)] = pdf_B - evenPart + oddPart; @@ -436,38 +449,38 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[I(x - 1, y + 1, z, D3Q19_NW)] = pdf_NW - evenPart - oddPart; src[I(x + 1, y - 1, z, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[I(x + 1, y + 1, z, D3Q19_NE)] = pdf_NE - evenPart - oddPart; src[I(x - 1, y - 1, z, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[I(x - 1, y, z + 1, D3Q19_TW)] = pdf_TW - evenPart - oddPart; src[I(x + 1, y, z - 1, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[I(x + 1, y, z + 1, D3Q19_TE)] = pdf_TE - evenPart - oddPart; src[I(x - 1, y, z - 1, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[I(x, y - 1, z + 1, D3Q19_TS)] = pdf_TS - evenPart - oddPart; src[I(x, y + 1, z - 1, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[I(x, y + 1, z + 1, D3Q19_TN)] = pdf_TN - evenPart - oddPart; src[I(x, y - 1, z - 1, D3Q19_BS)] = pdf_BS - evenPart + oddPart; @@ -488,6 +501,9 @@ void FNAME(D3Q19AaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData * #pragma omp parallel for default(none) \ shared(kd, src) #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif for (int i = 0; i < kd->nBounceBackPdfs; ++i) { src[kd->BounceBackPdfsDst[i]] = src[kd->BounceBackPdfsSrc[i]]; } diff --git a/src/BenchKernelD3Q19AaVec.c b/src/BenchKernelD3Q19AaVec.c index 2642c1c..f79e6cd 100644 --- a/src/BenchKernelD3Q19AaVec.c +++ b/src/BenchKernelD3Q19AaVec.c @@ -81,7 +81,7 @@ void DumpPdfs(LatticeDesc * ld, KernelData * kd, int zStart, int zStop, int iter // kd->GetNode(kd, x, y, z, pdfs); } else { - pdfs[dir] = -1.0; + pdfs[dir] = -F(1.0); } printf("%.16e ", pdfs[dir]); @@ -100,8 +100,8 @@ void FNAME(D3Q19AaVecKernel)(LatticeDesc * ld, KernelData * kd, CaseData * cd) Assert(kd != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelDataAa * kda = KDA(kd); @@ -233,8 +233,8 @@ static void KernelEven(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ Assert(kd != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelDataAa * kda = KDA(kd); @@ -256,19 +256,19 @@ static void KernelEven(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ PdfT omega = cd->Omega; PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F(3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); - VPDFT VONE_HALF = VSET(0.5); - VPDFT VTHREE_HALF = VSET(3.0 / 2.0); + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); VPDFT vw_1_indep, vw_2_indep; VPDFT vw_0 = VSET(w_0); @@ -427,8 +427,8 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ Assert(kd != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelDataAa * kda = KDA(kd); @@ -450,18 +450,18 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ PdfT omega = cd->Omega; PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F(3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); - VPDFT VONE_HALF = VSET(0.5); - VPDFT VTHREE_HALF = VSET(3.0 / 2.0); + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); VPDFT vw_1_indep, vw_2_indep; VPDFT vw_0 = VSET(w_0); diff --git a/src/BenchKernelD3Q19AaVecCommon.c b/src/BenchKernelD3Q19AaVecCommon.c index 57a9fae..483cbe7 100644 --- a/src/BenchKernelD3Q19AaVecCommon.c +++ b/src/BenchKernelD3Q19AaVecCommon.c @@ -332,7 +332,7 @@ void FNAME(D3Q19AaVecInit)(LatticeDesc * ld, KernelData ** kernelData, Parameter gDims[0] = lDims[0] + 2; gDims[1] = lDims[1] + 2; // TODO: fix this for aa-vec2-soa - gDims[2] = lDims[2] + 4; // one ghost cell in front, one in the back, plus at most two at the back for VSIZE = 4 + gDims[2] = lDims[2] + 2 + VSIZE - 2; // one ghost cell in front, one in the back, plus at most two at the back for VSIZE = 4 kd->Offsets[0] = 1; kd->Offsets[1] = 1; diff --git a/src/BenchKernelD3Q19AaVecSl.c b/src/BenchKernelD3Q19AaVecSl.c new file mode 100644 index 0000000..885a065 --- /dev/null +++ b/src/BenchKernelD3Q19AaVecSl.c @@ -0,0 +1,682 @@ +// -------------------------------------------------------------------------- +// +// Copyright +// Markus Wittmann, 2016-2017 +// RRZE, University of Erlangen-Nuremberg, Germany +// markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +// +// Viktor Haag, 2016 +// LSS, University of Erlangen-Nuremberg, Germany +// +// This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +// +// LbmBenchKernels is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LbmBenchKernels is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LbmBenchKernels. If not, see . +// +// -------------------------------------------------------------------------- +#include "BenchKernelD3Q19AaVecCommon.h" + +#include "Memory.h" +#include "Vtk.h" +#include "LikwidIf.h" +#include "Vector.h" +#include "Vector.h" + +#include +#include + +#ifdef _OPENMP + #include +#endif + +static void KernelEven(LatticeDesc * ld, KernelData * kd, CaseData * cd); +static void KernelOddVecSl(LatticeDesc * ld, KernelData * kd, CaseData * cd); + +#if 1 // {{{ +void DumpPdfs(LatticeDesc * ld, KernelData * kd, int zStart, int zStop, int iter, const char * prefix, int dir) +{ + int * gDims = kd->GlobalDims; + + int nX = gDims[0]; + int nY = gDims[1]; + // int nZ = gDims[2]; + + PdfT pdfs[N_D3Q19]; + + int localZStart = zStart; + int localZStop = zStop; + + if (localZStart == -1) localZStart = 0; + if (localZStop == -1) localZStop = gDims[2] - 1; + + printf("D iter: %d dir: %d %s\n", iter, dir, D3Q19_NAMES[dir]); + +// for (int dir = 0; dir < 19; ++dir) { + for (int z = localZStop; z >= localZStart; --z) { + printf("D [%2d][%2d][%s] plane % 2d\n", iter, dir, prefix, z); + + for(int y = 0; y < nY; ++y) { + // for(int y = 2; y < nY - 2; ++y) { + printf("D [%2d][%2d][%s] %2d ", iter, dir, prefix, y); + + for(int x = 0; x < nX; ++x) { + + if (1) { // ld->Lattice[L_INDEX_4(ld->Dims, x, y, z)] != LAT_CELL_OBSTACLE) { + + #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) + pdfs[dir] = kd->PdfsActive[I(x, y, z, dir)]; + #undef I + } + else { + pdfs[dir] = -1.0; + } + + printf("%.16e ", pdfs[dir]); + // printf("%08.0f ", pdfs[dir]); + } + + printf("\n"); + } + } +// } +} +#endif // }}} + +void FNAME(D3Q19AaVecSlKernel)(LatticeDesc * ld, KernelData * kd, CaseData * cd) +{ + Assert(ld != NULL); + Assert(kd != NULL); + Assert(cd != NULL); + + Assert(cd->Omega > 0.0); + Assert(cd->Omega < 2.0); + + KernelDataAa * kda = KDA(kd); + + PdfT * src = kd->PdfsActive; + + int maxIterations = cd->MaxIterations; + + #ifdef VTK_OUTPUT + if (cd->VtkOutput) { + kd->PdfsActive = src; + VtkWrite(ld, kd, cd, -1); + } + #endif + + #ifdef STATISTICS + kd->PdfsActive = src; + KernelStatistics(kd, ld, cd, 0); + #endif + + Assert((maxIterations % 2) == 0); + + #ifdef _OPENMP + #pragma omp parallel default(none) shared(kda, kd, ld, cd, src, maxIterations) + #endif + { + for (int iter = 0; iter < maxIterations; iter += 2) { + + // -------------------------------------------------------------------- + // even time step + // -------------------------------------------------------------------- + + X_LIKWID_START("aa-vec-even"); + + KernelEven(ld, kd, cd); + #ifdef _OPENMP + #pragma omp barrier + #endif + + X_LIKWID_STOP("aa-vec-even"); + + // Fixup bounce back PDFs. + #ifdef _OPENMP + #pragma omp for + #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif + for (int i = 0; i < kd->nBounceBackPdfs; ++i) { + src[kd->BounceBackPdfsSrc[i]] = src[kd->BounceBackPdfsDst[i]]; + } + + #ifdef _OPENMP + #pragma omp single + #endif + { + // save current iteration + kda->Iteration = iter; + + #ifdef VERIFICATION + kd->PdfsActive = src; + KernelAddBodyForce(kd, ld, cd); + #endif + + #ifdef VTK_OUTPUT + if (cd->VtkOutput && (iter % cd->VtkModulus) == 0) { + kd->PdfsActive = src; + VtkWrite(ld, kd, cd, iter); + } + #endif + + #ifdef STATISTICS + kd->PdfsActive = src; + KernelStatistics(kd, ld, cd, iter); + #endif + } + #ifdef _OPENMP + #pragma omp barrier + #endif + + + // -------------------------------------------------------------------- + // odd time step + // -------------------------------------------------------------------- + + X_LIKWID_START("aa-vec-odd"); + + + KernelOddVecSl(ld, kd, cd); + #ifdef _OPENMP + #pragma omp barrier + #endif + + // Stop counters before bounce back. Else computing loop balance will + // be incorrect. + + X_LIKWID_STOP("aa-vec-odd"); + + // Fixup bounce back PDFs. + #ifdef _OPENMP + #pragma omp for + #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif + for (int i = 0; i < kd->nBounceBackPdfs; ++i) { + src[kd->BounceBackPdfsDst[i]] = src[kd->BounceBackPdfsSrc[i]]; + } + + #ifdef _OPENMP + #pragma omp single + #endif + { + // save current iteration + kda->Iteration = iter + 1; + + #ifdef VERIFICATION + kd->PdfsActive = src; + KernelAddBodyForce(kd, ld, cd); + #endif + + #ifdef VTK_OUTPUT + if (cd->VtkOutput && ((iter + 1) % cd->VtkModulus) == 0) { + kd->PdfsActive = src; + VtkWrite(ld, kd, cd, iter + 1); + } + #endif + + #ifdef STATISTICS + kd->PdfsActive = src; + KernelStatistics(kd, ld, cd, iter + 1); + #endif + } + #ifdef _OPENMP + #pragma omp barrier + #endif + } // for (int iter = 0; ... + } // omp parallel + + #ifdef VTK_OUTPUT + + if (cd->VtkOutput) { + kd->PdfsActive = src; + VtkWrite(ld, kd, cd, maxIterations); + } + + #endif + + return; +} + +static void KernelEven(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ +{ + Assert(ld != NULL); + Assert(kd != NULL); + Assert(cd != NULL); + + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); + + KernelDataAa * kda = KDA(kd); + + int nX = ld->Dims[0]; + int nY = ld->Dims[1]; + int nZ = ld->Dims[2]; + + int * gDims = kd->GlobalDims; + + int oX = kd->Offsets[0]; + int oY = kd->Offsets[1]; + int oZ = kd->Offsets[2]; + + int blk[3]; + blk[0] = kda->Blk[0]; + blk[1] = kda->Blk[1]; + blk[2] = kda->Blk[2]; + + PdfT omega = cd->Omega; + PdfT omegaEven = omega; + + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); + + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); + + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); + + + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); + + VPDFT vw_1_indep, vw_2_indep; + VPDFT vw_0 = VSET(w_0); + VPDFT vw_1 = VSET(w_1); + VPDFT vw_2 = VSET(w_2); + + VPDFT vw_1_x3 = VSET(w_1_x3); + VPDFT vw_2_x3 = VSET(w_2_x3); + VPDFT vw_1_nine_half = VSET(w_1_nine_half); + VPDFT vw_2_nine_half = VSET(w_2_nine_half); + + VPDFT vui, vux, vuy, vuz, vdens; + + VPDFT vevenPart, voddPart, vdir_indep_trm; + + VPDFT vomegaEven = VSET(omegaEven); + VPDFT vomegaOdd = VSET(omegaOdd); + + VPDFT vpdf_a, vpdf_b; + + // Declare pdf_N, pdf_E, pdf_S, pdf_W, ... + #define X(name, idx, idxinv, x, y, z) VPDFT JOIN(vpdf_,name); PdfT * JOIN(ppdf_,name); + D3Q19_LIST + #undef X + + PdfT * src = kd->Pdfs[0]; + + int nThreads = 1; + int threadId = 0; + + #ifdef _OPENMP + nThreads = omp_get_max_threads(); + threadId = omp_get_thread_num(); + #endif + + const int nodesPlane = gDims[1] * gDims[2]; + const int nodesCol = gDims[2]; + + #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) + +// TODO: make inline function out of macros. + + #define IMPLODE(_x, _y, _z) (nodesPlane * (_x) + nodesCol * (_y) + (_z)) + #define EXPLODE(index, _x, _y, _z) _x = index / (nodesPlane); _y = (index - nodesPlane * (_x)) / nodesCol; _z = index - nodesPlane * (_x) - nodesCol * (_y); + + int startX = oX; + int startY = oY; + int startZ = oZ; + + int indexStart = IMPLODE(startX, startY, startZ); + int indexEnd = IMPLODE(startX + nX - 1, startY + nY - 1, startZ + nZ - 1); + + // How many cells as multiples of VSIZE do we have (rounded up)? + int nVCells = (indexEnd - indexStart + 1 + VSIZE - 1) / VSIZE; + + int threadStart = nVCells / nThreads * threadId; + int threadEnd = nVCells / nThreads * (threadId + 1); + + if (nVCells % nThreads > threadId) { + threadStart += threadId; + threadEnd += threadId + 1; + } + else { + threadStart += nVCells % nThreads; + threadEnd += nVCells % nThreads; + } + + threadStart *= VSIZE; + threadEnd *= VSIZE; + + // As threadStart/End is now in the granularity of cells we add the start offset. + threadStart += indexStart; + threadEnd += indexStart; + + EXPLODE(threadStart, startX, startY, startZ); + + #undef EXPLODE + #undef IMPLODE + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_,name) = &src[I(startX, startY, startZ, idx)]; + D3Q19_LIST + #undef X + + // printf("e thread %d idx start: %d end: %d thread start: %d end: %d\n", + // threadId, indexStart, indexEnd, threadStart, threadEnd); + + + for (int i = threadStart; i < threadEnd; i += VSIZE) { + + // Load PDFs of local cell: pdf_N = src[I(x, y, z, D3Q19_N)]; ... + // #define X(name, idx, idxinv, _x, _y, _z) JOIN(vpdf_,name) = VLDU(&src[I(x, y, z, idx)]); + #define X(name, idx, idxinv, _x, _y, _z) JOIN(vpdf_,name) = VLDU(JOIN(ppdf_,name)); + D3Q19_LIST + #undef X + + + vux = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_E,VADD(vpdf_NE,vpdf_SE)),VADD(vpdf_TE,vpdf_BE)),vpdf_W),vpdf_NW),vpdf_SW),vpdf_TW),vpdf_BW); + vuy = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_N,VADD(vpdf_NE,vpdf_NW)),VADD(vpdf_TN,vpdf_BN)),vpdf_S),vpdf_SE),vpdf_SW),vpdf_TS),vpdf_BS); + vuz = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_T,VADD(vpdf_TE,vpdf_TW)),VADD(vpdf_TN,vpdf_TS)),vpdf_B),vpdf_BE),vpdf_BW),vpdf_BN),vpdf_BS); + + vdens = VADD(VADD(VADD(VADD(VADD(VADD(VADD(VADD(VADD(vpdf_C,VADD(vpdf_N,vpdf_E)),VADD(vpdf_S,vpdf_W)),VADD(vpdf_NE,vpdf_SE)), + VADD(vpdf_SW,vpdf_NW)),VADD(vpdf_T,vpdf_TN)),VADD(vpdf_TE,vpdf_TS)),VADD(vpdf_TW,vpdf_B)), + VADD(vpdf_BN,vpdf_BE)),VADD(vpdf_BS,vpdf_BW)); + + vdir_indep_trm = VSUB(vdens,VMUL(VADD(VADD(VMUL(vux,vux),VMUL(vuy,vuy)),VMUL(vuz,vuz)),VTHREE_HALF)); + + VSTU(ppdf_C, VSUB(vpdf_C,VMUL(vomegaEven,VSUB(vpdf_C,VMUL(vw_0,vdir_indep_trm))))); + + vw_1_indep = VMUL(vw_1,vdir_indep_trm); + vw_2_indep = VMUL(vw_2,vdir_indep_trm); + +#if defined(LOOP_1) || defined(LOOP_2) + #error Loop macros are not allowed to be defined here. +#endif + + #define LOOP_1(_dir1, _dir2, _vel) \ + vui = _vel; \ + vpdf_a = JOIN(vpdf_,_dir1); \ + vpdf_b = JOIN(vpdf_,_dir2); \ + \ + vevenPart = VMUL(vomegaEven, VSUB(VSUB(VMUL(VONE_HALF, VADD(vpdf_a, vpdf_b)), VMUL(vui, VMUL(vui, vw_1_nine_half))), vw_1_indep)); \ + voddPart = VMUL(vomegaOdd, VSUB( VMUL(VONE_HALF, VSUB(vpdf_a, vpdf_b)), VMUL(vui, vw_1_x3))); \ + \ + VSTU(JOIN(ppdf_,_dir2), VSUB(VSUB(vpdf_a, vevenPart), voddPart)); \ + VSTU(JOIN(ppdf_,_dir1), VADD(VSUB(vpdf_b, vevenPart), voddPart)); + + #define LOOP_2(_dir1, _dir2, _expr) \ + vui = _expr; \ + vpdf_a = JOIN(vpdf_,_dir1); \ + vpdf_b = JOIN(vpdf_,_dir2); \ + \ + vevenPart = VMUL(vomegaEven, VSUB(VSUB(VMUL(VONE_HALF, VADD(vpdf_a, vpdf_b)), VMUL(vui, VMUL(vui, vw_2_nine_half))), vw_2_indep)); \ + voddPart = VMUL(vomegaOdd, VSUB( VMUL(VONE_HALF, VSUB(vpdf_a, vpdf_b)), VMUL(vui, vw_2_x3))); \ + \ + VSTU(JOIN(ppdf_,_dir2), VSUB(VSUB(vpdf_a, vevenPart), voddPart)); \ + VSTU(JOIN(ppdf_,_dir1), VADD(VSUB(vpdf_b, vevenPart), voddPart)); + + LOOP_1(N, S, vuy); + LOOP_1(E, W, vux); + LOOP_1(T, B, vuz); + + LOOP_2(NW, SE, VSUB(vuy, vux)); + LOOP_2(NE, SW, VADD(vuy, vux)); + LOOP_2(TW, BE, VSUB(vuz, vux)); + LOOP_2(TE, BW, VADD(vuz, vux)); + LOOP_2(TS, BN, VSUB(vuz, vuy)); + LOOP_2(TN, BS, VADD(vuz, vuy)); + + #undef LOOP_1 + #undef LOOP_2 + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_,name) += VSIZE; + D3Q19_LIST + #undef X + } + + #undef I + + return; +} // }}} + + +static void KernelOddVecSl(LatticeDesc * ld, KernelData * kd, CaseData * cd) // {{{ +{ + Assert(ld != NULL); + Assert(kd != NULL); + Assert(cd != NULL); + + Assert(cd->Omega > 0.0); + Assert(cd->Omega < F(2.0)); + + KernelDataAa * kda = KDA(kd); + + int nX = ld->Dims[0]; + int nY = ld->Dims[1]; + int nZ = ld->Dims[2]; + + int * gDims = kd->GlobalDims; + + int oX = kd->Offsets[0]; + int oY = kd->Offsets[1]; + int oZ = kd->Offsets[2]; + + int blk[3]; + blk[0] = kda->Blk[0]; + blk[1] = kda->Blk[1]; + blk[2] = kda->Blk[2]; + + PdfT omega = cd->Omega; + PdfT omegaEven = omega; + + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); + + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); + + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); + + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); + + VPDFT vw_1_indep, vw_2_indep; + VPDFT vw_0 = VSET(w_0); + VPDFT vw_1 = VSET(w_1); + VPDFT vw_2 = VSET(w_2); + + VPDFT vw_1_x3 = VSET(w_1_x3); + VPDFT vw_2_x3 = VSET(w_2_x3); + VPDFT vw_1_nine_half = VSET(w_1_nine_half); + VPDFT vw_2_nine_half = VSET(w_2_nine_half); + + VPDFT vui, vux, vuy, vuz, vdens; + + VPDFT vevenPart, voddPart, vdir_indep_trm; + + VPDFT vomegaEven = VSET(omegaEven); + VPDFT vomegaOdd = VSET(omegaOdd); + + VPDFT vpdf_a, vpdf_b; + + // Declare pdf_N, pdf_E, pdf_S, pdf_W, ... + #define X(name, idx, idxinv, x, y, z) VPDFT JOIN(vpdf_,name); PdfT * JOIN(ppdf_,idx); + D3Q19_LIST + #undef X + + PdfT * src = kd->Pdfs[0]; + + int nThreads = 1; + int threadId = 0; + + #ifdef _OPENMP + nThreads = omp_get_max_threads(); + threadId = omp_get_thread_num(); + #endif + + const int nodesPlane = gDims[1] * gDims[2]; + const int nodesCol = gDims[2]; + + #define I(x, y, z, dir) P_INDEX_5(gDims, (x), (y), (z), (dir)) + +// TODO: make inline function out of macros. + + #define IMPLODE(_x, _y, _z) (nodesPlane * (_x) + nodesCol * (_y) + (_z)) + #define EXPLODE(index, _x, _y, _z) _x = index / (nodesPlane); _y = (index - nodesPlane * (_x)) / nodesCol; _z = index - nodesPlane * (_x) - nodesCol * (_y); + + int startX = oX; + int startY = oY; + int startZ = oZ; + + int indexStart = IMPLODE(startX, startY, startZ); + int indexEnd = IMPLODE(startX + nX - 1, startY + nY - 1, startZ + nZ - 1); + + // How many multiples of VSIZE cells (rounded up) do we have? + int nVCells = (indexEnd - indexStart + 1 + VSIZE - 1) / VSIZE; + + int threadStart = nVCells / nThreads * threadId; + int threadEnd = nVCells / nThreads * (threadId + 1); + + if (nVCells % nThreads > threadId) { + threadStart += threadId; + threadEnd += threadId + 1; + } + else { + threadStart += nVCells % nThreads; + threadEnd += nVCells % nThreads; + } + + threadStart *= VSIZE; + threadEnd *= VSIZE; + + // As threadStart/End is now in the granularity of cells we add the start offset. + threadStart += indexStart; + threadEnd += indexStart; + + EXPLODE(threadStart, startX, startY, startZ); + + #undef EXPLODE + #undef IMPLODE + + // printf("o thread %d idx start: %d end: %d thread start: %d end: %d\n", + // threadId, indexStart, indexEnd, threadStart, threadEnd); + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_,idx) = &src[I(startX + _x, startY + _y, startZ + _z, idx)]; + D3Q19_LIST + #undef X + +#if DEBUG_EXTENDED + + #define X(name, idx, idxinv, x, y, z) PdfT * JOIN(ppdf_start_,idx), * JOIN(ppdf_end_,idx); + D3Q19_LIST + #undef X + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_start_,idx) = &src[I(startX + _x, startY + _y, startZ + _z, idx)]; + D3Q19_LIST + #undef X + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_end_,idx) = &src[I(startX + nX - 1 + _x, startY + nY - 1 + _y, startZ + nZ - 1 + _z, idx)]; + D3Q19_LIST + #undef X + +#if 0 + #define X(name, idx, idxinv, _x, _y, _z) printf("%2s ppdf_%d = %p (%d %d %d) (%d %d %d)\n", STRINGIFY(name), idx, JOIN(ppdf_,idx), \ +startX , startY , startZ , startX + _x, startY + _y, startZ + _z); + D3Q19_LIST + #undef X +#endif + +#endif // DEBUG_EXTENDED + + + for (int i = threadStart; i < threadEnd; i += VSIZE) { + +#if DEBUG_EXTENDED + #define X(name, idx, idxinv, _x, _y, _z) Assert((unsigned long)(JOIN(ppdf_,idx)) >= (unsigned long)(JOIN(ppdf_start_,idx))); Assert((unsigned long)(JOIN(ppdf_,idx)) <= (unsigned long)(JOIN(ppdf_end_,idx))); + D3Q19_LIST + #undef X +#endif + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(vpdf_,name) = VLDU(JOIN(ppdf_,idxinv)); + D3Q19_LIST + #undef X + + vux = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_E,VADD(vpdf_NE,vpdf_SE)),VADD(vpdf_TE,vpdf_BE)),vpdf_W),vpdf_NW),vpdf_SW),vpdf_TW),vpdf_BW); + vuy = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_N,VADD(vpdf_NE,vpdf_NW)),VADD(vpdf_TN,vpdf_BN)),vpdf_S),vpdf_SE),vpdf_SW),vpdf_TS),vpdf_BS); + vuz = VSUB(VSUB(VSUB(VSUB(VSUB(VADD(VADD(vpdf_T,VADD(vpdf_TE,vpdf_TW)),VADD(vpdf_TN,vpdf_TS)),vpdf_B),vpdf_BE),vpdf_BW),vpdf_BN),vpdf_BS); + + vdens = VADD(VADD(VADD(VADD(VADD(VADD(VADD(VADD(VADD(vpdf_C,VADD(vpdf_N,vpdf_E)),VADD(vpdf_S,vpdf_W)),VADD(vpdf_NE,vpdf_SE)), + VADD(vpdf_SW,vpdf_NW)),VADD(vpdf_T,vpdf_TN)),VADD(vpdf_TE,vpdf_TS)),VADD(vpdf_TW,vpdf_B)),VADD(vpdf_BN,vpdf_BE)),VADD(vpdf_BS,vpdf_BW)); + + vdir_indep_trm = VSUB(vdens,VMUL(VADD(VADD(VMUL(vux,vux),VMUL(vuy,vuy)),VMUL(vuz,vuz)),VTHREE_HALF)); + + // ppdf_18 is the pointer to the center pdfs. + VSTU(ppdf_18, VSUB(vpdf_C,VMUL(vomegaEven,VSUB(vpdf_C,VMUL(vw_0,vdir_indep_trm))))); + + vw_1_indep = VMUL(vw_1,vdir_indep_trm); + vw_2_indep = VMUL(vw_2,vdir_indep_trm); + +#if defined(LOOP_1) || defined(LOOP_2) + #error Loop macros are not allowed to be defined here. +#endif + + #define LOOP_1(_dir1, _dir2, _idx1, _idx2, _vel) \ + vui = _vel; \ + vpdf_a = JOIN(vpdf_,_dir1); \ + vpdf_b = JOIN(vpdf_,_dir2); \ + \ + vevenPart = VMUL(vomegaEven, VSUB(VSUB(VMUL(VONE_HALF, VADD(vpdf_a, vpdf_b)), VMUL(vui, VMUL(vui, vw_1_nine_half))), vw_1_indep)); \ + voddPart = VMUL(vomegaOdd, VSUB( VMUL(VONE_HALF, VSUB(vpdf_a, vpdf_b)), VMUL(vui, vw_1_x3))); \ + \ + VSTU(JOIN(ppdf_,_idx1), VSUB(VSUB(vpdf_a, vevenPart), voddPart)); \ + VSTU(JOIN(ppdf_,_idx2), VADD(VSUB(vpdf_b, vevenPart), voddPart)); + + #define LOOP_2(_dir1, _dir2, _idx1, _idx2, _expr) \ + vui = _expr; \ + vpdf_a = JOIN(vpdf_,_dir1); \ + vpdf_b = JOIN(vpdf_,_dir2); \ + \ + vevenPart = VMUL(vomegaEven, VSUB(VSUB(VMUL(VONE_HALF, VADD(vpdf_a, vpdf_b)), VMUL(vui, VMUL(vui, vw_2_nine_half))), vw_2_indep)); \ + voddPart = VMUL(vomegaOdd, VSUB( VMUL(VONE_HALF, VSUB(vpdf_a, vpdf_b)), VMUL(vui, vw_2_x3))); \ + \ + VSTU(JOIN(ppdf_,_idx1), VSUB(VSUB(vpdf_a, vevenPart), voddPart)); \ + VSTU(JOIN(ppdf_,_idx2), VADD(VSUB(vpdf_b, vevenPart), voddPart)); + + + LOOP_1(N, S, D3Q19_N, D3Q19_S, vuy); + LOOP_1(E, W, D3Q19_E, D3Q19_W, vux); + LOOP_1(T, B, D3Q19_T, D3Q19_B, vuz); + + LOOP_2(NW, SE, D3Q19_NW, D3Q19_SE, VSUB(vuy, vux)); + LOOP_2(NE, SW, D3Q19_NE, D3Q19_SW, VADD(vuy, vux)); + LOOP_2(TW, BE, D3Q19_TW, D3Q19_BE, VSUB(vuz, vux)); + LOOP_2(TE, BW, D3Q19_TE, D3Q19_BW, VADD(vuz, vux)); + LOOP_2(TS, BN, D3Q19_TS, D3Q19_BN, VSUB(vuz, vuy)); + LOOP_2(TN, BS, D3Q19_TN, D3Q19_BS, VADD(vuz, vuy)); + + #define X(name, idx, idxinv, _x, _y, _z) JOIN(ppdf_,idx) += VSIZE; + D3Q19_LIST + #undef X + } + + #undef I + + return; + +} // }}} diff --git a/src/BenchKernelD3Q19AaVecSl.h b/src/BenchKernelD3Q19AaVecSl.h new file mode 100644 index 0000000..10ea6ee --- /dev/null +++ b/src/BenchKernelD3Q19AaVecSl.h @@ -0,0 +1,38 @@ +// -------------------------------------------------------------------------- +// +// Copyright +// Markus Wittmann, 2016-2017 +// RRZE, University of Erlangen-Nuremberg, Germany +// markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +// +// Viktor Haag, 2016 +// LSS, University of Erlangen-Nuremberg, Germany +// +// This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +// +// LbmBenchKernels is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LbmBenchKernels is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LbmBenchKernels. If not, see . +// +// -------------------------------------------------------------------------- +#ifndef __BENCH_KERNEL_D3Q19_AA_VEC_SL__ +#define __BENCH_KERNEL_D3Q19_AA_VEC_SL__ + +#include "Kernel.h" + + +void D3Q19AaVecSlInit_AaSoA(LatticeDesc * ld, KernelData ** kernelData, Parameters * params); +void D3Q19AaVecSlDeinit_AaSoA(LatticeDesc * ld, KernelData ** kernelData); + + + +#endif // __BENCH_KERNEL_D3Q19_AA_VEC_SL__ diff --git a/src/BenchKernelD3Q19AaVecSlCommon.c b/src/BenchKernelD3Q19AaVecSlCommon.c new file mode 100644 index 0000000..2c89ea6 --- /dev/null +++ b/src/BenchKernelD3Q19AaVecSlCommon.c @@ -0,0 +1,60 @@ +// -------------------------------------------------------------------------- +// +// Copyright +// Markus Wittmann, 2016-2017 +// RRZE, University of Erlangen-Nuremberg, Germany +// markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +// +// Viktor Haag, 2016 +// LSS, University of Erlangen-Nuremberg, Germany +// +// This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +// +// LbmBenchKernels is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LbmBenchKernels is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LbmBenchKernels. If not, see . +// +// -------------------------------------------------------------------------- +#include "BenchKernelD3Q19AaVecSlCommon.h" +#include "BenchKernelD3Q19AaVec.h" + + +#include "Memory.h" +#include "Vtk.h" +#include "Vector.h" + +#include +#include + +#ifdef _OPENMP + #include +#endif + +// Forward definition. +void FNAME(D3Q19AaVecSlKernel)(LatticeDesc * ld, struct KernelData_ * kd, CaseData * cd); + +void FNAME(D3Q19AaVecSlInit)(LatticeDesc * ld, KernelData ** kd, Parameters * params) +{ + FNAME(D3Q19AaVecInit)(ld, kd, params); + + (*kd)->Kernel = FNAME(D3Q19AaVecSlKernel); + + return; +} + +void FNAME(D3Q19AaVecSlDeinit)(LatticeDesc * ld, KernelData ** kd) +{ + FNAME(D3Q19AaVecDeinit)(ld, kd); + + return; +} + diff --git a/src/BenchKernelD3Q19AaVecSlCommon.h b/src/BenchKernelD3Q19AaVecSlCommon.h new file mode 100644 index 0000000..bc76113 --- /dev/null +++ b/src/BenchKernelD3Q19AaVecSlCommon.h @@ -0,0 +1,37 @@ +// -------------------------------------------------------------------------- +// +// Copyright +// Markus Wittmann, 2016-2017 +// RRZE, University of Erlangen-Nuremberg, Germany +// markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +// +// Viktor Haag, 2016 +// LSS, University of Erlangen-Nuremberg, Germany +// +// This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +// +// LbmBenchKernels is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// LbmBenchKernels is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LbmBenchKernels. If not, see . +// +// -------------------------------------------------------------------------- +#ifndef __BENCH_KERNEL_D3Q19_AA_VEC_SL_COMMON_H__ +#define __BENCH_KERNEL_D3Q19_AA_VEC_SL_COMMON_H__ + + +#include "Kernel.h" + +#include "BenchKernelD3Q19AaVecCommon.h" + + +#endif // __BENCH_KERNEL_D3Q19_AA_VEC_SL_COMMON_H__ + diff --git a/src/BenchKernelD3Q19List.c b/src/BenchKernelD3Q19List.c index e01853a..4adb858 100644 --- a/src/BenchKernelD3Q19List.c +++ b/src/BenchKernelD3Q19List.c @@ -40,28 +40,27 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = (KernelDataList *)kernelData; PdfT omega = cd->Omega; PdfT omegaEven = omega; -// PdfT omegaOdd = 8.0*((2.0-omegaEven)/(8.0-omegaEven)); //"standard" trt odd relaxation parameter - PdfT magicParam = 1.0/12.0; // 1/4: best stability; 1/12: removes third-order advection error (best advection); 1/6: removes fourth-order diffusion error (best diffusion); 3/16: exact location of bounce back for poiseuille flow - PdfT omegaOdd = 1.0/( 0.5 + magicParam/(1.0/omega - 0.5) ); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) /(F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F( 3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); - PdfT w_1_x3 = w_1 * 3.0; PdfT w_1_nine_half = w_1 * 9.0/2.0; PdfT w_1_indep = 0.0; - PdfT w_2_x3 = w_2 * 3.0; PdfT w_2_nine_half = w_2 * 9.0/2.0; PdfT w_2_indep = 0.0; + PdfT w_1_x3 = w_1 * F(3.0); PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); PdfT w_1_indep = F(0.0); + PdfT w_2_x3 = w_2 * F(3.0); PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); PdfT w_2_indep = F(0.0); PdfT ux, uy, uz, ui; PdfT dens; @@ -112,6 +111,9 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData pdf_B, pdf_BN, pdf_BE, pdf_BS, pdf_BW, \ evenPart, oddPart, w_1_indep, w_2_indep) #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif for (int index = 0; index < nFluid; ++index) { #define I(index, dir) P_INDEX_3((nCells), (index), (dir)) @@ -171,7 +173,7 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); #ifdef PROP_MODEL_PUSH @@ -184,20 +186,20 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[adjList[adjListIndex + D3Q19_N]] = pdf_N - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_S]] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[adjList[adjListIndex + D3Q19_E]] = pdf_E - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_W]] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[adjList[adjListIndex + D3Q19_T]] = pdf_T - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_B]] = pdf_B - evenPart + oddPart; @@ -205,38 +207,38 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_NW]] = pdf_NW - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_SE]] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_NE]] = pdf_NE - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_SW]] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_TW]] = pdf_TW - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_BE]] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_TE]] = pdf_TE - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_BW]] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_TS]] = pdf_TS - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_BN]] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[adjList[adjListIndex + D3Q19_TN]] = pdf_TN - evenPart - oddPart; dst[adjList[adjListIndex + D3Q19_BS]] = pdf_BS - evenPart + oddPart; @@ -249,20 +251,20 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); dst[I(index, D3Q19_N )] = pdf_N - evenPart - oddPart; dst[I(index, D3Q19_S )] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); dst[I(index, D3Q19_E )] = pdf_E - evenPart - oddPart; dst[I(index, D3Q19_W )] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); dst[I(index, D3Q19_T )] = pdf_T - evenPart - oddPart; dst[I(index, D3Q19_B )] = pdf_B - evenPart + oddPart; @@ -270,38 +272,38 @@ void FNAME(D3Q19ListKernel)(LatticeDesc * ld, KernelData * kernelData, CaseData w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); dst[I(index, D3Q19_NW)] = pdf_NW - evenPart - oddPart; dst[I(index, D3Q19_SE)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); dst[I(index, D3Q19_NE)] = pdf_NE - evenPart - oddPart; dst[I(index, D3Q19_SW)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); dst[I(index, D3Q19_TW)] = pdf_TW - evenPart - oddPart; dst[I(index, D3Q19_BE)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); dst[I(index, D3Q19_TE)] = pdf_TE - evenPart - oddPart; dst[I(index, D3Q19_BW)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); dst[I(index, D3Q19_TS)] = pdf_TS - evenPart - oddPart; dst[I(index, D3Q19_BN)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); dst[I(index, D3Q19_TN)] = pdf_TN - evenPart - oddPart; dst[I(index, D3Q19_BS)] = pdf_BS - evenPart + oddPart; diff --git a/src/BenchKernelD3Q19ListAa.c b/src/BenchKernelD3Q19ListAa.c index 2c3572c..045a396 100644 --- a/src/BenchKernelD3Q19ListAa.c +++ b/src/BenchKernelD3Q19ListAa.c @@ -39,8 +39,8 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = (KernelDataList *)kernelData; @@ -51,19 +51,19 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat // 1/12: removes third-order advection error (best advection); // 1/6: removes fourth-order diffusion error (best diffusion); // 3/16: exact location of bounce back for poiseuille flow - PdfT magicParam = 1.0/12.0; - PdfT omegaOdd = 1.0/( 0.5 + magicParam/(1.0/omega - 0.5) ); + PdfT magicParam = F(1.0)/F(12.0); + PdfT omegaOdd = F(1.0)/( F(0.5) + magicParam/(F(1.0)/omega - F(0.5)) ); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F(3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0/2.0; PdfT w_1_indep = 0.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0/2.0; PdfT w_2_indep = 0.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0)/F(2.0); PdfT w_1_indep = F(0.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0)/F(2.0); PdfT w_2_indep = F(0.0); PdfT ui; @@ -107,7 +107,7 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat X_LIKWID_START("list-aa-even"); - #ifdef _OPENMP +#ifdef _OPENMP #pragma omp parallel for default(none) \ shared(nFluid, nCells, kd, kdl, adjList, omegaOdd, omegaEven, src) \ private(ux, uy, uz, dens, adjListIndex, evenPart, oddPart, dir_indep_trm, w_1_indep, w_2_indep, ui,\ @@ -116,7 +116,12 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat pdf_NE, pdf_SE, pdf_SW, pdf_NW, \ pdf_T, pdf_TN, pdf_TE, pdf_TS, pdf_TW, \ pdf_B, pdf_BN, pdf_BE, pdf_BS, pdf_BW) - #endif +#endif +#ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd +#endif for (int index = 0; index < nFluid; ++index) { @@ -160,7 +165,7 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); // direction: w_0 src[I(index, D3Q19_C) ] = pdf_C - omegaEven*(pdf_C - w_0*dir_indep_trm); @@ -169,20 +174,20 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[I(index, D3Q19_S)] = pdf_N - evenPart - oddPart; src[I(index, D3Q19_N)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[I(index, D3Q19_W)] = pdf_E - evenPart - oddPart; src[I(index, D3Q19_E)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[I(index, D3Q19_B)] = pdf_T - evenPart - oddPart; src[I(index, D3Q19_T)] = pdf_B - evenPart + oddPart; @@ -190,38 +195,38 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[I(index, D3Q19_SE)] = pdf_NW - evenPart - oddPart; src[I(index, D3Q19_NW)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[I(index, D3Q19_SW)] = pdf_NE - evenPart - oddPart; src[I(index, D3Q19_NE)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[I(index, D3Q19_BE)] = pdf_TW - evenPart - oddPart; src[I(index, D3Q19_TW)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[I(index, D3Q19_BW)] = pdf_TE - evenPart - oddPart; src[I(index, D3Q19_TE)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[I(index, D3Q19_BN)] = pdf_TS - evenPart - oddPart; src[I(index, D3Q19_TS)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[I(index, D3Q19_BS)] = pdf_TN - evenPart - oddPart; src[I(index, D3Q19_TN)] = pdf_BS - evenPart + oddPart; @@ -250,6 +255,9 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat pdf_NE, pdf_SE, pdf_SW, pdf_NW, \ pdf_T, pdf_TN, pdf_TE, pdf_TS, pdf_TW, \ pdf_B, pdf_BN, pdf_BE, pdf_BS, pdf_BW) +#endif +#ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep #endif for (int index = 0; index < nFluid; ++index) { @@ -273,9 +281,9 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat int z = kdl->Coords[C_INDEX_Z(index)]; if (z == nZ - 4 && x > 3 && x < (nX - 4) && y > 3 && y < (nY - 4)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1) * F(0.5)77; + uy = F(0.0); + uz = F(0.0); } else { #endif ux = pdf_E + pdf_NE + pdf_SE + pdf_TE + pdf_BE - @@ -294,7 +302,7 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); adjListIndex = index * N_D3Q19_IDX; @@ -305,20 +313,20 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[adjList[adjListIndex + D3Q19_N]] = pdf_N - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_S]] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[adjList[adjListIndex + D3Q19_E]] = pdf_E - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_W]] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[adjList[adjListIndex + D3Q19_T]] = pdf_T - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_B]] = pdf_B - evenPart + oddPart; @@ -326,38 +334,38 @@ void FNAME(D3Q19ListAaKernel)(LatticeDesc * ld, KernelData * kernelData, CaseDat w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_NW]] = pdf_NW - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_SE]] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_NE]] = pdf_NE - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_SW]] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_TW]] = pdf_TW - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_BE]] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_TE]] = pdf_TE - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_BW]] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_TS]] = pdf_TS - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_BN]] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[adjList[adjListIndex + D3Q19_TN]] = pdf_TN - evenPart - oddPart; src[adjList[adjListIndex + D3Q19_BS]] = pdf_BS - evenPart + oddPart; diff --git a/src/BenchKernelD3Q19ListAaPv.c b/src/BenchKernelD3Q19ListAaPv.c index b1dee16..8ae0c2c 100644 --- a/src/BenchKernelD3Q19ListAaPv.c +++ b/src/BenchKernelD3Q19ListAaPv.c @@ -49,8 +49,8 @@ void FNAME(D3Q19ListAaPvKernel)(LatticeDesc * ld, KernelData * kernelData, CaseD Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0));; #if defined(VTK_OUTPUT) || defined(STATISTICS) || defined(VERIFICATION) KernelData * kd = (KernelData *)kernelData; @@ -160,8 +160,8 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = KDL(kernelData); @@ -170,19 +170,19 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) PdfT omega = cd->Omega; PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; PdfT w_1_indep = 0.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; PdfT w_2_indep = 0.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); PdfT w_1_indep = F(0.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); PdfT w_2_indep = F(0.0); PdfT ui; @@ -190,8 +190,8 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) PdfT dens; - VPDFT VONE_HALF = VSET(0.5); - VPDFT VTHREE_HALF = VSET(3.0 / 2.0); + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); VPDFT vw_1_indep, vw_2_indep; VPDFT vw_0 = VSET(w_0); @@ -393,7 +393,7 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); // direction: w_0 src[I(index, D3Q19_C) ] = pdf_C - omegaEven*(pdf_C - w_0*dir_indep_trm); @@ -402,20 +402,20 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[I(index, D3Q19_S)] = pdf_N - evenPart - oddPart; src[I(index, D3Q19_N)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[I(index, D3Q19_W)] = pdf_E - evenPart - oddPart; src[I(index, D3Q19_E)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[I(index, D3Q19_B)] = pdf_T - evenPart - oddPart; src[I(index, D3Q19_T)] = pdf_B - evenPart + oddPart; @@ -423,38 +423,38 @@ static void KernelEven(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[I(index, D3Q19_SE)] = pdf_NW - evenPart - oddPart; src[I(index, D3Q19_NW)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[I(index, D3Q19_SW)] = pdf_NE - evenPart - oddPart; src[I(index, D3Q19_NE)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[I(index, D3Q19_BE)] = pdf_TW - evenPart - oddPart; src[I(index, D3Q19_TW)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[I(index, D3Q19_BW)] = pdf_TE - evenPart - oddPart; src[I(index, D3Q19_TE)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[I(index, D3Q19_BN)] = pdf_TS - evenPart - oddPart; src[I(index, D3Q19_TS)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[I(index, D3Q19_BS)] = pdf_TN - evenPart - oddPart; src[I(index, D3Q19_TN)] = pdf_BS - evenPart + oddPart; @@ -472,8 +472,8 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = KDL(kernelData); @@ -482,19 +482,19 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) PdfT omega = cd->Omega; PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; PdfT w_1_indep = 0.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; PdfT w_2_indep = 0.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); PdfT w_1_indep = F(0.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); PdfT w_2_indep = F(0.0); PdfT ui; @@ -502,8 +502,8 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) PdfT dens; - VPDFT VONE_HALF = VSET(0.5); - VPDFT VTHREE_HALF = VSET(3.0 / 2.0); + VPDFT VONE_HALF = VSET(F(0.5)); + VPDFT VTHREE_HALF = VSET(F(3.0) / F(2.0)); VPDFT vw_1_indep, vw_2_indep; VPDFT vw_0 = VSET(w_0); @@ -770,7 +770,7 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); adjListIndex = index * N_D3Q19_IDX; @@ -781,20 +781,20 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) w_1_indep = w_1 * dir_indep_trm; ui = uy; - evenPart = omegaEven * (0.5 * (pdf_N + pdf_S) - ui * ui * w_1_nine_half - w_1_indep); - oddPart = omegaOdd * (0.5 * (pdf_N - pdf_S) - ui * w_1_x3); + evenPart = omegaEven * (F(0.5) * (pdf_N + pdf_S) - ui * ui * w_1_nine_half - w_1_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_N - pdf_S) - ui * w_1_x3); *ppdf_S = pdf_N - evenPart - oddPart; *ppdf_N = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven * (0.5 * (pdf_E + pdf_W) - ui * ui * w_1_nine_half - w_1_indep); - oddPart = omegaOdd * (0.5 * (pdf_E - pdf_W) - ui * w_1_x3); + evenPart = omegaEven * (F(0.5) * (pdf_E + pdf_W) - ui * ui * w_1_nine_half - w_1_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_E - pdf_W) - ui * w_1_x3); *ppdf_W = pdf_E - evenPart - oddPart; *ppdf_E = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven * (0.5 * (pdf_T + pdf_B) - ui * ui * w_1_nine_half - w_1_indep); - oddPart = omegaOdd * (0.5 * (pdf_T - pdf_B) - ui * w_1_x3); + evenPart = omegaEven * (F(0.5) * (pdf_T + pdf_B) - ui * ui * w_1_nine_half - w_1_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_T - pdf_B) - ui * w_1_x3); *ppdf_B = pdf_T - evenPart - oddPart; *ppdf_T = pdf_B - evenPart + oddPart; @@ -802,38 +802,38 @@ static void KernelOdd(LatticeDesc * ld, KernelData * kernelData, CaseData * cd) w_2_indep = w_2 * dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven * (0.5 * (pdf_NW + pdf_SE) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_NW - pdf_SE) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_NW + pdf_SE) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_NW - pdf_SE) - ui * w_2_x3); *ppdf_SE = pdf_NW - evenPart - oddPart; *ppdf_NW = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven * (0.5 * (pdf_NE + pdf_SW) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_NE - pdf_SW) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_NE + pdf_SW) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_NE - pdf_SW) - ui * w_2_x3); *ppdf_SW = pdf_NE - evenPart - oddPart; *ppdf_NE = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven * (0.5 * (pdf_TW + pdf_BE) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_TW - pdf_BE) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_TW + pdf_BE) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_TW - pdf_BE) - ui * w_2_x3); *ppdf_BE = pdf_TW - evenPart - oddPart; *ppdf_TW = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven * (0.5 * (pdf_TE + pdf_BW) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_TE - pdf_BW) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_TE + pdf_BW) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_TE - pdf_BW) - ui * w_2_x3); *ppdf_BW = pdf_TE - evenPart - oddPart; *ppdf_TE = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven * (0.5 * (pdf_TS + pdf_BN) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_TS - pdf_BN) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_TS + pdf_BN) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_TS - pdf_BN) - ui * w_2_x3); *ppdf_BN = pdf_TS - evenPart - oddPart; *ppdf_TS = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven * (0.5 * (pdf_TN + pdf_BS) - ui * ui * w_2_nine_half - w_2_indep); - oddPart = omegaOdd * (0.5 * (pdf_TN - pdf_BS) - ui * w_2_x3); + evenPart = omegaEven * (F(0.5) * (pdf_TN + pdf_BS) - ui * ui * w_2_nine_half - w_2_indep); + oddPart = omegaOdd * (F(0.5) * (pdf_TN - pdf_BS) - ui * w_2_x3); *ppdf_BS = pdf_TN - evenPart - oddPart; *ppdf_TN = pdf_BS - evenPart + oddPart; diff --git a/src/BenchKernelD3Q19ListAaRia.c b/src/BenchKernelD3Q19ListAaRia.c index 87addcc..245c2a5 100644 --- a/src/BenchKernelD3Q19ListAaRia.c +++ b/src/BenchKernelD3Q19ListAaRia.c @@ -55,19 +55,19 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case // 1/12: removes third-order advection error (best advection); // 1/ 6: removes fourth-order diffusion error (best diffusion); // 3/16: exact location of bounce back for poiseuille flow - PdfT magicParam = 1.0 / 12.0; - PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - PdfT evenPart = 0.0; - PdfT oddPart = 0.0; - PdfT dir_indep_trm = 0.0; + PdfT evenPart = F(0.0); + PdfT oddPart = F(0.0); + PdfT dir_indep_trm = F(0.0); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F(3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; PdfT w_1_indep = 0.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; PdfT w_2_indep = 0.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); PdfT w_1_indep = F(0.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); PdfT w_2_indep = F(0.0); PdfT ui; @@ -134,6 +134,11 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case pdf_T, pdf_TN, pdf_TE, pdf_TS, pdf_TW, \ pdf_B, pdf_BN, pdf_BE, pdf_BS, pdf_BW) #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #pragma vector always + #pragma simd + #endif for (int index = 0; index < nFluid; ++index) { #define I(index, dir) P_INDEX_3((nCells), (index), (dir)) @@ -154,9 +159,9 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case int z = kdl->Coords[C_INDEX_Z(index)]; if (z == nZ - 4 && x > 3 && x < (nX - 4) && y > 3 && y < (nY - 4)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1) * F(0.5)77; + uy = F(0.0); + uz = F(0.0); } else { #endif ux = pdf_E + pdf_NE + pdf_SE + pdf_TE + pdf_BE - @@ -175,7 +180,7 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); // direction: w_0 src[I(index, D3Q19_C) ] = pdf_C - omegaEven*(pdf_C - w_0*dir_indep_trm); @@ -184,20 +189,20 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); src[I(index, D3Q19_S)] = pdf_N - evenPart - oddPart; src[I(index, D3Q19_N)] = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); src[I(index, D3Q19_W)] = pdf_E - evenPart - oddPart; src[I(index, D3Q19_E)] = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); src[I(index, D3Q19_B)] = pdf_T - evenPart - oddPart; src[I(index, D3Q19_T)] = pdf_B - evenPart + oddPart; @@ -205,38 +210,38 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); src[I(index, D3Q19_SE)] = pdf_NW - evenPart - oddPart; src[I(index, D3Q19_NW)] = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); src[I(index, D3Q19_SW)] = pdf_NE - evenPart - oddPart; src[I(index, D3Q19_NE)] = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); src[I(index, D3Q19_BE)] = pdf_TW - evenPart - oddPart; src[I(index, D3Q19_TW)] = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); src[I(index, D3Q19_BW)] = pdf_TE - evenPart - oddPart; src[I(index, D3Q19_TE)] = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); src[I(index, D3Q19_BN)] = pdf_TS - evenPart - oddPart; src[I(index, D3Q19_TS)] = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); src[I(index, D3Q19_BS)] = pdf_TN - evenPart - oddPart; src[I(index, D3Q19_TN)] = pdf_BS - evenPart + oddPart; @@ -290,6 +295,7 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case int indexStart = threadIndices[threadId]; int indexStop = threadIndices[threadId] + nFluidThread; + // Because of runlength coding iterations are not independent. for (int index = indexStart; index < indexStop; ++index) { #define I(index, dir) P_INDEX_3((nCells), (index), (dir)) @@ -346,9 +352,9 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case int z = kdl->Coords[C_INDEX_Z(index)]; if (z == nZ - 4 && x > 3 && x < (nX - 4) && y > 3 && y < (nY - 4)) { - ux = 0.1 * 0.577; - uy = 0.0; - uz = 0.0; + ux = F(0.1) * F(0.5)77; + uy = F(0.0); + uz = F(0.0); } else { #endif ux = pdf_E + pdf_NE + pdf_SE + pdf_TE + pdf_BE - @@ -367,7 +373,7 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*3.0/2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz)*F(3.0)/F(2.0); adjListIndex = index * N_D3Q19_IDX; @@ -378,20 +384,20 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case w_1_indep = w_1*dir_indep_trm; ui = uy; - evenPart = omegaEven*( 0.5*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_N - pdf_S) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_N + pdf_S) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_N - pdf_S) - ui*w_1_x3 ); *ppdf_S = pdf_N - evenPart - oddPart; *ppdf_N = pdf_S - evenPart + oddPart; ui = ux; - evenPart = omegaEven*( 0.5*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_E - pdf_W) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_E + pdf_W) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_E - pdf_W) - ui*w_1_x3 ); *ppdf_W = pdf_E - evenPart - oddPart; *ppdf_E = pdf_W - evenPart + oddPart; ui = uz; - evenPart = omegaEven*( 0.5*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); - oddPart = omegaOdd*(0.5*(pdf_T - pdf_B) - ui*w_1_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_T + pdf_B) - ui*ui*w_1_nine_half - w_1_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_T - pdf_B) - ui*w_1_x3 ); *ppdf_B = pdf_T - evenPart - oddPart; *ppdf_T = pdf_B - evenPart + oddPart; @@ -399,38 +405,38 @@ void FNAME(D3Q19ListAaRiaKernel)(LatticeDesc * ld, KernelData * kernelData, Case w_2_indep = w_2*dir_indep_trm; ui = -ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NW - pdf_SE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NW + pdf_SE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NW - pdf_SE) - ui*w_2_x3 ); *ppdf_SE = pdf_NW - evenPart - oddPart; *ppdf_NW = pdf_SE - evenPart + oddPart; ui = ux + uy; - evenPart = omegaEven*( 0.5*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_NE - pdf_SW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_NE + pdf_SW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_NE - pdf_SW) - ui*w_2_x3 ); *ppdf_SW = pdf_NE - evenPart - oddPart; *ppdf_NE = pdf_SW - evenPart + oddPart; ui = -ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TW - pdf_BE) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TW + pdf_BE) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TW - pdf_BE) - ui*w_2_x3 ); *ppdf_BE = pdf_TW - evenPart - oddPart; *ppdf_TW = pdf_BE - evenPart + oddPart; ui = ux + uz; - evenPart = omegaEven*( 0.5*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TE - pdf_BW) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TE + pdf_BW) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TE - pdf_BW) - ui*w_2_x3 ); *ppdf_BW = pdf_TE - evenPart - oddPart; *ppdf_TE = pdf_BW - evenPart + oddPart; ui = -uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TS - pdf_BN) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TS + pdf_BN) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TS - pdf_BN) - ui*w_2_x3 ); *ppdf_BN = pdf_TS - evenPart - oddPart; *ppdf_TS = pdf_BN - evenPart + oddPart; ui = uy + uz; - evenPart = omegaEven*( 0.5*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); - oddPart = omegaOdd*(0.5*(pdf_TN - pdf_BS) - ui*w_2_x3 ); + evenPart = omegaEven*( F(0.5)*(pdf_TN + pdf_BS) - ui*ui*w_2_nine_half - w_2_indep ); + oddPart = omegaOdd*(F(0.5)*(pdf_TN - pdf_BS) - ui*w_2_x3 ); *ppdf_BS = pdf_TN - evenPart - oddPart; *ppdf_TN = pdf_BS - evenPart + oddPart; diff --git a/src/BenchKernelD3Q19ListPullSplitNt.c b/src/BenchKernelD3Q19ListPullSplitNt.c index 0132dc9..f617406 100644 --- a/src/BenchKernelD3Q19ListPullSplitNt.c +++ b/src/BenchKernelD3Q19ListPullSplitNt.c @@ -55,8 +55,8 @@ void FNAME(KernelPullSplitNt1S)(LatticeDesc * ld, KernelData * kernelData, CaseD Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = KDL(kernelData); @@ -65,16 +65,16 @@ void FNAME(KernelPullSplitNt1S)(LatticeDesc * ld, KernelData * kernelData, CaseD PdfT omega = cd->Omega; const PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - const PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + const PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); const VPDFT vw_1_x3 = VSET(w_1_x3); const VPDFT vw_2_x3 = VSET(w_2_x3); @@ -85,7 +85,7 @@ void FNAME(KernelPullSplitNt1S)(LatticeDesc * ld, KernelData * kernelData, CaseD const VPDFT vomegaEven = VSET(omegaEven); const VPDFT vomegaOdd = VSET(omegaOdd); - const VPDFT voneHalf = VSET(0.5); + const VPDFT voneHalf = VSET(F(0.5)); // uint32_t nConsecNodes = kdlr->nConsecNodes; // uint32_t * consecNodes = kdlr->ConsecNodes; @@ -266,8 +266,8 @@ void FNAME(KernelPullSplitNt2S)(LatticeDesc * ld, KernelData * kernelData, CaseD Assert(kernelData != NULL); Assert(cd != NULL); - Assert(cd->Omega > 0.0); - Assert(cd->Omega < 2.0); + Assert(cd->Omega > F(0.0)); + Assert(cd->Omega < F(2.0)); KernelData * kd = (KernelData *)kernelData; KernelDataList * kdl = KDL(kernelData); @@ -276,16 +276,15 @@ void FNAME(KernelPullSplitNt2S)(LatticeDesc * ld, KernelData * kernelData, CaseD PdfT omega = cd->Omega; const PdfT omegaEven = omega; - PdfT magicParam = 1.0 / 12.0; - const PdfT omegaOdd = 1.0 / (0.5 + magicParam / (1.0 / omega - 0.5)); + PdfT magicParam = F(1.0) / F(12.0); + const PdfT omegaOdd = F(1.0) / (F(0.5) + magicParam / (F(1.0) / omega - F(0.5))); + const PdfT w_0 = F(1.0) / F( 3.0); + const PdfT w_1 = F(1.0) / F(18.0); + const PdfT w_2 = F(1.0) / F(36.0); - const PdfT w_0 = 1.0 / 3.0; - const PdfT w_1 = 1.0 / 18.0; - const PdfT w_2 = 1.0 / 36.0; - - const PdfT w_1_x3 = w_1 * 3.0; const PdfT w_1_nine_half = w_1 * 9.0 / 2.0; - const PdfT w_2_x3 = w_2 * 3.0; const PdfT w_2_nine_half = w_2 * 9.0 / 2.0; + const PdfT w_1_x3 = w_1 * F(3.0); const PdfT w_1_nine_half = w_1 * F(9.0) / F(2.0); + const PdfT w_2_x3 = w_2 * F(3.0); const PdfT w_2_nine_half = w_2 * F(9.0) / F(2.0); const VPDFT vw_1_x3 = VSET(w_1_x3); const VPDFT vw_2_x3 = VSET(w_2_x3); @@ -296,7 +295,7 @@ void FNAME(KernelPullSplitNt2S)(LatticeDesc * ld, KernelData * kernelData, CaseD const VPDFT vomegaEven = VSET(omegaEven); const VPDFT vomegaOdd = VSET(omegaOdd); - const VPDFT voneHalf = VSET(0.5); + const VPDFT voneHalf = VSET(F(0.5)); // uint32_t nConsecNodes = kdlr->nConsecNodes; // uint32_t * consecNodes = kdlr->ConsecNodes; diff --git a/src/BenchKernelD3Q19ListPullSplitNt1SIntrinsics.h b/src/BenchKernelD3Q19ListPullSplitNt1SIntrinsics.h index a3e586b..bb075fa 100644 --- a/src/BenchKernelD3Q19ListPullSplitNt1SIntrinsics.h +++ b/src/BenchKernelD3Q19ListPullSplitNt1SIntrinsics.h @@ -41,6 +41,9 @@ #ifdef DEBUG memset(tmpArray, -1, sizeof(PdfT) * nTmpArray * N_TMP); #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif for (int index = 0; index < indexMax; ++index) { @@ -69,7 +72,7 @@ pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * 3.0 / 2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); w_1_indep = w_1 * dir_indep_trm; w_2_indep = w_2 * dir_indep_trm; diff --git a/src/BenchKernelD3Q19ListPullSplitNt1SScalar.h b/src/BenchKernelD3Q19ListPullSplitNt1SScalar.h index 9b833ae..8ce6269 100644 --- a/src/BenchKernelD3Q19ListPullSplitNt1SScalar.h +++ b/src/BenchKernelD3Q19ListPullSplitNt1SScalar.h @@ -69,7 +69,7 @@ pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * 3.0 / 2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); w_1_indep = w_1 * dir_indep_trm; w_2_indep = w_2 * dir_indep_trm; @@ -89,8 +89,8 @@ w_1_indep = tmpArray[TMP_INDEX(index, TMP_W1)]; \ \ ui = _vel; \ - evenPart = omegaEven * (0.5 * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_1_nine_half - w_1_indep); \ - oddPart = omegaOdd * (0.5 * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_1_x3); \ + evenPart = omegaEven * (F(0.5) * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_1_nine_half - w_1_indep); \ + oddPart = omegaOdd * (F(0.5) * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_1_x3); \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir1) )] = JOIN(pdf_,_dir1) - evenPart - oddPart; \ tmpArray[TMP_INDEX(index, JOIN(D3Q19_,_dir2))] = JOIN(pdf_,_dir2) - evenPart + oddPart; \ } \ @@ -107,8 +107,8 @@ w_2_indep = tmpArray[TMP_INDEX(index, TMP_W2)]; \ \ ui = _expr; \ - evenPart = omegaEven * (0.5 * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_2_nine_half - w_2_indep); \ - oddPart = omegaOdd * (0.5 * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_2_x3); \ + evenPart = omegaEven * (F(0.5) * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_2_nine_half - w_2_indep); \ + oddPart = omegaOdd * (F(0.5) * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_2_x3); \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir1))] = JOIN(pdf_,_dir1) - evenPart - oddPart; \ tmpArray[TMP_INDEX(index, JOIN(D3Q19_,_dir2))] = JOIN(pdf_,_dir2) - evenPart + oddPart; \ } \ diff --git a/src/BenchKernelD3Q19ListPullSplitNt2SIntrinsics.h b/src/BenchKernelD3Q19ListPullSplitNt2SIntrinsics.h index 399fa5f..de858ec 100644 --- a/src/BenchKernelD3Q19ListPullSplitNt2SIntrinsics.h +++ b/src/BenchKernelD3Q19ListPullSplitNt2SIntrinsics.h @@ -41,6 +41,9 @@ #ifdef DEBUG memset(tmpArray, -1, sizeof(PdfT) * nTmpArray * N_TMP); #endif + #ifdef INTEL_OPT_DIRECTIVES + #pragma ivdep + #endif for (int index = 0; index < indexMax; ++index) { @@ -69,7 +72,7 @@ pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * 3.0 / 2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); w_1_indep = w_1 * dir_indep_trm; w_2_indep = w_2 * dir_indep_trm; diff --git a/src/BenchKernelD3Q19ListPullSplitNt2SScalar.h b/src/BenchKernelD3Q19ListPullSplitNt2SScalar.h index ca1f3dd..c8abb1f 100644 --- a/src/BenchKernelD3Q19ListPullSplitNt2SScalar.h +++ b/src/BenchKernelD3Q19ListPullSplitNt2SScalar.h @@ -69,7 +69,7 @@ pdf_T + pdf_TN + pdf_TE + pdf_TS + pdf_TW + pdf_B + pdf_BN + pdf_BE + pdf_BS + pdf_BW; - dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * 3.0 / 2.0; + dir_indep_trm = dens - (ux * ux + uy * uy + uz * uz) * F(3.0) / F(2.0); w_1_indep = w_1 * dir_indep_trm; w_2_indep = w_2 * dir_indep_trm; @@ -89,8 +89,8 @@ w_1_indep = tmpArray[TMP_INDEX(index, TMP_W1)]; \ \ ui = _vel; \ - evenPart = omegaEven * (0.5 * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_1_nine_half - w_1_indep); \ - oddPart = omegaOdd * (0.5 * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_1_x3); \ + evenPart = omegaEven * (F(0.5) * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_1_nine_half - w_1_indep); \ + oddPart = omegaOdd * (F(0.5) * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_1_x3); \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir1) )] = JOIN(pdf_,_dir1) - evenPart - oddPart; \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir2) )] = JOIN(pdf_,_dir2) - evenPart + oddPart; \ } @@ -104,8 +104,8 @@ w_2_indep = tmpArray[TMP_INDEX(index, TMP_W2)]; \ \ ui = _expr; \ - evenPart = omegaEven * (0.5 * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_2_nine_half - w_2_indep); \ - oddPart = omegaOdd * (0.5 * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_2_x3); \ + evenPart = omegaEven * (F(0.5) * (JOIN(pdf_,_dir1) + JOIN(pdf_,_dir2)) - ui * ui * w_2_nine_half - w_2_indep); \ + oddPart = omegaOdd * (F(0.5) * (JOIN(pdf_,_dir1) - JOIN(pdf_,_dir2)) - ui * w_2_x3); \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir1))] = JOIN(pdf_,_dir1) - evenPart - oddPart; \ dst[I(index + blockedIndex, JOIN(D3Q19_,_dir2))] = JOIN(pdf_,_dir2) - evenPart + oddPart; \ } diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..f637416 --- /dev/null +++ b/src/Config.h @@ -0,0 +1,8 @@ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#ifdef __INTEL_COMPILER + #define INTEL_OPT_DIRECTIVES +#endif + +#endif // __CONFIG_H__ diff --git a/src/Geometry.c b/src/Geometry.c index 0450c56..c7e3f20 100644 --- a/src/Geometry.c +++ b/src/Geometry.c @@ -32,6 +32,8 @@ #include +static const char * g_geoTypeStr[] = { "box", "channel", "pipe", "blocks", "fluid" }; + void GeoCreateByStr(const char * geometryType, int dims[3], int periodic[3], LatticeDesc * ld) { int type = -1; @@ -102,9 +104,9 @@ void GeoCreateByType(GEO_TYPES type, void * typeDetails, int dims[3], int period Assert(type >= GEO_TYPE_MIN); Assert(type <= GEO_TYPE_MAX); - const char * geoTypeStr[] = { "box", "channel", "pipe", "blocks", "fluid" }; + // const char * geoTypeStr[] = { "box", "channel", "pipe", "blocks", "fluid" }; - printf("# geometry: %d x %d x %d nodes, type %d %s\n", dims[0], dims[1], dims[2], type, geoTypeStr[type]); + // printf("# geometry: %d x %d x %d nodes, type %d %s\n", dims[0], dims[1], dims[2], type, geoTypeStr[type]); ld->Dims[0] = dims[0]; ld->Dims[1] = dims[1]; @@ -113,6 +115,7 @@ void GeoCreateByType(GEO_TYPES type, void * typeDetails, int dims[3], int period ld->PeriodicX = periodic[0]; ld->PeriodicY = periodic[1]; ld->PeriodicZ = periodic[2]; + ld->Name = g_geoTypeStr[type]; LatticeT * lattice; MemAlloc((void **)&lattice, sizeof(LatticeT) * dims[0] * dims[1] * dims[2]); diff --git a/src/Kernel.c b/src/Kernel.c index 88018b4..cba5166 100644 --- a/src/Kernel.c +++ b/src/Kernel.c @@ -68,21 +68,21 @@ void KernelComputeBoundaryConditions(KernelData * kd, LatticeDesc * ld, CaseData Assert(ld != NULL); Assert(cd != NULL); - Assert(cd->RhoIn > 0.0); - Assert(cd->RhoOut > 0.0); + Assert(cd->RhoIn > F(0.0)); + Assert(cd->RhoOut > F(0.0)); PdfT rho_in = cd->RhoIn; PdfT rho_out = cd->RhoOut; - PdfT rho_in_inv = 1.0 / rho_in; - PdfT rho_out_inv = 1.0 / rho_out; - PdfT indep_ux = 0.0; + PdfT rho_in_inv = F(1.0) / rho_in; + PdfT rho_out_inv = F(1.0) / rho_out; + PdfT indep_ux = F(0.0); PdfT dens; PdfT ux; - const PdfT one_third = 1.0 / 3.0; - const PdfT one_fourth = 1.0 / 4.0; - const PdfT one_sixth = 1.0 / 6.0; + const PdfT one_third = F(1.0) / F(3.0); + const PdfT one_fourth = F(1.0) / F(4.0); + const PdfT one_sixth = F(1.0) / F(6.0); PdfT pdfs[N_D3Q19]; @@ -126,10 +126,10 @@ void KernelComputeBoundaryConditions(KernelData * kd, LatticeDesc * ld, CaseData dens = rho_in; - ux = 1 - (pdfs[D3Q19_C] + + ux = F(1.0) - (pdfs[D3Q19_C] + (pdfs[D3Q19_T] + pdfs[D3Q19_B] + pdfs[D3Q19_S] + pdfs[D3Q19_N]) + (pdfs[D3Q19_TS] + pdfs[D3Q19_BS] + pdfs[D3Q19_TN] + pdfs[D3Q19_BN]) + - 2 * (pdfs[D3Q19_SW] + pdfs[D3Q19_TW] + pdfs[D3Q19_W] + pdfs[D3Q19_BW] + pdfs[D3Q19_NW])) * rho_in_inv; + F(2.0) * (pdfs[D3Q19_SW] + pdfs[D3Q19_TW] + pdfs[D3Q19_W] + pdfs[D3Q19_BW] + pdfs[D3Q19_NW])) * rho_in_inv; indep_ux = one_sixth * dens * ux; @@ -176,10 +176,10 @@ void KernelComputeBoundaryConditions(KernelData * kd, LatticeDesc * ld, CaseData dens = rho_out; - ux = -1 + (pdfs[D3Q19_C] + + ux = F(-1.0) + (pdfs[D3Q19_C] + (pdfs[D3Q19_T] + pdfs[D3Q19_B] + pdfs[D3Q19_S] + pdfs[D3Q19_N]) + (pdfs[D3Q19_TS] + pdfs[D3Q19_BS] + pdfs[D3Q19_TN] + pdfs[D3Q19_BN]) + - 2 * (pdfs[D3Q19_NE] + pdfs[D3Q19_BE] + pdfs[D3Q19_E] + pdfs[D3Q19_TE] + pdfs[D3Q19_SE])) * rho_out_inv; + F(2.0) * (pdfs[D3Q19_NE] + pdfs[D3Q19_BE] + pdfs[D3Q19_E] + pdfs[D3Q19_TE] + pdfs[D3Q19_SE])) * rho_out_inv; indep_ux = one_sixth * dens * ux; pdfs[D3Q19_W ] = pdfs[D3Q19_E] - one_third * dens * ux; @@ -234,13 +234,16 @@ PdfT KernelDensity(KernelData * kd, LatticeDesc * ld) kd->GetNode(kd, x, y, z, pdfs); + PdfT localDensity = F(0.0); + for(int d = 0; d < N_D3Q19; ++d) { // if (pdfs[d] < 0.0) { // printf("# %d %d %d %d < 0 %e %s\n", x, y, z, d, pdfs[d], D3Q19_NAMES[d]); // exit(1); // } - density += pdfs[d]; + localDensity += pdfs[d]; } + density += localDensity; } } @@ -259,22 +262,22 @@ void KernelSetInitialDensity(LatticeDesc * ld, KernelData * kd, CaseData * cd) PdfT rho_in = cd->RhoIn; PdfT rho_out = cd->RhoOut; - PdfT ux = 0.0; - PdfT uy = 0.0; - PdfT uz = 0.0; - PdfT dens = 1.0; + PdfT ux = F(0.0); + PdfT uy = F(0.0); + PdfT uz = F(0.0); + PdfT dens = F(1.0); PdfT omega = cd->Omega; - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F( 3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); PdfT dir_indep_trm; - PdfT omega_w0 = 3.0 * w_0 * omega; - PdfT omega_w1 = 3.0 * w_1 * omega; - PdfT omega_w2 = 3.0 * w_2 * omega; - PdfT one_third = 1.0 / 3.0; + PdfT omega_w0 = F(3.0) * w_0 * omega; + PdfT omega_w1 = F(3.0) * w_1 * omega; + PdfT omega_w2 = F(3.0) * w_2 * omega; + PdfT one_third = F(1.0) / F(3.0); int nX = lDims[0]; int nY = lDims[1]; @@ -290,43 +293,43 @@ void KernelSetInitialDensity(LatticeDesc * ld, KernelData * kd, CaseData * cd) if (ld->Lattice[L_INDEX_4(ld->Dims, x, y, z)] != LAT_CELL_OBSTACLE) { // TODO: fix later. // if((caseData->geoType == GEO_TYPE_CHANNEL) || (caseData->geoType == GEO_TYPE_RCHANNEL)) - dens = rho_in + (rho_out - rho_in)*(x)/(nX-1.0); + dens = rho_in + (rho_out - rho_in) * (x) / (nX - F(1.0)); #define SQR(a) ((a)*(a)) - dir_indep_trm = one_third * dens - 0.5 * (ux * ux + uy * uy + uz * uz); + dir_indep_trm = one_third * dens - F(0.5) * (ux * ux + uy * uy + uz * uz); pdfs[D3Q19_C] = omega_w0 * (dir_indep_trm); - pdfs[D3Q19_NW] = omega_w2 * (dir_indep_trm - (ux - uy) + 1.5 * SQR(ux - uy)); - pdfs[D3Q19_SE] = omega_w2 * (dir_indep_trm + (ux - uy) + 1.5 * SQR(ux - uy)); + pdfs[D3Q19_NW] = omega_w2 * (dir_indep_trm - (ux - uy) + F(1.5) * SQR(ux - uy)); + pdfs[D3Q19_SE] = omega_w2 * (dir_indep_trm + (ux - uy) + F(1.5) * SQR(ux - uy)); - pdfs[D3Q19_NE] = omega_w2 * (dir_indep_trm + (ux + uy) + 1.5 * SQR(ux + uy)); - pdfs[D3Q19_SW] = omega_w2 * (dir_indep_trm - (ux + uy) + 1.5 * SQR(ux + uy)); + pdfs[D3Q19_NE] = omega_w2 * (dir_indep_trm + (ux + uy) + F(1.5) * SQR(ux + uy)); + pdfs[D3Q19_SW] = omega_w2 * (dir_indep_trm - (ux + uy) + F(1.5) * SQR(ux + uy)); - pdfs[D3Q19_TW] = omega_w2 * (dir_indep_trm - (ux - uz) + 1.5 * SQR(ux - uz)); - pdfs[D3Q19_BE] = omega_w2 * (dir_indep_trm + (ux - uz) + 1.5 * SQR(ux - uz)); + pdfs[D3Q19_TW] = omega_w2 * (dir_indep_trm - (ux - uz) + F(1.5) * SQR(ux - uz)); + pdfs[D3Q19_BE] = omega_w2 * (dir_indep_trm + (ux - uz) + F(1.5) * SQR(ux - uz)); - pdfs[D3Q19_TE] = omega_w2 * (dir_indep_trm + (ux + uz) + 1.5 * SQR(ux + uz)); - pdfs[D3Q19_BW] = omega_w2 * (dir_indep_trm - (ux + uz) + 1.5 * SQR(ux + uz)); + pdfs[D3Q19_TE] = omega_w2 * (dir_indep_trm + (ux + uz) + F(1.5) * SQR(ux + uz)); + pdfs[D3Q19_BW] = omega_w2 * (dir_indep_trm - (ux + uz) + F(1.5) * SQR(ux + uz)); - pdfs[D3Q19_TS] = omega_w2 * (dir_indep_trm - (uy - uz) + 1.5 * SQR(uy - uz)); - pdfs[D3Q19_BN] = omega_w2 * (dir_indep_trm + (uy - uz) + 1.5 * SQR(uy - uz)); + pdfs[D3Q19_TS] = omega_w2 * (dir_indep_trm - (uy - uz) + F(1.5) * SQR(uy - uz)); + pdfs[D3Q19_BN] = omega_w2 * (dir_indep_trm + (uy - uz) + F(1.5) * SQR(uy - uz)); - pdfs[D3Q19_TN] = omega_w2 * (dir_indep_trm + (uy + uz) + 1.5 * SQR(uy + uz)); - pdfs[D3Q19_BS] = omega_w2 * (dir_indep_trm - (uy + uz) + 1.5 * SQR(uy + uz)); + pdfs[D3Q19_TN] = omega_w2 * (dir_indep_trm + (uy + uz) + F(1.5) * SQR(uy + uz)); + pdfs[D3Q19_BS] = omega_w2 * (dir_indep_trm - (uy + uz) + F(1.5) * SQR(uy + uz)); - pdfs[D3Q19_N] = omega_w1 * (dir_indep_trm + uy + 1.5 * SQR(uy)); - pdfs[D3Q19_S] = omega_w1 * (dir_indep_trm - uy + 1.5 * SQR(uy)); + pdfs[D3Q19_N] = omega_w1 * (dir_indep_trm + uy + F(1.5) * SQR(uy)); + pdfs[D3Q19_S] = omega_w1 * (dir_indep_trm - uy + F(1.5) * SQR(uy)); - pdfs[D3Q19_E] = omega_w1 * (dir_indep_trm + ux + 1.5 * SQR(ux)); - pdfs[D3Q19_W] = omega_w1 * (dir_indep_trm - ux + 1.5 * SQR(ux)); + pdfs[D3Q19_E] = omega_w1 * (dir_indep_trm + ux + F(1.5) * SQR(ux)); + pdfs[D3Q19_W] = omega_w1 * (dir_indep_trm - ux + F(1.5) * SQR(ux)); - pdfs[D3Q19_T] = omega_w1 * (dir_indep_trm + uz + 1.5 * SQR(uz)); - pdfs[D3Q19_B] = omega_w1 * (dir_indep_trm - uz + 1.5 * SQR(uz)); + pdfs[D3Q19_T] = omega_w1 * (dir_indep_trm + uz + F(1.5) * SQR(uz)); + pdfs[D3Q19_B] = omega_w1 * (dir_indep_trm - uz + F(1.5) * SQR(uz)); kd->SetNode(kd, x, y, z, pdfs); @@ -343,23 +346,23 @@ void KernelSetInitialVelocity(LatticeDesc * ld, KernelData * kd, CaseData * cd) int * lDims = ld->Dims; - // TODO: ux is overriden below... - PdfT ux = 0.09; // caseData->initUx; - PdfT uy = 0.0; // caseData->initUy; - PdfT uz = 0.0; // caseData->initUz; - PdfT dens = 1.0; + // TODO: fix ux is overriden below + PdfT ux = F(0.0); + PdfT uy = F(0.0); + PdfT uz = F(0.0); + PdfT dens = F(1.0); PdfT omega = cd->Omega; - PdfT w_0 = 1.0 / 3.0; - PdfT w_1 = 1.0 / 18.0; - PdfT w_2 = 1.0 / 36.0; + PdfT w_0 = F(1.0) / F( 3.0); + PdfT w_1 = F(1.0) / F(18.0); + PdfT w_2 = F(1.0) / F(36.0); PdfT dir_indep_trm; - PdfT omega_w0 = 3.0 * w_0 * omega; - PdfT omega_w1 = 3.0 * w_1 * omega; - PdfT omega_w2 = 3.0 * w_2 * omega; - PdfT one_third = 1.0 / 3.0; + PdfT omega_w0 = F(3.0) * w_0 * omega; + PdfT omega_w1 = F(3.0) * w_1 * omega; + PdfT omega_w2 = F(3.0) * w_2 * omega; + PdfT one_third = F(1.0) / F(3.0); int nX = lDims[0]; int nY = lDims[1]; @@ -376,14 +379,14 @@ void KernelSetInitialVelocity(LatticeDesc * ld, KernelData * kd, CaseData * cd) if (ld->Lattice[L_INDEX_4(ld->Dims, x, y, z)] == LAT_CELL_FLUID) { - ux = 0.0; - uy = 0.0; - uz = 0.0; + ux = F(0.0); + uy = F(0.0); + uz = F(0.0); kd->GetNode(kd, x, y, z, pdfs); - density = 0.0; + density = F(0.0); #define X(name, idx, idxinv, _x, _y, _z) density += pdfs[idx]; D3Q19_LIST @@ -391,39 +394,39 @@ void KernelSetInitialVelocity(LatticeDesc * ld, KernelData * kd, CaseData * cd) #define SQR(a) ((a)*(a)) - dir_indep_trm = one_third * dens - 0.5 * (ux * ux + uy * uy + uz * uz); + dir_indep_trm = one_third * dens - F(0.5) * (ux * ux + uy * uy + uz * uz); pdfs[D3Q19_C] = omega_w0 * (dir_indep_trm); - pdfs[D3Q19_NW] = omega_w2 * (dir_indep_trm - (ux - uy) + 1.5 * SQR(ux - uy)); - pdfs[D3Q19_SE] = omega_w2 * (dir_indep_trm + (ux - uy) + 1.5 * SQR(ux - uy)); + pdfs[D3Q19_NW] = omega_w2 * (dir_indep_trm - (ux - uy) + F(1.5) * SQR(ux - uy)); + pdfs[D3Q19_SE] = omega_w2 * (dir_indep_trm + (ux - uy) + F(1.5) * SQR(ux - uy)); - pdfs[D3Q19_NE] = omega_w2 * (dir_indep_trm + (ux + uy) + 1.5 * SQR(ux + uy)); - pdfs[D3Q19_SW] = omega_w2 * (dir_indep_trm - (ux + uy) + 1.5 * SQR(ux + uy)); + pdfs[D3Q19_NE] = omega_w2 * (dir_indep_trm + (ux + uy) + F(1.5) * SQR(ux + uy)); + pdfs[D3Q19_SW] = omega_w2 * (dir_indep_trm - (ux + uy) + F(1.5) * SQR(ux + uy)); - pdfs[D3Q19_TW] = omega_w2 * (dir_indep_trm - (ux - uz) + 1.5 * SQR(ux - uz)); - pdfs[D3Q19_BE] = omega_w2 * (dir_indep_trm + (ux - uz) + 1.5 * SQR(ux - uz)); + pdfs[D3Q19_TW] = omega_w2 * (dir_indep_trm - (ux - uz) + F(1.5) * SQR(ux - uz)); + pdfs[D3Q19_BE] = omega_w2 * (dir_indep_trm + (ux - uz) + F(1.5) * SQR(ux - uz)); - pdfs[D3Q19_TE] = omega_w2 * (dir_indep_trm + (ux + uz) + 1.5 * SQR(ux + uz)); - pdfs[D3Q19_BW] = omega_w2 * (dir_indep_trm - (ux + uz) + 1.5 * SQR(ux + uz)); + pdfs[D3Q19_TE] = omega_w2 * (dir_indep_trm + (ux + uz) + F(1.5) * SQR(ux + uz)); + pdfs[D3Q19_BW] = omega_w2 * (dir_indep_trm - (ux + uz) + F(1.5) * SQR(ux + uz)); - pdfs[D3Q19_TS] = omega_w2 * (dir_indep_trm - (uy - uz) + 1.5 * SQR(uy - uz)); - pdfs[D3Q19_BN] = omega_w2 * (dir_indep_trm + (uy - uz) + 1.5 * SQR(uy - uz)); + pdfs[D3Q19_TS] = omega_w2 * (dir_indep_trm - (uy - uz) + F(1.5) * SQR(uy - uz)); + pdfs[D3Q19_BN] = omega_w2 * (dir_indep_trm + (uy - uz) + F(1.5) * SQR(uy - uz)); - pdfs[D3Q19_TN] = omega_w2 * (dir_indep_trm + (uy + uz) + 1.5 * SQR(uy + uz)); - pdfs[D3Q19_BS] = omega_w2 * (dir_indep_trm - (uy + uz) + 1.5 * SQR(uy + uz)); + pdfs[D3Q19_TN] = omega_w2 * (dir_indep_trm + (uy + uz) + F(1.5) * SQR(uy + uz)); + pdfs[D3Q19_BS] = omega_w2 * (dir_indep_trm - (uy + uz) + F(1.5) * SQR(uy + uz)); - pdfs[D3Q19_N] = omega_w1 * (dir_indep_trm + uy + 1.5 * SQR(uy)); - pdfs[D3Q19_S] = omega_w1 * (dir_indep_trm - uy + 1.5 * SQR(uy)); + pdfs[D3Q19_N] = omega_w1 * (dir_indep_trm + uy + F(1.5) * SQR(uy)); + pdfs[D3Q19_S] = omega_w1 * (dir_indep_trm - uy + F(1.5) * SQR(uy)); - pdfs[D3Q19_E] = omega_w1 * (dir_indep_trm + ux + 1.5 * SQR(ux)); - pdfs[D3Q19_W] = omega_w1 * (dir_indep_trm - ux + 1.5 * SQR(ux)); + pdfs[D3Q19_E] = omega_w1 * (dir_indep_trm + ux + F(1.5) * SQR(ux)); + pdfs[D3Q19_W] = omega_w1 * (dir_indep_trm - ux + F(1.5) * SQR(ux)); - pdfs[D3Q19_T] = omega_w1 * (dir_indep_trm + uz + 1.5 * SQR(uz)); - pdfs[D3Q19_B] = omega_w1 * (dir_indep_trm - uz + 1.5 * SQR(uz)); + pdfs[D3Q19_T] = omega_w1 * (dir_indep_trm + uz + F(1.5) * SQR(uz)); + pdfs[D3Q19_B] = omega_w1 * (dir_indep_trm - uz + F(1.5) * SQR(uz)); #undef SQR @@ -447,7 +450,7 @@ void KernelSetInitialVelocity(LatticeDesc * ld, KernelData * kd, CaseData * cd) // static PdfT CalcXVelForPipeProfile(PdfT maxRadiusSquared, PdfT curRadiusSquared, PdfT xForce, PdfT viscosity) { - return xForce*(maxRadiusSquared - curRadiusSquared) / (2.0*viscosity); + return xForce * (maxRadiusSquared - curRadiusSquared) / (F(2.0) * viscosity); } static void KernelGetXSlice(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * outputArray, int xPos) @@ -462,7 +465,7 @@ static void KernelGetXSlice(LatticeDesc * ld, KernelData * kd, CaseData * cd, Pd Assert(xPos < ld->Dims[0]); - PdfT ux = 0.0; + PdfT ux = F(0.0); // Declare pdf_N, pdf_E, pdf_S, pdf_W, ... #define X(name, idx, idxinv, x, y, z) PdfT JOIN(pdf_,name); @@ -486,13 +489,13 @@ static void KernelGetXSlice(LatticeDesc * ld, KernelData * kd, CaseData * cd, Pd pdf_W - pdf_NW - pdf_SW - pdf_TW - pdf_BW; #ifdef VERIFICATION - ux += 0.5 * cd->XForce; + ux += F(0.5) * cd->XForce; #endif outputArray[y * nZ + z] = ux; } else { - outputArray[y * nZ + z] = 0.0; + outputArray[y * nZ + z] = F(0.0); } } } @@ -517,7 +520,7 @@ void KernelVerifiy(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * erro int nZ = ld->Dims[2]; PdfT omega = cd->Omega; - PdfT viscosity = (1.0 / omega - 0.5) / 3.0; + PdfT viscosity = (F(1.0) / omega - F(0.5)) / F(3.0); // ux averaged across cross sections in x direction PdfT * outputArray = (PdfT *)malloc(nZ * nY * sizeof(PdfT)); @@ -532,15 +535,15 @@ void KernelVerifiy(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * erro FILE * fh; char fileName[1024]; - PdfT tmpAvgUx = 0.0; - PdfT tmpAnalyUx = 0.0; + PdfT tmpAvgUx = F(0.0); + PdfT tmpAnalyUx = F(0.0); int flagEvenNy = 0; int y = 0; if (nY % 2 == 0) flagEvenNy = 1; - y = (nY-flagEvenNy-1)/2; + y = (nY - flagEvenNy - 1) / 2; snprintf(fileName, sizeof(fileName), "flow-profile.dat"); @@ -559,37 +562,37 @@ void KernelVerifiy(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * erro fprintf(fh, "# Plot graphically: gnuplot -e \"plot \\\"%s\\\" u 1:3 w linesp t \\\"analytical\\\", \\\"\\\" u 1:4 w linesp t \\\"simulation\\\"; pause -1;\"\n", fileName); fprintf(fh, "# z coord., radius, analytic, simulation, diff abs, diff rel, undim_analytic, undim_sim\n"); - double deviation = 0.0; - double curRadiusSquared; - double center = nY / 2.0; - double minDiameter = nY; + PdfT deviation = F(0.0); + PdfT curRadiusSquared; + PdfT center = nY / F(2.0); + PdfT minDiameter = (PdfT)nY; #define SQR(a) ((a)*(a)) - double minRadiusSquared = SQR(minDiameter / 2.0 - 1.0); + PdfT minRadiusSquared = SQR(minDiameter / F(2.0) - F(1.0)); #undef SQR - double u_max = cd->XForce*minRadiusSquared/(2.0*viscosity); + PdfT u_max = cd->XForce*minRadiusSquared / (F(2.0) * viscosity); for(int z = 0; z < nZ; ++z) { fprintf(fh, "%d\t", z); #define SQR(a) ((a)*(a)) - curRadiusSquared = SQR(z-center+0.5); + curRadiusSquared = SQR(z - center + F(0.5)); // dimensionless radius - fprintf(fh, "%e\t", (z-center+0.5)/center); + fprintf(fh, "%e\t", (z - center + F(0.5)) / center); // analytic profile if(curRadiusSquared >= minRadiusSquared) - tmpAnalyUx = 0.0; + tmpAnalyUx = F(0.0); else tmpAnalyUx = CalcXVelForPipeProfile(minRadiusSquared, curRadiusSquared, cd->XForce, viscosity); //averaged profile if(flagEvenNy == 1) - tmpAvgUx = (outputArray[y*nZ + z] + outputArray[(y+1)*nZ + z])/2.0; + tmpAvgUx = (outputArray[y * nZ + z] + outputArray[(y + 1) * nZ + z]) / F(2.0); else - tmpAvgUx = outputArray[y*nZ + z]; + tmpAvgUx = outputArray[y * nZ + z]; fprintf(fh, "%e\t", tmpAnalyUx); fprintf(fh, "%e\t", tmpAvgUx); @@ -597,7 +600,7 @@ void KernelVerifiy(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * erro fprintf(fh, "%e\t", fabs(tmpAnalyUx-tmpAvgUx)); if (tmpAnalyUx != 0.0) { fprintf(fh, "%e\t", fabs(tmpAnalyUx - tmpAvgUx) / tmpAnalyUx); - deviation += SQR(fabs(tmpAnalyUx - tmpAvgUx) / tmpAnalyUx); + deviation += SQR((PdfT)fabs(tmpAnalyUx - tmpAvgUx) / tmpAnalyUx); } else { fprintf(fh, "0.0\t"); @@ -610,7 +613,7 @@ void KernelVerifiy(LatticeDesc * ld, KernelData * kd, CaseData * cd, PdfT * erro #undef SQR } - *errorNorm = sqrt(deviation); + *errorNorm = (PdfT)sqrt(deviation); printf("# Kernel validation: L2 error norm of relative error: %e\n", *errorNorm); @@ -709,13 +712,12 @@ void KernelStatisticsAdv(KernelData * kd, LatticeDesc * ld, CaseData * cd, int i fprintf(fh, "# Average density and average x velocity over each cross section in x direction. Snapshot taken at iteration %d.\n", iteration); fprintf(fh, "# Plot on terminal: gnuplot -e \"set terminal dumb; plot \\\"%s\\\" u 1:2; plot \\\"%s\\\" u 1:3;\"\n", fileName, fileName); -// fprintf(fh, "# Plot graphically: gnuplot -e \"plot \\\"%s\\\" u 1:3 w linesp t \\\"l\\\", \\\"\\\" u 1:4 w linesp t \\\"simulation\\\"; pause -1;" fprintf(fh, "# x, avg density, avg ux\n"); for (x = 0; x < nX; ++x) { - uxSum = 0.0; - densitySum = 0.0; + uxSum = F(0.0); + densitySum = F(0.0); nFluidNodes = 0; for (int y = 0; y < nY; ++y) { @@ -764,9 +766,9 @@ void KernelAddBodyForce(KernelData * kd, LatticeDesc * ld, CaseData * cd) int nY = kd->Dims[1]; int nZ = kd->Dims[2]; - PdfT w_0 = 1.0 / 3.0; // C - PdfT w_1 = 1.0 / 18.0; // N,S,E,W,T,B - PdfT w_2 = 1.0 / 36.0; // NE,NW,SE,SW,TE,TW,BE,BW,TN,TS,BN,BS + PdfT w_0 = F(1.0) / F( 3.0); // C + PdfT w_1 = F(1.0) / F(18.0); // N,S,E,W,T,B + PdfT w_2 = F(1.0) / F(36.0); // NE,NW,SE,SW,TE,TW,BE,BW,TN,TS,BN,BS PdfT w[] = {w_1,w_1,w_1,w_1,w_2,w_2,w_2,w_2,w_1,w_2,w_2,w_2,w_2,w_1,w_2,w_2,w_2,w_2,w_0}; PdfT xForce = cd->XForce; @@ -788,9 +790,9 @@ void KernelAddBodyForce(KernelData * kd, LatticeDesc * ld, CaseData * cd) // load pdfs into temp array kd->GetNode(kd, x, y, z, pdfs); - // add body force in x direction ( method by Luo) + // add body force in x direction (method by Luo) for (int d = 0; d < N_D3Q19; ++d) { - pdfs[d] = pdfs[d] + 3.0*w[d]*D3Q19_X[d]*xForce; + pdfs[d] = pdfs[d] + F(3.0) * w[d] * D3Q19_X[d] * xForce; } kd->SetNode(kd, x, y, z, pdfs); diff --git a/src/Kernel.h b/src/Kernel.h index 99e126b..05ada4e 100644 --- a/src/Kernel.h +++ b/src/Kernel.h @@ -60,9 +60,15 @@ #endif +#ifdef PRECISION_DP + typedef double PdfT; +#elif defined(PRECISION_SP) + typedef float PdfT; +#else + #error PRECISION must be defined as dp or sp. +#endif -typedef double PdfT; - + #define F(number) (PdfT)(number) #define D3Q19 diff --git a/src/KernelFunctions.h b/src/KernelFunctions.h index 557c653..6efadd9 100644 --- a/src/KernelFunctions.h +++ b/src/KernelFunctions.h @@ -30,6 +30,7 @@ #include "BenchKernelD3Q19.h" #include "BenchKernelD3Q19Aa.h" #include "BenchKernelD3Q19AaVec.h" +#include "BenchKernelD3Q19AaVecSl.h" #include "BenchKernelD3Q19List.h" #include "BenchKernelD3Q19ListAa.h" #include "BenchKernelD3Q19ListAaRia.h" @@ -149,8 +150,14 @@ KernelFunctions g_kernels[] = .Name = "aa-vec-soa", .Init = D3Q19AaVecInit_AaSoA, .Deinit = D3Q19AaVecDeinit_AaSoA + }, + { + .Name = "aa-vec-sl-soa", + .Init = D3Q19AaVecSlInit_AaSoA, + .Deinit = D3Q19AaVecSlDeinit_AaSoA } + }; #endif // __KERNEL_FUNCTIONS_H__ diff --git a/src/Lattice.h b/src/Lattice.h index c23b70f..97ef1f4 100644 --- a/src/Lattice.h +++ b/src/Lattice.h @@ -51,6 +51,7 @@ typedef struct LatticeDesc_ { int PeriodicX; // Periodic in X direction. int PeriodicY; // Periodic in Y direction. int PeriodicZ; // Periodic in Z direction. + const char * Name; // Geometry Name, points to statically allocated names, do not free! } LatticeDesc; diff --git a/src/Main.c b/src/Main.c index 65a4035..10dfbbe 100644 --- a/src/Main.c +++ b/src/Main.c @@ -133,14 +133,14 @@ int main(int argc, char * argv[]) CaseData cd; - cd.MaxIterations = 1000; - cd.RhoIn = 1.0; - cd.RhoOut = 1.0; - cd.Omega = 1.0; + cd.MaxIterations = 10; + cd.RhoIn = F(1.0); + cd.RhoOut = F(1.0); + cd.Omega = F(1.0); cd.VtkOutput = 0; cd.VtkModulus = 100; cd.StatisticsModulus = 100; - cd.XForce = 0.00001; + cd.XForce = F(0.00001); kernelToUse = "push-soa"; Parameters p; @@ -156,7 +156,7 @@ int main(int argc, char * argv[]) printf("This program comes with ABSOLUTELY NO WARRANTY; for details see LICENSE.\n"); printf("This is free software, and you are welcome to redistribute it under certain conditions.\n"); printf("\n"); - printf("LBM Benchmark Kernels %d.%d, compiled %s %s, type: %s\n", + printf("# LBM Benchmark Kernels %d.%d, compiled %s %s, type: %s\n", LBM_BENCH_KERNELS_VERSION_MAJOR, LBM_BENCH_KERNELS_VERSION_MINOR, __DATE__, __TIME__, #ifdef VERIFICATION "verification" @@ -208,40 +208,40 @@ int main(int argc, char * argv[]) else if (ARG_IS("-rho-in") ||ARG_IS("--rho-in")) { NEXT_ARG_PRESENT(); - cd.RhoIn = strtod(argv[++i], NULL); + cd.RhoIn = F(strtod(argv[++i], NULL)); } else if (ARG_IS("-rho-out") ||ARG_IS("--rho-out")) { NEXT_ARG_PRESENT(); - cd.RhoOut = strtod(argv[++i], NULL); + cd.RhoOut = F(strtod(argv[++i], NULL)); } else if (ARG_IS("-omega") ||ARG_IS("--omega")) { NEXT_ARG_PRESENT(); - cd.Omega = strtod(argv[++i], NULL); + cd.Omega = F(strtod(argv[++i], NULL)); } else if (ARG_IS("-x-force") ||ARG_IS("--x-force")) { NEXT_ARG_PRESENT(); - cd.XForce = strtod(argv[++i], NULL); + cd.XForce = F(strtod(argv[++i], NULL)); } else if (ARG_IS("-verify") || ARG_IS("--verify")) { #ifdef VERIFICATION // Choose this preset for verification. As geometry type "box" is - // used but x and y direction are made pridoc. + // used but x and y direction are made periodic. // Everything else can be altered, but enough iterations should be // performed in order to receive a fully developed flow field. verify = 1; - cd.Omega = 1.0; - cd.RhoIn = 1.0; - cd.RhoOut = 1.0; + cd.Omega = F(1.0); + cd.RhoIn = F(1.0); + cd.RhoOut = F(1.0); geometryType = "box"; dims[0] = 16; dims[1] = 16; dims[2] = 16; - cd.XForce = 0.00001; + cd.XForce = F(0.00001); cd.MaxIterations = 1000; periodic[0] = 1; periodic[1] = 1; @@ -407,11 +407,10 @@ int main(int argc, char * argv[]) omp_set_num_threads(nThreads); #endif - LatticeDesc ld; - - GeoCreateByStr(geometryType, dims, periodic, &ld); - const char * defines[] = { +#ifdef DEBUG + "DEBUG", +#endif #ifdef VTK_OUTPUT "VTK_OUTPUT", #endif @@ -426,41 +425,72 @@ int main(int argc, char * argv[]) #endif #ifdef HAVE_LIKWID "HAVE_LIKWID", +#endif +#ifdef INTEL_OPT_DIRECTIVES + "INTEL_OPT_DIRECTIVES", #endif }; - printf("# defines: "); + printf("#\n"); + +#ifdef PRECISION_DP + printf("# - floating point: double precision (%lu b, PRECISION_DP defined)\n", sizeof(PdfT)); +#elif defined(PRECISION_SP) + printf("# - floating point: single precision (%lu b, PRECISION_SP defined)\n", sizeof(PdfT)); +#else + printf("# - floating point: UNKNOWN (%lu b)\n", sizeof(PdfT)); +#endif + +#ifdef VECTOR_AVX + printf("# - intrinsics: AVX (VECTOR_AVX defined)\n"); +#elif defined(VECTOR_SSE) + printf("# - intrinsics: SSE (VECTOR_SSE defined)\n"); +#else + printf("# - intrinsics: UNKNOWN\n"); +#endif + + printf("# - defines: "); for (int j = 0; j < N_ELEMS(defines); ++j) { printf("%s ", defines[j]); } printf("\n"); - printf("# nodes total: % 10d\n", ld.nObst + ld.nFluid); - printf("# nodes fluid: % 10d (including inlet & outlet)\n", ld.nFluid); - printf("# nodes obstacles: % 10d\n", ld.nObst); - printf("# nodes inlet: % 10d\n", ld.nInlet); - printf("# nodes outlet: % 10d\n", ld.nOutlet); - printf("# periodicity: x: %d y: %d z: %d\n", ld.PeriodicX, ld.PeriodicY, ld.PeriodicZ); +#ifdef __x86_64__ + printf("# - fp status: DAZ: %d FTZ: %d\n", FpGetDaz(), FpGetFtz()); +#endif + + printf("# - iterations: %d\n", cd.MaxIterations); + + LatticeDesc ld; + + GeoCreateByStr(geometryType, dims, periodic, &ld); + + printf("# - geometry:\n"); + printf("# type: %s\n", ld.Name); + printf("# dimensions: %d x %d x %d (x, y, z)\n", ld.Dims[0], ld.Dims[1], ld.Dims[2]); + + printf("# nodes total: %d\n", ld.nObst + ld.nFluid); + printf("# nodes fluid: %d (including inlet & outlet)\n", ld.nFluid); + printf("# nodes obstacles: %d\n", ld.nObst); + printf("# nodes inlet: %d\n", ld.nInlet); + printf("# nodes outlet: %d\n", ld.nOutlet); + printf("# periodicity: x: %d y: %d z: %d\n", ld.PeriodicX, ld.PeriodicY, ld.PeriodicZ); #ifdef VTK_OUTPUT - printf("# VTK output: %d (every %d iteration)\n", cd.VtkOutput, cd.VtkModulus); + printf("# - VTK output: %d (every %d iteration)\n", cd.VtkOutput, cd.VtkModulus); #endif #ifdef STATISTICS - printf("# statistics: every %d iteration\n", cd.StatisticsModulus); + printf("# - statistics: every %d iteration\n", cd.StatisticsModulus); #endif - printf("# omega: %f\n", cd.Omega); - printf("# initial density at inlet/outlet:\n"); - printf("# rho in: %e\n", cd.RhoIn); - printf("# rho out: %e\n", cd.RhoOut); - printf("# iterations: %d\n", cd.MaxIterations); - -#ifdef __x86_64__ - printf("# fp status: DAZ: %d FTZ: %d\n", FpGetDaz(), FpGetFtz()); -#endif + printf("# - flow:\n"); + printf("# omega: %f\n", cd.Omega); + printf("# initial density at inlet/outlet:\n"); + printf("# rho in: %e\n", cd.RhoIn); + printf("# rho out: %e\n", cd.RhoOut); #ifdef _OPENMP - printf("# OpenMP threads: %d\n", omp_get_max_threads()); + printf("# - OpenMP threads: %d\n", omp_get_max_threads()); if (pinString != NULL) { #pragma omp parallel @@ -482,7 +512,7 @@ int main(int argc, char * argv[]) #pragma omp for ordered for (int i = 0; i < omp_get_num_threads(); ++i) { #pragma omp ordered - printf("# thread %2d pinned to core(s): %s\n", threadId, cpuList); + printf("# thread %2d pinned to core(s): %s\n", threadId, cpuList); } free((void *)cpuList); @@ -513,7 +543,7 @@ int main(int argc, char * argv[]) } printf("#\n"); - printf("# kernel: %s\n", kf->Name); + printf("# - kernel: %s\n", kf->Name); printf("#\n"); // Initialize kernel by calling its own initialization function @@ -553,13 +583,20 @@ int main(int argc, char * argv[]) double perf = (double)ld.nFluid * (double)cd.MaxIterations / duration / 1.e6; - printf("P: %f MFLUP/s t: %d d: %f s iter: %d fnodes: %f x1e6 geo: %s kernel: %s %s\n", + printf("P: %f MFLUP/s t: %d d: %f s iter: %d fnodes: %f x1e6 geo: %s kernel: %s %s %s\n", perf, nThreads, duration, cd.MaxIterations, ld.nFluid / 1e6, geometryType, kernelToUse, #ifdef VERIFICATION - "VERIFICATION" + "VERIFICATION", +#else + "B", +#endif +#ifdef PRECISION_DP + "dp" +#elif defined(PRECISION_SP) + "sp" #else - "B" + "unknown-precision" #endif ); diff --git a/src/Makefile b/src/Makefile index 99ca902..52f0bf8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -58,6 +58,9 @@ ISA ?= avx LIKWID ?= off +# Which floating point precision to use: dp (double precision) or sp (single preicision) +PRECISION ?= dp + # Global settings for the Makefile SHELL = sh @@ -91,8 +94,8 @@ SED = sed # Where to store objects and dependency files. -OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(TAG) -DEP_DIR = obj/$(CONFIG)-$(BUILD)$(TAG)-dep +OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(PREC)$(TAG) +DEP_DIR = obj/$(CONFIG)-$(BUILD)$(PREC)$(TAG)-dep # Sources to consider. SOURCES_C = Main.c Memory.c Geometry.c Kernel.c \ @@ -134,7 +137,9 @@ OBJ_C = $(foreach SOURCE,$(SOURCES_C),$(OBJECT_DIR)/$(SOURCE:%.c=%.o)) \ $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaSoA.o \ $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaSoA.o \ $(OBJECT_DIR)/BenchKernelD3Q19AaVec_AaSoA.o \ - $(OBJECT_DIR)/BenchKernelD3Q19AaVecCommon_AaSoA.o + $(OBJECT_DIR)/BenchKernelD3Q19AaVecCommon_AaSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19AaVecSl_AaSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19AaVecSlCommon_AaSoA.o OBJ = $(OBJ_C) @@ -210,6 +215,19 @@ ifeq (on,$(LIKWID)) LD_LIBS += $(LIKWID_LIB) -llikwid endif + +ifeq (dp,$(PRECISION)) + PP_FLAGS += $(D)PRECISION_DP + PREC=-dp +else +ifeq (sp,$(PRECISION)) + PP_FLAGS += $(D)PRECISION_SP + PREC=-sp +else + $(error PRECISION is only be allowed to be sp (single precision) or dp (doble precision)) +endif +endif + # ARCH can only be assigned a string without a space. The space is escaped as # a comma which we have to replace here. @@ -225,8 +243,12 @@ endif .phony: all clean clean-all -$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) TARCH=$(COLOR_CYAN)$(TARCH)$(COLOR_NO) building $(.DEFAULT_GOAL)...")) +#$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) TARCH=$(COLOR_CYAN)$(TARCH)$(COLOR_NO) building $(.DEFAULT_GOAL)...")) +$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) PRECISION=$(COLOR_CYAN)$(PRECISION)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# target=$(.DEFAULT_GOAL)")) $(info # Object dir: $(OBJECT_DIR)) $(info # Dependency dir: $(DEP_DIR)) @@ -234,7 +256,7 @@ $(info # Dependency dir: $(DEP_DIR)) BIN_DIR=../bin -all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG) +all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(PREC)$(TAG) # ------------------------------------------------------------------------ @@ -255,11 +277,14 @@ all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG) $(BIN_DIR): [ -d "$@" ] || mkdir -p "$@" -$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR) +$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(PREC)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR) @$(ECHO_E) "linking: $(COLOR_CYAN)$@$(COLOR_NO)" $(LD) $(LD_FLAGS) -o $@ $(filter-out $(REBUILD_DEPS),$^) $(LD_LIBS) @$(ECHO_E) "# Builded binary: $(COLOR_CYAN)$@$(COLOR_NO)" - @$(ECHO_E) "# Configuration was: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) target=$(.DEFAULT_GOAL)" + @$(ECHO_E) "# Configuration was: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) PRECISION=$(COLOR_CYAN)$(PRECISION)$(COLOR_NO)" + @$(ECHO_E) "# OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO)" + @$(ECHO_E) "# VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO)" + @$(ECHO_E) "# target=$(.DEFAULT_GOAL)" $(OBJECT_DIR)/%_SoA.o: %.c $(REBUILD_DEPS) @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO)" @@ -308,7 +333,7 @@ $(DEP_DIR)/.target: # ------------------------------------------------------------------------ # Current configuration. -MAKE_CFG = SYSTEM=$(SYSTEM) // BUILD=$(BUILD) // MAKEOVERRIDES=\"$(strip $(MAKEOVERRIDES))\" // VERIFICATION=$(VERIFICATION) // STATISTICS=$(STATISTICS) // VTK_OUTPUT=$(VTK_OUTPUT) // VTK_OUTPUT_ASCII=$(VTK_OUTPUT_ASCII) // LID_DRIVEN_CAVITY=$(LID_DRIVEN_CAVITY) // ISA=$(ISA) // LIKWID=$(LIKWID) +MAKE_CFG = SYSTEM=$(SYSTEM) // BUILD=$(BUILD) // MAKEOVERRIDES=\"$(strip $(MAKEOVERRIDES))\" // VERIFICATION=$(VERIFICATION) // STATISTICS=$(STATISTICS) // VTK_OUTPUT=$(VTK_OUTPUT) // VTK_OUTPUT_ASCII=$(VTK_OUTPUT_ASCII) // LID_DRIVEN_CAVITY=$(LID_DRIVEN_CAVITY) // ISA=$(ISA) // LIKWID=$(LIKWID) // PRECISION=$(PRECISION) # Compare current configuration to the last one so we know when to # rebuild this system/target despite when sources have not changed. diff --git a/src/Vector.h b/src/Vector.h index 41b9a79..af12f77 100644 --- a/src/Vector.h +++ b/src/Vector.h @@ -36,48 +36,104 @@ #error Only VECTOR_AVX or VECTOR_SSE can be defined at the same time. #endif -#ifdef VECTOR_AVX +#if !defined(PRECISION_DP) && !defined(PRECISION_SP) + #error PRECISION_DP or PRECISION_SP must be defined. +#endif - #include - // Vector size in double-precision floatin-point numbers. - #define VSIZE 4 +#if defined(PRECISION_DP) && defined(PRECISION_SP) + #error Only PRECISION_DP or PRECISION_SP can be defined at the same time. +#endif - #define VPDFT __m256d +#ifdef PRECISION_DP - #define VSET(scalar) _mm256_set1_pd(scalar) + #ifdef VECTOR_AVX - #define VLD(expr) _mm256_load_pd(expr) - #define VLDU(expr) _mm256_loadu_pd(expr) + #include + // Vector size in double-precision floating-point numbers. + #define VSIZE 4 - #define VST(dst, src) _mm256_store_pd(dst, src) - #define VSTU(dst, src) _mm256_storeu_pd(dst, src) - #define VSTNT(dst, src) _mm256_stream_pd(dst, src) + #define VPDFT __m256d - #define VMUL(a, b) _mm256_mul_pd(a, b) - #define VADD(a, b) _mm256_add_pd(a, b) - #define VSUB(a, b) _mm256_sub_pd(a, b) -#endif + #define VSET(scalar) _mm256_set1_pd(scalar) -#ifdef VECTOR_SSE - #include - // Vector size in double-precision floatin-point numbers. - #define VSIZE 2 + #define VLD(expr) _mm256_load_pd(expr) + #define VLDU(expr) _mm256_loadu_pd(expr) - #define VPDFT __m128d + #define VST(dst, src) _mm256_store_pd(dst, src) + #define VSTU(dst, src) _mm256_storeu_pd(dst, src) + #define VSTNT(dst, src) _mm256_stream_pd(dst, src) - #define VSET(scalar) _mm_set1_pd(scalar) + #define VMUL(a, b) _mm256_mul_pd(a, b) + #define VADD(a, b) _mm256_add_pd(a, b) + #define VSUB(a, b) _mm256_sub_pd(a, b) + #endif - #define VLD(expr) _mm_load_pd(expr) - #define VLDU(expr) _mm_loadu_pd(expr) + #ifdef VECTOR_SSE + #include + // Vector size in double-precision floating-point numbers. + #define VSIZE 2 - #define VST(dst, src) _mm_store_pd(dst, src) - #define VSTU(dst, src) _mm_storeu_pd(dst, src) - #define VSTNT(dst, src) _mm_stream_pd(dst, src) + #define VPDFT __m128d - #define VMUL(a, b) _mm_mul_pd(a, b) - #define VADD(a, b) _mm_add_pd(a, b) - #define VSUB(a, b) _mm_sub_pd(a, b) -#endif + #define VSET(scalar) _mm_set1_pd(scalar) + + #define VLD(expr) _mm_load_pd(expr) + #define VLDU(expr) _mm_loadu_pd(expr) + + #define VST(dst, src) _mm_store_pd(dst, src) + #define VSTU(dst, src) _mm_storeu_pd(dst, src) + #define VSTNT(dst, src) _mm_stream_pd(dst, src) + + #define VMUL(a, b) _mm_mul_pd(a, b) + #define VADD(a, b) _mm_add_pd(a, b) + #define VSUB(a, b) _mm_sub_pd(a, b) + #endif + +#elif defined(PRECISION_SP) + + #ifdef VECTOR_AVX + + #include + // Vector size in double-precision floating-point numbers. + #define VSIZE 8 + + #define VPDFT __m256 + + #define VSET(scalar) _mm256_set1_ps(scalar) + + #define VLD(expr) _mm256_load_ps(expr) + #define VLDU(expr) _mm256_loadu_ps(expr) + + #define VST(dst, src) _mm256_store_ps(dst, src) + #define VSTU(dst, src) _mm256_storeu_ps(dst, src) + #define VSTNT(dst, src) _mm256_stream_ps(dst, src) + + #define VMUL(a, b) _mm256_mul_ps(a, b) + #define VADD(a, b) _mm256_add_ps(a, b) + #define VSUB(a, b) _mm256_sub_ps(a, b) + #endif + + #ifdef VECTOR_SSE + #include + // Vector size in double-precision floating-point numbers. + #define VSIZE 4 + + #define VPDFT __m128 + + #define VSET(scalar) _mm_set1_ps(scalar) + + #define VLD(expr) _mm_load_ps(expr) + #define VLDU(expr) _mm_loadu_ps(expr) + + #define VST(dst, src) _mm_store_ps(dst, src) + #define VSTU(dst, src) _mm_storeu_ps(dst, src) + #define VSTNT(dst, src) _mm_stream_ps(dst, src) + + #define VMUL(a, b) _mm_mul_ps(a, b) + #define VADD(a, b) _mm_add_ps(a, b) + #define VSUB(a, b) _mm_sub_ps(a, b) + #endif +#endif // PRECISION #endif // __VECTOR_H__ diff --git a/src/test.sh b/src/test.sh index a0e8ad6..121de49 100755 --- a/src/test.sh +++ b/src/test.sh @@ -30,6 +30,9 @@ set -e XTag="-test" +# How many parallel processes during make. +NProc="10" + Build=release if [ "$#" -lt 1 ]; then @@ -53,11 +56,54 @@ fi Config="$1" make clean-all -make -j CONFIG=$Config TAG=$XTag-debug -make -j CONFIG=$Config BUILD=$Build TAG=$XTag-v VERIFICATION=on -make -j CONFIG=$Config BUILD=$Build TAG=$XTag-b BENCHMARK=on -BinaryV="../bin/lbmbenchk-$Config-$Build$XTag-v" -BinaryB="../bin/lbmbenchk-$Config-$Build$XTag-b" +make -j $NProc PRECISION=dp CONFIG=$Config TAG=$XTag-debug +make -j $NProc PRECISION=dp CONFIG=$Config BUILD=$Build TAG=$XTag-v VERIFICATION=on +make -j $NProc PRECISION=dp CONFIG=$Config BUILD=$Build TAG=$XTag-b BENCHMARK=on + +BinaryVDp="../bin/lbmbenchk-$Config-$Build-dp$XTag-v" +BinaryBDp="../bin/lbmbenchk-$Config-$Build-dp$XTag-b" + + +make -j $NProc PRECISION=sp CONFIG=$Config TAG=$XTag-debug +make -j $NProc PRECISION=sp CONFIG=$Config BUILD=$Build TAG=$XTag-v VERIFICATION=on +make -j $NProc PRECISION=sp CONFIG=$Config BUILD=$Build TAG=$XTag-b BENCHMARK=on + +BinaryVSp="../bin/lbmbenchk-$Config-$Build-sp$XTag-v" +BinaryBSp="../bin/lbmbenchk-$Config-$Build-sp$XTag-b" + + +echo "#" +echo "# [test.sh] ./test-verification.sh \"$BinaryVDp\"" +echo "#" + +./test-verification.sh "$BinaryVDp" + +ExitCodeDp="$?" + +echo "#" +echo "# [test.sh] ./test-verification.sh \"$BinaryVSp\"" +echo "#" + +./test-verification.sh "$BinaryVSp" + +ExitCodeSp="$?" + +ResultDp="errors occurred" +ResultSp="errors occurred" + +if [ "$ExitCodeDp" == "0" ]; then ResultDp="OK"; fi +if [ "$ExitCodeSp" == "0" ]; then ResultSp="OK"; fi + +echo "#" +echo "# [test.sh] test double precision: $ResultDp single precision: $ResultSp" +echo "#" + +ExitCode="0" + +if [ "$ExitCodeDp" != 0 -o "$ExitCodeSp" != 0 ]; then + ExitCode="1" +fi + +exit "$ExitCode" -./test-verification.sh "$BinaryV" -- 2.25.1

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 literal 0 HcmV?d00001 diff --git a/doc/images/benchmark-naples1-sp.png b/doc/images/benchmark-naples1-sp.png new file mode 100644 index 0000000000000000000000000000000000000000..96aa9b5baa8dd6eba072f753f46ed622fb73ba1c GIT binary patch literal 59117 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 z z3?uW6@Kn%U4=!qHI2SKsIkFd^CCyodjE2|rq5G_nPGvX7Tg@8pkuRbdQfQz~?$??4 zX#a#e@4m;crKJ~3OD{FDdw5(oGWz-Jow|26C$LidBUom0Vqv;ZDg8V$AtidvPZBKd ztH%FmJ4_)%J>zzkWLy+B@_^)%CzHWcyi9Tt5fSMpVLD)n^fZ3GMM2^m$4&9;%xBbYxf(fq zH3_#?^BqJ48d<54PY=Ld%;Dn^AioXKeVO+r z;q9fo3M>ZCu+Y%Vj%-`gXh%wJLTOH;>LVh4qK|;9GUc_zqvH(z3|tdtzzoPAiY=Gs z`H@l!ogHi2IHobGV125AWs1}TWH5$wAtAkOt=I527i)bF4`4SY7U52I?@-z{W|2p|7o!djR-I6`yLW5Qi^eXB8< z5m1^wB+A<3dKEZk&;pskKtVeg{SYVx^U6oAWvi`>FB0ZYB12l6%_eA&A7kJgkf1G1druM(t05)A$_XUO*L zx{@;Du{2>Ug(|=n81){pJEbq0{dHGbU>~uoveiD77l}b|<`6Ik^T91dRM2%!>T1Oz z6j3xY$9B5X=9IF{WSm7G3(}22{uY?QFtsHa`ksAYXt3+l!ZFI(m)sxp^Q5#Z_U!_Ggd9(gc?-%;c>C&BiN_ zARu)Z`0-H=U1?4oxs`0~467kp`b}P|ME8Oh9)S=g4SF{uBr!mr`}1O|4k^-!mllKb zgB|_JMm0FmD4~jUG_3b?F@@C(lV6bf!z&M=+zt3e_R=Lq zK5V){P<9FcMT0`nTW%6d4GkgcN7~&+3^<`S7)|H|28EDREt?@{JJBlS_JYXm$B%cD zfEn8j^<6k6cMuPA$d?*Ns$}6`AE`-kU59+WqOK+w=zyHM^$$fSk9{=x^+{ z{!ritmYNvsCa=tM?s>_R^z|c)@n^}EEIJ}$xonB&Pea1*Tz~o z@M0f#XSsB*ZRugi14-~nT5{P6XX_dK_^H>*8N6x4tf z#Aw=V+$h5lh3$oon+*mKT;E%$BQF|!a%JUeh>%_)7Frd-w@|@6L3&T56`-QPa$1B7 z%+lFu@~qJZyrsQBYP@hP*?|BjT87aw`O*zHut$xVIHpXT!rz8bXcge0Lpal#73Qgj z7Q&X-f`B{kRIH<`@e>EE@A|qqU$6J4FSaZ+!d&CMNS?dkh@S&|@K7`tS#E942DV?o z3m0-31jB{!4RIJDKq5t~7uGWmSZP1O;wDAccs_&=^cK*w8GQhtuoszeOWD{?hG6zA z+VC3~BKZPS=wsS{iNzuekiiJLa;0{tA8WTEB*5qt+-im5b$UjgTr&0D;&l>s1GzL1 z>@D0rZ$}*_#vCI7o)-$aep*m;2&S2(?CfS(T;m^2;P%`LAcwPS903V(m{iDyuWTmP zy1l_xEDB1n&DI<5^qQYv3me9wZb2T07czx392UvFFCU8DI`*->00^8X-PqpU$qy#d z($e_d3iaf1!ym=L15zFt5%EwM+r%0A>&h|%*Nr}0>>7T(#7!$pZ7$BkDTsEBkdVe& z7;_-#7!qI~lTJ)eH=lWgb9_B~qmOD#=zmhkcfQFveSwHC3@d)Ig?}=%m5vrhUwUE> zHLwdi%2vo}-*|NQ-o4pplRZ49%aT&BeVMd^=6SA`NPhGZ!@Q0IxZh`@)r#7Y0oxN< zx3Cjq1WfIAAyMByhp+?`@jzEW5Tb}!p5@o(qMk@v+|@(38q63TP2-tsqgzryZ} zhLwRf$0D@KuNZy}&FD4nU$R{b9tNr}Ju!*5NICupEU(5%#F`^@A9}UNpJ+9pAJB+V zxKrl$B|okiuLCrX3skDd+W&oK)gX*+glzG~p+UkZ8NKtv-!HJQ(X;?IS(QIAAOy{C z#Ix>Z*U=>EplMdRcle3Q*6@R9Z4Y0Ndc(Nc6`Va{uw?bt1C(6?q>9t%YX(0eOC$@m zQVfz1mrsMnrI2dVk`JkdKB}2BArvo6#Vv07-a&H2JNf+_ZJ-B712%m!{Ch>w@}3;E4?xOa7mm-!WOtLJp0?(@$xlP=v-zceKXp6W z{r0=Cw;pUaTMUfX-w0Z@Rr1=MDv?)$0h^6=1G2UX`o(=JbFDu%N6Y9^Tlc>| z6qNZ>?5efau5MpGibAcvVNcJ+y1q|uR6{DVhQgd*``GmQ+sF+S78Pk{zMgQ&#RAcV z6HCEc*aS2?1$cip*4k}cyW2v1_3{qOlQ<|ELzz4 zK9QRs!-b2ms-hRALrGOtRoo_+fD3QfSY(J`&#!?dC(oG;LBv-Q34FK8r*Ewe-25)b?x z43rv#53pguy80p3#1o6hy%n6C-5NsD(hYI1gT~>SvHrQFy}dmF>jG>2E0iUxj5wCh zMQuQ#JTxyEuYVG*k#sYW+-&P$EEXvG@Hdih96ABY2BWs)ED0^=fkt=dY8tSEf@_<_ z!UVHm^P3Dt7k(`c>L{9J64`@Dc39z}@YdvgDXa8R~Ca7nm`EzL?WABJC^ia(k|12pJst|_#iMp>j;g9Of`j4nvIi7zd41{4ok=Z(t+ z674(C8B}L&5+)k0-qP+SX|G>w^|7?8s48V#(q-J?%g3WJXTk+D=8N1jFg7vr-<0r3 zQ&ehskj|1Io#k0s9*X`g09X?+5bGw~_TBmO|N;jA)1=at)dWhLBHCG!FP!tai9}uh*y!agTt3S=0!9` z;kwM^SRZ+?i2Fw6(SaRT6>MP|cH|f*q?q_8SF!QPBkjpHZK&VP4Out~ES&9lM7vIC ztrBQ+kWIc`@#<=Dx+j!0BsC+kHmG%!G~{K*J6DpJcK}jyD#!tnrJWtNrc7-pKQU|D zQ$1I7v=e#L4QUJZSFI&gKGKS<)eT&Hxx#X;FG=*hn#Gni1o{b~|g(id^c8xG#I{j(v3 zG2FG&`@Fxt9J>)moeyF-ZKZk_14#X~!A0^KZW8I$3CDF2>CG26n|Y4Q z#;qk-#EYOEYVY6n3|40YEa^!7+}0(+B;gLIK(j|_gfuslZkm=pMBC!Dv?P{L9u@?3 z!BrCc_C1Y!D61UwhB{Ak!aULWOd!R!TDpOgME6=~jcKSk4P%F6GKZ=;>=t1*lWr+k zdRgmT+9dXveYmG;w5dWj*->w(fi*hP&!p_=U3D2=`qH!y#77yR?6#NTKb zXlP*8#gU?3lR^pHEUN+qov-7JK0BsrOTwD(c`A}>GVu!Up69qSVGs!|z%?7UlG+4aXvM1@4Apc227-<9z0T=8=N2!C z5ChJ>QL7e&VWR3M#Q|FIDpY9XbC*HJ9GWs%(6ytpu)F9(kp8LrRs5jhL7U|9l*1W4 zI+MR|M-W0x&hv@~vp�{zobF4PE_CVMz57K=k*{+-F=(3U9=A*zdhET=`>*GhzVhco4uYh>K3z&=K967Hls->I+*Rn zE^d821@g-{gI_9QM2;KF95+7rUdu-K++z8d9!5B#i2xL}Yz#(#FA6~PKbEgs$!yID zpa}h2Kz@EcV9^co^A|1BJbAK1ClG^IsvbD@aoDFLb8jcAZf#4;Kd4vktmfY7B}|Gq z7!fygRyPTmO#J*AMGkOS>k%VUoM)sW*rBrLAAHOQTC;t8c6aMu=4I=VZG>!<$Wgr1$0n~Fxpe0%&!ZIcNf(cNL!;r0KA`-o4fZ*qeX@}MnaOGlb#;) z)V{Nt=hgXNf8`BzdRBxUBL-8O_h3;-v~`AhKOt?bw6UqFiCS?c(1K+K*%00ycl zYO-3^M}vfeSa>IvA9Ukc5w3Ca@pmWTM)c)>9aRItwoUTrBueEN^dZ|OexAglz7be3 z(b@kp2HKFT0)?d+hEV3nwd!&UVNSxn==}%U;pB9@gfCpqhO&7 zRcM3aaEeSZeA;^!2eM+|ho+&f)NrHPr_h7>Zq?&7y8;~}+?INPn&^&0Kl8q)r{}JZ z|4*WIM+P{|1+4Gghl#$6d-BUg)U+$`w@~4j!j|hTpV?gJO!JWeI3X)U0C8r3ZnfdN z_s>xGZ$;*)5+Mpi&yckq5E8+xXv`?yi(_SpeWTSyzz8)M(3diYzD-W_PTB%V+Q!(9O_s1@>OXNF8Cb69PiW-3y2yNb zynJP2+s!-KBO_@@dHpLoIuWN7%0_g2UGc?vsWSUQCVQbZB7)wxxEs{B=GDo9gI znF~b5Rw@c1LhcZ0u_Kkx>|tng99`rn=8)_B99?h?f@Nduvor^`IkYWW*e;NX!= z>*=z|J%24~YVWrp*^O*#IDJ)EK{O%ur)UJ^PS@dP47sn55fKzJ4)CuE4L?cQq2MyZ zqFr-$l4|6si!|itBngNnTH4x-&wO}!6d;rZX!?WLSxNzzl>vn096)Du0B^Kq2v9X! zPLl;4+kHAP>8^sUF79wfvJN(7$&BEuSC61hGDm!f8Axvn2uKb9iwTmpx44jvgLVh& zeIY7ru~RRfZ$~F&jJIBBkr9mX!r|UhbP1Uv6y($A&msU%+Um_y#HmcF%7%~>Sc5bF zsg~05gr~)cpU3a9Yd?L#hO2Rv5kULUfb@oLV~D3#HVTPzqBeZ@?wBYV!{y7C9m92A zifXwGJILWR8PHS(&*gG>2q{6agR^rmXu_M|cB?Qsyb9*_K8yC90nO0BL>}bg;<|&~ z+Zfz~k{x=mUl3Gr8Z-1fFJ8Q83gt5Ta$#(iD`SkzG8xah5iznAYG`p(bA=5J4UZo` zzJcqq7NR1_no-=E2ch`-G&r~wOL`mpTw4&S^Ci3??SeFFr-&u;5*6&Q`mw_(eIX_KJkRzIDQCt!%ehVY-s(LuUchlTzcauDqKDD z&v6T<8v>o+vKzXV(h_FW#B`!1RI<;FFy;}h+u@BOfQ2RDX+?!LE=D}{ZT~inYQ5ua zQpJ_1IhkcAs2hz7R4e}daKGt3Z>I3{@wZZfqQPZnvVz?g>^4q5$B}fYk%dLe=-#Vs zZaNEtvKHS>;}W@tf7V-rYiuu&riiGoj~|-<;b~a5{41gS=4yDj5Yqp#`A9xP2FKc* zP`T(@jpN@%Y<;(FuAY?Vrs+SiZEkRx)=}SgpsHTLKr1+MA9%0?#Zh6qUFp)4J}+pN zrJX-#JBuF2-%q+o^&m{eHvG=$N`#&s|A3|SI%Kv$i~Db<4mVD18(8nvwL@OLBTE< znJE5+F4=vdXp{6^25L|psiA_h$Q{sv4X(&khIF;Sb;-lm3T4L_@HMx!!B<^2?9y1R5Z#Ot2~9eqE^Oir3uG6mo{f( zgpEV;afkRgi;NPB48X#}Azf@J(UHVS_-m78!6KRwir$@)Xp6o*g&PN@F{I@j4QUPC zh+SiFcLd$MQfjuL+_d(wWcO!Dms77mOv1wyM;{xB3*zGG(B2Wg34N{>J}$O06%>Bp zWFGLJ762KH;s)Vld3aG06BCTBL~B9{P62|C58(C&9eN)7u+~w1QR7k-WE+7yqPZME zCv;J+*G|^X`_Wb^gWL^p{lK*W!~s;8pN6h3zq}cyM!@b=Kfi?C2#RDLL=T18OKVC_ z;7Dt;Z#m+Q^`8>I!JDIYDv2ux{!d|730UCp>HSgeeun@t)Fk8Q4E_)tDrsWLyic+Y z0>Vhh@wEaV9tbNdz-cXeSy6Ut7tU*WqRfMc6_v(VNDc2`siC!779dBKt-R7mMDQr)w{zYye;W-pC4$vIKK=$W?Fe0`9Vi_4Al5L4y_g|fY?ZCSkO}ZV~ z*db$k0l6BVJX$*`lTmaJDC(FAF955A9(?>2MTHoe9Z(+!@X6G1kyHCfNwnDrw6a4p zrQnNJVW>zt_Pe$B>Mz;c6t_~!Ijh87LTnM@)=2CqQV1sSVdu6D@@PTTag))p%*x3j zrJO3<;hw_uF3Yn*F=K?NI=Xto&VH81$x((aC>ORxPCHa4w#f85iI^_RC!=9gxci8Y z!L35yiR=N^DUQF4en|n<-&ghkYqJ^X=as1!&F)maA`T3?_6ph2MBw#_;4xr7q7)NV zaDe_r34)KF|H!&wc-WCGdZJd;4)bADtcsOBj6BKlLCP@6Ntkxd)u&pMw#Qa_mP{%}vy?U}ZMvZWP$}ZUUMHbArwwc;RYr2hXc1(19 zmpkW^8z@1%BWUEr5?f-)FDJ!evxpSt=IM7%r~mc0FcSmI=|q*QlKreva&can)#XC4 zH_zG1@+zm_ycEmvA|50artc0~BScMeIm6HBIu8M5v-A>?;xLAaC@VJ}*ivAK)q`-S;{2vUpOG$MA_!qvM6ZD2+uHe8mGRiBLqyX4+j| z5&fnQd7FbkF)lA5dKSGm!yb1^WDJ;stbj>4DpD;~p%nHi^1vpcyM`*!2==fjWblku zzkTJ&*4W*@y#hAAM(8_{y@3z4zy%0QGL3_b#&onNZXG&5YUIeJ;dMa|wiLVQlx4Zq z8WT&5OlrTOrtGQl3KQsF^5Do*N$eLfvmjARFR4;yHnG8cbPlouDK7}a($1yPz7QsX zX8;gc2JpvnsWmJoTQ>w07lI^6x0KgM2;Gw~j}rqW(!nT+(AqNNtwH_$o_x3*s$jVv zS}9d}ABQeyN_Ytzjogegca}+DAO#0eUFqR*0vvEsH?gx4_VnoU$O4yiI4r}VlI6|~`{^{JF zP~XEKO1jJskz>9A68E_HTd7t(0?>~K$?LyiAOH(_xW)X!_?@t1R*-ibI)F}qpz_{z zTchv~vdw|`*m};WG}cgMA4K42OwYvfUIs?!ddM0g?B1NzpnA|l-_N2rsiHWODwD9+ zB)nOXO@;&jlf1MkI+~FaBDBp_Hy;1S5Ra1kScq7$R&RlJiRaSJotq&jWKVB|G-uSW zMS{Y{HVo#>b0)xt9<&rAa!#xF*g>IA&uJQ7kEjv|y{WHQcC4V~k)fqfS5kgK%o7qV z+wJ2~OkrFhF0_=yCwuy=Jc*epOm*WD=v4jVUbW#9uF=69f2H)TIO^aV^_LT_6@uX(rviAWuokDu! z?-W-(Cf=R4?e8~(U7SkCYV_E#zI{DilarGy)#VS?304es*1K=1J zWNMc=N2z1xycp-qT{I*22zVgDh4EykyR0njLC$)$T#Vd#?0SAXxd)m!|aE4Ye7>u&2wMGd}iO(`^)Z!3YXcQoSlJXnrq6!mU;9SRom3Wu&SnI)+Ft zTj3!%<)+%Zv>&!mo8P=A8O@7YS`LTnAo}bpRn8JoQN5yQO2t>;b$a2=uJR`crMbKM zSgAVE5BJqkV_(aO)j(zM6@f&^ci!!FwPboRVBY%yrL(AolP#4Lw~=n07jCLa3HIgW zIKD9i9Oag$|6WZ zS{U@Qa1zpyaC1lz%w*rCJ~ifLnZx4+hbQ97rm6>moD?<+BhGVEukF2-#4cn$-bZH) zEjx@VLnqJAAQh2q4llzZ@GAoO7Eo+3#RFaHe6Ncac2Fa0w0(JYaXPr%?*4R0X>zC{?eNKgw}zodkvDJ36_q+gYFFh;#F!|(A`d$) zFtxjFwJlv`ZNfF83_Acb%>VA~rpv_<<~>>1og74BG+?bU>4B8 zY&Ba)ayjWC37S@MvwA9^kDEmdfc~oT-mo25m~uvnvtHKr9yhasM?l)oy>(`J6;=G9 zyu7@t69VInpf6wlrDpi&SfmKNq|QO#LU3MbxtjFUBoJCfhXDv$x=slW@YrN%E;rW@ zOiS!|m=_mAlX?ghwfT+V;yBM*Xh}Zk_C860^d=D@mlOeml?W;TVa*as7+KlqCM{?AsoerHtbZ>URNC{9nY%U`>jnjI;|W z(2Sc&`0_RK+mYO2Oz$vn3biWGaPu)Qzqx|vDqSzzE4;F9 zhQnlxQCN^fbz~7U5X9PB{hGCh(N}jvuO;N>UJaQv_cG!^<8e)z1=qH-HAfwb9Mb5p zzi~xC&0Bum>T>kLqgP{bF8K$EVNqd61MgeDn0= z*-#~BQyUjCtBEP+j~C+St5Y0M@oxgk?da;7O$ww0I7U3$gaZ6_mE-PbCn_mh&A}~8 z;V)mPE7&f!O5$cRoZ%wm^f2g% zMtj0IT~{iB*1My_p7izd@=DF2!MYzH^-Mtl*FOI9=AUN?+vQ$wuhq2UuC-V`7*GmG zwvC`-R6v?uOr-;nAlU0#{niY#+<3n?{eiU2IZ8s%e%KQdG8>3sCcID||D6x20>Jo{ zq=v~JH;d#Nau|h7&@Txfv9#z0WN07%?eCyZjmtUz8Pg8Avk3bm8S-Y$KhXAnLQ$xUBb{h=TKPiFqki@Knc#^&2VGsl#hqi|6 zPjo!@KQOyt1dhMMqlZDb70a)>o;qJU((cu_!Rjja`93nf_thh#eN(i559ECY4ERqk zdHqOGf47ZvDg;3RBzW}~RL{OmdE-q{gW&5Pa|2L)PF0<1mc&y2Q8h^*{5waKc>gJGaWm6Rv~CQIhJ0Ng*ZO>$%jL8m88JRe z0)7-!a$J_+XU$~RhK)I)yp2?50vE7%R0=2$--3#-C=T^M-i%{u-Jcs z(h8sv$;K!#9H1~57`t5=C^i5HnTx|>ZqvtSP>Dz?8r}_mUeiKT`A73PwTa|0ATxuL zjFmJT7ao1EwnB&jlDSZ2b#u_H+7@r<$NpTt=hr~v?zd_C)BaA@ z7~!pT%cFdFOSID2L5WZWOFR5FZcGG$TeBe#Tt?Io#fV4V4qKHRs0lo;;;$OIhnnl~ z<`z=6aL@pcWUzV29nG>pHzRkEbORyt_Z7CE*`T$Hmklrcv z+h!K+X}Gde7xT(Z$Sh!ygAj-c7IZ`po&J?_G1R$aHv`C(4?9BYLEu{ zB)&=U6d|c%?Wer(134*;+E-!SQu4g>-n@>TEJ1E~2DTqED@Ea$KzWcQ}{-|340+G_;F`j7TMpG6>xE$~IOV;^3&&RmmZ|m`VAS)xWiGrGfgoI?1BXh;p`H(c^Gmy5$V4gNhW>o`m=}7>{P}|TY$Hla`_I>MqH9;a65UR2x$+eW)BnHy zu&S;;MnR98x*=LFT*E1l*W~l!bo)_ydivSf*~149p2=IBQcuiu-*uFQon2;WX^Hds zxrg`f%SuT}nMG__dGJhf%4(P1FUdOg-M-3-xsJ0MPW}D;hV8jIl`ln-K7Bg9iJJTD zcyE=mqM~BrmqRZd<&*N3vV(2EudfK;k=E4I9H@XpIL7I z$s{14mbWnG&VDI7Ld$tp{H^tn`J`2UE%A@qwj77<&d&XkYMG{?YqrqESBWfZ3^ix? zF&VYzUfQ;8oBdFFBjw(`tdiNL-)>PKzY#sq5I5+4G?#g4?W&a*qr6Ys*Z4KlEL0@#~l$8x->b^P-eB!(bhIIj(+7z9h&c?1W0X0KdYOR=%*g$;o+%T zDlb2`XX6^oRrkR7_;{Han}fc-ey$l7bkSq_quHPS8BFn8w0+((!GbZ8PY?DN?9x)~ zF7+LMR8m^%Z8^z2)y}G%_#$pu?S`{i<74ub7d55-A?i1=FkTfW<;z0Np?x}+qphvY zJ7U8w_O5{wE=%wJ{LQ3;_1jA?U6!&88xw;}Hm+QuW1z76)V<9yIz^tGffeGM`Y}gC z==n@VP4X7s=vTfVzAx#GEl4bsA3tu;3OlOg=H@1LHga)sS$KFoe;z~4W0;w^xUeuL z_-e5!r?E(Lc)UtP+0pTx^U`duhSN@W@$~DBxxNysS6=k7bze2Z*Bfs%hKf9C>)sCM z#tA#kQI-fs=DIrn_`<;-BqKEcBbA!pTsLtkKVP)q)2BZA<(Yf$-o5jA_Uu)#kVE!d zYHF%)aByM~y-Q2O=LpFiMqgf^?5zw^m>uiBG^Czk?EC(*?9+qi$I2tEhnl1=TxcX- z<;jyLjE+)OJNE94`}FCPx6CTH`~W+;&*kH<^@AT+jSI#<@4ZqXxMQ%#PKB%LV}RYk z&lSXv?(vMDiw`7zwBArQh^Ux(ovatYX#D4I_^m zH5rU_ycaOfyPAPtQE2OCaB{(*V0`Zsg+@i`KW6{qi2v zJW|8C^NHHp+Lp6pdI_32Y6)uTEQu5U>Tl{_oewm&UA|<~ z8hNem)wQOyYvMuFE3e*hJjC_q$s5N5e^@(6M#-@;GBT!F^j3PybiUyVtVmH|I}min ztFIwWSu)C1O#9b_{x4(qDf`a~xySQXXroM2oocOQM{Lju8x}UUbEqe>1_lP6!hsd9 zo;=ygPvg10baTe-5?${G!yKK5eShyv)a-C{u6^8>n?D(TSihy&e2-WcZg=kZSPC$c zDaBoMnxFD*HI8!K{P!<1Nh$j14l*%C6gxYR{rxVgcXyHm(avhWt zoxXfL@H_*aYSV0YLTnREqyZA(%Fhy^pwll+h^lhxGno+Tdf)| z%@&G`mvc4cx#Sgk?2W>5?a!HRtHTVqa}fCPzYiP6B%m`Fjl!A*o9k~o1=rkWD4M*U zl=CX;rL&q*Q<@z1Jhw&9xuKRUu675*hS_;Iq7HL0&Z>Lt7P z!kQD#xIUH$iZIv%*e3PtP@s)t5nOiT>_9GZ~Nix)4#hq_9h zCMK;SBSTf`rdhm{Z7Ju+e#tydXtwLATj@WwDp7*8^|mV8PSpely^LmeBbn5%Z0-f} zH^x^Akf>Rx>(6g&J2#LUt=teZ+5ff&|5?lbpJ7m+kdODalo@cNZ(lkPRC@lwqeu1V z7SaNnR&FQbfwJTwSCK;f)Dq*2UCoaAsj55OBZ~{MEX0rRT=~6)ZNxZM=qs3--cL!P zDL5XLks-Nf&u2!~uoFR*jC=mM=_O_qpK{|2R@So6%G*(~DOy3z!tEvH^ge>ic3+34 z#Hgx+WTN!T{X@~t)FnJ=YF;icT-~&X^K_2G^fM-><;7{>0-rZV&96d2_EiL(PzKUd z?iI9?-+$&&HCE8%U{c;du*1)qJL`8)($Wr5i*Rxh4M9H3ygTjkdop6l+4nrZ%6+Yt zNtxKy%_eyXsM~`87k+tpd72JGJVF!IrxN{z9HtCfGR@Elo;o@@)`y;2d*I-~Skyh2 ziSU)Z&_T)^(oV`U-yk>H#DFG{yRlEIg8ROSXH^ z38^(_m^AiO1UBTkxU{+~FA|80Re!9jB!ENb?)T14p6j34Cj09oP#>vSmFoNJqKL}1 ziB3?3>uROX$8WM48ZW}a!qR|ewHM#5%%0CiioVQ*{{TjR1#i1zd#=*~NvnZ+IqYLA z^kT_cK>UUng+r3H(noV5?rz#UK$KhMq+rAP=+K&QiMNG&g&i|LCtix%B0RHCf;2}i z{7e9!Sr}74F%vKNEr=JTA)kl}wwIEVlk<-7({cuysi>VAYHq;5Ry^mD2n`Jl;M9A_ z>iqr|Ir^!9X@~2;=LCm9VTP4k{rN$qcD+v;db9-s}Me%03lw~fi@ai0%!$UDrit1vt?8(8;2~R8Z%Q(*9d*&MW<*dTu z>vT^`n6$LCl*@VB9mDJE74eJjCl4_(onCYMWIHA)K}c}r_8-dwbI=3n5`c1fY4KwC znN9pOo1G?VB=D$#JykE0ZmwFJtzG8J8s)ZOS82axb`yclG<0PAkDaW0b-wNi!>M|# z6rdR?Vn5UvSPr?eAHk!U?8e>hX>7#H);4^|Vmkj)_)_ZCs?TV|4X>}9nw^z;E%2=~})ksbTY*ghEf+xFR}-@{3IDn{M5@rI@I} zpP-eec|l~+GI43I(@uhIe%vDRW3B}|9Sb08%_eHfYr&X*wJh^UGBPq$9Hm|E z&-fc(Qy#jz*JYY@rU4Yv3fjsxzcH#?o_ATk;B7uMwUmPjvN))I>Zx^B7}k8bhS z#hK2>;=#Qm-#%K6bxDd#NU$C`a(?X=y87OiE{Rweb9ebyAX6rn&m71jAI)YxJ-vQ3 zTA&SI@25{KhK}3t(Tq(_`eM^XO8M5uDIW!5JrAUw=ntSkOa>nxUs2AtZ{N%Xg68H1 zlNwU=$`~sab$hmm3uww!jemDP8hh?JX8`v#Z%=v=b`cQ~Av8(vv9_DePR$#Rz6+su zo;eA~!wg#p|RpfJ=Y zUV58$<>Q*hQ{}v`NGHa zNu!-by@q*?v*wGNM<3>E4!w(Kx5oZm8i?eIx#^cd4=b~hS0`?2Dut)*r*ne}|m8M-lAucX1 z>7A02qWI>MzFgFI}WiNI8bm=bb4y4QqDH7XJK|caVbnUS%ukPWne|Og}4Sk z1`Qi{el@seX>p#4lG5kuIdmY@5?>mLncH{a+ZSVLc)Pc&ps!ov#(KmXki8#$!=5nB} zJZ&{rM%%e$ge%s3aNFSPlVrWQ|QvE2F2l&#WL~5)$#y z`e9LePTl*JFZjd36pP#2wGPR=sK%B^vl-Szi7D3Q?8lZgY)Xr%aNy9P zINSnJIIj!3xVR9cZ*+7t+jcZ8fY&53B7(_jw%gBsIA>b-*lwu-xs`_^A!kN)>+3T( zqLC?!0@rXfZy}6=iiH`xi%Y*;mOw<3L<|ug^3y zGedEj-yieO?>>}^aak*{GS?(f88dHUP7FTBs~!jLsf@v@B0c<3@F%?Dzlkn*APG8(%gGuZk(gyT)=)%w`ekZUEK(1Y0Q#p*_JV-K8M3mc@42~ zy%Xua(P4vJed(m+4dOJ}6KFE<^n!2=z(QAVZxql-oWx_g<+AQRIilha&9ufq5ubQ~ z+R0b1ru?>JWdkvvCqR{<(xh^TR*<($xTy3qwi-xn6Aj8*hf$Gluh}FoD(bps@Y;!6x^1f;mK zGWWdCDT<^AZ*2g3zQ77F=A((?fB0+wf8v z($>Oi-0g?!q_WC9P}D)j3ts)Ptib`5-oAW~;MsC`Wq?$J9(i@Wb6ZkK3KxpM=o z9=kcjyz8Sb(1Y3&yM7K0%o180p`LMYa0oar*qRA#|N9EACpJoCwv&1;IhGIg_BSTI zM5(5vqhmjM^eD))VMqQ=Z=YWF2|rDH$>F@^+`C)oi55seH;T=hpE21vI9x|}!v0Zs zOebVH^+Of9RvbnUJvXPDW@W&9jQGR-iD{ioX zHl<+%{$7nXA3SV}`dJqy?oJW3f`~}E?h(p?3R{Z4ZZScIUi>CQUwT$nt?PF&($qOjIt!)w7wMhbLWj6tyJx{PVwqK_a^J=s?iQmn0-VUCI8f0%8A% zHzcl16f5En3CY?2<%gcyTlegV0YvX@){2s$1)qp3?qMAmU3od5&6;@irQQEioY4-f zqJ1}3$_m9_{>+)X1b9x-lO|9MRBG1#`jx+@WFQzFlxcw8&G*8;^l(2vm!g&s8GAqX zTHQep8h&}aXkDbVA2$|(RbTZ4Q&+ zodFPcF}Gj@Y^p2M8DgX&E;sZg`P6i~i%Y2RKP%#=JJ}p<2ug$@SRypR5SunTiB)Si z*DGr|MWPTB-UlfuDfO|-qMm$Fbuj=EC5?^Bfya%Yr@TR3e1#Si`RbLFw^EX3f&{&j z;*LWy^>7EQ&`&hPe_nre;br2?jBR8@1kst$5@mweE9I(RI>@@g8?4U zDep9JOdf-3Q9^fAQSsMwp4B4=>e1Yput6}8w?`Xapkt}Mx$*qCaZ5A+g`~W`{wo55 zNzmDyPB(1uX2PF$yn6Yu-x8!yE*pCl<#6$X(?6z2O8_({(f+O5wt01Cqk^Caxg-X) z@7c45s9|xo?2-%&46!Q7Vev|FOo!o!Y!Mt0y*XY`R74PJqNZpRSV&^Hlc8osVFX!F zlQ-;StH$#)NoqNcx}lPVppzG4oXh-r}zGkN(#a-#Q&N`^0W zH(sxMchGmjH|;%MTve5H_T>t&5iJRK_0&!VF{No#e{(}lR`vNkW=!ij^4_wd1k8t}Mu=S6#Be-qV{0Gk=j8ysKGVgk~D{GG;14vmeD);tzjVwTLt zg1QJ^!MNbFvRHjk*lb+UY_cYy?w!O~C@3jCgLK#3-5vSmi^?V%zUl^-oD0IUr}s;E zDuT)p{$-ZMRg{;qhW0l`>P|D??hz6Kl>CF>b$vdyOWzanS z#Ot5qW8evq75!+-d7EuB9DKEXxafLob~>0_5Ruj#I(6*R1?LH=ojn;r?nEayixLY7);qhw~wuLQQ|E@1)GIFY7(5;5lUL64! z;kbN`cRA-vi(kus9GAtU2JgE4J_Nf6=(3{W4F*tXrsHg(3lHQNbgxgQ_g~IZd&bFty%|v+0*;Q3l7Y4PyV)QEl z+_DcHKd$sxXv&|MM977rfJ2|5b}>n+sw%hZ$P$cw8pe4g6`^QBS!q4?cNvl72ld|S zjEBLYO}8gB;Ns%=BmUp)q*Jcw-L45^Tf*!Y3+AaEv@1To`XoYcBBoT|RF z`oLih4!JEN3#Oqz`R&FcK79D_P(lGcgRMSDU}(a1`{c<=8YkQ;*eTg)Zn zO|;UEcmIh4mpU&g;6~N$Hrl#kSsDTj{6h+v�=ZN}XTKKw;Im{Gw*&kkE)IQy{nd zdqN3@1Qn?_Yq-26t1SAE;{X&q+1Y;o(k07-RU88sb0Z$+*!Mej-=M9n5!9(vt^^{< zNpqUFejL3mNZ3gYTuB+4qehgm)-Vd^+-MPfLr3m>mqOd2Dh}rp(}B6IIqIlQH7Jcv z(sno6-l;<6tE_nz6yzkWL-omMLm%KWz>r&Zl;iA}`0?fR_7Fa&ximr_1m1%4)%~zJ z*Xb>K&i8EN+K2}`*)^gcJ=%zoecOa*9%!P~dIIT;0Aj#s{7p7LTVk+yIvxvdZ&8E- zWS+oFLLw^pw#FoXym|Q7uBZHQrd?e%<(O zybYDYu&+Awp@&IqwLn(;&86TWi6dIM%1#G`A_f}7#%Offr?30GbIj7;=q#STI3~<7 z-%&zO^fMu>E92xu-fdAL#9S zu&uido6)Ykj9%v!9@)^Bw=@^$=s31Cbmx|0jJ!C$ydFx?4{0S8yeuGm2tZKnoozCZ zH$f{U<#BNWq+zw5TUt_XSALCliw1r{r|^+k>pZ+~R_rU2+}T&yWZi}@PuL_bEG`nd zqL_$Zl>4JciqMb8oidz&l97rbi29qe|1klny}w*$hi=msRlJ3|EQjK(j*9=zH;tKc zwX16>d`de zTbm@J=W#w~lH76dTs2VkL}T94MS=@DOvS^kAhh_&;r4c(V3;mwNRdFgm)_aRRRr=X z%gcKc%@aPL1NLsl!VSBu=QcW&k+r#XeNX@zVC`^YXE?erV50Nu2*HA;H(j?r2NkKb z;iXx9sB_XVT<@a|%k959fa^j_pTl)Ywcj<-l;i5%+8%vtzpHwBhZl}kbPonPH0Chr z=?7P5IOM*)bU2$9m7{&*y^o;){aU-&HDqD)Q8=~C^VHPT5ahn6GANG7BN5&!&@y3H zK^o2ej;2Cu@w@#q#Wkq0xX8}od9N)k%>L#WkZNSvZe0(cw7<~S&iAV>x$b4{ za~OOSUZC9mKB)gp!6>Tru1YNkIu{d<# zp5}Ami#KoD6tY(3{gp7GlIiF$lSAuRzUITp$nBq9iQmLf5`9%9d6;MsC)4U=609TR<4PHs@DYusQmqsq0?h2Ii_jvPILgW=Z zgr2W{Udb1h)%@h^`|Y?NLt371Usi(Wb*T|zVer(Cui?PgF=m~G12y6IH0}EjIHBtw z@YgF@zcD_1Zd1#A>+a!q2`+H2R>-i)gS~!h%vu)juCRE(5~`@}-odq#Rb1%nQCyKr2?n zcu;#A(Vhu33$=)B9R5)zoqZpJ&`AC&%IZJ8Ni-SIi+svK>iw*Kd&bbvPy(vwW7}8W z=0@R0Ei=g}Du&&AQk@(Eb{bcW5LuiUA39gJ-|jT&;-?2YVlTaYGdPF! zs083axE7K`(2W}v2H_LlkJ`zZZF}e-i$Q5YSL0A76*_Q0yxn;|VKc2j1R(EO?`LeP zVX$)yz;2LntApqkkH;89?#z;C4bxDO5GW*8J*-+P8X7kAIw}GH?0+m6rk0+#R1^W$ zMc%WtG(XG=0*JBASo-sfBqWrzCQ(Bu3H-+cdJ4LRj>H90zSz)o#d*l7nULld5Egq> zQeIvU@y59SbXRS$c1&c5z18@S)UTeD7RPPYV7BLHX8I6*gkVXY3oip0vbI4hRE!*b zE<2+34(s?v^1JL#~M^M0x@FB6)^^cw@GY9LQLMJLsgNY~NbG2tbXi4K2o zs%vxqzW`^v?WE&GuTH>o?xG_UmAr31wt!`RvLGMp+(teDOD<<|s+mwR5UmV@aWfEl zkIsA&w&OHm&aBtJ|6Q^AZD|rPy9c2${9?Fm;wDJz7`F-#uoaqM9h8Jgc+&=8REBNu zvIu^wd;{o+$Uq|5r;2`?sJ)E7mTuO0hHz?85TCri%shARue3Rn1T03?r`-Fd(u`~P zU>*XOrO%E8nk=W&_Iz`>#*Q+SHOIwup|4q}y;V`zrZjnSM37ES6hdq)A<&{_!FeT; zFBDt0*i0Tea3BWT`+z@#u`ce4KQZIR*RYU~5RHP~754lzZ@Hm8V(#bLVatK~!;Nx- zFaTMn ze?-p-eMWG6YIL-up%*qfm>)AzVfTgq)=yV&os8ygQ$9*w=XkbfYIcP;+Jj#exIgO~ z?JI&T)*z_E$vM@pH7LI%%MS3F4O@15dq8;h$&+@4G+*+xl21uw79>w*lvOOruX-5V zytBHqvvU$&6AK@oiZ=oL2(38lJBw0$w7Z`QlnV6PF76pmH@Iy(JMlGW}OOKI;CQgaj?_z=53Pl zxY2GcuHotA<%zl~@n_PlA^Ui4v_uydj&nCU$9(hcSD@PMKR>f{es5m&3ssY6qWU(% z8An1cprk`IBVGfRQbYQ6W$`m-cFt(J)fV13UZ%@=Z6UK4*&rkc;FLx?pgUgD${Q`* zn>DwEPSC$I8@mGXD~oA4^u9RwfOb=h&hJn*265wwgI!%+dwVpV48HuUYUQ`K_AU0% zto@lwwrVii`F2Yb;6c;33LlX6bmUC86{u@ zLe<0`j6)dEe&qdHLNnguflSleFObD4n*Ls`xX#0q%#Uv~O(wA_T#{hx*#ikoPSjl> z^3jB{Nyuu*3@8%u4WzD#Qc48tj=IcBOGd3^tuj3p{#;4I`0Lczm^}0=0+1nStVB5X zK8F>oN_RhuK^uhSkceQTpXlAc z_e|n?;wEkuuqh68{5qOg;v13W*($Xh`*iRY`CHHbHmXee-)j2hM=-?;v=6^}M3O&_ zv2#M!qUoJoDxK4W9MQjtkV~8W;1MD~HV4N{NHD-H+s{Pt z*RU4fZZ-D%Xr?KBrZui3;FX}x=bwTxyV_4^bnxW`y(t5=M{;_$(EnYIUPZB~`*4kk z;wnG^MNF5~lH+?3n`6`-C{R*2IUw^Zu}UCjLJ`ZES z{Rpp(>Ezm426H|N=a-UlED6i5G{_xbH)EkcL#zX8?#?4>5!Kbz-ZDtcWmt2ycR&V- zZXa~u7yhMJxbFQg<~jDGjL*JP?LB#sD&)TcK~6EAxVhc|k^h8?o$cXTPEii8VSyR% zp08K9P*PQOv?`Z4DNuJoed{u8jY$qvC2Z)c5*&XNY}fN# zV+eTCAo!Q7)Ot9}H%{b8jz;D_;u-s; zSP0k#VB7(McILs!M7;0*w*5W<0W3%q%LEBr1NbJ`FKZ7Ty#YHn&0*Tu_o$X8c5e+F z5}#gMLhgsmmyW4KH8n(Kz_n5~)9~$kT7v12C8ANVm+ab>VbzyvCmVnkB))NVbrl)G zNu%E%9a#^@b2@W#sT5<(+x9j=J5@IgBQf2;91^bbZoKjY(Q61-6SBlL1j|vtt6@Hy z6Y4FZ8ANj-3RFsJD$k8C#|Uj4#K}9&e$tTGltk{0cv3JcLrBwhl_wC*fQ7*dtc(nW zfZ6vu_R~KTKzFT%+b$6@EA;9vOM&r?( zdpG1S;`W_NybsJy;VcUTKN;vl6q`2r`uQ~ruUTUKW0U*faK-gr8<>z-z1=Lq((;HI z12OzxaX2?(kIfBj|2q=Tp0j~cWd{}Bj|e%9jF_H(&RM`y2z8Fz=BLJApVd|V@UhpP z1H9`>QinU<(=)ZUuo@&NT@P&{?Xb3JF13IU4&jqRP_6lQ;#}(NSy||34>?ZwL@cyj zbj~4;KcGj>^@=RVV3d{LBJ-JTHAoyBN>I;`A#!>|rVAJ*2BIv{2sDzR*!dA^ENs=@ z<@M_TNue#e_dUSK3f6fz`vYgE{MxQQGLUL<;zAY-R$726WGzTr6f$>N zo@yrb(O#dEw30wIINN98%kXG_T4(j+iyTlDHJAQ5&m|N@A{Rhx0FYrHAD;-sCvjrs zSfdJdC2?NMB5kPktup4BcbO>aEhl9b?B&+n9=$8lH8OSl@c!F2Uy1L#MjiGHYs<38 zBjT9t;b$rd)mWkYItX7 z0T}2(mc19TH2a@fz1+4VmkIHZ$e$zFotO#3D(=e1y90GmkGJpG;Tsf`fOgM{tT6u0 zmkEliB;k(1WJ8{W_$h#s$6j9cA{781Fm?~P0E|Rj;nOFB`KckbJm(zjwGb>(A}j_E zgg6|Kn^ja;NC*|g@i<~v6S52Hkv(>%`_w6@IU`%6oZm7r4?)^phQIG5We#OOp@GL z-s_*wNlHr2L1{^ZD^JvVA~TAyHR&J6jAtq+PQ`@}q>nqd|6(8c%E02M$p2=_3))fbgu~yt9ZV=8A9u8?DUE$2M6kT-_PQ@q1+XY#@^$Uao|)E-m1peKlDHI{%-5fBCi-c#!`-ex9Y%5?uxpO*5!r zgv5{%p>TNHPItFk$AA68%<_*`JC&!(O(G*E^6{=xZj3u`?(^B_{!lE^Fm7XmvT01D zF}an7Gs|YGT>~EsF1<<=&kA8r=QKIN;>r0rC)$?ZAVFmt#m|7~jZK-WdBVvK$klXB z-}AGRPQ6+9B!7Cm%D=az%I;?upc#T^` z?`@_%=Cb6tLGR4z|M9WOtKk>c-EdR%^6S>NHoBWPZ~6;62|&ucVq#+Q{s(lDe?Fo^ zlW}oKA8h79VPT9nzPu(ycYlv>jG&x_fe)y>v*q}toqXK*$Cu zy~pv&mib7uKY;W)WOm}jiBAOudxnO=)Xqvve?%NI8DNDZA30 z`9M!kUcP(`f*5$nj*&6!%-MraPln3w_As-uay!eEBKyy**2{9wk!3T$pF4w!b)80m z#n;r_{FZ#oozzq=h`Ud`y>EeXUekdT>4ASR?AsSon1zgTwE;Ju)d1y&J}i)csj} zd24+H@ojfV#iGoVWF%eY`~>%^i+cO^gzHu5cYz8<`rn?{xtI6Bwm1!|*b9dO6PB`}d^sF==vCO!bC52obr$sR)mc-w0^>-k(F~7#yiN8ISwXH54P3r~8`c zG87n^BTeRCw0G7n{M}g-v8qO-Iqa$T+#fzHH?P2nj&KN0rq3H39rsHL^l ztgCoikV=-u=8muOBZUy+)1yB2Df3g5AEiGvrU%!4;Ni*1nrgRSr zD;%&HB;a1#QZ5dvm%rfOal+>3XvxP{mxph@d+ zc@h$@vv&Y=LteigIUwSD71Y5MCI5NkQO2;liSORgfaEdD^M5P7xTvL5dhx>6UAtUA zd=Oi5PA5y>lNxAy=gSvQ)A7xsPhZXX^&~k*dZ zKF*Hs+V}KQV{;LPc-yXB_XhLYKHYYhOHx?uTaQgD>zudUdxPI(;XC6-O5CYI&B7)@ z=ZVu%t#uza;A>N(?pOsbyUK=wO(yem?<*@e<8)pledoYK08bwcpYKzf7Mp)4DJl9d zny5&7?73{;!p5WT+HaQH!?CK|;=(5yoi+Y+ynla!^W;T{s9dLsOH6bQ&3%L_pRJbg z=1V#bCf*@kwI&23jTRz?1NnwlZO~lSxQX3VN?0zL2%}h+p>#2zco4zgtmB2^ek*wMXG)R8X6u<)z`}?||7`-3$0EdN$&m z`PGQ1sKD;j2cDjv_n0s;)()eZpFMk4RNnCFow+`(4~tzcETh*xA4VkncAi#(s8Qh! z_aDboQrNG2x^={$^|-9bqwfK$RaH0eCGONVY*{iX7e0NRcTvZBp7<^ozy9yapf8(| zm$Yd)!FpC?-s`Ea8`Wr8_2*WFs7uyE)G5~b48qQWVq#(wQ%I8?*VWTw&>y+Cj^eXR zP|nwRFJE7`X@|sHU$mB2zdx15OMG3TAnc}4)*~>)YphxH*~RG8@bWB4C3~g){LEy) zMmO@j%jkcm)}QGux=X2Wy(=@B90v5Yawg@oTvxrg^;lanKjMZXncwjJXrVT#Ji z2%H2gUlDqFvNgj*Ybcr6j;QBEGa!OQLbCAYp@qVN*qOW;bU3Z1`@Q_8{E@*OOr{_(b1x!q9nw@KioW3g}+CvN(whJBpwoLgh7gYe0@XFQm~urc4}`y zd3o`IW@4~$3y}>ibg;F(4E5mb`SS&xMUQJDrFZ>kO5Xt6p9{g4v0CYh=2%$CpKV)_ z%!-JN>@Qztc8l%Xx(|HJ%};mV=)wZZz^^ z%d93Ng)HI)zEnqyMB0t7+i_Bf!Q8?E@96LVDW?xrRa@YkA0V==7BW&&6dD>DPrSTt z0^p0W?bN|Rq#2;*@@FQDNZoa#jmZIb9qe)<@D@Y}U zcb0eIzP>{ilZ{c-nPZ@}3Dn3xZXa2t{h- zIn(l*wB5OPZ!Jj&d|ca+j+@polNjai;5@q#0eC-%H#peO!Lbc~`s>uxI=kvnq(=Kb zC+tNJTMHCTOg+HHZFt2pT2hhnhc1N5u1iEY74IsFj zhQ=c#l=s0RJ(OrO+-A_8D+IgiCL%J}X*#tLlJ|c@CsGp7eo-Waz6}n#LuJKJ_a8d6 z7XEH*jWS$`WE?^u)+Wvp`3qRFz_c|(Bp3*Ht+BB&pV{}-fLI9WZ0uRWZq|lcgQX~D zYI+RsDDnU=_K04j?H&F0e@As&1MAM}y{>4;YLix256E_q`%1Y%UHS6$D+9u->aI(j zKYn6akOB?>pRNY%o|_tS2b;Xs44m>BMUG7^Z5{Y5@TnNE`E`xqEC9DHC=KE$>Q}B_ zy$5^q8;&chWSJj8_^@MW$OFX!w_S9339R+~JG=2?IN*ze5^I6aPKt?B-}CP+dS+e=HOhVqt+3knLfvs70pD=Xua-sQo(H>y7ZHgDc+YGsvB z#}6d-d1)Rj@bk5!M~)Ta;!o=nU4jn4et;}o0 zkxlGn2K>HE@Bg?1FQeoEvN^4#v0V$@M_ppfZlHy&>3oSz8>^7Q!sxY5K8BLQ?Spos z0jI=g_HAndDk;H$9>O;%W6^qAHIazTG@-noqOvXzE}KAFxsBX zg_*^K*Ce^Q~oB=&3y{EYt3tHh<9GOW^b3 zAMtNomq5To_ie3bQ3|iY=MGe%BtAm@OQB-_DU2TaI=5~gQGvn)WSJ>(5k?EO6RT|n z20XmlWVP#+{boejh}X&4jt5#x;^5#gG2Bl7d&dnZ{-puM=g0(Ux6N6*&&hn$&b%Sy zHF<1uy!fR!Kwp(%TrD!YUsCio;E>t_&=R6z5`?e~RyqOd|9lj)>2mIYwiO~D^Qe%Y zk581vH^o$9f})|P*Gt6x^yy76u}_hbbzQ&XUpJoItWMF6C43Zi@ z%>DPqqUp{uZ4V!M!zr!!3*Iv&w)*jhmS?=nq}OvXU_wm>-{)gW%Bm%<1KKM^7k4`th~joYat~fjIUyh* z#>g?;`{6^55vRoaul1Rwx}2-mtPzV*q|Wio$q^z19LyRW%4q+NhGC0<&j|QSK2j8PoCk?jg%86_Iz^$IIM&@h zbHLPWx@ND%1!pRLm*p15)YIpw7`n~*aT4VgHh%614_z!B8mPac0SQTMp6V)*WEB(j z5?|J{QfIjbd&lBMn>I^Dj!yUX8EkpbB_E!hWKdyv!k8>{D|LF)Wrw;~Q(uxlntoGf z^b(CxWZd7mcV>Qm(1RakR(RQw4#(LpbMMj-pX%i*5_v#N!JDCEU*#utw6lG!g-7Dl zK0m*2A7~84 z&{nT+cgP}kNM3H!`HL5+U=rRzxQRf^_B!(N@~@HP*VWe#gE;Ar1Dtq^fPG$PM{p=v zolocY01Q&v6|Ub9<6iJFAqXFx9aNJFKQjxbnOlEGQ z#_6gmT@uZ+=-vFrxb-1H^+G~OOmZf7LfpAa2tm*^CWC?-qASK^CWmmA&tK4vlOPQT z&j;*dU?9b*;`+S~i*r^?2M-eD0^shxr)MF2f^R)NuRKaBD+>`YGX2@Y5Al@-Zxite zJ%3_q8jDODlGK+hi$h@I$%xOgX=HAN=xAzbdD_5$8RpiiwQJYr^h!ub><6sHQNuNqXP|hll3CYN=pq}tKv{d?^kDNEi%z_9@XhQm^1q0{nk@k z;#!_+xt$4rU;lW=x35wzHFI6Q3dM7y^J?AS2M2G5TwdH#;PXt=?Mwp4OzPA^Z@E0% z;;$w440UaOqW?C|+iycDDS{RB8p$BB2;x2hpZ11fA$^TcqW(}VE?L)uQz_;^b~5;em1s^ z&>ae}z&Iel4%tCPtj^LmH|N9~;yuD!A%QiMWoUO=yF#F2ft8 z&!2abk2wvU34TGG5Z(6ew=e^tpyBr)J`@9jIfl1WAn-pz1*ag~lM2ocAO6idj?PvR zYdbphNr^7r7!ryb=kCsq4w8Opc5-RlW0GdWM;1^qU0ugjFrjidU_%yuda%Bw=*z~^ zpCWffFVEdXFkIqnq~qnAxX^$fR%a5<%C{eW;>($)JUfic-45`dj~E~?9H|gur=&0& z={Sjl$emyhgusLZulucAWS0H4IQ zUXPz|ePXCQNh-?$tWvnKoD@F7uw7vkrKHf;Go2R&jN9I=-}3nCyaK||+mHjQW>0U! z`=!wcSgymGIBuH*AdR}j$ihNFV0K|AdygrcEF_2pp?x6KlYG6Ao#>FTsjZw%@TL>C zg9#a?K=qbCzHB3rm6N-P2R{dwzH*VkOKF#i_rc)hms zR7FJd+e~X{>9*fheLWblD)ojw-EExDH^NmCb#xTO8Qf&_56C2gpKxGsFHEx{LX-{; z_8b^6#H+0L^73l>+VcM;7NQ9y+}nHmkoh>gc|xNBeN3B=zJSMt-+uSyOM0wEcbKT} z0n6!~CcLtQ#fTo3vTalUtE0rzMk@NUV)36FmLBdPd9dlmbA`Ymmtg5-{Y?v>v~!FO zC@1ba%#d7DK}=Na1tnF{;V;Sii8MM`Qj$zB+-Xb$-3($Q+vw<)9;T!UQ&IUUIniP} z!tFd6DbFA%NQ0Rls66Y>@tqXW2L&vGM~m?Ac}{P1DFp)-@9;384esE zhpg2Hox@{L2ux@A3K&~od!ERTA3v&*!-a%FiFax|EiO)u35Fbg7Yt!{d0uq%It(vV zHTkr&np~%wc7LxpU)zlD077nxTrv+_CNQCSsL}g?)Yq~5>?wTvdecUge^6~RK z#mt?Pap>wVoul7ABL2>w#!!07q}<~zZ?btKb$CHn6WfC&C^+!`CL(nn3GKdSI8RT) zXY-Q=O#j=Vo#9SrCBhqtK`u)!C7Xl(LO8;`K72Xa+a`rmXaj>+0+*(fy6VFtV=Q!sd7 zv|0lTfFk~fcMKld{y?Sr4@QNx^HJ7pZq`goi+(lv;Ldc?khBRF5>ckHTVL8Qm^?aX zO-s_z^O=G!c+T%>QoQ4v*2tJ4hhH#;v3fA9*#F zPU&QV(*FP8Y#KTqgaW;t6(uDx!5?wb|7Xk$+>H622}KS=1Z0MjD)UIDy9QWVxh9HU5(egqBHE+o`ApcP%xURBgQi9?rm~Qd}d_a zpa3=*qqzHoH54hp^BzWG#PLk@?z-5&NAc{8!{Out?P|6$E1Bc4ib)#X^ebtG8z z$MecFVh*J3{oruJApT1E0O#A5-vc%I=AxovzzLo|f0@F0TtO7_WInX1QRFPY16>yv z7mM23@np1~Y4~qJ?D__dbDB_hV6Wa^e%%u9Ej}_O$~c?;i(6P-AOa9U6A0NzySChAf6 z>(^U<8Ml?sxz<8r^5-*SY_sd71z=kXe0fin`4ci%<>R3t&QsUYy7vwr#i`*fu%|`M z%sAjwA|>vDLnxo`@4>=Bl31lv#nO^{>i=QyO`vjK+qdBx8(XN2LXx(GCPR{x29%-F zT#_cFq&ZERvk_5JqZal2V#AOPVLmY5b0>WPASa|6A+(*88sYz292z&EC(m z8}8xvyRP#(&*MDK;}~c*Dg@XN?jHHkzV2H3RvZ?0j)%M~oMUqM?*pr!o!eSho(Dej z4YKaiwvvF%xarA-OM!G_M*pd!5R_5SqWB6}%h=TPrk|gR>lnHgy^WdUwPs)!3imm^A=z`IUH6f-k;@*?FK(UM^?t0uOaj;c0@_btW{0^cjQ|S` z4GjROGq)%EF&ppq;`8vK zBZMFR78YhgGVTzfx;Fl{Uz>EGz-!WO$EXbC{r&*^_yb}&!+%6CV z)LLIVqf#Y6BVJJiz;jvR6=`r2M2sA;==K0NaRx1#`M`no$OH?J!pq9ZEk)%9=<5r5);)FVG>gZI(WZ!&M}?Px)UBwO6g+%< zaY2vxOVWP2`OiPbAQzv3YO&E2LRcBbArsXGpzydGX|FS8;+9=cG2^3T7d^|&%xncJ z8y*{b65V9bLdr7C^|DP~C0?@CWLfY05YdZ5+H^K!oaGf2=2V^O>FH_4ElW|xIN|)H zP!4c&uiLuSg)|v&-@e#Y{+!@>L}5=b4t!_+nln;T`9SDQ@P7K1t;LSTReuM%)Ebbw zC`XNrzf0uiVyf&CW_-R64!%Z1gsC`CkO2p&h`oJI?UP>Qhr} z&qLnF6XsKplasu9Uv_Woab-)twp?tLv#Vj|#smXo%}DZP*gZ!B0NX4)cqmvIL5B>s zK*-n?Fan{5P$sD4*?{`rC+PwKLm;lF_-Ty|>iEhV9sA!k< zKzjrz+*2fxfPSjB(X3i^3^39stV<-CA-Eo!4_y8e4JT)4b%%g_MWG<9BMt+{tm>Y@ z@pEQs0JSW1ewLsic8HukIG)ar9upOPGJINjmFvly5lp)g6z)h(Eu@paE0j-<%^$Fu zsFheZ`_X-*FKZ8#VMVg)E?~1ulzCq^*X`RUKBoy)yz%*YiNaQ!++E}XtaIO!;JkDa z^Mr$d;4eW^Yyu+XO9bk@&I3JWrM-k3eb?F9s;j3V$BqFo!X2z#GWQU`H*IUwi_E>t ze;7IE7A^q#$@fAxDfyMYBxHhABPIeCf#ug{5+ZZ==1Ll7#1=5e-U9aF0vi-$qF|Kk zs5x8?ooyChnhfoE(joxO@uj1b=;e0;Dps#*8p8lqGhEg!G)8^6UBpQzcUgJV?)6s3 zdI!Q%C3j^Sw&;`en>^m1U3IYi^K|WTK*~^(xPcpvnl}rC^vwr#{<5{R)5sXOcaI7i z=nG;mpW1)2u2@KhhMiQt}2DYf}fn903*P39N;)BMxix`NW zJc&f=3y{P*O^{SiT38%{TssYH0$9LO!KgY|Dkl)cjYqo`uU{ANTX%i%>xm?z=56Sp zbV7)i1dZ#~*38`UbDU2*W=Jy(Wh)Nh0vu_h`H@w+*KKSxF%#hpF}1>RW?HIv@V(Ja z{iM@?h9K$c0A0gSD9B`gS=`e{XkSYEigK zConBiRvCZ0$-B9~IUmG~KZmGqY094puxQ({bMGwsF$8W5*cf?_3T9E23U7)(r~my} zB53ff7+U#rpqg%vzyCMLAblgtZ zdg3on&s^oU`7XI{ey>$5BY)DV#P*LP`K?WnQnoq#~4%1J}5uN##-dfW?ZFbXw_LW;HL=*7JP3PcPQLcm^usLgl4H&D(mEZxP=U#Bnp z2{lF|U}1M88P6(9{v0ivTWpa(xB+eqC$C{Cll3%< z1#3gY`7T%Y1+2ep%0b96@qWMew6&zun}0N-uN6}&TD6fu3)Fz>ap3T>8JT`b!rK^n zEZtI>kly6Yz#FHDMkW1L?pGseRUO_4ojkNpCTCeQE!HX@N&JgRcpI4A)>EHT3>c6# z{>42Zf+{k%q^WlX@6GyuVqt~m#CQcspX1q$BoDp8^^mE0MYOk4?I1SQ36+|{uSr6> z$y-3|5jl2jiTy;&N_5P7Tp0we@5dQ!GTbiNSKNua*aEnhN1N9HVz{KdK(He)N#7ta z@z;5I%aG>9nLc>&zU^A#_|=l0KmSs7Pcbk(iKbD@J{Lh`R zJ54F1C4QJ;vASbEuo9Qd0bUkJCHJ2r0zLatM!13ZRh>RiDm1kQ)hIexe*<_V7Ac{2 z(0QUbf@N_5(B?!%(CjT}!={g6$d!8bTDs7c^WG^gKSP{Rcn zZYS-14X3Cm4sid7dPL&r)q6K@E>l%g>oF@q0+>8EiweuUPC`OLFKcXMam6UHllCJo@lgRm3BT#BUQa*z4c_CWTlkaWFvNF4_1j$(f(DeydzcC|mWQ zH|zn>@UFI`x~QgR<+0Z{_zNT?;;KasE#}shGPt&O5TPUchH#RA!4U}qiX-xuFC^Td zU`1#2o^{DQv01-yxVGfK;8T12f4#GH%Kso&4?E-Y50ZseOpv_62*alrk_?nrCv_K|4x#k@z656Z+bgxZ(V;mp=V=>)8b_XIROib(;Z$g(A!p`ru zviW8U6!Ir8!Bqb3_ZmzAws@BFOf zgqg|{FRwe$6$r+jLiLhqIgpRrZ2pyH{i@l?n%u95!Ef++Kyz~e;owz8MdG#u6r@ju z*ph3BVHWUYA0f@UD!qQz~(=s=JD~bO7__v z97+!#Km7Cd@v?BL&i}*)x?I8gp1le3%LVW@30)Vi5;xFIeT9L%H??31xwBz6{7FS! zS%3Dtb=8~NdFYv3PIsPoY(Z2X-+^NMEhI!fuekjsuDUyB;7YhygY%9};(~l61PV@Q zwY)+>KANu%3KsMX4H|H?o4T_41t=h`SxNggqdpH+fy?%Xc;0LI}==!dp=p5XV&4oKim`CyYwFmmR zn3!g`>k&3gS_11uU(iqSeJTBudp2m17PME2h1T#W&9G{zo4bpBg=J2MJ9z+j}vCFG6`8*YNk1dN%U)1}4d#YH(bI)zLI{M-Fhr#OE3^2N*A2u%CeC^(&P77(^3 z;k2Ltg6zmGPUUbn6`wxd3Vr8IDr`+EtaGZ!zeI}}@*WUMV(9nyV~4ix?a z2XbyedZ@`8{bfAO86$>;JBY=YPU0yFe{@w4da`f*KktniT;rR=4MFG!dpQJUbzLj+ zF8Bg%f|8;e)&ybJi8!q}hC0Foj#MLk^_yNLu7o(m0r1SP3}r`D=~9k@Nd_J8rIb#z zo}iNU04Y#BYE03;oU{HO8?UI}^++w%_>gFIL31+`N$ct%U#U+jOBe2B!TUJiMVZ}~ zFYaekQZR#2(0yci0<+T?`&>5K)tAtPBJ@wF)h8F+KE9oLo50=aY1^$p>7tb4@=@^- zBo)(8U!XNm_n9=B*+~b7Q26%mf0;iB{^K+%?_^u0g;VHqU!Xy0IkkA3$W5*X5V<_P zmnWP#BjU~q%9me^C82W*U~kGBoC}wyAWW>ARZ?1d=NxCXvNCBi*TiWQV7DTpTSCEP z5c4*H>%nTUJ1Tf^*sSv}AS4Fgt?|v%XU>Q!DA1xewjTraTl%23BLYZszfqF_sVA}f zND74L)-&CN!Tf*7$G`|O&jSt2JYmO~_q#2eQPCBNeahPw`D95FMyy=jQ4+we_Nj3m zI#pJuU}JCzOK^exvsU;ZML?yn&n>EWMjfP05>L`HGZ|bix-ZPXMBl(UWYmy$1M`w0 zSy`%?`eOsoB#GRX@U#wT$Ny){&BdOnt7Cb&9IBEP!0_tqD$(|KMt~XVEL(;n_I+XD zYv65z7(w>w*}=jfcU=s|MRbE-zgiNIdNhq z1&SYP1I_#h{4!Bhr+@aa?H;S9|MTpYXku~GJd2arnjYtQ5a`h4(1TN4FyMvx`T-aV z$b*a;cB6El5Zo>x(DX z{wU7$-?45Ty|zwuP(-aGmcqWCV^tgAMKt27v2>GV{1 z_HeXyoRsRA|8DX|)L%xy9{-DWYj}nFd22e#-#=kC8lPT%G=O601O!GquA$wUU7&F* z=$y;gcE*p@O!Gm$Eb0QXH=rt-Sfi(b1e2Zw#Su(y0$GiK$G~L!eMt@^`D}+j@{amP zXaOYwP4kh&NxuzVLAwr=RLVUN6&>krnCn||>v%;Xp-8IpY_eoZGK^BGT;XUlbmg`| z>Dg`Hd1Nl=yEb0fRJX(o7=9jj?@AiPZNVl z9{h)bU^EzQhteAQhMybGFRA&cwT5I$m|IQeE@fn7M9%2~w5|mlgFh%}l7DFtX`P}b zRhMk*1)cQz4vEHp+1d1$@ToD;y@_ygKs2I!!LPlAHs6>2erjOOAat9dY7b2O)x2DI z(<<8dJ&f&Mz_|GJkNp5ig>**{B5*_rs-$V3^|%FNXHas;XQ4)ldLefe!enmNE}K^j`Gx|GvhovA=7<5>_h-(y?)36yVNS4rVXrhim+Jgp z4t4wQ!-+r1jwgPSOt0ozwb9yt5Pt_{2^aOEve!%2??_Azq8lcqfa{nh%Id!Q(M>%& z*RKNYNa(-NLD$V1ZaU1D{E1=5LaW{w6rOSIg}cQZNe5s7`a;vWbK`U0(Kue}*z`3W z^$qH|JpsP&(lRpMU|%CyLJ|Dl1&MDk+ih$w?vEN8#(Zgs5cUEJvXt^$6nkDa>rnbxMB3KabKz7DA4EA$s1WWL+9Lxx z*P%^FP}@pN@r@uwfSr1# z%1P0YYXqBDDqS<00fT^JGA|87wo$|-;*N(_|7|sP=B}tZf8Rp19e!>a?m9Gd4dqQJ z4aYon+5P*GEep$6b_WR>Na+9O~}J%e{{+b8hp}8-sp{ z6y&LYMm*-#an`>bfr}_Ba=G`$s|~X8?KRv~llWk{I{Ysh>^8^dc zqJJ-hJ1#^Mr46ut*YB$I&vhul$3^YKiSO4~di zr(ja*=EAkS+wFsT?`w2| zw$oC9QvPz&hetm@@6Z2HXT&BdC@2WUL@0&>$Qm5o7_D&<)6D3XuHfb61&1>fp%*XJ z+e?!7q+Fb<1P&lmt^j?PP|$F}TmOT!l7Xlb-uS4XH}j)Hpwuq;*oD_hwU~9yCZ^nf zd+ESLEPl*Dp!cV70cCXDvpLX`Uw!--Q#}Y66&1G*d?lO4P@A^`qedwlZXy8EG6B=U zdW9zVtQ=p>ZHz5nxNwBklg2flkH1cYIsGlhPkFXX&zzpWk_-RJ1%_e9#1u3sbxa~c zffS$O&)1ifkjXU>Tq)r7FI@RRBf$Sbq;%ZU;dJK?nBJrzy>U-42Z6X~-1%Y{ksprc zpZ=9SbN;nXHuQC~+i$NlVuL$32Lb>6n)z!0?7t~0ifS6tsd%v#jqclMK%uzYdf1o( z?#jE`xzeVYf*RGiIi}no%{rPxz1gnGx8pw!G|RHdt&?RcjJx}A+%MIGX=Z)4!?UI) zI`(Hzo3dSX>~D$7Dz}{qp<7jZTz^>eqBb}F9XG&~Q0slIn_+o*Mp zdR&K9W1p3}0RE3&0X1+fDcDkYJVtv0AC_OA31%c+<+KA@Ar~(@p0BZ-trRHcU}KAT zKYB)RZCd`spNm2dERSeE@#=pLMx!kX^oZ_;^hCq7mKBPT3Wc$*?=Hn>8)YRCyr+L0 z=ZQQBZJ?{=cH!7nK;Mi-3`rnDlKJN*NN%TWOFNqzB(VGbJK{V*S6k97e6+AojJAwO zqAWZ%ok1c8OM<>R$REgu83@Q8wbVveXI@tWlX)sj8eyIU)fj4n;h`b@o*R0e=I#Hi z2|YUQ;{EiCaYr2A`!mA9JOcs+l@*K6NpWQ0bh@}%t8tZ40wl1LF++&iKx<5IHr5d> zVF-BK6q^1nB32GwCoSA3FwK~0L8PP1%#twlyjF1RvnKUaZHj>(5lsUPGZHFl7Ck6< z9jXQ-OG`?sQGHg1m^_SBG_fxg9rIaTmp1j7$UZ{XM6Jq1=2}Bx?{{b0nWQ-v=1VF? zysv&#R{XePYIeQ!(6v!C@^|N-8fJ?KO0L-L)_qPlVN1=`XOw2jozW}9rMi~7a_;FG z{Stl*DjfSi{V*Z^Z_gSFi4bq3Ld@4B$^5}Jef8shPoH*wC~YnsJgi*He~m?Ld&qX` znw4H{fgcsoF9o5TDqEJ!_VPpBsIKu^;?kS{_@@-|nTtF7r9SQqvXs`^CARyTROeCa zdv&R~Cyq%8wE`tc(kv*ED?M{9z>oLJuJn?R@;+j*ro#%_9z6|NeB6cRhJhc*H^UA* zQtdc<-siRdW~Pt4LT_vZ%x5|yFao4!kH1DmXTDCBxinvOaU*}mCV1WNS$)g}hXs>s zg@&~NbCXRwq%ha0h-I1+Iip_K6Lhq+sHoxyJe|?jk3@Z})yTLK?YFZ~NdgPXpa@<2 z2=GXy(cIGg{4&Jg2YwDFWtBt@dOQ^*?e%NVWhi(vK?)&X+UR+;Y>9(+>dceSQ>_l= z^3sBePYd#^Om-*Ils{k>npF}UDVSUpfG5Iiw4!EBn_;5B8_9F{NX&(u+&7)6{*>iJ9L&gdsq9Magi z^(;sT+n9#K|A|yGKj+Z-{n#GmtTO?b4G~*j^Z57g;MpnZ+&mWyxG&=5+75%U{>G?@ ziQ})-R2I1a*Vk?pQjkJ=Pz;sb4FvEVN($e=W zPcHtZYV9(a(a9e;n171=v6=Qe{VuDW32ddj1YkW8fG3rbbKjhkFf)3N5hH1$d<~uc z^DkyVlrXVxXwLSa2te{3UNgMlL=m^(CZ=VmE|gWtREnC7j-rU3dEFp`8Eioq!ax_aBOn4rRLueFMl|qkb@xdx2Ki>j)3Q)59!I6F$ zWa$!Zn~^{&oj>o(QV3l&GCcslMi$~K0=3x;2(bzgJ4omo5f3(iv7_vJ|`iLA*7HV47e-6ZJB25Uz;7*E=&E(4S35lnJxjB-J~;Y-3t%y`{TF2&4=4vtKv`kii*GvD}>InTm_C;Zc) z+1VwK?R$EcI{5h46+0F`;|F1UM$6vM+aaKaZetJTrVz7&L>OM2$UUTdW$*j_RA!}j z*{G=9uAK|=u|KNUWF>`6fYzC!z}j#D=;Rk=$P<5f|DH8rE${yMizj}cjjHqc%&h6O zwDI-Fy43~>)r}NN-0QU`DU{%(GNQ+Y;G*L(caZI&P>grt7XT=Is!g;yk&<{W<^UDdJ$=pObBY&e z8+W~G))3pqdN?zK?UmwoVaR>qXn|3iH-x$ZQp7Ndf|1y?8|%ok%dnqOJc=%QHqk|$ zHy|Po)`0Ch!D`>v8n}c)l}GEpKlD*p;^pLxg61%CuE9W)$d%IetFO~m=x(O}lJv2o z{=ldkjoj*hRi`|td#BI(oy~e4pM8?!z`-|H{X`02X#b(MM%CEDT+IuID(LF0`{KU) zEp4#7CLkc--y=fa$WfpDFrxt22#+L3(iNh23c*1t;ei(Q2;}>SuGKv^Hzh2!qO>rI zqwpmvDeo$uEN*sI)=v%TMo_%3zUqf_Pts?|t z?9;W9Ma(^9U8K@!_eREk+5$9BdxkQkJSK%dD_y)8LS5v>cqDe`eXqf9hsk?-73G6; z7miRds_Ak>R65XhNDS`0@*ZHCa%E3;N1^)lRlnY{JbU8neXRz0$}1+iD^w-GQs6)S zChT+voB8A00M?*1{H7}d?S$)TuqIITd!sHa=l^x$ma}w}MIVEIti+jV+2M{o(2oyi zW)2WuOY``)hd14QpJcoV$9s8L_%txbK(<|mbgS^%s;lSZ0qwd@tC$!H%a;LOv{9U9dws-l*YwjCQHDM6zCUu=i)3FoW`P zYIReM`=KuxmhKJpUezVnk|`Uyg5M_PyVB~@9zj8ILes|S6$}m)6%|#f(oAg|2d$Ti zQGFj*@>r=|J#?9?xhj5w57Ki-tuEhNY7H}Q!;G#M$7`C+DkRTC@MopX9~4$LtUhv+ zdW=fXnw@c}I5aiZUo{~c>eIgg`-VNuny0X>#-lQ7({r2-rGLT-??!q5i~6)B8{Pqo z3`x8)oOD5T8IQ{vi7D=ePbTyNvY8};lv-L*79jE&o}*AN|8_U(C~0u zPmjtslY8vqnNz-;;EwFk=%03?SWbN{>7||aM??)4IB;T#AmrVM;)h(*Q{I;@Tye8XR}nL*?go%=8o|6g{~mkD`LOZwD$OwU zM!kF~6IRc3_+g~9l3n|d6XpIp=Dhv)^mjyj3gWRZ!CjY8CrgjG&<+R9DL^og2aaiw zmxQU44(368Ve^b*`~|XpFLT}{!N=Kk#f6nBbP;)izp{02i9cN9*5K&uv2p9R=f38Q zLEB2tSPCw?8RfI>+1$r5naZB^DF!oQ@)|z<2@{MPH%8t)-65UFbi_i{qq6@+3Ki8g z`--F1lLM1lHHHXF(VxO9iOB}0@&^-fQ5>mAEXHZvg@KOw)B`}05=ojBWMux%+kX)6 z8>)E`E;g$ubZ(gyD@i~EcgN$~&?>c8#Z-P>$0nQgX=2sAF3@iF-9LD>D%S31-sIc2 zOgs)vOH(J|w-`lW z*5n-HiZ7!sswk&^a?A+dbG-MCV|6F;tLogj86)&tBt4Q~7Ea_1(U1r`N3C$7U#PDa z1{Yug-0Q3fKP>IFY3y=dTi6!z+eHml>>J5zI3|4cTt0$^>u15i!HHH9W??7E(Ig*@y0 z<9Qz5Au;8KUNt6#gJDEoxPJ{iY!mu7QufJK9;rjm6DB`uIZ9m6+d)~bt|BT8{pf3U zVhxlpB_q8aD9t19zW+1K0C>E;q}}2(Q@-y~S3WuiC*(+Sf|fl!K`fWvT`EI)%yaGA z`{Swc=Qux(RgaUJIRNXK0pkRR^OuL}h5JP0m&>tmXjSg}$;OG$LdaXvD$K0`j zuROiG>mN1PG1oDcadGL^J+%@uD+(PdZGXRijcXszdH0Z#ph+RK>6hBE{&teQz}7E! zqOG~Ox+)GiI}7X1W-V7rcKG#Kx$(*wERB#nB`#z;#Zc=I(L$60^@uL$rTkaxDqgENR!0@ zf341mxqN5rJ%j#@@9P^Y&mKEg;?Pu4;ZU33E^7IQ17*f}{XFIrt2+7>f& z05R)EKe#JL9W(8hfS+-t-{g&4DxxC zKbHbs&Rqrn@vAto*qO@*8=HVO@9Q%>%ewQ2kd=b!iN*^o>9eM9*USq&l8cncbz+Gf z)XKWS7Q^8h39RHpK>=;!NqUaLrI&Dg_@?NnuWvlC)3S8uK*bpKJD+uwv@QL`CEK|~ zNNgaFSGH$lowvaN9M*wEAD&AypQx1M4q6z%_Zd=79S6F%3&cEYN?lvSn(tfMM!!Ve zm;c0Q_X$3OM3cN!U%{R|G~;X9Zb#Mfv1oTLJS&Cb{RkP|>({SARhfMT$oH|i(wF7n zgjK>+9XB;YzkWV;QkiA!6`Zl0Nzk(tvn=JH8%@fNVtc}t@2iw;Evwt`%)P>VYMkl2 zvC$W{Si}7u;)c4T_k@ltzWLy3as|-F)M{LQ-5m^TJagpSO*^`c8@rPv|MMPQ^^*^~ zCZ6c0-g3smiF2cbdj;o8>@_yNS}iWuOPn%e;<{smJqa5lRrE@wYBqJyZCd;^k9WU- z#_?CS$kS%&FE{)a4b*k*xF1a?@*P+sqG{uL_HuY@I{(7H`bb;kxQe#JoC^2N?90(e zA+=E-auj>?GcP{tiz~iMC(#cZ0i&{uY-Y4ZiGVIK!hjqd@nD~W?JgT^?xHiD*S|WF zDxppe&D%$U>=_;TRP6)aEM`S1VhdT3anFh!>L!bokmC-d!{|9at2fG31E)y=^#eNB z=942=#k`u_gz#EOV|Bq_)@rC2Dy>S&**U1LrgY+I(Q@X;{!g!Iv0r&*+Tddsio}a{ zL(jBRd{WX)L#C*wxnJkgcJe{4;Cyj_1ij~@N1)qDBN^NDe9xee0XP36%ahP9@;x$c0BL)EgGUb^2D8bl4;hzIhSRI*`S+IQ z43<~2MJkmJdah>RwT-GxY|3c2UwqGwZ;&qp`uRmch5UF;$G81e(P59@W+vVDeR}TF zhwll0!R86^^{`qhO#EoZSM2xl2n-2T&t~N@EPsFT$L!3?*odIT_xy?n?-`uBXq^2z zPzaQ&AxumlG@f^CZb!YQeMkAg@b9(=o<`7E z4MJy8nwRmND7Je$U$CucQ2eaFw)m^eA@NI2zZ~6UQgGdwV4nll%4lltjAW_cxIaq- zj!Y~?WEXR@6qU|IXfO!9rBuOc$YE-xLPM;Y)vBVX4 zq)smm+R1NY11@eR89Nq7DEeEt&bnXUIumn(xQw7Sv5WGw5@+Psq+J^_dxFqW#Fp1$ zcP}IT1_RULg<-Y9o{=agPRMA}>0xq)REhYgK=AB{h(D^7CZ4_{D3FL-Dk-IqrNK(k zT&kW?$o3q@`ehK*M^FrN?B0C}%z+Bu9C`OEF0sQ=aUT8%sPI|Dz>6hr?EqLUB&SebC1CbQHAMv`1_&tXDub#X{TV%b z$sNKJN6OMk2);i9IZFpFITrP9uy>~s9C-*TY%~T>HRREDY?uEmNwc0;Xz?Y#ti@si zl3Ig{Ns6TUCY!xt*kIOUwO2+ziO|4Z?T1?|Ou6KG@&MnFg02y&jnqA4vH}f~&-S?x z?I6m+*aT)eS2jD@Pj>D8r2~$a`JxrA)wskG)U9JgP8+O7B6FRUCD7K<0eo1DNU0^m zflzR`nEQF%9V|F8IXKbeW#E|C($?+zm{SZsg!M*KQLy z2aartN>lK$W!XR4{fMUnal-?%{PB4vD5>of!(=~o4{8j31L8oB+v(M}cnR>oP48%> zgM)+})Onk2O+zrQXB3C4_*j<-7{g9AU#VGfP|Pe0@L!F(zrBO++cxIycS-2K#Q~(c z0?MM;{!Dyo&6tXV64nhKsDBnW`E4C3}4;>?83~$qQ5#s)s7oUo;9I%cF?m}GA8Z*dk9kr=QOiWCM zF_XE@)@Qnk{?h!$6QVixbq*)j#mBTU{MGq#cBC+r|A}vOzWElmSG=#fgi6|js`@Kg zNU{!3F^+_N28Q}EuZ|Y9o-RjP>6vsy8G_An&ow;=6wb6^Gl4SxQ~qb`B;kV2?h6+|GmU z_)|uwM1V-=!7?@NNvTI^?OyEd6FOsnhv&aN=msbmFmddU^mfbJgYlQ_!^9Sl;#lL4 z1C6b%00%)j-<7G=Q5sZ(3E^Y{;u|(jMvmF+lt0rli>3?FBDel>W910EQE>{N_eioF zP$z2(6;u_bY99OeTuoI24c&RP1q^T{7_!<=51zVXjyS7ZoAA7E9OUszxXp*5`hn-c zrxaU2st5!Y261qS{O`bI;nPPVCnhvTKM4=We|&k8x@UYk<-Fe4Rvv@55|Iqsy3ClS zxM^60gwz4CD1^-Xf{M4g?GOu!Jx}Zr8mmo!%!e{oJ9rwO!w8ABZE+}7qe}QPTUuDGkit5aj7~V|44*g+NW}DyFzFA?{DaV4zChojH(GL7auUgPuo20ZFau zH$!_?37n`2hr-sE3*@{rY5cio&_ODpt^CeS0M3> z!mk|3+VBO3Cd_bO5-UcuNH})wI(dKN9yyS7C1w&Id(LB*=V3`6oY4QvkOBsBez?Ga zFw|I*TF0YXc^X=QCQ*IFPZCnIdRJ&vwlzF@Su@D-N-^Gyonf5(fk z?+Mg?igc6try~JE!7-w*&JZ%Fsf`wX_yX|`A)5o7O198IV55r<)j_r%YHzp#wwfWi ztJ`z`!Gn~UIUIDvxSR*-0Z7s^hlL_+-Gzp~{}xOR*dgJ22B-j#)rtVirU)GSb=7?h>GH%26%2^pln9*I zq{)a$ox+O7<^R6nv>R*<_ghF34h^WvY#U41=ILN`p9Br!kO4R?3fwVqX=xx#vLrVe zLzy~>&O=df$G=ZQQDP0=l(#3f;i-yY`n$0y96m~zj5-VUIS;rf#KR2eg9i&L-8+3V zNQHWS<-y2+ZnHJS$s&!ZLh@pV=!RMXNPx#PP@M0iAp1!f{q2qPi;`XcZ_ir5(?@~-XH#^cbB(sPkDl$wd`G)D(C6*Md;ICV7uA3teLK;)m)kB( zOm$d-&eZnc6q=;--<~*yhU!}$VRGtazL_}3m0Q8G&@WX=Yaj0)G(iPK?2{T3&*dqD9HG7-iRt9X^U0AY+}JT~JcCgzi{&Ha=h40CZq9XZpQ^){ zy7LN7HTGgs8MKC_%Jr~z2p2OwV^p-Ajl z6n|quNZ!ii%Yz5Z`>%!R{!wFGx9h*{RsZTwpUds(VB8|C9UW-h%@$YmixPlD@L74` ze`O7*wua6V2DHbD7q6RY8_5~-Pg(kO9g+O%s}bql8d|$}Sqp@RkXn-Tu*0{RF2CU3 zkAPiVLI?0C;|)))rJEau=Zw!`#U6r%Y-TSgZB&EP+tSFk8&LIBS=7d z;tRG_fT~alyp_1~>3#~n5u=9oHoTyM9UUoxgKsxXmYRG($B*(iMNIUVg2QZRE);YT zk(BAje!0LH_1SW$q%HC z2q+EATcKL*w`2Wqi+nXBD>05rh9x^`3U3j%&zh$~=t2?)wtVzt&`hggzRkVx60bb3 zFU_X4MSV<2A4KxG{s2y|wM;^)1T4dGQuOlowDAgSu-88XiG-~?nsCV~WCp9=dhz`t zHLwhERHs7gfNtBi{+H;gt2$lm1oENviR0fNIx0(^1`q*icz#ZJawNw5w$`t23QFid zYDJ9O$9e;?u|y<(o@G_@4&#YfseS58M^F}g|!~fmL17e)Sg^&XY|gvy03+O zeN&JbYu=9|4Ua19J)yeAqJu(2s@`_a?kUUFRwtumhg=d*!wkG0czRESqCvtRJ*QRE zFHs=T6bjbTk;YTv;*l(DK+XgBJzJ9`L0@9IiX&liX1qBdr4}RKEM0zaIn_CHb8`-6 z-{;0l8UBO46JbWGFVL-U9)ZJSRMP7<#ho|NInVC-zpt?8T4&kINsXN(-0wD6whe`x zrr1~CX4_WH6R6NW%z^DQaclq2v-x-8;@sT`*wky#M-LvNo_P;lD*~fS^LLfoN-xavxX8qH(k~i zx~whr?X1w_u&o?a2e_HQCA`MXOVtU!ll!|%CQ$)Liex6=N87SW^JPpae^_>H8O6KI zQ!@wOt~#HUOAS>bW#B;7fStuNY<9*9*yg$`|Bww#PD>&#gTAUaNxeSx=hqulFq$U>e&{GWq{IqeZgvscrc6(8=&(K576QYLg zPtZjLdaFR_O?VAZyI|)mj0IMgd<3{X$%D}ERD~K6ar*>kITjgjnz{d1eFr#sk&uY3 zeFjf_V9cZpyzIxM{6qW)u82Vq z$-+-n zghn1jIB+h+FkX*DIr*NzgUtGlwze*mt2N}OQJ6&GgJGHaKs+xJ#UJULcv5ts7F=)gV<@q6dRpD!%B^jRu8;2T657-;6@~ z?F-8V;QnYEa5h@h8vtVSLzhP_TF8b$+P??MNjNAI=QGSAAQqsXY6$s1Dr)Mp_=%lj zs9Gx|c^jXBEJ9eK#MvJ0mxHzw#@NW8XQwxTb%TLvVmV57H;Eho_|9iq#Nc34{3dLc z1Cj(rGozu86b6`&ZQnj=3~GMD09PD=_dJL}@6U3wBC%A61Jzo6N8`(jH}NiQK6bp5 zkDZn>9{s^|{mYWR+Qd`X6V;d~9t{(o5%ZwkvZZ_I9L@nkjpeZ((E+#OD*AK)4>FU0 zf7Xwku(O;o3CL^>zPNb{{8awAd2+z)x?<(>ikLc`dr~9T3cNJEX=|K?_%al0irD)+M?8kQqAvmLId~vCJgkId74^359 zOqyp}z!@0I_6aI>2R2;eV1hfs)+csor8>R4#D&yCM+M`ce0MCM9s}LvpusqYnW8q6 zhDLk5Kc^~P9@NAJMSE4#E}*5`1l`61kp4E<>~zruR-9OH8AYv6lmb7*AX~`?nWiH_ z68pmi$U}VsV)A8V*^Fxu4z!Eh6_r45Z=G|{XvbDh+LM_e z?4|ZYt*zwnX3X&5%fx`uqA2M4*HxjIW5~zR-_Y%#yn}mK>#X;X$McJa)j2j=^j)?1 z_xL~Yz^P@z@(G%3n^81yldS0S5%kg!80euQ0ir?HuLE9_%JOuESw|6BL8-lJ#3^h!vy^>umcRKuQ@mOTmh%VW$m0|e>NJvv!dU$?Q!)}=5n#pAXKCnr!I(p z)X;cHjEMr0*EhGCiV9tz2o%@YFRx(#NJGma^LbB3m(7mJ%N5cgMot z^|7DQIa;r?5gum1Xtbos;J+=4IUOQd{!FPsRjZ;gT^5r`+9Oh<8 zn*d_07gfeE;>3F7hzhiqQuoZafk7dM?71v7q+ZStdKS78T1Toepo<iEzAWiW`(* zwL8>|V1LU^~%;RG*_-PExIlPdEpK|Gm9uA2>`Okw7X%QeXV& zVO68K_(rS?v#)Pgk=Tb>7|Tg2v4=kN?&NH=40WXT>+ICYYzD(r1E)9A_1lJ;o1GAz zqk+2sOf9*{{{c;7MnUV!{u(AV=wE|zm#VUnfq?^*P=Q!(Fc7OANee{~8*l_|S;!mA zvui*FrZzCbfYBW-v@bpZ-a|+C{PYKV1ajIa;lTMUj6SiWlbX9je)Bc%RJ_VeE7P0| z#(Ke#jlxlX`}S=%Ty*e;Q!G$0LJn9-UmwXTVq{%%=8yn_FrD5ML@WRy9v(@AsQH04 zd1nt_M>`nogD5gm;KX3~3EV&q1+GT<^lVHtkTV%iLQ=~sfmSCm;+bS%$>)X^$sM6X zXtRJepTdyW(3hAxSecHbnlRJDF^T@UZm)8JDDt(8)(1ye#9-Q|gzHS?cyBv7)y-Ic zb3cW~5b4v4m1D;E1qfL0b@xoi@!<(A>>!2Z!g3Xae*zVfJQuI$x=rvr0O|w-OC*v3 z7?t|efTe8)(EC!rCZn(2!<*VL=3~(@@9#Z1 zyDQl;?KRX5HblIhPW3Pb*gYgZ1)VQcjsTna$p zDH>3`vU477#fqdZLVEoI@w5|9A`ewo#O6?ZsT*a!MIXCjxk+*rvS&b>hlxUcBMY(l5&ZG( z5qkKK$W#V0OF2mA>Ncdst7USORzN!AesXpu%E@G~BgoWAcWq)A7$spCV>ty~x6H9e zmzLrvfQZ{9HXck-1dywof!9tT@pUB>p6At9j9Md1_o!J@&43{$tF8Tl6qUd=A`n+n zm?zq1AaHXUFH4f<$%o2#er&DMW0)DN@+BXS)73=pHy>@jd_c?2s=uTVASUyAQUkNy1g#zotZ=&&R2@Qa-ql3xjSLZn(|N{re? z%Ug$#mZRZK)I5oie6mrqIzE5A#IKR554%rfFY%diQ$Aq&BJ0~Z+MiJY z&N_OiuYLK=BMp=xXN!4@t#yr79Rb!I0hYZ_u4rko9Xwb$HpNjY5B1%9$#zIjdjpMg zIN8_=Q)Uk!$pg$G0$YKHEI7->iF`3Rvq>C|70zAX^PLBoDGlW&jym}Vz@UJB@9VWvrGOycu)alBI#iD zXAPGyPpN@*wR6|5ZtRZRO}68&S2BIh=5Kcs=EYX*u1}4FlUx)|;&7Z3zOV|$v~M`Z zOHtn({wN574zjbck?72hclETRKjM&SAD>(IBe_OBF?03I2ZmReGV6Ky5gB2xdMS9z zYZ(t4zX}ORjL3}B+B)5O#e4t7e@K#DvoaC4S?lcP#LHdcRwchLAhQS13V(>wHD}`M z>K_x+ac>8qF<5Jm3v8%fG6SRJDQytk@KnpZ7x-^L$Yu=|DSw_h*=##3Y2M#Zo1%|O z3IvOcjzAk#!#P5XgZ5@QGVCZ&@~(oP=kW}Qd?cBkHMDGbv;3nEcY%dc5jx?dWI@;= z9_=1`XGFp;ZmvT*j?j#O*2aBGvo|kGNj-pvS?_Fo64J7S^D!SvOD%`bsLCN;dCeVF zseWG^NRRa*@U4?Nv7MYExhNm_1eWuo0J*b!6~fMCOUoB5sQ1ob5G}>;TK3D~Z~bH< zxdu^~Afoj)LHpFR!U@-h+&r+yc8Y-sicpzSuYtUrCE|1I3wkT|RE|U>^Hi!cvvk$&-8@84AG9Sj2T63U-b*C>sAiMNEVEyVKINE5=9O%iDHwnPAp+6Q_{jB1>DD8RA|4& zo0Cfz53Qu$Dudt!l#LhDqhe@qmBXs35(J^+sXtnU*C0t!#K~`s!<=A_f+L?q_PSXC z$i~J8yw3VIJq7}4@w*-9JyW@fu^F3Z>(aUqQI#%|KuT=`$wl>8j zt8(`y26fby&cn!*J9UT7O+4}IXkpsDFZ z^6c|&FJH6me-n))Mk1$mZR^KS4-xCn*XFj4kO7 zS44~bX}C$_gJ^~>%#O2rFEIJTmJLH^Qg2c!Wr@xDrm)9y3(>VLNi9bA9jNXZ>BH-j;3FBzk8+su&+6a~45DpzZ0@^Vl7RvBdTiSRmIfkeerd{O|!O z*$=sKid+N0zKi6lSD;dE?dvlDC5z}FN`hDNk*7x0w5dn6co6CT*deRy*S!%6d{Dge zRVss@OAn{SRjXHXLq7HezPL+Jun`4?s_%n{R$X>OY2lfquCmZOtJbVJ2>rBOyLRQD z2@-0A2=|f7DfDM05hDl3#tuPeRU5h=+Ms(lgnu-blpGzsih?jZp0fy|j6T2>m6XF? zzWhX7W0No*383XYgpm9o|5KfXm_R)Wd7b%7N1%~7FAtAPC~r$^oq+H9B46DA&t`Ig zF$U~&@Tv!&{dAg0c3jTn2jq_LaV_YPm{jCCI6Mjn=#%M?8!dWnX3dDxjW>TfC3ZSz z&nD|R+#7B$H47gT2mu||Py{IA@==?ckj{N@K3oMCaByVgAo5UcAT*xc$W(e>V14K3 z<>jebwRvhI-Sw=FTb$8dS37QVY|_SRt+&NLE?FFkT`!@@F3b^VWfc35Hy_ib zcK^G6df~2zw`dk4UBQ8D;1U)VhP}WA)RPC8$Dt=$e3ihU1JJWc92^=tfZ<1NAYj^q zU*C=H5>ni*U2?~pZ}->s2L1fXn{lS0QY6K}arfUb(I~0ofl2yMm&qS9pCKqcbR#|K? zcE9VR_xFPm=d>jhf7g%Nnlsl9ye&5WOQJ*M=cZaqq4?9-1pn3${oDS=FG@c;lPv2O z2WT#M1qJOZNQiu*!^k-b=#WygMAb^WOh##5`c0uZ6 zS{OHq{F)u4dR(=PZymAHcj+lgN>u_Yzm#9N{Ij9;icbJ&D?1yTiTXAc^iH=55-tF% z4N&5!o%AXQuqd|)i_&YlVRRMOvM=3{z8w_REi9O=o_~DV%2_0bTdMc%e7^UV^aoKp zv?;2}7@c!1F+FN0vXrq(7kv|Om6QOLpfG+8bY`H285F)GJ_Ej<<^pe~JfY-N{mJp<+B$0){ZbD5V>Ip?9 zwVjYCM^VwD<52t7)fIu-kF?342^`s_a?Q$xr{nFpWt6m~ zfg=7JO1GEXiEsDctjE)1I}-r-m?JjrIAWC&(0F(y0#YKa6#wytEB)Mh%1^|_#gh>3 zl%MP@N`Ne{MTsd?_|5|+BI6B!Z+4+M4enMaGVG+?7lwz2k*qWOebml`a@8s zPsV-kD(UE}CC)rCWB!3EBv}J)K&YFb%b-N}RBy?F0})Uo>5!0+q3_>iPzLch%ucV) zA(|jWOauu5RE?F09s$7DZW)9J83OpDqQ*`qEIFiv(dFsT(1}2g5=miUQIUj_nz?6_ z?eIt8>Qz#mW(_$%+8J*MXNSk*#FYsGfPFZ&AML)X+Yaovp!|#XPa) zY*8=`1-h2UnZN5 z&K=U{C#}aiccV7GdElSmt~r?gu9+aJVG!_1>{rCtdWK7fR+kDr6^ z{@{|hp=-{3Hnn!`w|b2`3{s!B>DvF{Pnj>a8yA|U$Cn=|^{Xafe?Ws;c%@uzFyyoX zKjoC*-mOwn!Z;jYQ;cvgaR~|e+Q<2n-BFc%>>C>@mnJ|l2(E?B-}`EZ(5;+m*97j$ zBDcV722zislujbsNiomY+Q2Fp2DWawZbJ4n1SVyTs>2Zm(hK_m>?0~@zD+?-Y*l5k zp|r6IJ8;ooOAiey#CT2OS%r;TFn8__>|EEQG3N29+S9|_Oa~=KGgSQywef@% zz4=$KE&$Yt>Vg97DjtsDW>IiLo#|hd+^e zFI+2z$@Bs&NljUR=IY^nso>MAeLPuH*qM=d_aahk!9l1|Cj?$@Hq1Tbw>%*H5GN5JAg`(RF(RE8O%c8FH#rEypyY6r5jgD86 zgO=O)%}e&mUMau9GxH$yP_|vy!L}t1J?8Y;O1U*{u4*>+O%3xn2+C@!aAvAVm7J4P zE5xtBB(QDfsW|=vHt`1PHBHXyb-zovXF@A1DmT zEr$~8_3w2B44SN=UMpZOJpxWOpqgsVhh~H|w@sDIzmjxX?gA4&=_p&M&iNmMyIPM< zIP%0~Xf!y=@i>e{&kjODxOl!NlbD!97!f8-RZvs2nAzO~z{vi6`$j0G7tcE3$5SWLE1J&UWYu)C@DtZbmr;4Y zf9D-b@b>(Ol%CyRua4EW+7`{pP5!1V#V#F?keLPG`3l z3~m46Gq&FH3l9r(G&`L+!n0%GDjrpvq(H)kI;D*#B8h?s!Px?67TTvR0TI!U>d9!P z1y%{_Ogd>?Es@aJGV>!UB8Jq=3bu2UX@DoLuOp>j)xP(BGZ6Ts*cG+6+mp`Fb3pRu z_zzMO`pjR}F?8h|=HYgkDZh69WX;8>r^1TJF;ytihf8lOB%+4_NM+GX4MWX|bmXq3 zSEEA0(dR+P@Sq>sYc4cP?T)3`<=PwwR{udp+ut!utd^Zn*OM~VLp9PHj}`*PjJ{{*Y-I-W(RZ)x*1=7_-5cWS2h43Cei4~l#C1?O}w z06$yPcff#)AK0Wi{2H`c3nmUcEF(GymoIWzrv!BRs3_Eh_-A|RR7J+KR+Q&D4e{jJ z1tq?2+9HpJlBGNvBcgk_pSjl7pEOS_DQ-YcQci|Y51_FbGOB9Ebk8h#q!c=_R^}Q$s*N;NQ9)+0Nh*+WSouBH*48~b zk;X4BZ7wq>>NFs8*ffUu9OFkA#CG>XK%9$?_ISw?(w>A`>B3)YW9>_ctPr9*Gwor@ zH&!^ET<3h$UdhXg1ifj46j;3GcG8ux?LbWeJ>Q{`g^pgnJ9*A`Pmf7_%e~NeQUyiK z_v-g6fAX`esw}Dc|~_idFdRm6Ef%UmDY#9yn~6>&aXAW>FOxNsuzk zjUasv@%8ofd-@MWh(Epb0}Y;wHki%eGp`*}uL?L#R&A(W8J!&teN!jNh`bnyLTF!D zSi{-^5Tx$%Fg82hH!hCSP?CGF-?tDt(V$#~3SuYVMyg!?4p=4%RMoxaEr+w=~ zRe=e46R$5wf!WXxH1Ytn$f&4AHJG)7X1*0XP-li)P}l6VoTodeIX)OTaD;-h@%6N# zy1Kev?;j{Y9ZQ#%O(d2g(~hukwzd5MyQmE$5tLN=dU~_KXqz6ik*ny5FXa{}+cot? z(~Ww0R8!mg8N8GNA5dB%`D# z6UuOt$y$5oQfQFFCXR_r5{hLTxj|W9gVsOldr%{CMu6{FgsF{< zjWAZFVt1F3F}X0p@N!TpzFaoY?g&;<7KVc{Pttx%qV*Ym$|7p^>X#37JMz#r@Wbxb z^edjUwHdK~(1bCV6kNYgw7<7QxJAt2I3K&94~2r&|4dyS1=OnnqUmKWgPpwsja2}dmh@uMb9x;|x1 zZPiX4(-Ibq)Dv^@4Y1pH`u`WEu3 z?YnjvLq-yM!?&gw8YW#N4h&f3(qdL=P+J@o3hr1*9qa?VvtF?x_8_#EvvehRu>l@o zvgnG)7E^`KBu_RVb~P3z(gHmCdAD}w$!SB>S_fS#UzTJe)l-^cl2uSKq@LQJNYdGrOl& zuf%84njzGdnxj!038Zbeza4Oh$7?WOm83ZwYH~GP0a35vkgyj8o_}Il-~Nu@zPK&)1*o|l^e)^9W5L_U<(Dv|<9*(FS}0E&Xmp*( zZn*$uxNgS9#y+4LPil#OtIsz7zrOQE!X7TcRh|ctRKl@RPk5hKObcOem7}k!BTU#B z!tz&KT!BHUIZx-(2`<~%#@CqsrBQCg%{6Z3=;!iK%eC=&k(#`pZ-kFSz0BnZa7G@5NdhsCxM< zd@yl2F+ljsdqkw|s`mgUB3*}(b;t0NiW!Q$oxVM_`v){RS{Rnnc( zOb(0}H(0nNf9|k;%jkKpj_j}TXhN$`z|ln>qRhD;wwMOb$MBk7#Ml>z%vz$qm@_Al zjC^1>oM|QUF>z=~;^uHXWzJX#J1qmpX=PFyVV?Q1nCHk9C2g_A=NQt`5Pxaizzm4F zV(*j4O&?2l9S$-{Gy)>rK_^!f@JG3g;mUy3v_1ay&s*pQN}=1fjB<=tTpZ~)Qp#C} zVT);`QcQN&^C8ewAC`5HhpDxpdhCA%drg$C;q5ieR~IEa#o$Z5q?&6;20@|k2noXEETiP3rraCLU8`*eIB z$1go+FGR918jz?0?t~;JcN=eheB1AcInW40Dx6mqQmV5jTo5d}@~e3=8vG z?VUE%ZQpGsbbIF+)V}VPoJs!v`*&OD^j<3loXJi0_PhC#gB4#@xJ!rXT9~LXpMt`Q^I)tP+cIQ=6dO&y#`m;HH7ku7~=cye!F*_;I+SO&~wj{Ku|1VY=-7%`m6Zp@weNFaM5C z`0&m1BmcL}@;6N^7>8eevQHo7e_#B6bP-}TZ}&N*_h-jNsylK96tm~eO8tDJJ+DXSMNJQMvVaS+BqG1Yd8sec_5Ri9~UY__HERAXJA$+D{S{J|k!D z-QR3;xk`RHRJ94Nh_g#HO}Xsm*D1`?|c9HniNLP;J@nMcX5hj-OFE)E(F?>FMnxI_y4yy zEl0l{(d3{OTX_BUEwgCaREw2Z|4>V2dZqWdbLTEzy7VSHJ3AvIgL2=#sKms?f)?uK zi}l~z6v1;ZVzTH&X?ND#ps{vB{Vi%9lQ1tXL)L_P7SZFoHtANpd)i{&zPbL^NvrpM zetwnStJaZM^;So^zI^HL@4r9z-McWWslkhql8TKV^kaq|FCU#$n|n1qgL;!_#Z5n( z5Uat|^D)_rY1_7Mrx#^sXP@l}^-H{2>U%tYur5xhyu93tUE}e#ZQJNXyGs2OwY9^j zId$JfDJQE<&97KKW`|;X%x$)BF7#qIIH-3}QFT?BjkKNf;j{Ws6&I-x!cwk68+q?djTd`Ip zg~0sn=BedVBQXe&b!W$!^vK}%#4@d>?rQsS8T#gQEiTOIb(aNr3D{*}i25ZxsCMow z$jQmkX=zB(Yn=OQfT}6hj2C+ISt-z358q2O?F+#lHTK1sF2C9gi?KIuZdz>qR+g5% z^D|=-aa|=o2~+NQx=Fo3&ipc!A>xJ4m#@#>D>^n-s?}~OGwtpG)9Y_?2aII|vx~eq z_2e#J?l!Tp(!rG-6y>oPeV18$>!iE6xRrrHG~Kt-(wM3l{@LzB;(q+9OEaZ*-m@!L zuB=Mbsf;YxxO}Y!bi|=qc0QAxi_^$YG#_b;j2=d%x7o?1gjO0V_8GSEOp}5&;dFn)MZfYt`Nzue@t>~x5#(dtMeLsp+ws-w{E5|eS za7i)omct3+tv9b<2j$b+Wt^oI4zXWUSBR9~!(|}1w74)Z#GFkhAfS#Z79k($CN%d> z^!1HnyQ-4(6s?qF)G|42W=)EHPAh8UJ%2^FW5*6gdiryi-lJ1fY@7~awI3WFK4ds} zFfi~#r;9<>Oegiyz7*=;=Y$Uy_kK&96HeFb6jv?I38%|>$KaoH(rat__eyd+7bMSR z(Y#$bYj;#VONEL}jb)^K@%?+2FJHbeva(8?Idg`Ih2_^m_4Eu65OUz*m8aRUBe*5g zO0Oy94$qyohxhN_f8*j3nBzd9_v!u`*HrrDn zwsm!N4gUJ|!azfk*w(FE$!+k72M!!yVqgdh?7z)tZehWAnZ zN=ejz)7kMJ#|u<{4lcMk_jH-6_m}Ihs&%6hCoUa+ja68{sg?71^K8DrVnFd*uE;A1 zT9*BB`30Q(`}YgxJJY&zqjWN|68Q!%HMJzy z*JJvrj@|3X_r63^Se(umxaiWbX-%Tbb};(c!+jmkk)gUQ@c!XqOUeP z#NyV;w+mg_ixV+qWMmap;j%mS?tPz+9+Vo{sK!LX~q?zi`4-}d1+O*c;ND+N_N=k}j{PLn8u9Ue+EdIu~ zZCC=RZlW%uV`HvvZXri}%|EO0y1!eoYVFs?MrCG&_p!-QN=X+D3=ABdos*L-%+0lj zzkezyDyl+#zdO*ti1pzz-r=s^`}xsE$LG&Yo|u}MDVm$7WKFkiv{Jr%_k&WR_5oU2 zT8Fx@Fa|4uy{5fYqQ;#?(s<|YU{g3&M7TnfQgEKYSkZ}wY`g5d7yBYHS9E$Rf{E2A z{dD*8D5q>CuGmhGSg8O>d!r3Yi;G=9U5(AASTF+8{h>73)YK%?j;Ufh{lkH*)MBW- z!mlR!MISMQr6;tC%48+^g30&sd@U`NOwcNpQBY6_*Fd)poNBdG->_kW*NK}i0s{lb zXZvFM!b5!{Ud}IHdetS$GCK{N7t!1-rv~*6nORugjQ7d+XUnJG)wfy-uB&Kc^@}{{ zap|yyMRkomS9Vk^cT8?!Q*&Mn5^;*RYf033EtHLwFgww=uR+3>S7(X) z*fA+|DwA#kpQf1&4VIm}{r#g+$C~AjcMr0+^~Cb*eL%r4m2A)~mu#SFl^z-zO4ma` z7L5|0(>I5*DV3F)I*jEX+S`*lep)j}Rx4dIR(tyGM!dQ{#qzPZwvlzaqhdIbZQQso z+R%N`Y{3!`rP8CRNo8hchCA2IM0_qd&OP6aj+a;E!P?C(>FMc0R#H+@Pe)d)SV5Vn z+Vptyp7DWXSF>l!NBypQ{P^)VuU`EqQ&3S+`Ozl@Py{^sv%NjYfyVM{03Qd39HwAH zs&T00M6aeH8!M{M6Ga@SjM2o7uWXoK-Nut@dD3>g0#Oz=MGB3@A&Bi;J~(f8k_%qxKEsOG;VRsjO-l zzGmW4l$L$` z)|WT#WC?pe@aGChq=KhM%9ivn$#kp2Uh$X>s$91NdIvf^%*Mv%wEKj}SXZf{wRHxT zUk_!vcKJak8a}0GRBXShDgggK;G))Qd00sHdb!)XmnIsiO5ES+H-2b{*DT!8{y&3@ z;nh5UozVZn0mIHN_t*#?*GSNoAa;#BIn%!oO7!-YdxLF&uWzX8ESoq_*ged``Os)kiGp37Y^Xjr4=RS` zAq)7!X}4%i@Qza6vFB>GGn!V<0Wk>D;N=zJ%s+bp6NKPsG?v{5tcn!XZGur%bqn2& zqTnmIv#P%F_I{70zSI)4OsDNP`rF&C3cG0#A|fsn!Q&*e(7LqX*J3lJnmNCu8#a_Yp@2{jkd^keVkG~=1jz+Mp`tsC>Si8nVMe$~dcX@w( z!o*~wVc$qTtvem3Ud<)Uvg#i>4)mgIS<`{wS%*a}J6shhsi`Ay=3xYF92=|jVAtp$ z+f2)^vghQjGRGavd&#=5UAqRX>_XRkw^5%c#U~A#x}|e*QtnVF`ws%APk zi^)Z+p-e@Qpz!QI{3!NI}uop&QPQ&3P~t`NutJ^vND z>^sc2z9GA%bUJRnfd%DHpFYh_WiLe)6*%E%##ce%(+lSXe25r9@UCgw* z?0^l*wPkO3Xtc+nKj&z_XO*PC*z9z>b9K;pigUuk+Mge8fc{Ya>A^bF@os6W=bx@h zy*?~Hp0~&F6s6q4{JeMPo>RB|6=Kw)0D*yP2*TN%Zl-8ynbz<@U-`$3U(rJJ=dSl( zO(ARSH#0NKoF6Tm{oz1+O4(( zxNPXf=WNBUHSBMTXZsUM0cOLZRnrLtfo#(zqC559QA}7~^Q2nM*y`bYy|J;e>cDdw zlMGwcm=&X0I9U%L77FWYH-`fk6JiAkbXkw*Z|TC@W5dIuJch!eF=Urki- zi{gR;nHx9W{cea)m?y8W>`c0~JMi=8`;pCqL!CW6!I@UZM7`C~YY8jhG5j-rB+Yc1 zi4W9Et7p-aiAk?J`tzI1JFIXEOG~%e#1W7+)4?WgOh)&*Y~5<6)YMc)e*Tu0&L2Ml zFvfks?rIgNY(IyF)DNVtTfJI)sAVrIFPZ0%E+CI%*YYPBT;R;I&%&gfnVs!LE$%H3 za+n-wJYr~Q$TyO^{i1|~n}dS`-=vH>78xODO;4MPdmKAsV6Zetosf_~4A0E;^r`pT zckIv{iV0hpHmv~w+>m3T7UVXggV@?>qpJgqv*Mvl6)YR0%HQxR=;*(8g{6hx^y)yqZMwsT> z6l7#f#(Pz2e}lMIg}-{YV3O;rS46*X_|VqYMy4K`M^$#{&>@0WXym_OJawwB#Ws9> zi~pGiGWj&T=4FhBfe^uvc#J!rTU%TA4}dAX#zHhVH}{-@NT^pEt?KyX$!+b@f`STE z`Dj~>+q;|7OpX7ZnM>OV!P4!Q-td)7H8fBCM+*u*q}9y1!F2Kgu(#Jhpo5uHY8_o& zkzrw9b^8B{xMcF<^BUZc+7<;lIfA&IJAb~gwRLG$f0-JRZWrs$Z}0x`;|Eb%60d$* ziOCa*tD61!T5^1GZb)x_dW3)t6Cf8%kc#fyxkJn!+(e>=plog4$5ZtqeDr?{=RW(a zT)tBUGMGLt<0Yqu7=ZAB_R1hj?%1^}jH}gJ7JT{*!3QHiP?gf}M!ldFU=1n{d--xp z=2*#TOHdr2PGwY57Z(?(fY(uN8Ch5^g@=a&9;j*>7SnT})q=EG4yJZR@cgAFaqe1U zBFfcl@*2PS=FJvo{4N!Bx?k-jk?TVBUC9YZd8%1AT16P}-+B2;_HSuDx%R?*5^AHG0^h(Q1m!6*$5~5$Q%*@1XCDs*S z@kOJo&&@zJ1Iev5>u9b0$Hz@Pi?xVO>C87-w`9a^DOW16l)=9^tpUE6XTD1=Dthd+UM2cp2yD- zq6dDAfPFR-)rx5glZ~dBPNoA5@@TG=gh>C^AWam#MFvHkV7mpyPT4hoJ~WJ4ag409 zZ=~Ud+$JWcFiLSR4g&wvi=yK-B;0g%dHq`KsQ*+?<#|c|nRj$LZMjc>HNxZ;OEGZa z^3je$;1CX=eXDu&nMfceCO$q@@RV9Rp+BGU(NJZ8*&`-j@3k~LgMW~W@cHwntqm$e zoU}^38Q&J)tsY4?8*-x?s82XQH#MXPoU`{j%16wDbrdp!>;65Aplgbk;xY9;9EF>~ zKc~Z++gJoN` z4mf(#TA`;SSn!qTCWFJ=2M?Zgq1?JPUWG?r<~>y^*#rv-4x66Mzn?E`+E;$mcK! zV%01|H30)6Fh{EC%Tw=#YWvc?S-hkrY@+q;s97oMn#52<#|y*P9;xar|vD z!TFRv++q|R9UrgiEPm^Xj-O9sbqOB}6`O$89esUP#oT`?fWH=VpW~!hZ9?q{F4>@v z1N3>`MGJ#z9ghpnK>70|gaS+58ZYkOD~gZ_@>A2(^#E*V3)L6fs?30eLQe_^2oQiM zxTF?U{^;dc|0at+mq?pct9|h8hK!(~U~tr* z89a4-A2f(;ugaRzKC|P-g94Eisuge--UIr= z3^=>}@THf|&d%gCykSA-of|ab6B2gp*%NtsFh%Iww{JX_<6#8l1FHc0slJv4Ay0Rr zxB4P14$vSO8JVg~D>Gn%NH7xD%uJ?a2zN$b)HBRScr^dqB$9tdfhAXliAM8vRg`Po zOlrVJg3W;n#8;(^wC6{vWm?WcP9Bi-UiU}9OAt`a(#R*zgt7R?qLbtud5F@+i4oFo zPMerDBy8hGS@$^rP>bD?jc0MEjD||^S2cXHm>WyEv%q55x7SC+ zT+n%bqOaa|GPkwOs;H|l-p-sy?RBi(cIj;gN7y=Oz(4x8=R({N0kT{>cB}Rrh*p9zodS9W`HdEo!QQ` z0@3QWGv~h9`2_iY|Gq7srY>83LyiaAmIqMwO!|%AI^bTS-ZzDBLJPC7%UYy zt^&~Y4cy!ZpQPFhuhQ_9bhi_A>L(FrSTim#DqnJ~A)&Ci4 zOU(BcuxrtoPc`o9UvTeaJ~}x1Kj1aJ^P3m`%>w)v?B+|j%K&~5;X+4Hh(MAP>`r3L z)GBRt`a9z2H&9U20(kudnJlBBq%<+z6Y==^_3Kp;^328F+zGjhpp!)PD&?C}dGubf zd`#7l;MU2lw#wBAApG;H(#Al_sHk|~-8rkfWLBbC)!uTHl8Wj;!i#V1`IYn~<$*10 znzvDf8c#S*WWI3QWgM**2P~L~x$YjeRdrSkBI_G>_pT~K2s>0%p{rW^tDgqZXP59S zjrX)>b^$zU-nelp5$H<2QbjWyBM%!1EU~99PJ=9~KX}sJ@%!dIC*|N}<4}plT@qNc zg*37%D(~T2Ec8g)#V5nPWJV7J^nQi)pJ{_G1Jj+1f`aXYAAaaxQ)=MKl`Bed*B{Ad z{PJ^-wuacP`)z_Uzn&((kiANXiiu3_4S2{9|hnOh$$-fb^gDAP`PN7J)G60 z4VB7_fmim0E(W`8SNhPeJYhF;fKzvuOxxZ$^61K0%|Z_SuYJ0@1}fK!0$#W3fJRvU zctoWVC}PrMwHpEr+?YPJsU_Q^${#K*tfgR@*w?K-&=T~pOJpIMFaOIIR}bYIH-2&! zD|%6@3l3F=Iupc&0J=m(Vc=h|%X7D%L0w(_OJ1HX>M0?MBqt}+=|I%sv6_4jPfLTg zHd2v|Xok>hs-dRPi4wU6QBi5oN3e5d7PDtx0)ZxXP*Td(c`LSox_WziQ_Bmt#%n$k zd9gPf=1?DS4>gy8cbZ90pttwl=%34N!eBpY0leJkP+!Z7fUZ(^?!@7w!hm6fhq9Nl z@|vRGYwoYv$i!jxs~fEZ=2d6z*XfS$N8kX6_;t1JQL_~b#QAX>y~8b|19Ktn4=5K4 z`y^N;HT(64kYDJ4nGKrLdZLnB;?*PBL}_iO1JrCL(qhrIkFa>)8xxQo=yamYy}r? z#yHk$4mtwQ2f|fW^0Qk^CEOGIKJj7ja>(z%=;E^+e;E@K^Wj!~AW=c*`V)E^lVgY> z61^xcUX3V2#JhKN#AjimNSqrK3z6`N=&1~4##y13^VrU(5b7en6N%DTP+D5+c2xOB zLVdI)o50e1!ltzkUxZSjtJrd@z?NMk*X7@V9KprSLFHRW(6DdjiXfLe;8)g9{|sFDED|CRSOi zZWo0qr)Fzw>tdV9v;;l{N}Wy#gjlO)B@PNw`EbMb{`SGNKGsmq?c28}!4%VP$+&_g z_=c{dv$GfWyXDVU=d0d{ZWpcaF>A4?o{L4KhtD#xA=xkna3aWB9e}|8+4Mw6&|k=C zO8eg0jF|z>=1ae0Q}(?%x=9geBGPvA53Fr`TIX0rQ&aONCKOxcjI`t(;7gyw^2_PM zsA~hpNl4lbq4b=BlrbEJmpoxypo*8>g0jO1jQU;as&-E*15tP^c zH?m@$vGe{tS8uluPecW!P4v3ena!Hm(%+O#f(Sv9QVY(EoHruYF7%&?7ONrd#63ZYF9vOw2Gy{gVO+CrwTRns!4d z59OcvxjmY3*)}tfQu*=X;*XC{u#T?6?k5K`)3a%tiQAXC@gtWM;gh-uZ})-R{p} zWuXw<)!s-(X5^6!Wx}%EiEHmD5Tmh|-v2Jdz-{)sj{Q23C5_)Ho!mQYO#A&spRz-H zt`gYEA_s*0v$ZZe*8_e>>BOZ{~Qju28SYpnN4;wFTC*}~z)g>9 zAhD%|41(+Kg#Q;xZtmcru{mg&c9E;l_SMOq{fQFrA;z;DIT2;uIm!IEd z7G=>{v>O6-FC-ZFHmKupMZIB9i1n*O%*E26q@^`992*`kLm+OVLX3?-nWIx|GhDpO zqfL^}zg)fH4ILYsq|NL&;}p^7nDNEF(|1{>>W=tX%VcF`A(iz3!tpx*7w#_v3PEN0 zA7YOZU*^SzWJ*g)Sj`Ng3H=`FBgUj`Sn6JUR(Bso0ede`*Rb6Y9oxH6o{fW@qKNDO zX4znKdf|=ZJ*Wfa<2{wtFpdG4y9d*U+{XLn%1+}f(g)MT(1qbUMsny>&JIvoP~V^UVmT>UY{mTacbut=yYTvNw^gT4p35*}dylMXGq zm&Z$SA5K`Jxe{YX7?&LlrTUfk))6n{U{pk1{QT5C`yT%n-QV;Q)O3@4 zp97jD%GFRv#vyC;!E&gD^+v?HK7JJ3Ov77uphPQyFax3SR09Rdq5DAxRUkY%C@yrO zkfDi8h3lI)@8F$=Lz1_Z{b)$2wUwcgib_ge2M--Gou9r#*zd%5;F-Ak`NaT`ebq{E z^;{bMkuy;yL;(*?VuzYwD~ewhWY=G+^Y^J!ux|*)nNX%UmuSO zY>i*z^>K6i#iheWP3e!?+78~RVYiq!Ps`<2s!I1)Zfi3EW6i29-=rrVtcczvM&26KJJF@Rig+=wd)bJQpubYL}D6P z+#RQAL)gm8Mm}D7tr{M)*woP z;_rZ##elltZs^gSCM_6tc}8YtF+x81Jg(rVt&pF(bT!LYb@CA*;Vz#3?X)xc$;P3c z%s_hdLCT)W7X+oIo@q)L%?$qO)m5%>e!OMW)iE>Xb#G0i^7W!0Lq{9p7L1)}1=LLY zc=G#y7e?9aPY)<9%`QJRwobBg-sZb!B7M?2{G@d%Sp7K>5w%L|U?LAx`xGqNc5&vW zXtvrKNCMHgBMozX;9{7Fs+CO&k=5b)u(@Z4b0`M%e*QL_7!4}k5s`oL)bZYGF(M!j zQFK86KiGB*qog9$zI_A3sX*{Vkgf7{E8_q1Fb($lR#6}lOrUpAY|-pRmordc3RDb1 z;w`6|&5}&}6s$&6Tn4k|3W+7p zE5+Xs4bL`3H!T3+dgJOU-%0!Ii%hl7KfFjOb8A>>c=kSakJs6wp)Q zDC2_dW-I-mGlqZAZ;U_~Zx+cnPSkj~uiX>1>h9xxhO9_c{a*#AvxlD9zl*eTwgv+y zqB2l7Btd>B?}D(Sz+DD}BHVni3&WmLyTybLhON>6@(aEX$X6pIS!uU8MvHY&_iO?A zI6`yhyjil>N5D>P?Sp_et_`G*n?GNVW1#za7a3aS6D0`S85w2CL-D59{MY#_!Q$kH zMnU*FXkyr3Ad56QC1EYAqm^K-n28$;jD9_Y5q%1;27zH6B6mtqF3?IOeT+qA{qy_p-YY~Rm#p)nyRkYxPVp(bmGe&Rk8fKG2%+^KokuDdgVTbb zDIt-eprv)VDI*km-l`Rym8keN0a3gn&vymjeBSJ?Ow^G@sD3`8>pgG`A*CUot|BYJ zbr21oO3nO?(BnI9$#{E!{j3sT;36k4kj02 zFU(F3L_)KOQqNX{A#3WvjNBb$7+EYu(Dx8b1|lho3{nuGR1vxiR0JfX)7oF0zE}kF zp)tG^QCD;u#S0g{4G|VliPFhQnOyynA*X*AMDIJG%TRD_Ae*wq#a?Wl=mwy@>zIzK z28jzRkcd&@Ht9~+&3pk4^j}?}PmAM=hJI~}-ycwL82!9}{WH=?WFtA6tySu)KQvSq z7eu6D5df2iqCu=y>JRq(roD0q)iA+5rr;g6r!oJ&0>k$;CnqREHu5C0>rn1F4En_g1IgX} zSI+cSL*lo^G4;h!s?bFcKyGV;rj$64J=sp|ewma*BNpqQ8?c^gGIo~m8EqtQ+Ix98D)OYlfz-amas*^@x_Z8!cBvGMoh}0T(hs509w2bmeT=#XA1xq2CEljn>AS__j2t_giIv%8K z#cNv2N4MW2opjV+5>N>XjsQ`p??(s~(he-0^Y(Ya0mupwm4DHszPw*Py<43-Oqy@? zReLcrvMeWb`DVL=h)7Fj6k0j;$y*-8*&=}Vo-E<--_9W_B%LsXS9za{PO`Wqgk_5Q z-%(Zrc?mHK1mWMTT#kL(?*T%VKXc}unjg=V;cu$b1w1G1}QZE zZp%1~)&=-q0oW|o56!|8+5GV)<5GEH#~u8%e+E@*2h5X@(}SDt=n7x~Gkp!w3i|-z zkOu?n!6A9MCuSJQ>0M=3@59jhZ?g&G{gjd&bQGEeH7}yoMI-zB^a$ zFg>gN%~ejfT3&RPUG=(=X%Evit=xy3leKA;17=KL)qS}xuBd8zE3f~0QOSHu=Xrx@ z4_C2wE`Fim^hX%)zO3Mu<7pMJKJA_`#?0ND+inX&*tKApr5;mjk?oyfB~aQoaaK-_ z5*ZI^1%?&nx8ymjs8X9rf9hazAOOD+DAAvtP^4#3q4jw+d z7VYK1)2AEYb2|cif6mJj*_{9rhebVWFA$#~-rh<{`4AOU`@JFJG#*@rG!Sc^0gU&z zWbQ!)5t5eP%EH3(y{il5XnMuj0IBvFKkLyAd-v{*g)-K`e*S#^%@k_kzh5_=dk8Kq zL56qi?bU^}YWETTUMz-idTwqNiB%=Ves_pWRGgHuw{f6UFHkSonZi#oRX4X$H%#7rEL8BQiX-1O0>6k9}NbDeDdVU z$JlE*SM~LsKs63=bMM9;gR=?>I{^cpjgA_vU%j%fp&`P@P){#1p2f<-BDLn!qqFy* zukzMTX}rgXzI1U}NxE%n`UT3xD_~1EK}ku;eC*4Ul99QO>;Q@M!Jyd@d-@J>aZw?k zeL3#>8iYLU>BZa_O8bDWmEOYA`iSlZ<6{M!C6aS~7skQ7FDm(};gWg%9DcX2-|EgC z_L>-VXKv%p{rvni*gfRIZG5<>sAw1#1jka~79?u_yk1GOH>{q8sg~rnVf9Lnw{LUG z%eTU^IL4{J*tmYvCSf%C(Fus<$Fz!enOj*A0qs*J-CKSdaogvM#Vz^5^Nrt2`e~F} zlae>;E{!df@@j}1KutWS-)VN{%!>Yj0oQNFq~YOVLFml;cRu?uG~|r3hA2?qEjA3} zanDUi>vUH~x{sPevu3~Xbqfm90Tz}`AQc#O;@57&gF_f_mHE8cEpWLf&z}nm39Z5& zxLE5MBh7t)*|}8e)}L1M{JAjvr+i~BZXRIGJ;D8Dsfiy1_uD%;ZH9cXW%q8K*bm4} z$!8$A4)vNA)56HGANF3v7k=|$LCv9C0a9U{(Q)3s;P>@eegeC z8dnoH5dMBQ3%2SpFfe??1SIa!$A$)KySc{JO*L7WnS8o>deXA8K`OSH85t@^qw$yK zhs3C;s65SvJ*76s6}F?NUGhA>2Fp#Bd$6so!aMmI2S8HPC=WC9#^~tiE$de^<@53K zN+~Hh#>XG;P#bY)Qy0IhAit;@+rL*3=7Tb)2g<%4U`W&fr6Wud7Ead|_x_Cnp%Pviwo!R=fe9X` z%~+SjIkwH_IcbReb8p!W+LQ`sxi&q#Fuw6HtIeureO`_#lFH1)mI~p6?;X{is(s+& z%%f~gC3|(@-B|ra4RsMGi&egv)r~x{OIw5wZdIdDTBXQUy#0=Ii2E73Z3pgl&c*gu zNNW^L#LM(g8&I8HoK!SP>WyIURC>C)KD6{Ib})B0$n%B7#%?+IYW?=WkdKiu$$31i zzNej2JQI9-EL=i%d>b1b^?IXdOD*zN&@cjJwH<6B58AbtX_g$*qokyyf;c!U*HF`T z@mrrFeXOY1hVh?ZWdmyg9lfl`_!e}ImACdEJPASUxKZD zAKU$zZ_4j+5th*%=Gk2TLU8{_1SU78s=R<37j%~{q>pa&r`;aj&@5Q*9Z zLl^~51AMDs6v0moSo)WahgL-@ z#)!zv@4!+-3im$nRn&srKvHe2VJrXq!jN4)lAAw%{(J~9q)#BgZ0XN zBqFEywPRGvXAYZWgcvBV!`X|Ci~EFbHH<82Ao}p-RHNYItnBPtkz^A_iG=zsjS_<# z^TS7v!i%ga*028vTO$tgUQ>p}c2-taqTz#SKZcGcFlJ@rl9a>=@bNM+-a?&5n;hY# zB(}ZX#{G5d9e!{iPb7_kUAxu-zT^_yL29^RSrQu(HR^}@_Hbx#iHKNCPCN(MwuOHQ zS@N7?x9Va;`JK@+y3ZZn`OMT!Sy?&f)2Dz(mO}qt;&{K>lhw1>j#Hix+DX4<+ybpL z)@JVRyO5B;hzK%ZN&M()LTikt{eUG^QCS%W9Bhr9ncY?4+u?b?AcCURsQ_ejbadb0 zg?z&9j2{C7PKc~thZ0h3>+E&v)G0xhokC2m)QM`U(_7x)jGizJ)|}mc>=P2;CV3kk z?POrsGPd}Nc!PK~JU{6txP+}paiG|_d3h)M=Hck(=H_xR-o?Ow#irLiwP1*J^z;W9 z8N;vGSW=UdlUwf>C9dmeM0^Mh*|}ApgSKDO?0d)FDKR7ePXD=s98<>v)4%;NX*VW0 zEkY?JMwocm!tot$Qg>x21+KN?EZ?DDjfoT+Z+do0jV7vj^PfibfWQX;EC;r%Pjmwt z#d9iFA^&^E#Dt@$xL7&X?BAjN{qJ}ne%=y-kDl4R-`Do<-)aXBM>Veyn#SImXBfl8 zyIlXi^ZVbh%~l7tbz|T9`Lk!w>X|+G&vzSQsSe(g_%EOJ-b3)npA-G{pOse|8ut0$ zJoM_qe%Fi2@A>rf^l&qHtGS_M4NpwqsRoXDMn{eufjoE(uEyi;z)yX@ul=9n1iG)< z-mUK;eDGd+`strW7SECxDaoXzq=u_R$3MIe2v{NJ&iVzVLRwn-9w6IQJm=tYhWQ;m zGpGMJ-%VeEJS0z8ox;-wxF>VXMT2F&b{J*w*|OZamBu$UY0x~o`E*v}nsB*U8Tv8- z1OPC1SAYaP3JpC13;7t#aFd>jHE?dDn)&d63984JS!%Adc)Q;I=X1Kh)Vy)EoVj%G ziSOg`!)3Km%2RS9EAM^hp2(f9uQPd|Dw$q0_*i0MV&aLD(-)AwGC1l*9_*`t`YU%S zW1(V(?LB>W6Tr+a9uo#^%-^_Y&mPSpl&d&^DwUMmE6}Tmg$*M-C@u>U@wJu=i@J0( zHn77ut0@B({?S>dE{Oj>AQI-nYy(s$C!a%Yc@@1dqviW)$S8q4t`S}^gv8JZ;ok?$kYmoyEx zzYQnCln)s73Pl_4+*)-0N6E=tL@58^!-u?6i+h4#@my_4)H!9`xrrEkJoE#Y=O8j* z^b!G5SCNE@O-vL9edz7&9fpQP6wXt3`*)GP!@u3dXUPGAAB&PuRZ|n8x+LOfJIe@7 z_LZ+Mxt*OI(hyg%>+6DqL>?X^Af>A61fhk2k}S%G_SjVtkxNB(>T`AV4oGY{c1v^W zC`QzSE3tAjbD8vd1Ee_i^YUy}_#i>8G5ALPTtnWpy8->)-vbsHS}wCe*=7LIMh(ao zmdXA**01LAEA3-8H`sUsV)FW0e&C(cEm4i{^KBaL@D+E{PsEydpxm% zK7IMJM)||7Pbj?vy4i%(1rlc(KfiysM-w2~M@BLu%kNC2!d6>aTJk_FeCXn`t-};$ zmKmGT319=xr~#+QVg0Y0VnN zVZTE?>!*zcE-T%wxP0EiVhyWm#wN6vD4Xc8FhNiencA2K&mtr9JOV$T%`JYy-c2yseq9~UoaF5xodEWb?`fNc7W=3qcI`iY9L2a5IN|Z8-S;8ACY@{aIdPL50Rm}t zb!S|7q$_r`>?Y!EeP2sT@OXjK!!R4RV{Z@19yzdeSQ#DycKj0Fr$$s}4T@%`hGIr} zjvd9CN51UcdA z^R^(pvuXG7)i~(-jT?o42QjyZU-Le7XC*csk!b9$T>nkFa)~nmNNNLsd4Ngw^b1G(jI*OE1~tQV_KrA9OEQ!5SdQK9S8c z79GMe_J__978P|4;vaE&cpB5{kdUSHH=riBq3SEIB_0-YWig(<3=8kSql^)w^beqS z1jWb8aI+#@a>{a?;jpCd`=m^uR}AHT@O01~5A1xtXmR!GeoSK2S5w?o*L#xroYj(~4^JYJ z$tf-tZ%@Upf(w^a>c>mAZ%tw+@VX9^N(XQx;&D@Xc*@B47`p{#n3E5@yr>Cr3n?IC zEBt|NPv6|ZE;MTQlW|E&kIn{sgk$AfXmv~rr2ya_!AB0*8*vChq3lL{dGzoh(M2Hm z3+w7K5#|2VI@YnWK}ix`0V8|S&wz{ zAUvEAKFK3Q4GC@y5rY8E2n_&|{D5njG=z-HT0DZ_nxUaHq4uz`QGnZdoYeQa#VLf&&WQ=3gRcacT=}Q&K6&mVeWXlJSNC>T z$v%?QVs=`Z(o9!trR#hRJr-_E#;9Y7O=*%RiYn1x--U)UZ|^=Eu!Vw_U+x)VJNM$7 zw!DvuIzUMl*PgDrHav#$;n@TDhF`Duk((2Cll3=sI}nm!im{sPe+uod=e;o`#9f@a zZ}Q?>Yq_+`_RGo3GpdJTd%(chYq&B*!+ZDc9dEV8-w?Gyt|{t~;MM!cy7fFivDL%> zOn{a0m5l*g+V0=iI+9GkZ37DQ{?|Qf-#&i+yz+XShp35Vzy`|f)>};%Jg`lx_>uwx zrEb12#wjS&AT%s&J$6xC&a~tt%*|UzAgiFvL2Eh2a`b39OcAH9!VV*o?y?mCV+R00 zR**3HAabt7Ge5$%S%Fvq?_B*&XH%3^@dTqMj*g#U%@f$r^*9w3Rew|Jb|`u%ow78B z1la9{X>st$XG1?859~^V<~DD3b3Bn%HBqtzrvz zC-ha0vVF2&aSt=A>T*67>g~n(HPhLh4iY{b$;M-y;!oJ9{3U7GOuFmNXgnY1Vsv!0 zee_zE&0}M6b*pg)UsH-Sd7nXzF86B@BhS4U8;GsdJQgE3SB9fU&k0_&GpQK$jfjkR z>0?^ppPj>B>`{LzEy(Bb2#IuMVqeoywtJPdR%f(BX7~zd3+^NZ{`8z}ty8CRS4>h9 z18oWnRQ~}}$h3cjKbQcjnNlH|b&OejxC-leef_8skC3Xd#7!fYgj>5dk#10ErdW%= zH!h-{3miz$dQ!Uksz<4km`w@1ou^RTBKAf`M&>-)NL6JNR{B}{razl%TH?6|#8n=k zOhJF!3YT1Au)qH~@tiCloB6(&?3EG1Br_BcCo|)agef4a*(;hqs@)LgJUCTeyWk2G227JF-!wO;cxD9SoFrREjW zQT=|&$ul9i^PBk>v*_!OE{tDVFzg??*_Y&8-y>T;jcnrnZBI>V=(nu**ISI1Vi3Of zqJA`rdr!-jQsHr%68n6O!xbmAoNUS`ubjy3+H|bwW>hf$O#m<5eCi|bsVl_%1gAzv zD^gUERDP_l-(6i@eeA>up}ENc`8I+_K>Ua3!RQRbY(FGzi2k`SRMwNw zdcPq4QikqOS6|Q9%7q_Te%%nnhBmjKZp#U=_jx84oi z5fQpK{P!K<`0RB}eUW%aTW^Hv z$rI&cH-JlE@rUx~mx&4Sr?#fS)xqNlhv6{?1qQCfx`8bI5qXGXFf5adll2=PLu9r_ zrar}LiWM>0JBXca+Iy@u48z^!haMy?RZ0qkXAD+HQo&|UKkSDl`j3k8?Wzq>h-Ez= zj=thU$>R1VD<$pcj47-+=}WVZ3c3EYqXoNJ1=CyM?O#k7F&}OlK6&m=&~4aBgbYAfiMiL=krX0- zb>SglydjtdiYtPBqIzZt)!mH=pUa4jYAH|;yK#DUmT-hLQeVF&Fv&6F&Pzfj<=-d% zzMie+g`c{inv7y{KnQ(~ApSK-52tMBPr=Sus5o4Ph6%CVD{Z>B3c=`kvHeMR|Fr{>qyGbLtVREg}9w z#ow}H$0HC_z2~AAFMdXajzs_tvAc~p3P77C{4NM|kY{F7}mZa1dWSYO=QzLJM};J;Y|) z)$7&~#RYq>KjI-#*hy`V4QIQ7ZEC!B89G7}hp)U6Q7>tlgv7*LY`eLMD#)3x_V*n* zsCz{u{UIKx%L6zFebk}Vc5XA0DW8yBOU&E2dL@F~6i4fXeyOhjwJS&|X=!cPp?5)C z{2cbYTvSbkjijtZdw}Rsk5-~x{49=*Gic3i^>#0Ct;6dcSZ0<%uMXMd<6>%&qVSWK>khW z@aqFGqEChzbu_DLG4?9 zg+(3vf0%m{cq-SvZFp(WJZdEDic+K!i83^2$UJ4NBw2~fGTY5E6iJ2<$xM+sLn$&B z3z;jKLo#K4k8^3-_x(Kg_kQ2+_q^|?efR9At!1t2IOh*35#Tz#8?R%=`iV{0^N`k|)s%OLR=V|TQ&M+WE zV%j2U4(?to4?r9;0~{D2{b`&|wmVpf578OSS;D4t6Caw75IjH>M@xJXQ16=EhHK!_ zGO4gh8M`M`2F8{LS z%V+58>$|dxu~}GHkdKVzuH4z#lr0A6fbl5< z1=DGOHLTy;#HMcIQc`l@j64$$L2-~6JNSj?RGOYeMn&yDXMfG;C<-n3C0<1Xfbls% zq-CpDUx#7CmZBhHSM@*AMYnzaOc03~&J_HESq#J1?^4UBCWo^bC~#W5F1;xi`mXEb z*kk6O3xC>kD0&j()-GEnprdzOWQ7akm7|+q7FJ2<76WZMR<~wJq*CE;G%Cr!s#o>p zt3y*)mT#akhe`*-d14vhBiqjY&aN&K_%&jToqeJk2D#@cxn@7P04H(D_dqQN27yvx zRCF}JZ+9?IB6zwdP=%8jCuv7Ey#@Hb2v~zOB;afH&z`*o|B_ev`Jn)vEiEleI-9+w z`|>;Xqs6u@-1D7QoKjJGshi&^!R(AF&r8a(k{)m#Z4t{2k+TA2dphdk9(`H9uZ6t$cpwdTNF%pEFqDpY?^aF}jzvFU29X{?0L_vr;H> zpRdDmNKQ_s>fyJoMG4^6o_AB^S^)qcPjOh51?PikFueh%GSG4Gp4&w&>bf}Upy#vp z_&Hpo9a*b4!ybB@ZMBW4B%Z*(o}h+son_W#X7@y~73uBk?;pMIkQe@Xb70IZ`mSHQ zI8tdodSukK)bW>wmo5qIHf~(_=gN|2(Yrfu;NB{Bb`MqUONTEs^>3bc^#COYq}0kn zV6nkG#;%pChRaaRohGOt3Dicx@P=e*S zKn>cPZZw{~OS&Ulz zVsE3!nKNfj-VWy!wt71*l9N!k#3VVD(bC9aM`AmsvJYdJ^;Ewt#VH7ehgcbJ_Q0OA z7re4eY)|CJ^rfSappGlVU>iAgYQ3Gk{kur7)~*@Az*E|MsPy&F9=WD-xNFSH_)}HV z3~OPVoR`H1V#oh`&?J1&DhN&70lPGc{iyZBgZYb@bsuF*$SVzS2L#x>&^#A68OYuH zG0)9Z%_>o)$d})<=yOC&3~khwnNpu=yBgjXbLW2XkWp_`v`}7|kSMcu!0P=y=3U}b zsY$f^45Rra_w&&(@4EBYwI}4%G_3#mU$5Metmb8otz|Kf^D5Q0Oks0EQF4s!q(r{_X2JagYS8xc35gW3Uu>Q|g&FUutQ7j>q1 z`Y*ld@ZwdNad3v)^}PH3oTqOb>fZrn-{eAv(m(G70qdcsROZfhn1Ff2dj^nF64^jc zz#OIYG=1V6vS}Bsw_4RfLLI>S)rpF1@h#eGR-<#=GO&sbQ0Q z*HARM@BB43ur@Y3oIxDR0z8;ahmJd|>KME2TwV6yXnpYs#tGKsu)KwD#f-KIoOPNs z+10vp=E8pIM_Y97$&XtX|Jcmjc22|Rkrw2>P$rtI6m(ZX%WoND@-k|D=D<929BxEB z+Wjvu2OcBxXg~&f86CQL``7RO>(Esk{@O&Yab% zs%|?EU%h(6e_5`5`Hz}$E-aSSvtvvl1z**(NWi9psT~;ZeB$?Exlce~B{nvq3;m{c z`t$|@HiP~G`d}#PGfccNw90Lo91_&i#0iX9*)8nFpCG!qXkzjL*vrN4S^-0-H4Znf zo_;fn@fKp6l7Cgu%|qpz-&z0--x_akZ%@vx*$Y;E03Z4g6i;Ln9HaL1KzBXnN~A`C zd*Py<#>@qTIk(SxDPV8I$Q~xV@||T~$2d^)2A_B%Tmc2rKTeoKXa2gd z$yr-j`6^T@>)@Tq1Ot$(FbDbTufHf5_mTIy0}_qY)N|TR*+L|Q#4Uf$!Zl8q7H77h zXki29eoRu5Pc4YwpzyNlL2BvD+W&{vdad72B12l~9#qCSy4qboI@DeZ?QK-&Sq0YU z&x$=l;MvVtI8CZ|!gmhV&14=8?tQA`lqe;quy8&+d2&E8eu9aiN{>MiwG(e(`TVP3 zEm}viy+x^e8lvAfB_)Tk@n=m<+9v5u;p(}d0#|Q&j{&?1Xk+)j5IRcIGKI($rfKV- zUAszXjQ1C;<|UYPy==zSXL*?d^qaJn-CifAW$Q^W2(xzI5f1{|KxzuGh`~`neHn4r zgIQocxKHQ88j}Ja@3R(o1PU&0^GKMjxQ3$QOpqcm#XE&AOud=RFMw)c2jrBLW?^pve-N@D2Pd>z){}Uxo!AH|a+~r6Fwi^* znZKWn1i9C5=AKZuJfIpK$6OQ@6{V3XNMD_0vWm%bDt+b}NwQ)@Lfc#OX6ZcrgB8WVSe7xQ1zvfE2^TXn^T0D*cQCoS0xDy2QTIs@mT(!`uR=5ih zJ{l^CoQ4M0oMslHXZ{FL&flN{Q-bk#%f=_Mpm&0fy+=ssBV1-)!)|D&;rkuHGxnqJ zHzT~;Lj#5bA~#mwdcEyE3)-dfyrmMEN4BebHrzius!+F?Aju**RW*)(+sZC*+qs#y zDL0^m(?(yT%!Zp$B%{WFr-*ysf_JiepPtIKK^1D?Dg?&rr)H*sT4wnK)}f&12?A6o;b0ty+GfF*=bkx6Ha%43VH zyiES5aS11IEP*ehAgp;bEC?TfmLTwu-Js_A0GR1D%86y`*3~}}CQn5B$n9es7p<(W zYw{X*$6>a0hwYklC!M0V!=3Z)AZNCJg0!V#kG`Mh$ z519gi;jn|BhA|gm^b&XrgSjob*hU(^hzbh{y#VbTH%dB~oMs~W$9=VUeTw|~SqN*( zH8+uCkn&-gS$GsgC=4$7^Z4~PC9gkgFQ{i=fb$M4G5aI-%@eN4_Pz`suqfYS>JiPe ztwe8F$B^D}NlloUhmS|?uQRc<{9E6+B&hn+r~C^-d*0_(mK=`N+^|L9oDObCOVy_3 z?UbeH6A0G@BiQ|@^>OjOc1Fja#*PkD#i+aI4ja)SUV7l|JzG^(HL0cKH^u#ZjmYHV z53sbliE;MN0`p9!CXp8UX6(dm~X(dNV$pbS$@kBy3FA(aJW9Sx8K0Hm%z@9 zV;SZXqZVXCZ{s^no~Y9mgG=ueU1ce4*3%aG%d21@&vf^EY%{kGYbY$CP5igL}>x5603QaCV5~twGO0Y*Q zEmmUH0}PaVI87(rdRp zYA`i{a^P%EG@zS97iRk`G#2vkx#Vr2Rk-YXlc_tofZwdSqOSo?P8aMSY$|+W(s@b)Tdr`ZNdV1e2I|j#|IZ{$3i9JO{+!s4O>AC5}#%?LkVyLAF)%6BEWB-*u7|Qhg_Y4 zJH^M0J`Xdf^B?J%kOV`ZJ>X$u`-ywrjD8N=PaD+C(~3=}@nF|xv76@ ze8TBfm0n9NET5nZ$6`m}JA%u`#?HQkC|sN!a1ImR3Mr*N1}5=>FbfhVsh3~ZLKO2P zIoTn~46Lum+97z!N5__jo{_h zLqpLNBT8+a#%nU0BKSFYSK|&HdgQ3GV0ce;w&B*V*(&xLd5EIVPk9)tH9kfd0~y9k!Ip(q}%1oGns11 z$J%yd%wLT4Leb;h%8L5*BI-_GBApTL$5ehz^F{j!pN4E8Azq_1p4Ugq;5#xSY7fn5 zK&wE`7(_$meFK<-`B~Zt3pnd+gjGn3nzZ!7@$qqJ-$Fda1qB2SBL|>#6!LCoP-Z}N zKMi9;iW5-4g}~~7I_07qt{fVtcW2G-?$)%RRWSBoU%=vT#Hueo8 zyG)>zP9zIS?lw@_QNDXuy<9X?L$=P$s|Q}#I$&w}D4|e23NjziM?#4K!}M>EP$`tH z+}wcT$7f<~61~U5sz7MNP+)=kODn`$l*8U9^MK~l!r(;4iI}%xx4Tx@w|3Xrlh|_K z6c)aO(0*Z+DuJTK9m`jLP~kb=$DjD%f?@iLxbW6FwkbvvXWQd42cDH|pax8%jN2Kt zxYsmf>da$eny`&zncq8theBJ1luQ_h61;;<$gn40CR#x2eRUbAoItBwjDcxj$J9Xceig!%{lE_R=Y2PKUteBI+?T(jPcLU+MjP@29neb6uz9(pI z^ezEaBYa47E1)JZkn0aG33tHO&1eeH1~E`TWe&xsqz=~A*3PgF7$A5HAIC3naci%T zLp+{QKwH<8wqB^1XKpXW$4tGK88@+%(-V+t5Gm?z_#tI$5sq@@y$%2sRN5Dj)p`!A zHB%(tn>(*%QtheOh0(*Y=llQsd4qGYbB84DedvMP4rx*!YF>B; ztwEuudoVGe*PTT^&9}y7-Z}3CKcP1VI_OM z7=_+?Z^?IH2ej-26k-Qr0iYTu1Q-0t6-#XR6F-f5Eyb}MQ;AKPn-88VO^Evsk{R1Z zNX`qlA6~jl0F(