# 編譯、安裝 OpenMPI
## OpenMPI
- 參考: https://docs.open-mpi.org/en/v5.0.x/installing-open-mpi/quickstart.html
### 0. 軟體需求
需先安裝以下套件
- 支援 C99 以上的 C/C++ 編譯器
- GCC、Clang 或 Intel C++ Compiler
- 安裝 GCC
```
sudo apt install build-essential
```
- 若需要支援 fortran,需要安裝 gfortran
```
sudo apt install gfortran
```
- GNU Autotools
- Autoconf、Automake、Libtool
- 安裝 GNU Autotools
```
sudo apt install autoconf automake libtool
```
- 其他在官方文件列出的套件,預設已包含在 Ubuntu 中,不用另外安裝
### 1. 下載 OpenMPI 原始碼
- 到官網選擇要使用的版本
https://www.open-mpi.org/software/ompi/v5.0/
- 複製原始碼壓縮檔的 URL,並用 `wget` 下載
```
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.1.tar.gz
```
- 用 `tar` 解壓縮
```
tar xf ./openmpi-5.0.1.tar.gz
```
### 2. 設定編譯參數
- 進入 OpenMPI 原始碼的目錄中
```
cd openmpi-5.0.1
```
- 執行該目錄底下的 `configure` 進行設定
```
./configure --prefix=<path> <options>
```
- `--prefix` 用來指定 OpenMPI 的安裝路徑,編譯完成後的檔案將放在該路徑中
- `<path>` 如果是該 user 無法直接存取的路徑,需要加上 sudo
- `<options>` 用來設定編譯時的行為,包含啟用/禁用某功能、預設的編譯 flag、針對硬體優化 ... 等
- 可用的 option 可參考 [官方文件](https://docs.open-mpi.org/en/v5.0.x/installing-open-mpi/configure-cli-options/index.html)
- 台灣杉二號 [OpenMPI 編譯參數](https://man.twcc.ai/@twccdocs/guide-twnia2-module-main-zh/https%3A%2F%2Fman.twcc.ai%2F%40twccdocs%2Fguide-twnia2-module-open-mpi-zh#Open-MPI-411-module-matrix)
:::success
以安裝到 */opt/openmpi-5.0.1* 為例:
```
sudo ./configure --prefix=/opt/openmpi-5.0.1
```
:::
### 3. 編譯
- 透過 `make` 編譯
```bash
make all
# 或
make
```
- 加上 `-j <n>` 可以啟用平行編譯,可以加快整體編譯速度
- `<n>` 表示要使用的 thread 數量
- E.g., `-j4` 表示使用四個 thread 編譯
### 4. 安裝
- 透過 `make` 安裝
```
make install
```
- 如果在上個步驟設定的安裝路徑,不是目前 user 有存取權限的路徑,要在指令中加上 `sudo`
:::success
檢查 */opt/openmpi-5.0.1* 底下,是否有 *bin*、*lib*、*include* 等目錄
```
sudo ls /opt/openmpi-5.0.1
```
:::
### 5. 環境變數設定
- 要使用 OpenMPI 提供的編譯器,必須在 `PATH` 加入 OpenMPI `bin` 目錄
- 編譯出來的執行檔可能需要在 runtime 載入 Library,必須在 `LD_LIBRARY_PATH` 加入 OpenMPI 的 `lib` 目錄
```bash
# 以安裝目錄為 /opt/openmpi-5.0.1 為例
export PATH="/opt/openmpi-5.0.1/bin:$PATH"
export LD_LIBRARY_PATH="/opt/openmpi-5.0.1/lib:$LD_LIBRARY_PATH"
```