Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FACULTAD DE INGENIERIA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
PROGRAMACION AVANZADA
ALUMNOS:
DOCEMNTE:
01011001010001000111010101000100
01011001011100100010100101000011
00111010101000100111010100100101
01011101010101010101010000111101
Figura 1.4: Progresin de material nuevo a travs del libro en las tres reas
mostradas en la figura (1.2).
La integracin simultnea que proponemos en este libro se llevar a cabo
presentando cuidadosamente los conceptos relacionados de las tres
subreas. Pasar de un captulo a otro requiere dos dosis diferentes de
material nuevo en algoritmos y herramientas. Esto se explica grficamente
en la figura 1.4, que muestra que mientras se introducen nuevos algoritmos
a una velocidad aproximadamente constante, la introduccin de nuevo
material C + + y MPI vara inversamente. Comenzamos con un nfasis en
los conceptos bsicos del lenguaje, lo que permite al estudiante trabajar de
inmediato sobre los algoritmos introducidos inicialmente, mientras que a
medida que avanza el libro y la complejidad computacional de los
algoritmos aumenta el uso de construcciones y bibliotecas paralelas.
Ms especficamente, para ayudar a facilitar la inmersin del estudiante en
el pensamiento orientado a objetos, proporcionamos una biblioteca de
clases y funciones para usar a lo largo del libro. Las clases contenidas en
esta biblioteca se usan desde el principio del libro como una extensin
natural, definida por el usuario, de C ++. A medida que avanza el libro, se
explica la lgica subyacente y la implementacin de programacin de estas
clases, lo que lleva al estudiante a una comprensin ms profunda del
desarrollo de las clases de C ++. Denotaremos todas las clases usadas
dentro del libro y no inherentes a C ++ con las letras SC, como las clases
SCVector y SCMatrix.
Esto se hace para distinguir claramente entre C ++
definido y Tipos de datos definidos por el usuario, y
tambin para acentuar la utilidad de tipos definidos por el
usuario dentro del lenguaje de programacin C ++. A
medida que los estudiantes se vuelven ms familiarizados y
confiados en su capacidad de disear y usar tipos de datos,
los alentamos a usar estas facilidades proporcionadas por
el lenguaje para una programacin ms eficiente y
resolucin de problemas. Todos los cdigos de este libro y
muchos ms ejemplos estn incluidos en la suite de software, que se
distribuye con este libro.
1.5 Qu pasa con OpenMP?.
Debido a la reciente proliferacin de mquinas distribuidas de memoria
compartida (DSM) en la comunidad de computacin cientfica, existe un
gran inters en la mejor manera de utilizar de manera apropiada tanto la
distribucin como la particin compartida de estos sistemas. MPI
proporciona un medio eficaz de comunicacin paralela entre una coleccin
distribuida de mquinas; Sin embargo, no todas las implementaciones de
MPI se aprovechan de la memoria compartida cuando est disponible entre
procesadores (la premisa bsica es que dos procesadores, que comparten
memoria comn, pueden comunicarse entre s ms rpidamente a travs
del uso del medio compartido que a travs de otros medios de
comunicacin).
OpenMP (Open Multi Processing) fue introducido para proporcionar un medio
de implementar el paralelismo de memoria compartida en los programas
FORTRAN y C / C ++. Especficamente, OpenMP especifica un conjunto de
variables de entorno, directivas de compilador y rutinas de biblioteca que se
utilizarn para la paralelizacin de memoria compartida. OpenMP fue
especficamente diseado para explotar ciertas caractersticas de las
arquitecturas de memoria compartida, como la capacidad de acceder
directamente a la memoria en todo el sistema con baja latencia y bloqueos
de memoria compartida muy rpidos. Para obtener ms informacin acerca
de OpenMP, visite www.openmp.org.
Est surgiendo un nuevo paradigma de programacin paralela en el que
tanto el MPI como OpenMP se utilizan para la paralelizacin. En una
arquitectura de memoria compartida distribuida, OpenMP se utilizara para
la comunicacin entre nodos (es decir, entre una coleccin de procesadores
que comparten el mismo subsistema de memoria) y MPI se utilizara para la
comunicacin entre nodos (es decir, entre distintas colecciones distribuidas
de Procesadores). La combinacin de estas dos metodologas de
paralealizacin puede proporcionar los medios ms eficaces para explotar
plenamente los modernos sistemas de memoria compartida distribuida
(DSM).
1.6 Algoritmos y lista de los diez primeros.
Los griegos y los romanos inventaron muchos algoritmos cientficos y de
ingeniera, pero se cree que el trmino "algoritmo" proviene del nombre del
matemtico rabe al-Khwarizmi del siglo IX, que escribi el libro al-jabr wa'l
Muqabalach que eventualmente evolucion en los libros de texto de lgebra
de la escuela secundaria de hoy. Quizs fue el primero en enfatizar
procedimientos sistemticos para resolver problemas matemticos. Desde
entonces, se han inventado algunos algoritmos verdaderamente ingeniosos,
pero los algoritmos que han formado los fundamentos de la computacin
cientfica como una disciplina separada se desarrollaron en la segunda parte
del siglo XX. Dongarra y Sullivan elaboraron una lista de los diez algoritmos
principales del siglo XX [33]. Segn estos autores, estos algoritmos tuvieron
la mayor in fl uencia en la ciencia y la ingeniera en el pasado. Estn en
orden cronolgico:
1. 1946: El mtodo de Monte Carlo para modelar fenmenos probabilsticos.
2. 1947: El mtodo Simplex para problemas de optimizacin lineal.
3. 1950: El mtodo de iteracin del subespacio de Krylov para
solucionadores lineales rpidos y eigensolvers.
4. 1951: La descomposicin de la matriz de Householder para expresar una
matriz como un producto de matrices ms simples.
1957: El compilador FORTRAN que liber a los cientficos e ingenieros de
programar en la asamblea.
6. 1959-1961: El algoritmo QR para calcular muchos autovalores.
7. 1962: El algoritmo Quicksort para poner las cosas en orden numrico o
alfabtico rpido.
8. 1965: Transformada rpida de Fourier para reducir el recuento de
operaciones en la representacin de la serie de Fourier.
9. 1977: El algoritmo de deteccin de la relacin Integer, que es til para las
bifurcaciones y en la teora del campo cuntico.
10. 1987: El algoritmo multipolo rpido para problemas de N-cuerpo.
Aunque existe cierto debate en cuanto a la importancia relativa de estos
algoritmos o la ausencia de otros mtodos importantes en la lista, p. Las
diferencias finitas y los elementos finitos, esta seleccin de Dongarra &
Sullivan refleja algunos de los retos de la informtica cientfica en el pasado.
La aparicin del compilador FORTRAN, por ejemplo, representa la transicin
histrica del lenguaje ensamblador a los lenguajes de nivel superior, como
se discuti anteriormente. De hecho, el primer compilador de FORTRAN fue
escrito en 23.500 instrucciones de lenguaje ensamblador! FORTRAN se ha
utilizado ampliamente en el pasado, especialmente en la comunidad de
ingenieros, pero la mayor parte del software informtico cientfico reciente
ha sido reescrito en C ++, p. Las Recetas Numricas [75].
En este libro cubriremos en detalle los algoritmos (3), (4), (6) y (8) de los
anteriores
, Incluyendo muchas versiones ms recientes, que proporcionan mayor
robustez con respecto a los errores y eficacia de redondeo en el contexto de
la computacin paralela. Tambin presentaremos discretizaciones de
ecuaciones diferenciales ordinarias y parciales utilizando varias
formulaciones de diferencia finita.
Muchos nuevos algoritmos probablemente sern inventados en el siglo
veintiuno, esperemos que algunos de ellos de los lectores de este libro!
Como dijo Dongarra y Sullivan: "Este siglo no ser muy relajante para
nosotros, pero tampoco va a ser aburrido!"