2010-11-05 15 views
12

¿Por qué la operación MOD es más costosa que multiplication por un poco más que factor of 2? Sea más específico sobre cómo la CPU realiza la operación de división y devuelve el resultado para la operación MOD.¿El funcionamiento de MOD requiere más CPU que la multiplicación?

En el siguiente ejemplo, los subprocesos se ejecutan cada uno durante un segundo. La prueba se realizó en un procesador SPARC.

// multiplication 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a * a; 
     a++; 
    } 

    // opers ~ 26 * 10^6 in a sec. 
} 

// MOD 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a % 10000007; 
     a++; 
    } 

    // opers ~ 12 * 10^6 in a sec. 
} 
+2

Ambos ejemplos de código son iguales. –

+0

Se corrigió el problema. – Leonid

+0

¿Dónde está la versión con '+'? ^^ –

Respuesta

5

algoritmos (procesadores ejecutan la división y la multiplicación por los algoritmos implementados en puertas) para la división son más costosos que para la multiplicación. Como cuestión de hecho, algunos algoritmos para la división que tienen una buena complejidad están utilizando la multiplicación como un paso básico.

Incluso si usa los ingenuos algoritmos que se aprenden en la escuela. Ambos tienen la misma complejidad asintótica, pero la constante para la división es mayor (hay que descubrir el dígito y eso no es trivial, por lo que puedes cometer un error y tener que arreglar el desorden).

12

MOD es una operación de división, no una operación de multiplicación. La división es más costosa que la multiplicación.

Más información sobre la operación MOD aquí: http://en.wikipedia.org/wiki/Modulo_operation

+3

Downvoter: ¿Por qué? –

+2

Robert: Lo mismo podría decirse sobre la división, es decir, la división es más cara porque es una operación MOD, mientras que MOD es más costosa que la multiplicación. Me gustaría saber más detalles en el nivel de CPU por qué la división/mod es más cara que la multiplicación. Esta respuesta repite mi pregunta. – Leonid

+1

Esta es la respuesta correcta, obviamente el OP no se tomó lo suficientemente en serio como para comparar mod con div. Debería haber una esquina polvorienta en Internet en alguna parte que hablara de las partes internas del procesador de sparc. –

1

Sí, mod es más caro que la multiplicación, ya que se implementa a través de la división. (Generalmente, las CPU devuelven tanto el cociente como el resto en la división). Pero ambos subprocesos usan multiplicación. ¿copiar/pegar error?

Cuestiones relacionadas