Optimización de software frente a Optimización de hardware: ¿qué tiene el mayor impacto?

7

Me preguntaba cómo se comparan la optimización de software y la optimización de hardware cuando se trata del impacto que tienen en la velocidad y el aumento de rendimiento de las computadoras.

He escuchado que la mejora de la eficiencia del software y los algoritmos a lo largo de los años ha generado enormes ganancias en el rendimiento. Obviamente, ambos son extremadamente importantes, pero ¿cuál ha sido el mayor impacto en los últimos 10, 20 o 30 años?

¿Y cómo afectan los cambios de hardware a los cambios de software? ¿Cuánto de la optimización del software es un resultado directo de las mejoras de hardware y cuánto es independiente del hardware?

Para ser claro, estoy preguntando sobre optimizaciones de software a nivel de compiladores y sistemas operativos. Obviamente, el uso de mejores algoritmos de alto nivel dará como resultado los mayores incrementos de velocidad (piense: clasificación rápida frente a clasificación por burbuja), pero esta pregunta es acerca de la razón subyacente por la que las computadoras son más rápidas hoy, en general.

    
pregunta domvoyt 23.05.2012 - 17:19

6 respuestas

6

El mayor aumento en el rendimiento definitivamente proviene del hardware.

En términos de software, uno de los cambios más grandes en los últimos 30 años es que no escribimos tanto código de bajo nivel como solíamos hacerlo. Por ejemplo, el software ahora se basa en las optimizaciones automáticas del compilador en lugar del ensamblaje escrito a mano, y hace un uso extensivo de los marcos y patrones existentes que han madurado en las últimas décadas. Por otro lado, el software se ha vuelto cada vez más complejo, y ha habido éxitos de rendimiento correspondientes.

Sin embargo, las capacidades de hardware han mejorado principalmente de acuerdo con la Ley de Moore, y las velocidades de la CPU y el ancho de banda de la memoria han aumentado cientos de veces en los últimos 30 años. Los procesos de fabricación han mejorado, lo que permite que los componentes se vuelvan más pequeños y más rápidos porque se pueden empaquetar más transistores juntos. Una de las cosas más importantes que ha acelerado las computadoras es el acceso a la memoria y el uso del almacenamiento en caché. Los tamaños de la memoria caché de la CPU ahora son más grandes de lo que solía ser la RAM total, y los programas de bajo nivel han cambiado para hacer un mejor uso de esto. Además, cuando las CPU de 64 bits se convirtieron en algo común, se requirió un conjunto de instrucciones correspondiente (es decir, x86-64, cuyo uso aún podría calificar como "software") para aprovechar esto adecuadamente. De esa manera, es una combinación de mejoras en el hardware, que se aprovechan mejor por los cambios en el diseño del software.

En resumen, los mayores avances incrementales en el rendimiento provienen del hardware; sin embargo, a menudo se requieren cambios en el software para hacer un uso óptimo del nuevo hardware. ¡Cualquiera de los dos no funciona realmente sin el otro!

    
respondido por el AerandiR 23.05.2012 - 21:07
5
  

He oído que la mejora de la eficiencia del software y los algoritmos a lo largo de los años ha hecho   enormes ganancias de rendimiento

Creo que lo que has escuchado aquí está relacionado con mejores algoritmos, pero eso es lo que excluiste explícitamente de tu pregunta.

A nivel de sistemas operativos, no creo que muchas aplicaciones se ejecuten más rápido hoy que hace 10 años porque el sistema operativo ha mejorado (en la mayoría de los casos lo contrario es cierto: la mayoría de los sistemas operativos se hacen más y más grandes cada año, lo que genera más gastos generales). ). La única excepción puede ser un mejor soporte para múltiples procesadores y computación paralela, pero eso no se puede ver independientemente de las mejoras de hardware.

Para los compiladores, ha habido algunas mejoras en las décadas, pero las que tuvieron el mayor impacto en el rendimiento fueron las mejoras para admitir las características del nuevo hardware. Las características de computación paralela IMHO (multinúcleo, SIMD, etc.) y el procesamiento de 64 bits son las cosas más importantes aquí para mencionar. EDITAR: hay un aspecto en el que las mejoras en el software del compilador han aumentado el rendimiento de las aplicaciones en aproximadamente un orden de magnitud en los últimos 10 a 20 años: compiladores justo a tiempo, especialmente los de Java (desde ~ 1999), y más adelante Javascript .

Por lo que se trata principalmente de hardware. En términos de hace 20 o 30 años, fue principalmente la velocidad del reloj del procesador, donde el aumento correlacionó aproximadamente 1: 1 en el rendimiento de la aplicación para muchas aplicaciones (eso no es perfectamente cierto, el aumento real fue menor ya que el rendimiento de la aplicación también depende de otros componentes de hardware como la velocidad de acceso a la memoria, la velocidad del disco duro, la velocidad de la GPU, etc.). Cuando piensa en los últimos 10 años, la velocidad del reloj del procesador no aumentó mucho más, ya que los fabricantes de procesadores llegaron a los límites prácticos de fabricación. En cambio, hubo un cambio de paradigma a la computación paralela. El procesador multinúcleo, la computación de GPU (que también es una forma de computación paralela), SIMD en la corriente principal, etc. han dominado la última década.

    
respondido por el Doc Brown 23.05.2012 - 18:33
3

Si el hardware proporciona una relación de aceleración de 2x, eso hace que todo sea 2 veces más rápido que antes.

Si una nueva optimización del compilador da un índice de aceleración de 2x, eso también hace que todo sea 2 veces más rápido que antes.

Juntos, harán que las cosas sean 4 veces más rápidas que antes.

Antes de que eso te anime, hay una regla muy antigua: Nature Abhors un vacío . Si hay espacio libre en la memoria RAM, alguien lo llenará. Si hay espacio libre en el disco, alguien lo llenará. Si hay ciclos de repuesto en su CPU, alguien los usará.

No lo creo? Encuentre esa vieja computadora portátil desechada con el procesador de 500 MHz y el disco de 3 GB y trate de instalar un nuevo software en él.

Los programadores (incluyéndome a mí) tienden a escribir códigos que agotan los ciclos disponibles, sin importar cuántos ingenieros trabajen con nosotros, y no siempre para obtener más funcionalidad.

    
respondido por el Mike Dunlavey 23.05.2012 - 21:57
2

Hace 30 años, una computadora PC tenía un Z80 Micro funcionando a quizás 1 Meg, y si tenías suerte, otro Z80 ejecutaba la pantalla.
Hoy en día, una computadora PC típica tiene una CPU con 2 o 4 núcleos que se ejecutan a 2-3 Gig Hz. También tienen GPU con cientos de procesos paralelos, nuevamente medidos en el rango de GhZ. Entonces tenemos 8 bits vs 64 bits de ancho de bus.

Haré todo eso, ¿por qué las computadoras no funcionan 10 mil veces más rápido que sus contrapartes de 30 años? El hardware es. Yo diría que las optimizaciones de los programas informáticos no son tan buenas como suponen sus preguntas.

    
respondido por el mattnz 25.05.2012 - 06:56
2

Suponiendo que no haya una ineficiencia algorítmica bruta del software, aún puede no estar claro dónde están las mayores ganancias. Las mejoras de hardware más recientes son inútiles sin el lado de optimización de software de todas formas. ¿Es la paralelización y vectorización de tareas una optimización de software o hardware? Son ambos.

Además, la velocidad a veces se realiza a través de un cambio radical en la capacidad del hardware y la filosofía del software. Por ejemplo, debido a una explosión tanto de la capacidad de la memoria como del rendimiento secuencial del disco, muchos ingenieros de software están abandonando el concepto de bases de datos relacionales de búsqueda pesada en favor de poner todos los datos en la memoria.

El punto general es que las optimizaciones de hardware sin las optimizaciones de software correspondientes a menudo solo le ofrecen ganancias incrementales. Lo mismo viceversa.

    
respondido por el Kevin Hsu 25.05.2012 - 08:15
1

Con compilación de silicio , cualquier pieza de software puede implementarse en hardware.

La ganancia de rendimiento es básicamente en la conversión de una arquitectura secuencial de Von Neuman en un flujo de datos paralelo uno.

Por lo tanto, cualquier optimización de software es posible en hardware con el mismo apalancamiento.

Hoy en día, el software se utiliza principalmente para mover datos de un lugar a otro, mientras que el hardware lo procesa: FPU, DSP, GPU ...

Las cámaras AVCHD y YouTube no existirían sin los codificadores y decodificadores de video implementados por hardware (¡existen en dispositivos tan restringidos como los teléfonos inteligentes!).

Estas optimizaciones de hardware afectan a los compiladores y sistemas operativos en el sentido de que los gráficos, el audio y el procesamiento de video ahora pertenecen al sistema operativo y sus bibliotecas proporcionadas.

    
respondido por el mouviciel 25.05.2012 - 09:45

Lea otras preguntas en las etiquetas