La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Lenguaje Linda Leonardo Rey Emiliano Riccialdelli Federico Mobrici.

Presentaciones similares


Presentación del tema: "Lenguaje Linda Leonardo Rey Emiliano Riccialdelli Federico Mobrici."— Transcripción de la presentación:

1 Lenguaje Linda Leonardo Rey Emiliano Riccialdelli Federico Mobrici

2 Introducción Fue desarrollado en 1983 en la Tesis Doctoral de D. Gelernter (Univ. New York) Fue desarrollado en 1983 en la Tesis Doctoral de D. Gelernter (Univ. New York) Es un lenguaje de programación paralela basado en C (C-Linda) y Fortran (Fortran-Linda) Es un lenguaje de programación paralela basado en C (C-Linda) y Fortran (Fortran-Linda) Crea programas paralelos Crea programas paralelos Está basado en un modelo de memoria virtual compartida, llamado Tuple Space (TS) Está basado en un modelo de memoria virtual compartida, llamado Tuple Space (TS) Este provee seis funciones para la coordinación de procesos concurrentes Este provee seis funciones para la coordinación de procesos concurrentes

3 Introducción La única forma de comunicación es a través del espacio de tuplas compartidas La única forma de comunicación es a través del espacio de tuplas compartidas Solo se necesita aprender las primitivas Linda para agregar concurrencia al lenguaje con el que se está programando Solo se necesita aprender las primitivas Linda para agregar concurrencia al lenguaje con el que se está programando

4 Definiciones Básicas Tuple Space (TS): Es el nombre que le da Linda para su espacio de datos compartidos Tuple Space (TS): Es el nombre que le da Linda para su espacio de datos compartidos Tuplas: Es la estructura fundamental de datos del Tuple Space Tuplas: Es la estructura fundamental de datos del Tuple Space Representación de una tupla: Representación de una tupla: ("tag", value1,..., value-n) Ejemplos: Ejemplos: ("arraydata", dim1, 13, 2) ("array sections", a[0], a[8])

5 Definiciones Básicas Existen dos tipos de tuplas: Existen dos tipos de tuplas: Las tuplas Activas: Contienen al menos un valor que todavía no a sido evaluado. Las tuplas Activas: Contienen al menos un valor que todavía no a sido evaluado. Ejemplo: Ejemplo: (factorial, 7, fac(7)) (factorial, 7, 5040) (factorial, 7, fac(7)) (factorial, 7, 5040) Las tuplas Pasivas: Todos los valores ya han sido evaluados. Las tuplas Pasivas: Todos los valores ya han sido evaluados. Ejemplo: Ejemplo: (factorial, 7, 5040); (factorial, 7, 5040);

6 Operaciones Básicas Tiene 4 operaciones básicas: Tiene 4 operaciones básicas: Generación de tuplas Generación de tuplas out : Genera una tupla (tupla pasiva) de datos out : Genera una tupla (tupla pasiva) de datos Ejemplo : Ejemplo : out(array data, dim1, dim2) eval : Genera una tupla proceso (tupla activa) eval : Genera una tupla proceso (tupla activa) Ejemplo : Ejemplo : En C : eval("test", i, f(i)) En Fortran : eval('test', i, f(i))

7 Operaciones Básicas

8 Extracción de Tuplas: Extracción de Tuplas: In : Usa un template para devolver tuplas desde el TS. In : Usa un template para devolver tuplas desde el TS. Ejemplo: Ejemplo: in("arraydata", ?dim1, ?dim2); in("arraydata", ?dim1, ?dim2); rd: Usa un template para copiar información sin removerla del TS rd: Usa un template para copiar información sin removerla del TS Ejemplo: Ejemplo: rd("arraydata", ?dim1, ?dim2); rd("arraydata", ?dim1, ?dim2);

9 Operaciones Básicas

10 Otras Operaciones Hay variantes no bloqueantes de in y rd Hay variantes no bloqueantes de in y rd Las operaciones inp y rdp son predicados que retornan true si hay una tupla matching en TS, y false en otro caso Las operaciones inp y rdp son predicados que retornan true si hay una tupla matching en TS, y false en otro caso

11 Templates Especifica la tupla a recibir Especifica la tupla a recibir Consiste de una secuencia de campos tipados Consiste de una secuencia de campos tipados Existen dos tipos de campos: Existen dos tipos de campos: Actuales: Variables, constantes o expresiones que se resuelven a constantes Actuales: Variables, constantes o expresiones que se resuelven a constantes Formales: Holders para recibir información Formales: Holders para recibir información Están precedidos por el signo ? Están precedidos por el signo ?

12 Templates Ejemplos: Ejemplos: in("arraydata", ?dim1, ?dim2, ?dim3); in("arraydata", 4, ?dim2, ?dim3); in("arraydata", ?dim1, ?dim2, ?dim3); in("arraydata", 4, ?dim2, ?dim3); Ambos ejemplos machearan con la siguiente tupla: out("arraydata", 4, 6, 8); out("arraydata", 4, 6, 8);

13 Reglas de macheo del template Tienen que tener el mismo numero de campos Tienen que tener el mismo numero de campos Los campos actuales deben tener el mismo tipo, longitud y valores Los campos actuales deben tener el mismo tipo, longitud y valores Los campos formales en el template deben machear el tipo y longitud de los campos correspondientes de la tupla Los campos formales en el template deben machear el tipo y longitud de los campos correspondientes de la tupla Si varias tuplas machean el template es imposible predecir cual será la elegida Si varias tuplas machean el template es imposible predecir cual será la elegida El orden de evaluación de los campos entre una tupla o template esta indefinido. El orden de evaluación de los campos entre una tupla o template esta indefinido.

14 Reglas de macheo del template Por lo tanto, los siguientes constructores deben ser evitados: Por lo tanto, los siguientes constructores deben ser evitados: out(string, i++, i); No se puede predecir si i sera incrementada antes o después de que el tercer campo sea evaluado in(string2, ?j, ?a[j]): No se puede predecir si j (en el tercer campo) tendra el valor seteado por ?j (en el segundo campo) o el valor que tenia antes de que la operación se ejecute. out(string, x, f(x)): En este ejemplo de Fortran, la funcion f() modifica el valor x, no podemos predecir si el segundo campo tendra el valor original o el modificado de x.

15 Reglas de macheo del template Ejemplos: Ejemplos: out('testdata', i, 3, 4+6) out('testdata', i, 3, 4+6) Sera macheada por: in('testdata', ?cnt, ?var, ?sum) in('testdata', ?cnt, ?var, ?sum) in('testdata', ?cnt, ?var, 10) in('testdata', ?cnt, ?var, 10) in(?string, ?cnt, ?var, ?sum) in(?string, ?cnt, ?var, ?sum)

16 Modelo Master/Slave usando memoria virtual compartida La creación de un programa Linda contiene un proceso Master y muchos procesos Slaves La creación de un programa Linda contiene un proceso Master y muchos procesos Slaves El Maestro y los Esclavos son independientes unos de otros El Maestro y los Esclavos son independientes unos de otros El Maestro divide el trabajo en tareas discretas y las ponen en el espacio global El Maestro divide el trabajo en tareas discretas y las ponen en el espacio global Los esclavos reciben repetidamente tareas y ponen los resultados de vuelta en el espacio global Los esclavos reciben repetidamente tareas y ponen los resultados de vuelta en el espacio global

17 Modelo Master/Slave usando memoria virtual compartida

18 Ejemplo Hola Mundo real_main(argc,argv) int argc; int argc; char *argv[]; char *argv[]; { int nworker, j, hello(); int nworker, j, hello(); nworker=atoi (argv[1]); nworker=atoi (argv[1]); for (j=0; j < nworker; j++) for (j=0; j < nworker; j++) eval ("worker", hello(j)); eval ("worker", hello(j)); for(j=0; j < nworker; j++) for(j=0; j < nworker; j++) in("done"); in("done"); printf(Hola Mundo is finished.\n"); printf(Hola Mundo is finished.\n"); } int hello (i) int i; int i; { printf(Hola Mundo from number %d.\n",i); printf(Hola Mundo from number %d.\n",i); out("done"); out("done"); return(0); return(0); }

19 Implementación del Modelo Linda La implementacion se divide en cinco modulos: La implementacion se divide en cinco modulos: Librería Linda Librería Linda Manejador de Tuplas Manejador de Tuplas Remote Procedure Call Remote Procedure Call Preprocesador Preprocesador Interfaz del Compilador Interfaz del Compilador

