Предполагая, что вы разработали последовательную программу с вложенными циклами и хотели бы преобразовать ее параллельно с OpenMP и работать над ней в разделах для отладки, когда вы идете ... было бы лучше сначала работайте с самым внешним контуром и прокладывайте себе путь, или начинайте с самого внутреннего цикла (ов)? Я знаю функцию коллапса, но не все вложенные петли сбрасываются.OpenMP, стратегия разработки вложенных циклов
ответ
Абсолютно и определенно не в самой внутренней цепи. Это связано с тем, что начальные потоки обычно дороги.
С другой стороны, если самый внутренний цикл занимает гораздо больше ресурсов для выполнения, чем запуск потока, то это не имеет значения. но в остальном самый лучший из них - лучший выбор.
Конечно, это очень широкий ответ в тон с вашим очень широким вопросом. В каждом отдельном случае всегда есть разные ответы.
С другой стороны, если у вас есть такая сложная проблема, я рекомендую вам использовать низкоуровневый std::thread
и управлять потоками вручную. Это требует больше работы, но у вас больше контроля и лучших результатов. Затем вы можете использовать пулы потоков и иметь наиболее эффективное решение.
Это очень продуманный и подробный ответ (для, да, широкий вопрос. Во время его создания я имел в виду проблему прохождения/разбора вокруг 2D-матрицы, но намеренно оставил этот бит информации, потому что я был любопытно общей механики и метода решения проблем, а не ответа на мою конкретную проблему, которую я бы неизбежно получил, если бы разместил ее). Спасибо. – theupandup
Матрицы должны храниться как одномерные векторы. Это самый эффективный способ сделать это. Подумайте о том, как использовать высокопроизводительные библиотеки, такие как OpenBLAS (или их обертки, такие как Armadillo). Вы не должны изобретать колесо. Матричные операции - огромное поле. –
Я сейчас в классах, и обычно мы должны использовать определенные библиотеки только для определенных проектов. 2D-векторы подходят для этого задания (и то, что нам было поручено использовать) – theupandup
- 1. Стратегия блокировки программирования OpenMP в C++ для вложенных циклов
- 2. Оптимизация вложенных циклов в OpenMP
- 3. Оптимизация вложенных циклов в C и OpenMP
- 4. OpenMP вложенных циклов с кодом между каждым `for` цикла
- 5. Как использовать OpenMP для вложенных циклов в цикле while?
- 6. Оптимизация вложенных циклов
- 7. Оптимизация двух внутренних циклов в openmp
- 8. Стратегия разработки многоэтапных правил
- 9. Стратегия разработки проекта/кода
- 10. OpenMP вложен для циклов (работа с Qt)
- 11. сложность для вложенных циклов
- 12. Что касается вложенных циклов
- 13. Результат вложенных циклов
- 14. Подсчет стоимости вложенных циклов
- 15. Matlab - Ускорение вложенных циклов
- 16. Улучшение вложенных циклов
- 17. Логики вложенных циклов
- 18. Вывод из вложенных циклов
- 19. Расчет распределения вложенных циклов
- 20. Создание множества вложенных циклов
- 21. Оптимизация вложенных циклов C#
- 22. Число вложенных циклов переменной
- 23. Время работы вложенных циклов
- 24. Множество вложенных циклов
- 25. R - несколько вложенных циклов
- 26. Рекурсия для вложенных циклов
- 27. Вычисление сложности вложенных циклов
- 28. Переменные Количество вложенных циклов
- 29. Упрощение вложенных циклов
- 30. Блокирующие вложенных циклов итератора
Это довольно широкий вопрос. В рекомендации есть много факторов. Можете ли вы сузить его, предоставив некоторые подробности без общего вложенного цикла, наиболее предпочтительно в виде реального кода. – Zulan
BTW: Я бы сказал, насколько возможно внешний, как внутренний. Но я бы не счел это полезным ответом. – Zulan
Некоторые вложенные петли, которые не могут быть свернуты с условием 'collapse', все равно могут быть свернуты вручную, например. треугольные петли. Полезно узнать, как все равно рубить петли. –