From ac905c33082b33c3be997dac157d7e61c3b3a540 Mon Sep 17 00:00:00 2001 From: Kristof Denolf Date: Tue, 23 Apr 2024 10:00:49 -0600 Subject: [PATCH 1/9] [asplos][PG section 2.b2] fix def skip connection (#1351) Co-authored-by: Andra Bisca Co-authored-by: Joseph Melber --- programming_guide/section-2/section-2b/02_Broadcast/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming_guide/section-2/section-2b/02_Broadcast/README.md b/programming_guide/section-2/section-2b/02_Broadcast/README.md index 3410764df7..8d3131afc2 100644 --- a/programming_guide/section-2/section-2b/02_Broadcast/README.md +++ b/programming_guide/section-2/section-2b/02_Broadcast/README.md @@ -29,7 +29,7 @@ The `depth` input of an Object FIFO can also be specified as an array of integer > **NOTE:** This functionality of the Object FIFO primitive exposes what is actually going on at the hardware level when the data movement is established for a broadcast. The object pool of the Object FIFO is not a single structure but rather composed of several pools of objects that are allocated in the memory module of each tile involved in the data movement. Specifying the `depth` as an array of integers allows the user full control to set the sizes of the pools on each individual tile. -The main advantage of this feature comes to light during a situation like the one showcased in the example below, which we refer to as a broadcast with a skip-connection. In the example below two Object FIFOs are created: `of0` is a broadcast from producer tile A to consumer tiles B and C, while `of1` is a 1-to-1 data movement from producer tile B to consumer tile C. We refer to `of1` as a skip-connection because it is a dependency between the two consumer tiles of the same broadcast connection. +The main advantage of this feature comes to light during a situation like the one showcased in the example below, which we refer to as a broadcast with a skip-connection. In the example below two Object FIFOs are created: `of0` is a broadcast from producer tile A to consumer tiles B and C, while `of1` is a 1-to-1 data movement from producer tile B to consumer tile C. We refer to `of0` as a skip-connection because it skips over B in the A → B → C chain when connecting A → C. ```python A = tile(1, 3) B = tile(2, 3) From 62ce988e429b460e4e654e540374cbacdf512eda Mon Sep 17 00:00:00 2001 From: Andra Bisca Date: Tue, 23 Apr 2024 21:17:06 +0200 Subject: [PATCH 2/9] Section2.b.2 : depth as an array and DMAs (#1385) --- programming_guide/assets/ComputeTile.png | Bin 0 -> 152386 bytes programming_guide/assets/ComputeTile_2.png | Bin 0 -> 172556 bytes .../section-2/section-2a/README.md | 75 +++++++++++++++++- .../section-2b/02_Broadcast/README.md | 2 +- .../section-2/section-2f/README.md | 2 +- 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 programming_guide/assets/ComputeTile.png create mode 100644 programming_guide/assets/ComputeTile_2.png diff --git a/programming_guide/assets/ComputeTile.png b/programming_guide/assets/ComputeTile.png new file mode 100644 index 0000000000000000000000000000000000000000..065fed189f4bc8716b3f00a8103c09a2c6ab26ea GIT binary patch literal 152386 zcmeFZWmFwqvn@=}K!RHc?(Xg+xH|-Q4em~m;O-8=VdL%++}+*X-7k3pyw7{SaqjQ$ z#~q{hpxJcysx_-t$*k4*OGyYqLw$w<0s?{-7UGiu0s@Z%0s=O85B~g(7loAX^N)Ad zGJ;=$iUu)uo`2!f`zEX}E)GQYeEuHjov#rP=$}iTKcAmJKtLdA?|?v_f4=+kT^jJ~ zU%}(jKwi&*4gOrH89F`z1jGX*%=bmk;oW{R#1Hw7iLN2?Ir0x5L?L$6z6FSegYlOF zG0BZjBlHrvA`(sn}$_xmbI&SZ$8Z zVRv=#D0q|@Pj4{Te}Aa67jY{vQJWze9kBo^aVXd#$tN3lJ#J^MMls zInCXy#^A~(u2%Xx;$WeEN(2=JMcD|=!pMkp>rO@~2VZ3IS7tjIH92|t=*Gr|eqHja zoOG)mE1#Qe%D`wq0Fuaw1*hntSkCQ3L26O{-9ufG)&RAh(JY-b z&yLTjOo~We=J{7`DA4w7G?^flh9V&lj~{ul1-k@^@?WiFiF+t=?<_XrHZBtBJ9`cql9d(g1A^3b#o{@UsHu0EpJsPg)v z*zkTLu#tga*tIHlG76=hamPD$YJAG#p)=0DcD^-ZC$?`R-prCMISRv1No{I|Y? zyV~LI-HKgMagge$Z&~j^AYUNw1H<|6xsTDYWMF!-G6FF+wegIz3}ShTYG!^PDRY9l z)v}d-k{Ks!qtq^7MY@+xq!`w5Qc#yojX3dPQL(27gydFC%GeUf8g2`XuAP)Uv_(|d zzzWZjThViokm40H4_>OXv^etS;7}1r^-=oLj$_&Dd?LNMhe2r%-UTk2%{TDI|2sH@KFHcy- zQ_bHO8yxS;L*w>rrpEKgRh=RviLOONB`tcqQ^YoV2vWor<>e}DZpwSr;x`GBhhh&S zAX(iLh6p1q(MYCQ;0`^{So^3Wa$V+QpP+$o1!SB#nTA= zf{Ha8w$bR~E#Q@0lDZLuh~jm%h1ZR>Nx0M}qAMbLG7!K*=XUjJ=lGv}UNMVJkGChtx^uEoy#j%}ES?#zO{}v=6q#@^? zsa7rXe$Q)L7<-66#z=Fe&8og~Z$J9bJP!_jx9lZtk7YUN_VT_jtH9ZnoF z{^Dk;+EqCexeS3Hokvrss;7VU7I2|M>doyY&M2ageE@eZm(-7U8_M0K6XC=vPjc2h z=dB#@syGac0F+5NZ`K5f=*I{3lxS^RivCV?&YZ32gtJkZqeOKvH;A z{@EXCr;Z5|9{Bk(&rDpbgCsT^``oq&lOl#A^fHr{t8ZKen;EMh0JzX? zHv$t@+T|VPiI$Q!0CW&L&A-gY6?YRqa00tCl_A9Oh-RcZHwY!Jl-sxHiB2 zOx>=Tp9jP8J&fJ;nqHx+-nMQY;1b5ZPukQlKh6GFckhv=u}{W1X@KrFX&>10BhdgP z)0KPAvi~c0&Vn1W{SfxKwR(>l*W}glxMw%(!3n4f@+oie*Pa_KT;#sCcUY<1Qmqp1 zc7_lfTpDRXW9r4!I53wo(M9ha`qn@;PBz|IdOHVjwnki+@wf8&Q;PdZy(>ghBE3Oz0|fk^Aob7jIR(hwjJcUcyPeeZevyaD9Tux!L*bUz zL;XIv1ifo@=*x>M^!SFODL#5!0q&mE)9!krSY?eo2GzHm=ps#n zWa<}rb(mBS>Np5O!=TKWIj|Kv%px(LMt#YQbGeSunfrOZEgFSF`}EHI5L4d0b&9$t zD%GtEVl<`GIsZi`A)Gf56J^9Mz-{|bQYRzGY$8`S8;)k1L2};WlWRd^gJJ5kFUl!R zH_K?7l^mu=pM^eY%lmoqTNFI0BBUuUMUfoVZbqh!yL>YR`>f9|55+%WhQ$fkt*FlH zY1eFn+ZO#Mw2#d$zeu}lzPID7S=sJfUmEd6Q#@%!pa~tZ_ii^gdBPhE;qF?&Ti6mh zH^0)G!oTF@6rUFtb(3kyz)}}16FaZ_(iAfoL!F^&f$*WcJRn`Lq;&V%le8^s?fTR`<>v z0=|IOPf{pcn3RSBiu0hW7IoX+f1;p?8(YqvfqeY*I0Y+Of(q4DOUv80QN^S}2@D$dDoe<8rCH!mn zI+EmRn^|oko9~o5snfH13A=>#B-dq%dgU;s6_m!bNFCuxN=Zaz*nX1|Dgp~zdSIpQ z=FDVw*M7NKVko>#*X>0S6-ViXQbgpWl(j=fok-d(7?nLJmzG|}DaDQb)+5i3r>~++ zl&?P|pBltwcbAQ+CptMQ1U(RosILxr0t^f-fP=fpn@4&Q6|tVx4ocn8RqIF(U->{% zoD3xwrFguWZ`ItK*)K?##bvKlyQHGL8LJiyaD=UQ;GJr@x|h_)eag7W#^bSWe$v0p z21h6O4E{Gs@*t8(OMu;&#&W!(9~A1QAZheNl}{a7;w177&h|djA}0Iv`Cu+nralSD zc#iGoY=ua+0%ZgVIej?Y7$OO0bn`Vq*GX(D%OdIEfQFl{GlKyfaip)kCw(?|W{|u7 zG4(r4n}jSMKYYNn2s)%FRf2q!k+V-gmhLnI^rvuX{eYy)_6B)PN#EO|fN01Iya6TC zPx1qb_;kI66|BmGo+9?kgcNX@pj~+E4XIJ))mnL zWf*r?jS!ck3j8vqh`|D!WP2E|`ns2q+4}1qfw*lnLSJ8{Ao=zC1?7_sDf_7Qjx#|< zYz2<_B;dx@Y5Nm9RG=}LPb)_L)Se+3M+q)Ku)Z5b)f=uT-28e&&h#CCmq+ayrrD22 z%6_UnE~gVl^=To}pnY5=@obbji@=q!-_IYX`6-wvtEh}pDl=Voqq<=vYTcUxH7{E! z|5Tf|UpSmBtf4o7mbq|4Mm9DNYBt6wu}}AOLT0TYZ_srW3Rv2$D$$lOqRN4X4jU(l zMS&*sOyE5u>8EHh_4s!~OFarGbnoCI5(liYKi1CJW~5a0(9Y5Aiu#+xX@O@I&qYCV z;dR&6;Z8XGP!Krype+QAw&(9SI6WK9WP@CatM{u(wipVRo zaP|=|#J484+?QfYusD`NJK+BIwf+iutf;Z0!gfpRDIpl_=N>br6*h~UF~;EzLqkCG zw%czF^QU@?$9>pj{%(&~HU#6tyBn^_%->-nYgU}^Zb>B@)OtVyxA`L85feJ)nTN)V z=Qw}Z9mxW-JxcnL%$^y^@x==W80YU{f$_d1R>Z~PG#|5?%=|rnK2k-0ICH*y5w^mV z+!!<((}8U;QIac-X|9_RxESKZH0)6-R%DsZ%(^Ng)7OF0h?8bNlb!sH*`mCn-R?kR ziNOK^3^eR?+mf{geGZA0y%Wviv^u8;gvXsUXjN;9uw! z#EQ&cE6MFwFecWWqxn?!eb-v|doNwO?!8QHzf@@_m6B}FC}W{vt$2q_$T+P0z+yIv zP@zbtyjB)!*5)D`8=;+N zjfdo*qgn5?lvcf|Aa}~dNaF}$RB)9D&_|^yrm3NE=d2R7a6t8{FgRo?`P zkRh11DG$JM+_Q7V9iQLdU}Ki_goD1;!MTJUarQLOedyc~%;e9HR+H# zbp%0}BZKU8)oKp3r~liK1Kut3KiRh%hnS;Wn9KpLUFg_Dq@0H*U|32e%YfhkP%t0J z7ju-xg)4{2ZfIyIfD);Ry<)9dl<>3%I)+7$D!+{AX><6 zg+YxOWvp)aA{Y`iQpi1&b1%K1ZH2MT@B$tKIB;3?V!;s8wMIg1o#B!P!rnZQ9RufT zNKP|V5~s7G&NlJwD?-7^JYsBdJ|P%)h>PO4<{z0=KsMV56(v{;=Por=Sq*KBtr{ML zkqSLOy{2aWq|(|EEkX9~X-i_MS+^;0M_J}v4gO_xkvdis{}F=-7<+K>lgs7>GFW02 zauv;;{BLWCF;v%w4v^ry)a?(i;tBvSc24Kz-;NhAjbCR5aY`OTJWRxd1a7Lc8oda?II*4&@5C0oAHJ8fk<391$t`rUB z5@!us_5{x>Sj>2C#%-v@Du=~bjdAzlVZ4{|+ri)2o7hB>*q_(H3&%U7%qEGRb#2(* zAN;n@CM>nyVZ#zk{D$`7_El?t6>p2Xe8R$v#Udl89=kgX_GUdEE$yXhsz;pcSslT# zuw*AS3#VV$$B}JZ2kW=zRe0r*y#6{eo^nDsL>MAB<8>@WoNH(>HIN$#(>^iL8l#o^ zu^0}EyX`xc)H#zQEO3~ADSw#aea%gpv@^+ic^upu9_fIFOc)F5 z-GRI7wbe$2E!R4)u*V{8=@Jfl zT9alkS#NXvYiJ%!$SB2Y494ExhY$|Bx79X6Y;m}=P`2c9N?|SmSjV1r5=8}DLT9p? zhaNG9e3>W@4ihAU2*lWM!@Z!|7pJfI2eY(mMYY8mEb*{P4gS#vtceL>(c`%T6)6{T*%P?a+jNS#-8QL}n1uS^UiAJCsC=m{F$ZAhp*dUm zfSOFaTj-WmX+#q857sn<9oUtWa{qBg^zWv)v$sOyo%BPgGqcG*H6&w)RAB`bl{3n{ z)~ZBb(?&RMSxC%XoMZQnRlZn3Pni&>TKz_MzukDRn?` zq9V!WT*g-dfC|BJElw(_M=z6o<>u-ykw!HhEd;#IL4p;Cq?9*puCoZ*TIJ#q2wrAt z;Q~2t_b_ZJENqGWv^5Z&bK*5TwH4AYsd|604+t>_l)Tz&a4b)T1r0Q|o0TH>&C;3y z&#keXLGaNjGJ7o5uw(n1MuSs-n5;3Hw-U|PYyj0d$j*5?Q0rBTWOY3t2?V2BcU49=?ODr0nXAJq>pp30<5rk#k|Zk4Gpno zC*Vs?boA|#+rb0&&_;2+;;9JHQ~FK0`(#kK=JsC+2I6?U*y99(x{u&2>KCnRJy%tg zhZL*BYfWP%npuz5^<6Y*Y+lWt6xf3&Og-_2lk?u)T1cTu4msue%BAk`lp`S2cPyPu z0Gjmb4n*OMFblcDbxLb@wDcz-uczT$2rq#N!u3ajW@;V?2ff865dI2-C3rFxxv#!3 zv7_*I~STYd2GrgATPzp zn&>j~6f~>BT*~jQP0D#o-qKfVY(9a)EG2#0TzAE9;o3{#l zX0EGO3$nq-)wHJ(j%^nnRrM;FZiT5TWQQ^&PZhsdyKOu_Sf#9RxhT^4db)}(YIr%d z=g6qRwQxLFZMYMFIbJD?vT!jswzJ-Vm|sB&06D;Ag(r{O=LmZ(u$+jNovtN`Q{5-! zkGLug+)r#>NXCjC>Khgs)D|Bu=3yBiUK|Rv$e%gsAziVBx{Kt;w??$bmc@uvd#%ADhBfC#&6v$m8|q3v7vSB3Be2P8n^n zf*Y;on0C&WF%8DzBJ0RXSz@!*o)8LG4m$Q%TD$beNOhdX9S(yUVMe=RTlDR4W|BXR z&NgeP+!-(^&K;*@Z4-vD zq?)kNkDTQH_!^m?ouaND;lpZ@|AJY{&C0EyqZ|3m(G^DrWe96i;cvE=NW%aFd~vAx znaj#V{fBC3?n=F9wbby1l!TqgP2tq~@7i&eMZ|5emy5@RG;h7I$6(3r+0G@l=OY$f z4z0R&0~IJ`x1))vvre|Sg`a(g@-1NM05@Lj=pRp$?)IKy*>qX=uG$qMKnUYUnU%ps zU1Qg}39IU-y6Ox1fQ;|_7>1~7XLtt-8h4bKV`B)Ul#Cwj;RHuY&Nb)vxHeZu5{iI^ z{nOdZhke7|exb}K=M|N*GnMlPrrFXvno1pmLQYUIi0JN!h}8prp|_yMK;VJn_-N5~ zjLv;+GN#c>e&4)R6okb@_SE$AOn+%HY~kzNi|@!S;s*ds>JBamZMB)m?L9V=d9K?V)lFk~$i;IturNdr z;cKbk$inuIN5ljG!w|;qONWKJicETm9dUeLTUG_@3mNymD$mc!qN~$r1LVg7q1z(7 z5VmQTrt}3($t;JsY=$ZqHkU@OA-%N(;GAZt3+Lq{HWL+E=eO*lJAF6khEs=MD=*ZH zz0aZp0?7;9GLNB1KwsNt9s>MnQw_{H;6CDRw(wWRB;2T{^|<(wkGefm8m^1EPX2?h zYbFYE9N=X%-F@GD>T5z3y21_xzA@4lb%M`6nwP=G@A!@8)w|(XG`ycbyOP9&fwE-a zc-rP4|D|S#$JKC9iZ7YFuBqH?$vvnA1!0SEX0s+nI#?C<+R)a$OmScQ4+EC#@9TVu6jVdf~zv^~gcOX%qJf1OwXCq><14 zB@e|(0NovEWuP#>@5TXhBTu%MUfxXWd&tTxPG;i4`ww29a7rSo6%v~b%QJGu%-Mr) zF9t2Uf76$JZr`(we87lLN7y28cSt^NC~)|b5ft-~$^f{PpA!NMb<@#$=RE;;tbs?b zj)1w4WZ&zc6r|pbXxe1<@uSNh8^~M;#IkC?XAo~kD`P{`{&>s>fat=mjb3F)LAG+W z7B(gc39jY5%|R4@PUs&0R?3V9t4BV-y+ZHg1nc%dd`+mzAxd6#6)Bm`2u{s<=Dmn; zp5t6?Pz8bDSYCszy6eyM^x@{%_4T@9O=FVHiw=l`SLNd4gdJb)=um%R+L5=T0V`g; zSgoyfylGb9aKF?*|FSd;_F^$CRDW9A6GT!FhmDcXMN60}x9@$j6)L^pH>CH`Vyo@Ts?5bGZNVOt*oztwvCi9Q^ z1~p~dUzru2>TYN3T+YNH-nAt*@)}tYwYpr@InGlG1R-qBa9vA3xJ>iZB-mWfJ3?WI zmwO!5jHH_F>@IXf`Yr?99oOl*?sz_8txT}0RHF_n?mOIejalzx5mWubBCcS|uFB7M z>EP!@cDA%jiJGgGz#w;#fKXGWOp=km$SAVX%H%b+8hEm+Fw@a2x_c`%6F59@l5MYw z&)iOPe4Cm?I(wI<9+TMh`_BTm`e$a=yF%Xm#fd=_*fuGFg-xI~ z6qhW1ww|_rm6H6GQiT93S$Z7!txmHCUNIQHKNu9YY0XT)6dN5miZRWBz)ltKo9>~h zac6g0^*95lG2)SD9o9VI-&#H_DhJDAP+6f2Cs!xCi4FQcKm?G`;!X4B`NwWEo7tL_sCcu2{@O!k^HJZ_ z;;Md5mm#Fe^lk(U-qj{SuAH1l`c!-2q8XvUAc76ud?P*8ftYjv?e2cppUg96x6*r>VZX)f4Xlp2|~3QQJbMeJY1-6_NHRZK}{01ZBUYWO+0-F za6$sSd_@YV92_PFyh}L?UBvxcL1xGLB-NE86O7kVe7Uli^&g}%iqyVfpq72zohN@1 zmwY$^V=#6=buNuoZ-W7tEUHT;eY!jzj?@?dn7d2XU!mkv&ZamVyL|35INg?#UdbUh zbNSh%)WGk*=~f@EP`JSB{;(FW+!62rCU*En@yQoc+LuyE9?~*Rtp_Hvxt!jhx7{sz z-0pzXh9#CyYa@X(`Wz3^yQi`_MT>O@tL{5pW<3(zCK&2w(>h=K{j-+F2;r-PAOb$r$yW>PK@EWxtBUwWulC1HrSGBl1pUDQ=~NJ1^bULS$QQg$VruI_%Tc=&rmrMg4h#feA)&Bc=;Niq0MT(#HO3eOi> z&Qo{mC~IL|{*Dcsz4I%fBoVfGw#j z6U@p{p+1|2RY79=aN_oVk!8h(a*8Gn7u3IVOe@hd4Uy^)@ zO;I#@C_m;iqIfjVyHiWw7XFFF7e^(VIIZ4F_P|?bV*I0H&m3LntvWHu`h&F%-~mFz_JD z==N?Dd7Gaw!CC0H5`)iUo83{Us!mh;?GEkeVykz^NudjwN|9Jc=*WMnJKxf6s79Q0 z&xl^)gm@>KrS4b|6)+`hD^t_9iW;Phsu%!*-Bq{dMT+?aCR9rNaqXv>+h|g?D@}i* z1|S|S`Xu5z3oFUSfFhLu5B7X4&T&um~c*PD*>WdA6HbT7Job#_WXFIVYFdjB97 z?UhGLH)Zll>+lr7*Eq-wS=S8F+cx+0xED&`zt*(bU(@XF02l{`3$5QB!6K8I&f6y& zeN#UiueZi&9ptHO^=DN2IlYxY(0n+Q6Sc0hv%z<{4fB%ntUp7t6NxX)74s7Mcevf2 zY8fnDE+nGW7s_`o+#kFLYgd;lbYd+p!%bqZmWC9@^iV(M=_)3HSYeG7HjD~mV1)n9 zri9qpYIX+nTIJzm>}$zSLlHQ~vvl8Hn&|i!)tZ1F%&G~MeHHPwHIY=POp2Nl_Se-5 zA8FYbgj=*Ifqd~JYBZO zo^RYkM==-B>tz$4G_tjm51@?s4BQ>$8{c(MVU}Z*`3%;~jO@UASBXcN?uA@Dq(*(Z zWoxo^{?d*+IoUdn6fX!0jQe6b?cg3g3-!9{T2?AjT7+k~$LQV7qq zb$%s44!saQ<5W_6Ym{Vip?TShoJ*xlJ5;%mVP_oCSQeA*4cXwJmOn|1xLv{ox#g-{ zWmasKT$gu&1tjd)Af{@DweVE<hh8v27mPMaO!4~SPWK@3dG=!Kp(x$Gfk~&{I*loMy9-Gc6>rFJ| z3u5iwthr*dDSY*RNT`}DPh};%EdyH~0oA(f9<#<%SokdwRlTT@Jy=t>IYqx60>M?Z zt{M@*{9wW$+0Mr>qWSx}s6rr0aiTP@tP(4 zHRgW8TXx;RHmKNqG-JA(x0}wjMD3J%8j*hqF1g_?mew>U<;k&Vg%GJv+h?{<-VeA983B0Ui1d~j?lwu2(?Mq)D4j^%?!NSD6y)M@G~iI) zG0BO4Qd94tRg|5(v=fBc`>LoxH&11Zv||Bb*s8U4_Y4l&Ax%`Y!AdLo<}{gZj=qCo zet%n+|0|{3j^u%(_St6Sv=A#pUcqFJ zc)+Qcutg8A`zQ9zvl|t8_MBi3uN{)`^v^F>Ge7~CB~QsdIlt>MCUOp=_aaieEMPkm z9Mof*T@GFbg7+0R^<=SVAJMZvCTMpy>K7&+&t`krxH6DZHrD1-Q&dRCVq?PVQ_ED^eTqhaq3NbRKz@8-v&K-oyE z5nXjuIxL5HQ)Qm3Lk1@5vJ6Aw;xxy#M!oaxG3&g7`5l{^Gjk%T8ZRP*dTWQkx)Yr` zK{A;w2~N8u){uh(UDeAHlL@Nm!d~1ATl1ToEyLSmpo zL?(I~^zs%mYuK*-s{K#}K>K+gnPh<6&cbYi{gMDBFut?wCLrt>Ik<9>GWyOj!?b@h zg^~v#5-KB{ZMZT|zhvEs*+oW$wq}VFxyDEXm^nqC3fksGp4G_&_Un=@M}IA&OfE>e zb-S_i%@9SeyZ`+wdN62I@3KZu0ZP1iV)}NFDz?I8?DG0yD`I=P?YI>)k6!>`hjKj= z76GcQimrSrydqVR`9c4d!fCmbI@i3IslsvZOTc<&80Cgd*o3xyNyfg6~S^jAQ(e{&Qa z+>JLQ-==&5iLO4g8vLSNiEx*hkn9uqr4;uTc5)4XSLLqPgZG3K*8DQI4L$p(y1H1K zL&Pwa0tG(qtkV#OpjpbypR{zH2QCd|axXo>bKcy$+?pxrZABEs-HcJ@oW|JYu$#z5 z*X~v4kQ;ORK;Ic=cno&yZ{>?%)8@eh*1H9Y+6zPySISQP8ec9m~Ym+KS}X zsh|)?FFf7d%T=4hw!cMrs!*_)Rc`#fExULAGXcU&+5%S(y1I0~rF2RtOh8Bzm1^pIV6r3tfPSL`V|ll{%7?|rz7rT*B`pQDPn{PB zD}r2eyOZoo8OFeWD&h}aujzf&DfE9==aW;A zv2SXfuhUoUKY`EAB-z@ntw>C{HzKi7t18qo%5U0%zmn8E1qebCA>2Rj9TaJjQ{ZT z`|e3&#ICDsa%!ynLHP*NeKHrfh=UQ4J~BD`wKYzL5=r(-`B`YijS*LOmPj91yCS*K zHIdDOE2?^&SSNe)LK8pP%$iJ9RFzVe4Dd@+LGETJ0#27JB(`KsfpCQ%+fdJ3lNc93 zsH*Jy1l`XR$Lp_U?9lD+Y%eNSY$gcX#vSri;t99D_9*cNx=&{($xNxI2ntTG9Dgpp z9MS4-fwAe0!(y;hHMfNsu~N51XbM&*GOuLbId3|zW+x6e2`1LbC#x`x6p+pNnEAX* z(j4(yzKJmQ-PPc)vmq>@vd??Z{FJsYzoBUJuLfX%XcxsZ9q8BF>p}o1YnPD!qJY!b zW1u{Nw2t*0AZi(M-Rnj2tvW}^&0PiG%|)aV_6vKmwB(~_FcHa5m00ijBC{Kk}bU%F=_iA{vc3fFPyk^q(!EC%$*VtT*G$Dy}(^Pk6Yv^&99TtE8U}zpB>= z%DFTJsQ+@CTH^X;U;;3yD8*{f-jb{qOB-pc4>Msjgk4Qb>b=S`enbYcF)Vo=2uOrw=|M7^D>}0tO+KVh0bVUE`R{S%nC5yI z-j^K^r)zeG8Brfsy>k3L8z`2LhYp}MiN{XY7O3`L8dfbQ1j`&9H=k5a?>N156=Q?W zy`e>84tfx++rX>11OU0O{`J{!mI}ADsibyjhaG@uxSh((Hl4wlKGU^zc7y5pgW&nb zE>>J)qLQj2W7zj`>T#tt5z0!np)p0%zlubD!h;$ljk0@IJo1-0<vmu< z2C13^D~47hiob1%WFP|OvSx4Y9M7pc=dWr3n4vc$m^e0?)ooq+GvsQpJ8k<@3s-pn zM8giYz+ty}#s=BLsggKyspJz2sp6RDR6;#obnFJ4;nlhQZ^(yHF zX!@R}RjreVb?t*nb=*x4_{6EdD>=4|s%xwi)T>|o0~ZdXyd66v*o-lZhv9Pz!e&wF z!Dv#DeCPQ+q0xYedXk8ln`uY#*kFqBE$B_%KQ=1cI-cKTMI~Sey4D$V5TTua ze!1$|BzA>xaw^XXHXAKyltA^qv$8e|Q?Yg#_FV$c_Rk&lI0}%Go{VSdeAsOv&*p>0 zWdm*DV8hUQWmnVrS~#5y>sx%wnMti167s%B?f?GxTI784$YqP0t{qnrusW79%5Mj8 zs*ZU7)-VGCO#t)gKPM3JyNXDnCeS)+!XMC{x5dn4;i|Lil~GjN`}(x~{>ROTB`@V` zZ9wEPCScz?4ntHmN0?Bh^>+sn5a?%5o^dSrfq{YO2hrKn&r2-ww zzJ+$2VNK9kUBH%!+})f#CXqYOr2XqFQU7$480>*-ALeXm(YnWk3U4nGcjq-~Ye9Zr z|K;_yLwLq9#15mPFwk5@%5n@hW*?yVG+5%a51~C^-uk>4=8m{V{39Y8z5G1c9cYXNf3>5qPpB$Ke!>9%%Nh<-K=M5|z6x+EvDNjR(%mm^ zy`c0{%~;&?l$roEhA$u(c7ooXo2-3$5H+W;Tn~Tu+Oc`g4-Kn8*&I1jlAX?}n$cCB z3_rclyV?F_%#gNUzVW@w6(F&D9HRkMs7FcoY3c%Lu|JuFS}cUBxAnG*fmM zR^9FwOZy9tB(PGvKmTMm=ix{4V9*yWx8r!^vc>@;iAA0mWOfh>&6j`A=6nAy%nRNJ zVNAw9Q-_mrATHozdq-52r$YbrTn*rZS%UiW?FBa|%*DK)ubecF&--UM_|`>YEOQ9D zNFijes4QqYhVOvX-gXoEA$Sz@>#}|SitSsOMXn2Qee0q=qvEkCk)|_e^SwUxM__@C z^_J(!->J3}{gHUS=!X?Wbo3pvzgco=FEi5;!Zzc}lzz07BGg=#!LMKVH0j$OrHABm zD3s^I{$~l}z^#GKZe=P<>Oy!GU4O!csr&oK;eJSOeXbCAzTpj-Dkd||0*d5ec$jP* zzJT2~KxjqMG>$NwRv*uDt$k5!c6&IteE@=;+d{*pFADyX=zAC<7)B;XVTwDKyzUT$ z7H&Z=?DT37OfkW$cdTF0+#SW`RL<6d_|IC_4rwu3a|&1e7yQq`J`J)$NU|)Y+pgC0 z9i`w~b|8dfOddD?<gR~nYt{0aAiT+pGpq_pK;9sb{J=bFXJpqve#asirR9^HK;8&Lw z_Qy)sVNv!@>$?U%r@T^mu&!F>WoUWUrDcOc`KcQc}8yv8- zHO=!o@`~YT<^-;~Ws6VX`-^#%Lw}+-~^$&m71oDSvw9K{iX%F#K;L>)@wh zihcQw;@BmCQ2BR`pF#c@U@x0(8HU(2UNP;w^7+4l-G5C#jTXM7s@wWmKAk%1myO;n zBk+F&=N0zf(0qQbpgq0RYkd2!d;je1-a&YlTotJu#Zml1g z;(yOQviW$-!+q)F5=PZJzWtFd?dBiU(+L%57?-Ny1^$&D{@2)2i0>Ntv7~8?t*sa< z{jFZmWl;xBztq~Krmj|?iB{AMY*@2x(?tDW)b_k}xn_Ry98El#4S9>EW7Cwc_%Hrq ze=J8&LGD{>7&40&q&dz1qPur+7I4EV>;4uSB1vuQKfM0tD?I&w;P2TIg=Kx-M@qW6 z_S~vZkwJWe0WaS zIu1?wp5Mv+1614}-rPqI3Z-qmXurNq~ZOHNd9Y=`+q}^0SkQl zG26OGGBPX^-lJa_WA-2?D+-2X-K9@DtXR_H^9&V8kxq;`j&o&K&6 zIR8J`2|s2ILlLEN%cz9C)eSHDev^TxoG49^=4Q3w8NKh5JhTpfCjgEQR|!kU{cQTv z;(TrYU(El0Q~ITa&8z326UDLAvTs=Q@2zBi7A=wxlxg@@8=9E>vd@3NMe-l$(^wIo zm;5~P#`D`8TglX`X6<{aJ- z1ca=tqn9Se|2FLr{6C}Lkd^SOpO^eb_-pDQaK{3G0Un%Xyfd9rV3=$}t)G~$O7qbF ziX%iNqbP;)GtmgMT&(vaE1HwcW|;5pca<1S+2RQ3#Cftnobt-tL!Z7ZmG>PY#9~+x zN}MaV`pH6dGWtDPdA)Vvdig32|4EHK;&7f7SF2|BoUX5i{EGZ5tUSD5iWjK|rWlvb zm#F6;lJCI#=C`CmK|Nb>dc3Hudae-hVe%`6%)5hFgf_U+t(sLjkhxIhj};TG{FT&K zVgtu8?)pVfO+44Xhf0pRRrT!vX*}{sMT33od?JsJuy!Yav0!~N&s6GsIwLF6CcU3j#zc<-jc@K}6F<6&Cu`gp!MuA0$mB25)fPBC z4C_}nBS*yKjlH-DS8Idm3Lh2OgpAH>m}JyW38L*?7;W;M$LIs64++fqPH===E7woD~T1W%B8PcQg!{ddEprz zdAMPN=a*CN`QLUpYRCOCHV=msfn~H$FyC5{+K&7_?bfBho%ezMN+4MG=M2&F9124# zO;|@n8`{pJiyt3zB&S4l`z5*y>JULqKu>f@KyB?VLxku`C!DJt9a|BO8idDuniL~U zEUzyrsBM}nY}({7DrOVp$Q2VOnQhJ0{WMEJ9ce2NR_=@B$OQAii zv^t�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

UM!T|W)w2vPB6h3P7L0&$^1Bz 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 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/ComputeTile_2.png b/programming_guide/assets/ComputeTile_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6141e4edd76a035baabfdab1ef103977131bf861 GIT binary patch literal 172556 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�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�M46 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 literal 0 HcmV?d00001 diff --git a/programming_guide/section-2/section-2a/README.md b/programming_guide/section-2/section-2a/README.md index 61b367145d..1b826b3efd 100644 --- a/programming_guide/section-2/section-2a/README.md +++ b/programming_guide/section-2/section-2a/README.md @@ -30,9 +30,9 @@ class object_fifo: ``` We will now go over each of the inputs, what they represents and why they are required by the abstraction. We will first focus on the mandatory inputs and in a later section of the guide on the default valued ones (see Data Layout Transformations in [section-2c](../section-2c/README.md#data-layout-transformations)). -First of all, an Object FIFO has a unique `name` which is required for the lowering steps. It functions as an ordered buffer that has `depth`-many objects of specified `datatype`. Currently, all objects in an Object FIFO have to be of the same datatype. The `datatype` is a tensor-like attribute where the size of the tensor and the type of the individual elements are specified at the same time (i.e. `<16xi32>`). The `depth` can be either an integer or an array of integers. The latter is used to support a specific dependency that can arise when working with multiple Object FIFOs and it is further explained in the Key Object FIFO Patterns [section](../section-2b/02_Broadcast/README.md#object-fifo-broadcast-pattern). +First of all, an Object FIFO has a unique `name` which is required for the lowering steps. The Object FIFO functions as an ordered buffer that has `depth`-many objects of specified `datatype`. Currently, all objects in an Object FIFO have to be of the same datatype. The `datatype` is a tensor-like attribute where the size of the tensor and the type of the individual elements are specified at the same time (i.e. `<16xi32>`). The `depth` can be either an integer or an array of integers. The latter is explained further down in this section. -An Object FIFO is created between a producer, or source tile, and a consumer, or destination tile. The tiles are where producer and consumer processes accessing the Object FIFO will be executed. Below, you can see an example of an Object FIFO created between producer tile A and consumer tile B: +An Object FIFO is created between a producer, or source tile, and a consumer, or destination tile. The tiles are where producer and consumer processes accessing the Object FIFO will be executed. These processes are also refered to as the `actors` of the Object FIFO, based on dataflow theory terminology. Below, you can see an example of an Object FIFO created between producer tile A and consumer tile B: ```python A = tile(1, 3) B = tile(2, 4) @@ -115,5 +115,76 @@ def core_body(): yield_([]) ``` +### Specifying the Object FIFO Depth as an Array + +As was mentioned in the beginning of this section, the AIE architecture is a spatial architecture that requires explicit data movement. As such, while the Object FIFO's conceptual design is that of an ordered buffer between two or more AIE tiles, in reality its conceptual depth is spread out over multiple resource pools that may be located at different levels of the memory hierarchy and on different tiles. + +A more in-depth yet still logical view of the Object FIFO's depth is that the producer and each consumer have their own working resource pool available in their local memory modules which they can use to send and receive data in relation to the data movement described by the fifo. The Object FIFO primitive and its lowering typically allocate the depth of each of these pools such that the resulting behaviour matches that of the conceptual depth. + +The user does however have the possibility to manually choose the depth of these pools. This feature is available because, while the Object FIFO primitive tries to offer a unified representation of the data movement across the AIE array, it also aims to provide performance programmers with the tools to more finely control it. + +For example in the code snippet below `of0` describes the data movement between producer A and consumer B: +```python +A = tile(1, 3) +B = tile(2, 4) +of0 = object_fifo("objfifo0", A, B, 3, T.memref(256, T.i32())) +``` +The conceptual depth of the Object FIFO is `3`. The reasoning behind this choice of depth can be understood by looking at the acquire and release patterns of the two actors: +```python +@core(A) +def core_body(): + for _ in range_(9): + elem0 = of0.acquire(ObjectFifoPort.Produce, 1) + call(produce_func, [elem0]) + of0.release(ObjectFifoPort.Produce, 1) + yield_([]) + +@core(B) +def core_body(): + for _ in range_(9): + elems = of0.acquire(ObjectFifoPort.Consume, 2) + call(consume_func, [elems[0], elems[1]]) + of0.release(ObjectFifoPort.Consume, 2) + yield_([]) +``` +Each iteration: +* producer A acquires one object to produce into, calls the kernel function `produce_func` to store new data in it for B to consume, and releases the object, +* consumer B acquires two objects to consume, reads the data and applies kernel function `consume_func`, then releases both objects. + +A conceptual depth of `2` would have sufficed for this system to function without deadlocking. However, with a depth of `3`, A and B can execute concurrently, i.e., while B consumes two objects and applies the kernel function A has one object available into which it can produce at the same time. + +The equivalent of this conceptual depth of `3` using an array of depths would be: +```python +of0 = object_fifo("objfifo0", A, B, [1, 2], T.memref(256, T.i32())) +``` +where `1` is the number of resources available locally to producer A and `2` is the number available to consumer B. + +> **NOTE:** For a correct lowering, this feature should be used in situations where the producers and consumers of the Object FIFO are running on different tiles. + +The feature of specifying the depths of the resource pools for different actors of the Object FIFO is used to support a specific dependency that can arise when working with multiple Object FIFOs and it is further explained in the Key Object FIFO Patterns [section](../section-2b/02_Broadcast/README.md#object-fifo-broadcast-pattern). + +### Advanced Topic : Data Movement Accelerators + +**The following topic is not required to understand the rest of this guide.** + +This part of the guide introduces a few lower level concepts in the AIE hardware and takes a closer look at the individual resource pools on each tile and the reasoning behind their depths. + +Every tile in the AIE array has its own dedicated Data Movement Accelerator (or `DMA`). The DMAs are responsible for moving data from the tile's memory module to the AXI stream interconnect or from the stream to the memory module. In the case of compute tiles, both the compute core and the tile's DMA are able to access the tile's memory module. Because of this, there is a need for a synchronization mechanism that will allow the compute core and the DMA to signal to each other when data is available for the other party to read or write in order to avoid data corruption. This is very similar to the concept of the Object FIFO where producers and consumers must first acquire objects before they can access them, and release them when they are done so they may be acquired by the other party. + +The figure below showcases a high-level view of a compute tile, where the compute core and the DMA are both reading and writing data to a location `buff` in the local memory module: + + + +The intent of this high-level view is to showcase how the DMA is able to interact with memory locations while the core is computing. It can send the data in them over the AXI stream and receive data from the stream to write into the memory locations as well, for example for the core to execute on. Because of this potential for concurrency, it is often the case that a ping-pong, or double, buffer is used instead of a single buffer. This is showcased in the figure below where the `buff` has been extended to a `buff_ping` and `buff_pong`: + + + +> **NOTE:** It is possible to directly configure the DMAs without the use of the Object FIFO primitive to setup data movement between tiles. This is described in [Section 2f](../section-2f/README.md). + +## Exercises +1. In the previous [subsection](./README.md/#specifying-the-object-fifo-depth-as-an-array) it was explained that the conceptual depth of `3` for `of0` could be represented as an array of depths `[1, 2]`. With the advanced knowledge on the topic of DMAs, do you think those depths suffice for the compute cores on tiles A and B to run concurrently with their local DMAs? + +1. How would you update the depths? + ----- [[Up](..)] [[Next - Section 2b](../section-2b/)] diff --git a/programming_guide/section-2/section-2b/02_Broadcast/README.md b/programming_guide/section-2/section-2b/02_Broadcast/README.md index 8d3131afc2..1842bf390c 100644 --- a/programming_guide/section-2/section-2b/02_Broadcast/README.md +++ b/programming_guide/section-2/section-2b/02_Broadcast/README.md @@ -27,7 +27,7 @@ of0 = object_fifo("objfifo0", A, [B, C, D], 3, T.memref(256, T.i32())) The `depth` input of an Object FIFO can also be specified as an array of integers, which describe the number of objects that are available to each tile (the producer tile plus each consumer tile) when accessing the Object FIFO. For the previous example, each of the four tiles has a resource pool of 3 objects available to perform the data movement of `of_0`. -> **NOTE:** This functionality of the Object FIFO primitive exposes what is actually going on at the hardware level when the data movement is established for a broadcast. The object pool of the Object FIFO is not a single structure but rather composed of several pools of objects that are allocated in the memory module of each tile involved in the data movement. Specifying the `depth` as an array of integers allows the user full control to set the sizes of the pools on each individual tile. +> **NOTE:** This functionality of the Object FIFO primitive exposes what is actually going on at the hardware level when the data movement is established for a broadcast. The object pool of the Object FIFO is not a single structure but rather composed of several pools of objects that are allocated in the memory module of each tile involved in the data movement. Specifying the `depth` as an array of integers allows the user full control to set the sizes of the pools on each individual tile. Please see [Section 2a](../../section-2a/README.md/#specifying-the-object-fifo-depth-as-an-array) for more details. The main advantage of this feature comes to light during a situation like the one showcased in the example below, which we refer to as a broadcast with a skip-connection. In the example below two Object FIFOs are created: `of0` is a broadcast from producer tile A to consumer tiles B and C, while `of1` is a 1-to-1 data movement from producer tile B to consumer tile C. We refer to `of0` as a skip-connection because it skips over B in the A → B → C chain when connecting A → C. ```python diff --git a/programming_guide/section-2/section-2f/README.md b/programming_guide/section-2/section-2f/README.md index 88f9f28d13..3f619e7b63 100644 --- a/programming_guide/section-2/section-2f/README.md +++ b/programming_guide/section-2/section-2f/README.md @@ -10,7 +10,7 @@ # Section 2f - Data Movement Without Object FIFOs -Not all data movement patterns can be described with Object FIFOs. This section goes into detail about how a user can express data movement using the Data Movement Accelerators (or `DMA`) on AIE tiles. +Not all data movement patterns can be described with Object FIFOs. This **advanced** section goes into detail about how a user can express data movement using the Data Movement Accelerators (or `DMA`) on AIE tiles. To better understand the code and concepts introduced in this section it is recommended to first read the [Advanced Topic of Section - 2a on DMAs](../section-2a/README.md/#advanced-topic--data-movement-accelerators). The AIE architecture currently has three different types of tiles: compute tiles referred to as `tile`, memory tiles reffered to as `Mem tile`, and external memory interface tiles referred to as `Shim tile`. Each of these tiles has its own attributes regarding compute capabilities and memory capacity, but the base design of their DMAs is the same. The different types of DMAs can be intialized using the constructors in [aie.py](../../../python/dialects/aie.py): ```python From 44d528950cc7a9fe7ec7fa9b8e4d0fd2a1b71057 Mon Sep 17 00:00:00 2001 From: Kristof Denolf Date: Tue, 23 Apr 2024 14:04:32 -0600 Subject: [PATCH 3/9] [asplos][programming guide] fix broken link (#1388) --- programming_guide/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming_guide/README.md b/programming_guide/README.md index 87f6414e5a..0d9e19a9b8 100644 --- a/programming_guide/README.md +++ b/programming_guide/README.md @@ -16,7 +16,7 @@ The AI Engine (AIE) array is a spatial compute architecture: a modular and scala Programming the AIE-array configures all its spatial building blocks: the compute cores' program memory, the data movers' buffer descriptors, interconnect with switches, etc. This guide introduces our Interface Representation for hands-ON (IRON) close-to-metal programming of the AIE-array. IRON is an open access toolkit enabling performance engineers to build fast and efficient, often specialized designs through a set of Python language bindings around mlir-aie, our MLIR-based representation of the AIE-array. mlir-aie provides the foundation from which complex and performant AI Engine designs can be defined and is supported by simulation and hardware implementation infrastructure. -> **NOTE:** For those interested in better understanding how AI Engine designs are defined at the MLIR level, take a look through the [MLIR tutorial](../tutorials/) material. mlir-aie also serves as a lower layer for other higher-level abstraction MLIR layers such as [mlir-air](https://github.com/Xilinx/mlir-air). +> **NOTE:** For those interested in better understanding how AI Engine designs are defined at the MLIR level, take a look through the [MLIR tutorial](../mlir_tutorials/) material. mlir-aie also serves as a lower layer for other higher-level abstraction MLIR layers such as [mlir-air](https://github.com/Xilinx/mlir-air). This IRON AIE programming guide first introduces the language bindings for AIE-array's structural elements ([section 1](./section-1/README.md)). After explaining how to set up explicit data movement ([section 2](./section-2/README.md)) to transport the necessary data, you can run your first program on the AIE compute core ([section 3](./section-3/README.md)). [Section 4](./section-4/README.md) adds tracing for performance analysis and explains how to exploit the compute dense vector operations. More vector design examples, basic and larger (ML or computer vision) are given in sections [5](./section-5/README.md) and [6](./section-6/README.md). Finally, the [quick reference](./quick_reference.md) summarizes the most important API elements. From 39b38bb13190239f92e6070c49f10ef8b38be0ab Mon Sep 17 00:00:00 2001 From: Kristof Denolf Date: Tue, 23 Apr 2024 14:08:32 -0600 Subject: [PATCH 4/9] fix makefiles (#1384) --- programming_examples/basic/vector_reduce_add/Makefile | 4 ++-- programming_examples/basic/vector_reduce_max/Makefile | 4 ++-- programming_examples/basic/vector_reduce_min/Makefile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/programming_examples/basic/vector_reduce_add/Makefile b/programming_examples/basic/vector_reduce_add/Makefile index ad4724dc45..ea201d5753 100644 --- a/programming_examples/basic/vector_reduce_add/Makefile +++ b/programming_examples/basic/vector_reduce_add/Makefile @@ -19,7 +19,7 @@ all: build/final.xclbin build/insts.txt VPATH := ../../../aie_kernels/aie2 -build/%.o: %.cc +build/%.cc.o: %.cc mkdir -p ${@D} cd ${@D} && xchesscc_wrapper ${CHESSCCWRAP2_FLAGS} -c $(<:%=../%) -o ${@F} @@ -27,7 +27,7 @@ build/aie.mlir: aie2.py mkdir -p ${@D} python3 $< ${devicename} ${col} > $@ -build/final.xclbin: build/aie.mlir build/reduce_add.o +build/final.xclbin: build/aie.mlir build/reduce_add.cc.o mkdir -p ${@D} cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts.txt $(<:%=../%) diff --git a/programming_examples/basic/vector_reduce_max/Makefile b/programming_examples/basic/vector_reduce_max/Makefile index 3ca11ea293..3ef597e472 100755 --- a/programming_examples/basic/vector_reduce_max/Makefile +++ b/programming_examples/basic/vector_reduce_max/Makefile @@ -19,7 +19,7 @@ all: build/final.xclbin build/insts.txt VPATH := ../../../aie_kernels/aie2 -build/%.o: %.cc +build/%.cc.o: %.cc mkdir -p ${@D} cd ${@D} && xchesscc_wrapper ${CHESSCCWRAP2_FLAGS} -c $(<:%=../%) -o ${@F} @@ -27,7 +27,7 @@ build/aie.mlir: aie2.py mkdir -p ${@D} python3 $< ${devicename} ${col} > $@ -build/final.xclbin: build/aie.mlir build/reduce_max.o +build/final.xclbin: build/aie.mlir build/reduce_max.cc.o mkdir -p ${@D} cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts.txt $(<:%=../%) diff --git a/programming_examples/basic/vector_reduce_min/Makefile b/programming_examples/basic/vector_reduce_min/Makefile index 0ade6ed0fd..b0b724e4a3 100755 --- a/programming_examples/basic/vector_reduce_min/Makefile +++ b/programming_examples/basic/vector_reduce_min/Makefile @@ -19,7 +19,7 @@ all: build/final.xclbin build/insts.txt VPATH := ../../../aie_kernels/aie2 -build/%.o: %.cc +build/%.cc.o: %.cc mkdir -p ${@D} cd ${@D} && xchesscc_wrapper ${CHESSCCWRAP2_FLAGS} -c $(<:%=../%) -o ${@F} @@ -27,7 +27,7 @@ build/aie.mlir: aie2.py mkdir -p ${@D} python3 $< ${devicename} ${col} > $@ -build/final.xclbin: build/aie.mlir build/reduce_min.o +build/final.xclbin: build/aie.mlir build/reduce_min.cc.o mkdir -p ${@D} cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts.txt $(<:%=../%) From d8e96a6d9a02b01bc242b7fdba2e4ec16d0a4d4d Mon Sep 17 00:00:00 2001 From: Emily Furst <91558012+efurst@users.noreply.github.com> Date: Tue, 23 Apr 2024 15:25:27 -0700 Subject: [PATCH 5/9] Consistency edits to vision examples (#1389) --- programming_examples/vision/color_detect/Makefile | 4 ++-- programming_examples/vision/vision_passthrough/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/programming_examples/vision/color_detect/Makefile b/programming_examples/vision/color_detect/Makefile index c8feea4cb6..9376fcd770 100755 --- a/programming_examples/vision/color_detect/Makefile +++ b/programming_examples/vision/color_detect/Makefile @@ -42,7 +42,7 @@ build/final_${COLORDETECT_WIDTH}.xclbin: build/aie2_lineBased_8b_${COLORDETECT_W cd ${@D} && aiecc.py --aie-generate-cdo --aie-generate-ipu --no-compile-host \ --xclbin-name=${@F} --ipu-insts-name=insts.txt $(<:%=../%) -build/${targetname}.exe: test.cpp +${targetname}.exe: test.cpp mkdir -p ${@D} rm -rf _build mkdir -p _build @@ -55,7 +55,7 @@ else cp _build/${targetname} $@ endif -run: build/${targetname}.exe build/final_${COLORDETECT_WIDTH}.xclbin build/insts.txt +run: ${targetname}.exe build/final_${COLORDETECT_WIDTH}.xclbin build/insts.txt ${powershell} ./$< -x build/final_${COLORDETECT_WIDTH}.xclbin -i build/insts.txt -k MLIR_AIE clean: diff --git a/programming_examples/vision/vision_passthrough/README.md b/programming_examples/vision/vision_passthrough/README.md index 31d4add65f..ebb86bc0f2 100644 --- a/programming_examples/vision/vision_passthrough/README.md +++ b/programming_examples/vision/vision_passthrough/README.md @@ -15,7 +15,7 @@ Single tile applies a pass through kernel on data from local memory. There are t To compile desing in Windows: ``` make -make build/passThrough.exe +make passThrough.exe ``` To run the design: From 04c3dd4d5b1ec6cf0b91e5413fe6e65977b4332b Mon Sep 17 00:00:00 2001 From: Kristof Denolf Date: Wed, 24 Apr 2024 09:16:33 -0600 Subject: [PATCH 6/9] [asplos][vector_scalar_mul] Fix makefile (#1394) --- programming_examples/basic/vector_scalar_mul/CMakeLists.txt | 2 -- programming_examples/basic/vector_scalar_mul/Makefile | 4 +--- programming_examples/basic/vector_scalar_mul/aie2.py | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/programming_examples/basic/vector_scalar_mul/CMakeLists.txt b/programming_examples/basic/vector_scalar_mul/CMakeLists.txt index 4d1000b813..48ff56aaaf 100644 --- a/programming_examples/basic/vector_scalar_mul/CMakeLists.txt +++ b/programming_examples/basic/vector_scalar_mul/CMakeLists.txt @@ -33,8 +33,6 @@ endif() set(VECTORSCALARMUL_SIZE 4096 CACHE STRING "vector size") set(TARGET_NAME test CACHE STRING "Target to be built") -message(STATUS "NOLF NOLF VECTORSCALARMUL_SIZE: ${VECTORSCALARMUL_SIZE}") - SET (ProjectName ${TARGET_NAME}) SET (currentTarget ${TARGET_NAME}) diff --git a/programming_examples/basic/vector_scalar_mul/Makefile b/programming_examples/basic/vector_scalar_mul/Makefile index 8099ac5b83..49d3e12e5b 100755 --- a/programming_examples/basic/vector_scalar_mul/Makefile +++ b/programming_examples/basic/vector_scalar_mul/Makefile @@ -11,9 +11,7 @@ include ../../makefile-common VPATH := ../../../aie_kernels/aie2 targetname = vectorScalar -#data_size = 4096 -data_size = 512 -#data_size = 1024 +data_size = 4096 trace_size = 8192 all: build/final_${data_size}.xclbin build/insts_${data_size}.txt diff --git a/programming_examples/basic/vector_scalar_mul/aie2.py b/programming_examples/basic/vector_scalar_mul/aie2.py index d6ca3d0813..437b12aadf 100755 --- a/programming_examples/basic/vector_scalar_mul/aie2.py +++ b/programming_examples/basic/vector_scalar_mul/aie2.py @@ -100,7 +100,7 @@ def sequence(A, F, C): try: vector_size = int(sys.argv[1]) - if vector_size % 64 != 0 or vector_size <= 512: + if vector_size % 64 != 0 or vector_size < 512: print("Vector size must be a multiple of 64 and greater than or equal to 512") raise ValueError trace_size = 0 if (len(sys.argv) != 3) else int(sys.argv[2]) From 1e13a607c05f124cc85d6ff8ee9de2136a20ee81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20R=C3=B6sti?= Date: Wed, 24 Apr 2024 08:39:34 -0700 Subject: [PATCH 7/9] Typos and Clarifications to ASPLOS Tutorial (#1390) Co-authored-by: Joseph Melber Co-authored-by: Joseph Melber --- .../asplos24TutorialDescription.md | 2 +- programming_guide/README.md | 2 +- programming_guide/section-0/README.md | 6 +-- programming_guide/section-1/README.md | 34 ++++++++--------- programming_guide/section-2/README.md | 2 +- .../section-2/section-2a/README.md | 38 +++++++++---------- .../section-2/section-2b/01_Reuse/README.md | 10 ++--- .../section-2b/02_Broadcast/README.md | 2 +- .../03_Link_Distribute_Join/README.md | 12 +++--- .../section-2/section-2b/README.md | 4 +- .../section-2/section-2c/README.md | 14 +++---- .../section-2/section-2d/README.md | 6 +-- .../03_external_mem_to_core_L2/README.md | 2 +- .../section-2e/04_distribute_L2/README.md | 4 +- .../section-2/section-2e/05_join_L2/README.md | 2 +- .../section-2/section-2f/README.md | 18 ++++----- .../section-2/section-2g/README.md | 8 +++- programming_guide/section-3/README.md | 12 +++--- 18 files changed, 91 insertions(+), 87 deletions(-) diff --git a/docs/conferenceDescriptions/asplos24TutorialDescription.md b/docs/conferenceDescriptions/asplos24TutorialDescription.md index f7f26d5b8a..b7e1d85a79 100644 --- a/docs/conferenceDescriptions/asplos24TutorialDescription.md +++ b/docs/conferenceDescriptions/asplos24TutorialDescription.md @@ -16,7 +16,7 @@ This tutorial will cover the following key topics: Date: Saturday April 27th 2024 (morning) Location: Hilton La Jolla Torrey Pines, San Diego, California (with ASPLOS’24) -Prerequisite: please bring your laptop, so that you can ssh into our Ryzen AI enabled miniPCs for the hands-on excersizes. +Prerequisite: please bring your laptop, so that you can ssh into our Ryzen AI enabled miniPCs for the hands-on exercises. ### Contents and Timeline (tentative) diff --git a/programming_guide/README.md b/programming_guide/README.md index 0d9e19a9b8..df0471ebc0 100644 --- a/programming_guide/README.md +++ b/programming_guide/README.md @@ -18,7 +18,7 @@ Programming the AIE-array configures all its spatial building blocks: the comput > **NOTE:** For those interested in better understanding how AI Engine designs are defined at the MLIR level, take a look through the [MLIR tutorial](../mlir_tutorials/) material. mlir-aie also serves as a lower layer for other higher-level abstraction MLIR layers such as [mlir-air](https://github.com/Xilinx/mlir-air). -This IRON AIE programming guide first introduces the language bindings for AIE-array's structural elements ([section 1](./section-1/README.md)). After explaining how to set up explicit data movement ([section 2](./section-2/README.md)) to transport the necessary data, you can run your first program on the AIE compute core ([section 3](./section-3/README.md)). [Section 4](./section-4/README.md) adds tracing for performance analysis and explains how to exploit the compute dense vector operations. More vector design examples, basic and larger (ML or computer vision) are given in sections [5](./section-5/README.md) and [6](./section-6/README.md). Finally, the [quick reference](./quick_reference.md) summarizes the most important API elements. +This IRON AIE programming guide first introduces the language bindings for AIE-array's structural elements ([section 1](./section-1/README.md)). After explaining how to set up explicit data movement ([section 2](./section-2/README.md)) to transport the necessary data, you can run your first program on the AIE compute core ([section 3](./section-3/README.md)). [Section 4](./section-4/README.md) adds tracing for performance analysis and explains how to exploit the compute dense vector operations. More vector design examples, basic and larger (ML or computer vision), are given in sections [5](./section-5/README.md) and [6](./section-6/README.md). Finally, the [quick reference](./quick_reference.md) summarizes the most important API elements. ## Outline

