Added support for multiple cores

This commit is contained in:
cephi 2024-12-14 17:22:42 -05:00
parent abd4b43a58
commit 7fa68e2302
4 changed files with 31 additions and 18 deletions

View File

@ -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]

View File

@ -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)

View File

@ -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:

View File

@ -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}