ti.init()里面指定random_seed 并不能使得每次例子初始化的位置在同一个地方

此问题搬运自微信群

F(x):我在初始化粒子的时候 使用到了 ti.random(), 我希望每次初始化的位置一样,通过指定随机种子貌似并不能达到这一目的,有解决办法吗?使用 GPU

1 个赞

yuanming:并行程序执行本身就有一些随机性的,试试在初始化循环前面加上 ti.loop_config(serialize=True)?

F(x):ti.loop_config(serialize=True) 命令无法解决,我用numpy 初始化粒子,然后使用mpm88模拟,初始化跟超参都一样,但是运行多次的模拟结果会有出入,是不是所有的并行都会带来一些随机性,包括p2g, g2p里面的并行吗?

zhaoliang:还有一个办法是用numpy.random 设置seed生成数据以后导入taichi 的 field,这可以保证你的初始状态是一致的

F(x):我用numpy 初始化粒子,然后使用mpm88模拟,初始化跟超参都一样,但是运行多次的模拟结果会有出入,是不是所有的并行都会带来一些随机性,包括p2g, g2p里面的并行吗?

yuanming:是的,浮点数计算(atomic add)等等都会带来随机性