Intel® Math Kernel Library 11.0.2 User Guide
This section summarizes typical usage models and available options for calling Intel MKL functions from multi-threaded applications. These recommendations apply to any multi-threading environments: OpenMP*, Intel® Threading Building Blocks, POSIX* threads, and others.
When used: Intel MKL 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.so 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)‡
Link with a threading library, but disable Intel MKL threading using an environment variable or a function call:
set MKL_NUM_THREADS=1
call mkl_set_num_threads(1).
In particular, use to temporarily disable Intel MKL threading at run time.
Link with the Single Dynamic Library mkl_rt.so and select a threading library using an environment variable or a function call below, but disable threading as in the case above:
set MKL_THREADING_LAYER=intel
call mkl_set_threading_layer(MKL_THREADING_INTEL)
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.so and select a threading library using an environment variable or a function call:
set MKL_THREADING_LAYER=intel
call mkl_set_threading_layer(MKL_THREADING_INTEL)
Other Options:
Set the MKL_NUM_THREADS environment variable to a desired number of threads for Intel MKL.
Set the MKL_DOMAIN_NUM_THREADS environment variable to a desired number of threads for Intel MKL for a particular function domain.
Use if the application threads work with different Intel MKL function domains.
Call mkl_set_num_threads()
Use to globally set a desired number of threads for Intel MKL at run time.
Call mkl_domain_set_num_threads().
Use if at some point application threads start working with different Intel MKL function domains.
Call mkl_set_num_threads_local().
Use to sets the number of threads for Intel MKL called from a particular thread.
If your application uses OpenMP* threading, you may need to provide additional settings:
Set the environment variable MKL_DYNAMIC=false, or alternatively call mkl_set_dynamic(0), to prevent Intel MKL from dynamically reducing the number of threads in nested parallel regions.
‡ For details of the mentioned functions, see the Support Functions section of the Intel MKL Reference Manual, available in the Intel Software Documentation Library.
|
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice. Notice revision #20110804 |