Yes, running over 14 unnecessary loop indexes has a lot of overhead. This points out a possible optimization for the threading code. A PDL performance coding guide might be useful as well for extreme PDL-ers.
--Chris On Thu, May 23, 2013 at 5:47 AM, Kaj Wiik <[email protected]> wrote: > Hi! > > Another surprise that I noticed: complex piddle structure comes with a price: > > use PDL; > use PDL::NiceSlice; > use Benchmark qw(:all); > > $count = 100; > $a = zeroes(1e7); > $b = $a(0:-1); > $b->reshape(2,5,2,5,2,5,2,5,2,5,2,5,2,5); > > $results = timethese($count, > { > '1d' => sub { $a += 1; }, > '14d' => sub { $b += 1; }, > '14d + flat' => sub { $c = $d->clump(-1); $d += 1; }, > }, > 'none' > ); > > } > cmpthese( $results ) ; > > Rate 14d 1d 14d + flat > 14d 3.86/s -- -89% -90% > 1d 36.8/s 852% -- -0% > 14d + flat 36.9/s 856% 0% -- > > Flattening before doing operations to all elements of a > multidimensional piddle is much faster. > > Cheers, > Kaj > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl _______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
