¿Por qué más transistores = más potencia de procesamiento?

Según Wikipedia, el poder de procesamiento está fuertemente relacionado con la ley de Moore:

http://en.wikipedia.org/wiki/Moore's_law

La cantidad de transistores que se pueden colocar de manera económica en un circuito integrado se ha duplicado aproximadamente cada dos años. La tendencia ha continuado durante más de medio siglo y no se espera que se detenga hasta 2015 o después. Las capacidades de muchos dispositivos electrónicos digitales están fuertemente ligadas a la ley de Moore: velocidad de procesamiento, capacidad de memoria, sensores e incluso el número y tamaño de los píxeles en las cámaras digitales. Todos estos también están mejorando a tasas (más o menos) exponenciales.

Como alguien que tiene experiencia en arquitectura de computadoras, no entiendo por qué agregar más transistores en una CPU aumentaría su potencia ya que, en última instancia, las instrucciones se leen/ejecutan aproximadamente de forma secuencial. ¿Alguien podría explicar qué parte me falta?

Más transistores = más paralelismo
Es cierto sin importar cuántos núcleos tenga el procesador.
Sí. Más transistores significa que puede poner más unidades de ejecución en paralelo. Mayor caché. Tuberías más profundas.
El caché es el grande. Creo que la proporción de los bienes inmuebles de silicio dedicados a la memoria caché ha ido en aumento. La mayor parte del rendimiento de los procesadores modernos se puede atribuir al almacenamiento en caché, y el almacenamiento en caché solo funciona cuando hay localidad, pero cuanto más grandes son los cachés, más relajado es el requisito de localidad (las aplicaciones más grandes con patrones de acceso a la memoria más extravagantes aún se aceleran).
Piense en sólo un multiplicador. Con suficientes transistores, puede usar una tabla de búsqueda completa y hacer toda la multiplicación en un solo paso. Con menos transistores, tienes que hacer cosas como sumas repetidas.

Respuestas (5)

Muchas cosas que le dan más poder solo requieren más transistores para construirlas. Los buses más anchos escalan el recuento de transistores en casi todos los componentes del procesador. Los cachés de alta velocidad agregan transistores según el tamaño del caché. Si alarga una tubería, necesita agregar etapas y unidades de control más complejas. Si agrega unidades de ejecución para ayudar a mitigar un cuello de botella en la tubería, cada una de ellas requiere más transistores, y luego los controles para mantener las unidades de ejecución asignadas agregan aún más transistores.

La cosa es que, en un circuito electrónico, todo sucede en paralelo. En el mundo del software, el valor predeterminado es que las cosas sean secuenciales, y los diseñadores de software se esfuerzan mucho para incorporar el paralelismo en el software para que pueda aprovechar la naturaleza paralela del hardware. El paralelismo solo significa que suceden más cosas al mismo tiempo, por lo que equivale aproximadamente a la velocidad; Cuantas más cosas se puedan hacer en paralelo, más rápido se pueden hacer las cosas. El único paralelismo real es lo que obtienes cuando tienes más transistores en el trabajo.

Las primeras instrucciones no se "ejecutan secuencialmente" necesariamente, incluso en un ISA que no sea VLIW, la ejecución solo debe aparecer secuencial. Una implementación superescalar en orden puede ejecutar más de una instrucción en paralelo con otra. Para hacer esto de manera efectiva, se debe aumentar (ampliar) el hardware para decodificar las instrucciones, se debe agregar hardware para garantizar la independencia de los datos de las instrucciones que se ejecutarán en paralelo, se deben aumentar los recursos de ejecución y, en general, se aumenta la cantidad de puertos de archivos de registro. Todos estos agregan transistores.

Una implementación fuera de orden, que permite que las instrucciones posteriores se ejecuten antes que las anteriores siempre que no haya dependencias de datos, utiliza hardware adicional para manejar la programación de instrucciones tan pronto como los datos estén disponibles y agrega registros de cambio de nombre y hardware para el mapeo. asignándolos y liberándolos (más transistores) para evitar los peligros de escritura tras lectura y escritura tras escritura. La ejecución desordenada permite que el procesador evite estancarse.

El reordenamiento de cargas y almacenamientos en un procesador fuera de orden requiere garantizar que los almacenamientos anteriores en el orden del programa enviarán los resultados a cargas posteriores de la misma dirección. Esto implica una lógica de comparación de direcciones, así como el almacenamiento de las direcciones (y el tamaño) de las tiendas (y el almacenamiento de los datos) hasta que la tienda se haya comprometido en la memoria (caché). (Para un ISA con un modelo de consistencia de memoria menos débil, también es necesario verificar que las cargas estén ordenadas correctamente con respecto a las tiendas de otros procesadores, más transistores).

La canalización agrega un control adicional y una sobrecarga de almacenamiento en búfer y evita la reutilización de la lógica para diferentes partes del manejo de instrucciones, pero permite que las diferentes partes del manejo de una instrucción se superpongan en el tiempo para diferentes instrucciones.

La canalización y la ejecución superescalar aumentan el impacto de los riesgos de control (es decir, ramificaciones y saltos condicionales). La canalización (y también la ejecución fuera de orden) puede retrasar la disponibilidad del objetivo incluso de los saltos incondicionales, por lo que agregar hardware para predecir objetivos (y dirección para bifurcaciones condicionales) permite que continúe la obtención de instrucciones sin esperar la parte de ejecución del procesador para que los datos necesarios estén disponibles. Los predictores más precisos tienden a requerir más transistores.

