Spaces:
Running
Running
# Function to calculate memory usage in MB*seconds | |
calculate_memory_usage() { | |
local dat_file=$1 | |
awk 'BEGIN { | |
prev_time = 0; | |
prev_mem_mb = 0; | |
mem_time_mb_s = 0; | |
} | |
NR>1 { | |
mem_in_mb = $2; | |
timestamp = $3; | |
if (prev_time > 0) { | |
time_interval_s = timestamp - prev_time; | |
mem_time_mb_s += (prev_mem_mb + mem_in_mb) / 2 * time_interval_s; | |
} | |
prev_time = timestamp; | |
prev_mem_mb = mem_in_mb; | |
} | |
END { | |
printf "%.2f\n", mem_time_mb_s; | |
}' "$dat_file" | |
} | |
completion_file="$1" | |
completion_dat_file="$2" | |
# file_type="$3" | |
max_execution_time="$3" | |
# Execute the specified file | |
# max_execution_time=10 | |
echo "Executing $completion_file" | |
error_output=$(mktemp) | |
start_time=$(date +%s%N) | |
rm -f "$completion_dat_file" | |
timeout "$max_execution_time" mprof run --interval 0.001 --output "$completion_dat_file" "$completion_file" 2> "$error_output" | |
end_time=$(date +%s%N) | |
execution_time=$(( (end_time - start_time) / 1000000 )) | |
exit_status=$? | |
# Check execution status | |
echo "Execution status: $exit_status" | |
if [ $exit_status -ne 0 ] || [ -s "$error_output" ]; then | |
echo "Execution failed or errors were reported for $completion_file. Removing .dat file." | |
rm -f "$completion_dat_file" | |
elif [ -f "$completion_dat_file" ]; then | |
mem_usage_mb_s=$(calculate_memory_usage "$completion_dat_file") | |
echo "Memory usage (MB*seconds): $mem_usage_mb_s" | |
else | |
echo "Execution completed but no .dat file found for $completion_file." | |
fi | |
# Clean up | |
rm -f "$error_output" | |