Pregunta

Si la Ley de Moore es verdad, y CPU / GPU cada vez más rápido, lo hará el software (y, por asociación, que los desarrolladores de software) sigue empujando los límites en la medida en que necesita para optimizar su código? ¿O será una solución factorial ingenua ser lo suficientemente bueno para su código (etc)?

¿Fue útil?

Solución

código mala siempre se puede superar la velocidad de la CPU.

Para un excelente ejemplo, vamos a este columna Coding Horror y de desplazamiento abajo a la sección que describe el libro Programación Perlas . Reproducido hay un gráfico que muestra cómo, para un determinado algoritmo, un TRS-80 con un procesador de 4.77MHz 8 bits puede vencer a un chip de Alfa de 32 bits. TRS-80 vs. Alpha

La tendencia actual en aceleraciones es añadir más núcleos, porque haciendo núcleos individuales van más rápido es duro . Así que la velocidad agregada aumenta, pero las tareas lineales no siempre se benefician.

El dicho "no hay ningún problema de que la fuerza bruta y la ignorancia no pueden superar" no siempre es cierto.

Otros consejos

2x la potencia de procesamiento no hace mucho para mejorar el horror de su pésimo n ^ 2 búsqueda.

Los ordenadores más rápidos consiguen, más que esperamos que hagan.

Ya se trate de un código más rápido para más polígonos en un videojuego, o algoritmos más rápidos para el comercio en los mercados financieros, si hay una ventaja competitiva de ser más rápido, optimización seguirá siendo importante. Usted no tiene que ganarle la carrera del león que usted y su compañero que está persiguiendo -. Sólo hay que ganarle la carrera a su compañero

Hasta que todos los programadores escriben código óptimo de la primera vez, siempre habrá un lugar para la optimización. Mientras tanto, la verdadera pregunta es la siguiente: ¿qué debemos optimizar para el primer

La Ley de Moore habla acerca de cuántos transistores podemos embalar en un chip - no tiene nada que decir acerca de los transistores de ser capaz de cambiar la velocidad como cada vez más rápido. De hecho, en los últimos años han velocidades de reloj más o menos estancado - que se vuelven cada vez más y más "núcleos" (CPU completos, esencialmente) por chip. Para tomar ventaja de que requiere la paralelización del código, por lo que si usted está escribiendo "ingenuamente" el optimizador mágica del futuro estará ocupado averiguar paralelismo oculto en el código para que pueda cultivar un vistazo a varios núcleos (de manera más realista, por previsible futuro, que tendrá que estar ayudando a cabo su compilador mucho; -).

ley de Wirth :

  

software es cada vez más lento pero más rápidamente que el hardware se vuelve más rápido.

P.S. En un tono más serio: como el modelo de computación se mueve para procesamiento en paralelo, optimización de código se vuelve más importante. Si a optimizar sus 2x código y se ejecuta a 5 minutos en lugar de 10 minutos en 1 sola caja, puede ser no es tan impresionante. El siguiente equipo con la velocidad 2x compensará esto. Pero imagina de ejecutar su programa en 1000 CPU. Entonces, cualquier optimización ahorra un montón de tiempo de máquina. Y la electricidad. Optimizar y salvar la Tierra! :)

tareas computacionales parecen estar dividido en más o menos dos grupos amplios.

  1. Problemas con las necesidades computacionales acotadas.
  2. Problemas con las necesidades computacionales sin límites.

