Валентин Арьков - Организация параллельных потоков. Часть 2
- Название:Организация параллельных потоков. Часть 2
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2020
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Арьков - Организация параллельных потоков. Часть 2 краткое содержание
Параллельные программы нужны для того, чтобы использовать вычислительные мощности многоядерных процессоров и графических ускорителей. В данной работе мы рассмотрим технологию автоматической организации параллельных потоков для многоядерных вычислительных машин.
Организация параллельных потоков. Часть 2 - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
1) первая последовательная область печатает единичку;
2) параллельная область печатает двоечку — несколько раз, по количестве виртуальных процессоров;
3) вторая последовательная область печатает троечку.
Текст программы приводится на рис. 3.16.
Рис. 3.16. Программа с тремя областями
Включаем в компиляторе поддержку OpenMP.
Компилируем.
Запускаем.
Рассматриваем результаты (рис. 3.17).
На экран выводится одна цифра 1, восемь цифр 2 и одна цифра 3.
Это говорит о том, что рспараллеливанию подвергается только часть программы. Та часть, которую мы указали в директиве parallel.
Рис. 3.17. Результаты работы параллельной программы
Задание.Запустите параллельную программу (рис. 3.16).
3.5. Число параллельных потоков
У нас имеется три способа задания числа параллельных потоков:
— параметр окружения OMP_NUM_THREADS;
— функция omp_set_num_threads;
— параметр директивы num_threads.
3.5.1. Переменная окружения
Начнём с задания часта потоков с помощью переменной окружения. Другие названия: параметр окружения, параметр среды, set-параметр.
Английское название:
Environment variable.
Это текстовая переменная операционной системы. Переменная находится в оперативной памяти. Её значение может прочитать любая программа в момент выполнения. К переменным окружения обращаются по имени (названию). Окружение, или среда, — это среда выполнения программ. Эту среду создаёт и обслуживает операционная система.
Мы будем работать с параметрами окружения через командное окно. Другие названия: командная строка, командный процессор, командная оболочка. Английские названия:
— Command Window
— Command Processor
— Command Shell.
Нажимаем комбинацию клавиш:
Win + R.
Вводим имя программы, которая обслуживаем командное окно:
CMD(рис. 3.18).
Рис. 3.18. Запуск командного окна
Задание.Запустите командное окно.
Вводим в командной строке команду просмотра параметров окружения:
SET
На экран выводится список параметров в алфавитном порядке.
Нас интересует переменная:
OMP_NUM_THREADS.
Название можно расшифровать так:
OpenMP Number of Threads — Число потоков параллельной области OpenMP.
С списке переменных такого параметра пока нет (рис. 3.19).
Зато есть другой интересный параметр:
NUMBER_OF_PROCESSORS=8.
Как мы уже говорили, речь здесь идёт о так называемых «виртуальных процессорах», а вовсе не о микросхемах под названием «процессор».
Рис. 3.19. Параметры окружения
Задание.Просмотрите список параметров окружения и обратите внимание на количество процессоров.
Если наш параметр не задан, по умолчанию создаётся количество параллельных потоков, равное числу виртуальных процессоров.
Зададим создание трёх потоков:
set OMP_NUM_THREADS=3
Проверим, что появилось в нашем списке.
Вводим команду
SET
У нас появился наш параметр (рис. 3.20).
Рис. 3.20. Параметры окружения
Задание.Установите число потоков в командном окне.
Есть одна особенность работы с параметрами окружения в командной строке. Любые изменения параметров в командной строке действуют только в одном окне и только до тех пор, пока его не закроют. Постоянное и всеобщее задание параметров окружения делается по-другому. Мы этим заниматься не будем.
Задание. Откройте новое командное окно. Изучите список параметров окружения.
Нам нужно перейти в каталог, где находится скомпилированная программа — исполняемый файл.
Для этого придётся выяснить путь к файлу.
Возвращаемся в среду разработки.
Внизу экрана находим окно Output(рис. 3.21).
Здесь выводятся сообщения о результатах компиляции.
В нашем примере нам сообщают, что исполняемый файл успешно создан:
Build: 1 succeeded.
Нас интересует полный путь к файлу.:
E:\Arkov-OMP\omp-03-fork-join\Release\omp-03-fork-join. exe.
Путь можно скопировать в буфер, чтобы не печатать вручную.
Рис. 3.21. Окно сообщений компилятора
Задание.Ознакомьтесь с окномсообщений о результатах компиляции программы.
Переходим в командное окно.
Мы находимся на диске C:, а исполняемый файл — на диске E:.
Для перехода на другой диск вводим его имя и двоеточие.
Обращаем внимание, как изменилось приглашение к вводу команд.
Теперь здесь имя другого диска (рис. 3.22).
Рис. 3.22. Смена текущего диска
Задание.Смените текущий диск.
Сменим текущий каталог.
Вводим команду Change Directory:
CD
и путь к файлу.
Проверяем содержимое каталога Directory:
DIR
Убеждаемся, что исполняемый файл находится в текущем каталоге.
Запускаем программу на выполнение.
Вводим имя файла и нажимаем ОК.
Расширение EXEвводить не обязательно.
Видим, что параллельная область выполнялась на трёх потоках (рис. 3.23).
Рис. 3.23. Запуск программы
Задание.Запустите программу в командной строке и убедитесь, что вам удалось задать число потоков.
3.5.2. Библиотечная функция
Второй способ задать число параллельных потоков — это библиотечная функция. Конечно, речь здесь идёт о библиотеке OpenMP.
Формат вызова:
void omp_set_num_threads (int num).
Тип возвращаемого значения: void. Эта функция ничего не возвращает. Она просто делает своё дело.
Название функции можно расшифровать так:
Set Number of Threads — задать число параллельных потоков.
Чтобы использовать библиотечную функцию, нужно подключить эту библиотеку (рис. 3.24).
В начале программы указываем заголовочный файл:
#include .
Рис. 3.24. Задание числа потоков
Задаём два параллельных потока.
Запускаем программу из среды разработки.
Видим, что в параллельной области сработало два потока (рис. 3.25).
Рис. 3.25. Два потока
Задание.Установите число потоков с помощью и библиотечной функции и убедитесь, что эта настройка сработала.
3.5.3. Параметр директивы
Третий способ задать число параллельных потоков — указать в параметрах директивы parallel:
num_threads (num).
Составляем новую программу на основе предыдущей.
Указываем число потоков — четыре (рис. 3.26):
num_threads (4).
Рис. 3.26. Число потоков в директиве
Запускаем программу.
Убеждаемся, что число параллельных потоков соответствует тому, что мы задали (рис. 3.27).
Рис. 3.27. Четыре потока
Задание.Установите число параллельных потоков через параметр директивы.
3.5.4. Приоритет настроек
Мы рассмотрели три способа задать число параллельных потоков.
Читать дальшеИнтервал:
Закладка: