Skip to content
Snippets Groups Projects
Commit 27be8bbc authored by Moises Fernandez's avatar Moises Fernandez
Browse files

Changed to give the chance to indicate the number of jobs to submit

parent 347095f7
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
# #
# SHCOPYRIGHT # SHCOPYRIGHT
beforet=`date +%s` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${FSLDIR}/src/fdt/CUDA
if [ "x$SGE_ROOT" = "x" ] ; then if [ "x$SGE_ROOT" = "x" ] ; then
if [ -f /usr/local/share/sge/default/common/settings.sh ] ; then if [ -f /usr/local/share/sge/default/common/settings.sh ] ; then
. /usr/local/share/sge/default/common/settings.sh . /usr/local/share/sge/default/common/settings.sh
...@@ -28,6 +29,7 @@ Usage() { ...@@ -28,6 +29,7 @@ Usage() {
echo "-s (sample every, default 25)" echo "-s (sample every, default 25)"
echo "-model (1 for monoexponential, 2 for multiexponential, default 1)" echo "-model (1 for monoexponential, 2 for multiexponential, default 1)"
echo "-g (consider gradient nonlinearities, default off)" echo "-g (consider gradient nonlinearities, default off)"
echo "-NGPU (number of jobs to queue, the data is divided in NGPU parts, default 40)"
echo "" echo ""
echo "" echo ""
echo "ALTERNATIVELY: you can pass on xfibres options onto directly bedpostx" echo "ALTERNATIVELY: you can pass on xfibres options onto directly bedpostx"
...@@ -60,6 +62,7 @@ subjdir=`echo $subjdir | sed 's/\/$/$/g'` ...@@ -60,6 +62,7 @@ subjdir=`echo $subjdir | sed 's/\/$/$/g'`
echo subjectdir is $subjdir echo subjectdir is $subjdir
#parse option arguments #parse option arguments
njobs=40
nfibres=2 nfibres=2
fudge=1 fudge=1
burnin=1000 burnin=1000
...@@ -67,32 +70,26 @@ njumps=1250 ...@@ -67,32 +70,26 @@ njumps=1250
sampleevery=25 sampleevery=25
model=1 model=1
gflag=0 gflag=0
f0=0
rician=0
shift shift
while [ ! -z "$1" ] while [ ! -z "$1" ]
do do
case "$1" in case "$1" in
-NGPU) njobs=$2;shift;;
-n) nfibres=$2;shift;; -n) nfibres=$2;shift;;
--nf=?) nfibres=`echo $1 | sed s/"--nf="//g`;;
--model=?) model=`echo $1 | sed s/"--model="//g`;;
-w) fudge=$2;shift;; -w) fudge=$2;shift;;
-b) burnin=$2;shift;; -b) burnin=$2;shift;;
-j) njumps=$2;shift;; -j) njumps=$2;shift;;
-s) sampleevery=$2;shift;; -s) sampleevery=$2;shift;;
--f0) f0=1 others="$others $1";;
--rician) rician=1 others="$others $1";;
-model) model=$2;shift;; -model) model=$2;shift;;
-g) gflag=1;; -g) gflag=1;;
*) others="$others $1";; *) break;;
esac esac
shift shift
done done
opts="--nf=$nfibres --fudge=$fudge --bi=$burnin --nj=$njumps --se=$sampleevery --model=$model" opts="--nf=$nfibres --fudge=$fudge --bi=$burnin --nj=$njumps --se=$sampleevery --model=$model"
defopts="--cnonlinear" defopts="--cnonlinear"
opts="$opts $defopts $others" opts="$opts $defopts $*"
#check that all required files exist #check that all required files exist
...@@ -131,7 +128,7 @@ fi ...@@ -131,7 +128,7 @@ fi
echo Making bedpostx directory structure echo Making bedpostx directory structure
mkdir -p ${subjdir}.bedpostX/ mkdir -p ${subjdir}.bedpostX/
mkdir -p ${subjdir}.bedpostX/diff_slices mkdir -p ${subjdir}.bedpostX/diff_parts
mkdir -p ${subjdir}.bedpostX/logs mkdir -p ${subjdir}.bedpostX/logs
mkdir -p ${subjdir}.bedpostX/logs/pid_${$} mkdir -p ${subjdir}.bedpostX/logs/pid_${$}
mkdir -p ${subjdir}.bedpostX/xfms mkdir -p ${subjdir}.bedpostX/xfms
...@@ -142,162 +139,73 @@ else ...@@ -142,162 +139,73 @@ else
echo "bedpostx_multigpu_LSF "${subjdir} $opts >> ${subjdir}.bedpostX/commands.txt echo "bedpostx_multigpu_LSF "${subjdir} $opts >> ${subjdir}.bedpostX/commands.txt
fi fi
echo "..............Compiling CUDA-gpu code .................." mailto=`whoami`@fmrib.ox.ac.uk
export LD_LIBRARY_PATH=${CUDA}/lib64:${subjdir}.bedpostX:${CUDA}/lib:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=${CUDA}/lib64:${subjdir}.bedpostX:${CUDA}/lib:$LD_LIBRARY_PATH
export PATH=${FSLDIR}/bin:$PATH
volumes=`${FSLDIR}/bin/fslval ${subjdir}/data dim4`
echo "DIRECTIONS NUMBER: $volumes"
filename="${subjdir}.bedpostX/options.h"
if [ $volumes -le 64 ]; then
threadsBlock=$volumes
else
threadsBlock=64
fi
params=$((2+3*$nfibres))
if [ $f0 -eq 1 ]; then
params=$(($params+1))
fi
if [ $model -eq 2 ]; then
params=$(($params+1))
fi
if [ $rician -eq 1 ]; then
params=$(($params+1))
fi
rem=$(($volumes%$threadsBlock)) echo Copying files to bedpost directory
maxndirs=$(($volumes/$threadsBlock)) cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpostX
${FSLDIR}/bin/imcp ${subjdir}/nodif_brain_mask ${subjdir}.bedpostX
if [ $rem -ne 0 ]; then if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` = 1 ] ; then
maxndirs=$(($maxndirs+1)) ${FSLDIR}/bin/fslmaths ${subjdir}/nodif -mas ${subjdir}/nodif_brain_mask ${subjdir}.bedpostX/nodif_brain
fi fi
dstd=$(($model-1)); part=0
post_string="bsub -o ${subjdir}.bedpostX/logs/log_post_proc.log -e ${subjdir}.bedpostX/logs/error_post_proc.log -W 0:50"
params_rep=$(($params-1))
params_step0_m2_rep=$(($params_step0_m2-1))
echo "#define NDIRECTIONS $volumes
#define NFIBRES $nfibres
#define NPARAMS $params
#define MAXNDIRS_PER_THREAD $maxndirs
#define THREADS_BLOCK $threadsBlock">$filename
before=`date +%s`
${CUDA}/bin/nvcc --shared --compiler-options '-fPIC' -o ${subjdir}.bedpostX/libbedpostx_cuda.so ${FSLDIR}/src/fdt/CUDA/init_gpu.cu ${FSLDIR}/src/fdt/CUDA/samples.cu ${FSLDIR}/src/fdt/CUDA/diffmodels.cu ${FSLDIR}/src/fdt/CUDA/runmcmc.cu ${FSLDIR}/src/fdt/CUDA/xfibres_gpu.cu -O3 -arch sm_20 -lcudart -lcuda -lcurand -L${CUDA}/lib64 -L${CUDA}/lib -I${subjdir}.bedpostX -I${FSLDIR}/extras/include/newmat -I${FSLDIR}/extras/include/boost -I${FSLDIR}/include -I${CUDA}/include/thrust -I${FSLDIR}/src/fdt
file=${subjdir}.bedpostX/libbedpostx_cuda.so
if [ -f $file ];
then
after=`date +%s`
diff=$(($after-$before))
echo "Compilation Time: $diff seconds" >> ${subjdir}.bedpostX/times
echo "CUDA CODE compiled successfully"
before=`date +%s`
echo Preprocessing stages
${FSLDIR}/bin/bedpostx_preproc.sh ${subjdir} ${gflag}
after=`date +%s`
diff=$(($after-$before))
echo "Preprocessing Time: $diff seconds" >> ${subjdir}.bedpostX/times
before=`date +%s`
nslices=`${FSLDIR}/bin/fslval ${subjdir}/data dim3`
slice=0
post_string="bsub -o ${subjdir}'.bedpostX/logs/output.log -e ${subjdir}.bedpostX/logs/error.log -W 0:50"
post_string=$post_string" -w " post_string=$post_string" -w "
echo Submitting slices to GPUs echo "Submitting parts (jobs) to GPUs"
first_job=1 first_job=1
while [ $slice -lt $nslices ];do while [ $part -lt $njobs ];do
slicezp=`$FSLDIR/bin/zeropad $slice 4` partzp=`$FSLDIR/bin/zeropad $part 4`
if [ `$FSLDIR/bin/imtest ${subjdir}.bedpostX/diff_slices/data_slice_$slicezp/dyads1` -eq 1 ];then
echo "Slice $slice has already been processed" if [ ${gflag} -eq 1 ]; then
gopts="$opts --gradnonlin=${subjdir}/grad_dev"
else
gopts=$opts
fi
string=$(bsub -o ${subjdir}.bedpostX/logs/log$partzp -e ${subjdir}.bedpostX/logs/error$partzp -W 2:00 -n 1 ${FSLDIR}/bin/xfibres_gpu --data=${subjdir}/data --mask=$subjdir.bedpostX/nodif_brain_mask -b ${subjdir}.bedpostX/bvals -r ${subjdir}.bedpostX/bvecs --forcedir --logdir=$subjdir.bedpostX/diff_parts/data_part_$partzp $gopts $part $njobs)
array=(`echo $string | tr "<" ' '`)
aux=${array[1]}
array=(`echo $aux | tr ">" ' '`)
job=${array[0]}
#echo $job
if [ $first_job -eq 1 ];then
post_string=$post_string"done("${job}")"
first_job=0
else else
string=$(bsub -o ${subjdir}'.bedpostX/logs/output.log' -e ${subjdir}'.bedpostX/logs/error.log' -W 0:30 -n 1 ${FSLDIR}'/bin/splitter_multigpu' $subjdir $gflag $nfibres $slice $opts) post_string=$post_string"&&done("${job}")"
array=(`echo $string | tr "<" ' '`)
aux=${array[1]}
array=(`echo $aux | tr ">" ' '`)
job=${array[0]}
#echo $job
if [ $first_job -eq 1 ];then
post_string=$post_string"done("${job}")"
first_job=0
else
post_string=$post_string"&&done("${job}")"
fi
fi fi
slice=$(($slice + 1))
part=$(($part + 1))
done done
post_string=$post_string" ${FSLDIR}/bin/bedpostx_postproc.sh $subjdir" nvox=`${FSLDIR}/bin/fslstats $subjdir.bedpostX/nodif_brain_mask -V | cut -d ' ' -f1 `
#echo $post_string post_string=$post_string" ${FSLDIR}/bin/bedpostx_postproc_gpu.sh --data=${subjdir}/data --mask=$subjdir.bedpostX/nodif_brain_mask -b ${subjdir}.bedpostX/bvals -r ${subjdir}.bedpostX/bvecs --forcedir --logdir=$subjdir.bedpostX/diff_parts $gopts $nvox $njobs ${subjdir}"
$post_string $post_string
echo "All jobs submitted" echo "All parts (jobs) submitted"
finished=0 finished=0
logdir=${subjdir}.bedpostX/logs logdir=${subjdir}.bedpostX/logs
tim=0
while [ $finished -eq 0 ] ; do while [ $finished -eq 0 ] ; do
nfin=0 nfin=0
pslice=0 part=0
while [ $pslice -lt $nslices ];do while [ $part -lt $njobs ];do
slicezp=`${FSLDIR}/bin/zeropad $pslice 4` partzp=`${FSLDIR}/bin/zeropad $part 4`
isimg=`${FSLDIR}/bin/imtest ${subjdir}.bedpostX/diff_slices/data_slice_$slicezp/dyads1` if [ -f ${subjdir}.bedpostX/diff_parts/data_part_$partzp/mean_S0samplesJ ];then
if [ $isimg -eq 1 ];then
nfin=$(($nfin + 1)) nfin=$(($nfin + 1))
fi fi
pslice=$(($pslice + 1)) part=$(($part + 1))
done done
echo $nfin "slices processed" echo $nfin "parts processed of "$njobs
if [ $tim -eq 0 ] ; then
if [ $nfin -eq $nslices ] ; then
after=`date +%s`
diff=$(($after-$before))
echo "Execution Time: $diff seconds" >> ${subjdir}.bedpostX/times
tim=1
fi
fi
if [ -f ${subjdir}.bedpostX/xfms/eye.mat ] ; then if [ -f ${subjdir}.bedpostX/xfms/eye.mat ] ; then
finished=1 finished=1
echo "All slices processed" echo "All parts processed"
fi fi
sleep 15; sleep 60;
done done
aftert=`date +%s`
diff=$(($aftert-$beforet))
echo "TOTAL Time: $diff seconds" >> ${subjdir}.bedpostX/times
else
echo
echo
echo "CUDA COMPILER ERROR. Please be sure that you have set correctly CUDALIBDIR in first line in file bin/bedpostx_cuda"
echo
fi
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment