Я хочу добиться параллельных вычислений с помощью многопроцессорного модуля Python, поэтому я реализую смоделированные вычисления, чтобы проверить, могу ли я использовать несколько ядер ЦП. Я обнаружил очень странную вещь: один процесс может достичь 8-процентного использования ЦП на подсистеме Windows для Linux (WSL) на моем рабочем столе в 100%, а не только одного использования ЦПУ на 100% в Ubuntu на сервере Lab.
Как это:
![enter image description here](https://i.stack.imgur.com/rpoUi.png)
И это контраст:
![enter image description here](https://i.stack.imgur.com/bqBtM.png)
Кроме того, я обнаружил, что использование нескольких процессов не снижает затраты времени на WSL на моем настольном компьютере, но в действительности значительно снижает затраты времени на Ubuntu на сервере Lab.
Как это:
![enter image description here](https://i.stack.imgur.com/ARhQL.png)
(Здесь я запускаю 6 процессов, а для запуска одного процесса на сервере Lab требуется около 440 с.)
И это контраст:
![enter image description here](https://i.stack.imgur.com/nalCx.png)
(Здесь я запускаю 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()
Я надеюсь, что кто-то может мне помочь. Спасибо!