Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
He leido que AMD tendrá procesadores de 12 núcleos en el 2012, Intel vá más allá y prevé procesadores con miles de cores.
Por otro lado los sistemas operativos y lenguajes de programación no están especialmente pensados para trabajar con estos micros (windows no soporta más de cuatro, linux parece que se salva), y lo peor es que los programadores que a duras penas pueden estar al día con la evolución actual, pueden quedar todos obsoletos de golpe. Es duro esto ¿no?
Yo ante esto, mientras se arregla el follón propondría tratar de hacer una red inteligente: consiste en hacer ejecutables que se comuniquen entre sí por tcp-ip, así varios ordenadores corriendo programas de inteligencia artificial podrían compartir información. No hace falta que corran el mismo programa, puede ser que cada programador haga correr el suyo a ver cual es mejor concentrando información. El fin último es alimentar el sistema con ciertas acciones y que el sistema empleando inteligencia distribuida trate de averiguar por interpolación el resultado. Los programas que den un resultado más acertado ganan puntos, los demás mueren (selección natural)
Cada ejecutable es una neurona, pudiendo haber más ejecutables que núcleos.
Un ejecutable centralizado "evalúa el sistema", asignando puntos o matando neuronas inservibles.
Ahora bien ¿podrían varios programas corriendo en un mismo PC intercambiar información por tcp-ip como si pertenecieran a redes externas?
fusion, cuando te metes en esos niveles puedes hacer hardware con el software y software con el hardware... no se si me explico...
Si no lo soporta creas un interface virtual comunicando con el otor programa con otro interface. En principio creo que funcionaria... es una llamada a localhost ¿no?
He leido que AMD tendrá procesadores de 12 núcleos en el 2012, Intel vá más allá y prevé procesadores con miles de cores.
Por otro lado los sistemas operativos y lenguajes de programación no están especialmente pensados para trabajar con estos micros (windows no soporta más de cuatro, linux parece que se salva), y lo peor es que los programadores que a duras penas pueden estar al día con la evolución actual, pueden quedar todos obsoletos de golpe. Es duro esto ¿no?
Están obsoletos desde hace años, no es duro, es una realidad.
Por cierto, te olvidas de Mac... y ¿quién te ha dicho que windows no soporta más de cuatro núcleos? eso no es cierto.
Yo ante esto, mientras se arregla el follón propondría tratar de hacer una red inteligente: consiste en hacer ejecutables que se comuniquen entre sí por tcp-ip, así varios ordenadores corriendo programas de inteligencia artificial podrían compartir información. No hace falta que corran el mismo programa, puede ser que cada programador haga correr el suyo a ver cual es mejor concentrando información. El fin último es alimentar el sistema con ciertas acciones y que el sistema empleando inteligencia distribuida trate de averiguar por interpolación el resultado. Los programas que den un resultado más acertado ganan puntos, los demás mueren (selección natural)
Cada ejecutable es una neurona, pudiendo haber más ejecutables que núcleos.
Un ejecutable centralizado "evalúa el sistema", asignando puntos o matando neuronas inservibles.
Ahora bien ¿podrían varios programas corriendo en un mismo PC intercambiar información por tcp-ip como si pertenecieran a redes externas?
Sí que se podría, con máquinas virtuales por ejemplo... pero eso consume muchísimos recursos, ¿qué más te da que pertenezcan a redes externas o internas? no hay diferencia alguna.
En cuanto a multitud de núcleos... ¿te suena la tecnología CUDA de Nvidia? con eso ya consigues a día de hoy cientos de núcleos 😉
Una alternativa bastante trillada ya al problema que planteáis es el uso de grid.
Hoy día ya existen grids operativos, el más importante quizá el del CERN en Suiza, sin embargo existen multitud de universidades que ya los usan en el día a día para compartir tiempo de computación entre maquinas remotas a través de redes TCP/IP.
Puede ser interesante realizar lo que propone fusión usando un grid a nivel local, es decir, montar un grid local entre los distintos núcleos hábiles del procesador(hay que recordad que suele ocurrir que no todos los núcleos están accesibles a todas las tareas en los procesadores superescalares) utilizando la tecnología grid ya existente, de manera que se hiciera transparente al sistema operativo y permitiera el aprovechamiento eficiente de recursos.
Si bien, creo que el principal problema no vaya a ser gestionar los recursos de los diferentes núcleos, sino más bien los accesos de memoria, tanto de la caché como los accesos a memoria principal, que hoy día traen de cabeza a la gente que trabaja en arquitectura de computadores.
Interesante el tema que se ha abierto y las posibles soluciones que planteáis(y supongo que se plantearán), ...muy interesante
Vaya! vaya! Parece que alguien está sacando petroleo de las cosas que le cuento sobre programación distribuida y algoritmos evolutivos y enlazandolas entre ellas... jejeje 🙂
Es bueno saber que uno es de utilidad!
Luison, No te hace falta irte a virtualizadores ni muchos menos. Es más, me da que un core2Duo podría mover varias decenas de miles de neuronas, aunque claro, habria que probarlo...
La gran ventaja del sistema de conexion de neuronas por medio es que podrían estar trabajando en varios ordenadores y compartiendo información con un nivel de eficiencia bastante razonable.