xref: /aosp_15_r20/external/pytorch/torch/profiler/itt.py (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# mypy: allow-untyped-defs
2*da0073e9SAndroid Build Coastguard Workerfrom contextlib import contextmanager
3*da0073e9SAndroid Build Coastguard Worker
4*da0073e9SAndroid Build Coastguard Worker
5*da0073e9SAndroid Build Coastguard Workertry:
6*da0073e9SAndroid Build Coastguard Worker    from torch._C import _itt
7*da0073e9SAndroid Build Coastguard Workerexcept ImportError:
8*da0073e9SAndroid Build Coastguard Worker
9*da0073e9SAndroid Build Coastguard Worker    class _ITTStub:
10*da0073e9SAndroid Build Coastguard Worker        @staticmethod
11*da0073e9SAndroid Build Coastguard Worker        def _fail(*args, **kwargs):
12*da0073e9SAndroid Build Coastguard Worker            raise RuntimeError(
13*da0073e9SAndroid Build Coastguard Worker                "ITT functions not installed. Are you sure you have a ITT build?"
14*da0073e9SAndroid Build Coastguard Worker            )
15*da0073e9SAndroid Build Coastguard Worker
16*da0073e9SAndroid Build Coastguard Worker        @staticmethod
17*da0073e9SAndroid Build Coastguard Worker        def is_available():
18*da0073e9SAndroid Build Coastguard Worker            return False
19*da0073e9SAndroid Build Coastguard Worker
20*da0073e9SAndroid Build Coastguard Worker        rangePush = _fail
21*da0073e9SAndroid Build Coastguard Worker        rangePop = _fail
22*da0073e9SAndroid Build Coastguard Worker        mark = _fail
23*da0073e9SAndroid Build Coastguard Worker
24*da0073e9SAndroid Build Coastguard Worker    _itt = _ITTStub()  # type: ignore[assignment]
25*da0073e9SAndroid Build Coastguard Worker
26*da0073e9SAndroid Build Coastguard Worker
27*da0073e9SAndroid Build Coastguard Worker__all__ = ["is_available", "range_push", "range_pop", "mark", "range"]
28*da0073e9SAndroid Build Coastguard Worker
29*da0073e9SAndroid Build Coastguard Worker
30*da0073e9SAndroid Build Coastguard Workerdef is_available():
31*da0073e9SAndroid Build Coastguard Worker    """
32*da0073e9SAndroid Build Coastguard Worker    Check if ITT feature is available or not
33*da0073e9SAndroid Build Coastguard Worker    """
34*da0073e9SAndroid Build Coastguard Worker    return _itt.is_available()
35*da0073e9SAndroid Build Coastguard Worker
36*da0073e9SAndroid Build Coastguard Worker
37*da0073e9SAndroid Build Coastguard Workerdef range_push(msg):
38*da0073e9SAndroid Build Coastguard Worker    """
39*da0073e9SAndroid Build Coastguard Worker    Pushes a range onto a stack of nested range span.  Returns zero-based
40*da0073e9SAndroid Build Coastguard Worker    depth of the range that is started.
41*da0073e9SAndroid Build Coastguard Worker
42*da0073e9SAndroid Build Coastguard Worker    Arguments:
43*da0073e9SAndroid Build Coastguard Worker        msg (str): ASCII message to associate with range
44*da0073e9SAndroid Build Coastguard Worker    """
45*da0073e9SAndroid Build Coastguard Worker    return _itt.rangePush(msg)
46*da0073e9SAndroid Build Coastguard Worker
47*da0073e9SAndroid Build Coastguard Worker
48*da0073e9SAndroid Build Coastguard Workerdef range_pop():
49*da0073e9SAndroid Build Coastguard Worker    """
50*da0073e9SAndroid Build Coastguard Worker    Pops a range off of a stack of nested range spans. Returns the
51*da0073e9SAndroid Build Coastguard Worker    zero-based depth of the range that is ended.
52*da0073e9SAndroid Build Coastguard Worker    """
53*da0073e9SAndroid Build Coastguard Worker    return _itt.rangePop()
54*da0073e9SAndroid Build Coastguard Worker
55*da0073e9SAndroid Build Coastguard Worker
56*da0073e9SAndroid Build Coastguard Workerdef mark(msg):
57*da0073e9SAndroid Build Coastguard Worker    """
58*da0073e9SAndroid Build Coastguard Worker    Describe an instantaneous event that occurred at some point.
59*da0073e9SAndroid Build Coastguard Worker
60*da0073e9SAndroid Build Coastguard Worker    Arguments:
61*da0073e9SAndroid Build Coastguard Worker        msg (str): ASCII message to associate with the event.
62*da0073e9SAndroid Build Coastguard Worker    """
63*da0073e9SAndroid Build Coastguard Worker    return _itt.mark(msg)
64*da0073e9SAndroid Build Coastguard Worker
65*da0073e9SAndroid Build Coastguard Worker
66*da0073e9SAndroid Build Coastguard Worker@contextmanager
67*da0073e9SAndroid Build Coastguard Workerdef range(msg, *args, **kwargs):
68*da0073e9SAndroid Build Coastguard Worker    """
69*da0073e9SAndroid Build Coastguard Worker    Context manager / decorator that pushes an ITT range at the beginning
70*da0073e9SAndroid Build Coastguard Worker    of its scope, and pops it at the end. If extra arguments are given,
71*da0073e9SAndroid Build Coastguard Worker    they are passed as arguments to msg.format().
72*da0073e9SAndroid Build Coastguard Worker
73*da0073e9SAndroid Build Coastguard Worker    Args:
74*da0073e9SAndroid Build Coastguard Worker        msg (str): message to associate with the range
75*da0073e9SAndroid Build Coastguard Worker    """
76*da0073e9SAndroid Build Coastguard Worker    range_push(msg.format(*args, **kwargs))
77*da0073e9SAndroid Build Coastguard Worker    try:
78*da0073e9SAndroid Build Coastguard Worker        yield
79*da0073e9SAndroid Build Coastguard Worker    finally:
80*da0073e9SAndroid Build Coastguard Worker        range_pop()
81