Para un procesador fuera de servicio, puede ser deseable permitir que se ejecute una carga desde la memoria antes de que se hayan calculado las direcciones de todas las tiendas anteriores, por lo que se requiere algún hardware para manejar dicha especulación, que podría incluir un predictor.

Los cachés pueden reducir la latencia y aumentar el ancho de banda de los accesos a la memoria, pero agregue transistores para almacenar los datos y almacenar etiquetas (y comparar etiquetas con la dirección solicitada). También se necesita hardware adicional para implementar la política de reemplazo. La captación previa de hardware agregará más transistores.

La implementación de la funcionalidad en el hardware en lugar del software puede aumentar el rendimiento (al tiempo que requiere más transistores). Por ejemplo, gestión de TLB, operaciones complejas como operaciones de multiplicación o punto flotante, operaciones especializadas como contar ceros a la izquierda. (La adición de instrucciones también aumenta la complejidad de la decodificación de instrucciones y, por lo general, también la complejidad de la ejecución, por ejemplo, para controlar qué partes del hardware de ejecución se utilizarán).

Las operaciones SIMD/vectoriales aumentan la cantidad de trabajo realizado por instrucción, pero requieren más almacenamiento de datos (registros más amplios) y, por lo general, utilizan más recursos de ejecución.

(Los subprocesos múltiples especulativos también podrían permitir que múltiples procesadores ejecuten un programa de un solo subproceso más rápido. Obviamente, agregar procesadores a un chip aumentará la cantidad de transistores).

Tener más transistores disponibles también puede permitir que los arquitectos informáticos proporcionen un ISA con más registros visibles para el software, lo que podría reducir la frecuencia de los accesos a la memoria, que tienden a ser más lentos que los accesos a los registros e implican cierto grado de direccionamiento indirecto (p. ej., agregando un desplazamiento a la pila). puntero) que aumenta la latencia.

La integración, que aumenta la cantidad de transistores en un chip pero no en el sistema, reduce la latencia de la comunicación y aumenta el ancho de banda, lo que obviamente permite un aumento en el rendimiento. (También hay una reducción en el consumo de energía que puede traducirse en un mayor rendimiento).

Incluso a nivel de ejecución de instrucciones, agregar transistores puede aumentar el rendimiento. Por ejemplo, un sumador de selección de acarreo agrega bits superiores dos veces en paralelo con diferentes suposiciones del acarreo de los bits inferiores, seleccionando la suma correcta de bits superiores cuando el acarreo de los bits inferiores está disponible, obviamente requiriendo más transistores que un simple ripple carry sumador pero reduciendo el retraso en la producción de la suma total. De manera similar, un multiplicador con una sola fila de sumadores de acarreo y ahorro usa menos transistores (pero es más lento) que un multiplicador de árbol Dadda (o Wallace) y no se puede canalizar (por lo que tendría que replicarse para permitir que otro multiplicador comience a ejecutarse mientras que un multiplicador anterior la multiplicación estaba en progreso).

¡Lo anterior puede ser agotador pero no es exhaustivo!

Excelente respuesta de un chico nuevo!

La cantidad de transistores no se correlaciona necesariamente con una mayor potencia de procesamiento; sin embargo, con más transistores, el procesador puede ejecutar instrucciones cada vez más complicadas que antes. Por ejemplo, un procesador con SSE utilizará transistores adicionales para implementar estas instrucciones complejas (por ejemplo, agregar muchos números en un ciclo).

Alan Kay calculó que, desde que trabajaba en Smalltalk en Xerox PARC, hemos perdido 18 años de duplicación de transistores debido a arquitecturas incorrectas e ineficiencia del software porque las computadoras ciertamente no son tan rápidas como sugeriría la duplicación de transistores.

Los microprocesadores han avanzado significativamente en los últimos años, cosas como canalizaciones más largas, bifurcación predictiva y caché en chip se han sumado a las complejidades asociadas con un procesador.

Seguro que los conceptos básicos de procesamiento de CPU, búsqueda, decodificación, ALU, escritura siguen siendo los mismos, pero para acelerar las cosas, se utilizan canalizaciones más largas. Las canalizaciones más largas aumentan el rendimiento para la ejecución continua de código, pero también incurren en tiempos de éxito más grandes cuando las bifurcaciones del código dañan el rendimiento. Remedy, ramificación predictiva. La bifurcación predictiva es un secreto comercial, del que Intel normalmente no revela el funcionamiento completo, simplemente utilícelo para mantener el rendimiento lo más alto posible en sus CPU.

La memoria caché es mucho más rápida que la RAM, pero ¿qué mover de RAM a caché y de caché a RAM? Eso es de nuevo, material patentado, pero nuevamente se necesitan transistores para implementarlo.

Entonces, los transistores adicionales entran en cosas como la tubería más larga, los algoritmos de ramificación predictiva, la memoria caché y los algoritmos de memoria.

Esto es sin mencionar los procesadores multinúcleo y los controladores de acceso a recursos/memoria compartida.

Otro factor: a medida que coloca más transistores en un área determinada, se hacen más pequeños, haciéndolos más rápidos.

A medida que los transistores se acercan más y más, se obtienen otros efectos no deseados, como una mayor corriente de fuga, por lo que es una compensación entre el rendimiento y la baja potencia: la mayoría de los fabricantes parecen haber optado por el rendimiento.