anchor.diff:                  member __.Apply e = e.Eval m
           }
           |> MsgRun
  +
  +    static member CreateBarrierMessages numOfQueuesOnBarrier =
  +        let s = new SyncObject(numOfQueuesOnBarrier)
  +        Array.init numOfQueuesOnBarrier (fun i -> MsgBarrier s)
   type GPU(device: Device) =
   
       let clContext =
  
positive.code:             let i = range.GlobalID0
              buf.[i] <- buf.[i] * n @>
  
      member this.Do () =
          let devices = Device.getDevices "*" DeviceType.Gpu
          printfn "Device: %A" devices.[0]
          let gpu = GPU(devices.[0])
  
negative.code: and ToGPUCrateEvaluator<'ret> =
      abstract member Eval<'a> : ToGPU<'a> -> 'ret
  
  type SyncObject (numToWait) =
      let mutable canContinue = false
  
      let mutable counter = 0
  
      member this.ImReady () =
          lock this (fun () ->
                         printfn "%A %A" counter numToWait
                         counter <- counter + 1
                         if counter = numToWait
                         then canContinue <- true)
  
      member this.CanContinue () = canContinue
  
  type Msg =
      | MsgToHost of ToHostCrate
      | MsgToGPU of ToGPUCrate
      | MsgRun of RunCrate
      | MsgWaitFor of AsyncReplyChannel<unit>
      | MsgBarrier of SyncObject
  
      static member CreateToHostMsg m =
          {
  