This flags file provides additional information about how to run SPEC CPU2006 across multiple 6100 Series systems in a cluster environment using a perl script and numactl to distribute jobs across systems and cores.
submit= submit-mc.pl $copies $SPECCOPYNUM %{cores_per_socket} %{useautopar} [0|1] "$command"
For rate jobs spanning multiple systems, the submit-mc.pl script will distribute the copies evenly across nodes and control placement of the copies to cores by using the numactl command.
The submit-mc.pl script takes the following as input:
- Number of copies being run in the test
- The copy number being submitted
- The number of cores per socket
- Whether or not autopar environment settings are needed
- Whether or not one copy per numa node is needed for the autopar environment (the number
of numa nodes on a system can be seen by running numactl --hardware)
- The command to run
The script also needs to have which systems to run on defined in the systems variable.
***** START OF SCRIPT *****
#!/usr/bin/perl # # Submit script for clustered SPEC CPU2006 runs on # Magny-Cours (Opteron 6100 series) platforms # use Cwd; # Particular testbed used today: my @systems = qw ( c6145-1 c6145-2 ); my $rundir = getcwd; my $copies = shift @ARGV; my $copynum = shift @ARGV; my $cores_per_socket = shift @ARGV; # This variable will be 0 for int-rate and 1 for fp-rate submissions when --define autopar is set my $autoparenv = shift @ARGV; # When running one copy per node my $one_per_node = shift @ARGV; # Figure out how many copies to run per system, number the systems and # what cpu number to use my $copies_per_system = $copies / ($#systems+1); my $systemnum = int($copynum / $copies_per_system); my $cpunum = $copynum % $copies_per_system; open DOBMK, "> dobmk" or die "Eh?"; print DOBMK "cd $rundir\n"; # This part is done only for fp-rate submissions when --define autopar is set if (( $autoparenv ) && ( $one_per_node )) { my $whichnode = $copynum - ($systemnum * $copies_per_system); # At most there could be 8 nodes in a system so distribute depending # on how many cores per socket there are (which translates to cores to use per node) if ( $cores_per_socket eq 12 ) { if ( $whichnode == 0) { print DOBMK "numactl -m 0 --physcpubind=0,1,2,3,4,5 @ARGV \n"; } elsif ( $whichnode == 1 ) { print DOBMK "numactl -m 1 --physcpubind=6,7,8,9,10,11 @ARGV \n"; } elsif ( $whichnode == 2 ) { print DOBMK "numactl -m 2 --physcpubind=12,13,14,15,16,17 @ARGV \n"; } elsif ( $whichnode == 3 ) { print DOBMK "numactl -m 3 --physcpubind=18,19,20,21,22,23 @ARGV \n"; } elsif ( $whichnode == 4 ) { print DOBMK "numactl -m 4 --physcpubind=24,25,26,27,28,29 @ARGV \n"; } elsif ( $whichnode == 5 ) { print DOBMK "numactl -m 5 --physcpubind=30,31,32,33,34,35 @ARGV \n"; } elsif ( $whichnode == 6 ) { print DOBMK "numactl -m 6 --physcpubind=36,37,38,39,40,41 @ARGV \n"; } elsif ( $whichnode == 7 ) { print DOBMK "numactl -m 7 --physcpubind=42,43,44,45,46,47 @ARGV \n"; } } elsif ( $cores_per_socket eq 8 ) { if ( $whichnode == 0 ) { print DOBMK "numactl -m 0 --physcpubind=0,1,2,3 @ARGV \n"; } elsif ( $whichnode == 1 ) { print DOBMK "numactl -m 1 --physcpubind=4,5,6,7 @ARGV \n"; } elsif ( $whichnode == 2 ) { print DOBMK "numactl -m 2 --physcpubind=8,9,10,11 @ARGV \n"; } elsif ( $whichnode == 3 ) { print DOBMK "numactl -m 3 --physcpubind=12,13,14,15 @ARGV \n"; } elsif ( $whichnode == 4 ) { print DOBMK "numactl -m 4 --physcpubind=16,17,18,19 @ARGV \n"; } elsif ( $whichnode == 5 ) { print DOBMK "numactl -m 5 --physcpubind=20,21,22,23 @ARGV \n"; } elsif ( $whichnode == 6 ) { print DOBMK "numactl -m 6 --physcpubind=24,25,26,27 @ARGV \n"; } elsif ( $whichnode == 7 ) { print DOBMK "numactl -m 7 --physcpubind=28,29,30,31 @ARGV \n"; } } } else { print DOBMK "numactl -l --physcpubind=$cpunum @ARGV\n"; } close DOBMK; system 'chmod +x dobmk'; system 'ssh', "-n", $systems[$systemnum], "bash", "$rundir/dobmk";
***** END OF SCRIPT *****