# Hexagon NPU Runtime Driver (Windows Only)

Hexagon NPU Runtime Driver (HNRD) is available for Windows based Snapdragon® X Series Platforms. HNRD is designed to be forward and backward compatible with Qualcomm AI Stack SDKs.
With HNRD in the system, applications have the option to unbundle from SNPE HTP platform dependent libraries, and allows these applications to be portable over to older and newer Windows platforms.
HNRD is packaged and distributed independently from the SNPE SDK and it is currently packaged with the device BSP. OEMs use the BSP to pre-install HNRD on their devices.

**Switching Between Traditional and HNRD Paths**

<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="715px" height="741px" viewbox="-0.5 -0.5 715 741" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2024-05-17T10:08:38.194Z&quot; agent=&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.4.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36&quot; etag=&quot;GfVkV5mTPhAxbg6B6XNS&quot; version=&quot;24.4.0&quot; type=&quot;device&quot;&gt;&#10;  &lt;diagram name=&quot;Page-1&quot; id=&quot;MRLrm22VMilX5kzly-yo&quot;&gt;&#10;    &lt;mxGraphModel dx=&quot;1221&quot; dy=&quot;751&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;850&quot; pageHeight=&quot;1100&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10;      &lt;root&gt;&#10;        &lt;mxCell id=&quot;0&quot; /&gt;&#10;        &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-1&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;&quot; parent=&quot;1&quot; source=&quot;_NWSl5V1fJdJdAV3yJkn-15&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;120&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;800&quot; y=&quot;240&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-2&quot; value=&quot;&quot; style=&quot;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;160&quot; y=&quot;280&quot; width=&quot;280&quot; height=&quot;280&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-4&quot; value=&quot;&amp;lt;b&amp;gt;Platform agnostic&amp;lt;/b&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span style=&amp;quot;background-color: initial;&amp;quot;&amp;gt;SNPE.dll&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;240&quot; y=&quot;330&quot; width=&quot;120&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-6&quot; value=&quot;&amp;lt;b&amp;gt;Platform dependent&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;SnpeHtpPrepare.dll&amp;lt;br&amp;gt;&amp;lt;div&amp;gt;SnpeHtpV73Stub.dll&amp;lt;br&amp;gt;SnpeHtpV73Skel.so&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;230&quot; y=&quot;440&quot; width=&quot;140&quot; height=&quot;90&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-7&quot; value=&quot;&quot; style=&quot;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;480&quot; y=&quot;280&quot; width=&quot;280&quot; height=&quot;280&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-10&quot; value=&quot;&quot; style=&quot;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;480&quot; y=&quot;640&quot; width=&quot;280&quot; height=&quot;280&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-14&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;&quot; parent=&quot;1&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-13&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;120&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;800&quot; y=&quot;240&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-13&quot; value=&quot;&quot; style=&quot;shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;240&quot; y=&quot;230&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-16&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;&quot; parent=&quot;1&quot; source=&quot;_NWSl5V1fJdJdAV3yJkn-13&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-15&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;250&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;800&quot; y=&quot;240&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-15&quot; value=&quot;&quot; style=&quot;shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;strokeColor=default;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;570&quot; y=&quot;230&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;UserObject label=&quot;&amp;lt;b&amp;gt;SNPE SDK and Driver Package distribution transition&amp;lt;/b&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-17&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;220&quot; y=&quot;180&quot; width=&quot;420&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;UserObject label=&quot;&amp;lt;b&amp;gt;Pre-driver&amp;lt;/b&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-18&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;260&quot; y=&quot;250&quot; width=&quot;80&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;UserObject label=&quot;&amp;lt;b&amp;gt;Post-driver&amp;lt;/b&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-19&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;580&quot; y=&quot;250&quot; width=&quot;80&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;UserObject label=&quot;SNPE SDK&amp;lt;div&amp;gt;Traditional Path&amp;amp;nbsp;&amp;lt;/div&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-20&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;250&quot; y=&quot;280&quot; width=&quot;100&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;UserObject label=&quot;SNPE SDK&amp;lt;div&amp;gt;Traditional and Driver Path&amp;amp;nbsp;&amp;lt;/div&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-21&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;510&quot; y=&quot;280&quot; width=&quot;210&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-22&quot; value=&quot;&amp;lt;b&amp;gt;Platform dependent&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;SnpeHtpPrepare.dll&amp;lt;br&amp;gt;&amp;lt;div&amp;gt;SnpeHtpV73Stub.dll&amp;lt;br&amp;gt;SnpeHtpV73Skel.so&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;540&quot; y=&quot;460&quot; width=&quot;150&quot; height=&quot;80&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-23&quot; value=&quot;&amp;lt;b&amp;gt;Platform agnostic&amp;lt;/b&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span style=&amp;quot;background-color: initial;&amp;quot;&amp;gt;SNPE.dll&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;555&quot; y=&quot;330&quot; width=&quot;120&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;UserObject label=&quot;Driver Package&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-24&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;515&quot; y=&quot;640&quot; width=&quot;210&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-25&quot; value=&quot;&amp;lt;b&amp;gt;Platform dependent&amp;lt;/b&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span style=&amp;quot;background-color: initial;&amp;quot;&amp;gt;HtpUsrDrv.dll&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;550&quot; y=&quot;700&quot; width=&quot;150&quot; height=&quot;80&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-26&quot; value=&quot;&amp;lt;b&amp;gt;Platform dependent&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;QnnHtpPrepareDrv.dll&amp;lt;br&amp;gt;&amp;lt;div&amp;gt;QnnHtpV73StubDrv.dll&amp;lt;br&amp;gt;libQnnHtpV73SkelDrv.so&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;540&quot; y=&quot;790&quot; width=&quot;170&quot; height=&quot;90&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-27&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;_NWSl5V1fJdJdAV3yJkn-4&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-6&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;400&quot; y=&quot;390&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;450&quot; y=&quot;340&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-28&quot; value=&quot;traditional&quot; style=&quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];&quot; parent=&quot;_NWSl5V1fJdJdAV3yJkn-27&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-0.0133&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-29&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=-0.083;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;_NWSl5V1fJdJdAV3yJkn-23&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-30&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;400&quot; y=&quot;390&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;450&quot; y=&quot;340&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-30&quot; value=&quot;&quot; style=&quot;html=1;whiteSpace=wrap;aspect=fixed;shape=isoRectangle;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;605&quot; y=&quot;414&quot; width=&quot;20&quot; height=&quot;12&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-31&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.511;exitY=0.991;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;_NWSl5V1fJdJdAV3yJkn-30&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-22&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;610&quot; y=&quot;420&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;450&quot; y=&quot;340&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-34&quot; value=&quot;traditional&quot; style=&quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];&quot; parent=&quot;_NWSl5V1fJdJdAV3yJkn-31&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-0.0857&quot; y=&quot;-1&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;UserObject label=&quot;select&amp;lt;div&amp;gt;traditional or driver&amp;amp;nbsp;&amp;lt;/div&amp;gt;&quot; placeholders=&quot;1&quot; name=&quot;Variable&quot; id=&quot;_NWSl5V1fJdJdAV3yJkn-32&quot;&gt;&#10;          &lt;mxCell style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10;            &lt;mxGeometry x=&quot;480&quot; y=&quot;410&quot; width=&quot;120&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10;          &lt;/mxCell&gt;&#10;        &lt;/UserObject&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-35&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=1.004;entryY=0.354;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; target=&quot;_NWSl5V1fJdJdAV3yJkn-10&quot; edge=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;625&quot; y=&quot;420&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;800&quot; y=&quot;740&quot; as=&quot;targetPoint&quot; /&gt;&#10;            &lt;Array as=&quot;points&quot;&gt;&#10;              &lt;mxPoint x=&quot;800&quot; y=&quot;420&quot; /&gt;&#10;              &lt;mxPoint x=&quot;800&quot; y=&quot;740&quot; /&gt;&#10;            &lt;/Array&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;_NWSl5V1fJdJdAV3yJkn-36&quot; value=&quot;driver path&quot; style=&quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];&quot; parent=&quot;_NWSl5V1fJdJdAV3yJkn-35&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10;          &lt;mxGeometry x=&quot;0.1855&quot; y=&quot;1&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;      &lt;/root&gt;&#10;    &lt;/mxGraphModel&gt;&#10;  &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;" aria-label="../images/hnrd.svg"><defs></defs><g><g><path d="M 467 60 L 680.63 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 685.88 60 L 678.88 63.5 L 680.63 60 L 678.88 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><rect x="47" y="100" width="280" height="280" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><rect x="127" y="150" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 128px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform agnostic</b><div><span style="background-color: initial;">SNPE.dll</span><br></div></div></div></div></foreignobject><text x="187" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform agnostic...</text></switch></g></g><g><rect x="117" y="260" width="140" height="90" rx="13.5" ry="13.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 305px; margin-left: 118px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform dependent</b><br>SnpeHtpPrepare.dll<br><div>SnpeHtpV73Stub.dll<br>SnpeHtpV73Skel.so<br></div></div></div></div></foreignobject><text x="187" y="309" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform dependent...</text></switch></g></g><g><rect x="367" y="100" width="280" height="280" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><rect x="367" y="460" width="280" height="280" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><path d="M 7 60 L 130.63 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 135.88 60 L 128.88 63.5 L 130.63 60 L 128.88 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><ellipse cx="137" cy="60" rx="3" ry="3" fill="rgb(0, 0, 0)" stroke="none" pointer-events="all"></ellipse><rect x="127" y="50" width="20" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g><path d="M 137 60 L 460.63 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 465.88 60 L 458.88 63.5 L 460.63 60 L 458.88 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><ellipse cx="467" cy="60" rx="3" ry="3" fill="rgb(0, 0, 0)" stroke="none" pointer-events="all"></ellipse><rect x="457" y="50" width="20" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g><rect x="107" y="0" width="420" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 418px; height: 1px; padding-top: 10px; margin-left: 108px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>SNPE SDK and Driver Package distribution transition</b></div></div></div></foreignobject><text x="317" y="14" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">SNPE SDK and Driver Package distribution transition</text></switch></g></g><g><rect x="147" y="70" width="80" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 80px; margin-left: 148px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Pre-driver</b></div></div></div></foreignobject><text x="187" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Pre-driver</text></switch></g></g><g><rect x="467" y="70" width="80" height="20" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 80px; margin-left: 468px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 16px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Post-driver</b></div></div></div></foreignobject><text x="507" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Post-driver</text></switch></g></g><g><rect x="137" y="100" width="100" height="40" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 120px; margin-left: 138px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 36px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">SNPE SDK<div>Traditional Path </div></div></div></div></foreignobject><text x="187" y="124" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">SNPE SDK...</text></switch></g></g><g><rect x="397" y="100" width="210" height="40" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 120px; margin-left: 398px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 36px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">SNPE SDK<div>Traditional and Driver Path </div></div></div></div></foreignobject><text x="502" y="124" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">SNPE SDK...</text></switch></g></g><g><rect x="427" y="280" width="150" height="80" rx="12" ry="12" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 320px; margin-left: 428px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform dependent</b><br>SnpeHtpPrepare.dll<br><div>SnpeHtpV73Stub.dll<br>SnpeHtpV73Skel.so<br></div></div></div></div></foreignobject><text x="502" y="324" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform dependent...</text></switch></g></g><g><rect x="442" y="150" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 180px; margin-left: 443px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform agnostic</b><div><span style="background-color: initial;">SNPE.dll</span><br></div></div></div></div></foreignobject><text x="502" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform agnostic...</text></switch></g></g><g><rect x="402" y="460" width="210" height="40" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 480px; margin-left: 403px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 36px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Driver Package</div></div></div></foreignobject><text x="507" y="484" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Driver Package</text></switch></g></g><g><rect x="437" y="520" width="150" height="80" rx="12" ry="12" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 560px; margin-left: 438px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform dependent</b><div><span style="background-color: initial;">HtpUsrDrv.dll</span><br></div></div></div></div></foreignobject><text x="512" y="564" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform dependent...</text></switch></g></g><g><rect x="427" y="610" width="170" height="90" rx="13.5" ry="13.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 655px; margin-left: 428px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Platform dependent</b><br>QnnHtpPrepareDrv.dll<br><div>QnnHtpV73StubDrv.dll<br>libQnnHtpV73SkelDrv.so<br></div></div></div></div></foreignobject><text x="512" y="659" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Platform dependent...</text></switch></g></g><g><path d="M 187 210 L 187 253.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 187 258.88 L 183.5 251.88 L 187 253.63 L 190.5 251.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 236px; margin-left: 188px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">traditional</div></div></div></foreignobject><text x="188" y="239" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">traditional</text></switch></g></g><g><path d="M 502 210 L 502 226.64" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 502 231.89 L 498.5 224.89 L 502 226.64 L 505.5 224.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><path d="M 492 240 L 502 234.23 L 512 240 L 502 245.77 L 492 240 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><path d="M 502.22 245.89 L 502.04 273.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 502.01 278.88 L 498.55 271.86 L 502.04 273.63 L 505.55 271.9 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 262px; margin-left: 502px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">traditional</div></div></div></foreignobject><text x="502" y="266" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">traditional</text></switch></g></g><g><rect x="367" y="230" width="120" height="30" fill="none" stroke="none" pointer-events="all"></rect></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 245px; margin-left: 368px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center; max-height: 26px; overflow:;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">select<div>traditional or driver </div></div></div></div></foreignobject><text x="427" y="249" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">select...</text></switch></g></g><g><path d="M 512 240 L 687 240 L 687 560 L 654.49 559.26" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"></path><path d="M 649.24 559.15 L 656.32 555.8 L 654.49 559.26 L 656.16 562.8 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"></path></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignobject pointer-events="none" width="100%" height="100%" requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 382px; margin-left: 689px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">driver path</div></div></div></foreignobject><text x="689" y="385" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">driver path</text></switch></g></g></g><switch><g requiredfeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"></g><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>

