OpenCL nel Trading - pagina 4

 

AMD Developer Central: panoramica tecnica di OpenCL. Episodio 2: Cos'è OpenCL™? (continua)



AMD Developer Central: panoramica tecnica di OpenCL. Episodio 2: Cos'è OpenCL™? (continua)

In questo video, Justin Hensley discute la piattaforma e i modelli di memoria di OpenCL, che è importante comprendere quando si utilizza OpenCL per accelerare le applicazioni. Spiega che un host è connesso a uno o più dispositivi OpenCL, come GPU o processori multi-core, che dispongono di unità di calcolo che eseguono codice in un modello di dati multipli a singola istruzione. Gli elementi di lavoro hanno una memoria privata, mentre i gruppi di lavoro hanno una memoria locale condivisa, ogni dispositivo ha una memoria globale e costante e gli sviluppatori devono gestire in modo esplicito la sincronizzazione della memoria e i dati per ottenere le massime prestazioni. Inoltre, Hensley discute oggetti OpenCL come dispositivi, contesti, code, buffer, immagini, programmi, kernel ed eventi, che vengono utilizzati per inviare lavoro ai dispositivi, sincronizzare e profilare i dati. Infine, delinea come eseguire un programma OpenCL in tre semplici passaggi: creazione di oggetti del programma e del kernel, creazione di oggetti di memoria e creazione di code di comandi con eventi per garantire il corretto ordine di esecuzione del kernel.

  • 00:00:00 In questa sezione, Justin Hensley spiega la piattaforma ei modelli di memoria di OpenCL, che è importante comprendere quando si utilizza OpenCL per accelerare le applicazioni. Un host è connesso a uno o più dispositivi OpenCL (GPU, DSP o processore multi-core), che dispongono di unità di calcolo che eseguono codice in un modello di dati multipli a singola istruzione. In termini di memoria, il processore host ha una memoria accessibile solo dalla CPU, mentre il dispositivo di elaborazione ha una memoria globale e costante (non sincronizzata) e ogni elemento di lavoro ha la propria memoria privata a cui solo lui può accedere. I gruppi di lavoro hanno una memoria locale condivisa e gli sviluppatori devono gestire in modo esplicito la sincronizzazione della memoria e dei dati se vogliono ottenere il massimo delle prestazioni dai loro dispositivi. Infine, Hensley discute gli oggetti OpenCL, come dispositivi, contesti, code, buffer, immagini, programmi, kernel ed eventi, che vengono utilizzati per inviare lavoro ai dispositivi, sincronizzare e profilare i dati.

  • 00:05:00 In questa sezione, il relatore spiega come eseguire un programma OpenCL in tre semplici passaggi. Innanzitutto, crei oggetti programma per costruire il codice sorgente e oggetti kernel contenenti il codice da eseguire su vari dispositivi con argomenti. In secondo luogo, crei oggetti di memoria, immagini o buffer. Terzo, crei code di comando e le usi per accodare il lavoro per diversi dispositivi, ma l'ordine di lavoro potrebbe essere in ordine o fuori servizio. Pertanto, gli eventi vengono utilizzati per garantire che i kernel vengano eseguiti nell'ordine necessario quando esistono dipendenze.
Episode 2: What is OpenCL™? (continued)
Episode 2: What is OpenCL™? (continued)
  • 2013.05.27
  • www.youtube.com
In this video, you continue to learn about OpenCL™. We describe the details about the OpenCL™ platform and memory models. Topics covered include compute devi...
 

AMD Developer Central: panoramica tecnica di OpenCL. Episodio 3: Configurazione delle risorse



AMD Developer Central: panoramica tecnica di OpenCL. Episodio 3: Configurazione delle risorse

Nell'episodio 3 della serie di tutorial su OpenCL, il relatore approfondisce la configurazione e la gestione delle risorse in OpenCL, coprendo argomenti come oggetti di memoria, contesto, dispositivi e code di comando. Viene inoltre discusso il processo di accesso e allocazione della memoria per le immagini, con particolare attenzione alle chiamate di lettura e scrittura delle immagini e ai formati supportati. Vengono esaminate le caratteristiche delle operazioni di memoria sincrone e asincrone, con una spiegazione di come il sistema di gestione degli eventi OpenCL può essere utilizzato per garantire il completamento del trasferimento dei dati. Infine, si consiglia agli utenti di interrogare le informazioni sul dispositivo con la chiamata CL get device info per scegliere il dispositivo migliore per il loro algoritmo.

  • 00:00:00 In questa sezione, Justin Hensley di AMD discute l'allocazione delle risorse in OpenCL, concentrandosi in particolare sugli oggetti di memoria, sul contesto e sulla configurazione dei dispositivi. Spiega come interrogare il sistema per trovare i dispositivi disponibili, creare un contesto condiviso e impostare code di comando per parlare con i dispositivi. Hensley osserva inoltre che più core di una CPU sono considerati un dispositivo OpenCL e che i dispositivi in contesti diversi non possono condividere dati. Per scegliere il dispositivo migliore per un algoritmo, gli utenti possono interrogare il runtime OpenCL per informazioni sul dispositivo con la chiamata CL get device info per determinare il numero di unità di calcolo, la frequenza di clock, la dimensione della memoria e le estensioni supportate. Infine, Hensley descrive i buffer come semplici blocchi di memoria e le immagini come strutture di dati opache formattate in 2D e 3D.

  • 00:05:00 In questa sezione, il video spiega come OpenCL elabora le immagini e come è necessario accedere alle immagini tramite le chiamate di lettura e scrittura delle immagini. Vengono anche discussi il formato e il campionatore di dati per un'immagine e come utilizzare la chiamata CL per ottenere i formati di immagine supportati per determinare i formati supportati. Per allocare un buffer immagine, vengono impostati il formato e la dimensione e la chiamata CL create buffer viene utilizzata per creare un oggetto buffer per i dati di input e output. CL in queue read e CL in queue right buffer sono comandi utilizzati rispettivamente per leggere e scrivere dati da e verso oggetti di memoria. Se è necessario mappare un'area di memoria
    allo spazio degli indirizzi host, viene utilizzato il CL nel buffer della mappa delle code. Infine, il buffer di copia della coda CLN viene utilizzato per copiare la memoria tra due oggetti di memoria.

  • 00:10:00 In questa sezione, il relatore spiega che i dati possono essere condivisi solo con oggetti di memoria allocati all'interno dello stesso contesto e che tutte le operazioni possono essere eseguite in modo sincrono o asincrono. Le operazioni sincrone vengono eseguite quando la chiamata di blocco è impostata su CL true, il che significa che il trasferimento dei dati si bloccherà fino a quando non avrà luogo l'effettiva operazione di memoria. Questo può richiedere del tempo a seconda della posizione della memoria. In alternativa, con CL false, sarà una chiamata asincrona e si deve utilizzare il sistema di gestione degli eventi CL aperto per garantire che la memoria sia completamente copiata prima di essere utilizzata.
Episode 3: Resource Setup
Episode 3: Resource Setup
  • 2013.05.27
  • www.youtube.com
In this video, you learn about resource allocation, resource setup and how to setup the OpenCL™ runtime. Topics include choosing devices, creating contexts a...
 

AMD Developer Central: panoramica tecnica di OpenCL. Episodio 4: Esecuzione del kernel



AMD Developer Central: panoramica tecnica di OpenCL. Episodio 4: Esecuzione del kernel

In questa sezione, Justin Hensley copre l'argomento dell'esecuzione del kernel in OpenCL, spiegando che gli oggetti del kernel contengono una specifica funzione del kernel e sono dichiarati con il qualificatore del kernel. Analizza i passaggi per l'esecuzione di un kernel, inclusa l'impostazione degli argomenti del kernel e l'accodamento del kernel. Hensley sottolinea l'importanza dell'utilizzo degli eventi per gestire più kernel e prevenire problemi di sincronizzazione e suggerisce di utilizzare CL wait for events per attendere che vengano completati prima di procedere. Il video entra anche nei dettagli sulla profilazione dell'applicazione per ottimizzare i kernel che richiedono più tempo per essere eseguiti.

  • 00:00:00 In questa sezione, Justin Hensley discute l'esecuzione del kernel in OpenCL. Spiega che gli oggetti del kernel incapsulano una specifica funzione del kernel in un programma e sono dichiarati con il qualificatore del kernel. L'oggetto programma incapsula l'origine del programma o il file binario precompilato dal disco e un elenco di dispositivi. Una volta creato l'oggetto programma, l'utente può compilarlo per i dispositivi di cui dispone in fase di esecuzione. Dopo che il kernel è stato compilato, deve essere eseguito con i due passaggi fondamentali per l'esecuzione: impostare gli argomenti del kernel e accodare il kernel. Per impostare gli argomenti, l'utente userebbe la funzione chiamata "CL Set Kernel Arg" con il primo argomento che è il kernel che deve essere eseguito.

  • 00:05:00 In questa sezione, il video spiega come impostare la dimensione degli argomenti ed eseguire effettivamente il kernel. L'esempio utilizzato è l'elaborazione di immagini con una dimensione globale impostata su un'immagine con un'altezza dell'immagine di una determinata dimensione. Il video spiega che il runtime di OpenCL nelle code esegue le attività in modo asincrono, quindi spetta al programmatore utilizzare gli eventi per tenere traccia dello stato di esecuzione. Il video spiega anche diversi modi per sincronizzare i comandi e sincronizzare in modo esplicito tra le code utilizzando gli eventi. Il video fornisce esempi di un dispositivo e una coda e due dispositivi e due code, spiegando l'importanza dell'uso degli eventi per evitare problemi di dipendenza espliciti.

  • 00:10:00 In questa sezione, Justin Hensley discute su come gestire i kernel e gli eventi quando si usa OpenCL. Spiega che l'utilizzo degli eventi è importante quando si gestiscono più kernel e si prevengono problemi di sincronizzazione. Suggerisce di utilizzare CL wait for events, che attende il completamento di tutti gli eventi prima di continuare, e in queue wait for events, che mette in coda un punto di blocco per un utilizzo successivo da parte del runtime OpenCL, consentendo all'applicazione di continuare a funzionare senza blocchi. Inoltre, le informazioni di profilazione degli eventi CL get possono essere utilizzate per profilare l'applicazione in modo che gli sviluppatori possano ottimizzare i kernel che richiedono più tempo per l'esecuzione.
