def METHOD_NAME(target):
    k = te.reduce_axis((0, N), "k")
    A = te.placeholder((N, N), name="A")
    B = te.placeholder((N, N), name="B")
    C = te.compute(A.shape, lambda y, x: te.sum(A[y, k] * B[k, x], axis=k), name="C")
    s = te.create_schedule(C.op)
    y, x = s[C].op.axis
    axes = list(s[C].tile(y, x, 8, 8)) + [k]
    perm = np.random.permutation(5)
    axes = [axes[x] for x in perm]
    s[C].reorder(*axes)
    if "gpu" in target.keys:
        pick = []
        # filter out reduction axis
        for i in range(len(perm)):
            if perm[i] != 4:
                pick.append(axes[i])
        s[C].bind(pick[0], te.thread_axis("blockIdx.x"))
        s[C].bind(pick[1], te.thread_axis("vthread"))
        s[C].bind(pick[2], te.thread_axis("threadIdx.y"))
    with target:
        feas = feature.get_itervar_feature(s, [A, B, C])
        feas = feature.flatten_itervar_feature(feas)
    return feas