Организация параллельных потоков. Часть 1. Лабораторный практикум
© Валентин Юльевич Арьков, 2020
ISBN 978-5-4498-3657-1
Создано в интеллектуальной издательской системе Ridero
Введение
Большинство современных процессоров в настольных компьютерах и мобильных устройствах – многоядерные. Чтобы эффективно использовать такие вычислительные ресурсы, необходимо составлять параллельные программы. Для этого можно задействовать параллельные потоки либо параллельные процессы.
В данной работе рассматривается технология параллельного программирования потоков Microsoft Windows встроенными средствами, без специальных библиотек. Для составления и компиляции программ на Си используется бесплатная интегрированная среда разработки Microsoft Visual Studio Community Edition.
Общие теоретические сведения об организации параллельных вычислений можно найти в соответствующей литературе [1—6]. В данной работе мы рассматриваем только основы организации параллельных потоков.
1. Общие сведения о работе
Целью работы является изучение технологии программирования параллельных потоков Microsoft Windows.
Основные этапы выполнения работы:
– Процессы и потоки
– Процессоры и ядра
– Компилятор
– Параллельные потоки
– Состояние процесса
– Время выполнения
– Ускорение и эффективность
– Привязка задач к ядрам
– «Гонка» за доступ к данным
– Критическая секция
По результатам выполнения работы оформляется отчёт.
1.1. Составление и оформление отчёта
Отчёт оформляется в виде рабочей книги Microsoft Excel.
Состав отчёта:
– Титульный лист
– Оглавление
– Остальные листы
Для удобства навигации вкладки листов нумеруем.
В оглавлении делаем ссылку на каждый лист.
Подробнее оформление отчёта в пакете Excel описано в работе [7].
Задание. Создайте файл отчёта и оформите титульный лист и оглавление.
1.2. Ключевые определения
Перед началом выполнения работы необходимо определиться с основными терминами.
Задание. Выясните, что означают перечисленные термины:
– прикладная программа (application);
– алгоритм программы
– исходный текст программы;
– компилятор;
– вычислительный процесс (process);
– поток исполнения / выполнения (thread);
– многопоточность;
– центральный процессор (CPU);
– ядро микропроцессора (Core);
– HyperThreading;
– виртуальный процессор.
Заметим, что независимо от физической конфигурации компьютера, операционная система представляет все вычислительные устройства как виртуальные процессоры.
Задание. Запустите Task Manager (Диспетчер задач) и определите следующие параметры:
– число виртуальных процессоров;
– размер доступной оперативной памяти;
– число выполняемых процессов;
– число потоков – общее и в каждом процессе;
– уровень загрузки процессора в целом и каждого виртуального процессора.
2. Организация вычислительных экспериментов
2.1. Конфигурация компьютера
Возможности улучшения вычислительной производительности компьютера ограничены его конфигурацией. Поэтому нам предстоит познакомиться со своим компьютером.
Задание. Ознакомьтесь с конфигурацией компьютера и параметрами системы с помощью следующих средств:
– свойства компьютера;
– диспетчер устройств;
– параметр окружения NUMBER OF PROCESSORS;
– сайт производителя процессора;
– диспетчер задач.
Опишите в отчёте конфигурацию и состояние системы:
– процессор;
– разрядность процессора;
– число ядер;
– поддержка HyperThreading;
– версия операционной системы;
– разрядность операционной системы;
– число выполняемых потоков на ядро;
– число виртуальных процессоров;
– объём занятой оперативной памяти;
– объём виртуальной памяти
– наличие подкачки.
2.2. Среда разработки
Данная работа выполняется с использованием среды разработки Microsoft Visual Studio. Далее рассматриваются примеры программ на языке программирования С, хотя компилятор поддерживает также и С++.
В работе используется бесплатная версия среды разработки:
Community Edition.
Дистрибутив находится на сайте
VisualStudio.com.
Рекомендуется использовать английскую версию среды программирования.
Обратите внимание на название каталога, в который установлен компилятор.
В случае 32-разрядной ОС можно установить только 32-разрядные приложения. Каталог для установки:
Program Files.
В случае 64-разрядной ОС можно установить как 32-разрядные, так и 64-разрядные приложения. Каталоги для установки – соответственно:
Program Files (x86)
Program Files.
Далее мы будем создавать именно 32-разрядные приложения, причём работающие в командной строке.
Задание. Проверьте наличие компилятора на компьютере. Если компилятор установлен, запустите его. Если компилятор отсутствует, установите его.
Опишите в отчёте параметры компилятора:
– версия;
– язык интерфейса;
– разрядность.
3. Приёмы программирования
3.1. Программа Hello, World!
Hello, World – это первая программа для знакомства со средой разработки и процедурой компиляции.
Запустите Visual Studio. Создайте новый проект.
File – New – Project.
Выберите создание консольного приложения:
Create a new project – Empty project – Next.
Укажите название проекта:
Project name.
Каталог для хранения проекта:
Location.
Ставим галочку в строке:
Place solution and project in the same directory.
Нажмите кнопку
Create.
Добавьте файл с исходным текстом к проекту:
Solution Explorer – Source Files – [Контекстное меню] – Add – New Item.
В окне
Add New Item
установите
Visual C++ – Code – C++ File (.cpp).
Укажите название файла и его расположение. Нажмите кнопку Add.
Введите текст программы (рис. 3.1).
Рис. 3.1. Программа Hello, World
Сохраните файл, нажав комбинацию клавиш:
Ctrl + S.
Установите конфигурацию проекта
Release;
х86.
Чтобы скомпилировать исполняемый файл, вызываем в верхнем меню
Build – Solution.
Для запуска программы на выполнение используем комбинацию клавиш:
[Ctrl + F5].
Сохранение файла вызывается с помощью следующей комбинации клавиш:
[Ctrl + S].
Рекомендуем создавать проекты в подкаталогах одного рабочего каталога. Названия проектов, файлов и каталогов должны быть короткими и информативными. Чем короче путь к файлу, тем легче будет до него добраться в командной строке.
Задание. Ознакомьтесь с историей программы «Hello, World» на сайте Википедии. Выясните, как правильно переводится эта фраза на русский язык.
Задание. Прочитайте в Википедии статью Консоль. Выясните, что означает слово «консоль».
Задание. Создайте проект и запустите программу на выполнение:
– Создайте новый проект.
– Добавьте файл типа *.С.
– Введите исходный текст программы.
– Скомпилируйте проект и запустите программу.
– Скомпилируйте проект.
– Запустите программу из среды разработки.
– Запустите программу из Проводника Windows.
Для работы в командной строке нужно запустить командное окно:
[Win + R] – cmd – OK.
Чтобы перейти на нужный диск, введите букву и двоеточие. Например, для перехода на диск D:, нужно ввести
d:
Переход между каталогами – команда cd.
Чтобы подняться один на уровень выше по файловому дереву, используем команду
cd..
Просмотр содержимого каталога:
dir.
Для запуска программы на выполнение введите название программы
Задание. Запустите командную строку, перейдите в каталог своей программы и запустите её на выполнение.
3.2. Диапазоны значений переменных
В нашей работе мы будем иметь дело с большими целыми числами – счётчиками и суммами. Поэтому при объявлении типа переменной нужно учитывать максимальное значение, которое можно будет записать в эту переменную.
Диапазон значений переменной зависит от количества байт. Стандартные целые типы используют 1, 2, 4 или 8 байт.
Кроме количества байтов, нужно учитывать наличие знака:
– числа со знаком (signed)
– числа без знака (unsigned).
Зная эти параметры, можно приблизительно оценить диапазон возможных значений. Для грубых оценок можно считать, что 2^10 приблизительно равно 10^3.
Задание. Составьте список целых типов и оцените диапазон их значений.
3.3. Параметры командной строки
Программу (исполняемый файл типа *.EXE) обычно запускают на выполнение несколькими способами:
– среда разработки;
– Проводник Windows;
– файловый менеджер типа FAR.
При запуске программы на выполнение из Проводника обычно ограничиваются указанием имени исполняемого файла.
Задание. Запустите свою программу тремя перечисленными способами.
Командная строка – это один из первых видов компьютерных интерфейсов. Он может также упоминаться под другими названиями:
– командное окно;
– интерпретатор командной строки;
– командный процессор;
– command prompt.
При запуске программы в командной строке у нас появляются дополнительные возможности. После имени исполняемого файла file. exe можно дополнительно указать любые параметры param1, param2, param3, напечатав их через пробел:
file param1 param2 param3.
Расширение имени файла EXE можно не указывать.
В данной работе мы будем использовать параметры (аргументы) командной строки. Эти параметры попадают «внутрь» программы и доступны для использования во время выполнения программы.