Enabling Practical Quantum Computation: Compiler and Architecture Techniques for Bridging the Algorithms-to-Devices Resource Gap