Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
GmmxxMultiplier.h
Go to the documentation of this file.
1#pragma once
2
3#include "Multiplier.h"
4
6
7#include "storm-config.h"
8
9namespace storm {
10
11namespace storage {
12template<typename ValueType>
13class SparseMatrix;
14}
15
16namespace solver {
17
18template<typename ValueType>
19class GmmxxMultiplier : public Multiplier<ValueType> {
20 public:
22 virtual ~GmmxxMultiplier() = default;
23
24 virtual void multiply(Environment const& env, std::vector<ValueType> const& x, std::vector<ValueType> const* b,
25 std::vector<ValueType>& result) const override;
26 virtual void multiplyGaussSeidel(Environment const& env, std::vector<ValueType>& x, std::vector<ValueType> const* b, bool backwards = true) const override;
27 virtual void multiplyAndReduce(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
28 std::vector<ValueType> const& x, std::vector<ValueType> const* b, std::vector<ValueType>& result,
29 std::vector<uint_fast64_t>* choices = nullptr) const override;
30 virtual void multiplyAndReduceGaussSeidel(Environment const& env, OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices,
31 std::vector<ValueType>& x, std::vector<ValueType> const* b, std::vector<uint_fast64_t>* choices = nullptr,
32 bool backwards = true) const override;
33 virtual void multiplyRow(uint64_t const& rowIndex, std::vector<ValueType> const& x, ValueType& value) const override;
34 virtual void clearCache() const override;
35
36 private:
37 void initialize() const;
38
39 bool parallelize(Environment const& env) const;
40
41 void multAdd(std::vector<ValueType> const& x, std::vector<ValueType> const* b, std::vector<ValueType>& result) const;
42 void multAddParallel(std::vector<ValueType> const& x, std::vector<ValueType> const* b, std::vector<ValueType>& result) const;
43 void multAddReduceParallel(storm::solver::OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices, std::vector<ValueType> const& x,
44 std::vector<ValueType> const* b, std::vector<ValueType>& result, std::vector<uint64_t>* choices = nullptr) const;
45 void multAddReduceHelper(storm::solver::OptimizationDirection const& dir, std::vector<uint64_t> const& rowGroupIndices, std::vector<ValueType> const& x,
46 std::vector<ValueType> const* b, std::vector<ValueType>& result, std::vector<uint64_t>* choices = nullptr,
47 bool backwards = true) const;
48
49 template<typename Compare, bool backwards = true>
50 void multAddReduceHelper(std::vector<uint64_t> const& rowGroupIndices, std::vector<ValueType> const& x, std::vector<ValueType> const* b,
51 std::vector<ValueType>& result, std::vector<uint64_t>* choices = nullptr) const;
52
53 mutable gmm::csr_matrix<ValueType> gmmMatrix;
54};
55
56} // namespace solver
57} // namespace storm
virtual void multiplyAndReduceGaussSeidel(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< ValueType > &x, std::vector< ValueType > const *b, std::vector< uint_fast64_t > *choices=nullptr, bool backwards=true) const override
virtual void multiply(Environment const &env, std::vector< ValueType > const &x, std::vector< ValueType > const *b, std::vector< ValueType > &result) const override
Performs a matrix-vector multiplication x' = A*x + b.
virtual void multiplyGaussSeidel(Environment const &env, std::vector< ValueType > &x, std::vector< ValueType > const *b, bool backwards=true) const override
Performs a matrix-vector multiplication in gauss-seidel style.
virtual void clearCache() const override
virtual void multiplyAndReduce(Environment const &env, OptimizationDirection const &dir, std::vector< uint64_t > const &rowGroupIndices, std::vector< ValueType > const &x, std::vector< ValueType > const *b, std::vector< ValueType > &result, std::vector< uint_fast64_t > *choices=nullptr) const override
virtual ~GmmxxMultiplier()=default
virtual void multiplyRow(uint64_t const &rowIndex, std::vector< ValueType > const &x, ValueType &value) const override
Multiplies the row with the given index with x and adds the result to the provided value.
storm::storage::SparseMatrix< ValueType > const & matrix
Definition Multiplier.h:146
A class that holds a possibly non-square matrix in the compressed row storage format.
LabParser.cpp.
Definition cli.cpp:18