Wie immer am Anfang des Berichts kurz der Hinweis, dass alle Vorträge, Quelltexte, usw. - soweit
vorhanden bzw. mir bekannt - auf der Vortrags-Übersichts-Seite
verlinkt sind.
Das C++ Treffen fand diesmal bei NI statt. 18 C++ Interessierte waren gekommen, um sich Vorträge über C++ anzuhören und um über C++ zu diskutieren. So wenig Leute waren noch nie beim C++ Teffen in Aachen gewesen - aber wir haben keine Idee, warum? Wie dem auch sei - die die gekommen waren erlebten einen schönen und interessanten Abend.
Foto 01: C++ User-Treffen Aachen 10.1.2019
Zuerst einmal vielen Dank von hier an NI für den Raum und die Bewirtung mit Essen und Getränken. Gerade für die, die direkt von der Arbeit kamen, war dies ein sehr angenehmer Einstieg in den Abend.
Foto 02: C++ User-Treffen Aachen 10.1.2019
Wie fast immer startete der Abend mit einer kuzen Einleitung von mir. Diesmal mussten wir die Reihenfolge der Vorträge umdrehen - normalerweise machen wir immer die kleinen Vorträge vor und den Hauptvortrag nach der Pause. Aber Klaus Wittlich war für den Hauptvortrag aus Köln gekommen, und er musste für die Rückfahrt seinen Zug erreichen - mit dem Hauptvortrag am Ende des Abends hätte das sehr eng werden können. Darum zogen wir den Hauptvortrag vor die Pause, und die Lightning-Vorträge hinter die Pause.
Foto 03: Detlef Wilkening bei der obligatorischen Einleitung des C++ User-Treffens
Damit war dann auch schon direkt Klaus mit seinem Vortrag über "C++ Zufallszahlen-Generatoren und -Distributoren" dran. Zuerst ging Klaus auf die Generatoren ein, und arbeitete die Unterschiede zwischen den einzelnen Generatoren heraus und ging auf Besonderheiten ein. Zum Beispiel sollte man beim Mersenne-Twister der ersten 100.000 Zahlen erstmal ignorieren, bevor ihn nutzt. Dies hatte ich schon häufiger gehört, und mich immer gefragt: warum? Klaus hatte die Antwort dabei - kurz gesagt: es hängt an den Konfigurationswerten des Mersenne-Twister. Je nachdem welche man nimmt, sind die ersten Zahlen eben nicht wirklich zufällig - und deshalb die 100.000. Konfiguriert man den Mersenne-Twister mit Nullen, dann wird es noch schlimmer - die Zahlen werden nie zu guten Zufallszahlen - als den Mersenne-Twister nie mit Nullen konfigurieren. Dem gegenüber sind die vorkonfigurierten Mersenne-Twister "mt19937" und "mt19937_64" gute Optionen - dazu enthält der Standard fertige Engine-Adapter (zum Teil mit vordefinierten Parametern) wie besagter "mt19937_64" oder auch "ranlux48_base" oder "independent_bits_engine" - aber auch viele andere.
Foto 04: Klaus Wittlich mit "C++ Zufallszahlen-Generatoren und -Distributoren"
Ähnliche Details lieferte Klaus auch für die C++ Distributoren. Mit Mathematica zeigte er uns live, welche Verteilungen der Zufallszahlen die Distributoren erzeugen, und welche Auswirkungen einzelne Parameter haben. Die direkte grafische Darstellung der Verteilungen half sehr, die manchmal doch recht abstrakte Theorie zu veranschaulichen. Wer möchte, kann das selber zuhause ausprobieren. Auf der Vortrags-Übersichts-Seite findet sich sowohl die CDF-Datei von Klaus und eine kleine Anleitung für den Wolfram CDF-Player, mit dem jeder die CDF-Datei interaktiv ausführen kann. Es macht wirklich Spaß und ist sehr erhellend. Vielen Dank an Klaus für den interessanten Vortrag.
Foto 05: Klaus Wittlich mit "C++ Zufallszahlen-Generatoren und -Distributoren"
Nach dieser - zum Teil auch recht theoretischen - Kost machten wir eine kleine Pause, und nutzten die Gelegenheit uns mit Getränken und Essen neu zu stärken. Und natürlich nutzte ich die Pause auch, um auf die Suche nach neuen Vorträgen für die nächsten Treffen zu gehen.
Foto 06: C++ User-Treffen Aachen 10.1.2019
Foto 07: C++ User-Treffen Aachen 10.1.2019
Nach der Pause gab es diesmal die beiden Lightning-Vorträge. Den Anfang machte Georg Hellack mit "Boost.Log". Boost.Log ist eine Bibliothek für Loging - ein Feature, das wohl jede Anwendung benötigt. Georg führte ruhig und gekonnt in die Features der Boost Log Bibliothek ein. Dazu stellte er erstmal die Architektur vor und beschrieb die Logger & Sources, die Links & Backends, die Filter & Formatierer und vieles mehr.
Foto 08: Georg Hellack mit "Boost.Log"
Da Loging wohl jeden Programmierer betrifft, gab es natürlich viele Nachfragen und Diskussionen. Jeder hat seine Vorstellung davon, wie eine ideale Log-Bibliothek aussieht, und was sie können muss. Und vor allem darf sie natürlich keine Performance kosten. Georg beantwortete kompetent die vielen Zwischen-Fragen, und konnte viele Feinheiten im Code zeigen. Boost.Log ist ohne Frage eine Bibliothek, die C++ Loging gut erfüllt. Aber es war auch klar: sie konnte auch nicht alle speziellen Anforderungen abdecken. Es gibt also noch Platz für andere Log-Bibliotheken und Raum für weitere Vorträge. Danke an Georg für den hilfreichen Vortrag.
Foto 09: Georg Hellack mit "Boost.Log"
Den letzten Vortrag des Abends hatte ich dann übernommen. Wie schon häufiger bei mir, hatte ich den Titel extra etwas unbestimmt gelassen - um im Vorfeld nichts zu verraten "Wie clever rechnen C++ Compiler?". Und der Vortrag blieb erstmal sehr unbestimmt. Statt direkt zum Thema zu kommen, schlug ich einen großen Umweg ein und erzählte erstmal wie es überhaupt zu diesem Vortrag gekommen ist. Seine Wurzeln hat er in meinem Alter - und den damit einhergehenden Erfahrungen mit ziemlich alten Computern. Meiner ersten Programmier- Schritte erlebte ich mit einer Wang 2200 - siehe hier (Wang2200.org) oder hier (Wikipedia). So nahm ich meine Zuhörer erstmal mit auf eine amüsante und interessante kleine Zeitreise durch das Mittelalter der Computerzeit. Die meisten Teilnehmer konnten nur staunend zuhören - während ein paar sogar ein paar eigene Anekdoten beitragen konnten.
Foto 10: Detlef Wilkening mit "Wie clever rechnen C++ Compiler?"
Irgendwann auf dieser Reise habe ich jahrelang auf verschiedenen Plattformen aus Performance-Gründen in 68.000 Assembler programmiert. Und damals hat man aus Performance-Gründen z.B. die Multiplikation mit 10 durch eine Kopie, einen Schiebevorgang und eine Addition ersetzt: 10 => 2^3 + 2 - und schon hatte man wieder 10-20 Taktzyklen gespart. Und die Frage, die ich heute stellen und beantworten wollte: Sind solche oder ähnliche Optimierungen heute immer noch sinnvoll - und wenn ja, machen die C++ Compiler sie auch? Um es kurz zu beantworten: ja und ja. Für über 20 beispielhafte Multiplikatoren und 3 Compiler hatte ich mit dem Compiler-Explorer den Code untersucht - und manche Lösungen der Compiler waren echt beeindruckend. Aber da die C++ Compiler diese Optimierungen ja automatisch vornehmen, können wir uns beruhigt zurücklehnen und die Performance von C++ genießen.
Dann war das Treffen leider vorbei. Einige gingen direkt, andere blieben noch länger, räumten mit auf und diskutierten die gehörten Themen und Vorträge. Wie immer war es ein interessanter und spannender Abend voller toller Themen gewesen.
Den nächsten Termin, weitere Berichte und andere Informationen zu den C++ User-Treffen in Aachen finden sich auf meiner "C++ User-Treffen in Aachen" Seite.