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