Synthesizing Proxy Applications for MPI Programs