2009-06-24 2 views
3

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

Я знаю, что в VS2010 есть Concurrency Runtime. Тем не менее, это все еще на Бета. Пока что нам нужно выпустить качественный код сейчас, что является хорошим вариантом для API, который позволит плавный переход позже. Другие предложения?

ответ

2

Я знаю:

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

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

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

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

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

Возможно, вам понравится Joe Duffy'sConcurrent Programming on Windows книга.

Herb Sutter также размещает много статей под заголовком Эффективный параллелизм.

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

1

Библиотека библиотеки потоков Threads Intel имеет параллельную систему задач, которая аналогична (на высоком уровне) для среды выполнения параллелизма. Информация о API будет отличаться, но работа, которую вы выполняете, чтобы разбить вашу программу на небольшие задачи, которые выполняются независимо, будет перенесена.

+0

Вы можете узнать больше о библиотеке блоков Thread Building http://www.threadingbuildingblocks.org/. Обратите внимание, что это C++-библиотека, поэтому, если вы хотите использовать ее из кода C, вам, вероятно, придется перейти с pthreads или OpenMP – garethm

1

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

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

Я также слышал шум об OpenMP, но не изучал его.

+0

Вы можете узнать больше о pthreads для Windows по адресу http://sourceware.org/pthreads-win32/ – garethm

2

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

1

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

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

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

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

+0

Привет! Мне очень жаль, что я не ошибаюсь, что мы впервые делаем многопоточность. мой вопрос был больше о том, что API/arch использовать для «будущей проверки». Мы являемся подрядчиком. – moogs

+0

В этом случае, мой ответ заключается в том, что пока не существует «будущего» решения. Материал VS10 может стать одним, но не до тех пор, пока он не станет зрелым. Риски использования его как бета-версии будут довольно большими. Следующий стандарт C++ будет иметь некоторые параллельные вещи, но он будет по-прежнему немного низким. Я бы сказал, используйте _beginthread() или CreateThread(). Используйте критические разделы, мьютексы, семафоры и события. До сих пор много тяжелого подъема, но по крайней мере вы не потеете чужие ошибки. Придет хороший API, но, вероятно, через два года он станет жизнеспособным. –

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