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 […]
09.04.2012
06.04.2012
Faster Code – Part 6 – Sprungvorhersage
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
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
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
Linux + Canon Powershot SX 130
Es funktioniert... zumindest kann man Bilder runterladen. Den Auslöser vom PC aus ansteuern geht wohl nicht. Ich habe gtkam bzw. gtkam-gimp bzw. gphotofs benutzt. Jeweils in der neusten Version. http://www.gphoto.org/
Faster Code - Part 3 - align memory
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
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 […]
26.03.2012
Faster 64Bit C Code - Part1
Auf 64Bit Plattformen ist in der Regel ein Int 32Bit groß. Macht man damit Pointerarithmetik muss die 32Bit Zahl erst zu eine 64Bit zahl convertiert werden, bevor sie verrechnet wird. Pointer sind auf 64Bit Plattformen auch 64Bit groß. Durch den Einsatz von size_t statt int und ptrdiff_t statt int* lässt sich das verhindern. Siehe http://www.viva64.com/en/a/0050/ […]
20.03.2012
Linux Cache leeren
Um den “pagecache” aufzuräumen sync; echo 1 > /proc/sys/vm/drop_caches Um “dentries und inodes” aufzuräumen sync; echo 2 > /proc/sys/vm/drop_caches Um alles aufzuräumen sync; echo 3 > /proc/sys/vm/drop_caches
27.01.2012
Scheiß skype
Da mittlerweile jeder Skype (und ICQ) benutzt, muss man sich das auch irgendwann mal installieren. Nur ist die Linux Version von Skype so behindert. Erst lang angekündigt, dann nur das nötigste implementiert und am Ende gammelt da so ne kaputte Version rum. Man kann noch nicht mal die Schriftgröße ändern! Und es stürzt ab. Aber […]