Using Intel® Performance Libraries in Universal Windows Drivers

ID 660463
Updated 11/30/2018
Version Latest
Public

author-image

By

Using Intel® Performance Libraries in Universal Windows* Drivers

The Intel® Math Kernel Library (Intel® MKL), Intel® Integrated Performance Primitives (Intel® IPP) and Intel® Data Analytics Acceleration Library (Intel® DAAL) which are part of the Intel® Performance Libraries now officially support Universal Windows* Driver (UWD) compatibility starting with the 2019 update 1 release with minimal version of UWD binaries: Windows* 10 SDK version 1803 (also called Redstone 4, RS4 or Windows* 10 SDK build 10.0.17134.0).  This means that including them in a user’s Universal Windows* driver will not break otherwise UWD compatible code and will provide the desired optimized functionality contained in these libraries. In particular, the Windows* system calls used in the above named statically linked libraries are all defined in OneCore.Lib and OneCoreUAP.Lib. Thus, any application or driver that links against OneCore.Lib or OneCoreUAP.Lib can use functionality from statically linked Intel® MKL, Intel® IPP or Intel® DAAL to accelerate their computations.

     For a Windows* driver to be Universal (or UWD compliant) it must pass the APIValidator.exe (see Validating Universal Windows* drivers) test which verifies that all system APIs being used in the binary are valid Universal APIs.  As the Intel® Performance Libraries are not a driver, but rather a set of libraries containing optimized functions that could be used to accelerate a driver or other application, for our libraries to be UWD compliant, the system APIs being used in our library must be valid Universal APIs.  That is, they should only use system APIs found in the OneCore.Lib (for headless applications like Nano Server) or OneCoreUAP.Lib (for Universal Windows* drivers) libraries.  Thus if an existing Universal Windows* driver were to use one of our UWD compliant libraries, their driver would still pass the APIValidator.exe test.

Note: To truly be a Universal Windows* driver and be distributed through Windows* Update, there are more steps than just passing the APIValidator.exe test including verifying the driver packages INF file as universal, complying with the “DCHU” design principles for Universal drivers and certifying the Universal driver package.  See Windows* Driver Kit documentation for more details.

Summary Statistics for Intel® Performance Libraries + Universal Windows* Driver (UWD) Compatibility:

Minimal supported Windows* 10 SDK:

·       Build 10.0.17134.0 (also called Redstone 4, RS4, version 1803)

Compatible OneCore API sets:

·       OneCore.Lib -- For headless applications (or without user interfaces) like Nano Server.

·       OneCoreUAP.Lib -- For Universal Windows* drivers.

Intel® Performance Libraries compatible with UWD:

·       Intel® Math Kernel Library (Intel® MKL)

·       Intel® Integrated Performance Primitives (Intel® IPP)   (note: also supports Universal Windows* Apps)

·       Intel® Data Analytics Acceleration Library (Intel® DAAL)

·       Intel® Threading Building Blocks (Intel® TBB)  (see Using Intel® TBB in UWP applications) (note: also supports Universal Windows* Apps)

Threading Layers supported:

·       Sequential

·       Intel® Threading Building Blocks (Intel® TBB)

IPL + UWD compliance:

·       Using 2019 update 1 release with static linking libraries

Note: Linking against Intel® MKL, Intel® IPP or Intel® DAAL in a Universal driver uses the same standard link line settings as for drivers or executables that are not universal.  See the Link Line Advisor for Intel® MKL, Intel® IPP linking options or Compiling and Linking Intel® IPP with Microsoft* Visual  C++* and Intel® C++, Getting Started with Intel® DAAL  for recommended linking models.

 

Intel® Math Kernel Library (Intel® MKL) + UWD Specifics:

* See Using Intel® TBB in UWP/UWD applications.  A prebuilt UWD compliant Intel® TBB library is found in <tbb_distribution_root>\lib\<target_architecture>\vc14_uwd starting from the Intel® TBB 2018 release.

**These are Fortran 95 wrappers for BLAS (BLAS95) and LAPACK (LAPACK95).  Windows* drivers are typically written in C, C++ or ASM.  Thus these libraries, while UWD API complaint, are not useful.

***See Intel® MKL custom DLL builder tool to create a UWD compatible dynamic linked library from the UWD compatible static libraries based on a list of C interfaces in MKL to be used.

Using the Custom DLL builder to construct UWD compatible dynamic linking library from Intel® MKL static libraries: Use the custom DLL builder (found in folder mkl/tools/builder of distribution) against static Intel® MKL libraries with option uwd_compat=yes to construct a custom dynamic linking UWD compatible library.  See Using the Custom DLL Builder in Command-line Mode for details.

Intel® Integrated Performance Primitives (Intel® IPP) + UWD/UWP Specifics:

 

* See Using Intel® TBB in UWP/UWD applications.  A prebuilt UWD compliant Intel® TBB library is found in <tbb_distribution_root>\lib\<target_architecture>\vc14_uwd starting from the Intel® TBB 2018 release.

Universal Windows* Platform (UWP) compatibility: Intel® IPP with static linking can also be used in Universal Windows* Applications with sequential or Intel® TBB threading starting from release 2019 update 1.    That is, the static libraries of Intel® IPP use only system APIs contained in the Universal system library WindowsApps.lib (also starting from the Windows* 10 SDK 10.0.17134.0 i.e. Redstone 4 or Version 1803 release) and any app that passes the Windows* Application Certification Kit (WACK), can also use optimized functionality from Intel® IPP and still pass the WACK test, maintaining eligibility as a Windows* App.

** See Using Intel® TBB in UWP/UWD applications.  A prebuilt UWP compliant Intel® TBB library is found in <tbb_distribution_root>\lib\<target_architecture>\vc14_uwp starting from the Intel® TBB 2018 release.

 

Intel® Data Analytics Analysis Library (Intel® DAAL) + UWD Specifics:

* See Using Intel® TBB in UWP/UWD applications.  A prebuilt UWD compliant Intel® TBB library is found in <tbb_distribution_root>\lib\<target_architecture>\vc14_uwd starting from the Intel® TBB 2018 release.