Abstract:Computational scientists often prototype their software using a “productivity” language such as MATLAB, Python, R, or Julia. However, to run this code effectively on a high-performance computing (HPC) system, the code is typically rewritten in “efficiency” languages like C/C++ or Fortran. This rewriting process takes considerable time and expense and often results in brittle code, with which it is harder to experiment. Domain-specific languages (DSLs) are one well-regarded solution to the efficiency/productivity trade-off, but it is difficult to design a DSL that can anticipate any use case that the programmer will eventually encounter. We have developed Prospect, a compiler for the Julia programming language that attempts to bridge this productivity-efficiency gap in scientific computing. Prospect discovers and exploits the implicit parallelism in source programs that use parallel programming patterns. For the most part, these patterns are already present in standard Julia, so programmers can use Prospect to compile Julia programs with only minor changes to source code. Our results show that Prospect enables 5-100x speedup over MATLAB and 10-250x speedup over plain Julia on a variety of scientific computing workloads, without requiring the programmer to extensively rewrite code or limit themselves to what a DSL offers.