La mayoría de los problemas de ajuste en la primera categoría. Por ejemplo, en tiempo real 3d rasterización. Por un buen tiempo, este problema estaba fuera del alcance de la electrónica de consumo típicos. No hay juegos en 3D convincentes u otros programas existieron que podrían producir mundos en tiempo real sobre una] [Apple. Eventualmente, sin embargo, la tecnología alcanzó, y ahora este problema se puede lograr. Un problema similar es la simulación de plegamiento de proteínas. Hasta hace muy poco, era imposible transformar una secuencia peptídica conocimientos en la molécula de proteína resultante, pero el hardware moderno hace esto posible en unas pocas horas o minutos de procesamiento.

Hay algunos problemas sin embargo, que por su naturaleza puede absorber todos los recursos computacionales disponibles. La mayoría de estos son simulaciones dinámicas físicas. Obviamente su posible llevar a cabo un modelo computacional de, por ejemplo, el clima. Hemos estado haciendo esto casi tanto tiempo como hemos tenido ordenadores. Sin embargo, tales un complejo sistema se beneficia de una mayor precisión. simulación en el espacio cada vez más fina y resolución de tiempo mejora las predicciones bit por bit. Pero no importa cuánto exactitud cualquier simulación dada tiene, hay espacio para más exactitud con la ventaja que le sigue.

Los dos tipos de problemas tienen un uso muy importante para la optimización de todo tipo. El segundo tipo es bastante obvio. Si el programa haciendo la simulación se mejora un poco, a continuación, se ejecuta un poco más rápido, dando resultados un poco más tarde o con una precisión poco más.

La primera de ellas es un poco más sutil, sin embargo. Durante un determinado período, ninguna cantidad de optimización de la pena, ya que no existe ningún equipo que es lo suficientemente rápido para él. Después de un tiempo, la optimización es algo sin sentido, ya que el hardware que se encarga es muchas veces más rápido de lo necesario. Pero hay una estrecha ventana en la que una solución óptima funcionará aceptablemente en el hardware actual, sino una costumbre solución subóptima. durante este período, considerado cuidadosamente optimización puede ser la diferencia entre un primer lanzamiento al mercado producto ganador y un también corrió.

Hay más en la optimización de la velocidad. La ley de Moore no se aplica a la memoria del ordenador. También optimización es a menudo el proceso de compilar el código para tomar ventaja de las instrucciones específicas de la CPU. Estas son sólo algunas de las optimizaciones que se me ocurre que no se resolverán por una CPU más rápida.

Optimización siempre será necesario, ya que el factor atenuante a la Ley de Moore es programas de relleno .

Otras respuestas parecen estar concentrándose en el lado de la velocidad de la cuestión. Esta bien. El verdadero problema que veo es que si a optimizar su código, que va a tomar menos energía para ejecutarlo. Su centro de datos funciona el refrigerador, su ordenador portátil dura más tiempo, el teléfono va para más de un día en una carga. Hay una verdadera presión de selección en este extremo del mercado.

continuará ser necesario

Optimización en muchas situaciones, en particular:

  • sistemas de tiempo real, donde el tiempo de CPU es un bien escaso

  • sistemas integrados, donde la memoria es la memoria es una prima

  • Servidores, donde muchos procesos están demandando atención simultáneamente

  • Juegos, en 3-D de trazado de rayos, de audio, AI, y las redes pueden hacer para un programa muy exigente

El mundo cambia, y tenemos que cambiar con él. Cuando empecé, ser un buen programador se trata de saber todas las pequeñas micro-optimizaciones que podría hacer para exprimir otro 0,2% de una rutina mediante la manipulación de punteros en C, y otras cosas por el estilo. Ahora, me paso mucho más tiempo trabajando en la fabricación de los algoritmos más comprensible, ya que en el largo plazo, eso es más valioso. Pero - siempre hay cosas para optimizar, y siempre los cuellos de botella. Más recursos significa que la gente espera más de sus sistemas, por lo que ser descuidado no es una opción válida para un profesional.

Estrategias de optimización cambian a medida que agrega más velocidad / memoria / recursos para trabajar, sin embargo.

Algunos optimización no tiene nada que ver con la velocidad. Por ejemplo, cuando la optimización de algoritmos multihilo, es posible que la optimización de una reducción en el número total de bloqueos compartidos. La adición de más potencia de procesamiento en forma de velocidad (o peor aún, procesadores) puede no tener ningún efecto si se gasta su capacidad de procesamiento actual de espera en las cerraduras .... adición de procesadores puede incluso hacer su caída sobre la actuación global si está haciendo las cosas de forma incorrecta . Optimización en este caso significa tratar de reducir el número de bloqueos y mantenerlos como de grano fino como sea posible en lugar de tratar de reducir el número de instrucciones.

Mientras que algunas personas escriben código lenta que utiliza demasiados recursos, otros tendrán que optimizar su código para proporcionar los recursos más rápido y obtener la velocidad de las copias.

Me parece increíble lo creativos que algunos desarrolladores pueden obtener escribiendo código subóptima. En mi trabajo anterior, un hombre escribió una función para calcular el tiempo entre dos fechas por continuning para incrementar una fecha y comparando, por ejemplo.

velocidad del ordenador no siempre puede superar el error humano. Las preguntas pueden ser formuladas de " problemas de Will CPU esté lo suficientemente rápido que los compiladores pueden tomar el tiempo para coger (y solución) de aplicación ." Obviamente, será necesaria la optimización del código (en el futuro previsible) para fijar shlemiel el pintor -type problemas.

El desarrollo de software es aún materia de decirle al ordenador exactamente qué hacer. Lo CPU "cada vez más rápidos" nos darán es la capacidad de diseño de lenguajes de programación cada vez más abstractas y naturales , con el tiempo al punto donde las computadoras toman nuestras intenciones y poner en práctica todos los detalles de bajo nivel ... algún día .

Disfrute,

Robert C. Cartaino

Una computadora es como la habitación de un adolescente.

Nunca será lo suficientemente grande como para contener toda la basura.

Creo que resultado de todo esto es que la potencia de cálculo es cada vez más barato, así que el programador puede dedicar menos tiempo para realizar una tarea determinada. Por ejemplo, lenguajes de alto nivel, como Java o Python, son casi siempre más lento que los lenguajes de nivel inferior como Asamblea. Pero es mucho más fácil para el programador que son posibles nuevas cosas. Creo que el destino final será que los ordenadores serán capaces de comunicarse directamente con los seres humanos, y compilar el habla humana en el código de bytes. A continuación, los programadores dejarán de existir. (Y las computadoras podrían dominar el mundo)

Bien o mal, está sucediendo ya en mi opinión, y no siempre es necesariamente una mala cosa. Mejor hardware hace presente oportunidad para que el desarrollador se concentre más energía en resolver el problema en cuestión de preocuparse por el 10% adicional de utilización de la memoria.

La optimización es indiscutible, pero sólo cuando es necesario. Creo que la potencia de hardware adicional es simplemente disminuyendo los casos en los que realmente se necesite. Sin embargo, el que está escribiendo el software para lanzar el transbordador espacial a la luna mejor que su código optimizado:)

Dado que los ordenadores son unas mil veces más rápido de lo que eran hace unas décadas, pero por lo general no aparecen mucho más rápido, diría que tenemos un largo camino por recorrer antes de dejar de preocuparse acerca de la optimización. El problema es que a medida que las computadoras se vuelven más poderosos, tenemos las computadoras hacen más y más trabajo para nosotros, para que podamos trabajar en los niveles más altos de abstracción. Optimización en cada nivel de abstracción sigue siendo importante.

Sí, los ordenadores hacen muchas cosas mucho más rápido: Se puede dibujar una Mandelbrot en minutos que antes requerían días de tiempo de computadora. A cargas GIF casi instantáneamente, en lugar de tomar segundos visibles que se dibujan en la pantalla. Hay muchas cosas que son más rápidos. Pero la navegación, por ejemplo, no es que mucho más rápido. El procesamiento de textos no es mucho más rápido. A medida que las computadoras se vuelven más poderosos, que sólo cabe esperar más, y hacemos los ordenadores hacemos más.

Optimización será importante para el futuro previsible. Sin embargo, micro-optimizaciones son mucho menos importante de lo que solían ser. La optimización más importante en estos días puede ser elección del algoritmo. Cómo se elige O (n log n) u O (n ^ 2) .... etc.

El coste de optimización es muy baja, por lo que dudo que sea necesario para dejarla caer. El verdadero problema es encontrar tareas para utilizar toda la potencia de cálculo que hay ahí fuera - por lo que en lugar de dejar caer la optimización, estaremos optimizando nuestra capacidad para hacer las cosas de paralelo.

Con el tiempo que no será capaz de llegar más rápido, con el tiempo vamos a estar limitado por el espacio, por tanto, por la que ves más nuevos procesadores de bajo 3GHZ y multi core .. Así que sí optimización sigue siendo un neccessity.

siempre será necesario Optimización de código en algún grado y no sólo para acelerar la velocidad de ejecución y menor uso de memoria. Encontrar el método eficiente de la energía óptima de procesamiento de la información será un requisito importante en centros de datos, por ejemplo. habilidades de perfiles van a ser mucho más importante!

Sí, estamos en el punto en materia de optimización y estará allí en el futuro previsible. Porque:

    velocidades
  • RAM aumentan a un ritmo menor que la velocidad de la CPU. Así, hay una diferencia de rendimiento aún mayor entre la CPU y la RAM, y, si su programa accede a la RAM mucho, usted tiene que optimizar los patrones de acceso para explotar de manera eficiente caché. De lo contrario la CPU súper rápido va a estar inactivo 90% del tiempo, a la espera de los datos que llegan.
  • número de núcleos aumenta y aumenta. ¿Su beneficio código de cada núcleo agregado o se ejecuta en un solo núcleo? Aquí optimización significa paralelización, y, dependiendo de la tarea en cuestión, que puede ser difícil.
  • velocidades de CPU será nunca ponerse al día con algoritmos exponenciales y otros tipos de fuerza bruta de las cosas. Como muy bien ilustrado por esta responder .
las velocidades de red esperanza

Vayamos de mantenerse al día para que podamos pala suficientes datos sobre el alambre para mantenerse al día con las CPUs ...

Como se ha mencionado, siempre habrá cuellos de botella

Suponga que su CPU tiene el mayor número de transistores como el número de partículas subatómicas en el universo, y su reloj funciona a la frecuencia de los rayos cósmicos duros, todavía se puede superar.

Si quiere mantenerse a la vanguardia de la última hora de la CPU, sólo tiene que añadir otro nivel de anidamiento de bucles, o añadir otro nivel de anidación en sus llamadas a subrutinas.

O si quieres ser realmente profesional, añadir otra capa de abstracción.

No es difícil: -)

A pesar de que las CPU se vuelven más rápidos y más rápido, siempre se puede optimizar

  • rendimiento de la red,
  • búsquedas en disco,
  • el uso del disco,
  • uso de memoria,
  • transacciones de bases de datos,
  • número de llamadas al sistema,
  • programación y de bloqueo de granularidad,
  • recolección de basura.

(que es ejemplos del mundo real que he visto durante el pasado medio año).

Las diferentes partes de los sistemas informáticos complejos se consideran caros en diferentes puntos de la historia de la computación. Usted tiene que medir los cuellos de botella y juzgar dónde poner el esfuerzo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top