Section 0 - Getting Set Up for IRON diff --git a/programming_guide/section-0/README.md b/programming_guide/section-0/README.md index f71d3d368c..c4b5558927 100644 --- a/programming_guide/section-0/README.md +++ b/programming_guide/section-0/README.md @@ -14,11 +14,11 @@ This programming guide focuses on application programming for the NPU found in R ## Recommended Hardware -* [Phoenix Point Mini PC : Minisforum UM790 Pro : AMD Ryzen™ 9 7940HS](https://store.minisforum.com/products/minisforum-um790-pro?variant=43865372786933) +* [Phoenix Point Mini PC: Minisforum UM790 Pro : AMD Ryzen™ 9 7940HS](https://store.minisforum.com/products/minisforum-um790-pro?variant=43865372786933) -* [Hawk Point Mini PC : GMKtec NucBox K8 : AMD Ryzen™ 7 8845HS](https://www.gmktec.com/products/amd-ryzen-7-8845hs-mini-pc-nucbox-k8?spm=..product_fe40bedf-d378-40fc-a60a-54d18f1dbc53.header_1.1&variant=71118fa4-6acb-4d6e-abcb-1d3cf00e6438) +* [Hawk Point Mini PC: GMKtec NucBox K8 : AMD Ryzen™ 7 8845HS](https://www.gmktec.com/products/amd-ryzen-7-8845hs-mini-pc-nucbox-k8?spm=..product_fe40bedf-d378-40fc-a60a-54d18f1dbc53.header_1.1&variant=71118fa4-6acb-4d6e-abcb-1d3cf00e6438) -* [Phoenix Point Laptop : ASUS Vivobook Pro 15 M6500XV-EB96 : AMD Ryzen™ 9 7940HS](https://www.asus.com/us/laptops/for-creators/vivobook/asus-vivobook-pro-15-oled-m6500/) +* [Phoenix Point Laptop: ASUS Vivobook Pro 15 M6500XV-EB96 : AMD Ryzen™ 9 7940HS](https://www.asus.com/us/laptops/for-creators/vivobook/asus-vivobook-pro-15-oled-m6500/) ## AMD Ryzen™ AI Initial Setup diff --git a/programming_guide/section-1/README.md b/programming_guide/section-1/README.md index a70c2e4dd5..3444d9e392 100644 --- a/programming_guide/section-1/README.md +++ b/programming_guide/section-1/README.md @@ -10,24 +10,24 @@ # Section 1 - Basic AI Engine building blocks -When we program the AIE-array, we need to declare and configure its structural building blocks: compute tiles for vector processing, memory tiles as larger level-2 shared scratchpads, and shim tiles supporting data movement to external memory. In this programming guide, we will be utilizing the IRON python bindings for MLIR-AIE components to describe our design at the tile level of granularity. Later on, when we focus on kernel programming, we will explore vector programming in C/C++. But let's first look at a basic python source file (named [aie2.py](./aie2.py)) for an IRON design. +When we program the AIE-array, we need to declare and configure its structural building blocks: compute tiles for vector processing, memory tiles as larger level-2 shared scratchpads, and shim tiles supporting data movement to external memory. In this programming guide, we will be utilizing the IRON Python bindings for MLIR-AIE components to describe our design at the tile level of granularity. Later on, when we focus on kernel programming, we will explore vector programming in C/C++. But let's first look at a basic Python source file (named [aie2.py](./aie2.py)) for an IRON design. -## Walkthrough of python source file (aie2.py) -At the top of this python source, we include modules that define the IRON AIE language bindings `aie.dialects.aie` and the mlir-aie context `aie.extras.context` which binds to MLIR definitions for AI Engines. +## Walkthrough of Python source file (aie2.py) +At the top of this Python source, we include modules that define the IRON AIE language bindings `aie.dialects.aie` and the mlir-aie context `aie.extras.context` which binds to MLIR definitions for AI Engines. ``` from aie.dialects.aie import * # primary mlir-aie dialect definitions from aie.extras.context import mlir_mod_ctx # mlir-aie context ``` -Then we declare a structural design function that will expand into mlir code when it will get called from within an mlir-aie context (see last part of this subsection). +Then we declare a structural design function that will expand into MLIR code when it will get called from within an mlir-aie context (see last part of this subsection). ``` # AI Engine structural design function def mlir_aie_design(): <... AI Engine device, blocks and connections ...> ``` -Let's look at how we declare the AI Engine device, blocks and connections. We start off by declaring our AIE device via `@device(AIEDevice.npu)` or `@device(AIEDevice.xcvc1902)`. The blocks and connections themselves will then be declared inside the `def device_body():`. Here, we instantiate our AI Engine blocks, which in this first example are simply AIE compute tiles. +Let's look at how we declare the AI Engine device, blocks and connections. We start off by declaring our AIE device via `@device(AIEDevice.npu)` or `@device(AIEDevice.xcvc1902)`. The blocks and connections themselves will then be declared inside the `def device_body():`. Here, we instantiate our AI Engine blocks, which in this first example are AIE compute tiles. -The arguments for the tile declaration are the tile coordinates (column, row) and we assign it a variable tile name in our python program. +The arguments for the tile declaration are the tile coordinates (column, row). We assign each declared tile to a variable in our Python program. > **NOTE:** The actual tile coordinates used on the device when the program is run may deviate from the ones declared here. For example, on the NPU on Ryzen™ AI (`@device(AIEDevice.npu)`), these coordinates tend to be relative coordinates as the runtime scheduler may assign it to a different available column during runtime. @@ -37,20 +37,20 @@ The arguments for the tile declaration are the tile coordinates (column, row) an def device_body(): # Tile declarations - ComputeTile = tile(1, 3) - ComputeTile = tile(2, 3) - ComputeTile = tile(2, 4) + ComputeTile1 = tile(1, 3) + ComputeTile2 = tile(2, 3) + ComputeTile3 = tile(2, 4) ``` -Once we are done declaring our blocks (and connections) within our design function, we move onto the main body of our program where we call the function and output our design in MLIR. This is done by first declaring the MLIR context via the `with mlir_mod_ctx() as ctx:` line. This indicates that subsequent indented python code is in the MLIR context and we follow this by calling our previosly defined design function `mlir_aie_design()`. This means all the code within the design function is understood to be in the MLIR context and contains the IRON custom python binding definitions of the more detailed mlir block definitions. The final line is `print(ctx.module)` which takes the code defined in our MLIR context and prints it stdout. This will then convert our python binded code to its MLIR equivalent and print it to stdout. +Once we are done declaring our blocks (and connections) within our design function, we move onto the main body of our program where we call the function and output our design in MLIR. This is done by first declaring the MLIR context via the `with mlir_mod_ctx() as ctx:` line. This indicates that subsequent indented Python code is in the MLIR context and we follow this by calling our previosly defined design function `mlir_aie_design()`. This means all the code within the design function is understood to be in the MLIR context and contains the IRON custom Python binding definitions of the more detailed MLIR block definitions. The final line is `print(ctx.module)` which takes the code defined in our MLIR context and prints it stdout. This will then convert our Python-bound code to its MLIR equivalent and print it to stdout. ``` # Declares that subsequent code is in mlir-aie context with mlir_mod_ctx() as ctx: mlir_aie_design() # Call design function within the mlir-aie context - print(ctx.module) # Print the python-to-mlir conversion to stdout + print(ctx.module) # Print the Python-to-MLIR conversion to stdout ``` ## Other Tile Types -Next to the compute tiles, an AIE-array also contains data movers for accessing L3 memory (also called shim DMAs) and larger L2 scratchpads (called mem tiles) which are available since the AIE-ML generation - see [the introduction of this programming guide](../README.md). Declaring these other types of structural blocks follows the same syntax but requires physical layout details for the specific target device. Shim DMAs typically occupy row 0, while mem tiles (when available) often reside on the following row(s). The following code segment declares all the different tile types found in a single NPU column. +Next to the compute tiles, an AIE-array also contains data movers for accessing L3 memory (also called shim DMAs) and larger L2 scratchpads (called mem tiles) which are available since the AIE-ML generation - see [the introduction of this programming guide](../README.md). Declaring these other types of structural blocks follows the same syntax but requires physical layout details for the specific target device. Shim DMAs typically occupy row 0, while mem tiles (when available) often reside on row 1. The following code segment declares all the different tile types found in a single NPU column. ``` # Device declaration - here using aie2 device NPU @@ -67,13 +67,13 @@ Next to the compute tiles, an AIE-array also contains data movers for accessing ``` ## Exercises -1. To run our python program from the command line, we type `python3 aie2.py` which converts our python structural design into MLIR source code. This works from the command line if our design environment already contains the mlir-aie python binded dialect module. We included this in the [Makefile](./Makefile) so go ahead and run `make` now. Then take a look at the generated MLIR source under `build/aie.mlir`. +1. To run our Python program from the command line, we type `python3 aie2.py` which converts our Python structural design into MLIR source code. This works from the command line if our design environment already contains the mlir-aie Python-bound dialect module. We included this in the [Makefile](./Makefile), so go ahead and run `make` now. Then take a look at the generated MLIR source under `build/aie.mlir`. -2. Run `make clean` to remove the generated files. Then introduce an error to the python source such as misspelling `tile` to `tilex` and then run `make` again. What messages do you see? +2. Run `make clean` to remove the generated files. Then introduce an error to the Python source such as misspelling `tile` to `tilex` and then run `make` again. What messages do you see? -3. Run `make clean` again. Now change the error by renaming `tilex` back to `tile` but change the coordinates to (-1,3) which is an inavlid location. Run `make` again. What messages do you see now? +3. Run `make clean` again. Now change the error by renaming `tilex` back to `tile`, but change the coordinates to (-1,3) which is an invalid location. Run `make` again. What messages do you see now? -4. No error is generated but our code is invalid. Take a look at the generated MLIR code under `build/aie.mlir`. This generated output is invalid MLIR syntax and running our mlir-aie tools on this MLIR source will generate an error. We do, however, have some additional python structural syntax checks that can be enabled if we use the function `ctx.module.operation.verify()`. This verifies that our python binded code has valid operation within the mlir-aie context. +4. No error is generated but our code is invalid. Take a look at the generated MLIR code under `build/aie.mlir`. This generated output is invalid MLIR syntax and running our mlir-aie tools on this MLIR source will generate an error. We do, however, have some additional Python structural syntax checks that can be enabled if we use the function `ctx.module.operation.verify()`. This verifies that our Python-bound code has valid operation within the mlir-aie context. Qualify the `print(ctx.module)` call with a check on `ctx.module.operation.verify()` using a code block like the following: ``` @@ -83,7 +83,7 @@ Next to the compute tiles, an AIE-array also contains data movers for accessing else: print(res) ``` - Make this change and run `make` again. What message do you see now? + Make this change and run `make` again. What message do you see now? ----- [[Prev - Section 0](../section-0/)] [[Top](..)] [[Next - Section 2](../section-2/)] diff --git a/programming_guide/section-2/README.md b/programming_guide/section-2/README.md index f22c164946..0679fb2cb1 100644 --- a/programming_guide/section-2/README.md +++ b/programming_guide/section-2/README.md @@ -16,7 +16,7 @@ In this section of the programming guide, we introduce the Object FIFO high-leve 3. understand the design decisions which led to current limitations and/or restrictions in the Object FIFO design, 4. know where to find more in-depth material of the Object FIFO implementation and lower-level lowering. -To understand the need for a data movement abstraction we must first understand the hardware architecture with which we are working. The AIE array is a [spatial compute architecture](../README.md) with explicit data movement requirements. Each compute unit of the array works on data that is stored within its L1 memory module and that data needs to be explicitly moved there as part of the AIE's array global data movement configuration. This configuration involves several specialized hardware resources which handle the data movement over the entire array in such a way that data arrives at its destination without loss. The Object FIFO provides users with a way to specify the data movement in a more human comprehensible and accessible manner without sacrificing some of the more advanced control possibilities which the hardware provides. +To understand the need for a data movement abstraction we must first understand the hardware architecture with which we are working. The AIE array is a [spatial compute architecture](../README.md) with explicit data movement requirements. Each compute unit of the array works on data that is stored within its L1 memory module and that data needs to be explicitly moved there as part of the AIE's array global data movement configuration. This configuration involves several specialized hardware resources which handle the data movement over the entire array in such a way that data arrives at its destination without loss. The Object FIFO provides users with a way to specify the data movement in a more human-comprehensible and accessible manner, without sacrificing some of the more advanced control possibilities which the hardware provides. > **NOTE:** For more in-depth, low-level material on Object FIFO programming in MLIR please see the MLIR-AIE [tutorials](../mlir_tutorials). diff --git a/programming_guide/section-2/section-2a/README.md b/programming_guide/section-2/section-2a/README.md index 1b826b3efd..2eb790472e 100644 --- a/programming_guide/section-2/section-2a/README.md +++ b/programming_guide/section-2/section-2a/README.md @@ -28,11 +28,11 @@ class object_fifo: dimensionsFromStreamPerConsumer=None, ) ``` -We will now go over each of the inputs, what they represents and why they are required by the abstraction. We will first focus on the mandatory inputs and in a later section of the guide on the default valued ones (see Data Layout Transformations in [section-2c](../section-2c/README.md#data-layout-transformations)). +We will now go over each of the inputs, what they represent and why they are required by the abstraction. We will first focus on the mandatory inputs and in a later section of the guide on the default-valued ones (see Data Layout Transformations in [section-2c](../section-2c/README.md#data-layout-transformations)). -First of all, an Object FIFO has a unique `name` which is required for the lowering steps. The Object FIFO functions as an ordered buffer that has `depth`-many objects of specified `datatype`. Currently, all objects in an Object FIFO have to be of the same datatype. The `datatype` is a tensor-like attribute where the size of the tensor and the type of the individual elements are specified at the same time (i.e. `<16xi32>`). The `depth` can be either an integer or an array of integers. The latter is explained further down in this section. +First of all, an Object FIFO has a unique `name` which is required for the lowering steps. The Object FIFO functions as an ordered buffer that has a count of `depth` objects of specified `datatype`. Currently, all objects in an Object FIFO have to be of the same datatype. The `datatype` is a tensor-like attribute where the size of the tensor and the type of the individual elements are specified at the same time (i.e. `<16xi32>`). The `depth` can be either an integer or an array of integers. The latter is explained further down in this section. -An Object FIFO is created between a producer, or source tile, and a consumer, or destination tile. The tiles are where producer and consumer processes accessing the Object FIFO will be executed. These processes are also refered to as the `actors` of the Object FIFO, based on dataflow theory terminology. Below, you can see an example of an Object FIFO created between producer tile A and consumer tile B: +An Object FIFO is created between a producer, or source tile, and a consumer, or destination tile. The tiles are where producer and consumer processes accessing the Object FIFO will be executed. These processes are also refered to as the "actors" of the Object FIFO, based on dataflow theory terminology. Below, you can see an example of an Object FIFO created between producer tile A and consumer tile B: ```python A = tile(1, 3) B = tile(2, 4) @@ -42,17 +42,17 @@ The created Object FIFO is stored in the `of0` variable and is named `objfifo0`. -As you will see in the Key Object FIFO Patterns [section](../section-2b/README.md#key-object-fifo-patterns), an Object FIFO can have multiple consumer tiles, which describes a broadcast connection from the source tile to all of the consumer tiles. As such, the `consumerTiles` input can be either a single tile or an array of tiles. This is not the case for the `producerTile` input as currently the Object FIFO does not support multiple producers. +As you will see in the ["Key Object FIFO Patterns" section](../section-2b/README.md#key-object-fifo-patterns), an Object FIFO can have multiple consumer tiles, which describes a broadcast connection from the source tile to all of the consumer tiles. As such, the `consumerTiles` input can be either a single tile or an array of tiles. This is not the case for the `producerTile` input, as currently the Object FIFO does not support multiple producers. ### Accessing the objects of an Object FIFO -An Object FIFO can be accessed by the processes running on the producer and consumer tiles registered to it. Before a process can have access to the objects it has to acquire them from the Object FIFO. This is because the Object FIFO is a synchronized communication primitive that leverages the synchronization mechanism available in the target hardware architecture to ensure that two processes can't access the same object at the same time. Once a process has finished working with an object and has no further use for it, it should release it so that another process will be able to acquire and access it. The patterns in which a producer or a consumer process acquires and releases objects from an Object FIFO are called `access patterns`. We can specifically refer to the acquire and release patterns as well. +An Object FIFO can be accessed by the processes running on the producer and consumer tiles registered to it. Before a process can have access to the objects, it has to acquire them from the Object FIFO. This is because the Object FIFO is a synchronized communication primitive that leverages the synchronization mechanism available in the target hardware architecture to ensure that two processes cannot access the same object at the same time. Once a process has finished working with an object and has no further use for it, it must release it so that another process will be able to acquire and access it. The patterns in which a producer or a consumer process acquires and releases objects from an Object FIFO are called "access patterns". We can specifically refer to the acquire and release patterns as well. To acquire one or multiple objects users should use the acquire function of the `object_fifo` class: ```python def acquire(self, port, num_elem) ``` -Based on the `num_elem` input representing the number of acquired elements, the acquire function will either directly return an object, or an array of objects that can be accessed in an array-like fashion. +Based on the `num_elem` input representing the number of acquired elements, the acquire function will either directly return an object, or an array of objects. The Object FIFO is an ordered primitive and the API keeps track for each process which object is the next one that they will have access to when acquiring, based on how many they have already acquired and released. Specifically, the first time a process acquires an object it will have access to the first object of the Object FIFO, and after releasing it and acquiring a new one, it'll have access to the second object, and so on until the last object, after which the order starts from the first one again. When acquiring multiple objects and accessing them in the returned array, the object at index 0 will always be the oldest object that that process has access to, which may not be the first object in the pool of that Object FIFO. @@ -60,11 +60,11 @@ To release one or multiple objects users should use the release function of the ```python def release(self, port, num_elem) ``` -A process may release one, some or all of the objects it has acquired. The release function will release objects from oldest to youngest in acquired order. If a process does not release all of the objects it has acquired, then the next time it acquires objects the oldest objects will be those that were not released. This functionality is intended to achieve the behaviour of a sliding window through the Object FIFO primitive. This is described further in the Key Object FIFO Patterns [section](../section-2b/01_Reuse/README.md#object-fifo-reuse-pattern). +A process may release one, some or all of the objects it has acquired. The release function will release objects from oldest to youngest in acquired order. If a process does not release all of the objects it has acquired, then the next time it acquires objects the oldest objects will be those that were not released. This functionality is intended to achieve the behaviour of a sliding window through the Object FIFO primitive. This is described further in the ["Key Object FIFO Patterns" section](../section-2b/01_Reuse/README.md#object-fifo-reuse-pattern). -When acquiring the objects of an Object FIFO using the acquire function it is important to note that any unreleased objects from a previous acquire will also be returned by the most recent acquire call. Unreleased objects will not be reacquired in the sense that the synchronization mechanism used under the hood has already been set in place such that the process already has the sole access rights to the unreleased objects from the previous acquire. As such, two acquire calls back-to-back without a release call in-between will result in the same objects being returned by both acquire calls. This decision was made to facilitate the understanding of releasing objects between calls to the acquire function as well as to ensure a proper lowering through the Object FIFO primitive. A code example of this behaviour is available in the Key Object FIFO Patterns [section](../section-2b/01_Reuse/README.md#object-fifo-reuse-pattern). +When acquiring the objects of an Object FIFO using the acquire function it is important to note that any unreleased objects from a previous acquire will also be returned by the most recent acquire call. Unreleased objects will not be reacquired in the sense that the synchronization mechanism used under the hood has already been set in place such that the process already has the sole access rights to the unreleased objects from the previous acquire. As such, two acquire calls back-to-back without a release call in-between will result in the same objects being returned by both acquire calls. This decision was made to facilitate the understanding of releasing objects between calls to the acquire function as well as to ensure a proper lowering through the Object FIFO primitive. A code example of this behaviour is available in the ["Key Object FIFO Patterns" section](../section-2b/01_Reuse/README.md#object-fifo-reuse-pattern). -The `port` input of both the acquire and the release functions represents whether that process is a producer or a consumer process and it is an important hint for the Object FIFO lowering to properly leverage the underlying synchronization mechanism. Its value may be either `ObjectFifoPort.Produce` or `ObjectFifoPort.Consume`. However, an important thing to note is that the terms producer and consumers are used mainly as a means to provide a logical reference for a human user to keep track of what process is at what end of the data movement, but it does not restrict the behaviour of that process, i.e., a producer process may simply access an object to read it and does not require to modify it. +The `port` input of both the acquire and the release functions represents whether that process is a producer or a consumer process and it is an important indication for the Object FIFO lowering to properly leverage the underlying synchronization mechanism. Its value may be either `ObjectFifoPort.Produce` or `ObjectFifoPort.Consume`. However, an important thing to note is that the terms producer and consumers are used mainly as a means to provide a logical reference for a human user to keep track of what process is at what end of the data movement, but it does not restrict the behaviour of that process, i.e., a producer process may simply access an object to read it and is not required to modify it. Below you can see an example of two processes that are iterating over the objects of the Object FIFO `of0` that we initialized in the previous section, one running on the producer tile and the other on the consumer tile. To do this, the producer process runs a loop of three iterations, equal to the depth of `of0`, and during each iteration it acquires one object from `of0`, calls a `test_func` function on the acquired object, and releases the object. The consumer process only runs once and acquires all three objects from `of0` at once and stores them in the `elems` array, from which it can access each object individually in any order. It then calls a `test_func2` function three times and in each call it gives as input one of the objects it acquired, before releasing all three objects at the end. ```python @@ -89,15 +89,15 @@ def core_body(): of0.release(ObjectFifoPort.Consume, 3) ``` -The code above can be viewed as in the figure below where each of the 4 drawings can be seen as the state of the system during an iteration of execution. In the first three iterations, the producer process, drawn in blue, on tile A progressively acquires the elements of `of0` one by one. Once the third element has been released in the forth iteration the consumer process, drawn in green, on tile B is able to acquire all three objects at once. +The figure below illustrates this code: Each of the 4 drawings represents the state of the system during one iteration of execution. In the first three iterations, the producer process on tile A, drawn in blue, progressively acquires the elements of `of0` one by one. Once the third element has been released in the forth iteration, the consumer process on tile B, drawn in green, is able to acquire all three objects at once. Examples of designs that use these features are available in Section 2e: [01_single_double_buffer](../section-2e/01_single_double_buffer/) and [02_external_mem_to_core](../section-2e/02_external_mem_to_core/). -### Object FIFOs with same producer / consumer +### Object FIFOs with the same producer / consumer -An Object FIFO can be created with the same tile as both its producer and consumer tile. This is mostly done in order to ensure proper synchronization within the process itself, as opposed to synchronization across multiple processes running on different tiles, as we've seen in examples up until this point. Composing two kernels with access to a shared buffer is an application that leverages this property of the Object FIFO, as showcased in the code snippet below, where `test_func` and `test_func2` are composed using `of0`: +An Object FIFO can be created with the same tile as both its producer and consumer tile. This is mostly done to ensure proper synchronization within the process itself, as opposed to synchronization across multiple processes running on different tiles, as we have seen in examples up until this point. Composing two kernels with access to a shared buffer is an application that leverages this property of the Object FIFO, as showcased in the code snippet below, where `test_func` and `test_func2` are composed using `of0`: ```python A = tile(1, 3) of0 = object_fifo("objfifo0", A, A, 3, T.memref(256, T.i32())) @@ -119,11 +119,11 @@ def core_body(): As was mentioned in the beginning of this section, the AIE architecture is a spatial architecture that requires explicit data movement. As such, while the Object FIFO's conceptual design is that of an ordered buffer between two or more AIE tiles, in reality its conceptual depth is spread out over multiple resource pools that may be located at different levels of the memory hierarchy and on different tiles. -A more in-depth yet still logical view of the Object FIFO's depth is that the producer and each consumer have their own working resource pool available in their local memory modules which they can use to send and receive data in relation to the data movement described by the fifo. The Object FIFO primitive and its lowering typically allocate the depth of each of these pools such that the resulting behaviour matches that of the conceptual depth. +A more in-depth, yet still abstract, view of the Object FIFO's depth is that the producer and each consumer have their own working resource pool available in their local memory modules which they can use to send and receive data in relation to the data movement described by the Object FIFO. The Object FIFO primitive and its lowering typically allocate the depth of each of these pools such that the resulting behaviour matches that of the conceptual depth. The user does however have the possibility to manually choose the depth of these pools. This feature is available because, while the Object FIFO primitive tries to offer a unified representation of the data movement across the AIE array, it also aims to provide performance programmers with the tools to more finely control it. -For example in the code snippet below `of0` describes the data movement between producer A and consumer B: +For example, in the code snippet below `of0` describes the data movement between producer A and consumer B: ```python A = tile(1, 3) B = tile(2, 4) @@ -151,7 +151,7 @@ Each iteration: * producer A acquires one object to produce into, calls the kernel function `produce_func` to store new data in it for B to consume, and releases the object, * consumer B acquires two objects to consume, reads the data and applies kernel function `consume_func`, then releases both objects. -A conceptual depth of `2` would have sufficed for this system to function without deadlocking. However, with a depth of `3`, A and B can execute concurrently, i.e., while B consumes two objects and applies the kernel function A has one object available into which it can produce at the same time. +A conceptual depth of `2` would have sufficed for this system to function without deadlocking. However, with a depth of `3`, A and B can execute concurrently, i.e., while B consumes two objects and applies the kernel function, A has one object available into which it can produce at the same time. The equivalent of this conceptual depth of `3` using an array of depths would be: ```python @@ -161,21 +161,21 @@ where `1` is the number of resources available locally to producer A and `2` is > **NOTE:** For a correct lowering, this feature should be used in situations where the producers and consumers of the Object FIFO are running on different tiles. -The feature of specifying the depths of the resource pools for different actors of the Object FIFO is used to support a specific dependency that can arise when working with multiple Object FIFOs and it is further explained in the Key Object FIFO Patterns [section](../section-2b/02_Broadcast/README.md#object-fifo-broadcast-pattern). +The feature of specifying the depths of the resource pools for different actors of the Object FIFO is used to support a specific dependency that can arise when working with multiple Object FIFOs and it is further explained in the ["Key Object FIFO Patterns" section](../section-2b/02_Broadcast/README.md#object-fifo-broadcast-pattern). -### Advanced Topic : Data Movement Accelerators +### Advanced Topic: Data Movement Accelerators **The following topic is not required to understand the rest of this guide.** This part of the guide introduces a few lower level concepts in the AIE hardware and takes a closer look at the individual resource pools on each tile and the reasoning behind their depths. -Every tile in the AIE array has its own dedicated Data Movement Accelerator (or `DMA`). The DMAs are responsible for moving data from the tile's memory module to the AXI stream interconnect or from the stream to the memory module. In the case of compute tiles, both the compute core and the tile's DMA are able to access the tile's memory module. Because of this, there is a need for a synchronization mechanism that will allow the compute core and the DMA to signal to each other when data is available for the other party to read or write in order to avoid data corruption. This is very similar to the concept of the Object FIFO where producers and consumers must first acquire objects before they can access them, and release them when they are done so they may be acquired by the other party. +Every tile in the AIE array has its own dedicated Data Movement Accelerator (or "DMA"). The DMAs are responsible for moving data from the tile's memory module to the AXI stream interconnect, or from the stream to the memory module. In the case of compute tiles, both the compute core and the tile's DMA are able to access the tile's memory module. Because of this, there is a need for a **synchronization mechanism** that will allow the compute core and the DMA to signal to each other when data is available for the other party to read or write in order to avoid data corruption. This is very similar to the concept of the Object FIFO where producers and consumers must first acquire objects before they can access them, and release them when they are done so they may be acquired by the other party. The figure below showcases a high-level view of a compute tile, where the compute core and the DMA are both reading and writing data to a location `buff` in the local memory module: -The intent of this high-level view is to showcase how the DMA is able to interact with memory locations while the core is computing. It can send the data in them over the AXI stream and receive data from the stream to write into the memory locations as well, for example for the core to execute on. Because of this potential for concurrency, it is often the case that a ping-pong, or double, buffer is used instead of a single buffer. This is showcased in the figure below where the `buff` has been extended to a `buff_ping` and `buff_pong`: +The intent of this high-level view showcases that the DMA is able to interact with memory buffers while the compute core is simultaneously accessing them. The DMA can send data from a buffer onto the AXI stream, and receive data from the stream to write into a buffer which the core is processing. Because this concurrency can lead to data races, a ping-pong buffer (also called double buffer) is often used instead of a single buffer. This is showcased in the figure below where the `buff` has been extended to a `buff_ping` and `buff_pong`: diff --git a/programming_guide/section-2/section-2b/01_Reuse/README.md b/programming_guide/section-2/section-2b/01_Reuse/README.md index 883f7567a9..5ffb69d2d4 100644 --- a/programming_guide/section-2/section-2b/01_Reuse/README.md +++ b/programming_guide/section-2/section-2b/01_Reuse/README.md @@ -10,9 +10,9 @@ # Object FIFO Reuse Pattern -During the previous [section](../../section-2a/README.md#accessing-the-objects-of-an-object-fifo) it was mentioned that the Object FIFO acquire and release functions can be paired together to achieve the behaviour of a sliding window with data reuse. Specifically, this communication pattern occurs when a producer or a consumer of an Object FIFO releases less objects than it had previously acquired. As acquiring from an Object FIFO does not destroy the data, unreleased objects can be reused without requiring new copies of the data. +In the previous [section](../../section-2a/README.md#accessing-the-objects-of-an-object-fifo) it was mentioned that the Object FIFO acquire and release functions can be paired together to achieve the behaviour of a sliding window with data reuse. Specifically, this communication pattern occurs when a producer or a consumer of an Object FIFO releases less objects than it had previously acquired. As acquiring from an Object FIFO does not destroy the data, unreleased objects can continue to be used without requiring new copies of the data. -It is important to note that each new acquire function will return a new object or array of objects that a process can access, which includes unreleased objects from previous acquires. The process should always use the result of the most recent acquire call to access unreleased objects to ensure a proper lowering through the Object FIFO primitive. +It is important to note that each new acquire function will return a new object or array of objects that a process can access, which **includes unreleased objects from previous acquire calls**. The process should always use the result of the **most recent** acquire call to access unreleased objects to ensure a proper lowering through the Object FIFO primitive. In the example below `of0` is created between producer A and consumer B with a depth of 3 objects: object0, object1, and object2. The process running on the core of tile B is showcased in the next figure and explained in-depth below. ```python @@ -43,13 +43,13 @@ def core_body(): The figure below represents the status of the system in each of the marked situations 1 through 4: 1. Consumer B first acquires 2 elements from `of0` in the variable `elems`. As this is the first time that B acquires, it will have access to object0 and object1. B then applies `test_func2` on the two acquired elements. Finally, B releases a single object, the oldest acquired one, and keeps object1. -2. B acquires 2 elements in variable `elems_2`. It already has access to object1 which remains unreleased from 1, but also to the newly acquired object2. B again applies the function after which it only releases a single object and keeps object2. +2. B acquires 2 elements in variable `elems_2`. It now has access to object1 (which remains acquired from the first acquire call at step 1), and also to the newly acquired object2. B again applies the function, after which it only releases a single object and keeps object2. 3. B acquires 2 objects in `elems_3` and has access to object2 and object0. B releases a single object and keeps object0. -4. B acquires 2 objects in `elems_4` and has access to object0 and object1 thus returning to the situation at the beginning of 1. +4. B acquires 2 objects in `elems_4` and has access to object0 and object1 thus returning to the situation at the beginning of step 1. -The situations above can be fused into a for loop with 4 iterations. By continuously releasing one less element than it acquired every iteration, the consumer process running on tile B is implementing the behaviour of a sliding window with 2 objects that slides down by 1 each new iteration. +The situations above can be fused into a `for`-loop with 4 iterations. By continuously releasing one less element than it acquired every iteration, the consumer process running on tile B is implementing the behaviour of a sliding window with 2 objects that slides down by 1 in each iteration. ```python A = tile(1, 3) B = tile(2, 4) diff --git a/programming_guide/section-2/section-2b/02_Broadcast/README.md b/programming_guide/section-2/section-2b/02_Broadcast/README.md index 1842bf390c..1381619588 100644 --- a/programming_guide/section-2/section-2b/02_Broadcast/README.md +++ b/programming_guide/section-2/section-2b/02_Broadcast/README.md @@ -62,7 +62,7 @@ def core_body(): ``` We can see that C requires one object from both `of0` and `of1` before it can proceed with its execution. However, B also requires an object from `of0` before it can produce the data for `of1`. Because C is waiting on B, the two tiles do not have the same rate of consumption from the broadcast connection and this results in the production rate of A being impacted. -To further represent this we can take the slightly lower lever view that the consumer tiles each have a pool of objects allocated for their Object FIFOs. To simplify things, only the pools used by the consumers are shown (for example, for `of1` only the pool on the side of consumer tile C is visible). Currently, all the pools have a depth of `1`. +To further represent this we can take the slightly lower-level view that the consumer tiles each have a pool of objects allocated for their Object FIFOs. To simplify things, only the pools used by the consumers are shown (for example, for `of1` only the pool on the side of consumer tile C is visible). Currently, all the pools have a depth of `1`. To avoid having the production of A impacted by the skip-connection, an additional object is required by C for `of0`. It can be used as buffering space for data coming from `of0` while waiting for the data from B via `of1`. To achieve this `of0` is created with an array of integers for its `depth`: diff --git a/programming_guide/section-2/section-2b/03_Link_Distribute_Join/README.md b/programming_guide/section-2/section-2b/03_Link_Distribute_Join/README.md index a937f4c17b..d550f214f1 100644 --- a/programming_guide/section-2/section-2b/03_Link_Distribute_Join/README.md +++ b/programming_guide/section-2/section-2b/03_Link_Distribute_Join/README.md @@ -12,7 +12,7 @@ ### Object FIFO Link -By design an Object FIFO handles both the configuration of the data movement between the producer and consumer tiles as well as the allocation of objects over the memory modules of the tiles. In order to put data consumed from one Object FIFO into another Object FIFO the user could explicitly do this in the core code of a shared tile between the two FIFOs. However, if the goal is to simply copy data from one Object FIFO to the other without modifying it, doing it in the manner described above results in allocating more objects than necessary, i.e., the data being copied to the second Object FIFO is already available in the first one. Additionally, Shim tiles and Mem tiles do not have a core on which the copy can be done explicitly. +By design, an Object FIFO handles both the configuration of the data movement between the producer and consumer tiles, as well as the allocation of objects over the memory modules of the tiles. In order to put data consumed from one Object FIFO into another Object FIFO, the user could explicitly do this in the core code of a shared tile between the two FIFOs. However, if the goal is to simply copy data from one Object FIFO to the other without modifying it, doing it in the manner described above results in allocating more objects than necessary, i.e., the data being copied to the second Object FIFO is already available in the first one. Additionally, Shim tiles and Mem tiles do not have a core on which the copy can be done explicitly. Instead of an explicit copy, the Object FIFO API provides an implicit copy via an `object_fifo_link`, which can be initialized using its class constructor (defined in [aie.py](../../../../python/dialects/aie.py)): ```python @@ -23,7 +23,7 @@ class object_fifo_link(ObjectFifoLinkOp): fifoOuts, ) ``` -A link allows the user to specify a set of input Object FIFOs via the `fifoIns` input and a set of output ones via the `fifoOuts` input. Each Object FIFO may be specified either using its `name` or its variable. Both inputs can be either a single Object FIFO or an array of them. It is required that there exists at least one shared tile between the consumer tiles of `fifoIns` and the producer tiles of `fifoOuts` for a link to be valid. This is because the implicit copy of data will be done using the Data Movement Accelerators (DMAs) of that tile. +A link allows the user to specify a set of input Object FIFOs via the `fifoIns` input and a set of output ones via the `fifoOuts` input. Each Object FIFO may be specified either using its `name` or its Python object. Both inputs can be either a single Object FIFO or an array of them. It is required that there exists at least one shared tile between the consumer tiles of `fifoIns` and the producer tiles of `fifoOuts` for a link to be valid. This is because the implicit copy of data will be done using the Data Movement Accelerators (DMAs) of that tile. Below is an example of a link created between two FIFOs `of0` and `of1`, where tile B is the shared tile between them: ```python @@ -41,7 +41,7 @@ A full design example that uses this features is available in Section 2e: [03_ex ### Link & Distribute -By using the link with one input Object FIFO and multiple output Object FIFOs a user can describe a distribute pattern where parts of data in every object from the producer tile are distributed to each output FIFO. The `datatype` of the output FIFOs should be of a smaller size than the input one, and the sum of the sizes of the output FIFOs should equal to the size of the `datatype` of the input FIFO. +By using the link with one input Object FIFO and multiple output Object FIFOs, a user can describe a distribute pattern where parts of data in every object from the producer tile are distributed to each output FIFO. The `datatype` of the output FIFOs should be of a smaller size than the input one, and the sum of the sizes of the output FIFOs should equal the size of the `datatype` of the input FIFO. Currently, the Object FIFO lowering uses the order in which the output FIFOs are specified in the `fifoOuts` to know which part of the input object should go to each output FIFO. To achieve the distribute, the lowering will use one output port of the shared tile to establish a connection per output FIFO, as in the figure below: @@ -59,11 +59,11 @@ of2 = object_fifo("objfifo2", B, D, 2, T.memref(128, T.i32())) object_fifo_link(of0, [of1, of2]) ``` -A full design example that uses this features is available in Section 2e: [04_distribute_L2](../../section-2e/04_distribute_L2/). +A full design example that uses this feature is available in Section 2e: [04_distribute_L2](../../section-2e/04_distribute_L2/). ### Link & Join -The join pattern is the opposite of the distribute pattern in that the link will have multiple input Object FIFOs and a single output Object FIFO. With this pattern the user can combine the smaller inputs from multiple sources into a single bigger output data movement. The `datatype` of the input FIFOs should be of a smaller size than the output one, and the sum of the sizes of the input FIFOs should equal to the size of the `datatype` of the output FIFO. +The join pattern is the opposite of the distribute pattern in that the link will have multiple input Object FIFOs and a single output Object FIFO. With this pattern the user can combine the smaller inputs from multiple sources into a single bigger output data movement. The `datatype` of the input FIFOs should be of a smaller size than the output one, and the sum of the sizes of the input FIFOs should be equal to the size of the `datatype` of the output FIFO. Similarly, the order in `fifoIns` specifies which input object will make up which part of the larger objects of the output Object FIFO. To achieve the join, the lowering will use one input port of the shared tile to establish a connection per input FIFO, as in the figure below: @@ -81,7 +81,7 @@ of2 = object_fifo("objfifo2", D, B, 2, T.memref(128, T.i32())) object_fifo_link([of1, of2], of0) ``` -A full design example that uses this features is available in Section 2e: [05_join_L2](../../section-2e/05_join_L2/). +A full design example that uses these features is available in Section 2e: [05_join_L2](../../section-2e/05_join_L2/). ----- [[Prev](../02_Broadcast/)] [[Up](..)] [[Next - Section 2c](../../section-2c/)] diff --git a/programming_guide/section-2/section-2b/README.md b/programming_guide/section-2/section-2b/README.md index eab39a310c..ac883aef17 100644 --- a/programming_guide/section-2/section-2b/README.md +++ b/programming_guide/section-2/section-2b/README.md @@ -10,7 +10,7 @@ # Section 2b - Key Object FIFO Patterns -The Object FIFO primitive supports several data movement patterns through its inputs and its member functions. We will now describe each of the currently supported patterns in three subsections and provide links to more in-depth practical code examples that showcase each of them. +The Object FIFO primitive supports several data movement patterns. We will now describe each of the currently supported patterns in three subsections and provide links to more in-depth practical code examples that showcase each of them.
Object FIFO Reuse Pattern @@ -20,7 +20,7 @@ The Object FIFO primitive supports several data movement patterns through its in * Broadcast data from one producer to multiple consumers
-
Object FIFO Distribute & Join Patterns with Object FIFO Link +
Object FIFO Distribute & Join Patterns with Object FIFO Link * Implicit copy of data from one Object FIFO to another via an Object FIFO Link * Distribute different pieces of the input data to multiple consumers diff --git a/programming_guide/section-2/section-2c/README.md b/programming_guide/section-2/section-2c/README.md index 802cc94000..d1a7ff98ad 100644 --- a/programming_guide/section-2/section-2c/README.md +++ b/programming_guide/section-2/section-2c/README.md @@ -10,7 +10,7 @@ # Section 2c - Data Layout Transformations -While the Object FIFO primitive aims to reduce the complexity tied to data movement configuration on the AI Engine array, it also gives the user control over some advanced features of the underlying architecture. One such feature is the ability to do data layout transformations on the fly using the tile's dedicated hardware: the Data Movement Accelerators (DMAs). This is available on AIE-ML devices. +While the Object FIFO primitive aims to reduce the complexity tied to data movement configuration on the AI Engine array, it also gives the user control over some advanced features of the underlying architecture. One such feature is the ability to do data layout transformations on the fly using the tile's dedicated hardware: the Data Movement Accelerators (DMAs). **This is available on AIE-ML devices.** Tile DMAs interact directly with the memory modules of their tiles and are responsible for pushing and retrieving data to and from the AXI stream interconnect. When data is pushed onto the stream, the user can program the DMA's n-dimensional address generation scheme such that the data's layout when pushed may be different than how it is stored in the tile's local memory. In the same way, a user can also specify in what layout a DMA should store the data retrieved from the AXI stream. @@ -35,11 +35,11 @@ A data layout transformation is presented as a tuple of pairs, where each pair r ```c [, , ] ``` -Transformations can be expressed in up to three dimensions on each compute and Shim tile, and in up to four dimensions on Mem tiles. The first pair of this array gives the outer-most dimension's stride and size ``, while the last pair of the array gives the inner-most dimension's stride and size ``. All strides are expressed in multiples of the element width. +Transformations can be expressed in up to three dimensions on each compute and Shim tile, and in up to four dimensions on Mem tiles. The first pair of this array gives the outer-most dimension's stride and size ``, while the last pair of the array gives the inner-most dimension's stride and size ``. All strides are expressed in **multiples of the element width**. > **NOTE:** Only for 4B data types the inner-most dimension's stride must be 1 by design. -Data layout transformations can be viewed as a way to specify to the hardware which location in the data to access next and as such it is possible to model the access pattern using a series of nested loops. For example, the transformation above can be expressed as: +Data layout transformations can be viewed as a way to specify to the hardware which location in the data to access next and as such it is possible to model the access pattern using a series of nested loops. For example, the transformation using the strides and sizes from above can be expressed as: ```c int *buffer; for(int i = 0; i < size_2; i++) @@ -69,7 +69,7 @@ for(int i = 0; i < 8; i++) # size_2 ### Data Layout Transformations with the Object FIFO -Reminder that the Object FIFO class constructor has two default valued inputs: `dimensionsToStream` and `dimensionsFromStreamPerConsumer`. +Remember that the Object FIFO class constructor has two default-valued inputs: `dimensionsToStream` and `dimensionsFromStreamPerConsumer`. ```python class object_fifo: def __init__( @@ -84,9 +84,9 @@ class object_fifo: ) ``` -The Object FIFO directly lowers to `AIE_DMABDOp` operations described above that can leverage data layout transformations expressed as pairs of strides and sizes. It uses the `dimensionsToStream` input in relation to the `producerTile` to describe in what layout that tile's DMA should push the objects onto the stream. Similarly, the `dimensionsFromStreamPerConsumer` input describes to the DMA's of each individual tile in the `consumerTiles` in what layout to retrieve the objects from the stream. +Our compiler directly lowers Object FIFOs that make use of the aforementioned data layout transformations to `AIE_DMABDOp`. You can use the `dimensionsToStream` input to describe in which order the `producerTile`'s DMA should push the objects onto the stream. Similarly, the `dimensionsFromStreamPerConsumer` input describes to the DMAs of each individual tile in the `consumerTiles` in what layout to retrieve the objects from the stream. -As an example, the Object FIFO in the code below contains objects with datatype `<4x8xi8>`. Using the `dimensionsToStream` input it performs a data layout transformation on the producer tile side that, for every row out of two, selects one element out of two up to three elements. +As an example, the Object FIFO in the code below contains objects with datatype `<4x8xi8>`. Using the `dimensionsToStream` input it performs a data layout transformation on the producer tile side that pushes elements from memory onto the stream as follows: For every even length-8 row, select the first three even-indexed elements. ```python A = tile(1, 1) B = tile(1, 3) @@ -113,7 +113,7 @@ for(int i = 0; i < 2; i++) # size_1 + j * 2 # stride_0 ) ``` -and further represented as in the image below, +and further represented as in the image below: diff --git a/programming_guide/section-2/section-2d/README.md b/programming_guide/section-2/section-2d/README.md index e9234177f5..d9008649c2 100644 --- a/programming_guide/section-2/section-2d/README.md +++ b/programming_guide/section-2/section-2d/README.md @@ -18,7 +18,7 @@ ShimTile = tile(0, 0) MemTile = tile(0, 1) ComputeTile = tile(0, 2) ``` -For our scale out design we will keep a using a single Shim tile and a single Mem tile but we will increase the number of compute tiles to three. We can do so cleanly and efficiently in the following way: +For our scale out design we will keep using a single Shim tile and a single Mem tile, but we will increase the number of compute tiles to three. We can do so cleanly and efficiently in the following way: ```python n_cores = 3 @@ -28,7 +28,7 @@ ComputeTiles = [tile(0, 2 + i) for i in range(n_cores)] ``` Each compute tile can now be accessed by indexing into the `ComputeTiles` array. -Once the tiles have been declared the next step is to setup the data movement using Object FIFOs. The simple design has a total of four double-buffered Object FIFOs and two object_fifo_links. The Object FIFOs move objects of datatype `<48xi32>`. `of_in` brings data from the Shim tile to the Mem tile and is linked to `of_in0` which brings data from the Mem tile to the compute tile. For the output side, `of_out0` brings data from the compute tile to the Mem tile where it is linked to `of_out` to bring the data out through the Shim tile. The corresponding code is shown below: +Once the tiles have been declared, the next step is to set up the data movement using Object FIFOs. The simple design has a total of four double-buffered Object FIFOs and two `object_fifo_links`. The Object FIFOs move objects of datatype `<48xi32>`. `of_in` brings data from the Shim tile to the Mem tile and is linked to `of_in0` which brings data from the Mem tile to the compute tile. For the output side, `of_out0` brings data from the compute tile to the Mem tile where it is linked to `of_out` to bring the data out through the Shim tile. The corresponding code is shown below: ```python data_size = 48 buffer_depth = 2 @@ -106,7 +106,7 @@ def core_body(): of_out0.release(ObjectFifoPort.Produce, 1) yield_([]) ``` -Once again we apply the same logic and use a for loop over our three cores to write the code which will be executed on the three compute tiles. Each tile will index the `inX_fifos` and `outX_fifos` maps to retrieve the Object FIFOs it will acquire and release from. This process results in the following code: +Once again we apply the same logic and use a `for`-loop over our three cores to write the code which will be executed on the three compute tiles. Each tile will index the `inX_fifos` and `outX_fifos` maps to retrieve the Object FIFOs it will acquire and release from. This process results in the following code: ```python for i in range(n_cores): # Compute tile i diff --git a/programming_guide/section-2/section-2e/03_external_mem_to_core_L2/README.md b/programming_guide/section-2/section-2e/03_external_mem_to_core_L2/README.md index 335681a30a..31560688cb 100644 --- a/programming_guide/section-2/section-2e/03_external_mem_to_core_L2/README.md +++ b/programming_guide/section-2/section-2e/03_external_mem_to_core_L2/README.md @@ -10,7 +10,7 @@ # External Memory to Core through L2 -The design in [ext_to_coreL2.py](./ext_to_core.py) is very similar to the one in the previous [example](../02_external_mem_to_core/) with the difference being that in this design we first bring the `24xi32` data from external memory to the `MemTile` with `of_in0`. We then use `of_in1` to bring smaller `8xi32` slices of the data from the `MemTile` to `ComputeTile2`. Two fifos then bring the data first to the `MemTile` via `of_out1` as `8xi32` tensors, then to the `ShimTile` via `of_out0` as `24xi32` ones. All fifos use double buffers. +The design in [ext_to_coreL2.py](./ext_to_core.py) is very similar to the one in the previous [example](../02_external_mem_to_core/) with the difference being that in this design we first bring the `24xi32` data from external memory to the `MemTile` with `of_in0`. We then use `of_in1` to bring smaller `8xi32` slices of the data from the `MemTile` to `ComputeTile2`. Two FIFOs then bring the data first to the `MemTile` via `of_out1` as `8xi32` tensors, then to the `ShimTile` via `of_out0` as `24xi32` ones. All FIFOs use double buffers. diff --git a/programming_guide/section-2/section-2e/04_distribute_L2/README.md b/programming_guide/section-2/section-2e/04_distribute_L2/README.md index 4f20703842..5c2e93c276 100644 --- a/programming_guide/section-2/section-2e/04_distribute_L2/README.md +++ b/programming_guide/section-2/section-2e/04_distribute_L2/README.md @@ -10,7 +10,7 @@ # Distribute from L2 -The design in [distribute_L2.py](./distribute_L2.py) uses an Object FIFO `of_in` to bring data from external memory via the `ShimTile` to the `MemTile` as `24xi32` tensors. From there three Object FIFOs distribute smaller `8xi32` parts of the data to each of the three compute tiles. Each tile receives a different part of the larger data based on the order of the Object FIFOs in the `object_fifo_link`. +The design in [distribute_L2.py](./distribute_L2.py) uses an Object FIFO `of_in` to bring data from external memory via the `ShimTile` to the `MemTile` as `24xi32` tensors. From there, three Object FIFOs distribute smaller `8xi32` parts of the data to each of the three compute tiles. Each tile receives a different part of the larger data based on the order of the Object FIFOs in the `object_fifo_link`. @@ -24,7 +24,7 @@ The design in [distribute_L2.py](./distribute_L2.py) uses an Object FIFO `of_in` object_fifo_link(of_in, [of_in0, of_in1, of_in2]) ``` -All compute tiles are running the same process of acquring one object from their respective input Object FIFOs to consume, add `1` to all of its entries, and release the object. The [join design](../05_join_L2/) shows how the data is sent back out to external memory and tested. +All compute tiles are running the same process of acquring one object from their respective input Object FIFOs to consume, adding `1` to all of its entries, and releasing the object. The [join design](../05_join_L2/) shows how the data is sent back out to external memory and tested. Other examples containing this data movement pattern are available in the [programming_examples/matrix_multiplication/](../../../../programming_examples/basic/matrix_multiplication/). diff --git a/programming_guide/section-2/section-2e/05_join_L2/README.md b/programming_guide/section-2/section-2e/05_join_L2/README.md index cee2f75708..64f1ef902a 100644 --- a/programming_guide/section-2/section-2e/05_join_L2/README.md +++ b/programming_guide/section-2/section-2e/05_join_L2/README.md @@ -24,7 +24,7 @@ The design in [join_L2.py](./join_L2.py) uses three Object FIFOs from each of th object_fifo_link([of_out0, of_out1, of_out2], of_out) ``` -All compute tiles are running the same process of acquring one object from their respective input Object FIFOs to produce, write `1` to all of its entries, and release the object. +All compute tiles are running the same process of acquring one object from their respective input Object FIFOs to produce, writing `1` to all of its entries, and releasing the object. This design is combined with the previous [distribute](../04_distribute_L2/distribute_L2.py) design to achieve a full data movement from external memory to the AIE array and back. The resulting code is available in [distribute_and_join_L2.py](./distribute_and_join_L2.py). It is possible to build, run and test it with the following commands: ``` diff --git a/programming_guide/section-2/section-2f/README.md b/programming_guide/section-2/section-2f/README.md index 3f619e7b63..9f06315a1a 100644 --- a/programming_guide/section-2/section-2f/README.md +++ b/programming_guide/section-2/section-2f/README.md @@ -12,14 +12,14 @@ Not all data movement patterns can be described with Object FIFOs. This **advanced** section goes into detail about how a user can express data movement using the Data Movement Accelerators (or `DMA`) on AIE tiles. To better understand the code and concepts introduced in this section it is recommended to first read the [Advanced Topic of Section - 2a on DMAs](../section-2a/README.md/#advanced-topic--data-movement-accelerators). -The AIE architecture currently has three different types of tiles: compute tiles referred to as `tile`, memory tiles reffered to as `Mem tile`, and external memory interface tiles referred to as `Shim tile`. Each of these tiles has its own attributes regarding compute capabilities and memory capacity, but the base design of their DMAs is the same. The different types of DMAs can be intialized using the constructors in [aie.py](../../../python/dialects/aie.py): +The AIE architecture currently has three different types of tiles: compute tiles, referred to as "tile", memory tiles referred to as "Mem tiles", and external memory interface tiles referred to as "Shim tiles". Each of these tiles have their own attributes regarding compute capabilities and memory capacity, but the base design of their DMAs is the same. The different types of DMAs can be intialized using the constructors in [aie.py](../../../python/dialects/aie.py): ```python @mem(tile) # compute tile DMA @shim_dma(tile) # Shim tile DMA @memtile_dma(tile) # Mem tile DMA ``` -The DMA hardware component has a certain number of input and output `channels`, and each one has a direction and a port index. Input channels are denoted with the keyword `SS2M` and output ones with `M2SS`. Port indices vary per tile, for example compute tiles have two input and two output ports, same as Shim tiles, whereas Mem tiles have six input and six output ports. +The DMA hardware component has a certain number of input and output `channels`, and each one has a direction and a port index. Input channels are denoted with the keyword `S2MM` and output ones with `MM2S`. Port indices vary per tile. For example, compute and Shim tiles have two input and two output ports, whereas Mem tiles have six input and six output ports. A channel in any tile's DMA can be initialized using the unified `dma` constructor: ```python @@ -36,7 +36,7 @@ def dma( ) ``` -The data movement on each channel is described by a chain of Buffer Descriptors (or `BD`), where each BD describes what data is being moved and configures its synchornization mechanism. The `dma` constructor already creates space for one such BD as can be seen by its `num_blocks=1` default valued input. +The data movement on each channel is described by a chain of Buffer Descriptors (or "BDs"), where each BD describes what data is being moved and configures its synchornization mechanism. The `dma` constructor already creates space for one such BD as can be seen by its `num_blocks=1` default valued input. The code snippet below shows how to configure the DMA on `tile_a` such that data coming in on input channel 0 is written into `buff_in`: ```python @@ -54,9 +54,9 @@ def mem_body(): dma_bd(buff_in) use_lock(cons_lock, Release) ``` -The locks `prod_lock` and `cons_lock` follow AIE2 architecture semantics. Their task is to mark synchronization points in the tile's and its DMA's execution: for example, if the tile is currently using `buff_in` it will only release the `prod_lock` when it is done and that is when the DMA will be allowed to overwrite the data in `buff_in` with new input. Similarly, the tile's core can query the `cons_lock` to know when the new data is ready to be read (i.e., when the DMA releases the lock so the core can acquire it). +The locks `prod_lock` and `cons_lock` follow AIE-ML architecture semantics. Their task is to mark synchronization points in the tile's and its DMA's execution: for example, if the tile is currently using `buff_in`, it will only release the `prod_lock` when it is done, and that is when the DMA will be allowed to overwrite the data in `buff_in` with new input. Similarly, the tile's core can query the `cons_lock` to know when the new data is ready to be read (i.e., when the DMA releases the lock so the core can acquire it). -In the previous code the channel only had one BD in its chain. To add additional BDs to the chain, users can use the following constructor, which takes as input what would be the previous BD in the chain it should be added to: +In the previous code, the channel only had one BD in its chain. To add additional BDs to the chain, users can use the following constructor, which takes as input what would be the previous BD in the chain it should be added to: ```python @another_bd(dma_bd) ``` @@ -102,11 +102,11 @@ def flow( ) ``` The `flow` is established between channels of two DMAs (other endpoints are available, but they are beyond the scope of this section) and as such it requires: -* their `source` and `dest` tiles, -* their `source_bundle` and `dest_bundle`, which represent the type of endpoints (for our scope, these will be `WireBundle.DMA`), -* and their `source_channel` and `dest_channel`, which represent the index of the channel. +* its `source` and `dest` tiles, +* its `source_bundle` and `dest_bundle`, which represent the type of endpoints (for our scope, these will be `WireBundle.DMA`), +* and its `source_channel` and `dest_channel`, which represent the index of the channel. -For example, to create a flow between tile `tile_a` and tile `tile_b` where `tile_a` is sending data on its output channel 0 to `tile_b`'s input channel 1, the user can write: +For example, to create a flow between tile `tile_a` and tile `tile_b`, where `tile_a` is sending data on its output channel 0 to `tile_b`'s input channel 1, the user can write: ```python aie.flow(tile_a, WireBundle.DMA, 0, tile_b, WireBundle.DMA, 1) ``` diff --git a/programming_guide/section-2/section-2g/README.md b/programming_guide/section-2/section-2g/README.md index 8b9338e22a..db52d0b827 100644 --- a/programming_guide/section-2/section-2g/README.md +++ b/programming_guide/section-2/section-2g/README.md @@ -10,6 +10,10 @@ # Section 2g - Runtime Data Movement +In the preceding sections, we looked at how we can describe data movement between tiles *within* the AIE-array. However, to do anything useful, we need to get data from outside the array, i.e. from the "host", into the AIE-array and back. On NPU devices, we can achieve this with the operations described in this section. + +The operations that will be described in this section must be placed in a separate `sequence` function. The arguments to this function describe buffers that will be available on the host side; the body of the function describes how those buffers are moved into the AIE-array. [Section 3](../../../programming_examples/) contains an example. + ### Guide to Managing Runtime Data Movement to/from Host Memory In high-performance computing applications, efficiently managing data movement and synchronization is crucial. This guide provides a comprehensive overview of how to utilize the `npu_dma_memcpy_nd` and `npu_sync` functions to manage data movement at runtime from/to host memory to/from the AIE array (for example in the Ryzen™ AI NPU). @@ -24,12 +28,12 @@ npu_dma_memcpy_nd(metadata, bd_id, mem, offsets=None, sizes=None, strides=None) ``` - **`metadata`**: This string is a reference to the metadata generated by the object FIFO that records a Shim Tile and one of its DMA channels allocated for the host-side memory transfer. In order to associate the memcpy operation with an object FIFO, this metadata string needs to match the object FIFO name string. - **`bd_id`**: Identifier integer for the particular Buffer Descriptor control registers used for this memcpy. A buffer descriptor contains all information needed for a DMA transfer described in the parameters below. -- **`mem`**: Reference to the memory object involved in the transfer found in the argument list of the sequence function call containing the operation. +- **`mem`**: Reference to a host buffer, given as an argument to the sequence function, that this transfer will read from or write to. - **`offsets`** (optional): Start points for data transfer in each dimension. There is a maximum of four offset dimensions. - **`sizes`**: The extent of data to be transferred across each dimension. There is a maximum of four size dimensions. - **`strides`** (optional): Interval steps between data points in each dimension, useful for striding-across and reshaping data. There is a maximum of three stride dimensions that can be expressed because dimension 0 is an implicit stride of 1 4B element. -It is important to note that dimension 0 of the **`sizes`** and all **`strides`** are expressed in a 4B granularity. Higher dimensions of the **`sizes`** are integers to repeat the lower dimensions. The **`offsets`** are expressed in multiples of the **`sizes`**, however the dimension 0 offset is in a 4B granularity. +It is important to note that dimension 0 of the **`sizes`** and all **`strides`** are expressed in a 4B granularity. Higher dimensions of the **`sizes`** are integers to repeat the lower dimensions. The **`offsets`** are expressed in multiples of the **`sizes`**, however the dimension 0 offset is in a 4B granularity. The strides and wraps express data transformations analogously to those described in [Section 2C](../section-2c). **Example Usage**: ```python diff --git a/programming_guide/section-3/README.md b/programming_guide/section-3/README.md index 120c8d42af..76860cb78d 100644 --- a/programming_guide/section-3/README.md +++ b/programming_guide/section-3/README.md @@ -14,7 +14,7 @@ This section creates a first program that will run on the AIE-array. As shown in the figure on the right, we will have to create both binaries for the AIE-array (device) and CPU (host) parts. For the AIE-array, a structural description and kernel code is compiled into the AIE-array binaries: an XCLBIN file ("final.xclbin") and an instruction sequence ("inst.txt"). The host code ("test.exe") loads these AIE-array binaries and contains the test functionality. -For the AIE-array structural description we will combine what you learned in [section-1](../section-1) for defining a basic structural design in python with the data movement part from [section-2](../section-2). +For the AIE-array structural description we will combine what you learned in [section-1](../section-1) for defining a basic structural design in Python with the data movement part from [section-2](../section-2). For the AIE kernel code, we will start with non-vectorized code that will run on the scalar processor part of an AIE. [section-4](../section-4) will introduce how to vectorize a compute kernel to harvest the compute density of the AIE. @@ -29,7 +29,7 @@ This design is also available in the [programming_examples](../../programming_ex -The [aie2.py](../../programming_examples/basic/vector_scalar_mul/aie2.py) AIE-array structural description (see [section-1](../section-1) deploys both a compute core (green) for the multiplication in the operations and a shimDMA (purple) for data movement both input vector a and output vector c residing in external memory. +The [aie2.py](../../programming_examples/basic/vector_scalar_mul/aie2.py) AIE-array structural description (see [section-1](../section-1)) deploys both a compute core (green) for the multiplication and a shimDMA (purple) for data movement of both input vector a and output vector c residing in external memory. ```python # Device declaration - here using aie2 device NPU @@ -41,7 +41,7 @@ def device_body(): ComputeTile2 = tile(0, 2) ``` -We also need to declare that the compute core will run an external function: a kernel written in C++ that will be linked into the design as pre-compiled kernel (more details in the next subsection). With as goal to get our initial design running on the AIE-array, we will run a generic version of the vector scalar multiply run on the scalar processor of the AIE. +We also need to declare that the compute core will run an external function: a kernel written in C++ that will be linked into the design as pre-compiled kernel (more details in the next subsection). To get our initial design running on the AIE-array, we will run a generic version of the vector scalar multiply run on the scalar processor of the AIE. ```python # Type declarations @@ -105,7 +105,7 @@ This access and execute pattern runs on the AIE compute core `ComputeTile2` and ## Kernel Code -We can program the AIE compute core using C++ code and compile it with xchesscc into an kernel object file. In this section, a generic implementation of the vector scalar multiplication that can run on the scalar processor part of the AIE will provide our initial implementation. The `vector_scalar_mul_aie_scalar` function processes one data element at a time, taking advantage of AIE scalar datapath to load, multiply and store data elements. +We can program the AIE compute core using C++ code and compile it with `xchesscc` into an kernel object file. In this section, we will use a generic implementation of the vector scalar multiplication that can run on the scalar processor part of the AIE. The `vector_scalar_mul_aie_scalar` function processes one data element at a time, taking advantage of AIE scalar datapath to load, multiply and store data elements. ```c void vector_scalar_mul_aie_scalar(int32_t *a_in, int32_t *c_out, @@ -122,9 +122,9 @@ Note that since the scalar factor is communicated through an object, it is provi ## Host Code -The host code is acts as environment setup and testbench for the Vector Scalar Multiplication design example. The code is responsible for loading the compiled XCLBIN file, configuring the AIE module, providing input data, and kick off the execution the AIE design on the NPU. After running, it verifies the memcpy results and optionally outputs trace data. Both a C++ [test.cpp](./test.cpp) and Python [test.py](./test.py) variant of this code are available. +The host code is acts as environment setup and testbench for the Vector Scalar Multiplication design example. The code is responsible for loading the compiled XCLBIN file, configuring the AIE module, providing input data, and kick off the execution the AIE design on the NPU. After running, it verifies the results and optionally outputs trace data. Both a C++ [test.cpp](./test.cpp) and Python [test.py](./test.py) variant of this code are available. -For convenience a set of test utilities support common elements of command line parsing, the XRT-based environment setup and with testbench functionality: [test_utils.h](../../runtime_lib/test_lib/test_utils.h) or [test.py](../../python/utils/test.py). +For convenience, a set of test utilities support common elements of command line parsing, the XRT-based environment setup and with testbench functionality: [test_utils.h](../../runtime_lib/test_lib/test_utils.h) or [test.py](../../python/utils/test.py). The host code contains following elements: From bc33fce51612eef0027c36ab2177d38e974184a6 Mon Sep 17 00:00:00 2001 From: Jack Lo <36210336+jackl-xilinx@users.noreply.github.com> Date: Wed, 24 Apr 2024 09:37:02 -0700 Subject: [PATCH 8/9] [ASPLOS] Major update to section-4, especially 4c (#1392) --- aie_kernels/aie2/scale.cc | 52 ++++- .../matrix_multiplication/makefile-common | 17 +- .../basic/vector_scalar_add/aie2.py | 100 +++++----- .../basic/vector_scalar_mul/Makefile | 10 +- .../basic/vector_scalar_mul/aie2.py | 19 +- .../basic/vector_scalar_mul/test.cpp | 9 +- .../basic/vector_scalar_mul/test.py | 6 +- programming_examples/utils/README.md | 26 ++- programming_examples/utils/parse_eventIR.py | 4 +- .../assets/aie-ml_shift_adder_path.png | Bin 0 -> 9607 bytes programming_guide/assets/aie-ml_srs_ups.png | Bin 0 -> 12132 bytes .../assets/aie-ml_vector_unit.png | Bin 0 -> 14400 bytes .../assets/aie_compute_details1.png | Bin 0 -> 127669 bytes .../assets/aie_vector_scalar_ml_opt1.png | Bin 0 -> 60299 bytes .../assets/trace_vector_scalar_add1.png | Bin 0 -> 53276 bytes programming_guide/quick_reference.md | 6 +- programming_guide/section-4/README.md | 2 +- .../section-4/section-4a/README.md | 2 +- .../section-4/section-4a/aie2.py | 6 +- .../section-4/section-4a/answers/aie2.py | 6 +- .../section-4/section-4b/Makefile | 17 +- .../section-4/section-4b/README.md | 45 +++-- .../section-4/section-4b/aie2.py | 11 +- .../section-4/section-4b/test.cpp | 6 +- .../section-4/section-4b/test.py | 22 +-- .../section-4/section-4c/README.md | 180 +++++++++++++++--- python/utils/README.md | 9 +- 27 files changed, 381 insertions(+), 174 deletions(-) mode change 100755 => 100644 programming_examples/basic/vector_scalar_mul/Makefile mode change 100755 => 100644 programming_examples/basic/vector_scalar_mul/aie2.py create mode 100644 programming_guide/assets/aie-ml_shift_adder_path.png create mode 100644 programming_guide/assets/aie-ml_srs_ups.png create mode 100644 programming_guide/assets/aie-ml_vector_unit.png create mode 100755 programming_guide/assets/aie_compute_details1.png create mode 100755 programming_guide/assets/aie_vector_scalar_ml_opt1.png create mode 100644 programming_guide/assets/trace_vector_scalar_add1.png diff --git a/aie_kernels/aie2/scale.cc b/aie_kernels/aie2/scale.cc index c212ed2514..f3d1133dc1 100755 --- a/aie_kernels/aie2/scale.cc +++ b/aie_kernels/aie2/scale.cc @@ -19,6 +19,7 @@ #include +// Scalar scale template template void scale_scalar(T *a, T *c, T factor, const int32_t N) { event0(); @@ -28,20 +29,43 @@ void scale_scalar(T *a, T *c, T factor, const int32_t N) { event1(); } +// Vectorized scale template // Assume N is multiple of 16 template -void scale_vectorized(T *a, T *c, T factor, const int32_t N) { - constexpr int vec_factor = 16; +void scale_vectorized(T *a, T *c, int32_t factor, const int32_t N) { event0(); + constexpr int vec_factor = 32; T *__restrict pA1 = a; T *__restrict pC1 = c; const int F = N / vec_factor; + T fac = factor; for (int i = 0; i < F; i++) chess_prepare_for_pipelining chess_loop_range(16, ) { aie::vector A0 = aie::load_v(pA1); pA1 += vec_factor; + aie::accum cout = aie::mul(A0, fac); + aie::store_v(pC1, cout.template to_vector(0)); + pC1 += vec_factor; + } + event1(); +} + +// Vectorized scale tempalte for int32_t (acc64 used) +// Assume N is multiple of 16 +template <> +void scale_vectorized(int32_t *a, int32_t *c, int32_t factor, + const int32_t N) { + event0(); + constexpr int vec_factor = 32; + int32_t *__restrict pA1 = a; + int32_t *__restrict pC1 = c; + const int F = N / vec_factor; + for (int i = 0; i < F; i++) + chess_prepare_for_pipelining chess_loop_range(16, ) { + aie::vector A0 = aie::load_v(pA1); + pA1 += vec_factor; aie::accum cout = aie::mul(A0, factor); - aie::store_v(pC1, cout.to_vector(0)); + aie::store_v(pC1, cout.template to_vector(0)); pC1 += vec_factor; } event1(); @@ -49,14 +73,26 @@ void scale_vectorized(T *a, T *c, T factor, const int32_t N) { extern "C" { -void vector_scalar_mul_aie(int32_t *a_in, int32_t *c_out, int32_t *factor, - int32_t N) { +// 16-bit datatype +void vector_scalar_mul_int32_scalar(int32_t *a_in, int32_t *c_out, + int32_t *factor, int32_t N) { + scale_scalar(a_in, c_out, *factor, N); +} + +void vector_scalar_mul_int32_vector(int32_t *a_in, int32_t *c_out, + int32_t *factor, int32_t N) { scale_vectorized(a_in, c_out, *factor, N); } -void vector_scalar_mul_aie_scalar(int32_t *a_in, int32_t *c_out, - int32_t *factor, int32_t N) { - scale_scalar(a_in, c_out, *factor, N); +// 32-bit datatype +void vector_scalar_mul_int16_scalar(int16_t *a_in, int16_t *c_out, + int32_t *factor, int32_t N) { + scale_scalar(a_in, c_out, *factor, N); +} + +void vector_scalar_mul_int16_vector(int16_t *a_in, int16_t *c_out, + int32_t *factor, int32_t N) { + scale_vectorized(a_in, c_out, *factor, N); } } // extern "C" diff --git a/programming_examples/basic/matrix_multiplication/makefile-common b/programming_examples/basic/matrix_multiplication/makefile-common index fd6a438ea0..5e41886d79 100644 --- a/programming_examples/basic/matrix_multiplication/makefile-common +++ b/programming_examples/basic/matrix_multiplication/makefile-common @@ -38,6 +38,8 @@ M?=512 K?=512 N?=512 +trace_size=16384 + mlir_target?=build/aie_${M}x${K}x${N}.mlir xclbin_target?=build/final_${M}x${K}x${N}.xclbin insts_target?=build/insts_${M}x${K}x${N}.txt @@ -83,14 +85,19 @@ run: ${targetname}.exe ${xclbin_target} ${insts_target} #sign export XRT_HACK_UNSECURE_LOADING_XCLBIN=1 && \ ${powershell} ./$< -x ${xclbin_target} -i ${insts_target} -k MLIR_AIE -M $M -K $K -N $N ${runargs} -.PHONY: clean -clean: - rm -rf build _build ${targetname}.exe +trace: ${targetname}.exe ${xclbin_target} ${insts_target} # sign + export XRT_HACK_UNSECURE_LOADING_XCLBIN=1 && \ + ${powershell} ./$< -x ${xclbin_target} -i ${insts_target} -k MLIR_AIE -M $M -K $K -N $N -v 1 --warmup 0 --iters 1 -t ${trace_size} + ../../../utils/parse_trace.py --filename trace.txt --mlir ${mlir_target} --colshift 1 > parse_trace_mm.json .PHONY: parse_trace parse_trace: - ../../../utils/parse_eventIR.py --filename trace.txt --mlir ./build/aie.mlir --colshift 1 > trace_eventIR.json + ../../../utils/parse_trace.py --filename trace.txt --mlir ${mlir_target} --colshift 1 > parse_trace_mm.json + +.PHONY: clean +clean: clean_trace + rm -rf build _build ${targetname}.exe .PHONY: clean_trace clean_trace: - rm -rf tmpTrace trace_eventIR.json + rm -rf tmpTrace parse*.json diff --git a/programming_examples/basic/vector_scalar_add/aie2.py b/programming_examples/basic/vector_scalar_add/aie2.py index 7c99acd401..88cda90226 100644 --- a/programming_examples/basic/vector_scalar_add/aie2.py +++ b/programming_examples/basic/vector_scalar_add/aie2.py @@ -13,63 +13,67 @@ def my_vector_bias_add(): - with mlir_mod_ctx() as ctx: - @device(AIEDevice.ipu) - def device_body(): - memRef_16_ty = T.memref(16, T.i32()) - memRef_8_ty = T.memref(8, T.i32()) + @device(AIEDevice.ipu) + def device_body(): + memRef_16_ty = T.memref(16, T.i32()) + memRef_8_ty = T.memref(8, T.i32()) - # Tile declarations - ShimTile = tile(0, 0) - MemTile = tile(0, 1) - ComputeTile2 = tile(0, 2) + # Tile declarations + ShimTile = tile(0, 0) + MemTile = tile(0, 1) + ComputeTile2 = tile(0, 2) - # AIE-array data movement with object fifos - # Input - of_in0 = object_fifo("in0", ShimTile, MemTile, 2, memRef_16_ty) - of_in1 = object_fifo("in1", MemTile, ComputeTile2, 2, memRef_8_ty) - object_fifo_link(of_in0, of_in1) + # AIE-array data movement with object fifos + # Input + of_in0 = object_fifo("in0", ShimTile, MemTile, 2, memRef_16_ty) + of_in1 = object_fifo("in1", MemTile, ComputeTile2, 2, memRef_8_ty) + object_fifo_link(of_in0, of_in1) - # Output - of_out0 = object_fifo("out0", MemTile, ShimTile, 2, memRef_16_ty) - of_out1 = object_fifo("out1", ComputeTile2, MemTile, 2, memRef_8_ty) - object_fifo_link(of_out1, of_out0) + # Output + of_out0 = object_fifo("out0", MemTile, ShimTile, 2, memRef_16_ty) + of_out1 = object_fifo("out1", ComputeTile2, MemTile, 2, memRef_8_ty) + object_fifo_link(of_out1, of_out0) - # Set up compute tiles + # Set up compute tiles - # Compute tile 2 - @core(ComputeTile2) - def core_body(): - # Effective while(1) - for _ in for_(8): - elem_in = of_in1.acquire(ObjectFifoPort.Consume, 1) - elem_out = of_out1.acquire(ObjectFifoPort.Produce, 1) - for i in for_(8): - v0 = memref.load(elem_in, [i]) - v1 = arith.addi(v0, arith.constant(1, T.i32())) - memref.store(v1, elem_out, [i]) - yield_([]) - of_in1.release(ObjectFifoPort.Consume, 1) - of_out1.release(ObjectFifoPort.Produce, 1) + # Compute tile 2 + @core(ComputeTile2) + def core_body(): + # Effective while(1) + for _ in for_(8): + elem_in = of_in1.acquire(ObjectFifoPort.Consume, 1) + elem_out = of_out1.acquire(ObjectFifoPort.Produce, 1) + for i in for_(8): + v0 = memref.load(elem_in, [i]) + v1 = arith.addi(v0, arith.constant(1, T.i32())) + memref.store(v1, elem_out, [i]) yield_([]) + of_in1.release(ObjectFifoPort.Consume, 1) + of_out1.release(ObjectFifoPort.Produce, 1) + yield_([]) - # To/from AIE-array data movement + # To/from AIE-array data movement - memRef_64_ty = T.memref(64, T.i32()) - memRef_32_ty = T.memref(32, T.i32()) + memRef_64_ty = T.memref(64, T.i32()) + memRef_32_ty = T.memref(32, T.i32()) - @FuncOp.from_py_func(memRef_64_ty, memRef_32_ty, memRef_64_ty) - def sequence(inTensor, notUsed, outTensor): - ipu_dma_memcpy_nd( - metadata="out0", bd_id=0, mem=outTensor, sizes=[1, 1, 1, 64] - ) - ipu_dma_memcpy_nd( - metadata="in0", bd_id=1, mem=inTensor, sizes=[1, 1, 1, 64] - ) - ipu_sync(column=0, row=0, direction=0, channel=0) + @FuncOp.from_py_func(memRef_64_ty, memRef_32_ty, memRef_64_ty) + def sequence(inTensor, notUsed, outTensor): + ipu_dma_memcpy_nd( + metadata="out0", bd_id=0, mem=outTensor, sizes=[1, 1, 1, 64] + ) + ipu_dma_memcpy_nd( + metadata="in0", bd_id=1, mem=inTensor, sizes=[1, 1, 1, 64] + ) + ipu_sync(column=0, row=0, direction=0, channel=0) - print(ctx.module) - -my_vector_bias_add() +# Declares that subsequent code is in mlir-aie context +with mlir_mod_ctx() as ctx: + my_vector_bias_add() + res = ctx.module.operation.verify() + if res == True: + print(ctx.module) + else: + print(res) diff --git a/programming_examples/basic/vector_scalar_mul/Makefile b/programming_examples/basic/vector_scalar_mul/Makefile old mode 100755 new mode 100644 index 49d3e12e5b..7b28e874d5 --- a/programming_examples/basic/vector_scalar_mul/Makefile +++ b/programming_examples/basic/vector_scalar_mul/Makefile @@ -36,7 +36,7 @@ build/final_${data_size}.xclbin: build/aie_${data_size}.mlir build/scale.o cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts_${data_size}.txt $(<:%=../%) -build/final_trace_${data_size}.xclbin: build/aie_trace.mlir build/scale.o +build/final_trace_${data_size}.xclbin: build/aie_trace_${data_size}.mlir build/scale.o mkdir -p ${@D} cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts_${data_size}.txt $(<:%=../%) @@ -60,16 +60,16 @@ run_py: build/final_${data_size}.xclbin build/insts_${data_size}.txt trace: ${targetname}_${data_size}.exe build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} ./$< -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json + ../../utils/parse_trace.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > trace_vs.json trace_py: build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} python3 test.py -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} -s ${data_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > parse_eventIR_vs.json + ../../utils/parse_trace.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > trace_vs.json clean_trace: - rm -rf tmpTrace trace.txt + rm -rf tmpTrace trace.txt parse*json trace*json clean: clean_trace - rm -rf build _build ${targetname}_*.exe + rm -rf build _build ${targetname}*.exe diff --git a/programming_examples/basic/vector_scalar_mul/aie2.py b/programming_examples/basic/vector_scalar_mul/aie2.py old mode 100755 new mode 100644 index 437b12aadf..7dea893dba --- a/programming_examples/basic/vector_scalar_mul/aie2.py +++ b/programming_examples/basic/vector_scalar_mul/aie2.py @@ -16,8 +16,10 @@ def my_vector_scalar(vector_size, trace_size): + word_size_in = 2 N = vector_size - N_in_bytes = N * 4 + N_in_i32s = N * word_size_in // 4 + N_in_bytes = N_in_i32s * 4 N_div_n = 4 # chop input vector into 4 sub-vectors n = N // N_div_n @@ -27,17 +29,18 @@ def my_vector_scalar(vector_size, trace_size): @device(AIEDevice.ipu) def device_body(): - memRef_ty = T.memref(n, T.i32()) + memRef_ty = T.memref(n, T.i16()) memRef_ty2 = T.memref(1, T.i32()) # AIE Core Function declarations scale_scalar = external_func( - "vector_scalar_mul_aie_scalar", + "vector_scalar_mul_int16_scalar", inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()], ) scale = external_func( - "vector_scalar_mul_aie", inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()] + "vector_scalar_mul_int16_vector", + inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()], ) # Tile declarations @@ -78,7 +81,7 @@ def core_body(): yield_([]) # To/from AIE-array data movement - tensor_ty = T.memref(N, T.i32()) + tensor_ty = T.memref(N_in_i32s, T.i32()) scalar_ty = T.memref(1, T.i32()) @FuncOp.from_py_func(tensor_ty, scalar_ty, tensor_ty) @@ -92,8 +95,10 @@ def sequence(A, F, C): size=trace_size, offset=N_in_bytes, ) - ipu_dma_memcpy_nd(metadata="out", bd_id=0, mem=C, sizes=[1, 1, 1, N]) - ipu_dma_memcpy_nd(metadata="in", bd_id=1, mem=A, sizes=[1, 1, 1, N]) + ipu_dma_memcpy_nd( + metadata="out", bd_id=0, mem=C, sizes=[1, 1, 1, N_in_i32s] + ) + ipu_dma_memcpy_nd(metadata="in", bd_id=1, mem=A, sizes=[1, 1, 1, N_in_i32s]) ipu_dma_memcpy_nd(metadata="infactor", bd_id=2, mem=F, sizes=[1, 1, 1, 1]) ipu_sync(column=0, row=0, direction=0, channel=0) diff --git a/programming_examples/basic/vector_scalar_mul/test.cpp b/programming_examples/basic/vector_scalar_mul/test.cpp index e147d91fa4..fe81d3ba9e 100644 --- a/programming_examples/basic/vector_scalar_mul/test.cpp +++ b/programming_examples/basic/vector_scalar_mul/test.cpp @@ -22,7 +22,8 @@ // Configure this to match your buffer data type // ------------------------------------------------------ // using DATATYPE = std::uint8_t; -using DATATYPE = std::uint32_t; +// using DATATYPE = std::uint32_t; +using DATATYPE = std::uint16_t; #endif const int scaleFactor = 3; @@ -67,7 +68,7 @@ int main(int argc, const char *argv[]) { XCL_BO_FLAGS_CACHEABLE, kernel.group_id(0)); auto bo_inA = xrt::bo(device, IN_SIZE, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(2)); - auto bo_inFactor = xrt::bo(device, 1 * sizeof(DATATYPE), + auto bo_inFactor = xrt::bo(device, 1 * sizeof(int32_t), XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(3)); auto bo_outC = xrt::bo(device, OUT_SIZE, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(4)); @@ -85,8 +86,8 @@ int main(int argc, const char *argv[]) { bufInA[i] = i + 1; // Initialize buffer bo_inFactor - DATATYPE *bufInFactor = bo_inFactor.map(); - *bufInFactor = scaleFactor; + int32_t *bufInFactor = bo_inFactor.map(); + *bufInFactor = (DATATYPE)scaleFactor; // Zero out buffer bo_outC DATATYPE *bufOut = bo_outC.map(); diff --git a/programming_examples/basic/vector_scalar_mul/test.py b/programming_examples/basic/vector_scalar_mul/test.py index e0ada9be1e..996bb90c78 100644 --- a/programming_examples/basic/vector_scalar_mul/test.py +++ b/programming_examples/basic/vector_scalar_mul/test.py @@ -33,9 +33,9 @@ def main(opts): INOUT1_VOLUME = int(1) # Input only, 1 uint32_t scale factor INOUT2_VOLUME = int(opts.size) # Output only, 64x uint32_t in this example - INOUT0_DATATYPE = np.int32 + INOUT0_DATATYPE = np.int16 INOUT1_DATATYPE = np.int32 - INOUT2_DATATYPE = np.int32 + INOUT2_DATATYPE = np.int16 INOUT0_SIZE = INOUT0_VOLUME * INOUT0_DATATYPE().itemsize INOUT1_SIZE = INOUT1_VOLUME * INOUT1_DATATYPE().itemsize @@ -90,7 +90,7 @@ def main(opts): bo_inout2.sync(xrt.xclBOSyncDirection.XCL_BO_SYNC_BO_FROM_DEVICE) # Copy output results and verify they are correct - entire_buffer = bo_inout2.read(OUT_SIZE, 0).view(np.uint32) + entire_buffer = bo_inout2.read(OUT_SIZE, 0).view(np.uint16) output_buffer = entire_buffer[:INOUT2_VOLUME] if opts.verify: if opts.verbosity >= 1: diff --git a/programming_examples/utils/README.md b/programming_examples/utils/README.md index 8a73c46207..2cb70cb7c5 100644 --- a/programming_examples/utils/README.md +++ b/programming_examples/utils/README.md @@ -15,8 +15,8 @@ These utilities are helpful in the current programming examples context and incl - [Open CV Utilities](#open-cv-utilities-opencvutilsh) ([OpenCVUtils.h](./OpenCVUtils.h)) - [Clean microcode shell script](#clean-microcode-shell-script-clean_microcodesh) ([clean_microcode.sh](./clean_microcode.sh)) +- [Trace parser](#trace-parser-parse_tracepy) ([parse_trace.py](./parse_trace.py)) - [Trace parser - eventIR based](#trace-parser---eventir-based-parse_eventirpy) ([parse_eventIR.py](./parse_eventIR.py)) -- [Trace parser, custom](#trace-parser-custom-parse_tracepy) ([parse_trace.py](./parse_trace.py)) ## Open CV Utilities ([OpenCVUtils.h](./OpenCVUtils.h)) OpenCV utilities used in vision processing pipelines to help read and/or initialize images and video. Currently supported functions include the following. Please view header for more specific function information. @@ -32,8 +32,24 @@ OpenCV utilities used in vision processing pipelines to help read and/or initial ## Clean microcode shell script ([clean_microcode.sh](./clean_microcode.sh)) Shell script to do in-place cleanup of microcode files (e.g. core_*.lst). When viewing microcode, it's helpful for some of the extra information like hardware and software breakpoints to be removed so it's easier to see back-to-back lines of microcode. +## Trace parser ([parse_trace.py](./parse_trace.py)) +The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script parses the raw trace packet data and creates a waveform json file for view on Perfetto http://ui.perfetto.dev. The script syntax is: + +```bash +parse_trace.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json +``` + +* **--filename** : Input trace packet text file. This is generated during the running of our python host code +* **--mlir** : MLIR source. This is needed to parse what events and tiles we are monitoring to generate labels for our waveform visualizer. +* **--colshift** : runtime column shift. This specifies how much the actual design was shifted from the default position when it was scheduled and called. The reason we need this is becuase even if our design is configured for column 0, the actual loading and execution of the design may place it in column 1, 2, 3 etc. We account for this shift since the parser needs to match the actual column location of the generated trace data. Usually 1 is the right value. **NOTE** - the underlying tools currently default to column 1 to avoid using column 0 on Ryzen AI since that column does not have a shimDMA and is therefore avoided at the moment. + + ## Trace parser - eventIR based ([parse_eventIR.py](./parse_eventIR.py)) -The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script executes a number of steps in order to transform it from trace packet text file into a waveform json file. The script syntax is: +The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script executes a number of steps in order to transform it from trace packet text file into a waveform json file. + +**NOTE** - There seems to be some inconsistencies in the results generated by this parser. As of now, it is used to compare to existing the `hwfrontend` tool only. + +The script syntax is: ```bash parse_eventIR.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json @@ -90,9 +106,3 @@ to ``` which reduces the timer from 11,091,042 cycles to 381,175 seems to fix it. -## Trace parser, custom ([parse_trace.py](./parse_trace.py)) -This is our custom trace packet parser based on the trace packet spec, but it's currently a work in progress as some inconsisteancies with the generated waveform have cropped up. It is run in the same way as `parse_eventIR.py` but does not generate the intermediate directory `tmpTrace` or the other intermediate files use by `parse_eventIR.py`. - -```bash -parse_eventIR.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json -``` diff --git a/programming_examples/utils/parse_eventIR.py b/programming_examples/utils/parse_eventIR.py index b7c989ca3c..9b11975e17 100755 --- a/programming_examples/utils/parse_eventIR.py +++ b/programming_examples/utils/parse_eventIR.py @@ -18,7 +18,7 @@ rowoffset = 1 # TODO tmeporary workaround to figure out row offset for AIE2 for tiles DEBUG = False -verbose = False +verbose = True eventIRFile = "eventIR.txt" tmpTraceDirName = "tmpTrace" @@ -733,6 +733,8 @@ def lookup_event_name_by_type(trace_type, code): if trace_type == 0: if code == 0x1: event = "True" + elif code == 23: # 0x17: + event = "MemoryStall" elif code == 24: # 0x18: event = "StreamStall" elif code == 26: # 0x1A: diff --git a/programming_guide/assets/aie-ml_shift_adder_path.png b/programming_guide/assets/aie-ml_shift_adder_path.png new file mode 100644 index 0000000000000000000000000000000000000000..5723cd6b6f7853f387fd96f8e6649403c7a6c420 GIT binary patch literal 9607 zcmb7qbzD^4)-ckb(h3eOB_Pcp-42Y@5Q22q03t|tBgoJ#J#@D;N;eEC-6bI+AR+J_ z?(^LH-7oI@d*46ynH}q_z4qE`t+QgnV9Ih2@j>`#XlM_i^0I1ZX!llu{u(Yi@H`vb zkpX`0y;qZyMk^no+64xfmQqSmXlPYY_x~7U0b{&(^4jmw&}Z+3SNiw%7iIqD8EQ@p7eFk2OoWj-)8x z;PWfy6;?~zQV_w2h|a%YVXK-E84(c?tt`84rKO0~h+J(Swl~lGzKS6k6%u)G;c_-K z^Zxfz^HMWY5K*;8AqubkV%Yu+*Lr>V_U5z21A0;!gz}f;D-n8x*Y)X)N`@#Zg5Jyo zfSa@$#|Nhl;emzyK}tH=kT{`i2n!4eWuLU-WtrT;g!5YmgOs*{Ke~G%y<32+40I5Hoy(&XkRh9-B@LPp$aMKEZn~Ti}V5G9OD;YjMGO@@U8Fi2_0br-)>)txQeV+>d^mI zin0_!Vj<*Y9259G#iUY2Yj62lu2&S)nC3lCZ2nlqw={jl&Y6NPU-UV5zW?@kt{3u8 z5;Tynvr1*rRhhqGK^}P{I@MRc&sf*0wh0s0KJ=odESU5x@-WUdFq~QR|EYtZ_zMLF zZ}HI;>q+&!LX?>@ATyt)tP<#rUcUn4>8hf&{_53O{d2G+T^&FkP8~nAKzK&KCky+| zlC#Ibk>C1>P28u@F2D+UoJMgT3TA38!8@c4O6;lmL$w|iq6c;z?YW{3=AUI+%Jxq zL^H*`)jX5s1^}$#Q#-7&Fh8M%Ku)8l4FK$$KmgQ)DRRwU^9x1-%rm){?ak|nOLy6? zM1}`H<0~18Q5A;m;=;lmwsvO2mc&!G&iB9GYv-XsobAVR!&oX~1i6S*9G>gP&70DtIC}AcT!y z&mHwY*X7)fuG9~VGe$EdN)CLJ0NQVF#6%6-yj1@a?Jk5L5(L9>bnX#qNFNx}lo-8M z+S?|^lJTnRRqu#A@^JzLx3=TzFR}S=vh+Whnmbg|2ekhKaD{Iefq$^_t4eklaANcVR$-&@&)M#)F+bxndo-=jSC- zRC0?@xp;8?S=KBR4!I7egTD-ma(Qc{Iu#suWjUKh0yw`m5%8iqV4oB3X0gDjwom?#i4#|Q z`*zt~JDI;gr3LQ)MXFg1VC+dJt^U6g9*P-ao@c|0YlOb%om{>b3Sbw%nNCs zd?g?Tx?y=Je?5Tv-7{NeyTb6&9`*`EaL$ORb&-z$VxQ_3dAfZjn(@t5r2Z zUC0m|3yG*HE2n#e|4_aOt@(;hRnZ2;qZRZbu_4pAf>h;e(OA(B6=x^V^BojY(632& znxQ|?Cie_IcFcp(ok;H>CYC7pN88niha~uGlN+NuK>Si3OEH)TiEy z+4u@p^SlSO5{tcKoILcy@$${ti@keOn0sr$B9@wGQfwtdaDMdak4uR?=rv2XL#Ehv;^%i>o`>R*xwn$XTp8K~a7c%L#q z+xtIVaO|DLR);Xa9{d}3aJF24rEdrTu;IIm zwV-$?CwEZMci5|@jzpg8e<4VHA#4!{5(7Cl2fh%lPksL@nMMuAWh||579gu1U`w4W zF1;yt0A%ofW+)-82{{y(cXfB7fT1lr2!`8-$$-v#FQ7)`#~XritCsTHtxxu5ZRem& z+`gci8a^{DgV!f+BuK1bV$5u!Xgmm}S-}2%dT}wD-WKPR8LQIFinhye`^soxPA;yh z&E4xm2~bX>_cS;C;}4@qxhU*Ij6@Y*M9-kg{@Y19#@=7sqn^I;4w3fj_xmuGUY~!v>Wahp<13O36HBFQ;c#MTyGLjs=*$c zW7V+^N~3V+)n}Kjf`GY{5Zo1yo(i+^7a$MA3%z0)vDnvkr5*jgM%ScZnjF?`?Zh0& zTdr-jugR&kYhs=beX9|-9w~zu;fsP8QZ+=CehSh{-|wty4-pWKo*^pEfU@gDoZQc2 zoM}VTa6ump9&dg1|G31NS|055dC4u8#gK)%GfPPOW1e+w3W+fWbQ8s{Jzqt|wF&9b z-Uzuu*w&bCE%#6cfYL2#5S$eSJ|)nc(!~Mf-p)$LkJ^B$w|(OsycWCi)DBO|C1|up zZxua3+$=WL{D?$#E(>X9i-RHxQGbuq?}72<$uQ@h1zch#A2a7 zlK$4i_o1sY2GfEc(}UY&Yaf|B^Q}PBRdmg5L5pB%3y*(PJikKJxAbnz&+5&|wp?^7 z%WmvoM$8FwLF=@e9v0@wBBN>HP=EY$W#j~OK~l}#t34&qn4O9X z>_0x*S8A*LW_wLBDeT=y5q>b8nqVTt{4U!>cg$TBI_u$Y$IWqna%XKn4ysbdZQS35 zNYDV6)j+%-hQ(18xg^yWJ~61bO%Gf38NA<3!%&n)kk7wWl?~ZWQ9*Wg_ufB&lQ70t zH)dI-XmV?UL_cmJ`72LNDfUh_$JDL$dP>PiTb5sjD?L0|hYn2Nw+*z`&VhtZENiG; zFnAJq(p@Q9X9VFxrgtCGvc&H-DdZvsrsuJ}I3ET++yw<=w zlYj?@AJ2$9ew?^{W7D7vnwcA*RKnl+)Y@BpcseSfbRuaTHqH&~i)#7u+Qr|ILu?q> zIWNEdYwdG23~olpV<9bENJL$yZML$!NZZ!1sQzf5|zySR`A%X?5mX0H-RG%=mD({@WS?+s=Wi~}+8dCDGHZd``R1v~ec4&-H+ zXpwT#7-xex)HPEU1-T-jv9IQs-tL88&yx)Z^ELX1LmhYI=kAD*GO#UFcs8y_(4_he zSDK0+mrn=_V8$=F6CX1N2>QM3cCO@oU>$?j2jb|hx>>OnO72(D7Kz2EVW;%u+$A@z zof>~NOVhU-^A$p(49$&+)X1{g-Ah1LpF@%TIkU!Tuc2*%g@ z@g4jHxi}HPlU5wS1RclS+G&vHqF3Fr$K|3nCNI*;CQ47Fo8?))xqr`-&)2t| zuoiF%O?C|a<4a;dpkeh8E0%cc?pVAJW;QSv&-v@j4K0}qQSQvsR!Igo-Bb9SN+h{{ zx_TZLs)_66D_-Bg4Z|@KG<>Y;!_KQzs6c~{r=S5IX=lcpf-c#9v&t~_0b9y)-uVy-n{X9QAqIn=XkNf8rmC6xw_qmVw zYJGBck*v(GW(PHL#5BxRZUsNmNz;WLw_$&*|6?6;taUJ-d z7+g5wG~<3!OklmcGL=!LAohJ41vOXtbsbjTFNvmjrzDk>ec=ArfxpqYek=RA!(45N zAdiu+J9Ka&D4s$`y)0f3G>^wPY^pHM(9!NIHhAKO8S{(fSR7tHv zqfhkd2OaS@E_2klgm7trUZ=jDeTulBpgHMHxi=sK@i@DJvkhB!0YHNCXSe=AMJ)MC ztQMf!~iG?k>pRPB~Gq65CXGI++)9_7E=` zk2G^>T&bkT54yGG;rrk<3#>^(k$Kh5ivUH^v7hnHnOuEoj+PcvJCJwcdD$f_LSjYh z`YdlBJG41G-j8pbc3^w=^j|Jk{f?zt{1HKdcm5}DVmEWW{nwuUT zb$JhjH${-B3qpQE)2?Lo2lnh)knLGx1U7rYYlQv9ve0GbaXQMXS`lD+Ly)}OoxT3I zuFFegMMZ@}aZ*x}Nx&2wYxL6#`$=UnJ?UJA9Mlx1%^CMsdAVqozC@Kw@$94HO@-5X zrsT2iiP9ix2^BdFWJP&-Wi*kr;?d!vh}+2M=#;Wp90&bvIhkOX;nk>5^vW9Jl~otI zy1y-1!I+%f9Y)1s)TU(|^Tw~T+vd*AsIFl@&YT`sLT;SB_Rp2_cY6WRAmb>I2k@9D zQQTRx)|Af9ECAA3nG(J|D@P)-ihj!qM_zx9g;)iSV5^b>pO?GH!Ma#46Z~Hs6Zz1+gA1x zQgPQ7jK51)SY7#%xAGK}mRd_qr3b`-QozLkF?@7#X*>QV9VwaSlo zDKzaLU*;QIgE&%RzLP(XBcZQz93jEg)Ie>p!7t18no8sE)zTNGQs;j`xN zh87#P>C~&9BV59_f6+ho5`u=o=+~bc$Bh;h+P|KBaG~iIp2eKQD(z*ONkWBlz}?aO z9E?E{J@qhZniPa#`v{OK1){G@BB7-ff-IGU*T z>O+jPrljO=C$fFkfW<=8OFB}Xhmm&p*iSOZQ|mbksiP@lM1t^d6c3*0e#fxAQ;X|F zB7;dhcjM=al+!1*{bYl|aiG?BTa!D9nD1F1We{!P9&5eA34Z6zp=8OgEzj@K|sWt$umZVCL_#0U!v28_Gn;OcRTZ z`iX-O;6wKmk&)gUSMo(&!Wzbga%^%Wv@yD z@m4JR&~l;5!n)W&`+jDF=*9i*UGZG%y8v7h(WAmbYEY79)G#UTpYbxPUb^aJh&%HL z7vwm9k(baIWh^e5x+vG%v}#3Ma}j1<{vC=!(pm`9z-C00=P2v%hu-JB=gju~vTQ`f zoI9mH;pm1)R9u=iu>d9bB27a1)d7Bez)cVS#$3abN}#|KYRKaxsy~bWIiXOVe4OnqP6Xr-4QFb)62kkQ{Oomo0B}4*0hc{%)d7DqcL-iv5wF3IEkN6M zdo;xTv%3>F&M$ALHOw)E$;9EqqTJi1B z+Y$>2k&KLuIY6X`@wVD(HUx^`n$~4w5u_@Lno7TpHRjzPZkmc4Q6Gov+XfDkaJK~|@TYOeA-*eUiA!o8djmY@`oy=eU?C4d z)@iiyQnXBU0z0?WX1-S05x)(h)E=faF!fbqKA(nF*O2heKs;8$)2!6l9iDFruaZvO z_)wBkl-f|NuI~sH@?3oiraln-hbe@yM^o97igt@I6OnJn_kP?xe&0`p`{=s)IeKJ> zIa^s>0%64{5jzKIXmcL@JD@Ip6XwCvd{;|_P_;S=74;v54DaSUKq8w|o5oqwl0 z7z<8a07`BDavLDiRxRkoYPQ4<-&!-dS4dNB{w)-%P+s`7X)YVJScOqA!hU-()Oh$s z?Z1pP3s89#xKmoxNg1H){n?uJbyFZgxP5eV)JyBDf#kc6Pv55_dfFEQ3f$#vQCOC1 z2Z|~EaV&5mwNW4e%EiSsweuh~D;pFvi9sJgRm4M4fx5ZSAQmGz62FL@p~7F(y>o47 zf&AmeFUvZ-e*XuJzPC5S!-%4pK(^Por6)TJUj}K=hw72o> zDa(}!&KzJ%e2SQ!uiW~3gA_g};*;9qX-Gu9U~Snj?O>8+4#ukwJc^CNOCm}kWBx|a zp&*XFy}f<>7CSMT%)_fDGFmuVIaZ73YqX5(&{R-(P5Hs`mb(C(-|Nu z9FM#~X4p7LzhMyb*$qyha<+=s@zaj74MQpdHSZHWLq}s%3 zHiRn^Kn*|P1(r8Y%03>QX(&BM-2JuT2;W8~9ItI{bywGOCD6K6d~#>AW(p62FaYXW zBk|MG+EO|`p2fOUawo-C{1j~tw1uca%M#KEP%GfrFG8oI^`#u}E*Sie+i(*kZ^5z% z199DSqsbj}X@mhr&9m4?WTk}m7)J$Qh##oct6umk@IFw4KHZynzMD^8b}m!|@z?b6W4ef2C9Jr$PH zk2~L5^V0{}k^|*bTy4((``M_Uo~GB8Nq+vL^I1&IX9-bNnx#YK^Ve azC9*(1TMJI62PCQ(4a4sWy__F0{$0N5U=b2 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie-ml_srs_ups.png b/programming_guide/assets/aie-ml_srs_ups.png new file mode 100644 index 0000000000000000000000000000000000000000..1d45408bfe00af8e0eb3a3de51714f147173f3c8 GIT binary patch literal 12132 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�bom~i(AbH7m=i}@>m2^6!811WBO!93_Tx13S%4Pxs zbOVHk!SWS7u363ohw-W#9A$rqz zUmi}PBhmE?@ zk_DR25--cDFX2ys+V|*`eGoxt&klcZx6O}J2jPG$PQ2RYtMd-i&C1a|B$FEFRhHj6P@jJPn@)xGW zVSA#eX39Ps=B$=8(*JWL`W^xO+u@V`CjlXXJtzRCT%zPuas4gsvJSh!8#CR5tY9XB z#2@$#5V{Ry0e0rV#tcJ1`j!jJJq+_3zK9Y$JEdn`JsiKx?o37Sv(@|GQ%-GBsQksw zsPwP4py&ZOpF>x1L5wbSsU`wweoQTMdOUc9_#k;HS5#B*Hlw?XP6IKwRzx10GKX$c>+qALm}0kA}lc6mDiw6BSqh_w`Ou ze33~=NN8eW;>>mQ?+0Bs8T_JThGxP@=0%oGU|=9n2)Mb`ai@{o%&CGXq|AX9<_M8b zc9yM|*QCFo(JG)5TWA8QHX;-lalUmk#LC8rd-G+=BC}I#3qolt^EICGq_RJ73(ZDNr<}65GyblkEN~* KRjPzohWr;ks(C~J literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie-ml_vector_unit.png b/programming_guide/assets/aie-ml_vector_unit.png new file mode 100644 index 0000000000000000000000000000000000000000..2151f8feccb36bb3efc5b160a3be6dff55759eba GIT binary patch literal 14400 zcmdse2UOErw~}zW46D_2zwRX04gE1pe)`ea_zd_uG5>>JL>piVHU`kdTm2D9B4| zkdU0d0)8mYp9W9J>FnQvKd0O@6-g43!fHxd#^ z6Y=L%i%W(j35j68g0!U8W0RF}aa)+7&#vq9CUZwK)*}CgjS=qFFHaryI7VJX@7`+5 z`_zC6j1^Wld{r4D()j8$S=-o!GgmIWHofY|cutDlTe5-T>P6X~w=UdBd3gQmm_)-3 z^5TY?Zung0qGo@8u6^dBdy?j)+Fi}LOig4}^&&nii$A`Un}mcTB@wEtt1BlbS8e;O zCMq^I_Mpo=H7`FuJUo0muwe;GPoIpzED492#NTRZYHCXMKp<|WUpG;kz#bj>!~0fO zSGSC1A0ZxAt4X4z#IMzK+4A}9u8wzgLC8E^>=3QPrInR;1fhAa&SB%qYHR(G$b6?W zTYG!AUBtWsoGL0SBX?td&a((A|^Yvw)dQY+SN&)hv zlw@aTry`a7wJRq{Q6)wh0X57Ei+L@Z($pm7#CU#UlLRIJ6DfH*aTnW=l0{NcNWQi* zT24blGa?~eQMkk!1?BmGt(YCL{SAAWp3IYEcXu}-Az?(qB?9_10y^dTkW2!x)t8O7 zxaq#pe=EJI;o)7V1Fz;tkR8_u&Qb)L%r%zYMm5wgWDr+qYeEN;dkh`&EJf)c3_MGA zeuv44*WQHRN)Ie8EsfLs@tkc?fL_tbz}^4cX7@WgB;0gHi#FC*$GMrxEpS*<%a>zl zqgWpG^M1jKS;9Ky@>dRCH|wPB2UM(+OHlDO>erhDIo#Qm|+btyu z%ScD5{Z}8=&W%+qCw{ef_MG*tfD�e$haP%n~!aarzV2)uS+Ko0(Cs&QvgkZ|;bS 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 oh~twPfRg|AmzCfC#__3r0}gZt1K%w8Uw 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

