Dispositivo de Duff

Dispositivo de Duff

Dispositivo de Duff

En el ámbito de las ciencias de la computación un Dispositivo de Duff es una implementación optimizada de una copia secuencial para programas en lenguaje C que utiliza una técnica normalmente empleada en lenguaje ensamblador para desenrollar bucles. Su descubrimiento se atribuye a Tom Duff que en Noviembre de 1983 publicó[1] un mensaje en USENET describiendo este hallazgo. La misma se basa en aprovechar la característica de caída en cascada de la instrucción case.

Normalmente una copia secuencial se podría escribir de la siguiente forma:[2]

do { /* se asume count > 0 */
   *to++ = *from++;
} while (--count);

Mientras intentaba optimizar este bucle, Tom Duff se dio cuenta de que la versión desdoblada del mismo podía ser reescrita intercalando las estructuras de las instrucciones switch y loop.

/* se asume count > 0 */
 int n = (count + 7) / 8;
 
 switch (count % 8)
 {
 case 0: do { *to++ = *from++;
 case 7:      *to++ = *from++;
 case 6:      *to++ = *from++;
 case 5:      *to++ = *from++;
 case 4:      *to++ = *from++;
 case 3:      *to++ = *from++;
 case 2:      *to++ = *from++;
 case 1:      *to++ = *from++;
            } while (--n);
 }

La optimización se produce debido a que sólo se realiza una comparación y decremento cada 8 elementos copiados en lugar de por cada uno.

Si bien la técnica de desenrollado de bucles era conocida con anterioridad, esta forma de escribirla resultó una novedad y aunque extraña y poco intuitiva se trata de una construcción perfectamente válida en C, y muchos compiladores generan instrucciones de máquina tal cual un programador en lenguaje ensamblador lo hubiera hecho a mano.

Notas

  1. Una copia del mensaje se puede ver (en Inglés) en Google Groups
  2. El código tal cual fue publicado no incrementa el puntero to ya que se trata del envío de una secuencia de datos a un puerto de entrada/salida. Para facilitar la comprensión aquí optamos por la variante de copia de datos, aunque la librerías de C ya poseen rutinas de copia altamente optimizadas.
Obtenido de "Dispositivo de Duff"

Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Dispositivo de Duff — En el ámbito de las ciencias de la computación un Dispositivo de Duff es una implementación optimizada de una copia secuencial para programas en lenguaje C que utiliza una técnica normalmente empleada en lenguaje ensamblador para desenrollar… …   Enciclopedia Universal

  • Submarino — Para otros usos de este término, véase Submarino (desambiguación). Submarino nuclear clase Los Angeles, de la Marina de EE.UU. Un submarino es un tipo especial de buque capaz de navegar bajo el agua además de la superficie, gracias a un sistema… …   Wikipedia Español

  • Paris Hilton — Saltar a navegación, búsqueda Paris Hilton Información personal Nombre real Paris Whitney Hilton …   Wikipedia Español

  • Combate de Miserere — Parte de Segunda invasión inglesa al Río de la Plata Balvanera (Once (Buenos Aires)) …   Wikipedia Español

  • McDonnell Douglas F-4 Phantom II — Para otros usos de este término, véase F4. F 4 Phantom II …   Wikipedia Español

  • Navaja de Ockham — La navaja de Ockham (a veces escrito Occam u Ockam), principio de economía o principio de parsimonia (lex parsimonia), es un principio metodológico y filosófico atribuido a Guillermo de Ockham (1280 1349), según el cual cuando dos teorías en… …   Wikipedia Español

  • To Surveil With Love — To Surveil, With Love Episodio de Los Simpson Episodio n.º Temporada 21 Episodio 461 Código de producción MABF12 Guionista(s) Michael Nobori Director Lance Kramer Estrellas invitadas …   Wikipedia Español

Compartir el artículo y extractos

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