Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions tp/informe/pc2/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
# Artefactos de LaTeX: el PDF se regenera con `latexmk`.
build/

# Artefactos generados cuando LaTeX compila directamente en esta carpeta.
/*.aux
/*.bbl
/*.bcf
/*.blg
/*.fdb_latexmk
/*.fls
/*.log
/*.pdf
/*.run.xml
/*.synctex.gz
/*.toc
75 changes: 59 additions & 16 deletions tp/informe/pc2/compilar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Compila el informe de la PC2: regenera lo generado y corre latexmk.
#
# ./compilar.sh # build/main.pdf
# ./compilar.sh --open # compila y abre el PDF
# ./compilar.sh -c # limpia (latexmk -c)
#
# En Fedora, latexmk y biber de TeX Live necesitan perl-sigtrap y libxcrypt-compat.
Expand All @@ -10,28 +11,70 @@
set -euo pipefail
cd "$(dirname "$0")"

deps=build/deps
export LD_LIBRARY_PATH="$PWD/$deps/usr/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PERL5LIB="$PWD/$deps/usr/share/perl5${PERL5LIB:+:$PERL5LIB}"
abrir=false
case "${1:-}" in
"") ;;
-c|--clean)
latexmk -c
Comment on lines +17 to +18

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (broader_impact): La opción -c/--clean ejecuta latexmk -c antes de configurar LD_LIBRARY_PATH y PERL5LIB o descargar las dependencias Fedora, por lo que la limpieza falla en Fedora cuando latexmk necesita perl-sigtrap o libxcrypt-compat instalados solamente en build/deps.

Triggers: Cuando se ejecuta ./compilar.sh -c en Fedora con las dependencias locales de build/deps.

Suggested fix: Procesar la configuración de dependencias y verificar latexmk antes de ejecutar la rama de limpieza, o aplicar esas variables de entorno también a latexmk -c.

exit 0
;;
-o|--open) abrir=true ;;
*)
echo "uso: $0 [-c|--clean|-o|--open]" >&2
exit 2
;;
esac

falta_sigtrap() { ! perl -e 'use sigtrap' 2>/dev/null; }
falta_libcrypt() { ! ldconfig -p | grep -q 'libcrypt\.so\.1 ' && [ ! -e "$deps/usr/lib64/libcrypt.so.1" ]; }
# Estas dependencias adicionales solo son necesarias en Fedora. En macOS se usa
# directamente la instalación local de MacTeX/TeX Live.
if [ "$(uname -s)" = "Linux" ]; then
deps=build/deps
export LD_LIBRARY_PATH="$PWD/$deps/usr/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PERL5LIB="$PWD/$deps/usr/share/perl5${PERL5LIB:+:$PERL5LIB}"

if falta_sigtrap || falta_libcrypt; then
if [ ! -d "$deps/usr" ]; then
echo "→ faltan perl-sigtrap o libxcrypt-compat; se extraen en $deps (sin root)" >&2
mkdir -p "$deps"
( cd "$deps" && dnf download -q perl-sigtrap libxcrypt-compat \
&& rm -f *.i686.rpm && for r in *.rpm; do rpm2cpio "$r" | cpio -idm --quiet; done && rm -f *.rpm )
falta_sigtrap() { ! perl -e 'use sigtrap' 2>/dev/null; }
falta_libcrypt() {
! command -v ldconfig >/dev/null 2>&1 ||
{ ! ldconfig -p | grep -q 'libcrypt\.so\.1 ' && [ ! -e "$deps/usr/lib64/libcrypt.so.1" ]; }
}

if falta_sigtrap || falta_libcrypt; then
if [ ! -d "$deps/usr" ]; then
if ! command -v dnf >/dev/null 2>&1; then
echo "error: faltan dependencias de TeX Live y no está disponible dnf" >&2
exit 1
fi
echo "→ faltan perl-sigtrap o libxcrypt-compat; se extraen en $deps (sin root)" >&2
mkdir -p "$deps"
( cd "$deps" && dnf download -q perl-sigtrap libxcrypt-compat \
&& rm -f -- *.i686.rpm && for r in *.rpm; do rpm2cpio "$r" | cpio -idm --quiet; done && rm -f -- *.rpm )
fi
fi
fi

if [ "${1:-}" = "-c" ]; then
latexmk -c
exit 0
fi
command -v latexmk >/dev/null 2>&1 || {
echo "error: no se encontró latexmk; instala MacTeX o BasicTeX" >&2
exit 1
}

./generar-historial.sh
if ! ./generar-historial.sh; then
if [ -s generado/historial.tex ]; then
echo "aviso: no se pudo actualizar el historial; se conserva generado/historial.tex" >&2
else
echo "error: no existe un historial anterior para continuar" >&2
exit 1
fi
fi
Comment on lines +60 to +67

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Cualquier fallo de generar-historial.sh se convierte en una advertencia y la compilación continúa usando el historial anterior si generado/historial.tex no está vacío, de modo que el PDF puede presentar conteos y commits obsoletos sin que el build falle.

Triggers: Cuando el historial no puede regenerarse por un tag faltante, una configuración Git inválida, permisos o refs remotas desactualizadas, y ya existe un archivo generado previamente.

Suggested fix: Limitar el fallback a errores explícitamente recuperables, como una falla de red con refs válidas, y hacer fallar la compilación ante errores de validación o generación.

Suggested change
if ! ./generar-historial.sh; then
if [ -s generado/historial.tex ]; then
echo "aviso: no se pudo actualizar el historial; se conserva generado/historial.tex" >&2
else
echo "error: no existe un historial anterior para continuar" >&2
exit 1
fi
fi
./generar-historial.sh

python3 ../../scripts/tablas_informe.py --salida generado
latexmk
echo "→ build/main.pdf"

if $abrir; then
if [ "$(uname -s)" = "Darwin" ]; then
open build/main.pdf
elif command -v xdg-open >/dev/null 2>&1; then
xdg-open build/main.pdf
else
echo "aviso: abre manualmente $PWD/build/main.pdf" >&2
fi
fi
75 changes: 59 additions & 16 deletions tp/informe/tp/compilar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Compila el informe del TP: regenera lo generado y corre latexmk.
#
# ./compilar.sh # build/main.pdf
# ./compilar.sh --open # compila y abre el PDF
# ./compilar.sh -c # limpia (latexmk -c)
#
# En Fedora, latexmk y biber de TeX Live necesitan perl-sigtrap y libxcrypt-compat.
Expand All @@ -10,28 +11,70 @@
set -euo pipefail
cd "$(dirname "$0")"

deps=build/deps
export LD_LIBRARY_PATH="$PWD/$deps/usr/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PERL5LIB="$PWD/$deps/usr/share/perl5${PERL5LIB:+:$PERL5LIB}"
abrir=false
case "${1:-}" in
"") ;;
-c|--clean)
latexmk -c
exit 0
;;
-o|--open) abrir=true ;;
*)
echo "uso: $0 [-c|--clean|-o|--open]" >&2
exit 2
;;
esac

falta_sigtrap() { ! perl -e 'use sigtrap' 2>/dev/null; }
falta_libcrypt() { ! ldconfig -p | grep -q 'libcrypt\.so\.1 ' && [ ! -e "$deps/usr/lib64/libcrypt.so.1" ]; }
# Estas dependencias adicionales solo son necesarias en Fedora. En macOS se usa
# directamente la instalación local de MacTeX/TeX Live.
if [ "$(uname -s)" = "Linux" ]; then
deps=build/deps
export LD_LIBRARY_PATH="$PWD/$deps/usr/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PERL5LIB="$PWD/$deps/usr/share/perl5${PERL5LIB:+:$PERL5LIB}"

if falta_sigtrap || falta_libcrypt; then
if [ ! -d "$deps/usr" ]; then
echo "→ faltan perl-sigtrap o libxcrypt-compat; se extraen en $deps (sin root)" >&2
mkdir -p "$deps"
( cd "$deps" && dnf download -q perl-sigtrap libxcrypt-compat \
&& rm -f *.i686.rpm && for r in *.rpm; do rpm2cpio "$r" | cpio -idm --quiet; done && rm -f *.rpm )
falta_sigtrap() { ! perl -e 'use sigtrap' 2>/dev/null; }
falta_libcrypt() {
! command -v ldconfig >/dev/null 2>&1 ||
{ ! ldconfig -p | grep -q 'libcrypt\.so\.1 ' && [ ! -e "$deps/usr/lib64/libcrypt.so.1" ]; }
}

if falta_sigtrap || falta_libcrypt; then
if [ ! -d "$deps/usr" ]; then
if ! command -v dnf >/dev/null 2>&1; then
echo "error: faltan dependencias de TeX Live y no está disponible dnf" >&2
exit 1
fi
echo "→ faltan perl-sigtrap o libxcrypt-compat; se extraen en $deps (sin root)" >&2
mkdir -p "$deps"
( cd "$deps" && dnf download -q perl-sigtrap libxcrypt-compat \
&& rm -f -- *.i686.rpm && for r in *.rpm; do rpm2cpio "$r" | cpio -idm --quiet; done && rm -f -- *.rpm )
fi
fi
fi

if [ "${1:-}" = "-c" ]; then
latexmk -c
exit 0
fi
command -v latexmk >/dev/null 2>&1 || {
echo "error: no se encontró latexmk; instala MacTeX o BasicTeX" >&2
exit 1
}

./generar-historial.sh
if ! ./generar-historial.sh; then
if [ -s generado/historial.tex ]; then
echo "aviso: no se pudo actualizar el historial; se conserva generado/historial.tex" >&2
else
echo "error: no existe un historial anterior para continuar" >&2
exit 1
fi
fi
python3 ../../scripts/tablas_informe.py --salida generado
latexmk
echo "→ build/main.pdf"

if $abrir; then
if [ "$(uname -s)" = "Darwin" ]; then
open build/main.pdf
elif command -v xdg-open >/dev/null 2>&1; then
xdg-open build/main.pdf
else
echo "aviso: abre manualmente $PWD/build/main.pdf" >&2
fi
fi
16 changes: 12 additions & 4 deletions tp/informe/tp/generado/historial.tex

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 21 additions & 1 deletion tp/informe/tp/secciones/conclusiones/dayana.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,24 @@
% - En lo que hiciste tú (tu PR), ¿qué harías distinto?
% Para compilar y ver el PDF: cd tp/informe/tp && ./compilar.sh (sale en build/main.pdf).
\subsubsection*{\nombreDayana}
\pendiente{conclusiones y recomendaciones de \nombreDayana}

Este trabajo me ayudó a entender que implementar concurrencia se trata más allá de crear
goroutines, es importante decidir qué información comparte cada una y cuándo deben sincronizarse. Evaluando la
correspondencia entre la implementación en Go y el modelo Promela, comprendí mejor
el papel del \emph{worker pool}, los acumuladores privados y la barrera: los workers pueden procesar
los bloques en cualquier orden, pero el coordinador no debe actualizar los centroides hasta que
todos hayan terminado. También aprendí que un modelo debe conservar las decisiones esenciales del
programa sin copiar todos sus detalles. En este caso, fue posible estudiar la sincronización sin
representar los cálculos numéricos de K-means y comprobar que los puntos no se pierdan y que los
centroides no se escriban mientras están siendo leídos.

Me sorprendió que aumentar los workers no produzca una mejora proporcional: con cuatro se obtuvo
un speedup de \cifra{speedup-p4}$\times$ y con ocho de \cifra{speedup-p8}$\times$, pero con una menor
eficiencia. Esto demuestra que la coordinación y los núcleos físicos también limitan el rendimiento.
Como el modelo de Spin usa un dominio pequeño y no representa el cierre del pool, considero que sus
resultados respaldan el diseño, pero deben complementarse con las pruebas de la implementación en
Go. Para mejorar el trabajo, recomendaría modelar el cierre de las goroutines y realizar mediciones
con más datos y en equipos con más núcleos físicos. Si volviera a realizar mi aporte, incluiría
desde el inicio una tabla que relacione cada elemento de Go con su abstracción en Promela y con la
propiedad que permite verificar, dado que esa trazabilidad facilitaría comprender por qué el modelo sí
representa el comportamiento concurrente que se busca validar.
Loading