Virtualizing Data Parallel Systems for Portability, Productivity, and Performance.