Note on Stride:
Memory stride is the distance between memory accesses and is measured as:
Local stride: This is the memory stride between two memory accesses for the same memory reference.
Global stride: This is the memory stride between memory accesses for consecutive memory references.
Consider the following example:
for (i=0; i<1000; i++){ for(j=0; j<10; j++){ sum += arrayOne[i] + arrayTwo[j]; } result[i] = sum; }The memory stride between consecutive memory accesses for the arrayOne memory reference is its local stride, i.e. (starting address of arrayOne[50] - ending address of arrayOne[49] ) is the local stride of arrayOne.
Note: This also means that if a region of code contains only 1 memory reference, global stride will be the same as local stride.
gStride3:
gStride3 or global stride 3 is a measure of the number of consecutive memory references
that access the same 4 Byte memory location.
Classifying gStride3:
gStride3 can be classified as low, medium or high as follows:
Bucket | Condition |
---|---|
Low |
The region of code contains no memory references.
OR
The unique array references that have a global stride of 3 are outnumbered by 8:1
or more.
|
Medium | The unique array references that have a global stride of 3 are outnumbered by 6:1. |
High | The unique array references that have a global stride of 3 are outnumbered by 3:1 or less. |
Example:
Consider the following code:
for (i=0; i<1000; i++){ for(j=0; j<10; j++){ sum += arrayOne[i] * arrayTwo[j]; } result[i] = sum; }This code contains 3 memory references (through arrays arrayOne, arrayTwo & result) and none of these references access successive locations since they all access different arrays.