Episode 4: Kernel Execution
Episode 4: Kernel Execution
  • 2013.05.27
  • www.youtube.com
In this video, you learn about the execution and synchronization of OpenCL™ kernels. Topics include program and kernel objects, compiling and executing kerne...
 

AMD Developer Central: panoramica tecnica di OpenCL. Episodio 5: Programmazione con OpenCL™ C



AMD Developer Central: panoramica tecnica di OpenCL. Episodio 5: Programmazione con OpenCL™ C

Questo video illustra varie caratteristiche del linguaggio OpenCL™ C, incluse le funzioni degli elementi di lavoro, le funzioni dei gruppi di lavoro, i tipi di vettori e le funzioni di sincronizzazione integrate. Il video sottolinea l'importanza di utilizzare qualificatori dello spazio degli indirizzi corretti per un'efficiente scrittura parallela del codice e la condivisione della memoria tra gruppi di lavoro. Il concetto di tipi vettoriali viene discusso in dettaglio insieme all'uso dello spazio di memoria corretto per gli argomenti dei puntatori del kernel, le variabili locali e le variabili globali del programma. Inoltre, le funzioni matematiche integrate e le funzioni del gruppo di lavoro come barriere e memfence sono coperte con un suggerimento per controllare queste funzioni in fase di esecuzione.

  • 00:00:00 In questa sezione, Dustin Hensley di AMD parla delle funzionalità del linguaggio OpenCL™ C, che includono funzioni degli elementi di lavoro, funzioni dei gruppi di lavoro, tipi di vettore e funzioni di sincronizzazione integrate. OpenCL è basato su ISO C99, con le restrizioni di nessuna intestazione C99 standard, puntatori a funzione, ricorsione, array di lunghezza variabile e campi di bit. Con OpenCL, ci sono qualificatori dello spazio degli indirizzi per consentire un'efficiente scrittura parallela del codice, consentendo anche la condivisione della memoria tra gruppi di lavoro. Inoltre, è disponibile un accesso ottimizzato alle immagini tramite funzioni di immagine integrate e funzioni di runtime integrate per accedere alle informazioni di runtime. Hensley ha dimostrato un semplice kernel parallelo di dati che utilizza le funzioni degli elementi di lavoro e ha mostrato come diverse funzioni e variabili OpenCL possono essere utilizzate per costruire quel kernel.

  • 00:05:00 In questa sezione viene discusso il concetto di tipi vettoriali in OpenCL. Questi tipi di vettori sono progettati per essere portabili su diversi tempi di esecuzione e hanno determinate caratteristiche che li rendono sicuri per gli indiani, allineati alla lunghezza del vettore e dispongono di funzioni integrate. Il video mostra quindi diversi esempi di operazioni vettoriali come la creazione di un vettore letterale e la selezione di componenti specifici del vettore. Inoltre, si noti che esistono diversi spazi di indirizzi in OpenCL ed è importante utilizzare quello corretto per gli argomenti del puntatore del kernel, le variabili locali e le variabili globali del programma. La mancata specificazione di uno spazio di memoria può comportare l'impostazione predefinita di private e causare problemi.

  • 00:10:00 In questa sezione, viene spiegato che la conversione di dati da spazi di memoria globale, locale o privata in un altro spazio di memoria utilizzando i puntatori non è consentita in OpenCL. La copia dei dati in modo esplicito è necessaria per gli spazi di memoria richiesti. Per quanto riguarda la semantica e le conversioni, vengono seguite le regole C99 per le conversioni scalari e di puntatori e non sono consentite conversioni implicite per i tipi vettoriali. L'importanza di essere espliciti viene evidenziata utilizzando funzioni specifiche per determinare il tipo di arrotondamento che si sta eseguendo nell'operazione, piuttosto che affidarsi alla macchina per gestirlo. Le funzioni matematiche integrate di OpenCL, come la funzione log, offrono diversi tipi di precisione completa, mezza precisione e funzione nativa per gestire i casi limite ambigui della libreria C99 in modo più efficiente e sono disponibili diversi metodi per passare da un tipo di dati all'altro utilizzando questo tipo di carattere di sottolineatura o convertire un tipo in un altro tipo.

  • 00:15:00 In questo estratto, il relatore discute le funzioni di gruppo di lavoro integrate e le estensioni di OpenCL C. Queste funzioni includono strumenti di sincronizzazione come barriere e Memphis che consentono la sincronizzazione della memoria. L'oratore parla anche dell'importanza di utilizzare tutti gli elementi di lavoro in un gruppo di lavoro per eseguire la stessa funzione piuttosto che creare una barriera che non tutti gli elementi colpiranno. Inoltre, l'oratore parla delle varie estensioni, comprese le funzioni atomiche e la selezione delle modalità di arrotondamento in fase di compilazione. L'oratore consiglia di andare alle specifiche per saperne di più su queste funzioni ed estensioni e controllarle in fase di esecuzione.
Episode 5: Programming with OpenCL™ C
Episode 5: Programming with OpenCL™ C
  • 2013.05.27
  • www.youtube.com
In this video, you learn about the OpenCL™ C kernel language. Topics include work items and work groups, data types, vector operations, address spaces, type ...
 

Come utilizzare OpenCL per lavorare con la GPU



Come utilizzare OpenCL per lavorare con la GPU

