go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
itkGPUDataManager.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright UMC Utrecht and contributors
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 /*=========================================================================
19 *
20 * Copyright Insight Software Consortium
21 *
22 * Licensed under the Apache License, Version 2.0 (the "License");
23 * you may not use this file except in compliance with the License.
24 * You may obtain a copy of the License at
25 *
26 * http://www.apache.org/licenses/LICENSE-2.0.txt
27 *
28 * Unless required by applicable law or agreed to in writing, software
29 * distributed under the License is distributed on an "AS IS" BASIS,
30 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31 * See the License for the specific language governing permissions and
32 * limitations under the License.
33 *
34 *=========================================================================*/
35 #ifndef __itkGPUDataManager_h
36 #define __itkGPUDataManager_h
37 
38 #include "itkObject.h"
39 #include "itkDataObject.h"
40 #include "itkObjectFactory.h"
41 #include "itkSimpleFastMutexLock.h"
42 #include "itkMutexLockHolder.h"
43 
44 #include "itkOpenCLContext.h"
45 
46 namespace itk
47 {
66 class ITKOpenCL_EXPORT GPUDataManager : public Object //DataObject//
67 {
69  friend class OpenCLKernelManager;
70 
71 public:
72 
74  typedef Object Superclass;
76  typedef SmartPointer< const Self > ConstPointer;
77 
79  itkNewMacro( Self );
80 
82  itkTypeMacro( GPUDataManager, Object );
83 
84  typedef MutexLockHolder< SimpleFastMutexLock > MutexHolderType;
85 
87  void SetBufferSize( unsigned int num );
88 
89  unsigned int GetBufferSize()
90  {
91  return m_BufferSize;
92  }
93 
94 
95  void SetBufferFlag( cl_mem_flags flags );
96 
97  void SetCPUBufferPointer( void * ptr );
98 
99  void SetCPUDirtyFlag( bool isDirty );
100 
101  void SetGPUDirtyFlag( bool isDirty );
102 
106 
110 
112  {
113  return m_IsCPUBufferDirty;
114  }
115 
116 
118  {
119  return m_IsGPUBufferDirty;
120  }
121 
122 
124  virtual void UpdateCPUBuffer();
125 
127  virtual void UpdateGPUBuffer();
128 
129  void Allocate();
130 
132  bool Update();
133 
135  virtual void Graft( const GPUDataManager * data );
136 
138  virtual void Initialize();
139 
142 
145 
147  void SetCPUBufferLock( const bool v ) { this->m_CPUBufferLock = v; }
148  itkGetConstReferenceMacro( CPUBufferLock, bool );
149 
151  void SetGPUBufferLock( const bool v ) { this->m_GPUBufferLock = v; }
152  itkGetConstReferenceMacro( GPUBufferLock, bool );
153 
154 protected:
155 
157  virtual ~GPUDataManager();
158  virtual void PrintSelf( std::ostream & os, Indent indent ) const;
159 
160 protected:
161 
162  unsigned int m_BufferSize; // # of bytes
163 
165 
167  cl_mem_flags m_MemFlags;
168 
170  cl_mem m_GPUBuffer;
171  void * m_CPUBuffer;
172 
176 
180 
182  SimpleFastMutexLock m_Mutex;
183 
184 private:
185 
186  //ITK_DISALLOW_COPY_AND_ASSIGN( GPUDataManager );
187  GPUDataManager( const Self & ); // purposely not implemented
188  void operator=( const Self & ); // purposely not implemented
189 };
190 
191 } // namespace itk
192 
193 #endif
itk::GPUDataManager::Graft
virtual void Graft(const GPUDataManager *data)
itk::GPUDataManager::m_GPUBufferLock
bool m_GPUBufferLock
Definition: itkGPUDataManager.h:179
itk::GPUDataManager::SetBufferSize
void SetBufferSize(unsigned int num)
itk::GPUDataManager::UpdateCPUBuffer
virtual void UpdateCPUBuffer()
itk::GPUDataManager::Initialize
virtual void Initialize()
itk::GPUDataManager::UpdateGPUBuffer
virtual void UpdateGPUBuffer()
itk::GPUDataManager::GetGPUBufferPointer
cl_mem * GetGPUBufferPointer()
itk::GPUDataManager::SetBufferFlag
void SetBufferFlag(cl_mem_flags flags)
itk::GPUDataManager::operator=
void operator=(const Self &)
SmartPointer< Self >
ITKOpenCL_EXPORT
#define ITKOpenCL_EXPORT
Definition: itkOpenCLExport.h:31
itk::GPUDataManager::m_IsGPUBufferDirty
bool m_IsGPUBufferDirty
Definition: itkGPUDataManager.h:174
itk::GPUDataManager::SetCPUDirtyFlag
void SetCPUDirtyFlag(bool isDirty)
itk::GPUDataManager::GPUDataManager
GPUDataManager()
itk::GPUDataManager::GPUDataManager
GPUDataManager(const Self &)
itk::GPUDataManager::MutexHolderType
MutexLockHolder< SimpleFastMutexLock > MutexHolderType
Definition: itkGPUDataManager.h:82
itk::GPUDataManager::SetCPUBufferPointer
void SetCPUBufferPointer(void *ptr)
itk::GPUDataManager::m_Mutex
SimpleFastMutexLock m_Mutex
Definition: itkGPUDataManager.h:182
itk::GPUDataManager::IsGPUBufferDirty
bool IsGPUBufferDirty()
Definition: itkGPUDataManager.h:117
itk::GPUDataManager::GetCPUBufferPointer
void * GetCPUBufferPointer()
itk::GPUDataManager::Update
bool Update()
itk::GPUDataManager::Allocate
void Allocate()
itk::GPUDataManager::m_CPUBufferLock
bool m_CPUBufferLock
Definition: itkGPUDataManager.h:178
itk::GPUDataManager::SetCPUBufferLock
void SetCPUBufferLock(const bool v)
Definition: itkGPUDataManager.h:147
itk::GPUDataManager::SetGPUBufferLock
void SetGPUBufferLock(const bool v)
Definition: itkGPUDataManager.h:151
itk::GPUDataManager::m_Context
OpenCLContext * m_Context
Definition: itkGPUDataManager.h:164
itk::GPUDataManager
GPU memory manager implemented using OpenCL. Required by GPUImage class.
Definition: itkGPUDataManager.h:67
itk::GPUDataManager::m_BufferSize
unsigned int m_BufferSize
Definition: itkGPUDataManager.h:162
itk::GPUDataManager::m_MemFlags
cl_mem_flags m_MemFlags
Definition: itkGPUDataManager.h:167
itk::GPUDataManager::m_GPUBuffer
cl_mem m_GPUBuffer
Definition: itkGPUDataManager.h:170
itkOpenCLContext.h
itk::GPUDataManager::ConstPointer
SmartPointer< const Self > ConstPointer
Definition: itkGPUDataManager.h:76
itk::GPUDataManager::GetBufferSize
unsigned int GetBufferSize()
Definition: itkGPUDataManager.h:89
itk::GPUDataManager::SetCPUBufferDirty
void SetCPUBufferDirty()
itk::GPUDataManager::SetGPUDirtyFlag
void SetGPUDirtyFlag(bool isDirty)
itk::GPUDataManager::m_IsCPUBufferDirty
bool m_IsCPUBufferDirty
Definition: itkGPUDataManager.h:175
itk::GPUDataManager::SetGPUBufferDirty
void SetGPUBufferDirty()
itk::GPUDataManager::IsCPUBufferDirty
bool IsCPUBufferDirty()
Definition: itkGPUDataManager.h:111
itk
Definition: itkAdvancedImageToImageMetric.h:40
itk::GPUDataManager::Pointer
SmartPointer< Self > Pointer
Definition: itkGPUDataManager.h:75
itk::GPUDataManager::Self
GPUDataManager Self
Definition: itkGPUDataManager.h:73
itk::GPUDataManager::~GPUDataManager
virtual ~GPUDataManager()
itk::GPUDataManager::PrintSelf
virtual void PrintSelf(std::ostream &os, Indent indent) const
itk::OpenCLContext
The OpenCLContext class represents an OpenCL context.
Definition: itkOpenCLContext.h:77
itk::OpenCLKernelManager
OpenCL kernel manager implemented using OpenCL.
Definition: itkOpenCLKernelManager.h:68
itk::GPUDataManager::Superclass
Object Superclass
Definition: itkGPUDataManager.h:74
itk::GPUDataManager::m_CPUBuffer
void * m_CPUBuffer
Definition: itkGPUDataManager.h:171


Generated on OURCE_DATE_EPOCH for elastix by doxygen 1.8.18 elastix logo