Skip to content

Commit a737f89

Browse files
Merge pull request #1331 from IntelPython/experimental/local_accessors
A sycl::local_accessor-like API for numba-dpex kernel 68b1f39
1 parent 74b6d8b commit a737f89

File tree

13 files changed

+532
-12
lines changed

13 files changed

+532
-12
lines changed

dev/.buildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Sphinx build info version 1
22
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3-
config: 1bf4aa731798b280d7dd0d017aa0e089
3+
config: b1de6db79b513c9a81d857328961eb39
44
tags: 645f666f9bcd5a90fca523b33c5a78b7

dev/_sources/autoapi/numba_dpex/experimental/models/index.rst.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ Overview
2525
- Data model for AtomicRefType.
2626
* - :py:obj:`EmptyStructModel <numba_dpex.experimental.models.EmptyStructModel>`
2727
- Data model that does not take space. Intended to be used with types that
28+
* - :py:obj:`DpctlMDLocalAccessorModel <numba_dpex.experimental.models.DpctlMDLocalAccessorModel>`
29+
- Data model to represent DpctlMDLocalAccessorType.
30+
* - :py:obj:`LocalAccessorModel <numba_dpex.experimental.models.LocalAccessorModel>`
31+
- Data model for the LocalAccessor type when used in a host-only function.
2832

2933

3034

@@ -59,6 +63,29 @@ Classes
5963

6064

6165

66+
.. py:class:: DpctlMDLocalAccessorModel(dmm, fe_type)
67+
68+
Bases: :py:obj:`numba.core.datamodel.models.StructModel`
69+
70+
Data model to represent DpctlMDLocalAccessorType.
71+
72+
Must be the same structure as
73+
dpctl/syclinterface/dpctl_sycl_queue_interface.h::MDLocalAccessor.
74+
75+
Structure intended to be used only on host side of the kernel call.
76+
77+
78+
79+
80+
.. py:class:: LocalAccessorModel(dmm, fe_type)
81+
82+
Bases: :py:obj:`numba.core.datamodel.models.StructModel`
83+
84+
Data model for the LocalAccessor type when used in a host-only function.
85+
86+
87+
88+
6289

6390
Attributes
6491
----------

dev/_sources/autoapi/numba_dpex/experimental/typeof/index.rst.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ Overview
3030
- Registers the type inference implementation function for a
3131
* - :py:obj:`typeof_nditem <numba_dpex.experimental.typeof.typeof_nditem>`\ (val, c)
3232
- Registers the type inference implementation function for a
33+
* - :py:obj:`typeof_local_accessor <numba_dpex.experimental.typeof.typeof_local_accessor>`\ (val, c)
34+
- Returns a ``numba_dpex.experimental.dpctpp_types.LocalAccessorType``
3335

3436

3537

@@ -85,6 +87,17 @@ Functions
8587
instance.
8688

8789

90+
.. py:function:: typeof_local_accessor(val: numba_dpex.kernel_api.LocalAccessor, c) -> numba_dpex.core.types.kernel_api.local_accessor.LocalAccessorType
91+
92+
Returns a ``numba_dpex.experimental.dpctpp_types.LocalAccessorType``
93+
instance for a Python LocalAccessor object.
94+
:param val: Instance of the LocalAccessor type.
95+
:type val: LocalAccessor
96+
:param c: Numba typing context used for type inference.
97+
98+
Returns: LocalAccessorType object corresponding to the LocalAccessor object.
99+
100+
88101

89102

90103

dev/_sources/autoapi/numba_dpex/kernel_api/index.rst.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Overview
2929
- Analogue to the ``sycl::item`` class.
3030
* - :py:obj:`NdItem <numba_dpex.kernel_api.NdItem>`
3131
- Analogue to the ``sycl::nd_item`` class.
32+
* - :py:obj:`LocalAccessor <numba_dpex.kernel_api.LocalAccessor>`
33+
- The ``LocalAccessor`` class is analogous to SYCL's ``local_accessor``
3234
* - :py:obj:`AddressSpace <numba_dpex.kernel_api.AddressSpace>`
3335
- An enumeration of the supported address space values.
3436
* - :py:obj:`MemoryOrder <numba_dpex.kernel_api.MemoryOrder>`
@@ -468,6 +470,16 @@ Classes
468470

469471

470472

