xref: /petsc/src/benchmarks/streams/makefile (revision 6c5693054f5123506dab0f5da2d352ed973d0e50)
1cdb0f33dSPierre Jolivet-include ../../../petscdir.mk
2f97672e5SBarry Smith
3d8c74875SBarry SmithMANSEC        = Sys
49f0612e4SBarry Smith#CFLAGS        = -mcmodel=large
59f0612e4SBarry Smith# The CFLAGS above allows very large global arrays
6d8c74875SBarry Smith
7af0996ceSBarry Smithinclude ${PETSC_DIR}/lib/petsc/conf/variables
8af0996ceSBarry Smithinclude ${PETSC_DIR}/lib/petsc/conf/rules
9d8c74875SBarry Smith
10dc0529c6SBarry SmithBasicVersion: BasicVersion.o
1180094aa7SBarry Smith	-@${CLINKER} -o BasicVersion BasicVersion.o ${PETSC_LIB}
1280094aa7SBarry Smith	@${RM} -f BasicVersion.o
13d8c74875SBarry Smith
14dc0529c6SBarry SmithMPIVersion: MPIVersion.o
15d3ae85c4SBarry Smith	-@${CLINKER} -o MPIVersion MPIVersion.o ${PETSC_LIB}
16d3ae85c4SBarry Smith	@${RM} -f MPIVersion.o
17d3ae85c4SBarry Smith
1819816777SMarkCUDAVersion: CUDAVersion.o
1919816777SMark	-@${CLINKER} -o CUDAVersion CUDAVersion.o ${PETSC_LIB}
2019816777SMark	@${RM} -f CUDAVersion.o
2119816777SMark
22dc0529c6SBarry SmithOpenMPVersion: OpenMPVersion.o
234198fb66SBarry Smith	-@${CLINKER} -o OpenMPVersion OpenMPVersion.o
2480094aa7SBarry Smith	@${RM} -f OpenMPVersion.o
25d8c74875SBarry Smith
269f0612e4SBarry SmithOpenMPVersionLikeMPI: OpenMPVersionLikeMPI.o
279f0612e4SBarry Smith	-@${CLINKER} -o OpenMPVersionLikeMPI OpenMPVersionLikeMPI.o
289f0612e4SBarry Smith	@${RM} -f OpenMPVersionLikeMPI.o
299f0612e4SBarry Smith
30dc0529c6SBarry SmithSSEVersion: SSEVersion.o
31b8a1809bSJed Brown	-${CLINKER} -o $@ $< ${PETSC_LIB}
32b8a1809bSJed Brown	${RM} -f $<
33d3ae85c4SBarry Smith
34dc0529c6SBarry SmithPthreadVersion: PthreadVersion.o
3593af4de9SShri Abhyankar	-@${CLINKER} -o PthreadVersion PthreadVersion.o ${PETSC_LIB}
3693af4de9SShri Abhyankar	@${RM} -f PthreadVersion.o
37b8a1809bSJed Brown
38c6bff371SJunchao Zhang# If not set by users, use a binding that's good for both MPICH and Open MPI
39c6bff371SJunchao ZhangMPI_BINDING ?= -map-by numa -bind-to core
40c6bff371SJunchao Zhang
41dc32dc79SSatish Balay# make streams [NPMAX=integer_number_of_MPI_processes_to_use] [MPI_BINDING='binding options']
424198fb66SBarry Smithmpistream:  MPIVersion
435f27b2e0SBarry Smith	@if [ "${NPMAX}foo" = "foo" ]; then echo "---------"; printf " Run with [PETSC_OPTIONS=-process_view] make streams NPMAX=<integer number of MPI processes> [MPI_BINDING='-bind-to core -map-by numa']\n or       [I_MPI_PIN_PROCESSOR_LIST=:map=scatter] [PETSC_OPTIONS=-process_view] make streams NPMAX=<integer number of MPI processes>\n"; exit 1 ; fi
44a6cca095SBarry Smith	-@printf "" > scaling.log
45c6bff371SJunchao Zhang	-@printf "Running streams with '${MPIEXEC} ${MPI_BINDING} ${MPI_BINDING_VIEW} -n <np> ./MPIVersion' using 'NPMAX=${NPMAX}'\n"
46*a8cf87e0SJunchao Zhang	-@printf "(Hint: To change MPI process binding, use env var MPI_BINDING. To visualize the binding, with Open MPI, use another env var, MPI_BINDING_VIEW=-display-map, see 'mpiexec --help binding | grep mapping';"
47*a8cf87e0SJunchao Zhang	-@printf " with MPICH, use HYDRA_TOPO_DEBUG=1 instead, see 'mpiexec -bind-to -help')\n"
48372a53e9SSatish Balay	-@i=0; while [ $${i} -lt ${NPMAX} ]; do i=`expr $${i} + 1`; \
49c6bff371SJunchao Zhang	  ${MPIEXEC} ${MPI_BINDING} ${MPI_BINDING_VIEW} -n $${i} ./MPIVersion | tee -a scaling.log; \
50d3ae85c4SBarry Smith        done
51d8c74875SBarry Smith	-@echo "------------------------------------------------"
524198fb66SBarry Smith	-@${PYTHON} process.py MPI fileoutput
534198fb66SBarry Smith
5419816777SMark# Works on SUMMIT
5519816777SMarkcudastreamjsrun:  CUDAVersion
5619816777SMark	@if [ "${NPMAX}foo" = "foo" ]; then echo "---------"; printf " Run with [PETSC_OPTIONS=-process_view] make streams NPMAX=<integer number of MPI processes> [MPI_BINDING='-bind-to core -map-by numa']\n or       [I_MPI_PIN_PROCESSOR_LIST=:map=scatter] [PETSC_OPTIONS=-process_view] make streams NPMAX=<integer number of MPI processes>\n"; exit 1 ; fi
5719816777SMark	-@printf "" > scaling.log
5819816777SMark	-@printf "Running streams with '${MPIEXEC} ${MPI_BINDING}' using 'NPMAX=${NPMAX}'\n"
5919816777SMark	-@i=0; while [ $${i} -lt ${NPMAX} ] && [ $${i} -lt 7 ]; do i=`expr $${i} + 1`; \
6019816777SMark	  ${MPIEXEC} ${MPI_BINDING} -n 1 -c$${i} -a$${i} -g1 ./CUDAVersion | tee -a scaling.log; \
6119816777SMark        done
6219816777SMark	-@n=1; i=7; while [ $${i} -lt ${NPMAX} ]; do i=`expr $${i} + 7`; n=`expr $${n} + 1`; \
6319816777SMark	       c=5; while [ $${c} -lt 7 ]; do c=`expr $${c} + 1`; \
6419816777SMark	  ${MPIEXEC} ${MPI_BINDING} -n $${n} -c$${c} -a$${c} -g1 ./CUDAVersion | tee -a scaling.log; \
6519816777SMark        done; done
6619816777SMark	-@echo "------------------------------------------------"
6719816777SMark	-@${PYTHON} process.py CUDA fileoutput
6819816777SMark
694198fb66SBarry Smithopenmpstream:  OpenMPVersion
704198fb66SBarry Smith	@if [ "${NPMAX}foo" = "foo" ]; then echo "---------"; printf " Run with make openmpstream NPMAX=<integer number of threads>\n"; exit 1 ; fi
714198fb66SBarry Smith	-@printf "" > scaling.log
724198fb66SBarry Smith	@-@printf "Running openmpstreams using 'NPMAX=${NPMAX}'\n"
73c6bff371SJunchao Zhang	-@printf "You can set OMP_DISPLAY_AFFINITY=true to show binding, and set OMP_PLACES, OMP_PROC_BIND properly to set binding\n"
744198fb66SBarry Smith	-@i=0; while [ $${i} -lt ${NPMAX} ]; do i=`expr $${i} + 1`; \
754198fb66SBarry Smith	  OMP_NUM_THREADS=$${i} ./OpenMPVersion  | tee -a scaling.log;\
764198fb66SBarry Smith        done
774198fb66SBarry Smith	-@${PYTHON} process.py OpenMP fileoutput
78a6cca095SBarry Smith
799f0612e4SBarry Smithopenmplikempistream:  OpenMPVersionLikeMPI
809f0612e4SBarry Smith	@if [ "${NPMAX}foo" = "foo" ]; then echo "---------"; printf " Run with make openmplikempistream NPMAX=<integer number of threads>\n"; exit 1 ; fi
819f0612e4SBarry Smith	-@printf "" > scaling.log
829f0612e4SBarry Smith	@-@printf "Running openmplikempistreams using 'NPMAX=${NPMAX}'\n"
839f0612e4SBarry Smith	-@i=0; while [ $${i} -lt ${NPMAX} ]; do i=`expr $${i} + 1`; \
849f0612e4SBarry Smith	  OMP_NUM_THREADS=$${i} ./OpenMPVersionLikeMPI  | tee -a scaling.log;\
859f0612e4SBarry Smith        done
869f0612e4SBarry Smith	-@${PYTHON} process.py OpenMPLikeMPI fileoutput
879f0612e4SBarry Smith
88c40481a3SBarry Smithhwloc:
8977fe4bf7SBarry Smith	-@if [ "${LSTOPO}foo" != "foo" ]; then ${MPIEXEC} ${MPI_BINDING} -n 1 ${LSTOPO} --no-icaches --no-io --ignore PU ; fi
90c40481a3SBarry Smith
914198fb66SBarry Smithmpistreams: mpistream hwloc
924198fb66SBarry Smith	-@${PYTHON} process.py MPI
934198fb66SBarry Smith
944198fb66SBarry Smithopenmpstreams: openmpstream hwloc
954198fb66SBarry Smith	-@${PYTHON} process.py OpenMP
96