[docs]defmonitor(region_name:Optional[str]=None)->Callable:"""Decorate function to monitor its energy usage."""definner_function(func:Callable)->Callable:@functools.wraps(func)deffunc_wrapper(*args:Any,**kwargs:Any)->Any:# Get custom config and kwargsregion_id=region_nameifregion_nameelsefunc.__name__perun=Perun(config)ifperun.warmup_round:func_result=func(*args,**kwargs)else:log.info(f"Rank {perun.comm.Get_rank()}: Entering '{region_id}'")perun.mark_event(region_id)func_result=func(*args,**kwargs)perun.mark_event(region_id)log.info(f"Rank {perun.comm.Get_rank()}: Leaving '{region_id}'")returnfunc_resultreturnfunc_wrapperreturninner_function
[docs]defperun(configuration_file:str="./.perun.ini",**conf_kwargs:Any)->Callable:"""Decorate function to monitor its energy usage."""definner_function(func:Callable)->Callable:@functools.wraps(func)deffunc_wrapper(*args:Any,**kwargs:Any)->Any:# 1) Read custom configread_custom_config(configuration_file)# 2) Read environment variablesread_environ()# 3) Parse remaining argumentsforkey,valueinconf_kwargs.items():save_to_config(key,value)sanitize_config(config)set_logger_config(config)app=Application(func,config,args=args,kwargs=kwargs)perun=Perun(config)func_result=perun.monitor_application(app)returnfunc_resultreturnfunc_wrapperreturninner_function
[docs]defregister_callback(func:Callable[[DataNode],None])->None:"""Register a function to run after perun has finished collection data. Parameters ---------- func : Callable[[DataNode], None] Function to be called. """perun=Perun.getInstance()iffunc.__name__notinperun.postprocess_callbacks:log.info(f"Rank {perun.comm.Get_rank()}: Registering callback {func.__name__}")perun.postprocess_callbacks[func.__name__]=func