====== 概要 ====== 実際にMKLを利用するためには、ビルドするときに適切なオプションをつけてMKLにリンクを貼らないといけません。 このときにどのようなオプションをつければよいのか簡単に教えてくれるのが、Intel公式のMKL Link Line Advisorです。 https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor 各項目に答えていけば、必要なコンパイルオプションを教えてくれます。 ====== 各項目の解説 ====== ===== Select Intel® product ===== 使用しているMKLのバージョンを選びます。 ===== Select OS ===== 使用しているOSを選びます。 ===== Select compiler ===== 使用しているコンパイラを選びます ===== Select architecture ===== 使用しているOSのアーキテクチャを選びます。 * intel(R) 64 ... 64 bitの場合 * IA-32 ... 32 bitの場合 最近のものはほぼ 64bit です。 ===== Select dynamic or static linking ===== MKLをプログラムに組み込む(static)か、実行のたびに外部から呼び出す(dynamic)か選びます。 dynamicの利点 * プログラムの容量が軽くなる * ライブラリを更新してもプログラムをコンパイルしなおす必要がない dynamicの欠点 * 外部からライブラリを呼び出す分、実行速度が低下する * プログラムを実行するコンピュータにもライブラリが入っていないといけない 数値計算では普通はstaticを選びます。 詳しくは以下のページを参照。 https://scicomp.stackexchange.com/questions/1673/what-does-static-dynamic-and-single-dynamic-linking-mean ===== Select interface layer ===== 自分の作ったプログラムの整数型が何bitかを選びます。 * 32-bit integer ... プログラム内で使用している整数型がすべて32ビット(4バイト)以下の場合はこちらを選びます。プログラムで特別なことをしていなければ、ほとんどの場合こちらです。 * 64-bit integer ... 64ビット整数を使っている場合はこちらを選びます。例えばC/C++での long long 型は64ビット以上で定義されています。int64_t 型はコンパイラによらず64ビットで定義されます ===== Select threading layer ===== MKLの並列化の方法を選びます。自分のプログラムを並列化している場合はそれに合わせます。 * OpenMP threading ... OpenMPによる並列化をします * Sequential ... 並列化しません * TBB threading ... Intel Threading Building Blocksによる並列化をします(あんまり普及していない) ===== Select OpenMP library ===== 前の項目でOpenMPを使用するとした場合、どのOpenMPライブラリを使うか指定します。 * Intel(R) (libiomp5) ... Intel製のOpenMPです * GNU (libgomp) ... GNUのOpenMPです よくわからなければ libiomp5 を使用してください。 ===== Select cluster library ===== MPI並列が実装されたMKLを使いたい場合、どのライブラリを使用するか選択します(コンピュータにMPIが入っていない場合は使用できません)。 自分のプログラムで使用しているライブラリを選択してください。 * Parallel Direct Sparse Solver for Clusters ... クラスタ向けの並列直接法疎行列ソルバーのライブラリです。 * CDFT ... クラスター向けの離散フーリエ変換ライブラリです。 * ScaLAPACK ... LAPACKのMPI並列化版ライブラリです。 * BLACS ... BLASのMPI並列化版ライブラリです。 ===== Select MPI library ===== 使用しているMPI実装の種類を選んでください。 ===== Select the Fortran 95 interfaces ===== 自分のプログラムでBLAS95やLAPACK95のインターフェースを使用している場合はチェックを入れてください。