Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Vorlesung 12. Parallele Speicherzuordnung
Vorlesung 12. Parallele Speicherzuordnung
Das Video diskutiert verschiedene Speicherzuweisungsstrategien und ihre Kompromisse. Die Verwendung von malloc und ausgerichteter Zuweisung sowie die Bedeutung einer ordnungsgemäßen Speicherfreigabe mit free werden erläutert. Die Verwendung von Mmap für die Zuweisung von virtuellem Speicher wird ebenfalls behandelt, zusammen mit den Problemen der externen Fragmentierung und langsamen Leistung. Das Konzept von Stacks in der C- und C++-Programmierung wird untersucht, wobei der Schwerpunkt auf einem Heap-basierten Cactus-Stack-Ansatz zur Zuweisung von Stack-Frames liegt, der zu besseren raumgebundenen Beweisen und Obergrenzen führen kann. Die Verwendung eines Pools von linearen Stapeln wird ebenfalls diskutiert, zusammen mit der Bedeutung der Optimierung für kleine Blöcke, um die Fragmentierung zu minimieren. Das Video schließt mit einer Diskussion globaler und lokaler Heap-Ansätze und ihrer potenziellen Probleme, zusammen mit Ansätzen wie Bin-Free-Listen und regelmäßigem Speicherausgleich, um diese Probleme anzugehen.
Das Video diskutiert auch Lösungen für die parallele Speicherzuweisung und stellt den Hoard-Allocator als Lösung vor. Der Hoard-Zuordner verwendet eine Kombination aus lokalen und globalen Heaps und großen Superblöcken, die zwischen Heaps verschoben werden können, um falsches Teilen zu reduzieren, die Skalierbarkeit zu verbessern und externe Fragmentierung zu reduzieren. Der im globalen Heap zugewiesene maximale Speicher ist höchstens der in den lokalen Heaps zugewiesene maximale Speicher, und der Footprint ist nach oben durch den Benutzer-Footprint plus zugewiesenen, aber ungenutzten Speicher in den lokalen Heaps begrenzt. Das Video diskutiert auch kurz andere Allokatoren wie Je malloc und Super malloc, wobei Benchmark-Ergebnisse darauf hindeuten, dass Super malloc besser abschneidet als Je malloc und Hoard. Die Diskussion endet mit einem Verweis auf Online-Folien für Details zur Garbage Collection.
Vorlesung 13. Das Cilk-Laufzeitsystem
Vorlesung 13. Das Cilk-Laufzeitsystem
Das Cilk-Laufzeitsystem ist für das Scheduling und den Lastausgleich von Berechnungen auf parallelen Prozessoren verantwortlich, wobei ein randomisierter Arbeitsdiebstahl-Scheduler verwendet wird, um Berechnungen zur Laufzeit auf Prozessoren abzubilden. Das System ist darauf ausgelegt, die serielle Ausführung des Programms zu optimieren, selbst auf Kosten zusätzlicher Kosten für Diebstähle. Der Worker verwaltet eine separate Deckdatenstruktur, die Zeiger auf die Stapelrahmen enthält und Kopf- und Endzeiger verwendet. Die Rahmen, die gestohlen werden können, haben eine zusätzliche lokale Struktur, die notwendige Informationen enthält, damit ein Diebstahl stattfindet, während sich das Deck außerhalb des Aufrufstapels befindet. Der Abschnitt erläutert, wie das System es Prozessoren ermöglicht, mitten in einer laufenden Funktion mit der Ausführung zu beginnen, und wie die Synchronisierung zwischen Prozessoren kompliziert wird, wenn eine Sync-Anweisung erreicht wird, die nicht über den Punkt hinaus ausgeführt werden kann, weil bestimmte Prozessoren noch auf den Abschluss von Berechnungen warten. Darüber hinaus spricht der Referent die Leistung des Systems, Designüberlegungen und Datenstrukturen an und wie das System die Ausführung unter Verwendung des THC-Protokolls optimiert, wobei zwei Sätze von Protokollen verwendet werden, einer für den Arbeiter, der die Arbeit ausführt, und einer für den Dieb.
Das Cilk-Laufzeitsystem verwendet ein Set-Jump- und ein Long-Jump-Protokoll, um den Diebstahl von Berechnungen aus den Ausführungsdecks von Opferprozessen zu handhaben. Die Cactus-Stack-Abstraktion ermöglicht es dem Diebesprozess, einen eigenen Call-Stack zu haben, um eine Beschädigung der Stacks des Opfers zu verhindern. Das Synchronisationsprotokoll des Systems verwendet einen Berechnungsbaum und einen Cactus Stack, um sicherzustellen, dass die Synchronisation nur zwischen verschachtelten Berechnungen innerhalb einer Funktion erfolgt. Der Full Frame Tree hält Eltern-Kind-Beziehungen zwischen Berechnungen mit ausstehenden Unterberechnungen aufrecht, um den Synchronisationsprozess zu vereinfachen. Zusätzlich optimiert das Laufzeitsystem den allgemeinen Fall, in dem die aktuelle Funktion keine ausstehenden Kindberechnungen hat und alle Worker beschäftigt sind. Zu den weiteren unterstützten Funktionen gehören C++-Ausnahmen, Reducer-Hyperobjekte und Stammbäume.
Vorlesung 14. Caching und Cache-effiziente Algorithmen
Vorlesung 14. Caching und Cache-effiziente Algorithmen
Im Video zu Caching und Cache-effizienten Algorithmen erklärt der Dozent die Cache-Hierarchie moderner Maschinen, die Unterschiede zwischen vollassoziativen und direkt abgebildeten Caches sowie die Vor- und Nachteile von satzassoziativen Caches. Das Video stellt auch das ideale Cache-Modell und das Konzept Cache-effizienter Algorithmen vor. Der Sprecher erörtert das Cache-Fehlschlag-Lemma, die Tall-Cache-Annahme und das Sub-Matrix-Caching-Lemma. Sie analysieren auch Cache-Fehlschläge, die beim Lesen einer Teilmatrix und während der Matrixmultiplikation auftreten. Das Video schließt mit einer Einführung in das Konzept der gekachelten Matrixmultiplikation und wie sie die Leistung erheblich verbessern kann, weist aber auch darauf hin, dass sie nicht portabel ist und die Optimierung für mehrere Cache-Ebenen teuer sein kann.
Die Vorlesung behandelt Caching und Cache-effiziente Algorithmen am Beispiel der rekursiven Matrixmultiplikation. Der Referent betont, wie wichtig es ist, sowohl Work- als auch Cache-Mißerfolge separat zu analysieren, und weist darauf hin, dass Cache-fähige Algorithmen aufgrund unterschiedlicher Cache-Größen möglicherweise nicht für alle Computer optimal sind. Der Redner erörtert auch Cache-vergessene Algorithmen, die sich automatisch auf jede Cache-Größe einstellen, und erwähnt Entwicklungen bei parallelem Cache-vergessenem Code. Schließlich ist das Ziel, Algorithmen zu entwerfen, die entweder Cache-bewusst oder Cache-oblivious sind, und die Diskussion über das Design von Cache-oblivious Algorithmen wird in der folgenden Vorlesung fortgesetzt.
Vorlesung 15. Cache-oblivious Algorithmen
Vorlesung 15. Cache-oblivious Algorithmen
Das Video diskutiert Cache-vergessene Algorithmen, die automatisch die Cache-Größe auf einer Maschine optimieren können, eine gute Cache-Effizienz erzielen und keine Kenntnis der Cache-Parameter der Maschine erfordern. Das Video zeigt, wie man Code zur Simulation der Wärmediffusion durch Differentialgleichungen mit der Stencil-Methode auf einer 2D-Matrix schreibt. Der Code hat sowohl Schleifen- als auch Trapezversionen, wobei letztere Cache-effizienter, aber aufgrund der Vorhersagbarkeit des Zugriffsmusters des Schleifencodes in einer 2D-Simulation nicht wesentlich schneller ist. Das Video diskutiert auch das Zusammenspiel zwischen Caching und Parallelität und die Diagnose möglicher Engpässe bei der parallelen Beschleunigung. Abschließend erläutert der Referent Schablonenberechnungen und wie jeder Punkt in einem Array mithilfe eines festen Musters namens Schablone aktualisiert wird, das unter Cache-Fehlern leiden kann und Speicheranforderungen hat, die mithilfe effizienter Algorithmen reduziert werden können, die zeitliche und räumliche Lokalität ausnutzen.
Der zweite Teil des Videos behandelt Cache-vergessene Algorithmen zum Sortieren und Zusammenführen. Insbesondere behandelt das Video die Cache-Komplexität des Merge-Sortierens, stellt das Konzept des Multi-Way-Merging vor und erklärt die Cache-Komplexität des Multi-Way-Merge-Algorithmus. Das Video behandelt auch den Trichtersortieralgorithmus, einen Cache-vergessenen Sortieralgorithmus, der K quadratische Elemente und K sortierte Listen zusammenführen kann. Der Trichtersortieralgorithmus ist optimal und rekursiv mit der Quadratwurzel von K Trichtern konstruiert. Das Video erklärt, dass es viele andere Cache-vergessene Algorithmen und Datenstrukturen gibt, wie z. B. B-Trees, geordnete Dateiverwaltung und Prioritätswarteschlangen. Insgesamt bietet das Video eine Einführung in Cache-vergessene Algorithmen für diejenigen, die mehr über das Thema erfahren möchten.
Vorlesung 16. Nichtdeterministische parallele Programmierung
Vorlesung 16. Nichtdeterministische parallele Programmierung
In diesem Video werden verschiedene Konzepte im Zusammenhang mit deterministischer und nicht deterministischer paralleler Programmierung erörtert. Der Referent betont, wie wichtig es ist, Nichtdeterminismus zu vermeiden, da er zu anomalen Verhaltensweisen und schwieriger Fehlersuche führen kann. Zu den Strategien zum Umgang mit Nicht-Determinismus gehören die Verwendung fester Werte, die Wiedergabe von Aufzeichnungen, Analysetools, Kapselung und Komponententests. Die Verwendung von Mutexes wird im Detail untersucht, einschließlich Spinning vs. Yielding, Reentrant vs. Non-Reentrant und Fair vs. Unfair. Der Referent geht auch auf das Konzept des Kontextwechsels und das „Skiverleihproblem“ im Zusammenhang mit paralleler Programmierung ein. Das Segment schließt mit der Erörterung der Grundprinzipien des Performance Engineering in Multi-Core-Prozessoren.
Der zweite Teil des Videos behandelt das Problem des Deadlocks bei der parallelen Programmierung und bietet Lösungen zu seiner Vermeidung an, wie z. B. die lineare Reihenfolge von Mutexes, die garantiert, dass es keinen Wartezyklus gibt. Darüber hinaus stellt der Referent das Konzept des Transaktionsspeichers vor, das Atomarität gewährleistet, indem es einen kritischen Bereich als eine Transaktion darstellt, die alle Aktualisierungen auf einmal festschreibt. Das Video stellt dann einen Algorithmus vor, der einen sperrenbasierten Ansatz mit einem endlichen Besitzarray und einer Release-Sortierung-Require-Methode verwendet, um Deadlocks und Hunger zu verhindern, ohne dass eine globale Sperre erforderlich ist. Abschließend wird der Algorithmus Release Sort and Reacquire erläutert, der verhindert, dass mehrere Sperren gleichzeitig versuchen, eine Sperre zu erwerben, wodurch Leistungsprobleme vermieden werden.
Vorlesung 17. Synchronisation ohne Sperren
Vorlesung 17. Synchronisation ohne Sperren
Charles Leiserson untersucht das Konzept der Synchronisierung ohne Sperren in einem YouTube-Video. Er liefert ein Beispiel, das die Notwendigkeit einer globalen linearen Reihenfolge von Anweisungen demonstriert, um eine sequentielle Ausführung sicherzustellen, und erörtert, wie ein gegenseitiger Ausschluss durch sequentielle Konsistenz erreicht werden kann, wodurch die Schwierigkeiten und potenziellen Probleme der Verwendung von Sperren vermieden werden. Leiserson präsentiert Petersons Algorithmus als eine Lösung, die nur Lade- und Speicheroperationen verwendet, um auf kritische Abschnitte zuzugreifen, ohne von gleichzeitigen Prozessen gestört zu werden. Das Video behandelt auch die Herausforderungen der Synchronisierung durch Speicher aufgrund von Hardware-Neuordnungen und das Konzept von Speicherzäunen, um die relative Reihenfolge mit anderen Anweisungen aufrechtzuerhalten. Leiserson argumentiert, dass die Unterstützung sequentieller Konsistenz für parallele Maschinen zwar vorteilhaft, aber für Hardwaredesigner schwer zu erreichen ist.
Der zweite Teil des Videos behandelt die Verwendung von Speicherzäunen und Synchronisationsanweisungen zur Vermeidung von Fehlern in parallelen Programmen. Der Referent untersucht verschiedene Arten der Implementierung von Speicherzäunen, implizit oder explizit, und die Bedeutung einer sorgfältigen Konstruktion und Koordination zwischen verschiedenen Teams, die an verschiedenen Aspekten eines Prozessors arbeiten. Darüber hinaus diskutiert der Dozent die Verwendung von CAS-Anweisungen als Teil des Lock-Free-Algorithmus im C11-Sprachstandard, um Mutexe von n-Thread-Deadlock-freien Mutual-Exclusion-Algorithmen zu implementieren, die nur konstanten Speicherplatz verwenden. Charles Leiserson erläutert das Problem der Verwendung von Sperren in einem Multithread-System und die Lösung, stattdessen CAS zu verwenden, da ein Thread, der die Sperre für lange Zeit aufrechterhält, möglicherweise andere Threads blockieren kann, die darauf warten, auf dieselbe Ressource zuzugreifen. Darüber hinaus hebt das Video das potenzielle Problem des ABA-Problems mit Compare-and-Swap hervor und ermutigt diejenigen, die sich für das Thema interessieren, mehr über lock-freie Algorithmen zu erfahren.
Vorlesung 18. Domänenspezifische Sprachen und Autotuning
Vorlesung 18. Domänenspezifische Sprachen und Autotuning
In diesem Video erläutert Professor Saman Amarasignhe von der EECS-Abteilung des MIT die Vorteile der Verwendung von domänenspezifischen Sprachen (DSLs) und Autotuning im Performance Engineering. Er betont die Bedeutung von DSLs, die bereichsspezifische Domänen erfassen, die in Allzwecksprachen schwer zu beschreiben sind, und es Programmierern ermöglichen, das Wissen von Domänenexperten für eine bessere Leistung zu nutzen. Singh erörtert die Optimierung von Graphprozessen unter Verwendung von DSLs, einschließlich der Graphpartitionierung und der Bedeutung der Form des Graphen bei der Berechnung. Er stellt das DSL Halide für die Bildverarbeitung vor, das eine schnelle Codeoptimierung und Portierbarkeit über Maschinen hinweg ermöglicht. Er diskutiert den Einsatz von Halogenid in verschiedenen Branchen wie Google und Adobe. Letztendlich hebt er die Bedeutung des Experimentierens mit verschiedenen Ansätzen bei der Optimierung von Code hervor, während er sich auf Parallelität, Lokalität und redundante Arbeit konzentriert.
Das Video spricht auch über die Herausforderungen des Performance Engineering und das Finden der optimalen Parameter für einen effizienten Programmablauf. Der Redner schlägt vor, dass Auto-Tuning dieses Problem angehen kann, indem es den großen Parameterraum automatisch durchsucht, um die optimalen Werte zu finden. Er stellt fest, dass eine erschöpfende Suche unpraktisch sein kann und heuristische Lösungen möglicherweise nicht optimal sind. Autotuning, das einen Bereich akzeptabler Werte definiert und basierend auf Leistungsergebnissen iteriert, kann den Prozess der Suche nach optimalen Lösungen beschleunigen. Der Referent erörtert auch die Anwendung von Autotuning bei der Generierung von Zeitplänen für Try, mit dem Zeitpläne effizienter und effektiver erstellt werden konnten als mit einer erschöpfenden Suche.
Vorlesung 19. Leiserchess Codewalk
Vorlesung 19. Leiserchess Codewalk
In diesem YouTube-Video mit dem Titel „19. Leiserchess Codewalk“ erklärt Helen Xu die Regeln von Lesierchess, einem Spiel, das von zwei Teams gespielt wird, mit dem Ziel, den König des gegnerischen Teams zu erschießen oder Ihren König erschießen zu lassen. Das Spiel hat zwei Arten von Zügen, Grund- und Schlagzüge, und eine Ko-Regel, die einen Zug illegal macht, wenn er den letzten Zug des Gegners rückgängig macht. Xu taucht in verschiedene Aspekte des Spiels ein, darunter die Fisher-Zeitsteuerungsmethode, Forsythe-Edwards-Notation, Cloud-Autotester und Projektorganisation, Bewertung und Vergleich von Bots anhand von Elo-Bewertungen, Generierung von Zügen, statische Bewertung und Suchalgorithmen wie Alpha-Beta, Prinzipvariation, Subtree Pruning und Transpositionstabellen. Sie erörtert auch die Bedeutung der Testinfrastruktur für die Optimierung des Programms und der Datei eval.c, die Heuristiken enthält, die jedes Feld auf dem Brett basierend auf der Art der Figur und ihrer Farbe bewerten.
Der Redner geht auch auf den Laserabdeckungsaspekt des Spiels ein und erklärt das komplizierte System der Generierung aller möglichen Züge für eine Position basierend auf der Farbe des Spielers unter Verwendung einer while-true-Anweisung. Sie erklären auch die Bedeutung der Korrektheit im Code und wie man darauf testet, und schlagen die Konvertierung der Darstellung vor, um die Korrektheit vor der Leistungsoptimierung sicherzustellen. Der Redner erörtert auch die große Flexibilität, die die Leiserchess UCI-Schnittstelle bietet, die es Benutzern ermöglicht, Tabellen und Befehle nach ihren Wünschen zu bearbeiten, und versichert den Zuschauern, dass der tote Code bereinigt wird und alle anderen Fehler zur Behebung gemeldet werden sollten.
Vorlesung 20. Spekulativer Parallelismus & Leiserschach
20. Spekulativer Parallelismus & Leiserschach
In diesem YouTube-Video mit dem Titel „20. Speculative Parallelism & Leiserchess“ stellt der Kursleiter das Konzept der spekulativen Parallelität vor, bei der im Wesentlichen vorausschauend vermutet wird, dass bestimmte Aufgaben parallel ausgeführt werden können und zu schnellerem Code führen können. Der Sprecher warnt jedoch davor, dass dieser Code nicht deterministisch ist und nur bei Bedarf verwendet werden sollte, während er auch davor warnt, ihn in Fällen zu verwenden, in denen ein besserer serieller Code verwendet werden könnte. Ein wesentlicher Teil des Videos dreht sich um die Erörterung paralleler Alpha-Beta-Suchen, bei denen der Spielbaum zur Optimierung der Suchzeit beschnitten wird, und spricht auch über verschiedene Datenstrukturen und Heuristiken, die im Bewertungsprozess von Suchalgorithmen verwendet werden, insbesondere zur Vermeidung von Zyklen und Ruhe suchen. Das Video geht auch auf die Vorteile der iterativen Vertiefung ein und wie sie zu einer besseren Zugreihenfolge bei der Suche führt, und diskutiert auch das Zobrist-Hashing, eine Optimierungstechnik, die in Suchalgorithmen verwendet wird und einen eindeutigen Hash-Wert für jede Position auf dem Schachbrett mit denselben Figuren verwendet.
In diesem Video werden auch verschiedene Optimierungstechniken für Schachengines wie Transpositionstabellen, späte Zugreduktionen und die Verwendung von Bitboards zur Zuggenerierung besprochen. Der Referent spricht auch über das Thema "spekulative Parallelität und Leiserschach", wo er Programmierern rät, zu prüfen, ob eine Bewegung den Pfad des Lasers beeinflusst, und nach "Laserabdeckung" zu suchen. Der Referent schlägt vor, alte Darstellungen im Code zu belassen und Änderungen mit Programmen zu testen. Sie entwickelten auch eine Heuristik, um zu messen, wie nah ein Laser beim Leiserschach am König ist. Weitere Optimierungsvorschläge umfassen die Suche nach einem besseren Weg, um die Nähe des Gegners zum Laser des Spielers zu bewerten, und die Optimierung der Sortierung von Zügen. Abschließend wird die Bedeutung des ordnungsgemäßen Refactorings und Testens von Code diskutiert.
Vorlesung 21. Tuning eines TSP-Algorithmus
Vorlesung 21. Tuning eines TSP-Algorithmus
Dieses YouTube-Video konzentriert sich auf das Traveling Salesperson Problem (TSP), ein NP-schweres Problem, das es seit vielen Jahren gibt. Der Sprecher geht verschiedene Algorithmen und Ansätze durch, um den Suchraum zu optimieren und die Suche zu beschneiden, um den TSP-Algorithmus schneller zu machen, wie z. B. das Implementieren eines besseren Minimum-Spanning-Tree-Algorithmus, das Aktivieren der Compiler-Optimierung und das Modifizieren der Entfernungsberechnung, um einen Tabellensuchalgorithmus zu verwenden. Die Notwendigkeit, den Suchbereich einzuschränken und kreativ zu denken, um Programme hinsichtlich Geschwindigkeit und Leistung zu optimieren, wird im gesamten Video betont, das wertvolle Einblicke in die Lösung von TSP- und anderen verwandten Problemen bietet.
In diesem Video diskutiert der Referent verschiedene Techniken zur Optimierung des TSP-Algorithmus, wie z. B. Caching, verzögerte Auswertung und das Speichern von Daten in einer Hash-Tabelle, und betont die Bedeutung empirischer Daten gegenüber der Intuition. Er teilt auch seine Erfahrungen mit der Lösung des TSP-Problems und die Bedeutung von Performance Engineering in seinem Beruf. Der Referent gibt Einblicke in den Codeoptimierungsprozess, einschließlich inkrementeller Entwicklung und rekursiver Generierung, und ermutigt das Publikum, diese Techniken zu verwenden, da sie einfach zu implementieren sind. Abschließend drückt der Redner seine Dankbarkeit für das Betreiben von Performance Engineering und die Entwicklung von Algorithmen aus, die verschiedene Google-Dienste verbessern, sowie für die Freundschaften, die er im Laufe seiner Karriere geschlossen hat.