Select Git revision
download_server.py
-
Hector Blondel authoredHector Blondel authored
tools.py 4.17 KiB
import argparse
import re
import math
#--------------------------------------------------------------------------
# Cmd line parsing
#--------------------------------------------------------------------------
def cmdLineParsing():
n1 = 256
n2 = 256
n3 = 256
nb_threads = 8
reps = 100
cbx = 32
cby = 32
cbz = 32
parser = argparse.ArgumentParser()
parser.add_argument("--n1", help="n1", default=n1, type=int)
parser.add_argument("--n2", help="n1", default=n2, type=int)
parser.add_argument("--n3", help="n1", default=n3, type=int)
parser.add_argument("--thds", help="Number of threads", default=nb_threads, type=int)
parser.add_argument("--reps", help="Number of reps", default=reps, type=int)
parser.add_argument("--cbx", help="n1 Thread block size", default=cbx, type=int)
parser.add_argument("--cby", help="n2 Thread block size", default=cby, type=int)
parser.add_argument("--cbz", help="n3 Thread block size", default=cbz, type=int)
args = parser.parse_args()
return args.n1, args.n2, args.n3, args.thds, args.reps, args.cbx, args.cby, args.cbz
#-----------------------------------------------------------------
# Extracting function
#-----------------------------------------------------------------
def commandLineExtract(commandLineOutput):
"""Extract time, throughput and GFlops from the mpirun execution
Args:
commandLineOutput (string): Corresponds to the command line output of the exeFile execution
Returns:
list[float]: List of executions times
list[float]: List of executions throughputs
list[float]: List of executions Gflops
list[list]:
list[float]: [time, throughput, gflop] Executions caracteristics
"""
# Initialize outputs
times = []
throughputs = []
gflops = []
byRun = []
# Setup for one execution
run = []
# Extract caracteristics
for line in str(commandLineOutput.stdout,'utf-8').split('\n'):
# Extract time
if "time" in line:
# Find float in line
time = float(re.findall("\d+\.\d+", line)[0])
times.append(time)
run.append(time)
# Extract troughput speed
if "throughput" in line:
# Find float in line
throughput = float(re.findall("\d+\.\d+", line)[0])
throughputs.append(throughput)
run.append(throughput)
if "flops" in line:
# Find GFlops in line
gflop = float(re.findall("\d+\.\d+", line)[0])
gflops.append(gflop)
run.append(gflop)
byRun.append(run)
# Reset execution caracteristics
run = []
return times, throughputs, gflops, byRun
#-----------------------------------------------------------------
# Add pheromones function
#-----------------------------------------------------------------
def add_pheromones(tau, paths, costs, Q, n1_size, n2_size, n3_size, n_cbx, n_cby):
"""Computing of the pheromon matrix and the cost of each path.
Args:
tau (np.array): Pheromon matrix
paths (np.array): Array of the paths taken by the ants: paths[i]=(cb_x//16,cb_y,cb_z)
costs (np.array): Column array containing the costs.
Q (float): quantity of pheromones added by an ant on an edge
n1_size (int): First dimension of the problem
n2_size (int): Second dimension of the problem
n3_size (int): Third dimension of problem
n_cbx (int): First dimension of the cache
n_cby (int): Second dimension of the cache
Returns:
(np.array): the updated pheromon matrix
"""
for i in range(len(costs)):
p = paths[i, :]
cost = costs[i, 0]
tau[0,p[0]] += Q*(-1)*cost
tau[p[0], p[1] + n1_size] += Q*(-1)*cost
tau[p[1] + n1_size, p[2] + n1_size + n2_size] += Q*(-1)*cost
tau[p[2] + n1_size + n2_size, p[3] + n1_size + n2_size + n3_size] += Q*(-1)*cost
tau[p[3] + n1_size + n2_size + n3_size, p[4] + n1_size + n2_size + n3_size + n_cbx] += Q*(-1)*cost
tau[p[4] + n1_size + n2_size + n3_size + n_cbx, p[5] + n1_size + n2_size + n3_size + n_cbx + n_cby] += Q*(-1)*cost
return tau