Cloud computing is emerging as an alternative to supercomputers for some of the high-performance computing (HPC) applications that do not require a fully dedicated machine. With cloud as an additional deployment option, HPC users are faced with the challenges of dealing with highly heterogeneous resources, where the variability spans across a wide range of processor configurations, interconnections, virtualization environments and pricing rates and models. In this paper, we take a holistic viewpoint to answer the question ? why and who should choose (or not choose) cloud for HPC, for what applications, and how should cloud be used for HPC? To this end, we perform a comprehensive performance evaluation of a set of benchmarks and complex HPC applications on a range of platforms, varying from supercomputers to commodity clusters, both in-house and in the cloud. Having identified the performance bottlenecks in cloud, we demonstrate that alternative lightweight virtualization mechanisms such as thin VMs and OS- level containers, and hypervisor and applicationlevel CPU affinity can greatly lower the overhead and noise of virtualization. Next, we discuss the economic aspects of HPC in the cloud, which we believe is an important area that has not been sufficiently addressed by past research. Finally, we explore the benefits of an intelligent matching of an HPC application to the best deployment platform within a given set, discussing how we can combine a cloud deployment with a supercomputer. Overall results indicate that current public clouds are cost-effective only at small scale - 4 to 16 cores for the chosen HPC applications, when considered in isolation, but can complement (and co-exist with) supercomputers using models such as cloud burst and application-aware mapping to achieve significant cost benefits.