€•"ûŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/accel/amdxdna/amdnpu”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ%SPDX-License-Identifier: GPL-2.0-only”h]”hŒ%SPDX-License-Identifier: GPL-2.0-only”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒB/var/lib/git/docbuild/linux/Documentation/accel/amdxdna/amdnpu.rst”h´Kubh¶)�”}”(hŒ4This data file has been placed in the public domain.”h]”hŒ4This data file has been placed in the public domain.”…”�”}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³Œo/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt”h´Kubh¶)�”}”(hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”h]”hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”…”�”}”hh×sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÖh´KubhŒsubstitution_definition”“”)�”}”(hŒ*.. |amp| unicode:: U+00026 .. AMPERSAND”h]”hŒ&”…”�”}”hhçsbah}”(h]”h ]”h"]”Œamp”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ+.. |apos| unicode:: U+00027 .. APOSTROPHE”h]”hŒ'”…”�”}”hhösbah}”(h]”h ]”h"]”Œapos”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ).. |ast| unicode:: U+0002A .. ASTERISK”h]”hŒ*”…”�”}”hjsbah}”(h]”h ]”h"]”Œast”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ+.. |brvbar| unicode:: U+000A6 .. BROKEN BAR”h]”hŒ¦”…”�”}”hjsbah}”(h]”h ]”h"]”Œbrvbar”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUS”h]”hŒ\”…”�”}”hj#sbah}”(h]”h ]”h"]”Œbsol”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ*.. |cent| unicode:: U+000A2 .. CENT SIGN”h]”hŒ¢”…”�”}”hj2sbah}”(h]”h ]”h"]”Œcent”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |colon| unicode:: U+0003A .. COLON”h]”hŒ:”…”�”}”hjAsbah}”(h]”h ]”h"]”Œcolon”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ&.. |comma| unicode:: U+0002C .. COMMA”h]”hŒ,”…”�”}”hjPsbah}”(h]”h ]”h"]”Œcomma”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |commat| unicode:: U+00040 .. COMMERCIAL AT”h]”hŒ@”…”�”}”hj_sbah}”(h]”h ]”h"]”Œcommat”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN”h]”hŒ©”…”�”}”hjnsbah}”(h]”h ]”h"]”Œcopy”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |curren| unicode:: U+000A4 .. CURRENCY SIGN”h]”hŒ¤”…”�”}”hj}sbah}”(h]”h ]”h"]”Œcurren”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROW”h]”hŒ↓”…”�”}”hjŒsbah}”(h]”h ]”h"]”Œdarr”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |deg| unicode:: U+000B0 .. DEGREE SIGN”h]”hŒ°”…”�”}”hj›sbah}”(h]”h ]”h"]”Œdeg”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ... |divide| unicode:: U+000F7 .. DIVISION SIGN”h]”hŒ÷”…”�”}”hjªsbah}”(h]”h ]”h"]”Œdivide”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |dollar| unicode:: U+00024 .. DOLLAR SIGN”h]”hŒ$”…”�”}”hj¹sbah}”(h]”h ]”h"]”Œdollar”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ,.. |equals| unicode:: U+0003D .. EQUALS SIGN”h]”hŒ=”…”�”}”hjÈsbah}”(h]”h ]”h"]”Œequals”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |excl| unicode:: U+00021 .. EXCLAMATION MARK”h]”hŒ!”…”�”}”hj×sbah}”(h]”h ]”h"]”Œexcl”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hjæsbah}”(h]”h ]”h"]”Œfrac12”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTER”h]”hŒ¼”…”�”}”hjõsbah}”(h]”h ]”h"]”Œfrac14”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTH”h]”hŒâ…›”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac18”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERS”h]”hŒ¾”…”�”}”hjsbah}”(h]”h ]”h"]”Œfrac34”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHS”h]”hŒâ…œ”…”�”}”hj"sbah}”(h]”h ]”h"]”Œfrac38”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHS”h]”hŒâ…�”…”�”}”hj1sbah}”(h]”h ]”h"]”Œfrac58”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHS”h]”hŒâ…ž”…”�”}”hj@sbah}”(h]”h ]”h"]”Œfrac78”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGN”h]”hŒ>”…”�”}”hjOsbah}”(h]”h ]”h"]”Œgt”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…”�”}”hj^sbah}”(h]”h ]”h"]”Œhalf”ah$]”h&]”uh1håh³hÖh´K hhh²hubhæ)�”}”(hŒ/.. |horbar| unicode:: U+02015 .. HORIZONTAL BAR”h]”hŒ―”…”�”}”hjmsbah}”(h]”h ]”h"]”Œhorbar”ah$]”h&]”uh1håh³hÖh´K!hhh²hubhæ)�”}”(hŒ'.. |hyphen| unicode:: U+02010 .. HYPHEN”h]”hŒâ€�”…”�”}”hj|sbah}”(h]”h ]”h"]”Œhyphen”ah$]”h&]”uh1håh³hÖh´K"hhh²hubhæ)�”}”(hŒ:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARK”h]”hŒ¡”…”�”}”hj‹sbah}”(h]”h ]”h"]”Œiexcl”ah$]”h&]”uh1håh³hÖh´K#hhh²hubhæ)�”}”(hŒ7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARK”h]”hŒ¿”…”�”}”hjšsbah}”(h]”h ]”h"]”Œiquest”ah$]”h&]”uh1håh³hÖh´K$hhh²hubhæ)�”}”(hŒJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARK”h]”hŒ«”…”�”}”hj©sbah}”(h]”h ]”h"]”Œlaquo”ah$]”h&]”uh1håh³hÖh´K%hhh²hubhæ)�”}”(hŒ0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROW”h]”hŒâ†�”…”�”}”hj¸sbah}”(h]”h ]”h"]”Œlarr”ah$]”h&]”uh1håh³hÖh´K&hhh²hubhæ)�”}”(hŒ3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKET”h]”hŒ{”…”�”}”hjÇsbah}”(h]”h ]”h"]”Œlcub”ah$]”h&]”uh1håh³hÖh´K'hhh²hubhæ)�”}”(hŒ;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARK”h]”hŒ“”…”�”}”hjÖsbah}”(h]”h ]”h"]”Œldquo”ah$]”h&]”uh1håh³hÖh´K(hhh²hubhæ)�”}”(hŒ).. |lowbar| unicode:: U+0005F .. LOW LINE”h]”hŒ_”…”�”}”hjåsbah}”(h]”h ]”h"]”Œlowbar”ah$]”h&]”uh1håh³hÖh´K)hhh²hubhæ)�”}”(hŒ1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESIS”h]”hŒ(”…”�”}”hjôsbah}”(h]”h ]”h"]”Œlpar”ah$]”h&]”uh1håh³hÖh´K*hhh²hubhæ)�”}”(hŒ4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKET”h]”hŒ[”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsqb”ah$]”h&]”uh1håh³hÖh´K+hhh²hubhæ)�”}”(hŒ;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARK”h]”hŒ‘”…”�”}”hjsbah}”(h]”h ]”h"]”Œlsquo”ah$]”h&]”uh1håh³hÖh´K,hhh²hubhæ)�”}”(hŒ/.. |lt| unicode:: U+0003C .. LESS-THAN SIGN”h]”hŒ<”…”�”}”hj!sbah}”(h]”h ]”h"]”Œlt”ah$]”h&]”uh1håh³hÖh´K-hhh²hubhæ)�”}”(hŒ+.. |micro| unicode:: U+000B5 .. MICRO SIGN”h]”hŒµ”…”�”}”hj0sbah}”(h]”h ]”h"]”Œmicro”ah$]”h&]”uh1håh³hÖh´K.hhh²hubhæ)�”}”(hŒ+.. |middot| unicode:: U+000B7 .. MIDDLE DOT”h]”hŒ·”…”�”}”hj?sbah}”(h]”h ]”h"]”Œmiddot”ah$]”h&]”uh1håh³hÖh´K/hhh²hubhæ)�”}”(hŒ/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACE”h]”hŒ ”…”�”}”hjNsbah}”(h]”h ]”h"]”Œnbsp”ah$]”h&]”uh1håh³hÖh´K0hhh²hubhæ)�”}”(hŒ).. |not| unicode:: U+000AC .. NOT SIGN”h]”hŒ¬”…”�”}”hj]sbah}”(h]”h ]”h"]”Œnot”ah$]”h&]”uh1håh³hÖh´K1hhh²hubhæ)�”}”(hŒ,.. |num| unicode:: U+00023 .. NUMBER SIGN”h]”hŒ#”…”�”}”hjlsbah}”(h]”h ]”h"]”Œnum”ah$]”h&]”uh1håh³hÖh´K2hhh²hubhæ)�”}”(hŒ).. |ohm| unicode:: U+02126 .. OHM SIGN”h]”hŒΩ”…”�”}”hj{sbah}”(h]”h ]”h"]”Œohm”ah$]”h&]”uh1håh³hÖh´K3hhh²hubhæ)�”}”(hŒ;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATOR”h]”hŒª”…”�”}”hjŠsbah}”(h]”h ]”h"]”Œordf”ah$]”h&]”uh1håh³hÖh´K4hhh²hubhæ)�”}”(hŒ<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATOR”h]”hŒº”…”�”}”hj™sbah}”(h]”h ]”h"]”Œordm”ah$]”h&]”uh1håh³hÖh´K5hhh²hubhæ)�”}”(hŒ-.. |para| unicode:: U+000B6 .. PILCROW SIGN”h]”hŒ¶”…”�”}”hj¨sbah}”(h]”h ]”h"]”Œpara”ah$]”h&]”uh1håh³hÖh´K6hhh²hubhæ)�”}”(hŒ-.. |percnt| unicode:: U+00025 .. PERCENT SIGN”h]”hŒ%”…”�”}”hj·sbah}”(h]”h ]”h"]”Œpercnt”ah$]”h&]”uh1håh³hÖh´K7hhh²hubhæ)�”}”(hŒ*.. |period| unicode:: U+0002E .. FULL STOP”h]”hŒ.”…”�”}”hjÆsbah}”(h]”h ]”h"]”Œperiod”ah$]”h&]”uh1håh³hÖh´K8hhh²hubhæ)�”}”(hŒ*.. |plus| unicode:: U+0002B .. PLUS SIGN”h]”hŒ+”…”�”}”hjÕsbah}”(h]”h ]”h"]”Œplus”ah$]”h&]”uh1håh³hÖh´K9hhh²hubhæ)�”}”(hŒ0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGN”h]”hŒ±”…”�”}”hjäsbah}”(h]”h ]”h"]”Œplusmn”ah$]”h&]”uh1håh³hÖh´K:hhh²hubhæ)�”}”(hŒ+.. |pound| unicode:: U+000A3 .. POUND SIGN”h]”hŒ£”…”�”}”hjósbah}”(h]”h ]”h"]”Œpound”ah$]”h&]”uh1håh³hÖh´K;hhh²hubhæ)�”}”(hŒ... |quest| unicode:: U+0003F .. QUESTION MARK”h]”hŒ?”…”�”}”hjsbah}”(h]”h ]”h"]”Œquest”ah$]”h&]”uh1håh³hÖh´Khhh²hubhæ)�”}”(hŒ1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROW”h]”hŒ→”…”�”}”hj/sbah}”(h]”h ]”h"]”Œrarr”ah$]”h&]”uh1håh³hÖh´K?hhh²hubhæ)�”}”(hŒ4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKET”h]”hŒ}”…”�”}”hj>sbah}”(h]”h ]”h"]”Œrcub”ah$]”h&]”uh1håh³hÖh´K@hhh²hubhæ)�”}”(hŒ<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARK”h]”hŒâ€�”…”�”}”hjMsbah}”(h]”h ]”h"]”Œrdquo”ah$]”h&]”uh1håh³hÖh´KAhhh²hubhæ)�”}”(hŒ0.. |reg| unicode:: U+000AE .. REGISTERED SIGN”h]”hŒ®”…”�”}”hj\sbah}”(h]”h ]”h"]”Œreg”ah$]”h&]”uh1håh³hÖh´KBhhh²hubhæ)�”}”(hŒ2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESIS”h]”hŒ)”…”�”}”hjksbah}”(h]”h ]”h"]”Œrpar”ah$]”h&]”uh1håh³hÖh´KChhh²hubhæ)�”}”(hŒ5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKET”h]”hŒ]”…”�”}”hjzsbah}”(h]”h ]”h"]”Œrsqb”ah$]”h&]”uh1håh³hÖh´KDhhh²hubhæ)�”}”(hŒ<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARK”h]”hŒ’”…”�”}”hj‰sbah}”(h]”h ]”h"]”Œrsquo”ah$]”h&]”uh1håh³hÖh´KEhhh²hubhæ)�”}”(hŒ-.. |sect| unicode:: U+000A7 .. SECTION SIGN”h]”hŒ§”…”�”}”hj˜sbah}”(h]”h ]”h"]”Œsect”ah$]”h&]”uh1håh³hÖh´KFhhh²hubhæ)�”}”(hŒ*.. |semi| unicode:: U+0003B .. SEMICOLON”h]”hŒ;”…”�”}”hj§sbah}”(h]”h ]”h"]”Œsemi”ah$]”h&]”uh1håh³hÖh´KGhhh²hubhæ)�”}”(hŒ,.. |shy| unicode:: U+000AD .. SOFT HYPHEN”h]”hŒ­”…”�”}”hj¶sbah}”(h]”h ]”h"]”Œshy”ah$]”h&]”uh1håh³hÖh´KHhhh²hubhæ)�”}”(hŒ(.. |sol| unicode:: U+0002F .. SOLIDUS”h]”hŒ/”…”�”}”hjÅsbah}”(h]”h ]”h"]”Œsol”ah$]”h&]”uh1håh³hÖh´KIhhh²hubhæ)�”}”(hŒ,.. |sung| unicode:: U+0266A .. EIGHTH NOTE”h]”hŒ♪”…”�”}”hjÔsbah}”(h]”h ]”h"]”Œsung”ah$]”h&]”uh1håh³hÖh´KJhhh²hubhæ)�”}”(hŒ0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONE”h]”hŒ¹”…”�”}”hjãsbah}”(h]”h ]”h"]”Œsup1”ah$]”h&]”uh1håh³hÖh´KKhhh²hubhæ)�”}”(hŒ0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWO”h]”hŒ²”…”�”}”hjòsbah}”(h]”h ]”h"]”Œsup2”ah$]”h&]”uh1håh³hÖh´KLhhh²hubhæ)�”}”(hŒ2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREE”h]”hŒ³”…”�”}”hjsbah}”(h]”h ]”h"]”Œsup3”ah$]”h&]”uh1håh³hÖh´KMhhh²hubhæ)�”}”(hŒ4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGN”h]”hŒ×”…”�”}”hjsbah}”(h]”h ]”h"]”Œtimes”ah$]”h&]”uh1håh³hÖh´KNhhh²hubhæ)�”}”(hŒ0.. |trade| unicode:: U+02122 .. TRADE MARK SIGN”h]”hŒâ„¢”…”�”}”hjsbah}”(h]”h ]”h"]”Œtrade”ah$]”h&]”uh1håh³hÖh´KOhhh²hubhæ)�”}”(hŒ... |uarr| unicode:: U+02191 .. UPWARDS ARROW”h]”hŒ↑”…”�”}”hj.sbah}”(h]”h ]”h"]”Œuarr”ah$]”h&]”uh1håh³hÖh´KPhhh²hubhæ)�”}”(hŒ... |verbar| unicode:: U+0007C .. VERTICAL LINE”h]”hŒ|”…”�”}”hj=sbah}”(h]”h ]”h"]”Œverbar”ah$]”h&]”uh1håh³hÖh´KQhhh²hubhæ)�”}”(hŒ*.. |yen| unicode:: U+000A5 .. YEN SIGN ”h]”hŒÂ¥”…”�”}”hjLsbah}”(h]”h ]”h"]”Œyen”ah$]”h&]”uh1håh³hÖh´KRhhh²hubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒAMD NPU”h]”hŒAMD NPU”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj]h²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”(hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒ Copyright”h]”hŒ Copyright”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjwh³hÇh´KubhŒ field_body”“”)�”}”(hŒ(|copy| 2024 Advanced Micro Devices, Inc.”h]”hŒ paragraph”“”)�”}”(hjŽh]”(hŒ©”…”�”}”(hj’h²hh³Nh´NubhŒ" 2024 Advanced Micro Devices, Inc.”…”�”}”(hj’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³hÇh´K hjrh²hubjv)�”}”(hhh]”(j{)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¯h³hÇh´Kubj‹)�”}”(hŒ$Sonal Santan ”h]”j‘)�”}”(hŒ#Sonal Santan ”h]”(hŒSonal Santan <”…”�”}”(hjÄh²hh³Nh´NubhŒ reference”“”)�”}”(hŒsonal.santan@amd.com”h]”hŒsonal.santan@amd.com”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:sonal.santan@amd.com”uh1jÌhjÄubhŒ>”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³hÇh´K hjrh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj]h²hh³hÇh´K ubj\)�”}”(hhh]”(ja)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjúh²hh³hÇh´K ubj‘)�”}”(hXAMD NPU (Neural Processing Unit) is a multi-user AI inference accelerator integrated into AMD client APU. NPU enables efficient execution of Machine Learning applications like CNN, LLM, etc. NPU is based on `AMD XDNA Architecture`_. NPU is managed by **amdxdna** driver.”h]”(hŒÏAMD NPU (Neural Processing Unit) is a multi-user AI inference accelerator integrated into AMD client APU. NPU enables efficient execution of Machine Learning applications like CNN, LLM, etc. NPU is based on ”…”�”}”(hj h²hh³Nh´NubjÍ)�”}”(hŒ`AMD XDNA Architecture`_”h]”hŒAMD XDNA Architecture”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAMD XDNA Architecture”Œrefuri”Œ-https://www.amd.com/en/technologies/xdna.html”uh1jÌhj Œresolved”KubhŒ. NPU is managed by ”…”�”}”(hj h²hh³Nh´NubhŒstrong”“”)�”}”(hŒ **amdxdna**”h]”hŒamdxdna”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj ubhŒ driver.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khjúh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1j[hj]h²hh³hÇh´K ubj\)�”}”(hhh]”(ja)�”}”(hŒHardware Description”h]”hŒHardware Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjLh²hh³hÇh´Kubj‘)�”}”(hŒ6AMD NPU consists of the following hardware components:”h]”hŒ6AMD NPU consists of the following hardware components:”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KhjLh²hubj\)�”}”(hhh]”(ja)�”}”(hŒAMD XDNA Array”h]”hŒAMD XDNA Array”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjkh²hh³hÇh´Kubj‘)�”}”(hX°AMD XDNA Array comprises of 2D array of compute and memory tiles built with `AMD AI Engine Technology`_. Each column has 4 rows of compute tiles and 1 row of memory tile. Each compute tile contains a VLIW processor with its own dedicated program and data memory. The memory tile acts as L2 memory. The 2D array can be partitioned at a column boundary creating a spatially isolated partition which can be bound to a workload context.”h]”(hŒLAMD XDNA Array comprises of 2D array of compute and memory tiles built with ”…”�”}”(hj|h²hh³Nh´NubjÍ)�”}”(hŒ`AMD AI Engine Technology`_”h]”hŒAMD AI Engine Technology”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAMD AI Engine Technology”j#Œ9https://www.xilinx.com/products/technology/ai-engine.html”uh1jÌhj|j%KubhXI. Each column has 4 rows of compute tiles and 1 row of memory tile. Each compute tile contains a VLIW processor with its own dedicated program and data memory. The memory tile acts as L2 memory. The 2D array can be partitioned at a column boundary creating a spatially isolated partition which can be bound to a workload context.”…”�”}”(hj|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Khjkh²hubj‘)�”}”(hŒYEach column also has dedicated DMA engines to move data between host DDR and memory tile.”h]”hŒYEach column also has dedicated DMA engines to move data between host DDR and memory tile.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K$hjkh²hubj‘)�”}”(hŒÚAMD Phoenix and AMD Hawk Point client NPU have a 4x5 topology, i.e., 4 rows of compute tiles arranged into 5 columns. AMD Strix Point client APU have 4x8 topology, i.e., 4 rows of compute tiles arranged into 8 columns.”h]”hŒÚAMD Phoenix and AMD Hawk Point client NPU have a 4x5 topology, i.e., 4 rows of compute tiles arranged into 5 columns. AMD Strix Point client APU have 4x8 topology, i.e., 4 rows of compute tiles arranged into 8 columns.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K'hjkh²hubeh}”(h]”Œamd-xdna-array”ah ]”h"]”Œamd xdna array”ah$]”h&]”uh1j[hjLh²hh³hÇh´Kubj\)�”}”(hhh]”(ja)�”}”(hŒShared L2 Memory”h]”hŒShared L2 Memory”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjÃh²hh³hÇh´K,ubj‘)�”}”(hXThe single row of memory tiles create a pool of software managed on chip L2 memory. DMA engines are used to move data between host DDR and memory tiles. AMD Phoenix and AMD Hawk Point NPUs have a total of 2560 KB of L2 memory. AMD Strix Point NPU has a total of 4096 KB of L2 memory.”h]”hXThe single row of memory tiles create a pool of software managed on chip L2 memory. DMA engines are used to move data between host DDR and memory tiles. AMD Phoenix and AMD Hawk Point NPUs have a total of 2560 KB of L2 memory. AMD Strix Point NPU has a total of 4096 KB of L2 memory.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K.hjÃh²hubeh}”(h]”Œshared-l2-memory”ah ]”h"]”Œshared l2 memory”ah$]”h&]”uh1j[hjLh²hh³hÇh´K,ubj\)�”}”(hhh]”(ja)�”}”(hŒMicrocontroller”h]”hŒMicrocontroller”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjêh²hh³hÇh´K4ubj‘)�”}”(hŒ¾A microcontroller runs NPU Firmware which is responsible for command processing, XDNA Array partition setup, XDNA Array configuration, workload context management and workload orchestration.”h]”hŒ¾A microcontroller runs NPU Firmware which is responsible for command processing, XDNA Array partition setup, XDNA Array configuration, workload context management and workload orchestration.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K6hjêh²hubj‘)�”}”(hŒÖNPU Firmware uses a dedicated instance of an isolated non-privileged context called ERT to service each workload context. ERT is also used to execute user provided ``ctrlcode`` associated with the workload context.”h]”(hŒ¤NPU Firmware uses a dedicated instance of an isolated non-privileged context called ERT to service each workload context. ERT is also used to execute user provided ”…”�”}”(hj h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ& associated with the workload context.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K:hjêh²hubj‘)�”}”(hŒzNPU Firmware uses a single isolated privileged context called MERT to service management commands from the amdxdna driver.”h]”hŒzNPU Firmware uses a single isolated privileged context called MERT to service management commands from the amdxdna driver.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K>hjêh²hubeh}”(h]”Œmicrocontroller”ah ]”h"]”Œmicrocontroller”ah$]”h&]”uh1j[hjLh²hh³hÇh´K4ubj\)�”}”(hhh]”(ja)�”}”(hŒ Mailboxes”h]”hŒ Mailboxes”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjAh²hh³hÇh´KBubj‘)�”}”(hX-The microcontroller and amdxdna driver use a privileged channel for management tasks like setting up of contexts, telemetry, query, error handling, setting up user channel, etc. As mentioned before, privileged channel requests are serviced by MERT. The privileged channel is bound to a single mailbox.”h]”hX-The microcontroller and amdxdna driver use a privileged channel for management tasks like setting up of contexts, telemetry, query, error handling, setting up user channel, etc. As mentioned before, privileged channel requests are serviced by MERT. The privileged channel is bound to a single mailbox.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KDhjAh²hubj‘)�”}”(hX&The microcontroller and amdxdna driver use a dedicated user channel per workload context. The user channel is primarily used for submitting work to the NPU. As mentioned before, a user channel requests are serviced by an instance of ERT. Each user channel is bound to its own dedicated mailbox.”h]”hX&The microcontroller and amdxdna driver use a dedicated user channel per workload context. The user channel is primarily used for submitting work to the NPU. As mentioned before, a user channel requests are serviced by an instance of ERT. Each user channel is bound to its own dedicated mailbox.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KIhjAh²hubeh}”(h]”Œ mailboxes”ah ]”h"]”Œ mailboxes”ah$]”h&]”uh1j[hjLh²hh³hÇh´KBubj\)�”}”(hhh]”(ja)�”}”(hŒPCIe EP”h]”hŒPCIe EP”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjvh²hh³hÇh´KOubj‘)�”}”(hX3NPU is visible to the x86 host CPU as a PCIe device with multiple BARs and some MSI-X interrupt vectors. NPU uses a dedicated high bandwidth SoC level fabric for reading or writing into host memory. Each instance of ERT gets its own dedicated MSI-X interrupt. MERT gets a single instance of MSI-X interrupt.”h]”hX3NPU is visible to the x86 host CPU as a PCIe device with multiple BARs and some MSI-X interrupt vectors. NPU uses a dedicated high bandwidth SoC level fabric for reading or writing into host memory. Each instance of ERT gets its own dedicated MSI-X interrupt. MERT gets a single instance of MSI-X interrupt.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KQhjvh²hubj‘)�”}”(hŒ›The number of PCIe BARs varies depending on the specific device. Based on their functions, PCIe BARs can generally be categorized into the following types.”h]”hŒ›The number of PCIe BARs varies depending on the specific device. Based on their functions, PCIe BARs can generally be categorized into the following types.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KVhjvh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒBPSP BAR: Expose the AMD PSP (Platform Security Processor) function”h]”j‘)�”}”(hj¬h]”hŒBPSP BAR: Expose the AMD PSP (Platform Security Processor) function”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KYhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒ=SMU BAR: Expose the AMD SMU (System Management Unit) function”h]”j‘)�”}”(hjÃh]”hŒ=SMU BAR: Expose the AMD SMU (System Management Unit) function”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KZhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒ-SRAM BAR: Expose ring buffers for the mailbox”h]”j‘)�”}”(hjÚh]”hŒ-SRAM BAR: Expose ring buffers for the mailbox”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K[hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒUMailbox BAR: Expose the mailbox control registers (head, tail and ISR registers etc.)”h]”j‘)�”}”(hŒUMailbox BAR: Expose the mailbox control registers (head, tail and ISR registers etc.)”h]”hŒUMailbox BAR: Expose the mailbox control registers (head, tail and ISR registers etc.)”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K\hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubj©)�”}”(hŒ-Public Register BAR: Expose public registers ”h]”j‘)�”}”(hŒ,Public Register BAR: Expose public registers”h]”hŒ,Public Register BAR: Expose public registers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K^hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¥h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j£h³hÇh´KYhjvh²hubj‘)�”}”(hŒºOn specific devices, the above-mentioned BAR type might be combined into a single physical PCIe BAR. Or a module might require two physical PCIe BARs to be fully functional. For example,”h]”hŒºOn specific devices, the above-mentioned BAR type might be combined into a single physical PCIe BAR. Or a module might require two physical PCIe BARs to be fully functional. For example,”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K`hjvh²hubj¤)�”}”(hhh]”(j©)�”}”(hŒNOn AMD Phoenix device, PSP, SMU, Public Register BARs are on PCIe BAR index 0.”h]”j‘)�”}”(hj:h]”hŒNOn AMD Phoenix device, PSP, SMU, Public Register BARs are on PCIe BAR index 0.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kdhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj5h²hh³hÇh´Nubj©)�”}”(hŒºOn AMD Strix Point device, Mailbox and Public Register BARs are on PCIe BAR index 0. The PSP has some registers in PCIe BAR index 0 (Public Register BAR) and PCIe BAR index 4 (PSP BAR). ”h]”j‘)�”}”(hŒ¹On AMD Strix Point device, Mailbox and Public Register BARs are on PCIe BAR index 0. The PSP has some registers in PCIe BAR index 0 (Public Register BAR) and PCIe BAR index 4 (PSP BAR).”h]”hŒ¹On AMD Strix Point device, Mailbox and Public Register BARs are on PCIe BAR index 0. The PSP has some registers in PCIe BAR index 0 (Public Register BAR) and PCIe BAR index 4 (PSP BAR).”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KehjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj5h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j%j&uh1j£h³hÇh´Kdhjvh²hubeh}”(h]”Œpcie-ep”ah ]”h"]”Œpcie ep”ah$]”h&]”uh1j[hjLh²hh³hÇh´KOubj\)�”}”(hhh]”(ja)�”}”(hŒProcess Isolation Hardware”h]”hŒProcess Isolation Hardware”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjuh²hh³hÇh´Kjubj‘)�”}”(hX±As explained before, XDNA Array can be dynamically divided into isolated spatial partitions, each of which may have one or more columns. The spatial partition is setup by programming the column isolation registers by the microcontroller. Each spatial partition is associated with a PASID which is also programmed by the microcontroller. Hence multiple spatial partitions in the NPU can make concurrent host access protected by PASID.”h]”hX±As explained before, XDNA Array can be dynamically divided into isolated spatial partitions, each of which may have one or more columns. The spatial partition is setup by programming the column isolation registers by the microcontroller. Each spatial partition is associated with a PASID which is also programmed by the microcontroller. Hence multiple spatial partitions in the NPU can make concurrent host access protected by PASID.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Klhjuh²hubj‘)�”}”(hŒyThe NPU FW itself uses microcontroller MMU enforced isolated contexts for servicing user and privileged channel requests.”h]”hŒyThe NPU FW itself uses microcontroller MMU enforced isolated contexts for servicing user and privileged channel requests.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kshjuh²hubeh}”(h]”Œprocess-isolation-hardware”ah ]”h"]”Œprocess isolation hardware”ah$]”h&]”uh1j[hjLh²hh³hÇh´Kjubeh}”(h]”Œhardware-description”ah ]”h"]”Œhardware description”ah$]”h&]”uh1j[hj]h²hh³hÇh´Kubj\)�”}”(hhh]”(ja)�”}”(hŒ%Mixed Spatial and Temporal Scheduling”h]”hŒ%Mixed Spatial and Temporal Scheduling”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj²h²hh³hÇh´Kxubj‘)�”}”(hXþAMD XDNA architecture supports mixed spatial and temporal (time sharing) scheduling of 2D array. This means that spatial partitions may be setup and torn down dynamically to accommodate various workloads. A *spatial* partition may be *exclusively* bound to one workload context while another partition may be *temporarily* bound to more than one workload contexts. The microcontroller updates the PASID for a temporarily shared partition to match the context that has been bound to the partition at any moment.”h]”(hŒÏAMD XDNA architecture supports mixed spatial and temporal (time sharing) scheduling of 2D array. This means that spatial partitions may be setup and torn down dynamically to accommodate various workloads. A ”…”�”}”(hjÃh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ *spatial*”h]”hŒspatial”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jËhjÃubhŒ partition may be ”…”�”}”(hjÃh²hh³Nh´NubjÌ)�”}”(hŒ *exclusively*”h]”hŒ exclusively”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jËhjÃubhŒ> bound to one workload context while another partition may be ”…”�”}”(hjÃh²hh³Nh´NubjÌ)�”}”(hŒ *temporarily*”h]”hŒ temporarily”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jËhjÃubhŒ¼ bound to more than one workload contexts. The microcontroller updates the PASID for a temporarily shared partition to match the context that has been bound to the partition at any moment.”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kzhj²h²hubj\)�”}”(hhh]”(ja)�”}”(hŒResource Solver”h]”hŒResource Solver”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj h²hh³hÇh´Kƒubj‘)�”}”(hXöThe Resource Solver component of the amdxdna driver manages the allocation of 2D array among various workloads. Every workload describes the number of columns required to run the NPU binary in its metadata. The Resource Solver component uses hints passed by the workload and its own heuristics to decide 2D array (re)partition strategy and mapping of workloads for spatial and temporal sharing of columns. The FW enforces the context-to-column(s) resource binding decisions made by the Resource Solver.”h]”hXöThe Resource Solver component of the amdxdna driver manages the allocation of 2D array among various workloads. Every workload describes the number of columns required to run the NPU binary in its metadata. The Resource Solver component uses hints passed by the workload and its own heuristics to decide 2D array (re)partition strategy and mapping of workloads for spatial and temporal sharing of columns. The FW enforces the context-to-column(s) resource binding decisions made by the Resource Solver.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K…hj h²hubj‘)�”}”(hŒ’AMD Phoenix and AMD Hawk Point client NPU can support 6 concurrent workload contexts. AMD Strix Point can support 16 concurrent workload contexts.”h]”hŒ’AMD Phoenix and AMD Hawk Point client NPU can support 6 concurrent workload contexts. AMD Strix Point can support 16 concurrent workload contexts.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K�hj h²hubeh}”(h]”Œresource-solver”ah ]”h"]”Œresource solver”ah$]”h&]”uh1j[hj²h²hh³hÇh´Kƒubeh}”(h]”Œ%mixed-spatial-and-temporal-scheduling”ah ]”h"]”Œ%mixed spatial and temporal scheduling”ah$]”h&]”uh1j[hj]h²hh³hÇh´Kxubj\)�”}”(hhh]”(ja)�”}”(hŒApplication Binaries”h]”hŒApplication Binaries”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjF h²hh³hÇh´K’ubj‘)�”}”(hŒiA NPU application workload is comprised of two separate binaries which are generated by the NPU compiler.”h]”hŒiA NPU application workload is comprised of two separate binaries which are generated by the NPU compiler.”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K”hjF h²hubhŒenumerated_list”“”)�”}”(hhh]”(j©)�”}”(hXzAMD XDNA Array overlay, which is used to configure a NPU spatial partition. The overlay contains instructions for setting up the stream switch configuration and ELF for the compute tiles. The overlay is loaded on the spatial partition bound to the workload by the associated ERT instance. Refer to the `Versal Adaptive SoC AIE-ML Architecture Manual (AM020)`_ for more details. ”h]”j‘)�”}”(hXyAMD XDNA Array overlay, which is used to configure a NPU spatial partition. The overlay contains instructions for setting up the stream switch configuration and ELF for the compute tiles. The overlay is loaded on the spatial partition bound to the workload by the associated ERT instance. Refer to the `Versal Adaptive SoC AIE-ML Architecture Manual (AM020)`_ for more details.”h]”(hX.AMD XDNA Array overlay, which is used to configure a NPU spatial partition. The overlay contains instructions for setting up the stream switch configuration and ELF for the compute tiles. The overlay is loaded on the spatial partition bound to the workload by the associated ERT instance. Refer to the ”…”�”}”(hjn h²hh³Nh´NubjÍ)�”}”(hŒ9`Versal Adaptive SoC AIE-ML Architecture Manual (AM020)`_”h]”hŒ6Versal Adaptive SoC AIE-ML Architecture Manual (AM020)”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ6Versal Adaptive SoC AIE-ML Architecture Manual (AM020)”j#Œ0https://docs.amd.com/r/en-US/am020-versal-aie-ml”uh1jÌhjn j%KubhŒ for more details.”…”�”}”(hjn h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K—hjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjg h²hh³hÇh´Nubj©)�”}”(hXH``ctrlcode``, used for orchestrating the overlay loaded on the spatial partition. ``ctrlcode`` is executed by the ERT running in protected mode on the microcontroller in the context of the workload. ``ctrlcode`` is made up of a sequence of opcodes named ``XAie_TxnOpcode``. Refer to the `AI Engine Run Time`_ for more details. ”h]”j‘)�”}”(hXF``ctrlcode``, used for orchestrating the overlay loaded on the spatial partition. ``ctrlcode`` is executed by the ERT running in protected mode on the microcontroller in the context of the workload. ``ctrlcode`` is made up of a sequence of opcodes named ``XAie_TxnOpcode``. Refer to the `AI Engine Run Time`_ for more details.”h]”(j)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubhŒF, used for orchestrating the overlay loaded on the spatial partition. ”…”�”}”(hj› h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubhŒi is executed by the ERT running in protected mode on the microcontroller in the context of the workload. ”…”�”}”(hj› h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubhŒ+ is made up of a sequence of opcodes named ”…”�”}”(hj› h²hh³Nh´Nubj)�”}”(hŒ``XAie_TxnOpcode``”h]”hŒXAie_TxnOpcode”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubhŒ. Refer to the ”…”�”}”(hj› h²hh³Nh´NubjÍ)�”}”(hŒ`AI Engine Run Time`_”h]”hŒAI Engine Run Time”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAI Engine Run Time”j#Œ6https://github.com/Xilinx/aie-rt/tree/release/main_aig”uh1jÌhj› j%KubhŒ for more details.”…”�”}”(hj› h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kžhj— ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hjg h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1je hjF h²hh³hÇh´K—ubeh}”(h]”Œapplication-binaries”ah ]”h"]”Œapplication binaries”ah$]”h&]”uh1j[hj]h²hh³hÇh´K’ubj\)�”}”(hhh]”(ja)�”}”(hŒSpecial Host Buffers”h]”hŒSpecial Host Buffers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj h²hh³hÇh´K¦ubj\)�”}”(hhh]”(ja)�”}”(hŒPer-context Instruction Buffer”h]”hŒPer-context Instruction Buffer”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj, h²hh³hÇh´K©ubj‘)�”}”(hXtEvery workload context uses a host resident 64 MB buffer which is memory mapped into the ERT instance created to service the workload. The ``ctrlcode`` used by the workload is copied into this special memory. This buffer is protected by PASID like all other input/output buffers used by that workload. Instruction buffer is also mapped into the user space of the workload.”h]”(hŒ‹Every workload context uses a host resident 64 MB buffer which is memory mapped into the ERT instance created to service the workload. The ”…”�”}”(hj= h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj= ubhŒÝ used by the workload is copied into this special memory. This buffer is protected by PASID like all other input/output buffers used by that workload. Instruction buffer is also mapped into the user space of the workload.”…”�”}”(hj= h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K«hj, h²hubeh}”(h]”Œper-context-instruction-buffer”ah ]”h"]”Œper-context instruction buffer”ah$]”h&]”uh1j[hj h²hh³hÇh´K©ubj\)�”}”(hhh]”(ja)�”}”(hŒGlobal Privileged Buffer”h]”hŒGlobal Privileged Buffer”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hje h²hh³hÇh´K²ubj‘)�”}”(hŒ½In addition, the driver also allocates a single buffer for maintenance tasks like recording errors from MERT. This global buffer uses the global IOMMU domain and is only accessible by MERT.”h]”hŒ½In addition, the driver also allocates a single buffer for maintenance tasks like recording errors from MERT. This global buffer uses the global IOMMU domain and is only accessible by MERT.”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K´hje h²hubeh}”(h]”Œglobal-privileged-buffer”ah ]”h"]”Œglobal privileged buffer”ah$]”h&]”uh1j[hj h²hh³hÇh´K²ubeh}”(h]”Œspecial-host-buffers”ah ]”h"]”Œspecial host buffers”ah$]”h&]”uh1j[hj]h²hh³hÇh´K¦ubj\)�”}”(hhh]”(ja)�”}”(hŒHigh-level Use Flow”h]”hŒHigh-level Use Flow”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj” h²hh³hÇh´Kºubj‘)�”}”(hŒ0Here are the steps to run a workload on AMD NPU:”h]”hŒ0Here are the steps to run a workload on AMD NPU:”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¼hj” h²hubjf )�”}”(hhh]”(j©)�”}”(hŒ?Compile the workload into an overlay and a ``ctrlcode`` binary.”h]”j‘)�”}”(hj¸ h]”(hŒ+Compile the workload into an overlay and a ”…”�”}”(hjº h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº ubhŒ binary.”…”�”}”(hjº h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¾hj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒAUserspace opens a context in the driver and provides the overlay.”h]”j‘)�”}”(hjá h]”hŒAUserspace opens a context in the driver and provides the overlay.”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´K¿hjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒ^The driver checks with the Resource Solver for provisioning a set of columns for the workload.”h]”j‘)�”}”(hŒ^The driver checks with the Resource Solver for provisioning a set of columns for the workload.”h]”hŒ^The driver checks with the Resource Solver for provisioning a set of columns for the workload.”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÀhjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒUThe driver then asks MERT to create a context on the device with the desired columns.”h]”j‘)�”}”(hŒUThe driver then asks MERT to create a context on the device with the desired columns.”h]”hŒUThe driver then asks MERT to create a context on the device with the desired columns.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÂhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒ\MERT then creates an instance of ERT. MERT also maps the Instruction Buffer into ERT memory.”h]”j‘)�”}”(hŒ\MERT then creates an instance of ERT. MERT also maps the Instruction Buffer into ERT memory.”h]”hŒ\MERT then creates an instance of ERT. MERT also maps the Instruction Buffer into ERT memory.”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÄhj& ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒEThe userspace then copies the ``ctrlcode`` to the Instruction Buffer.”h]”j‘)�”}”(hj@ h]”(hŒThe userspace then copies the ”…”�”}”(hjB h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB ubhŒ to the Instruction Buffer.”…”�”}”(hjB h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÆhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒ¸Userspace then creates a command buffer with pointers to input, output, and instruction buffer; it then submits command buffer with the driver and goes to sleep waiting for completion.”h]”j‘)�”}”(hŒ¸Userspace then creates a command buffer with pointers to input, output, and instruction buffer; it then submits command buffer with the driver and goes to sleep waiting for completion.”h]”hŒ¸Userspace then creates a command buffer with pointers to input, output, and instruction buffer; it then submits command buffer with the driver and goes to sleep waiting for completion.”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÇhjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒ5The driver sends the command over the Mailbox to ERT.”h]”j‘)�”}”(hj� h]”hŒ5The driver sends the command over the Mailbox to ERT.”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÊhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒ:ERT *executes* the ``ctrlcode`` in the instruction buffer.”h]”j‘)�”}”(hj˜ h]”(hŒERT ”…”�”}”(hjš h²hh³Nh´NubjÌ)�”}”(hŒ *executes*”h]”hŒexecutes”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jËhjš ubhŒ the ”…”�”}”(hjš h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš ubhŒ in the instruction buffer.”…”�”}”(hjš h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KËhj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒfExecution of the ``ctrlcode`` kicks off DMAs to and from the host DDR while AMD XDNA Array is running.”h]”j‘)�”}”(hŒfExecution of the ``ctrlcode`` kicks off DMAs to and from the host DDR while AMD XDNA Array is running.”h]”(hŒExecution of the ”…”�”}”(hjÕ h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ ubhŒI kicks off DMAs to and from the host DDR while AMD XDNA Array is running.”…”�”}”(hjÕ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÌhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubj©)�”}”(hŒŒWhen ERT reaches end of ``ctrlcode``, it raises an MSI-X to send completion signal to the driver which then wakes up the waiting workload. ”h]”j‘)�”}”(hŒŠWhen ERT reaches end of ``ctrlcode``, it raises an MSI-X to send completion signal to the driver which then wakes up the waiting workload.”h]”(hŒWhen ERT reaches end of ”…”�”}”(hjÿ h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ ubhŒf, it raises an MSI-X to send completion signal to the driver which then wakes up the waiting workload.”…”�”}”(hjÿ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÎhjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj³ h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j j j hj j uh1je hj” h²hh³hÇh´K¾ubeh}”(h]”Œhigh-level-use-flow”ah ]”h"]”Œhigh-level use flow”ah$]”h&]”uh1j[hj]h²hh³hÇh´Kºubj\)�”}”(hhh]”(ja)�”}”(hŒ Boot Flow”h]”hŒ Boot Flow”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj3 h²hh³hÇh´KÓubj‘)�”}”(hXAamdxdna driver uses PSP to securely load signed NPU FW and kick off the boot of the NPU microcontroller. amdxdna driver then waits for the alive signal in a special location on BAR 0. The NPU is switched off during SoC suspend and turned on after resume where the NPU FW is reloaded, and the handshake is performed again.”h]”hXAamdxdna driver uses PSP to securely load signed NPU FW and kick off the boot of the NPU microcontroller. amdxdna driver then waits for the alive signal in a special location on BAR 0. The NPU is switched off during SoC suspend and turned on after resume where the NPU FW is reloaded, and the handshake is performed again.”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´KÕhj3 h²hubeh}”(h]”Œ boot-flow”ah ]”h"]”Œ boot flow”ah$]”h&]”uh1j[hj]h²hh³hÇh´KÓubj\)�”}”(hhh]”(ja)�”}”(hŒUserspace components”h]”hŒUserspace components”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjZ h²hh³hÇh´KÝubj\)�”}”(hhh]”(ja)�”}”(hŒCompiler”h]”hŒCompiler”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjk h²hh³hÇh´Kàubj‘)�”}”(hŒ’Peano is an LLVM based open-source single core compiler for AMD XDNA Array compute tile. Peano is available at: https://github.com/Xilinx/llvm-aie”h]”(hŒpPeano is an LLVM based open-source single core compiler for AMD XDNA Array compute tile. Peano is available at: ”…”�”}”(hj| h²hh³Nh´NubjÍ)�”}”(hŒ"https://github.com/Xilinx/llvm-aie”h]”hŒ"https://github.com/Xilinx/llvm-aie”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j† uh1jÌhj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kâhjk h²hubj‘)�”}”(hŒ˜IRON is an open-source array compiler for AMD XDNA Array based NPU which uses Peano underneath. IRON is available at: https://github.com/Xilinx/mlir-aie”h]”(hŒvIRON is an open-source array compiler for AMD XDNA Array based NPU which uses Peano underneath. IRON is available at: ”…”�”}”(hj™ h²hh³Nh´NubjÍ)�”}”(hŒ"https://github.com/Xilinx/mlir-aie”h]”hŒ"https://github.com/Xilinx/mlir-aie”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j£ uh1jÌhj™ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kæhjk h²hubeh}”(h]”Œcompiler”ah ]”h"]”Œcompiler”ah$]”h&]”uh1j[hjZ h²hh³hÇh´Kàubj\)�”}”(hhh]”(ja)�”}”(hŒUsermode Driver (UMD)”h]”hŒUsermode Driver (UMD)”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj¾ h²hh³hÇh´Këubj‘)�”}”(hŒ{The open-source XRT runtime stack interfaces with amdxdna kernel driver. XRT can be found at: https://github.com/Xilinx/XRT”h]”(hŒ^The open-source XRT runtime stack interfaces with amdxdna kernel driver. XRT can be found at: ”…”�”}”(hjÏ h²hh³Nh´NubjÍ)�”}”(hŒhttps://github.com/Xilinx/XRT”h]”hŒhttps://github.com/Xilinx/XRT”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÙ uh1jÌhjÏ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kíhj¾ h²hubj‘)�”}”(hŒWThe open-source XRT shim for NPU is can be found at: https://github.com/amd/xdna-driver”h]”(hŒ5The open-source XRT shim for NPU is can be found at: ”…”�”}”(hjì h²hh³Nh´NubjÍ)�”}”(hŒ"https://github.com/amd/xdna-driver”h]”hŒ"https://github.com/amd/xdna-driver”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jö uh1jÌhjì ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Kñhj¾ h²hubeh}”(h]”Œusermode-driver-umd”ah ]”h"]”Œusermode driver (umd)”ah$]”h&]”uh1j[hjZ h²hh³hÇh´Këubeh}”(h]”Œuserspace-components”ah ]”h"]”Œuserspace components”ah$]”h&]”uh1j[hj]h²hh³hÇh´KÝubj\)�”}”(hhh]”(ja)�”}”(hŒ DMA Operation”h]”hŒ DMA Operation”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj h²hh³hÇh´Köubj‘)�”}”(hŒÂDMA operation instructions are encoded in the ``ctrlcode`` as ``XAIE_IO_BLOCKWRITE`` opcode. When ERT executes ``XAIE_IO_BLOCKWRITE``, DMA operations between host DDR and L2 memory are effected.”h]”(hŒ.DMA operation instructions are encoded in the ”…”�”}”(hj* h²hh³Nh´Nubj)�”}”(hŒ ``ctrlcode``”h]”hŒctrlcode”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj* ubhŒ as ”…”�”}”(hj* h²hh³Nh´Nubj)�”}”(hŒ``XAIE_IO_BLOCKWRITE``”h]”hŒXAIE_IO_BLOCKWRITE”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj* ubhŒ opcode. When ERT executes ”…”�”}”(hj* h²hh³Nh´Nubj)�”}”(hŒ``XAIE_IO_BLOCKWRITE``”h]”hŒXAIE_IO_BLOCKWRITE”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj* ubhŒ=, DMA operations between host DDR and L2 memory are effected.”…”�”}”(hj* h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Køhj h²hubeh}”(h]”Œ dma-operation”ah ]”h"]”Œ dma operation”ah$]”h&]”uh1j[hj]h²hh³hÇh´Köubj\)�”}”(hhh]”(ja)�”}”(hŒError Handling”h]”hŒError Handling”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjv h²hh³hÇh´Kþubj‘)�”}”(hX}When MERT detects an error in AMD XDNA Array, it pauses execution for that workload context and sends an asynchronous message to the driver over the privileged channel. The driver then sends a buffer pointer to MERT to capture the register states for the partition bound to faulting workload context. The driver then decodes the error by reading the contents of the buffer pointer.”h]”hX}When MERT detects an error in AMD XDNA Array, it pauses execution for that workload context and sends an asynchronous message to the driver over the privileged channel. The driver then sends a buffer pointer to MERT to capture the register states for the partition bound to faulting workload context. The driver then decodes the error by reading the contents of the buffer pointer.”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhjv h²hubeh}”(h]”Œerror-handling”ah ]”h"]”Œerror handling”ah$]”h&]”uh1j[hj]h²hh³hÇh´Kþubj\)�”}”(hhh]”(ja)�”}”(hŒ Telemetry”h]”hŒ Telemetry”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj� h²hh³hÇh´Mubj‘)�”}”(hŒJMERT can report various kinds of telemetry information like the following:”h]”hŒJMERT can report various kinds of telemetry information like the following:”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M hj� h²hubj¤)�”}”(hhh]”(j©)�”}”(hŒL1 interrupt counter”h]”j‘)�”}”(hjÁ h]”hŒL1 interrupt counter”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M hj¿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼ h²hh³hÇh´Nubj©)�”}”(hŒ DMA counter”h]”j‘)�”}”(hjØ h]”hŒ DMA counter”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M hjÖ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼ h²hh³hÇh´Nubj©)�”}”(hŒDeep Sleep counter”h]”j‘)�”}”(hjï h]”hŒDeep Sleep counter”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhjí ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼ h²hh³hÇh´Nubj©)�”}”(hŒetc. ”h]”j‘)�”}”(hŒetc.”h]”hŒetc.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼ h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j%j&uh1j£h³hÇh´M hj� h²hubhŒtarget”“”)�”}”(hŒ.. _amdxdna-usage-stats:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œamdxdna-usage-stats”uh1j"h´Mghj� h²hh³hÇubeh}”(h]”Œ telemetry”ah ]”h"]”Œ telemetry”ah$]”h&]”uh1j[hj]h²hh³hÇh´Mubj\)�”}”(hhh]”(ja)�”}”(hŒ-Amdxdna DRM client usage stats implementation”h]”hŒ-Amdxdna DRM client usage stats implementation”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj8h²hh³hÇh´Mubj‘)�”}”(hŒvThe amdxdna driver implements the DRM client usage stats specification as documented in :ref:`drm-client-usage-stats`.”h]”(hŒXThe amdxdna driver implements the DRM client usage stats specification as documented in ”…”�”}”(hjIh²hh³Nh´Nubh)�”}”(hŒ:ref:`drm-client-usage-stats`”h]”hŒinline”“”)�”}”(hjSh]”hŒdrm-client-usage-stats”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jUhjQubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œaccel/amdxdna/amdnpu”Œ refdomain”jbŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œdrm-client-usage-stats”uh1hh³hÇh´MhjIubhŒ.”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhj8h²hubj‘)�”}”(hŒ>Example of the output showing the implemented key value pairs:”h]”hŒ>Example of the output showing the implemented key value pairs:”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´Mhj8h²hubhŒ literal_block”“”)�”}”(hXNpos: 0 flags: 0100002 mnt_id: 29 ino: 939 drm-driver: amdxdna_accel_driver drm-client-id: 3219 drm-pdev: 0000:c5:00.1 amdxdna_accel_driver-heap-alloc: 60 KiB amdxdna_accel_driver-internal-alloc: 67588 KiB amdxdna_accel_driver-external-alloc: 0 drm-total-memory: 67632 KiB drm-shared-memory: 0”h]”hXNpos: 0 flags: 0100002 mnt_id: 29 ino: 939 drm-driver: amdxdna_accel_driver drm-client-id: 3219 drm-pdev: 0000:c5:00.1 amdxdna_accel_driver-heap-alloc: 60 KiB amdxdna_accel_driver-internal-alloc: 67588 KiB amdxdna_accel_driver-external-alloc: 0 drm-total-memory: 67632 KiB drm-shared-memory: 0”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jŽh³hÇh´Mhj8h²hubeh}”(h]”(Œ-amdxdna-drm-client-usage-stats-implementation”j/eh ]”h"]”(Œ-amdxdna drm client usage stats implementation”Œamdxdna-usage-stats”eh$]”h&]”uh1j[hj]h²hh³hÇh´MŒexpect_referenced_by_name”}”j¤j$sŒexpect_referenced_by_id”}”j/j$subj\)�”}”(hhh]”(ja)�”}”(hŒ References”h]”hŒ References”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj«h²hh³hÇh´M,ubj¤)�”}”(hhh]”(j©)�”}”(hŒH`AMD XDNA Architecture `_”h]”j‘)�”}”(hjÁh]”(jÍ)�”}”(hjÁh]”hŒAMD XDNA Architecture”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAMD XDNA Architecture”j#j$uh1jÌhjÃubj#)�”}”(hŒ0 ”h]”h}”(h]”Œamd-xdna-architecture”ah ]”h"]”Œamd xdna architecture”ah$]”h&]”Œrefuri”j$uh1j"Œ referenced”KhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M.hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼h²hh³hÇh´Nubj©)�”}”(hŒW`AMD AI Engine Technology `_”h]”j‘)�”}”(hjñh]”(jÍ)�”}”(hjñh]”hŒAMD AI Engine Technology”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAMD AI Engine Technology”j#j”uh1jÌhjóubj#)�”}”(hŒ< ”h]”h}”(h]”Œamd-ai-engine-technology”ah ]”h"]”Œamd ai engine technology”ah$]”h&]”Œrefuri”j”uh1j"jâKhjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M/hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼h²hh³hÇh´Nubj©)�”}”(hŒ-`Peano `_”h]”j‘)�”}”(hj h]”(jÍ)�”}”(hj h]”hŒPeano”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒPeano”j#Œ"https://github.com/Xilinx/llvm-aie”uh1jÌhj"ubj#)�”}”(hŒ% ”h]”h}”(h]”Œpeano”ah ]”h"]”Œpeano”ah$]”h&]”Œrefuri”j4uh1j"jâKhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M0hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼h²hh³hÇh´Nubj©)�”}”(hŒl`Versal Adaptive SoC AIE-ML Architecture Manual (AM020) `_”h]”j‘)�”}”(hjPh]”(jÍ)�”}”(hjPh]”hŒ6Versal Adaptive SoC AIE-ML Architecture Manual (AM020)”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ6Versal Adaptive SoC AIE-ML Architecture Manual (AM020)”j#j† uh1jÌhjRubj#)�”}”(hŒ3 ”h]”h}”(h]”Œ4versal-adaptive-soc-aie-ml-architecture-manual-am020”ah ]”h"]”Œ6versal adaptive soc aie-ml architecture manual (am020)”ah$]”h&]”Œrefuri”j† uh1j"jâKhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M1hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼h²hh³hÇh´Nubj©)�”}”(hŒN`AI Engine Run Time `_”h]”j‘)�”}”(hjh]”(jÍ)�”}”(hjh]”hŒAI Engine Run Time”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒAI Engine Run Time”j#j÷ uh1jÌhj�ubj#)�”}”(hŒ9 ”h]”h}”(h]”Œai-engine-run-time”ah ]”h"]”Œai engine run time”ah$]”h&]”Œrefuri”j÷ uh1j"jâKhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÇh´M2hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¨hj¼h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j%Œ-”uh1j£h³hÇh´M.hj«h²hubeh}”(h]”Œ references”ah ]”h"]”Œ references”ah$]”h&]”uh1j[hj]h²hh³hÇh´M,ubeh}”(h]”Œamd-npu”ah ]”h"]”Œamd npu”ah$]”h&]”uh1j[hhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(j`NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jæŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”(hóhçjhöjjj jj/j#j>j2jMjAj\jPjkj_jzjnj‰j}j˜jŒj§j›j¶jªjÅj¹jÔjÈjãj×jòjæjjõjjjjj.j"j=j1jLj@j[jOjjj^jyjmjˆj|j—j‹j¦jšjµj©jÄj¸jÓjÇjâjÖjñjåjjôjjjjj-j!j<j0jKj?jZjNjij]jxjlj‡j{j–jŠj¥j™j´j¨jÃj·jÒjÆjájÕjðjäjÿjójjjjj,j j;j/jJj>jYjMjhj\jwjkj†jzj•j‰j¤j˜j³j§jÂj¶jÑjÅjàjÔjïjãjþjòj jjjj+jj:j.jIj=jXjLuŒsubstitution_names”}”(Œamp”hóŒapos”jŒast”jŒbrvbar”j Œbsol”j/Œcent”j>Œcolon”jMŒcomma”j\Œcommat”jkŒcopy”jzŒcurren”j‰Œdarr”j˜Œdeg”j§Œdivide”j¶Œdollar”jÅŒequals”jÔŒexcl”jãŒfrac12”jòŒfrac14”jŒfrac18”jŒfrac34”jŒfrac38”j.Œfrac58”j=Œfrac78”jLŒgt”j[Œhalf”jjŒhorbar”jyŒhyphen”jˆŒiexcl”j—Œiquest”j¦Œlaquo”jµŒlarr”jÄŒlcub”jÓŒldquo”jâŒlowbar”jñŒlpar”jŒlsqb”jŒlsquo”jŒlt”j-Œmicro”j<Œmiddot”jKŒnbsp”jZŒnot”jiŒnum”jxŒohm”j‡Œordf”j–Œordm”j¥Œpara”j´Œpercnt”jÃŒperiod”jÒŒplus”jáŒplusmn”jðŒpound”jÿŒquest”jŒquot”jŒraquo”j,Œrarr”j;Œrcub”jJŒrdquo”jYŒreg”jhŒrpar”jwŒrsqb”j†Œrsquo”j•Œsect”j¤Œsemi”j³Œshy”jÂŒsol”jÑŒsung”jàŒsup1”jïŒsup2”jþŒsup3”j Œtimes”jŒtrade”j+Œuarr”j:Œverbar”jIŒyen”jXuŒrefnames”}”(Œamd xdna architecture”]”jaŒamd ai engine technology”]”j„aŒ6versal adaptive soc aie-ml architecture manual (am020)”]”jv aŒai engine run time”]”jç auŒrefids”}”j/]”j$asŒnameids”}”(jÀj½jIjFj¯j¬jÀj½jçjäj>j;jsjpjrjoj§j¤jC j@ j; j8 j j j‘ jŽ jb j_ j‰ j† j0 j- jW jT j j j» j¸ j j js jp jš j— j5j2j¤j/j£j j¸jµjÞjÛjj j>j;jmjjjœj™uŒ nametypes”}”(jÀ‰jI‰j¯‰jÀ‰jç‰j>‰js‰jr‰j§‰jC ‰j; ‰j ‰j‘ ‰jb ‰j‰ ‰j0 ‰jW ‰j ‰j» ‰j ‰js ‰jš ‰j5‰j¤ˆj£‰j¸‰jÞˆjˆj>ˆjmˆjœˆuh}”(j½j]jFjúj¬jLj½jkjäjÃj;jêjpjAjojvj¤juj@ j²j8 j j jF jŽ j j_ j, j† je j- j” jT j3 j jZ j¸ jk j j¾ jp j j— jv j2j� j/j8j j8jµj«jÛjÕj jj;j5jjjdj™j“uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”j‘)�”}”(hhh]”hŒ9Hyperlink target "amdxdna-usage-stats" is not referenced.”…”�”}”hj¤sbah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¡ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Mguh1jŸubaŒ transformer”NŒ include_log”]”Œ&Documentation/accel/amdxdna/amdnpu.rst”(NNNNt”†”aŒ decoration”Nh²hub.