Cita:
Iniciado por Defero.tk Muy interesante este tema. Si no he entendido mal cómo funciona lo de la paralelización de procesos en sistemas multi-núcleo, que el kernel soporte paralelización es útil, pero no resuelve por completo la papeleta, ya que las propias aplicaciones deberían también incluir la posibilidad de procesar en paralelo. Me explico: por mucho que el kernel sea capaz de repartir procesos entre distintos procesadores, si abro OpenOffice y éste no es capaz de "dividir" un proceso y servírselo al kernel como dos procesos, éste no se repartirá entre los dos núcleos (corregidme si he dicho una burrada).
Hum, no está relacionado. El kernel de Linux (como la mayoríad e sistemas operativos multitarea) pese a que tenga un sólo procesador, debe permitir a los procesos bifurcarse.
En Linux, una de las maneras es fork(), para crear hilos; o en Windows para crear procesos CreateThread()... Son ejemplos.
Que el kernel sea SMP, quiere decir que es capaz de repartir los procesos/hilos entre los distintos procesadores sin que se arme un follón.
Cita: En ese caso, con aplicaciones incapaces de separar procesos, un procesador de doble núcleo sólo resultará útil cuando estemos ejecutando varias aplicaciones, pero no cuando estemos ejecutando una sola aplicación muy gorda. Si nos ponemos a comprimir vídeo (una tarea que requiere bastante capacidad de proceso), si el programa que se encarga de la compresión no es capaz de dividirlo en varios procesos, uno de los núcleos del procesador estará inactivo mientras el otro asume por completo la tarea de la compresión del vídeo.
Normalmente los programas que hacen tareas "gordas" vienen preparados (cómo no, es algo básico) para dividir las tareas.
En cualquier caso, si no lo está, siempre será mejor tener un núcleo dedicado a eso y el otro núcleo al resto (que es mucho si tenemos muchos procesos); evitando cambios de contexto al que realiza la tarea compleja, y por tanto, incrementando la velocidad de procesado de la tarea gorda y manteniendo pese a ello la respuesta del equipo.
Cita: Recuerdo haber leído que sí que hay aplicaciones capaces de aprovechar la capacidad de procesamiento en paralelo de los procesadores multinúcleo.
Hay varias maneras de hacerlo. La más rudimentaria es dividir la aplicación en varios hilos o procesos y esperar que el kernel se de cuenta de que trabajan mucho y debería separarlas. Mejor es inidicárselo tú mismo; y para mi gusto, lo mejor es utilizar algún estándar como OpenMP dedicado precisamente a hacer de manera "elegante", fácil y portable las tareas que requieran de paralelización.