473+
.. py:class:: LocalAccessor(shape, dtype)
474+
475+
The ``LocalAccessor`` class is analogous to SYCL's ``local_accessor``
476+
class. The class acts a s proxy to allocating device local memory and
477+
accessing that memory from within a :func:`numba_dpex.kernel` decorated
478+
function.
479+
480+
481+
482+
471483
.. py:class:: AddressSpace
472484
473485
Bases: :py:obj:`numba_dpex.kernel_api.flag_enum.FlagEnum`
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
:orphan:
3+
4+
numba_dpex.kernel_api.local_accessor
5+
====================================
6+
7+
.. py:module:: numba_dpex.kernel_api.local_accessor
8+
9+
.. autoapi-nested-parse::
10+
11+
Implements a Python analogue to SYCL's local_accessor class. The class is
12+
intended to be used in pure Python code when prototyping a kernel function
13+
and to be passed to an actual kernel function for local memory allocation.
14+
15+
16+
17+
Overview
18+
--------
19+
20+
.. list-table:: Classes
21+
:header-rows: 0
22+
:widths: auto
23+
:class: summarytable
24+
25+
* - :py:obj:`LocalAccessor <numba_dpex.kernel_api.local_accessor.LocalAccessor>`
26+
- The ``LocalAccessor`` class is analogous to SYCL's ``local_accessor``
27+
28+
29+
30+
31+
Classes
32+
-------
33+
34+
.. py:class:: LocalAccessor(shape, dtype)
35+
36+
The ``LocalAccessor`` class is analogous to SYCL's ``local_accessor``
37+
class. The class acts a s proxy to allocating device local memory and
38+
accessing that memory from within a :func:`numba_dpex.kernel` decorated
39+
function.
40+
41+
42+
43+
44+
45+
46+

dev/autoapi/numba_dpex/experimental/models/index.html

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,12 @@ <h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">
261261
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.experimental.models.EmptyStructModel" title="numba_dpex.experimental.models.EmptyStructModel"><code class="xref py py-obj docutils literal notranslate"><span class="pre">EmptyStructModel</span></code></a></p></td>
262262
<td><p>Data model that does not take space. Intended to be used with types that</p></td>
263263
</tr>
264+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.experimental.models.DpctlMDLocalAccessorModel" title="numba_dpex.experimental.models.DpctlMDLocalAccessorModel"><code class="xref py py-obj docutils literal notranslate"><span class="pre">DpctlMDLocalAccessorModel</span></code></a></p></td>
265+
<td><p>Data model to represent DpctlMDLocalAccessorType.</p></td>
266+
</tr>
267+
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.experimental.models.LocalAccessorModel" title="numba_dpex.experimental.models.LocalAccessorModel"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LocalAccessorModel</span></code></a></p></td>
268+
<td><p>Data model for the LocalAccessor type when used in a host-only function.</p></td>
269+
</tr>
264270
</tbody>
265271
</table>
266272
</div>
@@ -292,6 +298,23 @@ <h2>Classes<a class="headerlink" href="#classes" title="Link to this heading">#<
292298
are presented only at typing stage and not represented physically.</p>
293299
</dd></dl>
294300

301+
<dl class="py class">
302+
<dt class="sig sig-object py" id="numba_dpex.experimental.models.DpctlMDLocalAccessorModel">
303+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DpctlMDLocalAccessorModel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dmm</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fe_type</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#numba_dpex.experimental.models.DpctlMDLocalAccessorModel" title="Link to this definition">#</a></dt>
304+
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">numba.core.datamodel.models.StructModel</span></code></p>
305+
<p>Data model to represent DpctlMDLocalAccessorType.</p>
306+
<p>Must be the same structure as
307+
dpctl/syclinterface/dpctl_sycl_queue_interface.h::MDLocalAccessor.</p>
308+
<p>Structure intended to be used only on host side of the kernel call.</p>
309+
</dd></dl>
310+
311+
<dl class="py class">
312+
<dt class="sig sig-object py" id="numba_dpex.experimental.models.LocalAccessorModel">
313+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">LocalAccessorModel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dmm</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fe_type</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#numba_dpex.experimental.models.LocalAccessorModel" title="Link to this definition">#</a></dt>
314+
<dd><p>Bases: <code class="xref py py-obj docutils literal notranslate"><span class="pre">numba.core.datamodel.models.StructModel</span></code></p>
315+
<p>Data model for the LocalAccessor type when used in a host-only function.</p>
316+
</dd></dl>
317+
295318
</section>
296319
<section id="attributes">
297320
<h2>Attributes<a class="headerlink" href="#attributes" title="Link to this heading">#</a></h2>
@@ -348,6 +371,8 @@ <h2>Attributes<a class="headerlink" href="#attributes" title="Link to this headi
348371
<li><a class="reference internal" href="#classes">Classes</a><ul>
349372
<li><a class="reference internal" href="#numba_dpex.experimental.models.AtomicRefModel"><code class="docutils literal notranslate"><span class="pre">AtomicRefModel</span></code></a></li>
350373
<li><a class="reference internal" href="#numba_dpex.experimental.models.EmptyStructModel"><code class="docutils literal notranslate"><span class="pre">EmptyStructModel</span></code></a></li>
374+
<li><a class="reference internal" href="#numba_dpex.experimental.models.DpctlMDLocalAccessorModel"><code class="docutils literal notranslate"><span class="pre">DpctlMDLocalAccessorModel</span></code></a></li>
375+
<li><a class="reference internal" href="#numba_dpex.experimental.models.LocalAccessorModel"><code class="docutils literal notranslate"><span class="pre">LocalAccessorModel</span></code></a></li>
351376
</ul>
352377
</li>
353378
<li><a class="reference internal" href="#attributes">Attributes</a><ul>

dev/autoapi/numba_dpex/experimental/typeof/index.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ <h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">
267267
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_nditem" title="numba_dpex.experimental.typeof.typeof_nditem"><code class="xref py py-obj docutils literal notranslate"><span class="pre">typeof_nditem</span></code></a>(val, c)</p></td>
268268
<td><p>Registers the type inference implementation function for a</p></td>
269269
</tr>
270+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_local_accessor" title="numba_dpex.experimental.typeof.typeof_local_accessor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">typeof_local_accessor</span></code></a>(val, c)</p></td>
271+
<td><p>Returns a <code class="docutils literal notranslate"><span class="pre">numba_dpex.experimental.dpctpp_types.LocalAccessorType</span></code></p></td>
272+
</tr>
270273
</tbody>
271274
</table>
272275
</div>
@@ -346,6 +349,17 @@ <h2>Functions<a class="headerlink" href="#functions" title="Link to this heading
346349
</dl>
347350
</dd></dl>
348351

352+
<dl class="py function">
353+
<dt class="sig sig-object py" id="numba_dpex.experimental.typeof.typeof_local_accessor">
354+
<span class="sig-name descname"><span class="pre">typeof_local_accessor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">val</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../../kernel_api/index.html#numba_dpex.kernel_api.LocalAccessor" title="numba_dpex.kernel_api.LocalAccessor"><span class="pre">numba_dpex.kernel_api.LocalAccessor</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">c</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">numba_dpex.core.types.kernel_api.local_accessor.LocalAccessorType</span></span></span><a class="headerlink" href="#numba_dpex.experimental.typeof.typeof_local_accessor" title="Link to this definition">#</a></dt>
355+
<dd><p>Returns a <code class="docutils literal notranslate"><span class="pre">numba_dpex.experimental.dpctpp_types.LocalAccessorType</span></code>
356+
instance for a Python LocalAccessor object.
357+
:param val: Instance of the LocalAccessor type.
358+
:type val: LocalAccessor
359+
:param c: Numba typing context used for type inference.</p>
360+
<p>Returns: LocalAccessorType object corresponding to the LocalAccessor object.</p>
361+
</dd></dl>
362+
349363
</section>
350364
</section>
351365

@@ -396,6 +410,7 @@ <h2>Functions<a class="headerlink" href="#functions" title="Link to this heading
396410
<li><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_group"><code class="docutils literal notranslate"><span class="pre">typeof_group()</span></code></a></li>
397411
<li><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_item"><code class="docutils literal notranslate"><span class="pre">typeof_item()</span></code></a></li>
398412
<li><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_nditem"><code class="docutils literal notranslate"><span class="pre">typeof_nditem()</span></code></a></li>
413+
<li><a class="reference internal" href="#numba_dpex.experimental.typeof.typeof_local_accessor"><code class="docutils literal notranslate"><span class="pre">typeof_local_accessor()</span></code></a></li>
399414
</ul>
400415
</li>
401416
</ul>

