ここでは、コードのベクトル化に役立つ特定の言語機能について説明します。
__declspec(align(n)) 宣言は、ハードウェアのアライメント境界を克服します。restrict 指示子とプラグマは、語彙スコープ、データの依存性、両義性の解決による書きかたに関する問題を処理します。
特徴 |
説明 |
---|---|
__declspec(align(n)) |
変数を n バイト境界にアライメントするようにコンパイラーに指示します。変数のアドレスは address mod n=0 です。 |
__declspec(align(n,off)) |
各 n バイト境界内でオフセットだけ離して変数を n バイト境界にアライメントするようにコンパイラーに指示します。変数のアドレスは address mod n=off です。 |
restrict |
エイリアス仮定を行うとき一義化機構に柔軟性を持たせます。これによってベクトル化の度合いがより高くなります。 |
__assume_aligned(a,n) |
配列 a が n バイト境界にアライメントされていると見なすようコンパイラーに指示します。アライメント情報が取得できなかった場合に使用します。 |
#pragma ivdep |
ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示します。 |
#pragma vector |
ループをベクトル化する方法を指定し、効率ヒューリスティックについては無視したほうが良いことを示します。 |
#pragma novector |
ループをベクトル化しないよう指定します。 |