- Pre-driver:
    - - Traditional path only; applications build with the SNPE SDK and bundle the SNPE HTP platform dependent libraries

- Post-driver:
    - - Traditional and HNRD paths available; the application can choose which path to use
- Traditional path; applications build with the SNPE SDK and bundle the SNPE HTP platform dependent libraries with the application (Default – same as pre-driver)
- HNRD path; applications build with the SNPE SDK, but utilize the platform dependent libraries installed on the system
- Note: there is no difference in the build step between traditional and HNRD paths. In addition, the bundling and choosing between traditional and HNRD paths is applicable to both QNN and SNPE

In other words, if an application bundles the SNPE HTP platform dependent libraries (i.e., SnpeHtpV73Stub.dll and SnpeHtpV73Skel.so), it will default to choose the traditional path. Otherwise, if the platform dependent libraries are not bundled, it will fall back to choose the HNRD path.

The following sample logs illustrate the HNRD path being applied:

1  0.0ms [WARNING] QnnDsp <W> Traditional path not available. Switching to user driver path
    2  0.0ms [WARNING] QnnDsp <W> HTP user driver is loaded. Switched to user driver path
    Copy to clipboard

**Compatibility Support**

The minimum QNN and SNPE version is 2.22.2.
Applications can be built with older or newer versions of the SNPE SDK and they will still work on the device.
Depending on the HNRD version installed on the system, new features may not be supported.

Note

`Traditional` and `HNRD` paths can co-exist on the platform and each application independently selects whether to use traditional or HNRD paths.

**Model Cache Management**

When utilizing general/init\_caching:Init Caching with HNRD, it requires special attention on managing the caches.
When using HNRD path, online prepare and cache loading are done by HNRD since they are platform-dependent.
A cache generated by one version of HNRD might not be able to run on HNRD with an older version or might not utilize all software / hardware capabilities on HNRD with a new version.
It is required to check the compatibility of saved caches with the HNRD every time before loading, since the HNRD installed on a device can be upgraded (or downgraded) at any time.

Snpe\_SNPEBuilder\_Build() and SNPEBuilder::build() check the compatibility automatically before loading the caches.
Calling Snpe\_SNPEBuilder\_SetCacheCompatiblityMode() and SNPEBuilder::setCacheCompatibilityMode() can control whether to fail sub-optimal caches during compatibility check.
Snpe\_SNPEBuilder\_ValidateCache() and SNPEBuilder::validateCache() do a similar check as Snpe\_SNPEBuilder\_Build() and SNPEBuilder::build() except they won’t create SNPE instances.

If a cache fails to pass the compatibility check, performing online prepare to create another valid cache can solve the problem.
To reduce the latency impact of online prepare, continue execution with the original sub-optimal cache while doing online prepare in a background thread and switch to the new cache once online prepare is done.

Note that online prepare may not succeed. This can happen when a model converted by a newer SDK version uses features that are not supported by the HNRD. In such a case, upgrade the HNRD.
The following example shows how to handle cache management.

1Snpe_SNPE_Handle_t snpeHandle;  // SNPE used to do inference
     2std::future<Snpe_SNPEBuilder_Handle_t>
     3    futureSnpeHandle;  // SNPE being created in background
     4
     5Snpe_DlContainer_Handle_t containerHandle =
     6    Snpe_DlContainer_Open(dlcPath.string().c_str());
     7Snpe_RuntimeList_Handle_t runtimeListHandle = Snpe_RuntimeList_Create();
     8Snpe_SNPEBuilder_Handle_t snpeBuilderHandle = Snpe_SNPEBuilder_Create(containerHandle);
     9
    10// Add DSP runtime.
    11Snpe_RuntimeList_Add(runtimeListHandle, SNPE_RUNTIME_DSP);
    12Snpe_SNPEBuilder_SetRuntimeProcessorOrder(snpeBuilderHandle, runtimeListHandle);
    13
    14// Set compatbility mode to strict to check sub-optimality.
    15Snpe_SNPEBuilder_SetCacheCompatibilityMode(snpeBuilderHandle,
    16                                           SNPE_CACHE_COMPATIBILITY_STRICT);
    17
    18// Create SNPE.
    19snpeHandle = Snpe_SNPEBuilder_Build(snpeBuilderHandle);
    20
    21if (snpeHandle == NULL) {
    22  Snpe_ErrorCode_t error = Snpe_ErrorCode_getLastErrorCode();
    23  if (error == SNPE_ERRORCODE_DLCACHING_SUBOPTIMAL_CACHE) {
    24    // The cache is valid but sub-optimal.
    25    // Continue exection with this cache.
    26    // Set compatiblity mode to permissive to bypass sub-optimality check.
    27    Snpe_SNPEBuilder_SetCacheCompatibilityMode(snpeBuilderHandle,
    28                                               SNPE_CACHE_COMPATIBILITY_PERMISSIVE);
    29    snpeHandle = Snpe_SNPEBuilder_Build(snpeBuilderHandle);
    30
    31    // Create another SNPE with better performance in background thread.
    32    // Set compatibility mode to generate new cache.
    33    Snpe_SNPEBuilder_SetCacheCompatibilityMode(
    34        snpeBuilderHandle, SNPE_CACHE_COMPATIBILITY_ALWAYS_GENERATE_NEW_CACHE);
    35    // Enable init cache mode to save the cache later.
    36    Snpe_SNPEBuilder_SetInitCacheMode(snpeBuilderHandle, 1);
    37    futureSnpeHandle =
    38        std::async(std::launch::async, Snpe_SNPEBuilder_Build, snpeBuilderHandle);
    39  } else if (error == SNPE_ERRORCODE_QNN_CONTEXT_ERROR_CREATE_FROM_BINARY ||
    40             error == SNPE_ERRORCODE_QNN_COMMON_ERROR_NOT_SUPPORTED) {
    41    // The cache cannot run.
    42    // Force generate a new cache.
    43    Snpe_SNPEBuilder_SetCacheCompatibilityMode(
    44        snpeBuilderHandle, SNPE_CACHE_COMPATIBILITY_ALWAYS_GENERATE_NEW_CACHE);
    45    snpeHandle = Snpe_SNPEBuilder_Build(snpeBuilderHandle);
    46
    47    if (snpeHandle == NULL) {
    48      // If it still fails, one possible reason could be HNRD is too old for the
    49      // graph. In such case, prompt the users to upgrade HNRD.
    50      cleanUp(containerHandle, runtimeListHandle, snpeBuilderHandle);
    51      message(ERROR, "The HNRD is too old. Please install latest HNRD.");
    52    }
    53  } else {
    54    cleanUp(containerHandle, runtimeListHandle, snpeBuilderHandle);
    55    throw std::runtime_error("Skip handling of other errors.");
    56  }
    57}
    58
    59// Do inference.
    60while (waitInputData()) {
    61  // Switch to new SNPE if prepare is done.
    62  if (futureSnpeHandle.valid() &&
    63      futureSnpeHandle.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
    64    // Clean up the original SNPE.
    65    Snpe_SNPE_Delete(snpeHandle);
    66    // Switch to the new SNPE.
    67    snpeHandle = futureSnpeHandle.get();
    68    // Save the new cache to DLC.
    69    Snpe_DlContainer_Save(containerHandle, dlcPath.string().c_str());
    70  }
    71
    72  doInference(snpeHandle);
    73}
    74
    75// Clean up.
    76Snpe_SNPE_Delete(snpeHandle);
    77cleanUp(containerHandle, runtimeListHandle, snpeBuilderHandle);
    Copy to clipboard

Last Published: Jun 04, 2026

[Previous Topic
Windows ARM64X Support](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/arm64x_support.md) [Next Topic
Windows Error Reporting](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/general_wer.md)