#!/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