Files
TDT4200/exercise2/Makefile

55 lines
1.3 KiB
Makefile

CC := gcc
CFLAGS := -Wall -Wextra -std=c17
SRC := mandel_mpi.c
TARGET := $(SRC:.c=) # filename without .c extension
OUTDIR := out
OUT := $(OUTDIR)/$(TARGET)
ARGS := 1 # yes/no save image
NBENCH := 3 # how many times to run the command for benchmark
NPROC := 3 # how many mpi processes
# usage:
# you can run `make parallel-time` or `make time SRC=mandel_cpu.c` to benchmark.
# using the provided python tool.
.PHONY: all clean run parallel-build parallel-run parallel-time time show
all: clean parallel-build parallel-run show
clean:
rm -rf $(OUTDIR)/*
show: $(OUTDIR)/mandel.bmp
feh $<
pdf: report.md
pandoc report.md -o $(OUTDIR)/report.pdf --pdf-engine=typst
zip: $(OUTDIR)/report.pdf Makefile mandel_mpi.c bench.py
zip $(OUTDIR)/handin.zip $^
unzip: $(OUTDIR)/handin.zip
unzip $< -d $(OUTDIR)/handin
# --- cpu-based ---
$(OUT): $(SRC)
$(CC) $(CFLAGS) -o $(OUT) $<
run: $(OUT)
cd $(OUTDIR) && ./$(TARGET) $(ARGS)
# use with mandel_cpu.c as SRC to benchmark non-parallel
time: $(OUT)
python3 bench.py './$(OUT) 0' $(NBENCH)
# --- parallel ---
parallel-build: $(SRC)
mpicc -o $(OUT) $(SRC)
parallel-run: $(SRC)
cd $(OUTDIR) && mpirun -np $(NPROC) $(TARGET) $(ARGS)
# use with mandel_mpi.c as SRC to benchmark non-parallel
parallel-time: parallel-build
python3 bench.py 'cd $(OUTDIR) && mpirun -np $(NPROC) $(TARGET) 0' $(NBENCH)