diff options
| author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2015-10-07 18:14:39 +0200 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2015-10-09 11:42:43 +0200 | 
| commit | 43a38c117405f99e3a1b498f899de4ba6d01a044 (patch) | |
| tree | 1d8fe2f08b6a07c1303ca3de7fc6d05d36aad41e /src/CudaSirtAlgorithm3D.cpp | |
| parent | 0ebd8dfe60cc0d1f05d65d3840278defce0da091 (diff) | |
| download | astra-43a38c117405f99e3a1b498f899de4ba6d01a044.tar.gz astra-43a38c117405f99e3a1b498f899de4ba6d01a044.tar.bz2 astra-43a38c117405f99e3a1b498f899de4ba6d01a044.tar.xz astra-43a38c117405f99e3a1b498f899de4ba6d01a044.zip | |
Improve option passing through CudaProjector3D
Not all constructors were reading options from the projector.
Also allow passing GPUIndex via CudaProjector3D.
Thanks to Nicola Vigano for part of the patch.
Diffstat (limited to 'src/CudaSirtAlgorithm3D.cpp')
| -rw-r--r-- | src/CudaSirtAlgorithm3D.cpp | 48 | 
1 files changed, 31 insertions, 17 deletions
| diff --git a/src/CudaSirtAlgorithm3D.cpp b/src/CudaSirtAlgorithm3D.cpp index abbb9fd..67594f4 100644 --- a/src/CudaSirtAlgorithm3D.cpp +++ b/src/CudaSirtAlgorithm3D.cpp @@ -38,6 +38,8 @@ $Id$  #include "astra/ConeVecProjectionGeometry3D.h"  #include "astra/CudaProjector3D.h" +#include "astra/Logging.h" +  #include "../cuda/3d/astra3d.h"  using namespace std; @@ -90,7 +92,27 @@ bool CCudaSirtAlgorithm3D::_check()  	return true;  } -//--------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------- +void CCudaSirtAlgorithm3D::initializeFromProjector() +{ +	m_iVoxelSuperSampling = 1; +	m_iDetectorSuperSampling = 1; +	m_iGPUIndex = -1; + +	CCudaProjector3D* pCudaProjector = dynamic_cast<CCudaProjector3D*>(m_pProjector); +	if (!pCudaProjector) { +		if (m_pProjector) { +			ASTRA_WARN("non-CUDA Projector3D passed to SIRT3D_CUDA"); +		} +	} else { +		m_iVoxelSuperSampling = pCudaProjector->getVoxelSuperSampling(); +		m_iDetectorSuperSampling = pCudaProjector->getDetectorSuperSampling(); +		m_iGPUIndex = pCudaProjector->getGPUIndex(); +	} + +} + +//--------------------------------------------------------------------------------------  // Initialize - Config  bool CCudaSirtAlgorithm3D::initialize(const Config& _cfg)  { @@ -108,28 +130,20 @@ bool CCudaSirtAlgorithm3D::initialize(const Config& _cfg)  		return false;  	} -	CCudaProjector3D* pCudaProjector = 0; -	pCudaProjector = dynamic_cast<CCudaProjector3D*>(m_pProjector); -	if (!pCudaProjector) { -		// TODO: Report -	} +	initializeFromProjector(); -	m_iGPUIndex = (int)_cfg.self.getOptionNumerical("GPUindex", -1); -	CC.markOptionParsed("GPUindex"); - - -	m_iVoxelSuperSampling = 1; -	m_iDetectorSuperSampling = 1; -	if (pCudaProjector) { -		// New interface -		m_iVoxelSuperSampling = pCudaProjector->getVoxelSuperSampling(); -		m_iDetectorSuperSampling = pCudaProjector->getDetectorSuperSampling(); -	}  	// Deprecated options  	m_iVoxelSuperSampling = (int)_cfg.self.getOptionNumerical("VoxelSuperSampling", m_iVoxelSuperSampling);  	m_iDetectorSuperSampling = (int)_cfg.self.getOptionNumerical("DetectorSuperSampling", m_iDetectorSuperSampling); +	m_iGPUIndex = (int)_cfg.self.getOptionNumerical("GPUindex", m_iGPUIndex); +	m_iGPUIndex = (int)_cfg.self.getOptionNumerical("GPUIndex", m_iGPUIndex);  	CC.markOptionParsed("VoxelSuperSampling");  	CC.markOptionParsed("DetectorSuperSampling"); +	CC.markOptionParsed("GPUIndex"); +	if (!_cfg.self.hasOption("GPUIndex")) +		CC.markOptionParsed("GPUindex"); + +  	m_pSirt = new AstraSIRT3d(); | 
