mxnet
reduceto1d.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
26 #ifndef MSHADOW_EXTENSION_REDUCETO1D_H_
27 #define MSHADOW_EXTENSION_REDUCETO1D_H_
28 #include "../extension.h"
29 namespace mshadow {
30 namespace expr {
41 template<typename SrcExp, typename DType, typename Reducer, int m_dimkeep>
43  public Exp<ReduceTo1DExp<SrcExp, DType, Reducer, m_dimkeep>,
44  DType, type::kComplex> {
46  const SrcExp &src_;
48  DType scale_;
50  ReduceTo1DExp(const SrcExp& src, DType scale) : src_(src), scale_(scale) {}
51 };
60 template<int dimkeep, typename SrcExp, typename DType, int etype>
61 inline ReduceTo1DExp<SrcExp, DType, red::sum,
62  ExpInfo<SrcExp>::kDim - dimkeep>
64  return ReduceTo1DExp<SrcExp, DType, red::sum,
65  ExpInfo<SrcExp>::kDim - dimkeep>(exp.self(), DType(1));
66 }
75 template<int dimkeep, typename Reducer, typename SrcExp, typename DType, int etype>
76 inline ReduceTo1DExp<SrcExp, DType, Reducer,
77  ExpInfo<SrcExp>::kDim - dimkeep>
79  return ReduceTo1DExp<SrcExp, DType, Reducer,
80  ExpInfo<SrcExp>::kDim - dimkeep>(exp.self(), DType(1));
81 }
89 template<typename SrcExp, typename DType, int etype>
93  ::Error_Expression_Does_Not_Meet_Dimension_Req();
94  return sumall_except_dim<1>(exp);
95 }
96 template<typename SV, typename Device, typename DType,
97  typename SrcExp, typename Reducer, int m_dimkeep>
98 struct ExpComplexEngine<SV,
99  Tensor<Device, 1, DType>,
100  ReduceTo1DExp<SrcExp, DType, Reducer, m_dimkeep>,
101  DType> {
102  static const int dimkeep = ExpInfo<SrcExp>::kDim - m_dimkeep;
103  inline static void Eval(Tensor<Device, 1, DType> *dst,
104  const ReduceTo1DExp<SrcExp, DType,
105  Reducer, m_dimkeep> &exp) {
108  MapReduceKeepHighDim<SV, Reducer, dimkeep>(dst, exp.src_, exp.scale_);
109  }
110 };
111 template<typename SV, typename Device, typename DType,
112  typename SrcExp, typename Reducer>
114  Tensor<Device, 1, DType>,
115  ReduceTo1DExp<SrcExp, DType, Reducer, 1>, DType> {
116  inline static void Eval(Tensor<Device, 1, DType> *dst,
118  MapReduceKeepLowest<SV, Reducer>(dst, exp.src_, exp.scale_);
119  }
120 };
121 } // namespace expr
122 } // namespace mshadow
123 #endif // MSHADOW_EXTENSION_REDUCETO1D_H_
static void Eval(Tensor< Device, 1, DType > *dst, const ReduceTo1DExp< SrcExp, DType, Reducer, m_dimkeep > &exp)
Definition: reduceto1d.h:103
const SrcExp & src_
source operand
Definition: reduceto1d.h:46
ReduceTo1DExp(const SrcExp &src, DType scale)
construct a repmat expression from src and nrow
Definition: reduceto1d.h:50
used to help static type check
Definition: expr_engine-inl.h:331
ReduceTo1DExp< SrcExp, DType, Reducer, ExpInfo< SrcExp >::kDim-dimkeep > reduce_except_dim(const Exp< SrcExp, DType, etype > &exp)
reduce over all dimensions, except dimkeep
Definition: reduceto1d.h:78
DType scale_
source operand, scale of the
Definition: reduceto1d.h:48
reduction to 1 dimension tensor input: Tensor<Device,k>: ishape output: Tensor<Device,1> shape[0] = ishape[dimkeep];
Definition: reduceto1d.h:42
static type inference template, used to get the dimension of each expression, if ExpInfo<E>::kDim == ...
Definition: expr_engine-inl.h:263
static void Eval(Tensor< Device, 1, DType > *dst, const ReduceTo1DExp< SrcExp, DType, Reducer, 1 > &exp)
Definition: reduceto1d.h:116
some engine that evaluate complex expression
Definition: expr_engine-inl.h:456
sum reducer
Definition: base.h:891
defines how expression exp can be evaluated and stored into dst
Definition: expression.h:80
const SubType & self(void) const
Definition: expression.h:83
Definition: tensor.h:569
overloaded + operator between half_t and bf16_t
Definition: base.h:327
general tensor
Definition: tensor.h:421
ReduceTo1DExp< SrcExp, DType, red::sum, 1 > sum_rows(const Exp< SrcExp, DType, etype > &exp)
a expression that sum over rows of a matrix
Definition: reduceto1d.h:91
ReduceTo1DExp< SrcExp, DType, red::sum, ExpInfo< SrcExp >::kDim-dimkeep > sumall_except_dim(const Exp< SrcExp, DType, etype > &exp)
a sum over all dimensions, except dimkeep
Definition: reduceto1d.h:63