我想通过Python多处理模块实现并行计算,因此我实现了模拟计算以测试是否可以使用多个CPU内核。我发现一个非常奇怪的事情,一个进程可以在台式机上的Linux Linux子系统(WSL)上达到8个CPU使用率100%,而在Lab的服务器上只有一个100%的CPU使用率。 像这样:
这是对比:
此外,我发现使用多个进程并不能减少台式机上WSL的时间成本,但确实可以大大降低Lab服务器上Ubuntu的时间成本。 像这样:
(这里我运行6个进程,而在Lab的服务器上运行单个进程大约需要440s。)
这是对比:
(这里我运行3个进程,在我的桌面上运行单个进程大约需要29秒。)
这是我的Python源代码:
import numpy as np
import time
import os
import multiprocessing as mp
PROCESS_MAX = 1
LOOPS = 1
process_list = []
def simulated_calculation():
x = np.random.rand(100, 100)
y = np.random.rand(100, 100)
z = np.outer(x, y)
determinant = np.linalg.det(z)
def child_process(name):
for i in range(LOOPS):
print("The child process[%s] starts at %s and its PID is %s" % (str(name), time.ctime(), os.getpid()))
simulated_calculation()
print("The child process[%s] stops at %s and its PID is %s" %(str(name), time.ctime(), os.getpid()))
def main():
print("All start at %s" % time.ctime())
print("The parent process stars at %s and its PID is %s" % (time.ctime(), os.getpid()))
start_wall_time = time.time()
for i in range(PROCESS_MAX):
p = mp.Process(target = child_process, args = (i + 1, ))
process_list.append(p)
p.daemon = True
p.start()
for i in process_list:
i.join()
stop_wall_time = time.time()
print("All stop at %s" % time.ctime())
print("The whole runtime is %ss" % str(stop_wall_time - start_wall_time))
if __name__ == "__main__":
main()
我希望有人能帮助我。谢谢!
答案 0 :(得分:0)
WSL仍然缺少表面,尤其是在性能方面。没有物理硬件连接,它是从Windows通过虚拟层传递的。这种特定情况听起来好像是已经提交了一个错误,但我建议您提交一个此处介绍的问题。同时,所有与性能相关的问题都位于https://github.com/Microsoft/WSL/issues/873上。我建议您订阅该主题,但不要再添加另一个“我也是”!对于已经拥有足够数量的MS开发人员来说,这绝对是没有用的。