From 05cd20d19de52b94a1150b14e1c0e7baae7f3695 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 14 Jan 2026 09:52:37 +0000 Subject: [PATCH 1/3] initial draft of CPU affinity learning path --- .../pinning-threads/_index.md | 42 ++++ .../pinning-threads/_next-steps.md | 8 + .../pinning-threads/background_info.md | 20 ++ .../pinning-threads/cpu_util.jpg | Bin 0 -> 82530 bytes .../pinning-threads/exclusive.jpg | Bin 0 -> 38508 bytes .../pinning-threads/free.jpg | Bin 0 -> 32058 bytes .../pinning-threads/pinned_shared.jpg | Bin 0 -> 32108 bytes .../pinning-threads/setup.md | 156 ++++++++++++ .../pinning-threads/thread_affinity.md | 224 ++++++++++++++++++ .../pinning-threads/using_taskset.md | 204 ++++++++++++++++ 10 files changed, 654 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/_next-steps.md create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/cpu_util.jpg create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/exclusive.jpg create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/free.jpg create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/pinned_shared.jpg create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/setup.md create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md create mode 100644 content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md new file mode 100644 index 0000000000..0a393dacb1 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md @@ -0,0 +1,42 @@ +--- +title: Getting Started with Pinning Threads and CPU Affinity + +minutes_to_complete: 30 + +who_is_this_for: Developers, performance engineers and system administrators looking to fine-tune the performance of their workload on many-core Arm-based systems. + +learning_objectives: + - Create CPU Sets and implement directly into sourcecode + - Understand the performance tradeoff when pinning threads with CPU affinity masks + +prerequisites: + - Intermediate understanding of multi-threaded object-orientated programming in C++ and Python + - Foundational understanding of build systems and computer architecture + +author: Kieran Hejmadi + +### Tags +skilllevels: Introductory +subjects: Performance and Architecture +armips: + - Neoverse +tools_software_languages: + - C++ + - Python +operatingsystems: + - Linux + +further_reading: + - resource: + title: Taskset Manual + link: https://man7.org/linux/man-pages/man1/taskset.1.html + type: documentation + + + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_next-steps.md new file mode 100644 index 0000000000..727b395ddd --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # The weight controls the order of the pages. _index.md always has weight 1. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md new file mode 100644 index 0000000000..25559c6b9d --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md @@ -0,0 +1,20 @@ +--- +title: Background Information +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Introduction + + +CPU thread pinning in Linux refers to explicitly binding a thread or an entire process identified by a PID to one or more specific CPU cores. By default the Linux scheduler dynamically migrates threads across cores to balance load and maximize overall throughput. Pinning overrides this behavior by constraining execution to a chosen set of cores. + +Pinning is most often used as a fine-tuning technique for workloads that aim to consume as many CPU cycles as possible while running alongside other demanding applications. Scientific computing pipelines and real time style analytics frequently fall into this category. Typical applications that pin processes to specific cores are often sensitive to latency variation rather than just average throughput or have intricate memory access patterns. Pinning can reduce this noise and provide more consistent execution behavior or better memory access patterns under load. + +Another important motivation is memory locality. On modern systems with Non Uniform Memory Access architectures (NUMA), different cores have memory access times and characteristics depending on where the data is fetched from. For example, in a server with 2 CPU sockets that, from a programmers view, appears as a single processor would have different memory access times depending on the core. By pinning threads to cores that are close to the memory they use and allocating memory accordingly, an application can reduce memory access latency and improve effective bandwidth. + +CPU affinity is the practice of binding a process or thread to a specific CPU core or set of cores, telling the operating system scheduler where that work is allowed to run. Developers can set affinity directly in source code using system calls. Many parallel frameworks expose higher level controls such as OpenMP affinity settings that manage thread placement automatically. Alternatively, at runtime system administrators can pin existing processes using utilities like `taskset` or launch applications with `NUMACTL` to control both CPU and memory placement without modifying code. + +Pinning is a tradeoff. It can improve determinism and locality but it can also reduce flexibility and hurt performance if the chosen layout is suboptimal or if system load changes. Over constraining the scheduler may lead to idle cores while pinned threads contend unnecessarily. As a general rule it is best to rely on the operating system scheduler as a first pass and introduce pinning only after hypothesis and measurement shows a clear benefit. diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/cpu_util.jpg b/content/learning-paths/servers-and-cloud-computing/pinning-threads/cpu_util.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42027aed2405b75e858fdf28911fffd98d8f6f31 GIT binary patch literal 82530 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
972UTV;qGfP&?UiEQ&SsWaG$P<3r8~LirUscX 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

^aG&(JyQGB$W`BnNOR z9uGVI*G)E%i@=cXcfn9Z-TMnm$kK&E%&`1c%dtI9Gn#WSUpHW^bdXP? zHu}eDU)d6$OW7x?Rq6Y{d~dA9Cf2f==*s# zk7GdoPaM59+wDz^9&vehlRf*(OVpzcX8ZTk@q^>wc0I*4fBOB5h}_$H%MZ%K>*aZ( z#7Iw8%AQ_NpwH$Gu8ja!tNyyOPya797vTG4GHq>>ie4&;t=?Ls6lR+<$4?1SyOBu5 z>n`xR-Qpf~aY2By-phhC=>#R~&cb9{xQP)*#Lb(&wvrp-gXxyfSb82c5OQ zF{X=nV=|6_QU(HbSf_L#o{*w*tGI| z9j=s@u34x&Vdj6Aj`wZzJ98|ISt zEH_EAOdmbD0R+@GnNimXCuafuGZ^!_v?|IW zLu-eSZrWHhuzKCVsX*I^E_`w>$BngP`iLP*k9LqTFF?ofg{iep2~x&j@)jVoCJR^r`ww6s?3A zJmQy7ar9fHu;)p!#7VLnqtQu(|4Z3OM|{B!f35RQ$P$9;i*=FEA1@-2h^ z7$nV^yuob{B?AND*$8w&bvLtg#4A@sekh>)7)zERk}5_96&4nk((myCapIFPyD z7fURao*QxC51c9obwd_V$@>8z`i@KPv&Sv^=?uUu1`Xx0-v|}c0ErncJfL_I1}85H zIo$F`12@REo1j~4RtdYG(ZDsWDloR5$by5CS`-A*RgW@4z|@s~EP|@qUk$OIhEf{p zeS*KS9O>G{h!jL6SL0V@kDz3TK!J5Iu5&j(mk%bCu@rnqy_C0L;meqKb&Tr9pdT;K zS@| zsaAzd`Mtj%MZ%pLd8hL%go|O!LAKxvEUG-i?IfvC?}N>J0CV>f<40O~r|8D*FqK}o zHtMbA#nHP^kRdLz$^MBt$Qvxjx3D+YkzU|)EpY4UcGRF~H+@6C;$aK^SL_%?s=4FXnZ>j7cv@-Hf1#qy`=Oq2o=&~Acr7j+LPy1q2 zH@hfPBM^s*c7F*Xy2Tn3{&D4I8s&GtdL2cig+_1WMVSxR{2bi8my|I}uIV~|IqpU~ z5Lo?2)(ke|R+|zg>2A#pXazWF;xG4sVz>`h|CfYyGNys?fZI(OYu{&kz(N%BU2-X@ zc)bFm#ZuC8ceCPGqaiNrc#t@w+~~rOxd#1pztj#EEuX3_w8}y}j84GhuR0xF%VEFh zZ+}Q@H}WBql<+7a4MSR=5o8H< zACG|_i&Xvi-Z~gbqN8ULf|=r9Ko=!E6vX=m4|L{49QvTsG7mt6wrPz9Ot3pqzH}}O zq_7zkyTb$JWqpr-cH}mg3{X5=Vu#`s>~@{zXjN@ZDE8>_#zk@ zV`)7CeQ>JTq~9thS#Gm4%G=NY-hI?lS+`UIO%LPxmYY&%vAe2|dFTAUw1ofu!I3P0PiN;e&4Q)w^=nK4XbK;qBBjB*POwYeH zh~nTD-w;88D$%N7?{HO*?ydc+x%{6v!dSc~X=pPa5k7J2z_C&RC~5J3u15UVRwB+O zpcLL3?VSaKbU*av_!b^$mn&=(sAszml;NDJ&~J?3tnR%BCEuknT4^)j{|d3*j+{2{ z-M_jVyR$r8Y00`&HyTX+Ng+t)DE_q}WK%|p;`OSjzOAB$ae{@%?m2w0mReUN!d_HoC{fr%cI<-`#*| zR78#%M{-<#_3XOTh0QS848vHYwc_1qjvB^c%2fF?3jwJ)n9rDJysblfz`BKH*zR7! zA(@637wE+EjShF9NIYvxHHFyKZctp4DN0jIxW3BU9^a}m25k;%MmpNf>I|QU*%fe4 z`V!h$KkoX(e@2du<{LefNmnRga~f2l^+({^@1~}?`1{q=g1YA!wxuAQ2*g0?sUZIe zI_C#XfW!0bd=s`f6+xlE4xC?kuKg%Na0Ps)XviiAG@hQ@Z2rBF2gE-~jrzf`Yy+zr zjGlbEjP3k$-xEIqB*5O`pyssulpW=P5_agFEGMcr^coZ)SV)(IFI8wj?O4SF6D;|I zMjfJq=V+QJP&G_fG@|1ap+4>X~V)p(Gl z8?BgP{!XDZdt@oJ!Hsi6{~)2hyQrP{qj!eSlsuI-Q}{u2UstiGqMg5TT1)$0PL5tv zAoetVu9C8?|5m=;9_LU3i(A^kd=qJyf&ak`)l`*`1!aLgs^g?(lK8u!f;d z2mccZ>!;GKL-a3Flk+=_POAN`n)4{$^5A{_jl18O-({4OTw=nt7Pt)+-N7HrE*ACz z%WUIcSIfhcTj{+g#af(@7EOauSTBt$cxDJ=aU&}$72g#+ny7dYPPUo*Qm&S>o(Vqq zUIz_i9=rm1y&kxXA+kaYN(?ozjKA>d2ofzw`QT;A$|Jan#dst`gtcLmKz?a28j!!! zMx-5iJ#rX~vv=`a=b;Js(-x_tsg@>m16_*QNVj|?)A zrx+R(SP%NpZyLf}&6)Vb2SQ8VmD6}7E2EwV>{8F=DTZ=5S?|c+rLJ02^#tVsA-k5k z%_zjH;SA(s$XCsRlf*H*h7Yt($T4!l`Glf28Z|o5sp;nkU)g?lxdqdTlNFaiT_bsv zV9&IiS}U@&^+b{6kNYAiz zOd0wn&9fY%$7RB2!(_WqOS>cPp)DgxThtTKGk@JkJvzm~V~BD%3K4k@tU{&%g{Xem zc`)w$$T6aU9h~gw6UTbF*I0`Ct2`YsA4Re=IX$u}gohVWcJnNIqCTl^BUOVGKJIlG8l_lpWPY@!V}`nP z`=ewc3zv4$0K(l8y1O)fD5{WR80#WlzP|4xTQ%}s(RyQy>m`F}wWqwIsxcdcFbQD5?Optqin}Dq3)50a8q&DUn)#Xm5Yr(}4 z6L2-7mmYddIA=z+nfmnZhkT{pHkNN9be)bwjCy+id$>Q4SW2gT}yAKiC85p?z*j!qA4M`S9xokKw&Qk?%JR zx}TO2f2XDPiLfW}x-yUwrlDh2VG!^YQ2z;lX1~!0vEwcW1uugLxAEuZ!A2L|jEU<7w8EL5BG{Z(pC4R>1i46_ zkCYeJoa%R{dp637c};k>c?4ySM`o+|r@{7h?!C2GS zupr~`ssqgTSC!l(?nh$P6Dp7&R+zO3Q`bGMqi`In;#tOd?aou9+H!6w7lxWinF7~X z-jXJC?&QLL*Uo?ZD*JVi2;0nqnKU(S_eh_UWzN>MQN31%#Jy{_=NA?DNSBKPp2P8T zPSER=$w}PL!){o#?ukb}n^_}BP(U0*V!Q6rohDf);Fl=WR-G`uHnI$fm;99lEz7A z#tU*9`hg6OrJW`-g|))GiQ5AjIJ#aN==2|Sq7?l7!NM2N%LxjCT~vl*0v+d4RG{EP znkGZK0sIzjRJ)ynHs)iaYcUM^YD>{^B@vrX*Vpu4n{t%Dwf+1M=%n))c=LKjVchJ! zlKs3b8nE$^Hgl2`FAe02GVqy*=wzh0L+gXPmEZPL{I~wPBbLQmFl2^zWm%NJzZ41UbB z3AEMc6xfri!iWBqqTAnJ-I%Z55F~*H0-PkU3=MRL_3Is-9}g4?sL9W|8>@&;KKc4y zm}xB_sx~T$D8tI7G)he$%u6rv53@8h^K9l*Dbmm2)Jp8lJrT9y`eGw)XPN7^f2$^> zp`_KsnR!DxBW>yF2UaFa6^7m5`6up}51SlSt#zBSlAEDf`mmQcrFL0!!gXzXIK}+f zs=Z$rn{J>`(>Lf#PrpB`l$R}RxJM_sICAMW)xArcbV$D`itWqg=P1-GD>nCvuME>6 zK>%Pr#2e0Er*}p%A!a7j@4Vb{JP{oq#)zt>?E|ekZ=&12T3B5tEjS%<@uCzVT_2wu#P$vS0%>KCy{15-7Pe5VF~0S z!>b)>Gw$>* zj|aF9C2k(5iqVhfD!5>!eWA=PtsZbNVePtTI6&93nDOta8$z4@rsNjOxf+CDPjPJ`LZY%Fa^S3^S0=Q0sl|eg0_j zcDwlDOb>C5%&TAt<#*NzkPpCcR656gu!wN zV}6I(hqaPhuZjBo22LDp;HrJ5`yzKer|~pamI|(vpK9#+i29fH3Yu@D^q@vh$Nd^* z1Za&EQP2$q3d74F^mEb0C^fgvq&5~ zA$jtK=#lMQnRcW+iGb^sk30>y2Qu=X5%Q2AzDh%SZoQ6qk_LG(_`Nk}ZY4VHDIR}& z!Zr?~M`7f&xJ27T9UldG;iOIshpWzr>0IRXO#!4!&z`ioqUYO)2#+_p=W%D1%KN07 zUKtyI@GA~8A02wW(mWjjNn`JwwO2Gl-C@ywFJCAJ2K8#KE_X zF5UOqY*T}_WqBTpCW3^da4-qMS?;!4EY~wE|I+Q-3RjbqN9dydyB5@vayy+H2kMZk zH9o=c+_Vl6f~DdUy`yOCe78N)dZgy$Oxif-sdm@MpsJ54C`EqeN_I2z`R9V|QEVOK zp@Z*>Tgm5~YcAJZ_uzfH{ub|UkwRnO7K{6Zdkzn13~>h>W2%SYlK;-eufI}c&k3Ct~8=&LXf%!`WUO)P!r z8uHU`Ux-w3SMiE9^_)Oywk&hS+$H0>)WQgKiz6mXXAZeI6DTO`;tZwLdZjhW-e`3E6WLnKD84zWTj zDz24qesMUvt<2a@lPBZZ)@J=Wab3KI?!6*OVtE5h$S7-fVpHdOSmXeLwN6M3i;*y} zgohym;xC+=)iZ0QoLo9*qgKFYZ*VNsjR&q>oYx*q)nw$}t#Xshp$&jWxO`aR$n=u! z<*|uFbxMX--<*E7;?D2{k<%%D^IGJ#kqHf}vtSFeSE_qG?pVd$i||Lqs~49ZniAJ1 z**+p~Rnd>6-D&bZSX4@dxKu-KbAqozfW!LZIs;)d%3xybX)c2=!`AUjZwHq_@{Xrn zC7qq0HetOS<7wGmH82~drcQZi+qtMuWHF(k%4QxV-Vk$5SYGchoJ=BfTp z))yxh^6HN0ekQ`(rh6Y3qI|CULC!Bl7Z-z~4ng=MHK|fh9Mv~6Zty~_-L|LB6ER0m z(r%ZWpP(PQW&Jcv8>~e1o^m=8kI~b3V8rDMpPJZC_)_6*qN%9tzfyWtk)-_rW6)4I zVLJohHH743QMhIu;SBcIw3eFkdt|~ke<#A*OB~dikJC4*19Y)j=RZ!DIzBP3P>LIB zVaOu)*;Whw>~?W!iQ}>#feTBk(K~nhz+h-R7g0O6_q5EtcdxKgCqkn3KW}$#wL9N5 zfEs;u&~SkcZl#12=x-1q{6K+eg~1pNBwwrwuIByh(IDF(q$*7qR#bBROOitHgIAgr zq2q9^gN9Kdu&5&et0%i)e8;>AOk%J+2h(o_ILFl|Mkpf?ISpom{T!9nXUhyWyD(Lx z_#NciyR)qZ&9B^-Lk5caBgz;Lq9e)&LKAtx=D4s)(YH_puW^4gdCTut%ZbKP&IGr_g|ON2<1f%+5; zUZ}sE+A21iKf9Vs4Dt~~qP%wKV%5iSR92tVd)u4$CRpuGiY3Zx;5kh;(ou(KiIm!i z&7PT~s(i5UAwz8H3$~6Y%vz0BU!dS3Q<&@oqirxil2{otDg>j-#=ZX{=7FpS+HMhx z6fVgtRSim=>9Z1X)+lEP2#>IuP*E=XDR0xaD3Ov}n$fZiAo|?v(t5)@MRLC~r9L^m zhve2|=LT$ZPJ&b%GvJ!&5-=7ODS}KgNaE`xAT?CW4I+g)q?(p&{s#BZ4%IX>>Xu6R zlUMXTF5Iz&NQExAfs zTa&#e0CP@SfQC@MUO4E*77!L~W@YCr|dZ!^>%UFZ$`1>?69^;f7aSeoX|* z8ZBrrwr}jhYT=w8+fVk7mJbU;RXbpV3+iC8nkPMchnK}xd+4XiO7L6m`*NG}`Lnag z0yxtzOPk2X0t}b&rq+pIL+{6OhgP#v!D~csUdD)WdobNRp%$Jjs&L%fU3`A#GIdki z#%RM?g3Di8lhBhEbP_FVUX=Y|Wg2qA=_-_`x}__Qv)J|3_M$Ljp5?d*7G_~e6#rp0 zkQz=exy=hAOw%E(jF_>q*RxZUQQA~pAAGBaNgsR)BFi2><*5u+T)HxF?ImZ;=P?h0 zJQD)EA9lG_=-L+Hz-;5aCjW!UpD?nQOO5Ak)pAUJwwX9wX!nx@ne|#OL41`?U&Gp- z4EGA~I1`L1NLNV%k)7+5>n-pdZP?FW07snV<}q+6^r$KL{lLSae08Rv99lNSM%t*%>+*?M$327Nm)tqcLClJV&%cB=#9eA9ZCj&j{wI ztZziMIEIi_e0?e_ZZpV4!e&Te+v&z#m`8)axGh*(H-54UiO!gK@Cx(O+rmcskF$Eq zRY-Yp8rZ;!g{*4guCz>D6{Mq82}0(CvSpJE|B4y$9s&y&0~?Ca#_potBbd%d(*cXL;RMONCHq0bwV0z*`4={m^smAQbsFRDEBDW`Kz zk_CIt_}iy7dws$7a39niR_SA^kBCPz(u4>>OxtwTC$L4WnD`m`>abpdh-y8T-gUu~t zl^a#gKx>2tu>+*-=zY`?pKk)dq53ki3yICAlQ&=Fj8(5T?}XDGHNLDpM{OvVij2oy zNdkccGWH84B@{yh;wjS$LUH2Gl!fGc>5B>kYCHx?j8a>;tmKT9_H8X6_j@dSloN>r z)L%;I%Mf~9Z@ZSjOwJ2={aL9neWE@qZu#1P4jNkYRch|D6_i3bsRW;xx)|B?gdn$v zb6g5ae9sGw%Vr-j^2PcweyXujx^~UKLK!;L48Xh=9%gs3r(|HzF%BTj=Lxh9I~US& z>p3YB58{t@s%`S{_213x?LE4&uyvl#vLivha3dCWGJkWxjBsD@=*$No!tDZ2a=cVm z5wo<@HTg26`BY>!JDREH@rEOIoG|w&MD=QZhm}lDzF_E=(3Luj0E4DrMo6}_+bQ5Ehy!n&& zRhAT^EMV0XNrp3-P$yy$v>hc+AeRIUV+h6kjaFJrY{x)G#@zgB@C5XucnSHJ06pSG zEc{|&Y>4usxj7&?H;WX&BEbFr$t|*2uTM744sVD8$CE!2Fj!9+8)KKzo~4zpkUY~i zU#ku$>3h7s`Y^^rDzQa735REr~eFF(VIOS^!AA-(AA_|mlle+D2W0@BZ z%L)A7z}iT@l+xrzlT#YV8`9LLO{9>C+U)FL;Zmuk$PvJSS!oAC^8wt8hmreo|FwQ} zY>JCT|HWk;EX20p3yrnxEIAiZu!Dp5+H@U+BE_wB!j1_Xt<0~*34Z))bE+ri>7rK#Q--6fJ%3wzVkb6 zog7;9@OiS%;?WrnBrw+YeQ(2ma{HJ5`QO}MPuoH{ClwpVc8bZ5Nn^(zz%3kXiIUHv zoEyu_A8bjd3Ak5s$zd+kl?SC&GFB)r)lML~xPIh(S;i@Sb20^Y-ZMCa?=LxGVJBp7 z-nuj~x2I2U#aXQ8at)Q{Gj~avjchEC0f1crf0*;{wwm_DSs;@mQbSnRnzFu}woXLJ zwPsLi_Vi4^FROgmpmvypNXCZ(C%_jX7l@aE>giT{ORKh27n@2w)SFhpU>k42WLs}< zCzMkbFjF+7$FdTZmr%V_2;ab4$o~PevT2+}l5Dx}Qe?*sU6{$3*g_-y%w~11%8wFD zM$zEk9tiShie;MLX1=z|L-_JBak%kxy;25>H7?wb+Mu-~t4Gso^W=19mT~ZWZ9OD& zgUhljQRVtHko*jN8M(rwer?JP=~;^W$ChUwSm4}IJj4S!TPdT%B0l5@EaTnjd>kt1 z99EURkWhO+Ku}o{sp=HTB^tceZH2S|`$j}3(Ke5qs9HB(Fu$r*Q(_mA(vVsG$OG;9 zEgg?yRveo%zDOuUB8EXqDrmG}c%{nwYJL6DjK*!arG|3JdT|a4+ucDP*|aXzAidv| zUd!?-YCSl-UnSDz(bB|qvGzIya10qO5KrOOr2A=q%f(-#A+au8-2|I>GmyvxHO{lljy}jY_5J(vMCvvhFo|6ln zAs{rq2%aUaNCHl5^AvPcoO)97Aj$yl^CK#_E0p7MJUU_L23LW+qouQ zcM)Ehc9y^&Wlar8IVUZU3{KSJ_Z{L6`krb5RDJ;8%;fzSQFYMagHS3;tK&m`;eXCG5b?4vwQvoAa{AIf!9tqx!gxn(TZ%5sKX zZ-h;x71V02sM8!vzCP%ee*igw;x2`v(($eE=IOhh+>-!V&k@U zF~!R~Ln~JFJjg_s)lupcbOmOTj@qilH4SUmCfr9JKfl}#%R#12$z-3c#3R|RWb9l}1}5o-Ri3`!m@A6c zccVAUchqBfP8cni?J%@*r@SvcQX%nCmNzh6b5^yDzDz)r;EC1p?1DRc(o)QRs(4c3 zYE_m#wy9)Eiu~BK@~Xg$SjEo@+wa#8umZC+dTq{n40)yTV;$QKZM?=JrsUS3CAI3s zI+a*5Z^F}p6cy$C5D5_mQ&--y&}71eiy?aToMj6?>05oP=WB2SM{(ylgg}#hDT_n5 zTD6K8@m_E{K_3oFA;0j&R$u>GyZtL()ruh2`pKMr*0q79K0ymIqxM7O^ufbt6bM)N z;*ije^s);mO7D`3pW}F|3d?;z`>K-`;#<>U4ls&}Ny60FdaU3#Jr~7LD|j?qLxCFD zl{1v*AbDWcs5&l<ZSNR2skc7i?<1nvpk$Im|JLgK<^>u) z-^9|=^wVR|2PebzHSR9Hh?4?kcS7UVy8%_hjshqX`;a)7AKFtSe!uz4?a83soC0!< z3{~Tgm~EqxkS^^AVZuilEMythIr74|C?Gg^dD~s|UWumWhDxZiWd^2XY-ocroLl^95vEax^rc7p~5aB2Eplt7kA$_j>@y@U^gUSS#Mro%Iq5U9r z3T(^NAjmo?y&NkQ&m!!_VUc&8bX%e-fzz7^WwnBkBP%hT%gw#t;9{I4U9#J05;PIN z?IOk;&A{2C*WU6J=c-BFJu5IE_f z+F^w#Aj7{3iQ3^eF{BeNOC{(bZ=ARzBt1Bdsfxq0*?KIFBjGOqfM9iO*nGT2n?Q@I z$v6kgUyYxhsZ>_57EBJZrfZKC_g37QCTtlM-&0D645Kp~>Ut=}x+c~)e!^?6`nq;x z@QP1vAqvyW8<*4ilyEF%YJw?aW;5;)Wk+QlS=tvaw-!(7W^DJM-ekqf{#tUEsg<1y z2zZqF}wQ}VWL(* zShXgkEQ|+z$GnAJ;3YGU_5d6|`mgYDi@AAKB^8LBlQni@!zch`_W;uJ>|2nju)^JF$!~BeGalDhG(Q#Lfu)P^ z%H~@u;4S2(xLwvqV_nMj*dcmp*t1xj=Fat84p~W&?yYd{dLJV{LFo_7$j`%8OeW7h z`rq6E*qLv`Qv2G<7Al`SMKH*K#a-hmkHOvM+gmJ;KTCeFI54^`!AI%cOzM~VtPSGJ zx_axlT?hjHjqI-M2UCN4)I0!ou87aY4cu9$xyy@jd0P!YMAO246sxW}G}jEkis?5w z3+#iaGn*Q$FX*Hx4hA#Ci4H3kSG2t@6i^2dHaC}Nh{)zLa6-+hpCA)Zmh>SZ>f%ic z#Dm38imQw@jjlzf8TfYV`TDo(Enp$1oi6fdwj$$DIkp*sj^G|;*Tq&tZh#%D(WKO- zaewr1Pv^kOWMccmo|~U*(QdA(k+2$yGh%$uM}mksl0)hV#ckPey4fxVZaP@ZkN>rb zDrG};2|L;r+p2fHyUfhk)kOA>o)Z00R33byXtA3h*E-@|CK|l?f^f14J5fQJzRl?T zrGoAtbJoZMeo1GjR|P6RxnNb@yQejczEqJS2;??C6)q?p7rJ)FPkr~&YLl_&>@Oj> zXx;%Yh{tD&GPCo1ReQDIKHn2ws_vMKippNo_DRLY9Xn$9RbA=X*bcMDs5w9ay^%L< zpRP}wXcFddudMx(4=Exc6nWl6M!}Lc~q!UTv9W=#!? zjn60G>DQa1TSGus4cf|X+#9AAOz4}Xj;=-qm}l_f(e@N6iT1GVWRq`ye?Z!@sK#zz zTw#??gVaSAiS1o{t=CqYdOQAFTH9U~dMBO3+mKwxSE6GT+olhykIZ-1j%Bo4PY0j^ z{(Q?bBb7he_oIZZoUgpYC60csn$(oPK;Y#1B0(gM>+9%l+Ga?5^Fa)$JEHF9enR1r z$32N9j3+a5B15WEmx5}n2Rkz#A|EhA5N$ke-NOF%f}wZwhWOVHl2xz z%X7tsDq0aFRwfQR)7mkZiduq_9f}EtDxqat7`ky!YD+r&Qd^>NTg({WfGX_U)M{M@GJUMaR}>XnGHmlM{uA zoKs9{G1{`54yGF%#NxOh=FCroeQ>6_^{I;~8^Q0OsXwgIpCxQd0)@i9i3dS0g!Z8a zYee8TDTB2PIfLf(_oLS+=2^m7qQbV^at^9}7+t}|E$o3<5pG_Q#xZ4Roo^Np2IoEx zfTW#w{%)4|2j+}Q?irO-q>W1G4v-CNd|PUtIM>Ff+gOjjzs^!u({d9~6iedoj55_` zX^j?#fn~tL#-rGIGzTJrkcc-jRE2T{EKE$_fh*eJedXWOTS3-|n^_8_f7rv1Z{B>Y zRj+tG+9sqKuL-^Q;NXr~g^yEhjF}k7lo7ke5$;tcE1*U^#lfHLx3kCokZMM;)X#Wl zQ4ry{(%VzSCCtJfJO4Hti0XlX_3QH!St6-6&@Jch)4g{_YN9qT9dTbb>B2!jS=G?qaE8sJ>85CKXZ?9&e|q$c8c9;uc3-%B z?$KT12cq4+I2<)FeL^#oOEcU@P$K5fx>J)10-;%I8Nr+>W=k)9j~`uD-OgSuf6Dz~ z3VxJE?6SG~z9!MMK3)}DZcBDjBzNF`5*& zg`dpNkN#=3(`S!v0D_s0GVchiw=F+c{tK^zj!kwP`={$k|8Z%6Y=*+$`v9Kwzh;R4 zm(Q@b4>JGN3D7KmWom|LJka;Rn0>*lZ!RZ8>Ju(HLsb+Dq!#|eGvvAT5F0Zbujn@v zGnI4EDQnlRGZ0%160G-IMU(dq5Ng>Fb@mq;wlk-E+0PK&Y*AZNKlatZyXa!7Zi&jWv>1o$hq zTw+pE^3DgLm$WQjkpx>76x5k9cJigbtAO^dV%X1F{uyZl|IQhIzAV~|pPB%r&G<>} zOb`b+Jub0#Y!KWV3?UKFr_40ZCkR6_UK`JiJ|TYZ19+f0fBs1b0pukC$iu+pXTjgb z7AekRdB3`ahHSI zd-+X;*h=N-dW~!kWsCNQVNcQ*r>8}of5`1}jWn-M0?3#aA^;wUpMLkmjqc9PZt&*u zyvJeQ?;@}QnnXrz%2lt>%P5$|UlQT(u)wGHAbjaTAg8Vp&B<>*NZiys-Y)W3cz+Ba ze-$&PWhINJO*%y|RaGU;$h*)ejHXiBzL3P{pZu<_YnkaWSX2v8#qbW^afsefT|sZI zwo@+10c*0X@DFv}U-rrWrOH1=djC_0`FhwC<8v4My>$wb)Lklk3H(uA=;ajV_plvL zRI3yTM3BhnAMeo>k<$V?F)yfM6R3Q$H)Xm(0L!kg)%`!(<3>jg)u{f1e(k&yl_WA~gsRBS5G0q<`hJ+GZ6QdIk*>uGiPD(DEj0 zAzmu_%K%nM`1=8(;QqVDy5vdm<>@5&Kom%I=mhW-@4krx@AB%f-{24(Qf^GX%eDWy zH|*DH`Tvk>|IZ#OEUrt1dBQxrtsoE$Gu&UK9!=2bNbsmku)AkBVvBbFFEc&&UyTxz z+uvo^|CdjKznzwxu9lfv0C?_CYbFOdoCu=|(>rV{=phjF)!@h3jqw}yMhZrB3EB<- z1`h4}z|5?`Pn%crHtf0j=0tV%XgElzLf{xUeSmK9zcq2+ysA^sA>=K50v4%mtP}?o z(xrQu`jkrdSTl%4oj1S7F8^lBHwqm!s{|tOgmYV-iJ`O{5_l5f6DAC?G8Bdv5PRK- zNef;8KBhM4w7AQJ(?Nl6Ku9VbmX zx{{}Imfz-?fu?U3!B>+Gi|n;Sti;*wPRA*qpG$mt zrWS%`0m8+C?@`~Zawnf?P++Vj)*Ibfz{&jJV}$>NTr6eI{PMEy#?!v2tF_vJ>+aF8 zB@;3i6z7oy3%^8#iRvj;e7>Xf>q$o6fpq<~-qp)DiqH_T_<=5z&o5R|V#;^~D$DY6 zQswWzWd?M3-rfTg#eY1_DVNn%ch&|W5lqV!jk6Yeh2~TrG9*Ge`7(9zjzbQ;YSy`n zs)FDSi|-euEJ;`*Z&Zh~*U96%tz=C*s*}gs#*#ME!4cAmiFJxV_PFbHeBQpG_P4}a z9~P<2QAJv@X*F8J#7)z^5l7-9Zc;iaI?@Df$Zpy@TbJoqmr)jmz`7$}OTnsywU&8! z))QhiQ8&tsN{n`Of^{ug7RBZw(zGM-)Wx)BQ$7$LIjszVQr>vqZ#bA`+)f3?v9zUr zshY2n23E`>sO-|;0%Xu(M~qYH13B~vWOox_L61kXkLt2WvB9Ij1fhW6Jqnm2uH9Ef zT{OqGwGFaNPlhT6~>Vz*EQSv}} zHdfaY1Sk|4eU}LOgM3Rfkcp9fAJyc%N|%fCOimK1)7|bRG%N=@SL_R(cnRWTZwzNR zAo~HijnUuf)2!NNf?oBD@x%%TD-aiN`%5(m@+WJ1a4UyCA!ztMBIVWP!+aP^bg~{* zcDyx;SL@bHwv?gM3Lg7#B7$HCtxme8kp{}tjcT2(*52Njw_U`W>g{4u;++NUBIqC# zxTVP6))zP_c^<|pQ;4-_J1LF!V)1vEuc=L*L`8lwr1IpuQEB@P4k^#E8gz&Gs_5Od z$nqM=$v5im-{4@qm-e>%QWNG3dle)Ej*-h?AojY`s}HN$uR4lB6HE50p}=TtSm!Ca zzI#lBWD1^c)+RAM27Ig2;?>KVuK3k;1AxZ1G{u>Tk33a#t9csA`D{;uym?=ZA|%Bw znc2P;7ndFxmpB@}%r}99p0gA#V#9ds=jb{RHg;LMe$HV@psMmJQ)Sy6Jz<33_ohky zu|*Ur4Yye>ZEt7;{JFntKR&9tohx4YmNdiO$J-PKiU@Uds+z#%Fw>Cm7A{Cg)DW@r zq({D^DP*FEthTW_eD<{;M*?afsoT4iT%)fLwKHn0-V_w0I2HZmq%$&JQ%3W5n0yQv zxR>fk+Tl`GPJ`_5pH)a3UO@dB<5!140hZ>j)i$pqUPtm-mEKXJvG`2(-V2V#$(B2q ztLJkjxuJ-)PgdbUiIBjufuKYTOC)L8+t3Z^9aIHV1)_(TJvP(QIur@%9xmaTEke@z zO0fsxOLj`-V@T^t?M+8T%(NLx^)1}{&;DSS! zGy>=&vEF|FfT$12#Y@K;5Q-p97Ev5UDKK{4@+0oRk|}@~LAIiL!c} z@Vhd@!LYO%n(5Z}oj!xnzY#(IDzPu~o|ym(zU_a!J2Ai$;f_uKr}oCqgtL{ulrG`J zO7oCoc9>b$Y@ZevZkNXCu<;A?6#pi&s<;fnswysgNKL{t<0G*$Uuc(sRv+?yb#hFj z;bJI$uT*_WP&a?$n)?W~eSCKJ%yD^Se-~kbeb{0@ose;gbhTcjRvLsde$5{BV}9+_ z$8>50ZoE$qRsQCA`F)Mx|8+}iQWx?SeA+>; zQ`(HmSLvr8qJ-V4v?Idt?BNHmDSb^f@Nha|59?;Xkei3I-Nz)f$_TekjxTxw8Di2p zz-a?!*0=Uy&puazgRL8Am{b|1b%GFF<*475?lnXcms!z)_D^yK^xK=z@ zcJI^al_+Y*i1bE33B4Nsfo6w^3+&q4Bjt-Ow9JK;a*(V531Sr!@=;O?K!7l1c@bt%!;SXJtz`7qboTvQM#a+ZaPve z>n&cW9Ak6VE8>D9wME;Ax|2)u>(tdiegVsHpQH8BV(hi^dC=t2fu(+1@(G7$j;=|L*12w(vZ6&FGc0W$y0W9am`TmP(M4^0$KW z?vTUB1c=d$TxK?$O>Et=*7Ifb>~t3mLOJRZCWx{d_Eko!V{5P3EH!HHDA!X5D-}i> zcyp(fT?ImS?{P*Ut1b|E*h=O<+io+k3*78j8R%hpDURf(c` zlWq0CLl;uN7UXp>oUY6|wD-5n{V1S1LanTbV@cTuA=gD3@trEL;buq{wsscrSz=q< zC25OuCasiEm$cMxx_)C86li4tM?+bi{4|Saz~wC;f!)LYTi?Bid=teYY2O8Tam^p<`iUV`X7tW@hIS;ATH` zjFXv}NAl<~Az?8wF*a^#St$`20Z}m#+(U?{sHmuSQZww@#UR4L%pvj*|F`)XqNODI zOzcfUbO<7*B_g3E+I$PKK@brc=q;|pzy3!=OhQUVPC-evV<%`(xCbI8A|W9rB_Sgt zB?YZL!F7m~mTWJFumbr$%}W%AZqSMNgg>R^Jo&PU{zCg4m*{0jU#cDZ4=^w?9X`U% zbCg$1TtZSx`uM5Sib~2Vs%Nycb#(Rg4Ghh%SXf$JwYItG`Sj(@=2d-nq) zA|FOY$2@u*o0RbEtub@dI69i3g>J-zQg^bHMeZ;1d;qQtlvkrZCtcqT*RcLB%~C$aS;)_fDZ{RDH(?_`CbK0 zic2^49TM@Oq&pe@^ko$lr|5+_`pb^(JN9#l4IQ4x4Q*>=e{W#E|D}=rKCtiO>Vv3B zh`{2J&_Xb1b)6^4d&mE#&%(J|b?OzU?5yBZZ?sT%1Q6CQFR46f7&{v|c6@mx#a%DE zhb-joO}mkJGb1++iQeewIVJD-p=1GdCE?IGbA%x@<{_DF8#!ed5S3ybYZ{((wew_7 z4CSZGr`xlF8MH4y?d4y*5~55IsXsICuK2>lWd?f?`%ZwWqo!SQc<=jx)uP$Dcli$L zqOsqWG-z5cWx7TW&peITr8{F8d_LkNWjN(EAHOJB(V9!vatG#>d@Oc{Ua4d)>&$Mc z7x*?3*{Yxa`if@Zqurt-=%QICUzK zO4F5v8zFqp=Unb})_5@%bw`T@e|+Wm%%S2`GQC~)fGQ(JTVQ>cjA)htDq#~cXwy?I zHBmL+&?$Pxcv9s-!SUmn&c?*gZnfB^bZ}Joo%I)|wG_abv*(|DNge5(xY)_ODlOxb zxU)-B5u*Die{MRWa^N%PPS!S6yJv4g?=AH$VkwHXKbflv$uwwVdQH2Ka}iU>rNg#} z)%Dg*D71Yjca6ri9Q!7H6MA;5ySXvRo@T^S;g%LufUf6d`xhi&S z<-%*XB2RMBO^6>;uCe%v>TjENjhND!S&DQr8wr*goHlezSP3TUH&L;Gf z&v+9;_Q26zWyg6);(n+NCA@7qImuhPm9XyL z?d|f+K^F9&TxMN6~W25PId35DqlVs5}k zZR#g@NaFv47k3-UP2R0J9`^XM9Cfc`UNp(O{0U*in!`7~l#B>?z3CvfL=_PBVaR+F z`cGTgzd>isse#T%nH0^)ZSU0f8?6?3Fq3RTvKY$L?V~l?51(K3+=NW(un*1@|GUxf z-x%q;?ISw(pyqg7JJ(B;s4>qJqs9}fdf3XRGOf05J5j8HE@HU`7M4iuK*$DvES)4z z_Gp=Q)GQcj*ltW-a<%HOV3lT)ps?ngJvwpDT2K0O=o<79h-f{{O{k+GGdYnskZ0>d z?LhmMn7)MfR2ZAgcT&roZONM@9Q zmdwmW66zJ%_3q${(+4jz>Ey&are1$6Xz5xZq@WG=@RgO$LhhP~E%Kw57*iwnz5V3D zlY*e*_tfI+!*)MWXt^1BUb+UdaJ8!GOGwYEvr8YGT*>C@OwyNlEOVhgt@*%})+2RN zJL+r_L_5>IIlr!UV*YUwRCOJ(b>^C^8e^NHP=7F##x)51;6jg6lTjr@Ff z)3ArW?$yMkUfP6UMVrv-lCEID!(A>lA8FQhq+-MS^^|=kc!-Nv;_srdVDlMl*SXSl zEhL@fL5ak@E2L|FP{bpwQo)=onRXb>jI9^!%N@i!9-_g%TWpIP4q!`DWc&Wr;Pn#S zMfV+0Hs0%Wc5XuS6NctwWnE8o`AW!|;;h)-?79Y;&2K`1g9~Ct@ZJdcgo6o#&6#X< z-J8Ri$Hmr$-D%L=tW0k>khVu-t2jOm3H5UW?BfUpm^(&1}8~)!B^P$${-dS2>bn8J{a@sCHmLy zWDYYYXx1>rU`tI3{r)xUv-=JqSu#i$+xcP>LiEEo)_J~vF3Xr&MxzDS@{-x!<4hB$a5zY6NT4v5|ewskz3yPCYD!~%H-5~@p=7=NXKB7>R>HnK*n~KBy&0JQdOmjG zQJLjO*QV;8j(2orSwus%bEWpF3=GVO^P(Zk#Xb{!is&n&X|*Rn6fAG z!fob9uTG~aN@cg&`qi4Uls>-nK*zh>oG7ofRb3?;_I;%);d7f1Iw)2TFe{ob*Em?H7XIqltWHaXQNDrX~|aB}?v*uq>eQLkSC zMT#>7sHY~a3-q1-iJ7V?EykuCZGjQWFW_%%hhEX3o>VoEAa91A>H1Fbd}CAVwj^yj z!*lJ)_IjlZGG{XvZ}MmTls)tq`+j;Iuuo3%mEr^bIiHDA$W+4|C3vt=w%@5PrH^Rk z$v4=Sl1-@HS{G31UvMM-*#EyK?jOHdEB*b&O(^9T@mVmV)F>;_&H9bZ;=Tg8Jf&2& z2ssUL#-umg!VqxXF|D;7kl9by_@)=R1)S#NaUlykElqa6Fy;OuInkx9r0{z3aqOG2 zP;B%$6P6#0otp_vKz&?&fc(mfSXZ_)Vfmo~qQ|!|GM({Di94Nu@kBo|NWTed+kY3b-OR2_xa~Kp>A(Nha`ZGY6oAk?e*_1^N`(y z!Vdyvy$HE3KAkU&-MhRAi9X=R@-1OBJKGiMM_Au$D$+sVL!?Eh(>re~J8d-@g6~0& zx^=;4Vz7Z{#`scE{(yE{k~g7i$fXNiN@aVMkGyr7TkgC2pp&07TYG4@R4`tT-H-yPm| zp12+KRj&mL<{>;)4@}4hFqV9Atv+ni=r@JP7fI9o*dP8-1r}= zQXhM0Qs;jT(^RA%OL&Bv4INe3s36!#jdAlGk=;#D^ybHP0@qB>8`X+cX3@fyBS!fK zGhch)^YMhm;9IY|PabbVyWAh?EDd-xn4Rl+9P?of8{lTvzvlH+kxnn#y-JbpJee8{ zwN?pisgX@c@wrh(G=atmrbd4Ihti!XI|W|P+lehnU7)|RByMyTXQiZKZfK115O;$+ zn8$r#qa-&sp-U#pn~>U(oRI&c)&HZ_|9o22^~$`F(fW}p;`33J{L?O*iv&%513BQtzu8x zoxt|tH0PY=I+R*3y5(3gDz|f4Sp&$7pxc*#%pk(ajdLfkvIuPXFUo8;L8%SbfWjYr z67*smm|sO^>qq$>r?xac z-b&}~H3=5;r$t(Q6~H{iy5o94qyt2BSOpSu9nAB|GsT2Os2JA-_c0|Ifvqt+Ypj2R zhvjx^IE4qw*&=`>9Z zrg0LO{upp%jcs7dLoxfK>@y621MuA{#)WO2pLgJgoge4+3wq{H)NVG3?sZ?4 z6*>-jou7!sv|>pcHlZ3_SO9WVc6fH`eii!JwZ<1O{Ab?B0G--|eb|MC!ne*(P5A(+2BK5T~vms9MzE%ucvFzwe!)O%<2cPM zZ~=Wji$LoTEN2FwrkJ$%Cu8k8DM}jOzO@{xpPV?S&*a3wCi^S-XcfZN$V`C!cmS)E z72@m7y9rq-U^WnFD!}W3$@q^pO7iA~<6Q&{zT?ikL`JfdQG<6w!^U`NZj$Xd92lgX zzZs;t$^xiSx5tPo+Sna;=l4HKm6E(c;^((o=e|yY|7ceVAPq+?I*`)~Y#3_2cI`#M zK#pjSy#(*u)|pqGoj8QOO#!o&#f{D)x&!$U5^gREoW{MWB7|qIK_l4^|Nbw z{;n0IUi@9{YI}}IeSDkXSDKs1_fwViEYpdZr^{`0;w_y^oTfoz%+o@ip5_w? z$eJzE<$utuG#kF1?^;gnxPO3ngE|u3kn@pZzEXKNu%mA-N;R%(+(j;MS`V)DZbC{G zt|qrrs|VL;3uZTLfj7;xT$F7{&}>mEZ*Ul?(aj)*3_S|7y2k4y%uZb@y zZmXF1GRPb%DvCNJSq;=Ukx8@VH5zOH-$ce*@3soJn3_FJa*RM>FtwiC8ozcV_TJ znXkCd-KQCSR%qXB*mNMALs#RJPC@G$nIXKF4tvs@A2a~^Feg@C61GC$1z*aunV627 zQ$~B+!@u&SZ9{G_L0Sz{BM<)nK0LMl4GkEVq*gBMbW^EFEcKtYA}B#dxCUEYz*m@&1b&aUCgeQ~jie}+X;~<9vTQAaaGy9C z$OCo*Ul91&LEzWWAyB6O5NxuCz^}pEKqyzqG5|hBdYc382YnjiNlGe<(6>7hP02K@ zt#rj-|7f`Pkb(?#f{1G(wViTJ^ey5w-M*=@+iH)p-U{=6i?yaV&=is1$axm&P43Be zN~!x&&r+Jh=Mep#la1|-kn4bcCLg3yZ^8aKA!>Z^T4~w5XYErqA7^XlgCY^730o)C&~h#*JTAX=`Wt@3Z8GbP>7e z_7-6FyeZB*%j)^b@RS`_bN`LVB5`w{@YV|b&ccJThHv<$ciu_pJAXzce)n#gHeX8i z1*TckV1GHzsNswCDh-p0yp%OD9kUQu zq&JOtsi{Sd@g$R1sDCL`*ieV; z`B&XUF0OGiG+G4@o`JfPG6SH^yy69{-3PfW zsIbFk`-L9257w(|o(aL^*_I1p1?xXI!~GVenSR&;t-K@VP<$G~8pNryLQH$>Fy<~F z`Eq}CvxffSX6S9=@Ow60E1Ne!uhrBA8z1Y(q9r$>1IjUJ@YZ+5 z7?cB60Js|e^wtTe6FKq$7~8Lq>%tiW7W&E_cKsGLC9F>Im$>6+5W|_Kroih8lNekb zLZZrmDXdK}4ebQuPNdnt&68`w9eUcYw#+*!3bE?OTdurbI1_0+u+3vYL*Ow;*EeMe zL7}Y99KB(G;Oq6z465wcSXOmo@J3YW4&Nsif_PoA(@94|@H~j)J#p9oLeqp5zq1id zKf4MMdL6RfDV-Qf88}c<%=bk?{*JGbtc#8h>r)?W-Wpy!N#dDvY_AB>C%y?9{6Wez4d1gs zkUsd?=oU53{>4)5BnT2D;}egL>517HDWa0%fzbxP(Kz#?36h>XB)Wm=1dB~@i~RnH zj0F72$EQ^ydqPEIoZvaRr1N4CYQw>r&n>JDTsX=rw3{IW;Sc;dwYUwzYt-{>#=3pw zmE31|k92nX?gD>a#+!;a)uH%P1r!>ipK>t~zH;LnWy`YKCn)jJ$ZvethdXic4?4$2 z3JnPe9`OC2zYc75KNlJQnp+KJcjCq`2G9+njE z{31YfCxTqovPMm9e2WQY@`A8t~6vm-$G!}oR}v~r?|gN z^HnW(Z=L%vY=*wW?oa}MKY7R5jFXk`kWNeevC}gA4i2_M&<_tMY|Tion2!- zh%Mn>&b7|nj{?darysnR6k9kD1LW%HbxT;)TAUrB)$&S!&;e`W7CIM`yB6o>FmIMR z6_Nn77lxHLzrt2_#JZqw!!R!3aZ2Jw83d(YW_9OwAqsmdxW?+twgGh3q=?eM_2X=B zLX+gIXwe4l$mVsnYWM=5HQVwR8mu?pg*=@6KU5UH37G=HI6+*U(wZxILXV-iaOOp73eLRv%UI=BqebL>*r;_k*qT-xFx0*6^xG}#Xnp;2L zfBdU0V`{PD1%Jx;Zxa=}v0yMYkBT&SQtcicYv^`JvS+ntK{Ar({>dndOL2)OwK0yO zhLw8@i}U9OUP<&Ku4!_;J6!wj$rq8*$S+v7xEFQTE|d+4l?n91VcUb?7=&49~Wi;%94gpG(@xJxmTV`mp@Ty0f z5XIPyLV(|ak1BN{XL7N@?sH{?N{{mx?2RdM?8X;ljTa*0xI0hMEA#%}u;RSdgY#d3 zsr$(c!_aM?K~UP#@nr-FBM?rT5J5b7VgkNH?%rCQ^1Q_q2vkqNLI3a!s3rpYsw)?f zKA%4^iQd`9lN9KSW78dFgdqr>Z9c^PI99H7>;bm6EU@W%yO8U&xyiQU{0`VteW4gn zH4u4VTFM&?RE~L!7G@jTgw`0Ha@Wzo2Y8BpNylS)dkteu4eb{MDKKzy#g?`NMFud| zIBvt&hq$qKK$rlp^pME@S4l!#=`zoa4nB^=c)bH}j9ovptzyY>HbnXHV>GQO-!C>* zW^-k0>k=p523)WU40fSaAN&guSoqEtTCs8t$mw6e8C%xtmhqPKs}TqO64BsW_*n@7 znbwGf9R2x@qf#)Y^ja+Rc2 zM#ow_Apb`8WM9i;YTcN56O-!ObV25E{g3E&#TAV@oe+-m@mth08lvRSMhjZ<3r1t5 zC0lyWl%LM!%r7TG!$c)n%5LT8=|!r%oG&OoptqhIQ7mlw&SHP4O#NaO2ko7-I~N72 z3#`UWlfz9k?i}(J+*Q3|of0d3B*AXcNVa^xTYUej!y-@99?^a}qS9Y|6aTCI5_bvt z<_EvTI^y7#R!$tqlXeV8Sefa7?|5giCCCNwD^B!AS~z^c?HAtf5_EWjf#6Tr4-^6`E=zYV+K)#7pKobk``*NGJgA(c~83JfqvD?PnK5q1kI zFT@fq6$i&ZJ~S|RIjnSLDU+!;KrDBUhLuDzeYKjULH4Jer5CR@K~&@trq#?F>#-hQ zES(oRI^I8j`?Ak?=cBW$j*U(1EmW45-#WT-h1x)i!RkGX9@4|1bShN6U!AR^d&X}p za?qaH%hTI#a3gBMC2m}NiYa(>MIyk~Q*I0^FTcPaD>Od18kD)-<5_pdi7(r1ICop7{2`VFFRSRzYdhk+7eSkvo(a6S| ztH>5xU4mTz^2~#;Qvk>AAPCIQYZH_}BoRs{e4$K6R!{SvyPTV8dp=5!DZ& zPRu_>BCW9v{5dwH=@;y;NXaTU+fGcaH5mbsy#o4cb^(yDQpK_2;qWhGaBAhNT)FoO z-q5`~aAQw$`dS_R5(U9RniBnqiW7*yTT;U1#l<@b$oMabT1T(!$%Z=l#;)4aBD+e@ zCTJllus0103DA!uGm*f6ksHUZhvMSB1f@);^FJpNdV)omW7`w)=}5PJ`UQt0hcz@8 z6Quq;9t`%1Fv1ni99v(v&lTB#!PdR1fYbwmzzXt~+@J6&3E=B__k7MRHcZIuw zLk(wBGnOHAJND~GG*}RDr!M?g&|upfzJCr$dkiA2IN)yg7!D9d`|lBLCHG2yX3bQ_ z#grZVyp4PHvTOG}Suf)SnvP&T<)Zeah=ZyEK>{CWTOAiEF%L_*Xs!*HXwVv%zIR>k zH}c%Eae>M`qUxqKLsU}n{ye3&&tZD2S!^#(l%WfIQ77L_pPPGESTTB%s;TLyw~zyu zOx853GR4)4uWr;p_P<7r|5+f(2Oa=%9$tl<_Jtd+#NzRW$p`qnmom9In(cAzc1YHn z=>a)bV4MV}!u!oIOv}AM9i{?lMvv>Ffl{*Wl{N{i1AxZD*$22!dMdmwA6WWs@FjD= zlLV!$26IS4v_a=K&}44%Q#8*y=hzLlnwU&<>r-4ji@-}KSZ#*q#jEs6t!+(CofDK# z3gq31bByp#5daQ!yMXh7-Uaww%+{Flj_-gBagt&Ceq9-y8&`;2qp^W4FAHMt*mg8| z9c4AOntKbsO8`gGS#WQ=cY`Logvr|&x3Gslk7#{J|KRMKzj_rdv5@LXGeB7A+mkT zM+!_#g1@AM`$HZ+w4IK~2DILNvx;qj2xwm~a)3JXJW@~D_y=@5a4x0g1s_1^A5r1&Sa>a{*JU-xjYB75>?(#@&xq(quI7HZ3w>VAl8LC)2VzAav?Y7^( zbCym4apbgVyUI&>Db(MyWERd1e5h>W&rwej-@AeA@GtdiuBKh3Icv^}YIO%O$xIscY5F z2e#JSUhogWYF<(xWu0)7Dru#%-QR1N8fecMIL8&6M8DUdF-X|jURw9Ovie90%_$S* zl_0i{IC!Bo3>6D)L)5|wE@Hp5Vo88k>ut9l^3K$Cxuzh>D{ND2G7o2fy#^w$@T*mr zCIp%sC~xz`iRg>S0#==h_L+P{8Yw?0X;M|$e3CvPv|^eJj%+x<3TV5nW(o6tVO zxt(_)lsp}-D~eBQ%ly(V(!{Jj1RfaOics-)y@ZBL8y2J#;i0ml{D%5bTGhudJS=Ja z@OC%<$Iy}!K8A3Dxdm~AYg@RJpNuOJ7l_7RE;jr}TqPm|QRRytM46o{J0HV%^$~S{ z35%>sCW)pW$>{HNQ~I-k7ZZjg+RX4@Wjp@P!p}C=kNWe+dN&4`>+cbZ``m<*PG>R2 zw@OAaMYx6R=F!Ozt-uRQP1i<2MR#k_7HZI$DvLZjbesvr80RQXhDqgnQDLDo6&-imLj{A_HtO|qANcKs>@_Ra4g%*H~bzr7%pT4?M=CH9-> z9nvF#g?MlMDbM_b?*29Ru@ZQ;#ioQVqJQH-ouz4%*15t9F^u{TnT<+WWaSfgo#9Qz zXIp&UZzG5OkV=(H`~ps6EYz|)JuN)k4~N>kl@t9-d}Fq%uPz7(CeZ@{U%w?w?6FHQ zG0s$xpcZD;tdhMExtue7E_P-3%~9urDl-C4PJ9k=5Z8+glIw0!qEYCj7q56F5#4TN zbc$K%^i$42@f~T27aYUr3H5FH(GerhCXs53FZX+|QcBmpf3<#RN|jt%9O7y$ zbAjFIQo9c$Ilfpq1C-1B9-MN?Yk;2yLx?}!Qm=p0!+-mG3O@@blN%p@D!)GsDD2x) zU_b^I0R;7jz!nHu^`h^-0+|Arw823WC$>NmR_IPTiWY;?^4lmeGy+k(rneeQwL2u3Jtd^Yt_q|@Gy z3nlApGeEKlVm)+F0WQ+N%`EpkNVsMHTcHRDvy44v%?K-OAEAYXo8+Y3nVbNUfjbX3 z2ZV%55Jvq!p!9zOQ2H)l*)5=SH4Z4<1p<=rtuTMwFF5J{1@TBisQB8aO2Ud>Vbo>w zXb;CFu?Z0E*SLZcp9Ez3-x%%x_0S#|{j|#`*0vmHHCbW7o*qW-$A+V)3Tf5$#b-y> zoz<-<7`$2-;92hRR>V8xiIs#*<86g zJI@twlem{UmJb{ngQ}r#+~HxOCT{H1k%5buf;7{aDHGTOG3ThvQ*3BIN<0U-jh6zo zxGtS%8EV`lSV9r$gTMWkAA(*!p@vfVqhZ7OREKKL#6b9K>RFWFCpXBCfK>P@$ljgR_Z&i>_`_j3_mH ziU+*JXhWnL>yZtPcWF!h{xxx@G;7i;vtftd5jwe>kflDnH42GYryoJ=y%b2ZKkpQi zQo>1=G@%ne*vcwf=kJVfoxf8D(juVcp6(yEMb6 zc#Bso?xNQ~@M!R<^7pSGmnYg$R*{i4DHHx%H|V~9BeMG0&GNfC?`?=Kf)n+ANnu=& zRkYN%?$NNX$!0enKOm4 z-04ULu6SR7h53Ei)_xO1xWxzx)ztaEqOji^`8NIJB6RL-C^%pT{>uS7J`Bu(&0S8@ zJWKtlYAW>6N7(PZW*^Q97O5t|?7-0pRQQ)PQF*fmh?$O<{Ml@+ote2Q<}giHsmn8L?nVO!!udR=MWO#VB4(f#5= z+>4`VFipC6EA#y;$R82;`7-_U8RE~@0LsS=iQv4UTra$?zLq(ek#MA2la4og^fe>| zeX{-CoB1yHDOy4qeP~@7wy*`m91mQbr2)h_6o2$n2f1bbod|Q%$QQb$q1F4C^G9Ny zmi}ysa=BL2ent*o9miOsAviRkHPfScmZlPCO? zk%eFVfLCVJk%3*m_f*IE+-Zm$V!IYwX83~{F)p($rR0Z-zlIO-;boNFK8J@L&iRT& zAvyhou{6yiw)mk2hVCI}JTGLB&2%&TP6fPqqzN8~foVG}X)3zb72%Z2Ed`SxJ42hG zwAH}Xj1U_9bNB+D*G~#}7DH4F$g;zo)vySBV)FFqW-zUh-?JXcaA}8sE9>zKSh)Jz z0EUvA4qxIlQ|fIo97NwOWLsa40VpZ)Ned)hsGun7G7P9`1X+*ODkVlHHnl@leDrVa z<)`E?+D@#C;u51_w-mMxX8_j5-#(n-9|^}1B!B9)EN{yO{hduyK`$b1bKs(qgh7b^ z=;L+pjMBdV@WOrt@CMmz0eBI=C+>>>cLR9w75gSawf|p@-{q|WzByWWB`n@k&`eC> zdqHO_d-hnawFmN-*cJHq@1{cj{cOy$jq9BF2>)?+!m@GQ(ESjD`KGo`5I<{>4f~&s zpZ$8`H*Z2}#)qpt{I}E8Ieb)1-tIqq|MhutwY};P6nVD8IU8nNcsp3`Ca*F_h~m{g z$>2JjD;F6xIDIKJy=JjiX4sCD}(wN-i!d#H)uyj<_Hq0f4=r7eAW(4P=f#SdbEB`;2ap z02v zFG%(@0aoyEk<=()rnL5}bM5V}3wY-V-*ka3=w91|zV3%FN#;c0ovxi3Cv7(tG}#)9 zRj&bHnM53>{~tp55*pAyv8bn_zGa)Ini%w(sB=coqf6-g7A4t+DTaAxu2&uh!L`&k zY|HELC8^AoWHRXmB&>d!@7x>arl!Rc89YgO;(y!ac{FRn|CC6&xj*R$cbit`{rM_b zKXxDE$cBO|I5+07wL0^{7tu^Pl|`09I!%Mvf9k1jj$YE2u8HkBbJ45%QpU5@Yea{{ zgzJ4;^YYWVi%q-Ls@Gc*J{{?Gb}C`}P!>Os9UnLK?0It&Ew#2!{X}`0$K3?J(j;%0 zCgai$F^u|@*)Cf><+piLJgq6!j^FYszbMnt$d}W7nG+(vY3iT$q1E&1rQ$AuYg}Ax zav#hEWRb2}$mam|Db-44y((mra5UhY>4M8SO_Fnm-ZFw?Z1`K$yGSafNW4!hnkc^q zG2lf1R?H$mmG0BWg*Wj}OavG;W`Mrj10su+=D0xd-Fdb<&Y6SzjRvjzf(|JL$v8+? zA3b@3H_U5pW*W85f}beHcgFefxlc!&t(B6#gx76C79L6@Ako7Ogyd+j;yQLtH1~wh z-MC)Xo#lA;bxC+JiBA>DC6c)scYgZR9iiDf+ zAvlZ8EiHpjwuT->ix|;k=eVdvsC>6MJC^qCwiB@Z^qbr%`m&4<#a^4?J z&=PyxWD%;>Y{jNf+drx@prfF4?zzFx z90B%(bMCFp-Y7j7H*P#@lhD&FTVr;;@f*GgEH(F)OJ1W@^KOD2WRh2~h(s_r7 zlJq7N?aYD*ka4-3|G>_^itKH+SX^XjfBKjlY{#rP!J#KHJr?N9Z>QF?T*lzHrOW^g z4KA^E0;dy>h%%&|%gVNdj z4=)_j=XLxeCU|=Mz}rLNf@rS&@`}MFTuuz*s~%YCT=}H?=Dcdds%T#+-Ww<*90xR@ z9^g0tM!*5T_8zc6>J|$;SkJ@FaqG+y+dbXJX|{XE?zsrKM4%H&1{hzjFl!?|z-VtG zX24U{03Ve%@~l^5byhh%4f$pOJzn=XI^vfpkmejO^C`>n@Wb&t4N`S6Aj58V zC##|YDbRP9HldAC_uZ?y?2Cb=Has6E%MT>$mQLnS-Ia**oM81#oY`H9*?I z70`H==a_U475Ht+_VKLKc&wE*OL0llz6e(h!{tWa zIV(OP#1GT$IxIirA7mzfnx^>KzZebQ6P*15@ixkp{@eB#sgi z3N54_3(2|9-OthQ+{g7TV&j3UexVijYX0vF_?rkr+$+T!!nWyn5=>DSBRpUPcQ8y_ zgu@9OmWG%$-EBW>BG4r#4?eOP!~kO5In|D%0>AGxgIn#G z4ent<3nG+og19mgI`wNB`xkxdqsj>xd6#wD1WS z*bPWFplJ1y@W8l7H8w`She;8>JffrcI)N$SAejY;J67Uq7ERx z+6jx@WqhJqv2#3pL(~4p^n^M1ZE$_M)(2mUz(#0Y|QbBdp*6emtGX-9~u-nKhjemp2@_j6UYcvF%c;8y{5 zyI}Wu@?kxlThX+ifINY1o5GwBfMeKRnM`=k!~{UL5>{=$<6rrhj0>n~C8l?I49?*k zz8CgP^j^BRi&ceHSA~&LHcwXZ7X3-PqepsY#LYRW__I@rXh#C}ie1wf`a;v(Ms7yP zklOG!4$tAOIi;JB?}=6*D1Z4OAA&k%!dw1`hyRBk0}co-uq^8$K9yB|?6Z^!)7OV` zhRi~=*RLy7eN~wK11^D`IVZQOU8>61f4=m90OiIVMP^sFI~TFyUbtU(`j3?sPvj&! zUclRbBklBOsA=U$3X_1scu@ zr-whDeolrvGsNxia+cswHoQii2I!Bm&FN$V{lBNY*E*IqnEZIP$e_tOA^P|%eM6ft*A2ZcM{$;;AC6fGocfS;tGzy$ z5zAaI%IrL8;^9TvHq>P=IHZQM7ZBLh{7E;}@!rC|h%;2g2_MZFMi|nU*(fIri=M7b z_Y)oaN~e0?UM~5Q4I%wLiM!QhGQugfqVpF<@7H zuq@a&<0@?^!vM;C@a@Z;^>+h?U+rmaY!H2+8y4~vGG^^>Io^9S%T-UYH)p@6QgZ`u z?d4;UG8QA;C)mt)O(TY`g=o;t0PL{Ri|8h|tMK-R&-h7mNtB*J+F};!9Z=&q1^6ww zR+OhqFYAtc(X)$gjvAzn<@Qz~((!vD2fyfyS2!(`#m847taimeJ4#l-!x_TGpriR3 z(q6(pWspci2Z?R!u%E@YiZ>MBf41kff5J)fTWKt+lcs__53?vy<@Otu&V7w& z;M4zj`p`qsq66-`((XYQu2Y%K?lYa#e%5j9NY@o)^as;1HHW-%VJK{y|rtpUMa`_GrE}N-WR)+$9Q;d9}=|)Pec<9ddxa`RI(+s=s>SBsfWzE3tVeresIXU(K5)g=1z*t^%GadWafB&}%q zlr!pW08F1NxA0s`kQkI(Ftc_&o+@r3lTYUYb^L~6+> zE0wk@(dXp4BUE)XpG8!myUGRwNh{Z)cYm$M9}_{_m$mI9{?lKQza<`F}OKiucc z5ptz}Z|o{qy=r(TCSQMlgzD)9_5=mG2 zZ?a!UD{3!qSRT=PAu*zcK7B(}_1gmvhV@S;^(*H^FpQo!&Ce6oz#H-|isbsJU4|*E z!Uz>w)OJ{G;~Lvs$b*-3=&X(yZIKt)BRhlkb-Kw;zv_|UPqyvk>I;4vp&e9HDV=br zJu)IlGXTIXu8iK+DioxiSTB%xX<~TM(D#Md-dDT!h7svpZ47$`QMT+RgRDGYu?DX= zb~NxczcBvTU(NUO^1Skiq`ewuQSz-GdK%{q42-OM&VMj?9cCo&!+D>aIBkMVgJ3S1 zHQoY;%80^U&Da6fg}#-BOHuics!dMsKH*5k7JTICbA43gFv|)eTfSH#I@WlvVHL-T zQ>t7~M@crSFGB;$*DQ;d2X{`&9oCQ32^`kG_vHd#!&75lhP|B5q`ry1H-m1RA3%wo ztSl}H80&K*E3l(;JlJr@pJ6mvh3#hg(q%>HI+j&)ICbuM01_K-feF2F{bh>_fAjrg zH!@2mMmbtxgYP8O71HBLs#lv=j|+7d^3Wf4Y`Vcr_Lip()kQt$DyP4cdlEU<5}Iyk zXk=_K6ViP7eSiI&80W$3!Hm?&%omxNRMCP-t;t5#{FgH=uAPz(KcUnv)WT?@Vqver zJ{~zO&+0L;SK31=1pMR~VlL`=Xf*T89tP4{W^jD&yR{n=w|X^))UG-q>0M)#UnuN< z;;>@yv{<8bXMJ#mHk@)z=Y`Z-#q>p2BSj|0cCXini>ADl00G$P)mB|4Dwb|eZpHP z44dXn5v<8BdyP?2)0)rR0;i4+hp0S?4BMHP7jlHOHYkVSmpxI}i4lqT6QbT@K@= z?_S3=sgiE&9(MfjsS>>yVsm?tdMd)ztfnXILukPiQ+jEU<{=tk*v){J>vAK`Rm0wr z%QOd3E^5fKymI7~k^;UJeaxZ|QL8k$Sux8T11V*E`;I!%Z`CR>h&}MIBF( zqLIFms=P1x6|pPE5fdBYOI@4fHm!Hf-4X*_`mXqZZ; z3%=Tw{;?{}`ei+-!%*fq3BDo^idgQ4Ve%)u*>lv7OEL#SU&V6wO)_;i8NL5le)i>B zrSS{Zog!8TyN(Ap#W{*d)5j0P80&_RdnWpvR?ZzRMBNmBA4&Y4JeWRkB+O8UbktmW zEZx;sDO|kXA!kYUa?da&%YN|tItG$9JLx~Br6_%#q2Ll6VAdJ9S^X{xl~eQ0?sT7K zry#$8>ZKmtyCjUQ97bVMbsgTv5cGWtX|_UUf*%q)t&03w8{onzRK;INILEG6U|cg} zupAu)4T9#c$`(E~w$AjDG@0iyzZiHu{?MLWgN3hk#^dmCbQ@aD!E^69_f=g7E55VH z$@|yLdFx1LENO$rnIrqMrVKLZixQY+lz z2vMk1%FgxYXPA{APje2ovlQfw8%j1Q4R@7E9k=7;t7h<;T`-2Ki&FG=nJCP(n@dvq(GOY{c1dBiFv zcw@2lqg7v$oao%T^#vP88)82FR5dq4eG{gm4BiNmICF>S2s!p3^N8$})m&js?W3{&Q(gSuj&vV85@&NftTaL; z>9N71NKS9!aqkau@jN82I+u5PUU+Ap?J;}wKFK@(Vf)>3)824(o9V o|B`C<^;gSu){v?m8)dwrP4tZY;(pmVhxI4=^D7;{X5v literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/pinned_shared.jpg b/content/learning-paths/servers-and-cloud-computing/pinning-threads/pinned_shared.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41b7eb82c39de79a159370cee7468a029399c768 GIT binary patch literal 32108 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 +#include +#include +#include +#include + +using namespace std; + + +double multiplethreaded_leibniz(int terms, bool use_all_cores){ + + int NUM_THREADS = 2; // use 2 cores by default + if (use_all_cores){ + NUM_THREADS = std::thread::hardware_concurrency(); // e.g., 16 for a 16-core, single-threaded processor + } + std::vector partial_results(NUM_THREADS); + + + auto calculation = [&](int thread_id){ + // Lambda function that does the calculation of the Leibniz equation + double denominator = 0.0; + double term = 0.0; + + for (int i = thread_id; i < terms; i += NUM_THREADS){ + if (i % 32768 == 0){ + this_thread::sleep_for(std::chrono::nanoseconds(20)); + } + denominator = (2*i) + 1; + if (i%2==0){ + partial_results[thread_id] += (1/denominator); + } else{ + partial_results[thread_id] -= (1/denominator); + } + } + }; + + + std::vector threads; + for (int i = 0; i < NUM_THREADS; i++){ + threads.push_back(std::thread(calculation, i)); + } + + for (auto& thread: threads){ + thread.join(); + } + + // Accumulate and return final result + double final_result = 0.0; + for (auto& partial_result: partial_results){ + final_result += partial_result; + } + final_result = final_result * 4; + + return final_result; +} + +int main(){ + + double result = 0.0; + + auto start = std::chrono::steady_clock::now(); + for (int i = 0; i < 5; i++){ + result = multiplethreaded_leibniz((1<<29),true); + std::cout << "iteration\t" << i << std::endl; + } + auto end = std::chrono::steady_clock::now(); + + auto duration = std::chrono::duration_cast(end-start); + std::this_thread::sleep_for(chrono::seconds(5)); // Wait until Python script has finished before printing Answer + std::cout << "Answer = " << result << "\t5 iterations took " << duration.count() << " milliseconds" << std::endl; + + return 0; +} +``` + +Compile the program with the following command. + +```bash +g++ -O2 --std=c++11 use_all_cores.cpp -o prog +``` + +In a separate terminal we can use the `top` utility to quickly view the utilization of each core. For example, run the following command and press the number `1`. Then we can run the program by entering `./prog`. + +```bash +top -d 0.1 # then press 1 to view per core utilization +``` + +![CPU-utilization](./CPU-util.jpg) + +As the screenshot above shows, you should observe all cores on your system being periodically utilized up to 100% and then down to idle until the program exits. In the next section we will look at how to bind this program to specific CPU cores when running alongside a single-threaded Python script. diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md new file mode 100644 index 0000000000..b20b3a95c3 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md @@ -0,0 +1,224 @@ +--- +title: CPU Affinity +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Pinning Threads at Source-Code Level + +Another way to set CPU affinity is at the source code level, this allows developers to be more expressive as to which thread goes where at specific points during the runtime. For example, in a hot path that repeatedly updates shared state with a read-modify-write style, a pinned thread could avoids excessive cache invalidations due to other threads modifying data. + +To demonstrate this we have an example program below. Copy and paste the code below into a new file named `default_os_scheduling.cpp`. + +```cpp +#include +#include +#include +#include + +using namespace std; + +// Places each atomic float on a separate 64-byte cache line +struct AlignedAtomic { + alignas(64) std::atomic val = 0; +}; + +void os_scheduler() { + + const int NUM_THREADS = 4; + + AlignedAtomic a; + AlignedAtomic b; + + // Lambda Work Function + auto task = [](AlignedAtomic &atomic){ + for(int i = 0; i < (1 << 18); i++){ + atomic.val = atomic.val + 1.0f; + } + }; + + std::vector threads; + threads.reserve(NUM_THREADS); + + // Launch NUM_THREADS threads + for (int i = 0; i < NUM_THREADS; i++){ + if (i%2 == 0){ + threads.emplace_back(task, ref(a)); + } + else{ + threads.emplace_back(task, ref(b)); + + } + } + + // wait for all threads to join before exiting + for (auto& thread : threads){ + thread.join(); + } +} + +// Google Benchmark Framework +static void default_os_scheduling(benchmark::State& s) { + while (s.KeepRunning()) { + os_scheduler(); + } +} +BENCHMARK(default_os_scheduling)->UseRealTime()->Unit(benchmark::kMillisecond); + +BENCHMARK_MAIN(); +``` + +`default_os_scheduling.cpp` has 2 atomic variables that are aligned on different cache lines to avoid thrashing. We spawn 4 threads, with 2 threads performing a read-modify-wite operation on the first atomic variable, and the final 2 threads performing the same operation on the second atomic variable. + +Now, copy the code block below into a file named `thread_affinity.cpp`. + +```cpp +#include +#include +#include +#include +#include +#include + + +using namespace std; + +// Places each atomic float on a separate 64-byte cache line +struct AlignedAtomic { + alignas(64) std::atomic val = 0; +}; + +void thread_affinity() { + + const int NUM_THREADS = 4; + + AlignedAtomic a; + AlignedAtomic b; + + // Lambda Work Function + auto task = [](AlignedAtomic &atomic){ + for(int i = 0; i < (1 << 18); i++){ + atomic.val = atomic.val + 1.0f; + } + }; + + std::vector threads; + threads.reserve(NUM_THREADS); + + // Create cpu sets + cpu_set_t cpu_set_0; + cpu_set_t cpu_set_1; + + // Zero them out + CPU_ZERO(&cpu_set_0); + CPU_ZERO(&cpu_set_1); + + // And set the CPU cores we want to pin the threads too + CPU_SET(0, &cpu_set_0); + CPU_SET(1, &cpu_set_1); + + // Launch threads and pin variables a and b to the same CPU cores. + for (int i = 0; i < NUM_THREADS; i++){ + if (i%2 == 0){ + threads.emplace_back(task, ref(a)); + assert(pthread_setaffinity_np(threads[i].native_handle(), sizeof(cpu_set_t), &cpu_set_0) == 0); + + } + else{ + threads.emplace_back(task, ref(b)); + assert(pthread_setaffinity_np(threads[i].native_handle(), sizeof(cpu_set_t), &cpu_set_1) == 0); + } + } + + + // wait for all threads to join before exiting + for (auto& thread : threads){ + thread.join(); + } +} + +// Thread affinity benchmark +static void thread_affinity(benchmark::State& s) { + for(auto _ : s) { + thread_affinity(); + } +} +BENCHMARK(thread_affinity)->UseRealTime()->Unit(benchmark::kMillisecond); + +BENCHMARK_MAIN(); +``` + +`Thread_affinity.cpp` uses the `pthread_set_affinity_np` function from the `pthread.h` header file to pin the 2 threads operating on atomic variable, `a`, to a specific CPU set and the other threads operating on atomic variable, `b`, to a different CPU. + +Compile both programs with the following command. + +```bash +g++ default_os_scheduling.cpp -O3 -march=native -lbenchmark -lpthread -o default-os-scheduling +g++ thread_affinity.cpp -O3 -march=native -lbenchmark -lpthread -o thread-affinity +``` + +We will use the `perf` tool to print statistic for the program. + +```bash +perf stat -e L1-dcache-loads,L1-dcache-load-misses ./default-os-scheduling +perf stat -e L1-dcache-loads,L1-dcache-load-misses ./thread-affinity +``` + +Inspecting the output below we see that the `L1-dcache-load-misses` which occur when the the CPU core does not have a up-to-date version of the data in the L1 Data cache and must perform an expensive operation to fetch data from a different location, reduces from ~7.84% to ~0.6% as a result of the thread pinning. + +```outputRunning ./default-os-scheduling +Run on (16 X 2100 MHz CPU s) +CPU Caches: + L1 Data 64 KiB (x16) + L1 Instruction 64 KiB (x16) + L2 Unified 1024 KiB (x16) + L3 Unified 32768 KiB (x1) +Load Average: 0.37, 0.40, 0.20 +-------------------------------------------------------------------------- +Benchmark Time CPU Iterations +-------------------------------------------------------------------------- +default_os_scheduling/real_time 10.7 ms 0.118 ms 64 + + Performance counter stats for './default-os-scheduling': + + 391719695 L1-dcache-loads + 30726569 L1-dcache-load-misses # 7.84% of all L1-dcache accesses + + 0.808460086 seconds time elapsed + + 3.059934000 seconds user + 0.030958000 seconds sys + + +2026-01-14T09:46:00+00:00 +Running ./thread-affinity +Run on (16 X 2100 MHz CPU s) +CPU Caches: + L1 Data 64 KiB (x16) + L1 Instruction 64 KiB (x16) + L2 Unified 1024 KiB (x16) + L3 Unified 32768 KiB (x1) +Load Average: 0.66, 0.46, 0.22 +-------------------------------------------------------------------- +Benchmark Time CPU Iterations +-------------------------------------------------------------------- +thread_affinity/real_time 3.53 ms 0.343 ms 198 + + Performance counter stats for './thread-affinity': + + 699781841 L1-dcache-loads + 3154506 L1-dcache-load-misses # 0.45% of all L1-dcache accesses + + 1.094879115 seconds time elapsed + + 2.044792000 seconds user + 0.169065000 seconds sys +``` + +### Conclusion + +In this tutorial, we introduced thread pinning (CPU affinity) through a pair of worked examples. By comparing default OS thread scheduling against explicitly pinned threads, we showed how controlling where threads run can reduce cache disruption in contention-heavy paths and improve runtime stability and performance. + +We also highlighted the tradeoffs, pinning can boost locality and predictability, but it can hurt performance of other running processes, espec. Finally, we showed how to implement affinity quickly using common system utilities for inspection and measurement, and how to be more expressive directly in code using APIs like `pthread_setaffinity_np` from `pthread.h`. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md new file mode 100644 index 0000000000..6e913e0256 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md @@ -0,0 +1,204 @@ +--- +title: Using Taskset +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Python Script + +Now that we have a basic program that utilizes all the available CPU cores, we will interleave this with a single-threaded program sensitive to variations in execution. This could be to simulate, for example, a log ingesting process or a single-threaded consumer that needs to keep a steady pace. + +Check that you have Python installed. + +```bash +python3 --version +``` + +You should see the version of Python. If not, please install Python using the [online instructions](https://www.python.org/downloads/). + +```output +Python 3.12.3 +``` + +Next, create a virtual environment. This allows you to install packages without interfering with system packages. + +```bash +python3 -m venv venv +source venv/bin/activate +pip install matplotlib +``` + +Create a file named `single_threaded_python_script.py` and update the permissions with the commands below. + +```bash +touch single_threaded_python_script.py +chmod 755 single_threaded_python_script.py +``` + +Paste in the follow Python script into `single_threaded_python_script.py`. + +```python +#!/usr/bin/env python3 +import time +import matplotlib.pyplot as plt +import matplotlib +import sys + +def timer(func): + def foo(*args,**kwargs): + with open("data.txt", "a") as f: + start = time.perf_counter() + ans = func(*args,**kwargs) + end = time.perf_counter() + duration = end - start + # print(f"Function {func.__name__} took {(duration*1000):4f} milliseconds") + f.write((str(duration*1000)) + ", ") + return ans + return foo + +@timer +def bar(x:int)->float: + """Random function that is time sensitive""" + res = 0.0 + for i in range(0,x*100): + res += (float(i) / 9.0) + (42.0 + float(i)) + + return res + +def plot_csv_values_from_txt(path: str, *, title: str | None = None, show_markers: bool = False) -> None: + """ + Reads a .txt file containing comma-separated numeric values (with optional whitespace/newlines) + and plots them as a simple chart. + """ + with open(path, "r", encoding="utf-8") as f: + text = f.read() + + # Split on commas, trim whitespace, ignore empty tokens (handles trailing comma) + tokens = [t.strip() for t in text.replace("\n", " ").split(",")] + values = [float(t) for t in tokens if t] + + plt.figure() + x = range(len(values)) + if show_markers: + plt.plot(x, values, marker="o", linestyle="-") + else: + plt.plot(x, values) + + plt.xlabel("Sample Number") + plt.ylabel("Time / milliseconds") + if title: + plt.title(title) + plt.tight_layout() + plt.grid() + plt.show() + if (sys.argv[1] == "exclusive"): + plt.savefig("Exclusive.jpg") + elif (sys.argv[1] == "shared"): + plt.savefig("Shared.jpg") + elif (sys.argv[1] == "free"): + plt.savefig("Free.jpg") + +def main(): + + for i in range(0,10000): + bar(50) + if (sys.argv[1] == "exclusive"): + plot_csv_values_from_txt(path="data.txt",title="Exclusively Pinned") + elif (sys.argv[1] == "shared"): + plot_csv_values_from_txt(path="data.txt", title="Shared") + elif (sys.argv[1] == "free"): + plot_csv_values_from_txt(path="data.txt", title="Free") + return 0 + +if __name__ == "__main__": + main() +``` + +The Python script above repeatedly measures the time to execute an arbitrary function, `bar` and writes it to a file `data.txt`. It then generates a time-series graph of the time to illustrate and compare the effects of pinning threads under different scenarios. + + +### Using Taskset to Pin Threads + +We will explore 3 different scenarios. One where we let the operating system allocate to any of 4 cores, another scenario where we pin the single-threaded process to an individual core but our program `prog` is free to run on any core, and a final scenario where the single-threaded script has exclusive access to a single core. We will observe the tradeoff in execution time for both programs running simulatenously. + +Create 3 bash scripts with the following command. + +```bash +touch free-script.sh exclusive.sh shared-pinned.sh +chmod 755 free-script.sh exclusive.sh shared-pinned.sh +``` +Paste in the script below to the corresponding files. + +#### Free + +```bash +#!/bin/bash + +set -euo pipefail + +rm -f ./data.txt +taskset --cpu-list 0-3 ./single_threaded_python_script.py free & # time-critical python script +taskset --cpu-list 0-3 ./prog + +wait +``` + +#### Shared + +```bash +#!/bin/bash + +set -euo pipefail + +rm -f ./data.txt +taskset --cpu-list 0 ./single_threaded_python_script.py shared & # time-critical python script +taskset --cpu-list 0-3 ./prog + +wait +``` + +#### Exclusive Access + +```bash +#!/bin/bash + +set -euo pipefail + +rm -f ./data.txt +taskset --cpu-list 0 ./single_threaded_python_script.py exclusive & # time-critical python script +taskset --cpu-list 1-3 ./prog + +wait +``` + +```bash +./free-script.sh +./shared-pinned.sh +./exclusive.sh +``` + +The terminal output is the execution time under the 3 corresponding scenarios. Additionally, the Python script will generate 3 files, `Free.jpg`, `Exclusive.jpg` and `Shared.jpg`. + +As the terminal output below shows, the `free.sh` script, where the Linux scheduler performs assigns threads to cores without restriction, calculated `prog` the quickest at 5.8s. The slowest calculation is where the Python script has exclusive access to cpu 0. This is to be expected as we have constrained `prog` to fewer cores. + +```output +Answer = 3.14159 5 iterations took 5838 milliseconds +Answer = 3.14159 5 iterations took 5946 milliseconds +Answer = 3.14159 5 iterations took 5971 milliseconds +``` + +However, this is a tradeoff between the performance of the Python script. Looking at `free.jpg`, we have periodic zones of high latency (3.5ms) that likely coincide when there is contention between the `prog` and the Python script. + +![free](./free.jpg) + +When, pinning the Python script to a core 0 with `prog` free to use any cores we also observe this behaviour. + +![shared](./pinned_shared.jpg) + +Finally, when the Python script has exclusive access to core 0, we observe more consistent time around 0.49ms as the script is not contending with any other demanding processes. + +![exclusive](./exclusive.jpg) + +There are multiple additional factors the influence why we this exact profile, including the Linux scheduler algorithm and their associated parameters as well as the priority of the process. We will not go into said factors as it is out of scope for this learning path. If you'd like to learn more, please look into the Linux scheduler and priority setting via the [nice](https://man7.org/linux/man-pages/man2/nice.2.html) utility. \ No newline at end of file From f56c0fdd48525bd4ec922d52b18fa0df5592faa2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 14 Jan 2026 09:52:54 +0000 Subject: [PATCH 2/3] renamed title --- .../servers-and-cloud-computing/pinning-threads/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md index 0a393dacb1..6a824b159d 100644 --- a/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/_index.md @@ -1,5 +1,5 @@ --- -title: Getting Started with Pinning Threads and CPU Affinity +title: Getting Started with CPU Affinity minutes_to_complete: 30 From 58cb1bc02079ba1ff5a6a61d6fa38885b93c1df1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 14 Jan 2026 10:04:51 +0000 Subject: [PATCH 3/3] minor tweaks before PR --- .../pinning-threads/background_info.md | 10 +++++----- .../pinning-threads/setup.md | 2 +- .../pinning-threads/thread_affinity.md | 2 +- .../pinning-threads/using_taskset.md | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md index 25559c6b9d..d108a2a3a6 100644 --- a/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/background_info.md @@ -9,12 +9,12 @@ layout: learningpathall ## Introduction -CPU thread pinning in Linux refers to explicitly binding a thread or an entire process identified by a PID to one or more specific CPU cores. By default the Linux scheduler dynamically migrates threads across cores to balance load and maximize overall throughput. Pinning overrides this behavior by constraining execution to a chosen set of cores. +CPU affinity is the practice of binding a process or thread to a specific CPU core or set of cores, telling the operating system scheduler where that work is allowed to run. By default the Linux scheduler dynamically migrates threads across cores to balance load and maximize overall throughput. Pinning overrides this behavior by constraining execution to a chosen set of cores. -Pinning is most often used as a fine-tuning technique for workloads that aim to consume as many CPU cycles as possible while running alongside other demanding applications. Scientific computing pipelines and real time style analytics frequently fall into this category. Typical applications that pin processes to specific cores are often sensitive to latency variation rather than just average throughput or have intricate memory access patterns. Pinning can reduce this noise and provide more consistent execution behavior or better memory access patterns under load. +Pinning is most often used as a fine-tuning technique for workloads that aim to consume as many CPU cycles as possible while running alongside other demanding applications. Scientific computing pipelines and real time analytics frequently fall into this category. Typical applications that pin processes to specific cores are often sensitive to latency variation rather than just average throughput or have intricate memory access patterns. Pinning can reduce this noise and provide more consistent execution behavior or better memory access patterns under load. -Another important motivation is memory locality. On modern systems with Non Uniform Memory Access architectures (NUMA), different cores have memory access times and characteristics depending on where the data is fetched from. For example, in a server with 2 CPU sockets that, from a programmers view, appears as a single processor would have different memory access times depending on the core. By pinning threads to cores that are close to the memory they use and allocating memory accordingly, an application can reduce memory access latency and improve effective bandwidth. +Another important motivation is memory locality. On modern systems with Non Uniform Memory Access architectures (NUMA), different cores have memory access times and characteristics depending on where the data is fetched from. For example, in a server with 2 CPU sockets, that from a programmers view appears as a single processor, would have different memory access times depending on the core. By pinning threads to cores that are close to the memory they use and allocating memory accordingly, an application can reduce memory access latency and improve bandwidth. -CPU affinity is the practice of binding a process or thread to a specific CPU core or set of cores, telling the operating system scheduler where that work is allowed to run. Developers can set affinity directly in source code using system calls. Many parallel frameworks expose higher level controls such as OpenMP affinity settings that manage thread placement automatically. Alternatively, at runtime system administrators can pin existing processes using utilities like `taskset` or launch applications with `NUMACTL` to control both CPU and memory placement without modifying code. +Developers can set affinity directly in source code using system calls. Many parallel frameworks expose higher level controls such as OpenMP affinity settings that manage thread placement automatically. Alternatively, at runtime system administrators can pin existing processes using utilities like `taskset` or launch applications with `NUMACTL` to control both CPU and memory placement without modifying code. -Pinning is a tradeoff. It can improve determinism and locality but it can also reduce flexibility and hurt performance if the chosen layout is suboptimal or if system load changes. Over constraining the scheduler may lead to idle cores while pinned threads contend unnecessarily. As a general rule it is best to rely on the operating system scheduler as a first pass and introduce pinning only after hypothesis and measurement shows a clear benefit. +Pinning is a tradeoff. It can improve determinism and locality but it can also reduce flexibility and hurt performance if the chosen layout is suboptimal or if system load changes. Over constraining the scheduler may lead to idle cores while pinned threads contend unnecessarily. As a general rule it is best to rely on the operating system scheduler as a first pass and introduce pinning only if you are looking to fine-tune performance. diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/setup.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/setup.md index ab4483fd04..aa5e17f9a2 100644 --- a/content/learning-paths/servers-and-cloud-computing/pinning-threads/setup.md +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/setup.md @@ -55,7 +55,7 @@ Finally, you will need to install the Linux perf utility for measuring performan ## Example 1 -To demonstrate a use case of CPU affinity, we will create a program that heavily utilizes all the available CPU cores. Create a file named `use_all_cores.cpp` and paste in the source code below. In this example, we are repeatedly calculating the [Leibniz equation](https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80) to compute the value of Pi. This is a computationally inefficient algorithm to calculate the value of Pi but we are splitting the work across many threads. +To demonstrate a use case of CPU affinity, we will create a program that heavily utilizes all the available CPU cores. Create a file named `use_all_cores.cpp` and paste in the source code below. In this example, we are repeatedly calculating the [Leibniz equation](https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80) to compute the value of Pi. This is a computationally inefficient algorithm to calculate the value of Pi and we are splitting the work across many threads. ```bash cd ~ diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md index b20b3a95c3..781eb808ae 100644 --- a/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/thread_affinity.md @@ -166,7 +166,7 @@ perf stat -e L1-dcache-loads,L1-dcache-load-misses ./default-os-scheduling perf stat -e L1-dcache-loads,L1-dcache-load-misses ./thread-affinity ``` -Inspecting the output below we see that the `L1-dcache-load-misses` which occur when the the CPU core does not have a up-to-date version of the data in the L1 Data cache and must perform an expensive operation to fetch data from a different location, reduces from ~7.84% to ~0.6% as a result of the thread pinning. +Inspecting the output below we see that the `L1-dcache-load-misses` which occur when the the CPU core does not have a up-to-date version of the data in the L1 Data cache and must perform an expensive operation to fetch data from a different location, reduces from ~7.84% to ~0.6% as a result of the thread pinning. This results in a huge reduction in function execution time, dropping from 10.7ms to 3.53ms. ```outputRunning ./default-os-scheduling Run on (16 X 2100 MHz CPU s) diff --git a/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md b/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md index 6e913e0256..15a79297d3 100644 --- a/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md +++ b/content/learning-paths/servers-and-cloud-computing/pinning-threads/using_taskset.md @@ -145,7 +145,7 @@ taskset --cpu-list 0-3 ./prog wait ``` -#### Shared +#### Shared-Pinned ```bash #!/bin/bash