Enseña qué es la programación en Python y, también, cómo implementar un programa multi-proceso en dicho lenguaje. Esto, para su ejecución con el uso de todos los núcleos (o un conjunto de ellos) del computador o servidor.
Así, el lector aprenderá las vías para que los distintos procesos colaboren entre ellos, compartiendo datos, sincronizándose y enviándose mensajes.
visualizando la problemática asociada a los algoritmos grandes, tanto en cantidad de datos como de cómputo. Y ante eso, la presente publicación enseña cómo abordarla, mediante Computación Paralela en lenguaje Python, lo cual permite acelerar los algoritmos, posibilitando el uso de todos los núcleos del equipo.
Tengo un Doctorado en Ciencias de la Computación en la U. Complutense de Madrid, dos magíster (U. de Chile y la U. Complutense de Madrid) y el título de ingeniero en computación, obtenido en la U. de Magallanes.
Actualmente soy Académico en la U. Católica del Maule, y una de mis áreas de investigación es la Computación de Alto Rendimiento (HPC), en la que estoy involucrado desde 2006. He dirigido y participado en varios proyectos de investigación teórica y aplicada en dicha área, haciendo uso (y también creando) distintas herramientas de Computación Paralela.
Se abordan desde los conceptos básicos, intermedios hasta el menejo avanzado de computación paralela.
| 1 | Programación en Python | 17 |
| 1.1 | Primeros pasos | 17 |
| 1.2 | Estructura de un programa | 17 |
| 1.3 | Módulos o Bibliotecas | 18 |
| 1.4 | Indentación | 19 |
| 1.5 | Comentarios | 20 |
| 1.6 | Variables y Constantes | 20 |
| 1.7 | Tipos de datos en Python | 22 |
| 1.8 | Operaciones | 23 |
| 1.9 | Comenzando a programar | 26 |
| 1.10 | Estructura de control: if-else | 35 |
| 1.11 | Ejercicios | 38 |
| 1.12 | Estructura de control: while | 39 |
| 1.13 | break, continue y pass | 39 |
| 1.14 | Estructura de control: for | 41 |
| 1.15 | Bucles for anidados | 42 |
| 1.16 | Ejercicios (ciclos iterativos) | 43 |
| 1.17 | Cadena de caracteres: string | 44 |
| 1.18 | Medición de tiempo | 50 |
| 1.19 | Ejercicios (Strings) | 51 |
| 1.20 | Tipos especiales: list, set, dict | 51 |
| 1.21 | Funciones | 63 |
| 1.22 | Manejo de excepciones | 68 |
| 2 | Biblioteca: NumPy | 71 |
| 2.0.1 | Entorno y contexto en NumPy | 72 |
| 2.0.2 | Constantes | 72 |
| 2.0.3 | Tipos de datos | 72 |
| 2.1 | Arreglos ndarray | 73 |
| 2.1.1 | Accediendo a los elementos | 75 |
| 2.1.2 | Inserción de datos en un arreglo | 77 |
| 2.1.3 | Ejercicios (Arreglos) | 77 |
| 2.2 | Matrices | 78 |
| 2.2.1 | Accediendo a los datos de una matriz | 78 |
| 2.2.2 | Modificación de la disposición de los elementos | 80 |
| 2.2.3 | Creación de matrices mediante funciones | 80 |
| 2.2.4 | Modificación de los elementos de una matriz | 81 |
| 2.2.5 | Ejercicios (Matrices) | 83 |
| 2.3 | Aleatoriedad | 83 |
| 2.4 | Selección aleatoria a partir de un conjunto | 84 |
| 3 | Computación paralela en Python | 85 |
| 3.1 | Introducción | 85 |
| 3.2 | Computación paralela en plataforma multi-núcleo | 86 |
| 3.2.1 | Proceso principal e identificadores | 86 |
| 3.2.2 | Variables compartidas | 90 |
| 3.2.3 | Barrera de sincronización | 93 |
| 3.2.4 | Cerrojos (locks) | 94 |
| 3.2.5 | Ejemplo: mayor elemento | 97 |
| 3.3 | Medidas de rendimiento | 99 |
| 3.3.1 | Ejercicios (multi-proceso) | 101 |
| 3.4 | Paso de mensajes en procesos locales | 112 |
| 3.4.1 | Envío y recepción de mensajes | 112 |
| 3.4.2 | Biblioteca libmp | 114 |
| 3.4.3 | Ejercicios (mensajes) | 120 |
| 3.5 | Pool de procesos (multiprocessing.pool) | 129 |
| 3.5.1 | Grupo de procesos: Pool | 130 |
| 3.6 | Procesos remotos | 136 |