|
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 |
|
From: Andreas P. <and...@lk...> - 2004-12-13 20:37:57
|
On 12/13/2004 02:01 AM, Vladimir Senkov wrote: > 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. Great work! I thought I'd just let you know that the new version is working fine here! I haven't done any benchmarking though. Not that it really bothers me, but during build I got a lot of warnings like this: ../../common/RTMath.h:173: warning: use of memory input without lvalue in asm operand 1 is deprecated I use gcc 3.3.2. /Andreas |
|
From: Vladimir S. <ha...@gm...> - 2004-12-13 23:40:31
|
Thanks for the report Andreas, It is nice to know that it works on your machine! Benchmarking is going to be a bit easier to do once we merge the benchmarking tool in. There are a few things here and there that could still be optimized . . . but we need to first get some milage, clean up all the bugs and merge benchmarking into ls. Warning cleanup is also on the TODO list somewhere. Speaking of TODO list, i was thinking about maintaining it somewhere other than in everybody's head :) My head is not very good lately when it comes to remembering something, especially when it involves remembering what has to be done :) maybe bug tracking system? website? plain old TODO file in the CVS? I'd vote for bug tracking system, maybe this could take it off the ground :) Regards, Vladimir. |
|
From: Mark K. <mar...@gm...> - 2004-12-14 03:36:00
|
On Sun, 12 Dec 2004 20:01:23 -0500, Vladimir Senkov <ha...@gm...> wrote: > 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 > Hi, I thought that maybe I should try compiling and running LS/QS again as it's been awhile. I don't like CVS much so I went to Rui's site and downloaded the newest versions of libgig, liblscp, linuxsampler and qsampler that he has there. I finally managed to get them built. That was a bit of a struggle. Maybe someone could add the make -f Makefile.cvs step to the INSTALL file? When I tried to run them the qsampler gui comes up fine but when I tried to load GigaPIano it took a couple of minutes, appeared to use up a lot of memory, and then crashed and had to be killed. This is FC2/PlanetCCRMA with the newest PlanetEdge kernel. The gigs were on my 1394 audio drive I use with Ardour all the time. I know this isn't the most recent version. This note just documents what I ran into. - Mark |
|
From: Vladimir S. <ha...@gm...> - 2004-12-14 05:20:17
|
Hi Mark, Thanks for the report. Unfortunately i do not have gigapiano gig so i can't reproduce this problem myself. Hopefully someone else does. Is it possible for you to collect some more information so that i or someone else could try to fix it? Did this gig ever work in the past? If so, could you remember where? Where does it crash? Could you get a coredump or at least a backtrace from it? Also, could you try the latest version? The INSTALL file will be adjusted when we finally have a release, i believe at that point "make -f Makefile.cvs" will no longer be required. Regards, Vladimir. > Hi, > I thought that maybe I should try compiling and running LS/QS again > as it's been awhile. I don't like CVS much so I went to Rui's site and > downloaded the newest versions of libgig, liblscp, linuxsampler and > qsampler that he has there. > > I finally managed to get them built. That was a bit of a struggle. > Maybe someone could add the make -f Makefile.cvs step to the INSTALL > file? > > When I tried to run them the qsampler gui comes up fine but when I > tried to load GigaPIano it took a couple of minutes, appeared to use > up a lot of memory, and then crashed and had to be killed. > > This is FC2/PlanetCCRMA with the newest PlanetEdge kernel. The gigs > were on my 1394 audio drive I use with Ardour all the time. > > I know this isn't the most recent version. This note just documents > what I ran into. > > - Mark > |