Está en la página 1de 19
oculta: Celestt Rosellé Balanya Ricardo Pefia Mari Departamento de Programacién de Computadores Facultad de Informatica de Barcelona Celesti Rosellé es profesor colaborador de la Facultad de Informética de Barcelona. Sus trabajos se centran, principalmente, en la metodologia de la programacién y su aplicacién a la paralelizacién de algorit- ‘mos para grificos. Actualmente esti realizando, en esa linea, su tesis doctoral. Ricardo Petia es profesor titular de 1a Facultad de Informética de Barcelona. Su interés investigador se centra en la metodologia de la programacién y en los gréficos por computador. Ha trabajado varios afios en la empresa privada desarrollando programas en gran escala en las areas de telefonia y CAD/CAM. Se presenta una notacién algoritmica para programacién paralela en la que la recursividad y la introduccion gradual del paralelismo juegan un papel importante. Se aplica dicha notacién a la presentacion de una versién paralela del algoritmo de Warnock para eliminar superficies ocultas. Finalmente, se discuten cuestiones de implementacién. L_Introduccion Este trabajo se encuadra en una investigacién més amplia cuyo objetivo es expresar en forma paralela los algoritmos més frecuentes utilizados en las aplicaciones gréficas. En particular, aquellos que consumen mis tiempo de proceso: recorte de lineas y paneles, elimi- nacién de partes ocultas, iluminacién, etc. La estrategia tradicional para aumentar la eficiencia de los algoritmos gréficos, ha sido la emigracién al hardware de las funciones de mds bajo nivel, dando lugar, en muchos casos, al desarrollo de circuitos integrados que se incorporan directamente a los periféricos grdficos. Ejemplos de tales pastillas son: + conversién de lineas y paneles a puntos [Abram y Fuchs 1984, Ikedo 1984] + memorias de refresco con capacidad de célculo [Fuchs y Poulton 1981] + operaciones con bits, en memorias de refresco [Atwood 1984] + transformacién 3D, recorte 3D y proyeccién [Clark 1982] GR14 721 Las arquitecturas asf construidas resultan altamente eficientes, pero también de eleva- do coste. Los algoritmos han de especializarse mucho para su adaptaci6n al hardware y, una vez incorporados al mismo, su modificacién implica el redisetio del circuito. Estos circuitos, a menudo capaces de procesar en paralelo, s6lo sirven para ejecutar un algoritmo. Por otra parte, los algoritmos de muy alto nivel —eliminacién de partes ocultas, iluminaci6n— s6lo pueden ser incorporados al hardware a unos costes elevadisimos y estén justificados en un niimero reducido de aplicaciones: simuladores de vuelo, animacién en tiempo real, etc. En contraste con esta estrategia, el propésito que aqui se persigue es ganar en flexibi- lidad a costa de perder algo en eficiencia. Se pretende expresar diferentes algoritmos en una notacién paralela comin, mds o menos convencional, que pueda ser ejecutada en arquitec- turas paralelas de propésito general. De este modo, una misma arquitectura no especializada y, por tanto, de coste razonable, ser4 capaz de ejecutar diferentes algoritmos. Un tipo de lenguajes y arquitecturas cercanas a este planteamiento son: el lenguaje Ada [Ada 1981], el lenguaje Occam [Inmos 1984, Jones 1985] y las arquitecturas basadas en los rransputers [Withby-Stevens 1985]. Algoritmos candidatos para ser expresados en esta notacién y ejecutados en paralelo con ganancia apreciable, son aquellos demasiado sofisticados para que sea facil su incorpo- raci6n al hardware y, a la vez, cuyo tiempo de ejecucién en versin secuencial, se mida en decenas de segundos o de minutos. En esta categoria caen, sin duda, los de eliminacién de partes ocultas y los de obtencién de escenas con alto grado de realismo (trazado de rayos, tratamiento de texturas, fractales, etc.). Un ejemplo interesante de algoritmo paralelo de tra- zado de rayos puede verse en [Clearly et al. 1986]. Un objetivo complementario es investigar la estructura de los algoritmos paralelos conseguidos, y tratar de establecer la base para una metodologia de paralelizacién de algorit- mos, tanto dentro como fuera del drea de gréficos, El estudio de la eficiencia paralela de los algoritmos, esto es, de la eficiencia global teniendo en cuenta el ntimero de procesadores disponibles, serd un aspecto més a estudiar. Constitzyen también objetivos colaterales : + el desarrollo de una notacién algoritmica paralela, fiable desde el punto de vista de la programacién y suficientemente expresiva, que obvie algunos de los inconve- nientes y limitaciones de los lenguajes paralelos disponibles actualmente. 722 GR14 + el estudio de arquitecturas multiprocesador de propésito “general” (en el sentido de que sean aptas para una familia amplia de algoritmos), que soporten, con una eficiencia razonable, los algoritmos propuestos. En el siguiente apartado se describe la versién secuencial del algoritmo de Wamock [Warnock 1969] para la eliminacién de superficies ocultas y se justifica su eleccién como algoritmo candidato a ser paralelizado. En el apartado 3 se introduce y justifica brevemente la notaci6n paralela empleada posteriormente. Esta propuesta no ha de entenderse‘como defi- nitiva, aunque sf es bastante ilustrativa del tipo de construcciones que los autores consideran interesantes para ser incluidas en un lenguaje paralelo. El apartado 4 describe la versin pa- ralela del algoritmo de Warnock expresada en la notaci6n del apartado anterior. Se realiza un estudio de su eficiencia, compardndola con la de la versién secuencial. El siguiente apartado estudia cuestiones de implementacién asociadas, tanto a la notacién paralela, como al algorit- mo paralelo descrito. 2. Algoritmo secuencial de eliminacin de partes ocultas Se ha escogido el algoritmo de Warnock, 0 algoritmo de subdivisién de 4reas, porque se trata de una aplicacién del esquema divide and conquer, que conduce de una manera muy directa a una solucién paralela. El esquema divide and conquer [Veloso 1980] es usado frecuentemente para resolver problemas cuya solucién puede expresarse en términos de ella misma. El método es el si- guiente: + siel problema a resolver es suficientemente simple, se resuelve directamente. + si el problema a resolver es complejo, se descompone en dos o més subproblemas del mismo tipo que el original, que se resuelven independientemente. El resultado del problema complejo se obtiene combinando adecuadamente los resultados parcia- les que cada subproblema ha producido. Los métodos Quicksort y Mergesort de ordenacién de vectores 0 el problema de las Torres de Hanoi son ejemplos tipicos de la aplicacién del esquema divide and conquer [Horowitz y Sahni 1978]. En muchos casos no importa el orden de resolucién de los GR14 723 distintos subproblemas (el problema de las Torres de Hanoi es una excepei6n) y, en conse- cuencia, pueden resolverse en paralelo. Un ejemplo de implementacién paralela del algorit- mo Mergesort realizada en el lenguaje Occam puede encontrarse en [Jones 1985}. Elalgoritmo de Warnock. Pertenece a la clase de algoritmos de eliminacién de partes ocultas que trabajan en es- Pacio imagen. Se basa en la coherencia de las éreas que componen la imagen, pues ésta no cambia mucho de un pixel al pixel vecino y, por tanto, hay grandes porciones de la imagen que son del mismo color. Dada una lista de caras (poligonos) que componen la imagen y la ventana en la que hay que dibujarlas, el algoritmo intenta determinar si el contenido de la ventana es suficiente- mente simple. Si lo es, la dibuja, es decir, calcula el color de cada pixel de la ventana. Si la ventana no es simple, la subdivide en ventanas més pequetias a las que aplica el mismo pro- cedimiento. No hay un algoritmo de Warnock tinico sino una coleccién de ellos. De hecho hay uno para cada significado de “ventana simple” y para cada método de subdivision de venta- nas no simples. Para establecer un criterio de decisién del significado de “ventana simple” hay que considerar las maneras en que un polfgono puede estar colocado Tespecto a una ventana. Hay tres clases de poligonos: * disjuntos: si la interseccién del poligono con la ventana es vacta, * envolventes: si la ventana est4 totalmente contenida dentro del poligono. * otros: que intersectan con la ventana o est4n totalmente contenidos en ella. Todo pol{gono disjunto de una ventana lo es también de cualquier posible subventa- na. Asimismo, todo polfgono que envuelve una ventana, envuelve a cualquier posible sub- ventana. Ademds, un poligono envolvente oculta todos los polfgonos que estén més lejos que él, independientemente de la clase a la que pertenezcan. E] algoritmo clasifica los poligonos segiin la ventana en una de las tres clases posi- bles y prescinde de los poligonos disjuntos y de los poligonos ocultos por cualquier envol- 724 GR14 vente, pues no afectan a la porcién de imagen que se ve desde la ventana. Esta clasificacion produce automdticamente una definicién de las situaciones que pueden ser consideradas simples: * todos los polfgonos han sido eliminados por lo que la ventana est vacfa. * queda un solo poligono ya sea envolvente, intersector 0 contenido. Para evitar mas subdivisiones de las necesarias también se consideran simples las ventanas del tamafio de detalle deseado, es decir, las de tamatio pixel. En este caso el color del pixel se toma igual al del polfgono més cercano segtin el centro de la ventana-pixel, 0 bien, se aplica alguno de los métodos de antialiasing para decidir el color. Un algoritmo de Wamock toma, en la notacién Merlin [Botella y otros 1982], la for- ma siguiente: accion warnock( Ip es lista_poligonos; v es ventana) es var simple es booleano tvar clasiticar( Ip, v, simple); opcion caso simple hacer dibujar( Ip, v) caso —simple hacer wamock( Ip, sub_ventana_1( v)); wamock( Ip, sub_ventana_2{ v)); warnock( Ip, sub_ventana_3( v)): warnock( Ip, sub_ventana_4( v)) fopcion faccion donde clasificar elimina de la lista Ip los poligonos ocultos o disjuntos y devuelve el valor booleano simple. La accién dibujar se ocupa de pintar las ventanas simples. Las funciones sub_ventana_1 a sub_ventana_4 devuelven, para una ventana dada, las subventanas en las que se divide. Se ha tomado la decisi6n de dividir cada ventana en cuatro subventanas igua- les, tal como en el trabajo original (Wamock 1969]. De hecho, una ventana se puede subdi- vidir en cualquier nimero de subventanas de cualquier forma con tal que sean disjuntas dos a dos y la cubran por completo. Versién iterativa. El algoritmo presentado no es muy eficiente desde el punto de vista del paso de pa- rémetros. Tal como estd requiere la copia de la lista de poligonos en cada activacién de la GR14 725 accién wamock. Es para evitar esta ineficiencia que la implementacién habitual del algoritmo ¢s iterativa en vez de recursiva. En lugar de una lista de polfgonos se manejan tres: una de poligonos disjuntos id, una de poligonos envolventes le y una con los poligonos restantes Ir, junto con una pila en la que se depositan las ventanas a procesar. Cada iteracién mueve los poligonos de la lista Ir a las listas le o Id seguin sean envol- ventes o disjuntos para la ventana en curso y recuerda el nivel de subdivisién en el que han sido movidos, para poder devolverlos a la lista correspondiente cuando la ventaria en curso y todas las subventanas a que pueda dar lugar hayan sido procesadas. Estudio de la eficiencia. El caso peor para el algoritmo de Warnock se da cuando todas las ventanas son com- plejas y hay que subdividirlas siempre hasta llegar a la ventana de tamaiio pixel. El estudio se realiza para ventanas cuadradas y suponiendo que el tiempo necesario para procesar un poligono es constante. Sea N la medida en pixels del lado de la ventana y n el nimero de poligonos. Si la ventana es un pixel entonces N = 1 y el algoritmo tarda un tiempo propor- cional al nimero de polfgonos. Si la ventana no es pixel, hay que clasificar los polfgonos y procesar las cuatro subventanas a que da lugar. El coste del algoritmo queda establecido por la siguiente recurrencia: bin siN=1 T(N, n) = 4.T( N/2, n) +b"n siN>1 La soluci6n de esta recurrencia es: T( N, n) € O( n.N2). En el caso més realista en el que el mimero de polfgonos a considerar disminuye con el tamafio de la ventana, la recurrencia es la siguiente: bin siN=1 T(N, 1) = 4.7( N/2, nc) + b".n siN>1 siendo c el factor de disminucién. La solucién de esta recurrencia es: T(N, n) € Of nist) ) sitse<4 T(N, A) € O( nlogN ) sica4 726 GR14 3._Notacién paralela La notacién propuesta se concibe como una extensién de la notacién algoritmica Merlin (Botella y otros 1982], desarrollada en la Facultad de Informética de Barcelona con fines fundamentalmente docentes. Las caracteristicas més destacables de Merlin son : * notacién en lengua nativa (existe una versién catalana y otra castellana). + inspirdda en la notacién MEFIA [Scholl et al. 1978] y en el lenguaje Ada [Ada 1981]. * concepto central: tipos abstractos de datos. Los conceptos adicionales introducidos son los siguientes: * procesos * sentencia paralela *canales + sentencia altemativa generalizada Procesos Un proceso es una actividad secuencial que puede ejecutarse en paralelo con otros procesos. Un programa paralelo se define inicialmente como un solo proceso que, a lo lar- go de su ejecucién, puede activar otros procesos. La sintaxis para la declaracién de un pro- ceso es la siguiente: proceso «nombre» (.parametros formales») {proceso El entorno que activa el proceso es responsable de establecer el valor actual de los pardmetros para esa activacién. Los pardmetros pueden ser de entrada o de salida. Este ilti- mo caso se indica incluyendo la palabra clave sal delante de la declaracién del tipo del paré- metro. Un proceso sélo tiene acceso a sus pardmetros y a sus variables locales. La activa- cién de un proceso se realiza mediante la sentencia ejecutable: proceso (.parémetros actuales n-) fparalelo El proceso que contiene la sentencia queda detenido temporalmente. Se produce la transferencia de valores de entrada a los parémetros formales de entrada de cada proceso. Se inicia la ejecucién en paralelo de los mismos. Cuando un proceso termina, se realiza la trans- ferencia de valores de salida a los parémetros actuales correspondientes. Si todos terminan, se reanuda la ejecucién del proceso llamante a continuacién de esta sentencia. Un mismo parémetro actual de entrada puede figurar en mAs de una activacién de Proceso. Los pardmetros actuales de salida han de ser necesariamente disjuntos. Se suministra también una versién con replicador de la sentencia paralela, en la que se pueden activar varias instancias de un mismo proceso. La variable de control del replicador puede utilizarse como pardmetro actual para distinguir, si es necesario, una instancia de otra. Su sintaxis es: Paralelo «variable» en -expresién 1» : Proceso «nombre: (.parémetros actuales») fparalelo La variable de control del replicador ha de ser entera. Tanto «expresién 1» como cexpresion 2» se calculan en tiempo de ejecucién. Ei niimero de instancias activadas —que es la diferencia entre ambas mas uno- no es posible determinarlo en tiempo de compilaci6n. 728 GR14 Canales Un canal c es una variable de un tipo genérico del lenguaje, que tiene asociadas las siguientes caracteristicas: + hay que declarar explicitamente el ntimero y tipo de los valores que pueden trans- mitirse por el mismo. Se hace mediante sentencias declarativas de tipo y de varia- ble: tipo «nombre: es canal (:parametros formales+); var ces «nombre» fvar Se pueden crear estructuras (vectores, tuplas, ... ) compuestas s6lo de canales. + admite inicamente dos operaciones, una para escribir valores en el canal y otra para Ieerlos. Los valores han de coincidir en nimero y tipo con la declaracién del canal. La sintaxis empleada es: c.eseribir («valores actuales») cleer («variables actuales») * un canal tiene dos extremos, uno de escritura y otro de lectura. Un proceso puede escribir o leer s6lo de los canales que le son pasados cémo pardmetros en su acti- vacién. La declaracién del parametro formal especifica si se trata del extremo de es- critura 0 del de lectura: proceso «nombre: (...;¢ es lectura «tipo de canal; proceso «nombre: (...; ¢ es escritura ‘tipo de canab El compilador debe asegurar que un canal es pasado como pardmetro al menos a dos procesos y que, al menos uno, recibe el extremo de lectura y, al menos otro, el de escritura. Un pardmetro de tipo canal puede, a su vez, ser transmitido a otros procesos activados des- de uno dado, pero no se puede cambiar la cualificacién del extremo. Si un mismo extremo es pasado como pardmetro a varios procesos de una sentencia paralela, se dice que el extre- mo se ha desdoblado. Estas reglas aseguran que los canales pueden utilizarse para comunicar procesos “hermanos” de una sentencia paralela, o un miembro de una sentencia paralela con los GR14 729 “descendientes” de sus hermanos, pero nunca podré comunicar entre s{ a un proceso con sus descendientes a cualquier nivel. Un canal asegura la sincronizacién y comunicacién entre un proceso escritor y un Proceso lector del mismo. Si no est4 disponible uno de los dos, el otro partenaire queda a la espera. Si hay mds de un proceso disponible en un mismo extremo, s6lo uno logrard sincro- nizarse, siendo la eleccién no determinista. Sentencia alternariva generalizada En Merlin existe una forma de sentencia alternativa que permite elegir entre varias opciones disjuntas: opcion caso B, hacer S,; Las expresiones booleanas B, deben ser exclusivas: no puede haber dos expresiones ciertas a la vez. Se propone mantener como sentencia alternativa de la notacion paralela, la sentencia opcion...fopcion de Merlin con las siguientes modificaciones: + mas de una B; puede ser cierta al tiempo. La eleccién de qué rama se ejecuta es no determinista. + Las B, pueden estar formadas por: una expresién booleana, 6 —una operacién de lectura o de escritura sobre un canal, 6 —una expresién booleana seguida de “:” y de una operacién de lectura o de escritura. Cada rama de la sentencia, “protegida” por una expresién booleana y/o una opera- cién sobre un canal, se denomina accién protegida. 730 GR14 La sentencia alternativa generalizada se ejecuta del siguiente modo: « se evaliian todas las expresiones booleanas. Si, en algiin caso, no existe, se inter- pretar4 como la constante booleana cierto. Las acciones protegidas cuya expresién booleana es cierta se dice que estan abiertas. + Las acciones protegidas abiertas que no tengan operacién sobre un canal, son ya clegibles para ejecucién. Las que la tengan, son elegibles si existe un proceso en el otro extremo del canal dispuesto a ejecutar la operacién complementaria. + Si existe mds de una acci6n protegida elegible, se ejecutard una de ellas arbitraria- mente. Si todas las acciones abiertas tienen operaciones sobre canales cuyos extre- mos opuestos no estén disponibles, 1a sentencia deja el proceso a la espera hasta que sean posibles una o més sincronizaciones. Si no existe ninguna accién protegi- da abierta, la sentencia aborta. No se considera necesaria la creacién de una sentencia repetitiva especial puesto que pueden utilizarse las sentencias ya previstas en Merlin, Por ejemplo, si se pretende expresar una repeticién sin fin de una sentencia altemnativa, se podria escribir: mientras cierto hacer opcién fopcién {mientras Si se quisiera expresar una repetici6n hasta que todas las protecciones booleanas de la sentencia alternativa sean falsas, se escribiria: mientras B, v ..v 8, hacer opcién caso B, ... caso B, ... fopcién fmientras GR14 731 se ha de iluminar cada pixel, Proceso eliminar_partes_ocultas( Ip es lista_poligonos: v es ventana) es tipo canal_puntos es canal (jes 1:N; col es color) var Ces canal_puntos tvar Paralelo Proceso warnock( Ip, v, c) Proceso almacenar_imagen( c) fparalelo fproceso Proceso almacenar_imagen( c es lectura canal_puntos) es var i,j, k, pixels es entero; col es color: Memoria_imagen es vector [ 1:N, 1:N] de color tvar k:= 0; npixels := N°N: mientras k < npixels hacer c.leer col); ‘memoria_imagent i J -= col; K:=ket fmientras fproceso paralela de la misma: Preceso warnock( Ip es lista_poligonos; v es ventana: c es escritura canal_puntos) es var simple es booleano fvar clasiticar( Ip, v, simple); opcion caso simple hacer dibujar( Ip, v, c) €aso — simple hacer paralelo Proceso wamock( Ip, su_ventana_1( v), c) Proceso wamock( Ip, sub_ventana_2{ v), c) Proceso wamock( Ip, sub_ventana_a{ v), c) Proceso wamock( Ip, sub_ventana_4{ v). c) fparalelo fopcion fproceso 732 GR14 La accién dibujar efectia una operacién c.eseribir( i, j, col) para cada pixel de la ventana v. Eficiencia de la versién paralela. Se va a calcular el coste de la versién paralela en dos casos: el de tener suficientes procesadores para todas las activaciones posibles y el de tener no més de p procesadores. En el primer caso la recurrencia que nos permite calcular el coste es: bin siN=1 T(N, n) = T(.N/2, n/c) +b". siN>1 que es la misma que en el caso secuencial pero teniendo en cuenta que los cuatro subproble- mas se resuelven en paralelo. El coste del algoritmo paralelo es, pues: T(N, n) € O( n.logN ) sic=1 T(N,n) € O(n) sic>1 Para el caso de p procesadores el coste se calcularé de la manera siguiente: mientras haya suficientes procesadores se asignard cada nuevo proceso a un nuevo procesador; en cuanto haya menos procesadores que procesos, éstos se repartiran por igual entre aquellos. En dfinitiva, el coste serd el del algoritmo paralelo mientras haya suficientes procesadores, pero, desde ese instante el coste ser como el del algoritmo secuencial trabajando en un pro- blema més pequefio. Supongamos que p = 4X. Entonces, hasta el nivel k-ésimo de subdivisi6n el coste seré el paralelo con N = 2, pues podemos asignar a cada proceso un procesador. A partir de en- tonces cada procesador pasar4 a ocuparse de todos los subproblemas que genere la ventana que le ha tocado y el coste ser el del algoritmo secuencial pero, en vez de N pixels serin Ni2k y en vez de n polfgonos serin nick. El coste es, pues, el siguiente: nn? Eg SOD te sic=1 log(4/c) TIN. (ne sit

También podría gustarte