Организация параллельных потоков. Часть 1. Лабораторный практикум - Валентин Юльевич Арьков


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

Лабораторный практикум


Валентин Юльевич Арьков

© Валентин Юльевич Арьков, 2020


Введение

Большинство современных процессоров в настольных компьютерах и мобильных устройствах  многоядерные. Чтобы эффективно использовать такие вычислительные ресурсы, необходимо составлять параллельные программы. Для этого можно задействовать параллельные потоки либо параллельные процессы.

В данной работе рассматривается технология параллельного программирования потоков Microsoft Windows встроенными средствами, без специальных библиотек. Для составления и компиляции программ на Си используется бесплатная интегрированная среда разработки Microsoft Visual StudioCommunity Edition.

Общие теоретические сведения об организации параллельных вычислений можно найти в соответствующей литературе [16]. В данной работе мы рассматриваем только основы организации параллельных потоков.

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.

Дальше