public unsafe void MakeNegative() { float[] v1 = { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3 }; float[] res = new float[v1.Length]; fixed(float *a = v1, y = res) VectorizationFloat.MakeNegativeAVX(a, y, res.Length); float[] res2 = { -1, -2, -3, -1, -2, -3, -1, -2, -3, -1, -2, -3 }; Assert.IsTrue(ArrayEqual(res, res2)); }
public static void SubtractFloat32_GetGradientB(Tensor gradienta, Tensor s, Tensor a) { long go = s.Shape.TotalSize / gradienta.Shape.TotalSize * gradienta.Shape.TotalSize; for (long i = 0; i < go; i += gradienta.Shape.TotalSize) { if (i == 0) { VectorizationFloat.MakeNegativeAVX((float *)s.Base.Array + i, (float *)gradienta.Base.Array, gradienta.Shape.TotalSize); } else { VectorizationFloat.ElementWiseSubtractAVX((float *)gradienta.Base.Array, (float *)s.Base.Array + i, (float *)gradienta.Base.Array, gradienta.Shape.TotalSize); } } if (go < s.Shape.TotalSize) { VectorizationFloat.ElementWiseSubtractAVX((float *)gradienta.Base.Array, (float *)s.Base.Array + go, (float *)gradienta.Base.Array, s.Shape.TotalSize - go); } }