|
From: Vladimir S. <ha...@gm...> - 2004-12-13 01:01:33
|
Hi Everybody, It may seem like LS has been quiet for a little while . . . But a lot of stuff has been happening behind the scenes. Christian and I have been working on optimizations with the goal of making LS nothing short of state of the art when it comes to efficiency. We focused on improving efficiency of real time calculations. The project consisted of two major developments: 1) Reducing the amount of work and conditionals per sample point depending on the state of the voice. 2) Developing MMX/SSE(1) implementation for most calculation intensive routines (as well as providing a framework for further implementations such as SSE2/3, altivec, etc. To acomplish task number 1 without introducing branches into the "fast path" we've introduced a concept which we called "synthesis mode". An entire segment is processed in the same mode. Function to process the entire mode is generated using highly templated CPP code. Ideally (depending on your compiler and options) an entire segment will be processed without a single call with only one branch (loop). So there is a function for each "synthesis mode" and there is a function pointer that is set for a voice before the segment is processed. To acomplish task number 2 we had to write a few X86 assembly routines and do a lot of benchmarking, testing, etc. For some modes we acomplished speeds several times faster than CPP implementation. Further optimization will be made in some areas. We hit a number of issues related to FPU/MMX state problems of Pentium and also lots of funny GCC related things. We really wanted to support pre-SSE2 processors though. Christian is working hard right now on checking everything into the CVS. I'd like to point out that there is still some work to be done (as usual) like: 1) Some cleanup, putting #if ARCH_X86 in place, etc 2) Integrating benchmarking into LS. For now we have separate benchmarking suite that we've used but it's not very user friendly and up to date, so we are not releasing it at this time. Benchmarking will allow users to do wonderful things such as comparing hardware to pick best fit for LS, etc. 3) cubic interpolation for MMXSSE needs to be implemented at some point 4) lots of other things There will be subsequent submits to the CVS in the near future so please stay tuned! -- Regards, Vladimir |