示例#1
0
        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];
                }
            }
        }
示例#3
0
 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);
示例#5
0
 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));
示例#7
0
 public void AddSU()
 => AvxIntrinsics.AddSU(new Span <float>(src), new Span <int>(idx, 0, IndexLength), new Span <float>(dst));