"test/vscode:/vscode.git/clone" did not exist on "32f6388c01e57021e32a5fae2df372f058ddb88c"
target.hpp 2.94 KB
Newer Older
Paul's avatar
Paul committed
1
2
#ifndef MIGRAPHX_GUARD_MIGRAPHLIB_TARGET_HPP
#define MIGRAPHX_GUARD_MIGRAPHLIB_TARGET_HPP
Paul's avatar
Paul committed
3

Paul's avatar
Paul committed
4
#include <cassert>
Paul's avatar
Paul committed
5
6
7
8
9
#include <string>
#include <functional>
#include <memory>
#include <type_traits>
#include <utility>
Paul's avatar
Paul committed
10
#include <vector>
Paul's avatar
Paul committed
11
12
#include <migraphx/context.hpp>
#include <migraphx/pass.hpp>
Paul's avatar
Paul committed
13
#include <migraphx/config.hpp>
14
#include <migraphx/compile_options.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
15
16
#include <migraphx/argument.hpp>
#include <migraphx/rank.hpp>
Paul's avatar
Paul committed
17

Paul's avatar
Paul committed
18
namespace migraphx {
Paul's avatar
Paul committed
19
inline namespace MIGRAPHX_INLINE_NS {
Paul's avatar
Paul committed
20

Paul's avatar
Paul committed
21
#ifdef DOXYGEN
Paul's avatar
Paul committed
22

Paul's avatar
Paul committed
23
/// An interface for a compilation target
Paul's avatar
Paul committed
24
25
26
27
28
29
struct target
{
    /// A unique name used to identify the target
    std::string name() const;
    /**
     * @brief The transformation pass to be run during compilation.
Paul's avatar
Paul committed
30
     *
Paul's avatar
Paul committed
31
     * @param ctx This is the target-dependent context that is created by `get_context`
32
     * @param options Compiling options passed in by the user
Paul's avatar
Paul committed
33
34
     * @return The passes to be ran
     */
35
    std::vector<pass> get_passes(context& ctx, const compile_options& options) const;
Paul's avatar
Paul committed
36
37
38
39
40
    /**
     * @brief Construct a context for the target.
     * @return The context to be used during compilation and execution.
     */
    context get_context() const;
Shucai Xiao's avatar
Shucai Xiao committed
41
42
    /**
     * @brief copy an argument to the current target.
Shucai Xiao's avatar
Shucai Xiao committed
43
     *
Shucai Xiao's avatar
Shucai Xiao committed
44
45
46
47
48
49
     * @param arg Input argument to be copied to the target
     * @return Argument in the target.
     */
    argument copy_to(const argument& arg) const;
    /**
     * @brief copy an argument from the current target.
Shucai Xiao's avatar
Shucai Xiao committed
50
     *
Shucai Xiao's avatar
Shucai Xiao committed
51
52
53
54
55
56
     * @param arg Input argument to be copied from the target
     * @return Argument in the host.
     */
    argument copy_from(const argument& arg) const;
    /**
     * @brief Allocate an argument based on the input shape
Shucai Xiao's avatar
Shucai Xiao committed
57
     *
Shucai Xiao's avatar
Shucai Xiao committed
58
59
60
61
     * @param s Shape of the argument to be allocated in the target
     * @return Allocated argument in the target.
     */
    argument allocate(const shape& s) const;
Paul's avatar
Paul committed
62
63
64
};

#else
Paul's avatar
Paul committed
65

Shucai Xiao's avatar
Shucai Xiao committed
66
template <class T>
Paul's avatar
Paul committed
67
argument target_allocate(T& x, const shape&)
Shucai Xiao's avatar
Shucai Xiao committed
68
69
70
71
72
73
{
    std::string name = x.name();
    MIGRAPHX_THROW("Not computable: " + name);
}

template <class T>
Paul's avatar
Paul committed
74
argument copy_to_target(T&, const argument& arg)
Shucai Xiao's avatar
Shucai Xiao committed
75
{
Shucai Xiao's avatar
Shucai Xiao committed
76
    return arg;
Shucai Xiao's avatar
Shucai Xiao committed
77
78
79
}

template <class T>
Paul's avatar
Paul committed
80
argument copy_from_target(T&, const argument& arg)
Shucai Xiao's avatar
Shucai Xiao committed
81
{
Shucai Xiao's avatar
Shucai Xiao committed
82
    return arg;
Shucai Xiao's avatar
Shucai Xiao committed
83
84
}

Paul's avatar
Paul committed
85
86
<%
interface('target',
Shucai Xiao's avatar
Shucai Xiao committed
87
     virtual('name', returns='std::string', const=True),
88
     virtual('get_passes', ctx='context&', options='const compile_options&', returns='std::vector<pass>', const=True),
Shucai Xiao's avatar
Shucai Xiao committed
89
     virtual('get_context', returns='context', const=True),
Shucai Xiao's avatar
Shucai Xiao committed
90
91
92
93
94
95
96
97
98
99
100
101
     virtual('copy_to',
             returns = 'argument',
             input   = 'const argument&',
             const   = True,
             default = 'copy_to_target'),
     virtual('copy_from',
             returns = 'argument',
             input   = 'const argument&',
             const   = True,
             default = 'copy_from_target'),
    virtual('allocate', s='const shape&', returns='argument', const=True,
             default = 'target_allocate')
Paul's avatar
Paul committed
102
103
104
)
%>

Paul's avatar
Paul committed
105
106
#endif

Paul's avatar
Paul committed
107
} // namespace MIGRAPHX_INLINE_NS
Paul's avatar
Paul committed
108
} // namespace migraphx
Paul's avatar
Paul committed
109
110

#endif