  In recent years, various computing-in-memory (CIM) processors have been
presented, showing superior performance over traditional architectures. To
unleash the potential of various CIM architectures, such as device precision,
crossbar size, and crossbar number, it is necessary to develop compilation
tools that are fully aware of the CIM architectural details and implementation
diversity. However, due to the lack of architectural support in current popular
open-source compiling stacks, existing CIM designs either manually deploy
networks or build their own compilers, which is time-consuming and
labor-intensive. Although some works expose the specific CIM device programming
interfaces to compilers, they are often bound to a fixed CIM architecture,
lacking the flexibility to support the CIM architectures with different
computing granularity. On the other hand, existing compilation works usually
consider the scheduling of limited operation types (such as crossbar-bound
matrix-vector multiplication). Unlike conventional processors, CIM accelerators
are featured by their diverse architecture, circuit, and device, which cannot
be simply abstracted by a single level if we seek to fully explore the
advantages brought by CIM. Therefore, we propose CIM-MLC, a universal
multi-level compilation framework for general CIM architectures. We first
establish a general hardware abstraction for CIM architectures and computing
modes to represent various CIM accelerators. Based on the proposed abstraction,
CIM-MLC can compile tasks onto a wide range of CIM accelerators having
different devices, architectures, and programming interfaces. More importantly,
compared with existing compilation work, CIM-MLC can explore the mapping and
scheduling strategies across multiple architectural tiers, which form a
tractable yet effective design space, to achieve better scheduling and
instruction generation results.
