Mein Coding Blog, Wiener-Würstchen-Niveau, C++11, Optimierung, etc...
-
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".
-
hustbaer schrieb:
Könntest du bitte mal irgendwas klar sagen?
Du sprichst nämlich gar keine Sprache, zumindest keine die ich verstehen könnte?Wenn du was nicht verstehst, wieso fragst du dann nicht nach? Eine Antwort wie deine kann ich nur so interpretieren, dass du ganz genau weißt, worauf ich hinauswollte, das aber für falsch und so bescheuert hältst, dass die einzige mögliche Antwort eine übertrieben lächerliche Nachäffung meiner Äußerung sein kann.
[...]Und das: dein Einwurft "level-headed heißt aber wieder was ganz anderes..." ist Blödsinn, das wollte ich damit sagen.
Das ist mir klar, aber du musst das ja unbedingt abstreiten, Unverständnis vorgeben und Erklärungen verlangen, die ich mir lieber spare.
Weil halt "A B" in den wenigsten Fällen das selbe heisst wie "B A".
Aber das zu illustrieren ist dir mit deinem seltsamen Beispiel nicht gerade gelungen. Ich werd das aber nicht weiter diskutieren, eure innerösterreichischen Animositäten müsst ihr unter euch klären.
-
[offtopic]Ein Klugscheißerforum - und ich liebe es
[/offtopic]
-
Bashar schrieb:
hustbaer schrieb:
Könntest du bitte mal irgendwas klar sagen?
Du sprichst nämlich gar keine Sprache, zumindest keine die ich verstehen könnte?Wenn du was nicht verstehst, wieso fragst du dann nicht nach? Eine Antwort wie deine kann ich nur so interpretieren, dass du ganz genau weißt, worauf ich hinauswollte, das aber für falsch und so bescheuert hältst, dass die einzige mögliche Antwort eine übertrieben lächerliche Nachäffung meiner Äußerung sein kann.
Ich wollte nicht wahr haben dass man so dumm sein kann.
EDIT: und ich bin mir genau genommen immer noch nicht sicher. Aber gut. Du magst ja nicht sagen was genau gemeint war.
EDIT2: genau genommen hab ich sogar nachgefragt. Was meinst du was das "und?" darstellt.
-
-
hustbaer schrieb:
Ich wollte nicht wahr haben dass man so dumm sein kann.
Passiert mir auch oft, aber es gibt ja immer zwei Möglichkeiten, wie man das auflöst.
EDIT: und ich bin mir genau genommen immer noch nicht sicher. Aber gut. Du magst ja nicht sagen was genau gemeint war.
"level-headed" ist eine feststehende Redewendung für unaufgeregt, einen kühlen Kopf bewahrend. Wenn man jetzt "heads-level" liest, liest man automatisch auch ein bisschen "level-headed", so dass die beiden Begriffe beim Verständnis interferieren. Anderes Beispiel, angelehnt an deins: Was verstehst du unter einer Wiener Schmähkritik?
EDIT2: genau genommen hab ich sogar nachgefragt. Was meinst du was das "und?" darstellt.
Maximal die Andeutung einer rhetorischen Frage.
-
Bashar schrieb:
hustbaer schrieb:
Ich wollte nicht wahr haben dass man so dumm sein kann.
Passiert mir auch oft, aber es gibt ja immer zwei Möglichkeiten, wie man das auflöst.
eine davon is sicherlich es auszuknobeln
-
Dein Blog ist Provokation pur!
-
Bashar schrieb:
Anderes Beispiel, angelehnt an deins: Was verstehst du unter einer Wiener Schmähkritik?
Kenn ich als Redewendung jetzt nicht. Mag sein dass ichs mal irgendwo gehört habe, aber pfuh.
Ohne weiteren Kontext würde ich vermuten: eine unsachgemäss schlechte Kritik, ausgesprochen von einem Wiener, zu irgend einer Sache die er nicht mag.
Mir fehlt aber auch hier wieder der Zusammenhang - ich verstehe nicht was du damit sagen willst (aber vielleicht kommt das ja noch).EDIT2: genau genommen hab ich sogar nachgefragt. Was meinst du was das "und?" darstellt.
Maximal die Andeutung einer rhetorischen Frage.
Naja der
war in meinen Augen ein deutlicher Hinweis darauf dass ich nicht verstehe was du damit sagen willst.
Das Beispiel sollte verdeutlichen dass es für mich ganz normal ist, dass zwei Wörter in vertauschter Reihenfolge was anderes bedeuten.
(Und wenn es noch dazu nichtmal die selben Wörter sind, sondern nur der selbe Wortstamm, ist es noch weniger verwunderlich für mich.)
-
hustbaer schrieb:
Bashar schrieb:
Anderes Beispiel, angelehnt an deins: Was verstehst du unter einer Wiener Schmähkritik?
Kenn ich als Redewendung jetzt nicht. Mag sein dass ichs mal irgendwo gehört habe, aber pfuh.
Ohne weiteren Kontext würde ich vermuten: eine unsachgemäss schlechte Kritik, ausgesprochen von einem Wiener, zu irgend einer Sache die er nicht mag.
Mir fehlt aber auch hier wieder der Zusammenhang - ich verstehe nicht was du damit sagen willst (aber vielleicht kommt das ja noch).Eine Schmähkritik ist eine kritische Äußerung die alleine dazu dient, das Gegenüber zu schmähen, der Schmach auszusetzen. Was eine "Wiener Schmähkritik" konkret bedeutet, mag ich mir daraus aber nicht zusammenreimen müssen. Worauf Bashar hinauswill ist schlicht, daß man neben der "Schmähkritik" unweigerlich auch den "Wiener Schmäh" sozusagen "mitliest": Eine Kritik, die mit einer gesunden Priese ebendessen gewürzt ist.
-
Swordfish schrieb:
Worauf Bashar hinauswill ist schlicht, daß man neben der "Schmähkritik" unweigerlich auch den "Wiener Schmäh" sozusagen "mitliest": Eine Kritik, die mit einer gesunden Priese ebendessen gewürzt ist.
Es mag sein dass es Leute gibt, denen das so geht, wobei es mich sehr wundern würde.
Mir geht es nämlich nicht so. Ich lese entweder das eine oder das andere. Dabei mache ich durchaus mal Fehler, aber ich lese nicht irgendwie ein wenig von beidem.
Mir ist mittlerweile glaube ich auch klar was er meint. Was ich dagegen immer noch nicht verstehe ist dass man das als etwas besonderes, erwähnenswertes empfindet. Und wenn das was er gemeint hat nicht erwähnenswert ist (was es für micht nicht ist), dann bleibt für mich bloss noch eine andere Auslegung übrig. Und die wäre wirklich total dämlich gewesen (daher auch das "Ich wollte nicht wahr haben dass man so dumm sein kann").
-
Hier is ja was los. Darf ich fernab von der entfachten Fehde mal was einwerfen?
Auch nur so, weils mich wirklich interessiert, und weil Hustbaer vor knapp 2 Tagen ein exzellentes Gegen-Beispiel gebracht hat für die Grenzen meiner damaligen Aussage:
ich 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.
Vielleicht sei aber vorher trotzdem noch etwas gesagt, und ich erwähne dies nur, um nach der entstandenen Debatte die hitzigen Köpfe hoffentlich etwas abzukühlen vor ihrer Antwort: Ich würde und werde in diesem Forum nie auf das rhetorische Mittel "Argumentum-ad-Hominem" zurückgreifen. Und nichtmal das ist als Argumentum-ad-Homini zu verstehen. hustbaer versteht definitiv weitaus mehr von Programmierung als ich je könnte (und ihr andern bestimmt auch alle, aber zeigt das ma lieber). Und solange hustbaers Antworten so konstruktiv sind wie bisher, bin ich schlichtweg begeistert und würdige dies natürlich.
Nun gut, also Back to Topic:
Das komplette Gegenbeispiel findet sich wieder auf Seite 3.
Hier nochma die beiden Algorithmen, um die es geht: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
B ist oftmals schneller als A, warum?
Ich hab da mal ein bisschen drüber nachgedacht.
Hier ein paar Kommentare, und ich bitte die Leser darum, mich zu korrigieren, wenn ich falsch liege:Auf modernen CPUs mit Pipelining kommen dem Algorithmus A wohl die sogenannten Pipeline Hazards in die Quere.
In der Variante A findet die gesamte Arithmetik direkt auf den Input-Values statt.
In der Variante B werden die Input Values teilweise erst auf den Stack gepackt (der hoffentlich durch den Cache gebildet wird).
(Puffer). Dann wird etappenweise darauf darauf gerechnet.
Schlussendlich werden die Resultate dann wieder in Output zurückgeschrieben.
Da in Variante B die Vorgänge "Speicher-Lesen", "Rechnen", "Zurückschreiben" etwas autonomer in sich vonstatten gehen, liegt hier wohl der Geschwindigkeits-Vorteil.
In Variante A hingegen prasseln die Schreibvorgangs-Granaten direkt hinter die Lesen+Rechnen-Vorgänge. Zumindest direkter als bei B.Nun denn, wenn ich bisher richtig liege, lehne ich mich jetzt wirklich mal weit und nur spontan aus dem Fenster:
Ein weiterer Optimierungsschritt könnte vielleicht folgender sein: Wir versuchen den Geschwindigkeits-Vorteil, den wir durch den Puffer erzielen, noch weiter auszubauen: Vielleicht passen, je nach Ziel-Architektur und Ziel-Zweck sogar 2 x Puffer auf einmal in den Cache (wenn man zum Beispiel sicher weiss dass das Programm eh grad den komplette PC in Beschlag nimmt, z.B. durch einen Lade-Bildschirm).
Der Output in der äusseren Schleife (also wenn einmal alle Modulo Zweige abgefeiert wurden) ist ja nich abhängig vom bisherigen Input.
Wenn ich mir diese Nicht-Abhängigkeit von Input und Output in der äusserern Schleife, kommt mir grad auch noch folgendes in denn Sinn: Könnte man den Algorithmus hier nicht sogar gut in Open-MP verwursten? Und das ganze dadurch sogar (hoffentlich) paralellisieren?!?Zurück zur Sache, und zwar zur Darstellung:
Um die Performance-Aussage eines Algorithmus mit den hier gezeigten abhängigen (sagen wir besser: optimierbaren) Sequenzen irgentwie anschaulich darzustellen, fehlen zumindest mir nun die Mittel.Einen kleinen Schritt in die richtige Richtung will ich trotzdem nicht unversucht lassen:
Vielleicht macht es sinn, die Lese/Schreib Operationen in Load/Store (Input/Output) und Load-Lokal/Store-Lokal (Puffer) zu unterteilen:Das ergäbe für den Algorithmus B dann folgendes:
B [code] (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-Local (Höhe / 2) mal: (der "(z modulo 4) gleich 1 oder 2" Teil) Breite mal: 1 "Loop-Control" 1 Load-Local 1 Load 1 Add 1 Store-Local (Höhe / 4) mal: (der "(z modulo 4) gleich 3" Teil) Breite mal: 1 "Loop-Control" 1 Load-Local 1 Load 1 Add 1 Shift 1 Store ------------------------------ "Loop-Control": Höhe * (Breite + 1) Load-Local: Höhe * Breite * 3/4 Store-Local: Höhe * Breite * 3/4 Load: Höhe * Breite Store: Höhe * Breite / 4 Add/Shift: Höhe * Breite
Das spricht natürlich immer noch für die Variante A.
Aber zumindest bei den Load/Store's kommt man so auf die gleiche Anzahl.Meine finale Schlussfolgerung:
Da sich Optmierungen, die sich durch die Sequenz der Operationen ergeben, wie z.B. das Pipelining auf modernen x86 CPUs, zumindest für mich aktuell nicht anschaulich darzustellen sind, scheint die Performanz-Hauptaussage eines Algorithmus immer noch in den letzendlichen Messungen zu liegen, in nächster Instanz vielleicht noch der Algorithmus selbst (als Pseudocode) in Kombination mit der Ziel-Architektur.Gruß, Gero
Edit: Die derbsten Rechtschreibfehler gefixt.
Edit2: Ein bisschen umformuliert, +Rechtschreibung.
-
@Gero_Programmierstil_de performance ist total unwichtig... darüber macht man sich erst gedanken, wenn das teil lahmt sonst wird man nie fertig!
ich kenn mich damit relativ gut aus, daher der hinweis
-
btw. groß- und kleinschreibung ist hier total gern gesehen. sonst wirst du immer mal wieder verbannt, auch dafür bin ich spezialist
-
hustbaer schrieb:
Bashar schrieb:
Anderes Beispiel, angelehnt an deins: Was verstehst du unter einer Wiener Schmähkritik?
Kenn ich als Redewendung jetzt nicht.
Hab ich mir auch ausgedacht.
Mir fehlt aber auch hier wieder der Zusammenhang - ich verstehe nicht was du damit sagen willst (aber vielleicht kommt das ja noch).
Dass ich "heads-level" für eine komische Wortwahl halte, weil dort der Begriff "level-headed" mitschwingt. Das ist jetzt kein Drama, aber wieso muss ich mich eigentlich über 2 Seiten dafür rechtfertigen, was gepostet zu haben?
EDIT2: genau genommen hab ich sogar nachgefragt. Was meinst du was das "und?" darstellt.
Maximal die Andeutung einer rhetorischen Frage.
Naja der
war in meinen Augen ein deutlicher Hinweis darauf dass ich nicht verstehe was du damit sagen willst.
Nicht deutlich genug. "Und?" ist eine andere Formulierung für "Was du sagst ist irrelevant.", nichts weiter.
Das Beispiel sollte verdeutlichen dass es für mich ganz normal ist, dass zwei Wörter in vertauschter Reihenfolge was anderes bedeuten.
Das ist in dem Beispiel aber nicht wirklich der Fall.
-
fuchsbau schrieb:
@Gero_Programmierstil_de performance ist total unwichtig... darüber macht man sich erst gedanken, wenn das teil lahmt sonst wird man nie fertig!
ich kenn mich damit relativ gut aus, daher der hinweis
Ja und manch andere behaupten das Gegenteil, so wie ich.
-
knivil schrieb:
fuchsbau schrieb:
@Gero_Programmierstil_de performance ist total unwichtig... darüber macht man sich erst gedanken, wenn das teil lahmt sonst wird man nie fertig!
ich kenn mich damit relativ gut aus, daher der hinweis
Ja und manch andere behaupten das Gegenteil, so wie ich.
du willst ein patt? ich würde wetten, dass Gero_Programmierstil_de noch nicht annähernd die erfahrung besitzt vorher abzuschätzen wo sich später evtl. engpässe ergeben könnten. daher soll er doch erst mal machen, profilen und _dann_ optimieren! ich denke das ist jetzt ein matt :p