準備と設定
環境構築してみよう
自腹で買った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つが必要です。Intel oneAPI HPC Toolkit - Linux(FortranコンパイラやMPIライブラリが含まれる)
それぞれOffline Installerをダウンロードしたら、ファイル転送ソフト(Cyberduckとか)でWSにアップロードして下さい。
WSから直接ダウンロードしようとすると、FWやらproxyやらに阻まれる可能性があります。
そんな心配無いよ、という人はダウンロードページの「Command Line Installation Parameters」を参考に。
そんな心配無いよ、という人はダウンロードページの「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