def METHOD_NAME():  # pylint: disable=too-many-locals
    """Entry point"""
    args = _parse_args()
    # pylint: disable=invalid-name
    target = tvm.target.Target(args.target)
    dtype = args.dtype
    a = np.random.uniform(-1, 1, (args.xo, args.k, args.xi)).astype(dtype)
    b = np.zeros((args.xo, args.xi), dtype=dtype)
    num_bytes = a.size * a.itemsize + b.size * b.itemsize
    print("###### Bandwidth Test ######")
    print(
        f"Workload [XO, K, XI] => [XO, XI]. "
        f"[{args.xo}, {args.k}, {args.xi}] => [{args.xo}, {args.xi}]"
    )
    print(f"Input size: {num_bytes / 1048576} MB")
    print(f"Target: {target}")
    # pylint: enable=invalid-name
    best_bandwidth = -1
    for len_bx, len_tx, len_vec in itertools.product(
        args.bx,
        args.tx,
        args.vec,
    ):
        func = _workload(
            len_xo=args.xo,
            len_k=args.k,
            len_xi=args.xi,
            dtype=dtype,
        )
        sch = tir.Schedule(func)
        _schedule(sch, len_bx, len_tx, len_vec)
        _, profile_result = local_run(
            tvm.build(sch.mod, target=target),
            target.kind.name,
            [a, b],
            evaluator_config=EvaluatorConfig(
                number=10,
                repeat=1,
                min_repeat_ms=100,
                enable_cpu_cache_flush=False,
            ),
        )
        bandwidth = num_bytes / profile_result.mean / (1024**3)
        bx = len_bx * args.xi // (len_tx * len_vec)  # pylint: disable=invalid-name
        mbs = num_bytes / 1024 / 1024
        print(
            f"bandwidth = {bandwidth:.3f} GB/s, bx = {bx}, tx = {len_tx}, "
            f"len_vec = {len_vec}, bytes = {mbs} MB"
        )
        if bandwidth > best_bandwidth:
            best_bandwidth = bandwidth
    print(f"peak bandwidth: {best_bandwidth:.3f} GB/s")