Каковы рекомендуемые библиотеки C ++ для распараллеливания больших объемов данных - PullRequest
4 голосов
/ 04 октября 2010

Может кто-нибудь порекомендовать подходы к распараллеливанию в C ++, когда данные для обработки огромны. Я читал об openMP и Intel TBB для распараллеливания в C ++, но пока не экспериментировал с ними. Что из этого лучше для параллельной обработки данных? Какие-нибудь другие библиотеки / подходы?

Ответы [ 3 ]

5 голосов
/ 04 октября 2010

«большие» и «обработка данных» охватывают здесь много вопросов, и трудно дать разумный ответ без дополнительной информации.

Если обработка данных "смущающе параллельна" - если она включает в себя выполнение множества и множества вычислений, которые абсолютно независимы друг от друга - тогда будет миллион вещей, которые будут работать, и это просто вопрос поиска чего-то, что соответствует ваш код и фон.

Если это не смущающе параллельно, но почти так - вычисления требуют большой кусок данных, а просто перебирают их в кучу чисел - их меньше, но вариантов все еще много.

Если вычисление более тесно связано, чем это - где вам нужно, чтобы процессоры работали в тандеме с большими порциями данных, то вы, вероятно, застряли в резервных системах - функциях OpenMP вашего компилятора, если он будет работать на одном машина (также есть TBB, но обычно для обработки чисел OpenMP быстрее и проще) или MPI, если ему нужно несколько машин одновременно. Вы упомянули C ++; У Boost очень хороший MPI-слой.

Но размышление о том, какую библиотеку использовать для распараллеливания, вероятно, сначала думает о неправильном конце проблемы. Во многих случаях вам не обязательно иметь дело с этими слоями напрямую. Если для вычисления числа используется много линейной алгебры (например), то PLASMA (для многоядерных машин - http://icl.cs.utk.edu/plasma/) или PetSC, который поддерживает машины с распределенной памятью, например, несколько компьютеров (http://www.mcs.anl.gov/petsc/petsc-as/) ) - это хороший выбор, который может полностью скрыть от вас реальные детали параллельной реализации. У других видов техники есть и другие библиотеки. Вероятно, лучше подумать о том, какой анализ вам нужно сделать, и посмотреть, есть ли в существующих наборах инструментов необходимая парализация. Только после того, как вы определились с ответом «нет», вы начнете беспокоиться о том, как сделать свой собственный бросок.

5 голосов
/ 04 октября 2010

OpenMP и Intel TBB предназначены для локального использования, поскольку они помогают при написании многопоточных приложений.

Если у вас действительно огромные наборы данных, вам может потребоваться разделить нагрузку на несколько машин - и тогда вступят в игру библиотеки, подобные Open MPI для параллельного программирования с MPI. Open MPI имеет интерфейс C ++, но теперь вы также сталкиваетесь с сетевым компонентом и некоторыми административными проблемами, которых нет у вас на одном компьютере.

3 голосов
/ 04 октября 2010

MPI также полезен на одной локальной машине. Он будет выполнять задание на нескольких ядрах / процессорах, хотя это, вероятно, излишне по сравнению с многопоточностью, это означает, что вы можете переместить задание в кластер без изменений. Большинство реализаций MPI также оптимизируют локальное задание для использования совместно используемой памяти вместо TCP для соединений данных.

...