OpenCL nel Trading - pagina 8

 

36. Eseguire le istruzioni su CPU Datapath



36. Eseguire le istruzioni su CPU Datapath

Il video spiega come vengono eseguiti i calcoli su un percorso dati della CPU utilizzando un esempio di esecuzione di operazioni di accumulo. Il percorso dati include unità di caricamento e archiviazione per caricare e archiviare dati in memoria utilizzando indirizzi e unità funzionali come ALU per eseguire operazioni. Il video illustra il processo passo dopo passo, incluso il caricamento dei dati dalla memoria, l'esecuzione delle operazioni e la memorizzazione dei risultati nella memoria. Il relatore spiega anche come FPGA può essere utilizzato per implementare la stessa funzione, sfruttando al massimo le risorse disponibili nell'hardware.

  • 00:00:00 In questa sezione, il video spiega come i calcoli vengono mappati su un PGA utilizzando un esempio di esecuzione di operazioni di accumulo. Innanzitutto, il codice di alto livello viene convertito in linguaggio assembly utilizzando le istruzioni della CPU e i valori intermedi vengono memorizzati nei registri. La CPU è una CPU pipeline con unità funzionali nel percorso dati, comprese le unità di caricamento e archiviazione per caricare e archiviare i dati nella memoria utilizzando gli indirizzi. Il percorso dei dati è progettato per essere abbastanza generale da eseguire tutti i tipi di istruzioni entro una larghezza di dati e un numero di operazioni fissi e un valore costante può essere caricato in un registro tramite l'ALU. Il video fornisce anche un esempio di come vengono eseguite sei istruzioni nella CPU, illustrando il processo passo dopo passo.

  • 00:05:00 In questa sezione, l'oratore esamina diverse istruzioni e spiega come vengono eseguite in un percorso dati della CPU, incluso il caricamento dei dati dalla memoria nei file di registro, utilizzando diverse unità funzionali nel percorso dati per eseguire operazioni come la moltiplicazione e l'addizione e la memorizzazione dei risultati nella memoria. Il relatore prosegue poi spiegando come l'FPGA può essere utilizzato per implementare la stessa funzione del kernel srotolando l'hardware della CPU e utilizzando le esatte risorse richieste per la funzione, sfruttando al massimo le risorse disponibili nell'hardware dell'FPGA.
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
 

37. Percorso dati personalizzato su FPGA


37. Percorso dati personalizzato su FPGA

Il video spiega l'utilizzo di un FPGA per implementare la funzione del kernel per migliorare le prestazioni srotolando l'hardware della CPU e personalizzando il percorso dati sull'FPGA. Rimuovendo le unità inutilizzate, caricando costanti e cavi e riprogrammando alcune operazioni, le operazioni di caricamento possono essere eseguite contemporaneamente per aumentare le prestazioni. La progettazione di datapath personalizzati può migliorare il throughput, ridurre la latenza e il consumo energetico selezionando le operazioni e i dati necessari per una particolare funzione. Il video mostra un esempio di aggiunta basata sulla domanda su due vettori, con il risultato archiviato nella memoria utilizzando i registri tra le fasi per consentire una pipeline efficiente e l'avvio di otto elementi di lavoro per aggiunte consecutive.

  • 00:00:00 In questa sezione viene spiegato il concetto di utilizzo di FPGA per implementare la funzione del kernel con migliori prestazioni e utilizzo delle risorse. L'idea è di srotolare l'hardware della CPU e utilizzare le risorse FPGA per creare il progetto che implementa la funzione richiesta utilizzando le risorse che non vengono utilizzate in ogni fase dell'esecuzione. Rimuovendo alcune unità inutilizzate, costanti di caricamento e cablaggi e riprogrammando alcune operazioni, le operazioni di caricamento possono essere eseguite contemporaneamente aumentando le prestazioni. La personalizzazione del percorso dati sull'FPGA può ottenere lo stesso risultato utilizzando risorse dedicate specializzate.

  • 00:05:00 In questa sezione, il relatore discute la progettazione di un percorso dati personalizzato su FPGA selezionando le operazioni e i dati necessari per una particolare funzione, dimensione della memoria e configurazione in modo da migliorare il throughput, ridurre la latenza e la potenza consumo, utilizzando una funzione del kernel che esegue l'addizione in base alla domanda su due vettori, con il risultato memorizzato nuovamente in memoria. Sfruttando i registri tra le fasi, il percorso dati può utilizzare una pipeline efficiente e avviare otto elementi di lavoro per aggiunte consecutive, consentendo a ciascun ciclo di elaborare thread diversi per evitare unità inattive.
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
 

