blob: 1ee3c7e3ec25ac34fa459f644b04e71175fe32cd [file] [log] [blame]
SiCong Lif44bbc52022-08-29 18:25:51 +01001/*
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
31namespace arm_compute
32{
33/** Forward declaration */
34class CLCompileContext;
35namespace experimental
36{
37namespace dynamic_fusion
38{
39/** Gpu Information such as the Gpu target (for example, G76) */
40using GpuTarget = ::arm_compute::GPUTarget;
41
42/** Gpu Language */
43enum 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 */
56class GpuWorkloadContext
57{
58public:
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
78private:
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 */