Intel TBB против CilkPlus

Я занимаюсь разработкой трудоемкого моделирования в C ++ для машин Intel x86_64.
После небольшого исследования я обнаружил две интересные библиотеки для обеспечения параллелизации:

Как указано в документации, оба они нацелены на параллелизм на многоядерных процессорах, но до сих пор не выяснили, какой из них лучший. AFAIK Cilkplus просто реализует три ключевых слова для упрощения параллелизма (что приводит к перекомпиляции GCC для поддержки этих ключевых слов); в то время как TBB — это просто библиотека, способствующая лучшему параллельному развитию.

Какой из них вы бы порекомендовали?

Учтите, что у меня много проблем с установкой CilkPlus (все еще пытаюсь и все еще кричу). Так что мне было интересно, я должен сначала проверить TBB? Cilkplus лучше, чем TBB? Чтобы вы посоветовали?

Они совместимы?

Должен ли я завершить установку CilkPlus (все еще молясь об этом), можно ли будет использовать TBB вместе с ним? Могут ли они работать вместе? Есть ли кто-нибудь, кто испытал развитие SW с CiclkPlus и TBB? Вы бы порекомендовали работать с ними вместе?

Спасибо

3

Решение

Вот некоторые часто задаваемые вопросы типа вопроса к вопросу в оригинальном сообщении.

Cilk Plus против TBB против Intel OpenMP

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

5

Другие решения

Эта ссылка также может помочь:
Intel TBB и Cilk + сравнить

3

Я могу ответить на этот вопрос в контексте TBB. Плюсы использования TBB:

  • Для запуска кода не требуется поддержка компилятора.
  • Универсальные алгоритмы C ++ TBB позволяют пользователю создавать свои собственные объекты и отображать их в поток как задачу.
  • Пользователю не нужно беспокоиться об управлении потоками. Встроенный планировщик задач автоматически определяет количество возможных аппаратных потоков. Однако пользователь может выбрать количество потоков для исследования производительности.
  • Потоковые графики для создания задач, которые уважают зависимости, легко позволяют пользователю использовать как функциональность, так и параллелизм данных.
  • TBB естественно масштабируется, устраняя необходимость модификации кода при переходе на более крупные системы.
  • Активный форум и документация постоянно обновляются.
  • с компиляторами Intel последняя версия TBB работает очень хорошо.

Минусы могут быть

  • Низкая база пользователей в сообществе открытого исходного кода затрудняет поиск примеров
  • примеры в документации очень простые, а в старых версиях они даже ошибочны. Однако форум Intel всегда готов расширить поддержку для решения проблем.
  • абстракция в шаблонных классах очень высока, что делает кривую обучения очень крутой.
  • накладные расходы на создание задач высоки. Пользователь должен убедиться, что размер проблемы достаточно велик, чтобы разделитель мог создавать задачи с оптимальным размером зерна.

    Я также не работал с cilk, но очевидно, что если вообще есть пользователи в двух доменах, то большинство из них — TBB. Вероятно, если Intel предложит TBB из-за обновленного документа и бесплатной поддержки, сообщество пользователей TBB будет расти

3

Они могут использоваться в дополнение друг к другу (CILK и TBB). Обычно это лучшее. Но из моего опыта вы будете использовать TBB чаще всего.
TBB и CILK будут автоматически масштабироваться в зависимости от количества ядер. (создавая дерево задач, а затем используя рекурсию во время выполнения).

  • TBB библиотека времени выполнения для C ++, использующая заданные программистом шаблоны задач вместо потоков. TBB примет решение — во время выполнения — об оптимальном количестве потоков, степени детализации задач и планировании, ориентированном на производительность (автоматическая балансировка нагрузки за счет кражи задач, эффективности кэша и повторного использования памяти). Рекурсивно создавать задачи (для дерева это логарифмическое число задач).

  • Cilk (плюс) такое расширение языка C / C ++ требует поддержки компилятора
    Код может не переноситься на разные компиляторы и операционные системы. Он поддерживает параллелизм вилочного соединения. Также очень легко распараллелить рекурсивные алгоритмы. Наконец, у него есть несколько инструментов (spawn, sync), с помощью которых вы можете очень легко распараллелить код. (не нужно много переписывать!).

Другие отличия, которые могут быть интересны:

a) График случайного кражи работы CILK для противодействия «ожидающим» процессам.

а) TBB крадет из наиболее загруженного процесса.

2

Есть ли причина, по которой вы не можете использовать готовые двоичные файлы 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
1

Итак, по запросу от ОП:

я использовал TBB раньше и я доволен этим. Он имеет хорошие документы и форум активен. Редко можно увидеть, как разработчики библиотеки отвечают на вопросы. Попробуйте. (Я никогда не использовал cilkplus так что я не могу об этом говорить).

Я работал с ним как в Ubuntu, так и в Windows. Вы можете скачать пакеты через менеджер пакетов в Ubuntu или создать исходные тексты самостоятельно. В этом случае это не должно быть проблемой. В Windows я построил TBB с MinGW под cygwin среда.

Что касается проблем совместимости, то их не должно быть. TBB отлично работает с Boost.Thread или же OpenMP, например; это было разработано так, чтобы это могло быть смешано с другими решениями для обработки.

0
По вопросам рекламы [email protected]