es-ude / es-ude/OnDeviceTraining-base-project

har_benchmark: Accuracy je Fenster melden (rig_marker v0.2.8, rig_window_end_ex)

Open
#3 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
0
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Follow-up zu LeoBuron/odt-energy-rig#20: seit rig_marker **v0.2.8** kann eine Firmware neben dem Loss weitere Kennzahlen je Fenster melden. `har_benchmark` soll die Trainingsgenauigkeit des Fensters mitsenden.

## Was die Bibliothek anbietet (v0.2.8)

```c
void rig_window_end(float loss); /* unveraendert */
void rig_window_end_ex(float loss, const char *extra); /* extra: "key=value,...", hinter loss= angehaengt */
```

Vereinbarung (INTERFACE-419.md §3): `acc=/` ueber die `steps*batch` Samples des Fensters. Der Rig-Host schreibt daraus `acc_first`/`acc_last` je Repeat in `meta.toml` (analog zu `loss_first`/`loss_last`); `rigctl check` bewertet die Accuracy nicht, sie ist Information.

## Aenderung in `src/examples/har_benchmark.c` (nach Merge von #2)

- `cmake/har_benchmark.cmake`: `ODT_RIG_GIT_TAG` von `v0.2.1` auf `v0.2.8`.
- Im Fenster einen Trefferzaehler fuehren: nach `calculateGradsSequential` den argmax von `stats->output` (Forward-Ausgabe der Laenge `NUM_CLASSES`) gegen `y` vergleichen, `hits++` bei Gleichheit. Falls `trainingStats_t` die Ausgabe nicht traegt, ist ein separater Forward vor dem Trainingsschritt NICHT akzeptabel (verfaelscht die Energiemessung) -- dann die Ausgabe ueber den OdtHook-Event abgreifen oder das Feld in ODT nachruesten.
- `rig_window_end(mean)` durch

```c
char extra[24];
snprintf(extra, sizeof extra, "acc=%u/%u", hits, (unsigned)(ODT_BENCH_STEPS_PER_WINDOW * BATCH));
rig_window_end_ex(lossSum / (float)(ODT_BENCH_STEPS_PER_WINDOW * BATCH), extra);
```

ersetzen. Das `snprintf` liegt hinter `rig_window_end_ex`s D0-low nicht, sondern davor -- es laeuft also im Messfenster; bei ~1 s Fenstern (float32) bzw. ~2 s (sym8) ist das vernachlaessigbar, aber der Vollstaendigkeit halber: es sind einige Mikrosekunden CPU ohne Peripheriewechsel.
- `scripts/check_har_benchmark_log.py`: `acc` optional mitparsen, wenn es die win-Zeilen prueft.
- README-Abschnitt zum Benchmark: `acc_first`/`acc_last` in `meta.toml` erwaehnen.

Bei 8 Samples je Fenster ist die Accuracy grob (Schritte von 12,5 %); aussagekraeftig wird sie erst ueber einen Repeat oder den ganzen Job gemittelt -- das passiert host-seitig.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with src/examples/har_benchmark.c and inspect trainingStats_t and the OdtHook event path to determine where the forward output is available without an extra forward pass. Update cmake/har_benchmark.cmake, scripts/check_har_benchmark_log.py, and the benchmark README as described, then run the existing benchmark log checks. Done means window records include acc and the resulting meta.toml documents acc_first and acc_last.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, cmake, python
Domain
build-system, documentation, embedded-iot, testing-qa
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.