Пример #1
0
 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);
         }
     }
 }