Muchos confunden a menudo el significado de la Ley de Moore ... se refiere al número de transistores en un chip, no al rendimiento.
Hace un tiempo, se hizo evidente que las ganancias del aumento de la frecuencia de reloj en los chips no valían la pena y los fabricantes de chips comenzaron a agregar núcleos adicionales a las CPU.
Sin embargo, el aumento en el número de núcleos en los chips de los consumidores no ha coincidido con el aumento en los transistores en cada chip.
Supongo que muchos de estos transistores se han incorporado a características tales como la lógica de predicción, porque es difícil que algunas cargas de trabajo se paralicen, o muchos programadores consideran que sus programas son paralelos demasiado tiempo, o las CPU están optimizadas para los programas existentes .
Sin embargo, desde mi punto de vista, me gustaría ver que los transistores aumentan el conteo de núcleos y el caché en el chip, ya que esto beneficiaría a mis programas más que los aumentos marginales en el rendimiento de un solo hilo, dado que no tengo problemas para escribir varios subprocesos Código para la mayoría de mis objetivos particulares.
Si uso los transistores adicionales para un caché muy grande, no tendré que hacer tantos viajes a la memoria, lo que también puede ser un gran refuerzo de rendimiento.
¿Soy incorrecto en cuanto a la razón por la que los recuentos de núcleos no parecen aumentar al mismo ritmo que el número de transistores? ¿O también hay una disminución en el rendimiento al aumentar el recuento de núcleos incluso para cargas de trabajo fácilmente paralelizadas como el ancho de banda de la memoria?
¿Por qué los recuentos de núcleos no se han incrementado en ningún punto cercano a la tasa como el número de transistores en un chip?
Editar: El hecho de que una carga de trabajo se pueda ejecutar en paralelo no significa que sea una tarea apropiada para un ect de GPU que tiende a hacer muchos cálculos de punto flotante. Las CPU tienen diversas funciones de propósito general de las que carecen los chips más especializados.
Un ejemplo de esto podría ser, digamos que tengo un conjunto de 50 funciones heurísticas que necesito para ejecutar contra un gran conjunto de datos que ya están en la memoria.
Esto es fácil de subprocesos múltiples, asigna a cada función su propio subproceso, y puedes subprocesos múltiples más subgrupos de los datos para cada función (si los datos no son altamente interdependientes). Podrías satitar fácilmente todos los núcleos de un procesador Xeon de gama alta, pero no podrás hacer mucho uso de una GPU o SIMD.
O, simplemente, una aplicación web común que atiende muchas solicitudes diferentes que no necesitan ser coordinadas.
O, simplemente, varias aplicaciones diferentes que se ejecutan en el mismo servidor por razones políticas o administrativas.