Diskussion:Loop unrolling

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 6 Jahren von Nomen4Omen in Abschnitt recursion unrolling
Zur Navigation springen Zur Suche springen
Auf dieser Seite werden Abschnitte ab Überschriftenebene 2 automatisch archiviert, die seit 14 Tagen mit dem Baustein {{Erledigt|1=--~~~~}} versehen sind. Die Archivübersicht befindet sich unter Archiv.

Zeiger-Überlappung (Pointer Aliasing)

[Quelltext bearbeiten]

Dass ein üblicher C-Compiler hier nicht entrollt, mag so sein. Es ist jedoch kein Grund erkennbar, warum das nicht prinzipiell möglich sein sollte, auch automatisch. Im Prinzip spricht nichts dagegen, dass der Compiler hier ein Loop Unrolling vornimmt.

  • D. h. ich finde, dieses Beispiel sollte entfernt werden, und stattdessen eines, bei dem prinzipiell nicht entrollt werden kann. (Was es imo nicht gibt.)
  • Alternativ: Eine ausführliche Begründung, warum genau ein Compiler hier nicht entrollen will.

So wie's aktuell ist, ist das 'ne Nullnummer. Beim "Beleg" werden zwar "restricted pointer" erklärt, aber nix dazu, warum diese notwendig sein sollen, und schon gar keine Erwähnung von Loop Unrolling o.ä.

Selbst wenn ein Schleifendurchlauf vom vorherigen abhängig sein sollte, kann man trotzdem vollautomatisch entrollen. --arilou (Diskussion) 13:44, 20. Nov. 2012 (CET)Beantworten

Hallo Arilou,
Ich finde, das Beispiel sollte drinbleiben, weil es ein klassischer Fallstrick in C(++) ist. Ich werde die Erklärung mal präzisieren.
Es gibt einen Haufen Gründe, warum Compiler Schleifen nicht entrollen. Dazu gehören grundsätzlich Datenabhängigkeiten.
Aber auch "einfache" Schleifen wie
 for (int i=0; i<m; ++i)
   for (int j=0; j<n; ++j)
      A[i*n+j] = (i*i+j*j);
