
così ho intenzione di parlare di liquido
progetto di metallo questo è un progetto al
da una squadra di noi che abbiamo qui
siamo al TJ Watson Research Center
in Yorktown Heights New York questo è il
IBM Research Lab principale quindi inizierò
dicendoti qualcosa che già
sapere quale è nell’ultimo decennio o in
gli ultimi otto o nove anni fa
il ridimensionamento della frequenza è arrivato praticamente a
stop le velocità di clock sui chip del computer sono
non sta andando molto più veloce e
quindi l’unico modo per migliorare le prestazioni
con chip che vanno avanti per sfruttare il
più transistor è da sfruttare
parallelismo e così siamo entrati nel
errore di area multi-core che siamo tutti
familiarità quindi lasciatemi iniziare
facendo domande a quante persone qui
hanno programmato esplicitamente per
multi-core con discussioni o qualsiasi altro
parallelo così quasi tutti nella stanza
ha programmato per multi-core e I
assumere da un multi-core intendi
qualcosa come il pacchetto Intel x86, ovviamente
multicore su piccola scala una cosa che
potreste essere a conoscenza di è negli ultimi pochi
gli anni diventano molto caldi è che ci sono
molto più alto grado di multicore chiamato
GPU di chip grafici e oltre l’ultimo
specialmente negli ultimi tre o quattro
anni questi sono diventati molto popolari
qui invece di avere qualche due o 48
corde abbiamo diverse centinaia di core
forse migliaia di thread hardware
che può essere eseguito contemporaneamente e persone
ho capito che per molti carichi di lavoro
sai che è molto più efficiente e
puoi ottenere molta più velocità e
parallelismo programmando con la GPU
e così abbiamo visto la nascita di GPGPU
utilizzo di gpus per l’elaborazione generica
quante persone nella stanza hanno fatto
Programma di programmazione GPGPU generale
computazione di scopo su GPU tutto bene noi
avere un pozzo in modo che le GPU siano abbastanza
soluzione radicale quindi forse per te
ma se vuoi diventare ancora più radicale
di una GPU nel mondo in cui abbiamo
conosci vincoli di potenza molto rigidi e
le difficoltà con il ridimensionamento è possibile
in realtà progettare il proprio hardware quindi se
in realtà vuoi progettare il tuo
ASIC proprio chip è necessario un sacco di
soldi e molto tempo e molto
competenza fpgas il nostro campo programmabile
array di gate questo è fondamentalmente l’hardware
hardware programmabile dove puoi
creare un design hardware e dinamicamente
caricato su un chip ed efficacemente
una barriera d’ingresso inferiore per progettare la tua
hardware e non funziona così veloce e
non è così denso come un ASIC personalizzato ma
è un modo per prototipare rapidamente
hardware e una volta che puoi progettare il tuo
proprio hardware hai la tua libertà tu
può sfruttare un bit estremamente massiccio
strutture parallele se puoi farle
puoi liberarti di molte interpretazioni
in alto non devi preoccuparti
gerarchie e cose del sistema di memoria se
così se puoi progettare l’hardware
abbinare la tua applicazione si può ottenere molto
prestazioni migliori come so nella stanza
il programma non utilizzava FPGA 3, quindi è così
in realtà mi sarei aspettato di più
fare GPU in fpgas ma non in questa stanza
quindi questo è il mondo in cui andremo
per quelli di voi che non hanno usato GPU
o FPGA che ti starai chiedendo
davvero bisogno di preoccuparsi di questo perché farlo
devi preoccuparti di ciò lasciami iniziare
da alcuni esempi motivanti che siamo
visto da molti dei nostri clienti e da me
credi che vedrai sempre di più
nei primi anni quindi ci sono
alcuni modelli di come potremmo voler usare
questi dispositivi specializzati forse il
il più facile da capire è l’utilizzo di una GPU
o un FPGA come acceleratore quindi l’ idea
ecco che c’è una parte del tuo
carico di lavoro che, per qualche motivo, forse
è in grande parallelo che conosci i dati
calcolo in virgola mobile parallelo
quale GPU può essere fatta molto
in modo efficiente può farlo prestazioni più elevate
potenza inferiore / flop o forse c’è
qualche altro tipo di specialista
elaborazione che un FPGA può semplicemente fare
più efficiente della CPU e quindi a
la cosa naturale da fare è solo prendere parte di
il tuo calcolo su cui è in esecuzione
la tua cpu lo spedisce per usare i dispositivi
e accelerare o correre veloce o correre di più
potere efficiente spedire i risultati indietro
e così via, così infettiva, sei tu
usando questo come un motore per scaricare alcuni
parte del tuo calcolo è questo
estremamente popolare nel mondo HPC per
cose come le compagnie petrolifere che fanno il sisma
simulazioni anche nel mondo finanziario se
guardi il supercomputer top 500
elenca molti dei più alti
eseguire i supercomputer HPC ora
include GPU su ogni nodo semplicemente
perché sono i dati più potenti
motori a virgola mobile paralleli che sono
disponibile oggi e ne vediamo molti altri
applicazioni che possono sfruttare FPGA come
bene quando iniziamo a parlare di FPGA
ci sono hanno altri vantaggi per
che si prestano ad altri tipi di
modelli di implementazione
uno che è molto popolare sta usando FPGA
in ciò che chiamiamo un’appliance di rete
piattaforma così FPGA puoi collegare il tuo I / O
come Ethernet o bus seriale o
diciamo la tua rete direttamente nel
FPGA e ora puoi progettare il tuo
hardware in modo da poter progettare il proprio
protocollo di rete da sfruttare molto basso
struttura di livello non devi preoccuparti
a proposito di gestire un funzionamento personalizzato
stack di sistema e così via in modo da poter ottenere
rotazione estremamente bassa e
throughput molto elevato sulla rete
livello di larghezza di banda finchè fondamentalmente
spostando il tuo calcolo molto vicino a
la tua interfaccia di rete personalizzata e così via
ci sono molti FPGA usati
molto nelle industrie delle telecomunicazioni di
networking delle industrie finanziarie
applicazioni efficaci per bassa latenza
e applicazioni di rete ad alto rendimento
l’idea qui è quella più importante
del calcolo entrerà e uscirà
la rete direttamente nell’FPGA
occasionalmente forse alcuni
calcolo o controllo generico
la logica verrà eseguita sul main
sistema ma l’ FPGA è il principale locus di
controllo del tuo calcolo un altro
modello che è una specie della stessa idea
utilizzando ciò che chiamiamo appliance di archiviazione così
in questo caso l’idea è se puoi metterlo
un FPGA molto vicino al tuo spazio di archiviazione e
se puoi architettare il tuo sistema
larghezza di banda molto più alta tra la tua
dispositivi di archiviazione dicono che il tuo flash o
disco a stato solido o anche il tuo normale
disco puoi mettere la logica di elaborazione
molto vicino a quello che puoi ottenere più in alto
larghezza di banda e quindi se si può fare un po ‘di
la tua elaborazione di query molto vicino al
archiviazione è possibile ridurre la larghezza di banda
richieste sul tuo bus di sistema e puoi farlo
fondamentalmente scarica molti dei tuoi dati
elaborazione nel tuo mondo dei Big Data molto
molto vicino al deposito quindi questo è ciò che noi
chiamare questa piattaforma di appliance di archiviazione
è molto popolare in questo momento nei big data
applicazioni di database e così via e
ha solo dei vantaggi che l’IBM ha certamente
alcune offerte in questo come in altri
aziende quindi spero di averti convinto
che ci sono buone ragioni e da usare
queste architetture e stiamo vedendo
sempre più di questi arrivano ancora
la maggior parte di voi nella stanza aveva pochissimo
o nessuna esperienza con questo
ragioni per cui è perché fare questo tipo
di programmazione eterogenea non è molto
accessibile
gli ingegneri del software mainstream oggi uno
dei motivi è che ognuno di questi
i dispositivi richiedono una programmazione diversa
di modello in questo momento siamo tutti molto
buona programmazione ad alto livello
lingue come Java o Python o
qualunque cosa per le nostre CPU e forniscono a
molto alto livello di distrazione se tu
vuoi un programma GPU generico
lo stato dell’arte attuale è da utilizzare
qualcosa come khuda aur opencl questi
sono abbastanza bassi livelli c api e sottoinsiemi
di c che ti permettono di usare la GPU ma
tu metti ancora il programma in un molto
livello più basso di astrazione devi
impara un nuovo modello di programmazione che hai
gestire manualmente la comunicazione tra
dispositivi devi essere molto attento
su come strutturare il tuo calcolo a
utilizzare la GPU in modo efficace così la sua base ma
relativamente doloroso soprattutto rispetto
alle nostre esperienze e programmazione
tuttavia processori generici
programmare GPU rende è come il paradiso
rispetto alla programmazione di FPGA quelli di
tu che l’hai fatto, non lo sai
prima di tutto programmando FPGA la maggior parte di
le persone che programmano FPGA sono loro
in realtà non dire che programmano così tu
in realtà non programmare l’hardware
progetta il tuo progettista hardware e tu
crea un disegno e carichi il disegno
sul chip e non abbiamo nemmeno pensare
ed è per questo che questi sono design
lingue VHDL e verilog e c’è a
molto questi sono molto estremamente di basso livello
in pratica i linguaggi di progettazione del circuito
che descrivi il tuo calcolo non lo fai
avere benefici sull’FPGA di un
sistema operativo o driver di dispositivo o
gestori della memoria o una qualsiasi delle cose che noi
aspettati di conoscere il software di sistema
che rende i programmi di scrittura facili così
è davvero un livello molto basso molto
esperienza dolorosa rispetto alla scrittura
software per poter utilizzare un FPGA in a
sistema eterogeneo, quindi cosa siamo
provare a fare è vedere quanto possiamo fare
per sistemare questo così l’obiettivo del nostro progetto
si chiama metallo liquido e noi abbiamo un
linguaggio di programmazione chiamato lime e il nostro
l’obiettivo è davvero quello di provare a usare
sistemi eterogenei con un mix di
questi tipi di dispositivi accessibili a
programmatore di software engineer mainstream
in modo che la programmazione di un eterogeneo
il sistema con una GPU o FPGA non è quello
molto più difficile di come è la programmazione in
un linguaggio di alto livello su una CPU oggi
e pensiamo che se fossimo in grado di farlo
questo sai che possiamo farcela
piattaforme più accessibili e il
piattaforme stanno arrivando in questo momento molto
piccole élite di clienti li stanno usando
ci aspettiamo che a causa delle tendenze in
la fisica nei giusti benefici di
usando queste architetture ci sarà
sempre più richiesta vediamo che sta arrivando
così cercheremo di farcela
più accessibile e più simile al mainstream
programmazione quindi la nostra strategia è che abbiamo un
una sola lingua chiamata lime che io sono
andando a descrivere in dettaglio che
sembra molto simile a Java abbiamo a
piuttosto ricca tool chain per cercare di rendere
la programmazione in linea ricorda la programmazione
in Java per quanto riguarda la ricchezza del
strumenti e ti mostreremo alcuni dei
dettagli di come andiamo e anche noi
prova a fornire specialmente runtime
sistemi su cui viene eseguito il sistema
nascondere molti dei dettagli di basso livello così
quello sarà il contenuto del discorso
sta descrivendo il nostro approccio a questo
prima di andare su quella diapositiva ero io lo farò
Salta tutte le domande prima di entrare nel
dettagli del modello di programmazione tutti
giusto quindi parliamo di metallo liquido
quindi la nostra filosofia è che c’è un
linea di programmazione singola ma
non garantiremo che possiamo
compilare tutto di lime per ogni dispositivo così
ci saranno diversi sottoinsiemi del
linguaggio che può essere compilato per ciascuno
dispositivo in base ai vincoli di
il dispositivo quindi quello che abbiamo è la linea
il compilatore ne sputerà più di uno
versione di diverso è un compito basato
modello di programma di diversi compiti
a seconda del tipo di dispositivi che può
sfruttare per ogni pezzo di codice in modo tutto
il codice può essere implementato per l’esecuzione
una JVM che abbiamo, possiamo sputare JVM
bytecode ed esegui su una CPU in modo che tu possa
scrivere un programma completo usando uno qualsiasi dei
costrutti linguistici in esecuzione
bytecode se vuoi eseguire un particolare
compito o aspetto particolare di routine o a
particolare parte del codice su un dispositivo tale
come una GPU o un FPGA il compilatore può o
potrebbe non essere in grado di generare codice e così via
la filosofia è che il compilatore tu
puoi scrivere codice generale e poi il
il compilatore ha esclusioni del compilatore
darà un sacco di feedback sulle ragioni
perché non è in grado di compilare a
particolare pezzo di codice fino ad a
dispositivo e cerchiamo di renderlo facile
possibile quindi per voi di refactoring tuo
codice per soddisfare il compilatore
dì al compilatore più informazioni
ha bisogno di sapere per generare
buon codice per un particolare dispositivo e
Avrò alcuni dettagli di ciò che sembra
così che cosa è calce calce ad un livello molto alto
il livello è molto simile a Java, ma aggiungiamo
un paio di altri costrutti che consentono
per compilare questi dispositivi
che fondamentalmente si dividono in due categorie
uno è isolamento, quindi l’isolamento è extra
informazioni al codice Java che ci consente
per spostare il calcolo intorno e mostrerò
alcuni dei calcoli costruiscono il
parola chiave locale e tipi immutabili che
applicare isolamento su parti del
linguaggio che ci permette di accelerarlo
e poi un sacco di si tratta di astratta
parallelismo quindi siamo in ordine per il
compilatore da sfruttare altamente parallelo
hardware e per spostarsi e programmare
il calcolo attorno ad esso deve avere un
ottima idea del parallelismo così
non stiamo prendendo un super compilatore
approccio non stiamo chiedendo al compilatore
dedurre il parallelismo dal segreto
codice sequenziale o qualcosa del genere
invece quello che abbiamo è giusto
costrutti di alto livello nella lingua
che il programmatore può usare per dire al
compilatore questo è questo stile di
parallelismo e una volta che le cose digitano
il compilatore sa bene è un modo per
il programmatore di comunicare in parallelo
strutture al compilatore e poi il
il compilatore può mapparli verso il basso
hardware quindi descriverò questi in a
un po ‘più di dettaglio, quindi il nostro sviluppo
esperienza come ho detto è l’idea è
siamo molto grandi su un incrementale
migrazione refactoring incrementale così il
idea è che si prototipo il tuo codice
fondamentalmente in Java in modo da poter iniziare
solo ottenendo una versione funzionale che
funziona in Java e per fare questo è it’s
abbiamo un ID basato sulle clip
ID ti offre tutti i vantaggi del
Ambiente di sviluppo Java incluso
editori e debugging e così via e
allora vogliamo che tu cresca in modo incrementale
migrare le parti del codice che si desidera
per accelerare aggiungendo questi lime
costrutti linguistici che esprimono il
parallelismo che il compilatore deve sapere
tutte le domande ancora prima di immergermi nel
dettagli
la faccia legata sembra una più bassa
Il 10 di Presidente è abbastanza
diverso da x10 sì, posso averne un po ‘
maggiori dettagli ho lavorato su dieci
così è un mi permetta di presentare quello che noi
ho quindi potuto descrivere una cosa a
un livello molto alto a cui non stiamo provando
risolvere il problema di calcolo distribuito
non stiamo cercando di esprimere il clust
calcolo del cluster di memoria distribuito
che è l’obiettivo principale di X 10, quindi siamo
non cercando di scalare in un gruppo di
workstation i nostri costrutti sono davvero
progettato le idee che hai un singolo
nodo con dispositivi collegati e di gestione
i dettagli di particolari dispositivi che siamo
non risolvere il problema di come vorresti
comunicare attraverso i nodi per farlo tu
userebbe il messaggio che passa o x 10 o
alcuni o qualche altro modello, ma quello è
al di fuori della portata di ciò che stiamo provando
per risolvere qualsiasi altra buona mossa
cose
per favore alzati um così è diverso per
diverse piattaforme fondamentalmente ci saranno
essere un set di piattaforme che supportiamo
e possiamo gestirli così per le GPU
abbiamo praticamente compilato giù per opencl
che è uno standard per l’hardware della GPU
che è supportato più o meno da
nvidia e ati e intel e tutto il
i venditori di fpg sono davvero solo
due venditori che dominano il mercato
che sono xilinx in Alterra e noi abbiamo
supporto per entrambe le loro catene di strumenti così come
per quanto riguarda GPU e FPGA
abbiamo coperto la maggior parte del mondo
questo è il nostro problema, quindi è quello che facciamo
per una vita sì, ecco cosa
questo è quello che è il motivo per cui ciò che facciamo
per il resto della mia vita c’è qualcos’altro
giusto quindi proviamo a provare
uscire così penso che il modo migliore per provare
descrivere almeno il sapore della
linguaggio di programmazione in un brevissimo
parlare è semplicemente camminando attraverso un
esempio quindi sto solo andando a camminare
attraverso un semplice esempio che è un fine
simulazione corpo anche io faccio vedere una demo
più tardi quindi considereremo solo uno
iterazione di una simulazione del corpo finale il
idee qui abbiamo un sacco di particelle
forse hai familiarità con questo tipo
di calcoli queste particelle potrebbero essere
pensa di dire stelle in una galassia o forse
sono molecole in un fluido e loro
interagire con forza gravità o piaghe
o qualche altra forza fisica e noi
fondamentalmente hanno un calcolo a N quadrato
dove in ogni momento passo ogni particella
eserciterà forza su ogni altra particella
secondo una legge fisica e così
ce ne sono due, ce ne sono fondamentalmente tre
passi nel calcolo che generi
le posizioni delle particelle te
calcolare la forza su ogni tazza su ciascuno
particella e questa è la parte costosa
del calcolo questo è l’ingenuo
algoritmi o N al quadrato quindi ogni particella
effettua ogni altra particella e poi
c’è un accumulatore di forza una volta che hai
calcolato tutte le forze in cui le sommi
e poi ti sposterai le particelle
la loro nuova posizione e poi ripetere così se
volevamo fare il modello dell’acceleratore
ha sicuramente un senso molto in alto
livello dal momento che il calcolo della forza è il
N al quadrato calcolo il resto di loro
siamo
la volontà lineare vorremmo iniziare
dicendo che vogliamo accelerare il
computazionalmente il calcolo della forza
ed è quello che ti guiderò così
inizi come ho detto che avresti iniziato così
immaginiamo di avere già Java
codice per fare questo e iniziato con
qualcosa che assomiglia al codice Java
Classe N-Body la prima cosa che facciamo è noi
devo dire al compilatore tutto bene
avremo un compito parallelo
struttura quindi dobbiamo dirlo al vino
compilatore okay abbiamo tre compiti qui
questa è la struttura del nostro calcolo
e questi sono i confini a cui
vorremmo spostare il codice
quindi il modo in cui lo facciamo in lime è noi
applica un operatore di attività che è un nuovo
parola chiave a una dichiarazione di metodo di a
metodo java in modo che il codice evidenziato in
verde qui sta dicendo che cosa stiamo facendo è
stiamo impostando tre attività che stiamo andando
per attivare il metodo del generatore di particelle
in un compito il metodo di calcolo della forza
in un compito e l’accumulatore di forza
metodo in un compito e questi sono giusti
i normali metodi Java ignorano alcuni dei
roba di array strani per ora e poi noi
avere l’operatore di connessione che è il
è più grande di questo
virtualizza la comunicazione così è
dicendo che l’output del primo compito
il generatore di particelle sarà alimentato come
l’input per la seconda task force
calcolo l’output di tale attività sarà
essere alimentato nel terzo test che è il
accumulatore di conteggio di forza ora così così che cosa
abbiamo qui è molto un test
flusso di dati a grana grossa parallela
modello di programmazione e questo è almeno
il livello esterno del parallelismo con cui
esprimerai il tuo calcolo così per
il resto del discorso penso almeno su
questo esempio mi concentrerò un po ‘su
il modello GPU di fare i dati paralleli
calcolo della forza ma una cosa che voglio
sottolineare a questo punto è questo compito
il modello parallelo è molto in
spirito di progettazione hardware dove vedi
grafici di flusso di dati di layup di blocchi e
ci sono costrutti nel linguaggio per
fare split e join e matching e
tasso di corrispondenza e così via così spesso
per l’hardware quello che farai è che lo farai
impostare un grafo delle attività molto ricco
che mappa fino all’hardware e questo è
il tipo di cosa che funziona bene
l’hardware causa fondamentalmente ogni attività se
è in una pipeline come questa corrisponde
per un ciclo di pipeline e a
progettazione di pipeline e quindi è molto in
lo stile di come le persone fanno l’hardware
design
Spero sia chiaro che ne parlerò a
poche altre diapositive e poi chiarire
tutto ciò che deve essere chiarito così
una volta identificato il grafico dell’attività
che è quello che abbiamo fatto qui sul
programmatore dirà al compilatore che io
voglio spostare una determinata attività e
lo facciamo con questi trasferimenti
parentesi e questo è fondamentalmente dicendo
il compilatore che in questo caso voglio
questo compito di computazione della forza deve essere
accelerato e quindi a seconda di come
ho configurato il compilatore
toolchain deciderà quale
back end ci proverò quindi andiamo
supponiamo per il momento per questa cosa
che ho configurato le mie catene di strumenti
compiti accelerati il compilatore è giusto
andando a provare presto a inviare il
compito accelerato per la GPU ora che cosa
succede una volta che inizi a usarli
assicurati che alcuni di questi siano al seno
entrano in vigore regole di controllo del tipo più severe
giocare così a questo punto lo farà il compilatore
inizia a controllare questa forza
compito di calcolo non solo che è
linea legale ma che in realtà obbedisce
i limiti che è necessario conoscere
per spedirlo alla GPU quindi
particolare le proprietà i
menzionato prima sull’isolamento e
parallelismo e così in particolare lo farai
devo iniziare a dire al compilatore
informazioni sul calcolo della forza
compito quindi entrerò un po ‘oltre
le prossime slide ma solo per
mostra la dichiarazione del metodo in
in particolare ho detto che questo locale sta andando
fondamentalmente far rispettare questa forza
il calcolo è isolato, quindi non abbiamo
un modello di memoria condivisa generale ogni attività
gira in un abito spaziale isolato
non possono leggere e scrivere accesso casuale
memoria attraverso di esso l’unica condivisione di
stato tra le attività è attraverso il
input e output e quindi il locale
le verifiche di garanzia del qualificatore dice al
compilatore per verificare che quella proprietà
sostiene che abbiamo anche queste immutabilità
costrutti su cui descriverò un po ‘
la prossima diapositiva credo che sì, andiamo
guarda il codice un po ‘di più
cosa dobbiamo fare per ottenere
questo calcolo funziona su una GPU quindi io
ha menzionato il locale che il locale dice questo
è un compito isolato ciò che significa è
fondamentalmente il compilatore a questo punto è
andando a controllare che gli ingressi e
fornisce a questo compito i nostri valori
il loro immutabile in modo che non possano essere
scritto, scritto, scritto o letto
o osservare a cambiare da altre parti di
il sistema mentre è in transito siamo
andando a rafforzare l’immutabilità che
fondamentalmente ci dice questo valore di proprietà
per gli ingressi e le uscite in modo che divertente
sintassi di array che abbiamo sugli input e
uscite del calcolo della forza in pratica
questo sta dicendo che l’ input per il
forza il metodo di calcolo che siamo
trasformarsi in un compito è un array di quattro
tuple di float quindi è un due
array dimensionale ma è immutabile così
nessun altro sta per scarabocchiare
dentro mentre questa attività è in esecuzione e
restituirà una serie di tre
tuple che le forze che è anche
immutabile dice anche la parola chiave locale
il compilatore per verificare che questo sia
il calcolo è isolato in modo transitorio
alcuni particolari non possono leggere o scrivere alcuno
stato globale mutabile così con quello
informazioni che il compilatore sa che è
sicuro per spostare questo compito e che
non cambierà la semantica del
programma in qualsiasi modo ora anche noi abbiamo
questo caso usando l’operatore della mappa @
firmare quindi quello che faremo è questo
è un’applicazione parallela di dati di a
la funzione è la stessa della mappa se
familiare con la matematica e gli elenchi o qualsiasi
altri linguaggi funzionali che è
praticamente dicendo prendi questa funzione
questo caso la funzione di forza e applicare
a ogni particella per ogni elemento di
in questo caso un array così fondamentalmente questo
dice al compilatore che abbiamo un dato
calcolo parallelo e ancora una volta
usando lo stesso tipo di annotazioni locali
e immutabilità garantiamo che lì
sono in loop senza effetto
dipendenze garantiamo che questo
in realtà è un calcolo parallelo di dati
e che siamo connettivi se lo fossimo
correndo su una CPU potremmo eseguirli
in qualsiasi ordine e ciò significa che possiamo
utilizzare l’hardware GPU possiamo accenderlo
in parallelo e non dobbiamo preoccuparci
sulla condivisione o sulla semantica, quindi questo
è fondamentalmente il tipo che controlla qui
dice al compilatore okay questo è sicuro
paralizzare e non cambierà la semantica
ora se hai violato questo tipo di controllo
riceverai feedback durante l’IDE
dicendo questo questo metodo deve essere
locale o questo parametro non è un valore
o così avanti e così il processo di andare
dal codice Java vanilla a qualcosa di simile
questo che può dire che può essere
accelerato è efficacemente un dialogo
con il compilatore dove i compilatori
inizia a darti degli avvertimenti e tu puoi
vai dentro e sistemali
e in realtà non è di solito se il tuo
l’algoritmo è parallelo pensiamo che non lo sia
non a Burnham e per farlo io così
menzionato l’operatore della mappa questo è un modo
di descrivere le operazioni parallele dei dati
noi conosciamo abbastanza bene il
la sintassi è davvero piuttosto semplice, ma è così
ci consente di esprimere un sacco di schemi
delle operazioni parallele dei dati così possiamo
mappa un operatore così quando diciamo che C
è uguale a a più B che sta mappando il +
operatore per il superamento degli array a
più B e questo fa quello che ti aspetti
come illustrato qui è che farà un
element wise edition dell’array a e
B producendo una matrice vedi che ce ne sono molti
altri modelli che puoi usare per fare i dati
parallelamente così puoi farlo puoi applicare
metodi in parallelo quindi questo float C
equivale a mappare la funzione di aggiunta a e B è
esattamente come la mappatura l’operatore
e poi puoi anche fare sollevamento o
promozione o Kareem che è per esempio
puoi aggiungerne uno a ciascun elemento dell’array
e usando questo segno di sterlina è
fondamentalmente dicendo alzare questo valore scalare
in array come argomento per la mappa
funzione così che sono le basi dei dati
calcolo parallelo spero lo sia stato
cancella tutte le domande prima di andare a destra
quindi quello che abbiamo qui ti ho mostrato il
codice per il calcolo di n-body quelli
sono se avessi programmato con opencl o
CUDA sai che questo è molto più alto
livello e molto più astratto rispetto al
stato attuale della programmazione
usando in questo caso opencl dove hai
fare un sacco di livello di sistema q istituito e
compilazione e gestione e manuale
comunicazione sai che stiamo programmando
un livello molto più alto di astrazione per
la GPU um se siamo programmati per il
FPGA è se siamo un po ‘più alti
livello di astrazione per le GPU in cui ci troviamo
incredibili ordini di grandezza molto
più alto livello di astrazione di te
scriverei per un FPGA se lo sei
programmare un HDL o Verilog lo sai
anche una logica utente molto semplice che
si dovrebbe esprimere in Java si espande
macchine a stati molto complicati con
fili di guida di basso livello e concorrenza
e controllare i segnali e i tempi
in verilog è davvero un livello molto basso
modello di programma solo per esprimere l’utente
logica ed espressione della logica dell’utente in a
sistema eterogeneo non è davvero il
parte difficile è la parte difficile è la gestione del
comunicazione tra FPGA e il
computer host non è come si prende un
FPGA e collegalo alla tua USB e e
e il sistema operativo riconosce il
dispositivo e si inizia a usarlo
in modo trasparente sai che questo è davvero un
pezzo grezzo di silicio non viene con
un sistema operativo non viene fornito
qualsiasi cosa tu debba scrivere o trovare o
acquisire l’IP per implementare il dispositivo
l’intimo i driver sull’hardware
e avere una sorta di sistema di runtime
sull’hardware per fare tutto il routing
tra questo e così è davvero un
enorme quantità di lavoro solo per costruire
l’infrastruttura di comunicazione di base
tra un dispositivo e una CPU e così via
gentiluomo ha fatto una domanda tu lo sai
è il tipo di cosa che abbiamo fatto
e l’abbiamo fatto una volta e possiamo farlo
una volta e poi il nostro compilatore può riutilizzarlo
quindi abbiamo creato il sistema di runtime
che gestisce la nostra comunicazione
il compilatore sa come usarlo così
fondamentalmente il programmatore non deve
preoccupati e non devi saperlo
questo e noi pensiamo che sia tremendo
valore rispetto all’alternativa di
facendo questo da zero si
quindi stiamo compilando Verilog
compilazione diretta su hardware e
quindi il nostro hardware fondamentalmente i nostri circuiti
l’ora runtime system lo sta chiamando a
la macchina virtuale è forse un po ‘troppo
glorioso è un mucchio di segnali con
segnali di controllo e logica di arbitraggio
fondamentalmente per instradare i dati dai pin a
logica dell’utente in modo da prendere il nostro utente
logica che fondamentalmente espone il numero
di fili e quindi questo è ciò che è nostro
compilatore intendo il programmatore
non finisce mai il programma sono solo scritture
locale in Fubar cosa succede al
il compilatore che conosci genera Verilog
che espone un mucchio di fili il nostro strumento
catena aggancia quei fili ai fili
dei nostri segnali interni e quindi i nostri segnali
parlare di un protocollo per dire PCIe al nostro
i padroni di casa che abbiamo guidato io che conosco
come parlare allo stesso protocollo sì
intendo dire che è davvero un autobus
e e controllano la logica qualsiasi altro
domande così pensiamo che tu sappia comparato
alle alternative di programmazione FPGA
pensiamo di avere una storia molto avvincente
per quanto riguarda la produttività, stiamo risparmiando a
enorme quantità di lavoro appena dentro
scrivendo il codice ma molta della storia
qui non si tratta solo del codice
davvero la catena di strumenti e quali
soprattutto per le fpg, ma anche se pari
per GPUs dove gli strumenti e il
catena di strumenti e il processo da dove
usi questi dispositivi in questo momento
stato dell’arte lo sai molto
primitivo rispetto a quello a cui siamo abituati
con il software è quasi come andare
indietro nel tempo prima del prima
invenzione di Fortran e prova a mostrarti
sai un po ‘dei nostri strumenti
e quale sarebbe l’alternativa
la pratica corrente così per esempio
compilando il codice che conosci nel nostro
sistema fondamentalmente compilando il codice noi
avere finestre e lanciatori di Eclipse così
tu apriresti un nostro ID che vorresti
aprire un wizard di compilatore specializzato
e che ti guiderà attraverso come
configura la tua compilazione
per l’ FPGA e poi fai clic su Compila
conosci l’alternativa usando lo strumento
catena come fanno le persone in questo momento
davvero relativamente doloroso devi
utilizzare più strumenti è tutto il fornitore
specifico devi scrivere molto
logica e banco di prova solo per guidare il tuo
logica per testarlo funziona con i simulatori
e così via e tu sai che è un
processo molto lungo noioso che prende un
molta competenza e questo fa parte del
ragione questa è una grande parte del
motivo per cui è molto difficile iniziare
usando FPGA sai che ci vuole un sacco di tempo
esperienza solo per imparare un particolare
catena di strumenti dei fornitori e quindi se si impara
la catena di strumenti xilinx che non lo è
necessario per aiutarti
imparare la catena di strumenti di Alterra o se
Intel uscirà con
qualcosa quindi è tutto ma tu lo sai
completamente diverso da quello che siamo
abituato a software in cui è quasi
come tornare indietro nel tempo ai giorni
prima di programmare i linguaggi così una volta
di nuovo per quanto riguarda la produttività ti penso
sappiamo che lo stiamo rendendo molto più facile
cose che richiederebbero almeno giorni
se non di più per imparare come fare e a
configura e lavora , conosci noi
nascondersi dietro un mago e il sistema
guida automaticamente il debugging a
storia simile che sai nel nostro sistema se
la nostra compilazione se il nostro sistema è implementato
correttamente la semantica del programma
non cambiare se li esegui
se lo si esegue sul codice moto posteriore
fine o se lo si esegue su un
acceleratore che il programma dovrebbe produrre
le stesse identiche risposte lunghe quanto le nostre
il sistema è corretto e speriamo che sia così
puoi eseguire il debug della logica utente semplicemente
eseguendo il debug come se si stesse eseguendo il debug
Codice Java, quindi abbiamo un maggiordomo Eclipse D
integrato in eclissi dove puoi
imposta punti di interruzione e introspezione e fallo
tutte le cose belle come se tu fossi
eseguendo il debug del codice Java, conosci le persone
fare con la progettazione hardware oggi fondamentalmente
è che guardano le forme d’onda e questo è
il livello di debugging che è il
alternativa oggi così sai che siamo a
abbastanza più alto di quello ora
noi facciamo i nostri strumenti ti permetterà di correre
su un simulatore molto facile e produrre
forma d’onda quindi se vuoi, per esempio
guarda le prestazioni o guarda cosa c’è
andando avanti puoi raggiungere il livello di flusso
informazioni ma per la stragrande maggioranza
programma è anticipare che lo farebbero
non hanno mai a sapere che si sa che
ci sono cose come orologi e
segnali e tempi e potrebbero fare il
debugging ad un livello molto più alto
astrazione ancora una volta l’intero tema
qui sta cercando di portare la pratica corrente
in questo mondo molto più vicino a ciò che a
il pubblico mainstream sarebbe a suo agio
con il codice in esecuzione è molto simile
storia che sai correre correndo
pulsante l’ID invece di imparare ancora
un altro strumento che è quello che hai da
fare per caricare i file bit su un FPGA e
eseguirli e così via così c’è
solo una tremenda lacuna nell’esperienza
di usare una moderna catena di strumenti contro cosa
lo stato attuale dell’arte è e
usando questi dispositivi oggi la sintesi è così
per compilare un file Verilog o
File VHDL su un circuito che hai eseguito
uno strumento di sintesi questo è un fornitore
strumento che fondamentalmente stabilisce la logica
fa il design e cerca di obbedire
cerca di soddisfare i vincoli di orologio e
vincoli di layout e pianificazione del pavimento
e vieni con il design così questo è
imparando ancora un altro strumento questo richiede a
tempo molto lungo per eseguire la sintesi anche
i moduli logici utente più piccoli ne richiedono molti
i minuti in esecuzione per i grandi progetti possono richiedere
ore spesso eseguirai una sintesi e
fallirà solo perché lo strumento
non era in grado di soddisfare un certo tempismo
vincoli o alcuni vincoli di clock così
questa è un’altra area dove possiamo
cercare di elevare il livello nell’esperienza
abbiamo deciso di farlo da un cloud
servizio che chiamiamo lime Forge così ora
per lo sviluppo regolare puoi sviluppare
semplicemente sul tuo desktop puoi correre
il simulatore sul desktop e come fare
tutto il tuo sviluppo quando sei
in realtà pronto a schierarsi su un fisico
dispositivo è necessario eseguire la sintesi
strumento necessario per generare il fisico
file bit da caricare sul dispositivo e ora
devi fare sintesi ciò che facciamo è
per rendere questo posto paghiamo le pieghe che abbiamo
implementato un servizio cloud che
fondamentalmente tu mandi il tuo lavoro dove tu
spedisci la tua logica e il programma a
il cloud e il nostro cloud ora funzioneranno
tutto ciò che serve per cercare di sintetizzare
questo fondamentalmente lo sarà nel
lo sfondo genererà il cloud a
gruppo di diversi lavori di sintesi e
cercare diverse frequenze di clock
prova a massimizzare la frequenza del tuo orologio
ci sono molti modi di accordare
vincoli al da
strumento in modo che la nostra nuvola cercherà attraverso
diversi vincoli e applicare
competenza che sono gli esperti del nostro
squadra ha imparato nel corso degli anni su come
per guidare questi strumenti così in pratica proviamo
avere un po ‘intelligente
l’intelligenza non è la parola giusta
ma un sistema piuttosto avanzato nel
sfondo utilizzando molte risorse per
cercare di ottenere i migliori risultati dal
strumento di sintesi e ancora una volta prendere il
onere di imparare come guidare questo
strumento correttamente e come ottimizzarlo
strumento lontano dal programmatore e provare a
fallo automaticamente e lo facciamo
il cloud perché questa è una risorsa
intensivo e quindi è per questo che lo coltiviamo
fuori così come problemi di licenza è
più facile installare una sola copia di
strumenti di vendita così è quello che direi a
Almeno ho provato a darti un sapore
quello che stiamo andando per almeno quattro
esperienza degli sviluppatori e qual è il sistema
è come ho potuto parlare un po ‘di
l’implementazione di eventuali domande a questo
prima che noi abbiamo abbiamo abbiamo
vendita sì nessuna abilità delle persone che hai
anni ormai è lasciare andare via il rosa o
diciamo che il bene pertinente saremo a
un po ‘come una programmazione domenicale o tu
potrei pensarci vorrei dire di si
li metteremo fuori dalla tua attività
conosco e penso per il vasto
maggioranza se avremo successo lo faremo
ci saranno sempre penso ragioni
perché vuoi scendere al più basso
level design per alcune parti del tuo codice
o per alcune applicazioni fino al nostro
il sistema è interessato ce ne sono alcuni
ragioni per cui potresti volerlo, così abbiamo
ha una programmazione di altissimo livello
linguaggio lo abbiamo reso molto facile e
sicuro di esprimere il parallelismo, ma abbiamo
tolto parte del potere di esprimere
forme arbitrarie di parallelismo dal
programmatore quindi non puoi esprimere
strutture concorrenti arbitrarie nel nostro
lingua quindi se vuoi scrivere un
design arbitrario con code che sono
comunicare su un orologio per livello di clock
e stai molto attento che non puoi esprimere un
online nella nostra linea
che così per quello devi cadere
giù ad un livello più basso e questo è per
esempio di come implementiamo il nostro runtime
sistema non abbiamo noi stessi la nostra traversa
non cibo per cani che noi facciamo cadere giù per la
altra cosa è solo la questione del
qual è la maturità del compilatore
in questo momento c’è un enorme divario
tra la nostra lingua di origine e cosa
stiamo compilando e il compilatore è
ancora relativamente immaturo rispetto a
compilazione in linguaggio assembly su a
CPU siamo anche quelli che hanno richiesto in pratica 30
anni di sviluppo sai che siamo
risolvere un problema molto più difficile o
i compilatori non sono ancora così maturi
sicuramente rinuncerai
probabilmente qualcosa se usi il nostro compilatore
entrambe le prestazioni in termini di orologio
ciclare un rendimento o un’area più probabile
i nostri progetti potrebbero non essere così tanto spazio
efficiente una cosa che abbiamo nella nostra
il sistema è ciò che chiamiamo lni su nativo
interfaccia in modo da esportare le interfacce
per cui puoi scrivere la tua logica e
Collegalo al nostro sistema in modo che sia possibile
usa il modello è se c’è una scrittura
tutto e se ce ne sono di meno
parti critiche per le prestazioni del tuo
progettare forse la registrazione o qualche controllo
struttura o qualche codice di debug o rass
codice che potresti voler scrivere nel nostro
sistema ma per qualcosa che è veramente
super prestazione critica che vorresti
scrivilo a mano e poi collegalo
il nostro sistema proprio come faresti tu
forse il codice nativo in Java oggi noi
può anche andare nell’altro modo in cui possiamo semplicemente
esportare Verilog dalla nostra catena di strumenti e
puoi prendere quel Verilog e farlo con esso
cosa vuoi così puoi usare il nostro
compilatore fondamentalmente come un retaggio alle porte
proprio come un livello superiore ce ne sono molti
della cosa del design e poi puoi collegarlo
nella propria infrastruttura e preoccupazione
su così può andare in qualsiasi modo dipende
su quanto dolore e quanto
performance che vuoi quindi lasciami parlare oh
si, dovrei andare a una demo, no?
così bene, non so che potrei pentirmi
dicendo che così come ho detto sono il
l’implementazione è qualcosa che chiamiamo a
lime virtual machine the line virtual
la macchina è fondamentalmente la nostra astrazione di
una macchina virtuale di un sistema operativo
e parti di esso funzioneranno sulla CPU e
parti di esso verranno eseguite su ciascun dispositivo e
fondamentalmente il lavoro della macchina virtuale
è prendere il carico del carico eseguirlo e
gestire la comunicazione tra
compiti diversi e quindi questo è fondamentalmente
tutto il nostro sistema runtime è molto
dello sforzo che abbiamo messo credo che lo farò
passare a una demo a questo punto così
in realtà tale calcolo n corpo che io
descritto è stato effettivamente eseguito bene
Ho tenuto il discorso così qui
sto eseguendo il calcolo di n-body
in questo momento è in esecuzione sulla JVM
e immagino il numero chiave da guardare
in questo momento sto ottenendo un Giga
flop un secondo e se guardi te
probabilmente riescono a malapena a discernere il movimento
delle particelle sta andando piuttosto lentamente
quindi posso dire al sistema di runtime di migrare
il calcolo della forza che nel mio codice
questo metodo di forze di calcolo è possibile
questo è un pannello esportato da un runtime
sistema e se diciamo al sistema di runtime
migrato in GPU quindi solo il nostro sistema
è stato prendere tutto lo stato di quello
l’esecuzione di attività lo spedisce alla GPU
collega tutti i segnali e i dati
emozioni in modo che i dati stiano andando
oltre alla GPU e ritorno per la forza
compito di calcolo e ora stiamo correndo
sulla GPU mi viene in mente
cinque gigaflops ora speriamo che tu possa farlo
Almeno vedere i dati in movimento, naturalmente, lo farà
essere molto meglio su una macchina con molto
GPU migliore ma il punto che voglio mostrare
è che il sistema di runtime è
molto dinamico può spostare compiti in giro
perché possiamo fare cose di isolamento
sposta e tutto viene gestito
in modo trasparente questo è lo stesso codice
che risulta essere in esecuzione seconda
dove vuoi eseguirlo se ne avessi uno
fpga collegato al sistema che potrei spostare
c’è anche così voglio solo mostrare
sei una demo che sai che è così facile
per testare le cose in movimento per scrivere
codice che funziona in modo diverso
sistemi
quindi in particolare quando usiamo il
GPU come la demo che ti ho appena mostrato
la vera struttura del virtuale
la macchina sembra che ce ne sia una parte
di quando ero in esecuzione sulla GPU
solo ora parte del codice era in esecuzione
bytecode java abbiamo uno strato di colla a / c
che entrambi parlano con J & I alla JVM per ottenere
i dati da lì gestiscono anche la GPU
dispositivo che usiamo i dati opencl api così
verrà spedito dalla JVM a questo
guarda il layer wrapper che è poi in grado di gestire
il colonnello opencl sul dispositivo e
gestendo tutti i protocolli di basso livello e
cose usate in opencl, ecco cos’è
sembra la GPU che potresti
immagina strutture simili nonostante ciò
richiede molto più lavoro per l’FPGA I
non otterrà troppo nei dettagli di
prestazione, credo che proverò a dire
la linea di fondo della performance così tu
so che penso che abbiamo una bella storia
per quanto riguarda la produttività, penso che io
penso che facciamo una richiesta piuttosto convincente
che puoi essere molto più produttivo in
facendo questo tipo di programmazione usando il nostro
sistema la domanda è quanto sei
andando a quello che sono le prestazioni
conseguenze di farlo perché usando
questi dispositivi alla fine è tutto
prestazioni o prestazioni di potenza così
ci sono due modi per chiedere questo
domanda per rispondere a questa domanda è
dire se sei un programmatore Java e
inizi a utilizzare il sistema quanto
più veloce del tuo Java originale sei tu
andando a ottenere questo è quanto può essere efficace
stai usando questi acceleratori o
forse se sei un esperto sei il
domanda uno sa quanto più lento è il mio
programma sarà se utilizzo questo sistema
che se l’avessi fatto tutto a mano da un
esperto quindi dobbiamo valutare entrambi
Ho i numeri probabilmente vado in loro
nei dettagli lo stato attuale che conosci
non stiamo cercando di costruire un magico
super compilatore il nostro compilatore è abbastanza
sofisticato penso che il nostro gruppo in IBM
è molto forte nei compilatori e lo faremo
più che possiamo ma sai
su alcuni benchmark la linea si comporta esattamente come
bene come un’alternativa codificata a mano e
alcuni non dobbiamo preoccuparci molto
rapporto di calcolo della comunicazione in
particolare quindi questo è quello che stiamo lavorando
su tutto il tempo penso che la nostra performance
la storia e la GPU adesso sono carine
bene non entrerò in questi in troppo
dettaglio ma c’era un foglio noi
pubblicato quest’anno alla programmazione PLD I.
progettazione e implementazione della lingua
conferenza e sai per una suite di
Benchmark GPU sai che siamo in grado di
ottenere la drammatica velocità della velocità sconvolgere altri
persone
segnalato sull’utilizzo di una GPU usando il nostro lime
programma per benchmark di varietà e a
almeno per opencl per la GPU su questi
punti di riferimento erano all’interno di un ballpark di
cosa ti aspetti da quale mano codificare
farebbe così pensiamo per la GPU per a
numero piuttosto elevato di codici abbiamo a
storia di performance piuttosto buona l’FPGA
stiamo ancora lavorando al
performance story non ne ho
numeri da mostrare per combinatorio di base
circuiti fondamentalmente cose che non lo fanno
coinvolgere cicli o stato penso che il nostro
prestazioni anche se forse non necessarie
aria è così come si può ottenere in questo
effetto che possiamo ottenere single pipe
pipeline monociclo dei circuiti
quindi possiamo per qualsiasi albero di combinatoria
la logica è che il nostro compilatore produrrà a
progettazione del gasdotto che può produrne uno
output per ciclo che è buono come te
possiamo ottenere che potremmo non ottenere questo potremmo
usa più spazio ma ci stiamo avvicinando
per circuiti complessi adesso
il compilatore è peggio di un fattore dieci
quindi stiamo facendo molto lavoro su Io
pipelining e siamo piuttosto fiduciosi che
saremo in grado di risolvere il problema
all’interno del campo da baseball all’interno di a
fattore di due o quattro di ciò che una mano
sintonizzati su ciò che potrebbe fare un programmatore esperto
fai dentro lo sai l’interno
il futuro prevedibile quindi e tu
so che dovrà decidere se o
non che la produttività contro
ne vale la pena
tu ora penso che questi numeri lo faranno
appena migliorato nel tempo come il nostro
il compilatore è maturo anche noi stiamo lavorando
su ci sono un sacco di problemi che non lo farò
andare qui per quanto riguarda il supporto
funzionalità di linguaggi di alto livello come
allocazione di memoria dinamica o virtuale
metodo di spedizione orientata agli oggetti o
cose del genere stiamo lavorando su modi
per supportare questi su queste lingue
funzionalità sui dispositivi che avevamo una carta
recentemente descrivendo come stiamo andando
fare garbage collection su FPGA che
è una carta eccellente che era anche in
la conferenza di plDI così è definitivamente
vale la pena controllare se ci sei dentro
tipo di design cosa così Martinez cosa c’è
il riassunto come ho detto penso che abbiamo un
bella storia sulla produttività noi
abbiamo dimostrato che possiamo avere
astrazioni concise di alto livello per
parallelismo che ha mappato su diversi
dispositivi che ho dimostrato di credere o di
la nostra esperienza minore è che il
l’esperienza nell’usare questo non è molto
Più forte
java e così gli ordini di grandezza sono migliori
rispetto alle attuali alternative um e I
penso che abbiamo una buona possibilità di
consegnando il nostro obiettivo che era il
soluzione generale per il mainstream
programmazione di questi sistemi ora di
Certo che come ho detto non c’è magia tu
sappiamo che non progetteremo a
algoritmo parallelo per voi questo non è un
parallelizzando il compilatore devi ancora
essere in grado di progettare il tuo algoritmo in a
modo che siamo suscettibili al parallelismo
non intenzione di fingere che una versione di
il programma funziona bene su tutti i dispositivi
potrebbe dover scrivere diverse versioni
di un metodo per soddisfare il
vincoli di diversi dispositivi che siamo
non provare a eseguire programmi Java vanilla
sull’acceleratore devi passare
un dialogo di step di migrazione con il
compilatore questa è una ricerca interna
progetto in questo momento, quindi questo non è ancora
disponibile al pubblico non sono preparato
in questo momento per fare annunci di
questo sono fiducioso che questo sarà
disponibile in una forma dell’altra
relativamente presto ma per il momento questo
è un progetto di ricerca interna che siamo
pilotandolo con vari gruppi all’interno
IBM per fare esperienza di cuore nel
sistema e siamo fiduciosi che questo
l’esperienza confermerà la nostra ipotesi
che questo è un modo produttivo per andare così
Ho finito e mi fermerò qui e rispondo
altre domande che hai se lo sei
un cliente IBM potremmo parlare con noi
potremmo essere disposti a fare una sorta di
Accordo unico e irripetibile se lo è
aveva senso quindi siamo disposti che stiamo facendo
questo o siamo in discussione di questo
con diversi clienti non c’è motivo
perché non potremmo fare di più quindi siamo felici
impegnarsi come ho detto anche se non lo è
pubblico aperto quindi deve essere fatto sotto
gli accordi legali appropriati si
giusto così per ora sia le GPU così
vediamo per le GPU proprio ora loro
plug in PCI cose ora sia Intel e
AMD ha integrato GPU sullo stesso
core in modo che l’ FPGA è ci sono un certo numero di
modi per comunicare adesso sì nostro
il sistema principale sta comunicando su PCIe
c’è anche Ethernet è una possibilità
abbiamo anche per la prototipazione abbiamo a
Connessione seriale UART quindi ce ne sono molti
Ci sono diversi modi per parlare con gli FPGA
sono anche venditori che fanno bus di memoria
allegato a disegni FPGA con IBM
o con Intel quindi c’è un numero di
modi ma sì sono la nostra piattaforma principale
in questo momento è PCIe diverso dal diavolo
come al solito sono interessanti
storie di applicazioni con benchmark
storia interessante e una cosa noi
divertirsi con internamente è così
sembra che la maggior parte dei nostri avvincenti
le applicazioni sono malvagie, quindi abbiamo molto
di storie che conosci applicazioni
da alta frequenza commerciale ad alta velocità
trading di frequenza da Wall Street e
armi e tu sai così, immagino sia così
la storia con tutti i tipi di alto
tecnologia di prestazioni all’avanguardia
i primi utenti tendono ad essere persone con a
molti soldi e potere cerco di farlo
concentrarsi sulle applicazioni non malvagie
per favore parla al classico e giusto io sono
dall’offrire al VJ di più
efficace questo pensi che sarebbe
possibile usare questo potere o tre da
Figi puro qualsiasi progetto in questa linea
lingua Ian sull’amore sì, quindi penso
degli scenari che ho iniziato al
inizio del discorso con il mio personale
l’opinione è quella che è più
è attraente è collegato alla rete
e in questo caso fondamentalmente nel comune
caso tutto il calcolo sarà fatto in
il fpga e credo che in teoria si potrebbe
tagliare la corda e staccare la fpga
ma in pratica è solitamente collegato
ad un host perché devi avviare il
dispositivo e caricare le cose per quello ma sì
nella maggior parte di queste applicazioni
l’idea è e tu sai che siamo stati noi
state facendo alcune di queste applicazioni
in particolare crittografia crittografia e
Interessante mi dispiace, sto chiudendo a chiave
gzip gzip è molto interessante
domanda ma l’idea qui è quella
stiamo facendo un po ‘di filtro direttamente
il filo alla velocità del filo
ignorando l’intero stack del software sul
CPU per un throughput a latenza molto bassa
ora gzip è un’applicazione interessante
ci sono stet non so se lo sei
familiare con gli algoritmi ma
ci sono versioni statiche e dinamiche di
l’algoritmo di Huffman e le persone lo sono
facendo applicazioni di compressione fpga ma loro
algoritmi di compressione
in generale che fai
software che utilizza Huffman dinamico
gli schemi sono più efficaci con
compressione ma sono estremamente
difficile da mappare all’hardware perché
usano strutture dinamiche eppure questo è
il tipo di codice che in teoria va bene
in realtà nella pratica che possiamo esprimere
nella nostra lingua e se il nostro compilatore è
in grado di codificarlo è in grado di implementarlo
beh, possiamo effettivamente usarne uno migliore
algoritmo quindi penso che questo sia un esempio
delle possibilità di cui stiamo usando
astrazioni di livello superiore forse no
contro-intuitivamente si può forse ottenere
prestazioni migliori utilizzando una migliore
algoritmo anche se l’operazione di
generazione del codice operativo per molto basso
roba di livello non è buono come farlo
a mano la capacità di utilizzare un più intelligente
l’algoritmo ad un livello elevato potrebbe effettivamente
essere più produttivi fino in fondo
line story quindi questa è una sola applicazione
che siamo abbastanza piuttosto felici
con andare avanti nel FPGA e il loro
numero di altri
progetto di metallo questo è un progetto al
da una squadra di noi che abbiamo qui
siamo al TJ Watson Research Center
in Yorktown Heights New York questo è il
IBM Research Lab principale quindi inizierò
dicendoti qualcosa che già
sapere quale è nell’ultimo decennio o in
gli ultimi otto o nove anni fa
il ridimensionamento della frequenza è arrivato praticamente a
stop le velocità di clock sui chip del computer sono
non sta andando molto più veloce e
quindi l’unico modo per migliorare le prestazioni
con chip che vanno avanti per sfruttare il
più transistor è da sfruttare
parallelismo e così siamo entrati nel
errore di area multi-core che siamo tutti
familiarità quindi lasciatemi iniziare
facendo domande a quante persone qui
hanno programmato esplicitamente per
multi-core con discussioni o qualsiasi altro
parallelo così quasi tutti nella stanza
ha programmato per multi-core e I
assumere da un multi-core intendi
qualcosa come il pacchetto Intel x86, ovviamente
multicore su piccola scala una cosa che
potreste essere a conoscenza di è negli ultimi pochi
gli anni diventano molto caldi è che ci sono
molto più alto grado di multicore chiamato
GPU di chip grafici e oltre l’ultimo
specialmente negli ultimi tre o quattro
anni questi sono diventati molto popolari
qui invece di avere qualche due o 48
corde abbiamo diverse centinaia di core
forse migliaia di thread hardware
che può essere eseguito contemporaneamente e persone
ho capito che per molti carichi di lavoro
sai che è molto più efficiente e
puoi ottenere molta più velocità e
parallelismo programmando con la GPU
e così abbiamo visto la nascita di GPGPU
utilizzo di gpus per l’elaborazione generica
quante persone nella stanza hanno fatto
Programma di programmazione GPGPU generale
computazione di scopo su GPU tutto bene noi
avere un pozzo in modo che le GPU siano abbastanza
soluzione radicale quindi forse per te
ma se vuoi diventare ancora più radicale
di una GPU nel mondo in cui abbiamo
conosci vincoli di potenza molto rigidi e
le difficoltà con il ridimensionamento è possibile
in realtà progettare il proprio hardware quindi se
in realtà vuoi progettare il tuo
ASIC proprio chip è necessario un sacco di
soldi e molto tempo e molto
competenza fpgas il nostro campo programmabile
array di gate questo è fondamentalmente l’hardware
hardware programmabile dove puoi
creare un design hardware e dinamicamente
caricato su un chip ed efficacemente
una barriera d’ingresso inferiore per progettare la tua
hardware e non funziona così veloce e
non è così denso come un ASIC personalizzato ma
è un modo per prototipare rapidamente
hardware e una volta che puoi progettare il tuo
proprio hardware hai la tua libertà tu
può sfruttare un bit estremamente massiccio
strutture parallele se puoi farle
puoi liberarti di molte interpretazioni
in alto non devi preoccuparti
gerarchie e cose del sistema di memoria se
così se puoi progettare l’hardware
abbinare la tua applicazione si può ottenere molto
prestazioni migliori come so nella stanza
il programma non utilizzava FPGA 3, quindi è così
in realtà mi sarei aspettato di più
fare GPU in fpgas ma non in questa stanza
quindi questo è il mondo in cui andremo
per quelli di voi che non hanno usato GPU
o FPGA che ti starai chiedendo
davvero bisogno di preoccuparsi di questo perché farlo
devi preoccuparti di ciò lasciami iniziare
da alcuni esempi motivanti che siamo
visto da molti dei nostri clienti e da me
credi che vedrai sempre di più
nei primi anni quindi ci sono
alcuni modelli di come potremmo voler usare
questi dispositivi specializzati forse il
il più facile da capire è l’utilizzo di una GPU
o un FPGA come acceleratore quindi l’ idea
ecco che c’è una parte del tuo
carico di lavoro che, per qualche motivo, forse
è in grande parallelo che conosci i dati
calcolo in virgola mobile parallelo
quale GPU può essere fatta molto
in modo efficiente può farlo prestazioni più elevate
potenza inferiore / flop o forse c’è
qualche altro tipo di specialista
elaborazione che un FPGA può semplicemente fare
più efficiente della CPU e quindi a
la cosa naturale da fare è solo prendere parte di
il tuo calcolo su cui è in esecuzione
la tua cpu lo spedisce per usare i dispositivi
e accelerare o correre veloce o correre di più
potere efficiente spedire i risultati indietro
e così via, così infettiva, sei tu
usando questo come un motore per scaricare alcuni
parte del tuo calcolo è questo
estremamente popolare nel mondo HPC per
cose come le compagnie petrolifere che fanno il sisma
simulazioni anche nel mondo finanziario se
guardi il supercomputer top 500
elenca molti dei più alti
eseguire i supercomputer HPC ora
include GPU su ogni nodo semplicemente
perché sono i dati più potenti
motori a virgola mobile paralleli che sono
disponibile oggi e ne vediamo molti altri
applicazioni che possono sfruttare FPGA come
bene quando iniziamo a parlare di FPGA
ci sono hanno altri vantaggi per
che si prestano ad altri tipi di
modelli di implementazione
uno che è molto popolare sta usando FPGA
in ciò che chiamiamo un’appliance di rete
piattaforma così FPGA puoi collegare il tuo I / O
come Ethernet o bus seriale o
diciamo la tua rete direttamente nel
FPGA e ora puoi progettare il tuo
hardware in modo da poter progettare il proprio
protocollo di rete da sfruttare molto basso
struttura di livello non devi preoccuparti
a proposito di gestire un funzionamento personalizzato
stack di sistema e così via in modo da poter ottenere
rotazione estremamente bassa e
throughput molto elevato sulla rete
livello di larghezza di banda finchè fondamentalmente
spostando il tuo calcolo molto vicino a
la tua interfaccia di rete personalizzata e così via
ci sono molti FPGA usati
molto nelle industrie delle telecomunicazioni di
networking delle industrie finanziarie
applicazioni efficaci per bassa latenza
e applicazioni di rete ad alto rendimento
l’idea qui è quella più importante
del calcolo entrerà e uscirà
la rete direttamente nell’FPGA
occasionalmente forse alcuni
calcolo o controllo generico
la logica verrà eseguita sul main
sistema ma l’ FPGA è il principale locus di
controllo del tuo calcolo un altro
modello che è una specie della stessa idea
utilizzando ciò che chiamiamo appliance di archiviazione così
in questo caso l’idea è se puoi metterlo
un FPGA molto vicino al tuo spazio di archiviazione e
se puoi architettare il tuo sistema
larghezza di banda molto più alta tra la tua
dispositivi di archiviazione dicono che il tuo flash o
disco a stato solido o anche il tuo normale
disco puoi mettere la logica di elaborazione
molto vicino a quello che puoi ottenere più in alto
larghezza di banda e quindi se si può fare un po ‘di
la tua elaborazione di query molto vicino al
archiviazione è possibile ridurre la larghezza di banda
richieste sul tuo bus di sistema e puoi farlo
fondamentalmente scarica molti dei tuoi dati
elaborazione nel tuo mondo dei Big Data molto
molto vicino al deposito quindi questo è ciò che noi
chiamare questa piattaforma di appliance di archiviazione
è molto popolare in questo momento nei big data
applicazioni di database e così via e
ha solo dei vantaggi che l’IBM ha certamente
alcune offerte in questo come in altri
aziende quindi spero di averti convinto
che ci sono buone ragioni e da usare
queste architetture e stiamo vedendo
sempre più di questi arrivano ancora
la maggior parte di voi nella stanza aveva pochissimo
o nessuna esperienza con questo
ragioni per cui è perché fare questo tipo
di programmazione eterogenea non è molto
accessibile
gli ingegneri del software mainstream oggi uno
dei motivi è che ognuno di questi
i dispositivi richiedono una programmazione diversa
di modello in questo momento siamo tutti molto
buona programmazione ad alto livello
lingue come Java o Python o
qualunque cosa per le nostre CPU e forniscono a
molto alto livello di distrazione se tu
vuoi un programma GPU generico
lo stato dell’arte attuale è da utilizzare
qualcosa come khuda aur opencl questi
sono abbastanza bassi livelli c api e sottoinsiemi
di c che ti permettono di usare la GPU ma
tu metti ancora il programma in un molto
livello più basso di astrazione devi
impara un nuovo modello di programmazione che hai
gestire manualmente la comunicazione tra
dispositivi devi essere molto attento
su come strutturare il tuo calcolo a
utilizzare la GPU in modo efficace così la sua base ma
relativamente doloroso soprattutto rispetto
alle nostre esperienze e programmazione
tuttavia processori generici
programmare GPU rende è come il paradiso
rispetto alla programmazione di FPGA quelli di
tu che l’hai fatto, non lo sai
prima di tutto programmando FPGA la maggior parte di
le persone che programmano FPGA sono loro
in realtà non dire che programmano così tu
in realtà non programmare l’hardware
progetta il tuo progettista hardware e tu
crea un disegno e carichi il disegno
sul chip e non abbiamo nemmeno pensare
ed è per questo che questi sono design
lingue VHDL e verilog e c’è a
molto questi sono molto estremamente di basso livello
in pratica i linguaggi di progettazione del circuito
che descrivi il tuo calcolo non lo fai
avere benefici sull’FPGA di un
sistema operativo o driver di dispositivo o
gestori della memoria o una qualsiasi delle cose che noi
aspettati di conoscere il software di sistema
che rende i programmi di scrittura facili così
è davvero un livello molto basso molto
esperienza dolorosa rispetto alla scrittura
software per poter utilizzare un FPGA in a
sistema eterogeneo, quindi cosa siamo
provare a fare è vedere quanto possiamo fare
per sistemare questo così l’obiettivo del nostro progetto
si chiama metallo liquido e noi abbiamo un
linguaggio di programmazione chiamato lime e il nostro
l’obiettivo è davvero quello di provare a usare
sistemi eterogenei con un mix di
questi tipi di dispositivi accessibili a
programmatore di software engineer mainstream
in modo che la programmazione di un eterogeneo
il sistema con una GPU o FPGA non è quello
molto più difficile di come è la programmazione in
un linguaggio di alto livello su una CPU oggi
e pensiamo che se fossimo in grado di farlo
questo sai che possiamo farcela
piattaforme più accessibili e il
piattaforme stanno arrivando in questo momento molto
piccole élite di clienti li stanno usando
ci aspettiamo che a causa delle tendenze in
la fisica nei giusti benefici di
usando queste architetture ci sarà
sempre più richiesta vediamo che sta arrivando
così cercheremo di farcela
più accessibile e più simile al mainstream
programmazione quindi la nostra strategia è che abbiamo un
una sola lingua chiamata lime che io sono
andando a descrivere in dettaglio che
sembra molto simile a Java abbiamo a
piuttosto ricca tool chain per cercare di rendere
la programmazione in linea ricorda la programmazione
in Java per quanto riguarda la ricchezza del
strumenti e ti mostreremo alcuni dei
dettagli di come andiamo e anche noi
prova a fornire specialmente runtime
sistemi su cui viene eseguito il sistema
nascondere molti dei dettagli di basso livello così
quello sarà il contenuto del discorso
sta descrivendo il nostro approccio a questo
prima di andare su quella diapositiva ero io lo farò
Salta tutte le domande prima di entrare nel
dettagli del modello di programmazione tutti
giusto quindi parliamo di metallo liquido
quindi la nostra filosofia è che c’è un
linea di programmazione singola ma
non garantiremo che possiamo
compilare tutto di lime per ogni dispositivo così
ci saranno diversi sottoinsiemi del
linguaggio che può essere compilato per ciascuno
dispositivo in base ai vincoli di
il dispositivo quindi quello che abbiamo è la linea
il compilatore ne sputerà più di uno
versione di diverso è un compito basato
modello di programma di diversi compiti
a seconda del tipo di dispositivi che può
sfruttare per ogni pezzo di codice in modo tutto
il codice può essere implementato per l’esecuzione
una JVM che abbiamo, possiamo sputare JVM
bytecode ed esegui su una CPU in modo che tu possa
scrivere un programma completo usando uno qualsiasi dei
costrutti linguistici in esecuzione
bytecode se vuoi eseguire un particolare
compito o aspetto particolare di routine o a
particolare parte del codice su un dispositivo tale
come una GPU o un FPGA il compilatore può o
potrebbe non essere in grado di generare codice e così via
la filosofia è che il compilatore tu
puoi scrivere codice generale e poi il
il compilatore ha esclusioni del compilatore
darà un sacco di feedback sulle ragioni
perché non è in grado di compilare a
particolare pezzo di codice fino ad a
dispositivo e cerchiamo di renderlo facile
possibile quindi per voi di refactoring tuo
codice per soddisfare il compilatore
dì al compilatore più informazioni
ha bisogno di sapere per generare
buon codice per un particolare dispositivo e
Avrò alcuni dettagli di ciò che sembra
così che cosa è calce calce ad un livello molto alto
il livello è molto simile a Java, ma aggiungiamo
un paio di altri costrutti che consentono
per compilare questi dispositivi
che fondamentalmente si dividono in due categorie
uno è isolamento, quindi l’isolamento è extra
informazioni al codice Java che ci consente
per spostare il calcolo intorno e mostrerò
alcuni dei calcoli costruiscono il
parola chiave locale e tipi immutabili che
applicare isolamento su parti del
linguaggio che ci permette di accelerarlo
e poi un sacco di si tratta di astratta
parallelismo quindi siamo in ordine per il
compilatore da sfruttare altamente parallelo
hardware e per spostarsi e programmare
il calcolo attorno ad esso deve avere un
ottima idea del parallelismo così
non stiamo prendendo un super compilatore
approccio non stiamo chiedendo al compilatore
dedurre il parallelismo dal segreto
codice sequenziale o qualcosa del genere
invece quello che abbiamo è giusto
costrutti di alto livello nella lingua
che il programmatore può usare per dire al
compilatore questo è questo stile di
parallelismo e una volta che le cose digitano
il compilatore sa bene è un modo per
il programmatore di comunicare in parallelo
strutture al compilatore e poi il
il compilatore può mapparli verso il basso
hardware quindi descriverò questi in a
un po ‘più di dettaglio, quindi il nostro sviluppo
esperienza come ho detto è l’idea è
siamo molto grandi su un incrementale
migrazione refactoring incrementale così il
idea è che si prototipo il tuo codice
fondamentalmente in Java in modo da poter iniziare
solo ottenendo una versione funzionale che
funziona in Java e per fare questo è it’s
abbiamo un ID basato sulle clip
ID ti offre tutti i vantaggi del
Ambiente di sviluppo Java incluso
editori e debugging e così via e
allora vogliamo che tu cresca in modo incrementale
migrare le parti del codice che si desidera
per accelerare aggiungendo questi lime
costrutti linguistici che esprimono il
parallelismo che il compilatore deve sapere
tutte le domande ancora prima di immergermi nel
dettagli
la faccia legata sembra una più bassa
Il 10 di Presidente è abbastanza
diverso da x10 sì, posso averne un po ‘
maggiori dettagli ho lavorato su dieci
così è un mi permetta di presentare quello che noi
ho quindi potuto descrivere una cosa a
un livello molto alto a cui non stiamo provando
risolvere il problema di calcolo distribuito
non stiamo cercando di esprimere il clust
calcolo del cluster di memoria distribuito
che è l’obiettivo principale di X 10, quindi siamo
non cercando di scalare in un gruppo di
workstation i nostri costrutti sono davvero
progettato le idee che hai un singolo
nodo con dispositivi collegati e di gestione
i dettagli di particolari dispositivi che siamo
non risolvere il problema di come vorresti
comunicare attraverso i nodi per farlo tu
userebbe il messaggio che passa o x 10 o
alcuni o qualche altro modello, ma quello è
al di fuori della portata di ciò che stiamo provando
per risolvere qualsiasi altra buona mossa
cose
per favore alzati um così è diverso per
diverse piattaforme fondamentalmente ci saranno
essere un set di piattaforme che supportiamo
e possiamo gestirli così per le GPU
abbiamo praticamente compilato giù per opencl
che è uno standard per l’hardware della GPU
che è supportato più o meno da
nvidia e ati e intel e tutto il
i venditori di fpg sono davvero solo
due venditori che dominano il mercato
che sono xilinx in Alterra e noi abbiamo
supporto per entrambe le loro catene di strumenti così come
per quanto riguarda GPU e FPGA
abbiamo coperto la maggior parte del mondo
questo è il nostro problema, quindi è quello che facciamo
per una vita sì, ecco cosa
questo è quello che è il motivo per cui ciò che facciamo
per il resto della mia vita c’è qualcos’altro
giusto quindi proviamo a provare
uscire così penso che il modo migliore per provare
descrivere almeno il sapore della
linguaggio di programmazione in un brevissimo
parlare è semplicemente camminando attraverso un
esempio quindi sto solo andando a camminare
attraverso un semplice esempio che è un fine
simulazione corpo anche io faccio vedere una demo
più tardi quindi considereremo solo uno
iterazione di una simulazione del corpo finale il
idee qui abbiamo un sacco di particelle
forse hai familiarità con questo tipo
di calcoli queste particelle potrebbero essere
pensa di dire stelle in una galassia o forse
sono molecole in un fluido e loro
interagire con forza gravità o piaghe
o qualche altra forza fisica e noi
fondamentalmente hanno un calcolo a N quadrato
dove in ogni momento passo ogni particella
eserciterà forza su ogni altra particella
secondo una legge fisica e così
ce ne sono due, ce ne sono fondamentalmente tre
passi nel calcolo che generi
le posizioni delle particelle te
calcolare la forza su ogni tazza su ciascuno
particella e questa è la parte costosa
del calcolo questo è l’ingenuo
algoritmi o N al quadrato quindi ogni particella
effettua ogni altra particella e poi
c’è un accumulatore di forza una volta che hai
calcolato tutte le forze in cui le sommi
e poi ti sposterai le particelle
la loro nuova posizione e poi ripetere così se
volevamo fare il modello dell’acceleratore
ha sicuramente un senso molto in alto
livello dal momento che il calcolo della forza è il
N al quadrato calcolo il resto di loro
siamo
la volontà lineare vorremmo iniziare
dicendo che vogliamo accelerare il
computazionalmente il calcolo della forza
ed è quello che ti guiderò così
inizi come ho detto che avresti iniziato così
immaginiamo di avere già Java
codice per fare questo e iniziato con
qualcosa che assomiglia al codice Java
Classe N-Body la prima cosa che facciamo è noi
devo dire al compilatore tutto bene
avremo un compito parallelo
struttura quindi dobbiamo dirlo al vino
compilatore okay abbiamo tre compiti qui
questa è la struttura del nostro calcolo
e questi sono i confini a cui
vorremmo spostare il codice
quindi il modo in cui lo facciamo in lime è noi
applica un operatore di attività che è un nuovo
parola chiave a una dichiarazione di metodo di a
metodo java in modo che il codice evidenziato in
verde qui sta dicendo che cosa stiamo facendo è
stiamo impostando tre attività che stiamo andando
per attivare il metodo del generatore di particelle
in un compito il metodo di calcolo della forza
in un compito e l’accumulatore di forza
metodo in un compito e questi sono giusti
i normali metodi Java ignorano alcuni dei
roba di array strani per ora e poi noi
avere l’operatore di connessione che è il
è più grande di questo
virtualizza la comunicazione così è
dicendo che l’output del primo compito
il generatore di particelle sarà alimentato come
l’input per la seconda task force
calcolo l’output di tale attività sarà
essere alimentato nel terzo test che è il
accumulatore di conteggio di forza ora così così che cosa
abbiamo qui è molto un test
flusso di dati a grana grossa parallela
modello di programmazione e questo è almeno
il livello esterno del parallelismo con cui
esprimerai il tuo calcolo così per
il resto del discorso penso almeno su
questo esempio mi concentrerò un po ‘su
il modello GPU di fare i dati paralleli
calcolo della forza ma una cosa che voglio
sottolineare a questo punto è questo compito
il modello parallelo è molto in
spirito di progettazione hardware dove vedi
grafici di flusso di dati di layup di blocchi e
ci sono costrutti nel linguaggio per
fare split e join e matching e
tasso di corrispondenza e così via così spesso
per l’hardware quello che farai è che lo farai
impostare un grafo delle attività molto ricco
che mappa fino all’hardware e questo è
il tipo di cosa che funziona bene
l’hardware causa fondamentalmente ogni attività se
è in una pipeline come questa corrisponde
per un ciclo di pipeline e a
progettazione di pipeline e quindi è molto in
lo stile di come le persone fanno l’hardware
design
Spero sia chiaro che ne parlerò a
poche altre diapositive e poi chiarire
tutto ciò che deve essere chiarito così
una volta identificato il grafico dell’attività
che è quello che abbiamo fatto qui sul
programmatore dirà al compilatore che io
voglio spostare una determinata attività e
lo facciamo con questi trasferimenti
parentesi e questo è fondamentalmente dicendo
il compilatore che in questo caso voglio
questo compito di computazione della forza deve essere
accelerato e quindi a seconda di come
ho configurato il compilatore
toolchain deciderà quale
back end ci proverò quindi andiamo
supponiamo per il momento per questa cosa
che ho configurato le mie catene di strumenti
compiti accelerati il compilatore è giusto
andando a provare presto a inviare il
compito accelerato per la GPU ora che cosa
succede una volta che inizi a usarli
assicurati che alcuni di questi siano al seno
entrano in vigore regole di controllo del tipo più severe
giocare così a questo punto lo farà il compilatore
inizia a controllare questa forza
compito di calcolo non solo che è
linea legale ma che in realtà obbedisce
i limiti che è necessario conoscere
per spedirlo alla GPU quindi
particolare le proprietà i
menzionato prima sull’isolamento e
parallelismo e così in particolare lo farai
devo iniziare a dire al compilatore
informazioni sul calcolo della forza
compito quindi entrerò un po ‘oltre
le prossime slide ma solo per
mostra la dichiarazione del metodo in
in particolare ho detto che questo locale sta andando
fondamentalmente far rispettare questa forza
il calcolo è isolato, quindi non abbiamo
un modello di memoria condivisa generale ogni attività
gira in un abito spaziale isolato
non possono leggere e scrivere accesso casuale
memoria attraverso di esso l’unica condivisione di
stato tra le attività è attraverso il
input e output e quindi il locale
le verifiche di garanzia del qualificatore dice al
compilatore per verificare che quella proprietà
sostiene che abbiamo anche queste immutabilità
costrutti su cui descriverò un po ‘
la prossima diapositiva credo che sì, andiamo
guarda il codice un po ‘di più
cosa dobbiamo fare per ottenere
questo calcolo funziona su una GPU quindi io
ha menzionato il locale che il locale dice questo
è un compito isolato ciò che significa è
fondamentalmente il compilatore a questo punto è
andando a controllare che gli ingressi e
fornisce a questo compito i nostri valori
il loro immutabile in modo che non possano essere
scritto, scritto, scritto o letto
o osservare a cambiare da altre parti di
il sistema mentre è in transito siamo
andando a rafforzare l’immutabilità che
fondamentalmente ci dice questo valore di proprietà
per gli ingressi e le uscite in modo che divertente
sintassi di array che abbiamo sugli input e
uscite del calcolo della forza in pratica
questo sta dicendo che l’ input per il
forza il metodo di calcolo che siamo
trasformarsi in un compito è un array di quattro
tuple di float quindi è un due
array dimensionale ma è immutabile così
nessun altro sta per scarabocchiare
dentro mentre questa attività è in esecuzione e
restituirà una serie di tre
tuple che le forze che è anche
immutabile dice anche la parola chiave locale
il compilatore per verificare che questo sia
il calcolo è isolato in modo transitorio
alcuni particolari non possono leggere o scrivere alcuno
stato globale mutabile così con quello
informazioni che il compilatore sa che è
sicuro per spostare questo compito e che
non cambierà la semantica del
programma in qualsiasi modo ora anche noi abbiamo
questo caso usando l’operatore della mappa @
firmare quindi quello che faremo è questo
è un’applicazione parallela di dati di a
la funzione è la stessa della mappa se
familiare con la matematica e gli elenchi o qualsiasi
altri linguaggi funzionali che è
praticamente dicendo prendi questa funzione
questo caso la funzione di forza e applicare
a ogni particella per ogni elemento di
in questo caso un array così fondamentalmente questo
dice al compilatore che abbiamo un dato
calcolo parallelo e ancora una volta
usando lo stesso tipo di annotazioni locali
e immutabilità garantiamo che lì
sono in loop senza effetto
dipendenze garantiamo che questo
in realtà è un calcolo parallelo di dati
e che siamo connettivi se lo fossimo
correndo su una CPU potremmo eseguirli
in qualsiasi ordine e ciò significa che possiamo
utilizzare l’hardware GPU possiamo accenderlo
in parallelo e non dobbiamo preoccuparci
sulla condivisione o sulla semantica, quindi questo
è fondamentalmente il tipo che controlla qui
dice al compilatore okay questo è sicuro
paralizzare e non cambierà la semantica
ora se hai violato questo tipo di controllo
riceverai feedback durante l’IDE
dicendo questo questo metodo deve essere
locale o questo parametro non è un valore
o così avanti e così il processo di andare
dal codice Java vanilla a qualcosa di simile
questo che può dire che può essere
accelerato è efficacemente un dialogo
con il compilatore dove i compilatori
inizia a darti degli avvertimenti e tu puoi
vai dentro e sistemali
e in realtà non è di solito se il tuo
l’algoritmo è parallelo pensiamo che non lo sia
non a Burnham e per farlo io così
menzionato l’operatore della mappa questo è un modo
di descrivere le operazioni parallele dei dati
noi conosciamo abbastanza bene il
la sintassi è davvero piuttosto semplice, ma è così
ci consente di esprimere un sacco di schemi
delle operazioni parallele dei dati così possiamo
mappa un operatore così quando diciamo che C
è uguale a a più B che sta mappando il +
operatore per il superamento degli array a
più B e questo fa quello che ti aspetti
come illustrato qui è che farà un
element wise edition dell’array a e
B producendo una matrice vedi che ce ne sono molti
altri modelli che puoi usare per fare i dati
parallelamente così puoi farlo puoi applicare
metodi in parallelo quindi questo float C
equivale a mappare la funzione di aggiunta a e B è
esattamente come la mappatura l’operatore
e poi puoi anche fare sollevamento o
promozione o Kareem che è per esempio
puoi aggiungerne uno a ciascun elemento dell’array
e usando questo segno di sterlina è
fondamentalmente dicendo alzare questo valore scalare
in array come argomento per la mappa
funzione così che sono le basi dei dati
calcolo parallelo spero lo sia stato
cancella tutte le domande prima di andare a destra
quindi quello che abbiamo qui ti ho mostrato il
codice per il calcolo di n-body quelli
sono se avessi programmato con opencl o
CUDA sai che questo è molto più alto
livello e molto più astratto rispetto al
stato attuale della programmazione
usando in questo caso opencl dove hai
fare un sacco di livello di sistema q istituito e
compilazione e gestione e manuale
comunicazione sai che stiamo programmando
un livello molto più alto di astrazione per
la GPU um se siamo programmati per il
FPGA è se siamo un po ‘più alti
livello di astrazione per le GPU in cui ci troviamo
incredibili ordini di grandezza molto
più alto livello di astrazione di te
scriverei per un FPGA se lo sei
programmare un HDL o Verilog lo sai
anche una logica utente molto semplice che
si dovrebbe esprimere in Java si espande
macchine a stati molto complicati con
fili di guida di basso livello e concorrenza
e controllare i segnali e i tempi
in verilog è davvero un livello molto basso
modello di programma solo per esprimere l’utente
logica ed espressione della logica dell’utente in a
sistema eterogeneo non è davvero il
parte difficile è la parte difficile è la gestione del
comunicazione tra FPGA e il
computer host non è come si prende un
FPGA e collegalo alla tua USB e e
e il sistema operativo riconosce il
dispositivo e si inizia a usarlo
in modo trasparente sai che questo è davvero un
pezzo grezzo di silicio non viene con
un sistema operativo non viene fornito
qualsiasi cosa tu debba scrivere o trovare o
acquisire l’IP per implementare il dispositivo
l’intimo i driver sull’hardware
e avere una sorta di sistema di runtime
sull’hardware per fare tutto il routing
tra questo e così è davvero un
enorme quantità di lavoro solo per costruire
l’infrastruttura di comunicazione di base
tra un dispositivo e una CPU e così via
gentiluomo ha fatto una domanda tu lo sai
è il tipo di cosa che abbiamo fatto
e l’abbiamo fatto una volta e possiamo farlo
una volta e poi il nostro compilatore può riutilizzarlo
quindi abbiamo creato il sistema di runtime
che gestisce la nostra comunicazione
il compilatore sa come usarlo così
fondamentalmente il programmatore non deve
preoccupati e non devi saperlo
questo e noi pensiamo che sia tremendo
valore rispetto all’alternativa di
facendo questo da zero si
quindi stiamo compilando Verilog
compilazione diretta su hardware e
quindi il nostro hardware fondamentalmente i nostri circuiti
l’ora runtime system lo sta chiamando a
la macchina virtuale è forse un po ‘troppo
glorioso è un mucchio di segnali con
segnali di controllo e logica di arbitraggio
fondamentalmente per instradare i dati dai pin a
logica dell’utente in modo da prendere il nostro utente
logica che fondamentalmente espone il numero
di fili e quindi questo è ciò che è nostro
compilatore intendo il programmatore
non finisce mai il programma sono solo scritture
locale in Fubar cosa succede al
il compilatore che conosci genera Verilog
che espone un mucchio di fili il nostro strumento
catena aggancia quei fili ai fili
dei nostri segnali interni e quindi i nostri segnali
parlare di un protocollo per dire PCIe al nostro
i padroni di casa che abbiamo guidato io che conosco
come parlare allo stesso protocollo sì
intendo dire che è davvero un autobus
e e controllano la logica qualsiasi altro
domande così pensiamo che tu sappia comparato
alle alternative di programmazione FPGA
pensiamo di avere una storia molto avvincente
per quanto riguarda la produttività, stiamo risparmiando a
enorme quantità di lavoro appena dentro
scrivendo il codice ma molta della storia
qui non si tratta solo del codice
davvero la catena di strumenti e quali
soprattutto per le fpg, ma anche se pari
per GPUs dove gli strumenti e il
catena di strumenti e il processo da dove
usi questi dispositivi in questo momento
stato dell’arte lo sai molto
primitivo rispetto a quello a cui siamo abituati
con il software è quasi come andare
indietro nel tempo prima del prima
invenzione di Fortran e prova a mostrarti
sai un po ‘dei nostri strumenti
e quale sarebbe l’alternativa
la pratica corrente così per esempio
compilando il codice che conosci nel nostro
sistema fondamentalmente compilando il codice noi
avere finestre e lanciatori di Eclipse così
tu apriresti un nostro ID che vorresti
aprire un wizard di compilatore specializzato
e che ti guiderà attraverso come
configura la tua compilazione
per l’ FPGA e poi fai clic su Compila
conosci l’alternativa usando lo strumento
catena come fanno le persone in questo momento
davvero relativamente doloroso devi
utilizzare più strumenti è tutto il fornitore
specifico devi scrivere molto
logica e banco di prova solo per guidare il tuo
logica per testarlo funziona con i simulatori
e così via e tu sai che è un
processo molto lungo noioso che prende un
molta competenza e questo fa parte del
ragione questa è una grande parte del
motivo per cui è molto difficile iniziare
usando FPGA sai che ci vuole un sacco di tempo
esperienza solo per imparare un particolare
catena di strumenti dei fornitori e quindi se si impara
la catena di strumenti xilinx che non lo è
necessario per aiutarti
imparare la catena di strumenti di Alterra o se
Intel uscirà con
qualcosa quindi è tutto ma tu lo sai
completamente diverso da quello che siamo
abituato a software in cui è quasi
come tornare indietro nel tempo ai giorni
prima di programmare i linguaggi così una volta
di nuovo per quanto riguarda la produttività ti penso
sappiamo che lo stiamo rendendo molto più facile
cose che richiederebbero almeno giorni
se non di più per imparare come fare e a
configura e lavora , conosci noi
nascondersi dietro un mago e il sistema
guida automaticamente il debugging a
storia simile che sai nel nostro sistema se
la nostra compilazione se il nostro sistema è implementato
correttamente la semantica del programma
non cambiare se li esegui
se lo si esegue sul codice moto posteriore
fine o se lo si esegue su un
acceleratore che il programma dovrebbe produrre
le stesse identiche risposte lunghe quanto le nostre
il sistema è corretto e speriamo che sia così
puoi eseguire il debug della logica utente semplicemente
eseguendo il debug come se si stesse eseguendo il debug
Codice Java, quindi abbiamo un maggiordomo Eclipse D
integrato in eclissi dove puoi
imposta punti di interruzione e introspezione e fallo
tutte le cose belle come se tu fossi
eseguendo il debug del codice Java, conosci le persone
fare con la progettazione hardware oggi fondamentalmente
è che guardano le forme d’onda e questo è
il livello di debugging che è il
alternativa oggi così sai che siamo a
abbastanza più alto di quello ora
noi facciamo i nostri strumenti ti permetterà di correre
su un simulatore molto facile e produrre
forma d’onda quindi se vuoi, per esempio
guarda le prestazioni o guarda cosa c’è
andando avanti puoi raggiungere il livello di flusso
informazioni ma per la stragrande maggioranza
programma è anticipare che lo farebbero
non hanno mai a sapere che si sa che
ci sono cose come orologi e
segnali e tempi e potrebbero fare il
debugging ad un livello molto più alto
astrazione ancora una volta l’intero tema
qui sta cercando di portare la pratica corrente
in questo mondo molto più vicino a ciò che a
il pubblico mainstream sarebbe a suo agio
con il codice in esecuzione è molto simile
storia che sai correre correndo
pulsante l’ID invece di imparare ancora
un altro strumento che è quello che hai da
fare per caricare i file bit su un FPGA e
eseguirli e così via così c’è
solo una tremenda lacuna nell’esperienza
di usare una moderna catena di strumenti contro cosa
lo stato attuale dell’arte è e
usando questi dispositivi oggi la sintesi è così
per compilare un file Verilog o
File VHDL su un circuito che hai eseguito
uno strumento di sintesi questo è un fornitore
strumento che fondamentalmente stabilisce la logica
fa il design e cerca di obbedire
cerca di soddisfare i vincoli di orologio e
vincoli di layout e pianificazione del pavimento
e vieni con il design così questo è
imparando ancora un altro strumento questo richiede a
tempo molto lungo per eseguire la sintesi anche
i moduli logici utente più piccoli ne richiedono molti
i minuti in esecuzione per i grandi progetti possono richiedere
ore spesso eseguirai una sintesi e
fallirà solo perché lo strumento
non era in grado di soddisfare un certo tempismo
vincoli o alcuni vincoli di clock così
questa è un’altra area dove possiamo
cercare di elevare il livello nell’esperienza
abbiamo deciso di farlo da un cloud
servizio che chiamiamo lime Forge così ora
per lo sviluppo regolare puoi sviluppare
semplicemente sul tuo desktop puoi correre
il simulatore sul desktop e come fare
tutto il tuo sviluppo quando sei
in realtà pronto a schierarsi su un fisico
dispositivo è necessario eseguire la sintesi
strumento necessario per generare il fisico
file bit da caricare sul dispositivo e ora
devi fare sintesi ciò che facciamo è
per rendere questo posto paghiamo le pieghe che abbiamo
implementato un servizio cloud che
fondamentalmente tu mandi il tuo lavoro dove tu
spedisci la tua logica e il programma a
il cloud e il nostro cloud ora funzioneranno
tutto ciò che serve per cercare di sintetizzare
questo fondamentalmente lo sarà nel
lo sfondo genererà il cloud a
gruppo di diversi lavori di sintesi e
cercare diverse frequenze di clock
prova a massimizzare la frequenza del tuo orologio
ci sono molti modi di accordare
vincoli al da
strumento in modo che la nostra nuvola cercherà attraverso
diversi vincoli e applicare
competenza che sono gli esperti del nostro
squadra ha imparato nel corso degli anni su come
per guidare questi strumenti così in pratica proviamo
avere un po ‘intelligente
l’intelligenza non è la parola giusta
ma un sistema piuttosto avanzato nel
sfondo utilizzando molte risorse per
cercare di ottenere i migliori risultati dal
strumento di sintesi e ancora una volta prendere il
onere di imparare come guidare questo
strumento correttamente e come ottimizzarlo
strumento lontano dal programmatore e provare a
fallo automaticamente e lo facciamo
il cloud perché questa è una risorsa
intensivo e quindi è per questo che lo coltiviamo
fuori così come problemi di licenza è
più facile installare una sola copia di
strumenti di vendita così è quello che direi a
Almeno ho provato a darti un sapore
quello che stiamo andando per almeno quattro
esperienza degli sviluppatori e qual è il sistema
è come ho potuto parlare un po ‘di
l’implementazione di eventuali domande a questo
prima che noi abbiamo abbiamo abbiamo
vendita sì nessuna abilità delle persone che hai
anni ormai è lasciare andare via il rosa o
diciamo che il bene pertinente saremo a
un po ‘come una programmazione domenicale o tu
potrei pensarci vorrei dire di si
li metteremo fuori dalla tua attività
conosco e penso per il vasto
maggioranza se avremo successo lo faremo
ci saranno sempre penso ragioni
perché vuoi scendere al più basso
level design per alcune parti del tuo codice
o per alcune applicazioni fino al nostro
il sistema è interessato ce ne sono alcuni
ragioni per cui potresti volerlo, così abbiamo
ha una programmazione di altissimo livello
linguaggio lo abbiamo reso molto facile e
sicuro di esprimere il parallelismo, ma abbiamo
tolto parte del potere di esprimere
forme arbitrarie di parallelismo dal
programmatore quindi non puoi esprimere
strutture concorrenti arbitrarie nel nostro
lingua quindi se vuoi scrivere un
design arbitrario con code che sono
comunicare su un orologio per livello di clock
e stai molto attento che non puoi esprimere un
online nella nostra linea
che così per quello devi cadere
giù ad un livello più basso e questo è per
esempio di come implementiamo il nostro runtime
sistema non abbiamo noi stessi la nostra traversa
non cibo per cani che noi facciamo cadere giù per la
altra cosa è solo la questione del
qual è la maturità del compilatore
in questo momento c’è un enorme divario
tra la nostra lingua di origine e cosa
stiamo compilando e il compilatore è
ancora relativamente immaturo rispetto a
compilazione in linguaggio assembly su a
CPU siamo anche quelli che hanno richiesto in pratica 30
anni di sviluppo sai che siamo
risolvere un problema molto più difficile o
i compilatori non sono ancora così maturi
sicuramente rinuncerai
probabilmente qualcosa se usi il nostro compilatore
entrambe le prestazioni in termini di orologio
ciclare un rendimento o un’area più probabile
i nostri progetti potrebbero non essere così tanto spazio
efficiente una cosa che abbiamo nella nostra
il sistema è ciò che chiamiamo lni su nativo
interfaccia in modo da esportare le interfacce
per cui puoi scrivere la tua logica e
Collegalo al nostro sistema in modo che sia possibile
usa il modello è se c’è una scrittura
tutto e se ce ne sono di meno
parti critiche per le prestazioni del tuo
progettare forse la registrazione o qualche controllo
struttura o qualche codice di debug o rass
codice che potresti voler scrivere nel nostro
sistema ma per qualcosa che è veramente
super prestazione critica che vorresti
scrivilo a mano e poi collegalo
il nostro sistema proprio come faresti tu
forse il codice nativo in Java oggi noi
può anche andare nell’altro modo in cui possiamo semplicemente
esportare Verilog dalla nostra catena di strumenti e
puoi prendere quel Verilog e farlo con esso
cosa vuoi così puoi usare il nostro
compilatore fondamentalmente come un retaggio alle porte
proprio come un livello superiore ce ne sono molti
della cosa del design e poi puoi collegarlo
nella propria infrastruttura e preoccupazione
su così può andare in qualsiasi modo dipende
su quanto dolore e quanto
performance che vuoi quindi lasciami parlare oh
si, dovrei andare a una demo, no?
così bene, non so che potrei pentirmi
dicendo che così come ho detto sono il
l’implementazione è qualcosa che chiamiamo a
lime virtual machine the line virtual
la macchina è fondamentalmente la nostra astrazione di
una macchina virtuale di un sistema operativo
e parti di esso funzioneranno sulla CPU e
parti di esso verranno eseguite su ciascun dispositivo e
fondamentalmente il lavoro della macchina virtuale
è prendere il carico del carico eseguirlo e
gestire la comunicazione tra
compiti diversi e quindi questo è fondamentalmente
tutto il nostro sistema runtime è molto
dello sforzo che abbiamo messo credo che lo farò
passare a una demo a questo punto così
in realtà tale calcolo n corpo che io
descritto è stato effettivamente eseguito bene
Ho tenuto il discorso così qui
sto eseguendo il calcolo di n-body
in questo momento è in esecuzione sulla JVM
e immagino il numero chiave da guardare
in questo momento sto ottenendo un Giga
flop un secondo e se guardi te
probabilmente riescono a malapena a discernere il movimento
delle particelle sta andando piuttosto lentamente
quindi posso dire al sistema di runtime di migrare
il calcolo della forza che nel mio codice
questo metodo di forze di calcolo è possibile
questo è un pannello esportato da un runtime
sistema e se diciamo al sistema di runtime
migrato in GPU quindi solo il nostro sistema
è stato prendere tutto lo stato di quello
l’esecuzione di attività lo spedisce alla GPU
collega tutti i segnali e i dati
emozioni in modo che i dati stiano andando
oltre alla GPU e ritorno per la forza
compito di calcolo e ora stiamo correndo
sulla GPU mi viene in mente
cinque gigaflops ora speriamo che tu possa farlo
Almeno vedere i dati in movimento, naturalmente, lo farà
essere molto meglio su una macchina con molto
GPU migliore ma il punto che voglio mostrare
è che il sistema di runtime è
molto dinamico può spostare compiti in giro
perché possiamo fare cose di isolamento
sposta e tutto viene gestito
in modo trasparente questo è lo stesso codice
che risulta essere in esecuzione seconda
dove vuoi eseguirlo se ne avessi uno
fpga collegato al sistema che potrei spostare
c’è anche così voglio solo mostrare
sei una demo che sai che è così facile
per testare le cose in movimento per scrivere
codice che funziona in modo diverso
sistemi
quindi in particolare quando usiamo il
GPU come la demo che ti ho appena mostrato
la vera struttura del virtuale
la macchina sembra che ce ne sia una parte
di quando ero in esecuzione sulla GPU
solo ora parte del codice era in esecuzione
bytecode java abbiamo uno strato di colla a / c
che entrambi parlano con J & I alla JVM per ottenere
i dati da lì gestiscono anche la GPU
dispositivo che usiamo i dati opencl api così
verrà spedito dalla JVM a questo
guarda il layer wrapper che è poi in grado di gestire
il colonnello opencl sul dispositivo e
gestendo tutti i protocolli di basso livello e
cose usate in opencl, ecco cos’è
sembra la GPU che potresti
immagina strutture simili nonostante ciò
richiede molto più lavoro per l’FPGA I
non otterrà troppo nei dettagli di
prestazione, credo che proverò a dire
la linea di fondo della performance così tu
so che penso che abbiamo una bella storia
per quanto riguarda la produttività, penso che io
penso che facciamo una richiesta piuttosto convincente
che puoi essere molto più produttivo in
facendo questo tipo di programmazione usando il nostro
sistema la domanda è quanto sei
andando a quello che sono le prestazioni
conseguenze di farlo perché usando
questi dispositivi alla fine è tutto
prestazioni o prestazioni di potenza così
ci sono due modi per chiedere questo
domanda per rispondere a questa domanda è
dire se sei un programmatore Java e
inizi a utilizzare il sistema quanto
più veloce del tuo Java originale sei tu
andando a ottenere questo è quanto può essere efficace
stai usando questi acceleratori o
forse se sei un esperto sei il
domanda uno sa quanto più lento è il mio
programma sarà se utilizzo questo sistema
che se l’avessi fatto tutto a mano da un
esperto quindi dobbiamo valutare entrambi
Ho i numeri probabilmente vado in loro
nei dettagli lo stato attuale che conosci
non stiamo cercando di costruire un magico
super compilatore il nostro compilatore è abbastanza
sofisticato penso che il nostro gruppo in IBM
è molto forte nei compilatori e lo faremo
più che possiamo ma sai
su alcuni benchmark la linea si comporta esattamente come
bene come un’alternativa codificata a mano e
alcuni non dobbiamo preoccuparci molto
rapporto di calcolo della comunicazione in
particolare quindi questo è quello che stiamo lavorando
su tutto il tempo penso che la nostra performance
la storia e la GPU adesso sono carine
bene non entrerò in questi in troppo
dettaglio ma c’era un foglio noi
pubblicato quest’anno alla programmazione PLD I.
progettazione e implementazione della lingua
conferenza e sai per una suite di
Benchmark GPU sai che siamo in grado di
ottenere la drammatica velocità della velocità sconvolgere altri
persone
segnalato sull’utilizzo di una GPU usando il nostro lime
programma per benchmark di varietà e a
almeno per opencl per la GPU su questi
punti di riferimento erano all’interno di un ballpark di
cosa ti aspetti da quale mano codificare
farebbe così pensiamo per la GPU per a
numero piuttosto elevato di codici abbiamo a
storia di performance piuttosto buona l’FPGA
stiamo ancora lavorando al
performance story non ne ho
numeri da mostrare per combinatorio di base
circuiti fondamentalmente cose che non lo fanno
coinvolgere cicli o stato penso che il nostro
prestazioni anche se forse non necessarie
aria è così come si può ottenere in questo
effetto che possiamo ottenere single pipe
pipeline monociclo dei circuiti
quindi possiamo per qualsiasi albero di combinatoria
la logica è che il nostro compilatore produrrà a
progettazione del gasdotto che può produrne uno
output per ciclo che è buono come te
possiamo ottenere che potremmo non ottenere questo potremmo
usa più spazio ma ci stiamo avvicinando
per circuiti complessi adesso
il compilatore è peggio di un fattore dieci
quindi stiamo facendo molto lavoro su Io
pipelining e siamo piuttosto fiduciosi che
saremo in grado di risolvere il problema
all’interno del campo da baseball all’interno di a
fattore di due o quattro di ciò che una mano
sintonizzati su ciò che potrebbe fare un programmatore esperto
fai dentro lo sai l’interno
il futuro prevedibile quindi e tu
so che dovrà decidere se o
non che la produttività contro
ne vale la pena
tu ora penso che questi numeri lo faranno
appena migliorato nel tempo come il nostro
il compilatore è maturo anche noi stiamo lavorando
su ci sono un sacco di problemi che non lo farò
andare qui per quanto riguarda il supporto
funzionalità di linguaggi di alto livello come
allocazione di memoria dinamica o virtuale
metodo di spedizione orientata agli oggetti o
cose del genere stiamo lavorando su modi
per supportare questi su queste lingue
funzionalità sui dispositivi che avevamo una carta
recentemente descrivendo come stiamo andando
fare garbage collection su FPGA che
è una carta eccellente che era anche in
la conferenza di plDI così è definitivamente
vale la pena controllare se ci sei dentro
tipo di design cosa così Martinez cosa c’è
il riassunto come ho detto penso che abbiamo un
bella storia sulla produttività noi
abbiamo dimostrato che possiamo avere
astrazioni concise di alto livello per
parallelismo che ha mappato su diversi
dispositivi che ho dimostrato di credere o di
la nostra esperienza minore è che il
l’esperienza nell’usare questo non è molto
Più forte
java e così gli ordini di grandezza sono migliori
rispetto alle attuali alternative um e I
penso che abbiamo una buona possibilità di
consegnando il nostro obiettivo che era il
soluzione generale per il mainstream
programmazione di questi sistemi ora di
Certo che come ho detto non c’è magia tu
sappiamo che non progetteremo a
algoritmo parallelo per voi questo non è un
parallelizzando il compilatore devi ancora
essere in grado di progettare il tuo algoritmo in a
modo che siamo suscettibili al parallelismo
non intenzione di fingere che una versione di
il programma funziona bene su tutti i dispositivi
potrebbe dover scrivere diverse versioni
di un metodo per soddisfare il
vincoli di diversi dispositivi che siamo
non provare a eseguire programmi Java vanilla
sull’acceleratore devi passare
un dialogo di step di migrazione con il
compilatore questa è una ricerca interna
progetto in questo momento, quindi questo non è ancora
disponibile al pubblico non sono preparato
in questo momento per fare annunci di
questo sono fiducioso che questo sarà
disponibile in una forma dell’altra
relativamente presto ma per il momento questo
è un progetto di ricerca interna che siamo
pilotandolo con vari gruppi all’interno
IBM per fare esperienza di cuore nel
sistema e siamo fiduciosi che questo
l’esperienza confermerà la nostra ipotesi
che questo è un modo produttivo per andare così
Ho finito e mi fermerò qui e rispondo
altre domande che hai se lo sei
un cliente IBM potremmo parlare con noi
potremmo essere disposti a fare una sorta di
Accordo unico e irripetibile se lo è
aveva senso quindi siamo disposti che stiamo facendo
questo o siamo in discussione di questo
con diversi clienti non c’è motivo
perché non potremmo fare di più quindi siamo felici
impegnarsi come ho detto anche se non lo è
pubblico aperto quindi deve essere fatto sotto
gli accordi legali appropriati si
giusto così per ora sia le GPU così
vediamo per le GPU proprio ora loro
plug in PCI cose ora sia Intel e
AMD ha integrato GPU sullo stesso
core in modo che l’ FPGA è ci sono un certo numero di
modi per comunicare adesso sì nostro
il sistema principale sta comunicando su PCIe
c’è anche Ethernet è una possibilità
abbiamo anche per la prototipazione abbiamo a
Connessione seriale UART quindi ce ne sono molti
Ci sono diversi modi per parlare con gli FPGA
sono anche venditori che fanno bus di memoria
allegato a disegni FPGA con IBM
o con Intel quindi c’è un numero di
modi ma sì sono la nostra piattaforma principale
in questo momento è PCIe diverso dal diavolo
come al solito sono interessanti
storie di applicazioni con benchmark
storia interessante e una cosa noi
divertirsi con internamente è così
sembra che la maggior parte dei nostri avvincenti
le applicazioni sono malvagie, quindi abbiamo molto
di storie che conosci applicazioni
da alta frequenza commerciale ad alta velocità
trading di frequenza da Wall Street e
armi e tu sai così, immagino sia così
la storia con tutti i tipi di alto
tecnologia di prestazioni all’avanguardia
i primi utenti tendono ad essere persone con a
molti soldi e potere cerco di farlo
concentrarsi sulle applicazioni non malvagie
per favore parla al classico e giusto io sono
dall’offrire al VJ di più
efficace questo pensi che sarebbe
possibile usare questo potere o tre da
Figi puro qualsiasi progetto in questa linea
lingua Ian sull’amore sì, quindi penso
degli scenari che ho iniziato al
inizio del discorso con il mio personale
l’opinione è quella che è più
è attraente è collegato alla rete
e in questo caso fondamentalmente nel comune
caso tutto il calcolo sarà fatto in
il fpga e credo che in teoria si potrebbe
tagliare la corda e staccare la fpga
ma in pratica è solitamente collegato
ad un host perché devi avviare il
dispositivo e caricare le cose per quello ma sì
nella maggior parte di queste applicazioni
l’idea è e tu sai che siamo stati noi
state facendo alcune di queste applicazioni
in particolare crittografia crittografia e
Interessante mi dispiace, sto chiudendo a chiave
gzip gzip è molto interessante
domanda ma l’idea qui è quella
stiamo facendo un po ‘di filtro direttamente
il filo alla velocità del filo
ignorando l’intero stack del software sul
CPU per un throughput a latenza molto bassa
ora gzip è un’applicazione interessante
ci sono stet non so se lo sei
familiare con gli algoritmi ma
ci sono versioni statiche e dinamiche di
l’algoritmo di Huffman e le persone lo sono
facendo applicazioni di compressione fpga ma loro
algoritmi di compressione
in generale che fai
software che utilizza Huffman dinamico
gli schemi sono più efficaci con
compressione ma sono estremamente
difficile da mappare all’hardware perché
usano strutture dinamiche eppure questo è
il tipo di codice che in teoria va bene
in realtà nella pratica che possiamo esprimere
nella nostra lingua e se il nostro compilatore è
in grado di codificarlo è in grado di implementarlo
beh, possiamo effettivamente usarne uno migliore
algoritmo quindi penso che questo sia un esempio
delle possibilità di cui stiamo usando
astrazioni di livello superiore forse no
contro-intuitivamente si può forse ottenere
prestazioni migliori utilizzando una migliore
algoritmo anche se l’operazione di
generazione del codice operativo per molto basso
roba di livello non è buono come farlo
a mano la capacità di utilizzare un più intelligente
l’algoritmo ad un livello elevato potrebbe effettivamente
essere più produttivi fino in fondo
line story quindi questa è una sola applicazione
che siamo abbastanza piuttosto felici
con andare avanti nel FPGA e il loro
numero di altri
Please follow and like us: