Strip Mining and Cleanup

Strip mining, also known as loop sectioning, is a loop transformation technique for enabling SIMD-encodings of loops, as well as providing a means of improving memory performance. By fragmenting a large loop into smaller segments or strips, this technique transforms the loop structure in two ways:

First introduced for vectorizers, this technique consists of the generation of code when each vector operation is done for a size less than or equal to the maximum vector length on a given vector machine. 

The compiler automatically strip-mines your loop and generates a cleanup loop.

Before Vectorization

i=0;

while(i<n)

{

   // Original loop code 

   a[i]=b[i]+c[i];

   ++i;

}

After Vectorization

// 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;

}