in reply to for-loop issue - swap gets crazy large

my swap gets crazy large and the loop takes 600 seconds. Can someone let me know why this happens?

Everything you need to know is evident from these 3 lines:

$U = $S = 100000; ... for($u = 0; $u < $U; $u++ ) { ... for($s = 0; $s < $S; $s++ ) { $distance[ $u ][ $s ] = 0;

You are creating an Array of Arrays with 100,000 x 100,000 elements.

Each sub array will require 3.2MB. 100,000 of those and you'll need 300 Gigabytes of virtual ram. Since you probably only have somewhere between 4GB and say 32GB of physical ram, the rest will need to be swapped to disk.

If your system is doing that in 10 minutes you must have a pretty fast disk set-up. Rather than complaining, you should be impressed.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: for-loop issue - swap gets crazy large
by esolkc (Acolyte) on Aug 31, 2011 at 20:21 UTC
    Stupid question. Can I "slice or destroy" $distance[$u-1][$s-1] after the last (-1)  if($distance[$u][$s] < $minDistance) The only thing I like to find is what $weight[$dim][$s] is closest to $input[$dim][$u]. I don't need this 2x-array anymore. BTW, the 600 seconds work for a small $S. With $S=100000 the process will be destroyed. :(
      my @last_distance; # Use instead of @{ $distance[$u-1] } my @this_distance; # Use instead of @{ $distance[$u-0] } for($u = 0; $u < $U; $u++ ) { ... @last_distance = @this_distance; }