38. OpenCL per FPGA e Data Parallel Kernel



38. OpenCL per FPGA e Data Parallel Kernel

Il video spiega come OpenCL consente agli ingegneri FPGA di utilizzare le risorse di ingegneria del software per espandere il numero di sviluppatori di applicazioni FPGA sfruttando le risorse di elaborazione parallela sugli FPGA. Il modello di programmazione di OpenCL consente la specifica del parallelismo utilizzando funzioni parallele di dati chiamate kernel e ogni kernel si basa su identificatori specificati da "get global ID" per eseguire calcoli paralleli su segmenti di dati indipendenti. Viene introdotto il concetto di thread e gruppi di lavoro, in cui i thread accedono a parti diverse del set di dati, partizionato in gruppi di lavoro, con solo i thread all'interno dello stesso gruppo di lavoro in grado di condividere la memoria locale. Con questo modello di programmazione, OpenCL consente un'efficiente elaborazione parallela dei dati.

  • 00:00:00 In questa sezione, il relatore introduce OpenCL e il suo significato nella progettazione di applicazioni basate su FPGA. Sebbene ci siano meno programmatori per FPGA rispetto alle CPU standard, OpenCL come linguaggio di programmazione di alto livello espande il numero di sviluppatori di applicazioni FPGA consentendo agli ingegneri FPGA di utilizzare risorse di ingegneria del software per sfruttare le risorse di elaborazione parallela su FPGA. OpenCL è uno standard di settore per l'elaborazione eterogenea e consente ai programmatori di utilizzare API C o C++ familiari per scrivere programmi per l'esecuzione di carichi di lavoro complessi con acceleratori hardware come processori multi-core, GPU e FPGA. La grande idea alla base di OpenCL è il suo modello di esecuzione che consente di specificare esplicitamente il parallelismo.

  • 00:05:00 In questa sezione viene spiegato il modello di programmazione di OpenCL per FPGA e il kernel parallelo di dati. Il video descrive la struttura di un framework OpenCL con un host e un acceleratore o dispositivo in esecuzione su domini hardware separati. L'host prepara i dispositivi ei kernel e crea i comandi necessari per essere inviati a questi dispositivi. Il codice dell'acceleratore è scritto in OpenCLC e l'host comunica con esso tramite una serie di chiamate API OpenCL, consentendo un'astrazione della comunicazione tra un processore host e i kernel eseguiti sul dispositivo. I kernel OpenCL sono funzioni parallele di dati utilizzate per definire più thread paralleli di esecuzione, ciascuno basato su identificatori specificati da "get global ID". Questi ID specificano i segmenti o le partizioni di dati su cui dovrebbe lavorare un kernel, consentendo l'esecuzione di calcoli paralleli su coppie di dati indipendenti.

  • 00:10:00 In questa sezione viene introdotto il concetto di thread e gruppi di lavoro, in cui i thread possono accedere a diverse parti del set di dati e sono suddivisi in gruppi di lavoro. Solo i thread all'interno dello stesso gruppo di lavoro possono condividere la memoria locale. Ogni thread ha un ID locale e globale e l'ID globale può essere calcolato utilizzando l'ID gruppo e la dimensione locale. Questo sistema consente un'efficiente elaborazione parallela dei dati.
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

39. Programmazione lato host OpenCL: contesto, code, oggetti di memoria, ecc.



39. Programmazione lato host OpenCL: contesto, code, oggetti di memoria, ecc.

Questa esercitazione video esplora vari concetti di programmazione lato host in OpenCL, con particolare attenzione al contesto, alle code e agli oggetti di memoria. Copre le due nuove API in OpenCL, clCreateKernelsInProgram e clSetKernelArg, che vengono utilizzate per creare oggetti del kernel e passare argomenti alle funzioni del kernel. L'esercitazione illustra anche l'uso dell'API clCreateImage per creare oggetti immagine e il modo in cui i pixel dell'immagine vengono archiviati in memoria utilizzando l'ordine e il tipo di canale. Spiega come OpenCL gestisce le immagini 2D e 3D, come gli sviluppatori possono raccogliere informazioni sugli oggetti di memoria utilizzando API come clGetMemoryObjectInfo e come eseguire operazioni sugli oggetti di memoria come leggere e scrivere buffer rec, mappare oggetti di memoria e copiare dati tra oggetti di memoria.

  • 00:00:00 In questa sezione vengono rivisitati i concetti di programmazione lato host di OpenCL. La sezione si concentra su contesto, code e oggetti di memoria. È possibile creare più contesti su una piattaforma fisica anche se composta da dispositivi di fornitori diversi. Gli oggetti di memoria nella memoria globale possono essere condivisi da più code, ma la sincronizzazione appropriata deve essere eseguita dall'applicazione sul lato host. È possibile avere più contesti e più code di comando all'interno di un contesto. Le diverse piattaforme OpenCL fornite dai fornitori non sono necessariamente compatibili e quindi non possono essere inserite nello stesso contesto.

  • 00:05:00 In questa sezione, il video discute due nuove API in OpenCL. La prima API consente la creazione di kernel per ogni funzione in un programma OpenCL utilizzando la funzione clCreateKernelsInProgram. Questo crea un array di oggetti del kernel che possono essere usati per verificare i nomi delle funzioni del kernel e altre informazioni correlate usando la funzione clGetKernelInfo. La seconda API, clSetKernelArg, viene utilizzata per creare un'istanza degli argomenti del kernel e accetta l'oggetto del kernel e l'indice dell'argomento come argomenti. Il video prosegue spiegando come utilizzare queste API e come rilasciare gli oggetti del kernel dopo l'uso.

  • 00:10:00 In questa sezione impareremo come l'API può passare i valori degli argomenti alle funzioni del kernel. Possiamo passare un tipo di dati primitivo come puntatore alla funzione kernel, oppure possiamo passare un puntatore a un oggetto memoria oa un oggetto campione contenente dati complessi. Gli oggetti immagine sono un tipo speciale di oggetto memoria utilizzato per contenere i dati dei pixel. Possiamo creare oggetti immagine utilizzando gli stessi flag di configurazione degli oggetti buffer e con formati definiti da un elenco di formati immagine. L'API clCreateImage viene utilizzata per creare oggetti immagine e i suoi parametri sono simili a quelli utilizzati per la creazione di oggetti buffer. Il terzo argomento identifica le proprietà di formato dei dati dell'immagine da allocare, mentre il quarto argomento descrive il tipo e le dimensioni dell'immagine.

  • 00:15:00 In questa sezione viene introdotto l'uso dell'API clCreateImage() per identificare il modo in cui i pixel dell'immagine vengono archiviati in memoria. Il formato dell'oggetto immagine è progettato per archiviare un'immagine in memoria ed è costituito da due fattori: ordine del canale e tipo di canale. L'ordine dei canali identifica il modo in cui le informazioni sui canali vengono archiviate per ciascun pixel ed è un tipo enumerato che contiene i colori di base e le informazioni alfa. Al contrario, il tipo di canale specifica come i canali dell'immagine sono codificati in binario e utilizza valori diversi per determinare la rappresentazione delle informazioni sul colore. I livelli di bit sono essenziali per specificare quanti bit utilizzare per rappresentare il valore del colore nel canale. Inoltre, viene dimostrato il layout di memoria dei formati di immagine, in modo tale che per ogni pixel, la sequenza RGBA sia memorizzata in memoria, utilizzando un byte per codificare le informazioni sul colore per ciascun canale di colore.

  • 00:20:00 In questa sezione, il video illustra come OpenCL gestisce le immagini 2D e 3D, che possono essere costituite da più sezioni impilate insieme in un'altra dimensione. Il descrittore di immagine CL viene utilizzato per descrivere come sono disposti gli oggetti immagine e include parametri come la larghezza, l'altezza e la profondità dell'immagine in pixel, nonché il passo della linea di scansione in byte. Inoltre, l'API clCreateImage() viene utilizzata per identificare il numero di byte necessari per descrivere l'immagine, che potrebbe richiedere regolazioni per il riempimento e l'allineamento all'interno delle righe e delle sezioni.

  • 00:25:00 In questa sezione, il relatore spiega come raccogliere informazioni su oggetti immagine e memoria in OpenCL utilizzando API come clGetImageInfo e clGetMemoryObjectInfo. Queste API consentono agli sviluppatori di ottenere informazioni su cose come il formato dell'immagine, la dimensione dei pixel, la larghezza dei pixel, l'altezza dei pixel, la profondità e altre proprietà degli oggetti di memoria. Inoltre, possono utilizzare EnqueueReadBuffer/EnqueueWriteBuffer per leggere o scrivere dati negli oggetti buffer e EnqueueReadImage/EnqueueWriteImage per accedere ai dati dell'oggetto immagine. Anche l'uso di origine, regione, passo riga e passo sezione è specifico per gli oggetti immagine, che sono organizzati in termini di righe, fette e immagini. Gli sviluppatori possono utilizzare queste API per specificare la posizione esatta di una regione a cui desiderano accedere o eseguire un'operazione di copia e per generare eventi utilizzando gli argomenti dell'evento CL.

  • 00:30:00 In questa sezione, il video spiega due operazioni sugli oggetti di memoria in OpenCL: lettura e scrittura del buffer rec e mappatura degli oggetti di memoria. Con il buffer di lettura e scrittura rec, l'utente specifica l'origine e le informazioni sulle dimensioni, consentendo il recupero o la scrittura dei dati in punti specifici. La mappatura degli oggetti di memoria consente la mappatura di un oggetto di memoria su un dispositivo a un'area di memoria sull'host. Una volta mappati, gli oggetti di memoria possono essere letti e modificati sul lato host utilizzando i puntatori ottenuti tramite le API di mappatura della memoria. Il video esamina anche un elenco di operazioni sugli oggetti di memoria disponibili in OpenCL per copiare dati tra oggetti di memoria, semplificare la programmazione sul lato host e migliorare le prestazioni delle operazioni di lettura e scrittura.

  • 00:35:00 In questa sezione, il relatore discute i vari oggetti di memoria in OpenCL e come possono essere utilizzati per copiare i dati da una posizione all'altra. Le funzioni di copia includono copia buffer, copia immagine, copia buffer rettangolare e così via. Il relatore mostra un sistema host-device e dimostra come copiare i dati da un buffer all'altro utilizzando la funzione CL in queue copy buffer. Spiegano come mappare il buffer in uno spazio di memoria utilizzando cl enqueu map buffer e quindi utilizzare la copia di memoria per copiare la regione mappata su se stessa.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

40. Flusso di progettazione HDL per FPGA



40. Flusso di progettazione HDL per FPGA

Questo video spiega il processo di sviluppo di Field Programmable Gate Array (FPGA) utilizzando il software di progettazione Quartus.

Vengono spiegati la metodologia di progettazione e gli strumenti software per lo sviluppo di FPGA. Il tipico flusso di progettazione logica programmabile inizia con una specifica di progettazione, passa alla codifica RTL e quindi alla simulazione funzionale RTL, che è quindi seguita dalla sintesi per tradurre il progetto in primitive specifiche del dispositivo. Gli ingegneri quindi mappano queste primitive in posizioni specifiche all'interno di un particolare FPGA e verificano le specifiche delle prestazioni attraverso l'analisi dei tempi. Infine, il progetto viene caricato in una scheda FPGA e gli strumenti di debug possono essere utilizzati per testarlo sull'hardware. Per gli FPGA Intel, il software di progettazione Quartus viene utilizzato per eseguire il flusso di progettazione, iniziando con una descrizione del sistema e passando alla sintesi logica, posizione e percorso, analisi dei tempi e della potenza e programmazione del progetto negli FPGA effettivi.

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

41. Tipi di dati OpenCL e memoria del dispositivo



41. Tipi di dati OpenCL e memoria del dispositivo

