I don't have a stackoverflow.com account but if I use
your original test code, increase the cpu seconds for
the benchmark and replace the dataflow increment
code by the indadd() routine, I get speeds from 50X
for $N=1, down to 1.9X for $N=1000, and then up to
3-4X as the sizes increase to 10000000 where I
stopped testing.
The key here is to avoid creating and destroying piddles
since the computational work involved here is *very*
light. In fact, an Inline::PP routine to handle the core
of an algorithm of interest (if more than indadd) + the
existing PDL should perform very well for this use
case---according to the benchmarks on my system:
use PDL;
use Benchmark qw/cmpthese/;
my $updates_per_round = shift || 1;
my $N = 1_000_000;
my @perl = (0 .. $N - 1);
my $pdl = zeroes $N;
cmpthese(-10,{
perl => sub{
$perl[int(rand($N))]++ for (1..$updates_per_round);
},
pdl => sub{
my $to_update = long(random($updates_per_round) * $N);
indadd(1,$to_update,$pdl);
## $pdl->index($to_update)++;
}
});
Cheers,
Chris
On Wed, Apr 18, 2012 at 10:11 AM, David Mertens
<[email protected]> wrote:
> Hey folks -
>
> There's a PDL question on stack overflow
> (http://stackoverflow.com/questions/9730678/c-like-arrays-in-perl) to which
> I submitted an answer. I believe my answer is better than the currently
> marked best answer, but it looks like the OP either disagrees or simply has
> not returned to read my answer. I would appreciate if those of you who have
> stack overflow accounts could read the responses and up-vote what you think
> is the best answer.
>
> Thanks!
> David
>
> --
> "Debugging is twice as hard as writing the code in the first place.
> Therefore, if you write the code as cleverly as possible, you are,
> by definition, not smart enough to debug it." -- Brian Kernighan
>
>
> _______________________________________________
> 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