Я видел много примеров, когда я делаю почти то, что я пытаюсь сделать, но не совсем то, что мне нужно. У меня неприятно параллельный код, который я пытаюсь ускорить. Суть того, что я пытаюсь сделать, приведена ниже:
t=11
for k in range(100):
for i in range(10000):
for j in range(10000):
s=t*i
x[k] = s
y[k] = s+3
Итак, я знаю большую часть того, что мне нужно сделать для многопоточности самого верхнего цикла из 100 повторов:
import multiprocessing
def parAttempt(t):
for i in range(10000):
for j in range(10000):
s=t*i
x[k] = s
y[k] = s+3
if __name__ == '__main__'
pool = multiprocessing.Pool(processes=8)
pool.map(parAttempt, range(100))
Что, я думаю, в основном верно. Однако я не знаю, как сделать две вещи. Во-первых, как мне правильно отправить его t и тот факт, что я хочу выполнить его 100 раз. И во-вторых, как мне сохранить x [k] и y [k] для 100 повторов, которые я пытаюсь сделать? Это просто что-то вроде:
x[k], y[k] = pool.map(parAttempt, range(100))
Что не может быть правильным, потому что k в этот момент не определено в коде.
Ну, в моем коде x - это одномерный массив numpy, который хранит вычисленные значения, а y - это двумерный массив numpy. Я делаю от 100 до 10000 реплик симуляций, ни одна из которых не зависит друг от друга. Многопоточность должна давать линейную скорость, я просто гораздо лучше знаком с Matlab, который здесь не подходит по многим причинам.
Что-то с вашим примером явно не так. Как написано, ваш код даже не использует внутренний цикл или переменную j
.
Что такое
x
иy
? Также - не могли бы вы описать здесь «более широкую картину» ... иногда многопроцессорность - это пустая трата времени / непрактична / приводит к более длинному коду без ускорения / потенциального замедления ... и т. д., Когда доступны другие решения.