code: func (fn Function) MaxActiveBlocksPerMultiProcessorWithFlags(blockSize int, dynamicSmemSize int64, flags OccupancyFlags) (int, error) {
  	bs := C.int(blockSize)
  	dss := C.size_t(dynamicSmemSize)
  	of := C.uint(flags)
  
  	var numBlocks C.int
  	if err := result(C.cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(&numBlocks, fn.fn, bs, dss, of)); err != nil {
  		return 0, err
  	}
  	return int(numBlocks), nil
  }
docs: // MaxActiveBlocksPerMultiProcessorWithFlags returns the number of the maximum active blocks per streaming multiprocessor.
  // The flags control how special cases are handled.