Developer Guide

Contents

Calling
oneMKL
Functions from Multi-threaded Applications

This section summarizes typical usage models and available options for calling
Intel® oneAPI Math Kernel Library
functions from multi-threaded applications. These recommendations apply to any multi-threading environments: OpenMP*, Intel® Threading Building Blocks,
POSIX* threads,
and others.

Usage model: disable
oneMKL
internal threading for the whole application

When used:
Intel® oneAPI Math Kernel Library
internal threading interferes with application's own threading or may slow down the application.
Example:
the application is threaded at top level, or the application runs concurrently with other applications.
Options:
  • Link statically or dynamically with the sequential library
  • Link with the Single Dynamic Library
    mkl_rt
    .
    dylib
    and select the sequential library using an environment variable or a function call:
    • Set
      MKL_THREADING_LAYER=sequential
    • Call
      mkl_set_threading_layer(MKL_THREADING_SEQUENTIAL)

Usage model: partition system resources among application threads

When used:
application threads are specialized for a particular computation.
Example:
one thread solves equations on all cores but one, while another thread running on a single core updates a database.
Linking Options:
  • Link statically or dynamically with a threading library
  • Link with the Single Dynamic Library
    mkl_rt
    .
    dylib
    and select a threading library using an environment variable or a function call:
    • set
      MKL_THREADING_LAYER=intel
      or
      MKL_THREADING_LAYER=tbb
    • call
      mkl_set_threading_layer(MKL_THREADING_INTEL)
      or
      mkl_set_threading_layer(MKL_THREADING_TBB)
Other Options
for OpenMP Threading
:
  • Set the
    MKL_NUM_THREADS
    environment variable to a desired number of OpenMP threads for
    Intel® oneAPI Math Kernel Library
    .
  • Set the
    MKL_DOMAIN_NUM_THREADS
    environment variable to a desired number of OpenMP threads for
    Intel® oneAPI Math Kernel Library
    for a particular function domain.
    Use if the application threads work with different
    Intel® oneAPI Math Kernel Library
    function domains.
  • Call
    mkl_set_num_threads()
    Use to globally set a desired number of OpenMP threads for
    Intel® oneAPI Math Kernel Library
    at run time.
  • Call
    mkl_domain_set_num_threads()
    .
    Use if at some point application threads start working with different
    Intel® oneAPI Math Kernel Library
    function domains.
  • Call
    mkl_set_num_threads_local()
    .
    Use to set the number of OpenMP threads for
    Intel® oneAPI Math Kernel Library
    called from a particular thread.
If your application uses OpenMP* threading, you may need to provide additional settings:
  • Set the environment variable
    OMP_NESTED=TRUE
    , or alternatively call
    omp_set_nested(1)
    , to enable OpenMP nested parallelism.
  • Set the environment variable
    MKL_DYNAMIC=FALSE
    , or alternatively call
    mkl_set_dynamic(0)
    , to prevent
    Intel® oneAPI Math Kernel Library
    from dynamically reducing the number of OpenMP threads in nested parallel regions.
For details of the mentioned functions, see the Support Functions section of the
Intel® oneAPI Math Kernel Library
Developer Reference
, available in the Intel Software Documentation Library.
Product and Performance Information
Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.
Notice revision #20201201

Product and Performance Information

1

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