- •Тема 1. Введение в архитектуру многопроцессорных вычислительных систем
- •Необходимость введение классификации параллельных вычислительных систем. Требования, которым должна удовлетворять классификации.
- •Классификация м. Флинна. Достоинства и недостатки.
- •Компьютеры с разделенной памятью: mpp-системы. Принципиальная схема. Примеры mpp-систем.
- •Компьютеры с общей памятью: smp-системы. Многоядерные системы. Принципиальная схема. Примеры smp-систем.
- •Системы с неоднородным доступом к памяти: ccNuma-системы. Принципиальная схема.
- •Кластерные системы. Кластер игэу. Схема кластера. Основные характеристики.
- •Тема 2. Система программирования mpi
- •Mpi. Характеристика системы. Основные понятия mpi.
- •Константы. Типы. Сообщения, атрибуты сообщения. Структура mpi_Status.
- •Основные функции mpi: mpi_Init(), mpi_Finalize(), mpi_Wtime().
- •Функции работы с коммуникатором: mpi_Comm_size(), mpi_Comm_rank().
- •Функции коллективного взаимодействия процессов: mpi_Bcast(), mpi_Barrier(), mpi_Reduce(),mpi_Allreduce(),(), mpi_Scan(),. Коллективные операции.
- •Функции обмена с блокировкой: mpi_Send(), mpi_Recv(), mpi_Ssent(),mpi_Bsend(), mpi_Rsend(), mpi_Buffer_attach(), mpi_Buffer_detach().
- •Тема 3. Система программирования OpenMp
- •Система программирования OpenMp. Понятие нити. Структура OpenMp-программы. Схема fork/join. Понятие директивы, клаузы. Классы переменных.
- •Директива OpenMp определения параллельной области. Клаузы.
- •Директива для параллельного выполнения циклов. Клаузы.
- •Директива для однократного выполнения участка кода. Клаузы.
- •Директива для параллельного выполнения независимых фрагментов программы. Клаузы.
- •Директива синхронизации.
- •Директива выполнения блока программы нитью-«мастер».
- •Атомарная директива.
- •Директива создания критической секции. Именованная критическая секция.
- •Директивы flush, ordered, threadprivate.
- •Функции OpenMp.
- •Тема 4. Нейрокомпьютерные системы
- •Обучение простейшего персептрона распознаванию двух образов.
- •Отображение
- •Реакция на образ
- •Блок подготовки
- •Блок обучения
- •Блок проверки
- •Функции активации.
- •Топологии нейронных сетей.
- •Алгоритмы обучения. Методы Хебба.
- •Ассоциативная память нейронных сетей.
- •Тема 5. Параллельные вычисления
- •Виды параллелизма.
- •Ускорение вычислений. Основной закон Амдала. Закон Густавсона-Барсиса.
- •Сетевой закон Амдала. Недостатки закона Амдала.
- •Решение уравнения теплопроводности на мвс. Постановка задачи. Расчетные формулы. Параллельный алгоритм. Распределение точек по процессам. Обработка стыков. Ускорение и точность вычислений.
- •Тема 6 Технология cuda.
- •Основные термины: концепция simd, мультипроцессор, устройство (device), хост (host), ядро (kernel). Организация потоков.
- •Архитектура устройства, виды памяти.
- •Расширения языка с. Спецификаторы функций, спецификаторы переменных, добавленные типы.
- •Функции cuda: функция вызова ядра, функции работы с памятью.
- •Функции определения времени вычислений.
- •Пример программы на cuda: решение системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4.
Константы. Типы. Сообщения, атрибуты сообщения. Структура mpi_Status.
Константы MPI
MPI_SUCCESS - константа, в которую записывается результат работы функции, если равно 0, то функция удачно завершила работу, иначе функция возвращает ошибку.
MPI_COMM_WORLD - идентификатор коммуникатора всеобъемлющей группы, которая стартует при запуске MPI-программы
MPI_ANY_SOURCE - идентификатор любого процесса отправителя
MPI_ANY_TAG - идентификатор сообщения с любым идентификатором, с любым тегом
MPI_Datatype - системный тип для обозначения типа переменных в терминологии MPI
MPI_Comm - системный тип для описания коммуникаторов
MPI_BSEND_OVERHEAD - константа для буфера, используемого функцией MPI_Bsend (#define MPI_BSEND_OVERHEAD 512)
MPI_Op - системный тип для описания глобальных операций
Обозначение глобальной операции |
Описание глобальной операции |
MPI_MAX |
Нахождение максимального значения |
MPI_MIN |
Минимальное значение |
MPI_SUM |
Сумма |
MPI_PROD |
Произведение |
MPI_LAND |
Логическое И (конъюнкция) |
MPI_BAND |
Побитовая конъюнкция |
MPI_LOR |
Логическое ИЛИ (дизъюнкция) |
MPI_BOR |
Побитовая дизъюнкция |
MPI_LXOR |
Лог. XOR |
MPI_BXOR |
Побит. XOR |
Тип С/С++ |
Тип MPI_Datatype |
char |
MPI_CHAR |
int |
MPI_INT |
float |
MPI_FLOAT |
double |
MPI_DOUBLE |
long double |
MPI_LONG_DOUBLE |
C
труктура
MPI_Status. Сообщение MPI
Сообщение - набор данных определенного типа.
Сообщение имеет атрибуты, важные из этих атрибутов: идентификатор сообщения или тег
сообщения: msgtag
Тег сообщения у перенимающего или переедающего сообщения должен совпадать
В структуре MPI_Status прописаны атрибуты принятого сообщения. Она имеет вид:
typedef struct { int count;//количество байт в принятом сообщении
int MPI_SOURCE;//идентификатор процесса отправителя
int MPI_TAG;//идентификатор сообщения
int MPI_ERROR;//код ошибки } MPI_Status;
Пусть в программе описана структура MPI_Status, которую назовем status. Для обращения к
полям структуры будем:
1) для определения идентификатора процесса отправителя status.MPI_SOURCE
2) для определения тэга сообщения status.MPI_TAG
3) для определения кода ошибки status.MPI_ERROR
4) поле count является private, поэтому для определения числа элементов в принятом сообщении пользуются функцией: int MPI_Bit_count(MPI_Status *status, MPI_Datatype type, int *count)
MPI_Status *status - адрес структуры типа MPI_Status
MPI_Datatype type - тип элементов в принятом сообщении в терминологии MPI
int *count - адрес переменной целого типа, куда будет записано количество элементов в принятом сообщении.
Основные функции mpi: mpi_Init(), mpi_Finalize(), mpi_Wtime().
Функция инициализации параллельной секции
int MPI_Init(int *argc, char **argv);
При запуске функции инициализируется параллельная секция. Всем процессам параллельного приложения передаются параметры main(), в которых указывается общее число процессов в приложении. Функция возвращает код ошибки или 0 в случае успешного завершения.
Функция деинициализации параллельной секции
int MPI_Finalize();
Процесс, обратившийся к этой функции должен завершить работу с другими параллельными функциями. После выполнения данной функции нельзя обращаться к параллельным функциям и к MPI_Init тоже (для кластера ИГЭУ!). Функция возвращает код ошибки или 0 в случае успешного завершения.
Функция определения времени
double MPI_Wtime();
Функция возвращает время в секундах, прошедшее с некоторого момента в прошлом.
Для определения времени вычислений выполним:
double tn, tk, delfaf;
tn=MPI_Wtime();
//вычислительный блок
tk=MPI_Wtime();
delfaf=tk-tn;
