1.881 Thu Oct 13 23:45:00 EST 2022
* Improved the private _parse_chunk_size function. For better
utilization of CPU cores in MCE::Grep, MCE::Map, and MCE::Stream,
processing small input sizes.
Previously, chunk_size => 'auto' equals 2 minimally.
Starting with MCE v1.881, 'auto' equals 1 minimally.
####
use strict;
use warnings;
use Time::HiRes 'time';
my $start = time();
my @ret = map { $_ * 2 } 1..10_000_000;
printf "%s %s\n", $ret[5_000_000], $ret[-1];
printf "%0.3f seconds\n", time() - $start;
__END__
10000002 20000000
0.561 seconds
####
use strict;
use warnings;
use MCE::Map;
use Time::HiRes 'time';
MCE::Map->init(
chunk_size => 'auto',
max_workers => 8,
posix_exit => 1,
);
my $start = time();
my @ret = mce_map { $_ * 2 } 1..10_000_000;
printf "%s %s\n", $ret[5_000_000], $ret[-1];
printf "%0.3f seconds\n", time() - $start;
__END__
10000002 20000000
0.996 seconds
####
use strict;
use warnings;
use MCE::Map;
use Time::HiRes 'time';
MCE::Map->init(
chunk_size => 'auto',
max_workers => 8,
posix_exit => 1,
);
my $start = time();
my @ret = mce_map_s { $_ * 2 } 1, 10_000_000;
printf "%s %s\n", $ret[5_000_000], $ret[-1];
printf "%0.3f seconds\n", time() - $start;
__END__
10000002 20000000
0.655 seconds
####
use strict;
use warnings;
use Data::Dumper;
use MCE;
use Time::HiRes 'sleep';
my %res = ();
my $mce = MCE->new(
max_workers => 5,
posix_exit => 1,
gather => \%res,
);
my @input = 1..10;
$mce->foreach(\@input, sub {
# my ($mce, $chunk_ref, $chunk_id) = @_;
# my $item = $chunk_ref->[0]; # or $_
my $item = $_;
MCE->printf("Worker %s began item $item\n", MCE->wid);
sleep 0.01; # simulate work
MCE->gather($item => $item * 2);
MCE->printf("Worker %s ended item $item\n", MCE->wid);
});
$mce->shutdown;
print Dumper(\%res);
####
Worker 5 began item 3
Worker 4 began item 2
Worker 1 began item 1
Worker 2 began item 4
Worker 3 began item 5
Worker 5 ended item 3
Worker 4 ended item 2
Worker 1 ended item 1
Worker 5 began item 6
Worker 3 ended item 5
Worker 2 ended item 4
Worker 1 began item 8
Worker 4 began item 7
Worker 2 began item 9
Worker 3 began item 10
Worker 5 ended item 6
Worker 1 ended item 8
Worker 4 ended item 7
Worker 3 ended item 10
Worker 2 ended item 9
$VAR1 = {
'9' => 18,
'7' => 14,
'3' => 6,
'1' => 2,
'5' => 10,
'8' => 16,
'4' => 8,
'2' => 4,
'10' => 20,
'6' => 12
};