![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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 2. Bentley-Regeln zur Arbeitsoptimierung
2. Bentley-Regeln zur Arbeitsoptimierung
Dieses YouTube-Video behandelt verschiedene Optimierungstechniken für Computerprogramme. Die Bentley-Regeln zur Optimierung der Arbeit werden eingeführt und die Optimierungen in Datenstrukturen, Schleifen, Logik und Funktionen gruppiert. Verschiedene Techniken wie Kodierung von Werten, Datenstrukturerweiterung, Vorberechnung, Caching und Verwendung von Matrizen mit geringer Dichte werden diskutiert. Der Referent geht auch auf die Vorteile der Verwendung einer spärlichen Matrixdarstellung für Graphen, Logikoptimierung und Kollisionserkennungsoptimierung in Grafikprogrammen ein. Die Implementierung dieser Optimierungstechniken trägt dazu bei, die Laufzeit von Programmen zu reduzieren und sie effizienter zu machen.
Der zweite Teil des Videos behandelt mehrere Kategorien von Optimierungstechniken, darunter das Heben von Schleifen, die Verwendung von Sentinels in Schleifen, das Abrollen und Verschmelzen von Schleifen sowie das Inlining von Funktionen. Der Referent rät von voreiliger Optimierung ab und betont die Wichtigkeit der Einhaltung der Korrektheit und der Anwendung von Regressionstests. Das Video umreißt auch die Bentley-Regeln zur Arbeitsoptimierung, eine Anleitung in sechs Schritten zur Steigerung der Produktivität und zum effizienten Erreichen von Zielen. Zu diesen Regeln gehören das Setzen klarer Ziele, das Aufteilen von Aufgaben, das Planen und Organisieren, das Priorisieren von Aufgaben, das Minimieren von Ablenkungen und das regelmäßige Überprüfen und Anpassen des eigenen Vorgehens.
Vorlesung 3. Bit-Hacks
3. Bit-Hacks
Dieses YouTube-Video behandelt eine Vielzahl von Themen zur Bit-Manipulation, einschließlich Binärdarstellung, Zweierkomplement, bitweise Operatoren, Austauschen von Variablen ohne temporäre Variable und Code-Optimierung. Das Video demonstriert verschiedene Bit-Tricks, wie z. B. das Finden des Minimums von zwei Ganzzahlen ohne if-else-Anweisungen und wie man zwei Ganzzahlen vertauscht, ohne eine temporäre Variable zu verwenden. Der Redner diskutiert unvorhersehbare Verzweigungen und stellt einen No-Branch-Minimum-Bit-Trick vor, wenn vorhersehbare Verzweigungen nicht verfügbar sind, und zeigt, wie Bit-Hacks Code optimieren können, indem kostspielige Operationen wie Division durch einfache bitweise Operationen ersetzt werden. Das Video diskutiert auch die de Bruijn-Folge und ihre Anwendung bei der Lösung von Problemen wie dem N-Queens-Problem.
Der zweite Teil behandelt die Lösung des N-Queens-Problems unter Verwendung von Bitvektoren und das effiziente Zählen der Anzahl von 1-Bits in einem Binärwort. Backtracking wird verwendet, um das N-Damen-Problem zu implementieren, und Bitvektoren werden verwendet, um die Platine effizient darzustellen. Es werden drei Überprüfungen beschrieben, um eine Dame im N-Damen-Problem sicher zu platzieren, und es wird ein Verfahren zum Zählen der Anzahl von 1-Bits in einem Wort durch rekursives Eliminieren des niedrigstwertigen 1-Bits vorgestellt. Zusätzlich wird die Verwendung von Tabellennachschlagen und Registermanipulation zum Zählen der Anzahl von 1-Bits diskutiert. Das Video endet mit einer Demonstration eines Teile-und-Herrsche-Ansatzes zum Zählen von 1-Bits, dessen Leistung proportional zur logarithmischen Basis zwei der Wortlänge ist. Es werden auch Ressourcen für weiterführendes Lernen bereitgestellt.
Vorlesung 4. Assemblersprache & Computerarchitektur
Vorlesung 4. Assemblersprache & Computerarchitektur
Dieses Video bietet einen umfassenden Überblick über Assemblersprache und Computerarchitektur. Die Assemblersprache ist eine wichtige Schnittstelle zur Optimierung der Codeleistung, und das Verständnis der Computerarchitektur ist für die Beherrschung der Assemblersprache unerlässlich. Der Referent erläutert die Geschichte der x86 64-Architektur und ihre Entwicklung, ihre Schlüsselregister, Datentypen, Speicheradressierungsmodi und die Befehlssatzarchitektur, einschließlich Stacks, ganzzahliger und binärer Logik, boolescher Logik und Subroutinen. Sie diskutieren auch Erweiterungen wie Null- und Vorzeichenerweiterung und verschiedene Adressierungsmodi in Assemblersprache. Darüber hinaus behandelt das Video Gleitkommatypen, Vektoren und Vektoreinheiten, herkömmliche und SSE-Anweisungen sowie Designfunktionen für Computerarchitekturen wie superskalare Verarbeitung, Out-of-Order-Ausführung und Verzweigungsvorhersage.
Das Video behandelt auch mehrere Themen im Zusammenhang mit Assemblersprache und Computerarchitektur. Eines der zentralen Themen ist Parallelität auf Befehlsebene (ILP) und Pipeline-Stalls, die durch Gefahren wie Datenabhängigkeiten verursacht werden. Der Redner erörtert wahre, Anti- und Ausgangsdatenabhängigkeiten und wie superskalare Prozessoren mehr Parallelität in der Hardware nutzen können, um mehrere Befehle gleichzeitig auszuführen. Um Gefahren zu vermeiden, haben Architekten jedoch Strategien wie Umbenennen und Neuordnen sowie spekulative Ausführung implementiert, um das Ergebnis einer Verzweigung zu erraten und im Voraus auszuführen. Der Referent ermutigt das Publikum, diese Methoden zu verstehen, um Softwareoptimierungen besser zu verstehen.
Vortrag 5. C zur Versammlung
Vortrag 5. C zur Versammlung
In diesem Teil des Videos wird erläutert, wie wichtig es ist, C für die Assemblersprache zu verstehen, und wie C-Code mithilfe eines Compilers in Assemblersprache implementiert wird. Der Schwerpunkt liegt speziell darauf, wie LLVM IR in der Linux x86 64-Aufrufkonvention in Assembly übersetzt wird. Der Referent erklärt die grundlegenden Komponenten von LLVM IR und wie Konstrukte in der Programmiersprache C in LLVM IR übersetzt werden. Das Video behandelt auch das Layout des virtuellen Speichers, das Problem der Koordinierung von Funktionsaufrufen zwischen mehreren Funktionen und die Verwendung von zwei Zeigern – BP und SP – in der Linux x86 64-Aufrufkonvention zur Verwaltung aller Stack-Frames.
Das Video erklärt auch die Strategien zum Beibehalten von Registerzuständen in der C-to-Assembly-Programmierung, wie z. B. das Speichern von Registern entweder als caller-save oder callee-save, und wie die x86-Aufrufkonvention Arbeitsverschwendung vermeidet. Es behandelt, wie Funktionsaufrufe in C und Assembler funktionieren, diskutiert den Vorgang des Speicherns von Argumenten und lokalen Variablen auf dem Stapel sowie die allgemeine Optimierung der Verwendung des Stapelzeigers anstelle des Basiszeigers. Das Video zeigt auch den Prozess der Kompilierung von LV miR in Assembler-Code, die Erörterung des Funktionsprologs, das Speichern von Registern, die Handhabung von Bedingungen und das Konvertieren von C-Code in Assembler-Code mithilfe eines Kontrollflussdiagramms. Schließlich spricht es über den Funktionsepilog, der verwendet wird, um Register wiederherzustellen, bevor Ergebnisse zurückgegeben werden.
Register, die Aufrufkonvention beschreibt Regeln, welche Register jede Funktion verwenden kann und wie sie diese Register durch Funktionsaufrufe erhalten müssen.
Vorlesung 6. Multicore-Programmierung
Vorlesung 6. Multicore-Programmierung
Dieser Videovortrag behandelt die Multicore-Programmierung und die Entstehung von Multicore-Prozessoren aufgrund des Mooreschen Gesetzes und das Ende der Skalierung von Taktfrequenzen. Der Redner erklärt das Problem der Leistungsdichte, mit dem Prozessoren konfrontiert sind, und wie es dazu führte, dass Chips um mehrere Kerne erweitert wurden, um mit dem Moore'schen Gesetz Schritt zu halten. Die Vorlesung behandelt auch die Grundlagen von Cache-Kohärenzprotokollen in Shared-Memory-Hardware und Parallelitätsplattformen wie Pthreads, TBB, OpenMP und Silk, die Abstraktionen für die parallele Programmierung bereitstellen. Die Vor- und Nachteile jeder Plattform werden diskutiert und anhand von Beispielen für die Implementierung von Fibonacci-Programmen demonstriert. Das Video bietet einen umfassenden Überblick über die Multi-Core-Programmierung und die Herausforderungen und Lösungen, denen Programmierer gegenüberstehen.
Das Video behandelt auch verschiedene Aspekte von Silk, einem Abstraktionstool zur Handhabung der Parallelverarbeitung. Der Referent bespricht Themen wie verschachtelte Silk-for-Loops, Generieren von Assembler-Code, Reduktion mit Reducern, Scheduler und Leistungsoptimierung. Sie bieten auch einen Überblick über das Silk-Ökosystem und verwandte Tools wie Silk Sanitizer und Silk Scale zum Debuggen bzw. Analysieren der Skalierbarkeit. Die wichtigste Erkenntnis ist, dass das Schreiben paralleler Programme für Multicore-Prozessoren eine Herausforderung sein kann, aber Silk vereinfacht den Prozess, indem es komplexe Aufgaben effizient handhabt und Programmierern mehr Kontrolle über die Ausführung ihres Codes gibt.
Vorlesung 7. Rassen und Parallelität
Vorlesung 7. Rassen und Parallelismus
Das Video behandelt eine Reihe von Themen im Zusammenhang mit Rassen, Parallelität und Berechnungs-Dags in der Silk-Programmierung. Zu den wichtigsten behandelten Konzepten gehören die Spawn- und Sync-Anweisungen für die gleichzeitige Ausführung, die Bedeutung der Vermeidung von Race-Conditions und die Verwendung des Race-Detektors von Silk zu ihrer Identifizierung. Das Video behandelt auch das Amdahlsche Gesetz, das Arbeitsgesetz und das Span-Gesetz als Möglichkeiten zur Quantifizierung des Umfangs der Parallelität in einem Programm sowie Möglichkeiten zur Analyse der Arbeit und der Spanne von Berechnungen. Die potenzielle Beschleunigung und Parallelität paralleler Sortieralgorithmen und das Konzept der Scheduling-Theorie werden ebenfalls diskutiert, wobei der Schwerpunkt auf dem Theorem des Greedy-Schedulers liegt. Insgesamt bietet das Video wertvolle Einblicke in das Verständnis und die Optimierung der Programmleistung in der Silk-Programmierung.
Das Video erklärt die Folgeerscheinungen der Greedy-Scheduler-Grenze, die im Wesentlichen besagt, dass jeder Greedy-Scheduler eine nahezu perfekte lineare Beschleunigung erreicht, solange T1/Tinfinity größer oder gleich P^2 ist. Der Silk-Scheduler, der einen arbeitsraubenden Scheduler verwendet, kann eine nahezu perfekte lineare Beschleunigung erreichen, solange die Anzahl der Prozessoren viel geringer ist als bei T1/Tinfinity. Das Silk-Laufzeitsystem funktioniert, indem es ein Arbeitsdeck mit fertigen Strängen verwaltet und den Boden des Decks wie einen Stapel manipuliert. Das Video behandelt auch den Cactus Stack, der mehrere Ansichten von Stacks parallel ermöglicht und parallele Funktionsaufrufe ermöglicht. Die Obergrenze des für die P-Prozessorausführung erforderlichen Stapelspeicherplatzes ist oft viel lockerer als die tatsächlich benötigte Menge, da nicht jeder Prozessor jedes Mal, wenn er Arbeit stiehlt, den Berechnungsgraphen ganz nach unten gehen muss.
Vorlesung 8. Analyse von Multithread-Algorithmen
Vorlesung 8. Analyse von Multithread-Algorithmen
In diesem Video wird die Hauptmethode zum Analysieren von Teile-und-Herrsche-Wiederholungen erörtert und auf Multithread-Algorithmen angewendet, indem die logarithmische Basis B von n mit der logarithmischen Basis B von A mit F von N verglichen wird, um ihr Wachstum in n und die erforderliche Arbeit zu bestimmen. Das Video präsentiert einen Spickzettel mit Lösungen für grundlegende Multithread-Algorithmen und behandelt Themen wie Arbeits- und Span-Analyse, Arbeitseffizienz und Überwindung von Gemeinkosten durch Optimierung der Korngröße. Die Bedeutung von Empathie bei der Kommunikation technischer Themen wird betont, und das Konzept einer DAG wird als Mittel zum Ausgleich von Arbeit und Spannweite eingeführt, um die Parallelität zu erhöhen und die Laufzeit zu verringern.
Das Video behandelt auch die Analyse von Multithread-Algorithmen, wobei der Schwerpunkt auf Arbeit und Spanne liegt, und wie man die Parallelität maximiert und gleichzeitig die Spanne minimiert, um eine nahezu perfekte lineare Beschleunigung zu erreichen. Der Redner schlägt einen Teile-und-Herrsche-Ansatz für Multithread-Algorithmen vor, bei dem die Anzahl der Aufgaben, die den Threads zugewiesen werden, ausreichend groß ist, und warnt davor, zahlreiche kleine Aufgaben aufgrund von Planungs-Overheads hervorzubringen. Der vorgestellte Beispielcode enthält einen effizienten und einen miesen. Der Redner erörtert auch, wie Untermatrizen in der zweidimensionalen Codierung und Indizierung dargestellt werden, und betont die Verwendung von „Einschränken“ im Multiplikationscode „Teile und Herrsche“ der Matrix, um die Leistung zu verbessern.
Vorlesung 9. Was Compiler können und was nicht
Vorlesung 9. Was Compiler können und was nicht
In diesem Video wird anhand verschiedener Beispiele erläutert, wie Compiler Code optimieren können. Es erklärt, wie Compiler unnötige Speicher- und Speicherreferenzen eliminieren und Schleifen optimieren können, um die Leistung zu verbessern.
Dieses Video erklärt auch das Konzept der Compiler-Optimierungsdurchläufe und wie sie zur Verbesserung der Codeleistung verwendet werden können. Außerdem werden die Einschränkungen von Compilern erörtert, insbesondere in Bezug auf die Vektorisierung. Compiler können Code nur vektorisieren, wenn sie feststellen können, dass die Zeiger im Code keinen Alias verwenden. Wenn die Zeiger einen Alias verwenden, kann der Compiler den Code nicht vektorisieren. Als Programmierer können Sie dem Compiler helfen, indem Sie Ihre Zeiger mit Anmerkungen versehen, um mehr Informationen über ihre Verwendung bereitzustellen.
Vorlesung 10. Messung und Zeitmessung
Vorlesung 10. Messung und Zeitmessung
In diesem Video erörtern die Referenten verschiedene Aspekte der Messung und des Timings in der Datenverarbeitung, einschließlich externer Faktoren, die die Genauigkeit beeinträchtigen können. Sie betonen die Notwendigkeit von Modellen und einem klaren Verständnis der Daten, die Verringerung der Varianz zur Kompensation von Fehlern und die Verwendung geeigneter Timing-Aufrufe zur Gewährleistung der Zuverlässigkeit. Sie diskutieren auch Herausforderungen bei der genauen Messung der Softwareleistung, wie z. B. das Potenzgesetz und nicht deterministische Faktoren, und heben Tools wie Leistungsmodellierung, Timing-Aufrufe, Hardwarezähler und Simulatoren hervor. Schließlich warnen sie davor, sich auf ein einzelnes Tool zu verlassen, und empfehlen Triangulation und Anpassung als Techniken, um genaue Ergebnisse zu gewährleisten.
Der Referent erläutert die Bedeutung einer zuverlässigen Leistungsmessung im Performance Software Engineering. Er empfiehlt die Verwendung von Statistiken, um die Leistung genau zu messen, und erörtert verschiedene Arten von zusammenfassenden Statistiken wie den Mittelwert, die in verschiedenen Kontexten nützliche Leistungsmaße liefern können. Er weist darauf hin, dass das Verwenden des arithmetischen Mittels von Verhältnissen kein gültiger Ansatz ist, und schlägt vor, stattdessen das geometrische Mittel zu verwenden. Der Redner betont, wie wichtig es ist, beim Vergleichen von Programmen die richtige Methode zum Aggregieren von Daten zu wählen, und schlägt vor, die Statistik niedriger Ordnung, z. B. das Minimum oder 10 %, aus mehreren Läufen zu verwenden, um die Leistung genauer zu vergleichen. Der Redner erörtert auch verschiedene Methoden zum Messen und Vergleichen der Leistung, einschließlich Kopf-an-Kopf-Vergleich und Anpassung eines Modells zur Ableitung von Statistiken, warnt jedoch vor dem Problem der Überanpassung bei der Modellierung. Insgesamt betont das Video die Bedeutung einer zuverlässigen Leistungsmessung zur Verbesserung der Programmleistung.
Vorlesung 11. Speicherzuordnung
Vorlesung 11. Speicherzuordnung
Der Dozent erörtert in diesem Video die Speicherzuweisung, wobei sowohl die Speicherzuweisung als auch die Freigabe behandelt werden. Es werden unterschiedliche Arten der Speicherung angesprochen, darunter Stack und Heap sowie Zuweisungsschemata mit fester und variabler Größe. Externe Fragmentierung durch verteilte Speicherblöcke wird ebenfalls diskutiert, mit Lösungen wie freien Listen oder Bitmaps pro Plattenseite. Das Konzept der Garbage Collection wird ebenfalls eingeführt, einschließlich der Referenzzählung und der Einschränkungen dieses Algorithmus. Die Garbage-Collection-Prozeduren „markieren und fegen“ und „stoppen und kopieren“ werden ebenfalls erläutert, wobei der Schwerpunkt darauf liegt, wie letztere die Fragmentierung und das mögliche Korrektheitsproblem angeht, das durch Zeigeraktualisierungen verursacht wird. Das Video schließt mit Anmerkungen zur zeitlichen und räumlichen Komplexität des Stop-and-Copy-Algorithmus und seiner Eliminierung externer Fragmentierung.
Dieses Video behandelt verschiedene Themen im Zusammenhang mit der dynamischen Speicherzuweisung, darunter das Buddy-System, Mark-and-Sweep-Verfahren, Optimierungen, Garbage Collection für Generationen und Echtzeit, Multithread-Speicherzuweisung und parallele Garbage Collection. Der Dozent erklärt, dass die Generational Garbage Collection auf der Idee basiert, dass jüngere Objekte häufiger gescannt werden, während die Echtzeit-Garbage Collection während der Programmausführung im Hintergrund läuft, aber zu Korrektheitsproblemen führen kann, wenn sich das Objekt und der Zeigergraph ständig ändern. Abschließend fasst die Vorlesung verschiedene Arten der Speicherzuordnung zusammen, einschließlich Stack und Heap, und verschiedene Methoden der Speicherbereinigung, wie Referenzzählung, Mark-and-Sweep und Stop-and-Copy. Der Dozent erwähnt, dass die Studierenden einige dieser Methoden in ihrer bevorstehenden Hausaufgabe ausprobieren können.