xref: /aosp_15_r20/external/ComputeLibrary/arm_compute/graph/frontend/Stream.h (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1 /*
2  * Copyright (c) 2018-2020 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_GRAPH_STREAM_H
25 #define ARM_COMPUTE_GRAPH_STREAM_H
26 
27 #include "arm_compute/graph/frontend/IStream.h"
28 #include "arm_compute/graph/frontend/IStreamOperators.h"
29 #include "arm_compute/graph/frontend/Types.h"
30 
31 #include "arm_compute/graph/Graph.h"
32 #include "arm_compute/graph/GraphContext.h"
33 #include "arm_compute/graph/GraphManager.h"
34 
35 namespace arm_compute
36 {
37 namespace graph
38 {
39 namespace frontend
40 {
41 // Forward Declarations
42 class ILayer;
43 
44 /** Stream frontend class to construct simple graphs in a stream fashion */
45 class Stream final : public IStream
46 {
47 public:
48     /** Constructor
49      *
50      * @param[in] id   Stream id
51      * @param[in] name Stream name
52      */
53     Stream(size_t id, std::string name);
54     /** Prevent instances of this class from being copied (As this class contains pointers) */
55     Stream(const Stream &) = delete;
56     /** Prevent instances of this class from being copied (As this class contains pointers) */
57     Stream &operator=(const Stream &) = delete;
58     /** Finalizes the stream for an execution target
59      *
60      * @param[in] target Execution target
61      * @param[in] config (Optional) Graph configuration to use
62      */
63     void finalize(Target target, const GraphConfig &config);
64     /** Executes the stream **/
65     void run();
66 
67     // Inherited overridden methods
68     void add_layer(ILayer &layer) override;
69     Graph       &graph() override;
70     const Graph &graph() const override;
71 
72 private:
73     //Important: GraphContext must be declared *before* the GraphManager because the GraphManager
74     //allocates resources from the context and therefore needs to be destroyed before the context during clean up.
75     GraphContext _ctx;     /**< Graph context to use */
76     GraphManager _manager; /**< Graph manager */
77     Graph        _g;       /**< Internal graph representation of the stream */
78 };
79 } // namespace frontend
80 } // namespace graph
81 } // namespace arm_compute
82 #endif /* ARM_COMPUTE_GRAPH_STREAM_H */
83