многопроцессорное или многопоточное? - распараллеливание простого вычисления для миллионов итераций и сохранение результата в единой структуре данных

У меня есть словарь D записей {string: list}, и я вычисляю функцию f (D [s1], D [s2]) -> float для пары строк (s1, s2) в D.

Кроме того, Я создал собственный матричный класс LabeledNumericMatrix, который позволяет мне выполнять такие назначения, как m [ID1, ID2] = 1.0.

Мне нужно вычислить f (x, y) и сохранить результат в m [x, y] для всех 2-кортежей в наборе строк S, в том числе когда s1 = s2. Это легко закодировать как цикл, но выполнение этого кода занимает довольно много времени, поскольку размер набора S увеличивается до больших значений, таких как 10 000 или более.

Ни один из результатов, которые я храню в моей помеченной матрице m, не зависит друг от друга.Поэтому кажется простым распараллелить это вычисление с помощью многопоточных или многопроцессорных служб Python. Однако, поскольку cPython действительно не позволяет мне одновременно выполнять вычисление f (x, y) и сохранение m [x, y] с помощью потоков, мне кажется, что многопроцессорность - мой единственный выбор. Однако я не думаю, что многопроцессорность предназначена для передачи между процессами структур данных размером 1 ГБ, таких как моя помеченная матричная структура, содержащая 10000x10000 элементов.

Может ли кто-нибудь дать совет: (а) следует ли мне избегать попыток распараллеливания моего алгоритма и (б) если я могу выполнить распараллеливание, как это сделать, предпочтительно в cPython?

6
задан Michael J. Barber 20 February 2012 в 10:20
поделиться