I am coding a Hanning filter which is a recursive relation:
y[i] = 0.25*(x[i] + 2*x[i-1] + x[i-2])
And here is my code were I attempt to unroll 3 times:
public void HanningFilter(float[] array) {
int len = array.length;
int i;
for (i = 2; i < len-3; i+=3) {
array[i] = 0.25f*(array[i] + 2*array[i-1] + array[i-2]);
array[i+1] = 0.25f*(array[i+1] + 2*array[i] + array[i-1]);
array[i+2] = 0.25f*(array[i+2] + 2*array[i+1] + array[i]);
}
//Clean-up at the end
for (int j = i; j < len; j++) {
array[i] = 0.25f*(array[i] + 2*array[i-1] + array[i-2]);
}
}
Would this help at all with an OoO superscalar processor? Is 3 the right amount of times to unroll? Thanks