我刚买了一台新机器来运行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 ...然而,它只会影响其中一个核心,并不会导致所有核心具有各种处理速度......
答案 0 :(得分:3)
这样做的一个原因可能是使用超线程。 HT逻辑CPU在操作系统中显示为单独的CPU,但实际上并非如此。因此,如果两个线程在不同的逻辑(HT)CPU中运行在同一个内核上,那么性能将比在不同内核上运行时的性能要小。
最简单的解决方案可能是禁用超线程。如果这不是一个选项,请使用处理器关联将每个Python进程固定到其单独的CPU。