5. CONCLUSIONES. 108 Las conclusiones que se pueden deducir de la realización del proyecto son diversas, de modo que vayamos por partes. El tema del cálculo en paralelo no es, ni mucho menos, trivial. Son muchos los conceptos que hay que tener en cuenta antes de empezar a implementar aplicaciones paralelas. Uno de los referentes a tener en cuenta es que no es lo mismo realizar una aplicación pensando desde el primer momento en paralelo, que intentar paralelizar una aplicación que en la actualidad funciona de forma secuencial. Es difícil no desviar el pensamiento hacia la tendencia de programar en serie (aun cuando el cerebro humano trabaja constantemente en paralelo). Programar en paralelo, es cambiar un poco la forma de pensar. Un mismo programa se ejecuta en varias máquinas al mismo tiempo, pero cada una mantiene un dominio distinto de valores para las mismas variables. Esta característica y muchas otras comentadas a lo largo de la memoria, hacen que la programación en paralelo sea un tanto complicada. Sin embargo, con relativamente poco tiempo de aprendizaje, es posible realizar programas que realmente tienen una gran aplicación en el ámbito científico. Es importante destacar el gran soporte que ofrece la librería MPI para las comunicaciones entre los ordenadores del cluster. A través de unas rutinas definidas, se esconde toda la complejidad que supondría realizar de forma directa todos los códigos correspondientes a las operaciones de comunicación entre procesos. Decir también, que los scripts proporcionados por el paquete de MPI, son una herramienta muy potente, y prácticamente hacen transparente al usuario toda la fase de ejecución de aplicaciones en paralelo. Además, es sorprendente la perfecta cooperación entre las librerías MPI y PETSc. Son muchas las conclusiones que se derivan de la programación con la librería de cálculo científico en paralelo PETSc. Cualquier programador experimentado en la librería PETSc, seguramente pueda decir muchas cosas sobre ella. Sin embargo, cualquier usuario que programe utilizando la librería, por poco tiempo que sea, puede deducir importantes conclusiones. Destacar la gran ventaja de que PETSc utilice la filosofía de la programación orientada a objetos, ya que facilita en gran medida el trabajo en la fase de desarrollo de aplicaciones. Por otro lado, decir que es bastante útil que PETSc utilice los mismos nombres de interfaces a rutinas para C y para Fortran. La creación de grandes aplicaciones con PETSc es posible con sólo unas cuantas líneas de código. Es asombroso la facilidad de creación de vectores y matrices paralelos (y secuenciales), así como el gran número de rutinas para manejo de estos objetos. Una cuestión que ha quedado pendiente es el asunto de la convergencia de los algoritmos utilizados por los solvers de sistemas lineales. El algoritmo GMRES ha sido el escogido para resolver los sistemas planteados en la fase de pruebas. El tema está en que no es posible tener un algoritmo para resolver todos los tipos de sistemas existentes. El GMRES tiene varios parámetros de configuración, con los que se ha jugado para intentar conseguir la convergencia y, en la mayoría de los casos, ha sido inútil. En las pruebas se llegó a crear una matriz llena de 50.000 x 50.000 elementos (no se pudo con más por falta de memoria en el cluster); sin embargo, el solver no llegó a converger. La estructura de la matriz, esto es, la forma en que se disponen los bloques llenos y vacíos, es determinante para lograr que GMRES converja. 109 Pese a estos problemas con la convergencia del GMRES, los resultados obtenidos en las pruebas son esperanzadores, pues es posible que con un poco de tiempo y esfuerzo se consigan resolver los sistemas citados. 110