diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2018-02-02 10:43:52 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2018-02-02 10:43:52 +0000 |
commit | 8883e6499f4247d232de569015bb52fe7c612398 (patch) | |
tree | 9cd9764822967b10faebe123f4ca6f953e0556b6 /eval | |
parent | a75e9ca02a712b4965cb03e1545910fddfaa16f7 (diff) |
go back to allocating result on working stash
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp | 16 | ||||
-rw-r--r-- | eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h | 6 |
2 files changed, 10 insertions, 12 deletions
diff --git a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp index 5787d6a470a..91b16b0fd7d 100644 --- a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp +++ b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp @@ -57,22 +57,22 @@ void my_op(eval::InterpretedFunction::State &state, uint64_t param) { DenseTensorView::CellsRef vectorCells = getCellsRef(state.peek(1)); DenseTensorView::CellsRef matrixCells = getCellsRef(state.peek(0)); + ArrayRef<double> outputCells = state.stash.create_array<double>(self->_resultSize); + if (commonDimensionInnermost) { - multiDotProduct(*self, vectorCells, matrixCells, self->_outputCells); + multiDotProduct(*self, vectorCells, matrixCells, outputCells); } else { - transposedProduct(*self, vectorCells, matrixCells, self->_outputCells); + transposedProduct(*self, vectorCells, matrixCells, outputCells); } - state.pop_pop_push(self->_outputView); + state.pop_pop_push(state.stash.create<DenseTensorView>(self->_resultType, outputCells)); } } // namespace vespalib::tensor::<unnamed> DenseXWProductFunction::Self::Self(const eval::ValueType &resultType, size_t vectorSize, - size_t resultSize, - Stash &stash) - : _outputCells(stash.create_array<double>(resultSize)), - _outputView(resultType, _outputCells), + size_t resultSize) + : _resultType(resultType), _vectorSize(vectorSize), _resultSize(resultSize), _hwAccelerator(hwaccelrated::IAccelrated::getAccelrator()) @@ -93,7 +93,7 @@ DenseXWProductFunction::DenseXWProductFunction(const eval::ValueType &resultType eval::InterpretedFunction::Instruction DenseXWProductFunction::compile_self(Stash &stash) const { - Self &self = stash.create<Self>(result_type(), _vectorSize, _resultSize, stash); + Self &self = stash.create<Self>(result_type(), _vectorSize, _resultSize); auto op = _commonDimensionInnermost ? my_op<true> : my_op<false>; return eval::InterpretedFunction::Instruction(op, (uint64_t)(&self)); } diff --git a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h index 39b7d9fcdc4..4fc5e209948 100644 --- a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h +++ b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h @@ -18,15 +18,13 @@ class DenseXWProductFunction : public eval::tensor_function::Op2 { public: struct Self { - ArrayRef<double> _outputCells; - DenseTensorView _outputView; + const eval::ValueType _resultType; const size_t _vectorSize; const size_t _resultSize; hwaccelrated::IAccelrated::UP _hwAccelerator; Self(const eval::ValueType &resultType, size_t vectorSize, - size_t resultSize, - Stash &stash); + size_t resultSize); ~Self() {} }; |