Skip to content
Snippets Groups Projects
Commit d5fce023 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Also updated the MPI-version of the scripts.

parent 7291d18e
No related branches found
No related tags found
1 merge request!360Analyse script shows updates and sid
...@@ -176,13 +176,21 @@ print "# {0:<17s}: {1:>7s} {2:>9s} {3:>9s} {4:>9s} {5:>9s} {6:>9s}"\ ...@@ -176,13 +176,21 @@ print "# {0:<17s}: {1:>7s} {2:>9s} {3:>9s} {4:>9s} {5:>9s} {6:>9s}"\
"sum", "mean", "percent") "sum", "mean", "percent")
for sid in range(0,13): for sid in range(0,13):
sidmin = min(sidtimes[sid]) if sid in sidtimes:
sidmax = max(sidtimes[sid]) sidmin = min(sidtimes[sid])
sidsum = sum(sidtimes[sid]) sidmax = max(sidtimes[sid])
sidsum = sum(sidtimes[sid])
sidcount = len(sidtimes[sid])
sidmean = sidsum / sidcount
else:
sidmin = 0.
sidmax = 0.
sidsum = 0.
sidcount = 0
sidmean = 0.
print "{0:3d} {1:15s}: {2:7d} {3:9.4f} {4:9.4f} {5:9.4f} {6:9.4f} {7:9.2f}"\ print "{0:3d} {1:15s}: {2:7d} {3:9.4f} {4:9.4f} {5:9.4f} {6:9.4f} {7:9.2f}"\
.format(sid, SIDS[sid], len(sidtimes[sid]), sidmin, sidmax, sidsum, .format(sid, SIDS[sid], sidcount, sidmin, sidmax, sidsum,
sidsum / len(sidtimes[sid]), sidmean, sidsum / (len(threadids) * total_t) * 100.0)
sidsum / (len(threadids) * total_t) * 100.0)
print print
# Dead times. # Dead times.
......
...@@ -56,14 +56,25 @@ TASKTYPES = ["none", "sort", "self", "pair", "sub_self", "sub_pair", ...@@ -56,14 +56,25 @@ TASKTYPES = ["none", "sort", "self", "pair", "sub_self", "sub_pair",
SUBTYPES = ["none", "density", "gradient", "force", "grav", "external_grav", SUBTYPES = ["none", "density", "gradient", "force", "grav", "external_grav",
"tend", "xv", "rho", "gpart", "multipole", "spart", "count"] "tend", "xv", "rho", "gpart", "multipole", "spart", "count"]
SIDS = ["(-1,-1,-1)", "(-1,-1, 0)", "(-1,-1, 1)", "(-1, 0,-1)",
"(-1, 0, 0)", "(-1, 0, 1)", "(-1, 1,-1)", "(-1, 1, 0)",
"(-1, 1, 1)", "( 0,-1,-1)", "( 0,-1, 0)", "( 0,-1, 1)",
"( 0, 0,-1)"]
# Read input. # Read input.
data = pl.loadtxt( infile ) data = pl.loadtxt( infile )
# Get the CPU clock to convert ticks into milliseconds. # Get the CPU clock to convert ticks into milliseconds.
full_step = data[0,:] full_step = data[0,:]
updates = int(full_step[7])
g_updates = int(full_step[8])
s_updates = int(full_step[9])
CPU_CLOCK = float(full_step[-1]) / 1000.0 CPU_CLOCK = float(full_step[-1]) / 1000.0
if args.verbose: if args.verbose:
print "# CPU frequency:", CPU_CLOCK * 1000.0 print "# CPU frequency:", CPU_CLOCK * 1000.0
print "# updates:", updates
print "# g_updates:", g_updates
print "# s_updates:", s_updates
nranks = int(max(data[:,0])) + 1 nranks = int(max(data[:,0])) + 1
print "# Number of ranks:", nranks print "# Number of ranks:", nranks
...@@ -92,6 +103,7 @@ for rank in range(nranks): ...@@ -92,6 +103,7 @@ for rank in range(nranks):
# Calculate the time range. # Calculate the time range.
total_t = (toc_step - tic_step)/ CPU_CLOCK total_t = (toc_step - tic_step)/ CPU_CLOCK
print "# Data range: ", total_t, "ms" print "# Data range: ", total_t, "ms"
print
# Correct times to relative values. # Correct times to relative values.
start_t = float(tic_step) start_t = float(tic_step)
...@@ -105,15 +117,16 @@ for rank in range(nranks): ...@@ -105,15 +117,16 @@ for rank in range(nranks):
tasks[i] = [] tasks[i] = []
# Gather into by thread data. # Gather into by thread data.
num_lines = pl.size(data) / 12 num_lines = pl.shape(data)[0]
for line in range(num_lines): for line in range(num_lines):
thread = int(data[line,1]) thread = int(data[line,1])
tic = int(data[line,5]) / CPU_CLOCK tic = int(data[line,5]) / CPU_CLOCK
toc = int(data[line,6]) / CPU_CLOCK toc = int(data[line,6]) / CPU_CLOCK
tasktype = int(data[line,2]) tasktype = int(data[line,2])
subtype = int(data[line,3]) subtype = int(data[line,3])
sid = int(data[line, -1])
tasks[thread].append([tic,toc,tasktype,subtype]) tasks[thread].append([tic,toc,tasktype,subtype, sid])
# Sort by tic and gather used threads. # Sort by tic and gather used threads.
threadids = [] threadids = []
...@@ -124,10 +137,12 @@ for rank in range(nranks): ...@@ -124,10 +137,12 @@ for rank in range(nranks):
# Times per task. # Times per task.
print "# Task times:" print "# Task times:"
print "# -----------" print "# -----------"
print "# {0:<16s}: {1:>7s} {2:>9s} {3:>9s} {4:>9s} {5:>9s} {6:>9s}"\ print "# {0:<17s}: {1:>7s} {2:>9s} {3:>9s} {4:>9s} {5:>9s} {6:>9s}"\
.format("type/subtype", "count","minimum", "maximum", .format("type/subtype", "count","minimum", "maximum",
"sum", "mean", "percent") "sum", "mean", "percent")
alltasktimes = {} alltasktimes = {}
sidtimes = {}
for i in threadids: for i in threadids:
tasktimes = {} tasktimes = {}
for task in tasks[i]: for task in tasks[i]:
...@@ -140,13 +155,19 @@ for rank in range(nranks): ...@@ -140,13 +155,19 @@ for rank in range(nranks):
if not key in alltasktimes: if not key in alltasktimes:
alltasktimes[key] = [] alltasktimes[key] = []
alltasktimes[key].append(dt) alltasktimes[key].append(dt)
my_sid = task[4]
if my_sid > -1:
if not my_sid in sidtimes:
sidtimes[my_sid] = []
sidtimes[my_sid].append(dt)
print "# Thread : ", i print "# Thread : ", i
for key in sorted(tasktimes.keys()): for key in sorted(tasktimes.keys()):
taskmin = min(tasktimes[key]) taskmin = min(tasktimes[key])
taskmax = max(tasktimes[key]) taskmax = max(tasktimes[key])
tasksum = sum(tasktimes[key]) tasksum = sum(tasktimes[key])
print "{0:18s}: {1:7d} {2:9.4f} {3:9.4f} {4:9.4f} {5:9.4f} {6:9.2f}"\ print "{0:19s}: {1:7d} {2:9.4f} {3:9.4f} {4:9.4f} {5:9.4f} {6:9.2f}"\
.format(key, len(tasktimes[key]), taskmin, taskmax, tasksum, .format(key, len(tasktimes[key]), taskmin, taskmax, tasksum,
tasksum / len(tasktimes[key]), tasksum / total_t * 100.0) tasksum / len(tasktimes[key]), tasksum / total_t * 100.0)
print print
...@@ -162,6 +183,30 @@ for rank in range(nranks): ...@@ -162,6 +183,30 @@ for rank in range(nranks):
tasksum / (len(threadids) * total_t) * 100.0) tasksum / (len(threadids) * total_t) * 100.0)
print print
# For pairs, show stuf sorted by SID
print "# By SID (all threads): "
print "# {0:<17s}: {1:>7s} {2:>9s} {3:>9s} {4:>9s} {5:>9s} {6:>9s}"\
.format("Pair/Sub-pair SID", "count","minimum", "maximum",
"sum", "mean", "percent")
for sid in range(0,13):
if sid in sidtimes:
sidmin = min(sidtimes[sid])
sidmax = max(sidtimes[sid])
sidsum = sum(sidtimes[sid])
sidcount = len(sidtimes[sid])
sidmean = sidsum / sidcount
else:
sidmin = 0.
sidmax = 0.
sidsum = 0.
sidcount = 0
sidmean = 0.
print "{0:3d} {1:15s}: {2:7d} {3:9.4f} {4:9.4f} {5:9.4f} {6:9.4f} {7:9.2f}"\
.format(sid, SIDS[sid], sidcount, sidmin, sidmax, sidsum,
sidmean, sidsum / (len(threadids) * total_t) * 100.0)
print
# Dead times. # Dead times.
print "# Times not in tasks (deadtimes)" print "# Times not in tasks (deadtimes)"
print "# ------------------------------" print "# ------------------------------"
......
...@@ -681,13 +681,14 @@ int main(int argc, char *argv[]) { ...@@ -681,13 +681,14 @@ int main(int argc, char *argv[]) {
/* Open file and position at end. */ /* Open file and position at end. */
file_thread = fopen(dumpfile, "a"); file_thread = fopen(dumpfile, "a");
fprintf(file_thread, " %03i 0 0 0 0 %lli %lli 0 0 0 0 %lli\n", myrank, fprintf(file_thread, " %03i 0 0 0 0 %lli %lli %zi %zi %zi 0 0 %lli\n", myrank,
e.tic_step, e.toc_step, cpufreq); e.tic_step, e.toc_step, e.updates, e.g_updates,
e.s_updates, cpufreq);
int count = 0; int count = 0;
for (int l = 0; l < e.sched.nr_tasks; l++) { for (int l = 0; l < e.sched.nr_tasks; l++) {
if (!e.sched.tasks[l].implicit && e.sched.tasks[l].toc != 0) { if (!e.sched.tasks[l].implicit && e.sched.tasks[l].toc != 0) {
fprintf( fprintf(
file_thread, " %03i %i %i %i %i %lli %lli %i %i %i %i %i\n", file_thread, " %03i %i %i %i %i %lli %lli %i %i %i %i %i %i\n",
myrank, e.sched.tasks[l].rid, e.sched.tasks[l].type, myrank, e.sched.tasks[l].rid, e.sched.tasks[l].type,
e.sched.tasks[l].subtype, (e.sched.tasks[l].cj == NULL), e.sched.tasks[l].subtype, (e.sched.tasks[l].cj == NULL),
e.sched.tasks[l].tic, e.sched.tasks[l].toc, e.sched.tasks[l].tic, e.sched.tasks[l].toc,
...@@ -699,7 +700,7 @@ int main(int argc, char *argv[]) { ...@@ -699,7 +700,7 @@ int main(int argc, char *argv[]) {
: 0, : 0,
(e.sched.tasks[l].cj != NULL) ? e.sched.tasks[l].cj->gcount (e.sched.tasks[l].cj != NULL) ? e.sched.tasks[l].cj->gcount
: 0, : 0,
e.sched.tasks[l].flags); e.sched.tasks[l].flags, e.sched.tasks[l].sid);
} }
fflush(stdout); fflush(stdout);
count++; count++;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment