mirror of https://github.com/apache/lucene.git
LUCENE-9837: try to improve performance of VectorUtil.dotProduct (#17)
More loop unrolling for VectorUtil.dotProduct to eek out a bit more short-term performance.
This commit is contained in:
parent
f3a284ad83
commit
d48193e8cf
|
@ -42,25 +42,55 @@ public final class VectorUtil {
|
||||||
if (a.length < 8) {
|
if (a.length < 8) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
float s0 = 0f;
|
for (; i + 31 < a.length; i += 32) {
|
||||||
float s1 = 0f;
|
res +=
|
||||||
float s2 = 0f;
|
b[i + 0] * a[i + 0]
|
||||||
float s3 = 0f;
|
+ b[i + 1] * a[i + 1]
|
||||||
float s4 = 0f;
|
+ b[i + 2] * a[i + 2]
|
||||||
float s5 = 0f;
|
+ b[i + 3] * a[i + 3]
|
||||||
float s6 = 0f;
|
+ b[i + 4] * a[i + 4]
|
||||||
float s7 = 0f;
|
+ b[i + 5] * a[i + 5]
|
||||||
for (; i + 7 < a.length; i += 8) {
|
+ b[i + 6] * a[i + 6]
|
||||||
s0 += b[i] * a[i];
|
+ b[i + 7] * a[i + 7];
|
||||||
s1 += b[i + 1] * a[i + 1];
|
res +=
|
||||||
s2 += b[i + 2] * a[i + 2];
|
b[i + 8] * a[i + 8]
|
||||||
s3 += b[i + 3] * a[i + 3];
|
+ b[i + 9] * a[i + 9]
|
||||||
s4 += b[i + 4] * a[i + 4];
|
+ b[i + 10] * a[i + 10]
|
||||||
s5 += b[i + 5] * a[i + 5];
|
+ b[i + 11] * a[i + 11]
|
||||||
s6 += b[i + 6] * a[i + 6];
|
+ b[i + 12] * a[i + 12]
|
||||||
s7 += b[i + 7] * a[i + 7];
|
+ b[i + 13] * a[i + 13]
|
||||||
|
+ b[i + 14] * a[i + 14]
|
||||||
|
+ b[i + 15] * a[i + 15];
|
||||||
|
res +=
|
||||||
|
b[i + 16] * a[i + 16]
|
||||||
|
+ b[i + 17] * a[i + 17]
|
||||||
|
+ b[i + 18] * a[i + 18]
|
||||||
|
+ b[i + 19] * a[i + 19]
|
||||||
|
+ b[i + 20] * a[i + 20]
|
||||||
|
+ b[i + 21] * a[i + 21]
|
||||||
|
+ b[i + 22] * a[i + 22]
|
||||||
|
+ b[i + 23] * a[i + 23];
|
||||||
|
res +=
|
||||||
|
b[i + 24] * a[i + 24]
|
||||||
|
+ b[i + 25] * a[i + 25]
|
||||||
|
+ b[i + 26] * a[i + 26]
|
||||||
|
+ b[i + 27] * a[i + 27]
|
||||||
|
+ b[i + 28] * a[i + 28]
|
||||||
|
+ b[i + 29] * a[i + 29]
|
||||||
|
+ b[i + 30] * a[i + 30]
|
||||||
|
+ b[i + 31] * a[i + 31];
|
||||||
|
}
|
||||||
|
for (; i + 7 < a.length; i += 8) {
|
||||||
|
res +=
|
||||||
|
b[i + 0] * a[i + 0]
|
||||||
|
+ b[i + 1] * a[i + 1]
|
||||||
|
+ b[i + 2] * a[i + 2]
|
||||||
|
+ b[i + 3] * a[i + 3]
|
||||||
|
+ b[i + 4] * a[i + 4]
|
||||||
|
+ b[i + 5] * a[i + 5]
|
||||||
|
+ b[i + 6] * a[i + 6]
|
||||||
|
+ b[i + 7] * a[i + 7];
|
||||||
}
|
}
|
||||||
res += s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7;
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue