FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
DeviceManager.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 #include <vector>
6 
7 namespace fast {
8 
9 typedef std::pair<cl::Platform, std::vector<cl::Device> > PlatformDevices;
10 
14 class FAST_EXPORT DeviceManager : public Object {
15  public:
16  static DeviceManager* getInstance();
17  static void setDefaultPlatform(DevicePlatform platform);
18  static void deleteInstance();
19  OpenCLDevice::pointer getDevice(DeviceCriteria criteria);
20  bool deviceSatisfiesCriteria(OpenCLDevice::pointer, const DeviceCriteria& criteria);
21  std::vector<OpenCLDevice::pointer> getAllDevices(bool enableVisualization = false);
22  std::vector<OpenCLDevice::pointer> getAllGPUDevices(bool enableVisualization = false);
23  std::vector<OpenCLDevice::pointer> getAllCPUDevices(bool enableVisualization = false);
24  OpenCLDevice::pointer getOneOpenCLDevice(bool enableVisualization = false, DevicePlatform platform = DEVICE_PLATFORM_ANY);
25  OpenCLDevice::pointer getOneGPUDevice(bool enableVisualization = false);
26  OpenCLDevice::pointer getOneCPUDevice(bool enableVisualization = false);
27  static Host::pointer getHostDevice();
28  void setDefaultDevice(ExecutionDevice::pointer device);
29  ExecutionDevice::pointer getDefaultDevice();
30  std::vector<PlatformDevices> getDevices(const DeviceCriteria &criteria);
31  std::vector<OpenCLDevice::pointer> getDevices(DeviceCriteria criteria, bool enableVisualization);
32  std::vector<cl::Platform> getPlatforms(
33  DevicePlatform platformCriteria);
34 
35  bool deviceSatisfiesCriteria(const DeviceCriteria& criteria, const cl::Device &device, const cl::Platform &platform);
36  bool deviceHasOpenGLInteropCapability(const cl::Device &device, const cl::Platform &platform);
37  bool devicePlatformMismatch(
38  const cl::Device &device,
39  const cl::Platform &platform);
40 
41  std::vector<cl::Device> getDevicesForBestPlatform(
42  const DeviceCriteria& deviceCriteria,
43  std::vector<PlatformDevices> &platformDevices);
44  private:
45  static DeviceManager* mInstance;
46  static DevicePlatform m_devicePlatform;
47  DeviceManager();
48  DeviceManager(DeviceManager const&); // Don't implement
49  void operator=(DeviceManager const&); // Don't implement
50  ExecutionDevice::pointer mDefaultComputationDevice;
51  void sortDevicesAccordingToPreference(
52  int numberOfPlatforms,
53  int maxNumberOfDevices,
54  std::vector<PlatformDevices> platformDevices,
55  DevicePreference preference,
56  std::vector<cl::Device> * sortedPlatformDevices,
57  std::vector<int>& platformScores);
58  DevicePlatform getDevicePlatform(std::string platformVendor);
59  std::string getDevicePlatform(DevicePlatform devicePlatform);
60 
61  std::vector<cl::Platform> platforms;
62 };
63 
64 }
fast::ExecutionDevice::pointer
std::shared_ptr< ExecutionDevice > pointer
Definition: ExecutionDevice.hpp:11
fast::DeviceCriteria
Definition: DeviceCriteria.hpp:21
fast
Definition: AffineTransformation.hpp:7
DeviceCriteria.hpp
fast::Object
Definition: Object.hpp:34
ExecutionDevice.hpp
fast::DEVICE_PLATFORM_ANY
@ DEVICE_PLATFORM_ANY
Definition: DeviceCriteria.hpp:12
fast::DevicePreference
DevicePreference
Definition: DeviceCriteria.hpp:16
fast::DeviceManager
Definition: DeviceManager.hpp:14
fast::Host::pointer
std::shared_ptr< Host > pointer
Definition: ExecutionDevice.hpp:26
fast::PlatformDevices
std::pair< cl::Platform, std::vector< cl::Device > > PlatformDevices
Definition: DeviceManager.hpp:9
fast::DevicePlatform
DevicePlatform
Definition: DeviceCriteria.hpp:12