summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-02-02 10:43:52 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-02-02 10:43:52 +0000
commit8883e6499f4247d232de569015bb52fe7c612398 (patch)
tree9cd9764822967b10faebe123f4ca6f953e0556b6 /eval
parenta75e9ca02a712b4965cb03e1545910fddfaa16f7 (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.cpp16
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h6
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() {}
};