Cita:
Originalmente Escrito por danko9696
Buen artículo para desmitificar el número de cores. Claro que es mejor tener pocos cores potentes que tener muchos cores poco potentes, por lo menos de cara al rendimiento. Y es parte del motivo por el que los iphone rinden tan bien. Contando con pocos cores muy potentes, limitan el multitarea para evitar sobrecargarlos, de modo que no haya demasiadas aplicaciones simultaneas relativamente exigentes que puedan sobrecargarlos, pero que las que ejecuten lo hagan a la máxima velocidad.
Algo que creo que falta comentar en el artículo es que la propia gestión de los threads tiene un coste en rendimiento. Si tienes una tarea que llevaría un 40% en un core, por ejemplo, si se pudiese repartir el trabajo fácilmente entre dos cores identicos, estos podrían trabajar a un 25% (por poner algo), por el overhead que supone repartir el trabajo.
Lo ideal creo que sería pocos cores (o un monocore) lo más potentes posible y a la vez con gran flexibilidad en cuanto a frecuencias disponibles / gran velocidad de transición entre estas (un poco más o menos la estrategia del iphone), pero eso es más fácil decirlo que hacerlo. Porque lo mismo en pc, es mucho más fácil escalar potencia (aunque no esté disponible en un solo hilo) aumentando número de cores que aumentando complejidad de cpu y/o MHz. Además de que en PC sí hay aplicaciones capaces de aprovechar de manera muy eficiente cualquier número de cores que les eches a la cara, como servidores de bases de datos, por ej.
|
No opino para nada igual que tu y te lo voy a explicar copiando lo que ya dije en otro hilo diferente a este.
Primero: Mas núcleos no implica más potencia, ya que esto dependerá en gran parte de la arquitectura usada, frecuencias y otra serie de parámetros. Por ejemplo un i5 de 2 nucleos actual es mucho mas potente que un QuadCore de los de hace años por lo anteriormente descrito.
Segundo: Muchas veces he leido comentarios en distintos foros "Ponerle nosecuantos nucleos es una tonteria". Teniendo en cuenta el punto anterior mi opinion al respecto es que SI importan. En una CPU existe la multiprogramacion, es decir, la capacidad de ella de intercalar procesos para aprovecharla al máximo, pero esto no quiere decir que haga tareas en paralelo ya que para eso requiere el multiprocesamiento que es cuando se pueden lanzar varios procesos de forma simultanea y esto solo es posible con 2 o más nucleos. Teniendo en cuenta esto ultimo un procesador con 2 nucleos como máximo va a poder ejecutar 2 procesos en paralelo, uno con 4 podrá ejecutar 4 y así sucesivamente. "La sensación" de que un procesador con menos núcleos ejecuta más tareas simultaneas que uno con más nucleos no es real y depende en gran medida del planificador (lo tipico que cambiais muchos cuando se cambia el kernel como ondemand, intellidemand....) que es el encargado de decirle al kernel como se deben multiplexar los procesos.
Tercero: Más núcleos no implica más potencia pero si más eficiencia. Os pongo un ejemplo, ¿que es mejor tener 1 CPU funcionando a 4.0 Ghz o 4 nucleos funcionando a 1Ghz? Teniendo en cuenta el punto anterior esta comprobado que es mas eficiente tener 4 núcleos a una frecuencia más baja que 1 núcleo a una más alta por la posibilidad de multiprocesamiento. Además no es igual activar núcleos según se van necesitando que tener 1 sola CPU activa de mayor potencia en lo que respecta al consumo etc.
Por ejemplo yo desarrollo aplicaciones y sin ir mas lejos una que estoy desarrollando actualmente me viene bien para este tema. La aplicacion es una como tantas que podeis ver, twitter, instagram, hoteles etc basicamente se trata de que haces una llamada a un servidor y estas pueden ser consultas a base de datos para obtener información sobre determinadas cosas (perfiles de usuario, información sobre un hotel, ultimos comentarios de twitter...). Pues bien este tipo de llamadas se suele hacer mediante hilos o tareas asincronas las cuales en paralelo estan realizando estas operaciones y una vez finalizados realizan una determinada accion. ¿Por qué se debe hacer esto asi? Porque si no la app se puede bloquear. Por ejemplo una de las cosas que tengo que hacer es descargar un archivo ZIP y realizar una serie de operaciones, este archivo puede tener varios MB y si no lo hiciese a traves de hilos estaría metiendole sobrecarga al proceso principal y si la descompresión tampoco la hiciese mediante hilos y el archivo es grande el proceso principal puede llegar a bloquearse o incluso dar error y salir de la app. Una cosa de la que seguro estais muy habituados a ver es cuando enviais o recibis un archivo por whatsapp, en el que le dais y comienza a subir o descargar y os vais a hablar con otra persona o ha realizar alguna otra actividad, pues bien esto esta hecho tambien por hilos porque sino podria pasar lo anteriormente descrito. Cuando vais a ver una aplicación que visualiza una galeria de fotos es posible que tambien esté hecha por hilos (seria lo ideal) para que las fotos se vayan cargando de esa forma.
1 nucleo = no existe multitarea real pero si multiplexación de procesos.
2 o más nucleos = existe multiprocesamiento real de tantos procesos como nucleos existan.
Un procesador con de un solo nucleo NUNCA puede ejecutar 2 procesos a la vez y tener una CPU de por ejemplo 8Ghz es mucho peor que tener 4 CPUs a 2Ghz u 8 CPUs a 1Ghz. La suma de la potencia final es la misma pero permite multiprocesamiento y además posiblemente mas eficiencia. En 1 solo nucleo el planificador (hay muchisimos tipos) intercambia tan rapido los procesos que realmente crees que se estan ejecutando a la vez pero esto no es asi y esta demostrado que es mucho mejor varios nucleos con menos potencia que su equivalente en un unico nucleo.
Y por ultimo decir sinceramente que hay una sobrecarga de la multitarea cuando hay varios nucleos y por eso es mejor limitar la multitarea... Yo no se que concepto tienes por multitarea pero si has leido lo anterior creo que deja claro que cuantos mas nucleos disponibles mayor POSIBILIDAD de multitarea y por tanto mayor cantidad de procesos simultáneos que se pueden hacer. Y esto es dicho desde el punto de vista de rendimiento, desde el punto de vista energético (a igual arquitectura) es muy posible que sea mejor mas nucleos a menos frecuencia que lo contrario.
Por cierto cuando dices...
Cita:
Originalmente Escrito por danko9696
Algo que creo que falta comentar en el artículo es que la propia gestión de los threads tiene un coste en rendimiento. Si tienes una tarea que llevaría un 40% en un core, por ejemplo, si se pudiese repartir el trabajo fácilmente entre dos cores identicos, estos podrían trabajar a un 25% (por poner algo), por el overhead que supone repartir el trabajo.
|
Por qué asumes que el proceso se debe dividir si o si y eso produce overhead? No puede ser que ese nucleo se encargue de esa tarea y el resto de nucleos esten haciendo tareas del sistema operativo o de otras apps? Por que asumes que se tiene que dividir?
Como ha comentado el compañero comparando diversos procesadores con varias apps la misma app dependiendo del procesador usaba un numero de nucleos u otro, eso como es? pues porque los planificadores son los encargados de realizar estas acciones y si el planificador de la CPU fulanita esta enfocado a que un proceso con unas caracteristicas X lo reparta en 2 nucleos y la CPU benganita tiene un planificador que reparte los procesos de otra forma... No ves que eso no va en los nucleos sino en los planificadores? los nucleos son simples CPUS esperando a que alguien le diga QUE HACER y esto lo hace el planificador que redistribuye el trabajo entre ellos, si un tipo de planificador es mas o menos efectivo eso es otra cosa... Y no hay mejor ejemplo que lo que el propio compañero extrae del analisis y que cito:
Cita:
Originalmente Escrito por skullman
Se analizan después Youtube, Gmail y un par de juegos y la conclusión es que en ambas aplicaciones de Google no se llegan a usar todos los núcleos, y en los dos juegos analizados a penas se usan 4 núcleos de los ocho disponibles en un caso y UN SÓLO NÚCLEO estaba haciendo todo el trabajo en el otro juego en un micro Qualcomm de ocho núcleos, en un Qualcomm Snapdragon 801 de 4, sólo dos eran utilizados, y en cambio en un Mediatek, los cuatro disponibles eran usados.
|
En resumen: Tener el sistema dividido en núcleos (aunque sean muchos) en mi opinión es mejor por lo expuesto anteriormente y no por ello implica que consuma más que la mitad de ellos con el doble de velocidad de reloj. Los planificadores son los encargados de elegir qué núcleos usar y cual es su propósito por lo que ni va a consumir más batería ni otro tipo de cosas que se leen a veces.
No se si tu comentario esta realizado desde el punto de vista de aficionado a la tecnología o desde un punto de vista mas técnico, pero en caso de ser el segundo discrepo claramente con lo que opinas.
Un saludo.