2 #include "openclbase.h" 9 #include <boost/lexical_cast.hpp> 13 #include "jTypeTraits/jtypetraits.h" 19 std::vector<cl::Platform> OpenCLBase::all_platforms;
20 cl::Platform OpenCLBase::default_platform;
21 std::vector<cl::Device> OpenCLBase::all_devices;
22 cl::Device OpenCLBase::current_device;
23 cl::Context OpenCLBase::context;
24 cl::CommandQueue OpenCLBase::command_queue;
25 bool OpenCLBase::initalized =
false;
27 void OpenCLBase::SetUp( uint platform_number, uint device_number ) {
31 setenv(
"CUDA_CACHE_DISABLE",
"1", 1);
32 std::cout <<
"OpenCL Kernel caching disabled." << std::endl;
35 cl::Platform::get( &OpenCLBase::all_platforms ) ;
37 if( OpenCLBase::all_platforms.size() == 0 ) {
38 std::string err_str = __func__;
39 err_str +=
"\nNo OpenCL platforms found, check OpenCL installation";
40 throw std::runtime_error( err_str );
43 OpenCLBase::default_platform = OpenCLBase::all_platforms[ platform_number ];
44 OpenCLBase::default_platform.getDevices(CL_DEVICE_TYPE_ALL, &OpenCLBase::all_devices);
46 if( device_number >= OpenCLBase::all_devices.size() ) {
47 std::string err_str = __func__;
48 err_str +=
"\nRequested device number of ";
49 err_str += boost::lexical_cast<std::string>( device_number );
50 err_str +=
" does not correspond to any device.\n";
51 err_str +=
"Largest device number is ";
52 err_str += boost::lexical_cast<std::string>( OpenCLBase::all_devices.size() );
53 throw std::runtime_error( err_str );
56 OpenCLBase::current_device = OpenCLBase::all_devices[ device_number ];
58 cl_context_properties props[] = { CL_CONTEXT_PLATFORM, (cl_context_properties)(default_platform)(), 0};
62 OpenCLBase::context = cl::Context ( OpenCLBase::current_device, props );
65 OpenCLBase::command_queue = cl::CommandQueue (OpenCLBase::context,OpenCLBase::current_device, err);
70 std::cout <<
"OpenCL Platform & Device info:" << std::endl;
71 std::cout <<
"Platform Info: " <<default_platform.getInfo<CL_PLATFORM_NAME>() << std::endl;
72 std::cout <<
"Device Info: " << current_device.getInfo<CL_DEVICE_NAME>() << std::endl;
82 if( initalized !=
true ) {
83 SetUp( platform_number, device_number );
89 OpenCLBase::~OpenCLBase() {
91 std::cout << __func__ << std::endl;
OpenCLBase(uint platform_number=0, uint device_number=0)
Initialize OpenCL Objects Note that the Platform and Context are selected automatically: Platform is ...