private static float SumAbs(Span <float> src) { if (Avx.IsSupported) { return(AvxIntrinsics.SumAbsU(src)); } else if (Sse.IsSupported) { return(SseIntrinsics.SumAbsU(src)); } else { float sum = 0; for (int i = 0; i < src.Length; i++) { sum += Math.Abs(src[i]); } return(sum); } }
private static float SumAbs(float mean, Span <float> src) { if (Avx.IsSupported) { return((mean == 0) ? AvxIntrinsics.SumAbsU(src) : AvxIntrinsics.SumAbsDiffU(mean, src)); } else if (Sse.IsSupported) { return((mean == 0) ? SseIntrinsics.SumAbsU(src) : SseIntrinsics.SumAbsDiffU(mean, src)); } else { float sum = 0; for (int i = 0; i < src.Length; i++) { sum += Math.Abs(src[i] - mean); } return(sum); } }
public static float SumAbs(float mean, ReadOnlySpan <float> source) { Contracts.AssertNonEmpty(source); if (Avx.IsSupported) { return((mean == 0) ? AvxIntrinsics.SumAbsU(source) : AvxIntrinsics.SumAbsDiffU(mean, source)); } else if (Sse.IsSupported) { return((mean == 0) ? SseIntrinsics.SumAbsU(source) : SseIntrinsics.SumAbsDiffU(mean, source)); } else { float sum = 0; for (int i = 0; i < source.Length; i++) { sum += Math.Abs(source[i] - mean); } return(sum); } }
public static float SumAbs(ReadOnlySpan <float> source) { Contracts.AssertNonEmpty(source); if (source.Length < MinInputSize || !Sse.IsSupported) { float sum = 0; for (int i = 0; i < source.Length; i++) { sum += Math.Abs(source[i]); } return(sum); } else if (Avx.IsSupported) { return(AvxIntrinsics.SumAbsU(source)); } else { return(SseIntrinsics.SumAbsU(source)); } }
public static float SumAbs(ReadOnlySpan <float> src) { Contracts.AssertNonEmpty(src); if (Avx.IsSupported) { return(AvxIntrinsics.SumAbsU(src)); } else if (Sse.IsSupported) { return(SseIntrinsics.SumAbsU(src)); } else { float sum = 0; for (int i = 0; i < src.Length; i++) { sum += Math.Abs(src[i]); } return(sum); } }
public float SumAbsU() => AvxIntrinsics.SumAbsU(new Span <float>(src, 0, Length));
public float ManagedSumAbsUPerf() { return(AvxIntrinsics.SumAbsU(new Span <float>(src, 0, LEN))); }