We describe a new approach to performance debugging that focuses on the automatic detection of unnecessary or excessive synchronization. We have implemented a prototype performance debugger that implements this approach, reporting the excess synchronization back to the user at the source level. We describe our performance debugger and report some results from applying it to a suite of programs. In particular, we report the type and amount of excess synchronization found in each program and the effect that eliminating this synchronization had on the program's performance. In one case, eliminating the excess synchronization identified by the performance debugger reduced the execution time by 41%.
['Ramakrishnan Rajamony', 'Alan L. Cox']
A performance debugger for eliminating excess synchronization in shared-memory parallel programs