From 3fa37c991e2fa72335e8ca6c7a9bcc7b6fb19066 Mon Sep 17 00:00:00 2001 From: Sajina PK Date: Wed, 18 Dec 2024 15:56:48 -0500 Subject: [PATCH] Enable VCN tracing in Perfetto output (#65) Enable VCN activity tracing on different instances from the GPU metrics fetched using rsmi_dev_gpu_metrics_info_get in the ROCm-SMI. library. The tracing can be controlled with ROCPROFSYS_ROCM_SMI_METRICS by setting the value as vcn_activity, Currently this configuration takes the following values: busy, temp, power, mem_usage, vcn_activity. By default, all the 5 values will be enabled. Signed-off-by: Sajina P Kandy Co-authored-by: Sajina Kandy --- docs/conceptual/rocprof-sys-feature-set.rst | 1 + docs/data/rocprof-sys-gpu-metrics.png | Bin 0 -> 98355 bytes docs/how-to/configuring-runtime-options.rst | 1 + .../understanding-rocprof-sys-output.rst | 8 ++++ source/lib/core/categories.hpp | 2 + source/lib/core/components/fwd.hpp | 13 +++++++ source/lib/core/config.cpp | 13 ++++--- .../rocprofiler-systems/categories.h | 1 + source/lib/rocprof-sys/library/rocm_smi.cpp | 35 +++++++++++++++++- source/lib/rocprof-sys/library/rocm_smi.hpp | 26 ++++++++----- source/lib/rocprof-sys/library/sampling.cpp | 7 ++++ 11 files changed, 90 insertions(+), 17 deletions(-) create mode 100644 docs/data/rocprof-sys-gpu-metrics.png diff --git a/docs/conceptual/rocprof-sys-feature-set.rst b/docs/conceptual/rocprof-sys-feature-set.rst index 5f6307774c..fed24b55b3 100644 --- a/docs/conceptual/rocprof-sys-feature-set.rst +++ b/docs/conceptual/rocprof-sys-feature-set.rst @@ -58,6 +58,7 @@ GPU metrics * Power usage * Temperature * Utilization + * VCN activity CPU metrics ======================================== diff --git a/docs/data/rocprof-sys-gpu-metrics.png b/docs/data/rocprof-sys-gpu-metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..366d35858cb32da8eaca8871c52b631c67985f4d GIT binary patch literal 98355 zcmeFZcT|&Gw>KI^u^^zLB3(s5M2Penihy)bY0^bHA@rKi6a^Ip1Oy>efzSyxNEcCQ zLVy5)gl3_H5Rew6-zVyR&)#>u=Z^1u=iG6>KW@f=Cs|KhYp%KG{LQwW-qP1#JkEX` z1OhQ?X{y};fsP#jf#|}H(gQ8_ub*E44hMYhXxspm^>UJcABUV&^i)8gidcpn+rz-` zW1gC3J|NIJKHA>_tvi>0fI$0sT52jrfz}J-M}mijcK4SJsF&C%y84KGbh!lNnDz*FCybq=-DoBPGUPZ zBA+9*PA@h!W`v~8Y(plu$0vO}K8N_kv@d^aFQ)Yb)F+~-sQ7huR)CwE+k_ElAmr57 zn|F0}<-U3Iz6cl=2vq$zf1QQ)rH|=QIB<}Q+|$o%vG{e45Owk-&;&}OKd1~GxS}RY zfdeRO_vnFN=V?D^ACZ{f*Zuwl0!@AWFJI96?dS5hp0coPC;RL&c=GHoyMu*{Ipzpo}@ul%-O@C39_wmG_Hnwh1hR{f4}+jC!R{j8=GN=7}0B3m&56&GxR(T}g?95^ORT z$~qDK#{NXY%a)eR6Hh1}Lumu4v&AJPy75%5xUXMN6SoZ?wNbMCs$b0S9<73~SZZWB zJPN0E_pLDEXa~wRJbx&4H1e zGdU`8^38#8k0f-WdUQ(?Iw_QwLn;g`psiDCnkM_o*f<_(bK&se!zMkWg@gWJ;5m73 z-b~M`*yNyx{8GKArff&6q|H`fXrXIYrLZ8m40=azpVibRRx5SlEnC}{lBPB~SW^dw zJh$;?!1S8}_|dyE1wZdER$2K0i#0%H1eEEfC@hyOd3BAyN_wSb7W7yWe-{{F z>+(0$+C1AuagpX*k<488g-PcRA8vQRCBg2vA^dZ4wzT*6c0Vr%xA-;W<~iL(pB@dE z$_hdkVRq3TnVO`2-myb2Qn1mhL7SVy#jY7%jD$3W(R!)hqn(QRy>gTV2EZu8J9l!6 zinO;jmcYAP>s3jE`RnzTHu-3e#qLd9UK=dW!Tz;!$0M&ChaXuF#QfJZ0iH6^ex~#J z)=j6XqIuUsnL^u#y-P0(iwDyT^4QqBxRvQr4b9CR5lTf#eQ}FlzkIPB@=qIFJF#jl zA#+jXCKHcq@cLs8+O)<*wPLHR@juFMv82iQ{(K@k z1JUYq+?TtSxY)8twW!bV<5IGAet3R&TOB#^bPY~g{YD!7Ik`F~>w*^E-TwH*CW1S3 ztubJcz^ksV&OhQSA%M4>bsvBD*?T-TBRW!eZR_x1`e8)``@l#IBDRj{@Z-lbZ`*FD zer|Fus6)8o2_fm_=^Gi}Lon1^K9eEAA@-Ad5vaLxg9i@|d|g`d7_L&XgQwTv&o?n2 z#_T>K#E46STc|;O*^6rPM+ z@Guz^_&T?_1~8oP0x?3?Kj!qXqJ{`|>x{H56uQL`48=rgQmb-=`m zp^)bJvV7mBT@194V%%L}SGT^nP2xrlI4Nh6A1r&-V8izYp_bMrA}^Z|#28sTr%uaj z=cmsX9ISKJxJl)5;(qqnQE}XQ z^;)W963fAZw6nOrJGV4iPAUcd$lAOUF!k=ii)PI-9XfUbLtLa_wNuuNH9~HU?7+A^ z=c&xzaqMWpXe{+Ki_!&*6ezb_QXfJsp)B#gNN7$j#Y6%!zt$Tn+sJ+?X1AojxWo>l( zMWT=KZR^{(?%V2*ANel1W6*e~?hT?_yV=B%5Jf6k!;3nZXBpGyg1D7J#~$5~u*}^?V;~H2&yDo;%hu-4UTjuWoT=-( zg>2Tx_B=9i!`^c=NeYUo)?jN2)qu6XAwHk$Z{tK;@2_)6BeUWnrF}Ien|Krzn`a0k znXHg=mXUJYM0G%e! z3PIkt>7^^;MEh@_W+h@Dc}bklf!V}XEsE!(aelGHr1gbU?gV?Jsxl>b!bk_NTwBwI zu~fC$YA)mB6(=gFwqg)v?fD0?^pLf~%}1P-Z_ydBe;#l;B11g&izlZrzXgBzs;l6k z-0VZ!KdeKx)?6?GSvxzyvfkgH9Mk>qF@2sZCx?{0Cnu2@d1w;oAFj{r`g^5C-kZXPB2dE$}U+xB~Kc3b=BbG6j;RiGaLc^ zu6Lea;hJu5rrc<73fg9VNpHe~D(m3g183L0e&8?<4=yJ%Qo5+9gpezD-WlgqVM z4CA%*bnx}(D#wv?@MaM#Y;0zzd@e?&xtbyldT+G|4)(6fOx)vH z1JT(+EQ&rr!d}wr{av=S>$l*KqO=_SF~^G5D!39N*>vM(zH70$$h&h%_1*>*J!D8NM+m*w1@lUZyA56|a_+;^JOfYf!W_usJhq-LDQ{5TU(4EBH^mva`tV z@K=)1_3nLJaeA~NzixQzGXY&g?R%pVd#Ww+^_M)jy4vfhXhi{bBO#&UAnUahq=eT) zHYxM~RhPTFQ*z_RM(KtG5o1N^aeV()^fXl716a9Q0H?~uC-J9X5K{I(F0eto->xl= z;vW5|j=DH*pvtv=O*$8=ePaj20&;ztfm}31SCxsof4;KH>G!>YL|x06Q}l+x)QM(o zQ#lyXrdU6Oab>ZKk2-%`UN?dLU=i`#U5kv`VM{tjCDLjh#8waD5&xn6V`|puZK6+6 zdr^Bn#2_yhmAc*@%Oxx-+RrbOm(9x}Q_02PDaCu}5Fj<*!Th|B7I^V|{Uu88YjRwyOG;d6QzyT=FdY;M0YnZqEDx@VE8A8jXvT^bh)ohyC1fgiDt$ zjRgy$vrpyOtU!OF+?f^O!Bon;uLp(l%|4H`e6z+Eg3Q?-n0j~E5G&q#e7tuNf|zc2 z1=S6I1Cfx(24tz@winr;NfFND`}4XyM87FR&xMqMaj+rqz6vS0#`RFUHvhmmM7kow zmaa>AuYRT-0xh=%r@%h8w>L;#N5QnwwNy1@7YLF-PlJ+b>lC{gzoS$YxOl5YB^%b4cCxf1JuSxl@8d_YE2Oy&JBDK<_k*@@ zJ;@I>G$8H&@hT2?$JCX)I-Cm4Qn?<29@qdQ5PeYFOcR2|D|h_f!kieRjw`b|doWGk zfj~|bKV+8S!I^?`!~!=x-E%Vcr#Mb`LCo;7zdN z*RLyUYcJTW@JKfy4+R7$q$Lbw#aQRe7tNbkVTT9qwT_7L>W!#HNCpKR9*)QKPrZ!1 ze}g?OVuGO*&7nI09Uk+8{+gT^iG{o(NjHsagd82iwY|Bf(fW}5W38okYfSV<7CkKH zJiQ3Gmzg%WCd?XX+~Q!wK^W{?R*8Al#M;%IR^$c1Z8eu_Ml7B&X+${q& zwMU!YfjE?2r61X3^>Fz>rW_go@lh|1Q{HDlBpzi!vH>fj|3rE&bq6q!z{Pm?>l-bC>6_Ow%X(#` zxEyt&IB^$;s)ZMn0z1~O4W)+29>3#<8HSLBTW(IO`pGD7Z$F?OM?vmNN=sb$MG_f? zw2p)#R#eIx9PE#|E|)^RDjKw6PZ}ytCT(7nl{IVr`IRAPe|MwDARV8_Xv)*$*P8FkO7|6{pU-HMjQ6&TtX4d5w!ruW}#jny*Z1+9k zO;dw2vj~8Kx_YHlMf5UcROtCW)Vexf+Ksotnj+dsSM*?2?%2!u#ZGE(>-a}CVpA#9 zqaLz9?3cdeOX90!;nrkncPWU-^z^iju5Y5HZ>tfTg7dwmi;;x)+!=lMw5=$0j>6-( zm@!igS20Y85H zxYEg^vW+{d{;QcgIz~>4%inV-)sO$Av8h_DC+Xao%V$l{W^#aRKrddm^B2%hyKc+2 zU2bKSSA$o!v0IYtI2D3juLzOSm2T+oAi+O5A$fm>yaYQdv2mON@ zakAOnyY`{;%@#foq@lHmJKW{jJc}T!9`X`zB(r2|JTChH1LH;K*cl@J!fC*KbFU6+ReeuSrs zHi*9di(A#cdBc_wSy{?H=;&t#=}5&Tzf2LXhy91rv<(iYtx3Wdjeh&Uq|cn>&)7g; zSI;Lt{OtzwJ;m6ywlrzu`1$okyrs_z%Ybpenf%@j60ZHxgX;FIUZ#UC9*}x47rhIa znvT-Q{9NKT+T?^bD}!v0gqb8JBTq)r+f=)atTmOG)wUkGvKH+Q1{-vCe2&l2@BvIc zI`64l&o(a+xz{`|D=2&}LB3287Sy=Yv&WL)3Ri!+Fy734-4~gCah#9n&q-)|Mt{qH zB*p@f@wC#)g7T%HrcnX%5r=DAQ+$KZ`#is_T6=1ssX+|2&*3p@s`f|nxjB%fI$Vl!gDss%6tpB{~3dL(}Q;||xv!Uhs%of^9 zE%Y<-Fp4VHVk4g-fBl`!PH;%6Y5KrRthbeHdrZpp0e#}S2W`19_N#4BpoF#!V!&&E z6!tTft3mgzfWo!G6E&>o*zdzXc6Ni~USKfsuR@HN2orV^ca4K82TrII5Q}sWhB^}g zS=Rjs+--9o#s$hn2yZthTG2*6U`cf8ls}>BwW9o1GgK)oM9I3swe(o~@9Etzty%Uf z48C;ZD$mjcW@XIzkbW$kByRp3QgnFKO{&u?>G6N=Yk_F$AN$R}cHnZfg-`eIV!()8M`~8lu z8sY$(WbkX!ftz#}>%%Cd2o zpl42S$c>~WFrCWBFL-vH5=XDY`cn~v+uQS3BIrNq+^W4G>nrndjDfd{SX+qUD?2Z zH_J^qTOrEO%l30brJIq=9QP*z)^;^A*%-;rbM1S&bL;(hU{-lI4tyl#z`MA}%K4;;hs!BFxt$Rz@ zqE^TDc7<-LO!GwYmY=Hfcmpo_NMDM?$y|uO3tH*hr{}q|obMR_GFuleW_?X#Vg?EB z1)ZYNRz`5U?;Zrc7MHCWbs8iW;rlwn7&@$DLcI;hrK%xF9cV6)V9{G}s?DB|sC6iu zb`L0=y!>M>5fpdnm!$#H*NsqSwF$0J)6lSxlwr}<>HgfO)PFm~;oc6Yn3^~><$ju* zn_p3J!h|urH@9t0)c4%4$9T#DBMsU!kmm#Co@e?6$MjX5n2rFE8&9eGGS_JrIrHpw zp80k4pMU=w!HWMR-0{w(psWmo0-ozx|8x9T)PfNECxQ}LSt-_B0-*6Z(3bqGJ@;Qz zy$^gmnf_N#&Av=Zx_R`dr>#fRdeWG8xA6bqqi^56 zt4VwG{zlloK){$+l;kYja`)%i|4x5@k8(38O(7`$}I#&bOl<`*_B@mzB}@!kLx>Q1~`L?<)X_&j18J z4h-kNcG^av2v(we62!XJC4}y13|cLb1(iLgo_NbjkeIS|#)TuY_2?EKOELbvL0-v# zEbtf8{5rC#|6b~UHF|nI3jgc-uOq9*zqvr##LP?(@Jr9+rvuT#XVKAlB_*Fzi@y}~ zE&?Gg)Zow<`9L)@h0PP}RHRo7xQC#}l{IMnnbxf#%~&&M?b13Z%K|eGn;oW@8X4V{ z1j!wTu>;q?(IdK88E(rE10fD}G%flo@x1V9fQ zLqQ0H1@uYqHl?-_vEigR0PyvY+={_(ITeFP;F94u+VE(1QMsEWBpw+8HmLhmY3W)it-}4UbKg4? zn8*^sb@rX7S5ZY)K&T}s#X*izpl_I(8NBjT%f}UtYj1DAX4oFfcRMcch$OTv6>}Rn~f8cQi+X+3?5><#6JFbVDTPkY1Whf3Bd#_7*K#IbT%#nZv&= z%x__C9i-3mi@Vy%2*%=Fmf^9~MfG^U&K{q;T+@IKPdFHt<&=H{tu zWIVR$uxI@r64e7X%i6)*{k!_AKMPu4fh@;pi>PpGXJ@CR(2#Rzl+<#`{pZYFL9aep z^08SmKR77jFo8B|Rwq{+(1Abvu+E%}l!A%bJ^S%@0AA)|#46HX|YiDp+bPBsBc| zA3S(4^TIG0dfa@{o(t#>(qCCQJcxJ5HbMbF^i(9keAFBWZB13XFj5c9asHx1p;YO3 z_L0MfJIig`N=y&V9sSk%RI0S?HEoSBA^1U_@V{1H6o^A1uzdaaNYL-a#=FH|FrG;v z)O7ENi93EiFOG3(s|Oa*>rFsar`m){c}!dbcuvfJ;qL0E(Q^HEW6L`4JQ7@QG8~V# z0SgKWirIIZeERH}>l*x%;o*Nx(#FClZb4o^Ktn%G=Ax*ms3Z4(OgyF6l8&yv7f?^r z9WQxLb8tZSejJ-x>-)nmOlN(k-W|YY)C4>LqyW-d4V0!xlW@Ii$l;c!>+?h1XSlwC zMMU)9zkgrCD~AXg*~|H`ob~Y^Ld^1D+k@X&{ZF$<46sI7*8$Oa*D!y~2MZYZc`7;NWj(PU2^^Z6e(*w%_vVUcELSZ<0uZh4(4ub(iW&BLekC0D z%PLWzcYbFxuT`Mr^y31u0Bq%{j^=^mQ|D!B+pRtHT2tP>pZul3oxX6)JL&nQ@un04 zFWg*v5!-_eTAfMBjOqI?EA-zkq<;K3g{~E_znH$P~eWxA6qkns^|JC;YU+|k0|7X%+Ra0BL2!lHCHp`=B*F>a# z?h=&gUsDI&gLT504I-eq~xB_!3xTW`-ck6bzIgKBY(#fByy@(cltg zjG(}I*UT)1mRs~6pR@>5OUp6CBTSreiXmH1T3T9+jE%LlwV%0-l&io2b=Tb7JgftC z4!Ln_FbG1CUWt1G6Mf0!EQ-lChDICV+WLP4S-9mc-#_XNA5uEH#V6 zB<1AHgM))hBy&5bg=?Uo7cLDbK!dcI5vzyEOZY8$Un3)mt9p*7&E6+_W9K^ECtJ72cXXjsvqV@<8+dR{k!l3GjFakF3*L< zeV?9AQNCrkM(;LSsm^bZajnX+Cmw>Jc06Sf`2IB-oK)vCn=0lua-B3&-N zO%xLskkxg%m|mvA-pNVF)wRgdr$-X?f(*W{J(&nhoAdm-o~X1mzM2(*@U7mNYK=e% zj|Z>zoCac4go?^qs75!^6%QiB{6aP3D8H0FFV*~59wqmOn;=5$FJLo{TKBjoAF!CH z18y4JSuDi?2-pzgLR8`inr}Hdcql2fHDBU` zPwQdUC$+V;DW+RI{4`*7?QZ$IwbQw4-AYZKTVPfotqt(I86Ia~=n=~!c6W7&LFh?j ziKe`#;HEF^6Es}A-i4~ov%T0v8n5>g-_Oof;enVi(vQZPa>@ID-pQ_7Y$VqC}pFGbhY;I3T&zasrm6Du7Y@R%SE&*$B zZ}6{f%-c8$D%C*Hz@j^@zHHAO0zd&=#(^~MUy9ckIUKeoNJx1nUlT8aJcCSfgEG4 z)({>J^5HcauTC1c*akqGTvN3543H@nQgiw8WriP0?l({+R_`%<8X38ZD_f6E zmGhVs38(%Z6NZ%3Tzs(4|Mw)fymX0@syARfo8F_~r^&2mOM2}7jENCt%e@%XIRFZWupb(*-HklK<~_XMOQ{Q3vQCkLrT*O9G&3&E zhb)d58h3??uIt@taGA%WGgCZXpfC>kt8$4WgN25ASVeOq00+zZQwlrW-#GxAK9!VoxiwoA$T*A-H+}w3Y${ngFj4vBm@RetjHJ`ZCK;H+ib^?$#Ns93g zl~BZLcPJ3KqOD*6^ojZX$4c?D(wH>V(V&5YiHS+ds_5*QGq1B(s;yj2T?k3O z=EOGur*mf$Z)wDGmr`!@Oq6j6d;DYW!()D%f7K*L4yo7E5l5J%R{vu>$gQ&D%GA+{+)-l4`w-4!ezjaSnHAe{kuKRCzfd=Z=Yb(uJk-M zR+?4u$`wsu)i~E*8;VBT?0o$AF-7{rDQWWFlG#aySh)J~A>X#-CK1g5)$Zi>61 zN44VRM%y+k*hJ%K>S;Em&_+pPRbnYWCqR5?=*tutuQx$CL(6)=DudmLBXCDC^SBdo zFko0fy>%NP4boq~cHVQ&UOF(F<`d&$O7$;Y;$loD%f%2R!)N~J3pQf)q6R7M9bgO0 z1i*I3*_69~DT7Z^rD4~sfQXz64v>>)c9H4s#64*#kRHv-`v}|>nm;|)a1|u{*Kc=? zDq(X8yEiGUyNYDD@3&z~g#5#)1p^sD?2)iF9hGr4jh&Yjc`(wRMXCvaLRho}xBM^2d&l0?2So_FSe)%s1^8yiwa%L=E3o1Xep5r;f6 zzb&p>m*3Xzznm?yI9TdZ(Qh82iOrMCsj@yZzkC9^)%DHWi}L+j%^};`e**?Ms|5cx z`~2=|A|Ka5UGuACxh)21!~Bi6#d%`d_7%VZy^(~1b~>%3<$#22HncV zFl5L_gJw=201|^XZv=<8Ppiptoen?Eg=ObztNDZ1w7o zh4F@3Ni$VCS@y=K(b3|o@UQIj180mpJwK47HHP+kq?2>?*&74r{l4E&lxOFG&Vy1?Y$=mj)yMO2LD z=H|YZHiz7nXIz{+CS-+T)gV3YkIoh>S|{U?E=|r?B_sxSjNlc12mynPL`mrI>x<2i zfM5_l>(jb^Fl?n$V1-KbKn@zaxD*xwYHK27!wP4duxQbClbZ3csJOUC>VV8}6Cwbr ztt;(f&RH{yBD{4i>XCH&R`g}h*TTP4_S`rVjMG_{80oL^bJQublf$FYR#D?D;Ks2E zzDc(j0kGLFjm?;8!)Tk8m{RGli|Q7x z9lH=gdVoBC5f=J^ATArdNl%K) z)uHPba@!v0rHH8m{<-gS{W&OoIu(DpP&+`U28m|^aur~YPj2{Tz3~kH_FO?B$|tQ_ zAbymN7agyjtKWh%o_100C@Zz)n{s<&$4hXLAEXYHL!by~*$e5R8Fq}dL4Ss714*)f(a1(0Y@PDtN6cJkTlK(oFPBc{F&B!FYxok zpbZEUhGHTfMtY2itwXJvqajB~M;_2e04v$G{ZR>#!V+#MA(KzhCZ=OFU`pnA+8|&> zFSa)~W!-)=?`VS|lmcW;Kdko366GTM_PG8;L5E93n~tn6juTJtp;)hrir$uT8@VSkEIXTK=l;A5?N?Y>=)G7ss}1zf}c)=O`8{Q2X{`f00oqxP#aJ;R9| zK=ny!Av>Y0S{e?8S@Ool<3-HL@Bo%Vf#1Os3U*bHufJ8-h%) zKcS2REG=!Cv!WwJZ zZ*Uyp^jVYD0wk8{ABjb91m<|#`8Nxw5KjP7jOX{;C7qEpjGaRhXX8PfHneJ_|M-YR z{I@HJ{=aZ=DHs4QPX`Bw;gZ)brN47<{)}mgT_J3Ld$L;`tH2AOLDXFJ@DL;YKirg_ z))};rm)m5sRp>TxGW8A4e0Fx$sVUb1u(&H-hl(7#KfT~McJ3cHrN0wbRJ7jv*{;+D z07cz?mr`hS$TqceVYCV|Y<+1|=&tRB2=s&LUjUoJVwm^6zj)QW+Kg$JS zfOfeS^rQ6%Qh4j14^D4;6b@h=FtgH5Igp0PURPH~Gf_zWIT}?CfU*03??*&_WN7GS zw@p|00Xp4&((s`N4yDd)WP*ScR>*9F!A}uw1Dh`^rDAnA%YQ zAi(_LP~egOpu}7H|Cx~6-yiyKV{-q^3%Kbtbj!{aCb=?;LxnJA4!fYKovU3sAKUSh zsefnN#krjQ#;ZVV{k!2(zCQdzY?=`aDe+3Om4~=*R#oJ6uAuh@NdLhYV(=ywLW7YH%?D&I9-2B)P;lie56=zdzYXLqVJV|oUL{Jl7FYPfmlJH_xo*1X|?3)3#h%B!y4 zO4NneWBU@PKwCJEFuvMJvG!Ex0*Z`I+TRWfdkG}bn@i@aX{^8Mu!fY@;qX-&Z$Ere zv+zmR*~r<3>LYr=xrp*KX_tp^z7Y50Yi+jk8<$(cl6|mjP~lT` zv%PhWDZ?%M!$RI4^Tc(VxZ7D;g8Qx^oLcu2fGmC+AbCf;du?_yb346peO~FaoWcIq z?N#`CM0Bt8dOg@`Bc=|Igf|o>U|-^`;nwGx_v;mYeB&{znbWMH{7!lJP0zQ&9$>WL z#|BhjP*7?nxAdf!&H9$!qy@OAtDuv_~{eY1*>xTN20j{Ry~+Ntrdc1^(UX^vOB!{wh)_Wjg?CRog{e3cg|! z)^KOBewSa?X~#Ke&9o&UMO-AFjWrz{7QB}U1bl@IcD|};b$2AT?5x_XBp?>!9xPX^ zd|%2)c=E(E=zHt-_hP=uE`iK2zOb-G7p<`>1M98H!`{;l;?vJ~dgEG}f3{RYH@JP= znJ2=MOUxT?TZgXek&pKG&mH@_INaFid9wlKFL8@CGPOwG4}5|*wGj#Kn#5uc!S(%4 z4X&NPCm!bc^3Y-W*PzaIyrtmuSph!z?E*9Zp=ogkWy`STDwxMGvq&OL-aloF=utQE zNROWHL>zZ^_MN+y*J!D--DOQ%-gQfhL_GtUk9>UbsY$l;8Yg(J226S-z&6i1hBdGx z=r+~QJrv|md}EvZEJ1*;G61}}7X8uDOo!O8Twk0UfVQSpTM7ybi+B5`^Gy07pL2-c z@LoOciWQK^ZTP(1FD$n437ThM??Gba;?r;=5-a^Q5{TPho=4}t*~!&S7whM2$c(LB z&?1;NG$GL~pD+_WV(`HqgphInZqBE%(KYE#Sro#i_DVCI_u>aHj9tC)9=S`0ue^5? z+Z>!^&(rf#$4OsWHT&$DbHf=qP+2XZuCA6so) zrf$y!Huy2b19cl6t*U}zp<`DBMMPf3Dp_34b8whRYmec+$iONriNE5tq-a*aa7?KLELW_v+QF_5&Z5D+5QpwPfS@5wO{!b|7o-4lQZ0468+iY~fbHukBQ33yKs3 zGpr|uIsYa@JcUeVW_v9>&H#13%WFTbf9&oqcC^+pH;)`sn04J;PWLH2ThtS~H9fc= z$;5V9u#hbt$d$~|U`l4l*OO|^?&~|5;@9c>^vT>s(f*L{jasv>x1z%Q(UyCFz}aH7 z_%JzX6UoHoR)2B8f!(|A>wpfB;m&x+$np~N?sx7K8QT&;0)w7|!>eoi?lqPnADO3@ zH9}p7>+H84uiy|%i6uGh_Dd7HVz92uEOM^yh@6`z656>#-?@2^D$jZ^A2$5n98`<+ z^KGaP8IKjg@6OBBFPO&e>GD74;GMi?!?#SgrPC7HKQqEY|EUwZ*q{^K7|agCb`y2@ z)8(zbW2d`;5;1S0FupqtT2?ZSrxk=tI`hd@baxtZ$n%So`b8(0}^u8~fwBpuCrBO0$SuQS7m^ zhw16HgM!p4mESPCF0Zxnk9=Z|`@E1NwqF~I6x$p-R)fy*wXE2+$&ow$7|5i#a^~M1 z-0zg^k4Eje%A9$f92vg2zxl1wg{)t<843M9(clg{vtKAE$sfbR3)Hz)h9LBql{&YX zHG}u}9O3UrZVw1wxkX*nJ7++Yv(AttGip6aMz>h;c{FWj?~t(jiM!j(&+?=4NoQxr zj(z)1Tr%lw;0bn3BAqk>GTh=BP`dFz4Bv2L`8{}=#ez-IxBU5esk=90&%45#gQ#He zYnW@S+K{nvkNZ;N({FjXZ{PYOGDG)Xk%Ba8rSFfN1hOgX6{MxH3pUB?6c$0A;I%q4 z>Vl1RB2Z%LZv-=*= zub`+XX}@v%W$@ngoz0(BU>N!=n}TO}E()b%?C{FoiR+csQ$!EB#)*48GUMB`A+r64 zxYil?yq-mc_X{)X-jPf#^`N>BYU`ri3lbO3OwBsQXdDh;5NkR>;xelWO}M&AQ-|?kjig@?Dh8bz|!2Vgr2~_g1IEDrdG`kh3|%-xlm!Nw5Lq&LB8- z@@|!XY2XYGIBv2xOdlwS=2xW`&~$dz^ZfAAR`rP1ZLOCj)-C;?J%|++aJ5HWACB4C z|NPM!pMVtNkn%XI*AW;9?>cH>rF<`(Q%gq@ZE8%w#pOq_vFmQ+wYfspmG)uUOB1I6 zxW^Ba;p%9c*Vja90vXL(!Y)|xmmzSi;r`Sw^{z(IP7K88xgpgqgN$lx@XB6$W;Z%) z|M{^Q=S%ZHUK+M1C#ASh(W=i~T=~h)m_jUA#{Gu;R#<)0Nn$g1@RWO1=F{2d;@iV^ zeLlrSEFB$+a9xF_MthHy(4d7*B~3H+x-t1Bsk*O~I-hGqJ2@?u%ekVo&W)~-I9wt( zE4SNq(49&)p{0(WFqE$>0-wJ>XcP3VtgQ5hH0W7ibT;A^#Wqk-J+O*gVlq`Gcf0?d z{$z90WdX2(|AKyE{J?1-%~+fq(h`#Y;p2KT8J#YiAn+o&8;rD-zZq7gyW}*!I~U|S z+6c?HpXIDc$Lf-RY~6tUxpPl>PD0BPteI_;ls2(PGP|H2jl8Rw+YOvmlmNnJLTPDM zjuF|1R`~VTXDl^8*(oPJG3_$o{yk|B>&o1TRT5F!|Cq2+6_t4%N4=-rCKfz$QZ{f- zlhR1NWoR9GCz6r-^0Jo~YJI9&xSvOUB7?T&s1+RwZhq5e&)xwX?UWJw zr&^trcC*~e)OFESs^3}-u+;*s!e52Zt()%PXhoDl5;OG4p%k*S7Pce4a>cvK%Bpse z>bt)O6d?Yrgm=$B&oQy|e&fHTMmh%Qm>f>|BvVAFU#(MS*t{t-(zf%>_RVM1Ibb&f z3RIMAw(a_sQJDQ_e z+;eu>&zNhvm?d2azj{eV)MdV<J!mhbi+^O1E!I z{r=e4!75!kA*w??&v>Rgx}f0gMCjg5ZSwTH)-zROJ6Lm#2(^if3CFOu$jcp**1^Vm zvxQFI6COwR)D(s^QNm_KMurP9u*t!@#PbrK;b}^nmf|oa`fV{5P?5L?*hXaUru*w{ zySfzu5!k!rj<&XbM{hcU5AbYCS-Hx$f1B~+kP7vPX~W{NpIdf&H5|FDq-6?_6gZFg zdOO3j%Wo}e2^2D<50Q=Aj%V(QU{(S)aA>hU2euLcQn4!cr);Yz@n2ci7hCGkOfkvc z_0xl^djFYXI&=IZBzi_|L48#uniZS`ILMzxMZr?8Bq)grKIHEPlyEMvi$}9X9m;w) z#_B0;#}Gjg!9puXVp$*olV)@40#FGgb}K5Xa)=yfW_xkGr?SVQwsZO0WAENa{WZk; zsU07OTQ|}ch%Es6;C4pUSZ{=^*gtk7HtSSY#cCT(T02_QUsJfI2IRvb$0zpaj_@f+ zv_KzURIP`nPdBaXzHVbd@{+ipctvUCFe|FA%=Bql}A+*xoSVoKwalFX5O%bMpQAE`y` zseFax$Futvnh+a_fMH{ivH#7`TVnS0=deYd;Q@Br?D6R^n_z1|8JRRJJkxRNs4=w? zsqNWLN!c3>2|$8g4wO9^_8?p`*xkd5Q5t=wS@(BY3~j8egwLKmyOJE%cuC%0pvxmO zP>o*TL}ENk-q)pB0dUI}D!B27&eK>jxMedlDi7ENMBK>O!T42T@~iGNizSyKs&6_F zCJ&;#*zZ8_2qzY!e`b&Q%vuW8aM|1oZ&}cr5NHYAGVAPC5}{cUW8Q5w7}7ypcU)#B zI+(h7e{)s{-HmGjEa+aJYhZ&Ls`cF~ub|T;r9Jh%<=K4LYBq*^`hFx>2n?>ZN^a@S z$PHPE%I8j2IYy_8R**ZBf{u-qMT5_Q6ZSW1m9#9~lmMKezS8q-XypSqROA%oeGgdy z7BCN(ikF3kOOiJx0?kZH%%L$V!hzEsE3E>V-S5?PdK$+844POcZOPl(I{rNx-JIkE zBMUXzw7}O?Qm*?~QyN!*uB=QCcuX5$_i@+uD=6lci1o8GU+(^(Zm)c5nUr3KkF_Aa zvN|G~n-${|gO$0%=9y>YUa*S}`o}I+T1^IuKN?xx4<5bd@iwCtuy4kZ*9;VPpPMmr z^zdrA{U=|xSl6)%zI^Yzy=L0_snoiy_q}7*ea5tLn?M}3>tk(*a z5{7ZgpWlk|(nK=V{7YQDh(cIp;;UEP1V&_ODtiPAy{4~`&1j`x)UmIFl0jbsSF66r z6+wtNKkwC*o;XK8bq)2d@{17;8yQWQZ`f*A=p6O__C^8#%h-i+_jCjA792Y=G&JZ% zmSh))Kf1g`v}q_sVfs&{%2Q|NmZ4|^Mzo<0p@G}{&vr|H2C(R{z2yM7rU&wL_(YeD znA+_63Q(%b!l($4%;6i#{~9Kc7S+PV(JZP2@qLm{uRuRUIaZK5!aVh?tJ~lS8hr7> z->w`Rjd?L?Zn*Apr6Ba^(QutN0{=KW*~@=JxeK>->~FV#-aSp>4okiADE#k@p#Qp? z>Hx6$lHR!+%71^%|10Tvu_G716_o;^pTB+dT_<}PhmGvGhopdQYFKN0Nq162?II=d zm51e%J1}FaVj`|_#(#Warqz7HS~nlBClfV#t6h8bJ3Bk$w1y({a`eV3T$&0Jg_^&HW&BYa}>mt8QPQWovix zvVb%e{;H!h;Z>#oH0PH`9OB2oeiPK1$g5!VDTebBu!+d9 z5V;$CC9!Fnsp~ldR(!R7iAQP2ViPxMBS|EbJ4B6AgIL--T#2FU+<$jhzVnkgaUi78 zIpsN*tWieL%Eh30){Sn}jd2m4YnFH9pBrPjZC3_-3_4nDLT^q4dNrTWI)A|<TaMp~c)i$>rW`0Jh~C zpMW+H;(j+c3hcX-a*zZFv5>;aws+Y;p2CeD zbfDgwFK#HSf8>i#Pk_QpDxw#0IzU+@pY)OuTEdS66%rE4t1dxFXT_8+-FtSdB$zt% zf06eVU{Q8$yD%swAPNFXij=gpGy+P8bfePUIg|wg(mixbBi*QobjJY05Yh}?L$lZD z^SqC5e0v}J{rC5M|33D895R42%-ri<_gdF=UgvpURT0o|;}wq5kdA~6FB89pfv^vH zk6(m)9vmvG6l0R=X)M=_=0x`(c~;4+d(TJ^Rjh-3@(8=g3}+|G+GND1iIefgD#KNV&OZNBxx>Qo7xH1(L@+S=#oT)UBD(iZmi5y3*gf$sP5qT`sg zfDz@^-Nw~1SEb9}zQ-MYC^$ME(GQ?gyu)%go*QQTTvueQ){;$+#^s^43Z9^_LE};O zA=TKQcMSS*JmcBbkM-$duj?)i`$+&CH+I6M*(zY^mdUVFu&1cS^@>M2%!rYkQ4^v(Rah z0%~pnIfB9_&ooDD#_2d&A1MkOY$sVEv_f!sh#)E}?;a|VLTpp~;Sq{kIGrv2ww;pua&(q7ZfUos>ki}Q&FNh1> zy}}LDat}V*n3;c#o8d73`hb%he?Xqms#ny${TgTJU=D1%hFCxL{pQ0OvlWT_-!a_O z*+*nIx;h63cezwz{S?cukVtaT%z_N)%-dUC9!V~k$e2H3oy#&F6tca&8v(bimU((Z z_NIu4ffl&`b@`C@16BrQ=|V^uwmz|ES0#x{4j6T{Q91OC-ohs!WGM4-dlvNN&f0u- z?iz!L2xZOD0Hu`C#?^S|t=lTaNUQN$*@doTbHAAZ=W-bE1Y?%I(`VqaHfHL9$o=@p z+;1%qWUQ6L_=xq|Zg@9eIZcs46q!(rX?H+WOpJ6(d*n!>p=9X148SC=Ipmtb?YryE z0w>OwHs%nDjS&+kM-2kzH>Dw7D{cBoJwzn?{gp~p#I%LS-DPa;{fWBn2WN2PyXxPk z1b-k{x@5WDJ8U#7cFLm!8LK8yaRrEK`JyHZ^^EDh<-X71H`KDY!Xlh^<5m^;l}L&B zqax_s4_j%4IN`e&jB;B02JE@2gb450F>YqIrec!lNkYi4U*{+MQN7+FOCwyABC#L% z@OWsRPMY>mP;ul7nH{Yj#Zv&r#i2`NJ$YolRSJrgHM1pV0l!` zD-w2kMP+X5$_CF2`){Y|+cW(TOI1rvt(cb}i|PtQDbqCcq5EI=t8)Kwr&$v*^cIASHg%$PPWQH zvBmc8O;T$Q+VQ0FskfHe1n)a~+M|nOi=z{YY6>cIk{6aX4O}OjD(Vl$1-3h0qq^Cv zcs0|havWPjBbrXmVk?h5lwH=PD`Qd%S26FAzqI-OE^{%ZDy9$evfX%ZnV9D_a)Vt?{(5ev@QJ3mB(d!L%w-AEJ@Ykklwakfo8nQQzT-E zlr>G9%BD(BKi-YWp@fK1oNVbblqOZ(*cgr|-(|LxnG4Ed>IzeHA$dsx)-ma0JRNR+ zGH5Z@l}lQVW(o+5K2Akpnx>;e!5Wk#tP{Jq!O#QqXye$H7e@TsRY~RKzK;10%QbST zvB9`=Um`y{yOo6eMn1Q=E-tyCD33Kl4Q?5BHUxG@HXjj#Wki|(HSJMC;@CKAOT|Y3 zX08w-URF}y_p%Ioa#3#oFsfXR?}g6f#6C0~`E9hQ^A?;ZYJKC)J6T#zfz~c0cW0X* zV~zV^w_iY1Q9kB9y_^QjTMhJ6g<}sg{BTPx$jT^#^sf+t+n8y@sz^vfD8}oG3XL$& zc$Z~KZsy!uEUcphcdo)07*ZQqAh%j0jBUH$I(BGoGKvhp~<080-&mvUO0N?>Cj2Ez4NqhEFzlNNJkAw;sb@ z&>gX!phKfHS}JhMo|eI$Xgp$8ZrB`e<>{p>m!S7TuWzDa5329nwGvPyrzikxtJe0H zue7DpNxgH~5DISNNpVGBN63XFlozmDdM|jCuxQ=72?bD}|5eM7%V~mwLUP5AE#~^L zIGx6NDN@*ao61Eg4(2H{>+8jy;!(bgA-;WEI&7`J)-{7ZHOBK4!7p7zfKkf%IF*Tw zJ&U{f>z{!WdIlu2hFU;~`EQsNKU9lWqq{wzK0YY-%s#-WtPr_|I7|CXGC%!=8%3qZWPG+2{;J7^!Od)OgLwP7QFl58K#C}+lRAImrDvTS)QGz15O zL5M;!4ZF~i@k1JtYgj-LoJmN=nt3W+)3lp)uV@HhXxlbc^}T)1AF+R9cmIk3*H~o# zH+yPh$sdg#%}MSaZgFW-E0e&APO2*FFnpT(O{C`OquUikY9r>oo)jXn!7d zPwu{J%}g(lyMI!v!)=-~Frd7JLRBsBODc@nZ*A?&g3CM}j9M*fIp)E5BqB@-Uwo$} zQkG4!^Re<15Y>DH#Lj?_kje#&>QX>rmX?w#0pIeYY20Xr@4ryZq_{^%M}xEp2d$z1 z>!^O@abe~D{5)Z)HB6sV$m8Jo*4`fbAo+}@O(P8*d06tT84kD9S*o;M9%S(T?&il_ zJJG?HKs7x=rYjBcxFFLZUy)tgGro%$iQ1WFDe;r!+`#SWBHS>Lg&mE4G91Y8cXU=n zhQP+|+9%a1Xy_v+CUmdi;Z-e+hgu?>t4H)&35%U&QwEFND52tzCGD!vM05GHGM3Sr zZzoRQry3HPAzrWiiX$TYmQ1gc!hnxQbx-3JgrqPeS)Ta>L?&C3*EH-;X0=!dYIOc}Hm2=~6VF z-v|f@j3UU&+MY|%k7|}20QFIodQhHN$+UMsCNi~5?T@2`^_WjHj@xQxCAD-2&{-du zLU$Nn8S-2?W3LHvW_)d($Y}Wehda=FcnC-WI$7dge=IIq+_)EhGFL=O`+3TM$Gb^o z($h9=cl8z>DEMygKy0Hyj2lUF{BrsFp~<|*vP~W9Ag7Zr}<-etA6G8i=C;gspt5fKi5(2Hnbu369360tbz-xTxjEA(=jH-MBth5)@qah zNVo+HQ}#UngJkoiU%4`g?%#!Nel$2?Rl*1LdU{mdNsd`#Aq|3O(+C@442uU~&wuNQ z4xI$IHbdvXTe3#JGhpHE++P(iyP)1HcsK>7IjNAGdI7>JhLDJ`GjC64u3d7SyYo9d z#(HvOds9Y$Akz3C)r|l{M!q)+3|?D`&++?{A33faj!o{GBer8y4Ce842b>Rip5mh@ zN=76k8ChAwBk7q6YkI1HZY`eQId1|m!0?HP=zu7_Jm&q};)3)xN?<Duxwla=3w!q?LB_65e` zj}NH`AW{;54c>0e+ZFSk6$gh|w_f*bze5KEL)!PhiqV>%Qyos1(K>7$M$#~s*PZOm z^U9k&^{@3<*eI51`UqUa?dtEol!d90K>x^5y+N4Ci5S}7 z6Bq+Kq}JjwdBFAt9&vkDP|k=BJuSC5kJZ=<{fzR(WJCAE5nV&Wr#RvHYza2q0k?^W zWK$-EYh#urT+`J>X|*_*%;YN1lN>?;1U*1#^iU?}j`~ zORY_##U+=ADwXwyh1n>-fLsogRfuy>6mE#=ZP={6yS|p5OHepoR0h24;EuD@;o;#X zXdeZK=eDI-SV<&)c)tx*HIIMuD|dGfP#N*()({teygzA90w9Tft{)q){TJ`bV-wVn zl|w{pPb9&!+Shn>X{r5b-vdaS*`VQBQKECW#NIM3L2Gc-!RQ^3q^D7vbC}HCdasst}rAT%^`8IJy|HN={YAn*4IbIZ0l}wLNi+GfP9FT1&E- zFLzlh;$dpj>Udf2Zi(_Ud*uO+QkraA`RR1pT7+{#Rf40Llz#|7n{sL{y9j+1E6g3? z^I+DB0y@D1;dE)e9qlF+}G6-8&pc?{(cfol6b(=oktIGyVnu_|};n z=mGZ*(~JI8sWBk2rbh{%lutPIW;h_dLfglK;d4j%CeBO#xtBwnJ~C##`bjNu9e6cf z(g#B0K~4n^lgi~wZ3>}jS+iy~5XOhos?*Y;kDCctk6t1LIX2jRVaZy)6^L=jr@N^c|!$+11oq0Y0lwaoLo4C+|$ zL449d4ey<*)1>-&TFLxqE~F(Gq-Wz`(1_eKA5Kge@$WB_A7VcH3{Rzxeiz-tV15A zs}7e9O1hy@34pZa!jDDeAFM1_cFo$P{mG9zH+;i$IO3frHC}{jM0*{z)9g! zzp;*Bi_cyD*@)rio#G2I>vnYp_i)Mi!u7GDC;+IR zW!zMfvf~X{hwD^YDVAGUcog){lxTB)8}9pZ(P(f)ucG1dGVp{v+TTX)a5uj+@B3O* zUH#2U$6r%My8GklJy=@7>hTCLjE!5}0lS{V*UI{uHSQ;{fKPg{)Roo`5K~vMV`Tuk z8xOOL33pcoRhtA{0tP*ei=wp(&A#s`-drwXjpIn`-+a~pc_Ni(eg5uAi;1_!fOh~u z)T|=LyqP`7RpnGO3pC4W_I39(%Ujb9M$I^jzhp;55CF2H?LvRKALhM=SP!a0yC4HD%|I6!)LBX z=S=piIH~_@F01XCMT5>fXPvH_T32plb+jxhq8GjDXPU+!b$1x8T;nS<1w_@QGiNi} zwHK1h>_X=Q7s_zg8op0W^}b~WV6pL+x)i7(PRa1{m{~7BI)%DcU4Qz8xRn0TcR8S~ zwN(=EnV4e@93Dr)WqZ5OL0E^ENbQ$Z-owu?24#DUIkSP0dGg6=bQNv2PFM|(;nN$r zuKF8ZwWDOsgq&<#JI?b9#BKSuUNj;#$ftvY1I>!UrXjqS&ACD#+;OP?s7V1i zVjB>8G+L=wCUqb3q^+2;QA14pweg>u^s7kQUidrYB1;I9z+8vtemn1!P*~R#_AFvueTX#4E?UowoCP z=bp?yr58j^2SClt`1^;uBf6bLtGf5$4tVX=A0Pj^@uua*B4TJVz8-b1QIno~VUY)& zQ(OiMFFwc!3Sq9yF>CJrhX_23Y4u%HfN9Qzc{lgMLy#xGO3CYBB*3y@S~JfE#E7># zD>uxYYq>mUm**KU&-NgB{f25_j|u+z@FxmzaNwrHox@epumE-^T+Co{zD%BKRSm>V zC7u2G_xkYC?QM_d_uPaRl!F@eUw8@ei!p)n{n5!VKCsv znDug#-^Eb&5DXC`)`qFx5r^5|#!!~GF6IlV%y|Vpc|B|LzBt>=_Q|iLUcp~~uog4* zqJKynMJU&uxwgMDd-Dy+aZV+~v5LO_i^~6XX8))SiX_o-T@OE|I893AbdiWm3j-}D zws#Hj+7idgXi^n?bEwgzwC0rVzvcBfckj?!@>*9|{48n7#XlOsaRry=kE5Cq4-XFn z@V;gK@OQp1kDs(pAd5;CYQM+b5})e^JHu$Wcp>zA`6Bt+UFjeNSDLlx2Y?kZrk~J5 zE}~2)f5*C;kH>4gCgSFl+XK!&|0>4kXjKgj9Tfol2u-kJVYPCt6*SOrOZr#+vQ9=n zPnR6cDermu)))QLucMmK1B`fL@c-1QrRuBQbMSd@QQiCFRX-m-xBTHA`R6Zn$*AuA z`91pa|CuMa1HUgdok0xUAz(p7!@~potjE6Y%9nmx3fsN5{$lv&p!7t2_-d&9Or7qQ zH=>ZlDJHRW_Q&jEs}CMp;`e&$xR&T=q81JkwUGizbfN~#)66kg8M(RD(las&fpr=) z@D~OtBHBeQ1nqtCA0Qs4`k;Fa_wb#6;U`op5;Nfh|D# zN+tkHaVVDDq#iVMdt?X+30g3c^_9ng5*GIrje+E3-v|el!rY=V9p< z$Qw?_mSfmJg|N$N-0sqhE@H5D*4gE$?qbnkG>o5@SL17Qb79T?thOt8ku%J`#S$^F zSk5%*ztBffO9ZP!juuyNo~42%xw*qXK)GmVX8Q=3xe z2+3moH=4v>rr)2JFwYe{%psoN40qbv-o9`7u-~9aEPD=|^4AZZ zjf_Z)*iN$gt8g0itRA&X6rLk?*ktXh?&Uu<`qqc#zBCE{Hq{Huv&SR3;IUU2I!Et{ zcz}6!R=RbZw7meq&H`l`1{S8slqpEQ#9RM(nlWNojW%8;n5-+@8SL#*Xhaw-Bv?xn z)H2s`^>^hW-uNJO>wvjvJN z2gE$OcDL|o^3>>)uFtTX;|DwP5HV38%P)QYS+DWw*$G^7j##8YCHc6!xzxM! zhO~4i*O!!6pV%X+QN9&){K|lBdClHA+8SQj4!khtCm|crB_$8h8up5B`^@wIdC0~% z){E8a*MsJodt;#>@(=dnpI|CM(MWQ7^WeS51;Zbj7Q z@gQ6G`0(b3p(O;hOgg6GV1+belf8nM)A5$QS^l}?UQi&HGb0y`X0pewFrV#@JLs~z zGfV$*`j>RfPwXbb)cI$P&YGp|1W#q3nshq@R-aid5-vH?8!iH6@s0_p%X#mhr7PDu&T7vUE|C;xHGR7#3Bw?yb-3oU(@phAj%=c2wF z0te;NKNO&D4I8U<&ObOfkTNpLjGy{s=ubA9z>N7g$8Y9$l1WkbjNNnn+ihEVXqafO#A)!Mwta4k#46G;Cv{bYTIV_c2)winkx(>*41b%M!MkLH<| zM>`0lXoY#c?^Zf4NkKo{<&)^SD9Y{2 zh$2Uug+(AIq3EI`-PKIku7R!hy<@!WwpqMM>#v4-xtW;~lRoEO=$3jG{uflv&d%`3 z;fi0WAsv+!q=ni)Z=heh7(#&(Lu2-5L4SDZ%ShN8p$7wHl5zFB69n5Eu_@ua`iX3z zCv!KJiBvf!RCQYRLSu3xzYoVy%%qJ(9Q_|cFgX7!unQ0`BeZw)M5YV=MX}$Jxi`-o z>iXtkke|9iaN+LbDzT zNGrypsctGTGF(-!QnPqn{@IhK;u6b;%-XfeMYT>Ik>Vv4PqaN^0IRcQfY79kQ2>`6 zH!w6h^VGi(6zID(UcY%=z{izigRvA(PZ?ow>X|%ooPnHw2b*MXz&J&nRwW=Ibh>Uc z@3upIPQ({_Q*1kSmj`Kq$K*m!l4Z;ltSjxfs7coFey?u9zb#H~=-GMvvy@dM>oO+em^(ZPe`PfN~9?9akWUv@8yI}RK6Q~3Wd%;>Ja zoB+7-QlhC%@sfiimwk8jEf{ylnOMWGtk+7f*I0)vzxZiP{l}@Lmbt6K2RWV1s%Kij z2z`kI4G#!P4-Z2ZJA6m)5a1s!o}Wps*UvZ62$tJFkZPu*^ggR7(5`C133r}W%G32c zlZZcU4kC3|_3F%x_@0PLBu-2xTTN>FT9&Cv=fJ$>d?O{| z`F?`ubjdR9V(HyMz%W!iJL`bsPq4J3uhlFh2$1`Y6f=sqd);LD5fw< zz@|R0|5VH?#rv?Z{wyVQUQr!mN$y{j>wlG*{uuu0fAk8jkA-L#4$I{nITnVQ@plWJf#v$kq>G? z7PtNSok4a2+7Q9>__A`>xN~yX%&(fQwoz4l$*NuP^BpfO9g1``CzrBAKI?6_9Rm5m&pLlF5B_jw|M|JA*~CQk09QFtOO`72 zY4fY$tiN#x7XOh$@aQ^5F5o1QNx}z3<-NbybAHoMDX&UL^Yg?c$d^B-QD?Vi05MN~ zc4NTo(+8@@bdQR|wR=%>?kqjhHuO-DULzy{o22--1T zZA(*^Hyqyy+5eFFBu5}(U*ort?DtX>?^jcGbb9butL ze)Hgel>aXQhd=Jg|I082S9HoBWtf>G@cmcTKNHx?xk1j-+1(wzxoKxvbPA{u{(w}W zyQNJj;3DU-YgS8YrcsaAohIbOQsfHzWPpqrFE5*EXhhl-)+tEpBSVf5b+iCmXxUrm z?{O*AIp$jngw;aw=ot7&TIM{Z2k8@Q5B79(UOePZXkrj{T5H*qN*2`t}9;yezv z+$WY46V2J!BM&mR?;!fV^0WN{hOdfw_tX_kjc-#%Gd6BbHu{p@u`S1v@a3JuUsoBd zyrB8S+&u4OET{@y+eJmzznHv04FYZY9k7)ln;a;Z>7z(;!jQ{b!hJkcG0vqYSxN1YSrl1!i!{;lu{>9 z8Kg819;S{Nw_mw|-Y~m8|BoOGKDR0?h8g)#r9nnJF)R*tI_X`>0+OEA)>TXeB2XiF zOw$||b7>C70uicIh3uw>HoXGOv+0+${-7&;j)y_flR^rzH5vnX-_-uqdea+GA9BJP zgbJ-3T-+IBaMgAUcGng`9=i2&+!b*6D7Z5xzCFaY9_zner-v>n;+SV~RsU-af2|l) zU{MCh640ea1S`gn5~%T9+x}<%{@R#pA65a-2Q+n8Q1W`jf$X5B#khOy-@+NtXim3t z$qSVpBc;aK4da#sJivEv9BvXz1 zC3ShPBW-dMDM-ZfgX0_7ai2R(4ZN6gL6b{XYUIcI!%5T9gM?vahxDPL+}B_4A8zhs zW$Rz$sVy3C{G`Z~1hXFH8&5vvuC>*xbe&4`n4yzIE(xQ}HItD*lZE6PdWv-_m48U$MTb$m$o`%5S6%s(Ds?;XI;UW) z5KTJTVy%+YL{@_M@?|1ceO4dHJWBwQnB~@sw21QaFwe~~{F;LkX?&t_y|bh31Ujw^ zaXq0Oltz|;D&<|CN0T_8vXG3ptIUTk!SU++O~#P)c$Bsl z82|2F^95Jn_==l5_thLoDgJHZ=UInh=?JexEmn9O`HhGH!`GX-_A2wF*9NQHy zq~h`9ZGtnGZzSNfUb}eI3EGj#;V}^c3ltV=*_THnSghLVaJ?$`IzE3tr=^d$IxbMl zJ|)M_75@JMo>EAL*snr#i18ueO zDTrP+cmqxwuDaKSP3lV0+7krODl79b-&;2*9M5E~7e-G4;E3;ORadLg5gX-+;sD90E-#%H2m zto3x^S$lV(c~xT%PEt#4uk`AI{KhZXAr|hM`IN|9mDy|0Wrd*EY7f(z-WZXfTiO3949}$sA8W zCUp5QmMG5JY=aw!4(N<#z%GkDc{)U9=v%1J`xG*AxLltg|9O55uQ5!h{feBT1X!Ut zJia}zIf=lAPUr(76{tF>uOIj0nlyocDnZ|YHGy5;!C_}^qqv^s3*vQG#a&JZsfHa7 zK=5CvQullPjzN)lbaqla}q#L7(vT zFJCIxpil6}n8dtKHya`%V*2MwGg=*xknz<0P$M!ci5H13u?S%s zo6NVR8#B#^kQV0&u|3*fj-Bd2o*!zS8C?S1(6VG>JAhSbK}`%GLrYZ7Q$*N5ds9Gy zq4z>oJL1E2BwJOe)k%$M>>t_yvhi7TPz;%TF**Bd;!Ue+@1P!kCfsTun84kDbtBt0 zO5M)Q1iXY(ewB!tZ-ymZ_D1vKZhkB*&xud}flpv#zE+}EnD+0%5d$R=88^eUclWLj z?(`q@Hy4tGGs3Oem>FYIeSJMpra+3fuvp$c+pWkYf6*2cDUuvS;DMmG7YSfyDhn25>?6-UFY+juvgn2LPOGIDT^bOpDc2)SW<3Bxx( zgZ|#%-t`a8LzNhyZ~b{ZBK?vhKQCdNf;LDn(GV_ah#D&0eJ-L_}ks0kE8j=NjV zH99KM(;oN1KZo_peH zzA`wvlFQ7-rU($lLL%00pH3ow%+EGA+5Z||Go_yS9rQ{O&%EmAQ*5c8FlD^8(Rw(D zS}YG|(<66c$m%Bke+_uGM6L!;%|T)py7~3`>seo{=yJ|_ylK0t&B(m-~28IYbjX~ zDuLO3Y0bf#%R^}^3~9T@BgEr~?!wHB>rkSd&CL>RJK9B^Yi6z<5f!RUBV-lTTM&G)SN54$ZF-N%} zACusR8^Z)~E#AA?=PFVZ*(@2-Zkz1Zx58ozIC>E=F1k-~8%9=gS3zs}EN6*oi7H#e zz0Yc@#1{shYpAQoU}0g!`Nmf6?Ci`x*RRc7G?oEfjopsjf*?ZgnoL^H%~*aDrupvd zEqvY@Q8rfd^WEOwHvVB+M$0$9OO0fr;P z)B_E&<@FC|ZUNh`N{>|__K3{xjx?q45k<2Kn-|tNoJYj2VdKWspLn`^e{CM%q8UAj z9!ZajEL7xwwW~O$!^`!?XKGg;fX;x~a`E>; z&m6j|yWa>D<9_lUGS9nt+d%(PBcD};8n4xcA8U8&_Fm{&Bv$+_jslalr!{-7nnYZ5 zeZ-m%SP3Z{?JnK7tv`BQzwe(j|1Rfyd*Zv!t|&CSfwF$jG+uZM_i*(TmgVRq5YMxS z#Af6a+@FMZc_)e#3!<3dmwXxdJ$K`-ZP%YIF3$Bf`6yFVADd`Z8@MaxB>Jnxyxl1CKvbcG3Y0Q zZVfa-68>R#79S{gaGH=Y9@rSa&zf2l2CS&)Bx=dfEZM1Ky#k8xwoQ{CvuiBNt(*nP z+q;eY-C^nxxh#-<%7?F_FUdB>W=2tGv&~E8$t6{Y#;~4CgTO~Fr2{mdt}$qh^9Ce` zN|}@(N5E-8&8QBaC8GLUN1W?WG*Q^RY8Ao4em0AlgO22K!d4ZGgNCc4!X2uc&scQc zwzIeLXd9dRyo}K8uS>YL`f=nIi(JZpqi1(?L%yyCIpXP?Cu`~2@h%-bQfXC@^#&^Eg6_Pjx9r?uX%j6_^%$>or%!Sb4gC5oSnHdyJJqGzV z2~rc2Sn*}g<8f;CEw0%NXr6J~=UwYwQq{1n=akl#d@Bo6SnIy6Q(HLjxu1o`!#kwrlk zhye>V7S4Q{#M^iJ+9v#XZ7swe8;i@5@Yfy%MzrEwzaFL%f)WJ^9rM{A%Qc?JhIW(M zD$>h)RUXLR7#5vxot?7UkjIvxl-aB+UDP2izhjR12R1MBQ}hu{fzt_%?R=D2p|95B@!0UgSYfY4z2^djg;no zef;hQTzp)zf@9bP{|24x21U|*hcF^bO#-{dYX}zrq{jQt$O|1*5NA=Lp|KP0gG%Q8 z^|>F&IQn*xJR(4}gqjoR4<;o57TqZ8rG>8DtBUFW#oCxO1S)}=oT+d zRF1)sZT#UdzO=}*#@fis;pHnT*6Pl+x`6l4DmKO_GmeS{8vP-|g#oeMp@H+Ex@Zl0qs@bK*KHX9RSxLA(D9%#@woy7$xo>3S|^k@W3$@2!ZbB zkQ^pm6I^CDa}%rT&l5j8GZiBPGH%`RDr*)NC^vU#E|UA((8utUw^&!SPvrD{^=hdvSAGREE0k-hFMJsu&rw=N1D^=Zwz^wL1(Z z-KMYtx$NdL2NU^vFZBd-uI|7!&gdM8SUDfx6UsS{=a<}H7rBRC?+7UJ6@eo;2V~z0 z-R46!=Yk4oh=zY_SX)f{t@J7sSDo#*iDZY~p8^AeI@LIzkvQ00e)3i9&HS6HGv-11 zMyiwspe{S;%D|sC;6Mx=TEOX)FY6(yc7d&JKt*=__g9!%Y4^BGd?-}{=$VecW*6q! z_$-RQ5m^tR1W|}NF`;=L{waPH?5$-F?M>%h&05d8m%$%uju!?PSrqv7#*$C3$W^2V zo{%rr8Wh`X&s9T==f{Ji_46ImsOXbiR#VP*BwLZ%58$pXI+k{giJ14iy8ZM-M1>EG zvb&O-R2RI+sYOo8AM2m*IN~E3gPk{y%DhiK#%dgMCf?dI-t= zjY%f|$QxQhzn%VPH8r61yz?XXfblcmZkFA8eSube}f{Th#a2K2sKMx$#0oz zmv1gA+4%O2x-3)eLEH)e{&NbF^JppgU$O)+2WpvT z7dQ;uRB7FRhF`_oztX?lS5MnFHD!@TXM9luJ^IKyB<-hMW$h_MZu3yIq zYm4bN9vn$hSCnocNxFg5&8}V<$W1z_H}GA$bZ^i1g4e>K+}fz&kkIW*-CiLq}&ydHSf^I;p#ZT1^x7cMf-+vR0a ziaaxnlUl9>JtV9dFG~O%&(0a~nTb)JGHWK$nY1ce7$zRlYB|C+N~YtS*qXlhxFXPu zib=zk*{i6Qt?<#1FylZu_h=Nbp!N>-lqVg|zk@LVQ)UtkZgj2|JU+N{xJQkGUI+B> zzYgc_wQ|m9%6@*Nljn2T1RwfybGVFlP9hDn^i-J$@ZC|fcR9||>S!{h=as_zG;7rMA(Z*TWgV5QPAuHYf7&cP2CSvyo>};RS)Dt=xdA*oQKyp z`eril%U%Wx?v0)<*w3P9p^SXIc%;m&1EHM)lwPc_FwYhycGvrBCU&6QKDm5;I+D7! zFXJWxi(dFRjpo&F3K`>8yPRg zP0Nfi6tc$n*-i*ewDeYaW|08L2B#&dtcM?L(AGMjY^UCPcX+LsZg@>mT-3|Mi4~VM zT8#(GNjOxE5O@Ff?b}fhy*zBp+?J^#uCz4ohFUG5`z;}{dg2nmmSZvf!RIUfG0sLPFc5#EM=QX&2@`1P1#7a! z8>@6wtXb|UKMGgB%y@is`*tG7@xVQTo}T9B+4?Dg--ZdpIqmz+FeYFd6!lruCtppZ z(rSuUv0-=0!8m1o*iQ_K#T^4|lnN#w$5LCCbEbPEA?mkgOteerzlT(MbPO(k<##n> zvh<#Oxuej~@y;=*(M8?6t&`Ct8JN zI(AE@(k`9le;2k8*7MobSE$Cr&97MA^$kL|CT(kz%D?nE8t{i?ot(;tFHEoeO35)H zFXS%nfBn0heK!j?3F<8905HF*zI>OUl+z~V zEjMns0(oAtiL_!;vY;z(RYVA**@e#L=4J~_=QlE{B#=i_K(5YOt3+e>5Fr5F0kSQ<1Up;^y$Wq?)w^eGDdEW0aLLL z*qKJ!K;CS-oy)Rt+!GZ)`Vc~iu|AYX%qmrYUs^!PZNG1T9`4*2f1CGjF2@ZvQU zeP7`xmJMx^H>%bhF3th!@AmRBY}y&oQuMM-1=FWR?*KL-t;H)fkCNKjqTY3?1ACxJ zn&f1P(ib}}@wN@0hR&rc4vLfDa}g_ru2>}Rn45yUA1i>Xc(MQo!NbpaSA`Gklp)86M|q8KZe zeqJ^(b5yQ=>=?NBXEMG~e^y$*eL}E3F00tS=tva5!l&SKvNp@%^@EgSt+}Zan}8xb zG^dCAOWY125eYLoO)o1BJ==n=D$2#I3CtE&IB&#OH=q;SV*cb=(&94(a6WC}LtK{D zd%Jh)oULpxh)Vn4knIAlrlIE^&(1azwzfwMyxEXE){z(6{pB}v#8sKbY9J{Uw5%Fq zV|;W@>IN6)}UGD7*11o|gua}1#A^~b5$gIlmYGs+- zmKRvGF`nCynVqF0MEvw3x5gfl3bIfBaP3XIf2WX1N4RQxM-O{vOO9eENE3|)%4-(X z;k7osXA#!X*(oj?(qXS(tEej)lkl&=>hg0>GD0a4MZvjpssxA)P?eQsqRt}Yqa%k) z2KZz|FfsuLMULq}{RoFg!{q|y)+{5q2*@+Yjpk!Gq}szZ6}-V_ME4#^OFr5hdn}}ZU-eL-`T|Eh}A^h!SC}=3{X{* z3C!~1ujl<9pB7FYeFB~ppcxRb&ZeST_&ov`Rf!&amBd!)PzvewzJ@Jy9`^XDNzBP& z8Q*qsfXaOF`9a^?uv%B);}iQSSs~%(xRrO) zj1eR^J1Dl?X~&}SAJ6QceF7!+#3U zj}!Hm)>Nqe04cfgZ+W1BNtX`uyLV4Uw8Il81o^ywWDdVZJZcth@|w5hFrDE5_I0px z5tYTZ$(*4wU89+kXj@}apguL5>OzE(4O9BSGkVdUW1Lyteuc`S*9S8pF5o`-y z)Wzq>*#Td9)%>djI5M&#fKh^NOJQ=9pD{z0#8bfI=Hbz%cIwd~a=sX`vb=)sYj?3Y~5S1CJbDn>PEWQ3Dzb#}pJf2{Sw>1j)InGv+G z%)GxKR}eL)Sz|r7hXzI&7#Sl{zhlyU$Qa}>$B@dok}theqSW5qU8YU@D&+m9iF&?A zyMKtL?ERpZ>d;n42UkHK+$VfY_zX#Taw(*%SymWJ!5Ri(B0}eH<=j?<-8UlHsN+#KIWW9OzPGcq z9u^~S&Ej&()P7PP7M;% zGPAupYd8lBonX3njQX^W``d{qx#lrv$maIS1w-~pN-#l*Wh%;!S2^BmITonnU z5x-(!J)$?3Q+HD0@uq&uC#5ar3^k=}w-U7sTM@okyh44xH*)3Y@?m?POar^IWEt}8 zNtGoFh!9LHO3Ice`Nrk0?2nUfbW(zxC;-QnHJl|u2Q;E0^qQDJ&@j=%${|hxJTKCx z8n9`)Wv1^?mLbsPLx~ks&8VB;c@&KIJ{G&avrswUsdAP+~4p2R5lnBuJ^fcLH z)jNOj13JAS3_99dG1-eE3-!x6IX&r$GE!iIS#edpxw6YyRdS^eE9*;nkh>2oCNA#I zT^_4A5FB>=n4P8N=O4Ggv~&Kmi1P4fBvjYf9$D2sQrMbhJ5_dW&&E2LE#E#+W?J%r z6xO_AuK8C~Y2eYLm7k|$$G7ETrQ7lwAZyO^JQAt zv>)w#1<&W2)i>^<6IxiOdWU$1Ed%jEt`yS+`II`T^+xA7Eahugo!{QP`JD0}1Gv~) zl0g!=$EWXu<^KnHZy6Qk`t}VEA&QEqh;9)WkP;A(?hr&eB&9_fq(O231yN9G7`kET z?p9Q~hHjA_N?Q6oFMI#*d)@DP*Lv>te0cfb-b;bG=DN-~&*S*jLCnpqAS$x$b5ZeV zdNOpsM{%+j$)8sX)o^;QNVzk&Sn5S4JUok_AtTlvoarNHnKZZQxLGC(Cr~2?ro^f3 z%TLzVH`tV2RE<`;v}RSN=qq(Q>iv9xwI&^L70V0hek?SHh_Okamx?jZEkJnJTW)QuY`N+h_3v=xxzAw=C zxUMeNb_Jr^_R-n&xHDGcU$6nr+y4(t3D@iQQe)QJM_h)%L=Y5zG$^pXOSH4#JGNi^ zpOlpoLm>0_H4ahue<4W!UDx-EL%5z27Ye| zL>e!_;VeBpJ!(s1a#2O&ns!Wi-?C4gJpJshy%717c;3F_`N+HayU2*~CJvj*%-5{B zgR_N&i|BG|pMIR7Ca^#QCa2D(spsFxM(G!hniv)qW`3EQYpJJm%t@-xUs=%hL`{v{ z0Bq&2&Ibtc3$R2*L>klJ|1fKW+?twtrbdVn{rL=8(A}T4n_0vTs~>oNE615{>xA2w z!b}&@IESOkf#0|n(9>cv4Z4`evP+)uax1}3Q55?Gn+*4qaW*{Vf()&_J8~%^ymLZRza+mw)U9W z_m)&rG6;+g%s!P!sZsGY=*dtJ&7XT5%NNcf7qbsOXN^HfBpm>y!IKA5Us!Z?g}^;0 zgzov0=%3!e+4b{1JMZvM!OTyje?l&U=@w3L%M9$;kpmhQLJk> zz*x01R|bBYuR&m^;k-)`)6(7^MnoqcnE=LB^`f2?ym|Ac7_afq^MQFS+3@R#W2jhI z^k_Y}v;eAqiz)g=>pL-tnUAO@P}Zv%ALZdZ_YnmA9W(u*>ph<7}3Ppqv}TA#Y~WT<&gG090|5{qowwJWMP<@s-$+ zs7+)uS&FYDH2Fe?=hjIyPe)B&6I!8}zt^K!_?x7&Zh+spu+4i@k-EKvILjt}zqPw5GMeNbu$!ocg!)z>zZ@ zb$ir`sq(7&k%0pD(es8=wsjVIVD__*udinA2G8Vn6LA;kNkCt|z2GG0+eMjYyHAfk z3k)Xg3l08K3oyT7j9v0QBq!%D$u3pV2&YWEzIheuEUpVACYZsc^&w^$EeHRSgp)mz%ozZxO;q# z^WpI{-}=@TNB#pj%EY+!gLa3<0P6U(Jgo!g9x5Hz*myqzs6)lohY*=|-|pr4yu{P|PL9}^r2+L}3G%*XZY$toK?0NEm$2cDg-Cvy zTXz~T#8I`6GPQ@RtM8QtWL&{k8W}`Mm=tT@prjDY5j-GlR#@Vad0Cd5<~d0YMnchO z4D*KAvdP%l*@LsUFyJ^IqH2~M$D9D?fG#(=X772_KnVzJXE&FY&I*Jb1+TcTF1JWD zC)1vILDiAPqfZ^NmBxka=+fBWWs2vRm=;KsR>{j#&@;_uJiGsdz); zn(JUcW_|L^5UTQVzj3n#Cat`>+98eHW)IR?KQQ`6fFm~>w;fX!W$=%)Y69ATIeXb9 zU^M2lGx@>n&I9g9M+oB}A%U0E7?H zDk@>nEcDAnL$Ym9>j%cs&yPvvQQqENEwK^humqKyAkub=Bd}KHA)jSh1s6EI2e@9;YqYXqn$M z1Osto@>k;wH{RsScB5pPo}y7E*P{3=lEyfeH5V_B%U`{{H-YN~%C?Lv*AgO5WaFsn z-7uH%t;y9^j^`mBM0>M%%(Lm%;%IjE@dOS0jJU8>K+KTNRwFyn)I^j4C zQ?8AYxN9dMtwXHh_#X;ZJRIh&+yG4Qowocso_DfSYNJ^(7oHsLZ=*An>7oSP%FdGu z42>y(QxOyB>-Crjz1My5_io!D&Z~8%c^m`*YR=wkWYbS7Rkl*izGOMJ@p??i{8i={ z`xoC3IvauM)Jg*TErQCjdJXPFUyFNVAI8iNKD|?K$*VY;^B{Q+Np^_J7W*irt-uO= zGEugfb1-PmR28Ro*wWq_3^Xzy$JRg}PeWbdXE-|(SrCF}aY(vrM!Mh$CNXHLE=;*u zhcP!ITAss*fuhEwfF>chCexy!aak0X>>|fwsQ*4*$|amV zQmDT}9Ke7!doLf`UZTkZC)pV;La0{`_FRWaJH82?6c)^r#}?`Dp>HVJ55xl;8ioP% zFY@R9?w*%t{{z`j#&24*J~ zhUN@kWPEu69zIPcEy`C1M!*3RW(2275+&T^jKnBkE;1D5D4ceeH1~`{*%6Y!{5*NL z0^l#CzPuAN#uNYsejs{N*{+=i#ed}NJH6i9e!R8LZ9Qo;0+Cy31CmRa&0coM}p%_iqG*;r4B|ew0I26-0*NyZ57@S?`B? zn;mxd@B8Azz%(x@&>SxEgD@Xl+}NlM!rv)>*rAyR=pLB zTbIEZKQYL<;XOT82Xsr+Rfv`=w%bySFfv}dd&hfSo~>Zoc$(AN1iB9420HZ!?n!rL zHg@(j$EAUR+P{hvFUIUE*c+SMtl8g2dt&JB>XR@eGD{awN!e`ouE{5So(yUQsR}4NMtK1}KU7gLdiSoGnLx^KqpeI$8}u zniAKGopQsl?i=}a6rQff_)%Yn5b3QUYFPW@z0>A`6i#_18(l;S0+e0CCpCxbfu3PO zK^M({jzVCwoqglWYnEuO^wWQd4I9X_&S33HgTvcz&!aR7ElJF8r4ZlF)@ITRKwf!c zt4?yq*&b!C9x0glSD?7eC?`+l4>2kv7 z7>V~X)}gB4+tKM9HK|C6Yz)t-)0`0ibt{eqw1w2m&gJ?XwM$HfdXGb9=EBF+QEyv2 z0ZiO)Hj$G_O#|mTQ04!!!?#1EYxKEQ3P%U)*dyQw>GP6fjHnuc#Lwd)vso^7G_2^q z%69D=bwXju5;*$)_EUaDQ{SAM9oX=(~SCQ5XhLYIkJBF=>|6vW@JhvT`HZ;Z8ZnFmtXClIUe7S=C5;{5bQ)Y$ph*)yD`l@4i z^NP9@7%!L=U_ikXI_^efIFW2E=PZpQZ4@rpMUu$3@@*0#$#0N#%|Ej9AM>2QWiPP* z&8W*SR44*Z1qhQkRlP}0RES|l(#G)0hndAcy?ixTr*5CYz=q6Z_1AF7p@ZT17f=9W*k|LhnI zdoogOVN(b#El5E-sHi&+5P9X5RNHAUJ7Vk37k?u^Q)4gHN&pyE;@UM1iug3Z0d1`e ztDZf3_Cx)92fg_!PeDRe%X|kN{RjGs_I+7GU>p20*}Rs6bx|4X7PmS!&SADdedlyN z5QJu<3}f5{uQnaWec7dvZubWtQG;DAL6awM#`Uw<#yK1c`jwA1g#gHWTf0h>{D!^B zTjkIsAK!Ga3simHb+YvL^9$B*^wnU35wwIEjnZ&Y>g+##Q{ejNt$jYU^p}a?ZXztv z4FAE1zv93@E3gI&Lc?UIMNVFymE_sArNl}sayZDs7MQO(!IY_2X)z6^V8sW~ z-sMz_=`j~_O~5b^X9ldK7|sNNzasTFC!4D1YOv3G^fv?U<@<4fk|Nf&jJ}J5;vVd8 ztA7LM|Aj7`l#=4__xHci=>Ok%iOP>3KgN|oO+J`K>F4iXqzNMlc_9oBA;8zTOip6@ zUp|RuEN{Vb{a-)^REKKm?yBXEQ=2W)<;1sMpoMb*t_E`@L5PWySQG8&3jh25e|~%s zJL^4qR=6dJDicr$)w{IK04T^+bJ6rz+~n1hdH+rfq6|->>YXb=fV3_etB(x}%Z6-7@cAA3jm)TvYH3f9{m;3lO14Yg~({&51-)VM=@gW-Oxc#+Gfe3X!Np~K3M z{PP&xsO{o8mhh9^`nBfgG?Q(}*LC5JF=bNMn)ZQg?{YoM17nZMd(eJ9rVh!8oP^^k z5pGW*BI*ZseY_>S*4)%P7k$)zVqBS;PKLCK<9lTi1tRa>7S=a6WbaD?qD|@HL+XSM zZ3;c6W6(_KP@>MB16sQq_~xXyQ1WphZ$dTDx%Q_m+StLlN(a(p(A91zG{T+jNXA|W z2?nN*SKpIK^rSK)A-O%7ugRj5JnCP~A9Y(h5)5gTp8oU}pafxIS6ohxb~|F<2p@j+ zc37JjS4lwELB1(We|8#(YYx~oNm?8Qn!n}oYIU$#e{#E2;e+n&g{IB^SET!IRRn-n z&F*J0)GwactvjJn64#*WZZ>>AA!tz7Raz*aSdy){DA(;3#E7+R`B^uY5S}oz$U5H> zisw_8H#F3==+b#;THyY5Afcm9$nC^&k#t->y<@NHlXsp%{f8A|xV5!QzwLzy=WVBu zSi5@xsp%SkcTiO?TX}&F_+^G`Dqe zTjt*6*j@UEU0fZ63oo{{b_RnUKhh{X)=q_ut+>6&>P9_x&+Y6ms!YJ9J(nJ}_?SFI zR&6xAo1IqS+t73T!Eh0f;s8SSL!n+~Vuw9!yrRdjJ!IQtdqpNRQKWa^VAocFW&EZ8 zlVR=X7caud?Hxu3<{m!M>JESma_(R&wvN(%%HjKJXSi zi7-&h2}Y4uPu|YP>|{QpilcpUDCQ*finBiw&p{|*vlJq6?G_5~oUgWiJH5t+6>nC2 zt<~D|C*`5ct#MUXfVqCtti?JX1!vtd42Kth~it3M!9 z@|c|l7^aQ{qIR-PP%U-r z0IvV>b7{?BlPNUu#wZqt6TQzG(W z_nXSsAG*2*Rm$-3tsbvV79zs%@5U;eS?I5?w@z={_+dI)>?uu=b>0$UNA$Rb8aJmH ztllE{yiiwvVp}V)-YiJ_A*J7?hIF^LRp@0Pc__bC-2)Hp;s+yq0fjm$sWsaZhLy=q zPWTR_)%#{g#>#PY)I1qz)(FQ!%0zKiMzZ0_*6u5JG@iHkPh%qLbrZYpFllbMbpxLx+)8rA&;CC5;krDFU*7Z9a!v_~@0% zdOawop?uP#`oo70VZNUo814{YEgr4a9axzS~A6)hD&^FQYDb%S3 zEJK_OVYY0&q%pox&#`gN zU{&&%00lxqb+Qw;Mx9+;RDe9NNerpL&|ca)Sq!)(k3XJ`;&;k}jA%O`7HKxxB9FD- zqo}x;2FTOmoxk9RUOwFFRgfzx6@Ps--TY!N8Vh*=ZUg%%jC(thij_#?=jVR+fx;OX zScM`9uIN$X#^u(c>C$pWyapZC!r0 zTC;bGH7halGau+Pz`1*B6Y$j)?KSzewF0yK$oP=E>f5EOI!*v3JnywM)h7Oni+vEY zC6hR`fw`joar7X5?yY<6Sb*;yVv zmVY+ zl=y(Y3{nJG#$8=*Y$^V6PzCv>Ld8wI`;0DVMmcuxHmbA2W^#5?*7_^Y8MGJKpYP`s z1fUNBh3oBA{P!UVM&A>&{V+5rem>Fje+5m2$rfReVY^V<M%$4e$=9i$q@3-M_PEkHr`?Ze>^tD}85`M*C_M{=JZR_op zwl?mjEB$<;7A_oPOeUCVCLx&q_w9!@6;3s_4EK6nFRuR zK*yk4MP1JW%UsNn*{MW+E0V`M8aihrQM3oPEBA>=m8#-a**RA#d|u$SF*mvNFD7q2 z4EKGrLrWS4FzH7lHUyjXd%Cn;-->k85BOsK(o1}^yYzb-p*^zrn%fk(DGu=C3hJ%4 zl=ye=0A-Iq=mCQzmT4=VX_m@fG4)EborV!5^TMk}!N>z}cfYGaci)>nl+;=9;CMB& zI_1$hiX_0|U1Wu%9oc=#;7W01LWL4c7~tV?*s@(FR=Rb#cpMDsWX3zs(;#oBgP)bj zb_4N3nB#ZF`a$&%Apy&^Um}J3mS0{|0B1P;B2t3yNOR4&BPZUMhKWf|R7}P=CL_Z) zzmz0rs87Xqb8BVWp z(c@hvn!X{+{w9_3oM*8%IVnQM>;=_lchKQ3d;fg}-y;W^IghaMw_h#^!C;C&R<8rg zB@Oe$gyHTVAhQpZBh>KFSwbFlLaJ)dd(1wRyzc_FPuSNveKl(rO{ux;k8QIfSVyTE zy%)2u@pys-ckubw2NZaH6^848NI>wAlLz+wi}|#V7jqK$7}_tb0va?s`7Q+^Ap>mc z%XgJU1MJ7rT^2|$W#~ZToTe7|+8#EL;fCw={ik6zLO{!a#De4iPlY^H^?Kdsw_Au= z2*<|8a%cwMx#Yo-8v?+rC?natr|$0XaWltRVGyo<#M!CZRj&N;M7|ocq)42F{_)#j z1aL}<&uk)R&X`tkz)GlDgX^<^@R5KVi{i&OBfHod@O#&n!B6@rGl>Rhyzlew* zIcGnArc}qEcwWA`lLc{T8VI_O<`|bk%M7`}^mlwMJg} zySIQrd5%xgfl}TRd*M{$^i0H04J*UwMM_xG&>-glk$ zVcgbYk2oY+b(!6xn<)jSJwO>lK;5}Se)GSRr-u_=j{;KNL7qDzTvkVEN}M53YYW$| zP)40KS}zy=PWXEsABAo-jB~f`W)A?>ASx*V^ySn5GGT&#>pZeb#!GC&IK?2PE!^6WI-M`+{=PW?ImptzP zn)v^rRc9K<@H#QYy!5NCt~MB*R#WiH<^M8+@es^a!;h;n$K;$Ua@bP{3Dr_ElVC(s zqewYbT^z<&1@V>K_e;zyoW-pKX+V1ztdzy7mD3j-`KKQrqesTu@}`ODa&V=E3Wz< z^7kK2Ki)DZA!u&jZr`$S>q!=8d(_~C2B*vKug@cZ`k9S6%QgYbVG4e3RyQaCgOQ`Q z!V3;IAZ)$UZx~yW9Hf?FHknu2PX%0+cjs41xf!8g|?0Wf{p3;K@dwl2L2U6Qntqh_O+e*jun)oJ75JVFq$%VPn_ZrE~KS z_eSf5Bkp_Dp_#M7pZFhr^sx`abKt14E$fyOuUbs1CPlI&<>qYmJ) zVg@T{4+yDcw3bSDw%54=(~@qRD7JJBs)KX+HLrRWAQbSWlFavYJ%FVg%6X`vTN?cj zLpi(f+Z)_mmcQ>HaNO@_#a>u;Hwy~f1Kn@G>i_z6nv4Vg@b&V12kC-Z{L`s& z**4H*151L0oNs2{V_X|}erK#{0dEupcqnOaI(<1Ypg1^6i<*A=jbQLqg&BbL8 z%~9fKmcU3b1u{64_npfFDs77 zCxO6c=_gO-6ZtfI=G_;CN~;2UAwfRpjmNVJCz}EIjAm(RMSy6N6;E%A1A6Aeuv|bk6|r$6ufsnw#r^<{OAmhzok`w@RxAX~pZ$dULC zIgJ?1BKXXRV;}$)0z>9l_H?bP)-}y0ZmR%0;Vs~ge~~j<(xDQyIGmf3nVS4AN~Fm) zBVoWgV(GN58TKtBxB^_*$~t*W;E7Eobi*TdX*+@>n#L$8<(^9qB2K1VUA_dnwcDec zs#>F;%X;%AAXxRt;cn%b45_L<9A3%;!|@ij>t^<2B)6-q8i>CvYFvJ==sLnKZ`=Z8 zY|4ugjH?UBC?4|7f#5+TdCF#mIp66{12rSK@M3qc-TZr(x+Y-<V{_|f{ z%^8-;Wh})J+A=Q!L$se4OWSFfnVDTCAu%r{p{dPcobKqqI8-#tgq%f;2XY z3Cqqaf-a*<7Wf5$_O&|}rh^mO2T6Q~LiSb|%*c&-t0#j=Ks0CqigzY|4SLA2|18-5 zSyWNy)i;pFCn@a6PbwrLUY}vCec#+qfNxHI4*<()SdoE3F;oERejSKJmX=B)16JDW zx@d4y!=Ja}J&Ik59aVFech!v5PwihSk2F{qsHB#ha$xQ%1qmWPj&sa!f_usdkQVu? z7Vjw&WI>-mX2zKyCZQxFCUWBJDP5VUGz?IQ`NSus3I3E6Ce2bhAZuHS@l?kV-~D)x zWh~HzT;7WR#JJ&JD?o@V+&Zd&O-2HhUg#!Yk+F-BRUZs?OcQ;t_VQJoCdwRvl=jPLO&_{Sd~@<(NR) zDM&f>jDX(<8-^?nYv(YV8ocMqZDGA#aY6miI_0K=YCXxuww~NGth^)8XwS-eDnxN@ z&}6G>fOZ2<90JzC9OS3?XK&*ZX4n&8nHj~TwRwi%2Tqu5hv6y<#T|zW2p(e*J+)=H zA#Lkq&pnmUNj4fq|Gwn?+f7?n$FK&{!fD?YleRw+6fs)MbCRJ|@^S+0TP=deyO+gRAz}*Rty`$%9T(GTA*({Ovyuij| z?@{v~fW=uXEE_poJlJ<<=i_$RE1DLRJ&2`BoqP33L1CEjkn`%%jT;<5K%fN5YMu2`4p&gxksOVY8!I1 z;%rK43Qy2`#Bd5xxxjCB_3BMvI$>Sn$Vllo0-KN#>N?{M?2WCjVY@<6`l9kv9gT(u zd4fgyyIUcA%WX=hyh4+?Kjj zm8A#WUsy%_IglgK9}USl`KNbfUK=OT-eY(8+Hcn+#~s}uB?llQ{ZK;TIC@LXQjWXC zxuTozl>=XSQVB1S(}2|p9NtFQf`D2YdZN5z%VD#=b6Qz8@%{Mv^wJVly~m6$ufw+m z-j`kua3WND2w?p-NmDc>Kos?u=88R9d2=l=J&L}D>+Dg7w1{J-E#DC#<>k*JocF_H|oW2%I+RvKYP?q;}xvB(Uprya{3m zpD<^dHO;1(z(bAYWaj3xnQ>F|8+-a3u6s0crXy}2RX`oWm-%S}QQ^~sWWm=G$myUk zpl#PxK&NP%2|wjNiCHt+c*C+}RFz-s_giR?_vY`m{Brlew4eK>pQJj+qia{N?a+_> z@f0|Ml9NI=ld3z~TQ9M&5E9+bWFjfC-Luy1kl&g30B>2 z14=+`=7QH2KKu+una<6uOAoW<@@$x_bJUQ#Y#W{s;hgvGHpCku%E2_QZBAm z5z=#l0ZJR)wdK)^&7GV+sj8mxkeI4p)dr2!X1qpx?V602XNq+At1z{1Knol-hGt^2K?F97|L3(9u|FO5e-tu*lJL5}$`04H zYub?^H|)3t1$9J4MRNu!{p7~!tm4Vh+{r0_zz2#VdS3YnQl1HO)t}B2u!^un#nK@V z{sxV}oj%N69ZJ}5Q3(Tp(7q!?J9p2VA&7!dBBC=HKb{!)Qycroo%sD1(En&(p`?KR z`|Im}L-z4sZwEm~*h*VYTCvRcRj-)sxLEOJ_8H_&nc>r35ok(ZCE`{fT)ffKgZZsQ z6hRD!kEwZ6zRC-1K-vuNhjaL)gwLJp(pG4#@42dRFJ@2q{{2%fWWBcE% zIkj%WnURjwfst^X0U?-3qX6o;_y`;v9LjQ+h%Nh zJTtImt7Y%JxzW=ImA&8AIJ)ncouVK(8nctThW~Yw6`@hN$L873!d9Yi1K)DlWS`;3 z{-&7y;@p(~WS-qy9Z$@G_TZ;d?!n<}D3Ip>pji9$gUd#koEL2SWmBBM5cp)6`L%&s z>smZH9q2@II8ByiWJ5rO+Zzr&Fyenu;Jr_ADL2yZ-3)3jd;|Z2H*j|uz z%=?6*KOz^y>L!2+CL|_?@!7Ly{dGVhfBFxjMNpBK^_)KMtGG`#;>opY7S#(0&Ea3W zMY2!ZSc2iwY{}LZb%`)$ti0N1zEX_GrrQaOeC0*1(mBJyxA=G9g_;@Xrjp)PcKTY{ z#39!I$0Udr;RQ%hbKU-$ADDVyQC%r@uWfE)IiEZXD7R@hzS5xYqFHZN+6SviCMdlNvfv(_4uSmhv#VOZQ5Rc4 zi!?h5A83Vpu-9>@gv21hBzpm|Pr?rB;rhg-JM+04z55*-?|oi&(RVmuRFbY-C5|9J za0{5O-uI7(7^U94g?snY!360mO~>$H;7SjP3uOfPMBC)f9mmnp_&-~UM@gYArL11Ob)60`;GddGE zR5{8s$W&i=ZII>Xk4LEsdGkIM$42fW9 zLgBUglVcJ_KCBEa_XezASrnh6X<5c;Ww^;c<7~R3%ME-=aVzTNY=H???v9>345GnB z8tjl)nv8B<9j3%Ttr+smO!GZUi{ z4+ZBXa9Dr#!4Cx;6})AjnyuQJj25a-tEaWs-i$Ktj;S52W( zUY!vtz+om9`V9MJt+J6L!5)crj0 z>;a&VOY#*0L;Qv2Nw7gYCEHXo)YN5txRr|zbyz5fiZ|a2T#}uHH0I^f-eOu#A6jsn zCJo>7g50gpf4SmFt;!*=1!QeF&O4SU1W5w7@@BpOe)DYW6F)3Y0SLbb5r)|ic}C3 zVNgppZ`?p!n;M*u??RgUB(=mpK#d2}U8b6bVWgK(>e$lArFswfn!t>UT?HX`mFFa< zBR9v&Ot0rzf z&jSKkv6bl;!Tk!GP|yo?(eq?@}yVS8}!`k4tL%Dh(A}WH43B=sqf$*ldJ@g6+|#l z(s7*s*ER<@y9z~jUMy|Cr!|neVEpwslEI2RUVFFSyW|b2lu(3z1XVPil&NBilMl>> z8TxEFl4GM8==k3D6$c7C>-Ij&d|SvrBZAhi+?=~1XOsvf?WiI+ZWZ1#PQxEnQD^;h z9h<~)ngR&Pc#Sn#;qZJArrT@m$uy`tKB%(SQ{b<51??|EQpFo@i(Zy7`$wE8@4SeA(fVrl6#l!0sfkv?hnO zW|iEq|2^Wh6bF9}0_M`EvAZV+T@LKw8q*@4yzVoRxA&hKRnqr|;kka

6GGlzx8~ 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 literal 0 HcmV?d00001 diff --git a/docs/how-to/configuring-runtime-options.rst b/docs/how-to/configuring-runtime-options.rst index 5e50242969..58f8a2122c 100644 --- a/docs/how-to/configuring-runtime-options.rst +++ b/docs/how-to/configuring-runtime-options.rst @@ -464,6 +464,7 @@ Viewing components | sampling_gpu_power | GPU Power Usage via ROCm-SMI. Derived fro... | | sampling_gpu_temp | GPU Temperature via ROCm-SMI. Derived fro... | | sampling_gpu_busy | GPU Utilization (% busy) via ROCm-SMI. De... | + | sampling_vcn_busy | GPU VCN Utilization (% activity) via ROCm... | | sampling_gpu_memory_usage | GPU Memory Usage via ROCm-SMI. Derived fr... | |-----------------------------------|----------------------------------------------| diff --git a/docs/how-to/understanding-rocprof-sys-output.rst b/docs/how-to/understanding-rocprof-sys-output.rst index 66cb931202..de31e938d4 100644 --- a/docs/how-to/understanding-rocprof-sys-output.rst +++ b/docs/how-to/understanding-rocprof-sys-output.rst @@ -325,15 +325,23 @@ this file. .. image:: ../data/rocprof-sys-perfetto.png :alt: Visualization of a performance graph in Perfetto + :width: 800 .. image:: ../data/rocprof-sys-rocm.png :alt: Visualization of ROCm data in Perfetto + :width: 800 .. image:: ../data/rocprof-sys-rocm-flow.png :alt: Visualization of ROCm flow data in Perfetto + :width: 800 .. image:: ../data/rocprof-sys-user-api.png :alt: Visualization of ROCm API calls in Perfetto + :width: 800 + +.. image:: ../data/rocprof-sys-gpu-metrics.png + :alt: Visualization of ROCm GPU metrics in Perfetto + :width: 800 Timemory output ======================================== diff --git a/source/lib/core/categories.hpp b/source/lib/core/categories.hpp index 0f09f4f1b4..cdf122baf8 100644 --- a/source/lib/core/categories.hpp +++ b/source/lib/core/categories.hpp @@ -105,6 +105,7 @@ ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_busy, ROCPROFSYS_CATEGORY_ROCM_SMI ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_temp, ROCPROFSYS_CATEGORY_ROCM_SMI_TEMP, "device_temp", "Temperature of a GPU device") ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_power, ROCPROFSYS_CATEGORY_ROCM_SMI_POWER, "device_power", "Power consumption of a GPU device") ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_memory_usage, ROCPROFSYS_CATEGORY_ROCM_SMI_MEMORY_USAGE, "device_memory_usage", "Memory usage of a GPU device") +ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_vcn_activity, ROCPROFSYS_CATEGORY_ROCM_SMI_VCN_ACTIVITY, "device_vcn_activity", "VCN Activity of a GPU device") ROCPROFSYS_DEFINE_CATEGORY(category, rocm_rccl, ROCPROFSYS_CATEGORY_ROCM_RCCL, "rccl", "ROCm Communication Collectives Library (RCCL) regions") ROCPROFSYS_DEFINE_CATEGORY(category, pthread, ROCPROFSYS_CATEGORY_PTHREAD, "pthread", "POSIX threading functions") ROCPROFSYS_DEFINE_CATEGORY(category, kokkos, ROCPROFSYS_CATEGORY_KOKKOS, "kokkos", "KokkosTools regions") @@ -167,6 +168,7 @@ using name = perfetto_category; ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_temp), \ ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_power), \ ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_memory_usage), \ + ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_vcn_activity), \ ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_rccl), \ ROCPROFSYS_PERFETTO_CATEGORY(category::pthread), \ ROCPROFSYS_PERFETTO_CATEGORY(category::kokkos), \ diff --git a/source/lib/core/components/fwd.hpp b/source/lib/core/components/fwd.hpp index 8e9343d9d2..145c568a07 100644 --- a/source/lib/core/components/fwd.hpp +++ b/source/lib/core/components/fwd.hpp @@ -82,6 +82,8 @@ struct backtrace_gpu_power {}; struct backtrace_gpu_memory {}; +struct backtrace_gpu_vcn +{}; using sampling_wall_clock = data_tracker; using sampling_cpu_clock = data_tracker; using sampling_percent = data_tracker; @@ -89,6 +91,7 @@ using sampling_gpu_busy = data_tracker; using sampling_gpu_temp = data_tracker; using sampling_gpu_power = data_tracker; using sampling_gpu_memory = data_tracker; +using sampling_gpu_vcn = data_tracker; template @@ -121,6 +124,7 @@ ROCPROFSYS_DEFINE_CONCRETE_TRAIT(is_available, component::sampling_gpu_busy, fal ROCPROFSYS_DEFINE_CONCRETE_TRAIT(is_available, component::sampling_gpu_temp, false_type) ROCPROFSYS_DEFINE_CONCRETE_TRAIT(is_available, component::sampling_gpu_power, false_type) ROCPROFSYS_DEFINE_CONCRETE_TRAIT(is_available, component::sampling_gpu_memory, false_type) +ROCPROFSYS_DEFINE_CONCRETE_TRAIT(is_available, component::sampling_gpu_vcn, false_type) #endif TIMEMORY_SET_COMPONENT_API(rocprofsys::component::roctracer, project::rocprofsys, @@ -152,6 +156,9 @@ TIMEMORY_SET_COMPONENT_API(rocprofsys::component::sampling_gpu_temp, project::ro tpls::rocm, device::gpu, os::supports_linux, category::temperature, category::sampling, category::process_sampling) +TIMEMORY_SET_COMPONENT_API(rocprofsys::component::sampling_gpu_vcn, project::rocprofsys, + tpls::rocm, device::gpu, os::supports_linux, + category::sampling, category::process_sampling) TIMEMORY_METADATA_SPECIALIZATION(rocprofsys::component::roctracer, "roctracer", "High-precision ROCm API and kernel tracing", "") @@ -180,6 +187,10 @@ TIMEMORY_METADATA_SPECIALIZATION(rocprofsys::component::sampling_gpu_power, TIMEMORY_METADATA_SPECIALIZATION(rocprofsys::component::sampling_gpu_temp, "sampling_gpu_temp", "GPU Temperature via ROCm-SMI", "Derived from sampling") +TIMEMORY_METADATA_SPECIALIZATION(rocprofsys::component::sampling_gpu_vcn, + "sampling_gpu_vcn", + "GPU VCN Utilization (% activity) via ROCm-SMI", + "Derived from sampling") // statistics type TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_wall_clock, double) @@ -188,6 +199,7 @@ TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_gpu_busy, double) TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_gpu_temp, double) TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_gpu_power, double) TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_gpu_memory, double) +TIMEMORY_STATISTICS_TYPE(rocprofsys::component::sampling_gpu_vcn, double) TIMEMORY_STATISTICS_TYPE(rocprofsys::component::comm_data_tracker_t, float) // enable timing units @@ -219,6 +231,7 @@ ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_sum, component::sampling_gpu_busy, false ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_sum, component::sampling_gpu_temp, false_type) ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_sum, component::sampling_gpu_power, false_type) ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_sum, component::sampling_gpu_memory, false_type) +ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_sum, component::sampling_gpu_vcn, false_type) // reporting categories (mean) ROCPROFSYS_DEFINE_CONCRETE_TRAIT(report_mean, component::sampling_percent, false_type) diff --git a/source/lib/core/config.cpp b/source/lib/core/config.cpp index b5f249d4ca..c8a9ba6963 100644 --- a/source/lib/core/config.cpp +++ b/source/lib/core/config.cpp @@ -317,8 +317,8 @@ configure_settings(bool _init) ROCPROFSYS_CONFIG_SETTING( bool, "ROCPROFSYS_USE_ROCM_SMI", - "Enable sampling GPU power, temp, utilization, and memory usage", true, "backend", - "rocm_smi", "rocm", "process_sampling"); + "Enable sampling GPU power, temp, utilization, vcn_activity and memory usage", + true, "backend", "rocm_smi", "rocm", "process_sampling"); ROCPROFSYS_CONFIG_SETTING(bool, "ROCPROFSYS_USE_SAMPLING", "Enable statistical sampling of call-stack", false, @@ -626,10 +626,11 @@ configure_settings(bool _init) rocprofiler_sdk::config_settings(_config); - ROCPROFSYS_CONFIG_SETTING(std::string, "ROCPROFSYS_ROCM_SMI_METRICS", - "rocm-smi metrics to collect: busy, temp, power, mem_usage", - "busy,temp,power,mem_usage", "backend", "rocm_smi", "rocm", - "process_sampling", "advanced"); + ROCPROFSYS_CONFIG_SETTING( + std::string, "ROCPROFSYS_ROCM_SMI_METRICS", + "rocm-smi metrics to collect: busy, temp, power, vcn_activity, mem_usage", + "busy,temp,power,vcn_activity,mem_usage", "backend", "rocm_smi", "rocm", + "process_sampling", "advanced"); ROCPROFSYS_CONFIG_SETTING(size_t, "ROCPROFSYS_PERFETTO_SHMEM_SIZE_HINT_KB", "Hint for shared-memory buffer size in perfetto (in KB)", diff --git a/source/lib/rocprof-sys-user/rocprofiler-systems/categories.h b/source/lib/rocprof-sys-user/rocprofiler-systems/categories.h index fbc17bc7cf..82db6199ae 100644 --- a/source/lib/rocprof-sys-user/rocprofiler-systems/categories.h +++ b/source/lib/rocprof-sys-user/rocprofiler-systems/categories.h @@ -57,6 +57,7 @@ extern "C" ROCPROFSYS_CATEGORY_ROCM_SMI_TEMP, ROCPROFSYS_CATEGORY_ROCM_SMI_POWER, ROCPROFSYS_CATEGORY_ROCM_SMI_MEMORY_USAGE, + ROCPROFSYS_CATEGORY_ROCM_SMI_VCN_ACTIVITY, ROCPROFSYS_CATEGORY_ROCM_RCCL, ROCPROFSYS_CATEGORY_SAMPLING, ROCPROFSYS_CATEGORY_PTHREAD, diff --git a/source/lib/rocprof-sys/library/rocm_smi.cpp b/source/lib/rocprof-sys/library/rocm_smi.cpp index 202a8cd854..e6fbe380b4 100644 --- a/source/lib/rocprof-sys/library/rocm_smi.cpp +++ b/source/lib/rocprof-sys/library/rocm_smi.cpp @@ -127,6 +127,7 @@ data::sample(uint32_t _dev_id) { auto _ts = tim::get_clock_real_now(); assert(_ts < std::numeric_limits::max()); + rsmi_gpu_metrics_t _gpu_metrics; auto _state = get_state().load(); @@ -159,6 +160,13 @@ data::sample(uint32_t _dev_id) &m_power, &power_type) ROCPROFSYS_RSMI_GET(get_settings(m_dev_id).mem_usage, rsmi_dev_memory_usage_get, _dev_id, RSMI_MEM_TYPE_VRAM, &m_mem_usage); + ROCPROFSYS_RSMI_GET(get_settings(m_dev_id).vcn_activity, + rsmi_dev_gpu_metrics_info_get, _dev_id, &_gpu_metrics); + + for(const auto& activity : _gpu_metrics.vcn_activity) + { + if(activity != UINT16_MAX) m_vcn_metrics.push_back(activity); + } #undef ROCPROFSYS_RSMI_GET } @@ -257,6 +265,7 @@ data::post_process(uint32_t _dev_id) using component::sampling_gpu_memory; using component::sampling_gpu_power; using component::sampling_gpu_temp; + using component::sampling_gpu_vcn; if(device_count < _dev_id) return; @@ -273,7 +282,7 @@ data::post_process(uint32_t _dev_id) auto _settings = get_settings(_dev_id); auto _process_perfetto = [&]() { - auto _idx = std::array{}; + auto _idx = std::array{}; { _idx.fill(_idx.size()); uint64_t nidx = 0; @@ -281,6 +290,7 @@ data::post_process(uint32_t _dev_id) if(_settings.temp) _idx.at(1) = nidx++; if(_settings.power) _idx.at(2) = nidx++; if(_settings.mem_usage) _idx.at(3) = nidx++; + if(_settings.vcn_activity) _idx.at(4) = nidx++; } for(auto& itr : _rocm_smi) @@ -301,6 +311,14 @@ data::post_process(uint32_t _dev_id) if(_settings.mem_usage) counter_track::emplace(_dev_id, addendum("Memory Usage"), "megabytes"); + if(_settings.vcn_activity) + { + for(std::size_t i = 0; i < std::size(itr.m_vcn_metrics); ++i) + counter_track::emplace( + _dev_id, + addendum(("VCN Activity on " + std::to_string(i)).c_str()), + "%"); + } } uint64_t _ts = itr.m_ts; if(!_thread_info->is_valid_time(_ts)) continue; @@ -322,6 +340,16 @@ data::post_process(uint32_t _dev_id) if(_settings.mem_usage) TRACE_COUNTER("device_memory_usage", counter_track::at(_dev_id, _idx.at(3)), _ts, _usage); + if(_settings.vcn_activity) + { + uint64_t idx = _idx.at(4); + for(const auto& temp : itr.m_vcn_metrics) + { + TRACE_COUNTER("device_vcn_activity", counter_track::at(_dev_id, idx), + _ts, temp); + ++idx; + } + } } }; @@ -411,6 +439,7 @@ setup() key_pair_t{ "temp", get_settings(dev_id).temp }, key_pair_t{ "power", get_settings(dev_id).power }, key_pair_t{ "mem_usage", get_settings(dev_id).mem_usage }, + key_pair_t{ "vcn_activity", get_settings(dev_id).vcn_activity }, }; get_settings(dev_id) = { false, false, false, false }; @@ -491,3 +520,7 @@ ROCPROFSYS_INSTANTIATE_EXTERN_COMPONENT( ROCPROFSYS_INSTANTIATE_EXTERN_COMPONENT( TIMEMORY_ESC(data_tracker), true, double) + +ROCPROFSYS_INSTANTIATE_EXTERN_COMPONENT( + TIMEMORY_ESC(data_tracker), true, + double) diff --git a/source/lib/rocprof-sys/library/rocm_smi.hpp b/source/lib/rocprof-sys/library/rocm_smi.hpp index ef1b3d4302..f6ea3f6538 100644 --- a/source/lib/rocprof-sys/library/rocm_smi.hpp +++ b/source/lib/rocprof-sys/library/rocm_smi.hpp @@ -71,10 +71,11 @@ device_count(); struct settings { - bool busy = true; - bool temp = true; - bool power = true; - bool mem_usage = true; + bool busy = true; + bool temp = true; + bool power = true; + bool mem_usage = true; + bool vcn_activity = true; }; struct data @@ -99,12 +100,13 @@ struct data static void post_process(uint32_t _dev_id); - uint32_t m_dev_id = std::numeric_limits::max(); - timestamp_t m_ts = 0; - busy_perc_t m_busy_perc = 0; - temp_t m_temp = 0; - power_t m_power = 0; - mem_usage_t m_mem_usage = 0; + uint32_t m_dev_id = std::numeric_limits::max(); + timestamp_t m_ts = 0; + busy_perc_t m_busy_perc = 0; + temp_t m_temp = 0; + power_t m_power = 0; + mem_usage_t m_mem_usage = 0; + std::vector m_vcn_metrics = {}; friend std::ostream& operator<<(std::ostream& _os, const data& _v) { @@ -179,5 +181,9 @@ ROCPROFSYS_DECLARE_EXTERN_COMPONENT( TIMEMORY_ESC(data_tracker), true, double) +ROCPROFSYS_DECLARE_EXTERN_COMPONENT( + TIMEMORY_ESC(data_tracker), true, + double) + # endif #endif diff --git a/source/lib/rocprof-sys/library/sampling.cpp b/source/lib/rocprof-sys/library/sampling.cpp index 6615fcd145..8bd394cd6d 100644 --- a/source/lib/rocprof-sys/library/sampling.cpp +++ b/source/lib/rocprof-sys/library/sampling.cpp @@ -129,6 +129,7 @@ using component::sampling_gpu_busy; using component::sampling_gpu_memory; using component::sampling_gpu_power; using component::sampling_gpu_temp; +using component::sampling_gpu_vcn; using component::sampling_percent; using component::sampling_wall_clock; } // namespace sampling @@ -1572,6 +1573,12 @@ struct sampling_initialization sampling_gpu_temp::display_unit() = "degC"; sampling_gpu_temp::set_precision(1); sampling_gpu_temp::set_format_flags(sampling_gpu_temp::get_format_flags()); + + sampling_gpu_vcn::label() = "sampling_gpu_vcn_percent"; + sampling_gpu_vcn::description() = "Utilization of VCN(s)"; + sampling_gpu_vcn::set_precision(0); + sampling_gpu_vcn::set_format_flags(sampling_gpu_vcn::get_format_flags() & + std::ios_base::showpoint); } }; } // namespace