Строительный блок потоков по сравнению с MPI, какой из них больше подходит mt? - PullRequest
2 голосов
/ 03 февраля 2010

Теперь у меня есть последовательный решатель на C ++ для решения задач оптимизации, и я должен распараллелить мой решатель с различными параметрами, чтобы посмотреть, может ли это помочь улучшить производительность решателя. Теперь я не уверен, должен ли я использовать TBB или MPI. Из книги TBB, которую я прочитал, я чувствую, что TBB больше подходит для зацикливания или детального кода. Поскольку у меня нет большого опыта работы с TBB, я чувствую, что трудно разделить мой код на маленькие части, чтобы реализовать распараллеливание. Кроме того, из литературы я обнаружил, что многие авторы использовали MPI для параллелизма нескольких решателей и обеспечения его взаимодействия. Я думаю, возможно, MPI больше соответствует моим потребностям. Поскольку у меня мало знаний ни по TBB, ни по MPI. Кто-нибудь может сказать мне, правильно ли мое чувство? MPI подойдет мне лучше? Если так, какой материал хорош для начала изучения MPI. У меня нет опыта работы с MPI, и я использую систему Windows и c ++. Большое спасибо.

1 Ответ

3 голосов
/ 18 февраля 2010

Основная вещь, которую вы должны иметь в виду, это выбор между разделяемой памятью и распределенной памятью. Общая память - это когда у вас есть более одного процесса (обычно более одного потока внутри процесса), который может получить доступ к общей памяти. Это может быть достаточно детальным, и обычно проще адаптировать однопоточную программу к нескольким потокам. Вам нужно будет спроектировать программу таким образом, чтобы потоки работали большую часть времени в отдельных частях памяти (использование параллелизма данных) и чтобы общая часть была защищена от одновременного доступа с помощью блокировок. Распределенная память означает, что у вас есть разные процессы, которые могут выполняться на одном или нескольких распределенных компьютерах, но вместе они имеют общую цель и обмениваются данными через передачу сообщений (обмен данными). Нет общего пространства памяти, и все данные, которые нужны одному процессу от другого процесса, потребуют обмена данными. Это более общий подход, но из-за требований к коммуникациям он требует крупнозернистого зерна. TBB - это библиотека для параллелизма разделяемой памяти на основе потоков, в то время как MPI - это библиотека для параллелизма распределенной памяти (она имеет простые примитивы для связи, а также сценарии для нескольких процессов при выполнении разных узлов).

Самое важное для вас - идентифицировать параллелизмы в вашем решателе, а затем выбрать лучшее решение. Есть ли у вас параллелизм данных (разные потоки / процессы могут работать параллельно в разных порциях данных без необходимости обмена или разделения частей этих данных)? Параллелизм задач (разные потоки / процессы могут выполнять разные преобразования ваших данных или разные этапы обработки данных конвейерным или графическим способом)?

...