ループのセクション化として知られるストリップ・マイニングは、メモリのパフォーマンスを改善する手段を提供し、ループの SIMD エンコーディングを可能にするループ変換テクニックです。大きなループをより小さなセグメントやストリップに断片化することで、このテクニックは次の 2 つの方法でループ構造を変更します:
ベクトライザに最初に導入される場合、このテクニックは指定されたベクトルマシンの最大ベクトル長以下のサイズで各ベクトル演算が完了したときに生成されるコードからなります。
コンパイラは、自動的にループをストリップ・マイニングし、クリーンアップ・ループを生成します。
i=0; while(i<n) { // Original loop code a[i]=b[i]+c[i]; ++i; } |
// The vectorizer generates the following two loops i=0;
while(i<(n-n%4)) { // Vector strip-mined loop // Subscript [i:i+3] denotes SIMD execution a[i:i+3]=b[i:i+3]+c[i:i+3]; i=i+4; }
while(i<n) { // Scalar clean-up loop a[i]=b[i]+c[i]; ++i; } |