blob: bfefe12225cb0281a9b05594d3fa8c1eaac0b349 [file] [log] [blame]
Georgios Pinitasd8734b52017-12-22 15:27:52 +00001/*
2 * Copyright (c) 2018 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_GRAPH2_STREAM_H__
25#define __ARM_COMPUTE_GRAPH2_STREAM_H__
26
27#include "arm_compute/graph2/frontend/IStream.h"
28#include "arm_compute/graph2/frontend/IStreamOperators.h"
29#include "arm_compute/graph2/frontend/Types.h"
30
31#include "arm_compute/graph2/Graph.h"
32#include "arm_compute/graph2/GraphContext.h"
33#include "arm_compute/graph2/GraphManager.h"
34
35namespace arm_compute
36{
37namespace graph2
38{
39namespace frontend
40{
41// Forward Declarations
42class ILayer;
43
44/** Stream frontend class to construct simple graphs in a stream fashion */
45class Stream final : public IStream
46{
47public:
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 /** Default move constructor */
57 Stream(Stream &&) = default;
58 /** Prevent instances of this class from being copied (As this class contains pointers) */
59 Stream &operator=(const Stream &) = delete;
60 /** Default move assignment operator */
61 Stream &operator=(Stream &&) = default;
62 /** Finalizes the stream for an execution target
63 *
Georgios Pinitas9a8c6722018-03-21 17:52:35 +000064 * @param[in] target Execution target
65 * @param[in] config (Optional) Graph configuration to use
Georgios Pinitasd8734b52017-12-22 15:27:52 +000066 */
Georgios Pinitas9a8c6722018-03-21 17:52:35 +000067 void finalize(Target target, const GraphConfig &config);
Georgios Pinitasd8734b52017-12-22 15:27:52 +000068 /** Executes the stream **/
69 void run();
70
71 // Inherited overridden methods
72 void add_layer(ILayer &layer) override;
73 Graph &graph() override;
74 const Graph &graph() const override;
75
76private:
77 GraphManager _manager; /**< Graph manager */
78 GraphContext _ctx; /**< Graph context to use */
79 Graph _g; /**< Internal graph representation of the stream */
80};
81} // namespace frontend
82} // namespace graph2
83} // namespace arm_compute
84#endif /* __ARM_COMPUTE_GRAPH2_STREAM_H__ */