Валентин Арьков - Организация параллельных потоков. Часть 2

Здесь есть возможность читать онлайн «Валентин Арьков - Организация параллельных потоков. Часть 2» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Год выпуска: 2020, Жанр: Прочая околокомпьтерная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Организация параллельных потоков. Часть 2: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Организация параллельных потоков. Часть 2»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

При решении инженерных, экономических и научных задач используются высокопроизводительные вычисления — High Performance Computing или сокращённо HPC.
Параллельные программы нужны для того, чтобы использовать вычислительные мощности многоядерных процессоров и графических ускорителей. В данной работе мы рассмотрим технологию автоматической организации параллельных потоков для многоядерных вычислительных машин.

Организация параллельных потоков. Часть 2 — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Организация параллельных потоков. Часть 2», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Задаём количество потоков, равное количеству ядер.

Открываем Диспетчер задач:

Task Manager.

Находим вкладку Быстродействие:

Performance.

Запускаем программу на выполнение и смотрим на загрузку ядер (рис. 4.26).

Каждое ядро загружено на 100%.

Кроме того, в левой части окна показан график общей загрузки процессора в целом — тоже 100%.

Переходим в командное окно и нажимаем комбинацию клавиш для прерывания программы:

Ctrl + C.

Загрузка процессора снова падает почти до нуля.

Рис. 4.26. Полная загрузка всех ядер

Задание.Составьте программу (рис. 4.25) и проведите эксперимент с полной загрузкой всех ядер процессора (рис. 4.26).

4.3.2. Неполная загрузка

Проведём следующий эксперимент.

Уменьшим количество потоков до двух.

Запускаем программу и следим за загрузкой процессора (рис. 4.27).

Видим, что на этот раз все ядра «немного заняты» работой.

Мы запустили задачу на двух параллельных потоках. Однако, операционная система старается равномерно распределить вычислительную нагрузку между всеми ядрами.

Рис. 4.27. Частичная загрузка всех ядер

Задание.Проведите эксперимент с частичной загрузкой всех ядер процессора, задав число потоков меньше, чем число ядер.

4.3.3. Привязка к ядрам

Привяжем параллельные потоки к конкретным ядрам процессора. Добавим в нашу программу с большой задачей несколько строк (рис. 4.28).

Вставляем дополнительные команды в начале параллельной области, когда локальная копия Sполучает нулевое значение (строка 11).

Определяем номер текущего потока:

omp_get_num_thread ().

Затем формируем маску для привязки потока к ядру (строка 13):

Mask = pow (2, TNum).

Возводим два в степень, равную номеру потока. Номера потоков начинаются от нуля. Маска привязки к вычислительному ядру состоит из степеней двойки. Таким образом, мы привязываем каждый поток к своему ядру.

Например, нулевой поток привязываем к нулевому ядру. Маска равна

2 0 = 1.

Первый поток привязываем к первому ядру. Маска равна

2 1 = 2.

И так далее.

Затем в строке 14 задаём привязку к ядру с помощью следующей функции:

SetThreadAffinityMask.

Для контроля выводим данные на экран (строка 15).

В нашей программе появился новый параметр директивы parallel:

private (TNum, Mask).

Таким способом мы объявляем, что две переменные будут локальными внутри параллельных потоков. Это означает, что в каждом потоке будет своя переменная с указанным названием. Присвоение значения такой переменной в одном потоке никак не повлияет на значение той же самой переменной в другом потоке. В нашей программе это номер потока в группе и маска для привязки к ядру.

Рис. 4.28. Привязка потоков к ядрам

Компилируем.

Переходим в командное окно. Задаём два потока и запускаем программу.

Рассмотрим загрузку в Диспетчере задач (рис. 4.29).

Теперь нулевое и первое ядра загружены на 100%. Остальные ядра не участвуют в нашей работе.

Рис. 4.29. Два потока — два ядра

Задание.Составьте программу (рис. 4.28) и запускайте её с разным количеством потоков. Обратите внимание на загрузку отдельных ядер.

Рассмотрим значения маски для разного количества потоков. Убедимся, что значения маски вычисляются правильно (рис. 4.30).

Рис. 4.30. Вычисление маски

Задание.Установите разные значения количества потоков и проверьте правильность вычисления маски.

4.4. Время вычислений

Мы рассмотрели организацию параллельных вычислений. Настало время заняться временем. Нас интересует время вычислений. По нему мы сможем оценить эффективность распараллеливания.

Время в компьютере измеряют с помощью системного таймера. Для обращения к таймеру есть ряд готовых функций.

В предыдущей работе мы использовали стандартную функцию clock ().

Чтобы получить время в секундах делим разность показаний на количество тиков CLOCKS_PER_SEC.

В библиотеке OpenMP есть своя функция для работы с таймером:

double omp_get_wtime (void).

Точность измерения времени можно узнать с помощью функции:

double omp_get_wtick (void).

Обе функции дают результат в секундах.

Возьмём предыдущую программу с «большой задачей» суммирования. Добавим замеры времени и выведем результаты на экран (рис. 4.31).

Рис. 4.31. Замеры времени

Запускаем программу и подбираем число итераций цикла так, чтобы работа продолжалась примерно секунд 20.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Организация параллельных потоков. Часть 2»

Представляем Вашему вниманию похожие книги на «Организация параллельных потоков. Часть 2» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Организация параллельных потоков. Часть 2»

Обсуждение, отзывы о книге «Организация параллельных потоков. Часть 2» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x