インテルコンパイラを利用される方にとって、 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用
線形代数
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 の日本語訳
高速フーリエ変換(FFT)
ベクトル計算
直接および反復スパースソルバ
乱数発生器
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
2023年9月に確認した段階では、Parallel Studio XE 2017以降のバージョンについて、MKLのリンクオプションをガイドしてくれるツールとなっています。
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 |
このような条件では、以下のリンクオプションを指示されます。
「Link with Intel® oneMKL libraries explicitly」という選択項目は重要で、ここをチェックを入れずにfalseの扱いにすると、以下のような簡便なリンクオプションを提示されます。
また、以下のような静的リンクを要求した場合、
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にできません。まあ、静的リンクの場合に黙示的にリンクできるわけはないですね。そして、以下のリンクを指示されます。
このように、長いリンクオプションをいちいち覚えておく必要なく、いつでも活用が可能なツールですので、みなさまも是非ご活用頂ければと思います。
Intel® oneAPI Math Kernel Library (oneMKL) Link Line Advisor