post
-
Ejercicios | Hilos
A continuación se describe seis ejercicios sencillos que abordan los temas de introducción a la programación concurrente, conceptos de programación concurrente, arquitecturas paralelas y distribuidas, así como algoritmos paralelos y distribuidos. Estos ejercicios están diseñados para abordar conceptos básicos en hilos, exclusión mutua, monitores, semáforos y MPI. Se pueden adaptar al lenguaje de programación que se este utilizando.
-
Integración de Sistemas en una Planta de Manufactura con CORBA
Una planta de manufactura se enfrenta al desafío de integrar sistemas heterogéneos utilizados en diferentes etapas del proceso de producción. Cada sistema controla un componente específico del proceso y utiliza tecnologías diversas, como sistemas de control de procesos, sistemas de gestión de calidad y sistemas de monitoreo de maquinaria. La falta de interoperabilidad entre estos sistemas impide una comunicación eficiente y la recopilación de datos en tiempo real. Los datos críticos para la toma de decisiones están dispersos en silos, lo que dificulta la optimización de la producción y la detección temprana de problemas. Se decide implementar una arquitectura basada en CORBA para facilitar la comunicación entre los sistemas heterogéneos…
-
CORBA
CORBA, “Common Object Request Broker Architecture” (Arquitectura Común de Buscador de Objetos), proporciona un marco para el desarrollo de sistemas distribuidos que pueden involucrar operaciones concurrentes. Aunque no se centra exclusivamente en la programación concurrente, su capacidad para facilitar la comunicación y la interoperabilidad entre objetos distribuidos contribuye a la construcción de sistemas que operan de manera concurrente en entornos distribuidos. Este es un ejemplo sencillo de cómo usar CORBA en un entorno distribuido. En este caso, se debe de imaginar un sistema donde tenemos un servidor que proporciona servicios matemáticos simples y un cliente que utiliza estos servicios. Definición de la Interfaz en IDL Se debe de comenzar definiendo…
-
Simulación de Dinámica de Fluidos con CUDA
Conceptos de CUDA Aplicados Aplicación en la Industria En la industria aeroespacial, la simulación de dinámica de fluidos es esencial para el diseño y análisis de aerodinámica de aeronaves. El estudio de cómo el aire fluye alrededor de un avión es crucial para optimizar el rendimiento y la eficiencia aerodinámica. Implementación En lugar de depender exclusivamente de la potencia de la CPU, donde las simulaciones pueden llevar mucho tiempo, se implementa una solución de simulación de dinámica de fluidos utilizando CUDA para acelerar significativamente los cálculos en la GPU. El caso se divide en celdas o elementos discretos, y CUDA permite realizar cálculos simultáneos para cada uno de estos elementos.…
-
CUDA
CUDA (Compute Unified Device Architecture) es una tecnología de NVIDIA, por lo que si tienes una tarjeta gráfica de otro fabricante, como AMD, no sería compatible con CUDA. Se debe explorar alternativas, como OpenCL, que es un estándar abierto de programación para plataformas heterogéneas. CUDA ha sido ampliamente adoptado en la comunidad de desarrollo, especialmente en áreas que se benefician de la capacidad de procesamiento masivamente paralelo de las GPUs. Además, otras compañías y proyectos han desarrollado tecnologías similares, pero CUDA es específico de las GPUs de NVIDIA. A continuación se tiene un ejemplo sencillo en CUDA que realiza la suma de dos vectores. Este ejemplo se puede ejecutar en…
-
Ejercicios | programación distribudia
Estos ejercicios están diseñados para abordar diversos aspectos, desde la comunicación hasta la coordinación de procesos. Se puede usar cualquier lenguaje de programación. Ejercicios Estos ejercicios están diseñados para proporcionar práctica en conceptos clave de programación distribuida y concurrente. Si eres nuevo en la programación distribuida, es posible que encuentres ciertos desafíos al principio, pero estos ejercicios están diseñados para ser accesibles y educativos. Se recomienda abordarlos en orden y, si es necesario, buscar recursos adicionales o consultar la documentación relacionada con las tecnologías que se este utilizando.
-
Distribuida
la programación distribuida es esencial en entornos modernos donde la escalabilidad, la redundancia y la tolerancia a fallos son fundamentales. Permite a los desarrolladores construir sistemas más flexibles y eficientes al aprovechar los recursos distribuidos de manera efectiva. A continuación se muestra unos ejemplos de su aplicación Ejemplo: Calculo distribuido. En este ejemplo simple de programación distribuida se utiliza Python y la biblioteca multiprocessing. Se simula un cálculo distribuido de la suma de elementos en una lista entre varios procesos en un sistema multicore. Código Explicación Este código divide una lista de números en partes y calcula la suma de cada parte en paralelo utilizando múltiples procesos. Cada proceso suma…
-
MPI
MPI es particularmente útil en el ámbito de la programación concurrente cuando se trata de desarrollar aplicaciones que requieren un alto rendimiento y escalabilidad en sistemas distribuidos. aquí tienes un ejemplo simple de cómo usar MPI en C para realizar una suma colectiva en un clúster de procesadores: Código Este programa MPI realiza la inicialización del entorno MPI, obtiene el rango y el tamaño del comunicador, y luego define un conjunto de números locales en cada proceso. Luego, utiliza la función MPI_Allreduce para realizar una suma colectiva de estos números y obtener la suma global, que se imprime en cada proceso. Para compilar y ejecutar el programa en un clúster…
-
Semáforo
Semáforo son una herramienta versátil en programación concurrente, proporcionando mecanismos efectivos para controlar el acceso a recursos compartidos y coordinar la ejecución de hilos, lo que contribuye a la escritura de programas concurrentes seguros y eficientes. Aquí tienes un ejemplo simple de cómo se pueden utilizar semáforos en Python, utilizando la biblioteca threading En este ejemplo, se crea un semáforo binario (sem) con un valor inicial de 1. La función incrementar representa una sección crítica donde se incrementa la variable contador. Antes de entrar en la sección crítica, se adquiere el semáforo (sem.acquire()), y después de salir de la sección crítica, se libera el semáforo (sem.release()). La operación acquire actúa…
-
Monitor
Los monitor son una herramienta valiosa en programación concurrente y han sido ampliamente adoptados en diversos contextos para gestionar la concurrencia de manera segura y eficiente. Suponga que se quiere implementar un contador que puede ser incrementado y decrementado por varios hilos simultáneamente, pero se debe asegurar de que estas operaciones sean atómicas y que siempre se respete la exclusión mutua. Codificación Explicación En este ejemplo, la clase MonitorContador encapsula el contador y los métodos (incrementar, decrementar, obtener_valor) que operan sobre él. Se utiliza un cerrojo (mutex) para garantizar la exclusión mutua alrededor de las operaciones críticas. Los dos hilos (hilo_aumentar y hilo_disminuir) realizan incrementos y decrementos en paralelo, pero…