1. A method for dynamic performance monitoring and tuning a device while the device is executing an application, comprising: collecting, by performance counters embedded in device hardware, data of a subset of performance events which are high-level performance events, wherein the high-level performance events indicate alternative causes for a performance bottleneck; identifying, based on real-time analysis of the data, a first performance event among the high-level performance events for causing the performance bottleneck during the continuous execution of the application; re-configuring, during the continuous execution of the application, the device hardware such that the same performance counters are used to collect additional data of a next subset of the performance events, wherein the next subset includes lower-level performance events that are under the first performance event in a hierarchical structure and indicate additional alternative causes more specific than the alternative causes; and tuning the performance of the device with respect to a second performance event identified among the lower-level performance events during the continuous execution of the application, wherein the performance events are organized in the hierarchical structure with the high-level performance events at a top of the hierarchical structure, and wherein the same performance counters operate at one level of the hierarchical structure at a time from the top toward bottom of the hierarchical structure.