Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Conferenza 36: Alan Edelman e Julia Language
Conferenza 36: Alan Edelman e Julia Language
In questo video, Alan Edelman discute il potere dei linguaggi di programmazione per l'apprendimento automatico e la loro importanza in matematica. Sottolinea il recente sviluppo del linguaggio Julia, come riconosciuto da Google, per i suoi meriti tecnici e l'usabilità nell'apprendimento automatico. Edelman spiega come funziona la differenziazione automatica in Julia e fornisce un esempio di calcolo della radice quadrata di x senza utilizzare differenze numeriche finite attraverso l'algoritmo babilonese. Discute anche l'uso dei tipi in Julia per un calcolo efficiente e per semplificare il processo di backpropagation con matrici a blocchi. Nel complesso, Edelman sottolinea l'importanza dell'algebra lineare per i calcoli matematici e il suo ruolo nella comprensione di fenomeni complessi.
MIT 6.172 Performance Engineering of Software Systems, autunno 2018 - 1. Introduzione e moltiplicazione di matrici
1. Introduzione e moltiplicazione di matrici
In questo video di YouTube intitolato "1. Introduzione e moltiplicazione di matrici", il docente discute l'importanza dell'ingegneria delle prestazioni e di come si è evoluta nel tempo. Usando l'esempio della moltiplicazione di matrici, il relatore mostra come le tecniche di codifica e le specifiche della macchina possono avere un grande impatto sulle prestazioni. La discussione copre argomenti come l'ordine dei cicli, l'utilizzo della cache e la programmazione parallela. Il relatore esplora anche modi per ottimizzare il codice per diversi processori e calcoli aritmetici. Nel complesso, il video fornisce preziose informazioni sul mondo dell'ingegneria delle prestazioni e sulle sue applicazioni pratiche nei moderni sistemi informatici.
Lezione 2. Regole di Bentley per l'ottimizzazione del lavoro
2. Regole Bentley per l'ottimizzazione del lavoro
Questo video di YouTube discute varie tecniche di ottimizzazione per i programmi per computer. Vengono introdotte le regole Bentley per l'ottimizzazione del lavoro e le ottimizzazioni vengono raggruppate in strutture dati, cicli, logica e funzioni. Vengono discusse diverse tecniche come la codifica dei valori, l'aumento della struttura dei dati, il pre-calcolo, la memorizzazione nella cache e l'utilizzo di matrici sparse. Il relatore tocca anche i vantaggi dell'utilizzo di una rappresentazione a matrice sparsa per i grafici, l'ottimizzazione logica e l'ottimizzazione del rilevamento delle collisioni nei programmi di grafica. L'implementazione di queste tecniche di ottimizzazione aiuta a ridurre il tempo di esecuzione dei programmi, rendendoli più efficienti.
La seconda parte del video copre diverse categorie di tecniche di ottimizzazione, tra cui loop hoisting, l'uso di sentinelle nei loop, loop unrolling e fusion e function inlining. Il relatore sconsiglia l'ottimizzazione prematura e sottolinea l'importanza di mantenere la correttezza e utilizzare test di regressione. Il video delinea anche le Regole Bentley per l'ottimizzazione del lavoro, una guida in sei fasi per aumentare la produttività e raggiungere gli obiettivi in modo efficiente. Queste regole includono la definizione di obiettivi chiari, la suddivisione delle attività, la pianificazione e l'organizzazione, la definizione delle priorità delle attività, la riduzione al minimo delle distrazioni e la revisione e l'adeguamento regolari del proprio approccio.
Lezione 3. Bit Hack
3. Bit hack
Questo video di YouTube copre una varietà di argomenti sulla manipolazione dei bit, tra cui la rappresentazione binaria, il complemento a due, gli operatori bit per bit, lo scambio di variabili senza una variabile temporanea e l'ottimizzazione del codice. Il video mostra vari trucchi come trovare il minimo di due numeri interi senza utilizzare istruzioni if-else e come scambiare due numeri interi senza utilizzare una variabile temporanea. L'oratore discute i rami imprevedibili e introduce un trucco di bit minimo senza ramo per quando i rami prevedibili non sono disponibili e mostra come i bit hack possono ottimizzare il codice sostituendo operazioni costose come la divisione con semplici operazioni bit a bit. Il video discute anche la sequenza di de Bruijn e la sua applicazione nella risoluzione di problemi come il problema N Queens.
La seconda parte discute la risoluzione del problema N Queens utilizzando vettori di bit e contando in modo efficiente il numero di bit 1 in una parola binaria. Il backtracking viene utilizzato per implementare il problema N Queens e i vettori di bit vengono utilizzati per rappresentare in modo efficiente il tabellone. Vengono descritti tre controlli per posizionare in modo sicuro una regina nel problema N Queens e viene presentato un metodo per contare il numero di bit 1 in una parola eliminando ricorsivamente il bit 1 meno significativo. Inoltre, viene discusso l'uso della ricerca nella tabella e della manipolazione del registro per contare il numero di 1 bit. Il video si conclude con una dimostrazione di un approccio divide et impera al conteggio di 1 bit che ha una performance proporzionale alla base logaritmica due della lunghezza della parola. Vengono inoltre fornite risorse per ulteriori apprendimenti.
Lezione 4. Linguaggio Assembly e Architettura del Computer
Lezione 4. Linguaggio Assembly e Architettura del Computer
Questo video fornisce una panoramica completa del linguaggio assembly e dell'architettura del computer. Il linguaggio assembly è un'interfaccia importante per l'ottimizzazione delle prestazioni del codice e la comprensione dell'architettura del computer è essenziale per padroneggiare il linguaggio assembly. Il relatore spiega la storia dell'architettura x86 64 e il suo sviluppo, i suoi registri chiave, i tipi di dati, le modalità di indirizzamento della memoria e l'architettura del set di istruzioni, inclusi stack, logica intera e binaria, logica booleana e subroutine. Discutono anche estensioni come estensione zero e segno e varie modalità di indirizzamento in linguaggio assembly. Inoltre, il video illustra i tipi di virgola mobile, i vettori e le unità vettoriali, le istruzioni tradizionali e SSE e le funzionalità di progettazione dell'architettura del computer come l'elaborazione superscalare, l'esecuzione fuori ordine e la previsione del ramo.
Il video copre anche diversi argomenti relativi al linguaggio assembly e all'architettura del computer. Uno dei temi centrali è il parallelismo a livello di istruzione (ILP) e gli stalli della pipeline, che sono causati da pericoli come le dipendenze dei dati. Il relatore discute le dipendenze dei dati veri, anti e di output e come i processori superscalari possono sfruttare più parallelismo nell'hardware per eseguire più istruzioni alla volta. Tuttavia, per evitare pericoli, gli architetti hanno implementato strategie come la ridenominazione e il riordino, nonché l'esecuzione speculativa per indovinare l'esito di un ramo ed eseguirlo in anticipo. Il relatore incoraggia il pubblico a comprendere questi metodi per comprendere meglio le ottimizzazioni del software.
Lezione 5. C all'Assemblea
Lezione 5. C all'Assemblea
In questa parte del video viene discussa l'importanza di comprendere il linguaggio C in assembly, insieme a come il codice C viene implementato nel linguaggio assembly utilizzando un compilatore. L'attenzione si concentra in particolare su come LLVM IR viene tradotto in assembly nella convenzione di chiamata Linux x86 64. Il relatore spiega i componenti di base di LLVM IR e come i costrutti nel linguaggio di programmazione C vengono tradotti in LLVM IR. Il video copre anche il layout della memoria virtuale, il problema del coordinamento delle chiamate di funzione tra più funzioni e l'uso di due puntatori, BP e SP, da parte della convenzione di chiamata Linux x86 64 per gestire tutti i frame dello stack.
Il video spiega anche le strategie per mantenere gli stati dei registri nella programmazione da C a Assembly, come il salvataggio dei registri come salvataggio del chiamante o salvataggio del chiamato e in che modo la convenzione di chiamata x86 evita lo spreco di lavoro. Copre il modo in cui le chiamate di funzione funzionano in C e in assembly, discutendo il processo di salvataggio di argomenti e variabili locali nello stack, nonché l'ottimizzazione comune dell'utilizzo del puntatore dello stack invece del puntatore di base. Il video mostra anche il processo di compilazione di LV miR fino al codice assembly, discutendo il prologo della funzione, il salvataggio dei registri, le condizioni di gestione e la conversione del codice C in codice assembly utilizzando un grafico del flusso di controllo. Infine, parla della funzione epilogo utilizzata per ripristinare i registri prima di restituire i risultati.
registers, la convenzione di chiamata dettaglia le regole per quali registri ogni funzione può usare e come devono preservare quei registri attraverso le chiamate di funzione.
Lezione 6. Programmazione multicore
Lezione 6. Programmazione multicore
Questa lezione video discute la programmazione multi-core e l'emergere di processori multi-core a causa della legge di Moore e della fine del ridimensionamento delle frequenze di clock. Il relatore spiega il problema della densità di potenza affrontato dai processori e come ha portato all'aggiunta di più core ai chip per stare al passo con la legge di Moore. La lezione copre anche le basi dei protocolli di coerenza della cache nell'hardware della memoria condivisa e piattaforme di concorrenza come Pthreads, TBB, OpenMP e Silk che forniscono astrazioni per la programmazione parallela. I pro ei contro di ogni piattaforma sono discussi e dimostrati con esempi di implementazione di programmi Fibonacci. Il video offre una panoramica completa della programmazione multi-core e delle sfide e delle soluzioni affrontate dai programmatori.
Il video copre anche vari aspetti di Silk, uno strumento di astrazione per gestire l'elaborazione parallela. Il relatore discute argomenti come la seta nidificata per i loop, la generazione di codice assembly, la riduzione mediante riduttori, lo scheduler e l'ottimizzazione delle prestazioni. Forniscono inoltre una panoramica dell'ecosistema Silk e degli strumenti correlati come Silk Sanitizer e Silk Scale rispettivamente per il debug e l'analisi della scalabilità. La conclusione principale è che scrivere programmi paralleli per processori multicore può essere impegnativo, ma Silk semplifica il processo gestendo attività complesse in modo efficiente, offrendo ai programmatori un maggiore controllo sull'esecuzione del loro codice.
Lezione 7. Razze e parallelismo
Lezione 7. Razze e parallelismo
Il video copre una serie di argomenti relativi a razze, parallelismo e dati di calcolo nella programmazione Silk. Alcuni concetti chiave trattati includono le dichiarazioni di spawn e sync per l'esecuzione simultanea, l'importanza di evitare le race condition e l'utilizzo del race detector di Silk per identificarle. Il video copre anche la legge di Amdahl, la legge sul lavoro e la legge sulla portata come modi per quantificare la quantità di parallelismo in un programma, insieme a modi per analizzare il lavoro e la durata dei calcoli. Vengono discussi anche il potenziale aumento di velocità e parallelismo degli algoritmi di ordinamento parallelo e il concetto di teoria della schedulazione, con particolare attenzione al teorema dello schedulatore avido. Nel complesso, il video fornisce preziose informazioni sulla comprensione e l'ottimizzazione delle prestazioni del programma nella programmazione Silk.
Il video spiega i corollari del greedy scheduler bound, che essenzialmente afferma che qualsiasi greedy scheduler raggiunge un'accelerazione lineare quasi perfetta fintanto che T1/Tinfinity è maggiore o uguale a P^2. Lo scheduler Silk, che utilizza uno scheduler che ruba lavoro, può ottenere un'accelerazione lineare quasi perfetta fintanto che il numero di processori è molto inferiore a T1/Tinfinity. Il sistema di runtime della seta funziona mantenendo un mazzo di lavoro di fili pronti e manipola il fondo del mazzo come una pila. Il video discute anche del Cactus Stack, che consente più visualizzazioni di stack in parallelo e rende possibili chiamate di funzioni parallele. Il limite superiore dello spazio dello stack richiesto dall'esecuzione del processore P è spesso molto più ampio della quantità effettiva necessaria poiché ogni processore potrebbe non aver bisogno di scendere fino in fondo al grafico di calcolo ogni volta che ruba lavoro.
Lezione 8. Analisi di algoritmi multithread
Lezione 8. Analisi di algoritmi multithread
Questo video illustra il metodo principale per analizzare le ricorrenze divide et impera e lo applica agli algoritmi multithread confrontando la base logaritmica B di n con la base logaritmica B di A con F di N per determinare la loro crescita in n e il lavoro richiesto. Il video presenta un cheat sheet con soluzioni per algoritmi multithread di base e copre argomenti come l'analisi del lavoro e dello span, l'efficienza del lavoro e il superamento dei costi generali attraverso l'ottimizzazione della dimensione dei grani. Viene sottolineata l'importanza dell'empatia quando si comunicano argomenti tecnici e viene introdotto il concetto di DAG come mezzo per bilanciare lavoro e intervallo per aumentare il parallelismo e ridurre il tempo di esecuzione.
Il video illustra anche l'analisi degli algoritmi multithread, concentrandosi su lavoro e intervallo e su come massimizzare il parallelismo riducendo al minimo l'intervallo per ottenere un'accelerazione lineare quasi perfetta. L'oratore suggerisce un approccio divide et impera agli algoritmi multi-thread, in cui il numero di attività assegnate ai thread è sufficientemente grande e mette in guardia contro la generazione di numerose piccole attività a causa di spese generali di pianificazione. Il codice di esempio presentato include uno efficiente e uno scadente. Il relatore discute anche su come rappresentare le sottomatrici nella codifica e nell'indicizzazione bidimensionali e sottolinea l'uso di "restrict" nel codice di moltiplicazione delle matrici divide et impera per migliorare le prestazioni.
Lezione 9. Cosa possono e non possono fare i compilatori
Lezione 9. Cosa possono e non possono fare i compilatori
Questo video illustra come i compilatori possono ottimizzare il codice, utilizzando vari esempi. Spiega come i compilatori possono eliminare l'archiviazione e i riferimenti di memoria non necessari e come possono ottimizzare i loop per migliorare le prestazioni.
Questo video spiega anche il concetto di passaggi di ottimizzazione del compilatore e come possono essere usati per migliorare le prestazioni del codice. Discute anche i limiti dei compilatori, in particolare per quanto riguarda la vettorizzazione. I compilatori possono vettorizzare il codice solo se possono determinare che i puntatori nel codice non creeranno alias. Se i puntatori fanno alias, il compilatore non sarà in grado di vettorizzare il codice. Come programmatore, puoi aiutare il compilatore annotando i tuoi puntatori per fornire maggiori informazioni sul loro utilizzo.