Commit 041b1d17 authored by Jean-Baptiste Mouret's avatar Jean-Baptiste Mouret
Browse files

remove the lock in random generation and replace it with thread local random generators

parent 20179906
//| Copyright Inria May 2015
//| This project has received funding from the European Research Council (ERC) under
//| the European Union's Horizon 2020 research and innovation programme (grant
//| agreement No 637972) - see http://www.resibots.eu
//|
//| Contributor(s):
//| - Jean-Baptiste Mouret (jean-baptiste.mouret@inria.fr)
//| - Antoine Cully (antoinecully@gmail.com)
//| - Kontantinos Chatzilygeroudis (konstantinos.chatzilygeroudis@inria.fr)
//| - Federico Allocati (fede.allocati@gmail.com)
//| - Vaios Papaspyros (b.papaspyros@gmail.com)
//| - Roberto Rama (bertoski@gmail.com)
//|
//| This software is a computer library whose purpose is to optimize continuous,
//| black-box functions. It mainly implements Gaussian processes and Bayesian
//| optimization.
//| Main repository: http://github.com/resibots/limbo
//| Documentation: http://www.resibots.eu/limbo
//|
//| This software is governed by the CeCILL-C license under French law and
//| abiding by the rules of distribution of free software. You can use,
//| modify and/ or redistribute the software under the terms of the CeCILL-C
//| license as circulated by CEA, CNRS and INRIA at the following URL
//| "http://www.cecill.info".
//|
//| As a counterpart to the access to the source code and rights to copy,
//| modify and redistribute granted by the license, users are provided only
//| with a limited warranty and the software's author, the holder of the
//| economic rights, and the successive licensors have only limited
//| liability.
//|
//| In this respect, the user's attention is drawn to the risks associated
//| with loading, using, modifying and/or developing or reproducing the
//| software by the user in light of its specific status of free software,
//| that may mean that it is complicated to manipulate, and that also
//| therefore means that it is reserved for developers and experienced
//| professionals having in-depth computer knowledge. Users are therefore
//| encouraged to load and test the software's suitability as regards their
//| requirements in conditions enabling the security of their systems and/or
//| data to be ensured and, more generally, to use and operate it in the
//| same conditions as regards security.
//|
//| The fact that you are presently reading this means that you have had
//| knowledge of the CeCILL-C license and that you accept its terms.
//|
/*
* Random-Number Utilities (randutil)
* Addresses common issues with C++11 random number generation.
......
......@@ -72,7 +72,6 @@ namespace limbo {
RandomGenerator(result_type a, result_type b) : _dist(a, b), _rgen(randutils::auto_seed_128{}.base()) {}
result_type rand()
{
std::lock_guard<std::mutex> lock(_mutex);
return _dist(_rgen);
}
......@@ -104,11 +103,11 @@ namespace limbo {
/// @ingroup tools
/// random vector in [0, 1]
///
/// - this function is thread safe because the random number generator we use is thread-safe
/// - this function is thread safe because we use a random generator for each thread
/// - we use a C++11 random number generator
Eigen::VectorXd random_vector_bounded(int size)
{
static rgen_double_t rgen(0.0, 1.0);
static thread_local rgen_double_t rgen(0.0, 1.0);
Eigen::VectorXd res(size);
for (int i = 0; i < size; ++i)
res[i] = rgen.rand();
......@@ -118,11 +117,11 @@ namespace limbo {
/// @ingroup tools
/// random vector in R
///
/// - this function is thread safe because the random number generator we use is thread-safe
/// - this function is thread safe because we use a random generator for each thread
/// - we use a C++11 random number generator
Eigen::VectorXd random_vector_unbounded(int size)
{
static rgen_gauss_t rgen(0.0, 10.0);
static thread_local rgen_gauss_t rgen(0.0, 10.0);
Eigen::VectorXd res(size);
for (int i = 0; i < size; ++i)
res[i] = rgen.rand();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment