Wilkening-Online Logo

C++ User-Treffen in Aachen am 8.9.2016



Von Detlef Wilkening

32 C++ Interessierte waren an diesem schönen Herbsttag zu Schlumberger gekommen, um mehr über C++ zu erfahren und zu diskutieren. Schlumberger erwartete alle Interessierten mal wieder mit Süßem, Saurem, Salzigen und Trinkbaren - ein großes Danke-Schön von hieraus.

C++ User-Treffen Aachen 08.09.2016 - Bild 1
Foto 01: C++ User-Treffen Aachen 8.9.2016

Der Abend sollte wieder eine große Vielfalt an C++ Themen bieten, aber bevor es soweit war, gab es zuerst die obligatorische Sicherheitseinweisung von Sven Johannsen und meinen Ausblick auf den aktuellen Abend und das nächste Treffen am 10. November 2016 bei Utimaco.

C++ User-Treffen Aachen 08.09.2016 - Bild 2
Foto 02: C++ User-Treffen Aachen 8.9.2016

Zum Glück hatte sich schon vor dem Abend Daniel Frey für einen Haupt-Vortrag im November angeboten, und so konnte ich auch den November schon vollständig ankündigen. Aber für 2017 waren noch viele Slots unbesetzt, und so kündigte ich schon mal an, die Pause mal wieder für die Suche nach Freiwilligen zu nutzen. Aber vor meiner Suche waren für den Abend noch einige Vorträge geplant...

Der Abend startete mit Guido Küpper und einem netten kleinen Vortrag über Performance-Mythen bzw. seinen Performance-Erfahrungen mit "std::string::rfind". Guido berichtete von einem Projekt, indem er mitarbeitet und indem XML-Daten eingelesen und aufwändig verarbeitet werden. Das Problem war nun, dass bei immer größeren und spezielleren XML-Daten die Verarbeitungszeit zum Teil immens anstieg - von bislang wenigen Minuten auf über eine halbe Stunde. Also wurde mit einem Profiler eine Performance-Untersuchung gestartet - und es passierte, was es eigentlich nur in schlechten Lehrbüchern gibt: eine einzelne Code-Zeile schluckte 95% der Performance - die Nutzung von "std::string::rfind".

C++ User-Treffen Aachen 08.09.2016 - Bild 3
Foto 03: Guido Küpper und "Performance-Mythen" bzw. seine Erfahrungen mit "std::string::rfind"

Der technische Hintergrund für diese Nutzung war folgende: in dem Projekt wird eine Closed-Source XML-Parser Bibliothek eingesetzt, die mit der Verarbeitung eines speziellen XML-Tags Probleme hat - darum wird dieses Tag vorher manuell bearbeitet. Dazu muß u.a. in dem XML-String (der in einem "std::string" gehalten wird) rückwärts nach dem Vorkommen eines bestimmten Text-Musters gesucht werden - und hierzu wurde "std::string::rfind" eingesetzt. Nirgendswo sonst wird "rfind" in diesem Projekt eingesetzt, und die Nutzungen von z.B. "find" waren vollkommen unauffällig.

Innerhalb des Projekts wurde dann viel gerätselt, was der Hintergrund dieses Problems war, aber letztlich nicht detailiert untersucht - dort ging es dann nur um eine Lösung des Problems. Ich persönliche vermute, dass es Rückwärts-Laufen durch den Speicher von der meisten Prozessoren nicht performant unterstützt wird, da es gegen die typischen Cache-Algorithmen der Prozessoren verstößt. Ich habe jedenfalls schon mal Zeitmessungen auf einem Intel i7 gemacht, bei dem einfaches Vorwärts-Laufen mit einem Zeiger ("++p") um Größenordnung schneller war als genauso einfaches Rückwärts-Laufen mit einem Zeiger ("--p"). Vielleicht hat hier jemand mehr Ahnung und Erfahrung und kann das mal untersuchen und hat dann Lust das Ergebnis auf einem C++ User-Treffen mal vorzustellen?

Aber zurück zum Vortrag: Guido ersetzte dann die Nutzung von "rfind" durch eine ganz andere eigene Lösung und die XML-Bearbeitung beschleunigte sich dann immens, auch bei anderen XML-Daten. Sein Fazit war: bei Performance- Problemen nicht an unveränderbare Mythen und Quanten-Fluktuationen glauben, sondern einfach mal messen! Seinen Vortrag findet man hier als PDF.

Danach war Matthias Gross mit seinem Vortrag über "Extremal Numbers" an der Reihe. Matthias hatte seinen Vortrag als Rätsel aufgezogen: er zeigte uns Code, und wir sollten zuerst erkennen was der Code wohl ausgibt, und dann welche Frage wohl dazu gehört. Matthias hatte jedenfalls sehr viel Spaß bei seinem Vortrag und an den Fragen.

C++ User-Treffen Aachen 08.09.2016 - Bild 4
Foto 04: Matthias Gross und "Extremal Numbers"

Dabei drehten sich alle Fragen um Probleme bei "Extremal Numbers" - daher um z.B. Integer-Überläufe und Fließkommadarstellungen - und da gibt es genug Fallen. Während die Integer-Überläufe von den meisten Anwesenden noch ganz gut beherrscht wurden, gab es bei den Fließkommadarstellungen von normalen Zahlen, aber gerade auch bei z.B. "NaN" oder "Infinit" doch viele Wissenslücken. Dementsprechend lehrreich waren die Beispiele und Fragen von Matthias - ich jedenfalls habe wieder ziemlich viel gelernt bei diesem spaßigen und unterhaltsamen Vortrag.

Der letzte Lightning-Vortrag war dann Tomas Dittmann mit einem Bericht über "Intuitives Bugtracking mit Kanboard" - einem Projekt-Management Tool, das auf der Kanban-Methode beruht. Im Kern hatte der Bericht natürlich nichts mit C++ zu tun, aber natürlich muss jedes Projekt - auch jedes C++ Projekt - verwaltet werden.

C++ User-Treffen Aachen 08.09.2016 - Bild 5
Foto 05: Tomas Dittman mit "Kanboard"

Tomas stellte vor, wie in seinem jetzigen Projekt Kanboard für das Projekt-Management und auch die Bug-Verfolgung genutzt wird - auch wenn Kanboard eigentlich kein echtes Bugtracking-System ist. Besonders gefiel ihm bei Kanboard die Einfachheit der Nutzung und gleichzeitig die flexible Anpaßbarkeit auf ihr Projekt.

C++ User-Treffen Aachen 08.09.2016 - Bild 6
Foto 06: Tomas Dittman mit "Kanboard"

Die Präsentation von Tomas über Kanboard findt man hier als PDF.

Danach war erstmal Pause angesagt: und während sich die Anwesenden auf die Snacks und die Getränke stürtzten, war ich unterwegs und suchte neue Vorträge für die nächsten Treffen. Und ich war auch wieder recht erfolgreich - auch Januar und März 2017 sind jetzt schon fast vollständig geplant, und einige weitere Teilnehmer haben mögliche Vorträge in Aussicht gestellt. Ein Danke von hier an alle, die sich einbringen und was vortragen - unser C++ User-Treffen lebt von eurer Beteiligung.

C++ User-Treffen Aachen 08.09.2016 - Bild 7
Foto 07: C++ User-Treffen Aachen 8.9.2016

C++ User-Treffen Aachen 08.09.2016 - Bild 8
Foto 08: C++ User-Treffen Aachen 8.9.2016

C++ User-Treffen Aachen 08.09.2016 - Bild 9
Foto 09: C++ User-Treffen Aachen 8.9.2016

Nach der Pause folgte Werner Clemens mit seinem zweiten Teil zu "Living in a Box". Teil 1 hatte Werner beim C++ User-Treffen am 12. Mai 2016 gehalten - und alle die damals dabei waren, waren sehr gespannt auf den zweiten Teil. Wir erinnern uns: im ersten Teil hatte Werner gezeigt, wie man geometrische Gebilde in verschachtelte Boxen steckt, um dann später effizient zum Beispiel Treffer oder Schnittmengen erkennen zu können - aber das fehlte damals ja noch.

Aber man mußte sich nicht erinnern - für all die, die beim ersten Teil nicht dabei waren, bzw. schon wieder alles vergessen hatten - wiederholte Werner im Schnelldurchlauf die Begriffe, Ideen und Erkenntnisse des ersten Teils.

C++ User-Treffen Aachen 08.09.2016 - Bild 10
Foto 10: Werner Clemens mit "Living in a Box"

Für heute hatte sich Werner vor allem Filterung, Treffer-Erkennung und ganz besonders Baum-Algorithmen vorgenommen. Denn letztlich bilden die Boxen in allen Ebenen ja einen Baum von Boxen. Und die Nutzung dieser aufgebauten Datenstruktur ermöglicht dann halt die effiziente Treffer- oder Schnittmengen-Erkennung. Wie immer war Werner voll in seinem Element und versuchte alle Zuhörer zu motivieren und mitzunehmen.

C++ User-Treffen Aachen 08.09.2016 - Bild 11
Foto 11: Werner Clemens mit "Living in a Box"

Gerade die Baum-Algorithmen lagen ihm sehr am Herzen, da sie den Kern von "Living in a Box" darstellen. Und während viele Baum-Algorithmen relativ breit bekannt waren, war z.B. der "Eulerwalk"den meisten dann doch unbekannt. Durch eine geschickte Anwendung der Baum-Struktur konnte Werner dann große Bereiche der Boxen direkt aussortieren und damit eine hohe Effizienz erreichen.

C++ User-Treffen Aachen 08.09.2016 - Bild 12
Foto 12: Werner Clemens mit "Living in a Box"

Besonders interessant war dann, wie er die rekursiven Baum-Durchläufe (wie z.B. den "Eulerwalk") quasi platt klopfte und Iteratoren implementierte, die dann einen iterativen Durchlauf unter Nutzung einer normalen For-Schleife oder der STL-Algorithen ermöglichten. Trotz Werners ausführlichem Vortrag blieben am Schluß aber immer noch Themen übrig - Werner wird wohl irgendwann noch einen dritten Teil übernehmen müssen.

Insgesamt war der Abend wieder sehr erfolgreich - viele interessante Themen und spannende Vorträge. Wir freuen uns schon auf das nächsten C++ User-Treffen am 10. November 2016.



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.


C++ User-Treffen: