public void Copy(IFrontend <T> trgt, IFrontend <T> src) { if (Layout.HasContiguousMemory(trgt.Layout) && Layout.HasContiguousMemory(src.Layout) && Enumerable.SequenceEqual(trgt.Layout.Stride, src.Layout.Stride)) { // use array block copy for contiguous memory block var(t, s) = ElemwiseDataAndLayout(trgt, src); if (t.FastAccess.NumElements > 0) { Array.Copy(s.Data, s.FastAccess.Offset, t.Data, t.FastAccess.Offset, t.FastAccess.NumElements); } } else { var(t, s) = ElemwiseDataAndLayout(trgt, src); if (VectorOps.CanUse(t, s)) { VectorOps.Copy(t, s); } else { ScalarOps.Copy(t, s); } } }