From 063b20be98747ba0b288545e653ef9489bf14a54 Mon Sep 17 00:00:00 2001 From: y-jan137 Date: Wed, 18 Mar 2026 14:04:47 +0300 Subject: Replace DynMLP with DynNet --- include/dynnet.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 include/dynnet.h (limited to 'include/dynnet.h') diff --git a/include/dynnet.h b/include/dynnet.h new file mode 100644 index 0000000..966c239 --- /dev/null +++ b/include/dynnet.h @@ -0,0 +1,50 @@ +#pragma once + +#include "utils.h" + +typedef struct { + void (*forward)(const void *cfg, const double *theta, + const double *in, double *out, double *workspace); + void (*vjp)(const void *cfg, const double *theta, + const double *in, const double *v_out, + double *v_in, double *v_theta, double *workspace); + int (*nparams)(const void *cfg); + int (*workspace_size)(const void *cfg); +} LayerOps; + +typedef struct DynNet { + int num_layers; + const LayerOps **ops; + void **layer_configs; + int *param_offsets; + int *ws_offsets; + int *in_dims; + int total_params; + int total_workspace; + int v_buf_offset; + int max_dim; + int D; + double current_t; + /* build state (non-null before finalize) */ + void *_pre; + int _pre_n, _pre_cap, _cur_dim; +} DynNet; + +DynNet *dynnet_create(int D); +void dynnet_add_linear(DynNet *net, int out_dim); +void dynnet_add_tanh(DynNet *net); +void dynnet_add_softplus(DynNet *net); +void dynnet_add_swish(DynNet *net); +void dynnet_add_layernorm(DynNet *net); +void dynnet_add_residual_begin(DynNet *net); +void dynnet_add_residual_end(DynNet *net); +void dynnet_add_time_concat(DynNet *net); +void dynnet_finalize(DynNet *net); +void dynnet_init_params(DynNet *net, double *theta, RNG *r); +void dynnet_free(DynNet *net); + +void dynnet_forward(DynNet *net, const double *theta, + const double *z, double t, double *out, double *workspace); +void dynnet_vjp(DynNet *net, const double *theta, + const double *z, double t, const double *v, + double *vjp_z, double *vjp_theta, double *workspace); -- cgit v1.2.3