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

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

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

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

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

Организация параллельных потоков. Часть 2 - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Валентин Арьков
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Delimiters — Tab.

Вспоминаем, что при выводе на экран мы использовали табуляцию.

Нажимаем Next(рис. 4.20).

Рис. 4.20. Второй шаг импорта

После импорта файла получаем таблицу в Excel(рис. 4.21).

Выделяем диапазон ячеек — заголовок и данные.

Выбираем в верхнем меню форматирование таблицы:

Home — Styles — Format as Table.

Выбираем оформление таблицы.

Рис. 4.21. Таблица из файла

Задание.Загрузите текстовый файл в Excel.

Сортируем таблицу по колонке S(рис. 4.22).

Для этого нажимаем кнопку в виде стрелочки справа от названия столбца. Выбираем в выпадающем списке сортировку по возрастанию:

Sort Smallest to Largest.

Изучаем порядок выполнения потоков.

Наблюдаем совершенно непредсказуемую картину.

Рис. 4.22. Сортировка по S

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

4.2.4. Локальные копии переменной

Вернёмся к редукции и рассмотрим локальные копии общей переменной.

Итак, в директиве parallelмы организуем редукцию переменной Sпутём сложения частичных, промежуточных значений:

reduction (+:S).

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

Мало того, в момент создания локальная копия ещё и получает начальное значение. Это называется ИНИЦИАЛИЗАЦИЯ — «присвоение начального значения». Если редукция делается путём суммирования, то локальные копии получают нулевое начальное значение.

Немного изменим предыдущею программу (рис. 4.23).

Перед началом параллельной области присвоим общей переменной Sначальное значение 10 (строка 5).

Добавляем редукцию для параллельной области (строка 7).

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

После завершения параллельной области и редукции выводим собранное из локальных копий суммарное значение общей переменной S(строка 12).

На экран дополнительно выводим столбец значений счётчика цикла i (строки 6, 10, 12).

После завершения цикла в колонке значений счётчика выводим число 20 (строка 12). Обратим внимание, что при выполнении цикла счётчик принимает значения от 0 до 19.

Рис. 4.23. Отслеживание инициализации

Далее проделаем знакомые нам шаги по выполнению программы и анализу результатов в Excel.

Компилируем программу и убеждаемся в отсутствии ошибок.

Переходим в командное окно.

Задаём три потока:

set OMP_NUM_THREADS=3.

Запускаем программу на выполнение.

Перенаправляем вывод в текстовый файл.

Загружаем файл в Excel.

Форматируем таблицу и сортируем по номеру потока (рис. 4.24).

Теперь можно немного отдышаться и рассмотреть результаты работы.

При входе в параллельную область каждая локальная копия переменной Sполучила нулевое значение. На каждой итерации цикла к ней прибавляли по единичке.

Нулевой и первый потоки получили в своё распоряжение по семь итераций, второй поток — шесть. Так что работу поделили почти поровну.

После выхода из параллельной области частичные суммы сложили, да ещё к этой сумме добавили первоначальное значение 10:

S = 7 +7 +6 +10 = 30.

Так работает редукция в параллельном цикле for.

Рис. 4.24. Изменение локальных копий

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

4.3. Вычислительная нагрузка

В этом разделе мы познакомимся с тем, как распределяется вычислительная нагрузка между виртуальными процессорами. Проще говоря, между ядрами процессора.

Наша конечная цель — загрузить все ядра работой на 100%. Только тогда можно будет измерить эффективность распараллеливания.

4.3.1. Полная загрузка

Первый эксперимент — полная загрузка процессора.

Чтобы обеспечить работой все вычислительные элементы процессора, сделаем побольше итераций в нашем цикле. А для этого придётся взять другой целый тип счётчика — «длинное-длинное целое»:

long long.

Это восемь байт, или 8 * 8 = 64 бита. Максимальное значение соответствует 2 64. Для целого числа со знаком получится раза в два поменьше, но всё равно хорошо.

Текст программы с нашей «большой задачей» приведён на рис. 4.25.

Мы объявляем тип счётчика и суммы (строка 4).

Число итераций нашего цикла берём много, но не больше максимально возможного (строка 7).

Тело цикла — прибавление единичек к сумме (строка 8).

Рис. 4.25. «Большая» задача

Компилируем программу и переходим в командную строку.

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

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

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).

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

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

Интервал:

Закладка:

Сделать


Валентин Арьков читать все книги автора по порядку

Валентин Арьков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Организация параллельных потоков. Часть 2, автор: Валентин Арьков. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x