#ifndef GPU_INTEL_RNN_SIMPLE_CELL_FUSION_HPP
#define GPU_INTEL_RNN_SIMPLE_CELL_FUSION_HPP
#include "gpu/intel/rnn/config.hpp"
#include "gpu/intel/rnn/utils.hpp"
namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace rnn {
using namespace utils;
template <size_t out_ndims, size_t in_ndims>
strides_t<out_ndims> inner(const strides_t<in_ndims> &s);
status_t compute_cell_fwd(const exec_ctx_t &ctx,
const compute::kernel_t &kernel, dim_t lay, dim_t dir, dim_t iter,
const workspace_t &workspace, const user_data_t user_data,
const sub_buffer_t &weights_layer, const sub_buffer_t &weights_iter,
const sub_buffer_t &cell_layer, const strides_t<4> &cell_layer_strides,
const sub_buffer_t &cell_iter, const strides_t<4> &cell_iter_strides,
const sub_buffer_t &scratch_gates,
const strides_t<2> &scratch_gates_strides,
const memory_storage_t &scratch_cell, float alpha,
const memory_storage_t *tm_scales, const conf_t &conf,
const ocl_conf_t &ocl_conf, const offsets_t &offsets);
} } } } }
#endif