oq@qFJW1`Y;kj@4u8;iVw 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 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie_vector_scalar_ml_opt1.png b/programming_guide/assets/aie_vector_scalar_ml_opt1.png new file mode 100755 index 0000000000000000000000000000000000000000..712fa2881444449f8b3dc1589f6947edf5914681 GIT binary patch literal 60299 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

4ik1 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 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/trace_vector_scalar_add1.png b/programming_guide/assets/trace_vector_scalar_add1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6e9e8e42e74270ab8c2c331496cbbfc70e1807 GIT binary patch literal 53276 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 $@ @@ -32,18 +34,23 @@ else cp _build/${targetname} $@ endif -run-g: ${targetname}.exe build/final.xclbin build/insts.txt - ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t 8192 +run: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE run_py: build/final.xclbin build/insts.txt ${powershell} python3 test.py -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -trace: - ../../../programming_examples/utils/parse_eventIR.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > parse_eventIR_vs.json +trace: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t ${trace_size} + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json + +trace_py: build/final.xclbin build/insts.txt + ${powershell} python3 test.py -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t ${trace_size} + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json clean_trace: - rm -rf tmpTrace trace.txt + rm -rf tmpTrace trace.txt trace*json clean: clean_trace rm -rf build _build ${targetname}.exe diff --git a/programming_guide/section-4/section-4b/README.md b/programming_guide/section-4/section-4b/README.md index 71a3b8fdac..e57029ae0c 100644 --- a/programming_guide/section-4/section-4b/README.md +++ b/programming_guide/section-4/section-4b/README.md @@ -13,7 +13,7 @@ * [Section 4 - Vector Programming & Peformance Measurement](../../section-4) * [Section 4a - Timers](../section-4a) * Section 4b - Trace - * [Section 4c - Kernel Vectorization](../section-4c) + * [Section 4c - Kernel Vectorization and Optimization](../section-4c) ----- @@ -102,7 +102,7 @@ packetflow(1) { ## 2. Configure host code to read trace data and write it to a text file -Once the trace units are configured and enabled, we want the host code to read the trace data from DDR and write it out to a text file for post-run processing. +Once the trace units are configured and enabled, we want the host code to read the trace data from DDR and write it out to a text file for post-run processing. To give a better sense of how this comes together, this section provides an example design sourc files and Makefile whose kernel is based off the [Vector Scalar Add example](../../../programming_examples/basic/vector_scalar_add/). ### AIE structural design code ([aie2.py](./aie2.py)) In order to write the DDR data to a text file, we need to decide where we want the DDR data to first be stored and then read from that location, before writing to a text file. This starts inside the [aie2.py](./aie2.py) file where we use the `configure_simple_tracing_aie2` function call to configure the trace units and program the shimDMA to write to one of the 3 inout buffers. There are many ways to configure our structural design to write this data out but one pattern is the following: `inout0` is for input data, `inout1` is for output data, and `inout2` is for output trace data as illustrated below: @@ -124,37 +124,38 @@ As described in [python/utils](../../../python/utils) for `trace.py`, we configu | 1 | inout1 | | 2 | inout2 | -An example of this is in the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul/aie2.py), where it uses the 2nd pattern above (input A, input B, output C + trace). In the vector scalar multiply case, A is used for the input vector and B for the scalar factor. Since we're sharing the trace data with the output buffer on `inout2`, we set `ddr_id=2`. In addition, we set the offset to be the output data buffer size since the trace data is appended after the data (`offset=N_in_bytes`). +An example of this is in the Vector Scalar Multiply example ([aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py)), where it uses the 2nd pattern above (input A, input B, output C + trace). In the vector scalar multiply case, A is used for the input vector and B for the scalar factor. Since we're sharing the trace data with the output buffer on `inout2`, we set `ddr_id=2`. In addition, we set the offset to be the output data buffer size since the trace data is appended after the data (`offset=N_in_bytes`). For our local design ([aie2.py](./aie.py)), we have variation of the 2nd pattern but the second inout buffer is unused (input A, unused, output C + trace). `ddr_id=2` is still used since our output buffer is mapped to `inout2` and our trace data offset is specified as `C_sz_in_bytes`. Once [aie2.py](./aie2.py) is configured to output trace data through one of the 3 inout buffers with matching `ddr_id` config and `offset`, we turn our attention to the host code to read the DDR data and write it to a file. -**NOTE**: In the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul/aie2.py) and associated [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile), we provide a Makefile target `run` for standard build and `trace` for trace-enabld build. The trace-enabled build passes the trace buffer size as an argument to [aie2.py](./aie2.py) which conditionally enables the trace `flow` and calls `configure_simple_tracing_aie2` as long as `trace_size` is > 0. +**NOTE**: In our example design, the [aie2.py](./aie2.py) and associated [Makefile](./Makefile), we provide a Makefile target `run` for standard build and `trace` for trace-enabld build. The trace-enabled build passes the trace buffer size as an argument to [aie2.py](./aie2.py) which conditionally enables the trace `flow` and calls `configure_simple_tracing_aie2` as long as `trace_size` is > 0. This is also true for the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul). ### (2a) C/C++ Host code ([test.cpp](./test.cpp)) The main changes needed for [test.cpp](./test.cpp) is the increase in the output buffer size to account for the trace buffer size, being careful to read only the output buffer portion when verifying correctness of the results. We also need to be sure to pass the correct buffer offset which points to the trace buffer data when calling `write_out_trace`. -You can see in the Vector Scalar Multiply example [test.cpp](../../../programming_examples/basic/vector_scalar_mul/test.cpp) that trace_size is set based on an input argument of `-t $(trace_size)` which is defined and passed in the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile). The `trace` target from the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile) is shown below. +You can see in [test.cpp](.test.cpp) that trace_size is set based on an input argument of `-t $(trace_size)` which is defined and passed in the [Makefile](.Makefile). The `trace` target from the [Makefile](./Makefile) is shown below. ```Makefile -trace: ${targetname}_${data_size}.exe build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt - ${powershell} ./$< -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json +trace: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t 8192 + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json ``` -Following the invocation of the executable, we call the `parse_eventIR.py` python script which we will cover in more detail in step 3. -Within the Vector Scalar Multiply example [test.cpp](../../../programming_examples/basic/vector_scalar_mul/test.cpp), we redefine OUT_SIZE to be the sum of output buffer size (in bytes) and the trace buffer size. +Following the invocation of the executable, we call the `parse_trace.py` python script which we will cover in more detail in step 3. +Within the [test.cpp](./test.cpp), we redefine OUT_SIZE to be the sum of output buffer size (in bytes) and the trace buffer size. ```c++ - int OUT_SIZE = OUT_VOLUME * sizeof(DATATYPE) + trace_size; + int OUT_SIZE = INOUT2_SIZE + trace_size; ``` -All subsuquent references to the output buffer size should use `OUT_SIZE`. The exception is when we want to verify the output results which should be bounded by the original output buffer size, in this case `IN_VOLUME`. +All subsuquent references to the output buffer size should use `OUT_SIZE`. The exception is when we want to verify the output results which should be bounded by the original output buffer size, in this case `INOUT2_VOLUME`. Finally, the function to write the trace output to a file as defined in `aie.utils.trace` is `write_out_trace` and we need to pass it the pointer in the output buffer where the trace data begins, the trace buffer size and the trace file name (default is `trace.txt`). ```c++ - test_utils::write_out_trace(((char *)bufOut) + IN_SIZE, trace_size, - vm["trace_file"].as()); + test_utils::write_out_trace( + ((char *)bufInOut2) + INOUT2_SIZE, + trace_size, vm["trace_file"].as()); ``` ### (2b) Python Host code ([test.py](./test.py)) -In the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile), we also have a `trace_py` target which calls the python host code `test.py`. Here in addition to the `-t ${trace_size}`, we also define the `-s ${data_size}` which is the data size (in uint32) for our Vector Scalar Multiply kernel. +In the [Makefile](./Makefile), we also have a `trace_py` target which calls the python host code `test.py`. Here in addition to the `-t ${trace_size}`, we also define the `-s ${data_size}` which is the data size (in uint32) for our Vector Scalar Multiply kernel. ```Makefile trace_py: build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} python3 test.py -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} -s ${data_size} @@ -177,10 +178,9 @@ Finally, we read `trace buffer` from the entire_buffer starting a the offset of ``` ## 3. Parse text file to generate a waveform json file -Once the packet trace text file is generated (`trace.txt`), we use a python-based trace parser ([parse_eventIR.py](../../../programming_examples/utils/parse_eventIR.py)) to interpret the trace values and generate a waveform json file for visualization (with Perfetto). +Once the packet trace text file is generated (`trace.txt`), we use a python-based trace parser ([parse_trace.py](../../../programming_examples/utils/parse_trace.py)) to interpret the trace values and generate a waveform json file for visualization (with Perfetto). ```Makefile - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json -json + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > trace_vs.json ``` This leverages the python parse scripts under [programming_examples/utils](../../../programming_examples/utils/). Follow [this link](../../../programming_examples/utils/) to get more details about how to use the python parse scripts and how they are coded. @@ -194,7 +194,14 @@ Open https://ui.perfetto.dev in your browser and then open up the waveform json * Check matching packet IDs for packet-routed flows. The packet flow ID must match the configured ID value in Trace Control 1 register or else the packets don't get routed. ## Exercises -1. Ask questions about routing congestion for circuit switch and packet switch routes? +1. Let's give tracing a try. In this directory, we're been examining a design based off the `Vector Scalar Add` example. Run `make trace` to compile the design and generate a trace file and run the `prase_trace.py` script on it to generate the `trace_4b.json` waveform file. Open this in http://ui.perfetto.dev. if you zoom into the region of interest with the W and S to zoom in and out respectively and A adn D to pan left and right. You should seem a wave like the following: + + + + Based on this wave, You can mouse over each chunk of continguous data for `PortRunning0` (input dma port) and `PortRunning1` (output dma port). What is the chunk size? How many input and output chunks are there? This shoudl match iteration loop bounds in our exmple design. + +1. **TODO** Additional questions about routing congestion for circuit switch and packet switch routes for trace packets? + ----- [[Prev]](../section-4a) [[Up]](../../section-4) [[Next]](../section-4c) diff --git a/programming_guide/section-4/section-4b/aie2.py b/programming_guide/section-4/section-4b/aie2.py index 15e58e0343..16d9ea203e 100644 --- a/programming_guide/section-4/section-4b/aie2.py +++ b/programming_guide/section-4/section-4b/aie2.py @@ -75,14 +75,9 @@ def sequence(inTensor, notUsed, outTensor): trace_utils.configure_simple_tracing_aie2( ComputeTile, ShimTile, - channel=1, - bd_id=13, ddr_id=2, size=trace_size, offset=C_sz_in_bytes, - start=0x1, - stop=0x0, - events=[0x4B, 0x22, 0x21, 0x25, 0x2D, 0x2C, 0x1A, 0x4F], ) ipu_dma_memcpy_nd( @@ -97,4 +92,8 @@ def sequence(inTensor, notUsed, outTensor): # Declares that subsequent code is in mlir-aie context with mlir_mod_ctx() as ctx: my_first_aie_program() # Call design function within the mlir-aie context - print(ctx.module) # Print the python-to-mlir conversion + res = ctx.module.operation.verify() # Verify mlir context + if res == True: + print(ctx.module) # Print the python-to-mlir conversion + else: + print(res) diff --git a/programming_guide/section-4/section-4b/test.cpp b/programming_guide/section-4/section-4b/test.cpp index 004b243134..6f775e5b54 100644 --- a/programming_guide/section-4/section-4b/test.cpp +++ b/programming_guide/section-4/section-4b/test.cpp @@ -215,10 +215,8 @@ int main(int argc, const char *argv[]) { // Write trace values if trace_size > 0 if (trace_size > 0) { - test_utils::write_out_trace( - ((char *)bufInOut2) + INOUT2_SIZE, - // test_utils::write_out_trace(((char *)bufTrace), - trace_size, vm["trace_file"].as()); + test_utils::write_out_trace(((char *)bufInOut2) + INOUT2_SIZE, trace_size, + vm["trace_file"].as()); } // Accumulate run times diff --git a/programming_guide/section-4/section-4b/test.py b/programming_guide/section-4/section-4b/test.py index b6c0d99c02..a36dc5d5a7 100644 --- a/programming_guide/section-4/section-4b/test.py +++ b/programming_guide/section-4/section-4b/test.py @@ -10,6 +10,7 @@ import time import aie.utils.test as test_utils +import aie.utils.trace as trace_utils # ------------------------------------------------------ # Configure this to match your design's buffer size @@ -35,12 +36,12 @@ def main(opts): instr_text = [l for l in instr_text if l != ""] instr_v = np.array([int(i, 16) for i in instr_text], dtype=np.uint32) - OUT_SIZE = INOUT2_SIZE + opts.trace_size + OUT_SIZE = INOUT2_SIZE + int(opts.trace_size) # ------------------------------------------------------ # Get device, load the xclbin & kernel and register them # ------------------------------------------------------ - (device, kernel) = init_xrt_load_kernel(opts) + (device, kernel) = test_utils.init_xrt_load_kernel(opts) # ------------------------------------------------------ # Initialize input/ output buffer sizes and sync them @@ -95,23 +96,20 @@ def main(opts): continue # Copy output results and verify they are correct - out_size = INOUT2_SIZE + opts.trace_size - print("out_size:", out_size) - output_buffer = bo_inout2.read(out_size, 0).view(INOUT2_DATATYPE) - dout_buffer = output_buffer[0 : INOUT2_VOLUME - 1] - trace_buffer = output_buffer[INOUT2_VOLUME - 1 :] + entire_buffer = bo_inout2.read(OUT_SIZE, 0).view(np.uint32) + output_buffer = entire_buffer[:INOUT2_VOLUME] if opts.verify: if opts.verbosity >= 1: print("Verifying results ...") ref = np.arange(2, INOUT0_VOLUME + 2, dtype=INOUT0_DATATYPE) - # e = np.equal(output_buffer, ref) - e = np.equal(dput_buffer, ref) + e = np.equal(output_buffer, ref) + # e = np.equal(dput_buffer, ref) errors = errors + np.size(e) - np.count_nonzero(e) # Write trace values if trace_size > 0 - # if opts.trace_size > 0: - # print("Do something with trace!") - # test_utils.write_out_trace(trace_buffer, opts.trace_size, opts.trace_file) + if opts.trace_size > 0: + trace_buffer = entire_buffer[INOUT2_VOLUME:] + trace_utils.write_out_trace(trace_buffer, str(opts.trace_file)) npu_time = stop - start npu_time_total = npu_time_total + npu_time diff --git a/programming_guide/section-4/section-4c/README.md b/programming_guide/section-4/section-4c/README.md index 79a96a564b..6d863fe7bb 100644 --- a/programming_guide/section-4/section-4c/README.md +++ b/programming_guide/section-4/section-4c/README.md @@ -8,16 +8,18 @@ // //===----------------------------------------------------------------------===//--> -# Section 4c - Kernel Vectorization +# Section 4c - Kernel Vectorization and Optimization * [Section 4 - Vector Programming & Peformance Measurement](../../section-4) * [Section 4a - Timers](../section-4a) * [Section 4b - Trace](../section-4b) - * Section 4c - Kernel Vectorization + * Section 4c - Kernel Vectorization and Optimization ----- -Now that we are able to measure the total application time ([section-4a](../section-4a/)) and have examined the kernel performance via tracing ([section-4b](../section-4b)), we will take a closer look at kernel vectorization. We will be using the [vector-scalar multiply example](../../../programming_examples/basic/vector_scalar_mul/) again to illustrate kernel vectorization concepts. Go ahead and read the design example summary for [vector-scalar multiply](../../../programming_examples/basic/vector_scalar_mul/) first to get an idea of the different components of this example design. Then, let's take a closer look at the kernel source file ([scale.cc](../../../aie_kernels/aie2/scale.cc)). +Now that we are able to measure the total application time ([section-4a](../section-4a/)) and have examined the kernel performance via tracing ([section-4b](../section-4b)), we will take a closer look at kernel vectorization. We will be using the [vector-scalar multiply example](../../../programming_examples/basic/vector_scalar_mul/) to illustrate kernel vectorization concepts. + +Go ahead and read the design example summary for [vector-scalar multiply](../../../programming_examples/basic/vector_scalar_mul/) first to get an idea of the different components of this example design. Then, let's take a closer look at the kernel source file ([scale.cc](../../../aie_kernels/aie2/scale.cc)). In [scale.cc](../../../aie_kernels/aie2/scale.cc), we see that the scalar code is relatively straight forward: ```C++ @@ -33,6 +35,7 @@ void scale_scalar(T *a, T *c, T factor, const int32_t N) { Here, the code iterates over the input vector (`a`) and multiplies each element from the vector with a scalar value (`factor`) before storing the results in output vector (`c`). The simple C/C++ code for this consists of a for-loop, with a simple read and scalar multiply operation inside the loop. +### AIE API To vectorize this, we first need to familiarize ourselves with the AIE API which abstracts the underlying AIE processor and associated low-level intrinsics with an higher level C++ API. Documentation for AIE API (2023.2 Vitis tools) can be found [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/modules.html). To view details on the vector x scalar mutlipler, on the left pane, navigate to *AI Engine API User Guide -> API Reference -> Arithmetic* and select the first `aie::mul` which shows a `Vec * E` where `E` is an elementary data type like a scalar int. To be able to use this AIE API function in our kernel code, we first need to include the AIE API headers. @@ -40,6 +43,7 @@ To be able to use this AIE API function in our kernel code, we first need to inc #include ``` +#### Vector Registers Then, we declare a vector as follows: ```C++ aie::vector my_vector @@ -47,7 +51,7 @@ aie::vector my_vector * T - data type, such as `int32_t` * vec_factor - vector size, such as 16. -The size of the vector depends on the type. For example, the standard vector register in AIE2 is 512 bits. For `int32_t`, that means we can store 16 of them. Extending this to the other supported data types, we have the following abbreviated table: +The size of the vector depends on the type. For example, the standard vector register in AIE2 is **512 bits**. For `int32_t`, that means we can store 16 of them in 1x 512b vector register. Extending this to the other supported data types, we have the following abbreviated table: | Data type | Vector size | |-----------|-------------| @@ -58,77 +62,193 @@ The size of the vector depends on the type. For example, the standard vector reg A more complete table of supported vectors can be found in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__basic__types.html). Note that if the listed data types * vector size ends up being larger than 512-bits, that just means it's stored in 2+ vector registers instead of just one. +#### Vector Load + We can load the vector register from local L1 memory with the `aie::load_v` function, defined as follows: ```C++ T *__restrict pA1 = a; aie::vector A0 = aie::load_v(pA1); ``` -Here, `__restict` is used to qualify the pointer to indicate that it's a restrict pointer and therefore memory access to that pointer can be more optimally arranged by the scheduler. This is because restrict says that sequential access to the pointer will not access the same memory location and can therefore be treated as independent. +Here, we use `__restict` to qualify the pointer to indicate that it's a restrict pointer which says that the pointer is the only thing that accesses the underlying object. It eliminates the potential for pointer aliasing, enabling better optimization by the compiler. +#### Vector Multiply The vector load has a template argument `vec_factor` to match the one used in the `aie::vector` declaration. +At this point, it would be good to take a closer look the AIE Archtecture as being able to optim + Finally, we get to the `aie::mul` call which takes a vector and a scalar as arguments and stores the result in an accumulator register desginated by: ```C++ - aie::accum cout + aie::accum cout ``` -The accumulator data type in this case is 16x 64-bit accumulator. We store the computed results back to local memory using the vector store function `aie::store_v` as shown: +The accumulator data type in this case is 32x 32-bit accumulator. We store the computed results back to local memory using the vector store function `aie::store_v` as shown: ```C++ T *__restrict pC1 = c; - aie::store_v(pC1, cout.to_vector(0)): + aie::store_v(pC1, cout.template to_vector(0)): ``` -Here, the accumulator type can be shift-round-saturated back to a vector register with the `.to_vector(0)` call where `T` is the vector register type and the single integer argument `(0)` is the shift amount. +Here, the accumulator type can be shift-round-saturated back to a vector register with the `.template to_vector(0)` call where `T` is the vector register type and the single integer argument `(0)` is the shift amount. The entire vector block is then: ```C++ template -void scale_vectorized(T *a, T *c, T factor, const int32_t N) { - constexpr int vec_factor = 16; +void scale_vectorized(T *a, T *c, int32_t factor, const int32_t N) { event0(); + constexpr int vec_factor = 32; T *__restrict pA1 = a; T *__restrict pC1 = c; const int F = N / vec_factor; + T fac = factor; for (int i = 0; i < F; i++) - chess_prepare_for_pipelining chess_loop_range(16, ) { + chess_prepare_for_pipelining chess_loop_range(16, ) + { aie::vector A0 = aie::load_v(pA1); pA1 += vec_factor; - aie::accum cout = aie::mul(A0, factor); - aie::store_v(pC1, cout.to_vector(0)); + aie::accum cout = aie::mul(A0, fac); + aie::store_v(pC1, cout.template to_vector(0)); pC1 += vec_factor; - } + } event1(); } ``` In this first example, the vectorization strategy was relatively straight forward. Instead of iterating over a vector of values and doing a single scalar multiply, we load a vector of input values, iterate over a smaller loop to perfrom a vector*scalar operation using the AIE API functions, and then store the vector of results back to local memory. -## Exercises -1. Let's take a look at the trace for our vector scalar design. First, let's edit our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/) so that the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) source file has `vectorized=False`. In the soruce code, we simply select the scalar version of the kernel function. Then run `make trace`. After the trace compilation is complete, open `parse_eventIR_vs.json` in https://ui.perfetto.dev and measure the delta between `event 0` and `event 1`. Note that in the Perfetto waveform, 1 ms is equal to 1 clock cycle. How many cycles did you measure? +## Vectorization Exercises +1. Let's take a look at the trace for our vector scalar design. First, let's edit our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/) so that the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) source file has `vectorized=False`. In the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) sourcee code, we simply select the scalar version of the kernel function. Then run `make trace`. After the trace compilation is complete, open `trace_vs.json` in https://ui.perfetto.dev and measure the delta between `event 0` and `event 1`. Note that in the Perfetto waveform, 1 us is equal to 1 clock cycle. How many cycles did you measure? + +1. Now let's turn vectorization back on by changing `vectorized=True`. But we're also going to disable an pragma guided optimization first to see its effect. In the [scale.cc](../../../aie_kernels/aie2/scale.cc), comment out the line after the `for loop` that says `chess_prepare_for_pipelining chess_loop_range(16, )`. Be sure you're editing the general template and not the `int32_t` template specialization. We'll examine that shortly. The rerun the compilation (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? + + That's quite an improvemnt, ~20X reduction in compute latency. However, there's more optimization that can be had with vetor code and that involves compilation pragmas. + +1. Go back to [scale.cc](../../../aie_kernels/aie2/scale.cc) and uncomment the line with `chess_prepare_for_pipelining chess_loop_range(16, )`. The rerun the compilation (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? + + Now, we're really seeing some savings (another factor ~6X savings or ~140X compare to the scalar version) The line we added help guide the compiler to find optimal schedules. In particular for kernel loops, `chess_prepare_for_pipelining` and `chess_loop_range(16, )` are particularly useful. + * `chess_prepare_for_pipelining` - Used in the innermost loop to tell the compiler to enable software pipelining. This is necessary for subsequent loop optimization pragmas to be useful + * `chess_loop_range(MIN, MAX)` - An extremely helpful pragma. This tells the compiler how many minimum or maximum iterations we expect this loop to have. We often paramterize loop bounds based on size and even if the upper bound is declared as a const, it's still a runtime computed value. Giving the MIN value is particular helpful because it guides the scheduler to know how many iterations we have and can therefore properly schedule the loop instructions. + +## Optimization - Coding for the Architecture + +At this point, We've vectorized our code to better leverage the AIE hardware and saw signficant performance gains, but is our design fully optimized? How do we know if we've used the powerful AIE hardware to its full potential? This requires a deeper understanding of the underlying AIE architecture and coding for performance with the hardware in mind. For this next section, we will focus on **AIE2** (aka AIE-ML) that's at the heart of the Ryzen AI NPU. AIE2 is optimized for ML workloads which means matrix mulitplication style compute would leverage the hardware the best. We will also start our exploration by continuing with the vector-scalar multiply example. While it is true that vector-scalar multiply isn't matrix multiply, it does provides a good starting point in understanding what design considerations are needed to code optimal designs. + +### The Vector Unit - Loads + +The first step in optimizing our code even further is to have a picture of the AIE Vector Unit which can be found in the [AIE-ML architecture manual (am020)](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Fixed-Point-Vector-Unit). Below is a diagram of the vector unit from the manual. + + + +As we can see, vector registers are loaded from 2 parallel Load Units, each capable of loading 256 bits per clock cycle from local L1 memory. We have 12 512-bit vector registers which feed into each Permute block and eventually, the Multiplier block. It is important then to always think in terms of 2 256-bit parallel loads per clock cycle. If, for example, you try to load 2048-bits of data per clock in order to do your compute, you will be less efficient as that would require more than 1 cycle. Another important note is that the loads must come from different L1 memory banks or else a bank conflict will occur. The bank conflict penalty is small but would reduce opitimal performance. + +### The Vector Unit - Multiply and Add (MAC) + +Once data is loaded and permuted, it passes to the Mutliplier block which supports a wide list of AIE data types. The multiply results then pass through an optional post-add step (very common for matrix multiply) before eventualy being stored in the accumulator registers. There are 9x 512-bit accumulator registers. Accumulator registers are larger so data precision can be maintained. A well optimized piece of code woudl schedule 1 vector MAC (VMAC) every cycle. + +### The Vector Unit - SRS and Stores + +Once data has been computed (either in 1 cycle or accumulated over a number of cycles), the results can be then be written back out to local L1 memory via the Store Unit. This mirrors the 2 Load Units except there is a just 1 Store Unit. Bridging between the accumulator registers and vector registers or local L1 memory utilizes the SRS Unit (shift-round-saturate) which shifts, rounds and saturates with a number of configurable rounding and saturation modes. + + + +The SRS path is on the right of the diagram above with the corollary path, the Upshift (UPS) path on the left. + +### The Vector Unit - Shift/ Shuffle/ Adder Path + +Finally, we have an additional parallel processing path which performs shift, shuffle, simple addition, comparison and a host of other functions. This path runs in parallel with the main integer vector datapath and may be tasked to do the aforementioned functions without the need of the VMAC datapath if a VMAC is not needed in our code. + + + +It is very helpful to have in mind this processing datapath and the way in which data is loaded and stored to/from local memory. The next step then is to see how close we are to the ideal performance in our application and then examine the results in more detail to better understand where we might be able to improve. + + +### Multiplier Utilization Efficiency + +Now that we have a better understanding of the architecture, let's take a closer look at hardware efficiency.The following diagram shows the various AIE architecture blocks we talked about along with a table of generalized compte. + + + +**NOTE** - Matrix multiplication mode table is in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__mmul.html). Another way to see the total number of MACs for different bit precisions is the `Table: Supported Precision Width of the Vector Data Path` in the [AM020 spec](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Functional-Overview). + +This table tells us that for 16-bit x 16-bit compute, we have 64 MACs avaialable per cycle. However, these MACs are targetign Matrix Multiplication (with its accompanying post-addition steps). In practice, we have 32 accumulator lanes available. That means for eltwise operations, we can only use 32 MACs per cycle. + +#### MAC efficiency +Using this information and our Vector Scalar Multiply example, we know that each call to the kernel passses in an array of 1024 16-bit data. With 32 MACs available, our `vector_factor` is 32 and therefore, we would ideally need 1024 / 32 = 32 cycles to process this amount of data given our 32 MACs per clock eltwise vector MAC cofiguratoin. Our final optimized cycle count for the kernel was 72 cycles or roughly 2x the ideal number of cycles. + +Total MAC efficiency is a product of the (MAC schedule efficiency) x (per clock MAC utilization efficiency). +* MAC schedule efficiency - Ideal MAC cycles / Actual MAC cycles (e.g. 32/ 72 = 44%) +* per clock MAC utilization efficiency - # of MACs used/ total # of MACs avaialable (e.g. 32/ 64 = 50%) +Therefore, the total MAC efficiency is 44% x 50% = 22%.. + +Let's file that result away but look at our algorithm from load/ store bandwidth perspective. + +#### Load/ Store Bandwidth efficiency + +To process a vector of 32 int16 values times a scalar, let's ignor the scalar load and focus only on the vector one. 32 int16 = 512-bits which would take 2x 256-bit loads or 2 cycles per MAC. It might be possible to do it in a single cycle if the data is striped across banks perfectly. We also need to store 2x 256-bits which must take 2 cycles since we only have 1 Store Unit. This means that even if we could do a VMAC every cycle, we need 2 cycles to load the inputs an store the outputs. This explains why our optimized vector results was 72, since based on this 2 cycle requirement, our minimum cycles for our data size is 64 cycles. The remaining 6 cycles is loop preamble, loop postamble and function initailzation and cleanup overhead. + +#### Data routing efficiency +So we saw why load/sore bandwidth is the bottleneck in our 16-bit Vector Scalar Multiply example for the compute. But what about data movement via streams and DMAs. We need to process 1024 chunks of 16-bit data or 512 32-bit quantities. Because our stream switch move data in 32-bit granuliarity, we need 512 cycles in order to load in the data to L1 and to move the data out of L1 to L2/L3. + +#### Hardware efficiency summary + +| Component | # of Cycles | Efficiency | +|-----------|-------------|------------| +| MAC | 72 | 22% | +| Load/Store| 64 | 50% / 100% | +| DMA | 512 | 100% | + +Looking at this table, we quickly see that the data movement is the bottleneck. + +## Optimization Exercises - Part 1 +1. Rerun the final optimized code and take a look at the resulting waveform. + + + + Mouse over the blocks of PortRuning0 and PortRunning1, what is the measured number of cycles per chunk? This matches what we expected to see. But note how it's obvious from the waveform how dominant data movement is as compared to compute. + + +**TODO** - Looking at int32 version? matmul? + + +## Diving Deep - Examining the Microcode +Let's take a look again at the results of our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/). Let's also take go back one step comment out `chess_prepare_for_pipelining chess_loop_range(16, )` and rerun the compilation (`make clean; make trace`). + +At this point, we can actually take a look at the `microcode`. The `microcode` is the precise schedule of instructions that our AIE executes in order to run the kernel program. This microcode can usually be found under `build/core_0_2.elf.lst` where the two numbers for the core indicates its column and row position respectively. So if your design has multiple cores, then each core will have its own .lst file. If you were to open the file, you will see a lot of information. Comment lines will have a . in front of it. The other lines are the instructions and are structured as follows: -1. Now let's turn vectorization back on by changing `vectorized=True` and rerun our build (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? +Instruction Line Number ---- Encoded Instruction ---- 1 or more slots of ISA commands -## Multiplier Efficiency +| Example ISA commands | Description | +|----------------------|-------------| +| NOP .. | No op | +| JL #XXX | Jump and link to instruction line # | +| MOV r1, r2 | Move register values from r2 to r1 | +| LD .. | Scalra load | +| ST .. | Scalar store | +| VLDA | Vector load unit A, | +| VLDB | Vector load unit B, | +| VMUL .. | Vector mulitply | +| VMAC .. | Vector mutliple and accumulate | +| VST .. | Vector store | +| VSRS .. | Vector SRS | +| VSHUFFLE .. | Vector shuffle | -Let's take a closer look at hardware efficiency. In particular, we examine how often we are maximally utilizing all the multipliers in our fixed-point vector datapath. The AI Engine fixed-point vector datapath operates at 100% efficiency when we can schedule a vector MAC every clock cycle. The MAC itself operates at 100% efficiency if all the MAC units are being used. The overall MAC utilization efficiency then is a product of these two percentages. For example, if we have 1x vector MAC every 2 cycles, and we use 50% of our vector MACs each cycle, then 50% * 50% is a total mac efficiency of 25%. +Fully analzying and understanding this microcode is beyond the scope of this programming guide but we We will focus on key parts of this microcode, labled by 3 types of comments in particular, -The AIE fixed-point vector datapath is optimized for matrix multiplication, and as a result, has a post-addition block with a smaller number of output lanes. What this means is that element-wise MACs generally run less efficiently since the hardware does not have enough output lanes for all MACs. So for 16-bit x 16-bit, we can do 64x MACs but with 32 output lanes, element-wise multiply for 16-bit x 16-bit has a MAC utilization efficiency of 50%. +`.label vector_scalar_mul_aie` followed by `.function_start` - The start of the function we're interested in. The name after label is the function name but this might have additional characters if the function is generated from a template. -If we examine the matrix multiplication mode table in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__mmul.html), we see that for 16-bit x 16-bit matmul in AIE2 (aka AIE-ML), we support 4x4x4 mode which does 64 MACs each cycle. Another way to see the total number of MACs for different bit precisions is the `Table: Supported Precision Width of the Vector Data Path` in the [AM020 spec](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Functional-Overview). There, we again see 64 MACs for 16-bit x 16-bit. For 32-bit x 32-bit, we have 16 MACs per cycle. So element-wise multiply for 32-bit x 32-bit does in fact have a per cycle MAC utilization efficiency of 100% which is not the case for element-wie multiplies of smaller bit precisions. +`.label ZLS_...` - The start of a zero-overhead loop -Going back to our vector-scalar design, we are processing 4096 samples totak, but only 1024 samples every iteration of our kernel. From the previous exercises, you saw that the scalar implementation takes about ~10,000 cycles to process while the vector implementaion only takes ~600 cycles. This is an speedup factor of over **16X**! That's a signficant gain but we'd like to look more closely to see if we can squeeze out even more performance. +`.label ZLE_...` - The end of a zero-overhead loop. **NOTE** The line after this label is the last line within the loop, not just the lines strictly between `ZLS` and `ZLE`. In general, labels pertain the line after the label. -### Crunching the numbers -Looking at the optimal MAC utilziation for 32-bit x 32-bit, we expect 1024 cycles to actually only take 64 cycles (1024/ 16) if it were possible to do a vector MAC every cycle. This seemingly gives our vector implementation a total MAC utilization efficiency of ~11%. In a non-ideal kernel, we have cycle overheads in the way of loop preamble and postamble as well as general function overhead. It is also true that these overheads become a smaller percentage of the total compute time if we are process a larger set of data. But this static overhead does not fully explain the unexpectedly small MAC utilization efficiency we see at first glance. +Let's examine this more closely in our example. -### Data movement +## Optimization Exercises - Part 2 +1. Open `build/core_0_2.elf.lst` and take a look through the file. You'll see a lot of helpful comments but it may be a bit too much comments to be able to see patterns in the microcode clearly. Run a simple cleanup script from the vector_scalar_mul example directory -The other consideration when looking at vectorization and performance is data movement. The time to compute must be balanced with the time to move data so that neither becomes the bottleneck. Looking at our example once again, we are moving data via objectFifos through the stream switch. Each stream switch channel moves 32-bits of data every clock cycle. This means to move 1024 32-bit data, it would require 1024 cycles. This makes it seem like our kernel throughput should be 1024 cycles. + `../../utils/clean_microcode.sh build/core_0_2.elf.lst` -But in our example, we are actually ping-ponging our data movement so that we are moving the next set of 1024 words while the first set is being computed on. So we would expect the kernel to be able to compute the data in a fraction of the data movement time (though we are still limited to 1024 cycles throughput). The real reason our compute is larger than 64 cycles is because both sets of data in our objectFifo are in the same local memory bank and thus access conflicts are occuring, which increases our total compute time. Also, the actual inner loop microcode schedule from the compiler is closer to 80% efficient instead of 100%. All these factors then add up to a total compute cycle count that's larger than our back-of-the-envelope ideal number. + This will remove some of the extra comments. Open up the `core_0_2.elf.lst` file again and search for `.label vector_scalar_mul_aie`. Then scroll down until you see the first `.label ZLS ..` line. Count the number of lines until you reach the first `.label ZLE ..` line and add 1 to that total (since the line after ZLE is within the loop). How many lines are in this inner loop? -## Conclusions +1. Now look at each line (including the one after ZLE) and count how many lines contain a `VMUL` or `VMAC` in it? What number do you get? -Having walked through this example, we can see the importance of matching the algorithm to the hardware in order to achieve maximum utilization efficiency. This generally means matmul style ops gives us the best MAC efficiency, not only because it matches the built-in vector matmul in the fixed-point vector datapath, but also because matmul has higher data re-use which lowers the data movement component so that data movement time and compute time are more closely aligned. +1. The number you got gives us a rough idea of how optimized the innermost loop of our algorithm is. In this case, we have 1 VMAC out of 15 cycles or ~6% MAC utilization. If the inner loop take 15 cycles and we iterate 32 times, how many cycles should this version take and how close are we to the measured cycle count? ----- diff --git a/python/utils/README.md b/python/utils/README.md index 7ca2e20088..7771cc2c84 100644 --- a/python/utils/README.md +++ b/python/utils/README.md @@ -16,10 +16,10 @@ import aie.utils.trace as trace_utils ``` Thereafter, functions defined in the file can be called via `trace_utils.configure_simple_tracing_aie2(...)`. -- [Test utilities](#Test-utilities) ([test.py](./test.py)) -- [Trace utilities](#Trace-utilities-(trace.py)) ([trace.py](./trace.py)) -- [XRT utilities](#XRT-utilities) ([xrt.py](./xrt.py)) -- [Machine Learning (ML) utilities](#Machine-Langauge-(ML)-utilities-(ml.py)) ([ml.py](./ml.py)) +- [Test utilities](#test-utilites-testpy) ([test.py](./test.py)) +- [Trace utilities](#trace-utilites-tracepy) ([trace.py](./trace.py)) +- [XRT utilities](#xrt-utilites-xrtpy) ([xrt.py](./xrt.py)) +- [Machine Learning (ML) utilities](#machine-language-ml-utilites-mlpyss) ([ml.py](./ml.py)) ## Test utilites ([test.py](./test.py)) Test/ Host code utilities. @@ -147,6 +147,7 @@ There is an extensive lists of trace events but here, we will only describe a fe | Lock stall |0x1A| 26 | | Core Port Running 1 |0x4F| 79 | | Core Port Running 0 |0x4B| 75 | +* A more exhaustive list of events for core tile, core memory, memtile and shim tile can be found in [this header file](https://github.com/Xilinx/aie-rt/blob/main-aie/driver/src/events/xaie_events_aie.h). However, not all events are yet supported in `parse_eventIR.py` at this time. **NOTE**: The "Core Instruction - Event 0/1" are special intrinsics you can add to your kernel code to trigger an event during the running of your core program. Within the kernel code, they look like: ```c++ From 2cd429090f5c6a0b152e24b156f8aeea1c665d81 Mon Sep 17 00:00:00 2001 From: HashimSharifAMD <114758848+HashimSharifAMD@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:46:13 -0500 Subject: [PATCH 9/9] 2-D Array Transpose Using ObjectFifo (#1386) --- .../basic/dma_transpose/CMakeLists.txt | 75 ++++++ .../basic/dma_transpose/Makefile | 51 +++++ .../basic/dma_transpose/README.md | 25 ++ .../basic/dma_transpose/aie2.py | 66 ++++++ .../basic/dma_transpose/run.lit | 10 + .../basic/dma_transpose/test.cpp | 214 ++++++++++++++++++ .../basic/vector_exp/README.md | 8 +- .../basic/vector_reduce_add/README.md | 2 +- .../basic/vector_reduce_max/README.md | 2 +- .../basic/vector_reduce_min/README.md | 2 +- .../basic/vector_scalar_add/README.md | 2 +- .../basic/vector_scalar_mul/README.md | 2 +- 12 files changed, 453 insertions(+), 6 deletions(-) create mode 100644 programming_examples/basic/dma_transpose/CMakeLists.txt create mode 100644 programming_examples/basic/dma_transpose/Makefile create mode 100644 programming_examples/basic/dma_transpose/README.md create mode 100755 programming_examples/basic/dma_transpose/aie2.py create mode 100644 programming_examples/basic/dma_transpose/run.lit create mode 100644 programming_examples/basic/dma_transpose/test.cpp diff --git a/programming_examples/basic/dma_transpose/CMakeLists.txt b/programming_examples/basic/dma_transpose/CMakeLists.txt new file mode 100644 index 0000000000..3986c4a075 --- /dev/null +++ b/programming_examples/basic/dma_transpose/CMakeLists.txt @@ -0,0 +1,75 @@ +# This file is licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +# (c) Copyright 2023 Advanced Micro Devices, Inc. + +# parameters +# -DBOOST_ROOT: Path to Boost install +# -DXRT_INC_DIR: Full path to src/runtime_src/core/include in XRT cloned repo +# -DXRT_LIB_DIR: Path to xrt_coreutil.lib +# -DTARGET_NAME: Target name to be built + +# cmake needs this line +cmake_minimum_required(VERSION 3.1) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED YES) + +find_program(WSL NAMES powershell.exe) + +if (NOT WSL) + set(CMAKE_C_COMPILER gcc-13) + set(CMAKE_CXX_COMPILER g++-13) + set(BOOST_ROOT /usr/include/boost CACHE STRING "Path to Boost install") + set(XRT_INC_DIR /opt/xilinx/xrt/include CACHE STRING "Path to XRT cloned repo") + set(XRT_LIB_DIR /opt/xilinx/xrt/lib CACHE STRING "Path to xrt_coreutil.lib") +else() + set(BOOST_ROOT C:/Technical/thirdParty/boost_1_83_0 CACHE STRING "Path to Boost install") + set(XRT_INC_DIR C:/Technical/XRT/src/runtime_src/core/include CACHE STRING "Path to XRT cloned repo") + set(XRT_LIB_DIR C:/Technical/xrtIPUfromDLL CACHE STRING "Path to xrt_coreutil.lib") +endif() + +set(TARGET_NAME test CACHE STRING "Target to be built") + +SET (ProjectName proj_${TARGET_NAME}) +SET (currentTarget ${TARGET_NAME}) + +if ( WSL ) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}) +endif () + +project(${ProjectName}) + +# Find packages +find_package(Boost REQUIRED) + +add_executable(${currentTarget} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../runtime_lib/test_lib/test_utils.cpp + test.cpp +) + +target_compile_definitions(${currentTarget} PUBLIC DISABLE_ABI_CHECK=1) + +target_include_directories (${currentTarget} PUBLIC + ${XRT_INC_DIR} + ${Boost_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../runtime_lib/test_lib +) + +target_link_directories(${currentTarget} PUBLIC + ${XRT_LIB_DIR} + ${Boost_LIBRARY_DIRS} +) + +if (NOT WSL) + target_link_libraries(${currentTarget} PUBLIC + xrt_coreutil + boost_program_options + boost_filesystem + ) +else() + target_link_libraries(${currentTarget} PUBLIC + xrt_coreutil + ) +endif() diff --git a/programming_examples/basic/dma_transpose/Makefile b/programming_examples/basic/dma_transpose/Makefile new file mode 100644 index 0000000000..58f3e707c0 --- /dev/null +++ b/programming_examples/basic/dma_transpose/Makefile @@ -0,0 +1,51 @@ +##===- Makefile -----------------------------------------------------------===## +# +# This file licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +##===----------------------------------------------------------------------===## + +include ../../makefile-common + +SHELL := /bin/bash + +all: build/final.xclbin build/insts.txt + +targetname = dmaTranspose +M ?= 64 +K ?= 32 + +build/aie.mlir: aie2.py + mkdir -p ${@D} + python3 $< ${M} ${K} > $@ + +.PHONY: inst/insts.txt +inst/insts.txt: aie2.py + rm -rf inst + mkdir -p inst + python3 $< ${LENGTH} > inst/aie.mlir + pushd inst && aiecc.py --aie-only-generate-ipu --ipu-insts-name=insts.txt aie.mlir && popd + ${powershell} ./build/${targetname}.exe -x build/final.xclbin -i inst/insts.txt -k MLIR_AIE -l ${LENGTH} + +build/final.xclbin: build/aie.mlir + mkdir -p ${@D} + cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ + --aie-generate-ipu --ipu-insts-name=insts.txt $(<:%=../%) + +${targetname}.exe: test.cpp + rm -rf _build + mkdir -p _build + cd _build && ${powershell} cmake .. -DTARGET_NAME=${targetname} + cd _build && ${powershell} cmake --build . --config Release +ifeq "${powershell}" "powershell.exe" + cp _build/${targetname}.exe $@ +else + cp _build/${targetname} $@ +endif + +run: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE --M ${M} --K ${K} + +clean: + rm -rf build _build inst ${targetname}.exe diff --git a/programming_examples/basic/dma_transpose/README.md b/programming_examples/basic/dma_transpose/README.md new file mode 100644 index 0000000000..32dd7ac3d3 --- /dev/null +++ b/programming_examples/basic/dma_transpose/README.md @@ -0,0 +1,25 @@ + + +# 2-D Array Transpose using AIE DMAs + +This reference design can be run on a Ryzen™ AI NPU. + +In the [design](./aie2.py) a 2-D array in row-major layout is read from external memory to `ComputeTile2` with a transposed layout, +by using an implicit copy via the compute tile's Data Movement Accelerator (DMA). The data is read from and written to external memory through Shim tile (`col`, 0). + +The implicit copy is performed using the `object_fifo_link` operation that specifies how input data arriving via `of_in` should be sent further via `of_out` by specifically leveraging the compute tile's DMA. This operation and its functionality are described in more depth in [Section-2b](../../../programming_guide/section-2/section-2b/README.md/#object-fifo-link) of the programming guide. + + +To compile and run the design for NPU: +``` +make +make run +``` \ No newline at end of file diff --git a/programming_examples/basic/dma_transpose/aie2.py b/programming_examples/basic/dma_transpose/aie2.py new file mode 100755 index 0000000000..ee16ce6f62 --- /dev/null +++ b/programming_examples/basic/dma_transpose/aie2.py @@ -0,0 +1,66 @@ +# +# This file is licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +# (c) Copyright 2023 AMD Inc. + +import sys + +from aie.dialects.aie import * +from aie.dialects.aiex import * +from aie.dialects.scf import * +from aie.extras.dialects.ext import memref, arith +from aie.extras.context import mlir_mod_ctx + +N = 4096 +M = 64 +K = 64 + +if len(sys.argv) == 3: + M = int(sys.argv[1]) + K = int(sys.argv[2]) + N = M * K + + +def my_passthrough(): + with mlir_mod_ctx() as ctx: + + @device(AIEDevice.ipu) + def device_body(): + memRef_ty = T.memref(M, K, T.i32()) + + # Tile declarations + ShimTile = tile(0, 0) + ComputeTile2 = tile(0, 2) + + # AIE-array data movement with object fifos + of_in = object_fifo("in", ShimTile, ComputeTile2, 2, memRef_ty) + of_out = object_fifo("out", ComputeTile2, ShimTile, 2, memRef_ty) + object_fifo_link(of_in, of_out) + + # Set up compute tiles + + # Compute tile 2 + @core(ComputeTile2) + def core_body(): + for _ in for_(sys.maxsize): + yield_([]) + + # To/from AIE-array data movement + tensor_ty = T.memref(N, T.i32()) + + @FuncOp.from_py_func(tensor_ty, tensor_ty, tensor_ty) + def sequence(A, B, C): + ipu_dma_memcpy_nd(metadata="out", bd_id=0, mem=C, sizes=[1, 1, 1, N]) + # The strides below are configured to read across all rows in the same column + # Stride of K in dim/wrap 2 skips an entire row to read a full column + ipu_dma_memcpy_nd( + metadata="in", bd_id=1, mem=A, sizes=[1, K, M, 1], strides=[1, 1, K] + ) + ipu_sync(column=0, row=0, direction=0, channel=0) + + print(ctx.module) + + +my_passthrough() diff --git a/programming_examples/basic/dma_transpose/run.lit b/programming_examples/basic/dma_transpose/run.lit new file mode 100644 index 0000000000..e86aece967 --- /dev/null +++ b/programming_examples/basic/dma_transpose/run.lit @@ -0,0 +1,10 @@ +// (c) Copyright 2023 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// REQUIRES: ryzen_ai, chess +// +// RUN: %python %S/aie2.py 64 32 > ./aie.mlir +// RUN: %python aiecc.py --aie-generate-cdo --aie-generate-ipu --no-compile-host --xclbin-name=aie.xclbin --ipu-insts-name=insts.txt ./aie.mlir +// RUN: clang %S/test.cpp -o test.exe -std=c++11 -Wall %xrt_flags -lrt -lstdc++ -lboost_program_options -lboost_filesystem +// RUN: %run_on_ipu ./test.exe -x aie.xclbin -k MLIR_AIE -i insts.txt --M 64 --K 32 | FileCheck %s +// CHECK: PASS! diff --git a/programming_examples/basic/dma_transpose/test.cpp b/programming_examples/basic/dma_transpose/test.cpp new file mode 100644 index 0000000000..fa9a918669 --- /dev/null +++ b/programming_examples/basic/dma_transpose/test.cpp @@ -0,0 +1,214 @@ +//===- test.cpp -------------------------------------------000---*- C++ -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2023, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xrt/xrt_bo.h" +#include "xrt/xrt_device.h" +#include "xrt/xrt_kernel.h" + +namespace po = boost::program_options; + +void check_arg_file_exists(po::variables_map &vm_in, std::string name) { + if (!vm_in.count(name)) { + throw std::runtime_error("Error: no " + name + " file was provided\n"); + } else { + std::ifstream test(vm_in[name].as()); + if (!test) { + throw std::runtime_error("The " + name + " file " + + vm_in[name].as() + + " does not exist.\n"); + } + } +} + +std::vector load_instr_sequence(std::string instr_path) { + std::ifstream instr_file(instr_path); + std::string line; + std::vector instr_v; + while (std::getline(instr_file, line)) { + std::istringstream iss(line); + uint32_t a; + if (!(iss >> std::hex >> a)) { + throw std::runtime_error("Unable to parse instruction file\n"); + } + instr_v.push_back(a); + } + return instr_v; +} + +int main(int argc, const char *argv[]) { + // Program arguments parsing + po::options_description desc("Allowed options"); + + desc.add_options()("help,h", "produce help message")( + "xclbin,x", po::value()->required(), + "the input xclbin path")( + "kernel,k", po::value()->required(), + "the kernel name in the XCLBIN (for instance PP_PRE_FD)")( + "verbosity,v", po::value()->default_value(0), + "the verbosity of the output")( + "instr,i", po::value()->required(), + "path of file containing userspace instructions to be sent to the LX6")( + "M", po::value()->default_value(64), + "M, number of rows in the input matrix")( + "K", po::value()->default_value(64), + "K, number of columns in the input matrix"); + + po::variables_map vm; + + try { + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << desc << std::endl; + return 1; + } + } catch (const std::exception &ex) { + std::cerr << ex.what() << "\n\n"; + std::cerr << "Usage:\n" << desc << std::endl; + return 1; + } + + check_arg_file_exists(vm, "xclbin"); + check_arg_file_exists(vm, "instr"); + + std::vector instr_v = + load_instr_sequence(vm["instr"].as()); + + int verbosity = vm["verbosity"].as(); + if (verbosity >= 1) + std::cout << "Sequence instr count: " << instr_v.size() << std::endl; + + uint32_t M = vm["M"].as(); + uint32_t K = vm["K"].as(); + uint32_t N = M * K; + + if ((N % 1024)) { + std::cerr + << "Length (M * K) must be a multiple of 1024. Change M and K inputs" + << std::endl; + return 1; + } + + // Start the XRT test code + // Get a device handle + unsigned int device_index = 0; + auto device = xrt::device(device_index); + + // Load the xclbin + if (verbosity >= 1) + std::cout << "Loading xclbin: " << vm["xclbin"].as() + << std::endl; + auto xclbin = xrt::xclbin(vm["xclbin"].as()); + + if (verbosity >= 1) + std::cout << "Kernel opcode: " << vm["kernel"].as() + << std::endl; + std::string Node = vm["kernel"].as(); + + // Get the kernel from the xclbin + auto xkernels = xclbin.get_kernels(); + auto xkernel = *std::find_if(xkernels.begin(), xkernels.end(), + [Node](xrt::xclbin::kernel &k) { + auto name = k.get_name(); + std::cout << "Name: " << name << std::endl; + return name.rfind(Node, 0) == 0; + }); + auto kernelName = xkernel.get_name(); + + if (verbosity >= 1) + std::cout << "Registering xclbin: " << vm["xclbin"].as() + << "\n"; + + device.register_xclbin(xclbin); + + // get a hardware context + if (verbosity >= 1) + std::cout << "Getting hardware context." << std::endl; + xrt::hw_context context(device, xclbin.get_uuid()); + + // get a kernel handle + if (verbosity >= 1) + std::cout << "Getting handle to kernel:" << kernelName << std::endl; + auto kernel = xrt::kernel(context, kernelName); + + auto bo_instr = xrt::bo(device, instr_v.size() * sizeof(int), + XCL_BO_FLAGS_CACHEABLE, kernel.group_id(0)); + auto bo_inA = xrt::bo(device, N * sizeof(int32_t), XRT_BO_FLAGS_HOST_ONLY, + kernel.group_id(2)); + auto bo_inB = xrt::bo(device, N * sizeof(int32_t), XRT_BO_FLAGS_HOST_ONLY, + kernel.group_id(3)); + auto bo_out = xrt::bo(device, N * sizeof(int32_t), XRT_BO_FLAGS_HOST_ONLY, + kernel.group_id(4)); + + if (verbosity >= 1) + std::cout << "Writing data into buffer objects." << std::endl; + + int32_t *bufInA = bo_inA.map(); + std::vector srcVecA; + for (int i = 0; i < N; i++) + srcVecA.push_back(i + 1); + memcpy(bufInA, srcVecA.data(), (srcVecA.size() * sizeof(uint32_t))); + + void *bufInstr = bo_instr.map(); + memcpy(bufInstr, instr_v.data(), instr_v.size() * sizeof(int)); + + bo_instr.sync(XCL_BO_SYNC_BO_TO_DEVICE); + bo_inA.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + if (verbosity >= 1) + std::cout << "Running Kernel." << std::endl; + auto run = kernel(bo_instr, instr_v.size(), bo_inA, bo_inB, bo_out); + run.wait(); + + bo_out.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + uint32_t *bufOut = bo_out.map(); + int errors = 0; + + std::vector refVecA(N); + + // Doing a transpose on the source vector to produce a ref vector + for (uint32_t i = 0; i < M; i++) { + for (uint32_t j = 0; j < K; j++) { + uint32_t src_index = i * K + j; + uint32_t dst_index = j * M + i; + refVecA[dst_index] = srcVecA[src_index]; + } + } + + for (uint32_t i = 0; i < N; i++) { + uint32_t ref = refVecA[i]; + if (*(bufOut + i) != ref) { + std::cout << "ref = " << ref << " result = " << *(bufOut + i) << "\n"; + errors++; + } + } + + if (!errors) { + std::cout << std::endl << "PASS!" << std::endl << std::endl; + return 0; + } else { + std::cout << std::endl + << errors << " mismatches." << std::endl + << std::endl; + std::cout << std::endl << "fail." << std::endl << std::endl; + return 1; + } +} diff --git a/programming_examples/basic/vector_exp/README.md b/programming_examples/basic/vector_exp/README.md index 8ab0602545..7b6fe0eb23 100644 --- a/programming_examples/basic/vector_exp/README.md +++ b/programming_examples/basic/vector_exp/README.md @@ -30,12 +30,18 @@ The design also uses a single file from the AIE runtime, in order to initialize ### C++ Testbench -To compile the design and C++ testbench: +To compile the design: ``` make ``` +To compile the C++ testbench: + +``` +make testExp.exe +``` + To run the design: ``` diff --git a/programming_examples/basic/vector_reduce_add/README.md b/programming_examples/basic/vector_reduce_add/README.md index 4e53dce2cf..7548165a1a 100644 --- a/programming_examples/basic/vector_reduce_add/README.md +++ b/programming_examples/basic/vector_reduce_add/README.md @@ -32,7 +32,7 @@ To compile the design and C++ testbench: ``` make -make build/reduce_add.exe +make reduce_add.exe ``` To run the design: diff --git a/programming_examples/basic/vector_reduce_max/README.md b/programming_examples/basic/vector_reduce_max/README.md index 6bfa382fb4..ac2756f2dc 100644 --- a/programming_examples/basic/vector_reduce_max/README.md +++ b/programming_examples/basic/vector_reduce_max/README.md @@ -32,7 +32,7 @@ To compile the design and C++ testbench: ``` make -make build/reduce_max.exe +make reduce_max.exe ``` To run the design: diff --git a/programming_examples/basic/vector_reduce_min/README.md b/programming_examples/basic/vector_reduce_min/README.md index 1d5e9677d1..feb6328142 100644 --- a/programming_examples/basic/vector_reduce_min/README.md +++ b/programming_examples/basic/vector_reduce_min/README.md @@ -32,7 +32,7 @@ To compile the design and C++ testbench: ``` make -make build/reduce_min.exe +make reduce_min.exe ``` To run the design: diff --git a/programming_examples/basic/vector_scalar_add/README.md b/programming_examples/basic/vector_scalar_add/README.md index 3cf2a7cfcd..b1cb33333f 100644 --- a/programming_examples/basic/vector_scalar_add/README.md +++ b/programming_examples/basic/vector_scalar_add/README.md @@ -30,7 +30,7 @@ To compile the design and C++ testbench: ``` make -make build/vectorScalarAdd.exe +make vectorScalarAdd.exe ``` To run the design: diff --git a/programming_examples/basic/vector_scalar_mul/README.md b/programming_examples/basic/vector_scalar_mul/README.md index b1e78561d4..2ee29e2e19 100644 --- a/programming_examples/basic/vector_scalar_mul/README.md +++ b/programming_examples/basic/vector_scalar_mul/README.md @@ -78,7 +78,7 @@ To compile the design and C++ testbench: ``` make -make build/vectorScalar.exe +make vectorScalar.exe ``` To run the design: