我的项目有问题。当我运行蒙特卡罗模拟的代码时,在本地服务器(我办公室的机器)上,它以每 24 小时大约 100000 步的速度运行。当我在集群上运行它时,速率下降到大约一半甚至更低。
我试图弄清楚这一点,但我找不到任何理由。我不希望您阅读我的代码并对其进行分析,主要是因为这不是您的工作。我只要求你有任何建议的经验。到目前为止,我得到的是:
- 我不参加任何并行计算。
- 当我在本地机器上运行代码时,除了它之外我通常不会运行任何繁重的东西。
- 我确实在本地机器上运行了几份代码副本,但不超过该机器上处理器的数量 - 1。IT 人员不确定,但他们认为本地服务器上没有启用双重处理。(有一个未解决的问题)
- 当我在集群上运行代码的单个副本时,它运行正常。
- 仅当副本数为 8 时,性能才会显着下降。
- 集群上有两种机器。16 个节点(8 个双处理器)和 24 个节点(我认为那些是 6 个四核处理器)。
- 代码是用 C++ 编写的。即使它被认为是糟糕的编程,我所有的变量都是全局的,我直接访问它们(而不是通过函数)。
- 我使用
icc -O3 -fast -ip
. 删除这些标志中的任何一个都会降低性能或没有任何明显的影响。
我认为,从所有这些来看,这是内存管理的一个问题,但我不知道如何测试它。
我对此有几个问题:
- 有没有人遇到过类似的事情?
- 如何测试这是否是内存问题?
- 我可以在我的编译中添加另一个标志吗?
- 有没有在 c++ 中有效使用内存的技巧?
感谢您的任何帮助