From c3c352e60050f3deacad767e429a88dc24b31af0 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 18 Mar 2021 10:59:40 +0000 Subject: Add Queue support Queues are responsible for scheduling operators and performing other runtime related activities like for example tuning. Signed-off-by: Georgios Pinitas Change-Id: I0366d9048470d277b8cbf59fa42f95c0ae57c5c9 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5487 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Reviewed-by: Michalis Spyrou Comments-Addressed: Arm Jenkins --- src/c/cl/AclOpenClExt.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'src/c/cl/AclOpenClExt.cpp') diff --git a/src/c/cl/AclOpenClExt.cpp b/src/c/cl/AclOpenClExt.cpp index ce6d2969de..e72babcae8 100644 --- a/src/c/cl/AclOpenClExt.cpp +++ b/src/c/cl/AclOpenClExt.cpp @@ -26,6 +26,7 @@ #include "src/common/ITensorV2.h" #include "src/common/Types.h" #include "src/gpu/cl/ClContext.h" +#include "src/gpu/cl/ClQueue.h" #include "arm_compute/core/CL/ICLTensor.h" @@ -85,6 +86,80 @@ extern "C" AclStatus AclSetClContext(AclContext external_ctx, cl_context opencl_ return AclStatus::AclSuccess; } +extern "C" AclStatus AclGetClDevice(AclContext external_ctx, cl_device_id *opencl_device) +{ + using namespace arm_compute; + IContext *ctx = get_internal(external_ctx); + + if(detail::validate_internal_context(ctx) != StatusCode::Success) + { + return AclStatus::AclInvalidArgument; + } + + if(ctx->type() != Target::GpuOcl) + { + return AclStatus::AclInvalidTarget; + } + + if(opencl_device == nullptr) + { + return AclStatus::AclInvalidArgument; + } + + *opencl_device = utils::cast::polymorphic_downcast(ctx)->cl_dev().get(); + + return AclStatus::AclSuccess; +} + +extern "C" AclStatus AclGetClQueue(AclQueue external_queue, cl_command_queue *opencl_queue) +{ + using namespace arm_compute; + IQueue *queue = get_internal(external_queue); + + if(detail::validate_internal_queue(queue) != StatusCode::Success) + { + return AclStatus::AclInvalidArgument; + } + + if(queue->header.ctx->type() != Target::GpuOcl) + { + return AclStatus::AclInvalidTarget; + } + + if(opencl_queue == nullptr) + { + return AclStatus::AclInvalidArgument; + } + + *opencl_queue = utils::cast::polymorphic_downcast(queue)->cl_queue().get(); + + return AclStatus::AclSuccess; +} + +extern "C" AclStatus AclSetClQueue(AclQueue external_queue, cl_command_queue opencl_queue) +{ + using namespace arm_compute; + IQueue *queue = get_internal(external_queue); + + if(detail::validate_internal_queue(queue) != StatusCode::Success) + { + return AclStatus::AclInvalidArgument; + } + + if(queue->header.ctx->type() != Target::GpuOcl) + { + return AclStatus::AclInvalidTarget; + } + + auto cl_queue = utils::cast::polymorphic_downcast(queue); + if(!cl_queue->set_cl_queue(::cl::CommandQueue(opencl_queue))) + { + return AclStatus::AclRuntimeError; + } + + return AclStatus::AclSuccess; +} + extern "C" AclStatus AclGetClMem(AclTensor external_tensor, cl_mem *opencl_mem) { using namespace arm_compute; -- cgit v1.2.1