Skip to content

Commit

Permalink
updated documents to include latest information (#8492)
Browse files Browse the repository at this point in the history
Signed-off-by: Manoj Takasi <[email protected]>
Co-authored-by: Manoj Takasi <[email protected]>
  • Loading branch information
ManojTakasi and Manoj Takasi authored Oct 4, 2024
1 parent 9460d9c commit 493dca6
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
Binary file modified master/html/.doctrees/environment.pickle
Binary file not shown.
Binary file modified master/html/.doctrees/xrt_native_apis.doctree
Binary file not shown.
36 changes: 36 additions & 0 deletions master/html/_sources/xrt_native_apis.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,42 @@ The following code shows a sample example with a single input/output GMIO/Extern
auto xrt::aie::buffer out_buffer = xrt::aie::buffer(device, uuid,"gr.out1");
out_buffer.sync(out_bo, XCL_BO_SYNC_BO_AIE_TO_GMIO, SIZE * sizeof(float),0);

This class has overloaded member function ``xrt::aie::buffer::async(...)`` that can be used to initiate an asynchronize operation to synchronize the xrt::bo buffer object

xrt::aie::buffer::async(xrt::bo bo, ...) initiate an asynchronize operation between xrt::aie::buffer (GMIO/External Buffer) & xrt::bo (Global Memory)

xrt::aie::buffer::async(xrt::bo ping,xrt::bo pong, ...) initiate an asynchronize operation between xrt::aie::buffer (GMIO/External Buffer) & ping/pong xrt::bo objects

xrt::aie::buffer::wait() waits for the asynchronize operation to complete

The following code shows a sample example with a single input/output GMIO/External Buffer. Data gets transferred from global buffer "in_bo" to "gr.in1"

.. code:: c++
:number-lines: 1

auto device = xrt::aie::device(0);
auto uuid = device.load_xclbin(xclbin-filename);

// Create Buffer in DDR/Global memory & prepare input
auto in_bo = xrt::aie::bo (device, SIZE * sizeof (float), 0, 0);
auto inp_bo_map = in_bo.map<float *>();
std::copy(my_float_array,my_float_array+SIZE,inp_bo_map);

// Create Buffer in DDR/Global memory to store output
auto out_bo = xrt::aie::bo (device, SIZE * sizeof (float), 0, 0);
auto out_bo_map = out_bo.map<float *>();

// create GMIO/External Buffer object for input & sync from in_bo
auto xrt::aie::buffer in_buffer = xrt::aie::buffer(device, uuid,"gr.in1");
in_buffer.async(in_bo, XCL_BO_SYNC_BO_GMIO_TO_AIE, SIZE * sizeof(float),0);

//run your graphs which uses output GMIO/External buffer

// create GMIO/External Buffer object for output & sync from out_bo
auto xrt::aie::buffer out_buffer = xrt::aie::buffer(device, uuid,"gr.out1");
out_buffer.async(out_bo, XCL_BO_SYNC_BO_AIE_TO_GMIO, SIZE * sizeof(float),0);
out_buffer.wait();

Ping Pong buffers
~~~~~~~~~~~~~~~~~
The following code shows ping-pong buffer example.This shows an example with a ping/ping buffer being set on one of External buffer
Expand Down
2 changes: 1 addition & 1 deletion master/html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -331,4 +331,4 @@ <h1>Xilinx® Runtime (XRT) Architecture<a class="headerlink" href="#xilinx-runti


</body>
</html>
</html>
2 changes: 1 addition & 1 deletion master/html/searchindex.js

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions master/html/xrt_native_apis.html
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,35 @@ <h2>GMIOs &amp; External Buffers<a class="headerlink" href="#gmios-external-buff
<span class="linenos">21</span><span class="w"> </span><span class="n">out_buffer</span><span class="p">.</span><span class="n">sync</span><span class="p">(</span><span class="n">out_bo</span><span class="p">,</span><span class="w"> </span><span class="n">XCL_BO_SYNC_BO_AIE_TO_GMIO</span><span class="p">,</span><span class="w"> </span><span class="n">SIZE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">),</span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<p>This class has overloaded member function <code class="docutils literal notranslate"><span class="pre">xrt::aie::buffer::async(...)</span></code> that can be used to initiate an asynchronize operation to synchronize the xrt::bo buffer object</p>
<p>xrt::aie::buffer::async(xrt::bo bo, …) initiate an asynchronize operation between xrt::aie::buffer (GMIO/External Buffer) &amp; xrt::bo (Global Memory)</p>
<p>xrt::aie::buffer::async(xrt::bo ping,xrt::bo pong, …) initiate an asynchronize operation between xrt::aie::buffer (GMIO/External Buffer) &amp; ping/pong xrt::bo objects</p>
<p>xrt::aie::buffer::wait() waits for the asynchronize operation to complete</p>
<p>The following code shows a sample example with a single input/output GMIO/External Buffer. Data gets transferred from global buffer “in_bo” to “gr.in1”</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">device</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
<span class="linenos"> 2</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">uuid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">load_xclbin</span><span class="p">(</span><span class="n">xclbin</span><span class="o">-</span><span class="n">filename</span><span class="p">);</span><span class="w"></span>
<span class="linenos"> 3</span>
<span class="linenos"> 4</span><span class="w"> </span><span class="c1">// Create Buffer in DDR/Global memory &amp; prepare input</span>
<span class="linenos"> 5</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">in_bo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">bo</span><span class="w"> </span><span class="p">(</span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="n">SIZE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
<span class="linenos"> 6</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">inp_bo_map</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">in_bo</span><span class="p">.</span><span class="n">map</span><span class="o">&lt;</span><span class="kt">float</span><span class="w"> </span><span class="o">*&gt;</span><span class="p">();</span><span class="w"></span>
<span class="linenos"> 7</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">copy</span><span class="p">(</span><span class="n">my_float_array</span><span class="p">,</span><span class="n">my_float_array</span><span class="o">+</span><span class="n">SIZE</span><span class="p">,</span><span class="n">inp_bo_map</span><span class="p">);</span><span class="w"></span>
<span class="linenos"> 8</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="c1">// Create Buffer in DDR/Global memory to store output</span>
<span class="linenos">10</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">out_bo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">bo</span><span class="w"> </span><span class="p">(</span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="n">SIZE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="p">),</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
<span class="linenos">11</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">out_bo_map</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out_bo</span><span class="p">.</span><span class="n">map</span><span class="o">&lt;</span><span class="kt">float</span><span class="w"> </span><span class="o">*&gt;</span><span class="p">();</span><span class="w"></span>
<span class="linenos">12</span>
<span class="linenos">13</span><span class="w"> </span><span class="c1">// create GMIO/External Buffer object for input &amp; sync from in_bo</span>
<span class="linenos">14</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">buffer</span><span class="w"> </span><span class="n">in_buffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">buffer</span><span class="p">(</span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="n">uuid</span><span class="p">,</span><span class="s">&quot;gr.in1&quot;</span><span class="p">);</span><span class="w"></span>
<span class="linenos">15</span><span class="w"> </span><span class="n">in_buffer</span><span class="p">.</span><span class="n">async</span><span class="p">(</span><span class="n">in_bo</span><span class="p">,</span><span class="w"> </span><span class="n">XCL_BO_SYNC_BO_GMIO_TO_AIE</span><span class="p">,</span><span class="w"> </span><span class="n">SIZE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">),</span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
<span class="linenos">16</span>
<span class="linenos">17</span><span class="w"> </span><span class="c1">//run your graphs which uses output GMIO/External buffer</span>
<span class="linenos">18</span>
<span class="linenos">19</span><span class="w"> </span><span class="c1">// create GMIO/External Buffer object for output &amp; sync from out_bo</span>
<span class="linenos">20</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">buffer</span><span class="w"> </span><span class="n">out_buffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xrt</span><span class="o">::</span><span class="n">aie</span><span class="o">::</span><span class="n">buffer</span><span class="p">(</span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="n">uuid</span><span class="p">,</span><span class="s">&quot;gr.out1&quot;</span><span class="p">);</span><span class="w"></span>
<span class="linenos">21</span><span class="w"> </span><span class="n">out_buffer</span><span class="p">.</span><span class="n">async</span><span class="p">(</span><span class="n">out_bo</span><span class="p">,</span><span class="w"> </span><span class="n">XCL_BO_SYNC_BO_AIE_TO_GMIO</span><span class="p">,</span><span class="w"> </span><span class="n">SIZE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">float</span><span class="p">),</span><span class="mi">0</span><span class="p">);</span><span class="w"></span>
<span class="linenos">22</span><span class="w"> </span><span class="n">out_buffer</span><span class="p">.</span><span class="n">wait</span><span class="p">();</span><span class="w"></span>
</pre></div>
</div>
<section id="ping-pong-buffers">
<h3>Ping Pong buffers<a class="headerlink" href="#ping-pong-buffers" title="Permalink to this headline">¶</a></h3>
<p>The following code shows ping-pong buffer example.This shows an example with a ping/ping buffer being set on one of External buffer</p>
Expand Down

0 comments on commit 493dca6

Please sign in to comment.