Commit 610f0417 authored by Paul's avatar Paul
Browse files

Format

parent f3aa2c67
...@@ -1051,16 +1051,17 @@ struct find_layernorm_pointwise ...@@ -1051,16 +1051,17 @@ struct find_layernorm_pointwise
{ {
auto matcher() const auto matcher() const
{ {
return precompile_name("pointwise")(match::arg(0)(precompile_name("gpu::prelayernorm").bind("layernorm"))); return precompile_name("pointwise")(
match::arg(0)(precompile_name("gpu::prelayernorm").bind("layernorm")));
} }
void apply(module& m, const match::matcher_result& r) const void apply(module& m, const match::matcher_result& r) const
{ {
auto ins = r.result; auto ins = r.result;
auto layernorm = r.instructions["layernorm"]; auto layernorm = r.instructions["layernorm"];
auto* pm = ins->module_inputs().front(); auto* pm = ins->module_inputs().front();
auto inputs = ins->inputs(); auto inputs = ins->inputs();
inputs.front() = layernorm->inputs().front(); inputs.front() = layernorm->inputs().front();
m.replace_instruction(ins, layernorm->get_operator(), inputs, {pm}); m.replace_instruction(ins, layernorm->get_operator(), inputs, {pm});
......
...@@ -56,7 +56,7 @@ struct layernorm_compiler : compiler<layernorm_compiler> ...@@ -56,7 +56,7 @@ struct layernorm_compiler : compiler<layernorm_compiler>
{ {
vec = vectorize::elements(faxis, inputs); vec = vectorize::elements(faxis, inputs);
} }
auto preloads = preload::broadcasts(axis, inputs); auto preloads = preload::broadcasts(axis, inputs);
auto relements = inputs[0].lens()[axis] / vec.size; auto relements = inputs[0].lens()[axis] / vec.size;
auto nelements = inputs.back().elements() / relements; auto nelements = inputs.back().elements() / relements;
auto block_size = compute_block_size(relements, 256); auto block_size = compute_block_size(relements, 256);
...@@ -65,12 +65,11 @@ struct layernorm_compiler : compiler<layernorm_compiler> ...@@ -65,12 +65,11 @@ struct layernorm_compiler : compiler<layernorm_compiler>
v, compute_global_for(ctx, nelements * block_size, 256), block_size); v, compute_global_for(ctx, nelements * block_size, 256), block_size);
options.output = inputs.back(); options.output = inputs.back();
options.inputs = inputs; options.inputs = inputs;
options.kernel_name = v.get("kernel", "layernorm_kernel"); options.kernel_name = v.get("kernel", "layernorm_kernel");
auto src = interpolate_string( auto src = interpolate_string(layernorm_kernel,
layernorm_kernel, {{"kernel", options.kernel_name},
{{"kernel", options.kernel_name}, {"params", enum_params(inputs.size(), "void * private_p")},
{"params", enum_params(inputs.size(), "void * private_p")},
{"args", enum_params(inputs.size(), "private_p")}, {"args", enum_params(inputs.size(), "private_p")},
{"transformers", make_transformer_args(preloads, vec)}, {"transformers", make_transformer_args(preloads, vec)},
{"post", v.get("post", std::string{"op::id{}"})}, {"post", v.get("post", std::string{"op::id{}"})},
...@@ -83,11 +82,11 @@ struct layernorm_compiler : compiler<layernorm_compiler> ...@@ -83,11 +82,11 @@ struct layernorm_compiler : compiler<layernorm_compiler>
compiler_replace compile(context& ctx, instruction_ref ins, const operation& op) const compiler_replace compile(context& ctx, instruction_ref ins, const operation& op) const
{ {
auto v = op.to_value(); auto v = op.to_value();
if (not ins->module_inputs().empty()) if(not ins->module_inputs().empty())
{ {
auto* pm = ins->module_inputs().front(); auto* pm = ins->module_inputs().front();
v["preamble"] = generate_pointwise(*pm, "post_layernorm"); v["preamble"] = generate_pointwise(*pm, "post_layernorm");
v["post"] = "MIGRAPHX_LIFT(post_layernorm)"; v["post"] = "MIGRAPHX_LIFT(post_layernorm)";
v["kernel"] = "layernorm_" + generate_name_from_ops(*pm) + "_kernel"; v["kernel"] = "layernorm_" + generate_name_from_ops(*pm) + "_kernel";
} }
return replace(compile_op(ctx, to_shapes(ins->inputs()), v)); return replace(compile_op(ctx, to_shapes(ins->inputs()), v));
......
...@@ -31,8 +31,9 @@ ...@@ -31,8 +31,9 @@
->decltype(__VA_ARGS__) { return __VA_ARGS__; } ->decltype(__VA_ARGS__) { return __VA_ARGS__; }
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define MIGRAPHX_LIFT(...) \ #define MIGRAPHX_LIFT(...) \
[](auto&&... private_lisft_xs) MIGRAPHX_RETURNS((__VA_ARGS__)(static_cast<decltype(private_lisft_xs)>(private_lisft_xs)...)) [](auto&&... private_lisft_xs) MIGRAPHX_RETURNS( \
(__VA_ARGS__)(static_cast<decltype(private_lisft_xs)>(private_lisft_xs)...))
namespace migraphx { namespace migraphx {
......
...@@ -37,9 +37,10 @@ struct layernorm ...@@ -37,9 +37,10 @@ struct layernorm
shape compute_shape(std::vector<shape> inputs, std::vector<module_ref> mods) const shape compute_shape(std::vector<shape> inputs, std::vector<module_ref> mods) const
{ {
std::size_t nargs = 1; std::size_t nargs = 1;
if (not mods.empty()) { if(not mods.empty())
auto* pm = mods.front(); {
nargs = pm->get_parameter_names().size(); auto* pm = mods.front();
nargs = pm->get_parameter_names().size();
} }
check_shapes{inputs, *this}.has(nargs); check_shapes{inputs, *this}.has(nargs);
auto s = inputs.at(0); auto s = inputs.at(0);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment