У меня есть функция, которая запускается для циклов для направлений i и j, и в каждом цикле я вычисляю выход нейронной сети с прямой связью и сохраняю ее в массив. Это займет много времени, чтобы сделать 1000 * 1000 петель, не говоря уже о чем-то большем. Это в основном создаст 2D-изображение с интенсивностью пикселей. Я хотел бы распараллелить это, чтобы каждый процесс работал на небольшой части изображения, чтобы он работал быстрее.
Функция не зависит от других значений, только значения i и j моих переменных x и y. Как мне заставить это работать с многопроцессорностью?
Это то, что я имею до сих пор. Как правильно добавить результаты в новый 2D-массив?
import multiprocessing
from multiprocessing import pool
out = np.zeros([image_size,image_size])
def desired_function(out):
for i in range(image_size):
for j in range(image_size):
x = i/image_size
y = j/image_size
input = [0.2,0.45,0.56,0.1,0.9,0.123,0.873]
r = math.sqrt(x*x + y*y)
input.append(x)
input.append(y)
input.append(r)
input = torch.FloatTensor(input)
out[i][j] = neuralNet(input)
#print(f"{i},{j}",end="\r")
print("done")
return out # "for example"
p = mp.Pool(4)
result = p.map(desired_function,range(4))
result = np.array(result)
p.close()
p.join()
processes = []
for i in range(0,4):
p = multiprocessing.Process(target=desired_function, args=([out]))
processes.append(p)
p.start()
for process in processes:
process.join()