aboutsummaryrefslogtreecommitdiff
path: root/src/gpu/cl/ClContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/cl/ClContext.cpp')
-rw-r--r--src/gpu/cl/ClContext.cpp47
1 files changed, 39 insertions, 8 deletions
diff --git a/src/gpu/cl/ClContext.cpp b/src/gpu/cl/ClContext.cpp
index 2bd8b8dd0e..611c1cb501 100644
--- a/src/gpu/cl/ClContext.cpp
+++ b/src/gpu/cl/ClContext.cpp
@@ -23,6 +23,11 @@
*/
#include "src/gpu/cl/ClContext.h"
+#include "arm_compute/core/CL/CLKernelLibrary.h"
+
+#include "src/gpu/cl/ClQueue.h"
+#include "src/gpu/cl/ClTensor.h"
+
namespace arm_compute
{
namespace gpu
@@ -33,21 +38,26 @@ namespace
{
mlgo::MLGOHeuristics populate_mlgo(const char *filename)
{
+ bool status = false;
mlgo::MLGOHeuristics heuristics;
- bool status = heuristics.reload_from_file(filename);
+
+ if (filename != nullptr)
+ {
+ status = heuristics.reload_from_file(filename);
+ }
return status ? std::move(heuristics) : mlgo::MLGOHeuristics();
}
} // namespace
ClContext::ClContext(const AclContextOptions *options)
- : IContext(Target::GpuOcl),
- _mlgo_heuristics(),
- _cl_context()
+ : IContext(Target::GpuOcl), _mlgo_heuristics(), _cl_ctx(), _cl_dev()
{
- if(options != nullptr)
+ if (options != nullptr)
{
_mlgo_heuristics = populate_mlgo(options->kernel_config_file);
}
+ _cl_ctx = CLKernelLibrary::get().context();
+ _cl_dev = CLKernelLibrary::get().get_device();
}
const mlgo::MLGOHeuristics &ClContext::mlgo() const
@@ -57,18 +67,39 @@ const mlgo::MLGOHeuristics &ClContext::mlgo() const
::cl::Context ClContext::cl_ctx()
{
- return _cl_context;
+ return _cl_ctx;
+}
+
+::cl::Device ClContext::cl_dev()
+{
+ return _cl_dev;
}
bool ClContext::set_cl_ctx(::cl::Context ctx)
{
- if(this->refcount() == 0)
+ if (this->refcount() == 0)
{
- _cl_context = ctx;
+ _cl_ctx = ctx;
+ CLScheduler::get().set_context(ctx);
return true;
}
return false;
}
+
+ITensorV2 *ClContext::create_tensor(const AclTensorDescriptor &desc, bool allocate)
+{
+ ClTensor *tensor = new ClTensor(this, desc);
+ if (tensor != nullptr && allocate)
+ {
+ tensor->allocate();
+ }
+ return tensor;
+}
+
+IQueue *ClContext::create_queue(const AclQueueOptions *options)
+{
+ return new ClQueue(this, options);
+}
} // namespace opencl
} // namespace gpu
} // namespace arm_compute