Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Documentation] Add a comparison between SYCL and numba-dpex. #1417

Merged
merged 1 commit into from
Apr 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Data Parallel Extension for Numba*
user_guide/index
autoapi/index
config_options
supported_sycl_features
experimental/index
useful_links

Expand Down
216 changes: 216 additions & 0 deletions docs/source/supported_sycl_features.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
.. _sycl-vs-dpex:


SYCL* and numba-dpex Feature Comparison
#######################################

The numba-dpex kernel API is developed with the aim of providing a SYCL*-like
kernel programming features directly in Python. The page provides a summary of
the SYCL* kernel programming features that are currently supported in
numba-dpex's kernel API.

Numba-dpex does not implement wrappers or analogues of SYCL's host-callable
runtime API. Such features are provided by the ``dpctl`` package.

.. list-table:: Ranges and index space identifiers
:widths: 25 25 50
:header-rows: 1

* - SYCL* class
- numba-dpex class
- Notes
* - ``range``
- :class:`numba_dpex.kernel_api.Range`
-
* - ``nd_range``
- :class:`numba_dpex.kernel_api.NdRange`
-
* - ``id``
-
- Not directly supported. All functions that return an ``id`` object in
SYCL have versions in numba-dpex that require the dimension to be
explicitly specified. Equivalent to ``get_id.get(dim)``.
* - ``item``
- :class:`numba_dpex.kernel_api.Item`
-
* - ``nd_item``
- :class:`numba_dpex.kernel_api.NdItem`
-
* - ``h_item``
-
- Not supported. There is no corresponding API in numba-dpex for
``group::parallel_for_work_item`` or ``parallel_for_work_group``.
* - ``group``
- :class:`numba_dpex.kernel_api.Group`
-
* - ``sub_group``
-
- Not supported

.. list-table:: Reduction variables
:widths: 25 25 50
:header-rows: 1

* - SYCL* class
- numba-dpex class
- Notes
* - ``reduction``
-
- Not supported
* - ``reducer``
-
- Not supported

.. list-table:: Invoking kernels
:widths: 25 25 50
:header-rows: 1

* - SYCL* function for invoking kernels
- numba-dpex function for invoking kernels
- Notes
* - ``single_task``
-
- Not supported
* - ``parallel_for``
- :func:`numba_dpex.core.kernel_launcher.call_kernel`
-


.. list-table:: Synchronization and atomics
:widths: 25 25 50
:header-rows: 1

* - SYCL* feature
- numba-dpex feature
- Notes
* - Accessor classes
-
- Not supported. Explicit ``sycl::event`` SYCL* objects exposed as
``dpctl.SyclEvent`` Python objects can be used for asynchronous kernel
invocation using the
:func:`numba_dpex.core.kernel_launcher.call_kernel_async` function.
* - ``group_barrier``
- :func:`numba_dpex.kernel_api.group_barrier`
- group_barrier does not support synchronization across a sub-group.
* - ``atomic_fence``
- :func:`numba_dpex.kernel_api.atomic_fence`
-
* - ``device_event``
-
- Not supported
* - ``atomic_ref``
- :class:`numba_dpex.kernel_api.AtomicRef`
- Atomic references are supported for both global and local memory.

.. list-table:: On-device memory allocation
:widths: 25 25 50
:header-rows: 1

* - SYCL* class
- numba-dpex class
- Notes
* - ``local_accessor``
- :class:`numba_dpex.kernel_api.LocalAccessor`
-
* - ``private_memory``
-
- Not supported as there is no corresponding API in numba-dpex for
``group::parallel_for_work_item`` or ``parallel_for_work_group``.

Allocating variables on a work-item's private memory can be done using
:class:`numba_dpex.kernel_api.PrivateMemory`.
* - Constant memory
-
- SYCL 2020 no longer defines a constant memory region in the device memory
model specification and as such the feature is not implemented by
numba-dpex.
* - Global memory
-
- Global memory allocation is not handled by numba-dpex and the kernel
argument is expected to have allocated memory on a device's global
memory region using a USM allocators. Such allocators are provided by
the ``dpctl`` package.

.. list-table:: Group functions
:widths: 25 25 50
:header-rows: 1

* - SYCL* group function
- numba-dpex function
- Notes
* - ``group_broadcast``
-
- Not supported
* - ``group_barrier``
- :func:`numba_dpex.kernel_api.group_barrier`
- group_barrier does not support synchronization across a sub-group.

.. list-table:: Group algorithms
:widths: 25 25 50
:header-rows: 1

* - SYCL* group algorithm
- numba-dpex function
- Notes
* - ``joint_any_of``
-
- Not supported
* - ``joint_all_of``
-
- Not supported
* - ``joint_none_of``
-
- Not supported
* - ``any_of_group``
-
- Not supported
* - ``all_of_group``
-
- Not supported
* - ``none_of_group``
-
- Not supported
* - ``shift_group_left``
-
- Not supported
* - ``shift_group_right``
-
- Not supported
* - ``permute_group_by_xor``
-
- Not supported
* - ``select_from_group``
-
- Not supported
* - ``joint_reduce``
-
- Not supported
* - ``reduce_over_group``
-
- Not supported
* - ``joint_exclusive_scan``
-
- Not supported
* - ``joint_inclusive_scan``
-
- Not supported
* - ``exclusive_scan_over_group``
-
- Not supported
* - ``inclusive_scan_over_group``
-
- Not supported

.. list-table:: Math functions
:widths: 25 25 50
:header-rows: 1

* - SYCL* math function category
- numba-dpex
- Notes
* - Math functions
-
- Refer the kernel programming guide for list of supported functions.
* - Half and reduced precision math functions
-
- Not supported
2 changes: 1 addition & 1 deletion docs/source/user_guide/kernel_programming/index.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. _index:
.. _kernel-programming-guide:
.. include:: ./../../ext_links.txt

Kernel Programming
Expand Down
Loading