183 const ArrayView<const primitive_value_type> &value_data,
184 const ArrayView<const index_type> &index_data,
185 const ArrayView<const char_type> &char_data,
186 const Ptr<ReductTarget> &reduct_obj
189 op_->load_reduct_obj_state(value_data, index_data, char_data, reduct_obj);
211 const Ptr<ReductTarget> &reduct_obj
216 if (first_ele_offset_ == 0 && sub_dim_ < 0) {
218 op_->apply_op(sub_vecs, targ_sub_vecs, reduct_obj);
222 const Ordinal globalOffset =
223 (sub_vecs.size() ? sub_vecs[0].globalOffset(): targ_sub_vecs[0].globalOffset());
224 const Ordinal subDim =
225 (sub_vecs.size() ? sub_vecs[0].subDim(): targ_sub_vecs[0].subDim());
228 if (globalOffset >= first_ele_offset_ + sub_dim_) {
232 if (globalOffset + subDim <= first_ele_offset_) {
237 const Ordinal localOffset =
238 (first_ele_offset_ > globalOffset
239 ? first_ele_offset_ - globalOffset
242 const Ordinal localSubDim =
243 std::min(globalOffset + subDim, first_ele_offset_ + sub_dim_)
244 - (globalOffset + localOffset);
246 Array<ConstSubVectorView<Scalar> > sub_sub_vecs(sub_vecs.size());
247 for (
int k = 0; k < sub_vecs.size(); ++k) {
248 const Ordinal stride = sub_vecs[k].stride();
249 sub_sub_vecs[k].initialize(
250 globalOffset+ localOffset,
252 sub_vecs[k].values().persistingView(localOffset*stride, localSubDim*stride),
257 Array<SubVectorView<Scalar> > targ_sub_sub_vecs(targ_sub_vecs.size());
258 for (
int k = 0; k < targ_sub_vecs.size(); ++k) {
259 const Ordinal stride = targ_sub_vecs[k].stride();
260 targ_sub_sub_vecs[k].initialize(
261 globalOffset+ localOffset,
263 targ_sub_vecs[k].values().persistingView(localOffset*stride, localSubDim*stride),
268 op_->apply_op(sub_sub_vecs(), targ_sub_sub_vecs(), reduct_obj);