Содержание
- 2. OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Дает
- 3. Интерфейс OpenMP задуман как стандарт параллельного программирования для многопроцессорных систем с общей памятью (SMP, ccNUMA, …)
- 4. Модель OpenMP мощный, но в тоже время компактный Стандарт de-facto для программирования систем с общей памятью
- 5. Быть стандартом для различных архитектур и платформ с распределенной памятью Дать простой, но ограниченный набор директив
- 6. BUS SMP системы
- 7. Все потоки имеют доступ к глобальной разделяемой памяти Данные могут быть разделяемые и приватные Разделяемые данные
- 8. Использование потоков (общее адресное пространство) Пульсирующий (“вилочный”, fork-join) параллелизм Обзор технологии OpenMP Принцип организации параллелизма Параллельные
- 9. Модель выполнения OpenMP
- 10. Модель выполнения OpenMP Здесь по умолчанию происходит синхронизация. Главная нить не выйдет, пока не сработают остальные.
- 11. Терминология OpenMP Team := Master + Workers Параллельный регион — блок кода, который всеми потоками исполняется
- 12. Ещё чуть терминологии Важные элементы OpenMP: Функции Директивы Клаузы
- 13. Параллелизация цикла с помощью OpenMP omp parallel shared(a,b) #pragma { #pragma omp for private(i) for(i=0; i
- 14. Функции Функции OpenMP носят скорее вспомогательный характер, так как реализация параллельности осуществляется за счет использования директив.
- 15. Директивы Конструкция #pragma в языке Си/Си++ используется для задания дополнительных указаний компилятору. С помощью этих конструкций
- 16. Директива omp Использование специальной ключевой директивы «omp» указывает на то, что команды относятся к OpenMP. Таким
- 17. Директива parallel Самой главной можно пожалуй назвать директиву parallel. Она создает параллельный регион для следующего за
- 18. Формат записи директив и клауз OpenMP #pragma omp имя_директивы [clause,…] #pragma omp parallel default(shared)private(beta,pi) Формат записи
- 19. Пример Чтобы продемонстрировать запуск нескольких потоков, распечатаем в распараллеливаемом блоке текст: #pragma omp parallel { printf(“OpenMP
- 20. Директива for Рассмотренный нами выше пример демонстрирует наличие параллельности, но сам по себе он бессмыслен. Теперь
- 21. Директива for Для того, чтобы распараллелить цикл нам необходимо использовать директиву разделения работы «for». Директива #pragma
- 22. Директива for Можно использовать сокращенную запись, комбинируя несколько директив в одну управляющую строку. Приведенный выше код
- 23. Некоторые функции OpenMP omp_get_thread_num(); - возвращает номер нити типом int. Вне параллельной секции всегда вернёт 0
- 24. Последовательный код void main(){ double x[1000]; for(i=0; i } } Параллельный код void main(){ double x[1000];
- 25. Условие reduction - Пример ● Пример: omp parallel #pragma { sum) private(i) shared(x, i #pragma for
- 27. Скачать презентацию