on my machine for this, I get:
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{$
+_}1..1e6;say time-$t;"
12.703125
which I think is similar to: my @array = map A, map B, LIST;
I am actually surprised that on a large 64 bit machine running some kind of *nix, that there are any page faults at all. I mean why does the "simple" version page fault? Sorry, I don't know.
Update: oh I see that this is Windows, I presume Win 7 instead of Vista? There are a bunch of versions of this OS, that might matter.
more tests on my 32 bit Win XP Pro machine 2 GB memory, AS 5.10.1:
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..100e3;say time-$t;"
0.193822860717773
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..200e3;say time-$t;"
0.609375
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..300e3;say time-$t;"
1.28125
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..100e3;say time-$t;"
0.18930196762085
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..250e3;say time-$t;"
0.921875
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..500e3;say time-$t;"
3.375
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..1000e3;say time-$t;"
13.15625
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{
+$_}1..2000e3;say time-$t;"
50.140625
Another "benchmark update":
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=1..16000e3;s
+ay time-$t;"
1.5
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}1..16
+000e3;say time-$t;"
5.546875
C:\Projects>perl -MTime::HiRes=time -wE"my $t=time; my @a=map{$_}map{$
+_}1..16000e3;say time-$t;"
3173.625
The maps above essentially don't do anything useful at all, but this shows the exponential increase in execution time on my 32 bit Win machine. So, I don't think this is specific to 64 bit machines. Apparently map uses more memory than one would think for a "do nothing" operation and also that Perl winds up accessing this extra memory in a way that causes a lot of page faults which would indicate that Perl is not cycling through sequential memory locations. Why that is and how that works, I don't know yet. But at least I can say this happens on 32 bit machines also.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.