    def emit(self) -> str:
        template = jinja2.Template(
            """
using {{name}} = ck::tensor_operation::device::DeviceNormalizationImpl<
    {{InDType}},
    {{InDType}},
    {{InDType}},
    {{AccDType}},
    {{OutDType}},
    ck::tensor_operation::element_wise::PassThrough,
    {{Rank}},
    {{NumReduceDim}},
    {{tile_config}}
    >;
"""
        )
        return template.render(
            name=self.__str__(),
            InDType=library.DataTypeTag[self.In],
            AccDType=library.DataTypeTag[self.accumulator_type()],
            OutDType=library.DataTypeTag[self.Out],
            Rank=self.Rank,
            NumReduceDim=self.NumReduceDim,  # we only need softmax(dim=-1) at this moment
            tile_config=self.tile_desc.emit(),
        )
using {{name}} = ck::tensor_operation::device::DeviceNormalizationImpl<
{{InDType}},
{{InDType}},
{{InDType}},
{{AccDType}},
{{OutDType}},
ck::tensor_operation::element_wise::PassThrough,
{{Rank}},
{{NumReduceDim}},
{{tile_config}}
>;
python/aitemplate/utils/mk_ck_lib/layernorm_operation.py