anchor.diff:          {Data=this.Data; FastLayout=this.FastLayout}
                 
       /// gets DataAndLayout for specified tensors
  +    static member internal GetDataAndLayout (t: Tensor<'T>) =
  +        (t.Backend :?> TensorHostBackend<'T>).DataAndLayout
  +
  +    /// gets DataAndLayout for specified tensors
       static member internal GetDataAndLayout (t: Tensor<'T>, a: Tensor<'TA>) =
           (t.Backend :?> TensorHostBackend<'T>).DataAndLayout, 
           (a.Backend :?> TensorHostBackend<'TA>).DataAndLayout 
  +
  +    /// gets DataAndLayout for specified tensors
  +    static member internal GetDataAndLayout (t: Tensor<'T>, a: Tensor<'TA>, b: Tensor<'TB>) =
  +        (t.Backend :?> TensorHostBackend<'T>).DataAndLayout, 
  +        (a.Backend :?> TensorHostBackend<'TA>).DataAndLayout,
  +        (b.Backend :?> TensorHostBackend<'TB>).DataAndLayout 
   
       /// gets layouts for specified targets and sources, optimized for an element-wise operation
       static member internal ElemwiseLayouts (trgt: TensorLayout, srcs: TensorLayout list) =
  
positive.code:             ScalarOps.ApplyBinaryOp (scalarOp, trgt, a, b, isIndexed=false, useThreads=useThreads)
  
          member this.MapIndexed2 (fn, trgt, a, b, useThreads) =
              let trgt, a, b = TensorHostBackend<_>.ElemwiseDataAndLayout (trgt, a, b)
              ScalarOps.ApplyBinaryOp (fn, trgt, a, b, isIndexed=true, useThreads=useThreads)
        
          member this.UnaryPlus (trgt, a) =
  
negative.code:             ScalarOps.ApplyNoaryOp (scalarOp, trgt, isIndexed=false, useThreads=useThreads)
  
          member this.FillIndexed (fn, trgt, useThreads) = 
              let trgt = TensorHostBackend<_>.GetDataAndLayout (trgt)
              ScalarOps.ApplyNoaryOp (fn, trgt, isIndexed=true, useThreads=useThreads)
  
          member this.Map (fn, trgt, a, useThreads) = 
  