History of dpctl name

SYCL Execution Model

SYCL standard proposes an execution model, in which a user controls execution placement by specifying sycl::queue object as a function argument. This execution model affords uniform API for executing code on a variety of devices addressable with SYCL:

Example of execution on different devices
# Execute on CPU device
foo(q_cpu, ...)

# Execute on GPU device from vendor A
foo(q_gpuA, ...)

# Execute on GPU device from vendor B
foo(q_gpuB, ...)

oneAPI DPC++ implementation of SYCL

Intel(R) oneAPI DPC++ compiler is an implementation of SYCL standard along with a set of oneAPI extensions proposed for adoption into the standard.

DPC++ stands for Data-Parallel C++, because it brings data parallelism to C++ language.

dpctl was created out of the need to interact with DPC++ runtime to control execution placement from LLVM as needed by numba_dpex.

The name Data Parallel ConTroL (DPCTL) stuck.

Note

dpctl is not related to Open vSwitch Data Paths Control program osv-dpctl provided by Open vSwitch.

Types of parallelisms

Parallelism refers to an opportunity to work on multiple parts of a problem independently.

Exploiting parallelism requires capable hardware to work on more than one thing at a time, such as GPUs or multi-core CPUs.

Two commonly encountered types of parallelism are:

  • Task parallelism - problem is decomposed into independent tasks.

  • Data parallelism - same task can be independently performed on different data inputs.

Intel(R) oneAPI DPC++ compiler implements SYCL standard which brings data parallelism to C++ language, so it is appropriate that DPC++ stands for data-parallel C++. Please refer to open access book “Data Parallel C++” by J. Rainders, et. al. for a great introduction.