1. A computer implemented method for determining an optimal hardware architecture for a reference application, the method comprising: collecting performance data, sampled at degradation events and corresponding to performance of executing applications on a current hardware architecture, the executing applications including the reference application and a plurality of test applications, wherein collecting performance data comprises sampling performance information at degradation events using a performance indicator, a degradation event type, and a plurality of hardware counters; computing a similarity between the executing applications based on their application signatures and using the performance data; and deriving, in a computer, using the computed similarity, a subset of test applications that are similar to the reference application based on performance, so as to select a plurality of hardware architectures, for testing the reference application, on which improved performance has been reported for the subset of test applications.