我一直在寻找其他答案,但我还没有找到一个好的答案。我将描述我正在运行的模拟,然后是问题。该程序模拟经历布朗动态运动(热运动)与随机过程(动力学蒙特卡罗)交替的粒子。当我转向 OpenMP 代码时,我(最终)获得了性能,但我失去了系统中的确定性。因此,我有两个问题。
- 我只能使用单线程版本重复相同的“实验”两次。否则,线程对粒子的操作顺序会破坏任何确定性。
- 分析 OpenMP 代码作为线程函数或与串行版本的运行速度相比,需要在每个点运行 10 倍模拟程序,因为我测试了特定的结束配置,并且程序的速度对配置非常敏感粒子。基本上,粒子越接近,运行所需的时间就越长,因此不同的结束配置可能需要截然不同的时间。
我知道这是在 MD 中发现的一个正常问题,但我正在查看是否有任何解决方法,而不是运行单线程版本。如果是这样的话,那就这样吧,我只是希望有其他的东西,以便我可以优化 OpenMP 代码和环境变量。