Agenda. Parallel Programming con Visual Studio 2010 15/12/2010. Come guadagnare in prestazioni INTRODUZIONE MULTI-CORE. Non solo dual core

Documenti analoghi
I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

GESTIONE DEI PROCESSI

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

Multithreading in Java. Fondamenti di Sistemi Informativi

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

Telematica II 17. Esercitazione/Laboratorio 6

I THREAD O PROCESSI LEGGERI Generalità

Il Sistema Operativo

FONDAMENTI di INFORMATICA L. Mezzalira

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer.

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Architettura di un sistema operativo

LabVIEW offre un ambiente di programmazione grafica

Corso di Sistemi di Elaborazione delle informazioni

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

La macchina di Von Neumann. Archite(ura di un calcolatore. L unità di elaborazione (CPU) Sequenza di le(ura. Il bus di sistema

Architettura MVC-2: i JavaBeans

Introduzione all Architettura del DBMS

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

Linux nel calcolo distribuito

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Criteri di Scheduling Algoritmi di Scheduling Multiple-Processor Scheduling Asymmetric/Symmetric multiprocessing Processori Multicore

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

CLUSTER COKA. Macchine e Risorse

Java threads (2) Programmazione Concorrente

Sistemi Operativi (modulo di Informatica II) I processi

Calcolatori Elettronici A a.a. 2008/2009

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Ambienti di calcolo a griglia Parte 2. Risorse (e loro gestione) Job di griglia e applicazioni di griglia Riservare le risorse ai job

Java Virtual Machine

INFORMATICA 1 L. Mezzalira

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento.

Capitolo 5: I thread

Creare client statici

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Gianluigi Magnasco easitec S.r.l. Parma, 16 Settembre 2010

Lezione 4 La Struttura dei Sistemi Operativi. Introduzione

Introduzione alla Virtualizzazione

La struttura dati ad albero binario

Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1

Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco

L architettura di un DBMS

Il Concetto di Processo

Scheduling. Sistemi Operativi e Distribuiti A.A Bellettini - Maggiorini. Concetti di base

File Server Resource Manager (FSRM)

Memoria secondaria. Struttura del disco. Scheduling del disco. Gestione dell unità a disco. Affidabilità dei dischi: RAID

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Architetture Applicative

Database & FreeBSD. Come configurare il sistema operativo ottimizzando le prestazioni sul DB. GufiCon#3 Milano, 12 Ottobre 2002

Le Infrastrutture Software ed il Sistema Operativo

Introduzione ai sistemi operativi

Modello dei processi. Riedizione delle slide della Prof. Di Stefano

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

Scheduling della CPU Simulazione in linguaggio Java

Hardware di un Computer

La Gestione delle risorse Renato Agati

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

Simulazione dell esecuzione di processi su architettura multiprocessore

Processi e Thread. Scheduling (Schedulazione)

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Il Sistema Operativo: il File System

STRUTTURE DEI SISTEMI DI CALCOLO

DMA Accesso Diretto alla Memoria

Inizializzazione, Assegnamento e Distruzione di Classi

TFS2010 Object Model Le build

CPU. Maurizio Palesi

I Thread. Laboratorio Software M. Grotto R. Farina

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

Il Sistema Operativo (1)

Speedup. Si definisce anche lo Speedup relativo in cui, invece di usare T 1 si usa T p (1).

Lezioni frontali e/o multimediali. Lezioni frontali e/o

Configurazione & Programmazione Profibus DP. in Ambiente Siemens TIA Portal

Il Sistema Operativo. Di cosa parleremo? Come si esegue un programma. La nozione di processo. Il sistema operativo

Sistemi RAID. Corso di Calcolatori Elettronici. Feragotto Elena

I processi. Un processo è una attività, controllata da un programma, che si svolge su un processore.

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Dispensa di Informatica I.1

Corso di Linguaggi di Programmazione

Capitolo 7: Sincronizzazione

GESTIONE INFORMATICA DEI DATI AZIENDALI

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore

Informatica di Base - 6 c.f.u.

CALCOLO PARALLELO SUPERARE I LIMITI DI CALCOLO. A cura di Tania Caprini

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

Il descrittore di processo (PCB)

Il Web-Service SDMX dell ISTAT

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

LINUX. Che cos'e` un sistema operativo?

Pronto Esecuzione Attesa Terminazione

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Transcript:

Agenda Parallel Programming con Visual Studio 2010 Introduzione alla scalabilità multi-core Task Parallel Library (TPL) in.net 4 Da LINQ a Parallel LINQ (PLINQ) Strumenti in Visual Studio 2010 Marco Russo http://blogs.devleap.com/marco http://sqlblog.com/blogs/marco_russo Come guadagnare in prestazioni Come ottenere scalabilità su più 8 o più core INTRODUZIONE MULTI-CORE Multithreading su elaborazioni Dove il costo di CPU è significativo Per operazioni di I/O bastano operazioni asincrone Per parallelizzare algoritmi lavoro più complesso Bisogna anche ripartire il carico tra più processori possibili Strade possibili Classe Thread Begin/End Invoke Task Non solo dual core Sfruttare CPU dual core è semplice Basta creare operazioni asincrone Spesso è sufficiente usare le tecniche adottate per un solo core Conflitti limitati Ma con 4, 8 e più core è diverso HyperThreading richiede di sfruttare tutti i processori logici per sfruttare al massimo la CPU Problemi Condivisione risorse Definizione algoritmo Overhead multithreading Conflitto accesso memoria Può penalizzare prestazioni, specialmente in scrittura Richiesti lock per accesso concorrente Anche in lettura Conflitto accesso a bus memoria Facile osservare 5% di guadagno solo per quello 1

Considerazioni Cambiare modo di programmare Specialmente per algoritmi e operazioni CPU intensive Cambiare linguaggio? Esistono linguaggi dedicati (es. Axum) Programmazione più dichiarativa è un aiuto Es. PLINQ Task Parallel Library (TPL) in.net 4 TPL IN.NET 4 Classe Parallel Task Scheduler CancellationToken Agenda Parallel Framework in.net 4.0 Libreria per semplificare parallelizzazione codice Gestisce thread e sincronizzazione Non è una libreria di programmazione asincrona Serve per velocizzare il software Multithread non garantito solo se migliora tempi di esecuzione Comprende: TPL Task Parallel Library PLINQ Parallel LINQ Task Parallel Library (TPL) Assembly: incluso in mscorlib Namespace System.Threading.Tasks Parallel Task TaskManager System AggregateException Parallel.Invoke method Array di delegate eseguiti senza vincoli di ordine Array Action[] Operation(1); Operation(2); Operation(3); Operation(4); Parallel.Invoke( () => Operation(1), () => Operation(2), () => Operation(3), () => Operation(4) ); 2

Parallel.For Esegue un ciclo for in parallelo Parallel.ForEach Esegue un ciclo foreach in parallelo for (int index = 0; index < 100; index++) { ProcessData(index); foreach (int value in data) { ProcessData(value); Parallel.For(0, 100, (index) => { ProcessData(index); ); Parallel.ForEach(data, (value) => { ProcessData(value); ); Task Classe Task I metodi di Parallel internamente usano istanze della classe Task Wrapper di un delegate che rappresenta una Unit of Work Metodi e proprietà di istanza: Cancel, IsCompleted, IsCanceled Esecuzione parte alla creazione dell oggetto Usare metodi statici di Task WaitAll WaitAny Creazione via Task.Factory Task t1 = Task.Factory.StartNew( delegate { Operation(1); ); Task t2 = Task.Factory.StartNew( delegate { Operation(2); ); Task t3 = Task.Factory.StartNew( () => { Operation(3); ); Task t4 = Task.Factory.StartNew( () => { Operation(4); ); Task.WaitAll( new Task[] { t1, t2, t3, t4 ); Task<T> Deriva da Task Aggiunge semantica (.Result) per leggere il valore restituito da un operazione sincrona, senza dover scrivere codice di sincronizzazione tra thread var f1 = Task.Factory.StartNew ( () => Operation(1) ); var f2 = Task.Factory.StartNew ( () => Operation(2) ); var f3 = Task.Factory.StartNew ( () => Operation(3) ); var f4 = Task.Factory.StartNew ( () => Operation(4) ); int result = f1.result + f2.result + f3.result + f4.result; Annullamento Task Pattern cooperativo CancellationTokenSource Controlla e propaga cancellazione Tipo reference (classe sealed) Metodi Cancel, IsCancellationRequested Proprietà Token restituisce CancellationToken CancellationToken Polling o notifica su cancellazione Tipo value Proprietà pubblica WaitHandle Metodi IsCancellationRequested, Register 3

Classe TaskFactory Distributed Task Queue Definisce default per: CancellationToken Scheduler TaskCreationOptions Default su creazione Task TaskContinuationOptions Default su chiamata a ContinueWith (extension method su Task definito in TaskFactory) Esiste una coda di task per ogni core Sistema più efficiente per gestire il parallelismo Riduce o evita sincronizzazione Importante per le prestazioni Migliori risultati con codice che non necessita di sincronizzazione tra thread diversi TaskScheduler Classe astratta consente specializzazioni Disponibile supporto a sincronizzazione con UI public void Button1_Click( ) { var ui = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew(() => { return LoadAndProcessImage(); // compute the image ).ContinueWith(t => { picturebox1.image = t.result; // display it, ui); Problemi di Concorrenza Operazioni parallele su dati condivisi Sincronizzazione limita scalabilità e prestazioni Evitare dati condivisi int sum = 0; Parallel.For(0, 10, (index) => { int local = sum; local += Operation(index); sum = local; ); int[] results = new int[10]; Parallel.For(0, 10, (index) => { results[index] = Operation(index); ); int sum = results.sum(); object sync = new object(); int sum = 0; Parallel.For(0, 10, (index) => { lock (sync) { int local = sum; local += Operation(index); sum = local; ); Problemi di Concorrenza Accesso a counter loop in lambda expression assegnate a Task Copiare dati su variabile locale for (int i = 0; i < array.length; i++) { Task.Factory.StartNew( () => Calc( array[i] ) ); for (int i = 0; i < array.length; i++) { var item = array[i]; Task.Factory.StartNew( () => Calc( item ) ); Gestione eccezioni Un eccezione non ferma subito altri thread Le eccezioni vengono catturate e aggregate Classe AggregateException Collection InnerExceptions con elenco eccezioni try { Parallel.Do( () => { throw new ArgumentException();, () => { throw new NullReferenceException(); ); catch (AggregateException ex) { Console.WriteLine(ex.InnerExceptions.Count); 4

Parallel LINQ (PLINQ) AsParallel Implementazione di LINQ to Object Parallelizza esecuzione query Si applicano extension methods di PLINQ usando AsParallel su una collection esistente Consente di controllare Grado di parallelismo Vincoli di ordinamento sull esecuzione Consente di parallelizzare query esistenti Query che usano LINQ to Objects int[] numbers =... var oddnumbers = from i in numbers.asparallel() where i % 2 == 1 Processing mode Modalità di esecuzione (ParallelMergeOptions) Pipelined Default, un pool di thread esegue le operazioni e un thread separato riceve i risultati WithMergeOptions( ParallelMergeOptions.NotBuffered ) WithMergeOptions( ParallelMergeOptions.AutoBuffered ) Stop-and-Go I dati vengono consumati dopo che tutti i worker thread sono finiti Migliori tempi complessivi, maggiore latenza iniziale WithMergeOptions( ParallelMergeOptions.FullyBuffered ) Inverted Enumeration Risultati consumati nello stesso thread che li produce Usare metodo ForAll su query Effetti collaterali Ordine dei risultati Non viene mantenuto per default orderby nella query forza l ordinamento del risultato Uso implicito di stop-and-go Usare AsParallel().AsOrdered() Mantiene ordinamento iniziale Impatto prestazionale, conviene solo in alcuni casi Race condition (modifica durante lettura) Usare funzioni pure, senza effetti collaterali int accumulator = 0; from i in data.asparallel(parallelqueryoptions.preserveordering) select new { Aggregated = accumulator += i, Value = i ; www.devleap.it Restituzione dati Classi.NET non sono thread-safe per default Attenzione a usare classi condivise nell elaborazione dei risultati di una query PLINQ List<int> result = new List<int>(); from i in data.asparallel() where i % 2 == 0 foreach (var number in query) { result.add(number); from i in data.asparallel() where i % 2 == 0 List<int> result = query.tolist(); List<int> result = new List<int>(); from i in data.asparallel() where i % 2 == 0 query.forall( (number) => { result.add(number); ); Collection thread-safe Classi collection thread-safe in namespace System.Collections.Concurrent BlockingCollection<T> ConcurrentBag<T> ConcurrentDictionary<TKey,TValue> ConcurrentQueue<T> ConcurrentStack<T> 5

In sintesi Parallelismo applicazioni è una tappa obbligata Unica strada per migliorare prestazioni con macchine multicore Usare i Task Pattern annullamento CancellationSourceToken Gestione errori Usare System.Collections.Concurrent Strumenti in Visual Studio 2010 per il debug e l ottimizzazione di applicazioni multithreading e multicore TOOL IN VS2010 Agenda Performance Analysis in Visual Studio 2010 Timing / CPU Memoria Concorrenza In questa sessione vediamo solo concorrenza Concorrenza Modalità acquisizione Resource Contention Opzione «Collect resource contention data» Informazioni su contese nell accesso a una risorsa Thread Execution Opzione «Visualize the behavior of a multithread application» Abilita uso di Concurrency Visualizer Richiede diritti amministratore Concurrency Visualizer Interfaccia visualizzazione delle informazioni acquisite su Uso complessivo CPU su Logical Core Thread Allocazione lavoro sui singoli Core CPU Utilization Area verde: numero di Core in uso Area grigia: Idle Core non impegnati Area rossa: System es. kernel, servizi Area gialla: altri processi (o idle su s.o.) 6

Threads View Cores View Attività per Thread Attività su dischi Informazioni sul codice sottostante un blocco-colore, in particolare: Synchronization I/O Esecuzione Attività dei thread sui singoli core Spazi bianchi: non c è attività Cambi colore frequenti: alto context-switch Operazione costosa Colore uniforme e costante = esecuzione più efficiente 7