1 Introduzione

Tutti i problemi proposti devono essere risolti utilizzando la proprietà del calcolo matriciale di fornire risultati equivalenti quando le operazioni siano eseguite non sui singoli elementi ma su una decomposizione a blocchi delle matrici. In tal caso le operazioni elementari sui numeri vengono sostituite dalle corrispondenti operazioni tra blocchi.

Si vuole evidenziare il fatto che il calcolo a blocchi è proprio quello utilizzato dalle più importanti e diffuse librerie parallele per il calcolo numerico (BLAS e LAPACK). Naturalmente tali librerie sono altamente ottimizzate per ogni architettura computazionale e ogni tipo di supercomputer.

Generalità Le funzioni successive sono semplificazioni di alcune delle funzioni BLAS di livello 1,2, e 3. I parametri sono (generalmente :) di significato ovvio. Analizzare la documentazione BLAS in caso di necessità. Sostituire il carattere iniziale del nome con S oppure D (singola o doppia precisione reale).

Domanda 1. Punti 40% Scrivere il codice C o Python seriale a blocchi (ovviamente senza ottimizzazioni) di una delle funzioni successive.

Domanda 2. Punti 40% Scrivere una versione MPI ipotizzando p nodi di calcolo.

Domanda 3. Punti 5% Scrivere una procedura che generi un array m×n di reali casuali e una procedura che generi un array di n reali casuali. Queste potranno essere utili per il test delle procedure sviluppate ai punti precedenti.

Domanda 4. Punti 15% Si esegua la funzione implementata ai punti 1 e/o 2 sulle matrici e/o vettori di test implementate al punto 3, per valori vari di m e o n. Scrivere uno script di shell o Python che automatizzi l’esecuzione dei test.