¿Cuánto tiempo tarda una computadora en sumar dos números?

Agregar números es, por supuesto, lo más básico que puede hacer la computadora. Sin embargo, la pregunta de qué tan rápido se suman los números rara vez es la pregunta que los profesionales consideran cuando comparan computadoras.

En la década de 1980, la adición de procesadores Intel utilizados en computadoras personales tomó exactamente un ciclo, por lo que observar la velocidad del procesador le dio la idea de cuánto tiempo llevó agregar dos números. Entonces, la velocidad del procesador de 20 MHz significó 20 millones de ciclos por segundo. A modo de comparación, en estos días la velocidad del procesador para computadoras personales suele ser superior a 2 GHz, por lo que eso significaría 100 veces más rápido. Sin embargo, las computadoras de hoy son tan diferentes que no tiene sentido comparar la velocidad.

Por ejemplo, en un programa real, la computadora intentará hacer varias cosas al mismo tiempo, por lo que la adición por sí sola no es un indicador útil de qué tan rápido se hacen las cosas (por ejemplo, en comparación con la computadora de la década de 1980). Además, la velocidad dependerá de dónde esté el número en la computadora: hay varios tipos de memoria, algunos más rápidos que otros. Nuevamente, en la década de 1980, la memoria era más rápida que el procesador, por lo que la velocidad del procesador significaba la velocidad de cálculo. Pero ahora los procesadores superaron la velocidad de la memoria, por lo que para asegurarse de que puede agregar los números lo más rápido posible, el software está diseñado para mover algunos números dentro del procesador. El tamaño físico del procesador y la velocidad de la luz es lo que limita la cantidad de memoria que hay dentro del procesador, por lo que los ingenieros de software trabajan para asegurarse de que solo los números de uso frecuente se almacenen en la memoria con un acceso más rápido. (En cuanto a la velocidad de la luz y el tamaño del procesador: 3 GHz significa que 3 ciclos toman 1 nanosegundo; la luz viaja aproximadamente 30 centímetros en 1 nanosegundo. Esto significa que la luz viaja solo 10 cm en 1 ciclo de dicho procesador. Si el chip del procesador es 2 centímetros de ancho, la señal eléctrica solo puede viajar alrededor de 5 veces en un ciclo o, dicho de otro modo, la velocidad de la luz introduce un retraso notable en la comunicación entre las piezas del circuito electrónico en diferentes lados del chip del procesador )

Esto quiere decir que ya no se trata de qué tan rápido se agregan los números, sino también de dónde están los números, y eso depende de las circunstancias de un cálculo particular, el diseño del procesador y el diseño del software.

Depende de algunas cosas:

  1. La computadora / procesador / idioma utilizado.
  2. El tipo de número, es decir, es un número entero (entero) como 1 o 2345345, o es un número de coma flotante, es decir, algo así como 1.434. Los procesadores suman números enteros y números de coma flotante de manera muy diferente.

Estoy seguro de que sabía que la computadora marca la diferencia, es decir, mi PC ahora es mucho más rápida que mi primera computadora. Sin embargo, el idioma también hace una gran diferencia.

resultado = 1 + 1

Lo anterior podría ser Python, o podría poner un punto y coma al final, y también es válido C, ambos se ejecutarían, pero es probable que la versión C sea un orden de magnitud más rápido.

Sin embargo, tengo curiosidad por la respuesta, así que tratemos de resolverlo.

Elija una computadora, digamos una Raspberry Pi, la original, creo que funciona a unos 700 MIPS. Eso es 700 millones de instrucciones por segundo. En el ensamblaje ARM, supongo que son 3 instrucciones para agregar 2 números. Primero cargue un número, luego el segundo número, luego agréguelos juntos. Entonces 3 instrucciones.

Si podemos ejecutar 700 millones de instrucciones por segundo, y se necesitan 3 instrucciones para agregar 2 números, entonces solo necesitamos dividir 1 segundo, por 700 millones, luego multiplicar por 3, así que si tengo todo mi uso de Google y calculadora correcto, agregar dos números juntos en una Raspberry Pi tomará aproximadamente 0.000000004 segundos.

Por supuesto, hay muchos problemas en juego aquí, cargar un número de la memoria principal en el procesador lleva tiempo, y MIPS es una medida imprecisa.

Para agregar sabor, esperaría que un procesador moderno como un Core i7 sea al menos 200 veces más rápido que eso.

Aquí hay un método que podría usar en su computadora si tiene un compilador para un lenguaje de alto nivel como BASIC, C, PASCAL, PYTHON, etc.

  1. Escribe un programa que
  1. recuerda y muestra a qué hora comenzó el programa
  2. agrega un par de números mil millones de veces
  3. recuerda y muestra qué hora es cuando termina
  4. calcula y muestra la cantidad de segundos que ejecutó el programa
  • Ahora puede dividir esa cantidad de segundos entre mil millones para averiguar cuánto tiempo llevó esto.
    • Como puede ver en la pantalla de arriba, mi programa BASIC (compilador QB64 gratuito disponible en http://www.qb64.org ) tardó 21.9765625 segundos en agregar mil millones de pares de números.
    • En otras palabras, mi computadora tardó [math] \ frac {21.9765625} {1000000000} [/ math] segundo para agregar un par de números.

    PERO este número es INCORRECTO

    Este número también incluye el tiempo que lleva ejecutar el bucle 1000 veces, así que averigüemos cuánto tiempo le tomó a la computadora ejecutar 1000 ciclos. Para hacer esto, elimine la línea de cálculo del programa y ejecútela nuevamente.

    • Como puede ver, este programa tomó 20.109375 para ejecutar el bucle FOR NEXT mil millones de veces sin hacer ningún cálculo.
    • Resta esto del primer número
    • 21.9765625 – 20.109375 = 1.8671875
  • Esto significa que la computadora usó 1.8671875 segundos para hacer ese cálculo mil millones de veces.
  • Este programa necesitó [math] \ frac {1.8671875} {1000000000} [/ math] segundo para hacer un cálculo. En notación científica, esto sería:
  • 1.8671875 x [matemática] 10 ^ {- 9} [/ matemática] segundo por adición.
  • Los programas de lenguaje de máquina calcularían INCLUSO MÁS RÁPIDO

    El problema con los programas de lenguaje de alto nivel es que pueden ser más lentos que los verdaderos programas de lenguaje de máquina que han sido optimizados para la mejor velocidad de ejecución, pero no voy a tratar de estimar cuánto más rápido sería.

    Las calculadoras gráficas son MUCHO MENOS

    Escribí este programa en la calculadora gráfica TI-84 PLUS CE de Texas Instruments y, como puede ver, tardó 45 segundos en hacer diez mil cálculos, mientras que tardó 13 segundos en hacer todo, EXCEPTO los cálculos diez mil veces.

    Esto nos dice que la calculadora TI-84 tomó [matemática] \ frac {32} {10000} [/ matemática] segundo por adición para hacer el trabajo.

    ¿Qué sería esto en notación científica? Dígame usted.

    Tu respuesta

    No uses mi respuesta. En cambio, use el lenguaje de su computadora para hacer un problema similar, pídale a sus amigos que hagan lo mismo. Obtendrás diferentes números.

    Escriba este programa en su calculadora, pero déjelo funcionar durante más tiempo para obtener una respuesta más precisa.

    Explicación del programa

    • ClockOn
    • Asegúrese de que el reloj esté funcionando realmente
  • startTmr → S
    • Mide el tiempo actual en segundos y lo almacena en la variable S
  • Repita checkTmr (Ans): Fin
    • Estas dos declaraciones siguen verificando el tiempo hasta que cambie al siguiente segundo
  • Para (I, 1,10000)
    • Inicio del ciclo que se ejecutará diez mil veces
  • π + e → B
    • Agregue π más e y almacene la respuesta en la variable B
  • Fin
    • Fin del ciclo de diez mil
  • checkTmr (S + 1) → F
    • Verifique el tiempo actual, reste (S + 1) para obtener el tiempo total con una precisión de un segundo

    Para sumadores de anticipación, [math] O (\ log N) [/ math] donde [math] N [/ math] es la longitud de los números en bits. Para sumadores que llevan ondas, [matemática] O (N) [/ matemática].

    En las CPU de consumo reales, probablemente tendría CLA, ya que tomar 64 pasos para avanzar el contador del programa en una posición es un poco excesivo 🙂

    Para la adición de punto flotante, todo es mucho más complicado (ya que los números deben normalizarse primero y, en general, no están en una representación muy directa).

    PD: si te preguntas qué significan [matemáticas] O (N) [/ matemáticas], notación Big O

    PPS Sin embargo, de otra manera es casi imposible saber cuánto costará esto cuando se trata de ejecutar un programa: puede ser gratuito (si se puede hacer en paralelo con algo más que debe hacerse; las CPU modernas son superescalares), o puede sean cientos de ciclos solo para recuperar los operandos (si no están en caché y deben recuperarse de la memoria principal).

    Una adición lleva 4 o 5 ciclos. Entonces, cuando conoces la frecuencia del reloj, puedes calcular cuánto tarda.

    Sin embargo, esto supone que los números están registrados. Si los dos números están en la memoria principal, es posible que tenga que esperar unos cientos de ciclos para que lleguen al procesador.

    Por otro lado, si tiene 4 u 8 pares de números para sumar, puede usar una instrucción vectorial y se tarda tanto como un solo par.

    Y si tiene un montón de estos cuadrúpedos, puede “ canalizarlos ”, y después de 4 o 5 ciclos para llenar la tubería, puede hacer un cuadruplete por ciclo.

    En otras palabras, esta pregunta carece de contexto.

    Normalmente, una CPU puede agregar dos números de 64 bits en 1 a 4 ciclos de reloj.

    Una computadora con un reloj de 1 Ghz significa que cada ciclo de reloj es de 1 nanosegundo (una milésima de millonésima de segundo).

    La mayoría de las CPU son de 1 a 4 GHz, lo que significa que de 1 a 4 ciclos de reloj son alrededor de 1 nanosegundo para agregar dos números.

    0,000 000 001 segundos.

    Depende de la velocidad del reloj y del número de instrucciones que se necesitan para cargar los números, agregarlos y generarlos.

    Por el retraso de solo la instrucción add, tomaría menos de un segundo naosegundo.

    Depende del tamaño de los números, pero para tamaños legibles por humanos, una computadora moderna puede agregar más de billones de pares por segundo.

    Escribí un pequeño programa en C para agregar un número a sí mismo. Hizo 9.223.372.036.854.775.807 , que es el número más grande que mi computadora entiende (sin programación furtiva) adiciones en 8.425 segundos. Eso es aproximadamente 1,000,000,000,000,000,000 adiciones en 3.731 segundos.

    Depende del procesador dentro de la computadora que esté utilizando.