#pragma once #include "storm/utility/VectorHelper.h" #include "storm/adapters/GmmxxAdapter.h" #include "storm-config.h" namespace storm { namespace solver { template class GmmxxMultiplier : public storm::utility::VectorHelper { public: GmmxxMultiplier(); void multAdd(gmm::csr_matrix const& matrix, std::vector const& x, std::vector const* b, std::vector& result) const; void multAddGaussSeidelBackward(gmm::csr_matrix const& matrix, std::vector& x, std::vector const* b) const; void multAddReduce(storm::solver::OptimizationDirection const& dir, std::vector const& rowGroupIndices, gmm::csr_matrix const& matrix, std::vector const& x, std::vector const* b, std::vector& result, std::vector* choices = nullptr) const; void multAddReduceGaussSeidel(storm::solver::OptimizationDirection const& dir, std::vector const& rowGroupIndices, gmm::csr_matrix const& matrix, std::vector& x, std::vector const* b, std::vector* choices = nullptr) const; void multAddParallel(gmm::csr_matrix const& matrix, std::vector const& x, std::vector const* b, std::vector& result) const; void multAddReduceParallel(storm::solver::OptimizationDirection const& dir, std::vector const& rowGroupIndices, gmm::csr_matrix const& matrix, std::vector const& x, std::vector const* b, std::vector& result, std::vector* choices = nullptr) const; T multiplyRow(gmm::csr_matrix const& matrix, uint64_t const& rowIndex, std::vector const& x) const; private: void multAddReduceHelper(storm::solver::OptimizationDirection const& dir, std::vector const& rowGroupIndices, gmm::csr_matrix const& matrix, std::vector const& x, std::vector const* b, std::vector& result, std::vector* choices = nullptr) const; }; } }