.submit_jobs.sh 4.3 KB

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