profiling#
ProfileNode#
- class onnx_array_api.profiling.ProfileNode(filename: str, line: int, func_name: str, nc1: int, nc2: int, tin: float, tall: float)[source]#
Graph structure to represent a profiling.
- Parameters:
filename – filename
line – line number
func_name – function name
nc1 – number of calls 1
nc2 – number of calls 2
tin – time spent in the function
tout – time spent in the function and in the sub functions
profile#
- onnx_array_api.profiling.profile(fct: Callable, sort: str = 'cumulative', rootrem: str | None = None, as_df: bool = False, return_results: bool = False, **kwargs) str [source]#
Profiles the execution of a function.
- Parameters:
fct – function to profile
sort – see sort_stats
rootrem – root to remove in filenames
as_df – return the results as a dataframe and not text
return_results – if True, return results as well (in the first position)
kwargs – additional parameters used to create the profiler, see cProfile.Profile
- Returns:
raw results, statistics text dump (or dataframe is as_df is True)
(
Source code
,png
,hires.png
,pdf
)
profile2graph#
- onnx_array_api.profiling.profile2graph(ps: Stats, clean_text: Callable | None = None, verbose: bool = False, fLOG: Callable | None = None) ProfileNode [source]#
Converts profiling statistics into a graphs.
- Parameters:
ps – an instance of pstats
clean_text – function to clean function names
verbose – verbosity
fLOG – logging function
- Returns:
an instance of class @see cl ProfileNode
pyinstrument has a nice display to show time spent and call stack at the same time. This function tries to replicate that display based on the results produced by module
cProfile
. Here is an example.<<<
import time from onnx_array_api.profiling import profile, profile2graph def fct0(t): time.sleep(t) def fct1(t): time.sleep(t) def fct2(): fct1(0.1) fct1(0.01) def fct3(): fct0(0.2) fct1(0.5) def fct4(): fct2() fct3() ps = profile(fct4)[0] root, nodes = profile2graph(ps, clean_text=lambda x: x.split("/")[-1]) text = root.to_text() print(text)
>>>
fct1 -- 3 3 -- 0.00006 0.61156 -- :11:fct1 (fct1) <built-in method time.sleep> -- 3 3 -- 0.61150 0.61150 -- ~:0:<built-in method time.sleep> (<built-in method time.sleep>) +++ fct4 -- 1 1 -- 0.00002 0.81237 -- :25:fct4 (fct4) fct2 -- 1 1 -- 0.00002 0.11088 -- :15:fct2 (fct2) fct1 -- 2 2 -- 0.00004 0.11086 -- :11:fct1 (fct1) +++ fct3 -- 1 1 -- 0.00003 0.70147 -- :20:fct3 (fct3) fct0 -- 1 1 -- 0.00002 0.20074 -- :7:fct0 (fct0) <built-in method time.sleep> -- 1 1 -- 0.20072 0.20072 -- ~:0:<built-in method time.sleep> (<built-in method time.sleep>) +++ fct1 -- 1 1 -- 0.00002 0.50070 -- :11:fct1 (fct1) +++ <built-in method time.sleep> -- 4 4 -- 0.81222 0.81222 -- ~:0:<built-in method time.sleep> (<built-in method time.sleep>)