.submit_jobs.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #!/bin/bash
  2. make ${EXEC} -j
  3. if [ ! -f ${EXEC} ] ; then exit -1; fi;
  4. export RESULT_DIR=${WORK_DIR}/result
  5. mkdir -p ${RESULT_DIR}
  6. #find ${RESULT_DIR} -type f -size 0 -exec rm {} \;
  7. if command -v timeout >/dev/null; then
  8. export TIMEOUT="timeout";
  9. else
  10. export TIMEOUT="scripts/.timeout3 -t ";
  11. fi
  12. eval $nodes_;
  13. eval $cores_;
  14. eval $mpi_proc_;
  15. eval $threads_;
  16. eval $testcase_;
  17. eval $n_pts_;
  18. eval $m_pts_;
  19. eval $m_;
  20. eval $q_;
  21. eval $tol_;
  22. eval $depth_;
  23. eval $unif_;
  24. eval $adap_;
  25. eval $max_time_;
  26. declare -a args=();
  27. declare -a fname=();
  28. for (( k=0; k<${#nodes[@]}; k++ )) ; do
  29. if [ "${nodes[k]}" == ":" ]; then continue; fi;
  30. args[$k]="-omp ${threads[k]} -test ${testcase[k]} -N ${n_pts[k]} -M ${m_pts[k]} -m ${m[k]} -q ${q[k]} -d ${depth[k]} -tol ${tol[k]}";
  31. case $HOSTNAME in
  32. *titan*) #titan.ccs.ornl.gov
  33. fname[$k]="host_titan";
  34. ;;
  35. *stampede*) #stampede.tacc.utexas.edu
  36. fname[$k]="host_stampede";
  37. ;;
  38. *ls4*) #lonestar.tacc.utexas.edu
  39. fname[$k]="host_lonestar";
  40. ;;
  41. *ronaldo*) #ronaldo.ices.utexas.edu
  42. fname[$k]="host_ronaldo";
  43. ;;
  44. *) # none of the known machines
  45. fname[$k]="host_${HOSTNAME}";
  46. esac
  47. fname[$k]="${fname[$k]}_n${nodes[k]}_mpi${mpi_proc[k]}_omp${threads[k]}_test${testcase[k]}_N${n_pts[k]}_M${m_pts[k]}_m${m[k]}_q${q[k]}_d${depth[k]}_tol${tol[k]}";
  48. if (( ${unif[k]} )) ; then
  49. args[$k]="${args[$k]} -unif";
  50. fname[$k]="${fname[$k]}_unif";
  51. fi;
  52. if (( ${adap[k]} )) ; then
  53. args[$k]="${args[$k]} -adap";
  54. fname[$k]="${fname[$k]}_adap";
  55. fi;
  56. done
  57. export args_="$(declare -p args)";
  58. export fname_="$(declare -p fname)";
  59. for (( k=0; k<${#nodes[@]}; k++ )) ; do
  60. if [ "${nodes[k]}" == ":" ] ||
  61. [ -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[k]}.out ]; then
  62. continue;
  63. fi;
  64. for (( j=0; j<$k; j++ )) ; do
  65. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  66. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  67. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  68. continue 2;
  69. fi
  70. done;
  71. TOTAL_TIME=0;
  72. for (( j=0; j<${#nodes[@]}; j++ )) ; do
  73. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  74. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  75. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  76. TOTAL_TIME=$(( ${TOTAL_TIME} + ${max_time[j]} ))
  77. fi
  78. done;
  79. export NODES=${nodes[k]}; # Number of compute nodes.
  80. export CORES=${cores[k]}; # Number of cores per node.
  81. export MPI_PROC=${mpi_proc[k]}; # Number of MPI processes.
  82. export THREADS=${threads[k]}; # Number of threads per MPI process.
  83. export TESTCASE=${testcase[k]}; # Test case.
  84. export MULORDER=${m[k]}; # Multipole order.
  85. export CHBORDER=${q[k]}; # Chebyshev degree.
  86. export FNAME=${RESULT_DIR}/$(basename ${EXEC})_nds${NODES}_mpi${MPI_PROC}
  87. #Submit Job
  88. case $HOSTNAME in
  89. *titan*) #titan.ccs.ornl.gov (Portable Batch System)
  90. qsub -l nodes=${NODES} \
  91. -o ${FNAME}.out -e ${FNAME}.err \
  92. -l walltime=${TOTAL_TIME} \
  93. ./scripts/.job.titan
  94. ;;
  95. *stampede*) #stampede.tacc.utexas.edu (Slurm Batch)
  96. if (( ${TOTAL_TIME} > 14400 )); then TOTAL_TIME="14400"; fi
  97. #if (( ${NODES} > 128 )) ; then continue; fi;
  98. sbatch -N${NODES} -n${MPI_PROC} \
  99. -o ${FNAME}.out -e ${FNAME}.err -D ${PWD} \
  100. --time=00:00:${TOTAL_TIME} \
  101. ./scripts/.job.stampede
  102. ;;
  103. *ls4*) #lonestar.tacc.utexas.edu (Sun Grid Engine)
  104. qsub -pe $((${MPI_PROC}/${NODES}))way $((${NODES}*${CORES})) \
  105. -o ${FNAME}.out -e ${FNAME}.err \
  106. -l h_rt=${TOTAL_TIME} \
  107. ./scripts/.job.lonestar
  108. ;;
  109. *ronaldo*) #ronaldo.ices.utexas.edu (Portable Batch System)
  110. qsub -l nodes=${NODES}:ppn=$((${MPI_PROC}/${NODES})) \
  111. -o ${FNAME}.out -e ${FNAME}.err \
  112. -l walltime=${TOTAL_TIME} \
  113. ./scripts/.job.ronaldo
  114. ;;
  115. *) # none of the known machines
  116. if command -v qsub >/dev/null; then # Portable Batch System
  117. qsub -l nodes=${NODES}:ppn=$((${MPI_PROC}/${NODES})) \
  118. -o ${FNAME}.out -e ${FNAME}.err \
  119. -l walltime=${TOTAL_TIME} \
  120. ./scripts/.job.qsub
  121. elif command -v sbatch >/dev/null; then # Slurm Batch
  122. sbatch -N${NODES} -n${MPI_PROC} \
  123. -o ${FNAME}.out -e ${FNAME}.err -D ${PWD} \
  124. --time=${TOTAL_TIME} \
  125. ./scripts/.job.sbatch
  126. else # Shell
  127. ./scripts/.job.sh
  128. fi
  129. esac
  130. #Exit on error.
  131. if (( $? != 0 )) ; then continue; fi;
  132. for (( j=0; j<${#nodes[@]}; j++ )) ; do
  133. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  134. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  135. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  136. touch ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out;
  137. fi
  138. done;
  139. done;
  140. # Display results
  141. ./scripts/.results.sh