1. A method of predicting a hardware device for best program performance, comprising: obtaining a plurality of existing applications and observed performance on a plurality of target hardware devices, each of the plurality of existing applications labeled with one of the plurality of target hardware devices; running the plurality of existing applications on one or more general purpose computer processors and extracting application features from the existing application; inputting the application features, labels associated with the existing applications, and the observed performance on the plurality of 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 a target hardware device out of the plurality of target hardware devices for running a given application.