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
62 lines
1.9 KiB
Markdown
62 lines
1.9 KiB
Markdown
# Patterns Python -> C (efficienza)
|
|
|
|
## 1) Mapping dati: scegliere strutture contigue
|
|
|
|
- `list[int/float]` -> buffer contiguo (`int32_t*`, `float*`, `double*`) + `size_t n`
|
|
- `tuple` a campi fissi -> `struct` con tipi espliciti
|
|
- `dict` con chiavi piccole/note -> array indicizzato o enum + switch
|
|
- `set` su dominio ridotto -> bitmap; su dominio ampio -> hash table dedicata
|
|
|
|
Pattern consigliato per API:
|
|
|
|
```c
|
|
int kernel_run(const float *restrict in, float *restrict out, size_t n);
|
|
```
|
|
|
|
## 2) Mapping controllo di flusso
|
|
|
|
- List comprehension numerica -> loop `for` con 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 `float` vs `double` prima 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/free` per 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 `struct` per ridurre padding e cache miss
|
|
|
|
## 6) Error model coerente
|
|
|
|
Pattern consigliato:
|
|
|
|
```c
|
|
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
|
|
|
|
1. Portare codice 1:1 in C per equivalenza funzionale.
|
|
2. Inserire test di parità output.
|
|
3. Profilare la versione C.
|
|
4. Ottimizzare solo le funzioni che dominano runtime.
|