in reply to Re^2: An efficient way to parallelize loops
in thread An efficient way to parallelize loops
Your first point, unluckely is not applicable, due to the fact that depending on the element in @{$categories{$k}->{traces}} matched, the sum below will be applied to a different element in the @lista array.
I don't understand what you're saing. The code you showed us changes neither %categories nor $k. Why should anything change if you do the lookup outside the loop?
my @a = @{$categories{$k}->{traces}; OUTER: while( my $line = <GZIP> ) { for ( my $i = 0; $i < @a }; $i++ ) { if ( $line =~ /^($a[$i]->{regex})/ ) { my @lista = split /;/, $line; $A += $lista[$a[$i]->{calc}}[0]]; $B += $lista[$a[$i]->{calc}}[1]]; $C += $lista[$a[$i]->{calc}}[2]]; next OUTER; } } }
This should do exactly the same as your code, only more efficient.
The version with while is at least as fast as the version with for, and uses much less memory.
Still I'd like to emphasize my first point again: Benchmark and profile before starting to optimize (and before even thinking of parallelization).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: An efficient way to parallelize loops
by Deus Ex (Scribe) on Jun 01, 2010 at 10:18 UTC | |
|
Re^4: An efficient way to parallelize loops
by Deus Ex (Scribe) on Jun 01, 2010 at 13:23 UTC |