インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

omp declare simd

SIMD ループから一度の呼び出しで、SIMD (single instruction-multiple data) 命令を使用して複数の引数を処理できる関数バージョンを作成します。

構文

#pragma omp declare simd [clause][[,]clause] ...]

関数定義または宣言。

引数

clause

次のいずれかです。

  • aligned( list[:linear-step] )

  • inbranch

  • simdlen( length )

  • linear( list[:linear-step] )

  • notinbranch

  • reduction( operator:list )

  • uniform( argument-list )

説明

declare_simd 構造は、特定の関数の SIMD バージョンを作成します。この SIMD バージョンを使用して、1 つの SIMD ループから一度の呼び出しで複数の変数を同時に処理できます。

関数には、SIMD チャンクの並列反復実行を変更するような副作用があってはなりません。SIMD ループから呼び出される場合、関数は OpenMP* 構造を実行することはできません。

min 関数の SIMD 命令を使用して実行するバージョンを生成する例

#pragma omp declare simd notinbranch
float min (float a, float b) { Return a < b ? a : b; }

void minner (float *a, float *b, float *c) {
  #pragma omp parallel for simd
  for (i=0; i<N; i++)
  c[i] = min(a[i], b[i], c[i]);
}