Есть ли опыт использования строительных блоков Intel Threading?[закрыто]

StackOverflow https://stackoverflow.com/questions/106862

  •  01-07-2019
  •  | 
  •  

Вопрос

Intel Строительные блоки резьбы (TBB) библиотека с открытым исходным кодом выглядит действительно интересно.Хотя есть даже Книга О'Рейли Что касается этой темы, я не слышал о том, что многие люди ее используют.Я заинтересован в использовании его для некоторых многоуровневых параллельных приложений (MPI + потоки) в средах Unix (Mac, Linux и т. д.).Как бы то ни было, меня интересуют приложения для высокопроизводительных вычислений/численных методов.

Есть ли у кого-нибудь опыт использования TBB?Хорошо ли это работает?Достаточно ли он портативен (включая GCC и другие компиляторы)?Подходит ли эта парадигма для написанных вами программ?Есть ли другие библиотеки, на которые мне следует обратить внимание?

Это было полезно?

Решение

Я ввел его в нашу кодовую базу, потому что нам нужен был malloc для ставок, который мы могли бы использовать при переходе на 16-ядерную машину.С 8 и ниже это не было серьезной проблемой.У нас это сработало хорошо.В дальнейшем мы планируем использовать мелкозернистые параллельные контейнеры.В идеале мы можем использовать настоящую суть продукта, но это требует переосмысления того, как мы создаем наш код.Мне очень нравятся идеи TBB, но их нелегко адаптировать к базе кода.

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

Мы работаем в Visual Studio и все работает отлично.Первоначально он был написан для Linux/pthreads, поэтому и там он работает нормально.

Другие советы

Я не занимаюсь численными вычислениями, но занимаюсь интеллектуальным анализом данных (например, кластеризацией и классификацией), и наши рабочие нагрузки, вероятно, схожи:все данные статичны и находятся в начале программы.Я кратко исследовал TBB Intel и обнаружил, что они излишни для моих нужд.Начав с необработанного кода на основе pthread, я перешел на OPENMP и получил правильное сочетание читаемости и производительности.

Портативность

TBB портативен.Он поддерживает Intel и AMD (т.x86), процессоры IBM PowerPC и POWER, процессоры ARM и, возможно, другие.Если вы посмотрите в каталог сборки, вы можете увидеть все конфигурации, которые поддерживает система сборки, включая широкий спектр операционных систем (Linux, Windows, Android, MacOS, iOS, FreeBSD, AIX и т. д.) и компиляторов (GCC, Intel, Clang/LLVM, IBM XL и др.).Я не пробовал TBB с компилятором PGI C++ и знаю, что он не работает с компилятором Cray C++ (по состоянию на 2017 год).

Несколько лет назад я участвовал в портировании TBB на системы IBM Blue Gene.Статическое связывание было проблемой, но теперь ее решают разработчики big_iron.inc помощник системы сборки.Другими проблемами были поддержка относительно старых версий GCC (4.1 и 4.4) и обеспечение работы атомарности PowerPC.Я ожидаю, что портирование на любую в настоящее время неподдерживаемую архитектуру будет относительно простым на платформах, которые предоставляют или совместимы с GCC и POSIX.

Использование в кодексах сообщества

Мне известно как минимум о двух платформах приложений HPC, использующих TBB:

Я не знаю, как MOOSE использует TBB, но MADNESS использует TBB для своей очереди задач и распределителя памяти.

Производительность по сравнению с другими моделями потоков

Я лично использовал TBB в Ядра параллельных исследований проект, в рамках которого я сравнил TBB с OpenMP, OpenCL, Kokkos, RAJA, C++17 Parallel STL и другими моделями.См. Подкаталог C++ для получения подробной информации.

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

PRK stencil

Полное раскрытие:Я работаю в Intel в сфере исследований и поиска путей.

Я недолго пользовался TBB и, вероятно, буду использовать его чаще в будущем.Мне понравилось его использовать, прежде всего потому, что вам не придется иметь дело с макросами/расширениями C++, а оставаться в рамках языка.Кроме того, он довольно портативный.Я использовал его как в Windows, так и в Linux.Но одно:с потоками, использующими TBB, сложно работать, придется мыслить категориями задач (что на самом деле хорошо).Intel TBB не будет поддерживать использование голых блокировок (это сделает это утомительным).Но в целом это мой предварительный опыт.

Я бы также рекомендовал взглянуть на openMP 3.

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

Строительные блоки Threading (TBB) в версии с открытым исходным кодом (есть новая коммерческая версия, 299 долларов США, различий пока нет) представляют собой Стандартную общественную лицензию GNU версии 2 с так называемым «Исключением времени выполнения». (это относится только к использованию при создании свободного программного обеспечения.)Я видел другие исключения времени выполнения, которые пытались приблизиться к LGPL, но допускали коммерческое использование и статическое связывание этого не является сейчас случай.

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


Спасибо, Джин, за указание на это обновление...

Я изучал TBB, но никогда не использовал его в проекте.Я не увидел никаких преимуществ (для своих целей) перед ZThread.Краткий и несколько устаревший обзор можно найти здесь.

Он достаточно укомплектован несколькими опциями диспетчеризации потоков, всеми обычными классами синхронизации и очень удобным механизмом «прерывания» потоков на основе исключений.Он легко расширяется, хорошо написан и документирован.Я использовал его в более чем 20 проектах.
Он также хорошо работает с любыми *NIX, поддерживающими потоки POSIX, а также с Windows.

Стоит посмотреть.

Я использую TBB в одном проекте.Казалось, использовать его проще, чем потоки.Есть задачи, которые можно выполнять параллельно.Задача — это просто вызов вашей распараллеленной подпрограммы.Балансировка нагрузки осуществляется автоматически.Вот почему я принимаю ее как библиотеку распараллеливания более высокого уровня.Я добился ускорения в 2,5 раза без особых усилий на 4-ядерном процессоре Intel.Есть примеры, на форумах отвечают на вопросы, это поддерживается и бесплатно.

Стоит прояснить, для чего нужны TBB (Threading Building Blocks), в отличие от других альтернатив (например,Возможности параллелизма C++ 11x).TBB — это переносимая и масштабируемая библиотека (не расширение компилятора), позволяющая вам писать свой код в виде облегченных задач, которые TBB запланирует выполнять как можно быстрее на доступных ресурсах ЦП.Он не предназначен для поддержки потоков для других целей (например,преимущественное право покупки).

Я использовал TBB, чтобы ускорить существующую обработку изображений циклов for по строкам сканирования изображения в циклы Parallel_for (минимум 2-4 строки сканирования в качестве «зернистого» размера).Это было очень успешным.Для этого требуется, чтобы тело вашего цикла (пере) записывалось для обработки произвольного индекса, а не предполагалось, что каждое тело цикла обрабатывается последовательно (например,указатели, которые увеличиваются между каждой итерацией цикла).

Это был довольно тривиальный случай, поскольку не было общего хранилища для обновления.Использование более мощных функций (например.конвейер) потребует значительного переосмысления и/или переписывания существующего кода, поэтому, возможно, он лучше подходит для нового кода.

Большим преимуществом является то, что этот код на основе TBB остается переносимым, не мешает другому коду в другом месте того же процесса, одновременно используя другие стратегии потоковой обработки, и позже может быть объединен со стратегиями многопроцессорной обработки на более высоком или низком уровне (например,код TBB Parallel_for может быть вызван из фильтра в многопроцессорном конвейере TBB).

Вы посмотрели способствовать росту библиотека со своей API потока?

Строительные блоки потоков (TBB) в версии с открытым исходным кодом (есть новая коммерческая версия, 299 долларов, пока не знает различий)-GNU General Public Public License версия 2 с так называемым «исключением времени выполнения» (то есть специфичный для использования только при создании свободного программного обеспечения.) Я видел другие исключения времени выполнения, которые пытаются подойти к LGPL, но обеспечивая коммерческое использование и статическое связывание. Это не так.

Согласно этому вопрос Строительные блоки потоков можно использовать без ограничений по авторскому левому при коммерческом использовании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top