Имам сума, която се опитвам да изчисля, и имам затруднения при паралелизиране на кода. Изчислението, което се опитвам да паралелизирам, е доста сложно (използва както numpy масиви, така и scipy разредени матрици). Извежда масив numpy и искам да сумирам изходните масиви от около 1000 изчисления. В идеалния случай бих запазил текуща сума за всички повторения. Не успях обаче да разбера как да направя това.
Досега се опитах да използвам паралелната функция на joblib и функцията pool.map с многопроцесорния пакет на python. И за двете използвам вътрешна функция, която връща масив numpy. Тези функции връщат списък, който преобразувам в масив numpy и след това сумирам.
Въпреки това, след като паралелната функция на joblib завърши всички итерации, основната програма никога не продължава да работи (изглежда, че оригиналната задача е в суспендирано състояние, използвайки 0% CPU). Когато използвам pool.map, получавам грешки в паметта, след като всички итерации са завършени.
Има ли начин просто да паралелизирате текуща сума от масиви?
Редактиране: Целта е да направите нещо като следното, освен паралелно.
def summers(num_iters):
sumArr = np.zeros((1,512*512)) #initialize sum
for index in range(num_iters):
sumArr = sumArr + computation(index) #computation returns a 1 x 512^2 numpy array
return sumArr
outputArr = np.array(pool.map(parloop, range(num_views)))
, къдетоparloop
връща масив numpy. - person Kevin   schedule 30.01.2012numexpr
: code.google.com/p/numexpr Казвате му уравнението искате да изчислява (същото като кода на python, но написан като низ) и той се грижи за оптимизацията и многонишковостта вместо вас - person endolith   schedule 12.07.2012