C++Guns – RoboBlog

12.12.2018

C++ Guns: Rätsel 2018

Filed under: Allgemein — Tags: — Thomas @ 21:12

Betrachte ein unstruturiertes Gitternetz bestehend aus Punkte und Dreiecken. Jeder Punkt kann durchnummeriert werden. Für jeden Punkt IP bezeichnet die Variable NCONN die Anzahl der angeschlossenen Punkte pro Punkt. Und die Variable NCONE bezeichnet die angeschlossene Dreiecke pro Punkt. Es ist leicht zu sehen, dass Punkte am Rand eine unterschiedliche Anzahl von angeschlossenen Punkte und […]

08.12.2018

C++ Guns: Level of Indirection ("dereferencing")

Filed under: Allgemein — Tags: — Thomas @ 13:12

Die Performance ist ein Opfer von Level of Indirection. Jetzt auch bei mir. Ich will keinen langweiligen Code zeigen wie so etwas aussieht, oder wie man es verhindern kann. Viel interessanter ist es doch, wie das aus Assembler Ebene aussieht. Dazu zwei Assembler Auszüge. Der erste mit zwei zusätzlichen Indirektionen. Es wird auf das i-th […]

30.10.2018

C++ Guns: disable function with concepts without SFINAE std::enable_if

Filed under: Allgemein — Tags: — Thomas @ 21:10

std::enable_if is dead; long live concepts! Man beachte, dass die Requires clause NACH dem Funktionskopf kommen kann.

12.10.2018

C++ Guns: -Ofast in action

Filed under: Allgemein — Tags: — Thomas @ 10:10

Mit -Ofast wird bei folgenden Code die Power Funktion weg optimiert und durch die dritte Wurzel ersetzt. Im Assembler Code ist nur noch cbrt zu erkennen, kein pow mehr. Der Assembler Code zurück nach C++ übersetzt gibt folgenden: Die pow Funktion mit zwar bekannten, aber "unschönen" Exponenten wurde ersetzt durch eine Multiplikation und eine Power […]

27.09.2018

C++ Guns: Are floating point numbers sortable?

Filed under: Allgemein — Tags: — Thomas @ 09:09

Sind Gleitkommazahlen sortierbar? Wegen NaN gibt es keine Ordnung und das Sortieren mit NaN im Datensatz schlägt fehlt. Aber man kann sich schnell selbst eine Ordnung bauen: -1.79769e+308 0 -0 0.333333 1 2 nan 4.94066e-324 2.22507e-308 2.22045e-16 1.79769e+308 inf is sorted true

13.09.2018

FORTRAN: GDB conditional watchpoint

Filed under: Allgemein — Tags: — Thomas @ 13:09

To set a conditional watchpoint on local variable i. Example Code: Compile with -ggdb Set a breakpoint on subroutine "func". After the debugger stop on this point, the local variable "i" is in scope so one can set a watchpoint. $ gdb ./example (gdb) break func Breakpoint 1 at 0x8bb: file gdb.F90, line 4. ODER […]

30.08.2018

FORTRAN: 3x3 matmul intrinsic vs. hand crafted

Filed under: Allgemein — Tags: — Thomas @ 20:08

Verglichen wird der erzeugte Assembler Code der internen Fortran matmul() Routine mit einer von Hand geschriebenen Matrix Multiplikation. Getestet wird für 3x3 Matrizen mit zur Compilezeit bekannter Größe. Sonst könnte man den vom FORTRAN Compiler erzeugten Assembler Code gar nicht mehr nachvollziehen. Und hier von Hand Getestet wird mit gfortran 7.3.0 -O1. Die Hand Version […]

23.08.2018

C++ Guns: Solve std::forward_list no size() method problem

Filed under: Allgemein — Tags: — Thomas @ 21:08

Why has forward_list no size() method? In short: Its about performance. A single linked list size() function has a asymptotic complexity of O(n). We do not usually need something like that. So we don't have something. The second reason is: For a O(1) size() function, it would increase the size of std::forward_list by 8 byte. […]

19.08.2018

C++ Guns: Are lists evil?

Filed under: Allgemein — Tags: — Thomas @ 21:08

The problem seems to be an interesting little exercise that John Bentley once proposed to me: Insert a sequence of random integers into a sorted sequence, then remove those elements one by one as determined by a random sequence of positions: Do you use a vector (a contiguously allocated sequence of elements) or a linked […]

15.08.2018

C++ Guns: why C++ ist better than C. Or: keyword restrict is useless

Filed under: Allgemein — Tags: — Thomas @ 19:08

Das restricted keyword in C restrict keyword...is basically a promise to the compiler that for the scope of the pointer, the target of the pointer will only be accessed through that pointer (and pointers copied from it). In C++ geben wir keine Versprechen. Grundsätzlich nicht. Das Beispiel von cppreference.com verdeutlich das Optimierungspotential ziemlich anschaulich. Gegeben […]

Older Posts »

Powered by WordPress