20 Implementaciones de Linda C-Linda, Fortran-Linda C-Linda, Fortran-Linda Piranha Piranha Algunas versiones en RedHat Linux PVM Linda PVM Linda C++-Linda C++-Linda

21 Network Linda Correr programas paralelos en redes es complicado por aspectos tales como el schedulling de procesos localización del ejecutable, heterogeneidad, etc. Correr programas paralelos en redes es complicado por aspectos tales como el schedulling de procesos localización del ejecutable, heterogeneidad, etc. Ntsnet es una poderosa y flexible herramienta para ejecutar programas Linda en una red; diseñado para ayudar a manejar esta complejidad. Ntsnet es una poderosa y flexible herramienta para ejecutar programas Linda en una red; diseñado para ayudar a manejar esta complejidad. Normalmente las redes Linda corren el proceso real_main() en el sistema local, y los procesos worker que ejecutan los eval corren sobre hosts remotos. Normalmente las redes Linda corren el proceso real_main() en el sistema local, y los procesos worker que ejecutan los eval corren sobre hosts remotos.

22 Piranha Linda Es una alternativa de C-Linda Es una alternativa de C-Linda Opera sobre Workstations conectadas por red Opera sobre Workstations conectadas por red El numero de procesadores participantes en un programa Piranha puede variar El numero de procesadores participantes en un programa Piranha puede variar Usa las operaciones in, out y rd pero NO la operación eval Usa las operaciones in, out y rd pero NO la operación eval Define tres rutinas: Define tres rutinas: Feeder Feeder Piranha Piranha Retreat Retreat

23 Piranha Linda Terminación de un Programa Piranha Terminación de un Programa Piranha Un programa Piranha pude terminar de dos maneras: Un programa Piranha pude terminar de dos maneras: Cuando la rutina feeder retorna Cuando la rutina feeder retorna Cuando cualquier proceso ejecuta lhalt o flhalt Cuando cualquier proceso ejecuta lhalt o flhalt En ambos casos todos los procesos Piranha que están ejecutándose terminaran automáticamente. En ambos casos todos los procesos Piranha que están ejecutándose terminaran automáticamente.

24 Arreglos en C-Linda Existen dos tipos de arreglos: Existen dos tipos de arreglos: Arreglos de longitud fija: Arreglos de longitud fija: Tienen una longitud predeterminada y no modificable conocida en tiempo de ejecución. Ejemplos: int a [20], b[20]; Luego: out ("fixed array", a); in ("fixed array", ?b); in ("fixed array", ?b);

25 Arreglos en C-Linda Arreglos de Longitud variable: Arreglos de Longitud variable: Utiliza información adicional provista en tiempo de ejecución para especificar su longitud Utiliza información adicional provista en tiempo de ejecución para especificar su longitud El atributo variable es aplicado a un arreglo colocando el carácter : luego de su nombre El atributo variable es aplicado a un arreglo colocando el carácter : luego de su nombre La información acerca de su longitud precede al carácter : La información acerca de su longitud precede al carácter : Ejemplos: Ejemplos: Para especificar los primeros 10 elementos de a (a es un arreglo) Para especificar los primeros 10 elementos de a (a es un arreglo)a:10 Para especificar el arreglo entero como un arreglo variante Para especificar el arreglo entero como un arreglo variantea:

26 Arreglos en C-Linda Cuando el arreglo se usa como campo formal, una variable entera se usara para setear el numero de elementos devueltos Cuando el arreglo se usa como campo formal, una variable entera se usara para setear el numero de elementos devueltos in(array, ?a:lenght);

27 Arreglos en C-Linda Ejemplos: Ejemplos: int a[20], b[20], len; out("varying array", a:); out("varying array", a:20); Para crear una tupla que contenga los primeros 10 elementos out(ten elements, a:10); out(ten elements, b:10); La tupla ten elements debera ser devuelta en alguna de las siguientes operaciones operaciones in(ten elements, ?a:len); in(ten elements, ?b:len); in(ten elements, ?b:len);

28 Templates Matching y Arrays Los arreglos machean con otros arreglos cuando sus elementos son del mismo tipo Los arreglos machean con otros arreglos cuando sus elementos son del mismo tipo Los arreglos fijos solo machean con otros arreglos fijos si tienen la misma longitud Los arreglos fijos solo machean con otros arreglos fijos si tienen la misma longitud Los arreglos fijos NUNCA machean con los arreglos variables Los arreglos fijos NUNCA machean con los arreglos variables

