¿Por que es mas dificil programar sofware que aproveche el potencial de los procesadores multinucleo

yo también quisiera saber más del tema.

Hasta donde sé, la programación hoy en día es estructurada y no se implementan hilos para aprovechar este tipo de procesadores, aunque ya están empezando a aparecer varios programas que aprovechan la potencia de estos, pero por lo general son software especializado.

Creo que se debería empezar a replantear el paradigma de programación actual y encaminarlo al aprovechamiento del Hardware ya que éste está avanzado a pasos agigantados con relación al Software.
 
Sin ser experto en el tema, las nociones que tengo es que:

En una arquitectura de 1 solo nucleo un programa se corre a la vez, y el OS va dando el turno para el proceso a ser procesado.

Abstracto para usar de verdad una arquitectura de n nucleos: Toca decirle a cada procesador que hacer y toca saber que esta haciendo cada procesador.

Creo que los hilos es delegar tareas/procesos específicos a un procesador, sin lograr el aprovechamiento de una arquitectura de n nuclos de verdad.
 
Kurai dijo:
Creo que se debería empezar a replantear el paradigma de programación actual y encaminarlo al aprovechamiento del Hardware ya que éste está avanzado a pasos agigantados con relación al Software.

Exactamente. Para aprovechar el hardware multinúcleo, los algoritmos deben ser distintos. Además, aparecen nuevos problemas (sincronización entre hilos, por ejemplo). Por otro lado, no existe un compilador que rehaga un algoritmo y lo vuelva multi-hilo en su forma óptima.

Programar para múltiples núcleos es más difícil porque requiere una nueva forma de pensar. Si tenemos en cuenta la cantidad de código que se reutiliza hoy en día, podemos ver que las conversiones desde -o casi desde- cero son algo muy costoso (si funciona, no lo arregles >D). Sin embargo es de esperar que con el tiempo, el nuevo paradigma se imponga. Por ejemplo, el software especializado del que hablas, proviene de gente que se tomó la molestia.

NSlaver dijo:
Creo que los hilos es delegar tareas/procesos específicos a un procesador, sin lograr el aprovechamiento de una arquitectura de n nuclos de verdad.

Bueno, en realidad, los hilos no se asignan a un procesador/núcleo en particular, sino que se ejecutan en el primero que esté disponible, y de eso se encarga el sistema operativo. Y ciertamente, un programa multi-hilo va a aprovechar al máximo cualesquiera N núcleos presentes en un sistema, y va a rendir mejor, incluso si N=1. =)
 
El que se encarga de la distribucion de los nucleos es el planificador del SO, el problema es que si se repite un proceso o programa el decide de que forma distribuirlo. Lo que pasa cuando se intenta hacer aplicaciones multihilo es que pasan muchos problemas como que un hilo se quede esperando una variable que usa otro hilo, que los dos hilos sobrescriban una variable al mismo tiempo quedando el planificador como el que decide cual hilo ejecuta primero, o que los hilos se queden infinitamente modificando una variable. De lo que recuerdo son deadlock, inanicion los terminos que se usan para describir estos problemas de los hilos.

Otra alternativa son los semaforos que tambien son utiles, pero en el momento de escribir el codigo hay que tener mucho cuidado con los problmas que explique anteriormente, ademas la complejidad tambien aumenta lo que puede provocar programas demorados, lo que se intenta es dejar la complejidad de un programa muy similar a un programa lineal para que sea optimo su funcionamineto.

Aunque los hilos, semaforos o usar el fork (en linux), son alternativas muy buenas para algunos tipos de problemas, el cambio de la manera de pensar a la hora de escribir el codigo es algo complejo, y en aplicaciones de grandes lineas de codigo el diseño se complica al extremo. Aveces es mejor no reinventar la rueda y si conseguimos pedazos de codigo que con baja complejidad logran cumplir con la tarea es mejor usarla y no hacer una alternativa multihilo.
 
...el cambio de la manera de pensar a la hora de escribir el codigo es algo complejo, y en aplicaciones de grandes lineas de codigo el diseño se complica al extremo.

Es verdad lo que dices, pero ten en cuenta que todo cambio trae complicaciones, para eso existen técnicas de ingeniería del software y técnicas de programación que bien aplicadas nos permiten desarrollar Software de calidad y adaptado a las necesidades.

Aveces es mejor no reinventar la rueda

Es que no se trata de reinventar la rueda, se trata de mejorarla.

y si conseguimos pedazos de codigo que con baja complejidad logran cumplir con la tarea es mejor usarla y no hacer una alternativa multihilo.

Con lo que planteas nos estaríamos estancando, y no se trata de eso, si el Hardaware está avanzando a pasos agigantados, ¿por qué no adaptar el software para el aprovechamiento de este?

La humanidad ha demostrado ser muy inteligente y recursiva a la hora de enfrentar problemas y no creo que este sea el caso en que no podamos encontrar solución.
Ya verás que con el tiempo el paradigma cambiará.
 

Los últimos temas