Duff's Device

Duff's Device

Duff's Device ist ein nach seinem Erfinder Tom Duff benanntes Programmierverfahren zur Effizienzsteigerung bei Schleifen.

Problem

Soll der Computer eine Anweisung wiederholt ausführen, wird sie innerhalb einer Schleife ausgeführt. Dabei wird am Ausgangspunkt der Schleife überprüft, ob die Abbruchbedingung erfüllt ist. Wenn sie es ist, springt die Schleife ans Ende der Schleifenstruktur. Ist sie es nicht, werden die Anweisungen im Rumpf der Schleife verarbeitet. Danach springt der Computer zurück an den Ausgangspunkt, die Abbruchbedingung wird erneut geprüft. In der Programmiersprache C wäre folgender Programmauschnitt möglich:

        while(stelle < anzahl) {
                ziel[stelle] = quelle[stelle]; stelle++;
        }

Hier werden die im Array quelle gespeicherten Daten in das Array ziel kopiert. Die Schleife wird anzahl-mal durchlaufen. In jedem Durchlauf wird die Bedingung stelle < anzahl geprüft.

Wird so eine Schleife auf einem langsamen Computer ausgeführt oder ist die Anwendung besonders zeitkritisch, ist es nützlich, den Aufwand pro Durchlauf zu reduzieren. Dies macht das folgende Programm:

        while(stelle < anzahl) {
                ziel[stelle] = quelle[stelle]; stelle++;
                ziel[stelle] = quelle[stelle]; stelle++;
                ziel[stelle] = quelle[stelle]; stelle++;
                ziel[stelle] = quelle[stelle]; stelle++;
        }

Die Anweisung im Schleifenrumpf wurde vervierfacht. Auf diese Weise muss die Schleifenbedingung nur noch ein Viertel so oft geprüft werden. Dieses Verfahren ist auch unter dem Namen "Loop Unrolling" bekannt.

Diese Lösung birgt aber ein neues Problem: anzahl muss eine durch vier teilbare Zahl sein, sonst wird die Anweisung beim letzten Durchlauf bis zu 3 mal zu viel ausgeführt.

Lösung

Der Duffapparat löst das Problem:

        n = (anzahl + 3) / 4;
 
        switch(anzahl % 4) {
        case 0:        do { ziel[stelle] = quelle[stelle]; stelle++;
        case 3:             ziel[stelle] = quelle[stelle]; stelle++;
        case 2:             ziel[stelle] = quelle[stelle]; stelle++;
        case 1:             ziel[stelle] = quelle[stelle]; stelle++;
                       } while(--n > 0);
        }

Zunächst wird in n der aufgerundete Quotient von anzahl und 4 gespeichert. Bei n-maliger Ausführung würde die Anweisung (anzahl % 4)-mal zu viel ausgeführt. Abhilfe schafft die switch-Anweisung, die den ersten Schleifenablauf ggf. an einer entsprechend späten Stelle der Schleife beginnen lässt. Den Einstiegspunkt durch eine um die Schleife gebaute Fallunterscheidung festlegen zu können, ist eine Eigenart der Programmiersprache C.

Referenz


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Duff’s Device — Duff s Device (auf deutsch etwa: Duff Apparat) ist ein nach seinem Erfinder Tom Duff benanntes Programmierverfahren zur Effizienzsteigerung bei Schleifen unter Ausnutzung einer speziellen Eigenschaft der Programmiersprache C. Inhaltsverzeichnis 1 …   Deutsch Wikipedia

  • Duff's device — In computer science, Duff s device is an optimized implementation of a serial copy that uses a technique widely applied in assembly language for loop unwinding. Its discovery is credited to Tom Duff in November of 1983, who at the time was… …   Wikipedia

  • Duff's — may refer to: Duff s Brooklyn, Williamsburg, Brooklyn, NY, USA Duff s device, computer science implementation by Tom Duff See also Duff (disambiguation) This disambiguation page lists articles associated with the same title. If an …   Wikipedia

  • Tom Duff — Thomas Douglas Selkirk Duff (b. December 8, 1952, named for his putative ancestor, the fifth Earl of Selkirk) is a computer programmer. He was born in Toronto, Ontario, Canada and grew up in Toronto and Leaside. In 1974 he graduated from the… …   Wikipedia

  • Tom Duff — Thomas Douglas Selkirk Duff (* 8. Dezember 1952 in Toronto, Ontario) ist ein kanadischer Programmierer. Er wuchs in Toronto und Leaside (Ontario) auf. 1974 machte er seinen Abschluss in Mathematik an der University of Waterloo und zwei Jahre… …   Deutsch Wikipedia

  • Duffapparat — Duff s Device ist ein nach seinem Erfinder Tom Duff benanntes Programmierverfahren zur Effizienzsteigerung bei Schleifen. Problem Soll der Computer eine Anweisung wiederholt ausführen, wird sie innerhalb einer Schleife ausgeführt. Dabei wird am… …   Deutsch Wikipedia

  • ICFPC — Der ICFP Contest ist ein Programmierwettbewerb, der jährlich im Umfeld der ICFP Konferenz ausgerichtet wird. Der erste ICFP Contest fand 1998 statt. Inhaltsverzeichnis 1 Austragungsmodus 2 Teilnehmer 3 Austragungsort 4 Preise …   Deutsch Wikipedia

  • ICFP Contest — Der ICFP Contest ist ein Programmierwettbewerb, der jährlich im Umfeld der ICFP Konferenz ausgerichtet wird. Der erste ICFP Contest fand 1998 statt. Inhaltsverzeichnis 1 Austragungsmodus 2 Teilnehmer 3 Austragungsort 4 Preise …   Deutsch Wikipedia

  • Loop unwinding — Loop unwinding, also known as loop unrolling, is a loop transformation technique that attempts optimize a program s execution speed at the expense of its size.The goal of loop unwinding is to increase the programs speed by reducing (or… …   Wikipedia

  • Protothreads — In der Informatik ist ein Protothread ein leichtgewichtiger Mechanismus zur parallelen Programmierung. Protothreads kommen im Gegensatz zu Threads ohne eigenen Stapelspeicher aus. Sie können blockierende Kontexte mit geringstmöglichem… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”