aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/CL/CLScheduler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/CL/CLScheduler.cpp')
-rw-r--r--src/runtime/CL/CLScheduler.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/runtime/CL/CLScheduler.cpp b/src/runtime/CL/CLScheduler.cpp
index f524a918e6..a812bad865 100644
--- a/src/runtime/CL/CLScheduler.cpp
+++ b/src/runtime/CL/CLScheduler.cpp
@@ -29,15 +29,15 @@
using namespace arm_compute;
-#if defined(ARM_COMPUTE_DEBUG_ENABLED)
namespace
{
+#if defined(ARM_COMPUTE_DEBUG_ENABLED)
void printf_callback(const char *buffer, unsigned int len, size_t complete, void *user_data)
{
printf("%.*s", len, buffer);
}
-} // namespace
#endif /* defined(ARM_COMPUTE_DEBUG_ENABLED) */
+} // namespace
std::once_flag CLScheduler::_initialize_symbols;
@@ -57,19 +57,25 @@ void CLScheduler::default_init(ICLTuner *cl_tuner)
{
if(!_is_initialised)
{
- cl::Context ctx = cl::Context::getDefault();
- auto queue_properties = cl::CommandQueue::getDefault().getInfo<CL_QUEUE_PROPERTIES>(nullptr);
+ std::vector<cl::Platform> platforms;
+ cl::Platform::get(&platforms);
+ ARM_COMPUTE_ERROR_ON_MSG(platforms.size() == 0, "Couldn't find any OpenCL platform");
+ cl::Platform p = platforms[0];
+ cl::Context ctx;
+ cl::Device device;
+ std::vector<cl::Device> platform_devices;
+ p.getDevices(CL_DEVICE_TYPE_DEFAULT, &platform_devices);
+ ARM_COMPUTE_ERROR_ON_MSG(platform_devices.size() == 0, "Couldn't find any OpenCL device");
+ device = platform_devices[0];
#if defined(ARM_COMPUTE_DEBUG_ENABLED)
- // Query devices in the context for cl_arm_printf support
- std::vector<cl::Device> def_platform_devices;
- cl::Platform::getDefault().getDevices(CL_DEVICE_TYPE_DEFAULT, &def_platform_devices);
- if(device_supports_extension(def_platform_devices[0], "cl_arm_printf"))
+ // Query devices in the context for cl_arm_printf support
+ if(device_supports_extension(device, "cl_arm_printf"))
{
// Create a cl_context with a printf_callback and user specified buffer size.
cl_context_properties properties[] =
{
- CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>(cl::Platform::get()()),
+ CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>(p()),
// Enable a printf callback function for this context.
CL_PRINTF_CALLBACK_ARM, reinterpret_cast<cl_context_properties>(printf_callback),
// Request a minimum printf buffer size of 4MB for devices in the
@@ -77,13 +83,22 @@ void CLScheduler::default_init(ICLTuner *cl_tuner)
CL_PRINTF_BUFFERSIZE_ARM, 0x1000,
0
};
- ctx = cl::Context(CL_DEVICE_TYPE_DEFAULT, properties);
+ ctx = cl::Context(device, properties);
}
+ else
#endif // defined(ARM_COMPUTE_DEBUG_ENABLED)
+ {
+ cl_context_properties properties[] =
+ {
+ CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>(p()),
+ 0
+ };
+ ctx = cl::Context(device, properties);
+ };
- cl::CommandQueue queue = cl::CommandQueue(ctx, cl::Device::getDefault(), queue_properties);
- CLKernelLibrary::get().init("./cl_kernels/", ctx, cl::Device::getDefault());
- init(ctx, queue, cl::Device::getDefault(), cl_tuner);
+ cl::CommandQueue queue = cl::CommandQueue(ctx, device);
+ CLKernelLibrary::get().init("./cl_kernels/", ctx, device);
+ init(ctx, queue, device, cl_tuner);
// Create a default static tuner and set if none was provided
_cl_default_static_tuner = tuners::TunerFactory::create_tuner(_target);