Il video introduce OpenCL come uno strumento standard aperto che può funzionare sulla maggior parte delle nuove schede grafiche in Windows con l'installazione richiesta di CUDA o driver grafici specifici a seconda della scheda. L'oratore descrive un semplice programma, il processo di creazione di un kernel, i buffer per i dati, l'impostazione degli argomenti del kernel e la dimensione globale del lavoro e l'esecuzione del carico di lavoro sul dispositivo in OpenCL, confrontandolo con CUDA. I parametri coinvolti nella creazione di un kernel in OpenCL per il lavoro della GPU, l'accodamento del buffer di lettura, la deallocazione della memoria sono stati spiegati con codici di esempio per controllare i calcoli. Presentando un piccolo programma che applica una sottile sfocatura alle immagini in scala di grigi utilizzando OpenCL, il presentatore sottolinea che OpenCL ha più codice boilerplate rispetto a CUDA, ma è una soluzione aperta e standard applicabile a diverse schede grafiche e può essere riutilizzata su sistemi diversi indipendentemente dal produttore.

  • 00:00:00 In questa sezione, il relatore introduce OpenCL e spiega come sia uno standard aperto che può funzionare con la maggior parte delle schede grafiche più recenti in Windows, con il requisito di installare CUDA o il driver grafico specifico a seconda della scheda. Il relatore fornisce quindi un semplice programma e descrive come funziona in OpenCL, confrontandolo con CUDA. Eseguono il processo di creazione di un kernel, creazione di buffer per i dati e impostazione degli argomenti del kernel e della dimensione globale del lavoro prima di eseguire il carico di lavoro sul dispositivo.

  • 00:05:00 In questa sezione, il relatore spiega i parametri coinvolti nella creazione di un kernel in OpenCL per il lavoro GPU. Il parametro della dimensione del lavoro globale è il numero di unità con cui vuoi lavorare, mentre la dimensione del lavoro locale è quanto vuoi fare in ciascuna unità. La dimensione del lavoro globale deve essere un multiplo della dimensione del lavoro locale e, sebbene sia possibile eseguire il lavoro senza specificare la dimensione del lavoro locale globale, è meglio impostarle entrambe in modo da sapere su quali dimensioni si sta lavorando. L'oratore passa quindi a spiegare il buffer di lettura in coda, come deallocare la memoria e fornisce un codice di esempio per verificare che tutti i calcoli siano stati eseguiti correttamente. Infine, il relatore confronta il proprio esempio con un carico di lavoro che esegue una sfocatura su un'immagine, mostrando i parametri e l'uso delle tuple.

  • 00:10:00 In questa sezione, l'oratore spiega le modifiche al codice di un esempio precedente e presenta un kernel che eseguirà una sottile sfocatura su un'immagine. Dopo aver creato puntatori e buffer di dimensioni diverse, l'oratore imposta gli argomenti al kernel prima di recuperare la memoria e liberare i puntatori. Infine, l'oratore legge le immagini in scala di grigi, reimposta i pixel sul risultato e scrive l'immagine in scala di grigi.

  • 00:15:00 In questa sezione, il presentatore mostra un piccolo programma che applica una sottile sfocatura a un'immagine in scala di grigi utilizzando OpenCL. Il presentatore osserva che OpenCL ha più codice boilerplate rispetto a CUDA, raccomandando l'uso di una classe o di un oggetto per mantenere organizzati tutti i programmi del kernel e le variabili della coda di comando. Tuttavia, il presentatore sottolinea che OpenCL è una soluzione aperta e standard che funziona su diverse schede grafiche e può essere riutilizzata su diversi sistemi senza legarsi a un marchio o produttore specifico. Nel complesso, il relatore fornisce un'utile introduzione all'utilizzo di OpenCL per il lavoro con la GPU.
How to use OpenCL for GPU work
How to use OpenCL for GPU work
  • 2018.03.04
  • www.youtube.com
We use OpenCL to run workloads on GPU and try a simple blur filter.Git repositoryhttps://github.com/kalaspuffar/openclPlease follow me on Twitterhttp://twitt...
 

EECE.6540 Calcolo eterogeneo (Università del Massachusetts Lowell)



1. Breve introduzione all'elaborazione parallela con esempi

