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:
# 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.