Il video illustra i tipi di dati OpenCL e la memoria del dispositivo. Copre i tipi booleani, interi e in virgola mobile e spiega i tipi di dati specifici utilizzati per operare su indirizzi di memoria come int-ptr, uint-ptr e ptrdiff-t. Spiega inoltre i tipi di dati vettoriali, che sono matrici contenenti più elementi dello stesso tipo che consentono di applicare gli operatori a ogni elemento contemporaneamente e come utilizzarli. Il video fornisce vari esempi su come inizializzare e accedere agli elementi in un vettore, incluso l'uso di lettere e indici numerici, alto-basso e pari-dispari. Spiega anche l'allineamento della memoria e come usare set kernel argument e private kernel arguments.

  • 00:00:00 In questa sezione, il video fornisce una panoramica dei tipi di dati che possono essere utilizzati nella programmazione del kernel OpenCL, che include tipi booleani, interi e a virgola mobile. Tipi di dati specifici come int-ptr, uint-ptr e ptrdiff-t vengono utilizzati per operare sugli indirizzi di memoria. Il video rileva che il tipo double è supportato solo se il dispositivo di destinazione supporta l'estensione CL Cronus 14-point-64 CL Cronus FP 64. Gli sviluppatori possono controllare questa estensione prima di utilizzare il doppio tipo nei loro programmi del kernel OpenCL. Il video spiega anche come abilitare l'estensione double type e usarla in un programma del kernel.

  • 00:05:00 In questa sezione del video vengono discussi i tipi di dati OpenCL e la memoria del dispositivo. Lo standard OpenCL non impone l'ordine endian per i tipi di dati. Little-endian e big-endian sono i due tipi endian facoltativi che dipendono da come l'architettura di un computer definisce come le variabili moltiplicate verranno archiviate in memoria. Gli ordini endian di un dispositivo possono essere rilevati utilizzando il tipo di dati vettoriale CR get device info. Inoltre, i tipi di dati vettoriali sono stati introdotti come array che contengono più elementi dello stesso tipo, hanno una lunghezza fissa e consentono agli operatori di applicare su ogni elemento contemporaneamente. I vantaggi dell'utilizzo di tipi di dati vettoriali sono che è più veloce e più semplice rispetto all'utilizzo di matrici. Il video spiega come utilizzare i tipi di dati vettoriali per eseguire l'addizione in base agli elementi su più array.

  • 00:10:00 In questa sezione, apprendiamo diversi tipi di vettore che possono essere utilizzati in OpenCL, che sono molto simili ai tipi scalari. Tuttavia, i vettori richiedono un numero alla fine per indicare quanto è grande il vettore e che tipo di elementi contiene. OpenCL ha anche due tipi di dati speciali, double e half data type, che possono o meno essere supportati dal dispositivo. Per conoscere la dimensione del vettore preferita per diversi tipi, OpenCL fornisce un'API che può essere utilizzata per interrogare la larghezza del vettore preferita di un dispositivo. Sulla base di ciò, possiamo impostare le opzioni per costruire il nostro programma, come definire un vettore in virgola mobile per una dimensione preferita di 128 o definire un 8 in virgola mobile se la dimensione del vettore preferita è 256. I vettori possono essere inizializzati assegnando valori iniziali all'interno parentesi. Possiamo persino inizializzare un vettore utilizzando vettori più piccoli, ad esempio, se abbiamo due vettori di dimensione due, A e B, entrambi inizializzati con valori scalari.

  • 00:15:00 In questa sezione, il relatore spiega come inizializzare e accedere a elementi o componenti in un vettore OpenCL. Gli utenti possono inizializzare un vettore utilizzando vettori più piccoli, una combinazione di scalari e fattori più piccoli o assegnando direttamente i valori in elementi vettoriali. Vengono forniti esempi che mostrano come utilizzare l'indicizzazione dei numeri, l'indicizzazione delle lettere e l'alto-basso pari-dispari per accedere agli elementi nel vettore. Diversi esempi dimostrano come recuperare sottoinsiemi di elementi da un vettore e assegnare questi elementi ad altre variabili.

  • 00:20:00 In questa sezione, il relatore discute vari metodi per indicizzare e modificare elementi vettoriali, incluso l'uso di indici numerici, lettere (come X, Y, Z e W) per rappresentare le diverse dimensioni di un vettore e combinazioni di lettere e indici numerici. Spiegano anche come utilizzare massimo-minimo e pari-dispari per selezionare un sottoinsieme di componenti del vettore in base alla loro posizione nel vettore. Questi metodi di indicizzazione e modifica possono essere utili per lavorare con vettori di diverse lunghezze e dimensioni.

  • 00:25:00 In questa sezione, apprendiamo diversi metodi per accedere e modificare gli elementi in un vettore, come l'indicizzazione pari alto-basso, che ci consente di ottenere la metà superiore o inferiore degli elementi in un vettore, o anche -elementi indicizzati. Esploriamo anche come i vettori sono memorizzati in un dispositivo little endian, dove il byte meno significativo di un numero intero è memorizzato in un indirizzo inferiore rispetto al byte più significativo. Ciò significa che in un vettore di interi senza segno, i quattro byte di ciascun valore intero a 32 bit verranno archiviati in ordine dal byte meno significativo al più significativo, con ogni elemento completo del vettore che occupa 16 byte.

  • 00:30:00 In questa sezione, il relatore discute in che modo i tipi di dati OpenCL e la memoria del dispositivo vengono archiviati nei dispositivi little-endian rispetto ai dispositivi big-endian. Mostrano come un vettore di quattro elementi di tipo intero senza segno sia archiviato in memoria su entrambi i tipi di dispositivi, notando che l'ordine dei byte è diverso a causa del modo in cui i dispositivi little-endian e big-endian memorizzano il meno significativo e il più significativo byte. L'oratore dimostra anche una funzione del kernel chiamata "byte vettoriali" che recupera singoli byte da questa memoria usando i puntatori.

  • 00:35:00 In questa sezione viene discusso il concetto di allineamento della memoria nei tipi di dati OpenCL. Viene spiegato che la memoria in genere si allinea su strutture a 32 bit come numeri interi e virgola mobile che sono sempre archiviati in indirizzi di memoria multipli di quattro. Si noti inoltre che le strutture a 64 bit come long e double sono memorizzate in indirizzi multipli di otto e la più piccola potenza di due maggiore o uguale alla dimensione dei dati imposta l'allineamento di memoria della struttura dei dati. Inoltre, viene discusso il processo di inizializzazione degli argomenti del kernel locale e privato in OpenCL e viene spiegato che gli argomenti del kernel negli spazi locali e privati possono essere configurati utilizzando SetKernelArg, ma l'ultimo valore del parametro non può essere impostato quando lo specificatore è locale. Inoltre, si noti che gli argomenti privati del kernel devono essere semplici primitive, come numeri interi e virgola mobile.

  • 00:40:00 In questa sezione, il video illustra come utilizzare set kernel argument e private kernel arguments nel tuo programma OpenCL. Quando si usa set kernel argument, il primo argomento dovrebbe essere l'indice della dimensione intera dell'argomento, seguito da un puntatore alla variabile. Gli argomenti privati del kernel possono anche essere vettori, come un array di float quattro, che possono essere usati solo nelle funzioni del kernel e passati usando set kernel argument.
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