Questo video fornisce una breve introduzione all'elaborazione parallela con esempi. Il relatore spiega che il calcolo parallelo comporta la suddivisione di un'attività più grande in attività secondarie più piccole da eseguire in parallelo. Due strategie principali per raggiungere questo obiettivo sono divide et impera e disperdi e raccogli. Il video fornisce esempi di applicazioni naturali e artificiali che hanno intrinsecamente molto parallelismo, come i sensi umani, le auto a guida autonoma e la crescita cellulare. Il video illustra anche i vantaggi dell'elaborazione parallela e dimostra come può essere applicata all'ordinamento, alla moltiplicazione di vettori, all'elaborazione di immagini e alla ricerca del numero di occorrenze di una stringa di caratteri in un corpo di testo. Infine, il video introduce il processo di riduzione, noto anche come processo di sommatoria, per raccogliere ed elaborare i risultati ottenuti da risorse parallele.

  • 00:00:00 In questa sezione, il relatore introduce il concetto di calcolo parallelo e spiega che comporta la suddivisione di un'attività più grande in sottoattività più piccole da eseguire in parallelo. Due strategie principali per raggiungere questo obiettivo sono divide et impera e disperdi e raccogli. L'oratore fornisce esempi di applicazioni naturali e artificiali che hanno intrinsecamente molto parallelismo, come i sensi umani, le auto a guida autonoma e la crescita cellulare. Inoltre, il relatore fornisce un esempio di un problema di selezione e spiega come può essere affrontato utilizzando la strategia del divide et impera.

  • 00:05:00 In questa sezione, il relatore discute due esempi di elaborazione parallela, iniziando con l'ordinamento usando il merge sort come esempio. I lunghi elenchi non ordinati di numeri interi sono suddivisi in sottoproblemi più piccoli di due numeri interi per gruppo e quattro unità di calcolo mappano e confrontano i sottoproblemi per ottenere la sequenza finale ordinata di numeri interi. Il secondo esempio discusso è la moltiplicazione vettoriale, che è intrinsecamente dati paralleli poiché ogni operazione di moltiplicazione è indipendente dalle altre. Questo problema ha una bassa intensità aritmetica, il che lo rende semplice e veloce da eseguire. Il relatore accenna anche brevemente al concetto di intensità aritmetica per evidenziare il compromesso tra calcolo e accesso alla memoria in diversi tipi di problemi di elaborazione.

  • 00:10:00 In questa sezione, il relatore discute i vantaggi dell'elaborazione parallela e come consente l'utilizzo efficiente delle risorse di elaborazione. Spiega che con l'elaborazione parallela è possibile eseguire più calcoli contemporaneamente, senza la necessità di caricare e scaricare costantemente i dati. Viene introdotto il concetto di task parallelism, in cui più unità di calcolo lavorano in modo indipendente su dati diversi. L'esempio dell'elaborazione delle immagini viene utilizzato per illustrare come i dati possono essere passati attraverso una pipeline di più unità funzionali per massimizzare il calcolo. Implementando l'elaborazione parallela, le unità di calcolo possono lavorare simultaneamente, riducendo i tempi di attesa e aumentando la velocità di calcolo.

  • 00:15:00 In questa sezione, il concetto di elaborazione parallela viene ulteriormente spiegato utilizzando un esempio di ricerca del numero di occorrenze di una stringa di caratteri in un corpo di testo. Il problema può essere suddiviso in un confronto di potenziali corrispondenze che possono essere eseguite tramite il confronto di singole parole, che possono essere parallelizzate. Il confronto può anche essere fatto in modo ancora più granulare confrontando ogni lettera in parallelo. Il set di dati è suddiviso in unità più piccole per eseguire la stessa operazione in parallelo, rendendo il compito di confronto altamente parallelo.

  • 00:20:00 In questa sezione, apprendiamo la seconda fase dell'elaborazione parallela, ovvero il processo di riduzione, noto anche come processo di sommatoria. Qui, la fase di raccolta raccoglie i risultati del confronto dai singoli concorrenti e li raccoglie per la post-elaborazione. Il risultato finale è prodotto raccogliendo risultati intermedi da risorse parallele e sommandoli. Se l'output delle unità di confronto mostra una corrispondenza, il numero finale ottenuto dopo aver sommato tutti questi output indica quante volte si è verificata una parola nel testo originale.
Brief Introduction to Parallel Processing with Examples
Brief Introduction to Parallel Processing with Examples
  • 2020.05.21
  • www.youtube.com
This video starts the series on Heterogeneous Computing. In this video we introduce the concept of parallel processing with some examples.If you are interest...
 

2. Concorrenza, parallelismo, scomposizione di dati e attività



2. Concorrenza, parallelismo, scomposizione di dati e task

Il video approfondisce i concetti di concorrenza e parallelismo, nonché l'uso di attività e scomposizioni di dati e le tecniche per la scomposizione dei dati per il parallelismo e la concorrenza. La legge di Amdahl viene esplorata come mezzo per calcolare la velocità teorica durante l'esecuzione di attività su più processori. L'importanza dei grafici delle dipendenze tra attività viene evidenziata nell'identificazione delle dipendenze tra attività quando si suddivide un problema in attività secondarie. I metodi per la scomposizione dei dati, come i dati di input e il partizionamento dei vettori di riga, sono indicati come utili per l'esecuzione del calcolo. Le operazioni atomiche e la sincronizzazione sono descritte come vitali per generare il risultato corretto dopo che tutte le attività secondarie sono state completate.

  • 00:00:00 In questa sezione, il video introduce i concetti di concorrenza e parallelismo. La concorrenza si verifica quando due o più attività si svolgono contemporaneamente, che possono essere su processori diversi o anche su un singolo processore che utilizza tecniche di time-sharing. Il parallelismo, d'altra parte, significa strettamente che due attività vengono eseguite simultaneamente su diverse unità di esecuzione hardware, come CPU o FPGA. Il video discute anche della legge di Amdahl, che viene utilizzata per calcolare l'accelerazione teorica durante l'esecuzione di attività su più processori. Nonostante alcune attività debbano rimanere in serie, le attività che possono essere riprogettate per essere eseguite in parallelo possono essere eseguite utilizzando unità di elaborazione, come GPU, FPGA o processori multicore.

  • 00:05:00 In questa sezione, il relatore discute il concetto di calcolo parallelo e come è stato implementato nelle architetture CPU, in particolare nei processori Pentium di Intel. Spiegano che nell'architettura del processore tradizionale, il parallelismo a livello di istruzione viene spesso utilizzato per eseguire simultaneamente istruzioni indipendenti, con conseguente miglioramento delle prestazioni. Tuttavia, nella loro classe, si concentrano sul parallelismo di attività e dati e su come questi parallelismi di livello superiore possono essere sfruttati utilizzando algoritmi e thread software. Introducono il concetto di scomposizione delle attività, che implica la suddivisione di un algoritmo in singole attività, e la scomposizione dei dati, che comporta la divisione di un set di dati in blocchi discreti su cui è possibile operare in parallelo.

  • 00:10:00 In questa sezione, il video discute il concetto di grafici di dipendenza delle attività e come sono utili per descrivere le relazioni tra le attività durante la scomposizione di un problema in attività secondarie. Se le attività non hanno dipendenze, possono essere eseguite in parallelo, il che consente un'elaborazione più efficiente. Il video introduce anche il concetto di scomposizione dei dati, che prevede la divisione dei dati in diverse attività per il calcolo. Gli esempi di convoluzione dell'immagine e moltiplicazione di matrici dimostrano come i dati di output possono essere utilizzati per determinare come i dati possono essere scomposti in diversi gruppi o partizioni.

  • 00:15:00 In questa sezione, il relatore discute diverse tecniche per la scomposizione dei dati per il parallelismo e la concorrenza. La prima tecnica prevede il partizionamento dei dati in vettori di riga nella matrice originale per la mappatura uno a uno o molti a uno. La seconda tecnica prevede la scomposizione dei dati di input, che ha un dato di input che corrisponde a più dati di output. Esempi di ciò includono gli istogrammi di tar gram e la ricerca di sottostringhe. Per calcolare il risultato finale da queste parti di dati intermedie, possono essere necessarie operazioni di sincronizzazione e atomiche per garantire che tutte le attività secondarie siano completate e venga generato il risultato corretto.
Concurrency, Parallelism, Data and Task Decompositions
Concurrency, Parallelism, Data and Task Decompositions
  • 2020.05.21
  • www.youtube.com
This video compares concurrency with parallelism, and discusses decomposition methods to parallelize a task.
 

3. Calcolo parallelo: software e hardware



3. Calcolo parallelo: software e hardware

Il video discute diversi approcci per raggiungere alti livelli di parallelismo nell'informatica. Il relatore descrive le tecniche hardware e software utilizzate per eseguire il calcolo parallelo, inclusi il parallelismo a livello di istruzioni (ILP), i thread software, le CPU multi-core, i processori SIMD e SPMD. Il video spiega anche l'importanza della densità del parallelismo e il concetto di unità di calcolo/elaborazione, che consentono un calcolo parallelo efficiente. Inoltre, il relatore discute le sfide della creazione di operazioni atomiche per scopi di sincronizzazione e la necessità di ristrutturare i problemi per un'esecuzione efficiente sulle GPU.

  • 00:00:00 In questa sezione, il relatore discute diversi approcci per raggiungere alti livelli di parallelismo. Durante i primi giorni della progettazione del processore, le persone si affidavano al parallelismo a livello di istruzione (ILP) e ai thread software per ottenere il parallelismo. Tuttavia, questi progetti non vengono eseguiti automaticamente e il programmatore deve essere esperto nella progettazione di queste applicazioni software. In termini di hardware, sono disponibili diversi tipi di processori per attività di elaborazione parallela. Le CPU multi-core sono progettate per il parallelismo delle attività, mentre i processori SIMD sono progettati per sfruttare il parallelismo dei dati. Le GPU sono le migliori per le attività di parallelismo dei dati perché possono eseguire più dati contemporaneamente su centinaia o addirittura migliaia di core.

  • 00:05:00 In questa sezione, il relatore discute i concetti di SIMD e SPMD, che sono comunemente usati nel calcolo parallelo. SIMD sta per Single Instruction Multiple Data, in cui ogni core può eseguire operazioni su dati diversi contemporaneamente. D'altra parte, SPMD sta per Single Program Multiple Data, in cui più istanze dello stesso programma lavorano indipendentemente su diverse porzioni di dati. Il loop strip mining è una tecnica popolare per suddividere le attività parallele di dati tra processori indipendenti, che possono utilizzare l'unità vettoriale per eseguire iterazioni contemporaneamente. Il relatore fornisce un esempio di addizione vettoriale utilizzando SPMD con loop trip mining, in cui ogni programma viene eseguito su diverse parti di dati.

  • 00:10:00 In questa sezione, il relatore spiega come diversi processori possono lavorare su diverse parti dei dati nel calcolo parallelo, utilizzando l'esempio dell'esecuzione di ciascun blocco di dati come un thread indipendente. Il costo della creazione di thread per le GPU è elevato, quindi il calcolo previsto su ciascun processore dovrebbe essere maggiore, noto come densità di parallelismo. Per gli FPGA, l'overhead della creazione di thread è molto basso, quindi può esserci un gran numero di istanze di esecuzione SGMD. SIMD (Single Instruction Multiple Data) consente l'esecuzione simultanea di un'istruzione su più dati, con molte unità logiche aritmetiche (ALU) che eseguono l'istruzione insieme. Gli algoritmi paralleli possono ridurre la quantità di flusso di controllo e altro hardware a favore delle unità ALU.

  • 00:15:00 In questa sezione, il relatore spiega il concetto di unità di calcolo/elaborazione utilizzate all'interno di un chip per il calcolo. Possono accettare input di dati ed eseguire operazioni contemporaneamente, consentendo un efficiente calcolo parallelo. L'architettura è basata su SMID (Single Instruction Multiple Data) ed è ampiamente utilizzata nell'hardware GPU. Il relatore sottolinea l'importanza delle operazioni atomiche ai fini della sincronizzazione, ma mette in guardia sull'elevato costo generale di queste operazioni. I problemi che vengono scomposti utilizzando il partizionamento dei dati di input dovranno probabilmente essere ristrutturati per un'esecuzione efficiente su una GPU.
