BioCMAMC-ST
iload_balancer.hpp
1#ifndef __ILOAD_BALANCER_HPP__
2#define __ILOAD_BALANCER_HPP__
3
4#include <cmath>
5#include <cstdint>
6#include <memory>
7
13{
14public:
15 virtual ~ILoadBalancer() = default;
16 explicit ILoadBalancer(uint32_t s);
17 ILoadBalancer() = delete;
18 ILoadBalancer(const ILoadBalancer&) = delete;
22
23 [[nodiscard]] bool check(uint64_t n = 0) const;
24
29 uint64_t balance(uint32_t rank, uint64_t n);
30
31protected:
32 [[nodiscard]] virtual double getRatio(uint64_t n,
33 uint32_t rank) const noexcept
34 = 0;
35
36 [[nodiscard]] inline auto
37 size() const noexcept
38 {
39 return _size;
40 }
41
42private:
43 [[nodiscard]] uint64_t get_alloc(uint64_t n, uint32_t rank) const noexcept;
44 uint32_t _size;
45};
46
47std::unique_ptr<ILoadBalancer> lb_factory();
48
49#endif
virtual ~ILoadBalancer()=default
auto size() const noexcept
Definition iload_balancer.hpp:37
uint64_t balance(uint32_t rank, uint64_t n)
returns the number of particle for rank: 'rank' if the total number is 'n'
Definition iload_balancer.cpp:25
bool check(uint64_t n=0) const
Definition iload_balancer.cpp:13
ILoadBalancer(ILoadBalancer &&)=delete
ILoadBalancer & operator=(const ILoadBalancer &)=delete
ILoadBalancer(const ILoadBalancer &)=delete
ILoadBalancer()=delete
uint64_t get_alloc(uint64_t n, uint32_t rank) const noexcept
Definition iload_balancer.cpp:7
ILoadBalancer & operator=(ILoadBalancer &&)=delete
uint32_t _size
Definition iload_balancer.hpp:44
ILoadBalancer(uint32_t s)
Definition iload_balancer.cpp:4
virtual double getRatio(uint64_t n, uint32_t rank) const noexcept=0