add local Codex skill for Python->C performance-focused translation define modular C architecture and benchmark/correctness gates add references for patterns, profiling, and module design add scaffold_c_module.py to generate include/src/tests/bench skeleton update agent default prompt for benchmark-backed optimizations
1.6 KiB
1.6 KiB
Compilazione, Profiling e Benchmark
1) Profili build consigliati
Debug (correttezza e sicurezza)
gcc -O0 -g3 -fsanitize=address,undefined -fno-omit-frame-pointer -Wall -Wextra -Wpedantic src/*.c tests/*.c -o app_debug
Usare questo profilo per trovare UB, out-of-bounds e bug di lifetime.
Release (throughput)
gcc -O3 -march=native -flto -fno-semantic-interposition -DNDEBUG -Wall -Wextra src/*.c -o app_release
Confrontare anche con clang sullo stesso workload.
Release + PGO (opzionale su workload stabile)
gcc -O3 -fprofile-generate src/*.c -o app_pgo_gen
./app_pgo_gen <input-realistico>
gcc -O3 -fprofile-use -fprofile-correction src/*.c -o app_pgo
Applicare PGO solo quando il dataset di training è rappresentativo.
2) Misurazione minima
Tempo e memoria
/usr/bin/time -v ./app_release
Benchmark ripetibile
hyperfine --warmup 3 --runs 20 'python3 script.py' './app_release'
Bloccare input, CPU governor e carico macchina durante le run.
3) Profiling CPU
perf stat ./app_release
perf record -g ./app_release
perf report
Usare perf report per confermare hotspot reali prima di ottimizzare.
4) Interpretazione pratica
- Ridurre prima complessità algoritmica.
- Ottimizzare poi memoria/cache.
- Applicare infine micro-ottimizzazioni (
inline, branch hints, unrolling) solo se misurate.
5) Gate di accettazione
- Nessun errore sanitizer in debug.
- Equivalenza output su dataset di regressione.
- Speedup ripetibile su target reale.
- Metriche e flag compiler documentati nel risultato.