intel complerが無償で使えるそうな
https://software.intel.com/content/www/us/en/develop/articles/free-intel-software-developer-tools.html
ドキュメントを読むと商用でも使えるそうな.
https://www.intel.co.jp/content/www/jp/ja/software/oneapi-commercial-faq.html
入手方法は
とかが選べます. ごく簡単には「dnf」コマンド一発がいいのでしょうが、インストール場所が選べない模様.
ここでは場所を指定したいので後者のインストーラーを入手して進めます.
https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.htmlには複数のToolkit(インストーラー)がありますが、
ここでは下記2つのToolkitを取得して
「oneAPI DPC++/C++ Compiler」と「oneAPI Math Kernel Library」、「Fortran Compiler」、「MPI Library」とその関連をインストールします.
「oneAPI DPC++/C++ Compiler」がどちらのToolkitにも入っている.
ここでは「oneAPI Base Toolkit」からは「oneAPI Math Kernel Library」と「oneAPI Threading Building Blocks」を入れて
「oneAPI HPC Toolkit」からは「oneAPI DPC++/C++ Compiler」と「Fortran Compiler」、「MPI Library」を入れます.
*「Base Toolkit」の「oneAPI DPC++/C++ Compiler」はllvmベースの新規のコンパイラ(icx/icpx)で、従来のicc/icpcは「HPC Toolkit」の「C++ Compiler Classic」コンポーネントに含まれている. ただ2023の第二四半期でこの従来のicc/icpcは削除されるそうな...
bash ./l_BaseKit_p_2023.1.0.46401_offline.sh -a --cli
「-a --cli」オプションを付けると下図のようなCUI画面になります. X環境なら何もオプションを指定しないとGUI画面が立ち上がる.
「Accept & customize」を選びます。
コンポーネントを選ぶ画面になりますが、
「IntelR oneAPI Threading Building Blocks 2021.9.0」(62 MB)
「IntelR oneAPI Math Kernel Library 2023.1.0」(7.5 GB)
のみを有効にして「Next」を選びます. インストール場所を指定できる画面になります. ここでは「/apps/oneapi」としました. 既定値は「/opt/intel/oneapi」です
以降は既定のままで、あとIntel様へお伝えするかとかありますが、ご自由に.
次に「HPC Toolkit」
bash ./l_HPCKit_p_2021.3.0.3230_offline.sh -a --cli
下図のような画面が表示され
ここでも「Accept & customize」を選びます。
選ぶコンポーネントは
「IntelR MPI Library 2021.9.0」(645.8 MB)
「IntelR oneAPI DPC++/C++ Compiler & IntelR C++ Compiler Classic 2023.1.0」(6.8 GB)
「IntelR Fortran Compiler & IntelR Fortran Compiler Classic 2023.1.0」(3.1 GB)
とします. 従来のicc/icpxは不要なのですが、同封されてきます
インストール先は「BaseKit」の情報が継承されるようで以降は既定のままで、あとIntel様へお伝えするかとかありますが、これもご自由に.
*ここではRocklyLinux8で行ったのですが、冒頭に下記のような画面が表示されました
サポート外と見なされたようですが、intel様のドキュメントを読むとサポート内に見えるのだが...無視して進めてます.
環境設定を行います
単純に「source /apps/oneapi/setvars.sh」と実行すればPATH環境設定らが有効になる. インストール先がデフォルト値なら「source /opt/intel/oneapi/setvars.sh」
[saber@rockylinux ~]$ source /apps/oneapi/setvars.sh
:: initializing oneAPI environment ...
-bash: BASH_VERSION = 4.4.20(1)-release
args: Using "$@" for setvars.sh arguments:
:: compiler -- latest
:: debugger -- latest
:: dev-utilities -- latest
:: mkl -- latest
:: mpi -- latest
:: tbb -- latest
:: oneAPI environment initialized ::
[saber@rockylinux ~]$
PATH環境変数は先頭に下記が加わる
/apps/oneapi/mpi/2021.9.0//libfabric/bin
/apps/oneapi/mpi/2021.9.0//bin
/apps/oneapi/mkl/2023.1.0/bin/intel64
/apps/oneapi/dev-utilities/2021.9.0/bin
/apps/oneapi/debugger/2023.1.0/gdb/intel64/bin
/apps/oneapi/compiler/2023.1.0/linux/lib/oclfpga/bin
/apps/oneapi/compiler/2023.1.0/linux/bin/intel64
/apps/oneapi/compiler/2023.1.0/linux/bin
これでintel謹製コンパイラ llvm ベースの icx, icpx, ifx の他に従来の icc, icpx, ifort が使えます
またintel謹製のmpi、intel mpiのコマンドも使えます
intel謹製のmpiもいいのですが、openmpiをコンパイルしてみます. llvmベースの icx, icpx, ifxで作ります
[root@rockylinux ~]# source /apps/oneapi/setvars.sh
[root@rockylinux ~]# cd /apps/src/
[root@rockylinux src]# wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.bz2
[root@rockylinux src]# tar xf openmpi-4.1.5.tar.bz2
[root@rockylinux src]# cd openmpi-4.1.5/
[root@rockylinux openmpi-4.1.5]#
[root@rockylinux openmpi-4.1.5]# CC=icx CXX=icpx FC=ifx ./configure --without-verbs --prefix=/apps/openmpi-4.1.5_icx-2023.1
[root@rockylinux openmpi-4.1.5]# make -j 20; make check ; make install
oneAPIでは簡単にEnvironmentModules対応が用意されているみたい.
[root@rockylinux ~]# /apps/oneapi/modulefiles-setup.sh --ignore-latest --output-dir=/apps/oneapi/modulefiles
[root@rockylinux ~]# ls -l /apps/oneapi/modulefiles
total 0
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler32
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler-rt
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler-rt32
drwxr-xr-x. 2 root root 22 May 15 00:35 debugger
drwxr-xr-x. 2 root root 22 May 15 00:35 dev-utilities
drwxr-xr-x. 2 root root 22 May 15 00:35 icc
drwxr-xr-x. 2 root root 22 May 15 00:35 icc32
drwxr-xr-x. 2 root root 22 May 15 00:35 init_opencl
drwxr-xr-x. 2 root root 22 May 15 00:35 mkl
drwxr-xr-x. 2 root root 22 May 15 00:35 mkl32
drwxr-xr-x. 2 root root 22 May 15 00:35 mpi
drwxr-xr-x. 2 root root 22 May 15 00:35 oclfpga
drwxr-xr-x. 2 root root 22 May 15 00:35 tbb
drwxr-xr-x. 2 root root 22 May 15 00:35 tbb32
[root@rockylinux ~]#
作られるmodulefilesは「environment-modules-v4.1」対応で用意される.
あと32bit関係や debugger、opencl、fpgaとかのmoduleは使わないなら削除した方がいいかも
[root@rockylinux ~]# cd /apps/oneapi/modulefiles/
[root@rockylinux modulefiles]#
[root@rockylinux modulefiles]# rm -rf compiler32 compiler-rt32 debugger dev-utilities icc32 init_opencl mkl32 oclfpga tbb32
[root@rockylinux modulefiles]# ls -l
total 0
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler
drwxr-xr-x. 2 root root 22 May 15 00:35 compiler-rt
drwxr-xr-x. 2 root root 22 May 15 00:35 icc
drwxr-xr-x. 2 root root 22 May 15 00:35 mkl
drwxr-xr-x. 2 root root 22 May 15 00:35 mpi
drwxr-xr-x. 2 root root 22 May 15 00:35 tbb
[root@rockylinux modulefiles]#
使い方ですが、 「&color(orangered){module use /apps/oneapi/modulefiles}:」とすればmodulefilesが登録されてコンパイラーを簡単にロードできるようになります
[root@rockylinux ~]# module use /apps/oneapi/modulefiles
[root@rockylinux ~]# module ava
--------------------------------------------------------- /apps/oneapi/modulefiles ----------------------------------------------------------
compiler-rt/2023.1.0 compiler/2023.1.0 icc/2023.1.0 mkl/2023.1.0 mpi/2021.9.0 tbb/2021.9.0
------------------------------------------------------ /usr/share/Modules/modulefiles -------------------------------------------------------
dot module-git module-info modules null use.own
[root@rockylinux ~]#
ここでRHEL8/9系の場合mpiはOS側で用意され、これはEnvironmentModulesで制御対象です
[root@rockylinux ~]# dnf install openmpi -y
[root@rockylinux ~]# module ava
------------------------------------------------------ /usr/share/Modules/modulefiles -------------------------------------------------------
dot module-git module-info modules null use.own
---------------------------------------------------------- /usr/share/modulefiles -----------------------------------------------------------
mpi/openmpi-x86_64 pmi/pmix-x86_64
[root@rockylinux ~]# module use /apps/oneapi/modulefiles
[root@rockylinux ~]# module ava
--------------------------------------------------------- /apps/oneapi/modulefiles ----------------------------------------------------------
compiler-rt/2023.1.0 compiler/2023.1.0 icc/2023.1.0 mkl/2023.1.0 mpi/2021.9.0 tbb/2021.9.0
------------------------------------------------------ /usr/share/Modules/modulefiles -------------------------------------------------------
dot module-git module-info modules null use.own
---------------------------------------------------------- /usr/share/modulefiles -----------------------------------------------------------
mpi/openmpi-x86_64 pmi/pmix-x86_64
[root@rockylinux ~]#
この際、OS由来のopenmpiを対象とした「&colro(magenta){mpi/openmpi-x86_64};」と oneAPI由来の「&colro(magenta){mpi/2021.9.0};」が「mpi」で被ります.
単に「module load mpi」とするとより上位にあるmpiが参照されます. なのでより明示的に「module load mpi/openmpi-x86_64」もしくは「module load mpi/2021.9.0」で指定した方がよさげ.
*「module use」の際に下位に位置させたければ「module use --append」、より以上に位置させたければ「module use --prepend」とした方がいいのかも
基本キットで「IntelR oneAPI Threading Building Blocks(TBB)」と「IntelR oneAPI Math Kernel Library(MKL)」のみをインストールするなら
bash ./l_BaseKit_p_2023.0.0.25537_offline.sh -a -s --eula accept --intel-sw-improvement-program-consent decline \
--components intel.oneapi.lin.tbb.devel:intel.oneapi.lin.mkl.devel
HPC Toolkitで「IntelR oneAPI DPC++/C++ Compiler & IntelR C++ Compiler Classic」「IntelR MPI Library」及び「IntelR Fortran Compiler (Beta) & IntelR Fortran Compiler Classic」をインストールするなら
bash ./l_HPCKit_p_2023.0.0.25400_offline.sh -a -s --eula accept --intel-sw-improvement-program-consent decline \
--components intel.oneapi.lin.dpcpp-cpp-compiler-pro:intel.oneapi.lin.mpi.devel:intel.oneapi.lin.ifort-compiler
とします。
インストーラーに含まれるコンポーネントの一覧は「--list-components」で得られます
[root@rockylinux ~]# bash /Public/em/l_HPCKit_p_2023.1.0.46346_offline.sh -a --list-components
(略
ID Version Installed Name
================================================================================================================================
intel.oneapi.lin.inspector 2023.1.0-43486 false Intel® Inspector
intel.oneapi.lin.itac 2021.9.0-43491 false Intel® Trace Analyzer and Collector
intel.oneapi.lin.clck 2021.7.3-45658 false Intel® Cluster Checker
intel.oneapi.lin.mpi.devel 2021.9.0-43482 false Intel® MPI Library
intel.oneapi.lin.dpcpp-cpp-compiler-pro 2023.1.0-46305 false Intel® oneAPI DPC++/C++ Compiler & Intel® C++ Compiler Classic
intel.oneapi.lin.ifort-compiler 2023.1.0-46305 false Intel® Fortran Compiler & Intel® Fortran Compiler Classic
Remove extracted files: /root/l_HPCKit_p_2023.1.0.46346_offline...
[root@rockylinux ~]#
な感じで.