1. A method of predicting program performance on hardware devices, comprising: obtaining a set of existing applications and observed performance on a target hardware device; running the set of existing applications on one or more general purpose computer processors and extracting application features from the existing application; inputting the application features and the observed performance on a target hardware device to a machine learning technique; executing the machine learning technique; and training a predictive model by the machine learning technique for predicting application performance on the target hardware device.