Mein Coding Blog, Wiener-Würstchen-Niveau, C++11, Optimierung, etc...
-
Vor allem wenn es um Speed vs Size geht, sollten doch einige Performancemessungen gemacht werden. Da man sich natuerlich fragt, wieviel besser denn Methode A im Vergleich zu Methode B ist. Generierter ASM-Code und Taktzyklen wuerde ich auch als Ersatz gelten lassen.
-
knivil schrieb:
Vor allem wenn es um Speed vs Size geht, sollten doch einige Performancemessungen gemacht werden. Da man sich natuerlich fragt, wieviel besser denn Methode A im Vergleich zu Methode B ist.
Ja. Wobei wirklich sinnvolle Tests leider nur in der Anwendung möglich sind.
Viele Dinge laufen für sich allein ganz toll, wenn sie den gesamten L1 Cache zur verfügung haben. Einiges davon läuft dann aber im Programm nicht mehr ganz so toll.Generierter ASM-Code und Taktzyklen wuerde ich auch als Ersatz gelten lassen.
Echt?
Also ich nicht.
Taktzyklen-Angaben sind mittlerweile nicht mehr sinnvoll möglich, ausgenommen man hat ein brandaktuelles Tool eines CPU Herstellers. Und selbst da würde ich mich eher auch Messungen verlassen.Die Zeiten eines 68K wo man einfach zusammenzählen konnte sind halt vorbei...
-
Seriöse Dokumentation soll das natürlich nicht werden.
das ganze ist natürlich eher für mich und für paar kollegen. Ich lern dadurch ne Menge.
Der Rest findet sich, is ja auch erst 2 wochen alt, das ganze.
Ich kann auch gut genug über arroganz und sarkasmus in konstruktiver kritik hinwegsehen und das konstruktive dann nutzen. arroganz sei den high-skill-leuten auch gegönnt.
das niveau der bisherigen artiekl sind für das forum hier natürlich eher niedrig, gar provokativ.So, genug dazu.
@hustbaer: danke für deine zeitverschwendung.performance-messung: kommt doch immer auf den anwendungszweck der funktionalität an, ich find landau-symbolik und auseinandergenommene operationen bis kurz vor assembly-level eigentlich immer aussagekräftiger.
-
Selten dass jemand hier mit Kritik auf derart konstruktive Art umzugehen weiß, dafür ein ehrliches
von mir...
Gero_Programmierstil_de schrieb:
performance-messung: kommt doch immer auf den anwendungszweck der funktionalität an, ich find landau-symbolik und auseinandergenommene operationen bis kurz vor assembly-level eigentlich immer aussagekräftiger.
Landau-Symbole sind zwar theoretisch schön und gut, sagen aber erstmal gar nichts über reale Performance auf realer Hardware aus. In der Praxis kommt es sehr oft, wenn nicht sogar meistens gerade auf die Konstanten an, die dort unterschlagen werden. Wenn n nicht sehr groß ist, dann schlägt eine stupide lineare Suche auf einer modernen CPU den fanciest Suchbaum mit Abstand, weil die Datenstruktur dafür kompakter gehalten werden kann. Und ich hatte auch selber schon mit Fällen zu tun wo man mit Insertion Sort um Größenordnungen schneller war als mit Quicksort...
-
Gero_Programmierstil_de schrieb:
das niveau der bisherigen artiekl sind für das forum hier natürlich eher niedrig, gar provokativ.
Das hat mit dem Niveau des Forums herzlich wenig zu tun.
-
Was heißt denn überhaupt "heads niveau"? Wenn ich das bei Google eingebe, ist dieser Thread hier der erste Treffer.
-
Den Begriff habe ich vorher auch noch nie gehört, soll wohl ein hohes Niveau voraussagen, was ja auch schon angesprochen wurde (Achja, Niveau ist übrigens keine Hautcreme, so wirkt es nämlich bei dem Blog *hüstel*
)
-
Scheint rap-verseuchte Jugendsprache für "sehr gut" zu sein, hab's mir aber auch erst ergoogeln müssen. Und bis auf Texte wo die Bedeutung im Zusammenhang dann mehr oder weniger klar wird hab ich auch nix gefunden.
Mich würde auch die Etymologie interessieren.Ich rate mal: kommt vom englischen "heads" (Hauptwort) - entweder mit der Bedeutung "Chefleute" oder evtl. auch (weniger wahrscheinlich) mit der Bedeutung "erstes Destillat" bzw. "reines Zinnerz".
Würde dann entweder bedeuten "gut genug für die Chefetage" bzw. eben "so gut wie das erstes Destillat/reines Zinnerz".
Macht beides irgendwie Sinn.Wobei die Kombination des deutschen (*kicher*) Niveau mit dem englischen "heads" irgendwie komisch ist. Wenn schon dann "heads level".
EDIT:
Achjeh..."heads" wird anscheinend auch gerne kurz für "hip-hop heads" verwendet (Hip-Hop Fans halt, analog zu "metal heads"), bzw. auch kurz für "potheads", bzw. allgemein als bezeichnung für eine Gruppe von Leuten.
Wobei von den dreien eigentlich nur "hip-hop heads" Sinn macht. Was sich dann auch mit der - anhand der Fundstellen der Phrase vermuteten - Hip-Hop- bzw. Rap-Affinität gut vertragen würde.
(Was man ja von meiner pre-EDIT Vermutung nicht so wirklich behaupten kann).
-
hustbaer schrieb:
Wenn schon dann "heads level".
level-headed heißt aber wieder was ganz anderes...
-
Etymologie: "head" für das körperteil kopf, halt oben.
ich kenns den begriff hauptsächlich aus älteren weniger bekannten boards, für die leute, die halt länger dabei sind.
der begriff "oldfag" hat das dann abgelöst (4chan).
definitiv umgangssprachlich/hiphop-lastig.
-
Hier wid hauptsaechlich Deutsch geschrieben. Mit Slang beeindruckst du niemanden.
-
Gero_Programmierstil_de schrieb:
@hustbaer: danke für deine zeitverschwendung.
performance-messung: kommt doch immer auf den anwendungszweck der funktionalität an, ich find landau-symbolik und auseinandergenommene operationen bis kurz vor assembly-level eigentlich immer aussagekräftiger.
Also dazu mal ein konkretes Beispiel...
Wir wollen ein Bild stauchen, und zwar in der Höhe. Mit einem einfachen Boxfilter, und fixem Verhältnis 1:4.
Folgende beiden Algorithmen:
A
Input: Bild[Breite, Höhe] Output: Bild[Breite, Höhe / 4] Für alle Zeilen z in Input, Step 4 Für alle Spalten s in Input Output[s, z / 4] = (Input[s, z] + Input[s, z + 1] + Input[s, z + 2] + Input[s, z + 3]) / 4
B
Input: Bild[Breite, Höhe] Output: Bild[Breite, Höhe / 4] Puffer: Zeile[Breite] Für alle Zeilen z in Input Wenn (z modulo 4) gleich 0 Für alle Spalten s in Input Puffer[s] = Input[s, z] Wenn (z modulo 4) gleich 1 oder 2 Für alle Spalten s in Input Puffer[s] = Puffer[s] + Input[s, z] Wenn (z modulo 4) gleich 3 Für alle Spalten s in Input Output[s, z / 4] = (Puffer[s] + Input[s, z]) / 4
Die Anordnung im Speicher ist dabei "die übliche", also Leserichtung (=zuerst von Links nach Rechts und dann von Oben nach Unten).
Beide Algorithmen laufen in O(Breite * Höhe).
Brechen wir das jetzt mal ganz grob auf Quasi-Assembler Befehle runter.
A
(Höhe / 4) mal: 1 "Loop-Control" (alles was der Loop halt brauch, inklusive Addition, Vergleich etc.) (Breite) mal: 1 "Loop-Control" 4 Load (genügend Register vorausgesetzt ist die 2D Indexberechnung hier quasi gratis, deswegen vergessen wir die einfach) 3 Add (die "z+1", "z+2" etc. zählen wir nicht, wir behaupten das kann die Addressierungseinheit gratis) 1 Shift (das z / 4 fällt weg, und das (Input ...) / 4 wird garantiert als Shift umgesetzt) 1 Store --------------------------------- "Loop-Control": Höhe * (Breite + 1) / 4 Load: Höhe * Breite Store: Höhe * Breite / 4 Add/Shift: Höhe * Breite
B
(Höhe) mal: 1 "Loop-Control" (die äussere Schleife) (Höhe / 4) mal: (der "(z modulo 4) gleich 0" Teil) Breite mal: 1 "Loop-Control" 1 Load 1 Store (Höhe / 2) mal: (der "(z modulo 4) gleich 1 oder 2" Teil) Breite mal: 1 "Loop-Control" 2 Load 1 Add 1 Store (Höhe / 4) mal: (der "(z modulo 4) gleich 3" Teil) Breite mal: 1 "Loop-Control" 2 Load 1 Add 1 Shift 1 Store ------------------------------ "Loop-Control": Höhe * (Breite + 1) Load: Höhe * Breite * 7/4 Store: Höhe * Breite Add/Shift: Höhe * Breite
B braucht also...
4 mal so viele "Loop-Control" Befehle wie A
7/4 mal so viele Loads wie A
4 mal so viele Stores wie A
gleich viele Arithmetischen Befehle wie ADeutlicher kann man wohl nicht verlieren. Trotzdem ist B bei grossen Bildern auf vielen Plattformen schneller als A (*). Frage: warum?
*: Das ist das Ergebnis eines ganz konkreten, realen Performance-Vergleichs, den ich angestellt habe nachdem ich "auf gut Glück" B implementiert hatte (A war der vorhandene Code). Ich hätte mich zwar wetten getraut dass B schneller ist, aber nicht um viel Geld und eher des Spasses wegen als weil ich mir mehr als 50% sicher gewesen wäre dass es so ist. Auf meiner Ziel-Plattform war es so. Auf anderen Plattformen kann es genau so gut andersrum ausgehen.
-
Bashar schrieb:
hustbaer schrieb:
Wenn schon dann "heads level".
level-headed heißt aber wieder was ganz anderes...
und?
"scheiss wiener" heisst auch was anderes als "wiener scheiss".
-
hustbaer schrieb:
Bashar schrieb:
hustbaer schrieb:
Wenn schon dann "heads level".
level-headed heißt aber wieder was ganz anderes...
und?
"scheiss wiener" heisst auch was anderes als "wiener scheiss".Made my Day
-
hustbaer schrieb:
"scheiss wiener" heisst auch was anderes als "wiener scheiss".
Ist "wiener scheiss" eine feststehende Redewendung, die mit dem Verständnis des Ausdrucks "scheiss wiener" interferieren kann?
-
Bashar schrieb:
hustbaer schrieb:
"scheiss wiener" heisst auch was anderes als "wiener scheiss".
Ist "wiener scheiss" eine feststehende Redewendung, die mit dem Verständnis des Ausdrucks "scheiss wiener" interferieren kann?
Nein.
Und?
-
hustbaer schrieb:
Nein.
Und?Das frag ich dich. Oder wolltest du nur mal mitteilen, dass du Wiener Scheiße findest?
-
Nein. Ich wollte dir damit mitteilen dass ich nicht verstehe worauf du mit deinem "level-headed heißt aber wieder was ganz anderes..." hinaus wolltest.
Mir fehlt irgendwie der Zusammenhang."Vase" heisst auch was anderes als "Rechtsanwalt", deswegen schreib ich das aber nicht in jeden Thread rein wo über Rechtsanwälte diskutiert wird.
-
hustbaer schrieb:
Ich wollte dir damit mitteilen dass ich nicht verstehe worauf du mit deinem "level-headed heißt aber wieder was ganz anderes..." hinaus wolltest.
Deine Reaktion spricht eine andere Sprache.
-
Könntest du bitte mal irgendwas klar sagen?
Du sprichst nämlich gar keine Sprache, zumindest keine die ich verstehen könnte?Sag endlich was zum Geier du meinst oder spars dir einfach
BTW: Bist du vielleicht Wiener dass du so angepisst reagierst? Falls ja: sorry, wusste ich nicht. Dann ersetze halt Wiener durch Burgenländer oder was auch immer. Trotzdem weiss ich immer noch nicht was du eigentlich sagen wolltest.
BTW2: Und das: dein Einwurft "level-headed heißt aber wieder was ganz anderes..." ist Blödsinn, das wollte ich damit sagen. Weil halt "A B" in den wenigsten Fällen das selbe heisst wie "B A".