Ver Mensaje Individual
  #5  
Viejo 20/01/16, 23:14:46
Array

[xs_avatar]
Soytudios Soytudios no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Localización: Cordoba
Mensajes: 2,903
Modelo de smartphone: S7 Edge
Tu operador: Pepephone
 Cita: Originalmente Escrito por danko9696 Ver Mensaje
- Primero: de acuerdo.
- Segundo: yo no he dicho que sea una tontería. Yo lo que he dicho es que en un mundo ideal sería mejor menos nucleos más potentes que muchos nucleos poco potentes.
- Tercero: también estoy de acuerdo que más nucleos implica más eficiencia en la práctica. Pero ¿que pasaría si pudieses escalar hacia abajo esos 4GHz sin latencia ni otros problemas acuerdo a la demanda, que de repente pudieses bajar de 4GHz a 50MHz si se diese el caso?. ¿Que diferencia teórica habría entre un procesador de 4GHz que ha bajado a 1.5GHz y otro procesador de 4 nucleos a 1GHz con uno al máximo, dos desactivados y otro a la mitad?. Entiendo que depende de lo que esté ejecutando, pero a primera vista no veo mucha.

Y dandole la vuelta a la tortilla ¿que pasa si usas una aplicación muy exigente (como un juego) con un thread principal muy hambriento y el resto para llevar cosas secundarias?. Si el thread principal, el que va a limitar en la práctica el rendimiento del juego corre a 1GHz, irá peor que si corre a 4GHz, donde sí va a serle más fácil aprovechar el potencial de la cpu. Naturalmente ahí influye mucho el tipo de tarea, según sea más fácil o más difícil de dividir en subtareas (por eso yo mismo he puesto antes un ejemplo de tarea que puede aprovechar al máximo cualquier cantidad de cores).

Mi razonamiento es que el de 4GHz es mejor en principio pero que por motivos de ingeniería es más sencillo (o no sencillo sino barato, con componentes de mayor calidad) integrar más nucleos para aumentar potencia que aumentar las frecuencias indefinidamente, y entiendo que el problema reside más bien en problemas de ingeniería y costes que hacen mucho más viable integrar múltiples cores antes que tener cpus de 8+ GHz en un móvil, 8GHz que además no escalarían tan bien hacia abajo bajando frecuencias como múltiples cores donde puedes jugar tanto con la activación/desactivación de estos para mejorar la eficiencia energética, un poco como las marchas de una bici.

Y en la práctica, aunque más cores tengan ventajas tambienen desventajas. Vuelvo a repetir el ejemplo del iphone. Limita el multitarea y sé que no es una comparación muy justa, pero es una muestra de que montones de cores no son imprescindibles.
Compañero, creo que te estás liando. Estás comparando los núcleos en potencia simplemente en GHz, y ese es tu principal fallo. Me explico:

Un núcleo puede tener 1GHz por ejemplo velocidad máxima de procesamiento, pero aquí lo que cuenta es la energía. Si como bien dices tienes un procesador de un núcleo a 4GHz y otro de 4 núcleos a 1GHz, en total parece que tienes la misma velocidad (aunque por la paralelización, el de más núcleos tendrá mejor rendimiento y luego te explicaré porqué), pero lo que cuenta es que en el caso del núcleo de 4GHz, necesita para estar trabajando a esa velocidad un determinado voltaje, mientras que los núcleos de 1GHz necesitan bastante menos voltaje aunque estén trabajando al 100% de capacidad también.

Ese es el primer punto de las ventajas de los multinúcleo, el ahorro energético que suponen frente al los mononúcleo. Ahora, como puse antes, te voy a explicar porqué un procesador con varios núcleos puede trabajar mejor que uno de un sólo núcleo aunque tengan la misma potencia en conjunto.

Como imagino que sabrás por lo que has comentado antes, existe un planificador que se encarga de asignar un determinado proceso a un núcleo y que éste se ejecute. Las tareas de planificación son muy importantes en el trabajo de una CPU, pudiendo llegar a tener un gran impacto en el rendimiento del mismo. Con un procesador de un sólo núcleo, se dispone de un planificador con una sola cola de ejecución (por simplificarlo un poco, porque en realidad hay varias colas para varios estados de los procesos). Eso quiere decir que el planificador va cogiendo procesos que necesitan uso de CPU y los va añadiendo a la cola para ser ejecutados y la CPU se encarga de ir cogiendo un proceso en la cola, ejecutarlo, coger el siguiente, ejecutarlo, etc...

Bien, aquí es donde viene la clave. En un procesador multinúcleo cada núcleo dispone de su propia cola (colas en realidad), y el planificador es más complejo, pero digamos que su trabajo es el mismo, se encarga de poner un proceso que necesita CPU en una cola de ejecución. Al haber varios núcleos y varias colas, el planificador decide a qué cola puede añadir el proceso. Por ejemplo, puede añadir el proceso a la cola que esté menos llena, y así el proceso se podrá ejecutar antes que si lo añade a una cola que ya tiene bastantes más procesos. Eso es sólo un ejemplo, porque el planificador multinúcleo es muy complejo y tiene muchos parámetros en cuenta, como por ejemplo la energía, de manera que puede poner un proceso en un núcleo con varios procesos ya en cola antes que despertar un núcleo que está dormido y podría ejecutarlo al instante dado que eso supondría menor coste energético.

Sobre lo que apuntas de un juego que tenga mucha carga en un thread, vuelves a estar equivocado al pensar que eso hará que un núcleo esté trabajando a tope, uno a medias y otro dormido, la cosa no va así. Un thread, por mucho procesamiento que requiera por parte de la CPU, al fin y al cabo se divide en operaciones de ensamblador digamos (mejor no entrar a hablar del código máquina) por lo que por mucha carga que implique lo que está haciendo, cada una de esas operaciones se puede estar ejecutando en un núcleo distinto si se diera el caso de todas son paralelizables, las que no lo son, aún así, pueden ejecutarse en un núcleo distinto al que se ejecutó la operación inmediatamente anterior. Cuando un proceso ejecuta en CPU, no es que se le asigne para siempre esa CPU.

Un proceso digamos que tiene que ejecutar una operación que dura 100 ciclos de reloj, y el procesador digamos que tiene un quanto de 50 ciclos. Eso quiere decir que cuando el proceso se esté ejecutando, cuando lleve 50 unidades de tiempo, aunque le queden otros 50 por ejecutar, el procesador lo expropiará, lo pondrá a disposición del planificador (que se encargará de pasarlo a la cola de ejecución) y pasará a ejecutar otro proceso de la cola. Cuando le vuelva a tocar al proceso de antes, empezará por donde lo dejó dado que cuando lo expropió guardó todo su espacio de trabajo en ese momento.

Espero que con todo ese tocho te haya quedado claro como funciona el multiprocesamiento y la multiplexación de procesos y haya resuelto tu duda de los juegos que requieren mucha CPU.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a Soytudios su comentario: