2012-01-05 2 views
2

У меня есть двумерная таблица (Матрица) Мне нужно обрабатывать каждую строку в этой матрице независимо от других. Процесс каждой линии занимает много времени. Я бы хотел использовать параллельные вычислительные ресурсы в нашем университете (канадская сетка)Параллельные вычисления

Могу ли я посоветовать, с чего начать? Раньше я никогда не использовал параллельные вычисления.

Спасибо :)

+3

Возможно, поговорите со своим преподавателем/TA/профессором .... –

+3

Для python вы хотите посмотреть библиотеку «многопроцессорности», или 'threading' будет достаточно, если вся тяжелая работа находится в коде C. Сомневающийся, кто-нибудь здесь может помочь вам взаимодействовать с вычислительными ресурсами в вашем университете, если вы случайно не найдете кого-то из своего уни ...! – wim

+0

FYI ... пояснение к примечанию Вима о потоковом: «... если вся тяжелая работа в C ...» (он?) Сказал, что, поскольку глобальная блокировка интерпретатора python не позволяет одновременно запускать несколько потоков. Они один шаг.Вы обойдете это, выполнив свою работу на C (блокировка интерпретатора освобождается при передаче кода на C) или с использованием модуля многопроцессорности, о котором он упомянул, поскольку каждый поток затем запускается в отдельном процессе. Тем не менее, обе они имеют тяжелые накладные расходы, поэтому, если вам действительно нужна производительность, посмотрите на потоки posix под потоками C или Java. – Jim

ответ

5

Начало здесь: http://docs.python.org/library/multiprocessing.html

Обязательно прочитать: http://docs.python.org/library/multiprocessing.html#examples

Это может быть полезно: http://www.slideshare.net/pvergain/multiprocessing-with-python-presentation.

В то время как превосходный, он включает в себя потоки и многопроцессорность, хотя многопроцессорность часто намного превосходит попытку многопоточности.

Для грид-вычислений многопоточность в значительной степени бесполезна.

Кроме того, вы, вероятно, также захотите прочитать celery.

0

Как говорили комментаторы, найдите с кем-нибудь поговорить в своем университете. Ответ на ваш вопрос будет специфическим для того, какое программное обеспечение установлено на сетке. Если у вас есть доступ к сетке, весьма вероятно, что у вас также есть доступ к человеку, чья работа - отвечать на ваши вопросы (и они будут рады помочь) - найти этого человека!

4

Я являюсь одним из разработчиков новой библиотеки под названием scoop.

Он был построен именно для этой цели (сетка или супер-вычислительная техника, научные вычисления). Я предлагаю вам попробовать.

В вашем случае, все, что вы должны сделать, это вызов, как это:

futures.map(YourFunc, matrixLine) 

Он будет распространяться на сетке или любой среде, вы выбираете.

+0

Я не вижу нигде, чтобы добавить отзыв для Scoop на вашу веб-страницу, так что просто короткую заметку здесь. Процесс установки Scoop для Windows 7 может привлечь к себе внимание. Я не смог заставить его работать. Не стесняйтесь обращаться ко мне за дополнительной информацией. –

+0

Не стесняйтесь сообщать о любых проблемах в списке рассылки [совок] (https://groups.google.com/forum/#!forum/scoop-users) для получения более быстрого ответа. Обратите внимание, что scoop все еще находится на стадии бета-тестирования, но мы приветствуем любые отзывы, которые помогут улучшить его. Мы рассмотрим этот вопрос в ближайшее время. – Olivier

+0

Ничего себе, удивительно видеть рождение SCOOP: p Мне это нравится! – Labo

0

Из того, что вы описали, я бы сказал: сначала взгляните на numpy. Numpy предоставляет методы для вычисления столбцов и строк в векторном виде с почти скоростью C. В зависимости от вашей проблемы это может быть быстрее, чем параллельное вычисление с чистым CPython.

Вы можете использовать параллельные вычисления с numpy -arrays, чтобы получить действительно большую скорость. Возможные способы сделать это - использовать multiprocessing или Ipython на кластере.

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