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.9 KiB
1.9 KiB
Patterns Python -> C (efficienza)
1) Mapping dati: scegliere strutture contigue
list[int/float]-> buffer contiguo (int32_t*,float*,double*) +size_t ntuplea campi fissi ->structcon tipi esplicitidictcon chiavi piccole/note -> array indicizzato o enum + switchsetsu dominio ridotto -> bitmap; su dominio ampio -> hash table dedicata
Pattern consigliato per API:
int kernel_run(const float *restrict in, float *restrict out, size_t n);
2) Mapping controllo di flusso
- List comprehension numerica -> loop
forcon output preallocato sum(...)-> accumulatore locale tipizzato- Generator pipeline -> passaggi espliciti su buffer intermedi preallocati
- Evitare callback in hot-path quando una chiamata diretta è possibile
3) Mapping semantica numerica
- Definire policy per
floatvsdoubleprima della traduzione - Riprodurre comportamento su NaN/Inf, divisione, modulo e rounding
- Isolare conversioni int/float fuori dal loop caldo
4) Gestione memoria e ownership
- Definire ownership in firma funzione e commento API
- Evitare
malloc/freeper elemento o per iterazione - Riusare arena/buffer quando il workload è batch
- Validare dimensioni e puntatori in ingresso all'inizio della funzione
5) Branch e cache locality
- Ordinare il branch con caso frequente nel percorso lineare
- Ridurre dipendenze dati tra iterazioni in loop lunghi
- Ordinare campi
structper ridurre padding e cache miss
6) Error model coerente
Pattern consigliato:
typedef enum {
KERNEL_OK = 0,
KERNEL_ERR_NULL = 1,
KERNEL_ERR_SIZE = 2
} kernel_status_t;
Restituire errori prevedibili e senza side effect parziali non documentati.
7) Sequenza pratica di traduzione
- Portare codice 1:1 in C per equivalenza funzionale.
- Inserire test di parità output.
- Profilare la versione C.
- Ottimizzare solo le funzioni che dominano runtime.