.submit_jobs.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #!/bin/bash
  2. cd ${WORK_DIR}
  3. make ${EXEC} -j
  4. if [ ! -f ${EXEC} ] ; then exit -1; fi;
  5. export RESULT_DIR=${WORK_DIR}/result
  6. mkdir -p ${RESULT_DIR}
  7. #find ${RESULT_DIR} -type f -size 0 -exec rm {} \;
  8. if command -v timeout >/dev/null; then
  9. export TIMEOUT="timeout";
  10. else
  11. export TIMEOUT="scripts/.timeout3 -t ";
  12. fi
  13. declare -a args=();
  14. declare -a fname=();
  15. for (( k=0; k<${#nodes[@]}; k++ )) ; do
  16. if [ "${nodes[k]}" == ":" ]; then continue; fi;
  17. # Set output filename
  18. case $HOSTNAME in
  19. *titan*) fname[$k]="host_titan";;
  20. *stampede*) fname[$k]="host_stampede";;
  21. *ls4*) fname[$k]="host_lonestar";;
  22. *ronaldo*) fname[$k]="host_ronaldo";;
  23. *) fname[$k]="host_${HOSTNAME}";;
  24. esac
  25. fname[$k]="${fname[$k]}_nds${nodes[k]}_mpi${mpi_proc[k]}";
  26. # Set executable options
  27. for (( i=0; i<${#opt_names[@]}; i++ )) ; do
  28. if [ "${opt_names[i]}" != "-" ]; then
  29. eval "opt_val=\${${opt_array[i]}[$k]}";
  30. args[$k]="${args[k]} -${opt_names[i]} $opt_val";
  31. fname[$k]="${fname[k]}_${opt_names[i]}$opt_val";
  32. fi
  33. done
  34. done
  35. # export arrays
  36. export nodes_="$(declare -p nodes)";
  37. export cores_="$(declare -p cores)";
  38. export mpi_proc_="$(declare -p mpi_proc)";
  39. export threads_="$(declare -p threads)";
  40. export max_time_="$(declare -p max_time)";
  41. export args_="$(declare -p args)";
  42. export fname_="$(declare -p fname)";
  43. for (( k=0; k<${#nodes[@]}; k++ )) ; do
  44. if [ "${nodes[k]}" == ":" ] ||
  45. [ -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[k]}.out ]; then
  46. continue;
  47. fi;
  48. for (( j=0; j<$k; j++ )) ; do
  49. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  50. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  51. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  52. continue 2;
  53. fi
  54. done;
  55. TOTAL_TIME=0;
  56. for (( j=0; j<${#nodes[@]}; j++ )) ; do
  57. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  58. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  59. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  60. TOTAL_TIME=$(( ${TOTAL_TIME} + ${max_time[j]} ))
  61. fi
  62. done;
  63. export NODES=${nodes[k]}; # Number of compute nodes.
  64. export MPI_PROC=${mpi_proc[k]}; # Number of MPI processes.
  65. FNAME=${RESULT_DIR}/$(basename ${EXEC})_nds${NODES}_mpi${MPI_PROC}
  66. #Submit Job
  67. case $HOSTNAME in
  68. *titan*) #titan.ccs.ornl.gov (Portable Batch System)
  69. qsub -l nodes=${NODES} \
  70. -o ${FNAME}.out -e ${FNAME}.err \
  71. -l walltime=${TOTAL_TIME} \
  72. ./scripts/.job.titan
  73. ;;
  74. *stampede*) #stampede.tacc.utexas.edu (Slurm Batch)
  75. if (( ${TOTAL_TIME} > 14400 )); then TOTAL_TIME="14400"; fi
  76. #if (( ${NODES} > 128 )) ; then continue; fi;
  77. sbatch -N${NODES} -n${MPI_PROC} \
  78. -o ${FNAME}.out -e ${FNAME}.err -D ${PWD} \
  79. --time=00:00:${TOTAL_TIME} \
  80. ./scripts/.job.stampede
  81. ;;
  82. *ls4*) #lonestar.tacc.utexas.edu (Sun Grid Engine)
  83. qsub -pe $((${MPI_PROC}/${NODES}))way $((${NODES}*${CORES})) \
  84. -o ${FNAME}.out -e ${FNAME}.err \
  85. -l h_rt=${TOTAL_TIME} \
  86. ./scripts/.job.lonestar
  87. ;;
  88. *ronaldo*) #ronaldo.ices.utexas.edu (Portable Batch System)
  89. qsub -l nodes=${NODES}:ppn=$((${MPI_PROC}/${NODES})) \
  90. -o ${FNAME}.out -e ${FNAME}.err \
  91. -l walltime=${TOTAL_TIME} \
  92. ./scripts/.job.ronaldo
  93. ;;
  94. *) # none of the known machines
  95. if command -v qsub >/dev/null; then # Portable Batch System
  96. qsub -l nodes=${NODES}:ppn=$((${MPI_PROC}/${NODES})) \
  97. -o ${FNAME}.out -e ${FNAME}.err \
  98. -l walltime=${TOTAL_TIME} \
  99. ./scripts/.job.qsub
  100. elif command -v sbatch >/dev/null; then # Slurm Batch
  101. sbatch -N${NODES} -n${MPI_PROC} \
  102. -o ${FNAME}.out -e ${FNAME}.err -D ${PWD} \
  103. --time=${TOTAL_TIME} \
  104. ./scripts/.job.sbatch
  105. else # Shell
  106. ./scripts/.job.sh
  107. fi
  108. esac
  109. #Exit on error.
  110. if (( $? != 0 )) ; then continue; fi;
  111. for (( j=0; j<${#nodes[@]}; j++ )) ; do
  112. if [ "${nodes[k]}" == "${nodes[j]}" ] &&
  113. [ "${mpi_proc[k]}" == "${mpi_proc[j]}" ] &&
  114. [ ! -f ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out ]; then
  115. touch ${RESULT_DIR}/$(basename ${EXEC})_${fname[j]}.out;
  116. fi
  117. done;
  118. done;
  119. # Display results
  120. source ./scripts/.results.sh