public static void Add(ReadOnlySpan <float> source, ReadOnlySpan <int> indices, Span <float> destination, int count) { Contracts.AssertNonEmpty(source); Contracts.AssertNonEmpty(indices); Contracts.AssertNonEmpty(destination); Contracts.Assert(count > 0); Contracts.Assert(count <= source.Length); Contracts.Assert(count <= indices.Length); Contracts.Assert(count < destination.Length); if (Avx.IsSupported) { AvxIntrinsics.AddSU(source, indices, destination, count); } else if (Sse.IsSupported) { SseIntrinsics.AddSU(source, indices, destination, count); } else { for (int i = 0; i < count; i++) { int index = indices[i]; destination[index] += source[i]; } } }
public static void Add(ReadOnlySpan <float> src, ReadOnlySpan <int> indices, Span <float> dst, int count) { Contracts.AssertNonEmpty(src); Contracts.AssertNonEmpty(indices); Contracts.AssertNonEmpty(dst); Contracts.Assert(count > 0); Contracts.Assert(count <= src.Length); Contracts.Assert(count <= indices.Length); Contracts.Assert(count < dst.Length); if (Avx.IsSupported) { AvxIntrinsics.AddSU(src, indices, dst, count); } else if (Sse.IsSupported) { SseIntrinsics.AddSU(src, indices, dst, count); } else { for (int i = 0; i < count; i++) { int index = indices[i]; dst[index] += src[i]; } } }
private static void Add(Span <float> src, Span <int> indices, Span <float> dst) { if (Avx.IsSupported) { AvxIntrinsics.AddSU(src, indices, dst); } else if (Sse.IsSupported) { SseIntrinsics.AddSU(src, indices, dst); } else { for (int i = 0; i < indices.Length; i++) { int index = indices[i]; dst[index] += src[i]; } } }
public void AddSU() => AvxIntrinsics.AddSU(src, idx, dst, IndexLength);
public void ManagedAddSUPerf() { AvxIntrinsics.AddSU(new Span <float>(src), new Span <int>(idx, 0, IDXLEN), new Span <float>(dst)); }
public void AddSU() => AvxIntrinsics.AddSU(new Span <float>(src), new Span <int>(idx, 0, IDXLEN), new Span <float>(dst));
public void AddSU() => AvxIntrinsics.AddSU(new Span <float>(src), new Span <int>(idx, 0, IndexLength), new Span <float>(dst));