eiler13
Июль 29, 2013 21:03:45
Возникла необходимость делать расчеты побыстрее, на многоядерных системах с общей памятью. Работаю с библиотеками numpy, scipy. Разобрался как с OpenMP ускоряться, но приходится писать модуль на Си, и, желания переписывать матричные расчеты нет …
1. существуют ли параллельные версии функций решения систем линейных алгебраических уравнений, вычислений номр .. . из пакета numpy.linalg? Особо интересует параллельная версия numpy.linalg.solve.
2. существует ли что-то из области Python/numpy ( может похожие библиотеки/пакеты), чтобы параллелить матричные расчеты, не переходя к циклам.
P.S. гуглю, но плохо с английским …
Shaman
Июль 29, 2013 21:36:45
Это будет неэффективно. Нужно или параллелить поток исполнения, или использовать экзотику вроде видеокарточек.
4kpt
Июль 29, 2013 21:56:27
ShamanСогласен. GIL никто не отменял. Даже на конференции было сказано, что написание модулей на Си и оборачивание их Boost ничего не меняет…
eiler13Большая часть numpy уже реализована в Си (кстати, именно для повышения быстродействия), посему перепиливание тонн кода не даст сильного прироста (я так думаю). Да и сложно будет пилить без технического английского.
P.S. Вот ссылочка - гляньте если интересно
Бизли Д. “Как устроен GIL в Python” (перевод).
eiler13
Июль 31, 2013 13:56:11
Спасибо, про GIL не знал, но и не пытался Питоновские потоки запускать
что касается статьи, то на практике ускорять получилось при написании модулей на С+OpenMP с weave или ctype - проверил ) Но, если идти по этому пути и переписывать весь код на Си, то уже использовать Питон не к чему. Выхода в виде параллельной версии numpy (параллелится на уровне модулей Си) я так понимаю не существует. Не понятно, кстати, почему - ведь, например, поэлементное умножение матрицы на матрицу и ряд других матричных операций является идеальным параллельным алгоритмом и при сборке С-ишного кода можно использовать OpenMP …
про видеокарту можно ссылочки
Alen
Авг. 1, 2013 08:47:34