Поскольку clang/llvm не планирует поддерживать OpenMP в ближайшее время, Intel собирается далеко по дороге из библиотеки TBB. По-прежнему стоит внедрять многопоточные научные библиотеки (я работаю над ccv: http://github.com/liuliu/ccv) поверх OpenMP? Несмотря на все критические замечания, мой опыт работы с OpenMP вполне доволен (он очень прост в использовании, а выигрыш в производительности - разумный). Но если это умирающая технология, какая замена для упрощения многопоточности в C? (а не pthread, а TBB - вещь C++). Благодаря!Стоит ли тратить время на внедрение OpenMP?
ответ
Новый стандарт C, C11, имеет собственную поддержку для потоков, которые следуют за сломанной моделью pthreads. (C++ 11 имеет то же самое, BTW). Это не может заменить OpenMP, но в его простоте решать параллельные петли и делать сокращения и т. Д.
Существует один «новый» инструмент, который стоит посмотреть, _Atomic
, Библиотеки классической нити предоставляют вам только мьютексы, чтобы избежать расы, которые могут быть довольно тяжелыми в тех случаях, когда на некоторых данных происходит перегрузка. _Atomic
, наконец, дает интерфейс языка с низким уровнем доступа к функциям, которые в большинстве случаев имеют процессоры, и позволяет выполнять быстрые обновления счетчиков или подобных вещей между потоками без рас.
_Atomic
и OpenMP должны сотрудничать без проблем.
OpenMP является живым и здоровым, с некоторыми усилиями, даже в том, чтобы распространять его на многие вещи типа accellerator. Внесение OpenMP печально невелика в списке приоритетов Clang, но все существующие поставщики компиляторов (Intel, gcc, pgi и т. Д.) Привержены не только существующим реализациям, но и текущим изменениям в стандарте. Я бы не стал беспокоиться об этом; в конце концов, clang/llvm придет.
+1 Я также считаю, что OpenMP - это не умирающая технология, особенно для Fortran и C, так как нет много жизнеспособных альтернатив. – Francesco
Если вы посмотрите на C++11 feature support in clang list, вы заметите, что поддержка параллелизма полностью отсутствует.
Итак, хотя новый стандарт C++ действительно предлагает отличные функции для параллелизма и многопоточности, мы в настоящее время не можем его использовать, если хотим оставаться независимыми от платформы.
Итак, если у вас есть код OpenMP, не потейте его; clang просто не поддерживается, и, хотя это жалко, нет смысла переключаться на другую технологию только из-за этого. Конечно, вы могли бы использовать TBB, но я бы сказал, что в свете C++ 11 параллелизм TBB - это всего лишь переходная технология.
Лично я был бы более чем счастлив увидеть последний из OpenMP, но на данный момент мы еще не были.
- 1. Тратить время на создание веб-приложений python
- 2. Как перестать тратить время на PHP
- 3. Quantum и процессорное время тратить
- 4. Стоит ли сжимать BLOB?
- 5. На какой объем работы стоит использовать OpenMP-запуск?
- 6. Может ли цикл for через пустой список тратить время/ресурсы?
- 7. тратить память на ускорение jvm
- 8. Время работы OpenMP
- 9. Можно ли тратить ложный mov eax, esi?
- 10. Стоит ли покупать MatLab?
- 11. тратить биткойны с python
- 12. - весенняя безопасность стоит усилий
- 13. Стоит ли Perforce?
- 14. Как можно контролировать время отпирания Microsoft OpenMP?
- 15. Стоит ли использовать JDEE?
- 16. Мобильное автоматическое тестирование - стоит ли это?
- 17. Стоит ли подписаться на премию AWS Premium?
- 18. Стоит ли использовать SOAP?
- 19. Стоит ли переходить с log4j1 на log4j2
- 20. Могу ли я установить жесткий лимит на мой AWS тратить?
- 21. Можете ли вы тратить часы на удаленные файлы?
- 22. Могу ли я тратить файлы на поиск меньше?
- 23. openMP-компилятор и время выполнения
- 24. Стоит ли заменить FileInfo.Name() на Path.GetFileName()?
- 25. Спайки в openMp время выполнения
- 26. openMP не улучшает время выполнения
- 27. Сколько стоит CGAffineTransformMakeRotation()?
- 28. Нужно ли отключать OpenMP на 1 ядре?
- 29. Поддерживает ли Qt OpenMP?
- 30. Стоит ли изучать COM?
«вполне доволен»? Вы когда-нибудь пробовали выйти из критического раздела OpenMP? Или использовать любой из других функций языка, которые OpenMP не поддерживает, даже если это будет иметь смысл? –
Нет, если вы всегда программируете такие вещи, как: for (i = 0; i <1000; i ++) {a [i] = h [b [i]]; } :) – liuliu