#!/usr/local/bin/perl -w
use strict;
use PDL;
use PDL::Matrix;
use Benchmark;

my $dim = 4_000;

my $m1 = init();
my $m2 = init();

timethese( 10, {
    "madd",     sub { madd( $m1 ) },
    "madd_pdl", sub { madd_pdl( $m2 ) },
} );

###########################################
sub madd {
###########################################
    my( $m ) = @_;

    for my $x ( 0..$dim-1 ) {
        for my $y ( 0..$dim-1 ) {
            $m->[ $x ]->[ $y ] += 1;
        }
    }
}

###########################################
sub madd_pdl {
###########################################
    my( $m ) = @_;

    my $mpdl = PDL::Matrix->pdl( $m );

    $mpdl += 1;
}

###########################################
sub init {
###########################################
    my $m   = [];

    for my $y (1..$dim) {
        push @$m, [ ( 1 ) x $dim ];
    }

    return $m;
}