gpt4 book ai didi

C++11 并行化 : bottleneck in Armadillo's set_seed_random()

转载 作者:行者123 更新时间:2023-11-28 01:27:13 26 4
gpt4 key购买 nike

在 C++11 中,arma_rng::set_seed_random() 的使用会产生瓶颈。我展示了一种重现它的方法。

考虑这个简单的代码:

#include <armadillo>    // Load Armadillo library.
using namespace arma;

int main()
{
bool jj = true;
while ( jj == true ){
arma_rng::set_seed_random(); // Set the seed to generate random numbers.
double rnd_number = randu<double>(); // Generate a random number.
}

}

我用它编译的

g++ -std=c++11 -Wall -g bayesian_estimation.cpp -o bayesian_estimation -O2 -larmadillo

当我在终端中运行可执行文件时,我看到其中一个内核正在以接近 100% 的 CPU% 处理它。如果我运行它的更多实例,每个相应进程的 CPU% 都会减少,但不会使用新的(和闲置的!)内核。我在 this question 中详细说明了这种行为。 .

为什么会这样?

最佳答案

我假设 Armadillo 从操作系统维护的真随机数池中获取 set_seed_random() 的种子(例如,大多数 *NIX 操作系统上的/dev/random)。由于这需要一个物理的熵源(通常是击键的时间、网络事件、其他中断源被使用),这个池是有限的并且可以比生成新的随机数更快地耗尽。

在您的情况下,我假设一个全速运行的可执行文件正在以与添加新熵大致相同的速度耗尽池。一旦您添加第二个、第三个...,它们就会在等待新随机数进入随机数池时停止。

关于C++11 并行化 : bottleneck in Armadillo's set_seed_random(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53209631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com