有没有其他人注意到在扩展到使用云实例上的所有内核时性能很差,并且有一些内存密集型作业(在我的情况下为 2.5GB)?
当我在四核至强芯片上本地运行作业时,使用 1 个内核和所有 4 个内核之间的差异是所有内核的速度降低约 25%。根据我的理解,这是可以预料的;随着内核用完,时钟频率下降是多核芯片设计的一部分。
但是当我在多核虚拟实例上运行作业时,我看到了 处理时间降低 2-4 倍 在使用 1 个内核和所有内核之间。我已经在 GCE、EC2 和 Rackspace 实例上看到了这一点。我已经测试了许多不同的实例类型,主要是提供的最快的。
那么这种行为是否被其他人在内存使用方面看到过相同大小的作业?
我正在运行的作业是用 Fortran 编写的。我没有写它们,而且我不是一个真正的 fortran 人,所以我对它们的了解是有限的。我知道他们的 I/O 需求很低。当我在它们运行时观看 top 时,它们似乎受 CPU 限制。它们无需相互通信即可运行,即令人尴尬地并行。它们每个占用大约 2.5GB 的内存。
所以到目前为止我最好的猜测是,使用这么多内存的作业会受到虚拟化层内存管理的重大影响。也可能是我的工作正在争夺 I/O 资源,但据专家称,这似乎不太可能。
我现在的解决方法是使用 GCE,因为它们具有单核实例,实际上运行作业的速度与我的笔记本电脑的芯片一样快,并且几乎按内核按比例定价。
最佳答案
您可能会遇到内存带宽限制,具体取决于您的数据访问模式。
linux perf
tool可能会对此有所了解,但我承认我并不完全理解您对问题的描述。如果我理解正确:
如果是这样,听起来您要么遇到内核争用,要么争用例如内存输入/输出。看看各种 fortran 编译器选项是否有助于优化内存访问模式会很有趣;例如,enabling SSE2 load/store intrinsics或其他优化。您还可以将结果与 gcc 和 intel 的 fortran 编译器进行比较。
关于amazon-ec2 - 内存密集型作业在多核云实例(ec2、gce、rackspace)上的扩展性很差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007062/