新建一个类,用来管理opencl整个流程,设定为单例模式,直接上主要代码:
.h 文件
#ifndef CLMANAGER_H_
#define CLMANAGER_H_
#include <CL/cl.hpp>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
#include <iterator>
#include <utility>
enum DEVICETYPE
{
NVIDIA,
AMD,
INTEL,
NONE,
};
//判断是否有错误
inline bool checkErr(cl_int err, const char * name)
{
if (err != CL_SUCCESS)
{
std::cerr << "ERROR: " << name << " (" << err << ")" << std::endl;
return false;
//exit(EXIT_FAILURE);
}
return true;
}
class COCLManager
{
public:
COCLManager();
~COCLManager();
//初始化运行环境
bool InitCL();
//读取*.cl kernel文件
cl::Kernel BuildFromSource(const std::string &kernel_path, const std::string &kernel_name, bool &isSuccess);
//单例
static COCLManager*GetInstance()
{
if ( !instance_ )
{
instance_ = new COCLManager;
}
return instance_;
}
bool HasGPU() { return hasGPU_; }
DEVICETYPE DeviceType(){ return dt_; }
cl::Context getContex();
cl::CommandQueue getQueue();
private:
static COCLManager*instance_;
cl::Platform platform_;
std::vector<cl::Device> devices_;
cl::Device device_;
cl::Context context_;
cl::CommandQueue queue_;
bool hasGPU_ = false;
DEVICETYPE dt_ = NONE;
cl::Program::Binaries loadBinaries(const std::string &binPath);
void saveBinaries(const std::string &kernel_str, const std::string &binPath);
};
#endif
cpp文件
主要代码段:
初始化opencl环境 bool InitCL()
今天的文章编写自定义person类_编写一个自定义异常类分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/64752.html