oneAPI Construction Kit is a suite of software enabling developers to easily expose the performance of their hardware though open standards.
Abacus
Abacus is oneAPI Construction Kit’s kernel library implementing the builtins required for compute languages, including all the math functions required by OpenCL. Abacus implements half, float, and double floating-point functions to the high precision requirements needed for conformance. It provides specialized implementations for both scalar and vector data types, allowing optimized algorithms to be used for vector architectures.
Software conversions between the OpenCL Types are also provided by Abacus, including the rounding and saturating variants defined for OpenCL explicit conversions.
Tip
If a device contains hardware capable of performing a subset of builtin operations, then the ComputeMux Compiler should use a more performant hardware specific implementation for the relvant maths builtins in place of the Abacus software implementation.
Requirements
Abacus relies on the IEEE-754 format in its implementation, and on
the add (+
), subtract (-
), and multiply (*
) operations being
correctly rounded. These are the minimum capabilities for a device to use the
software maths library. Abacus avoids using division (/
) operations in its
algorithms, as it is typically expensive.
Hardware support for denormal numbers is not required, although a feature of Abacus is that it does work with denormals. Abacus will avoid denormal numbers in intermediate calculations if they are not available.
Vector hardware is not a requirement to support Abacus, the ComputeMux Compiler implementation will be able to transform the Abacus vector algorithms as appropriate for the hardware.
See also
Floating-Point Requirements defines the expectations on a device when supporting floating-point types.
Configurable
A mechanism for setting compile time flags exists in Abacus for the ComputeMux target to report that Optimization Options have been set, or that the device implements a lower precision profile of the high level heterogeneous language. These configurations allow Abacus to provide more optimal algorithms for implementing the builtins to the ComputeMux target.