#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 процессов)?