42. Operazioni relazionali vettoriali OpenCL



42. Operazioni relazionali vettoriali OpenCL

Il video discute la programmazione del kernel OpenCL, i suoi operatori e le funzioni integrate. L'attenzione si concentra sugli operatori relazionali e su come funzionano con valori scalari e vettoriali. Viene presentata una funzione del kernel di esempio, "op test", che esegue un'operazione AND basata sugli elementi tra una costante e un vettore privato. Il video spiega come implementare un vettore con operazioni relazionali in OpenCL confrontando elementi vettoriali specifici con uno scalare utilizzando operazioni logiche. Il vettore risultante può essere utilizzato in un ciclo while per creare un vettore di output finale che viene assegnato all'oggetto memoria di output.

  • 00:00:00 In questa sezione, il video introduce la programmazione del kernel OpenCL e discute gli operatori e le funzioni incorporate ereditate dal linguaggio da altri linguaggi di alto livello. Gli operatori presentati includono la selezione aritmetica, di confronto e logica, bit a bit e ternaria. In particolare, la sezione si concentra sugli operatori relazionali e spiega come funzionano sia con valori scalari che vettoriali. Il segmento fornisce anche una funzione del kernel di esempio chiamata "op test", che utilizza l'operatore relazionale per eseguire un'operazione AND basata sugli elementi tra un vettore costante e un vettore privato inizializzato con i valori iniziali.

  • 00:05:00 In questa sezione, il relatore spiega come un vettore con operazioni relazionali può essere implementato in OpenCL. Utilizzando l'esempio del confronto di elementi specifici di un vettore con un valore scalare mediante operazioni logiche, il relatore mostra come è possibile creare un vettore risultante con valori veri e falsi rappresentati rispettivamente come -1 e 0. Il vettore risultante può quindi essere utilizzato in un ciclo while in cui i singoli elementi subiscono ulteriori operazioni logiche per creare un vettore di output finale, che viene assegnato all'oggetto memoria di output.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. Funzioni integrate di OpenCL: vloadn, select



