From: Aaron W. L. <aar...@aa...> - 2009-06-26 06:35:06
|
Stéphane Larouche wrote: > I now have found that the source of the problem is basic arithmetic operations > on complex number. I created simple code (see below) that tests many simple > operations on complex numbers. > You can see that they all take longer on version 4.4.0 (with the exception of > tan). Thanks for creating the detailed testcase for this. OK, I looked into this briefly, and it appears what is happening is that 3.4.5 is using local implementations in libstdc++-v3, and 4.4.0 is using the ones in mingwex, and for whatever reason, the mingwex ones are a lot slower. I'm not sure why libstdc++-v3 is no longer using its own implementations, but this is really a library issue. Basically, someone just needs to go through and optimize each algorithm. This is really painful, because there's a few good implementations sitting around that we could use, but its unclear if we can due to copyright issues. The normal open source way to get around this is to reimplement it in a different way, but in this case, we really just want the fastest possible code. However, its just the code itself subject to copyright, not the algorithms, so this is really a mess... As a fix, it might be possible to tell libstdc++-v3 to use its implementations (if they still exist in 4.4.0) rather than using the library versions, which it probably expects will be faster, not slower. In the long run, we need a few volunteers who are experts in this stuff to just go through and do the work. |