device default_device() { static device dev; if (!dev.id()) { platform pl = default_platform(); std::vector<device> devices = pl.devices(device::accelerator); if (devices.size()) dev = devices[0]; else // no accelerators found, try all { std::vector<device> devices = pl.devices(device::all); if (devices.size()) dev = devices[0]; else OVXX_DO_THROW(std::runtime_error("No OpenCL devices found.")); } } return dev; }
static int run_platform(radiant_t radiant) { radiant_platform_t platform; int status; /* Initialize Radiant */ platform = radiant_platform_create(radiant, NULL); if (platform == NULL) { status = radiant_engine_errno(radiant); fprintf(stderr, "Unable to create platform (%d).\n", status); return status; } status = default_platform(platform); /* Clean up. */ radiant_platform_destroy(platform); return status; }
cl::Device getDevice() { // init platforms std::vector<cl::Platform> platforms; cl::Platform::get(&platforms); // select default platform cl::Platform default_platform; for (auto &platform : platforms) { std::string platformVersion = platform.getInfo<CL_PLATFORM_VERSION>(); if (platformVersion.find("OpenCL 2.") != std::string::npos) { default_platform = platform; break; } } if (default_platform() == nullptr) { throw std::runtime_error("No OpenCL 2.x platform found."); } // init devices std::vector<cl::Device> all_devices; default_platform.getDevices(CL_DEVICE_TYPE_ALL, &all_devices); // select default device cl::Device default_device; for (auto &device : all_devices) { if (device()) { default_device = device; break; } } if (default_device() == nullptr) { throw std::runtime_error("No device found."); } // init context return default_device; }