in cluster-trace-gpu-v2020/simulator/simulator.py [0:0]
def exp_summary(self, id=None):
job_history = self.cluster.job_history
num_jobs_done = job_history.num_jobs_done
jct_summary = job_history.jct_summary
wait_time_summary = job_history.wait_time_summary
job_done_list = job_history.job_done_list
wasted_summary = job_history.wasted_summary
assert num_jobs_done == len(job_done_list)
print_fn("Wasted progress in summary: %s" % wasted_summary)
if num_jobs_done == self.num_jobs:
print_fn("All Done (makespan) at %s" % self.cur_time)
else:
print_fn("%d of %d jobs Done (makespan) at %s" % (num_jobs_done, self.num_jobs, self.cur_time))
print_fn("%d jobs' average JCT: %.4f, average wait time: %.4f" % (num_jobs_done, jct_summary / num_jobs_done, wait_time_summary / num_jobs_done))
# Print job done breakdown
job_done_list.sort(key=lambda e: e['job_id'])
if self.export_job_stats is True:
job_stats = np.zeros(shape=(6, len(job_done_list)), dtype=int)
for i, job in enumerate(job_done_list):
print_fn("%s || %s" % (_repr_job_done(job), job))
job_stats[0][i] = job['submit_time']
job_stats[1][i] = job['duration']
job_stats[2][i] = job['jct']
job_stats[3][i] = GPU_TYPE_INT_DICT.get(job.get('gpu_type', 'N/A'), -1)
job_stats[4][i] = job.get('num_inst', 1)
job_stats[5][i] = job['job_id']
job_stats_name = "%s.a%s-p%s-i%s-job_stats.npy" % (
self.log_file.name, self.alloc_policy, self.preempt_policy, id)
job_stats_file = self.log_file.parent / job_stats_name
np.save(job_stats_file, job_stats)
else:
for job in job_done_list:
print_fn("%s || %s" % (_repr_job_done(job), job))
print_fn("")
if self.export_cluster_util is True:
cluster_util = np.asarray([
self.cluster.cluster_time,
self.cluster.cluster_cpu,
self.cluster.cluster_gpu
])
cluster_util_name = "%s.a%s-p%s-i%s-cluster_util.npy" % (
self.log_file.name, self.alloc_policy, self.preempt_policy, id)
cluster_util_file = self.log_file.parent / cluster_util_name
np.save(cluster_util_file, cluster_util)
return num_jobs_done, jct_summary, wait_time_summary