René Cano
Todos los proyectos

Núm. 83er lugar · Expo Ingenierías 2025

Visualizador Fork/Join de DAGs

Grafos de precedencia y programación paralela

Mi rol
Autor del repositorio
Periodo
Ago – dic 2025

El problema

En programación paralela, un grafo de precedencia indica qué tareas pueden correr al mismo tiempo y cuáles tienen que esperar a otras. Pasar ese grafo a instrucciones FORK/JOIN a mano es mecánico y fácil de equivocar, y en papel cuesta ver cómo avanzan las ramas.

Qué construí

Un visualizador en JavaFX, 1,080 líneas de Java en 4 clases, que obtuvo el 3er lugar en la categoría Desarrollo de prototipo digital de la Expo Ingenierías agosto-diciembre 2025.

  • Carga grafos escritos como matrices de adyacencia. El repositorio trae 4 ejemplos, de 3 a 11 nodos.
  • Dibuja el grafo por niveles: cada nodo queda en el nivel de su camino más largo desde una raíz, así las tareas que pueden correr juntas quedan en la misma fila.
  • Genera pseudocódigo FORK/JOIN: un nodo con más de 1 sucesor abre un FORK, uno con más de 1 predecesor es un JOIN con su contador (CONTn := ramas), y las ramas se enlazan con GOTO. Es pseudocódigo, no código de ForkJoinPool de Java.
  • Anima la ejecución: resalta los nodos y las líneas del pseudocódigo a medida que avanza cada rama.

Arquitectura

Diagrama de flujo: un archivo de texto con la matriz de adyacencia se carga como grafo; el grafo pasa por un layout por niveles según el camino más largo y por un generador de pseudocódigo con FORK, JOIN, GOTO y contadores; ambos resultados se muestran en una vista JavaFX que anima la ejecución resaltando nodos y líneas del pseudocódigo por rama.

Resultados

El reconocimiento de la Expo es el único resultado externo; no hay métricas de uso. Publiqué el código en GitHub el 10 de diciembre de 2025, en 6 commits.

Límites conocidos

  • No valida ciclos: si el grafo tiene uno, el generador no termina o falla (ForkJoinGenerator.java:69-75).
  • Las rutas a los archivos de grafos son rutas absolutas de Windows, así que no corre en otra máquina sin editar el código.
  • El README promete validación de grafos y generación de código Java Fork/Join, y el código no hace ninguna de las dos. Hay que corregirlo.
  • No hay tests.

Links