Ginkgo  Generated from pipelines/1478841010 branch based on develop. Ginkgo version 1.9.0
A numerical linear algebra library targeting many-core architectures
time.hpp
1 // SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_STOP_TIME_HPP_
6 #define GKO_PUBLIC_CORE_STOP_TIME_HPP_
7 
8 
9 #include <chrono>
10 
11 #include <ginkgo/core/stop/criterion.hpp>
12 
13 
14 namespace gko {
15 namespace stop {
16 
23 class Time : public EnablePolymorphicObject<Time, Criterion> {
24  friend class EnablePolymorphicObject<Time, Criterion>;
25 
26 public:
27  using clock = std::chrono::steady_clock;
28 
30  {
34  std::chrono::nanoseconds GKO_FACTORY_PARAMETER_SCALAR(time_limit,
35  10000000000LL);
36  };
37  GKO_ENABLE_CRITERION_FACTORY(Time, parameters, Factory);
39 
40 protected:
41  bool check_impl(uint8 stoppingId, bool setFinalized,
42  array<stopping_status>* stop_status, bool* one_changed,
43  const Updater&) override;
44 
45  explicit Time(std::shared_ptr<const gko::Executor> exec)
46  : EnablePolymorphicObject<Time, Criterion>(std::move(exec)),
47  time_limit_{},
48  start_{}
49  {}
50 
51  explicit Time(const Factory* factory, const CriterionArgs args)
52  : EnablePolymorphicObject<Time, Criterion>(factory->get_executor()),
53  parameters_{factory->get_parameters()},
54  time_limit_{std::chrono::duration<double>(
55  factory->get_parameters().time_limit)},
56  start_{clock::now()}
57  {}
58 
59 private:
65  std::chrono::duration<double> time_limit_;
66  clock::time_point start_;
67 };
68 
69 
70 } // namespace stop
71 } // namespace gko
72 
73 
74 #endif // GKO_PUBLIC_CORE_STOP_TIME_HPP_
gko::uint8
std::uint8_t uint8
8-bit unsigned integral type.
Definition: types.hpp:115
GKO_FACTORY_PARAMETER_SCALAR
#define GKO_FACTORY_PARAMETER_SCALAR(_name, _default)
Creates a scalar factory parameter in the factory parameters structure.
Definition: abstract_factory.hpp:445
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::array
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition: array.hpp:26
gko::stop::Time
The Time class is a stopping criterion which stops the iteration process after a certain amount of ti...
Definition: time.hpp:23
gko::stop::Time::Factory
Definition: time.hpp:37
gko::stop::Criterion
The Criterion class is a base class for all stopping criteria.
Definition: criterion.hpp:36
GKO_ENABLE_BUILD_METHOD
#define GKO_ENABLE_BUILD_METHOD(_factory_name)
Defines a build method for the factory, simplifying its construction by removing the repetitive typin...
Definition: abstract_factory.hpp:394
GKO_CREATE_FACTORY_PARAMETERS
#define GKO_CREATE_FACTORY_PARAMETERS(_parameters_name, _factory_name)
This Macro will generate a new type containing the parameters for the factory _factory_name.
Definition: abstract_factory.hpp:280
gko::EnablePolymorphicObject
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition: polymorphic_object.hpp:661