从本论文:避免不必要的序列化算法:算法,如必须将种子传递给下一个生成器调用的随机数生成器,在线程内调用生成器的次数无法准确预测时,不必要地序列化该算法。这些算法应该被更多的分布式版本所取代。
问:请大家解释一下,“如果线程内调用生成器的次数不能准确预测,就不必要地序列化算法。”对于随机数生成,我们必须传递一个种子。因此,如何避免序列化。
发布于 2011-03-05 09:04:39
如果您有一个依赖于它以前的值(大多数)的RNG,并且您按照如下方式编写它:
r = Random.new();
for(int i=0; i<100*usersInput; i++)
r.rand();
}它甚至不能被智能编译器自动并行化。但是,如果您像这样写它:
for(int i=0; i<usersInput; i++) {
r = Random.new();
[for(int j=0; j<100; j++) {
r.rand();
}] fork
}一个非常聪明的编译器可以让程序运行在usersInput数量的线程中,每个线程只需要运行100个迭代,而不是usersInput*100。
https://stackoverflow.com/questions/5202738
复制相似问题