blob: 316a90fe0841337e95991b9d51705456ae3227d9 [file] [log] [blame]
/*!
* Copyright (c) 2016 by Contributors
* \file op_attr_types.h
* \brief Additional operator attributes
* beside the ones provided by NNVM
*/
#ifndef MXNET_OP_ATTR_TYPES_H_
#define MXNET_OP_ATTR_TYPES_H_
#include <mshadow/tensor.h>
#include <nnvm/op_attr_types.h>
#include <vector>
#include <functional>
#include "./base.h"
#include "./operator.h"
#include "./ndarray.h"
namespace mxnet {
using nnvm::NodeAttrs;
/*!
* \brief Create a Layer style, forward/backward operator.
* This is easy to write code that contains state.
*
* This is not the only way to register an op execution function.
* More simpler or specialized operator form can be registered
*
* \note Register under "FCreateLayerOp"
*/
using FCreateLayerOp = std::function<
Operator* (const NodeAttrs& n,
Context ctx,
const std::vector<TShape>& in_shape,
const std::vector<int>& in_type)>;
/*!
* \brief The resource request from the operator
*
* \note Register under "FResourceRequest"
*/
using FResourceRequest = std::function<
std::vector<ResourceRequest> (const NodeAttrs& n)>;
/*!
* \brief Register an operator called as a NDArray function
*
* \note Register under "FNDArrayFunction"
*/
using FNDArrayFunction = std::function<void (const nnvm::NodeAttrs& attrs,
const std::vector<NDArray>& inputs,
std::vector<NDArray>* outputs)>;
/*!
* \brief Resiger a compute function for simple stateless forward only operator
*
* \note Register under "FCompute<cpu>" and "FCompute<gpu>"
*/
using FCompute = std::function<void (const nnvm::NodeAttrs& attrs,
const OpContext& ctx,
const std::vector<TBlob>& inputs,
const std::vector<OpReqType>& req,
const std::vector<TBlob>& outputs)>;
} // namespace mxnet
#endif // MXNET_OP_ATTR_TYPES_H_