def METHOD_NAME(A, b, x0, nIters, lMax, lMin, depends=[]):
    """Chebyshev iterative solver using SYCL routines"""
    d = (lMax + lMin) / 2
    c = (lMax - lMin) / 2
    x = dpt.copy(x0)
    exec_queue = A.sycl_queue
    assert exec_queue == x.sycl_queue
    Ax = dpt.empty_like(A[:, 0])
    r = dpt.empty_like(Ax)
    p = dpt.empty_like(Ax)
    e_x = dpctl.SyclEvent()
    # Ax = A @ x
    _, e_dot = sycl_gemm.gemv(exec_queue, A, x, Ax, depends=depends)
    # r = b - Ax
    _, e_sub = sycl_gemm.sub(exec_queue, b, Ax, r, depends=[e_dot])
    r_ev = e_sub
    for i in range(nIters):
        z = r
        z_ev = r_ev
        if i == 0:
            p[:] = z
            alpha = 1 / d
            _, e_axpby = dpctl.SyclEvent(), dpctl.SyclEvent()
        elif i == 1:
            beta = 0.5 * (c * alpha) ** 2
            alpha = 1 / (d - beta / alpha)
            # p = z + beta * p
            _, e_axpby = sycl_gemm.axpby_inplace(
                exec_queue, 1, z, beta, p, depends=[z_ev]
            )
        else:
            beta = (c / 2 * alpha) ** 2
            alpha = 1 / (d - beta / alpha)
            # p = z + beta * p
            _, e_axpby = sycl_gemm.axpby_inplace(
                exec_queue, 1, z, beta, p, depends=[z_ev]
            )
        # x = x + alpha * p
        _, e_x = sycl_gemm.axpby_inplace(
            exec_queue, alpha, p, 1, x, depends=[e_axpby, e_x]
        )
        # Ax = A @ x
        _, e_dot = sycl_gemm.gemv(exec_queue, A, x, Ax, depends=[e_x])
        # r = b - Ax
        _, e_sub = sycl_gemm.sub(exec_queue, b, Ax, r, depends=[e_dot])
        # residual = dot(r, r)
        residual = sycl_gemm.norm_squared_blocking(
            exec_queue, r, depends=[e_sub]
        )
        if residual <= 1e-29:
            print(f"chebyshev: converged in {i} iters")
            break
    exec_queue.wait()  # wait for all host tasks to complete
    return x