anchor.diff:                  printfn "Run"
                   this.HandleRun(commandQueue, a) |> ignore
   
  +            | MsgWaitFor ch ->
  +                printfn "WaitFor"
  +                OpenCL.Net.Cl.Finish(commandQueue.Queue)
  +                ch.Reply ()
  +
  +            | MsgBarrier o ->
  +                printfn "Barrier"
  +                OpenCL.Net.Cl.Finish(commandQueue.Queue)
  +                o.ImReady()
  +                while not <| o.CanContinue() do ()
  +
               return! loop 0
               }
           loop 0)
   
   module Lib =
  +
  +    let getNewMAddM<'t> (gpu: GPU) op =
  +        let kernelFun =
  +            <@
  +                fun (r:_2D) mSize (a:array<'t>) (b:array<'t>) (c:array<'t>) ->
  +                    let tx = r.GlobalID0
  +                    let ty = r.GlobalID1
  +                    c.[ty * mSize + tx] <- (%op) a.[ty * mSize + tx] b.[ty * mSize + tx]
  +            @>
  +
  +        let kernel = gpu.CreateKernel(kernelFun)
  +        fun (processor:MailboxProcessor<_>) rng mSize (a:GpuArray<'t>) (b:GpuArray<'t>) (res:GpuArray<'t>) ->
  +            kernel.SetArguments rng mSize a b res
  +            processor.Post(Msg.CreateRunMsg(Run<_,_,_>(kernel)))
  +
  +    let getNewMxMAdd<'t1,'t2,'t3> (gpu: GPU) opAdd opMult =
  +        let kernelFun =
  +            <@
  +                fun (r:_2D) mSize (a:array<'t1>) (b:array<'t2>) (c:array<'t3>) ->
  +                    let tx = r.GlobalID0
  +                    let ty = r.GlobalID1
  +                    let mutable buf = c.[ty * mSize + tx]
  +                    for k in 0 .. mSize - 1 do
  +                        buf <- (%opAdd) buf  ((%opMult) a.[ty * mSize + k]  b.[k * mSize + tx])
  +                    c.[ty * mSize + tx] <- buf
  +            @>
  +
  +        let kernel = gpu.CreateKernel(kernelFun)
  +
  +        fun (processor:MailboxProcessor<_>) rng mSize (a:GpuArray<'t1>) (b:GpuArray<'t2>) (res:GpuArray<'t3>) ->
  +            kernel.SetArguments rng mSize a b res
  +            processor.Post(Msg.CreateRunMsg(Run<_,_,_>(kernel)))
  +
       let getNewVectorVectorElementwiseOp<'t1,'t2,'t3> (gpu:GPU) op =
           let kernelFun =
               <@ fun (range:_1D) (a1:array<'t1>) (a2:array<'t2>) (res:array<'t3>) ->
  
positive.code:                 member __.Apply e = e.Eval m
          }
          |> MsgRun
  type GPU(device: Device) =
  
      let clContext =
  
negative.code:             res1,res2
  
          result
  
  
      member this.Do () =
             mxmQuadro ()
             [||],[||]
  