自动并行化友好的编程实践

时间:2011-03-05 08:56:01

标签: java c serialization numbers parallel-processing

来自this paper:避免不必要地序列化算法:算法,如随机 数字生成器必须将种子传递给下一个生成器调用序列化 如果生成器的次数,该算法是不必要的 在一个线程内调用无法准确预测。这些算法 应该用更多分布式版本替换。

问:任何人都可以解释“如果在线程中调用生成器的次数无法准确预测,则不必要地序列化算法。”至于随机数 我们必须传递一粒种子。因此,如何避免序列化。

1 个答案:

答案 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.