Я занимаюсь разработкой трудоемкого моделирования в C ++ для машин Intel x86_64.
После небольшого исследования я обнаружил две интересные библиотеки для обеспечения параллелизации:
Как указано в документации, оба они нацелены на параллелизм на многоядерных процессорах, но до сих пор не выяснили, какой из них лучший. AFAIK Cilkplus просто реализует три ключевых слова для упрощения параллелизма (что приводит к перекомпиляции GCC для поддержки этих ключевых слов); в то время как TBB — это просто библиотека, способствующая лучшему параллельному развитию.
Учтите, что у меня много проблем с установкой CilkPlus (все еще пытаюсь и все еще кричу). Так что мне было интересно, я должен сначала проверить TBB? Cilkplus лучше, чем TBB? Чтобы вы посоветовали?
Должен ли я завершить установку CilkPlus (все еще молясь об этом), можно ли будет использовать TBB вместе с ним? Могут ли они работать вместе? Есть ли кто-нибудь, кто испытал развитие SW с CiclkPlus и TBB? Вы бы порекомендовали работать с ними вместе?
Спасибо
Вот некоторые часто задаваемые вопросы типа вопроса к вопросу в оригинальном сообщении.
Cilk Plus против TBB против Intel OpenMP
Короче говоря, это зависит от того, какой тип распараллеливания вы пытаетесь реализовать и как кодируется ваше приложение.
Эта ссылка также может помочь:
Intel TBB и Cilk + сравнить
Я могу ответить на этот вопрос в контексте TBB. Плюсы использования TBB:
Минусы могут быть
накладные расходы на создание задач высоки. Пользователь должен убедиться, что размер проблемы достаточно велик, чтобы разделитель мог создавать задачи с оптимальным размером зерна.
Я также не работал с cilk, но очевидно, что если вообще есть пользователи в двух доменах, то большинство из них — TBB. Вероятно, если Intel предложит TBB из-за обновленного документа и бесплатной поддержки, сообщество пользователей TBB будет расти
Они могут использоваться в дополнение друг к другу (CILK и TBB). Обычно это лучшее. Но из моего опыта вы будете использовать TBB чаще всего.
TBB и CILK будут автоматически масштабироваться в зависимости от количества ядер. (создавая дерево задач, а затем используя рекурсию во время выполнения).
TBB библиотека времени выполнения для C ++, использующая заданные программистом шаблоны задач вместо потоков. TBB примет решение — во время выполнения — об оптимальном количестве потоков, степени детализации задач и планировании, ориентированном на производительность (автоматическая балансировка нагрузки за счет кражи задач, эффективности кэша и повторного использования памяти). Рекурсивно создавать задачи (для дерева это логарифмическое число задач).
Cilk (плюс) такое расширение языка C / C ++ требует поддержки компилятора
Код может не переноситься на разные компиляторы и операционные системы. Он поддерживает параллелизм вилочного соединения. Также очень легко распараллелить рекурсивные алгоритмы. Наконец, у него есть несколько инструментов (spawn, sync), с помощью которых вы можете очень легко распараллелить код. (не нужно много переписывать!).
Другие отличия, которые могут быть интересны:
a) График случайного кражи работы CILK для противодействия «ожидающим» процессам.
а) TBB крадет из наиболее загруженного процесса.
Есть ли причина, по которой вы не можете использовать готовые двоичные файлы GCC, которые мы делаем доступными на https://www.cilkplus.org/download#gcc-development-branch ? Он построен из cilkplus_4-8_branch и должен быть достаточно актуальным.
Какое решение вы выберете, зависит от вас. Cilk предоставляет очень естественный способ выражения рекурсивных алгоритмов, и его планировщик кражи дочерних элементов может быть очень дружественным к кешу, если вы используете кеширующие алгоритмы. Если у вас есть вопросы о Cilk Plus, вы получите лучший ответ на них на форуме Intel Cilk Plus по адресу http://software.intel.com/en-us/forums/intel-cilk-plus/.
Cilk Plus и TBB знают друг друга, поэтому они должны хорошо играть вместе, если вы их смешаете. Вместо комбинаторного взрыва потоков вы получите самое большее количество потоков в пуле потоков TBB плюс количество рабочих потоков Cilk. Что обычно означает, что вы получите потоки 2P (где P — количество ядер), если вы не измените значения по умолчанию с помощью библиотечных вызовов или переменных среды. Вы можете использовать функции векторизации Cilk Plus с любой библиотекой потоков.
- Barry Tannenbaum
Intel Cilk Plus developer
Итак, по запросу от ОП:
я использовал TBB
раньше и я доволен этим. Он имеет хорошие документы и форум активен. Редко можно увидеть, как разработчики библиотеки отвечают на вопросы. Попробуйте. (Я никогда не использовал cilkplus
так что я не могу об этом говорить).
Я работал с ним как в Ubuntu, так и в Windows. Вы можете скачать пакеты через менеджер пакетов в Ubuntu или создать исходные тексты самостоятельно. В этом случае это не должно быть проблемой. В Windows я построил TBB
с MinGW
под cygwin
среда.
Что касается проблем совместимости, то их не должно быть. TBB
отлично работает с Boost.Thread
или же OpenMP
, например; это было разработано так, чтобы это могло быть смешано с другими решениями для обработки.