Parallel Computing: Software and Hardware
Parallel Computing: Software and Hardware
  • 2020.05.21
  • www.youtube.com
This video introduces the general characteristics of parallel computing, the associated software and hardware methods.
 

4. Due documenti importanti sui processori eterogenei



4. Due documenti importanti sui processori eterogenei

Il video copre vari documenti relativi all'elaborazione eterogenea, comprese le tendenze nella progettazione dei processori e l'efficienza energetica, i vantaggi dell'utilizzo di hardware personalizzato e acceleratori specializzati, l'importanza di bilanciare core grandi e piccoli e le sfide del movimento dei dati e della comunicazione efficiente tra i core. I documenti discutono anche della necessità di comprendere la pianificazione e la partizione del carico di lavoro quando si lavora con processori eterogenei e l'uso di linguaggi di programmazione e framework come OpenCL, CUDA e OpenMP. Nel complesso, i documenti evidenziano i potenziali vantaggi dell'utilizzo di più core e acceleratori per massimizzare le prestazioni e l'efficienza energetica in ambienti informatici eterogenei.

  • 00:00:00 In questa sezione, il relatore discute due importanti documenti relativi al calcolo eterogeneo che sono stati pubblicati nell'ultimo decennio. Il primo documento parla della tendenza di passare da un singolo core del processore a più core e dell'utilizzo efficiente dei transistor unship per ottenere maggiori prestazioni. Il secondo documento è un documento di indagine che parla di come architetti, programmatori e ricercatori di computer si stanno muovendo verso un approccio più cooperativo nell'utilizzo di CPU e GPU insieme per massimizzare sia le prestazioni che l'utilizzo. Il relatore parla anche della tendenza a passare da prestazioni single-core a prestazioni molecolari o prestazioni in termini di throughput utilizzando core e acceleratori eterogenei. La trascrizione include anche un grafico che mostra l'aumento del numero di transistor su un singolo chip dal 1971 al 2009 e mette in evidenza i principali vantaggi dell'utilizzo del calcolo eterogeneo.

  • 00:05:00 In questa sezione, il video discute il ridimensionamento dei transistor e come può consentire più transistor su un singolo chip, portando a migliori prestazioni ed efficienza energetica. Il video presenta quindi un diagramma che mostra le diverse tecniche utilizzate per progettare i microprocessori, come l'aggiunta di più core o l'implementazione dell'esecuzione speculativa. Sebbene non vi sia un aumento significativo delle prestazioni ogni anno, l'efficienza energetica è migliorata di quasi cinque volte, consentendo l'esecuzione di più attività con un rendimento più elevato. Il video introduce anche la regola di Pollock, che è una semplice osservazione sulle prestazioni dei processori.

  • 00:10:00 In questa sezione, l'oratore discute l'aumento delle prestazioni dei processori all'aumentare dell'area o del numero di transistor. La relazione tra questi fattori è approssimativamente la radice quadrata del numero di transistor. D'altra parte, la densità della DRAM aumenta quasi del doppio ogni due anni, ma le prestazioni in termini di velocità di lettura/scrittura non tengono il passo. Il budget energetico totale è piatto, quindi anche la riduzione delle dimensioni dei transistor e l'aumento del numero di transistor non migliorerebbero significativamente le prestazioni. La potenza di dispersione diventa predominante man mano che le dimensioni del transistor diminuiscono, il che significa che fare affidamento solo sull'aumento della frequenza, sulla riduzione della tensione di alimentazione e sulla capacità delle connessioni e dei cavi non può raggiungere gli obiettivi prestazionali previsti, come terabit o più operazioni.

  • 00:15:00 In questa sezione, il relatore discute la progettazione di più core in processori eterogenei, sottolineando che potrebbe non essere vantaggioso avere core grandi e uniformi. Invece, la personalizzazione dell'hardware con acceleratori fissi o programmabili e la combinazione della logica con i core può portare a un migliore utilizzo dei core. L'oratore presenta un esempio in cui un progetto con 30 core più piccoli (5 milioni di transistor ciascuno) supera un progetto con sei core più grandi (25 milioni di transistor ciascuno) utilizzando lo stesso numero totale di transistor (150 milioni). Il compromesso tra throughput e prestazioni single-core può essere ottimizzato anche mantenendo un equilibrio tra core grandi e piccoli.

  • 00:20:00 In questa sezione, il relatore discute l'uso di processori eterogenei per hardware personalizzato e i vantaggi dell'utilizzo di core più piccoli e personalizzati invece di core CPU generici. Utilizzando una logica specializzata per costruire unità funzionali come moltiplicatori o unità FFT, i progettisti possono ottenere una maggiore efficienza energetica rispetto ai progetti generici. Inoltre, il documento parla delle sfide del movimento dei dati e dell'importanza di disporre di gerarchie di memoria e interconnessioni efficienti per una comunicazione efficiente tra i core. Il documento propone una ripartizione del 10% per acceleratori e core specializzati, piuttosto che il tradizionale 90% per la creazione di processori fuori servizio superscalari per ottenere migliori prestazioni a thread singolo.

  • 00:25:00 In questa sezione, il video illustra due articoli sui processori eterogenei. Il primo documento parla delle sfide affrontate nel trasferimento dei dati e nell'efficienza energetica. Una tendenza di progettazione è il ridimensionamento della tensione che consente di eseguire diversi core a velocità diverse, il che può ridurre notevolmente il consumo energetico a seconda del carico di lavoro e della pianificazione delle attività. Il secondo documento discute la tendenza verso il parallelismo su larga scala e nuclei eterogenei con dimensioni variabili e frequenza e tensione flessibili. Inoltre, si sta spostando verso l'utilizzo di diversi acceleratori hardware integrati nel chip e concentrandosi su un posizionamento efficiente dei dati per ridurre il movimento di dati non necessario. Il documento riconosce i punti di forza unici delle diverse architetture di CPU e la progettazione di algoritmi per soddisfare le future funzionalità della CPU.

  • 00:30:00 In questa sezione, il relatore discute l'importanza di comprendere le tecniche di pianificazione e la partizione del carico di lavoro quando si lavora con processori eterogenei come CPU FPGA. La pianificazione comporta la decisione di quando un'attività secondaria deve essere eseguita su un processore specifico, mentre la partizione del carico di lavoro si occupa del partizionamento dei dati e delle attività. Il relatore menziona anche vari linguaggi di programmazione e framework come OpenCL, CUDA e OpenMP per diversi tipi di processori.
Two Important Papers about Heterogeneous Processors
Two Important Papers about Heterogeneous Processors
  • 2020.05.21
  • www.youtube.com
This video provides an overview of two important papers on the design and programming of heterogenous processors/systems.S. Borkar and A. Chien, The Future o...
 

5. Panoramica dell'hardware informatico



5. Panoramica dell'hardware informatico

Il video fornisce una panoramica dell'hardware informatico, trattando argomenti come le architetture dei processori, le considerazioni sulla progettazione, il multithreading, la memorizzazione nella cache, la gerarchia della memoria e la progettazione della logica di controllo. Spiega inoltre come un programma sia un insieme di istruzioni che un computer segue per eseguire un'attività e i diversi tipi di programmi, inclusi software e applicazioni di sistema. Il video sottolinea l'importanza dei componenti hardware di un computer, come la CPU e la memoria, che lavorano insieme per eseguire programmi ed eseguire attività.

  • 00:00:00 In questa sezione, il relatore introduce gli argomenti che saranno trattati durante la lezione, tra cui architetture e innovazioni dei processori, spazio di progettazione architettonica, architettura di CPU e GPU e FPGA come architettura emergente ad alte prestazioni. Il relatore parla anche delle origini di OpenCL e di come è stato gradualmente modellato da diversi fornitori in base ai processori che forniscono, portando a un modello paradigmatico basato su blocchi di consistenza rilassata che raggiunge l'indipendenza dalla piattaforma. Le prestazioni dei programmi OpenCL dipendono ancora dall'implementazione, dall'algoritmo e da quanto bene può essere mappato all'architettura hardware. La progettazione di processori diversi richiede molte considerazioni e compromessi, ad esempio se disporre di un processore single-core o di più processori.

  • 00:05:00 In questa sezione, il video spiega alcune delle considerazioni di progettazione relative all'hardware di elaborazione, come i core superscalari e la pianificazione delle istruzioni. Il video illustra anche il multi-threading come un modo per aumentare la quantità di lavoro utile che un processore può gestire, nonché l'importanza della memorizzazione nella cache e della gerarchia della memoria. L'eterogeneità nei processori sta diventando sempre più comune, il che include CPU con GPU, FPGA e core grandi e piccoli. Infine, la progettazione della logica di controllo è cruciale, consentendo il riordino delle istruzioni per sfruttare il parallelismo a livello di istruzione in flussi di controllo complessi.

  • 00:10:00 In questa sezione, il video spiega che un programma è un insieme di istruzioni che un computer segue per eseguire un compito specifico. Il programma è costituito da codice scritto in un linguaggio di programmazione, che viene poi compilato o interpretato in un linguaggio macchina comprensibile al computer. Il video prosegue descrivendo i diversi tipi di programmi, inclusi software di sistema come sistemi operativi e driver di dispositivo, nonché applicazioni come elaboratori di testi e giochi. I componenti hardware del computer, come la CPU e la memoria, lavorano insieme per eseguire questi programmi ed eseguire le attività desiderate.
Overview of Computing Hardware
Overview of Computing Hardware
  • 2020.05.22
  • www.youtube.com
This video introduces hardware tradeoffs and conventional CPU architecture.
Motivazione: