register_target.cpp 972 Bytes
Newer Older
1
#include <unordered_map>
2
#include <migraphx/register_target.hpp>
3
4
5
6
7
8

namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS {

std::unordered_map<std::string, target>& target_map()
{
9
    static std::unordered_map<std::string, target> m; // NOLINT
10
11
12
13
    return m;
}

void register_target(const target& t) { target_map()[t.name()] = t; }
14
15
16
17
18
19
20
21
22
23
24

target make_target(const std::string& name)
{
    const auto it = target_map().find(name);
    if(it == target_map().end())
    {
        MIGRAPHX_THROW("Requested target '" + name + "' is not enabled or not supported");
    }
    return it->second;
}

25
26
27
28
29
30
31
32
33
34
35
36
37
std::vector<std::string> get_targets()
{
    std::vector<std::string> result;
    std::transform(target_map().begin(),
                   target_map().end(),
                   std::back_inserter(result),
                   [&](auto&& p) { return p.first; });
    std::sort(result.begin(), result.end());
    return result;
}

} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx