Cuanto nucleos se necesitan para multihilo?

Hola amigos tengo una duda: una aplicacion normal de un hilo puede correr en cualquier procesador, pero una aplicacion de 2 hilos, necesita si o si 2 nucleos? Si es asi, donde corre el sistema operativo? Habria que tener un procesador de 4 nucleos?

Actualmente los procesadores son RISC o CISC?, siempre me dicen que las funciones complejas se deben programar como llamadas a otras funciones mas sencillas?

Gracias de antemano
El S.O. y los programas no corren de forma exclusiva sobre una sola cpu, a ver como lo explicamos.

El SO gestiona las diferentes aplicaciones, servicios, etc... y los "pasa" al procesador de forma alternada según las necesidades. No es que una cpu se dedique exclusivamente a un solo hilo, sino que ejecuta varios de forma concurrente. Es decir: Ahora un servicio, luego otro, luego otro, luego una apliación... y no hasta que finaliza, sino repartiendo el tiempo de proceso de diferentes programas y servicios.

Tema diferente es cuantos "procesadores" tenga una cpu... desde mononucleo a varios, incluyendo aquellos que pueden incluso ejecutar nucleos virtuales

http://es.wikipedia.org/wiki/HyperThreading

Es de lógica el ver que un programa o proceso no puede acaparar completamente todo el tiempo de una cpu.
1 núcleo.

Puedes ejecutar 300 hilos en una misma cpu con un único núcleo, repartiendo tiempo de cpu.
Lo que no puedes hacer es lo contrario, usar más de un núcleo en un programa con un único hilo (sin multihilo).
Entonces el SO donde se encuentran sus instrucciones, en la RAM se carga al encender, pero lo ejecuta el procesador?

Si repartimos el tiempo de CPU entre varios hilos en 1 nucleo, entonces no se justifica programar multihilo, porque se ejecuta 1 solo. Si quisiera programar un nucleo por hilo no podria entonces....
El programar en multihilo si que tiene sentido, porque pocos son ya los procesadores de un solo nucleo. Dos, cuatro, ocho... la mayoría de las cpu´s ya llevan mas de un nucleo, por lo tanto si que tiene sentido.
Orbatos_II escribió:El programar en multihilo si que tiene sentido, porque pocos son ya los procesadores de un solo nucleo. Dos, cuatro, ocho... la mayoría de las cpu´s ya llevan mas de un nucleo, por lo tanto si que tiene sentido.

Efectivamente, el sentido lo tiene porque es una forma de escalar el rendimiento, una cpu puede ejecutar todos los hilos del mundo, pero va a tener que repartir su tiempo y por tanto dedicarles menos a cada hilo. Con más cores se reparten los hilos y se trabaja en paralelo, ganando más rendimiento.

El multihilo se usa básicamente para explotar el diseño multicore de las cpus actuales (y anteriores, no es nada nuevo), no hay problema en ejecutar un programa en cpus con un core, sólo el problema de que puede ser insuficiente para los requisitos del programa (que normalmente si se diseña en mulihilo, es por razones de rendimiento, a veces porque puede ser más "evidente" la progamación multihilo para solucionar problemas concretos de progamación, etc).

El problema en las cpus multicore está en que no es fácil escalar bien el rendimiento cuando existen muchos hilos "heterogéneos" creados por la aplicación (caso típico, juegos), con muy distintas cargas de trabajo y la tendencia a existir pocos hilos realmente pesados. Es más fácil en el caso de programas con "hilos homogéneos" para realizar una tarea, como puede ser el renderizado 3D, vídeo, etc. Tareas que puede dividirse mucho un tipo de trabajo y además con balances de carga similares.

Pero aún así, cuantos más cores, más difícil usarlos eficientemente.
Como te dicen una aplicación multihilo se puede ejecutar sobre un procesador de un solo núcleo. Yo el año pasado en clase hice una práctica en la que hicimos un programa que iba creando hilos y ejecutando un cálculo en cada uno y mediados el tiempo que tardaba. Con un solo hilo el tiempo era bastante alto, con dos bajaba a la mitad aproximadamente, con tres parecido, el problema venia que llega un momento en el hay tantos hilos que al cambiar de uno a otro se pierde más tiempo del que se gana al dividir la tarea con lo que el tiempo llegaba a ser superior al que tenia con un solo hilo. Lo que quiero decir es que muchos hilos no tiene porque significar más rendimiento.
Respondiendo a la pregunta que dejabas en el aire, los procesadores actuales, arquitectura x86, son CISC.

Casi todos los procesadores de los móviles, que usan arquitectura ARM, son RISC, pero eso no quita que puedan tener varios núcleos y una potencia respetable.

Por otro lado, lo que te han comentado es correcto, con 1 núcleo lo suficientemente rápido, se pueden ejecutar, sobre el papel, tantos hilos como se quieran. Aunque en la práctica, depende de como decidan implementarlo (es decir, si implementan MAL todo este tema de correr en varios núcleos), puede no ser cierto. Por poner un ejemplo, el Battlefield 3 con un núcleo ni siquiera llega a arrancar: http://www.tomshardware.com/reviews/bat ... 63-13.html

Saludos
Los procesadores x86-64, que son los que enucnetras en una PC con windows o macos, ya no son puramenmte CISC, ya que son hibridos entre SISC y RISK.

Ahora puramente en un solo nucleo CISC no puedes correr hilos simultaneos, solo alternados, asi como ya te explicaron; y al contrario, en un nucleo RISK se pueden correr hilos simultaneos, es decir, corriendo al mismo tiempo.

Ahora, como te decia, actualmente la arquitectura x86-64 ya no es puramente CISC, con lo que si usas cierto tipo de instrucciones puedes hacer que un nucleo x86-64 pueda correr 2 hilos simultaneos [o al menos lo mas parecido].

Todo el software, sea de sistema [p.e. el sistema operativo] o de usuario [p.e. word, excel, firefox, etc.] corren en el procesador, datos y resultados de esos datos que crean y usan los programas estaran en la RAM, para despues ser usados por el procesador.

Respondiendo finalmente a tu pregunta: ¿Cúantos núcleos se necesitan para multihilo?, la respuesta es: Minimo uno. adelantandome un poco a tu posible pregunta, ¿Entonces porque hay procesadores con mas de un nucleo?, la respuesta es: Porque entre mas nucleos se pueden repartir diferentes hilos, donde tales hilos no necesariamente tienen que estar vinculados para la misma tarea, sino que pueden ser hilos de aplicaciones diferentes, asi puedes tener una aplicacion que este realizando tareas de computo muy intensivo y dificiles sin perder tiempo esperando a que el nucleo se desocupe ypor ende terminar ants su tarea, y mientras tanto en otro nucleo estar hilos de otras aplicaciones no tan importantes. Y cuando se da el caso de que el programa esta programado para el multihilo y tyareas en paraelo, entonces cada nucleo puede realizar una de estos hilos, haciendo mas eficiente el trabajo.
Conste que posteo bajo coacción pero... no puedo evitarlo
Imagen
Pollonidas escribió:Conste que posteo bajo coacción pero... no puedo evitarlo
Imagen


GRANDE SISC FABREGAS
Todo esto sin tener en cuenta un detalle, y es que las cosas no son tan simplonas como "1 hilo sistema operativo, otro para el programa"... no, el propio sistema operativo tiene en todo momento montones de procesos en marcha, incluyendo programas, servicios, etc... estos pueden estar funcionando o "en espera" de que se les asigne un hilo. Un sistema operativo moderno saca ventaja (y mucha) de que haya varios nucleos en ese sentido.

Sin ir muy lejos, ahora mismo, solo con un cliente bt y el chrome mi sistema tiene 79 procesos y 60 servicios corriendo, y los 4 nucleos (8 virtuales) los veo funcionando ligeramente de forma bastante constante.

Obviamente, no es lo mismo repartir 79 procesos entre 1 cpu que tiene 1 nucleo y es monohilo, y una que tenga 8 nucleos (aunque sean virtuales).

Miralo como una persona que puede hacer varias tareas, pero solo una cada vez. Puede ir saltando de tarea en tarea hasta terminarlas todas, pero si son 4, 8 o mas personas las que se reparten esas tareas, obviamente terminarán antes.
11 respuestas