anchor.diff:                          execEnv.Stream.Add(strm, new CudaStream(flags))
                   | StreamDestory strm ->
                       if not Debug.DisableStreams then
  -                        execEnv.Stream.[strm].Dispose()
  -                        execEnv.Stream.Remove(strm) |> ignore
  +                        if execEnv.Stream.ContainsKey strm then
  +                            execEnv.Stream.[strm].Dispose()
  +                            execEnv.Stream.Remove(strm) |> ignore
                   | StreamWaitEvent (strm, evnt) ->
                       if not Debug.DisableStreams then
                           execEnv.Stream.[strm].WaitEvent(execEnv.Event.[evnt].Event)
  
positive.code:                 | CudaCallT.MemAlloc mem -> 
                      let typeSize = Marshal.SizeOf (TypeName.getType mem.TypeName)
                      let elements = if mem.Elements > 0 then mem.Elements else 1
                      execEnv.InternalMem.Add(mem, new CudaDeviceVariable<byte>(SizeT (elements * typeSize)))
                  | CudaCallT.MemFree mem ->
                      execEnv.InternalMem.[mem].Dispose()
                      execEnv.InternalMem.Remove(mem) |> ignore
  
                  // memory operations
                  | MemcpyAsync (dst, src, strm) ->
  
negative.code:                 | EventCreate (evnt, flags) ->
                      execEnv.Event.Add(evnt, new CudaEvent(flags))
                  | EventDestory evnt ->
                      if execEnv.Event.ContainsKey evnt then
                          execEnv.Event.[evnt].Dispose()
                          execEnv.Event.Remove(evnt) |> ignore
                  | EventRecord (evnt, strm) ->
                      execEnv.Event.[evnt].Record(getStream strm)
                  | EventSynchronize evnt ->
  