29 Limitaciones de Linda Sobrecarga alta del sistema. Sobrecarga alta del sistema. Diseñado primeramente como un modelo de computación paralela para redes LAN. Diseñado primeramente como un modelo de computación paralela para redes LAN. Carencia de un modelo de seguridad. Carencia de un modelo de seguridad. Carencia de semánticas transaccionales. Carencia de semánticas transaccionales. Implementación especifica del lenguaje. Implementación especifica del lenguaje. Llamadas bloqueantes, pero sin mecanismos de notificación. Llamadas bloqueantes, pero sin mecanismos de notificación.

30 Ejemplo Nros Primos (Main) Real_main(INT argc, CHAR *argv[ ] ) { Real_main(INT argc, CHAR *argv[ ] ) { INT primes[ limit] = {2,3}; /*tabla de primos*/ INT primes[ limit] = {2,3}; /*tabla de primos*/ INT limit, numworkers, i, isprime; INT limit, numworkers, i, isprime; INT numprimes=2, value=5; INT numprimes=2, value=5; limit = atoi (argv[ 1]) ; /*se lee cuantos generar */ limit = atoi (argv[ 1]) ; /*se lee cuantos generar */ numworkers= atoi (argv[ 2] ); numworkers= atoi (argv[ 2] ); /* Crear los workers y poner el primer primo en TS */ /* Crear los workers y poner el primer primo en TS */ FOR (i=1; i <= numworkers; i++ ) FOR (i=1; i <= numworkers; i++ ) EVAL (worker, worker() ); EVAL (worker, worker() ); OUT(candidate, value); OUT(candidate, value); /* Obtener los resultados de los workers en orden creciente */ /* Obtener los resultados de los workers en orden creciente */ WHILE (numprimes < limit) { WHILE (numprimes < limit) { IN (result, value, ?isprime); IN (result, value, ?isprime); IF (isprime) { /*poner el valor en la tabla y en TS*/ IF (isprime) { /*poner el valor en la tabla y en TS*/ primes[numprimes] = value; primes[numprimes] = value; OUT (prime, numprimes, value); OUT (prime, numprimes, value); numprimes++; numprimes++; } } value=value + 2; value=value + 2; } } OUT (stop); /* avisa a los workers que terminen */ OUT (stop); /* avisa a los workers que terminen */ IMPRIMIR; IMPRIMIR; }

31 Ejemplo Nros Primos(Worker) Void worker ( ) { Void worker ( ) { INT primes[ limit] = {2,3}; /*tabla de primos*/ INT primes[ limit] = {2,3}; /*tabla de primos*/ INT numprimes=1, i, candidate, isprime; INT numprimes=1, i, candidate, isprime; /* Obtener repetidamente un candidato a primo y chequearlo */ /* Obtener repetidamente un candidato a primo y chequearlo */ WHILE (true) { WHILE (true) { IF ( RDP (stop) ) IF ( RDP (stop) ) RETURN; RETURN; IN (candidate, ?candidate); /*obtiene un candidato */ IN (candidate, ?candidate); /*obtiene un candidato */ OUT (candidate, candidate +2); /* pone el siguiente candidato */ OUT (candidate, candidate +2); /* pone el siguiente candidato */ i=0; isprime=1; i=0; isprime=1; WHILE (primes[i] * primes[i] <= candidate { WHILE (primes[i] * primes[i] <= candidate { IF (candidate % primes[i] == 0) { /*NO es primo */ IF (candidate % primes[i] == 0) { /*NO es primo */ isprime=0; break; isprime=0; break; } } i++; i++; IF (i > numprimes ) { /* necesito otro primo */ IF (i > numprimes ) { /* necesito otro primo */ numprimes++; numprimes++; RD ( prime, numprimes, ?primes[numprimes]); RD ( prime, numprimes, ?primes[numprimes]); } } OUT (result, candidate, isprime); /*se envia el resultado al manager */ OUT (result, candidate, isprime); /*se envia el resultado al manager */ } } }


Descargar ppt "Lenguaje Linda Leonardo Rey Emiliano Riccialdelli Federico Mobrici."

Presentaciones similares


Anuncios Google