//===-- Utils/ExponentialBackoff.h - Heuristic helper class ------*- C++ -*===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Implement exponential backoff counting. // Linearly increments until given maximum, exponentially decrements based on // given backoff factor. // //===----------------------------------------------------------------------===// #ifndef OMPTARGET_UTILS_EXPONENTIAL_BACKOFF_H #define OMPTARGET_UTILS_EXPONENTIAL_BACKOFF_H #include #include #include namespace utils { class ExponentialBackoff { int64_t Count = 0; const int64_t MaxCount = 0; const int64_t CountThreshold = 0; const double BackoffFactor = 0; public: ExponentialBackoff(int64_t MaxCount, int64_t CountThreshold, double BackoffFactor) : MaxCount(MaxCount), CountThreshold(CountThreshold), BackoffFactor(BackoffFactor) { assert(MaxCount >= 0 && "ExponentialBackoff: maximum count value should be non-negative"); assert(CountThreshold >= 0 && "ExponentialBackoff: count threshold value should be non-negative"); assert(BackoffFactor >= 0 && BackoffFactor < 1 && "ExponentialBackoff: backoff factor should be in [0, 1) interval"); } void increment() { Count = std::min(Count + 1, MaxCount); } void decrement() { Count *= BackoffFactor; } bool isAboveThreshold() const { return Count > CountThreshold; } }; } // namespace utils #endif // OMPTARGET_UTILS_EXPONENTIAL_BACKOFF_H