#!/usr/bin/env perl use 5.016; use warnings; use MCE; my @percentages = qw{0 20 25 33.333 40 50 60 66.667 75 80 100 200}; for my $specified_percentage (@percentages) { say "Specified percentage of logical cores to use: $specified_percentage%"; my $modified_percentage = $specified_percentage <= 0 ? 1 : $specified_percentage >= 100 ? 100 : $specified_percentage; say "Modified percentage of logical cores to use: $modified_percentage%"; say 'Total number of logical cores ', MCE::Util::get_ncpu(); my $max_workers = int(0.5 + MCE::Util::get_ncpu() * $modified_percentage / 100) || 1; say "Maximum workers to use: $max_workers"; my @wids; my $mce = MCE::->new( max_workers => $max_workers, gather => \@wids, user_func => sub { my ($mce) = @_; MCE->gather($mce->wid); }, ); $mce->run(); say "Worker ID(s): @{[sort { $a <=> $b } @wids]}"; } #### Specified percentage of logical cores to use: 0% Modified percentage of logical cores to use: 1% Total number of logical cores 12 Maximum workers to use: 1 Worker ID(s): 1 Specified percentage of logical cores to use: 20% Modified percentage of logical cores to use: 20% Total number of logical cores 12 Maximum workers to use: 2 Worker ID(s): 1 2 Specified percentage of logical cores to use: 25% Modified percentage of logical cores to use: 25% Total number of logical cores 12 Maximum workers to use: 3 Worker ID(s): 1 2 3 Specified percentage of logical cores to use: 33.333% Modified percentage of logical cores to use: 33.333% Total number of logical cores 12 Maximum workers to use: 4 Worker ID(s): 1 2 3 4 Specified percentage of logical cores to use: 40% Modified percentage of logical cores to use: 40% Total number of logical cores 12 Maximum workers to use: 5 Worker ID(s): 1 2 3 4 5 Specified percentage of logical cores to use: 50% Modified percentage of logical cores to use: 50% Total number of logical cores 12 Maximum workers to use: 6 Worker ID(s): 1 2 3 4 5 6 Specified percentage of logical cores to use: 60% Modified percentage of logical cores to use: 60% Total number of logical cores 12 Maximum workers to use: 7 Worker ID(s): 1 2 3 4 5 6 7 Specified percentage of logical cores to use: 66.667% Modified percentage of logical cores to use: 66.667% Total number of logical cores 12 Maximum workers to use: 8 Worker ID(s): 1 2 3 4 5 6 7 8 Specified percentage of logical cores to use: 75% Modified percentage of logical cores to use: 75% Total number of logical cores 12 Maximum workers to use: 9 Worker ID(s): 1 2 3 4 5 6 7 8 9 Specified percentage of logical cores to use: 80% Modified percentage of logical cores to use: 80% Total number of logical cores 12 Maximum workers to use: 10 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 Specified percentage of logical cores to use: 100% Modified percentage of logical cores to use: 100% Total number of logical cores 12 Maximum workers to use: 12 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 Specified percentage of logical cores to use: 200% Modified percentage of logical cores to use: 100% Total number of logical cores 12 Maximum workers to use: 12 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 #### Specified percentage of logical cores to use: 200% Modified percentage of logical cores to use: 100% Total number of logical cores 12 Maximum workers to use: 12 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 #### Specified percentage of logical cores to use: 200% Modified percentage of logical cores to use: 200% Total number of logical cores 12 Maximum workers to use: 24 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #### #!/usr/bin/env perl use 5.016; use warnings; use MCE; my $total_logical_cores = MCE::Util::get_ncpu(); my $auto_max_workers; { my $mce_temp = MCE::->new(max_workers => 'auto'); $auto_max_workers = $mce_temp->max_workers(); $mce_temp->shutdown; } my $auto_to_ncpu_mult = $total_logical_cores / $auto_max_workers; my @percentages = qw{0 20 25 33.333 40 50 60 66.667 75 80 100 200}; for my $percentage (@percentages) { say "Specified percentage of logical cores to use: $percentage%"; $percentage = 1 if $percentage <= 0; say "Modified percentage of logical cores to use: $percentage%"; say 'Total number of logical cores ', MCE::Util::get_ncpu(); my $auto_max_workers = 'auto*' . $auto_to_ncpu_mult * $percentage / 100; say "Auto max_workers: $auto_max_workers"; my @wids; my $mce = MCE::->new( max_workers => $auto_max_workers, gather => \@wids, user_func => sub { my ($mce) = @_; MCE->gather($mce->wid); }, ); $mce->run(); say "Worker ID(s): @{[sort { $a <=> $b } @wids]}"; } #### Specified percentage of logical cores to use: 0% Modified percentage of logical cores to use: 1% Total number of logical cores 12 Auto max_workers: auto*0.015 Worker ID(s): 1 Specified percentage of logical cores to use: 20% Modified percentage of logical cores to use: 20% Total number of logical cores 12 Auto max_workers: auto*0.3 Worker ID(s): 1 2 Specified percentage of logical cores to use: 25% Modified percentage of logical cores to use: 25% Total number of logical cores 12 Auto max_workers: auto*0.375 Worker ID(s): 1 2 3 Specified percentage of logical cores to use: 33.333% Modified percentage of logical cores to use: 33.333% Total number of logical cores 12 Auto max_workers: auto*0.499995 Worker ID(s): 1 2 3 4 Specified percentage of logical cores to use: 40% Modified percentage of logical cores to use: 40% Total number of logical cores 12 Auto max_workers: auto*0.6 Worker ID(s): 1 2 3 4 5 Specified percentage of logical cores to use: 50% Modified percentage of logical cores to use: 50% Total number of logical cores 12 Auto max_workers: auto*0.75 Worker ID(s): 1 2 3 4 5 6 Specified percentage of logical cores to use: 60% Modified percentage of logical cores to use: 60% Total number of logical cores 12 Auto max_workers: auto*0.9 Worker ID(s): 1 2 3 4 5 6 7 Specified percentage of logical cores to use: 66.667% Modified percentage of logical cores to use: 66.667% Total number of logical cores 12 Auto max_workers: auto*1.000005 Worker ID(s): 1 2 3 4 5 6 7 8 Specified percentage of logical cores to use: 75% Modified percentage of logical cores to use: 75% Total number of logical cores 12 Auto max_workers: auto*1.125 Worker ID(s): 1 2 3 4 5 6 7 8 9 Specified percentage of logical cores to use: 80% Modified percentage of logical cores to use: 80% Total number of logical cores 12 Auto max_workers: auto*1.2 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 Specified percentage of logical cores to use: 100% Modified percentage of logical cores to use: 100% Total number of logical cores 12 Auto max_workers: auto*1.5 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 Specified percentage of logical cores to use: 200% Modified percentage of logical cores to use: 200% Total number of logical cores 12 Auto max_workers: auto*3 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 #### Specified percentage of logical cores to use: 200% Modified percentage of logical cores to use: 200% Total number of logical cores 12 Auto max_workers: auto*3 Worker ID(s): 1 2 3 4 5 6 7 8 9 10 11 12 #### Specified percentage of logical cores to use: 0% Modified percentage of logical cores to use: 1% Total number of logical cores 12 Auto max_workers: auto*0.015 Worker ID(s): 1 #### Specified percentage of logical cores to use: 0% Modified percentage of logical cores to use: 0% Total number of logical cores 12 Auto max_workers: auto*0 Worker ID(s): 1 2 3 4 5 6 7 8