- •Тема 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_Send(), mpi_Recv(), mpi_Ssent(),mpi_Bsend(), mpi_Rsend(), mpi_Buffer_attach(), mpi_Buffer_detach().
Функции передачи с блокировкой
int MPI_Send (void* buf, int count, MPI_Datatype type, int des, int msgtag, MPI_Comm comm)
void *buf - адрес переменной или массива, откуда будет передаваться информация
int count - количество элементов в передаваемом сообщении
MPI_Datatype type - тип элементов передаваемого сообщения в терминологии MPI
int des - идентификации процесса получателя
int msgtag - идентификатор сообщения, должен совпадать у переедающего и принимающего процессов
MPI_Comm comm - идентификатор коммуникатора группы, которой принадлежат переедающие и принимающие процессы
Функция MPI_Send - передача точка-точка
При обращении к функции данные будут либо переданы, либо помещены в буфер, если процесс-получатель не готов к обмену и закончит работу успешно. Блокировка означает, что на момент реального обмена будут переданы те данные, которые были на момент обращения к функции. То есть выполняется на данные. Это обеспечивается тем, что в буфер помещаются значения. Функция возвращает 0 в случае успешного завершения, иначе код ошибки. Так как после выполнения функции нельзя быть уверенным, что сообщение было передано ввели следующие 3 функции с теми же параметрами:
- int MPI_Ssend(...) - синхронная передача, завершение работы функции возможно только после того, как сообщение полностью передано. Если процесс-получатель не готов приему, возможно бесконечное ожидание.
- int MPI_Bsend(...) - программист сам создает буфер, куда помещается передаваемое сообщение. Для этого необходимы функции:
int MPI_Buffer_attach(void* buffer, int size); - выделение буферного пространства в памяти.
int MPI_Buffer_detach(void* buffer, int* size); - освобождение буферного пространства в памяти.
- int MPI_Rsend(...) - передача по готовности. Функция сразу передает сообщение, если процесс-получатель не готов к приему, функция завершается с ошибкой. Все функции возвращают 0 или код ошибки.
Функция приема сообщения
int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int msgtag, MPI_Comm comm,
MPI_Status *status);
void *buf - адрес переменной или массива, куда будет записана полученная информация
int count - количество элементов в принятом сообщении. Можно указывать значение больше, чем будет получено, будет записано столько, сколько элементов пришло.
MPI_Datatype type - тип элементов в принятом сообщении в терминологии MPI
int source - идентификатор процесса-отправителя. Можно указывать константу
MPI_ANY_SOURCE, то есть будет получено сообщение от любого процесса, годового к обмену.
int msgtag - идентификатор сообщения, должен совпадать у переедающего и принимающего
MPI_Comm comm - идентификатор коммуникатора группы, которому принадлежат переедающие и принимающие процессы.
MPI_Status *status - указатель на структуру MPI_Status, куда будут записаны атрибуты принятого сообщения, возвращаемое значение.
Функция возвращает 0, иначе код ошибки.
При обращении к функции процесс будет стоять и ждать, пока не получит сообщение. То есть после завершения работы функции можно быть уверенным, что сообщение полностью получено.
