Увеличение времени выполнения для многопроцессорной обработки

#python #sage

Вопрос:

Я пытаюсь улучшить производительность этого кода с точки зрения времени, но пока безуспешно. Даже выполнение 32 процессов занимает около 5 метров. Может быть, у вас есть какие-либо предложения по улучшению времени этого кода? Вот evaluated_f_bool_func_lst список с 2**24 элементами. Элементами этого списка являются строки длиной 1 со значениями ‘1’ или ‘0’ («двоичный список»).

 from sage.all import *
import time
from multiprocessing import Pool
import multiprocessing


def create_ext_component_function_i(dim, chunk_i, chunk_size, evaluated_f_bool_func_lst):
    sum_y_str = []

    for y in range(chunk_i, chunk_i   chunk_size):
        prod = ""
        for i in range(dim):
            minus1 = ((-1)**(1amp;(y>>(i))))
            prod  = f'(1-{str(minus1)}*x[{str(i)}])*'
        sum_y_str.append(f'{prod}{evaluated_f_bool_func_lst[y]}')
    return " ".join(sum_y_str)


def create_ext_component_function(dim, evaluated_f_bool_func_lst):
    sum_y = ""
    chunk_size = (2**dim)/32
    pool = Pool(32)
    results = []
    for i in range(0, 2**dim, chunk_size):
        results.append(pool.apply_async(create_ext_component_function_i, args=(dim, i, chunk_size, evaluated_f_bool_func_lst)))
    pool.close()
    pool.join()
    join_results = [result.get() for result in results]
    print(" ".join(join_results))
    return 0


if __name__ == '__main__':
    evaluated_f_bool_func_lst = load("evaluated_f_bool_func_lst.obj")
    dim = 24
    create_ext_component_function(dim, evaluated_f_bool_func_lst)
 

Комментарии:

1. Даже при использовании фрагментов время выполнения функции очень короткое, и накладные расходы на подачу 2**19 задач в пул процессов берут свое. Постарайтесь сделать задачи масштабнее!

2. Есть ли у вас более 16 ядер в вашем процессоре (т. Е. для 32 процессов)?