情報源
Intelコンパイラの#pragma ivdep
相当の指示句は他のコンパイラにもあることが多いですが、だいたい別名です。以下のOpenMPのドキュメントに様々なバリエーションの記載がありました。
https://www.openmp.org/wp-content/uploads/OpenMP_SC20_Loop_Transformations.pdf
内容
上記内容と、一部記載のないものも加えた一覧です。
Cray
#pragma [_CRI] ivdep
SGI/Open64
#pragma ivdep
HP
#pragma IVDEP
Intel (iccは有効、icxでも有効かは不安)
#pragma ivdep
PGI
#pragma ivdep
gcc
#pragma GCC ivdep
msvc
#pragma loop(ivdep)
clang
#pragma clang loop vectorize(enable)
NEC (nc++)
#pragma _NEC ivdep
感想
ベクトル化/SIMD化しようとすると、ivdep
は必須。個人的にはivdep
よりもrestrict
を使って個別に依存関係をコンパイラに伝えたい。とはいえ、restrict
も対応状況がコンパイラ依存で、__restrict
、__restrict__
などのバリエーションがある。また、特に困るのはstd::vector
に対してrestrict
相当の明示をどうやるんだという問題があり、HPC等の速度が最重要の分野では、やっぱり生ポ最強なんじゃと思ってしまう。