Python - использование многопроцессорной обработки pool.map, но это не ускоряет вычисления - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь ускорить свои вычисления, используя многопроцессорный файл pool.map на HPC . Но пока код работает, он не сильно его ускоряет или вовсе не ускоряет. Я выделил основную функцию программы и провел небольшое исследование.

def foo1(density):
    start = time.time()
    gs = GeneralSolver(angle, angle, 1, plies_orientation, ply_height, stiffness_matrix, density, num_nods,  f_min, f_max, nb_f)
    k_mat_SAFE, a0_t_mat, s0, s0_t_mat, sh0, sh0_t_mat = gs.get_dispersion_curves(f_min, f_max, nb_f)
    return (time.time() - start)

if __name__ == '__main__':   


    p=[2.7, 2.4, 2.5, 2.5]

    _start = time.time()
    pool = mp.Pool(processes=2)
    var_returned1=pool.map(foo1, p) #sw.evaluation1_parallel
    pool.terminate()
    print( "RESULT parallel", var_returned1)
    print( "TOTAL EXECUTION TIME parallel", (time.time() - _start))

    _start = time.time()
    var_returned2=[]
    for ii in range(len(p)):
        var_returned2.append(foo1(p[ii]))
    print("RESULT serie", var_returned2)

    print( "TOTAL EXECUTION TIME serie", (time.time() - _start))

Когда я пробую этот код на своем ноутбуке (4 ядра и 8 ГБ оперативной памяти, но я использую только 2 ядра длямногопроцессорность), я получаю следующий результат:

RESULT parallel [8.770999908447266, 5.209000110626221, 4.703000068664551, 5.190000057220459]
TOTAL EXECUTION TIME parallel 14.720999717712402
RESULT serie [4.5350000858306885, 4.534999847412109, 4.503999948501587, 4.526000261306763]
TOTAL EXECUTION TIME serie 18.1010000705719

Когда я пробую его на HPC (используется 2 ядра и выделено 160 ГБ ОЗУ), я получаю:

RESULT parallel [11.814664125442505, 11.850022315979004, 10.135426998138428, 10.130557537078857]
TOTAL EXECUTION TIME parallel 22.07818293571472
RESULT serie [4.681218147277832, 4.565039157867432, 4.637110471725464, 4.539891958236694]
TOTAL EXECUTION TIME serie 18.423360109329224

Когда я пытаюсь сделать это с гораздо более длинным списком на входе (109 элементов) и большим количеством ядер на HPC (10 ядер и 160 ГБ ОЗУ), я получаю:

RESULT parallel [39.19079065322876, ..., 31.59877610206604]
TOTAL EXECUTION TIME parallel 375.15932393074036
RESULT serie [4.305459260940552, ..., 4.620036363601685]
TOTAL EXECUTION TIME serie 501.7964723110199

Почему это так долго, чтобы работатьна HPC? Что я могу сделать, чтобы ускорить мои расчеты?

Спасибо

...