準備と設定

環境構築してみよう

自腹で買ったMacにプログラミング環境を構築したい人向けに、コンパイラ、及びLAPACKなどのライブラリへのパスの通し方をまとめておきます。
(2022/6/28版。バージョン・環境によって違うのでそのつもりで。)
MacにInten Fortranをインストールする

能書き

Intel Fortranは基本的にUnixソフトウェアなので、Mac流にドラッグ&ドロップでインストール終了、とは行きません。依存するソフトウェアを全てインストールし、かつ適切にパスを通す必要があります。
1.「Xcode」をダウンロード・インストール
2.「Xcode」の初期設定
3.「Xcode」付属の「command line tools」をインストール
4.「Intel Fortran Composer XE」をインストール
5.「.bash_profile」に設定を書き込む(パスを通す)
Macの場合、まずXcodeをインストールしなければなりません。Xcodeというのは、Appleが無料で提供する統合開発環境です。このパッケージに含まれる、Intel Fortranを動かすために必要なツールをインストールします。ここで注意すべきは、
Intel Fortranより先にXcodeを入れる必要がある
ことです。また、
Xcodeをアップデートしたら、Intel Fortranが動かなくなる場合がある
ことにも注意が必要です。
依存ファイルが変更されてしまうと、動かなくなる。小さいアップデートだと大丈夫。
特に、Macの自動アップデートを有効にしておくと、知らないうちにアップデートされて突然コンパイルが出来なくなったりもします。

Xcodeのインストール・初期設定

1.XcodeはApp Storeから無料ダウンロード・インストールできます(要ユーザー登録)。
2.Xcodeがインストールされたら、まず一度開きます。すると、初期設定のためのダイアログが出ます。これを実行したら、Xcodeは閉じてしまって構いません。(以後は開く必要はありません)
3.次に、ターミナルで
 $ xcode-select --install
と打ちます。すると、「command line tools」がインストールされます。
ここの手順はXcodeのバージョンによって違うかも知れません。
 $ gcc --version
と打ってみて、エラーが出なければ成功です。

Intel Fortranのインストール

2022年現在、Intelのコンパイラは完全無料です。
過去には有料だったり一部無料だったり、色々ありました。今後また有料になる可能性もあります。
2022.6.28の情報です。適宜最新情報を参照して下さい。
Intelのサイトからインストーラをダウンロードします。
Intel oneAPI Base Toolkit - Mac(MKLやC++コンパイラが含まれる)
サインインを求められますが、下の「Continue as a Guest (download starts immediately)」を選ぶとスキップもできます。
ダウンロードしたdmgファイルを開くとインストールが始まります。いくつか選択肢が出ますが、指示に従えば大丈夫です。

次に
Intel oneAPI HPC Toolkit - Mac(FortranコンパイラやMPIライブラリが含まれる)
をダウンロードしましょう。
ダウンロードしたdmgファイルを開くとインストールが始まります。選択肢はBase Toolkitと同様です。

パスを通す

起動時スクリプトで、設定ファイルを読みに行くようにします。
 $ echo $SHELL
/bin/bash
ならば
 $ nano ~/.bash_profile
を実行、そうではなく
 $ echo $SHELL
/bin/zsh
ならば
 $ nano ~/.zshrc
を実行するとエディタが開くので、次の1行を末尾にペーストします。
 source /opt/intel/oneapi/setvars.sh
これでインストール完了です。次にターミナルを開いた時からifortが使えるようになります。
ワークステーションにInten Fortranをインストールする

能書き

こちらは管理者用の覚え書きです。学生の皆さんは無視して大丈夫です。

2022年現在、Linux用のコンパイラも完全無料です。インストール手順は以下の通り。
1. 手元のコンピュータにX Window Systemをインストールしておく
2. Intel oneAPIをダウンロード
3. リモートでインストール
4.「.bash_profile」に設定を書き込む(パスを通す)
2022.6.28の情報です。適宜最新情報を参照して下さい。

1. 手元のMacにXQuartzをインストール

1. XQuartzをダウンロード
2. XQuartzがインストール出来たら再起動
再起動が必要なところだけ注意。
Windowsを使っている場合は、Cygwinか何かを入れて下さい。

2. Intel oneAPIのダウンロード

Intel oneAPI Toolkitをダウンロードして下さい
https://software.intel.com/content/www/us/en/develop/tools/oneapi/all-toolkits.html
Intel oneAPI Base Toolkit - Linux(MKLやC++コンパイラが含まれる)
Intel oneAPI HPC Toolkit - Linux(FortranコンパイラやMPIライブラリが含まれる)
の2つが必要です。
それぞれOffline Installerをダウンロードしたら、ファイル転送ソフト(Cyberduckとか)でWSにアップロードして下さい。
WSから直接ダウンロードしようとすると、FWやらproxyやらに阻まれる可能性があります。
そんな心配無いよ、という人はダウンロードページの「Command Line Installation Parameters」を参考に。

3. Intel oneAPIのインストール

インストール先のワークステーションに「-Y」オプション付きでログインします。
 $ ssh -Y remote_host_name
「-X」だと動かなかい場合があります。
最初からGUI環境が無ければCUIインストールが始まります。

まずはBaseKitから。
 $ sudo sh (インストーラを置いた場所)/l_BaseKit_p_202X.X.X.XXX_offline.sh
ファイル名(バージョン)は実際にダウンロードしたものを入れて下さい。
sudoできない場合は、
 $ su -
でrootになって実行しましょう。
インストールするパッケージをカスタマイズする選択肢が出てきますが、面倒なら「Recommended」で全部入れましょう。
OpenCLのWarningが出る場合がありますが、これも無視して構いません
CPU内蔵GPUの話で、Xeonならそもそも関係ありません。
次に、Eclipseについて聞かれますが「Skip」で良いです。
最後に、改善のための情報送信に同意を求められます。まあ同意してあげましょう。(しなくてもOKです)
しばらく放っておくとインストール完了します。
続いてHPCKitです。
 $ sudo sh (インストーラを置いた場所)/l_HPCKit_p_202X.X.X.XXX_offline.sh
流れと選択肢はBaseKitと同じです。

パスを通す

起動時スクリプトで、設定ファイルを読みに行くようにします。具体的には、".bash_profile"に次の1行を書き込みます。
設定をどこに書くかは好みがあるようですが
 source /opt/intel/oneapi/setvars.sh
新しくターミナルを開いて動作確認をしましょう。
 $ ifort -V
正しくバージョン表示されれば成功です。

新規ユーザのために
 /etc/skel/.bash_profile
も変更しておくと良いかもしれません。
MKL(LAPACK)を使う

能書き

Intel FortranにはMath Kernel Library(MKL)というライブラリが付属しています。
その正体は、BLASとLAPACKをIntel Fortran用に最適化してコンパイルしたものです。 なので、Xcode付属のもの(-framework vecLib)を使うより速い(はず)です。

インストール

インストールは、Intel Fortranと同時に行われるので特に意識して行う必要はありません。

コンパイルオプション

MKLを使う際は、コンパイル時にオプションを付ける必要があります。
バージョンによって異なるので。公式のお助けサイトを使って調べましょう。
「dynamic or static linking」は「Dynamic」、「interface layer」は「32-bit integer」を選べば大丈夫です。

オプションの例:
 -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lpthread -lm -ldl -mkl=sequential
コンパイルオプションとリンクラインオプションがありますが、よく分からなかったら全部並べて書けば良いです。

(OpenMP並列化する場合)
 -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -liomp5 -lpthread -lm -ldl -mkl=parallel