| #ifndef OPENPOSE_PRIVATE_GPU_OPENCL_HPP |
| #define OPENPOSE_PRIVATE_GPU_OPENCL_HPP |
|
|
| #include <openpose/core/common.hpp> |
|
|
| #define MULTI_LINE_STRING(ARG) #ARG |
|
|
| #define CL_HPP_ENABLE_EXCEPTIONS |
|
|
| #ifdef LOWER_CL_VERSION |
| #define CL_HPP_MINIMUM_OPENCL_VERSION 120 |
| #define CL_HPP_TARGET_OPENCL_VERSION 120 |
| #else |
| #define CL_HPP_MINIMUM_OPENCL_VERSION 120 |
| #define CL_HPP_TARGET_OPENCL_VERSION 120 |
| #endif |
|
|
| typedef struct _cl_buffer_region cl_buffer_region; |
| #define CL_DEVICE_TYPE_GPU (1 << 2) |
| namespace cl |
| { |
| class CommandQueue; |
| class Kernel; |
| class Device; |
| class Context; |
| } |
|
|
| |
| |
|
|
| namespace op |
| { |
| class OpenCL |
| { |
| public: |
| static std::shared_ptr<OpenCL> getInstance(const int deviceId = 0, const int deviceType = CL_DEVICE_TYPE_GPU, |
| bool getFromVienna = false); |
| ~OpenCL(); |
|
|
| cl::CommandQueue& getQueue(); |
|
|
| cl::Device& getDevice(); |
|
|
| cl::Context& getContext(); |
|
|
| template <typename T> |
| bool buildKernelIntoManager(const std::string& kernelName, const std::string& src = "", bool isFile = false); |
|
|
| template <typename T> |
| cl::Kernel& getKernelFromManager(const std::string& kernelName, const std::string& src = "", bool isFile = false); |
|
|
| template <typename K, typename T> |
| inline K getKernelFunctorFromManager(const std::string& kernelName, const std::string& src = "", bool isFile = false) |
| { |
| return K(getKernelFromManager<T>(kernelName, src, isFile)); |
| } |
|
|
| template <typename T> static void getBufferRegion(cl_buffer_region& region, const int origin, const int size); |
|
|
| int getAlignment(); |
|
|
| static std::string clErrorToString(int err); |
|
|
| static int getTotalGPU(); |
|
|
| private: |
| struct ImplCLManager; |
| std::unique_ptr<ImplCLManager> upImpl; |
|
|
| OpenCL(const int deviceId, const int deviceType, bool getFromVienna); |
|
|
| DELETE_COPY(OpenCL); |
| }; |
| } |
|
|
| #endif |
|
|