feat(skills): add local python-to-c-efficiency skill with modular C scaffold
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
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user