xref: /aosp_15_r20/external/ComputeLibrary/arm_compute/dynamic_fusion/sketch/gpu/GpuWorkloadContext.h (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1 /*
2  * Copyright (c) 2022 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 ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT
25 #define ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT
26 
27 #include "arm_compute/core/GPUTarget.h"
28 
29 #include <memory>
30 
31 namespace arm_compute
32 {
33 /** Forward declaration */
34 class CLCompileContext;
35 namespace experimental
36 {
37 namespace dynamic_fusion
38 {
39 /** Gpu Information such as the Gpu target (for example, G76) */
40 using GpuTarget = ::arm_compute::GPUTarget;
41 
42 /** Gpu Language */
43 enum class GpuLanguage
44 {
45     OpenCL,
46     Unknown
47 };
48 /** Provide context necessary for the creation and configuration of a workload
49  * e.g. gpu targets and capabilities, cl::Device for querying OpenCl extensions. Both can affect how a kernel is generated
50  *
51  * This context is shared between different operators within a sketch, and has to stay valid for the entire workload creation session.
52  * This context may also be shared between different sketches.
53  *
54  * This class only contains information for workload creation, but not for runtime (e.g. cl::Queue for enqueueing the kernels)
55  */
56 class GpuWorkloadContext
57 {
58 public:
59     /** Constructor */
60     GpuWorkloadContext(CLCompileContext *cl_compile_context);
61     /** Allow instances of this class to be copy constructed */
62     GpuWorkloadContext(const GpuWorkloadContext &config) = default;
63     /** Allow instances of this class to be copied */
64     GpuWorkloadContext &operator=(const GpuWorkloadContext &config) = default;
65     /** Allow instances of this class to be move constructed */
66     GpuWorkloadContext(GpuWorkloadContext &&config) = default;
67     /** Allow instances of this class to be moved */
68     GpuWorkloadContext &operator=(GpuWorkloadContext &&config) = default;
69     /** Get @ref GpuLanguage of the context */
70     GpuLanguage gpu_language() const;
71     /** Get @ref GpuTarget of the context */
72     GpuTarget gpu_target() const;
73     /** Get @ref CLCompileContext
74      * If the gpu language is not OpenCL, then return nullptr
75      */
76     const CLCompileContext *cl_compile_context() const;
77 
78 private:
79     GpuLanguage       _gpu_language{ GpuLanguage::Unknown };
80     CLCompileContext *_cl_compile_ctx{ nullptr };
81 };
82 
83 } // namespace dynamic_fusion
84 } // namespace experimental
85 } // namespace arm_compute
86 
87 #endif /* ARM_COMPUTE_DYNAMIC_FUSION_SKETCH_GPU_GPUWORKLOADCONTEXT */
88