Независимые от платформы библиотеки параллельного программирования для C ++ - PullRequest
3 голосов
/ 20 февраля 2009

Я знаком с параллельным программированием на Java, которое предоставляет множество инструментов для этого. Однако параллельное программирование на C ++ не так легко начать использовать.

Каков наилучший способ начать программирование одновременно на C ++? Есть ли хорошие библиотеки, которые обертывают примитивы параллельного программирования и предоставляют вам более высокоуровневые конструкции?

Я пробовал QtConcurrent , который предоставляет вам хорошую функциональность MapReduce, но он сильно склонен к параллельным вычислениям с использованием Qt, поэтому это не лучший выбор, если вы не хотите использовать Qt.

Есть ли другие подобные библиотеки? Что люди используют здесь?

Спасибо за вашу помощь заранее, * 1011 СНЕГ *

Ответы [ 5 ]

11 голосов
/ 20 февраля 2009
4 голосов
/ 20 февраля 2009

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

Более традиционная идея: boost :: threads очень хорошо работают для создания параллельных программ на основе потоков. Хотя это довольно низкий уровень.

OpenMP находится на более высоком уровне, чем потоки, и также довольно хорошо поддерживается.

3 голосов
/ 20 февраля 2009

Вы можете посмотреть на CSP , который имеет реализацию C ++ . Однако сильно отличается от потоковых примитивов Java.

2 голосов
/ 20 февраля 2009

Этот вопрос вместе с ответами, возможно, поможет вам немного.

1 голос
/ 20 февраля 2009

Блоки Intel Threading Building Blocks отлично подходят для обеспечения параллелизма на уровне отдельных параллельных циклов данных и обеспечивают автоматическое управление потоками и распределение работы. Его можно использовать аналогично OpenMP, но без необходимости явной поддержки компилятора.

...