1*6fee86a4SJeremy Kemp #include <CL/opencl.hpp> 2*6fee86a4SJeremy Kemp 3*6fee86a4SJeremy Kemp #include <vector> // std::vector 4*6fee86a4SJeremy Kemp #include <exception> // std::runtime_error, std::exception 5*6fee86a4SJeremy Kemp #include <iostream> // std::cout 6*6fee86a4SJeremy Kemp #include <cstdlib> // EXIT_FAILURE 7*6fee86a4SJeremy Kemp main()8*6fee86a4SJeremy Kempint main() 9*6fee86a4SJeremy Kemp { 10*6fee86a4SJeremy Kemp try 11*6fee86a4SJeremy Kemp { 12*6fee86a4SJeremy Kemp std::vector<cl::Platform> platforms; 13*6fee86a4SJeremy Kemp cl::Platform::get(&platforms); 14*6fee86a4SJeremy Kemp 15*6fee86a4SJeremy Kemp std::cout << 16*6fee86a4SJeremy Kemp "Found " << 17*6fee86a4SJeremy Kemp platforms.size() << 18*6fee86a4SJeremy Kemp " platform" << 19*6fee86a4SJeremy Kemp (platforms.size() > 1 ? "s.\n" : ".\n") << 20*6fee86a4SJeremy Kemp std::endl; 21*6fee86a4SJeremy Kemp 22*6fee86a4SJeremy Kemp for (const auto& platform : platforms) 23*6fee86a4SJeremy Kemp { 24*6fee86a4SJeremy Kemp std::cout << platform.getInfo<CL_PLATFORM_VENDOR>() << std::endl; 25*6fee86a4SJeremy Kemp 26*6fee86a4SJeremy Kemp std::vector<cl::Device> devices; 27*6fee86a4SJeremy Kemp platform.getDevices(CL_DEVICE_TYPE_ALL, &devices); 28*6fee86a4SJeremy Kemp 29*6fee86a4SJeremy Kemp for (const auto& device : devices) 30*6fee86a4SJeremy Kemp std::cout << "\t" << device.getInfo<CL_DEVICE_NAME>() << std::endl; 31*6fee86a4SJeremy Kemp } 32*6fee86a4SJeremy Kemp } 33*6fee86a4SJeremy Kemp catch (cl::Error& error) // If any OpenCL error occurs 34*6fee86a4SJeremy Kemp { 35*6fee86a4SJeremy Kemp if(error.err() == CL_PLATFORM_NOT_FOUND_KHR) 36*6fee86a4SJeremy Kemp { 37*6fee86a4SJeremy Kemp std::cout << "No OpenCL platform found." << std::endl; 38*6fee86a4SJeremy Kemp std::exit(EXIT_SUCCESS); 39*6fee86a4SJeremy Kemp } 40*6fee86a4SJeremy Kemp else 41*6fee86a4SJeremy Kemp { 42*6fee86a4SJeremy Kemp std::cerr << error.what() << "(" << error.err() << ")" << std::endl; 43*6fee86a4SJeremy Kemp std::exit(error.err()); 44*6fee86a4SJeremy Kemp } 45*6fee86a4SJeremy Kemp } 46*6fee86a4SJeremy Kemp catch (std::exception& error) // If STL/CRT error occurs 47*6fee86a4SJeremy Kemp { 48*6fee86a4SJeremy Kemp std::cerr << error.what() << std::endl; 49*6fee86a4SJeremy Kemp std::exit(EXIT_FAILURE); 50*6fee86a4SJeremy Kemp } 51*6fee86a4SJeremy Kemp } 52