  It has been a long time that computer architecture and systems are optimized
to enable efficient execution of machine learning (ML) algorithms or models.
Now, it is time to reconsider the relationship between ML and systems, and let
ML transform the way that computer architecture and systems are designed. This
embraces a twofold meaning: the improvement of designers' productivity, and the
completion of the virtuous cycle. In this paper, we present a comprehensive
review of work that applies ML for system design, which can be grouped into two
major categories, ML-based modelling that involves predictions of performance
metrics or some other criteria of interest, and ML-based design methodology
that directly leverages ML as the design tool. For ML-based modelling, we
discuss existing studies based on their target level of system, ranging from
the circuit level to the architecture/system level. For ML-based design
methodology, we follow a bottom-up path to review current work, with a scope of
(micro-)architecture design (memory, branch prediction, NoC), coordination
between architecture/system and workload (resource allocation and management,
data center management, and security), compiler, and design automation. We
further provide a future vision of opportunities and potential directions, and
envision that applying ML for computer architecture and systems would thrive in
the community.
