hi all,
i'm able to announce the first release of volctl~ an advanced volume control external...
it is more or less doing the same as:
|line~| | | |*~| |
but doesn't have the dsp overhead ...
requirements:
known issues:
todo:
any feedback like bug reports, comments or similar are highly appreciated ...
the source is available from cvs or from www.mokabar.tk ...
cheers ... tim
interesting, i do use a ton of line~ multiplications in my patches, so you external gets nice click-free vol control at a significant cpu cost reduction? did you do any benchmarking? definitely adding this to my test todo list...
Tim Blechmann wrote:
hi all,
i'm able to announce the first release of volctl~ an advanced volume control external...
it is more or less doing the same as:
|line~| | | |*~| |
but doesn't have the dsp overhead ...
requirements:
- gcc (since it uses gcc advanced assembler)
- pd >= devel_0_37 (since it's based on vector aligned dsp blocks)
known issues:
- icc seems to have problems with the gcc inline assembler (segfault)
- probably won't compile with msvc
todo:
- rewrite the whole dsp function in assembler (near future)
- rewrite the dsp function for msvc (distant future, if ever)
any feedback like bug reports, comments or similar are highly appreciated ...
the source is available from cvs or from www.mokabar.tk ...
cheers ... tim
you external gets nice click-free vol control at a significant cpu cost reduction? did you do any benchmarking? definitely adding this to my test todo list...
to get some exact results i tested the following:
i did a test with 4096 objects either line~ ->*~ or volctl~
on my machine (p4, 2.5GHz) the line~/*~ combination used about 110% cpu time ... volctl~ used about 58% ...
so it's about 1.9 times faster ... this was done using blocksizes of 64, and assembler coded *~ and volctl~ functions using simd instructions ...
i didn't set any envelope values at all ... when changing the volume line~/*~ will only have the overhead in generating a ramp, volctl~ will also change the multiplication from vector/scalar to vector/vector (which hasn't been optimized)...
i'm not sure about the speedup against the msp tree, since it doesn't use thomas' simd code ... single number simd instructions (mulss) will take 1 cycle, parallel instructions (mulps 4 operands) will take 2 cycles ... also loading data from the memory to registers will be faster (not shure how much)...
so compared to the msp tree, there should be some further speedup (that's why i consider it as pretty good idea to add thomas' simd to pd-0.38)...
cheers ... tim