HIPCC=hipcc BUILD=./build SRC=./src RESULTS=./results #rocshmem_DIR=${HOME}/rocshmem #MPI_HOME=${HOME}/mpich/install NCCL_HOME=${HOME}/rccl/build MPI_FLAGS=-lmpi -lhsa-runtime64 -lrt -L${MPI_HOME}/lib -fgpu-rdc SHMEM_FLAGS=${MPI_FLAGS} -lmlx5 -libverbs RCCL_FLAGS=${MPI_FLAGS} -Wl,-rpath,$(NCCL_HOME) -L${NCCL_HOME} -lrccl .SILENT: run_scan extract_scan run_sort run_sort_shmem run_sort_rccl extract_sort all: ${BUILD}/sort_shmem ${BUILD}/sort_rccl ${BUILD}/sort_mpi ${BUILD}/sort_shmem: ${BUILD}/sort_shmem.o ${rocshmem_DIR}/lib/librocshmem.a ${HIPCC} $^ ${SHMEM_FLAGS} -o $@ ${BUILD}/sort_shmem.o: ${SRC}/sort_shmem.cu ${HIPCC} $^ -I${rocshmem_DIR}/include -I${MPI_HOME}/include -fgpu-rdc -o $@ -c ${BUILD}/sort_rccl: ${BUILD}/sort_rccl.o ${HIPCC} $^ ${RCCL_FLAGS} -o $@ ${BUILD}/sort_rccl.o: ${SRC}/sort_rccl.cu ${HIPCC} $^ -I$(NCCL_HOME)/include/rccl -I${MPI_HOME}/include -fgpu-rdc -o $@ -c ${BUILD}/sort_mpi: ${BUILD}/sort_mpi.o ${HIPCC} $^ ${MPI_FLAGS} -o $@ ${BUILD}/sort_mpi.o: ${SRC}/sort_mpi.cu ${HIPCC} $^ -I${MPI_HOME}/include -fgpu-rdc -o $@ -c RO_FLAGS=ROC_SHMEM_RO=1 RO_NET_CPU_QUEUE=1 ITERS?=0 1 2 3 4 5 6 7 8 9 TIMEOUT=1m HOSTS=sv-pdp-0,sv-pdp-1,sv-pdp-2,sv-pdp-3 SCAN_SIZE=1024 PES=2 4 8 12 16 PES_RCCL=2 4 8 TYPE ?= Naive LABEL ?= naive PARAM ?= 0 NUM_PES ?= 2 run_sort_shmem: ${BUILD}/sort_shmem printf "${TYPE} ";\ echo "" > ${RESULTS}/sort_${LABEL}_${NUM_PES}.out; \ for j in ${ITERS}; do \ ${RO_FLAGS} timeout ${TIMEOUT} mpirun -np ${NUM_PES} -hosts ${HOSTS} ${BUILD}/sort_shmem ${PARAM} >> ${RESULTS}/sort_${LABEL}_${NUM_PES}.out;\ done; run_sort_rccl: ${BUILD}/sort_rccl printf "RCCL "; \ echo "" > ${RESULTS}/sort_rccl_${NUM_PES}.out; \ for j in ${ITERS}; do \ timeout ${TIMEOUT} mpirun -np ${NUM_PES} -hosts ${HOSTS} ${BUILD}/sort_rccl >> ${RESULTS}/sort_rccl_${NUM_PES}.out;\ done; run_sort_mpi: ${BUILD}/sort_rccl printf "MPI2 "; \ echo "" > ${RESULTS}/sort_mpi2_${NUM_PES}.out; \ for j in ${ITERS}; do \ timeout ${TIMEOUT} mpirun -np ${NUM_PES} -hosts ${HOSTS} ${BUILD}/sort_mpi >> ${RESULTS}/sort_mpi2_${NUM_PES}.out;\ done; run_sort: ${BUILD}/sort_shmem ${BUILD}/sort_rccl for i in ${PES}; do \ printf "%d " $$i; \ $(MAKE) --no-print-directory run_sort_shmem TYPE=NAIVE LABEL=naive PARAM=0 NUM_PES=$${i}; \ $(MAKE) --no-print-directory run_sort_shmem TYPE=MPI LABEL=mpi PARAM=1 NUM_PES=$${i}; \ $(MAKE) --no-print-directory run_sort_shmem TYPE=GCEN LABEL=gcen PARAM=2 NUM_PES=$${i}; \ $(MAKE) --no-print-directory run_sort_shmem TYPE=GCEN2 LABEL=gcen2 PARAM=3 NUM_PES=$${i}; \ $(MAKE) --no-print-directory run_sort_mpi NUM_PES=$${i}; \ printf "\n";\ done for i in ${PES_RCCL}; do \ $(MAKE) --no-print-directory run_sort_rccl NUM_PES=$${i}; \ printf "%d " $$i; \ done $(MAKE) extract_sort extract_sort: printf "Sort latency\n" printf "PROCS\tType\tRuns" for i in ${PES}; do \ for type in mpi mpi2 rccl naive gcen gcen2; do\ printf "\n%d\t$${type}\t" $$i; \ file=${RESULTS}/sort_$${type}_$${i}.out;\ latency=$$(grep -E "Avg time" $${file}); \ grep -E "Avg time" $${file} | while read -r j; do\ val=$$(echo $$j | grep -oE -m1 "[0-9]+\.[0-9]+");\ printf "%s\t" $${val};\ done; \ done;\ done printf "\n" clean: rm build/*;