From f8cda2a34f505cba258d14d254775577f0aa5c2d Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Tue, 23 Nov 2021 15:17:24 +0000 Subject: [PATCH] RF: Allow eddy tests to run if eddy_openmp(/eddy_cpu) is not installed. --- eddy/EddyHigh_b_Test/feedsRun | 65 ++++++++++++++++++-------------- eddy/EddyLSRTest/feedsRun | 69 +++++++++++++++++++--------------- eddy/EddyMBSTest/feedsRun | 66 +++++++++++++++++++-------------- eddy/EddyS2VTest/feedsRun | 67 +++++++++++++++++++-------------- eddy/EddyTest/feedsRun | 70 +++++++++++++++++++++-------------- 5 files changed, 197 insertions(+), 140 deletions(-) diff --git a/eddy/EddyHigh_b_Test/feedsRun b/eddy/EddyHigh_b_Test/feedsRun index ec81bcd..83cb34f 100755 --- a/eddy/EddyHigh_b_Test/feedsRun +++ b/eddy/EddyHigh_b_Test/feedsRun @@ -30,7 +30,7 @@ fi # Find all eddy_cuda* executables cuda_exes="" -openmp_exe="" +cpu_exe="" for cuda_exe in ${exedir}/eddy_cuda*; do if [ -x "${cuda_exe}" ]; then @@ -38,12 +38,12 @@ do fi done -# Find the eddy_openmp executable +# Find the eddy_cpu executable if [ -x "${exedir}/eddy_openmp" ]; then - openmp_exe="${exedir}/eddy_openmp" + cpu_exe="${exedir}/eddy_openmp" fi -if [ "${cuda_exes}" == "" ] && [ "${openmp_exe}" == "" ]; then +if [ "${cuda_exes}" == "" ] && [ "${cpu_exe}" == "" ]; then echo "Cannot find any eddy executables in ${exedir}!" exit 1 fi @@ -67,31 +67,37 @@ do cuda_jid="$cuda_jid `fsl_sub -l ${odir} -q cuda.q ${cuda_exe} --imain=${indir}/EddyHigh_b_TestData/eddyData/testData --mask=${indir}/EddyHigh_b_TestData/eddyData/testMask --bvals=${indir}/EddyHigh_b_TestData/eddyData/testBvals --bvecs=${indir}/EddyHigh_b_TestData/eddyData/testBvecs --index=${indir}/EddyHigh_b_TestData/eddyData/testIndex --acqp=${indir}/EddyHigh_b_TestData/eddyData/testAcqparams --topup=${indir}/EddyHigh_b_TestData/eddyData/testTopup --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --out=${odir}/eddyCudaOutput${version} --very_verbose`" done -omp_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyHigh_b_TestData/eddyData/testData --mask=${indir}/EddyHigh_b_TestData/eddyData/testMask --bvals=${indir}/EddyHigh_b_TestData/eddyData/testBvals --bvecs=${indir}/EddyHigh_b_TestData/eddyData/testBvecs --index=${indir}/EddyHigh_b_TestData/eddyData/testIndex --acqp=${indir}/EddyHigh_b_TestData/eddyData/testAcqparams --topup=${indir}/EddyHigh_b_TestData/eddyData/testTopup --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --out=${odir}/eddyOmpOutput --very_verbose` +if [ "${cpu_exe}" != "" ]; then + cpu_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${cpu_exe} --imain=${indir}/EddyHigh_b_TestData/eddyData/testData --mask=${indir}/EddyHigh_b_TestData/eddyData/testMask --bvals=${indir}/EddyHigh_b_TestData/eddyData/testBvals --bvecs=${indir}/EddyHigh_b_TestData/eddyData/testBvecs --index=${indir}/EddyHigh_b_TestData/eddyData/testIndex --acqp=${indir}/EddyHigh_b_TestData/eddyData/testAcqparams --topup=${indir}/EddyHigh_b_TestData/eddyData/testTopup --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --out=${odir}/eddyCpuOutput --very_verbose` +fi # If running on a cluster, ensure that # slots are being reserved on the queue, # and wait until all jobs have finished if [ ! -z "${SGE_ROOT}" ]; then - qalter ${omp_jid} -R y - while [ : ]; do - for jid in ${cuda_jid}; - do - tmp=`qstat -j ${jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -ne 0 ]; then - break - fi - done + if [ "${cpu_exe}" != "" ]; then + qalter ${cpu_jid} -R y + fi + while [ : ]; do + for jid in ${cuda_jid}; + do + tmp=`qstat -j ${jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` + if [ $tmp -ne 0 ]; then + break + fi + done + if [ "${cpu_exe}" != "" ]; then + if [ $tmp -eq 0 ]; then + tmp=`qstat -j ${cpu_jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` if [ $tmp -eq 0 ]; then - tmp=`qstat -j ${omp_jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -eq 0 ]; then - break - fi + break fi - sleep 5m - done + fi + fi + sleep 5m + done fi # Check that eddy output exists @@ -104,8 +110,11 @@ do exit 1 fi done -if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then +if [ "${cpu_exe}" != "" ]; then + if [ ! -f ${odir}/eddyCpuOutput.nii* ]; then + echo "eddyCpuOutput missing" exit 1 + fi fi # Define some constants @@ -124,11 +133,13 @@ do cuda_exit_status=$(($cuda_exit_status + $?)) done -./EddyHigh_b_Feeds.py ${odir} Omp `imglob -extension ${indir}/EddyHigh_b_TestData/eddyData/testMask` `imglob -extension ${odir}/eddyOmpOutput` `imglob -extension ${indir}/EddyHigh_b_TestData/eddyData/Precomputed/eddy_openmp_output` $max_mean_ima_diff $max_max_ima_diff - -omp_exit_status=$? +cpu_exit_status=0 +if [ "${cpu_exe}" != "" ]; then + ./EddyHigh_b_Feeds.py ${odir} Cpu `imglob -extension ${indir}/EddyHigh_b_TestData/eddyData/testMask` `imglob -extension ${odir}/eddyCpuOutput` `imglob -extension ${indir}/EddyHigh_b_TestData/eddyData/Precomputed/eddy_openmp_output` $max_mean_ima_diff $max_max_ima_diff + cpu_exit_status=$? +fi -if [ $cuda_exit_status -gt 0 ] || [ $omp_exit_status -gt 0 ]; then +if [ $cuda_exit_status -gt 0 ] || [ $cpu_exit_status -gt 0 ]; then echo "Test failed" exit 1 else diff --git a/eddy/EddyLSRTest/feedsRun b/eddy/EddyLSRTest/feedsRun index c70abee..4a5dad8 100755 --- a/eddy/EddyLSRTest/feedsRun +++ b/eddy/EddyLSRTest/feedsRun @@ -27,7 +27,7 @@ fi # Find all eddy_cuda* executables cuda_exes="" -openmp_exe="" +cpu_exe="" for cuda_exe in ${exedir}/eddy_cuda*; do if [ -x "${cuda_exe}" ]; then @@ -35,12 +35,12 @@ do fi done -# Find the eddy_openmp executable +# Find the eddy_cpu executable if [ -x "${exedir}/eddy_openmp" ]; then - openmp_exe="${exedir}/eddy_openmp" + cpu_exe="${exedir}/eddy_openmp" fi -if [ "${cuda_exes}" == "" ] && [ "${openmp_exe}" == "" ]; then +if [ "${cuda_exes}" == "" ] && [ "${cpu_exe}" == "" ]; then echo "Cannot find any eddy executables in ${exedir}!" exit 1 fi @@ -64,32 +64,38 @@ do cuda_jid="$cuda_jid `fsl_sub -l ${odir} -q cuda.q ${cuda_exe} --imain=${indir}/EddyLSRTestData/eddyData/testData --mask=${indir}/EddyLSRTestData/eddyData/testMask --bvals=${indir}/EddyLSRTestData/eddyData/testBvals --bvecs=${indir}/EddyLSRTestData/eddyData/testBvecs --index=${indir}/EddyLSRTestData/eddyData/testIndex --acqp=${indir}/EddyLSRTestData/eddyData/testAcqparams --topup=${indir}/EddyLSRTestData/eddyData/testTopup --out=${odir}/eddyCudaOutput${version} --resamp=lsr --fep --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --very_verbose`" done -omp_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyLSRTestData/eddyData/testData --mask=${indir}/EddyLSRTestData/eddyData/testMask --bvals=${indir}/EddyLSRTestData/eddyData/testBvals --bvecs=${indir}/EddyLSRTestData/eddyData/testBvecs --index=${indir}/EddyLSRTestData/eddyData/testIndex --acqp=${indir}/EddyLSRTestData/eddyData/testAcqparams --topup=${indir}/EddyLSRTestData/eddyData/testTopup --out=${odir}/eddyOmpOutput --resamp=lsr --fep --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --very_verbose` +if [ "${cpu_exe}" != "" ]; then + cpu_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${cpu_exe} --imain=${indir}/EddyLSRTestData/eddyData/testData --mask=${indir}/EddyLSRTestData/eddyData/testMask --bvals=${indir}/EddyLSRTestData/eddyData/testBvals --bvecs=${indir}/EddyLSRTestData/eddyData/testBvecs --index=${indir}/EddyLSRTestData/eddyData/testIndex --acqp=${indir}/EddyLSRTestData/eddyData/testAcqparams --topup=${indir}/EddyLSRTestData/eddyData/testTopup --out=${odir}/eddyCpuOutput --resamp=lsr --fep --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --very_verbose` +fi # If running on a cluster, ensure that # slots are being reserved on the queue, # and wait until all jobs have finished if [ ! -z "${SGE_ROOT}" ]; then - qalter ${omp_jid} -R y - - while [ : ]; do - for jid in ${cuda_jid}; - do - tmp=`qstat -j ${jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -ne 0 ]; then - break - fi - done + if [ "${cpu_exe}" != "" ]; then + qalter ${cpu_jid} -R y + fi + + while [ : ]; do + for jid in ${cuda_jid}; + do + tmp=`qstat -j ${jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` + if [ $tmp -ne 0 ]; then + break + fi + done + if [ "${cpu_exe}" != "" ]; then + if [ $tmp -eq 0 ]; then + tmp=`qstat -j ${cpu_jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` if [ $tmp -eq 0 ]; then - tmp=`qstat -j ${omp_jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -eq 0 ]; then - break - fi + break fi - sleep 5m - done + fi + fi + sleep 5m + done fi # Check that eddy output exists @@ -102,8 +108,11 @@ do exit 1 fi done -if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then - exit 1 +if [ "${cpu_exe}" != "" ]; then + if [ ! -f ${odir}/eddyCpuOutput.nii* ]; then + echo "eddyCpuOutput missing" + exit 1 + fi fi # Define some constants @@ -122,11 +131,13 @@ do cuda_exit_status=$(($cuda_exit_status + $?)) done -./EddyLSRFeeds.py ${odir} Omp `imglob -extension ${indir}/EddyLSRTestData/eddyData/testMask` `imglob -extension ${odir}/eddyOmpOutput` `imglob -extension ${indir}/EddyLSRTestData/eddyData/Precomputed/eddy_openmp_output` $max_mean_ima_diff $max_max_ima_diff - -omp_exit_status=$? +cpu_exit_status=0 +if [ "${cpu_exe}" != "" ]; then + ./EddyLSRFeeds.py ${odir} Cpu `imglob -extension ${indir}/EddyLSRTestData/eddyData/testMask` `imglob -extension ${odir}/eddyCpuOutput` `imglob -extension ${indir}/EddyLSRTestData/eddyData/Precomputed/eddy_openmp_output` $max_mean_ima_diff $max_max_ima_diff + cpu_exit_status=$? +fi -if [ $cuda_exit_status -gt 0 ] || [ $omp_exit_status -gt 0 ]; then +if [ $cuda_exit_status -gt 0 ] || [ $cpu_exit_status -gt 0 ]; then echo "Test failed" exit 1 else diff --git a/eddy/EddyMBSTest/feedsRun b/eddy/EddyMBSTest/feedsRun index 00fca93..9be5681 100755 --- a/eddy/EddyMBSTest/feedsRun +++ b/eddy/EddyMBSTest/feedsRun @@ -32,7 +32,7 @@ fi # Find all eddy_cuda* executables cuda_exes="" -openmp_exe="" +cpu_exe="" for cuda_exe in ${exedir}/eddy_cuda*; do if [ -x "${cuda_exe}" ]; then @@ -40,12 +40,12 @@ do fi done -# Find the eddy_openmp executable +# Find the eddy_cpu executable if [ -x "${exedir}/eddy_openmp" ]; then - openmp_exe="${exedir}/eddy_openmp" + cpu_exe="${exedir}/eddy_openmp" fi -if [ "${cuda_exes}" == "" ] && [ "${openmp_exe}" == "" ]; then +if [ "${cuda_exes}" == "" ] && [ "${cpu_exe}" == "" ]; then echo "Cannot find any eddy executables in ${exedir}!" exit 1 fi @@ -76,31 +76,37 @@ do cuda_jid="$cuda_jid `fsl_sub -l ${odir} -q cuda.q ${cuda_exe} --imain=${indir}/EddyMBSTestData/eddyData/testData --acqp=${indir}/EddyMBSTestData/eddyData/testAcqparams --mask=${indir}/EddyMBSTestData/eddyData/testMask --index=${indir}/EddyMBSTestData/eddyData/testIndex --bvecs=${indir}/EddyMBSTestData/eddyData/testBvecs --bvals=${indir}/EddyMBSTestData/eddyData/testBvals --topup=${indir}/EddyMBSTestData/eddyData/testTopup --fwhm=10,5,2,0,0,0,0,0 --niter=8 --nvoxhp=2000 --flm=quadratic --dont_peas --estimate_move_by_susceptibility --mbs_niter=20 --mbs_lambda=10 --mbs_ksp=10 --out=${odir}/eddyCudaOutput${version} --very_verbose`" done -omp_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyMBSTestData/eddyData/testData --acqp=${indir}/EddyMBSTestData/eddyData/testAcqparams --mask=${indir}/EddyMBSTestData/eddyData/testMask --index=${indir}/EddyMBSTestData/eddyData/testIndex --bvecs=${indir}/EddyMBSTestData/eddyData/testBvecs --bvals=${indir}/EddyMBSTestData/eddyData/testBvals --topup=${indir}/EddyMBSTestData/eddyData/testTopup --fwhm=10,5,2,0,0,0,0,0 --niter=8 --nvoxhp=2000 --flm=quadratic --dont_peas --estimate_move_by_susceptibility --mbs_niter=20 --mbs_lambda=10 --mbs_ksp=10 --out=${odir}/eddyOmpOutput --very_verbose` +if [ "${cpu_exe}" != "" ]; then + cpu_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${cpu_exe} --imain=${indir}/EddyMBSTestData/eddyData/testData --acqp=${indir}/EddyMBSTestData/eddyData/testAcqparams --mask=${indir}/EddyMBSTestData/eddyData/testMask --index=${indir}/EddyMBSTestData/eddyData/testIndex --bvecs=${indir}/EddyMBSTestData/eddyData/testBvecs --bvals=${indir}/EddyMBSTestData/eddyData/testBvals --topup=${indir}/EddyMBSTestData/eddyData/testTopup --fwhm=10,5,2,0,0,0,0,0 --niter=8 --nvoxhp=2000 --flm=quadratic --dont_peas --estimate_move_by_susceptibility --mbs_niter=20 --mbs_lambda=10 --mbs_ksp=10 --out=${odir}/eddyCpuOutput --very_verbose` +fi # If running on a cluster, ensure that # slots are being reserved on the queue, # and wait until all jobs have finished if [ ! -z "${SGE_ROOT}" ]; then - qalter ${omp_jid} -R y - while [ : ]; do - for jid in ${cuda_jid}; - do - tmp=`qstat -j ${jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -ne 0 ]; then - break - fi - done + if [ "${cpu_exe}" != "" ]; then + qalter ${cpu_jid} -R y + fi + while [ : ]; do + for jid in ${cuda_jid}; + do + tmp=`qstat -j ${jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` + if [ $tmp -ne 0 ]; then + break + fi + done + if [ "${cpu_exe}" != "" ]; then + if [ $tmp -eq 0 ]; then + tmp=`qstat -j ${cpu_jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` if [ $tmp -eq 0 ]; then - tmp=`qstat -j ${omp_jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -eq 0 ]; then - break - fi + break fi - sleep 5m - done + fi + fi + sleep 5m + done fi # Check that eddy output exists @@ -113,8 +119,10 @@ do exit 1 fi done -if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then - exit 1 +if [ "${cpu_exe}" != "" ]; then + if [ ! -f ${odir}/eddyCpuOutput.nii* ]; then + exit 1 + fi fi # Check the results against precomputed results @@ -128,11 +136,13 @@ do cuda_exit_status=$(($cuda_exit_status + $?)) done -./MoveBySuscFeeds.py ${odir} Omp `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/BrainMaskForComparison` `imglob -extension ${odir}/eddyOmpOutput` `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/PrecomputedResults` `imglob -extension ${odir}/eddyOmpOutput.eddy_mbs_first_order_fields` `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/PrecomputedResults.eddy_mbs_first_order_fields` ${max_mean_ima_diff} ${max_max_ima_diff} ${max_mean_dfield_diff} ${max_max_dfield_diff} - -omp_exit_status=$? +cpu_exit_status=0 +if [ "${cpu_exe}" != "" ]; then + ./MoveBySuscFeeds.py ${odir} Cpu `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/BrainMaskForComparison` `imglob -extension ${odir}/eddyCpuOutput` `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/PrecomputedResults` `imglob -extension ${odir}/eddyCpuOutput.eddy_mbs_first_order_fields` `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/PrecomputedResults.eddy_mbs_first_order_fields` ${max_mean_ima_diff} ${max_max_ima_diff} ${max_mean_dfield_diff} ${max_max_dfield_diff} + cpu_exit_status=$? +fi -if [ $cuda_exit_status -gt 0 ] || [ $omp_exit_status -gt 0 ]; then +if [ $cuda_exit_status -gt 0 ] || [ $cpu_exit_status -gt 0 ]; then echo "Test failed" exit 1 else diff --git a/eddy/EddyS2VTest/feedsRun b/eddy/EddyS2VTest/feedsRun index f1dc7b7..37f6a1e 100755 --- a/eddy/EddyS2VTest/feedsRun +++ b/eddy/EddyS2VTest/feedsRun @@ -28,7 +28,7 @@ fi # Find all eddy_cuda* executables cuda_exes="" -openmp_exe="" +cpu_exe="" for cuda_exe in ${exedir}/eddy_cuda*; do if [ -x "${cuda_exe}" ]; then @@ -36,12 +36,12 @@ do fi done -# Find the eddy_openmp executable +# Find the eddy_cpu executable if [ -x "${exedir}/eddy_openmp" ]; then - openmp_exe="${exedir}/eddy_openmp" + cpu_exe="${exedir}/eddy_openmp" fi -if [ "${cuda_exes}" == "" ] && [ "${openmp_exe}" == "" ]; then +if [ "${cuda_exes}" == "" ] && [ "${cpu_exe}" == "" ]; then echo "Cannot find any eddy executables in ${exedir}!" exit 1 fi @@ -65,31 +65,37 @@ do cuda_jid="$cuda_jid `fsl_sub -l ${odir} -q cuda.q ${cuda_exe} --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --ol_nstd=6 --ol_nvox=500 --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCudaOutput${version} --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose`" done -omp_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --ol_nstd=6 --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyOmpOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose` +if [ "${cpu_exe}" != "" ]; then + cpu_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${cpu_exe} --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --ol_nstd=6 --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCpuOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose` +fi # If running on a cluster, ensure that # slots are being reserved on the queue, # and wait until all jobs have finished if [ ! -z "${SGE_ROOT}" ]; then - qalter ${omp_jid} -R y - while [ : ]; do - for jid in ${cuda_jid}; - do - tmp=`qstat -j ${jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -ne 0 ]; then - break - fi - done + if [ "${cpu_exe}" != "" ]; then + qalter ${cpu_jid} -R y + fi + while [ : ]; do + for jid in ${cuda_jid}; + do + tmp=`qstat -j ${jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` + if [ $tmp -ne 0 ]; then + break + fi + done + if [ "${cpu_exe}" != "" ]; then + if [ $tmp -eq 0 ]; then + tmp=`qstat -j ${cpu_jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` if [ $tmp -eq 0 ]; then - tmp=`qstat -j ${omp_jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -eq 0 ]; then - break - fi + break fi - sleep 5m - done + fi + fi + sleep 5m + done fi # Check that eddy output exists @@ -103,9 +109,11 @@ do exit 1 fi done -if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then - echo "Omp output eddyOmpOutput missing" +if [ "${cpu_exe}" != "" ]; then + if [ ! -f ${odir}/eddyCpuOutput.nii* ]; then + echo "eddyCpuOutput missing" exit 1 + fi fi # Define some constants @@ -133,12 +141,15 @@ utput${version}.eddy_outlier_map ${indir}/EddyS2VTestData/eddyData/OutlierTruth/ cuda_exit_status=$(($cuda_exit_status + $?)) done -omp_exit_status=0 -./S2VFeeds.py ${odir} Omp `imglob -extension ${indir}/EddyS2VTestData/eddyData/testMask` ${indir}/EddyS2VTestData/eddyData/testBvals `imglob -extension ${odir}/eddyOmpOutput` `imglob -extension ${indir}/EddyS2VTestData/eddyData/GroundTruth/ground_truth` ${odir}/eddyOmpOutput.eddy_movement_over_time ${indir}/EddyS2VTestData/eddyData/MovementTruth/ground_truth.eddy_movement_over_time ${odir}/eddyOmpOutput.eddy_outlier_map ${indir}/EddyS2VTestData/eddyData/OutlierTruth/dropoutLog_1.txt ${max_ima_diff} ${max_false_pos} ${max_false_neg} ${max_trans_diff} ${max_rot_diff} -omp_exit_status=$? +cpu_exit_status=0 + +if [ "${cpu_exe}" != "" ]; then + ./S2VFeeds.py ${odir} Cpu `imglob -extension ${indir}/EddyS2VTestData/eddyData/testMask` ${indir}/EddyS2VTestData/eddyData/testBvals `imglob -extension ${odir}/eddyCpuOutput` `imglob -extension ${indir}/EddyS2VTestData/eddyData/GroundTruth/ground_truth` ${odir}/eddyCpuOutput.eddy_movement_over_time ${indir}/EddyS2VTestData/eddyData/MovementTruth/ground_truth.eddy_movement_over_time ${odir}/eddyCpuOutput.eddy_outlier_map ${indir}/EddyS2VTestData/eddyData/OutlierTruth/dropoutLog_1.txt ${max_ima_diff} ${max_false_pos} ${max_false_neg} ${max_trans_diff} ${max_rot_diff} + cpu_exit_status=$? +fi -if [ $cuda_exit_status -gt 0 ] || [ $omp_exit_status -gt 0 ]; then +if [ $cuda_exit_status -gt 0 ] || [ $cpu_exit_status -gt 0 ]; then echo "Test failed" exit 1 else diff --git a/eddy/EddyTest/feedsRun b/eddy/EddyTest/feedsRun index af955ae..cf3f1ac 100755 --- a/eddy/EddyTest/feedsRun +++ b/eddy/EddyTest/feedsRun @@ -26,7 +26,7 @@ fi # Find all eddy_cuda* executables cuda_exes="" -openmp_exe="" +cpu_exe="" for cuda_exe in ${exedir}/eddy_cuda*; do if [ -x "${cuda_exe}" ]; then @@ -34,12 +34,12 @@ do fi done -# Find the eddy_openmp executable +# Find the eddy_cpu executable if [ -x "${exedir}/eddy_openmp" ]; then - openmp_exe="${exedir}/eddy_openmp" + cpu_exe="${exedir}/eddy_openmp" fi -if [ "${cuda_exes}" == "" ] && [ "${openmp_exe}" == "" ]; then +if [ "${cuda_exes}" == "" ] && [ "${cpu_exe}" == "" ]; then echo "Cannot find any eddy executables in ${exedir}!" exit 1 fi @@ -72,32 +72,38 @@ do cuda_jid="$cuda_jid `fsl_sub -l ${odir} -q cuda.q ${cuda_exe} --imain=${indir}/EddyTestData/eddyData/testData --mask=${indir}/EddyTestData/eddyData/testMask --bvals=${indir}/EddyTestData/eddyData/testBvals --bvecs=${indir}/EddyTestData/eddyData/testBvecs --index=${indir}/EddyTestData/eddyData/testIndex --acqp=${indir}/EddyTestData/eddyData/testAcqparams --repol --fwhm=10,0,0,0,0 --out=${odir}/eddyCudaOutput${version} --dfields -v`" done -omp_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyTestData/eddyData/testData --mask=${indir}/EddyTestData/eddyData/testMask --bvals=${indir}/EddyTestData/eddyData/testBvals --bvecs=${indir}/EddyTestData/eddyData/testBvecs --index=${indir}/EddyTestData/eddyData/testIndex --acqp=${indir}/EddyTestData/eddyData/testAcqparams --repol --fwhm=10,0,0,0,0 --out=${odir}/eddyOmpOutput --dfields -v` +if [ "${cpu_exe}" != "" ]; then + cpu_jid=`fsl_sub -l ${odir} -q long.q -s openmp,6 ${cpu_exe} --imain=${indir}/EddyTestData/eddyData/testData --mask=${indir}/EddyTestData/eddyData/testMask --bvals=${indir}/EddyTestData/eddyData/testBvals --bvecs=${indir}/EddyTestData/eddyData/testBvecs --index=${indir}/EddyTestData/eddyData/testIndex --acqp=${indir}/EddyTestData/eddyData/testAcqparams --repol --fwhm=10,0,0,0,0 --out=${odir}/eddyCpuOutput --dfields -v` +fi # If running on a cluster, ensure that # slots are being reserved on the queue, # and wait until all jobs have finished if [ ! -z "${SGE_ROOT}" ]; then - qalter ${omp_jid} -R y - - while [ : ]; do - for jid in ${cuda_jid}; - do - tmp=`qstat -j ${jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -ne 0 ]; then - break - fi - done + if [ "${cpu_exe}" != "" ]; then + qalter ${cpu_jid} -R y + fi + + while [ : ]; do + for jid in ${cuda_jid}; + do + tmp=`qstat -j ${jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` + if [ $tmp -ne 0 ]; then + break + fi + done + if [ "${cpu_exe}" != "" ]; then + if [ $tmp -eq 0 ]; then + tmp=`qstat -j ${cpu_jid} | wc` + tmp=`echo $tmp | awk '{print $1}'` if [ $tmp -eq 0 ]; then - tmp=`qstat -j ${omp_jid} | wc` - tmp=`echo $tmp | awk '{print $1}'` - if [ $tmp -eq 0 ]; then - break - fi + break fi - sleep 5m - done + fi + fi + sleep 5m + done fi # Check that eddy output exists @@ -110,8 +116,12 @@ do exit 1 fi done -if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then - exit 1 + +if [ "${cpu_exe}" != "" ]; then + if [ ! -f ${odir}/eddyCpuOutput.nii* ]; then + echo "eddyCpuOutput missing" + exit 1 + fi fi # Check the results against ground truth @@ -125,10 +135,14 @@ do cuda_exit_status=$(($cuda_exit_status + $?)) done -./EddyFeeds.py ${odir} Omp `imglob -extension ${indir}/EddyTestData/eddyData/testMask` `imglob -extension ${odir}/eddyOmpOutput` `imglob -extension ${indir}/EddyTestData/eddyData/GroundTruth/ground_truth` ${odir}/eddyOmpOutput.eddy_displacement_fields ${indir}/EddyTestData/eddyData/DisplacementFields/DisplacementField ${odir}/eddyOmpOutput.eddy_outlier_map ${indir}/EddyTestData/eddyData/OutlierTruth/dropoutLog_1.txt ${max_mean_ima_diff} ${max_max_ima_diff} ${max_mean_dfield_diff} ${max_max_dfield_diff} ${allowed_false_positives} ${allowed_false_negatives} -omp_exit_status=$? +cpu_exit_status=0 + +if [ "${cpu_exe}" != "" ]; then + ./EddyFeeds.py ${odir} Cpu `imglob -extension ${indir}/EddyTestData/eddyData/testMask` `imglob -extension ${odir}/eddyCpuOutput` `imglob -extension ${indir}/EddyTestData/eddyData/GroundTruth/ground_truth` ${odir}/eddyCpuOutput.eddy_displacement_fields ${indir}/EddyTestData/eddyData/DisplacementFields/DisplacementField ${odir}/eddyCpuOutput.eddy_outlier_map ${indir}/EddyTestData/eddyData/OutlierTruth/dropoutLog_1.txt ${max_mean_ima_diff} ${max_max_ima_diff} ${max_mean_dfield_diff} ${max_max_dfield_diff} ${allowed_false_positives} ${allowed_false_negatives} + cpu_exit_status=$? +fi -if [ $cuda_exit_status -gt 0 ] || [ $omp_exit_status -gt 0 ]; then +if [ $cuda_exit_status -gt 0 ] || [ $cpu_exit_status -gt 0 ]; then echo "Test failed" exit 1 else -- GitLab