Параллельный API для C / C ++ в Windows - PullRequest
3 голосов
/ 24 июня 2009

Мы разрабатываем что-то для платформы Windows, и мы хотели бы использовать в настоящее время несколько ядер, присутствующих в ПК.

Я знаю, что в VS2010 есть Параллельное время выполнения . Это все еще на бета-версии, хотя. А пока нам нужно выпустить качественный код сейчас, что является хорошим вариантом для API, который позволит плавный переход позже. Другие предложения?

Ответы [ 5 ]

2 голосов
/ 24 июня 2009

Я знаю:

  • Библиотека Intel Thread Building Block (с открытым исходным кодом)
  • Поддержка библиотеки потоков C ++ 0x (кроссплатформенная в будущем)
  • Just Software реализация библиотеки потоков C ++ 0x - позволяет вам начать использовать новую библиотеку потоков c ++ в версии 2008.
  • OpenMP - встроить в большинство компиляторов C ++, включая VS 2008.
  • pthreads для win32 - потоки POSIX, поэтому они являются кроссплатформенными для любой ОС с жалобами POSIX.
  • API потоков WIN32

Я бы порекомендовал Intel Thread Building Blocks, поскольку это более высокий уровень абстракции по сравнению с большинством других многопоточных API. Это также открытый исходный код, так что вы можете скачать и посмотреть, как это делается. Предстоящие версии предназначены для использования Windows Concurrency Runtime, если она доступна. Я также читал, что Intel представила TBB для включения в стандарт C ++.

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

Мне еще предстоит использовать новую поддержку потоков в c ++, но они выглядят на том же уровне или чуть выше, чем pthreads. Just Software имеет несколько интересных статей о том, как использовать новую библиотеку потоков c ++.

Я только читал об OpenMP, и я не уверен, что это такое.

Вы можете прочитать Книга Джо Даффи Параллельное программирование в Windows .

Херб Саттер также публикует множество статей под заголовком «Эффективный параллелизм».

Надеюсь, это поможет.

2 голосов
/ 24 июня 2009

Я предлагаю использовать OpenMP во время ожидания. Он реализован для большинства компиляторов, его относительно легко добавить в существующий код и использовать позже с другими API.

1 голос
/ 25 июня 2009

Краткий ответ: наймите программиста с хорошим опытом работы с потоками.

Работать с несколькими потоками на нескольких ядрах сложно. Ничто не заменит опыт.

Visual C ++ (любая последняя версия) имеет инструменты для разработки параллельного программного обеспечения, но есть сложности, такие как синхронизация данных, которые делают его очень сложным для неопытного. Материал Concurrency Runtime - это попытка скрыть сложность и позволить компилятору сделать всю работу. Это может работать очень хорошо, но жюри все еще нет. На данный момент вы можете получить хорошие результаты с помощью существующих инструментов, но вам нужен опыт.

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

1 голос
/ 24 июня 2009

Мне всегда нравились нити. Он довольно хорошо отображается на других моделях потоков, с которыми я сталкивался, и я нашел, что относительно легко программировать (по сравнению, скажем, с MPI).

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

Я также слышал какой-то шум об OpenMP, но не смотрел на это.

1 голос
/ 24 июня 2009

Библиотека Intel Thread Building Block имеет систему параллельных задач, которая аналогична (на высоком уровне) среде выполнения параллелизма. Детали API будут отличаться, но работа, которую вы сделаете, чтобы разбить вашу программу на небольшие задачи, которые выполняются независимо, будет перенесена.

...