91 lines
1.9 KiB
Python
Executable file
91 lines
1.9 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
# program: tfprof
|
|
|
|
import logging as logger
|
|
import time
|
|
import sys
|
|
import json
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import requests
|
|
|
|
# run_tfprof (default)
|
|
# generate profiler data in taskflow profiler format
|
|
def run_tfprof(args):
|
|
|
|
args.output = os.path.abspath(args.output);
|
|
|
|
logger.info("profiling program \"" + ' '.join(args.program) + "\"")
|
|
|
|
## open the output file
|
|
with open(args.output, "w") as ofs:
|
|
|
|
ofs.write('[');
|
|
|
|
os.environ["TF_ENABLE_PROFILER"] = args.output;
|
|
|
|
## launch the program
|
|
prob = time.perf_counter();
|
|
subprocess.call(args.program);
|
|
proe = time.perf_counter();
|
|
logger.info(f"finished with {(proe - prob)*1000:0.2f} milliseconds");
|
|
logger.info(f"saved result to {args.output:s}");
|
|
|
|
if(args.port == None):
|
|
return;
|
|
|
|
logger.info(f"sending the result to localhost:{args.port:d}");
|
|
|
|
# run_chrome (TODO)
|
|
# generate the profiler data in chrome tracing format
|
|
|
|
# main function
|
|
def main():
|
|
|
|
# configure logger
|
|
logger.basicConfig(
|
|
#format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
|
format='%(asctime)s %(levelname)s: %(message)s',
|
|
datefmt='%m/%d/%Y %I:%M:%S',
|
|
level=logger.DEBUG
|
|
)
|
|
|
|
# parse the input arguments
|
|
parser = argparse.ArgumentParser();
|
|
|
|
parser.add_argument(
|
|
'-o', '--output',
|
|
type=str,
|
|
help='file to save the result (default: output.tfp)',
|
|
default="output.tfp"
|
|
)
|
|
|
|
parser.add_argument(
|
|
'-p', '--port',
|
|
type=int,
|
|
help='port number of the profiler server (default: None)',
|
|
default=None
|
|
)
|
|
|
|
parser.add_argument(
|
|
'program',
|
|
nargs=argparse.REMAINDER,
|
|
help='program to profile (e.g., path/to/binary args)'
|
|
)
|
|
|
|
args = parser.parse_args();
|
|
|
|
if(len(args.program) == 0) :
|
|
logger.error("no program specified");
|
|
sys.exit(1);
|
|
|
|
run_tfprof(args);
|
|
|
|
|
|
# main entry
|
|
if __name__ == "__main__":
|
|
main();
|
|
|
|
|