2

我刚买了一台新机器来运行 python 脚本进行大规模建模。它有两个 CPU,每个 CPU 有 4 个内核(Xeon,2.8GhZ)。每个内核都为 4 个逻辑 CPU 内核启用了超线程。

现在解决问题:当我在 8 个单独的终端中运行相同的 python 进程时,top命令显示每个进程都占用了 100% 的 cpu。但是,终端 1 中的进程运行速度比终端 8 中的进程慢大约 4 倍。这对我来说似乎很奇怪......

我想知道它是否与如何在各种(逻辑?)核心上安排进程有关?有谁知道我如何才能以相同的速度运行?

编辑(回应 larsmans):好点。该脚本是一个运行大约 10,000 次的 ginat 循环。每个循环读入一个文本文件(500 行)并对读入的数量进行一些基本计算。循环运行时,它使用大约 0.2% 的内存。循环期间没有写入磁盘。我可以理解读取访问可能是一个限制因素,但我很困惑这样一个事实,即如果是这种情况,它将是第一个最慢的进程。我原以为它会随着我启动更多进程而变慢......

time我使用终端中的命令对进程进行了几次计时。

EDIT2:我刚刚发现有时一个核心被指定来处理所有的读取和写入——所以多个进程(即使它们在不同的核心上运行)将使用一个单一的核心来处理所有的 I/O ......但这只会影响其中一个核心,不会导致所有核心具有不同的处理速度......

4

1 回答 1

3

造成这种情况的一个原因可能是使用了超线程。HT 逻辑 CPU 在操作系统看来是独立的 CPU,但实际上并非如此。因此,如果两个线程在不同逻辑 (HT) CPU 中的同一内核上运行,则性能将低于它们在不同内核上运行时的性能。

最简单的解决方案可能是禁用超线程。如果这不是一个选项,请使用处理器关联将每个 Python 进程固定到其单独的 CPU。

于 2012-04-25T20:53:32.677 回答