diff options
author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-10-23 10:19:32 +0200 |
---|---|---|
committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-11-01 12:09:35 +0100 |
commit | 9c4222b4cab810815a0adee0302501471da177aa (patch) | |
tree | 6a8876055f5edbe37d220653f7fca85b9a1df8d1 /include/astra/cuda | |
parent | f84f0c623cd2652fcf80ec47cb287cc29fd430c5 (diff) | |
download | astra-9c4222b4cab810815a0adee0302501471da177aa.tar.gz astra-9c4222b4cab810815a0adee0302501471da177aa.tar.bz2 astra-9c4222b4cab810815a0adee0302501471da177aa.tar.xz astra-9c4222b4cab810815a0adee0302501471da177aa.zip |
Add minimal GPU Array interface
This extension (only) allows creating a CUDA 3D array, copying projection
data into it, performing a BP from the array, and freeing the array.
Diffstat (limited to 'include/astra/cuda')
-rw-r--r-- | include/astra/cuda/3d/astra3d.h | 7 | ||||
-rw-r--r-- | include/astra/cuda/3d/mem3d.h | 14 | ||||
-rw-r--r-- | include/astra/cuda/3d/util3d.h | 1 |
3 files changed, 22 insertions, 0 deletions
diff --git a/include/astra/cuda/3d/astra3d.h b/include/astra/cuda/3d/astra3d.h index 0ea752d..28a8f01 100644 --- a/include/astra/cuda/3d/astra3d.h +++ b/include/astra/cuda/3d/astra3d.h @@ -42,6 +42,7 @@ class CParallelVecProjectionGeometry3D; class CConeProjectionGeometry3D; class CConeVecProjectionGeometry3D; class CVolumeGeometry3D; +class CFloat32ProjectionData3DGPU; class AstraSIRT3d_internal; using astraCUDA3d::Cuda3DProjectionKernel; @@ -308,6 +309,12 @@ _AstraExport bool astraCudaBP_SIRTWeighted(float* pfVolume, const float* pfProje const CProjectionGeometry3D* pProjGeom, int iGPUIndex, int iVoxelSuperSampling); +_AstraExport void uploadMultipleProjections(CFloat32ProjectionData3DGPU *proj, + const float *data, + unsigned int y_min, + unsigned int y_max); + + } diff --git a/include/astra/cuda/3d/mem3d.h b/include/astra/cuda/3d/mem3d.h index 78e1294..8c3956e 100644 --- a/include/astra/cuda/3d/mem3d.h +++ b/include/astra/cuda/3d/mem3d.h @@ -37,6 +37,17 @@ class CVolumeGeometry3D; class CProjectionGeometry3D; } + +// MemHandle3D defines a very basic opaque interface to GPU memory pointers. +// Its intended use is allowing ASTRA code to pass around GPU pointers without +// requiring CUDA headers. +// +// It generally wraps CUDA linear global memory. +// +// As a very basic extension, it also allows wrapping a CUDA 3D array. +// This extension (only) allows creating a CUDA 3D array, copying projection +// data into it, performing a BP from the array, and freeing the array. + namespace astraCUDA3d { // TODO: Make it possible to delete these handles when they're no longer @@ -80,6 +91,7 @@ enum Mem3DZeroMode { int maxBlockDimension(); _AstraExport MemHandle3D wrapHandle(float *D_ptr, unsigned int x, unsigned int y, unsigned int z, unsigned int pitch); +MemHandle3D createProjectionArrayHandle(const float *ptr, unsigned int x, unsigned int y, unsigned int z); MemHandle3D allocateGPUMemory(unsigned int x, unsigned int y, unsigned int z, Mem3DZeroMode zero); @@ -93,6 +105,8 @@ bool zeroGPUMemory(MemHandle3D handle, unsigned int x, unsigned int y, unsigned bool setGPUIndex(int index); +bool copyIntoArray(MemHandle3D handle, MemHandle3D subdata, const SSubDimensions3D &pos); + bool FP(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, int iDetectorSuperSampling, astra::Cuda3DProjectionKernel projKernel); diff --git a/include/astra/cuda/3d/util3d.h b/include/astra/cuda/3d/util3d.h index 17eb31e..0146d2d 100644 --- a/include/astra/cuda/3d/util3d.h +++ b/include/astra/cuda/3d/util3d.h @@ -51,6 +51,7 @@ bool duplicateProjectionData(cudaPitchedPtr& D_dest, const cudaPitchedPtr& D_src bool transferProjectionsToArray(cudaPitchedPtr D_projData, cudaArray* array, const SDimensions3D& dims); +bool transferHostProjectionsToArray(const float *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); |