Developer Guide

Developer Guide for Intel® oneAPI Math Kernel Library macOS*

ID 766688
Date 11/07/2023
Public
Document Table of Contents

Getting Started with Conditional Numerical Reproducibility

Intel® oneAPI Math Kernel Library (oneMKL) offers functions and environment variables to help you get reproducible results. You can configure Intel® oneAPI Math Kernel Library (oneMKL) using functions or environment variables, but the functions provide more flexibility.

The following specific examples introduce you to the conditional numerical reproducibility.

While these examples recommend aligning input and output data, you can supply unaligned data to Intel® oneAPI Math Kernel Library (oneMKL) functions running in the CNR mode, but refer toReproducibility Conditions for details related to data alignment.

Intel CPUs supporting Intel AVX2

To ensure Intel® oneAPI Math Kernel Library (oneMKL) calls return the same results on every Intel CPU supporting Intel AVX2 instructions:

  1. Make sure that your application uses a fixed number of threads

  2. (Recommended) Properly align input and output arrays in Intel® oneAPI Math Kernel Library (oneMKL) function calls

  3. Do either of the following:

    • Call

      mkl_cbwr_set(MKL_CBWR_AVX2)

    • Set the environment variable:

      export MKL_CBWR = AVX2

NOTE:

On non-Intel CPUs and on Intel CPUs that do not support Intel AVX2, this environment setting may cause results to differ because the AUTO branch is used instead, while the above function call returns an error and does not enable the CNR mode.

Intel CPUs supporting Intel SSE2

To ensure Intel® oneAPI Math Kernel Library (oneMKL) calls return the same results on every Intel CPU supporting Intel SSE2instructions:

  1. Make sure that your application uses a fixed number of threads

  2. (Recommended) Properly align input and output arrays in Intel® oneAPI Math Kernel Library (oneMKL) function calls

  3. Do either of the following:

    • Call

      mkl_cbwr_set(MKL_CBWR_SSE2)

    • Set the environment variable:

      export MKL_CBWR = SSE2

NOTE:

On non-Intel CPUs, this environment setting may cause results to differ because the AUTO branch is used instead, while the above function call returns an error and does not enable the CNR mode.

Intel or Intel compatible CPUs supporting Intel SSE2

On non-Intel CPUs, only the MKL_CBWR_AUTO and MKL_CBWR_COMPATIBLE options are supported for function calls and only AUTO and COMPATIBLE options for environment settings.

To ensure Intel® oneAPI Math Kernel Library (oneMKL) calls return the same results on all Intel or Intel compatible CPUs supporting Intel SSE2 instructions:

  1. Make sure that your application uses a fixed number of threads

  2. (Recommended) Properly align input and output arrays in Intel® oneAPI Math Kernel Library (oneMKL) function calls

  3. Do either of the following:

    • Call

      mkl_cbwr_set(MKL_CBWR_COMPATIBLE)

    • Set the environment variable:

      export MKL_CBWR = COMPATIBLE

NOTE:

The special MKL_CBWR_COMPATIBLE/COMPATIBLEoption is provided because Intel and Intel compatible CPUs have a few instructions, such as approximation instructions rcpps/rsqrtps, that may return different results. This option ensures that Intel® oneAPI Math Kernel Library (oneMKL) does not use these instructions and forces a single Intel SSE2 only code path to be executed.

Next steps

See Specifying the Code Branches

for details of specifying the branch using environment variables.

See the following sections in the Intel® oneAPI Math Kernel Library (oneMKL) Developer Reference:

Support Functions for Conditional Numerical Reproducibility

for how to configure the CNR mode of Intel® oneAPI Math Kernel Library (oneMKL) using functions.

Intel® oneAPI Math Kernel Library (oneMKL) PARDISO - Parallel Direct Sparse Solver Interface

for how to configure the CNR mode for PARDISO.

Product and Performance Information

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.

Notice revision #20201201

See Also