anchor.diff:          for i in 1 .. 5 do queue.RunSynchronously cmd
           for i in 1 .. 5 do instance.Download() |> ignore
   
  -
           instance.ClearStats()
  -        printf " 0: encode: "
  +
  +        Log.start "encode"
           let iter = 1000
           let sw = System.Diagnostics.Stopwatch.StartNew()
           for i in 1 .. iter do
               queue.RunSynchronously cmd
           sw.Stop()
           let tCompress = sw.MicroTime / iter
  -        printfn "%A" tCompress
  -        printfn "%A" (instance.GetStats())
  +        Log.line "total : %A" tCompress
  +        let stats = instance.GetStats()
  +        for (name, time) in Map.toSeq stats do
  +            Log.line "%s: %A" name (time / iter)
  +        Log.stop()
   
           let mutable data = Array.zeroCreate 0
           printf " 0: download: "
  
positive.code:         let cc = Codeword.code huff
          len + scale, (cc <<< scale) ||| (v &&& ((1u <<< scale) - 1u))
         
      [<LocalSize(X = 64)>]
      let codewordsKernel (data : int[]) (codewords : V2i[]) =
          compute {
  
negative.code:         let comp = JpegCompressor(runtime)
          let device = runtime.Device
  
          let pi = PixImage.Create(@".\nature.jpeg").ToPixImage<byte>(Col.Format.RGBA)
          let instance = comp.NewInstance(pi.Size, Quantization.photoshop80)
  
          let image = device.CreateImage(PixTexture2d(PixImageMipMap [| pi :> PixImage |], TextureParams.empty))
  