"vscode:/vscode.git/clone" did not exist on "df5dd3c68ec7007e4b3a27907f4d954f1c7d511d"
compile_roialign.cpp 2.8 KB
Newer Older
Shucai Xiao's avatar
Shucai Xiao committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <migraphx/gpu/compile_roialign.hpp>
#include <migraphx/gpu/compile_hip_code_object.hpp>
#include <migraphx/gpu/compile_hip.hpp>
#include <migraphx/gpu/context.hpp>
#include <migraphx/ranges.hpp>
#include <migraphx/reduce_dims.hpp>
#include <migraphx/stringutils.hpp>

namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS {
namespace gpu {

// NOLINTNEXTLINE
static const char* const roialign_kernel = R"__migraphx__(
#include <migraphx/kernels/roialign.hpp>
#include <migraphx/kernels/basic_ops.hpp>
17
18
#include <migraphx/kernels/integral_constant.hpp>
#include <migraphx/kernels/generic_constant.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
19
20
#include <args.hpp>

21
namespace migraphx {
Shucai Xiao's avatar
Shucai Xiao committed
22
23

extern "C" {
24

Shucai Xiao's avatar
Shucai Xiao committed
25
26
__global__ void roialign_kernel(void* in_x, void* in_rois, void* in_ind, void* y) 
{
27
28
29
30
31
32
33
    make_tensors()(in_x, in_rois, in_ind, y)([](auto&&... xs) {
        auto settings = make_roalign_settings(MIGRAPHX_MAKE_CONSTANT(float{ROIS_OFFSET}),
                                              _c<bool{IS_AVG_POOLING}>,
                                              _c<int64_t{SAMPLING_RATIO}>, 
                                              MIGRAPHX_MAKE_CONSTANT(float{SPATIAL_SCALE}));
        roialign(xs..., settings); 
    });
Shucai Xiao's avatar
Shucai Xiao committed
34
}
35

Shucai Xiao's avatar
Shucai Xiao committed
36
37
}

38
39
} // namespace migraphx

Shucai Xiao's avatar
Shucai Xiao committed
40
41
42
43
44
45
46
47
48
49
50
51
52
int main() {}

)__migraphx__";

operation compile_roialign(context&, const std::vector<shape>& io_shapes, const value& val)
{
    hip_compile_options options;
    auto out_s             = io_shapes.back();
    options.local          = 128;
    options.global         = compute_global(out_s.elements(), options.local);
    options.inputs         = io_shapes;
    options.output         = out_s;
    options.kernel_name    = "roialign_kernel";
53
    options.virtual_inputs = io_shapes;
Shucai Xiao's avatar
Shucai Xiao committed
54
55
56
57
58
59
60
61

    // sampling_ratio
    assert(val.contains("sampling_ratio"));
    auto sampling_ratio = val.at("sampling_ratio").to<int64_t>();
    options.params += " -DSAMPLING_RATIO=" + std::to_string(sampling_ratio);

    // pooling_mode
    assert(val.contains("mode"));
62
63
    auto mode           = val.at("mode").to<migraphx::op::pooling_mode>();
    bool is_avg_pooling = (mode == migraphx::op::pooling_mode::average);
Shucai Xiao's avatar
Shucai Xiao committed
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    options.params += " -DIS_AVG_POOLING=" + std::to_string(static_cast<int>(is_avg_pooling));

    // coord_trans_mode
    assert(val.contains("coordinate_transformation_mode"));
    auto ctm          = val.at("coordinate_transformation_mode").to<std::string>();
    float rois_offset = (ctm == "output_half_pixel") ? -0.5f : 0.0f;
    options.params += " -DROIS_OFFSET=" + std::to_string(rois_offset);

    // spatial_scale
    assert(val.contains("spatial_scale"));
    float spatial_scale = val.at("spatial_scale").to<float>();
    options.params += " -DSPATIAL_SCALE=" + std::to_string(spatial_scale);

    return compile_hip_code_object(roialign_kernel, options);
}
} // namespace gpu

} // namespace MIGRAPHX_INLINE_NS
} // namespace migraphx