Developer Guide
Developer Guide for Intel® oneAPI Math Kernel Library macOS*
ID
766688
Date
11/07/2023
Public
Getting Help and Support
What's New
Notational Conventions
Related Information
Getting Started
Structure of the Intel® oneAPI Math Kernel Library
Linking Your Application with the Intel® oneAPI Math Kernel Library
Managing Performance and Memory
Language-specific Usage Options
Obtaining Numerically Reproducible Results
Coding Tips
Managing Output
Working with the Intel® oneAPI Math Kernel Library Cluster Software
Managing Behavior of the Intel® oneAPI Math Kernel Library with Environment Variables
Configuring Your Integrated Development Environment to Link with Intel® oneAPI Math Kernel Library
Intel® oneAPI Math Kernel Library Benchmarks
Appendix A: Intel® oneAPI Math Kernel Library Language Interfaces Support
Appendix B: Support for Third-Party Interfaces
Appendix C: Directory Structure in Detail
Notices and Disclaimers
OpenMP* Threaded Functions and Problems
Functions Threaded with Intel® Threading Building Blocks
Avoiding Conflicts in the Execution Environment
Techniques to Set the Number of Threads
Setting the Number of Threads Using an OpenMP* Environment Variable
Changing the Number of OpenMP* Threads at Run Time
Using Additional Threading Control
Calling oneMKL Functions from Multi-threaded Applications
Using Intel® Hyper-Threading Technology
CMake Config for oneMKL
If you want to integrate oneMKL into your CMake projects, starting with the Intel® oneAPI Math Kernel Library (oneMKL) 2021.3 release, MKLConfig.cmake is provided as part of the package and installation. MKLConfig.cmake supports all oneMKL configurations, compilers, and runtimes, as the oneMKL product itself. Help/usage is provided in the top section of MKLConfig.cmake.
Example
NOTE:
For more information about how to specify the interface type, link type, threading type, and so forth, refer to the input and output parameters listed in the comments at the top of the MKLConfig.cmake file.
my_test/ |_ build/ <-- Out-of-source build directory |_ CMakeLists.txt <-- User side project's CMakeLists.txt |_ app.c <-- Source file that uses oneMKL API
app.c
#include <stdio.h> #include "mkl.h" int main() { MKLVersion mkl_version; mkl_get_version(&mkl_version); printf("You are using oneMKL %d.%d\n", mkl_version.MajorVersion, mkl_version.UpdateVersion); return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.13) project(oneMKL_Example LANGUAGES C) find_package(MKL CONFIG REQUIRED PATHS $ENV{MKLROOT}) add_executable(myapp app.c) target_link_libraries(myapp PUBLIC MKL::MKL)
Command line
# Source the oneAPI setvars.sh/oneapi-vars.sh script beforehand build$ cmake .. -DCMAKE_C_COMPILER=icc build$ cmake --build .
If your application requires a customized setting, the following CMakeLists.txt demonstrates how to achieve a more fine-grained control.
CMakeLists.txt
cmake_minimum_required(VERSION 3.13) project(oneMKL_Example LANGUAGES C) find_package(MKL CONFIG REQUIRED PATHS $ENV{MKLROOT}) message(STATUS "Imported oneMKL targets: ${MKL_IMPORTED_TARGETS}") add_executable(myapp app.c) target_compile_options(myapp PUBLIC $<TARGET_PROPERTY:MKL::MKL,INTERFACE_COMPILE_OPTIONS>) target_include_directories(myapp PUBLIC $<TARGET_PROPERTY:MKL::MKL,INTERFACE_INCLUDE_DIRECTORIES>) target_link_libraries(myapp PUBLIC $<LINK_ONLY:MKL::MKL>)
NOTE:
When the Ninja build system is in use, Ninja 1.10.2 or later is required for Fortran support.
Parent topic: Getting Started