View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002586 | ardour | other | public | 2009-03-21 06:09 | 2009-05-31 05:45 |
| Reporter | mtaht | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | closed | Resolution | open | ||
| Product Version | SVN/2.0-ongoing | ||||
| Summary | 0002586: Tracking progress on oprofile | ||||
| Description | every so often I get a bee in my bonnet regarding finding sources of performance loss, and ways to fix them... I recently oprofiled a debuggable version of ardour and spotted a theoretically good spot to optimize in panner.cc, 3 loops that should probably be one... THEN I compiled ardour optimized and discovered that the vectorizer was actually vectorizing two of those three loops, thus reducing the overhead of that function to much further below the noise floor, and exposing new issues. So I wrote the more complex function in C and it was a big win. Yea. g++ cannot vectorize it (as yet). Boo. It is kind of my hope to find some across the board patterns that are wins and identify other areas that can be optimized in audio code, given the current state of the compilers. | ||||
| Additional Information | A non-optimized profile of an export with pan and gain automation: http://www.teklibre.com/~d/ardour/panner.txt Optimized version: http://www.teklibre.com/~d/ardour/opanner.txt Check out all the time in feholdexcept and fesetenv! Thought: It would be good to do debuggable builds with the same optimizations as the shipped build, it would help spot more bugs in general. | ||||
| Tags | No tags attached. | ||||
|
|
From looking at the last oprofile I determined 2 things. The jack I was running was probably not running SSE. Despite compiling jackdmp and installing it, it gets installed in the wrong place on x86_64 by default - or jack does - jack goes by defaault into /usr/local/lib64 and jackdmp goes into /usr/local/lib. it wasn't clear to me how to convince jackdmp (from svn) to engage it's sse code, so I hacked up wscript to make sure it did. The Jackdmp equivalent of mix buffers is now a very small precentage of the run time. http://www.teklibre.com/~d/ardour/jackdmp_profile.txt |
|
|
gcc 4.4 optimizes two of the 3 loops well, but not the third. Combining the loops into a more complex loop does not get optimized at all. Rewriting in assembly is kind of pointless. And lastly, the feholdexcept and fesetenv problems are coming from calf, not ardour. closing this bug. Joys of profiling. |