1 /* 2 * Copyright (c) 2021 Arm Limited. 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to 8 * deal in the Software without restriction, including without limitation the 9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10 * sell copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in all 14 * copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 */ 24 #ifndef SRC_GPU_CLCONTEXT_H 25 #define SRC_GPU_CLCONTEXT_H 26 27 #include "src/common/IContext.h" 28 #include "src/runtime/CL/mlgo/MLGOHeuristics.h" 29 30 #include "arm_compute/core/CL/OpenCL.h" 31 32 namespace arm_compute 33 { 34 namespace gpu 35 { 36 namespace opencl 37 { 38 /** OpenCL context implementation class */ 39 class ClContext final : public IContext 40 { 41 public: 42 /** Default Constructor 43 * 44 * @param[in] options Creational options 45 */ 46 explicit ClContext(const AclContextOptions *options); 47 48 /** Extract MLGO heuristics 49 * 50 * @return Heuristics tree 51 */ 52 const mlgo::MLGOHeuristics &mlgo() const; 53 54 /** Underlying cl context accessor 55 * 56 * @return the cl context used 57 */ 58 ::cl::Context cl_ctx(); 59 60 /** Underlying cl device accessor 61 * 62 * @return the cl device used 63 */ 64 ::cl::Device cl_dev(); 65 66 /** Update/inject an underlying cl context object 67 * 68 * @warning Context will be able to set if the object doesn't have any pending reference to other objects 69 * 70 * @param[in] ctx Underlying cl context to be used 71 * 72 * @return true if the context was set successfully else falseS 73 */ 74 bool set_cl_ctx(::cl::Context ctx); 75 76 // Inherrited methods overridden 77 ITensorV2 *create_tensor(const AclTensorDescriptor &desc, bool allocate) override; 78 IQueue *create_queue(const AclQueueOptions *options) override; 79 std::tuple<IOperator *, StatusCode> create_activation(const AclTensorDescriptor &src, 80 const AclTensorDescriptor &dst, 81 const AclActivationDescriptor &act, 82 bool is_validate) override; 83 84 private: 85 mlgo::MLGOHeuristics _mlgo_heuristics; 86 ::cl::Context _cl_ctx; 87 ::cl::Device _cl_dev; 88 }; 89 } // namespace opencl 90 } // namespace gpu 91 } // namespace arm_compute 92 93 #endif /* SRC_GPU_CLCONTEXT_H */