【Intel】oneAPIインストール/アップデート方法

# はじめに
ガシガシプログラミングしてコンパイルしているみなさんには簡単なoneAPIインストール/アップデート！！！

やった事あるとか無いとか、知っている知らない関係なく、インストールしないといけない状況！！！
そんな方々(私もです・・・)のoneAPIインストール/アップデート方法のメモです。

ですので新しい情報はないです、、、

# 参考
https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html?wapkw=oneAPI#gs.new9jf

https://www.xlsoft.com/jp/products/intel/oneapi/index.html

https://codezine.jp/article/detail/13445
# oneAPIとは
> oneAPIは複数のアーキテクチャ向けソフトウェア開発を容易にし、かつ最適なハードウェアを自由に選択できるクロスアーキテクチャ・プログラミング・モデルである

NVIDIAの`cuda`、Intelの`oneAPI`みたいな事ですかね？？？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975568/4bcbf785-e733-1200-93fd-f6f7c0e6d9d6.png)

# 環境
|item|version|
|:-:|:-:|
|kernel|CentOS8系|
|oneAPI|BaseKit_2023.0.0.25537
|Environment modules|/|

# 手順
- (1) oneAPIダウンロード
- (2) oneAPIインストール
- (3) oneAPIアップデート
    - (3-1)oneAPI_プロダクト確認
    - (3-2)oneAPI削除
- (4) Environment modules連携
- (5) 動作確認

# (1) oneAPIダウンロード
oneAPIには4種類あります。
- Intel oneAPI Base Toolkit(DPC++/C++ Compiler)
- Intel® oneAPI HPC Toolkit(Intel® C++ Compiler Classic)
- Intel® AI Analytics Toolkit
- Intel® oneAPI IoT Toolkit

今回はBase Toolkitのインストール/アップデートを主に実行します。

:::note info
**Intel® C++ Compiler ClassicはHPC Toolkitでインストールされます。**
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975568/8574b521-4fce-002a-d03f-14a56ab44730.png)

プルダウンを選んでダウンロード

https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html

もしくは`wget`でダウンロード出来ます。
```bash
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19079/l_BaseKit_p_2023.0.0.25537_offline.sh
```
# (2) oneAPIインストール

今回はofflineバージョンでインストールします。

:::note info
**OnlineまたはyumなどのPackage Managerでのインストールも可能。**
:::


インストールは簡単です。全てデフォルトで問題なければこれで終わりです。
```bash:/tmp
sudo sh ./l_BaseKit_p_2023.0.0.25537_offline.sh

---
# エラー発生しますが、OpenCL使用していなければ無視して問題なし
Intel? Graphics Compute Runtime for OpenCL not found

# エラー発生しますが、Intel製GPU使用していなければ無視して問題なし
You have no relevant GPU driver.・・・
---
```

画面非表示/インストールディレクトリ指定。
```bash:/tmp
# -s(サイレント)　-a(action) --silent(サイレント)　--eula(ソフトウェア利用許諾契約=Yes) --install-dir(/opt/oneapi/intel/oneapi/)
# -sと--silentの違いは-sはコマンド実行を非表示？　--silentはインストール表示を非表示？
./l_BaseKit_p_2021.4.0.3422_offline.sh -s -a --silent --eula accept --install-dir /opt/oneapi/intel/oneapi/
```

インストール完了すると下記ディレクトリが作成されます。


```bash:/opt/intel/
# インストールディレクトリを指定しているので二つに分かれています。
/opt/intel/　　← このディレクトリがデフォルト
├── oneapi
│   └── installer
└── packagemanager
```

```bash:/opt/oneapi/intel/oneapi/
# インストールディレクトリ指定
/opt/oneapi/intel/oneapi/
├── advisor
├── ccl
├── clck
├── compiler
├── conda_channel
├── dal
├── debugger
├── dev-utilities
├── diagnostics
├── dnnl
├── dpcpp-ct
├── dpl
├── etc
├── inspector
├── ipp
├── ippcp
├── itac
├── licensing
├── logs
├── mkl
├── mpi
├── tbb
├── vpl
└── vtune
```
:::note info
**インストール自体は非常に簡単です**
:::

:::note alert
**アップデートがちょっと、、、**
:::

# (3) oneAPIアップデート
PackageManagerを使用していればアップデートは簡単らしいのですが、offlineインストールしているとちょっとややこしいです。
そのまま`./l_BaseKit_p_2023.0.0.25537_offline.sh`実行すると、バージョン毎にディレクトリが作成されます。
後述する`Environment modules`を使用していると大変やっかいです。旧バージョンまで表示されてしまいます。
試しにインストールすると、各ディレクトリ毎に下記のような結果になります。
```diff:/opt/oneapi/intel/oneapi/
+ /opt/oneapi/intel/oneapi/
+├── compiler
+│   ├── 2021.x.x-xxxx
+│   └── latest -> 2021.x.x-xxxx
- /opt/oneapi/intel/oneapi/
-├── compiler
-│   ├── 2021.x.x-xxxx
-│   ├── 2023.0.0
-│   └── latest -> 2023.0.0
```

そこで一度`oneAPI`を削除してからインストール実施します。

### (3-1)oneAPI_プロダクト確認


```bash:/tmp
# インストールされているバージョンと同バージョンの方が分かりやすいですが、
# 最新バージョンで問題ありません。
./l_BaseKit_p_2023.0.0.25537_offline.sh -s -a --list-products 

---
ID                               Version        Installed Name                       
=====================================================================================
intel.oneapi.lin.basekit.product 2021.x.x-xxxx true     Intel oneAPI Base Toolkit 
intel.oneapi.lin.basekit.product 2023.0.0-25537 false     Intel oneAPI Base Toolkit 
---
```
:::note info
**Installed列がtrueの行が、インストールされているproduct-Versionになります。**
**今回の場合は2021.x.x-xxxxバージョンはインストール済み**
:::

:::note warn
**今回はBaseKit_p_2023.0.0.25537を用いて確認しているため、BaseKit_p_2023.0.0.25537行が表示されています。
異なるバージョンで確認した場合は、実行したToolkitバージョンの行が表示されるので同一バージョンの方が見やすい**
:::

### (3-2) oneAPI削除
`--list-products`で確認した情報をもとに`remove`します。

```bash
# --product-id = ID部分
# --product-ver = Version部分
/opt/intel/oneapi/installer/installer -s --action remove --product-id intel.oneapi.lin.basekit.product --product-ver 2021.x.x-xxxx
```

インストールディレクトリ指定していた場合は`/opt/oneapi/intel/oneapi/`と
標準で`/opt/intel`、あとキャッシュディレクトリ関係が`削除`されます。

https://www.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top/uninstall-oneapi-toolkits-and-components.html

:::note alert
**インストールディレクトリを手動で削除は推奨されないようですので、`installer`を用いて削除するのが無難です**
:::

削除完了すれば、あとはインストール実施すれば完了。

# (4) Environment modules連携

下記スクリプト実施で`Environment modules用ファイル`が自動生成されます。
```bash:/opt/ONEAPI/intel/oneapi
./modulefiles-setup.sh
---
/opt/oneapi/intel/oneapi/
├── ・・・
├── modulefiles
└── ・・・
---

```
:::note warn
**modulefiles-setup.shを実行したディレクトリを見に行くので異なるバージョンもそのまま作成されます**
:::

# (5) 動作確認
コンパイルとかよくわからないのでバージョン確認だけ・・・

```bash:/opt/oneapi/intel/oneapi/compiler/2023.0.0/linux/bin/intel64/
# インテル® C++ コンパイラー (クラシック) 
./icc -v
---
icc version 2021.8.0 (gcc version 8.4.1 compatibility)
---
```

```bash:/opt/oneapi/intel/oneapi/compiler/2023.0.0/linux/bin/
# インテル® oneAPI DPC++/C++ コンパイラー
./dpcpp -v
---
Intel(R) oneAPI DPC++/C++ Compiler 2023.0.0 (2023.0.0.20221201)
・・・
---
```

ひとまず実行出来ました。
参考になれば

ではまた