From 4445f503567171e2cc6820a3726aab8018e8d095 Mon Sep 17 00:00:00 2001 From: qazal <77887910+Qazalin@users.noreply.github.com> Date: Sun, 15 Mar 2026 23:06:19 +0200 Subject: [PATCH] viz: variable duration rdna barriers (#15277) * viz: variable length rdna barriers * work * tiny changes * simple wave simd test * small wave sync test * good multi barrier bug find * simple fix * wave_sync asserts * rdna4 work * more rdna4 * find more bugs in my model * it's so much simpler * wave_sync tests duration * r4 * should just call this rdna4 --- extra/sqtt/examples/generate_examples.py | 1 + .../examples/gfx1100/profile_sync_run_0.pkl | Bin 0 -> 95102 bytes .../examples/gfx1100/profile_sync_run_1.pkl | Bin 0 -> 95072 bytes .../examples/gfx1200/profile_sync_run_0.pkl | Bin 0 -> 74895 bytes .../examples/gfx1200/profile_sync_run_1.pkl | Bin 0 -> 76498 bytes test/amd/helpers.py | 2 +- test/amd/test_custom_kernel.py | 26 +++++++++++++++++- test/amd/test_sqttmap.py | 16 +++++++++-- tinygrad/renderer/amd/sqtt.py | 1 + tinygrad/viz/serve.py | 10 +++++-- 10 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 extra/sqtt/examples/gfx1100/profile_sync_run_0.pkl create mode 100644 extra/sqtt/examples/gfx1100/profile_sync_run_1.pkl create mode 100644 extra/sqtt/examples/gfx1200/profile_sync_run_0.pkl create mode 100644 extra/sqtt/examples/gfx1200/profile_sync_run_1.pkl diff --git a/extra/sqtt/examples/generate_examples.py b/extra/sqtt/examples/generate_examples.py index fcdc301409..92146dfb20 100644 --- a/extra/sqtt/examples/generate_examples.py +++ b/extra/sqtt/examples/generate_examples.py @@ -9,6 +9,7 @@ EXAMPLES = { "empty":"test/backend/test_custom_kernel.py TestCustomKernel.test_empty", "plus":"test/test_tiny.py TestTiny.test_plus", "gemm":"-c \"from tinygrad import Tensor; (Tensor.empty(N:=32, N)@Tensor.empty(N, N)).realize()\"", + "sync":"test/amd/test_custom_kernel.py TestCustomKernel.test_wave_sync", } if __name__ == "__main__": diff --git a/extra/sqtt/examples/gfx1100/profile_sync_run_0.pkl b/extra/sqtt/examples/gfx1100/profile_sync_run_0.pkl new file mode 100644 index 0000000000000000000000000000000000000000..a6292729b569eb7c21c21f2f9a48895f0530d607 GIT binary patch literal 95102 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

q-#amEeUJ5! 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 G+Vnp{rVA_p literal 0 HcmV?d00001 diff --git a/extra/sqtt/examples/gfx1100/profile_sync_run_1.pkl b/extra/sqtt/examples/gfx1100/profile_sync_run_1.pkl new file mode 100644 index 0000000000000000000000000000000000000000..605e444a6835f4acfdd42324a0709fee394f69d0 GIT binary patch literal 95072 zcmeFa3w#vUo#$IsUEM7~145>4z&38n*cMn85~2WQ;;eYtU;##$o=w)16_OB0vXB%# zVsIvR1qRHcY#tUiek;UD9H%DZ>})=hxih;%;=D77QD$;CJDI(gIPb}1bLzCZTirrnPu8;|efU$S9{+RdoH||ouR7oJ>tXk-eVuK|-}^@@{j$N%p8b3J zTXt1)*r+vc*+j|B_o)}qjVC2Ib9^2La!Oph!5#LSU zzhOIzo|e7sBOSIsV@H2WTW8On#`gW=M<;f54)k@m>~B^_`O)^heS`aPda!-}z{nCm z(%(KfvekD6TSqD@{i=nHqE&YR?E!~yjF_~$)|E@OaGpMs?^e@4?eVOK%f4tlb-&-Q0JgJ z|Hg+q7WoM&u(H2>V5oagm$2%vsV=wzXq!Wo1V>pX-imuJ+?hP2byb-S6yUNZ;S$bX-4$PZXVF>Yt|H zRp)-|ACHbZ3-|kunk@_Lj@m2k$sH?-cHoXx#rkc>@8x#ERdmpL-32?=vTKg%yUSPB zuc}_DyY3{NGj6_Arn@EI7vnei>26tV?$P7-)ys6t@xHgJuBN)SR^1r$dgUtanKcu8 zrSI<8wDo->9VPzU-|uXHD5XP-)ICHz9V5AYzHa&In(CEx%g1xi+^_4F*RQT#xvFmB z9a(ao(=)WUwY@(z*wLOE>g^lI&$q6&zIs)?c2;Md$#=yH&#PXwYIWg!Z)k7n@7|vp z>~HBA*xlQ|m+vr%+fu}t6Hb1`3O=waYjjSzO|xS4%GK4&y~1V8+TGcsLZXxeIQq;p z&Anpv>e}jh-Ke>FdNnJTSFhGhm2(r2_DJ-%6Rx(kr&@=0hmDcR(yLjux_Z@$0&VQA zSh=!#<%%MCma40_E_05VCiJ}JE2>v6FLc#BuWn^^eNEx3mi0Y)4Uu|V`@le|HnnzW z_inCaPc7f39p5}W5`LljcTN)EhLQg=F8wmDz6wP?;rgY`<8gIYd$q*wgdth+^n=ye zaeaz-vU8xbXJD|Ur>(tG4sRv~tV#_G_Ag1bcMr6uc2|68ch84YbcNK1a-Bb1QI&eI zTAl~=ji!9dOxrIXXzOT~V5M22`sNR|$WzJo*3Lc66!TzJsw&}5^*$Aiyhn7tlO|< z!;UqnchjPrY_qJaU$bLP^`7>@yl6QU#<{z5B3y}eO};nSemo4@NBrOC-qCF8Rk<{L zP%shN1D_lw7?U$LTkMZLZc=ik7yZjEtn z;X3E6hl|D={bVz547&Hry+iI7`iqI%%N>)wK#+Tyyg86>Whd-I~!`uZ9I$}q&sxp}OrS?(>bUf~tKdH8cBYVG9B z3SaFH_45uY@3yq6rfxa6wL&rAs@j^>b=(XKy!nv0awg#enW}I#_iR_y*4A=LE3(30 z(=zPhnSonj;rMqxU+@D%dx`lZ3?jB64BFG)xqJVF0_s*&*DNnwzzQCS>x&dHTiqy& zXS-@uwO3m(+ZD@sqN%AbeBKEOgo>SO4NogxUDm_uD@g%yQ4GudXff_2SR!?%dlsC{G6y zzqD2@_f{>hUKMt(+E#Y=sfLB9*n|Bw(Ctm5-r=o<3z zA!1lrBv<{I+o)c!7kbQHRkys(t0wn}k6`RtLC0B9B3dUn3~TS%)7jI$%sdmQu)W-$)5eWM z;{WiOXvAMJS*TJ`;6y5x=+Ta@f5*5_bb_EiugJ>$ z_N!E*7@fU6`WcFs%RK8b`178T#)v3Dt1 zU%T>Pq;9c1jtutif0sN=QLb{Rk{J+tRsHdfz-1%dFIrwa{Q^C)-iq9gv4fD?ohh( z@j8IZ}=?3TBj*I^F;ZteevupNa_Z$h!*O;uUQoKIk6+-ub^y|yk zCUd^iQTjvUjXM3X|IhqkpLf)}rLA3EDBP>7TP?3Y3rCSzUyqXf7CCeu5YL|3~%F;fBkfQOOBoXdbz51&(kk~ioi3|qxSE( zQTtVOE9zDi`+8a7@c>-p>t%eXXgq|>eac*-O%+{bcq!m2DGQQ`-AOa$eT5OnRyLS=hevT zq^z&otgLyy_9l)OGbo&m*v#JBzPGo3e~R%;HS9AEGw5&HQGIj0f6{N-+&tu4HuKdj zPiv}#=CFiH^QAr=uMb?sAl~#_^?ays`mOrazg1tgqK3h_l`9Lq;#|SI>S~~if;XqE zczxde;TtE$!o#<6iZ1AS+_9_-V8H8~PsoG$?;aGGe$H2Kd8S9>6w9o?b*4w-itxXe z;nYmvL9`@;`n83kr4@`vRWA=2wh7TvS>~yHS$})aEXl=TCaL}NLS^bZPr~bCGWPGGa$Ju zPADJ8=N*M#HeqAdya`@cR|`AmM|knf+=oh#bu*`eeQdvvy-$oZ&QQ$s?99$xgZulK zNfBMYLzXz+`&<4RE#LiMZ|AO&t&R59K`864?{L4Z?D{VMH_nzUx-OB--dduzevhqw z$+p4%On!~C8dH9BcXw|KV7I+{gbcg>vt%Yax_%I=90#L3ih_eKjLF zx&J?MdU9Y`)Bk4Hmu#`zanC(jo{x@n{WVAVGxXQhrk>rsR3fC#OA1}Z87=!d2b$$N z$b6JJyLx*Dn}-J4o4b2?|2!~q%umQ5s0;@5_JQUv@n^|W22Ir9D3e!8883#Hm%-w# zL#;VAP*?0ds={)`nD4S?%lh0(szYXG4ynw(s_)KhUgF=D=`@Ud-v9^ z9BC|r#>qMD>m#(eI^nKGBz5z3-AwX$)Uy8lUs_!iq(97zfh%wu&bW0g#yh*z8rHkU z|GQ0A@5tTu_UzT4qsgoHYUVsm^_Zcg>-nfj95Ha^|E$<&N?-Z@im4AdhG>Esaop$6 zkXs`COwoex?(5(4u2gvYy}z%$O-6XeZ<&=X1CXBU)ugZo^xQC+t0Z3l?fvRIxoeGF z?_tIWyIc0Q?rLEIN^@m;TgzZ&CHKYZ`!{WEtV&60+xGkJ*}i5AoR#LKWZbKQHSHz? zf>pBVU8;C}dX;RH$x*ssM)PE-Y)O^GMMYlX{(4<+rdndV?r|#;$-oDD3CDkg|kWVk)a)Ukn8gTkGApNEg z==+X)4M>n!E0JKqAdy#M)vN0@qd`1pXQruc>+S3r%$=s%5$j5F*MYop+xN9IF*5>T zKGJxLA7M;W&0{TL24o9dbqn9=C1!+Jz878j+>N|{q|s{WDCwF>E_`hc4fYN3wfTO& zHamO5~%zo?m?)ba7>G^Kc_@odhd_s2+NDf@h#3CkS zPJCWlwY3(G0wlvR*gS$F+Lv+5!w`)`>ew4>|p0IiR8lQ0N&)`|> zUH7lwvgTbixdS6J1>zS>OdiHm*WY55$=qYVehL9IA5?k#S~f7$*9YyltfTD%YTDFX z$Bz?J_U-Rv;`~W9sKPG8U1{`;YF4E_Fw{QOuAVqGGsed1j)#nsHc_1hKAr%{n6NV6j%%5T`{Vp)H>Ymp9Jcbf6xA(NP!r$FRM1A+B%^OraJS76r z)Q;wCmIq7GS@?$t-Qt)IPP^r~7?QL)tg1ok+M4wUSyebD^g$*pR?6A5^!K;y&p(Q} zSr4}_0gk&R^>BNCFDPG|8DS$ZW@ZfS3aQ>6<`Q;u9D)he65CHnDnhr9 zdZbDD^P8LHp{1>*r?;n*M|)0SS2Kk7-VvV|T+qV@+91Saf?AtAeZU{G3RKNQHP1YQ zGXIO=F6K%ORCex_D=+h^bgEfTtgqaC`-fT)Uih%w%+({hwBm>MefV~2`UmQfIfwy)dxzc)xmmyl~6Cjz2@;cK7RS6Dk*-uX(HbL5CUa zbJdRVL&Gnt>36QGU9RpcysnKPA`T{fD}r z^5TMzLD=v6!uusJC-kSYvai}e%t{(2M1lLN$r`beK3=ea2ZsmC4Ai^&jH|3EAXiE- zJg}PQ$_Dj8SFb$wcdeDCet;(p;tM`D45vNN#)HWFIjx+Ht>H#}Ct4Tc)7#an0&Wj# zN^&K6%NK*(^zYJ(?6(8MT^ppZ|EX_Qx;Duv$h^_F@qJ3yR>|~jf0@$NB-u{CLU~Iv zMAIbIJLVON!h`tAScw=xU3I9-puS9Ii~Nb&;|WL=j{0|fSNgx`2S~sjzTVA`xWkty zUEh{Ll?XS+k+s(`1TfXVf9XyqmNdTO&||JoS%k z8Mgh>{`Nfsx-h?-G^K3Yu>J0J_ocV)*s#5Zf#t4VPAW5QKZ^r4ZM}cT{ms9>W^;O^ zYe3FePN8dvRHNPXLA`iL7O}22z0GUZ?b!7D8?LIt?&XTEn^1Jp6uoxM*2d;__iep<^QLt> zuBLP=cDd45OelTMJ=@oAX}%}DDYw?HY%X}AZGE9_eWC5}LdR9fjU`>`I?tnbseC8x zUnTc!UcRn*<0eyASJrdOOm(TwRj|yXy38$>omHshIBB7!s?aT)?!P~5;VUh*M7Qx| zrAnu6=dRSKej!|bCS1N0F8^J){G)LB<#748;qt5D^6TL; z2$!D-mp=-Z#{d5e*Dr?4zX_KnALDQQz7p;?=VQwMVYvNUdHyfwts8&iXO4e8Jnoy} z@@wJpFT>@ZR4Z3@T(!`8)fWcR_Vb-daUf?J~_~G>^DCD%I2?+MVuzvX>!%SyhJqfKx6ma{W*&) z4yb1!`;F4iZvJ}H95xKg*w^sbe$7sNvt!8^(sM88_brwP2wJt*k}@)RDy%= zHCq}@VzWtXF^R1z!NK>bMAIz#P0a;KFL7$sa$l*lJls&HmSg|g`hZnx(dDeM|DH** z#-DwufxaT0s&zG8V``mByK4WkCs~#r{H--la(m+*GHJQBsby)CKFA*a7WrrPS3H!z zzhNZ@QoeNLyk4By5_OtBb-4o`pdHq}=9AgWrOvw7g5mEj9Fxz~+SmT-x2tNyBzuRC z%5FKi@on@8*+v6}+vI(MI!+R@jqcyVCt(x4KgFh|N;XN~{)+~?^)OZ1bnqJMkQ^)h zRQI#7n@G~19mi@)k(3WdiB->MBSordGn*PnSn*BLky32Bg-!ay(R3%txHZh~O?)hE zmhY91r6hhTA4>VNFQ)ka1J?Uo`QSF)Y9*}U-&8qR3ac3YO}EQ3hAqZ!!%DCjSS7X; zOJK9HDy(|=Hv#?u{sI00{sI00{sI00{sI00{sI00{sI00{sI00{#7;>!EVNG!J=3k zyA`_~E5&AFORzhzS=b!xPHY)@;2+>0;2+>0;2+>0;2+>0;2+>0;2+>0;2+>0;2+>$ z)qt(Vc4DpAdhBj&7q%PQh~0~IU|rZ|Y%A7{^^gbt0saC00saC00saC00saC00saC0 z0saC00saC00sd8Muyt4q)`o4s?!nrzJ=i9!5$nVr#I|7fVSBM&^1wg9Kfpi0Kfpi0 zKfpi0Kfpi0Kfpi0Kfpi0Kfpi0ziJpeh>c?Bu|wDq>?Q2u*iq~__A>Sg=3|dz0rqL~ zz(2r0z(2r0z(2r0z(2r0z(2r0z(2r0z(2r0z(2sh>Hzi#_7Uu(*kSBZ>|@v`uw&Q> z?3381u*a~I*dJkkOdj|L_y_n0_y_n0_y_n0_y_n0_y_n0_y_n0_y_n0_*Y%PzJOiA z-oUKeb`>Cmpt$f@DK10 z@DK10@DK10@DK10@DK10@DK10@DK10@UI%i4q~I&dF&8&1bYelICc~}j=hY%g8A6v zSb%++Jn#?j5AYB05AYB05AYB05AYB05AYB05AYB05AYB0uR4G|f_()0D0Uco6#E$V z3G5hl0{bNPDeN)qB=$$xACm|E0saC00saC00saC00saC00saC00saC00saC00sd7N zurFYjus5(TVqeC7i2WG*D)x2kr`X?Pe}#Pu`v>g5kO%$&{sI00{sI00{sI00{sI00 z{sI00{sI00{sI00{#BpHUc~JPK2>our^)%MGkte?m&3{ScRS^Kr6NU6mJ0uqKiRVp%Zppyqn1nJ z5&54c=3m;fJlFCLS>CYan%+RSNL#k&+TJ1C8@AIWmY1+Rp9Z|(9hLv}#rRH{<;}B_ zw&jgj$*AR>vXX}_?|}7L+x8r`*j|h+Hdo6lwVYj!cf?B0vYd9uJ7^^zv%F(g`T$3A zn4O+sB};8@HV4?wZpVAvO3t;MJ&t$W@{ZWaq~#s7lV>gOwB9&Y?{l&x#~ZTE0E}8_$g-Pr$^JIuuDh;`ld{iaY)-EK2O;qmGxb zCH(e$J9&+ja7Z1s6DbzMk>qt&qJq>@miL6^&9uEacA|mx5+`}mPOK%BaFW;9iJhd% z>_jVzd3N$T+Z(Zy*VC|e@+K?cvh_tP5o6&y$!F=Uq>ehtr|iUSq@J+TWlr*h?agzN zw&Ts`0yy;eT6r?Cyu*&u;nX_TIj+_XR`P)3bUNO1mUoVJcf1kDJLM#2IiBMrA9E5V zWEXRi$DG6rQg$R!$zr~pj7AbmN!?&44@7*a>T`CoG~!ED&)L3Ib*}A8J!d#x(oWE5 z@+{!Zc9Li9gf!RVPC}aNxRX2$L`ujam6;Jq&WiX_nR1&G_N6k{+Q|j7!Y9>x(oWu} zc1Vkzv3+T-!JK{@oJ#BmCPGSwI1x{ie1-Fn~h^LciBelr(Ua*r-JKi&P zBFg%;PV#vt5hwL{BylT?xlZEt;oqbeI>{t&x7qLvQzTiOb$qG(BFC4SpLV<#xKNIF zo#U_P^zUZdlUxDE-$m+-yQt@{u+J}F`ohq@14fCDk^^WtP<4aXV+vgl#s(O=?n8o6plbFNeMJI75-rY`O8EZa0G2-lXd})LE5nmeMsfaHPa6`nW z0lc}9#4wBJB8h`6l99wHr+uE}xk&PC#5)@C53q7N;y*(5KSHuRlAP=MA0>5d#FrYM zcDa%IRGK@#Po=#lBgq93*(S9=BdNp%Qa45tUtm%0CN8mfK9YDtcDo7M)q9$wY7(?A z-xvvL+H2ipl6-3t(!dMV-i@Trx`}&PEQ%yLSR9Kax>&prNgQJFSR`?TbAO5CGm+#> zC-HGoPrAM|&NZ$tjZ@&(j>r3Mtb$x01r(Bz^*6DY=57OQ|H+fSeAy;$6^3vHC8WCLXo+1&NR5**Nl|IO0DLL<+Guits)v;QWYm|kZ*+Yr z`%KjLSv>FhkFzL``2mZkUH{YMzlG#NH+eRexR2B#H?fz+f@q?b#S5-4t#M=2mv(r@ z^`#x2kNUKOJWY9LV#%kYiLa2lHkSAii_@{hPgpFBde=m~MN#j%X!?a{@~NozOw@ZK z>OC3ru8DbNG4F|3dR{DfUCbMadDln1Q!($Rs8<&EUW}$s#gorQy?Jr(`j|IA<~o_l~*gYvak8 z+_2)_f|z$E?%f#kX1m_=vGn6^^68j&-1Qd3y@fIF>A1Hj=G_=izYt44ANQW&4A~y{ zt|J}yo{Faz#gk9Oy%*x%oQPKv^-e^*MASPONgw4pN4*lxKkm(ldN;+r*-`JsI8k2h z#)=9{Vmd(d4snr-d)2m^Ulx9gli5UGMRzH^(h+b-Wp|7()F3D=t)^G>?y$79KvQ7;kqPDFLU;Q8_797%h}WAgvWs5gU(Q%!v1 zI)3mTr$J(*z2maQn-%wtINoD%@1Wz&jHMmEMPuHpdEo<)ja~$wwj*Rya}5cD*C6 z7j?Z@)I02^hoi{@u6GD0*Rx_?-1UZIo*hlQv1Byr9g2C6xalL&4FzUslX(yJ9 zM7@JC??BXx#k|8&??}vxa#Hc69rN6{cOd2s$Gu1Jje8L)5l=qK@o_I6^I~!DQ7RGl z4#(2bc=~WWZO79G;^{|X=?MSF)A6`_$s(@y9*q;)^zU&FnXsDp`iCa0UVOo7steXA~Hzv!b6kQTp>bSCCP)S6oW66nul#Uuc~<@l|v*Q_A_kY}&O2=r)t#LYA%-Jz zllbjM+k2k2CF-JK?c`iy`3S)k0UI$_@~k7l)B?x5kw&ly#t6|QK6}9?M5DR+2)yht zG_jd0AwvfqOZ)s&YUtoQcG zzdhr39cKKl-l@AFXVxU+cbgdAVSMQgN%GBV{_L79T=Y^kbZlL+D{fj$|JY(S$RH69 z`D&HXEvxC&GF`lQdzUiz8SK1 zNw5LQnW5EDd(<3ByNue~%-SqjJ7w0meNxURrJRe#n>*>KU1N^mcA8ZVOvI=?Y)a+E z%9=S6IwGs)d}U?Tj@#|1UGZm9PNp@km2GbtZzd{_+OL|N8FC(_GU1HUI&fh<3_FpgiTj$-D=b!penEws3|9nmU{yww+Mpgdi{QVjK zMXLPH{QWh?|0Y%b;r#utn)9PFl>ZU-kGFDx{#9ezN%gObX01T~%JjsT4B<$T`=UG=X_e^LGGRdb~3UlkXmoW7j?l`==D{&mT$ z73g1?b5{K;Q*+h7wwapi{`I<)lldg7{+0QJsQxu-j-RxDRs2`-$?0FG%=J4x?lCLinjdynf|Z(SL?qix?lCL^Uvn*Z!qOkt4sD9 zf69J)=hVYMd)vJ@N_^S+Wn8a3{;O%f&d!Se-nWYT_c*`Rr1`C3$}pe^afpup#>V46 zwoN_$<6s^C5$qI?|5Ol~7yl`K3*Lq3P4inXoA@t_-x?d|w~EJqN3SIQ`|i}^zkf+n zHqcnsmBoLw#NFa0(egbevC$+X!dEf2TxxYpqe*Nwi7h6vRVB#qK9!gCVzfu+O56`DEN{hnD|KWH`YO;{MK4UvgNk_+_LmPk1a8WHT+r> zkOvW_Y#%w=^-*q;jaN^Rk5-QB(s@qTE9CZ0=EnzxAHRDteth5qgM-a`KUjnxf2eP; zA8q;+q;(cWJ^`Qd8&zldn3=U|y$!Rv+$apSUBEN1B{yIZOZgY#%alJpE9|YGT zf|cr5#(R1P)en>FUm9PyuA73I^^p*w#Mo$cB2hFUcDB zd3kG8oRj64f`9g@zy4FnEE@yQevQPlUx z0vNaf!0q#bgJ)sjO)09)GgDyn1iLT3JiZ?H3Izqxnba+shrDAOdykBJ$5&? z3)_ut#O}p9ur6#fwiWBfdT2=)jcFL1Hh>eEhQVnA@P&6O3|_Sq^fZCZ#;UMtP*MwX zuoPB-xmXNajNOKnU^B2v4FCU?F>npb`>oV+J$5&?3)_ut#O}p9ur6#fwiWBfdT7Zt z*gC8QYr{5R_h9YV9&8iVh;?EQVq38Lu)SC>dEh?{gVP2d!9I!|#va8!hJ6A%hMmAZ ziG2!t3_FSa5%$NlAu#tpXBfO`sa1RNm8FCdH&||55Frhgo zzT4TA1p{w{T!2;4|HjHKcQ_6q4p-gZ=>R6~%3@eHYG@N~lYerkwJ(E%1G??XVyrnd ziwNh?$Z&Xay}6+JAp;yko$4-geR(?^_+%$Df?W>^&NJuQ^Rwz>hLSWeuL!vN)b5%djk;z zdxLyy-W%8(aeOV5qnIgS~G&=?vZl@g^AROKss2iHbgZhT1fvExf zo~y`kz;9r0sPAmv8`yh>;=RkQbQbI_yw3BM_cVx)V!Q=8vq5?25YRljTX+S7#MQ#)fOZpIdvM*iu~1w$Ot*K!P8*tA z=$yk~>Jblo8}jHmMaXM{+i@Va6}WvwKyC$YA5<_mA-=HNz}y7-z}#@)irt3djz*xs z6~3)OZlZkwxuq@;+~7TP6~rxw4>-59({V>}+~C~ONKOQhFGRTke|%~pPY9acRvfot zx50n-;6VfNzuzF4MmUz$3+hFSH@LA&eB_4RLf@Q{J%Q*C^0C zkTxoTl6E|x?)9uBBL3Yhp3sQ5A5n<6fx8`nyJaq`a8xkfcaXX+q5$p@M*-Z|+d^+c z*DHD()SD+Qp{RM-k~y>R;mH?m1%5xPrv%KWCht~L0^q!XzNKMqaMYB5XEWe8s5do~ zNuqGx$(uCz{i0KwI?bCK1$WPjKv3};y4i^L{D{--gp@ZBILNoK-ZEVj-aDyTZ|`g* zabB{GB&7DIBSK+AswZ}_0I=T80#f||r9VPa)88KBU6XW`#G zH!X$&=g|rLJNdlqRRH(X8sG*3Kg2Ep$!mn+_7>76HHnungSz#9K&bKyfhV zbeWrk>!!9IK(|zQo|}-`z8Fb-l*Ncf#sRzUVGYciYaQ$%Sr$!R?7AHD73NO@_OQ48Oq@GF;}}LVPDrItt!C;V5|foU7n%Fz-*W8(dqOXl_&i z;UiI>#tEcZN&w}f38@d5cO#3Vt|GTjM+Mu4X!mJ+!Ms)DE9hGuT?OQx8&gPkHqY&X zdCNK9s2FcK=QFAv$4EWzCQh*M-NYy9M4uvA4w>z$$p^`pntZU(mB|MJXbWGz$W=i2 z*_Z;t!Mp>``P1xp#!bS0^Kb<8t-$VuQ3ZBCA5~yC828fxb_*6RbB{gf?rWk73%^cb z;R1pSQT|j^;p9)o6i)tx#>vmbe9l(p48wpYuZj7bEhxAzCp=Gq;NakZ;HP5gvUu{v zs0RpsN`v5}0l}l`=c37*VxEBDz~u@M2M50)mOd9tLWCy)!DAjcIQaPKxHl3{m&cRG zTn`ZZS_N<$96UY4O+th}ub^;n@W&Mne%wtjq}_nU6%-B*{({26pNXXx#*+}?PbnxI z9DGsS12lgjo-T$Id1YF_ZLWe_yzZeG)7dRXKd#3{kE)+Nj_C!=_;?6^ACIL=sB8@Q z+dE2bF@ePazWsQ5HYj{d@b1UK$76ztpM-#qr;kLE5Z>V6+^<2v!CFDRAzPUw1^<0A zE_n9=g?fX1A9029hWrNmwp{lHzSkoXRe*_ueiKzV(R3`Dg#M1YwXZ%6-vTwxjjsU$ z{;(^71t>Wr_`#^)-oW6H;1;xa)Eka^kl=1KeJGlI1fbmY9L0SfROEV8{U4M62`z!a zlYrrn;IQOy;x0rvIVe0FBpebPqWrMp#G{;lJbf^pJgk^;*l-*CoisRmJbfshjKH49 z((zdO(b!M~qC5`y8jk}Mryq@X5RDLj=zmSCWs;tbGkO0`da?N@!FnQ$fh(ykWZdWU znR2rHll?Uokv!13xSA};kZG-*-uCr#*JzU zB@kIdAG0?S!Fow6t!63ysvrW+97Eg)CoLu+N@yt|BQYj~ zcNT2^Sv5b9*ii+Jirc=P;8qwS=b&zHfwi5?F) z>F3mhKY~U$Z|3;Hc^@H4m&tzV`F8q-al%{2e>(Of?$eO>P`RCk?S}9+ksb5!Wbz&4 z_i^BFhe>cmZ#r}%Y-9eNCu}#9F=4x9TBYW{(+lnNGqy0_Or|6Hy3R>I5}M=v84rYS2#0IH@+8fPs%)83st#0p^Vc+3|z+VLJVjE2EKDM1GIv9a++Xjiv%;y#=uic!u_sg!+x(44EmeOL1qnv zL~w#+NMu_!$-hzuxFka&yhM^AGA;*bBALN0)jX5@XOE6!&{F<~rTo`3<&SB~T$LZ@ zDJ6Yty!;T^maQSOEJ?b(s`BN_Z}_(v44U%Kzb57D?4|x8u2l5__te*LeY z{fFm;<70f>~oUcGSLLAlIm@WkA-LtTmW@d<$ej z(S!ov%+E_X!{&%m*>=&a&5*TR@VmzBOUS;IS(_zmqh<}@0o*zV$*l;aoQ$^ub2H^A zFt^XtrvUhU$>glS+zfWi7%=B&{1lSg`sY$kCT9ia?lea*$UI6D7W}iz48~dn1HZ68 zygwAdz*EM*2nN2>>@R|WTV{U|3_P>H2nK%9oL>p%d~GyuE#cWt>Us)p)l|ZW}E7BJI$KvZJBFZptoi6QoXIl_!a1F z8Ut_0>2sOm3t-@xniuG8Wu~r0G4M=FsXmvf!DPM7-e#_^>R%Hv@XYlsf`MoD7s0?& zCjTNB_$AXnieTWG{EJ}V8UG>}_%@S2A1{M}Z(GgE)WSg95~xSwzpKQ+w|(Qw@L)|%8UQl5~>^uSso%P5`^Z(f5oQ(W?|s(41O#A z@`P!Cw8T2o66;N3gGt-t?Cq~M0_c^~2spnesWir? z<-wO!w+#&p_U>(#AKh&4uH3z^=Pvb=^S!;@(?7fICj>+1*X;*}x(79fzPND*Q!Ex` zE9Hx_{L+^GJ!sP}UHafdyTTa)??8F*`jsn;2zahMcwJ4cS6#Ql$b(OgfIAuiw}|W} zD1k>B?41vAW6mJp!*2}%-}WDVM+kTrLZ~TGSB8L}E2;#}_w-~+;ASQn87x-cW_+_s zv~0;-GzqLl&-tK4zA7OPp6c|Ls07C>Rf(?_m`SGICQU%V$CU)E&lv=qdaqU4Q214Z z5V-3Q0{5wh5P0bjqG<{Uc+<`d_dQVweE2;)8L1HU>JadYXQ{jihYKL!HQylr%>Ic8 zxO%%w`Aw6~aJVc2KK8E&Tk;U_ko&$$C2*w5Qi3A}+(X%Let0E((sY&~{2whP;h zF%DkEAb3>=#t3*7gY{L6)K@XyUByWEv=TUNa1aZLgaF*_b_9C~`#5$KJC41Ky@L7J;~4&hl)yvHc@XYtJ#gCKN7zrW zuVLT7eun)V`zH1}_6zKnwB+Zp*RbznKfu0(eFejRDth2!+pXHl)4Z0oFD@fW$Vl`d z1WmvOn2}as#(T5DjQ0xUn<0F`dtrOwe1+Z>!q=G=`p(qDrW#*16L&DjuK{8D$Pom8KveFe!k{*j|$T3!B}MEnNi&|> zV1_u`N@f`dcd6tdKnMUXFi8^dc0HSBIts%riTJx%1Jc~hA^`>GD54fFcQzXkR<2@E z<|v}}CR<4`&r_7H2rDmPA6)JoETC;Suz<_GhsE`dqI8c&6s3!v@)|bI*Xqj9wJofn zwJc|jo-%gTbNM-~ zxt!FZ%4JGa835P+2oCciN>mvDSE>(ydpC=@ZbGVmN^`gi93{A1u36g~9mU$B!YuVe z-I}%qz*QtT9CRgXXS9Cz0xgid&{1$LI?OMzZ;=*AembHAl3#F?K=ShuC6J63wg8-` zwb1dxaiQa9w8}B;uQVoL?O7$BEYNK`8(xU`dssl*Zemfc0bBHyJ6SuU09)W&z+0q@ z6C2s~q?U7rxb0vKU1j2Oz+0eOMajOX^^<{aN7)W^D-C-}W46$?1n(fV3F3F}SyutJ z@U(|myGhF?Bcd!7ebMzl&H|qHFpHTHMc0;TY2*_TMc1B+DoPf*_FfJNrIC|SUruKv zhpsKjp=*x*$Y=2 zQ(P^g&5C}7%mukEj|p{qZA@gAk#`2FJ)^iT3A}RS_GEiY8S@S zs4D~NqOJ_6i{vr_%K)|rHN)7#>cZH<>Vobf)C?qx@G@L2!plZxStOUAjf)U86zvUw zu2BJLA#ed{1)fD?87*amn(>VZV2kQ9fGw)a(6#6=&rwRtXeOhse1h#tb$JE~%z&{m zw2=kB1(ijI8KM@P7N{1S7KGMU@a*h(8kQDFc1Ao2V+%rioHGG9RS50Dh$tt=xFZ6b zMm*qI09(jeSHZJ~B9ODl#e&TWU<)uCQ*z0c3nwc$tw6G_$R!_9knAwWfVFZ=RDf9s zSwxnNT(XEP3kDk%x#S}VE^C}NCW6cGu;8&Ev7oX5v&b$ZoeWxwQ1U_1O%|=>7;4Lc z!HUQ-*eviY*eoK;Ftf-j1I$_>Fbf$gBFm3bFJzY$Nc%{*-BO|PTKqG^h980t2V! zgffa1)gxP_oaek(%HV1gbcRv}0sLSgRF z{2X!M?7&30QRq?hfny3aoe@bh=?BIWh7_$}RDy{;vW0?^SrWl;si&RvLeWMJ=}`z% zg_i=5>K}C=SRhOoQoqR{A;S~S=lD$uZ&ri|BYi9~cCR!gzj|R`SW7>VcaI*+af0;X zR0z_VDG{WgW8B@<`_ri?3D-=W9Uxcvv)|mv|MGse;_496ZF46>NdGaEfic$Zv8`=Q|cemtd>;o8=3kW+)}n`nl&NiPrd$qpUJL&YZ4SNgYb^$DdlIi ze^&Wf?VnZush7X)FS5(8_yZ|F>-vXvlI#CN-HoJrS=T?rO=as<)qmSMM_+%sp+QJ9 zilywzM@TOk&<%10VAJ4r(VQb=vbN3ai_6+YvqqRP6@>InxzR|!oGHf-8}9-L=_#{M zA*92`Z;mRb075!yj#mh221G0X^}T71EP#+^+My^yn!yDpMM!H50#^hf%^-3`5YlZ1 z(JX?Hj+*^N5YkI#e-VWAqS;>rA+^l;7ePof`Exm^f{S(|!q%bbJiZ5koX?QuNGS{aFLON{rUnN3%(fAiZNHhD3Af%c7MG(?gP5wm?(gw4i z{$&u-zNv?Sc4i9ERU)JfADJRTYLtYDUMBpK1VKtMC1DQdPR1X{ToxfM9RIy+;=gwg zLi)B$A)-k(n6|mwB<@iOnoR^I+|Zp-?&nck|(@bJT*lY4xqGW_jQq)^q@XU>mR$vyunRfh9J4E3d1 z3^A22#7SnUs2?lfRL)I!#Z-8f^8TVfR(14BUNL>Oz$>Q9g&1!eVoLi>J;dPPt#Yj- zp3@=5PcIu_jJ0F{)29ECNvd4<&wh0c&*>6kY`;3h^wlTHC4-QbZ=`><+$z8Krc1D2 zeO+D=5M%IQV%g;n^GCU^Hl#a0L!#P^^b|opy zY@9sMRQ1zJRrRJ6dwHJXm8nYV_wCNTclG^u9l3HcBKL0o5ep-5vw;KG}shjyf zgP5Y=WHGGhU@5F(_&1wfmN9HGb{obB^t8$_ZNO;uG-65{_}JrEfPEVB16tzkL`zsX15*tH4|=hAqZ!!%DCjSS7X;OJK9HDy$lS4gYDCVcK9P){3pi?#6au zyRnVfy;ujA;RV%=B|ZHPYbw7xKHfIe^)`oLAwa49O|w8K@xrJ>UG6(Xkg=(`9G zh$b>JU*j}sT7J#h(4^@D)>&v$P*Q+WP*Q->BZ?!1DFrBf%+gA+o?~QUjhL5~*YW^L z;Yd-3Jx!+N3j7fELda3UMjy2VY6Zx!LTprvzIwx=_Ufr0bCzFv7FAd!zy&-p(}oZ@ z%G?CP888Y3h@$O!jn;NW;+4=wzzXP4h*Gp&haG;FISq3GBMM=WaMER(3k4E|5G4ZA zbVY(V2*N_?xhjEIK|@jJ(r^Wo1;4q>FExXM&bOdLK`ay$3T9zPGF+&wxX@Wzl~s@n z+72#Ma0($p6?h>~C}=3m&pCc*+4dkpXV?N>pk@YmfjVxfqtMXfTE!JKbe0x!1+aL` z3AJ1WHl6DzMl|UtMif3{fu%4};X|!Z(N$rhXMi@egzF3^`Lxz=1@kzoC0v0%qtqP* z*@&Ys(Q-#1+*{eU&_X>-k)n#}5bTsNQLs^X(;1{-MxWL+D9qOQ_#$3Yz38~QhNd{I3oJ3*VqCF1BgQHDuG`=l6=Y*L^!yG?MEZ>``FNa zrK}u`h>EL_drMeA^xeS%o}|pFY9NKOD*qxY}@iPm-&rxk!HaX18N5_(h`xI7{-Xq7bW zwGk9{74Qi?Dy$%at+0a7qYC(h7d^xp^ym>52{-W)ejg{f5M|zoVlr>kOy(j-F`4k9 z=h^*&qa<08bDhnamSmNm6+w?R2}HV)T<(<}oVBY^&$Al!Tom!8U9QoRyU?S%sGqdU zQ8#&A#J@o5sfhmt7LbaUSU}aj!2(iLFv@E*1Byf|7^TeNLZ21+R>gAO6j3ZE60IF< zha~M1KX^Xq(x{-oRnlzpIo?$$Fa+ryHr(I}Jt~a=Jt~a=JxU`$kNUJj)d7;HqRA&T zpn07JG$BL<(0s~OGOWPYjjYX$Dj8O!i65j+3AO-KgOo}GosBAL88BPg==8YIDMFto zBTDErp@dGWX0ac|+y$-zJ8#tTs@J+oUKM&&8Uf+jtt_6_Ea^hUlFBSA@KI4&JwfWm zr~))!a225WeAGY8#%EmrQSpoVA7cTX`w8l|g=9J6pb-&Pt=h}lLeXAT(C2kg1<)>v zDu5R4Rq=ZvDgbS;iR3f1OH@hf0-krW0m_xSd)LGen@xO?6ujt{Sv(m{{E*y#OcI6G z>!ZGudQ;S=NEBLqDfPvu-^&7}R#9h-rG4aeNyCgPeiW7ze)PF$`dl;#Liz;sWK<~9 z8LkIKIzN`aA(jLrJ*|k+xp5J0g&!@CrLT=8K}g|8p-9nXg(8I?Esu*LD}<<^qR^QU zp-7LRE*<-f($NPbP0n=r&iJZpL6jx|NufwlXN4j~o%KvS2}lY*3Q-CP3Q-D0S{6^w zi-+p0kgQOokgPDHv)%Okc(T-mvK68feiWhJ5S2$OAQ^;4LNI52+PQ;TysL-WQq$0#hKEj)dxa%B< z(wIoU!kZ${I!g((BHRj)3RenjiZrVsO4C*(36KhS3Q-Da3Q-DyIvhzmu4q}JVhK?S zZwf^UV`{l+*G;0@3UvxO3U3Nm8g)@;O&@ZTAgA!AN{BUmFq(uhjYUPE6?Ik!RJc-j zQv_OJObAgGX?L@ERyFrWkrqn zwdkkVOFK0+8f(k7v(}W}vL46cac@h6t(TAG+ z;&`WJ-iZj1su)8vqXL+!*h0q@%p(zPQi2I$lamrsNX)RvW&#S=JmsKJO1$KxRS2QO z2Tz3#gbYZke&>2SeG~PynLlD%@@g~#l%9D?y=nZ8ZAl=UHOOhdx;fk+ZzQ!;sJ*io zP- zeilMHnF=ZIm5U(+ylF0m5a6Y!*>lVU71At(^yUA_2*G#F`~AWyr0P|Fwe?&6u26-P zdTWG$mdHa0*tJnzU=qdN@8cz1QN7LIViI}p_kUgV{r(cC?t(Zqwek+Qhz1q?t6@us zh;ry9yZk0WB)1p@K>DAOfKUi0@cx;tvj3}Ue+d9+NHZo#hJ>VLvsEA9N>bB|C6d%M zV?vUe{Io1MzsdjXnm@}Rj8gsx<%fi(DnHCqP9@AUulx{qWNQXtC20`K%a?zFISZ<~ z{9uJ;fBSEx{$I<~KhztYQvE}k_6qBNYFq`B^2=`q;mof8H`S@A@(b3#X}tcS^sAI_ zaNjAk|F$pW)PIkZ|Mjb?|JaZ8xn9}ze|0GApDaf0Zz~njno2s2P$~)`O&K_i6U|cJ zR0!!sgRv>7ug@GAlOy}gKIoQFJCjR^td%Pj(o^P$QrY&VSyND-W!4lznmIBdM>d#! zvt%uU(#=+Dw}$7=U6XPYLb}Zy&lpfvIR&7;o#se>l{HIMRY83_P3?HAL#bv>;e6Yb z3aMqbDX4GMtmQ&|xt~Y7;X`5jE5xt-@3{WiM~v@Rh~M^K=kI^js6Z-&^vt~5^87EF z{R;8>c1`~NH_d*9_?2%dx?drF+dK33Z!_nw5Wh2rC+s)*Q>#(?%tzR7pE50@`dq^# zy)6SxUSV%5S1P2L>!JGGu(`IE?QNsx$O66XRkKg^w(<*7pV6E?H(75RHZ@nka;BWi z_O|lZrJOg7x9W3cW^J)HJMnf^=vx@3R*PuXu@xB`TCkH>#w|A|mA_vdN}NHjvKU<^H!%(i0jA3;j7 z_z$nV_-`tF2jk)ArpR}gDMTExl}j@?1W z;UmG{L={r`$z~;M-(c_T=7_APE9H^(pZ)DKQtW>ycFf4x#y`-9D>>6?)^u9Vw6{OC ze#6@IJ*oHHm0GT3DW~O3_x26$udJPxGc6)Uy14P-jz#~A$(h#G)zwt5Tv>=Uty^7N zy6$JviKQy>)vJg_-YRQKFrj0Sjw^{p@XC7^H8zXy z{hA9>j|tORGH;{)H6aK;ILk2;KpdIq$OhdqQ3Ua1LOPzJENdtv0(&yDSNyxT**0lAVz?#09;_Nc4=|nlx zDwiR{7`7O@4P%V^cg321=9Jt`gqo;|VsY$N>~^dan~5#K?!abYjH_4Oi7jJb6evLy z%YqO@2=EW^5AYXoAizJsKfqrG_5=I_`~&<0`~^su7B!^}fFi0O4XO@dN3fT$k7Gx% zsPQJVL!pXhJ6G38TNDR zo7n5vFR)+IzMscl!@iIG0Q(Y#|35|6G?cQu1=22x#j#tl+p$t?Cbk5-1Dl1-!S2MC zL2cSt1iKl-Kfpi0Kfpi0Kfpi0Kfpi0Kfpi0Kfpi0zp4RSi$RQ5L5x;Gj8;L6RzZwb zL5x;Gj8;L6RzZwbL5xm|n$iZ3V*&PQ+He>c?Bu|wDq>?Q2u*iq~__A>Sg=41F5 z6E&SCPHES#U_Zisf_)A92KF=T=h!!~*RfwMkG+O{ANv9JB@F+m%9%EmTeTg3 z0;+Dmxr#61Z0)bl8UQst3?5oydHj;A&yS~CxpJn^r!c6{r!c4pnQHX(plF#2eR|kV zJ7AdxK!swMp(qAKP0=!a9K}n~H5CR`{njgDUZ4#_BV% z`lV=j0m?vc@LR76M^%U-a;0HF;GNLQr4|r}u&HT9a0rKL!9GExf}%R4j%xAJLqcUJ zHWeNfD%JdItVU8rvlP?=&C+>F>nl_)J(W=|RX}QDG5I~K300vy)X&Buep-f`5&@g9 zXc2xn7Fq;UWSme%uT;(j1O&a(6sc31P=!qe+kp1~CIvHv7y%c7GKEkDNfpgfJR(~2 z3{+K7sSYHZ22&5BAgMJ=kuJT3Tw{?W{1uSLF)dySwQ*SMmp<gRj>BE2z!0TCVgt4Y1y%0oHSNLNd>xP$4Q4m!6zU@^AX`7e0{rx&)Mc3DDK4UxK%J-QRWwYAwIEP6z3M7@71dILTo3$|I9Cy> zz^FGmicm$hw32;jm@Z|JOQFJ3zQjf_(vNeV#K$3wN|cO-siIe5Qi+ufh5CFph3dhi z0$D0RabZN!iHbs1fFk0h4@xc(B}NKOdavZ7#Yka0yYSneGt@@C)>RxXs-R!M?-GYSDL|^?aL>4j z&$9t8^)(h~pnjjl^KRk?ETBJydWB1!jb9bXg#x51@ZbhYY};-`g0;Y-mm-OL6=Ot-Q?+_akoTBbcLUQigVXqg_TJe~)jP5~|bS4cse zZefwDWeSbj%SMRPV=SJEi3VyQ<&7vP^;4v@mg(_`Xqm#6J{wKX2Xa+frl6W=nL=xx zi$ap8=f@y-y&Gaep`v06g?di3OaP<0$Pa$N5JdFu?3XzId?Xz)#Pf<68 zJbf`P75>r)^1dywhQ9i zb{kxNeLW^1DmtjJsBpNjs1T_qq5_;kp`v;UUJA_$Ns1cCZW8hoEmLSy^h=>l(Jwvh z3ZM#YDs-w*H-%A+M$>LIX-9=lg*HXe6vz}JH4;r9iYDPq;ZNaAQ89%)MbR`G6H*nz z6unb)P0=jXx~7jr({QPMnWB0cji;@65=GNtrD%$}DV!dF-^AR-+>s zQ86tPy=dxGi>{-kDoCl}Ns~%$^jBq;jxfMT-9(mu2w^#PjbRZgu8u{mx&1;Gi`sexEUE$rF3TeD{#w8P=iRiPPS2KNa;7RvP$~Y@ zAjFh^5p|01|9QzT*o}J0FHDX~2oj?bl_s&oB(C)Rf78FDPc?}5WOAl7Kpu-g+Z1CF zCVBslm-OOES=7ni|JR2!>e%~>)2MdYR^D-!YINX|T`_@09ez5)BD%<#zE4<8txH+L z3-j=2;1iMrYmsbhlKN-hT}f(@%@UFs7Lw%OhDAnI{U-U(F8g=ch@wRr&u> zWu(dv^OQn0mMP_j!l9~se*KpdOvu*nO}+eaIZ^80`s3XChuKT{g7t*;9~-ZKC~_+0 zH-+aa|0*iXl>{qPd z`3WrQu-UIz!SfSX)C>!#Siv_o=d+3#7ErN*6%$z0vOf&(Z$;!xGx<|*BWF5lT2l47 zToyIcPgHMv(;UgzA$`wWN7dUh*CQtTGJPqou6qF%HFJdOZEu>q3iP&D&A!X_HZ5oR zYEGZqX1rBz%k*kRKA$r6DbU**%sxdvXKJT^{j z)a{fY?{1U0$0RnI#3qxFORe~sMziH@kN@&%)NvMdDsrZ~)i(+!cS-%AYcUoTaW093 zEUUr3^dO7LSk&{vqBa#}QO8bB=51MTlN@Tpv>d86Er;4XEr&WShdNT(vAA(Z$Ibqt z{`SG4{+^T)ge?NO-r4wOLCCdc%L2Qj*1ui*whs(-52o%)4Ym&qZXfFDY45L={M1g_ zrhw{>n#RtK75*Gk+zxgORO(&VHa^g?%AYgT(>W-|SMP1<>`}W0M}}HEey`&_{+yMb zx1z3o<;uDh^~;UuX`URaw{m%P-3kS-UKUY}YD6_fCy!dRoZ5qX&e2D>UR*L@MB~}5mobws;N1Hs5brgOj4byWj8c1 z=Tu&?UL~UXDq{m&kWlV)BBFZgo8+I_KM_&2ri7@Dy>b~ud+fcmLmr~4K2vL7d&`I_ z0`eiEx+#=HRUc736>L+e1Yn<6)T;DT{VKF6MUv;SDa)a%*RcBiZPT6j=FVb!ubIX6 z>x>-gr4&tX5Y@4Xa;V)d1HUnBF?JhPg3Z7xv85Q}p;ZiqRxubV>PUfwIams-!0-?7 z5AYB05AYB05AYB07ZsrZe;G^-@UOD52zE1e3l_x~zMqCuX@fo3CX9jbs!og{a8Wm^ zx)0lnG4va(!Pa3dSR2Ned%%Eu(2n6R&_IBHfPa90fPa90fPa9$zz>sfILJM5L@E5coz(2r0z(2r0z(2r0z(2r0z(2r0z(2tM|8MWyVxzdu z0K7AMGiGrNjR8@DEVq4#G<9vrVjQWGt%N`@q@Zf6zAcMch>fw4FDXH4VhkY$CMr#q zLQn)&+N5bZm3WR+$!%`*lGZ%rB@eAjlBP{>X{A25-~XREvuk_TF=={>K>9gn_RN{t zbLPnYz5C5K0sXxn5ib+JA>JllC0-}qCEg=`Li~*QJ@E(P4dR!?pNPM34Eldk5LFMj z^cI}T9BdH(K}z@;8=sRvx@0hfN#;M5R}{xKt) zC2kO}5U&yM5Wgj^5kDnI%#O$sybYa4MoL;8YM*;M7wviE|NExCR7V4Wa|hDeWOPEpSzU z1w2|1s{jjUU{#$gb}=IxLzD`xicxIb$;Dm8RhKKS3bY|EO{`=7XDHB)VO9l5J*#q5 z=v813%&L#O)t#yktSxj~6U(YstSY)Hin29MCc%Da%0jKG!B;=aYgZzzDneC@uI8|l zL9bS#t8lB(tH)h6tAek(^u*tp z7e^QJZcl@0+f4Z3I)Ld3wRFsXZ`dtAh)`=~X5#m2>b zDq~({46Lh#An_TnB!B{qK#~}5>UpDB1yD`X0+Wh!^>fsobd^{=9p?$Tz$;3uB1pZ5 zrcW7ND*n`7wg6C3s9rFv>Qf4;N@gkc)KI*diDwa|HM+{60y5r5>+P;EsDh#%;P>S+ zswF{DGs~%+GX(1uM+sIxuD~BSY6ERN+}@LZt^j}DR;u8oV5!@vt#=L3=&EuPptPG8 zuNZMEuxWuUKv>?h@v*|r#?{BVHm*L_3vuPgzrq@JPxQ2h>Ld!FhgE@Q%9A^qa& zV{J+((R#@ct!Pp+v;nBflme(SrSg{pkZRMKgnvIZ@XQ_x0M$MUWT1yA@RM$*K$E(I z;;bvqRe2x*kgE7mHu2+r-KyLl&OJ??_#0}sPr*vNLL@H04jZs0^sz!6exJ*I!wluk_B7kI(Tv&>Js8g zl`&+La}{irF$6LO{G{JZW_0X^b6uIrFm}oC0X@Z)`YN?2lbP2kKvUnPm`r5eqX?C$ z$YdX2%P3O=89=>Yn*JoUhJ^5=SwPhnDA1|CNCBEE*9dI&HVV+x&vU*nP`#XJdOGR9 zLJghjYZOf>{~d~ThO0fFQkM0S(XirC{T}_kPy2>s6AIwY07QwCJsUV=wBn1Hl zPhBHQQ~*~&QjwvqR~agh>iKl;Tw1)RtAH@$;zq?wiWn6`Dq>Xd)K%z3Q-YWxNd+-Q zJGu^Gs!CGtNarr6ngBk*Q}LmKr=mo?BudoW2KAv{Mjfh1Dv0cvMD}zdmjNYB2t*2u z3S0_?T8G9J95mU49u<5PkaaD+l7go$OXi*d2L-QHsVd+os#GA-+thoC=oG~C2}Mj% zrJ^`pkpe3fkEsu03T_J23U*81WNtDo{!~CyU{s?-1xa0z&eh{R<(+V@v|y$1sGz6c z0N0G;Nd*tg0-Yj51x7s;2SybiD(GJ#E*R>`co{6`UoQlp6v?(4!Q~ z1x^hyQ?d^*Q}|TwdLi*3nJ`HQWGZ|rSn6swr+32uqzaAtEzzldmAh6XTe#rjA;e4&Cu-TlP{ukk{ae`Ou&QV`U}rLza&xtvIc z)$-90)DQmp(tHH9;`4ps2IqZ{$j8(-qr+nNr6Z_&#A*?KgxN@S$q4HI$mjcezQUXC zl1p=Q2r83Q3qjyJfO!Z4JNL*b;QRkiC;@ms~JoWElH zmGc`KR>to%%VL)Wro7(`^_@1#S0wTp-wjQbO{GfxOR{B9Ny0`rd@UqrT(JxDD@Yyd`kUA=TQS?^q#BuPG{|SDj3rb?0FV5P%^dU zf6lDcf!07wqxKqz>6GoS2;ja2i0KjAUIQ_`YTIidrsKA~24dP}+iM`E(G%Gjvqem! zWui-NvBefma+Sr_Y%f4cj(o&Uy)L#EMNFg1p-V2>Ll;}rri(3FG|S~!J?mnN&ZCPh8c&tQW)Rb8Hgw5FBhbYbEn~jYoT^w~yY2O< zftW_?qXuFcUH=-0X>|Q-A*S~HH4xM2{525M8QWji*FwZJ8Xsexbqr#?(1OF>L4bf*R~k|8Y6 zo$k3)e>c;#RK)c9OXSV}i1DLQ{^F8@+JAeVsMTWjaBe&+i0biLdwom@YV$1w^%jCU zbPGW}d<#MSe@9R^cWi8JH=yY}1hr#RXKQDKpuWXlQ+FOOeVy^9`uPYo*8eO1gJxZ^ zsbllT&W`r>)-4@(WtCX%zd;jw`YU_K@<)op`H{ZE`}2k2;ljhEo;tr?H+zT121iRh z)BbYZl-+vANTzAZe?HT{}!-b>yk%6Jnk^D&SaACCfLEW+0UnLD+D?C&jiB3}L zY4lf@&t@8mg9rNti*o3Of&Cn$?^rS4H<&-Puhi4!rw7Ll=a2UGmUMOL&f2dzM;X=j;lX#Vq-A4l@s9CckjCQ?l0fFtNZS@(!zfqY7ZOXQ`Ww(R}Dz^R;zyx)* literal 0 HcmV?d00001 diff --git a/extra/sqtt/examples/gfx1200/profile_sync_run_0.pkl b/extra/sqtt/examples/gfx1200/profile_sync_run_0.pkl new file mode 100644 index 0000000000000000000000000000000000000000..98c36ea5ec134a2b4f079aca57e19eff3de08b80 GIT binary patch literal 74895 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 L>Gr~*eCz)YmJCT8 literal 0 HcmV?d00001 diff --git a/test/amd/helpers.py b/test/amd/helpers.py index 05c983539c..367268924e 100644 --- a/test/amd/helpers.py +++ b/test/amd/helpers.py @@ -6,7 +6,7 @@ from tinygrad.runtime.support.elf import elf_loader ARCH_TO_TARGET:dict[str, list[str]] = { "rdna3":["gfx1100"], - "rdna4":["gfx1200"], + "rdna4":["gfx1200", "gfx1201"], "cdna":["gfx950", "gfx942"], } diff --git a/test/amd/test_custom_kernel.py b/test/amd/test_custom_kernel.py index 1e32979d59..21f1042c20 100644 --- a/test/amd/test_custom_kernel.py +++ b/test/amd/test_custom_kernel.py @@ -1,10 +1,12 @@ import unittest +import functools from tinygrad import Tensor, Device, dtypes from tinygrad.uop.ops import UOp, Ops, KernelInfo from tinygrad.renderer import Estimates - from tinygrad.runtime.autogen.amd.rdna3.ins import * +from tinygrad.runtime.autogen.amd.rdna4.ins import s_barrier_wait, s_barrier_signal from tinygrad.renderer.amd.dsl import s, v +from test.amd.helpers import TARGET_TO_ARCH def custom_add_one(A:UOp) -> UOp: A = A.flatten() @@ -43,9 +45,26 @@ def custom_add_var(A:UOp, B:UOp) -> UOp: sink = UOp.sink(A.base, B.base, var, threads, arg=KernelInfo(f"custom_add_var_{A.size}")) return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.DEVICE, arg="AMD"), UOp(Ops.LINEAR, src=tuple([UOp(Ops.INS, arg=x) for x in insts])))) +def custom_wave_sync(A:UOp, arch:str) -> UOp: + # 4 waves across 1024 WG — enough to saturate a SIMD with many concurrent WGs + # s_sleep yields the SIMD so waves from different WGs interleave, causing barrier packet reordering + threads = UOp.special(128, "lidx0") + wg = UOp.special(1024, "gidx0") + insts = [] + for _ in range(4): + insts.append(s_sleep(4)) + insts += [s_barrier()] if arch == "rdna3" else [s_barrier_signal(), s_barrier_wait()] + insts += [s_nop(0)]*4 + insts.append(s_endpgm()) + sink = UOp.sink(A.base, threads, wg, arg=KernelInfo("custom_wave_sync")) + return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.DEVICE, arg="AMD"), UOp(Ops.LINEAR, src=tuple([UOp(Ops.INS, arg=x) for x in insts])))) + @unittest.skipUnless(Device.DEFAULT == "AMD", "requires AMD device") class TestCustomKernel(unittest.TestCase): + def setUp(self): self.arch = TARGET_TO_ARCH[Device["AMD"].arch] + def test_simple(self): + if self.arch != "rdna3": self.skipTest("only rdna3") a = Tensor.full((16, 16), 1.).contiguous().realize() a = Tensor.custom_kernel(a, fxn=custom_add_one)[0] ei = a.schedule()[-1].lower() @@ -55,6 +74,7 @@ class TestCustomKernel(unittest.TestCase): self.assertTrue((a.numpy() == 2.).all()) def test_variable(self): + if self.arch != "rdna3": self.skipTest("only rdna3") b = Tensor.full((16, 16), 1, dtype=dtypes.uint32).contiguous().realize() a = Tensor.zeros_like(b).contiguous().realize() a = Tensor.custom_kernel(a, b, fxn=custom_add_var)[0] @@ -63,5 +83,9 @@ class TestCustomKernel(unittest.TestCase): ei.run({"var":i}) self.assertTrue((a.numpy() == 1+i).all()) + def test_wave_sync(self): + if self.arch not in {"rdna3", "rdna4"}: self.skipTest("only rdna3 or rdna4") + Tensor.empty(1).custom_kernel(fxn=functools.partial(custom_wave_sync, arch=self.arch))[0].realize() + if __name__ == "__main__": unittest.main() diff --git a/test/amd/test_sqttmap.py b/test/amd/test_sqttmap.py index f5bf398ccb..eec71b8329 100644 --- a/test/amd/test_sqttmap.py +++ b/test/amd/test_sqttmap.py @@ -64,6 +64,8 @@ class TestSQTTMapBase(unittest.TestCase): def test_rocprof_inst_traces_match(self): for name, (events, kern_events, target) in self.examples.items(): + if "sync" in name and self.target.startswith("gfx12"): + self.skipTest("our timestamps are off by a few cycles because rocprof patches timestamps for rdna4 barriers") for event in events: if not event.itrace: continue if event.kern not in kern_events: continue @@ -81,7 +83,6 @@ class TestSQTTMapBase(unittest.TestCase): mean = sum(frequency) / len(frequency) variance = sum((v - mean) ** 2 for v in frequency) / len(frequency) self.assertGreater(mean, 0) - self.assertGreater(variance, 0) if DEBUG >= 2: print(f"{name:20s} SE:{event.se} {mean/1e9:.2f} GHz mean, {variance/1e18:.2f} GHz^2 variance") events = [e for e in timeline if type(e).__name__ == "ProfileRangeEvent"] insts, execs = 0, 0 @@ -90,10 +91,21 @@ class TestSQTTMapBase(unittest.TestCase): if "ALT" not in e.name.display_name: execs += 1 elif "WAVE" in e.device: # sopk/immediates don't get ALU/MEM EXEC - if e.name.display_name not in {"IMMEDIATE", "IMMEDIATE_MASK", "JUMP", "JUMP_NO", "MESSAGE"}: insts += 1 + if e.name.display_name not in {"IMMEDIATE", "IMMEDIATE_MASK", "JUMP", "JUMP_NO", "MESSAGE", "BARRIER", "BARRIER_SIGNAL"}: insts += 1 else: raise Exception(f"timeline row must be INST or EXEC, got {e.device}") self.assertEqual(execs, insts) + def test_wave_sync(self): + for name, (events, kern_events, target) in self.examples.items(): + for event in events: + wave_barriers = {} + for e in sqtt_timeline(event.blob, kern_events[event.kern].lib, target): + if type(e).__name__ == "ProfileRangeEvent" and e.name.display_name == "BARRIER": wave_barriers.setdefault(e.device, []).append(e) + if not wave_barriers: continue + for row, events in wave_barriers.items(): + for e in events: + assert e.en-e.st > 1, f"all barriers must have a duration greater than 1, got {e}" + class TestSQTTMapRDNA3(TestSQTTMapBase): target = "gfx1100" class TestSQTTMapRDNA4(TestSQTTMapBase): target = "gfx1200" diff --git a/tinygrad/renderer/amd/sqtt.py b/tinygrad/renderer/amd/sqtt.py index b89ea90fdb..43a1ce62ac 100644 --- a/tinygrad/renderer/amd/sqtt.py +++ b/tinygrad/renderer/amd/sqtt.py @@ -128,6 +128,7 @@ class InstOpRDNA4(Enum): LDS_WR_5 = 0x2e OTHER_LDS_1 = 0x50 OTHER_LDS_2 = 0x51 + BARRIER_SIGNAL = 0x7a WMMA_8 = 0x8c WMMA_16 = 0x8d VALU_DPFP = 0x92 diff --git a/tinygrad/viz/serve.py b/tinygrad/viz/serve.py index d051a17c8a..146cb919ae 100755 --- a/tinygrad/viz/serve.py +++ b/tinygrad/viz/serve.py @@ -342,13 +342,17 @@ def sqtt_timeline(data:bytes, lib:bytes, target:str) -> list[ProfileEvent]: from tinygrad.renderer.amd.sqtt import INST_RDNA4, InstOpRDNA4, TS_DELTA_OR_MARK, TS_DELTA_OR_MARK_RDNA4 ret:list[ProfileEvent] = [] row_ends:dict[str, Decimal] = {} + curr_barrier:dict[str, ProfileRangeEvent] = {} NS_PER_TICK = 10 # 100MHz prev_pair:tuple[int, int]|None = None # (shader, realtime) - def add(name:str, p:PacketType, width=1, op:str|None=None, wave:int|None=None, info:InstructionInfo|None=None) -> None: + def add(name:str, p:PacketType, op:str|None=None, wave:int|None=None, info:InstructionInfo|None=None) -> None: row = f"WAVE:{wave}" if (wave:=getattr(p, "wave", wave)) is not None else f"{p.__class__.__name__}:0 {name}" - ret.append(e:=ProfileRangeEvent(row, TracingKey(op or name, ret=f"PC:{info.pc}" if info else None), Decimal(p._time), Decimal(p._time+width))) + # barrier on this row extends to fill the time our wave was waiting + if (barrier:=curr_barrier.pop(row, None)) is not None: barrier.en = Decimal(p._time) + ret.append(e:=ProfileRangeEvent(row, TracingKey(op or name, ret=f"PC:{info.pc}" if info else None), Decimal(p._time), Decimal(p._time+1))) if (et:=row_ends.get(row)) is not None and e.st < et: raise RuntimeError(f"packet {p} overlaps another packet in {row}.") row_ends[row] = unwrap(e.en) + if name == "BARRIER": curr_barrier[row] = e for p, info in map_insts(data, lib, target): if len(ret) > getenv("MAX_SQTT_PKTS", 50_000): break if isinstance(p, (TS_DELTA_OR_MARK, TS_DELTA_OR_MARK_RDNA4)) and p.is_marker: @@ -361,7 +365,7 @@ def sqtt_timeline(data:bytes, lib:bytes, target:str) -> list[ProfileEvent]: prev_pair = pair if isinstance(p, (INST, INST_RDNA4)): name = p.op.name if isinstance(p.op, (InstOp, InstOpRDNA4)) else f"0x{p.op:02x}" - add(name, p, width=10 if "BARRIER" in name else 1, info=info) + add(name, p, info=info) if isinstance(p, (VALUINST, IMMEDIATE)): add(p.__class__.__name__, p, info=info) if isinstance(p, IMMEDIATE_MASK): add("IMMEDIATE", p, wave=unwrap(info).wave, info=info) if isinstance(p, (VMEMEXEC, ALUEXEC)):