-
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…
-
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…
-
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…
-
Hilos
Ejercicios Codificación Solución 1: Contador Concurrente en Python Explicación Solución 2: Imprimir en Orden en Python Explicación Solución 3: Problema de Productor-Consumidor en Python Explicación
-
Programación Concurrente
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.
-
Procesando imágenes
Una de las características de la programación concurrente es que se puede realizar múltiples procesos al mismo tiempo. Para ello se describe un script escrito en python donde se procesan varias imágenes en las que se aplicará filtro de blanco y negro y serán guardado en otra ruta. Requerimientos Script Explicación Cada imagen se procesa en un hilo separado, lo que permite procesar varias imágenes al mismo tiempo sin tener que esperar a que una imagen termine de procesarse antes de comenzar con la siguiente. La cantidad de imágenes que puedes procesar simultáneamente depende en parte de la implementación específica de la biblioteca concurrente y de la capacidad de tu…
-
Geométrica bidimensional
Las transformaciones Geométricas Bidimensional, se implementan utilizando algoritmos específicos y se aplican a cada vértice del objeto que se está transformando. Estas transformaciones son la base para la construcción de escenas y representaciones visuales en aplicaciones que involucran gráficos y diseño. A continuación se muestra un ejemplo. Requerimientos del ejemplo Código Explicación Importación de bibliotecas: Inicialización de Pygame: Configuración de la ventana: Definición de colores y punto original: Funciones de transformación: Bucle principal: Este código muestra cómo realizar las operaciones de transformación geométricas bidimensionales ( traslación, rotación y escala) en un objeto gráfico bidimensional utilizando Pygame.
-
Caracteres
Cada uno de los caracteres tiene una representación gráfica asociada en una fuente específica, y los programas de graficación pueden utilizar esta información para mostrar texto en una variedad de estilos y tamaños. A continuación se muestra un ejemplo donde se visualiza un texto. Requerimientos del ejemplo Se debe tener instalada la librería pygame para ello se hace desde la terminal con la siguiente instrucción: Código Explación El código crea una ventana, muestra los caracteres “Hola, Mundo!” en ella y actualiza continuamente la ventana hasta que el usuario la cierra.
-
Llenado de área
El llenado de área es fundamental en la creación de imágenes y gráficos por computadora, ya que permite dar forma y color a objetos y representar de manera realista una amplia variedad de elementos visuales en aplicaciones gráficas y de diseño. Su implementación varía según la plataforma y el tipo de gráficos que se deseen crear. A continuación se muestra un ejemplo, dando textura. Requerimiento de ejemplo Tener un archivo de textura de madera (“wood_texture.png” en este caso) en el mismo directorio donde se encuentra el script o ajusta la ruta en consecuencia. Tener instalado la libreria pygame, se puede realizar con el siguiente comando Código de ejemplo Explicando el…