Intel classic compiler のオプション

Intel classic compiler の -ipp とか -mkl) といったオプションは deprecated とされ、最近は -qipp とか -qmkl に移行している(ipp のドキュメントに"Alternate Options: Linux: -qipp (this is a deprecated option)" とあるのはおそらくミス)。一方、q つきのオプションは古いバージョンのコンパイラには存在しない(少なくとも 2021.3.0 にはない)ため、現状では q が付かないほうが互換性が高いが、将来のバージョンで q なしを認識しなくなったらまた壊れる。もっとも、classic compiler 自体が deprecated で 2023 年後半には oneAPI HPC toolkit から消える予定だが。

Intel compiler (新しいほう: icpx) と GCC

一方、SYCL のコンパイルなどに用いる新しいほうの Intel compiler は LLVM ベースとなっており、C++ ヘッダなどは g++ のものを使う。システムに入っている gcc を自動で検出し最新のものを使うが、最新バージョンは gcc だけ入っていて g++ がないといった場合、低いバージョンで gcc も g++ も揃っているものを自動では探してくれない。また conda 由来の gcc/g++ は、PATH が通っていてもうまく検出してくれなかった。"Fatal Error: 'C++ Header' File Not Found with Intel® oneAPI DPC++/C++ Compiler" に、gcc のパスを明示する方法が書いてあるが、conda environment のトップなどではない。icpx -help

The directory ends with path components like 'lib{,32,64}/gcc{,-cross}/$triple/$version'. Note: executables (e.g. ld) used by the compiler are not overridden by the selected GCC installation

とあるように、奥の方のフォルダを指定する必要がある。具体的には、

icpx test.cpp --gcc-install-dir=/path_to_conda_env/lib/gcc/x86_64-conda-linux-gnu/12.2.0 

で動いた。

conda-forge を使う

Anaconda の main レポジトリは ToS が厳しいので使いたくない。Miniconda ならデフォルトでそれを参照しないと思っていたのだが、そうでもないようなのでここにしたがって設定変更。

$ conda config --show channels
channels:
  - defaults
$ conda config --show default_channels # あかんやつ
default_channels:
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
$ conda config --add channels conda-forge
$ conda config --set channel_priority strict

これでいいはず。

読んだ