code: func NewContext(d Device, flags ContextFlags) *Ctx {
  	var cctx C.CUcontext
  	err := result(C.cuCtxCreate(&cctx, C.uint(flags), C.CUdevice(d)))
  	if err != nil {
  		panic(err)
  	}
  	ctx := newContext(makeContext(cctx))
  	ctx.device = d
  	ctx.flags = flags
  
  	errChan := make(chan error)
  	go ctx.Run(errChan)
  	if err := <-errChan; err != nil {
  		panic(err)
  	}
  
  	return ctx
  }
docs: // NewContext creates a new context, and runs a listener locked to an OSThread. All work is piped through that goroutine