Use rqrt in child score calculation

Changes sqrt -> rsqrt and div->mul. Reduces latency by 23 -> 8 cycles.
This commit is contained in:
Asriel Camora
2023-07-04 08:36:41 +02:00
parent 76853e2f0d
commit e46d1b20fa
2 changed files with 21 additions and 3 deletions
+15
View File
@@ -110,6 +110,21 @@ internal static class Intrinsics
NthBitSetScalar(value, n);
}
[Pure]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector<float> ReciprocalSqrt(Vector<float> data)
{
if (Avx.IsSupported && Vector<float>.Count >= Vector256<float>.Count)
return Avx.ReciprocalSqrt(data.AsVector256()).AsVector();
if (Sse.IsSupported && Vector<float>.Count >= Vector128<float>.Count)
return Sse.ReciprocalSqrt(data.AsVector128()).AsVector();
Span<float> result = stackalloc float[Vector<float>.Count];
for (var i = 0; i < Vector<float>.Count; ++i)
result[i] = MathF.ReciprocalSqrtEstimate(data[i]);
return new(result);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CASMax(ref float location, float newValue)