  As quantum computers of non-trivial size become available in the near future,
it is imperative to develop tools to emulate small quantum computers. This
allows for validation and debugging of algorithms as well as exploring
hardware-software co-design to guide the development of quantum hardware and
architectures. The simulation of quantum computers entails multiplications of
sparse matrices with very large dense vectors of dimension $2^n$, where $n$
denotes the number of qubits, making this a memory-bound and network
bandwidth-limited application. We introduce the concept of a quantum computer
\textit{emulator} as a component of a software framework for quantum computing,
enabling a significant performance advantage over simulators by emulating
quantum algorithms at a high level rather than simulating individual gate
operations. We describe various optimization approaches and present
benchmarking results, establishing the superiority of quantum computer
emulators in terms of performance.
