1. A method of predicting program performance on hardware devices, comprising: obtaining a set of existing applications and observed performance of corresponding accelerated codes associated with the existing applications executing on a hardware accelerator processor on a target hardware device, the hardware accelerator processor different from a central processing unit; 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; and training a predictive model based on the extracted application features and the observed performance by executing the machine learning technique for predicting a given application's performance on the hardware accelerator processor.