File indexing completed on 2026-07-26 08:22:17
0001
0002
0003
0004
0005 import logging
0006 import argparse
0007 import pathlib
0008
0009 from traccc_bench_tools.parse_profile import parse_profile_ncu, parse_profile_csv
0010 from traccc_bench_tools import types
0011
0012 log = logging.getLogger("traccc_parse_profile")
0013
0014
0015 def main():
0016 parser = argparse.ArgumentParser()
0017
0018 parser.add_argument(
0019 "input",
0020 type=pathlib.Path,
0021 help="the input .ncu-rep or .csv file",
0022 )
0023
0024 parser.add_argument(
0025 "output",
0026 type=pathlib.Path,
0027 help="the output .csv file",
0028 )
0029
0030 parser.add_argument(
0031 "--num-sm",
0032 help="number of SMs in the modelled GPU",
0033 type=int,
0034 required=True,
0035 dest="num_sm",
0036 )
0037
0038 parser.add_argument(
0039 "--num-threads-per-sm",
0040 help="number of thread slots per SM in the modelled GPU",
0041 type=int,
0042 required=True,
0043 dest="num_threads_per_sm",
0044 )
0045
0046 parser.add_argument(
0047 "--event-delimiter-kernel",
0048 help="name of kernel that delimits events",
0049 type=str,
0050 default="ccl_kernel",
0051 dest="event_delimiter_kernel",
0052 )
0053
0054 parser.add_argument(
0055 "-v",
0056 "--verbose",
0057 help="enable verbose output",
0058 action="store_true",
0059 )
0060
0061 args = parser.parse_args()
0062
0063 logging.basicConfig(
0064 level=logging.DEBUG if (args.verbose or False) else logging.INFO,
0065 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
0066 )
0067
0068 spec = types.GpuSpec(getattr(args, "num_sm"), getattr(args, "num_threads_per_sm"))
0069
0070 df = None
0071
0072 if args.input.suffix == ".ncu-rep":
0073 log.info("Input file is an NSight Compute profile file")
0074 df = parse_profile_ncu(
0075 args.input,
0076 spec,
0077 event_marker_kernel=getattr(args, "event_delimiter_kernel", None),
0078 )
0079 elif args.input.suffix == ".csv":
0080 log.info("Input file is a CSV file")
0081 df = parse_profile_csv(
0082 args.input,
0083 spec,
0084 event_marker_kernel=getattr(args, "event_delimiter_kernel", None),
0085 )
0086 else:
0087 log.fatal("Input file has unknown extension %s", args.input.suffix)
0088 exit(1)
0089
0090 df.to_csv(args.output, index=False)
0091
0092
0093 if __name__ == "__main__":
0094 main()