相关疑难解决方法(0)

提升随机数发生器

有没有人有一个最喜欢的增强随机数生成器,你能解释一下如何在代码中实现它.我试图让mersenne twister工作,并想知道是否有人偏好其他人之一.

c++ random boost

26
推荐指数
2
解决办法
4万
查看次数

pi计算的OpenMP并行化要么慢,要么错误

我无法并行化我的monte carlo方法来计算pi.这是并行化的for循环:

#pragma omp parallel for private(i,x,y) schedule(static) reduction(+:count)
  for (i = 0; i < points; i++) {
    x = rand()/(RAND_MAX+1.0)*2 - 1.0;
    y = rand()/(RAND_MAX+1.0)*2 - 1.0;

    // Check if point lies in circle
    if(x*x + y*y < 1.0) { count++; }
  }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我使用它会低估pi,如果我使用它schedule(static),它比串行实现慢schedule(dynamic).我究竟做错了什么?我已经尝试了其他方法来修复它(像这样:使用OpenMP计算PI的值),但它仍然比串行实现慢得多.

提前致谢

c c++ parallel-processing openmp

4
推荐指数
1
解决办法
1192
查看次数

rand()有多个线程

我正在研究两个线程,试图在main()中生成种子(time(null))种子的随机数.程序连续出现分段故障,直到我发现在使用线程时我们必须为自己的例程中的所有线程生成随机数,然后就没有seg错误了.

我试图在谷歌上找到答案,为什么我们必须为所有线程独立播种,但没有找到足够令人信服的答案.有人可以解释一下吗?谢谢!!

c multithreading

3
推荐指数
1
解决办法
2091
查看次数

多线程c程序中的随机函数

请看整个问题

我知道srand()应该只调用一次,但我的第二个代码段表明这不能解决问题!

我写的程序给了我输出,我无法弄清楚为什么会这样.代码段的不同更改会产生不同的输出.

代码目的:
代码用于omp简单地为3个线程运行一段代码.每个线程必须使用该rand()函数打印3个随机值.因此,共有9项产出.线程0是主线程/主程序的运行流程.线程1和线程2是在线程代码开始时创建的新线程.
代码:

#include<omp.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{


     #pragma omp parallel num_threads(3)
    {
        srand(time(NULL));
        int i=0;
        for(i=0;i<3;i++)
        {
            printf("\nRandom number: %d by thread %d", rand(), omp_get_thread_num());
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


输出:

Random number: 17105 by thread 0
Random number: 30076 by thread 0
Random number: 21481 by thread 0
Random number: 17105 by thread 1
Random number: 30076 by thread 1
Random …
Run Code Online (Sandbox Code Playgroud)

c multithreading openmp

3
推荐指数
1
解决办法
4398
查看次数

在Cython中生成随机数的规范方法

生成伪统一随机数([0,1中的双精度数])的最佳方法是:

  1. 跨平台(理想情况下具有相同的样品序列)
  2. 线程安全(显式传递prng的突变状态或在内部使用线程局部状态)
  3. 没有GIL锁
  4. 可轻松包装在Cython中

3年前也有类似的文章,但是很多答案并不符合所有标准。例如,drand48特定于POSIX。

我知道的(但不确定)满足所有某些条件的唯一方法是:

from libc.stdlib cimport rand, RAND_MAX

random = rand() / (RAND_MAX + 1.0)
Run Code Online (Sandbox Code Playgroud)

注意@ogrisel 大约在3年前了同样的问题。

编辑

调用rand不是线程安全的。感谢您指出@DavidW。

random multithreading cython

2
推荐指数
1
解决办法
771
查看次数

如何在多个进程中同时生成随机数?

如何在C中生成随机数,以便在同一时间运行多个进程?

我想用srandrand,但我不知道如何(也许使用进程ID?).

c random

1
推荐指数
1
解决办法
2772
查看次数

标签 统计

c ×4

multithreading ×3

random ×3

c++ ×2

openmp ×2

boost ×1

cython ×1

parallel-processing ×1