43. Funzioni integrate di OpenCL: vloadn, select

Il video illustra due funzioni integrate chiave di OpenCL: vloadn e select. Vloadn consente di inizializzare batch con valori da un array scalare e accetta due argomenti: offset e un puntatore all'array scalare. Seleziona, d'altra parte, ti consente di selezionare determinati elementi da due batch e usarli per creare un nuovo vettore. Può contenere valori interi con segno o senza segno e conta solo il bit più significativo negli elementi della maschera. Il tutorial dimostra come queste funzioni funzionano nella pratica.

  • 00:00:00 In questa sezione impareremo a conoscere Vloadn, una funzione incorporata utilizzata per inizializzare i batch utilizzando i valori di un array scalare. Vloadn accetta due argomenti: offset e un puntatore all'array scalare. L'offset determina quali elementi dell'array vengono posizionati nel batch, dato in termini di dimensione del vettore. Inoltre, impariamo a conoscere la funzione Select, che può essere utilizzata per selezionare determinati elementi da due batch e utilizzarli per creare un nuovo vettore. Può contenere valori interi con segno o senza segno e conta solo il bit più significativo negli elementi della maschera. I bit più significativi di un componente maschera in Select determinano il batch da utilizzare per l'elemento corrispondente nel vettore di output.

  • 00:05:00 In questa sezione, il tutorial discute due funzioni integrate di OpenCL: vloadn e select. Vloadn viene utilizzato per caricare elementi da un vettore specificato in un nuovo vettore e select viene utilizzato per selezionare elementi dal primo o dal secondo input in base a una maschera. Il tutorial offre esempi di come queste funzioni funzionano nella pratica, incluso il modo in cui vloadn seleziona i valori dal primo vettore di input in base alla maschera e come funziona select per scegliere i bit dal primo o dal secondo vettore di input.
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

44. Introduzione a DPC++



44. Introduzione a DPC++

Questo video introduce DPC++, un linguaggio di alto livello per la programmazione parallela dei dati che scarica il calcolo complesso su acceleratori come FPGA e GPU e fa parte del framework OneAPI. DPC++ mira ad accelerare i carichi di lavoro paralleli di dati utilizzando il C++ moderno e l'ottimizzazione delle prestazioni orientata all'architettura. Il docente fornisce un semplice esempio di DPC++ che dimostra come dichiarare le variabili di gestione dei dati ed eseguire una funzione del kernel su un dispositivo utilizzando un comando e una funzione di accesso. Il video spiega anche come la funzione lambda può prendere argomenti e riferimenti dalle variabili dichiarate al di fuori di essa.

  • 00:00:00 In questa sezione, il docente introduce la programmazione DPC++, un linguaggio di alto livello per la programmazione parallela dei dati che scarica il calcolo complesso su acceleratori come FPGA e GPU. DPC++ utilizza il C++ moderno e mira ad accelerare i carichi di lavoro paralleli di dati analizzando algoritmi, scomponendo attività o dati e utilizzando l'ottimizzazione delle prestazioni orientata all'architettura. DPC++ fa parte del framework OneAPI e il suo obiettivo è consentire la programmazione con un unico linguaggio che può essere eseguito su qualsiasi CPU, FPGA o GPU. Il docente fornisce quindi un semplice esempio DPC++ che dichiara variabili, un buffer e una coda di dispositivi per la gestione dei dati.

  • 00:05:00 In questa sezione, il relatore introduce un esempio di un programma DPC++ che crea un comando e una funzione lambda per definire una funzione del kernel che verrà eseguita sul dispositivo. Il programma utilizza una funzione di accesso per associare un buffer al comando e un'altra funzione di accesso per accedere al risultato. Infine, il programma include un ciclo for per utilizzare la funzione di accesso result per accedere al contenuto nel buffer e stamparlo. La funzione lambda può avere diversi modi per accettare argomenti nella funzione, come passare riferimenti alle variabili dichiarate al di fuori della funzione.
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

45. Come pensare in parallelo?



45. Come pensare in parallelo?

Il video insegna la programmazione parallela usando la moltiplicazione di matrici come esempio. Evidenzia il parallelismo in questo calcolo, in cui più righe e colonne possono essere calcolate in modo indipendente. L'implementazione del calcolo di un singolo elemento nella matrice C viene mostrata utilizzando una funzione del kernel che consente il calcolo parallelo. L'uso di funzioni di accesso, intervallo e funzioni parallele del kernel è spiegato in dettaglio. Vengono discussi i passaggi coinvolti nel passaggio del valore dell'intervallo nella funzione del kernel. Viene anche dimostrata una demo della moltiplicazione di matrici utilizzando Intel FPGA dev cloud.

  • 00:00:00 In questa sezione, il video introduce la moltiplicazione di matrici come esempio comunemente usato per insegnare la programmazione parallela. Il video spiega che la moltiplicazione di matrici comporta l'acquisizione di righe da una matrice e colonne da un'altra per eseguire la moltiplicazione e l'accumulazione in base agli elementi per produrre una matrice risultante. Il video spiega che c'è molto parallelismo in questo calcolo, poiché diverse righe e colonne possono essere calcolate indipendentemente l'una dall'altra. Viene mostrata una semplice implementazione della moltiplicazione di matrici utilizzando il normale linguaggio C o C++ con cicli for nidificati che eseguono la moltiplicazione e l'accumulazione in base agli elementi.

  • 00:05:00 In questa sezione, apprendiamo l'implementazione del calcolo di un singolo elemento nella matrice C, implementata come una funzione del kernel che consente il calcolo parallelo. Il punto chiave è che per ogni singola riga e colonna, il calcolo è lo stesso, con l'unica differenza che sono i numeri di riga e colonna. Gli accessori aiutano ad accedere ai buffer nei kernel, con accesso in sola lettura per le matrici A e B e accesso in scrittura per la matrice C. L'intervallo viene utilizzato come astrazione per dichiarare più dimensioni e H.parallel4 aiuta a definire una funzione kernel parallela . La funzione kernel include una funzione lambda, con l'argomento che è la variabile per scorrere tutti i valori in entrambe le dimensioni.

  • 00:10:00 In questa sezione, l'oratore spiega i passaggi coinvolti nel passaggio del valore dell'intervallo nella funzione kernel che è una funzione laminare. Discutono le due dimensioni della variabile e come identifica ogni variabile. L'oratore spiega come funziona la funzione lambda e mostra come la dimensione del problema è definita dal numero di righe e colonne su cui eseguiamo le funzioni del kernel. Usano l'esempio della moltiplicazione di matrici, la tradizionale notazione C plus plus e la moltiplicazione e l'accumulazione in base agli elementi eseguite nel ciclo for più interno. Infine, mostrano una rapida demo della moltiplicazione di matrici utilizzando Intel FPGA dev cloud.
How to Think In Parallel ?
How to Think In Parallel ?
  • 2021.04.07
  • www.youtube.com
This video use matrix multiplication example to introduce how to think in parallel with design data parallel algorithms.
Motivazione: