2012-03-18 1 views
4

Поскольку clang/llvm не планирует поддерживать OpenMP в ближайшее время, Intel собирается далеко по дороге из библиотеки TBB. По-прежнему стоит внедрять многопоточные научные библиотеки (я работаю над ccv: http://github.com/liuliu/ccv) поверх OpenMP? Несмотря на все критические замечания, мой опыт работы с OpenMP вполне доволен (он очень прост в использовании, а выигрыш в производительности - разумный). Но если это умирающая технология, какая замена для упрощения многопоточности в C? (а не pthread, а TBB - вещь C++). Благодаря!Стоит ли тратить время на внедрение OpenMP?

+0

«вполне доволен»? Вы когда-нибудь пробовали выйти из критического раздела OpenMP? Или использовать любой из других функций языка, которые OpenMP не поддерживает, даже если это будет иметь смысл? –

+1

Нет, если вы всегда программируете такие вещи, как: for (i = 0; i <1000; i ++) {a [i] = h [b [i]]; } :) – liuliu

ответ

0

Новый стандарт C, C11, имеет собственную поддержку для потоков, которые следуют за сломанной моделью pthreads. (C++ 11 имеет то же самое, BTW). Это не может заменить OpenMP, но в его простоте решать параллельные петли и делать сокращения и т. Д.

Существует один «новый» инструмент, который стоит посмотреть, _Atomic , Библиотеки классической нити предоставляют вам только мьютексы, чтобы избежать расы, которые могут быть довольно тяжелыми в тех случаях, когда на некоторых данных происходит перегрузка. _Atomic, наконец, дает интерфейс языка с низким уровнем доступа к функциям, которые в большинстве случаев имеют процессоры, и позволяет выполнять быстрые обновления счетчиков или подобных вещей между потоками без рас.

_Atomic и OpenMP должны сотрудничать без проблем.

3

OpenMP является живым и здоровым, с некоторыми усилиями, даже в том, чтобы распространять его на многие вещи типа accellerator. Внесение OpenMP печально невелика в списке приоритетов Clang, но все существующие поставщики компиляторов (Intel, gcc, pgi и т. Д.) Привержены не только существующим реализациям, но и текущим изменениям в стандарте. Я бы не стал беспокоиться об этом; в конце концов, clang/llvm придет.

+0

+1 Я также считаю, что OpenMP - это не умирающая технология, особенно для Fortran и C, так как нет много жизнеспособных альтернатив. – Francesco

1

Если вы посмотрите на C++11 feature support in clang list, вы заметите, что поддержка параллелизма полностью отсутствует.

Итак, хотя новый стандарт C++ действительно предлагает отличные функции для параллелизма и многопоточности, мы в настоящее время не можем его использовать, если хотим оставаться независимыми от платформы.

Итак, если у вас есть код OpenMP, не потейте его; clang просто не поддерживается, и, хотя это жалко, нет смысла переключаться на другую технологию только из-за этого. Конечно, вы могли бы использовать TBB, но я бы сказал, что в свете C++ 11 параллелизм TBB - это всего лишь переходная технология.

Лично я был бы более чем счастлив увидеть последний из OpenMP, но на данный момент мы еще не были.

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