summaryrefslogtreecommitdiffstats
path: root/utils/subfiling_vfd
diff options
context:
space:
mode:
authorScot Breitenfeld <brtnfld@hdfgroup.org>2023-10-17 16:12:16 (GMT)
committerGitHub <noreply@github.com>2023-10-17 16:12:16 (GMT)
commit74fabd144e4355cfebc8d3e78b96c3e9c4ee7705 (patch)
tree73187c7018e283a0cf01704115243fa19393faf0 /utils/subfiling_vfd
parent1b62827204d4fd924794c2bcb6456de70f6048b0 (diff)
downloadhdf5-74fabd144e4355cfebc8d3e78b96c3e9c4ee7705.zip
hdf5-74fabd144e4355cfebc8d3e78b96c3e9c4ee7705.tar.gz
hdf5-74fabd144e4355cfebc8d3e78b96c3e9c4ee7705.tar.bz2
switch to using time function instead of date function (#3690)
Diffstat (limited to 'utils/subfiling_vfd')
-rwxr-xr-xutils/subfiling_vfd/h5fuse.sh.in206
1 files changed, 105 insertions, 101 deletions
diff --git a/utils/subfiling_vfd/h5fuse.sh.in b/utils/subfiling_vfd/h5fuse.sh.in
index c6d715f..82d497e 100755
--- a/utils/subfiling_vfd/h5fuse.sh.in
+++ b/utils/subfiling_vfd/h5fuse.sh.in
@@ -13,7 +13,6 @@
BLD='\033[1m'
GRN='\033[0;32m'
RED='\033[0;31m'
-PUR='\033[0;35m'
CYN='\033[0;36m'
NC='\033[0m' # No Color
@@ -58,6 +57,106 @@ EOL
}
+function fuse {
+
+# function for fusing the files
+
+mpi_rank=0
+mpi_size=1
+nstart=1
+nend=$nsubfiles
+
+if [ "$parallel" == "true" ]; then
+
+ hex=$(hexdump -n 16 -v -e '/1 "%02X"' /dev/urandom)
+ c_exec="h5fuse_"${hex}
+ c_src=${c_exec}.c
+
+ # Generate and compile an MPI program to get MPI rank and size
+ if [ ! -f "${c_src}" ]; then
+ gen_mpi
+ CC=@CC@
+ ${CC} "${c_src}" -o "${c_exec}"
+ fi
+ wait
+ rank_size=$(./"${c_exec}")
+ read -r mpi_rank mpi_size <<<"$rank_size"
+
+ rm -f "${c_src}" "${c_exec}"
+
+ # Divide the subfiles among the ranks
+ iwork1=$(( nsubfiles / mpi_size ))
+ iwork2=$(( nsubfiles % mpi_size ))
+ min=$(( mpi_rank < iwork2 ? mpi_rank : iwork2 ))
+ nstart=$(( mpi_rank * iwork1 + 1 + min ))
+ nend=$(( nstart + iwork1 - 1 ))
+ if [ $iwork2 -gt "$mpi_rank" ]; then
+ nend=$(( nend + 1 ))
+ fi
+fi
+
+############################################################
+# COMBINE SUBFILES INTO AN HDF5 FILE #
+############################################################
+icnt=1
+skip=0
+seek=0
+seek_cnt=0
+for i in "${subfiles[@]}"; do
+
+ subfile="${subfile_dir}/${i}"
+
+ # bs=BYTES read and write up to BYTES bytes at a time; overrides ibs and obs
+ # ibs=BYTES read up to BYTES bytes at a time
+ # obs=BYTES write BYTES bytes at a time
+ # seek=N skip N obs-sized blocks at start of output
+ # skip=N skip N ibs-sized blocks at start of input
+
+ status=1
+ fsize=${subfiles_size[icnt-1]}
+ if [ "$fsize" -eq "0" ]; then
+ seek_cnt=$((seek_cnt+1))
+ seek=$seek_cnt
+ if [ "$rm_subf" == "true" ]; then
+ if [ -f "${subfile}" ]; then
+ \rm -f "$subfile"
+ fi
+ fi
+ else
+ if [ $icnt -ge "$nstart" ] && [ $icnt -le "$nend" ]; then
+ records_left=$fsize
+ while [ "$status" -gt 0 ]; do
+ if [ $((skip*stripe_size)) -le "$fsize" ] && [ "$records_left" -gt 0 ]; then
+ EXEC="dd count=1 bs=$stripe_size if=$subfile of=$hdf5_file skip=$skip seek=$seek conv=notrunc"
+ if [ "$verbose" == "true" ]; then
+ echo -e "$GRN $EXEC $NC"
+ fi
+ err=$( $EXEC 2>&1 1>/dev/null )
+ if [ $? -ne 0 ]; then
+ echo -e "$CYN ERR: dd Utility Failed $NC"
+ echo -e "$CYN MSG: $err $NC"
+ exit $FAILED
+ fi
+ records_left=$((records_left-stripe_size))
+ skip=$((skip+1))
+ seek=$((seek_cnt+skip*nsubfiles))
+ else
+ status=0
+ skip=0
+ fi
+ done; wait
+ if [ "$rm_subf" == "true" ]; then
+ \rm -f "$subfile"
+ fi
+ fi
+ seek_cnt=$((seek_cnt+1))
+ seek=$seek_cnt
+ fi
+ icnt=$(( icnt +1 ))
+done; wait
+
+}
+
############################################################
############################################################
# Main program #
@@ -166,104 +265,9 @@ for i in "${subfiles[@]}"; do
fi
done
-START="$(date +%s%N)"
-
-mpi_rank=0
-mpi_size=1
-nstart=1
-nend=$nsubfiles
-
-if [ "$parallel" == "true" ]; then
-
- hex=$(hexdump -n 16 -v -e '/1 "%02X"' /dev/urandom)
- c_exec="h5fuse_"${hex}
- c_src=${c_exec}.c
-
- # Generate and compile an MPI program to get MPI rank and size
- if [ ! -f "${c_src}" ]; then
- gen_mpi
- CC=@CC@
- ${CC} "${c_src}" -o "${c_exec}"
- fi
- wait
- rank_size=$(./"${c_exec}")
- read -r mpi_rank mpi_size <<<"$rank_size"
-
- rm -f "${c_src}" "${c_exec}"
-
- # Divide the subfiles among the ranks
- iwork1=$(( nsubfiles / mpi_size ))
- iwork2=$(( nsubfiles % mpi_size ))
- min=$(( mpi_rank < iwork2 ? mpi_rank : iwork2 ))
- nstart=$(( mpi_rank * iwork1 + 1 + min ))
- nend=$(( nstart + iwork1 - 1 ))
- if [ $iwork2 -gt "$mpi_rank" ]; then
- nend=$(( nend + 1 ))
- fi
-fi
-
-############################################################
-# COMBINE SUBFILES INTO AN HDF5 FILE #
-############################################################
-icnt=1
-skip=0
-seek=0
-seek_cnt=0
-for i in "${subfiles[@]}"; do
-
- subfile="${subfile_dir}/${i}"
-
- # bs=BYTES read and write up to BYTES bytes at a time; overrides ibs and obs
- # ibs=BYTES read up to BYTES bytes at a time
- # obs=BYTES write BYTES bytes at a time
- # seek=N skip N obs-sized blocks at start of output
- # skip=N skip N ibs-sized blocks at start of input
-
- status=1
- fsize=${subfiles_size[icnt-1]}
- if [ "$fsize" -eq "0" ]; then
- seek_cnt=$((seek_cnt+1))
- seek=$seek_cnt
- if [ "$rm_subf" == "true" ]; then
- if [ -f "${subfile}" ]; then
- \rm -f "$subfile"
- fi
- fi
- else
- if [ $icnt -ge "$nstart" ] && [ $icnt -le "$nend" ]; then
- records_left=$fsize
- while [ "$status" -gt 0 ]; do
- if [ $((skip*stripe_size)) -le "$fsize" ] && [ "$records_left" -gt 0 ]; then
- EXEC="dd count=1 bs=$stripe_size if=$subfile of=$hdf5_file skip=$skip seek=$seek conv=notrunc"
- if [ "$verbose" == "true" ]; then
- echo -e "$GRN $EXEC $NC"
- fi
- err=$( $EXEC 2>&1 1>/dev/null )
- if [ $? -ne 0 ]; then
- echo -e "$CYN ERR: dd Utility Failed $NC"
- echo -e "$CYN MSG: $err $NC"
- exit $FAILED
- fi
- records_left=$((records_left-stripe_size))
- skip=$((skip+1))
- seek=$((seek_cnt+skip*nsubfiles))
- else
- status=0
- skip=0
- fi
- done; wait
- if [ "$rm_subf" == "true" ]; then
- \rm -f "$subfile"
- fi
- fi
- seek_cnt=$((seek_cnt+1))
- seek=$seek_cnt
- fi
- icnt=$(( icnt +1 ))
-done; wait
-
-END=$(( $(date +%s%N) - START ))
-DURATION_SEC=$(awk -vp="$END" -vq=0.000000001 'BEGIN{printf "%.4f" ,p * q}')
if [ "$quiet" == "false" ]; then
- echo -e "$PUR COMPLETION TIME = $DURATION_SEC s $NC"
-fi \ No newline at end of file
+ TIMEFORMAT="COMPLETION TIME = %R s"
+ time fuse
+else
+ fuse
+fi