Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor の御紹介

インテルコンパイラを利用される方にとって、 Intel Math Kernel Library (MKL)のリンクの方法は、試行錯誤が伴うものであることは、ご理解頂けると思います。特に、古くから利用されている方にとっては、そのリンクの方法はさまざまな変遷がありました。

また、Parallel Studio XEからoneAPIへ移行したことによる取り扱いの変化なども気になるところですし、実際にどの方法が正しいのかということについては、ユーザー様の個々の環境にも大きく依存することから、なかなか判断が難しいものがあります。

Intel® oneAPI Math Kernel Library (oneMKL) とは

インテル® oneAPI 数学カーネル・ライブラリー (oneMKL) は、CPU および GPU 向けに高度に最適化され、広範に並列化されたルーチンで構成される数学コンピューティング・ライブラリーで、最大限のパフォーマンスを達成できます。このライブラリには、CPU上のほとんどのルーチン用のCおよびFortranインタフェースと、CPUとGPUの両方上のいくつかのルーチン用のDPC++インタフェースがあります。以下のような様々なインターフェイスで、いくつかの数学演算を包括的にサポートしています:

CPU上のCおよびFortran用

線形代数
高速フーリエ変換(FFT)
ベクトル計算
直接および反復スパースソルバ
乱数発生器

Get Started with Intel® oneAPI Math Kernel Library https://www.intel.com/content/www/us/en/docs/onemkl/get-started-guide/2023-0/overview.html の日本語訳

HPC用途として良く利用されるBLAS, LAPACKなどのライブラリが含まれていて、そのようなライブラリを利用するプログラムにとっては必須のパッケージです。2023年9月現在は、Intel® oneAPI Base Toolkitに含まれています。

Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor

実はインテル社にて、以下のようなアドバイザーツールが用意されています。

Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor

Intel MKL

2023年9月に確認した段階では、Parallel Studio XE 2017以降のバージョンについて、MKLのリンクオプションをガイドしてくれるツールとなっています。

Intel mkl link advisor version

Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor 実行例

以下のようなリンクの条件を選択します。

Select Intel® product:oneMKL 2023
Select OS:Linux
Select programming language:C/C++
Select compiler:Intel(R) C/C++ Classic
Select architecture:Intel(R) 64
Select dynamic or static linking:Dynamic
Select interface layer:C API with 64bit-integer
Select threading layer:OpenMP Threading
Select OpenMP library:Intel(R) (libiomp5)
Link with Intel® oneMKL libraries explicitly:true

このような条件では、以下のリンクオプションを指示されます。

-L${MKLROOT}/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl

 

「Link with Intel® oneMKL libraries explicitly」という選択項目は重要で、ここをチェックを入れずにfalseの扱いにすると、以下のような簡便なリンクオプションを提示されます。

-qmkl-ilp64=parallel

 

また、以下のような静的リンクを要求した場合、

Select Intel® product:oneMKL 2023
Select OS:Linux
Select programming language:C/C++
Select compiler:Intel(R) C/C++ Classic
Select architecture:Intel(R) 64
Select dynamic or static linking:Static
Select interface layer:C API with 64bit-integer
Select threading layer:OpenMP Threading
Select OpenMP library:Intel(R) (libiomp5)
Link with Intel® oneMKL libraries explicitly:true

「Link with Intel® oneMKL libraries explicitly」の項目は、自動的にチェックが入り、falseにできません。まあ、静的リンクの場合に黙示的にリンクできるわけはないですね。そして、以下のリンクを指示されます。

-Wl,–start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,–end-group -liomp5 -lpthread -lm -ldl

 

このように、長いリンクオプションをいちいち覚えておく必要なく、いつでも活用が可能なツールですので、みなさまも是非ご活用頂ければと思います。

Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor