Skip to content

File acc_trace_core.h

File List > acc_trace > acc_trace_core.h

Go to the documentation of this file

#ifndef ACC_TRACE_CORE_H
#define ACC_TRACE_CORE_H

#include "clib_common.h"
#include "jm_perf.h"
#include "dp_state.h"
#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    ACC_TRACE_MEAN = 0,    
    ACC_TRACE_EXP = 1,     
    ACC_TRACE_MAXHOLD = 2, 
    ACC_TRACE_MINHOLD = 3, 
} acc_trace_mode_t;

typedef struct {
    double *acc;            
    size_t n;               
    acc_trace_mode_t mode;  
    double alpha;           
    uint64_t count;         
} acc_trace_state_t;

acc_trace_state_t *acc_trace_create(size_t n, int mode, double alpha);

void acc_trace_destroy(acc_trace_state_t *state);

void acc_trace_reset(acc_trace_state_t *state);

void acc_trace_accumulate(acc_trace_state_t *state, const float *p,
                          size_t p_len);

size_t acc_trace_value_max_out(acc_trace_state_t *state);

size_t acc_trace_value(acc_trace_state_t *state, size_t n, float *out);
/* ── Serializable state (standard bytes interface; see dp_state.h) ──────────
 * Field-wise: pack running trace + fold count; n/mode/alpha restored by create. */
#define ACC_TRACE_STATE_MAGIC DP_FOURCC ('A','T','R','C')
#define ACC_TRACE_STATE_VERSION 1u
size_t acc_trace_state_bytes (const acc_trace_state_t *state);
void acc_trace_get_state (const acc_trace_state_t *state, void *blob);
int acc_trace_set_state (acc_trace_state_t *state, const void *blob);

#ifdef __cplusplus
}
#endif

#endif /* ACC_TRACE_CORE_H */