OpenMPIのインストール　ダウンロードからパス通しまで

まずはgcc、gfortranとmakeをインストールしましょう。
すでに導入済みかどうかの確認方法は以下の通りです。(...は省略事項)

```ruby:gcc
$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
....
```

```ruby:make
$ make --version
GNU Make 4.2.1
....
```

```ruby:gfortran
$ gfortran -v
Using built-in specs.
....
```

こんな形でgcc、gfortranとmakeのバージョンがでてきたらひとまずインストールされています。
もしインストールされていなければ以下を実行します、buikd-essentialでgccとmakeの両方がインストールされます。gfortranもインストールしましょう(Ubuntu20ではなぜかgfotranは標準で入っていませんでした)

```ruby:make&gcc
$ sudo apt install build-essential
$ sudo apt-get install gfortran
```

インストールが完了したら改めて、上記のgccとmakeのコマンドを打って同じような画面が現れるか確認します。

次にopenMPI本体をダウンロードします。
https://www.open-mpi.org/software/ompi/v4.0/
(本記事作成当時はopenmpi-4.0.4.tar.gzをダウンロードしました。〜.tar.gzをダウンロードすれば間違いないでしょう)
ダウンロード保管場所は
/home/Qiita/Downloads/openmpi-4.0.4.tar.gz
とします。(ユーザーを「Qiita」とします)

以下の通りコマンドを入力し、ダウンロードしたopenMPIのルートに移動&解凍します。解凍場所は指定がなければ同ディレクトリにされます。(この後、openMPIのインストール先を指定できるので解凍場所はどこでも大丈夫です)

```ruby:cd&tar
$ cd /home/Qiita/Downloads
$ tar -xvf openmpi-4.0.4.tar.gz
```

すると /home/Qiita/Downloads に新たに /home/Qiita/Downloads/openmpi-4.0.4 ができます。
次に、それではopenMPIを実際にインストールしていきましょう。openMPIのインストール先は/opt/openMPIにします。/opt/openMPIというディレクトリを作って更に、そこを指定しながらインストールしていきましょう。

```ruby:cd&tar
$ sudo mkdir /opt/openMPI   #1
$ ./configure --prefix=/opt/openMPI CC=gcc CXX=g++ F77=gfortran FC=gfortran #2
$ make #3
$ sudo make install #4
```
 #1で先述のディレクトリを作ります
 #2でインストーラーをコンパイルします。インストールを指示する指導者を前もって作るようなイメージです。この指導者に--prefix=/opt/openMPIというコマンドで、実際のインストールでは/opt/openMPIにインストールするよう、部下に伝えなさいと指導者に指定します。
 #3で実際に指導者から部下に指示がバンバン出されます。

**また、#2を実行すると長ったらしい文が出てきて結構な時間がかかります。#3も同様です**

最後にパスを通します。コンピュータにopenMPIをインストールした場所を教えます。
これらは.bashrcというターミナルのデフォルト設定を記述しているファイルに記述しましょう。
そうすればターミナルを起動するたびに必ずこの.bashrcを読み込むので、コンピュータがopenMPIをインストールした場所を忘れません。

```ruby:PATH
# sudo gedit ~/.bashrc #1
------以下は.bashrcに書き込む-------
PATH=/opt/openMPI/bin:$PATH
LD_LIBRARY_PATH=/opt/openMPI/lib:$LD_LIBRARY_PATH
MANPATH=/opt/openMPI/share/man:$MANPATH
export PATH LD_LIBRARY_PATH MANPATH
---------------------------------
#sudo source ~/.bashrc #2
```

PATHは自分もよくわかってませんが、上記の手順通りのインストールをしたならこれで大丈夫なはず...
( #1でgeditというエディターで.bashrcが開かれます。次に、上記の内容をコピペしましょう)
書き終わったら保存、geditを閉じて#2を打って.bashrcの内容をターミナルに反映させます。

一通り終わったら、テストしましょう。
テストのコンパイルファイルは以下のサイトから引用しています。
http://discexuno.wp.xdomain.jp/hpc/setup_mpi/

```ruby:sample.cpp
$ cd #1
$ touch sample.cpp #2
$ gedit sample.cpp
```

 #1でホームディレクトリ(/home/Qiita)に戻ります
 #2ではtouchコマンドで新たなファイルを作ります。名前は「sample.cpp」で指定しましょう。
 #3でgeditを使ってsample.cppを開き、以下の内容をコピペして保存します。

```ruby:sample.cpp
//sample.cpp
#include "mpi.h"
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int rank, size;
    MPI_Init(&argc, &argv);

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    printf("Hello, World.  I am %d of %d\n", rank, size);

    MPI_Finalize();
    return 0;
}
```

最後に以下のコマンドを打って、最後の「Hello world....」が表示されればopenMPIは正常に動いています。

```ruby:test
$ mpic++ sample.cpp #1
$ mpirun -np 2 a.out #2
Hello, World.  I am 0 of 2
Hello, World.  I am 1 of 2
```

 #1ではc++でsample.cppをコンパイルしa.outを出力させます。(このsample.cpp内のプログラムの内容は意味がわかっていません。非常に初歩的な部分で、勉強不足ですね....)
 #2では「-np 2」でCPUの2コアを指定してopenMPIにa.outを実行させています。結果から言うと、Hello worldという文字を2コア使って書かせたということがわかります。なんというか....結果から言うと2人でHello worldを書いたという感じですね...

以上で、openMPIのインストールは終了です。
大変初歩的ですが、初心者には少しむずかしかったです泣
お読みいただきありがとうございました。