diff --git a/pytorch/batch.py b/pytorch/batch.py index 0b0fd24..a3d508b 100644 --- a/pytorch/batch.py +++ b/pytorch/batch.py @@ -21,6 +21,7 @@ parser.add_argument('baseline_delay_s', type=int) parser.add_argument('-m', '--matrix_dir', type=str) parser.add_argument('-ss', '--synthetic_size', nargs="+", type=int) parser.add_argument('-sd', '--synthetic_density', nargs="+", type=float) +parser.add_argument('-c', '--cores', type=int) parser.add_argument('--power', action='store_const', const='--power') parser.add_argument('--distribute', action='store_true') args = parser.parse_args() @@ -92,6 +93,10 @@ def run( exit("Unrecognized matrix type!") # if args.perf is not None: # run_args_list += [args.perf] + + if args.cores is not None: + run_args_list += ['-c', args.cores] + if args.power is not None: run_args_list += [args.power] diff --git a/pytorch/run.py b/pytorch/run.py index 0fad805..6566180 100644 --- a/pytorch/run.py +++ b/pytorch/run.py @@ -21,6 +21,7 @@ parser.add_argument('baseline_delay_s', type=int) parser.add_argument('-m', '--matrix_file', type=str) parser.add_argument('-ss', '--synthetic_size', type=int) parser.add_argument('-sd', '--synthetic_density', type=float) +parser.add_argument('-c', '--cores', type=int) parser.add_argument('--power', action='store_true') parser.add_argument('-d', '--debug', action='store_true') args = parser.parse_args() @@ -44,8 +45,10 @@ perf_args = { ['-M', 'l2_cache_miss_ratio,l2_tlb_miss_ratio,ll_cache_read_miss_ratio']] } +power = ['taskset', '-c', '0', './power.sh'] def program( cpu: Cpu, + cores: int, matrix_type: MatrixType, fmt: Format, iterations: int, @@ -53,6 +56,12 @@ def program( synthetic_size: int, synthetic_density: float ) -> list: + apptainer = ['apptainer', 'run'] + if cores is not None: + apptainer += [ '--env', 'OMP_PROC_BIND=true', + '--env', 'OMP_PLACES={0:' + f'{cores}' + '}'] + apptainer = ['apptainer', 'run'] + spmv = f'python3 spmv.py {matrix_type.name.lower()} {fmt.name.lower()} ' spmv += f'{iterations} ' if matrix_type == MatrixType.SUITESPARSE: @@ -61,25 +70,20 @@ def program( spmv += f'-ss {synthetic_size} -sd {synthetic_density}' else: exit("Unrecognized matrix type!") + if cores is not None: + spmv += f'-c {cores}' if cpu == Cpu.ALTRA: - return [ - 'apptainer', 'run', 'pytorch-altra.sif', '-c', + return apptainer + ['pytorch-altra.sif', '-c', 'numactl --cpunodebind=0 --membind=0 ' + spmv] - #+ f'python3 spmv.py {matrix_type.name.lower()} ' - #+ f'csr {iterations} -m {matrix_file}'] elif cpu == Cpu.EPYC_7313P: - return ['apptainer', 'run', 'pytorch-epyc_7313p.sif'] + spmv.split(' ') - #'python3', 'spmv.py', f'{iterations}', 'csr', '-m', f'{matrix_file}'] + return apptainer + ['pytorch-epyc_7313p.sif'] + spmv.split(' ') elif cpu == Cpu.XEON_4216: - return [ - 'apptainer', 'run', 'pytorch-xeon_4216.sif', - 'numactl', '--cpunodebind=0', '--membind=0' - ] + spmv.split(' ') - #'python3', 'spmv.py', f'{iterations}', 'csr', '-m', f'{matrix_file}'] + return apptainer + ['pytorch-xeon_4216.sif', + 'numactl', '--cpunodebind=0', '--membind=0'] + spmv.split(' ') def baseline_power(cpu: Cpu, baseline_time_s: int) -> list: - power_process = subprocess.Popen(['./power.sh', str(baseline_time_s)], + power_process = subprocess.Popen(power + [str(baseline_time_s)], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True) return [float(x) for x in power_process.communicate()[0].strip().split('\n') if len(x) != 0] @@ -113,7 +117,7 @@ result[Stat.CPU.name] = args.cpu.value iterations = args.base_iterations program_result = run_program(program( - args.cpu, args.matrix_type, args.format, iterations, + args.cpu, args.cores, args.matrix_type, args.format, iterations, args.matrix_file, args.synthetic_size, args.synthetic_density)) while program_result[0][Stat.TIME_S.name] < args.min_time_s: # Increase the number of iterations by difference between the current time taken and the desired time. @@ -122,7 +126,7 @@ while program_result[0][Stat.TIME_S.name] < args.min_time_s: iterations += iterations * 0.05 iterations = int(iterations) program_result = run_program(program( - args.cpu, args.matrix_type, args.format, iterations, + args.cpu, args.cores, args.matrix_type, args.format, iterations, args.matrix_file, args.synthetic_size, args.synthetic_density)) result[Stat.ITERATIONS.name] = iterations @@ -147,8 +151,8 @@ if args.power: # Power Collection power_process = subprocess.run( - ['./power.sh', '-1'] + program( - args.cpu, args.matrix_type, args.format, + power + ['-1'] + program( + args.cpu, args.cores, args.matrix_type, args.format, result[Stat.ITERATIONS.name], args.matrix_file, args.synthetic_size, args.synthetic_density), stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) diff --git a/pytorch/spmv.py b/pytorch/spmv.py index 7902d36..2ae02e6 100644 --- a/pytorch/spmv.py +++ b/pytorch/spmv.py @@ -7,6 +7,8 @@ import time import json import sys, os +device = 'cpu' + parser = argparse.ArgumentParser() parser.add_argument('matrix_type', type=str, choices=[t.name.lower() for t in MatrixType], @@ -21,11 +23,14 @@ parser.add_argument('-ss', '--synthetic_size', type=int, help='the synthetic matrix parameters size (rows)') parser.add_argument('-sd', '--synthetic_density', type=float, help='the synthetic matrix density') +parser.add_argument('-c', '--cores', type=int, + help='the number of cores to use') args = parser.parse_args() args.matrix_type = MatrixType[args.matrix_type.upper()] args.format = Format[args.format.upper()] -device = 'cpu' +if args.cores is not None: + torch.set_num_threads(args.cores) if args.matrix_type == MatrixType.SUITESPARSE: if args.matrix_file is None: diff --git a/pytorch/tmp.txt b/pytorch/tmp.txt deleted file mode 100644 index cb4117e..0000000 --- a/pytorch/tmp.txt +++ /dev/null @@ -1 +0,0 @@ -{"MATRIX_FILE": "as-caida", "MATRIX_SHAPE": [31379, 31379], "MATRIX_SIZE": 984641641, "MATRIX_NNZ": 106762, "MATRIX_DENSITY": 0.00010842726485909405, "TIME_S_T": 2.6111819744110107}