無料になったIntel compilerをCentOS8にインストールしてみる

　インテルのoneAPIのニュースとかは見ている方も多いかと思いますが、この流れで一番大きなインパクトは今まで高嶺の花だったIntel compilerが2021年になってから実質的に無料になってしまったということです。こうでもしないとNVIDIA[^1]には対抗できないってことなんでしょうけど、このディープラーニングの思わぬ副産物に対して従来型HPCユーザーも恩恵にあずからずにいるわけにはいかないでしょう。
　とりあえずCentOS8へのyum (dnf)を使ったインストールはとても簡単だったので、手順を紹介することにします。とりあえず[本家のガイド](https://software.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top/installation/install-using-package-managers/yum-dnf-zypper.html)はこちらから。やるのはyumのリポジトリを作ってinstallコマンドを打つだけです（root権限で行います）。

# yumでBase kitを入れる

　`/etc/yum.repos.d/oneAPI.repo`を以下の内容で作ります

```
[oneAPI]
name=Intel(R) oneAPI repository
baseurl=https://yum.repos.intel.com/oneapi
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
```
リダイレクトとかやるよりviか何かでコピペしてしまった方が簡単でしょう。
　あとは単に

```bash
# yum install intel-basekit
``` 
5回ぐらい`y`を叩くと（それなりにでかいのですが）インストールが始まります。

 インストールされたものを使うには（こちらは一般ユーザー権限で）

```bash
$ . /opt/intel/oneapi/setvars.sh
```
とします。この段階で`icx`（C言語）と`icpx`（C++）のコンパイラが利用可能になりますが、これは昔チョットお付き合いしたことのある`icc`/`icpc`とは別系統なコンパイラのようです。

```bash
$ mpiicpc --help
/opt/intel/oneapi/mpi/2021.2.0//bin/mpiicpc: 行 530: icpc: コマンドが見つかりません
```
こんなことにもなったり。

# HPC kitを入れて古いコンパイラも入れる
　実は古い方のコンパイラはoneAPI HPC Toolkitに含まれる`intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic`というパッケージの方で提供されているようです。インストールするには

```bash
# yum install intel-hpckit
```

　こんな感じで以後

```bash
$ icpc --version
icpc (ICC) 2021.2.0 20210228
Copyright (C) 1985-2021 Intel Corporation.  All rights reserved.

$ icpx --version
Intel(R) oneAPI DPC++ Compiler 2021.2.0 (2021.2.0.20210317)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/intel/oneapi/compiler/2021.2.0/linux/bin
```
のようになれば成功です。

---
#ログ置き場
Basekitでは以下のものが入りました（3 column）：

```
インストール済み:
  intel-basekit-2021.2.0-2883.x86_64                                              intel-basekit-getting-started-2021.2.0-2883.noarch                               intel-oneapi-advisor-2021.2.0-189.x86_64
  intel-oneapi-ccl-2021.2.0-2021.2.0-269.x86_64                                   intel-oneapi-ccl-devel-2021.2.0-2021.2.0-269.x86_64                              intel-oneapi-ccl-devel-2021.2.0-269.x86_64
  intel-oneapi-common-licensing-2021.2.0-195.noarch                               intel-oneapi-common-licensing-2021.2.0-2021.2.0-195.noarch                       intel-oneapi-common-vars-2021.2.0-195.noarch
  intel-oneapi-compiler-cpp-eclipse-cfg-2021.2.0-610.noarch                       intel-oneapi-compiler-dpcpp-cpp-2021.2.0-2021.2.0-610.x86_64                     intel-oneapi-compiler-dpcpp-cpp-2021.2.0-610.x86_64
  intel-oneapi-compiler-dpcpp-cpp-common-2021.2.0-2021.2.0-610.noarch             intel-oneapi-compiler-dpcpp-cpp-runtime-2021.2.0-2021.2.0-610.x86_64             intel-oneapi-compiler-dpcpp-eclipse-cfg-2021.2.0-610.noarch
  intel-oneapi-compiler-shared-2021.2.0-2021.2.0-610.x86_64                       intel-oneapi-compiler-shared-common-2021.2.0-2021.2.0-610.noarch                 intel-oneapi-compiler-shared-common-runtime-2021.2.0-2021.2.0-610.noarch
  intel-oneapi-compiler-shared-runtime-2021.2.0-2021.2.0-610.x86_64               intel-oneapi-condaindex-2021.2.0-94.x86_64                                       intel-oneapi-dal-2021.2.0-2021.2.0-358.x86_64
  intel-oneapi-dal-common-2021.2.0-2021.2.0-358.noarch                            intel-oneapi-dal-common-devel-2021.2.0-2021.2.0-358.noarch                       intel-oneapi-dal-devel-2021.2.0-2021.2.0-358.x86_64
  intel-oneapi-dal-devel-2021.2.0-358.x86_64                                      intel-oneapi-dev-utilities-2021.2.0-2021.2.0-493.x86_64                          intel-oneapi-dev-utilities-2021.2.0-493.x86_64
  intel-oneapi-dev-utilities-eclipse-cfg-2021.2.0-493.noarch                      intel-oneapi-dnnl-2021.2.0-228.x86_64                                            intel-oneapi-dnnl-devel-2021.2.0-228.x86_64
  intel-oneapi-dpcpp-cpp-2021.2.0-2021.2.0-610.x86_64                             intel-oneapi-dpcpp-ct-2021.2.0-2021.2.0-222.x86_64                               intel-oneapi-dpcpp-ct-2021.2.0-222.x86_64
  intel-oneapi-dpcpp-ct-eclipse-cfg-2021.2.0-222.noarch                           intel-oneapi-dpcpp-debugger-10.1.1-10.1.1-80.x86_64                              intel-oneapi-dpcpp-debugger-10.1.1-80.x86_64
  intel-oneapi-dpcpp-debugger-eclipse-cfg-10.1.1-80.noarch                        intel-oneapi-ipp-2021.2.0-2021.2.0-233.x86_64                                    intel-oneapi-ipp-common-2021.2.0-2021.2.0-233.noarch
  intel-oneapi-ipp-common-devel-2021.2.0-2021.2.0-233.noarch                      intel-oneapi-ipp-devel-2021.2.0-2021.2.0-233.x86_64                              intel-oneapi-ipp-devel-2021.2.0-233.x86_64
  intel-oneapi-ippcp-2021.2.0-2021.2.0-231.x86_64                                 intel-oneapi-ippcp-common-2021.2.0-2021.2.0-231.noarch                           intel-oneapi-ippcp-common-devel-2021.2.0-2021.2.0-231.noarch
  intel-oneapi-ippcp-devel-2021.2.0-2021.2.0-231.x86_64                           intel-oneapi-ippcp-devel-2021.2.0-231.x86_64                                     intel-oneapi-libdpstd-devel-2021.2.0-2021.2.0-245.x86_64
  intel-oneapi-libdpstd-devel-2021.2.0-245.x86_64                                 intel-oneapi-mkl-2021.2.0-2021.2.0-296.x86_64                                    intel-oneapi-mkl-common-2021.2.0-2021.2.0-296.noarch
  intel-oneapi-mkl-common-devel-2021.2.0-2021.2.0-296.noarch                      intel-oneapi-mkl-devel-2021.2.0-2021.2.0-296.x86_64                              intel-oneapi-mkl-devel-2021.2.0-296.x86_64
  intel-oneapi-mpi-2021.2.0-2021.2.0-215.x86_64                                   intel-oneapi-mpi-devel-2021.2.0-2021.2.0-215.x86_64                              intel-oneapi-onevpl-2021.2.2-2021.2.2-212.x86_64
  intel-oneapi-onevpl-devel-2021.2.2-2021.2.2-212.x86_64                          intel-oneapi-onevpl-devel-2021.2.2-212.x86_64                                    intel-oneapi-openmp-2021.2.0-2021.2.0-610.x86_64
  intel-oneapi-openmp-common-2021.2.0-2021.2.0-610.noarch                         intel-oneapi-python-2021.2.0-161.x86_64                                          intel-oneapi-tbb-2021.2.0-2021.2.0-357.x86_64
  intel-oneapi-tbb-common-2021.2.0-2021.2.0-357.noarch                            intel-oneapi-tbb-common-devel-2021.2.0-2021.2.0-357.noarch                       intel-oneapi-tbb-devel-2021.2.0-2021.2.0-357.x86_64
  intel-oneapi-tbb-devel-2021.2.0-357.x86_64                                      intel-oneapi-vtune-2021.2.0-263.x86_64
```

HPCkitで入ったのは以下になります(2 column)：

```
インストール済み:
  intel-hpckit-2021.2.0-2997.x86_64                                                                                              intel-hpckit-getting-started-2021.2.0-2997.noarch
  intel-oneapi-clck-2021.2.2-2021.2.2-315.x86_64                                                                                 intel-oneapi-clck-2021.2.2-315.x86_64
  intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2021.2.0-2021.2.0-610.x86_64                                                   intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2021.2.0-610.x86_64
  intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-common-2021.2.0-2021.2.0-610.noarch                                            intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-runtime-2021.2.0-2021.2.0-610.x86_64
  intel-oneapi-compiler-dpcpp-cpp-classic-fortran-shared-runtime-2021.2.0-2021.2.0-610.x86_64                                    intel-oneapi-compiler-fortran-2021.2.0-2021.2.0-610.x86_64
  intel-oneapi-compiler-fortran-2021.2.0-610.x86_64                                                                              intel-oneapi-compiler-fortran-common-2021.2.0-2021.2.0-610.noarch
  intel-oneapi-compiler-fortran-runtime-2021.2.0-2021.2.0-610.x86_64                                                             intel-oneapi-inspector-2021.2.0-145.x86_64
  intel-oneapi-itac-2021.2.0-152.x86_64                                                                                          intel-oneapi-itac-2021.2.0-2021.2.0-152.x86_64
```

[^1]: 自社のGPUでしか動かないCUDAを有償提供にするとかTeslaでしかGPGPUできないようにするといったような有り得ない経営判断をするようなことのない会社だったというのが、今日の栄華の一旦ではあるのかと思います。ソフト部門に「自分で金稼いでこい」というハードウェア会社はやっぱ駄目々々だと思うんです。