Universal Functions
Numba provides a set of decorators to create NumPy universal functions-like
routines that are JIT compiled. Although, a close analog to NumPy universal functions Numba’s @vectorize are not fully compatible with a regular NumPy
ufunc.. Refer Creating NumPy universal functions for details.
numba.vectorize decorator is supported.
numba.guvectorize decorator is not supported yet.
Another present limitation is that ufunc kernels cannot invoke numba_dpex.kernel functions.
Ongoing work is in progress to address these limitations.
Example 1: Basic Example
Full example can be found at numba_dpex/examples/vectorize.py.
@vectorize(nopython=True)
def ufunc_kernel(x, y):
return x + y
Example 2: Calling numba.vectorize inside a numba_dpex.kernel
Full example can be found at numba_dpex/examples/blacksholes_njit.py.
@numba.vectorize(nopython=True)
def cndf2(inp):
out = 0.5 + 0.5 * math.erf((math.sqrt(2.0) / 2.0) * inp)
return out
Note
numba.cuda requires target='cuda' parameter for numba.vectorize
and numba.guvectorize functions.
numba-dpex eschews the target parameter for @vectorize and infers the target from the
dpctl.device_context in which the numba.vectorize function is
called.
Full Examples
numba_dpex/examples/vectorize.pynumba_dpex/examples/blacksholes_njit.py