1#!/usr/bin/env python3
2
3# program: tfprof
4
5import logging as logger
6import time
7import sys
8import json
9import argparse
10import os
11import subprocess
12import requests
13
14# run_tfprof (default)
15# generate profiler data in taskflow profiler format
16def run_tfprof(args):
17
18  args.output = os.path.abspath(args.output);
19
20  logger.info("profiling program \"" + ' '.join(args.program) + "\"")
21
22  ## open the output file
23  with open(args.output, "w") as ofs:
24
25    ofs.write('[');
26
27    os.environ["TF_ENABLE_PROFILER"] = args.output;
28
29    ## launch the program
30    prob = time.perf_counter();
31    subprocess.call(args.program);
32    proe = time.perf_counter();
33    logger.info(f"finished with {(proe - prob)*1000:0.2f} milliseconds");
34    logger.info(f"saved result to {args.output:s}");
35
36  if(args.port == None):
37    return;
38
39  logger.info(f"sending the result to localhost:{args.port:d}");
40
41# run_chrome (TODO)
42# generate the profiler data in chrome tracing format
43
44# main function
45def main():
46
47  # configure logger
48  logger.basicConfig(
49    #format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
50    format='%(asctime)s %(levelname)s: %(message)s',
51    datefmt='%m/%d/%Y %I:%M:%S',
52    level=logger.DEBUG
53  )
54
55  # parse the input arguments
56  parser = argparse.ArgumentParser();
57
58  parser.add_argument(
59    '-o', '--output',
60    type=str,
61    help='file to save the result (default: output.tfp)',
62    default="output.tfp"
63  )
64
65  parser.add_argument(
66    '-p', '--port',
67    type=int,
68    help='port number of the profiler server (default: None)',
69    default=None
70  )
71
72  parser.add_argument(
73    'program',
74    nargs=argparse.REMAINDER,
75    help='program to profile (e.g., path/to/binary args)'
76  )
77
78  args = parser.parse_args();
79
80  if(len(args.program) == 0) :
81    logger.error("no program specified");
82    sys.exit(1);
83
84  run_tfprof(args);
85
86
87# main entry
88if __name__ == "__main__":
89  main();
90
91
92