来自this paper:避免不必要地序列化算法:算法,如随机 数字生成器必须将种子传递给下一个生成器调用序列化 如果生成器的次数,该算法是不必要的 在一个线程内调用无法准确预测。这些算法 应该用更多分布式版本替换。
问:任何人都可以解释“如果在线程中调用生成器的次数无法准确预测,则不必要地序列化算法。”至于随机数 我们必须传递一粒种子。因此,如何避免序列化。
答案 0 :(得分:1)
如果您的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-of-threads中运行,每个只需要运行100次迭代而不是userInput * 100.