Deep Neural Network Library (DNNL) has both C and C++ APIs available to users for convenience. There is almost a one-to-one correspondence as far as features are concerned, so users can choose based on language preference and switch back and forth in their projects if they desire. Most of the users choose C++ API though.
The differences are shown in the table below.
Features | C API | ** |
---|---|---|
Language requirements | C99 | C++11 and above |
Functional coverage | Full | Some of the features may require involving C API |
Error handling | Functions return status | Functions throw exceptions |
Verbosity | High | Medium |
Implementation | Completely inside the library | Header-based thin wrapper around C API with syntactic sugar mostly for convenience |
Purpose | Provide simple API and stable ABI to the library | Improve usability |
Target audience | Experienced users, FFI | Most of the users and framework developers |
DNNL performs limited input validation to minimize the performance overheads. The user application is responsible for sanitizing inputs passed to the library. Examples of the inputs that may result in unexpected consequences:
u8
or s8
inputs may lead to accumulator overflowbf16
16-bit floating point data type has range close to 32-bit floating point data type, there is a significant reduction in precision.As DNNL API accepts raw pointers as parameters it's the calling code responsibility to