Will do, and that's goo to know :-) On Jul 2, 2010, at 11:49 AM, Brad Roberts wrote:
> Please file bugs with reduced test cases where seemingly obvious inlining > isn't done. I'd like to spend time on them. Ref parameters were one of > the things that blocked inlining until this most recent release (or maybe > the one before that). That works now. :) > > On Fri, 2 Jul 2010, Sean Kelly wrote: > >> Date: Fri, 2 Jul 2010 11:26:58 -0700 >> From: Sean Kelly <[email protected]> >> Reply-To: Discuss the phobos library for D <[email protected]> >> To: Discuss the phobos library for D <[email protected]> >> Subject: Re: [phobos] std.algorithm.sort slow as molasses >> >> The rules for inlining are weird. When I wrote Array.sort I noticed that a >> nested function that took reference parameters (ie. swap) wasn't inlined >> either, so I changed mine to use indexes and accessed the outer array that >> way. For this level of performance tuning you really have to look at the >> ASM output to see what's going on. >> >> On Jul 2, 2010, at 9:39 AM, David Simcha wrote: >> >>> . >>> On Fri, Jul 2, 2010 at 12:21 PM, Andrei Alexandrescu <[email protected]> >>> wrote: >>> One simple solution would be for you to contribute dstat's sort to Phobos. >>> However, I'd be curious what the reason of std's sort slowness is. I >>> suspect it might be the fact that I use qsort all the way down instead of >>> switching to insertion sort. What is your sort's strategy? >>> >>> >>> Insertion sort at 25 elements. This is based on fairly heavy empirical >>> testing. I tried disabling this and doing qsort all the way down. This >>> only explains a small part of the difference (about 30 milliseconds' >>> worth). >>> >>> I looked at the std.algorithm code and I think I see at least part of the >>> problem, but I don't know how to fix it w/o completely gutting the code and >>> rewriting it: >>> >>> // This is probably not inlined b/c I don't think DMD can inline nested >>> functions >>> // that access the outer scope. Someone please confirm this >>> bool pred(ElementType!(Range) a) >>> { >>> return less(a, r.back); >>> } >>> auto right = partition!(pred, ss)(r); >>> >>> _______________________________________________ >>> phobos mailing list >>> [email protected] >>> http://lists.puremagic.com/mailman/listinfo/phobos >> > _______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos_______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
