Developer Guide

Developer Guide for Intel® oneAPI Math Kernel Library Windows*

ID 766692
Date 3/22/2024
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Using a Custom Message-Passing Interface

While different message-passing interface (MPI) libraries are compatible at the application programming interface (API) level, they are often incompatible at the application binary interface (ABI) level. Therefore, Intel® oneAPI Math Kernel Library (oneMKL) provides a set of prebuilt BLACS libraries that support certain MPI libraries, but this, however, does not enable use of Intel® oneAPI Math Kernel Library (oneMKL) with other MPI libraries. To fill this gap, Intel® oneAPI Math Kernel Library (oneMKL) also includes the MKL MPI wrapper, which provides an MPI-independent ABI to Intel® oneAPI Math Kernel Library (oneMKL). The adaptor is provided as source code. To use Intel® oneAPI Math Kernel Library (oneMKL) with an MPI library that is not supported by default, you can use the adapter to build custom static or dynamic BLACS libraries and use them similarly to the prebuilt libraries.

Building a Custom BLACS Library

The MKL MPI wrapper is located in the <mkl directory>\interfaces\mklmpi directory.

To build a custom BLACS library, from the above directory run the nmake command.

For example: the command

nmake libintel64

builds a static custom BLACS library mkl_blacs_custom_lp64.lib using the default MPI compiler on your system. Look into the <mkl directory>\interfaces\mklmpi\makefile for targets and variables that define how to build the custom library. In particular, you can specify the compiler through the MPICC variable.

For more control over the building process, refer to the documentation available through the command

nmake help

Using a Custom BLACS Library

In the case of static linking, use custom BLACS libraries exactly the same way as you use the prebuilt BLACS libraries, but pass the custom library to the linker. For example, instead of passing the mkl_blacs_intelmpi_lp64.lib static library, pass mkl_blacs_custom_lp64.lib.

To use a dynamic custom BLACS library:

  1. Link your application the same way as when you use the prebuilt BLACS library.

  2. Call the mkl_set_mpi support function or set the MKL_BLACS_MPI environment variable to one of the following values:

    • CUSTOM

      to load a custom library with the default name mkl_blacs_custom_lp64.dll or mkl_blacs_custom_ilp64.dll, depending on whether the BLACS interface linked against your application is LP64 or ILP64.

    • <dll_name>

      to load the specified BLACS DLL.

      NOTE:

      Intel® oneAPI Math Kernel Library (oneMKL) looks for the specified DLL either in the directory with Intel® oneAPI Math Kernel Library (oneMKL) dynamic libraries or in the directory with the application executable.

      For a description of the mkl_set_mpi function, see the Intel® oneAPI Math Kernel Library (oneMKL) Developer Reference.