Image

Ottimizzazione

Profiling e rimozione dei colli di bottiglia per un efficiente uso delle risorse.

Ottimizzazione

Ottimizzare un'applicazione software significa attuare strategie per incrementare la qualità e l'efficienza del codice sotto vari aspetti: la velocità d'esecuzione, il consumo di risorse quali la memoria centrale o lo spazio su disco, il tipo e la frequenza delle operazioni di I/O, le dimensioni dell'eseguibile, la velocità di avvio.

Tipicamente, l'obbiettivo è quello di ottenere un incremento di performance o di migliorare l'usabilità per gli utenti finali.

L'ottimizzazione, nelle sue declinazioni più sofisticate, è un processo che implica la lettura e la revisione del codice da parte di un esperto, coadiuvato dall'uso di strumenti specifici come analizzatori statici e profiler per la determinazione delle caratteristiche dell'eseguibile e del suo funzionamento dinamico.

Per alcuni linguaggi, ad esempio C e C++, l'ottimizzazione è anche una fase cruciale del processo di compilazione che può essere configurata per massimizzare i parametri di interesse.

Revisione, porting & altre integrazioni

In alcuni casi, l'esito del processo di ottimizzazione può essere non del tutto soddisfacente perchè si scontra con limiti propri della tecnologia di riferimento.

Ad esempio, applicazioni scritte in linguaggi bytecode come Java o C# possono risentire delle politiche di gestione della memoria effettuata dal garbage collector. Oppure l'implementazione di un algoritmo mediante programmazione sequenziale può limitarne l'applicabilità a grandi dataset.

In questi casi può rendersi necessaria la reimplementazione di alcune parti dell'applicazione con l'impiego di tecnologie differenti o l'integrazione di politiche alternative per la gestione delle risorse.

I nostri servizi includono l'ottimizzazione di applicazioni mediante:

  • Revisione architetturale dell'intera applicazione
  • Sviluppo di librerie di calcolo ottimizzate mediante OpenMP
  • Sviluppo di librerie di calcolo basate su Nvidia CUDA e OpenCL per l'esecuzione di algoritmi ad alto tasso di parallelismo su acceleratori grafici e CPU compatibili.

Vuoi ottimizzare le performace della tua applicazione?