werden in aller Regel nicht entrollt. Warum exakt, dafür gibt es nicht die "eine" Quelle. Oder ich kenne sie zumindest nicht. -- Plankton314 (Diskussion) 14:03, 20. Nov. 2012 (CET)Beantworten
Ich harre gar neugierig auf die präzisierte Erklärung.
Rein logisch betrachtet ist prinzipiell jede Schleife abrollbar. Ohne Ausnahme. (Natürlich wird's unbequem, wenn erst zur Laufzeit die Anzahl der Durchläufe bekannt wird, und annähernd sinnlos, wenn die Grenzen innerhalb des Schleifenkörpers verändert werden.)
Praktisch mag es jedoch Gründe geben, die es einem Compiler schwer machen, so dass er's lieber bleiben lässt.
Ein Beispiel "hier geht's nicht", obwohl es durchaus möglich wäre, muss dann halt ausreichend begründet sein, warum es hier jetzt sooooo schwierig ist, dass Compiler es üblicherweise unterlassen. Dafür genügt mir "eine" Quelle bzgl. des genannten Beispiels. Muss nicht alle möglichen anderen Loop-Unrolling-Probleme mit beschreiben - nur das Beispiel-Problem.
--arilou (Diskussion) 15:58, 20. Nov. 2012 (CET)Beantworten
PS: Deine neue Variante bzgl. "Iterationen-Rest" gefällt mir, so kann vmtl. auch eine WP:OmA es leicht verstehen. --arilou (Diskussion) 16:00, 20. Nov. 2012 (CET)Beantworten
Du hast recht, dass man eine Schleife immer abrollen kann. Das bedeutet aber nicht gleichzeitig, dass es auch der Compiler kann. Allerdings bringt das u. U. nichts, wenn möglicherweise Abhängigkeiten zwischen den Iterationen bestehen. Gerade in Bezug auf den Geschwindigkeitsvorteil durch Pipelining (siehe unten).
Ich denke, dass es schwierig ist verlässliche und auch beständige Angaben darüber zu erhalten, welche Schleifen entrollt werden können, weil sich auch Compiler permanent in der Weiterentwicklung befinden und wohl in Zukunft immer komplexere Schleifen optimieren können.
Ich werde die nächsten Tage mal recherchieren.
Beispiele lassen sich natürlich konstruieren, aber sie würden sich wohl auf bestimmte Compiler beziehen. Glaube nicht, dass das einen Mehrwert für eine Ezyklopädie darstellt. -- Plankton314 (Diskussion) 21:16, 20. Nov. 2012 (CET)Beantworten

Einzelnachweis 2

[Quelltext bearbeiten]

Schön zu sehen, dass hier war passiert, aber weshalb genau hast du (Plankton314) meine (Ersatz)quelle entfernt? Deine einzige Erläuterung dazu lautet „nutzlos“; was du gern so sehen magst, aber nutzloser als ein toter Link ist sie wohl kaum!? Eine Alternative hast du nicht angebracht, geschweige denn den alten Verweis enfernt? Ich hatte sie ja gerade deshalb hervorgesucht, weil der bisherige Weblink zu Intel hier nicht geht! Und zwar mit keinem Browser. War das ein Fehler? Wird der bei euch angezeigt? Also ich krieg' ne leere Seite. Und falls das nicht nur auf mich zutrifft, möchte ich dich bitten, eine andere (und weniger nutzlose) Quelle anzuführen, oder aber die bisherige wenigstens zu entfernen und dann lassen wir's eben unbequellt. Aber diese, aus meiner Sicht, Leiche brauchst du nicht wieder vorkramen. --Zero Thrust (Diskussion) 21:59, 20. Nov. 2012 (CET)Beantworten

Ja, sorry, das hatte ich nicht nochmal gecheckt. Intel hat die Struktur der Webseite geändert, habs gefixt. -- Plankton314 (Diskussion) 23:07, 20. Nov. 2012 (CET)Beantworten

Deutsche Herübersetzung "unroll"

[Quelltext bearbeiten]

Irgendwie hat sich in diesem Artikel die Übersetzung "entrollen" für "unroll" eingeschlichen. Das ist kein deutsches Wort für mich, auch kein Fachbegriff. Es sollte eigentlich mit "abrollen" übersetzt werden.

Gegenstimmen? -- Plankton314 (Diskussion) 22:33, 22. Nov. 2012 (CET)Beantworten

Also mir ist "entrollen" durchaus geläufig: für Schriftrollen, Perserteppich, -hm- "wertvolles"; im Gegenteil, "abrollen" hat einen abwertenden Beiton, das macht man nur mit "wertlosem" Material (Plastikfolie, Klopapier, Alufolie), bei dem ein Meter wie der andere ist, also wirklich „Material“.
Wiktionary kennt "entrollen" nicht; www.duden.de kennt es, und tatsächlich eher mit meinem obigen "Wertgefühl", es gehöre aber nicht zu den 10000 am häufigsten verwendeten Worten.
--arilou (Diskussion) 09:52, 26. Nov. 2012 (CET)Beantworten
Also, "entrollen" klingt für mich etwas gestochen. Das Pons schlägt als Übersetzung für "unroll" auch "abrollen" vor. Das Verb "abrollen" in einen abwertenden Kontext zu bringen halte ich eher für einen Ausdruck, dass es das im Alltag gebräuchlicher ist.
Wenn ich mir die ganzen -rollen Synonyme so anschaue, dann sollte eigentlich "ausrollen" die beste Übersetzung sein.
Klingt in meinen Ohren auch besser als die beiden anderen Vorschläge. -- Plankton314 (Diskussion) 11:14, 26. Nov. 2012 (CET)Beantworten
Erst ist "entrollen" kein deutsches Wort, dann klingt es gestochen. Immerhin deckt sich letztere Einschätzung mit der des Dudens, der "entrollen" als gehoben einstuft – sofern "gestochen" und "gehoben" hier gleichbedeutend sind ...
Ich muss dagegen bei "abrollen" an Judo oder Karate denken, ganz ohne derartigen Background. Entscheidend ist hier aber nicht jemandes Sprachgefühl. Und nach belieben Wort für Wort übersetzen geht schon gar nicht.
Es kommt wohl alles vor, wobei die deutlich geringere Trefferzahl für "entrollen" auch noch Treffer mit "abrollen" enthält. Ich finde die Übersetzung "ausrollen" auch sehr zutreffend und immerhin findet sich das Wort in der Übersetzung des nicht gerade unbedeutenden Buchs von Cormen, Leiserson, Rivest und Stein. Und hier wird mit "Schleifenentfaltung" eine Übersetzung für "loop unwinding" geboten. --Zahnradzacken (Diskussion) 23:47, 27. Nov. 2012 (CET)Beantworten
Ich kann irgendwie keine rechte Aussage in deiner Antwort entdecken.
Der Cormen ist ein englisches Buch und die deutsche Übersetzung als Argument zu verwenden erscheint mir kein logischer Schluss. Dann müsste man darüber diskutieren, ob der übersetzende Prof hier als Referenz dienen kann.
Google-Hits werden immer wieder gerne als Argument herangezogen - sind es aber nicht.
Und wenn mehrere Ausdrücke semantisch identisch sind und scheinbar keine eindeutig etablierte Übersetzung existiert, kann sehr wohl eine diskretionäre Wahl getroffen werden, was sich am "besten" anhört. -- Plankton314 (Diskussion) 12:24, 28. Nov. 2012 (CET)Beantworten
Die Aussage ist, wenn du es gerne explizit magst: Du wandelst von "gibt es nicht" zu "mag ich nicht". Nebenbei argumentierst du mit einem einzigen Wörterbuch und deinem eigenen Geschmack. Das finde ich beides nicht angebracht.
Die Google-Treffer habe ich zwar nicht gründlich ausgewertet, mir ging es aber auch nicht um die Zahl der Treffer, sondern dass die drei in Frage kommenden Übersetzungen auch wirklich in Büchern vorkommen.
Die deutsche Übersetzung eines englischen Standardwerks kann man durchaus als relevant bezeichnen. Als Referenz würde ich es nicht heranziehen, weil es wohl kaum das Anliegen der Übersetzung ist (und meist auch nicht des Originals), die Fachsprache zu regulieren.
Was eine Wahl angeht: Ich finde es auch gut, wenn der Artikel einheitlich geschrieben ist. In der Hinsicht kann man eine Wahl nach Geschmack treffen. Ich fände es dann aber wichtig, in der Einleitung die verschiedenen verwendeten Übersetzungen zu nennen. Ohne Wertung (wie "seltener auch:"), wenn nicht belegbar. --Zahnradzacken (Diskussion) 23:58, 28. Nov. 2012 (CET)Beantworten
[Quelltext bearbeiten]

GiftBot (Diskussion) 19:00, 21. Jan. 2016 (CET)Beantworten

recursion unrolling

[Quelltext bearbeiten]

@Nomen4Omen: Dieser Edit könnte weitere Erläuterung vertragen.

--arilou (Diskussion) 13:34, 3. Mai 2018 (CEST)Beantworten

@Arilou:
Trotz der großen Nähe von iterativer Programmierung und rekursiver Programmierung verstehe ich Deinen Wunsch ein wenig.
Ich habe die Bezeichnung aus Michael Bader: Space-Filling Curves. An Introduction with Applications in Scientific Computing (= Timothy J. Barth, Michael Griebel, David E. Keyes, Risto M. Nieminen, Dirk Roose, Tamar Schlick [Hrsg.]: Texts in Computational Science and Engineering. Band 9). 1. Auflage. Springer-Verlag, 2013, ISBN 978-3-642-31045-4, ISSN 1611-0994, doi:10.1007/978-3-642-31046-1 (englisch, 278 S.). S. 60.
Das dortige Beispiel ist etwas exotisch. Weniger exotisch wären leicht flachgeklopfte rekursive Prozeduren zur Baumtraversierung.
Hast Du Dir sowas vorgestellt? --Nomen4Omen (Diskussion) 19:46, 5. Mai 2018 (CEST)Beantworten
Soweit ich das verstehe, haben 'Loop Unrolling' und 'Recursion Unrolling' zwar ein ähnliches Ziel - die Effizienzsteigerung der Rechnung durch Reduktion von "Verwaltungsarbeit".
Das Vorgehen ist aber wohl deutlich unterschiedlich, und kann imo nicht einfach mit
"Enthalten die Schleifen Rekursionen, wird auch von recursion unrolling gesprochen."
abgetan werden - Recursion unrolling sollte besser einen eigenen Artikel erhalten, oder einen eigenen Abschnitt hier oder in Rekursive Programmierung.
Auch ist der WP:OmA sicher unklar, was damit gemeint sein soll, dass eine "Schleifen Rekursionen [enthalte]" - ruft der Schleifenrumpf eine Methode auf, die rekursiv ist? Oder befindet sich die Schleife in einer Methode, und der Schleifenrumpf ruft dann rekursiv "die eigene Methode auf"? ...
Auf jeden Fall unterstellt ein simpler Satz ("Enthalten die Schleifen Rekursionen, wird auch von recursion unrolling gesprochen."), dass außer der anderen Bezeichnung ansonsten alles genauso laufe, wie im restlichen Artikel beschrieben. Und das ist zumindest irreführend.
--arilou (Diskussion) 09:38, 7. Mai 2018 (CEST)Beantworten
Ich empfinde den Unterschied nicht so groß. In beiden Fällen wird Übersichtlichkeit und im Fall Recursion unrolling sogar Modularisierung aufgegeben. Denn ein ausprogrammierter »Spaghetti-Code« (das hat mit Recursion unrolling nicht unbedingt etwas zu tun) spart sich alle Programmaufrufe. (Was dann ein ganz anderes, weites Feld ist.)
Trotzdem habe ich die Formulierung etwas aufgepumpt. Einverstanden? --Nomen4Omen (Diskussion) 18:36, 7. Mai 2018 (CEST)Beantworten