diff options
author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-06-22 15:46:11 +0200 |
---|---|---|
committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-06-22 16:06:32 +0200 |
commit | e5b70e8b53e4ecc81b1aacc3af7893faf49ddc24 (patch) | |
tree | e92e7e11123d6b8daadb6bd70bdd2f1d4230423d /cuda/3d | |
parent | 3c5d9351a801f8f83565a4dbc9186cbc6a5d2b76 (diff) | |
download | astra-e5b70e8b53e4ecc81b1aacc3af7893faf49ddc24.tar.gz astra-e5b70e8b53e4ecc81b1aacc3af7893faf49ddc24.tar.bz2 astra-e5b70e8b53e4ecc81b1aacc3af7893faf49ddc24.tar.xz astra-e5b70e8b53e4ecc81b1aacc3af7893faf49ddc24.zip |
Move CUDA include files
Diffstat (limited to 'cuda/3d')
-rw-r--r-- | cuda/3d/algo3d.cu | 12 | ||||
-rw-r--r-- | cuda/3d/algo3d.h | 71 | ||||
-rw-r--r-- | cuda/3d/arith3d.cu | 5 | ||||
-rw-r--r-- | cuda/3d/arith3d.h | 79 | ||||
-rw-r--r-- | cuda/3d/astra3d.cu | 25 | ||||
-rw-r--r-- | cuda/3d/astra3d.h | 314 | ||||
-rw-r--r-- | cuda/3d/cgls3d.cu | 10 | ||||
-rw-r--r-- | cuda/3d/cgls3d.h | 112 | ||||
-rw-r--r-- | cuda/3d/cone_bp.cu | 16 | ||||
-rw-r--r-- | cuda/3d/cone_bp.h | 45 | ||||
-rw-r--r-- | cuda/3d/cone_fp.cu | 14 | ||||
-rw-r--r-- | cuda/3d/cone_fp.h | 45 | ||||
-rw-r--r-- | cuda/3d/darthelper3d.cu | 7 | ||||
-rw-r--r-- | cuda/3d/darthelper3d.h | 42 | ||||
-rw-r--r-- | cuda/3d/dims3d.h | 77 | ||||
-rw-r--r-- | cuda/3d/fdk.cu | 25 | ||||
-rw-r--r-- | cuda/3d/fdk.h | 50 | ||||
-rw-r--r-- | cuda/3d/mem3d.cu | 25 | ||||
-rw-r--r-- | cuda/3d/mem3d.h | 105 | ||||
-rw-r--r-- | cuda/3d/par3d_bp.cu | 16 | ||||
-rw-r--r-- | cuda/3d/par3d_bp.h | 46 | ||||
-rw-r--r-- | cuda/3d/par3d_fp.cu | 15 | ||||
-rw-r--r-- | cuda/3d/par3d_fp.h | 50 | ||||
-rw-r--r-- | cuda/3d/sirt3d.cu | 14 | ||||
-rw-r--r-- | cuda/3d/sirt3d.h | 121 | ||||
-rw-r--r-- | cuda/3d/util3d.cu | 10 | ||||
-rw-r--r-- | cuda/3d/util3d.h | 68 |
27 files changed, 99 insertions, 1320 deletions
diff --git a/cuda/3d/algo3d.cu b/cuda/3d/algo3d.cu index ee7a23b..b4a435b 100644 --- a/cuda/3d/algo3d.cu +++ b/cuda/3d/algo3d.cu @@ -25,13 +25,13 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cassert> +#include "astra/cuda/3d/algo3d.h" +#include "astra/cuda/3d/cone_fp.h" +#include "astra/cuda/3d/cone_bp.h" +#include "astra/cuda/3d/par3d_fp.h" +#include "astra/cuda/3d/par3d_bp.h" -#include "algo3d.h" -#include "cone_fp.h" -#include "cone_bp.h" -#include "par3d_fp.h" -#include "par3d_bp.h" +#include <cassert> namespace astraCUDA3d { diff --git a/cuda/3d/algo3d.h b/cuda/3d/algo3d.h deleted file mode 100644 index f5fd207..0000000 --- a/cuda/3d/algo3d.h +++ /dev/null @@ -1,71 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ALGO_H -#define _CUDA_ALGO_H - -#include "dims3d.h" -#include "util3d.h" - -namespace astraCUDA3d { - -class _AstraExport ReconAlgo3D { -public: - ReconAlgo3D(); - ~ReconAlgo3D(); - - bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs, const SProjectorParams3D& params); - bool setPar3DGeometry(const SDimensions3D& dims, const SPar3DProjection* projs, const SProjectorParams3D& params); - - void signalAbort() { shouldAbort = true; } - -protected: - void reset(); - - bool callFP(cudaPitchedPtr& D_volumeData, - cudaPitchedPtr& D_projData, - float outputScale); - bool callBP(cudaPitchedPtr& D_volumeData, - cudaPitchedPtr& D_projData, - float outputScale); - - SDimensions3D dims; - SProjectorParams3D params; - SConeProjection* coneProjs; - SPar3DProjection* par3DProjs; - - float fOutputScale; - - volatile bool shouldAbort; - -}; - - -} - -#endif - diff --git a/cuda/3d/arith3d.cu b/cuda/3d/arith3d.cu index 05b94ce..2f4054e 100644 --- a/cuda/3d/arith3d.cu +++ b/cuda/3d/arith3d.cu @@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "util3d.h" -#include "arith3d.h" +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/arith3d.h" + #include <cassert> namespace astraCUDA3d { diff --git a/cuda/3d/arith3d.h b/cuda/3d/arith3d.h deleted file mode 100644 index fa9f3a1..0000000 --- a/cuda/3d/arith3d.h +++ /dev/null @@ -1,79 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ARITH3D_H -#define _CUDA_ARITH3D_H - -#include <cuda.h> - -namespace astraCUDA3d { - -struct opAddScaled; -struct opScaleAndAdd; -struct opAddMulScaled; -struct opAddMul; -struct opAdd; -struct opMul; -struct opMul2; -struct opDividedBy; -struct opInvert; -struct opSet; -struct opClampMin; -struct opClampMax; - -enum VolType { - SINO = 0, - VOL = 1 -}; - - -template<typename op, VolType t> void processVol(CUdeviceptr* out, unsigned int pitch, unsigned int width, unsigned int height); -template<typename op, VolType t> void processVol(CUdeviceptr* out, float fParam, unsigned int pitch, unsigned int width, unsigned int height); -template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in, unsigned int pitch, unsigned int width, unsigned int height); -template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in, float fParam, unsigned int pitch, unsigned int width, unsigned int height); -template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in1, const CUdeviceptr* in2, float fParam, unsigned int pitch, unsigned int width, unsigned int height); -template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in1, const CUdeviceptr* in2, unsigned int pitch, unsigned int width, unsigned int height); - -template<typename op> void processVol3D(cudaPitchedPtr& out, const SDimensions3D& dims); -template<typename op> void processVol3D(cudaPitchedPtr& out, float fParam, const SDimensions3D& dims); -template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, const SDimensions3D& dims); -template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, float fParam, const SDimensions3D& dims); -template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, float fParam, const SDimensions3D& dims); -template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, const SDimensions3D& dims); - -template<typename op> void processSino3D(cudaPitchedPtr& out, const SDimensions3D& dims); -template<typename op> void processSino3D(cudaPitchedPtr& out, float fParam, const SDimensions3D& dims); -template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, const SDimensions3D& dims); -template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, float fParam, const SDimensions3D& dims); -template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, float fParam, const SDimensions3D& dims); -template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, const SDimensions3D& dims); - - - -} - -#endif diff --git a/cuda/3d/astra3d.cu b/cuda/3d/astra3d.cu index c0f4c4a..23af36a 100644 --- a/cuda/3d/astra3d.cu +++ b/cuda/3d/astra3d.cu @@ -25,19 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> - -#include "cgls3d.h" -#include "sirt3d.h" -#include "util3d.h" -#include "cone_fp.h" -#include "cone_bp.h" -#include "par3d_fp.h" -#include "par3d_bp.h" -#include "fdk.h" -#include "arith3d.h" -#include "astra3d.h" +#include "astra/cuda/3d/cgls3d.h" +#include "astra/cuda/3d/sirt3d.h" +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/cone_fp.h" +#include "astra/cuda/3d/cone_bp.h" +#include "astra/cuda/3d/par3d_fp.h" +#include "astra/cuda/3d/par3d_bp.h" +#include "astra/cuda/3d/fdk.h" +#include "astra/cuda/3d/arith3d.h" +#include "astra/cuda/3d/astra3d.h" #include "astra/ParallelProjectionGeometry3D.h" #include "astra/ParallelVecProjectionGeometry3D.h" @@ -46,6 +43,8 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. #include "astra/VolumeGeometry3D.h" #include <iostream> +#include <cstdio> +#include <cassert> using namespace astraCUDA3d; diff --git a/cuda/3d/astra3d.h b/cuda/3d/astra3d.h deleted file mode 100644 index 0ea752d..0000000 --- a/cuda/3d/astra3d.h +++ /dev/null @@ -1,314 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_ASTRA3D_H -#define _CUDA_ASTRA3D_H - -#include "dims3d.h" - -namespace astra { - - -// TODO: Switch to a class hierarchy as with the 2D algorithms - - -class CProjectionGeometry3D; -class CParallelProjectionGeometry3D; -class CParallelVecProjectionGeometry3D; -class CConeProjectionGeometry3D; -class CConeVecProjectionGeometry3D; -class CVolumeGeometry3D; -class AstraSIRT3d_internal; - -using astraCUDA3d::Cuda3DProjectionKernel; -using astraCUDA3d::ker3d_default; -using astraCUDA3d::ker3d_sum_square_weights; - - -class _AstraExport AstraSIRT3d { -public: - - AstraSIRT3d(); - ~AstraSIRT3d(); - - // Set the volume and projection geometry - bool setGeometry(const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom); - - // Enable supersampling. - // - // The number of rays used in FP is the square of iDetectorSuperSampling. - // The number of rays used in BP is the cube of iVoxelSuperSampling. - bool enableSuperSampling(unsigned int iVoxelSuperSampling, - unsigned int iDetectorSuperSampling); - - void setRelaxation(float r); - - // Enable volume/sinogram masks - // - // This may optionally be called before init(). - // If it is called, setVolumeMask()/setSinogramMask() must be called between - // setSinogram() and iterate(). - bool enableVolumeMask(); - bool enableSinogramMask(); - - // Set GPU index - // - // This should be called before init(). Note that setting the GPU index - // in a thread which has already used the GPU may not work. - bool setGPUIndex(int index); - - // Allocate GPU buffers and - // precompute geometry-specific data. - // - // This must be called after calling setReconstructionGeometry() and - // setProjectionGeometry() or setFanProjectionGeometry(). - bool init(); - - // Setup input sinogram for a slice. - // pfSinogram must be a float array of size XXX - // NB: iSinogramPitch is measured in floats, not in bytes. - // - // This must be called after init(), and before iterate(). It may be - // called again after iterate()/getReconstruction() to start a new slice. - // - // pfSinogram will only be read from during this call. - bool setSinogram(const float* pfSinogram, unsigned int iSinogramPitch); - - // Setup volume mask for a slice. - // pfMask must be a float array of size XXX - // NB: iMaskPitch is measured in floats, not in bytes. - // - // It may only contain the exact values 0.0f and 1.0f. Only volume pixels - // for which pfMask[z] is 1.0f are processed. - bool setVolumeMask(const float* pfMask, unsigned int iMaskPitch); - - // Setup sinogram mask for a slice. - // pfMask must be a float array of size XXX - // NB: iMaskPitch is measured in floats, not in bytes. - // - // It may only contain the exact values 0.0f and 1.0f. Only sinogram pixels - // for which pfMask[z] is 1.0f are processed. - bool setSinogramMask(const float* pfMask, unsigned int iMaskPitch); - - // Set the starting reconstruction for SIRT. - // pfReconstruction must be a float array of size XXX - // NB: iReconstructionPitch is measured in floats, not in bytes. - // - // This may be called between setSinogram() and iterate(). - // If this function is not called before iterate(), SIRT will start - // from a zero reconstruction. - // - // pfReconstruction will only be read from during this call. - bool setStartReconstruction(const float* pfReconstruction, - unsigned int iReconstructionPitch); - - // Enable min/max constraint. - // - // These may optionally be called between init() and iterate() - bool setMinConstraint(float fMin); - bool setMaxConstraint(float fMax); - - // Perform a number of (additive) SIRT iterations. - // This must be called after setSinogram(). - // - // If called multiple times, without calls to setSinogram() or - // setStartReconstruction() in between, iterate() will continue from - // the result of the previous call. - // Calls to getReconstruction() are allowed between calls to iterate() and - // do not change the state. - bool iterate(unsigned int iIterations); - - // Get the reconstructed slice. - // pfReconstruction must be a float array of size XXX - // NB: iReconstructionPitch is measured in floats, not in bytes. - // - // This may be called after iterate(). - bool getReconstruction(float* pfReconstruction, - unsigned int iReconstructionPitch) const; - - // Compute the norm of the difference of the FP of the current - // reconstruction and the sinogram. (This performs one FP.) - // It can be called after iterate(). - float computeDiffNorm(); - - // Signal the algorithm that it should abort after the current iteration. - // This is intended to be called from another thread. - void signalAbort(); - -protected: - AstraSIRT3d_internal *pData; -}; - - -class AstraCGLS3d_internal; - - -class _AstraExport AstraCGLS3d { -public: - - AstraCGLS3d(); - ~AstraCGLS3d(); - - // Set the volume and projection geometry - bool setGeometry(const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom); - - // Enable supersampling. - // - // The number of rays used in FP is the square of iDetectorSuperSampling. - // The number of rays used in BP is the cube of iVoxelSuperSampling. - bool enableSuperSampling(unsigned int iVoxelSuperSampling, - unsigned int iDetectorSuperSampling); - - // Enable volume/sinogram masks - // - // This may optionally be called before init(). - // If it is called, setVolumeMask()/setSinogramMask() must be called between - // setSinogram() and iterate(). - bool enableVolumeMask(); - //bool enableSinogramMask(); - - // Set GPU index - // - // This should be called before init(). Note that setting the GPU index - // in a thread which has already used the GPU may not work. - bool setGPUIndex(int index); - - // Allocate GPU buffers and - // precompute geometry-specific data. - // - // This must be called after calling setReconstructionGeometry() and - // setProjectionGeometry() or setFanProjectionGeometry(). - bool init(); - - // Setup input sinogram for a slice. - // pfSinogram must be a float array of size XXX - // NB: iSinogramPitch is measured in floats, not in bytes. - // - // This must be called after init(), and before iterate(). It may be - // called again after iterate()/getReconstruction() to start a new slice. - // - // pfSinogram will only be read from during this call. - bool setSinogram(const float* pfSinogram, unsigned int iSinogramPitch); - - // Setup volume mask for a slice. - // pfMask must be a float array of size XXX - // NB: iMaskPitch is measured in floats, not in bytes. - // - // It may only contain the exact values 0.0f and 1.0f. Only volume pixels - // for which pfMask[z] is 1.0f are processed. - bool setVolumeMask(const float* pfMask, unsigned int iMaskPitch); - - // Setup sinogram mask for a slice. - // pfMask must be a float array of size XXX - // NB: iMaskPitch is measured in floats, not in bytes. - // - // It may only contain the exact values 0.0f and 1.0f. Only sinogram pixels - // for which pfMask[z] is 1.0f are processed. - //bool setSinogramMask(const float* pfMask, unsigned int iMaskPitch); - - // Set the starting reconstruction for SIRT. - // pfReconstruction must be a float array of size XXX - // NB: iReconstructionPitch is measured in floats, not in bytes. - // - // This may be called between setSinogram() and iterate(). - // If this function is not called before iterate(), SIRT will start - // from a zero reconstruction. - // - // pfReconstruction will only be read from during this call. - bool setStartReconstruction(const float* pfReconstruction, - unsigned int iReconstructionPitch); - - // Enable min/max constraint. - // - // These may optionally be called between init() and iterate() - //bool setMinConstraint(float fMin); - //bool setMaxConstraint(float fMax); - - // Perform a number of (additive) SIRT iterations. - // This must be called after setSinogram(). - // - // If called multiple times, without calls to setSinogram() or - // setStartReconstruction() in between, iterate() will continue from - // the result of the previous call. - // Calls to getReconstruction() are allowed between calls to iterate() and - // do not change the state. - bool iterate(unsigned int iIterations); - - // Get the reconstructed slice. - // pfReconstruction must be a float array of size XXX - // NB: iReconstructionPitch is measured in floats, not in bytes. - // - // This may be called after iterate(). - bool getReconstruction(float* pfReconstruction, - unsigned int iReconstructionPitch) const; - - // Compute the norm of the difference of the FP of the current - // reconstruction and the sinogram. (This performs one FP.) - // It can be called after iterate(). - float computeDiffNorm(); - - // Signal the algorithm that it should abort after the current iteration. - // This is intended to be called from another thread. - void signalAbort(); - -protected: - AstraCGLS3d_internal *pData; -}; - -bool convertAstraGeometry_dims(const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom, - astraCUDA3d::SDimensions3D& dims); - -bool convertAstraGeometry(const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom, - SPar3DProjection*& pParProjs, - SConeProjection*& pConeProjs, - astraCUDA3d::SProjectorParams3D& params); - -_AstraExport bool astraCudaFP(const float* pfVolume, float* pfProjections, - const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom, - int iGPUIndex, int iDetectorSuperSampling, - Cuda3DProjectionKernel projKernel); - - -_AstraExport bool astraCudaBP(float* pfVolume, const float* pfProjections, - const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom, - int iGPUIndex, int iVoxelSuperSampling); - -_AstraExport bool astraCudaBP_SIRTWeighted(float* pfVolume, const float* pfProjections, - const CVolumeGeometry3D* pVolGeom, - const CProjectionGeometry3D* pProjGeom, - int iGPUIndex, int iVoxelSuperSampling); - -} - - -#endif diff --git a/cuda/3d/cgls3d.cu b/cuda/3d/cgls3d.cu index 7e31749..0df10f0 100644 --- a/cuda/3d/cgls3d.cu +++ b/cuda/3d/cgls3d.cu @@ -25,14 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/cgls3d.h" +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/arith3d.h" +#include "astra/cuda/3d/cone_fp.h" + #include <cstdio> #include <cassert> -#include "cgls3d.h" -#include "util3d.h" -#include "arith3d.h" -#include "cone_fp.h" - #ifdef STANDALONE #include "testutil.h" #endif diff --git a/cuda/3d/cgls3d.h b/cuda/3d/cgls3d.h deleted file mode 100644 index b9b9e3a..0000000 --- a/cuda/3d/cgls3d.h +++ /dev/null @@ -1,112 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_CGLS3D_H -#define _CUDA_CGLS3D_H - -#include "algo3d.h" - -namespace astraCUDA3d { - -class _AstraExport CGLS : public ReconAlgo3D { -public: - CGLS(); - ~CGLS(); - -// bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs); - - - bool enableVolumeMask(); - bool enableSinogramMask(); - - // init should be called after setting all geometry - bool init(); - - // setVolumeMask should be called after init and before iterate, - // but only if enableVolumeMask was called before init. - // It may be called again after iterate. - bool setVolumeMask(cudaPitchedPtr& D_maskData); - - // setSinogramMask should be called after init and before iterate, - // but only if enableSinogramMask was called before init. - // It may be called again after iterate. - bool setSinogramMask(cudaPitchedPtr& D_smaskData); - - - // setBuffers should be called after init and before iterate. - // It may be called again after iterate. - bool setBuffers(cudaPitchedPtr& D_volumeData, - cudaPitchedPtr& D_projData); - - - // set Min/Max constraints. They may be called at any time, and will affect - // any iterate() calls afterwards. - bool setMinConstraint(float fMin) { return false; } - bool setMaxConstraint(float fMax) { return false; } - - // iterate should be called after init and setBuffers. - // It may be called multiple times. - bool iterate(unsigned int iterations); - - // Compute the norm of the difference of the FP of the current reconstruction - // and the sinogram. (This performs one FP.) - // It can be called after iterate. - float computeDiffNorm(); - -protected: - void reset(); - - bool useVolumeMask; - bool useSinogramMask; - - cudaPitchedPtr D_maskData; - cudaPitchedPtr D_smaskData; - - // Input/output - cudaPitchedPtr D_sinoData; - cudaPitchedPtr D_volumeData; - - // Temporary buffers - cudaPitchedPtr D_r; - cudaPitchedPtr D_w; - cudaPitchedPtr D_z; - cudaPitchedPtr D_p; - - float gamma; - - bool sliceInitialized; -}; - -_AstraExport bool doCGLS(cudaPitchedPtr D_volumeData, unsigned int volumePitch, - cudaPitchedPtr D_projData, unsigned int projPitch, - cudaPitchedPtr D_maskData, unsigned int maskPitch, - const SDimensions3D& dims, const SConeProjection* projs, - unsigned int iterations); - -} - -#endif diff --git a/cuda/3d/cone_bp.cu b/cuda/3d/cone_bp.cu index 2d12d00..feebda2 100644 --- a/cuda/3d/cone_bp.cu +++ b/cuda/3d/cone_bp.cu @@ -25,20 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" + +#ifdef STANDALONE +#include "astra/cuda/3d/cone_fp.h" +#include "testutil.h" +#endif + #include <cstdio> #include <cassert> #include <iostream> #include <list> #include <cuda.h> -#include "util3d.h" - -#ifdef STANDALONE -#include "cone_fp.h" -#include "testutil.h" -#endif - -#include "dims3d.h" typedef texture<float, 3, cudaReadModeElementType> texture3D; diff --git a/cuda/3d/cone_bp.h b/cuda/3d/cone_bp.h deleted file mode 100644 index 6dcadb1..0000000 --- a/cuda/3d/cone_bp.h +++ /dev/null @@ -1,45 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_CONE_BP_H -#define _CUDA_CONE_BP_H - -namespace astraCUDA3d { - -_AstraExport bool ConeBP_Array(cudaPitchedPtr D_volumeData, - cudaArray *D_projArray, - const SDimensions3D& dims, const SConeProjection* angles, - const SProjectorParams3D& params); - -_AstraExport bool ConeBP(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SConeProjection* angles, - const SProjectorParams3D& params); - -} - -#endif diff --git a/cuda/3d/cone_fp.cu b/cuda/3d/cone_fp.cu index 21598d0..7e0fae8 100644 --- a/cuda/3d/cone_fp.cu +++ b/cuda/3d/cone_fp.cu @@ -25,19 +25,19 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" + +#ifdef STANDALONE +#include "testutil.h" +#endif + #include <cstdio> #include <cassert> #include <iostream> #include <list> #include <cuda.h> -#include "util3d.h" - -#ifdef STANDALONE -#include "testutil.h" -#endif - -#include "dims3d.h" typedef texture<float, 3, cudaReadModeElementType> texture3D; diff --git a/cuda/3d/cone_fp.h b/cuda/3d/cone_fp.h deleted file mode 100644 index 4da72d4..0000000 --- a/cuda/3d/cone_fp.h +++ /dev/null @@ -1,45 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_CONE_FP_H -#define _CUDA_CONE_FP_H - -namespace astraCUDA3d { - -_AstraExport bool ConeFP_Array(cudaArray *D_volArray, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SConeProjection* angles, - const SProjectorParams3D& params); - -_AstraExport bool ConeFP(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SConeProjection* angles, - const SProjectorParams3D& params); - -} - -#endif diff --git a/cuda/3d/darthelper3d.cu b/cuda/3d/darthelper3d.cu index 473199a..d8ccfa6 100644 --- a/cuda/3d/darthelper3d.cu +++ b/cuda/3d/darthelper3d.cu @@ -25,9 +25,10 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include "util3d.h" -#include "dims3d.h" -#include "darthelper3d.h" +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" +#include "astra/cuda/3d/darthelper3d.h" + #include <cassert> namespace astraCUDA3d { diff --git a/cuda/3d/darthelper3d.h b/cuda/3d/darthelper3d.h deleted file mode 100644 index 385e48e..0000000 --- a/cuda/3d/darthelper3d.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_DARTHELPER3_H -#define _CUDA_DARTHELPER3_H - -#include "dims3d.h" - -namespace astraCUDA3d { - - void dartSmoothing(float* out, const float* in, float b, unsigned int radius, SDimensions3D dims); - void dartMasking(float* out, const float* in, unsigned int conn, unsigned int radius, unsigned int threshold, SDimensions3D dims); - - bool setGPUIndex(int index); - -} - -#endif diff --git a/cuda/3d/dims3d.h b/cuda/3d/dims3d.h deleted file mode 100644 index ef4ea78..0000000 --- a/cuda/3d/dims3d.h +++ /dev/null @@ -1,77 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_CONE_DIMS_H -#define _CUDA_CONE_DIMS_H - -#include "astra/GeometryUtil3D.h" - - -namespace astraCUDA3d { - -using astra::SConeProjection; -using astra::SPar3DProjection; - - -enum Cuda3DProjectionKernel { - ker3d_default = 0, - ker3d_sum_square_weights -}; - - -struct SDimensions3D { - unsigned int iVolX; - unsigned int iVolY; - unsigned int iVolZ; - unsigned int iProjAngles; - unsigned int iProjU; // number of detectors in the U direction - unsigned int iProjV; // number of detectors in the V direction -}; - -struct SProjectorParams3D { - SProjectorParams3D() : - iRaysPerDetDim(1), iRaysPerVoxelDim(1), - fOutputScale(1.0f), - fVolScaleX(1.0f), fVolScaleY(1.0f), fVolScaleZ(1.0f), - ker(ker3d_default), - bFDKWeighting(false) - { } - - unsigned int iRaysPerDetDim; - unsigned int iRaysPerVoxelDim; - float fOutputScale; - float fVolScaleX; - float fVolScaleY; - float fVolScaleZ; - Cuda3DProjectionKernel ker; - bool bFDKWeighting; -}; - -} - -#endif - diff --git a/cuda/3d/fdk.cu b/cuda/3d/fdk.cu index 48194c4..8aea84d 100644 --- a/cuda/3d/fdk.cu +++ b/cuda/3d/fdk.cu @@ -25,25 +25,26 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> -#include <iostream> -#include <list> +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" +#include "astra/cuda/3d/arith3d.h" +#include "astra/cuda/3d/cone_bp.h" -#include <cuda.h> -#include "util3d.h" +#include "astra/cuda/2d/fft.h" #ifdef STANDALONE -#include "cone_fp.h" +#include "astra/cuda/3d/cone_fp.h" #include "testutil.h" #endif -#include "dims3d.h" -#include "arith3d.h" -#include "cone_bp.h" -#include "../2d/fft.h" +#include "astra/Logging.h" -#include "../../include/astra/Logging.h" +#include <cstdio> +#include <cassert> +#include <iostream> +#include <list> + +#include <cuda.h> namespace astraCUDA3d { diff --git a/cuda/3d/fdk.h b/cuda/3d/fdk.h deleted file mode 100644 index 6f6e73b..0000000 --- a/cuda/3d/fdk.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_FDK_H -#define _CUDA_FDK_H - -#include "dims3d.h" - -namespace astraCUDA3d { - -bool FDK_PreWeight(cudaPitchedPtr D_projData, - float fSrcOrigin, float fDetOrigin, - float fZShift, - float fDetUSize, float fDetVSize, float fVoxSize, - bool bShortScan, - const SDimensions3D& dims, const float* angles); - -bool FDK(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SConeProjection* angles, - const SDimensions3D& dims, SProjectorParams3D params, bool bShortScan, - const float* filter); - -} - -#endif diff --git a/cuda/3d/mem3d.cu b/cuda/3d/mem3d.cu index 4a26921..fe3e723 100644 --- a/cuda/3d/mem3d.cu +++ b/cuda/3d/mem3d.cu @@ -25,23 +25,22 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/mem3d.h" +#include "astra/cuda/3d/astra3d.h" +#include "astra/cuda/3d/cone_fp.h" +#include "astra/cuda/3d/cone_bp.h" +#include "astra/cuda/3d/par3d_fp.h" +#include "astra/cuda/3d/par3d_bp.h" +#include "astra/cuda/3d/fdk.h" -#include "util3d.h" +#include "astra/cuda/2d/astra.h" -#include "mem3d.h" - -#include "../2d/astra.h" +#include "astra/Logging.h" -#include "astra3d.h" -#include "cone_fp.h" -#include "cone_bp.h" -#include "par3d_fp.h" -#include "par3d_bp.h" -#include "fdk.h" +#include <cstdio> +#include <cassert> -#include "astra/Logging.h" namespace astraCUDA3d { diff --git a/cuda/3d/mem3d.h b/cuda/3d/mem3d.h deleted file mode 100644 index 78e1294..0000000 --- a/cuda/3d/mem3d.h +++ /dev/null @@ -1,105 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_MEM3D_H -#define _CUDA_MEM3D_H - -#include <boost/shared_ptr.hpp> - -#include "astra3d.h" - -namespace astra { -class CVolumeGeometry3D; -class CProjectionGeometry3D; -} - -namespace astraCUDA3d { - -// TODO: Make it possible to delete these handles when they're no longer -// necessary inside the FP/BP -// -// TODO: Add functions for querying capacity - -struct SMemHandle3D_internal; - -struct MemHandle3D { - boost::shared_ptr<SMemHandle3D_internal> d; - operator bool() const { return (bool)d; } -}; - -struct SSubDimensions3D { - unsigned int nx; - unsigned int ny; - unsigned int nz; - unsigned int pitch; - unsigned int subnx; - unsigned int subny; - unsigned int subnz; - unsigned int subx; - unsigned int suby; - unsigned int subz; -}; - -/* -// Useful or not? -enum Mem3DCopyMode { - MODE_SET, - MODE_ADD -}; -*/ - -enum Mem3DZeroMode { - INIT_NO, - INIT_ZERO -}; - -int maxBlockDimension(); - -_AstraExport MemHandle3D wrapHandle(float *D_ptr, unsigned int x, unsigned int y, unsigned int z, unsigned int pitch); - -MemHandle3D allocateGPUMemory(unsigned int x, unsigned int y, unsigned int z, Mem3DZeroMode zero); - -bool copyToGPUMemory(const float *src, MemHandle3D dst, const SSubDimensions3D &pos); - -bool copyFromGPUMemory(float *dst, MemHandle3D src, const SSubDimensions3D &pos); - -bool freeGPUMemory(MemHandle3D handle); - -bool zeroGPUMemory(MemHandle3D handle, unsigned int x, unsigned int y, unsigned int z); - -bool setGPUIndex(int index); - - -bool FP(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, int iDetectorSuperSampling, astra::Cuda3DProjectionKernel projKernel); - -bool BP(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, int iVoxelSuperSampling, bool bFDKWeighting); - -bool FDK(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, bool bShortScan, const float *pfFilter = 0); - -} - -#endif diff --git a/cuda/3d/par3d_bp.cu b/cuda/3d/par3d_bp.cu index 6f76d22..3656f78 100644 --- a/cuda/3d/par3d_bp.cu +++ b/cuda/3d/par3d_bp.cu @@ -25,20 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" + +#ifdef STANDALONE +#include "astra/cuda/3d/par3d_fp.h" +#include "testutil.h" +#endif + #include <cstdio> #include <cassert> #include <iostream> #include <list> #include <cuda.h> -#include "util3d.h" - -#ifdef STANDALONE -#include "par3d_fp.h" -#include "testutil.h" -#endif - -#include "dims3d.h" typedef texture<float, 3, cudaReadModeElementType> texture3D; diff --git a/cuda/3d/par3d_bp.h b/cuda/3d/par3d_bp.h deleted file mode 100644 index b4ec6a3..0000000 --- a/cuda/3d/par3d_bp.h +++ /dev/null @@ -1,46 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_PAR3D_BP_H -#define _CUDA_PAR3D_BP_H - -namespace astraCUDA3d { - -_AstraExport bool Par3DBP_Array(cudaPitchedPtr D_volumeData, - cudaArray *D_projArray, - const SDimensions3D& dims, const SPar3DProjection* angles, - const SProjectorParams3D& params); - -_AstraExport bool Par3DBP(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SPar3DProjection* angles, - const SProjectorParams3D& params); - - -} - -#endif diff --git a/cuda/3d/par3d_fp.cu b/cuda/3d/par3d_fp.cu index 8e2a2d0..515b1ba 100644 --- a/cuda/3d/par3d_fp.cu +++ b/cuda/3d/par3d_fp.cu @@ -25,19 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/dims3d.h" + +#ifdef STANDALONE +#include "testutil.h" +#endif + + #include <cstdio> #include <cassert> #include <iostream> #include <list> #include <cuda.h> -#include "util3d.h" - -#ifdef STANDALONE -#include "testutil.h" -#endif - -#include "dims3d.h" typedef texture<float, 3, cudaReadModeElementType> texture3D; diff --git a/cuda/3d/par3d_fp.h b/cuda/3d/par3d_fp.h deleted file mode 100644 index 18f5f2e..0000000 --- a/cuda/3d/par3d_fp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_PAR3D_FP_H -#define _CUDA_PAR3D_FP_H - -namespace astraCUDA3d { - -_AstraExport bool Par3DFP_Array(cudaArray *D_volArray, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SPar3DProjection* angles, - const SProjectorParams3D& params); - -_AstraExport bool Par3DFP(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SPar3DProjection* angles, - const SProjectorParams3D& params); - -_AstraExport bool Par3DFP_SumSqW(cudaPitchedPtr D_volumeData, - cudaPitchedPtr D_projData, - const SDimensions3D& dims, const SPar3DProjection* angles, - const SProjectorParams3D& params); - -} - -#endif diff --git a/cuda/3d/sirt3d.cu b/cuda/3d/sirt3d.cu index 14f5768..332589e 100644 --- a/cuda/3d/sirt3d.cu +++ b/cuda/3d/sirt3d.cu @@ -25,18 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ -#include <cstdio> -#include <cassert> - -#include "sirt3d.h" -#include "util3d.h" -#include "arith3d.h" -#include "cone_fp.h" +#include "astra/cuda/3d/sirt3d.h" +#include "astra/cuda/3d/util3d.h" +#include "astra/cuda/3d/arith3d.h" +#include "astra/cuda/3d/cone_fp.h" #ifdef STANDALONE #include "testutil.h" #endif +#include <cstdio> +#include <cassert> + namespace astraCUDA3d { SIRT::SIRT() : ReconAlgo3D() diff --git a/cuda/3d/sirt3d.h b/cuda/3d/sirt3d.h deleted file mode 100644 index 7c9a7c0..0000000 --- a/cuda/3d/sirt3d.h +++ /dev/null @@ -1,121 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_SIRT3D_H -#define _CUDA_SIRT3D_H - -#include "algo3d.h" - -namespace astraCUDA3d { - -class _AstraExport SIRT : public ReconAlgo3D { -public: - SIRT(); - ~SIRT(); - -// bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs); - - - bool enableVolumeMask(); - bool enableSinogramMask(); - - // init should be called after setting all geometry - bool init(); - - // Set relaxation factor. This may be called after init and before iterate. - void setRelaxation(float r) { fRelaxation = r; } - - // setVolumeMask should be called after init and before iterate, - // but only if enableVolumeMask was called before init. - // It may be called again after iterate. - bool setVolumeMask(cudaPitchedPtr& D_maskData); - - // setSinogramMask should be called after init and before iterate, - // but only if enableSinogramMask was called before init. - // It may be called again after iterate. - bool setSinogramMask(cudaPitchedPtr& D_smaskData); - - - // setBuffers should be called after init and before iterate. - // It may be called again after iterate. - bool setBuffers(cudaPitchedPtr& D_volumeData, - cudaPitchedPtr& D_projData); - - - // set Min/Max constraints. They may be called at any time, and will affect - // any iterate() calls afterwards. - bool setMinConstraint(float fMin); - bool setMaxConstraint(float fMax); - - // iterate should be called after init and setBuffers. - // It may be called multiple times. - bool iterate(unsigned int iterations); - - // Compute the norm of the difference of the FP of the current reconstruction - // and the sinogram. (This performs one FP.) - // It can be called after iterate. - float computeDiffNorm(); - -protected: - void reset(); - bool precomputeWeights(); - - bool useVolumeMask; - bool useSinogramMask; - - bool useMinConstraint; - bool useMaxConstraint; - float fMinConstraint; - float fMaxConstraint; - - float fRelaxation; - - cudaPitchedPtr D_maskData; - cudaPitchedPtr D_smaskData; - - // Input/output - cudaPitchedPtr D_sinoData; - cudaPitchedPtr D_volumeData; - - // Temporary buffers - cudaPitchedPtr D_projData; - cudaPitchedPtr D_tmpData; - - // Geometry-specific precomputed data - cudaPitchedPtr D_lineWeight; - cudaPitchedPtr D_pixelWeight; -}; - -bool doSIRT(cudaPitchedPtr D_volumeData, unsigned int volumePitch, - cudaPitchedPtr D_projData, unsigned int projPitch, - cudaPitchedPtr D_maskData, unsigned int maskPitch, - const SDimensions3D& dims, const SConeProjection* projs, - unsigned int iterations); - -} - -#endif diff --git a/cuda/3d/util3d.cu b/cuda/3d/util3d.cu index 1f436d8..90aa5ea 100644 --- a/cuda/3d/util3d.cu +++ b/cuda/3d/util3d.cu @@ -25,12 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. ----------------------------------------------------------------------- */ +#include "astra/cuda/3d/util3d.h" + +#include "astra/cuda/2d/util.h" + +#include "astra/Logging.h" + #include <cstdio> #include <cassert> -#include "util3d.h" -#include "../2d/util.h" - -#include "../../include/astra/Logging.h" namespace astraCUDA3d { diff --git a/cuda/3d/util3d.h b/cuda/3d/util3d.h deleted file mode 100644 index 17eb31e..0000000 --- a/cuda/3d/util3d.h +++ /dev/null @@ -1,68 +0,0 @@ -/* ------------------------------------------------------------------------ -Copyright: 2010-2018, imec Vision Lab, University of Antwerp - 2014-2018, CWI, Amsterdam - -Contact: astra@astra-toolbox.com -Website: http://www.astra-toolbox.com/ - -This file is part of the ASTRA Toolbox. - - -The ASTRA Toolbox is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -The ASTRA Toolbox is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. - ------------------------------------------------------------------------ -*/ - -#ifndef _CUDA_UTIL3D_H -#define _CUDA_UTIL3D_H - -#include <cuda.h> -#include "dims3d.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#include "../2d/util.h" - -namespace astraCUDA3d { - -cudaPitchedPtr allocateVolumeData(const SDimensions3D& dims); -cudaPitchedPtr allocateProjectionData(const SDimensions3D& dims); -bool zeroVolumeData(cudaPitchedPtr& D_data, const SDimensions3D& dims); -bool zeroProjectionData(cudaPitchedPtr& D_data, const SDimensions3D& dims); -bool copyVolumeToDevice(const float* data, cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0); -bool copyProjectionsToDevice(const float* data, cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0); -bool copyVolumeFromDevice(float* data, const cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0); -bool copyProjectionsFromDevice(float* data, const cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0); -bool duplicateVolumeData(cudaPitchedPtr& D_dest, const cudaPitchedPtr& D_src, const SDimensions3D& dims); -bool duplicateProjectionData(cudaPitchedPtr& D_dest, const cudaPitchedPtr& D_src, const SDimensions3D& dims); - - -bool transferProjectionsToArray(cudaPitchedPtr D_projData, cudaArray* array, const SDimensions3D& dims); -bool transferVolumeToArray(cudaPitchedPtr D_volumeData, cudaArray* array, const SDimensions3D& dims); -bool zeroProjectionArray(cudaArray* array, const SDimensions3D& dims); -bool zeroVolumeArray(cudaArray* array, const SDimensions3D& dims); -cudaArray* allocateProjectionArray(const SDimensions3D& dims); -cudaArray* allocateVolumeArray(const SDimensions3D& dims); - -bool cudaTextForceKernelsCompletion(); - -float dotProduct3D(cudaPitchedPtr data, unsigned int x, unsigned int y, unsigned int z); - -int calcNextPowerOfTwo(int _iValue); - -} - -#endif |