C++Guns – RoboBlog

29.01.2015

Five Myths about C++ BUSTED!

Filed under: Allgemein — Tags: , — Thomas @ 03:01

This is a short of http://www.stroustrup.com/Myths-final.pdf Myth 1: “To understand C++, you must first learn C” C is almost a subset of C++, but it is not the best subset to learn first because C lacks the notational support, the type safety, and the easier-to-use standard library offered by C++ to simplify simple tasks. Consider […]

02.01.2015

raw speed of C using OO with C++

Filed under: Allgemein — Tags: , , — Thomas @ 20:01

Programs written in C are very very fast. Those written in C++ can be slower due to the fact that copying object is not alway easy as copying an array of numbers. One have to call the copy constructor maybe with side effects like allocate some space. The language C++ is full backwards compatible to […]

07.10.2014

Faster Code – Part 6 – Sprungvorhersage - anschaulich

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

Sehr schöne anschauliche Erklärung: http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array

28.03.2013

Qt Source und kleine Perlen

Filed under: Allgemein — Tags: , , — Thomas @ 23:03

Ich habe in den letzten 3 Tagen viel Qt Source gelesen und da war schon viel Wirr und Krams dabei. Aber auch kleine Perlen wie diese Zeile in QRectF QPolygonF::boundingRect() const zeige register const QPointF *pd = constData(); for (int i = 1; i < size(); ++i) { ++pd; } Da kennt ein Performance-Fan das […]

09.04.2012

Faster Code – Part 6 – Sprungvorhersage again

Filed under: Allgemein — Tags: , , , — Thomas @ 16:04

Wie im letzten Post angekündigt, gibt es jetzt die genauere Analyse meines Tests. Hier erstmal das Programm: int mymin(int a, int b) __attribute__ ((noinline)); int mymin(int a, int b) { asm (""); if (b < a) return b; return a; } int mymin2(int a, int b) __attribute__ ((noinline)); int mymin2(int a, int b) { asm […]

06.04.2012

Faster Code – Part 6 – Sprungvorhersage

Filed under: Allgemein — Tags: , , , — Thomas @ 19:04

Es ist ja so, dass ein Befehl auf der CPU nicht nur ausgeführt wird, er muss auch aus dem Speicher geladen und dekodiert werden. Heutige CPUs dekodieren schonmal den nächsten Befehl, wärend der aktuelle noch ausgeführt wird. Und der übernächste wird zeitgleich aus dem Speicher geholt. Das nennt man Prozessor-Pipeline [1] und das ist cool. […]

30.03.2012

Faster Code – Part 5 - huge pages

Filed under: Allgemein — Tags: , , , — Thomas @ 21:03

Tach und Willkommen beim fünften Teil von Faster Code. Heute geht es um huge page. Eine Page ist normal 4kb groß. Eine hugepage hat 2MB, 4MB oder nocht viel mehr. Hoch zu 1GB. Je nach System, CPU u.s.w. Die Größe ermittelt man so: $ grep Huge /proc/meminfo HugePages_Total: 46 HugePages_Free: 46 HugePages_Rsvd: 0 HugePages_Surp: 0 […]

28.03.2012

Faster Code – Part 4 – align memory again

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

Wie ich im letzten Post erwähnt habe, ist es gut wenn Variablen im RAM ausgerichtet vorliegen. Nun muss man aber noch bedenken, dass nicht einzelne Variablen aus dem RAM geladen werden, sondern ganze Cache-Zeilen. Nun wäre es doch auch cool, wenn Arrays auf eine Seitenbreite ausgerichtet sind. Man stelle sich nur mal vor, zwei Threads […]

27.03.2012

Faster Code - Part 3 - align memory

Filed under: Allgemein — Tags: , , , — Thomas @ 18:03

Variablen deren Adressen ein vielfaches von 4Byte (oder 8Byte auf 64Bit???) sind, können schneller aus dem RAM geladen werden. Man sollte also bei oft benutzen Variablen darauf achten und nicht nur blind der Compiler Optimierung vertrauen. Gerade bei Sachen wie SSE ist es gut, wenn die Array Elemente auf 16Byte ausgerichtet sind, da ein SSE […]

Faster Code - Part 2

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

Es geht um std::vector Das i-te Element von vector a kann statt mit a[i] e?zienter mit T::iterator ai = a.begin(); T element = *(ai + i); dereferenziert werden. Dies entspricht der internen Arbeitsweise des Indexoperators, jedoch erzeugt dieser bei jedem Elementzugri? einen Iterator auf den Anfang des Containers. Gerade in Schleifen, in denen große Datenströme […]

Older Posts »

Powered by WordPress