summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-06-10 11:43:32 +0000
committerArne Juul <arnej@verizonmedia.com>2020-06-10 12:15:19 +0000
commit01628464c504010f133f48148ccfbcaa27ce9683 (patch)
treeca77a3bc477f1cb4aeda86c43f184a2dda96d500 /searchlib
parent5960e92dd2bc44ba62b11c9f160b4987d012d754 (diff)
tighten guard holding
also: * constify where possible * use uniform_real_distribution to invert range for us
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/tensor/inv_log_level_generator.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/inv_log_level_generator.h b/searchlib/src/vespa/searchlib/tensor/inv_log_level_generator.h
index 624fba901e4..4a96a21534b 100644
--- a/searchlib/src/vespa/searchlib/tensor/inv_log_level_generator.h
+++ b/searchlib/src/vespa/searchlib/tensor/inv_log_level_generator.h
@@ -19,19 +19,23 @@ class InvLogLevelGenerator : public RandomLevelGenerator {
std::mt19937_64 _rng;
std::mutex _mutex;
std::uniform_real_distribution<double> _uniform;
- double _levelMultiplier;
+ const double _levelMultiplier;
+
+ double get_uniform() {
+ std::lock_guard<std::mutex> guard(_mutex);
+ return _uniform(_rng);
+ }
public:
InvLogLevelGenerator(uint32_t m)
: _rng(0x1234deadbeef5678uLL),
_mutex(),
- _uniform(0.0, 1.0),
+ _uniform(1.0, 0.0),
_levelMultiplier(1.0 / log(1.0 * m))
{}
uint32_t max_level() override {
- std::lock_guard<std::mutex> guard(_mutex);
- double unif = _uniform(_rng);
- double r = -log(1.0-unif) * _levelMultiplier;
+ double unif = get_uniform();
+ double r = -log(unif) * _levelMultiplier;
return (uint32_t) r;
}
};