hoy vamos a hablar sobre paralelismo y sus efectos sobre los MBA
en los tempranos 80 Danny Hillis desarrolló una arquitectura para una
computadora en paralelo a la que llamó la "máquina de la conexión"
a diferencia de las máquinas von Neumann tradicionales de las que estuvimos
hablando antes, no había un solo CPU, sino había miles de unidades de procesamiento
central, miles de procesadores de bajo costo y baja capacidad conectados todos
juntos, entonces qué es un procesamiento central? la idea era que cada uno de los
procesadores individuales podían representar un solo cálculo o un evento
él desarrolló el marco de trabajo conocido como Simple Instrucción para Múltiples
Datos, una de las formas de entenderlo es, imaginen que tienen un conjunto de datos
similares, distribuído por todas estas máquinas diferentes, estos procesadores
diferentes, no puedo decir máquinas porque están todos en una máquina
todos tienen datos levemente diferentes, pero uno puede enviar una instrucción sola
que será preguntada a todos los procesadores, manipulando estos datos que
son diferentes en la misma forma. Hillis fundó "Thinking machines" para poder
comercializar este producto
El problema es que esta noción de máquinas paralelas, procesarores paralelos son muy
pero muy difíciles de programar, nosotros hacemos como que actuamos en máquinas
paralelas, nuestro cerebro se prende en llamas en formas paralelas y nos gustaría
pensar en una forma lineal, en una forma secuencial
uno tiene que percatarse de que hay lenguajes especiales que permiten
programar estas máquinas, para finales de los 80 aparecieron lenguajes como StarLisp
and C-Star, desarrollados para programar las máquinas de conexión, lo que se
llamaba la máquina de conexión; de hecho el CM-2 tiene 65536 procesadores
individuales, los datos se distribuían por todos los procesadores y como efecto de
ello, hay muchas cosas que involucraban muchos conjuntos de datos, y eso era algo
que era sencillo de hacer con estas máquinas, por ejemplo la recuperación de
documentos; imaginen 56 mil documentos, tienen estos procesadores, un solo
documento que están buscando, le dicen a estos procesadores que cuenten el número
de veces que la palabra "conexión" aparece en estos documentos
uno puede extraer el documento que posee el mayor número de ocurrencias de la
palabra "conexión" de manera muy rápida con este sistema, mucho más veloz que con
un solo procesador
lo mismo con el reconocimiento de objetos, trabajando con gráficos en vez de texto
es muy útil para cosas como los autómatas celulares, debido a que los autómatas
celulares pueden leer los estados de entrada de sus vecinos, actualizar esos
datos y enviar salidas
de hecho StarLogo, del que uno puede pensar como una forma temprana de MBA
fue escrito en StarLisp y utilizaba estas mismas nociones, de hecho influyó en la
forma de desarrollo en la que trabajaron otros MBA que andan por ahí
qué tiene que ver la programación paralela con los MBA? tenemos esta idea, tenemos
muchos, muchos diferentes entidades que tienen todas sus propias computaciones
individuales y muchas veces los MBA tienen como objetivo pensar en ellos como
entidades paralelas que actúan y aún en el final lo escribimos todo desde un punto de
vista secuencial, en muchos sentidos, el paralelismo nos da una noción que emerge
de pensamientos donde uno puede crear un MBA con esta idea de que las cosas pueden
suceder en forma simultánea
dentro de esta discusión interesante, las diferencias entre sincronización y no
sincronización, paralelismo o secuencia y así; haremos una pequeña inmersión en uno
de los modelos que muestra un poco las diferencias que están ahí, y que es el
modelo de las termitas en NetLogo, vamos a hablar un poco de ello
El paralelismo tiene múltiples efectos en nuestros pensamientos, en como construir
los MBA, aún cuando haya muchas plataformas diferentes de MBA que son
seriales
Aquí tengo el modelo de las termitas, que está en la biblioteca de modelos de
NetLogo, bajo "Biología", "Termitas"
este modelo muestra algunas características, uno de los ejemplos que
tratan de hacer que las tortugas actúen como si estuvieran operando en paralelo y
por eso creo que es importante hablar un poco de ello. Si lo notan,
este botón tiene un pequeño símbolo acá arriba
que es una tortuga pequeña como indicador y esto es porque el observador no está
ejecutando el "go" en este caso, en vez es la tortuga la que va a ejecutar, es la
tortuga, es un botón de tortuga como distinto de un botón de observador
si miramos el código
tiene en verdad a cada una de las tortugas como ejecutoras del código, es casi como
si estuviera haciendo un implícito "ask" para cada una de las tortugas
de hecho los botones, cuando lo hacemos de esta forma es similar a hacerlo en forma
concurrente, cada una de estas, el modo en que trabaja este mundo es que cada una de
las tortugas pueden tener un orden aleatorio para ejecutar una pieza de este
código hasta que cambian o actualizan el mundo que las rodea y es cuando pararán
y pasarán el control a otra tortuga, que será la siguiente y ésta pasará el control
hasta que todas las tortugas ejecuten los tres comando estos y volverá a empezar
cuando clickeamos en "setup" y luego "go"
no es en verdad obvio que algo diferente está sucediendo excepto por que se pone un
poco más lento, notamos que cada tortuga no ejecuta completamente todos los
comandos hasta que la próxima ejecución
este modelo está realmente operando en una forma simulada concreta, si lo aceleramos
un poco y lo corremos, qué es lo que hace? lo que hace, si aplicamos el "setup"
pueden ver que cada tortuga empieza en blanco, si levantan una pieza de madera
amarilla la llevan hasta que puedan encontrar otra pieza, otro lugar donde
dejarla y cuando la dejan la dejan y lo que sucede es que estas piezas empiezan a
acumularse unas al lado de otras; esto se debe a que las termitas dejan las piezas
en el primer lugar que encuentran, luego de que la levantaran y la transportaran
hasta donde la dejarán
si miramos el código, tenemos el "search- for-chip", si hay un parche amarillo acá
levantalo, pintá el parche de negro, avanzá 20 pasos, luego zigzagueá y empezá
a buscar nuevamente
perdón, si no es el parche amarillo entonces zigzagueá y buscá el pedazo, así
continua buscando
y luego vemos "find-new-pile" donde si el parche no es amarillo, en otras palabras
no estoy en una pila, entonces zigzagueo y trato de encontrar una nueva pila
y así mantenemos, si tenemos un pedazo
nos mantenemos moviendo hasta que hallemos un nuevo pedazo
luego dejamos el pedazo donde encontremos un espacio vacío
uno podría decir, este código es un poco confuso, ya que "search-for-chip" llama a
"search-for-chip", las tortugas están entrando en un bucle infinito, pero
recordemos, estas tortugas están operando concurrentemente, no se están esperando
esta tortuga puede quedar atrapada en el código por un rato, mientras que otras van
para adelante y por tanto comparten el código muchas veces, se actualizan a
través de todos los comandos muchas veces todos juntos. Entonces las tortugas pueden
estar en diferentes estados en distintos tiempos, antes de completar el círculo
completo de lo que está ocurriendo allí; no están esperando que el otro haga algo
en un orden secuencial
esta es una pieza de código muy interesante, vale la pena más que modelos
más tempranos de NetLogo y realmente va atrás con algunos de los trabajos de 1997
yo les recomiendo que los vean si están interesados en como hacer programación en
paralelo
de hecho si miran
acá dice que la tortuga sigue moviéndose por un tiempo, porque están terminando los
comandos y así se mantienen corriendo, no avanzan hasta que terminan todo
entonces si clickeamos en "setup" y en "go", podemos ver que sucede esto, podemos
hacerlo más lento, avanza y se frena y aún se mantiene corriendo
por un rato, porque tiene que dejar que todas terminen, por lo menos una vez
es una pieza de código muy interesante, es muy diferente, es un paradigma diferente
que los otros modelos de NetLogo
gracias