Mein Coding Blog, Wiener-Würstchen-Niveau, C++11, Optimierung, etc...
-
thx fürs feedback, hab mir auch schon gedacht, dass "heads-niveau" vorallem hier hier bestimmt aneckt.
vielen dank an hustbaer.
...
hast recht. auf jeden.
.
danke.ein paar kurze anmerkungen und fragen:
ito war leider nie iso-definiert. meine schlussfolgerungen sind natürlich quatsch.
wegen schleife: wollt das mit dem ausrollen übergehen/ausklammern. vor allem, weil ich am ende die operationen runterbete.
was ich mich grad noch frag: ist table lookup nicht doch die richtige bezeichnung aus nächst höherer abstraktion zu assembly?ich überarbeite den teil, es wär wirklich sehr nett, wenn du das dann nochma anschaun könntest.
-
Verschwendung von Zeit und Webspace.
- Themen werden nur oberflächlich angekratzt, ohne in´s Detail zu gehen. Damit haben sie praktisch keine Relevanz und bringen den Leser nicht weiter.
- subjektiver, fürchterlicher Schreibstil. Seriöse Fachliteratur sollte sachlich und neutral formuliert werden, ohne Kraftausdrücke und/oder Leetspeak.Ich glaube, du überschätzt dich und dein C++ Wissen.
-
Gero_Programmierstil_de schrieb:
ich überarbeite den teil, es wär wirklich sehr nett, wenn du das dann nochma anschaun könntest.
Wie DocShoe schon geschrieben hat: ist vermutlich Verschwendung von Lebenszeit - deiner und der anderer (die deine Seite finden und lesen).
Erklären sollten Leute die a) das Thema wirklich gut verstanden haben und b) gut erklären können.
Leider bleiben nur sehr wenige Leute übrig die das für ein bestimmtes Thema erfüllen, weswegen es auch so wenig gute Erklärungen gibt. Die Frage ist aber, ob eine weitere schlechte bis max. mittelmässige Erklärung zu irgen deinem Thema was bringt.
Ich vermute nein.Geh lieber baden/fussballspielen/laufen/...
Oder, wenn du dich unbedingt mit Programmierung beschäftigen willst, lerne erstmal noch ein wenig statt zu versuchen zu lehren.
-
Gero_Programmierstil_de schrieb:
was ich mich grad noch frag: ist table lookup nicht doch die richtige bezeichnung aus nächst höherer abstraktion zu assembly?
Ja, stimmt schon.
Das ist so ziemlich der sinnloseste/unwichtigste meiner "Kritikpunkte".
Mir ist nur aufgefallen dass an der Stelle eigentlich strenggenommen noch kein Table-Lookup passiert, sondern wie gesagt bloss eine Adresse berechnet wird.
-
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?