Negli ultimi vent'anni si è assistito a una vera e propria rivoluzione nel modo di costruire computer. Ad oggi, l'unico modo per continuare a sfruttare la legge di Moore e aumentare le performance di un sistema è quello di aumentare il numero di unità computazionali dell'hardware. I multi- e many-core moderni tuttavia, necessitano di particolare attenzione da parte del programamtore, che deve essere in grado orchestrare la concorrenza fra i thread disponibili, suddividere efficacemente il lavoro, e progettare la comunicazione in modo da evitare dei colli di bottiglia che vanificherebbero tutto il potenziale speedup ottenibile.
Nella prima parte del corso, verranno illustrate le principali architetture parallele presenti e future, con i rispettivi pro e contro;
Nella seconda parte, si mostreranno i principali linguaggi di programmazione, pattern e framework usati nel processo di sviluppo di software parallelo, ad oggi e nel prossimo futuro
Infine, si spenderanno alcune parole come i sistemi paralleli (basati su GPU, ma non solo) vengano usati nei sistemi di Machine Learning attuali, e come apriranno le porte a Internet 5.0
Il corso è aperto a chiunque sia interessato a sapere "dove" l'informatica sta andando; per questa ragione sarà fruibile anche da chi non ha esperienza con la programmazione. Una conoscenza di base dei linguaggi con interfacce funzionali (es. C, C++, Java o C#) sarà sicuramente d'aiuto, ma in generale sarà possibile seguirlo anche se se ne è a digiuno. In ogni caso, durante le prime lezioni verranno fornite le poche nozioni di base necessarie