# El Montecarlo del rectificador, para el procesador o para una GPU (LEEME.md).
#   make            en los nucleos del procesador (OpenMP)
#   make gpu        en una GPU NVIDIA con gcc: hace falta el paquete
#                   gcc-13-offload-nvptx y el controlador de NVIDIA
#   make gpu-nvc    en una GPU NVIDIA con nvc (NVIDIA HPC SDK)
#   make gpu-amd    en una GPU AMD con gcc: paquete gcc-13-offload-amdgcn y el
#                   runtime HSA de ROCm. AMD_ARCH elige el chip: gfx906 (Radeon
#                   Pro VII, Instinct MI50/MI60), gfx908 (MI100), gfx90a
#                   (MI210/MI250), gfx1100 (RX 7900 XTX)
#   make compara    la copia nominal contra siru (calcula en el PATH)
#   make prueba     prueba-gpu.sh: la GPU de esta maquina contra el procesador
#   make cuaderno   cuaderno-gpu.ipynb, para subir a Kaggle o Colab
#   make paquete    montecarlo-gpu.tar.gz, para copiar a una maquina alquilada

CFLAGS = -O2 -Wall

montecarlo: montecarlo.c
	$(CC) $(CFLAGS) -fopenmp -o $@ $< -lm

gpu: montecarlo.c
	$(CC) $(CFLAGS) -fopenmp -foffload=nvptx-none -foffload-options=-lm -DGPU -o montecarlo-gpu $< -lm

AMD_ARCH = gfx906

gpu-amd: montecarlo.c
	$(CC) $(CFLAGS) -fopenmp -foffload=amdgcn-amdhsa -foffload-options="-march=$(AMD_ARCH) -lm" -DGPU -o montecarlo-gpu $< -lm

gpu-nvc: montecarlo.c
	nvc -O2 -mp=gpu -DGPU -o montecarlo-gpu $< -lm

compara: montecarlo
	./montecarlo 1 > /dev/null
	rm -f siru.csv
	perl ../../bin/siru --salida siru.csv rectificador.d
	python3 compara.py siru.csv nominal.csv

prueba:
	./prueba-gpu.sh

cuaderno: cuaderno-gpu.ipynb

cuaderno-gpu.ipynb: hacer-cuaderno.py montecarlo.c prueba-gpu.sh
	python3 hacer-cuaderno.py

PAQUETE = montecarlo.c prueba-gpu.sh Makefile rectificador.d compara.py LEEME.md INFORME-GPU.md cuaderno-gpu.ipynb

paquete: cuaderno-gpu.ipynb
	tar czf montecarlo-gpu.tar.gz $(PAQUETE)

clean:
	rm -f montecarlo montecarlo-gpu montecarlo-gpu.tar.gz cpu.txt gpu.txt nominal-cpu.csv resultado-gpu.txt nominal.csv siru.csv siru.informe siru.log rectificador.informe rectificador.log rectificador.simul

.PHONY: gpu gpu-nvc gpu-amd compara prueba cuaderno paquete clean
