2015-06-09 4 views
1

Я хочу умножить 3 матрицы (например, E = AxBxC) с использованием общей памяти в многопроцессорном методе. Я могу сделать это с помощью двух матриц, но когда я хочу повторить ту же процедуру для третьей матрицы, я застрял и не знаю, как обращаться с общим массивом. Я знаю, что должен использовать многопроцессорный массив, но не знаю, как его управлять. Вот как я использовал массив в моем коде:Как умножить 3 матрицы с использованием общей памяти в Python?

mp_arr_one = multiprocessing.Array(ctypes.c_int, 3*3) 

, а затем в моей функции:

arr = numpy.frombuffer(mp_arr_one.get_obj(), dtype=ctypes.c_int) 
res = arr.reshape((3,3)) 

Все хорошо для первой части (D = Axb), но когда я хочу, чтобы вычислить E = DxC, код идет не так, и результат полностью неверен.

Заранее спасибо.

ответ

0

Просто используйте numpy с оптимизированным BLAS (например, OpenBLAS, BLAS ATLAS, MKL), который поддерживает многопоточность.

Матричное умножение будет распараллеливаться, и поскольку оно включает в себя обширные оптимизации, зависящие от архитектуры, этот подход будет быстрее, чем явно управлять общей памятью в Python с помощью multiprocessing.Array. Кстати, вы должны использовать оптимизированную реализацию BLAS с numpy, если скорость является проблемой, даже при выполнении одного потока, поэтому нет никакого способа обойти это.

Смежные вопросы