Re: looping 2 times through 5000 differs from 5000 times through 2

[email protected] (Rob Dixon)
Newsgroups perl.beginners
Message-ID <[email protected]>
oldgeezer wrote:
> Hi all,
> 
> Last week I discovered this perl.beginners group.
> Good stuff here, albeit many times hard to grasp
> the answers. But I'm learning.
> 
> What I would like to understand is why looping
> 2 times through 5000 lines takes less time than
> looping 5000 times through 2 lines.
> 
> To show what I mean, I wrote a snippet that
> does nothing with the data and yet the first
> part is 5 times faster than the second part
> (in my pc anyway).
> 
> Thanks.
> Rob.
> 
> 
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> use POSIX qw(clock);
> 
> #just create a small array for this test
> my @few=();
> for my $i(1...2){push @few, $i};
> 
> #just create a big array for this test
> my @many=();
> for my $i(1...500000){push @many, $i};
> 
> # part 1, loop few times over much data
> my $time_1=clock();
> foreach my $val (@few){
>     foreach my $other(@many) {} #do zilch
> }
> my $time_2=clock();
> my $delta1=$time_2-$time_1;
> print "Delta1 $delta1\n";
> 
> # part 2, loop many times over few data
> my $time_3=clock();
> foreach my $val (@many){
>     foreach my $other(@few) {} #do zilch
> }
> my $time_4=clock();
> my $delta2=$time_4-$time_3;
> print "Delta2 $delta2\n";
> 
> exit 0;

In addition to what others have said, it is worth doing the same experiment for
an empty loop:

  foreach my $val (@many){
  }

to see how much overhead there is for each iteration of the loop.

You should also investigate the Benchmark module, which makes comparisons such
as these more convenient.

Rob
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.