b'\n_START_ARTICLE_\nModello Roofline\n_START_PARAGRAPH_\nIl modello Roofline (in italiano letteralmente "linea del tetto") \xc3\xa8 un modello di performance visuale che consente in maniera intuitiva di stimare le performance di un dato kernel computazionale o di una applicazione che esegue su architetture di calcolo di tipo multi-core, many-core o su acceleratori, mostrando graficamente le limitazioni inerenti all\'hardware usato e le potenziali ottimizzazioni da poter applicare, nonch\xc3\xa9 la priorit\xc3\xa0 con cui esse necessitano di essere applicate. Facendo convergere aspetti riguardanti la localit\xc3\xa0 dei dati, la banda, e paradigmi di parallelizazione in un\'unica raffigurazione, il modello di fatto costituisce una valida alternativa al semplice utilizzo della percentuale del picco di performance per valutare la qualit\xc3\xa0 delle prestazioni ottenute, dal momento che \xc3\xa8 in grado di modellare analiticamente sia dettagli implementativi che limitazioni alle prestazioni dovute a caratteristiche intrinseche dell\'architettura considerata._NEWLINE_Il modello Roofline nella sua versione base pu\xc3\xb2 essere visualizzato graficando le prestazioni relative all\'esecuzione di istruzioni a virgola mobile (FLOPS) come funzione del picco di performance, il picco di banda della macchina, e l\'intensit\xc3\xa0 operativa. La curva risultante, chiamata appunto Roofline, costituisce un limite superiore alle prestazioni ottenibili, al di sotto della quale esistono le effettive performance per il dato kernel o applicazione. Suddetta curva include due limiti massimi specifici della piattaforma: un limite derivato dalla banda di memoria e un limite derivato dal picco di performance dell\'unit\xc3\xa0 di computazione.\n_START_SECTION_\nLavoro\n_START_PARAGRAPH_\nIl lavoro  indica il numero di operazioni eseguite da un dato kernel computazionale o applicazione.  Questa metrica pu\xc3\xb2 riferirsi ad un qualsiasi tipo di operazione, a partire dal numero di punti di array aggiornati al secondo, al numero di operazioni intere al secondo, al numero di operazioni a virgola mobile per secondo (FLOPS), e la scelta di una o l\'altra \xc3\xa8 dettata dal caso e dalle necessit\xc3\xa0. Tuttavia, nella maggior parte dei casi,  \xc3\xa8 espresso in FLOPS._NEWLINE_Da notare che il lavoro  \xc3\xa8 una propriet\xc3\xa0 del dato kernel o applicazione e pertanto dipende solo parzialmente dalle caratteristiche della piattaforma.\n_START_SECTION_\nTraffico di memoria\n_START_PARAGRAPH_\nIl traffico di memoria  indica il numero di bytes di memoria trasferiti durante l\'esecuzione del kernel o applicazione. Contrariamente a ,  \xc3\xa8 altamente dipendente dalle propriet\xc3\xa0 della piattaforma usata, come per esempio la topologia della cache.\n_START_SECTION_\nAggiungere limiti superiori al modello\n_START_PARAGRAPH_\nIl Roofline na\xc3\xafve fornisce solo un limite superiore massimo (il massimo teorico) alle performance. Sebbene questa versione del modello di per s\xc3\xa9 consente di ricavare utili informazioni sulle performance ottenibili, \xc3\xa8 di fatto incompleto, in quanto non modella in maniera sufficientemente dettagliata le caratteristiche della piattaforma utilizzata e pertanto non consente una analisi esaustiva dei fattori che limitano le prestazioni. Se ad esempio il kernel computazionale o applicazione in oggetto raggiunge prestazioni che sono molto al di sotto della Roofline, potrebbe essere utile catturare altri limiti superiori delle performance, in aggiunta ai semplici picco di banda e picco di performance, al fine di guidare lo sviluppatore nel processo di scelta delle ottimizzazioni da implementare, o ancora per valutare qualitativamente l\'adeguatezza dell\'architettura usata rispetto al kernel o applicazione di cui si sta effettuando l\'analisi. I limiti superiori aggiunti impongono pertanto un limite sulle performance ottenibili che \xc3\xa8 al di sotto della Roofline, e indicano che il kernel o applicazione non pu\xc3\xb2 passare oltre nessuno di questi limiti senza prima eseguire l\'ottimizzazione associata._NEWLINE__NEWLINE_Il grafico Roofline pu\xc3\xb2 essere espanso in tre aspetti differenti: comunicazione, aggiungendo i limiti di banda, computazione, aggiungendo i limiti in-core, e localit\xc3\xa0 dei dati, aggiungendo i muri di localit\xc3\xa0.\n_START_SECTION_\nLimiti di banda\n_START_PARAGRAPH_\nI limiti di banda sono linee diagonali che limitano la banda e sono piazzate al di sotto della diagonale di picco di banda. La loro esistenza \xc3\xa8 causata dalla mancanza di specifiche ottimizzazioni architetturali relative alla memoria, come la coerenza delle cache, o di ottimizzazione software, come la mancanza di una sufficiente esposizione della concorrenza (che conseguentemente pu\xc3\xb2 limitare l\'utilizzo di banda).\n_START_SECTION_\nLimiti in-core\n_START_PARAGRAPH_\nI limiti in-core sono curve situate al di sotto della reale Roofline, la cui presenza scaturisce dalla mancanza di una determinata forma di parallelismo. Questi limiti superiori impongono di fatto una riduzione su quanto elevate le performance di una data applicazione o kernel computazionale possono essere. Le performance non possono eccedere questi limiti in-core a meno che la relativa forma di parallelismo sia esistente ed effettivamente sfruttata. Suddetti limiti possono in certi casi essere direttamente derivati dai manuali architetturali e non soltanto da benchmarking.\n_START_SECTION_\nMuri di localit\xc3\xa0\n_START_PARAGRAPH_\nSe l\'assunzione idealistica che l\'intensit\xc3\xa0 operativa \xc3\xa8 funzione delle sole caratteristiche del dato kernel o applicazione \xc3\xa8 rimossa, e pertanto viene considerata la topologia della cache, e di conseguenza la presenza di cache miss, l\'intensit\xc3\xa0 operativa risulta di conseguenza dipendente da una combinazione del kernel e dell\'architettura in uso. Ci\xc3\xb2 pu\xc3\xb2 risultare in un degrado delle prestazioni dipendente dal bilanciamento tra l\'intensit\xc3\xa0 operativa risultante e il punto di cresta. Contrariamente alle due categorie di limiti precedenti, le linee risultanti da questo tipo di analisi sono linee verticali che limitano l\'intensit\xc3\xa0 operativa e che non possono essere superate senza la dovuta ottimizzazione. Per questa ragione, suddette linee sono chiamate muri di localit\xc3\xa0 o pi\xc3\xb9 semplicemente muri di intensit\xc3\xa0 operativa.\n_START_SECTION_\nEstensioni del modello\n_START_PARAGRAPH_\nSuccessivamente alla sua introduzione, il modello \xc3\xa8 stato ulteriormente esteso per considerare un pi\xc3\xb9 ampio insieme di metriche e colli di bottiglia relativi all\'hardware. Attualmente in letteratura si possono trovare estensioni che considerano l\'impatto di una organizzazione della memoria NUMA, di esecuzione delle istruzioni fuori ordine, della latenza delle memorie, e che modellano la gerarchia della cache a un livello pi\xc3\xb9 dettagliato, al fine di fornire una visione pi\xc3\xb9 completa dei fattori che limitano le prestazioni e conseguentemente guidare il processo di ottimizzazione._NEWLINE_Inoltre, il modello \xc3\xa8 stato esteso anche per adattarsi ad architetture specifiche e alle relative caratteristiche, come nel caso delle FPGA.'