dev/autoapi/numba_dpex/kernel_api/index.html

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,22 +269,25 @@ <h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">
269269
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.NdItem" title="numba_dpex.kernel_api.NdItem"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NdItem</span></code></a></p></td>
270270
<td><p>Analogue to the <code class="docutils literal notranslate"><span class="pre">sycl::nd_item</span></code> class.</p></td>
271271
</tr>
272-
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.AddressSpace" title="numba_dpex.kernel_api.AddressSpace"><code class="xref py py-obj docutils literal notranslate"><span class="pre">AddressSpace</span></code></a></p></td>
272+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.LocalAccessor" title="numba_dpex.kernel_api.LocalAccessor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LocalAccessor</span></code></a></p></td>
273+
<td><p>The <code class="docutils literal notranslate"><span class="pre">LocalAccessor</span></code> class is analogous to SYCL’s <code class="docutils literal notranslate"><span class="pre">local_accessor</span></code></p></td>
274+
</tr>
275+
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.AddressSpace" title="numba_dpex.kernel_api.AddressSpace"><code class="xref py py-obj docutils literal notranslate"><span class="pre">AddressSpace</span></code></a></p></td>
273276
<td><p>An enumeration of the supported address space values.</p></td>
274277
</tr>
275-
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.MemoryOrder" title="numba_dpex.kernel_api.MemoryOrder"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MemoryOrder</span></code></a></p></td>
278+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.MemoryOrder" title="numba_dpex.kernel_api.MemoryOrder"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MemoryOrder</span></code></a></p></td>
276279
<td><p>An enumeration of the supported <code class="docutils literal notranslate"><span class="pre">sycl::memory_order</span></code> values.</p></td>
277280
</tr>
278-
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.MemoryScope" title="numba_dpex.kernel_api.MemoryScope"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MemoryScope</span></code></a></p></td>
281+
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.MemoryScope" title="numba_dpex.kernel_api.MemoryScope"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MemoryScope</span></code></a></p></td>
279282
<td><p>An enumeration of the supported <code class="docutils literal notranslate"><span class="pre">sycl::memory_scope</span></code> values.</p></td>
280283
</tr>
281-
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.PrivateArray" title="numba_dpex.kernel_api.PrivateArray"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PrivateArray</span></code></a></p></td>
284+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.PrivateArray" title="numba_dpex.kernel_api.PrivateArray"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PrivateArray</span></code></a></p></td>
282285
<td><p>The <code class="docutils literal notranslate"><span class="pre">PrivateArray</span></code> class is an simple version of array intended to be used</p></td>
283286
</tr>
284-
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.NdRange" title="numba_dpex.kernel_api.NdRange"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NdRange</span></code></a></p></td>
287+
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.NdRange" title="numba_dpex.kernel_api.NdRange"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NdRange</span></code></a></p></td>
285288
<td><p>A class to encapsulate all kernel launch parameters.</p></td>
286289
</tr>
287-
<tr class="row-even"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.Range" title="numba_dpex.kernel_api.Range"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Range</span></code></a></p></td>
290+
<tr class="row-odd"><td><p><a class="reference internal" href="#numba_dpex.kernel_api.Range" title="numba_dpex.kernel_api.Range"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Range</span></code></a></p></td>
288291
<td><p>A data structure to encapsulate a single kernel launch parameter.</p></td>
289292
</tr>
290293
</tbody>
@@ -828,6 +831,15 @@ <h2>Classes<a class="headerlink" href="#classes" title="Link to this heading">#<
828831

829832
</dd></dl>
830833

834+
<dl class="py class">
835+
<dt class="sig sig-object py" id="numba_dpex.kernel_api.LocalAccessor">
836+
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">LocalAccessor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shape</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dtype</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#numba_dpex.kernel_api.LocalAccessor" title="Link to this definition">#</a></dt>
837+
<dd><p>The <code class="docutils literal notranslate"><span class="pre">LocalAccessor</span></code> class is analogous to SYCL’s <code class="docutils literal notranslate"><span class="pre">local_accessor</span></code>
838+
class. The class acts a s proxy to allocating device local memory and
839+
accessing that memory from within a <code class="xref py py-func docutils literal notranslate"><span class="pre">numba_dpex.kernel()</span></code> decorated
840+
function.</p>
841+
</dd></dl>
842+
831843
<dl class="py class">
832844
<dt class="sig sig-object py" id="numba_dpex.kernel_api.AddressSpace">
833845
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">AddressSpace</span></span><a class="headerlink" href="#numba_dpex.kernel_api.AddressSpace" title="Link to this definition">#</a></dt>
@@ -1383,6 +1395,7 @@ <h2>Functions<a class="headerlink" href="#functions" title="Link to this heading
13831395
<li><a class="reference internal" href="#numba_dpex.kernel_api.NdItem.get_group"><code class="docutils literal notranslate"><span class="pre">NdItem.get_group()</span></code></a></li>
13841396
</ul>
13851397
</li>
1398+
<li><a class="reference internal" href="#numba_dpex.kernel_api.LocalAccessor"><code class="docutils literal notranslate"><span class="pre">LocalAccessor</span></code></a></li>
13861399
<li><a class="reference internal" href="#numba_dpex.kernel_api.AddressSpace"><code class="docutils literal notranslate"><span class="pre">AddressSpace</span></code></a><ul>
13871400
<li><a class="reference internal" href="#numba_dpex.kernel_api.AddressSpace.PRIVATE"><code class="docutils literal notranslate"><span class="pre">AddressSpace.PRIVATE</span></code></a></li>
13881401
<li><a class="reference internal" href="#numba_dpex.kernel_api.AddressSpace.GLOBAL"><code class="docutils literal notranslate"><span class="pre">AddressSpace.GLOBAL</span></code></a></li>

0 commit comments

Comments
 (0)