• 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.

  • post

    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…

  • post

    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…

  • post

    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…

  • post

    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.

  • post

    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…

  • post

    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…

  • post

    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…

  • post

    Exclusión, sincronización y región

    La programación concurrente, esencial en entornos de desarrollo modernos, involucra la ejecución simultánea de múltiples hilos o procesos para mejorar la eficiencia y la capacidad de respuesta de un programa. Conceptos clave como la exclusión mutua, las regiones críticas y la sincronización juegan un papel fundamental. La exclusión mutua asegura que solo un hilo acceda a un recurso compartido en un momento dado, evitando así condiciones de carrera y garantizando la coherencia de los datos. Las regiones críticas, por su parte, son secciones de código donde se accede y modifica información compartida, y se implementan para garantizar que estas operaciones críticas se realicen de manera atómica, sin interferencia de otros…